diff --git a/CMSCncLib/CndexLinkDotNet.dll b/CMSCncLib/CndexLinkDotNet.dll new file mode 100644 index 00000000..2ab44b83 Binary files /dev/null and b/CMSCncLib/CndexLinkDotNet.dll differ diff --git a/CMSCncLib/ExtLib/Siemens.Sinumerik.Operate.Services.Wrapper.dll b/CMSCncLib/ExtLib/Siemens.Sinumerik.Operate.Services.Wrapper.dll new file mode 100644 index 00000000..b8d54cf9 Binary files /dev/null and b/CMSCncLib/ExtLib/Siemens.Sinumerik.Operate.Services.Wrapper.dll differ diff --git a/CMSCncLib/ExtLib/Siemens.Sinumerik.Operate.Services.dll b/CMSCncLib/ExtLib/Siemens.Sinumerik.Operate.Services.dll new file mode 100644 index 00000000..f00469d5 Binary files /dev/null and b/CMSCncLib/ExtLib/Siemens.Sinumerik.Operate.Services.dll differ diff --git a/CVCncLib/CVCncLib.dll b/CVCncLib/CVCncLib.dll index 5b7b3bca..00800ec5 100644 Binary files a/CVCncLib/CVCncLib.dll and b/CVCncLib/CVCncLib.dll differ diff --git a/CVCncLib/testSam.XmlSerializers.dll b/CVCncLib/testSam.XmlSerializers.dll new file mode 100644 index 00000000..5a74cc59 Binary files /dev/null and b/CVCncLib/testSam.XmlSerializers.dll differ diff --git a/IOB-OPC-UA/.editorconfig b/IOB-OPC-UA/.editorconfig new file mode 100644 index 00000000..ad0f7ab5 --- /dev/null +++ b/IOB-OPC-UA/.editorconfig @@ -0,0 +1,258 @@ +# Rules in this file were initially inferred by Visual Studio IntelliCode from the UA-.NETStandard +# codebase based on best match to current usage at 12/15/2019 +# You can modify the rules from these initially generated values to suit your own policies +# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference + +############################### +# Core EditorConfig Options # +############################### + +root = true + +# All files +[*] +indent_style = space + +# Code files +[*.{cs,csx,vb,vbx}] +indent_size = 4 +charset = utf-8 +trim_trailing_whitespace = true +end_of_line = crlf +insert_final_newline = true + +# Xml project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# Xml config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 + +# JSON files +[*.json] +indent_size = 2 + +############################### +# .NET Coding Conventions # +############################### + +#### C# Formatting Rules #### +[*.cs] + +# Null-checking preferences +csharp_style_throw_expression = true : suggestion +csharp_style_conditional_delegate_call = true : suggestion + +# Modifier preferences +# require braces to be on a new line for control_blocks, types, and methods (also known as "Allman" style) +csharp_new_line_before_open_brace = control_blocks, types, methods, properties, accessors +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async : suggestion +csharp_new_line_before_catch = true +csharp_new_line_before_else = true : suggestion +csharp_new_line_before_finally = true : suggestion +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = false +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +#Formatting - organize using options + +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false + +#Formatting - spacing options + +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false + +#Formatting - wrapping options + +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#Pattern - matching preferences +csharp_style_pattern_local_over_anonymous_function = true : suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true : suggestion +csharp_style_pattern_matching_over_as_with_null_check = true : suggestion + +#Style - expression bodied member options +csharp_style_expression_bodied_operators = false : silent +csharp_style_expression_bodied_indexers = true : silent +csharp_style_expression_bodied_accessors = true : suggestion +csharp_style_expression_bodied_constructors = false : suggestion +csharp_style_expression_bodied_methods = false : suggestion +csharp_style_expression_bodied_properties = true : silent + +#Style - expression level options +csharp_prefer_braces = true : silent +csharp_style_deconstructed_variable_declaration = true : suggestion +csharp_prefer_simple_default_expression = true : suggestion +csharp_style_inlined_variable_declaration = false : suggestion +dotnet_style_predefined_type_for_member_access = false : suggestion + +#Style - implicit and explicit types +csharp_style_var_for_built_in_types = false : silent +csharp_style_var_when_type_is_apparent = true : silent +csharp_style_var_elsewhere = false : silent + +#Style - language keyword and framework type options + +#prefer the language keyword for local variables, method parameters, and class members, +#instead of the type name, for types that have a keyword to represent them +dotnet_style_predefined_type_for_locals_parameters_members = true : suggestion + +#Style - qualification options +dotnet_style_qualification_for_event = false : suggestion +dotnet_style_qualification_for_field = false : suggestion +dotnet_style_qualification_for_method = false : suggestion +dotnet_style_qualification_for_property = false : suggestion + +#Style - Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity : silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity : silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity : silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary : silent + +#Style - Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members : silent +dotnet_style_readonly_field = true : suggestion + +#Style - Expression-level preferences +dotnet_style_object_initializer = true : suggestion +dotnet_style_collection_initializer = true : suggestion +dotnet_style_explicit_tuple_names = true : suggestion +dotnet_style_null_propagation = true : suggestion +dotnet_style_coalesce_expression = true : suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true : silent +dotnet_style_prefer_inferred_tuple_names = true : suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true : suggestion +dotnet_style_prefer_auto_properties = true : silent +dotnet_style_prefer_conditional_expression_over_assignment = true : suggestion +dotnet_style_prefer_conditional_expression_over_return = true : suggestion + +# Naming rules + +# Private Constants are PascalCase and start with k +dotnet_naming_rule.constants_private_should_start_with_k.severity = suggestion +dotnet_naming_rule.constants_private_should_start_with_k.symbols = constants_with_k +dotnet_naming_rule.constants_private_should_start_with_k.style = constants_with_k_style + +dotnet_naming_symbols.constants_with_k.applicable_kinds = field, local +dotnet_naming_symbols.constants_with_k.applicable_accessibilities = private, protected, private_protected, protected_friend +dotnet_naming_symbols.constants_with_k.required_modifiers = const + +dotnet_naming_style.constants_with_k_style.capitalization = pascal_case +dotnet_naming_style.constants_with_k_style.required_prefix = k + +# Constants are PascalCase +dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style + +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.applicable_accessibilities = public, internal, protected_internal +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.constant_style.capitalization = pascal_case + +# Non-private readonly fields are PascalCase +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style + +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly + +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case + +# Non-private static fields are PascalCase +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style + +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static + +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +# Private static fields are camelCase and start with s_ +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.applicable_accessibilities = private, protected, private_protected, protected_friend +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +dotnet_naming_style.static_field_style.required_prefix = s_ + +# Private instance fields are camelCase and start with m_ +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field +dotnet_naming_symbols.instance_fields.applicable_accessibilities = private, protected, private_protected, protected_friend + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = m_ + +# Locals and parameters are camelCase +dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local + +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Local functions are PascalCase +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function + +dotnet_naming_style.local_function_style.capitalization = pascal_case + +# By default, name items with PascalCase +dotnet_naming_rule.members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members +dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.all_members.applicable_kinds = * + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + diff --git a/IOB-OPC-UA/.gitattributes b/IOB-OPC-UA/.gitattributes new file mode 100644 index 00000000..277f6f18 --- /dev/null +++ b/IOB-OPC-UA/.gitattributes @@ -0,0 +1,30 @@ +# Default behavior: if Git thinks a file is text (as opposed to binary), it +# will normalize line endings to LF in the repository, but convert to your +# platform's native line endings on checkout (e.g., CRLF for Windows). +* text=auto + +# Explicitly declare text files you want to always be normalized and converted +# to native line endings on checkout. E.g., +# *.txt text + +# Declare files that will always have CRLF line endings on checkout. E.g., +#*.sln text eol=crlf + +# Declare files that will always have LF line endings on checkout. E.g., +*.sh text eol=lf +*.json text eol=lf + +# Denote all files that should not have line endings normalized, should not be +# merged, and should not show in a textual diff. +*.docm binary +*.docx binary +*.ico binary +*.lib binary +*.png binary +*.pptx binary +*.snk binary +*.vsdx binary +*.xps binary + +# OPC UA +*.uanodes binary diff --git a/IOB-OPC-UA/.gitignore b/IOB-OPC-UA/.gitignore new file mode 100644 index 00000000..ff7bf11b --- /dev/null +++ b/IOB-OPC-UA/.gitignore @@ -0,0 +1,248 @@ +## 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 +*.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/ + +# OPC UA Sample app certificate stores +OPC\ Foundation/ +*.der +*.pfx +/UA-NetStandard.VC.db +*.log.txt +/ComIOP/Wrapper/ProxyServer/OpcUaComProxyServer.h +*.VC.db +/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll +/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.xml +/SampleApplications/Samples/OPCOutput +!**/Assets/*.* diff --git a/IOB-OPC-UA/.whitesource b/IOB-OPC-UA/.whitesource new file mode 100644 index 00000000..fca75bbf --- /dev/null +++ b/IOB-OPC-UA/.whitesource @@ -0,0 +1,8 @@ +{ + "checkRunSettings": { + "vulnerableCheckRunConclusionLevel": "failure" + }, + "issueSettings": { + "minSeverityLevel": "HIGH" + } +} \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/AttrbuteListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/AttrbuteListCtrl.Designer.cs new file mode 100644 index 00000000..3228052a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/AttrbuteListCtrl.Designer.cs @@ -0,0 +1,65 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class AttributeListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/AttributeListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/AttributeListCtrl.cs new file mode 100644 index 00000000..00c26a47 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/AttributeListCtrl.cs @@ -0,0 +1,417 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; + + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of attributes and their values. + /// + public partial class AttributeListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + /// + /// Initializes a new instance of the class. + /// + public AttributeListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + } + + #region Private Fields + private Session m_session; + + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Value", HorizontalAlignment.Left, null } + }; + + private class ItemInfo + { + public NodeId NodeId; + public uint AttributeId; + public string Name; + public DataValue Value; + } + #endregion + + /// + /// Initializes the control with a set of items. + /// + public void Initialize(Session session, ExpandedNodeId nodeId) + { + ItemsLV.Items.Clear(); + m_session = session; + + if (m_session == null) + { + return; + } + + ILocalNode node = m_session.NodeCache.Find(nodeId) as ILocalNode; + + if (node == null) + { + return; + } + + uint[] attributesIds = Attributes.GetIdentifiers(); + + for (int ii = 0; ii < attributesIds.Length; ii++) + { + uint attributesId = attributesIds[ii]; + + if (!node.SupportsAttribute(attributesId)) + { + continue; + } + + ItemInfo info = new ItemInfo(); + + info.NodeId = node.NodeId; + info.AttributeId = attributesId; + info.Name = Attributes.GetBrowseName(attributesId); + info.Value = new DataValue(StatusCodes.BadWaitingForInitialData); + + ServiceResult result = node.Read(null, attributesId, info.Value); + + if (ServiceResult.IsBad(result)) + { + info.Value = new DataValue(result.StatusCode); + } + + AddItem(info); + } + + IList references = node.References.Find(ReferenceTypes.HasProperty, false, true, m_session.TypeTree); + + for (int ii = 0; ii < references.Count; ii++) + { + IReference reference = references[ii]; + + ILocalNode property = m_session.NodeCache.Find(reference.TargetId) as ILocalNode; + + if (property == null) + { + return; + } + + ItemInfo info = new ItemInfo(); + + info.NodeId = property.NodeId; + info.AttributeId = Attributes.Value; + info.Name = Utils.Format("{0}", property.DisplayName); + info.Value = new DataValue(StatusCodes.BadWaitingForInitialData); + + ServiceResult result = property.Read(null, Attributes.Value, info.Value); + + if (ServiceResult.IsBad(result)) + { + info.Value = new DataValue(result.StatusCode); + } + + AddItem(info); + } + + UpdateValues(); + } + + /// + /// Updates the values from the server. + /// + private void UpdateValues() + { + ReadValueIdCollection valuesToRead = new ReadValueIdCollection(); + + foreach (ListViewItem item in ItemsLV.Items) + { + ItemInfo info = item.Tag as ItemInfo; + + if (info == null) + { + continue; + } + + ReadValueId valueToRead = new ReadValueId(); + + valueToRead.NodeId = info.NodeId; + valueToRead.AttributeId = info.AttributeId; + valueToRead.Handle = item; + + valuesToRead.Add(valueToRead); + } + + DataValueCollection results; + DiagnosticInfoCollection diagnosticInfos; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + valuesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, valuesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToRead); + + for (int ii = 0; ii < valuesToRead.Count; ii++) + { + ListViewItem item = (ListViewItem)valuesToRead[ii].Handle; + ItemInfo info = (ItemInfo)item.Tag; + info.Value = results[ii]; + UpdateItem(item, info); + } + + AdjustColumns(); + } + + /// + /// Formats the value of an attribute. + /// + private string FormatAttributeValue(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.NodeClass: + { + if (value != null) + { + return String.Format("{0}", Enum.ToObject(typeof(NodeClass), value)); + } + + return "(null)"; + } + + case Attributes.DataType: + { + NodeId datatypeId = value as NodeId; + + if (datatypeId != null) + { + INode datatype = m_session.NodeCache.Find(datatypeId); + + if (datatype != null) + { + return String.Format("{0}", datatype.DisplayName.Text); + } + else + { + return String.Format("{0}", datatypeId); + } + } + + return String.Format("{0}", value); + } + + case Attributes.ValueRank: + { + int? valueRank = value as int?; + + if (valueRank != null) + { + switch (valueRank.Value) + { + case ValueRanks.Scalar: return "Scalar"; + case ValueRanks.OneDimension: return "OneDimension"; + case ValueRanks.OneOrMoreDimensions: return "OneOrMoreDimensions"; + case ValueRanks.Any: return "Any"; + + default: + { + return String.Format("{0}", valueRank.Value); + } + } + } + + return String.Format("{0}", value); + } + + case Attributes.MinimumSamplingInterval: + { + double? minimumSamplingInterval = value as double?; + + if (minimumSamplingInterval != null) + { + if (minimumSamplingInterval.Value == MinimumSamplingIntervals.Indeterminate) + { + return "Indeterminate"; + } + + else if (minimumSamplingInterval.Value == MinimumSamplingIntervals.Continuous) + { + return "Continuous"; + } + + return String.Format("{0}", minimumSamplingInterval.Value); + } + + return String.Format("{0}", value); + } + + case Attributes.AccessLevel: + case Attributes.UserAccessLevel: + { + byte accessLevel = Convert.ToByte(value); + + StringBuilder bits = new StringBuilder(); + + if ((accessLevel & AccessLevels.CurrentRead) != 0) + { + bits.Append("Readable"); + } + + if ((accessLevel & AccessLevels.CurrentWrite) != 0) + { + if (bits.Length > 0) + { + bits.Append(" | "); + } + + bits.Append("Writeable"); + } + + if ((accessLevel & AccessLevels.HistoryRead) != 0) + { + if (bits.Length > 0) + { + bits.Append(" | "); + } + + bits.Append("History Read"); + } + + if ((accessLevel & AccessLevels.HistoryWrite) != 0) + { + if (bits.Length > 0) + { + bits.Append(" | "); + } + + bits.Append("History Update"); + } + + if (bits.Length == 0) + { + bits.Append("No Access"); + } + + return String.Format("{0}", bits); + } + + case Attributes.EventNotifier: + { + byte notifier = Convert.ToByte(value); + + StringBuilder bits = new StringBuilder(); + + if ((notifier & EventNotifiers.SubscribeToEvents) != 0) + { + bits.Append("Subscribe"); + } + + if ((notifier & EventNotifiers.HistoryRead) != 0) + { + if (bits.Length > 0) + { + bits.Append(" | "); + } + + bits.Append("History"); + } + + if ((notifier & EventNotifiers.HistoryWrite) != 0) + { + if (bits.Length > 0) + { + bits.Append(" | "); + } + + bits.Append("History Update"); + } + + if (bits.Length == 0) + { + bits.Append("No Access"); + } + + return String.Format("{0}", bits); + } + + default: + { + return String.Format("{0}", value); + } + } + } + + #region Overridden Methods + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + ItemInfo info = item as ItemInfo; + + if (info == null) + { + base.UpdateItem(listItem, item); + return; + } + + listItem.SubItems[0].Text = Utils.Format("{0}", info.Name); + + if (StatusCode.IsBad(info.Value.StatusCode)) + { + listItem.SubItems[1].Text = Utils.Format("{0}", info.Value.StatusCode); + } + else + { + listItem.SubItems[1].Text = FormatAttributeValue(info.AttributeId, info.Value.Value); + } + + if (info.AttributeId != Attributes.Value) + { + listItem.ImageKey = GuiUtils.Icons.Attribute; + } + else + { + listItem.ImageKey = GuiUtils.Icons.Property; + } + + listItem.Tag = info; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseListCtrl.Designer.cs new file mode 100644 index 00000000..d1c68649 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseListCtrl.Designer.cs @@ -0,0 +1,65 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class BrowseListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseListCtrl.cs new file mode 100644 index 00000000..5949e63f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseListCtrl.cs @@ -0,0 +1,150 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of references for a node. + /// + public partial class BrowseListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + /// + /// Initializes a new instance of the class. + /// + public BrowseListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + } + + #region Private Fields + private Session m_session; + + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Type", HorizontalAlignment.Left, null }, + new object[] { "Target", HorizontalAlignment.Left, null } + }; + #endregion + + /// + /// Initializes the control with a set of items. + /// + public void Initialize(Session session, ExpandedNodeId nodeId) + { + ItemsLV.Items.Clear(); + m_session = session; + + if (m_session == null) + { + return; + } + + ILocalNode node = m_session.NodeCache.Find(nodeId) as ILocalNode; + + if (node == null) + { + return; + } + + IList references = null; + + references = node.References.Find(ReferenceTypes.NonHierarchicalReferences, false, true, m_session.TypeTree); + + for (int ii = 0; ii < references.Count; ii++) + { + AddItem(references[ii]); + } + + references = node.References.Find(ReferenceTypes.NonHierarchicalReferences, true, true, m_session.TypeTree); + + for (int ii = 0; ii < references.Count; ii++) + { + AddItem(references[ii]); + } + + AdjustColumns(); + } + + #region Overridden Methods + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + IReference reference = item as IReference; + + if (reference == null) + { + base.UpdateItem(listItem, item); + return; + } + + IReferenceType referenceType = m_session.NodeCache.Find(reference.ReferenceTypeId) as IReferenceType; + + if (referenceType != null) + { + if (reference.IsInverse) + { + listItem.SubItems[0].Text = Utils.Format("{0}", referenceType.InverseName); + } + else + { + listItem.SubItems[0].Text = Utils.Format("{0}", referenceType.DisplayName); + } + } + else + { + listItem.SubItems[0].Text = Utils.Format("{0}", reference.ReferenceTypeId); + } + + INode target = m_session.NodeCache.Find(reference.TargetId) as INode; + + if (target != null) + { + listItem.SubItems[1].Text = Utils.Format("{0}", target.DisplayName); + } + else + { + listItem.SubItems[1].Text = Utils.Format("{0}", reference.TargetId); + } + + listItem.ImageKey = GuiUtils.GetTargetIcon(m_session, NodeClass.ReferenceType, null); + listItem.Tag = reference; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.Designer.cs new file mode 100644 index 00000000..430eeee8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.Designer.cs @@ -0,0 +1,171 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class BrowseTreeCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.TopPN = new System.Windows.Forms.Panel(); + this.RootBTN = new System.Windows.Forms.Button(); + this.BrowseDirectionCTRL = new System.Windows.Forms.ComboBox(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.SelectMI = new System.Windows.Forms.ToolStripMenuItem(); + this.SelectChildrenMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ReferenceTypeCTRL = new Opc.Ua.Client.Controls.ReferenceTypeCtrl(); + this.TopPN.SuspendLayout(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // NodesTV + // + this.NodesTV.ContextMenuStrip = this.PopupMenu; + this.NodesTV.LineColor = System.Drawing.Color.Black; + this.NodesTV.Location = new System.Drawing.Point(0, 24); + this.NodesTV.Size = new System.Drawing.Size(325, 192); + // + // TopPN + // + this.TopPN.Controls.Add(this.RootBTN); + this.TopPN.Controls.Add(this.ReferenceTypeCTRL); + this.TopPN.Controls.Add(this.BrowseDirectionCTRL); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(0, 0); + this.TopPN.Name = "TopPN"; + this.TopPN.Size = new System.Drawing.Size(325, 24); + this.TopPN.TabIndex = 3; + // + // RootBTN + // + this.RootBTN.Location = new System.Drawing.Point(0, 0); + this.RootBTN.Name = "RootBTN"; + this.RootBTN.Size = new System.Drawing.Size(42, 23); + this.RootBTN.TabIndex = 2; + this.RootBTN.Text = "Root"; + this.RootBTN.UseVisualStyleBackColor = true; + this.RootBTN.Click += new System.EventHandler(this.RootBTN_Click); + // + // BrowseDirectionCTRL + // + this.BrowseDirectionCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BrowseDirectionCTRL.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.BrowseDirectionCTRL.FormattingEnabled = true; + this.BrowseDirectionCTRL.Location = new System.Drawing.Point(254, 1); + this.BrowseDirectionCTRL.Name = "BrowseDirectionCTRL"; + this.BrowseDirectionCTRL.Size = new System.Drawing.Size(71, 21); + this.BrowseDirectionCTRL.TabIndex = 0; + this.BrowseDirectionCTRL.SelectedIndexChanged += new System.EventHandler(this.BrowseDirectionCTRL_SelectedIndexChanged); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SelectMI, + this.SelectChildrenMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(146, 48); + // + // SelectMI + // + this.SelectMI.Name = "SelectMI"; + this.SelectMI.Size = new System.Drawing.Size(145, 22); + this.SelectMI.Text = "Select"; + this.SelectMI.Click += new System.EventHandler(this.SelectMI_Click); + // + // SelectChildrenMI + // + this.SelectChildrenMI.Name = "SelectChildrenMI"; + this.SelectChildrenMI.Size = new System.Drawing.Size(145, 22); + this.SelectChildrenMI.Text = "Select Children"; + this.SelectChildrenMI.Click += new System.EventHandler(this.SelectChildrenMI_Click); + // + // ReferenceTypeCTRL + // + this.ReferenceTypeCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ReferenceTypeCTRL.Location = new System.Drawing.Point(48, 1); + this.ReferenceTypeCTRL.MaximumSize = new System.Drawing.Size(4096, 21); + this.ReferenceTypeCTRL.MinimumSize = new System.Drawing.Size(200, 21); + this.ReferenceTypeCTRL.Name = "ReferenceTypeCTRL"; + this.ReferenceTypeCTRL.SelectedTypeId = null; + this.ReferenceTypeCTRL.Size = new System.Drawing.Size(200, 21); + this.ReferenceTypeCTRL.TabIndex = 1; + this.ReferenceTypeCTRL.ReferenceSelectionChanged += new System.EventHandler(this.ReferenceTypeCTRL_ReferenceSelectionChanged); + // + // BrowseTreeCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Controls.Add(this.TopPN); + this.MinimumSize = new System.Drawing.Size(325, 216); + this.Name = "BrowseTreeCtrl"; + this.Size = new System.Drawing.Size(325, 216); + this.Controls.SetChildIndex(this.TopPN, 0); + this.Controls.SetChildIndex(this.NodesTV, 0); + this.TopPN.ResumeLayout(false); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel TopPN; + private Opc.Ua.Client.Controls.ReferenceTypeCtrl ReferenceTypeCTRL; + private System.Windows.Forms.ComboBox BrowseDirectionCTRL; + private System.Windows.Forms.Button RootBTN; + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem SelectMI; + private System.Windows.Forms.ToolStripMenuItem SelectChildrenMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.cs new file mode 100644 index 00000000..363c1879 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.cs @@ -0,0 +1,488 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a hierarchy of nodes. + /// + public partial class BrowseTreeCtrl : Opc.Ua.Client.Controls.BaseTreeCtrl + { + /// + /// Initializes a new instance of the class. + /// + public BrowseTreeCtrl() + { + InitializeComponent(); + + foreach (BrowseDirection value in Enum.GetValues(typeof(BrowseDirection))) + { + BrowseDirectionCTRL.Items.Add(value); + } + } + + private NodeId m_rootId; + private NodeId m_viewId; + private Session m_session; + private NodeId m_referenceTypeId; + private BrowseDirection m_browseDirection; + private BrowseListCtrl m_referencesCTRL; + private AttributeListCtrl m_attributesCTRL; + private event EventHandler m_nodesSelected; + + /// + /// The control that displays the non-hierarchial references for the selected node. + /// + public BrowseListCtrl ReferencesCTRL + { + get { return m_referencesCTRL; } + set { m_referencesCTRL = value; } + } + + /// + /// The control that displays the attributes/properties for the selected node. + /// + public AttributeListCtrl AttributesCTRL + { + get { return m_attributesCTRL; } + set { m_attributesCTRL = value; } + } + + /// + /// Raised when the select menu item is clicked. + /// + public event EventHandler NodesSelected + { + add { m_nodesSelected += value; } + remove { m_nodesSelected -= value; } + } + + #region NodesSelectedEventArgs Class + /// + /// Specifies the nodes that where selected in the control. + /// + public class NodesSelectedEventArgs : EventArgs + { + /// + /// Constructs a new object. + /// + public NodesSelectedEventArgs(IList nodes) + { + m_nodes = nodes; + } + + /// + /// The nodes that where selected. + /// + public IList Nodes + { + get { return m_nodes; } + } + + private IList m_nodes; + } + #endregion + + /// + /// Displays the a root in the control. + /// + public void Initialize( + Session session, + NodeId rootId, + NodeId viewId, + NodeId referenceTypeId, + BrowseDirection browseDirection) + { + m_session = session; + m_rootId = rootId; + m_viewId = viewId; + m_referenceTypeId = referenceTypeId; + m_browseDirection = browseDirection; + + NodesTV.Nodes.Clear(); + + if (m_session == null) + { + return; + } + + if (NodeId.IsNull(m_rootId)) + { + m_rootId = Objects.RootFolder; + } + + if (NodeId.IsNull(m_referenceTypeId)) + { + m_referenceTypeId = ReferenceTypeIds.HierarchicalReferences; + } + + ReferenceTypeCTRL.Initialize(m_session, ReferenceTypeIds.HierarchicalReferences); + ReferenceTypeCTRL.SelectedTypeId = m_referenceTypeId; + + ILocalNode root = m_session.NodeCache.Find(m_rootId) as ILocalNode; + + if (root == null) + { + return; + } + + ReferenceDescription reference = new ReferenceDescription(); + + reference.ReferenceTypeId = referenceTypeId; + reference.IsForward = true; + reference.NodeId = root.NodeId; + reference.NodeClass = root.NodeClass; + reference.BrowseName = root.BrowseName; + reference.DisplayName = root.DisplayName; + reference.TypeDefinition = root.TypeDefinitionId; + + TreeNode rootNode = new TreeNode(reference.ToString()); + + rootNode.ImageKey = rootNode.SelectedImageKey = GuiUtils.GetTargetIcon(session, reference); + rootNode.Tag = reference; + rootNode.Nodes.Add(new TreeNode()); + + NodesTV.Nodes.Add(rootNode); + } + + /// + /// Browses the children of the node and updates the tree. + /// + private bool BrowseChildren(TreeNode parent) + { + ReferenceDescription reference = parent.Tag as ReferenceDescription; + + if (reference == null) + { + return false; + } + + parent.Nodes.Clear(); + + if (reference.NodeId.IsAbsolute) + { + return false; + } + + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = (NodeId)reference.NodeId; + nodeToBrowse.BrowseDirection = m_browseDirection; + nodeToBrowse.ReferenceTypeId = m_referenceTypeId; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = 0; + nodeToBrowse.ResultMask = (uint)(int)BrowseResultMask.All; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + nodesToBrowse.Add(nodeToBrowse); + + ViewDescription view = null; + + if (NodeId.IsNull(m_viewId)) + { + view = new ViewDescription(); + view.ViewId = m_viewId; + view.Timestamp = DateTime.MinValue; + view.ViewVersion = 0; + } + + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Browse( + null, + view, + 0, + nodesToBrowse, + out results, + out diagnosticInfos); + + if (results.Count != 1 || StatusCode.IsBad(results[0].StatusCode)) + { + return false; + } + + UpdateNode(parent, results[0].References); + + while (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) + { + ByteStringCollection continuationPoints = new ByteStringCollection(); + continuationPoints.Add(results[0].ContinuationPoint); + + m_session.BrowseNext( + null, + parent == null, + continuationPoints, + out results, + out diagnosticInfos); + + if (results.Count != 1 || StatusCode.IsBad(results[0].StatusCode)) + { + return false; + } + + UpdateNode(parent, results[0].References); + } + + return true; + } + + /// + /// Adds the browse results to the node (if not null). + /// + private void UpdateNode(TreeNode parent, ReferenceDescriptionCollection references) + { + try + { + for (int ii = 0; ii < references.Count; ii++) + { + ReferenceDescription reference = references[ii]; + + TreeNode childNode = new TreeNode(reference.ToString()); + + childNode.ImageKey = childNode.SelectedImageKey = GuiUtils.GetTargetIcon(m_session, reference); + childNode.Tag = reference; + + childNode.Nodes.Add(new TreeNode()); + + parent.Nodes.Add(childNode); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + #region Overridden Members + /// + protected override void SelectNode() + { + base.SelectNode(); + + ReferenceDescription reference = NodesTV.SelectedNode.Tag as ReferenceDescription; + + if (reference == null) + { + return; + } + + // update attributes control. + if (AttributesCTRL != null) + { + AttributesCTRL.Initialize(m_session, reference.NodeId); + } + + // update references control. + if (ReferencesCTRL != null) + { + ReferencesCTRL.Initialize(m_session, reference.NodeId); + } + } + + /// + protected override bool BeforeExpand(TreeNode clickedNode) + { + try + { + // check if a placeholder child is present. + if (clickedNode.Nodes.Count == 1 && clickedNode.Nodes[0].Text == String.Empty) + { + // browse. + return !BrowseChildren(clickedNode); + } + + // do not cancel expand. + return false; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + return false; + } + } + + /// + protected override void EnableMenuItems(TreeNode clickedNode) + { + if (NodesTV.SelectedNode == null) + { + return; + } + + SelectMI.Enabled = true; + + if (NodesTV.SelectedNode.Nodes.Count > 0 && NodesTV.SelectedNode.Nodes[0].Text != String.Empty) + { + SelectChildrenMI.Enabled = true; + } + } + #endregion + + #region Event Handlers + private void RootBTN_Click(object sender, EventArgs e) + { + try + { + if (NodesTV.SelectedNode == null) + { + return; + } + + ReferenceDescription reference = NodesTV.SelectedNode.Tag as ReferenceDescription; + + if (reference == null || reference.NodeId.IsAbsolute) + { + return; + } + + Initialize(m_session, (NodeId)reference.NodeId, m_viewId, m_referenceTypeId, m_browseDirection); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void BrowseDirectionCTRL_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + m_browseDirection = (BrowseDirection)BrowseDirectionCTRL.SelectedItem; + + if (NodesTV.SelectedNode != null) + { + NodesTV.SelectedNode.Collapse(); + NodesTV.SelectedNode.Nodes.Clear(); + NodesTV.SelectedNode.Nodes.Add(new TreeNode()); + NodesTV.SelectedNode.Expand(); + return; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void SelectMI_Click(object sender, EventArgs e) + { + try + { + if (m_nodesSelected != null) + { + if (NodesTV.SelectedNode == null) + { + return; + } + + ReferenceDescription reference = NodesTV.SelectedNode.Tag as ReferenceDescription; + + if (reference != null) + { + ReferenceDescriptionCollection collection = new ReferenceDescriptionCollection(); + collection.Add(reference); + m_nodesSelected(this, new NodesSelectedEventArgs(collection)); + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void SelectChildrenMI_Click(object sender, EventArgs e) + { + try + { + if (m_nodesSelected != null) + { + if (NodesTV.SelectedNode == null || NodesTV.SelectedNode.Nodes.Count == 0) + { + return; + } + + ReferenceDescriptionCollection collection = new ReferenceDescriptionCollection(); + + foreach (TreeNode child in NodesTV.SelectedNode.Nodes) + { + ReferenceDescription reference = child.Tag as ReferenceDescription; + + if (reference != null) + { + collection.Add(reference); + } + } + + if (collection.Count > 0) + { + m_nodesSelected(this, new NodesSelectedEventArgs(collection)); + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ReferenceTypeCTRL_ReferenceSelectionChanged(object sender, ReferenceTypeCtrl.ReferenceSelectedEventArgs e) + { + try + { + m_referenceTypeId = e.ReferenceTypeId; + + if (NodesTV.SelectedNode != null) + { + NodesTV.SelectedNode.Collapse(); + NodesTV.SelectedNode.Nodes.Clear(); + NodesTV.SelectedNode.Nodes.Add(new TreeNode()); + NodesTV.SelectedNode.Expand(); + return; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/BrowseTreeCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.Designer.cs new file mode 100644 index 00000000..9170894f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.Designer.cs @@ -0,0 +1,109 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class NodeListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ViewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // ItemsLV + // + this.ItemsLV.ContextMenuStrip = this.PopupMenu; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ViewMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(118, 48); + // + // ViewMI + // + this.ViewMI.Name = "ViewMI"; + this.ViewMI.Size = new System.Drawing.Size(117, 22); + this.ViewMI.Text = "View..."; + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(117, 22); + this.DeleteMI.Text = "Delete..."; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // NodeListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Instructions = "Add nodes by dragging them into the control."; + this.Name = "NodeListCtrl"; + this.Controls.SetChildIndex(this.ItemsLV, 0); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem ViewMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.cs new file mode 100644 index 00000000..8ba9fbcf --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.cs @@ -0,0 +1,250 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of nodes. + /// + public partial class NodeListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + /// + /// Initializes a new instance of the class. + /// + public NodeListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + } + + #region Private Fields + private Session m_session; + private BrowseListCtrl m_referencesCTRL; + private AttributeListCtrl m_attributesCTRL; + + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "ID", HorizontalAlignment.Left, null } + }; + #endregion + + /// + /// The control that displays the non-hierarchial references for the selected node. + /// + public BrowseListCtrl ReferencesCTRL + { + get { return m_referencesCTRL; } + set { m_referencesCTRL = value; } + } + + /// + /// The control that displays the attributes/properties for the selected node. + /// + public AttributeListCtrl AttributesCTRL + { + get { return m_attributesCTRL; } + set { m_attributesCTRL = value; } + } + + /// + /// Initializes the control with a set of items. + /// + public void Initialize(Session session, IList nodeIds) + { + ItemsLV.Items.Clear(); + m_session = session; + + if (m_session == null || nodeIds == null || nodeIds.Count == 0) + { + AdjustColumns(); + return; + } + + for (int ii = 0; ii < nodeIds.Count; ii++) + { + ILocalNode node = m_session.NodeCache.Find(nodeIds[ii]) as ILocalNode; + + if (node == null) + { + continue; + } + + AddItem(node); + } + + AdjustColumns(); + } + + /// + /// Adds a node to the control. + /// + public void Add(NodeId nodeId) + { + ILocalNode node = m_session.NodeCache.Find(nodeId) as ILocalNode; + + if (node != null) + { + AddItem(node); + AdjustColumns(); + } + } + + /// + /// Returns the list of nodes in the control. + /// + public IList GetNodeList() + { + List items = new List(ItemsLV.Items.Count); + + for (int ii = 0; ii < ItemsLV.Items.Count; ii++) + { + items.Add(ItemsLV.Items[ii].Tag as ILocalNode); + } + + return items; + } + + #region Overridden Methods + /// + protected override void SelectItems() + { + base.SelectItems(); + + ILocalNode node = GetSelectedTag(0) as ILocalNode; + + if (node == null) + { + return; + } + + // update attributes control. + if (AttributesCTRL != null) + { + AttributesCTRL.Initialize(m_session, node.NodeId); + } + + // update references control. + if (ReferencesCTRL != null) + { + ReferencesCTRL.Initialize(m_session, node.NodeId); + } + } + + /// + protected override void EnableMenuItems(ListViewItem clickedItem) + { + DeleteMI.Enabled = ItemsLV.SelectedItems.Count > 0; + } + + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + ILocalNode node = item as ILocalNode; + + if (node == null) + { + base.UpdateItem(listItem, item); + return; + } + + listItem.SubItems[0].Text = Utils.Format("{0}", node.DisplayName); + listItem.SubItems[1].Text = Utils.Format("{0}", node.NodeId); + + listItem.ImageKey = GuiUtils.GetTargetIcon(m_session, node.NodeClass, node.TypeDefinitionId); + listItem.Tag = item; + } + + /// + /// Handles a drop event. + /// + protected override void ItemsLV_DragDrop(object sender, DragEventArgs e) + { + try + { + ReferenceDescription reference = e.Data.GetData(typeof(ReferenceDescription)) as ReferenceDescription; + + if (reference == null) + { + return; + } + + ILocalNode node = m_session.NodeCache.Find(reference.NodeId) as ILocalNode; + + if (node == null) + { + return; + } + + AddItem(node); + + AdjustColumns(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + List items = new List(ItemsLV.SelectedItems.Count); + + for (int ii = 0; ii < ItemsLV.SelectedItems.Count; ii++) + { + items.Add(ItemsLV.SelectedItems[ii]); + } + + for (int ii = 0; ii < items.Count; ii++) + { + items[ii].Remove(); + } + + AdjustColumns(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/NodeListCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.Designer.cs new file mode 100644 index 00000000..d50b6006 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.Designer.cs @@ -0,0 +1,257 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectNodesDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.SplitContainer(); + this.LeftPN = new System.Windows.Forms.SplitContainer(); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseTreeCtrl(); + this.AttributesCTRL = new Opc.Ua.Client.Controls.AttributeListCtrl(); + this.ReferencesCTRL = new Opc.Ua.Client.Controls.BrowseListCtrl(); + this.RightPN = new System.Windows.Forms.SplitContainer(); + this.NodesCTRL = new Opc.Ua.Client.Controls.NodeListCtrl(); + this.ButtonsPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.MainPN)).BeginInit(); + this.MainPN.Panel1.SuspendLayout(); + this.MainPN.Panel2.SuspendLayout(); + this.MainPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.LeftPN)).BeginInit(); + this.LeftPN.Panel1.SuspendLayout(); + this.LeftPN.Panel2.SuspendLayout(); + this.LeftPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RightPN)).BeginInit(); + this.RightPN.Panel1.SuspendLayout(); + this.RightPN.Panel2.SuspendLayout(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 435); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(1016, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 0; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(937, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 1; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + // + // MainPN.Panel1 + // + this.MainPN.Panel1.Controls.Add(this.LeftPN); + this.MainPN.Panel1.Padding = new System.Windows.Forms.Padding(3, 3, 0, 0); + // + // MainPN.Panel2 + // + this.MainPN.Panel2.Controls.Add(this.RightPN); + this.MainPN.Panel2.Padding = new System.Windows.Forms.Padding(0, 3, 3, 0); + this.MainPN.Size = new System.Drawing.Size(1016, 435); + this.MainPN.SplitterDistance = 380; + this.MainPN.TabIndex = 33; + // + // LeftPN + // + this.LeftPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.LeftPN.Location = new System.Drawing.Point(3, 3); + this.LeftPN.Name = "LeftPN"; + this.LeftPN.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // LeftPN.Panel1 + // + this.LeftPN.Panel1.Controls.Add(this.BrowseCTRL); + // + // LeftPN.Panel2 + // + this.LeftPN.Panel2.Controls.Add(this.ReferencesCTRL); + this.LeftPN.Size = new System.Drawing.Size(377, 432); + this.LeftPN.SplitterDistance = 255; + this.LeftPN.TabIndex = 0; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesCTRL = this.AttributesCTRL; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.EnableDragging = true; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 0); + this.BrowseCTRL.MinimumSize = new System.Drawing.Size(325, 216); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.ReferencesCTRL = this.ReferencesCTRL; + this.BrowseCTRL.Size = new System.Drawing.Size(377, 255); + this.BrowseCTRL.TabIndex = 29; + this.BrowseCTRL.NodesSelected += new System.EventHandler(this.BrowseCTRL_NodesSelected); + // + // AttributesCTRL + // + this.AttributesCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.AttributesCTRL.Instructions = null; + this.AttributesCTRL.Location = new System.Drawing.Point(0, 0); + this.AttributesCTRL.Name = "AttributesCTRL"; + this.AttributesCTRL.Size = new System.Drawing.Size(312, 432); + this.AttributesCTRL.TabIndex = 32; + // + // ReferencesCTRL + // + this.ReferencesCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ReferencesCTRL.Instructions = null; + this.ReferencesCTRL.Location = new System.Drawing.Point(0, 0); + this.ReferencesCTRL.Name = "ReferencesCTRL"; + this.ReferencesCTRL.Size = new System.Drawing.Size(377, 173); + this.ReferencesCTRL.TabIndex = 31; + // + // RightPN + // + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 3); + this.RightPN.Name = "RightPN"; + // + // RightPN.Panel1 + // + this.RightPN.Panel1.Controls.Add(this.NodesCTRL); + // + // RightPN.Panel2 + // + this.RightPN.Panel2.Controls.Add(this.AttributesCTRL); + this.RightPN.Size = new System.Drawing.Size(629, 432); + this.RightPN.SplitterDistance = 313; + this.RightPN.TabIndex = 0; + // + // NodesCTRL + // + this.NodesCTRL.AllowDrop = true; + this.NodesCTRL.AttributesCTRL = this.AttributesCTRL; + this.NodesCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.NodesCTRL.EnableDragging = true; + this.NodesCTRL.Instructions = null; + this.NodesCTRL.Location = new System.Drawing.Point(0, 0); + this.NodesCTRL.Name = "NodesCTRL"; + this.NodesCTRL.ReferencesCTRL = this.ReferencesCTRL; + this.NodesCTRL.Size = new System.Drawing.Size(313, 432); + this.NodesCTRL.TabIndex = 30; + // + // SelectNodesDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1016, 466); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "SelectNodesDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select Nodes"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.Panel1.ResumeLayout(false); + this.MainPN.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.MainPN)).EndInit(); + this.MainPN.ResumeLayout(false); + this.LeftPN.Panel1.ResumeLayout(false); + this.LeftPN.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.LeftPN)).EndInit(); + this.LeftPN.ResumeLayout(false); + this.RightPN.Panel1.ResumeLayout(false); + this.RightPN.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.RightPN)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private Opc.Ua.Client.Controls.BrowseTreeCtrl BrowseCTRL; + private Opc.Ua.Client.Controls.NodeListCtrl NodesCTRL; + private Opc.Ua.Client.Controls.AttributeListCtrl AttributesCTRL; + private Opc.Ua.Client.Controls.BrowseListCtrl ReferencesCTRL; + private System.Windows.Forms.SplitContainer MainPN; + private System.Windows.Forms.SplitContainer LeftPN; + private System.Windows.Forms.SplitContainer RightPN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.cs new file mode 100644 index 00000000..098e68ea --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.cs @@ -0,0 +1,114 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; + +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog used to selected one or more nodes. + /// + public partial class SelectNodesDlg : Form + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public SelectNodesDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public IList ShowDialog(Session session, NodeId rootId, IList nodeIds) + { + BrowseCTRL.Initialize(session, rootId, null, null, BrowseDirection.Forward); + ReferencesCTRL.Initialize(session, rootId); + AttributesCTRL.Initialize(session, rootId); + NodesCTRL.Initialize(session, nodeIds); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return NodesCTRL.GetNodeList(); + } + #endregion + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void BrowseCTRL_NodesSelected(object sender, BrowseTreeCtrl.NodesSelectedEventArgs e) + { + try + { + foreach (ReferenceDescription reference in e.Nodes) + { + if (!reference.NodeId.IsAbsolute) + { + NodesCTRL.Add((NodeId)reference.NodeId); + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Browse/SelectNodesDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/ClientUtils.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/ClientUtils.cs new file mode 100644 index 00000000..6c6665af --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/ClientUtils.cs @@ -0,0 +1,1302 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Drawing; +using System.Text; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Defines numerous re-useable utility functions. + /// + public partial class ClientUtils + { + /// + /// Handles an exception. + /// + public static void HandleException(string caption, Exception e) + { + ExceptionDlg.Show(caption, e); + } + + /// + /// Returns the application icon. + /// + public static System.Drawing.Icon GetAppIcon() + { + try + { + return new Icon("App.ico"); + } + catch (Exception) + { + return null; + } + } + + #region DisplayText Lookup + /// + /// Gets the display text for the access level attribute. + /// + /// The access level. + /// The access level formatted as a string. + public static string GetAccessLevelDisplayText(byte accessLevel) + { + StringBuilder buffer = new StringBuilder(); + + if (accessLevel == AccessLevels.None) + { + buffer.Append("None"); + } + + if ((accessLevel & AccessLevels.CurrentRead) == AccessLevels.CurrentRead) + { + buffer.Append("Read"); + } + + if ((accessLevel & AccessLevels.CurrentWrite) == AccessLevels.CurrentWrite) + { + if (buffer.Length > 0) + { + buffer.Append(" | "); + } + + buffer.Append("Write"); + } + + if ((accessLevel & AccessLevels.HistoryRead) == AccessLevels.HistoryRead) + { + if (buffer.Length > 0) + { + buffer.Append(" | "); + } + + buffer.Append("HistoryRead"); + } + + if ((accessLevel & AccessLevels.HistoryWrite) == AccessLevels.HistoryWrite) + { + if (buffer.Length > 0) + { + buffer.Append(" | "); + } + + buffer.Append("HistoryWrite"); + } + + if ((accessLevel & AccessLevels.SemanticChange) == AccessLevels.SemanticChange) + { + if (buffer.Length > 0) + { + buffer.Append(" | "); + } + + buffer.Append("SemanticChange"); + } + + return buffer.ToString(); + } + + /// + /// Gets the display text for the event notifier attribute. + /// + /// The event notifier. + /// The event notifier formatted as a string. + public static string GetEventNotifierDisplayText(byte eventNotifier) + { + StringBuilder buffer = new StringBuilder(); + + if (eventNotifier == EventNotifiers.None) + { + buffer.Append("None"); + } + + if ((eventNotifier & EventNotifiers.SubscribeToEvents) == EventNotifiers.SubscribeToEvents) + { + buffer.Append("Subscribe"); + } + + if ((eventNotifier & EventNotifiers.HistoryRead) == EventNotifiers.HistoryRead) + { + if (buffer.Length > 0) + { + buffer.Append(" | "); + } + + buffer.Append("HistoryRead"); + } + + if ((eventNotifier & EventNotifiers.HistoryWrite) == EventNotifiers.HistoryWrite) + { + if (buffer.Length > 0) + { + buffer.Append(" | "); + } + + buffer.Append("HistoryWrite"); + } + + return buffer.ToString(); + } + + /// + /// Gets the display text for the value rank attribute. + /// + /// The value rank. + /// The value rank formatted as a string. + public static string GetValueRankDisplayText(int valueRank) + { + switch (valueRank) + { + case ValueRanks.Any: return "Any"; + case ValueRanks.Scalar: return "Scalar"; + case ValueRanks.ScalarOrOneDimension: return "ScalarOrOneDimension"; + case ValueRanks.OneOrMoreDimensions: return "OneOrMoreDimensions"; + case ValueRanks.OneDimension: return "OneDimension"; + case ValueRanks.TwoDimensions: return "TwoDimensions"; + } + + return valueRank.ToString(); + } + + /// + /// Gets the display text for the specified attribute. + /// + /// The currently active session. + /// The id of the attribute. + /// The value of the attribute. + /// The attribute formatted as a string. + public static string GetAttributeDisplayText(Session session, uint attributeId, Variant value) + { + if (value == Variant.Null) + { + return String.Empty; + } + + switch (attributeId) + { + case Attributes.AccessLevel: + case Attributes.UserAccessLevel: + { + byte? field = value.Value as byte?; + + if (field != null) + { + return GetAccessLevelDisplayText(field.Value); + } + + break; + } + + case Attributes.EventNotifier: + { + byte? field = value.Value as byte?; + + if (field != null) + { + return GetEventNotifierDisplayText(field.Value); + } + + break; + } + + case Attributes.DataType: + { + return session.NodeCache.GetDisplayText(value.Value as NodeId); + } + + case Attributes.ValueRank: + { + int? field = value.Value as int?; + + if (field != null) + { + return GetValueRankDisplayText(field.Value); + } + + break; + } + + case Attributes.NodeClass: + { + int? field = value.Value as int?; + + if (field != null) + { + return ((NodeClass)field.Value).ToString(); + } + + break; + } + + case Attributes.NodeId: + { + NodeId field = value.Value as NodeId; + + if (!NodeId.IsNull(field)) + { + return field.ToString(); + } + + return "Null"; + } + + case Attributes.DataTypeDefinition: + { + ExtensionObject field = value.Value as ExtensionObject; + if (field != null) + { + return field.ToString(); + } + break; + } + } + + // check for byte strings. + if (value.Value is byte[]) + { + return Utils.ToHexString(value.Value as byte[]); + } + + // use default format. + return value.ToString(); + } + #endregion + + #region Browse + /// + /// Browses the address space and returns the references found. + /// + /// The session. + /// The set of browse operations to perform. + /// if set to true a exception will be thrown on an error. + /// + /// The references found. Null if an error occurred. + /// + public static ReferenceDescriptionCollection Browse(Session session, BrowseDescriptionCollection nodesToBrowse, bool throwOnError) + { + return Browse(session, null, nodesToBrowse, throwOnError); + } + + /// + /// Browses the address space and returns the references found. + /// + public static ReferenceDescriptionCollection Browse(Session session, ViewDescription view, BrowseDescriptionCollection nodesToBrowse, bool throwOnError) + { + try + { + ReferenceDescriptionCollection references = new ReferenceDescriptionCollection(); + BrowseDescriptionCollection unprocessedOperations = new BrowseDescriptionCollection(); + + while (nodesToBrowse.Count > 0) + { + // start the browse operation. + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + session.Browse( + null, + view, + 0, + nodesToBrowse, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToBrowse); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToBrowse); + + ByteStringCollection continuationPoints = new ByteStringCollection(); + + for (int ii = 0; ii < nodesToBrowse.Count; ii++) + { + // check for error. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + // this error indicates that the server does not have enough simultaneously active + // continuation points. This request will need to be resent after the other operations + // have been completed and their continuation points released. + if (results[ii].StatusCode == StatusCodes.BadNoContinuationPoints) + { + unprocessedOperations.Add(nodesToBrowse[ii]); + } + + continue; + } + + // check if all references have been fetched. + if (results[ii].References.Count == 0) + { + continue; + } + + // save results. + references.AddRange(results[ii].References); + + // check for continuation point. + if (results[ii].ContinuationPoint != null) + { + continuationPoints.Add(results[ii].ContinuationPoint); + } + } + + // process continuation points. + ByteStringCollection revisedContiuationPoints = new ByteStringCollection(); + + while (continuationPoints.Count > 0) + { + // continue browse operation. + session.BrowseNext( + null, + false, + continuationPoints, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, continuationPoints); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, continuationPoints); + + for (int ii = 0; ii < continuationPoints.Count; ii++) + { + // check for error. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + continue; + } + + // check if all references have been fetched. + if (results[ii].References.Count == 0) + { + continue; + } + + // save results. + references.AddRange(results[ii].References); + + // check for continuation point. + if (results[ii].ContinuationPoint != null) + { + revisedContiuationPoints.Add(results[ii].ContinuationPoint); + } + } + + // check if browsing must continue; + revisedContiuationPoints = continuationPoints; + } + + // check if unprocessed results exist. + nodesToBrowse = unprocessedOperations; + } + + // return complete list. + return references; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException(exception, StatusCodes.BadUnexpectedError); + } + + return null; + } + } + + /// + /// Browses the address space and returns the references found. + /// + /// The session. + /// The NodeId for the starting node. + /// if set to true a exception will be thrown on an error. + /// + /// The references found. Null if an error occurred. + /// + public static ReferenceDescriptionCollection Browse(Session session, BrowseDescription nodeToBrowse, bool throwOnError) + { + return Browse(session, null, nodeToBrowse, throwOnError); + } + + /// + /// Browses the address space and returns the references found. + /// + public static ReferenceDescriptionCollection Browse(Session session, ViewDescription view, BrowseDescription nodeToBrowse, bool throwOnError) + { + try + { + ReferenceDescriptionCollection references = new ReferenceDescriptionCollection(); + + // construct browse request. + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + nodesToBrowse.Add(nodeToBrowse); + + // start the browse operation. + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + session.Browse( + null, + view, + 0, + nodesToBrowse, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToBrowse); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToBrowse); + + do + { + // check for error. + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + // process results. + for (int ii = 0; ii < results[0].References.Count; ii++) + { + references.Add(results[0].References[ii]); + } + + // check if all references have been fetched. + if (results[0].References.Count == 0 || results[0].ContinuationPoint == null) + { + break; + } + + // continue browse operation. + ByteStringCollection continuationPoints = new ByteStringCollection(); + continuationPoints.Add(results[0].ContinuationPoint); + + session.BrowseNext( + null, + false, + continuationPoints, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, continuationPoints); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, continuationPoints); + } + while (true); + + //return complete list. + return references; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException(exception, StatusCodes.BadUnexpectedError); + } + + return null; + } + } + + /// + /// Browses the address space and returns all of the supertypes of the specified type node. + /// + /// The session. + /// The NodeId for a type node in the address space. + /// if set to true a exception will be thrown on an error. + /// + /// The references found. Null if an error occurred. + /// + public static ReferenceDescriptionCollection BrowseSuperTypes(Session session, NodeId typeId, bool throwOnError) + { + ReferenceDescriptionCollection supertypes = new ReferenceDescriptionCollection(); + + try + { + // find all of the children of the field. + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = typeId; + nodeToBrowse.BrowseDirection = BrowseDirection.Inverse; + nodeToBrowse.ReferenceTypeId = ReferenceTypeIds.HasSubtype; + nodeToBrowse.IncludeSubtypes = false; // more efficient to use IncludeSubtypes=False when possible. + nodeToBrowse.NodeClassMask = 0; // the HasSubtype reference already restricts the targets to Types. + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + ReferenceDescriptionCollection references = Browse(session, nodeToBrowse, throwOnError); + + while (references != null && references.Count > 0) + { + // should never be more than one supertype. + supertypes.Add(references[0]); + + // only follow references within this server. + if (references[0].NodeId.IsAbsolute) + { + break; + } + + // get the references for the next level up. + nodeToBrowse.NodeId = (NodeId)references[0].NodeId; + references = Browse(session, nodeToBrowse, throwOnError); + } + + // return complete list. + return supertypes; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException(exception, StatusCodes.BadUnexpectedError); + } + + return null; + } + } + + /// + /// Returns the node ids for a set of relative paths. + /// + /// An open session with the server to use. + /// The starting node for the relative paths. + /// The namespace URIs referenced by the relative paths. + /// The relative paths. + /// A collection of local nodes. + public static List TranslateBrowsePaths( + Session session, + NodeId startNodeId, + NamespaceTable namespacesUris, + params string[] relativePaths) + { + // build the list of browse paths to follow by parsing the relative paths. + BrowsePathCollection browsePaths = new BrowsePathCollection(); + + if (relativePaths != null) + { + for (int ii = 0; ii < relativePaths.Length; ii++) + { + BrowsePath browsePath = new BrowsePath(); + + // The relative paths used indexes in the namespacesUris table. These must be + // converted to indexes used by the server. An error occurs if the relative path + // refers to a namespaceUri that the server does not recognize. + + // The relative paths may refer to ReferenceType by their BrowseName. The TypeTree object + // allows the parser to look up the server's NodeId for the ReferenceType. + + browsePath.RelativePath = RelativePath.Parse( + relativePaths[ii], + session.TypeTree, + namespacesUris, + session.NamespaceUris); + + browsePath.StartingNode = startNodeId; + + browsePaths.Add(browsePath); + } + } + + // make the call to the server. + BrowsePathResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = session.TranslateBrowsePathsToNodeIds( + null, + browsePaths, + out results, + out diagnosticInfos); + + // ensure that the server returned valid results. + Session.ValidateResponse(results, browsePaths); + Session.ValidateDiagnosticInfos(diagnosticInfos, browsePaths); + + // collect the list of node ids found. + List nodes = new List(); + + for (int ii = 0; ii < results.Count; ii++) + { + // check if the start node actually exists. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + nodes.Add(null); + continue; + } + + // an empty list is returned if no node was found. + if (results[ii].Targets.Count == 0) + { + nodes.Add(null); + continue; + } + + // Multiple matches are possible, however, the node that matches the type model is the + // one we are interested in here. The rest can be ignored. + BrowsePathTarget target = results[ii].Targets[0]; + + if (target.RemainingPathIndex != UInt32.MaxValue) + { + nodes.Add(null); + continue; + } + + // The targetId is an ExpandedNodeId because it could be node in another server. + // The ToNodeId function is used to convert a local NodeId stored in a ExpandedNodeId to a NodeId. + nodes.Add(ExpandedNodeId.ToNodeId(target.TargetId, session.NamespaceUris)); + } + + // return whatever was found. + return nodes; + } + #endregion + + #region Events + /// + /// Finds the type of the event for the notification. + /// + /// The monitored item. + /// The notification. + /// The NodeId of the EventType. + public static NodeId FindEventType(MonitoredItem monitoredItem, EventFieldList notification) + { + EventFilter filter = monitoredItem.Status.Filter as EventFilter; + + if (filter != null) + { + for (int ii = 0; ii < filter.SelectClauses.Count; ii++) + { + SimpleAttributeOperand clause = filter.SelectClauses[ii]; + + if (clause.BrowsePath.Count == 1 && clause.BrowsePath[0] == BrowseNames.EventType) + { + return notification.EventFields[ii].Value as NodeId; + } + } + } + + return null; + } + + /// + /// Constructs an event object from a notification. + /// + /// The session. + /// The monitored item that produced the notification. + /// The notification. + /// The known event types. + /// Mapping between event types and known event types. + /// + /// The event object. Null if the notification is not a valid event type. + /// + public static BaseEventState ConstructEvent( + Session session, + MonitoredItem monitoredItem, + EventFieldList notification, + Dictionary knownEventTypes, + Dictionary eventTypeMappings) + { + // find the event type. + NodeId eventTypeId = FindEventType(monitoredItem, notification); + + if (eventTypeId == null) + { + return null; + } + + // look up the known event type. + Type knownType = null; + NodeId knownTypeId = null; + + if (eventTypeMappings.TryGetValue(eventTypeId, out knownTypeId)) + { + knownType = knownEventTypes[knownTypeId]; + } + + // try again. + if (knownType == null) + { + if (knownEventTypes.TryGetValue(eventTypeId, out knownType)) + { + knownTypeId = eventTypeId; + eventTypeMappings.Add(eventTypeId, eventTypeId); + } + } + + // try mapping it to a known type. + if (knownType == null) + { + // browse for the supertypes of the event type. + ReferenceDescriptionCollection supertypes = ClientUtils.BrowseSuperTypes(session, eventTypeId, false); + + // can't do anything with unknown types. + if (supertypes == null) + { + return null; + } + + // find the first supertype that matches a known event type. + for (int ii = 0; ii < supertypes.Count; ii++) + { + NodeId superTypeId = (NodeId)supertypes[ii].NodeId; + + if (knownEventTypes.TryGetValue(superTypeId, out knownType)) + { + knownTypeId = superTypeId; + eventTypeMappings.Add(eventTypeId, superTypeId); + } + + if (knownTypeId != null) + { + break; + } + } + + // can't do anything with unknown types. + if (knownTypeId == null) + { + return null; + } + } + + // construct the event based on the known event type. + BaseEventState e = (BaseEventState)Activator.CreateInstance(knownType, new object[] { (NodeState)null }); + + // get the filter which defines the contents of the notification. + EventFilter filter = monitoredItem.Status.Filter as EventFilter; + + // initialize the event with the values in the notification. + e.Update(session.SystemContext, filter.SelectClauses, notification); + + // save the orginal notification. + e.Handle = notification; + + return e; + } + #endregion + + + #region Type Model Browsing + /// + /// Collects the instance declarations for a type. + /// + public static List CollectInstanceDeclarationsForType(Session session, NodeId typeId) + { + return CollectInstanceDeclarationsForType(session, typeId, true); + } + + /// + /// Collects the instance declarations for a type. + /// + public static List CollectInstanceDeclarationsForType(Session session, NodeId typeId, bool includeSupertypes) + { + // process the types starting from the top of the tree. + List instances = new List(); + Dictionary map = new Dictionary(); + + // get the supertypes. + if (includeSupertypes) + { + ReferenceDescriptionCollection supertypes = ClientUtils.BrowseSuperTypes(session, typeId, false); + + if (supertypes != null) + { + for (int ii = supertypes.Count - 1; ii >= 0; ii--) + { + CollectInstanceDeclarations(session, (NodeId)supertypes[ii].NodeId, null, instances, map); + } + } + } + + // collect the fields for the selected type. + CollectInstanceDeclarations(session, typeId, null, instances, map); + + // return the complete list. + return instances; + } + + /// + /// Collects the fields for the instance node. + /// + private static void CollectInstanceDeclarations( + Session session, + NodeId typeId, + InstanceDeclaration parent, + List instances, + IDictionary map) + { + // find the children. + BrowseDescription nodeToBrowse = new BrowseDescription(); + + if (parent == null) + { + nodeToBrowse.NodeId = typeId; + } + else + { + nodeToBrowse.NodeId = parent.NodeId; + } + + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = ReferenceTypeIds.HasChild; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable | NodeClass.Method); + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + // ignore any browsing errors. + ReferenceDescriptionCollection references = ClientUtils.Browse(session, nodeToBrowse, false); + + if (references == null) + { + return; + } + + // process the children. + List nodeIds = new List(); + List children = new List(); + + for (int ii = 0; ii < references.Count; ii++) + { + ReferenceDescription reference = references[ii]; + + if (reference.NodeId.IsAbsolute) + { + continue; + } + + // create a new declaration. + InstanceDeclaration child = new InstanceDeclaration(); + + child.RootTypeId = typeId; + child.NodeId = (NodeId)reference.NodeId; + child.BrowseName = reference.BrowseName; + child.NodeClass = reference.NodeClass; + + if (!LocalizedText.IsNullOrEmpty(reference.DisplayName)) + { + child.DisplayName = reference.DisplayName.Text; + } + else + { + child.DisplayName = reference.BrowseName.Name; + } + + if (parent != null) + { + child.BrowsePath = new QualifiedNameCollection(parent.BrowsePath); + child.BrowsePathDisplayText = Utils.Format("{0}/{1}", parent.BrowsePathDisplayText, reference.BrowseName); + child.DisplayPath = Utils.Format("{0}/{1}", parent.DisplayPath, reference.DisplayName); + } + else + { + child.BrowsePath = new QualifiedNameCollection(); + child.BrowsePathDisplayText = Utils.Format("{0}", reference.BrowseName); + child.DisplayPath = Utils.Format("{0}", reference.DisplayName); + } + + child.BrowsePath.Add(reference.BrowseName); + + // check if reading an overridden declaration. + InstanceDeclaration overriden = null; + + if (map.TryGetValue(child.BrowsePathDisplayText, out overriden)) + { + child.OverriddenDeclaration = overriden; + } + + map[child.BrowsePathDisplayText] = child; + + // add to list. + children.Add(child); + nodeIds.Add(child.NodeId); + } + + // check if nothing more to do. + if (children.Count == 0) + { + return; + } + + // find the modelling rules. + List modellingRules = FindTargetOfReference(session, nodeIds, Opc.Ua.ReferenceTypeIds.HasModellingRule, false); + + if (modellingRules != null) + { + for (int ii = 0; ii < nodeIds.Count; ii++) + { + children[ii].ModellingRule = modellingRules[ii]; + + // if the modelling rule is null then the instance is not part of the type declaration. + if (NodeId.IsNull(modellingRules[ii])) + { + map.Remove(children[ii].BrowsePathDisplayText); + } + } + } + + // update the descriptions. + UpdateInstanceDescriptions(session, children, false); + + // recusively collect instance declarations for the tree below. + for (int ii = 0; ii < children.Count; ii++) + { + if (!NodeId.IsNull(children[ii].ModellingRule)) + { + instances.Add(children[ii]); + CollectInstanceDeclarations(session, typeId, children[ii], instances, map); + } + } + } + + /// + /// Finds the targets for the specified reference. + /// + private static List FindTargetOfReference(Session session, List nodeIds, NodeId referenceTypeId, bool throwOnError) + { + try + { + // construct browse request. + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + + for (int ii = 0; ii < nodeIds.Count; ii++) + { + BrowseDescription nodeToBrowse = new BrowseDescription(); + nodeToBrowse.NodeId = nodeIds[ii]; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = referenceTypeId; + nodeToBrowse.IncludeSubtypes = false; + nodeToBrowse.NodeClassMask = 0; + nodeToBrowse.ResultMask = (uint)BrowseResultMask.None; + nodesToBrowse.Add(nodeToBrowse); + } + + // start the browse operation. + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + session.Browse( + null, + null, + 1, + nodesToBrowse, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToBrowse); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToBrowse); + + List targetIds = new List(); + ByteStringCollection continuationPoints = new ByteStringCollection(); + + for (int ii = 0; ii < nodeIds.Count; ii++) + { + targetIds.Add(null); + + // check for error. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + continue; + } + + // check for continuation point. + if (results[ii].ContinuationPoint != null && results[ii].ContinuationPoint.Length > 0) + { + continuationPoints.Add(results[ii].ContinuationPoint); + } + + // get the node id. + if (results[ii].References.Count > 0) + { + if (NodeId.IsNull(results[ii].References[0].NodeId) || results[ii].References[0].NodeId.IsAbsolute) + { + continue; + } + + targetIds[ii] = (NodeId)results[ii].References[0].NodeId; + } + } + + // release continuation points. + if (continuationPoints.Count > 0) + { + session.BrowseNext( + null, + true, + continuationPoints, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToBrowse); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToBrowse); + } + + //return complete list. + return targetIds; + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException(exception, StatusCodes.BadUnexpectedError); + } + + return null; + } + } + + /// + /// Finds the targets for the specified reference. + /// + private static void UpdateInstanceDescriptions(Session session, List instances, bool throwOnError) + { + try + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + for (int ii = 0; ii < instances.Count; ii++) + { + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = instances[ii].NodeId; + nodeToRead.AttributeId = Attributes.Description; + nodesToRead.Add(nodeToRead); + + nodeToRead = new ReadValueId(); + nodeToRead.NodeId = instances[ii].NodeId; + nodeToRead.AttributeId = Attributes.DataType; + nodesToRead.Add(nodeToRead); + + nodeToRead = new ReadValueId(); + nodeToRead.NodeId = instances[ii].NodeId; + nodeToRead.AttributeId = Attributes.ValueRank; + nodesToRead.Add(nodeToRead); + } + + // start the browse operation. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // update the instances. + for (int ii = 0; ii < nodesToRead.Count; ii += 3) + { + InstanceDeclaration instance = instances[ii / 3]; + + instance.Description = results[ii].GetValue(LocalizedText.Null).Text; + instance.DataType = results[ii + 1].GetValue(NodeId.Null); + instance.ValueRank = results[ii + 2].GetValue(ValueRanks.Any); + + if (!NodeId.IsNull(instance.DataType)) + { + instance.BuiltInType = DataTypes.GetBuiltInType(instance.DataType, session.TypeTree); + instance.DataTypeDisplayText = session.NodeCache.GetDisplayText(instance.DataType); + + if (instance.ValueRank >= 0) + { + instance.DataTypeDisplayText += "[]"; + } + } + } + } + catch (Exception exception) + { + if (throwOnError) + { + throw new ServiceResultException(exception, StatusCodes.BadUnexpectedError); + } + } + } + #endregion + + #region Private Methods + /// + /// Collects the fields for the type. + /// + /// The session. + /// The type id. + /// The fields. + /// The node id for the declaration of the field. + private static void CollectFieldsForType(Session session, NodeId typeId, SimpleAttributeOperandCollection fields, List fieldNodeIds) + { + // get the supertypes. + ReferenceDescriptionCollection supertypes = ClientUtils.BrowseSuperTypes(session, typeId, false); + + if (supertypes == null) + { + return; + } + + // process the types starting from the top of the tree. + Dictionary foundNodes = new Dictionary(); + QualifiedNameCollection parentPath = new QualifiedNameCollection(); + + for (int ii = supertypes.Count - 1; ii >= 0; ii--) + { + CollectFields(session, (NodeId)supertypes[ii].NodeId, parentPath, fields, fieldNodeIds, foundNodes); + } + + // collect the fields for the selected type. + CollectFields(session, typeId, parentPath, fields, fieldNodeIds, foundNodes); + } + + /// + /// Collects the fields for the instance. + /// + /// The session. + /// The instance id. + /// The fields. + /// The node id for the declaration of the field. + private static void CollectFieldsForInstance(Session session, NodeId instanceId, SimpleAttributeOperandCollection fields, List fieldNodeIds) + { + Dictionary foundNodes = new Dictionary(); + QualifiedNameCollection parentPath = new QualifiedNameCollection(); + CollectFields(session, instanceId, parentPath, fields, fieldNodeIds, foundNodes); + } + + /// + /// Collects the fields for the instance node. + /// + /// The session. + /// The node id. + /// The parent path. + /// The event fields. + /// The node id for the declaration of the field. + /// The table of found nodes. + private static void CollectFields( + Session session, + NodeId nodeId, + QualifiedNameCollection parentPath, + SimpleAttributeOperandCollection fields, + List fieldNodeIds, + Dictionary foundNodes) + { + // find all of the children of the field. + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = nodeId; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = ReferenceTypeIds.Aggregates; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable); + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + ReferenceDescriptionCollection children = ClientUtils.Browse(session, nodeToBrowse, false); + + if (children == null) + { + return; + } + + // process the children. + for (int ii = 0; ii < children.Count; ii++) + { + ReferenceDescription child = children[ii]; + + if (child.NodeId.IsAbsolute) + { + continue; + } + + // construct browse path. + QualifiedNameCollection browsePath = new QualifiedNameCollection(parentPath); + browsePath.Add(child.BrowseName); + + // check if the browse path is already in the list. + int index = ContainsPath(fields, browsePath); + + if (index < 0) + { + SimpleAttributeOperand field = new SimpleAttributeOperand(); + + field.TypeDefinitionId = ObjectTypeIds.BaseEventType; + field.BrowsePath = browsePath; + field.AttributeId = (child.NodeClass == NodeClass.Variable) ? Attributes.Value : Attributes.NodeId; + + fields.Add(field); + fieldNodeIds.Add((NodeId)child.NodeId); + } + + // recusively find all of the children. + NodeId targetId = (NodeId)child.NodeId; + + // need to guard against loops. + if (!foundNodes.ContainsKey(targetId)) + { + foundNodes.Add(targetId, browsePath); + CollectFields(session, (NodeId)child.NodeId, browsePath, fields, fieldNodeIds, foundNodes); + } + } + } + + /// + /// Determines whether the specified select clause contains the browse path. + /// + /// The select clause. + /// The browse path. + /// + /// true if the specified select clause contains path; otherwise, false. + /// + private static int ContainsPath(SimpleAttributeOperandCollection selectClause, QualifiedNameCollection browsePath) + { + for (int ii = 0; ii < selectClause.Count; ii++) + { + SimpleAttributeOperand field = selectClause[ii]; + + if (field.BrowsePath.Count != browsePath.Count) + { + continue; + } + + bool match = true; + + for (int jj = 0; jj < field.BrowsePath.Count; jj++) + { + if (field.BrowsePath[jj] != browsePath[jj]) + { + match = false; + break; + } + } + + if (match) + { + return ii; + } + } + + return -1; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.Designer.cs new file mode 100644 index 00000000..6d515aee --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.Designer.cs @@ -0,0 +1,135 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class AttributesListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AttributesMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.Attributes_ViewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.AttributesLV = new System.Windows.Forms.ListView(); + this.NameCH = new System.Windows.Forms.ColumnHeader(); + this.DataTypeCH = new System.Windows.Forms.ColumnHeader(); + this.ValueCH = new System.Windows.Forms.ColumnHeader(); + this.AttributesMenu.SuspendLayout(); + this.SuspendLayout(); + // + // AttributesMenu + // + this.AttributesMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Attributes_ViewMI}); + this.AttributesMenu.Name = "BrowseMenu"; + this.AttributesMenu.Size = new System.Drawing.Size(100, 26); + // + // Attributes_ViewMI + // + this.Attributes_ViewMI.Name = "Attributes_ViewMI"; + this.Attributes_ViewMI.Size = new System.Drawing.Size(99, 22); + this.Attributes_ViewMI.Text = "View"; + this.Attributes_ViewMI.Click += new System.EventHandler(this.AttributesLV_DoubleClick); + // + // AttributesLV + // + this.AttributesLV.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.NameCH, + this.DataTypeCH, + this.ValueCH}); + this.AttributesLV.ContextMenuStrip = this.AttributesMenu; + this.AttributesLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.AttributesLV.FullRowSelect = true; + this.AttributesLV.Location = new System.Drawing.Point(0, 0); + this.AttributesLV.Name = "AttributesLV"; + this.AttributesLV.Size = new System.Drawing.Size(1003, 569); + this.AttributesLV.TabIndex = 2; + this.AttributesLV.UseCompatibleStateImageBehavior = false; + this.AttributesLV.View = System.Windows.Forms.View.Details; + this.AttributesLV.DoubleClick += new System.EventHandler(this.AttributesLV_DoubleClick); + // + // NameCH + // + this.NameCH.Text = "Name"; + // + // DataTypeCH + // + this.DataTypeCH.Text = "Data Type"; + this.DataTypeCH.Width = 100; + // + // ValueCH + // + this.ValueCH.Text = "Value"; + // + // AttributesListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.AttributesLV); + this.Name = "AttributesListViewCtrl"; + this.Size = new System.Drawing.Size(1003, 569); + this.AttributesMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip AttributesMenu; + private System.Windows.Forms.ToolStripMenuItem Attributes_ViewMI; + private System.Windows.Forms.ListView AttributesLV; + private System.Windows.Forms.ColumnHeader NameCH; + private System.Windows.Forms.ColumnHeader DataTypeCH; + private System.Windows.Forms.ColumnHeader ValueCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.cs new file mode 100644 index 00000000..64662309 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.cs @@ -0,0 +1,336 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control which displays browse tree. + /// + public partial class AttributesListViewCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public AttributesListViewCtrl() + { + InitializeComponent(); + AttributesLV.SmallImageList = new ClientUtils().ImageList; + } + #endregion + + #region Private Fields + private Session m_session; + #endregion + + #region Public Interface + /// + /// The view to use. + /// + public ViewDescription View { get; set; } + + /// + /// Changes the session used by the control. + /// + /// The session. + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Gets or sets the context menu for the attributes list. + /// + public ContextMenuStrip AttributesMenuStrip + { + get { return AttributesLV.ContextMenuStrip; } + set { AttributesLV.ContextMenuStrip = value; } + } + + /// + /// Returns the attribute at the specified index. + /// + public ReadValueId GetSelectedAttribute(int index) + { + if (index >=0 && index < AttributesLV.SelectedItems.Count) + { + AttributeInfo info = AttributesLV.SelectedItems[index].Tag as AttributeInfo; + + if (info != null) + { + return info.NodeToRead; + } + } + + return null; + } + + /// + /// Reads the attributes for the node. + /// + public void ReadAttributes(NodeId nodeId, bool showProperties) + { + AttributesLV.Items.Clear(); + + if (NodeId.IsNull(nodeId)) + { + return; + } + + // build list of attributes to read. + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + foreach (uint attributeId in Attributes.GetIdentifiers()) + { + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = nodeId; + nodeToRead.AttributeId = attributeId; + nodesToRead.Add(nodeToRead); + } + + // read the attributes. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // add the results to the display. + for (int ii = 0; ii < results.Count; ii++) + { + // check for error. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + if (results[ii].StatusCode == StatusCodes.BadAttributeIdInvalid) + { + continue; + } + } + + // add the metadata for the attribute. + uint attributeId = nodesToRead[ii].AttributeId; + ListViewItem item = new ListViewItem(Attributes.GetBrowseName(attributeId)); + item.SubItems.Add(Attributes.GetBuiltInType(attributeId).ToString()); + + if (Attributes.GetValueRank(attributeId) >= 0) + { + item.SubItems[0].Text += "[]"; + } + + // add the value. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + item.SubItems.Add(results[ii].StatusCode.ToString()); + } + else + { + item.SubItems.Add(ClientUtils.GetAttributeDisplayText(m_session, attributeId, results[ii].WrappedValue)); + } + + item.Tag = new AttributeInfo() { NodeToRead = nodesToRead[ii], Value = results[ii] }; + item.ImageIndex = ClientUtils.GetImageIndex(nodesToRead[ii].AttributeId, results[ii].Value); + + // display in list. + AttributesLV.Items.Add(item); + } + + if (showProperties) + { + ReadProperties(nodeId); + } + + // set the column widths. + for (int ii = 0; ii < AttributesLV.Columns.Count; ii++) + { + AttributesLV.Columns[ii].Width = -2; + } + } + #endregion + + #region AttributeInfo Class + /// + /// The saved information for an attribute/property displayed in the control. + /// + private class AttributeInfo + { + public ReadValueId NodeToRead; + public DataValue Value; + } + #endregion + + #region Private Methods + /// + /// Reads the properties for the node. + /// + private void ReadProperties(NodeId nodeId) + { + // build list of references to browse. + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = nodeId; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasProperty; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = (uint)NodeClass.Variable; + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + nodesToBrowse.Add(nodeToBrowse); + + // find properties. + ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, View, nodesToBrowse, false); + + // build list of properties to read. + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + for (int ii = 0; references != null && ii < references.Count; ii++) + { + ReferenceDescription reference = references[ii]; + + // ignore out of server references. + if (reference.NodeId.IsAbsolute) + { + continue; + } + + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = (NodeId)reference.NodeId; + nodeToRead.AttributeId = Attributes.Value; + nodeToRead.Handle = reference; + nodesToRead.Add(nodeToRead); + } + + if (nodesToRead.Count == 0) + { + return; + } + + // read the properties. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // add the results to the display. + for (int ii = 0; ii < results.Count; ii++) + { + ReferenceDescription reference = (ReferenceDescription)nodesToRead[ii].Handle; + + TypeInfo typeInfo = TypeInfo.Construct(results[ii].Value); + + // add the metadata for the attribute. + ListViewItem item = new ListViewItem(reference.ToString()); + item.SubItems.Add(typeInfo.BuiltInType.ToString()); + + if (typeInfo.ValueRank >= 0) + { + item.SubItems[1].Text += "[]"; + } + + // add the value. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + item.SubItems.Add(results[ii].StatusCode.ToString()); + } + else + { + item.SubItems.Add(results[ii].WrappedValue.ToString()); + } + + item.Tag = new AttributeInfo() { NodeToRead = nodesToRead[ii], Value = results[ii] }; + item.ImageIndex = ClientUtils.GetImageIndex(m_session, NodeClass.Variable, Opc.Ua.VariableTypeIds.PropertyType, false); + + // display in list. + AttributesLV.Items.Add(item); + } + } + #endregion + + #region Event Handlers + private void AttributesLV_DoubleClick(object sender, EventArgs e) + { + try + { + if (AttributesLV.SelectedItems.Count == 0) + { + return; + } + + AttributeInfo info = AttributesLV.SelectedItems[0].Tag as AttributeInfo; + + if (info == null || info.Value == null) + { + return; + } + + new EditComplexValueDlg().ShowDialog( + m_session, + info.NodeToRead.NodeId, + info.NodeToRead.AttributeId, + null, + info.Value.Value, + true, + "View Attribute Value"); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.resx new file mode 100644 index 00000000..16c327b8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/AttrributesListViewCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 16, 25 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.Designer.cs new file mode 100644 index 00000000..3fd7b086 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.Designer.cs @@ -0,0 +1,134 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class BrowseNodeCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.MainPN = new System.Windows.Forms.SplitContainer(); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseTreeViewCtrl(); + this.AttributesCTRL = new Opc.Ua.Client.Controls.AttributesListViewCtrl(); + this.MainPN.Panel1.SuspendLayout(); + this.MainPN.Panel2.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // MainPN + // + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + // + // MainPN.Panel1 + // + this.MainPN.Panel1.Controls.Add(this.BrowseCTRL); + // + // MainPN.Panel2 + // + this.MainPN.Panel2.Controls.Add(this.AttributesCTRL); + this.MainPN.Size = new System.Drawing.Size(1003, 569); + this.MainPN.SplitterDistance = 387; + this.MainPN.TabIndex = 11; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesControl = this.AttributesCTRL; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 0); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(387, 569); + this.BrowseCTRL.TabIndex = 0; + this.BrowseCTRL.View = null; + // + // AttributesCTRL + // + this.AttributesCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.AttributesCTRL.Location = new System.Drawing.Point(0, 0); + this.AttributesCTRL.Name = "AttributesCTRL"; + this.AttributesCTRL.Size = new System.Drawing.Size(612, 569); + this.AttributesCTRL.TabIndex = 0; + this.AttributesCTRL.View = null; + // + // BrowseNodeCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.MainPN); + this.Name = "BrowseNodeCtrl"; + this.Size = new System.Drawing.Size(1003, 569); + this.MainPN.Panel1.ResumeLayout(false); + this.MainPN.Panel2.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer MainPN; + + /// + /// The browse list control. + /// + public BrowseTreeViewCtrl BrowseCTRL; + + /// + /// The attribute list control. + /// + public AttributesListViewCtrl AttributesCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.cs new file mode 100644 index 00000000..9ebdc028 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.cs @@ -0,0 +1,191 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control which displays browse tree. + /// + public partial class BrowseNodeCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public BrowseNodeCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Initializes the control with a root and a set of hierarchial reference types to follow. + /// + /// The session. + /// The root of the hierarchy to browse. + /// The reference types to follow. + public void Initialize( + Session session, + NodeId rootId, + params NodeId[] referenceTypeIds) + { + BrowseCTRL.Initialize(session, rootId, referenceTypeIds); + } + + /// + /// Changes the session used by the control. + /// + /// The session. + public void ChangeSession(Session session) + { + BrowseCTRL.ChangeSession(session); + } + + /// + /// The view to use. + /// + public ViewDescription View + { + get { return BrowseCTRL.View; } + set { BrowseCTRL.View = value; } + } + + /// + /// Gets or sets the default position of the splitter + /// + public int SplitterDistance + { + get { return MainPN.SplitterDistance; } + set { MainPN.SplitterDistance = value; } + } + + /// + /// Gets or sets a flag that indicates whether the attributes should be displayed. + /// + public bool AttributesListCollapsed + { + get { return MainPN.Panel2Collapsed; } + set { MainPN.Panel2Collapsed = value; } + } + + /// + /// Gets or sets the context menu for the browse tree. + /// + public ContextMenuStrip BrowseMenuStrip + { + get { return BrowseCTRL.BrowseMenuStrip; } + set { BrowseCTRL.BrowseMenuStrip = value; } + } + + /// + /// Gets or sets the context menu for the attributes list. + /// + public ContextMenuStrip AttributesMenuStrip + { + get { return AttributesCTRL.AttributesMenuStrip; } + set { AttributesCTRL.AttributesMenuStrip = value; } + } + + /// + /// The reference for the currently selected node. + /// + public ReferenceDescription SelectedNode + { + get + { + return BrowseCTRL.SelectedNode; + } + } + + /// + /// The reference for the parent of the currently selected node. + /// + public ReferenceDescription SelectedParent + { + get + { + return BrowseCTRL.SelectedParent; + } + } + + /// + /// Returns the child node at the specified index. + /// + public ReferenceDescription GetChildOfSelectedNode(int index) + { + return BrowseCTRL.GetChildOfSelectedNode(index); + } + + /// + /// Returns the attribute at the specified index. + /// + public ReadValueId GetSelectedAttribute(int index) + { + return AttributesCTRL.GetSelectedAttribute(index); + } + + /// + /// The reference for the parent of the currently selected node. + /// + public void RefreshSelection() + { + BrowseCTRL.RefreshSelection(); + } + + /// + /// Raised after a node is selected in the control. + /// + public event EventHandler AfterSelect + { + add { BrowseCTRL.AfterSelect += value; } + remove { BrowseCTRL.AfterSelect -= value; } + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseNodeCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.Designer.cs new file mode 100644 index 00000000..9879d0e3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.Designer.cs @@ -0,0 +1,114 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class BrowseTreeViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.BrowseMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.Browse_RefreshMI = new System.Windows.Forms.ToolStripMenuItem(); + this.BrowseTV = new System.Windows.Forms.TreeView(); + this.BrowseMenu.SuspendLayout(); + this.SuspendLayout(); + // + // BrowseMenu + // + this.BrowseMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Browse_RefreshMI}); + this.BrowseMenu.Name = "BrowseMenu"; + this.BrowseMenu.Size = new System.Drawing.Size(114, 26); + // + // Browse_RefreshMI + // + this.Browse_RefreshMI.Name = "Browse_RefreshMI"; + this.Browse_RefreshMI.Size = new System.Drawing.Size(113, 22); + this.Browse_RefreshMI.Text = "Refresh"; + this.Browse_RefreshMI.Click += new System.EventHandler(this.Browse_RefreshMI_Click); + // + // BrowseTV + // + this.BrowseTV.ContextMenuStrip = this.BrowseMenu; + this.BrowseTV.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseTV.Location = new System.Drawing.Point(0, 0); + this.BrowseTV.Name = "BrowseTV"; + this.BrowseTV.Size = new System.Drawing.Size(1003, 569); + this.BrowseTV.TabIndex = 2; + this.BrowseTV.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.BrowseTV_BeforeExpand); + this.BrowseTV.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.BrowseTV_AfterSelect); + // + // BrowseTreeViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseTV); + this.Name = "BrowseTreeViewCtrl"; + this.Size = new System.Drawing.Size(1003, 569); + this.BrowseMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip BrowseMenu; + private System.Windows.Forms.ToolStripMenuItem Browse_RefreshMI; + + /// + /// The tree control. + /// + public System.Windows.Forms.TreeView BrowseTV; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.cs new file mode 100644 index 00000000..97b78d7a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.cs @@ -0,0 +1,503 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control which displays browse tree. + /// + public partial class BrowseTreeViewCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public BrowseTreeViewCtrl() + { + InitializeComponent(); + BrowseTV.ImageList = new ClientUtils().ImageList; + m_typeImageMapping = new Dictionary(); + } + #endregion + + #region Private Fields + private Session m_session; + private NodeId m_rootId; + private NodeId[] m_referenceTypeIds; + private NodeId m_selectedNodeId; + private event EventHandler m_AfterSelect; + private ViewDescription m_view; + private Dictionary m_typeImageMapping; + #endregion + + #region Public Interface + /// + /// The view to use. + /// + public AttributesListViewCtrl AttributesControl { get; set; } + + /// + /// Initializes the control with a root and a set of hierarchial reference types to follow. + /// + /// The session. + /// The root of the hierarchy to browse. + /// The reference types to follow. + public void Initialize( + Session session, + NodeId rootId, + params NodeId[] referenceTypeIds) + { + // set default root. + if (NodeId.IsNull(rootId)) + { + rootId = Opc.Ua.ObjectIds.ObjectsFolder; + } + + // set default reference type. + if (referenceTypeIds == null) + { + referenceTypeIds = new NodeId[] { Opc.Ua.ReferenceTypeIds.HierarchicalReferences }; + } + + m_rootId = rootId; + m_referenceTypeIds = referenceTypeIds; + + // save session. + ChangeSession(session, true); + } + + /// + /// Selects a node in the control. + /// + public bool SelectNode(NodeId nodeId) + { + return SelectNode(BrowseTV.Nodes, nodeId); + } + + /// + /// Changes the session used by the control. + /// + /// The session. + public void ChangeSession(Session session) + { + if (Object.ReferenceEquals(session, m_session)) + { + return; + } + + ChangeSession(session, false); + } + + /// + /// The view to use. + /// + public ViewDescription View + { + get + { + return m_view; + } + + set + { + if (AttributesControl != null) + { + AttributesControl.View = value; + } + + m_view = value; + } + } + + /// + /// Gets or sets the context menu for the browse tree. + /// + public ContextMenuStrip BrowseMenuStrip + { + get { return BrowseTV.ContextMenuStrip; } + set { BrowseTV.ContextMenuStrip = value; } + } + + /// + /// The reference for the currently selected node. + /// + public ReferenceDescription SelectedNode + { + get + { + if (BrowseTV.SelectedNode == null) + { + return null; + } + + return BrowseTV.SelectedNode.Tag as ReferenceDescription; + } + } + + /// + /// The reference for the parent of the currently selected node. + /// + public ReferenceDescription SelectedParent + { + get + { + if (BrowseTV.SelectedNode == null || BrowseTV.SelectedNode.Parent == null) + { + return null; + } + + return BrowseTV.SelectedNode.Parent.Tag as ReferenceDescription; + } + } + + /// + /// Returns the child node at the specified index. + /// + public ReferenceDescription GetChildOfSelectedNode(int index) + { + if (BrowseTV.SelectedNode == null) + { + return null; + } + + if (BrowseTV.SelectedNode.Nodes.Count == 1 && BrowseTV.SelectedNode.Nodes[0].Text == String.Empty) + { + BrowseTV.SelectedNode.Expand(); + } + + if (index < 0 || index >= BrowseTV.SelectedNode.Nodes.Count) + { + return null; + } + + return BrowseTV.SelectedNode.Nodes[index].Tag as ReferenceDescription; + } + + /// + /// The reference for the parent of the currently selected node. + /// + public void RefreshSelection() + { + if (BrowseTV.SelectedNode == null || BrowseTV.SelectedNode.Parent == null) + { + return; + } + + BrowseTV.SelectedNode.Collapse(); + BrowseTV.SelectedNode.Nodes.Clear(); + BrowseTV.SelectedNode.Nodes.Add(new TreeNode()); + BrowseTV.SelectedNode.Expand(); + } + + /// + /// Raised after a node is selected in the control. + /// + public event EventHandler AfterSelect { add { m_AfterSelect += value; } remove { m_AfterSelect -= value; } } + #endregion + + #region Private Methods + /// + /// Recursively finds and selects a node in the control. + /// + private bool SelectNode(TreeNodeCollection nodes, NodeId nodeId) + { + foreach (TreeNode node in nodes) + { + ReferenceDescription reference = node.Tag as ReferenceDescription; + + if (reference != null) + { + if (reference.NodeId == nodeId) + { + BrowseTV.SelectedNode = node; + node.EnsureVisible(); + node.Checked = true; + return true; + } + } + + SelectNode(node.Nodes, nodeId); + } + + return false; + } + + /// + /// Changes the session used by the control. + /// + private void ChangeSession(Session session, bool refresh) + { + m_session = session; + + if (AttributesControl != null) + { + AttributesControl.ChangeSession(session); + } + + BrowseTV.Nodes.Clear(); + + if (m_session != null) + { + INode node = m_session.NodeCache.Find(m_rootId); + + if (node != null) + { + TreeNode root = new TreeNode(node.ToString()); + root.ImageIndex = ClientUtils.GetImageIndex(m_session, node.NodeClass, node.TypeDefinitionId, false); + root.SelectedImageIndex = ClientUtils.GetImageIndex(m_session, node.NodeClass, node.TypeDefinitionId, true); + + ReferenceDescription reference = new ReferenceDescription(); + reference.NodeId = node.NodeId; + reference.NodeClass = node.NodeClass; + reference.BrowseName = node.BrowseName; + reference.DisplayName = node.DisplayName; + reference.TypeDefinition = node.TypeDefinitionId; + root.Tag = reference; + + root.Nodes.Add(new TreeNode()); + BrowseTV.Nodes.Add(root); + root.Expand(); + BrowseTV.SelectedNode = root; + } + } + } + #endregion + + #region Event Handlers + /// + /// Handles the DoubleClick event of the BrowseTV control. + /// + private void BrowseTV_DoubleClick(object sender, EventArgs e) + { + try + { + if (BrowseTV.SelectedNode == null) + { + return; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Handles the AfterSelect event of the BrowseTV control. + /// + private void BrowseTV_AfterSelect(object sender, TreeViewEventArgs e) + { + try + { + m_selectedNodeId = null; + + if (BrowseTV.SelectedNode == null) + { + if (m_AfterSelect != null) m_AfterSelect(this, new EventArgs()); + return; + } + + // get node to browse. + ReferenceDescription reference = (ReferenceDescription)e.Node.Tag; + NodeId nodeId = m_rootId; + + if (reference != null) + { + nodeId = (NodeId)reference.NodeId; + } + + m_selectedNodeId = nodeId; + + if (AttributesControl != null) + { + AttributesControl.ReadAttributes(m_selectedNodeId, true); + } + + // raise event. + if (m_AfterSelect != null) m_AfterSelect(this, new EventArgs()); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Handles the BeforeExpand event of the BrowseTV control. + /// + private void BrowseTV_BeforeExpand(object sender, TreeViewCancelEventArgs e) + { + try + { + ReferenceDescription reference = (ReferenceDescription)e.Node.Tag; + e.Node.Nodes.Clear(); + + // build list of references to browse. + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + + for (int ii = 0; ii < m_referenceTypeIds.Length; ii++) + { + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = m_rootId; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = m_referenceTypeIds[ii]; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = 0; + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + if (reference != null) + { + nodeToBrowse.NodeId = (NodeId)reference.NodeId; + } + + nodesToBrowse.Add(nodeToBrowse); + } + + // add the childen to the control. + SortedDictionary dictionary = new SortedDictionary(); + + ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, View, nodesToBrowse, false); + + for (int ii = 0; references != null && ii < references.Count; ii++) + { + reference = references[ii]; + + // ignore out of server references. + if (reference.NodeId.IsAbsolute) + { + continue; + } + + if (dictionary.ContainsKey(reference.NodeId)) + { + continue; + } + + TreeNode child = new TreeNode(reference.ToString()); + + child.Nodes.Add(new TreeNode()); + child.Tag = reference; + + if (!reference.TypeDefinition.IsAbsolute) + { + try + { + if (!m_typeImageMapping.ContainsKey((NodeId)reference.TypeDefinition)) + { + List nodeIds = ClientUtils.TranslateBrowsePaths(m_session, (NodeId)reference.TypeDefinition, m_session.NamespaceUris, Opc.Ua.BrowseNames.Icon); + + if (nodeIds.Count > 0 && nodeIds[0] != null) + { + DataValue value = m_session.ReadValue(nodeIds[0]); + byte[] bytes = value.Value as byte[]; + + if (bytes != null) + { + System.IO.MemoryStream istrm = new System.IO.MemoryStream(bytes); + Image icon = Image.FromStream(istrm); + BrowseTV.ImageList.Images.Add(icon); + m_typeImageMapping[(NodeId)reference.TypeDefinition] = BrowseTV.ImageList.Images.Count - 1; + } + } + } + } + catch (Exception exception) + { + Utils.Trace(exception, "Error loading image."); + } + } + + int index = 0; + + if (!m_typeImageMapping.TryGetValue((NodeId)reference.TypeDefinition, out index)) + { + child.ImageIndex = ClientUtils.GetImageIndex(m_session, reference.NodeClass, reference.TypeDefinition, false); + child.SelectedImageIndex = ClientUtils.GetImageIndex(m_session, reference.NodeClass, reference.TypeDefinition, true); + } + else + { + child.ImageIndex = index; + child.SelectedImageIndex = index; + } + + dictionary[reference.NodeId] = child; + } + + // add nodes to tree. + foreach (TreeNode node in dictionary.Values.OrderBy(i => i.Text)) + { + e.Node.Nodes.Add(node); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BrowseTV_MouseDown(object sender, MouseEventArgs e) + { + try + { + BrowseTV.SelectedNode = BrowseTV.GetNodeAt(e.X, e.Y); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void Browse_RefreshMI_Click(object sender, EventArgs e) + { + try + { + RefreshSelection(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.resx new file mode 100644 index 00000000..fa898c91 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/BrowseTreeViewCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.Designer.cs new file mode 100644 index 00000000..963e8709 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.Designer.cs @@ -0,0 +1,147 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CallRequestDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonPN = new System.Windows.Forms.FlowLayoutPanel(); + this.CloseBTN = new System.Windows.Forms.Button(); + this.CallBTN = new System.Windows.Forms.Button(); + this.BackBTN = new System.Windows.Forms.Button(); + this.CallRequestCTRL = new Opc.Ua.Client.Controls.CallRequestListViewCtrl(); + this.ButtonPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonPN + // + this.ButtonPN.Controls.Add(this.CloseBTN); + this.ButtonPN.Controls.Add(this.CallBTN); + this.ButtonPN.Controls.Add(this.BackBTN); + this.ButtonPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonPN.Location = new System.Drawing.Point(0, 233); + this.ButtonPN.Name = "ButtonPN"; + this.ButtonPN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ButtonPN.Size = new System.Drawing.Size(784, 29); + this.ButtonPN.TabIndex = 1; + // + // CloseBTN + // + this.CloseBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CloseBTN.Location = new System.Drawing.Point(706, 3); + this.CloseBTN.Name = "CloseBTN"; + this.CloseBTN.Size = new System.Drawing.Size(75, 23); + this.CloseBTN.TabIndex = 0; + this.CloseBTN.Text = "Close"; + this.CloseBTN.UseVisualStyleBackColor = true; + this.CloseBTN.Click += new System.EventHandler(this.CloseBTN_Click); + // + // CallBTN + // + this.CallBTN.Location = new System.Drawing.Point(625, 3); + this.CallBTN.Name = "CallBTN"; + this.CallBTN.Size = new System.Drawing.Size(75, 23); + this.CallBTN.TabIndex = 1; + this.CallBTN.Text = "Call"; + this.CallBTN.UseVisualStyleBackColor = true; + this.CallBTN.Click += new System.EventHandler(this.CallBTN_Click); + // + // BackBTN + // + this.BackBTN.Location = new System.Drawing.Point(544, 3); + this.BackBTN.Name = "BackBTN"; + this.BackBTN.Size = new System.Drawing.Size(75, 23); + this.BackBTN.TabIndex = 2; + this.BackBTN.Text = "Back"; + this.BackBTN.UseVisualStyleBackColor = true; + this.BackBTN.Visible = false; + this.BackBTN.Click += new System.EventHandler(this.BackBTN_Click); + // + // CallRequestCTRL + // + this.CallRequestCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.CallRequestCTRL.Location = new System.Drawing.Point(0, 0); + this.CallRequestCTRL.Name = "CallRequestCTRL"; + this.CallRequestCTRL.Size = new System.Drawing.Size(784, 233); + this.CallRequestCTRL.TabIndex = 0; + // + // CallRequestDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 262); + this.Controls.Add(this.CallRequestCTRL); + this.Controls.Add(this.ButtonPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CallRequestDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Call Method"; + this.ButtonPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private CallRequestListViewCtrl CallRequestCTRL; + private System.Windows.Forms.FlowLayoutPanel ButtonPN; + private System.Windows.Forms.Button CloseBTN; + private System.Windows.Forms.Button CallBTN; + private System.Windows.Forms.Button BackBTN; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.cs new file mode 100644 index 00000000..c6565f3e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.cs @@ -0,0 +1,139 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to edit and issue call requests. + /// + public partial class CallRequestDlg : Form, ISessionForm + { + #region Constructors + /// + /// Creates an empty form. + /// + public CallRequestDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private Session m_session; + #endregion + + #region Public Interface + /// + /// Changes the session used for the call request. + /// + public void ChangeSession(Session session) + { + m_session = session; + CallRequestCTRL.ChangeSession(session); + } + + /// + /// Sets the method called by the control. + /// + public void SetMethod(NodeId objectId, NodeId methodId) + { + StringBuilder buffer = new StringBuilder(); + buffer.Append("Calling Method "); + buffer.Append(m_session.NodeCache.GetDisplayText(methodId)); + buffer.Append(" on Object "); + buffer.Append(m_session.NodeCache.GetDisplayText(objectId)); + this.Text = buffer.ToString(); + + CallRequestCTRL.SetMethod(objectId, methodId); + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + private void CallBTN_Click(object sender, EventArgs e) + { + try + { + CallRequestCTRL.Call(); + CallBTN.Visible = false; + BackBTN.Visible = true; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BackBTN_Click(object sender, EventArgs e) + { + try + { + CallRequestCTRL.Back(); + CallBTN.Visible = true; + BackBTN.Visible = false; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CloseBTN_Click(object sender, EventArgs e) + { + try + { + if (this.Modal) + { + DialogResult = DialogResult.Cancel; + } + else + { + this.Close(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.Designer.cs new file mode 100644 index 00000000..0d84979e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.Designer.cs @@ -0,0 +1,202 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CallRequestListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.NoArgumentsLB = new System.Windows.Forms.Label(); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.NameCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.EditMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(104, 26); + // + // EditMI + // + this.EditMI.Name = "EditMI"; + this.EditMI.Size = new System.Drawing.Size(103, 22); + this.EditMI.Text = "Edit..."; + this.EditMI.Click += new System.EventHandler(this.EditMI_Click); + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // NoArgumentsLB + // + this.NoArgumentsLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.NoArgumentsLB.Location = new System.Drawing.Point(0, 0); + this.NoArgumentsLB.Name = "NoArgumentsLB"; + this.NoArgumentsLB.Size = new System.Drawing.Size(779, 365); + this.NoArgumentsLB.TabIndex = 4; + this.NoArgumentsLB.Text = "No arguments to display."; + this.NoArgumentsLB.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.NoArgumentsLB.Visible = false; + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.NameCH, + this.DataTypeCH, + this.ValueCH, + this.ResultCH}); + this.ResultsDV.ContextMenuStrip = this.PopupMenu; + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersVisible = false; + this.ResultsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsDV.Size = new System.Drawing.Size(779, 365); + this.ResultsDV.TabIndex = 5; + this.ResultsDV.DoubleClick += new System.EventHandler(this.EditMI_Click); + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Icon.Width = 19; + // + // NameCH + // + this.NameCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NameCH.DataPropertyName = "Name"; + this.NameCH.HeaderText = "Name"; + this.NameCH.Name = "NameCH"; + this.NameCH.ReadOnly = true; + this.NameCH.Width = 60; + // + // DataTypeCH + // + this.DataTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataTypeCH.DataPropertyName = "DataType"; + this.DataTypeCH.HeaderText = "Data Type"; + this.DataTypeCH.Name = "DataTypeCH"; + this.DataTypeCH.ReadOnly = true; + this.DataTypeCH.Width = 82; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.ReadOnly = true; + // + // ResultCH + // + this.ResultCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ResultCH.DataPropertyName = "Result"; + this.ResultCH.HeaderText = "Result"; + this.ResultCH.Name = "ResultCH"; + this.ResultCH.ReadOnly = true; + this.ResultCH.Visible = false; + // + // CallRequestListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.NoArgumentsLB); + this.Controls.Add(this.ResultsDV); + this.Name = "CallRequestListViewCtrl"; + this.Size = new System.Drawing.Size(779, 365); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem EditMI; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.Label NoArgumentsLB; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn NameCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ResultCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.cs new file mode 100644 index 00000000..913ed349 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.cs @@ -0,0 +1,390 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class CallRequestListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public CallRequestListViewCtrl() + { + InitializeComponent(); + ResultsDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Arguments"); + + m_dataset.Tables[0].Columns.Add("Argument", typeof(Argument)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("Name", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + m_dataset.Tables[0].Columns.Add("Result", typeof(string)); + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private NodeId m_objectId; + private NodeId m_methodId; + private Argument[] m_inputArguments; + private Argument[] m_outputArguments; + #endregion + + #region Public Members + /// + /// Changes the session used for the call request. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Sets the method for the call request. + /// + public void SetMethod(NodeId objectId, NodeId methodId) + { + if (objectId == null) + { + new ArgumentNullException("objectId"); + } + + if (methodId == null) + { + new ArgumentNullException("methodId"); + } + + m_objectId = objectId; + m_methodId = methodId; + + ReadArguments(methodId); + DisplayInputArguments(); + } + + /// + /// Calls the method. + /// + public void Call() + { + // build list of methods to call. + CallMethodRequestCollection methodsToCall = new CallMethodRequestCollection(); + + CallMethodRequest methodToCall = new CallMethodRequest(); + + methodToCall.ObjectId = m_objectId; + methodToCall.MethodId = m_methodId; + + foreach (DataRow row in m_dataset.Tables[0].Rows) + { + Argument argument = (Argument)row[0]; + Variant value = (Variant)row[4]; + argument.Value = value.Value; + methodToCall.InputArguments.Add(value); + } + + methodsToCall.Add(methodToCall); + + // call the method. + CallMethodResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = m_session.Call( + null, + methodsToCall, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, methodsToCall); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, methodsToCall); + + for (int ii = 0; ii < results.Count; ii++) + { + // display any input argument errors. + if (results[ii].InputArgumentResults != null) + { + for (int jj = 0; jj < results[ii].InputArgumentResults.Count; jj++) + { + if (StatusCode.IsBad(results[ii].InputArgumentResults[jj])) + { + DataRow row = m_dataset.Tables[0].Rows[jj]; + row[5] = results[ii].InputArgumentResults[jj].ToString(); + ResultCH.Visible = true; + } + } + } + + // throw an exception on error. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + throw ServiceResultException.Create(results[ii].StatusCode, ii, diagnosticInfos, responseHeader.StringTable); + } + + // display the output arguments + ResultCH.Visible = false; + NoArgumentsLB.Visible = m_outputArguments == null || m_outputArguments.Length == 0; + NoArgumentsLB.Text = "Method invoked successfully.\r\nNo output arguments to display."; + m_dataset.Tables[0].Rows.Clear(); + + if (m_outputArguments != null) + { + for (int jj = 0; jj < m_outputArguments.Length; jj++) + { + DataRow row = m_dataset.Tables[0].NewRow(); + + if (results[ii].OutputArguments.Count > jj) + { + UpdateRow(row, m_outputArguments[jj], results[ii].OutputArguments[jj], true); + } + else + { + UpdateRow(row, m_outputArguments[jj], Variant.Null, true); + } + + m_dataset.Tables[0].Rows.Add(row); + } + } + } + } + + /// + /// Returns the grid to the enter input arguments state. + /// + public void Back() + { + DisplayInputArguments(); + + // clear any selection. + foreach (DataGridViewRow row in ResultsDV.Rows) + { + row.Selected = false; + } + } + #endregion + + #region Private Methods + /// + /// Displays the input arguments. + /// + private void DisplayInputArguments() + { + ResultCH.Visible = false; + NoArgumentsLB.Visible = m_inputArguments == null || m_inputArguments.Length == 0; + NoArgumentsLB.Text = "No input arguments to display."; + + m_dataset.Tables[0].Rows.Clear(); + + if (m_inputArguments != null) + { + foreach (Argument argument in m_inputArguments) + { + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, argument, new Variant(argument.Value), false); + m_dataset.Tables[0].Rows.Add(row); + } + } + } + + /// + /// Updates the row with an argument and its value. + /// + private void UpdateRow(DataRow row, Argument argument, Variant value, bool isOutputArgument) + { + string dataType = m_session.NodeCache.GetDisplayText(argument.DataType); + + if (argument.ValueRank >= 0) + { + dataType += "[]"; + } + + row[0] = argument; + row[1] = ImageList.Images[ClientUtils.GetImageIndex(isOutputArgument, value.Value)]; + row[2] = argument.Name; + row[3] = dataType; + row[4] = value; + row[5] = String.Empty; + } + + /// + /// Reads the arguments for the method. + /// + private void ReadArguments(NodeId nodeId) + { + m_inputArguments = null; + m_outputArguments = null; + + // build list of references to browse. + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = nodeId; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasProperty; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = (uint)NodeClass.Variable; + nodeToBrowse.ResultMask = (uint)BrowseResultMask.BrowseName; + + nodesToBrowse.Add(nodeToBrowse); + + // find properties. + ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, null, nodesToBrowse, false); + + // build list of properties to read. + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + for (int ii = 0; references != null && ii < references.Count; ii++) + { + ReferenceDescription reference = references[ii]; + + // ignore out of server references. + if (reference.NodeId.IsAbsolute) + { + continue; + } + + // ignore other properties. + if (reference.BrowseName != Opc.Ua.BrowseNames.InputArguments && reference.BrowseName != Opc.Ua.BrowseNames.OutputArguments) + { + continue; + } + + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = (NodeId)reference.NodeId; + nodeToRead.AttributeId = Attributes.Value; + nodeToRead.Handle = reference; + nodesToRead.Add(nodeToRead); + } + + // method has no arguments. + if (nodesToRead.Count == 0) + { + return; + } + + // read the arguments. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // save the results. + for (int ii = 0; ii < results.Count; ii++) + { + ReferenceDescription reference = (ReferenceDescription)nodesToRead[ii].Handle; + + if (StatusCode.IsGood(results[ii].StatusCode)) + { + if (reference.BrowseName == Opc.Ua.BrowseNames.InputArguments) + { + m_inputArguments = (Argument[])ExtensionObject.ToArray(results[ii].GetValue(null), typeof(Argument)); + } + + if (reference.BrowseName == Opc.Ua.BrowseNames.OutputArguments) + { + m_outputArguments = (Argument[])ExtensionObject.ToArray(results[ii].GetValue(null), typeof(Argument)); + } + } + } + + // set default values for input arguments. + if (m_inputArguments != null) + { + foreach (Argument argument in m_inputArguments) + { + argument.Value = TypeInfo.GetDefaultValue(argument.DataType, argument.ValueRank, m_session.TypeTree); + } + } + } + #endregion + + #region Event Handlers + private void EditMI_Click(object sender, EventArgs e) + { + try + { + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + Argument argument = (Argument)source.Row[0]; + + BuiltInType builtInType = TypeInfo.GetBuiltInType(argument.DataType, m_session.TypeTree); + + object result = new EditComplexValueDlg().ShowDialog( + new TypeInfo(builtInType, argument.ValueRank), + argument.Name, + argument.Value, + "Edit Input Argument"); + + if (result != null) + { + argument.Value = result; + UpdateRow(source.Row, argument, new Variant(result), false); + } + + break; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.resx new file mode 100644 index 00000000..9cd2ccbb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/CallRequestListViewCtrl.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 136, 17 + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.Designer.cs new file mode 100644 index 00000000..808eb880 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.Designer.cs @@ -0,0 +1,121 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ConnectServerCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ConnectBTN = new System.Windows.Forms.Button(); + this.UseSecurityCK = new System.Windows.Forms.CheckBox(); + this.UrlCB = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // ConnectBTN + // + this.ConnectBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConnectBTN.Location = new System.Drawing.Point(425, 0); + this.ConnectBTN.Name = "ConnectBTN"; + this.ConnectBTN.Size = new System.Drawing.Size(75, 23); + this.ConnectBTN.TabIndex = 2; + this.ConnectBTN.Text = "Connect"; + this.ConnectBTN.UseVisualStyleBackColor = true; + this.ConnectBTN.Click += new System.EventHandler(this.Server_ConnectMI_Click); + // + // UseSecurityCK + // + this.UseSecurityCK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.UseSecurityCK.AutoSize = true; + this.UseSecurityCK.Checked = true; + this.UseSecurityCK.CheckState = System.Windows.Forms.CheckState.Checked; + this.UseSecurityCK.Location = new System.Drawing.Point(335, 3); + this.UseSecurityCK.Name = "UseSecurityCK"; + this.UseSecurityCK.Size = new System.Drawing.Size(86, 17); + this.UseSecurityCK.TabIndex = 1; + this.UseSecurityCK.Text = "Use Security"; + this.UseSecurityCK.UseVisualStyleBackColor = true; + // + // UrlCB + // + this.UrlCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UrlCB.FormattingEnabled = true; + this.UrlCB.Location = new System.Drawing.Point(0, 1); + this.UrlCB.Name = "UrlCB"; + this.UrlCB.Size = new System.Drawing.Size(327, 21); + this.UrlCB.TabIndex = 0; + // + // ConnectServerCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ConnectBTN); + this.Controls.Add(this.UseSecurityCK); + this.Controls.Add(this.UrlCB); + this.MaximumSize = new System.Drawing.Size(2048, 23); + this.MinimumSize = new System.Drawing.Size(500, 23); + this.Name = "ConnectServerCtrl"; + this.Size = new System.Drawing.Size(500, 23); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button ConnectBTN; + private System.Windows.Forms.CheckBox UseSecurityCK; + private System.Windows.Forms.ComboBox UrlCB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.cs new file mode 100644 index 00000000..29aebad5 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.cs @@ -0,0 +1,755 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Drawing; +using System.Threading.Tasks; +using System.Windows.Forms; +using Opc.Ua.Client.ComplexTypes; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A tool bar used to connect to a server. + /// + public partial class ConnectServerCtrl : UserControl + { + #region Constructors + /// + /// Initializes the object. + /// + public ConnectServerCtrl() + { + InitializeComponent(); + m_CertificateValidation = new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + m_endpoints = new Dictionary(); + } + #endregion + + #region Private Fields + private ApplicationConfiguration m_configuration; + private Session m_session; + private SessionReconnectHandler m_reconnectHandler; + private CertificateValidationEventHandler m_CertificateValidation; + private EventHandler m_ReconnectComplete; + private EventHandler m_ReconnectStarting; + private EventHandler m_KeepAliveComplete; + private EventHandler m_ConnectComplete; + private StatusStrip m_StatusStrip; + private ToolStripItem m_ServerStatusLB; + private ToolStripItem m_StatusUpateTimeLB; + private Dictionary m_endpoints; + #endregion + + #region Public Members + /// + /// Default session values. + /// + public static readonly uint DefaultSessionTimeout = 60000; + public static readonly int DefaultDiscoverTimeout = 15000; + public static readonly int DefaultReconnectPeriod = 10; + + /// + /// A strip used to display session status information. + /// + public StatusStrip StatusStrip + { + get => m_StatusStrip; + + set + { + if (!Object.ReferenceEquals(m_StatusStrip, value)) + { + m_StatusStrip = value; + + if (value != null) + { + m_ServerStatusLB = new ToolStripStatusLabel(); + m_StatusUpateTimeLB = new ToolStripStatusLabel(); + m_StatusStrip.Items.Add(m_ServerStatusLB); + m_StatusStrip.Items.Add(m_StatusUpateTimeLB); + } + } + } + } + + /// + /// A control that contains the last time a keep alive was returned from the server. + /// + public ToolStripItem ServerStatusControl { get => m_ServerStatusLB; set => m_ServerStatusLB = value; } + + /// + /// A control that contains the last time a keep alive was returned from the server. + /// + public ToolStripItem StatusUpateTimeControl { get => m_StatusUpateTimeLB; set => m_StatusUpateTimeLB = value; } + + /// + /// The name of the session to create. + /// + public string SessionName { get; set; } + + /// + /// Gets or sets a flag indicating that the domain checks should be ignored when connecting. + /// + public bool DisableDomainCheck { get; set; } + + /// + /// Gets the cached EndpointDescription for a Url. + /// + public EndpointDescription GetEndpointDescription(Uri url) + { + EndpointDescription endpointDescription; + if (m_endpoints.TryGetValue(url, out endpointDescription)) + { + return endpointDescription; + } + return null; + } + + /// + /// The URL displayed in the control. + /// + public string ServerUrl + { + get + { + if (UrlCB.SelectedIndex >= 0) + { + return (string)UrlCB.SelectedItem; + } + + return UrlCB.Text; + } + + set + { + UrlCB.SelectedIndex = -1; + UrlCB.Text = value; + } + } + + /// + /// Whether to use security when connecting. + /// + public bool UseSecurity + { + get => UseSecurityCK.Checked; + set => UseSecurityCK.Checked = value; + } + + /// + /// The locales to use when creating the session. + /// + public string[] PreferredLocales { get; set; } + + /// + /// The user identity to use when creating the session. + /// + public IUserIdentity UserIdentity { get; set; } + + /// + /// The client application configuration. + /// + public ApplicationConfiguration Configuration + { + get => m_configuration; + + set + { + if (!Object.ReferenceEquals(m_configuration, value)) + { + if (m_configuration != null) + { + m_configuration.CertificateValidator.CertificateValidation -= m_CertificateValidation; + } + + m_configuration = value; + + if (m_configuration != null) + { + m_configuration.CertificateValidator.CertificateValidation += m_CertificateValidation; + } + } + } + } + + /// + /// The currently active session. + /// + public Session Session => m_session; + + /// + /// The number of seconds between reconnect attempts (0 means reconnect is disabled). + /// + public int ReconnectPeriod { get; set; } = DefaultReconnectPeriod; + + /// + /// The discover timeout. + /// + public int DiscoverTimeout { get; set; } = DefaultDiscoverTimeout; + + /// + /// The session timeout. + /// + public uint SessionTimeout { get; set; } = DefaultSessionTimeout; + + /// + /// Raised when a good keep alive from the server arrives. + /// + public event EventHandler KeepAliveComplete + { + add { m_KeepAliveComplete += value; } + remove { m_KeepAliveComplete -= value; } + } + + /// + /// Raised when a reconnect operation starts. + /// + public event EventHandler ReconnectStarting + { + add { m_ReconnectStarting += value; } + remove { m_ReconnectStarting -= value; } + } + + /// + /// Raised when a reconnect operation completes. + /// + public event EventHandler ReconnectComplete + { + add { m_ReconnectComplete += value; } + remove { m_ReconnectComplete -= value; } + } + + /// + /// Raised after successfully connecting to or disconnecing from a server. + /// + public event EventHandler ConnectComplete + { + add { m_ConnectComplete += value; } + remove { m_ConnectComplete -= value; } + } + + /// + /// Sets the URLs shown in the control. + /// + public void SetAvailableUrls(IList urls) + { + UrlCB.Items.Clear(); + + if (urls != null) + { + foreach (string url in urls) + { + int index = url.LastIndexOf("/discovery", StringComparison.InvariantCultureIgnoreCase); + + if (index != -1) + { + UrlCB.Items.Add(url.Substring(0, index)); + continue; + } + + UrlCB.Items.Add(url); + } + + if (UrlCB.Items.Count > 0) + { + UrlCB.SelectedIndex = 0; + } + } + } + + /// + /// Creates a new session. + /// + /// The new session object. + private async Task Connect( + ITransportWaitingConnection connection, + EndpointDescription endpointDescription, + bool useSecurity, + uint sessionTimeout = 0) + { + // disconnect from existing session. + InternalDisconnect(); + + // select the best endpoint. + if (endpointDescription == null) + { + endpointDescription = CoreClientUtils.SelectEndpoint(m_configuration, connection, useSecurity, DiscoverTimeout); + } + + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(m_configuration); + ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration); + + m_session = await Session.Create( + m_configuration, + connection, + endpoint, + false, + !DisableDomainCheck, + (String.IsNullOrEmpty(SessionName)) ? m_configuration.ApplicationName : SessionName, + sessionTimeout, + UserIdentity, + PreferredLocales); + + // set up keep alive callback. + m_session.KeepAlive += new KeepAliveEventHandler(Session_KeepAlive); + + // raise an event. + DoConnectComplete(null); + + try + { + UpdateStatus(false, DateTime.Now, "Connected, loading complex type system."); + var typeSystemLoader = new ComplexTypeSystem(m_session); + await typeSystemLoader.Load(); + } + catch (Exception e) + { + UpdateStatus(true, DateTime.Now, "Connected, failed to load complex type system."); + Utils.Trace(e, "Failed to load complex type system."); + } + + // return the new session. + return m_session; + } + + /// + /// Creates a new session. + /// + /// The new session object. + public Task Connect() + { + // determine the URL that was selected. + string serverUrl = UrlCB.Text; + if (UrlCB.SelectedIndex >= 0) + { + serverUrl = (string)UrlCB.SelectedItem; + } + bool useSecurity = UseSecurityCK.Checked; + return Connect(serverUrl, useSecurity); + } + + /// + /// Creates a new session. + /// + /// The new session object. + private async Task Connect( + string serverUrl, + bool useSecurity, + uint sessionTimeout = 0) + { + // disconnect from existing session. + InternalDisconnect(); + + // select the best endpoint. + var endpointDescription = CoreClientUtils.SelectEndpoint(serverUrl, useSecurity, DiscoverTimeout); + var endpointConfiguration = EndpointConfiguration.Create(m_configuration); + var endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration); + + m_session = await Session.Create( + m_configuration, + endpoint, + false, + !DisableDomainCheck, + (String.IsNullOrEmpty(SessionName)) ? m_configuration.ApplicationName : SessionName, + sessionTimeout == 0 ? DefaultSessionTimeout : sessionTimeout, + UserIdentity, + PreferredLocales); + + // set up keep alive callback. + m_session.KeepAlive += new KeepAliveEventHandler(Session_KeepAlive); + + // raise an event. + DoConnectComplete(null); + + try + { + UpdateStatus(false, DateTime.Now, "Connected, loading complex type system."); + var typeSystemLoader = new ComplexTypeSystem(m_session); + await typeSystemLoader.Load(); + } + catch (Exception e) + { + UpdateStatus(true, DateTime.Now, "Connected, failed to load complex type system."); + Utils.Trace(e, "Failed to load complex type system."); + } + + // return the new session. + return m_session; + } + + /// + /// Creates a new session. + /// + /// The URL of a server endpoint. + /// Whether to use security. + /// The new session object. + public async Task ConnectAsync( + string serverUrl = null, + bool useSecurity = false, + uint sessionTimeout = 0 + ) + { + if (serverUrl == null) + { + serverUrl = UrlCB.Text; + + if (UrlCB.SelectedIndex >= 0) + { + serverUrl = (string)UrlCB.SelectedItem; + } + + useSecurity = UseSecurityCK.Checked; + } + else + { + UrlCB.Text = serverUrl; + UseSecurityCK.Checked = useSecurity; + } + + return await Task.Run(() => Connect(serverUrl, useSecurity, sessionTimeout)); + } + + /// + /// Create a new reverse connection. + /// + /// + /// + public async Task ConnectAsync( + ITransportWaitingConnection connection, + bool useSecurity, + int discoverTimeout = -1, + uint sessionTimeout = 0 + ) + { + if (connection.EndpointUrl == null) + { + throw new ArgumentException("Endpoint URL is not valid."); + } + + UrlCB.Text = connection.EndpointUrl.ToString(); + UseSecurityCK.Checked = useSecurity; + + EndpointDescription endpointDescription = null; + + if (!m_endpoints.TryGetValue(connection.EndpointUrl, out endpointDescription)) + { + // Discovery uses the reverse connection and closes it + // return and wait for next reverse hello + endpointDescription = CoreClientUtils.SelectEndpoint(m_configuration, connection, useSecurity, discoverTimeout); + m_endpoints[connection.EndpointUrl] = endpointDescription; + return null; + } + + return await Connect(connection, endpointDescription, UseSecurityCK.Checked, sessionTimeout); + } + + /// + /// Disconnects from the server. + /// + public Task DisconnectAsync() + { + UpdateStatus(false, DateTime.UtcNow, "Disconnected"); + return Task.Run(() => InternalDisconnect()); + } + + /// + /// Disconnects from the server. + /// + private void InternalDisconnect() + { + // stop any reconnect operation. + if (m_reconnectHandler != null) + { + m_reconnectHandler.Dispose(); + m_reconnectHandler = null; + } + + // disconnect any existing session. + if (m_session != null) + { + m_session.KeepAlive -= Session_KeepAlive; + m_session.Close(10000); + m_session = null; + } + + // raise an event. + DoConnectComplete(null); + } + + /// + /// Disconnects from the server. + /// + public void Disconnect() + { + UpdateStatus(false, DateTime.UtcNow, "Disconnected"); + + // stop any reconnect operation. + InternalDisconnect(); + } + + /// + /// Prompts the user to choose a server on another host. + /// + public void Discover(string hostName) + { + string endpointUrl = new DiscoverServerDlg().ShowDialog(m_configuration, hostName); + + if (endpointUrl != null) + { + ServerUrl = endpointUrl; + } + } + #endregion + + #region Private Methods + /// + /// Raises the connect complete event on the main GUI thread. + /// + private void DoConnectComplete(object state) + { + if (m_ConnectComplete != null) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new System.Threading.WaitCallback(DoConnectComplete), state); + return; + } + + m_ConnectComplete(this, null); + } + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + private EndpointDescription SelectEndpoint() + { + try + { + Cursor = Cursors.WaitCursor; + + // determine the URL that was selected. + string discoveryUrl = UrlCB.Text; + + if (UrlCB.SelectedIndex >= 0) + { + discoveryUrl = (string)UrlCB.SelectedItem; + } + + // return the selected endpoint. + return CoreClientUtils.SelectEndpoint(discoveryUrl, UseSecurityCK.Checked, DiscoverTimeout); + } + finally + { + Cursor = Cursors.Default; + } + } + #endregion + + #region Event Handlers + private delegate void UpdateStatusCallback(bool error, DateTime time, string status, params object[] arg); + /// + /// Updates the status control. + /// + /// Whether the status represents an error. + /// The time associated with the status. + /// The status message. + /// Arguments used to format the status message. + private void UpdateStatus(bool error, DateTime time, string status, params object[] args) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new UpdateStatusCallback(UpdateStatus), error, time, status, args); + return; + } + + if (m_ServerStatusLB != null) + { + m_ServerStatusLB.Text = String.Format(status, args); + m_ServerStatusLB.ForeColor = (error) ? Color.Red : Color.Empty; + } + + if (m_StatusUpateTimeLB != null) + { + m_StatusUpateTimeLB.Text = time.ToLocalTime().ToString("hh:mm:ss"); + m_StatusUpateTimeLB.ForeColor = (error) ? Color.Red : Color.Empty; + } + } + + /// + /// Handles a keep alive event from a session. + /// + private void Session_KeepAlive(Session session, KeepAliveEventArgs e) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new KeepAliveEventHandler(Session_KeepAlive), session, e); + return; + } + + try + { + // check for events from discarded sessions. + if (!Object.ReferenceEquals(session, m_session)) + { + return; + } + + // start reconnect sequence on communication error. + if (ServiceResult.IsBad(e.Status)) + { + if (ReconnectPeriod <= 0) + { + UpdateStatus(true, e.CurrentTime, "Communication Error ({0})", e.Status); + return; + } + + UpdateStatus(true, e.CurrentTime, "Reconnecting in {0}s", ReconnectPeriod); + + if (m_reconnectHandler == null) + { + if (m_ReconnectStarting != null) + { + m_ReconnectStarting(this, e); + } + + m_reconnectHandler = new SessionReconnectHandler(); + m_reconnectHandler.BeginReconnect(m_session, ReconnectPeriod * 1000, Server_ReconnectComplete); + } + + return; + } + + // update status. + UpdateStatus(false, e.CurrentTime, "Connected [{0}]", session.Endpoint.EndpointUrl); + + // raise any additional notifications. + if (m_KeepAliveComplete != null) + { + m_KeepAliveComplete(this, e); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Handles a click on the connect button. + /// + private async void Server_ConnectMI_Click(object sender, EventArgs e) + { + try + { + await ConnectAsync(); + } + catch (ServiceResultException sre) + { + if (sre.StatusCode == StatusCodes.BadCertificateHostNameInvalid) + { + if (GuiUtils.HandleDomainCheckError(this.FindForm().Text, sre.Result)) + { + DisableDomainCheck = true; + }; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Handles a reconnect event complete from the reconnect handler. + /// + private void Server_ReconnectComplete(object sender, EventArgs e) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new EventHandler(Server_ReconnectComplete), sender, e); + return; + } + + try + { + // ignore callbacks from discarded objects. + if (!Object.ReferenceEquals(sender, m_reconnectHandler)) + { + return; + } + + m_session = m_reconnectHandler.Session; + m_reconnectHandler.Dispose(); + m_reconnectHandler = null; + + // raise any additional notifications. + if (m_ReconnectComplete != null) + { + m_ReconnectComplete(this, e); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Handles a certificate validation error. + /// + private void CertificateValidator_CertificateValidation(CertificateValidator sender, CertificateValidationEventArgs e) + { + if (this.InvokeRequired) + { + this.Invoke(new CertificateValidationEventHandler(CertificateValidator_CertificateValidation), sender, e); + return; + } + + try + { + if (!m_configuration.SecurityConfiguration.AutoAcceptUntrustedCertificates) + { + GuiUtils.HandleCertificateValidationError(this.FindForm(), sender, e); + } + else + { + e.Accept = true; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ConnectServerCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.Designer.cs new file mode 100644 index 00000000..bc2aa382 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.Designer.cs @@ -0,0 +1,226 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditAnnotationDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.AnnotationTimeLB = new System.Windows.Forms.Label(); + this.AnnotationTimeDP = new System.Windows.Forms.DateTimePicker(); + this.UserNameLB = new System.Windows.Forms.Label(); + this.UserNameTB = new System.Windows.Forms.TextBox(); + this.CommentLB = new System.Windows.Forms.Label(); + this.CommentTB = new System.Windows.Forms.TextBox(); + this.BottomPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(375, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 80); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(453, 30); + this.BottomPN.TabIndex = 0; + // + // ControlsPN + // + this.ControlsPN.ColumnCount = 2; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 115F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.AnnotationTimeLB, 0, 2); + this.ControlsPN.Controls.Add(this.AnnotationTimeDP, 1, 2); + this.ControlsPN.Controls.Add(this.UserNameLB, 0, 1); + this.ControlsPN.Controls.Add(this.UserNameTB, 1, 1); + this.ControlsPN.Controls.Add(this.CommentLB, 0, 0); + this.ControlsPN.Controls.Add(this.CommentTB, 1, 0); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 4; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.Size = new System.Drawing.Size(453, 80); + this.ControlsPN.TabIndex = 1; + // + // AnnotationTimeLB + // + this.AnnotationTimeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AnnotationTimeLB.AutoSize = true; + this.AnnotationTimeLB.Location = new System.Drawing.Point(3, 52); + this.AnnotationTimeLB.Name = "AnnotationTimeLB"; + this.AnnotationTimeLB.Size = new System.Drawing.Size(84, 26); + this.AnnotationTimeLB.TabIndex = 4; + this.AnnotationTimeLB.Text = "Annotation Time"; + this.AnnotationTimeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // AnnotationTimeDP + // + this.AnnotationTimeDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AnnotationTimeDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.AnnotationTimeDP.Enabled = false; + this.AnnotationTimeDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.AnnotationTimeDP.Location = new System.Drawing.Point(118, 55); + this.AnnotationTimeDP.Name = "AnnotationTimeDP"; + this.AnnotationTimeDP.Size = new System.Drawing.Size(138, 20); + this.AnnotationTimeDP.TabIndex = 5; + // + // UserNameLB + // + this.UserNameLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.UserNameLB.AutoSize = true; + this.UserNameLB.Location = new System.Drawing.Point(3, 26); + this.UserNameLB.Name = "UserNameLB"; + this.UserNameLB.Size = new System.Drawing.Size(60, 26); + this.UserNameLB.TabIndex = 2; + this.UserNameLB.Text = "User Name"; + this.UserNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserNameTB + // + this.UserNameTB.Location = new System.Drawing.Point(118, 29); + this.UserNameTB.Name = "UserNameTB"; + this.UserNameTB.Size = new System.Drawing.Size(138, 20); + this.UserNameTB.TabIndex = 3; + // + // CommentLB + // + this.CommentLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.CommentLB.AutoSize = true; + this.CommentLB.Location = new System.Drawing.Point(3, 0); + this.CommentLB.Name = "CommentLB"; + this.CommentLB.Size = new System.Drawing.Size(50, 26); + this.CommentLB.TabIndex = 0; + this.CommentLB.Text = "Message"; + this.CommentLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // CommentTB + // + this.CommentTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.CommentTB.Location = new System.Drawing.Point(118, 3); + this.CommentTB.Multiline = true; + this.CommentTB.Name = "CommentTB"; + this.CommentTB.Size = new System.Drawing.Size(332, 20); + this.CommentTB.TabIndex = 1; + // + // EditAnnotationDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(453, 110); + this.Controls.Add(this.ControlsPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditAnnotationDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Annotation"; + this.BottomPN.ResumeLayout(false); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label AnnotationTimeLB; + private System.Windows.Forms.DateTimePicker AnnotationTimeDP; + private System.Windows.Forms.Label UserNameLB; + private System.Windows.Forms.TextBox UserNameTB; + private System.Windows.Forms.Label CommentLB; + private System.Windows.Forms.TextBox CommentTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.cs new file mode 100644 index 00000000..838e290e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.cs @@ -0,0 +1,115 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditAnnotationDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditAnnotationDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private Session m_session; + #endregion + + #region Public Interface + /// + /// Prompts the user to edit an annotation. + /// + public Annotation ShowDialog(Session session, Annotation annotation, string caption) + { + if (caption != null) + { + this.Text = caption; + } + + m_session = session; + + if (annotation == null) + { + annotation = new Annotation(); + annotation.AnnotationTime = DateTime.UtcNow; + annotation.UserName = Environment.GetEnvironmentVariable("USERNAME"); + annotation.Message = ""; + } + + AnnotationTimeDP.Value = annotation.AnnotationTime; + UserNameTB.Text = annotation.UserName; + CommentTB.Text = annotation.Message; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + annotation = new Annotation(); + annotation.AnnotationTime = AnnotationTimeDP.Value; + annotation.UserName = UserNameTB.Text; + annotation.Message = CommentTB.Text; + + return annotation; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditAnnotationDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.Designer.cs new file mode 100644 index 00000000..220fd12e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.Designer.cs @@ -0,0 +1,246 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditComplexValue2Dlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditComplexValue2Dlg)); + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.UpdateBTN = new System.Windows.Forms.Button(); + this.RefreshBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueTB = new System.Windows.Forms.TextBox(); + this.StatusCTRL = new System.Windows.Forms.StatusStrip(); + this.DataTypeLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.DataTypeTB = new System.Windows.Forms.ToolStripStatusLabel(); + this.EncodingCB = new System.Windows.Forms.ToolStripDropDownButton(); + this.Encoding_DefaultXMLMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Encoding_DefaultBinaryMI = new System.Windows.Forms.ToolStripMenuItem(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.StatusCTRL.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(582, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 1; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 2; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.UpdateBTN); + this.BottomPN.Controls.Add(this.RefreshBTN); + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 273); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(660, 30); + this.BottomPN.TabIndex = 0; + // + // UpdateBTN + // + this.UpdateBTN.Location = new System.Drawing.Point(165, 4); + this.UpdateBTN.Name = "UpdateBTN"; + this.UpdateBTN.Size = new System.Drawing.Size(75, 23); + this.UpdateBTN.TabIndex = 0; + this.UpdateBTN.Text = "Update"; + this.UpdateBTN.UseVisualStyleBackColor = true; + this.UpdateBTN.Click += new System.EventHandler(this.UpdateBTN_Click); + // + // RefreshBTN + // + this.RefreshBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.RefreshBTN.Location = new System.Drawing.Point(84, 4); + this.RefreshBTN.Name = "RefreshBTN"; + this.RefreshBTN.Size = new System.Drawing.Size(75, 23); + this.RefreshBTN.TabIndex = 3; + this.RefreshBTN.Text = "Refresh"; + this.RefreshBTN.UseVisualStyleBackColor = true; + this.RefreshBTN.Click += new System.EventHandler(this.RefreshBTN_Click); + // + // MainPN + // + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ValueTB); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3); + this.MainPN.Size = new System.Drawing.Size(660, 273); + this.MainPN.TabIndex = 2; + // + // ValueTB + // + this.ValueTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueTB.Location = new System.Drawing.Point(3, 3); + this.ValueTB.MaxLength = 10240000; + this.ValueTB.Multiline = true; + this.ValueTB.Name = "ValueTB"; + this.ValueTB.Size = new System.Drawing.Size(654, 267); + this.ValueTB.TabIndex = 0; + this.ValueTB.TextChanged += new System.EventHandler(this.ValueTB_TextChanged); + // + // StatusCTRL + // + this.StatusCTRL.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DataTypeLB, + this.DataTypeTB, + this.EncodingCB}); + this.StatusCTRL.Location = new System.Drawing.Point(0, 303); + this.StatusCTRL.Name = "StatusCTRL"; + this.StatusCTRL.Size = new System.Drawing.Size(660, 22); + this.StatusCTRL.TabIndex = 1; + this.StatusCTRL.Text = "statusStrip1"; + // + // DataTypeLB + // + this.DataTypeLB.Name = "DataTypeLB"; + this.DataTypeLB.Size = new System.Drawing.Size(60, 17); + this.DataTypeLB.Text = "Data Type"; + // + // DataTypeTB + // + this.DataTypeTB.Name = "DataTypeTB"; + this.DataTypeTB.Size = new System.Drawing.Size(55, 17); + this.DataTypeTB.Text = "Structure"; + // + // EncodingCB + // + this.EncodingCB.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.EncodingCB.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Encoding_DefaultXMLMI, + this.Encoding_DefaultBinaryMI}); + this.EncodingCB.Image = ((System.Drawing.Image)(resources.GetObject("EncodingCB.Image"))); + this.EncodingCB.ImageTransparentColor = System.Drawing.Color.Magenta; + this.EncodingCB.Name = "EncodingCB"; + this.EncodingCB.Size = new System.Drawing.Size(85, 20); + this.EncodingCB.Text = "Default XML"; + this.EncodingCB.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + // + // Encoding_DefaultXMLMI + // + this.Encoding_DefaultXMLMI.Name = "Encoding_DefaultXMLMI"; + this.Encoding_DefaultXMLMI.Size = new System.Drawing.Size(148, 22); + this.Encoding_DefaultXMLMI.Text = "Default XML"; + // + // Encoding_DefaultBinaryMI + // + this.Encoding_DefaultBinaryMI.Name = "Encoding_DefaultBinaryMI"; + this.Encoding_DefaultBinaryMI.Size = new System.Drawing.Size(148, 22); + this.Encoding_DefaultBinaryMI.Text = "Default Binary"; + // + // EditComplexValue2Dlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(660, 325); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.Controls.Add(this.StatusCTRL); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditComplexValue2Dlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Value"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.StatusCTRL.ResumeLayout(false); + this.StatusCTRL.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TextBox ValueTB; + private System.Windows.Forms.Button UpdateBTN; + private System.Windows.Forms.Button RefreshBTN; + private System.Windows.Forms.StatusStrip StatusCTRL; + private System.Windows.Forms.ToolStripStatusLabel DataTypeLB; + private System.Windows.Forms.ToolStripStatusLabel DataTypeTB; + private System.Windows.Forms.ToolStripDropDownButton EncodingCB; + private System.Windows.Forms.ToolStripMenuItem Encoding_DefaultXMLMI; + private System.Windows.Forms.ToolStripMenuItem Encoding_DefaultBinaryMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.cs new file mode 100644 index 00000000..e68b4d88 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.cs @@ -0,0 +1,386 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditComplexValue2Dlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditComplexValue2Dlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private Session m_session; + private NodeId m_variableId; + private Variant m_value; + private bool m_textChanged; + private QualifiedName m_encodingName; + #endregion + + #region Public Interface + /// + /// Prompts the user to edit a value. + /// + public Variant ShowDialog(Session session, NodeId variableId, Variant value, string caption) + { + if (caption != null) + { + this.Text = caption; + } + + m_session = session; + m_variableId = variableId; + + SetValue(value); + + if (ShowDialog() != DialogResult.OK) + { + return Variant.Null; + } + + return GetValue(); + } + #endregion + + /// + /// Sets the value shown in the control. + /// + private void SetValue(Variant value) + { + ValueTB.ForeColor = Color.Empty; + ValueTB.Font = new Font(ValueTB.Font, FontStyle.Regular); + + m_textChanged = false; + + // check for null. + if (Variant.Null == value) + { + ValueTB.Text = String.Empty; + m_value = Variant.Null; + return; + } + + // get the source type. + TypeInfo sourceType = value.TypeInfo; + + if (sourceType == null) + { + sourceType = TypeInfo.Construct(value.Value); + } + + m_value = new Variant(value.Value, sourceType); + + // display value as text. + StringBuilder buffer = new StringBuilder(); + XmlWriter writer = XmlWriter.Create(buffer, new XmlWriterSettings() { Indent = true, OmitXmlDeclaration = true }); + XmlEncoder encoder = new XmlEncoder(new XmlQualifiedName("Value", Namespaces.OpcUaXsd), writer, m_session.MessageContext); + encoder.WriteVariantContents(m_value.Value, m_value.TypeInfo); + writer.Close(); + + ValueTB.Text = buffer.ToString(); + + // extract the encoding id from the value. + ExpandedNodeId encodingId = null; + ExtensionObjectEncoding encoding = ExtensionObjectEncoding.None; + + if (sourceType.BuiltInType == BuiltInType.ExtensionObject) + { + ExtensionObject extension = null; + + if (sourceType.ValueRank == ValueRanks.Scalar) + { + extension = (ExtensionObject)m_value.Value; + } + else + { + // only use the first item in the list for arrays. + ExtensionObject[] list = (ExtensionObject[])m_value.Value; + + if (list.Length > 0) + { + extension = list[0]; + } + } + + encodingId = extension.TypeId; + encoding = extension.Encoding; + } + + if (encodingId == null) + { + StatusCTRL.Visible = false; + return; + } + + // check if the encoding is known. + IObject encodingNode = m_session.NodeCache.Find(encodingId) as IObject; + + if (encodingNode == null) + { + StatusCTRL.Visible = false; + return; + } + + // update the encoding shown. + if (encoding == ExtensionObjectEncoding.EncodeableObject) + { + EncodingCB.Text = "(Converted to XML by Client)"; + } + else + { + EncodingCB.Text = m_session.NodeCache.GetDisplayText(encodingNode); + } + + m_encodingName = encodingNode.BrowseName; + + // find the data type for the encoding. + IDataType dataTypeNode = null; + + foreach (INode node in m_session.NodeCache.Find(encodingNode.NodeId, Opc.Ua.ReferenceTypeIds.HasEncoding, true, false)) + { + dataTypeNode = node as IDataType; + + if (dataTypeNode != null) + { + break; + } + } + + if (dataTypeNode == null) + { + StatusCTRL.Visible = false; + return; + } + + // update data type display. + DataTypeTB.Text = m_session.NodeCache.GetDisplayText(dataTypeNode); + DataTypeTB.Tag = dataTypeNode; + + // update encoding drop down. + EncodingCB.DropDownItems.Clear(); + + foreach (INode node in m_session.NodeCache.Find(dataTypeNode.NodeId, Opc.Ua.ReferenceTypeIds.HasEncoding, false, false)) + { + IObject encodingNode2 = node as IObject; + + if (encodingNode2 != null) + { + ToolStripMenuItem item = new ToolStripMenuItem(m_session.NodeCache.GetDisplayText(encodingNode2)); + item.Tag = encodingNode2; + item.Click += new EventHandler(EncodingCB_Item_Click); + EncodingCB.DropDownItems.Add(item); + } + } + + StatusCTRL.Visible = true; + } + + /// + /// Converts the XML back to a value. + /// + private Variant GetValue() + { + if (!m_textChanged) + { + return m_value; + } + + XmlDocument document = new XmlDocument(); + document.InnerXml = ValueTB.Text; + + // find the first element. + XmlElement element = null; + + for (XmlNode node = document.DocumentElement.FirstChild; node != null; node = node.NextSibling) + { + element = node as XmlElement; + + if (element != null) + { + break; + } + } + + XmlDecoder decoder = new XmlDecoder(element, m_session.MessageContext); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + TypeInfo typeInfo = null; + object value = decoder.ReadVariantContents(out typeInfo); + + return new Variant(value, typeInfo); + } + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + + private void EncodingCB_Item_Click(object sender, EventArgs e) + { + try + { + ToolStripMenuItem item = sender as ToolStripMenuItem; + + if (item != null) + { + IObject encodingNode = item.Tag as IObject; + m_encodingName = encodingNode.BrowseName; + EncodingCB.Text = item.Text; + ValueTB.Text = null; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void RefreshBTN_Click(object sender, EventArgs e) + { + try + { + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = m_variableId; + nodeToRead.AttributeId = Attributes.Value; + nodeToRead.DataEncoding = m_encodingName; + + + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + nodesToRead.Add(nodeToRead); + + // read the attributes. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // check for error. + if (StatusCode.IsBad(results[0].StatusCode)) + { + ValueTB.Text = results[0].StatusCode.ToString(); + ValueTB.ForeColor = Color.Red; + ValueTB.Font = new Font(ValueTB.Font, FontStyle.Bold); + return; + } + + SetValue(results[0].WrappedValue); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void UpdateBTN_Click(object sender, EventArgs e) + { + try + { + WriteValue nodeToWrite = new WriteValue(); + nodeToWrite.NodeId = m_variableId; + nodeToWrite.AttributeId = Attributes.Value; + nodeToWrite.Value = new DataValue(); + nodeToWrite.Value.WrappedValue = GetValue(); + + WriteValueCollection nodesToWrite = new WriteValueCollection(); + nodesToWrite.Add(nodeToWrite); + + // read the attributes. + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = m_session.Write( + null, + nodesToWrite, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToWrite); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToWrite); + + // check for error. + if (StatusCode.IsBad(results[0])) + { + throw ServiceResultException.Create(results[0], 0, diagnosticInfos, responseHeader.StringTable); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ValueTB_TextChanged(object sender, EventArgs e) + { + m_textChanged = true; + } + + private void EncodingCB_SelectedIndexChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.resx new file mode 100644 index 00000000..37e15b31 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValue2Dlg.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.Designer.cs new file mode 100644 index 00000000..e7be9e6a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.Designer.cs @@ -0,0 +1,191 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls.Common +{ + partial class EditComplexValueCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.ValuesDV = new System.Windows.Forms.DataGridView(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.NameCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.NavigationMENU = new System.Windows.Forms.MenuStrip(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.TextValueTB = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.ValuesDV)).BeginInit(); + this.SuspendLayout(); + // + // ValuesDV + // + this.ValuesDV.AllowUserToAddRows = false; + this.ValuesDV.AllowUserToDeleteRows = false; + this.ValuesDV.AllowUserToResizeRows = false; + this.ValuesDV.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.ValuesDV.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.ValuesDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ValuesDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ValuesDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.NameCH, + this.DataTypeCH, + this.ValueCH}); + this.ValuesDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValuesDV.Location = new System.Drawing.Point(0, 24); + this.ValuesDV.MultiSelect = false; + this.ValuesDV.Name = "ValuesDV"; + this.ValuesDV.RowHeadersVisible = false; + this.ValuesDV.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.ValuesDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + this.ValuesDV.Size = new System.Drawing.Size(512, 214); + this.ValuesDV.TabIndex = 0; + this.ValuesDV.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.ValuesDV_CellValueChanged); + this.ValuesDV.DoubleClick += new System.EventHandler(this.ValuesDV_DoubleClick); + this.ValuesDV.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.ValuesDV_CellValidating); + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.ReadOnly = true; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.Width = 5; + // + // NameCH + // + this.NameCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NameCH.DataPropertyName = "Name"; + this.NameCH.HeaderText = "Name"; + this.NameCH.Name = "NameCH"; + this.NameCH.ReadOnly = true; + this.NameCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.NameCH.Width = 60; + // + // DataTypeCH + // + this.DataTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataTypeCH.DataPropertyName = "DataType"; + this.DataTypeCH.HeaderText = "Data Type"; + this.DataTypeCH.Name = "DataTypeCH"; + this.DataTypeCH.ReadOnly = true; + this.DataTypeCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.DataTypeCH.Width = 82; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + // + // NavigationMENU + // + this.NavigationMENU.Location = new System.Drawing.Point(0, 0); + this.NavigationMENU.Name = "NavigationMENU"; + this.NavigationMENU.Size = new System.Drawing.Size(512, 24); + this.NavigationMENU.TabIndex = 1; + this.NavigationMENU.Text = "menuStrip1"; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // TextValueTB + // + this.TextValueTB.AcceptsReturn = true; + this.TextValueTB.AcceptsTab = true; + this.TextValueTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.TextValueTB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TextValueTB.Location = new System.Drawing.Point(0, 24); + this.TextValueTB.Multiline = true; + this.TextValueTB.Name = "TextValueTB"; + this.TextValueTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.TextValueTB.Size = new System.Drawing.Size(512, 214); + this.TextValueTB.TabIndex = 2; + this.TextValueTB.WordWrap = false; + // + // EditComplexValueCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ValuesDV); + this.Controls.Add(this.TextValueTB); + this.Controls.Add(this.NavigationMENU); + this.Name = "EditComplexValueCtrl"; + this.Size = new System.Drawing.Size(512, 238); + ((System.ComponentModel.ISupportInitialize)(this.ValuesDV)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView ValuesDV; + private System.Windows.Forms.MenuStrip NavigationMENU; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.TextBox TextValueTB; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn NameCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.cs new file mode 100644 index 00000000..06b72364 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.cs @@ -0,0 +1,1558 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Xml; +using System.Reflection; + +namespace Opc.Ua.Client.Controls.Common +{ + /// + /// Allows the user to edit a complex value. + /// + public partial class EditComplexValueCtrl : UserControl + { + /// + /// Constructs the object. + /// + public EditComplexValueCtrl() + { + InitializeComponent(); + MaxDisplayTextLength = 100; + ValuesDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Values"); + + m_dataset.Tables[0].Columns.Add("AccessInfo", typeof(AccessInfo)); + m_dataset.Tables[0].Columns.Add("Name", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(string)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + + ValuesDV.DataSource = m_dataset.Tables[0]; + } + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private AccessInfo m_value; + private bool m_readOnly; + private int m_maxDisplayTextLength; + private event EventHandler m_ValueChanged; + #endregion + + private class AccessInfo + { + public AccessInfo Parent { get; set; } + public PropertyInfo PropertyInfo { get; set; } + public int[] Indexes; + public TypeInfo TypeInfo; + public object Value; + public string Name; + } + + #region Public Members + /// + /// The maximum length of a value string displayed in a column. + /// + [DefaultValue(100)] + public int MaxDisplayTextLength + { + get + { + return m_maxDisplayTextLength; + } + + set + { + if (value < 20) + { + m_maxDisplayTextLength = 20; + } + + m_maxDisplayTextLength = value; + } + } + + /// + /// Returns true if the Back command can be called. + /// + public bool CanGoBack + { + get + { + return (NavigationMENU.Items.Count > 1); + } + } + + /// + /// Returns true if the ArraySize can be changed. + /// + public bool CanSetArraySize + { + get + { + if (m_readOnly) + { + return false; + } + + AccessInfo info = NavigationMENU.Items[NavigationMENU.Items.Count - 1].Tag as AccessInfo; + + if (info != null) + { + return info.TypeInfo.ValueRank >= 0; + } + + return false; + } + } + + /// + /// Returns true if the data type can be changed. + /// + public bool CanChangeType + { + get + { + if (m_readOnly) + { + return false; + } + + if (NavigationMENU.Items.Count > 0) + { + AccessInfo info = NavigationMENU.Items[NavigationMENU.Items.Count - 1].Tag as AccessInfo; + + if (info != null) + { + return info.Parent != null && info.Parent.TypeInfo != null && info.Parent.TypeInfo.BuiltInType == BuiltInType.Variant; + } + } + + return false; + } + } + + /// + /// Returns the current data type. + /// + public BuiltInType CurrentType + { + get + { + if (NavigationMENU.Items.Count > 0) + { + AccessInfo info = NavigationMENU.Items[NavigationMENU.Items.Count - 1].Tag as AccessInfo; + + if (info != null) + { + Variant? value = info.Value as Variant?; + + if (value != null && value.Value.TypeInfo != null) + { + return value.Value.TypeInfo.BuiltInType; + } + + return info.TypeInfo.BuiltInType; + } + } + + return BuiltInType.Variant; + } + } + + /// + /// Raised when the value is changed. + /// + public event EventHandler ValueChanged + { + add { m_ValueChanged += value; } + remove { m_ValueChanged -= value; } + } + + /// + /// Changes the session used for editing the value. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Moves the displayed value back. + /// + public void Back() + { + if (!CanGoBack) + { + return; + } + + NavigationMENU_Click(NavigationMENU.Items[NavigationMENU.Items.Count - 2], null); + } + + + /// + /// Changes the array size. + /// + public void SetArraySize() + { + if (!CanSetArraySize) + { + return; + } + + EndEdit(); + + AccessInfo info = NavigationMENU.Items[NavigationMENU.Items.Count - 1].Tag as AccessInfo; + + TypeInfo currentType = info.TypeInfo; + object currentValue = info.Value; + + if (info.Value is Variant) + { + Variant variant = (Variant)info.Value; + currentValue = variant.Value; + + if (currentValue != null) + { + currentType = variant.TypeInfo; + + if (currentType == null) + { + currentType = TypeInfo.Construct(currentValue); + } + } + } + + int[] dimensions = null; + + Array array = currentValue as Array; + + if (array != null) + { + dimensions = new int[array.Rank]; + + for (int ii = 0; ii < array.Rank; ii++) + { + dimensions[ii] = array.GetLength(ii); + } + } + + IList list = currentValue as IList; + + if (array == null && list != null) + { + dimensions = new int[1]; + dimensions[0] = list.Count; + } + + Matrix matrix = currentValue as Matrix; + + if (matrix != null) + { + dimensions = matrix.Dimensions; + array = matrix.ToArray(); + } + + SetTypeDlg.SetTypeResult result = new SetTypeDlg().ShowDialog(currentType, dimensions); + + if (result == null) + { + return; + } + + // convert to new type. + object newValue = currentValue; + + if (result.ArrayDimensions == null || result.ArrayDimensions.Length < 1) + { + newValue = Convert(currentValue, currentType, result.TypeInfo, result.UseDefaultOnError); + } + else + { + if (array == null && list != null) + { + Type elementType = GetListElementType(list); + + for (int ii = result.ArrayDimensions[0]; ii < list.Count; ii++) + { + list.RemoveAt(ii); + } + + for (int ii = list.Count; ii < result.ArrayDimensions[0]; ii++) + { + list.Add(Activator.CreateInstance(elementType)); + } + + newValue = list; + } + + if (array != null) + { + Array newArray = null; + + if (currentValue is Array) + { + newArray = Array.CreateInstance(currentValue.GetType().GetElementType(), result.ArrayDimensions); + } + else + { + newArray = TypeInfo.CreateArray(result.TypeInfo.BuiltInType, result.ArrayDimensions); + } + + int maxCount = result.ArrayDimensions[0]; + + for (int ii = 1; ii < result.ArrayDimensions.Length; ii++) + { + maxCount *= result.ArrayDimensions[ii]; + } + + int count = 0; + + foreach (object element in array) + { + if (maxCount <= count) + { + break; + } + + object newElement = Convert(element, currentType, result.TypeInfo, result.UseDefaultOnError); + int[] indexes = GetIndexFromCount(count++, result.ArrayDimensions); + newArray.SetValue(newElement, indexes); + } + + newValue = newArray; + } + } + + NavigationMENU.Items.RemoveAt(NavigationMENU.Items.Count - 1); + + info.TypeInfo = result.TypeInfo; + info.Value = newValue; + ShowValue(info); + } + + /// + /// Changes the data type. + /// + public void SetType(BuiltInType builtInType) + { + if (!CanChangeType) + { + return; + } + + AccessInfo info = NavigationMENU.Items[NavigationMENU.Items.Count - 1].Tag as AccessInfo; + + TypeInfo currentType = info.TypeInfo; + object currentValue = info.Value; + + try + { + EndEdit(); + currentValue = info.Value; + } + catch (Exception) + { + currentValue = TypeInfo.GetDefaultValue(currentType.BuiltInType); + } + + if (info.Value is Variant) + { + Variant variant = (Variant)info.Value; + currentValue = variant.Value; + + if (currentValue != null) + { + currentType = variant.TypeInfo; + + if (currentType == null) + { + currentType = TypeInfo.Construct(currentValue); + } + } + } + + TypeInfo targetType = new TypeInfo(builtInType, currentType.ValueRank); + object newValue = Convert(currentValue, currentType, targetType, true); + + NavigationMENU.Items.RemoveAt(NavigationMENU.Items.Count - 1); + + info.TypeInfo = targetType; + info.Value = newValue; + ShowValueNoNotify(info); + } + + /// + /// Converts the old type to the new type. + /// + private object Convert(object oldValue, TypeInfo oldType, TypeInfo newType, bool useDefaultOnError) + { + object newValue = oldValue; + + if (oldType.BuiltInType != newType.BuiltInType) + { + try + { + newValue = TypeInfo.Cast(oldValue, oldType, newType.BuiltInType); + } + catch (Exception e) + { + if (!useDefaultOnError) + { + throw new FormatException("Could not cast value to requested type.", e); + } + + newValue = TypeInfo.GetDefaultValue(newType.BuiltInType); + } + } + + return newValue; + } + + /// + /// Displays the value in the control. + /// + public void ShowValue( + NodeId nodeId, + uint attributeId, + string name, + object value, + bool readOnly) + { + m_readOnly = readOnly; + NavigationMENU.Items.Clear(); + + if (m_readOnly) + { + ValuesDV.EditMode = DataGridViewEditMode.EditProgrammatically; + TextValueTB.ReadOnly = true; + } + + Type type = null; + + // determine the expected data type for non-value attributes. + if (attributeId != 0 && attributeId != Attributes.Value) + { + BuiltInType builtInType = TypeInfo.GetBuiltInType(Attributes.GetDataTypeId(attributeId)); + int valueRank = Attributes.GetValueRank(attributeId); + type = TypeInfo.GetSystemType(builtInType, valueRank); + } + + // determine the expected data type for value attributes. + else if (!NodeId.IsNull(nodeId)) + { + IVariableBase variable = m_session.NodeCache.Find(nodeId) as IVariableBase; + + if (variable != null) + { + BuiltInType builtInType = TypeInfo.GetBuiltInType(variable.DataType, m_session.TypeTree); + int valueRank = variable.ValueRank; + type = TypeInfo.GetSystemType(builtInType, valueRank); + + if (builtInType == BuiltInType.ExtensionObject && valueRank < 0) + { + type = TypeInfo.GetSystemType(variable.DataType, m_session.Factory); + } + } + } + + // use the value. + else if (value != null) + { + type = value.GetType(); + } + + // go with default. + else + { + type = typeof(string); + } + + // assign a name. + if (String.IsNullOrEmpty(name)) + { + if (attributeId != 0) + { + name = Attributes.GetBrowseName(attributeId); + } + else + { + name = type.Name; + } + } + + AccessInfo info = new AccessInfo(); + info.Value = Utils.Clone(value); + info.TypeInfo = TypeInfo.Construct(type); + + if (value == null && info.TypeInfo.ValueRank < 0) + { + info.Value = TypeInfo.GetDefaultValue(info.TypeInfo.BuiltInType); + } + + info.Name = name; + m_value = info; + + ShowValue(info); + } + + /// + /// Displays the value in the control. + /// + public void ShowValue( + string name, + NodeId dataType, + int valueRank, + object value) + { + if (value == null && m_session != null) + { + BuiltInType builtInType = TypeInfo.GetBuiltInType(dataType, m_session.TypeTree); + + if (builtInType == BuiltInType.ExtensionObject) + { + Type type = m_session.Factory.GetSystemType(dataType); + + if (type != null) + { + if (valueRank < 0) + { + value = Activator.CreateInstance(type); + } + else + { + value = Array.CreateInstance(type, new int[valueRank]); + } + } + } + else + { + value = TypeInfo.GetDefaultValue(dataType, valueRank, m_session.TypeTree); + } + } + + ShowValue(null, name, value); + } + + /// + /// Displays the value in the control. + /// + public void ShowValue( + TypeInfo expectedType, + string name, + object value) + { + m_readOnly = false; + NavigationMENU.Items.Clear(); + + // assign a type. + if (expectedType == null) + { + if (value == null) + { + expectedType = TypeInfo.Scalars.String; + } + else + { + expectedType = TypeInfo.Construct(value); + } + } + + // assign a name. + if (String.IsNullOrEmpty(name)) + { + name = expectedType.ToString(); + } + + AccessInfo info = new AccessInfo(); + info.Value = Utils.Clone(value); + info.TypeInfo = expectedType; + + if (value == null && info.TypeInfo.ValueRank < 0) + { + info.Value = TypeInfo.GetDefaultValue(info.TypeInfo.BuiltInType); + } + + // ensure value is the target type. + info.Value = TypeInfo.Cast(info.Value, expectedType.BuiltInType); + + info.Name = name; + m_value = info; + + ShowValue(info); + } + + /// + /// Returns the edited value. + /// + public object GetValue() + { + return m_value.Value; + } + + /// + /// Validates the value currently being edited. + /// + public void EndEdit() + { + if (NavigationMENU.Items.Count < 1) + { + return; + } + + if (!TextValueTB.Visible) + { + ValuesDV.EndEdit(); + return; + } + + AccessInfo info = NavigationMENU.Items[NavigationMENU.Items.Count - 1].Tag as AccessInfo; + object newValue = TypeInfo.Cast(TextValueTB.Text, info.TypeInfo.BuiltInType); + info.Value = newValue; + UpdateParent(info); + } + + /// + /// Displays the value in the control. + /// + private void ShowValue(AccessInfo parent) + { + ShowValueNoNotify(parent); + + if (m_ValueChanged != null) + { + m_ValueChanged(this, null); + } + } + + /// + /// Displays the value in the control. + /// + private void ShowValueNoNotify(AccessInfo parent) + { + m_dataset.Tables[0].Clear(); + ValuesDV.Visible = true; + TextValueTB.Visible = false; + + ToolStripItem item = NavigationMENU.Items.Add(parent.Name); + item.Click += new EventHandler(NavigationMENU_Click); + item.Tag = parent; + + TypeInfo typeInfo = parent.TypeInfo; + object value = parent.Value; + + if (value is Variant) + { + Variant variant = (Variant)value; + value = variant.Value; + + if (value != null) + { + parent.TypeInfo = typeInfo = variant.TypeInfo; + + if (typeInfo == null) + { + parent.TypeInfo = typeInfo = TypeInfo.Construct(value); + } + } + } + + if (typeInfo.ValueRank >= 0) + { + Matrix matrix = value as Matrix; + + if (matrix != null) + { + value = matrix.ToArray(); + } + + System.Collections.IEnumerable enumerable = value as System.Collections.IEnumerable; + + if (enumerable != null) + { + // get the dimensions of any array. + int[] dimensions = null; + + // calculate them. + if (matrix == null) + { + Array array = enumerable as Array; + + if (array != null) + { + dimensions = new int[array.Rank]; + + for (int ii = 0; ii < array.Rank; ii++) + { + dimensions[ii] = array.GetLength(ii); + } + } + else + { + dimensions = new int[1]; + System.Collections.IList list = enumerable as System.Collections.IList; + + if (list != null) + { + dimensions[0] = list.Count; + } + } + } + + // get them from the matrix. + else + { + dimensions = matrix.Dimensions; + } + + // display the array elements. + int count = 0; + TypeInfo elementType = new TypeInfo(typeInfo.BuiltInType, ValueRanks.Scalar); + + ValuesDV.Visible = true; + TextValueTB.Visible = false; + + foreach (object element in enumerable) + { + int[] indexes = GetIndexFromCount(count++, dimensions); + + AccessInfo info = new AccessInfo(); + info.Parent = parent; + info.Indexes = indexes; + info.TypeInfo = elementType; + info.Value = element; + + ShowIndexedValue(info); + } + } + + return; + } + + // check for null. + if (value == null) + { + if (parent.Parent != null && parent.Parent.Value is Array) + { + parent.Value = value = Activator.CreateInstance(parent.Parent.Value.GetType().GetElementType()); + } + else if (parent.Parent != null && parent.PropertyInfo != null) + { + parent.Value = value = Activator.CreateInstance(parent.PropertyInfo.PropertyType); + } + else + { + ShowTextValue(value, parent.TypeInfo); + return; + } + } + + object structure = value; + + // check for extension object. + ExtensionObject extension = structure as ExtensionObject; + + if (extension != null) + { + structure = extension.Body; + } + + // check for XmlElements. + if (structure is XmlElement) + { + ShowTextValue((XmlElement)structure); + return; + } + + // check for ByteString. + if (structure is byte[]) + { + ShowTextValue((byte[])structure); + return; + } + + // check for NodeId. + if (structure is NodeId) + { + ShowTextValue(((NodeId)structure).ToString()); + return; + } + + // check for ExpandedNodeId. + if (structure is ExpandedNodeId) + { + ShowTextValue(((ExpandedNodeId)structure).ToString()); + return; + } + + // check for QualifiedName. + if (structure is QualifiedName) + { + ShowTextValue(((QualifiedName)structure).ToString()); + return; + } + + // check for Guid. + if (structure is Guid) + { + ShowTextValue(((Guid)structure).ToString()); + return; + } + + // check for Uuid. + if (structure is Uuid) + { + ShowTextValue(((Uuid)structure).ToString()); + return; + } + + // check for StatusCode. + if (structure is StatusCode) + { + ShowTextValue(Utils.Format("0x{0:X8}", ((StatusCode)structure).Code)); + return; + } + + ValuesDV.Visible = true; + TextValueTB.Visible = false; + + // use reflection to display the properties of the structure. + bool isStructure = false; + PropertyInfo[] properties = structure.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + foreach (PropertyInfo property in properties) + { + if (property.GetIndexParameters().Length > 0) + { + continue; + } + + object element = property.GetValue(structure, null); + + string name = null; + + foreach (object attribute in property.GetCustomAttributes(true)) + { + if (typeof(System.Runtime.Serialization.DataMemberAttribute).IsInstanceOfType(attribute)) + { + name = ((System.Runtime.Serialization.DataMemberAttribute)attribute).Name; + + if (name == null) + { + name = property.Name; + } + + break; + } + } + + if (name == null) + { + continue; + } + + AccessInfo info = new AccessInfo(); + info.Parent = parent; + info.PropertyInfo = property; + info.TypeInfo = TypeInfo.Construct(property.PropertyType); + info.Value = element; + info.Name = name; + + ShowNamedValue(info); + isStructure = true; + } + + if (!isStructure) + { + ShowTextValue(parent.Value, parent.TypeInfo); + } + } + #endregion + + #region Private Methods + /// + /// Returns the index based on the current count. + /// + private int[] GetIndexFromCount(int count, int[] dimensions) + { + int[] indexes = new int[(dimensions != null) ? dimensions.Length : 1]; + + for (int ii = indexes.Length - 1; ii >= 0; ii--) + { + indexes[ii] = count % dimensions[ii]; + count /= dimensions[ii]; + } + + return indexes; + } + + /// + /// Adds the value at an array index to the control. + /// + private void ShowIndexedValue(AccessInfo info) + { + DataRow row = m_dataset.Tables[0].NewRow(); + + StringBuilder buffer = new StringBuilder(); + buffer.Append("["); + + if (info.Indexes != null) + { + for (int ii = 0; ii < info.Indexes.Length; ii++) + { + if (ii > 0) + { + buffer.Append(","); + } + + buffer.Append(info.Indexes[ii]); + } + } + + buffer.Append("]"); + info.Name = buffer.ToString(); + + row[0] = info; + row[1] = info.Name; + row[2] = GetDataTypeString(info); + row[3] = ValueToString(info.Value, info.TypeInfo); + row[4] = ImageList.Images[ClientUtils.GetImageIndex(Attributes.Value, info.Value)]; + + m_dataset.Tables[0].Rows.Add(row); + } + + /// + /// Returns the element type for a list. + /// + private Type GetListElementType(IList list) + { + if (list != null) + { + for (Type type = list.GetType(); type != null; type = type.BaseType) + { + if (type.IsGenericType) + { + Type[] argTypes = type.GetGenericArguments(); + + if (argTypes.Length > 0) + { + return argTypes[0]; + } + } + } + } + + return typeof(object); + } + + /// + /// Returns the data type of the value. + /// + private Type GetDataType(AccessInfo accessInfo) + { + if (accessInfo == null || accessInfo.TypeInfo == null) + { + return null; + } + + if (accessInfo.TypeInfo.BuiltInType == BuiltInType.ExtensionObject) + { + if (accessInfo.Value != null) + { + return accessInfo.Value.GetType(); + } + + if (accessInfo.PropertyInfo != null) + { + return accessInfo.PropertyInfo.PropertyType; + } + + if (accessInfo.Parent != null) + { + if (accessInfo.Parent.Value is Array) + { + Array array = (Array)accessInfo.Parent.Value; + return array.GetType().GetElementType(); + } + + if (accessInfo.Parent.Value is IList) + { + IList list = (IList)accessInfo.Parent.Value; + return GetListElementType(list); + } + } + } + + return TypeInfo.GetSystemType(accessInfo.TypeInfo.BuiltInType, accessInfo.TypeInfo.ValueRank); + } + + /// + /// Returns the data type of the value. + /// + private string GetDataTypeString(AccessInfo accessInfo) + { + Type type = GetDataType(accessInfo); + + if (type == null) + { + return accessInfo.TypeInfo.ToString(); + } + + return type.Name; + } + + /// + /// Adds the value with the specified name to the control. + /// + private void ShowNamedValue(AccessInfo info) + { + DataRow row = m_dataset.Tables[0].NewRow(); + + row[0] = info; + row[1] = (info.Name != null) ? info.Name : "unknown"; + row[2] = GetDataTypeString(info); + row[3] = ValueToString(info.Value, info.TypeInfo); + row[4] = ImageList.Images[ClientUtils.GetImageIndex(Attributes.Value, info.Value)]; + + m_dataset.Tables[0].Rows.Add(row); + } + + /// + /// Displays a value in the control. + /// + private void ShowTextValue(object value, TypeInfo typeInfo) + { + switch (typeInfo.BuiltInType) + { + case BuiltInType.ByteString: + { + ShowTextValue((byte[])value); + break; + } + + case BuiltInType.XmlElement: + { + ShowTextValue((XmlElement)value); + break; + } + + case BuiltInType.String: + { + ShowTextValue((string)value); + break; + } + + default: + { + ShowTextValue(ValueToString(value, typeInfo)); + break; + } + } + } + + /// + /// Displays a string in the control. + /// + private void ShowTextValue(string value) + { + ValuesDV.Visible = false; + TextValueTB.Visible = true; + + if (value != null && value.Length > MaxDisplayTextLength) + { + TextValueTB.ScrollBars = ScrollBars.Both; + } + else + { + TextValueTB.ScrollBars = ScrollBars.None; + } + + TextValueTB.Font = new Font("Segoe UI", TextValueTB.Font.Size); + TextValueTB.Text = value; + } + + /// + /// Displays a complete byte string in the control. + /// + private void ShowTextValue(byte[] value) + { + ValuesDV.Visible = false; + TextValueTB.Visible = true; + + StringBuilder buffer = new StringBuilder(); + + if (value != null) + { + for (int ii = 0; ii < value.Length; ii++) + { + if (buffer.Length > 0 && (ii % 30) == 0) + { + buffer.Append("\r\n"); + } + + buffer.AppendFormat("{0:X2} ", value[ii]); + } + } + + TextValueTB.Font = new Font("Courier New", TextValueTB.Font.Size); + TextValueTB.Text = buffer.ToString(); + } + + /// + /// Displays a complete XML element in the control. + /// + private void ShowTextValue(XmlElement value) + { + ValuesDV.Visible = false; + TextValueTB.Visible = true; + + StringBuilder buffer = new StringBuilder(); + + if (value != null) + { + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + settings.OmitXmlDeclaration = true; + settings.NewLineHandling = NewLineHandling.Replace; + settings.NewLineChars = "\r\n"; + settings.IndentChars = " "; + + using (XmlWriter writer = XmlWriter.Create(buffer, settings)) + { + using (XmlNodeReader reader = new XmlNodeReader(value)) + { + writer.WriteNode(reader, false); + } + } + } + + TextValueTB.Font = new Font("Courier New", TextValueTB.Font.Size); + TextValueTB.Text = buffer.ToString(); + } + + /// + /// Converts a value to a string for display in the grid. + /// + private string ValueToString(object value, TypeInfo typeInfo) + { + if (value == null) + { + return String.Empty; + } + + if (value is Variant) + { + Variant variant = (Variant)value; + value = variant.Value; + + if (value != null) + { + typeInfo = variant.TypeInfo; + + if (typeInfo == null) + { + typeInfo = TypeInfo.Construct(value); + } + } + } + + if (typeInfo.ValueRank >= 0) + { + StringBuilder buffer = new StringBuilder(); + + System.Collections.IEnumerable enumerable = value as System.Collections.IEnumerable; + + if (enumerable != null) + { + buffer.Append("{ "); + + foreach (object element in enumerable) + { + if (buffer.Length > 2) + { + buffer.Append(" | "); + } + + if (buffer.Length > MaxDisplayTextLength) + { + buffer.Append("..."); + break; + } + + buffer.Append(ValueToString(element, new TypeInfo(typeInfo.BuiltInType, ValueRanks.Scalar))); + } + + buffer.Append(" }"); + } + + return buffer.ToString(); + } + + switch (typeInfo.BuiltInType) + { + case BuiltInType.String: + { + string text = (string)value; + + if (text != null && text.Length > MaxDisplayTextLength) + { + return text.Substring(0, MaxDisplayTextLength) + "..."; + } + + return text; + } + + case BuiltInType.ByteString: + { + StringBuilder buffer = new StringBuilder(); + + byte[] bytes = (byte[])value; + + for (int ii = 0; ii < bytes.Length; ii++) + { + if (buffer.Length > MaxDisplayTextLength) + { + buffer.Append("..."); + break; + } + + buffer.AppendFormat("{0:X2}", bytes[ii]); + } + + return buffer.ToString(); + } + + case BuiltInType.Enumeration: + { + return ((int)value).ToString(); + } + + case BuiltInType.ExtensionObject: + { + string text = null; + + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + if (extension.Body is byte[]) + { + return ValueToString(extension.Body, new TypeInfo(BuiltInType.ByteString, ValueRanks.Scalar)); + } + + if (extension.Body is XmlElement) + { + return ValueToString(extension.Body, new TypeInfo(BuiltInType.XmlElement, ValueRanks.Scalar)); + } + + if (extension.Body is IEncodeable) + { + text = new Variant(extension).ToString(); + } + } + + if (text == null) + { + IEncodeable encodeable = value as IEncodeable; + + if (encodeable != null) + { + text = new Variant(encodeable).ToString(); + } + } + + if (text != null && text.Length > MaxDisplayTextLength) + { + return text.Substring(0, MaxDisplayTextLength) + "..."; + } + + return text; + } + } + + return (string)TypeInfo.Cast(value, BuiltInType.String); + } + + /// + /// Whether the value can be edited in the grid view. + /// + private bool IsSimpleValue(AccessInfo info) + { + if (info == null || info.TypeInfo == null) + { + return true; + } + + TypeInfo typeInfo = info.TypeInfo; + object value = info.Value; + + if (value is Variant) + { + Variant variant = (Variant)info.Value; + typeInfo = variant.TypeInfo; + value = variant.Value; + + if (typeInfo == null) + { + typeInfo = TypeInfo.Construct(value); + } + } + + if (typeInfo.ValueRank >= 0) + { + return false; + } + + switch (typeInfo.BuiltInType) + { + case BuiltInType.String: + { + string text = value as string; + + if (text != null && text.Length >= MaxDisplayTextLength) + { + return false; + } + + return true; + } + + case BuiltInType.ByteString: + case BuiltInType.XmlElement: + case BuiltInType.QualifiedName: + case BuiltInType.LocalizedText: + case BuiltInType.DataValue: + case BuiltInType.ExtensionObject: + { + return false; + } + } + + return true; + } + #endregion + + private void NavigationMENU_Click(object sender, EventArgs e) + { + try + { + EndEdit(); + + ToolStripItem item = sender as ToolStripItem; + + if (item != null) + { + // remove all menu items appearing after the selected item. + for (int ii = NavigationMENU.Items.Count-1; ii >= 0; ii--) + { + ToolStripItem target = NavigationMENU.Items[ii]; + NavigationMENU.Items.Remove(target); + + if (Object.ReferenceEquals(target, item)) + { + break; + } + } + + // show the current value. + AccessInfo info = (AccessInfo)item.Tag; + ShowValue(info); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ValuesDV_DoubleClick(object sender, EventArgs e) + { + try + { + foreach (DataGridViewCell cell in ValuesDV.SelectedCells) + { + DataRowView source = ValuesDV.Rows[cell.RowIndex].DataBoundItem as DataRowView; + + if (cell.ColumnIndex == 3) + { + AccessInfo info = (AccessInfo)source.Row[0]; + ShowValue(info); + } + + break; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ValuesDV_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + try + { + if (this.Visible && e.ColumnIndex == 3) + { + DataRowView source = ValuesDV.Rows[e.RowIndex].DataBoundItem as DataRowView; + AccessInfo info = (AccessInfo)source.Row[0]; + + if (IsSimpleValue(info)) + { + TypeInfo.Cast(e.FormattedValue, info.TypeInfo.BuiltInType); + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + e.Cancel = true; + } + } + + private void ValuesDV_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + try + { + if (this.Visible && e.RowIndex >= 0 && e.ColumnIndex == 3) + { + DataRowView source = ValuesDV.Rows[e.RowIndex].DataBoundItem as DataRowView; + AccessInfo info = (AccessInfo)source.Row[0]; + + if (IsSimpleValue(info)) + { + object newValue = TypeInfo.Cast((string)source.Row[3], info.TypeInfo.BuiltInType); + info.Value = newValue; + UpdateParent(info); + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Recusivesly updates the parent values. + /// + private void UpdateParent(AccessInfo info) + { + if (info.Parent == null) + { + return; + } + + object parentValue = info.Parent.Value; + + if (info.Parent.TypeInfo.BuiltInType == BuiltInType.Variant && info.Parent.TypeInfo.ValueRank < 0) + { + parentValue = ((Variant)info.Parent.Value).Value; + } + + if (info.PropertyInfo != null && info.Parent.TypeInfo.ValueRank < 0) + { + ExtensionObject extension = parentValue as ExtensionObject; + + if (extension != null) + { + parentValue = extension.Body; + } + + info.PropertyInfo.SetValue(parentValue, info.Value, null); + } + + else if (info.Indexes != null) + { + int[] indexes = info.Indexes; + Array array = parentValue as Array; + + Matrix matrix = parentValue as Matrix; + + if (matrix != null) + { + int count = 0; + int block = 1; + + for (int ii = info.Indexes.Length-1; ii >= 0 ; ii--) + { + count += info.Indexes[ii] * block; + block *= matrix.Dimensions[ii]; + } + + array = matrix.Elements; + indexes = new int[] { count }; + } + + if (array != null) + { + if (info.Parent.TypeInfo.BuiltInType == BuiltInType.Variant && info.Parent.TypeInfo.ValueRank >= 0) + { + array.SetValue(new Variant(info.Value), indexes); + } + else + { + array.SetValue(info.Value, indexes); + } + } + else + { + IList list = parentValue as IList; + + if (info.Parent.TypeInfo.BuiltInType == BuiltInType.Variant && info.Parent.TypeInfo.ValueRank >= 0) + { + list[indexes[0]] = new Variant(info.Value); + } + else + { + list[indexes[0]] = info.Value; + } + } + } + + if (info.Parent != null) + { + UpdateParent(info.Parent); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.resx new file mode 100644 index 00000000..02a4c809 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueCtrl.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + 163, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.Designer.cs new file mode 100644 index 00000000..c11c088f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.Designer.cs @@ -0,0 +1,206 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditComplexValueDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueCTRL = new Opc.Ua.Client.Controls.Common.EditComplexValueCtrl(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.ButtonsPN = new System.Windows.Forms.FlowLayoutPanel(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BackBTN = new System.Windows.Forms.Button(); + this.SetArraySizeBTN = new System.Windows.Forms.Button(); + this.SetTypeCB = new System.Windows.Forms.ComboBox(); + this.MainPN.SuspendLayout(); + this.BottomPN.SuspendLayout(); + this.ButtonsPN.SuspendLayout(); + this.SuspendLayout(); + // + // MainPN + // + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ValueCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(658, 221); + this.MainPN.TabIndex = 1; + // + // ValueCTRL + // + this.ValueCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueCTRL.Location = new System.Drawing.Point(0, 0); + this.ValueCTRL.Name = "ValueCTRL"; + this.ValueCTRL.Size = new System.Drawing.Size(658, 221); + this.ValueCTRL.TabIndex = 0; + this.ValueCTRL.ValueChanged += new System.EventHandler(this.ValueCTRL_ValueChanged); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.ButtonsPN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 221); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(658, 28); + this.BottomPN.TabIndex = 3; + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.BackBTN); + this.ButtonsPN.Controls.Add(this.SetArraySizeBTN); + this.ButtonsPN.Controls.Add(this.SetTypeCB); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Right; + this.ButtonsPN.Location = new System.Drawing.Point(174, 0); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ButtonsPN.Size = new System.Drawing.Size(484, 28); + this.ButtonsPN.TabIndex = 5; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(406, 3); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 7; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkBTN.Location = new System.Drawing.Point(325, 3); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 6; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BackBTN + // + this.BackBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BackBTN.Location = new System.Drawing.Point(244, 3); + this.BackBTN.Name = "BackBTN"; + this.BackBTN.Size = new System.Drawing.Size(75, 23); + this.BackBTN.TabIndex = 5; + this.BackBTN.Text = "Back"; + this.BackBTN.UseVisualStyleBackColor = true; + this.BackBTN.Click += new System.EventHandler(this.BackBTN_Click); + // + // SetArraySizeBTN + // + this.SetArraySizeBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.SetArraySizeBTN.Location = new System.Drawing.Point(148, 3); + this.SetArraySizeBTN.Name = "SetArraySizeBTN"; + this.SetArraySizeBTN.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.SetArraySizeBTN.Size = new System.Drawing.Size(90, 23); + this.SetArraySizeBTN.TabIndex = 9; + this.SetArraySizeBTN.Text = "Set Array Size..."; + this.SetArraySizeBTN.UseVisualStyleBackColor = true; + this.SetArraySizeBTN.Click += new System.EventHandler(this.SetTypeBTN_Click); + // + // SetTypeCB + // + this.SetTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.SetTypeCB.FormattingEnabled = true; + this.SetTypeCB.Location = new System.Drawing.Point(27, 4); + this.SetTypeCB.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3); + this.SetTypeCB.Name = "SetTypeCB"; + this.SetTypeCB.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.SetTypeCB.Size = new System.Drawing.Size(115, 21); + this.SetTypeCB.TabIndex = 10; + this.SetTypeCB.SelectedIndexChanged += new System.EventHandler(this.SetTypeCB_SelectedIndexChanged); + // + // EditComplexValueDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(658, 249); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditComplexValueDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Value"; + this.MainPN.ResumeLayout(false); + this.BottomPN.ResumeLayout(false); + this.ButtonsPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel MainPN; + private Opc.Ua.Client.Controls.Common.EditComplexValueCtrl ValueCTRL; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.FlowLayoutPanel ButtonsPN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button BackBTN; + private System.Windows.Forms.Button SetArraySizeBTN; + private System.Windows.Forms.ComboBox SetTypeCB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.cs new file mode 100644 index 00000000..53221aa8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.cs @@ -0,0 +1,239 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditComplexValueDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditComplexValueDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + for (BuiltInType ii = BuiltInType.Boolean; ii <= BuiltInType.StatusCode; ii++) + { + SetTypeCB.Items.Add(ii); + } + + SetTypeCB.SelectedItem = BuiltInType.String; + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to view or edit the value. + /// + public object ShowDialog( + Session session, + NodeId nodeId, + uint attributeId, + string name, + object value, + bool readOnly, + string caption) + { + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + OkBTN.Visible = !readOnly; + + ValueCTRL.ChangeSession(session); + ValueCTRL.ShowValue(nodeId, attributeId, name, value, readOnly); + + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + return ValueCTRL.GetValue(); + } + + /// + /// Prompts the user to edit the value. + /// + public object ShowDialog( + Session session, + string name, + NodeId dataType, + int valueRank, + object value, + string caption) + { + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + OkBTN.Visible = true; + + ValueCTRL.ChangeSession(session); + ValueCTRL.ShowValue(name, dataType, valueRank, value); + + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + return ValueCTRL.GetValue(); + } + + /// + /// Prompts the user to edit the value. + /// + public object ShowDialog( + TypeInfo expectedType, + string name, + object value, + string caption) + { + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + OkBTN.Visible = true; + + ValueCTRL.ChangeSession(null); + ValueCTRL.ShowValue(expectedType, name, value); + + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + return ValueCTRL.GetValue(); + } + + /// + /// Changes the session used. + /// + public void ChangeSession(Session session) + { + ValueCTRL.ChangeSession(session); + } + + /// + /// Updates the value shown in the control. + /// + public void UpdateValue( + NodeId nodeId, + uint attributeId, + string name, + object value) + { + ValueCTRL.ShowValue(nodeId, attributeId, name, value, true); + } + #endregion + + #region Event Handlers + private void ValueCTRL_ValueChanged(object sender, EventArgs e) + { + try + { + BackBTN.Visible = ValueCTRL.CanGoBack; + SetTypeCB.Visible = ValueCTRL.CanChangeType; + SetTypeCB.SelectedItem = ValueCTRL.CurrentType; + SetArraySizeBTN.Visible = ValueCTRL.CanSetArraySize; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BackBTN_Click(object sender, EventArgs e) + { + try + { + ValueCTRL.Back(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + ValueCTRL.EndEdit(); + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void SetTypeBTN_Click(object sender, EventArgs e) + { + try + { + ValueCTRL.SetArraySize(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void SetTypeCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + ValueCTRL.SetType((BuiltInType)SetTypeCB.SelectedItem); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditComplexValueDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.Designer.cs new file mode 100644 index 00000000..2467af4d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.Designer.cs @@ -0,0 +1,517 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditMonitoredItemDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.TriggerTypeCB = new System.Windows.Forms.ComboBox(); + this.TriggerTypeLB = new System.Windows.Forms.Label(); + this.DeadbandValueLB = new System.Windows.Forms.Label(); + this.DeadbandValueUP = new System.Windows.Forms.NumericUpDown(); + this.DeadbandTypeCB = new System.Windows.Forms.ComboBox(); + this.MonitoringModeCB = new System.Windows.Forms.ComboBox(); + this.MonitoringModeLB = new System.Windows.Forms.Label(); + this.DeadbandTypeLB = new System.Windows.Forms.Label(); + this.DiscardOldestLB = new System.Windows.Forms.Label(); + this.QueueSizeLB = new System.Windows.Forms.Label(); + this.SamplingIntervalLB = new System.Windows.Forms.Label(); + this.NodeLB = new System.Windows.Forms.Label(); + this.IndexRangeTB = new System.Windows.Forms.TextBox(); + this.AttributeCB = new System.Windows.Forms.ComboBox(); + this.AttributeLB = new System.Windows.Forms.Label(); + this.IndexRangeLB = new System.Windows.Forms.Label(); + this.DataEncodingLB = new System.Windows.Forms.Label(); + this.DataEncodingCB = new System.Windows.Forms.ComboBox(); + this.NodeTB = new System.Windows.Forms.TextBox(); + this.NodeBTN = new Opc.Ua.Client.Controls.SelectNodeCtrl(); + this.QueueSizeUP = new System.Windows.Forms.NumericUpDown(); + this.SamplingIntervalUP = new System.Windows.Forms.NumericUpDown(); + this.DiscardOldestCK = new System.Windows.Forms.CheckBox(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DeadbandValueUP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.QueueSizeUP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.SamplingIntervalUP)).BeginInit(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(293, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 285); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(371, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ControlsPN); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(371, 285); + this.MainPN.TabIndex = 1; + // + // ControlsPN + // + this.ControlsPN.AutoSize = true; + this.ControlsPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.TriggerTypeCB, 1, 10); + this.ControlsPN.Controls.Add(this.TriggerTypeLB, 0, 10); + this.ControlsPN.Controls.Add(this.DeadbandValueLB, 0, 9); + this.ControlsPN.Controls.Add(this.DeadbandValueUP, 1, 9); + this.ControlsPN.Controls.Add(this.DeadbandTypeCB, 1, 8); + this.ControlsPN.Controls.Add(this.MonitoringModeCB, 1, 4); + this.ControlsPN.Controls.Add(this.MonitoringModeLB, 0, 4); + this.ControlsPN.Controls.Add(this.DeadbandTypeLB, 0, 8); + this.ControlsPN.Controls.Add(this.DiscardOldestLB, 0, 7); + this.ControlsPN.Controls.Add(this.QueueSizeLB, 0, 6); + this.ControlsPN.Controls.Add(this.SamplingIntervalLB, 0, 5); + this.ControlsPN.Controls.Add(this.NodeLB, 0, 0); + this.ControlsPN.Controls.Add(this.IndexRangeTB, 1, 2); + this.ControlsPN.Controls.Add(this.AttributeCB, 1, 1); + this.ControlsPN.Controls.Add(this.AttributeLB, 0, 1); + this.ControlsPN.Controls.Add(this.IndexRangeLB, 0, 2); + this.ControlsPN.Controls.Add(this.DataEncodingLB, 0, 3); + this.ControlsPN.Controls.Add(this.DataEncodingCB, 1, 3); + this.ControlsPN.Controls.Add(this.NodeTB, 1, 0); + this.ControlsPN.Controls.Add(this.NodeBTN, 2, 0); + this.ControlsPN.Controls.Add(this.QueueSizeUP, 1, 6); + this.ControlsPN.Controls.Add(this.SamplingIntervalUP, 1, 5); + this.ControlsPN.Controls.Add(this.DiscardOldestCK, 1, 7); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 12; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.ControlsPN.Size = new System.Drawing.Size(371, 285); + this.ControlsPN.TabIndex = 0; + // + // TriggerTypeCB + // + this.TriggerTypeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TriggerTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.TriggerTypeCB.FormattingEnabled = true; + this.TriggerTypeCB.Location = new System.Drawing.Point(97, 261); + this.TriggerTypeCB.Name = "TriggerTypeCB"; + this.TriggerTypeCB.Size = new System.Drawing.Size(138, 21); + this.TriggerTypeCB.TabIndex = 22; + // + // TriggerTypeLB + // + this.TriggerTypeLB.AutoSize = true; + this.TriggerTypeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.TriggerTypeLB.Location = new System.Drawing.Point(3, 258); + this.TriggerTypeLB.Name = "TriggerTypeLB"; + this.TriggerTypeLB.Size = new System.Drawing.Size(88, 27); + this.TriggerTypeLB.TabIndex = 21; + this.TriggerTypeLB.Text = "Trigger Type"; + this.TriggerTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DeadbandValueLB + // + this.DeadbandValueLB.AutoSize = true; + this.DeadbandValueLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DeadbandValueLB.Location = new System.Drawing.Point(3, 232); + this.DeadbandValueLB.Name = "DeadbandValueLB"; + this.DeadbandValueLB.Size = new System.Drawing.Size(88, 26); + this.DeadbandValueLB.TabIndex = 19; + this.DeadbandValueLB.Text = "Deadband Value"; + this.DeadbandValueLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DeadbandValueUP + // + this.DeadbandValueUP.Location = new System.Drawing.Point(97, 235); + this.DeadbandValueUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.DeadbandValueUP.Name = "DeadbandValueUP"; + this.DeadbandValueUP.Size = new System.Drawing.Size(138, 20); + this.DeadbandValueUP.TabIndex = 20; + // + // DeadbandTypeCB + // + this.DeadbandTypeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.DeadbandTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.DeadbandTypeCB.FormattingEnabled = true; + this.DeadbandTypeCB.Location = new System.Drawing.Point(97, 208); + this.DeadbandTypeCB.Name = "DeadbandTypeCB"; + this.DeadbandTypeCB.Size = new System.Drawing.Size(138, 21); + this.DeadbandTypeCB.TabIndex = 18; + // + // MonitoringModeCB + // + this.MonitoringModeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.MonitoringModeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.MonitoringModeCB.FormattingEnabled = true; + this.MonitoringModeCB.Location = new System.Drawing.Point(97, 109); + this.MonitoringModeCB.Name = "MonitoringModeCB"; + this.MonitoringModeCB.Size = new System.Drawing.Size(138, 21); + this.MonitoringModeCB.TabIndex = 10; + // + // MonitoringModeLB + // + this.MonitoringModeLB.AutoSize = true; + this.MonitoringModeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.MonitoringModeLB.Location = new System.Drawing.Point(3, 106); + this.MonitoringModeLB.Name = "MonitoringModeLB"; + this.MonitoringModeLB.Size = new System.Drawing.Size(88, 27); + this.MonitoringModeLB.TabIndex = 9; + this.MonitoringModeLB.Text = "Monitoring Mode"; + this.MonitoringModeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DeadbandTypeLB + // + this.DeadbandTypeLB.AutoSize = true; + this.DeadbandTypeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DeadbandTypeLB.Location = new System.Drawing.Point(3, 205); + this.DeadbandTypeLB.Name = "DeadbandTypeLB"; + this.DeadbandTypeLB.Size = new System.Drawing.Size(88, 27); + this.DeadbandTypeLB.TabIndex = 17; + this.DeadbandTypeLB.Text = "Deadband Type"; + this.DeadbandTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DiscardOldestLB + // + this.DiscardOldestLB.AutoSize = true; + this.DiscardOldestLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DiscardOldestLB.Location = new System.Drawing.Point(3, 185); + this.DiscardOldestLB.Name = "DiscardOldestLB"; + this.DiscardOldestLB.Size = new System.Drawing.Size(88, 20); + this.DiscardOldestLB.TabIndex = 15; + this.DiscardOldestLB.Text = "Discard Oldest"; + this.DiscardOldestLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // QueueSizeLB + // + this.QueueSizeLB.AutoSize = true; + this.QueueSizeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.QueueSizeLB.Location = new System.Drawing.Point(3, 159); + this.QueueSizeLB.Name = "QueueSizeLB"; + this.QueueSizeLB.Size = new System.Drawing.Size(88, 26); + this.QueueSizeLB.TabIndex = 13; + this.QueueSizeLB.Text = "Queue Size"; + this.QueueSizeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SamplingIntervalLB + // + this.SamplingIntervalLB.AutoSize = true; + this.SamplingIntervalLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SamplingIntervalLB.Location = new System.Drawing.Point(3, 133); + this.SamplingIntervalLB.Name = "SamplingIntervalLB"; + this.SamplingIntervalLB.Size = new System.Drawing.Size(88, 26); + this.SamplingIntervalLB.TabIndex = 11; + this.SamplingIntervalLB.Text = "Sampling Interval"; + this.SamplingIntervalLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NodeLB + // + this.NodeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeLB.AutoSize = true; + this.NodeLB.Location = new System.Drawing.Point(3, 0); + this.NodeLB.Name = "NodeLB"; + this.NodeLB.Size = new System.Drawing.Size(33, 26); + this.NodeLB.TabIndex = 0; + this.NodeLB.Text = "Node"; + this.NodeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IndexRangeTB + // + this.IndexRangeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IndexRangeTB.Location = new System.Drawing.Point(97, 56); + this.IndexRangeTB.Name = "IndexRangeTB"; + this.IndexRangeTB.Size = new System.Drawing.Size(247, 20); + this.IndexRangeTB.TabIndex = 6; + // + // AttributeCB + // + this.AttributeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AttributeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AttributeCB.FormattingEnabled = true; + this.AttributeCB.Location = new System.Drawing.Point(97, 29); + this.AttributeCB.Name = "AttributeCB"; + this.AttributeCB.Size = new System.Drawing.Size(138, 21); + this.AttributeCB.TabIndex = 4; + // + // AttributeLB + // + this.AttributeLB.AutoSize = true; + this.AttributeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.AttributeLB.Location = new System.Drawing.Point(3, 26); + this.AttributeLB.Name = "AttributeLB"; + this.AttributeLB.Size = new System.Drawing.Size(88, 27); + this.AttributeLB.TabIndex = 3; + this.AttributeLB.Text = "Attribute"; + this.AttributeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IndexRangeLB + // + this.IndexRangeLB.AutoSize = true; + this.IndexRangeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IndexRangeLB.Location = new System.Drawing.Point(3, 53); + this.IndexRangeLB.Name = "IndexRangeLB"; + this.IndexRangeLB.Size = new System.Drawing.Size(88, 26); + this.IndexRangeLB.TabIndex = 5; + this.IndexRangeLB.Text = "Index Range"; + this.IndexRangeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DataEncodingLB + // + this.DataEncodingLB.AutoSize = true; + this.DataEncodingLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DataEncodingLB.Location = new System.Drawing.Point(3, 79); + this.DataEncodingLB.Name = "DataEncodingLB"; + this.DataEncodingLB.Size = new System.Drawing.Size(88, 27); + this.DataEncodingLB.TabIndex = 7; + this.DataEncodingLB.Text = "Data Encoding"; + this.DataEncodingLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DataEncodingCB + // + this.DataEncodingCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.DataEncodingCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.DataEncodingCB.FormattingEnabled = true; + this.DataEncodingCB.Location = new System.Drawing.Point(97, 82); + this.DataEncodingCB.Name = "DataEncodingCB"; + this.DataEncodingCB.Size = new System.Drawing.Size(138, 21); + this.DataEncodingCB.TabIndex = 8; + // + // NodeTB + // + this.NodeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.NodeTB.Location = new System.Drawing.Point(97, 3); + this.NodeTB.Name = "NodeTB"; + this.NodeTB.ReadOnly = true; + this.NodeTB.Size = new System.Drawing.Size(247, 20); + this.NodeTB.TabIndex = 1; + // + // NodeBTN + // + this.NodeBTN.Location = new System.Drawing.Point(347, 0); + this.NodeBTN.Margin = new System.Windows.Forms.Padding(0); + this.NodeBTN.Name = "NodeBTN"; + this.NodeBTN.NodeControl = this.NodeTB; + this.NodeBTN.ReferenceTypeIds = null; + this.NodeBTN.RootId = null; + this.NodeBTN.SelectedNode = null; + this.NodeBTN.SelectedReference = null; + this.NodeBTN.Session = null; + this.NodeBTN.Size = new System.Drawing.Size(24, 24); + this.NodeBTN.TabIndex = 2; + this.NodeBTN.View = null; + // + // QueueSizeUP + // + this.QueueSizeUP.Location = new System.Drawing.Point(97, 162); + this.QueueSizeUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.QueueSizeUP.Name = "QueueSizeUP"; + this.QueueSizeUP.Size = new System.Drawing.Size(138, 20); + this.QueueSizeUP.TabIndex = 14; + // + // SamplingIntervalUP + // + this.SamplingIntervalUP.Increment = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.SamplingIntervalUP.Location = new System.Drawing.Point(97, 136); + this.SamplingIntervalUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.SamplingIntervalUP.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.SamplingIntervalUP.Name = "SamplingIntervalUP"; + this.SamplingIntervalUP.Size = new System.Drawing.Size(138, 20); + this.SamplingIntervalUP.TabIndex = 12; + this.SamplingIntervalUP.ThousandsSeparator = true; + // + // DiscardOldestCK + // + this.DiscardOldestCK.AutoSize = true; + this.DiscardOldestCK.Checked = true; + this.DiscardOldestCK.CheckState = System.Windows.Forms.CheckState.Checked; + this.DiscardOldestCK.Location = new System.Drawing.Point(97, 188); + this.DiscardOldestCK.Name = "DiscardOldestCK"; + this.DiscardOldestCK.Size = new System.Drawing.Size(15, 14); + this.DiscardOldestCK.TabIndex = 16; + this.DiscardOldestCK.UseVisualStyleBackColor = true; + // + // EditMonitoredItemDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(371, 315); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditMonitoredItemDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Monitored Item"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DeadbandValueUP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.QueueSizeUP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.SamplingIntervalUP)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label NodeLB; + private System.Windows.Forms.TextBox IndexRangeTB; + private System.Windows.Forms.ComboBox AttributeCB; + private System.Windows.Forms.Label AttributeLB; + private System.Windows.Forms.Label IndexRangeLB; + private System.Windows.Forms.Label DataEncodingLB; + private System.Windows.Forms.ComboBox DataEncodingCB; + private System.Windows.Forms.TextBox NodeTB; + private SelectNodeCtrl NodeBTN; + private System.Windows.Forms.ComboBox MonitoringModeCB; + private System.Windows.Forms.Label MonitoringModeLB; + private System.Windows.Forms.Label DeadbandTypeLB; + private System.Windows.Forms.Label DiscardOldestLB; + private System.Windows.Forms.Label QueueSizeLB; + private System.Windows.Forms.Label SamplingIntervalLB; + private System.Windows.Forms.NumericUpDown QueueSizeUP; + private System.Windows.Forms.NumericUpDown SamplingIntervalUP; + private System.Windows.Forms.CheckBox DiscardOldestCK; + private System.Windows.Forms.ComboBox TriggerTypeCB; + private System.Windows.Forms.Label TriggerTypeLB; + private System.Windows.Forms.Label DeadbandValueLB; + private System.Windows.Forms.NumericUpDown DeadbandValueUP; + private System.Windows.Forms.ComboBox DeadbandTypeCB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.cs new file mode 100644 index 00000000..168a45ca --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.cs @@ -0,0 +1,302 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditMonitoredItemDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditMonitoredItemDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + // add the attributes in numerical order. + foreach (uint attributeId in Attributes.GetIdentifiers()) + { + AttributeCB.Items.Add(Attributes.GetBrowseName(attributeId)); + } + + AttributeCB.SelectedIndex = 0; + + MonitoringModeCB.Items.Add(MonitoringMode.Reporting); + MonitoringModeCB.Items.Add(MonitoringMode.Sampling); + MonitoringModeCB.Items.Add(MonitoringMode.Disabled); + MonitoringModeCB.SelectedIndex = 0; + + DeadbandTypeCB.Items.Add(DeadbandType.None); + DeadbandTypeCB.Items.Add(DeadbandType.Absolute); + DeadbandTypeCB.Items.Add(DeadbandType.Percent); + DeadbandTypeCB.SelectedIndex = 0; + + TriggerTypeCB.Items.Add(DataChangeTrigger.StatusValue); + TriggerTypeCB.Items.Add(DataChangeTrigger.Status); + TriggerTypeCB.Items.Add(DataChangeTrigger.StatusValueTimestamp); + TriggerTypeCB.SelectedIndex = 0; + } + #endregion + + #region EncodingInfo Class + /// + /// Stores information about a data encoding. + /// + private class EncodingInfo + { + public QualifiedName EncodingName; + + public override string ToString() + { + if (EncodingName != null) + { + return EncodingName.ToString(); + } + + return "Not Set"; + } + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to edit the monitored item. + /// + public bool ShowDialog(Session session, MonitoredItem monitoredItem, bool isEvent) + { + if (!monitoredItem.Created) + { + NodeBTN.Session = session; + NodeBTN.SelectedNode = monitoredItem.StartNodeId; + } + + // hide fields not used for events. + NodeLB.Visible = !monitoredItem.Created; + NodeTB.Visible = !monitoredItem.Created; + NodeBTN.Visible = !monitoredItem.Created; + AttributeLB.Visible = !isEvent && !monitoredItem.Created; + AttributeCB.Visible = !isEvent && !monitoredItem.Created; + IndexRangeLB.Visible = !isEvent && !monitoredItem.Created; + IndexRangeTB.Visible = !isEvent && !monitoredItem.Created; + DataEncodingLB.Visible = !isEvent && !monitoredItem.Created; + DataEncodingCB.Visible = !isEvent && !monitoredItem.Created; + MonitoringModeLB.Visible = !monitoredItem.Created; + MonitoringModeCB.Visible = !monitoredItem.Created; + SamplingIntervalLB.Visible = true; + SamplingIntervalUP.Visible = true; + QueueSizeLB.Visible = !isEvent; + QueueSizeUP.Visible = !isEvent; + DiscardOldestLB.Visible = true; + DiscardOldestCK.Visible = true; + DeadbandTypeLB.Visible = !isEvent; + DeadbandTypeCB.Visible = !isEvent; + DeadbandValueLB.Visible = !isEvent; + DeadbandValueUP.Visible = !isEvent; + TriggerTypeLB.Visible = !isEvent; + TriggerTypeCB.Visible = !isEvent; + + // fill in values. + SamplingIntervalUP.Value = monitoredItem.SamplingInterval; + DiscardOldestCK.Checked = monitoredItem.DiscardOldest; + + if (!isEvent) + { + AttributeCB.SelectedIndex = (int)(monitoredItem.AttributeId - 1); + IndexRangeTB.Text = monitoredItem.IndexRange; + MonitoringModeCB.SelectedItem = monitoredItem.MonitoringMode; + QueueSizeUP.Value = monitoredItem.QueueSize; + + DataChangeFilter filter = monitoredItem.Filter as DataChangeFilter; + + if (filter != null) + { + DeadbandTypeCB.SelectedItem = (DeadbandType)filter.DeadbandType; + DeadbandValueUP.Value = (decimal)filter.DeadbandValue; + TriggerTypeCB.SelectedItem = filter.Trigger; + } + + if (!monitoredItem.Created) + { + // fetch the available encodings for the first node in the list from the server. + IVariableBase variable = session.NodeCache.Find(monitoredItem.StartNodeId) as IVariableBase; + + DataEncodingCB.Items.Add(new EncodingInfo()); + DataEncodingCB.SelectedIndex = 0; + + if (variable != null) + { + if (session.NodeCache.IsTypeOf(variable.DataType, Opc.Ua.DataTypeIds.Structure)) + { + foreach (INode encoding in session.NodeCache.Find(variable.DataType, Opc.Ua.ReferenceTypeIds.HasEncoding, false, true)) + { + DataEncodingCB.Items.Add(new EncodingInfo() { EncodingName = encoding.BrowseName }); + + if (monitoredItem.Encoding == encoding.BrowseName) + { + DataEncodingCB.SelectedIndex = DataEncodingCB.Items.Count - 1; + } + } + } + } + } + } + else + { + AttributeCB.SelectedIndex = ((int)Attributes.EventNotifier - 1); + } + + if (base.ShowDialog() != DialogResult.OK) + { + return false; + } + + // update monitored item. + if (!monitoredItem.Created) + { + monitoredItem.StartNodeId = NodeBTN.SelectedNode; + monitoredItem.DisplayName = session.NodeCache.GetDisplayText(monitoredItem.StartNodeId); + monitoredItem.RelativePath = null; + monitoredItem.AttributeId = (uint)(AttributeCB.SelectedIndex + 1); + monitoredItem.MonitoringMode = (MonitoringMode)MonitoringModeCB.SelectedItem; + } + + monitoredItem.SamplingInterval = (int)SamplingIntervalUP.Value; + monitoredItem.DiscardOldest = DiscardOldestCK.Checked; + + if (!isEvent) + { + if (!monitoredItem.Created) + { + monitoredItem.IndexRange = IndexRangeTB.Text.Trim(); + monitoredItem.Encoding = ((EncodingInfo)DataEncodingCB.SelectedItem).EncodingName; + } + + monitoredItem.QueueSize = (uint)QueueSizeUP.Value; + + DataChangeTrigger trigger = (DataChangeTrigger)TriggerTypeCB.SelectedItem; + DeadbandType deadbandType = (DeadbandType)DeadbandTypeCB.SelectedItem; + + if (monitoredItem.Filter != null || deadbandType != DeadbandType.None || trigger != DataChangeTrigger.StatusValue) + { + DataChangeFilter filter = new DataChangeFilter(); + filter.DeadbandType = (uint)deadbandType; + filter.DeadbandValue = (double)DeadbandValueUP.Value; + filter.Trigger = trigger; + monitoredItem.Filter = filter; + } + } + else + { + if (!monitoredItem.Created) + { + monitoredItem.IndexRange = null; + monitoredItem.Encoding = null; + } + + monitoredItem.QueueSize = 0; + monitoredItem.Filter = new EventFilter(); + } + + return true; + } + + /// + /// Prompts the user to specify a monitoring mode. + /// + public MonitoringMode ShowDialog(MonitoringMode monitoringMode) + { + NodeLB.Visible = false; + NodeTB.Visible = false; + NodeBTN.Visible = false; + AttributeLB.Visible = false; + AttributeCB.Visible = false; + IndexRangeLB.Visible = false; + IndexRangeTB.Visible = false; + DataEncodingLB.Visible = false; + DataEncodingCB.Visible = false; + MonitoringModeLB.Visible = true; + MonitoringModeCB.Visible = true; + SamplingIntervalLB.Visible = false; + SamplingIntervalUP.Visible = false; + QueueSizeLB.Visible = false; + QueueSizeUP.Visible = false; + DiscardOldestLB.Visible = false; + DiscardOldestCK.Visible = false; + DeadbandTypeLB.Visible = false; + DeadbandTypeCB.Visible = false; + DeadbandValueLB.Visible = false; + DeadbandValueUP.Visible = false; + TriggerTypeLB.Visible = false; + TriggerTypeCB.Visible = false; + + MonitoringModeCB.SelectedItem = monitoringMode; + + if (base.ShowDialog() != DialogResult.OK) + { + return monitoringMode; + } + + return (MonitoringMode)MonitoringModeCB.SelectedItem; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + if (IndexRangeTB.Visible) + { + NumericRange.Parse(IndexRangeTB.Text); + } + + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditMonitoredItemDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.Designer.cs new file mode 100644 index 00000000..74d568d3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.Designer.cs @@ -0,0 +1,293 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditReadValueIdDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.NodeLB = new System.Windows.Forms.Label(); + this.IndexRangeTB = new System.Windows.Forms.TextBox(); + this.AttributeCB = new System.Windows.Forms.ComboBox(); + this.AttributeLB = new System.Windows.Forms.Label(); + this.IndexRangeLB = new System.Windows.Forms.Label(); + this.DataEncodingLB = new System.Windows.Forms.Label(); + this.DataEncodingCB = new System.Windows.Forms.ComboBox(); + this.NodeTB = new System.Windows.Forms.TextBox(); + this.NodeBTN = new Opc.Ua.Client.Controls.SelectNodeCtrl(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(282, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 107); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(360, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ControlsPN); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(360, 107); + this.MainPN.TabIndex = 1; + // + // ControlsPN + // + this.ControlsPN.AutoSize = true; + this.ControlsPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.NodeLB, 0, 0); + this.ControlsPN.Controls.Add(this.IndexRangeTB, 1, 2); + this.ControlsPN.Controls.Add(this.AttributeCB, 1, 1); + this.ControlsPN.Controls.Add(this.AttributeLB, 0, 1); + this.ControlsPN.Controls.Add(this.IndexRangeLB, 0, 2); + this.ControlsPN.Controls.Add(this.DataEncodingLB, 0, 3); + this.ControlsPN.Controls.Add(this.DataEncodingCB, 1, 3); + this.ControlsPN.Controls.Add(this.NodeTB, 1, 0); + this.ControlsPN.Controls.Add(this.NodeBTN, 2, 0); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 4; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.ControlsPN.Size = new System.Drawing.Size(360, 107); + this.ControlsPN.TabIndex = 1; + // + // NodeLB + // + this.NodeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeLB.AutoSize = true; + this.NodeLB.Location = new System.Drawing.Point(3, 0); + this.NodeLB.Name = "NodeLB"; + this.NodeLB.Size = new System.Drawing.Size(33, 26); + this.NodeLB.TabIndex = 19; + this.NodeLB.Text = "Node"; + this.NodeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IndexRangeTB + // + this.IndexRangeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IndexRangeTB.Location = new System.Drawing.Point(87, 56); + this.IndexRangeTB.Name = "IndexRangeTB"; + this.IndexRangeTB.Size = new System.Drawing.Size(246, 20); + this.IndexRangeTB.TabIndex = 18; + // + // AttributeCB + // + this.AttributeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AttributeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AttributeCB.FormattingEnabled = true; + this.AttributeCB.Location = new System.Drawing.Point(87, 29); + this.AttributeCB.Name = "AttributeCB"; + this.AttributeCB.Size = new System.Drawing.Size(138, 21); + this.AttributeCB.TabIndex = 17; + // + // AttributeLB + // + this.AttributeLB.AutoSize = true; + this.AttributeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.AttributeLB.Location = new System.Drawing.Point(3, 26); + this.AttributeLB.Name = "AttributeLB"; + this.AttributeLB.Size = new System.Drawing.Size(78, 27); + this.AttributeLB.TabIndex = 16; + this.AttributeLB.Text = "Attribute"; + this.AttributeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IndexRangeLB + // + this.IndexRangeLB.AutoSize = true; + this.IndexRangeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IndexRangeLB.Location = new System.Drawing.Point(3, 53); + this.IndexRangeLB.Name = "IndexRangeLB"; + this.IndexRangeLB.Size = new System.Drawing.Size(78, 26); + this.IndexRangeLB.TabIndex = 3; + this.IndexRangeLB.Text = "Index Range"; + this.IndexRangeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DataEncodingLB + // + this.DataEncodingLB.AutoSize = true; + this.DataEncodingLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DataEncodingLB.Location = new System.Drawing.Point(3, 79); + this.DataEncodingLB.Name = "DataEncodingLB"; + this.DataEncodingLB.Size = new System.Drawing.Size(78, 28); + this.DataEncodingLB.TabIndex = 5; + this.DataEncodingLB.Text = "Data Encoding"; + this.DataEncodingLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DataEncodingCB + // + this.DataEncodingCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.DataEncodingCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.DataEncodingCB.FormattingEnabled = true; + this.DataEncodingCB.Location = new System.Drawing.Point(87, 82); + this.DataEncodingCB.Name = "DataEncodingCB"; + this.DataEncodingCB.Size = new System.Drawing.Size(138, 21); + this.DataEncodingCB.TabIndex = 6; + // + // NodeTB + // + this.NodeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.NodeTB.Location = new System.Drawing.Point(87, 3); + this.NodeTB.Name = "NodeTB"; + this.NodeTB.ReadOnly = true; + this.NodeTB.Size = new System.Drawing.Size(246, 20); + this.NodeTB.TabIndex = 2; + // + // NodeBTN + // + this.NodeBTN.Location = new System.Drawing.Point(336, 0); + this.NodeBTN.Margin = new System.Windows.Forms.Padding(0); + this.NodeBTN.Name = "NodeBTN"; + this.NodeBTN.NodeControl = this.NodeTB; + this.NodeBTN.ReferenceTypeIds = null; + this.NodeBTN.RootId = null; + this.NodeBTN.SelectedNode = null; + this.NodeBTN.SelectedReference = null; + this.NodeBTN.Session = null; + this.NodeBTN.Size = new System.Drawing.Size(24, 24); + this.NodeBTN.TabIndex = 15; + this.NodeBTN.View = null; + // + // EditReadValueIdDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(360, 137); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditReadValueIdDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Read Request"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label NodeLB; + private System.Windows.Forms.TextBox IndexRangeTB; + private System.Windows.Forms.ComboBox AttributeCB; + private System.Windows.Forms.Label AttributeLB; + private System.Windows.Forms.Label IndexRangeLB; + private System.Windows.Forms.Label DataEncodingLB; + private System.Windows.Forms.ComboBox DataEncodingCB; + private System.Windows.Forms.TextBox NodeTB; + private SelectNodeCtrl NodeBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.cs new file mode 100644 index 00000000..eeed3d7f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.cs @@ -0,0 +1,289 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditReadValueIdDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditReadValueIdDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + // add the attributes in numerical order. + foreach (uint attributeId in Attributes.GetIdentifiers()) + { + AttributeCB.Items.Add(Attributes.GetBrowseName(attributeId)); + } + } + #endregion + + #region EncodingInfo Class + /// + /// Stores information about a data encoding. + /// + private class EncodingInfo + { + public QualifiedName EncodingName; + + public override string ToString() + { + if (EncodingName != null) + { + return EncodingName.ToString(); + } + + return "Not Set"; + } + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to edit the read request parameters for the set of nodes provided. + /// + public ReadValueId[] ShowDialog(Session session, params ReadValueId[] nodesToRead) + { + NodeBTN.Session = session; + NodeBTN.SelectedReference = null; + + bool editNode = true; + bool editAttribute = true; + bool editIndexRange = true; + bool editDataEncoding = true; + + // populate the controls. + if (nodesToRead != null && nodesToRead.Length > 0) + { + bool nonValueAttribute = false; + + for (int ii = 0; ii < nodesToRead.Length; ii++) + { + if (nodesToRead[ii] == null) + { + continue; + } + + // only show the node if all have the same node id. + if (editNode) + { + if (NodeBTN.SelectedNode != null && nodesToRead[ii].NodeId != NodeBTN.SelectedNode) + { + NodeTB.Visible = false; + NodeLB.Visible = false; + NodeBTN.Visible = false; + editNode = false; + } + else + { + NodeBTN.SelectedNode = nodesToRead[ii].NodeId; + } + } + + // only show the attribute if all have the same attribute id. + if (editAttribute) + { + // check if any non-value attributes are present. + if (nodesToRead[ii].AttributeId != Attributes.Value) + { + nonValueAttribute = true; + } + + int index = (int)nodesToRead[ii].AttributeId - 1; + + if (AttributeCB.SelectedIndex != -1 && index != AttributeCB.SelectedIndex) + { + AttributeCB.Visible = false; + AttributeLB.Visible = false; + editAttribute = false; + } + else + { + AttributeCB.SelectedIndex = index; + } + } + } + + DataEncodingCB.Items.Clear(); + editIndexRange = !nonValueAttribute; + + IndexRangeLB.Visible = editIndexRange; + IndexRangeTB.Visible = editIndexRange; + + if (!nonValueAttribute) + { + // use the index range for the first node as template. + IndexRangeTB.Text = nodesToRead[0].IndexRange; + + // fetch the available encodings for the first node in the list from the server. + IVariableBase variable = session.NodeCache.Find(nodesToRead[0].NodeId) as IVariableBase; + + if (variable != null) + { + if (session.NodeCache.IsTypeOf(variable.DataType, Opc.Ua.DataTypeIds.Structure)) + { + DataEncodingCB.Items.Add(new EncodingInfo()); + DataEncodingCB.SelectedIndex = 0; + + foreach (INode encoding in session.NodeCache.Find(variable.DataType, Opc.Ua.ReferenceTypeIds.HasEncoding, false, true)) + { + DataEncodingCB.Items.Add(new EncodingInfo() { EncodingName = encoding.BrowseName }); + + if (nodesToRead[0].DataEncoding == encoding.BrowseName) + { + DataEncodingCB.SelectedIndex = DataEncodingCB.Items.Count - 1; + } + } + } + } + } + + // hide the data encodings if none to select. + if (DataEncodingCB.Items.Count == 0) + { + DataEncodingCB.Visible = false; + DataEncodingLB.Visible = false; + editDataEncoding = false; + } + } + + if (!editNode && !editAttribute && !editIndexRange && !editDataEncoding) + { + throw new ArgumentException("nodesToRead", "It is not possible to edit the current selection as a group."); + } + + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + // create the list of results. + ReadValueId[] results = null; + + if (nodesToRead == null || nodesToRead.Length == 0) + { + results = new ReadValueId[1]; + } + else + { + results = new ReadValueId[nodesToRead.Length]; + } + + // copy the controls into the results. + for (int ii = 0; ii < results.Length; ii++) + { + // preserve the existing settings if they are not being changed. + if (nodesToRead != null && nodesToRead.Length > 0) + { + results[ii] = (ReadValueId)nodesToRead[ii].MemberwiseClone(); + } + else + { + results[ii] = new ReadValueId(); + } + + // only copy results that were actually being edited. + if (editNode) + { + results[ii].NodeId = NodeBTN.SelectedNode; + } + + if (editAttribute) + { + results[ii].AttributeId = (uint)(AttributeCB.SelectedIndex + 1); + } + + if (editIndexRange) + { + results[ii].ParsedIndexRange = NumericRange.Parse(IndexRangeTB.Text); + + if (NumericRange.Empty != results[ii].ParsedIndexRange) + { + results[ii].IndexRange = results[ii].ParsedIndexRange.ToString(); + } + else + { + results[ii].IndexRange = String.Empty; + } + } + + if (editDataEncoding) + { + results[ii].DataEncoding = null; + + EncodingInfo encoding = DataEncodingCB.SelectedItem as EncodingInfo; + + if (encoding != null) + { + results[ii].DataEncoding = encoding.EncodingName; + } + } + } + + return results; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + if (IndexRangeTB.Visible) + { + NumericRange.Parse(IndexRangeTB.Text); + } + + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditReadValueIdDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.Designer.cs new file mode 100644 index 00000000..382062ec --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.Designer.cs @@ -0,0 +1,357 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditSubscriptionDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.PriorityTB = new System.Windows.Forms.NumericUpDown(); + this.PriorityLB = new System.Windows.Forms.Label(); + this.MaxNotificationsPerPublishUP = new System.Windows.Forms.NumericUpDown(); + this.MaxNotificationsPerPublishLB = new System.Windows.Forms.Label(); + this.LifetimeCountLB = new System.Windows.Forms.Label(); + this.LifetimeCountUP = new System.Windows.Forms.NumericUpDown(); + this.PublishingEnabledLB = new System.Windows.Forms.Label(); + this.KeepAliveCountLB = new System.Windows.Forms.Label(); + this.PublishingIntervalLB = new System.Windows.Forms.Label(); + this.PublishingIntervalUP = new System.Windows.Forms.NumericUpDown(); + this.PublishingEnabledCK = new System.Windows.Forms.CheckBox(); + this.KeepAliveCountUP = new System.Windows.Forms.NumericUpDown(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PriorityTB)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.MaxNotificationsPerPublishUP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LifetimeCountUP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PublishingIntervalUP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.KeepAliveCountUP)).BeginInit(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(170, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 149); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(248, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ControlsPN); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(248, 149); + this.MainPN.TabIndex = 1; + // + // ControlsPN + // + this.ControlsPN.AutoSize = true; + this.ControlsPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.PriorityTB, 1, 4); + this.ControlsPN.Controls.Add(this.PriorityLB, 0, 4); + this.ControlsPN.Controls.Add(this.MaxNotificationsPerPublishUP, 1, 3); + this.ControlsPN.Controls.Add(this.MaxNotificationsPerPublishLB, 0, 3); + this.ControlsPN.Controls.Add(this.LifetimeCountLB, 0, 2); + this.ControlsPN.Controls.Add(this.LifetimeCountUP, 1, 2); + this.ControlsPN.Controls.Add(this.PublishingEnabledLB, 0, 5); + this.ControlsPN.Controls.Add(this.KeepAliveCountLB, 0, 1); + this.ControlsPN.Controls.Add(this.PublishingIntervalLB, 0, 0); + this.ControlsPN.Controls.Add(this.PublishingIntervalUP, 1, 0); + this.ControlsPN.Controls.Add(this.PublishingEnabledCK, 1, 5); + this.ControlsPN.Controls.Add(this.KeepAliveCountUP, 1, 1); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 7; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.Size = new System.Drawing.Size(248, 149); + this.ControlsPN.TabIndex = 0; + // + // PriorityTB + // + this.PriorityTB.Location = new System.Drawing.Point(106, 107); + this.PriorityTB.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PriorityTB.Name = "PriorityTB"; + this.PriorityTB.Size = new System.Drawing.Size(138, 20); + this.PriorityTB.TabIndex = 9; + // + // PriorityLB + // + this.PriorityLB.AutoSize = true; + this.PriorityLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PriorityLB.Location = new System.Drawing.Point(3, 104); + this.PriorityLB.Name = "PriorityLB"; + this.PriorityLB.Size = new System.Drawing.Size(97, 26); + this.PriorityLB.TabIndex = 8; + this.PriorityLB.Text = "Priority"; + this.PriorityLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MaxNotificationsPerPublishUP + // + this.MaxNotificationsPerPublishUP.Location = new System.Drawing.Point(106, 81); + this.MaxNotificationsPerPublishUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.MaxNotificationsPerPublishUP.Name = "MaxNotificationsPerPublishUP"; + this.MaxNotificationsPerPublishUP.Size = new System.Drawing.Size(138, 20); + this.MaxNotificationsPerPublishUP.TabIndex = 7; + // + // MaxNotificationsPerPublishLB + // + this.MaxNotificationsPerPublishLB.AutoSize = true; + this.MaxNotificationsPerPublishLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.MaxNotificationsPerPublishLB.Location = new System.Drawing.Point(3, 78); + this.MaxNotificationsPerPublishLB.Name = "MaxNotificationsPerPublishLB"; + this.MaxNotificationsPerPublishLB.Size = new System.Drawing.Size(97, 26); + this.MaxNotificationsPerPublishLB.TabIndex = 6; + this.MaxNotificationsPerPublishLB.Text = "Max Notifications"; + this.MaxNotificationsPerPublishLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // LifetimeCountLB + // + this.LifetimeCountLB.AutoSize = true; + this.LifetimeCountLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.LifetimeCountLB.Location = new System.Drawing.Point(3, 52); + this.LifetimeCountLB.Name = "LifetimeCountLB"; + this.LifetimeCountLB.Size = new System.Drawing.Size(97, 26); + this.LifetimeCountLB.TabIndex = 4; + this.LifetimeCountLB.Text = "Lifetime Count"; + this.LifetimeCountLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // LifetimeCountUP + // + this.LifetimeCountUP.Location = new System.Drawing.Point(106, 55); + this.LifetimeCountUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.LifetimeCountUP.Name = "LifetimeCountUP"; + this.LifetimeCountUP.Size = new System.Drawing.Size(138, 20); + this.LifetimeCountUP.TabIndex = 5; + // + // PublishingEnabledLB + // + this.PublishingEnabledLB.AutoSize = true; + this.PublishingEnabledLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PublishingEnabledLB.Location = new System.Drawing.Point(3, 130); + this.PublishingEnabledLB.Name = "PublishingEnabledLB"; + this.PublishingEnabledLB.Size = new System.Drawing.Size(97, 20); + this.PublishingEnabledLB.TabIndex = 10; + this.PublishingEnabledLB.Text = "Publishing Enabled"; + this.PublishingEnabledLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // KeepAliveCountLB + // + this.KeepAliveCountLB.AutoSize = true; + this.KeepAliveCountLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.KeepAliveCountLB.Location = new System.Drawing.Point(3, 26); + this.KeepAliveCountLB.Name = "KeepAliveCountLB"; + this.KeepAliveCountLB.Size = new System.Drawing.Size(97, 26); + this.KeepAliveCountLB.TabIndex = 2; + this.KeepAliveCountLB.Text = "Keep Alive Count"; + this.KeepAliveCountLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // PublishingIntervalLB + // + this.PublishingIntervalLB.AutoSize = true; + this.PublishingIntervalLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PublishingIntervalLB.Location = new System.Drawing.Point(3, 0); + this.PublishingIntervalLB.Name = "PublishingIntervalLB"; + this.PublishingIntervalLB.Size = new System.Drawing.Size(97, 26); + this.PublishingIntervalLB.TabIndex = 0; + this.PublishingIntervalLB.Text = "Publishing Interval"; + this.PublishingIntervalLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // PublishingIntervalUP + // + this.PublishingIntervalUP.Increment = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.PublishingIntervalUP.Location = new System.Drawing.Point(106, 3); + this.PublishingIntervalUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.PublishingIntervalUP.Name = "PublishingIntervalUP"; + this.PublishingIntervalUP.Size = new System.Drawing.Size(138, 20); + this.PublishingIntervalUP.TabIndex = 1; + // + // PublishingEnabledCK + // + this.PublishingEnabledCK.AutoSize = true; + this.PublishingEnabledCK.Checked = true; + this.PublishingEnabledCK.CheckState = System.Windows.Forms.CheckState.Checked; + this.PublishingEnabledCK.Location = new System.Drawing.Point(106, 133); + this.PublishingEnabledCK.Name = "PublishingEnabledCK"; + this.PublishingEnabledCK.Size = new System.Drawing.Size(15, 14); + this.PublishingEnabledCK.TabIndex = 11; + this.PublishingEnabledCK.UseVisualStyleBackColor = true; + // + // KeepAliveCountUP + // + this.KeepAliveCountUP.Location = new System.Drawing.Point(106, 29); + this.KeepAliveCountUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.KeepAliveCountUP.Name = "KeepAliveCountUP"; + this.KeepAliveCountUP.Size = new System.Drawing.Size(138, 20); + this.KeepAliveCountUP.TabIndex = 3; + // + // EditSubscriptionDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(248, 179); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditSubscriptionDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Subscription"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PriorityTB)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.MaxNotificationsPerPublishUP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LifetimeCountUP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PublishingIntervalUP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.KeepAliveCountUP)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label PublishingEnabledLB; + private System.Windows.Forms.Label KeepAliveCountLB; + private System.Windows.Forms.Label PublishingIntervalLB; + private System.Windows.Forms.NumericUpDown KeepAliveCountUP; + private System.Windows.Forms.NumericUpDown PublishingIntervalUP; + private System.Windows.Forms.CheckBox PublishingEnabledCK; + private System.Windows.Forms.Label LifetimeCountLB; + private System.Windows.Forms.NumericUpDown LifetimeCountUP; + private System.Windows.Forms.NumericUpDown MaxNotificationsPerPublishUP; + private System.Windows.Forms.Label MaxNotificationsPerPublishLB; + private System.Windows.Forms.NumericUpDown PriorityTB; + private System.Windows.Forms.Label PriorityLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.cs new file mode 100644 index 00000000..9f751b54 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.cs @@ -0,0 +1,101 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditSubscriptionDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditSubscriptionDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to edit the monitored item. + /// + public bool ShowDialog(Subscription subscription) + { + PublishingIntervalUP.Value = subscription.PublishingInterval; + KeepAliveCountUP.Value = subscription.KeepAliveCount; + LifetimeCountUP.Value = subscription.LifetimeCount; + MaxNotificationsPerPublishUP.Value = subscription.MaxNotificationsPerPublish; + PriorityTB.Value = subscription.Priority; + PublishingEnabledCK.Checked = subscription.PublishingEnabled; + + if (base.ShowDialog() != DialogResult.OK) + { + return false; + } + + subscription.PublishingInterval = (int)PublishingIntervalUP.Value; + subscription.KeepAliveCount = (uint)KeepAliveCountUP.Value; + subscription.LifetimeCount = (uint)LifetimeCountUP.Value; + subscription.MaxNotificationsPerPublish = (uint)MaxNotificationsPerPublishUP.Value; + subscription.Priority = (byte)PriorityTB.Value; + subscription.PublishingEnabled = PublishingEnabledCK.Checked; + + return true; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditSubscriptionDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.Designer.cs new file mode 100644 index 00000000..f242491e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.Designer.cs @@ -0,0 +1,89 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditValue2Ctrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseBTN.Location = new System.Drawing.Point(0, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 24); + this.BrowseBTN.TabIndex = 0; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // SelectFileCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Name = "SelectFileCtrl"; + this.Size = new System.Drawing.Size(24, 24); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.cs new file mode 100644 index 00000000..0c737476 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.cs @@ -0,0 +1,127 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control with button that displays edit array dialog. + /// + public partial class EditValue2Ctrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public EditValue2Ctrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private event EventHandler m_ValueChanged; + private Variant m_value; + #endregion + + #region Public Interface + /// + /// The value in the control. + /// + public Variant Value + { + get + { + return m_value; + } + + set + { + if (CurrentValueControl != null) + { + CurrentValueControl.Text = value.ToString(); + } + + m_value = value; + } + } + + /// + /// Gets or sets the control that shows the current value. + /// + public Control CurrentValueControl { get; set; } + + /// + /// Raised when the value is changed. + /// + public event EventHandler ValueChanged + { + add { m_ValueChanged += value; } + remove { m_ValueChanged -= value; } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + if (CurrentValueControl == null) + { + return; + } + + object value = new EditComplexValueDlg().ShowDialog( + m_value.TypeInfo, + null, + m_value.Value, + "Edit Value"); + + if (value == null) + { + return; + } + + Value = new Variant(value); + + if (m_ValueChanged != null) + { + m_ValueChanged(this, e); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditValueCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.Designer.cs new file mode 100644 index 00000000..03b51a06 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.Designer.cs @@ -0,0 +1,426 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditWriteValueDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.SourceTimestampCK = new System.Windows.Forms.CheckBox(); + this.ServerTimestampCK = new System.Windows.Forms.CheckBox(); + this.ServerTimestampLB = new System.Windows.Forms.Label(); + this.ServerTimestampTB = new System.Windows.Forms.TextBox(); + this.SourceTimestampTB = new System.Windows.Forms.TextBox(); + this.SourceTimestampLB = new System.Windows.Forms.Label(); + this.StatusCodeTB = new System.Windows.Forms.TextBox(); + this.StatusCodeLB = new System.Windows.Forms.Label(); + this.ValueTB = new System.Windows.Forms.TextBox(); + this.NodeLB = new System.Windows.Forms.Label(); + this.IndexRangeTB = new System.Windows.Forms.TextBox(); + this.AttributeCB = new System.Windows.Forms.ComboBox(); + this.AttributeLB = new System.Windows.Forms.Label(); + this.IndexRangeLB = new System.Windows.Forms.Label(); + this.ValueLB = new System.Windows.Forms.Label(); + this.NodeTB = new System.Windows.Forms.TextBox(); + this.NodeBTN = new Opc.Ua.Client.Controls.SelectNodeCtrl(); + this.ValueBTN = new Opc.Ua.Client.Controls.EditValue2Ctrl(); + this.StatusCodeCK = new System.Windows.Forms.CheckBox(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(282, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 189); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(360, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ControlsPN); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(360, 189); + this.MainPN.TabIndex = 1; + // + // ControlsPN + // + this.ControlsPN.AutoSize = true; + this.ControlsPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.SourceTimestampCK, 2, 5); + this.ControlsPN.Controls.Add(this.ServerTimestampCK, 2, 6); + this.ControlsPN.Controls.Add(this.ServerTimestampLB, 0, 6); + this.ControlsPN.Controls.Add(this.ServerTimestampTB, 1, 6); + this.ControlsPN.Controls.Add(this.SourceTimestampTB, 1, 5); + this.ControlsPN.Controls.Add(this.SourceTimestampLB, 0, 5); + this.ControlsPN.Controls.Add(this.StatusCodeTB, 1, 4); + this.ControlsPN.Controls.Add(this.StatusCodeLB, 0, 4); + this.ControlsPN.Controls.Add(this.ValueTB, 1, 3); + this.ControlsPN.Controls.Add(this.NodeLB, 0, 0); + this.ControlsPN.Controls.Add(this.IndexRangeTB, 1, 2); + this.ControlsPN.Controls.Add(this.AttributeCB, 1, 1); + this.ControlsPN.Controls.Add(this.AttributeLB, 0, 1); + this.ControlsPN.Controls.Add(this.IndexRangeLB, 0, 2); + this.ControlsPN.Controls.Add(this.ValueLB, 0, 3); + this.ControlsPN.Controls.Add(this.NodeTB, 1, 0); + this.ControlsPN.Controls.Add(this.NodeBTN, 2, 0); + this.ControlsPN.Controls.Add(this.ValueBTN, 2, 3); + this.ControlsPN.Controls.Add(this.StatusCodeCK, 2, 4); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 8; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.Size = new System.Drawing.Size(360, 189); + this.ControlsPN.TabIndex = 1; + // + // SourceTimestampCK + // + this.SourceTimestampCK.AutoSize = true; + this.SourceTimestampCK.Location = new System.Drawing.Point(341, 138); + this.SourceTimestampCK.Margin = new System.Windows.Forms.Padding(5, 7, 3, 3); + this.SourceTimestampCK.Name = "SourceTimestampCK"; + this.SourceTimestampCK.Size = new System.Drawing.Size(15, 14); + this.SourceTimestampCK.TabIndex = 30; + this.SourceTimestampCK.UseVisualStyleBackColor = true; + this.SourceTimestampCK.CheckedChanged += new System.EventHandler(this.SourceTimestampCK_CheckedChanged); + // + // ServerTimestampCK + // + this.ServerTimestampCK.AutoSize = true; + this.ServerTimestampCK.Location = new System.Drawing.Point(341, 164); + this.ServerTimestampCK.Margin = new System.Windows.Forms.Padding(5, 7, 3, 3); + this.ServerTimestampCK.Name = "ServerTimestampCK"; + this.ServerTimestampCK.Size = new System.Drawing.Size(15, 14); + this.ServerTimestampCK.TabIndex = 29; + this.ServerTimestampCK.UseVisualStyleBackColor = true; + this.ServerTimestampCK.CheckedChanged += new System.EventHandler(this.ServerTimestampCK_CheckedChanged); + // + // ServerTimestampLB + // + this.ServerTimestampLB.AutoSize = true; + this.ServerTimestampLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServerTimestampLB.Location = new System.Drawing.Point(3, 157); + this.ServerTimestampLB.Name = "ServerTimestampLB"; + this.ServerTimestampLB.Size = new System.Drawing.Size(95, 26); + this.ServerTimestampLB.TabIndex = 27; + this.ServerTimestampLB.Text = "Server Timestamp"; + this.ServerTimestampLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ServerTimestampTB + // + this.ServerTimestampTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServerTimestampTB.Enabled = false; + this.ServerTimestampTB.Location = new System.Drawing.Point(104, 160); + this.ServerTimestampTB.Name = "ServerTimestampTB"; + this.ServerTimestampTB.Size = new System.Drawing.Size(229, 20); + this.ServerTimestampTB.TabIndex = 26; + // + // SourceTimestampTB + // + this.SourceTimestampTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SourceTimestampTB.Enabled = false; + this.SourceTimestampTB.Location = new System.Drawing.Point(104, 134); + this.SourceTimestampTB.Name = "SourceTimestampTB"; + this.SourceTimestampTB.Size = new System.Drawing.Size(229, 20); + this.SourceTimestampTB.TabIndex = 25; + // + // SourceTimestampLB + // + this.SourceTimestampLB.AutoSize = true; + this.SourceTimestampLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SourceTimestampLB.Location = new System.Drawing.Point(3, 131); + this.SourceTimestampLB.Name = "SourceTimestampLB"; + this.SourceTimestampLB.Size = new System.Drawing.Size(95, 26); + this.SourceTimestampLB.TabIndex = 24; + this.SourceTimestampLB.Text = "Source Timestamp"; + this.SourceTimestampLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StatusCodeTB + // + this.StatusCodeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.StatusCodeTB.Enabled = false; + this.StatusCodeTB.Location = new System.Drawing.Point(104, 108); + this.StatusCodeTB.Name = "StatusCodeTB"; + this.StatusCodeTB.Size = new System.Drawing.Size(229, 20); + this.StatusCodeTB.TabIndex = 23; + // + // StatusCodeLB + // + this.StatusCodeLB.AutoSize = true; + this.StatusCodeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.StatusCodeLB.Location = new System.Drawing.Point(3, 105); + this.StatusCodeLB.Name = "StatusCodeLB"; + this.StatusCodeLB.Size = new System.Drawing.Size(95, 26); + this.StatusCodeLB.TabIndex = 22; + this.StatusCodeLB.Text = "Status Code"; + this.StatusCodeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ValueTB + // + this.ValueTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueTB.Location = new System.Drawing.Point(104, 82); + this.ValueTB.Name = "ValueTB"; + this.ValueTB.ReadOnly = true; + this.ValueTB.Size = new System.Drawing.Size(229, 20); + this.ValueTB.TabIndex = 20; + // + // NodeLB + // + this.NodeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeLB.AutoSize = true; + this.NodeLB.Location = new System.Drawing.Point(3, 0); + this.NodeLB.Name = "NodeLB"; + this.NodeLB.Size = new System.Drawing.Size(33, 26); + this.NodeLB.TabIndex = 19; + this.NodeLB.Text = "Node"; + this.NodeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IndexRangeTB + // + this.IndexRangeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IndexRangeTB.Location = new System.Drawing.Point(104, 56); + this.IndexRangeTB.Name = "IndexRangeTB"; + this.IndexRangeTB.Size = new System.Drawing.Size(229, 20); + this.IndexRangeTB.TabIndex = 18; + // + // AttributeCB + // + this.AttributeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AttributeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AttributeCB.FormattingEnabled = true; + this.AttributeCB.Location = new System.Drawing.Point(104, 29); + this.AttributeCB.Name = "AttributeCB"; + this.AttributeCB.Size = new System.Drawing.Size(147, 21); + this.AttributeCB.TabIndex = 17; + // + // AttributeLB + // + this.AttributeLB.AutoSize = true; + this.AttributeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.AttributeLB.Location = new System.Drawing.Point(3, 26); + this.AttributeLB.Name = "AttributeLB"; + this.AttributeLB.Size = new System.Drawing.Size(95, 27); + this.AttributeLB.TabIndex = 16; + this.AttributeLB.Text = "Attribute"; + this.AttributeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IndexRangeLB + // + this.IndexRangeLB.AutoSize = true; + this.IndexRangeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IndexRangeLB.Location = new System.Drawing.Point(3, 53); + this.IndexRangeLB.Name = "IndexRangeLB"; + this.IndexRangeLB.Size = new System.Drawing.Size(95, 26); + this.IndexRangeLB.TabIndex = 3; + this.IndexRangeLB.Text = "Index Range"; + this.IndexRangeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ValueLB + // + this.ValueLB.AutoSize = true; + this.ValueLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueLB.Location = new System.Drawing.Point(3, 79); + this.ValueLB.Name = "ValueLB"; + this.ValueLB.Size = new System.Drawing.Size(95, 26); + this.ValueLB.TabIndex = 5; + this.ValueLB.Text = "Value"; + this.ValueLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NodeTB + // + this.NodeTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.NodeTB.Location = new System.Drawing.Point(104, 3); + this.NodeTB.Name = "NodeTB"; + this.NodeTB.ReadOnly = true; + this.NodeTB.Size = new System.Drawing.Size(229, 20); + this.NodeTB.TabIndex = 2; + // + // NodeBTN + // + this.NodeBTN.Location = new System.Drawing.Point(336, 0); + this.NodeBTN.Margin = new System.Windows.Forms.Padding(0); + this.NodeBTN.Name = "NodeBTN"; + this.NodeBTN.NodeControl = this.NodeTB; + this.NodeBTN.ReferenceTypeIds = null; + this.NodeBTN.RootId = null; + this.NodeBTN.SelectedNode = null; + this.NodeBTN.SelectedReference = null; + this.NodeBTN.Session = null; + this.NodeBTN.Size = new System.Drawing.Size(24, 24); + this.NodeBTN.TabIndex = 15; + this.NodeBTN.View = null; + // + // ValueBTN + // + this.ValueBTN.CurrentValueControl = this.ValueTB; + this.ValueBTN.Location = new System.Drawing.Point(336, 79); + this.ValueBTN.Margin = new System.Windows.Forms.Padding(0); + this.ValueBTN.Name = "ValueBTN"; + this.ValueBTN.Size = new System.Drawing.Size(24, 24); + this.ValueBTN.TabIndex = 21; + // + // StatusCodeCK + // + this.StatusCodeCK.AutoSize = true; + this.StatusCodeCK.Location = new System.Drawing.Point(341, 112); + this.StatusCodeCK.Margin = new System.Windows.Forms.Padding(5, 7, 3, 3); + this.StatusCodeCK.Name = "StatusCodeCK"; + this.StatusCodeCK.Size = new System.Drawing.Size(15, 14); + this.StatusCodeCK.TabIndex = 28; + this.StatusCodeCK.UseVisualStyleBackColor = true; + this.StatusCodeCK.CheckedChanged += new System.EventHandler(this.StatusCodeCK_CheckedChanged); + // + // EditWriteValueDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(360, 219); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditWriteValueDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Write Request"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label NodeLB; + private System.Windows.Forms.TextBox IndexRangeTB; + private System.Windows.Forms.ComboBox AttributeCB; + private System.Windows.Forms.Label AttributeLB; + private System.Windows.Forms.Label IndexRangeLB; + private System.Windows.Forms.Label ValueLB; + private System.Windows.Forms.TextBox NodeTB; + private SelectNodeCtrl NodeBTN; + private System.Windows.Forms.TextBox ValueTB; + private EditValue2Ctrl ValueBTN; + private System.Windows.Forms.TextBox StatusCodeTB; + private System.Windows.Forms.Label StatusCodeLB; + private System.Windows.Forms.Label ServerTimestampLB; + private System.Windows.Forms.TextBox ServerTimestampTB; + private System.Windows.Forms.TextBox SourceTimestampTB; + private System.Windows.Forms.Label SourceTimestampLB; + private System.Windows.Forms.CheckBox SourceTimestampCK; + private System.Windows.Forms.CheckBox ServerTimestampCK; + private System.Windows.Forms.CheckBox StatusCodeCK; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.cs new file mode 100644 index 00000000..4aba9ecb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.cs @@ -0,0 +1,205 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditWriteValueDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditWriteValueDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + // add the attributes in numerical order. + foreach (uint attributeId in Attributes.GetIdentifiers()) + { + AttributeCB.Items.Add(Attributes.GetBrowseName(attributeId)); + } + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to edit the write request parameters for the set of nodes provided. + /// + public WriteValue ShowDialog(Session session, WriteValue nodeToWrite) + { + NodeBTN.Session = session; + NodeBTN.SelectedReference = null; + + // fill in the control. + NodeBTN.SelectedNode = nodeToWrite.NodeId; + AttributeCB.SelectedIndex = (int)nodeToWrite.AttributeId - 1; + IndexRangeTB.Text = nodeToWrite.IndexRange; + ValueBTN.Value = nodeToWrite.Value.WrappedValue; + + if (nodeToWrite.Value.StatusCode != StatusCodes.Good) + { + StatusCodeTB.Text = (string)TypeInfo.Cast(nodeToWrite.Value.StatusCode, BuiltInType.String); + StatusCodeCK.Checked = true; + } + + if (nodeToWrite.Value.SourceTimestamp != DateTime.MinValue) + { + SourceTimestampTB.Text = (string)TypeInfo.Cast(nodeToWrite.Value.SourceTimestamp, BuiltInType.String); + SourceTimestampCK.Checked = true; + } + + if (nodeToWrite.Value.ServerTimestamp != DateTime.MinValue) + { + ServerTimestampTB.Text = (string)TypeInfo.Cast(nodeToWrite.Value.ServerTimestamp, BuiltInType.String); + ServerTimestampCK.Checked = true; + } + + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + // create the result. + WriteValue result = new WriteValue(); + + result.NodeId = NodeBTN.SelectedNode; + result.AttributeId = (uint)(AttributeCB.SelectedIndex + 1); + result.ParsedIndexRange = NumericRange.Parse(IndexRangeTB.Text); + result.Value.WrappedValue = ValueBTN.Value; + + if (StatusCodeCK.Checked) + { + result.Value.StatusCode = (StatusCode)TypeInfo.Cast(StatusCodeTB.Text, BuiltInType.StatusCode); + } + + if (SourceTimestampCK.Checked) + { + result.Value.SourceTimestamp = (DateTime)TypeInfo.Cast(SourceTimestampTB.Text, BuiltInType.DateTime); + } + + if (ServerTimestampCK.Checked) + { + result.Value.ServerTimestamp = (DateTime)TypeInfo.Cast(ServerTimestampTB.Text, BuiltInType.DateTime); + } + + if (NumericRange.Empty != result.ParsedIndexRange) + { + result.IndexRange = result.ParsedIndexRange.ToString(); + } + else + { + result.IndexRange = String.Empty; + } + + return result; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + IndexRangeTB.Text = IndexRangeTB.Text.Trim(); + + if (String.IsNullOrEmpty(IndexRangeTB.Text)) + { + NumericRange.Parse(IndexRangeTB.Text); + } + + StatusCodeTB.Text = StatusCodeTB.Text.Trim(); + + if (StatusCodeCK.Checked) + { + TypeInfo.Cast(StatusCodeTB.Text, BuiltInType.StatusCode); + } + + SourceTimestampTB.Text = SourceTimestampTB.Text.Trim(); + + if (SourceTimestampCK.Checked) + { + TypeInfo.Cast(SourceTimestampTB.Text, BuiltInType.DateTime); + } + + ServerTimestampTB.Text = ServerTimestampTB.Text.Trim(); + + if (ServerTimestampCK.Checked) + { + TypeInfo.Cast(ServerTimestampTB.Text, BuiltInType.DateTime); + } + + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void StatusCodeCK_CheckedChanged(object sender, EventArgs e) + { + StatusCodeTB.Enabled = StatusCodeCK.Checked; + } + + private void SourceTimestampCK_CheckedChanged(object sender, EventArgs e) + { + SourceTimestampTB.Enabled = SourceTimestampCK.Checked; + + if (SourceTimestampTB.Enabled && String.IsNullOrEmpty(SourceTimestampTB.Text)) + { + SourceTimestampTB.Text = (string)TypeInfo.Cast(DateTime.UtcNow, BuiltInType.String); + } + } + + private void ServerTimestampCK_CheckedChanged(object sender, EventArgs e) + { + ServerTimestampTB.Enabled = ServerTimestampCK.Checked; + + if (ServerTimestampTB.Enabled && String.IsNullOrEmpty(ServerTimestampTB.Text)) + { + ServerTimestampTB.Text = (string)TypeInfo.Cast(DateTime.UtcNow, BuiltInType.String); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EditWriteValueDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.Designer.cs new file mode 100644 index 00000000..bff6cebf --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.Designer.cs @@ -0,0 +1,272 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EventFilterListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.MoveUpMI = new System.Windows.Forms.ToolStripMenuItem(); + this.MoveDownMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.FilterDV = new System.Windows.Forms.DataGridView(); + this.RightPN = new System.Windows.Forms.Panel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseNodeCtrl(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.BrowsePathCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SelectFieldCH = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.DisplayInListCH = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.FilterEnabledCH = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.FilterOperatorCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FilterValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FilterDV)).BeginInit(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MoveUpMI, + this.MoveDownMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(139, 70); + // + // MoveUpMI + // + this.MoveUpMI.Name = "MoveUpMI"; + this.MoveUpMI.Size = new System.Drawing.Size(138, 22); + this.MoveUpMI.Text = "Move Up"; + this.MoveUpMI.Click += new System.EventHandler(this.MoveUpMI_Click); + // + // MoveDownMI + // + this.MoveDownMI.Name = "MoveDownMI"; + this.MoveDownMI.Size = new System.Drawing.Size(138, 22); + this.MoveDownMI.Text = "Move Down"; + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(138, 22); + this.DeleteMI.Text = "Delete"; + // + // FilterDV + // + this.FilterDV.AllowUserToAddRows = false; + this.FilterDV.AllowUserToDeleteRows = false; + this.FilterDV.AllowUserToResizeRows = false; + this.FilterDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.FilterDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FilterDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.BrowsePathCH, + this.SelectFieldCH, + this.DisplayInListCH, + this.FilterEnabledCH, + this.FilterOperatorCH, + this.FilterValueCH}); + this.FilterDV.ContextMenuStrip = this.PopupMenu; + this.FilterDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FilterDV.Location = new System.Drawing.Point(0, 0); + this.FilterDV.Name = "FilterDV"; + this.FilterDV.RowHeadersVisible = false; + this.FilterDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FilterDV.Size = new System.Drawing.Size(754, 346); + this.FilterDV.TabIndex = 0; + this.FilterDV.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FilterDV_CellDoubleClick); + this.FilterDV.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.FilterDV_ColumnHeaderMouseClick); + this.FilterDV.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FilterDV_CellContentClick); + // + // RightPN + // + this.RightPN.Controls.Add(this.FilterDV); + this.RightPN.Controls.Add(this.BrowseCTRL); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(754, 346); + this.RightPN.TabIndex = 3; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesListCollapsed = false; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 0); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(754, 346); + this.BrowseCTRL.SplitterDistance = 387; + this.BrowseCTRL.TabIndex = 1; + this.BrowseCTRL.View = null; + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.Icon.Width = 19; + // + // BrowsePathCH + // + this.BrowsePathCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.BrowsePathCH.DataPropertyName = "BrowsePath"; + this.BrowsePathCH.HeaderText = "Browse Path"; + this.BrowsePathCH.Name = "BrowsePathCH"; + this.BrowsePathCH.ReadOnly = true; + this.BrowsePathCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.BrowsePathCH.Width = 92; + // + // SelectFieldCH + // + this.SelectFieldCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SelectFieldCH.DataPropertyName = "SelectField"; + this.SelectFieldCH.FalseValue = "SelectField"; + this.SelectFieldCH.HeaderText = "Select"; + this.SelectFieldCH.Name = "SelectFieldCH"; + this.SelectFieldCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.SelectFieldCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.SelectFieldCH.TrueValue = "SelectField"; + this.SelectFieldCH.Width = 62; + // + // DisplayInListCH + // + this.DisplayInListCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DisplayInListCH.DataPropertyName = "DisplayInList"; + this.DisplayInListCH.FalseValue = "DisplayInList"; + this.DisplayInListCH.HeaderText = "Display"; + this.DisplayInListCH.Name = "DisplayInListCH"; + this.DisplayInListCH.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.DisplayInListCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.DisplayInListCH.TrueValue = "DisplayInList"; + this.DisplayInListCH.Width = 66; + // + // FilterEnabledCH + // + this.FilterEnabledCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.FilterEnabledCH.DataPropertyName = "FilterEnabled"; + this.FilterEnabledCH.FalseValue = "FilterEnabled"; + this.FilterEnabledCH.HeaderText = "Filter"; + this.FilterEnabledCH.Name = "FilterEnabledCH"; + this.FilterEnabledCH.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.FilterEnabledCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.FilterEnabledCH.TrueValue = "FilterEnabled"; + this.FilterEnabledCH.Width = 54; + // + // FilterOperatorCH + // + this.FilterOperatorCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.FilterOperatorCH.DataPropertyName = "FilterOperator"; + this.FilterOperatorCH.HeaderText = "Filter Operator"; + this.FilterOperatorCH.Name = "FilterOperatorCH"; + this.FilterOperatorCH.ReadOnly = true; + this.FilterOperatorCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.FilterOperatorCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + this.FilterOperatorCH.Width = 98; + // + // FilterValueCH + // + this.FilterValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.FilterValueCH.DataPropertyName = "FilterValue"; + this.FilterValueCH.HeaderText = "Filter Value"; + this.FilterValueCH.Name = "FilterValueCH"; + this.FilterValueCH.ReadOnly = true; + this.FilterValueCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; + // + // EventFilterListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Name = "EventFilterListViewCtrl"; + this.Size = new System.Drawing.Size(754, 346); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.FilterDV)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView FilterDV; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ToolStripMenuItem MoveDownMI; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.ToolStripMenuItem MoveUpMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private BrowseNodeCtrl BrowseCTRL; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn BrowsePathCH; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectFieldCH; + private System.Windows.Forms.DataGridViewCheckBoxColumn DisplayInListCH; + private System.Windows.Forms.DataGridViewCheckBoxColumn FilterEnabledCH; + private System.Windows.Forms.DataGridViewTextBoxColumn FilterOperatorCH; + private System.Windows.Forms.DataGridViewTextBoxColumn FilterValueCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.cs new file mode 100644 index 00000000..1687374b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.cs @@ -0,0 +1,315 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class EventFilterListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public EventFilterListViewCtrl() + { + InitializeComponent(); + FilterDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Events"); + + m_dataset.Tables[0].Columns.Add("Field", typeof(FilterDeclarationField)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("BrowsePath", typeof(string)); + m_dataset.Tables[0].Columns.Add("SelectField", typeof(bool)); + m_dataset.Tables[0].Columns.Add("DisplayInList", typeof(bool)); + m_dataset.Tables[0].Columns.Add("FilterEnabled", typeof(bool)); + m_dataset.Tables[0].Columns.Add("FilterOperator", typeof(FilterOperator)); + m_dataset.Tables[0].Columns.Add("FilterValue", typeof(Variant)); + m_dataset.Tables[0].Columns.Add("Index", typeof(int)); + + m_dataset.Tables[0].DefaultView.Sort = "Index"; + + FilterDV.DataSource = m_dataset.Tables[0].DefaultView; + + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private int m_counter; + #endregion + + #region Public Members + /// + /// Changes the session used for the read request. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Sets the filter to edit. + /// + public void SetFilter(FilterDeclaration filter) + { + m_dataset.Tables[0].Rows.Clear(); + + if (filter != null) + { + foreach (FilterDeclarationField field in filter.Fields) + { + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, field); + m_dataset.Tables[0].Rows.Add(row); + } + } + } + #endregion + + #region Private Methods + /// + /// Updates the row. + /// + public void UpdateRow(DataRow row, FilterDeclarationField field) + { + row[0] = field; + row[1] = ImageList.Images[ClientUtils.GetImageIndex(m_session, field.InstanceDeclaration.NodeClass, field.InstanceDeclaration.RootTypeId, false)]; + row[2] = field.InstanceDeclaration.BrowsePathDisplayText; + row[3] = field.Selected; + row[4] = field.DisplayInList; + row[5] = field.FilterEnabled; + + if (field.FilterEnabled) + { + row[6] = field.FilterOperator; + row[7] = field.FilterValue; + } + + row[8] = m_counter++; + } + #endregion + + #region Event Handlers + private void FilterDV_CellDoubleClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (e.RowIndex == -1) + { + return; + } + + DataRowView source = FilterDV.Rows[e.RowIndex].DataBoundItem as DataRowView; + FilterDeclarationField field = (FilterDeclarationField)source.Row[0]; + + if (e.ColumnIndex == 5) + { + FilterOperator filterOperator = field.FilterOperator; + + if (new SetFilterOperatorDlg().ShowDialog(ref filterOperator)) + { + field.FilterEnabled = true; + source.Row[5] = field.FilterEnabled; + + field.FilterOperator = filterOperator; + source.Row[6] = field.FilterOperator; + } + + return; + } + + if (e.ColumnIndex == 6) + { + if (field.FilterOperator == FilterOperator.IsNull) + { + field.FilterValue = Variant.Null; + return; + } + + InstanceDeclaration declaration = field.InstanceDeclaration; + + object result = new EditComplexValueDlg().ShowDialog( + m_session, + declaration.DisplayName, + declaration.DataType, + declaration.ValueRank, + field.FilterValue.Value, + "Edit Filter Value"); + + if (result != null) + { + field.FilterEnabled = true; + source.Row[5] = field.FilterEnabled; + source.Row[6] = field.FilterOperator; + + field.FilterValue = new Variant(result); + source.Row[7] = field.FilterValue; + } + + return; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void FilterDV_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (e.RowIndex == -1) + { + return; + } + + DataRowView source = FilterDV.Rows[e.RowIndex].DataBoundItem as DataRowView; + FilterDeclarationField field = (FilterDeclarationField)source.Row[0]; + + if (e.ColumnIndex == 2) + { + field.Selected = !field.Selected; + source.Row[3] = field.Selected; + return; + } + + if (e.ColumnIndex == 3) + { + field.DisplayInList = !field.DisplayInList; + source.Row[4] = field.DisplayInList; + return; + } + + if (e.ColumnIndex == 4) + { + field.FilterEnabled = !field.FilterEnabled; + source.Row[5] = field.FilterEnabled; + return; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void MoveUpMI_Click(object sender, EventArgs e) + { + try + { + // need to sort the rows by index. + List rows = new List(); + + foreach (DataGridViewRow row in FilterDV.SelectedRows) + { + bool inserted = false; + + for (int ii = 0; ii < rows.Count; ii++) + { + if (rows[ii].Index > row.Index) + { + rows.Insert(ii, row); + inserted = true; + break; + } + } + + if (!inserted) + { + rows.Add(row); + } + } + + // move all of the rows up one. + for (int ii = 0; ii < rows.Count; ii++) + { + DataRowView source = FilterDV.Rows[rows[ii].Index].DataBoundItem as DataRowView; + + if (rows[ii].Index > 0) + { + DataRowView target = FilterDV.Rows[rows[ii].Index-1].DataBoundItem as DataRowView; + int index = (int)target.Row[8]; + target.Row[8] = source.Row[8]; + source.Row[8] = index; + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void FilterDV_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) + { + try + { + if (e.ColumnIndex == 2) + { + bool state = false; + + if (m_dataset.Tables[0].DefaultView.Count > 0) + { + state = (bool)m_dataset.Tables[0].DefaultView[0].Row[3]; + } + + state = !state; + + foreach (DataRowView row in m_dataset.Tables[0].DefaultView) + { + FilterDeclarationField field = (FilterDeclarationField)row.Row[0]; + row.Row[3] = field.Selected = state; + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.resx new file mode 100644 index 00000000..2090affb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventFilterListViewCtrl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 136, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.Designer.cs new file mode 100644 index 00000000..d1946b69 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.Designer.cs @@ -0,0 +1,182 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EventListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.DetailsMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.EventsDV = new System.Windows.Forms.DataGridView(); + this.RightPN = new System.Windows.Forms.Panel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseNodeCtrl(); + this.ClearMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Separator01 = new System.Windows.Forms.ToolStripSeparator(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.EventsDV)).BeginInit(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DetailsMI, + this.DeleteMI, + this.Separator01, + this.ClearMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(153, 98); + // + // DetailsMI + // + this.DetailsMI.Name = "DetailsMI"; + this.DetailsMI.Size = new System.Drawing.Size(152, 22); + this.DetailsMI.Text = "Details..."; + this.DetailsMI.Click += new System.EventHandler(this.DetailsMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(152, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // EventsDV + // + this.EventsDV.AllowUserToAddRows = false; + this.EventsDV.AllowUserToDeleteRows = false; + this.EventsDV.AllowUserToResizeRows = false; + this.EventsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.EventsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.EventsDV.ContextMenuStrip = this.PopupMenu; + this.EventsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.EventsDV.Location = new System.Drawing.Point(0, 0); + this.EventsDV.Name = "EventsDV"; + this.EventsDV.RowHeadersVisible = false; + this.EventsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.EventsDV.Size = new System.Drawing.Size(754, 346); + this.EventsDV.TabIndex = 0; + this.EventsDV.ColumnAdded += new System.Windows.Forms.DataGridViewColumnEventHandler(this.EventsDV_ColumnAdded); + // + // RightPN + // + this.RightPN.Controls.Add(this.EventsDV); + this.RightPN.Controls.Add(this.BrowseCTRL); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(754, 346); + this.RightPN.TabIndex = 3; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesListCollapsed = false; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 0); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(754, 346); + this.BrowseCTRL.SplitterDistance = 387; + this.BrowseCTRL.TabIndex = 1; + this.BrowseCTRL.View = null; + // + // ClearMI + // + this.ClearMI.Name = "ClearMI"; + this.ClearMI.Size = new System.Drawing.Size(152, 22); + this.ClearMI.Text = "Clear"; + this.ClearMI.Click += new System.EventHandler(this.ClearMI_Click); + // + // Separator01 + // + this.Separator01.Name = "Separator01"; + this.Separator01.Size = new System.Drawing.Size(149, 6); + // + // EventListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Name = "EventListViewCtrl"; + this.Size = new System.Drawing.Size(754, 346); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.EventsDV)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView EventsDV; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.ToolStripMenuItem DetailsMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private BrowseNodeCtrl BrowseCTRL; + private System.Windows.Forms.ToolStripMenuItem ClearMI; + private System.Windows.Forms.ToolStripSeparator Separator01; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.cs new file mode 100644 index 00000000..bcce5aaa --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.cs @@ -0,0 +1,343 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class EventListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public EventListViewCtrl() + { + InitializeComponent(); + EventsDV.AutoGenerateColumns = true; + ImageList = new ClientUtils().ImageList; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private FilterDeclaration m_filter; + #endregion + + #region Public Members + /// + /// Changes the session used for the read request. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Sets the filter to edit. + /// + public void SetFilter(FilterDeclaration filter) + { + m_filter = filter; + m_dataset = new DataSet(); + m_dataset.Tables.Add("Events"); + m_dataset.Tables[0].Columns.Add("Event", typeof(VariantCollection)); + + if (m_filter != null) + { + foreach (FilterDeclarationField field in m_filter.Fields) + { + if (field.DisplayInList) + { + m_dataset.Tables[0].Columns.Add(field.InstanceDeclaration.DisplayName, typeof(string)); + } + } + } + + EventsDV.DataSource = m_dataset.Tables[0]; + } + + /// + /// Displays the event. + /// + public void DisplayEvent(EventFieldList e) + { + if (e != null) + { + DisplayEvent(e.EventFields); + } + } + #endregion + + #region Private Methods + /// + /// Sets the filter to edit. + /// + public void DisplayEvent(VariantCollection fields) + { + if (m_filter != null) + { + int index = 0; + + DataRow row = m_dataset.Tables[0].NewRow(); + row[index++] = fields; + + for (int ii = 0; ii < m_filter.Fields.Count; ii++) + { + if (m_filter.Fields[ii].DisplayInList) + { + if (ii < fields.Count - 1) + { + // increment because the first field is always the event NodeId when using FilterDeclarations to create EventFilters. + row[index] = fields[ii + 1].ToString(); + } + + index++; + } + } + + m_dataset.Tables[0].Rows.Add(row); + } + } + + /// + /// Fetches the recent history. + /// + private void ReadHistory(ReadEventDetails details, NodeId areaId) + { + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = areaId; + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Neither, + false, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + HistoryEvent events = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryEvent; + + foreach (HistoryEventFieldList e in events.Events) + { + DisplayEvent(e.EventFields); + } + + // release continuation points. + if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) + { + nodeToRead.ContinuationPoint = results[0].ContinuationPoint; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Neither, + true, + nodesToRead, + out results, + out diagnosticInfos); + } + } + + /// + /// Deletes the recent history. + /// + private void DeleteHistory(NodeId areaId, List events, FilterDeclaration filter) + { + // find the event id. + int index = 0; + + foreach (FilterDeclarationField field in filter.Fields) + { + if (field.InstanceDeclaration.BrowseName == Opc.Ua.BrowseNames.EventId) + { + break; + } + + index++; + } + + // can't delete events if no event id. + if (index >= filter.Fields.Count) + { + throw ServiceResultException.Create(StatusCodes.BadEventIdUnknown, "Cannot delete events if EventId was not selected."); + } + + // build list of nodes to delete. + DeleteEventDetails details = new DeleteEventDetails(); + details.NodeId = areaId; + + foreach (VariantCollection e in events) + { + byte[] eventId = null; + + if (e.Count > index) + { + eventId = e[index].Value as byte[]; + } + + details.EventIds.Add(eventId); + } + + // delete the events. + ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection(); + nodesToUpdate.Add(new ExtensionObject(details)); + + HistoryUpdateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryUpdate( + null, + nodesToUpdate, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToUpdate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + // check for item level errors. + if (results[0].OperationResults.Count > 0) + { + int count = 0; + + for (int ii = 0; ii < results[0].OperationResults.Count; ii++) + { + if (StatusCode.IsBad(results[0].OperationResults[ii])) + { + count++; + } + } + + // raise an error. + if (count > 0) + { + throw ServiceResultException.Create( + StatusCodes.BadEventIdUnknown, + "Error deleting events. Only {0} of {1} deletes succeeded.", + events.Count - count, + events.Count); + } + } + } + #endregion + + #region Event Handlers + private void EventsDV_ColumnAdded(object sender, DataGridViewColumnEventArgs e) + { + if (e.Column.Index == 0) + { + EventsDV.Columns[0].Visible = false; + } + + if (EventsDV.Columns.Count > 1) + { + EventsDV.Columns[EventsDV.Columns.Count-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + } + + private void DetailsMI_Click(object sender, EventArgs e) + { + try + { + foreach (DataGridViewRow row in EventsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + EventFieldList e2 = (EventFieldList)source.Row[0]; + new ViewEventDetailsDlg().ShowDialog(m_filter, e2.EventFields); + break; + } + + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + foreach (DataGridViewRow row in EventsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + source.Row.Delete(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ClearMI_Click(object sender, EventArgs e) + { + try + { + m_dataset.Tables[0].Rows.Clear(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.resx new file mode 100644 index 00000000..72bd515f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/EventListViewCtrl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 136, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.Designer.cs new file mode 100644 index 00000000..0405bfee --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.Designer.cs @@ -0,0 +1,494 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class GdsDiscoverServersDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.BrowseCK = new System.Windows.Forms.CheckBox(); + this.SearchBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.ServersLV = new System.Windows.Forms.ListView(); + this.ApplicationNameCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ApplicationTypeCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.DNSNamesCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ProtocolsCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.DetailsMI = new System.Windows.Forms.ToolStripMenuItem(); + this.TopPN = new System.Windows.Forms.TableLayoutPanel(); + this.ProductUriTB = new System.Windows.Forms.TextBox(); + this.ProductUriCB = new System.Windows.Forms.ComboBox(); + this.ProductUriLB = new System.Windows.Forms.Label(); + this.SystemElementTB = new System.Windows.Forms.TextBox(); + this.SystemElementLB = new System.Windows.Forms.Label(); + this.MachineNameCB = new System.Windows.Forms.ComboBox(); + this.ApplicationUriCB = new System.Windows.Forms.ComboBox(); + this.ApplicationUriTB = new System.Windows.Forms.TextBox(); + this.MachineNameLB = new System.Windows.Forms.Label(); + this.MachineNameTB = new System.Windows.Forms.TextBox(); + this.ApplicationUriLB = new System.Windows.Forms.Label(); + this.ApplicationNameTB = new System.Windows.Forms.TextBox(); + this.ApplicationNameLB = new System.Windows.Forms.Label(); + this.ApplicationNameCB = new System.Windows.Forms.ComboBox(); + this.SystemElementBTN = new Opc.Ua.Client.Controls.SelectNodeCtrl(); + this.SearchPN = new System.Windows.Forms.Panel(); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseNodeCtrl(); + this.ServerCTRL = new Opc.Ua.Client.Controls.ConnectServerCtrl(); + this.BottomPN.SuspendLayout(); + this.PopupMenu.SuspendLayout(); + this.TopPN.SuspendLayout(); + this.SearchPN.SuspendLayout(); + this.SuspendLayout(); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.BrowseCK); + this.BottomPN.Controls.Add(this.SearchBTN); + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 332); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(784, 30); + this.BottomPN.TabIndex = 6; + // + // BrowseCK + // + this.BrowseCK.AutoSize = true; + this.BrowseCK.Location = new System.Drawing.Point(84, 4); + this.BrowseCK.Name = "BrowseCK"; + this.BrowseCK.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3); + this.BrowseCK.Size = new System.Drawing.Size(61, 23); + this.BrowseCK.TabIndex = 5; + this.BrowseCK.Text = "Browse"; + this.BrowseCK.UseVisualStyleBackColor = true; + this.BrowseCK.CheckedChanged += new System.EventHandler(this.BrowseCK_CheckedChanged); + // + // SearchBTN + // + this.SearchBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.SearchBTN.Location = new System.Drawing.Point(3, 4); + this.SearchBTN.Name = "SearchBTN"; + this.SearchBTN.Size = new System.Drawing.Size(75, 23); + this.SearchBTN.TabIndex = 2; + this.SearchBTN.Text = "Search"; + this.SearchBTN.UseVisualStyleBackColor = true; + this.SearchBTN.Click += new System.EventHandler(this.SearchBTN_Click); + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(625, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(706, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // ServersLV + // + this.ServersLV.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.ApplicationNameCH, + this.ApplicationTypeCH, + this.DNSNamesCH, + this.ProtocolsCH}); + this.ServersLV.ContextMenuStrip = this.PopupMenu; + this.ServersLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServersLV.FullRowSelect = true; + this.ServersLV.Location = new System.Drawing.Point(0, 138); + this.ServersLV.Name = "ServersLV"; + this.ServersLV.Size = new System.Drawing.Size(784, 163); + this.ServersLV.TabIndex = 7; + this.ServersLV.UseCompatibleStateImageBehavior = false; + this.ServersLV.View = System.Windows.Forms.View.Details; + this.ServersLV.SelectedIndexChanged += new System.EventHandler(this.ServersLV_SelectedIndexChanged); + // + // ApplicationNameCH + // + this.ApplicationNameCH.Text = "Application Name"; + this.ApplicationNameCH.Width = 114; + // + // ApplicationTypeCH + // + this.ApplicationTypeCH.Text = "Application Type"; + this.ApplicationTypeCH.Width = 112; + // + // DNSNamesCH + // + this.DNSNamesCH.Text = "DNS Names"; + this.DNSNamesCH.Width = 95; + // + // ProtocolsCH + // + this.ProtocolsCH.Text = "Protocols"; + this.ProtocolsCH.Width = 147; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DetailsMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(119, 26); + // + // DetailsMI + // + this.DetailsMI.Name = "DetailsMI"; + this.DetailsMI.Size = new System.Drawing.Size(118, 22); + this.DetailsMI.Text = "Details..."; + // + // TopPN + // + this.TopPN.ColumnCount = 4; + this.TopPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TopPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TopPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TopPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TopPN.Controls.Add(this.ProductUriTB, 2, 4); + this.TopPN.Controls.Add(this.ProductUriCB, 1, 4); + this.TopPN.Controls.Add(this.ProductUriLB, 0, 4); + this.TopPN.Controls.Add(this.SystemElementTB, 1, 0); + this.TopPN.Controls.Add(this.SystemElementLB, 0, 0); + this.TopPN.Controls.Add(this.MachineNameCB, 1, 2); + this.TopPN.Controls.Add(this.ApplicationUriCB, 1, 3); + this.TopPN.Controls.Add(this.ApplicationUriTB, 2, 3); + this.TopPN.Controls.Add(this.MachineNameLB, 0, 2); + this.TopPN.Controls.Add(this.MachineNameTB, 2, 2); + this.TopPN.Controls.Add(this.ApplicationUriLB, 0, 3); + this.TopPN.Controls.Add(this.ApplicationNameTB, 2, 1); + this.TopPN.Controls.Add(this.ApplicationNameLB, 0, 1); + this.TopPN.Controls.Add(this.ApplicationNameCB, 1, 1); + this.TopPN.Controls.Add(this.SystemElementBTN, 3, 0); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(0, 0); + this.TopPN.Name = "TopPN"; + this.TopPN.RowCount = 7; + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.TopPN.Size = new System.Drawing.Size(784, 138); + this.TopPN.TabIndex = 8; + // + // ProductUriTB + // + this.ProductUriTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProductUriTB.Location = new System.Drawing.Point(197, 110); + this.ProductUriTB.Name = "ProductUriTB"; + this.ProductUriTB.Size = new System.Drawing.Size(388, 20); + this.ProductUriTB.TabIndex = 15; + // + // ProductUriCB + // + this.ProductUriCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ProductUriCB.FormattingEnabled = true; + this.ProductUriCB.Location = new System.Drawing.Point(99, 110); + this.ProductUriCB.Name = "ProductUriCB"; + this.ProductUriCB.Size = new System.Drawing.Size(92, 21); + this.ProductUriCB.TabIndex = 14; + // + // ProductUriLB + // + this.ProductUriLB.AutoSize = true; + this.ProductUriLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProductUriLB.Location = new System.Drawing.Point(3, 107); + this.ProductUriLB.Name = "ProductUriLB"; + this.ProductUriLB.Size = new System.Drawing.Size(90, 27); + this.ProductUriLB.TabIndex = 13; + this.ProductUriLB.Text = "Product URI"; + this.ProductUriLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SystemElementTB + // + this.TopPN.SetColumnSpan(this.SystemElementTB, 2); + this.SystemElementTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SystemElementTB.Location = new System.Drawing.Point(99, 3); + this.SystemElementTB.Name = "SystemElementTB"; + this.SystemElementTB.ReadOnly = true; + this.SystemElementTB.Size = new System.Drawing.Size(486, 20); + this.SystemElementTB.TabIndex = 12; + // + // SystemElementLB + // + this.SystemElementLB.AutoSize = true; + this.SystemElementLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SystemElementLB.Location = new System.Drawing.Point(3, 0); + this.SystemElementLB.Name = "SystemElementLB"; + this.SystemElementLB.Size = new System.Drawing.Size(90, 26); + this.SystemElementLB.TabIndex = 11; + this.SystemElementLB.Text = "System Element"; + this.SystemElementLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MachineNameCB + // + this.MachineNameCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.MachineNameCB.FormattingEnabled = true; + this.MachineNameCB.Location = new System.Drawing.Point(99, 56); + this.MachineNameCB.Name = "MachineNameCB"; + this.MachineNameCB.Size = new System.Drawing.Size(92, 21); + this.MachineNameCB.TabIndex = 10; + // + // ApplicationUriCB + // + this.ApplicationUriCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ApplicationUriCB.FormattingEnabled = true; + this.ApplicationUriCB.Location = new System.Drawing.Point(99, 83); + this.ApplicationUriCB.Name = "ApplicationUriCB"; + this.ApplicationUriCB.Size = new System.Drawing.Size(92, 21); + this.ApplicationUriCB.TabIndex = 9; + // + // ApplicationUriTB + // + this.ApplicationUriTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ApplicationUriTB.Location = new System.Drawing.Point(197, 83); + this.ApplicationUriTB.Name = "ApplicationUriTB"; + this.ApplicationUriTB.Size = new System.Drawing.Size(388, 20); + this.ApplicationUriTB.TabIndex = 6; + // + // MachineNameLB + // + this.MachineNameLB.AutoSize = true; + this.MachineNameLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.MachineNameLB.Location = new System.Drawing.Point(3, 53); + this.MachineNameLB.Name = "MachineNameLB"; + this.MachineNameLB.Size = new System.Drawing.Size(90, 27); + this.MachineNameLB.TabIndex = 5; + this.MachineNameLB.Text = "Machine Name"; + this.MachineNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MachineNameTB + // + this.MachineNameTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.MachineNameTB.Location = new System.Drawing.Point(197, 56); + this.MachineNameTB.Name = "MachineNameTB"; + this.MachineNameTB.Size = new System.Drawing.Size(388, 20); + this.MachineNameTB.TabIndex = 4; + // + // ApplicationUriLB + // + this.ApplicationUriLB.AutoSize = true; + this.ApplicationUriLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ApplicationUriLB.Location = new System.Drawing.Point(3, 80); + this.ApplicationUriLB.Name = "ApplicationUriLB"; + this.ApplicationUriLB.Size = new System.Drawing.Size(90, 27); + this.ApplicationUriLB.TabIndex = 3; + this.ApplicationUriLB.Text = "Application URI"; + this.ApplicationUriLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationNameTB + // + this.ApplicationNameTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ApplicationNameTB.Location = new System.Drawing.Point(197, 29); + this.ApplicationNameTB.Name = "ApplicationNameTB"; + this.ApplicationNameTB.Size = new System.Drawing.Size(388, 20); + this.ApplicationNameTB.TabIndex = 2; + // + // ApplicationNameLB + // + this.ApplicationNameLB.AutoSize = true; + this.ApplicationNameLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ApplicationNameLB.Location = new System.Drawing.Point(3, 26); + this.ApplicationNameLB.Name = "ApplicationNameLB"; + this.ApplicationNameLB.Size = new System.Drawing.Size(90, 27); + this.ApplicationNameLB.TabIndex = 1; + this.ApplicationNameLB.Text = "Application Name"; + this.ApplicationNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationNameCB + // + this.ApplicationNameCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ApplicationNameCB.FormattingEnabled = true; + this.ApplicationNameCB.Location = new System.Drawing.Point(99, 29); + this.ApplicationNameCB.Name = "ApplicationNameCB"; + this.ApplicationNameCB.Size = new System.Drawing.Size(92, 21); + this.ApplicationNameCB.TabIndex = 8; + // + // SystemElementBTN + // + this.SystemElementBTN.Location = new System.Drawing.Point(589, 1); + this.SystemElementBTN.Margin = new System.Windows.Forms.Padding(1); + this.SystemElementBTN.Name = "SystemElementBTN"; + this.SystemElementBTN.NodeControl = this.SystemElementTB; + this.SystemElementBTN.ReferenceTypeIds = null; + this.SystemElementBTN.RootId = null; + this.SystemElementBTN.SelectedNode = null; + this.SystemElementBTN.SelectedReference = null; + this.SystemElementBTN.Session = null; + this.SystemElementBTN.Size = new System.Drawing.Size(24, 24); + this.SystemElementBTN.TabIndex = 16; + this.SystemElementBTN.View = null; + // + // SearchPN + // + this.SearchPN.Controls.Add(this.ServersLV); + this.SearchPN.Controls.Add(this.TopPN); + this.SearchPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.SearchPN.Location = new System.Drawing.Point(0, 31); + this.SearchPN.Name = "SearchPN"; + this.SearchPN.Size = new System.Drawing.Size(784, 301); + this.SearchPN.TabIndex = 11; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesListCollapsed = false; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 31); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(784, 301); + this.BrowseCTRL.SplitterDistance = 387; + this.BrowseCTRL.TabIndex = 9; + this.BrowseCTRL.View = null; + this.BrowseCTRL.AfterSelect += new System.EventHandler(this.BrowseCTRL_AfterSelect); + // + // ServerCTRL + // + this.ServerCTRL.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.ServerCTRL.Configuration = null; + this.ServerCTRL.DisableDomainCheck = false; + this.ServerCTRL.Dock = System.Windows.Forms.DockStyle.Top; + this.ServerCTRL.Location = new System.Drawing.Point(0, 0); + this.ServerCTRL.MaximumSize = new System.Drawing.Size(2048, 31); + this.ServerCTRL.MinimumSize = new System.Drawing.Size(500, 31); + this.ServerCTRL.Name = "ServerCTRL"; + this.ServerCTRL.Padding = new System.Windows.Forms.Padding(3); + this.ServerCTRL.PreferredLocales = null; + this.ServerCTRL.ServerStatusControl = null; + this.ServerCTRL.ServerUrl = ""; + this.ServerCTRL.SessionName = null; + this.ServerCTRL.Size = new System.Drawing.Size(784, 31); + this.ServerCTRL.StatusStrip = null; + this.ServerCTRL.StatusUpateTimeControl = null; + this.ServerCTRL.TabIndex = 10; + this.ServerCTRL.UserIdentity = null; + this.ServerCTRL.UseSecurity = true; + this.ServerCTRL.ReconnectComplete += new System.EventHandler(this.ServerCTRL_ReconnectComplete); + this.ServerCTRL.ConnectComplete += new System.EventHandler(this.ServerCTRL_ConnectComplete); + // + // GdsDiscoverServersDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 362); + this.Controls.Add(this.SearchPN); + this.Controls.Add(this.BrowseCTRL); + this.Controls.Add(this.ServerCTRL); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "GdsDiscoverServersDlg"; + this.Text = "Global Directory Service"; + this.BottomPN.ResumeLayout(false); + this.BottomPN.PerformLayout(); + this.PopupMenu.ResumeLayout(false); + this.TopPN.ResumeLayout(false); + this.TopPN.PerformLayout(); + this.SearchPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button SearchBTN; + private System.Windows.Forms.ListView ServersLV; + private System.Windows.Forms.ColumnHeader ApplicationNameCH; + private System.Windows.Forms.ColumnHeader DNSNamesCH; + private System.Windows.Forms.ColumnHeader ProtocolsCH; + private System.Windows.Forms.TableLayoutPanel TopPN; + private System.Windows.Forms.TextBox ProductUriTB; + private System.Windows.Forms.ComboBox ProductUriCB; + private System.Windows.Forms.Label ProductUriLB; + private System.Windows.Forms.TextBox SystemElementTB; + private System.Windows.Forms.Label SystemElementLB; + private System.Windows.Forms.ComboBox MachineNameCB; + private System.Windows.Forms.ComboBox ApplicationUriCB; + private System.Windows.Forms.TextBox ApplicationUriTB; + private System.Windows.Forms.Label MachineNameLB; + private System.Windows.Forms.TextBox MachineNameTB; + private System.Windows.Forms.Label ApplicationUriLB; + private System.Windows.Forms.TextBox ApplicationNameTB; + private System.Windows.Forms.Label ApplicationNameLB; + private System.Windows.Forms.ComboBox ApplicationNameCB; + private Opc.Ua.Client.Controls.SelectNodeCtrl SystemElementBTN; + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem DetailsMI; + private BrowseNodeCtrl BrowseCTRL; + private ConnectServerCtrl ServerCTRL; + private System.Windows.Forms.Panel SearchPN; + private System.Windows.Forms.CheckBox BrowseCK; + private System.Windows.Forms.ColumnHeader ApplicationTypeCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.cs new file mode 100644 index 00000000..2a205e20 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.cs @@ -0,0 +1,538 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; +using System.Threading.Tasks; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Searches for the servers in a GDS. + /// + public partial class GdsDiscoverServersDlg : Form + { + #region Constructors + /// + /// Constructs the form. + /// + public GdsDiscoverServersDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + ServersLV.SmallImageList = new ClientUtils().ImageList; + + List items = new List(); + + foreach (object value in Enum.GetValues(typeof(Match))) + { + items.Add(value); + } + + ApplicationNameCB.Items.AddRange(items.ToArray()); + MachineNameCB.Items.AddRange(items.ToArray()); + ApplicationUriCB.Items.AddRange(items.ToArray()); + ProductUriCB.Items.AddRange(items.ToArray()); + + ApplicationNameCB.SelectedIndex = 0; + MachineNameCB.SelectedIndex = 0; + ApplicationUriCB.SelectedIndex = 0; + ProductUriCB.SelectedIndex = 0; + } + #endregion + + #region Match Enumeration + private enum Match + { + StartsWith, + IsExactly, + EndsWith, + Contains + } + #endregion + + #region Private Fields + private ApplicationDescription m_application; + #endregion + + #region Private Constants + /// + /// The identifier for the Directory Object. + /// + private const uint GdsId_Directory = 584; + + /// + /// The identifier for the Directory_Applications Object. + /// + private const uint GdsId_Directory_Applications = 586; + + /// + /// The identifier for the RootDirectoryEntryType_QueryServers Method. + /// + private const uint GdsId_RootDirectoryEntryType_QueryServers = 550; + + /// + /// The identifier for the ApplicationElementType ObjectType. + /// + public const uint GdsId_ApplicationElementType = 572; + #endregion + + #region Public Interface + /// + /// Shows the dialog. + /// + public async Task ShowDialog(ApplicationConfiguration configuration, bool showSearchPanel) + { + List urls = new List(); + + foreach (EndpointDescription endpoint in configuration.ClientConfiguration.DiscoveryServers) + { + urls.Add(endpoint.EndpointUrl); + } + + if (urls.Count == 0) + { + // TODO find servers with LDS + urls.Add("opc.tcp://localhost:58800/GlobalDiscoveryServer"); + } + + ServerCTRL.Configuration = configuration; + ServerCTRL.SetAvailableUrls(urls); + + try + { + await ServerCTRL.Connect(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + + OkBTN.Visible = true; + CancelBTN.Visible = true; + + BrowseCK.Checked = showSearchPanel; + BrowseCK.Checked = !showSearchPanel; + + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_application; + } + #endregion + + #region Private Methods + /// + /// Adds the results to the control. + /// + private void UpdateResults(ApplicationDescription[] descriptions) + { + ServersLV.Items.Clear(); + + if (descriptions == null) + { + return; + } + + for (int ii = 0; ii < descriptions.Length; ii++) + { + ApplicationDescription description = descriptions[ii]; + + if (description == null) + { + continue; + } + + ListViewItem item = new ListViewItem(); + item.Text = Utils.Format("{0}", description.ApplicationName); + item.ImageIndex = ClientUtils.GetImageIndex(ServerCTRL.Session, NodeClass.Object, null, false); + item.SubItems.Add(new ListViewItem.ListViewSubItem()); + item.SubItems.Add(new ListViewItem.ListViewSubItem()); + item.SubItems.Add(new ListViewItem.ListViewSubItem()); + item.Tag = description; + ServersLV.Items.Add(item); + + item.SubItems[1].Text = description.ApplicationType.ToString(); + + if (description.DiscoveryUrls == null) + { + continue; + } + + // collect the domains and protocols. + List domains = new List(); + List protocols = new List(); + + foreach (string discoveryUrl in description.DiscoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + if (!domains.Contains(url.DnsSafeHost)) + { + domains.Add(url.DnsSafeHost); + } + + if (!protocols.Contains(url.Scheme)) + { + protocols.Add(url.Scheme); + } + } + } + + // format the domains. + StringBuilder buffer = new StringBuilder(); + + foreach (string domain in domains) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + buffer.Append(domain); + } + + item.SubItems[2].Text = buffer.ToString(); + + // format the protocols. + buffer = new StringBuilder(); + + foreach (string protocol in protocols) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + buffer.Append(protocol); + } + + item.SubItems[3].Text = buffer.ToString(); + } + + // adjust column widths. + for (int ii = 0; ii < ServersLV.Columns.Count; ii++) + { + ServersLV.Columns[ii].Width = -2; + } + } + + /// + /// Adds wildcards to the filter. + /// + private string ProcessFilter(ComboBox selection, TextBox filter) + { + if (String.IsNullOrEmpty(filter.Text)) + { + return String.Empty; + } + + string text = filter.Text; + Match match = (Match)selection.SelectedItem; + + if (match == Match.Contains || match == Match.StartsWith) + { + if (!text.EndsWith("%")) + { + text = text + "%"; + } + } + + if (match == Match.Contains || match == Match.EndsWith) + { + if (!text.StartsWith("%")) + { + text = "%" + text; + } + } + + return text; + } + + /// + /// Searches the server for servers. + /// + private void Search() + { + Session session = ServerCTRL.Session; + + if (session == null) + { + return; + } + + NodeId elementId = null; + ReferenceDescription reference = SystemElementBTN.SelectedReference; + + if (reference != null && !reference.NodeId.IsAbsolute) + { + elementId = (NodeId)reference.NodeId; + } + + ushort namespaceIndex = (ushort)session.NamespaceUris.GetIndex(Namespaces.OpcUaGds); + + IList outputArguments = session.Call( + new NodeId(GdsId_Directory, namespaceIndex), + new NodeId(GdsId_RootDirectoryEntryType_QueryServers, namespaceIndex), + elementId, + ProcessFilter(ApplicationNameCB, ApplicationNameTB), + ProcessFilter(MachineNameCB, MachineNameTB), + ProcessFilter(ApplicationUriCB, ApplicationUriTB), + ProcessFilter(ProductUriCB, ProductUriTB)); + + if (outputArguments != null && outputArguments.Count == 1) + { + ExtensionObject[] extensions = outputArguments[0] as ExtensionObject[]; + ApplicationDescription[] descriptions = (ApplicationDescription[])ExtensionObject.ToArray(extensions, typeof(ApplicationDescription)); + UpdateResults(descriptions); + } + } + + /// + /// Reads the application description from the GDS. + /// + private ApplicationDescription Read(NodeId nodeId) + { + NamespaceTable wellKnownNamespaceUris = new NamespaceTable(); + wellKnownNamespaceUris.Append(Namespaces.OpcUaGds); + + string[] browsePaths = new string[] + { + "1:ApplicationName", + "1:ApplicationType", + "1:ApplicationUri", + "1:ProductUri", + "1:GatewayServerUri", + "1:DiscoveryUrls" + }; + + List propertyIds = ClientUtils.TranslateBrowsePaths( + ServerCTRL.Session, + nodeId, + wellKnownNamespaceUris, + browsePaths); + + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + foreach (NodeId propertyId in propertyIds) + { + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = propertyId; + nodeToRead.AttributeId = Attributes.Value; + nodesToRead.Add(nodeToRead); + } + + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ServerCTRL.Session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + ApplicationDescription application = new ApplicationDescription(); + + application.ApplicationName = results[0].GetValue(null); + application.ApplicationType = (ApplicationType)results[1].GetValue((int)ApplicationType.Server); + application.ApplicationUri = results[2].GetValue(null); + application.ProductUri = results[3].GetValue(null); + application.GatewayServerUri = results[4].GetValue(null); + + string[] discoveryUrls = results[5].GetValue(null); + + if (discoveryUrls != null) + { + application.DiscoveryUrls = new StringCollection(discoveryUrls); + } + + return application; + } + #endregion + + #region Event Handlers + private void SearchBTN_Click(object sender, EventArgs e) + { + try + { + Search(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CloseBTN_Click(object sender, EventArgs e) + { + try + { + Close(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ServerCTRL_ConnectComplete(object sender, EventArgs e) + { + try + { + Session session = ServerCTRL.Session; + + if (session != null) + { + ushort namespaceIndex = (ushort)session.NamespaceUris.GetIndex(Opc.Ua.Namespaces.OpcUaGds); + NodeId rootId = new NodeId(GdsId_Directory_Applications, namespaceIndex); + NodeId[] referenceTypeIds = new NodeId[] { Opc.Ua.ReferenceTypeIds.Organizes, Opc.Ua.ReferenceTypeIds.HasChild }; + + BrowseCTRL.Initialize(session, rootId, referenceTypeIds); + SystemElementBTN.Session = session; + SystemElementBTN.RootId = rootId; + SystemElementBTN.ReferenceTypeIds = referenceTypeIds; + } + else + { + BrowseCTRL.ChangeSession(session); + SystemElementBTN.Session = session; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ServerCTRL_ReconnectComplete(object sender, EventArgs e) + { + try + { + Session session = ServerCTRL.Session; + BrowseCTRL.ChangeSession(session); + SystemElementBTN.Session = session; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BrowseCK_CheckedChanged(object sender, EventArgs e) + { + try + { + SearchPN.Visible = !BrowseCK.Checked; + SearchBTN.Enabled = !BrowseCK.Checked; + BrowseCTRL.Visible = BrowseCK.Checked; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ServersLV_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (ServerCTRL.Session == null) + { + return; + } + + foreach (ListViewItem item in ServersLV.SelectedItems) + { + m_application = item.Tag as ApplicationDescription; + OkBTN.Enabled = m_application.ApplicationType == ApplicationType.Server || m_application.ApplicationType == ApplicationType.ClientAndServer; + return; + } + + m_application = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BrowseCTRL_AfterSelect(object sender, EventArgs e) + { + try + { + if (ServerCTRL.Session == null) + { + return; + } + + ushort namespaceIndex = (ushort)ServerCTRL.Session.NamespaceUris.GetIndex(Opc.Ua.Namespaces.OpcUaGds); + NodeId typeId = new NodeId(GdsId_ApplicationElementType, namespaceIndex); + + ReferenceDescription reference = BrowseCTRL.SelectedNode; + + if (reference != null) + { + if (reference.TypeDefinition == typeId) + { + m_application = Read((NodeId)reference.NodeId); + OkBTN.Enabled = m_application.ApplicationType == ApplicationType.Server || m_application.ApplicationType == ApplicationType.ClientAndServer; + return; + } + } + + m_application = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.resx new file mode 100644 index 00000000..664168a0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/GdsDiscoverServersDlg.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.Designer.cs new file mode 100644 index 00000000..bb3679f6 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.Designer.cs @@ -0,0 +1,98 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HistoryDataDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.HistoryDataCTRL = new Opc.Ua.Client.Controls.HistoryDataListView(); + this.SuspendLayout(); + // + // HistoryDataCTRL + // + this.HistoryDataCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.HistoryDataCTRL.EndTime = new System.DateTime(((long)(0))); + this.HistoryDataCTRL.Location = new System.Drawing.Point(0, 0); + this.HistoryDataCTRL.MaxReturnValues = ((uint)(0u)); + this.HistoryDataCTRL.Name = "HistoryDataCTRL"; + this.HistoryDataCTRL.NodeId = null; + this.HistoryDataCTRL.ProcessingInterval = 10000D; + this.HistoryDataCTRL.ReadType = Opc.Ua.Client.Controls.HistoryDataListView.HistoryReadType.Raw; + this.HistoryDataCTRL.ReturnBounds = false; + this.HistoryDataCTRL.Size = new System.Drawing.Size(784, 362); + this.HistoryDataCTRL.StartTime = new System.DateTime(2015, 5, 25, 16, 46, 5, 399); + this.HistoryDataCTRL.TabIndex = 13; + // + // HistoryDataDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 362); + this.Controls.Add(this.HistoryDataCTRL); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "HistoryDataDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "History Data"; + this.ResumeLayout(false); + + } + + #endregion + + private HistoryDataListView HistoryDataCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.cs new file mode 100644 index 00000000..51ae9a39 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.cs @@ -0,0 +1,115 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using System.Data; +using System.Drawing; +using Opc.Ua; +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to read and update history for a variable. + /// + public partial class HistoryDataDlg : Form, ISessionForm + { + #region Constructors + /// + /// Creates an empty form. + /// + public HistoryDataDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Changes the session used. + /// + public void ChangeSession(Session session) + { + HistoryDataCTRL.ChangeSession(session); + } + + /// + /// Sets the variable shown in the dialog. + /// + public void SetVariable(NodeId variableId) + { + HistoryDataCTRL.ChangeNode(variableId); + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CancelBTN_Click(object sender, EventArgs e) + { + try + { + if (this.Modal) + { + DialogResult = DialogResult.Cancel; + } + else + { + Close(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.Designer.cs new file mode 100644 index 00000000..5bc1bbbb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.Designer.cs @@ -0,0 +1,992 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HistoryDataListView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.AddValueMI = new System.Windows.Forms.ToolStripMenuItem(); + this.EditValueMI = new System.Windows.Forms.ToolStripMenuItem(); + this.RemoveValueMI = new System.Windows.Forms.ToolStripMenuItem(); + this.InsertAnnotationMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ShowServerTimestampMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.SourceTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ServerTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StatusCodeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HistoryInfoCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.UpdateTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.UpdateTimeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.UserNameCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.UpdateResultCN = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LeftPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.PropertyCB = new System.Windows.Forms.ComboBox(); + this.PropertyLB = new System.Windows.Forms.Label(); + this.UseSimpleBoundsCK = new System.Windows.Forms.CheckBox(); + this.UseSimpleBoundsLB = new System.Windows.Forms.Label(); + this.SamplingIntervalUnitsLB = new System.Windows.Forms.Label(); + this.TimeStepUnitsLB = new System.Windows.Forms.Label(); + this.SamplingIntervalNP = new System.Windows.Forms.NumericUpDown(); + this.TimeStepNP = new System.Windows.Forms.NumericUpDown(); + this.SamplingIntervalLB = new System.Windows.Forms.Label(); + this.TimeStepLB = new System.Windows.Forms.Label(); + this.NodeIdBTN = new System.Windows.Forms.Button(); + this.NodeIdTB = new System.Windows.Forms.TextBox(); + this.StartTimeCK = new System.Windows.Forms.CheckBox(); + this.NodeIdLB = new System.Windows.Forms.Label(); + this.ReturnBoundsLB = new System.Windows.Forms.Label(); + this.ResampleIntervalLB = new System.Windows.Forms.Label(); + this.ReadTypeCB = new System.Windows.Forms.ComboBox(); + this.EndTimeLB = new System.Windows.Forms.Label(); + this.ProcessingIntervalNP = new System.Windows.Forms.NumericUpDown(); + this.ReadTypeLB = new System.Windows.Forms.Label(); + this.AggregateCB = new System.Windows.Forms.ComboBox(); + this.StartTimeLB = new System.Windows.Forms.Label(); + this.StartTimeDP = new System.Windows.Forms.DateTimePicker(); + this.EndTimeDP = new System.Windows.Forms.DateTimePicker(); + this.EndTimeCK = new System.Windows.Forms.CheckBox(); + this.AggregateLB = new System.Windows.Forms.Label(); + this.MaxReturnValuesLB = new System.Windows.Forms.Label(); + this.MaxReturnValuesNP = new System.Windows.Forms.NumericUpDown(); + this.MaxReturnValuesCK = new System.Windows.Forms.CheckBox(); + this.ReturnBoundsCK = new System.Windows.Forms.CheckBox(); + this.ResampleIntervalUnitsLB = new System.Windows.Forms.Label(); + this.StatusTB = new System.Windows.Forms.TextBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.StopBTN = new System.Windows.Forms.Button(); + this.NextBTN = new System.Windows.Forms.Button(); + this.TimeShiftBTN = new System.Windows.Forms.Button(); + this.GoBTN = new System.Windows.Forms.Button(); + this.DetectLimitsBTN = new System.Windows.Forms.Button(); + this.RightPN = new System.Windows.Forms.Panel(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.LeftPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SamplingIntervalNP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TimeStepNP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ProcessingIntervalNP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.MaxReturnValuesNP)).BeginInit(); + this.panel1.SuspendLayout(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.ImageScalingSize = new System.Drawing.Size(32, 32); + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.AddValueMI, + this.EditValueMI, + this.RemoveValueMI, + this.InsertAnnotationMI, + this.ShowServerTimestampMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(348, 194); + // + // AddValueMI + // + this.AddValueMI.Enabled = false; + this.AddValueMI.Name = "AddValueMI"; + this.AddValueMI.Size = new System.Drawing.Size(347, 38); + this.AddValueMI.Text = "Add..."; + // + // EditValueMI + // + this.EditValueMI.Enabled = false; + this.EditValueMI.Name = "EditValueMI"; + this.EditValueMI.Size = new System.Drawing.Size(347, 38); + this.EditValueMI.Text = "Edit..."; + this.EditValueMI.Click += new System.EventHandler(this.EditValueMI_Click); + // + // RemoveValueMI + // + this.RemoveValueMI.Enabled = false; + this.RemoveValueMI.Name = "RemoveValueMI"; + this.RemoveValueMI.Size = new System.Drawing.Size(347, 38); + this.RemoveValueMI.Text = "Remove"; + // + // InsertAnnotationMI + // + this.InsertAnnotationMI.Name = "InsertAnnotationMI"; + this.InsertAnnotationMI.Size = new System.Drawing.Size(347, 38); + this.InsertAnnotationMI.Text = "Insert Annotation..."; + this.InsertAnnotationMI.Click += new System.EventHandler(this.InsertAnnotationMI_Click); + // + // ShowServerTimestampMI + // + this.ShowServerTimestampMI.CheckOnClick = true; + this.ShowServerTimestampMI.Name = "ShowServerTimestampMI"; + this.ShowServerTimestampMI.Size = new System.Drawing.Size(347, 38); + this.ShowServerTimestampMI.Text = "Show Server Timestamp"; + this.ShowServerTimestampMI.CheckedChanged += new System.EventHandler(this.ShowServerTimestampMI_CheckedChanged); + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SourceTimestampCH, + this.ServerTimestampCH, + this.ValueCH, + this.StatusCodeCH, + this.HistoryInfoCH, + this.UpdateTypeCH, + this.UpdateTimeCH, + this.UserNameCH, + this.UpdateResultCN}); + this.ResultsDV.ContextMenuStrip = this.PopupMenu; + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersWidth = 82; + this.ResultsDV.Size = new System.Drawing.Size(1310, 1096); + this.ResultsDV.TabIndex = 0; + // + // SourceTimestampCH + // + this.SourceTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SourceTimestampCH.DataPropertyName = "SourceTimestamp"; + this.SourceTimestampCH.HeaderText = "SourceTimestamp"; + this.SourceTimestampCH.MinimumWidth = 10; + this.SourceTimestampCH.Name = "SourceTimestampCH"; + this.SourceTimestampCH.ReadOnly = true; + this.SourceTimestampCH.Width = 230; + // + // ServerTimestampCH + // + this.ServerTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ServerTimestampCH.DataPropertyName = "ServerTimestamp"; + this.ServerTimestampCH.HeaderText = "ServerTimestamp"; + this.ServerTimestampCH.MinimumWidth = 10; + this.ServerTimestampCH.Name = "ServerTimestampCH"; + this.ServerTimestampCH.ReadOnly = true; + this.ServerTimestampCH.Visible = false; + this.ServerTimestampCH.Width = 200; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.MinimumWidth = 10; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.ReadOnly = true; + // + // StatusCodeCH + // + this.StatusCodeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.StatusCodeCH.DataPropertyName = "StatusCode"; + this.StatusCodeCH.HeaderText = "StatusCode"; + this.StatusCodeCH.MinimumWidth = 10; + this.StatusCodeCH.Name = "StatusCodeCH"; + this.StatusCodeCH.ReadOnly = true; + this.StatusCodeCH.Width = 169; + // + // HistoryInfoCH + // + this.HistoryInfoCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.HistoryInfoCH.DataPropertyName = "HistoryInfo"; + this.HistoryInfoCH.HeaderText = "HistoryInfo"; + this.HistoryInfoCH.MinimumWidth = 10; + this.HistoryInfoCH.Name = "HistoryInfoCH"; + this.HistoryInfoCH.Width = 159; + // + // UpdateTypeCH + // + this.UpdateTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.UpdateTypeCH.DataPropertyName = "UpdateType"; + this.UpdateTypeCH.HeaderText = "UpdateType"; + this.UpdateTypeCH.MinimumWidth = 10; + this.UpdateTypeCH.Name = "UpdateTypeCH"; + this.UpdateTypeCH.ReadOnly = true; + this.UpdateTypeCH.Visible = false; + this.UpdateTypeCH.Width = 200; + // + // UpdateTimeCH + // + this.UpdateTimeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.UpdateTimeCH.DataPropertyName = "UpdateTime"; + this.UpdateTimeCH.HeaderText = "UpdateTime"; + this.UpdateTimeCH.MinimumWidth = 10; + this.UpdateTimeCH.Name = "UpdateTimeCH"; + this.UpdateTimeCH.ReadOnly = true; + this.UpdateTimeCH.Visible = false; + this.UpdateTimeCH.Width = 200; + // + // UserNameCH + // + this.UserNameCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.UserNameCH.DataPropertyName = "UserName"; + this.UserNameCH.HeaderText = "UserName"; + this.UserNameCH.MinimumWidth = 10; + this.UserNameCH.Name = "UserNameCH"; + this.UserNameCH.ReadOnly = true; + this.UserNameCH.Visible = false; + this.UserNameCH.Width = 200; + // + // UpdateResultCN + // + this.UpdateResultCN.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.UpdateResultCN.DataPropertyName = "UpdateResult"; + this.UpdateResultCN.HeaderText = "Update Result"; + this.UpdateResultCN.MinimumWidth = 10; + this.UpdateResultCN.Name = "UpdateResultCN"; + this.UpdateResultCN.ReadOnly = true; + this.UpdateResultCN.Visible = false; + this.UpdateResultCN.Width = 200; + // + // LeftPN + // + this.LeftPN.Controls.Add(this.ControlsPN); + this.LeftPN.Dock = System.Windows.Forms.DockStyle.Left; + this.LeftPN.Location = new System.Drawing.Point(0, 0); + this.LeftPN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.LeftPN.Name = "LeftPN"; + this.LeftPN.Size = new System.Drawing.Size(612, 1096); + this.LeftPN.TabIndex = 2; + // + // ControlsPN + // + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 230F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.PropertyCB, 1, 1); + this.ControlsPN.Controls.Add(this.PropertyLB, 0, 1); + this.ControlsPN.Controls.Add(this.UseSimpleBoundsCK, 1, 7); + this.ControlsPN.Controls.Add(this.UseSimpleBoundsLB, 0, 7); + this.ControlsPN.Controls.Add(this.SamplingIntervalUnitsLB, 2, 3); + this.ControlsPN.Controls.Add(this.TimeStepUnitsLB, 2, 11); + this.ControlsPN.Controls.Add(this.SamplingIntervalNP, 1, 3); + this.ControlsPN.Controls.Add(this.TimeStepNP, 1, 11); + this.ControlsPN.Controls.Add(this.SamplingIntervalLB, 0, 3); + this.ControlsPN.Controls.Add(this.TimeStepLB, 0, 11); + this.ControlsPN.Controls.Add(this.NodeIdBTN, 2, 0); + this.ControlsPN.Controls.Add(this.NodeIdTB, 1, 0); + this.ControlsPN.Controls.Add(this.StartTimeCK, 2, 4); + this.ControlsPN.Controls.Add(this.NodeIdLB, 0, 0); + this.ControlsPN.Controls.Add(this.ReturnBoundsLB, 0, 8); + this.ControlsPN.Controls.Add(this.ResampleIntervalLB, 0, 10); + this.ControlsPN.Controls.Add(this.ReadTypeCB, 1, 2); + this.ControlsPN.Controls.Add(this.EndTimeLB, 0, 5); + this.ControlsPN.Controls.Add(this.ProcessingIntervalNP, 1, 10); + this.ControlsPN.Controls.Add(this.ReadTypeLB, 0, 2); + this.ControlsPN.Controls.Add(this.AggregateCB, 1, 9); + this.ControlsPN.Controls.Add(this.StartTimeLB, 0, 4); + this.ControlsPN.Controls.Add(this.StartTimeDP, 1, 4); + this.ControlsPN.Controls.Add(this.EndTimeDP, 1, 5); + this.ControlsPN.Controls.Add(this.EndTimeCK, 2, 5); + this.ControlsPN.Controls.Add(this.AggregateLB, 0, 9); + this.ControlsPN.Controls.Add(this.MaxReturnValuesLB, 0, 6); + this.ControlsPN.Controls.Add(this.MaxReturnValuesNP, 1, 6); + this.ControlsPN.Controls.Add(this.MaxReturnValuesCK, 2, 6); + this.ControlsPN.Controls.Add(this.ReturnBoundsCK, 1, 8); + this.ControlsPN.Controls.Add(this.ResampleIntervalUnitsLB, 2, 10); + this.ControlsPN.Controls.Add(this.StatusTB, 0, 13); + this.ControlsPN.Controls.Add(this.panel1, 0, 12); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Top; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 14; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 110F)); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 38F)); + this.ControlsPN.Size = new System.Drawing.Size(612, 748); + this.ControlsPN.TabIndex = 0; + // + // PropertyCB + // + this.PropertyCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.PropertyCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.PropertyCB.FormattingEnabled = true; + this.PropertyCB.Location = new System.Drawing.Point(236, 78); + this.PropertyCB.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.PropertyCB.Name = "PropertyCB"; + this.PropertyCB.Size = new System.Drawing.Size(272, 33); + this.PropertyCB.TabIndex = 6; + // + // PropertyLB + // + this.PropertyLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.PropertyLB.AutoSize = true; + this.PropertyLB.Location = new System.Drawing.Point(6, 72); + this.PropertyLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.PropertyLB.Name = "PropertyLB"; + this.PropertyLB.Size = new System.Drawing.Size(155, 45); + this.PropertyLB.TabIndex = 5; + this.PropertyLB.Text = "Property Name"; + this.PropertyLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UseSimpleBoundsCK + // + this.UseSimpleBoundsCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.UseSimpleBoundsCK.AutoSize = true; + this.ControlsPN.SetColumnSpan(this.UseSimpleBoundsCK, 2); + this.UseSimpleBoundsCK.Location = new System.Drawing.Point(236, 347); + this.UseSimpleBoundsCK.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.UseSimpleBoundsCK.Name = "UseSimpleBoundsCK"; + this.UseSimpleBoundsCK.Size = new System.Drawing.Size(28, 27); + this.UseSimpleBoundsCK.TabIndex = 22; + this.UseSimpleBoundsCK.UseVisualStyleBackColor = true; + this.UseSimpleBoundsCK.Visible = false; + // + // UseSimpleBoundsLB + // + this.UseSimpleBoundsLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.UseSimpleBoundsLB.AutoSize = true; + this.UseSimpleBoundsLB.Location = new System.Drawing.Point(6, 341); + this.UseSimpleBoundsLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.UseSimpleBoundsLB.Name = "UseSimpleBoundsLB"; + this.UseSimpleBoundsLB.Size = new System.Drawing.Size(200, 39); + this.UseSimpleBoundsLB.TabIndex = 21; + this.UseSimpleBoundsLB.Text = "Use Simple Bounds"; + this.UseSimpleBoundsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.UseSimpleBoundsLB.Visible = false; + // + // SamplingIntervalUnitsLB + // + this.SamplingIntervalUnitsLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SamplingIntervalUnitsLB.AutoSize = true; + this.SamplingIntervalUnitsLB.Location = new System.Drawing.Point(524, 162); + this.SamplingIntervalUnitsLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.SamplingIntervalUnitsLB.Name = "SamplingIntervalUnitsLB"; + this.SamplingIntervalUnitsLB.Size = new System.Drawing.Size(40, 43); + this.SamplingIntervalUnitsLB.TabIndex = 11; + this.SamplingIntervalUnitsLB.Text = "ms"; + this.SamplingIntervalUnitsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TimeStepUnitsLB + // + this.TimeStepUnitsLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeStepUnitsLB.AutoSize = true; + this.TimeStepUnitsLB.Location = new System.Drawing.Point(524, 507); + this.TimeStepUnitsLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.TimeStepUnitsLB.Name = "TimeStepUnitsLB"; + this.TimeStepUnitsLB.Size = new System.Drawing.Size(40, 43); + this.TimeStepUnitsLB.TabIndex = 32; + this.TimeStepUnitsLB.Text = "ms"; + this.TimeStepUnitsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SamplingIntervalNP + // + this.SamplingIntervalNP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SamplingIntervalNP.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.SamplingIntervalNP.Location = new System.Drawing.Point(236, 168); + this.SamplingIntervalNP.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.SamplingIntervalNP.Maximum = new decimal(new int[] { + 1000000000, + 0, + 0, + 0}); + this.SamplingIntervalNP.Name = "SamplingIntervalNP"; + this.SamplingIntervalNP.Size = new System.Drawing.Size(276, 31); + this.SamplingIntervalNP.TabIndex = 10; + // + // TimeStepNP + // + this.TimeStepNP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeStepNP.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.TimeStepNP.Location = new System.Drawing.Point(236, 513); + this.TimeStepNP.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.TimeStepNP.Maximum = new decimal(new int[] { + 1000000000, + 0, + 0, + 0}); + this.TimeStepNP.Name = "TimeStepNP"; + this.TimeStepNP.Size = new System.Drawing.Size(276, 31); + this.TimeStepNP.TabIndex = 31; + this.TimeStepNP.Value = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + // + // SamplingIntervalLB + // + this.SamplingIntervalLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SamplingIntervalLB.AutoSize = true; + this.SamplingIntervalLB.Location = new System.Drawing.Point(6, 162); + this.SamplingIntervalLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.SamplingIntervalLB.Name = "SamplingIntervalLB"; + this.SamplingIntervalLB.Size = new System.Drawing.Size(177, 43); + this.SamplingIntervalLB.TabIndex = 9; + this.SamplingIntervalLB.Text = "Sampling Interval"; + this.SamplingIntervalLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TimeStepLB + // + this.TimeStepLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeStepLB.AutoSize = true; + this.TimeStepLB.Location = new System.Drawing.Point(6, 507); + this.TimeStepLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.TimeStepLB.Name = "TimeStepLB"; + this.TimeStepLB.Size = new System.Drawing.Size(109, 43); + this.TimeStepLB.TabIndex = 30; + this.TimeStepLB.Text = "Time Step"; + this.TimeStepLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NodeIdBTN + // + this.NodeIdBTN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeIdBTN.Location = new System.Drawing.Point(524, 6); + this.NodeIdBTN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.NodeIdBTN.Name = "NodeIdBTN"; + this.NodeIdBTN.Size = new System.Drawing.Size(48, 60); + this.NodeIdBTN.TabIndex = 4; + this.NodeIdBTN.Text = "..."; + this.NodeIdBTN.UseVisualStyleBackColor = true; + this.NodeIdBTN.Click += new System.EventHandler(this.NodeIdBTN_Click); + // + // NodeIdTB + // + this.NodeIdTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeIdTB.Location = new System.Drawing.Point(236, 6); + this.NodeIdTB.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.NodeIdTB.Name = "NodeIdTB"; + this.NodeIdTB.Size = new System.Drawing.Size(272, 31); + this.NodeIdTB.TabIndex = 3; + // + // StartTimeCK + // + this.StartTimeCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StartTimeCK.AutoSize = true; + this.StartTimeCK.Location = new System.Drawing.Point(524, 211); + this.StartTimeCK.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.StartTimeCK.Name = "StartTimeCK"; + this.StartTimeCK.Size = new System.Drawing.Size(28, 31); + this.StartTimeCK.TabIndex = 14; + this.StartTimeCK.UseVisualStyleBackColor = true; + this.StartTimeCK.CheckedChanged += new System.EventHandler(this.StartTimeCK_CheckedChanged); + // + // NodeIdLB + // + this.NodeIdLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeIdLB.AutoSize = true; + this.NodeIdLB.Location = new System.Drawing.Point(6, 0); + this.NodeIdLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.NodeIdLB.Name = "NodeIdLB"; + this.NodeIdLB.Size = new System.Drawing.Size(91, 72); + this.NodeIdLB.TabIndex = 2; + this.NodeIdLB.Text = "Variable"; + this.NodeIdLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ReturnBoundsLB + // + this.ReturnBoundsLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReturnBoundsLB.AutoSize = true; + this.ReturnBoundsLB.Location = new System.Drawing.Point(6, 380); + this.ReturnBoundsLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.ReturnBoundsLB.Name = "ReturnBoundsLB"; + this.ReturnBoundsLB.Size = new System.Drawing.Size(155, 39); + this.ReturnBoundsLB.TabIndex = 23; + this.ReturnBoundsLB.Text = "Return Bounds"; + this.ReturnBoundsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.ReturnBoundsLB.Visible = false; + // + // ResampleIntervalLB + // + this.ResampleIntervalLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ResampleIntervalLB.AutoSize = true; + this.ResampleIntervalLB.Location = new System.Drawing.Point(6, 464); + this.ResampleIntervalLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.ResampleIntervalLB.Name = "ResampleIntervalLB"; + this.ResampleIntervalLB.Size = new System.Drawing.Size(195, 43); + this.ResampleIntervalLB.TabIndex = 27; + this.ResampleIntervalLB.Text = "Processing Interval"; + this.ResampleIntervalLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ReadTypeCB + // + this.ReadTypeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReadTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ReadTypeCB.FormattingEnabled = true; + this.ReadTypeCB.Location = new System.Drawing.Point(236, 123); + this.ReadTypeCB.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.ReadTypeCB.Name = "ReadTypeCB"; + this.ReadTypeCB.Size = new System.Drawing.Size(272, 33); + this.ReadTypeCB.TabIndex = 8; + this.ReadTypeCB.SelectedIndexChanged += new System.EventHandler(this.ReadTypeCB_SelectedIndexChanged); + // + // EndTimeLB + // + this.EndTimeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EndTimeLB.AutoSize = true; + this.EndTimeLB.Location = new System.Drawing.Point(6, 248); + this.EndTimeLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.EndTimeLB.Name = "EndTimeLB"; + this.EndTimeLB.Size = new System.Drawing.Size(103, 43); + this.EndTimeLB.TabIndex = 15; + this.EndTimeLB.Text = "End Time"; + this.EndTimeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ProcessingIntervalNP + // + this.ProcessingIntervalNP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ProcessingIntervalNP.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.ProcessingIntervalNP.Location = new System.Drawing.Point(236, 470); + this.ProcessingIntervalNP.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.ProcessingIntervalNP.Maximum = new decimal(new int[] { + 1000000000, + 0, + 0, + 0}); + this.ProcessingIntervalNP.Name = "ProcessingIntervalNP"; + this.ProcessingIntervalNP.Size = new System.Drawing.Size(276, 31); + this.ProcessingIntervalNP.TabIndex = 28; + this.ProcessingIntervalNP.Value = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + // + // ReadTypeLB + // + this.ReadTypeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReadTypeLB.AutoSize = true; + this.ReadTypeLB.Location = new System.Drawing.Point(6, 117); + this.ReadTypeLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.ReadTypeLB.Name = "ReadTypeLB"; + this.ReadTypeLB.Size = new System.Drawing.Size(117, 45); + this.ReadTypeLB.TabIndex = 7; + this.ReadTypeLB.Text = "Read Type"; + this.ReadTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // AggregateCB + // + this.AggregateCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AggregateCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AggregateCB.FormattingEnabled = true; + this.AggregateCB.Location = new System.Drawing.Point(236, 425); + this.AggregateCB.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.AggregateCB.Name = "AggregateCB"; + this.AggregateCB.Size = new System.Drawing.Size(272, 33); + this.AggregateCB.TabIndex = 26; + // + // StartTimeLB + // + this.StartTimeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StartTimeLB.AutoSize = true; + this.StartTimeLB.Location = new System.Drawing.Point(6, 205); + this.StartTimeLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.StartTimeLB.Name = "StartTimeLB"; + this.StartTimeLB.Size = new System.Drawing.Size(110, 43); + this.StartTimeLB.TabIndex = 12; + this.StartTimeLB.Text = "Start Time"; + this.StartTimeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StartTimeDP + // + this.StartTimeDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StartTimeDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.StartTimeDP.Enabled = false; + this.StartTimeDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.StartTimeDP.Location = new System.Drawing.Point(236, 211); + this.StartTimeDP.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.StartTimeDP.Name = "StartTimeDP"; + this.StartTimeDP.Size = new System.Drawing.Size(272, 31); + this.StartTimeDP.TabIndex = 13; + this.StartTimeDP.ValueChanged += new System.EventHandler(this.StartTimeDP_ValueChanged); + // + // EndTimeDP + // + this.EndTimeDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EndTimeDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.EndTimeDP.Enabled = false; + this.EndTimeDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.EndTimeDP.Location = new System.Drawing.Point(236, 254); + this.EndTimeDP.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.EndTimeDP.Name = "EndTimeDP"; + this.EndTimeDP.Size = new System.Drawing.Size(272, 31); + this.EndTimeDP.TabIndex = 16; + this.EndTimeDP.ValueChanged += new System.EventHandler(this.StartTimeDP_ValueChanged); + // + // EndTimeCK + // + this.EndTimeCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EndTimeCK.AutoSize = true; + this.EndTimeCK.Location = new System.Drawing.Point(524, 254); + this.EndTimeCK.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.EndTimeCK.Name = "EndTimeCK"; + this.EndTimeCK.Size = new System.Drawing.Size(28, 31); + this.EndTimeCK.TabIndex = 17; + this.EndTimeCK.UseVisualStyleBackColor = true; + this.EndTimeCK.CheckedChanged += new System.EventHandler(this.EndTimeCK_CheckedChanged); + // + // AggregateLB + // + this.AggregateLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.AggregateLB.AutoSize = true; + this.AggregateLB.Location = new System.Drawing.Point(6, 419); + this.AggregateLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.AggregateLB.Name = "AggregateLB"; + this.AggregateLB.Size = new System.Drawing.Size(111, 45); + this.AggregateLB.TabIndex = 25; + this.AggregateLB.Text = "Aggregate"; + this.AggregateLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MaxReturnValuesLB + // + this.MaxReturnValuesLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.MaxReturnValuesLB.AutoSize = true; + this.MaxReturnValuesLB.Location = new System.Drawing.Point(6, 291); + this.MaxReturnValuesLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.MaxReturnValuesLB.Name = "MaxReturnValuesLB"; + this.MaxReturnValuesLB.Size = new System.Drawing.Size(131, 50); + this.MaxReturnValuesLB.TabIndex = 18; + this.MaxReturnValuesLB.Text = "Max Values Returned"; + this.MaxReturnValuesLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MaxReturnValuesNP + // + this.MaxReturnValuesNP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.MaxReturnValuesNP.Enabled = false; + this.MaxReturnValuesNP.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.MaxReturnValuesNP.Location = new System.Drawing.Point(236, 297); + this.MaxReturnValuesNP.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.MaxReturnValuesNP.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.MaxReturnValuesNP.Name = "MaxReturnValuesNP"; + this.MaxReturnValuesNP.Size = new System.Drawing.Size(276, 31); + this.MaxReturnValuesNP.TabIndex = 19; + // + // MaxReturnValuesCK + // + this.MaxReturnValuesCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.MaxReturnValuesCK.AutoSize = true; + this.MaxReturnValuesCK.Location = new System.Drawing.Point(524, 297); + this.MaxReturnValuesCK.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.MaxReturnValuesCK.Name = "MaxReturnValuesCK"; + this.MaxReturnValuesCK.Size = new System.Drawing.Size(28, 38); + this.MaxReturnValuesCK.TabIndex = 20; + this.MaxReturnValuesCK.UseVisualStyleBackColor = true; + this.MaxReturnValuesCK.CheckedChanged += new System.EventHandler(this.MaxReturnValuesCK_CheckedChanged); + // + // ReturnBoundsCK + // + this.ReturnBoundsCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReturnBoundsCK.AutoSize = true; + this.ControlsPN.SetColumnSpan(this.ReturnBoundsCK, 2); + this.ReturnBoundsCK.Location = new System.Drawing.Point(236, 386); + this.ReturnBoundsCK.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.ReturnBoundsCK.Name = "ReturnBoundsCK"; + this.ReturnBoundsCK.Size = new System.Drawing.Size(28, 27); + this.ReturnBoundsCK.TabIndex = 24; + this.ReturnBoundsCK.UseVisualStyleBackColor = true; + this.ReturnBoundsCK.Visible = false; + // + // ResampleIntervalUnitsLB + // + this.ResampleIntervalUnitsLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ResampleIntervalUnitsLB.AutoSize = true; + this.ResampleIntervalUnitsLB.Location = new System.Drawing.Point(524, 464); + this.ResampleIntervalUnitsLB.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.ResampleIntervalUnitsLB.Name = "ResampleIntervalUnitsLB"; + this.ResampleIntervalUnitsLB.Size = new System.Drawing.Size(40, 43); + this.ResampleIntervalUnitsLB.TabIndex = 29; + this.ResampleIntervalUnitsLB.Text = "ms"; + this.ResampleIntervalUnitsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StatusTB + // + this.StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ControlsPN.SetColumnSpan(this.StatusTB, 3); + this.StatusTB.Location = new System.Drawing.Point(6, 666); + this.StatusTB.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.StatusTB.Multiline = true; + this.StatusTB.Name = "StatusTB"; + this.StatusTB.ReadOnly = true; + this.StatusTB.Size = new System.Drawing.Size(600, 76); + this.StatusTB.TabIndex = 34; + // + // panel1 + // + this.ControlsPN.SetColumnSpan(this.panel1, 3); + this.panel1.Controls.Add(this.StopBTN); + this.panel1.Controls.Add(this.NextBTN); + this.panel1.Controls.Add(this.TimeShiftBTN); + this.panel1.Controls.Add(this.GoBTN); + this.panel1.Controls.Add(this.DetectLimitsBTN); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(6, 556); + this.panel1.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(600, 98); + this.panel1.TabIndex = 33; + // + // StopBTN + // + this.StopBTN.Location = new System.Drawing.Point(416, 27); + this.StopBTN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.StopBTN.Name = "StopBTN"; + this.StopBTN.Size = new System.Drawing.Size(150, 44); + this.StopBTN.TabIndex = 2; + this.StopBTN.Text = "Stop"; + this.StopBTN.UseVisualStyleBackColor = true; + this.StopBTN.Click += new System.EventHandler(this.StopBTN_Click); + // + // NextBTN + // + this.NextBTN.Location = new System.Drawing.Point(226, 27); + this.NextBTN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.NextBTN.Name = "NextBTN"; + this.NextBTN.Size = new System.Drawing.Size(150, 44); + this.NextBTN.TabIndex = 1; + this.NextBTN.Text = "Next"; + this.NextBTN.UseVisualStyleBackColor = true; + this.NextBTN.Click += new System.EventHandler(this.NextBTN_Click); + // + // TimeShiftBTN + // + this.TimeShiftBTN.Location = new System.Drawing.Point(42, 27); + this.TimeShiftBTN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.TimeShiftBTN.Name = "TimeShiftBTN"; + this.TimeShiftBTN.Size = new System.Drawing.Size(150, 44); + this.TimeShiftBTN.TabIndex = 0; + this.TimeShiftBTN.Text = "Time Shift"; + this.TimeShiftBTN.UseVisualStyleBackColor = true; + this.TimeShiftBTN.Visible = false; + this.TimeShiftBTN.Click += new System.EventHandler(this.TimeShiftBTN_Click); + // + // GoBTN + // + this.GoBTN.Location = new System.Drawing.Point(226, 27); + this.GoBTN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.GoBTN.Name = "GoBTN"; + this.GoBTN.Size = new System.Drawing.Size(150, 44); + this.GoBTN.TabIndex = 37; + this.GoBTN.Text = "Go"; + this.GoBTN.UseVisualStyleBackColor = true; + this.GoBTN.Click += new System.EventHandler(this.GoBTN_Click); + // + // DetectLimitsBTN + // + this.DetectLimitsBTN.Location = new System.Drawing.Point(42, 27); + this.DetectLimitsBTN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.DetectLimitsBTN.Name = "DetectLimitsBTN"; + this.DetectLimitsBTN.Size = new System.Drawing.Size(150, 44); + this.DetectLimitsBTN.TabIndex = 41; + this.DetectLimitsBTN.Text = "Auto Detect"; + this.DetectLimitsBTN.UseVisualStyleBackColor = true; + this.DetectLimitsBTN.Click += new System.EventHandler(this.DetectLimitsBTN_Click); + // + // RightPN + // + this.RightPN.Controls.Add(this.ResultsDV); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(612, 0); + this.RightPN.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(1310, 1096); + this.RightPN.TabIndex = 3; + // + // HistoryDataListView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Controls.Add(this.LeftPN); + this.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.Name = "HistoryDataListView"; + this.Size = new System.Drawing.Size(1922, 1096); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.LeftPN.ResumeLayout(false); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SamplingIntervalNP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TimeStepNP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ProcessingIntervalNP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.MaxReturnValuesNP)).EndInit(); + this.panel1.ResumeLayout(false); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.Panel LeftPN; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ToolStripMenuItem RemoveValueMI; + private System.Windows.Forms.ToolStripMenuItem AddValueMI; + private System.Windows.Forms.ToolStripMenuItem InsertAnnotationMI; + private System.Windows.Forms.ToolStripMenuItem EditValueMI; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.ComboBox PropertyCB; + private System.Windows.Forms.Label PropertyLB; + private System.Windows.Forms.CheckBox UseSimpleBoundsCK; + private System.Windows.Forms.Label UseSimpleBoundsLB; + private System.Windows.Forms.Label SamplingIntervalUnitsLB; + private System.Windows.Forms.Label TimeStepUnitsLB; + private System.Windows.Forms.NumericUpDown SamplingIntervalNP; + private System.Windows.Forms.NumericUpDown TimeStepNP; + private System.Windows.Forms.Label SamplingIntervalLB; + private System.Windows.Forms.Label TimeStepLB; + private System.Windows.Forms.Button NodeIdBTN; + private System.Windows.Forms.TextBox NodeIdTB; + private System.Windows.Forms.CheckBox StartTimeCK; + private System.Windows.Forms.Label NodeIdLB; + private System.Windows.Forms.Label ReturnBoundsLB; + private System.Windows.Forms.Label ResampleIntervalLB; + private System.Windows.Forms.ComboBox ReadTypeCB; + private System.Windows.Forms.Label EndTimeLB; + private System.Windows.Forms.NumericUpDown ProcessingIntervalNP; + private System.Windows.Forms.Label ReadTypeLB; + private System.Windows.Forms.ComboBox AggregateCB; + private System.Windows.Forms.Label StartTimeLB; + private System.Windows.Forms.DateTimePicker StartTimeDP; + private System.Windows.Forms.DateTimePicker EndTimeDP; + private System.Windows.Forms.CheckBox EndTimeCK; + private System.Windows.Forms.Label AggregateLB; + private System.Windows.Forms.Label MaxReturnValuesLB; + private System.Windows.Forms.NumericUpDown MaxReturnValuesNP; + private System.Windows.Forms.CheckBox MaxReturnValuesCK; + private System.Windows.Forms.CheckBox ReturnBoundsCK; + private System.Windows.Forms.Label ResampleIntervalUnitsLB; + private System.Windows.Forms.TextBox StatusTB; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button StopBTN; + private System.Windows.Forms.Button NextBTN; + private System.Windows.Forms.Button TimeShiftBTN; + private System.Windows.Forms.Button GoBTN; + private System.Windows.Forms.Button DetectLimitsBTN; + private System.Windows.Forms.ToolStripMenuItem ShowServerTimestampMI; + private System.Windows.Forms.DataGridViewTextBoxColumn SourceTimestampCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ServerTimestampCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + private System.Windows.Forms.DataGridViewTextBoxColumn StatusCodeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn HistoryInfoCH; + private System.Windows.Forms.DataGridViewTextBoxColumn UpdateTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn UpdateTimeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn UserNameCH; + private System.Windows.Forms.DataGridViewTextBoxColumn UpdateResultCN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.cs new file mode 100644 index 00000000..63e920eb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.cs @@ -0,0 +1,2352 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class HistoryDataListView : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public HistoryDataListView() + { + InitializeComponent(); + ResultsDV.AutoGenerateColumns = false; + LeftPN.Enabled = false; + + ReadTypeCB.Items.Add(HistoryReadType.Raw); + ReadTypeCB.Items.Add(HistoryReadType.Processed); + ReadTypeCB.Items.Add(HistoryReadType.Modified); + ReadTypeCB.Items.Add(HistoryReadType.AtTime); + ReadTypeCB.Items.Add(HistoryReadType.Subscribe); + ReadTypeCB.Items.Add(HistoryReadType.Insert); + ReadTypeCB.Items.Add(HistoryReadType.InsertReplace); + ReadTypeCB.Items.Add(HistoryReadType.Replace); + ReadTypeCB.Items.Add(HistoryReadType.Remove); + ReadTypeCB.Items.Add(HistoryReadType.DeleteRaw); + ReadTypeCB.Items.Add(HistoryReadType.DeleteModified); + ReadTypeCB.Items.Add(HistoryReadType.DeleteAtTime); + ReadTypeCB.SelectedIndex = 0; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Results"); + + m_dataset.Tables[0].Columns.Add("Index", typeof(int)); + m_dataset.Tables[0].Columns.Add("SourceTimestamp", typeof(string)); + m_dataset.Tables[0].Columns.Add("ServerTimestamp", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + m_dataset.Tables[0].Columns.Add("StatusCode", typeof(StatusCode)); + m_dataset.Tables[0].Columns.Add("HistoryInfo", typeof(string)); + m_dataset.Tables[0].Columns.Add("UpdateType", typeof(HistoryUpdateType)); + m_dataset.Tables[0].Columns.Add("UpdateTime", typeof(string)); + m_dataset.Tables[0].Columns.Add("UserName", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataValue", typeof(DataValue)); + m_dataset.Tables[0].Columns.Add("UpdateResult", typeof(StatusCode)); + + m_dataset.Tables[0].DefaultView.Sort = "Index"; + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region HistoryReadType Class + /// + /// The type history read operation. + /// + public enum HistoryReadType + { + /// + /// Subscribe to data changes. + /// + Subscribe, + + /// + /// Read raw data. + /// + Raw, + + /// + /// Read modified data. + /// + Modified, + + /// + /// Read data at the specified times. + /// + AtTime, + + /// + /// Read processed data. + /// + Processed, + + /// + /// Insert data. + /// + Insert, + + /// + /// Insert or replace data. + /// + InsertReplace, + + /// + /// Replace data. + /// + Replace, + + /// + /// Remove data. + /// + Remove, + + /// + /// Delete raw data. + /// + DeleteRaw, + + /// + /// Delete modified data. + /// + DeleteModified, + + /// + /// Delete data at the specified times. + /// + DeleteAtTime + } + #endregion + + #region AvailableAggregate Class + /// + /// An aggregate supported by server. + /// + private class AvailableAggregate + { + public NodeId NodeId { get; set; } + public string DisplayName { get; set; } + + public override string ToString() + { + return DisplayName; + } + } + #endregion + + #region AvailableSession Class + /// + /// A session available in the conntrol. + /// + private class AvailableSession + { + public Session Session { get; set; } + + public override string ToString() + { + return Session.SessionName; + } + } + #endregion + + #region PropertyWithHistory Class + /// + /// Stores the metadata about a property with history to read or update. + /// + private class PropertyWithHistory + { + public PropertyWithHistory() + { + } + + public PropertyWithHistory(ReferenceDescription reference, byte accessLevel) + { + DisplayText = reference.ToString(); + NodeId = (NodeId)reference.NodeId; + BrowseName = reference.BrowseName; + AccessLevel = accessLevel; + } + + public override string ToString() + { + return DisplayText; + } + + public string DisplayText; + public NodeId NodeId; + public QualifiedName BrowseName; + public byte AccessLevel; + } + #endregion + + #region Private Fields + private Session m_session; + private Subscription m_subscription; + private MonitoredItem m_monitoredItem; + private NodeId m_nodeId; + private DataSet m_dataset; + private int m_nextId; + private bool m_isSubscribed; + private HistoryReadDetails m_details; + private HistoryReadValueId m_nodeToContinue; + private bool m_timesChanged; + private HistoricalDataConfigurationState m_configuration; + private List m_properties; + #endregion + + #region Public Members + /// + /// The node id to use. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public NodeId NodeId + { + get + { + return m_nodeId; + } + + set + { + m_nodeId = value; + + if (m_session != null) + { + NodeIdTB.Text = m_session.NodeCache.GetDisplayText(m_nodeId); + } + else + { + if (NodeId.IsNull(m_nodeId)) + { + NodeIdTB.Text = String.Empty; + } + else + { + NodeIdTB.Text = m_nodeId.ToString(); + } + } + } + } + + /// + /// The type of read operation. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public HistoryReadType ReadType + { + get { return (HistoryReadType)ReadTypeCB.SelectedItem; } + set { ReadTypeCB.SelectedItem = value; } + } + + /// + /// The start time for the query. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public DateTime StartTime + { + get + { + if (StartTimeCK.Checked) + { + return DateTime.MinValue; + } + + return StartTimeDP.Value; + } + + set + { + if (value < Utils.TimeBase) + { + StartTimeCK.Checked = false; + return; + } + + if (value.Kind == DateTimeKind.Local) + { + value = value.ToUniversalTime(); + } + + StartTimeCK.Checked = true; + StartTimeDP.Value = value; + } + } + + /// + /// The end time for the query. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public DateTime EndTime + { + get + { + if (EndTimeCK.Checked) + { + return DateTime.MinValue; + } + + return EndTimeDP.Value; + } + + set + { + if (value < Utils.TimeBase) + { + EndTimeCK.Checked = false; + return; + } + + if (value.Kind == DateTimeKind.Local) + { + value = value.ToUniversalTime(); + } + + EndTimeCK.Checked = true; + EndTimeDP.Value = value; + } + } + + /// + /// THe maximum number of values to return. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public uint MaxReturnValues + { + get + { + if (MaxReturnValuesCK.Checked) + { + return 0; + } + + return (uint)MaxReturnValuesNP.Value; + } + + set + { + MaxReturnValuesCK.Checked = value != 0; + MaxReturnValuesNP.Value = value; + } + } + + /// + /// If true the bounds are returned in the query. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public bool ReturnBounds + { + get + { + return ReturnBoundsCK.Checked; + } + + set + { + ReturnBoundsCK.Checked = value; + } + } + + /// + /// The aggregate to calculate. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public NodeId Aggregate + { + get + { + AvailableAggregate aggregate = AggregateCB.SelectedItem as AvailableAggregate; + + if (aggregate == null) + { + return NodeId.Null; + } + + return aggregate.NodeId; + } + + set + { + if (NodeId.IsNull(value)) + { + AggregateCB.SelectedIndex = -1; + return; + } + + foreach (AvailableAggregate aggregate in AggregateCB.Items) + { + if (aggregate.NodeId == value) + { + AggregateCB.SelectedItem = value; + return; + + } + } + + throw new ArgumentException("Aggregate does match one of the available aggregates."); + } + } + + /// + /// The processing interval to use. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public double ProcessingInterval + { + get { return (double)ProcessingIntervalNP.Value; } + set { ProcessingIntervalNP.Value = (decimal)value; } + } + + /// + /// Changes the session. + /// + public void ChangeSession(Session session) + { + if (Object.ReferenceEquals(session, m_session)) + { + return; + } + + if (m_session != null) + { + DeleteSubscription(); + m_session = null; + } + + if (session == null) + { + return; + } + + m_session = session; + m_dataset.Clear(); + LeftPN.Enabled = m_session != null; + + if (m_session != null) + { + AggregateCB.Items.Clear(); + + ILocalNode node = m_session.NodeCache.Find(ObjectIds.Server_ServerCapabilities_AggregateFunctions) as ILocalNode; + + if (node != null) + { + foreach (IReference reference in node.References.Find(ReferenceTypeIds.HierarchicalReferences, false, true, m_session.TypeTree)) + { + ILocalNode aggregate = m_session.NodeCache.Find(reference.TargetId) as ILocalNode; + + if (aggregate != null && aggregate.TypeDefinitionId == ObjectTypeIds.AggregateFunctionType) + { + AvailableAggregate item = new AvailableAggregate(); + item.NodeId = aggregate.NodeId; + item.DisplayName = m_session.NodeCache.GetDisplayText(aggregate); + AggregateCB.Items.Add(item); + } + } + + if (AggregateCB.Items.Count == 0) + { + AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Interpolative, DisplayName = BrowseNames.AggregateFunction_Interpolative }); + AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Average, DisplayName = BrowseNames.AggregateFunction_Average }); + AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_TimeAverage, DisplayName = BrowseNames.AggregateFunction_TimeAverage }); + AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Total, DisplayName = BrowseNames.AggregateFunction_Total }); + AggregateCB.Items.Add(new AvailableAggregate() { NodeId = ObjectIds.AggregateFunction_Count, DisplayName = BrowseNames.AggregateFunction_Count }); + } + + if (AggregateCB.Items.Count > 0) + { + AggregateCB.SelectedIndex = 0; + } + } + + SubscriptionStateChanged(); + } + } + + /// + /// Updates the control after the session has reconnected. + /// + public void SessionReconnected(Session session) + { + m_session = session; + + if (m_session != null) + { + foreach (Subscription subscription in m_session.Subscriptions) + { + if (Object.ReferenceEquals(subscription.Handle, this)) + { + m_subscription = subscription; + + foreach (MonitoredItem monitoredItem in subscription.MonitoredItems) + { + m_monitoredItem = monitoredItem; + break; + } + + break; + } + } + } + } + + /// + /// Changes the node monitored by the control. + /// + public void ChangeNode(NodeId nodeId) + { + m_nodeId = nodeId; + m_configuration = null; + m_properties = null; + PropertyCB.Items.Clear(); + m_dataset.Clear(); + NodeIdTB.Text = m_session.NodeCache.GetDisplayText(m_nodeId); + + if (!NodeId.IsNull(nodeId)) + { + m_properties = FindPropertiesWithHistory(); + + if (m_properties == null || m_properties.Count <= 1) + { + PropertyLB.Visible = false; + PropertyCB.Visible = false; + } + else + { + PropertyCB.Items.AddRange((object[])m_properties.ToArray()); + PropertyCB.SelectedIndex = 0; + PropertyLB.Visible = true; + PropertyCB.Visible = true; + } + + m_configuration = ReadConfiguration(); + + if (StatusCode.IsBad(m_configuration.Stepped.StatusCode)) + { + this.ReadTypeCB.Enabled = false; + this.ReadTypeCB.SelectedItem = HistoryReadType.Subscribe; + } + else + { + this.ReadTypeCB.Enabled = true; + + if (!m_timesChanged) + { + DateTime startTime = ReadFirstDate(); + + if (startTime != DateTime.MinValue) + { + StartTimeDP.Value = startTime; + } + + DateTime endTime = ReadLastDate(); + + if (endTime != DateTime.MinValue) + { + EndTimeDP.Value = endTime; + } + } + } + } + + if (m_subscription != null) + { + MonitoredItem monitoredItem = new MonitoredItem(m_monitoredItem); + monitoredItem.StartNodeId = nodeId; + + m_subscription.AddItem(monitoredItem); + m_subscription.RemoveItem(m_monitoredItem); + m_monitoredItem = monitoredItem; + + monitoredItem.Notification += new MonitoredItemNotificationEventHandler(MonitoredItem_Notification); + + m_subscription.ApplyChanges(); + SubscriptionStateChanged(); + } + } + + /// + /// Sets the sort order for the control. + /// + /// If true the most recent entries are displayed first. + public void SetSortOrder(bool mostRecentFirst) + { + if (m_dataset != null && m_dataset.Tables.Count > 0) + { + if (mostRecentFirst) + { + m_dataset.Tables[0].DefaultView.Sort = "Index DESC"; + } + else + { + m_dataset.Tables[0].DefaultView.Sort = "Index"; + } + } + } + + /// + /// A kludge to get around the stupid designer that keeps setting property values to bogus defaults. + /// + public void Reset() + { + NodeId = null; + ReadType = HistoryReadType.Raw; + StartTime = DateTime.MinValue; + EndTime = DateTime.MinValue; + Aggregate = null; + + StartTimeCK.Checked = true; + EndTimeCK.Checked = false; + MaxReturnValuesCK.Checked = true; + MaxReturnValuesNP.Value = 10; + m_timesChanged = false; + ProcessingIntervalNP.Value = 5000; + } + + /// + /// Shows the configuration. + /// + public void ShowConfiguration() + { + if (m_session != null) + { + if (m_configuration != null) + { + new ViewNodeStateDlg().ShowDialog(m_session, m_configuration, null); + } + } + } + #endregion + + #region Private Methods + /// + /// Recursively collects the variables in a NodeState and returns a collection of BrowsePaths. + /// + public void GetBrowsePathFromNodeState( + ISystemContext context, + NodeId rootId, + NodeState parent, + RelativePath parentPath, + BrowsePathCollection browsePaths) + { + List children = new List(); + parent.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + BrowsePath browsePath = new BrowsePath(); + browsePath.StartingNode = rootId; + browsePath.Handle = child; + + if (parentPath != null) + { + browsePath.RelativePath.Elements.AddRange(parentPath.Elements); + } + + RelativePathElement element = new RelativePathElement(); + element.ReferenceTypeId = child.ReferenceTypeId; + element.IsInverse = false; + element.IncludeSubtypes = false; + element.TargetName = child.BrowseName; + + browsePath.RelativePath.Elements.Add(element); + + if (child.NodeClass == NodeClass.Variable) + { + browsePaths.Add(browsePath); + } + + GetBrowsePathFromNodeState(context, rootId, child, browsePath.RelativePath, browsePaths); + } + } + + /// + /// Reads the historical configuration for the node. + /// + private List FindPropertiesWithHistory() + { + BrowseDescription nodeToBrowse = new BrowseDescription(); + nodeToBrowse.NodeId = m_nodeId; + nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasProperty; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.BrowseDirection = BrowseDirection.Forward; + nodeToBrowse.NodeClassMask = 0; + nodeToBrowse.ResultMask = (uint)(BrowseResultMask.DisplayName | BrowseResultMask.BrowseName); + + ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, nodeToBrowse, false); + + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + for (int ii = 0; ii < references.Count; ii++) + { + if (references[ii].NodeId.IsAbsolute) + { + continue; + } + + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = (NodeId)references[ii].NodeId; + nodeToRead.AttributeId = Attributes.AccessLevel; + nodeToRead.Handle = references[ii]; + nodesToRead.Add(nodeToRead); + } + + List properties = new List(); + properties.Add(new PropertyWithHistory() { DisplayText = "(none)", NodeId = m_nodeId, AccessLevel = AccessLevels.HistoryReadOrWrite }); + + if (nodesToRead.Count > 0) + { + DataValueCollection values = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out values, + out diagnosticInfos); + + ClientBase.ValidateResponse(values, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + byte accessLevel = values[ii].GetValue(0); + + if ((accessLevel & AccessLevels.HistoryRead) != 0) + { + properties.Add(new PropertyWithHistory((ReferenceDescription)nodesToRead[ii].Handle, accessLevel)); + } + } + } + + return properties; + } + + /// + /// Reads the historical configuration for the node. + /// + private HistoricalDataConfigurationState ReadConfiguration() + { + // load the defaults for the historical configuration object. + HistoricalDataConfigurationState configuration = new HistoricalDataConfigurationState(null); + + configuration.Definition = new PropertyState(configuration); + configuration.MaxTimeInterval = new PropertyState(configuration); + configuration.MinTimeInterval = new PropertyState(configuration); + configuration.ExceptionDeviation = new PropertyState(configuration); + configuration.ExceptionDeviationFormat = new PropertyState(configuration); + configuration.StartOfArchive = new PropertyState(configuration); + configuration.StartOfOnlineArchive = new PropertyState(configuration); + + configuration.Create( + m_session.SystemContext, + null, + Opc.Ua.BrowseNames.HAConfiguration, + null, + false); + + // get the browse paths to query. + RelativePathElement element = new RelativePathElement(); + element.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasHistoricalConfiguration; + element.IsInverse = false; + element.IncludeSubtypes = false; + element.TargetName = Opc.Ua.BrowseNames.HAConfiguration; + + RelativePath relativePath = new RelativePath(); + relativePath.Elements.Add(element); + + BrowsePathCollection pathsToTranslate = new BrowsePathCollection(); + + GetBrowsePathFromNodeState( + m_session.SystemContext, + m_nodeId, + configuration, + relativePath, + pathsToTranslate); + + // translate browse paths. + BrowsePathResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.TranslateBrowsePathsToNodeIds( + null, + pathsToTranslate, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, pathsToTranslate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, pathsToTranslate); + + // build list of values to read. + ReadValueIdCollection valuesToRead = new ReadValueIdCollection(); + + for (int ii = 0; ii < pathsToTranslate.Count; ii++) + { + BaseVariableState variable = (BaseVariableState)pathsToTranslate[ii].Handle; + variable.Value = null; + variable.StatusCode = StatusCodes.BadNotSupported; + + if (StatusCode.IsBad(results[ii].StatusCode) || results[ii].Targets.Count == 0) + { + continue; + } + + if (results[ii].Targets[0].RemainingPathIndex == UInt32.MaxValue && !results[ii].Targets[0].TargetId.IsAbsolute) + { + variable.NodeId = (NodeId)results[ii].Targets[0].TargetId; + + ReadValueId valueToRead = new ReadValueId(); + valueToRead.NodeId = variable.NodeId; + valueToRead.AttributeId = Attributes.Value; + valueToRead.Handle = variable; + valuesToRead.Add(valueToRead); + } + } + + // read the values. + if (valuesToRead.Count > 0) + { + DataValueCollection values = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + valuesToRead, + out values, + out diagnosticInfos); + + ClientBase.ValidateResponse(values, valuesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToRead); + + for (int ii = 0; ii < valuesToRead.Count; ii++) + { + BaseVariableState variable = (BaseVariableState)valuesToRead[ii].Handle; + variable.WrappedValue = values[ii].WrappedValue; + variable.StatusCode = values[ii].StatusCode; + } + } + + return configuration; + } + + /// + /// Reads the first date in the archive (truncates milliseconds and converts to local). + /// + private DateTime ReadFirstDate() + { + // use the historical data configuration if available. + if (m_configuration != null) + { + if (StatusCode.IsGood(m_configuration.StartOfOnlineArchive.StatusCode)) + { + return m_configuration.StartOfOnlineArchive.Value.ToLocalTime(); + } + + if (StatusCode.IsGood(m_configuration.StartOfArchive.StatusCode)) + { + return m_configuration.StartOfArchive.Value.ToLocalTime(); + } + } + + // do it the hard way (may take a long time with some servers). + ReadRawModifiedDetails details = new ReadRawModifiedDetails(); + details.StartTime = new DateTime(1970, 1, 1); + details.EndTime = DateTime.MinValue; + details.NumValuesPerNode = 1; + details.IsReadModified = false; + details.ReturnBounds = false; + + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = m_nodeId; + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Source, + false, + nodesToRead, + out results, + out diagnosticInfos); + + Session.ValidateResponse(results, nodesToRead); + Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + return DateTime.MinValue; + } + + HistoryData data = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; + + if (results == null) + { + return DateTime.MinValue; + } + + DateTime startTime = data.DataValues[0].SourceTimestamp; + + if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) + { + nodeToRead.ContinuationPoint = results[0].ContinuationPoint; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Source, + true, + nodesToRead, + out results, + out diagnosticInfos); + + Session.ValidateResponse(results, nodesToRead); + Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + } + + startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second, 0, DateTimeKind.Utc); + startTime = startTime.ToLocalTime(); + + return startTime; + } + + /// + /// Reads the last date in the archive (truncates milliseconds and converts to local). + /// + private DateTime ReadLastDate() + { + ReadRawModifiedDetails details = new ReadRawModifiedDetails(); + details.StartTime = DateTime.MinValue; + details.EndTime = DateTime.UtcNow.AddDays(1); + details.NumValuesPerNode = 1; + details.IsReadModified = false; + details.ReturnBounds = false; + + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = m_nodeId; + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Source, + false, + nodesToRead, + out results, + out diagnosticInfos); + + Session.ValidateResponse(results, nodesToRead); + Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + return DateTime.MinValue; + } + + HistoryData data = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; + + if (data == null || data.DataValues.Count == 0) + { + return DateTime.MinValue; + } + + DateTime endTime = data.DataValues[0].SourceTimestamp; + + if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) + { + nodeToRead.ContinuationPoint = results[0].ContinuationPoint; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Source, + true, + nodesToRead, + out results, + out diagnosticInfos); + + Session.ValidateResponse(results, nodesToRead); + Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + } + + endTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, endTime.Minute, endTime.Second, 0, DateTimeKind.Utc); + endTime = endTime.AddSeconds(1); + endTime = endTime.ToLocalTime(); + + return endTime; + } + + /// + /// Creates the subscription. + /// + private void CreateSubscription() + { + if (m_session == null) + { + return; + } + + m_subscription = new Subscription(); + m_subscription.Handle = this; + m_subscription.DisplayName = null; + m_subscription.PublishingInterval = 1000; + m_subscription.KeepAliveCount = 10; + m_subscription.LifetimeCount = 100; + m_subscription.MaxNotificationsPerPublish = 1000; + m_subscription.PublishingEnabled = true; + m_subscription.TimestampsToReturn = TimestampsToReturn.Both; + + m_session.AddSubscription(m_subscription); + m_subscription.Create(); + + m_monitoredItem = new MonitoredItem(); + m_monitoredItem.StartNodeId = m_nodeId; + m_monitoredItem.AttributeId = Attributes.Value; + m_monitoredItem.SamplingInterval = (int)SamplingIntervalNP.Value; + m_monitoredItem.QueueSize = 1000; + m_monitoredItem.DiscardOldest = true; + + // specify aggregate filter. + if (AggregateCB.SelectedItem != null) + { + AggregateFilter filter = new AggregateFilter(); + + if (StartTimeCK.Checked) + { + filter.StartTime = StartTimeDP.Value.ToUniversalTime(); + } + else + { + filter.StartTime = DateTime.UtcNow; + } + + filter.ProcessingInterval = (double)ProcessingIntervalNP.Value; + filter.AggregateType = ((AvailableAggregate)AggregateCB.SelectedItem).NodeId; + + if (filter.AggregateType != null) + { + m_monitoredItem.Filter = filter; + } + } + + m_monitoredItem.Notification += new MonitoredItemNotificationEventHandler(MonitoredItem_Notification); + + m_subscription.AddItem(m_monitoredItem); + m_subscription.ApplyChanges(); + SubscriptionStateChanged(); + } + + /// + /// Deletes the subscription. + /// + private void DeleteSubscription() + { + if (m_subscription != null) + { + m_subscription.Delete(true); + m_session.RemoveSubscription(m_subscription); + m_subscription = null; + m_monitoredItem = null; + } + + SubscriptionStateChanged(); + } + + /// + /// Updates the controls after the subscription state changes. + /// + private void SubscriptionStateChanged() + { + if (m_monitoredItem != null) + { + if (ServiceResult.IsBad(m_monitoredItem.Status.Error)) + { + StatusTB.Text = m_monitoredItem.Status.Error.ToString(); + return; + } + + StatusTB.Text = "Monitoring started."; + m_isSubscribed = true; + GoBTN.Enabled = false; + GoBTN.Visible = true; + StopBTN.Enabled = true; + NextBTN.Visible = false; + } + else + { + StatusTB.Text = "Monitoring stopped."; + m_isSubscribed = false; + GoBTN.Enabled = true; + GoBTN.Visible = true; + StopBTN.Enabled = false; + NextBTN.Visible = false; + } + } + + /// + /// Adds a value to the grid. + /// + private void AddValue(DataValue value, ModificationInfo modificationInfo) + { + DataRow row = m_dataset.Tables[0].NewRow(); + + m_nextId += 10000; + + row[0] = m_nextId; + UpdateRow(row, value, modificationInfo); + + m_dataset.Tables[0].Rows.Add(row); + } + + /// + /// Updates a value in the grid. + /// + private void UpdateRow(DataRow row, DataValue value, ModificationInfo modificationInfo) + { + row[1] = value.SourceTimestamp.ToLocalTime().ToString("HH:mm:ss.fff"); + row[2] = value.ServerTimestamp.ToLocalTime().ToString("HH:mm:ss.fff"); + row[3] = value.WrappedValue; + row[4] = new StatusCode(value.StatusCode.Code); + row[5] = value.StatusCode.AggregateBits.ToString(); + + if (modificationInfo != null) + { + row[6] = modificationInfo.UpdateType; + row[7] = modificationInfo.ModificationTime.ToLocalTime().ToString("HH:mm:ss"); + row[8] = modificationInfo.UserName; + } + + row[9] = value; + } + + /// + /// Updates the display with a new value for a monitored variable. + /// + private void MonitoredItem_Notification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new MonitoredItemNotificationEventHandler(MonitoredItem_Notification), monitoredItem, e); + return; + } + + try + { + if (!Object.ReferenceEquals(monitoredItem.Subscription, m_subscription)) + { + return; + } + + MonitoredItemNotification notification = e.NotificationValue as MonitoredItemNotification; + + if (notification == null) + { + return; + } + + AddValue(notification.Value, null); + m_dataset.AcceptChanges(); + + if (ResultsDV.Rows.Count > 0) + { + ResultsDV.FirstDisplayedCell = ResultsDV.Rows[ResultsDV.Rows.Count - 1].Cells[0]; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Fetches the next batch of history. + /// + private void ReadNext() + { + if (m_nodeToContinue == null) + { + return; + } + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + nodesToRead.Add(m_nodeToContinue); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(m_details), + TimestampsToReturn.Both, + false, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; + DisplayResults(values); + + // save any continuation point. + SaveContinuationPoint(m_details, m_nodeToContinue, results[0].ContinuationPoint); + } + + /// + /// Returns the currently selected historical variable or property node id. + /// + private NodeId GetSelectedNode() + { + if (PropertyCB.SelectedIndex >= 0) + { + return ((PropertyWithHistory)PropertyCB.SelectedItem).NodeId; + } + + return m_nodeId; + } + + /// + /// Fetches the recent history. + /// + private void ReadRaw(bool isReadModified) + { + m_dataset.Clear(); + + ReadRawModifiedDetails details = new ReadRawModifiedDetails(); + details.StartTime =(StartTimeCK.Checked)?StartTimeDP.Value.ToUniversalTime():DateTime.MinValue; + details.EndTime = (EndTimeCK.Checked)?EndTimeDP.Value.ToUniversalTime():DateTime.MinValue; + details.NumValuesPerNode = (MaxReturnValuesCK.Checked)?(uint)MaxReturnValuesNP.Value:0; + details.IsReadModified = isReadModified; + details.ReturnBounds = (isReadModified)?false:ReturnBoundsCK.Checked; + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = GetSelectedNode(); + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Both, + false, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; + DisplayResults(values); + + // save any continuation point. + SaveContinuationPoint(details, nodeToRead, results[0].ContinuationPoint); + } + + /// + /// Fetches the recent history. + /// + private void ReadAtTime() + { + m_dataset.Clear(); + + ReadAtTimeDetails details = new ReadAtTimeDetails(); + details.UseSimpleBounds = UseSimpleBoundsCK.Checked; + + // generate times + DateTime startTime = StartTimeDP.Value.ToUniversalTime(); + + for (int ii = 0; ii < MaxReturnValuesNP.Value; ii++) + { + details.ReqTimes.Add(startTime.AddMilliseconds((double)(ii*TimeStepNP.Value))); + } + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = GetSelectedNode(); + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Both, + false, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; + DisplayResults(values); + + // save any continuation point. + SaveContinuationPoint(details, nodeToRead, results[0].ContinuationPoint); + } + + /// + /// Fetches the recent history. + /// + private void ReadProcessed() + { + m_dataset.Clear(); + + AvailableAggregate aggregate = (AvailableAggregate)AggregateCB.SelectedItem; + + if (aggregate == null) + { + return; + } + + ReadProcessedDetails details = new ReadProcessedDetails(); + details.StartTime = StartTimeDP.Value.ToUniversalTime(); + details.EndTime = EndTimeDP.Value.ToUniversalTime(); + details.ProcessingInterval = (double)ProcessingIntervalNP.Value; + details.AggregateType.Add(aggregate.NodeId); + details.AggregateConfiguration.UseServerCapabilitiesDefaults = true; + + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = m_nodeId; + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Both, + false, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + HistoryData values = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryData; + DisplayResults(values); + + // save any continuation point. + SaveContinuationPoint(details, nodeToRead, results[0].ContinuationPoint); + } + + /// + /// Saves a continuation point for later use. + /// + private void SaveContinuationPoint(HistoryReadDetails details, HistoryReadValueId nodeToRead, byte[] continuationPoint) + { + // clear existing continuation point. + if (m_nodeToContinue != null) + { + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + nodesToRead.Add(m_nodeToContinue); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(m_details), + TimestampsToReturn.Neither, + true, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + } + + m_details = null; + m_nodeToContinue = null; + + // save new continutation point. + if (continuationPoint != null && continuationPoint.Length > 0) + { + m_details = details; + m_nodeToContinue = nodeToRead; + m_nodeToContinue.ContinuationPoint = continuationPoint; + } + + // update controls. + if (m_nodeToContinue != null) + { + GoBTN.Visible = false; + NextBTN.Visible = true; + NextBTN.Enabled = true; + StopBTN.Enabled = true; + } + else + { + GoBTN.Visible = true; + GoBTN.Enabled = true; + NextBTN.Visible = false; + StopBTN.Enabled = false; + } + } + + /// + /// Updates the history. + /// + private void InsertReplace(PerformUpdateType updateType) + { + DataValueCollection values = new DataValueCollection(); + + foreach (DataRowView row in m_dataset.Tables[0].DefaultView) + { + DataValue value = (DataValue)row.Row[9]; + values.Add(value); + } + + bool isStructured = false; + + PropertyWithHistory property = PropertyCB.SelectedItem as PropertyWithHistory; + + if (property != null && property.BrowseName == Opc.Ua.BrowseNames.Annotations) + { + isStructured = true; + } + + HistoryUpdateResultCollection results = InsertReplace(GetSelectedNode(), updateType, isStructured, values); + + ResultsDV.Columns[ResultsDV.Columns.Count - 1].Visible = true; + + for (int ii = 0; ii < m_dataset.Tables[0].DefaultView.Count; ii++) + { + m_dataset.Tables[0].DefaultView[ii].Row[10] = results[0].OperationResults[ii]; + } + + m_dataset.AcceptChanges(); + } + + /// + /// Updates the history. + /// + private HistoryUpdateResultCollection InsertReplace(NodeId nodeId, PerformUpdateType updateType, bool isStructure, IList values) + { + HistoryUpdateDetails details = null; + + if (isStructure) + { + UpdateStructureDataDetails details2 = new UpdateStructureDataDetails(); + details2.NodeId = nodeId; + details2.PerformInsertReplace = updateType; + details2.UpdateValues.AddRange(values); + details = details2; + } + else + { + UpdateDataDetails details2 = new UpdateDataDetails(); + details2.NodeId = nodeId; + details2.PerformInsertReplace = updateType; + details2.UpdateValues.AddRange(values); + details = details2; + } + + ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection(); + nodesToUpdate.Add(new ExtensionObject(details)); + + HistoryUpdateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryUpdate( + null, + nodesToUpdate, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToUpdate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + return results; + } + + /// + /// Deletes the block of data. + /// + private void DeleteRaw(bool isModified) + { + DeleteRawModifiedDetails details = new DeleteRawModifiedDetails(); + details.NodeId = m_nodeId; + details.IsDeleteModified = isModified; + details.StartTime = StartTimeDP.Value; + details.EndTime = EndTimeDP.Value; + + ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection(); + nodesToUpdate.Add(new ExtensionObject(details)); + + HistoryUpdateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryUpdate( + null, + nodesToUpdate, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToUpdate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + ResultsDV.Columns[ResultsDV.Columns.Count - 1].Visible = false; + m_dataset.Clear(); + } + + /// + /// Deletes the history. + /// + private void DeleteAtTime() + { + DeleteAtTimeDetails details = new DeleteAtTimeDetails(); + details.NodeId = m_nodeId; + + foreach (DataRowView row in m_dataset.Tables[0].DefaultView) + { + DateTime value = (DateTime)row.Row[1]; + details.ReqTimes.Add(value); + } + + ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection(); + nodesToUpdate.Add(new ExtensionObject(details)); + + HistoryUpdateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryUpdate( + null, + nodesToUpdate, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToUpdate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + ResultsDV.Columns[ResultsDV.Columns.Count-1].Visible = true; + + for (int ii = 0; ii < m_dataset.Tables[0].DefaultView.Count; ii++) + { + m_dataset.Tables[0].DefaultView[ii].Row[10] = results[0].OperationResults[ii]; + } + + m_dataset.AcceptChanges(); + } + + /// + /// Displays the results of a history operation. + /// + private void DisplayResults(HistoryData values) + { + HistoryModifiedData modifiedData = values as HistoryModifiedData; + + if (modifiedData != null) + { + ResultsDV.Columns[5].Visible = true; + ResultsDV.Columns[6].Visible = true; + ResultsDV.Columns[7].Visible = true; + ResultsDV.Columns[8].Visible = false; + + for (int ii = 0; ii < modifiedData.DataValues.Count; ii++) + { + AddValue(modifiedData.DataValues[ii], modifiedData.ModificationInfos[ii]); + } + } + else + { + ResultsDV.Columns[5].Visible = false; + ResultsDV.Columns[6].Visible = false; + ResultsDV.Columns[7].Visible = false; + ResultsDV.Columns[8].Visible = false; + + if (values != null) + { + foreach (DataValue value in values.DataValues) + { + AddValue(value, null); + } + } + } + + m_dataset.AcceptChanges(); + } + + private void NodeIdBTN_Click(object sender, EventArgs e) + { + try + { + if (m_session == null) + { + return; + } + + ReferenceDescription reference = new SelectNodeDlg().ShowDialog( + m_session, + Opc.Ua.ObjectIds.ObjectsFolder, + null, + "Select Variable", + Opc.Ua.ReferenceTypeIds.Organizes, + Opc.Ua.ReferenceTypeIds.Aggregates); + + if (reference == null) + { + return; + } + + if (reference.NodeId != m_nodeId) + { + ChangeNode((NodeId)reference.NodeId); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void SubscribeCK_CheckedChanged(object sender, EventArgs e) + { + try + { + if (m_session != null) + { + if (m_isSubscribed) + { + CreateSubscription(); + } + else + { + DeleteSubscription(); + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void GoBTN_Click(object sender, EventArgs e) + { + try + { + m_dataset.Tables[0].Rows.Clear(); + + switch ((HistoryReadType)ReadTypeCB.SelectedItem) + { + case HistoryReadType.Subscribe: + { + CreateSubscription(); + break; + } + + case HistoryReadType.Raw: + { + ReadRaw(false); + break; + } + + case HistoryReadType.Modified: + { + ReadRaw(true); + break; + } + + case HistoryReadType.Processed: + { + ReadProcessed(); + break; + } + + case HistoryReadType.AtTime: + { + ReadAtTime(); + break; + } + + case HistoryReadType.Insert: + { + InsertReplace(PerformUpdateType.Insert); + break; + } + + case HistoryReadType.Replace: + { + InsertReplace(PerformUpdateType.Replace); + break; + } + + case HistoryReadType.InsertReplace: + { + InsertReplace(PerformUpdateType.Update); + break; + } + + case HistoryReadType.Remove: + { + InsertReplace(PerformUpdateType.Remove); + break; + } + + case HistoryReadType.DeleteRaw: + { + DeleteRaw(false); + break; + } + + case HistoryReadType.DeleteModified: + { + DeleteRaw(true); + break; + } + + case HistoryReadType.DeleteAtTime: + { + DeleteAtTime(); + break; + } + } + + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void NextBTN_Click(object sender, EventArgs e) + { + try + { + ReadNext(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void StopBTN_Click(object sender, EventArgs e) + { + try + { + DeleteSubscription(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ReadTypeCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + HistoryReadType readType = (HistoryReadType)ReadTypeCB.SelectedItem; + + switch (readType) + { + case HistoryReadType.Subscribe: + { + PropertyLB.Visible = false; + PropertyCB.Visible = false; + SamplingIntervalLB.Visible = true; + SamplingIntervalNP.Visible = true; + SamplingIntervalUnitsLB.Visible = true; + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = true; + StartTimeCK.Checked = false; + EndTimeLB.Visible = false; + EndTimeDP.Visible = false; + EndTimeCK.Visible = false; + MaxReturnValuesLB.Visible = false; + MaxReturnValuesNP.Visible = false; + MaxReturnValuesCK.Visible = false; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = true; + AggregateCB.Visible = true; + ResampleIntervalLB.Visible = true; + ProcessingIntervalNP.Visible = true; + ResampleIntervalUnitsLB.Visible = true; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryReadType.Raw: + { + PropertyLB.Visible = (m_properties != null && m_properties.Count > 1); + PropertyCB.Visible = (m_properties != null && m_properties.Count > 1); + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = true; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = true; + MaxReturnValuesLB.Visible = true; + MaxReturnValuesNP.Visible = true; + MaxReturnValuesCK.Visible = true; + MaxReturnValuesCK.Enabled = true; + MaxReturnValuesCK.Checked = true; + ReturnBoundsLB.Visible = true; + ReturnBoundsCK.Visible = true; + AggregateLB.Visible = false; + AggregateCB.Visible = false; + ResampleIntervalLB.Visible = false; + ProcessingIntervalNP.Visible = false; + ResampleIntervalUnitsLB.Visible = false; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryReadType.Modified: + { + PropertyLB.Visible = false; + PropertyCB.Visible = false; + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = true; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = true; + MaxReturnValuesLB.Visible = true; + MaxReturnValuesNP.Visible = true; + MaxReturnValuesCK.Visible = true; + MaxReturnValuesCK.Enabled = true; + MaxReturnValuesCK.Checked = true; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = false; + AggregateCB.Visible = false; + ResampleIntervalLB.Visible = false; + ProcessingIntervalNP.Visible = false; + ResampleIntervalUnitsLB.Visible = false; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryReadType.Processed: + { + PropertyLB.Visible = false; + PropertyCB.Visible = false; + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = false; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = false; + EndTimeCK.Checked = true; + MaxReturnValuesLB.Visible = false; + MaxReturnValuesNP.Visible = false; + MaxReturnValuesCK.Visible = false; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = true; + AggregateCB.Visible = true; + ResampleIntervalLB.Visible = true; + ProcessingIntervalNP.Visible = true; + ResampleIntervalUnitsLB.Visible = true; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryReadType.AtTime: + { + PropertyLB.Visible = (m_properties != null && m_properties.Count > 1); + PropertyCB.Visible = (m_properties != null && m_properties.Count > 1); + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = false; + StartTimeCK.Checked = true; + EndTimeLB.Visible = false; + EndTimeDP.Visible = false; + EndTimeCK.Visible = false; + EndTimeCK.Enabled = false; + EndTimeCK.Checked = false; + MaxReturnValuesLB.Visible = true; + MaxReturnValuesNP.Visible = true; + MaxReturnValuesCK.Visible = true; + MaxReturnValuesCK.Enabled = false; + MaxReturnValuesCK.Checked = true; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = false; + AggregateCB.Visible = false; + ResampleIntervalLB.Visible = false; + ProcessingIntervalNP.Visible = false; + ResampleIntervalUnitsLB.Visible = false; + TimeStepLB.Visible = true; + TimeStepNP.Visible = true; + TimeStepUnitsLB.Visible = true; + UseSimpleBoundsLB.Visible = true; + UseSimpleBoundsCK.Visible = true; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryReadType.Insert: + case HistoryReadType.InsertReplace: + case HistoryReadType.Replace: + case HistoryReadType.Remove: + { + PropertyLB.Visible = (m_properties != null && m_properties.Count > 1); + PropertyCB.Visible = (m_properties != null && m_properties.Count > 1); + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = false; + StartTimeDP.Visible = false; + StartTimeCK.Visible = false; + StartTimeCK.Enabled = false; + StartTimeCK.Checked = false; + EndTimeLB.Visible = false; + EndTimeDP.Visible = false; + EndTimeCK.Visible = false; + EndTimeCK.Enabled = false; + EndTimeCK.Checked = false; + MaxReturnValuesLB.Visible = false; + MaxReturnValuesNP.Visible = false; + MaxReturnValuesCK.Visible = false; + MaxReturnValuesCK.Enabled = false; + MaxReturnValuesCK.Checked = false; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = false; + AggregateCB.Visible = false; + ResampleIntervalLB.Visible = false; + ProcessingIntervalNP.Visible = false; + ResampleIntervalUnitsLB.Visible = false; + TimeStepLB.Visible = true; + TimeStepNP.Visible = true; + TimeStepUnitsLB.Visible = true; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = true; + break; + } + + case HistoryReadType.DeleteAtTime: + { + PropertyLB.Visible = false; + PropertyCB.Visible = false; + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = false; + StartTimeDP.Visible = false; + StartTimeCK.Visible = false; + StartTimeCK.Enabled = false; + StartTimeCK.Checked = false; + EndTimeLB.Visible = false; + EndTimeDP.Visible = false; + EndTimeCK.Visible = false; + EndTimeCK.Enabled = false; + EndTimeCK.Checked = false; + MaxReturnValuesLB.Visible = false; + MaxReturnValuesNP.Visible = false; + MaxReturnValuesCK.Visible = false; + MaxReturnValuesCK.Enabled = false; + MaxReturnValuesCK.Checked = false; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = false; + AggregateCB.Visible = false; + ResampleIntervalLB.Visible = false; + ProcessingIntervalNP.Visible = false; + ResampleIntervalUnitsLB.Visible = false; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryReadType.DeleteRaw: + case HistoryReadType.DeleteModified: + { + PropertyLB.Visible = false; + PropertyCB.Visible = false; + SamplingIntervalLB.Visible = false; + SamplingIntervalNP.Visible = false; + SamplingIntervalUnitsLB.Visible = false; + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = false; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = false; + EndTimeCK.Checked = true; + EndTimeCK.Visible = false; + MaxReturnValuesNP.Visible = false; + MaxReturnValuesCK.Visible = false; + MaxReturnValuesCK.Enabled = false; + MaxReturnValuesCK.Checked = false; + ReturnBoundsLB.Visible = false; + ReturnBoundsCK.Visible = false; + AggregateLB.Visible = false; + AggregateCB.Visible = false; + ResampleIntervalLB.Visible = false; + ProcessingIntervalNP.Visible = false; + ResampleIntervalUnitsLB.Visible = false; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + UseSimpleBoundsLB.Visible = false; + UseSimpleBoundsCK.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + + #region Event Handlers + private void StartTimeDP_ValueChanged(object sender, EventArgs e) + { + try + { + m_timesChanged = true; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DetectLimitsBTN_Click(object sender, EventArgs e) + { + try + { + DateTime startTime = ReadFirstDate(); + + if (startTime != DateTime.MinValue) + { + StartTimeDP.Value = startTime; + } + + DateTime endTime = ReadLastDate(); + + if (endTime != DateTime.MinValue) + { + EndTimeDP.Value = endTime; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void StartTimeCK_CheckedChanged(object sender, EventArgs e) + { + try + { + StartTimeDP.Enabled = StartTimeCK.Checked; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EndTimeCK_CheckedChanged(object sender, EventArgs e) + { + try + { + EndTimeDP.Enabled = EndTimeCK.Checked; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void MaxReturnValuesCK_CheckedChanged(object sender, EventArgs e) + { + try + { + MaxReturnValuesNP.Enabled = MaxReturnValuesCK.Checked; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void TimeShiftBTN_Click(object sender, EventArgs e) + { + try + { + foreach (DataRowView row in m_dataset.Tables[0].DefaultView) + { + DataValue value = (DataValue)row.Row[9]; + value.SourceTimestamp = value.SourceTimestamp.AddMilliseconds((double)TimeStepNP.Value); + value.ServerTimestamp = value.ServerTimestamp.AddMilliseconds((double)TimeStepNP.Value); + + row[1] = value.SourceTimestamp.ToLocalTime().ToString("HH:mm:ss.fff"); + row[2] = value.ServerTimestamp.ToLocalTime().ToString("HH:mm:ss.fff"); + } + + m_dataset.AcceptChanges(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void InsertAnnotationMI_Click(object sender, EventArgs e) + { + try + { + if (m_session == null) + { + return; + } + + NodeId propertyId = null; + + if (m_properties != null) + { + foreach (PropertyWithHistory property in m_properties) + { + if (property.BrowseName == Opc.Ua.BrowseNames.Annotations) + { + propertyId = property.NodeId; + break; + } + } + } + + if (propertyId == null) + { + return; + } + + Annotation annotation = new EditAnnotationDlg().ShowDialog(m_session, null, null); + + if (annotation != null) + { + List valuesToUpdate = new List(); + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + DataValue value = (DataValue)source.Row[9]; + + } + + HistoryUpdateResultCollection results = InsertReplace(propertyId, PerformUpdateType.Insert, true, valuesToUpdate); + + ResultsDV.Columns[ResultsDV.Columns.Count - 1].Visible = true; + + for (int ii = 0; ii < ResultsDV.SelectedRows.Count; ii++) + { + DataGridViewRow row = ResultsDV.SelectedRows[ii]; + DataRowView source = row.DataBoundItem as DataRowView; + source.Row[10] = results[0].OperationResults[ii]; + } + + m_dataset.AcceptChanges(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EditValueMI_Click(object sender, EventArgs e) + { + try + { + if (m_session == null) + { + return; + } + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + DataValue value = (DataValue)source.Row[9]; + + DataValue newValue = new EditDataValueDlg().ShowDialog(value, null, null); + + if (newValue == null) + { + return; + } + + UpdateRow(source.Row, newValue, null); + m_dataset.AcceptChanges(); + break; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ShowServerTimestampMI_CheckedChanged(object sender, EventArgs e) + { + ServerTimestampCH.Visible = ShowServerTimestampMI.Checked; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.resx new file mode 100644 index 00000000..336c28b8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryDataListView.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.Designer.cs new file mode 100644 index 00000000..cd10e09a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.Designer.cs @@ -0,0 +1,500 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HistoryEventCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.LeftPN = new System.Windows.Forms.Panel(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.StopBTN = new System.Windows.Forms.Button(); + this.NextBTN = new System.Windows.Forms.Button(); + this.TimeShiftBTN = new System.Windows.Forms.Button(); + this.GoBTN = new System.Windows.Forms.Button(); + this.DetectLimitsBTN = new System.Windows.Forms.Button(); + this.StatusTB = new System.Windows.Forms.TextBox(); + this.TimeStepUnitsLB = new System.Windows.Forms.Label(); + this.TimeStepNP = new System.Windows.Forms.NumericUpDown(); + this.TimeStepLB = new System.Windows.Forms.Label(); + this.NodeIdBTN = new System.Windows.Forms.Button(); + this.NodeIdTB = new System.Windows.Forms.TextBox(); + this.StartTimeCK = new System.Windows.Forms.CheckBox(); + this.NodeIdLB = new System.Windows.Forms.Label(); + this.ReadTypeCB = new System.Windows.Forms.ComboBox(); + this.EndTimeLB = new System.Windows.Forms.Label(); + this.ReadTypeLB = new System.Windows.Forms.Label(); + this.StartTimeLB = new System.Windows.Forms.Label(); + this.StartTimeDP = new System.Windows.Forms.DateTimePicker(); + this.EndTimeDP = new System.Windows.Forms.DateTimePicker(); + this.EndTimeCK = new System.Windows.Forms.CheckBox(); + this.RightPN = new System.Windows.Forms.Panel(); + this.EventsCTRL = new Opc.Ua.Client.Controls.EventListViewCtrl(); + this.FilterLB = new System.Windows.Forms.Label(); + this.FilterTB = new System.Windows.Forms.TextBox(); + this.FilterBTN = new System.Windows.Forms.Button(); + this.LeftPN.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TimeStepNP)).BeginInit(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // LeftPN + // + this.LeftPN.Controls.Add(this.ControlsPN); + this.LeftPN.Dock = System.Windows.Forms.DockStyle.Left; + this.LeftPN.Location = new System.Drawing.Point(0, 0); + this.LeftPN.Name = "LeftPN"; + this.LeftPN.Size = new System.Drawing.Size(306, 400); + this.LeftPN.TabIndex = 2; + // + // ControlsPN + // + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 115F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.FilterTB, 1, 4); + this.ControlsPN.Controls.Add(this.FilterLB, 0, 4); + this.ControlsPN.Controls.Add(this.TimeStepUnitsLB, 2, 5); + this.ControlsPN.Controls.Add(this.TimeStepNP, 1, 5); + this.ControlsPN.Controls.Add(this.TimeStepLB, 0, 5); + this.ControlsPN.Controls.Add(this.NodeIdBTN, 2, 0); + this.ControlsPN.Controls.Add(this.NodeIdTB, 1, 0); + this.ControlsPN.Controls.Add(this.StartTimeCK, 2, 2); + this.ControlsPN.Controls.Add(this.NodeIdLB, 0, 0); + this.ControlsPN.Controls.Add(this.ReadTypeCB, 1, 1); + this.ControlsPN.Controls.Add(this.EndTimeLB, 0, 3); + this.ControlsPN.Controls.Add(this.ReadTypeLB, 0, 1); + this.ControlsPN.Controls.Add(this.StartTimeLB, 0, 2); + this.ControlsPN.Controls.Add(this.StartTimeDP, 1, 2); + this.ControlsPN.Controls.Add(this.EndTimeDP, 1, 3); + this.ControlsPN.Controls.Add(this.EndTimeCK, 2, 3); + this.ControlsPN.Controls.Add(this.StatusTB, 0, 7); + this.ControlsPN.Controls.Add(this.panel1, 0, 6); + this.ControlsPN.Controls.Add(this.FilterBTN, 2, 4); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Top; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 8; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 57F)); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 22F)); + this.ControlsPN.Size = new System.Drawing.Size(306, 389); + this.ControlsPN.TabIndex = 0; + // + // panel1 + // + this.ControlsPN.SetColumnSpan(this.panel1, 3); + this.panel1.Controls.Add(this.StopBTN); + this.panel1.Controls.Add(this.NextBTN); + this.panel1.Controls.Add(this.TimeShiftBTN); + this.panel1.Controls.Add(this.GoBTN); + this.panel1.Controls.Add(this.DetectLimitsBTN); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(3, 160); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(300, 51); + this.panel1.TabIndex = 33; + // + // StopBTN + // + this.StopBTN.Location = new System.Drawing.Point(208, 14); + this.StopBTN.Name = "StopBTN"; + this.StopBTN.Size = new System.Drawing.Size(75, 23); + this.StopBTN.TabIndex = 2; + this.StopBTN.Text = "Stop"; + this.StopBTN.UseVisualStyleBackColor = true; + // + // NextBTN + // + this.NextBTN.Location = new System.Drawing.Point(113, 14); + this.NextBTN.Name = "NextBTN"; + this.NextBTN.Size = new System.Drawing.Size(75, 23); + this.NextBTN.TabIndex = 1; + this.NextBTN.Text = "Next"; + this.NextBTN.UseVisualStyleBackColor = true; + this.NextBTN.Click += new System.EventHandler(this.NextBTN_Click); + // + // TimeShiftBTN + // + this.TimeShiftBTN.Location = new System.Drawing.Point(21, 14); + this.TimeShiftBTN.Name = "TimeShiftBTN"; + this.TimeShiftBTN.Size = new System.Drawing.Size(75, 23); + this.TimeShiftBTN.TabIndex = 0; + this.TimeShiftBTN.Text = "Time Shift"; + this.TimeShiftBTN.UseVisualStyleBackColor = true; + this.TimeShiftBTN.Visible = false; + this.TimeShiftBTN.Click += new System.EventHandler(this.TimeShiftBTN_Click); + // + // GoBTN + // + this.GoBTN.Location = new System.Drawing.Point(113, 14); + this.GoBTN.Name = "GoBTN"; + this.GoBTN.Size = new System.Drawing.Size(75, 23); + this.GoBTN.TabIndex = 37; + this.GoBTN.Text = "Go"; + this.GoBTN.UseVisualStyleBackColor = true; + this.GoBTN.Click += new System.EventHandler(this.GoBTN_Click); + // + // DetectLimitsBTN + // + this.DetectLimitsBTN.Location = new System.Drawing.Point(21, 14); + this.DetectLimitsBTN.Name = "DetectLimitsBTN"; + this.DetectLimitsBTN.Size = new System.Drawing.Size(75, 23); + this.DetectLimitsBTN.TabIndex = 41; + this.DetectLimitsBTN.Text = "Auto Detect"; + this.DetectLimitsBTN.UseVisualStyleBackColor = true; + // + // StatusTB + // + this.StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ControlsPN.SetColumnSpan(this.StatusTB, 3); + this.StatusTB.Location = new System.Drawing.Point(3, 217); + this.StatusTB.Multiline = true; + this.StatusTB.Name = "StatusTB"; + this.StatusTB.ReadOnly = true; + this.StatusTB.Size = new System.Drawing.Size(300, 169); + this.StatusTB.TabIndex = 34; + // + // TimeStepUnitsLB + // + this.TimeStepUnitsLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeStepUnitsLB.AutoSize = true; + this.TimeStepUnitsLB.Location = new System.Drawing.Point(262, 131); + this.TimeStepUnitsLB.Name = "TimeStepUnitsLB"; + this.TimeStepUnitsLB.Size = new System.Drawing.Size(20, 26); + this.TimeStepUnitsLB.TabIndex = 32; + this.TimeStepUnitsLB.Text = "ms"; + this.TimeStepUnitsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TimeStepNP + // + this.TimeStepNP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeStepNP.Increment = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.TimeStepNP.Location = new System.Drawing.Point(118, 134); + this.TimeStepNP.Maximum = new decimal(new int[] { + 1000000000, + 0, + 0, + 0}); + this.TimeStepNP.Name = "TimeStepNP"; + this.TimeStepNP.Size = new System.Drawing.Size(138, 20); + this.TimeStepNP.TabIndex = 31; + this.TimeStepNP.Value = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + // + // TimeStepLB + // + this.TimeStepLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeStepLB.AutoSize = true; + this.TimeStepLB.Location = new System.Drawing.Point(3, 131); + this.TimeStepLB.Name = "TimeStepLB"; + this.TimeStepLB.Size = new System.Drawing.Size(55, 26); + this.TimeStepLB.TabIndex = 30; + this.TimeStepLB.Text = "Time Step"; + this.TimeStepLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NodeIdBTN + // + this.NodeIdBTN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeIdBTN.Location = new System.Drawing.Point(262, 1); + this.NodeIdBTN.Margin = new System.Windows.Forms.Padding(3, 1, 3, 1); + this.NodeIdBTN.Name = "NodeIdBTN"; + this.NodeIdBTN.Size = new System.Drawing.Size(24, 24); + this.NodeIdBTN.TabIndex = 4; + this.NodeIdBTN.Text = "..."; + this.NodeIdBTN.UseVisualStyleBackColor = true; + this.NodeIdBTN.Click += new System.EventHandler(this.NodeIdBTN_Click); + // + // NodeIdTB + // + this.NodeIdTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeIdTB.Location = new System.Drawing.Point(118, 3); + this.NodeIdTB.Name = "NodeIdTB"; + this.NodeIdTB.Size = new System.Drawing.Size(138, 20); + this.NodeIdTB.TabIndex = 3; + // + // StartTimeCK + // + this.StartTimeCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StartTimeCK.AutoSize = true; + this.StartTimeCK.Location = new System.Drawing.Point(262, 56); + this.StartTimeCK.Name = "StartTimeCK"; + this.StartTimeCK.Size = new System.Drawing.Size(15, 20); + this.StartTimeCK.TabIndex = 14; + this.StartTimeCK.UseVisualStyleBackColor = true; + this.StartTimeCK.CheckedChanged += new System.EventHandler(this.StartTimeCK_CheckedChanged); + // + // NodeIdLB + // + this.NodeIdLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.NodeIdLB.AutoSize = true; + this.NodeIdLB.Location = new System.Drawing.Point(3, 0); + this.NodeIdLB.Name = "NodeIdLB"; + this.NodeIdLB.Size = new System.Drawing.Size(40, 26); + this.NodeIdLB.TabIndex = 2; + this.NodeIdLB.Text = "Notifier"; + this.NodeIdLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ReadTypeCB + // + this.ReadTypeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReadTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ReadTypeCB.FormattingEnabled = true; + this.ReadTypeCB.Location = new System.Drawing.Point(118, 29); + this.ReadTypeCB.Name = "ReadTypeCB"; + this.ReadTypeCB.Size = new System.Drawing.Size(138, 21); + this.ReadTypeCB.TabIndex = 8; + this.ReadTypeCB.SelectedIndexChanged += new System.EventHandler(this.ReadTypeCB_SelectedIndexChanged); + // + // EndTimeLB + // + this.EndTimeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EndTimeLB.AutoSize = true; + this.EndTimeLB.Location = new System.Drawing.Point(3, 79); + this.EndTimeLB.Name = "EndTimeLB"; + this.EndTimeLB.Size = new System.Drawing.Size(52, 26); + this.EndTimeLB.TabIndex = 15; + this.EndTimeLB.Text = "End Time"; + this.EndTimeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ReadTypeLB + // + this.ReadTypeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReadTypeLB.AutoSize = true; + this.ReadTypeLB.Location = new System.Drawing.Point(3, 26); + this.ReadTypeLB.Name = "ReadTypeLB"; + this.ReadTypeLB.Size = new System.Drawing.Size(60, 27); + this.ReadTypeLB.TabIndex = 7; + this.ReadTypeLB.Text = "Read Type"; + this.ReadTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StartTimeLB + // + this.StartTimeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StartTimeLB.AutoSize = true; + this.StartTimeLB.Location = new System.Drawing.Point(3, 53); + this.StartTimeLB.Name = "StartTimeLB"; + this.StartTimeLB.Size = new System.Drawing.Size(55, 26); + this.StartTimeLB.TabIndex = 12; + this.StartTimeLB.Text = "Start Time"; + this.StartTimeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StartTimeDP + // + this.StartTimeDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StartTimeDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.StartTimeDP.Enabled = false; + this.StartTimeDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.StartTimeDP.Location = new System.Drawing.Point(118, 56); + this.StartTimeDP.Name = "StartTimeDP"; + this.StartTimeDP.Size = new System.Drawing.Size(138, 20); + this.StartTimeDP.TabIndex = 13; + this.StartTimeDP.ValueChanged += new System.EventHandler(this.StartTimeDP_ValueChanged); + // + // EndTimeDP + // + this.EndTimeDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EndTimeDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.EndTimeDP.Enabled = false; + this.EndTimeDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.EndTimeDP.Location = new System.Drawing.Point(118, 82); + this.EndTimeDP.Name = "EndTimeDP"; + this.EndTimeDP.Size = new System.Drawing.Size(138, 20); + this.EndTimeDP.TabIndex = 16; + this.EndTimeDP.ValueChanged += new System.EventHandler(this.StartTimeDP_ValueChanged); + // + // EndTimeCK + // + this.EndTimeCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EndTimeCK.AutoSize = true; + this.EndTimeCK.Location = new System.Drawing.Point(262, 82); + this.EndTimeCK.Name = "EndTimeCK"; + this.EndTimeCK.Size = new System.Drawing.Size(15, 20); + this.EndTimeCK.TabIndex = 17; + this.EndTimeCK.UseVisualStyleBackColor = true; + this.EndTimeCK.CheckedChanged += new System.EventHandler(this.EndTimeCK_CheckedChanged); + // + // RightPN + // + this.RightPN.Controls.Add(this.EventsCTRL); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(306, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(494, 400); + this.RightPN.TabIndex = 3; + // + // EventsCTRL + // + this.EventsCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventsCTRL.Location = new System.Drawing.Point(0, 0); + this.EventsCTRL.Name = "EventsCTRL"; + this.EventsCTRL.Size = new System.Drawing.Size(494, 400); + this.EventsCTRL.TabIndex = 0; + // + // FilterLB + // + this.FilterLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FilterLB.AutoSize = true; + this.FilterLB.Location = new System.Drawing.Point(3, 105); + this.FilterLB.Name = "FilterLB"; + this.FilterLB.Size = new System.Drawing.Size(29, 26); + this.FilterLB.TabIndex = 35; + this.FilterLB.Text = "Filter"; + this.FilterLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FilterTB + // + this.FilterTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FilterTB.Location = new System.Drawing.Point(118, 108); + this.FilterTB.Name = "FilterTB"; + this.FilterTB.Size = new System.Drawing.Size(138, 20); + this.FilterTB.TabIndex = 36; + // + // FilterBTN + // + this.FilterBTN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FilterBTN.Location = new System.Drawing.Point(262, 106); + this.FilterBTN.Margin = new System.Windows.Forms.Padding(3, 1, 3, 1); + this.FilterBTN.Name = "FilterBTN"; + this.FilterBTN.Size = new System.Drawing.Size(24, 24); + this.FilterBTN.TabIndex = 37; + this.FilterBTN.Text = "..."; + this.FilterBTN.UseVisualStyleBackColor = true; + // + // HistoryEventCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Controls.Add(this.LeftPN); + this.Name = "HistoryEventCtrl"; + this.Size = new System.Drawing.Size(800, 400); + this.LeftPN.ResumeLayout(false); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TimeStepNP)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel LeftPN; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label TimeStepUnitsLB; + private System.Windows.Forms.NumericUpDown TimeStepNP; + private System.Windows.Forms.Label TimeStepLB; + private System.Windows.Forms.Button NodeIdBTN; + private System.Windows.Forms.TextBox NodeIdTB; + private System.Windows.Forms.CheckBox StartTimeCK; + private System.Windows.Forms.Label NodeIdLB; + private System.Windows.Forms.ComboBox ReadTypeCB; + private System.Windows.Forms.Label EndTimeLB; + private System.Windows.Forms.Label ReadTypeLB; + private System.Windows.Forms.Label StartTimeLB; + private System.Windows.Forms.DateTimePicker StartTimeDP; + private System.Windows.Forms.DateTimePicker EndTimeDP; + private System.Windows.Forms.CheckBox EndTimeCK; + private System.Windows.Forms.TextBox StatusTB; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button StopBTN; + private System.Windows.Forms.Button NextBTN; + private System.Windows.Forms.Button TimeShiftBTN; + private System.Windows.Forms.Button GoBTN; + private System.Windows.Forms.Button DetectLimitsBTN; + private EventListViewCtrl EventsCTRL; + private System.Windows.Forms.TextBox FilterTB; + private System.Windows.Forms.Label FilterLB; + private System.Windows.Forms.Button FilterBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.cs new file mode 100644 index 00000000..13e4b09e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.cs @@ -0,0 +1,464 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class HistoryEventCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public HistoryEventCtrl() + { + InitializeComponent(); + LeftPN.Enabled = false; + + ReadTypeCB.Items.Add(HistoryOperation.Read); + ReadTypeCB.Items.Add(HistoryOperation.Update); + ReadTypeCB.Items.Add(HistoryOperation.Delete); + ReadTypeCB.SelectedIndex = 0; + } + #endregion + + #region HistoryOperation Enumeration + /// + /// The available history operations. + /// + public enum HistoryOperation + { + /// + /// Read raw data. + /// + Read, + + /// + /// Read modified data. + /// + Update, + + /// + /// Read data at the specified times. + /// + Delete, + } + #endregion + + #region Private Fields + private Session m_session; + private NodeId m_nodeId; + #endregion + + #region Public Members + /// + /// The node id to use. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public NodeId NodeId + { + get + { + return m_nodeId; + } + + set + { + m_nodeId = value; + + if (m_session != null) + { + NodeIdTB.Text = m_session.NodeCache.GetDisplayText(m_nodeId); + } + else + { + if (NodeId.IsNull(m_nodeId)) + { + NodeIdTB.Text = String.Empty; + } + else + { + NodeIdTB.Text = m_nodeId.ToString(); + } + } + } + } + + /// + /// The type of read operation. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public HistoryOperation Operation + { + get { return (HistoryOperation)ReadTypeCB.SelectedItem; } + set { ReadTypeCB.SelectedItem = value; } + } + + /// + /// The start time for the query. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public DateTime StartTime + { + get + { + if (StartTimeCK.Checked) + { + return DateTime.MinValue; + } + + return StartTimeDP.Value; + } + + set + { + if (value < Utils.TimeBase) + { + StartTimeCK.Checked = false; + return; + } + + if (value.Kind == DateTimeKind.Local) + { + value = value.ToUniversalTime(); + } + + StartTimeCK.Checked = true; + StartTimeDP.Value = value; + } + } + + /// + /// The end time for the query. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public DateTime EndTime + { + get + { + if (EndTimeCK.Checked) + { + return DateTime.MinValue; + } + + return EndTimeDP.Value; + } + + set + { + if (value < Utils.TimeBase) + { + EndTimeCK.Checked = false; + return; + } + + if (value.Kind == DateTimeKind.Local) + { + value = value.ToUniversalTime(); + } + + EndTimeCK.Checked = true; + EndTimeDP.Value = value; + } + } + + /// + /// Changes the session. + /// + public void ChangeSession(Session session) + { + m_session = session; + LeftPN.Enabled = m_session != null; + } + + /// + /// Updates the control after the session has reconnected. + /// + public void SessionReconnected(Session session) + { + m_session = session; + } + + /// + /// Changes the node monitored by the control. + /// + public void ChangeNode(NodeId nodeId) + { + m_nodeId = nodeId; + NodeIdTB.Text = m_session.NodeCache.GetDisplayText(m_nodeId); + } + + /// + /// A kludge to get around the stupid designer that keeps setting property values to bogus defaults. + /// + public void Reset() + { + NodeId = null; + Operation = HistoryOperation.Read; + StartTime = DateTime.MinValue; + EndTime = DateTime.MinValue; + StartTimeCK.Checked = true; + EndTimeCK.Checked = false; + } + #endregion + + #region Private Methods + /// + /// Recursively collects the variables in a NodeState and returns a collection of BrowsePaths. + /// + public void GetBrowsePathFromNodeState( + ISystemContext context, + NodeId rootId, + NodeState parent, + RelativePath parentPath, + BrowsePathCollection browsePaths) + { + List children = new List(); + parent.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + BrowsePath browsePath = new BrowsePath(); + browsePath.StartingNode = rootId; + browsePath.Handle = child; + + if (parentPath != null) + { + browsePath.RelativePath.Elements.AddRange(parentPath.Elements); + } + + RelativePathElement element = new RelativePathElement(); + element.ReferenceTypeId = child.ReferenceTypeId; + element.IsInverse = false; + element.IncludeSubtypes = false; + element.TargetName = child.BrowseName; + + browsePath.RelativePath.Elements.Add(element); + + if (child.NodeClass == NodeClass.Variable) + { + browsePaths.Add(browsePath); + } + + GetBrowsePathFromNodeState(context, rootId, child, browsePath.RelativePath, browsePaths); + } + } + + private void NodeIdBTN_Click(object sender, EventArgs e) + { + try + { + if (m_session == null) + { + return; + } + + ReferenceDescription reference = new SelectNodeDlg().ShowDialog( + m_session, + Opc.Ua.ObjectIds.Server, + null, + "Select Notifier", + Opc.Ua.ReferenceTypeIds.HasNotifier); + + if (reference == null) + { + return; + } + + if (reference.NodeId != m_nodeId) + { + ChangeNode((NodeId)reference.NodeId); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void GoBTN_Click(object sender, EventArgs e) + { + try + { + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void NextBTN_Click(object sender, EventArgs e) + { + try + { + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ReadTypeCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + HistoryOperation operation = (HistoryOperation)ReadTypeCB.SelectedItem; + + switch (operation) + { + case HistoryOperation.Read: + { + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = true; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = true; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryOperation.Update: + { + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = true; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = true; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + + case HistoryOperation.Delete: + { + StartTimeLB.Visible = true; + StartTimeDP.Visible = true; + StartTimeCK.Visible = true; + StartTimeCK.Enabled = false; + StartTimeCK.Checked = true; + EndTimeLB.Visible = true; + EndTimeDP.Visible = true; + EndTimeCK.Visible = true; + EndTimeCK.Enabled = false; + EndTimeCK.Checked = true; + TimeStepLB.Visible = false; + TimeStepNP.Visible = false; + TimeStepUnitsLB.Visible = false; + TimeShiftBTN.Visible = false; + break; + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + + #region Event Handlers + private void StartTimeDP_ValueChanged(object sender, EventArgs e) + { + try + { + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void StartTimeCK_CheckedChanged(object sender, EventArgs e) + { + try + { + StartTimeDP.Enabled = StartTimeCK.Checked; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EndTimeCK_CheckedChanged(object sender, EventArgs e) + { + try + { + EndTimeDP.Enabled = EndTimeCK.Checked; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void TimeShiftBTN_Click(object sender, EventArgs e) + { + try + { + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/HistoryEventCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ISessionForm.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ISessionForm.cs new file mode 100644 index 00000000..76e87dbb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ISessionForm.cs @@ -0,0 +1,48 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Text; + +namespace Opc.Ua.Client.Controls +{ + /// + /// An interface for forms that use a session. + /// + public interface ISessionForm + { + /// + /// Changes the session being used by the form. + /// + /// The new session to use. A null value means the session has been disconnected. + void ChangeSession(Session session); + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.Designer.cs new file mode 100644 index 00000000..617a1929 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.Designer.cs @@ -0,0 +1,147 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ReadRequestDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonPN = new System.Windows.Forms.FlowLayoutPanel(); + this.CloseBTN = new System.Windows.Forms.Button(); + this.ReadBTN = new System.Windows.Forms.Button(); + this.BackBTN = new System.Windows.Forms.Button(); + this.ReadRequestCTRL = new Opc.Ua.Client.Controls.ReadRequestListViewCtrl(); + this.ButtonPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonPN + // + this.ButtonPN.Controls.Add(this.CloseBTN); + this.ButtonPN.Controls.Add(this.ReadBTN); + this.ButtonPN.Controls.Add(this.BackBTN); + this.ButtonPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonPN.Location = new System.Drawing.Point(0, 233); + this.ButtonPN.Name = "ButtonPN"; + this.ButtonPN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ButtonPN.Size = new System.Drawing.Size(784, 29); + this.ButtonPN.TabIndex = 1; + // + // CloseBTN + // + this.CloseBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CloseBTN.Location = new System.Drawing.Point(706, 3); + this.CloseBTN.Name = "CloseBTN"; + this.CloseBTN.Size = new System.Drawing.Size(75, 23); + this.CloseBTN.TabIndex = 0; + this.CloseBTN.Text = "Close"; + this.CloseBTN.UseVisualStyleBackColor = true; + this.CloseBTN.Click += new System.EventHandler(this.CloseBTN_Click); + // + // ReadBTN + // + this.ReadBTN.Location = new System.Drawing.Point(625, 3); + this.ReadBTN.Name = "ReadBTN"; + this.ReadBTN.Size = new System.Drawing.Size(75, 23); + this.ReadBTN.TabIndex = 1; + this.ReadBTN.Text = "Read"; + this.ReadBTN.UseVisualStyleBackColor = true; + this.ReadBTN.Click += new System.EventHandler(this.ReadBTN_Click); + // + // BackBTN + // + this.BackBTN.Location = new System.Drawing.Point(544, 3); + this.BackBTN.Name = "BackBTN"; + this.BackBTN.Size = new System.Drawing.Size(75, 23); + this.BackBTN.TabIndex = 2; + this.BackBTN.Text = "Back"; + this.BackBTN.UseVisualStyleBackColor = true; + this.BackBTN.Visible = false; + this.BackBTN.Click += new System.EventHandler(this.BackBTN_Click); + // + // ReadRequestCTRL + // + this.ReadRequestCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ReadRequestCTRL.Location = new System.Drawing.Point(0, 0); + this.ReadRequestCTRL.Name = "ReadRequestCTRL"; + this.ReadRequestCTRL.Size = new System.Drawing.Size(784, 233); + this.ReadRequestCTRL.TabIndex = 0; + // + // ReadRequestDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 262); + this.Controls.Add(this.ReadRequestCTRL); + this.Controls.Add(this.ButtonPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ReadRequestDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Read Attribute Values"; + this.ButtonPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private ReadRequestListViewCtrl ReadRequestCTRL; + private System.Windows.Forms.FlowLayoutPanel ButtonPN; + private System.Windows.Forms.Button CloseBTN; + private System.Windows.Forms.Button ReadBTN; + private System.Windows.Forms.Button BackBTN; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.cs new file mode 100644 index 00000000..fdbcdccc --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.cs @@ -0,0 +1,128 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to edit and issue read requests. + /// + public partial class ReadRequestDlg : Form, ISessionForm + { + #region Constructors + /// + /// Creates an empty form. + /// + public ReadRequestDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Changes the session used for the read request. + /// + public void ChangeSession(Session session) + { + ReadRequestCTRL.ChangeSession(session); + } + + /// + /// Adds the nodes to the read request. + /// + public void AddNodes(params ReadValueId[] nodesToRead) + { + ReadRequestCTRL.AddNodes(nodesToRead); + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + private void ReadBTN_Click(object sender, EventArgs e) + { + try + { + ReadRequestCTRL.Read(); + BackBTN.Visible = true; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BackBTN_Click(object sender, EventArgs e) + { + try + { + ReadRequestCTRL.Back(); + BackBTN.Visible = false; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CloseBTN_Click(object sender, EventArgs e) + { + try + { + if (this.Modal) + { + DialogResult = DialogResult.Cancel; + } + else + { + this.Close(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.Designer.cs new file mode 100644 index 00000000..7a176db1 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.Designer.cs @@ -0,0 +1,283 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ReadRequestListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.NodeNameCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.AttributeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.IndexRangeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataEncodingCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StatusCodeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SourceTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ServerTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RightPN = new System.Windows.Forms.Panel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.NewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewMI, + this.EditMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(153, 92); + this.PopupMenu.Opening += new System.ComponentModel.CancelEventHandler(this.PopupMenu_Opening); + // + // EditMI + // + this.EditMI.Name = "EditMI"; + this.EditMI.Size = new System.Drawing.Size(152, 22); + this.EditMI.Text = "Edit..."; + this.EditMI.Click += new System.EventHandler(this.EditMI_Click); + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.NodeNameCH, + this.AttributeCH, + this.IndexRangeCH, + this.DataEncodingCH, + this.DataTypeCH, + this.ValueCH, + this.StatusCodeCH, + this.SourceTimestampCH, + this.ServerTimestampCH}); + this.ResultsDV.ContextMenuStrip = this.PopupMenu; + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersVisible = false; + this.ResultsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsDV.Size = new System.Drawing.Size(754, 346); + this.ResultsDV.TabIndex = 0; + this.ResultsDV.DoubleClick += new System.EventHandler(this.EditMI_Click); + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Icon.Width = 19; + // + // NodeNameCH + // + this.NodeNameCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NodeNameCH.DataPropertyName = "NodeName"; + this.NodeNameCH.HeaderText = "Node"; + this.NodeNameCH.Name = "NodeNameCH"; + this.NodeNameCH.ReadOnly = true; + this.NodeNameCH.Width = 58; + // + // AttributeCH + // + this.AttributeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.AttributeCH.DataPropertyName = "Attribute"; + this.AttributeCH.HeaderText = "Attribute"; + this.AttributeCH.Name = "AttributeCH"; + this.AttributeCH.ReadOnly = true; + this.AttributeCH.Width = 71; + // + // IndexRangeCH + // + this.IndexRangeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.IndexRangeCH.DataPropertyName = "IndexRange"; + this.IndexRangeCH.HeaderText = "Index Range"; + this.IndexRangeCH.Name = "IndexRangeCH"; + this.IndexRangeCH.ReadOnly = true; + this.IndexRangeCH.Width = 93; + // + // DataEncodingCH + // + this.DataEncodingCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.DataEncodingCH.DataPropertyName = "DataEncoding"; + this.DataEncodingCH.HeaderText = "Data Encoding"; + this.DataEncodingCH.Name = "DataEncodingCH"; + this.DataEncodingCH.ReadOnly = true; + this.DataEncodingCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // DataTypeCH + // + this.DataTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataTypeCH.DataPropertyName = "DataType"; + this.DataTypeCH.HeaderText = "Data Type"; + this.DataTypeCH.Name = "DataTypeCH"; + this.DataTypeCH.ReadOnly = true; + this.DataTypeCH.Width = 82; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.ReadOnly = true; + this.ValueCH.Visible = false; + // + // StatusCodeCH + // + this.StatusCodeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.StatusCodeCH.DataPropertyName = "StatusCode"; + this.StatusCodeCH.HeaderText = "StatusCode"; + this.StatusCodeCH.Name = "StatusCodeCH"; + this.StatusCodeCH.ReadOnly = true; + this.StatusCodeCH.Visible = false; + // + // SourceTimestampCH + // + this.SourceTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SourceTimestampCH.DataPropertyName = "SourceTimestamp"; + this.SourceTimestampCH.HeaderText = "SourceTimestamp"; + this.SourceTimestampCH.Name = "SourceTimestampCH"; + this.SourceTimestampCH.ReadOnly = true; + this.SourceTimestampCH.Visible = false; + // + // ServerTimestampCH + // + this.ServerTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ServerTimestampCH.DataPropertyName = "ServerTimestamp"; + this.ServerTimestampCH.HeaderText = "ServerTimestamp"; + this.ServerTimestampCH.Name = "ServerTimestampCH"; + this.ServerTimestampCH.ReadOnly = true; + this.ServerTimestampCH.Visible = false; + // + // RightPN + // + this.RightPN.Controls.Add(this.ResultsDV); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(754, 346); + this.RightPN.TabIndex = 3; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(152, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // NewMI + // + this.NewMI.Name = "NewMI"; + this.NewMI.Size = new System.Drawing.Size(152, 22); + this.NewMI.Text = "New..."; + this.NewMI.Click += new System.EventHandler(this.NewMI_Click); + // + // ReadRequestListView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Name = "ReadRequestListView"; + this.Size = new System.Drawing.Size(754, 346); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ToolStripMenuItem EditMI; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn NodeNameCH; + private System.Windows.Forms.DataGridViewTextBoxColumn AttributeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn IndexRangeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataEncodingCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + private System.Windows.Forms.DataGridViewTextBoxColumn StatusCodeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn SourceTimestampCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ServerTimestampCH; + private System.Windows.Forms.ToolStripMenuItem NewMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.cs new file mode 100644 index 00000000..d73613f5 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.cs @@ -0,0 +1,343 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class ReadRequestListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public ReadRequestListViewCtrl() + { + InitializeComponent(); + ResultsDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Requests"); + + m_dataset.Tables[0].Columns.Add("ReadValueId", typeof(ReadValueId)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("NodeName", typeof(string)); + m_dataset.Tables[0].Columns.Add("Attribute", typeof(string)); + m_dataset.Tables[0].Columns.Add("IndexRange", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataEncoding", typeof(QualifiedName)); + m_dataset.Tables[0].Columns.Add("DataValue", typeof(DataValue)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + m_dataset.Tables[0].Columns.Add("StatusCode", typeof(StatusCode)); + m_dataset.Tables[0].Columns.Add("SourceTimestamp", typeof(string)); + m_dataset.Tables[0].Columns.Add("ServerTimestamp", typeof(string)); + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private bool m_showResults; + #endregion + + #region Public Members + /// + /// Changes the session used for the read request. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Adds a node to the read request. + /// + public void AddNodes(params ReadValueId[] nodesToRead) + { + if (nodesToRead != null) + { + for (int ii = 0; ii < nodesToRead.Length; ii++) + { + if (nodesToRead[ii] == null) + { + continue; + } + + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, nodesToRead[ii]); + m_dataset.Tables[0].Rows.Add(row); + } + } + } + + /// + /// Reads the values displayed in the control and moves to the display results state. + /// + public void Read() + { + if (m_session == null) + { + throw new ServiceResultException(StatusCodes.BadNotConnected); + } + + // build list of values to read. + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + foreach (DataGridViewRow row in ResultsDV.Rows) + { + DataRowView source = row.DataBoundItem as DataRowView; + ReadValueId value = (ReadValueId)source.Row[0]; + row.Selected = false; + nodesToRead.Add(value); + } + + // read the values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Both, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + IndexRangeCH.Visible = false; + DataEncodingCH.Visible = false; + DataTypeCH.Visible = true; + ValueCH.Visible = true; + StatusCodeCH.Visible = true; + SourceTimestampCH.Visible = true; + ServerTimestampCH.Visible = true; + m_showResults = true; + + // add the results to the display. + for (int ii = 0; ii < results.Count; ii++) + { + DataRowView source = ResultsDV.Rows[ii].DataBoundItem as DataRowView; + UpdateRow(source.Row, results[ii]); + } + } + + /// + /// Returns the grid to edit ReadValueIds state. + /// + public void Back() + { + IndexRangeCH.Visible = true; + DataEncodingCH.Visible = true; + DataTypeCH.Visible = false; + ValueCH.Visible = false; + StatusCodeCH.Visible = false; + SourceTimestampCH.Visible = false; + ServerTimestampCH.Visible = false; + m_showResults = false; + + // clear any selection. + foreach (DataGridViewRow row in ResultsDV.Rows) + { + row.Selected = false; + } + } + #endregion + + #region Private Methods + /// + /// Updates the row with the node to read. + /// + public void UpdateRow(DataRow row, DataValue value) + { + row[6] = value; + row[7] = (value.WrappedValue.TypeInfo != null) ? value.WrappedValue.TypeInfo.ToString() : String.Empty; + row[8] = value.WrappedValue; + row[9] = value.StatusCode; + row[10] = (value.SourceTimestamp != DateTime.MinValue) ? Utils.Format("{0:hh:mm:ss.fff}", value.SourceTimestamp.ToLocalTime()) : String.Empty; + row[11] = (value.ServerTimestamp != DateTime.MinValue) ? Utils.Format("{0:hh:mm:ss.fff}", value.ServerTimestamp.ToLocalTime()) : String.Empty; + } + + /// + /// Updates the row with the node to read. + /// + public void UpdateRow(DataRow row, ReadValueId nodeToRead) + { + row[0] = nodeToRead; + row[1] = ImageList.Images[ClientUtils.GetImageIndex(nodeToRead.AttributeId, null)]; + row[2] = (m_session != null) ? m_session.NodeCache.GetDisplayText(nodeToRead.NodeId) : Utils.ToString(nodeToRead.NodeId); + row[3] = Attributes.GetBrowseName(nodeToRead.AttributeId); + row[4] = nodeToRead.IndexRange; + row[5] = (nodeToRead.DataEncoding != null) ? nodeToRead.DataEncoding : QualifiedName.Null; + } + #endregion + + #region Event Handlers + private void PopupMenu_Opening(object sender, CancelEventArgs e) + { + NewMI.Visible = !m_showResults; + EditMI.Enabled = ResultsDV.SelectedRows.Count > 0; + DeleteMI.Enabled = ResultsDV.SelectedRows.Count > 0; + DeleteMI.Visible = !m_showResults; + } + + private void NewMI_Click(object sender, EventArgs e) + { + try + { + if (!m_showResults) + { + ReadValueId nodeToRead = null; + + // use the first selected row as a template. + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + ReadValueId value = (ReadValueId)source.Row[0]; + nodeToRead = (ReadValueId)value.MemberwiseClone(); + break; + } + + if (nodeToRead == null) + { + nodeToRead = new ReadValueId() { AttributeId = Attributes.Value }; + } + + // edit the parameters. + ReadValueId[] results = new EditReadValueIdDlg().ShowDialog(m_session, nodeToRead); + + if (results != null) + { + // add the new rows. + for (int ii = 0; ii < results.Length; ii++) + { + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, results[ii]); + m_dataset.Tables[0].Rows.Add(row); + } + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EditMI_Click(object sender, EventArgs e) + { + try + { + if (m_showResults) + { + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + ReadValueId nodeToRead = (ReadValueId)source.Row[0]; + DataValue value = (DataValue)source.Row[6]; + + new EditComplexValueDlg().ShowDialog( + m_session, + null, + 0, + null, + value, + true, + "View Read Result"); + + break; + } + } + else + { + List nodesToRead = new List(); + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + ReadValueId value = (ReadValueId)source.Row[0]; + nodesToRead.Add(value); + } + + ReadValueId[] results = new EditReadValueIdDlg().ShowDialog(m_session, nodesToRead.ToArray()); + + if (results != null) + { + for (int ii = 0; ii < results.Length; ii++) + { + DataRowView source = ResultsDV.SelectedRows[ii].DataBoundItem as DataRowView; + UpdateRow(source.Row, results[ii]); + } + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + if (!m_showResults) + { + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + source.Row.Delete(); + } + + m_dataset.AcceptChanges(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.resx new file mode 100644 index 00000000..7489fb79 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ReadRequestListViewCtrl.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 136, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.Designer.cs new file mode 100644 index 00000000..10176650 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.Designer.cs @@ -0,0 +1,149 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectLocaleDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.LocaleCB = new System.Windows.Forms.ComboBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.BottomPN.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(206, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 32); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(284, 30); + this.BottomPN.TabIndex = 0; + // + // LocaleCB + // + this.LocaleCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LocaleCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.LocaleCB.FormattingEnabled = true; + this.LocaleCB.Location = new System.Drawing.Point(3, 6); + this.LocaleCB.Name = "LocaleCB"; + this.LocaleCB.Size = new System.Drawing.Size(278, 21); + this.LocaleCB.TabIndex = 0; + // + // panel1 + // + this.panel1.Controls.Add(this.LocaleCB); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(284, 32); + this.panel1.TabIndex = 1; + // + // SelectLocaleDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(284, 62); + this.Controls.Add(this.panel1); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SelectLocaleDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select Locale"; + this.BottomPN.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.ComboBox LocaleCB; + private System.Windows.Forms.Panel panel1; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.cs new file mode 100644 index 00000000..1fcdd282 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.cs @@ -0,0 +1,109 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to select an area to use as an event filter. + /// + public partial class SelectLocaleDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public SelectLocaleDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private Session m_session; + #endregion + + #region Public Interface + /// + /// Displays the available areas in a tree view. + /// + /// The session. + /// + public string ShowDialog(Session session) + { + m_session = session; + + LocaleCB.Items.Clear(); + + // get the locales from the server. + DataValue value = m_session.ReadValue(VariableIds.Server_ServerCapabilities_LocaleIdArray); + + if (value != null) + { + string[] availableLocales = value.GetValue(null); + + if (availableLocales != null) + { + for (int ii = 0; ii < availableLocales.Length; ii++) + { + LocaleCB.Items.Add(availableLocales[ii]); + } + } + } + + // select the current locale. + if (LocaleCB.Items.Count > 0) + { + LocaleCB.SelectedIndex = 0; + } + + // display the dialog. + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return LocaleCB.SelectedItem as string; + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectLocaleDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.Designer.cs new file mode 100644 index 00000000..571fbdac --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.Designer.cs @@ -0,0 +1,89 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectNodeCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseBTN.Location = new System.Drawing.Point(0, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 24); + this.BrowseBTN.TabIndex = 0; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // SelectFileCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Name = "SelectFileCtrl"; + this.Size = new System.Drawing.Size(24, 24); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.cs new file mode 100644 index 00000000..564cb16d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.cs @@ -0,0 +1,197 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control with button that displays an open file dialog. + /// + public partial class SelectNodeCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public SelectNodeCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private event EventHandler m_NodeSelected; + private ReferenceDescription m_selectedNode; + #endregion + + #region Public Interface + /// + /// Gets or sets the current session. + /// + public Session Session { get; set; } + + /// + /// Gets or sets starting node. + /// + public NodeId RootId { get; set; } + + /// + /// Gets or sets the view to use. + /// + public ViewDescription View { get; set; } + + /// + /// Gets or sets the reference types to follow. + /// + public NodeId[] ReferenceTypeIds { get; set; } + + /// + /// Gets or sets the currently selected node. + /// + public NodeId SelectedNode + { + get + { + if (m_selectedNode != null) + { + return (NodeId)m_selectedNode.NodeId; + } + + return null; + } + + set + { + if (NodeControl != null) + { + NodeControl.Text = null; + + if (value != null && Session != null) + { + NodeControl.Text = Session.NodeCache.GetDisplayText(value); + } + } + + ReferenceDescription reference = new ReferenceDescription(); + reference.NodeId = value; + + if (Session != null) + { + INode node = Session.NodeCache.Find(value); + + if (node != null) + { + reference.BrowseName = node.BrowseName; + reference.DisplayName = node.DisplayName; + } + } + + m_selectedNode = reference; + } + } + + /// + /// Gets or sets the currently selected reference. + /// + public ReferenceDescription SelectedReference + { + get + { + return m_selectedNode; + } + + set + { + if (NodeControl != null) + { + NodeControl.Text = null; + + if (value != null && !NodeId.IsNull(value.NodeId)) + { + NodeControl.Text = value.ToString(); + } + } + + if (value == null || NodeId.IsNull(value.NodeId)) + { + m_selectedNode = null; + return; + } + + m_selectedNode = value; + } + } + + /// + /// Gets or sets the control that is stores with the current node. + /// + public Control NodeControl { get; set; } + + /// + /// Raised when a new node is selected. + /// + public event EventHandler NodeSelected + { + add { m_NodeSelected += value; } + remove { m_NodeSelected -= value; } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + ReferenceDescription reference = new SelectNodeDlg().ShowDialog( + Session, + RootId, + View, + null, + ReferenceTypeIds); + + if (reference != null) + { + SelectedReference = reference; + + if (m_NodeSelected != null) + { + m_NodeSelected(this, new EventArgs()); + } + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.Designer.cs new file mode 100644 index 00000000..41874666 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.Designer.cs @@ -0,0 +1,137 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectNodeDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseNodeCtrl(); + this.BottomPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(725, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 5; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 4; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 388); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(803, 30); + this.BottomPN.TabIndex = 9; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesListCollapsed = false; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 0); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(803, 388); + this.BrowseCTRL.SplitterDistance = 300; + this.BrowseCTRL.TabIndex = 10; + this.BrowseCTRL.View = null; + // + // SelectNodeDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(803, 418); + this.Controls.Add(this.BrowseCTRL); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SelectNodeDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select Node"; + this.BottomPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private BrowseNodeCtrl BrowseCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.cs new file mode 100644 index 00000000..112f8c0e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.cs @@ -0,0 +1,154 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to select an area to use as an event filter. + /// + public partial class SelectNodeDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public SelectNodeDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to select a node. + /// + public NodeId ShowDialog( + Session session, + NodeId rootId, + string caption, + params NodeId[] referenceTypeIds) + { + // set the caption. + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + // set default root. + if (NodeId.IsNull(rootId)) + { + rootId = Opc.Ua.ObjectIds.ObjectsFolder; + } + + // set default reference type. + if (referenceTypeIds == null) + { + referenceTypeIds = new NodeId[] { Opc.Ua.ReferenceTypeIds.HierarchicalReferences }; + } + + // initialize the control. + BrowseCTRL.Initialize(session, rootId, referenceTypeIds); + + // display the dialog. + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + // convert to a node id. + ReferenceDescription reference = BrowseCTRL.SelectedNode; + + if (reference != null && !reference.NodeId.IsAbsolute) + { + return (NodeId)reference.NodeId; + } + + return null; + } + + /// + /// Prompts the user to select a node. + /// + public ReferenceDescription ShowDialog( + Session session, + NodeId rootId, + ViewDescription view, + string caption, + params NodeId[] referenceTypeIds) + { + // set the caption. + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + // set default root. + if (NodeId.IsNull(rootId)) + { + rootId = Opc.Ua.ObjectIds.ObjectsFolder; + } + + // set default reference type. + if (referenceTypeIds == null) + { + referenceTypeIds = new NodeId[] { Opc.Ua.ReferenceTypeIds.HierarchicalReferences }; + } + + // initialize the control. + BrowseCTRL.Initialize(session, rootId, referenceTypeIds); + BrowseCTRL.View = view; + + // display the dialog. + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return BrowseCTRL.SelectedNode; + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SelectNodeDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.Designer.cs new file mode 100644 index 00000000..aadc0200 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.Designer.cs @@ -0,0 +1,175 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SetFilterOperatorDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.TableLayoutPanel(); + this.FilterOperatorLB = new System.Windows.Forms.Label(); + this.FilterOperatorCB = new System.Windows.Forms.ComboBox(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(207, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 28); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(284, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.ColumnCount = 2; + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.MainPN.Controls.Add(this.FilterOperatorLB, 0, 0); + this.MainPN.Controls.Add(this.FilterOperatorCB, 1, 0); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.RowCount = 2; + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.Size = new System.Drawing.Size(284, 28); + this.MainPN.TabIndex = 0; + // + // FilterOperatorLB + // + this.FilterOperatorLB.AutoSize = true; + this.FilterOperatorLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterOperatorLB.Location = new System.Drawing.Point(3, 0); + this.FilterOperatorLB.Name = "FilterOperatorLB"; + this.FilterOperatorLB.Size = new System.Drawing.Size(73, 27); + this.FilterOperatorLB.TabIndex = 2; + this.FilterOperatorLB.Text = "Filter Operator"; + this.FilterOperatorLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FilterOperatorCB + // + this.FilterOperatorCB.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterOperatorCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.FilterOperatorCB.FormattingEnabled = true; + this.FilterOperatorCB.Location = new System.Drawing.Point(82, 3); + this.FilterOperatorCB.Name = "FilterOperatorCB"; + this.FilterOperatorCB.Size = new System.Drawing.Size(200, 21); + this.FilterOperatorCB.TabIndex = 7; + // + // SetFilterOperatorDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(284, 58); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SetFilterOperatorDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Set Filter Operator"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.TableLayoutPanel MainPN; + private System.Windows.Forms.Label FilterOperatorLB; + private System.Windows.Forms.ComboBox FilterOperatorCB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.cs new file mode 100644 index 00000000..9ae1dd1a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.cs @@ -0,0 +1,95 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to select an area to use as an event filter. + /// + public partial class SetFilterOperatorDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public SetFilterOperatorDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + FilterOperatorCB.Items.Add(FilterOperator.IsNull); + FilterOperatorCB.Items.Add(FilterOperator.Equals); + FilterOperatorCB.Items.Add(FilterOperator.GreaterThan); + FilterOperatorCB.Items.Add(FilterOperator.LessThan); + FilterOperatorCB.Items.Add(FilterOperator.GreaterThanOrEqual); + FilterOperatorCB.Items.Add(FilterOperator.LessThanOrEqual); + FilterOperatorCB.Items.Add(FilterOperator.Like); + FilterOperatorCB.Items.Add(FilterOperator.Not); + FilterOperatorCB.Items.Add(FilterOperator.OfType); + FilterOperatorCB.Items.Add(FilterOperator.BitwiseAnd); + FilterOperatorCB.Items.Add(FilterOperator.BitwiseOr); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Displays the available areas in a tree view. + /// + public bool ShowDialog(ref FilterOperator filterOperator) + { + FilterOperatorCB.SelectedItem = filterOperator; + + // display the dialog. + if (base.ShowDialog() != DialogResult.OK) + { + return false; + } + + filterOperator = (FilterOperator)FilterOperatorCB.SelectedItem; + return true; + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetFilterOperatorDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.Designer.cs new file mode 100644 index 00000000..d36f5591 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.Designer.cs @@ -0,0 +1,251 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SetTypeDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.TableLayoutPanel(); + this.ErrorHandlingLB = new System.Windows.Forms.Label(); + this.ArrayDimensionsLB = new System.Windows.Forms.Label(); + this.StructureTypeLB = new System.Windows.Forms.Label(); + this.ArrayDimensionsTB = new System.Windows.Forms.TextBox(); + this.StructureTypeTB = new System.Windows.Forms.TextBox(); + this.ErrorHandlingCB = new System.Windows.Forms.ComboBox(); + this.StructureTypeBTN = new Opc.Ua.Client.Controls.SelectNodeCtrl(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(324, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 98); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(401, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.ColumnCount = 3; + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.Controls.Add(this.ErrorHandlingLB, 0, 3); + this.MainPN.Controls.Add(this.ArrayDimensionsLB, 0, 2); + this.MainPN.Controls.Add(this.StructureTypeLB, 0, 1); + this.MainPN.Controls.Add(this.ArrayDimensionsTB, 1, 2); + this.MainPN.Controls.Add(this.StructureTypeTB, 1, 1); + this.MainPN.Controls.Add(this.ErrorHandlingCB, 1, 3); + this.MainPN.Controls.Add(this.StructureTypeBTN, 2, 1); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.RowCount = 5; + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.Size = new System.Drawing.Size(401, 98); + this.MainPN.TabIndex = 0; + // + // ErrorHandlingLB + // + this.ErrorHandlingLB.AutoSize = true; + this.ErrorHandlingLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ErrorHandlingLB.Location = new System.Drawing.Point(3, 48); + this.ErrorHandlingLB.Name = "ErrorHandlingLB"; + this.ErrorHandlingLB.Size = new System.Drawing.Size(88, 24); + this.ErrorHandlingLB.TabIndex = 7; + this.ErrorHandlingLB.Text = "Error Handling"; + this.ErrorHandlingLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ArrayDimensionsLB + // + this.ArrayDimensionsLB.AutoSize = true; + this.ArrayDimensionsLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ArrayDimensionsLB.Location = new System.Drawing.Point(3, 24); + this.ArrayDimensionsLB.Name = "ArrayDimensionsLB"; + this.ArrayDimensionsLB.Size = new System.Drawing.Size(88, 24); + this.ArrayDimensionsLB.TabIndex = 5; + this.ArrayDimensionsLB.Text = "Array Dimensions"; + this.ArrayDimensionsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StructureTypeLB + // + this.StructureTypeLB.AutoSize = true; + this.StructureTypeLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.StructureTypeLB.Location = new System.Drawing.Point(3, 0); + this.StructureTypeLB.Name = "StructureTypeLB"; + this.StructureTypeLB.Size = new System.Drawing.Size(88, 24); + this.StructureTypeLB.TabIndex = 2; + this.StructureTypeLB.Text = "Structure Type"; + this.StructureTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ArrayDimensionsTB + // + this.ArrayDimensionsTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ArrayDimensionsTB.Location = new System.Drawing.Point(96, 26); + this.ArrayDimensionsTB.Margin = new System.Windows.Forms.Padding(2); + this.ArrayDimensionsTB.Name = "ArrayDimensionsTB"; + this.ArrayDimensionsTB.Size = new System.Drawing.Size(278, 20); + this.ArrayDimensionsTB.TabIndex = 6; + // + // StructureTypeTB + // + this.StructureTypeTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StructureTypeTB.Location = new System.Drawing.Point(96, 2); + this.StructureTypeTB.Margin = new System.Windows.Forms.Padding(2); + this.StructureTypeTB.Name = "StructureTypeTB"; + this.StructureTypeTB.ReadOnly = true; + this.StructureTypeTB.Size = new System.Drawing.Size(278, 20); + this.StructureTypeTB.TabIndex = 3; + // + // ErrorHandlingCB + // + this.ErrorHandlingCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ErrorHandlingCB.FormattingEnabled = true; + this.ErrorHandlingCB.Location = new System.Drawing.Point(96, 50); + this.ErrorHandlingCB.Margin = new System.Windows.Forms.Padding(2, 2, 2, 1); + this.ErrorHandlingCB.Name = "ErrorHandlingCB"; + this.ErrorHandlingCB.Size = new System.Drawing.Size(153, 21); + this.ErrorHandlingCB.TabIndex = 8; + // + // StructureTypeBTN + // + this.StructureTypeBTN.Location = new System.Drawing.Point(376, 0); + this.StructureTypeBTN.Margin = new System.Windows.Forms.Padding(0); + this.StructureTypeBTN.Name = "StructureTypeBTN"; + this.StructureTypeBTN.NodeControl = this.StructureTypeTB; + this.StructureTypeBTN.ReferenceTypeIds = null; + this.StructureTypeBTN.RootId = null; + this.StructureTypeBTN.SelectedNode = null; + this.StructureTypeBTN.SelectedReference = null; + this.StructureTypeBTN.Session = null; + this.StructureTypeBTN.Size = new System.Drawing.Size(24, 24); + this.StructureTypeBTN.TabIndex = 4; + this.StructureTypeBTN.View = null; + // + // SetTypeDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(401, 128); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SetTypeDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Set Data Type and Array Size"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.TextBox ArrayDimensionsTB; + private System.Windows.Forms.TableLayoutPanel MainPN; + private System.Windows.Forms.Label ErrorHandlingLB; + private System.Windows.Forms.Label ArrayDimensionsLB; + private System.Windows.Forms.Label StructureTypeLB; + private System.Windows.Forms.TextBox StructureTypeTB; + private System.Windows.Forms.ComboBox ErrorHandlingCB; + private SelectNodeCtrl StructureTypeBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.cs new file mode 100644 index 00000000..bb31723e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.cs @@ -0,0 +1,203 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to select an area to use as an event filter. + /// + public partial class SetTypeDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public SetTypeDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + ErrorHandlingCB.Items.Add("Use Default Value"); + ErrorHandlingCB.Items.Add("Throw Exception"); + + StructureTypeBTN.RootId = Opc.Ua.DataTypeIds.Structure; + StructureTypeBTN.ReferenceTypeIds = new NodeId[] { Opc.Ua.ReferenceTypeIds.HasSubtype }; + } + #endregion + + #region Private Fields + private SetTypeResult m_result; + private TypeInfo m_typeInfo; + #endregion + + #region SetTypeResult Class + /// + /// The values updated by the dialog. + /// + public class SetTypeResult + { + /// + /// The new type info. + /// + public TypeInfo TypeInfo { get; set; } + + /// + /// The data type id for structured types. + /// + public NodeId DataTypeId { get; set; } + + /// + /// The dimensions for array types. + /// + public int[] ArrayDimensions { get; set; } + + /// + /// If true then the default value will be used if a conversion error occurs. + /// + public bool UseDefaultOnError { get; set; } + } + #endregion + + #region Public Interface + /// + /// Displays the available areas in a tree view. + /// + public SetTypeResult ShowDialog(TypeInfo typeInfo, int[] dimensions) + { + m_typeInfo = typeInfo; + + StructureTypeLB.Visible = false; + StructureTypeTB.Visible = false; + StructureTypeBTN.Visible = false; + ArrayDimensionsLB.Visible = dimensions != null; + ArrayDimensionsTB.Visible = dimensions != null; + + ErrorHandlingCB.SelectedIndex = 0; + + StringBuilder builder = new StringBuilder(); + + // display the current dimensions. + if (typeInfo.ValueRank >= 0 && dimensions != null) + { + for (int ii = 0; ii < dimensions.Length; ii++) + { + if (builder.Length > 0) + { + builder.Append(", "); + } + + builder.Append(dimensions[ii]); + } + } + + ArrayDimensionsTB.Text = builder.ToString(); + + // display the dialog. + if (base.ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_result; + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + // parse the array dimensions. + string text = ArrayDimensionsTB.Text.Trim(); + List dimensions = new List(); + + if (!String.IsNullOrEmpty(text)) + { + int dimension = 0; + const string digits = "0123456789"; + + for (int ii = 0; ii < text.Length; ii++) + { + if (Char.IsWhiteSpace(text, ii)) + { + continue; + } + + if (text[ii] == ',') + { + dimensions.Add(dimension); + dimension = 0; + continue; + } + + if (!Char.IsDigit(text, ii)) + { + throw new FormatException("Invalid character in array index. Use numbers seperated by commas."); + } + + dimension *= 10; + dimension += digits.IndexOf(text[ii]); + } + + dimensions.Add(dimension); + } + + // save the result. + int valueRank = (dimensions.Count < 1) ? ValueRanks.Scalar : dimensions.Count; + + m_result = new SetTypeResult(); + m_result.TypeInfo = new TypeInfo(m_typeInfo.BuiltInType, valueRank); + m_result.ArrayDimensions = dimensions.ToArray(); + m_result.UseDefaultOnError = ErrorHandlingCB.SelectedIndex == 0; + + if (m_typeInfo.BuiltInType == BuiltInType.ExtensionObject) + { + m_result.DataTypeId = StructureTypeBTN.SelectedNode; + } + + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SetTypeDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.Designer.cs new file mode 100644 index 00000000..181f649b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.Designer.cs @@ -0,0 +1,147 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SubscribeDataDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonPN = new System.Windows.Forms.FlowLayoutPanel(); + this.CloseBTN = new System.Windows.Forms.Button(); + this.NextBTN = new System.Windows.Forms.Button(); + this.BackBTN = new System.Windows.Forms.Button(); + this.SubscribeRequestCTRL = new Opc.Ua.Client.Controls.SubscribeDataListViewCtrl(); + this.ButtonPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonPN + // + this.ButtonPN.Controls.Add(this.CloseBTN); + this.ButtonPN.Controls.Add(this.NextBTN); + this.ButtonPN.Controls.Add(this.BackBTN); + this.ButtonPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonPN.Location = new System.Drawing.Point(0, 248); + this.ButtonPN.Name = "ButtonPN"; + this.ButtonPN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ButtonPN.Size = new System.Drawing.Size(784, 29); + this.ButtonPN.TabIndex = 1; + // + // CloseBTN + // + this.CloseBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CloseBTN.Location = new System.Drawing.Point(706, 3); + this.CloseBTN.Name = "CloseBTN"; + this.CloseBTN.Size = new System.Drawing.Size(75, 23); + this.CloseBTN.TabIndex = 0; + this.CloseBTN.Text = "Close"; + this.CloseBTN.UseVisualStyleBackColor = true; + this.CloseBTN.Click += new System.EventHandler(this.CloseBTN_Click); + // + // NextBTN + // + this.NextBTN.Location = new System.Drawing.Point(625, 3); + this.NextBTN.Name = "NextBTN"; + this.NextBTN.Size = new System.Drawing.Size(75, 23); + this.NextBTN.TabIndex = 1; + this.NextBTN.Text = "Next"; + this.NextBTN.UseVisualStyleBackColor = true; + this.NextBTN.Click += new System.EventHandler(this.NextBTN_Click); + // + // BackBTN + // + this.BackBTN.Location = new System.Drawing.Point(544, 3); + this.BackBTN.Name = "BackBTN"; + this.BackBTN.Size = new System.Drawing.Size(75, 23); + this.BackBTN.TabIndex = 2; + this.BackBTN.Text = "Back"; + this.BackBTN.UseVisualStyleBackColor = true; + this.BackBTN.Visible = false; + this.BackBTN.Click += new System.EventHandler(this.BackBTN_Click); + // + // SubscribeRequestCTRL + // + this.SubscribeRequestCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.SubscribeRequestCTRL.Location = new System.Drawing.Point(0, 0); + this.SubscribeRequestCTRL.Name = "SubscribeRequestCTRL"; + this.SubscribeRequestCTRL.Size = new System.Drawing.Size(784, 248); + this.SubscribeRequestCTRL.TabIndex = 0; + // + // SubscribeDataDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 277); + this.Controls.Add(this.SubscribeRequestCTRL); + this.Controls.Add(this.ButtonPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SubscribeDataDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Data Subscription"; + this.ButtonPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private SubscribeDataListViewCtrl SubscribeRequestCTRL; + private System.Windows.Forms.FlowLayoutPanel ButtonPN; + private System.Windows.Forms.Button CloseBTN; + private System.Windows.Forms.Button NextBTN; + private System.Windows.Forms.Button BackBTN; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.cs new file mode 100644 index 00000000..9d920a9b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.cs @@ -0,0 +1,155 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to edit and issue read requests. + /// + public partial class SubscribeDataDlg : Form, ISessionForm + { + #region Constructors + /// + /// Creates an empty form. + /// + public SubscribeDataDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private Session m_session; + #endregion + + #region Public Interface + /// + /// Changes the session used for the subscription. + /// + public void ChangeSession(Session session) + { + SubscribeRequestCTRL.ChangeSession(session); + m_session = session; + } + + /// + /// Returns true if the dialog has an active subscription assigned. + /// + public bool HasSubscription + { + get + { + return SubscribeRequestCTRL.HasSubscription; + } + } + + /// + /// Set the subscription managed by the control. + /// + public void SetSubscription(Subscription subscription) + { + SubscribeRequestCTRL.SetSubscription(subscription); + NextBTN.Visible = SubscribeRequestCTRL.CanCallNext; + BackBTN.Visible = SubscribeRequestCTRL.CanCallBack; + } + + /// + /// Adds the items to monitor. + /// + public void AddItems(params ReadValueId[] nodesToRead) + { + SubscribeRequestCTRL.AddItems(nodesToRead); + NextBTN.Visible = SubscribeRequestCTRL.CanCallNext; + BackBTN.Visible = SubscribeRequestCTRL.CanCallBack; + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + private void NextBTN_Click(object sender, EventArgs e) + { + try + { + SubscribeRequestCTRL.Next(); + NextBTN.Visible = SubscribeRequestCTRL.CanCallNext; + BackBTN.Visible = SubscribeRequestCTRL.CanCallBack; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BackBTN_Click(object sender, EventArgs e) + { + try + { + SubscribeRequestCTRL.Back(); + NextBTN.Visible = SubscribeRequestCTRL.CanCallNext; + BackBTN.Visible = SubscribeRequestCTRL.CanCallBack; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CloseBTN_Click(object sender, EventArgs e) + { + try + { + if (this.Modal) + { + DialogResult = DialogResult.Cancel; + } + else + { + this.Close(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.Designer.cs new file mode 100644 index 00000000..6afed892 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.Designer.cs @@ -0,0 +1,451 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SubscribeDataListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubscribeDataListViewCtrl)); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.NewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewValueMI = new System.Windows.Forms.ToolStripMenuItem(); + this.SetMonitoringModeMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.NodeAttributeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.IndexRangeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataEncodingCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MonitoringModeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SamplingIntervalCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.QueueSizeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DiscardOldestCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FilterCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OperationStatusCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StatusCodeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SourceTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ServerTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RightPN = new System.Windows.Forms.Panel(); + this.StatusCTRL = new System.Windows.Forms.StatusStrip(); + this.SubscriptionStateLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.SubscriptionStateTB = new System.Windows.Forms.ToolStripDropDownButton(); + this.Subscription_EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.SequenceNumberLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.SequenceNumberTB = new System.Windows.Forms.ToolStripStatusLabel(); + this.LastNotificationLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.LastNotificationTB = new System.Windows.Forms.ToolStripStatusLabel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.RightPN.SuspendLayout(); + this.StatusCTRL.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewMI, + this.EditMI, + this.DeleteMI, + this.ViewValueMI, + this.SetMonitoringModeMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(197, 114); + this.PopupMenu.Opening += new System.ComponentModel.CancelEventHandler(this.PopupMenu_Opening); + // + // NewMI + // + this.NewMI.Name = "NewMI"; + this.NewMI.Size = new System.Drawing.Size(196, 22); + this.NewMI.Text = "New..."; + this.NewMI.Click += new System.EventHandler(this.NewMI_Click); + // + // EditMI + // + this.EditMI.Name = "EditMI"; + this.EditMI.Size = new System.Drawing.Size(196, 22); + this.EditMI.Text = "Edit..."; + this.EditMI.Click += new System.EventHandler(this.EditMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(196, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // ViewValueMI + // + this.ViewValueMI.Name = "ViewValueMI"; + this.ViewValueMI.Size = new System.Drawing.Size(196, 22); + this.ViewValueMI.Text = "View Value...."; + this.ViewValueMI.Click += new System.EventHandler(this.ViewValueMI_Click); + // + // SetMonitoringModeMI + // + this.SetMonitoringModeMI.Name = "SetMonitoringModeMI"; + this.SetMonitoringModeMI.Size = new System.Drawing.Size(196, 22); + this.SetMonitoringModeMI.Text = "Set Monitoring Mode..."; + this.SetMonitoringModeMI.Click += new System.EventHandler(this.SetMonitoringModeMI_Click); + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.NodeAttributeCH, + this.IndexRangeCH, + this.DataEncodingCH, + this.MonitoringModeCH, + this.SamplingIntervalCH, + this.QueueSizeCH, + this.DiscardOldestCH, + this.FilterCH, + this.OperationStatusCH, + this.DataTypeCH, + this.ValueCH, + this.StatusCodeCH, + this.SourceTimestampCH, + this.ServerTimestampCH}); + this.ResultsDV.ContextMenuStrip = this.PopupMenu; + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersVisible = false; + this.ResultsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsDV.Size = new System.Drawing.Size(754, 346); + this.ResultsDV.TabIndex = 0; + this.ResultsDV.DoubleClick += new System.EventHandler(this.ResultsDV_DoubleClick); + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Icon.Width = 19; + // + // NodeAttributeCH + // + this.NodeAttributeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NodeAttributeCH.DataPropertyName = "NodeAttribute"; + this.NodeAttributeCH.HeaderText = "Item Name"; + this.NodeAttributeCH.Name = "NodeAttributeCH"; + this.NodeAttributeCH.ReadOnly = true; + this.NodeAttributeCH.Width = 83; + // + // IndexRangeCH + // + this.IndexRangeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.IndexRangeCH.DataPropertyName = "IndexRange"; + this.IndexRangeCH.HeaderText = "Index Range"; + this.IndexRangeCH.Name = "IndexRangeCH"; + this.IndexRangeCH.ReadOnly = true; + this.IndexRangeCH.Visible = false; + // + // DataEncodingCH + // + this.DataEncodingCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataEncodingCH.DataPropertyName = "DataEncoding"; + this.DataEncodingCH.HeaderText = "Data Encoding"; + this.DataEncodingCH.Name = "DataEncodingCH"; + this.DataEncodingCH.ReadOnly = true; + this.DataEncodingCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.DataEncodingCH.Visible = false; + // + // MonitoringModeCH + // + this.MonitoringModeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.MonitoringModeCH.DataPropertyName = "MonitoringMode"; + this.MonitoringModeCH.HeaderText = "Monitoring Mode"; + this.MonitoringModeCH.Name = "MonitoringModeCH"; + this.MonitoringModeCH.ReadOnly = true; + this.MonitoringModeCH.Width = 111; + // + // SamplingIntervalCH + // + this.SamplingIntervalCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SamplingIntervalCH.DataPropertyName = "SamplingInterval"; + this.SamplingIntervalCH.HeaderText = "Sampling Interval"; + this.SamplingIntervalCH.Name = "SamplingIntervalCH"; + this.SamplingIntervalCH.Visible = false; + // + // QueueSizeCH + // + this.QueueSizeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.QueueSizeCH.DataPropertyName = "QueueSize"; + this.QueueSizeCH.HeaderText = "Queue Size"; + this.QueueSizeCH.Name = "QueueSizeCH"; + this.QueueSizeCH.ReadOnly = true; + this.QueueSizeCH.Visible = false; + // + // DiscardOldestCH + // + this.DiscardOldestCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DiscardOldestCH.DataPropertyName = "DiscardOldest"; + this.DiscardOldestCH.HeaderText = "Discard Oldest"; + this.DiscardOldestCH.Name = "DiscardOldestCH"; + this.DiscardOldestCH.ReadOnly = true; + this.DiscardOldestCH.Visible = false; + // + // FilterCH + // + this.FilterCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.FilterCH.DataPropertyName = "Filter"; + this.FilterCH.HeaderText = "Filter"; + this.FilterCH.Name = "FilterCH"; + this.FilterCH.ReadOnly = true; + this.FilterCH.Visible = false; + // + // OperationStatusCH + // + this.OperationStatusCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OperationStatusCH.DataPropertyName = "OperationStatus"; + this.OperationStatusCH.HeaderText = "Operation Status"; + this.OperationStatusCH.Name = "OperationStatusCH"; + this.OperationStatusCH.ReadOnly = true; + this.OperationStatusCH.Visible = false; + // + // DataTypeCH + // + this.DataTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataTypeCH.DataPropertyName = "DataType"; + this.DataTypeCH.HeaderText = "Data Type"; + this.DataTypeCH.Name = "DataTypeCH"; + this.DataTypeCH.ReadOnly = true; + this.DataTypeCH.Visible = false; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.ReadOnly = true; + this.ValueCH.Visible = false; + // + // StatusCodeCH + // + this.StatusCodeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.StatusCodeCH.DataPropertyName = "StatusCode"; + this.StatusCodeCH.HeaderText = "Status"; + this.StatusCodeCH.Name = "StatusCodeCH"; + this.StatusCodeCH.ReadOnly = true; + this.StatusCodeCH.Visible = false; + // + // SourceTimestampCH + // + this.SourceTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SourceTimestampCH.DataPropertyName = "SourceTimestamp"; + this.SourceTimestampCH.HeaderText = "Source Time"; + this.SourceTimestampCH.Name = "SourceTimestampCH"; + this.SourceTimestampCH.ReadOnly = true; + this.SourceTimestampCH.Visible = false; + // + // ServerTimestampCH + // + this.ServerTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ServerTimestampCH.DataPropertyName = "ServerTimestamp"; + this.ServerTimestampCH.HeaderText = "Server Time"; + this.ServerTimestampCH.Name = "ServerTimestampCH"; + this.ServerTimestampCH.ReadOnly = true; + this.ServerTimestampCH.Visible = false; + // + // RightPN + // + this.RightPN.Controls.Add(this.StatusCTRL); + this.RightPN.Controls.Add(this.ResultsDV); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(754, 346); + this.RightPN.TabIndex = 3; + // + // StatusCTRL + // + this.StatusCTRL.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SubscriptionStateLB, + this.SubscriptionStateTB, + this.SequenceNumberLB, + this.SequenceNumberTB, + this.LastNotificationLB, + this.LastNotificationTB}); + this.StatusCTRL.Location = new System.Drawing.Point(0, 324); + this.StatusCTRL.Name = "StatusCTRL"; + this.StatusCTRL.Size = new System.Drawing.Size(754, 22); + this.StatusCTRL.SizingGrip = false; + this.StatusCTRL.TabIndex = 1; + // + // SubscriptionStateLB + // + this.SubscriptionStateLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.SubscriptionStateLB.Name = "SubscriptionStateLB"; + this.SubscriptionStateLB.Size = new System.Drawing.Size(76, 17); + this.SubscriptionStateLB.Text = "Subscription"; + // + // SubscriptionStateTB + // + this.SubscriptionStateTB.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.SubscriptionStateTB.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Subscription_EditMI}); + this.SubscriptionStateTB.Image = ((System.Drawing.Image)(resources.GetObject("SubscriptionStateTB.Image"))); + this.SubscriptionStateTB.ImageTransparentColor = System.Drawing.Color.Magenta; + this.SubscriptionStateTB.Name = "SubscriptionStateTB"; + this.SubscriptionStateTB.Size = new System.Drawing.Size(67, 20); + this.SubscriptionStateTB.Text = ""; + // + // Subscription_EditMI + // + this.Subscription_EditMI.Name = "Subscription_EditMI"; + this.Subscription_EditMI.Size = new System.Drawing.Size(152, 22); + this.Subscription_EditMI.Text = "Edit..."; + this.Subscription_EditMI.Click += new System.EventHandler(this.Subscription_EditMI_Click); + // + // SequenceNumberLB + // + this.SequenceNumberLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.SequenceNumberLB.Name = "SequenceNumberLB"; + this.SequenceNumberLB.Size = new System.Drawing.Size(111, 17); + this.SequenceNumberLB.Text = "Sequence Number"; + // + // SequenceNumberTB + // + this.SequenceNumberTB.Name = "SequenceNumberTB"; + this.SequenceNumberTB.Size = new System.Drawing.Size(44, 17); + this.SequenceNumberTB.Text = "<###>"; + // + // LastNotificationLB + // + this.LastNotificationLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.LastNotificationLB.Name = "LastNotificationLB"; + this.LastNotificationLB.Size = new System.Drawing.Size(98, 17); + this.LastNotificationLB.Text = "Last Notification"; + // + // LastNotificationTB + // + this.LastNotificationTB.Name = "LastNotificationTB"; + this.LastNotificationTB.Size = new System.Drawing.Size(75, 17); + this.LastNotificationTB.Text = ""; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // SubscribeDataListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Name = "SubscribeDataListViewCtrl"; + this.Size = new System.Drawing.Size(754, 346); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.RightPN.ResumeLayout(false); + this.RightPN.PerformLayout(); + this.StatusCTRL.ResumeLayout(false); + this.StatusCTRL.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ToolStripMenuItem EditMI; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.ToolStripMenuItem NewMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private System.Windows.Forms.ToolStripMenuItem ViewValueMI; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn NodeAttributeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn IndexRangeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataEncodingCH; + private System.Windows.Forms.DataGridViewTextBoxColumn MonitoringModeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn SamplingIntervalCH; + private System.Windows.Forms.DataGridViewTextBoxColumn QueueSizeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DiscardOldestCH; + private System.Windows.Forms.DataGridViewTextBoxColumn FilterCH; + private System.Windows.Forms.DataGridViewTextBoxColumn OperationStatusCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + private System.Windows.Forms.DataGridViewTextBoxColumn StatusCodeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn SourceTimestampCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ServerTimestampCH; + private System.Windows.Forms.ToolStripMenuItem SetMonitoringModeMI; + private System.Windows.Forms.StatusStrip StatusCTRL; + private System.Windows.Forms.ToolStripStatusLabel SubscriptionStateLB; + private System.Windows.Forms.ToolStripDropDownButton SubscriptionStateTB; + private System.Windows.Forms.ToolStripMenuItem Subscription_EditMI; + private System.Windows.Forms.ToolStripStatusLabel SequenceNumberLB; + private System.Windows.Forms.ToolStripStatusLabel SequenceNumberTB; + private System.Windows.Forms.ToolStripStatusLabel LastNotificationLB; + private System.Windows.Forms.ToolStripStatusLabel LastNotificationTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.cs new file mode 100644 index 00000000..b7632d2d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.cs @@ -0,0 +1,762 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class SubscribeDataListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public SubscribeDataListViewCtrl() + { + InitializeComponent(); + m_PublishStatusChanged = new EventHandler(OnPublishStatusChanged); + ResultsDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Requests"); + + m_dataset.Tables[0].Columns.Add("MonitoredItem", typeof(MonitoredItem)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("NodeAttribute", typeof(string)); + m_dataset.Tables[0].Columns.Add("IndexRange", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataEncoding", typeof(QualifiedName)); + m_dataset.Tables[0].Columns.Add("MonitoringMode", typeof(MonitoringMode)); + m_dataset.Tables[0].Columns.Add("SamplingInterval", typeof(double)); + m_dataset.Tables[0].Columns.Add("QueueSize", typeof(uint)); + m_dataset.Tables[0].Columns.Add("DiscardOldest", typeof(bool)); + m_dataset.Tables[0].Columns.Add("Filter", typeof(MonitoringFilter)); + m_dataset.Tables[0].Columns.Add("OperationStatus", typeof(StatusCode)); + m_dataset.Tables[0].Columns.Add("DataValue", typeof(DataValue)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + m_dataset.Tables[0].Columns.Add("StatusCode", typeof(StatusCode)); + m_dataset.Tables[0].Columns.Add("SourceTimestamp", typeof(string)); + m_dataset.Tables[0].Columns.Add("ServerTimestamp", typeof(string)); + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private Subscription m_subscription; + private DisplayState m_state; + private EditComplexValueDlg m_EditComplexValueDlg; + private EventHandler m_PublishStatusChanged; + #endregion + + #region Stage Enum + /// + /// The diplays state. + /// + private enum DisplayState + { + EditItems, + ApplyChanges, + ViewUpdates + } + #endregion + + #region Public Members + /// + /// Changes the session used. + /// + public void ChangeSession(Session session) + { + if (!Object.ReferenceEquals(session, m_session)) + { + m_session = session; + + if (m_subscription != null) + { + m_subscription.PublishStatusChanged -= m_PublishStatusChanged; + m_subscription.FastDataChangeCallback = null; + m_subscription = null; + } + + if (m_session != null) + { + // find new subscription. + foreach (Subscription subscription in m_session.Subscriptions) + { + if (Object.ReferenceEquals(subscription.Handle, this)) + { + m_subscription = subscription; + m_subscription.PublishStatusChanged += m_PublishStatusChanged; + m_subscription.FastDataChangeCallback = OnDataChange; + break; + } + } + + // update references to monitored items. + if (m_subscription != null) + { + foreach (MonitoredItem monitoredItem in m_subscription.MonitoredItems) + { + DataRow row = (DataRow)monitoredItem.Handle; + row[0] = monitoredItem; + + if (m_EditComplexValueDlg != null) + { + MonitoredItem oldMonitoredItem = (MonitoredItem)m_EditComplexValueDlg.Tag; + + if (Object.ReferenceEquals(oldMonitoredItem.Handle, monitoredItem.Handle)) + { + m_EditComplexValueDlg.Tag = monitoredItem; + } + } + } + } + } + + if (m_EditComplexValueDlg != null) + { + m_EditComplexValueDlg.ChangeSession(session); + } + } + } + + /// + /// Returns true if the control has an active subscription assigned. + /// + public bool HasSubscription + { + get + { + return m_subscription != null; + } + } + + /// + /// Sets the subscription used with the control. + /// + public void SetSubscription(Subscription subscription) + { + if (m_subscription != null) + { + m_subscription.PublishStatusChanged -= m_PublishStatusChanged; + m_subscription.FastDataChangeCallback = null; + m_subscription = null; + } + + m_session = null; + m_subscription = subscription; + m_subscription.DisableMonitoredItemCache = true; + m_subscription.PublishStatusChanged += m_PublishStatusChanged; + m_subscription.FastDataChangeCallback = OnDataChange; + m_dataset.Tables[0].Rows.Clear(); + + if (m_subscription != null) + { + m_session = subscription.Session; + m_subscription.Handle = this; + } + } + + /// + /// Adds the monitored items to the subscription. + /// + public void AddItems(params ReadValueId[] itemsToMonitor) + { + if (m_subscription == null) + { + throw new ServiceResultException(StatusCodes.BadNoSubscription); + } + + if (itemsToMonitor != null) + { + SetDisplayState(DisplayState.EditItems); + + for (int ii = 0; ii < itemsToMonitor.Length; ii++) + { + if (itemsToMonitor[ii] == null) + { + continue; + } + + DataRow row = m_dataset.Tables[0].NewRow(); + + MonitoredItem monitoredItem = new MonitoredItem(m_subscription.DefaultItem); + monitoredItem.StartNodeId = itemsToMonitor[ii].NodeId; + monitoredItem.AttributeId = itemsToMonitor[ii].AttributeId; + monitoredItem.IndexRange = itemsToMonitor[ii].IndexRange; + monitoredItem.Encoding = itemsToMonitor[ii].DataEncoding; + monitoredItem.Handle = row; + m_subscription.AddItem(monitoredItem); + + UpdateRow(row, monitoredItem); + m_dataset.Tables[0].Rows.Add(row); + } + } + } + + /// + /// Whether the next command does anything. + /// + public bool CanCallNext + { + get + { + return m_state != DisplayState.ViewUpdates; + } + } + + /// + /// Whether the back command does anything. + /// + public bool CanCallBack + { + get + { + return m_state != DisplayState.EditItems; + } + } + + /// + /// Moves the grid to the next state. + /// + public void Next() + { + if (m_state == DisplayState.ViewUpdates) + { + return; + } + + SetDisplayState(++m_state); + + // clear any selection. + foreach (DataGridViewRow row in ResultsDV.Rows) + { + row.Selected = false; + } + + if (m_subscription != null) + { + // apply any changes. + if (m_state == DisplayState.ApplyChanges) + { + m_subscription.ApplyChanges(); + + foreach (DataRow row in m_dataset.Tables[0].Rows) + { + MonitoredItem monitoredItem = (MonitoredItem)row[0]; + UpdateRow(row, monitoredItem.Status); + } + } + } + } + + /// + /// Moves the grid back to the edit items state. + /// + public void Back() + { + if (m_state == DisplayState.EditItems) + { + return; + } + + SetDisplayState(DisplayState.EditItems); + + // clear any selection. + foreach (DataGridViewRow row in ResultsDV.Rows) + { + row.Selected = false; + + // revert to specified parameters. + DataRowView source = row.DataBoundItem as DataRowView; + MonitoredItem monitoredItem = (MonitoredItem)source.Row[0]; + UpdateRow(source.Row, monitoredItem); + } + } + #endregion + + #region Private Methods + /// + /// Sets the display state for the control. + /// + private void SetDisplayState(DisplayState state) + { + m_state = state; + + switch (m_state) + { + case DisplayState.EditItems: + { + SamplingIntervalCH.Visible = true; + QueueSizeCH.Visible = true; + DiscardOldestCH.Visible = true; + FilterCH.Visible = true; + OperationStatusCH.Visible = false; + DataTypeCH.Visible = false; + ValueCH.Visible = false; + StatusCodeCH.Visible = false; + SourceTimestampCH.Visible = false; + ServerTimestampCH.Visible = false; + break; + } + + case DisplayState.ApplyChanges: + { + SamplingIntervalCH.Visible = true; + QueueSizeCH.Visible = true; + DiscardOldestCH.Visible = true; + FilterCH.Visible = false; + OperationStatusCH.Visible = true; + DataTypeCH.Visible = false; + ValueCH.Visible = false; + StatusCodeCH.Visible = false; + SourceTimestampCH.Visible = false; + ServerTimestampCH.Visible = false; + break; + } + + case DisplayState.ViewUpdates: + { + SamplingIntervalCH.Visible = false; + QueueSizeCH.Visible = false; + DiscardOldestCH.Visible = false; + FilterCH.Visible = false; + OperationStatusCH.Visible = false; + DataTypeCH.Visible = true; + ValueCH.Visible = true; + StatusCodeCH.Visible = true; + SourceTimestampCH.Visible = true; + ServerTimestampCH.Visible = true; + break; + } + } + } + + /// + /// Updates the row with the monitored item. + /// + private void UpdateRow(DataRow row, MonitoredItem monitoredItem) + { + row[0] = monitoredItem; + row[1] = ImageList.Images[ClientUtils.GetImageIndex(monitoredItem.AttributeId, null)]; + row[2] = m_session.NodeCache.GetDisplayText(monitoredItem.StartNodeId) + "/" + Attributes.GetBrowseName(monitoredItem.AttributeId); + row[3] = monitoredItem.IndexRange; + row[4] = monitoredItem.Encoding; + row[5] = monitoredItem.MonitoringMode; + row[6] = monitoredItem.SamplingInterval; + row[7] = monitoredItem.QueueSize; + row[8] = monitoredItem.DiscardOldest; + row[9] = monitoredItem.Filter; + } + + /// + /// Updates the row with the monitored item status. + /// + private void UpdateRow(DataRow row, MonitoredItemStatus status) + { + row[5] = status.MonitoringMode; + row[6] = status.SamplingInterval; + row[7] = status.QueueSize; + row[8] = status.DiscardOldest; + row[9] = status.Filter; + + if (ServiceResult.IsBad(status.Error)) + { + row[10] = new StatusCode(status.Error.Code); + } + else + { + row[10] = new StatusCode(); + } + } + + /// + /// Updates the row with the data value. + /// + private void UpdateRow(DataRow row, MonitoredItemNotification notification) + { + DataValue value = notification.Value; + + row[11] = value; + + if (value != null) + { + row[1] = ImageList.Images[ClientUtils.GetImageIndex(Attributes.Value, value.Value)]; + row[12] = (value.WrappedValue.TypeInfo != null) ? value.WrappedValue.TypeInfo.ToString() : String.Empty; + row[13] = value.WrappedValue; + row[14] = value.StatusCode; + row[15] = value.SourceTimestamp.ToLocalTime().ToString("hh:mm:ss.fff"); + row[16] = value.ServerTimestamp.ToLocalTime().ToString("hh:mm:ss.fff"); + } + } + + /// + /// Gets the display string for the subscription status. + /// + private string GetDisplayString(Subscription subscription) + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append((subscription.CurrentPublishingEnabled) ? "Enabled" : "Disabled"); + buffer.Append(" ("); + buffer.Append(subscription.CurrentPublishingInterval); + buffer.Append("ms/"); + buffer.Append(subscription.CurrentKeepAliveCount); + buffer.Append("/"); + buffer.Append(subscription.CurrentLifetimeCount); + buffer.Append("}"); + + return buffer.ToString(); + } + #endregion + + #region Event Handlers + private void OnPublishStatusChanged(object sender, EventArgs e) + { + if (!Object.ReferenceEquals(sender, m_subscription)) + { + return; + } + + if (this.InvokeRequired) + { + this.BeginInvoke(m_PublishStatusChanged, sender, e); + return; + } + + try + { + if (m_subscription.PublishingStopped) + { + SubscriptionStateTB.Text = "STOPPED"; + SubscriptionStateTB.ForeColor = Color.Red; + } + else + { + SubscriptionStateTB.Text = GetDisplayString(m_subscription); + SubscriptionStateTB.ForeColor = Color.Empty; + } + + SequenceNumberTB.Text = m_subscription.SequenceNumber.ToString(); + LastNotificationTB.Text = m_subscription.LastNotificationTime.ToLocalTime().ToString("hh:mm:ss"); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void OnDataChange(Subscription subscription, DataChangeNotification notification, IList stringTable) + { + if (!Object.ReferenceEquals(subscription, m_subscription)) + { + return; + } + + if (this.InvokeRequired) + { + this.BeginInvoke(new FastDataChangeNotificationEventHandler(OnDataChange), subscription, notification, stringTable); + return; + } + + try + { + foreach (MonitoredItemNotification itemNotification in notification.MonitoredItems) + { + MonitoredItem monitoredItem = subscription.FindItemByClientHandle(itemNotification.ClientHandle); + + if (monitoredItem == null) + { + continue; + } + + DataRow row = (DataRow)monitoredItem.Handle; + + if (row.RowState == DataRowState.Detached) + { + continue; + } + + UpdateRow(row, itemNotification); + + if (m_EditComplexValueDlg != null && Object.ReferenceEquals(m_EditComplexValueDlg.Tag, monitoredItem)) + { + m_EditComplexValueDlg.UpdateValue(monitoredItem.ResolvedNodeId, monitoredItem.AttributeId, null, itemNotification.Value.Value); + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void PopupMenu_Opening(object sender, CancelEventArgs e) + { + NewMI.Visible = m_state == DisplayState.EditItems; + EditMI.Enabled = ResultsDV.SelectedRows.Count > 0; + DeleteMI.Enabled = ResultsDV.SelectedRows.Count > 0; + ViewValueMI.Visible = m_state == DisplayState.ViewUpdates; + SetMonitoringModeMI.Visible = m_state != DisplayState.ApplyChanges; + } + + private void NewMI_Click(object sender, EventArgs e) + { + try + { + MonitoredItem monitoredItem = null; + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItem = (MonitoredItem)source.Row[0]; + break; + } + + if (monitoredItem == null) + { + monitoredItem = new MonitoredItem(m_subscription.DefaultItem); + } + else + { + monitoredItem = new MonitoredItem(monitoredItem); + } + + if (new EditMonitoredItemDlg().ShowDialog(m_session, monitoredItem, false)) + { + m_subscription.AddItem(monitoredItem); + DataRow row = m_dataset.Tables[0].NewRow(); + monitoredItem.Handle = row; + UpdateRow(row, monitoredItem); + m_dataset.Tables[0].Rows.Add(row); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EditMI_Click(object sender, EventArgs e) + { + try + { + MonitoredItem monitoredItem = null; + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItem = (MonitoredItem)source.Row[0]; + break; + } + + if (monitoredItem == null) + { + return; + } + + if (new EditMonitoredItemDlg().ShowDialog(m_session, monitoredItem, false)) + { + DataRow row = (DataRow)monitoredItem.Handle; + UpdateRow(row, monitoredItem); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + MonitoredItem monitoredItem = (MonitoredItem)source.Row[0]; + m_subscription.RemoveItem(monitoredItem); + source.Row.Delete(); + } + + m_dataset.AcceptChanges(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ViewValueMI_Click(object sender, EventArgs e) + { + try + { + MonitoredItem monitoredItem = null; + DataValue value = null; + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItem = (MonitoredItem)source.Row[0]; + value = (DataValue)source.Row[11]; + break; + } + + if (monitoredItem == null) + { + return; + } + + m_EditComplexValueDlg = new EditComplexValueDlg(); + m_EditComplexValueDlg.Tag = monitoredItem; + + m_EditComplexValueDlg.ShowDialog( + m_session, + monitoredItem.ResolvedNodeId, + monitoredItem.AttributeId, + null, + value.Value, + true, + "View Data Change"); + + m_EditComplexValueDlg = null; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ResultsDV_DoubleClick(object sender, EventArgs e) + { + try + { + if (m_state == DisplayState.EditItems) + { + EditMI_Click(sender, e); + } + else + { + ViewValueMI_Click(sender, e); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void SetMonitoringModeMI_Click(object sender, EventArgs e) + { + try + { + List monitoredItems = new List(); + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItems.Add((MonitoredItem)source.Row[0]); + } + + if (monitoredItems.Count == 0) + { + return; + } + + MonitoringMode oldMonitoringMode = monitoredItems[0].MonitoringMode; + MonitoringMode newMonitoringMode = new EditMonitoredItemDlg().ShowDialog(oldMonitoringMode); + + if (oldMonitoringMode != newMonitoringMode) + { + List itemsToModify = new List(); + + foreach (MonitoredItem monitoredItem in monitoredItems) + { + DataRow row = (DataRow)monitoredItem.Handle; + row[5] = newMonitoringMode; + + if (monitoredItem.Created) + { + itemsToModify.Add(monitoredItem); + continue; + } + + monitoredItem.MonitoringMode = newMonitoringMode; + } + + if (itemsToModify.Count != 0) + { + m_subscription.SetMonitoringMode(newMonitoringMode, itemsToModify); + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void Subscription_EditMI_Click(object sender, EventArgs e) + { + try + { + if (new EditSubscriptionDlg().ShowDialog(m_subscription)) + { + m_subscription.Modify(); + + if (m_subscription.PublishingEnabled != m_subscription.CurrentPublishingEnabled) + { + m_subscription.SetPublishingMode(m_subscription.PublishingEnabled); + } + + SubscriptionStateTB.Text = GetDisplayString(m_subscription); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.resx new file mode 100644 index 00000000..9706380f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeDataListViewCtrl.resx @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 240, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + 136, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.Designer.cs new file mode 100644 index 00000000..7cf6ecd6 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.Designer.cs @@ -0,0 +1,467 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SubscribeEventsDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubscribeEventsDlg)); + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.ButtonsPN = new System.Windows.Forms.FlowLayoutPanel(); + this.NextBTN = new System.Windows.Forms.Button(); + this.BackBTN = new System.Windows.Forms.Button(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.StatusCTRL = new System.Windows.Forms.StatusStrip(); + this.SubscriptionStateLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.SubscriptionStateTB = new System.Windows.Forms.ToolStripDropDownButton(); + this.Subscription_EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.SequenceNumberLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.SequenceNumberTB = new System.Windows.Forms.ToolStripStatusLabel(); + this.LastNotificationLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.LastNotificationTB = new System.Windows.Forms.ToolStripStatusLabel(); + this.ItemsDV = new System.Windows.Forms.DataGridView(); + this.IconCH = new System.Windows.Forms.DataGridViewImageColumn(); + this.NodeAttributeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MonitoringModeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SamplingIntervalCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DiscardOldestCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OperationStatusCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.NewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.SetMonitoringModeMI = new System.Windows.Forms.ToolStripMenuItem(); + this.EventTypePN = new System.Windows.Forms.SplitContainer(); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseTreeViewCtrl(); + this.EventTypeCTRL = new Opc.Ua.Client.Controls.TypeFieldsListViewCtrl(); + this.EventsCTRL = new Opc.Ua.Client.Controls.EventListViewCtrl(); + this.EventFilterCTRL = new Opc.Ua.Client.Controls.EventFilterListViewCtrl(); + this.ButtonsPN.SuspendLayout(); + this.StatusCTRL.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ItemsDV)).BeginInit(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.EventTypePN)).BeginInit(); + this.EventTypePN.Panel1.SuspendLayout(); + this.EventTypePN.Panel2.SuspendLayout(); + this.EventTypePN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(706, 3); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 5; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + this.CancelBTN.Click += new System.EventHandler(this.CancelBTN_Click); + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(625, 3); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 4; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.NextBTN); + this.ButtonsPN.Controls.Add(this.BackBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 333); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ButtonsPN.Size = new System.Drawing.Size(784, 29); + this.ButtonsPN.TabIndex = 12; + // + // NextBTN + // + this.NextBTN.Location = new System.Drawing.Point(544, 3); + this.NextBTN.Name = "NextBTN"; + this.NextBTN.Size = new System.Drawing.Size(75, 23); + this.NextBTN.TabIndex = 6; + this.NextBTN.Text = "Next"; + this.NextBTN.UseVisualStyleBackColor = true; + this.NextBTN.Click += new System.EventHandler(this.NextBTN_Click); + // + // BackBTN + // + this.BackBTN.Location = new System.Drawing.Point(463, 3); + this.BackBTN.Name = "BackBTN"; + this.BackBTN.Size = new System.Drawing.Size(75, 23); + this.BackBTN.TabIndex = 7; + this.BackBTN.Text = "Back"; + this.BackBTN.UseVisualStyleBackColor = true; + this.BackBTN.Click += new System.EventHandler(this.BackBTN_Click); + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // StatusCTRL + // + this.StatusCTRL.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SubscriptionStateLB, + this.SubscriptionStateTB, + this.SequenceNumberLB, + this.SequenceNumberTB, + this.LastNotificationLB, + this.LastNotificationTB}); + this.StatusCTRL.Location = new System.Drawing.Point(0, 311); + this.StatusCTRL.Name = "StatusCTRL"; + this.StatusCTRL.Size = new System.Drawing.Size(784, 22); + this.StatusCTRL.SizingGrip = false; + this.StatusCTRL.TabIndex = 13; + // + // SubscriptionStateLB + // + this.SubscriptionStateLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.SubscriptionStateLB.Name = "SubscriptionStateLB"; + this.SubscriptionStateLB.Size = new System.Drawing.Size(76, 17); + this.SubscriptionStateLB.Text = "Subscription"; + // + // SubscriptionStateTB + // + this.SubscriptionStateTB.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.SubscriptionStateTB.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Subscription_EditMI}); + this.SubscriptionStateTB.Image = ((System.Drawing.Image)(resources.GetObject("SubscriptionStateTB.Image"))); + this.SubscriptionStateTB.ImageTransparentColor = System.Drawing.Color.Magenta; + this.SubscriptionStateTB.Name = "SubscriptionStateTB"; + this.SubscriptionStateTB.Size = new System.Drawing.Size(67, 20); + this.SubscriptionStateTB.Text = ""; + this.SubscriptionStateTB.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.SubscriptionStateTB_DropDownItemClicked); + // + // Subscription_EditMI + // + this.Subscription_EditMI.Name = "Subscription_EditMI"; + this.Subscription_EditMI.Size = new System.Drawing.Size(103, 22); + this.Subscription_EditMI.Text = "Edit..."; + // + // SequenceNumberLB + // + this.SequenceNumberLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.SequenceNumberLB.Name = "SequenceNumberLB"; + this.SequenceNumberLB.Size = new System.Drawing.Size(111, 17); + this.SequenceNumberLB.Text = "Sequence Number"; + // + // SequenceNumberTB + // + this.SequenceNumberTB.Name = "SequenceNumberTB"; + this.SequenceNumberTB.Size = new System.Drawing.Size(44, 17); + this.SequenceNumberTB.Text = "<###>"; + // + // LastNotificationLB + // + this.LastNotificationLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.LastNotificationLB.Name = "LastNotificationLB"; + this.LastNotificationLB.Size = new System.Drawing.Size(98, 17); + this.LastNotificationLB.Text = "Last Notification"; + // + // LastNotificationTB + // + this.LastNotificationTB.Name = "LastNotificationTB"; + this.LastNotificationTB.Size = new System.Drawing.Size(75, 17); + this.LastNotificationTB.Text = ""; + // + // ItemsDV + // + this.ItemsDV.AllowUserToAddRows = false; + this.ItemsDV.AllowUserToDeleteRows = false; + this.ItemsDV.AllowUserToResizeRows = false; + this.ItemsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ItemsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ItemsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.IconCH, + this.NodeAttributeCH, + this.MonitoringModeCH, + this.SamplingIntervalCH, + this.DiscardOldestCH, + this.OperationStatusCH}); + this.ItemsDV.ContextMenuStrip = this.PopupMenu; + this.ItemsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ItemsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ItemsDV.Location = new System.Drawing.Point(0, 0); + this.ItemsDV.Name = "ItemsDV"; + this.ItemsDV.RowHeadersVisible = false; + this.ItemsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ItemsDV.Size = new System.Drawing.Size(784, 311); + this.ItemsDV.TabIndex = 14; + this.ItemsDV.DoubleClick += new System.EventHandler(this.ItemsDV_DoubleClick); + // + // IconCH + // + this.IconCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.IconCH.DataPropertyName = "Icon"; + this.IconCH.HeaderText = ""; + this.IconCH.Name = "IconCH"; + this.IconCH.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.IconCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.IconCH.Width = 19; + // + // NodeAttributeCH + // + this.NodeAttributeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NodeAttributeCH.DataPropertyName = "NodeAttribute"; + this.NodeAttributeCH.HeaderText = "Item Name"; + this.NodeAttributeCH.Name = "NodeAttributeCH"; + this.NodeAttributeCH.ReadOnly = true; + this.NodeAttributeCH.Width = 83; + // + // MonitoringModeCH + // + this.MonitoringModeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.MonitoringModeCH.DataPropertyName = "MonitoringMode"; + this.MonitoringModeCH.HeaderText = "Monitoring Mode"; + this.MonitoringModeCH.Name = "MonitoringModeCH"; + this.MonitoringModeCH.ReadOnly = true; + this.MonitoringModeCH.Width = 111; + // + // SamplingIntervalCH + // + this.SamplingIntervalCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SamplingIntervalCH.DataPropertyName = "SamplingInterval"; + this.SamplingIntervalCH.HeaderText = "Sampling Interval"; + this.SamplingIntervalCH.Name = "SamplingIntervalCH"; + this.SamplingIntervalCH.Visible = false; + // + // DiscardOldestCH + // + this.DiscardOldestCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DiscardOldestCH.DataPropertyName = "DiscardOldest"; + this.DiscardOldestCH.HeaderText = "Discard Oldest"; + this.DiscardOldestCH.Name = "DiscardOldestCH"; + this.DiscardOldestCH.ReadOnly = true; + this.DiscardOldestCH.Visible = false; + // + // OperationStatusCH + // + this.OperationStatusCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OperationStatusCH.DataPropertyName = "OperationStatus"; + this.OperationStatusCH.HeaderText = "Operation Status"; + this.OperationStatusCH.Name = "OperationStatusCH"; + this.OperationStatusCH.ReadOnly = true; + this.OperationStatusCH.Visible = false; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewMI, + this.EditMI, + this.DeleteMI, + this.SetMonitoringModeMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(197, 92); + // + // NewMI + // + this.NewMI.Name = "NewMI"; + this.NewMI.Size = new System.Drawing.Size(196, 22); + this.NewMI.Text = "New..."; + this.NewMI.Click += new System.EventHandler(this.NewMI_Click); + // + // EditMI + // + this.EditMI.Name = "EditMI"; + this.EditMI.Size = new System.Drawing.Size(196, 22); + this.EditMI.Text = "Edit..."; + this.EditMI.Click += new System.EventHandler(this.EditMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(196, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // SetMonitoringModeMI + // + this.SetMonitoringModeMI.Name = "SetMonitoringModeMI"; + this.SetMonitoringModeMI.Size = new System.Drawing.Size(196, 22); + this.SetMonitoringModeMI.Text = "Set Monitoring Mode..."; + this.SetMonitoringModeMI.Click += new System.EventHandler(this.SetMonitoringModeMI_Click); + // + // EventTypePN + // + this.EventTypePN.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventTypePN.Location = new System.Drawing.Point(0, 0); + this.EventTypePN.Name = "EventTypePN"; + // + // EventTypePN.Panel1 + // + this.EventTypePN.Panel1.Controls.Add(this.BrowseCTRL); + // + // EventTypePN.Panel2 + // + this.EventTypePN.Panel2.Controls.Add(this.EventTypeCTRL); + this.EventTypePN.Size = new System.Drawing.Size(784, 311); + this.EventTypePN.SplitterDistance = 261; + this.EventTypePN.TabIndex = 17; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesControl = null; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 0); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(261, 311); + this.BrowseCTRL.TabIndex = 15; + this.BrowseCTRL.View = null; + this.BrowseCTRL.AfterSelect += new System.EventHandler(this.BrowseCTRL_AfterSelect); + // + // EventTypeCTRL + // + this.EventTypeCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventTypeCTRL.Location = new System.Drawing.Point(0, 0); + this.EventTypeCTRL.Name = "EventTypeCTRL"; + this.EventTypeCTRL.Size = new System.Drawing.Size(519, 311); + this.EventTypeCTRL.TabIndex = 16; + // + // EventsCTRL + // + this.EventsCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventsCTRL.Location = new System.Drawing.Point(0, 0); + this.EventsCTRL.Name = "EventsCTRL"; + this.EventsCTRL.Size = new System.Drawing.Size(784, 311); + this.EventsCTRL.TabIndex = 18; + // + // EventFilterCTRL + // + this.EventFilterCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventFilterCTRL.Location = new System.Drawing.Point(0, 0); + this.EventFilterCTRL.Name = "EventFilterCTRL"; + this.EventFilterCTRL.Size = new System.Drawing.Size(784, 311); + this.EventFilterCTRL.TabIndex = 17; + // + // SubscribeEventsDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(784, 362); + this.Controls.Add(this.EventsCTRL); + this.Controls.Add(this.EventTypePN); + this.Controls.Add(this.ItemsDV); + this.Controls.Add(this.EventFilterCTRL); + this.Controls.Add(this.StatusCTRL); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SubscribeEventsDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Event Subscription"; + this.ButtonsPN.ResumeLayout(false); + this.StatusCTRL.ResumeLayout(false); + this.StatusCTRL.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ItemsDV)).EndInit(); + this.PopupMenu.ResumeLayout(false); + this.EventTypePN.Panel1.ResumeLayout(false); + this.EventTypePN.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.EventTypePN)).EndInit(); + this.EventTypePN.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.FlowLayoutPanel ButtonsPN; + private System.Windows.Forms.Button NextBTN; + private System.Windows.Forms.Button BackBTN; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.StatusStrip StatusCTRL; + private System.Windows.Forms.ToolStripStatusLabel SubscriptionStateLB; + private System.Windows.Forms.ToolStripDropDownButton SubscriptionStateTB; + private System.Windows.Forms.ToolStripMenuItem Subscription_EditMI; + private System.Windows.Forms.ToolStripStatusLabel SequenceNumberLB; + private System.Windows.Forms.ToolStripStatusLabel SequenceNumberTB; + private System.Windows.Forms.ToolStripStatusLabel LastNotificationLB; + private System.Windows.Forms.ToolStripStatusLabel LastNotificationTB; + private System.Windows.Forms.DataGridView ItemsDV; + private BrowseTreeViewCtrl BrowseCTRL; + private System.Windows.Forms.DataGridViewImageColumn IconCH; + private System.Windows.Forms.DataGridViewTextBoxColumn NodeAttributeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn MonitoringModeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn SamplingIntervalCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DiscardOldestCH; + private System.Windows.Forms.DataGridViewTextBoxColumn OperationStatusCH; + private TypeFieldsListViewCtrl EventTypeCTRL; + private System.Windows.Forms.SplitContainer EventTypePN; + private EventFilterListViewCtrl EventFilterCTRL; + private EventListViewCtrl EventsCTRL; + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem NewMI; + private System.Windows.Forms.ToolStripMenuItem EditMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private System.Windows.Forms.ToolStripMenuItem SetMonitoringModeMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.cs new file mode 100644 index 00000000..be1a8865 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.cs @@ -0,0 +1,997 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using System.Data; +using System.Drawing; +using Opc.Ua; +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to select an area to use as an event filter. + /// + public partial class SubscribeEventsDlg : Form, ISessionForm + { + #region Constructors + /// + /// Creates an empty form. + /// + public SubscribeEventsDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + BrowseCTRL.BrowseTV.CheckBoxes = true; + BrowseCTRL.BrowseTV.AfterCheck += new TreeViewEventHandler(BrowseTV_AfterCheck); + + m_PublishStatusChanged = new EventHandler(OnPublishStatusChanged); + ItemsDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Items"); + + m_dataset.Tables[0].Columns.Add("MonitoredItem", typeof(MonitoredItem)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("NodeAttribute", typeof(string)); + m_dataset.Tables[0].Columns.Add("MonitoringMode", typeof(MonitoringMode)); + m_dataset.Tables[0].Columns.Add("SamplingInterval", typeof(double)); + m_dataset.Tables[0].Columns.Add("DiscardOldest", typeof(bool)); + m_dataset.Tables[0].Columns.Add("OperationStatus", typeof(StatusCode)); + + ItemsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private FilterDeclaration m_filter; + private DisplayState m_state; + private Session m_session; + private Subscription m_subscription; + private EventHandler m_PublishStatusChanged; + #endregion + + private enum DisplayState + { + EditItems, + SelectEventType, + SelectEventFields, + ApplyChanges, + ViewUpdates + } + + #region Public Interface + /// + /// Changes the session used. + /// + public void ChangeSession(Session session) + { + if (!Object.ReferenceEquals(session, m_session)) + { + m_session = session; + + BrowseCTRL.ChangeSession(m_session); + EventTypeCTRL.ChangeSession(m_session); + EventFilterCTRL.ChangeSession(m_session); + EventsCTRL.ChangeSession(m_session); + + if (m_subscription != null) + { + m_subscription.PublishStatusChanged -= m_PublishStatusChanged; + m_subscription.FastEventCallback = null; + m_subscription = null; + } + + if (m_session != null) + { + // find new subscription. + foreach (Subscription subscription in m_session.Subscriptions) + { + if (Object.ReferenceEquals(subscription.Handle, this)) + { + m_subscription = subscription; + m_subscription.PublishStatusChanged += m_PublishStatusChanged; + m_subscription.FastEventCallback = OnEvent; + break; + } + } + } + } + } + + /// + /// Returns true if the dialog has an active subscription assigned. + /// + public bool HasSubscription + { + get + { + return m_subscription != null; + } + } + + /// + /// Sets the subscription used with the control. + /// + public void SetSubscription(Subscription subscription) + { + if (m_subscription != null) + { + m_subscription.PublishStatusChanged -= m_PublishStatusChanged; + m_subscription.FastDataChangeCallback = null; + m_subscription = null; + } + + m_session = null; + m_subscription = subscription; + m_subscription.DisableMonitoredItemCache = true; + m_subscription.PublishStatusChanged += m_PublishStatusChanged; + m_subscription.FastEventCallback = OnEvent; + m_dataset.Tables[0].Rows.Clear(); + + if (m_subscription != null) + { + m_session = subscription.Session; + m_subscription.Handle = this; + } + } + + /// + /// Adds items to the subscription. + /// + public void AddItems(params NodeId[] itemsToMonitor) + { + if (itemsToMonitor != null) + { + SetDisplayState(DisplayState.EditItems); + + for (int ii = 0; ii < itemsToMonitor.Length; ii++) + { + if (itemsToMonitor[ii] == null) + { + continue; + } + + DataRow row = m_dataset.Tables[0].NewRow(); + + MonitoredItem monitoredItem = new MonitoredItem(m_subscription.DefaultItem); + monitoredItem.StartNodeId = itemsToMonitor[ii]; + monitoredItem.AttributeId = Attributes.EventNotifier; + monitoredItem.NodeClass = NodeClass.Object; + monitoredItem.IndexRange = null; + monitoredItem.Encoding = null; + monitoredItem.Handle = row; + m_subscription.AddItem(monitoredItem); + + UpdateRow(row, monitoredItem); + m_dataset.Tables[0].Rows.Add(row); + } + } + } + + /// + /// Moves the sequence forward. + /// + public void Next() + { + if (m_state == DisplayState.ViewUpdates) + { + return; + } + + if (m_state == DisplayState.SelectEventType) + { + UpdateFilter(); + } + + SetDisplayState(++m_state); + + if (m_state == DisplayState.SelectEventType) + { + BrowseCTRL.Initialize(m_session, Opc.Ua.ObjectTypeIds.BaseEventType, Opc.Ua.ReferenceTypeIds.HasSubtype); + BrowseCTRL.SelectNode((m_filter == null || m_filter.EventTypeId == null) ? Opc.Ua.ObjectTypeIds.BaseEventType : m_filter.EventTypeId); + EventTypeCTRL.ShowType(Opc.Ua.ObjectTypeIds.BaseEventType); + return; + } + + if (m_state == DisplayState.SelectEventFields) + { + EventFilterCTRL.SetFilter(m_filter); + return; + } + + if (m_state == DisplayState.ApplyChanges) + { + UpdateItems(); + return; + } + + if (m_state == DisplayState.ViewUpdates) + { + EventsCTRL.SetFilter(m_filter); + return; + } + } + + /// + /// Moves the sequence backward. + /// + public void Back() + { + if (m_state == DisplayState.EditItems) + { + return; + } + + SetDisplayState(--m_state); + + if (m_state == DisplayState.SelectEventFields) + { + EventFilterCTRL.SetFilter(m_filter); + return; + } + } + #endregion + + #region Private Methods + /// + /// Sets the display state for the control. + /// + private void SetDisplayState(DisplayState state) + { + m_state = state; + + switch (m_state) + { + case DisplayState.EditItems: + { + ItemsDV.Visible = true; + EventTypePN.Visible = false; + EventsCTRL.Visible = false; + EventFilterCTRL.Visible = false; + SamplingIntervalCH.Visible = true; + DiscardOldestCH.Visible = true; + DiscardOldestCH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + OperationStatusCH.Visible = false; + BackBTN.Visible = false; + NextBTN.Visible = true; + NextBTN.Enabled = true; + OkBTN.Visible = false; + break; + } + + case DisplayState.SelectEventType: + { + ItemsDV.Visible = false; + EventTypePN.Visible = true; + EventsCTRL.Visible = false; + EventFilterCTRL.Visible = false; + BackBTN.Visible = true; + NextBTN.Visible = true; + NextBTN.Enabled = true; + OkBTN.Visible = false; + break; + } + + case DisplayState.SelectEventFields: + { + ItemsDV.Visible = false; + EventTypePN.Visible = false; + EventsCTRL.Visible = false; + EventFilterCTRL.Visible = true; + BackBTN.Visible = true; + NextBTN.Visible = true; + NextBTN.Enabled = true; + OkBTN.Visible = false; + break; + } + + case DisplayState.ApplyChanges: + { + ItemsDV.Visible = true; + EventTypePN.Visible = false; + EventsCTRL.Visible = false; + SamplingIntervalCH.Visible = true; + DiscardOldestCH.Visible = true; + DiscardOldestCH.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; + OperationStatusCH.Visible = true; + BackBTN.Visible = true; + NextBTN.Visible = true; + NextBTN.Enabled = true; + OkBTN.Visible = false; + break; + } + + case DisplayState.ViewUpdates: + { + ItemsDV.Visible = false; + EventTypePN.Visible = false; + EventsCTRL.Visible = true; + BackBTN.Visible = true; + NextBTN.Enabled = false; + OkBTN.Visible = false; + break; + } + } + } + + /// + /// Updates the row with the monitored item. + /// + private void UpdateRow(DataRow row, MonitoredItem monitoredItem) + { + row[0] = monitoredItem; + row[1] = ImageList.Images[ClientUtils.GetImageIndex(monitoredItem.AttributeId, null)]; + row[2] = m_session.NodeCache.GetDisplayText(monitoredItem.StartNodeId) + "/" + Attributes.GetBrowseName(monitoredItem.AttributeId); + row[3] = monitoredItem.MonitoringMode; + row[4] = monitoredItem.SamplingInterval; + row[5] = monitoredItem.DiscardOldest; + } + + /// + /// Updates the row with the monitored item status. + /// + private void UpdateRow(DataRow row, MonitoredItemStatus status) + { + row[4] = status.SamplingInterval; + + if (ServiceResult.IsBad(status.Error)) + { + row[6] = status.Error.StatusCode; + } + else + { + row[6] = (StatusCode)StatusCodes.Good; + } + } + + /// + /// Gets the display string for the subscription status. + /// + private string GetDisplayString(Subscription subscription) + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append((subscription.CurrentPublishingEnabled) ? "Enabled" : "Disabled"); + buffer.Append(" ("); + buffer.Append(subscription.CurrentPublishingInterval); + buffer.Append("ms/"); + buffer.Append(subscription.CurrentPublishingInterval*subscription.CurrentKeepAliveCount/1000); + buffer.Append("s/"); + buffer.Append(subscription.CurrentPublishingInterval*subscription.CurrentLifetimeCount/1000); + buffer.Append("s}"); + + return buffer.ToString(); + } + + /// + /// Updates the items with the current filter. + /// + private void UpdateItems() + { + List fields = new List(); + + foreach (FilterDeclarationField field in m_filter.Fields) + { + // only keep fields that are used. + if (field.Selected || field.FilterEnabled) + { + fields.Add(field); + continue; + } + + // add mandatory fields. + switch (field.InstanceDeclaration.BrowsePathDisplayText) + { + case Opc.Ua.BrowseNames.EventId: + case Opc.Ua.BrowseNames.EventType: + case Opc.Ua.BrowseNames.Time: + { + field.Selected = true; + fields.Add(field); + break; + } + } + } + + m_filter.Fields = fields; + + // construct filter. + EventFilter filter = m_filter.GetFilter(); + + // update items. + for (int ii = 0; ii < m_dataset.Tables[0].Rows.Count; ii++) + { + MonitoredItem monitoredItem = (MonitoredItem)m_dataset.Tables[0].Rows[ii][0]; + monitoredItem.Filter = filter; + } + + // apply changes. + m_subscription.ApplyChanges(); + + // show results. + for (int ii = 0; ii < m_dataset.Tables[0].Rows.Count; ii++) + { + DataRow row = m_dataset.Tables[0].Rows[ii]; + MonitoredItem monitoredItem = (MonitoredItem)row[0]; + UpdateRow(row, monitoredItem.Status); + } + } + + /// + /// Updates the filter from the controls. + /// + private void UpdateFilter() + { + // get selected declarations. + List declarations = new List(); + NodeId eventTypeId = CollectInstanceDeclarations(declarations); + + if (m_filter == null) + { + m_filter = new FilterDeclaration(); + } + + if (m_filter.Fields == null || m_filter.Fields.Count == 0) + { + m_filter.Fields = new List(); + + // select some default values to display in the list. + AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.EventType, true); + AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.SourceName, true); + AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.SourceNode, true); + AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.Time, true); + AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.Severity, true); + AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.Message, true); + } + + // copy settings from existing filter. + List fields = new List(); + + foreach (InstanceDeclaration declaration in declarations) + { + if (declaration.NodeClass != NodeClass.Variable) + { + continue; + } + + FilterDeclarationField field = new FilterDeclarationField(declaration); + + foreach (FilterDeclarationField field2 in m_filter.Fields) + { + if (field2.InstanceDeclaration.BrowsePathDisplayText == field.InstanceDeclaration.BrowsePathDisplayText) + { + field.DisplayInList = field2.DisplayInList; + field.FilterEnabled = field2.FilterEnabled; + field.FilterOperator = field2.FilterOperator; + field.FilterValue = field2.FilterValue; + break; + } + } + + fields.Add(field); + } + + // update filter. + m_filter.EventTypeId = eventTypeId; + m_filter.Fields = fields; + } + + private void AddDefaultFilter(List fields, string browsePath, bool displayInList) + { + FilterDeclarationField field = new FilterDeclarationField(); + field.InstanceDeclaration = new InstanceDeclaration(); + field.InstanceDeclaration.BrowsePathDisplayText = browsePath; + field.DisplayInList = displayInList; + fields.Add(field); + } + + /// + /// Collects the instance declarations for the selected types. + /// + private NodeId CollectInstanceDeclarations(List declarations) + { + List typeIds = new List(); + + // get list of selected types. + NodeId baseTypeId = CollectTypeIds(BrowseCTRL.BrowseTV.Nodes[0], typeIds); + + // merge declarations from the selected types. + foreach (NodeId typeId in typeIds) + { + List declarations2 = ClientUtils.CollectInstanceDeclarationsForType(m_session, typeId); + + for (int ii = 0; ii < declarations2.Count; ii++) + { + bool found = false; + + for (int jj = 0; jj < declarations.Count; jj++) + { + if (declarations[jj].BrowsePathDisplayText == declarations2[ii].BrowsePathDisplayText) + { + found = true; + break; + } + } + + if (!found) + { + declarations.Add(declarations2[ii]); + } + } + } + + return baseTypeId; + } + + /// + /// Collects the types selected in the control. + /// + private NodeId CollectTypeIds(TreeNode node, List typeIds) + { + if (!node.Checked) + { + return null; + } + + ReferenceDescription reference = node.Tag as ReferenceDescription; + + NodeId typeId = null; + int childCount = 0; + + foreach (TreeNode child in node.Nodes) + { + NodeId childTypeId = CollectTypeIds(child, typeIds); + + if (childTypeId != null) + { + typeId = childTypeId; + childCount++; + } + } + + if (reference != null) + { + if (childCount != 1) + { + typeId = (NodeId)reference.NodeId; + } + + if (childCount == 0) + { + typeIds.Add((NodeId)reference.NodeId); + } + } + + return typeId; + } + + /// + /// Sets the checks for the currently checked event type. + /// + private void SetEventTypeChecks(TreeNode node, bool isChecked) + { + if (!isChecked) + { + foreach (TreeNode child in node.Nodes) + { + child.Checked = false; + } + } + + if (node.Parent == null || node.Parent.Checked == isChecked) + { + return; + } + + if (isChecked) + { + node.Parent.Checked = true; + return; + } + + bool found = false; + + foreach (TreeNode child in node.Parent.Nodes) + { + if (child.Checked) + { + found = true; + break; + } + } + + if (found) + { + return; + } + + node.Parent.Checked = false; + } + #endregion + + #region Event Handlers + private void OnPublishStatusChanged(object sender, EventArgs e) + { + if (!Object.ReferenceEquals(sender, m_subscription)) + { + return; + } + + if (this.InvokeRequired) + { + this.BeginInvoke(m_PublishStatusChanged, sender, e); + return; + } + + try + { + if (m_subscription.PublishingStopped) + { + SubscriptionStateTB.Text = "STOPPED"; + SubscriptionStateTB.ForeColor = Color.Red; + } + else + { + SubscriptionStateTB.Text = GetDisplayString(m_subscription); + SubscriptionStateTB.ForeColor = Color.Empty; + } + + SequenceNumberTB.Text = m_subscription.SequenceNumber.ToString(); + LastNotificationTB.Text = m_subscription.LastNotificationTime.ToLocalTime().ToString("hh:mm:ss"); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void OnEvent(Subscription subscription, EventNotificationList notification, IList stringTable) + { + if (!Object.ReferenceEquals(subscription, m_subscription)) + { + return; + } + + if (this.InvokeRequired) + { + this.BeginInvoke(new FastEventNotificationEventHandler(OnEvent), subscription, notification, stringTable); + return; + } + + try + { + foreach (EventFieldList e in notification.Events) + { + EventsCTRL.DisplayEvent(e); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BackBTN_Click(object sender, EventArgs e) + { + try + { + Back(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void NextBTN_Click(object sender, EventArgs e) + { + try + { + Next(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void SubscriptionStateTB_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + try + { + if (!Object.ReferenceEquals(e.ClickedItem, Subscription_EditMI)) + { + return; + } + + if (!new EditSubscriptionDlg().ShowDialog(m_subscription)) + { + return; + } + + m_subscription.Modify(); + + if (m_subscription.PublishingEnabled != m_subscription.CurrentPublishingEnabled) + { + m_subscription.SetPublishingMode(m_subscription.PublishingEnabled); + } + + SubscriptionStateTB.Text = GetDisplayString(m_subscription); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BrowseCTRL_AfterSelect(object sender, EventArgs e) + { + try + { + ReferenceDescription reference = BrowseCTRL.SelectedNode; + + if (reference == null || NodeId.IsNull(reference.NodeId) || reference.NodeId.IsAbsolute) + { + EventTypeCTRL.ShowType(null); + return; + } + + EventTypeCTRL.ShowType((NodeId)reference.NodeId); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BrowseTV_AfterCheck(object sender, TreeViewEventArgs e) + { + try + { + SetEventTypeChecks(e.Node, e.Node.Checked); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CancelBTN_Click(object sender, EventArgs e) + { + try + { + if (this.Modal) + { + DialogResult = DialogResult.Cancel; + } + else + { + Close(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void NewMI_Click(object sender, EventArgs e) + { + try + { + if (m_state != DisplayState.EditItems) + { + return; + } + + MonitoredItem monitoredItem = null; + + foreach (DataGridViewRow row in ItemsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItem = (MonitoredItem)source.Row[0]; + break; + } + + if (monitoredItem == null) + { + monitoredItem = new MonitoredItem(m_subscription.DefaultItem); + } + else + { + monitoredItem = new MonitoredItem(monitoredItem); + } + + if (new EditMonitoredItemDlg().ShowDialog(m_session, monitoredItem, true)) + { + m_subscription.AddItem(monitoredItem); + DataRow row = m_dataset.Tables[0].NewRow(); + monitoredItem.Handle = row; + UpdateRow(row, monitoredItem); + m_dataset.Tables[0].Rows.Add(row); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EditMI_Click(object sender, EventArgs e) + { + try + { + if (m_state != DisplayState.EditItems) + { + return; + } + + MonitoredItem monitoredItem = null; + + foreach (DataGridViewRow row in ItemsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItem = (MonitoredItem)source.Row[0]; + break; + } + + if (monitoredItem == null) + { + return; + } + + if (new EditMonitoredItemDlg().ShowDialog(m_session, monitoredItem, true)) + { + DataRow row = (DataRow)monitoredItem.Handle; + UpdateRow(row, monitoredItem); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + if (m_state != DisplayState.EditItems) + { + return; + } + + foreach (DataGridViewRow row in ItemsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + MonitoredItem monitoredItem = (MonitoredItem)source.Row[0]; + m_subscription.RemoveItem(monitoredItem); + source.Row.Delete(); + } + + m_dataset.AcceptChanges(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ItemsDV_DoubleClick(object sender, EventArgs e) + { + try + { + if (m_state == DisplayState.EditItems) + { + EditMI_Click(sender, e); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void SetMonitoringModeMI_Click(object sender, EventArgs e) + { + try + { + if (m_state != DisplayState.EditItems && m_state != DisplayState.ApplyChanges) + { + return; + } + + List monitoredItems = new List(); + + foreach (DataGridViewRow row in ItemsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + monitoredItems.Add((MonitoredItem)source.Row[0]); + } + + if (monitoredItems.Count == 0) + { + return; + } + + MonitoringMode oldMonitoringMode = monitoredItems[0].MonitoringMode; + MonitoringMode newMonitoringMode = new EditMonitoredItemDlg().ShowDialog(oldMonitoringMode); + + if (oldMonitoringMode != newMonitoringMode) + { + List itemsToModify = new List(); + + foreach (MonitoredItem monitoredItem in monitoredItems) + { + DataRow row = (DataRow)monitoredItem.Handle; + row[5] = newMonitoringMode; + + if (monitoredItem.Created) + { + itemsToModify.Add(monitoredItem); + continue; + } + + monitoredItem.MonitoringMode = newMonitoringMode; + } + + if (itemsToModify.Count != 0) + { + m_subscription.SetMonitoringMode(newMonitoringMode, itemsToModify); + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.resx new file mode 100644 index 00000000..9418833c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/SubscribeEventsDlg.resx @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 14, 30 + + + 117, 31 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + True + + + True + + + True + + + True + + + True + + + True + + + 221, 31 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.Designer.cs new file mode 100644 index 00000000..65640e5e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.Designer.cs @@ -0,0 +1,186 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class TypeFieldsListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.BrowsePathCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DescriptionCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RightPN = new System.Windows.Forms.Panel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(61, 4); + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.BrowsePathCH, + this.DataTypeCH, + this.DescriptionCH, + this.ValueCH}); + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersVisible = false; + this.ResultsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsDV.Size = new System.Drawing.Size(754, 346); + this.ResultsDV.TabIndex = 0; + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Icon.Width = 19; + // + // BrowsePathCH + // + this.BrowsePathCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.BrowsePathCH.DataPropertyName = "BrowsePath"; + this.BrowsePathCH.HeaderText = "Path"; + this.BrowsePathCH.Name = "BrowsePathCH"; + this.BrowsePathCH.ReadOnly = true; + this.BrowsePathCH.Width = 54; + // + // DataTypeCH + // + this.DataTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataTypeCH.DataPropertyName = "DataType"; + this.DataTypeCH.HeaderText = "Data Type"; + this.DataTypeCH.Name = "DataTypeCH"; + this.DataTypeCH.ReadOnly = true; + this.DataTypeCH.Width = 82; + // + // DescriptionCH + // + this.DescriptionCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.DescriptionCH.DataPropertyName = "Description"; + this.DescriptionCH.HeaderText = "Description"; + this.DescriptionCH.Name = "DescriptionCH"; + this.DescriptionCH.ReadOnly = true; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.ReadOnly = true; + this.ValueCH.Visible = false; + // + // RightPN + // + this.RightPN.Controls.Add(this.ResultsDV); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(754, 346); + this.RightPN.TabIndex = 3; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // TypeFieldsListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Name = "TypeFieldsListViewCtrl"; + this.Size = new System.Drawing.Size(754, 346); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn BrowsePathCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DescriptionCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.cs new file mode 100644 index 00000000..e8f3ca1c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.cs @@ -0,0 +1,229 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class TypeFieldsListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public TypeFieldsListViewCtrl() + { + InitializeComponent(); + ResultsDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Requests"); + + m_dataset.Tables[0].Columns.Add("InstanceDeclaration", typeof(InstanceDeclaration)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("BrowsePath", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Description", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + private List m_declarations; + #endregion + + #region Public Members + /// + /// Changes the session used by the control. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Displays the components of the type in the control. + /// + public void ShowType(NodeId typeId) + { + if (NodeId.IsNull(typeId)) + { + m_dataset.Tables[0].Rows.Clear(); + return; + } + + m_declarations = ClientUtils.CollectInstanceDeclarationsForType(m_session, typeId, false); + + // update existing rows. + for (int ii = 0; ii < m_declarations.Count && ii < m_dataset.Tables[0].Rows.Count; ii++) + { + if (m_declarations[ii].NodeClass == NodeClass.Method) + { + continue; + } + + UpdateRow(m_dataset.Tables[0].Rows[ii], m_declarations[ii]); + } + + // add new rows. + for (int ii = m_dataset.Tables[0].Rows.Count; ii < m_declarations.Count; ii++) + { + if (m_declarations[ii].NodeClass == NodeClass.Method) + { + continue; + } + + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, m_declarations[ii]); + m_dataset.Tables[0].Rows.Add(row); + } + + // delete unused rows. + for (int ii = m_declarations.Count; ii < m_dataset.Tables[0].Rows.Count; ii++) + { + m_dataset.Tables[0].Rows[ii].Delete(); + } + + // deselect all rows. + foreach (DataGridViewRow row in ResultsDV.Rows) + { + row.Selected = false; + } + } + + /// + /// Displays the current filter components in the control. + /// + public void ShowFilter(FilterDeclaration filter) + { + m_declarations = new List(); + + foreach (FilterDeclarationField declaration in filter.Fields) + { + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, declaration.InstanceDeclaration); + m_dataset.Tables[0].Rows.Add(row); + m_declarations.Add(declaration.InstanceDeclaration); + } + } + + /// + /// Updates the row with the node to read. + /// + public void UpdateRow(DataRow row, InstanceDeclaration declaration) + { + row[0] = declaration; + row[1] = ImageList.Images[ClientUtils.GetImageIndex((declaration.NodeClass == NodeClass.Variable) ? Attributes.Value : Attributes.NodeId, null)]; + row[2] = declaration.DisplayPath; + row[3] = declaration.DataTypeDisplayText; + row[4] = declaration.Description; + } + + /// + /// Reads the values displayed in the control and moves to the display results state. + /// + public void Read() + { + if (m_session == null) + { + throw new ServiceResultException(StatusCodes.BadNotConnected); + } + + // build list of values to read. + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + foreach (DataGridViewRow row in ResultsDV.Rows) + { + DataRowView source = row.DataBoundItem as DataRowView; + InstanceDeclaration value = (InstanceDeclaration)source.Row[0]; + row.Selected = false; + + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = value.NodeId; + nodeToRead.AttributeId = (value.NodeClass == NodeClass.Variable) ? Attributes.Value : Attributes.NodeId; + nodesToRead.Add(nodeToRead); + } + + // read the values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Both, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + DescriptionCH.Visible = false; + ValueCH.Visible = true; + + // add the results to the display. + for (int ii = 0; ii < results.Count; ii++) + { + DataRowView source = ResultsDV.Rows[ii].DataBoundItem as DataRowView; + UpdateRow(source.Row, results[ii]); + } + } + #endregion + + #region Private Methods + /// + /// Updates the row with the node to read. + /// + public void UpdateRow(DataRow row, DataValue value) + { + row[5] = value.WrappedValue; + } + #endregion + + #region Event Handlers + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.resx new file mode 100644 index 00000000..3e9bcf95 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/TypeFieldsListViewCtrl.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + 136, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.Designer.cs new file mode 100644 index 00000000..e95ae6a4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.Designer.cs @@ -0,0 +1,195 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class UserNamePasswordDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.TableLayoutPanel(); + this.PasswordLB = new System.Windows.Forms.Label(); + this.UserNameLB = new System.Windows.Forms.Label(); + this.UserNameTB = new System.Windows.Forms.TextBox(); + this.PasswordTB = new System.Windows.Forms.TextBox(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 53); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(247, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(168, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.ColumnCount = 2; + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.Controls.Add(this.PasswordLB, 0, 1); + this.MainPN.Controls.Add(this.UserNameLB, 0, 0); + this.MainPN.Controls.Add(this.UserNameTB, 1, 0); + this.MainPN.Controls.Add(this.PasswordTB, 1, 1); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.RowCount = 3; + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.Size = new System.Drawing.Size(247, 53); + this.MainPN.TabIndex = 1; + // + // PasswordLB + // + this.PasswordLB.AutoSize = true; + this.PasswordLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PasswordLB.Location = new System.Drawing.Point(3, 26); + this.PasswordLB.Name = "PasswordLB"; + this.PasswordLB.Size = new System.Drawing.Size(60, 26); + this.PasswordLB.TabIndex = 2; + this.PasswordLB.Text = "Password"; + this.PasswordLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserNameLB + // + this.UserNameLB.AutoSize = true; + this.UserNameLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.UserNameLB.Location = new System.Drawing.Point(3, 0); + this.UserNameLB.Name = "UserNameLB"; + this.UserNameLB.Size = new System.Drawing.Size(60, 26); + this.UserNameLB.TabIndex = 0; + this.UserNameLB.Text = "User Name"; + this.UserNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserNameTB + // + this.UserNameTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.UserNameTB.Location = new System.Drawing.Point(69, 3); + this.UserNameTB.Name = "UserNameTB"; + this.UserNameTB.Size = new System.Drawing.Size(175, 20); + this.UserNameTB.TabIndex = 1; + // + // PasswordTB + // + this.PasswordTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PasswordTB.Location = new System.Drawing.Point(69, 29); + this.PasswordTB.Name = "PasswordTB"; + this.PasswordTB.PasswordChar = '*'; + this.PasswordTB.Size = new System.Drawing.Size(175, 20); + this.PasswordTB.TabIndex = 3; + // + // UserNamePasswordDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(247, 84); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "UserNamePasswordDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Enter User Name"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.TableLayoutPanel MainPN; + private System.Windows.Forms.Label PasswordLB; + private System.Windows.Forms.Label UserNameLB; + private System.Windows.Forms.TextBox UserNameTB; + private System.Windows.Forms.TextBox PasswordTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.cs new file mode 100644 index 00000000..8ba5698c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.cs @@ -0,0 +1,84 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to enter a user name/password. + /// + public partial class UserNamePasswordDlg : Form + { + /// + /// Contructs the object. + /// + public UserNamePasswordDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + + /// + /// Displays the dialog. + /// + public UserIdentity ShowDialog(IUserIdentity identity, string caption) + { + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + if (identity != null) + { + UserNameIdentityToken token = identity.GetIdentityToken() as UserNameIdentityToken; + + if (token != null) + { + UserNameTB.Text = token.UserName; + PasswordTB.Text = token.DecryptedPassword; + } + } + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return new UserIdentity(UserNameTB.Text, PasswordTB.Text); + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/UserNamePasswordDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.Designer.cs new file mode 100644 index 00000000..f3e2640a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.Designer.cs @@ -0,0 +1,121 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ViewEventDetailsDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.FieldsLV = new System.Windows.Forms.ListView(); + this.FieldCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.DataTypeCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ValueCH = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.SuspendLayout(); + // + // FieldsLV + // + this.FieldsLV.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.FieldCH, + this.DataTypeCH, + this.ValueCH}); + this.FieldsLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.FieldsLV.FullRowSelect = true; + this.FieldsLV.Location = new System.Drawing.Point(0, 0); + this.FieldsLV.MultiSelect = false; + this.FieldsLV.Name = "FieldsLV"; + this.FieldsLV.Size = new System.Drawing.Size(546, 360); + this.FieldsLV.TabIndex = 6; + this.FieldsLV.UseCompatibleStateImageBehavior = false; + this.FieldsLV.View = System.Windows.Forms.View.Details; + // + // FieldCH + // + this.FieldCH.Text = "Field"; + this.FieldCH.Width = 151; + // + // DataTypeCH + // + this.DataTypeCH.Text = "Data Type"; + this.DataTypeCH.Width = 87; + // + // ValueCH + // + this.ValueCH.Text = "Value"; + this.ValueCH.Width = 137; + // + // ViewEventDetailsDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(546, 360); + this.Controls.Add(this.FieldsLV); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ViewEventDetailsDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "View Event Details"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView FieldsLV; + private System.Windows.Forms.ColumnHeader FieldCH; + private System.Windows.Forms.ColumnHeader ValueCH; + private System.Windows.Forms.ColumnHeader DataTypeCH; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.cs new file mode 100644 index 00000000..675c239f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.cs @@ -0,0 +1,106 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays all fields associated with an event notification. + /// + public partial class ViewEventDetailsDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public ViewEventDetailsDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Shows all fields for the current condition. + /// + public bool ShowDialog(FilterDeclaration filter, VariantCollection fields) + { + // fill in dialog. + for (int ii = 0; ii < filter.Fields.Count; ii++) + { + InstanceDeclaration instance = filter.Fields[ii].InstanceDeclaration; + ListViewItem item = new ListViewItem(instance.DisplayPath); + item.SubItems.Add(instance.DataTypeDisplayText); + + string text = null; + + // check for missing fields. + if (fields.Count <= ii+1 || fields[ii+1].Value == null) + { + text = String.Empty; + } + + // use default string format. + else + { + text = fields[ii+1].ToString(); + } + + item.SubItems.Add(text); + item.Tag = filter.Fields[ii]; + FieldsLV.Items.Add(item); + } + + // adjust columns. + for (int ii = 0; ii < FieldsLV.Columns.Count; ii++) + { + FieldsLV.Columns[ii].Width = -2; + } + + // display the dialog. + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + return true; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/ViewEventDetailsDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.Designer.cs new file mode 100644 index 00000000..05ca24b5 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.Designer.cs @@ -0,0 +1,160 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class WriteRequestDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonPN = new System.Windows.Forms.FlowLayoutPanel(); + this.CloseBTN = new System.Windows.Forms.Button(); + this.WriteBTN = new System.Windows.Forms.Button(); + this.ReadBTN = new System.Windows.Forms.Button(); + this.BackBTN = new System.Windows.Forms.Button(); + this.WriteRequestCTRL = new Opc.Ua.Client.Controls.WriteRequestListViewCtrl(); + this.ButtonPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonPN + // + this.ButtonPN.Controls.Add(this.CloseBTN); + this.ButtonPN.Controls.Add(this.WriteBTN); + this.ButtonPN.Controls.Add(this.ReadBTN); + this.ButtonPN.Controls.Add(this.BackBTN); + this.ButtonPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonPN.Location = new System.Drawing.Point(0, 233); + this.ButtonPN.Name = "ButtonPN"; + this.ButtonPN.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ButtonPN.Size = new System.Drawing.Size(784, 29); + this.ButtonPN.TabIndex = 1; + // + // CloseBTN + // + this.CloseBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CloseBTN.Location = new System.Drawing.Point(706, 3); + this.CloseBTN.Name = "CloseBTN"; + this.CloseBTN.Size = new System.Drawing.Size(75, 23); + this.CloseBTN.TabIndex = 0; + this.CloseBTN.Text = "Close"; + this.CloseBTN.UseVisualStyleBackColor = true; + this.CloseBTN.Click += new System.EventHandler(this.CloseBTN_Click); + // + // WriteBTN + // + this.WriteBTN.Location = new System.Drawing.Point(625, 3); + this.WriteBTN.Name = "WriteBTN"; + this.WriteBTN.Size = new System.Drawing.Size(75, 23); + this.WriteBTN.TabIndex = 3; + this.WriteBTN.Text = "Write"; + this.WriteBTN.UseVisualStyleBackColor = true; + this.WriteBTN.Click += new System.EventHandler(this.WriteBTN_Click); + // + // ReadBTN + // + this.ReadBTN.Location = new System.Drawing.Point(544, 3); + this.ReadBTN.Name = "ReadBTN"; + this.ReadBTN.Size = new System.Drawing.Size(75, 23); + this.ReadBTN.TabIndex = 1; + this.ReadBTN.Text = "Read"; + this.ReadBTN.UseVisualStyleBackColor = true; + this.ReadBTN.Click += new System.EventHandler(this.ReadBTN_Click); + // + // BackBTN + // + this.BackBTN.Location = new System.Drawing.Point(463, 3); + this.BackBTN.Name = "BackBTN"; + this.BackBTN.Size = new System.Drawing.Size(75, 23); + this.BackBTN.TabIndex = 2; + this.BackBTN.Text = "Back"; + this.BackBTN.UseVisualStyleBackColor = true; + this.BackBTN.Visible = false; + this.BackBTN.Click += new System.EventHandler(this.BackBTN_Click); + // + // WriteRequestCTRL + // + this.WriteRequestCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.WriteRequestCTRL.Location = new System.Drawing.Point(0, 0); + this.WriteRequestCTRL.Name = "WriteRequestCTRL"; + this.WriteRequestCTRL.Size = new System.Drawing.Size(784, 233); + this.WriteRequestCTRL.TabIndex = 0; + // + // WriteRequestDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 262); + this.Controls.Add(this.WriteRequestCTRL); + this.Controls.Add(this.ButtonPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "WriteRequestDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Write Attribute Values"; + this.ButtonPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private WriteRequestListViewCtrl WriteRequestCTRL; + private System.Windows.Forms.FlowLayoutPanel ButtonPN; + private System.Windows.Forms.Button CloseBTN; + private System.Windows.Forms.Button ReadBTN; + private System.Windows.Forms.Button BackBTN; + private System.Windows.Forms.Button WriteBTN; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.cs new file mode 100644 index 00000000..777c079e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.cs @@ -0,0 +1,142 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to edit and issue read requests. + /// + public partial class WriteRequestDlg : Form, ISessionForm + { + #region Constructors + /// + /// Creates an empty form. + /// + public WriteRequestDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Changes the session used for the read request. + /// + public void ChangeSession(Session session) + { + WriteRequestCTRL.ChangeSession(session); + } + + /// + /// Adds a node to the read request. + /// + public void AddNodes(params WriteValue[] nodesToWrite) + { + WriteRequestCTRL.AddNodes(nodesToWrite); + } + #endregion + + #region Private Methods + #endregion + + #region Event Handlers + private void ReadBTN_Click(object sender, EventArgs e) + { + try + { + WriteRequestCTRL.Read(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void WriteBTN_Click(object sender, EventArgs e) + { + try + { + WriteRequestCTRL.Write(); + ReadBTN.Visible = false; + BackBTN.Visible = true; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void BackBTN_Click(object sender, EventArgs e) + { + try + { + WriteRequestCTRL.Back(); + ReadBTN.Visible = true; + BackBTN.Visible = false; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void CloseBTN_Click(object sender, EventArgs e) + { + try + { + if (this.Modal) + { + DialogResult = DialogResult.Cancel; + } + else + { + this.Close(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.Designer.cs new file mode 100644 index 00000000..c2c6c3df --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.Designer.cs @@ -0,0 +1,292 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class WriteRequestListViewCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.Icon = new System.Windows.Forms.DataGridViewImageColumn(); + this.NodeNameCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.AttributeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.IndexRangeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ValueCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StatusCodeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SourceTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ServerTimestampCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RightPN = new System.Windows.Forms.Panel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.NewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.EditValueMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewMI, + this.EditMI, + this.EditValueMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(153, 114); + this.PopupMenu.Opening += new System.ComponentModel.CancelEventHandler(this.PopupMenu_Opening); + // + // EditMI + // + this.EditMI.Name = "EditMI"; + this.EditMI.Size = new System.Drawing.Size(152, 22); + this.EditMI.Text = "Edit..."; + this.EditMI.Click += new System.EventHandler(this.EditMI_Click); + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Icon, + this.NodeNameCH, + this.AttributeCH, + this.IndexRangeCH, + this.DataTypeCH, + this.ValueCH, + this.StatusCodeCH, + this.SourceTimestampCH, + this.ServerTimestampCH, + this.ResultCH}); + this.ResultsDV.ContextMenuStrip = this.PopupMenu; + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersVisible = false; + this.ResultsDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsDV.Size = new System.Drawing.Size(754, 346); + this.ResultsDV.TabIndex = 0; + this.ResultsDV.DoubleClick += new System.EventHandler(this.EditValueMI_Click); + // + // Icon + // + this.Icon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Icon.DataPropertyName = "Icon"; + this.Icon.HeaderText = ""; + this.Icon.Name = "Icon"; + this.Icon.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Icon.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Icon.Width = 19; + // + // NodeNameCH + // + this.NodeNameCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NodeNameCH.DataPropertyName = "NodeName"; + this.NodeNameCH.HeaderText = "Node"; + this.NodeNameCH.Name = "NodeNameCH"; + this.NodeNameCH.ReadOnly = true; + this.NodeNameCH.Width = 58; + // + // AttributeCH + // + this.AttributeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.AttributeCH.DataPropertyName = "Attribute"; + this.AttributeCH.HeaderText = "Attribute"; + this.AttributeCH.Name = "AttributeCH"; + this.AttributeCH.ReadOnly = true; + this.AttributeCH.Width = 71; + // + // IndexRangeCH + // + this.IndexRangeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.IndexRangeCH.DataPropertyName = "IndexRange"; + this.IndexRangeCH.HeaderText = "Index Range"; + this.IndexRangeCH.Name = "IndexRangeCH"; + this.IndexRangeCH.ReadOnly = true; + this.IndexRangeCH.Width = 93; + // + // DataTypeCH + // + this.DataTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataTypeCH.DataPropertyName = "DataType"; + this.DataTypeCH.HeaderText = "Data Type"; + this.DataTypeCH.Name = "DataTypeCH"; + this.DataTypeCH.ReadOnly = true; + this.DataTypeCH.Width = 82; + // + // ValueCH + // + this.ValueCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueCH.DataPropertyName = "Value"; + this.ValueCH.HeaderText = "Value"; + this.ValueCH.Name = "ValueCH"; + this.ValueCH.ReadOnly = true; + // + // StatusCodeCH + // + this.StatusCodeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.StatusCodeCH.DataPropertyName = "StatusCode"; + this.StatusCodeCH.HeaderText = "StatusCode"; + this.StatusCodeCH.Name = "StatusCodeCH"; + this.StatusCodeCH.ReadOnly = true; + this.StatusCodeCH.Width = 87; + // + // SourceTimestampCH + // + this.SourceTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.SourceTimestampCH.DataPropertyName = "SourceTimestamp"; + this.SourceTimestampCH.HeaderText = "SourceTimestamp"; + this.SourceTimestampCH.Name = "SourceTimestampCH"; + this.SourceTimestampCH.ReadOnly = true; + this.SourceTimestampCH.Visible = false; + // + // ServerTimestampCH + // + this.ServerTimestampCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ServerTimestampCH.DataPropertyName = "ServerTimestamp"; + this.ServerTimestampCH.HeaderText = "ServerTimestamp"; + this.ServerTimestampCH.Name = "ServerTimestampCH"; + this.ServerTimestampCH.ReadOnly = true; + this.ServerTimestampCH.Visible = false; + // + // ResultCH + // + this.ResultCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ResultCH.DataPropertyName = "Result"; + this.ResultCH.HeaderText = "Result"; + this.ResultCH.Name = "ResultCH"; + this.ResultCH.ReadOnly = true; + this.ResultCH.Visible = false; + // + // RightPN + // + this.RightPN.Controls.Add(this.ResultsDV); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(0, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(754, 346); + this.RightPN.TabIndex = 3; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // NewMI + // + this.NewMI.Name = "NewMI"; + this.NewMI.Size = new System.Drawing.Size(152, 22); + this.NewMI.Text = "New..."; + this.NewMI.Click += new System.EventHandler(this.NewMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(152, 22); + this.DeleteMI.Text = "Delete..."; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // EditValueMI + // + this.EditValueMI.Name = "EditValueMI"; + this.EditValueMI.Size = new System.Drawing.Size(152, 22); + this.EditValueMI.Text = "Edit Value..."; + this.EditValueMI.Click += new System.EventHandler(this.EditValueMI_Click); + // + // WriteRequestListViewCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.RightPN); + this.Name = "WriteRequestListViewCtrl"; + this.Size = new System.Drawing.Size(754, 346); + this.PopupMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.Panel RightPN; + private System.Windows.Forms.ToolStripMenuItem EditMI; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.DataGridViewImageColumn Icon; + private System.Windows.Forms.DataGridViewTextBoxColumn NodeNameCH; + private System.Windows.Forms.DataGridViewTextBoxColumn AttributeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn IndexRangeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn DataTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueCH; + private System.Windows.Forms.DataGridViewTextBoxColumn StatusCodeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn SourceTimestampCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ServerTimestampCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ResultCH; + private System.Windows.Forms.ToolStripMenuItem NewMI; + private System.Windows.Forms.ToolStripMenuItem EditValueMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.cs new file mode 100644 index 00000000..80d1ba94 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.cs @@ -0,0 +1,424 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class WriteRequestListViewCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public WriteRequestListViewCtrl() + { + InitializeComponent(); + ResultsDV.AutoGenerateColumns = false; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Requests"); + + m_dataset.Tables[0].Columns.Add("WriteValue", typeof(WriteValue)); + m_dataset.Tables[0].Columns.Add("Icon", typeof(Image)); + m_dataset.Tables[0].Columns.Add("NodeName", typeof(string)); + m_dataset.Tables[0].Columns.Add("Attribute", typeof(string)); + m_dataset.Tables[0].Columns.Add("IndexRange", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + m_dataset.Tables[0].Columns.Add("StatusCode", typeof(StatusCode)); + m_dataset.Tables[0].Columns.Add("SourceTimestamp", typeof(string)); + m_dataset.Tables[0].Columns.Add("ServerTimestamp", typeof(string)); + m_dataset.Tables[0].Columns.Add("Result", typeof(StatusCode)); + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private Session m_session; + #endregion + + #region Public Members + /// + /// Changes the session used for the write request. + /// + public void ChangeSession(Session session) + { + m_session = session; + } + + /// + /// Adds the nodes to the write request. + /// + public void AddNodes(params WriteValue[] nodesToWrite) + { + if (nodesToWrite != null && nodesToWrite.Length > 0) + { + foreach (WriteValue nodeToWrite in nodesToWrite) + { + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, nodeToWrite); + nodeToWrite.Handle = row; + m_dataset.Tables[0].Rows.Add(row); + } + + Read(nodesToWrite); + } + } + + /// + /// Updates the values with the current values read from the server. + /// + public void Read(params WriteValue[] nodesToWrite) + { + if (m_session == null) + { + throw new ServiceResultException(StatusCodes.BadNotConnected); + } + + // build list of values to read. + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + if (nodesToWrite == null || nodesToWrite.Length == 0) + { + foreach (DataGridViewRow row in ResultsDV.Rows) + { + DataRowView source = row.DataBoundItem as DataRowView; + WriteValue value = (WriteValue)source.Row[0]; + row.Selected = false; + + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = value.NodeId; + nodeToRead.AttributeId = value.AttributeId; + nodeToRead.IndexRange = value.IndexRange; + nodeToRead.Handle = value; + + nodesToRead.Add(nodeToRead); + } + } + else + { + foreach (WriteValue value in nodesToWrite) + { + ReadValueId nodeToRead = new ReadValueId(); + nodeToRead.NodeId = value.NodeId; + nodeToRead.AttributeId = value.AttributeId; + nodeToRead.IndexRange = value.IndexRange; + nodeToRead.Handle = value; + + nodesToRead.Add(nodeToRead); + } + } + + // read the values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // add the results to the display. + for (int ii = 0; ii < results.Count; ii++) + { + WriteValue nodeToWrite = nodesToRead[ii].Handle as WriteValue; + DataRow row = nodeToWrite.Handle as DataRow; + + if (StatusCode.IsGood(results[ii].StatusCode)) + { + nodeToWrite.Value = results[ii]; + UpdateRow(row, results[ii]); + } + } + } + + /// + /// Reads the values displayed in the control and moves to the display results state. + /// + public void Write() + { + if (m_session == null) + { + throw new ServiceResultException(StatusCodes.BadNotConnected); + } + + // build list of values to write. + WriteValueCollection nodesToWrite = new WriteValueCollection(); + + foreach (DataGridViewRow row in ResultsDV.Rows) + { + DataRowView source = row.DataBoundItem as DataRowView; + WriteValue value = (WriteValue)source.Row[0]; + row.Selected = false; + nodesToWrite.Add(value); + } + + // read the values. + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Write( + null, + nodesToWrite, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToWrite); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToWrite); + + IndexRangeCH.Visible = false; + DataTypeCH.Visible = false; + ValueCH.Visible = false; + StatusCodeCH.Visible = false; + ResultCH.Visible = true; + + // add the results to the display. + for (int ii = 0; ii < results.Count; ii++) + { + DataRowView source = ResultsDV.Rows[ii].DataBoundItem as DataRowView; + UpdateRow(source.Row, results[ii]); + } + } + + /// + /// Returns the grid to edit WriteValues state. + /// + public void Back() + { + IndexRangeCH.Visible = true; + DataTypeCH.Visible = true; + ValueCH.Visible = true; + StatusCodeCH.Visible = true; + ResultCH.Visible = false; + + // clear any selection. + foreach (DataGridViewRow row in ResultsDV.Rows) + { + row.Selected = false; + } + } + #endregion + + #region Private Methods + /// + /// Updates the row with the node to write. + /// + public void UpdateRow(DataRow row, StatusCode result) + { + row[10] = result; + } + + /// + /// Updates the row with the node to write. + /// + public void UpdateRow(DataRow row, DataValue value) + { + row[5] = (value.WrappedValue.TypeInfo != null) ? value.WrappedValue.TypeInfo.ToString() : String.Empty; + row[6] = value.WrappedValue; + row[7] = value.StatusCode; + row[8] = (value.SourceTimestamp != DateTime.MinValue) ? Utils.Format("{0:hh:mm:ss.fff}", value.SourceTimestamp.ToLocalTime()) : String.Empty; + row[9] = (value.ServerTimestamp != DateTime.MinValue) ? Utils.Format("{0:hh:mm:ss.fff}", value.ServerTimestamp.ToLocalTime()) : String.Empty; + } + + /// + /// Updates the row with the node to write. + /// + public void UpdateRow(DataRow row, WriteValue nodeToWrite) + { + row[0] = nodeToWrite; + row[1] = ImageList.Images[ClientUtils.GetImageIndex(nodeToWrite.AttributeId, null)]; + row[2] = (m_session != null) ? m_session.NodeCache.GetDisplayText(nodeToWrite.NodeId) : Utils.ToString(nodeToWrite.NodeId); + row[3] = Attributes.GetBrowseName(nodeToWrite.AttributeId); + row[4] = nodeToWrite.IndexRange; + + UpdateRow(row, nodeToWrite.Value); + } + #endregion + + #region Event Handlers + private void PopupMenu_Opening(object sender, CancelEventArgs e) + { + try + { + EditMI.Enabled = ResultsDV.SelectedRows.Count == 1; + EditValueMI.Enabled = ResultsDV.SelectedRows.Count > 0; + DeleteMI.Enabled = ResultsDV.SelectedRows.Count > 0; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void NewMI_Click(object sender, EventArgs e) + { + try + { + WriteValue nodeToWrite = null; + + // choose the first selected row as a template. + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + WriteValue value = (WriteValue)source.Row[0]; + nodeToWrite = (WriteValue)value.MemberwiseClone(); + break; + } + + if (nodeToWrite == null) + { + nodeToWrite = new WriteValue() { AttributeId = Attributes.Value }; + } + + // prompt use to edit new value. + WriteValue result = new EditWriteValueDlg().ShowDialog(m_session, nodeToWrite); + + if (result != null) + { + DataRow row = m_dataset.Tables[0].NewRow(); + UpdateRow(row, result); + m_dataset.Tables[0].Rows.Add(row); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EditMI_Click(object sender, EventArgs e) + { + try + { + // choose the first selected row. + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + WriteValue value = (WriteValue)source.Row[0]; + + WriteValue result = new EditWriteValueDlg().ShowDialog(m_session, value); + + if (result != null) + { + UpdateRow(source.Row, result); + } + + break; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void EditValueMI_Click(object sender, EventArgs e) + { + try + { + // choose the first selected row as the templace. + WriteValue nodeToWrite = null; + + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + nodeToWrite = (WriteValue)source.Row[0]; + break; + } + + if (nodeToWrite != null) + { + // prompt use to edit value. + object value = new EditComplexValueDlg().ShowDialog( + m_session, + nodeToWrite.NodeId, + nodeToWrite.AttributeId, + null, + nodeToWrite.Value.Value, + false, + "Edit Value"); + + if (value != null) + { + // update all selected rows with the new value. + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + nodeToWrite = (WriteValue)source.Row[0]; + nodeToWrite.Value.Value = value; + UpdateRow(source.Row, nodeToWrite); + } + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + foreach (DataGridViewRow row in ResultsDV.SelectedRows) + { + DataRowView source = row.DataBoundItem as DataRowView; + source.Row.Delete(); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.resx new file mode 100644 index 00000000..a5b7d70f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/Client/WriteRequestListViewCtrl.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 22, 13 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 136, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.Designer.cs new file mode 100644 index 00000000..673bdbe4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.Designer.cs @@ -0,0 +1,87 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ClientUtils + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClientUtils)); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.SuspendLayout(); + // + // ImageList + // + this.ImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ImageList.ImageStream"))); + this.ImageList.TransparentColor = System.Drawing.Color.White; + this.ImageList.Images.SetKeyName(0, "TBD"); + // + // ClientUtils + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "ClientUtils"; + this.ResumeLayout(false); + + } + + #endregion + + /// + /// A list of shared images for controls. + /// + public System.Windows.Forms.ImageList ImageList; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.cs new file mode 100644 index 00000000..93af6fd5 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.cs @@ -0,0 +1,194 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A class that provide various common utility functions and shared resources. + /// + public partial class ClientUtils : UserControl + { + /// + /// Initializes a new instance of the class. + /// + public ClientUtils() + { + InitializeComponent(); + } + + private const int Attribute = 0; + private const int Property = 1; + private const int Variable = 2; + private const int Method = 3; + private const int Object = 4; + private const int OpenFolder = 5; + private const int ClosedFolder = 6; + private const int ObjectType = 7; + private const int View = 8; + private const int Reference = 9; + private const int NumberValue = 10; + private const int StringValue = 11; + private const int ByteStringValue = 12; + private const int StructureValue = 13; + private const int ArrayValue = 14; + private const int InputArgument = 15; + private const int OutputArgument = 16; + + /// + /// Returns an image index for the specified method argument. + /// + public static int GetImageIndex(bool isOutputArgument, object value) + { + if (isOutputArgument) + { + return OutputArgument; + } + + return InputArgument; + } + + /// + /// Returns an image index for the specified attribute. + /// + #pragma warning disable 0162 + public static int GetImageIndex(uint attributeId, object value) + { + // Workaround to avoid exception when accessing ImageList + // Original ImageStream has been removed a long time ago + // now there is only a single image for all types. + // TODO: add license free images back in + return 0; + + if (attributeId == Attributes.Value) + { + TypeInfo typeInfo = TypeInfo.Construct(value); + + if (typeInfo.ValueRank >= 0) + { + return ClientUtils.ArrayValue; + } + + if (typeInfo.BuiltInType == BuiltInType.Variant) + { + typeInfo = ((Variant)value).TypeInfo; + + if (typeInfo == null) + { + typeInfo = TypeInfo.Construct(((Variant)value).Value); + } + } + + switch (typeInfo.BuiltInType) + { + case BuiltInType.Number: + 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.Enumeration: + case BuiltInType.UInteger: + case BuiltInType.Integer: + case BuiltInType.Boolean: + { + return ClientUtils.NumberValue; + } + + case BuiltInType.ByteString: + { + return ClientUtils.ByteStringValue; + } + + case BuiltInType.ExtensionObject: + case BuiltInType.DiagnosticInfo: + case BuiltInType.DataValue: + { + return ClientUtils.StructureValue; + } + } + + return ClientUtils.StringValue; + } + + return ClientUtils.Attribute; + } + + /// + /// Returns an image index for the specified attribute. + /// + public static int GetImageIndex(Session session, NodeClass nodeClass, ExpandedNodeId typeDefinitionId, bool selected) + { + if (nodeClass == NodeClass.Variable) + { + if (session.NodeCache.IsTypeOf(typeDefinitionId, Opc.Ua.VariableTypeIds.PropertyType)) + { + return ClientUtils.Property; + } + + return ClientUtils.Variable; + } + + if (nodeClass == NodeClass.Object) + { + if (session.NodeCache.IsTypeOf(typeDefinitionId, Opc.Ua.ObjectTypeIds.FolderType)) + { + if (selected) + { + return ClientUtils.OpenFolder; + } + else + { + return ClientUtils.ClosedFolder; + } + } + + return ClientUtils.Object; + } + + if (nodeClass == NodeClass.Method) + { + return ClientUtils.Method; + } + + if (nodeClass == NodeClass.View) + { + return ClientUtils.View; + } + + return ClientUtils.ObjectType; + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.resx new file mode 100644 index 00000000..6abdb992 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ClientUtils.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAc + AwAAAk1TRnQBSQFMAwEBAAFUAQABVAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA + ARADAAEBAQABGAYAAQz/AP8A/wAbAAHIAb0BtQGIAXABXQGDAWoBWAF+AWUBUgF6AWABTgF1AVwBSAFx + AVcBQwFtAVMBPgFqAU8BOwFnAUsBNwG6Aa4BpJ8AAa8BlgGHAekB4AHcAeMB2gHTAd4B0wHMAdoBzAHE + AdUBxQG8AdABvgG1AcsBuAGsAcYBsQGmAcMBqwGfAWgBTgE5nwABswGaAYsB7gHoAeUB6QHhAdwB4wHZ + AdQB3wHSAcwB2gHMAcQB1QHFAbwB0AG+AbUBzAG4Aa0BxgGxAaUBbQFTAT6fAAG3AZ4BkAHzAe8B7AHu + AegB5AHoAeAB3AF+AWUBUgFuAVQBQAFjAUgBMwHVAcUBvAHQAb4BtAHLAbgBrAFzAVoBRp8AAbwBowGW + AfgB9gH0AfMB7wHtAe8B6AHkAekB4AHcAeMB2QHTAd8B0wHLAdoBzAHFAdUBxQG8AdABvgG1AXoBYAFO + nwABwQGpAZ0B/AL7AfgB9gL0Ae8B7AF+AWYBUgFuAVQBPwFjAUgBMwHeAdMBzAHaAcwBxAHVAcUBvAGA + AWgBVZ8AAcUBrwGjAwAB/AL7AfkB9gH1AfQB7wHsAe4B5wHkAekB4QHbAeQB2QHTAd4B0gHMAdoBzAHF + AYgBcAFdnwAByQG0AaoGAAH8AfsB+gH4AfUB9AHzAe8B7AHuAecB5QHoAeAB3AHjAdkB1AHfAdMBzAGO + AXcBZp8AAeYB3QHYAckBtAGpAcQBrQGiAb8BqAGbAbsBogGTAbUBnAGOAbIBmAGJAa0BlAGEAagBjwF/ + AaMBigF5AcgBvQG1/wD/ANsAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAL/ + BgAC/wYAAv8GAAL/BgABwAEHBgABwAEHBgABwAEHBgABwAEHBgABwAEHBgABwAEHBgAB0AEHBgAB2AEH + BgABwAEHBgAC/wYAAv8GAAL/BgAL + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.Designer.cs new file mode 100644 index 00000000..1ffe90f7 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.Designer.cs @@ -0,0 +1,164 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoverServerDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.ValueLB = new System.Windows.Forms.Label(); + this.ValueTB = new System.Windows.Forms.TextBox(); + this.ServersLB = new System.Windows.Forms.ListBox(); + this.FindBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(313, 173); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 173); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // ValueLB + // + this.ValueLB.AutoSize = true; + this.ValueLB.Location = new System.Drawing.Point(1, 9); + this.ValueLB.Name = "ValueLB"; + this.ValueLB.Size = new System.Drawing.Size(29, 13); + this.ValueLB.TabIndex = 2; + this.ValueLB.Text = "Host"; + // + // ValueTB + // + this.ValueTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueTB.Location = new System.Drawing.Point(36, 6); + this.ValueTB.Name = "ValueTB"; + this.ValueTB.Size = new System.Drawing.Size(306, 20); + this.ValueTB.TabIndex = 3; + this.ValueTB.TextChanged += new System.EventHandler(this.ValueTB_TextChanged); + // + // ServersLB + // + this.ServersLB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ServersLB.FormattingEnabled = true; + this.ServersLB.Location = new System.Drawing.Point(4, 32); + this.ServersLB.Name = "ServersLB"; + this.ServersLB.Size = new System.Drawing.Size(384, 134); + this.ServersLB.TabIndex = 5; + this.ServersLB.SelectedIndexChanged += new System.EventHandler(this.ServersLB_SelectedIndexChanged); + // + // FindBTN + // + this.FindBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FindBTN.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.FindBTN.Location = new System.Drawing.Point(345, 4); + this.FindBTN.Margin = new System.Windows.Forms.Padding(0); + this.FindBTN.Name = "FindBTN"; + this.FindBTN.Size = new System.Drawing.Size(43, 23); + this.FindBTN.TabIndex = 4; + this.FindBTN.Text = "Find"; + this.FindBTN.UseVisualStyleBackColor = true; + this.FindBTN.Click += new System.EventHandler(this.FindBTN_Click); + // + // DiscoverServerDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(392, 198); + this.Controls.Add(this.FindBTN); + this.Controls.Add(this.ServersLB); + this.Controls.Add(this.ValueTB); + this.Controls.Add(this.ValueLB); + this.Controls.Add(this.OkBTN); + this.Controls.Add(this.CancelBTN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "DiscoverServerDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Discover Servers"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Label ValueLB; + private System.Windows.Forms.TextBox ValueTB; + private System.Windows.Forms.ListBox ServersLB; + private System.Windows.Forms.Button FindBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.cs new file mode 100644 index 00000000..308d51b5 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.cs @@ -0,0 +1,235 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to specify a host name and discovers the servers. + /// + public partial class DiscoverServerDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public DiscoverServerDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private ApplicationConfiguration m_configuration; + #endregion + + #region Public Interface + /// + /// Shows the dialog. + /// + /// The client applicatio configuration. + /// The selected endpoint url + public string ShowDialog(ApplicationConfiguration configuration) + { + return ShowDialog(configuration, null); + } + + /// + /// Shows the dialog. + /// + /// The client applicatio configuration. + /// The default host name. + /// The selected endpoint url + public string ShowDialog(ApplicationConfiguration configuration, string hostName) + { + m_configuration = configuration; + + if (String.IsNullOrEmpty(hostName)) + { + ValueTB.Text = System.Net.Dns.GetHostName(); + } + else + { + ValueTB.Text = hostName; + } + + // display the dialog. + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return ServersLB.SelectedItem as string; + } + #endregion + + #region Private Methods + /// + /// Gets the endpoints for the host. + /// + /// Name of the host. + private string[] GetEndpoints(string hostName) + { + List urls = new List(); + + try + { + Cursor = Cursors.WaitCursor; + + // set a short timeout because this is happening in the drop down event. + EndpointConfiguration configuration = EndpointConfiguration.Create(m_configuration); + configuration.OperationTimeout = 20000; + + // Connect to the local discovery server and find the available servers. + using (DiscoveryClient client = DiscoveryClient.Create(new Uri(Utils.Format("opc.tcp://{0}:4840", hostName)), configuration)) + { + ApplicationDescriptionCollection servers = client.FindServers(null); + + // populate the drop down list with the discovery URLs for the available servers. + for (int ii = 0; ii < servers.Count; ii++) + { + // don't show discovery servers. + if (servers[ii].ApplicationType == ApplicationType.DiscoveryServer) + { + continue; + } + + for (int jj = 0; jj < servers[ii].DiscoveryUrls.Count; jj++) + { + string discoveryUrl = servers[ii].DiscoveryUrls[jj]; + + // Many servers will use the '/discovery' suffix for the discovery endpoint. + // The URL without this prefix should be the base URL for the server. + if (discoveryUrl.EndsWith("/discovery")) + { + discoveryUrl = discoveryUrl.Substring(0, discoveryUrl.Length - "/discovery".Length); + } + + // remove duplicates. + if (!urls.Contains(discoveryUrl)) + { + urls.Add(discoveryUrl); + } + } + } + } + + return urls.ToArray(); + } + catch (Exception) + { + return urls.ToArray(); + } + finally + { + Cursor = Cursors.Default; + } + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + if (Utils.ParseUri(ServersLB.SelectedItem as string) != null) + { + DialogResult = DialogResult.OK; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ServersLB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + OkBTN.Enabled = Utils.ParseUri(ServersLB.SelectedItem as string) != null; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void FindBTN_Click(object sender, EventArgs e) + { + try + { + Cursor.Current = Cursors.WaitCursor; + + ServersLB.Items.Clear(); + ServersLB.Items.Add("No endpoints found."); + + if (String.IsNullOrEmpty(ValueTB.Text)) + { + return; + } + + ServersLB.Items.Clear(); + + foreach (string url in GetEndpoints(ValueTB.Text)) + { + ServersLB.Items.Add(url); + } + + if (ServersLB.Items.Count == 0) + { + ServersLB.Items.Add("No endpoints found."); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + finally + { + Cursor.Current = Cursors.Default; + } + } + + private void ValueTB_TextChanged(object sender, EventArgs e) + { + ServersLB.Items.Clear(); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoverServerDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.Designer.cs new file mode 100644 index 00000000..d340d256 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.Designer.cs @@ -0,0 +1,73 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoveredServerListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UserAccountListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "UserAccountListCtrl"; + this.ResumeLayout(false); + + } + + #endregion + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.cs new file mode 100644 index 00000000..6bb99e0c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.cs @@ -0,0 +1,324 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of servers. + /// + public partial class DiscoveredServerListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public DiscoveredServerListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + ItemsLV.Sorting = SortOrder.Descending; + ItemsLV.MultiSelect = false; + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Type", HorizontalAlignment.Left, null }, + new object[] { "Host", HorizontalAlignment.Left, null }, + new object[] { "URI", HorizontalAlignment.Left, null } + }; + + private ApplicationConfiguration m_configuration; + private int m_discoveryTimeout; + private int m_discoverCount; + private string m_discoveryUrl; + #endregion + + #region Public Interface + /// + /// The timeout in milliseconds to use when discovering servers. + /// + [System.ComponentModel.DefaultValue(5000)] + public int DiscoveryTimeout + { + get { return m_discoveryTimeout; } + set { m_discoveryTimeout = value; } + } + + /// + /// Gets or sets the discovery URL used to find the servers displayed in the control. + /// + /// The discovery URL. + public string DiscoveryUrl + { + get { return m_discoveryUrl; } + set { m_discoveryUrl = value; } + } + + /// + /// Displays a list of servers in the control. + /// + public void Initialize(ConfiguredEndpointCollection endpoints, ApplicationConfiguration configuration) + { + Interlocked.Exchange(ref m_configuration, configuration); + + ItemsLV.Items.Clear(); + + foreach (ApplicationDescription server in endpoints.GetServers()) + { + AddItem(server); + } + + AdjustColumns(); + } + + /// + /// Displays a list of servers in the control. + /// + public void Initialize(string hostname, ApplicationConfiguration configuration) + { + Interlocked.Exchange(ref m_configuration, configuration); + + ItemsLV.Items.Clear(); + + if (String.IsNullOrEmpty(hostname)) + { + hostname = System.Net.Dns.GetHostName(); + } + + this.Instructions = Utils.Format("Discovering servers on host '{0}'.", hostname); + AdjustColumns(); + + // get a list of well known discovery urls to use. + StringCollection discoveryUrls = null; + + if (configuration != null && configuration.ClientConfiguration != null) + { + discoveryUrls = configuration.ClientConfiguration.WellKnownDiscoveryUrls; + } + + if (discoveryUrls == null || discoveryUrls.Count == 0) + { + discoveryUrls = new StringCollection(Utils.DiscoveryUrls); + } + + // update the urls with the hostname. + StringCollection urlsToUse = new StringCollection(); + + foreach (string discoveryUrl in discoveryUrls) + { + urlsToUse.Add(Utils.Format(discoveryUrl, hostname)); + } + + Interlocked.Increment(ref m_discoverCount); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnDiscoverServers), urlsToUse); + } + + /// + /// Updates the list of servers displayed in the control. + /// + private void OnUpdateServers(object state) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateServers), state); + return; + } + + ItemsLV.Items.Clear(); + + ApplicationDescriptionCollection servers = state as ApplicationDescriptionCollection; + + if (servers != null) + { + foreach (ApplicationDescription server in servers) + { + if (server.ApplicationType == ApplicationType.DiscoveryServer) + { + continue; + } + + AddItem(server); + } + } + + if (ItemsLV.Items.Count == 0) + { + this.Instructions = Utils.Format("No servers to display."); + } + + AdjustColumns(); + } + + /// + /// Attempts fetch the list of servers from the discovery server. + /// + private void OnDiscoverServers(object state) + { + try + { + int discoverCount = m_discoverCount; + + // do nothing if a valid list is not provided. + IList discoveryUrls = state as IList; + + if (discoveryUrls == null) + { + return; + } + + // process each url. + foreach (string discoveryUrl in discoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + if (DiscoverServers(url)) + { + return; + } + + // check if another discover operation has started. + if (discoverCount != m_discoverCount) + { + return; + } + } + } + + // display empty list. + OnUpdateServers(null); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error discovering servers."); + } + } + + /// + /// Fetches the servers from the discovery server. + /// + private bool DiscoverServers(Uri discoveryUrl) + { + // use a short timeout. + EndpointConfiguration configuration = EndpointConfiguration.Create(m_configuration); + configuration.OperationTimeout = m_discoveryTimeout; + + DiscoveryClient client = null; + + try + { + client = DiscoveryClient.Create( + discoveryUrl, + EndpointConfiguration.Create(m_configuration)); + + ApplicationDescriptionCollection servers = client.FindServers(null); + m_discoveryUrl = discoveryUrl.ToString(); + OnUpdateServers(servers); + return true; + } + catch (Exception e) + { + Utils.Trace("DISCOVERY ERROR - Could not fetch servers from url: {0}. Error=({2}){1}", discoveryUrl, e.Message, e.GetType()); + return false; + } + finally + { + if (client != null) + { + client.Close(); + } + } + } + #endregion + + #region Overridden Methods + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + ApplicationDescription server = listItem.Tag as ApplicationDescription; + + if (server == null) + { + base.UpdateItem(listItem, server); + return; + } + + string hostname = ""; + + // extract host from application uri. + Uri uri = Utils.ParseUri(server.ApplicationUri); + + if (uri != null) + { + hostname = uri.DnsSafeHost; + } + + // get the host name from the discovery urls. + if (String.IsNullOrEmpty(hostname)) + { + foreach (string discoveryUrl in server.DiscoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + hostname = url.DnsSafeHost; + break; + } + } + } + + listItem.SubItems[0].Text = String.Format("{0}", server.ApplicationName); + listItem.SubItems[1].Text = String.Format("{0}", server.ApplicationType); + listItem.SubItems[2].Text = String.Format("{0}", hostname); + listItem.SubItems[3].Text = String.Format("{0}", server.ApplicationUri); + + listItem.ImageKey = GuiUtils.Icons.Service; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.Designer.cs new file mode 100644 index 00000000..0551d172 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.Designer.cs @@ -0,0 +1,198 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoveredServerListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ServersCTRL = new Opc.Ua.Client.Controls.DiscoveredServerListCtrl(); + this.TopPN = new System.Windows.Forms.Panel(); + this.HostNameLB = new System.Windows.Forms.Label(); + this.HostNameCTRL = new Opc.Ua.Client.Controls.SelectHostCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.TopPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(2, 353); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(673, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(594, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ServersCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(2, 23); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.MainPN.Size = new System.Drawing.Size(673, 330); + this.MainPN.TabIndex = 2; + // + // ServersCTRL + // + this.ServersCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.ServersCTRL.DiscoveryTimeout = 0; + this.ServersCTRL.DiscoveryUrl = null; + this.ServersCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServersCTRL.Instructions = null; + this.ServersCTRL.Location = new System.Drawing.Point(0, 3); + this.ServersCTRL.Name = "ServersCTRL"; + this.ServersCTRL.Size = new System.Drawing.Size(673, 327); + this.ServersCTRL.TabIndex = 0; + this.ServersCTRL.ItemsPicked += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsPicked); + this.ServersCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsSelected); + // + // TopPN + // + this.TopPN.Controls.Add(this.HostNameLB); + this.TopPN.Controls.Add(this.HostNameCTRL); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(2, 2); + this.TopPN.Name = "TopPN"; + this.TopPN.Size = new System.Drawing.Size(673, 21); + this.TopPN.TabIndex = 1; + // + // HostNameLB + // + this.HostNameLB.AutoSize = true; + this.HostNameLB.Location = new System.Drawing.Point(0, 4); + this.HostNameLB.Name = "HostNameLB"; + this.HostNameLB.Size = new System.Drawing.Size(60, 13); + this.HostNameLB.TabIndex = 0; + this.HostNameLB.Text = "Host Name"; + this.HostNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // HostNameCTRL + // + this.HostNameCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HostNameCTRL.CommandText = "Discover"; + this.HostNameCTRL.Location = new System.Drawing.Point(63, 0); + this.HostNameCTRL.Margin = new System.Windows.Forms.Padding(0); + this.HostNameCTRL.MaximumSize = new System.Drawing.Size(4096, 24); + this.HostNameCTRL.MinimumSize = new System.Drawing.Size(400, 21); + this.HostNameCTRL.Name = "HostNameCTRL"; + this.HostNameCTRL.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.HostNameCTRL.Size = new System.Drawing.Size(610, 21); + this.HostNameCTRL.TabIndex = 1; + this.HostNameCTRL.HostSelected += new System.EventHandler(this.HostNameCTRL_HostSelected); + this.HostNameCTRL.HostConnected += new System.EventHandler(this.HostNameCTRL_HostConnected); + // + // DiscoveredServerListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(677, 384); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.TopPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "DiscoveredServerListDlg"; + this.Padding = new System.Windows.Forms.Padding(2, 2, 2, 0); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Discover Servers"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.TopPN.ResumeLayout(false); + this.TopPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private DiscoveredServerListCtrl ServersCTRL; + private SelectHostCtrl HostNameCTRL; + private System.Windows.Forms.Panel TopPN; + private System.Windows.Forms.Label HostNameLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.cs new file mode 100644 index 00000000..b653410a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.cs @@ -0,0 +1,183 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to browse a list of servers. + /// + public partial class DiscoveredServerListDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public DiscoveredServerListDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private string m_hostname; + private ApplicationDescription m_server; + private ApplicationConfiguration m_configuration; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public ApplicationDescription ShowDialog(string hostname, ApplicationConfiguration configuration) + { + m_configuration = configuration; + + if (String.IsNullOrEmpty(hostname)) + { + hostname = System.Net.Dns.GetHostName(); + } + + m_hostname = hostname; + List hostnames = new List(); + + HostNameCTRL.Initialize(hostname, hostnames); + ServersCTRL.Initialize(hostname, configuration); + + OkBTN.Enabled = false; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_server; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostNameCTRL_HostSelected(object sender, SelectHostCtrlEventArgs e) + { + try + { + if (m_hostname != e.Hostname) + { + m_hostname = e.Hostname; + ServersCTRL.Initialize(m_hostname, m_configuration); + m_server = null; + OkBTN.Enabled = false; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostNameCTRL_HostConnected(object sender, SelectHostCtrlEventArgs e) + { + try + { + m_hostname = e.Hostname; + ServersCTRL.Initialize(m_hostname, m_configuration); + m_server = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + m_server = null; + + foreach (ApplicationDescription server in e.Items) + { + m_server = server; + break; + } + + OkBTN.Enabled = m_server != null; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsPicked(object sender, ListItemActionEventArgs e) + { + try + { + m_server = null; + + foreach (ApplicationDescription server in e.Items) + { + m_server = server; + break; + } + + if (m_server != null) + { + DialogResult = DialogResult.OK; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.Designer.cs new file mode 100644 index 00000000..613a5b78 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.Designer.cs @@ -0,0 +1,73 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoveredServerOnNetworkListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UserAccountListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "UserAccountListCtrl"; + this.ResumeLayout(false); + + } + + #endregion + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.cs new file mode 100644 index 00000000..c7705149 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.cs @@ -0,0 +1,304 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of servers. + /// + public partial class DiscoveredServerOnNetworkListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public DiscoveredServerOnNetworkListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + ItemsLV.Sorting = SortOrder.Descending; + ItemsLV.MultiSelect = false; + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "RecordId", HorizontalAlignment.Left, null }, + new object[] { "ServerName", HorizontalAlignment.Left, null }, + new object[] { "DiscoveryUrl", HorizontalAlignment.Left, null }, + new object[] { "ServerCapabilities", HorizontalAlignment.Left, null } + }; + + private ApplicationConfiguration m_configuration; + private int m_discoveryTimeout; + private int m_discoverCount; + private string m_discoveryUrl; + private NumericUpDown m_startingRecordIdUpDown; + private NumericUpDown m_maxRecordsToReturnUpDown; + private TextBox m_capabilityFilterTextBox; + + + #endregion + + #region Public Interface + /// + /// The timeout in milliseconds to use when discovering servers. + /// + [System.ComponentModel.DefaultValue(5000)] + public int DiscoveryTimeout + { + get { return m_discoveryTimeout; } + set { m_discoveryTimeout = value; } + } + + /// + /// Gets or sets the discovery URL used to find the servers displayed in the control. + /// + /// The discovery URL. + public string DiscoveryUrl + { + get { return m_discoveryUrl; } + set { m_discoveryUrl = value; } + } + + /// + /// Displays a list of servers in the control. + /// + public void Initialize(string hostname, NumericUpDown startingRecordId, NumericUpDown maxRecordsToReturn, TextBox capabilityFilterText, ApplicationConfiguration configuration) + { + Interlocked.Exchange(ref m_configuration, configuration); + ItemsLV.Items.Clear(); + m_startingRecordIdUpDown = startingRecordId; + m_maxRecordsToReturnUpDown = maxRecordsToReturn; + m_capabilityFilterTextBox = capabilityFilterText; + + if (String.IsNullOrEmpty(hostname)) + { + hostname = System.Net.Dns.GetHostName(); + } + + this.Instructions = Utils.Format("Discovering servers on host '{0}'.", hostname); + AdjustColumns(); + + // get a list of well known discovery urls to use. + StringCollection discoveryUrls = null; + + if (configuration != null && configuration.ClientConfiguration != null) + { + discoveryUrls = configuration.ClientConfiguration.WellKnownDiscoveryUrls; + } + + if (discoveryUrls == null || discoveryUrls.Count == 0) + { + discoveryUrls = new StringCollection(Utils.DiscoveryUrls); + } + + // update the urls with the hostname. + StringCollection urlsToUse = new StringCollection(); + + foreach (string discoveryUrl in discoveryUrls) + { + urlsToUse.Add(Utils.Format(discoveryUrl, hostname)); + } + + Interlocked.Increment(ref m_discoverCount); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnDiscoverServersOnNetwork), urlsToUse); + } + + /// + /// Updates the list of servers displayed in the control. + /// + private void OnUpdateServers(object state) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateServers), state); + return; + } + + ItemsLV.Items.Clear(); + + ServerOnNetworkCollection servers = state as ServerOnNetworkCollection; + + if (servers != null) + { + foreach (ServerOnNetwork server in servers) + { + AddItem(server); + } + } + + if (ItemsLV.Items.Count == 0) + { + this.Instructions = Utils.Format("No servers to display."); + } + + AdjustColumns(); + } + + /// + /// Attempts fetch the list of network servers from the discovery server. + /// + private void OnDiscoverServersOnNetwork(object state) + { + try + { + int discoverCount = m_discoverCount; + + // do nothing if a valid list is not provided. + IList discoveryUrls = state as IList; + + if (discoveryUrls == null) + { + return; + } + + // process each url. + foreach (string discoveryUrl in discoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + if (DiscoverServersOnNetwork(url)) + { + return; + } + + // check if another discover operation has started. + if (discoverCount != m_discoverCount) + { + return; + } + } + } + + // display empty list. + OnUpdateServers(null); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error discovering servers."); + } + } + + /// + /// Fetches the network servers from the discovery server. + /// + private bool DiscoverServersOnNetwork(Uri discoveryUrl) + { + // use a short timeout. + EndpointConfiguration configuration = EndpointConfiguration.Create(m_configuration); + configuration.OperationTimeout = m_discoveryTimeout; + DiscoveryClient client = null; + + try + { + client = DiscoveryClient.Create( + discoveryUrl, + EndpointConfiguration.Create(m_configuration)); + + uint startingRecordId = (uint)0; + uint maxRecordsToReturn = (uint)0; + StringCollection serverCapabilityFilter = new StringCollection(); + DateTime lastCounterResetTime = DateTime.MinValue; + + try + { + startingRecordId = (uint)m_startingRecordIdUpDown.Value; + maxRecordsToReturn = (uint)m_maxRecordsToReturnUpDown.Value; + + if (!String.IsNullOrEmpty(m_capabilityFilterTextBox.Text)) + { + serverCapabilityFilter = new StringCollection(m_capabilityFilterTextBox.Text.Split(',')); + } + } + catch (Exception e) + { + Utils.Trace("Error retrieving FindServersOnNetwork paramters. Error=({1}){0}", e.Message, e.GetType()); + return false; + } + + ServerOnNetworkCollection servers = client.FindServersOnNetwork(startingRecordId, maxRecordsToReturn, serverCapabilityFilter, out lastCounterResetTime); + m_discoveryUrl = discoveryUrl.ToString(); + OnUpdateServers(servers); + return true; + } + catch (Exception e) + { + Utils.Trace("DISCOVERY ERROR - Could not fetch servers from url: {0}. Error=({2}){1}", discoveryUrl, e.Message, e.GetType()); + return false; + } + finally + { + if (client != null) + { + client.Close(); + } + } + } + #endregion + + #region Overridden Methods + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + ServerOnNetwork server = listItem.Tag as ServerOnNetwork; + + if (server == null) + { + base.UpdateItem(listItem, server); + return; + } + + listItem.SubItems[0].Text = String.Format("{0}", server.RecordId); + listItem.SubItems[1].Text = String.Format("{0}", server.ServerName); + listItem.SubItems[2].Text = String.Format("{0}", server.DiscoveryUrl); + listItem.SubItems[3].Text = String.Format("{0}", string.Join(",", server.ServerCapabilities)); + + listItem.ImageKey = GuiUtils.Icons.Service; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.Designer.cs new file mode 100644 index 00000000..2f354a77 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.Designer.cs @@ -0,0 +1,283 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoveredServerOnNetworkListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.TopPN = new System.Windows.Forms.Panel(); + this.HostNameLB = new System.Windows.Forms.Label(); + this.StartingRecordLB = new System.Windows.Forms.Label(); + this.CapabilityFilterTB = new System.Windows.Forms.TextBox(); + this.StartingRecordUP = new System.Windows.Forms.NumericUpDown(); + this.CapabilityFilterLB = new System.Windows.Forms.Label(); + this.ServersCTRL = new Opc.Ua.Client.Controls.DiscoveredServerOnNetworkListCtrl(); + this.HostNameCTRL = new Opc.Ua.Client.Controls.SelectHostCtrl(); + this.MaxRecordsUP = new System.Windows.Forms.NumericUpDown(); + this.MaxRecordsLB = new System.Windows.Forms.Label(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.TopPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.StartingRecordUP)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.MaxRecordsUP)).BeginInit(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(2, 424); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(673, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(594, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ServersCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(2, 55); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.MainPN.Size = new System.Drawing.Size(673, 369); + this.MainPN.TabIndex = 2; + // + // TopPN + // + this.TopPN.Controls.Add(this.MaxRecordsUP); + this.TopPN.Controls.Add(this.MaxRecordsLB); + this.TopPN.Controls.Add(this.CapabilityFilterLB); + this.TopPN.Controls.Add(this.StartingRecordUP); + this.TopPN.Controls.Add(this.CapabilityFilterTB); + this.TopPN.Controls.Add(this.StartingRecordLB); + this.TopPN.Controls.Add(this.HostNameLB); + this.TopPN.Controls.Add(this.HostNameCTRL); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(2, 2); + this.TopPN.Name = "TopPN"; + this.TopPN.Size = new System.Drawing.Size(673, 53); + this.TopPN.TabIndex = 1; + // + // HostNameLB + // + this.HostNameLB.AutoSize = true; + this.HostNameLB.Location = new System.Drawing.Point(0, 32); + this.HostNameLB.Name = "HostNameLB"; + this.HostNameLB.Size = new System.Drawing.Size(60, 13); + this.HostNameLB.TabIndex = 0; + this.HostNameLB.Text = "Host Name"; + this.HostNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StartingRecordLB + // + this.StartingRecordLB.AutoSize = true; + this.StartingRecordLB.Location = new System.Drawing.Point(0, 6); + this.StartingRecordLB.Name = "StartingRecordLB"; + this.StartingRecordLB.Size = new System.Drawing.Size(87, 13); + this.StartingRecordLB.TabIndex = 2; + this.StartingRecordLB.Text = "StartingRecordId"; + this.StartingRecordLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // CapabilityFilterTB + // + this.CapabilityFilterTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CapabilityFilterTB.Location = new System.Drawing.Point(414, 5); + this.CapabilityFilterTB.Name = "CapabilityFilterTB"; + this.CapabilityFilterTB.Size = new System.Drawing.Size(184, 20); + this.CapabilityFilterTB.TabIndex = 4; + // + // StartingRecordUP + // + this.StartingRecordUP.Location = new System.Drawing.Point(88, 3); + this.StartingRecordUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.StartingRecordUP.Name = "StartingRecordUP"; + this.StartingRecordUP.Size = new System.Drawing.Size(45, 20); + this.StartingRecordUP.TabIndex = 15; + // + // CapabilityFilterLB + // + this.CapabilityFilterLB.AutoSize = true; + this.CapabilityFilterLB.Location = new System.Drawing.Point(303, 7); + this.CapabilityFilterLB.Name = "CapabilityFilterLB"; + this.CapabilityFilterLB.Size = new System.Drawing.Size(105, 13); + this.CapabilityFilterLB.TabIndex = 16; + this.CapabilityFilterLB.Text = "ServerCapabilityFilter"; + this.CapabilityFilterLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ServersCTRL + // + this.ServersCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.ServersCTRL.DiscoveryTimeout = 0; + this.ServersCTRL.DiscoveryUrl = null; + this.ServersCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServersCTRL.Instructions = null; + this.ServersCTRL.Location = new System.Drawing.Point(0, 3); + this.ServersCTRL.Name = "ServersCTRL"; + this.ServersCTRL.Size = new System.Drawing.Size(673, 366); + this.ServersCTRL.TabIndex = 0; + this.ServersCTRL.ItemsPicked += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsPicked); + this.ServersCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsSelected); + // + // HostNameCTRL + // + this.HostNameCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HostNameCTRL.CommandText = "Discover"; + this.HostNameCTRL.Location = new System.Drawing.Point(87, 30); + this.HostNameCTRL.Margin = new System.Windows.Forms.Padding(0); + this.HostNameCTRL.MaximumSize = new System.Drawing.Size(4096, 24); + this.HostNameCTRL.MinimumSize = new System.Drawing.Size(400, 21); + this.HostNameCTRL.Name = "HostNameCTRL"; + this.HostNameCTRL.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.HostNameCTRL.Size = new System.Drawing.Size(586, 21); + this.HostNameCTRL.TabIndex = 1; + this.HostNameCTRL.HostSelected += new System.EventHandler(this.HostNameCTRL_HostSelected); + this.HostNameCTRL.HostConnected += new System.EventHandler(this.HostNameCTRL_HostConnected); + // + // MaxRecordsUP + // + this.MaxRecordsUP.Location = new System.Drawing.Point(252, 4); + this.MaxRecordsUP.Maximum = new decimal(new int[] { + 0, + 1, + 0, + 0}); + this.MaxRecordsUP.Name = "MaxRecordsUP"; + this.MaxRecordsUP.Size = new System.Drawing.Size(45, 20); + this.MaxRecordsUP.TabIndex = 18; + // + // MaxRecordsLB + // + this.MaxRecordsLB.AutoSize = true; + this.MaxRecordsLB.Location = new System.Drawing.Point(138, 6); + this.MaxRecordsLB.Name = "MaxRecordsLB"; + this.MaxRecordsLB.Size = new System.Drawing.Size(112, 13); + this.MaxRecordsLB.TabIndex = 17; + this.MaxRecordsLB.Text = "MaxRecordsToReturn"; + this.MaxRecordsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DiscoveredServerOnNetworkListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(677, 455); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.TopPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "DiscoveredServerOnNetworkListDlg"; + this.Padding = new System.Windows.Forms.Padding(2, 2, 2, 0); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Discover Servers On Network"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.TopPN.ResumeLayout(false); + this.TopPN.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.StartingRecordUP)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.MaxRecordsUP)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private DiscoveredServerOnNetworkListCtrl ServersCTRL; + private SelectHostCtrl HostNameCTRL; + private System.Windows.Forms.Panel TopPN; + private System.Windows.Forms.Label HostNameLB; + private System.Windows.Forms.Label StartingRecordLB; + private System.Windows.Forms.TextBox CapabilityFilterTB; + private System.Windows.Forms.NumericUpDown StartingRecordUP; + private System.Windows.Forms.Label CapabilityFilterLB; + private System.Windows.Forms.NumericUpDown MaxRecordsUP; + private System.Windows.Forms.Label MaxRecordsLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.cs new file mode 100644 index 00000000..ede7c5b4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.cs @@ -0,0 +1,183 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to browse a list of servers. + /// + public partial class DiscoveredServerOnNetworkListDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public DiscoveredServerOnNetworkListDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private string m_hostname; + private ServerOnNetwork m_server; + private ApplicationConfiguration m_configuration; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public ServerOnNetwork ShowDialog(string hostname, ApplicationConfiguration configuration) + { + m_configuration = configuration; + + if (String.IsNullOrEmpty(hostname)) + { + hostname = System.Net.Dns.GetHostName(); + } + + m_hostname = hostname; + List hostnames = new List(); + + HostNameCTRL.Initialize(hostname, hostnames); + ServersCTRL.Initialize(m_hostname, this.StartingRecordUP, this.MaxRecordsUP, this.CapabilityFilterTB, m_configuration); + + OkBTN.Enabled = false; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_server; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostNameCTRL_HostSelected(object sender, SelectHostCtrlEventArgs e) + { + try + { + if (m_hostname != e.Hostname) + { + m_hostname = e.Hostname; + ServersCTRL.Initialize(m_hostname,this.StartingRecordUP, this.MaxRecordsUP, this.CapabilityFilterTB, m_configuration); + m_server = null; + OkBTN.Enabled = false; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostNameCTRL_HostConnected(object sender, SelectHostCtrlEventArgs e) + { + try + { + m_hostname = e.Hostname; + ServersCTRL.Initialize(m_hostname, this.StartingRecordUP, this.MaxRecordsUP, this.CapabilityFilterTB, m_configuration); + m_server = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + m_server = null; + + foreach (ServerOnNetwork server in e.Items) + { + m_server = server; + break; + } + + OkBTN.Enabled = m_server != null; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsPicked(object sender, ListItemActionEventArgs e) + { + try + { + m_server = null; + + foreach (ServerOnNetwork server in e.Items) + { + m_server = server; + break; + } + + if (m_server != null) + { + DialogResult = DialogResult.OK; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/DiscoveredServerOnNetworkListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.Designer.cs new file mode 100644 index 00000000..aba1eb19 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.Designer.cs @@ -0,0 +1,197 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditArrayDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ArrayDV = new System.Windows.Forms.DataGridView(); + this.ValueDGC = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.InsertMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ArrayDV)).BeginInit(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(369, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 242); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(447, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.Controls.Add(this.ArrayDV); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3); + this.MainPN.Size = new System.Drawing.Size(447, 242); + this.MainPN.TabIndex = 1; + // + // ArrayDV + // + this.ArrayDV.AllowUserToResizeRows = false; + this.ArrayDV.BackgroundColor = System.Drawing.SystemColors.Control; + this.ArrayDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ArrayDV.ColumnHeadersVisible = false; + this.ArrayDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ValueDGC}); + this.ArrayDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ArrayDV.Location = new System.Drawing.Point(3, 3); + this.ArrayDV.Name = "ArrayDV"; + this.ArrayDV.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders; + this.ArrayDV.Size = new System.Drawing.Size(441, 236); + this.ArrayDV.TabIndex = 0; + this.ArrayDV.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.ArrayDV_CellValidating); + // + // ValueDGC + // + this.ValueDGC.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ValueDGC.DataPropertyName = "Value"; + this.ValueDGC.HeaderText = "Value"; + this.ValueDGC.Name = "ValueDGC"; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.InsertMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(108, 48); + // + // InsertMI + // + this.InsertMI.Name = "InsertMI"; + this.InsertMI.Size = new System.Drawing.Size(107, 22); + this.InsertMI.Text = "Insert"; + this.InsertMI.Click += new System.EventHandler(this.InsertMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(107, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // EditArrayDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(447, 272); + this.ContextMenuStrip = this.PopupMenu; + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "EditArrayDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Value"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ArrayDV)).EndInit(); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.DataGridView ArrayDV; + private System.Windows.Forms.DataGridViewTextBoxColumn ValueDGC; + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private System.Windows.Forms.ToolStripMenuItem InsertMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.cs new file mode 100644 index 00000000..69c3ac9f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.cs @@ -0,0 +1,213 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using System.Data; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditArrayDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditArrayDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + ArrayDV.AutoGenerateColumns = false; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Array"); + m_dataset.Tables[0].Columns.Add("Value", typeof(string)); + m_dataset.Tables[0].Columns.Add("Index", typeof(int)); + m_dataset.Tables[0].DefaultView.Sort = "Index"; + + ArrayDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private DataSet m_dataset; + private BuiltInType m_dataType; + #endregion + + #region Public Interface + /// + /// Prompts the user to edit an array value. + /// + public Array ShowDialog(Array value, BuiltInType dataType, bool readOnly, string caption) + { + if (caption != null) + { + this.Text = caption; + } + + // detect the data type. + if (dataType == BuiltInType.Null) + { + dataType = TypeInfo.Construct(value).BuiltInType; + } + + m_dataType = dataType; + ArrayDV.AllowUserToAddRows = !readOnly; + ArrayDV.AllowUserToDeleteRows = !readOnly; + ArrayDV.RowHeadersVisible = !readOnly; + m_dataset.Tables[0].Clear(); + + if (value != null) + { + for (int ii = 0; ii < value.Length; ii++) + { + DataRow row = m_dataset.Tables[0].NewRow(); + row[0] = new Variant(value.GetValue(ii)).ToString(); + row[1] = ii; + m_dataset.Tables[0].Rows.Add(row); + } + } + + m_dataset.AcceptChanges(); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + m_dataset.AcceptChanges(); + + if (!readOnly) + { + value = TypeInfo.CreateArray(dataType, m_dataset.Tables[0].Rows.Count); + + for (int ii = 0; ii < m_dataset.Tables[0].DefaultView.Count; ii++) + { + string oldValue = m_dataset.Tables[0].DefaultView[ii].Row[0] as string; + object newValue = TypeInfo.Cast(oldValue, m_dataType); + value.SetValue(newValue, ii); + } + } + + return value; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void ArrayDV_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + try + { + object newValue = TypeInfo.Cast(e.FormattedValue, m_dataType); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + e.Cancel = true; + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + for (int ii = 0; ii < ArrayDV.SelectedRows.Count; ii++) + { + DataGridViewRow row = ArrayDV.SelectedRows[ii]; + DataRowView source = row.DataBoundItem as DataRowView; + source.Row.Delete(); + } + + m_dataset.AcceptChanges(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void InsertMI_Click(object sender, EventArgs e) + { + try + { + for (int ii = 0; ii < ArrayDV.SelectedRows.Count; ii++) + { + DataGridViewRow currentRow = ArrayDV.SelectedRows[ii]; + DataRowView source = currentRow.DataBoundItem as DataRowView; + + int index = (int)source.Row[1]; + + for (int jj = 0; jj < m_dataset.Tables[0].Rows.Count; jj++) + { + int current = (int)m_dataset.Tables[0].Rows[jj][1]; + + if (current >= index) + { + m_dataset.Tables[0].Rows[jj][1] = current + 1; + } + } + + DataRow row = m_dataset.Tables[0].NewRow(); + row[0] = new Variant(TypeInfo.GetDefaultValue(m_dataType)); + row[1] = index; + m_dataset.Tables[0].Rows.Add(row); + } + + m_dataset.AcceptChanges(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.resx new file mode 100644 index 00000000..31089d1a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditArrayDlg.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.Designer.cs new file mode 100644 index 00000000..de536134 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.Designer.cs @@ -0,0 +1,363 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditDataValueCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.InsertMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ReplaceMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ServerTimestampCK = new System.Windows.Forms.CheckBox(); + this.ServerTimestampDP = new System.Windows.Forms.DateTimePicker(); + this.SourceTimestampDP = new System.Windows.Forms.DateTimePicker(); + this.SourceTimestampLB = new System.Windows.Forms.Label(); + this.StatusCodeLB = new System.Windows.Forms.Label(); + this.ServerTimestampLB = new System.Windows.Forms.Label(); + this.StatusCodeCB = new System.Windows.Forms.ComboBox(); + this.ValueLN = new System.Windows.Forms.Label(); + this.SourceTimestampCK = new System.Windows.Forms.CheckBox(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.DataTypeLB = new System.Windows.Forms.Label(); + this.DataTypeCB = new System.Windows.Forms.ComboBox(); + this.ValueRankLB = new System.Windows.Forms.Label(); + this.ValueRankCB = new System.Windows.Forms.ComboBox(); + this.StatusCodeCK = new System.Windows.Forms.CheckBox(); + this.ValueTB = new System.Windows.Forms.TextBox(); + this.PopupMenu.SuspendLayout(); + this.ControlsPN.SuspendLayout(); + this.SuspendLayout(); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.InsertMI, + this.ReplaceMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(125, 70); + // + // InsertMI + // + this.InsertMI.Name = "InsertMI"; + this.InsertMI.Size = new System.Drawing.Size(124, 22); + this.InsertMI.Text = "Insert..."; + // + // ReplaceMI + // + this.ReplaceMI.Name = "ReplaceMI"; + this.ReplaceMI.Size = new System.Drawing.Size(124, 22); + this.ReplaceMI.Text = "Replace..."; + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(124, 22); + this.DeleteMI.Text = "Delete..."; + // + // ServerTimestampCK + // + this.ServerTimestampCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ServerTimestampCK.AutoSize = true; + this.ServerTimestampCK.Location = new System.Drawing.Point(248, 136); + this.ServerTimestampCK.Name = "ServerTimestampCK"; + this.ServerTimestampCK.Size = new System.Drawing.Size(15, 20); + this.ServerTimestampCK.TabIndex = 0; + this.ServerTimestampCK.UseVisualStyleBackColor = true; + this.ServerTimestampCK.CheckedChanged += new System.EventHandler(this.ServerTimestampCK_CheckedChanged); + // + // ServerTimestampDP + // + this.ServerTimestampDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ServerTimestampDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.ServerTimestampDP.Enabled = false; + this.ServerTimestampDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.ServerTimestampDP.Location = new System.Drawing.Point(104, 136); + this.ServerTimestampDP.Name = "ServerTimestampDP"; + this.ServerTimestampDP.Size = new System.Drawing.Size(138, 20); + this.ServerTimestampDP.TabIndex = 14; + // + // SourceTimestampDP + // + this.SourceTimestampDP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SourceTimestampDP.CustomFormat = "HH:mm:ss yyyy-MM-dd"; + this.SourceTimestampDP.Enabled = false; + this.SourceTimestampDP.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.SourceTimestampDP.Location = new System.Drawing.Point(104, 110); + this.SourceTimestampDP.Name = "SourceTimestampDP"; + this.SourceTimestampDP.Size = new System.Drawing.Size(138, 20); + this.SourceTimestampDP.TabIndex = 11; + // + // SourceTimestampLB + // + this.SourceTimestampLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SourceTimestampLB.AutoSize = true; + this.SourceTimestampLB.Location = new System.Drawing.Point(3, 107); + this.SourceTimestampLB.Name = "SourceTimestampLB"; + this.SourceTimestampLB.Size = new System.Drawing.Size(95, 26); + this.SourceTimestampLB.TabIndex = 10; + this.SourceTimestampLB.Text = "Source Timestamp"; + this.SourceTimestampLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StatusCodeLB + // + this.StatusCodeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StatusCodeLB.AutoSize = true; + this.StatusCodeLB.Location = new System.Drawing.Point(3, 80); + this.StatusCodeLB.Name = "StatusCodeLB"; + this.StatusCodeLB.Size = new System.Drawing.Size(65, 27); + this.StatusCodeLB.TabIndex = 7; + this.StatusCodeLB.Text = "Status Code"; + this.StatusCodeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ServerTimestampLB + // + this.ServerTimestampLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ServerTimestampLB.AutoSize = true; + this.ServerTimestampLB.Location = new System.Drawing.Point(3, 133); + this.ServerTimestampLB.Name = "ServerTimestampLB"; + this.ServerTimestampLB.Size = new System.Drawing.Size(92, 26); + this.ServerTimestampLB.TabIndex = 13; + this.ServerTimestampLB.Text = "Server Timestamp"; + this.ServerTimestampLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // StatusCodeCB + // + this.StatusCodeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StatusCodeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.StatusCodeCB.Enabled = false; + this.StatusCodeCB.FormattingEnabled = true; + this.StatusCodeCB.Location = new System.Drawing.Point(104, 83); + this.StatusCodeCB.Name = "StatusCodeCB"; + this.StatusCodeCB.Size = new System.Drawing.Size(138, 21); + this.StatusCodeCB.TabIndex = 8; + // + // ValueLN + // + this.ValueLN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ValueLN.AutoSize = true; + this.ValueLN.Location = new System.Drawing.Point(3, 0); + this.ValueLN.Name = "ValueLN"; + this.ValueLN.Size = new System.Drawing.Size(34, 26); + this.ValueLN.TabIndex = 1; + this.ValueLN.Text = "Value"; + this.ValueLN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SourceTimestampCK + // + this.SourceTimestampCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SourceTimestampCK.AutoSize = true; + this.SourceTimestampCK.Location = new System.Drawing.Point(248, 110); + this.SourceTimestampCK.Name = "SourceTimestampCK"; + this.SourceTimestampCK.Size = new System.Drawing.Size(15, 20); + this.SourceTimestampCK.TabIndex = 12; + this.SourceTimestampCK.UseVisualStyleBackColor = true; + this.SourceTimestampCK.CheckedChanged += new System.EventHandler(this.SourceTimestampCK_CheckedChanged); + // + // ControlsPN + // + this.ControlsPN.AutoSize = true; + this.ControlsPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.Controls.Add(this.ValueLN, 0, 0); + this.ControlsPN.Controls.Add(this.DataTypeLB, 0, 1); + this.ControlsPN.Controls.Add(this.DataTypeCB, 1, 1); + this.ControlsPN.Controls.Add(this.ServerTimestampLB, 0, 5); + this.ControlsPN.Controls.Add(this.ServerTimestampDP, 1, 5); + this.ControlsPN.Controls.Add(this.SourceTimestampDP, 1, 4); + this.ControlsPN.Controls.Add(this.SourceTimestampLB, 0, 4); + this.ControlsPN.Controls.Add(this.StatusCodeLB, 0, 3); + this.ControlsPN.Controls.Add(this.StatusCodeCB, 1, 3); + this.ControlsPN.Controls.Add(this.ServerTimestampCK, 2, 5); + this.ControlsPN.Controls.Add(this.SourceTimestampCK, 2, 4); + this.ControlsPN.Controls.Add(this.ValueRankLB, 0, 2); + this.ControlsPN.Controls.Add(this.ValueRankCB, 1, 2); + this.ControlsPN.Controls.Add(this.StatusCodeCK, 2, 3); + this.ControlsPN.Controls.Add(this.ValueTB, 1, 0); + this.ControlsPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 7; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.ControlsPN.Size = new System.Drawing.Size(266, 159); + this.ControlsPN.TabIndex = 0; + // + // DataTypeLB + // + this.DataTypeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.DataTypeLB.AutoSize = true; + this.DataTypeLB.Location = new System.Drawing.Point(3, 26); + this.DataTypeLB.Name = "DataTypeLB"; + this.DataTypeLB.Size = new System.Drawing.Size(57, 27); + this.DataTypeLB.TabIndex = 3; + this.DataTypeLB.Text = "Data Type"; + this.DataTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DataTypeCB + // + this.DataTypeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.DataTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.DataTypeCB.FormattingEnabled = true; + this.DataTypeCB.Location = new System.Drawing.Point(104, 29); + this.DataTypeCB.Name = "DataTypeCB"; + this.DataTypeCB.Size = new System.Drawing.Size(138, 21); + this.DataTypeCB.TabIndex = 4; + // + // ValueRankLB + // + this.ValueRankLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ValueRankLB.AutoSize = true; + this.ValueRankLB.Location = new System.Drawing.Point(3, 53); + this.ValueRankLB.Name = "ValueRankLB"; + this.ValueRankLB.Size = new System.Drawing.Size(63, 27); + this.ValueRankLB.TabIndex = 5; + this.ValueRankLB.Text = "Value Rank"; + this.ValueRankLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ValueRankCB + // + this.ValueRankCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ValueRankCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ValueRankCB.FormattingEnabled = true; + this.ValueRankCB.Location = new System.Drawing.Point(104, 56); + this.ValueRankCB.Name = "ValueRankCB"; + this.ValueRankCB.Size = new System.Drawing.Size(138, 21); + this.ValueRankCB.TabIndex = 6; + // + // StatusCodeCK + // + this.StatusCodeCK.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.StatusCodeCK.AutoSize = true; + this.StatusCodeCK.Location = new System.Drawing.Point(248, 83); + this.StatusCodeCK.Name = "StatusCodeCK"; + this.StatusCodeCK.Size = new System.Drawing.Size(15, 21); + this.StatusCodeCK.TabIndex = 9; + this.StatusCodeCK.UseVisualStyleBackColor = true; + this.StatusCodeCK.CheckedChanged += new System.EventHandler(this.StatusCodeCK_CheckedChanged); + // + // ValueTB + // + this.ValueTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueTB.Location = new System.Drawing.Point(104, 3); + this.ValueTB.Name = "ValueTB"; + this.ValueTB.Size = new System.Drawing.Size(138, 20); + this.ValueTB.TabIndex = 2; + // + // EditDataValueCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.Controls.Add(this.ControlsPN); + this.Name = "EditDataValueCtrl"; + this.Size = new System.Drawing.Size(266, 159); + this.PopupMenu.ResumeLayout(false); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem InsertMI; + private System.Windows.Forms.ToolStripMenuItem ReplaceMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private System.Windows.Forms.CheckBox ServerTimestampCK; + private System.Windows.Forms.DateTimePicker ServerTimestampDP; + private System.Windows.Forms.DateTimePicker SourceTimestampDP; + private System.Windows.Forms.Label SourceTimestampLB; + private System.Windows.Forms.Label StatusCodeLB; + private System.Windows.Forms.Label ServerTimestampLB; + private System.Windows.Forms.ComboBox StatusCodeCB; + private System.Windows.Forms.Label ValueLN; + private System.Windows.Forms.CheckBox SourceTimestampCK; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.CheckBox StatusCodeCK; + private System.Windows.Forms.Label DataTypeLB; + private System.Windows.Forms.ComboBox DataTypeCB; + private System.Windows.Forms.Label ValueRankLB; + private System.Windows.Forms.ComboBox ValueRankCB; + private System.Windows.Forms.TextBox ValueTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.cs new file mode 100644 index 00000000..9711e6b0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.cs @@ -0,0 +1,389 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the results from a history read operation. + /// + public partial class EditDataValueCtrl : UserControl + { + #region Constructors + /// + /// Constructs a new instance. + /// + public EditDataValueCtrl() + { + InitializeComponent(); + + for (BuiltInType ii = BuiltInType.Null; ii < BuiltInType.Variant; ii++) + { + DataTypeCB.Items.Add(ii); + } + + DataTypeCB.SelectedIndex = 0; + DataTypeCB.Enabled = false; + + for (ValueRankOptions ii = ValueRankOptions.Scalar; ii <= ValueRankOptions.OneDimension; ii++) + { + ValueRankCB.Items.Add(ii); + } + + ValueRankCB.SelectedIndex = 0; + ValueRankCB.Enabled = false; + + SetShowStatusTimestamp(false); + + StatusCodeCB.Items.Add(new StatusCode(StatusCodes.Good)); + StatusCodeCB.Items.Add(new StatusCode(StatusCodes.GoodLocalOverride)); + StatusCodeCB.Items.Add(new StatusCode(StatusCodes.Uncertain)); + StatusCodeCB.Items.Add(new StatusCode(StatusCodes.UncertainInitialValue)); + StatusCodeCB.Items.Add(new StatusCode(StatusCodes.Bad)); + StatusCodeCB.Items.Add(new StatusCode(StatusCodes.BadDeviceFailure)); + + StatusCodeCB.SelectedIndex = 0; + + ServerTimestampDP.Value = DateTime.UtcNow; + SourceTimestampDP.Value = DateTime.UtcNow; + } + #endregion + + #region Value Rank Class + /// + /// The value ranks supported by the control. + /// + private enum ValueRankOptions + { + Scalar = -1, + OneDimension = 1 + } + #endregion + + #region Private Methods + #endregion + + #region Public Members + /// + /// Returns the data value displayed in the control. + /// + public DataValue GetDataValue() + { + DataValue value = new DataValue(); + value.WrappedValue = GetValue(); + + if (ShowStatusTimestamp) + { + value.StatusCode = StatusCode; + value.SourceTimestamp = SourceTimestamp; + value.ServerTimestamp = ServerTimestamp; + } + + return value; + } + + /// + /// Returns the data value displayed in the control. + /// + public void SetDataValue(DataValue value, TypeInfo targetType) + { + DataTypeCB.SelectedItem = BuiltInType.Null; + ValueRankCB.SelectedItem = ValueRankOptions.Scalar; + + StatusCode = StatusCodes.Good; + SourceTimestamp = DateTime.MinValue; + ServerTimestamp = DateTime.MinValue; + + if (value != null) + { + SetValue(value.WrappedValue); + + StatusCode = value.StatusCode; + SourceTimestamp = value.SourceTimestamp; + ServerTimestamp = value.ServerTimestamp; + + StatusCodeCK.Checked = true; + SourceTimestampCK.Checked = true; + ServerTimestampCK.Checked = true; + } + + // allow data type to be changed by default. + DataTypeCB.Enabled = true; + + if (targetType != null) + { + DataType = targetType.BuiltInType; + ValueRank = targetType.ValueRank; + + DataTypeCB.Enabled = false; + ValueRankCB.Enabled = false; + } + } + + /// + /// The value displayed in the control. + /// + public Variant Value + { + get + { + return GetValue(); + } + + set + { + SetValue(value); + } + } + + /// + /// The data type of the value displayed in the control. + /// + public BuiltInType DataType + { + get + { + return (BuiltInType)DataTypeCB.SelectedItem; + } + + set + { + DataTypeCB.SelectedItem = value; + } + } + + /// + /// The value rank of the value displayed in the control. + /// + public int ValueRank + { + get + { + return (int)ValueRankCB.SelectedItem; + } + + set + { + ValueRankCB.SelectedItem = (ValueRankOptions)value; + } + } + + /// + /// The status code associated with the value. + /// + public StatusCode StatusCode + { + get + { + if (!StatusCodeCK.Checked) + { + return StatusCodes.Good; + } + + return (StatusCode)StatusCodeCB.SelectedItem; + } + + set + { + ValueRankCB.SelectedItem = value; + } + } + + /// + /// The source timestamp associated with the value. + /// + public DateTime SourceTimestamp + { + get + { + if (!SourceTimestampCK.Checked) + { + return DateTime.MinValue; + } + + return SourceTimestampDP.Value; + } + + set + { + if (value < SourceTimestampDP.MinDate) + { + SourceTimestampCK.Checked = false; + return; + } + + SourceTimestampDP.Value = value; + } + } + + /// + /// The server timestamp associated with the value. + /// + public DateTime ServerTimestamp + { + get + { + if (!ServerTimestampCK.Checked) + { + return DateTime.MinValue; + } + + return ServerTimestampDP.Value; + } + + set + { + if (value < ServerTimestampDP.MinDate) + { + ServerTimestampCK.Checked = false; + return; + } + + ServerTimestampDP.Value = value; + } + } + + /// + /// If true the status code, server timestamp and source timestamp fields are displayed. + /// + public bool ShowStatusTimestamp + { + get + { + return StatusCodeCB.Visible; + } + + set + { + SetShowStatusTimestamp(value); + } + } + #endregion + + #region Private Methods + /// + /// Returns the value shown in the control. + /// + private Variant GetValue() + { + BuiltInType targetType = (BuiltInType)DataTypeCB.SelectedItem; + int valueRank = (int)ValueRankCB.SelectedItem; + + // TBD - Add Support for Arrays + if (valueRank != ValueRanks.Scalar) + { + return Variant.Null; + } + + // cast the value to the requested data type. + object value = TypeInfo.Cast(ValueTB.Text, TypeInfo.Scalars.String, targetType); + + return new Variant(value, new TypeInfo(targetType, valueRank)); + } + + /// + /// Sets the value shown in the control. + /// + private void SetValue(Variant value) + { + BuiltInType targetType = BuiltInType.Null; + int valueRank = ValueRanks.Scalar; + + if (value.TypeInfo != null && value.TypeInfo.BuiltInType != BuiltInType.Null) + { + targetType = value.TypeInfo.BuiltInType; + valueRank = value.TypeInfo.ValueRank; + } + + DataTypeCB.SelectedItem = targetType; + ValueRankCB.SelectedItem = (ValueRankOptions)valueRank; + + if (value.Value == null) + { + ValueTB.Text = String.Empty; + return; + } + + // check for arrays. + if (valueRank != ValueRanks.Scalar) + { + ValueTB.Text = value.ToString(); + ValueTB.ReadOnly = true; + return; + } + + // cast the value to the requested data type. + ValueTB.Text = (string)TypeInfo.Cast(value.Value, value.TypeInfo, BuiltInType.String); + ValueTB.ReadOnly = false; + } + + /// + /// Shows or hides the status and timestamp fields. + /// + private void SetShowStatusTimestamp(bool show) + { + StatusCodeCB.Visible = show; + SourceTimestampDP.Visible = show; + ServerTimestampDP.Visible = show; + StatusCodeLB.Visible = show; + SourceTimestampLB.Visible = show; + ServerTimestampLB.Visible = show; + StatusCodeCK.Visible = show; + SourceTimestampCK.Visible = show; + ServerTimestampCK.Visible = show; + } + #endregion + + #region Event Handlers + private void StatusCodeCK_CheckedChanged(object sender, EventArgs e) + { + StatusCodeCB.Enabled = StatusCodeCK.Checked; + } + + private void SourceTimestampCK_CheckedChanged(object sender, EventArgs e) + { + SourceTimestampDP.Enabled = SourceTimestampCK.Checked; + } + + private void ServerTimestampCK_CheckedChanged(object sender, EventArgs e) + { + ServerTimestampDP.Enabled = ServerTimestampCK.Checked; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.Designer.cs new file mode 100644 index 00000000..204df981 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.Designer.cs @@ -0,0 +1,158 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditDataValueDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueCTRL = new Opc.Ua.Client.Controls.EditDataValueCtrl(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(206, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 159); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(284, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ValueCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(284, 159); + this.MainPN.TabIndex = 1; + // + // ValueCTRL + // + this.ValueCTRL.AutoSize = true; + this.ValueCTRL.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ValueCTRL.DataType = Opc.Ua.BuiltInType.Null; + this.ValueCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueCTRL.Location = new System.Drawing.Point(0, 0); + this.ValueCTRL.Name = "ValueCTRL"; + this.ValueCTRL.ServerTimestamp = new System.DateTime(((long)(0))); + this.ValueCTRL.ShowStatusTimestamp = true; + this.ValueCTRL.Size = new System.Drawing.Size(284, 159); + this.ValueCTRL.SourceTimestamp = new System.DateTime(((long)(0))); + this.ValueCTRL.TabIndex = 0; + this.ValueCTRL.ValueRank = -1; + // + // EditDataValueDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(284, 189); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "EditDataValueDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Data Value"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private EditDataValueCtrl ValueCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.cs new file mode 100644 index 00000000..59e5cdcb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.cs @@ -0,0 +1,123 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class EditDataValueDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public EditDataValueDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private DataValue m_value; + #endregion + + #region Public Interface + /// + /// Prompts the user to edit a value. + /// + public Variant ShowDialog(Variant value, string caption) + { + if (caption != null) + { + this.Text = caption; + } + + ValueCTRL.ShowStatusTimestamp = false; + ValueCTRL.Value = value; + + if (ShowDialog() != DialogResult.OK) + { + return Variant.Null; + } + + if (m_value != null) + { + return m_value.WrappedValue; + } + + return Variant.Null; + } + + /// + /// Prompts the user to edit a data value. + /// + public DataValue ShowDialog(DataValue value, TypeInfo expectedType, string caption) + { + if (caption != null) + { + this.Text = caption; + } + + ValueCTRL.SetDataValue(value, expectedType); + ValueCTRL.ShowStatusTimestamp = true; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_value; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + m_value = ValueCTRL.GetDataValue(); + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditDataValueDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.Designer.cs new file mode 100644 index 00000000..e564141e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.Designer.cs @@ -0,0 +1,110 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EditValueCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ValueTB = new System.Windows.Forms.TextBox(); + this.ValueBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // ValueTB + // + this.ValueTB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueTB.Location = new System.Drawing.Point(0, 0); + this.ValueTB.Margin = new System.Windows.Forms.Padding(0); + this.ValueTB.Name = "ValueTB"; + this.ValueTB.Size = new System.Drawing.Size(96, 20); + this.ValueTB.TabIndex = 0; + this.ValueTB.TextChanged += new System.EventHandler(this.ValueTB_TextChanged); + // + // ValueBTN + // + this.ValueBTN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueBTN.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ValueBTN.Location = new System.Drawing.Point(100, 0); + this.ValueBTN.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.ValueBTN.Name = "ValueBTN"; + this.ValueBTN.Size = new System.Drawing.Size(26, 21); + this.ValueBTN.TabIndex = 1; + this.ValueBTN.Text = "..."; + this.ValueBTN.UseVisualStyleBackColor = true; + this.ValueBTN.Click += new System.EventHandler(this.ValueBTN_Click); + // + // EditValueCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ValueTB); + this.Controls.Add(this.ValueBTN); + this.MaximumSize = new System.Drawing.Size(2048, 21); + this.MinimumSize = new System.Drawing.Size(126, 21); + this.Name = "EditValueCtrl"; + this.Size = new System.Drawing.Size(126, 21); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox ValueTB; + private System.Windows.Forms.Button ValueBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.cs new file mode 100644 index 00000000..df4a5cee --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.cs @@ -0,0 +1,153 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control which is used to edit a value. + /// + public partial class EditValueCtrl : UserControl + { + /// + /// Initializes the object. + /// + public EditValueCtrl() + { + InitializeComponent(); + } + + private Variant m_value; + private bool m_textChanged; + + /// + /// The data type of the value to edit. + /// + public TypeInfo TargetType { get; set; } + + /// + /// The value being edited in the control. + /// + public Variant Value + { + get + { + return GetValue(); + } + + set + { + SetValue(value); + } + } + + /// + /// Returns the value shown in the control. + /// + private Variant GetValue() + { + TypeInfo sourceType = m_value.TypeInfo; + + // check if the value needs to be updated. + if (m_textChanged) + { + object value = TypeInfo.Cast(ValueTB.Text, TypeInfo.Scalars.String, sourceType.BuiltInType); + m_value = new Variant(value, sourceType); + } + + return m_value; + } + + /// + /// Sets the value shown in the control. + /// + private void SetValue(Variant value) + { + // check for null. + if (Variant.Null == value) + { + ValueTB.Text = String.Empty; + ValueTB.Enabled = true; + m_value = Variant.Null; + return; + } + + // get the source type. + TypeInfo sourceType = value.TypeInfo; + + if (sourceType == null) + { + sourceType = TypeInfo.Construct(value.Value); + } + + // convert to target type. + if (TargetType != null && TargetType.BuiltInType != sourceType.BuiltInType) + { + m_value = new Variant(TypeInfo.Cast(value.Value, sourceType, TargetType.BuiltInType), TargetType); + sourceType = TargetType; + } + else + { + m_value = new Variant(value.Value, sourceType); + } + + m_textChanged = false; + + // display arrays and structures as read only strings. + if (sourceType.ValueRank >= 0 || sourceType.BuiltInType == BuiltInType.ExtensionObject) + { + ValueTB.Text = m_value.ToString(); + ValueTB.Enabled = false; + return; + } + + // display as editable text. + ValueTB.Text = (string)TypeInfo.Cast(m_value.Value, sourceType, BuiltInType.String); + ValueTB.Enabled = true; + } + + private void ValueTB_TextChanged(object sender, EventArgs e) + { + m_textChanged = true; + } + + private void ValueBTN_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EditValueCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.Designer.cs new file mode 100644 index 00000000..eabd0afb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.Designer.cs @@ -0,0 +1,121 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EventListView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.EventsLV = new System.Windows.Forms.ListView(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ViewDetailsMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteHistoryMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // EventsLV + // + this.EventsLV.ContextMenuStrip = this.PopupMenu; + this.EventsLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventsLV.FullRowSelect = true; + this.EventsLV.Location = new System.Drawing.Point(0, 0); + this.EventsLV.Name = "EventsLV"; + this.EventsLV.Size = new System.Drawing.Size(961, 570); + this.EventsLV.TabIndex = 2; + this.EventsLV.UseCompatibleStateImageBehavior = false; + this.EventsLV.View = System.Windows.Forms.View.Details; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ViewDetailsMI, + this.DeleteHistoryMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(197, 70); + // + // ViewDetailsMI + // + this.ViewDetailsMI.Name = "ViewDetailsMI"; + this.ViewDetailsMI.Size = new System.Drawing.Size(196, 22); + this.ViewDetailsMI.Text = "View Details..."; + this.ViewDetailsMI.Click += new System.EventHandler(this.ViewDetailsMI_Click); + // + // DeleteHistoryMI + // + this.DeleteHistoryMI.Name = "DeleteHistoryMI"; + this.DeleteHistoryMI.Size = new System.Drawing.Size(196, 22); + this.DeleteHistoryMI.Text = "Delete from Historian..."; + this.DeleteHistoryMI.Click += new System.EventHandler(this.DeleteHistoryMI_Click); + // + // EventListView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.EventsLV); + this.Name = "EventListView"; + this.Size = new System.Drawing.Size(961, 570); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView EventsLV; + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem ViewDetailsMI; + private System.Windows.Forms.ToolStripMenuItem DeleteHistoryMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.cs new file mode 100644 index 00000000..1eda7fd0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.cs @@ -0,0 +1,773 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control which displays a list of events. + /// + public partial class EventListView : UserControl + { + /// + /// Initializes the object. + /// + public EventListView() + { + InitializeComponent(); + } + + #region Private Methods + private Session m_session; + private Subscription m_subscription; + private MonitoredItem m_monitoredItem; + private FilterDeclaration m_filter; + private NodeId m_areaId; + private bool m_isSubscribed; + private bool m_displayConditions; + #endregion + + #region Public Members + /// + /// Whether the control subscribes for new events. + /// + public bool IsSubscribed + { + get { return m_isSubscribed; } + + set + { + if (m_isSubscribed != value) + { + m_isSubscribed = value; + + if (m_session != null) + { + if (m_isSubscribed) + { + CreateSubscription(); + } + else + { + DeleteSubscription(); + } + } + } + } + } + + /// + /// Whether to display the events as conditions. + /// + public bool DisplayConditions + { + get { return m_displayConditions; } + set { m_displayConditions = value; } + } + + /// + /// The context menu to use. + /// + public override ContextMenuStrip ContextMenuStrip + { + get { return this.EventsLV.ContextMenuStrip; } + set { this.EventsLV.ContextMenuStrip = value; } + } + + /// + /// The event area displayed in the control. + /// + public NodeId AreaId + { + get { return m_areaId; } + } + + /// + /// The event filter applied to the control. + /// + public FilterDeclaration Filter + { + get { return m_filter; } + } + + /// + /// Changes the session. + /// + public void ChangeSession(Session session, bool fetchRecent) + { + if (Object.ReferenceEquals(session, m_session)) + { + return; + } + + if (m_session != null) + { + DeleteSubscription(); + m_session = null; + } + + m_session = session; + EventsLV.Items.Clear(); + + if (m_session != null && m_isSubscribed) + { + CreateSubscription(); + + if (fetchRecent) + { + ReadRecentHistory(); + } + } + } + + /// + /// Updates the control after the session has reconnected. + /// + public void SessionReconnected(Session session) + { + m_session = session; + + if (m_isSubscribed) + { + foreach (Subscription subscription in m_session.Subscriptions) + { + if (Object.ReferenceEquals(subscription.Handle, this)) + { + m_subscription = subscription; + + foreach (MonitoredItem monitoredItem in subscription.MonitoredItems) + { + m_monitoredItem = monitoredItem; + break; + } + + break; + } + } + } + } + + /// + /// Changes the area monitored by the control. + /// + public void ChangeArea(NodeId areaId, bool fetchRecent) + { + m_areaId = areaId; + EventsLV.Items.Clear(); + + if (fetchRecent) + { + ReadRecentHistory(); + } + + if (m_subscription != null) + { + MonitoredItem monitoredItem = new MonitoredItem(m_monitoredItem); + monitoredItem.StartNodeId = areaId; + + m_subscription.AddItem(monitoredItem); + m_subscription.RemoveItem(m_monitoredItem); + m_monitoredItem = monitoredItem; + + monitoredItem.Notification += new MonitoredItemNotificationEventHandler(MonitoredItem_Notification); + + m_subscription.ApplyChanges(); + } + } + + /// + /// Changes the filter used to select the events. + /// + public void ChangeFilter(FilterDeclaration filter, bool fetchRecent) + { + m_filter = filter; + EventsLV.Items.Clear(); + + int index = 0; + + if (m_filter != null) + { + // add or update existing columns. + for (int ii = 0; ii < m_filter.Fields.Count; ii++) + { + if (m_filter.Fields[ii].DisplayInList) + { + if (index >= EventsLV.Columns.Count) + { + EventsLV.Columns.Add(new ColumnHeader()); + } + + EventsLV.Columns[index].Text = m_filter.Fields[ii].InstanceDeclaration.DisplayName; + EventsLV.Columns[index].TextAlign = HorizontalAlignment.Left; + index++; + } + } + } + + // remove extra columns. + while (index < EventsLV.Columns.Count) + { + EventsLV.Columns.RemoveAt(EventsLV.Columns.Count - 1); + } + + // adjust the width of the columns. + for (int ii = 0; ii < EventsLV.Columns.Count; ii++) + { + EventsLV.Columns[ii].Width = -2; + } + + // fetch recent history. + if (fetchRecent) + { + ReadRecentHistory(); + } + + // update subscription. + if (m_subscription != null && m_filter != null) + { + m_monitoredItem.Filter = m_filter.GetFilter(); + m_subscription.ApplyChanges(); + } + } + + /// + /// Clears the event history in the control. + /// + public void ClearEventHistory() + { + EventsLV.Items.Clear(); + + // adjust the width of the columns. + for (int ii = 0; ii < EventsLV.Columns.Count; ii++) + { + EventsLV.Columns[ii].Width = -2; + } + } + + /// + /// Adds the event history to the control. + /// + public void AddEventHistory(HistoryEvent events) + { + for (int ii = 0; ii < events.Events.Count; ii++) + { + ListViewItem item = CreateListItem(m_filter, events.Events[ii].EventFields); + EventsLV.Items.Add(item); + } + + // adjust the width of the columns. + for (int ii = 0; ii < EventsLV.Columns.Count; ii++) + { + EventsLV.Columns[ii].Width = -2; + } + } + + /// + /// Refreshes the conditions displayed. + /// + public void ConditionRefresh() + { + if (m_subscription != null) + { + m_subscription.ConditionRefresh(); + } + } + + /// + /// Returns the currently selected event at the specified index (null index is not valid). + /// + public VariantCollection GetSelectedEvent(int index) + { + if (EventsLV.SelectedItems.Count > index) + { + return EventsLV.SelectedItems[index].Tag as VariantCollection; + } + + return null; + } + #endregion + + #region Private Methods + /// + /// Creates the subscription. + /// + private void CreateSubscription() + { + m_subscription = new Subscription(); + m_subscription.Handle = this; + m_subscription.DisplayName = null; + m_subscription.PublishingInterval = 1000; + m_subscription.KeepAliveCount = 10; + m_subscription.LifetimeCount = 100; + m_subscription.MaxNotificationsPerPublish = 1000; + m_subscription.PublishingEnabled = true; + m_subscription.TimestampsToReturn = TimestampsToReturn.Both; + + m_session.AddSubscription(m_subscription); + m_subscription.Create(); + + m_monitoredItem = new MonitoredItem(); + m_monitoredItem.StartNodeId = m_areaId; + m_monitoredItem.AttributeId = Attributes.EventNotifier; + m_monitoredItem.SamplingInterval = 0; + m_monitoredItem.QueueSize = 1000; + m_monitoredItem.DiscardOldest = true; + + ChangeFilter(m_filter, false); + + m_monitoredItem.Notification += new MonitoredItemNotificationEventHandler(MonitoredItem_Notification); + + m_subscription.AddItem(m_monitoredItem); + m_subscription.ApplyChanges(); + } + + /// + /// Deletes the subscription. + /// + private void DeleteSubscription() + { + if (m_subscription != null) + { + m_subscription.Delete(true); + m_session.RemoveSubscription(m_subscription); + m_subscription = null; + m_monitoredItem = null; + } + } + + /// + /// Creates list item for an event. + /// + private ListViewItem CreateListItem(FilterDeclaration filter, VariantCollection fieldValues) + { + ListViewItem item = null; + + if (m_displayConditions) + { + NodeId conditionId = fieldValues[0].Value as NodeId; + + if (conditionId != null) + { + for (int ii = 0; ii < EventsLV.Items.Count; ii++) + { + VariantCollection fields = EventsLV.Items[ii].Tag as VariantCollection; + + if (fields != null && Utils.IsEqual(conditionId, fields[0].Value)) + { + item = EventsLV.Items[ii]; + break; + } + } + } + } + + if (item == null) + { + item = new ListViewItem(); + } + + item.Tag = fieldValues; + int position = -1; + + for (int ii = 1; ii < filter.Fields.Count; ii++) + { + if (!filter.Fields[ii].DisplayInList) + { + continue; + } + + position++; + + string text = null; + Variant value = fieldValues[ii + 1]; + + // check for missing fields. + if (value.Value == null) + { + text = String.Empty; + } + + // display the name of a node instead of the node id. + else if (value.TypeInfo.BuiltInType == BuiltInType.NodeId) + { + INode node = m_session.NodeCache.Find((NodeId)value.Value); + + if (node != null) + { + text = node.ToString(); + } + } + + // display local time for any time fields. + else if (value.TypeInfo.BuiltInType == BuiltInType.DateTime) + { + DateTime datetime = (DateTime)value.Value; + + if (m_filter.Fields[ii].InstanceDeclaration.DisplayName.Contains("Time")) + { + text = datetime.ToLocalTime().ToString("HH:mm:ss.fff"); + } + else + { + text = datetime.ToLocalTime().ToString("yyyy-MM-dd"); + } + } + + // use default string format. + else + { + text = value.ToString(); + } + + // update subitem text. + if (item.Text == String.Empty) + { + item.Text = text; + item.SubItems[0].Text = text; + } + else + { + if (item.SubItems.Count <= position) + { + item.SubItems.Add(text); + } + else + { + item.SubItems[position].Text = text; + } + } + } + + return item; + } + + /// + /// Updates the display with a new value for a monitored variable. + /// + private void MonitoredItem_Notification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new MonitoredItemNotificationEventHandler(MonitoredItem_Notification), monitoredItem, e); + return; + } + + try + { + // check for valid notification. + EventFieldList notification = e.NotificationValue as EventFieldList; + + if (notification == null) + { + return; + } + + // check if monitored item has changed. + if (!Object.ReferenceEquals(m_monitoredItem, monitoredItem)) + { + return; + } + + // check if the filter has changed. + if (notification.EventFields.Count != m_filter.Fields.Count+1) + { + return; + } + + if (m_displayConditions) + { + NodeId eventTypeId = m_filter.GetValue(Opc.Ua.BrowseNames.EventType, notification.EventFields, null); + + if (eventTypeId == Opc.Ua.ObjectTypeIds.RefreshStartEventType) + { + EventsLV.Items.Clear(); + } + + if (eventTypeId == Opc.Ua.ObjectTypeIds.RefreshEndEventType) + { + return; + } + } + + // create an item and add to top of list. + ListViewItem item = CreateListItem(m_filter, notification.EventFields); + + if (item.ListView == null) + { + EventsLV.Items.Insert(0, item); + } + + // adjust the width of the columns. + for (int ii = 0; ii < EventsLV.Columns.Count; ii++) + { + EventsLV.Columns[ii].Width = -2; + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Fetches the recent history. + /// + private void ReadRecentHistory() + { + // check if session is active. + if (m_session != null) + { + // check if area supports history. + IObject area = m_session.NodeCache.Find(m_areaId) as IObject; + + if (area != null && ((area.EventNotifier & EventNotifiers.HistoryRead) != 0)) + { + // get the last hour or 10 events. + ReadEventDetails details = new ReadEventDetails(); + details.StartTime = DateTime.UtcNow.AddSeconds(30); + details.EndTime = details.StartTime.AddHours(-1); + details.NumValuesPerNode = 10; + details.Filter = m_filter.GetFilter(); + + // read the history. + ReadHistory(details, m_areaId); + } + } + } + + /// + /// Fetches the recent history. + /// + private void ReadHistory(ReadEventDetails details, NodeId areaId) + { + HistoryReadValueIdCollection nodesToRead = new HistoryReadValueIdCollection(); + HistoryReadValueId nodeToRead = new HistoryReadValueId(); + nodeToRead.NodeId = areaId; + nodesToRead.Add(nodeToRead); + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Neither, + false, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + HistoryEvent events = ExtensionObject.ToEncodeable(results[0].HistoryData) as HistoryEvent; + AddEventHistory(events); + + // release continuation points. + if (results[0].ContinuationPoint != null && results[0].ContinuationPoint.Length > 0) + { + nodeToRead.ContinuationPoint = results[0].ContinuationPoint; + + m_session.HistoryRead( + null, + new ExtensionObject(details), + TimestampsToReturn.Neither, + true, + nodesToRead, + out results, + out diagnosticInfos); + } + } + + /// + /// Deletes the recent history. + /// + private void DeleteHistory(NodeId areaId, List events, FilterDeclaration filter) + { + // find the event id. + int index = 0; + + foreach (FilterDeclarationField field in filter.Fields) + { + if (field.InstanceDeclaration.BrowseName == Opc.Ua.BrowseNames.EventId) + { + break; + } + + index++; + } + + // can't delete events if no event id. + if (index >= filter.Fields.Count) + { + throw ServiceResultException.Create(StatusCodes.BadEventIdUnknown, "Cannot delete events if EventId was not selected."); + } + + // build list of nodes to delete. + DeleteEventDetails details = new DeleteEventDetails(); + details.NodeId = areaId; + + foreach (VariantCollection e in events) + { + byte[] eventId = null; + + if (e.Count > index) + { + eventId = e[index].Value as byte[]; + } + + details.EventIds.Add(eventId); + } + + // delete the events. + ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection(); + nodesToUpdate.Add(new ExtensionObject(details)); + + HistoryUpdateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.HistoryUpdate( + null, + nodesToUpdate, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToUpdate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(results[0].StatusCode); + } + + // check for item level errors. + if (results[0].OperationResults.Count > 0) + { + int count = 0; + + for (int ii = 0; ii < results[0].OperationResults.Count; ii++) + { + if (StatusCode.IsBad(results[0].OperationResults[ii])) + { + count++; + } + } + + // raise an error. + if (count > 0) + { + throw ServiceResultException.Create( + StatusCodes.BadEventIdUnknown, + "Error deleting events. Only {0} of {1} deletes succeeded.", + events.Count - count, + events.Count); + } + } + } + + private void ViewDetailsMI_Click(object sender, EventArgs e) + { + try + { + if (EventsLV.SelectedItems.Count == 0) + { + return; + } + + VariantCollection fields = EventsLV.SelectedItems[0].Tag as VariantCollection; + + if (fields != null) + { + // new ViewEventDetailsDlg().ShowDialog(m_filter, fields); + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + private void DeleteHistoryMI_Click(object sender, EventArgs e) + { + try + { + if (EventsLV.SelectedItems.Count == 0) + { + return; + } + + List events = new List(); + + foreach (ListViewItem item in EventsLV.SelectedItems) + { + VariantCollection fields = item.Tag as VariantCollection; + + if (fields != null) + { + events.Add(fields); + } + } + + if (events.Count > 0) + { + DeleteHistory(m_areaId, events, m_filter); + + foreach (ListViewItem item in EventsLV.SelectedItems) + { + VariantCollection fields = item.Tag as VariantCollection; + + if (fields != null) + { + item.Font = new Font(item.Font, FontStyle.Strikeout); + } + } + } + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/EventListView.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/FilterDeclaration.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/FilterDeclaration.cs new file mode 100644 index 00000000..43df5eb3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/FilterDeclaration.cs @@ -0,0 +1,476 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Text; +using System.Collections.Generic; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Stores a type declaration retrieved from a server. + /// + public class TypeDeclaration + { + /// + /// The node if for the type. + /// + public NodeId NodeId; + + /// + /// The fully inhierited list of instance declarations for the type. + /// + public List Declarations; + } + + /// + /// Stores an instance declaration fetched from the server. + /// + public class InstanceDeclaration + { + /// + /// The type that the declaration belongs to. + /// + public NodeId RootTypeId; + + /// + /// The browse path to the instance declaration. + /// + public QualifiedNameCollection BrowsePath; + + /// + /// The browse path to the instance declaration. + /// + public string BrowsePathDisplayText; + + /// + /// A localized path to the instance declaration. + /// + public string DisplayPath; + + /// + /// The node id for the instance declaration. + /// + public NodeId NodeId; + + /// + /// The node class of the instance declaration. + /// + public NodeClass NodeClass; + + /// + /// The browse name for the instance declaration. + /// + public QualifiedName BrowseName; + + /// + /// The display name for the instance declaration. + /// + public string DisplayName; + + /// + /// The description for the instance declaration. + /// + public string Description; + + /// + /// The modelling rule for the instance declaration (i.e. Mandatory or Optional). + /// + public NodeId ModellingRule; + + /// + /// The data type for the instance declaration. + /// + public NodeId DataType; + + /// + /// The value rank for the instance declaration. + /// + public int ValueRank; + + /// + /// The built-in type parent for the data type. + /// + public BuiltInType BuiltInType; + + /// + /// A localized name for the data type. + /// + public string DataTypeDisplayText; + + /// + /// An instance declaration that has been overridden by the current instance. + /// + public InstanceDeclaration OverriddenDeclaration; + } + + /// + /// A field in a filter declaration. + /// + public class FilterDeclarationField + { + /// + /// Creates a new instance of a FilterDeclarationField. + /// + public FilterDeclarationField() + { + Selected = true; + DisplayInList = false; + FilterEnabled = false; + FilterOperator = FilterOperator.Equals; + FilterValue = Variant.Null; + InstanceDeclaration = null; + } + + /// + /// Creates a new instance of a FilterDeclarationField. + /// + public FilterDeclarationField(InstanceDeclaration instanceDeclaration) + { + Selected = true; + DisplayInList = false; + FilterEnabled = false; + FilterOperator = FilterOperator.Equals; + FilterValue = Variant.Null; + InstanceDeclaration = instanceDeclaration; + } + + /// + /// Creates a new instance of a FilterDeclarationField. + /// + public FilterDeclarationField(FilterDeclarationField field) + { + Selected = field.Selected; + DisplayInList = field.DisplayInList; + FilterEnabled = field.FilterEnabled; + FilterOperator = field.FilterOperator; + FilterValue = field.FilterValue; + InstanceDeclaration = field.InstanceDeclaration; + } + + /// + /// Whether the field is returned as part of the event notification. + /// + public bool Selected; + + /// + /// Whether the field is displayed in the list view. + /// + public bool DisplayInList; + + /// + /// Whether the filter is enabled. + /// + public bool FilterEnabled; + + /// + /// The filter operator to use in the where clause. + /// + public FilterOperator FilterOperator; + + /// + /// The filter value to use in the where clause. + /// + public Variant FilterValue; + + /// + /// The instance declaration associated with the field. + /// + public InstanceDeclaration InstanceDeclaration; + } + + /// + /// A declararion of an event filter. + /// + public class FilterDeclaration + { + /// + /// Creates a new instance of a FilterDeclaration. + /// + public FilterDeclaration() + { + EventTypeId = Opc.Ua.ObjectTypeIds.BaseEventType; + Fields = new List(); + } + + /// + /// Creates a new instance of a FilterDeclaration. + /// + public FilterDeclaration(TypeDeclaration eventType, FilterDeclaration template) + { + EventTypeId = eventType.NodeId; + Fields = new List(); + + foreach (InstanceDeclaration instanceDeclaration in eventType.Declarations) + { + if (instanceDeclaration.NodeClass == NodeClass.Method) + { + continue; + } + + if (NodeId.IsNull(instanceDeclaration.ModellingRule)) + { + continue; + } + + FilterDeclarationField element = new FilterDeclarationField(instanceDeclaration); + Fields.Add(element); + + // set reasonable defaults. + if (template == null) + { + if (instanceDeclaration.RootTypeId == Opc.Ua.ObjectTypeIds.BaseEventType && instanceDeclaration.BrowseName != Opc.Ua.BrowseNames.EventId) + { + element.DisplayInList = true; + } + } + + // preserve filter settings. + else + { + foreach (FilterDeclarationField field in template.Fields) + { + if (field.InstanceDeclaration.BrowsePathDisplayText == element.InstanceDeclaration.BrowsePathDisplayText) + { + element.DisplayInList = field.DisplayInList; + element.FilterEnabled = field.FilterEnabled; + element.FilterOperator = field.FilterOperator; + element.FilterValue = field.FilterValue; + break; + } + } + } + } + } + + /// + /// Creates a new instance of a FilterDeclaration. + /// + public FilterDeclaration(FilterDeclaration declaration) + { + EventTypeId = declaration.EventTypeId; + Fields = new List(declaration.Fields.Count); + + for (int ii = 0; ii < declaration.Fields.Count; ii++) + { + Fields.Add(new FilterDeclarationField(declaration.Fields[ii])); + } + } + + /// + /// Returns the event filter defined by the filter declaration. + /// + public EventFilter GetFilter() + { + EventFilter filter = new EventFilter(); + filter.SelectClauses = GetSelectClause(); + filter.WhereClause = GetWhereClause(); + return filter; + } + + /// + /// Adds a simple field to the declaration. + /// + public void AddSimpleField(QualifiedName browseName, BuiltInType dataType, bool displayInList) + { + AddSimpleField(new QualifiedName[] { browseName }, NodeClass.Variable, dataType, ValueRanks.Scalar, displayInList); + } + + /// + /// Adds a simple field to the declaration. + /// + public void AddSimpleField(QualifiedName browseName, BuiltInType dataType, int valueRank, bool displayInList) + { + AddSimpleField(new QualifiedName[] { browseName }, NodeClass.Variable, dataType, valueRank, displayInList); + } + + /// + /// Adds a simple field to the declaration. + /// + public void AddSimpleField(QualifiedName[] browseNames, BuiltInType dataType, int valueRank, bool displayInList) + { + AddSimpleField(browseNames, NodeClass.Variable, dataType, valueRank, displayInList); + } + + /// + /// Adds a simple field to the declaration. + /// + public void AddSimpleField(QualifiedName[] browseNames, NodeClass nodeClass, BuiltInType dataType, int valueRank, bool displayInList) + { + FilterDeclarationField field = new FilterDeclarationField(); + + field.DisplayInList = displayInList; + field.InstanceDeclaration = new InstanceDeclaration(); + field.InstanceDeclaration.NodeClass = nodeClass; + + if (browseNames != null) + { + field.InstanceDeclaration.BrowseName = browseNames[browseNames.Length - 1]; + field.InstanceDeclaration.BrowsePath = new QualifiedNameCollection(); + + StringBuilder path = new StringBuilder(); + + for (int ii = 0; ii < browseNames.Length; ii++) + { + if (path.Length > 0) + { + path.Append('/'); + } + + path.Append(browseNames[ii]); + field.InstanceDeclaration.BrowsePath.Add(browseNames[ii]); + } + + field.InstanceDeclaration.BrowsePathDisplayText = path.ToString(); + } + + field.InstanceDeclaration.BuiltInType = dataType; + field.InstanceDeclaration.DataType = (uint)dataType; + field.InstanceDeclaration.ValueRank = valueRank; + field.InstanceDeclaration.DataTypeDisplayText = dataType.ToString(); + + if (valueRank >= 0) + { + field.InstanceDeclaration.DataTypeDisplayText += "[]"; + } + + field.InstanceDeclaration.DisplayName = field.InstanceDeclaration.BrowseName.Name; + field.InstanceDeclaration.DisplayPath = field.InstanceDeclaration.BrowsePathDisplayText; + field.InstanceDeclaration.RootTypeId = ObjectTypeIds.BaseEventType; + Fields.Add(field); + } + + /// + /// Returns the select clause defined by the filter declaration. + /// + public SimpleAttributeOperandCollection GetSelectClause() + { + SimpleAttributeOperandCollection selectClause = new SimpleAttributeOperandCollection(); + + SimpleAttributeOperand operand = new SimpleAttributeOperand(); + operand.TypeDefinitionId = Opc.Ua.ObjectTypeIds.BaseEventType; + operand.AttributeId = Attributes.NodeId; + selectClause.Add(operand); + + foreach (FilterDeclarationField field in Fields) + { + if (field.Selected) + { + operand = new SimpleAttributeOperand(); + operand.TypeDefinitionId = field.InstanceDeclaration.RootTypeId; + operand.AttributeId = (field.InstanceDeclaration.NodeClass == NodeClass.Object) ? Attributes.NodeId : Attributes.Value; + operand.BrowsePath = field.InstanceDeclaration.BrowsePath; + selectClause.Add(operand); + } + } + + return selectClause; + } + + /// + /// Returns the where clause defined by the filter declaration. + /// + public ContentFilter GetWhereClause() + { + ContentFilter whereClause = new ContentFilter(); + ContentFilterElement element1 = whereClause.Push(FilterOperator.OfType, EventTypeId); + + EventFilter filter = new EventFilter(); + + foreach (FilterDeclarationField field in Fields) + { + if (field.FilterEnabled) + { + SimpleAttributeOperand operand1 = new SimpleAttributeOperand(); + operand1.TypeDefinitionId = field.InstanceDeclaration.RootTypeId; + operand1.AttributeId = (field.InstanceDeclaration.NodeClass == NodeClass.Object) ? Attributes.NodeId : Attributes.Value; + operand1.BrowsePath = field.InstanceDeclaration.BrowsePath; + + LiteralOperand operand2 = new LiteralOperand(); + operand2.Value = field.FilterValue; + + ContentFilterElement element2 = whereClause.Push(field.FilterOperator, operand1, operand2); + element1 = whereClause.Push(FilterOperator.And, element1, element2); + } + } + + return whereClause; + } + + /// + /// Returns the value for the specified browse name. + /// + public T GetValue(QualifiedName browseName, VariantCollection fields, T defaultValue) + { + if (fields == null || fields.Count == 0) + { + return defaultValue; + } + + if (browseName == null) + { + browseName = QualifiedName.Null; + } + + for (int ii = 0; ii < this.Fields.Count; ii++) + { + if (this.Fields[ii].InstanceDeclaration.BrowseName == browseName) + { + if (ii >= fields.Count+1) + { + return defaultValue; + } + + object value = fields[ii+1].Value; + + if (typeof(T).IsInstanceOfType(value)) + { + return (T)value; + } + + break; + } + } + + return defaultValue; + } + + /// + /// The type of event. + /// + public NodeId EventTypeId; + + /// + /// The list of declarations for the fields. + /// + public List Fields; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.Designer.cs new file mode 100644 index 00000000..b260b59a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.Designer.cs @@ -0,0 +1,73 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HostListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UserAccountListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "UserAccountListCtrl"; + this.ResumeLayout(false); + + } + + #endregion + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.cs new file mode 100644 index 00000000..e992789b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.cs @@ -0,0 +1,181 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Net; + +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A list of hosts. + /// + public partial class HostListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public HostListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Addresses", HorizontalAlignment.Left, null } + }; + #endregion + + #region Public Interface + /// + /// Displays a list of servers in the control. + /// + public void Initialize(string domain) + { + ItemsLV.Items.Clear(); + + this.Instructions = Utils.Format("Discovering hosts on domain '{0}'.", domain); + AdjustColumns(); + } + #endregion + + #region Private Methods + /// + /// Finds the addresses for the specified host. + /// + private void OnFetchAddresses(object state) + { + ListViewItem listItem = state as ListViewItem; + + if (listItem == null) + { + return; + } + + string hostname = listItem.Tag as string; + + if (hostname == null) + { + return; + } + + try + { + IPAddress[] addresses = Dns.GetHostAddresses(hostname); + + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < addresses.Length; ii++) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + buffer.AppendFormat("{0}", addresses[ii]); + } + + ThreadPool.QueueUserWorkItem(new WaitCallback(OnUpdateAddress), new object[] { listItem, buffer.ToString() }); + } + catch (Exception e) + { + Utils.Trace(e, "Could not get ip addresses for host: {0}", hostname); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnUpdateAddress), new object[] { listItem, e.Message }); + } + } + + /// + /// Updates the addresses for a host. + /// + private void OnUpdateAddress(object state) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateAddress), state); + return; + } + + ListViewItem listItem = ((object[])state)[0] as ListViewItem; + + if (listItem == null) + { + return; + } + + string addresses = ((object[])state)[1] as string; + + if (addresses == null) + { + return; + } + + listItem.SubItems[1].Text = addresses; + + AdjustColumns(); + } + #endregion + + #region Overridden Methods + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + string hostname = listItem.Tag as string; + + if (hostname == null) + { + base.UpdateItem(listItem, hostname); + return; + } + + listItem.SubItems[0].Text = String.Format("{0}", hostname); + listItem.SubItems[1].Text = ""; + + listItem.ImageKey = GuiUtils.Icons.Computer; + + ThreadPool.QueueUserWorkItem(new WaitCallback(OnFetchAddresses), listItem); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.Designer.cs new file mode 100644 index 00000000..2cfab118 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.Designer.cs @@ -0,0 +1,196 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HostListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.HostsCTRL = new Opc.Ua.Client.Controls.HostListCtrl(); + this.TopPN = new System.Windows.Forms.Panel(); + this.DomainNameCTRL = new Opc.Ua.Client.Controls.SelectHostCtrl(); + this.DomainLB = new System.Windows.Forms.Label(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.TopPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(2, 254); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(455, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(376, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.HostsCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(2, 23); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.MainPN.Size = new System.Drawing.Size(455, 231); + this.MainPN.TabIndex = 2; + // + // HostsCTRL + // + this.HostsCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.HostsCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.HostsCTRL.Instructions = null; + this.HostsCTRL.Location = new System.Drawing.Point(0, 3); + this.HostsCTRL.Name = "HostsCTRL"; + this.HostsCTRL.Size = new System.Drawing.Size(455, 228); + this.HostsCTRL.TabIndex = 0; + this.HostsCTRL.ItemsPicked += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.HostsCTRL_ItemsPicked); + this.HostsCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.HostsCTRL_ItemsSelected); + // + // TopPN + // + this.TopPN.Controls.Add(this.DomainNameCTRL); + this.TopPN.Controls.Add(this.DomainLB); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(2, 2); + this.TopPN.Name = "TopPN"; + this.TopPN.Size = new System.Drawing.Size(455, 21); + this.TopPN.TabIndex = 1; + // + // DomainNameCTRL + // + this.DomainNameCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DomainNameCTRL.CommandText = "Refresh"; + this.DomainNameCTRL.Location = new System.Drawing.Point(47, 0); + this.DomainNameCTRL.Margin = new System.Windows.Forms.Padding(0); + this.DomainNameCTRL.MaximumSize = new System.Drawing.Size(4096, 21); + this.DomainNameCTRL.MinimumSize = new System.Drawing.Size(400, 21); + this.DomainNameCTRL.Name = "DomainNameCTRL"; + this.DomainNameCTRL.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.DomainNameCTRL.SelectDomains = true; + this.DomainNameCTRL.Size = new System.Drawing.Size(408, 21); + this.DomainNameCTRL.TabIndex = 1; + this.DomainNameCTRL.HostSelected += new System.EventHandler(this.DomainNameCTRL_HostSelected); + this.DomainNameCTRL.HostConnected += new System.EventHandler(this.DomainNameCTRL_HostConnected); + // + // DomainLB + // + this.DomainLB.AutoSize = true; + this.DomainLB.Location = new System.Drawing.Point(0, 4); + this.DomainLB.Name = "DomainLB"; + this.DomainLB.Size = new System.Drawing.Size(43, 13); + this.DomainLB.TabIndex = 0; + this.DomainLB.Text = "Domain"; + this.DomainLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // HostListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(459, 285); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.TopPN); + this.Controls.Add(this.ButtonsPN); + this.MaximizeBox = false; + this.Name = "HostListDlg"; + this.Padding = new System.Windows.Forms.Padding(2, 2, 2, 0); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Discover Hosts"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.TopPN.ResumeLayout(false); + this.TopPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private HostListCtrl HostsCTRL; + private SelectHostCtrl DomainNameCTRL; + private System.Windows.Forms.Panel TopPN; + private System.Windows.Forms.Label DomainLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.cs new file mode 100644 index 00000000..76582ad4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.cs @@ -0,0 +1,180 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to browse a list of servers. + /// + public partial class HostListDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public HostListDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private string m_domain; + private string m_hostname; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public string ShowDialog(string domain) + { + if (String.IsNullOrEmpty(domain)) + { + return null; + } + + m_domain = domain; + + DomainNameCTRL.Initialize(m_domain, null); + HostsCTRL.Initialize(m_domain); + OkBTN.Enabled = false; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_hostname; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void DomainNameCTRL_HostSelected(object sender, SelectHostCtrlEventArgs e) + { + try + { + if (m_domain != e.Hostname) + { + m_domain = e.Hostname; + HostsCTRL.Initialize(m_domain); + m_hostname = null; + OkBTN.Enabled = false; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void DomainNameCTRL_HostConnected(object sender, SelectHostCtrlEventArgs e) + { + try + { + m_domain = e.Hostname; + HostsCTRL.Initialize(m_domain); + m_hostname = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostsCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + m_hostname = null; + + foreach (string hostname in e.Items) + { + m_hostname = hostname; + break; + } + + OkBTN.Enabled = !String.IsNullOrEmpty(m_hostname); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostsCTRL_ItemsPicked(object sender, ListItemActionEventArgs e) + { + try + { + m_hostname = null; + + foreach (string hostname in e.Items) + { + m_hostname = hostname; + break; + } + + if (!String.IsNullOrEmpty(m_hostname)) + { + DialogResult = DialogResult.OK; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/HostListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.Designer.cs new file mode 100644 index 00000000..ff25836d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.Designer.cs @@ -0,0 +1,195 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ReferenceListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.ReferencesDV = new System.Windows.Forms.DataGridView(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.ImageCH = new System.Windows.Forms.DataGridViewImageColumn(); + this.TargetNameCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ReferenceTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.IsForwardCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.NodeClassCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TargetTypeCH = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.ReferencesDV)).BeginInit(); + this.SuspendLayout(); + // + // ReferencesDV + // + this.ReferencesDV.AllowUserToAddRows = false; + this.ReferencesDV.AllowUserToDeleteRows = false; + this.ReferencesDV.AllowUserToOrderColumns = true; + this.ReferencesDV.AllowUserToResizeRows = false; + this.ReferencesDV.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.ReferencesDV.BackgroundColor = System.Drawing.SystemColors.Window; + this.ReferencesDV.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; + this.ReferencesDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ReferencesDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ImageCH, + this.TargetNameCH, + this.ReferenceTypeCH, + this.IsForwardCH, + this.NodeClassCH, + this.TargetTypeCH}); + this.ReferencesDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ReferencesDV.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ReferencesDV.Location = new System.Drawing.Point(0, 0); + this.ReferencesDV.Margin = new System.Windows.Forms.Padding(0); + this.ReferencesDV.Name = "ReferencesDV"; + this.ReferencesDV.ReadOnly = true; + this.ReferencesDV.RowHeadersVisible = false; + this.ReferencesDV.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.ReferencesDV.RowTemplate.Height = 20; + this.ReferencesDV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ReferencesDV.Size = new System.Drawing.Size(890, 430); + this.ReferencesDV.TabIndex = 1; + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit; + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.TransparentColor = System.Drawing.Color.White; + // + // ImageCH + // + this.ImageCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ImageCH.DataPropertyName = "Image"; + this.ImageCH.HeaderText = ""; + this.ImageCH.Name = "ImageCH"; + this.ImageCH.ReadOnly = true; + this.ImageCH.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.ImageCH.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ImageCH.Width = 19; + // + // TargetNameCH + // + this.TargetNameCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.TargetNameCH.DataPropertyName = "TargetName"; + this.TargetNameCH.HeaderText = "Target Name"; + this.TargetNameCH.MinimumWidth = 20; + this.TargetNameCH.Name = "TargetNameCH"; + this.TargetNameCH.ReadOnly = true; + this.TargetNameCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.TargetNameCH.Width = 94; + // + // ReferenceTypeCH + // + this.ReferenceTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ReferenceTypeCH.DataPropertyName = "ReferenceType"; + this.ReferenceTypeCH.HeaderText = "Reference Type"; + this.ReferenceTypeCH.MinimumWidth = 20; + this.ReferenceTypeCH.Name = "ReferenceTypeCH"; + this.ReferenceTypeCH.ReadOnly = true; + this.ReferenceTypeCH.Width = 109; + // + // IsForwardCH + // + this.IsForwardCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.IsForwardCH.DataPropertyName = "IsForward"; + this.IsForwardCH.HeaderText = "Is Forward"; + this.IsForwardCH.MinimumWidth = 20; + this.IsForwardCH.Name = "IsForwardCH"; + this.IsForwardCH.ReadOnly = true; + this.IsForwardCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.IsForwardCH.Width = 81; + // + // NodeClassCH + // + this.NodeClassCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.NodeClassCH.DataPropertyName = "NodeClass"; + this.NodeClassCH.HeaderText = "NodeClass"; + this.NodeClassCH.MinimumWidth = 20; + this.NodeClassCH.Name = "NodeClassCH"; + this.NodeClassCH.ReadOnly = true; + this.NodeClassCH.Width = 83; + // + // TargetTypeCH + // + this.TargetTypeCH.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TargetTypeCH.DataPropertyName = "TargetType"; + this.TargetTypeCH.HeaderText = "Target Type"; + this.TargetTypeCH.MinimumWidth = 20; + this.TargetTypeCH.Name = "TargetTypeCH"; + this.TargetTypeCH.ReadOnly = true; + this.TargetTypeCH.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // ReferenceListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ReferencesDV); + this.Name = "ReferenceListCtrl"; + this.Size = new System.Drawing.Size(890, 430); + ((System.ComponentModel.ISupportInitialize)(this.ReferencesDV)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView ReferencesDV; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.DataGridViewImageColumn ImageCH; + private System.Windows.Forms.DataGridViewTextBoxColumn TargetNameCH; + private System.Windows.Forms.DataGridViewTextBoxColumn ReferenceTypeCH; + private System.Windows.Forms.DataGridViewTextBoxColumn IsForwardCH; + private System.Windows.Forms.DataGridViewTextBoxColumn NodeClassCH; + private System.Windows.Forms.DataGridViewTextBoxColumn TargetTypeCH; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.cs new file mode 100644 index 00000000..fe6198c9 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.cs @@ -0,0 +1,223 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of references for a node. + /// + public partial class ReferenceListCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance. + /// + public ReferenceListCtrl() + { + InitializeComponent(); + BrowseDirection = BrowseDirection.Both; + ReferencesDV.AutoGenerateColumns = false; + ReferencesDV.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + ImageList = new ClientUtils().ImageList; + + m_dataset = new DataSet(); + + m_dataset.Tables.Add("References"); + m_dataset.Tables[0].Columns.Add("Reference", typeof(ReferenceDescription)); + m_dataset.Tables[0].Columns.Add("TargetName", typeof(string)); + m_dataset.Tables[0].Columns.Add("ReferenceType", typeof(string)); + m_dataset.Tables[0].Columns.Add("IsForward", typeof(bool)); + m_dataset.Tables[0].Columns.Add("NodeClass", typeof(string)); + m_dataset.Tables[0].Columns.Add("TargetType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Image", typeof(Image)); + + ReferencesDV.DataSource = m_dataset.Tables[0].DefaultView; + } + #endregion + + #region Private Fields + private Session m_session; + private DataSet m_dataset; + #endregion + + #region Public Interface + /// + /// The node id shown in the control. + /// + NodeId NodeId { get; set; } + + /// + /// The view used when browsing. + /// + ViewDescription View { get; set; } + + /// + /// The list of references to browse. + /// + NodeId[] ReferenceTypeIds { get; set; } + + /// + /// The direction of browsing. + /// + BrowseDirection BrowseDirection { get; set; } + + /// + /// Gets or sets the context menu for references list. + /// + public ContextMenuStrip ReferencesMenuStrip + { + get { return ReferencesDV.ContextMenuStrip; } + set { ReferencesDV.ContextMenuStrip = value; } + } + + /// + /// Changes the session. + /// + public void ChangeSession(Session session) + { + // do nothing if no change or no node id. + if (Object.ReferenceEquals(m_session, session)) + { + return; + } + + m_session = session; + + // update the display. + Browse(); + } + + /// + /// Changes the node id. + /// + public void ChangeNodeId(NodeId nodeId) + { + // do nothing if no change or no session. + if (NodeId == nodeId) + { + return; + } + + // save the node. + NodeId = nodeId; + + // update the display. + Browse(); + } + #endregion + + #region Private Methods + /// + /// Gets the list of references to follow. + /// + private BrowseDescriptionCollection CreateNodesToBrowse() + { + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + + if (ReferenceTypeIds != null && ReferenceTypeIds.Length > 0) + { + for (int ii = 0; ii < ReferenceTypeIds.Length; ii++) + { + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = NodeId; + nodeToBrowse.BrowseDirection = BrowseDirection; + nodeToBrowse.ReferenceTypeId = ReferenceTypeIds[ii]; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = 0; + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + nodesToBrowse.Add(nodeToBrowse); + } + } + else + { + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = NodeId; + nodeToBrowse.BrowseDirection = BrowseDirection; + nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.References; + nodeToBrowse.IncludeSubtypes = true; + nodeToBrowse.NodeClassMask = 0; + nodeToBrowse.ResultMask = (uint)BrowseResultMask.All; + + nodesToBrowse.Add(nodeToBrowse); + } + + return nodesToBrowse; + } + + /// + /// Browses for the requested references. + /// + private void Browse() + { + m_dataset.Tables[0].Rows.Clear(); + + if (m_session == null) + { + return; + } + + ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, View, CreateNodesToBrowse(), false); + + for (int ii = 0; references != null && ii < references.Count; ii++) + { + ReferenceDescription reference = references[ii]; + + DataRow row = m_dataset.Tables[0].NewRow(); + + row[0] = reference; + row[1] = m_session.NodeCache.GetDisplayText(reference.NodeId); + row[2] = m_session.NodeCache.GetDisplayText(reference.ReferenceTypeId); + row[3] = reference.IsForward.ToString(); + row[4] = reference.NodeClass.ToString(); + row[5] = m_session.NodeCache.GetDisplayText(reference.TypeDefinition); + row[6] = ImageList.Images[ClientUtils.GetImageIndex(m_session, reference.NodeClass, reference.TypeDefinition, false)]; + + m_dataset.Tables[0].Rows.Add(row); + } + + for (int ii = 0; ii < ReferencesDV.SelectedRows.Count; ii++) + { + ReferencesDV.SelectedRows[ii].Selected = false; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.resx new file mode 100644 index 00000000..2a7cef43 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ReferenceListCtrl.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.Designer.cs new file mode 100644 index 00000000..f24457a2 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.Designer.cs @@ -0,0 +1,122 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectHostCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.HostsCB = new System.Windows.Forms.ComboBox(); + this.ConnectPN = new System.Windows.Forms.Panel(); + this.ConnectBTN = new System.Windows.Forms.Button(); + this.ConnectPN.SuspendLayout(); + this.SuspendLayout(); + // + // HostsCB + // + this.HostsCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HostsCB.FormattingEnabled = true; + this.HostsCB.Location = new System.Drawing.Point(0, 0); + this.HostsCB.Name = "HostsCB"; + this.HostsCB.Size = new System.Drawing.Size(578, 21); + this.HostsCB.TabIndex = 0; + this.HostsCB.SelectedIndexChanged += new System.EventHandler(this.HostsCB_SelectedIndexChanged); + // + // ConnectPN + // + this.ConnectPN.Controls.Add(this.ConnectBTN); + this.ConnectPN.Dock = System.Windows.Forms.DockStyle.Right; + this.ConnectPN.Location = new System.Drawing.Point(581, 0); + this.ConnectPN.Margin = new System.Windows.Forms.Padding(0); + this.ConnectPN.Name = "ConnectPN"; + this.ConnectPN.Size = new System.Drawing.Size(74, 21); + this.ConnectPN.TabIndex = 1; + // + // ConnectBTN + // + this.ConnectBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConnectBTN.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ConnectBTN.Location = new System.Drawing.Point(0, 0); + this.ConnectBTN.Name = "ConnectBTN"; + this.ConnectBTN.Size = new System.Drawing.Size(74, 21); + this.ConnectBTN.TabIndex = 0; + this.ConnectBTN.Text = "Connect"; + this.ConnectBTN.UseVisualStyleBackColor = true; + this.ConnectBTN.Click += new System.EventHandler(this.ConnectBTN_Click); + // + // SelectHostCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ConnectPN); + this.Controls.Add(this.HostsCB); + this.Margin = new System.Windows.Forms.Padding(0); + this.MaximumSize = new System.Drawing.Size(4096, 21); + this.MinimumSize = new System.Drawing.Size(400, 21); + this.Name = "SelectHostCtrl"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.Size = new System.Drawing.Size(655, 21); + this.ConnectPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox HostsCB; + private System.Windows.Forms.Panel ConnectPN; + private System.Windows.Forms.Button ConnectBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.cs new file mode 100644 index 00000000..eac7a900 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.cs @@ -0,0 +1,256 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a drop down list of hosts. + /// + public partial class SelectHostCtrl : UserControl + { + #region Constructors + /// + /// Initializes the control. + /// + public SelectHostCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private int m_selectedIndex; + private bool m_selectDomains; + private event EventHandler m_HostSelected; + private event EventHandler m_HostConnected; + #endregion + + #region Public Interface + /// + /// Whether the control is used to select domains instead of hosts. + /// + [System.ComponentModel.DefaultValue(false)] + public bool SelectDomains + { + get { return m_selectDomains; } + set { m_selectDomains = value; } + } + + /// + /// The text displayed on the connect button. + /// + [System.ComponentModel.DefaultValue("Connect")] + public string CommandText + { + get { return ConnectBTN.Text; } + set { ConnectBTN.Text = value; } + } + + /// + /// Displays a set of hostnames in the control. + /// + public void Initialize(string defaultHost, IList hostnames) + { + HostsCB.Items.Clear(); + + // add option to browse for hosts. + HostsCB.Items.Add(""); + + // add any existing hosts. + if (hostnames != null) + { + foreach (string hostname in hostnames) + { + HostsCB.Items.Add(hostname); + } + } + + // set a suitable default hostname. + if (String.IsNullOrEmpty(defaultHost)) + { + defaultHost = System.Net.Dns.GetHostName(); + + if (hostnames != null && hostnames.Count > 0) + { + defaultHost = hostnames[0]; + } + } + + // set the current selection. + m_selectedIndex = HostsCB.FindString(defaultHost); + + if (m_selectedIndex == -1) + { + m_selectedIndex = HostsCB.Items.Add(defaultHost); + } + + HostsCB.SelectedIndex = m_selectedIndex; + } + + /// + /// Raised when a host is selected in the control. + /// + public event EventHandler HostSelected + { + add { m_HostSelected += value; } + remove { m_HostSelected -= value; } + } + + /// + /// Raised when the connect button is clicked. + /// + public event EventHandler HostConnected + { + add { m_HostConnected += value; } + remove { m_HostConnected -= value; } + } + #endregion + + #region Event Handlers + private void HostsCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (HostsCB.SelectedIndex != 0) + { + if (m_HostSelected != null) + { + m_HostSelected(this, new SelectHostCtrlEventArgs((string)HostsCB.SelectedItem)); + } + + m_selectedIndex = HostsCB.SelectedIndex; + return; + } + + if (!m_selectDomains) + { + // prompt user to select a host. + string hostname = new HostListDlg().ShowDialog(null); + + if (hostname == null) + { + HostsCB.SelectedIndex = m_selectedIndex; + return; + } + + // set the current selection. + m_selectedIndex = HostsCB.FindString(hostname); + + if (m_selectedIndex == -1) + { + m_selectedIndex = HostsCB.Items.Add(hostname); + } + } + + HostsCB.SelectedIndex = m_selectedIndex; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ConnectBTN_Click(object sender, EventArgs e) + { + try + { int index = HostsCB.SelectedIndex; + + if (index == 0) + { + return; + } + + if (m_HostConnected != null) + { + if (index == -1) + { + if (!String.IsNullOrEmpty(HostsCB.Text)) + { + m_HostConnected(this, new SelectHostCtrlEventArgs(HostsCB.Text)); + } + + // add host to list. + m_selectedIndex = HostsCB.FindString(HostsCB.Text); + + if (m_selectedIndex == -1) + { + m_selectedIndex = HostsCB.Items.Add(HostsCB.Text); + } + + return; + } + + m_HostConnected(this, new SelectHostCtrlEventArgs((string)HostsCB.SelectedItem)); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } + + #region SelectHostCtrlEventArgs Class + /// + /// The event arguments passed when the SelectHostCtrlEventArgs raises events. + /// + public class SelectHostCtrlEventArgs : EventArgs + { + /// + /// Initilizes the object with the current hostname. + /// + public SelectHostCtrlEventArgs(string hostname) + { + m_hostname = hostname; + } + + /// + /// The current hostname. + /// + public string Hostname + { + get { return m_hostname; } + } + + private string m_hostname; + } + #endregion +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/SelectHostCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.Designer.cs new file mode 100644 index 00000000..9836963b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.Designer.cs @@ -0,0 +1,236 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ViewNodeStateDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ResultsDV = new System.Windows.Forms.DataGridView(); + this.BrowsePath = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Value = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ControlsPN = new System.Windows.Forms.TableLayoutPanel(); + this.ValueLN = new System.Windows.Forms.Label(); + this.DataTypeLB = new System.Windows.Forms.Label(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).BeginInit(); + this.ControlsPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(709, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 291); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(787, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ResultsDV); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(787, 291); + this.MainPN.TabIndex = 1; + // + // ResultsDV + // + this.ResultsDV.AllowUserToAddRows = false; + this.ResultsDV.AllowUserToDeleteRows = false; + this.ResultsDV.AllowUserToResizeRows = false; + this.ResultsDV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsDV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.BrowsePath, + this.DataType, + this.Value}); + this.ResultsDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDV.Location = new System.Drawing.Point(0, 0); + this.ResultsDV.Name = "ResultsDV"; + this.ResultsDV.RowHeadersVisible = false; + this.ResultsDV.Size = new System.Drawing.Size(787, 291); + this.ResultsDV.TabIndex = 0; + // + // BrowsePath + // + this.BrowsePath.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.BrowsePath.DataPropertyName = "BrowsePath"; + this.BrowsePath.HeaderText = "Browse Path"; + this.BrowsePath.Name = "BrowsePath"; + this.BrowsePath.ReadOnly = true; + this.BrowsePath.Width = 92; + // + // DataType + // + this.DataType.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.DataType.DataPropertyName = "DataType"; + this.DataType.HeaderText = "Data Type"; + this.DataType.Name = "DataType"; + this.DataType.ReadOnly = true; + this.DataType.Width = 82; + // + // Value + // + this.Value.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Value.DataPropertyName = "Value"; + this.Value.HeaderText = "Value"; + this.Value.Name = "Value"; + this.Value.ReadOnly = true; + // + // ControlsPN + // + this.ControlsPN.ColumnCount = 3; + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 115F)); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.ControlsPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.ControlsPN.Controls.Add(this.ValueLN, 0, 0); + this.ControlsPN.Location = new System.Drawing.Point(0, 0); + this.ControlsPN.Name = "ControlsPN"; + this.ControlsPN.RowCount = 1; + this.ControlsPN.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.ControlsPN.Size = new System.Drawing.Size(200, 100); + this.ControlsPN.TabIndex = 0; + // + // ValueLN + // + this.ValueLN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ValueLN.AutoSize = true; + this.ValueLN.Location = new System.Drawing.Point(3, 0); + this.ValueLN.Name = "ValueLN"; + this.ValueLN.Size = new System.Drawing.Size(34, 100); + this.ValueLN.TabIndex = 40; + this.ValueLN.Text = "Value"; + this.ValueLN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DataTypeLB + // + this.DataTypeLB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.DataTypeLB.AutoSize = true; + this.DataTypeLB.Location = new System.Drawing.Point(3, 27); + this.DataTypeLB.Name = "DataTypeLB"; + this.DataTypeLB.Size = new System.Drawing.Size(57, 27); + this.DataTypeLB.TabIndex = 44; + this.DataTypeLB.Text = "Data Type"; + this.DataTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ViewNodeStateDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(787, 321); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "ViewNodeStateDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "View Node"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsDV)).EndInit(); + this.ControlsPN.ResumeLayout(false); + this.ControlsPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TableLayoutPanel ControlsPN; + private System.Windows.Forms.Label ValueLN; + private System.Windows.Forms.Label DataTypeLB; + private System.Windows.Forms.DataGridView ResultsDV; + private System.Windows.Forms.DataGridViewTextBoxColumn BrowsePath; + private System.Windows.Forms.DataGridViewTextBoxColumn DataType; + private System.Windows.Forms.DataGridViewTextBoxColumn Value; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.cs new file mode 100644 index 00000000..253b2c42 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.cs @@ -0,0 +1,164 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Text; +using System.Data; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class ViewNodeStateDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public ViewNodeStateDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + ResultsDV.AutoGenerateColumns = false; + + m_dataset = new DataSet(); + m_dataset.Tables.Add("Results"); + + m_dataset.Tables[0].Columns.Add("Index", typeof(int)); + m_dataset.Tables[0].Columns.Add("BrowsePath", typeof(string)); + m_dataset.Tables[0].Columns.Add("DataType", typeof(string)); + m_dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + + m_dataset.Tables[0].DefaultView.Sort = "Index"; + + ResultsDV.DataSource = m_dataset.Tables[0]; + } + #endregion + + #region Private Fields + private Session m_session; + private DataSet m_dataset; + #endregion + + #region Public Interface + /// + /// Prompts the user to edit a value. + /// + public bool ShowDialog(Session session, NodeState node, string caption) + { + m_session = session; + + if (caption != null) + { + this.Text = caption; + } + + PopulateDataView(m_session.SystemContext, node, String.Empty); + m_dataset.AcceptChanges(); + + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + return true; + } + + /// + /// Recursively populates the data view. + /// + private void PopulateDataView( + ISystemContext context, + NodeState parent, + string parentPath) + { + List children = new List(); + parent.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + StringBuilder childPath = new StringBuilder(); + + if (!String.IsNullOrEmpty(parentPath)) + { + childPath.Append(parentPath); + childPath.Append("/"); + } + + childPath.Append(child.GetDisplayText()); + + if (child.NodeClass == NodeClass.Variable) + { + BaseVariableState variable = (BaseVariableState)child; + + if (StatusCode.IsGood(variable.StatusCode)) + { + string dataType = m_session.NodeCache.GetDisplayText(variable.DataType); + + if (variable.ValueRank >= 0) + { + dataType += "[]"; + } + + DataRow row = m_dataset.Tables[0].NewRow(); + row[0] = m_dataset.Tables[0].Rows.Count; + row[1] = childPath.ToString(); + row[2] = dataType; + row[3] = variable.WrappedValue; + m_dataset.Tables[0].Rows.Add(row); + } + } + + PopulateDataView(context, child, childPath.ToString()); + } + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.resx new file mode 100644 index 00000000..123e104b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Common/ViewNodeStateDlg.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.Designer.cs new file mode 100644 index 00000000..30766255 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.Designer.cs @@ -0,0 +1,188 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.PrivateKeyLB = new System.Windows.Forms.Label(); + this.PrivateKeyCB = new System.Windows.Forms.ComboBox(); + this.MainPN = new System.Windows.Forms.Panel(); + this.CertificateStoreCTRL = new Opc.Ua.Client.Controls.CertificateStoreCtrl(); + this.PropertiesCTRL = new Opc.Ua.Client.Controls.CertificatePropertiesListCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 482); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(785, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(706, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // PrivateKeyLB + // + this.PrivateKeyLB.AutoSize = true; + this.PrivateKeyLB.Location = new System.Drawing.Point(9, 62); + this.PrivateKeyLB.Name = "PrivateKeyLB"; + this.PrivateKeyLB.Size = new System.Drawing.Size(61, 13); + this.PrivateKeyLB.TabIndex = 1; + this.PrivateKeyLB.Text = "Private Key"; + // + // PrivateKeyCB + // + this.PrivateKeyCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.PrivateKeyCB.Enabled = false; + this.PrivateKeyCB.FormattingEnabled = true; + this.PrivateKeyCB.Location = new System.Drawing.Point(84, 59); + this.PrivateKeyCB.Name = "PrivateKeyCB"; + this.PrivateKeyCB.Size = new System.Drawing.Size(111, 21); + this.PrivateKeyCB.TabIndex = 2; + // + // MainPN + // + this.MainPN.Controls.Add(this.CertificateStoreCTRL); + this.MainPN.Controls.Add(this.PrivateKeyCB); + this.MainPN.Controls.Add(this.PrivateKeyLB); + this.MainPN.Controls.Add(this.PropertiesCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.MainPN.Size = new System.Drawing.Size(785, 482); + this.MainPN.TabIndex = 1; + // + // CertificateStoreCTRL + // + this.CertificateStoreCTRL.Location = new System.Drawing.Point(9, 6); + this.CertificateStoreCTRL.MinimumSize = new System.Drawing.Size(300, 51); + this.CertificateStoreCTRL.Name = "CertificateStoreCTRL"; + this.CertificateStoreCTRL.ReadOnly = true; + this.CertificateStoreCTRL.Size = new System.Drawing.Size(770, 51); + this.CertificateStoreCTRL.StorePath = "X:\\OPC\\Source\\UA311\\Source\\Utilities\\CertificateGenerator"; + this.CertificateStoreCTRL.TabIndex = 0; + // + // PropertiesCTRL + // + this.PropertiesCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PropertiesCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.PropertiesCTRL.Instructions = null; + this.PropertiesCTRL.Location = new System.Drawing.Point(9, 86); + this.PropertiesCTRL.Name = "PropertiesCTRL"; + this.PropertiesCTRL.Size = new System.Drawing.Size(770, 396); + this.PropertiesCTRL.TabIndex = 3; + // + // CertificateDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(785, 513); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "CertificateDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "View Certificate"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private CertificatePropertiesListCtrl PropertiesCTRL; + private System.Windows.Forms.Label PrivateKeyLB; + private System.Windows.Forms.ComboBox PrivateKeyCB; + private System.Windows.Forms.Panel MainPN; + private CertificateStoreCtrl CertificateStoreCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.cs new file mode 100644 index 00000000..9e4f3d7b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.cs @@ -0,0 +1,123 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a ApplicationDescription. + /// + public partial class CertificateDlg : Form + { + /// + /// Contructs the object. + /// + public CertificateDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + PrivateKeyCB.Items.Add("No"); + PrivateKeyCB.Items.Add("Yes"); + PrivateKeyCB.SelectedIndex = 0; + } + + /// + /// Displays the dialog. + /// + public async Task ShowDialog(CertificateIdentifier certificateIdentifier) + { + CertificateStoreCTRL.StoreType = null; + CertificateStoreCTRL.StorePath = null; + PrivateKeyCB.SelectedIndex = 0; + PropertiesCTRL.Initialize((X509Certificate2)null); + + if (certificateIdentifier != null) + { + X509Certificate2 certificate = await certificateIdentifier.Find(); + + CertificateStoreCTRL.StoreType = certificateIdentifier.StoreType; + CertificateStoreCTRL.StorePath = certificateIdentifier.StorePath; + + if (certificate != null && certificateIdentifier.Find(true) != null) + { + PrivateKeyCB.SelectedIndex = 1; + } + else + { + PrivateKeyCB.SelectedIndex = 0; + } + + PropertiesCTRL.Initialize(certificate); + } + + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + return true; + } + + /// + /// Displays the dialog. + /// + public bool ShowDialog(X509Certificate2 certificate) + { + CertificateStoreCTRL.StoreType = null; + CertificateStoreCTRL.StorePath = null; + PrivateKeyCB.SelectedIndex = 0; + PropertiesCTRL.Initialize(certificate); + + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + return true; + } + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.Designer.cs new file mode 100644 index 00000000..bcc42ae6 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.Designer.cs @@ -0,0 +1,163 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ViewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.CopyMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PasteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.ImportMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ExportMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // ItemsLV + // + this.ItemsLV.ContextMenuStrip = this.PopupMenu; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ViewMI, + this.DeleteMI, + this.toolStripSeparator1, + this.CopyMI, + this.PasteMI, + this.toolStripSeparator2, + this.ImportMI, + this.ExportMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(119, 148); + // + // ViewMI + // + this.ViewMI.Name = "ViewMI"; + this.ViewMI.Size = new System.Drawing.Size(118, 22); + this.ViewMI.Text = "View..."; + this.ViewMI.Click += new System.EventHandler(this.ViewMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(118, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(115, 6); + // + // CopyMI + // + this.CopyMI.Name = "CopyMI"; + this.CopyMI.Size = new System.Drawing.Size(118, 22); + this.CopyMI.Text = "Copy"; + this.CopyMI.Click += new System.EventHandler(this.CopyMI_Click); + // + // PasteMI + // + this.PasteMI.Name = "PasteMI"; + this.PasteMI.Size = new System.Drawing.Size(118, 22); + this.PasteMI.Text = "Paste"; + this.PasteMI.Click += new System.EventHandler(this.PasteMI_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(115, 6); + // + // ImportMI + // + this.ImportMI.Name = "ImportMI"; + this.ImportMI.Size = new System.Drawing.Size(118, 22); + this.ImportMI.Text = "Import..."; + // + // ExportMI + // + this.ExportMI.Name = "ExportMI"; + this.ExportMI.Size = new System.Drawing.Size(118, 22); + this.ExportMI.Text = "Export..."; + // + // CertificateListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "CertificateListCtrl"; + this.Controls.SetChildIndex(this.ItemsLV, 0); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem ViewMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem CopyMI; + private System.Windows.Forms.ToolStripMenuItem PasteMI; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem ImportMI; + private System.Windows.Forms.ToolStripMenuItem ExportMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.cs new file mode 100644 index 00000000..eb27ee3b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.cs @@ -0,0 +1,574 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Security.Cryptography.X509Certificates; +using System.Reflection; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of certificates. + /// + public partial class CertificateListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Constructs the object. + /// + public CertificateListCtrl() + { + InitializeComponent(); + + SetColumns(m_ColumnNames); + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Type", HorizontalAlignment.Left, null }, + new object[] { "Private Key", HorizontalAlignment.Center, null }, + new object[] { "Domains", HorizontalAlignment.Left, null }, + new object[] { "Uri ", HorizontalAlignment.Left, null }, + new object[] { "Valid Until", HorizontalAlignment.Left, null } + }; + + private CertificateStoreIdentifier m_storeId; + private CertificateIdentifierCollection m_certificates; + private IList m_thumbprints; + private List m_items; + #endregion + + #region Public Interface + /// + /// The currently selected certificate. + /// + public X509Certificate2 SelectedCertificate + { + get + { + return SelectedTag as X509Certificate2; + } + } + + /// + /// Gets a value indicating whether this instance is empty store. + /// + public bool IsEmptyStore + { + get + { + if (m_items == null || m_items.Count == 0) + { + return true; + } + + return false; + } + } + + /// + /// Removes all items in the list. + /// + internal void Clear() + { + ItemsLV.Items.Clear(); + Instructions = String.Empty; + AdjustColumns(); + } + + /// + /// Sets the filter. + /// + /// The filter. + internal void SetFilter(CertificateListFilter filter) + { + if (m_items == null || m_items.Count == 0) + { + return; + } + + if (ItemsLV.View == View.List) + { + ItemsLV.Items.Clear(); + ItemsLV.View = View.Details; + } + + for (int ii = 0; ii < m_items.Count; ii++) + { + ListViewItem item = m_items[ii]; + + X509Certificate2 certificate = item.Tag as X509Certificate2; + + if (certificate == null) + { + continue; + } + + if (item.ListView != null) + { + if (!filter.Match(certificate)) + { + item.Remove(); + } + } + else + { + if (filter.Match(certificate)) + { + ItemsLV.Items.Add(item); + } + } + } + + if (ItemsLV.Items.Count == 0) + { + Instructions = "No certificates meet the current filter criteria."; + AdjustColumns(); + return; + } + } + + /// + /// Displays the applications in the control. + /// + internal void Initialize(CertificateIdentifierCollection certificates) + { + ItemsLV.Items.Clear(); + + m_certificates = certificates; + + if (m_certificates == null || m_certificates.Count == 0) + { + Instructions = "No certificates are in the store."; + AdjustColumns(); + return; + } + + // display the list. + foreach (CertificateIdentifier certificate in certificates) + { + AddItem(certificate); + } + + // save the unfiltered list. + m_items = new List(ItemsLV.Items.Count); + + foreach (ListViewItem item in ItemsLV.Items) + { + m_items.Add(item); + } + + AdjustColumns(); + } + + /// + /// Displays the applications in the control. + /// + internal async Task Initialize(CertificateStoreIdentifier id, IList thumbprints) + { + ItemsLV.Items.Clear(); + + m_storeId = id; + m_thumbprints = thumbprints; + + if (m_storeId == null || String.IsNullOrEmpty(m_storeId.StoreType) || String.IsNullOrEmpty(m_storeId.StorePath)) + { + Instructions = "No certificates are in the store."; + AdjustColumns(); + return ; + } + + try + { + // get the store. + using (ICertificateStore store = m_storeId.OpenStore()) + { + // only show certificates with the specified thumbprint. + if (thumbprints != null) + { + Instructions = "None of the selected certificates can be found in the store."; + + foreach (string thumbprint in thumbprints) + { + X509Certificate2Collection certificates = await store.FindByThumbprint(thumbprint); + + if (certificates.Count > 0) + { + AddItem(certificates[0]); + } + } + } + + // show all certificates. + else + { + Instructions = "No certificates are in the store."; + + X509Certificate2Collection certificates = await store.Enumerate(); + foreach (X509Certificate2 certificate in certificates) + { + AddItem(certificate); + } + } + } + } + catch (Exception e) + { + Instructions = "An error occurred opening the store: " + e.Message; + } + + // save the unfiltered list. + m_items = new List(ItemsLV.Items.Count); + + foreach (ListViewItem item in ItemsLV.Items) + { + m_items.Add(item); + } + + AdjustColumns(); + + } + #endregion + + #region Overridden Methods + /// + /// Handles a double click event. + /// + protected override void PickItems() + { + base.PickItems(); + ViewMI_Click(this, null); + } + + /// + /// Updates an item in the view. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + X509Certificate2 certificate = item as X509Certificate2; + + if (certificate == null) + { + base.UpdateItem(listItem, item); + return; + } + + listItem.SubItems[0].Text = null; + listItem.SubItems[1].Text = null; + listItem.SubItems[2].Text = null; + listItem.SubItems[3].Text = null; + listItem.SubItems[4].Text = null; + listItem.SubItems[5].Text = null; + + if (certificate != null) + { + List fields = X509Utils.ParseDistinguishedName(certificate.Subject); + + for (int ii = 0; ii < fields.Count; ii++) + { + if (fields[ii].StartsWith("CN=")) + { + listItem.SubItems[0].Text = fields[ii].Substring(3); + } + + if (fields[ii].StartsWith("DC=")) + { + listItem.SubItems[1].Text = fields[ii].Substring(3); + } + } + + if (String.IsNullOrEmpty(listItem.SubItems[0].Text)) + { + listItem.SubItems[0].Text = String.Format("{0}", certificate.Subject); + } + + // determine certificate type. + foreach (X509Extension extension in certificate.Extensions) + { + X509BasicConstraintsExtension basicContraints = extension as X509BasicConstraintsExtension; + + if (basicContraints != null) + { + if (basicContraints.CertificateAuthority) + { + listItem.SubItems[1].Text = "CA"; + } + else + { + listItem.SubItems[1].Text = "End-Entity"; + } + + break; + } + } + + // check if a private key is available. + if (certificate.HasPrivateKey) + { + listItem.SubItems[2].Text = "Yes"; + } + else + { + listItem.SubItems[2].Text = "No"; + } + + // look up domains. + IList domains = X509Utils.GetDomainsFromCertficate(certificate); + + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < domains.Count; ii++) + { + if (buffer.Length > 0) + { + buffer.Append(";"); + } + + buffer.Append(domains[ii]); + } + + listItem.SubItems[3].Text = buffer.ToString(); + listItem.SubItems[4].Text = X509Utils.GetApplicationUriFromCertificate(certificate); + listItem.SubItems[5].Text = String.Format("{0:yyyy-MM-dd}", certificate.NotAfter); + } + + listItem.ImageKey = GuiUtils.Icons.Certificate; + listItem.Tag = item; + } + + /// + /// Enables the menu items based on the current selection. + /// + protected override void EnableMenuItems(ListViewItem clickedItem) + { + base.EnableMenuItems(clickedItem); + + DeleteMI.Enabled = ItemsLV.SelectedItems.Count > 0; + + X509Certificate2 certificate = SelectedTag as X509Certificate2; + + if (certificate != null) + { + ViewMI.Enabled = true; + CopyMI.Enabled = true; + } + + IDataObject clipboardData = Clipboard.GetDataObject(); + + if (clipboardData.GetDataPresent(DataFormats.Text)) + { + PasteMI.Enabled = true; + } + } + #endregion + + private async void ViewMI_Click(object sender, EventArgs e) + { + try + { + X509Certificate2 certificate = SelectedTag as X509Certificate2; + + if (certificate != null) + { + CertificateIdentifier id = new CertificateIdentifier(); + id.Certificate = certificate; + + if (m_storeId != null) + { + id.StoreType = m_storeId.StoreType; + id.StorePath = m_storeId.StorePath; + } + + await new ViewCertificateDlg().ShowDialog(id); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private async void DeleteMI_Click(object sender, EventArgs e) + { + try + { + if (ItemsLV.SelectedItems.Count < 1) + { + return; + } + + DialogResult result = MessageBox.Show( + "Are you sure you wish to delete the certificates from the store?", + "Delete Certificate", + MessageBoxButtons.YesNo, + MessageBoxIcon.Exclamation); + + if (result != DialogResult.Yes) + { + return; + } + + // remove the certificates. + List itemsToDelete = new List(); + bool yesToAll = false; + + using (ICertificateStore store = m_storeId.OpenStore()) + { + for (int ii = 0; ii < ItemsLV.SelectedItems.Count; ii++) + { + X509Certificate2 certificate = ItemsLV.SelectedItems[ii].Tag as X509Certificate2; + + // check for private key. + X509Certificate2Collection certificate2 = await store.FindByThumbprint(certificate.Thumbprint); + + if (!yesToAll && (certificate2.Count > 0) && certificate2[0].HasPrivateKey) + { + StringBuilder buffer = new StringBuilder(); + buffer.Append("Certificate '"); + buffer.Append(certificate2[0].Subject); + buffer.Append("'"); + buffer.Append("Deleting it may cause applications to stop working."); + buffer.Append("\r\n"); + buffer.Append("\r\n"); + buffer.Append("Are you sure you wish to continue?."); + + DialogResult yesno = new YesNoDlg().ShowDialog(buffer.ToString(), "Delete Private Key", true); + + if (yesno == DialogResult.No) + { + continue; + } + + yesToAll = yesno == DialogResult.Retry; + } + + if (certificate != null) + { + await store.Delete(certificate.Thumbprint); + itemsToDelete.Add(ItemsLV.SelectedItems[ii]); + } + } + } + + // remove the items. + foreach (ListViewItem itemToDelete in itemsToDelete) + { + itemToDelete.Remove(); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + await Initialize(m_storeId, m_thumbprints); + } + } + + private void CopyMI_Click(object sender, EventArgs e) + { + try + { + X509Certificate2 certificate = SelectedTag as X509Certificate2; + + if (certificate == null) + { + return; + } + + StringBuilder builder = new StringBuilder(); + XmlWriter writer = XmlWriter.Create(builder); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(CertificateIdentifier)); + CertificateIdentifier id = new CertificateIdentifier(); + id.Certificate = certificate; + serializer.WriteObject(writer, id); + } + finally + { + writer.Close(); + } + + ClipboardHack.SetData(DataFormats.Text, builder.ToString()); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void PasteMI_Click(object sender, EventArgs e) + { + try + { + string xml = (string)ClipboardHack.GetData(DataFormats.Text); + + if (String.IsNullOrEmpty(xml)) + { + return; + } + + // deserialize the data. + CertificateIdentifier id = null; + + using (XmlTextReader reader = new XmlTextReader(new StringReader(xml))) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(CertificateIdentifier)); + id = (CertificateIdentifier)serializer.ReadObject(reader, false); + } + + if (id.Certificate != null) + { + using (ICertificateStore store = m_storeId.OpenStore()) + { + store.Add(id.Certificate); + } + + AddItem(id.Certificate); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.Designer.cs new file mode 100644 index 00000000..bd5a3426 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.Designer.cs @@ -0,0 +1,371 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.FilterBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.StoreGB = new System.Windows.Forms.GroupBox(); + this.CertificateStoreCTRL = new Opc.Ua.Client.Controls.CertificateStoreCtrl(); + this.FiltersGB = new System.Windows.Forms.GroupBox(); + this.PrivateKeyCK = new System.Windows.Forms.CheckBox(); + this.PrivateKeyLB = new System.Windows.Forms.Label(); + this.IssuerNameTB = new System.Windows.Forms.TextBox(); + this.DomainTB = new System.Windows.Forms.TextBox(); + this.SubjectNameTB = new System.Windows.Forms.TextBox(); + this.IssuedCK = new System.Windows.Forms.CheckBox(); + this.SelfSignedCK = new System.Windows.Forms.CheckBox(); + this.CertificateAuthorityCK = new System.Windows.Forms.CheckBox(); + this.ApplicationCK = new System.Windows.Forms.CheckBox(); + this.CertificateTypeLB = new System.Windows.Forms.Label(); + this.IssuerNameLB = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SubjectNameLB = new System.Windows.Forms.Label(); + this.CertificatesCTRL = new Opc.Ua.Client.Controls.CertificateListCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.StoreGB.SuspendLayout(); + this.FiltersGB.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 625); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(927, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(848, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // FilterBTN + // + this.FilterBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.FilterBTN.Location = new System.Drawing.Point(834, 112); + this.FilterBTN.Name = "FilterBTN"; + this.FilterBTN.Size = new System.Drawing.Size(75, 23); + this.FilterBTN.TabIndex = 13; + this.FilterBTN.Text = "Filter"; + this.FilterBTN.UseVisualStyleBackColor = true; + this.FilterBTN.Click += new System.EventHandler(this.FilterBTN_Click); + // + // MainPN + // + this.MainPN.Controls.Add(this.StoreGB); + this.MainPN.Controls.Add(this.FiltersGB); + this.MainPN.Controls.Add(this.CertificatesCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.MainPN.Size = new System.Drawing.Size(927, 625); + this.MainPN.TabIndex = 1; + // + // StoreGB + // + this.StoreGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StoreGB.Controls.Add(this.CertificateStoreCTRL); + this.StoreGB.Location = new System.Drawing.Point(6, 6); + this.StoreGB.Name = "StoreGB"; + this.StoreGB.Size = new System.Drawing.Size(915, 73); + this.StoreGB.TabIndex = 0; + this.StoreGB.TabStop = false; + this.StoreGB.Text = "Location"; + // + // CertificateStoreCTRL + // + this.CertificateStoreCTRL.LabelWidth = 90; + this.CertificateStoreCTRL.Location = new System.Drawing.Point(10, 19); + this.CertificateStoreCTRL.MinimumSize = new System.Drawing.Size(300, 51); + this.CertificateStoreCTRL.Name = "CertificateStoreCTRL"; + this.CertificateStoreCTRL.ReadOnly = true; + this.CertificateStoreCTRL.Size = new System.Drawing.Size(899, 51); + this.CertificateStoreCTRL.StorePath = "X:\\OPC\\Source\\UA311\\Source\\Utilities\\CertificateGenerator"; + this.CertificateStoreCTRL.TabIndex = 0; + this.CertificateStoreCTRL.StoreChanged += new System.EventHandler(this.CertificateStoreCTRL_StoreChanged); + // + // FiltersGB + // + this.FiltersGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FiltersGB.Controls.Add(this.FilterBTN); + this.FiltersGB.Controls.Add(this.PrivateKeyCK); + this.FiltersGB.Controls.Add(this.PrivateKeyLB); + this.FiltersGB.Controls.Add(this.IssuerNameTB); + this.FiltersGB.Controls.Add(this.DomainTB); + this.FiltersGB.Controls.Add(this.SubjectNameTB); + this.FiltersGB.Controls.Add(this.IssuedCK); + this.FiltersGB.Controls.Add(this.SelfSignedCK); + this.FiltersGB.Controls.Add(this.CertificateAuthorityCK); + this.FiltersGB.Controls.Add(this.ApplicationCK); + this.FiltersGB.Controls.Add(this.CertificateTypeLB); + this.FiltersGB.Controls.Add(this.IssuerNameLB); + this.FiltersGB.Controls.Add(this.label2); + this.FiltersGB.Controls.Add(this.SubjectNameLB); + this.FiltersGB.Location = new System.Drawing.Point(6, 77); + this.FiltersGB.Name = "FiltersGB"; + this.FiltersGB.Size = new System.Drawing.Size(915, 141); + this.FiltersGB.TabIndex = 1; + this.FiltersGB.TabStop = false; + this.FiltersGB.Text = "Filters"; + // + // PrivateKeyCK + // + this.PrivateKeyCK.AutoSize = true; + this.PrivateKeyCK.Location = new System.Drawing.Point(100, 117); + this.PrivateKeyCK.Name = "PrivateKeyCK"; + this.PrivateKeyCK.Size = new System.Drawing.Size(15, 14); + this.PrivateKeyCK.TabIndex = 12; + this.PrivateKeyCK.UseVisualStyleBackColor = true; + // + // PrivateKeyLB + // + this.PrivateKeyLB.AutoSize = true; + this.PrivateKeyLB.Location = new System.Drawing.Point(7, 117); + this.PrivateKeyLB.Name = "PrivateKeyLB"; + this.PrivateKeyLB.Size = new System.Drawing.Size(83, 13); + this.PrivateKeyLB.TabIndex = 11; + this.PrivateKeyLB.Text = "Has Private Key"; + // + // IssuerNameTB + // + this.IssuerNameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.IssuerNameTB.Location = new System.Drawing.Point(100, 66); + this.IssuerNameTB.Name = "IssuerNameTB"; + this.IssuerNameTB.Size = new System.Drawing.Size(809, 20); + this.IssuerNameTB.TabIndex = 5; + // + // DomainTB + // + this.DomainTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DomainTB.Location = new System.Drawing.Point(100, 42); + this.DomainTB.Name = "DomainTB"; + this.DomainTB.Size = new System.Drawing.Size(809, 20); + this.DomainTB.TabIndex = 3; + // + // SubjectNameTB + // + this.SubjectNameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SubjectNameTB.Location = new System.Drawing.Point(100, 18); + this.SubjectNameTB.Name = "SubjectNameTB"; + this.SubjectNameTB.Size = new System.Drawing.Size(809, 20); + this.SubjectNameTB.TabIndex = 1; + // + // IssuedCK + // + this.IssuedCK.AutoSize = true; + this.IssuedCK.Location = new System.Drawing.Point(391, 92); + this.IssuedCK.Name = "IssuedCK"; + this.IssuedCK.Size = new System.Drawing.Size(88, 17); + this.IssuedCK.TabIndex = 10; + this.IssuedCK.Text = "Issued by CA"; + this.IssuedCK.UseVisualStyleBackColor = true; + // + // SelfSignedCK + // + this.SelfSignedCK.AutoSize = true; + this.SelfSignedCK.Location = new System.Drawing.Point(307, 92); + this.SelfSignedCK.Name = "SelfSignedCK"; + this.SelfSignedCK.Size = new System.Drawing.Size(78, 17); + this.SelfSignedCK.TabIndex = 9; + this.SelfSignedCK.Text = "Self-signed"; + this.SelfSignedCK.UseVisualStyleBackColor = true; + // + // CertificateAuthorityCK + // + this.CertificateAuthorityCK.AutoSize = true; + this.CertificateAuthorityCK.Location = new System.Drawing.Point(184, 92); + this.CertificateAuthorityCK.Name = "CertificateAuthorityCK"; + this.CertificateAuthorityCK.Size = new System.Drawing.Size(117, 17); + this.CertificateAuthorityCK.TabIndex = 8; + this.CertificateAuthorityCK.Text = "Certificate Authority"; + this.CertificateAuthorityCK.UseVisualStyleBackColor = true; + // + // ApplicationCK + // + this.ApplicationCK.AutoSize = true; + this.ApplicationCK.Location = new System.Drawing.Point(100, 92); + this.ApplicationCK.Name = "ApplicationCK"; + this.ApplicationCK.Size = new System.Drawing.Size(78, 17); + this.ApplicationCK.TabIndex = 7; + this.ApplicationCK.Text = "Application"; + this.ApplicationCK.UseVisualStyleBackColor = true; + // + // CertificateTypeLB + // + this.CertificateTypeLB.AutoSize = true; + this.CertificateTypeLB.Location = new System.Drawing.Point(7, 93); + this.CertificateTypeLB.Name = "CertificateTypeLB"; + this.CertificateTypeLB.Size = new System.Drawing.Size(81, 13); + this.CertificateTypeLB.TabIndex = 6; + this.CertificateTypeLB.Text = "Certificate Type"; + // + // IssuerNameLB + // + this.IssuerNameLB.AutoSize = true; + this.IssuerNameLB.Location = new System.Drawing.Point(7, 69); + this.IssuerNameLB.Name = "IssuerNameLB"; + this.IssuerNameLB.Size = new System.Drawing.Size(66, 13); + this.IssuerNameLB.TabIndex = 4; + this.IssuerNameLB.Text = "Issuer Name"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(7, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(43, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Domain"; + // + // SubjectNameLB + // + this.SubjectNameLB.AutoSize = true; + this.SubjectNameLB.Location = new System.Drawing.Point(7, 21); + this.SubjectNameLB.Name = "SubjectNameLB"; + this.SubjectNameLB.Size = new System.Drawing.Size(74, 13); + this.SubjectNameLB.TabIndex = 0; + this.SubjectNameLB.Text = "Subject Name"; + // + // CertificatesCTRL + // + this.CertificatesCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CertificatesCTRL.Instructions = null; + this.CertificatesCTRL.Location = new System.Drawing.Point(6, 224); + this.CertificatesCTRL.Name = "CertificatesCTRL"; + this.CertificatesCTRL.Size = new System.Drawing.Size(915, 398); + this.CertificatesCTRL.TabIndex = 2; + this.CertificatesCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.CertificatesCTRL_ItemsSelected); + // + // CertificateListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(927, 656); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "CertificateListDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Manage Certificates in Certificate Store"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.StoreGB.ResumeLayout(false); + this.FiltersGB.ResumeLayout(false); + this.FiltersGB.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private CertificateListCtrl CertificatesCTRL; + private System.Windows.Forms.Label SubjectNameLB; + private System.Windows.Forms.GroupBox FiltersGB; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label CertificateTypeLB; + private System.Windows.Forms.Label IssuerNameLB; + private System.Windows.Forms.TextBox IssuerNameTB; + private System.Windows.Forms.TextBox DomainTB; + private System.Windows.Forms.TextBox SubjectNameTB; + private System.Windows.Forms.CheckBox IssuedCK; + private System.Windows.Forms.CheckBox SelfSignedCK; + private System.Windows.Forms.CheckBox CertificateAuthorityCK; + private System.Windows.Forms.CheckBox ApplicationCK; + private System.Windows.Forms.Button FilterBTN; + private System.Windows.Forms.CheckBox PrivateKeyCK; + private System.Windows.Forms.Label PrivateKeyLB; + private System.Windows.Forms.GroupBox StoreGB; + private CertificateStoreCtrl CertificateStoreCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.cs new file mode 100644 index 00000000..f6d3ae7a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.cs @@ -0,0 +1,172 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.IO; +using System.Threading.Tasks; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of certificates. + /// + public partial class CertificateListDlg : Form + { + /// + /// Contructs the object. + /// + public CertificateListDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + + /// + /// Displays the dialog. + /// + public CertificateIdentifier ShowDialog(CertificateStoreIdentifier store, bool allowStoreChange) + { + CertificateStoreCTRL.StoreType = CertificateStoreType.Directory; + CertificateStoreCTRL.StorePath = String.Empty; + CertificateStoreCTRL.ReadOnly = !allowStoreChange; + CertificatesCTRL.Initialize(null); + OkBTN.Enabled = false; + + if (store != null) + { + CertificateStoreCTRL.StoreType = store.StoreType; + CertificateStoreCTRL.StorePath = store.StorePath; + } + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + CertificateIdentifier id = new CertificateIdentifier(); + id.StoreType = CertificateStoreCTRL.StoreType; + id.StorePath = CertificateStoreCTRL.StorePath; + id.Certificate = CertificatesCTRL.SelectedCertificate; + return id; + } + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void FilterBTN_Click(object sender, EventArgs e) + { + try + { + CertificateListFilter filter = new CertificateListFilter(); + filter.SubjectName = SubjectNameTB.Text.Trim(); + filter.IssuerName = IssuerNameTB.Text.Trim(); + filter.Domain = DomainTB.Text.Trim(); + filter.PrivateKey = PrivateKeyCK.Checked; + + List types = new List(); + + if (ApplicationCK.Checked) + { + types.Add(CertificateListFilterType.Application); + } + + if (CertificateAuthorityCK.Checked) + { + types.Add(CertificateListFilterType.CA); + } + + if (SelfSignedCK.Checked) + { + types.Add(CertificateListFilterType.SelfSigned); + } + + if (IssuedCK.Checked) + { + types.Add(CertificateListFilterType.Issued); + } + + if (types.Count > 0) + { + filter.CertificateTypes = types.ToArray(); + } + + CertificatesCTRL.SetFilter(filter); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void CertificatesCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + OkBTN.Enabled = e.Items.Count == 1; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void CertificateStoreCTRL_StoreChanged(object sender, EventArgs e) + { + try + { + CertificateStoreIdentifier store = new CertificateStoreIdentifier(); + store.StoreType = CertificateStoreCTRL.StoreType; + store.StorePath = CertificateStoreCTRL.StorePath; + CertificatesCTRL.Initialize(store, null).Wait(); + + FilterBTN_Click(sender, e); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListFilter.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListFilter.cs new file mode 100644 index 00000000..35ec3f01 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateListFilter.cs @@ -0,0 +1,262 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A filter that can be applied to a list of certificates. + /// + public class CertificateListFilter + { + #region Public Properties + /// + /// Gets or sets the subject name filter. + /// + /// The subject name filter. + public string SubjectName + { + get { return m_subjectName; } + set { m_subjectName = value; } + } + + /// + /// Gets or sets the issuer name filter. + /// + /// The issuer name filter. + public string IssuerName + { + get { return m_issuerName; } + set { m_issuerName = value; } + } + + /// + /// Gets or sets the domain name filter. + /// + /// The issuer domain filter. + public string Domain + { + get { return m_domain; } + set { m_domain = value; } + } + + /// + /// Gets or sets the certificate type filter. + /// + /// The issuer certificate type filter. + public CertificateListFilterType[] CertificateTypes + { + get { return m_certificateTypes; } + set { m_certificateTypes = value; } + } + + /// + /// Gets or sets a value indicating whether the private key filter. + /// + /// true if the private key filter is turned on; otherwise, false. + public bool PrivateKey + { + get { return m_privateKey; } + set { m_privateKey = value; } + } + #endregion + + #region Public Methods + /// + /// Checks if the certicate meets the filter criteria. + /// + /// The certificate. + /// True if it meets the criteria. + public bool Match(X509Certificate2 certificate) + { + if (certificate == null) + { + return false; + } + + try + { + if (!String.IsNullOrEmpty(m_subjectName)) + { + if (!Utils.Match(certificate.Subject, "CN*" + m_subjectName + ",*", false)) + { + return false; + } + } + + if (!String.IsNullOrEmpty(m_issuerName)) + { + if (!Utils.Match(certificate.Issuer, "CN*" + m_issuerName + ",*", false)) + { + return false; + } + } + + if (!String.IsNullOrEmpty(m_domain)) + { + IList domains = X509Utils.GetDomainsFromCertficate(certificate); + + bool found = false; + + for (int ii = 0; ii < domains.Count; ii++) + { + if (Utils.Match(domains[ii], m_domain, false)) + { + found = true; + break; + } + } + + if (!found) + { + return false; + } + } + + // check for private key. + if (m_privateKey) + { + if (!certificate.HasPrivateKey) + { + return false; + } + } + + if (m_certificateTypes != null) + { + // determine if a CA certificate. + bool isCA = X509Utils.IsCertificateAuthority(certificate); + + // determine if self-signed. + bool isSelfSigned = X509Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer); + + // match if one or more of the criteria match. + bool found = false; + + for (int ii = 0; ii < m_certificateTypes.Length; ii++) + { + switch (m_certificateTypes[ii]) + { + case CertificateListFilterType.Application: + { + if (!isCA) + { + found = true; + } + + break; + } + + case CertificateListFilterType.CA: + { + if (isCA) + { + found = true; + } + + break; + } + + case CertificateListFilterType.SelfSigned: + { + if (isSelfSigned) + { + found = true; + } + + break; + } + + case CertificateListFilterType.Issued: + { + if (!isSelfSigned) + { + found = true; + } + + break; + } + } + } + + if (!found) + { + return false; + } + } + + return true; + } + catch (Exception) + { + return false; + } + } + #endregion + + #region Private Fields + private string m_subjectName; + private string m_issuerName; + private string m_domain; + private CertificateListFilterType[] m_certificateTypes; + private bool m_privateKey; + #endregion + } + + /// + /// The available certificate filter types. + /// + public enum CertificateListFilterType + { + /// + /// The certificate is an application instance certificate. + /// + Application, + + /// + /// The certificate is an certificate authority certificate. + /// + CA, + + /// + /// The certificate is self-signed. + /// + SelfSigned, + + /// + /// The certificate was issued by a certificate authority. + /// + Issued + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificatePropertiesListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificatePropertiesListCtrl.Designer.cs new file mode 100644 index 00000000..bc17f303 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificatePropertiesListCtrl.Designer.cs @@ -0,0 +1,65 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificatePropertiesListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificatePropertiesListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificatePropertiesListCtrl.cs new file mode 100644 index 00000000..0d2c682d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificatePropertiesListCtrl.cs @@ -0,0 +1,279 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using Opc.Ua.Configuration; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays the properties for an X509 certificate. + /// + public partial class CertificatePropertiesListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public CertificatePropertiesListCtrl() + { + InitializeComponent(); + + SetColumns(m_ColumnNames); + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Field", HorizontalAlignment.Left, null }, + new object[] { "Value", HorizontalAlignment.Left, null }, + }; + #endregion + + #region FieldInfo Class + private class FieldInfo + { + public string Name; + public string Value; + + public FieldInfo(string name, object value) + { + Name = name; + Value = Utils.Format("{0}", value); + } + } + #endregion + + #region Public Interface + /// + /// Removes all items in the list. + /// + internal void Clear() + { + ItemsLV.Items.Clear(); + Instructions = String.Empty; + AdjustColumns(); + } + + /// + /// Displays the properties of a certificate. + /// + internal void Initialize(X509Certificate2 certificate) + { + ItemsLV.Items.Clear(); + + if (certificate == null) + { + Instructions = "No certificate properties to display"; + AdjustColumns(); + return; + } + + AddItem(new FieldInfo("Version", certificate.Version)); + AddItem(new FieldInfo("Subject", certificate.Subject)); + AddItem(new FieldInfo("FriendlyName", certificate.FriendlyName)); + AddItem(new FieldInfo("Thumbprint", certificate.Thumbprint)); + AddItem(new FieldInfo("Issuer", certificate.Issuer)); + AddItem(new FieldInfo("SerialNumber", certificate.SerialNumber)); + AddItem(new FieldInfo("NotBefore", Utils.Format("{0:yyyy-MM-dd}", certificate.NotBefore))); + AddItem(new FieldInfo("NotAfter", Utils.Format("{0:yyyy-MM-dd}", certificate.NotAfter))); + AddItem(new FieldInfo("KeySize", certificate.PublicKey.Key.KeySize)); + AddItem(new FieldInfo("KeyExchangeAlgorithm", certificate.PublicKey.Key.KeyExchangeAlgorithm)); + AddItem(new FieldInfo("SignatureAlgorithm", certificate.SignatureAlgorithm.FriendlyName)); + + foreach (X509Extension extension in certificate.Extensions) + { + X509BasicConstraintsExtension basicContraints = extension as X509BasicConstraintsExtension; + + if (basicContraints != null) + { + StringBuilder buffer = new StringBuilder(); + + if (basicContraints.CertificateAuthority) + { + buffer.Append("CA"); + } + else + { + buffer.Append("End Entity"); + } + + if (basicContraints.HasPathLengthConstraint) + { + buffer.AppendFormat(", PathLength={0}", basicContraints.PathLengthConstraint); + } + + AddItem(new FieldInfo("BasicConstraints", buffer.ToString())); + continue; + } + + X509KeyUsageExtension keyUsage = extension as X509KeyUsageExtension; + + if (keyUsage != null) + { + StringBuilder buffer = new StringBuilder(); + + foreach (X509KeyUsageFlags usageFlag in Enum.GetValues(typeof(X509KeyUsageFlags))) + { + if ((keyUsage.KeyUsages & usageFlag) != 0) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + buffer.AppendFormat("{0}", usageFlag); + } + } + + AddItem(new FieldInfo("KeyUsage", buffer.ToString())); + continue; + } + + X509EnhancedKeyUsageExtension enhancedKeyUsage = extension as X509EnhancedKeyUsageExtension; + + if (enhancedKeyUsage != null) + { + StringBuilder buffer = new StringBuilder(); + + foreach (Oid usageOid in enhancedKeyUsage.EnhancedKeyUsages) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + if (!String.IsNullOrEmpty(usageOid.FriendlyName)) + { + buffer.AppendFormat("{0}", usageOid.FriendlyName); + } + else + { + buffer.AppendFormat("{0}", usageOid.Value); + } + } + + AddItem(new FieldInfo("EnhancedKeyUsage", buffer.ToString())); + continue; + } + + X509SubjectKeyIdentifierExtension subjectKeyId = extension as X509SubjectKeyIdentifierExtension; + + if (subjectKeyId != null) + { + AddItem(new FieldInfo("SubjectKeyIdentifier", subjectKeyId.SubjectKeyIdentifier)); + continue; + } + + if (extension.Oid.Value == X509SubjectAltNameExtension.SubjectAltNameOid || extension.Oid.Value == X509SubjectAltNameExtension.SubjectAltName2Oid) + { + X509SubjectAltNameExtension alternateName = new X509SubjectAltNameExtension(extension, extension.Critical); + AddItem(new FieldInfo("SubjectAlternateName", alternateName.Format(false))); + continue; + } + + if (extension.Oid.Value == X509AuthorityKeyIdentifierExtension.AuthorityKeyIdentifier2Oid) + { + X509AuthorityKeyIdentifierExtension keyId = new X509AuthorityKeyIdentifierExtension(extension, extension.Critical); + AddItem(new FieldInfo("AuthorityKeyIdentifier", keyId.Format(false))); + continue; + } + + string name = extension.Oid.FriendlyName; + + if (String.IsNullOrEmpty(name)) + { + name = extension.Oid.Value; + } + + string value = Utils.ToHexString(extension.RawData); + + AddItem(new FieldInfo(name, value)); + } + + AdjustColumns(); + } + + /// + /// Displays the properties of a certificate. + /// + internal void Initialize(Opc.Ua.Security.SecuredApplication application) + { + ItemsLV.Items.Clear(); + + if (application == null) + { + Instructions = "No application properties to display"; + AdjustColumns(); + return; + } + + AddItem(new FieldInfo("ApplicationName", application.ApplicationName)); + AddItem(new FieldInfo("ApplicationUri", application.ApplicationUri)); + AddItem(new FieldInfo("ProductName", application.ProductName)); + AddItem(new FieldInfo("ApplicationType", application.ApplicationType)); + AddItem(new FieldInfo("ConfigurationFile", application.ConfigurationFile)); + AddItem(new FieldInfo("ExecutableFile", application.ExecutableFile)); + + AdjustColumns(); + } + #endregion + + #region Overridden Methods + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + FieldInfo info = item as FieldInfo; + + if (info == null) + { + base.UpdateItem(listItem, item); + return; + } + + listItem.SubItems[0].Text = String.Format("{0}", info.Name); + listItem.SubItems[1].Text = String.Format("{0}", info.Value); + + listItem.Tag = item; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.Designer.cs new file mode 100644 index 00000000..e9483b06 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.Designer.cs @@ -0,0 +1,169 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateStoreCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.StorePathCB = new System.Windows.Forms.ComboBox(); + this.BrowseBTN = new System.Windows.Forms.Button(); + this.StoreTypeCB = new System.Windows.Forms.ComboBox(); + this.StoreTypeLB = new System.Windows.Forms.Label(); + this.StorePathLB = new System.Windows.Forms.Label(); + this.LeftPN = new System.Windows.Forms.Panel(); + this.RightPN = new System.Windows.Forms.Panel(); + this.LeftPN.SuspendLayout(); + this.RightPN.SuspendLayout(); + this.SuspendLayout(); + // + // StorePathCB + // + this.StorePathCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StorePathCB.FormattingEnabled = true; + this.StorePathCB.Location = new System.Drawing.Point(0, 27); + this.StorePathCB.Name = "StorePathCB"; + this.StorePathCB.Size = new System.Drawing.Size(221, 21); + this.StorePathCB.TabIndex = 1; + this.StorePathCB.SelectedIndexChanged += new System.EventHandler(this.StorePathCB_SelectedIndexChanged); + this.StorePathCB.DropDown += new System.EventHandler(this.StorePathCB_DropDown); + this.StorePathCB.TextChanged += new System.EventHandler(this.StorePathCB_TextChanged); + // + // BrowseBTN + // + this.BrowseBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BrowseBTN.Location = new System.Drawing.Point(227, 26); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(75, 23); + this.BrowseBTN.TabIndex = 2; + this.BrowseBTN.Text = "Browse..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseStoreBTN_Click); + // + // StoreTypeCB + // + this.StoreTypeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.StoreTypeCB.FormattingEnabled = true; + this.StoreTypeCB.Location = new System.Drawing.Point(0, 0); + this.StoreTypeCB.Name = "StoreTypeCB"; + this.StoreTypeCB.Size = new System.Drawing.Size(111, 21); + this.StoreTypeCB.TabIndex = 0; + this.StoreTypeCB.SelectedIndexChanged += new System.EventHandler(this.StoreTypeCB_SelectedIndexChanged); + // + // StoreTypeLB + // + this.StoreTypeLB.AutoSize = true; + this.StoreTypeLB.Location = new System.Drawing.Point(0, 3); + this.StoreTypeLB.Name = "StoreTypeLB"; + this.StoreTypeLB.Size = new System.Drawing.Size(59, 13); + this.StoreTypeLB.TabIndex = 0; + this.StoreTypeLB.Text = "Store Type"; + // + // StorePathLB + // + this.StorePathLB.AutoSize = true; + this.StorePathLB.Location = new System.Drawing.Point(0, 30); + this.StorePathLB.Name = "StorePathLB"; + this.StorePathLB.Size = new System.Drawing.Size(57, 13); + this.StorePathLB.TabIndex = 1; + this.StorePathLB.Text = "Store Path"; + // + // LeftPN + // + this.LeftPN.Controls.Add(this.StorePathLB); + this.LeftPN.Controls.Add(this.StoreTypeLB); + this.LeftPN.Dock = System.Windows.Forms.DockStyle.Left; + this.LeftPN.Location = new System.Drawing.Point(0, 0); + this.LeftPN.Name = "LeftPN"; + this.LeftPN.Size = new System.Drawing.Size(75, 51); + this.LeftPN.TabIndex = 0; + // + // RightPN + // + this.RightPN.Controls.Add(this.StoreTypeCB); + this.RightPN.Controls.Add(this.StorePathCB); + this.RightPN.Controls.Add(this.BrowseBTN); + this.RightPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.RightPN.Location = new System.Drawing.Point(75, 0); + this.RightPN.Name = "RightPN"; + this.RightPN.Size = new System.Drawing.Size(302, 51); + this.RightPN.TabIndex = 9; + // + // CertificateStoreCtrl + // + this.Controls.Add(this.RightPN); + this.Controls.Add(this.LeftPN); + this.MinimumSize = new System.Drawing.Size(300, 51); + this.Name = "CertificateStoreCtrl"; + this.Size = new System.Drawing.Size(377, 51); + this.LeftPN.ResumeLayout(false); + this.LeftPN.PerformLayout(); + this.RightPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox StorePathCB; + private System.Windows.Forms.Button BrowseBTN; + private System.Windows.Forms.ComboBox StoreTypeCB; + private System.Windows.Forms.Label StoreTypeLB; + private System.Windows.Forms.Label StorePathLB; + private System.Windows.Forms.Panel LeftPN; + private System.Windows.Forms.Panel RightPN; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.cs new file mode 100644 index 00000000..4f1c02cb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.cs @@ -0,0 +1,345 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Security.Cryptography.X509Certificates; +using System.Reflection; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows a user to specify a certificate store. + /// + public partial class CertificateStoreCtrl : UserControl + { + #region Constructors + /// + /// Constructs the object. + /// + public CertificateStoreCtrl() + { + InitializeComponent(); + + StoreTypeCB.Items.Add(CertificateStoreType.Directory); + StoreTypeCB.Items.Add(CertificateStoreType.X509Store); + StoreTypeCB.SelectedIndex = 0; + } + #endregion + + #region Private Fields + private event EventHandler m_StoreChanged; + #endregion + + #region Public Interface + /// + /// Raised when the certificate store is changed in the control. + /// + public event EventHandler StoreChanged + { + add { m_StoreChanged += value; } + remove { m_StoreChanged -= value; } + } + + /// + /// The width of the label in the control. + /// + [DefaultValue(75)] + public int LabelWidth + { + get + { + return LeftPN.Width; + } + + set + { + LeftPN.Width = value; + } + } + + /// + /// Whether the control is read-only. + /// + [DefaultValue(false)] + public bool ReadOnly + { + get + { + return !StoreTypeCB.Enabled; + } + + set + { + StoreTypeCB.Enabled = !value; + StorePathCB.Enabled = !value; + BrowseBTN.Enabled = !value; + } + } + + /// + /// The type of certificate store. + /// + [DefaultValue(Utils.DefaultStoreType)] + public string StoreType + { + get + { + return StoreTypeCB.SelectedItem as string; + } + + set + { + if (value == null || StoreTypeCB.FindStringExact(value) == -1) + { + StoreTypeCB.SelectedIndex = 0; + return; + } + + StoreTypeCB.SelectedItem = value; + } + } + + /// + /// The path to the certificate store. + /// + public string StorePath + { + get + { + if (StorePathCB.SelectedItem == null) + { + return StorePathCB.Text; + } + + return StorePathCB.SelectedItem as string; + } + + set + { + StorePathCB.SelectedIndex = -1; + StorePathCB.Text = value; + } + } + #endregion + + #region Private Methods + private List GetListOfStores(string storeType) + { + List stores = new List(); + + if (CertificateStoreType.Directory == storeType) + { + stores.Add(Path.DirectorySeparatorChar + "OPC Foundation" + Path.DirectorySeparatorChar + "CertificateStores" + Path.DirectorySeparatorChar + "MachineDefault"); + stores.Add(Path.DirectorySeparatorChar + "OPC Foundation" + Path.DirectorySeparatorChar + "CertificateStores" + Path.DirectorySeparatorChar + "UA Applications"); + stores.Add(Path.DirectorySeparatorChar + "OPC Foundation" + Path.DirectorySeparatorChar + "CertificateStores" + Path.DirectorySeparatorChar + "UA Certificate Authorities"); + stores.Add(Path.DirectorySeparatorChar + "OPC Foundation" + Path.DirectorySeparatorChar + "CertificateStores" + Path.DirectorySeparatorChar + "RejectedCertificates"); + } + + if (CertificateStoreType.X509Store == storeType) + { + stores.Add("CurrentUser\\UA_MachineDefault"); + stores.Add("CurrentUser\\UA_Applications"); + stores.Add("CurrentUser\\UA_Certificate_Authorities"); + } + + return stores; + } + #endregion + + #region Event Handlers + /// + /// Populates the drop down with the recent file list. + /// + private void StorePathCB_DropDown(object sender, EventArgs e) + { + try + { + StorePathCB.Items.Clear(); + + foreach (string storePath in GetListOfStores(StoreTypeCB.SelectedItem as string)) + { + // ignore duplicates. + bool found = false; + + foreach (string item in StorePathCB.Items) + { + if (String.Compare(storePath, item, StringComparison.OrdinalIgnoreCase) == 0) + { + found = true; + break; + } + } + + // add list. + if (!found) + { + StorePathCB.Items.Add(storePath); + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + /// + /// Browses for new stores to manage. + /// + private void BrowseStoreBTN_Click(object sender, EventArgs e) + { + try + { + string storeType = StoreTypeCB.SelectedItem as string; + string storePath = null; + + if (storeType == CertificateStoreType.Directory) + { + FolderBrowserDialog dialog = new FolderBrowserDialog(); + + dialog.Description = "Select Certificate Store Directory"; + dialog.RootFolder = Environment.SpecialFolder.MyComputer; + dialog.ShowNewFolderButton = true; + + if (dialog.ShowDialog() != DialogResult.OK) + { + return; + } + + storePath = dialog.SelectedPath; + } + + if (storeType == CertificateStoreType.X509Store) + { + CertificateStoreIdentifier store = new CertificateStoreTreeDlg().ShowDialog(null); + + if (store == null) + { + return; + } + + storePath = store.StorePath; + } + + if (String.IsNullOrEmpty(storePath)) + { + return; + } + + bool found = false; + + for (int ii = 0; ii < StorePathCB.Items.Count; ii++) + { + if (String.Compare(storePath, StorePathCB.Items[ii] as string, StringComparison.OrdinalIgnoreCase) == 0) + { + StorePathCB.SelectedIndex = ii; + found = true; + break; + } + } + + if (!found) + { + StorePathCB.SelectedIndex = StorePathCB.Items.Add(storePath); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void StoreTypeCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + StorePathCB_DropDown(sender, e); + + if (StorePathCB.Items.Count > 0) + { + StorePathCB.SelectedIndex = 0; + } + + if (m_StoreChanged != null) + { + m_StoreChanged(null, e); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void StorePathCB_TextChanged(object sender, EventArgs e) + { + try + { + if (m_StoreChanged != null) + { + m_StoreChanged(null, e); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + + } + + private void StorePathCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + CertificateStoreIdentifier store = new CertificateStoreIdentifier(); + store.StoreType = StoreTypeCB.SelectedItem as string; + store.StorePath = StorePathCB.Text; + + if (StorePathCB.SelectedIndex != -1) + { + store.StorePath = StorePathCB.SelectedItem as string; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.Designer.cs new file mode 100644 index 00000000..23e9642f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.Designer.cs @@ -0,0 +1,163 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateStoreDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.ViewBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.CertificateStoreCTRL = new Opc.Ua.Client.Controls.CertificateStoreCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.ViewBTN); + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 59); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(618, 31); + this.ButtonsPN.TabIndex = 0; + // + // ViewBTN + // + this.ViewBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.ViewBTN.Location = new System.Drawing.Point(272, 4); + this.ViewBTN.Name = "ViewBTN"; + this.ViewBTN.Size = new System.Drawing.Size(75, 23); + this.ViewBTN.TabIndex = 2; + this.ViewBTN.Text = "View..."; + this.ViewBTN.UseVisualStyleBackColor = true; + this.ViewBTN.Click += new System.EventHandler(this.ViewBTN_Click); + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(539, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.CertificateStoreCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.MainPN.Size = new System.Drawing.Size(618, 59); + this.MainPN.TabIndex = 1; + // + // CertificateStoreCTRL + // + this.CertificateStoreCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CertificateStoreCTRL.Location = new System.Drawing.Point(6, 6); + this.CertificateStoreCTRL.MinimumSize = new System.Drawing.Size(300, 51); + this.CertificateStoreCTRL.Name = "CertificateStoreCTRL"; + this.CertificateStoreCTRL.Size = new System.Drawing.Size(608, 51); + this.CertificateStoreCTRL.StorePath = "X:\\OPC\\Source\\UA311\\Source\\Utilities\\CertificateGenerator"; + this.CertificateStoreCTRL.TabIndex = 0; + // + // CertificateStoreDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(618, 90); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "CertificateStoreDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select Certificate Store"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private CertificateStoreCtrl CertificateStoreCTRL; + private System.Windows.Forms.Button ViewBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.cs new file mode 100644 index 00000000..33292dc1 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.cs @@ -0,0 +1,107 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to choose a certificate store. + /// + public partial class CertificateStoreDlg : Form + { + /// + /// Contructs the object. + /// + public CertificateStoreDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + + /// + /// Displays the dialog. + /// + public CertificateStoreIdentifier ShowDialog(CertificateStoreIdentifier store) + { + CertificateStoreCTRL.StoreType = CertificateStoreType.Directory; + CertificateStoreCTRL.StorePath = null; + + if (store != null) + { + CertificateStoreCTRL.StoreType = store.StoreType; + CertificateStoreCTRL.StorePath = store.StorePath; + } + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + store = new CertificateStoreIdentifier(); + store.StoreType = CertificateStoreCTRL.StoreType; + store.StorePath = CertificateStoreCTRL.StorePath; + return store; + } + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ViewBTN_Click(object sender, EventArgs e) + { + try + { + CertificateStoreIdentifier store = new CertificateStoreIdentifier(); + store.StoreType = CertificateStoreCTRL.StoreType; + store.StorePath = CertificateStoreCTRL.StorePath; + new CertificateListDlg().ShowDialog(store, false); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.Designer.cs new file mode 100644 index 00000000..3d72b37a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.Designer.cs @@ -0,0 +1,113 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateStoreTreeCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.CopyMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PasteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // NodesTV + // + this.NodesTV.ContextMenuStrip = this.PopupMenu; + this.NodesTV.LineColor = System.Drawing.Color.Black; + this.NodesTV.ShowRootLines = false; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.CopyMI, + this.PasteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(153, 70); + // + // CopyMI + // + this.CopyMI.Name = "CopyMI"; + this.CopyMI.Size = new System.Drawing.Size(152, 22); + this.CopyMI.Text = "Copy"; + this.CopyMI.Click += new System.EventHandler(this.CopyMI_Click); + // + // PasteMI + // + this.PasteMI.Name = "PasteMI"; + this.PasteMI.Size = new System.Drawing.Size(152, 22); + this.PasteMI.Text = "Paste"; + this.PasteMI.Click += new System.EventHandler(this.PasteMI_Click); + // + // CertificateStoreTreeCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.EnableDragging = true; + this.Name = "CertificateStoreTreeCtrl"; + this.Controls.SetChildIndex(this.NodesTV, 0); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem CopyMI; + private System.Windows.Forms.ToolStripMenuItem PasteMI; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.cs new file mode 100644 index 00000000..2439affe --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.cs @@ -0,0 +1,497 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Xml; +using System.Runtime.Serialization; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the use to select a store from a list stores on a machine. + /// + public partial class CertificateStoreTreeCtrl : Opc.Ua.Client.Controls.BaseTreeCtrl + { + #region Constructors + /// + /// Initializes the control. + /// + public CertificateStoreTreeCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private CertificateListCtrl m_certificateListCtrl; + + private enum ContainerInfoType + { + Root, + TopLevelStore, + Service, + User, + Store + } + + private class ContainerInfo + { + public ContainerInfoType Type; + public string DisplayName; + public CertificateStoreIdentifier Store; + + public ContainerInfo(ContainerInfoType type, string displayName) + { + Type = type; + DisplayName = displayName; + } + + public ContainerInfo(ContainerInfoType type, CertificateStoreIdentifier store) + { + Type = type; + DisplayName = store.ToString(); + Store = store; + } + + /// + /// Returns the display string for the object. + /// + public override string ToString() + { + return DisplayName; + } + + /// + /// Returns a store for the container. + /// + public CertificateStoreIdentifier GetCertificateStore() + { + if (this.Store != null) + { + return this.Store; + } + + return null; + } + } + #endregion + + #region Public Interface + /// + /// Returns the currently selected store. + /// + public CertificateStoreIdentifier SelectedStore + { + get + { + ContainerInfo info = SelectedTag as ContainerInfo; + + if (info == null) + { + return null; + } + + return info.GetCertificateStore(); + } + } + + /// + /// A control that can be used to display the contents of a certificate store. + /// + public CertificateListCtrl CertificateListCtrl + { + get { return m_certificateListCtrl; } + set { m_certificateListCtrl = value; } + } + + /// + /// Provides the configuration to use when displaying the control. + /// + public void Initialize() + { + NodesTV.Nodes.Clear(); + TreeNode node = AddNode(null, new ContainerInfo(ContainerInfoType.Root, System.Net.Dns.GetHostName())); + node.Nodes.Add(new TreeNode()); + node.Expand(); + } + #endregion + + #region Overridden Methods + /// + /// Updates the controls after a node is selected. + /// + protected override void SelectNode() + { + base.SelectNode(); + + if (m_certificateListCtrl != null) + { + m_certificateListCtrl.Initialize(SelectedStore, null).Wait(); + } + } + + /// + /// Fetches the children before expanding a node. + /// + protected override bool BeforeExpand(TreeNode clickedNode) + { + if (clickedNode == null) + { + return false; + } + + // check for a dummy placeholder node. + if (clickedNode.Nodes.Count == 1 && clickedNode.Nodes[0].Tag == null) + { + try + { + this.Cursor = Cursors.WaitCursor; + FetchChildren(clickedNode); + } + finally + { + this.Cursor = Cursors.Default; + } + } + + return base.BeforeExpand(clickedNode); + } + + /// + /// Enables the menu items. + /// + protected override void EnableMenuItems(TreeNode clickedNode) + { + base.EnableMenuItems(clickedNode); + + ContainerInfo info = clickedNode.Tag as ContainerInfo; + + if (info != null) + { + CopyMI.Enabled = true; + + if (info.Type == ContainerInfoType.Store) + { + IDataObject clipboardData = Clipboard.GetDataObject(); + + if (clipboardData.GetDataPresent(DataFormats.Text)) + { + PasteMI.Enabled = true; + } + } + } + } + + /// + /// Updates the properties of a node in the view. + /// + protected override void UpdateNode(TreeNode treeNode, object item, string text, string icon) + { + base.UpdateNode(treeNode, item, text, icon); + + ContainerInfo info = item as ContainerInfo; + + if (info != null) + { + SetIcon(treeNode, info); + } + } + + /// + /// Returns the data to drag. + /// + protected override object GetDataToDrag(TreeNode node) + { + ContainerInfo info = node.Tag as ContainerInfo; + + if (info == null) + { + return null; + } + + return info.GetCertificateStore(); + } + + /// + /// Handles a drag enter event. + /// + protected override void NodesTV_DragEnter(object sender, DragEventArgs e) + { + e.Effect = DragDropEffects.Copy; + } + + /// + /// Handles a drag over event. + /// + protected override void NodesTV_DragOver(object sender, DragEventArgs e) + { + TreeNode node = NodesTV.GetNodeAt(PointToClient(new Point(e.X, e.Y))); + + if (node == null) + { + e.Effect = DragDropEffects.None; + return; + } + + e.Effect = DragDropEffects.Copy; + } + + /// + /// Handles a drop event. + /// + protected override void NodesTV_DragDrop(object sender, DragEventArgs e) + { + try + { + TreeNode node = NodesTV.GetNodeAt(PointToClient(new Point(e.X, e.Y))); + + if (node == null) + { + return; + } + + ContainerInfo info = node.Tag as ContainerInfo; + + if (info == null) + { + return; + } + + if (info.Type == ContainerInfoType.Store) + { + CertificateStoreIdentifier id = info.GetCertificateStore(); + + if (id == null) + { + return; + } + + object[] certificates = e.Data.GetData(typeof(object[])) as object[]; + + if (certificates == null) + { + return; + } + + using (ICertificateStore store = id.OpenStore()) + { + for (int ii = 0; ii < certificates.Length; ii++) + { + X509Certificate2 certificate = certificates[ii] as X509Certificate2; + + if (certificate != null) + { + store.Add(certificate); + } + } + } + + NodesTV.SelectedNode = node; + return; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + + #region Private Methods + /// + /// Updates the children of a node. + /// + private void FetchChildren(TreeNode parent) + { + // get rid of existing children. + parent.Nodes.Clear(); + + // check for a valid node. + ContainerInfo info = parent.Tag as ContainerInfo; + + if (info == null) + { + return; + } + + // add a dummy child to show the + sign. + foreach (TreeNode child in parent.Nodes) + { + child.Nodes.Add(new TreeNode()); + } + } + + /// + /// Sets the icon for the tree node. + /// + private void SetIcon(TreeNode treeNode, ContainerInfo info) + { + switch (info.Type) + { + case ContainerInfoType.Root: + { + treeNode.ImageKey = GuiUtils.Icons.Desktop; + treeNode.SelectedImageKey = GuiUtils.Icons.Desktop; + break; + } + + case ContainerInfoType.Service: + { + treeNode.ImageKey = GuiUtils.Icons.Service; + treeNode.SelectedImageKey = GuiUtils.Icons.Service; + break; + } + + case ContainerInfoType.User: + { + treeNode.ImageKey = GuiUtils.Icons.SingleUser; + treeNode.SelectedImageKey = GuiUtils.Icons.SingleUser; + break; + } + + case ContainerInfoType.Store: + { + treeNode.ImageKey = GuiUtils.Icons.CertificateStore; + treeNode.SelectedImageKey = GuiUtils.Icons.CertificateStore; + break; + } + + case ContainerInfoType.TopLevelStore: + { + treeNode.ImageKey = GuiUtils.Icons.CertificateStore; + treeNode.SelectedImageKey = GuiUtils.Icons.CertificateStore; + break; + } + + default: + { + treeNode.ImageKey = GuiUtils.Icons.Folder; + treeNode.SelectedImageKey = GuiUtils.Icons.SelectedFolder; + break; + } + } + } + #endregion + + #region Event Handler + private void CopyMI_Click(object sender, EventArgs e) + { + try + { + TreeNode node = NodesTV.SelectedNode; + + // check if valid store selected. + ContainerInfo info = node.Tag as ContainerInfo; + + if (info == null) + { + return; + } + + if (info.Type != ContainerInfoType.Store || node.Parent == null) + { + return; + } + + CertificateStoreIdentifier store = info.GetCertificateStore(); + + StringBuilder builder = new StringBuilder(); + XmlWriter writer = XmlWriter.Create(builder); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(CertificateStoreIdentifier)); + serializer.WriteObject(writer, store); + } + finally + { + writer.Close(); + } + + ClipboardHack.SetData(DataFormats.Text, builder.ToString()); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void PasteMI_Click(object sender, EventArgs e) + { + try + { + string xml = (string)ClipboardHack.GetData(DataFormats.Text); + + if (String.IsNullOrEmpty(xml)) + { + return; + } + + // check if in the favorites list. + ContainerInfo info = NodesTV.SelectedNode.Tag as ContainerInfo; + + // check if pasting into a store. + if (info.Type == ContainerInfoType.Store) + { + CertificateIdentifier id = null; + + using (XmlTextReader reader = new XmlTextReader(new StringReader(xml))) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(CertificateIdentifier)); + id = (CertificateIdentifier)serializer.ReadObject(reader, false); + } + + if (id.Certificate != null) + { + CertificateStoreIdentifier storeId = info.GetCertificateStore(); + + using (ICertificateStore store = storeId.OpenStore()) + { + store.Add(id.Certificate); + } + } + + SelectNode(); + return; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.Designer.cs new file mode 100644 index 00000000..6f41c494 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.Designer.cs @@ -0,0 +1,149 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class CertificateStoreTreeDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ContainersCTRL = new Opc.Ua.Client.Controls.CertificateStoreTreeCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 445); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(518, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(439, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ContainersCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.MainPN.Size = new System.Drawing.Size(518, 445); + this.MainPN.TabIndex = 1; + // + // ContainersCTRL + // + this.ContainersCTRL.CertificateListCtrl = null; + this.ContainersCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.ContainersCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ContainersCTRL.EnableDragging = false; + this.ContainersCTRL.Location = new System.Drawing.Point(3, 3); + this.ContainersCTRL.Name = "ContainersCTRL"; + this.ContainersCTRL.Size = new System.Drawing.Size(512, 442); + this.ContainersCTRL.TabIndex = 0; + this.ContainersCTRL.NodeSelected += new Opc.Ua.Client.Controls.TreeNodeActionEventHandler(this.ContainersCTRL_NodeSelected); + // + // CertificateStoreTreeDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(518, 476); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "CertificateStoreTreeDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Open Certificate Store"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private CertificateStoreTreeCtrl ContainersCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.cs new file mode 100644 index 00000000..1e7208df --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.cs @@ -0,0 +1,95 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a ApplicationDescription. + /// + public partial class CertificateStoreTreeDlg : Form + { + /// + /// Contructs the object. + /// + public CertificateStoreTreeDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + + /// + /// Displays the dialog. + /// + public CertificateStoreIdentifier ShowDialog(CertificateStoreIdentifier store) + { + ContainersCTRL.Initialize(); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return ContainersCTRL.SelectedStore; + } + + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + // close the dialog. + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ContainersCTRL_NodeSelected(object sender, TreeNodeActionEventArgs e) + { + try + { + OkBTN.Enabled = ContainersCTRL.SelectedStore != null; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/CertificateStoreTreeDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.Designer.cs new file mode 100644 index 00000000..5d4a5ff4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.Designer.cs @@ -0,0 +1,95 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class BaseListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ItemsLV = new System.Windows.Forms.ListView(); + this.SuspendLayout(); + // + // ItemsLV + // + this.ItemsLV.AllowDrop = true; + this.ItemsLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ItemsLV.FullRowSelect = true; + this.ItemsLV.Location = new System.Drawing.Point(0, 0); + this.ItemsLV.Name = "ItemsLV"; + this.ItemsLV.Size = new System.Drawing.Size(541, 412); + this.ItemsLV.TabIndex = 0; + this.ItemsLV.UseCompatibleStateImageBehavior = false; + this.ItemsLV.View = System.Windows.Forms.View.Details; + this.ItemsLV.DragEnter += new System.Windows.Forms.DragEventHandler(this.ItemsLV_DragEnter); + this.ItemsLV.DragDrop += new System.Windows.Forms.DragEventHandler(this.ItemsLV_DragDrop); + this.ItemsLV.DoubleClick += new System.EventHandler(this.ItemsLV_DoubleClick); + this.ItemsLV.SelectedIndexChanged += new System.EventHandler(this.ItemsLV_SelectedIndexChanged); + this.ItemsLV.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ItemsLV_MouseUp); + this.ItemsLV.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ItemsLV_MouseMove); + this.ItemsLV.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ItemsLV_MouseDown); + // + // BaseListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ItemsLV); + this.Name = "BaseListCtrl"; + this.Size = new System.Drawing.Size(541, 412); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.cs new file mode 100644 index 00000000..a991d31e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.cs @@ -0,0 +1,868 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A base class for list controls. + /// + public partial class BaseListCtrl : UserControl + { + /// + /// Initializes a new instance of the class. + /// + public BaseListCtrl() + { + InitializeComponent(); + + ItemsLV.SmallImageList = new GuiUtils().ImageList; + ItemsLV.ListViewItemSorter = new BaseListCtrlSorter(this); + } + + /// + /// The ListView contained in the control. + /// + protected System.Windows.Forms.ListView ItemsLV; + + #region Public Interface + /// + /// Whether the control should allow items to be dragged. + /// + [DefaultValue(false)] + public bool EnableDragging + { + get { return m_enableDragging; } + set { m_enableDragging = value; } + } + + /// + /// The instructions to display when no items are in the list. + /// + public string Instructions + { + get { return m_instructions; } + set { m_instructions = value; } + } + + /// + /// Whether new items should be pre-pended to the list. + /// + [DefaultValue(false)] + public bool PrependItems + { + get { return m_prependItems; } + set { m_prependItems = value; } + } + + /// + /// Raised whenever items are 'picked' in the control. + /// + public event ListItemActionEventHandler ItemsPicked + { + add { m_ItemsPicked += value; } + remove { m_ItemsPicked -= value; } + } + + /// + /// Raised whenever items are selected in the control. + /// + public event ListItemActionEventHandler ItemsSelected + { + add { m_ItemsSelected += value; } + remove { m_ItemsSelected -= value; } + } + + /// + /// Raised whenever items are added to the control. + /// + public event ListItemActionEventHandler ItemsAdded + { + add { m_ItemsAdded += value; } + remove { m_ItemsAdded -= value; } + } + + /// + /// Raised whenever items are modified in the control. + /// + public event ListItemActionEventHandler ItemsModified + { + add { m_ItemsModified += value; } + remove { m_ItemsModified -= value; } + } + + /// + /// Raised whenever items are removed from the control. + /// + public event ListItemActionEventHandler ItemsRemoved + { + add { m_ItemsRemoved += value; } + remove { m_ItemsRemoved -= value; } + } + + /// + /// Returns the number of items in the control. + /// + public int Count + { + get { return ItemsLV.Items.Count; } + } + + /// + /// Returns the objects associated with the items in the control. + /// + public Array GetItems(System.Type type) + { + ArrayList items = new ArrayList(); + + foreach (ListViewItem listItem in ItemsLV.Items) + { + items.Add(listItem.Tag); + } + + return items.ToArray(type); + } + + /// + /// Returns the objects associated with the selected items in the control. + /// + public Array GetSelectedItems(System.Type type) + { + ArrayList items = new ArrayList(); + + if (ItemsLV.View == View.Details) + { + foreach (ListViewItem listItem in ItemsLV.SelectedItems) + { + items.Add(listItem.Tag); + } + } + + return items.ToArray(type); + } + #endregion + + #region Private Members + private bool m_prependItems; + private event ListItemActionEventHandler m_ItemsPicked; + private event ListItemActionEventHandler m_ItemsSelected; + private event ListItemActionEventHandler m_ItemsAdded; + private event ListItemActionEventHandler m_ItemsModified; + private event ListItemActionEventHandler m_ItemsRemoved; + private object[][] m_columns; + private bool m_updating; + private int m_updateCount; + private string m_instructions; + private Point m_dragPosition; + private bool m_enableDragging; + #endregion + + #region Protected Methods + /// + /// Returns tag of the selected item. Null if no items or more than one item is selected. + /// + protected object SelectedTag + { + get + { + if (ItemsLV.SelectedItems.Count != 1) + { + return null; + } + + return ItemsLV.SelectedItems[0].Tag; + } + } + + /// + /// Deletes the currently selected items. + /// + protected virtual void DeleteSelection() + { + List itemsToDelete = new List(); + + foreach (ListViewItem item in ItemsLV.SelectedItems) + { + itemsToDelete.Add(item); + } + + foreach (ListViewItem item in itemsToDelete) + { + item.Remove(); + } + } + + /// + /// Compares two items in the list. + /// + protected virtual int CompareItems(object item1, object item2) + { + IComparable comparable = item1 as IComparable; + + if (comparable != null) + { + return comparable.CompareTo(item2); + } + + return 0; + } + + /// + /// Returns the data to drag. + /// + protected virtual object GetDataToDrag() + { + if (ItemsLV.SelectedItems.Count > 0) + { + ArrayList data = new ArrayList(); + + foreach (ListViewItem listItem in ItemsLV.SelectedItems) + { + data.Add(listItem.Tag); + } + + return data.ToArray(); + } + + return null; + } + + /// + /// Adds an item to the list. + /// + protected virtual ListViewItem AddItem(object item) + { + return AddItem(item, "SimpleItem", -1); + } + + /// + /// Adds an item to the list. + /// + protected virtual ListViewItem AddItem(object item, string icon, int index) + { + // switch to detail view as soon as an item is added. + if (ItemsLV.View == View.List) + { + ItemsLV.Items.Clear(); + ItemsLV.View = View.Details; + } + + ListViewItem listItem = null; + + if (m_updating) + { + if (m_updateCount < ItemsLV.Items.Count) + { + listItem = ItemsLV.Items[m_updateCount]; + } + + m_updateCount++; + } + + if (listItem == null) + { + listItem = new ListViewItem(); + } + + listItem.Text = String.Format("{0}", item); + listItem.ImageKey = icon; + listItem.Tag = item; + + // fill columns with blanks. + for (int ii = listItem.SubItems.Count; ii < ItemsLV.Columns.Count-1; ii++) + { + listItem.SubItems.Add(String.Empty); + } + + // calculate new index. + int newIndex = index; + + if (index < 0 || index > ItemsLV.Items.Count) + { + newIndex = ItemsLV.Items.Count; + } + + // update columns. + UpdateItem(listItem, item, newIndex); + + if (listItem.ListView == null) + { + // add to control. + if (index >= 0 && index <= ItemsLV.Items.Count) + { + ItemsLV.Items.Insert(index, listItem); + } + else + { + ItemsLV.Items.Add(listItem); + } + } + + NotifyItemAdded(item); + + // return new item. + return listItem; + } + + /// + /// Starts overwriting the contents of the control. + /// + protected void BeginUpdate() + { + m_updating = true; + m_updateCount = 0; + } + + /// + /// Finishes overwriting the contents of the control. + /// + protected void EndUpdate() + { + m_updating = false; + + while (ItemsLV.Items.Count > m_updateCount) + { + ItemsLV.Items[ItemsLV.Items.Count-1].Remove(); + } + + m_updateCount = 0; + AdjustColumns(); + } + + /// + /// Updates a list item with the current contents of an object. + /// + protected virtual void UpdateItem(ListViewItem listItem, object item) + { + listItem.Tag = item; + } + + /// + /// Updates a list item with the current contents of an object. + /// + protected virtual void UpdateItem(ListViewItem listItem, object item, int index) + { + UpdateItem(listItem, item); + } + + /// + /// Sets the columns shown in the list view. + /// + protected virtual void SetColumns(object[][] columns) + { + ItemsLV.Clear(); + + m_columns = columns; + + foreach (object[] column in columns) + { + ColumnHeader header = new ColumnHeader(); + + header.Text = column[0] as string; + header.TextAlign = (HorizontalAlignment)column[1]; + + ItemsLV.Columns.Add(header); + } + + ColumnHeader blank = new ColumnHeader(); + blank.Text = String.Empty; + ItemsLV.Columns.Add(blank); + + AdjustColumns(); + } + + /// + /// Adjusts the columns shown in the list view. + /// + protected virtual void AdjustColumns() + { + if (ItemsLV.View == View.List || ItemsLV.Items.Count == 0) + { + ItemsLV.View = View.List; + + if (ItemsLV.Items.Count == 0 && !String.IsNullOrEmpty(m_instructions)) + { + ListViewItem item = new ListViewItem(m_instructions); + + item.ImageKey = "Info"; + item.ForeColor = Color.Gray; + + ItemsLV.Items.Add(item); + } + + ItemsLV.Columns[0].Width = -2; + return; + } + + ItemsLV.View = View.Details; + + for (int ii = 0; ii < m_columns.Length && ii < ItemsLV.Columns.Count; ii++) + { + // check for fixed width columns. + if (m_columns[ii].Length >= 4 && m_columns[ii][3] != null) + { + int width = (int)m_columns[ii][3]; + + if (ItemsLV.Columns[ii].Width < width) + { + ItemsLV.Columns[ii].Width = width; + } + + continue; + } + + // check mandatory columns. + if (m_columns[ii].Length < 3 || m_columns[ii][2] == null) + { + ItemsLV.Columns[ii].Width = -2; + continue; + } + + // check if all items have the default value for the column. + bool display = false; + + foreach (ListViewItem listItem in ItemsLV.Items) + { + if (!m_columns[ii][2].Equals(listItem.SubItems[ii].Text)) + { + display = true; + break; + } + } + + // only display columns with non-default information. + if (display) + { + ItemsLV.Columns[ii].Width = -2; + } + else + { + ItemsLV.Columns[ii].Width = 0; + } + } + + if (ItemsLV.Columns.Count > 0) + { + ItemsLV.Columns[ItemsLV.Columns.Count-1].Width = 0; + } + } + + /// + /// Enables the state of menu items. + /// + protected virtual void EnableMenuItems(ListViewItem clickedItem) + { + // do nothing. + } + + /// + /// Sends notifications whenever items in the control are 'picked'. + /// + protected virtual void PickItems() + { + if (m_ItemsPicked != null) + { + ICollection data = GetDataToDrag() as ICollection; + + if (data != null) + { + m_ItemsPicked(this, new ListItemActionEventArgs(ListItemAction.Picked, data)); + } + } + } + + /// + /// Sends notifications whenever items in the control are 'selected'. + /// + protected virtual void SelectItems() + { + if (m_ItemsSelected != null) + { + object[] selectedObjects = new object[ItemsLV.SelectedItems.Count]; + + for (int ii = 0; ii < selectedObjects.Length; ii++) + { + selectedObjects[ii] = ItemsLV.SelectedItems[ii].Tag; + } + + m_ItemsSelected(this, new ListItemActionEventArgs(ListItemAction.Selected, selectedObjects)); + } + } + + /// + /// Sends notifications that an item has been added to the control. + /// + protected virtual void NotifyItemAdded(object item) + { + NotifyItemsAdded(new object[] { item }); + } + + /// + /// Sends notifications that items have been added to the control. + /// + protected virtual void NotifyItemsAdded(object[] items) + { + if (m_ItemsAdded != null && items != null && items.Length > 0) + { + m_ItemsAdded(this, new ListItemActionEventArgs(ListItemAction.Added, items)); + } + } + + /// + /// Sends notifications that an item has been modified in the control. + /// + protected virtual void NotifyItemModified(object item) + { + NotifyItemsModified(new object[] { item }); + } + + /// + /// Sends notifications that items have been modified in the control. + /// + protected virtual void NotifyItemsModified(object[] items) + { + if (m_ItemsModified != null && items != null && items.Length > 0) + { + m_ItemsModified(this, new ListItemActionEventArgs(ListItemAction.Modified, items)); + } + } + + /// + /// Sends notifications that and item has been removed from the control. + /// + protected virtual void NotifyItemRemoved(object item) + { + NotifyItemsRemoved(new object[] { item }); + } + + /// + /// Sends notifications that items have been removed from the control. + /// + protected virtual void NotifyItemsRemoved(object[] items) + { + if (m_ItemsRemoved != null && items != null && items.Length > 0) + { + m_ItemsRemoved(this, new ListItemActionEventArgs(ListItemAction.Removed, items)); + } + } + + /// + /// Finds the list item with specified tag in the control, + /// + protected ListViewItem FindItem(object tag) + { + foreach (ListViewItem listItem in ItemsLV.Items) + { + if (Object.ReferenceEquals(tag, listItem.Tag)) + { + return listItem; + } + } + + return null; + } + + /// + /// Returns the tag associated with a selected item. + /// + protected object GetSelectedTag(int index) + { + if (ItemsLV.SelectedItems.Count > index) + { + return ItemsLV.SelectedItems[index].Tag; + } + + return null; + } + #endregion + + #region BaseListCtrlSorter Class + /// + /// A class that allows the list to be sorted. + /// + private class BaseListCtrlSorter : IComparer + { + /// + /// Initializes the sorter. + /// + public BaseListCtrlSorter(BaseListCtrl control) + { + m_control = control; + } + + /// + /// Compares the two items. + /// + public int Compare(object x, object y) + { + ListViewItem itemX = x as ListViewItem; + ListViewItem itemY = y as ListViewItem; + + return m_control.CompareItems(itemX.Tag, itemY.Tag); + } + + private BaseListCtrl m_control; + } + #endregion + + #region Event Handlers + private void ItemsLV_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) + { + try + { + // ignore non-right clicks. + if (e.Button == MouseButtons.Left) + { + m_dragPosition = e.Location; + return; + } + + // disable everything. + if (ItemsLV.ContextMenuStrip != null) + { + foreach (ToolStripItem item in ItemsLV.ContextMenuStrip.Items) + { + ToolStripMenuItem menuItem = item as ToolStripMenuItem; + + if (menuItem == null) + { + continue; + } + + menuItem.Enabled = false; + + if (menuItem.DropDown != null) + { + foreach (ToolStripItem subItem in menuItem.DropDown.Items) + { + ToolStripMenuItem subMenuItem = subItem as ToolStripMenuItem; + + if (subMenuItem != null) + { + subMenuItem.Enabled = false; + } + } + } + } + } + + // selects the item that was right clicked on. + ListViewItem clickedItem = ItemsLV.GetItemAt(e.X, e.Y); + + // ensure clicked item is selected. + if (clickedItem != null) + { + clickedItem.Selected = true; + } + + // enable menu items according to context. + EnableMenuItems(clickedItem); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ItemsLV_MouseUp(object sender, MouseEventArgs e) + { + try + { + if (e.Button == MouseButtons.Left) + { + m_dragPosition = e.Location; + return; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ItemsLV_DoubleClick(object sender, System.EventArgs e) + { + try + { + PickItems(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ItemsLV_SelectedIndexChanged(object sender, System.EventArgs e) + { + try + { + SelectItems(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ItemsLV_MouseMove(object sender, MouseEventArgs e) + { + if (m_enableDragging && e.Button == MouseButtons.Left && !m_dragPosition.Equals(e.Location)) + { + object data = GetDataToDrag(); + + if (data != null) + { + ItemsLV.DoDragDrop(data, DragDropEffects.Copy); + } + } + } + + /// + /// Handles the DragEnter event of the ItemsLV control. + /// + /// The source of the event. + /// The instance containing the event data. + protected virtual void ItemsLV_DragEnter(object sender, DragEventArgs e) + { + if (m_enableDragging) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + + /// + /// Handles the DragDrop event of the ItemsLV control. + /// + /// The source of the event. + /// The instance containing the event data. + protected virtual void ItemsLV_DragDrop(object sender, DragEventArgs e) + { + // overriden by sub-class. + } + #endregion + } + + #region ListItemAction Enumeration + /// + /// The possible actions that could affect an item. + /// + public enum ListItemAction + { + + /// + /// The item was picked (double clicked). + /// + Picked, + + /// + /// The item was selected. + /// + Selected, + + /// + /// The item was added. + /// + Added, + + /// + /// The item was modified. + /// + Modified, + + /// + /// The item was removed. + /// + Removed + } + #endregion + + #region ListItemActionEventArgs Class + /// + /// The event argurments passed when an item event occurs. + /// + public class ListItemActionEventArgs : EventArgs + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The action. + /// The items. + public ListItemActionEventArgs(ListItemAction action, ICollection items) + { + m_items = items; + m_action = action; + } + #endregion + + #region Public Properties + /// + /// Gets the items. + /// + /// The items. + public ICollection Items + { + get { return m_items; } + } + + /// + /// Gets the action. + /// + /// The action. + public ListItemAction Action + { + get { return m_action; } + } + #endregion + + #region Private Fields + private ICollection m_items; + private ListItemAction m_action; + #endregion + } + + /// + /// The delegate used to receive item action events. + /// + public delegate void ListItemActionEventHandler(object sender, ListItemActionEventArgs e); + #endregion +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseListCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.Designer.cs new file mode 100644 index 00000000..c3775947 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.Designer.cs @@ -0,0 +1,93 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class BaseTreeCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.NodesTV = new System.Windows.Forms.TreeView(); + this.SuspendLayout(); + // + // NodesTV + // + this.NodesTV.AllowDrop = true; + this.NodesTV.Dock = System.Windows.Forms.DockStyle.Fill; + this.NodesTV.Location = new System.Drawing.Point(0, 0); + this.NodesTV.Name = "NodesTV"; + this.NodesTV.Size = new System.Drawing.Size(489, 397); + this.NodesTV.TabIndex = 1; + this.NodesTV.GiveFeedback += new System.Windows.Forms.GiveFeedbackEventHandler(this.NodesTV_GiveFeedback); + this.NodesTV.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.NodesTV_BeforeExpand); + this.NodesTV.DoubleClick += new System.EventHandler(this.NodesTV_DoubleClick); + this.NodesTV.DragDrop += new System.Windows.Forms.DragEventHandler(this.NodesTV_DragDrop); + this.NodesTV.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.NodesTV_AfterSelect); + this.NodesTV.MouseDown += new System.Windows.Forms.MouseEventHandler(this.NodesTV_MouseDown); + this.NodesTV.DragEnter += new System.Windows.Forms.DragEventHandler(this.NodesTV_DragEnter); + this.NodesTV.DragOver += new System.Windows.Forms.DragEventHandler(this.NodesTV_DragOver); + // + // BaseTreeCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.NodesTV); + this.Name = "BaseTreeCtrl"; + this.Size = new System.Drawing.Size(489, 397); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.cs new file mode 100644 index 00000000..fa6b72ec --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.cs @@ -0,0 +1,456 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A base class for tree controls. + /// + public partial class BaseTreeCtrl : UserControl + { + /// + /// Initializes a new instance of the class. + /// + public BaseTreeCtrl() + { + InitializeComponent(); + NodesTV.ImageList = new GuiUtils().ImageList; + NodesTV.ItemHeight = 18; + } + + #region Public Interface + /// + /// The TreeView contained in the Control. + /// + protected System.Windows.Forms.TreeView NodesTV; + + /// + /// Raised whenever a node is 'picked' in the control. + /// + public event TreeNodeActionEventHandler NodePicked + { + add { m_NodePicked += value; } + remove { m_NodePicked -= value; } + } + + /// + /// Raised whenever a node is selected in the control. + /// + public event TreeNodeActionEventHandler NodeSelected + { + add { m_NodeSelected += value; } + remove { m_NodeSelected -= value; } + } + + /// + /// Whether the control should allow items to be dragged. + /// + public bool EnableDragging + { + get { return m_enableDragging; } + set { m_enableDragging = value; } + } + #endregion + + #region Private Fields + private event TreeNodeActionEventHandler m_NodePicked; + private event TreeNodeActionEventHandler m_NodeSelected; + private bool m_enableDragging; + #endregion + + #region Protected Methods + /// + /// Adds an item to the tree. + /// + protected virtual TreeNode AddNode(TreeNode treeNode, object item) + { + return AddNode(treeNode, item, String.Format("{0}", item), "ClosedFolder"); + } + + /// + /// Adds an item to the tree. + /// + protected virtual TreeNode AddNode(TreeNode parent, object item, string text, string icon) + { + // create node. + TreeNode treeNode = new TreeNode(); + + // update text/icon. + UpdateNode(treeNode, item, text, icon); + + // add to control. + if (parent == null) + { + NodesTV.Nodes.Add(treeNode); + } + else + { + parent.Nodes.Add(treeNode); + } + + // return new tree node. + return treeNode; + } + + /// + /// Updates a tree node with the current contents of an object. + /// + protected virtual void UpdateNode(TreeNode treeNode, object item, string text, string icon) + { + treeNode.Text = text; + treeNode.Tag = item; + treeNode.ImageKey = icon; + treeNode.SelectedImageKey = icon; + } + + /// + /// Returns the data to drag. + /// + protected virtual object GetDataToDrag(TreeNode node) + { + return node.Tag; + } + + /// + /// Enables the state of menu items. + /// + protected virtual void EnableMenuItems(TreeNode clickedNode) + { + // do nothing. + } + + /// + /// Initializes a node before expanding it. + /// + protected virtual bool BeforeExpand(TreeNode clickedNode) + { + return false; + } + + /// + /// Sends notifications whenever a node in the control is 'picked'. + /// + protected virtual void PickNode() + { + if (m_NodePicked != null) + { + if (NodesTV.SelectedNode != null) + { + object parent = null; + + if (NodesTV.SelectedNode.Parent != null) + { + parent = NodesTV.SelectedNode.Tag; + } + + m_NodePicked(this, new TreeNodeActionEventArgs(TreeNodeAction.Picked, NodesTV.SelectedNode.Tag, parent)); + } + } + } + + /// + /// Sends notifications whenever a node in the control is 'selected'. + /// + protected virtual void SelectNode() + { + if (m_NodeSelected != null) + { + if (NodesTV.SelectedNode != null) + { + object parent = null; + + if (NodesTV.SelectedNode.Parent != null) + { + parent = NodesTV.SelectedNode.Tag; + } + + m_NodeSelected(this, new TreeNodeActionEventArgs(TreeNodeAction.Selected, NodesTV.SelectedNode.Tag, parent)); + } + } + } + + /// + /// Returns the Tag for the current selection. + /// + protected object SelectedTag + { + get + { + if (NodesTV.SelectedNode != null) + { + return NodesTV.SelectedNode.Tag; + } + + return null; + } + } + #endregion + + #region Event Handlers + private void NodesTV_AfterSelect(object sender, TreeViewEventArgs e) + { + try + { + SelectNode(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void NodesTV_BeforeExpand(object sender, TreeViewCancelEventArgs e) + { + try + { + Cursor = Cursors.WaitCursor; + e.Cancel = BeforeExpand(e.Node); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + finally + { + Cursor = Cursors.Default; + } + } + + private void NodesTV_DoubleClick(object sender, EventArgs e) + { + try + { + PickNode(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void NodesTV_MouseDown(object sender, MouseEventArgs e) + { + try + { + // selects the item that was right clicked on. + TreeNode clickedNode = NodesTV.SelectedNode = NodesTV.GetNodeAt(e.X, e.Y); + + // no item clicked on - do nothing. + if (clickedNode == null) return; + + // start drag operation. + if (e.Button == MouseButtons.Left) + { + if (m_enableDragging) + { + object data = GetDataToDrag(clickedNode); + + if (data != null) + { + NodesTV.DoDragDrop(data, DragDropEffects.Copy); + } + } + + return; + } + + // disable everything. + if (NodesTV.ContextMenuStrip != null) + { + foreach (ToolStripItem item in NodesTV.ContextMenuStrip.Items) + { + ToolStripMenuItem menuItem = item as ToolStripMenuItem; + + if (menuItem == null) + { + continue; + } + + menuItem.Enabled = false; + + if (menuItem.DropDown != null) + { + foreach (ToolStripItem subItem in menuItem.DropDown.Items) + { + ToolStripMenuItem subMenuItem = subItem as ToolStripMenuItem; + + if (subMenuItem != null) + { + subMenuItem.Enabled = false; + } + } + } + } + } + + // enable menu items according to context. + if (e.Button == MouseButtons.Right) + { + EnableMenuItems(clickedNode); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + /// + /// Handles the DragEnter event of the NodesTV control. + /// + /// The source of the event. + /// The instance containing the event data. + protected virtual void NodesTV_DragEnter(object sender, DragEventArgs e) + { + if (m_enableDragging) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + + /// + /// Handles the DragDrop event of the NodesTV control. + /// + /// The source of the event. + /// The instance containing the event data. + protected virtual void NodesTV_DragDrop(object sender, DragEventArgs e) + { + // overridden by sub-class. + } + + /// + /// Handles the GiveFeedback event of the NodesTV control. + /// + /// The source of the event. + /// The instance containing the event data. + protected virtual void NodesTV_GiveFeedback(object sender, GiveFeedbackEventArgs e) + { + // overridden by sub-class. + } + + /// + /// Handles the DragOver event of the NodesTV control. + /// + /// The source of the event. + /// The instance containing the event data. + protected virtual void NodesTV_DragOver(object sender, DragEventArgs e) + { + // overridden by sub-class. + } + #endregion + } + + #region TreeNodeAction Eumeration + /// + /// The possible actions that could affect a node. + /// + public enum TreeNodeAction + { + /// + /// A node was picked in the tree. + /// + Picked, + + /// + /// A node was selected in the tree. + /// + Selected + } + #endregion + + #region TreeNodeActionEventArgs class + /// + /// The event argurments passed when an node event occurs. + /// + public class TreeNodeActionEventArgs : EventArgs + { + #region Constructor + /// + /// Initializes the object. + /// + public TreeNodeActionEventArgs(TreeNodeAction action, object node, object parent) + { + m_node = node; + m_parent = parent; + m_action = action; + } + #endregion + + #region Private Fields + /// + /// The tag associated with the node that was acted on. + /// + public object Node + { + get { return m_node; } + } + + /// + /// The tag associated with the parent of the node that was acted on. + /// + public object Parent + { + get { return m_parent; } + } + + /// + /// The action in question. + /// + public TreeNodeAction Action + { + get { return m_action; } + } + #endregion + + #region Private Fields + private object m_node; + private object m_parent; + private TreeNodeAction m_action; + #endregion + } + + /// + /// The delegate used to receive node action events. + /// + public delegate void TreeNodeActionEventHandler(object sender, TreeNodeActionEventArgs e); + #endregion +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/BaseTreeCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ClipboardHack.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ClipboardHack.cs new file mode 100644 index 00000000..bafaae01 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ClipboardHack.cs @@ -0,0 +1,155 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Threading; + +namespace Opc.Ua.Client.Controls +{ + /// + /// This class is used to work around a bug in the MS VPC implementation. + /// + /// + /// Clipborad operations will fail if this class is not used on VPCs with the + /// virtual machine additions installed. + /// + public static class ClipboardHack + { + #region Public Methods + /// + /// Retrieves the data from the clipboard. + /// + public static object GetData(string format) + { + lock (m_lock) + { + m_format = format; + m_data = null; + m_error = null; + + Thread thread = new Thread(new ThreadStart(GetClipboardPrivate)); + thread.IsBackground = true; + + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + thread.Join(); + + if (m_error != null) + { + throw new ServiceResultException(m_error, StatusCodes.BadUnexpectedError); + } + + return m_data; + } + } + + /// + /// Saves the data in the clipboard. + /// + public static void SetData(string format, object data) + { + lock (m_lock) + { + m_format = format; + m_data = data; + m_error = null; + + Thread thread = new Thread(new ThreadStart(SetClipboardPrivate)); + thread.IsBackground = true; + + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + thread.Join(); + + if (m_error != null) + { + throw new ServiceResultException(m_error, StatusCodes.BadUnexpectedError); + } + } + } + #endregion + + #region Private Methods + /// + /// Gets the data in the clipboard if it is the correct format. + /// + private static void GetClipboardPrivate() + { + try + { + m_error = null; + + if (String.IsNullOrEmpty(m_format) || !Clipboard.ContainsData(m_format)) + { + m_data = null; + return; + } + + m_data = Clipboard.GetData(m_format); + } + catch (Exception e) + { + m_error = e; + } + } + + /// + /// Saves the data in the clipboard if it is the correct format. + /// + private static void SetClipboardPrivate() + { + try + { + m_error = null; + + if (String.IsNullOrEmpty(m_format) || m_data == null) + { + return; + } + + Clipboard.SetData(m_format, m_data); + } + catch (Exception e) + { + m_error = e; + } + } + #endregion + + #region Private Fields + private static object m_lock = new object(); + private static string m_format = null; + private static object m_data = null; + private static Exception m_error = null; + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.Designer.cs new file mode 100644 index 00000000..c07e927f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.Designer.cs @@ -0,0 +1,150 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ComplexValueEditDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.ValueCTRL = new Opc.Ua.Client.Controls.DataListCtrl(); + this.ButtonsPN.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 317); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(707, 28); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 1); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(628, 1); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.Controls.Add(this.ValueCTRL); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(707, 317); + this.panel1.TabIndex = 1; + // + // ValueCTRL + // + this.ValueCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueCTRL.AutoUpdate = true; + this.ValueCTRL.Instructions = null; + this.ValueCTRL.LatestValue = true; + this.ValueCTRL.Location = new System.Drawing.Point(4, 3); + this.ValueCTRL.MonitoredItem = null; + this.ValueCTRL.Name = "ValueCTRL"; + this.ValueCTRL.Size = new System.Drawing.Size(699, 311); + this.ValueCTRL.TabIndex = 0; + // + // ComplexValueEditDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(707, 345); + this.Controls.Add(this.panel1); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "ComplexValueEditDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Value"; + this.ButtonsPN.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel panel1; + private DataListCtrl ValueCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.cs new file mode 100644 index 00000000..196baabd --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.cs @@ -0,0 +1,106 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog to edit a complex value. + /// + public partial class ComplexValueEditDlg : Form + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public ComplexValueEditDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private object m_value; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public object ShowDialog(object value) + { + return ShowDialog(value, null); + } + + /// + /// Displays the dialog. + /// + public object ShowDialog(object value, MonitoredItem monitoredItem) + { + m_value = Utils.Clone(value); + + ValueCTRL.MonitoredItem = monitoredItem; + ValueCTRL.ShowValue(m_value); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_value; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ComplexValueEditDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.Designer.cs new file mode 100644 index 00000000..a4cbae4a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.Designer.cs @@ -0,0 +1,145 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + /// + /// + /// + partial class DataListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.UpdatesMI = new System.Windows.Forms.ToolStripMenuItem(); + this.RefreshMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ClearMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Separator01 = new System.Windows.Forms.ToolStripSeparator(); + this.EditMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // ItemsLV + // + this.ItemsLV.ContextMenuStrip = this.PopupMenu; + this.ItemsLV.MultiSelect = false; + this.ItemsLV.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ItemsLV_MouseClick); + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.UpdatesMI, + this.RefreshMI, + this.ClearMI, + this.Separator01, + this.EditMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(136, 98); + this.PopupMenu.Opening += new System.ComponentModel.CancelEventHandler(this.PopupMenu_Opening); + // + // UpdatesMI + // + this.UpdatesMI.Checked = true; + this.UpdatesMI.CheckState = System.Windows.Forms.CheckState.Checked; + this.UpdatesMI.Name = "UpdatesMI"; + this.UpdatesMI.Size = new System.Drawing.Size(135, 22); + this.UpdatesMI.Text = "Auto Update"; + this.UpdatesMI.CheckedChanged += new System.EventHandler(this.UpdatesMI_CheckedChanged); + // + // RefreshMI + // + this.RefreshMI.Name = "RefreshMI"; + this.RefreshMI.Size = new System.Drawing.Size(135, 22); + this.RefreshMI.Text = "Refresh"; + this.RefreshMI.Click += new System.EventHandler(this.RefreshMI_Click); + // + // ClearMI + // + this.ClearMI.Name = "ClearMI"; + this.ClearMI.Size = new System.Drawing.Size(135, 22); + this.ClearMI.Text = "Clear"; + this.ClearMI.Click += new System.EventHandler(this.ClearMI_Click); + // + // Separator01 + // + this.Separator01.Name = "Separator01"; + this.Separator01.Size = new System.Drawing.Size(132, 6); + // + // EditMI + // + this.EditMI.Name = "EditMI"; + this.EditMI.Size = new System.Drawing.Size(135, 22); + this.EditMI.Text = "Edit Value..."; + this.EditMI.Click += new System.EventHandler(this.EditMI_Click); + // + // DataListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "DataListCtrl"; + this.Controls.SetChildIndex(this.ItemsLV, 0); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem UpdatesMI; + private System.Windows.Forms.ToolStripMenuItem RefreshMI; + private System.Windows.Forms.ToolStripMenuItem ClearMI; + private System.Windows.Forms.ToolStripSeparator Separator01; + private System.Windows.Forms.ToolStripMenuItem EditMI; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.cs new file mode 100644 index 00000000..078f57ee --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.cs @@ -0,0 +1,1774 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Runtime.Serialization; +using System.Xml; +using System.Xml.Serialization; + +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a hierarchical view of a complex value. + /// + public partial class DataListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + /// + /// Initializes a new instance of the class. + /// + public DataListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + } + + #region Private Fields + /// + /// The columns to display in the control. + /// + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Value", HorizontalAlignment.Left, null, 250 }, + new object[] { "Type", HorizontalAlignment.Left, null } + }; + + private bool m_latestValue = true; + private bool m_expanding; + private int m_depth; + private Font m_defaultFont; + private MonitoredItem m_monitoredItem; + + private const string UnknownType = "(unknown)"; + private const string NullValue = "(null)"; + private const string ExpandIcon = "ExpandPlus"; + private const string CollapseIcon = "ExpandMinus"; + #endregion + + #region Public Interface + /// + /// Whether to update the control when the value changes. + /// + public bool AutoUpdate + { + get { return UpdatesMI.Checked; } + set { UpdatesMI.Checked = value; } + } + + /// + /// Whether to only display the latest value for a monitored item. + /// + public bool LatestValue + { + get { return m_latestValue; } + set { m_latestValue = value; } + } + + /// + /// The monitored item associated with the value. + /// + public MonitoredItem MonitoredItem + { + get { return m_monitoredItem; } + set { m_monitoredItem = value; } + } + + /// + /// Clears the contents of the control, + /// + public void Clear() + { + ItemsLV.Items.Clear(); + AdjustColumns(); + } + + /// + /// Displays a value in the control. + /// + public void ShowValue(object value) + { + ShowValue(value, false); + } + + /// + /// Displays a value in the control. + /// + public void ShowValue(object value, bool overwrite) + { + if (!overwrite) + { + Clear(); + } + + if (value is byte[]) + { + m_defaultFont = new Font("Courier New", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))); + } + else + { + m_defaultFont = ItemsLV.Font; + } + + m_expanding = false; + m_depth = 0; + + // show the value. + int index = 0; + ShowValue(ref index, ref overwrite, value); + + // adjust columns. + AdjustColumns(); + } + #endregion + + #region Overridden Methods + /// + /// Enables the menu items. + /// + protected override void EnableMenuItems(ListViewItem clickedItem) + { + RefreshMI.Enabled = true; + ClearMI.Enabled = true; + + if (ItemsLV.SelectedItems.Count == 1) + { + ValueState state = ItemsLV.SelectedItems[0].Tag as ValueState; + EditMI.Enabled = IsEditableType(state.Component); + } + } + #endregion + + #region ValueState Class + /// + /// Stores the state associated with an item. + /// + private class ValueState + { + public bool Expanded = false; + public bool Expandable = false; + public object Value = null; + public object Component = null; + public object ComponentId = null; + public object ComponentIndex = null; + } + #endregion + + #region Private Members + /// + /// Returns true is the value is an editable type. + /// + private bool IsEditableType(object value) + { + if (value is bool) return true; + if (value is sbyte) return true; + if (value is byte) return true; + if (value is short) return true; + if (value is ushort) return true; + if (value is int) return true; + if (value is uint) return true; + if (value is long) return true; + if (value is ulong) return true; + if (value is float) return true; + if (value is double) return true; + if (value is string) return true; + if (value is DateTime) return true; + if (value is Guid) return true; + if (value is LocalizedText) return true; + + return false; + } + + /// + /// Shows the components of a value in the control. + /// + private void ShowChildren(ListViewItem listItem) + { + ValueState state = listItem.Tag as ValueState; + + if (state == null || !state.Expandable || state.Expanded) + { + return; + } + + m_expanding = true; + m_depth = listItem.IndentCount+1; + + state.Expanded = true; + listItem.ImageKey = CollapseIcon; + + int index = listItem.Index+1; + bool overwrite = false; + + ShowValue(ref index, ref overwrite, state.Component); + + AdjustColumns(); + } + + /// + /// Hides the components of a value in the control. + /// + private void HideChildren(ListViewItem listItem) + { + ValueState state = listItem.Tag as ValueState; + + if (state == null || !state.Expandable || !state.Expanded) + { + return; + } + + for (int ii = listItem.Index+1; ii < ItemsLV.Items.Count;) + { + ListViewItem childItem = ItemsLV.Items[ii]; + + if (childItem.IndentCount <= listItem.IndentCount) + { + break; + } + + childItem.Remove(); + } + + state.Expanded = false; + listItem.ImageKey = ExpandIcon; + } + + /// + /// Returns the list item at the specified index. + /// + private ListViewItem GetListItem(int index, ref bool overwrite, string name, string type) + { + ListViewItem listitem = null; + + // switch to detail view as soon as an item is added. + if (ItemsLV.View == View.List) + { + ItemsLV.Items.Clear(); + ItemsLV.View = View.Details; + } + + // check if there is an item that could be re-used. + if (!m_expanding && index < ItemsLV.Items.Count) + { + listitem = ItemsLV.Items[index]; + + // check if still possible to overwrite values. + if (overwrite) + { + if (listitem.SubItems[0].Text != name || listitem.SubItems[2].Text != type) + { + overwrite = false; + } + } + + listitem.SubItems[0].Text = name; + listitem.SubItems[2].Text = type; + + return listitem; + } + + overwrite = false; + + listitem = new ListViewItem(name); + + listitem.SubItems.Add(String.Empty); + listitem.SubItems.Add(type); + + listitem.Font = m_defaultFont; + listitem.ImageKey = ExpandIcon; + listitem.IndentCount = m_depth; + listitem.Tag = new ValueState(); + + if (!m_expanding) + { + ItemsLV.Items.Add(listitem); + } + else + { + ItemsLV.Items.Insert(index, listitem); + } + + return listitem; + } + + /// + /// Returns true if the type can be expanded. + /// + private bool IsExpandableType(object value) + { + // check for null. + if (value == null) + { + return false; + } + + // check for Variant. + if (value is Variant) + { + return IsExpandableType(((Variant)value).Value); + } + + // check for bytes. + byte[] bytes = value as byte[]; + + if (bytes != null) + { + return false; + } + + // check for xml element. + XmlElement xml = value as XmlElement; + + if (xml != null) + { + if (xml.ChildNodes.Count == 1 && xml.ChildNodes[0] is XmlText) + { + return false; + } + + return xml.HasChildNodes; + } + + // check for array. + Array array = value as Array; + + if (array == null) + { + Matrix matrix = value as Matrix; + + if (matrix != null) + { + array = matrix.ToArray(); + } + } + + if (array != null) + { + return array.Length > 0; + } + + // check for list. + IList list = value as IList; + + if (list != null) + { + return list.Count > 0; + } + + // check for encodeable object. + IEncodeable encodeable = value as IEncodeable; + + if (encodeable != null) + { + return true; + } + + // check for extension object. + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + return IsExpandableType(extension.Body); + } + + // check for data value. + DataValue datavalue = value as DataValue; + + if (datavalue != null) + { + return true; + } + + // check for event value. + EventFieldList eventFields = value as EventFieldList; + + if (eventFields != null) + { + return true; + } + + // must be a simple value. + return false; + } + + /// + /// Formats a value for display in the control. + /// + private string GetValueText(object value) + { + // check for null. + if (value == null) + { + return "(null)"; + } + + // format bytes. + byte[] bytes = value as byte[]; + + if (bytes != null) + { + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < bytes.Length; ii++) + { + if (ii != 0 && ii%16 == 0) + { + buffer.Append(" "); + } + + buffer.AppendFormat("{0:X2} ", bytes[ii]); + } + + return buffer.ToString(); + } + + // format xml element. + XmlElement xml = value as XmlElement; + + if (xml != null) + { + // return the entire element if not expandable. + if (!IsExpandableType(xml)) + { + return xml.OuterXml; + } + + // show only the start tag. + string text = xml.OuterXml; + + int index = text.IndexOf('>'); + + if (index != -1) + { + text = text.Substring(0, index); + } + + return text; + } + + // format array. + Array array = value as Array; + + if (array != null) + { + if (array.Rank > 1) + { + int[] lenghts = new int[array.Rank]; + + for (int i = 0; i < array.Rank; ++i) + { + lenghts[i] = array.GetLength(i); + } + + return Utils.Format("{1}[{0}]", string.Join(",", lenghts), value.GetType().GetElementType().Name); + } + else + { + return Utils.Format("{1}[{0}]", array.Length, value.GetType().GetElementType().Name); + } + } + + // format list. + IList list = value as IList; + + if (list != null) + { + string type = value.GetType().Name; + + if (type.EndsWith("Collection")) + { + type = type.Substring(0, type.Length - "Collection".Length); + } + else + { + type = "Object"; + } + + return Utils.Format("{1}[{0}]", list.Count, type); + } + + // format encodeable object. + IEncodeable encodeable = value as IEncodeable; + + if (encodeable != null) + { + return encodeable.GetType().Name; + } + + // format extension object. + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + return GetValueText(extension.Body); + } + + // check for event value. + EventFieldList eventFields = value as EventFieldList; + + if (eventFields != null) + { + if (m_monitoredItem != null) + { + return String.Format("{0}", m_monitoredItem.GetEventType(eventFields)); + } + + return eventFields.GetType().Name; + } + + // check for data value. + DataValue dataValue = value as DataValue; + + if (dataValue != null) + { + StringBuilder formattedValue = new StringBuilder(); + + if (!StatusCode.IsGood(dataValue.StatusCode)) + { + formattedValue.Append("["); + formattedValue.AppendFormat("Q:{0}", dataValue.StatusCode); + } + + DateTime now = DateTime.UtcNow; + + if ((dataValue != null) && + ((dataValue.ServerTimestamp > now) || (dataValue.SourceTimestamp > now))) + { + if (formattedValue.ToString().Length > 0) + { + formattedValue.Append(", "); + } + else + { + formattedValue.Append("["); + } + + formattedValue.Append("T:future"); + } + + if (formattedValue.ToString().Length > 0) + { + formattedValue.Append("] "); + } + + formattedValue.AppendFormat("{0}", dataValue.Value); + return formattedValue.ToString(); + } + + // use default formatting. + return Utils.Format("{0}", value); + } + + /// + /// Updates the list with the specified value. + /// + private void UpdateList( + ref int index, + ref bool overwrite, + object value, + object componentValue, + object componentId, + string name, + string type) + { + // get the list item to update. + ListViewItem listitem = GetListItem(index, ref overwrite, name, type); + if (componentValue is StatusCode) + { + listitem.SubItems[1].Text = componentValue.ToString(); + } + else + { + // update list item. + listitem.SubItems[1].Text = GetValueText(componentValue); + } + + // move to next item. + index++; + + ValueState state = listitem.Tag as ValueState; + + // recursively update sub-values if item is expanded. + if (overwrite) + { + if (state.Expanded && state.Expandable) + { + m_depth++; + ShowValue(ref index, ref overwrite, componentValue); + m_depth--; + } + } + + // update state. + state.Expandable = IsExpandableType(componentValue); + state.Value = value; + state.Component = componentValue; + state.ComponentId = componentId; + state.ComponentIndex = index; + + if (!state.Expandable) + { + listitem.ImageKey = CollapseIcon; + } + } + + /// + /// Updates the list with the specified value. + /// + private void UpdateList( + ref int index, + ref bool overwrite, + object value, + object componentValue, + object componentId, + string name, + string type, + bool enabled) + { + // get the list item to update. + ListViewItem listitem = GetListItem(index, ref overwrite, name, type); + + if (!enabled) + { + listitem.ForeColor = Color.LightGray; + } + + // update list item. + listitem.SubItems[1].Text = GetValueText(componentValue); + + // move to next item. + index++; + + ValueState state = listitem.Tag as ValueState; + + // recursively update sub-values if item is expanded. + if (overwrite) + { + if (state.Expanded && state.Expandable) + { + m_depth++; + ShowValue(ref index, ref overwrite, componentValue); + m_depth--; + } + } + + // update state. + state.Expandable = IsExpandableType(componentValue); + state.Value = value; + state.Component = componentValue; + state.ComponentId = componentId; + state.ComponentIndex = index; + + if (!state.Expandable) + { + listitem.ImageKey = CollapseIcon; + } + } + /// + /// Shows property of an encodeable object in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, IEncodeable value, PropertyInfo property) + { + // get the name of the property. + string name = Utils.GetDataMemberName(property); + + if (name == null) + { + return; + } + + // get the property value. + object propertyValue = null; + + MethodInfo[] accessors = property.GetAccessors(); + + for (int ii = 0; ii < accessors.Length; ii++) + { + if (accessors[ii].ReturnType == property.PropertyType) + { + propertyValue = accessors[ii].Invoke(value, null); + break; + } + } + + if (propertyValue is Variant) + { + propertyValue = ((Variant)propertyValue).Value; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + propertyValue, + property, + name, + property.PropertyType.Name); + } + + /// + /// Shows the element of an array in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, Array value, int element) + { + // get the name of the element. + string name = Utils.Format("[{0}]", element); + + // get the element value. + object elementValue = null; + + if (value.Rank > 1) + { + int[] smallArrayDimmensions = new int[value.Rank - 1]; + int length = 1; + + for (int i = 0; i < value.Rank - 1; ++i) + { + smallArrayDimmensions[i] = value.GetLength(i + 1); + length *= smallArrayDimmensions[i]; + } + + Array flatArray = Utils.FlattenArray(value); + Array flatSmallArray = Array.CreateInstance(value.GetType().GetElementType(), length); + Array.Copy(flatArray, element * value.GetLength(1), flatSmallArray, 0, length); + Array smallArray = Array.CreateInstance(value.GetType().GetElementType(), smallArrayDimmensions); + int[] indexes = new int[smallArrayDimmensions.Length]; + + for (int ii = 0; ii < flatSmallArray.Length; ii++) + { + smallArray.SetValue(flatSmallArray.GetValue(ii), indexes); + + for (int jj = indexes.Length - 1; jj >= 0; jj--) + { + indexes[jj]++; + + if (indexes[jj] < smallArrayDimmensions[jj]) + { + break; + } + + indexes[jj] = 0; + } + } + + elementValue = smallArray; + } + else + { + elementValue = value.GetValue(element); + } + + // get the type name. + string type = null; + + if (elementValue != null) + { + type = elementValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + elementValue, + element, + name, + type); + } + + /// + /// Shows the element of an array in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, Array value, int element, bool enabled) + { + // get the name of the element. + string name = Utils.Format("[{0}]", element); + + // get the element value. + object elementValue = value.GetValue(element); + + // get the type name. + string type = null; + + if (elementValue != null) + { + type = elementValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + elementValue, + element, + name, + type, + enabled); + } + + /// + /// Asks for confirmation before expanding a long list. + /// + private bool PromptOnLongList(int length) + { + if (length < 256) + { + return true; + } + + DialogResult result = MessageBox.Show("It may take a long time to display the list are you sure you want to continue?", "Warning", MessageBoxButtons.YesNo); + + if (result == DialogResult.Yes) + { + return true; + } + + return false; + } + + /// + /// Shows the element of a list in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, IList value, int element) + { + // get the name of the element. + string name = Utils.Format("[{0}]", element); + + // get the element value. + object elementValue = value[element]; + + // get the type name. + string type = null; + + if (elementValue != null) + { + type = elementValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + elementValue, + element, + name, + type); + } + + /// + /// Shows an XML element in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, XmlElement value, int childIndex) + { + // ignore children that are not elements. + XmlElement child = value.ChildNodes[childIndex] as XmlElement; + + if (child == null) + { + return; + } + + // get the name of the element. + string name = Utils.Format("{0}", child.Name); + + // get the type name. + string type = value.GetType().Name; + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + child, + childIndex, + name, + type); + } + + /// + /// Shows an event in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, EventFieldList value, int fieldIndex) + { + // ignore children that are not elements. + object field = value.EventFields[fieldIndex].Value; + + if (field == null) + { + return; + } + + // get the name of the element. + string name = null; + + if (m_monitoredItem != null) + { + name = m_monitoredItem.GetFieldName(fieldIndex); + } + + // get the type name. + string type = value.GetType().Name; + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + field, + fieldIndex, + name, + type); + } + + /// + /// Shows a byte array in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, byte[] value, int blockStart) + { + // get the name of the element. + string name = Utils.Format("[{0:X4}]", blockStart); + + int bytesLeft = value.Length - blockStart; + + if (bytesLeft > 16) + { + bytesLeft = 16; + } + + // get the element value. + byte[] blockValue = new byte[bytesLeft]; + Array.Copy(value, blockStart, blockValue, 0, bytesLeft); + + // get the type name. + string type = value.GetType().Name; + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + blockValue, + blockStart, + name, + type); + } + + /// + /// Shows a data value in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, DataValue value, int component) + { + string name = null; + object componentValue = null; + + switch (component) + { + case 0: + { + name = "Value"; + componentValue = value.Value; + + ExtensionObject extension = componentValue as ExtensionObject; + + if (extension != null) + { + componentValue = extension.Body; + } + + break; + } + + case 1: + { + name = "StatusCode"; + componentValue = value.StatusCode; + break; + } + + case 2: + { + if (value.SourceTimestamp != DateTime.MinValue) + { + name = "SourceTimestamp"; + componentValue = value.SourceTimestamp; + } + + break; + } + + case 3: + { + if (value.ServerTimestamp != DateTime.MinValue) + { + name = "ServerTimestamp"; + componentValue = value.ServerTimestamp; + } + + break; + } + } + + // don't display empty components. + if (name == null) + { + return; + } + + // get the type name. + string type = "(unknown)"; + + if (componentValue != null) + { + type = componentValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + componentValue, + component, + name, + type); + } + + /// + /// Shows a node id in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, NodeId value, int component) + { + string name = null; + object componentValue = null; + + switch (component) + { + case 0: + { + name = "IdType"; + componentValue = value.IdType; + break; + } + + case 1: + { + name = "Identifier"; + componentValue = value.Identifier; + break; + } + + case 2: + { + name = "NamespaceIndex"; + componentValue = value.NamespaceIndex; + break; + } + } + + // don't display empty components. + if (name == null) + { + return; + } + + // get the type name. + string type = "(unknown)"; + + if (componentValue != null) + { + type = componentValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + componentValue, + component, + name, + type); + } + + /// + /// Shows am expanded node id in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, ExpandedNodeId value, int component) + { + string name = null; + object componentValue = null; + + switch (component) + { + case 0: + { + name = "IdType"; + componentValue = value.IdType; + break; + } + + case 1: + { + name = "Identifier"; + componentValue = value.Identifier; + break; + } + + case 2: + { + name = "NamespaceIndex"; + componentValue = value.NamespaceIndex; + break; + } + + case 3: + { + name = "NamespaceUri"; + componentValue = value.NamespaceUri; + break; + } + } + + // don't display empty components. + if (name == null) + { + return; + } + + // get the type name. + string type = "(unknown)"; + + if (componentValue != null) + { + type = componentValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + componentValue, + component, + name, + type); + } + + /// + /// Shows qualified name in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, QualifiedName value, int component) + { + string name = null; + object componentValue = null; + + switch (component) + { + case 0: + { + name = "Name"; + componentValue = value.Name; + break; + } + + case 1: + { + name = "NamespaceIndex"; + componentValue = value.NamespaceIndex; + break; + } + } + + // don't display empty components. + if (name == null) + { + return; + } + + // get the type name. + string type = "(unknown)"; + + if (componentValue != null) + { + type = componentValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + componentValue, + component, + name, + type); + } + + /// + /// Shows localized text in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, LocalizedText value, int component) + { + string name = null; + object componentValue = null; + + switch (component) + { + case 0: + { + name = "Text"; + componentValue = value.Text; + break; + } + + case 1: + { + name = "Locale"; + componentValue = value.Locale; + break; + } + } + + // don't display empty components. + if (name == null) + { + return; + } + + // get the type name. + string type = "(unknown)"; + + if (componentValue != null) + { + type = componentValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + componentValue, + component, + name, + type); + } + + /// + /// Shows a string in the control. + /// + private void ShowValue(ref int index, ref bool overwrite, string value) + { + string name = "Value"; + object componentValue = value; + + // don't display empty components. + if (name == null) + { + return; + } + + // get the type name. + string type = "(unknown)"; + + if (componentValue != null) + { + type = componentValue.GetType().Name; + } + + // update the list view. + UpdateList( + ref index, + ref overwrite, + value, + componentValue, + 0, + name, + type); + } + + /// + /// Shows a value in control. + /// + private void ShowValue(ref int index, ref bool overwrite, object value) + { + if (value == null) + { + return; + } + + // show monitored items. + MonitoredItem monitoredItem = value as MonitoredItem; + + if (monitoredItem != null) + { + m_monitoredItem = monitoredItem; + ShowValue(ref index, ref overwrite, monitoredItem.LastValue); + return; + } + + // show data changes + MonitoredItemNotification datachange = value as MonitoredItemNotification; + + if (datachange != null) + { + ShowValue(ref index, ref overwrite, datachange.Value); + return; + } + + // show write value with IndexRange + WriteValue writevalue = value as WriteValue; + + if (writevalue != null) + { + // check if the value is an array + Array arrayvalue = writevalue.Value.Value as Array; + + if (arrayvalue != null) + { + NumericRange indexRange; + ServiceResult result = NumericRange.Validate(writevalue.IndexRange, out indexRange); + + if (ServiceResult.IsGood(result) && indexRange != NumericRange.Empty) + { + for (int ii = 0; ii < arrayvalue.Length; ii++) + { + bool enabled = ((indexRange.Begin <= ii && indexRange.End >= ii) || + (indexRange.End < 0 && indexRange.Begin == ii)); + + ShowValue(ref index, ref overwrite, arrayvalue, ii, enabled); + } + + return; + } + } + } + + // show events + EventFieldList eventFields = value as EventFieldList; + + if (eventFields != null) + { + for (int ii = 0; ii < eventFields.EventFields.Count; ii++) + { + ShowValue(ref index, ref overwrite, eventFields, ii); + } + + return; + } + + // show extension bodies. + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + ShowValue(ref index, ref overwrite, extension.Body); + return; + } + + // show encodeables. + IEncodeable encodeable = value as IEncodeable; + + if (encodeable != null) + { + PropertyInfo[] properties = encodeable.GetType().GetProperties(); + + foreach (PropertyInfo property in properties) + { + ShowValue(ref index, ref overwrite, encodeable, property); + } + + return; + } + + // show bytes. + byte[] bytes = value as byte[]; + + if (bytes != null) + { + if (!PromptOnLongList(bytes.Length/16)) + { + return; + } + + for (int ii = 0; ii < bytes.Length; ii+=16) + { + ShowValue(ref index, ref overwrite, bytes, ii); + } + + return; + } + + // show arrays + Array array = value as Array; + + if (array == null) + { + Matrix matrix = value as Matrix; + + if (matrix != null) + { + array = matrix.ToArray(); + } + } + + if (array != null) + { + if (!PromptOnLongList(array.GetLength(0))) + { + return; + } + + for (int ii = 0; ii < array.GetLength(0); ii++) + { + ShowValue(ref index, ref overwrite, array, ii); + } + + return; + } + + // show lists + IList list = value as IList; + + if (list != null) + { + if (!PromptOnLongList(list.Count)) + { + return; + } + + for (int ii = 0; ii < list.Count; ii++) + { + ShowValue(ref index, ref overwrite, list, ii); + } + + return; + } + + // show xml elements + XmlElement xml = value as XmlElement; + + if (xml != null) + { + if (!PromptOnLongList(xml.ChildNodes.Count)) + { + return; + } + + for (int ii = 0; ii < xml.ChildNodes.Count; ii++) + { + ShowValue(ref index, ref overwrite, xml, ii); + } + + return; + } + + // show data value. + DataValue datavalue = value as DataValue; + + if (datavalue != null) + { + ShowValue(ref index, ref overwrite, datavalue, 0); + ShowValue(ref index, ref overwrite, datavalue, 1); + ShowValue(ref index, ref overwrite, datavalue, 2); + ShowValue(ref index, ref overwrite, datavalue, 3); + return; + } + + // show node id value. + NodeId nodeId = value as NodeId; + + if (nodeId != null) + { + ShowValue(ref index, ref overwrite, nodeId, 0); + ShowValue(ref index, ref overwrite, nodeId, 1); + ShowValue(ref index, ref overwrite, nodeId, 2); + return; + } + + // show expanded node id value. + ExpandedNodeId expandedNodeId = value as ExpandedNodeId; + + if (expandedNodeId != null) + { + ShowValue(ref index, ref overwrite, expandedNodeId, 0); + ShowValue(ref index, ref overwrite, expandedNodeId, 1); + ShowValue(ref index, ref overwrite, expandedNodeId, 2); + ShowValue(ref index, ref overwrite, expandedNodeId, 3); + return; + } + + // show qualified name value. + QualifiedName qualifiedName = value as QualifiedName; + + if (qualifiedName != null) + { + ShowValue(ref index, ref overwrite, qualifiedName, 0); + ShowValue(ref index, ref overwrite, qualifiedName, 1); + return; + } + + // show qualified name value. + LocalizedText localizedText = value as LocalizedText; + + if (localizedText != null) + { + ShowValue(ref index, ref overwrite, localizedText, 0); + ShowValue(ref index, ref overwrite, localizedText, 1); + return; + } + + // show variant. + Variant? variant = value as Variant?; + + if (variant != null) + { + ShowValue(ref index, ref overwrite, variant.Value.Value); + return; + } + + // show unknown types as strings. + ShowValue(ref index, ref overwrite, String.Format("{0}", value)); + } + + private void ItemsLV_MouseClick(object sender, MouseEventArgs e) + { + try + { + if (e.Button != MouseButtons.Left) + { + return; + } + + ListViewItem listItem = ItemsLV.GetItemAt(e.X, e.Y); + + if (listItem == null) + { + return; + } + + ValueState state = listItem.Tag as ValueState; + + if (state == null || !state.Expandable) + { + return; + } + + if (state.Expanded) + { + HideChildren(listItem); + } + else + { + ShowChildren(listItem); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + + #region Event Handlers + private void UpdatesMI_CheckedChanged(object sender, EventArgs e) + { + try + { + /* + if (m_monitoredItem != null) + { + if (UpdatesMI.Checked) + { + m_monitoredItem.Notification += m_MonitoredItemNotification; + } + else + { + m_monitoredItem.Notification -= m_MonitoredItemNotification; + } + } + */ + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void RefreshMI_Click(object sender, EventArgs e) + { + try + { + /* + Clear(); + ShowValue(m_monitoredItem); + */ + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ClearMI_Click(object sender, EventArgs e) + { + try + { + Clear(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void EditMI_Click(object sender, EventArgs e) + { + try + { + if (ItemsLV.SelectedItems.Count != 1) + { + return; + } + + ValueState state = ItemsLV.SelectedItems[0].Tag as ValueState; + + if (!IsEditableType(state.Component)) + { + return; + } + + object value = null; + if (state.Component is LocalizedText) + { + value = new StringValueEditDlg().ShowDialog(state.Component.ToString()); + if (value != null) + { + value = new LocalizedText(((LocalizedText)state.Component).Key, ((LocalizedText)state.Component).Locale, value.ToString()); + } + } + else + { + value = new SimpleValueEditDlg().ShowDialog(state.Component, state.Component.GetType()); + } + + if (value == null) + { + return; + } + + if (state.Value is IEncodeable) + { + PropertyInfo property = (PropertyInfo)state.ComponentId; + + MethodInfo[] accessors = property.GetAccessors(); + + for (int ii = 0; ii < accessors.Length; ii++) + { + if (accessors[ii].ReturnType == typeof(void)) + { + accessors[ii].Invoke(state.Value, new object[] { value }); + state.Component = value; + break; + } + } + } + + DataValue datavalue = state.Value as DataValue; + + if (datavalue != null) + { + int component = (int)state.ComponentId; + + switch (component) + { + case 0: { datavalue.Value = value; break; } + } + } + + if (state.Value is IList) + { + int ii = (int)state.ComponentId; + ((IList)state.Value)[ii] = value; + state.Component = value; + } + + m_expanding = false; + int index = (int)state.ComponentIndex - 1; + int indentCount = ItemsLV.Items[index].IndentCount; + + while (index > 0 && ItemsLV.Items[index - 1].IndentCount == indentCount) + { + --index; + } + + bool overwrite = true; + ShowValue(ref index, ref overwrite, state.Value); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void PopupMenu_Opening(object sender, CancelEventArgs e) + { + try + { + EditMI.Enabled = false; + + if (ItemsLV.SelectedItems.Count != 1) + { + return; + } + + EditMI.Enabled = (ItemsLV.SelectedItems[0].ForeColor != Color.LightGray); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.resx new file mode 100644 index 00000000..664168a0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DataListCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.Designer.cs new file mode 100644 index 00000000..77369326 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.Designer.cs @@ -0,0 +1,147 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DateTimeValueEditDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueCTRL = new System.Windows.Forms.DateTimePicker(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 28); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(215, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(136, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ValueCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(215, 28); + this.MainPN.TabIndex = 1; + // + // ValueCTRL + // + this.ValueCTRL.CustomFormat = "yyyy-MM-dd HH:mm:ss"; + this.ValueCTRL.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.ValueCTRL.Location = new System.Drawing.Point(4, 5); + this.ValueCTRL.MaxDate = new System.DateTime(2100, 12, 21, 0, 0, 0, 0); + this.ValueCTRL.MinDate = new System.DateTime(1900, 1, 1, 0, 0, 0, 0); + this.ValueCTRL.Name = "ValueCTRL"; + this.ValueCTRL.Size = new System.Drawing.Size(207, 20); + this.ValueCTRL.TabIndex = 0; + // + // DateTimeValueEditDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(215, 59); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "DateTimeValueEditDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit DateTime Value"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.DateTimePicker ValueCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.cs new file mode 100644 index 00000000..9b2eb595 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.cs @@ -0,0 +1,97 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog to edit a date/time value + /// + public partial class DateTimeValueEditDlg : Form + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public DateTimeValueEditDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public bool ShowDialog(ref DateTime value) + { + if (value < ValueCTRL.MinDate) + { + ValueCTRL.Value = ValueCTRL.MinDate; + } + else if (value > ValueCTRL.MaxDate) + { + ValueCTRL.Value = ValueCTRL.MaxDate; + } + else + { + ValueCTRL.Value = value; + } + + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + value = ValueCTRL.Value; + + if (value == ValueCTRL.MinDate) + { + value = DateTime.MinValue; + } + + if (value == ValueCTRL.MaxDate) + { + value = DateTime.MaxValue; + } + + return true; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/DateTimeValueEditDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.Designer.cs new file mode 100644 index 00000000..c6cdf993 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.Designer.cs @@ -0,0 +1,131 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ExceptionDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BottomPanel = new System.Windows.Forms.Panel(); + this.OkButton = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ExceptionBrowser = new System.Windows.Forms.WebBrowser(); + this.BottomPanel.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // BottomPanel + // + this.BottomPanel.Controls.Add(this.OkButton); + this.BottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPanel.Location = new System.Drawing.Point(0, 433); + this.BottomPanel.Name = "BottomPanel"; + this.BottomPanel.Size = new System.Drawing.Size(770, 37); + this.BottomPanel.TabIndex = 0; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.OkButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.OkButton.Location = new System.Drawing.Point(348, 8); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(75, 23); + this.OkButton.TabIndex = 0; + this.OkButton.Text = "OK"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // MainPN + // + this.MainPN.Controls.Add(this.ExceptionBrowser); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3); + this.MainPN.Size = new System.Drawing.Size(770, 433); + this.MainPN.TabIndex = 1; + // + // ExceptionBrowser + // + this.ExceptionBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.ExceptionBrowser.Location = new System.Drawing.Point(3, 3); + this.ExceptionBrowser.MinimumSize = new System.Drawing.Size(20, 20); + this.ExceptionBrowser.Name = "ExceptionBrowser"; + this.ExceptionBrowser.Size = new System.Drawing.Size(764, 427); + this.ExceptionBrowser.TabIndex = 0; + // + // ExceptionDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(770, 470); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPanel); + this.Name = "ExceptionDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Exception"; + this.BottomPanel.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel BottomPanel; + private System.Windows.Forms.Button OkButton; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.WebBrowser ExceptionBrowser; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.cs new file mode 100644 index 00000000..b3d17efe --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.cs @@ -0,0 +1,135 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog that displays an exception trace in an HTML page. + /// + public partial class ExceptionDlg : Form + { + /// + /// Initializes a new instance of the class. + /// + public ExceptionDlg() + { + InitializeComponent(); + } + + /// + /// Replaces all special characters in the message. + /// + private string ReplaceSpecialCharacters(string message) + { + message = message.Replace("&", "&"); + message = message.Replace("<", "<"); + message = message.Replace(">", ">"); + message = message.Replace("\"", """); + message = message.Replace("'", "'"); + message = message.Replace("\r\n", "
"); + + return message; + } + + /// + /// Display the exception in the dialog. + /// + public void ShowDialog(string caption, Exception e) + { + Text = caption; + + StringBuilder buffer = new StringBuilder(); + + buffer.Append(""); + + while (e != null) + { + string message = e.Message; + + ServiceResultException exception = e as ServiceResultException; + + if (exception != null) + { + message = exception.ToLongString(); + } + + message = ReplaceSpecialCharacters(message); + + if (exception != null) + { + buffer.Append("

"); + buffer.Append(""); + buffer.Append(message); + buffer.Append(""); + buffer.Append("

"); + } + else + { + buffer.Append(""); + buffer.Append(message); + buffer.Append("
"); + } + + message = e.StackTrace; + + if (!String.IsNullOrEmpty(message)) + { + message = ReplaceSpecialCharacters(message); + + buffer.Append("

"); + buffer.Append(""); + buffer.Append(message); + buffer.Append(""); + buffer.Append("

"); + } + + e = e.InnerException; + } + + buffer.Append(""); + + ExceptionBrowser.DocumentText = buffer.ToString(); + + ShowDialog(); + } + + private void OkButton_Click(object sender, EventArgs e) + { + Close(); + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ExceptionDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.Designer.cs new file mode 100644 index 00000000..ca55b714 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.Designer.cs @@ -0,0 +1,82 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class GuiUtils + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GuiUtils)); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.SuspendLayout(); + // + // ImageList + // + ImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ImageList.ImageStream"))); + ImageList.TransparentColor = System.Drawing.Color.Transparent; + ImageList.Images.SetKeyName(0, "SimpleItem"); + // + // GuiUtils + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "GuiUtils"; + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.cs new file mode 100644 index 00000000..3fc0d351 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.cs @@ -0,0 +1,569 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Linq; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A class that provide various common utility functions and shared resources. + /// + public partial class GuiUtils : UserControl + { + /// + /// Initializes a new instance of the class. + /// + public GuiUtils() + { + InitializeComponent(); + } + + /// + /// The list of icon images. + /// + public System.Windows.Forms.ImageList ImageList; + + /// + /// Displays the details of an exception. + /// + public static void HandleException(string caption, MethodBase method, Exception e) + { + if (String.IsNullOrEmpty(caption)) + { + caption = method.Name; + } + + ExceptionDlg.Show(caption, e); + } + + /// + /// Defines names for the available 16x16 icons. + /// + public static class Icons + { + /// + /// An attribute + /// + public const string Attribute = "SimpleItem"; + + /// + /// A property + /// + public const string Property = "Property"; + + /// + /// A variable + /// + public const string Variable = "Variable"; + + /// + /// An object + /// + public const string Object = "Object"; + + /// + /// A method + /// + public const string Method = "Method"; + + /// + /// A single computer. + /// + public const string Computer = "Computer"; + + /// + /// A computer network. + /// + public const string Network = "Network"; + + /// + /// A folder. + /// + public const string Folder = "Folder"; + + /// + /// A selected folder. + /// + public const string SelectedFolder = "SelectedFolder"; + + /// + /// A process or application. + /// + public const string Process = "Process"; + + /// + /// A certificate + /// + public const string Certificate = "Certificate"; + + /// + /// An invalid certificate + /// + public const string InvalidCertificate = "InvalidCertificate"; + + /// + /// A certificate store + /// + public const string CertificateStore = "CertificateStore"; + + /// + /// A group of users. + /// + public const string Users = "Users"; + + /// + /// A service. + /// + public const string Service = "Service"; + + /// + /// A logical drive. + /// + public const string Drive = "Drive"; + + /// + /// The computer desktop. + /// + public const string Desktop = "Desktop"; + + /// + /// A single user. + /// + public const string SingleUser = "SingleUser"; + + /// + /// A group of services. + /// + public const string ServiceGroup = "ServiceGroup"; + + /// + /// A group of users. + /// + public const string UserGroup = "UserGroup"; + + /// + /// A green check + /// + public const string GreenCheck = "GreenCheck"; + + /// + /// A red cross + /// + public const string RedCross = "RedCross"; + + /// + /// A users icon with a red cross through it. + /// + public const string UsersRedCross = "UsersRedCross"; + } + + /// + /// Uses the command line to override the UA TCP implementation specified in the configuration. + /// + /// The configuration instance that stores the configurable information for a UA application. + /// + public static void OverrideUaTcpImplementation(ApplicationConfiguration configuration) + { + // check if UA TCP configuration included. + TransportConfiguration transport = null; + + for (int ii = 0; ii < configuration.TransportConfigurations.Count; ii++) + { + if (configuration.TransportConfigurations[ii].UriScheme == Utils.UriSchemeOpcTcp) + { + transport = configuration.TransportConfigurations[ii]; + break; + } + } + } + + /// + /// Displays the UA-TCP configuration in the form. + /// + /// The form to display the UA-TCP configuration. + /// The configuration instance that stores the configurable information for a UA application. + public static void DisplayUaTcpImplementation(Form form, ApplicationConfiguration configuration) + { + // check if UA TCP configuration included. + TransportConfiguration transport = null; + + for (int ii = 0; ii < configuration.TransportConfigurations.Count; ii++) + { + if (configuration.TransportConfigurations[ii].UriScheme == Utils.UriSchemeOpcTcp) + { + transport = configuration.TransportConfigurations[ii]; + break; + } + } + + // check if UA TCP implementation explicitly specified. + if (transport != null) + { + string text = form.Text; + + int index = text.LastIndexOf("(UA TCP - "); + + if (index >= 0) + { + text = text.Substring(0, index); + } + + form.Text = Utils.Format("{0} (UA TCP - C#)", text); + } + } + + /// + /// Handles a domain validation error. + /// + /// The caller's text is used as the caption of the shown to provide details about the error. + public static bool HandleDomainCheckError(string caption, ServiceResult serviceResult, X509Certificate2 certificate = null) + { + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("Certificate could not be validated!\r\n"); + buffer.AppendFormat("Validation error(s): \r\n"); + buffer.AppendFormat("\t{0}\r\n", serviceResult.StatusCode); + if (certificate != null) + { + buffer.AppendFormat("\r\nSubject: {0}\r\n", certificate.Subject); + buffer.AppendFormat("Issuer: {0}\r\n", X509Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer) + ? "Self-signed" : certificate.Issuer); + buffer.AppendFormat("Valid From: {0}\r\n", certificate.NotBefore); + buffer.AppendFormat("Valid To: {0}\r\n", certificate.NotAfter); + buffer.AppendFormat("Thumbprint: {0}\r\n\r\n", certificate.Thumbprint); + var domains = X509Utils.GetDomainsFromCertficate(certificate); + if (domains.Count > 0) + { + bool comma = false; + buffer.AppendFormat("Domains:"); + foreach (var domain in domains) + { + if (comma) + { + buffer.Append(","); + } + buffer.AppendFormat(" {0}", domain); + comma = true; + } + buffer.AppendLine(); + } + } + buffer.Append("This certificate validation error indicates that the hostname used to connect"); + buffer.Append(" is not listed as a valid hostname in the server certificate."); + buffer.Append("\r\n\r\nIgnore error and disable the hostname verification?"); + + if (MessageBox.Show(buffer.ToString(), caption, MessageBoxButtons.YesNo) == DialogResult.Yes) + { + return true; + } + return false; + } + + /// + /// Handles a certificate validation error. + /// + /// The caller's form is used as the caption of the shown to provide details about the error. + /// The validator (not used). + /// The instance event arguments provided when a certificate validation error occurs. + public static void HandleCertificateValidationError(Form form, CertificateValidator validator, CertificateValidationEventArgs e) + { + HandleCertificateValidationError(form.Text, validator, e); + } + + /// + /// Handles a certificate validation error. + /// + /// The caller's text is used as the caption of the shown to provide details about the error. + /// The validator (not used). + /// The instance event arguments provided when a certificate validation error occurs. + public static void HandleCertificateValidationError(string caption, CertificateValidator validator, CertificateValidationEventArgs e) + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append("Certificate could not be validated!\r\n"); + buffer.Append("Validation error(s): \r\n"); + ServiceResult error = e.Error; + while (error != null) + { + buffer.AppendFormat("- {0}\r\n", error.ToString().Split('\r', '\n').FirstOrDefault()); + error = error.InnerResult; + } + buffer.AppendFormat("\r\nSubject: {0}\r\n", e.Certificate.Subject); + buffer.AppendFormat("Issuer: {0}\r\n", (e.Certificate.Subject == e.Certificate.Issuer) ? "Self-signed" : e.Certificate.Issuer); + buffer.AppendFormat("Valid From: {0}\r\n", e.Certificate.NotBefore); + buffer.AppendFormat("Valid To: {0}\r\n", e.Certificate.NotAfter); + buffer.AppendFormat("Thumbprint: {0}\r\n\r\n", e.Certificate.Thumbprint); + buffer.Append("Certificate validation errors may indicate an attempt to intercept any data you send "); + buffer.Append("to a server or to allow an untrusted client to connect to your server."); + buffer.Append("\r\n\r\nAccept anyway?"); + + if (MessageBox.Show(buffer.ToString(), caption, MessageBoxButtons.YesNo) == DialogResult.Yes) + { + e.AcceptAll = true; + } + } + + /// + /// Returns a default value for the data type. + /// + public static object GetDefaultValue(NodeId datatypeId, int valueRank) + { + Type type = TypeInfo.GetSystemType(datatypeId, EncodeableFactory.GlobalFactory); + + if (type == null) + { + return null; + } + + if (valueRank < 0) + { + if (type == typeof(String)) + { + return System.String.Empty; + } + + if (type == typeof(byte[])) + { + return new byte[0]; + } + + if (type == typeof(NodeId)) + { + return Opc.Ua.NodeId.Null; + } + + if (type == typeof(ExpandedNodeId)) + { + return Opc.Ua.ExpandedNodeId.Null; + } + + if (type == typeof(QualifiedName)) + { + return Opc.Ua.QualifiedName.Null; + } + + if (type == typeof(LocalizedText)) + { + return Opc.Ua.LocalizedText.Null; + } + + if (type == typeof(Guid)) + { + return System.Guid.Empty; + } + + if (type == typeof(System.Xml.XmlElement)) + { + System.Xml.XmlDocument document = new System.Xml.XmlDocument(); + document.InnerXml = ""; + return document.DocumentElement; + } + + return Activator.CreateInstance(type); + } + + return Array.CreateInstance(type, new int[valueRank]); + } + + /// + /// Displays a dialog that allows a use to edit a value. + /// + public static object EditValue(Session session, object value) + { + TypeInfo typeInfo = TypeInfo.Construct(value); + + if (typeInfo != null) + { + return EditValue(session, value, (uint)typeInfo.BuiltInType, typeInfo.ValueRank); + } + + return null; + } + + /// + /// Displays a dialog that allows a use to edit a value. + /// + public static object EditValue(Session session, object value, NodeId datatypeId, int valueRank) + { + if (value == null) + { + value = GetDefaultValue(datatypeId, valueRank); + } + + if (valueRank >= 0) + { + return new ComplexValueEditDlg().ShowDialog(value); + } + + BuiltInType builtinType = TypeInfo.GetBuiltInType(datatypeId, session.TypeTree); + + switch (builtinType) + { + case BuiltInType.Boolean: + case BuiltInType.Byte: + case BuiltInType.SByte: + 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.Enumeration: + { + return new NumericValueEditDlg().ShowDialog(value, TypeInfo.GetSystemType(builtinType, valueRank)); + } + + case BuiltInType.Number: + { + return new NumericValueEditDlg().ShowDialog(value, TypeInfo.GetSystemType(BuiltInType.Double, valueRank)); + } + + case BuiltInType.Integer: + { + return new NumericValueEditDlg().ShowDialog(value, TypeInfo.GetSystemType(BuiltInType.Int64, valueRank)); + } + + case BuiltInType.UInteger: + { + return new NumericValueEditDlg().ShowDialog(value, TypeInfo.GetSystemType(BuiltInType.UInt64, valueRank)); + } + + case BuiltInType.NodeId: + { + return new NodeIdValueEditDlg().ShowDialog(session, (NodeId)value); + } + + case BuiltInType.ExpandedNodeId: + { + return new NodeIdValueEditDlg().ShowDialog(session, (ExpandedNodeId)value); + } + + case BuiltInType.DateTime: + { + DateTime datetime = (DateTime)value; + + if (new DateTimeValueEditDlg().ShowDialog(ref datetime)) + { + return datetime; + } + + return null; + } + + case BuiltInType.QualifiedName: + { + QualifiedName qname = (QualifiedName)value; + + string name = new StringValueEditDlg().ShowDialog(qname.Name); + + if (name != null) + { + return new QualifiedName(name, qname.NamespaceIndex); + } + + return null; + } + + case BuiltInType.String: + { + return new StringValueEditDlg().ShowDialog((string)value); + } + + case BuiltInType.LocalizedText: + { + LocalizedText ltext = (LocalizedText)value; + + string text = new StringValueEditDlg().ShowDialog(ltext.Text); + + if (text != null) + { + return new LocalizedText(ltext.Locale, text); + } + + return null; + } + } + + return new ComplexValueEditDlg().ShowDialog(value); + } + + /// + /// Returns to display icon for the target of a reference. + /// + public static string GetTargetIcon(Session session, ReferenceDescription reference) + { + return GetTargetIcon(session, reference.NodeClass, reference.TypeDefinition); + } + + /// + /// Returns to display icon for the target of a reference. + /// + public static string GetTargetIcon(Session session, NodeClass nodeClass, ExpandedNodeId typeDefinitionId) + { + // make sure the type definition is in the cache. + INode typeDefinition = session.NodeCache.Find(typeDefinitionId); + + switch (nodeClass) + { + case NodeClass.Object: + { + if (session.TypeTree.IsTypeOf(typeDefinitionId, ObjectTypes.FolderType)) + { + return "Folder"; + } + + return "Object"; + } + + case NodeClass.Variable: + { + if (session.TypeTree.IsTypeOf(typeDefinitionId, VariableTypes.PropertyType)) + { + return "Property"; + } + + return "Variable"; + } + } + + return nodeClass.ToString(); + } + + #region Private Methods + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.resx new file mode 100644 index 00000000..5b2ce242 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/GuiUtils.resx @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + False + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi + AgAAAk1TRnQBSQFMAwEBAAEMAQABDAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA + ARADAAEBAQABGAYAAQwSADD/kAAw/5AAMP+QADD/kAAS/wF1AVsBRgFuAVUBQQFqAVABOwFmAUsBNwFj + AUgBMwFjAUgBMwFjAUgBMwFjAUgBMwFjAUgBMwP/kAAP/wGFAW0BWgHtAeYB4wG/AacBmgG4AZ8BkAGy + AZcBiAGrAZABgAGlAYkBeQGgAYQBcgGbAYABbgGWAXwBaQFjAUgBM5AAAc4BuwGwAbYBnAGNAaQBiwF9 + Bv8BjgF2AWQB8gHtAeoB7gHmAeIB6QHgAdwB5AHZAdQB3wHSAcsB2gHLAcMB1QHFAbwB0QG+AbQBmgF/ + AWwBYwFIATOQAAHcAc0BxQHHAbEBpQG2AZwBjgHHAbEBpQGqAY4BfgGXAYABbwH2AfIB8QHyAe0B6gHt + AeYB4wHoAeAB3AHkAdkB0wHfAdIBywHaAcwBwwHVAcUBvAGdAYMBcQFjAUgBM5AAAe4B5wHkAdsBzQHG + AckBuAGvBv8BoAGKAXoB+QH3AvYB8gHxAfIB7QHqAe0B5wHjAekB4AHcAeQB2QHUAd8B0gHMAdoBzAHD + AaIBhwF1AWMBSAEzkAAP/wGpAZQBhAH9AfsB/AH5AvcB9gHzAfAB8gHtAeoB7QHnAeMB6QHgAdwB5AHZ + AdQB3wHSAcwBpgGMAXsBZQFKATWQAA//AbIBnQGOA/8C/AH7AfoB+AH3AfYB8gHxAfIB7QHqAe4B5wHj + AekB4AHbAeQB2QHUAd8B0gHLAWkBTgE6kAAS/wG2AaEBkwGuAZoBiwGnAZEBgQGfAYkBeQGXAYABbwGP + AXcBZQGHAW8BXQF/AWcBUwF4AV8BTAP/kAAw/5AAMP+QADD/kAAw/5AAAUIBTQE+BwABPgMAASgDAAFA + AwABEAMAAQEBAAEBBQABgBcAA/+BAAs= + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.Designer.cs new file mode 100644 index 00000000..36713968 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.Designer.cs @@ -0,0 +1,106 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class NodeIdCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.NodeIdTB = new System.Windows.Forms.TextBox(); + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // NodeIdTB + // + this.NodeIdTB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NodeIdTB.Location = new System.Drawing.Point(0, 0); + this.NodeIdTB.Name = "NodeIdTB"; + this.NodeIdTB.Size = new System.Drawing.Size(175, 20); + this.NodeIdTB.TabIndex = 0; + this.NodeIdTB.TextChanged += new System.EventHandler(this.NodeIdTB_TextChanged); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Right; + this.BrowseBTN.Location = new System.Drawing.Point(176, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 20); + this.BrowseBTN.TabIndex = 5; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // NodeIdCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Controls.Add(this.NodeIdTB); + this.MaximumSize = new System.Drawing.Size(4096, 20); + this.MinimumSize = new System.Drawing.Size(100, 20); + this.Name = "NodeIdCtrl"; + this.Size = new System.Drawing.Size(200, 20); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox NodeIdTB; + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.cs new file mode 100644 index 00000000..83f0c65e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.cs @@ -0,0 +1,204 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A list of node ids. + /// + public partial class NodeIdCtrl : UserControl + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public NodeIdCtrl() + { + InitializeComponent(); + + m_rootId = Objects.RootFolder; + BrowseBTN.Enabled = false; + } + #endregion + + #region Event Handlers + private Browser m_browser; + private NodeId m_rootId; + private ReferenceDescription m_reference; + private event EventHandler m_IdentifierChanged; + #endregion + + #region Public Interface + /// + /// Raised if the node id is changed. + /// + public event EventHandler IdentifierChanged + { + add { m_IdentifierChanged += value; } + remove { m_IdentifierChanged -= value; } + } + + /// + /// The browser to used browse for a node id. + /// + [DefaultValue(null)] + public Browser Browser + { + get + { + return m_browser; + } + + set + { + m_browser = value; + BrowseBTN.Enabled = m_browser != null; + } + } + + /// + /// The root node id to display when browsing. + /// + [DefaultValue(null)] + public NodeId RootId + { + get + { + return m_rootId; + } + + set + { + m_rootId = value; + + if (NodeId.IsNull(m_rootId)) + { + m_rootId = Objects.RootFolder; + } + } + } + + /// + /// Returns true if the control is empty. + /// + [DefaultValue(false)] + public bool IsEmpty + { + get + { + return String.IsNullOrEmpty(NodeIdTB.Text); + } + } + + /// + /// The node identifier specified in the control. + /// + [DefaultValue(null)] + public NodeId Identifier + { + get + { + return NodeId.Parse(NodeIdTB.Text); + } + + set + { + NodeIdTB.Text = Utils.Format("{0}", value); + } + } + + /// + /// The reference seleected if the browse feature was used. + /// + [DefaultValue(null)] + public ReferenceDescription Reference + { + get + { + return m_reference; + } + + set + { + m_reference = value; + + if (m_reference != null) + { + NodeIdTB.Text = Utils.Format("{0}", m_reference.NodeId); + } + } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + try + { + ReferenceDescription reference = new SelectNodeDlg().ShowDialog(m_browser.Session, RootId, null, "", null); + + if (reference != null && reference.NodeId != null) + { + NodeIdTB.Text = Utils.Format("{0}", reference.NodeId); + m_reference = reference; + + if (m_IdentifierChanged != null) + { + m_IdentifierChanged(this, null); + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void NodeIdTB_TextChanged(object sender, EventArgs e) + { + if (m_IdentifierChanged != null) + { + m_IdentifierChanged(this, null); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.Designer.cs new file mode 100644 index 00000000..ef82502f --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.Designer.cs @@ -0,0 +1,147 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class NodeIdValueEditDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueCTRL = new Opc.Ua.Client.Controls.NodeIdCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 28); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(297, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(218, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ValueCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(297, 28); + this.MainPN.TabIndex = 1; + // + // ValueCTRL + // + this.ValueCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueCTRL.Location = new System.Drawing.Point(4, 4); + this.ValueCTRL.MaximumSize = new System.Drawing.Size(4096, 20); + this.ValueCTRL.MinimumSize = new System.Drawing.Size(100, 20); + this.ValueCTRL.Name = "ValueCTRL"; + this.ValueCTRL.Size = new System.Drawing.Size(289, 20); + this.ValueCTRL.TabIndex = 2; + // + // NodeIdValueEditDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(297, 59); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "NodeIdValueEditDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit NodeId"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private Opc.Ua.Client.Controls.NodeIdCtrl ValueCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.cs new file mode 100644 index 00000000..c57e3949 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.cs @@ -0,0 +1,99 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog used to edit a NodeId. + /// + public partial class NodeIdValueEditDlg : Form + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public NodeIdValueEditDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public NodeId ShowDialog(Session session, NodeId value) + { + if (session == null) throw new ArgumentNullException("session"); + + ValueCTRL.Browser = new Browser(session); + ValueCTRL.RootId = Objects.RootFolder; + ValueCTRL.Identifier = value; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return ValueCTRL.Identifier; + } + + /// + /// Displays the dialog. + /// + public ExpandedNodeId ShowDialog(Session session, ExpandedNodeId value) + { + if (session == null) throw new ArgumentNullException("session"); + + ValueCTRL.Browser = new Browser(session); + ValueCTRL.RootId = Objects.RootFolder; + ValueCTRL.Identifier = ExpandedNodeId.ToNodeId(value, session.NamespaceUris); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return ValueCTRL.Identifier; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NodeIdValueEditDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.Designer.cs new file mode 100644 index 00000000..a642b89d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.Designer.cs @@ -0,0 +1,148 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class NumericValueEditDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueCTRL = new System.Windows.Forms.NumericUpDown(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ValueCTRL)).BeginInit(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 28); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(215, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(136, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ValueCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(215, 28); + this.MainPN.TabIndex = 1; + // + // ValueCTRL + // + this.ValueCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueCTRL.Location = new System.Drawing.Point(4, 5); + this.ValueCTRL.Name = "ValueCTRL"; + this.ValueCTRL.Size = new System.Drawing.Size(207, 20); + this.ValueCTRL.TabIndex = 0; + // + // NumericValueEditDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(215, 59); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "NumericValueEditDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Numeric Value"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ValueCTRL)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.NumericUpDown ValueCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs new file mode 100644 index 00000000..4e8781dd --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs @@ -0,0 +1,164 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog to edit a numeric value. + /// + public partial class NumericValueEditDlg : Form + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public NumericValueEditDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public object ShowDialog(object value, Type type) + { + if ((type == null || type == typeof(Variant)) && value != null) + { + type = value.GetType(); + } + + if (type == typeof(Variant)) + { + type = typeof(double); + } + + SetLimits(type); + + ValueCTRL.Value = Convert.ToDecimal(value); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return Convert.ChangeType(ValueCTRL.Value, type); + } + #endregion + + #region Private Methods + /// + /// Sets the limits according to the data type. + /// + private void SetLimits(Type type) + { + if (type == typeof(sbyte)) + { + ValueCTRL.Minimum = SByte.MinValue; + ValueCTRL.Maximum = SByte.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(byte)) + { + ValueCTRL.Minimum = Byte.MinValue; + ValueCTRL.Maximum = Byte.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(short)) + { + ValueCTRL.Minimum = Int16.MinValue; + ValueCTRL.Maximum = Int16.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(ushort)) + { + ValueCTRL.Minimum = UInt16.MinValue; + ValueCTRL.Maximum = UInt16.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(int)) + { + ValueCTRL.Minimum = Int32.MinValue; + ValueCTRL.Maximum = Int32.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(uint)) + { + ValueCTRL.Minimum = UInt32.MinValue; + ValueCTRL.Maximum = UInt32.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(long)) + { + ValueCTRL.Minimum = Int64.MinValue; + ValueCTRL.Maximum = Int64.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(ulong)) + { + ValueCTRL.Minimum = UInt64.MinValue; + ValueCTRL.Maximum = UInt64.MaxValue; + ValueCTRL.DecimalPlaces = 0; + } + + if (type == typeof(float)) + { + ValueCTRL.Minimum = Decimal.MinValue; + ValueCTRL.Maximum = Decimal.MaxValue; + ValueCTRL.DecimalPlaces = 6; + } + + if (type == typeof(double)) + { + ValueCTRL.Minimum = Decimal.MinValue; + ValueCTRL.Maximum = Decimal.MaxValue; + ValueCTRL.DecimalPlaces = 15; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.Designer.cs new file mode 100644 index 00000000..e8d54bd0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.Designer.cs @@ -0,0 +1,93 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ReferenceTypeCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ReferenceTypesCB = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // ReferenceTypesCB + // + this.ReferenceTypesCB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ReferenceTypesCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ReferenceTypesCB.FormattingEnabled = true; + this.ReferenceTypesCB.Location = new System.Drawing.Point(0, 0); + this.ReferenceTypesCB.Name = "ReferenceTypesCB"; + this.ReferenceTypesCB.Size = new System.Drawing.Size(200, 21); + this.ReferenceTypesCB.TabIndex = 0; + this.ReferenceTypesCB.SelectedIndexChanged += new System.EventHandler(this.ReferenceTypesCB_SelectedIndexChanged); + // + // ReferenceTypeCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ReferenceTypesCB); + this.MaximumSize = new System.Drawing.Size(4096, 21); + this.MinimumSize = new System.Drawing.Size(200, 21); + this.Name = "ReferenceTypeCtrl"; + this.Size = new System.Drawing.Size(200, 21); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox ReferenceTypesCB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.cs new file mode 100644 index 00000000..d5013f1c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.cs @@ -0,0 +1,273 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a drop down list of reference types. + /// + public partial class ReferenceTypeCtrl : UserControl + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public ReferenceTypeCtrl() + { + InitializeComponent(); + m_baseTypeId = Opc.Ua.ReferenceTypeIds.References; + } + #endregion + + #region Private Fields + private Session m_session; + private NodeId m_baseTypeId; + private event EventHandler m_referenceSelectionChanged; + #endregion + + #region Public Interface + /// + /// Initializes the control with references starting with the specified based type. + /// + public void Initialize(Session session, NodeId baseTypeId) + { + m_session = session; + m_baseTypeId = baseTypeId; + + if (NodeId.IsNull(m_baseTypeId)) + { + m_baseTypeId = ReferenceTypeIds.References; + } + + ReferenceTypesCB.Items.Clear(); + + // recurcively fetch the reference types from the server. + if (m_session != null) + { + AddReferenceTypes(m_baseTypeId, null); + } + } + + /// + /// The currently seleected reference type id. + /// + public NodeId SelectedTypeId + { + get + { + ReferenceTypeChoice choice = ReferenceTypesCB.SelectedItem as ReferenceTypeChoice; + + if (choice == null) + { + return null; + } + + return choice.ReferenceType.NodeId; + } + + set + { + for (int ii = 0; ii < ReferenceTypesCB.Items.Count; ii++) + { + ReferenceTypeChoice choice = ReferenceTypesCB.Items[ii] as ReferenceTypeChoice; + + if (choice != null && choice.ReferenceType.NodeId == value) + { + ReferenceTypesCB.SelectedIndex = ii; + return; + } + } + + if (ReferenceTypesCB.Items.Count > 0) + { + ReferenceTypesCB.SelectedIndex = 0; + } + } + } + + /// + /// Raised when the selected reference is changed. + /// + public event EventHandler ReferenceSelectionChanged + { + add { m_referenceSelectionChanged += value; } + remove { m_referenceSelectionChanged -= value; } + } + + #region ReferenceSelectedEventArgs Class + /// + /// Specifies the nodes that where selected in the control. + /// + public class ReferenceSelectedEventArgs : EventArgs + { + /// + /// Constructs a new object. + /// + public ReferenceSelectedEventArgs(NodeId selectedTypeId) + { + m_referenceTypeId = selectedTypeId; + } + + /// + /// The reference type that was selected. + /// + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + } + + private NodeId m_referenceTypeId; + } + #endregion + #endregion + + #region ReferenceTypeChoice Class + /// + /// A reference type that may be used as a browse filter. + /// + private class ReferenceTypeChoice + { + /// + /// The text to display in the control. + /// + public override string ToString() + { + if (ReferenceType == null) + { + return ""; + } + + StringBuilder text = new StringBuilder(); + + GetPrefix(text); + + if (text.Length > 0) + { + text.Append("> "); + } + + if (ReferenceType != null) + { + text.Append(ReferenceType.ToString()); + } + + return text.ToString(); + } + + /// + /// Adds a prefix for subtypes. + /// + private void GetPrefix(StringBuilder prefix) + { + if (SuperType != null) + { + SuperType.GetPrefix(prefix); + prefix.Append("--"); + } + } + + public ReferenceTypeNode ReferenceType; + public ReferenceTypeChoice SuperType; + } + #endregion + + #region Private Methods + /// + /// Adds the reference types to drop down box. + /// + private void AddReferenceTypes(ExpandedNodeId referenceTypeId, ReferenceTypeChoice supertype) + { + if (referenceTypeId == null) throw new ApplicationException("referenceTypeId"); + + try + { + // find reference. + ReferenceTypeNode node = m_session.NodeCache.Find(referenceTypeId) as ReferenceTypeNode; + + if (node == null) + { + return; + } + + // add reference to combobox. + ReferenceTypeChoice choice = new ReferenceTypeChoice(); + + choice.ReferenceType = node; + choice.SuperType = supertype; + + ReferenceTypesCB.Items.Add(choice); + + // recursively add subtypes. + IList subtypes = m_session.NodeCache.FindReferences(node.NodeId, ReferenceTypeIds.HasSubtype, false, true); + + foreach (INode subtype in subtypes) + { + AddReferenceTypes(subtype.NodeId, choice); + } + } + catch (Exception e) + { + Utils.Trace(e, "Ignoring unknown reference type."); + return; + } + } + #endregion + + #region Event Handlers + private void ReferenceTypesCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (m_referenceSelectionChanged != null) + { + NodeId referenceTypeId = SelectedTypeId; + + if (referenceTypeId != null) + { + m_referenceSelectionChanged(this, new ReferenceSelectedEventArgs(referenceTypeId)); + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/ReferenceTypeCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.Designer.cs new file mode 100644 index 00000000..a0ceacf0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.Designer.cs @@ -0,0 +1,164 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SimpleValueEditDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ValueLB = new System.Windows.Forms.Label(); + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.ValueTB = new System.Windows.Forms.TextBox(); + this.ButtonsPN.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // ValueLB + // + this.ValueLB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueLB.AutoSize = true; + this.ValueLB.Location = new System.Drawing.Point(4, 9); + this.ValueLB.Name = "ValueLB"; + this.ValueLB.Size = new System.Drawing.Size(34, 13); + this.ValueLB.TabIndex = 0; + this.ValueLB.Text = "Value"; + this.ValueLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 33); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(311, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(232, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.Controls.Add(this.ValueTB); + this.panel1.Controls.Add(this.ValueLB); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(311, 33); + this.panel1.TabIndex = 1; + // + // ValueTB + // + this.ValueTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ValueTB.Location = new System.Drawing.Point(44, 7); + this.ValueTB.Name = "ValueTB"; + this.ValueTB.Size = new System.Drawing.Size(263, 20); + this.ValueTB.TabIndex = 1; + // + // SimpleValueEditDlg + // + this.AcceptButton = this.OkBTN; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(311, 64); + this.Controls.Add(this.panel1); + this.Controls.Add(this.ButtonsPN); + this.MinimumSize = new System.Drawing.Size(287, 98); + this.Name = "SimpleValueEditDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Value"; + this.ButtonsPN.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label ValueLB; + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TextBox ValueTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.cs new file mode 100644 index 00000000..07b377bb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.cs @@ -0,0 +1,148 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using Opc.Ua; +using Opc.Ua.Client.Controls; + + +namespace Opc.Ua.Client.Controls +{ + /// + /// + /// + public partial class SimpleValueEditDlg : Form + { + #region Constructors + /// + /// Default constructor + /// + public SimpleValueEditDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private object m_value; + private Type m_type; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public object ShowDialog(object value, Type type) + { + if (type == null) throw new ArgumentNullException("type"); + + m_type = type; + + this.Text = Utils.Format("{0} ({1})", this.Text, type.Name); + + ValueTB.Text = Utils.Format("{0}", value); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_value; + } + + /// + /// Returns true if the dialog supports editing the type. + /// + public static bool IsSimpleType(Type type) + { + if (type == typeof(bool)) return true; + if (type == typeof(sbyte)) return true; + if (type == typeof(byte)) return true; + if (type == typeof(short)) return true; + if (type == typeof(ushort)) return true; + if (type == typeof(int)) return true; + if (type == typeof(uint)) return true; + if (type == typeof(long)) return true; + if (type == typeof(ulong)) return true; + if (type == typeof(float)) return true; + if (type == typeof(double)) return true; + if (type == typeof(string)) return true; + if (type == typeof(DateTime)) return true; + if (type == typeof(Guid)) return true; + + return false; + } + #endregion + + private object Parse(string text) + { + if (m_type == typeof(bool)) return Convert.ToBoolean(text); + if (m_type == typeof(sbyte)) return Convert.ToSByte(text); + if (m_type == typeof(byte)) return Convert.ToByte(text); + if (m_type == typeof(short)) return Convert.ToInt16(text); + if (m_type == typeof(ushort)) return Convert.ToUInt16(text); + if (m_type == typeof(int)) return Convert.ToInt32(text); + if (m_type == typeof(uint)) return Convert.ToUInt32(text); + if (m_type == typeof(long)) return Convert.ToInt64(text); + if (m_type == typeof(ulong)) return Convert.ToUInt64(text); + if (m_type == typeof(float)) return Convert.ToSingle(text); + if (m_type == typeof(double)) return Convert.ToDouble(text); + if (m_type == typeof(string)) return text; + if (m_type == typeof(DateTime)) return DateTime.ParseExact(text, "yyyy-MM-dd HH:mm:ss.fff", null); + if (m_type == typeof(Guid)) return new Guid(text); + if (m_type == typeof(QualifiedName)) return new QualifiedName(text); + if (m_type == typeof(LocalizedText)) return new LocalizedText(text); + + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "Cannot convert type."); + } + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + m_value = Parse(ValueTB.Text); + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/SimpleValueEditDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.Designer.cs new file mode 100644 index 00000000..f2cb3a20 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.Designer.cs @@ -0,0 +1,150 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class StringValueEditDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValueTB = new System.Windows.Forms.TextBox(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 24); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(252, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(173, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ValueTB); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3); + this.MainPN.Size = new System.Drawing.Size(252, 24); + this.MainPN.TabIndex = 1; + // + // ValueTB + // + this.ValueTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ValueTB.Location = new System.Drawing.Point(3, 3); + this.ValueTB.MinimumSize = new System.Drawing.Size(4, 20); + this.ValueTB.Multiline = true; + this.ValueTB.Name = "ValueTB"; + this.ValueTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ValueTB.Size = new System.Drawing.Size(246, 20); + this.ValueTB.TabIndex = 0; + this.ValueTB.Text = "Default"; + // + // StringValueEditDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(252, 55); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "StringValueEditDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit String Value"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.TextBox ValueTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.cs new file mode 100644 index 00000000..8493705c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.cs @@ -0,0 +1,86 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog to edit a string value. + /// + public partial class StringValueEditDlg : Form + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public StringValueEditDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public string ShowDialog(string value) + { + ValueTB.Text = value; + + if (value != null) + { + int length = value.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None).Length; + + if (length > 20) + { + length = 20; + } + + this.Height += (length-1)*16; + } + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return ValueTB.Text; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/Common (OLD)/StringValueEditDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.Designer.cs new file mode 100644 index 00000000..a878f423 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.Designer.cs @@ -0,0 +1,89 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectCertificateStoreCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseBTN.Location = new System.Drawing.Point(0, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 24); + this.BrowseBTN.TabIndex = 0; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // SelectFileCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Name = "SelectFileCtrl"; + this.Size = new System.Drawing.Size(24, 24); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.cs new file mode 100644 index 00000000..2ab31ee4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.cs @@ -0,0 +1,100 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control with button that displays a select certificate store dialog. + /// + public partial class SelectCertificateStoreCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public SelectCertificateStoreCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private event EventHandler m_CertificateStoreSelected; + #endregion + + #region Public Interface + /// + /// Gets or sets the control that is stores with the current certificate store. + /// + public Control CertificateStoreControl { get; set; } + + /// + /// Raised when a new file is selected. + /// + public event EventHandler CertificateStoreSelected + { + add { m_CertificateStoreSelected += value; } + remove { m_CertificateStoreSelected -= value; } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + CertificateStoreIdentifier store = new CertificateStoreIdentifier(); + store.StoreType = CertificateStoreIdentifier.DetermineStoreType(CertificateStoreControl.Text); + store.StorePath = CertificateStoreControl.Text; + + store = new CertificateStoreDlg().ShowDialog(store); + + if (store == null) + { + return; + } + + CertificateStoreControl.Text = store.StorePath; + + if (m_CertificateStoreSelected != null) + { + m_CertificateStoreSelected(this, new EventArgs()); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectCertificateStoreCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.Designer.cs new file mode 100644 index 00000000..69a1ab91 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.Designer.cs @@ -0,0 +1,89 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectFileCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseBTN.Location = new System.Drawing.Point(0, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 24); + this.BrowseBTN.TabIndex = 0; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // SelectFileCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Name = "SelectFileCtrl"; + this.Size = new System.Drawing.Size(24, 24); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.cs new file mode 100644 index 00000000..da17ce63 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.cs @@ -0,0 +1,138 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control with button that displays an open file dialog. + /// + public partial class SelectFileCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public SelectFileCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private event EventHandler m_FileSelected; + #endregion + + #region Public Interface + /// + /// Gets or sets the default file extension. + /// + public string DefaultExt { get; set; } + + /// + /// Gets or sets the file filters. + /// + public string Filter { get; set; } + + /// + /// Gets or sets the current directory. + /// + public string CurrentDirectory { get; set; } + + /// + /// Gets or sets the control that is stores with the current file path. + /// + public Control FilePathControl { get; set; } + + /// + /// Raised when a new file is selected. + /// + public event EventHandler FileSelected + { + add { m_FileSelected += value; } + remove { m_FileSelected -= value; } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(Filter)) + { + Filter = "All Files (*.*)|*.*"; + } + + // set the current directory. + if (!String.IsNullOrEmpty(FilePathControl.Text)) + { + FileInfo info = new FileInfo(FilePathControl.Text); + + if (info.Exists) + { + CurrentDirectory = info.DirectoryName; + } + } + + // open file dialog. + OpenFileDialog dialog = new OpenFileDialog(); + + dialog.CheckFileExists = true; + dialog.CheckPathExists = true; + dialog.DefaultExt = DefaultExt; + dialog.Filter = Filter; + dialog.Multiselect = false; + dialog.ValidateNames = true; + dialog.FileName = null; + dialog.InitialDirectory = CurrentDirectory; + dialog.RestoreDirectory = true; + + if (dialog.ShowDialog() != DialogResult.OK) + { + return; + } + + FilePathControl.Text = dialog.FileName; + + if (m_FileSelected != null) + { + m_FileSelected(this, new EventArgs()); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectFileCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.Designer.cs new file mode 100644 index 00000000..2f82ef9e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.Designer.cs @@ -0,0 +1,89 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectProfileCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseBTN.Location = new System.Drawing.Point(0, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 24); + this.BrowseBTN.TabIndex = 0; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // SelectFileCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Name = "SelectFileCtrl"; + this.Size = new System.Drawing.Size(24, 24); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.cs new file mode 100644 index 00000000..881abded --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.cs @@ -0,0 +1,142 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control with button that displays edit array dialog. + /// + public partial class SelectProfileCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public SelectProfileCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private event EventHandler m_ProfilesChanged; + private Opc.Ua.Security.ListOfSecurityProfiles m_profiles; + #endregion + + #region Public Interface + /// + /// The list of available security profiles. + /// + public Opc.Ua.Security.ListOfSecurityProfiles Profiles + { + get + { + return m_profiles; + } + + set + { + if (CurrentProfilesControl != null) + { + StringBuilder builder = new StringBuilder(); + + if (value != null) + { + for (int ii = 0; ii < value.Count; ii++) + { + if (value[ii].Enabled) + { + if (builder.Length > 0) + { + builder.Append(", "); + } + + builder.Append(SecurityPolicies.GetDisplayName(value[ii].ProfileUri)); + } + } + } + + CurrentProfilesControl.Text = builder.ToString(); + } + + m_profiles = value; + + } + } + + /// + /// Gets or sets the control that is stores with the current file path. + /// + public Control CurrentProfilesControl { get; set; } + + /// + /// Raised when the profiles are changed. + /// + public event EventHandler ProfilesChanged + { + add { m_ProfilesChanged += value; } + remove { m_ProfilesChanged -= value; } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + if (CurrentProfilesControl == null) + { + return; + } + + Opc.Ua.Security.ListOfSecurityProfiles profiles = new SelectProfileDlg().ShowDialog(Profiles, null); + + if (profiles == null) + { + return; + } + + Profiles = profiles; + + if (m_ProfilesChanged != null) + { + m_ProfilesChanged(this, e); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.Designer.cs new file mode 100644 index 00000000..22cd50d1 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.Designer.cs @@ -0,0 +1,148 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectProfileDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.CancelBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.BottomPN = new System.Windows.Forms.Panel(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ProfilesLV = new System.Windows.Forms.CheckedListBox(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(277, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(3, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // BottomPN + // + this.BottomPN.Controls.Add(this.OkBTN); + this.BottomPN.Controls.Add(this.CancelBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 100); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(355, 30); + this.BottomPN.TabIndex = 0; + // + // MainPN + // + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ProfilesLV); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3); + this.MainPN.Size = new System.Drawing.Size(355, 100); + this.MainPN.TabIndex = 1; + // + // ProfilesLV + // + this.ProfilesLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProfilesLV.FormattingEnabled = true; + this.ProfilesLV.Location = new System.Drawing.Point(3, 3); + this.ProfilesLV.Name = "ProfilesLV"; + this.ProfilesLV.Size = new System.Drawing.Size(349, 94); + this.ProfilesLV.TabIndex = 0; + // + // SelectProfileDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(355, 130); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "SelectProfileDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select Security Profiles"; + this.BottomPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.CheckedListBox ProfilesLV; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.cs new file mode 100644 index 00000000..a9059549 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.cs @@ -0,0 +1,102 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using System.Data; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a value. + /// + public partial class SelectProfileDlg : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public SelectProfileDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Prompts the user to edit an array value. + /// + public Opc.Ua.Security.ListOfSecurityProfiles ShowDialog(Opc.Ua.Security.ListOfSecurityProfiles profiles, string caption) + { + if (caption != null) + { + this.Text = caption; + } + + ProfilesLV.Items.Clear(); + + if (profiles != null) + { + for (int ii = 0; ii < profiles.Count; ii++) + { + ProfilesLV.Items.Add(profiles[ii].ProfileUri, profiles[ii].Enabled); + } + } + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + Opc.Ua.Security.ListOfSecurityProfiles results = new Opc.Ua.Security.ListOfSecurityProfiles(); + + for (int ii = 0; ii < ProfilesLV.Items.Count; ii++) + { + Opc.Ua.Security.SecurityProfile profile = new Opc.Ua.Security.SecurityProfile(); + profile.ProfileUri = ProfilesLV.Items[ii] as string; + profile.Enabled = ProfilesLV.CheckedIndices.Contains(ii); + results.Add(profile); + } + + return results; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectProfileDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.Designer.cs new file mode 100644 index 00000000..606b2c8d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.Designer.cs @@ -0,0 +1,89 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectUrlsCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BrowseBTN = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // BrowseBTN + // + this.BrowseBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseBTN.Location = new System.Drawing.Point(0, 0); + this.BrowseBTN.Name = "BrowseBTN"; + this.BrowseBTN.Size = new System.Drawing.Size(24, 24); + this.BrowseBTN.TabIndex = 0; + this.BrowseBTN.Text = "..."; + this.BrowseBTN.UseVisualStyleBackColor = true; + this.BrowseBTN.Click += new System.EventHandler(this.BrowseBTN_Click); + // + // SelectFileCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BrowseBTN); + this.Name = "SelectFileCtrl"; + this.Size = new System.Drawing.Size(24, 24); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button BrowseBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.cs new file mode 100644 index 00000000..fdbdc268 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.cs @@ -0,0 +1,168 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control with button that displays edit array dialog. + /// + public partial class SelectUrlsCtrl : UserControl + { + #region Constructors + /// + /// Creates a new instance of the control. + /// + public SelectUrlsCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private event EventHandler m_UrlsChanged; + private List m_urls; + #endregion + + #region Public Interface + /// + /// The list of urls. + /// + public List Urls + { + get + { + return m_urls; + } + + set + { + if (CurrentUrlsControl != null) + { + StringBuilder builder = new StringBuilder(); + + if (value != null) + { + for (int ii = 0; ii < value.Count; ii++) + { + if (builder.Length > 0) + { + builder.Append(", "); + } + + builder.Append(value[ii].Scheme); + + if (value[ii].Port > 0) + { + builder.Append(":"); + builder.Append(value[ii].Port); + } + } + } + + CurrentUrlsControl.Text = builder.ToString(); + } + + m_urls = value; + } + } + + /// + /// Gets or sets the control that is stores with the current file path. + /// + public Control CurrentUrlsControl { get; set; } + + /// + /// Raised when the profiles are changed. + /// + public event EventHandler UrlsChanged + { + add { m_UrlsChanged += value; } + remove { m_UrlsChanged -= value; } + } + #endregion + + #region Event Handlers + private void BrowseBTN_Click(object sender, EventArgs e) + { + if (CurrentUrlsControl == null) + { + return; + } + + string[] strings = null; + + if (m_urls != null) + { + strings = new string[m_urls.Count]; + + for (int ii = 0; ii < m_urls.Count; ii++) + { + strings[ii] = m_urls[ii].ToString(); + } + } + + strings = new EditArrayDlg().ShowDialog(strings, BuiltInType.String, false, null) as string[]; + + if (strings == null) + { + return; + } + + List urls = new List(); + + for (int ii = 0; ii < strings.Length; ii++) + { + Uri url = Utils.ParseUri(strings[ii]); + + if (url != null) + { + urls.Add(url); + } + } + + Urls = urls; + + if (m_UrlsChanged != null) + { + m_UrlsChanged(this, e); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/SelectUrlsCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.Designer.cs new file mode 100644 index 00000000..6a8da149 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.Designer.cs @@ -0,0 +1,194 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class UserNamePasswordDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.TableLayoutPanel(); + this.PasswordLB = new System.Windows.Forms.Label(); + this.UserNameLB = new System.Windows.Forms.Label(); + this.UserNameTB = new System.Windows.Forms.TextBox(); + this.PasswordTB = new System.Windows.Forms.TextBox(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 53); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(247, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(168, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.ColumnCount = 2; + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.MainPN.Controls.Add(this.PasswordLB, 0, 1); + this.MainPN.Controls.Add(this.UserNameLB, 0, 0); + this.MainPN.Controls.Add(this.UserNameTB, 1, 0); + this.MainPN.Controls.Add(this.PasswordTB, 1, 1); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.RowCount = 3; + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.MainPN.Size = new System.Drawing.Size(247, 53); + this.MainPN.TabIndex = 1; + // + // PasswordLB + // + this.PasswordLB.AutoSize = true; + this.PasswordLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PasswordLB.Location = new System.Drawing.Point(3, 26); + this.PasswordLB.Name = "PasswordLB"; + this.PasswordLB.Size = new System.Drawing.Size(60, 26); + this.PasswordLB.TabIndex = 2; + this.PasswordLB.Text = "Password"; + this.PasswordLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserNameLB + // + this.UserNameLB.AutoSize = true; + this.UserNameLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.UserNameLB.Location = new System.Drawing.Point(3, 0); + this.UserNameLB.Name = "UserNameLB"; + this.UserNameLB.Size = new System.Drawing.Size(60, 26); + this.UserNameLB.TabIndex = 0; + this.UserNameLB.Text = "User Name"; + this.UserNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserNameTB + // + this.UserNameTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.UserNameTB.Location = new System.Drawing.Point(69, 3); + this.UserNameTB.Name = "UserNameTB"; + this.UserNameTB.Size = new System.Drawing.Size(175, 20); + this.UserNameTB.TabIndex = 1; + // + // PasswordTB + // + this.PasswordTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PasswordTB.Location = new System.Drawing.Point(69, 29); + this.PasswordTB.Name = "PasswordTB"; + this.PasswordTB.PasswordChar = '*'; + this.PasswordTB.Size = new System.Drawing.Size(175, 20); + this.PasswordTB.TabIndex = 3; + // + // UserNamePasswordDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.CancelBTN; + this.ClientSize = new System.Drawing.Size(247, 84); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.MaximumSize = new System.Drawing.Size(2048, 2048); + this.MinimumSize = new System.Drawing.Size(200, 50); + this.Name = "UserNamePasswordDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Enter User Name"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.TableLayoutPanel MainPN; + private System.Windows.Forms.Label PasswordLB; + private System.Windows.Forms.Label UserNameLB; + private System.Windows.Forms.TextBox UserNameTB; + private System.Windows.Forms.TextBox PasswordTB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.cs new file mode 100644 index 00000000..29404547 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.cs @@ -0,0 +1,83 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to enter a user name/password. + /// + public partial class UserNamePasswordDlg : Form + { + /// + /// Contructs the object. + /// + public UserNamePasswordDlg() + { + InitializeComponent(); + } + + /// + /// Displays the dialog. + /// + public UserIdentity ShowDialog(IUserIdentity identity, string caption) + { + if (!String.IsNullOrEmpty(caption)) + { + this.Text = caption; + } + + if (identity != null) + { + UserNameIdentityToken token = identity.GetIdentityToken() as UserNameIdentityToken; + + if (token != null) + { + UserNameTB.Text = token.UserName; + PasswordTB.Text = token.DecryptedPassword; + } + } + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return new UserIdentity(UserNameTB.Text, PasswordTB.Text); + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/UserNamePasswordDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.Designer.cs new file mode 100644 index 00000000..6932e655 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.Designer.cs @@ -0,0 +1,416 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ViewCertificateDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.ExportBTN = new System.Windows.Forms.Button(); + this.DetailsBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.ApplicationNameLB = new System.Windows.Forms.Label(); + this.ApplicationNameTB = new System.Windows.Forms.TextBox(); + this.ApplicationUriLB = new System.Windows.Forms.Label(); + this.ApplicationUriTB = new System.Windows.Forms.TextBox(); + this.SubjectNameLB = new System.Windows.Forms.Label(); + this.SubjectNameTB = new System.Windows.Forms.TextBox(); + this.DomainsLB = new System.Windows.Forms.Label(); + this.DomainsTB = new System.Windows.Forms.TextBox(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ValidToTB = new System.Windows.Forms.TextBox(); + this.ValidToLB = new System.Windows.Forms.Label(); + this.ValidFromTB = new System.Windows.Forms.TextBox(); + this.ValidFromLB = new System.Windows.Forms.Label(); + this.ThumbprintTB = new System.Windows.Forms.TextBox(); + this.ThumbprintLB = new System.Windows.Forms.Label(); + this.IssuerNameTB = new System.Windows.Forms.TextBox(); + this.IssuerNameLB = new System.Windows.Forms.Label(); + this.OrganizationTB = new System.Windows.Forms.TextBox(); + this.OrganizationLB = new System.Windows.Forms.Label(); + this.CertificateStoreCTRL = new Opc.Ua.Client.Controls.CertificateStoreCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.ExportBTN); + this.ButtonsPN.Controls.Add(this.DetailsBTN); + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 291); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(708, 31); + this.ButtonsPN.TabIndex = 0; + // + // ExportBTN + // + this.ExportBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ExportBTN.Location = new System.Drawing.Point(166, 4); + this.ExportBTN.Name = "ExportBTN"; + this.ExportBTN.Size = new System.Drawing.Size(75, 23); + this.ExportBTN.TabIndex = 3; + this.ExportBTN.Text = "Export..."; + this.ExportBTN.UseVisualStyleBackColor = true; + this.ExportBTN.Click += new System.EventHandler(this.ExportBTN_Click); + // + // DetailsBTN + // + this.DetailsBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.DetailsBTN.Location = new System.Drawing.Point(85, 4); + this.DetailsBTN.Name = "DetailsBTN"; + this.DetailsBTN.Size = new System.Drawing.Size(75, 23); + this.DetailsBTN.TabIndex = 2; + this.DetailsBTN.Text = "Details..."; + this.DetailsBTN.UseVisualStyleBackColor = true; + this.DetailsBTN.Click += new System.EventHandler(this.DetailsBTN_Click); + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(629, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // ApplicationNameLB + // + this.ApplicationNameLB.AutoSize = true; + this.ApplicationNameLB.Location = new System.Drawing.Point(5, 63); + this.ApplicationNameLB.Name = "ApplicationNameLB"; + this.ApplicationNameLB.Size = new System.Drawing.Size(90, 13); + this.ApplicationNameLB.TabIndex = 1; + this.ApplicationNameLB.Text = "Application Name"; + this.ApplicationNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationNameTB + // + this.ApplicationNameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ApplicationNameTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ApplicationNameTB.Location = new System.Drawing.Point(96, 60); + this.ApplicationNameTB.Name = "ApplicationNameTB"; + this.ApplicationNameTB.ReadOnly = true; + this.ApplicationNameTB.Size = new System.Drawing.Size(608, 20); + this.ApplicationNameTB.TabIndex = 2; + // + // ApplicationUriLB + // + this.ApplicationUriLB.AutoSize = true; + this.ApplicationUriLB.Location = new System.Drawing.Point(5, 115); + this.ApplicationUriLB.Name = "ApplicationUriLB"; + this.ApplicationUriLB.Size = new System.Drawing.Size(81, 13); + this.ApplicationUriLB.TabIndex = 5; + this.ApplicationUriLB.Text = "Application URI"; + this.ApplicationUriLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationUriTB + // + this.ApplicationUriTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ApplicationUriTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ApplicationUriTB.Location = new System.Drawing.Point(96, 112); + this.ApplicationUriTB.Name = "ApplicationUriTB"; + this.ApplicationUriTB.ReadOnly = true; + this.ApplicationUriTB.Size = new System.Drawing.Size(608, 20); + this.ApplicationUriTB.TabIndex = 6; + // + // SubjectNameLB + // + this.SubjectNameLB.AutoSize = true; + this.SubjectNameLB.Location = new System.Drawing.Point(5, 167); + this.SubjectNameLB.Name = "SubjectNameLB"; + this.SubjectNameLB.Size = new System.Drawing.Size(74, 13); + this.SubjectNameLB.TabIndex = 9; + this.SubjectNameLB.Text = "Subject Name"; + this.SubjectNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SubjectNameTB + // + this.SubjectNameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SubjectNameTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SubjectNameTB.Location = new System.Drawing.Point(96, 164); + this.SubjectNameTB.Name = "SubjectNameTB"; + this.SubjectNameTB.ReadOnly = true; + this.SubjectNameTB.Size = new System.Drawing.Size(608, 20); + this.SubjectNameTB.TabIndex = 10; + // + // DomainsLB + // + this.DomainsLB.AutoSize = true; + this.DomainsLB.Location = new System.Drawing.Point(5, 141); + this.DomainsLB.Name = "DomainsLB"; + this.DomainsLB.Size = new System.Drawing.Size(48, 13); + this.DomainsLB.TabIndex = 7; + this.DomainsLB.Text = "Domains"; + this.DomainsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DomainsTB + // + this.DomainsTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DomainsTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.DomainsTB.Location = new System.Drawing.Point(96, 138); + this.DomainsTB.Name = "DomainsTB"; + this.DomainsTB.ReadOnly = true; + this.DomainsTB.Size = new System.Drawing.Size(608, 20); + this.DomainsTB.TabIndex = 8; + // + // MainPN + // + this.MainPN.Controls.Add(this.ValidToTB); + this.MainPN.Controls.Add(this.ValidToLB); + this.MainPN.Controls.Add(this.ValidFromTB); + this.MainPN.Controls.Add(this.ValidFromLB); + this.MainPN.Controls.Add(this.ThumbprintTB); + this.MainPN.Controls.Add(this.ThumbprintLB); + this.MainPN.Controls.Add(this.IssuerNameTB); + this.MainPN.Controls.Add(this.IssuerNameLB); + this.MainPN.Controls.Add(this.OrganizationTB); + this.MainPN.Controls.Add(this.OrganizationLB); + this.MainPN.Controls.Add(this.CertificateStoreCTRL); + this.MainPN.Controls.Add(this.DomainsTB); + this.MainPN.Controls.Add(this.DomainsLB); + this.MainPN.Controls.Add(this.SubjectNameTB); + this.MainPN.Controls.Add(this.SubjectNameLB); + this.MainPN.Controls.Add(this.ApplicationUriTB); + this.MainPN.Controls.Add(this.ApplicationUriLB); + this.MainPN.Controls.Add(this.ApplicationNameTB); + this.MainPN.Controls.Add(this.ApplicationNameLB); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(708, 291); + this.MainPN.TabIndex = 1; + // + // ValidToTB + // + this.ValidToTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ValidToTB.Location = new System.Drawing.Point(96, 242); + this.ValidToTB.Name = "ValidToTB"; + this.ValidToTB.ReadOnly = true; + this.ValidToTB.Size = new System.Drawing.Size(156, 20); + this.ValidToTB.TabIndex = 16; + // + // ValidToLB + // + this.ValidToLB.AutoSize = true; + this.ValidToLB.Location = new System.Drawing.Point(5, 245); + this.ValidToLB.Name = "ValidToLB"; + this.ValidToLB.Size = new System.Drawing.Size(46, 13); + this.ValidToLB.TabIndex = 15; + this.ValidToLB.Text = "Valid To"; + this.ValidToLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ValidFromTB + // + this.ValidFromTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ValidFromTB.Location = new System.Drawing.Point(96, 216); + this.ValidFromTB.Name = "ValidFromTB"; + this.ValidFromTB.ReadOnly = true; + this.ValidFromTB.Size = new System.Drawing.Size(156, 20); + this.ValidFromTB.TabIndex = 14; + // + // ValidFromLB + // + this.ValidFromLB.AutoSize = true; + this.ValidFromLB.Location = new System.Drawing.Point(5, 219); + this.ValidFromLB.Name = "ValidFromLB"; + this.ValidFromLB.Size = new System.Drawing.Size(56, 13); + this.ValidFromLB.TabIndex = 13; + this.ValidFromLB.Text = "Valid From"; + this.ValidFromLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ThumbprintTB + // + this.ThumbprintTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ThumbprintTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ThumbprintTB.Location = new System.Drawing.Point(96, 268); + this.ThumbprintTB.Name = "ThumbprintTB"; + this.ThumbprintTB.ReadOnly = true; + this.ThumbprintTB.Size = new System.Drawing.Size(609, 20); + this.ThumbprintTB.TabIndex = 18; + // + // ThumbprintLB + // + this.ThumbprintLB.AutoSize = true; + this.ThumbprintLB.Location = new System.Drawing.Point(5, 271); + this.ThumbprintLB.Name = "ThumbprintLB"; + this.ThumbprintLB.Size = new System.Drawing.Size(60, 13); + this.ThumbprintLB.TabIndex = 17; + this.ThumbprintLB.Text = "Thumbprint"; + this.ThumbprintLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // IssuerNameTB + // + this.IssuerNameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.IssuerNameTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.IssuerNameTB.Location = new System.Drawing.Point(96, 190); + this.IssuerNameTB.Name = "IssuerNameTB"; + this.IssuerNameTB.ReadOnly = true; + this.IssuerNameTB.Size = new System.Drawing.Size(608, 20); + this.IssuerNameTB.TabIndex = 12; + // + // IssuerNameLB + // + this.IssuerNameLB.AutoSize = true; + this.IssuerNameLB.Location = new System.Drawing.Point(5, 193); + this.IssuerNameLB.Name = "IssuerNameLB"; + this.IssuerNameLB.Size = new System.Drawing.Size(66, 13); + this.IssuerNameLB.TabIndex = 11; + this.IssuerNameLB.Text = "Issuer Name"; + this.IssuerNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // OrganizationTB + // + this.OrganizationTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OrganizationTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.OrganizationTB.Location = new System.Drawing.Point(96, 86); + this.OrganizationTB.Name = "OrganizationTB"; + this.OrganizationTB.ReadOnly = true; + this.OrganizationTB.Size = new System.Drawing.Size(608, 20); + this.OrganizationTB.TabIndex = 4; + // + // OrganizationLB + // + this.OrganizationLB.AutoSize = true; + this.OrganizationLB.Location = new System.Drawing.Point(5, 89); + this.OrganizationLB.Name = "OrganizationLB"; + this.OrganizationLB.Size = new System.Drawing.Size(66, 13); + this.OrganizationLB.TabIndex = 3; + this.OrganizationLB.Text = "Organization"; + this.OrganizationLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // CertificateStoreCTRL + // + this.CertificateStoreCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CertificateStoreCTRL.LabelWidth = 91; + this.CertificateStoreCTRL.Location = new System.Drawing.Point(4, 6); + this.CertificateStoreCTRL.MinimumSize = new System.Drawing.Size(300, 51); + this.CertificateStoreCTRL.Name = "CertificateStoreCTRL"; + this.CertificateStoreCTRL.Size = new System.Drawing.Size(699, 51); + this.CertificateStoreCTRL.StorePath = "X:\\OPC\\Source\\UA311\\Source\\Utilities\\CertificateGenerator"; + this.CertificateStoreCTRL.TabIndex = 0; + // + // ViewCertificateDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(708, 322); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "ViewCertificateDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "View Certificate"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Label ApplicationNameLB; + private System.Windows.Forms.TextBox ApplicationNameTB; + private System.Windows.Forms.Label ApplicationUriLB; + private System.Windows.Forms.TextBox ApplicationUriTB; + private System.Windows.Forms.Label SubjectNameLB; + private System.Windows.Forms.TextBox SubjectNameTB; + private System.Windows.Forms.Label DomainsLB; + private System.Windows.Forms.TextBox DomainsTB; + private System.Windows.Forms.Panel MainPN; + private CertificateStoreCtrl CertificateStoreCTRL; + private System.Windows.Forms.TextBox OrganizationTB; + private System.Windows.Forms.Label OrganizationLB; + private System.Windows.Forms.Label ValidFromLB; + private System.Windows.Forms.TextBox ThumbprintTB; + private System.Windows.Forms.Label ThumbprintLB; + private System.Windows.Forms.TextBox IssuerNameTB; + private System.Windows.Forms.Label IssuerNameLB; + private System.Windows.Forms.TextBox ValidToTB; + private System.Windows.Forms.Label ValidToLB; + private System.Windows.Forms.TextBox ValidFromTB; + private System.Windows.Forms.Button DetailsBTN; + private System.Windows.Forms.Button ExportBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.cs new file mode 100644 index 00000000..a39c19c9 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.cs @@ -0,0 +1,286 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Text; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Windows.Forms; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to specify a new access rule for a file. + /// + public partial class ViewCertificateDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public ViewCertificateDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private string m_currentDirectory; + private CertificateIdentifier m_certificate; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public async Task ShowDialog(CertificateIdentifier certificate) + { + m_certificate = certificate; + + CertificateStoreCTRL.StoreType = null; + CertificateStoreCTRL.StorePath = null; + CertificateStoreCTRL.ReadOnly = true; + ApplicationNameTB.Text = null; + ApplicationUriTB.Text = null; + OrganizationTB.Text = null; + DomainsTB.Text = System.Net.Dns.GetHostName(); + SubjectNameTB.Text = null; + IssuerNameTB.Text = null; + ValidFromTB.Text = null; + ValidToTB.Text = null; + ThumbprintTB.Text = null; + + if (certificate != null) + { + CertificateStoreCTRL.StoreType = certificate.StoreType; + CertificateStoreCTRL.StorePath = certificate.StorePath; + SubjectNameTB.Text = certificate.SubjectName; + ThumbprintTB.Text = certificate.Thumbprint; + + X509Certificate2 data = await certificate.Find(); + + if (data != null) + { + // fill in subject name. + StringBuilder buffer = new StringBuilder(); + + foreach (string element in X509Utils.ParseDistinguishedName(data.Subject)) + { + if (element.StartsWith("CN=")) + { + ApplicationNameTB.Text = element.Substring(3); + } + + if (element.StartsWith("O=")) + { + + OrganizationTB.Text = element.Substring(2); + } + + if (buffer.Length > 0) + { + buffer.Append('/'); + } + + buffer.Append(element); + } + + if (buffer.Length > 0) + { + SubjectNameTB.Text = buffer.ToString(); + } + + // fill in issuer name. + buffer = new StringBuilder(); + + foreach (string element in X509Utils.ParseDistinguishedName(data.Issuer)) + { + if (buffer.Length > 0) + { + buffer.Append('/'); + } + + buffer.Append(element); + } + + if (buffer.Length > 0) + { + IssuerNameTB.Text = buffer.ToString(); + } + + // fill in application uri. + string applicationUri = X509Utils.GetApplicationUriFromCertificate(data); + + if (!String.IsNullOrEmpty(applicationUri)) + { + ApplicationUriTB.Text = applicationUri; + } + + // fill in domains. + buffer = new StringBuilder(); + + foreach (string domain in X509Utils.GetDomainsFromCertficate(data)) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + buffer.Append(domain); + } + + if (buffer.Length > 0) + { + DomainsTB.Text = buffer.ToString(); + } + + ValidFromTB.Text = data.NotBefore.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"); + ValidToTB.Text = data.NotAfter.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"); + ThumbprintTB.Text = data.Thumbprint; + } + } + + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + return true; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, System.Reflection.MethodBase.GetCurrentMethod(), exception); + } + } + + private async void DetailsBTN_Click(object sender, EventArgs e) + { + try + { + await new CertificateDlg().ShowDialog(m_certificate); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, System.Reflection.MethodBase.GetCurrentMethod(), exception); + } + } + + private async void ExportBTN_Click(object sender, EventArgs e) + { + try + { + const string caption = "Export Certificate"; + + if (m_currentDirectory == null) + { + m_currentDirectory = Utils.GetAbsoluteDirectoryPath("%LocalApplicationData%", false, false, false); + } + + if (m_currentDirectory == null) + { + m_currentDirectory = Environment.CurrentDirectory; + } + + X509Certificate2 certificate = await m_certificate.Find(); + + if (certificate == null) + { + MessageBox.Show("Cannot export an invalid certificate.", caption, MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + string displayName = null; + + foreach (string element in X509Utils.ParseDistinguishedName(certificate.Subject)) + { + if (element.StartsWith("CN=")) + { + displayName = element.Substring(3); + break; + } + } + + StringBuilder filePath = new StringBuilder(); + + if (!String.IsNullOrEmpty(displayName)) + { + filePath.Append(displayName); + filePath.Append(" "); + } + + filePath.Append("["); + filePath.Append(certificate.Thumbprint); + filePath.Append("].der"); + + SaveFileDialog dialog = new SaveFileDialog(); + + dialog.CheckFileExists = false; + dialog.CheckPathExists = true; + dialog.DefaultExt = ".der"; + dialog.Filter = "Certificate Files (*.der)|*.der|All Files (*.*)|*.*"; + dialog.ValidateNames = true; + dialog.Title = "Save Certificate File"; + dialog.FileName = filePath.ToString(); + dialog.InitialDirectory = m_currentDirectory; + + if (dialog.ShowDialog() != DialogResult.OK) + { + return; + } + + FileInfo fileInfo = new FileInfo(dialog.FileName); + m_currentDirectory = fileInfo.DirectoryName; + + // save the file. + using (Stream ostrm = fileInfo.Open(FileMode.Create, FileAccess.ReadWrite, FileShare.None)) + { + byte[] data = certificate.RawData; + ostrm.Write(data, 0, data.Length); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, System.Reflection.MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/ViewCertificateDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.Designer.cs new file mode 100644 index 00000000..fd246d78 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.Designer.cs @@ -0,0 +1,166 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class YesNoDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.YesToAllBTN = new System.Windows.Forms.Button(); + this.YesBTN = new System.Windows.Forms.Button(); + this.NoBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.MessageLB = new System.Windows.Forms.Label(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.YesToAllBTN); + this.ButtonsPN.Controls.Add(this.YesBTN); + this.ButtonsPN.Controls.Add(this.NoBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 21); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(242, 31); + this.ButtonsPN.TabIndex = 0; + // + // YesToAllBTN + // + this.YesToAllBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.YesToAllBTN.DialogResult = System.Windows.Forms.DialogResult.Retry; + this.YesToAllBTN.Location = new System.Drawing.Point(84, 4); + this.YesToAllBTN.Name = "YesToAllBTN"; + this.YesToAllBTN.Size = new System.Drawing.Size(75, 23); + this.YesToAllBTN.TabIndex = 2; + this.YesToAllBTN.Text = "Yes To All"; + this.YesToAllBTN.UseVisualStyleBackColor = true; + // + // YesBTN + // + this.YesBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.YesBTN.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.YesBTN.Location = new System.Drawing.Point(4, 4); + this.YesBTN.Name = "YesBTN"; + this.YesBTN.Size = new System.Drawing.Size(75, 23); + this.YesBTN.TabIndex = 0; + this.YesBTN.Text = "Yes"; + this.YesBTN.UseVisualStyleBackColor = true; + // + // NoBTN + // + this.NoBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.NoBTN.DialogResult = System.Windows.Forms.DialogResult.No; + this.NoBTN.Location = new System.Drawing.Point(163, 4); + this.NoBTN.Name = "NoBTN"; + this.NoBTN.Size = new System.Drawing.Size(75, 23); + this.NoBTN.TabIndex = 1; + this.NoBTN.Text = "No"; + this.NoBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.Controls.Add(this.MessageLB); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(3, 3, 3, 0); + this.MainPN.Size = new System.Drawing.Size(242, 21); + this.MainPN.TabIndex = 1; + // + // MessageLB + // + this.MessageLB.AutoSize = true; + this.MessageLB.Dock = System.Windows.Forms.DockStyle.Fill; + this.MessageLB.Location = new System.Drawing.Point(3, 3); + this.MessageLB.Name = "MessageLB"; + this.MessageLB.Size = new System.Drawing.Size(35, 13); + this.MessageLB.TabIndex = 0; + this.MessageLB.Text = "label1"; + // + // YesNoDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.NoBTN; + this.ClientSize = new System.Drawing.Size(242, 52); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "YesNoDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Caption"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button YesBTN; + private System.Windows.Forms.Button NoBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.Label MessageLB; + private System.Windows.Forms.Button YesToAllBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.cs new file mode 100644 index 00000000..5a25c7cf --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.cs @@ -0,0 +1,74 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to answer a yes-no question. + /// + public partial class YesNoDlg : Form + { + /// + /// Contructs the object. + /// + public YesNoDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + + /// + /// Displays the dialog. + /// + public DialogResult ShowDialog(string message, string caption) + { + return ShowDialog(message, caption, false); + } + + /// + /// Displays the dialog. + /// + public DialogResult ShowDialog(string message, string caption, bool yesToAll) + { + this.YesToAllBTN.Visible = yesToAll; + this.Text = caption; + this.MessageLB.Text = message; + return ShowDialog(); + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Configuration/YesNoDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.Designer.cs new file mode 100644 index 00000000..27f1d993 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.Designer.cs @@ -0,0 +1,510 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ConfiguredServerDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.RefreshBTN = new System.Windows.Forms.Button(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.UserSecurityPoliciesLB = new System.Windows.Forms.Label(); + this.UserSecurityPoliciesTB = new System.Windows.Forms.TextBox(); + this.DiscoveryProfileURI = new System.Windows.Forms.Label(); + this.GatewayServerURI = new System.Windows.Forms.Label(); + this.DiscoveryProfileUriTB = new System.Windows.Forms.TextBox(); + this.GatewayServerUriTB = new System.Windows.Forms.TextBox(); + this.EndpointListLB = new System.Windows.Forms.ListBox(); + this.TransportProfileUriLB = new System.Windows.Forms.Label(); + this.ProductUriLB = new System.Windows.Forms.Label(); + this.ApplicationUriLB = new System.Windows.Forms.Label(); + this.ApplicationTypeLB = new System.Windows.Forms.Label(); + this.ApplicationNameLB = new System.Windows.Forms.Label(); + this.TransportProfileUriTB = new System.Windows.Forms.TextBox(); + this.ProductUriTB = new System.Windows.Forms.TextBox(); + this.ApplicationUriTB = new System.Windows.Forms.TextBox(); + this.ApplicationTypeTB = new System.Windows.Forms.TextBox(); + this.ApplicationNameTB = new System.Windows.Forms.TextBox(); + this.StatusTB = new System.Windows.Forms.TextBox(); + this.EncodingCB = new System.Windows.Forms.ComboBox(); + this.SecurityModeCB = new System.Windows.Forms.ComboBox(); + this.SecurityPolicyCB = new System.Windows.Forms.ComboBox(); + this.ProtocolCB = new System.Windows.Forms.ComboBox(); + this.EncodingLB = new System.Windows.Forms.Label(); + this.SecurityModeLB = new System.Windows.Forms.Label(); + this.SecurityPolicyLB = new System.Windows.Forms.Label(); + this.ProtocolLB = new System.Windows.Forms.Label(); + this.SecurityLevelLB = new System.Windows.Forms.Label(); + this.SecurityLevelTB = new System.Windows.Forms.TextBox(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.RefreshBTN); + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 370); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(799, 31); + this.ButtonsPN.TabIndex = 0; + // + // RefreshBTN + // + this.RefreshBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.RefreshBTN.Location = new System.Drawing.Point(362, 4); + this.RefreshBTN.Name = "RefreshBTN"; + this.RefreshBTN.Size = new System.Drawing.Size(75, 23); + this.RefreshBTN.TabIndex = 2; + this.RefreshBTN.Text = "Refresh"; + this.RefreshBTN.UseVisualStyleBackColor = true; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(720, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.SecurityLevelTB); + this.MainPN.Controls.Add(this.SecurityLevelLB); + this.MainPN.Controls.Add(this.UserSecurityPoliciesLB); + this.MainPN.Controls.Add(this.UserSecurityPoliciesTB); + this.MainPN.Controls.Add(this.DiscoveryProfileURI); + this.MainPN.Controls.Add(this.GatewayServerURI); + this.MainPN.Controls.Add(this.DiscoveryProfileUriTB); + this.MainPN.Controls.Add(this.GatewayServerUriTB); + this.MainPN.Controls.Add(this.EndpointListLB); + this.MainPN.Controls.Add(this.TransportProfileUriLB); + this.MainPN.Controls.Add(this.ProductUriLB); + this.MainPN.Controls.Add(this.ApplicationUriLB); + this.MainPN.Controls.Add(this.ApplicationTypeLB); + this.MainPN.Controls.Add(this.ApplicationNameLB); + this.MainPN.Controls.Add(this.TransportProfileUriTB); + this.MainPN.Controls.Add(this.ProductUriTB); + this.MainPN.Controls.Add(this.ApplicationUriTB); + this.MainPN.Controls.Add(this.ApplicationTypeTB); + this.MainPN.Controls.Add(this.ApplicationNameTB); + this.MainPN.Controls.Add(this.StatusTB); + this.MainPN.Controls.Add(this.EncodingCB); + this.MainPN.Controls.Add(this.SecurityModeCB); + this.MainPN.Controls.Add(this.SecurityPolicyCB); + this.MainPN.Controls.Add(this.ProtocolCB); + this.MainPN.Controls.Add(this.EncodingLB); + this.MainPN.Controls.Add(this.SecurityModeLB); + this.MainPN.Controls.Add(this.SecurityPolicyLB); + this.MainPN.Controls.Add(this.ProtocolLB); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(799, 401); + this.MainPN.TabIndex = 0; + // + // UserSecurityPoliciesLB + // + this.UserSecurityPoliciesLB.AutoSize = true; + this.UserSecurityPoliciesLB.Location = new System.Drawing.Point(368, 299); + this.UserSecurityPoliciesLB.Name = "UserSecurityPoliciesLB"; + this.UserSecurityPoliciesLB.Size = new System.Drawing.Size(109, 13); + this.UserSecurityPoliciesLB.TabIndex = 38; + this.UserSecurityPoliciesLB.Text = "User Security Policies"; + this.UserSecurityPoliciesLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserSecurityPoliciesTB + // + this.UserSecurityPoliciesTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UserSecurityPoliciesTB.Location = new System.Drawing.Point(487, 296); + this.UserSecurityPoliciesTB.Name = "UserSecurityPoliciesTB"; + this.UserSecurityPoliciesTB.ReadOnly = true; + this.UserSecurityPoliciesTB.Size = new System.Drawing.Size(300, 20); + this.UserSecurityPoliciesTB.TabIndex = 37; + // + // DiscoveryProfileURI + // + this.DiscoveryProfileURI.AutoSize = true; + this.DiscoveryProfileURI.Location = new System.Drawing.Point(368, 273); + this.DiscoveryProfileURI.Name = "DiscoveryProfileURI"; + this.DiscoveryProfileURI.Size = new System.Drawing.Size(108, 13); + this.DiscoveryProfileURI.TabIndex = 36; + this.DiscoveryProfileURI.Text = "Discovery Profile URI"; + this.DiscoveryProfileURI.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // GatewayServerURI + // + this.GatewayServerURI.AutoSize = true; + this.GatewayServerURI.Location = new System.Drawing.Point(368, 247); + this.GatewayServerURI.Name = "GatewayServerURI"; + this.GatewayServerURI.Size = new System.Drawing.Size(105, 13); + this.GatewayServerURI.TabIndex = 35; + this.GatewayServerURI.Text = "Gateway Server URI"; + this.GatewayServerURI.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // DiscoveryProfileUriTB + // + this.DiscoveryProfileUriTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DiscoveryProfileUriTB.Location = new System.Drawing.Point(487, 270); + this.DiscoveryProfileUriTB.Name = "DiscoveryProfileUriTB"; + this.DiscoveryProfileUriTB.ReadOnly = true; + this.DiscoveryProfileUriTB.Size = new System.Drawing.Size(300, 20); + this.DiscoveryProfileUriTB.TabIndex = 34; + // + // GatewayServerUriTB + // + this.GatewayServerUriTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.GatewayServerUriTB.Location = new System.Drawing.Point(487, 244); + this.GatewayServerUriTB.Name = "GatewayServerUriTB"; + this.GatewayServerUriTB.ReadOnly = true; + this.GatewayServerUriTB.Size = new System.Drawing.Size(300, 20); + this.GatewayServerUriTB.TabIndex = 33; + // + // EndpointListLB + // + this.EndpointListLB.FormattingEnabled = true; + this.EndpointListLB.HorizontalScrollbar = true; + this.EndpointListLB.Location = new System.Drawing.Point(12, 12); + this.EndpointListLB.Name = "EndpointListLB"; + this.EndpointListLB.Size = new System.Drawing.Size(350, 329); + this.EndpointListLB.TabIndex = 32; + this.EndpointListLB.SelectedIndexChanged += new System.EventHandler(this.EndpointListLB_SelectedIndexChanged); + // + // TransportProfileUriLB + // + this.TransportProfileUriLB.AutoSize = true; + this.TransportProfileUriLB.Location = new System.Drawing.Point(368, 221); + this.TransportProfileUriLB.Name = "TransportProfileUriLB"; + this.TransportProfileUriLB.Size = new System.Drawing.Size(106, 13); + this.TransportProfileUriLB.TabIndex = 31; + this.TransportProfileUriLB.Text = "Transport Profile URI"; + this.TransportProfileUriLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ProductUriLB + // + this.ProductUriLB.AutoSize = true; + this.ProductUriLB.Location = new System.Drawing.Point(368, 195); + this.ProductUriLB.Name = "ProductUriLB"; + this.ProductUriLB.Size = new System.Drawing.Size(66, 13); + this.ProductUriLB.TabIndex = 30; + this.ProductUriLB.Text = "Product URI"; + this.ProductUriLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationUriLB + // + this.ApplicationUriLB.AutoSize = true; + this.ApplicationUriLB.Location = new System.Drawing.Point(368, 169); + this.ApplicationUriLB.Name = "ApplicationUriLB"; + this.ApplicationUriLB.Size = new System.Drawing.Size(81, 13); + this.ApplicationUriLB.TabIndex = 29; + this.ApplicationUriLB.Text = "Application URI"; + this.ApplicationUriLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationTypeLB + // + this.ApplicationTypeLB.AutoSize = true; + this.ApplicationTypeLB.Location = new System.Drawing.Point(368, 143); + this.ApplicationTypeLB.Name = "ApplicationTypeLB"; + this.ApplicationTypeLB.Size = new System.Drawing.Size(86, 13); + this.ApplicationTypeLB.TabIndex = 28; + this.ApplicationTypeLB.Text = "Application Type"; + this.ApplicationTypeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ApplicationNameLB + // + this.ApplicationNameLB.AutoSize = true; + this.ApplicationNameLB.Location = new System.Drawing.Point(368, 117); + this.ApplicationNameLB.Name = "ApplicationNameLB"; + this.ApplicationNameLB.Size = new System.Drawing.Size(90, 13); + this.ApplicationNameLB.TabIndex = 27; + this.ApplicationNameLB.Text = "Application Name"; + this.ApplicationNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TransportProfileUriTB + // + this.TransportProfileUriTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TransportProfileUriTB.Location = new System.Drawing.Point(487, 218); + this.TransportProfileUriTB.Name = "TransportProfileUriTB"; + this.TransportProfileUriTB.ReadOnly = true; + this.TransportProfileUriTB.Size = new System.Drawing.Size(300, 20); + this.TransportProfileUriTB.TabIndex = 26; + // + // ProductUriTB + // + this.ProductUriTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ProductUriTB.Location = new System.Drawing.Point(487, 192); + this.ProductUriTB.Name = "ProductUriTB"; + this.ProductUriTB.ReadOnly = true; + this.ProductUriTB.Size = new System.Drawing.Size(300, 20); + this.ProductUriTB.TabIndex = 25; + // + // ApplicationUriTB + // + this.ApplicationUriTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ApplicationUriTB.Location = new System.Drawing.Point(487, 166); + this.ApplicationUriTB.Name = "ApplicationUriTB"; + this.ApplicationUriTB.ReadOnly = true; + this.ApplicationUriTB.Size = new System.Drawing.Size(300, 20); + this.ApplicationUriTB.TabIndex = 24; + // + // ApplicationTypeTB + // + this.ApplicationTypeTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ApplicationTypeTB.Location = new System.Drawing.Point(487, 140); + this.ApplicationTypeTB.Name = "ApplicationTypeTB"; + this.ApplicationTypeTB.ReadOnly = true; + this.ApplicationTypeTB.Size = new System.Drawing.Size(300, 20); + this.ApplicationTypeTB.TabIndex = 23; + // + // ApplicationNameTB + // + this.ApplicationNameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ApplicationNameTB.Location = new System.Drawing.Point(487, 114); + this.ApplicationNameTB.Name = "ApplicationNameTB"; + this.ApplicationNameTB.ReadOnly = true; + this.ApplicationNameTB.Size = new System.Drawing.Size(300, 20); + this.ApplicationNameTB.TabIndex = 22; + // + // StatusTB + // + this.StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusTB.Location = new System.Drawing.Point(12, 347); + this.StatusTB.Name = "StatusTB"; + this.StatusTB.ReadOnly = true; + this.StatusTB.Size = new System.Drawing.Size(775, 20); + this.StatusTB.TabIndex = 21; + // + // EncodingCB + // + this.EncodingCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.EncodingCB.FormattingEnabled = true; + this.EncodingCB.Location = new System.Drawing.Point(487, 87); + this.EncodingCB.Name = "EncodingCB"; + this.EncodingCB.Size = new System.Drawing.Size(181, 21); + this.EncodingCB.TabIndex = 7; + // + // SecurityModeCB + // + this.SecurityModeCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.SecurityModeCB.FormattingEnabled = true; + this.SecurityModeCB.Location = new System.Drawing.Point(487, 33); + this.SecurityModeCB.Name = "SecurityModeCB"; + this.SecurityModeCB.Size = new System.Drawing.Size(181, 21); + this.SecurityModeCB.TabIndex = 3; + this.SecurityModeCB.SelectedIndexChanged += new System.EventHandler(this.SecurityModeCB_SelectedIndexChanged); + // + // SecurityPolicyCB + // + this.SecurityPolicyCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.SecurityPolicyCB.FormattingEnabled = true; + this.SecurityPolicyCB.Location = new System.Drawing.Point(487, 60); + this.SecurityPolicyCB.Name = "SecurityPolicyCB"; + this.SecurityPolicyCB.Size = new System.Drawing.Size(181, 21); + this.SecurityPolicyCB.TabIndex = 5; + this.SecurityPolicyCB.SelectedIndexChanged += new System.EventHandler(this.SecurityPolicyCB_SelectedIndexChanged); + // + // ProtocolCB + // + this.ProtocolCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ProtocolCB.FormattingEnabled = true; + this.ProtocolCB.Location = new System.Drawing.Point(487, 6); + this.ProtocolCB.Name = "ProtocolCB"; + this.ProtocolCB.Size = new System.Drawing.Size(181, 21); + this.ProtocolCB.TabIndex = 1; + this.ProtocolCB.SelectedIndexChanged += new System.EventHandler(this.ProtocolCB_SelectedIndexChanged); + // + // EncodingLB + // + this.EncodingLB.AutoSize = true; + this.EncodingLB.Location = new System.Drawing.Point(368, 90); + this.EncodingLB.Name = "EncodingLB"; + this.EncodingLB.Size = new System.Drawing.Size(98, 13); + this.EncodingLB.TabIndex = 6; + this.EncodingLB.Text = "Message Encoding"; + this.EncodingLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SecurityModeLB + // + this.SecurityModeLB.AutoSize = true; + this.SecurityModeLB.Location = new System.Drawing.Point(368, 36); + this.SecurityModeLB.Name = "SecurityModeLB"; + this.SecurityModeLB.Size = new System.Drawing.Size(75, 13); + this.SecurityModeLB.TabIndex = 2; + this.SecurityModeLB.Text = "Security Mode"; + this.SecurityModeLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SecurityPolicyLB + // + this.SecurityPolicyLB.AutoSize = true; + this.SecurityPolicyLB.Location = new System.Drawing.Point(368, 63); + this.SecurityPolicyLB.Name = "SecurityPolicyLB"; + this.SecurityPolicyLB.Size = new System.Drawing.Size(76, 13); + this.SecurityPolicyLB.TabIndex = 4; + this.SecurityPolicyLB.Text = "Security Policy"; + this.SecurityPolicyLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ProtocolLB + // + this.ProtocolLB.AutoSize = true; + this.ProtocolLB.Location = new System.Drawing.Point(368, 9); + this.ProtocolLB.Name = "ProtocolLB"; + this.ProtocolLB.Size = new System.Drawing.Size(46, 13); + this.ProtocolLB.TabIndex = 0; + this.ProtocolLB.Text = "Protocol"; + this.ProtocolLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SecurityLevelLB + // + this.SecurityLevelLB.AutoSize = true; + this.SecurityLevelLB.Location = new System.Drawing.Point(368, 325); + this.SecurityLevelLB.Name = "SecurityLevelLB"; + this.SecurityLevelLB.Size = new System.Drawing.Size(71, 13); + this.SecurityLevelLB.TabIndex = 39; + this.SecurityLevelLB.Text = "SecurityLevel"; + this.SecurityLevelLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // SecurityLevelTB + // + this.SecurityLevelTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SecurityLevelTB.Location = new System.Drawing.Point(487, 322); + this.SecurityLevelTB.Name = "SecurityLevelTB"; + this.SecurityLevelTB.ReadOnly = true; + this.SecurityLevelTB.Size = new System.Drawing.Size(300, 20); + this.SecurityLevelTB.TabIndex = 40; + // + // ConfiguredServerDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(799, 401); + this.Controls.Add(this.ButtonsPN); + this.Controls.Add(this.MainPN); + this.MaximumSize = new System.Drawing.Size(1920, 439); + this.MinimumSize = new System.Drawing.Size(16, 439); + this.Name = "ConfiguredServerDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Server Configuration"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.MainPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.Label ProtocolLB; + private System.Windows.Forms.Label SecurityPolicyLB; + private System.Windows.Forms.Label EncodingLB; + private System.Windows.Forms.Label SecurityModeLB; + private System.Windows.Forms.ComboBox ProtocolCB; + private System.Windows.Forms.ComboBox SecurityPolicyCB; + private System.Windows.Forms.ComboBox SecurityModeCB; + private System.Windows.Forms.ComboBox EncodingCB; + private System.Windows.Forms.Button RefreshBTN; + private System.Windows.Forms.TextBox StatusTB; + private System.Windows.Forms.Label ApplicationNameLB; + private System.Windows.Forms.TextBox TransportProfileUriTB; + private System.Windows.Forms.TextBox ProductUriTB; + private System.Windows.Forms.TextBox ApplicationUriTB; + private System.Windows.Forms.TextBox ApplicationTypeTB; + private System.Windows.Forms.TextBox ApplicationNameTB; + private System.Windows.Forms.Label TransportProfileUriLB; + private System.Windows.Forms.Label ProductUriLB; + private System.Windows.Forms.Label ApplicationUriLB; + private System.Windows.Forms.Label ApplicationTypeLB; + private System.Windows.Forms.ListBox EndpointListLB; + private System.Windows.Forms.Label DiscoveryProfileURI; + private System.Windows.Forms.Label GatewayServerURI; + private System.Windows.Forms.TextBox DiscoveryProfileUriTB; + private System.Windows.Forms.TextBox GatewayServerUriTB; + private System.Windows.Forms.Label UserSecurityPoliciesLB; + private System.Windows.Forms.TextBox UserSecurityPoliciesTB; + private System.Windows.Forms.TextBox SecurityLevelTB; + private System.Windows.Forms.Label SecurityLevelLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs new file mode 100644 index 00000000..cb7b99fd --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs @@ -0,0 +1,1832 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Threading; +using System.Security.Cryptography.X509Certificates; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to edit a ComPseudoServerDlg. + /// + public partial class ConfiguredServerDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public ConfiguredServerDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + + m_userIdentities = new Dictionary(); + m_statusObject = new StatusObject((int)StatusChannel.MaxStatusChannels); + } + #endregion + + #region Private Fields + /// + /// The possible encodings. + /// + private enum Encoding + { + Default, + Xml, + Binary + } + + /// + /// The type of status (for coloring the status textbox). + /// + private enum StatusType + { + Ok = 0, + Warning = 1, + Error = 2 + } + + /// + /// The status channel inside the StatusObject. + /// + private enum StatusChannel + { + Discovery = 0, + SelectedSecurityMode = 1, + ApplicationType = 2, + SelectedProtocol = 3, + ApplicationUri = 4, + DiscoveryURLs = 5, + Server = 6, + DifferentCertificate = 7, + SecurityPolicyUri = 8, + TransportProfileUri = 9, + SelectedSecurityPolicy = 10, + MaxStatusChannels = 11 + } + + /// + /// Whether to override limits + /// + private enum UseDefaultLimits + { + Yes, + No + } + + /// + /// This class merges multiple error/warning/status codes from multiple sources. + /// Initialize it with the number of status channels and update "StatusChannel" accordingly. + /// Provides a general view of all the statuses (joined texts, worst status). + /// + private class StatusObject + { + public StatusObject(int maxChannels) + { + m_maxChannels = maxChannels; + m_statusTexts = new string[maxChannels]; + m_statusTypes = new StatusType[maxChannels]; + + for (int i = 0; i < m_maxChannels; ++i) + { + m_statusTexts[i] = String.Empty; + m_statusTypes[i] = StatusType.Ok; + } + } + + public String StatusString + { + get + { + String status = String.Empty; + + for (int i = 0; i < m_maxChannels; ++i) + { + if (!String.IsNullOrEmpty(m_statusTexts[i])) + { + if (!String.IsNullOrEmpty(status)) + { + status += " | "; + } + + status += m_statusTexts[i]; + } + } + + return status; + } + } + + public StatusType StatusType + { + get + { + StatusType type = StatusType.Ok; + + for (int i = 0; i < m_maxChannels; ++i) + { + if (m_statusTypes[i] > type) + { + type = m_statusTypes[i]; + } + } + + return type; + } + } + + public void SetStatus(StatusChannel channel, String text, StatusType type) + { + int intChannel = (int)channel; + + if ((intChannel >= 0) && (intChannel < m_maxChannels)) + { + m_statusTexts[intChannel] = text; + m_statusTypes[intChannel] = type; + } + } + + public void ClearStatus(StatusChannel channel) + { + int intChannel = (int)channel; + + if ((intChannel >= 0) && (intChannel < m_maxChannels)) + { + m_statusTexts[intChannel] = String.Empty; + m_statusTypes[intChannel] = StatusType.Ok; + } + } + + private int m_maxChannels; + private String[] m_statusTexts; + private StatusType[] m_statusTypes; + } + + /// + /// This class is used by the EndopintListLB (list box). + /// Holds references to the received EndpointDescription and its MessageSecurityMode, SecurityPolicyUri, MessageSecurityMode and EncodingSupport. + /// Also prepares a user-friendly text representation of all the endpoint-rellevant characteristics. + /// The extracted EndpointDescription properties are used in selecting the right combo-box values when user clicks in the endpoint list box. + /// + private class EndpointDescriptionString + { + public EndpointDescriptionString(EndpointDescription endpointDescription) + { + m_endpointDescription = endpointDescription; + m_protocol = new Protocol(endpointDescription); + m_currentPolicy = SecurityPolicies.GetDisplayName(endpointDescription.SecurityPolicyUri); + m_messageSecurityMode = endpointDescription.SecurityMode; + + switch (m_endpointDescription.EncodingSupport) + { + case BinaryEncodingSupport.None: + { + m_encoding = Encoding.Xml; + break; + } + + case BinaryEncodingSupport.Optional: + case BinaryEncodingSupport.Required: + { + m_encoding = Encoding.Binary; + break; + } + } + + BuildEndpointDescription(); + } + + public EndpointDescription EndpointDescription + { + get + { + return m_endpointDescription; + } + } + + public Protocol Protocol + { + get + { + return m_protocol; + } + } + + public string CurrentPolicy + { + get + { + return m_currentPolicy; + } + } + + public MessageSecurityMode MessageSecurityMode + { + get + { + return m_messageSecurityMode; + } + } + + public Encoding Encoding + { + get + { + return m_encoding; + } + } + + public override string ToString() + { + return m_stringRepresentation; + } + + private void BuildEndpointDescription() + { + m_stringRepresentation = m_protocol.ToString() + " - "; + m_stringRepresentation += m_endpointDescription.SecurityMode + " - "; + m_stringRepresentation += SecurityPolicies.GetDisplayName(m_endpointDescription.SecurityPolicyUri) + " - "; + + switch (m_endpointDescription.EncodingSupport) + { + case BinaryEncodingSupport.None: + { + m_stringRepresentation += Encoding.Xml; + break; + } + + case BinaryEncodingSupport.Required: + { + m_stringRepresentation += Encoding.Binary; + break; + } + + case BinaryEncodingSupport.Optional: + { + m_stringRepresentation += Encoding.Binary + "/" + Encoding.Xml; + break; + } + } + + } + + private Protocol m_protocol; + private EndpointDescription m_endpointDescription; + private MessageSecurityMode m_messageSecurityMode; + private string m_currentPolicy; + private Encoding m_encoding; + private string m_stringRepresentation; + } + + private ConfiguredEndpoint m_endpoint; + private EndpointDescription m_currentDescription; + private EndpointDescriptionCollection m_availableEndpoints; + private List m_availableEndpointsDescriptions; + private int m_discoveryTimeout; + private int m_discoverCount; + private ApplicationConfiguration m_configuration; + private bool m_updating; + private bool m_selecting; + private Dictionary m_userIdentities; + private EndpointConfiguration m_endpointConfiguration; + private bool m_discoverySucceeded; + private Uri m_discoveryUrl; + private bool m_showAllOptions; + private StatusObject m_statusObject; + #endregion + + #region Public Interface + public EndpointDescriptionCollection AvailableEnpoints + { + get { return m_availableEndpoints; } + } + + /// + /// The timeout in milliseconds to use when discovering servers. + /// + [System.ComponentModel.DefaultValue(20000)] + public int DiscoveryTimeout + { + get { return m_discoveryTimeout; } + set { Interlocked.Exchange(ref m_discoveryTimeout, value); } + } + /// + /// Displays the dialog. + /// + public ConfiguredEndpoint ShowDialog(ApplicationDescription server, ApplicationConfiguration configuration) + { + if (server == null) throw new ArgumentNullException("server"); + + m_configuration = configuration; + + // construct a list of available endpoint descriptions for the application. + m_availableEndpoints = new EndpointDescriptionCollection(); + m_availableEndpointsDescriptions = new List(); + m_endpointConfiguration = EndpointConfiguration.Create(configuration); + + // create a default endpoint description. + m_endpoint = null; + m_currentDescription = null; + + // initializing the protocol will trigger an update to all other controls. + InitializeProtocols(m_availableEndpoints); + BuildEndpointDescriptionStrings(m_availableEndpoints); + + // discover endpoints in the background. + m_discoverySucceeded = false; + Interlocked.Increment(ref m_discoverCount); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnDiscoverEndpoints), server); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_endpoint; + } + + /// + /// Displays the dialog. + /// + public ConfiguredEndpoint ShowDialog(ConfiguredEndpoint endpoint, ApplicationConfiguration configuration) + { + if (endpoint == null) throw new ArgumentNullException("endpoint"); + + m_endpoint = endpoint; + m_configuration = configuration; + + // construct a list of available endpoint descriptions for the application. + m_availableEndpoints = new EndpointDescriptionCollection(); + m_availableEndpointsDescriptions = new List(); + + m_availableEndpoints.Add(endpoint.Description); + m_currentDescription = endpoint.Description; + m_endpointConfiguration = endpoint.Configuration; + + if (m_endpointConfiguration == null) + { + m_endpointConfiguration = EndpointConfiguration.Create(configuration); + } + + if (endpoint.Collection != null) + { + foreach (ConfiguredEndpoint existingEndpoint in endpoint.Collection.Endpoints) + { + if (existingEndpoint.Description.Server.ApplicationUri == endpoint.Description.Server.ApplicationUri) + { + m_availableEndpoints.Add(existingEndpoint.Description); + } + } + } + + BuildEndpointDescriptionStrings(m_availableEndpoints); + + UserTokenPolicy policy = m_endpoint.SelectedUserTokenPolicy; + + if (policy == null) + { + if (m_endpoint.Description.UserIdentityTokens.Count > 0) + { + policy = m_endpoint.Description.UserIdentityTokens[0]; + } + } + + if (policy != null) + { + UserTokenItem userTokenItem = new UserTokenItem(policy); + + if (policy.TokenType == UserTokenType.UserName && m_endpoint.UserIdentity is UserNameIdentityToken) + { + m_userIdentities[userTokenItem.ToString()] = m_endpoint.UserIdentity; + } + + if (policy.TokenType == UserTokenType.Certificate && m_endpoint.UserIdentity is X509IdentityToken) + { + m_userIdentities[userTokenItem.ToString()] = m_endpoint.UserIdentity; + } + + if (policy.TokenType == UserTokenType.IssuedToken && m_endpoint.UserIdentity is IssuedIdentityToken) + { + m_userIdentities[userTokenItem.ToString()] = m_endpoint.UserIdentity; + } + } + + // initializing the protocol will trigger an update to all other controls. + InitializeProtocols(m_availableEndpoints); + + // check if the current settings match the defaults. + EndpointConfiguration defaultConfiguration = EndpointConfiguration.Create(configuration); + + // discover endpoints in the background. + Interlocked.Increment(ref m_discoverCount); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnDiscoverEndpoints), m_endpoint.Description.Server); + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_endpoint; + } + #endregion + + #region Private Methods + + /// + /// Creates the string representation of each EndpointDescription - to be used in the Endpoint Description List + /// + private void BuildEndpointDescriptionStrings(EndpointDescriptionCollection endpoints) + { + lock (m_availableEndpointsDescriptions) + { + m_availableEndpointsDescriptions.Clear(); + + foreach (EndpointDescription endpoint in endpoints) + { + m_availableEndpointsDescriptions.Add(new EndpointDescriptionString(endpoint)); + } + + InitializeEndpointList(m_availableEndpointsDescriptions); + } + } + + /// + /// Returns true if the configuration is the same as the default. + /// + private bool SameAsDefaults(EndpointConfiguration defaultConfiguration, EndpointConfiguration currentConfiguration) + { + if (defaultConfiguration.ChannelLifetime != currentConfiguration.ChannelLifetime) + { + return false; + } + + if (defaultConfiguration.MaxArrayLength != currentConfiguration.MaxArrayLength) + { + return false; + } + + if (defaultConfiguration.MaxBufferSize != currentConfiguration.MaxBufferSize) + { + return false; + } + + if (defaultConfiguration.MaxByteStringLength != currentConfiguration.MaxByteStringLength) + { + return false; + } + + if (defaultConfiguration.MaxMessageSize != currentConfiguration.MaxMessageSize) + { + return false; + } + + if (defaultConfiguration.MaxStringLength != currentConfiguration.MaxStringLength) + { + return false; + } + + if (defaultConfiguration.OperationTimeout != currentConfiguration.OperationTimeout) + { + return false; + } + + if (defaultConfiguration.SecurityTokenLifetime != currentConfiguration.SecurityTokenLifetime) + { + return false; + } + + if (defaultConfiguration.UseBinaryEncoding != currentConfiguration.UseBinaryEncoding) + { + return false; + } + + return true; + } + + /// + /// Finds the best match for the current protocol and security selections. + /// + private EndpointDescription FindBestEndpointDescription(EndpointDescriptionCollection endpoints) + { + // filter by the current protocol. + Protocol currentProtocol = (Protocol)ProtocolCB.SelectedItem; + + // filter by the current security mode. + MessageSecurityMode currentMode = MessageSecurityMode.None; + + if (SecurityModeCB.SelectedIndex != -1) + { + currentMode = (MessageSecurityMode)SecurityModeCB.SelectedItem; + } + + // filter by the current security policy. + string currentPolicy = (string)SecurityPolicyCB.SelectedItem; + + // find all matching descriptions. + EndpointDescriptionCollection matches = new EndpointDescriptionCollection(); + + if (endpoints != null) + { + foreach (EndpointDescription endpoint in endpoints) + { + Uri url = Utils.ParseUri(endpoint.EndpointUrl); + + if (url == null) + { + continue; + } + + if ((currentProtocol != null) && (!currentProtocol.Matches(url))) + { + continue; + } + + if (currentMode != endpoint.SecurityMode) + { + continue; + } + + if (currentPolicy != SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri)) + { + continue; + } + + matches.Add(endpoint); + } + } + + // check for no matches. + if (matches.Count == 0) + { + return null; + } + + // check for single match. + if (matches.Count == 1) + { + return matches[0]; + } + + // choose highest priority. + EndpointDescription bestMatch = matches[0]; + + for (int ii = 1; ii < matches.Count; ii++) + { + if (bestMatch.SecurityLevel < matches[ii].SecurityLevel) + { + bestMatch = matches[ii]; + } + } + + return bestMatch; + } + + private class Protocol + { + public Uri Url; + public string Profile; + + public Protocol(string url) + { + Url = Utils.ParseUri(url); + } + + public Protocol(EndpointDescription url) + { + Url = null; + + if (url != null) + { + Url = Utils.ParseUri(url.EndpointUrl); + + if ((Url != null) && (Url.Scheme == Utils.UriSchemeHttps)) + { + switch (url.TransportProfileUri) + { + case Profiles.HttpsBinaryTransport: + { + Profile = "REST"; + break; + } + } + } + } + } + + public bool Matches(Uri url) + { + if (url == null || Url == null) + { + return false; + } + + if (url.Scheme != Url.Scheme) + { + return false; + } + + if (url.DnsSafeHost != Url.DnsSafeHost) + { + return false; + } + + if (url.Port != Url.Port) + { + return false; + } + + return true; + } + + public override string ToString() + { + if (Url == null) + { + return String.Empty; + } + + StringBuilder builder = new StringBuilder(); + builder.Append(Url.Scheme); + + if (!String.IsNullOrEmpty(Profile)) + { + builder.Append(" "); + builder.Append(Profile); + } + + builder.Append(" ["); + builder.Append(Url.DnsSafeHost); + + if (Url.Port != -1) + { + builder.Append(":"); + builder.Append(Url.Port); + } + + builder.Append("]"); + + return builder.ToString(); + } + } + + /// + /// Initializes the protocol dropdown. + /// + private void InitializeProtocols(EndpointDescriptionCollection endpoints) + { + // preserve the existing value. + Protocol currentProtocol = (Protocol)ProtocolCB.SelectedItem; + + ProtocolCB.Items.Clear(); + + // set all available protocols. + if (m_showAllOptions) + { + ProtocolCB.Items.Add(new Protocol("http://localhost")); + ProtocolCB.Items.Add(new Protocol("https://localhost")); + ProtocolCB.Items.Add(new Protocol("opc.tcp://localhost")); + } + + // find all unique protocols. + else + { + if (endpoints != null) + { + foreach (EndpointDescription endpoint in endpoints) + { + Uri url = Utils.ParseUri(endpoint.EndpointUrl); + + if (url != null) + { + bool found = false; + + for (int ii = 0; ii < ProtocolCB.Items.Count; ii++) + { + if (((Protocol)ProtocolCB.Items[ii]).Matches(url)) + { + found = true; + break; + } + } + + if (!found) + { + ProtocolCB.Items.Add(new Protocol(endpoint)); + } + } + } + } + + // add at least one protocol. + if (ProtocolCB.Items.Count == 0) + { + ProtocolCB.Items.Add(new Protocol("opc.tcp://localhost")); + } + } + + // set the current value. + int index = 0; + + if (currentProtocol != null) + { + index = 0; + + for (int ii = 0; ii < ProtocolCB.Items.Count; ii++) + { + if (((Protocol)ProtocolCB.Items[ii]).Matches(currentProtocol.Url)) + { + index = ii; + break; + } + } + } + + ProtocolCB.SelectedIndex = index; + } + + /// + /// Initializes the security modes dropdown. + /// + private void InitializeSecurityModes(EndpointDescriptionCollection endpoints) + { + // filter by the current protocol. + Protocol currentProtocol = (Protocol)ProtocolCB.SelectedItem; + + // preserve the existing value. + MessageSecurityMode currentMode = MessageSecurityMode.None; + + if (SecurityModeCB.SelectedIndex != -1) + { + currentMode = (MessageSecurityMode)SecurityModeCB.SelectedItem; + } + + SecurityModeCB.Items.Clear(); + + // set all available security modes. + if (m_showAllOptions) + { + SecurityModeCB.Items.Add(MessageSecurityMode.None); + SecurityModeCB.Items.Add(MessageSecurityMode.Sign); + SecurityModeCB.Items.Add(MessageSecurityMode.SignAndEncrypt); + } + + // find all unique security modes. + else + { + if (endpoints != null) + { + foreach (EndpointDescription endpoint in endpoints) + { + Uri url = Utils.ParseUri(endpoint.EndpointUrl); + + if ((url != null) && (currentProtocol != null)) + { + if (!currentProtocol.Matches(url)) + { + continue; + } + + if (!SecurityModeCB.Items.Contains(endpoint.SecurityMode)) + { + SecurityModeCB.Items.Add(endpoint.SecurityMode); + } + } + } + } + + // add at least one policy. + if (SecurityModeCB.Items.Count == 0) + { + SecurityModeCB.Items.Add(MessageSecurityMode.None); + } + } + + // set the current value. + int index = SecurityModeCB.Items.IndexOf(currentMode); + + if (index == -1) + { + index = 0; + } + + SecurityModeCB.SelectedIndex = index; + } + + /// + /// Initializes the security policies dropdown. + /// + private void InitializeSecurityPolicies(EndpointDescriptionCollection endpoints) + { + // filter by the current protocol. + Protocol currentProtocol = (Protocol)ProtocolCB.SelectedItem; + + // filter by the current security mode. + MessageSecurityMode currentMode = MessageSecurityMode.None; + + if (SecurityModeCB.SelectedIndex != -1) + { + currentMode = (MessageSecurityMode)SecurityModeCB.SelectedItem; + } + + // preserve the existing value. + string currentPolicy = (string)SecurityPolicyCB.SelectedItem; + + SecurityPolicyCB.Items.Clear(); + + // set all available security policies. + if (m_showAllOptions) + { + var securityPolicies = SecurityPolicies.GetDisplayNames(); + foreach (var policy in securityPolicies) + { + SecurityPolicyCB.Items.Add(policy); + } + } + + // find all unique security policies. + else + { + if (endpoints != null) + { + foreach (EndpointDescription endpoint in endpoints) + { + Uri url = Utils.ParseUri(endpoint.EndpointUrl); + + if ((url != null) && (currentProtocol != null)) + { + if (!currentProtocol.Matches(url)) + { + continue; + } + + if (currentMode != endpoint.SecurityMode) + { + continue; + } + + string policyName = SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri); + + if (policyName != null) + { + int existingIndex = SecurityPolicyCB.FindStringExact(policyName); + + if (existingIndex == -1) + { + SecurityPolicyCB.Items.Add(policyName); + } + } + } + } + } + } + + // add at least one policy. + if (SecurityPolicyCB.Items.Count == 0) + { + SecurityPolicyCB.Items.Add(SecurityPolicies.GetDisplayName(SecurityPolicies.None)); + } + + // set the current value. + int index = 0; + + if (!String.IsNullOrEmpty(currentPolicy)) + { + index = SecurityPolicyCB.FindStringExact(currentPolicy); + + if (index == -1) + { + index = 0; + } + } + + SecurityPolicyCB.SelectedIndex = index; + } + + /// + /// Initializes the message encodings dropdown. + /// + private void InitializeEncodings(EndpointDescriptionCollection endpoints, EndpointDescription endpoint) + { + // preserve the existing value. + Encoding currentEncoding = Encoding.Default; + + if (EncodingCB.SelectedIndex != -1) + { + currentEncoding = (Encoding)EncodingCB.SelectedItem; + } + + EncodingCB.Items.Clear(); + + if (endpoint != null) + { + Protocol protocol = new Protocol(endpoint); + String securityPolicy = SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri); + + foreach (EndpointDescription endpointDescription in endpoints) + { + if ((protocol.Matches(Utils.ParseUri(endpointDescription.EndpointUrl))) && + (endpoint.SecurityMode == endpointDescription.SecurityMode) && + (securityPolicy == SecurityPolicies.GetDisplayName(endpointDescription.SecurityPolicyUri))) + { + switch (endpointDescription.EncodingSupport) + { + case BinaryEncodingSupport.None: + { + if (!EncodingCB.Items.Contains(Encoding.Xml)) + { + EncodingCB.Items.Add(Encoding.Xml); + } + break; + } + + case BinaryEncodingSupport.Required: + { + if (!EncodingCB.Items.Contains(Encoding.Binary)) + { + EncodingCB.Items.Add(Encoding.Binary); + } + break; + } + + case BinaryEncodingSupport.Optional: + { + if (!EncodingCB.Items.Contains(Encoding.Binary)) + { + EncodingCB.Items.Add(Encoding.Binary); + } + if (!EncodingCB.Items.Contains(Encoding.Xml)) + { + EncodingCB.Items.Add(Encoding.Xml); + } + break; + } + } + } + } + } + + // add at least one encoding. + if (EncodingCB.Items.Count == 0) + { + EncodingCB.Items.Add(Encoding.Default); + } + + // set the current value. + int index = EncodingCB.Items.IndexOf(currentEncoding); + + if (index == -1) + { + index = 0; + } + + EncodingCB.SelectedIndex = index; + } + + private class UserTokenItem + { + public UserTokenPolicy Policy; + + public UserTokenItem(UserTokenPolicy policy) + { + Policy = policy; + } + + public UserTokenItem(UserTokenType tokenType) + { + Policy = new UserTokenPolicy(tokenType); + } + + public override string ToString() + { + if (Policy != null) + { + if (String.IsNullOrEmpty(Policy.PolicyId)) + { + return Policy.TokenType.ToString(); + } + + return Utils.Format("{0} [{1}]", Policy.TokenType, Policy.PolicyId); + } + + return UserTokenType.Anonymous.ToString(); + } + } + + /// + /// Initializes the endpoint list control. + /// + private void InitializeEndpointList(List endpoints) + { + EndpointListLB.Items.Clear(); + + foreach (EndpointDescriptionString endpointString in endpoints) + { + EndpointListLB.Items.Add(endpointString); + } + } + + private void SelectCorrespondingEndpointFromList(EndpointDescription endpoint) + { + if (!m_selecting) + { + int index = -1; + + // try to match endpoint description id + if (endpoint != null) + { + for (int ii = 0; ii < EndpointListLB.Items.Count; ii++) + { + if (endpoint == ((EndpointDescriptionString)EndpointListLB.Items[ii]).EndpointDescription) + { + index = ii; + break; + } + } + } + + EndpointListLB.SelectedIndex = index; + } + } + + /// + /// Attempts fetch the list of servers from the discovery server. + /// + private void OnDiscoverEndpoints(object state) + { + int discoverCount = m_discoverCount; + + // do nothing if a valid list is not provided. + ApplicationDescription server = state as ApplicationDescription; + + if (server == null) + { + return; + + } + + OnUpdateStatus(new Tuple("Attempting to read latest configuration options from server.", StatusType.Ok)); + + String discoveryMessage = String.Empty; + + // process each url. + foreach (string discoveryUrl in server.DiscoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + if (DiscoverEndpoints(url, out discoveryMessage)) + { + m_discoverySucceeded = true; + m_discoveryUrl = url; + OnUpdateStatus(new Tuple("Configuration options are up to date.", StatusType.Ok)); + return; + } + + // check if another discover operation has started. + if (discoverCount != m_discoverCount) + { + return; + } + } + } + + OnUpdateEndpoints(m_availableEndpoints); + OnUpdateStatus(new Tuple("Warning: Configuration options may not be correct because the server is not available (" + discoveryMessage + ").", StatusType.Warning)); + } + + /// + /// Fetches the servers from the discovery server. + /// + private bool DiscoverEndpoints(Uri discoveryUrl, out String message) + { + // use a short timeout. + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(m_configuration); + endpointConfiguration.OperationTimeout = m_discoveryTimeout; + + DiscoveryClient client = DiscoveryClient.Create( + discoveryUrl, + EndpointConfiguration.Create(m_configuration), + m_configuration); + + try + { + EndpointDescriptionCollection endpoints = client.GetEndpoints(null); + OnUpdateEndpoints(endpoints); + message = String.Empty; + return true; + } + catch (Exception e) + { + Utils.Trace("Could not fetch endpoints from url: {0}. Reason={1}", discoveryUrl, e.Message); + message = e.Message; + return false; + } + finally + { + client.Close(); + } + } + + /// + /// Updates the status displayed in the dialog. + /// + private void OnUpdateStatus(object status) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateStatus), status); + return; + } + + Tuple statusTuple = status as Tuple; + m_statusObject.SetStatus(StatusChannel.Discovery, statusTuple.Item1, statusTuple.Item2); + UpdateStatus(); + } + + /// + /// Updates the list of servers displayed in the control. + /// + private void OnUpdateEndpoints(object state) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateEndpoints), state); + return; + } + + try + { + // get the updated descriptions. + EndpointDescriptionCollection endpoints = state as EndpointDescriptionCollection; + + if (endpoints == null) + { + m_showAllOptions = true; + InitializeProtocols(m_availableEndpoints); + } + + else + { + m_showAllOptions = false; + + m_availableEndpoints = endpoints; + BuildEndpointDescriptionStrings(m_availableEndpoints); + + if (endpoints.Count > 0) + { + m_currentDescription = endpoints[0]; + } + + // initializing the protocol will trigger an update to all other controls. + InitializeProtocols(m_availableEndpoints); + + // select the best security mode. + MessageSecurityMode bestMode = MessageSecurityMode.Invalid; + + foreach (MessageSecurityMode securityMode in SecurityModeCB.Items) + { + if (securityMode > bestMode) + { + bestMode = securityMode; + } + } + + SecurityModeCB.SelectedItem = bestMode; + + // select the best encoding. + Encoding bestEncoding = Encoding.Default; + + foreach (Encoding encoding in EncodingCB.Items) + { + if (encoding > bestEncoding) + { + bestEncoding = encoding; + } + } + + EncodingCB.SelectedItem = bestEncoding; + } + + if (m_endpoint != null) + { + Uri url = m_endpoint.EndpointUrl; + + foreach (Protocol protocol in ProtocolCB.Items) + { + if (protocol.Matches(url)) + { + ProtocolCB.SelectedItem = protocol; + break; + } + } + + foreach (MessageSecurityMode securityMode in SecurityModeCB.Items) + { + if (securityMode == m_endpoint.Description.SecurityMode) + { + SecurityModeCB.SelectedItem = securityMode; + break; + } + } + + foreach (string securityPolicy in SecurityPolicyCB.Items) + { + if (securityPolicy == m_endpoint.Description.SecurityPolicyUri) + { + SecurityPolicyCB.SelectedItem = securityPolicy; + break; + } + } + + foreach (Encoding encoding in EncodingCB.Items) + { + if (encoding == Encoding.Binary && m_endpoint.Configuration.UseBinaryEncoding) + { + EncodingCB.SelectedItem = encoding; + break; + } + + if (encoding == Encoding.Xml && !m_endpoint.Configuration.UseBinaryEncoding) + { + EncodingCB.SelectedItem = encoding; + break; + } + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error updating endpoints."); + } + } + + /// + /// Creates the endpoint description from current selections. + /// + private EndpointDescription CreateDescriptionFromSelections() + { + Protocol currentProtocol = (Protocol)ProtocolCB.SelectedItem; + + EndpointDescription endpoint = null; + + for (int ii = 0; ii < m_availableEndpoints.Count; ii++) + { + Uri url = Utils.ParseUri(m_availableEndpoints[ii].EndpointUrl); + + if (url == null) + { + continue; + } + + if (endpoint == null) + { + endpoint = m_availableEndpoints[ii]; + } + + if (currentProtocol.Matches(url)) + { + endpoint = m_availableEndpoints[ii]; + break; + } + } + + UriBuilder builder = null; + string scheme = Utils.UriSchemeOpcTcp; + + if (currentProtocol != null && currentProtocol.Url != null) + { + scheme = currentProtocol.Url.Scheme; + } + + if (endpoint == null) + { + builder = new UriBuilder(); + builder.Host = "localhost"; + + if (scheme == Utils.UriSchemeOpcTcp) + { + builder.Port = Utils.UaTcpDefaultPort; + } + } + else + { + builder = new UriBuilder(endpoint.EndpointUrl); + } + + builder.Scheme = scheme; + + endpoint = new EndpointDescription(); + endpoint.EndpointUrl = builder.ToString(); + endpoint.SecurityMode = (MessageSecurityMode)SecurityModeCB.SelectedItem; + endpoint.SecurityPolicyUri = SecurityPolicies.GetUri((string)SecurityPolicyCB.SelectedItem); + endpoint.Server.ApplicationName = endpoint.EndpointUrl; + endpoint.Server.ApplicationType = ApplicationType.Server; + endpoint.Server.ApplicationUri = endpoint.EndpointUrl; + + return endpoint; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + // check that discover has completed. + if (!m_discoverySucceeded) + { + DialogResult result = MessageBox.Show( + "Endpoint information may be out of date because the discovery process has not completed. Continue anyways?", + this.Text, + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (result != DialogResult.Yes) + { + return; + } + } + + EndpointConfiguration configuration = m_endpointConfiguration; + + if (configuration == null) + { + configuration = EndpointConfiguration.Create(m_configuration); + } + + if (m_currentDescription == null) + { + m_currentDescription = CreateDescriptionFromSelections(); + } + + // the discovery endpoint should always be on the same machine as the server. + // if there is a mismatch it is likely because the server has multiple addresses + // and was not configured to return the current address to the client. + // The code automatically updates the domain in the url. + Uri endpointUrl = Utils.ParseUri(m_currentDescription.EndpointUrl); + + if (m_discoverySucceeded) + { + if (!Utils.AreDomainsEqual(endpointUrl, m_discoveryUrl)) + { + UriBuilder url = new UriBuilder(endpointUrl); + + url.Host = m_discoveryUrl.DnsSafeHost; + + if (url.Scheme == m_discoveryUrl.Scheme) + { + url.Port = m_discoveryUrl.Port; + } + + endpointUrl = url.Uri; + + m_currentDescription.EndpointUrl = endpointUrl.ToString(); + } + } + + // set the encoding. + Encoding encoding = (Encoding)EncodingCB.SelectedItem; + configuration.UseBinaryEncoding = encoding != Encoding.Xml; + + if (m_endpoint == null) + { + m_endpoint = new ConfiguredEndpoint(null, m_currentDescription, configuration); + } + else + { + m_endpoint.Update(m_currentDescription); + m_endpoint.Update(configuration); + } + + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ProtocolCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + InitializeSecurityModes(m_availableEndpoints); + + if (!m_updating) + { + try + { + m_updating = true; + + // update current description. + m_currentDescription = FindBestEndpointDescription(m_availableEndpoints); + + InitializeEncodings(m_availableEndpoints, m_currentDescription); + SelectCorrespondingEndpointFromList(m_currentDescription); + } + finally + { + m_updating = false; + } + } + + if (ProtocolCB.SelectedItem != null) + { + if (((Protocol)ProtocolCB.SelectedItem).Url.DnsSafeHost != m_endpoint.EndpointUrl.DnsSafeHost) + { + m_statusObject.SetStatus(StatusChannel.SelectedProtocol, "Warning: Selected Endpoint hostname is different than initial hostname.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.SelectedProtocol); + } + } + else + { + m_statusObject.SetStatus(StatusChannel.SelectedProtocol, "Error: Selected Protocol is invalid.", StatusType.Warning); + } + + UpdateStatus(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void SecurityModeCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + InitializeSecurityPolicies(m_availableEndpoints); + + if (!m_updating) + { + try + { + m_updating = true; + + // update current description. + m_currentDescription = FindBestEndpointDescription(m_availableEndpoints); + + InitializeEncodings(m_availableEndpoints, m_currentDescription); + SelectCorrespondingEndpointFromList(m_currentDescription); + } + finally + { + m_updating = false; + } + } + + if (SecurityModeCB.SelectedItem != null) + { + if ((((MessageSecurityMode)SecurityModeCB.SelectedItem) == MessageSecurityMode.None) && + (ProtocolCB.SelectedItem != null) && (((Protocol)ProtocolCB.SelectedItem).ToString().IndexOf("https") != 0)) + { + m_statusObject.SetStatus(StatusChannel.SelectedSecurityMode, "Warning: Selected Endpoint has no security.", StatusType.Warning); + } + else if (((MessageSecurityMode)SecurityModeCB.SelectedItem) == MessageSecurityMode.Invalid) + { + m_statusObject.SetStatus(StatusChannel.SelectedSecurityMode, "Error: Selected Endpoint Security Mode is unsupported.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.SelectedSecurityMode); + } + } + else + { + m_statusObject.SetStatus(StatusChannel.SelectedSecurityMode, "Error: Selected Endpoint Security Mode is invalid.", StatusType.Warning); + } + + UpdateStatus(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void SecurityPolicyCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (!m_updating) + { + try + { + m_updating = true; + + // update current description. + m_currentDescription = FindBestEndpointDescription(m_availableEndpoints); + + InitializeEncodings(m_availableEndpoints, m_currentDescription); + SelectCorrespondingEndpointFromList(m_currentDescription); + } + finally + { + m_updating = false; + } + } + + if (SecurityPolicyCB.SelectedItem != null) + { + m_statusObject.ClearStatus(StatusChannel.SelectedSecurityPolicy); + } + else + { + m_statusObject.SetStatus(StatusChannel.SelectedSecurityPolicy, "Error: Selected Security Policy is invalid.", StatusType.Warning); + } + + UpdateStatus(); + + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void EndpointListLB_SelectedIndexChanged(object sender, EventArgs e) + { + if (!m_updating) + { + try + { + m_updating = true; + m_selecting = true; + + int selectedIndex = EndpointListLB.SelectedIndex; + + if (selectedIndex != -1) + { + EndpointDescriptionString selection = (EndpointDescriptionString)EndpointListLB.SelectedItem; + + int index = -1; + + for (int i = 0; i < ProtocolCB.Items.Count; ++i) + { + if (((Protocol)ProtocolCB.Items[i]).ToString() == selection.Protocol.ToString()) + { + index = i; + break; + } + } + + ProtocolCB.SelectedIndex = index; + + InitializeSecurityModes(m_availableEndpoints); + + m_currentDescription = m_availableEndpoints[selectedIndex]; + + InitializeEncodings(m_availableEndpoints, m_currentDescription); + + index = -1; + + for (int i = 0; i < SecurityModeCB.Items.Count; ++i) + { + if ((MessageSecurityMode)SecurityModeCB.Items[i] == selection.MessageSecurityMode) + { + index = i; + break; + } + } + + SecurityModeCB.SelectedIndex = index; + + index = -1; + + for (int i = 0; i < SecurityPolicyCB.Items.Count; ++i) + { + if ((string)SecurityPolicyCB.Items[i] == selection.CurrentPolicy) + { + index = i; + break; + } + } + + SecurityPolicyCB.SelectedIndex = index; + + index = -1; + + for (int i = 0; i < EncodingCB.Items.Count; ++i) + { + if ((Encoding)EncodingCB.Items[i] == selection.Encoding) + { + index = i; + break; + } + } + + EncodingCB.SelectedIndex = index; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + finally + { + m_updating = false; + m_selecting = false; + } + } + + UpdateAdvancedEndpointInformation(); + } + + /// + /// Updates advanced endpoint information. + /// + private void UpdateAdvancedEndpointInformation() + { + try + { + ApplicationNameTB.Text = String.Empty; + ApplicationTypeTB.Text = String.Empty; + ApplicationUriTB.Text = String.Empty; + ProductUriTB.Text = String.Empty; + GatewayServerUriTB.Text = String.Empty; + DiscoveryProfileUriTB.Text = String.Empty; + TransportProfileUriTB.Text = String.Empty; + UserSecurityPoliciesTB.Text = String.Empty; + SecurityLevelTB.Text = String.Empty; + + if (m_currentDescription != null) + { + UserSecurityPoliciesTB.Text = "Anonymous"; + + if (m_currentDescription.Server != null) + { + if (m_currentDescription.Server.ApplicationName != null) + { + ApplicationNameTB.Text = m_currentDescription.Server.ApplicationName.ToString(); + } + + ApplicationTypeTB.Text = m_currentDescription.Server.ApplicationType.ToString(); + ApplicationUriTB.Text = m_currentDescription.Server.ApplicationUri; + ProductUriTB.Text = m_currentDescription.Server.ProductUri; + GatewayServerUriTB.Text = m_currentDescription.Server.GatewayServerUri; + DiscoveryProfileUriTB.Text = m_currentDescription.Server.DiscoveryProfileUri; + } + + SecurityLevelTB.Text = m_currentDescription.SecurityLevel.ToString(); + TransportProfileUriTB.Text = m_currentDescription.TransportProfileUri; + + if (m_currentDescription.UserIdentityTokens.Count > 0) + { + UserSecurityPoliciesTB.Text = String.Join(", ", m_currentDescription.UserIdentityTokens); + } + } + + UpdateStatus(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + /// + /// Updates the StatusTB text and color. + /// Also enables/disables the OK button, should any error occurr (unsupported stuff etc). + /// + private void UpdateStatus() + { + try + { + if ((m_currentDescription != null) && (m_currentDescription.Server != null)) + { + m_statusObject.ClearStatus(StatusChannel.Server); + + if (m_currentDescription.Server.ApplicationType == ApplicationType.Client) + { + m_statusObject.SetStatus(StatusChannel.ApplicationType, "Warning: Application type is unsupported.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.ApplicationType); + } + + if (string.IsNullOrEmpty(m_currentDescription.Server.ApplicationUri)) + { + m_statusObject.SetStatus(StatusChannel.ApplicationUri, "Warning: Application URI is missing.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.ApplicationUri); + } + + if (string.IsNullOrEmpty(m_currentDescription.TransportProfileUri)) + { + m_statusObject.SetStatus(StatusChannel.TransportProfileUri, "Warning: Transport Profile URI is missing.", StatusType.Warning); + } + else if (Utils.ParseUri(m_currentDescription.TransportProfileUri) == null) + { + m_statusObject.SetStatus(StatusChannel.TransportProfileUri, "Warning: Transport Profile URI is invalid.", StatusType.Warning); + } + + if ((m_currentDescription.Server.DiscoveryUrls == null) || (m_currentDescription.Server.DiscoveryUrls.Count == 0)) + { + m_statusObject.SetStatus(StatusChannel.DiscoveryURLs, "Warning: Discovery URLs are missing.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.DiscoveryURLs); + } + + if ((m_currentDescription.ServerCertificate != null) && (m_currentDescription.ServerCertificate.Length > 0)) + { + X509Certificate2 serverCertificate = new X509Certificate2(m_currentDescription.ServerCertificate); + String certificateApplicationUri = X509Utils.GetApplicationUriFromCertificate(serverCertificate); + + if (certificateApplicationUri != m_currentDescription.Server.ApplicationUri) + { + m_statusObject.SetStatus(StatusChannel.DifferentCertificate, "Warning: Application URI host different than the certificate host.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.DifferentCertificate); + } + } + + if (string.IsNullOrEmpty(m_currentDescription.SecurityPolicyUri)) + { + m_statusObject.SetStatus(StatusChannel.SecurityPolicyUri, "Error: Security Policy URI is missing.", StatusType.Warning); + } + else if (string.IsNullOrEmpty(SecurityPolicies.GetDisplayName(m_currentDescription.SecurityPolicyUri))) + { + m_statusObject.SetStatus(StatusChannel.SecurityPolicyUri, "Error: Security Policy URI is invalid.", StatusType.Warning); + } + else + { + m_statusObject.ClearStatus(StatusChannel.SecurityPolicyUri); + } + } + else + { + m_statusObject.SetStatus(StatusChannel.Server, "Warning: Server endpoint is invalid.", StatusType.Warning); + } + + + OkBTN.Enabled = true; + StatusTB.ForeColor = SystemColors.WindowText; + StatusTB.Text = m_statusObject.StatusString; + + if (m_statusObject.StatusType == StatusType.Error) + { + OkBTN.Enabled = false; + StatusTB.ForeColor = Color.Red; + } + else if (m_statusObject.StatusType == StatusType.Warning) + { + StatusTB.ForeColor = Color.DarkOrange; + } + + // hack for WinForms to update color + StatusTB.BackColor = StatusTB.BackColor; + + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.Designer.cs new file mode 100644 index 00000000..5c350d3a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.Designer.cs @@ -0,0 +1,120 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ConfiguredServerListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.NewMI = new System.Windows.Forms.ToolStripMenuItem(); + this.ConfigureMI = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteMI = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // ItemsLV + // + this.ItemsLV.ContextMenuStrip = this.PopupMenu; + // + // PopupMenu + // + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewMI, + this.ConfigureMI, + this.DeleteMI}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(153, 92); + // + // NewMI + // + this.NewMI.Name = "NewMI"; + this.NewMI.Size = new System.Drawing.Size(152, 22); + this.NewMI.Text = "New..."; + this.NewMI.Click += new System.EventHandler(this.NewMI_Click); + // + // ConfigureMI + // + this.ConfigureMI.Name = "ConfigureMI"; + this.ConfigureMI.Size = new System.Drawing.Size(152, 22); + this.ConfigureMI.Text = "Configure..."; + this.ConfigureMI.Click += new System.EventHandler(this.ConfigureMI_Click); + // + // DeleteMI + // + this.DeleteMI.Name = "DeleteMI"; + this.DeleteMI.Size = new System.Drawing.Size(152, 22); + this.DeleteMI.Text = "Delete"; + this.DeleteMI.Click += new System.EventHandler(this.DeleteMI_Click); + // + // ConfiguredServerListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "ConfiguredServerListCtrl"; + this.Controls.SetChildIndex(this.ItemsLV, 0); + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem NewMI; + private System.Windows.Forms.ToolStripMenuItem ConfigureMI; + private System.Windows.Forms.ToolStripMenuItem DeleteMI; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs new file mode 100644 index 00000000..5e8891c6 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs @@ -0,0 +1,255 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; + +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A list of servers. + /// + public partial class ConfiguredServerListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public ConfiguredServerListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Host", HorizontalAlignment.Left, null }, + new object[] { "Protocol", HorizontalAlignment.Left, null }, + new object[] { "Security Mode", HorizontalAlignment.Left, null }, + new object[] { "User Token", HorizontalAlignment.Left, null } + }; + + private ApplicationConfiguration m_configuration; + private ConfiguredEndpointCollection m_endpoints; + #endregion + + #region Public Interface + /// + /// Displays a list of servers in the control. + /// + public void Initialize(ConfiguredEndpointCollection endpoints, ApplicationConfiguration configuration) + { + Interlocked.Exchange(ref m_configuration, configuration); + + ItemsLV.Items.Clear(); + + m_endpoints = endpoints; + + if (endpoints != null) + { + foreach (ConfiguredEndpoint endpoint in endpoints.Endpoints) + { + AddItem(endpoint); + } + } + + AdjustColumns(); + } + #endregion + + #region Overridden Methods + /// + /// Enables context menu items. + /// + protected override void EnableMenuItems(ListViewItem clickedItem) + { + base.EnableMenuItems(clickedItem); + + NewMI.Enabled = true; + + if (clickedItem != null) + { + ConfiguredEndpoint endpoint = clickedItem.Tag as ConfiguredEndpoint; + + if (endpoint == null) + { + return; + } + + ConfigureMI.Enabled = true; + DeleteMI.Enabled = true; + } + } + + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + ConfiguredEndpoint endpoint = listItem.Tag as ConfiguredEndpoint; + + if (endpoint == null) + { + base.UpdateItem(listItem, endpoint); + return; + } + + string hostname = ""; + string protocol = ""; + + Uri uri = endpoint.EndpointUrl; + + if (uri != null) + { + hostname = uri.DnsSafeHost; + protocol = uri.Scheme; + } + + listItem.SubItems[0].Text = String.Format("{0}", endpoint.Description.Server.ApplicationName); + listItem.SubItems[1].Text = String.Format("{0}", hostname); + listItem.SubItems[2].Text = String.Format("{0}", protocol); + + listItem.SubItems[3].Text = String.Format( + "{0}/{1}", + SecurityPolicies.GetDisplayName(endpoint.Description.SecurityPolicyUri), + endpoint.Description.SecurityMode); + + listItem.SubItems[4].Text = ""; + + UserTokenPolicy policy = endpoint.SelectedUserTokenPolicy; + + if (policy != null) + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append(policy.TokenType); + + if (endpoint.UserIdentity != null) + { + buffer.Append("/"); + buffer.Append(endpoint.UserIdentity); + } + + listItem.SubItems[4].Text = buffer.ToString(); + } + + listItem.ImageKey = GuiUtils.Icons.Process; + } + #endregion + + #region Event Handlers + private void NewMI_Click(object sender, EventArgs e) + { + try + { + ApplicationDescription server = new DiscoveredServerListDlg().ShowDialog(null, m_configuration); + + if (server == null) + { + return; + } + + ConfiguredEndpoint endpoint = new ConfiguredServerDlg().ShowDialog(server, m_configuration); + + if (endpoint == null) + { + return; + } + + AddItem(endpoint); + AdjustColumns(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ConfigureMI_Click(object sender, EventArgs e) + { + try + { + ConfiguredEndpoint endpoint = SelectedTag as ConfiguredEndpoint; + + if (endpoint == null) + { + return; + } + + endpoint = new ConfiguredServerDlg().ShowDialog(endpoint, m_configuration); + + if (endpoint == null) + { + return; + } + + UpdateItem(ItemsLV.SelectedItems[0], endpoint); + AdjustColumns(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void DeleteMI_Click(object sender, EventArgs e) + { + try + { + ConfiguredEndpoint endpoint = SelectedTag as ConfiguredEndpoint; + + if (endpoint == null) + { + return; + } + + ItemsLV.SelectedItems[0].Remove(); + AdjustColumns(); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.resx new file mode 100644 index 00000000..edd3be8a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.Designer.cs new file mode 100644 index 00000000..64c78947 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.Designer.cs @@ -0,0 +1,149 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ConfiguredServerListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ServersCTRL = new Opc.Ua.Client.Controls.ConfiguredServerListCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(2, 353); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(673, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(594, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ServersCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(2, 2); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.MainPN.Size = new System.Drawing.Size(673, 351); + this.MainPN.TabIndex = 1; + // + // ServersCTRL + // + this.ServersCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.ServersCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServersCTRL.Instructions = null; + this.ServersCTRL.Location = new System.Drawing.Point(0, 3); + this.ServersCTRL.Name = "ServersCTRL"; + this.ServersCTRL.Size = new System.Drawing.Size(673, 348); + this.ServersCTRL.TabIndex = 0; + this.ServersCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsSelected); + // + // ConfiguredServerListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(677, 384); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "ConfiguredServerListDlg"; + this.Padding = new System.Windows.Forms.Padding(2, 2, 2, 0); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Configure Servers"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private ConfiguredServerListCtrl ServersCTRL; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.cs new file mode 100644 index 00000000..a6da13d3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.cs @@ -0,0 +1,131 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to browse a list of servers. + /// + public partial class ConfiguredServerListDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public ConfiguredServerListDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private ConfiguredEndpoint m_endpoint; + private ApplicationConfiguration m_configuration; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public ConfiguredEndpoint ShowDialog(ApplicationConfiguration configuration, bool createNew) + { + m_configuration = configuration; + m_endpoint = null; + + // create a default collection if none provided. + if (createNew) + { + ApplicationDescription server = new DiscoveredServerListDlg().ShowDialog(null, m_configuration); + + if (server != null) + { + return new ConfiguredEndpoint(server, EndpointConfiguration.Create(configuration)); + } + + return null; + } + + ServersCTRL.Initialize(null, configuration); + + OkBTN.Enabled = false; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_endpoint; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + m_endpoint = null; + + foreach (ConfiguredEndpoint server in e.Items) + { + m_endpoint = server; + break; + } + + OkBTN.Enabled = m_endpoint != null; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/ConfiguredServerListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.Designer.cs new file mode 100644 index 00000000..d340d256 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.Designer.cs @@ -0,0 +1,73 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoveredServerListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UserAccountListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "UserAccountListCtrl"; + this.ResumeLayout(false); + + } + + #endregion + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.cs new file mode 100644 index 00000000..2a1c3b6c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.cs @@ -0,0 +1,325 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +using Opc.Ua.Client.Controls; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a list of servers. + /// + public partial class DiscoveredServerListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public DiscoveredServerListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + ItemsLV.Sorting = SortOrder.Descending; + ItemsLV.MultiSelect = false; + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Type", HorizontalAlignment.Left, null }, + new object[] { "Host", HorizontalAlignment.Left, null }, + new object[] { "URI", HorizontalAlignment.Left, null } + }; + + private ApplicationConfiguration m_configuration; + private int m_discoveryTimeout; + private int m_discoverCount; + private string m_discoveryUrl; + #endregion + + #region Public Interface + /// + /// The timeout in milliseconds to use when discovering servers. + /// + [System.ComponentModel.DefaultValue(5000)] + public int DiscoveryTimeout + { + get { return m_discoveryTimeout; } + set { m_discoveryTimeout = value; } + } + + /// + /// Gets or sets the discovery URL used to find the servers displayed in the control. + /// + /// The discovery URL. + public string DiscoveryUrl + { + get { return m_discoveryUrl; } + set { m_discoveryUrl = value; } + } + + /// + /// Displays a list of servers in the control. + /// + public void Initialize(ConfiguredEndpointCollection endpoints, ApplicationConfiguration configuration) + { + Interlocked.Exchange(ref m_configuration, configuration); + + ItemsLV.Items.Clear(); + + foreach (ApplicationDescription server in endpoints.GetServers()) + { + AddItem(server); + } + + AdjustColumns(); + } + + /// + /// Displays a list of servers in the control. + /// + public void Initialize(string hostname, ApplicationConfiguration configuration) + { + Interlocked.Exchange(ref m_configuration, configuration); + + ItemsLV.Items.Clear(); + + if (String.IsNullOrEmpty(hostname)) + { + hostname = System.Net.Dns.GetHostName(); + } + + this.Instructions = Utils.Format("Discovering servers on host '{0}'.", hostname); + AdjustColumns(); + + // get a list of well known discovery urls to use. + StringCollection discoveryUrls = null; + + if (configuration != null && configuration.ClientConfiguration != null) + { + discoveryUrls = configuration.ClientConfiguration.WellKnownDiscoveryUrls; + } + + if (discoveryUrls == null || discoveryUrls.Count == 0) + { + discoveryUrls = new StringCollection(Utils.DiscoveryUrls); + } + + // update the urls with the hostname. + StringCollection urlsToUse = new StringCollection(); + + foreach (string discoveryUrl in discoveryUrls) + { + urlsToUse.Add(Utils.Format(discoveryUrl, hostname)); + } + + Interlocked.Increment(ref m_discoverCount); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnDiscoverServers), urlsToUse); + } + + /// + /// Updates the list of servers displayed in the control. + /// + private void OnUpdateServers(object state) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateServers), state); + return; + } + + ItemsLV.Items.Clear(); + + ApplicationDescriptionCollection servers = state as ApplicationDescriptionCollection; + + if (servers != null) + { + foreach (ApplicationDescription server in servers) + { + if (server.ApplicationType == ApplicationType.DiscoveryServer) + { + continue; + } + + AddItem(server); + } + } + + if (ItemsLV.Items.Count == 0) + { + this.Instructions = Utils.Format("No servers to display."); + } + + AdjustColumns(); + } + + /// + /// Attempts fetch the list of servers from the discovery server. + /// + private void OnDiscoverServers(object state) + { + try + { + int discoverCount = m_discoverCount; + + // do nothing if a valid list is not provided. + IList discoveryUrls = state as IList; + + if (discoveryUrls == null) + { + return; + } + + // process each url. + foreach (string discoveryUrl in discoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + if (DiscoverServers(url)) + { + return; + } + + // check if another discover operation has started. + if (discoverCount != m_discoverCount) + { + return; + } + } + } + + // display empty list. + OnUpdateServers(null); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error discovering servers."); + } + } + + /// + /// Fetches the servers from the discovery server. + /// + private bool DiscoverServers(Uri discoveryUrl) + { + // use a short timeout. + EndpointConfiguration configuration = EndpointConfiguration.Create(m_configuration); + configuration.OperationTimeout = m_discoveryTimeout; + + DiscoveryClient client = null; + + try + { + client = DiscoveryClient.Create( + discoveryUrl, + BindingFactory.Create(m_configuration, m_configuration.CreateMessageContext()), + EndpointConfiguration.Create(m_configuration)); + + ApplicationDescriptionCollection servers = client.FindServers(null); + m_discoveryUrl = discoveryUrl.ToString(); + OnUpdateServers(servers); + return true; + } + catch (Exception e) + { + Utils.Trace("DISCOVERY ERROR - Could not fetch servers from url: {0}. Error=({2}){1}", discoveryUrl, e.Message, e.GetType()); + return false; + } + finally + { + if (client != null) + { + client.Close(); + } + } + } + #endregion + + #region Overridden Methods + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + ApplicationDescription server = listItem.Tag as ApplicationDescription; + + if (server == null) + { + base.UpdateItem(listItem, server); + return; + } + + string hostname = ""; + + // extract host from application uri. + Uri uri = Utils.ParseUri(server.ApplicationUri); + + if (uri != null) + { + hostname = uri.DnsSafeHost; + } + + // get the host name from the discovery urls. + if (String.IsNullOrEmpty(hostname)) + { + foreach (string discoveryUrl in server.DiscoveryUrls) + { + Uri url = Utils.ParseUri(discoveryUrl); + + if (url != null) + { + hostname = url.DnsSafeHost; + break; + } + } + } + + listItem.SubItems[0].Text = String.Format("{0}", server.ApplicationName); + listItem.SubItems[1].Text = String.Format("{0}", server.ApplicationType); + listItem.SubItems[2].Text = String.Format("{0}", hostname); + listItem.SubItems[3].Text = String.Format("{0}", server.ApplicationUri); + + listItem.ImageKey = GuiUtils.Icons.Service; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.Designer.cs new file mode 100644 index 00000000..53e87cdf --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.Designer.cs @@ -0,0 +1,197 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class DiscoveredServerListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ServersCTRL = new Opc.Ua.Client.Controls.DiscoveredServerListCtrl(); + this.TopPN = new System.Windows.Forms.Panel(); + this.HostNameLB = new System.Windows.Forms.Label(); + this.HostNameCTRL = new Opc.Ua.Client.Controls.SelectHostCtrl(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.TopPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(2, 353); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(673, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(594, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.ServersCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(2, 23); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.MainPN.Size = new System.Drawing.Size(673, 330); + this.MainPN.TabIndex = 2; + // + // ServersCTRL + // + this.ServersCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.ServersCTRL.DiscoveryTimeout = 0; + this.ServersCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServersCTRL.Instructions = null; + this.ServersCTRL.Location = new System.Drawing.Point(0, 3); + this.ServersCTRL.Name = "ServersCTRL"; + this.ServersCTRL.Size = new System.Drawing.Size(673, 327); + this.ServersCTRL.TabIndex = 0; + this.ServersCTRL.ItemsPicked += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsPicked); + this.ServersCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.ServersCTRL_ItemsSelected); + // + // TopPN + // + this.TopPN.Controls.Add(this.HostNameLB); + this.TopPN.Controls.Add(this.HostNameCTRL); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(2, 2); + this.TopPN.Name = "TopPN"; + this.TopPN.Size = new System.Drawing.Size(673, 21); + this.TopPN.TabIndex = 1; + // + // HostNameLB + // + this.HostNameLB.AutoSize = true; + this.HostNameLB.Location = new System.Drawing.Point(0, 4); + this.HostNameLB.Name = "HostNameLB"; + this.HostNameLB.Size = new System.Drawing.Size(60, 13); + this.HostNameLB.TabIndex = 0; + this.HostNameLB.Text = "Host Name"; + this.HostNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // HostNameCTRL + // + this.HostNameCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HostNameCTRL.CommandText = "Discover"; + this.HostNameCTRL.Location = new System.Drawing.Point(63, 0); + this.HostNameCTRL.Margin = new System.Windows.Forms.Padding(0); + this.HostNameCTRL.MaximumSize = new System.Drawing.Size(4096, 24); + this.HostNameCTRL.MinimumSize = new System.Drawing.Size(400, 21); + this.HostNameCTRL.Name = "HostNameCTRL"; + this.HostNameCTRL.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.HostNameCTRL.Size = new System.Drawing.Size(610, 21); + this.HostNameCTRL.TabIndex = 1; + this.HostNameCTRL.HostConnected += new System.EventHandler(this.HostNameCTRL_HostConnected); + this.HostNameCTRL.HostSelected += new System.EventHandler(this.HostNameCTRL_HostSelected); + // + // DiscoveredServerListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(677, 384); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.TopPN); + this.Controls.Add(this.ButtonsPN); + this.MaximumSize = new System.Drawing.Size(1024, 1024); + this.MinimumSize = new System.Drawing.Size(300, 300); + this.Name = "DiscoveredServerListDlg"; + this.Padding = new System.Windows.Forms.Padding(2, 2, 2, 0); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Discover Servers"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.TopPN.ResumeLayout(false); + this.TopPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private DiscoveredServerListCtrl ServersCTRL; + private SelectHostCtrl HostNameCTRL; + private System.Windows.Forms.Panel TopPN; + private System.Windows.Forms.Label HostNameLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.cs new file mode 100644 index 00000000..ed9e0417 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.cs @@ -0,0 +1,182 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to browse a list of servers. + /// + public partial class DiscoveredServerListDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public DiscoveredServerListDlg() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private string m_hostname; + private ApplicationDescription m_server; + private ApplicationConfiguration m_configuration; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public ApplicationDescription ShowDialog(string hostname, ApplicationConfiguration configuration) + { + m_configuration = configuration; + + if (String.IsNullOrEmpty(hostname)) + { + hostname = System.Net.Dns.GetHostName(); + } + + m_hostname = hostname; + List hostnames = new List(); + + HostNameCTRL.Initialize(hostname, hostnames); + ServersCTRL.Initialize(hostname, configuration); + + OkBTN.Enabled = false; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_server; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostNameCTRL_HostSelected(object sender, SelectHostCtrlEventArgs e) + { + try + { + if (m_hostname != e.Hostname) + { + m_hostname = e.Hostname; + ServersCTRL.Initialize(m_hostname, m_configuration); + m_server = null; + OkBTN.Enabled = false; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostNameCTRL_HostConnected(object sender, SelectHostCtrlEventArgs e) + { + try + { + m_hostname = e.Hostname; + ServersCTRL.Initialize(m_hostname, m_configuration); + m_server = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + m_server = null; + + foreach (ApplicationDescription server in e.Items) + { + m_server = server; + break; + } + + OkBTN.Enabled = m_server != null; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServersCTRL_ItemsPicked(object sender, ListItemActionEventArgs e) + { + try + { + m_server = null; + + foreach (ApplicationDescription server in e.Items) + { + m_server = server; + break; + } + + if (m_server != null) + { + DialogResult = DialogResult.OK; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/DiscoveredServerListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.Designer.cs new file mode 100644 index 00000000..4666c60b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.Designer.cs @@ -0,0 +1,120 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class EndpointSelectorCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.EndpointCB = new System.Windows.Forms.ComboBox(); + this.ConnectButton = new System.Windows.Forms.Button(); + this.ConnectPN = new System.Windows.Forms.Panel(); + this.ConnectPN.SuspendLayout(); + this.SuspendLayout(); + // + // EndpointCB + // + this.EndpointCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.EndpointCB.FormattingEnabled = true; + this.EndpointCB.Location = new System.Drawing.Point(3, 4); + this.EndpointCB.Name = "EndpointCB"; + this.EndpointCB.Size = new System.Drawing.Size(622, 21); + this.EndpointCB.TabIndex = 0; + this.EndpointCB.SelectedIndexChanged += new System.EventHandler(this.EndpointCB_SelectedIndexChanged); + // + // ConnectButton + // + this.ConnectButton.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConnectButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ConnectButton.Location = new System.Drawing.Point(3, 3); + this.ConnectButton.Name = "ConnectButton"; + this.ConnectButton.Size = new System.Drawing.Size(102, 22); + this.ConnectButton.TabIndex = 1; + this.ConnectButton.Text = "Connect"; + this.ConnectButton.UseVisualStyleBackColor = true; + this.ConnectButton.Click += new System.EventHandler(this.ConnectButton_Click); + // + // ConnectPN + // + this.ConnectPN.Controls.Add(this.ConnectButton); + this.ConnectPN.Dock = System.Windows.Forms.DockStyle.Right; + this.ConnectPN.Location = new System.Drawing.Point(626, 0); + this.ConnectPN.Name = "ConnectPN"; + this.ConnectPN.Padding = new System.Windows.Forms.Padding(3); + this.ConnectPN.Size = new System.Drawing.Size(108, 28); + this.ConnectPN.TabIndex = 2; + // + // EndpointSelectorCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ConnectPN); + this.Controls.Add(this.EndpointCB); + this.MaximumSize = new System.Drawing.Size(2048, 28); + this.MinimumSize = new System.Drawing.Size(100, 28); + this.Name = "EndpointSelectorCtrl"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.Size = new System.Drawing.Size(734, 28); + this.ConnectPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox EndpointCB; + private System.Windows.Forms.Button ConnectButton; + private System.Windows.Forms.Panel ConnectPN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.cs new file mode 100644 index 00000000..8a247b9d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.cs @@ -0,0 +1,296 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime.Serialization; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A control which displays a list of endpoints + /// + public partial class EndpointSelectorCtrl : UserControl + { + /// + /// Initializes a new instance of the class. + /// + public EndpointSelectorCtrl() + { + InitializeComponent(); + } + + #region Private Fields + private int m_selectedIndex; + private ApplicationConfiguration m_configuration; + private ConfiguredEndpointCollection m_endpoints; + private event ConnectEndpointEventHandler m_ConnectEndpoint; + private event EventHandler m_EndpointsChanged; + #endregion + + #region Public Interface + /// + /// Raised when the user presses the connect button. + /// + public event ConnectEndpointEventHandler ConnectEndpoint + { + add { m_ConnectEndpoint += value; } + remove { m_ConnectEndpoint -= value; } + } + + /// + /// Raised when the endpoints displayed in the control are changed. + /// + public event EventHandler EndpointsChanged + { + add { m_EndpointsChanged += value; } + remove { m_EndpointsChanged -= value; } + } + + /// + /// The endpoint currently displayed in the control. + /// + public ConfiguredEndpoint SelectedEndpoint + { + get + { + ConfiguredEndpoint item = EndpointCB.SelectedItem as ConfiguredEndpoint; + + if (item != null) + { + return item; + } + + if (String.IsNullOrEmpty(EndpointCB.Text)) + { + return null; + } + + return m_endpoints.Create(EndpointCB.Text); + } + + set + { + if (value == null) + { + EndpointCB.Text = null; + EndpointCB.SelectedIndex = -1; + return; + } + + for (int ii = 1; ii < EndpointCB.Items.Count; ii++) + { + ConfiguredEndpoint item = EndpointCB.Items[ii] as ConfiguredEndpoint; + + if (Object.ReferenceEquals(item, value)) + { + EndpointCB.SelectedItem = item; + return; + } + } + + // must be a new endpoint. + m_endpoints.Add(value); + + // raise notification. + if (m_EndpointsChanged != null) + { + m_EndpointsChanged(this, null); + } + + EndpointCB.SelectedIndex = EndpointCB.Items.Add(value); + } + } + + /// + /// Initializes the control with a list of endpoints. + /// + public void Initialize(ConfiguredEndpointCollection endpoints, ApplicationConfiguration configuration) + { + if (endpoints == null) throw new ArgumentNullException("endpoints"); + + m_endpoints = endpoints; + m_configuration = configuration; + + EndpointCB.Items.Clear(); + EndpointCB.SelectedIndex = -1; + EndpointCB.Items.Add(""); + + if (endpoints != null) + { + foreach (ConfiguredEndpoint endpoint in m_endpoints.Endpoints) + { + EndpointCB.Items.Add(endpoint); + } + } + + if (EndpointCB.Items.Count > 1) + { + EndpointCB.SelectedIndex = m_selectedIndex = 1; + } + } + #endregion + + #region Event Handlers + private void ConnectButton_Click(object sender, EventArgs e) + { + try + { + // get selected endpoint. + ConfiguredEndpoint endpoint = SelectedEndpoint; + + if (endpoint == null) + { + return; + } + + // raise event. + if (m_ConnectEndpoint != null) + { + ConnectEndpointEventArgs args = new ConnectEndpointEventArgs(endpoint, true); + + m_ConnectEndpoint(this, args); + + // save endpoint in drop down. + if (args.UpdateControl) + { + // must update the control because the display text may have changed. + Initialize(m_endpoints, m_configuration); + SelectedEndpoint = endpoint; + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void EndpointCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (EndpointCB.SelectedIndex != 0) + { + m_selectedIndex = EndpointCB.SelectedIndex; + return; + } + + // modify configuration. + ConfiguredEndpoint endpoint = new ConfiguredServerListDlg().ShowDialog(m_configuration, true); + + if (endpoint == null) + { + EndpointCB.SelectedIndex = m_selectedIndex; + return; + } + + m_endpoints.Add(endpoint); + + // raise notification. + if (m_EndpointsChanged != null) + { + m_EndpointsChanged(this, null); + } + + // update dropdown. + Initialize(m_endpoints, m_configuration); + + // update selection. + for (int ii = 0; ii < m_endpoints.Endpoints.Count; ii++) + { + if (Object.ReferenceEquals(endpoint, m_endpoints.Endpoints[ii])) + { + EndpointCB.SelectedIndex = ii+1; + break; + } + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } + + #region ConnectEndpointEventArgs Class + /// + /// Contains arguments for a ConnectEndpoint event. + /// + public class ConnectEndpointEventArgs : EventArgs + { + /// + /// Initializes the object. + /// + public ConnectEndpointEventArgs(ConfiguredEndpoint endpoint, bool updateControl) + { + m_endpoint = endpoint; + m_updateControl = updateControl; + } + + /// + /// The endpoint selected in the control. + /// + public ConfiguredEndpoint Endpoint + { + get { return m_endpoint; } + } + + /// + /// Whether the endpoint should be saved in the control after the event completes. + /// + public bool UpdateControl + { + get { return m_updateControl; } + set { m_updateControl = value; } + } + + #region Private Fields + private ConfiguredEndpoint m_endpoint; + private bool m_updateControl; + #endregion + } + + /// + /// The delegate used to receive connect endpoint notifications. + /// + public delegate void ConnectEndpointEventHandler(object sender, ConnectEndpointEventArgs e); + #endregion +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/EndpointSelectorCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.Designer.cs new file mode 100644 index 00000000..b260b59a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.Designer.cs @@ -0,0 +1,73 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HostListCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UserAccountListCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.Name = "UserAccountListCtrl"; + this.ResumeLayout(false); + + } + + #endregion + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.cs new file mode 100644 index 00000000..87c4ff7b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.cs @@ -0,0 +1,218 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Net; + +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A list of hosts. + /// + public partial class HostListCtrl : Opc.Ua.Client.Controls.BaseListCtrl + { + #region Constructors + /// + /// Initalize the control. + /// + public HostListCtrl() + { + InitializeComponent(); + SetColumns(m_ColumnNames); + m_enumerator = new HostEnumerator(); + m_enumerator.HostsDiscovered += new EventHandler(HostEnumerator_HostsDiscovered); + } + #endregion + + #region Private Fields + // The columns to display in the control. + private readonly object[][] m_ColumnNames = new object[][] + { + new object[] { "Name", HorizontalAlignment.Left, null }, + new object[] { "Addresses", HorizontalAlignment.Left, null } + }; + + private HostEnumerator m_enumerator; + private bool m_waitingForHosts; + #endregion + + #region Public Interface + /// + /// Displays a list of servers in the control. + /// + public void Initialize(string domain) + { + ItemsLV.Items.Clear(); + + this.Instructions = Utils.Format("Discovering hosts on domain '{0}'.", domain); + AdjustColumns(); + + m_waitingForHosts = true; + m_enumerator.Start(domain); + } + #endregion + + #region Private Methods + /// + /// Finds the addresses for the specified host. + /// + private void OnFetchAddresses(object state) + { + ListViewItem listItem = state as ListViewItem; + + if (listItem == null) + { + return; + } + + string hostname = listItem.Tag as string; + + if (hostname == null) + { + return; + } + + try + { + IPAddress[] addresses = Dns.GetHostAddresses(hostname); + + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < addresses.Length; ii++) + { + if (buffer.Length > 0) + { + buffer.Append(", "); + } + + buffer.AppendFormat("{0}", addresses[ii]); + } + + ThreadPool.QueueUserWorkItem(new WaitCallback(OnUpdateAddress), new object[] { listItem, buffer.ToString() }); + } + catch (Exception e) + { + Utils.Trace(e, "Could not get ip addresses for host: {0}", hostname); + ThreadPool.QueueUserWorkItem(new WaitCallback(OnUpdateAddress), new object[] { listItem, e.Message }); + } + } + + /// + /// Updates the addresses for a host. + /// + private void OnUpdateAddress(object state) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new WaitCallback(OnUpdateAddress), state); + return; + } + + ListViewItem listItem = ((object[])state)[0] as ListViewItem; + + if (listItem == null) + { + return; + } + + string addresses = ((object[])state)[1] as string; + + if (addresses == null) + { + return; + } + + listItem.SubItems[1].Text = addresses; + + AdjustColumns(); + } + #endregion + + #region Overridden Methods + /// + /// Updates an item in the control. + /// + protected override void UpdateItem(ListViewItem listItem, object item) + { + string hostname = listItem.Tag as string; + + if (hostname == null) + { + base.UpdateItem(listItem, hostname); + return; + } + + listItem.SubItems[0].Text = String.Format("{0}", hostname); + listItem.SubItems[1].Text = ""; + + listItem.ImageKey = GuiUtils.Icons.Computer; + + ThreadPool.QueueUserWorkItem(new WaitCallback(OnFetchAddresses), listItem); + } + #endregion + + #region Event Handlers + private void HostEnumerator_HostsDiscovered(object sender, HostEnumeratorEventArgs e) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new EventHandler(HostEnumerator_HostsDiscovered), sender, e); + return; + } + + // check if this is the first callback. + if (m_waitingForHosts) + { + ItemsLV.Items.Clear(); + m_waitingForHosts = false; + } + + // populate list with hostnames. + if (e != null && e.Hostnames != null) + { + foreach (string hostname in e.Hostnames) + { + AddItem(hostname); + } + } + + AdjustColumns(); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.Designer.cs new file mode 100644 index 00000000..7a6d3712 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.Designer.cs @@ -0,0 +1,197 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class HostListDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.HostsCTRL = new Opc.Ua.Client.Controls.HostListCtrl(); + this.TopPN = new System.Windows.Forms.Panel(); + this.DomainNameCTRL = new Opc.Ua.Client.Controls.SelectHostCtrl(); + this.DomainLB = new System.Windows.Forms.Label(); + this.ButtonsPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.TopPN.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(2, 254); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(455, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click); + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(376, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.Controls.Add(this.HostsCTRL); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(2, 23); + this.MainPN.Name = "MainPN"; + this.MainPN.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.MainPN.Size = new System.Drawing.Size(455, 231); + this.MainPN.TabIndex = 2; + // + // HostsCTRL + // + this.HostsCTRL.Cursor = System.Windows.Forms.Cursors.Default; + this.HostsCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.HostsCTRL.Instructions = null; + this.HostsCTRL.Location = new System.Drawing.Point(0, 3); + this.HostsCTRL.Name = "HostsCTRL"; + this.HostsCTRL.Size = new System.Drawing.Size(455, 228); + this.HostsCTRL.TabIndex = 0; + this.HostsCTRL.ItemsPicked += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.HostsCTRL_ItemsPicked); + this.HostsCTRL.ItemsSelected += new Opc.Ua.Client.Controls.ListItemActionEventHandler(this.HostsCTRL_ItemsSelected); + // + // TopPN + // + this.TopPN.Controls.Add(this.DomainNameCTRL); + this.TopPN.Controls.Add(this.DomainLB); + this.TopPN.Dock = System.Windows.Forms.DockStyle.Top; + this.TopPN.Location = new System.Drawing.Point(2, 2); + this.TopPN.Name = "TopPN"; + this.TopPN.Size = new System.Drawing.Size(455, 21); + this.TopPN.TabIndex = 1; + // + // DomainNameCTRL + // + this.DomainNameCTRL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DomainNameCTRL.CommandText = "Refresh"; + this.DomainNameCTRL.Location = new System.Drawing.Point(47, 0); + this.DomainNameCTRL.Margin = new System.Windows.Forms.Padding(0); + this.DomainNameCTRL.MaximumSize = new System.Drawing.Size(4096, 21); + this.DomainNameCTRL.MinimumSize = new System.Drawing.Size(400, 21); + this.DomainNameCTRL.Name = "DomainNameCTRL"; + this.DomainNameCTRL.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.DomainNameCTRL.SelectDomains = true; + this.DomainNameCTRL.Size = new System.Drawing.Size(408, 21); + this.DomainNameCTRL.TabIndex = 1; + this.DomainNameCTRL.HostConnected += new System.EventHandler(this.DomainNameCTRL_HostConnected); + this.DomainNameCTRL.HostSelected += new System.EventHandler(this.DomainNameCTRL_HostSelected); + // + // DomainLB + // + this.DomainLB.AutoSize = true; + this.DomainLB.Location = new System.Drawing.Point(0, 4); + this.DomainLB.Name = "DomainLB"; + this.DomainLB.Size = new System.Drawing.Size(43, 13); + this.DomainLB.TabIndex = 0; + this.DomainLB.Text = "Domain"; + this.DomainLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // HostListDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(459, 285); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.TopPN); + this.Controls.Add(this.ButtonsPN); + this.MaximumSize = new System.Drawing.Size(1024, 1024); + this.MinimumSize = new System.Drawing.Size(467, 319); + this.Name = "HostListDlg"; + this.Padding = new System.Windows.Forms.Padding(2, 2, 2, 0); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Discover Hosts"; + this.ButtonsPN.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.TopPN.ResumeLayout(false); + this.TopPN.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel MainPN; + private HostListCtrl HostsCTRL; + private SelectHostCtrl DomainNameCTRL; + private System.Windows.Forms.Panel TopPN; + private System.Windows.Forms.Label DomainLB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.cs new file mode 100644 index 00000000..cecc6ab0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.cs @@ -0,0 +1,179 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Allows the user to browse a list of servers. + /// + public partial class HostListDlg : Form + { + #region Constructors + /// + /// Initializes the dialog. + /// + public HostListDlg() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private string m_domain; + private string m_hostname; + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public string ShowDialog(string domain) + { + if (String.IsNullOrEmpty(domain)) + { + domain = ConfigUtils.GetComputerWorkgroupOrDomain(); + } + + m_domain = domain; + + DomainNameCTRL.Initialize(m_domain, null); + HostsCTRL.Initialize(m_domain); + OkBTN.Enabled = false; + + if (ShowDialog() != DialogResult.OK) + { + return null; + } + + return m_hostname; + } + #endregion + + #region Event Handlers + private void OkBTN_Click(object sender, EventArgs e) + { + try + { + DialogResult = DialogResult.OK; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void DomainNameCTRL_HostSelected(object sender, SelectHostCtrlEventArgs e) + { + try + { + if (m_domain != e.Hostname) + { + m_domain = e.Hostname; + HostsCTRL.Initialize(m_domain); + m_hostname = null; + OkBTN.Enabled = false; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void DomainNameCTRL_HostConnected(object sender, SelectHostCtrlEventArgs e) + { + try + { + m_domain = e.Hostname; + HostsCTRL.Initialize(m_domain); + m_hostname = null; + OkBTN.Enabled = false; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostsCTRL_ItemsSelected(object sender, ListItemActionEventArgs e) + { + try + { + m_hostname = null; + + foreach (string hostname in e.Items) + { + m_hostname = hostname; + break; + } + + OkBTN.Enabled = !String.IsNullOrEmpty(m_hostname); + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void HostsCTRL_ItemsPicked(object sender, ListItemActionEventArgs e) + { + try + { + m_hostname = null; + + foreach (string hostname in e.Items) + { + m_hostname = hostname; + break; + } + + if (!String.IsNullOrEmpty(m_hostname)) + { + DialogResult = DialogResult.OK; + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/HostListDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.Designer.cs new file mode 100644 index 00000000..f24457a2 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.Designer.cs @@ -0,0 +1,122 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class SelectHostCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.HostsCB = new System.Windows.Forms.ComboBox(); + this.ConnectPN = new System.Windows.Forms.Panel(); + this.ConnectBTN = new System.Windows.Forms.Button(); + this.ConnectPN.SuspendLayout(); + this.SuspendLayout(); + // + // HostsCB + // + this.HostsCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HostsCB.FormattingEnabled = true; + this.HostsCB.Location = new System.Drawing.Point(0, 0); + this.HostsCB.Name = "HostsCB"; + this.HostsCB.Size = new System.Drawing.Size(578, 21); + this.HostsCB.TabIndex = 0; + this.HostsCB.SelectedIndexChanged += new System.EventHandler(this.HostsCB_SelectedIndexChanged); + // + // ConnectPN + // + this.ConnectPN.Controls.Add(this.ConnectBTN); + this.ConnectPN.Dock = System.Windows.Forms.DockStyle.Right; + this.ConnectPN.Location = new System.Drawing.Point(581, 0); + this.ConnectPN.Margin = new System.Windows.Forms.Padding(0); + this.ConnectPN.Name = "ConnectPN"; + this.ConnectPN.Size = new System.Drawing.Size(74, 21); + this.ConnectPN.TabIndex = 1; + // + // ConnectBTN + // + this.ConnectBTN.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConnectBTN.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ConnectBTN.Location = new System.Drawing.Point(0, 0); + this.ConnectBTN.Name = "ConnectBTN"; + this.ConnectBTN.Size = new System.Drawing.Size(74, 21); + this.ConnectBTN.TabIndex = 0; + this.ConnectBTN.Text = "Connect"; + this.ConnectBTN.UseVisualStyleBackColor = true; + this.ConnectBTN.Click += new System.EventHandler(this.ConnectBTN_Click); + // + // SelectHostCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.ConnectPN); + this.Controls.Add(this.HostsCB); + this.Margin = new System.Windows.Forms.Padding(0); + this.MaximumSize = new System.Drawing.Size(4096, 21); + this.MinimumSize = new System.Drawing.Size(400, 21); + this.Name = "SelectHostCtrl"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.Size = new System.Drawing.Size(655, 21); + this.ConnectPN.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox HostsCB; + private System.Windows.Forms.Panel ConnectPN; + private System.Windows.Forms.Button ConnectBTN; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.cs new file mode 100644 index 00000000..77c7d816 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.cs @@ -0,0 +1,263 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Reflection; + +using Opc.Ua.Configuration; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Displays a drop down list of hosts. + /// + public partial class SelectHostCtrl : UserControl + { + #region Constructors + /// + /// Initializes the control. + /// + public SelectHostCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private int m_selectedIndex; + private bool m_selectDomains; + private event EventHandler m_HostSelected; + private event EventHandler m_HostConnected; + #endregion + + #region Public Interface + /// + /// Whether the control is used to select domains instead of hosts. + /// + [System.ComponentModel.DefaultValue(false)] + public bool SelectDomains + { + get { return m_selectDomains; } + set { m_selectDomains = value; } + } + + /// + /// The text displayed on the connect button. + /// + [System.ComponentModel.DefaultValue("Connect")] + public string CommandText + { + get { return ConnectBTN.Text; } + set { ConnectBTN.Text = value; } + } + + /// + /// Displays a set of hostnames in the control. + /// + public void Initialize(string defaultHost, IList hostnames) + { + HostsCB.Items.Clear(); + + // add option to browse for hosts. + HostsCB.Items.Add(""); + + // add any existing hosts. + if (hostnames != null) + { + foreach (string hostname in hostnames) + { + HostsCB.Items.Add(hostname); + } + } + + // set a suitable default hostname. + if (String.IsNullOrEmpty(defaultHost)) + { + if (!m_selectDomains) + { + defaultHost = System.Net.Dns.GetHostName(); + } + else + { + defaultHost = ConfigUtils.GetComputerWorkgroupOrDomain(); + } + + if (hostnames != null && hostnames.Count > 0) + { + defaultHost = hostnames[0]; + } + } + + // set the current selection. + m_selectedIndex = HostsCB.FindString(defaultHost); + + if (m_selectedIndex == -1) + { + m_selectedIndex = HostsCB.Items.Add(defaultHost); + } + + HostsCB.SelectedIndex = m_selectedIndex; + } + + /// + /// Raised when a host is selected in the control. + /// + public event EventHandler HostSelected + { + add { m_HostSelected += value; } + remove { m_HostSelected -= value; } + } + + /// + /// Raised when the connect button is clicked. + /// + public event EventHandler HostConnected + { + add { m_HostConnected += value; } + remove { m_HostConnected -= value; } + } + #endregion + + #region Event Handlers + private void HostsCB_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (HostsCB.SelectedIndex != 0) + { + if (m_HostSelected != null) + { + m_HostSelected(this, new SelectHostCtrlEventArgs((string)HostsCB.SelectedItem)); + } + + m_selectedIndex = HostsCB.SelectedIndex; + return; + } + + if (!m_selectDomains) + { + // prompt user to select a host. + string hostname = new HostListDlg().ShowDialog(null); + + if (hostname == null) + { + HostsCB.SelectedIndex = m_selectedIndex; + return; + } + + // set the current selection. + m_selectedIndex = HostsCB.FindString(hostname); + + if (m_selectedIndex == -1) + { + m_selectedIndex = HostsCB.Items.Add(hostname); + } + } + + HostsCB.SelectedIndex = m_selectedIndex; + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ConnectBTN_Click(object sender, EventArgs e) + { + try + { int index = HostsCB.SelectedIndex; + + if (index == 0) + { + return; + } + + if (m_HostConnected != null) + { + if (index == -1) + { + if (!String.IsNullOrEmpty(HostsCB.Text)) + { + m_HostConnected(this, new SelectHostCtrlEventArgs(HostsCB.Text)); + } + + // add host to list. + m_selectedIndex = HostsCB.FindString(HostsCB.Text); + + if (m_selectedIndex == -1) + { + m_selectedIndex = HostsCB.Items.Add(HostsCB.Text); + } + + return; + } + + m_HostConnected(this, new SelectHostCtrlEventArgs((string)HostsCB.SelectedItem)); + } + } + catch (Exception exception) + { + GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + #endregion + } + + #region SelectHostCtrlEventArgs Class + /// + /// The event arguments passed when the SelectHostCtrlEventArgs raises events. + /// + public class SelectHostCtrlEventArgs : EventArgs + { + /// + /// Initilizes the object with the current hostname. + /// + public SelectHostCtrlEventArgs(string hostname) + { + m_hostname = hostname; + } + + /// + /// The current hostname. + /// + public string Hostname + { + get { return m_hostname; } + } + + private string m_hostname; + } + #endregion +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/SelectHostCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.Designer.cs new file mode 100644 index 00000000..1e521bcc --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.Designer.cs @@ -0,0 +1,192 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class UsernameTokenDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonsPN = new System.Windows.Forms.Panel(); + this.OkBTN = new System.Windows.Forms.Button(); + this.CancelBTN = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.UserNameCB = new System.Windows.Forms.ComboBox(); + this.PasswordTB = new System.Windows.Forms.TextBox(); + this.PasswordLB = new System.Windows.Forms.Label(); + this.UserNameLB = new System.Windows.Forms.Label(); + this.ButtonsPN.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonsPN + // + this.ButtonsPN.Controls.Add(this.OkBTN); + this.ButtonsPN.Controls.Add(this.CancelBTN); + this.ButtonsPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ButtonsPN.Location = new System.Drawing.Point(0, 55); + this.ButtonsPN.Name = "ButtonsPN"; + this.ButtonsPN.Size = new System.Drawing.Size(313, 31); + this.ButtonsPN.TabIndex = 0; + // + // OkBTN + // + this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkBTN.Location = new System.Drawing.Point(4, 4); + this.OkBTN.Name = "OkBTN"; + this.OkBTN.Size = new System.Drawing.Size(75, 23); + this.OkBTN.TabIndex = 1; + this.OkBTN.Text = "OK"; + this.OkBTN.UseVisualStyleBackColor = true; + // + // CancelBTN + // + this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBTN.Location = new System.Drawing.Point(234, 4); + this.CancelBTN.Name = "CancelBTN"; + this.CancelBTN.Size = new System.Drawing.Size(75, 23); + this.CancelBTN.TabIndex = 0; + this.CancelBTN.Text = "Cancel"; + this.CancelBTN.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.Controls.Add(this.UserNameCB); + this.panel1.Controls.Add(this.PasswordTB); + this.panel1.Controls.Add(this.PasswordLB); + this.panel1.Controls.Add(this.UserNameLB); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(313, 55); + this.panel1.TabIndex = 1; + // + // UserNameCB + // + this.UserNameCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UserNameCB.FormattingEnabled = true; + this.UserNameCB.Location = new System.Drawing.Point(65, 7); + this.UserNameCB.Name = "UserNameCB"; + this.UserNameCB.Size = new System.Drawing.Size(244, 21); + this.UserNameCB.TabIndex = 5; + // + // PasswordTB + // + this.PasswordTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PasswordTB.Location = new System.Drawing.Point(65, 31); + this.PasswordTB.Name = "PasswordTB"; + this.PasswordTB.PasswordChar = '*'; + this.PasswordTB.Size = new System.Drawing.Size(244, 20); + this.PasswordTB.TabIndex = 7; + // + // PasswordLB + // + this.PasswordLB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PasswordLB.AutoSize = true; + this.PasswordLB.Location = new System.Drawing.Point(6, 35); + this.PasswordLB.Name = "PasswordLB"; + this.PasswordLB.Size = new System.Drawing.Size(53, 13); + this.PasswordLB.TabIndex = 6; + this.PasswordLB.Text = "Password"; + this.PasswordLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UserNameLB + // + this.UserNameLB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UserNameLB.AutoSize = true; + this.UserNameLB.Location = new System.Drawing.Point(6, 11); + this.UserNameLB.Name = "UserNameLB"; + this.UserNameLB.Size = new System.Drawing.Size(60, 13); + this.UserNameLB.TabIndex = 4; + this.UserNameLB.Text = "User Name"; + this.UserNameLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UsernameTokenDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(313, 86); + this.Controls.Add(this.panel1); + this.Controls.Add(this.ButtonsPN); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "UsernameTokenDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Specify User Name and Password"; + this.ButtonsPN.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel ButtonsPN; + private System.Windows.Forms.Button OkBTN; + private System.Windows.Forms.Button CancelBTN; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label PasswordLB; + private System.Windows.Forms.Label UserNameLB; + private System.Windows.Forms.TextBox PasswordTB; + private System.Windows.Forms.ComboBox UserNameCB; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.cs new file mode 100644 index 00000000..f630083b --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.cs @@ -0,0 +1,100 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Threading; +using System.Security.Cryptography.X509Certificates; + +using Opc.Ua.Client; + +namespace Opc.Ua.Client.Controls +{ + /// + /// Prompts the user to provide a user name and password. + /// + public partial class UsernameTokenDlg : Form + { + #region Constructors + /// + /// Constructs a new instance. + /// + public UsernameTokenDlg() + { + InitializeComponent(); + this.Icon = ClientUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + #endregion + + #region Public Interface + /// + /// Displays the dialog. + /// + public bool ShowDialog(UserNameIdentityToken token) + { + if (token != null) + { + UserNameCB.Text = token.UserName; + + if (token.Password != null && token.Password.Length > 0) + { + PasswordTB.Text = new UTF8Encoding().GetString(token.Password); + } + } + + if (ShowDialog() != DialogResult.OK) + { + return false; + } + + token.UserName = UserNameCB.Text; + + if (!String.IsNullOrEmpty(PasswordTB.Text)) + { + token.Password = new UTF8Encoding().GetBytes(PasswordTB.Text); + } + else + { + token.Password = null; + } + + return true; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Endpoints/UsernameTokenDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.cs new file mode 100644 index 00000000..fb0e416d --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.cs @@ -0,0 +1,222 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + /// + /// A dialog that displays an exception trace in an HTML page. + /// + public partial class ExceptionDlg : Form + { + /// + /// Initializes a new instance of the class. + /// + public ExceptionDlg() + { + InitializeComponent(); + } + + private Exception m_exception; + + /// + /// Replaces all special characters in the message. + /// + private string ReplaceSpecialCharacters(string message) + { + message = message.Replace("&", "&"); + message = message.Replace("<", "<"); + message = message.Replace(">", ">"); + message = message.Replace("\"", """); + message = message.Replace("'", "'"); + message = message.Replace("\r\n", "
"); + + return message; + } + + private void AddBlock(StringBuilder buffer, string text) + { + AddBlock(buffer, text, 0); + } + + private void AddBlock(StringBuilder buffer, string text, int level) + { + if (!String.IsNullOrEmpty(text)) + { + if (level > 0) + { + if (level == 1) + { + buffer.Append(""); + buffer.Append("

"); + } + else + { + buffer.Append(""); + buffer.Append("

"); + } + + buffer.Append(ReplaceSpecialCharacters(text)); + buffer.Append("

"); + buffer.Append(""); + } + } + + private void Add(StringBuilder buffer, Exception e, bool showStackTrace) + { + AddBlock(buffer, "EXCEPTION (" + e.GetType().Name + ")", 1); + AddBlock(buffer, e.Message); + + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + ServiceResult sr = new ServiceResult(sre); + + while (sr != null) + { + AddBlock(buffer, "SERVICE RESULT (" + new StatusCode(sr.Code).ToString() + ")", 2); + + string text = (sr.LocalizedText != null) ? sr.LocalizedText.Text : null; + + if (text != e.Message) + { + AddBlock(buffer, text); + } + + AddBlock(buffer, sr.SymbolicId); + AddBlock(buffer, sr.NamespaceUri); + + if (showStackTrace) + { + if (!String.IsNullOrEmpty(sre.AdditionalInfo)) + { + AddBlock(buffer, "ADDITIONAL INFO (" + new StatusCode(sr.Code).ToString() + ")", 3); + AddBlock(buffer, sre.AdditionalInfo); + } + } + + sr = sr.InnerResult; + } + } + + if (showStackTrace) + { + AddBlock(buffer, "STACK TRACE", 3); + AddBlock(buffer, e.StackTrace); + } + } + + private void Show(bool showStackTrace) + { + StringBuilder buffer = new StringBuilder(); + buffer.Append(""); + //buffer.Append(ExceptionBrowser.Parent.Width); + //buffer.Append("px'>"); + buffer.Append(""); + + Exception e = m_exception; + + while (e != null) + { + Add(buffer, e, showStackTrace); + e = e.InnerException; + } + + buffer.Append("
"); + buffer.Append(""); + + ExceptionBrowser.DocumentText = buffer.ToString(); + } + + /// + /// Displays the exception in a dialog. + /// + public static void Show(string caption, Exception e) + { + // check if running as a service. + if (!Environment.UserInteractive) + { + Utils.Trace(e, "Unexpected error in '{0}'.", caption); + return; + } + + new ExceptionDlg().ShowDialog(caption, e); + } + + /// + /// Display the exception in the dialog. + /// + public void ShowDialog(string caption, Exception e) + { + if (!String.IsNullOrEmpty(caption)) + { + Text = caption; + } + + m_exception = e; + + #if _DEBUG + ShowStackTracesCK.Checked = true; + #else + ShowStackTracesCK.Checked = false; + #endif + + Show(ShowStackTracesCK.Checked); + ShowDialog(); + } + + private void OkButton_Click(object sender, EventArgs e) + { + Close(); + } + + private void ShowStackTracesCK_CheckedChanged(object sender, EventArgs e) + { + Show(ShowStackTracesCK.Checked); + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.designer.cs new file mode 100644 index 00000000..fd758c93 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.designer.cs @@ -0,0 +1,151 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client.Controls +{ + partial class ExceptionDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BottomPN = new System.Windows.Forms.Panel(); + this.ShowStackTracesCK = new System.Windows.Forms.CheckBox(); + this.CloseBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ExceptionBrowser = new System.Windows.Forms.WebBrowser(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.ShowStackTracesCK); + this.BottomPN.Controls.Add(this.CloseBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 181); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(780, 29); + this.BottomPN.TabIndex = 1; + // + // ShowStackTracesCK + // + this.ShowStackTracesCK.AutoSize = true; + this.ShowStackTracesCK.Location = new System.Drawing.Point(3, 7); + this.ShowStackTracesCK.Name = "ShowStackTracesCK"; + this.ShowStackTracesCK.Size = new System.Drawing.Size(138, 17); + this.ShowStackTracesCK.TabIndex = 1; + this.ShowStackTracesCK.Text = "Show Exception Details"; + this.ShowStackTracesCK.UseVisualStyleBackColor = true; + this.ShowStackTracesCK.CheckedChanged += new System.EventHandler(this.ShowStackTracesCK_CheckedChanged); + // + // CloseBTN + // + this.CloseBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.CloseBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CloseBTN.Location = new System.Drawing.Point(353, 3); + this.CloseBTN.Name = "CloseBTN"; + this.CloseBTN.Size = new System.Drawing.Size(75, 23); + this.CloseBTN.TabIndex = 0; + this.CloseBTN.Text = "Close"; + this.CloseBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ExceptionBrowser); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(780, 181); + this.MainPN.TabIndex = 1; + // + // ExceptionBrowser + // + this.ExceptionBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.ExceptionBrowser.Location = new System.Drawing.Point(0, 0); + this.ExceptionBrowser.MinimumSize = new System.Drawing.Size(20, 20); + this.ExceptionBrowser.Name = "ExceptionBrowser"; + this.ExceptionBrowser.ScriptErrorsSuppressed = true; + this.ExceptionBrowser.Size = new System.Drawing.Size(780, 181); + this.ExceptionBrowser.TabIndex = 1; + // + // ExceptionDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(780, 210); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.MaximumSize = new System.Drawing.Size(4096, 4096); + this.Name = "ExceptionDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Exception"; + this.BottomPN.ResumeLayout(false); + this.BottomPN.PerformLayout(); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Button CloseBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.WebBrowser ExceptionBrowser; + private System.Windows.Forms.CheckBox ShowStackTracesCK; + + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/ExceptionDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.cs new file mode 100644 index 00000000..071d6e26 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.cs @@ -0,0 +1,37 @@ +using System; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + public partial class HeaderBranding : UserControl + { + #region Public Constructors + + public HeaderBranding() + { + InitializeComponent(); + } + + #endregion Public Constructors + + #region Private Methods + + private void pictureBox2_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start("http://www.steamware.net"); + } + catch + { + } + } + + private void ServerHeaderBranding_Load(object sender, EventArgs e) + { + labelVersion.Text = this.Parent.Text; + } + + #endregion Private Methods + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.designer.cs new file mode 100644 index 00000000..c56e9aba --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.designer.cs @@ -0,0 +1,116 @@ +namespace Opc.Ua.Client.Controls +{ + partial class HeaderBranding + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HeaderBranding)); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.appName = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(7, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(177, 70); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + this.toolTip1.SetToolTip(this.pictureBox1, "Visit www.opcfoundation.org"); + this.pictureBox1.Click += new System.EventHandler(this.pictureBox2_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.White; + this.label1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(296, 37); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(192, 15); + this.label1.TabIndex = 3; + this.label1.Text = "OPC UA Technology Based Client"; + // + // appName + // + this.appName.BackColor = System.Drawing.Color.White; + this.appName.Font = new System.Drawing.Font("Arial", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.appName.Location = new System.Drawing.Point(201, 7); + this.appName.Name = "appName"; + this.appName.Size = new System.Drawing.Size(382, 27); + this.appName.TabIndex = 8; + this.appName.Text = "OPC-UA Client Browser"; + this.appName.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // labelVersion + // + this.labelVersion.AutoSize = true; + this.labelVersion.BackColor = System.Drawing.Color.White; + this.labelVersion.Font = new System.Drawing.Font("Arial", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelVersion.Location = new System.Drawing.Point(404, 60); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(166, 13); + this.labelVersion.TabIndex = 9; + this.labelVersion.Text = "OPC UA Technology Based Client"; + // + // HeaderBranding + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.labelVersion); + this.Controls.Add(this.label1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.appName); + this.MaximumSize = new System.Drawing.Size(0, 100); + this.MinimumSize = new System.Drawing.Size(500, 80); + this.Name = "HeaderBranding"; + this.Padding = new System.Windows.Forms.Padding(3); + this.Size = new System.Drawing.Size(591, 80); + this.Load += new System.EventHandler(this.ServerHeaderBranding_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label appName; + private System.Windows.Forms.Label labelVersion; + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.resx new file mode 100644 index 00000000..04b7e643 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/HeaderBranding.resx @@ -0,0 +1,545 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAABiYAAAI2CAYAAADUwTBfAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wgAADsIBFShKgAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMtfuaUMAAGElSURBVHhe7d07 + jmRJdi7qnsm9wJkBSb20BifQ4AAaR0yQoEyCSI0EKN4rXI0UKPIIZxKlppLTOFIhU+zb5m7eGRG5PMIf + 9lhm+/uAHwS7qsLM9vbH9rX243cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAsLRPX7796Xf//X8+zC+//van+p8AAAAAALCaW4vB13L67+FBpyZD8Lq6NZoU + AAAAAAArCAq8zQI3eLYhEQYAAAAAgDy6FILfiTPZiXz++j18vbSK1x0AAAAAwGxB8XZ4oIheG70CAAAA + AMBgUbF2YpzJfnDBa6J7AAAAAADo79mHWffO6VY+HEvwOhgWAAAAAAA6igqzWcMxRPt+dAAAAAAA6CAq + yGYPe4v2+awAAAAAANBQVIhdJWzpdMuuaH/PDAAAAAAAzzk9UDoqwC4Wz53YULCfpwcAAAAAgMft0pS4 + 5LQetpD6tQkAAAAAwP12a0r8Jewh2rdJ4uocAAAAAIBHBAXXbcLSlmiaAQAAAABwh6jQultYV7Q/swUA + AAAAgBtFRdZdw5qifZksnmcCAAAAAHCLoMC6cxSP17PUs08AAAAAAPhAVFzdPawl2odZAwAAAADAO6LC + 6lHCOqL9lzUAAAAAAMQ+ffkWF1YPktP6WUOw/9IGAAAAAIAroqLq0cIaon2XNBpeAAAAAACBo18tcYki + 8iKCfZc1XlMAAAAAAJGgoHrYkF+035JGYwIAAAAAIBIUVA8b8ov2W9J8/vrdawoAAAAA4JWgmHr4kFu0 + z7IGAAAAAIA3omLq0UNu0T7LGgAAAAAAfjjdZiYqph49pPbLr7/F+y1jAAAAAAB4ISqkyjnkFu2zjAEA + AAAA4IWokCrnkFu0z5LFg68BAAAAAN4KiqlSQ27RPssWAAAAAAB+8HyJD0J+0X5LktNzMAAAAAAA+GGp + BwhPyKcv3xSWswv2W5oAAAAAAPBGVEyV1yG/aL9NjqslAAAAAAAiQUFV3oT8ov02OwAAAAAABKKCqrwO + a4j23awAAAAAAHBFVFSV12Ed0f4bHLdwAgAAAAB4T1BYlTdhLdE+HBkAAAAAAN4RFVbldVhPtB9HBAAA + AACAD0TFVXkd1hTty05x+yYAAAAAgFsFRVZ5E9YV7c/G+fz1u9cIAAAAAMDNgkKrvAlL+/TlW7xfWwQA + AAAAgDtFxVZ5HbZwut1StH8fCQAAAAAAj2larN0wnh2wqWBffxS3bAIAAAAAaKDrbW42iGL0MZT3wdvU + fwQAAAAAQHNBQV5qAAAAAACAxqKCvJwDAAAAAAA0FhXk5RxI7nLrqZfPi3E7KgAAAAAgNQ/AjqOwS1rB + 6/WjeF4KAAAAAJBLUMg8fCCRU6Msep3emVMjEgAAAABguqCAefhAAqcrHaLX55NxRRAAAAAAMFWrs7F3 + idvekELw2mweAAAAAIBpoqLlUQOzRa/LXgEAAAAAmMFDsM9xD36mC16X3QMAAAAAMEVUsDxaYKboNTkq + AAAAAACjHf2qCVdLMFXwmhweAAAAAIDhomLlUQKTnB64Hr0mB+f0IHwAAAAAgJFOhcmgYLl7ToVhmCV4 + TU4LAAAAAMBwUbFy98Ak2ZqBbmkGAAAAAMwRFCy3DcwUvSZnBwAAAABgtCz3vO8emC16XU6OZ00AAAAA + AFOcbukSFC13iVvWMF3wukwTAAAAAIApooLlBtGUIIXgtZkmAAAAAADTREXL1ZPIIw8/1ljZRLBv0wQA + AAAAYKqocLlqEmh9m6zTM0FYSvbnuHjOBAAAAAAwX1C8XCkprjII5tUyrqRYxyNXygwPAAAAAMBsrc/0 + H5XpZ38Hc+oZDYr8NCYAAAAAAO4RFTGzZqZoPgPjFk95aUwAAAAAANwrKmRmy0zRfGaFdDQmAAAAAAAe + FRU0Z2eitLe7IhWNCQAAAACAJ2Qpsp7mMVH6Z3CQxuk2W9E+SpLZ7yUAAAAAgJtMK7YmsMyDwckj2j9Z + AgAAAACwmt6F+tPfT2KZpsQl5BDtmywBAAAAAFhZq8J9xtvLLNeUuIT5ov2SJQAAAAAAuylNhvdyui3U + CqKi7iphvmi/TE6mq5EAAAAAAHgpKOquFAXoBIL9Mj2D3XXVEQAAAADAYUVF0xXDVOXqoHC/TMrQZlUw + /q05bTcAAAAAgEMJiqXLhrmifTIrAzR9LgsAAAAAwCFEBdKFs8zzPDZ12v7BfhmdIVchBOM+G7ckAwAA + AAD2FxRHlw9zRftkdHqLxmwZAAAAAIAtRQXRHcJ80X4Zld6iMXsEAAAAAGA7UTF0lzBftF96p7dozE5x + WycAAAAAYCtNH9qbMeQQ7Zte6WzKewYAAAAAYBtREXSjeAh2IsH+aZ4RonFHBJimPEj/9DD96L355/zl + nwMAAABwg6DAsl1I49QoivbRkxlWEAzGHhZgiPcaEPdGcxwAAADgjV5F4nQhnVa3Qxr+/IVgDkMDdDHi + Fm3DP68AAAAAMppyr/wZIa1Hm2MzbpmS4v0CtBW9z0YEAAAA4LCiYsmGcSuNdZSGw9sGQPn/U9y7/cWc + ZsVrGRoJ3l9TAgAAAHA4UZFkw6QoarO+4LU1Om4FA08K3lcpAgAAAHAYUXFk18CzotfVjAB3a/lA615x + RRQAAABwDEFhZNvAs6LX1YwA94neR5kDAAAAsLWoILJr4FnR62pGgNtF76EVAgAAALCtqBiya+BZ0etq + RoDbRO+flQIAAACwpagQsmvgWdHrakaAj0XvnRUDAAAAsJ2oCLJr4FnR62pGgPdF75uVAwAAALCVqACy + YX759TeFHZ4XvLZGx2sZPhC8b7YIAAAAwDai4seG+fTlm6IOzwteW8MDXBe9Z3YKAAAAwBaiwseOgVai + 19fIALHo/bJjAAAAAFZ3upIgKnzsFmglen0Nits4wRXB+2XrAAAAACwvKnrsFmjk1ByIXmMjAvzk89fv + 8ftl5wAAAAAsLyp6bBRnmdNc8DrrHa9juCJ4vxwiAAAAAEuLCh47BRqbcoY28LPovXKQaFYCAAAA6wuK + HtsEOhh6S6cJrjVfTs+lgSyC1+ihAgAAALC0qOCxQbKdUVqKvbcUtE9FYfIL9l3zjBbN4Uq8TpkqeE0e + La6aAAAAAJY29OzvkUngdIZ5NLcbo/CUXLDPmmWkaPxbAzNEr8UjBgAAAGBpUcFj4cwu6Ldu9mhQ5NWl + sTdSNP69gYG6vOcWje8GAAAAYGnbFXom6f1gZPf4TyzYX/dmeJExmMPDgVGi19+RAwAAALC0qOCxYKad + QRrMpVvIK9pfH2TKazaYx9OBzno3f5cMAAAAwPKiosdqmSGaR++Q2kcF1Km3YAnm0yzQU/SaE+87AAAA + YHFRwWOlzBDNY1TgEdFrqVHcboyugtec/DkAAAAAy4uKHgtkSkE0mMfwwD2i11DrQC/R60285wAAAIBN + RIWPxNnmHv2PBm4VvX5aBzo4fc5HrzdxpRIAAACwkaD4kTaDnYpA0TwmZerzCljGqAcHez3SRfBakxcB + AAAA2EZU/MiWGaJ5zA58YOgZ59Ba9DqTHwEAAADYSlQASZBpZ2UHc0kTeE/0mukVaC16ncmPAAAAAGwn + KoJMzNT7aQfzSRN4T/Sa6RVoLXqdyY8AAAAA7CjNcxUmWuLhq3BN9HrpFWho1PNRlg4AAADA1qKCyIBM + vUriIphXusAVnjHBqtI0xhPn1LwBAAAA2F5QGOmRac+SiATzyxbFKa4ZddZ5qvcsJ6Ww/zL1f16GxsTH + WXG/AgAAADwuKJC0SLbi5hK3cboEroleL63DNM80nzIXtjUmPo7GBAAAAHBcQbHknqQ+0zqYb9os5FrB + UZGtk2BbNw9D9SjaZ/ss1pj4OD4zAQAAAKpSKIkKSqXoVf73pW479GYNqZPYo1eepG5afeDyPniZqa/9 + YPu2SllbHYXOHn0v3Z0ETq+raG7yl3jvAQAAAOwoKASlTUbRPB/IMg2KYO7vZqRo/Fahu2ENibeZSGPi + hgAAAACwoagQlDWJ9CqiZjw7uEnxdJRo7GdDf9F2H5ip77tgPvIiAAAAAGwoKgRlTRbR3Foni2huz2SE + aNxHQ1/RNp+ZGaJ5yI8AAAAAsKGoEJQ1GUTz6pXZojm1yAjRuPeGvqJtniGjRXOQHwEAAABgQ1EhKGtm + i+bUO7NEc2mZEaJxbw19Rds8U0aKxpcfAQAAAGBDUSEoa2aK5jMqo0Vz6JEBPn/9Ho99JRmf8bGdYLun + zCjR2HLK6Vk+AAAAAGwoKAalzSzRXEZnlGjsnhno2kO8NSMGCrZ/6gzQ5OHym+bUWAQAAABgQ0ExKG0m + OJ2xG81lcIYUz4Nxe0dT4ECC/b9ERojGFZ8NAAAAALta5Wzdabf0COYyLb1FY44I28vS4Hs4vUVjis8G + AAAAgK1FBaFsmSBbMbVrcyYYb1SmNZ0YJ9jvK6X3a3T5xk2H+FwAAAAA2F1QFEqXGaJ5zE4v0Vgjw76i + /b1ieovGPHIAAAAA2Fv22znNOHM26xnMPR4Gm2KtbGm7KwF6isY7cgAAAAA4gKgwlCUzRPPIktaiMQbH + bVs2FezrpdPRKs/7GRIAAAAAjiFrUWxawTqYS5q0Fo0xI2xlu6slLukpGu+IAQAAAOBAogLR7MwSzSVL + WovGmBH2Eu3jHdKRqyb63K4OAAAAgOyCQtG0TJK9OHiaX0vBGFPCNk7F5Wgf75KeovGOFAAAAACOJ0tR + fuYzB7LfgkZjgvSi/btTOtq+qfNeAAAAADiuFIX5maL5JErzpk0wxpSwj2j/7pTeojGPEAAAAACObWpz + YrZoTtnSUvT3Z4QtHOGM/yFXdAXjbh0AAAAAKEY3J4YU+24RzC1TXDFBatG+3TGdHeqWTgAAAADwk6iQ + 1DinIlwSU68WuSE7PmMiTVOK5wX7d8sMkP2zqEW89wEAAAC4LigoNUsyWR4Afi2tmzgpip/sI9q/O2aU + aOydAgAAAAAfigpLjyazaL5Z0kM0zsiwj2j/bpihV3kF428RAAAAALjHo/c/X+a2HcHc06SHaJxBcSuX + zQT7eMc0v6XaR4I5LB0AAAAAeFZpVJRCXZT6r6wlKqRlSS/RWCPCXqJ9vGGmfLYF81gyAAAAAMDPHr0i + pHt6isbrHFdLbCjYzztmWtM1mMtSAQAAAADeERXVZqe3aMyeYT/Rft4wM68GS/HA+jujCQkAAAAAN8hW + /BtWCA3G7hL2FO3rDZPiNnXBvFIGAAAAALhDVGSblZGi8VuGfUX7e8OkaEwUwdxSBQAAAAC4T5pnTcwQ + zaNF2Fu0zzfM6bMhk2COUwMAAAAAPCEquo3OLNFcngn7i/b7jskqmuvIAAAAAACNRAW4UZnsdMuaaF53 + JN3Z5fQT7P8tk100554BAAAAADqIinG9k8hDDQqOJ3od7JhF9LwdnYYjAAAAAIwQFOe6Jbm3jYpffv0t + zwOBmSbNc1k6przW63KX88wVUN7fAAAAADBLULBrHlhZ9JreKQAAAAAAo3U7Kxx2EL22dwoAAAAAwCzP + 3BblZdwihZ1sfzsnAAAAAIAUogLmR4FdRa/3HQIAAAAAkFW5CuJt6j+C7Z0eEB0V9lcPAAAAAACQVFTY + XzkAAAAAAEBe2101AQAAAAAAJBcV+FcMAAAAAACQ3+ev3+NC/0I5XfkBAAAAAAAsIij2LxUAAAAAADia + e688+PTlW66CejDHJQIAAAAAAIcSFcvvTRbR3DIHAAAAAAAOIyqUP5sMonllDAAAAAAAHEJUJG+d2aI5 + ZQoAAAAAABxCVCTvldmiOWUIAAAAAAAcQlQk753ZojnNDAAAAAAAHEJUJB+VyT5//R7Pa2B++fU3TQkA + AAAAAA4iKJQPTwbRvEYEAAAAAAAOIyqUz0oW0dx6BAAAAAAADiUqls9OIqfbK0VzfCJu2QQAAAAAwHEF + hfPZ+fTlW8rC/TNNCs0IAAAAAAAICuhpsojSRIlS/zEAAAAAAPAXUUMgSRT3AQAAAABgJ0EzIF0AAAAA + AIBNRI2AbAEAAAAAADYRNQKSxQOjAQAAAABgA6eCf9AISBkAAAAAAGBxUQMgawAAAAAAgMVFDYCsAQAA + AAAAFhc1ALIGAAAAAABYXNQASJrPX79rTgAAAAAAwNKCBkDWfPryTWMCAAAAAHjtl19/CwuKJYqKkFDw + Xs0aV0wAAAAAACenhkNQRHw3QA7R+zNrAAAAAADC4uGNOV1dAcwVvDfTBgAAAAA4uKhw+EiAeaL3ZNYA + AAAAAAcWFQ2fCTBH9H7MGgAAAADgoKKC4ZNxWyeYKHhPZovPCAAAAAA4qqBg2CzAHNH7MVsAAAAAgIOK + CoYtA4wXvRezBQAAAAA4oKhY2DrAHNH7MUk+ffnmswEAAAAADikoGLaO+8jDJMH7MU0AAAAAgIOKCoY9 + AswRvR8nx9USAAAAAHBQp+JgUDTsEmCO6P04OwAAAADAMWlMwEFE78lZAQAAAACOS2MCDiR6X44OAAAA + AHBsGhNwMNF7c1A8BB8AAAAA+N3nr9/DAmKXADlE78/O0ZQAAAAAAH4IiohdAuQRvUd7BQAAAADglaiQ + 2DinKzOAXIL3avMAAAAAALx1usVKVFBsGSCv6D37ZE7PrwEAAAAAuCooLLaKe8vDIoL3773RkAAAAAAA + bnIqJgZFxiYBlnLv54HmIwAAAADwmKDg+HQAAAAAAACuipoLjwYAAAAAAOBDUZPh3gAAAAAAANzqqWdO + TFbm/jb1HwEAAAAAAJmdHmobNR+iTHLXHP+cz1+/a1QAAAAAAEB26a5ECJoO92T6/AEAAAAAgPzuvULi + wwAAAAAAAISixkKDuL0TrdzaODv9ewAAAAAAJBYUd1tGoZhHPXsVj9ceAAAAAEA2QTG3S+AOzzYk3kaD + AgAAAAAgg6CA2zVwi+i10yoAAAAAAEwUFW57B644PY8kes00jqsnAAAAAABmCAq2I/LpyzdFYX7S+tZN + H0VzAgAAAABgtKBYOyzwwuimxCWaEwAAAAAAowRF2qGBl6LXyKCcbh8FAAAAAEBnQYF2eKCIXhujAwAA + AABAZ1FxdnQgel3MCgAAAAAAfcy6n/9Pgeh1MSsAAAAAAHQSFWVnhGOLXhOzAwAAAABAB1FBdkI8dPjg + gtfE9AAAAAAA0EFUkJ2QT1++KQQfVJrbib3JaV4AAAAAADQWFGRnRGPiwILXQ5oAAAAAANBYVIydEY4r + ej1kCQAAAAAAbaW5jQ7HFb0eksSzTwAAAAAAGjsVXoOC7PBwSKdbeEWvhyRxizEAAAAAgB6CguzwcEjZ + GxOnAAAAAADQWFSMHRmOK3o9ZAsAAAAAwK7uet5DQ9Nv58RxRa+HbAEAAAAA2E5UDL0xze6BH/ztEXEP + /2NzKycAAAAAgJGiIuijaSH6u73DoWVvTGicAQAAAAD7CIqgz+Z0K6hnBH+za6CIXhtJcrrNGQAAAADA + 8oICaKus0px4ep7sI3h9pAkAAAAAwPKi4mfjZG9OaErwSvAaSROmu/fh/D5fAAAAAOCloIjWK0/fGz/4 + my2iaMhbp9dE8FqZHa/VyYJ9cm/cigsAAACAYwuKZt3zrOhvPhO4Jnq9zA5zRPviyXiIOQAAAADHFBTL + hqSF6O/eEWee86HgdTM9jBXtg9YBAAAAgMOICmSj0lL099+JhgR3CV5D08JY0T7oFQAAAAA4hKg4NjId + lFujvH02QPnf3NOdh714LU0P40Tbv3M0TQEAAADY2tvi/ZTAKqLX7+gwTrT9B0VzAgAAAIB9BQWx4YGV + RK/hUWGcaPuPDgAAAABsKSqGDY4zg1nJrKuMvE8GCrb/tAAAAADAdqJC2IzAQkY3JzQlxpnVeHo3AAAA + ALCVqAg2I7CY04PUo9dy45SHttchGSHYB7PjNQAAAADANk7FrqAINiWwquj13CqMFe2DLAEAAACAHWhM + QBut30tu3TRJsC+yxFUTAAAAAOwjKIBNCWzg2QaFhsREwf5IFwAAAADYQlT8mhHYzK0PUdaMSCLYN+kC + AAAAAFuIil+D4xYlwHTBZ1O2aGIBAAAAsIeg+DU8ABPdenVLigAAAADA6j5//R4Xv0ZmcR89V8BZzhzF + ewX+1O+DYL5pAwAAAABbiIpfg7Jq0f6ZM6xPzSDYwDONzVTvg2B+aQMAAAAAO3imyP50FtNyW3m2Bqva + 7n0QzCttAAAAAGAbUQGsc1a6WuKj2zU9FVhJ9BpukZmi+SSNhiYAAAAA25jyrIlVRHNvnJWaNBzTiCur + pr0PgrlkjcYEAAAAAHsJimDdsopo7p2iOUFaweu1a0aL5pA0GhMAAAAA7CcohDXPKqK5d47mBOkEr9Mh + GSkaP2sAAAAAYEtRMaxVVhHNfVA0J8hixO2brmXo+yAYP20AAAAAYFddCpKLmFmM/UtgsinPnXmT0xxG + CMZOGwAAAADYXlQYuzPLXQEQrGFKaO5a08l9+wPBdpqSAVI0I28NAAAAABxGVCD7IMs1JIpgHbOy5PbL + KNi2H+boom0yKcPeB8HY2eIzAQAAAIBD+uj2LssXzoI1TQ2Pi7bnvTmqaFvMzAjRuNkCAAAAAGwmKgRO + jlsMPSDYjs/kaGepn9YbbIeZGbIPgnHTBQAAAADYTFQIzBBuF22/VjmKaO0ZMkI0bpJoUgIAAADAZk5F + v6AYmCLcJtp2rXME0bozZIRo3CwBAAAAADYTFQKTxJnSNwi2W7dsLONtnC4ZdkutYOzZ8RkAAAAAADsK + ioGpwnXR9uqY0wPgdxWsN1UGSNmcAQAAAAA2FBUDM4Xrou3VO7uK1popo0RjzwoAAAAAsKmoIJgpxKJt + NSDDbis0WrDWVBkpGn90AAAAAICNRUXBTCEWbatR2VG0zkwZLZrDoGzb/AIAAAAAqqAwmCr8LNpOA7Nl + 4ThYZ6rMEM2jczQlAAAAAOAIguJgqvCzaDuNzm6iNWbKLNFcegUAAAAAOIioQJgp/CzaTqOzm2iNmTJT + NJ/WAQAAAAAOJCoSZgqvfPryLd5Oo7ObaI2ZkkE0rydzej0DAAAAAAcTFAuzxP3mA8F2mpHtCsrBGlMl + k2h+d0ZDAgAAAAAO7FT8DwqHKcLPou00IbsVljO/D7Ju689fv4fzvRaNRgAAAADgh6CImCL8LNpOE7Ll + Ge/BOlMEAAAAAGA7UTE0Q/hZtJ0mRGNiYAAAAAAAdpPyNjbEom01Ixs6NVuitU7M6XZJAAAAAABbCoqi + U0MoTfF8V9FaZwYAAAAAYFeprprgfdE2G51NZbpqwtUSAAAAAMD+guLolPC+aJuNzs6i9c4IAAAAAMBL + 751ZXa4+WPZs52A9Q8OHpl/dcgTRukcGAAAAAOAkKiDekFMheSXBGoaE20Xbb1SOIlr7iAAAAAAAhMXD + R7OA09Ue0dx7hvtE23BATlcKNXTr1R/TrkAK5tI1AAAAAMDBRYXDBmld3O0mmHuX8JhoW/ZOA888YHrK + 1UfBPLoEAAAAADi4qHDYOiuI5t0yPOyZAv9DaSH6uw9keHMvmEPTAAAAAAAHFxUOe2UBPR62vOzDwbMJ + tm2XPKnbA7sH6rGGKVeAAAAAAADJBMXD7llEi8LsMrexWkmwnVvm6eJ58DebZrAW7wMNCQAAAADgLCgg + DstC7n04tiJsfy2K5WGeFf3NHpngoYfEAwAAAAD8RVREHJ2FlSJtuRrCFRHzPFQofy9P6tYsuZYELu8B + 7wUAAAAA4H1RkXNCPHeBFp5tCDQrqAd/u2dcmQMAAAAArCMock4LNHL3FRQtRX9/RAAAAAAA0ouKmxPj + 9i/08vJ2W91fZ8Fre0RcNQEAAAAA5BcUN6cHVha9pkcGAAAAACCtqKiZIbCy6DU9MJ7VAgAAAADkFRQ1 + 0wQWdPdzLXoFAAAAACClqKCZJbCi6LU8IwAAAAAA2Zwe/hsVNLMEVhS9lmcEAAAAACCdqJiZKbCi6LU8 + IwAAAAAA6UTFzEQ5XdEBqwley1MCAAAAAJBOVMxMFI0JlhS8lqcEAAAAACCdqJiZKBoTLCl4LU8JAAAA + AEA6UTEzUTQmWFLwWp4SAAAAAIB0omJmpsCCfvn1t/j1PDoAAAAAANmkKaBeC6wqej2PDgAAAABANp+/ + fo8LmlkCq4pezyMDAAAAAJBWVNTMElhV9HoeGQAAAACAtKKiZoKcbjMFKwte1yPiofEAAAAAQGppnzMB + q4te1yMCAAAAAJBeVNycHdhB9NrumNNzYwAAAAAA0gsKnFMDO4le4x3i9mcAAAAAwFqCQue0wEaG3S4N + AAAAAGAlpwfmRsXO0YEnnW5nFL22/pxZVxV0b04AAAAAACwpKngOjPvj85TgNfVeTs240YJ5PBO3bwIA + AAAA1hcUP0dEgfW1UjS/pP5PXPH01T6jRXN4JAAAAAAA24iKoB1z9KbEvbf50cT54d5tdzUzRPO4JQAA + AAAAW4oKoh1y1CL702f51xy5SdGsKXHJRB+txZUzAAAAAMAxBAXSljniMyVaNSTe5miF617bsf55AAAA + AABmOTUPogLuszmiaDu0zlFEa28VAAAAAADma3aG+lFF26JTdr8SpfktnN4GAAAAAIBkomLuOznycxBO + gm3SO1tv82C9zQMAAAAAQF7laoqXqf8zRVT0HpQdmxPdbi32NgAAAAAAsJyo4D06u4nW2CMAAAAAALCU + qNg9KzuJ1tchrvwBAAAAAGAdQaF7enYRra1XAAAAAABgCVGRe3K2uQIgWFu3AAAAAABAelGBO0t2EK2r + Q3Z8cDgAAAAAADsKitxZssVVE8G6esQzJgAAAAAAyC8ocKfL4k5XMkTrah0AAAAAAEgvKnBnyw6idbUO + AAAAAABk9vnr97jAnSxbPDshWFfLeL4EAAAAAAD5BQXutFnc6fkP0bpaBQAAAAAA0osK3Fmzg2hdDeJq + CQAAAAAA1hAUudNmF9Hang0AAAAAACwhKnJnzU6i9T0aAAAAAABYRlTozprdRGu8NwAAAAAAsJSo2J01 + O4rWeUM8UwIAAAAAgDUFRe+02Vm03iAaEgAAAAAArC0ofqfNQXz68u3cgPjzmsv/Lf9//UcAAAAAALC4 + t8X/zAEAAAAAABYXNQCyBgAAAAAAWFzUAMgaAAAAAABgbZ+/fo+bAMniOQsAAAAAAExxeSjwe1HEvlOw + DdMFAAAAAACGiQrVN+bUyOB9wXZLFwAAAAAA6Ol01UNUoH4mXBdtrywBAAAAAICuouJ0y/CzaDtlCQAA + AAAA9HDL8yOahZ9F22l2AAAAAACgi6go3Tu8MrQxdGsAAAAAAKC5qCA9KrwWbaNZAQAAAACA5qKC9Ojw + WrSNRgcAAAAAAFpLdesgXou20agAAAAAAEAXUVF6Zngt2ka9AwAAAAAAXURF6cn59OWbwvhbwXbqFjiA + /+f//f/+9K//9u9/+uMf/+cpv//93/7pf/xf//fdufz3f/8P//in8jdL6hAAAAAAwFunBkBUmM4QfjLk + lluwmf/+X//7T//0z//ypz/84e/CxkLvlHEvTYs6JQAAAAA4sKgwnSSnIjyxYHs9HdhIaUQ8egXEiJS5 + lTmWpkmdMgAAAAAcRFSgzhTeF22zewObKFclRE2AFVKuqii3lapLAQAAAIBNRUXqbOFmt97myZUo7KQU + 8//mr/46LPavmnI1hSYFAAAAAHsKitYpA/DGyldH3JNyJYXbPQEAAACwj6gJkDEA1R//+D/DAv7uKVeF + eHg2AAAAAEu79bY/KQIcXnlQdFSwP1o0KAAAAABYV9QAyBrgsP7jP/9ru2dItEh5DkXdRIdRnrtR1q0x + AwAAALCqqAGQNJ++fFOEggM66m2bbk3dTFsrV8q8bUxpTAAAAACsKmgAZI3GBByPqyTeT2na1E21lfKg + 748ebK4xAQAAALCqoAGQNRoTcByl6BwVo+V1SgG/brLlldt1/eEPfxeuM4rGBAAAAMCqggZA1mhMwDF4 + wPVtKVeT1E22rMvzIqL1fRSNCQAAAIBVBQ2ArNGYgP15nsTtKQ2cutmWEj0v4pFoTAAAAACsKmgAZI3G + BOztntv4yDoPvb7leRGPRGMCAAAAYFVBAyBtgG25UuK+lCZO3XRp9W40aUwAAAAALOp0FULUBMgYYEue + KXF/VnjodTTvltGYAAAAAFhZ1ATIGGA7pbgcFZ3l/dTNl1o075bRmAAAAABYWdQESJZffv1NAQo2FBWc + 5f2s8tDraO4tozEBAAAAsLBT0T9oBqQKsJ2/+au/DgvO8n7q5ksvmnvLaEwAAAAArC5qBmQKsJW//4d/ + DIvN8n5+//u/1Zio0ZgAAAAAWF3UDMgSYDtRoVk+zn/8539pTNRoTAAAAADsIGoKZAiwlRVu4fTHP/7P + U0rx+5I6/ZPSILj87//6b/9++nf/8Ie/C/9Wy9ThlxDNv2Xe7hMAAAAAFpTyWRPAVkoxOSoyz0xplJRb + S7W+GqGstTQsojEfSZlj/dNLiNbQMhoTAAAAALuImgOTcmqUAFvJdLXEP/3zvwz9jCmF9Geuqqh/ZhnR + GlpGYwIAAABgJ0GTYEqArZRGQFRgHpnSGMlQ0C5XZ9xzNcVKD72+iNbRMhoTAAAAALuJGgUjA2xn9tUS + o6+QuFVpUpTGQzTnS1YswkfraBmNCQAAAIAdRQ2DEQG2U4rIUXF5RFa62qA8RyJaQ/3HS4nW0TIaEwAA + AAC7ihoHPQNs6aMrAnpltQdGX7y87VW55VP9n5fycj/0iMYEAAAAwM6iBkLjeNB1f5++fPvTtdR/BbqJ + Csu9k/XWTfdYeQ3RPmkZjQkAAACAzZ2K10FDoUlo7tn99fnrd/uFZmY89HqHpsTqov3SMhoTAAAAAAfR + tEFBU72aR5oUPGv0Q69XvfXRbqJ90zIaEwAAAABHFBSxP4pbNrV32qbBtm4d+45HRUXlXilNkDosk0X7 + p2U0JgAAAAC4+gyD+o9p7LRtgwZC79in3KMUj6Oicq/UYUkg2j8tozEBAAAAACMFDYPhgRuU2ypFReUe + cQunXKJ91DIaEwAAAAAwwKyrJK7F1RN8JCoo90odkiSifdQyGhMAAAAA0FvQGMgQz57gPVFBuUdcLZFP + tJ9aRmMCAAAAAHoKGgLpAm/89//632FBuUfKWHVYkoj2U8toTAAAAABAL1ETIGvghVI4jgrKPVKHJJFo + P7WMxgQAAAAA9BAV/7MHqr//h38MC8qt4zZOOUX7qmU0JgAAAACgsdOzG6LCf/J45gQXpWEQFZRb51// + 7d+95hKK9lXLaEwAAAAAQGtB0X+ZwJ/9/vd/GxaUW8fzJXKK9lXLaEwAAAAAQEtRsX+1cHhRMblH6nAk + E+2rltGY6O8//vO/Ttu5XP1U8oc//F24L6KUf7f8N+WWbuVvlL9V/ywTlX1RUvbLZb8+0kS+7N+SctVa + +ZuaxDlc3rdlv1z20T3v3bcpr4+3+7oOtb3ymi7r/ad//pe/bINoG72Xo247ILfL51vJy2OCZ74vLnn5 + vVE+P8sYjgNzuRwrlLz8jmv1Grjk5d+9vBZK6jQOo6z55XHZ3/zVX4fb6728PPYuf897CugnKvKvGg4t + +kLtkTocyUT7qmWOeFDbUzm4LT9MR1zpVA7GLw2LOjwNle16KTJE239Eyj4u45cfYXVaNFTer5cfuI/8 + uG2Z8kO5FBtW/4F8ed+Mutrz8jmosAD08vJ4YPZ3xduU7w7Hgn1cmk6XfT/qe+3RXI4ZdzjBpazhcnwW + rbVXLtvQ+wloIyrwrxoOLfrS7JE6HA2NPpjKmp0P7sqBcykmZviheinQ7fCDZLQZP34eTflhrFFxv0tx + IXth4WXKfLMX3Mv8Mr13vD+AR5XvifJ5ttL3RBSF1fuU77HL1Q7R9lwtq+77sg8yvvdK88/7CbhfVNxf + PRxW9AXZI3U4GtrlAPfZ7HgwVw6eo7VmSilq1unywqWZtHrhoaQ0o8pa6tJ4oRSnW95GYXbKWrI0Kcq2 + XeH9U+aYvbGz4nFCnfoU5XstmlOWlP1ZpzpFNKfMKZ9rderDXZoQGU4s6RnHCa+V/b7aSQr3pi51CeW1 + udJ7sLxunPwA3CYq7K8eDiv6UuyROhwNaUycs0tjohS4Vvwhs0JxrrdVCqnP5Oj7uaz9KJ+5ZZ2jr4wq + n+OrvodK0SPr91B53UZzzpyZV+Wt8BqsU50imk/mjCrwldfsbs3qR1LeP7sck9/iqPu9Lj+tsk92aAiW + 19XM70Mgs6iov0s4pOiLsEfqcDSkMXHO6j+Cyvx3OIDOXJxrrfxQyH5mba8caT8foeH0XkYUmXZ6H2V9 + b0RzzZyZ2zCaT7bUqQ5X9ks0n8ypU+9CI+L97HoVheOCv027X3c9Lj/ScTdwq6igv0s4pOgLsEd0/NvT + mDhn1YO1Mu8dGhJvU9a045n1R25GRCn7ecfP9aMXHaK0/lFcXjc7b+NshZvVtnU5tqlTHy6aT7bM+n4t + heZoPplTp96EY4DHsnqD4khXS96SjPvzKPtHgwI4+fz1e1zQ3ySn9XE40Rdfj+x65sxMDpTPWfEg7QiF + z5n3dm6pfHbt2EBqlZlFxFZK4UEz4uM8W3DfvSHxNqWIWZc+1WoF5WdfZ48qTcloPtky63h6tWPOFu+/ + 8t3gqojns1pB1QkK15PpxKOj/g4ur80dTwwCbhUU87cLhxN94fXIrB+aO9OYOGelHztHPNuu/MCry1+K + 99ftWfXqidUKtlnySMHvyAWEugmmKe/NaG6ZU6c+1CoF6FmvqWgumfNoAbW8XzQj+iTzCSuaEbelbq6p + Vmki9045rqqbBDiUqJC/WzickQffdUgaUTg9Z5XGxJHPus/8Y/SaaB3yfla7Mi5ag9yW8nlWN+O7NH9y + NO6ieWVOnfZQ0Tyypk55qGgemVOnfRefV/2T8USGaJ4Sp26yaTSPXqe8nzJdxQKMEBXydwuHM7K4vVrR + KjuNiXOyNyac2XPOrYXMLNxL+rFkuX3NLaL5y31574qo8p6P/pujZmYxbrUzwGdsq2geWVOnPFQ0j6x5 + 5qqS6O9J+2T6TRjNT37OzDP0/ZZ6P66egIP49OVbXMjfLKd1ciijv+jrsDSgMXFO5saE2wH8nJXO7Inm + Lx9nlStkornL/XnbjHLW8fXMak6U78loPlkz+nt9te3zXkOwh9W2zzNFb2dkj0uW5kQ0N/k5s35v+S11 + W2bd5g8YKSjibxsOZfSPDVdNtKMxcc6sA+WP+HF7Pat8Djjj+/GscPZWNG95LJdmlALCx5nVnIjmkjWj + Pz9Wu0Ju9PZZrdlYp/0QZ2aPTYbjwWhe8nPq5hqmfFc6Dr8vZXvNvDoT6C0q4O8aDif6YuuZOixP0pg4 + J2NjwoH0x1mhObFaMSZbsu/jaM4iIzKjcLDS99LoMz9X/M6uUx9itePNOu2HRX9T+mX2sUI0J/k5dXMN + sdpVWtmiOQG7igr4u4bDib7QemaV23xkpzFxTrbGhKbE7VmhORHNW25P5lt3RfMVGZHyPVFfhsOsdlVA + nfYQ0fjZU6c+RDR+1rS4msQVr+Mz+vZkL0XzkdcZ2Sx2UlCbZL2jAPCMqIC/azicGbdeWKEgmZ3GxDmZ + Drw0Je5P9mdOKFA8n7op04nmKjIqo68KKGdQRvPImjrt7lbbLpeMPPaJxs+aFtulHJdEf1v6ZtZZ3tFc + 5HVG/W7XlGgbzQnYTVTA3zUczqz7qc48O2YHGhPnZDno0pR4PJkvOVageD5Zr5KL5ioyMqOPg6I5ZM2o + 74VVC2FvHzrfUzR+1tQpPy3629I3M64kK6K5yOuMOIlIU6JPMv/GAu4VFfB3DYcUfZGNiC/Lx2lMnJOh + MaEp8Vxm/Ri9VTRnuS8Zz9qK5ikyOvXlOMRKV4CN+sxY9YHto743y36Ixs+YltvEMfactLgV172iecjr + 1E3VjaZE36i3wC6iAv6u4ZBmFlYzFqxW4EfTObNfP5mKGuV9XF4X5QC/bJdrKWdaZnv9ZH72zIx7s5cC + YtlHJdE+jHLZrxmLjxmbT9E8RUZn5C2dZl0h+0jKZ1mddlfR2KukLqGrlQqGZa512k8rhbxoDOmf0UXU + aA7yOnVTdaEp0T8Zj8GBR0QF/F3DIc0+KGj5Y+IoshWWZ6UUZOsmGW72+6YUtFrcCqT8CCxF7ZkNypKs + t3frWaAo7+PyOur1Oi6X32fYtyUz36uRaI4iMzKyEBeNnzGjGjbR2KtkxOtmpWPN1tsjGkP6Z3QRNZqD + /EjPJrHbpY6L5gTsICrg7xoOK/oSG5nMZ0xnpDFxzqxi56yD6XJg2bORV37Yz3xt1Wmk06KwXwptZd+N + LEK+NbOZlu1HUTTH2SnvvZLSpCufbSXv3dv58u+U/Vr+uxav01VS3k9vt1XdLK9c/llp0GW9bc/Iqyai + 8bOmTrmb8rqIxl0lI5r50bhZU6fczMzvy6Pn2ud5D9H48iM990U0nvRLOWaqmx5YUlTA3zC//PqbD6sD + y/CDXTd/rGgftMzIHxajjS4AlvFGb89yABvNpWdGFuju8UiBIkMj4ppS0Irm3DuZPhOi+Y1KeW2UQnmv + 7VFec+W1V8aJxl8x5RilZSG2bJ9MjZxRnxMzPtcfTZ1yNyttiygjTuiJxs2YXtsiGkv6Z+TvwWh8+ZG6 + mZrL9P17pIx4kDnQyacv38JC/m75/PW7D6oDKz+Koy+wGRlxFhgaE48a3cSb+X4onwujfzxkfd1Ec32b + 8tpY6XU/ujCXqfEUza9nSiNi1g/CVc/8La+XEe+nDAXqUe+NlW6d0fv9Eo25WupSuonGzJhex0mKp/My + 6lgqGlt+pG6mpkb/jpLXqbsBWFJQyN8uHF6msyszFbB2FW33ltmxMVHWFK21RzK9B0b/iKjDpnLt87H8 + 7yufgTTyNV1Sh50umlvrlPdNpitmVmlQlPfUjO02u1hSp9FdNHbG9G7KR2OulrqULkZ/NzyTOuXmVm3q + 7pBRx8DR2HJO+U6sm6mZlT5Xdk05GaPuDmA5USF/t3B4ma6auKScZVqnR2PR9m6ZHRsT0Tp7pPwYrkOm + MfIHesb1v/wxVc6izDjHR4387M+y3aK5tU4dKp2st7Ap76vZjZyZRZNR741rTdZs6Vk8WenKkffS8zir + HH9HY2ZMnXIX0XgyJnUXdBWNK+f0+E6KxpHxyXTSDHCPqJC/W+DPshYsdixyzxZt55bZbZ+Nem9k3m7l + R0o05x6pQ6ay+tUR7xnVnCjF5zrkVNHcWqcOlVK2wmy2Rt+MW7iMem+M/Bx/Jj23xyrb4KP0bN6scruV + 3icwrdLI2zEjvheiceWc1sXrVT5TjpAsx+LAnU7PX4iK+bsEXoi+wDKkfIlqULQTbeOW2W1fRWtsnRXO + YBlV0MlWqDyCcuuUaF+0Th1uqmherVOHSm1GAf5tsn7uzdg2deiuRjUhW6ROubldis09i0vReBnT+2SB + ciwbjStjUndDN9GYck7dRE14H+WLmgqsKiro7xJ4YVRx6tGUH5QrFHCzi7Zty+x0wDOiiLHSa3rUWU91 + OAYa8VrP8NkQzat16lDpzWpO9CyqtjJ62/R+rsJFNHbG1Ok2F421auqSmovGypg63a6icWVM6i7oJhpT + 2n8/zzrOkOtZ4RgMCPzy629xUX/xnNYFb6xwNlmZ4663VRkh2qYts0tjYsTZpSteHTDiR4azeeaI9kXL + 9Lz9yK2iebVOHSq9WWfQ1+FTG71tejxsNLLKLTV6HeNFY62aI2+j8jugTrcrt6CZl97Hx9GY0vY4bdSV + 1nJ/XJ0OqwoK+8sHroi+wDKmFEgVMO8XbcuW2WWf9G7SZSjSPipaT8uMKjrwWu/nqWQ4SyuaV+vUoZYw + 40rJOnR6ox8CXIftqnw/R2NnS48rSLJfFXxvehSWVnl9jCqqzWreSv/jwGhMafsbLvr7kiOumoBVRYX9 + 1QNXrHYgXr5cdf5vF23DltmhMdH7PbD6AWHvAnZJHYqBRnz216GmiebUOnWoZfRuwr5NHXYJ5bM6WkOP + 1CG7i8bOlh6N+xHfWyPTo3A7uhn3aOp0h4jGlzGpu6CLaDxpt813+7zdMbucSAjHExX3Vw18YNXLLzUo + PhZtt5bZ4UCn9+X7dZilRetqGe/lOaJ90TJ1mGmiObVOHWoZo09GqMMuYeQZ5KNuUTmy2fJoejTvo3FW + T11aM6vcuqhOd4gZzZry+i+F3ZLyGXRJ+ayu03qlfHaUf16uCir/zQrv8Vtybb0tRONJu/dW9LdXSXn/ + lPd9eU+9/V6+vNd2aLy4Oh0WtcuzJjxbglut/KVb5l6XwRvR9mqZcsBWh1pWtK5WKQe7dZil9f586FGY + 4mO9izCzPx+iObVOHWopI6+aqEMuY1SRb9QDsI96Vnw0xuqpS2smGiNbZhzfR/NokdIIKidh9PpeLEXU + 0VfEtUzPz8RovKOnvB7r5nnKiic3lvfJI6+30jxbuV7Ss/kH9BQU+pcL3GH1B7+V+fvSfS3aTi2zemOi + 5wH1bsX2aI0tU4dhoPL+jfZFq8y+EiaaU+vUoZZSCljRWnqkDrmMUUWWUQXXckwUjZ8tdbpNjHx9j0zr + 461ojGyZcYzZojl5aULM+k2y4u+5np+J0XhHT6vjs+hvZ015b7d6T446iaFldjlZDo4pKvavEnjA6s2J + knImhAbFWbR9Wmb1xkS0plZZfdu81ftMvFFnEPNatC9aZcbZri9Fc2qdOtRyorX0SB1uKdE6Wqcca9Xh + uovGz5a3t9B4xipXidyb1p+n0RjZUqc61CPNyfJ+znYM0/vEg9bpeTJPNN7KKZ8Flzx6bN7id3J5zUd/ + O2N6nCizYs2kTh1Yzeev3+Oif/bAE3ZoTpRoUPQ/GF+5+F5eG9GaWmS3qyWK3mehlvdrHYqBon3RKhoT + efVuNF5Sh1tKtI4eqcN1N2pfP5OWRd0Vz2S9NXWJT1uhaD3zOCqaz8uUuc28IuJWPY9ze6ROu7lorOwp + n9vlNfZI07bs9/IeL8dg1z4P67/6lFU+a3u+T1ermbQ8CQAYbLXnTXiuBC2Ug5noC23FjDwzMZtoe7TM + yo2JngeTK2+X90RrbZk6DANF+6Fl6jBTRPNpnTrUckadVV6HW8qo4586XHcrnNXasokZ/f1dUpf4tBWu + KulxhvOtomZe+d9WvLLzkStAZqVOublorMzp8Torf/Pyum7R9Ful6TWiebhC8/+SI9dEYAurNCc0JWhp + pYPZWzL77N0Zou3QMisX4KP1tEodYju9zwyqwzBQtB9apg4zRTSf1qlDLWfUGdN1uKXsuG2i8TOl1dnx + q50hfm9ane26wlm+IwqK11yaeas2I95a5cz2Ot3morEyp+dvq/K+avGaXqG5OfLqgGj8rKlTBlaVvTmh + KUEPvW/fMiMzz8IaLVp/y6zamOj5ut754WKXH+u9skMBYDW9z/Sqw0wRzad16lDL0Zi4blRxuw43RDR+ + ttSpPqX3d9TstDq+iP52ttSp0sAqJ5r1+k0RjZU5K/y2iuadKaNPRlzpZM6ZTV+gkazNiU9fvvmAoatV + zra5NWU9R7jPYrT2llm1MdHzVh11iG1Fa26VI17VNFvP90JJHWaKaD6tU4daUrSe1qlDLSdaS+vUoYbo + /T5vkTrVp6xwJcAzKY3kutSnRH87U9xupL1oO2eLxsQ52X9bZb8yrdUVePeK5pIxRzpBE/YXNAemBQZZ + 4Yftvdn9x0+05pZZtTERraVFZh0MjxStu2XqMAyiMfFc6lBLitbTOnWo5URraZ061BArXP3a4mSR6O/u + lrrUp0R/N1NcPdletJ2zpVfBNBorc7L/tsp+G6dZ22+VqyZaNbiBLKImwejAYDve2qlk1QL7R6K1tozG + xOsc4SyUnW/9c0QaE8+lDrWkaD2tU4daTrSW1qlDDRPNIVNaFKOjv7tbnr0NRzlui/5uptSp0lC0nbOl + HI/U6TYVjZU52X9bRXPOktkniEVzypg6XWArUcOgd2CyHS+X3/HqiWidLbNiY6LnPajrEFvbuZB9RBoT + z6UOtaRoPa1Th1pOtJbWqUMN07up/GyeLUquUHBvkWcbOCs8tLZOlYai7ZwtGhPnaEw8ntlXW61y62vP + mYCdRQ2E1oFEytUTq3wB35Odnj0Rra9lVmxM9Gyq1SG21rOxU7Lia2plGhPPpQ61pGg9rVOHWk60ltap + Qw2T/TYTz57p2vuzLEuePYkm+4lFrR7wzWvRts4WjYlzMh8H9/4N8GzqNKdZofFbMruBA4wQNRSeDSS2 + ypfwPdnlljzR2lpmxSJytI4W2fGKm0jZ59H6W0VjYiyNiedSh1pStJ7WqUMtJ1pL69Shhsn+wNKSOtWH + 7HiizLXUJT8k+nuZstPJQZlE2zpbNCbOyXwcnLmxmeF3WO/fSK3S670GJPXLr7/FjYYPcvrvYDHZbxNw + b3YoNEfrahmNiR850tkn0fpbxcHyWBoTz6UOtaRoPa1Th1pOtJbWqUMNFc0jU+o0HxL9vV1Tl/yQ6O9l + Sp0mHyjH3yXlRKryPV6yenOu1/FfNFbmZP5tFc03S7L8DovmljF1usCRff76/U+fvnz7U/m/9X+CLZQz + 8nY6a+3ZWwvMFq2pZVZrTJT5RutokTrEIUTrbxWNibE0Jp5LHWpJ0Xpapw61nGgtrVOHGir7bXwePVt+ + hatBWuaZY6/o72VJOcGpTvPwyj4uhdbyHZ39fdsqGhPnaEw8ljrF6aK5ZUydLgDsqxxU7dKgWLk5Ea2n + ZTIfPEd63nasDnEI0fpbZYcrlTIpBbvyPr2kvAfKj/9Len9O12lMEc2ndepQS4rW0zp1qOVEa2mdOtRQ + 5TMgmkuWPHrGa/bnZ7TOo89hyL7/d7mN6j3KPinrPkrz4b1oTJxTXhN16qlk//yo05wumlvG1OkCwP7K + QcwuDYpS4KvLWka0jpbJevB8Tc8ffnWIQ4jW3zJ1GN5R3nsllwZD1lvp1elOEc2ndepQS4rW0zp1qOVE + a2mdOtRw0Vyy5NHC5G63Ev0oj54wk/2ZcHWa2ypXBJV9cLTX663RmDgn62+rzJ8fmU4ijOaXMZ7nA8Dh + 7NKgWK05Ea2hZVZrTERraJFeP6ayirZBy9RhDq38YLg0HlY+k7IuZ4poPq1Th1pStJ7WqUMtJ1pL69Sh + hst8LPZocSn6W7unLv0u2b9L6jS3Ub7Hy3d4tFb5ORoT52T9bZW5oZbpd9gq9Y7VfsMDQDM7NCjqUpYQ + zb9lNCbOefS2Cqso+/nygMURP0zqsIdQmp2X+0jv0Lx9m7rMKaL5tE4daknRelqnDrWcaC2tU4cabsez + 5qO/s3seOVEm+jtZkqmw+IxyrOSKiMeiMXFO1t9W0VyzJNNt4FZ5/+/+2xUAPlR+UK164P7oGX0zRPNv + GY2Jc1bbDm+V92NZQzlILT8MozWOTJ3Wli5NiGjdO6Yue4poPq1Th1pStJ7WqUMtJ1pL69Shhiuf99F8 + sqRO82bluyv6O7vnkUJc9HeyZOXjqLIvdjyxYHQ0Js7J+l6I5polo7bZ5Wrmy8laK1/R3Ov9BgDLKT+Q + VyzSrdKciObeMiv9kCxzjdbQIitshzLHkhUOpOuUt1AaESv/cHk2dTNMEc2ndepQS4rW0zp1qOVEa2md + OtQU0Xyy5N7v0xWPIVukfK/UTXCT3RpSs5Xvds2ItulVKI3GypysvymiuWZJq2328rfS7t8tvd5vALC0 + cvZB9MWZNSt8oUfzbpmsB8+RMtdoDS1Sh5iurPFyFs/KtxKoy1lSKf5kv1XKyNTNMkU0n9apQy0pWk/r + 1KGWE62ldepQU2T+frj3SoDob4xKKU5H//uo1E1wk57HQM9mpSuRdy9Wzkyv31XRWJmT8bdV5s+Pklu2 + 2eVqh8vV4W65tvYxLAB0tdJZSBkPHl+K5twy2df/Us9icR2iu2y3XOqVutxlaEZcT91EU0TzaZ061JKi + 9bROHWo50Vpapw41xeyC+nu5tzgZ/Y1RmX0VQt0EN8l8zHBvM2q0sp8VMftHY+KcjL+typyiuWZJ+U4r + cyz/t7yOdv6N1DJ19wIA15QDjBUaFHW6KUXzbZmMB8/X9DxIrUM0UbZpSZnvUW8BVDdFeqWY4lYO76du + qimi+bROHWpJ0Xpapw61nGgtrVOHmiaaU5bUKX6onAEb/fejUuYQ/e+jcs8xWObCein812mmoyExLhoT + 52T8baXQv2fq7gUAPpL9TKUytzrVdKL5tozGxDl1iJuV7XY5q8eP3p9TN1NK5fPoyM+MuDd1s00Rzad1 + 6lBLitbTOnWo5URraZ061DTRnLKkTvFDs69UK3OY+X1wTyE3+u+zpE4xFYXY8bnn9XyPaKzM0ZiQUam7 + FwC4VTkzLuvZyVkL9NFcW2alxkTP104d4i9K8bpsm8stl5xVf1/qZkzFrRweS918U0TzaZ061JKi9bRO + HWo50Vpapw41TeZCU53ih2Z+Jl+KqLO342lD3CD6bzPk3od491aO3aJ5Sv9c3lOtRWNlTsbfVk7I2TN1 + 9wIA9yoHbNkKvWU+dXqpRHNtmZUaE9H8W8UBe9vUXZaGhsTjqZtwimg+rVOHWlK0ntapQy0nWkvr1KGm + mX0bpPdy67FF9N+OSjnxoMxhdiH7tCE+UBrr0X+bIeXq0TrN6RzLzY3GxDkZf1tF85T1U3cvAPCobA+b + zfjwvmieLaMxIT1Sd9l0mc8oXiV1U04Rzad16lBLitbTOnWo5URraZ061FTRvDLk1uOp6L8dlcvxz+wG + Txn/tDHeMbt58l7qFKfK3Lg5UjQmztGYkFGpuxcAeFams5nrlNKI5tgyGhPSI3WXTZO5iLNa6iadIppP + 69ShlhStp3XqUMuJ1tI6daipsl4NdkuBspxpH/23o1KncRL981G5pYmTuclepzhN2X7RvGR8NCbO0ZiQ + Uam7FwBoYfYP1EsyXZJeRHNsGY0J6ZG6y6ZwK4e2qZt1img+rVOHWlK0ntapQy0nWkvr1KGmylyUrVO8 + avZndZ3GSfTPR6U0l+o0rsragLrcDmuWbFdeHz0aE+doTMio1N0LALQ0+9kT2Z41Ec2xZTQmpEfqLhvO + Q8rbp27aKaL5tE4daknRelqnDrWcaC2tU4eaKvMtbOoUr4r+m5Gp0ziZ/d1Rp3FV9N9kyC23oerFSQj5 + ojFxjsaEjErdvQBAa7N/bJQf+nUq00XzaxmNCWmV8r4tP0pnXHXk/tL9UjfxFNF8WqcOtaRoPa1Th1pO + tJbWqUNNF80tQ+r0ror+m1Ep31d1Giezb5VUp3FV9N9kSJ3ecJoSOaMxcY7GhIxK3b0AQA8zf3S8/cE6 + UzS/ltGYkHtSfnSWlNfNzDMlX9rt/tLllh2X7XzZ1pdE27z8O9HfaZU6zBTRfFqnDrWkaD2tU4daTrSW + 1qlDTZe1SPve8UX5Z9F/Mypvb0E0+3ai7zX0szbeb7kFVQ+eKZE35Xik7qamorEy573Pvlmiecr6qbsX + AOhl5o/tOoXporm1TMaD52ui+Uv7lB+WpWhTXhuZrh6KrFaguDQdShGq1fbVmHgudaglRetpnTrUcqK1 + tE4darrZRf5rKZ/PdYo/mf1sgLfHPqXpG/17o/JeQXfF/dtL1m0h52hMnPP28yWDaJ6yfuruBQB6mtWc + yFKQjebWMhkPnq+J5i/3p9xLu/x4LEWFlfb/W7MLSe/lso1HbF+NiedSh1pStJ7WqUMtJ1pL69ShUojm + NzvvFSkzPtMh+vdGpk7jJ70/4x9Nnd5Q0TwkT957zz8jGitzNCZkVOruBVbwy6+//el3//1/HsqnL9+8 + 4WGycpZx9GXcM28v858lmlvLaEzsmbdn5tdNuI1st7Yo27s0emY0NDUmnksdaknRelqnDrWcaC2tU4dK + IeuD/+v0fhL9uyNTp/FK9O+NTJ3GT7LeqqtOb5gZvwXkvmhMnKMxIaNSdy+Q0TONiA8DTBF9GfdM+ZFf + h54qmlvLaEysm1KsKD8Cyz7csfnwngxFuLL9MzxnQ2PiudShlhStp3XqUMuJ1tI6dagUZt8a6Vrq9F6Z + 3Vi+dnw3uwFw7fsk+ndnp1cB+prZzwCR26IxcY7GhIxK3b1AKlEjoVNOzQ9gmHKQF30h90wdeqpoXi2j + MZE75Ufe5XkPGYrgGcwsHpWC1nsPKZ1BY+K51KGWFK2ndepQy4nW0jp1qBSyXUV2SZ3eK7OLzNeKp7Ob + O9eu1I3+3dkZfewYzUHyRWPiHI0JGZEsJ1ECf3a61VLQOBgaYIjRl3FneM5ENK+WWakxseNl/OWg8mXz + IcNrLrOyjaLt2DvltZd132hMPJc61JKi9bROHWo50Vpapw6VRjTH2Yk+N3t/Zn2Ua8c9s59bVL5n6lRe + if7d2alTG2L260Vuj8bEORl/W2W40ljaptf7DbjD56/f4ybBzABdjT4jMMOBZTSvlsl48HzNqj9OL82H + 1R82nUG0fXum7LvsV6r0fl/UYaaI5tM6daglRetpnTrUcqK1tE4dKo2MzfvoOy/690amTiMU/fsjU6fx + F7ObJVFGn6UbzUFyRmPinIzH+qv+hpLr6fV+A24VNQWSxC2eoK+RP7yvXVY/UjSvltGYaJPyuizz2/Vh + 0xmM3v8Z3v+36L1d6jBTRPNpnTrUkqL1tE4dajnRWlqnDpVGxvvwl4Z8nd5fRP/eyNRphKJ/f2TqNP6i + HE9E/97MRPu0lzJWNIddcjlxpaTs60vq8l+J/vtsKeuo020qGitzMv4OGH0MLX1yeb5g+b53lT1MkuK2 + TbcG6GLkD+9eB9j3iObVMhkPnq+Z/QP15cOmPe9hvGif9MpK+7f3j806zBTRfFqnDrWkaD2tU4daTrSW + 1qlDpRLNc2beHkeNvvL1ba7dLuki2wOwZz/3IsrIYlg0/oq5NCCeOeaO/m629PrdFI2VORl/W+3e5Nsl + LxsPK/1Gh+OIiv/ZA3QRfZH3yOjL1SPRvFpmpYOeMtdoDS1TDgY97yGfUT+oMrzn71Ves9FaWqUOM0U0 + n9apQy0pWk/r1KGWE62ldepQqUTznJm3jYAR3+Pv5aOz/WdfdfJ2fr0/3x9JnVp3s5tYz6a89svrqS7n + adEY2aIxcU7G31azP3vlHI0HWFlU9F8kbu0E7ZXiYfRl3yN1yGmiObXMSgdFve+13OsHFc+L9lfrrNiU + KDQmnksdaknRelqnDrWcaC2tU4dKJXshe/b8brkaLvrvRqUUreo0TkYe796St/PrKePVIrek17FkNFa2 + HHntL5Pxt1Xv31ByzuXWvqXJrPEAOwmK/atFcwLaGvnDtg45TTSnllntoClaQ8vUYUhk1I+pOtxyen8e + 1mGmiObTOnWoJUXraZ061HKitbROHSqVjMWnOrWT2YX2Oo13Rf/dyNRpnET/fGZaXgHwkWj8zPnoNmHP + isbMFo2Jc7L+tormKvflbePB1fVwBEGRf9VoTkA75UAgOljokTrkNNGcWkZj4nXqMCQy4p7fq70PXtKY + eC51qCVF62mdOtRyorW0Th0qnWiuM1OndRL985Gp03hXKTxF/+2o1GmcRP98Zuq0hojGz5pydUeddjfR + uNmiMXGOxsS60XgAXguK+6tHcwLa0JhoF42J16nDkEi0n1qm91mOvWlMPJc61JKi9bROHWo50Vpapw6V + zuzC+tvUaZ1E/3xUbi2aloJU9N+PSp3GSfTPZ6ZOq7uRx/nPZkRToojGzhaNiXOy/rbKdmu4GdF4AG4X + FPV3ieYEPG/kA/HqkNNEc2qZ1RoTvc+eX2177G7EbUnqUMvSmHgudaglRetpnTrUcqK1tE4dKp3ZhfW3 + uXyvzr7N1K3f75nmGf3zWRlVgC96f6+1ysgTG6Lxs0Vj4pysvyVWeV89E40HoI2gmL9dgKdFByM9Uoeb + JppTy2Q9eL6m98MQR/7w5mO99/fqV0sUGhPPpQ61pGg9rVOHWk60ltapQ6Uz8uSNW3I5zijPJ4j++aic + Ns6Nov9+VC7HIWW7Rf98VkrD5rRxBsh21c+1jCx6RuNni8bEOVl/W83+DG6RctVHeZ2Vz8mynUd+LgEH + cbqaICrk7xjgYSN/rNUhp4nm1DJZD56v6b3vywFvHYoEehcndjiTSmPiudShlhStp3XqUMuJ1tI6daiU + ovnOyqXQ3vuz6qOcNsyNov9+VMqVoWUOI491b8lpwwwSjZ8to09siOaQLRoT52T9bZWtaX0t5beYxgMw + T1TA3znAQ0b+WKtDThPNqWWyHjy/J1pHy9RhSCDaPy1Th1maxsRzqUMtKVpP69ShlhOtpXXqUCn1vu3h + PbkUK2fe3/xS7L9VhibK7Dm8jCL8zylnn9fpDhHNIVs0Js7J/Nsqmm+2OEkMmCcq3G+eT1+++dCFB2hM + tIvGxM9ZcZvsKto/rXJvoSorjYnnUodaUrSe1qlDLSdaS+vUoVIaeZz0US6ftdE/G5V7i8izt1+ZQ6bG + RLlf+2nDDBLNIVvqVIeJ5pAtGhPnZP4dscpt0vwWA4Y71C2c3ga426gfa6PPEItE82qZFQ/8ep8JukvB + egfR/mmV0Wc79qIx8VzqUEuK1tM6dajlRGtpnTpUWtGcZ2X2fB65bV/0d0aljN/7WOeenDbIQNEcsqVO + dZhoDtmiMXFO5t9WpckYzTlbXDUBjBcV7I8U4C6jbgfQ6wD7HtG8WmbFxsSIh7fVoZiovDajfdMqOzxf + otCYeC51qCVF62mdOtRyorW0Th0qrZm3Tnqb2fc2r5vkLtHfGZXe33/3pm6SYaI5ZEud6jDRHLJFY+Kc + zL+tVnnOREmG3+HAUUSF+qMFuEt08NIjlwc2zhTNq2VWbEwU0VpaZpez6VfWuzBTh1mexsRzqUMtKVpP + 69ShlhOtpXXqUGmVY5ho3jMy8yzdR8+8nXnFQqazmmcUB6N5ZEud6jDRHLJFY+Kc7L+tojlnzejbyAFH + FRXqjxjgJv/xn/8VHrj0SIYDy2heLaMxEcclxPNpTNxGY+K51KGWFK2ndepQy4nW0jp1qLRWOjO2Zx49 + yWTE1ZkrZMZxYjSPbKlTHSaaQ7ZoTJyT/bdVptvE3ZLdmxNlfW4jDBMd+tkSbwPcZOTBVIZbvUTzaplV + GxMjzgTd5VY/q9KYuI3GxHOpQy0pWk/r1KGWE62ldepQqUXzPlrKCS11c9xFY+ecujmGiuaRLaOPEaM5 + ZIvGxDnZf1uNPMmvVXZrTpTPj7fH7/UfAcNFBfqD5tSkAT708gu8d+qQU0XzaplVGxMjCgYZHn5+ZBoT + t9GYeC51qCVF62mdOtRyorW0Th0qtfI9Fs39SKmb4iHR3ztSZl09Gs0lW0YXSqM5ZIvGxDkr/LaK5p09 + O1xVUD43rj3/yW2EYYLPX7+HBfpDB3hX+TKPvsh7pQ47VTSvlln5IChaT+s8eqYlz9OYuI3GxHOpQy0p + Wk/r1KGWE62ldepQqbkd0XP7KdMDxGdk1rPWorlkTJ3uENH42aIxcc4KjYnVbuf0MqudVFfqF7ecJOCE + OJghKswfPcC7oi/xXul1cH2vaG4tk2WdjxhxOyfPmphHY+I2GhPPpQ61pGg9rVOHWk60ltapQ6UXzf0o + efYYJ9MDxGdk1i0to7lkzMgCaTR+tmhMnLNC4Xz1W9WV32dZt3M5qe3R7476J4BhosK8+DCCK3oX394m + y8FONLeWWbkxMeqg2qW1c/RuTMwquLSmMfFc6lBLitbTOnWo5URraZ06VHrR3I+SZ4/lVrwXe8vUzTBc + NJesqVPuLho7WzQmzlmhMVHsckVYaQLMPKYv+7u89ltsz92epQGpuY3TOwF+MuOHYR16umhuLbP6ZaOj + DqrrcAzUuzGxS8NJY+K51KGWFK2ndepQy4nW0jp1qPR6f0ZkTt0ET4n+7hEy837u0XyyZtSVtdHY2aIx + cc4qjYnRt0gekfK51ev4vuzX8rdbNSGijPo8AYqoIC/nAD+Jvrh7JtNBQTS/1qlDLWnUQbUDxTmifdEq + OzxEr9CYeC51qCVF62mdOtRyorW0Th0qvSOf9V83wVOiv3uEzGzer3b/+xHHiNG42aIxcc4qjYkimv9u + KSfhlddmSflcK/snSrny4vLvzfwM2uWKbsgvKsjLKZ++fPNBBC/0OiPhvWS6jDKaX+vUoZYVralHev3g + 4rpoP7RMHWZp5XUZra1V6jBTRPNpnTrUkqL1tE4dajnRWlqnDrWEaP67p9UVob0/Y7OmLn+KVZ/tUYqb + dQnNReNlS6/j5GiszOn5Omjt6M/RyZiyT+ruAboKCvLyIsDJjKZESR0+hWh+rbP6/SxHFg3c+3OsaB+0 + TDmTuA61LI2J51KHWlK0ntapQy0nWkvr1KGWUIr00Rp2Tqvv61JkjP7+7qnLn2LlbV5+u/QoTEdjZYvG + xDkrNSaKaA0yN3XXAF1FxXj5EbhR+eLatVA6qykx4nLse4y4lDTbmh8RratXNCfG6f05sPozVgqNiedS + h1pStJ7WqUMtJ1pL69ShllC+t6I17JyWt8OI/v7OyXDGbjSv1VKO4VsUqctrOfr72aIxcc5qjYmRJ3jJ + bdnhxClIzYOvbwjc4O2PzF2KpbPvhZztgbijDhZXO4h+a/RBtebEGCP26+r3cu29jeowU0TzaZ061JKi + 9bROHWo50Vpapw61hFUKmy1Tl95E9Pd3ToaiWDSv1VNOtijf2SWl+VOOvS8p///ln5WseJVTmXfdfU1F + Y2XOir+ponXIvOzyHDxI6/QMhagYLz8CN4i+xErKQeGqhbYy92hNI1OnksbIsxzrkMuK1tQzmhP9lR93 + 0bZvmdWvGOr9uVmHmSKaT+vUoZYUrad16lDLidbSOnWoZURr2DWtP9ePdiusuuypVnsAtmhMXLJiY2Lk + 7025LXXXAD388utvcTFefgQ+cMtVBeVH2SqF0xHFx1uS8WFTI7fN6mdnzGhsHemMlllnUEbbvXVWftCc + xsRzqUMtKVpP69ShlhOtpXXqUMs4UqG39Wf6kYp2WW5xOPsKark/GhPnrNiYKHrfPlXuS7a7OMBeokK8 + vA584N4zt7I2KcqBW6aDoDqtdKK59srqhfZoTb3T+szMbF6+T+v/NNSoz4hVf0hqTDyXOtSSovW0Th1q + OdFaWqcOtYxS5IjWsWNaf54f6VZYmX4vRPOTvNGYOGfV48ky72g9Mic7PAcP8ooK8fI68IHoy+uelDPJ + Zp39XH7clfGjec1Mr4PpFqL59szKzYmZB9Urn3Ufic4QnVGwGHmm6oq3wdOYeC51qCVF62mdOtRyorW0 + Th1qKdE6dkxdblPRODumLjeFI13ls0M0Js5ZtTFReM/lSt0tQHNRIV5eB97Ro0hXDiTLmXS9inLlAK13 + 8ezZ1KmmNOuqklUPrGffC3rlHyTlc+Cj7Vf/1aGiefTKapdOa0w8lzrUkqL1tE4dajnRWlqnDrWUTFep + 9kxdblO23XhHulJlh2hMnLPy74AiWpPMSaYr2GAvUSFeXgfeEX1p9UgpTpYDzPKFWA6wSt67yuLy75R/ + v/x3K/2Ay16InNnUKfvxmYOi8t/OuDonWsvIPLvdRrqlGfEyM/bn6GZTrx/XPfT+fKjDTBHNp3XqUEuK + 1tM6dajlRGtpnTrUUjJesdo6va76tO3mOEpDaIf0OnaKxsqc1RsTZf7RumR8yudf3S1AU1EhXl4HrvAg + uPYpBc+6edPKst/LwVH50VEK2eWg9eUVNmWOl8bU28uAZxyglzm+nMPMlG2W6RZBZV+VAsujP/ZnFC5m + vAfK9inj1imkpTHxXOpQS4rW0zp1qOVEa2mdOtRSshxP9Eyvk02OUKybcbz2kSNs912iMXFOxvfRvdzS + KU9WvM0spPfpy7e4GC8/AleMPmv4CKmbNr1o7qtk1gF6xoPqMqeR26MUoaJm0bOpf36oWWdNls/dzD8K + er/O6zBTRPNpnTrUkqL1tE4dajnRWlqnDrWcaC07pS6zi2i8nVKXmc6s73+5LxoT5+zQmCi873Jkt2cY + QgoaEzcEroi+rOTxZL+F00srN6VmHqBnP6guReVywFm20SNn55eCeflvS8oPwt5nz18y4zZVs8/0La+l + LJ8ZZb+Puq1IHXKKaD6tU4daUrSe1qlDLSdaS+vUoZaz+0kudZldROPtkvIdV5eZzhGu9NkhGhPn7NKY + KKL1yfjU3QE0FRXj5UcgUAqB0ReVPJZSEK6bdgmZbk10b2YfoEdzkucyq4CRpaBW5lE+k0ddSVHeQ6UR + MWP9dQpTRPNpnTrUkqL1tE4dajnRWlqnDrWclY8nPkr5jKzL7KL3FWozk/2s3J23/S7RmDhnp8ZEOc6N + 1ihj88jJa8BHomK8/AgEoi8peSyZzwp7T7SWFTL7AN1BdZ+MKsq/Fc0lQ8oP8svVL/e+5i//TWl2lL+T + qQBTpzhFNJ/WqUMtKVpP69ShlhOtpXXqUEuK1rNDel/Nt3NTZ9Z3+j2ieUueaEycM/t3T2s7f+6tktVO + qIQ1RMV4OeV0qyt4wyXMbVM363LKAX+0nuzJcIDuiqP26fUD9CN+II1N3exTRPNpnTrUkqL1tE4dajnR + WlqnDrWkaD07ZMRZpdG4O6QuLzW/h3JHY+Kc3RoThd9R81N3BdBMUJCXGgjsfj/gkVnhjLBrVj3zP8sB + uoPq9qmbdji3dBiXusmniObTOnWoJUXraZ061HKitbROHWpJq57o8FHq8rqKxl09K52NO+r5SnJ/NCbO + 2bExUfgdNTflxKy6K4AWfvn1t7goLz5sCEVfTnJ/Vm5KXKzYpMp0gO6gum1mHiRnf7D5Lqmbe4poPq1T + h1pStJ7WqUMtJ1pL69ShlrTrmed1eV3teLLQagUvJyfkjMbEObs2Jgq/o+al9zOU4Jiiorz4sOEnDgDa + ZIemxEW0vszJdoDuPdUus5/XojnRP3VTTxHNp3XqUEuK1tM6dajlRGtpnTrUsqI1rZxRtxfc8RiiLm0p + mhP5ojFxzs6NicLvqHmpuwBoJirKHzynK0ngjehLSW5PKVzu1JQoVrsFQ8YD9FVvi5UxdZNOoznRN3Uz + TxHNp3XqUEuK1tM6dajlRGtpnTrUsnb77Bx1rLHj1SZ1acvRnMgVjYlzdm9MFH5HzUlpCtVdALTgdk5B + 4A0PeXsus8/m7mmlgkLmA3RF7edT7vdcN+c09mO/1E08RTSf1qlDLSlaT+vUoZYTraV16lDL2u2s17qs + IaLxV02G7/BnaE7kicbEOUdoTFw4/h6bnWsbME9UnD9y4A0PvX48Kz3I7xErnamS/QDdj9rnUzflVD4v + +6Ru3imi+bROHWpJ0Xpapw61nGgtrVOHWtZuZ7zWZQ0Rjb9qyklQdVnL8kDsHNGYOOdIjYnC76ix2e1O + EDBfVJw/aiAQfRnJxznKAeEqZzuusD/Kgx+jucttybKPV7vN2Qqpm3aKaD6tU4daUrSe1qlDLSdaS+vU + oZYWrWvFjD4ZZafvmrqk5ZXjkGh9Mi4aE+ccrTFR+B01Lqtf5QY5RUX6Iwbe8GCp+1POmK6b7zBW+HG8 + 0gG6s+4fS6b3nuJE29TNOkU0n9apQy0pWk/r1KGWE62ldepQS9vlTNdSFKtLGmKX75kdj5sdx82LxsQ5 + R2xMXHj/jUnd3EAzUZH+YPn05ZsPF36iMXFfjnwQmL2wsNq+Udi+P71+jD5jpzNaZ2X2fo3m1Dp1qCVF + 62mdOtRyorW0Th1qabuc5Trj1hbRPFbLrg9Sdfb2nGhMnHPk36SF31H9s8Mt+CCfoFh/qMA7NCjez64/ + qu6V+f66qx6gu2fxx8l+OXEpVjl76/5k+VyN5tY6daglRetpnTrUcqK1tE4dannR2lZLXcpQ0TxWS13K + tpygMC49jxui8TLn6I2JC++/9im/aTxjAnqJivUHyeev332wcJNykKPA9iOzz+TNKOsZYqsfoDuwfp2/ + +au/Hn7bjGeV12CZd7QeOad8v2R7r0bzbJ061JKi9bROHWo50Vpapw61vNU/G8v861KG2uE2WHUp23Mc + 1yfluGHEmdvR2JmjMfGa99/zcSImjBIU7Q8ReED5cjpqkc0X88eyvTZ2OUAvr71ofUdIeU3t8N5zBcXr + lG2RuckUzbl16lBLitbTOnWo5URraZ061PJWvzpw1pV7q98uaPQDwzNQIH0+M44bonlkjsZEzPvvvpTv + NldHwGC//PpbXLjfOdDAEZoUo87I2UmmH8y7HaCX9RyhuL1LM+KaI3x2RinFqFXek9H8W6cOtaRoPa1T + h1pOtJbWqUMtrxxfRetbJbOOD0vBKJrPKjly8bQcIx/x+//RlOOGmScxRHPKHI2J9x35RK/3Uj6TNCMg + g6h4v2k88JoeyoHQLmcjZD+TdxUZDv52PkDfqbh9OSA+YhNw5ybF7ILCM6L1tE4daknRelqnDrWcaC2t + U4faQrS+VVKXMEU0n1VSl3B4Rz1J4b2U32Blu2QpkEZzzByNiduU3xs73BLvmZS6jdcLZBQU8bcMDHBp + VKxywO3LuZ+yXWec5X+kWwWUbbzSAXaZa/nh6Wqk1y6fm9E2y56yT0tzaZfP0WiNrVOHWlK0ntapQy0n + Wkvr1KG2sPJVgHUJU6xa0C7zrkvghdLEP8IVsW9zOR7MeqZ2NOfM8Vv2fkdoUpTPXbUOWElUyN8pMFH5 + MiyFq9mFt3Lgv1MBbSXlh1evg79y0HXUs+7fKq/t8j6b/SO3jH85EHZ58P3KNivvmbINsxShylwun5/2 + KQC0dfnu361YWo4fnJRCZuW9V16jKzcJX/72qssCVnO6zVFU0N8hkFj58rwUUy+JvmxvyeWsgJJyYO+L + Oa+yby6F11t/gF32r+bSfcrBdtle5YD78v54tNj98j1WUv5uiUL1OJdt/nJ/lkT766NcfsRccvncVDwA + gPkuzYryHZ25aFqO5V8eR9Tpw5Jevu+ynCBU8va3sN9fsKEtH4YNAAAAbONy4klJKVZe0qqBcWk2XHIZ + y8kLHNXlPdfiZK+Xefk+uzQdSjQe4KC2ak4AAAAAAAD5bdGcAAAAAAAAFhMV/FcIAAAAAACwqKjwnzSn + Kz0AAAAAAIC1LXFrJwAAAAAAYDNRQ2ByXCUBAAAAAAC7CxoEUwIAAAAAABxI1CzoHFdIAAAAAADAwY14 + BsXnr981JAAAAAAAgNc+ffkWNhYeiWYEAAAAAABwt9KsuNawKFdblH+mCQEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEA2v/vd/w821uP4fyAg+gAAAABJRU5ErkJggg== + + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Array.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Array.bmp new file mode 100644 index 00000000..ebece464 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Array.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Attribute.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Attribute.bmp new file mode 100644 index 00000000..45b00e3e Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Attribute.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ByteString.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ByteString.bmp new file mode 100644 index 00000000..a54ab10b Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ByteString.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ClosedFolder.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ClosedFolder.bmp new file mode 100644 index 00000000..9b1d6163 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ClosedFolder.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Constant.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Constant.bmp new file mode 100644 index 00000000..0a1ae943 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Constant.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/InputArgument.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/InputArgument.bmp new file mode 100644 index 00000000..4f4956b4 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/InputArgument.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Method.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Method.bmp new file mode 100644 index 00000000..b283fd23 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Method.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Number.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Number.bmp new file mode 100644 index 00000000..5e5f6e75 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Number.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Object.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Object.bmp new file mode 100644 index 00000000..4b7bb331 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Object.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Object2.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Object2.bmp new file mode 100644 index 00000000..ea3ba17e Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Object2.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ObjectType.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ObjectType.bmp new file mode 100644 index 00000000..bef5b781 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/ObjectType.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/OpenFolder.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/OpenFolder.bmp new file mode 100644 index 00000000..bfd30f4b Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/OpenFolder.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/OutputArgument.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/OutputArgument.bmp new file mode 100644 index 00000000..a93357fb Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/OutputArgument.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Property.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Property.bmp new file mode 100644 index 00000000..d6341545 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Property.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Reference.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Reference.bmp new file mode 100644 index 00000000..719f0681 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Reference.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/String.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/String.bmp new file mode 100644 index 00000000..7a996462 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/String.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Structure.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Structure.bmp new file mode 100644 index 00000000..5078c40d Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Structure.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Value.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Value.bmp new file mode 100644 index 00000000..9a920005 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Value.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Variable.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Variable.bmp new file mode 100644 index 00000000..f299c073 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Variable.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Varible.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Varible.bmp new file mode 100644 index 00000000..048c9423 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/Varible.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/View.bmp b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/View.bmp new file mode 100644 index 00000000..d3dfe9f2 Binary files /dev/null and b/IOB-OPC-UA/Applications/ClientControls.Net4/Icons/View.bmp differ diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/MessageDlg.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/MessageDlg.cs new file mode 100644 index 00000000..1b967b7e --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/MessageDlg.cs @@ -0,0 +1,62 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading.Tasks; +using Opc.Ua.Configuration; +using System.Windows.Forms; + +namespace Opc.Ua.Client.Controls +{ + public class ApplicationMessageDlg : IApplicationMessageDlg + { + private string message = string.Empty; + private MessageBoxButtons buttons = MessageBoxButtons.OK; + + public override void Message(string text, bool ask) + { + message = text; + + if (ask) + { + buttons = MessageBoxButtons.YesNo; + } + else + { + buttons = MessageBoxButtons.OK; + } + } + + public override async Task ShowAsync() + { + DialogResult result = MessageBox.Show(message, "OPC UA", buttons); + return await Task.FromResult((result == DialogResult.OK) || (result == DialogResult.Yes)); + } + } +} + diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..62ee0e3c --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/AssemblyInfo.cs @@ -0,0 +1,53 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Opc.Ua.ClientControls")] +[assembly: AssemblyDescription("UA Client Controls Library")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OPC Foundation")] +[assembly: AssemblyProduct("OPC UA SDK")] +[assembly: AssemblyCopyright(AssemblyVersionInfo.Copyright)] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9ef9957a-78fc-4102-9469-4c7b501d301b")] + diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/AssemblyVersionInfo.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/AssemblyVersionInfo.cs new file mode 100644 index 00000000..6492ea10 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/AssemblyVersionInfo.cs @@ -0,0 +1,38 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 The OPC Foundation, Inc. All rights reserved. + * + * OPC Reciprocal Community License ("RCL") Version 1.00 + * + * Unless explicitly acquired and licensed from Licensor under another + * license, the contents of this file are subject to the Reciprocal + * Community License ("RCL") Version 1.00, or subsequent versions + * as allowed by the RCL, and You may not copy or use this file in either + * source code or executable form, except in compliance with the terms and + * conditions of the RCL. + * + * All software distributed under the RCL is provided strictly on an + * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RCL for specific + * language governing rights and limitations under the RCL. + * + * The complete license agreement can be found here: + * http://opcfoundation.org/License/RCL/1.00/ + * ======================================================================*/ + +using System; +using System.Collections.Generic; +using System.Text; + +/// +/// Defines string constants for SDK version information. +/// +internal static class AssemblyVersionInfo +{ + /// + /// The current copy right notice. + /// + public const string Copyright = "Copyright © 2004-2020 OPC Foundation, Inc"; + +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/Resources.Designer.cs b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/Resources.Designer.cs new file mode 100644 index 00000000..567268b2 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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 Opc.Ua.Client.Controls.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("Opc.Ua.Client.Controls.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; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/Resources.resx b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/Resources.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/UA Client Controls.csproj b/IOB-OPC-UA/Applications/ClientControls.Net4/UA Client Controls.csproj new file mode 100644 index 00000000..68d5754a --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/UA Client Controls.csproj @@ -0,0 +1,1052 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A} + Library + Properties + Opc.Ua.Client.Controls + Opc.Ua.ClientControls + false + + + + + 3.5 + + + v4.6.2 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AnyCPU + + + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AnyCPU + + + false + + + + + + + 3.0 + + + + + + + + AttributeListCtrl.cs + + + UserControl + + + UserControl + + + BrowseListCtrl.cs + + + UserControl + + + BrowseTreeCtrl.cs + + + UserControl + + + NodeListCtrl.cs + + + Form + + + SelectNodesDlg.cs + + + UserControl + + + UserControl + + + ClientUtils.cs + + + UserControl + + + AttrributesListViewCtrl.cs + + + UserControl + + + BrowseNodeCtrl.cs + + + UserControl + + + BrowseTreeViewCtrl.cs + + + Form + + + CallRequestDlg.cs + + + UserControl + + + CallRequestListViewCtrl.cs + + + UserControl + + + ConnectServerCtrl.cs + + + Form + + + EditAnnotationDlg.cs + + + Form + + + EditComplexValue2Dlg.cs + + + UserControl + + + EditComplexValueCtrl.cs + + + Form + + + EditComplexValueDlg.cs + + + Form + + + EditMonitoredItemDlg.cs + + + Form + + + EditReadValueIdDlg.cs + + + Form + + + EditSubscriptionDlg.cs + + + UserControl + + + EditValueCtrl.cs + + + Form + + + EditWriteValueDlg.cs + + + UserControl + + + EventFilterListViewCtrl.cs + + + UserControl + + + EventListViewCtrl.cs + + + Form + + + GdsDiscoverServersDlg.cs + + + Form + + + HistoryDataDlg.cs + + + UserControl + + + HistoryDataListView.cs + + + UserControl + + + HistoryEventCtrl.cs + + + + Form + + + ReadRequestDlg.cs + + + UserControl + + + ReadRequestListViewCtrl.cs + + + Form + + + SelectLocaleDlg.cs + + + UserControl + + + SelectNodeCtrl.cs + + + Form + + + SelectNodeDlg.cs + + + Form + + + SetFilterOperatorDlg.cs + + + Form + + + SetTypeDlg.cs + + + Form + + + SubscribeDataDlg.cs + + + UserControl + + + SubscribeDataListViewCtrl.cs + + + Form + + + SubscribeEventsDlg.cs + + + UserControl + + + TypeFieldsListViewCtrl.cs + + + Form + + + UserNamePasswordDlg.cs + + + Form + + + ViewEventDetailsDlg.cs + + + Form + + + WriteRequestDlg.cs + + + UserControl + + + WriteRequestListViewCtrl.cs + + + UserControl + + + DiscoveredServerOnNetworkListCtrl.cs + + + Form + + + DiscoveredServerOnNetworkListDlg.cs + + + UserControl + + + SelectHostCtrl.cs + + + UserControl + + + DiscoveredServerListCtrl.cs + + + Form + + + DiscoveredServerListDlg.cs + + + UserControl + + + HostListCtrl.cs + + + Form + + + HostListDlg.cs + + + Code + + + UserControl + + + GuiUtils.cs + + + Form + + + EditArrayDlg.cs + + + Form + + + DiscoverServerDlg.cs + + + UserControl + + + EditDataValueCtrl.cs + + + Form + + + EditDataValueDlg.cs + + + UserControl + + + EditValueCtrl.cs + + + UserControl + + + EventListView.cs + + + UserControl + + + ReferenceListCtrl.cs + + + Form + + + ViewNodeStateDlg.cs + + + UserControl + + + BaseListCtrl.cs + + + UserControl + + + BaseTreeCtrl.cs + + + Code + + + Form + + + ComplexValueEditDlg.cs + + + UserControl + + + DataListCtrl.cs + + + Form + + + DateTimeValueEditDlg.cs + + + UserControl + + + NodeIdCtrl.cs + + + Form + + + NodeIdValueEditDlg.cs + + + Form + + + NumericValueEditDlg.cs + + + UserControl + + + ReferenceTypeCtrl.cs + + + Form + + + SimpleValueEditDlg.cs + + + Form + + + StringValueEditDlg.cs + + + Form + + + CertificateDlg.cs + + + UserControl + + + CertificateListCtrl.cs + + + Form + + + CertificateListDlg.cs + + + + UserControl + + + CertificatePropertiesListCtrl.cs + + + UserControl + + + CertificateStoreCtrl.cs + + + Form + + + CertificateStoreDlg.cs + + + UserControl + + + CertificateStoreTreeCtrl.cs + + + Form + + + CertificateStoreTreeDlg.cs + + + UserControl + + + SelectUrlsCtrl.cs + + + Form + + + SelectProfileDlg.cs + + + UserControl + + + SelectProfileCtrl.cs + + + UserControl + + + SelectCertificateStoreCtrl.cs + + + UserControl + + + SelectFileCtrl.cs + + + Form + + + ViewCertificateDlg.cs + + + Form + + + YesNoDlg.cs + + + Form + + + ConfiguredServerDlg.cs + + + UserControl + + + ConfiguredServerListCtrl.cs + + + Form + + + ConfiguredServerListDlg.cs + + + UserControl + + + EndpointSelectorCtrl.cs + + + Form + + + UsernameTokenDlg.cs + + + Form + + + ExceptionDlg.cs + + + UserControl + + + HeaderBranding.cs + + + + + + True + True + Resources.resx + + + + + BrowseTreeCtrl.cs + Designer + + + NodeListCtrl.cs + Designer + + + SelectNodesDlg.cs + Designer + + + ClientUtils.cs + Designer + + + AttrributesListViewCtrl.cs + Designer + + + BrowseNodeCtrl.cs + Designer + + + BrowseTreeViewCtrl.cs + Designer + + + CallRequestDlg.cs + Designer + + + CallRequestListViewCtrl.cs + Designer + + + ConnectServerCtrl.cs + Designer + + + EditAnnotationDlg.cs + Designer + + + EditComplexValue2Dlg.cs + Designer + + + EditComplexValueCtrl.cs + Designer + + + EditComplexValueDlg.cs + Designer + + + EditMonitoredItemDlg.cs + Designer + + + EditReadValueIdDlg.cs + Designer + + + EditSubscriptionDlg.cs + Designer + + + EditValueCtrl.cs + Designer + + + EditWriteValueDlg.cs + Designer + + + EventFilterListViewCtrl.cs + Designer + + + EventListViewCtrl.cs + Designer + + + GdsDiscoverServersDlg.cs + Designer + + + HistoryDataDlg.cs + Designer + + + HistoryDataListView.cs + Designer + + + HistoryEventCtrl.cs + Designer + + + ReadRequestDlg.cs + Designer + + + ReadRequestListViewCtrl.cs + Designer + + + SelectLocaleDlg.cs + Designer + + + SelectNodeCtrl.cs + Designer + + + SelectNodeDlg.cs + Designer + + + SetFilterOperatorDlg.cs + Designer + + + SetTypeDlg.cs + Designer + + + SubscribeDataDlg.cs + Designer + + + SubscribeDataListViewCtrl.cs + Designer + + + SubscribeEventsDlg.cs + Designer + + + TypeFieldsListViewCtrl.cs + Designer + + + UserNamePasswordDlg.cs + Designer + + + ViewEventDetailsDlg.cs + Designer + + + WriteRequestDlg.cs + Designer + + + WriteRequestListViewCtrl.cs + Designer + + + DiscoveredServerOnNetworkListCtrl.cs + + + DiscoveredServerOnNetworkListDlg.cs + + + SelectHostCtrl.cs + Designer + + + DiscoveredServerListCtrl.cs + Designer + + + DiscoveredServerListDlg.cs + Designer + + + HostListCtrl.cs + Designer + + + HostListDlg.cs + Designer + + + GuiUtils.cs + Designer + + + EditArrayDlg.cs + Designer + + + DiscoverServerDlg.cs + Designer + + + EditDataValueCtrl.cs + Designer + + + EditDataValueDlg.cs + Designer + + + EditValueCtrl.cs + Designer + + + EventListView.cs + Designer + + + ReferenceListCtrl.cs + Designer + + + ViewNodeStateDlg.cs + Designer + + + BaseListCtrl.cs + Designer + + + BaseTreeCtrl.cs + Designer + + + ComplexValueEditDlg.cs + Designer + + + DataListCtrl.cs + Designer + + + DateTimeValueEditDlg.cs + Designer + + + NodeIdCtrl.cs + Designer + + + NodeIdValueEditDlg.cs + Designer + + + NumericValueEditDlg.cs + Designer + + + ReferenceTypeCtrl.cs + Designer + + + SimpleValueEditDlg.cs + + + StringValueEditDlg.cs + Designer + + + CertificateDlg.cs + Designer + + + CertificateListCtrl.cs + Designer + + + CertificateListDlg.cs + Designer + + + CertificateStoreCtrl.cs + Designer + + + CertificateStoreDlg.cs + Designer + + + CertificateStoreTreeCtrl.cs + Designer + + + CertificateStoreTreeDlg.cs + Designer + + + SelectUrlsCtrl.cs + Designer + + + SelectProfileDlg.cs + Designer + + + SelectProfileCtrl.cs + Designer + + + SelectCertificateStoreCtrl.cs + Designer + + + SelectFileCtrl.cs + Designer + + + ViewCertificateDlg.cs + Designer + + + YesNoDlg.cs + Designer + + + ConfiguredServerDlg.cs + Designer + + + ConfiguredServerListCtrl.cs + Designer + + + ConfiguredServerListDlg.cs + Designer + + + EndpointSelectorCtrl.cs + Designer + + + UsernameTokenDlg.cs + Designer + + + ExceptionDlg.cs + + + HeaderBranding.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + Designer + + + + + {4b72937f-5a57-4cea-b9fe-b4c45cf7b284} + Opc.Ua.Security.Certificates + + + {d918c0f6-39bd-4ed0-8323-e5a2eb9a85da} + Opc.Ua.Core + + + {fe9eeb39-0698-4a19-b770-e66836ce0002} + Opc.Ua.Client.ComplexTypes + + + {15100583-bfef-431b-a1ea-1e5a843a39b1} + Opc.Ua.Client + + + {a39614ca-8ebe-4408-a9d2-38c7e5ae2a1d} + Opc.Ua.Configuration + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ClientControls.Net4/app.config b/IOB-OPC-UA/Applications/ClientControls.Net4/app.config new file mode 100644 index 00000000..c76c89bb --- /dev/null +++ b/IOB-OPC-UA/Applications/ClientControls.Net4/app.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceClient/ConsoleReferenceClient.Config.xml b/IOB-OPC-UA/Applications/ConsoleReferenceClient/ConsoleReferenceClient.Config.xml new file mode 100644 index 00000000..ba6ee40f --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceClient/ConsoleReferenceClient.Config.xml @@ -0,0 +1,89 @@ + + + Quickstart Console Reference Client + urn:localhost:Quickstarts:Console ReferenceClient + uri:opcfoundation.org:Quickstarts:Console ReferenceClient + Client_1 + + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\own + CN=Quickstart Console Reference Client, C=US, S=Arizona, O=OPC Foundation, DC=localhost + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\issuer + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\trusted + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\rejected + + + + false + + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + 60000 + + opc.tcp://{0}:4840 + http://{0}:52601/UADiscovery + http://{0}/UADiscovery/Default.svc + + + 10000 + + + + + + + %CommonApplicationData%\OPC Foundation\Logs\Quickstarts.ConsoleReferenceClient.log.txt + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceClient/ConsoleReferenceClient.csproj b/IOB-OPC-UA/Applications/ConsoleReferenceClient/ConsoleReferenceClient.csproj new file mode 100644 index 00000000..cc6f323d --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceClient/ConsoleReferenceClient.csproj @@ -0,0 +1,30 @@ + + + + $(AppTargetFrameWorks) + ConsoleReferenceClient + Exe + ConsoleReferenceClient + OPC Foundation + .NET Console Reference Client + Copyright © 2004-2020 OPC Foundation, Inc + Quickstarts.ConsoleReferenceClient + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceClient/Output.cs b/IOB-OPC-UA/Applications/ConsoleReferenceClient/Output.cs new file mode 100644 index 00000000..3bae0165 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceClient/Output.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Quickstarts.ConsoleReferenceClient +{ + public interface IOutput + { + void WriteLine(object obj); + void WriteLine(string msg); + void WriteLine(string msg, params object[] parameters); + } + + public class ConsoleOutput : IOutput + { + public void WriteLine(object obj) => Console.WriteLine(obj); + public void WriteLine(string msg) => Console.WriteLine(msg); + public void WriteLine(string msg, params object[] parameters) => Console.WriteLine(msg, parameters); + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceClient/Program.cs b/IOB-OPC-UA/Applications/ConsoleReferenceClient/Program.cs new file mode 100644 index 00000000..27f9dd9c --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceClient/Program.cs @@ -0,0 +1,87 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading.Tasks; +using Opc.Ua; +using Opc.Ua.Configuration; + +namespace Quickstarts.ConsoleReferenceClient +{ + public static class Program + { + public static async Task Main(string[] args) + { + IOutput console = new ConsoleOutput(); + console.WriteLine("OPC UA Console Reference Client"); + try + { + // Define the UA Client application + ApplicationInstance application = new ApplicationInstance(); + application.ApplicationName = "Quickstart Console Reference Client"; + application.ApplicationType = ApplicationType.Client; + + // load the application configuration. + await application.LoadApplicationConfiguration("ConsoleReferenceClient.Config.xml", silent: false); + // check the application certificate. + await application.CheckApplicationInstanceCertificate(silent: false, minimumKeySize: 0); + + // create the UA Client object and connect to configured server. + UAClient uaClient = new UAClient(application.ApplicationConfiguration, console, ClientBase.ValidateResponse); + bool connected = await uaClient.ConnectAsync(); + if (connected) + { + // Run tests for available methods. + uaClient.ReadNodes(); + uaClient.WriteNodes(); + uaClient.Browse(); + uaClient.CallMethod(); + + uaClient.SubscribeToDataChanges(); + // Wait for some DataChange notifications from MonitoredItems + await Task.Delay(20_000); + + uaClient.Disconnect(); + } + else + { + console.WriteLine("Could not connect to server!"); + } + + console.WriteLine("\nProgram ended."); + console.WriteLine("Press any key to finish..."); + Console.ReadKey(); + } + catch (Exception ex) + { + console.WriteLine(ex.Message); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceClient/UAClient.cs b/IOB-OPC-UA/Applications/ConsoleReferenceClient/UAClient.cs new file mode 100644 index 00000000..13c4f32e --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceClient/UAClient.cs @@ -0,0 +1,502 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.Threading.Tasks; +using Opc.Ua; +using Opc.Ua.Client; + +namespace Quickstarts.ConsoleReferenceClient +{ + /// + /// OPC UA Client with examples of basic functionality. + /// + class UAClient + { + #region Constructors + /// + /// Initializes a new instance of the UAClient class. + /// + public UAClient(ApplicationConfiguration configuration, IOutput output, Action validateResponse) + { + m_validateResponse = validateResponse; + m_output = output; + m_configuration = configuration; + m_configuration.CertificateValidator.CertificateValidation += CertificateValidation; + } + #endregion + + #region Public Properties + /// + /// Gets the client session. + /// + public Session Session => m_session; + + /// + /// Gets or sets the server URL. + /// + public string ServerUrl { get; set; } = "opc.tcp://localhost:62541/Quickstarts/ReferenceServer"; + #endregion + + #region Public Methods + /// + /// Creates a session with the UA server + /// + public async Task ConnectAsync() + { + try + { + if (m_session != null && m_session.Connected == true) + { + m_output.WriteLine("Session already connected!"); + } + else + { + m_output.WriteLine("Connecting..."); + + // Get the endpoint by connecting to server's discovery endpoint. + // Try to find the first endopint without security. + EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(ServerUrl, false); + + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(m_configuration); + ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration); + + // Create the session + Session session = await Session.Create( + m_configuration, + endpoint, + false, + false, + m_configuration.ApplicationName, + 30 * 60 * 1000, + new UserIdentity(), + null + ); + + // Assign the created session + if (session != null && session.Connected) + { + m_session = session; + } + + // Session created successfully. + m_output.WriteLine($"New Session Created with SessionName = {m_session.SessionName}"); + } + + return true; + } + catch (Exception ex) + { + // Log Error + m_output.WriteLine($"Create Session Error : {ex.Message}"); + return false; + } + } + + /// + /// Disconnects the session. + /// + public void Disconnect() + { + try + { + if (m_session != null) + { + m_output.WriteLine("Disconnecting..."); + + m_session.Close(); + m_session.Dispose(); + m_session = null; + + // Log Session Disconnected event + m_output.WriteLine("Session Disconnected."); + } + else + { + m_output.WriteLine("Session not created!"); + } + } + catch (Exception ex) + { + // Log Error + m_output.WriteLine($"Disconnect Error : {ex.Message}"); + } + } + + /// + /// Read a list of nodes from Server + /// + public void ReadNodes() + { + if (m_session == null || m_session.Connected == false) + { + m_output.WriteLine("Session not connected!"); + return; + } + + try + { + #region Read a node by calling the Read Service + + // build a list of nodes to be read + ReadValueIdCollection nodesToRead = new ReadValueIdCollection() + { + // Value of ServerStatus + new ReadValueId() { NodeId = Variables.Server_ServerStatus, AttributeId = Attributes.Value }, + // BrowseName of ServerStatus_StartTime + new ReadValueId() { NodeId = Variables.Server_ServerStatus_StartTime, AttributeId = Attributes.BrowseName }, + // Value of ServerStatus_StartTime + new ReadValueId() { NodeId = Variables.Server_ServerStatus_StartTime, AttributeId = Attributes.Value } + }; + + // Read the node attributes + m_output.WriteLine("Reading nodes..."); + + // Call Read Service + m_session.Read( + null, + 0, + TimestampsToReturn.Both, + nodesToRead, + out DataValueCollection resultsValues, + out DiagnosticInfoCollection diagnosticInfos); + + // Validate the results + m_validateResponse(resultsValues, nodesToRead); + + // Display the results. + foreach (DataValue result in resultsValues) + { + m_output.WriteLine("Read Value = {0} , StatusCode = {1}", result.Value, result.StatusCode); + } + #endregion + + #region Read the Value attribute of a node by calling the Session.ReadValue method + // Read Server NamespaceArray + m_output.WriteLine("Reading Value of NamespaceArray node..."); + DataValue namespaceArray = m_session.ReadValue(Variables.Server_NamespaceArray); + // Display the result + m_output.WriteLine($"NamespaceArray Value = {namespaceArray}"); + #endregion + } + catch (Exception ex) + { + // Log Error + m_output.WriteLine($"Read Nodes Error : {ex.Message}."); + } + } + + /// + /// Write a list of nodes to the Server + /// + public void WriteNodes() + { + if (m_session == null || m_session.Connected == false) + { + m_output.WriteLine("Session not connected!"); + return; + } + + try + { + // Write the configured nodes + WriteValueCollection nodesToWrite = new WriteValueCollection(); + + // Int32 Node - Objects\CTT\Scalar\Scalar_Static\Int32 + WriteValue intWriteVal = new WriteValue(); + intWriteVal.NodeId = new NodeId("ns=2;s=Scalar_Static_Int32"); + intWriteVal.AttributeId = Attributes.Value; + intWriteVal.Value = new DataValue(); + intWriteVal.Value.Value = (int)100; + nodesToWrite.Add(intWriteVal); + + // Float Node - Objects\CTT\Scalar\Scalar_Static\Float + WriteValue floatWriteVal = new WriteValue(); + floatWriteVal.NodeId = new NodeId("ns=2;s=Scalar_Static_Float"); + floatWriteVal.AttributeId = Attributes.Value; + floatWriteVal.Value = new DataValue(); + floatWriteVal.Value.Value = (float)100.5; + nodesToWrite.Add(floatWriteVal); + + // String Node - Objects\CTT\Scalar\Scalar_Static\String + WriteValue stringWriteVal = new WriteValue(); + stringWriteVal.NodeId = new NodeId("ns=2;s=Scalar_Static_String"); + stringWriteVal.AttributeId = Attributes.Value; + stringWriteVal.Value = new DataValue(); + stringWriteVal.Value.Value = "String Test"; + nodesToWrite.Add(stringWriteVal); + + // Write the node attributes + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos; + m_output.WriteLine("Writing nodes..."); + + // Call Write Service + m_session.Write(null, + nodesToWrite, + out results, + out diagnosticInfos); + + // Validate the response + m_validateResponse(results, nodesToWrite); + + // Display the results. + m_output.WriteLine("Write Results :"); + + foreach (StatusCode writeResult in results) + { + m_output.WriteLine(" {0}", writeResult); + } + } + catch (Exception ex) + { + // Log Error + m_output.WriteLine($"Write Nodes Error : {ex.Message}."); + } + } + + /// + /// Browse Server nodes + /// + public void Browse() + { + if (m_session == null || m_session.Connected == false) + { + m_output.WriteLine("Session not connected!"); + return; + } + + try + { + // Create a Browser object + Browser browser = new Browser(m_session); + + // Set browse parameters + browser.BrowseDirection = BrowseDirection.Forward; + browser.NodeClassMask = (int)NodeClass.Object | (int)NodeClass.Variable; + browser.ReferenceTypeId = ReferenceTypeIds.HierarchicalReferences; + + NodeId nodeToBrowse = ObjectIds.Server; + + // Call Browse service + m_output.WriteLine("Browsing {0} node...", nodeToBrowse); + ReferenceDescriptionCollection browseResults = browser.Browse(nodeToBrowse); + + // Display the results + m_output.WriteLine("Browse returned {0} results:", browseResults.Count); + + foreach (ReferenceDescription result in browseResults) + { + m_output.WriteLine(" DisplayName = {0}, NodeClass = {1}", result.DisplayName.Text, result.NodeClass); + } + } + catch (Exception ex) + { + // Log Error + m_output.WriteLine($"Browse Error : {ex.Message}."); + } + } + + /// + /// Call UA method + /// + public void CallMethod() + { + if (m_session == null || m_session.Connected == false) + { + m_output.WriteLine("Session not connected!"); + return; + } + + try + { + // Define the UA Method to call + // Parent node - Objects\CTT\Methods + // Method node - Objects\CTT\Methods\Add + NodeId objectId = new NodeId("ns=2;s=Methods"); + NodeId methodId = new NodeId("ns=2;s=Methods_Add"); + + // Define the method parameters + // Input argument requires a Float and an UInt32 value + object[] inputArguments = new object[] { (float)10.5, (uint)10 }; + IList outputArguments = null; + + // Invoke Call service + m_output.WriteLine("Calling UAMethod for node {0} ...", methodId); + outputArguments = m_session.Call(objectId, methodId, inputArguments); + + // Display results + m_output.WriteLine("Method call returned {0} output argument(s):", outputArguments.Count); + + foreach (var outputArgument in outputArguments) + { + m_output.WriteLine(" OutputValue = {0}", outputArgument.ToString()); + } + } + catch (Exception ex) + { + m_output.WriteLine("Method call error: {0}", ex.Message); + } + } + + /// + /// Create Subscription and MonitoredItems for DataChanges + /// + public void SubscribeToDataChanges() + { + if (m_session == null || m_session.Connected == false) + { + m_output.WriteLine("Session not connected!"); + return; + } + + try + { + // Create a subscription for receiving data change notifications + + // Define Subscription parameters + Subscription subscription = new Subscription(m_session.DefaultSubscription); + + subscription.DisplayName = "Console ReferenceClient Subscription"; + subscription.PublishingEnabled = true; + subscription.PublishingInterval = 1000; + + m_session.AddSubscription(subscription); + + // Create the subscription on Server side + subscription.Create(); + m_output.WriteLine("New Subscription created with SubscriptionId = {0}.", subscription.Id); + + // Create MonitoredItems for data changes + + MonitoredItem intMonitoredItem = new MonitoredItem(subscription.DefaultItem); + // Int32 Node - Objects\CTT\Scalar\Simulation\Int32 + intMonitoredItem.StartNodeId = new NodeId("ns=2;s=Scalar_Simulation_Int32"); + intMonitoredItem.AttributeId = Attributes.Value; + intMonitoredItem.DisplayName = "Int32 Variable"; + intMonitoredItem.SamplingInterval = 1000; + intMonitoredItem.Notification += OnMonitoredItemNotification; + + subscription.AddItem(intMonitoredItem); + + MonitoredItem floatMonitoredItem = new MonitoredItem(subscription.DefaultItem); + // Float Node - Objects\CTT\Scalar\Simulation\Float + floatMonitoredItem.StartNodeId = new NodeId("ns=2;s=Scalar_Simulation_Float"); + floatMonitoredItem.AttributeId = Attributes.Value; + floatMonitoredItem.DisplayName = "Float Variable"; + floatMonitoredItem.SamplingInterval = 1000; + floatMonitoredItem.Notification += OnMonitoredItemNotification; + + subscription.AddItem(floatMonitoredItem); + + MonitoredItem stringMonitoredItem = new MonitoredItem(subscription.DefaultItem); + // String Node - Objects\CTT\Scalar\Simulation\String + stringMonitoredItem.StartNodeId = new NodeId("ns=2;s=Scalar_Simulation_String"); + stringMonitoredItem.AttributeId = Attributes.Value; + stringMonitoredItem.DisplayName = "String Variable"; + stringMonitoredItem.SamplingInterval = 1000; + stringMonitoredItem.Notification += OnMonitoredItemNotification; + + subscription.AddItem(stringMonitoredItem); + + // Create the monitored items on Server side + subscription.ApplyChanges(); + m_output.WriteLine("MonitoredItems created for SubscriptionId = {0}.", subscription.Id); + } + catch (Exception ex) + { + m_output.WriteLine("Subscribe error: {0}", ex.Message); + } + } + #endregion + + #region Private Methods + + /// + /// Handle DataChange notifications from Server + /// + private void OnMonitoredItemNotification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e) + { + try + { + // Log MonitoredItem Notification event + MonitoredItemNotification notification = e.NotificationValue as MonitoredItemNotification; + m_output.WriteLine("Notification Received for Variable \"{0}\" and Value = {1}.", monitoredItem.DisplayName, notification.Value); + } + catch (Exception ex) + { + m_output.WriteLine("OnMonitoredItemNotification error: {0}", ex.Message); + } + } + + /// + /// Handles the certificate validation event. + /// This event is triggered every time an untrusted certificate is received from the server. + /// + private void CertificateValidation(CertificateValidator sender, CertificateValidationEventArgs e) + { + bool certificateAccepted = true; + + // **** + // Implement a custom logic to decide if the certificate should be + // accepted or not and set certificateAccepted flag accordingly. + // The certificate can be retrieved from the e.Certificate field + // *** + + ServiceResult error = e.Error; + while (error != null) + { + m_output.WriteLine(error); + error = error.InnerResult; + } + + if (certificateAccepted) + { + m_output.WriteLine("Untrusted Certificate accepted. SubjectName = {0}", e.Certificate.SubjectName); + } + + e.AcceptAll = certificateAccepted; + } + #endregion + + #region Private Fields + + private ApplicationConfiguration m_configuration; + + private Session m_session; + + private readonly IOutput m_output; + + private readonly Action m_validateResponse; + + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferencePublisher/ConsoleReferencePublisher.csproj b/IOB-OPC-UA/Applications/ConsoleReferencePublisher/ConsoleReferencePublisher.csproj new file mode 100644 index 00000000..3cc14894 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferencePublisher/ConsoleReferencePublisher.csproj @@ -0,0 +1,19 @@ + + + + $(AppTargetFrameWorks) + ConsoleReferencePublisher + Exe + ConsoleReferencePublisher + OPC Foundation + .NET Console Reference Publisher + Copyright © 2004-2020 OPC Foundation, Inc + Quickstarts.ConsoleReferencePublisher + + + + + + + + diff --git a/IOB-OPC-UA/Applications/ConsoleReferencePublisher/Program.cs b/IOB-OPC-UA/Applications/ConsoleReferencePublisher/Program.cs new file mode 100644 index 00000000..1132e1fa --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferencePublisher/Program.cs @@ -0,0 +1,339 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using Opc.Ua; +using Opc.Ua.PubSub; + +namespace Quickstarts.ConsoleReferencePublisher +{ + public static class Program + { + public static void Main(string[] args) + { + Console.WriteLine("OPC UA Console Reference Publisher"); + + try + { + // Define the configuration of UA Publisher application + PubSubConfigurationDataType pubSubConfiguration = CreatePublisherConfiguration(); + + // Create the UA Publisher application + using (UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(pubSubConfiguration)) + { + // Start values simulator + PublishedValuesWrites valuesSimulator = new PublishedValuesWrites(uaPubSubApplication); + valuesSimulator.Start(); + + // Start the publisher + uaPubSubApplication.Start(); + + Console.WriteLine("Publisher Started. Press Ctrl-C to exit..."); + + ManualResetEvent quitEvent = new ManualResetEvent(false); + try + { + Console.CancelKeyPress += (sender, eArgs) => + { + quitEvent.Set(); + eArgs.Cancel = true; + }; + } + catch + { + } + + // wait for timeout or Ctrl-C + quitEvent.WaitOne(); + } + + Console.WriteLine("Program ended."); + Console.WriteLine("Press any key to finish..."); + Console.ReadKey(); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + + /// + /// Creates a PubSubConfiguration object programmatically. + /// + /// + public static PubSubConfigurationDataType CreatePublisherConfiguration() + { + // Define a PubSub connection with PublisherId 100 + PubSubConnectionDataType pubSubConnection1 = new PubSubConnectionDataType(); + pubSubConnection1.Name = "UADPConnection1"; + pubSubConnection1.Enabled = true; + pubSubConnection1.PublisherId = (UInt16)100; + pubSubConnection1.TransportProfileUri = Profiles.UadpTransport; + NetworkAddressUrlDataType address = new NetworkAddressUrlDataType(); + // Specify the local Network interface name to be used + // e.g. address.NetworkInterface = "Ethernet"; + // Leave empty to publish on all available local interfaces. + address.NetworkInterface = String.Empty; + address.Url = "opc.udp://239.0.0.1:4840"; + pubSubConnection1.Address = new ExtensionObject(address); + + #region Define WriterGroup1 + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "WriterGroup 1"; + writerGroup1.Enabled = true; + writerGroup1.WriterGroupId = 1; + writerGroup1.PublishingInterval = 5000; + writerGroup1.KeepAliveTime = 5000; + writerGroup1.MaxNetworkMessageSize = 1500; + writerGroup1.HeaderLayoutUri = "UADP-Cyclic-Fixed"; + UadpWriterGroupMessageDataType messageSettings = new UadpWriterGroupMessageDataType() { + DataSetOrdering = DataSetOrderingType.AscendingWriterId, + GroupVersion = 0, + NetworkMessageContentMask = (uint)(UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.GroupHeader + | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.GroupVersion + | UadpNetworkMessageContentMask.NetworkMessageNumber | UadpNetworkMessageContentMask.SequenceNumber) + }; + + writerGroup1.MessageSettings = new ExtensionObject(messageSettings); + writerGroup1.TransportSettings = new ExtensionObject(new DatagramWriterGroupTransportDataType()); + + // Define DataSetWriter 'Simple' + DataSetWriterDataType dataSetWriter1 = new DataSetWriterDataType(); + dataSetWriter1.Name = "Writer 1"; + dataSetWriter1.DataSetWriterId = 1; + dataSetWriter1.Enabled = true; + dataSetWriter1.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; + dataSetWriter1.DataSetName = "Simple"; + dataSetWriter1.KeyFrameCount = 1; + UadpDataSetWriterMessageDataType uadpDataSetWriterMessage = new UadpDataSetWriterMessageDataType() { + ConfiguredSize = 32, + DataSetOffset = 15, + NetworkMessageNumber = 1, + DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber), + }; + dataSetWriter1.MessageSettings = new ExtensionObject(uadpDataSetWriterMessage); + writerGroup1.DataSetWriters.Add(dataSetWriter1); + + // Define DataSetWriter 'AllTypes' + DataSetWriterDataType dataSetWriter2 = new DataSetWriterDataType(); + dataSetWriter2.Name = "Writer 2"; + dataSetWriter2.DataSetWriterId = 2; + dataSetWriter2.Enabled = true; + dataSetWriter2.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; + dataSetWriter2.DataSetName = "AllTypes"; + dataSetWriter2.KeyFrameCount = 1; + uadpDataSetWriterMessage = new UadpDataSetWriterMessageDataType() { + ConfiguredSize = 32, + DataSetOffset = 47, + NetworkMessageNumber = 1, + DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber), + }; + dataSetWriter2.MessageSettings = new ExtensionObject(uadpDataSetWriterMessage); + writerGroup1.DataSetWriters.Add(dataSetWriter2); + + pubSubConnection1.WriterGroups.Add(writerGroup1); + #endregion + + #region Define PublishedDataSet Simple + PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType(); + publishedDataSetSimple.Name = "Simple"; //name shall be unique in a configuration + // Define publishedDataSetSimple.DataSetMetaData + publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType(); + publishedDataSetSimple.DataSetMetaData.DataSetClassId = Uuid.Empty; + publishedDataSetSimple.DataSetMetaData.Name = publishedDataSetSimple.Name; + publishedDataSetSimple.DataSetMetaData.Fields = new FieldMetaDataCollection() + { + new FieldMetaData() + { + Name = "BoolToggle", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Boolean, + DataType = DataTypeIds.Boolean, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Int32, + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32Fast", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Int32, + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "DateTime", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.DateTime, + DataType = DataTypeIds.DateTime, + ValueRank = ValueRanks.Scalar + }, + }; + publishedDataSetSimple.DataSetMetaData.ConfigurationVersion = new ConfigurationVersionDataType() { + MinorVersion = 1, + MajorVersion = 1 + }; + + PublishedDataItemsDataType publishedDataSetSimpleSource = new PublishedDataItemsDataType(); + publishedDataSetSimpleSource.PublishedData = new PublishedVariableDataTypeCollection(); + //create PublishedData based on metadata names + foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields) + { + publishedDataSetSimpleSource.PublishedData.Add( + new PublishedVariableDataType() { + PublishedVariable = new NodeId(field.Name, PublishedValuesWrites.NamespaceIndexSimple), + AttributeId = Attributes.Value, + }); + } + + publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataSetSimpleSource); + #endregion + + #region Define PublishedDataSet AllTypes + PublishedDataSetDataType publishedDataSetAllTypes = new PublishedDataSetDataType(); + publishedDataSetAllTypes.Name = "AllTypes"; //name shall be unique in a configuration + // Define publishedDataSetAllTypes.DataSetMetaData + publishedDataSetAllTypes.DataSetMetaData = new DataSetMetaDataType(); + publishedDataSetAllTypes.DataSetMetaData.DataSetClassId = Uuid.Empty; + publishedDataSetAllTypes.DataSetMetaData.Name = publishedDataSetAllTypes.Name; + publishedDataSetAllTypes.DataSetMetaData.Fields = new FieldMetaDataCollection() + { + new FieldMetaData() + { + Name = "BoolToggle", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Boolean, + DataType = DataTypeIds.Boolean, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Byte", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Byte, + DataType = DataTypeIds.Byte, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int16", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Int16, + DataType = DataTypeIds.Int16, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Int32, + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "SByte", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.SByte, + DataType = DataTypeIds.SByte, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "UInt16", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.UInt16, + DataType = DataTypeIds.UInt16, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "UInt32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.UInt32, + DataType = DataTypeIds.UInt32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Float", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Float, + DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Double", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte)DataTypes.Double, + DataType = DataTypeIds.Double, + ValueRank = ValueRanks.Scalar + }, + }; + publishedDataSetAllTypes.DataSetMetaData.ConfigurationVersion = new ConfigurationVersionDataType() { + MinorVersion = 1, + MajorVersion = 1 + }; + PublishedDataItemsDataType publishedDataSetAllTypesSource = new PublishedDataItemsDataType(); + //create PublishedData based on metadata names + foreach (var field in publishedDataSetAllTypes.DataSetMetaData.Fields) + { + publishedDataSetAllTypesSource.PublishedData.Add( + new PublishedVariableDataType() { + PublishedVariable = new NodeId(field.Name, PublishedValuesWrites.NamespaceIndexAllTypes), + AttributeId = Attributes.Value, + }); + } + publishedDataSetAllTypes.DataSetSource = new ExtensionObject(publishedDataSetAllTypesSource); + #endregion + + //create the PubSub configuration root object + PubSubConfigurationDataType pubSubConfiguration = new PubSubConfigurationDataType(); + pubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection() + { + pubSubConnection1 + }; + pubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection() + { + publishedDataSetSimple, publishedDataSetAllTypes + }; + + return pubSubConfiguration; + } + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferencePublisher/PublishedValuesWrites.cs b/IOB-OPC-UA/Applications/ConsoleReferencePublisher/PublishedValuesWrites.cs new file mode 100644 index 00000000..42552421 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferencePublisher/PublishedValuesWrites.cs @@ -0,0 +1,334 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using Opc.Ua; +using Opc.Ua.PubSub; + +namespace Quickstarts.ConsoleReferencePublisher +{ + class PublishedValuesWrites + { + #region Fields + // It should match the namespace index from configuration file + public const ushort NamespaceIndexSimple = 2; + public const ushort NamespaceIndexAllTypes = 3; + + private const string DataSetNameSimple = "Simple"; + private const string DataSetNameAllTypes = "AllTypes"; + + // simulate for BoolToogle changes to 3 seconds + private int m_boolToogleCount = 0; + private const int BoolToogleLimit = 2; + private const int SimpleInt32Limit = 10000; + + private FieldMetaDataCollection m_simpleFields = new FieldMetaDataCollection(); + private FieldMetaDataCollection m_allTypesFields = new FieldMetaDataCollection(); + + private PublishedDataSetDataTypeCollection m_publishedDataSets; + private IUaPubSubDataStore m_dataStore; + private Timer m_updateValuesTimer; + + private object m_lock = new object(); + + #endregion + + #region Constructor + /// + /// Constructor + /// + /// + public PublishedValuesWrites(UaPubSubApplication uaPubSubApplication) + { + m_publishedDataSets = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.PublishedDataSets; + m_dataStore = uaPubSubApplication.DataStore; + } + #endregion + + #region IDisposable + + public void Dispose() + { + m_updateValuesTimer.Dispose(); + } + #endregion + + #region Public Methods + + /// + /// Initialize PublisherData with information from configuration and start timer to update data + /// + public void Start() + { + if (m_publishedDataSets != null) + { + // Remember the fields to be updated + foreach (var publishedDataSet in m_publishedDataSets) + { + switch (publishedDataSet.Name) + { + case DataSetNameSimple: + m_simpleFields.AddRange(publishedDataSet.DataSetMetaData.Fields); + break; + case DataSetNameAllTypes: + m_allTypesFields.AddRange(publishedDataSet.DataSetMetaData.Fields); + break; + } + } + } + + try + { + LoadInitialData(); + } + catch (Exception e) + { + Utils.Trace(Utils.TraceMasks.Error, "SamplePublisher.DataStoreValuesGenerator.LoadInitialData wrong field: {0}", e.StackTrace); + } + + m_updateValuesTimer = new Timer(UpdateValues, null, 1000, 1000); + } + + #endregion + + #region Private Methods + /// + /// Load initial demo data + /// + private void LoadInitialData() + { + #region DataSet 'Simple' fill with data + WriteFieldData("BoolToggle", NamespaceIndexSimple, new DataValue(new Variant(false), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Int32", NamespaceIndexSimple, new DataValue(new Variant(0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Int32Fast", NamespaceIndexSimple, new DataValue(new Variant(0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("DateTime", NamespaceIndexSimple, new DataValue(new Variant(DateTime.UtcNow), StatusCodes.Good, DateTime.UtcNow)); + #endregion + + #region DataSet 'AllTypes' fill with data + + WriteFieldData("BoolToggle", NamespaceIndexAllTypes, new DataValue(new Variant(true), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Byte", NamespaceIndexAllTypes, new DataValue(new Variant((byte)0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Int16", NamespaceIndexAllTypes, new DataValue(new Variant((Int16)0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Int32", NamespaceIndexAllTypes, new DataValue(new Variant(0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("SByte", NamespaceIndexAllTypes, new DataValue(new Variant((sbyte)0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("UInt16", NamespaceIndexAllTypes, new DataValue(new Variant((UInt16)0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("UInt32", NamespaceIndexAllTypes, new DataValue(new Variant((UInt32)0), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Float", NamespaceIndexAllTypes, new DataValue(new Variant((float)0F), StatusCodes.Good, DateTime.UtcNow)); + WriteFieldData("Double", NamespaceIndexAllTypes, new DataValue(new Variant((double)0.0), StatusCodes.Good, DateTime.UtcNow)); + #endregion + } + + /// + /// Write (update) field data + /// + /// + /// + private void WriteFieldData(string metaDatafieldName, ushort namespaceIndex, DataValue dataValue) + { + m_dataStore.WritePublishedDataItem(new NodeId(metaDatafieldName, namespaceIndex), Attributes.Value, dataValue); + } + + /// + /// Simulate value changes in dynamic nodes + /// + /// + private void UpdateValues(object state) + { + try + { + lock (m_lock) + { + foreach (FieldMetaData variable in m_simpleFields) + { + switch (variable.Name) + { + case "BoolToggle": + m_boolToogleCount++; + if (m_boolToogleCount >= BoolToogleLimit) + { + m_boolToogleCount = 0; + IncrementValue(variable, NamespaceIndexSimple); + } + break; + case "Int32": + IncrementValue(variable, NamespaceIndexSimple, SimpleInt32Limit); + break; + case "Int32Fast": + IncrementValue(variable, NamespaceIndexSimple, SimpleInt32Limit, 100); + break; + case "DateTime": + IncrementValue(variable, NamespaceIndexSimple); + break; + } + } + + foreach (FieldMetaData variable in m_allTypesFields) + { + IncrementValue(variable, NamespaceIndexAllTypes); + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error doing simulation."); + } + } + + /// + /// Increment value + /// maxAllowedValue - maximum incremented value before reset value to initial value + /// step - the increment value + /// + /// + /// + /// + /// + private void IncrementValue(FieldMetaData variable, ushort namespaceIndex, long maxAllowedValue = Int32.MaxValue, int step = 0) + { + // Read value to be incremented + DataValue dataValue = m_dataStore.ReadPublishedDataItem(new NodeId(variable.Name, namespaceIndex), Attributes.Value); + if (dataValue.Value == null) + { + return; + } + + bool valueUpdated = false; + + BuiltInType expectedType = TypeInfo.GetBuiltInType(variable.DataType); + switch (expectedType) + { + case BuiltInType.Boolean: + if (variable.ValueRank == ValueRanks.Scalar) + { + Boolean boolValue = Convert.ToBoolean(dataValue.Value); + dataValue.Value = !boolValue; + valueUpdated = true; + } + break; + case BuiltInType.Byte: + if (variable.ValueRank == ValueRanks.Scalar) + { + Byte byteValue = Convert.ToByte(dataValue.Value); + dataValue.Value = ++byteValue; + valueUpdated = true; + } + break; + case BuiltInType.Int16: + if (variable.ValueRank == ValueRanks.Scalar) + { + Int16 int16Value = Convert.ToInt16(dataValue.Value); + int intIdentifier = int16Value; + Interlocked.CompareExchange(ref intIdentifier, 0, Int16.MaxValue); + dataValue.Value = (Int16)Interlocked.Increment(ref intIdentifier); + valueUpdated = true; + } + break; + case BuiltInType.Int32: + if (variable.ValueRank == ValueRanks.Scalar) + { + Int32 int32Value = Convert.ToInt32(dataValue.Value); + if (step > 0) + { + int32Value += (step - 1); + } + if (int32Value > maxAllowedValue) + { + int32Value = 0; + } + dataValue.Value = Interlocked.Increment(ref int32Value); + valueUpdated = true; + } + break; + case BuiltInType.SByte: + if (variable.ValueRank == ValueRanks.Scalar) + { + SByte sbyteValue = Convert.ToSByte(dataValue.Value); + int intIdentifier = sbyteValue; + Interlocked.CompareExchange(ref intIdentifier, 0, SByte.MaxValue); + dataValue.Value = (SByte)Interlocked.Increment(ref intIdentifier); + valueUpdated = true; + } + break; + case BuiltInType.UInt16: + if (variable.ValueRank == ValueRanks.Scalar) + { + UInt16 uint16Value = Convert.ToUInt16(dataValue.Value); + int intIdentifier = uint16Value; + Interlocked.CompareExchange(ref intIdentifier, 0, UInt16.MaxValue); + dataValue.Value = (UInt16)Interlocked.Increment(ref intIdentifier); + valueUpdated = true; + } + break; + case BuiltInType.UInt32: + if (variable.ValueRank == ValueRanks.Scalar) + { + UInt32 uint32Value = Convert.ToUInt32(dataValue.Value); + long longIdentifier = uint32Value; + Interlocked.CompareExchange(ref longIdentifier, 0, UInt32.MaxValue); + dataValue.Value = (UInt32)Interlocked.Increment(ref longIdentifier); + valueUpdated = true; + } + break; + case BuiltInType.Float: + if (variable.ValueRank == ValueRanks.Scalar) + { + float floatValue = Convert.ToSingle(dataValue.Value); + Interlocked.CompareExchange(ref floatValue, 0, float.MaxValue); + dataValue.Value = ++floatValue; + valueUpdated = true; + } + break; + case BuiltInType.Double: + if (variable.ValueRank == ValueRanks.Scalar) + { + double doubleValue = Convert.ToDouble(dataValue.Value); + Interlocked.CompareExchange(ref doubleValue, 0, double.MaxValue); + dataValue.Value = ++doubleValue; + valueUpdated = true; + } + break; + case BuiltInType.DateTime: + if (variable.ValueRank == ValueRanks.Scalar) + { + dataValue.Value = DateTime.UtcNow; + valueUpdated = true; + } + break; + } + + if (valueUpdated) + { + // Save new updated value to data store + WriteFieldData(variable.Name, namespaceIndex, dataValue); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/ConsoleReferenceServer.csproj b/IOB-OPC-UA/Applications/ConsoleReferenceServer/ConsoleReferenceServer.csproj new file mode 100644 index 00000000..4277b19f --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/ConsoleReferenceServer.csproj @@ -0,0 +1,48 @@ + + + + $(AppTargetFrameWork) + ConsoleReferenceServer + Exe + ConsoleReferenceServer + OPC Foundation + .NET Core Reference Server + Copyright © 2004-2021 OPC Foundation, Inc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/Dockerfile b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Dockerfile new file mode 100644 index 00000000..3a2ce9e9 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Dockerfile @@ -0,0 +1,6 @@ +FROM mcr.microsoft.com/dotnet/core/runtime:3.1 + +COPY ./publish /publish +WORKDIR /publish + +ENTRYPOINT ["dotnet", "ConsoleReferenceServer.dll"] diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/MonoReferenceServer.csproj b/IOB-OPC-UA/Applications/ConsoleReferenceServer/MonoReferenceServer.csproj new file mode 100644 index 00000000..8f5437ce --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/MonoReferenceServer.csproj @@ -0,0 +1,39 @@ + + + + net462 + MonoReferenceServer + Exe + MonoReferenceServer + OPC Foundation + OPC UA SDK + Mono Reference Server + Copyright © 2004-2020 OPC Foundation, Inc + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/Namespaces.cs b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Namespaces.cs new file mode 100644 index 00000000..02e136ed --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Namespaces.cs @@ -0,0 +1,46 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Quickstarts.ReferenceServer +{ + /// + /// Defines constants for namespaces used by the application. + /// + public static partial class Namespaces + { + /// + /// The namespace for the nodes provided by the server. + /// + public const string ReferenceApplications = "http://opcfoundation.org/Quickstarts/ReferenceApplications"; + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/Program.cs b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Program.cs new file mode 100644 index 00000000..6ea8f241 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Program.cs @@ -0,0 +1,343 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Mono.Options; +using Opc.Ua; +using Opc.Ua.Configuration; +using Opc.Ua.Server; +using Serilog; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Quickstarts.ReferenceServer +{ + /// + /// A dialog which asks for user input. + /// + public class ApplicationMessageDlg : IApplicationMessageDlg + { + private string m_message = string.Empty; + private bool m_ask = false; + + public override void Message(string text, bool ask) + { + m_message = text; + m_ask = ask; + } + + public override async Task ShowAsync() + { + if (m_ask) + { + m_message += " (y/n, default y): "; + Console.Write(m_message); + } + else + { + Console.WriteLine(m_message); + } + if (m_ask) + { + try + { + ConsoleKeyInfo result = Console.ReadKey(); + Console.WriteLine(); + return await Task.FromResult((result.KeyChar == 'y') || (result.KeyChar == 'Y') || (result.KeyChar == '\r')).ConfigureAwait(false); + } + catch + { + // intentionally fall through + } + } + return await Task.FromResult(true).ConfigureAwait(false); + } + } + + /// + /// The error code why the server exited. + /// + public enum ExitCode : int + { + Ok = 0, + ErrorServerNotStarted = 0x80, + ErrorServerRunning = 0x81, + ErrorServerException = 0x82, + ErrorInvalidCommandLine = 0x100 + }; + + /// + /// The program. + /// + public static class Program + { + public static async Task Main(string[] args) + { + Console.WriteLine("{0} OPC UA Reference Server", Utils.IsRunningOnMono() ? "Mono" : ".Net Core"); + + // command line options + bool showHelp = false; + bool autoAccept = false; + bool console = false; + string password = null; + + Mono.Options.OptionSet options = new Mono.Options.OptionSet { + { "h|help", "show this message and exit", h => showHelp = h != null }, + { "a|autoaccept", "auto accept certificates (for testing only)", a => autoAccept = a != null }, + { "c|console", "log trace to console", c => console = c != null }, + { "p|password=", "optional password for private key", (string p) => password = p } + }; + + try + { + IList extraArgs = options.Parse(args); + foreach (string extraArg in extraArgs) + { + Console.WriteLine("Error: Unknown option: {0}", extraArg); + showHelp = true; + } + } + catch (OptionException e) + { + Console.WriteLine(e.Message); + showHelp = true; + } + + if (showHelp) + { + Console.WriteLine(Utils.IsRunningOnMono() ? "Usage: mono MonoReferenceServer.exe [OPTIONS]" : "Usage: dotnet ConsoleReferenceServer.dll [OPTIONS]"); + Console.WriteLine(); + + Console.WriteLine("Options:"); + options.WriteOptionDescriptions(Console.Out); + return (int)ExitCode.ErrorInvalidCommandLine; + } + + var server = new MyRefServer() { + AutoAccept = autoAccept, + LogConsole = console, + Password = password + }; + await server.Run().ConfigureAwait(false); + + return (int)server.ExitCode; + } + } + + public class MyRefServer + { + private ReferenceServer m_server; + private Task m_status; + private DateTime m_lastEventTime; + public bool LogConsole { get; set; } = false; + public bool AutoAccept { get; set; } = false; + public string Password { get; set; } = null; + public ExitCode ExitCode { get; private set; } + + public async Task Run() + { + try + { + ExitCode = ExitCode.ErrorServerNotStarted; + await StartConsoleReferenceServerAsync().ConfigureAwait(false); + Console.WriteLine("Server started. Press Ctrl-C to exit..."); + ExitCode = ExitCode.ErrorServerRunning; + } + catch (Exception ex) + { + Console.WriteLine("Exception: {0}", ex.Message); + ExitCode = ExitCode.ErrorServerException; + return; + } + + var quitEvent = new ManualResetEvent(false); + try + { + Console.CancelKeyPress += (sender, eArgs) => { + quitEvent.Set(); + eArgs.Cancel = true; + }; + } + catch + { + } + + // wait for timeout or Ctrl-C + quitEvent.WaitOne(); + + if (m_server != null) + { + Console.WriteLine("Server stopped. Waiting for exit..."); + + using (ReferenceServer server = m_server) + { + // Stop status thread + m_server = null; + m_status.Wait(); + // Stop server and dispose + server.Stop(); + } + } + + ExitCode = ExitCode.Ok; + } + + private void CertificateValidator_CertificateValidation(CertificateValidator validator, CertificateValidationEventArgs e) + { + if (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted) + { + if (AutoAccept) + { + if (!LogConsole) + { + Console.WriteLine("Accepted Certificate: {0}", e.Certificate.Subject); + } + Utils.Trace(Utils.TraceMasks.Security, "Accepted Certificate: {0}", e.Certificate.Subject); + e.Accept = true; + return; + } + } + if (!LogConsole) + { + Console.WriteLine("Rejected Certificate: {0} {1}", e.Error, e.Certificate.Subject); + } + Utils.Trace(Utils.TraceMasks.Security, "Rejected Certificate: {0} {1}", e.Error, e.Certificate.Subject); + } + + private async Task StartConsoleReferenceServerAsync() + { + ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); + CertificatePasswordProvider PasswordProvider = new CertificatePasswordProvider(Password); + ApplicationInstance application = new ApplicationInstance { + ApplicationName = "Quickstart Reference Server", + ApplicationType = ApplicationType.Server, + ConfigSectionName = Utils.IsRunningOnMono() ? "Quickstarts.MonoReferenceServer" : "Quickstarts.ReferenceServer", + CertificatePasswordProvider = PasswordProvider + }; + + // load the application configuration. + ApplicationConfiguration config = await application.LoadApplicationConfiguration(false).ConfigureAwait(false); + + var loggerConfiguration = new Serilog.LoggerConfiguration(); + if (LogConsole) + { + loggerConfiguration.WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Warning); + } +#if DEBUG + else + { + loggerConfiguration.WriteTo.Debug(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Warning); + } +#endif + SerilogTraceLogger.Create(loggerConfiguration, config); + + // check the application certificate. + bool haveAppCertificate = await application.CheckApplicationInstanceCertificate( + false, CertificateFactory.DefaultKeySize, CertificateFactory.DefaultLifeTime).ConfigureAwait(false); + if (!haveAppCertificate) + { + throw new Exception("Application instance certificate invalid!"); + } + + if (!config.SecurityConfiguration.AutoAcceptUntrustedCertificates) + { + config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + } + + // start the server. + m_server = new ReferenceServer(); + await application.Start(m_server).ConfigureAwait(false); + + // print endpoint info + var endpoints = application.Server.GetEndpoints().Select(e => e.EndpointUrl).Distinct(); + foreach (var endpoint in endpoints) + { + Console.WriteLine(endpoint); + } + + // start the status thread + m_status = Task.Run(new Action(StatusThreadAsync)); + + // print notification on session events + m_server.CurrentInstance.SessionManager.SessionActivated += EventStatus; + m_server.CurrentInstance.SessionManager.SessionClosing += EventStatus; + m_server.CurrentInstance.SessionManager.SessionCreated += EventStatus; + } + + private void EventStatus(Session session, SessionEventReason reason) + { + m_lastEventTime = DateTime.UtcNow; + PrintSessionStatus(session, reason.ToString()); + } + + private void PrintSessionStatus(Session session, string reason, bool lastContact = false) + { + lock (session.DiagnosticsLock) + { + StringBuilder item = new StringBuilder(); + item.AppendFormat("{0,9}:{1,20}:", reason, session.SessionDiagnostics.SessionName); + if (lastContact) + { + item.AppendFormat("Last Event:{0:HH:mm:ss}", session.SessionDiagnostics.ClientLastContactTime.ToLocalTime()); + } + else + { + if (session.Identity != null) + { + item.AppendFormat(":{0,20}", session.Identity.DisplayName); + } + item.AppendFormat(":{0}", session.Id); + } + Console.WriteLine(item.ToString()); + } + } + + private async void StatusThreadAsync() + { + while (m_server != null) + { + if (DateTime.UtcNow - m_lastEventTime > TimeSpan.FromMilliseconds(6000)) + { + IList sessions = m_server.CurrentInstance.SessionManager.GetSessions(); + for (int ii = 0; ii < sessions.Count; ii++) + { + Session session = sessions[ii]; + PrintSessionStatus(session, "-Status-", true); + } + m_lastEventTime = DateTime.UtcNow; + } + await Task.Delay(1000).ConfigureAwait(false); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/Quickstarts.MonoReferenceServer.Config.xml b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Quickstarts.MonoReferenceServer.Config.xml new file mode 100644 index 00000000..c9d92f3b --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Quickstarts.MonoReferenceServer.Config.xml @@ -0,0 +1,201 @@ + + + Quickstart Reference Server + urn:localhost:UA:Quickstarts:ReferenceServer + uri:opcfoundation.org:Quickstarts:ReferenceServer + Server_0 + + + + + + Directory + ./OPC Foundation/pki/own + CN=Quickstart Mono Reference Server, C=US, S=Arizona, O=OPC Foundation, DC=localhost + + + + + Directory + ./OPC Foundation/pki/issuer + + + + + Directory + ./OPC Foundation/pki/trusted + + + + + Directory + ./OPC Foundation/pki/rejected + + + + false + + + false + 2048 + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + opc.tcp://localhost:62541/Quickstarts/ReferenceServer + + + + None_1 + http://opcfoundation.org/UA/SecurityPolicy#None + + + Sign_2 + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + SignAndEncrypt_3 + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + + 5 + 100 + 2000 + + + + + + Anonymous_0 + http://opcfoundation.org/UA/SecurityPolicy#None + + + + + UserName_1 + + http://opcfoundation.org/UA/SecurityPolicy#Basic256 + + + + + Certificate_2 + + http://opcfoundation.org/UA/SecurityPolicy#Basic256 + + + true + 100 + 10000 + 3600000 + 10 + 10 + 100 + 600000 + 100 + 3600000 + 50 + 3600000 + 100 + 100 + 1000 + 1000 + + + 5 + 5 + 20 + + + 100 + 100 + 4 + + + 500 + 250 + 2 + + + 1000 + 500 + 20 + + + + + opc.tcp://localhost:4840 + + opc.tcp://localhost:4840 + DiscoveryServer_3 + + opc.tcp://localhost:4840 + + + SignAndEncrypt_3 + + + + + 0 + Quickstarts.ReferenceServer.nodes.xml + 10000 + 20 + 100 + 10000 + + + + Standard UA Server Profile + Data Access Server Facet + Method Server Facet + + 5 + + DA + + + PFX + PEM + + 0 + false + + + + ./Quickstarts.ReferenceServer.log.txt + true + + + + + + + + + + + + 519 + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/Quickstarts.ReferenceServer.Config.xml b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Quickstarts.ReferenceServer.Config.xml new file mode 100644 index 00000000..ba494640 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/Quickstarts.ReferenceServer.Config.xml @@ -0,0 +1,271 @@ + + + Quickstart Reference Server + urn:localhost:UA:Quickstarts:ReferenceServer + uri:opcfoundation.org:Quickstarts:ReferenceServer + Server_0 + + + + + + Directory + %LocalApplicationData%/OPC Foundation/pki/own + CN=Quickstart Reference Server, C=US, S=Arizona, O=OPC Foundation, DC=localhost + + + + + Directory + %LocalApplicationData%/OPC Foundation/pki/issuer + + + + + Directory + %LocalApplicationData%/OPC Foundation/pki/trusted + + + + + Directory + %LocalApplicationData%/OPC Foundation/pki/rejected + + + + false + + + false + true + 2048 + false + true + + + + Directory + %LocalApplicationData%/OPC Foundation/pki/issuerUser + + + + + Directory + %LocalApplicationData%/OPC Foundation/pki/trustedUser + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + https://localhost:62540/Quickstarts/ReferenceServer + opc.tcp://localhost:62541/Quickstarts/ReferenceServer + + + + + + SignAndEncrypt_3 + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + None_1 + http://opcfoundation.org/UA/SecurityPolicy#None + + + Sign_2 + + + + SignAndEncrypt_3 + + + + + + 5 + 100 + 2000 + + + + + + Anonymous_0 + http://opcfoundation.org/UA/SecurityPolicy#None + + + + + UserName_1 + + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + + + Certificate_2 + + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + true + 100 + 10000 + 3600000 + 10 + 10 + 100 + 600000 + 100 + 3600000 + 50 + 3600000 + 100 + 100 + 1000 + 1000 + + + 5 + 5 + 20 + + + 100 + 100 + 4 + + + 500 + 250 + 2 + + + 1000 + 500 + 20 + + + + + opc.tcp://localhost:4840 + + opc.tcp://localhost:4840 + DiscoveryServer_3 + + opc.tcp://localhost:4840 + + + SignAndEncrypt_3 + + + + + 0 + Quickstarts.ReferenceServer.nodes.xml + 10000 + 20 + 100 + 10000 + + + + http://opcfoundation.org/UA-Profile/Server/StandardUA2017 + http://opcfoundation.org/UA-Profile/Server/DataAccess + http://opcfoundation.org/UA-Profile/Server/Methods + http://opcfoundation.org/UA-Profile/Server/ReverseConnect + + 5 + + DA + + + PFX + PEM + + 0 + false + + + + + %LocalApplicationData%/OPC Foundation/Logs/Quickstarts.ReferenceServer.log.txt + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerbuild.bat b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerbuild.bat new file mode 100644 index 00000000..38caee6e --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerbuild.bat @@ -0,0 +1,4 @@ +REM build a docker container of the console reference server +dotnet build ConsoleReferenceServer.csproj +dotnet publish ConsoleReferenceServer.csproj -o ./publish +docker build -t consolerefserver . diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerbuild.sh b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerbuild.sh new file mode 100644 index 00000000..47ea555a --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerbuild.sh @@ -0,0 +1,5 @@ +#!/bin/bash +echo build a docker container of the .NET Core reference server +dotnet build ConsoleReferenceServer.csproj +dotnet publish ConsoleReferenceServer.csproj -o ./publish +sudo docker build -t consolerefserver . diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerrun.bat b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerrun.bat new file mode 100644 index 00000000..8eae4f0f --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerrun.bat @@ -0,0 +1,3 @@ +echo Run a docker container of the console reference server +echo The certificate store of the ref server is mapped to './OPC Foundation' +docker run -it -p 62541:62541 -h refserver -v "%CD%/OPC Foundation:/root/.local/share/OPC Foundation" consolerefserver:latest diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerrun.sh b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerrun.sh new file mode 100644 index 00000000..420bac36 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceServer/dockerrun.sh @@ -0,0 +1,4 @@ +#!/bin/bash +echo Run a docker container of the console reference server +echo The certificate store of the ref server is mapped to './OPC Foundation' +sudo docker run -it -p 62541:62541 -h refserver -v "$(pwd)/OPC Foundation:/root/.local/share/OPC Foundation" consolerefserver:latest diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceSubscriber/ConsoleReferenceSubscriber.csproj b/IOB-OPC-UA/Applications/ConsoleReferenceSubscriber/ConsoleReferenceSubscriber.csproj new file mode 100644 index 00000000..0d1082e7 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceSubscriber/ConsoleReferenceSubscriber.csproj @@ -0,0 +1,19 @@ + + + + $(AppTargetFrameWorks) + ConsoleReferenceSubscriber + Exe + ConsoleReferenceSubscriber + OPC Foundation + .NET Console Reference Subscriber + Copyright © 2004-2020 OPC Foundation, Inc + Quickstarts.ConsoleReferenceSubscriber + + + + + + + + diff --git a/IOB-OPC-UA/Applications/ConsoleReferenceSubscriber/Program.cs b/IOB-OPC-UA/Applications/ConsoleReferenceSubscriber/Program.cs new file mode 100644 index 00000000..834f22e7 --- /dev/null +++ b/IOB-OPC-UA/Applications/ConsoleReferenceSubscriber/Program.cs @@ -0,0 +1,360 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.PublishedData; + +namespace Quickstarts.ConsoleReferenceSubscriber +{ + public static class Program + { + public const ushort NamespaceIndexSimple = 2; + public const ushort NamespaceIndexAllTypes = 3; + + private static object m_lock = new object(); + + public static void Main(string[] args) + { + Console.WriteLine("OPC UA Console Reference Subscriber"); + + try + { + // Define the configuration of UA Subscriber application + PubSubConfigurationDataType pubSubConfiguration = CreateSubscriberConfiguration(); + + // Create the UA Publisher application + using (UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(pubSubConfiguration)) + { + // Subscribte to DataReceived event + uaPubSubApplication.DataReceived += UaPubSubApplication_DataReceived; + + // Start the publisher + uaPubSubApplication.Start(); + + Console.WriteLine("Subscriber Started. Press Ctrl-C to exit..."); + + ManualResetEvent quitEvent = new ManualResetEvent(false); + try + { + Console.CancelKeyPress += (sender, eArgs) => { + quitEvent.Set(); + eArgs.Cancel = true; + }; + } + catch + { + } + + // wait for timeout or Ctrl-C + quitEvent.WaitOne(); + } + + Console.WriteLine("Program ended."); + Console.WriteLine("Press any key to finish..."); + Console.ReadKey(); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + + private static void UaPubSubApplication_DataReceived(object sender, SubscribedDataEventArgs e) + { + lock (m_lock) + { + Console.WriteLine("Data Received from Source={0}, SequenceNumber={1}, DataSet count={2}", + e.SourceEndPoint, e.NetworkMessageSequenceNumber, e.DataSets.Count); + + foreach (DataSet dataSet in e.DataSets) + { + Console.WriteLine("\tDataSet.Name={0}, DataSetWriterId={1}", dataSet.Name, dataSet.DataSetWriterId); + + for (int i = 0; i < dataSet.Fields.Length; i++) + { + Console.WriteLine("\t\tTargetNodeId:{0}, Attribute:{1}, Value:{2}", + dataSet.Fields[i].TargetNodeId, dataSet.Fields[i].TargetAttribute, dataSet.Fields[i].Value); + } + } + Console.WriteLine("------------------------------------------------"); + } + } + + /// + /// Creates a PubSubConfiguration object programmatically. + /// + /// + public static PubSubConfigurationDataType CreateSubscriberConfiguration() + { + // Define a PubSub connection with PublisherId 100 + PubSubConnectionDataType pubSubConnection1 = new PubSubConnectionDataType(); + pubSubConnection1.Name = "UADPConnection1"; + pubSubConnection1.Enabled = true; + pubSubConnection1.PublisherId = (UInt16)100; + pubSubConnection1.TransportProfileUri = Profiles.UadpTransport; + NetworkAddressUrlDataType address = new NetworkAddressUrlDataType(); + // Specify the local Network interface name to be used + // e.g. address.NetworkInterface = "Ethernet"; + // Leave empty to subscribe on all available local interfaces. + address.NetworkInterface = String.Empty; + address.Url = "opc.udp://239.0.0.1:4840"; + pubSubConnection1.Address = new ExtensionObject(address); + + #region Define 'Simple' MetaData + DataSetMetaDataType simpleMetaData = new DataSetMetaDataType(); + simpleMetaData.DataSetClassId = new Uuid(Guid.Empty); + simpleMetaData.Name = "Simple"; + simpleMetaData.Fields = new FieldMetaDataCollection() + { + new FieldMetaData() + { + Name = "BoolToggle", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Boolean, + DataType = DataTypeIds.Boolean, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Int32, + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32Fast", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Int32, + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "DateTime", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.DateTime, + DataType = DataTypeIds.DateTime, + ValueRank = ValueRanks.Scalar + }, + }; + simpleMetaData.ConfigurationVersion = new ConfigurationVersionDataType() { + MinorVersion = 1, + MajorVersion = 1 + }; + #endregion + + #region Define 'AllTypes' Metadata + DataSetMetaDataType allTypesMetaData = new DataSetMetaDataType(); + allTypesMetaData.DataSetClassId = new Uuid(Guid.Empty); + allTypesMetaData.Name = "AllTypes"; + allTypesMetaData.Fields = new FieldMetaDataCollection() + { + new FieldMetaData() + { + Name = "BoolToggle", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Boolean, + DataType = DataTypeIds.Boolean, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Byte", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Byte, + DataType = DataTypeIds.Byte, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int16", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Int16, + DataType = DataTypeIds.Int16, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Int32, + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "SByte", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.SByte, + DataType = DataTypeIds.SByte, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "UInt16", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.UInt16, + DataType = DataTypeIds.UInt16, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "UInt32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.UInt32, + DataType = DataTypeIds.UInt32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Float", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Float, + DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Double", + DataSetFieldId = new Uuid(Guid.NewGuid()), + BuiltInType = (byte) DataTypes.Double, + DataType = DataTypeIds.Double, + ValueRank = ValueRanks.Scalar + }, + + }; + allTypesMetaData.ConfigurationVersion = new ConfigurationVersionDataType() { + MinorVersion = 1, + MajorVersion = 1 + }; + #endregion + + #region Define ReaderGroup1 + ReaderGroupDataType readerGroup1 = new ReaderGroupDataType(); + readerGroup1.Name = "ReaderGroup 1"; + readerGroup1.Enabled = true; + readerGroup1.MaxNetworkMessageSize = 1500; + readerGroup1.MessageSettings = new ExtensionObject(new ReaderGroupMessageDataType()); + readerGroup1.TransportSettings = new ExtensionObject(new ReaderGroupTransportDataType()); + + #region Define DataSetReader 'Simple' for PublisherId = (UInt16)100, DataSetWriterId = 1 + DataSetReaderDataType dataSetReaderSimple = new DataSetReaderDataType(); + dataSetReaderSimple.Name = "Reader 1"; + dataSetReaderSimple.PublisherId = (UInt16)100; + dataSetReaderSimple.WriterGroupId = 0; + dataSetReaderSimple.DataSetWriterId = 0; + dataSetReaderSimple.Enabled = true; + dataSetReaderSimple.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; + dataSetReaderSimple.KeyFrameCount = 1; + dataSetReaderSimple.DataSetMetaData = simpleMetaData; + + UadpDataSetReaderMessageDataType uadpDataSetReaderMessage = new UadpDataSetReaderMessageDataType() { + GroupVersion = 0, + DataSetOffset = 15, + NetworkMessageNumber = 0, + NetworkMessageContentMask = (uint)(uint)(UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.GroupHeader + | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.GroupVersion + | UadpNetworkMessageContentMask.NetworkMessageNumber | UadpNetworkMessageContentMask.SequenceNumber), + DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber), + }; + dataSetReaderSimple.MessageSettings = new ExtensionObject(uadpDataSetReaderMessage); + TargetVariablesDataType subscribedDataSet = new TargetVariablesDataType(); + subscribedDataSet.TargetVariables = new FieldTargetDataTypeCollection(); + foreach (var fieldMetaData in simpleMetaData.Fields) + { + subscribedDataSet.TargetVariables.Add(new FieldTargetDataType() { + DataSetFieldId = fieldMetaData.DataSetFieldId, + TargetNodeId = new NodeId(fieldMetaData.Name, NamespaceIndexSimple), + AttributeId = Attributes.Value, + OverrideValueHandling = OverrideValueHandling.OverrideValue, + OverrideValue = new Variant(TypeInfo.GetDefaultValue(fieldMetaData.DataType, (int)ValueRanks.Scalar)) + }); + } + + dataSetReaderSimple.SubscribedDataSet = new ExtensionObject(subscribedDataSet); + #endregion + readerGroup1.DataSetReaders.Add(dataSetReaderSimple); + + #region Define DataSetReader 'AllTypes' for PublisherId = (UInt16)100, DataSetWriterId = 2 + DataSetReaderDataType dataSetReaderAllTypes = new DataSetReaderDataType(); + dataSetReaderAllTypes.Name = "Reader 2"; + dataSetReaderAllTypes.PublisherId = (UInt16)100; + dataSetReaderAllTypes.WriterGroupId = 0; + dataSetReaderAllTypes.DataSetWriterId = 0; + dataSetReaderAllTypes.Enabled = true; + dataSetReaderAllTypes.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; + dataSetReaderAllTypes.KeyFrameCount = 1; + dataSetReaderAllTypes.DataSetMetaData = allTypesMetaData; + + uadpDataSetReaderMessage = new UadpDataSetReaderMessageDataType() { + GroupVersion = 0, + DataSetOffset = 47, + NetworkMessageNumber = 0, + NetworkMessageContentMask = (uint)(uint)(UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.GroupHeader + | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.GroupVersion + | UadpNetworkMessageContentMask.NetworkMessageNumber | UadpNetworkMessageContentMask.SequenceNumber), + DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber), + }; + dataSetReaderAllTypes.MessageSettings = new ExtensionObject(uadpDataSetReaderMessage); + subscribedDataSet = new TargetVariablesDataType(); + subscribedDataSet.TargetVariables = new FieldTargetDataTypeCollection(); + foreach (var fieldMetaData in allTypesMetaData.Fields) + { + subscribedDataSet.TargetVariables.Add(new FieldTargetDataType() { + DataSetFieldId = fieldMetaData.DataSetFieldId, + TargetNodeId = new NodeId(fieldMetaData.Name, NamespaceIndexAllTypes), + AttributeId = Attributes.Value, + OverrideValueHandling = OverrideValueHandling.OverrideValue, + OverrideValue = new Variant(TypeInfo.GetDefaultValue(fieldMetaData.DataType, (int)ValueRanks.Scalar)) + }); + } + + dataSetReaderAllTypes.SubscribedDataSet = new ExtensionObject(subscribedDataSet); + #endregion + readerGroup1.DataSetReaders.Add(dataSetReaderAllTypes); + + #endregion + pubSubConnection1.ReaderGroups.Add(readerGroup1); + + //create pub sub configuration root object + PubSubConfigurationDataType pubSubConfiguration = new PubSubConfigurationDataType(); + pubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection() + { + pubSubConnection1 + }; + + return pubSubConfiguration; + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceClient/App.config b/IOB-OPC-UA/Applications/ReferenceClient/App.config new file mode 100644 index 00000000..05ff13ea --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/App.config @@ -0,0 +1,46 @@ + + + +
+ + + + + + + + + SteamwareOpcUa.Client.Config.xml + + + + + + diff --git a/IOB-OPC-UA/Applications/ReferenceClient/MainForm.Designer.cs b/IOB-OPC-UA/Applications/ReferenceClient/MainForm.Designer.cs new file mode 100644 index 00000000..623f1925 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/MainForm.Designer.cs @@ -0,0 +1,271 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.Client.Controls; + +namespace SteamwareOpcUa.Client +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.MenuBar = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ServerMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Server_DiscoverMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Server_ConnectMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Server_DisconnectMI = new System.Windows.Forms.ToolStripMenuItem(); + this.HelpMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Help_ContentsMI = new System.Windows.Forms.ToolStripMenuItem(); + this.StatusBar = new System.Windows.Forms.StatusStrip(); + this.BrowseCTRL = new Opc.Ua.Client.Controls.BrowseNodeCtrl(); + this.ConnectServerCTRL = new Opc.Ua.Client.Controls.ConnectServerCtrl(); + this.clientHeaderBranding1 = new Opc.Ua.Client.Controls.HeaderBranding(); + this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); + this.tsslAppVers = new System.Windows.Forms.ToolStripStatusLabel(); + this.timerUI = new System.Windows.Forms.Timer(this.components); + this.MenuBar.SuspendLayout(); + this.StatusBar.SuspendLayout(); + this.SuspendLayout(); + // + // MenuBar + // + this.MenuBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.ServerMI, + this.HelpMI}); + this.MenuBar.Location = new System.Drawing.Point(0, 0); + this.MenuBar.Name = "MenuBar"; + this.MenuBar.Size = new System.Drawing.Size(884, 24); + this.MenuBar.TabIndex = 1; + this.MenuBar.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(93, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click); + // + // ServerMI + // + this.ServerMI.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Server_DiscoverMI, + this.Server_ConnectMI, + this.Server_DisconnectMI}); + this.ServerMI.Name = "ServerMI"; + this.ServerMI.Size = new System.Drawing.Size(51, 20); + this.ServerMI.Text = "Server"; + // + // Server_DiscoverMI + // + this.Server_DiscoverMI.Name = "Server_DiscoverMI"; + this.Server_DiscoverMI.Size = new System.Drawing.Size(133, 22); + this.Server_DiscoverMI.Text = "Discover..."; + this.Server_DiscoverMI.Click += new System.EventHandler(this.Server_DiscoverMI_Click); + // + // Server_ConnectMI + // + this.Server_ConnectMI.Name = "Server_ConnectMI"; + this.Server_ConnectMI.Size = new System.Drawing.Size(133, 22); + this.Server_ConnectMI.Text = "Connect"; + this.Server_ConnectMI.Click += new System.EventHandler(this.Server_ConnectMI_Click); + // + // Server_DisconnectMI + // + this.Server_DisconnectMI.Name = "Server_DisconnectMI"; + this.Server_DisconnectMI.Size = new System.Drawing.Size(133, 22); + this.Server_DisconnectMI.Text = "Disconnect"; + this.Server_DisconnectMI.Click += new System.EventHandler(this.Server_DisconnectMI_Click); + // + // HelpMI + // + this.HelpMI.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Help_ContentsMI}); + this.HelpMI.Name = "HelpMI"; + this.HelpMI.Size = new System.Drawing.Size(44, 20); + this.HelpMI.Text = "Help"; + // + // Help_ContentsMI + // + this.Help_ContentsMI.Name = "Help_ContentsMI"; + this.Help_ContentsMI.Size = new System.Drawing.Size(122, 22); + this.Help_ContentsMI.Text = "Contents"; + this.Help_ContentsMI.Click += new System.EventHandler(this.Help_ContentsMI_Click); + // + // StatusBar + // + this.StatusBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripProgressBar1, + this.tsslAppVers}); + this.StatusBar.Location = new System.Drawing.Point(0, 524); + this.StatusBar.Name = "StatusBar"; + this.StatusBar.Size = new System.Drawing.Size(884, 22); + this.StatusBar.TabIndex = 2; + // + // BrowseCTRL + // + this.BrowseCTRL.AttributesListCollapsed = false; + this.BrowseCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.BrowseCTRL.Location = new System.Drawing.Point(0, 122); + this.BrowseCTRL.Name = "BrowseCTRL"; + this.BrowseCTRL.Size = new System.Drawing.Size(884, 402); + this.BrowseCTRL.SplitterDistance = 387; + this.BrowseCTRL.TabIndex = 5; + this.BrowseCTRL.View = null; + // + // ConnectServerCTRL + // + this.ConnectServerCTRL.Configuration = null; + this.ConnectServerCTRL.DisableDomainCheck = false; + this.ConnectServerCTRL.DiscoverTimeout = 15000; + this.ConnectServerCTRL.Dock = System.Windows.Forms.DockStyle.Top; + this.ConnectServerCTRL.Location = new System.Drawing.Point(0, 99); + this.ConnectServerCTRL.MaximumSize = new System.Drawing.Size(2048, 23); + this.ConnectServerCTRL.MinimumSize = new System.Drawing.Size(500, 23); + this.ConnectServerCTRL.Name = "ConnectServerCTRL"; + this.ConnectServerCTRL.PreferredLocales = null; + this.ConnectServerCTRL.ReconnectPeriod = 10; + this.ConnectServerCTRL.ServerUrl = ""; + this.ConnectServerCTRL.SessionName = null; + this.ConnectServerCTRL.SessionTimeout = ((uint)(60000u)); + this.ConnectServerCTRL.Size = new System.Drawing.Size(884, 23); + this.ConnectServerCTRL.StatusStrip = this.StatusBar; + this.ConnectServerCTRL.TabIndex = 6; + this.ConnectServerCTRL.UserIdentity = null; + this.ConnectServerCTRL.UseSecurity = true; + this.ConnectServerCTRL.ReconnectStarting += new System.EventHandler(this.Server_ReconnectStarting); + this.ConnectServerCTRL.ReconnectComplete += new System.EventHandler(this.Server_ReconnectComplete); + this.ConnectServerCTRL.ConnectComplete += new System.EventHandler(this.Server_ConnectComplete); + // + // clientHeaderBranding1 + // + this.clientHeaderBranding1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.clientHeaderBranding1.BackColor = System.Drawing.Color.White; + this.clientHeaderBranding1.Dock = System.Windows.Forms.DockStyle.Top; + this.clientHeaderBranding1.Location = new System.Drawing.Point(0, 24); + this.clientHeaderBranding1.MaximumSize = new System.Drawing.Size(0, 75); + this.clientHeaderBranding1.MinimumSize = new System.Drawing.Size(500, 75); + this.clientHeaderBranding1.Name = "clientHeaderBranding1"; + this.clientHeaderBranding1.Padding = new System.Windows.Forms.Padding(3); + this.clientHeaderBranding1.Size = new System.Drawing.Size(884, 75); + this.clientHeaderBranding1.TabIndex = 7; + // + // toolStripProgressBar1 + // + this.toolStripProgressBar1.Name = "toolStripProgressBar1"; + this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16); + // + // tsslAppVers + // + this.tsslAppVers.Name = "tsslAppVers"; + this.tsslAppVers.Size = new System.Drawing.Size(12, 17); + this.tsslAppVers.Text = "-"; + // + // timerUI + // + this.timerUI.Interval = 200; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 546); + this.Controls.Add(this.BrowseCTRL); + this.Controls.Add(this.ConnectServerCTRL); + this.Controls.Add(this.StatusBar); + this.Controls.Add(this.clientHeaderBranding1); + this.Controls.Add(this.MenuBar); + this.MainMenuStrip = this.MenuBar; + this.Name = "MainForm"; + this.Text = "Steamware OPC-UA Test Client"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.MenuBar.ResumeLayout(false); + this.MenuBar.PerformLayout(); + this.StatusBar.ResumeLayout(false); + this.StatusBar.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip MenuBar; + private System.Windows.Forms.StatusStrip StatusBar; + private System.Windows.Forms.ToolStripMenuItem ServerMI; + private System.Windows.Forms.ToolStripMenuItem Server_DiscoverMI; + private System.Windows.Forms.ToolStripMenuItem Server_ConnectMI; + private System.Windows.Forms.ToolStripMenuItem Server_DisconnectMI; + private System.Windows.Forms.ToolStripMenuItem HelpMI; + private System.Windows.Forms.ToolStripMenuItem Help_ContentsMI; + private ConnectServerCtrl ConnectServerCTRL; + private BrowseNodeCtrl BrowseCTRL; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private HeaderBranding clientHeaderBranding1; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; + private System.Windows.Forms.ToolStripStatusLabel tsslAppVers; + private System.Windows.Forms.Timer timerUI; + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceClient/MainForm.cs b/IOB-OPC-UA/Applications/ReferenceClient/MainForm.cs new file mode 100644 index 00000000..8070c59b --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/MainForm.cs @@ -0,0 +1,226 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Drawing; +using System.Security.Cryptography.X509Certificates; +using System.Windows.Forms; +using System.IO; +using Opc.Ua; +using Opc.Ua.Client; +using Opc.Ua.Client.Controls; + +namespace SteamwareOpcUa.Client +{ + /// + /// The main form for a simple Quickstart Client application. + /// + public partial class MainForm : Form + { + #region Private Fields + + private ApplicationConfiguration m_configuration; + + private bool m_connectedOnce; + + private Session m_session; + + #endregion Private Fields + + #region Private Constructors + + /// + /// Creates an empty form. + /// + private MainForm() + { + InitializeComponent(); + myInit(); + } + + #endregion Private Constructors + + #region Public Constructors + + /// + /// Creates a form which uses the specified client configuration. + /// + /// The configuration to use. + public MainForm(ApplicationConfiguration configuration) + { + InitializeComponent(); + myInit(); + ConnectServerCTRL.Configuration = m_configuration = configuration; + ConnectServerCTRL.ServerUrl = "opc.tcp://localhost:62541/Quickstarts/ReferenceServer"; + this.Text = m_configuration.ApplicationName; + } + + #endregion Public Constructors + + #region Private Methods + + private void ExitToolStripMenuItem_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Exit this application?", "Reference Client", MessageBoxButtons.YesNoCancel) == DialogResult.Yes) + { + Application.Exit(); + } + } + + private void Help_ContentsMI_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start(Path.GetDirectoryName(Application.ExecutablePath) + "\\WebHelp\\overview_-_reference_client.htm"); + } + catch (Exception ex) + { + MessageBox.Show("Unable to launch help documentation. Error: " + ex.Message); + } + } + + /// + /// Cleans up when the main form closes. + /// + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + ConnectServerCTRL.Disconnect(); + } + + private void myInit() + { + System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); + System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location); + tsslAppVers.Text = $"v.{fvi.FileVersion}"; + } + + /// + /// Updates the application after connecting to or disconnecting from the server. + /// + private void Server_ConnectComplete(object sender, EventArgs e) + { + try + { + m_session = ConnectServerCTRL.Session; + + // set a suitable initial state. + if (m_session != null && !m_connectedOnce) + { + m_connectedOnce = true; + } + + // browse the instances in the server. + BrowseCTRL.Initialize(m_session, ObjectIds.ObjectsFolder, ReferenceTypeIds.Organizes, ReferenceTypeIds.Aggregates); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Connects to a server. + /// + private async void Server_ConnectMI_Click(object sender, EventArgs e) + { + try + { + await ConnectServerCTRL.Connect(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Disconnects from the current session. + /// + private void Server_DisconnectMI_Click(object sender, EventArgs e) + { + try + { + ConnectServerCTRL.Disconnect(); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Prompts the user to choose a server on another host. + /// + private void Server_DiscoverMI_Click(object sender, EventArgs e) + { + try + { + ConnectServerCTRL.Discover(null); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Updates the application after reconnecting to the server. + /// + private void Server_ReconnectComplete(object sender, EventArgs e) + { + try + { + m_session = ConnectServerCTRL.Session; + BrowseCTRL.ChangeSession(m_session); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + /// + /// Updates the application after a communicate error was detected. + /// + private void Server_ReconnectStarting(object sender, EventArgs e) + { + try + { + BrowseCTRL.ChangeSession(null); + } + catch (Exception exception) + { + ClientUtils.HandleException(this.Text, exception); + } + } + + #endregion Private Methods + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceClient/MainForm.resx b/IOB-OPC-UA/Applications/ReferenceClient/MainForm.resx new file mode 100644 index 00000000..bf76f356 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/MainForm.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + 132, 17 + + + 235, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Program.cs b/IOB-OPC-UA/Applications/ReferenceClient/Program.cs new file mode 100644 index 00000000..1131bebd --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Program.cs @@ -0,0 +1,87 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Client.Controls; +using Opc.Ua.Configuration; + +namespace SteamwareOpcUa.Client +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // Initialize the user interface. + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); + ApplicationInstance application = new ApplicationInstance(); + application.ApplicationName = "UA Reference Client"; + application.ApplicationType = ApplicationType.Client; + application.ConfigSectionName = "SteamwareOpcUa.Client"; + + try + { + + // load the application configuration. + application.LoadApplicationConfiguration(false).Wait(); + + // check the application certificate. + var certOK = application.CheckApplicationInstanceCertificate(false, 0).Result; + if (!certOK) + { + throw new Exception("Application instance certificate invalid!"); + } + + // run the application interactively. + Application.Run(new MainForm(application.ApplicationConfiguration)); + } + catch (Exception e) + { + ExceptionDlg.Show(application.ApplicationName, e); + } + } + } + + /// + /// The ReferenceClient namespace contains classes which implement a Quickstart Client. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Applications/ReferenceClient/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e89f94aa --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Properties/AssemblyInfo.cs @@ -0,0 +1,53 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Quickstart.ReferenceClient")] +[assembly: AssemblyDescription("Quickstart Reference Client")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OPC Foundation")] +[assembly: AssemblyProduct("OPC UA Quickstarts")] +[assembly: AssemblyCopyright("Copyright © 2020 OPC Foundation")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("949376dd-7040-40e4-a0a9-a86ecf0fbef0")] + diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Properties/Resources.Designer.cs b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Resources.Designer.cs new file mode 100644 index 00000000..32fec971 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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 SteamwareOpcUa.Clientrties { + 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", "16.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("SteamwareOpcUa.Clientrties.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; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Properties/Resources.resx b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Properties/Settings.Designer.cs b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Settings.Designer.cs new file mode 100644 index 00000000..41d26911 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 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 SteamwareOpcUa.Clientrties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.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; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Properties/Settings.settings b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/IOB-OPC-UA/Applications/ReferenceClient/Reference Client.csproj b/IOB-OPC-UA/Applications/ReferenceClient/Reference Client.csproj new file mode 100644 index 00000000..7dee378a --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/Reference Client.csproj @@ -0,0 +1,158 @@ + + + + Debug + AnyCPU + PackageReference + true + 9.0.30729 + 2.0 + {9C1E7F15-2EE3-440D-8E17-00C38073822A} + WinExe + Properties + SteamwareOpcUa.Client + SteamwareOpcUa.Client + v4.6.2 + 512 + SteamWare.ico + + + + + 3.5 + + false + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + false + + + + + + + + + Form + + + MainForm.cs + + + + + MainForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Designer + + + + Always + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + {92d98d3d-2a7d-4f4b-8c72-1a98908d0221} + Opc.Ua.Bindings.Https + + + {4569aaa2-710b-4e8b-a4c6-f917777814da} + Opc.Ua.Core + + + {cd3c8738-1fbb-405d-aec0-92e76bf399a0} + Opc.Ua.Client + + + {de6b7d4f-e566-45cb-a876-086e5cd50fb0} + Opc.Ua.Configuration + + + {a247d2ee-14fc-463d-a9ba-6cff1ef22b7a} + UA Client Controls + + + + win7-x64 + win7-x64 + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceClient/SteamWare.ico b/IOB-OPC-UA/Applications/ReferenceClient/SteamWare.ico new file mode 100644 index 00000000..70ccadaf Binary files /dev/null and b/IOB-OPC-UA/Applications/ReferenceClient/SteamWare.ico differ diff --git a/IOB-OPC-UA/Applications/ReferenceClient/SteamwareOpcUa.Client.Config.xml b/IOB-OPC-UA/Applications/ReferenceClient/SteamwareOpcUa.Client.Config.xml new file mode 100644 index 00000000..5d808636 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/SteamwareOpcUa.Client.Config.xml @@ -0,0 +1,90 @@ + + + Steamware Reference Client + urn:localhost:Quickstarts:ReferenceClient + uri:opcfoundation.org:Quickstarts:ReferenceClient + Client_1 + + + + + + Directory + %CommonApplicationData%\Steamware\pki\own + CN=Steamware Reference Client, C=IT, S=Bergamo, O=Steamware, DC=localhost + + + + + Directory + %CommonApplicationData%\Steamware\pki\issuer + + + + + Directory + %CommonApplicationData%\Steamware\pki\trusted + + + + + Directory + %CommonApplicationData%\Steamware\pki\rejected + + + + false + + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + 60000 + + opc.tcp://{0}:4840 + http://{0}:52601/UADiscovery + http://{0}/UADiscovery/Default.svc + + + SteamwareOpcUa.Client.Endpoints.xml + 10000 + + + + + + + %CommonApplicationData%\OPC Foundation\Logs\SteamwareOpcUa.Client.log.txt + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceClient/SteamwareOpcUa.Client.exe.config b/IOB-OPC-UA/Applications/ReferenceClient/SteamwareOpcUa.Client.exe.config new file mode 100644 index 00000000..2362835b --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceClient/SteamwareOpcUa.Client.exe.config @@ -0,0 +1,50 @@ + + + +
+ + + + + + + + + + + + + + + SteamwareOpcUa.Client.Config.xml + + + + diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateCalculator.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateCalculator.cs new file mode 100644 index 00000000..061b65ad --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateCalculator.cs @@ -0,0 +1,810 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Aggregates +{ + /// + /// All aggregators implement this interface. It describes the relationship between the + /// aggregator and any TimeSlice instances processed by it. + /// + public interface IAggregator + { + /// + /// Compute a processed value from raw values in a slice of time. + /// + /// + /// + /// + /// + DataValue Compute(IAggregationContext context, TimeSlice bucket, AggregateState state); + + /// + /// Determine whether there is sufficient data in a TimeSlice with respect to the + /// AggregateState to permit reliable computation of a processed value. This decision + /// is largely governed by the requirements for interpolation or extrapolation. + /// + /// + /// + /// + bool WaitForMoreData(TimeSlice bucket, AggregateState state); + + /// + /// Take snapshot data from the AggregationState in order to determine bounding values + /// for the TimeSlice. + /// + /// + /// + void UpdateBoundingValues(TimeSlice bucket, AggregateState state); + } + + /// + /// An interface that allows the basic information about an aggregate query to be + /// communicated + /// + public interface IAggregationContext + { + /// + /// The start of the time window we are aggregating over. Note this may be later + /// than the EndTime. + /// + DateTime StartTime { get; } + + /// + /// The end time of the window we are aggregating over, if known. Note this may be + /// earlier than the StartTime. + /// + DateTime EndTime { get; } + + /// + /// The size (in milliseconds) of each sampling interval in the time window. If this + /// is zero, then the entire window is treated as one sampling interval. + /// + double ProcessingInterval { get; } + + /// + /// Indicates that the time window for aggregation has a start time later than its + /// end time, and that raw data will be presented in reverse order. + /// This value is computed from StartTime and EndTime, however EndTime will be null + /// if the aggregation is used as a filter in a subscription. + /// + bool IsReverseAggregation { get; } + + /// + /// The maximum percentage of points in a sampling interval that may be bad for + /// the processed value to have a non-bad status + /// + byte PercentDataBad { get; } + + /// + /// The minimum percentage of points in a sampling interval that must be good + /// for the processed value to have a good status + /// + byte PercentDataGood { get; } + + /// + /// Indicator thet determines whether stepped or sloped extrapolation should + /// be used + /// + bool UseSlopedExtrapolation { get; } + + /// + /// Indicator that determines whether stepped or sloped interpolation should + /// be used + /// + bool SteppedVariable { get; } + + /// + /// Indicates that raw data points with status Uncertain should be handled as if they + /// were bad points rather than as good points. + /// + bool TreatUncertainAsBad { get; } + } + + /// + /// An interface that allows new processed data points to be generated as a response to + /// new raw data + /// + public interface IAggregationActor + { + /// + /// Causes the derivation of 0 or more new processed data points from the given raw + /// data point and the current state of the aggregator. + /// + /// + /// + void UpdateProcessedData(DataValue rawValue, AggregateState state); + + /// + /// Allows those processed data points already derived to be released to the outside + /// world. + /// + /// + IList ProcessedValues(); + } + + /// + /// An interface that captures the original active API of the AggregateCalculator class + /// required to integrate with the subscription code. + /// + public interface IAggregateCalculator + { + /// + /// Processes an incoming value. + /// + /// + /// Returns a set of processed data values if any intervals are complete. + /// + IList ProcessValue(DataValue value, ServiceResult result); + + /// + /// Processes the fact that there is no more data. + /// + /// + /// Returns a set of processed data values if any intervals is remain to be processed. + /// + IList ProcessTermination(ServiceResult result); + } + + /// + /// Coordinates aggregation over a time series of raw data points to yield a time series of processed data points. + /// + public abstract class AggregateCalculatorImpl : IAggregateCalculator, IAggregationContext, IAggregationActor, IAggregator + { + #region IAggregationContext Members + /// + /// The start time. + /// + public DateTime StartTime { get; set; } + + /// + /// The end time. + /// + public DateTime EndTime { get; set; } + + /// + /// Whether time flows backwards + /// + public bool IsReverseAggregation { get { return EndTime < StartTime; } } + + /// + /// The percentage data that can be bad. + /// + public byte PercentDataBad { get { return Configuration.PercentDataBad; } } + + /// + /// The percentage data that must be good. + /// + public byte PercentDataGood { get { return Configuration.PercentDataGood; } } + + /// + /// Whether to use sloped extrapolation. + /// + public bool UseSlopedExtrapolation { get { return Configuration.UseSlopedExtrapolation; } } + + /// + /// Whether value sematics of the underlying data require stepped interpolation. + /// + public bool SteppedVariable { get; set; } + + /// + /// How to treat uncertain data. + /// + public bool TreatUncertainAsBad { get { return Configuration.TreatUncertainAsBad; } } + + /// + /// THe width of the processing interval. + /// + public double ProcessingInterval { get; set; } + #endregion + + #region IAggregateCalculator Members + /// + /// Processes the next value returns the calculated values up until the last complete interval. + /// + public IList ProcessValue(DataValue value, ServiceResult result) + { + if (m_state == null) InitializeAggregation(); + m_state.AddRawData(value); + return ProcessedValues(); + } + + /// + /// Processes all remaining intervals. + /// + public IList ProcessTermination(ServiceResult result) + { + if (m_state == null) InitializeAggregation(); + m_state.EndOfData(); + return ProcessedValues(); + } + #endregion + + #region IAggregationActor Members + /// + /// Updates the data processed by the aggregator. + /// + public void UpdateProcessedData(DataValue rawValue, AggregateState state) + { + // step 1: compute new TimeSlice instances to enqueue, until we reach the one the + // rawValue belongs in or we've reached the one that goes to the EndTime. Ensure + // that the raw value is added to the last one created. + TimeSlice tmpTS = null; + if (m_pending == null) + m_pending = new Queue(); + if (m_latest == null) + { + tmpTS = TimeSlice.CreateInitial(StartTime, EndTime, ProcessingInterval); + if (tmpTS != null) + { + m_pending.Enqueue(tmpTS); + m_latest = tmpTS; + } + } + else + { + tmpTS = m_latest; + } + DateTime latestTime = (StartTime > EndTime) ? StartTime : EndTime; + while ((tmpTS != null) && (state.HasTerminated || !tmpTS.AcceptValue(rawValue))) + { + tmpTS = TimeSlice.CreateNext(latestTime, ProcessingInterval, tmpTS); + if (tmpTS != null) + { + m_pending.Enqueue(tmpTS); + m_latest = tmpTS; + } + } + + // step 2: apply the aggregator to the head of the queue to see if we can convert + // it into a processed point. If so, dequeue it and add the processed value to the + // m_released list. Keep doing it until one of the TimeSlices returns null or we + // run out of enqueued TimeSlices (should only happen on termination). + if (m_released == null) + m_released = new List(); + foreach (TimeSlice b in m_pending) + UpdateBoundingValues(b, state); + bool active = true; + while ((m_pending.Count > 0) && active) + { + TimeSlice top = m_pending.Peek(); + DataValue computed = null; + if (!WaitForMoreData(top, state)) + computed = Compute(this, top, state); + if (computed != null) + { + m_released.Add(computed); + m_pending.Dequeue(); + } + else + { + active = false; + } + } + } + + /// + /// Returns the values processed by the aggregator. + /// + public IList ProcessedValues() + { + IList retval = null; + retval = (m_released != null) ? m_released : new List(); + m_released = null; + return retval; + } + #endregion + + #region IAggregator Members + /// + /// Computes the aggregate value for the time slice. + /// + public abstract DataValue Compute(IAggregationContext context, TimeSlice bucket, AggregateState state); + + /// + /// Returns true if more data is required for the next interval. + /// + public abstract bool WaitForMoreData(TimeSlice bucket, AggregateState state); + + /// + /// Updates the bounding values for the time slice. + /// + public abstract void UpdateBoundingValues(TimeSlice bucket, AggregateState state); + #endregion + + #region Public Members + /// + /// The configuration to use when calculating aggregates. + /// + public AggregateConfiguration Configuration { get; set; } + + /// + /// Computes the status code for the processing interval using the percent good/bad information in the context. + /// + protected virtual StatusCode ComputeStatus(IAggregationContext context, int numGood, int numBad, TimeSlice bucket) + { + int total = numGood + numBad; + if (total > 0) + { + double pbad = (numBad * 100) / total; + if (pbad > context.PercentDataBad) return StatusCodes.Bad; + double pgood = (numGood * 100) / total; + if (pgood >= context.PercentDataGood) return StatusCodes.Good; + return StatusCodes.Uncertain; + } + else + { + return StatusCodes.GoodNoData; + } + } + #endregion + + #region Private Methods + /// + /// Initializes the aggregation. + /// + private void InitializeAggregation() + { + m_state = new AggregateState(this, this); + } + #endregion + + #region Private Fields + private AggregateState m_state = null; + private TimeSlice m_latest; + private Queue m_pending; + private List m_released; + #endregion + } + + /// + /// Allows aggregates to be calculated without interpolation. + /// + public abstract class NonInterpolatingCalculator : AggregateCalculatorImpl + { + /// + /// Returns true if more data is required for the next interval. + /// + public override bool WaitForMoreData(TimeSlice bucket, AggregateState state) + { + bool wait = false; + if (!state.HasTerminated) + { + if (bucket.ContainsTime(state.LatestTimestamp)) + { + wait = true; + } + } + return wait; + } + + /// + /// Updates the bounding values for the time slice. + /// + public override void UpdateBoundingValues(TimeSlice bucket, AggregateState state) + { + } + } + + /// + /// Calculates aggregates with interpolation. + /// + public abstract class InterpolatingCalculator : AggregateCalculatorImpl + { + /// + /// Returns true if more data is required for the next interval. + /// + public override bool WaitForMoreData(TimeSlice bucket, AggregateState state) + { + if (!state.HasTerminated) + { + if (bucket.ContainsTime(state.LatestTimestamp)) + { + return true; + } + + if (this.IsReverseAggregation) + { + if (state.LatestTimestamp < bucket.To) + { + return false; + } + } + else + { + if (state.LatestTimestamp > bucket.To) + { + return false; + } + } + + if ((bucket.EarlyBound.Value == null) || (bucket.LateBound.Value == null)) + { + return true; + } + } + + return false; + } + + /// + /// Calculates the status for the time slice. + /// + protected override StatusCode ComputeStatus(IAggregationContext context, int numGood, int numBad, TimeSlice bucket) + { + StatusCode code = (bucket.EarlyBound.Value == null && numGood + numBad == 0) ? // no inital bound, do not extrapolate + StatusCodes.BadNoData : base.ComputeStatus(context, numGood, numBad, bucket); + return code; + } + + /// + /// Determines the best good point before the end bound. + /// + protected void UpdatePriorPoint(BoundingValue bound, AggregateState state) + { + if (state.HasTerminated && (state.LatePoint == null) && bound.PriorPoint == null) + { + bound.PriorPoint = state.PriorPoint; + bound.PriorBadPoints = state.PriorBadPoints; + bound.DerivationType = UseSlopedExtrapolation ? BoundingValueType.SlopedExtrapolation : BoundingValueType.SteppedExtrapolation; + } + } + } + + /// + /// Calculates aggreates based on the point values. + /// + public abstract class FloatInterpolatingCalculator : InterpolatingCalculator + { + /// + /// Updates the bounding values for the time slice. + /// + public override void UpdateBoundingValues(TimeSlice bucket, AggregateState state) + { + BoundingValue EarlyBound = bucket.EarlyBound; + BoundingValue LateBound = bucket.LateBound; + if (bucket.ExactMatch(state.LatestTimestamp) && StatusCode.IsGood(state.LatestStatus)) + { + EarlyBound.RawPoint = state.LatePoint == null ? state.EarlyPoint : state.LatePoint; + EarlyBound.DerivationType = BoundingValueType.Raw; + } + else + { + if (EarlyBound.DerivationType != BoundingValueType.Raw) + { + if (EarlyBound.EarlyPoint == null) + { + if ((state.EarlyPoint != null) && (state.EarlyPoint.SourceTimestamp < bucket.From)) + { + EarlyBound.EarlyPoint = state.EarlyPoint; + } + } + if (EarlyBound.LatePoint == null) + { + if ((state.LatePoint != null) && (state.LatePoint.SourceTimestamp >= bucket.From)) + { + EarlyBound.LatePoint = state.LatePoint; + if (SteppedVariable) + { + EarlyBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < EarlyBound.Timestamp) + EarlyBound.CurrentBadPoints.Add(dv); + } + else + { + EarlyBound.CurrentBadPoints = state.CurrentBadPoints; + } + EarlyBound.DerivationType = SteppedVariable ? BoundingValueType.SteppedInterpolation : BoundingValueType.SlopedInterpolation; + } + } + } + if (state.HasTerminated && (state.LatePoint == null)) + { + if (SteppedVariable) + { + EarlyBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < EarlyBound.Timestamp) + EarlyBound.CurrentBadPoints.Add(dv); + } + else + { + EarlyBound.CurrentBadPoints = state.CurrentBadPoints; + } + } + } + + if (bucket.EndMatch(state.LatestTimestamp) && StatusCode.IsGood(state.LatestStatus)) + { + LateBound.RawPoint = state.LatePoint == null ? state.EarlyPoint : state.LatePoint; + LateBound.DerivationType = BoundingValueType.Raw; + } + else + { + if (LateBound.DerivationType != BoundingValueType.Raw) + { + if ((state.EarlyPoint != null) && (state.EarlyPoint.SourceTimestamp < bucket.To)) + LateBound.EarlyPoint = state.EarlyPoint; + if (LateBound.LatePoint == null) + { + if ((state.LatePoint != null) && (state.LatePoint.SourceTimestamp >= bucket.To)) + { + LateBound.LatePoint = state.LatePoint; + if (SteppedVariable) + { + LateBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < LateBound.Timestamp) + LateBound.CurrentBadPoints.Add(dv); + } + else + { + LateBound.CurrentBadPoints = state.CurrentBadPoints; + } + LateBound.DerivationType = SteppedVariable ? BoundingValueType.SteppedInterpolation : BoundingValueType.SlopedInterpolation; + } + } + } + if (state.HasTerminated && (state.LatePoint == null)) + { + if (SteppedVariable) + { + LateBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < LateBound.Timestamp) + LateBound.CurrentBadPoints.Add(dv); + } + else + { + LateBound.CurrentBadPoints = state.CurrentBadPoints; + } + } + UpdatePriorPoint(LateBound, state); + } + } + } + + /// + /// Calculates aggreates based something other that the value. + /// + public abstract class SteppedInterpolatingCalculator : InterpolatingCalculator + { + /// + /// Updates the bounding values for the time slice. + /// + public override void UpdateBoundingValues(TimeSlice bucket, AggregateState state) + { + BoundingValue EarlyBound = bucket.EarlyBound; + BoundingValue LateBound = bucket.LateBound; + if (bucket.ExactMatch(state.LatestTimestamp) && StatusCode.IsGood(state.LatestStatus)) + { + EarlyBound.RawPoint = state.LatePoint == null ? state.EarlyPoint : state.LatePoint; + EarlyBound.DerivationType = BoundingValueType.Raw; + } + else + { + if (EarlyBound.DerivationType != BoundingValueType.Raw) + { + if (EarlyBound.EarlyPoint == null) + { + if ((state.EarlyPoint != null) && (state.EarlyPoint.SourceTimestamp < bucket.From)) + { + EarlyBound.EarlyPoint = state.EarlyPoint; + } + } + if (EarlyBound.LatePoint == null) + { + if ((state.LatePoint != null) && (state.LatePoint.SourceTimestamp >= bucket.From)) + { + EarlyBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < EarlyBound.Timestamp) + EarlyBound.CurrentBadPoints.Add(dv); + EarlyBound.DerivationType = BoundingValueType.SteppedInterpolation; + } + } + } + if (state.HasTerminated && (state.LatePoint == null)) + { + EarlyBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < EarlyBound.Timestamp) + EarlyBound.CurrentBadPoints.Add(dv); + EarlyBound.DerivationType = BoundingValueType.SteppedExtrapolation; + } + } + + if (bucket.EndMatch(state.LatestTimestamp) && StatusCode.IsGood(state.LatestStatus)) + { + LateBound.RawPoint = state.LatePoint == null ? state.EarlyPoint : state.LatePoint; + LateBound.DerivationType = BoundingValueType.Raw; + } + else + { + if (LateBound.DerivationType != BoundingValueType.Raw) + { + if ((state.EarlyPoint != null) && (state.EarlyPoint.SourceTimestamp < bucket.To)) + LateBound.EarlyPoint = state.EarlyPoint; + if (LateBound.LatePoint == null) + { + if ((state.LatePoint != null) && (state.LatePoint.SourceTimestamp >= bucket.To)) + { + LateBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < LateBound.Timestamp) + LateBound.CurrentBadPoints.Add(dv); + LateBound.DerivationType = BoundingValueType.SteppedInterpolation; + } + } + } + if (state.HasTerminated && (state.LatePoint == null)) + { + LateBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < LateBound.Timestamp) + LateBound.CurrentBadPoints.Add(dv); + if (EarlyBound.PriorPoint == null) + { + EarlyBound.PriorPoint = state.PriorPoint; + EarlyBound.PriorBadPoints = state.PriorBadPoints; + EarlyBound.DerivationType = UseSlopedExtrapolation ? BoundingValueType.SlopedExtrapolation : BoundingValueType.SteppedExtrapolation; + } + LateBound.DerivationType = BoundingValueType.SteppedExtrapolation; + } + } + } + } + + /// + /// Calculates aggreates based on the quality or duration. + /// + public abstract class QualityDurationCalculator : InterpolatingCalculator + { + /// + /// Checks if the point has the status that meets the aggregate criteria. + /// + protected abstract bool RightStatusCode(DataValue dv); + + /// + /// Calculates the value for the time slice. + /// + public override DataValue Compute(IAggregationContext context, TimeSlice bucket, AggregateState state) + { + DataValue retval = new DataValue { SourceTimestamp = bucket.From }; ; + StatusCode code = StatusCodes.Good; + DataValue previous = new DataValue { SourceTimestamp = bucket.From }; + if (bucket.EarlyBound.Value != null) + previous.StatusCode = (StatusCode)bucket.EarlyBound.Value.WrappedValue.Value; + else + previous.StatusCode = StatusCodes.Bad; + if (!RightStatusCode(previous)) + previous = null; + double total = 0.0; + foreach (DataValue v in bucket.Values) + { + if (previous != null) + total += (v.SourceTimestamp - previous.SourceTimestamp).TotalMilliseconds; + if (RightStatusCode(v)) + previous = v; + else + previous = null; + } + if (previous != null) + total += (bucket.To - previous.SourceTimestamp).TotalMilliseconds; + retval.Value = total; + code.AggregateBits = AggregateBits.Calculated; + if (bucket.Incomplete) code.AggregateBits |= AggregateBits.Partial; + retval.StatusCode = code; + return retval; + } + + /// + /// Updates the bounding values for the time slice. + /// + public override void UpdateBoundingValues(TimeSlice bucket, AggregateState state) + { + BoundingValue EarlyBound = bucket.EarlyBound; + BoundingValue LateBound = bucket.LateBound; + if (bucket.ExactMatch(state.LatestTimestamp)) + { + EarlyBound.RawPoint = state.LatePoint == null ? state.EarlyPoint : state.LatePoint; + EarlyBound.DerivationType = BoundingValueType.QualityRaw; + } + else + { + if (EarlyBound.DerivationType != BoundingValueType.QualityRaw) + { + if (EarlyBound.EarlyPoint == null) + { + if ((state.EarlyPoint != null) && (state.EarlyPoint.SourceTimestamp < bucket.From)) + { + EarlyBound.EarlyPoint = state.EarlyPoint; + } + } + if (EarlyBound.LatePoint == null) + { + if ((state.LatePoint != null) && (state.LatePoint.SourceTimestamp >= bucket.From)) + { + EarlyBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < EarlyBound.Timestamp) + EarlyBound.CurrentBadPoints.Add(dv); + EarlyBound.DerivationType = BoundingValueType.QualityInterpolation; + } + } + } + if (state.HasTerminated && (state.LatePoint == null)) + { + EarlyBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < EarlyBound.Timestamp) + EarlyBound.CurrentBadPoints.Add(dv); + EarlyBound.DerivationType = BoundingValueType.QualityExtrapolation; + } + } + + if (bucket.EndMatch(state.LatestTimestamp)) + { + LateBound.RawPoint = state.LatePoint == null ? state.EarlyPoint : state.LatePoint; + LateBound.DerivationType = BoundingValueType.QualityRaw; + } + else + { + if (LateBound.DerivationType != BoundingValueType.QualityRaw) + { + if ((state.EarlyPoint != null) && (state.EarlyPoint.SourceTimestamp < bucket.To)) + LateBound.EarlyPoint = state.EarlyPoint; + if (LateBound.LatePoint == null) + { + if ((state.LatePoint != null) && (state.LatePoint.SourceTimestamp >= bucket.To)) + { + LateBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < LateBound.Timestamp) + LateBound.CurrentBadPoints.Add(dv); + LateBound.DerivationType = BoundingValueType.QualityInterpolation; + } + } + } + if (state.HasTerminated && (state.LatePoint == null)) + { + LateBound.CurrentBadPoints = new List(); + foreach (DataValue dv in state.CurrentBadPoints) + if (dv.SourceTimestamp < LateBound.Timestamp) + LateBound.CurrentBadPoints.Add(dv); + LateBound.DerivationType = BoundingValueType.QualityExtrapolation; + } + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateCursor.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateCursor.cs new file mode 100644 index 00000000..f2867691 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateCursor.cs @@ -0,0 +1,236 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; +using System.Text; + +namespace Opc.Ua.Aggregates +{ + /// + /// A snapshot of a structured window over a stream of data to be aggregated + /// + public class AggregateCursor + { + /// + /// A good data point later in time than the processed point(s) we want to compute. + /// It could be used as one bounding value in a sloped interpolation. or as the only + /// value needed for stepped interpolation. EarlyPoint and LatePoint may also be used + /// to provide stepped extrapolation. If both exist, they may be used for sloped + /// extrapolation + /// + public DataValue LatePoint { get; set; } + + /// + /// A good data point earlier in time than the processed point(s) we want to compute. + /// It could be used as one bounding value in a sloped interpolation. or as the only + /// value needed for stepped interpolation. EarlyPoint and LatePoint may also be used + /// to provide stepped extrapolation. If both exist, they may be used for sloped + /// extrapolation + /// + public DataValue EarlyPoint { get; set; } + + /// + /// The most recently superceded value of EarlyPoint. This is therefore a good data point. + /// It can be used for sloped extrapolation with EarlyPoint in the case where no good + /// value exists for LatePoint. + /// + public DataValue PriorPoint { get; set; } + + /// + /// A collection of all bad points received since EarlyPoint. This is required to + /// compute the status of interpolated and extrapolated points that use EarlyPoint as + /// one bounding value. + /// + public List CurrentBadPoints { get; set; } + + /// + /// A collection of all bad points received between PriorPoint and EarlyPoint. This + /// is required to compute the status of values extrapolated using both PriorPoint and + /// EarlyPoint. + /// + public List PriorBadPoints { get; set; } + } + + /// + /// Represents a snapshot or window onto a stream of raw data, presenting an interface helpful to aggregation methods + /// + public class AggregateState : AggregateCursor + { + /// + /// Timestamp of the latest raw data point to be input. Note: this is not the most recent + /// timestamp value that has been input, it is the timestamp of the raw data point most + /// recently handled. + /// + public DateTime LatestTimestamp { get; set; } + + /// + /// StatusCode of the latest raw data point to be input. Note: this is not the most recent + /// StatusCode value that has been input, it is the StatusCode of the raw data point most + /// recently handled. + /// + public StatusCode LatestStatus { get; set; } + + /// + /// Indicates that no more data will be provided, regardless of whether we have enough + /// to calculate good values for all of the remaining aggregation intervals + /// + public bool HasTerminated { get; set; } + + /// + /// Provides contextual details of the aggregation + /// + private IAggregationContext AggregationContext; + + /// + /// Something to call back on when we are ready to produce processed data points + /// + private IAggregationActor AggregationActor; + + /// + /// Creates a new instance. + /// > + public AggregateState(IAggregationContext context, IAggregationActor actor) + { + AggregationContext = context; + AggregationActor = actor; + CurrentBadPoints = new List(); + PriorBadPoints = new List(); + } + + /// + /// Use the TreatUncertainAsBad directive to determine whether a raw data point is a + /// good value. + /// + /// + /// + public bool RawValueIsGood(DataValue value) + { + if (AggregationContext.TreatUncertainAsBad) + return StatusCode.IsGood(value.StatusCode); + else + return !StatusCode.IsBad(value.StatusCode); + } + + /// + /// Returns a -1 if we are not yet far enough into the stream of raw data points to + /// be in the time range of the aggregation. Once we are in the time range, the return + /// value will be 0. After we have left the time range, the return value will be 1. + /// + /// + /// + private int RawValueInWindow(DataValue value) + { + int retval = -1; + if (AggregationContext.IsReverseAggregation) + { + if (value.SourceTimestamp <= AggregationContext.EndTime) retval = 0; + if (value.SourceTimestamp <= AggregationContext.StartTime) retval = 1; + } + else + { + if (value.SourceTimestamp >= AggregationContext.StartTime) retval = 0; + if (value.SourceTimestamp >= AggregationContext.EndTime) retval = 1; + } + return retval; + } + + /// + /// Accept one raw data value. + /// + /// + public void AddRawData(DataValue rawData) + { + if (rawData == null) throw new ArgumentException("Attempted to add null value instead of valid DataValue"); + LatestTimestamp = rawData.SourceTimestamp; + LatestStatus = rawData.StatusCode; + int relevance = RawValueInWindow(rawData); + if (RawValueIsGood(rawData)) + { + switch (relevance) + { + case -1: + PriorPoint = EarlyPoint; + PriorBadPoints = CurrentBadPoints; + EarlyPoint = rawData; + CurrentBadPoints = new List(); + break; + case 0: + if (EarlyPoint == null) + { + PriorBadPoints = CurrentBadPoints; + EarlyPoint = rawData; + CurrentBadPoints = new List(); + AggregationActor.UpdateProcessedData(rawData, this); + } + else + { + LatePoint = rawData; + AggregationActor.UpdateProcessedData(rawData, this); + PriorPoint = EarlyPoint; + PriorBadPoints = CurrentBadPoints; + EarlyPoint = rawData; + LatePoint = null; + CurrentBadPoints = new List(); + } + break; + case 1: + if (LatePoint == null) + LatePoint = rawData; + AggregationActor.UpdateProcessedData(rawData, this); + break; + default: + break; + } + } + else + { + if (LatePoint == null) + { + CurrentBadPoints.Add(rawData); + if (relevance >= 0) + AggregationActor.UpdateProcessedData(rawData, this); + } + } + } + + /// + /// Call once to indicate that the end of the sequence of raw data points has been + /// reached. + /// + public void EndOfData() + { + HasTerminated = true; + LatestTimestamp = DateTime.MaxValue; + LatestStatus = StatusCodes.GoodNoData; + AggregationActor.UpdateProcessedData(null, this); + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateManager.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateManager.cs new file mode 100644 index 00000000..ee96f33d --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/AggregateManager.cs @@ -0,0 +1,251 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Security.Principal; + +namespace Opc.Ua.Aggregates +{ + public class IServerInternal + { + } + + /// + /// An object that manages aggregate factories supported by the server. + /// + public class AggregateManager : IDisposable + { + #region Constructors + /// + /// Initilizes the manager. + /// + public AggregateManager(IServerInternal server) + { + m_server = server; + m_factories = new Dictionary(); + m_minimumProcessingInterval = 1000; + } + #endregion + + #region IDisposable Members + /// + /// The finializer implementation. + /// + ~AggregateManager() + { + Dispose(false); + } + + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_requestTimer")] + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // TBD + } + } + #endregion + + #region Public Members + /// + /// Checks if the aggregate is supported by the server. + /// + /// The id of the aggregate function. + /// True if the aggregate is supported. + public bool IsSupported(NodeId aggregateId) + { + if (NodeId.IsNull(aggregateId)) + { + return false; + } + + lock (m_lock) + { + return m_factories.ContainsKey(aggregateId); + } + } + + /// + /// The minimum processing interval for any aggregate calculation. + /// + public double MinimumProcessingInterval + { + get + { + lock (m_lock) + { + return m_minimumProcessingInterval; + } + } + + set + { + lock (m_lock) + { + m_minimumProcessingInterval = value; + } + } + } + + /// + /// Returns the default configuration for the specified variable id. + /// + /// The id of history data node. + /// The configuration. + public AggregateConfiguration GetDefaultConfiguration(NodeId variableId) + { + lock (m_lock) + { + if (m_defaultConfiguration == null) + { + m_defaultConfiguration = new AggregateConfiguration(); + m_defaultConfiguration.PercentDataBad = 0; + m_defaultConfiguration.PercentDataGood = 100; + m_defaultConfiguration.TreatUncertainAsBad = false; + m_defaultConfiguration.UseSlopedExtrapolation = false; + } + + return m_defaultConfiguration; + } + } + + /// + /// Sets the default aggregate configuration. + /// + /// The default aggregate configuration.. + public void SetDefaultConfiguration(AggregateConfiguration configuration) + { + lock (m_lock) + { + m_defaultConfiguration = configuration; + } + } + + /// + /// Creates a new aggregate calculator. + /// + /// The id of the aggregate function. + /// When to start processing. + /// When to stop processing. + /// The processing interval. + /// The configuaration to use. + /// + public IAggregateCalculator CreateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + AggregateConfiguration configuration) + { + if (NodeId.IsNull(aggregateId)) + { + return null; + } + + AggregatorFactory factory = null; + + lock (m_lock) + { + if (!m_factories.TryGetValue(aggregateId, out factory)) + { + return null; + } + } + + AggregateCalculatorImpl calculator = factory(); + + if (calculator == null) + { + return null; + } + + calculator.StartTime = startTime; + calculator.EndTime = endTime; + calculator.ProcessingInterval = processingInterval; + calculator.Configuration = configuration; + calculator.SteppedVariable = configuration.UseSlopedExtrapolation; + + return calculator; + } + + /// + /// Registers an aggregate factory. + /// + /// The id of the aggregate function. + /// The id of the aggregate name. + /// The factory used to create calculators. + public void RegisterFactory(NodeId aggregateId, string aggregateName, AggregatorFactory factory) + { + lock (m_lock) + { + m_factories[aggregateId] = factory; + } + + } + + /// + /// Unregisters an aggregate factory. + /// + /// The id of the aggregate function. + public void RegisterFactory(NodeId aggregateId) + { + lock (m_lock) + { + m_factories.Remove(aggregateId); + } + } + #endregion + + #region Private Methods + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private AggregateConfiguration m_defaultConfiguration; + private Dictionary m_factories; + private double m_minimumProcessingInterval; + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/Aggregators.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/Aggregators.cs new file mode 100644 index 00000000..9e3c8778 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/Aggregators.cs @@ -0,0 +1,52 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; + +namespace Opc.Ua.Aggregates +{ + /// + /// Creates a new instance of an aggregate factory. + /// + public delegate AggregateCalculatorImpl AggregatorFactory(); + + /// + /// The set of built-in aggregate factories. + /// + public static class Aggregators + { + /// + /// The default interpolative aggregate factory. + /// + public static AggregateCalculatorImpl InterpolativeFactory() { return new InterpolativeAggregate(); } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/BoundingValue.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/BoundingValue.cs new file mode 100644 index 00000000..6908b03a --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/BoundingValue.cs @@ -0,0 +1,253 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; +using System.Text; + +namespace Opc.Ua.Aggregates +{ + /// + /// The bounding value for a timeslice. + /// + public class BoundingValue : AggregateCursor + { + #region Constructors + #endregion + + #region Public Members + /// + /// Indicates how the bounding value was obtained. + /// + public BoundingValueType DerivationType { get; set; } + + /// + /// Timestamp of the boundary + /// + public DateTime Timestamp { get; set; } + + /// + /// A good data point coincident in time to the bounding value we want to compute. + /// + public DataValue RawPoint { get; set; } + + /// + /// The value for the bound. + /// + public DataValue Value + { + get + { + if (_value != null) + { + return _value; + } + + StatusCode code = StatusCodes.Good; + + switch (DerivationType) + { + case BoundingValueType.Raw: + if (RawPoint != null) + { + _value = new DataValue(RawPoint); + _value.ServerTimestamp = DateTime.UtcNow; + code.AggregateBits = AggregateBits.Raw; + _value.StatusCode = code; + } + break; + case BoundingValueType.QualityRaw: + if (RawPoint != null) + { + _value = new DataValue(); + _value.Value = RawPoint.StatusCode; + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code.AggregateBits = AggregateBits.Raw; + _value.StatusCode = code; + } + break; + case BoundingValueType.SlopedExtrapolation: + if ((PriorPoint != null) && (EarlyPoint != null)) + { + _value = new DataValue(); + _value.Value = ProjectedValue(PriorPoint, EarlyPoint, Timestamp); + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code = StatusCodes.UncertainDataSubNormal; + code.AggregateBits = AggregateBits.Interpolated; + _value.StatusCode = code; + } + break; + case BoundingValueType.SlopedInterpolation: + if ((EarlyPoint != null) && (LatePoint != null)) + { + _value = new DataValue(EarlyPoint); + _value.Value = ProjectedValue(EarlyPoint, LatePoint, Timestamp); + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code = (CurrentBadPoints.Count > 0) ? StatusCodes.UncertainDataSubNormal : StatusCodes.Good; + code.AggregateBits = AggregateBits.Interpolated; + _value.StatusCode = code; + } + break; + case BoundingValueType.SteppedExtrapolation: + if (EarlyPoint != null) + { + _value = new DataValue(EarlyPoint); + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code = StatusCodes.UncertainDataSubNormal; + code.AggregateBits = AggregateBits.Interpolated; + _value.StatusCode = code; + } + break; + case BoundingValueType.SteppedInterpolation: + if (EarlyPoint != null) + { + _value = new DataValue(EarlyPoint); + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code = (CurrentBadPoints.Count > 0) ? StatusCodes.UncertainDataSubNormal : StatusCodes.Good; + code.AggregateBits = AggregateBits.Interpolated; + _value.StatusCode = code; + } + break; + case BoundingValueType.QualityExtrapolation: + if (EarlyPoint != null) + { + _value = new DataValue(); + DataValue valueToUse = EarlyPoint; + foreach (DataValue dv in CurrentBadPoints) + if ((dv.SourceTimestamp > valueToUse.SourceTimestamp) && (dv.SourceTimestamp < Timestamp)) + valueToUse = dv; + _value.Value = valueToUse.StatusCode; + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code = StatusCodes.UncertainDataSubNormal; + code.AggregateBits = AggregateBits.Interpolated; + _value.StatusCode = code; + } + break; + case BoundingValueType.QualityInterpolation: + if (EarlyPoint != null) + { + _value = new DataValue(); + DataValue valueToUse = EarlyPoint; + foreach (DataValue dv in CurrentBadPoints) + if ((dv.SourceTimestamp > valueToUse.SourceTimestamp) && (dv.SourceTimestamp < Timestamp)) + valueToUse = dv; + _value.Value = valueToUse.StatusCode; + _value.SourceTimestamp = Timestamp; + _value.ServerTimestamp = DateTime.UtcNow; + code = StatusCodes.Good; + code.AggregateBits = AggregateBits.Interpolated; + _value.StatusCode = code; + } + break; + case BoundingValueType.None: + default: + break; + } + + return _value; + } + } + #endregion + + #region Private Methods + /// + /// Projects the value to the specified time using the two points. + /// + private double ProjectedValue(DataValue p1, DataValue p2, DateTime time) + { + double ve = Convert.ToDouble(p1.Value, CultureInfo.InvariantCulture); + double vl = Convert.ToDouble(p2.Value, CultureInfo.InvariantCulture); + double fraction = (time - p1.SourceTimestamp).TotalMilliseconds/(p2.SourceTimestamp - p1.SourceTimestamp).TotalMilliseconds; + return ve + (fraction * (vl - ve)); + } + #endregion + + #region Private Fields + private DataValue _value = null; + #endregion + } + + /// + /// The possible types of bounding values. + /// + public enum BoundingValueType + { + /// + /// No bounding value. + /// + None, + + /// + /// Derived from the raw value. + /// + Raw, + + /// + /// Derived from the raw value using the quality of the raw value. + /// + QualityRaw, + + /// + /// Calculated with stepped interpolation. + /// + SteppedInterpolation, + + /// + /// Calculated with sloped interpolation. + /// + SlopedInterpolation, + + /// + /// A value calculated with stepped interpolation using the quality of the closest raw value. + /// + QualityInterpolation, + + /// + /// Calculated with stepped extrapolation. + /// + SteppedExtrapolation, + + /// + /// Calculated with sloped extrapolation. + /// + SlopedExtrapolation, + + /// + /// A value calculated with stepped extrapolation using the quality of the closest raw value. + /// + QualityExtrapolation + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/Experiment.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/Experiment.cs new file mode 100644 index 00000000..875750b0 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/Experiment.cs @@ -0,0 +1,438 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua; + +namespace Quickstarts.ReferenceServer +{ + /// + /// Calculates the value of an aggregate. + /// + public class AggregateCalculator2 + { + /// + /// Initializes the calculation stream. + /// + /// The start time. + /// The end time. + /// The processing interval. + /// The aggregate configuration. + public void Initialize( + DateTime startTime, + DateTime endTime, + double processingInterval, + AggregateConfiguration configuration) + { + m_startTime = startTime; + m_endTime = endTime; + m_configuration = configuration; + m_processingInterval = processingInterval; + m_timeFlowsBackward = (endTime < startTime); + m_values = new LinkedList(); + m_lastRawTimestamp = (m_timeFlowsBackward) ? DateTime.MaxValue : DateTime.MinValue; + + TimeSlice slice = new TimeSlice(); + slice.StartTime = startTime; + slice.EndTime = slice.StartTime.AddMilliseconds((m_timeFlowsBackward) ? -m_processingInterval : m_processingInterval); + slice.EarlyBound = null; + slice.LateBound = null; + slice.Complete = false; + m_nextSlice = slice; + } + + /// + /// Pushes the next raw value into the stream. + /// + /// The data value to append to the stream. + /// True if successful, false if the source timestamp has been superceeded by values already in the stream. + public bool PushRawValue(DataValue value) + { + if (value == null) + { + return false; + } + + if (CompareTimestamps(value.SourceTimestamp, m_lastRawTimestamp) < 0) + { + return false; + } + + LinkedListNode node = m_values.AddLast(value); + m_lastRawTimestamp = value.SourceTimestamp; + + if (IsGood(value)) + { + if (CompareTimestamps(m_lastRawTimestamp, m_nextSlice.StartTime) <= 0) + { + m_nextSlice.EarlyBound = node; + } + + if (CompareTimestamps(m_lastRawTimestamp, m_nextSlice.EndTime) >= 0) + { + m_nextSlice.LateBound = node; + m_nextSlice.Complete = true; + } + } + + return true; + } + + /// + /// Returns the next processed value. + /// + /// If true a partial interval should be processed. + /// The processed value. Null if nothing available and returnPartial is false. + public DataValue GetProcessedValue(bool returnPartial) + { + // do nothing if slice not complete and partial values not requested. + if (!m_nextSlice.Complete) + { + if (CompareTimestamps(m_endTime, m_nextSlice.EndTime) > 0) + { + if (!returnPartial) + { + return null; + } + } + } + + // check for end. + if (CompareTimestamps(m_endTime, m_nextSlice.StartTime) <= 0) + { + return null; + } + + // compute the value. + DataValue value = ComputeValue(m_nextSlice); + + TimeSlice slice = new TimeSlice(); + slice.StartTime = m_nextSlice.EndTime; + slice.EndTime = slice.StartTime.AddMilliseconds((m_timeFlowsBackward) ? -m_processingInterval : m_processingInterval); + slice.EarlyBound = FindEarlyBound(slice.StartTime); + slice.LateBound = FindLateBound(slice.EarlyBound, slice.EndTime); + slice.Complete = slice.LateBound != null; + + m_nextSlice = slice; + + // remove all data prior to the early bound. + if (slice.EarlyBound != null) + { + LinkedListNode ii = slice.EarlyBound.Previous; + + while (ii != null) + { + LinkedListNode next = ii.Previous; + m_values.Remove(ii); + ii = next; + } + } + + return value; + } + + /// + /// Interpolates the value at the specified timestamp. + /// + /// The timestamp to use, + /// The start position. + /// The interpolated value. + private DataValue Interpolate(DateTime timestamp, LinkedListNode start) + { + if (start == null) + { + start = m_values.First; + } + + if (start == null) + { + return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp); + } + + LinkedListNode firstBound = null; + LinkedListNode lastBound = null; + bool firstBoundBad = false; + bool lastBoundBad = false; + + for (LinkedListNode ii = start; ii != null; ii = ii.Next) + { + int difference = CompareTimestamps(ii.Value.SourceTimestamp, timestamp); + + // check for an exact match. + if (difference == 0) + { + if (IsGood(ii.Value)) + { + return ii.Value; + } + } + + // find the first good value before the timestamp. + if (difference <= 0) + { + if (IsGood(ii.Value)) + { + firstBound = ii; + } + else + { + firstBoundBad = true; + } + } + + // find the first good value after the timestamp. + if (difference >= 0) + { + if (IsGood(ii.Value)) + { + lastBound = ii; + break; + } + else + { + lastBoundBad = true; + } + } + } + + // check if first bound found. + if (firstBound == null) + { + // can't extrapolate backwards in time. + if (!m_timeFlowsBackward) + { + return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp); + } + } + + // check if last bound found. + if (lastBound == null) + { + // can't extrapolate backwards in time. + if (m_timeFlowsBackward) + { + return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp); + } + } + + // use stepped interpolation/extrapolation if a bound is missing. + if (!m_configuration.UseSlopedExtrapolation || lastBound == null || firstBound == null) + { + if (m_timeFlowsBackward) + { + StatusCode statusCode = (lastBoundBad) ? StatusCodes.UncertainDataSubNormal : StatusCodes.Good; + statusCode = statusCode.SetAggregateBits(AggregateBits.Interpolated); + return new DataValue(lastBound.Value.WrappedValue, statusCode, timestamp, timestamp); + } + else + { + StatusCode statusCode = (firstBoundBad) ? StatusCodes.UncertainDataSubNormal : StatusCodes.Good; + statusCode = statusCode.SetAggregateBits(AggregateBits.Interpolated); + return new DataValue(firstBound.Value.WrappedValue, statusCode, timestamp, timestamp); + } + } + + // calculate sloped interpolation. + else + { + DataValue dataValue = new DataValue(); + dataValue.SourceTimestamp = timestamp; + dataValue.ServerTimestamp = timestamp; + + try + { + // convert to doubles. + TypeInfo sourceType = firstBound.Value.WrappedValue.TypeInfo; + double firstValue = (double)TypeInfo.Cast(firstBound.Value.Value, sourceType, BuiltInType.Double); + double lastValue = (double)TypeInfo.Cast(lastBound.Value.Value, lastBound.Value.WrappedValue.TypeInfo, BuiltInType.Double); + + // do interpolation. + double range = (lastBound.Value.SourceTimestamp - firstBound.Value.SourceTimestamp).TotalMilliseconds; + double slope = (lastValue - firstValue) / range; + double doubleValue = slope * (timestamp - firstBound.Value.SourceTimestamp).TotalMilliseconds + firstValue; + + // convert back to original type. + object value = TypeInfo.Cast(doubleValue, TypeInfo.Scalars.Double, sourceType.BuiltInType); + dataValue.WrappedValue = new Variant(value, sourceType); + } + catch (Exception) + { + // handle data conversion error. + return new DataValue(Variant.Null, StatusCodes.BadTypeMismatch, timestamp, timestamp); + } + + // set the aggregate bits as required. + StatusCode statusCode = (firstBoundBad || lastBoundBad) ? StatusCodes.UncertainDataSubNormal : StatusCodes.Good; + dataValue.StatusCode = statusCode.SetAggregateBits(AggregateBits.Interpolated); + return dataValue; + } + } + + /// + /// Computes the value for the timeslice. + /// + /// The time slice to use for the computation. + /// The value for the time slice. + protected DataValue ComputeValue(TimeSlice slice) + { + return Interpolate(slice.StartTime, slice.EarlyBound); + } + + /// + /// Finds the early bound for the timestamp. + /// + /// The timestamp to search. + /// The first good value that preceeds the timestamp. + private LinkedListNode FindEarlyBound(DateTime timestamp) + { + for (LinkedListNode ii = m_values.Last; ii != null; ii = ii.Previous) + { + if (IsGood(ii.Value)) + { + if (CompareTimestamps(ii.Value.SourceTimestamp, timestamp) <= 0) + { + return ii; + } + } + } + + return null; + } + + /// + /// Finds the late bound for the timestamp. + /// + /// The starting point for the search. + /// The timestamp to search. + /// The first good value that follows the timestamp. + private LinkedListNode FindLateBound(LinkedListNode start, DateTime timestamp) + { + if (start == null) + { + start = m_values.First; + } + + if (start == null) + { + return null; + } + + for (LinkedListNode ii = start; ii != null; ii = ii.Next) + { + if (IsGood(ii.Value)) + { + if (CompareTimestamps(ii.Value.SourceTimestamp, timestamp) >= 0) + { + return ii; + } + } + } + + return null; + } + + /// + /// Detremines the relative position of two timestamps in the stream. + /// + /// The first timestamp. + /// The second timestamp. + /// + /// Returns less than zero if timestamp1 preceeds timestamp2 + /// Returns greater than zero if timestamp2 preceeds timestamp1 + /// Returns zero if timestamp1 equals timestamp2 + /// + public int CompareTimestamps(DateTime timestamp1, DateTime timestamp2) + { + int difference = timestamp1.CompareTo(timestamp2); + + if (difference == 0) + { + return 0; + } + + if (m_timeFlowsBackward) + { + return -difference; + + } + + return difference; + } + + /// + /// Checks if the value is good according to the configuration rules. + /// + /// The value to test. + /// True if the value is good. + public bool IsGood(DataValue value) + { + if (value == null) + { + return false; + } + + if (m_configuration.TreatUncertainAsBad) + { + if (StatusCode.IsNotGood(value.StatusCode)) + { + return false; + } + } + else + { + if (StatusCode.IsBad(value.StatusCode)) + { + return false; + } + } + + return true; + } + + protected class TimeSlice + { + public DateTime StartTime { get; set; } + public DateTime EndTime { get; set; } + public LinkedListNode EarlyBound; + public LinkedListNode LateBound; + public bool Complete { get; set; } + } + + private TimeSlice m_nextSlice; + private AggregateConfiguration m_configuration; + private DateTime m_lastRawTimestamp; + private double m_processingInterval; + private bool m_timeFlowsBackward; + private LinkedList m_values; + private DateTime m_startTime; + private DateTime m_endTime; + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/InterpolativeAggregate.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/InterpolativeAggregate.cs new file mode 100644 index 00000000..19afe155 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/InterpolativeAggregate.cs @@ -0,0 +1,75 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; + +namespace Opc.Ua.Aggregates +{ + /// + /// Calculates interpolated values. + /// + /// + /// To correctly get the interpolated value, the raw data passed to this aggregator needs to have "GOOD" boundary values. That means, it's + /// the user responsibility to find out a good value before/after the period of interest if the bounding values of that period are not good. + /// + public class InterpolativeAggregate : FloatInterpolatingCalculator + { + /// + /// Updates the bounding values. + /// + public override void UpdateBoundingValues(TimeSlice bucket, AggregateState state) + { + base.UpdateBoundingValues(bucket, state); + UpdatePriorPoint(bucket.EarlyBound, state); + } + + /// + /// Updates the value for the time slice. + /// + public override DataValue Compute(IAggregationContext context, TimeSlice bucket, AggregateState state) + { + DataValue retval = new DataValue { SourceTimestamp = bucket.From }; + StatusCode code = StatusCodes.BadNoData; + DataValue boundValue = context.IsReverseAggregation ? bucket.LateBound.Value : bucket.EarlyBound.Value; + if (boundValue != null) + { + code = bucket.EarlyBound.Value.StatusCode.Code; + code.AggregateBits = bucket.EarlyBound.Value.StatusCode.AggregateBits; + retval.Value = Convert.ToDouble(bucket.EarlyBound.Value.Value, CultureInfo.InvariantCulture); + } + if (bucket.Incomplete) code.AggregateBits |= AggregateBits.Partial; + retval.StatusCode = code; + return retval; + } + } + +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/TimeSlice.cs b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/TimeSlice.cs new file mode 100644 index 00000000..773ba18f --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Aggregates/TimeSlice.cs @@ -0,0 +1,334 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Aggregates +{ + /// + /// Represents one aggregation interval within an aggregation query. + /// + public abstract class TimeSlice + { + /// + /// Start date of the time slice, which may be later than the end date. + /// + public DateTime From { get; set; } + + /// + /// End date of the time slice, which may be earlier than the start date. + /// + public DateTime To { get; set; } + + /// + /// Indicates that the timeslice is not as long as requested because the + /// EndTime of the aggregation query occurred. + /// + public bool Incomplete { get; set; } + + /// + /// Enumerator over the raw points that fall in this TimeSlice. + /// + public IEnumerable Values + { + get { return Accumulator; } + } + + /// + /// Collection of raw points that fall in this TimeSlice. + /// + protected List Accumulator = new List(); + + /// + /// Value and provenance of a value at the earliest time of this slice + /// + public BoundingValue EarlyBound { get; set; } + + /// + /// Value and provenance of a value at the latest time of this slice + /// + public BoundingValue LateBound { get; set; } + + /// + /// Converts the floating-point representation of the millisecond interval into a count + /// of 100-nanosecond ticks. + /// + /// + /// + protected static long MillisecondsToTicks(double millis) + { + return (long) Math.Round(millis * 10000); + } + + /// + /// Create the first (or only) TimeSlice in a sequence. + /// + /// + /// + /// + /// + public static TimeSlice CreateInitial(DateTime from, DateTime to, double inc) + { + TimeSlice retval = null; + bool incomplete = false; + DateTime later; + if (from > to) + { + later = from; + if (inc > 0.0) + { + long intMillis = MillisecondsToTicks(inc); + long totMillis = MillisecondsToTicks((from - to).TotalMilliseconds); + long remMillis = totMillis % intMillis; + later = (remMillis > 0) ? to + new TimeSpan(remMillis) : to + new TimeSpan(intMillis); + incomplete = (remMillis > 0); + } + retval = new BackwardTimeSlice + { + From = later, + To = to, + Incomplete = incomplete, + EarlyBound = new BoundingValue { Timestamp = to }, + LateBound = new BoundingValue { Timestamp = later } + }; + } + else if (to > from) + { + later = to; + if (inc > 0.0) + { + later = from + new TimeSpan(MillisecondsToTicks(inc)); + if (later > to) + { + later = to; + incomplete = true; + } + } + retval = new ForwardTimeSlice + { + From = from, + To = later, + Incomplete = incomplete, + EarlyBound = new BoundingValue { Timestamp = from }, + LateBound = new BoundingValue { Timestamp = later } + }; + } + //deliberately ignore (if from == to) + return retval; + } + + /// + /// For the given predecessor, create the next TimeSlice in the sequence. + /// + /// + /// + /// + /// + public static TimeSlice CreateNext(DateTime latest, double inc, TimeSlice predecessor) + { + return predecessor.CreateSuccessor(latest, inc); + } + + /// + /// Used to determine whether there is a raw data point whose time stamp exactly matches + /// the TimeSlice. If so, the processed data point may need to indicate that it is + /// a raw value. + /// + /// + /// + public bool ExactMatch(DateTime timestamp) + { + return timestamp.Equals(From); + } + + /// + /// Used to determine whether there is a raw data point whose time stamp exactly matches + /// the end of the TimeSlice. + /// + /// + /// + public bool EndMatch(DateTime timestamp) + { + return timestamp.Equals(To); + } + + /// + /// Tests to see whether a raw value can be added to this TimeSlice and adds it if so. + /// + /// + /// true if the data value was added + public bool AcceptValue(DataValue rawValue) + { + if (ContainsTime(rawValue.SourceTimestamp)) + { + Accumulator.Add(rawValue); + if (rawValue.StatusCode.Equals(StatusCodes.BadNoData)) + this.Incomplete = true; + return true; + } + else + { + return false; + } + } + + /// + /// Create the TimeSlice that immediately follows this one in time. + /// + /// + /// + /// + protected abstract TimeSlice CreateSuccessor(DateTime latest, double inc); + + /// + /// Tests whether a DateTime falls within the TimeSlice + /// + /// + /// true if the DateTime is within the TimeSlice + public abstract bool ContainsTime(DateTime time); + + /// + /// Used to determine whether we might be able to release a processed data point for + /// this TimeSlice, given the timestamp from the most recent raw data point. + /// + /// + /// + public abstract bool Releasable(DateTime timestamp); + } + + /// + /// A TimeSlice for forward motion through time. + /// + public class ForwardTimeSlice : TimeSlice + { + /// + /// Create the TimeSlice that immediately follows this one in time. + /// + /// + /// + /// + protected override TimeSlice CreateSuccessor(DateTime latest, double inc) + { + TimeSlice retval = null; + if (To < latest) + { + bool incomplete = false; + DateTime target = To + new TimeSpan(MillisecondsToTicks(inc)); + if (target > latest) + { + target = latest; + incomplete = true; + } + retval = new ForwardTimeSlice + { + From = this.To, + To = target, + Incomplete = incomplete, + EarlyBound = this.LateBound, + LateBound = new BoundingValue { Timestamp = target } + }; + } + return retval; + } + + /// + /// Tests whether a DateTime falls within the TimeSlice + /// + /// + /// true if the DateTime is within the TimeSlice + public override bool ContainsTime(DateTime time) + { + return ((time >= From) && (time < To)); + } + + /// + /// Used to determine whether we might be able to release a processed data point for + /// this TimeSlice, given the timestamp from the most recent raw data point. + /// + /// + /// + public override bool Releasable(DateTime timestamp) + { + return timestamp >= To; + } + } + + /// + /// A TimeSlice for backward motion through time. + /// + public class BackwardTimeSlice : TimeSlice + { + /// + /// Create the TimeSlice that immediately follows this one in time. + /// + /// + /// + /// + protected override TimeSlice CreateSuccessor(DateTime latest, double inc) + { + TimeSlice retval = null; + if (From < latest) + { + DateTime target = From + new TimeSpan(MillisecondsToTicks(inc)); + retval = new BackwardTimeSlice + { + From = target, + To = this.From, + Incomplete = false, + EarlyBound = this.LateBound, + LateBound = new BoundingValue { Timestamp = target } + }; + } + return retval; + } + + /// + /// Tests whether a DateTime falls within the TimeSlice + /// + /// + /// true if the DateTime is within the TimeSlice + public override bool ContainsTime(DateTime time) + { + return ((time <= From) && (time > To)); + } + + /// + /// Used to determine whether we might be able to release a processed data point for + /// this TimeSlice, given the timestamp from the most recent raw data point. + /// + /// + /// + public override bool Releasable(DateTime timestamp) + { + return timestamp > From; + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/App.config b/IOB-OPC-UA/Applications/ReferenceServer/App.config new file mode 100644 index 00000000..71a39cb8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/App.config @@ -0,0 +1,65 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + Quickstarts.ReferenceServer.Config.xml + + + + + + diff --git a/IOB-OPC-UA/Applications/ReferenceServer/App.ico b/IOB-OPC-UA/Applications/ReferenceServer/App.ico new file mode 100644 index 00000000..3c5602aa Binary files /dev/null and b/IOB-OPC-UA/Applications/ReferenceServer/App.ico differ diff --git a/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.Designer.cs b/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.Designer.cs new file mode 100644 index 00000000..11895637 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.Designer.cs @@ -0,0 +1,250 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Quickstarts.ReferenceServer +{ + partial class MonitoredItemEventLogDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.DataGridCTRL = new System.Windows.Forms.DataGridView(); + this.RefreshTimer = new System.Windows.Forms.Timer(this.components); + this.MenuBar = new System.Windows.Forms.MenuStrip(); + this.EventsMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Events_MonitorMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Events_ClearMI = new System.Windows.Forms.ToolStripMenuItem(); + this.Timestamp = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.EventType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.NodeId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Value = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StatusCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SamplingInterval = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.QueueSize = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Filter = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridCTRL)).BeginInit(); + this.MenuBar.SuspendLayout(); + this.SuspendLayout(); + // + // DataGridCTRL + // + this.DataGridCTRL.AllowUserToAddRows = false; + this.DataGridCTRL.AllowUserToDeleteRows = false; + this.DataGridCTRL.AllowUserToOrderColumns = true; + this.DataGridCTRL.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.DataGridCTRL.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.DataGridCTRL.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridCTRL.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Timestamp, + this.EventType, + this.Id, + this.NodeId, + this.Value, + this.StatusCode, + this.SamplingInterval, + this.QueueSize, + this.Filter}); + this.DataGridCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.DataGridCTRL.Location = new System.Drawing.Point(0, 24); + this.DataGridCTRL.Name = "DataGridCTRL"; + this.DataGridCTRL.ReadOnly = true; + this.DataGridCTRL.Size = new System.Drawing.Size(647, 281); + this.DataGridCTRL.TabIndex = 0; + // + // RefreshTimer + // + this.RefreshTimer.Interval = 5000; + this.RefreshTimer.Tick += new System.EventHandler(this.RefreshTimer_Tick); + // + // MenuBar + // + this.MenuBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.EventsMI}); + this.MenuBar.Location = new System.Drawing.Point(0, 0); + this.MenuBar.Name = "MenuBar"; + this.MenuBar.Size = new System.Drawing.Size(647, 24); + this.MenuBar.TabIndex = 1; + this.MenuBar.Text = "menuStrip1"; + // + // EventsMI + // + this.EventsMI.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Events_MonitorMI, + this.Events_ClearMI}); + this.EventsMI.Name = "EventsMI"; + this.EventsMI.Size = new System.Drawing.Size(53, 20); + this.EventsMI.Text = "Events"; + // + // Events_MonitorMI + // + this.Events_MonitorMI.Name = "Events_MonitorMI"; + this.Events_MonitorMI.Size = new System.Drawing.Size(117, 22); + this.Events_MonitorMI.Text = "Monitor"; + // + // Events_ClearMI + // + this.Events_ClearMI.Name = "Events_ClearMI"; + this.Events_ClearMI.Size = new System.Drawing.Size(117, 22); + this.Events_ClearMI.Text = "Clear"; + this.Events_ClearMI.Click += new System.EventHandler(this.Events_ClearMI_Click); + // + // Timestamp + // + this.Timestamp.DataPropertyName = "Timestamp"; + this.Timestamp.HeaderText = "Timestamp"; + this.Timestamp.Name = "Timestamp"; + this.Timestamp.ReadOnly = true; + this.Timestamp.Width = 83; + // + // EventType + // + this.EventType.DataPropertyName = "EventType"; + this.EventType.HeaderText = "EventType"; + this.EventType.Name = "EventType"; + this.EventType.ReadOnly = true; + this.EventType.Width = 84; + // + // Id + // + this.Id.DataPropertyName = "Id"; + this.Id.HeaderText = "Id"; + this.Id.Name = "Id"; + this.Id.ReadOnly = true; + this.Id.Width = 41; + // + // NodeId + // + this.NodeId.DataPropertyName = "NodeId"; + this.NodeId.HeaderText = "NodeId"; + this.NodeId.Name = "NodeId"; + this.NodeId.ReadOnly = true; + this.NodeId.Width = 67; + // + // Value + // + this.Value.DataPropertyName = "Value"; + this.Value.HeaderText = "Value"; + this.Value.Name = "Value"; + this.Value.ReadOnly = true; + this.Value.Width = 59; + // + // StatusCode + // + this.StatusCode.DataPropertyName = "StatusCode"; + this.StatusCode.HeaderText = "StatusCode"; + this.StatusCode.Name = "StatusCode"; + this.StatusCode.ReadOnly = true; + this.StatusCode.Width = 87; + // + // SamplingInterval + // + this.SamplingInterval.DataPropertyName = "SamplingInterval"; + this.SamplingInterval.HeaderText = "SamplingInterval"; + this.SamplingInterval.Name = "SamplingInterval"; + this.SamplingInterval.ReadOnly = true; + this.SamplingInterval.Width = 110; + // + // QueueSize + // + this.QueueSize.DataPropertyName = "QueueSize"; + this.QueueSize.HeaderText = "QueueSize"; + this.QueueSize.Name = "QueueSize"; + this.QueueSize.ReadOnly = true; + this.QueueSize.Width = 84; + // + // Filter + // + this.Filter.DataPropertyName = "Filter"; + this.Filter.HeaderText = "Filter"; + this.Filter.Name = "Filter"; + this.Filter.ReadOnly = true; + this.Filter.Width = 54; + // + // MonitoredItemEventLogDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(647, 305); + this.Controls.Add(this.DataGridCTRL); + this.Controls.Add(this.MenuBar); + this.MainMenuStrip = this.MenuBar; + this.Name = "MonitoredItemEventLogDlg"; + this.Text = "Monitored Item Event Log"; + ((System.ComponentModel.ISupportInitialize)(this.DataGridCTRL)).EndInit(); + this.MenuBar.ResumeLayout(false); + this.MenuBar.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView DataGridCTRL; + private System.Windows.Forms.Timer RefreshTimer; + private System.Windows.Forms.MenuStrip MenuBar; + private System.Windows.Forms.ToolStripMenuItem EventsMI; + private System.Windows.Forms.ToolStripMenuItem Events_MonitorMI; + private System.Windows.Forms.ToolStripMenuItem Events_ClearMI; + private System.Windows.Forms.DataGridViewTextBoxColumn Timestamp; + private System.Windows.Forms.DataGridViewTextBoxColumn EventType; + private System.Windows.Forms.DataGridViewTextBoxColumn Id; + private System.Windows.Forms.DataGridViewTextBoxColumn NodeId; + private System.Windows.Forms.DataGridViewTextBoxColumn Value; + private System.Windows.Forms.DataGridViewTextBoxColumn StatusCode; + private System.Windows.Forms.DataGridViewTextBoxColumn SamplingInterval; + private System.Windows.Forms.DataGridViewTextBoxColumn QueueSize; + private System.Windows.Forms.DataGridViewTextBoxColumn Filter; + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.cs b/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.cs new file mode 100644 index 00000000..11d82379 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.cs @@ -0,0 +1,85 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Opc.Ua.Server; + +namespace Quickstarts.ReferenceServer +{ + public partial class MonitoredItemEventLogDlg : Form + { + public MonitoredItemEventLogDlg() + { + InitializeComponent(); + DataGridCTRL.AutoGenerateColumns = false; + } + + public void Display() + { + ServerUtils.EventsEnabled = true; + RefreshTimer.Enabled = true; + Show(); + } + + DataSet m_dataset; + + private void RefreshTimer_Tick(object sender, EventArgs e) + { + int count = 0; + + if (m_dataset != null) + { + count = m_dataset.Tables[0].Rows.Count; + } + + m_dataset = ServerUtils.EmptyQueue(m_dataset); + + if (count != m_dataset.Tables[0].Rows.Count) + { + DataGridCTRL.DataSource = m_dataset.Tables[0]; + } + } + + private void Events_ClearMI_Click(object sender, EventArgs e) + { + if (m_dataset != null) + { + m_dataset.Tables[0].Rows.Clear(); + m_dataset.AcceptChanges(); + DataGridCTRL.DataSource = m_dataset.Tables[0]; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.resx b/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.resx new file mode 100644 index 00000000..f61acd65 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/MonitoredItemEventLogDlg.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + 140, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Namespaces.cs b/IOB-OPC-UA/Applications/ReferenceServer/Namespaces.cs new file mode 100644 index 00000000..02e136ed --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Namespaces.cs @@ -0,0 +1,46 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Quickstarts.ReferenceServer +{ + /// + /// Defines constants for namespaces used by the application. + /// + public static partial class Namespaces + { + /// + /// The namespace for the nodes provided by the server. + /// + public const string ReferenceApplications = "http://opcfoundation.org/Quickstarts/ReferenceApplications"; + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Program.cs b/IOB-OPC-UA/Applications/ReferenceServer/Program.cs new file mode 100644 index 00000000..3947f5ee --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Program.cs @@ -0,0 +1,105 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Windows.Forms; +using Opc.Ua; +using Opc.Ua.Configuration; +using Opc.Ua.Server.Controls; +using System.Threading.Tasks; +using Serilog; + +namespace Quickstarts.ReferenceServer +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // Initialize the user interface. + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); + ApplicationInstance application = new ApplicationInstance(); + application.ApplicationType = ApplicationType.Server; + application.ConfigSectionName = "Quickstarts.ReferenceServer"; + + try + { + // load the application configuration. + ApplicationConfiguration config = application.LoadApplicationConfiguration(false).Result; + + LoggerConfiguration loggerConfiguration = new LoggerConfiguration(); +#if DEBUG + loggerConfiguration.WriteTo.Debug(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Warning); +#endif + SerilogTraceLogger.Create(loggerConfiguration, config); + + // check the application certificate. + bool certOk = application.CheckApplicationInstanceCertificate(false, 0).Result; + if (!certOk) + { + throw new Exception("Application instance certificate invalid!"); + } + + // start the server. + application.Start(new ReferenceServer()).Wait(); + + // check whether the invalid certificates dialog should be displayed. + bool showCertificateValidationDialog = false; + ReferenceServerConfiguration refServerconfiguration = application.ApplicationConfiguration.ParseExtension(); + + if (refServerconfiguration != null) + { + showCertificateValidationDialog = refServerconfiguration.ShowCertificateValidationDialog; + } + + // run the application interactively. + Application.Run(new ServerForm(application, showCertificateValidationDialog)); + } + catch (Exception e) + { + ExceptionDlg.Show(application.ApplicationName, e); + } + } + } + + /// + /// The ReferenceServer namespace contains classes which implement a Quickstart Server. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Applications/ReferenceServer/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..742161b8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Properties/AssemblyInfo.cs @@ -0,0 +1,53 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Quickstart.ReferenceServer")] +[assembly: AssemblyDescription("Quickstart Reference Server")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OPC Foundation")] +[assembly: AssemblyProduct("OPC UA Quickstarts")] +[assembly: AssemblyCopyright("Copyright © 2020 OPC Foundation")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8da211e1-a366-4b8c-b05c-ce55bfaa9629")] + diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Properties/Resources.Designer.cs b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Resources.Designer.cs new file mode 100644 index 00000000..b0dc0abb --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// 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 Quickstarts.ReferenceServer.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", "4.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("Quickstarts.ReferenceServer.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 resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap OPCFoundation { + get { + object obj = ResourceManager.GetObject("OPCFoundation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Properties/Resources.resx b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Resources.resx new file mode 100644 index 00000000..b4d4393f --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Resources.resx @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\OPCFoundation.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Properties/Settings.Designer.cs b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Settings.Designer.cs new file mode 100644 index 00000000..f31a6b4f --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 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 Quickstarts.ReferenceServer.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.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; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Properties/Settings.settings b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Quickstarts.ReferenceServer.Config.xml b/IOB-OPC-UA/Applications/ReferenceServer/Quickstarts.ReferenceServer.Config.xml new file mode 100644 index 00000000..94841002 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Quickstarts.ReferenceServer.Config.xml @@ -0,0 +1,285 @@ + + + Quickstart Reference Server + urn:localhost:UA:Quickstarts:ReferenceServer + uri:opcfoundation.org:Quickstarts:ReferenceServer + Server_0 + + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\own + CN=Quickstart Reference Server, C=US, S=Arizona, O=OPC Foundation, DC=localhost + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\issuer + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\trusted + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\rejected + + + + false + + + false + true + 2048 + false + true + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\issuerUser + + + + + Directory + %CommonApplicationData%\OPC Foundation\pki\trustedUser + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + https://localhost:62540/Quickstarts/ReferenceServer + opc.tcp://localhost:62541/Quickstarts/ReferenceServer + + + + + + Sign_2 + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + None_1 + http://opcfoundation.org/UA/SecurityPolicy#None + + + SignAndEncrypt_3 + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + + Sign_2 + http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep + + + SignAndEncrypt_3 + http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep + + + Sign_2 + http://opcfoundation.org/UA/SecurityPolicy#Aes256_Sha256_RsaPss + + + SignAndEncrypt_3 + http://opcfoundation.org/UA/SecurityPolicy#Aes256_Sha256_RsaPss + + + Sign_2 + + + + SignAndEncrypt_3 + + + + + 5 + 100 + 2000 + + + + + + Anonymous_0 + http://opcfoundation.org/UA/SecurityPolicy#None + + + + + UserName_1 + + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + + + Certificate_2 + + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + true + 100 + 10000 + 3600000 + 10 + 10 + 100 + 600000 + 100 + 3600000 + 50 + 3600000 + 100 + 100 + 1000 + 1000 + + + 5 + 5 + 20 + + + 100 + 100 + 4 + + + 500 + 250 + 2 + + + 1000 + 500 + 20 + + + + + opc.tcp://localhost:4840 + + opc.tcp://localhost:4840 + DiscoveryServer_3 + + opc.tcp://localhost:4840 + + + SignAndEncrypt_3 + + + + + 30000 + Quickstarts.ReferenceServer.nodes.xml + 10000 + 20 + 100 + 10000 + + + + http://opcfoundation.org/UA-Profile/Server/StandardUA2017 + http://opcfoundation.org/UA-Profile/Server/DataAccess + http://opcfoundation.org/UA-Profile/Server/Methods + + + 5 + + DA + + + PFX + PEM + + 0 + false + + + + + + false + + + + + + Logs\Quickstarts.ReferenceServer.log.txt + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Quickstarts.ReferenceServer.exe.config b/IOB-OPC-UA/Applications/ReferenceServer/Quickstarts.ReferenceServer.exe.config new file mode 100644 index 00000000..ceb718b2 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Quickstarts.ReferenceServer.exe.config @@ -0,0 +1,73 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quickstarts.ReferenceServer.Config.xml + + + + diff --git a/IOB-OPC-UA/Applications/ReferenceServer/README.md b/IOB-OPC-UA/Applications/ReferenceServer/README.md new file mode 100644 index 00000000..e247fd41 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/README.md @@ -0,0 +1,59 @@ +# OPC Foundation UA .Net Standard Library Reference Server + +## Introduction +This OPC Server is designed to be the default OPC UA Server when opening the [OPC UA Compliance Test Tool](https://opcfoundation.org/developer-tools/certification-test-tools/opc-ua-compliance-test-tool-uactt/) and it uses an address-space that matches the design of the UACTT and the requirements for OPC UA compliance testing. + +It uses the OPC Foundation UA .NET Standard Library. Therefore it supports both the opc.tcp and https transports. There is a .Net 4.6 based server with UI and a .Net Standard 2.0 console version of the server which runs on any OS supporting [.NET Standard](https://docs.microsoft.com/en-us/dotnet/articles/standard). + +## How to build and run the Windows OPC UA Reference Server with UACTT +1. Open the solution **UA Reference.sln** with Visual Studio 2017. +2. Choose the project `Reference Server` in the Solution Explorer and set it with a right click as `Startup Project`. +3. Hit `F5` to build and execute the sample. + +## How to build and run the console OPC UA Reference Server on Windows, Linux and iOS +This section describes how to run the **ConsoleReferenceServer**. + +Please follow instructions in this [article](https://aka.ms/dotnetcoregs) to setup the dotnet command line environment for your platform. + +## Start the server +1. Open a command prompt. +2. Navigate to the folder **Applications/ConsoleReferenceServer**. +3. To run the server sample type `dotnet run --project NetCoreReferenceServer.csproj`. The server is now running and waiting for the connection of the UACTT. + +## UACTT test certificates +The reference server always rejects new client certificates and requires that the UACTT certificates are in appropriate folders. +- The console server certificates are stored in **%LocalApplicationData%/OPC Foundation/CertificateStores**. +- The Windows .Net 4.6 server stores the certificates in **%CommonApplicationData%\OPC Foundation\CertificateStores**. + - **%CommonApplicationData%** maps to the path set by the environment variable **ProgramData** on Windows. + - **%LocalApplicationData%** maps to a hidden location in the user home folder and depends on the target platform. + +### Certificate stores +Under **CertificateStores**, the following stores contain certificates under **certs**, CRLs under **crl** or private keys under **private**. +- **MachineDefault** contains the reference server public certificate and private key. +- **RejectedCertificates** contains the rejected client certificates. To trust a client certificate, copy the rejected certificate to the **UA Applications/certs** folder. +- **UA Applications** contains *trusted* client and CAs certificates and CRLs. +- **UA Certificate Authorities** contains CAs certificates and CRLs needed for validation. + +### Placing the UACTT certificates +Copy the certificates for testing with the UACTT to the following stores: +- **UA Applications/certs**: expired.der, notyetvalid.der, opcuactt.der, opcuactt_incorrectappuri.der, opcuactt_incorrectip.der, opcuactt_incorrectsign.der, opcuactt_revoked.der, opcuser.der, opcuser_incorrectsign.der, opcuser_revoked.der, opcuser-expired.der, opcuser-notyetvalid.der, opcuactt_ca.der +- **UA Applications/crl**: revocation_list_opcuactt_ca.crl + +## UACTT Testing +Download and install the [OPC UA Compliance Test Tool](https://opcfoundation.org/developer-tools/certification-test-tools/opc-ua-compliance-test-tool-uactt/). + +Note: Access to the UACTT is granted to OPC Foundation Corporate Members. + +### UACTT sample configuration +A sample configuration for the UACTT Version [1.03.340.380](https://opcfoundation.org/developer-tools/certification-test-tools/opc-ua-compliance-test-tool-uactt/) can be found in [UAReferenceServer.ctt.xml](../UAReferenceServer.ctt.xml). The reference server is tested against the **Standard UA Server** profile, the **Method Server Facet** and the **DataAccess Server Facet**. It is recommended to run the server as retail build with disabled logging, to avoid side effects due to timing artifacts when log entries are written to a disk drive. + +#### Finding the Address Space Configuration Code +- Project: Reference Server +- File: ReferenceNodeManager.cs +- Method: CreateAddressSpace + +#### Finding the UA Services +- Project: Opc.Ua.Server +- File: StandardServer.cs + + diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Reference Server.csproj b/IOB-OPC-UA/Applications/ReferenceServer/Reference Server.csproj new file mode 100644 index 00000000..1b8d009f --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/Reference Server.csproj @@ -0,0 +1,187 @@ + + + + Debug + AnyCPU + PackageReference + true + 9.0.30729 + 2.0 + {42EF4F25-29BF-4AB7-B403-8523694A3B36} + WinExe + Properties + Quickstarts.ReferenceServer + Quickstarts.ReferenceServer + v4.6.2 + 512 + App.ico + + + + + 3.5 + + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + false + + + Always + + + + + + + + + + + + + + + Form + + + MonitoredItemEventLogDlg.cs + + + + + + + + + + + + MonitoredItemEventLogDlg.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Designer + + + Always + + + Always + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + {92d98d3d-2a7d-4f4b-8c72-1a98908d0221} + Opc.Ua.Bindings.Https + + + {4569aaa2-710b-4e8b-a4c6-f917777814da} + Opc.Ua.Core + + + {80056988-44e7-4ef4-9f59-50bcf215cb03} + UA Server Controls + + + {de6b7d4f-e566-45cb-a876-086e5cd50fb0} + Opc.Ua.Configuration + + + {a2f587fd-5140-478b-8a0e-8417f8a38548} + Opc.Ua.Server + + + + + 2.10.0 + + + 2.0.0 + + + 4.1.0 + + + + win7-x64 + win7-x64 + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ReferenceServer/ReferenceNodeManager.cs b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceNodeManager.cs new file mode 100644 index 00000000..c4735033 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceNodeManager.cs @@ -0,0 +1,2737 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Xml; +using System.Threading; +using System.Numerics; +using Opc.Ua; +using Opc.Ua.Server; +using Range = Opc.Ua.Range; + +namespace Quickstarts.ReferenceServer +{ + /// + /// A node manager for a server that exposes several variables. + /// + public class ReferenceNodeManager : CustomNodeManager2 + { + #region Constructors + /// + /// Initializes the node manager. + /// + public ReferenceNodeManager(IServerInternal server, ApplicationConfiguration configuration) + : base(server, configuration, Namespaces.ReferenceApplications) + { + SystemContext.NodeIdFactory = this; + + // get the configuration for the node manager. + m_configuration = configuration.ParseExtension(); + + // use suitable defaults if no configuration exists. + if (m_configuration == null) + { + m_configuration = new ReferenceServerConfiguration(); + } + + m_dynamicNodes = new List(); + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + // TBD + } + } + #endregion + + #region INodeIdFactory Members + /// + /// Creates the NodeId for the specified node. + /// + public override NodeId New(ISystemContext context, NodeState node) + { + BaseInstanceState instance = node as BaseInstanceState; + + if (instance != null && instance.Parent != null) + { + string id = instance.Parent.NodeId.Identifier as string; + + if (id != null) + { + return new NodeId(id + "_" + instance.SymbolicName, instance.Parent.NodeId.NamespaceIndex); + } + } + + return node.NodeId; + } + #endregion + + #region Private Helper Functions + private static bool IsUnsignedAnalogType(BuiltInType builtInType) + { + if (builtInType == BuiltInType.Byte || + builtInType == BuiltInType.UInt16 || + builtInType == BuiltInType.UInt32 || + builtInType == BuiltInType.UInt64) + { + return true; + } + return false; + } + + private static bool IsAnalogType(BuiltInType builtInType) + { + switch (builtInType) + { + case BuiltInType.Byte: + case BuiltInType.UInt16: + case BuiltInType.UInt32: + case BuiltInType.UInt64: + case BuiltInType.SByte: + case BuiltInType.Int16: + case BuiltInType.Int32: + case BuiltInType.Int64: + case BuiltInType.Float: + case BuiltInType.Double: + return true; + } + return false; + } + + private static Opc.Ua.Range GetAnalogRange(BuiltInType builtInType) + { + switch (builtInType) + { + case BuiltInType.UInt16: + return new Range(System.UInt16.MaxValue, System.UInt16.MinValue); + case BuiltInType.UInt32: + return new Range(System.UInt32.MaxValue, System.UInt32.MinValue); + case BuiltInType.UInt64: + return new Range(System.UInt64.MaxValue, System.UInt64.MinValue); + case BuiltInType.SByte: + return new Range(System.SByte.MaxValue, System.SByte.MinValue); + case BuiltInType.Int16: + return new Range(System.Int16.MaxValue, System.Int16.MinValue); + case BuiltInType.Int32: + return new Range(System.Int32.MaxValue, System.Int32.MinValue); + case BuiltInType.Int64: + return new Range(System.Int64.MaxValue, System.Int64.MinValue); + case BuiltInType.Float: + return new Range(System.Single.MaxValue, System.Single.MinValue); + case BuiltInType.Double: + return new Range(System.Double.MaxValue, System.Double.MinValue); + case BuiltInType.Byte: + return new Range(System.Byte.MaxValue, System.Byte.MinValue); + default: + return new Range(System.SByte.MaxValue, System.SByte.MinValue); + } + } + #endregion + + #region INodeManager Members + /// + /// Does any initialization required before the address space can be used. + /// + /// + /// The externalReferences is an out parameter that allows the node manager to link to nodes + /// in other node managers. For example, the 'Objects' node is managed by the CoreNodeManager and + /// should have a reference to the root folder node(s) exposed by this node manager. + /// + public override void CreateAddressSpace(IDictionary> externalReferences) + { + lock (Lock) + { + IList references = null; + + if (!externalReferences.TryGetValue(ObjectIds.ObjectsFolder, out references)) + { + externalReferences[ObjectIds.ObjectsFolder] = references = new List(); + } + + FolderState root = CreateFolder(null, "CTT", "CTT"); + root.AddReference(ReferenceTypes.Organizes, true, ObjectIds.ObjectsFolder); + references.Add(new NodeStateReference(ReferenceTypes.Organizes, false, root.NodeId)); + root.EventNotifier = EventNotifiers.SubscribeToEvents; + AddRootNotifier(root); + + List variables = new List(); + + try + { + #region Scalar_Static + FolderState scalarFolder = CreateFolder(root, "Scalar", "Scalar"); + BaseDataVariableState scalarInstructions = CreateVariable(scalarFolder, "Scalar_Instructions", "Scalar_Instructions", DataTypeIds.String, ValueRanks.Scalar); + scalarInstructions.Value = "A library of Read/Write Variables of all supported data-types."; + variables.Add(scalarInstructions); + + FolderState staticFolder = CreateFolder(scalarFolder, "Scalar_Static", "Scalar_Static"); + const string scalarStatic = "Scalar_Static_"; + variables.Add(CreateVariable(staticFolder, scalarStatic + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "String", "String", DataTypeIds.String, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Time", "Time", DataTypeIds.Time, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar)); + + BaseDataVariableState decimalVariable = CreateVariable(staticFolder, scalarStatic + "Decimal", "Decimal", DataTypeIds.DecimalDataType, ValueRanks.Scalar); + // Set an arbitrary precision decimal value. + BigInteger largeInteger = BigInteger.Parse("1234567890123546789012345678901234567890123456789012345"); + DecimalDataType decimalValue = new DecimalDataType(); + decimalValue.Scale = 100; + decimalValue.Value = largeInteger.ToByteArray(); + decimalVariable.Value = decimalValue; + variables.Add(decimalVariable); + #endregion + + #region Scalar_Static_Arrays + FolderState arraysFolder = CreateFolder(staticFolder, "Scalar_Static_Arrays", "Arrays"); + const string staticArrays = "Scalar_Static_Arrays_"; + + variables.Add(CreateVariable(arraysFolder, staticArrays + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.OneDimension)); + + BaseDataVariableState doubleArrayVar = CreateVariable(arraysFolder, staticArrays + "Double", "Double", DataTypeIds.Double, ValueRanks.OneDimension); + // Set the first elements of the array to a smaller value. + double[] doubleArrayVal = doubleArrayVar.Value as double[]; + doubleArrayVal[0] %= 10E+10; + doubleArrayVal[1] %= 10E+10; + doubleArrayVal[2] %= 10E+10; + doubleArrayVal[3] %= 10E+10; + variables.Add(doubleArrayVar); + + variables.Add(CreateVariable(arraysFolder, staticArrays + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneDimension)); + + BaseDataVariableState floatArrayVar = CreateVariable(arraysFolder, staticArrays + "Float", "Float", DataTypeIds.Float, ValueRanks.OneDimension); + // Set the first elements of the array to a smaller value. + float[] floatArrayVal = floatArrayVar.Value as float[]; + floatArrayVal[0] %= 0xf10E + 4; + floatArrayVal[1] %= 0xf10E + 4; + floatArrayVal[2] %= 0xf10E + 4; + floatArrayVal[3] %= 0xf10E + 4; + variables.Add(floatArrayVar); + + variables.Add(CreateVariable(arraysFolder, staticArrays + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Number", "Number", DataTypeIds.Number, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.OneDimension)); + + BaseDataVariableState stringArrayVar = CreateVariable(arraysFolder, staticArrays + "String", "String", DataTypeIds.String, ValueRanks.OneDimension); + stringArrayVar.Value = new string[] { + "Лошадь_ Пурпурово( Змейка( Слон", + "猪 绿色 绵羊 大象~ 狗 菠萝 猪鼠", + "Лошадь Овцы Голубика Овцы Змейка", + "Чернота` Дракон Бело Дракон", + "Horse# Black Lemon Lemon Grape", + "猫< パイナップル; ドラゴン 犬 モモ", + "레몬} 빨간% 자주색 쥐 백색; 들" , + "Yellow Sheep Peach Elephant Cow", + "Крыса Корова Свинья Собака Кот", + "龙_ 绵羊 大象 芒果; 猫'" }; + variables.Add(stringArrayVar); + + variables.Add(CreateVariable(arraysFolder, staticArrays + "Time", "Time", DataTypeIds.Time, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.OneDimension)); + #endregion + + #region Scalar_Static_Arrays2D + FolderState arrays2DFolder = CreateFolder(staticFolder, "Scalar_Static_Arrays2D", "Arrays2D"); + const string staticArrays2D = "Scalar_Static_Arrays2D_"; + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Double", "Double", DataTypeIds.Double, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Float", "Float", DataTypeIds.Float, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Number", "Number", DataTypeIds.Number, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "String", "String", DataTypeIds.String, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Time", "Time", DataTypeIds.Time, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Variant", "Variant", BuiltInType.Variant, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.TwoDimensions)); + #endregion + + #region Scalar_Static_ArrayDynamic + FolderState arrayDymnamicFolder = CreateFolder(staticFolder, "Scalar_Static_ArrayDymamic", "ArrayDymamic"); + const string staticArraysDynamic = "Scalar_Static_ArrayDynamic_"; + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Double", "Double", DataTypeIds.Double, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Float", "Float", DataTypeIds.Float, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Number", "Number", DataTypeIds.Number, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "String", "String", DataTypeIds.String, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Time", "Time", DataTypeIds.Time, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.OneOrMoreDimensions)); + #endregion + + #region Scalar_Static_Mass + // create 100 instances of each static scalar type + FolderState massFolder = CreateFolder(staticFolder, "Scalar_Static_Mass", "Mass"); + const string staticMass = "Scalar_Static_Mass_"; + variables.AddRange(CreateVariables(massFolder, staticMass + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "String", "String", DataTypeIds.String, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Time", "Time", DataTypeIds.Time, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar, 100)); + #endregion + + #region Scalar_Simulation + FolderState simulationFolder = CreateFolder(scalarFolder, "Scalar_Simulation", "Simulation"); + const string scalarSimulation = "Scalar_Simulation_"; + CreateDynamicVariable(simulationFolder, scalarSimulation + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "String", "String", DataTypeIds.String, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Time", "Time", DataTypeIds.Time, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar); + + BaseDataVariableState intervalVariable = CreateVariable(simulationFolder, scalarSimulation + "Interval", "Interval", DataTypeIds.UInt16, ValueRanks.Scalar); + intervalVariable.Value = m_simulationInterval; + intervalVariable.OnSimpleWriteValue = OnWriteInterval; + + BaseDataVariableState enabledVariable = CreateVariable(simulationFolder, scalarSimulation + "Enabled", "Enabled", DataTypeIds.Boolean, ValueRanks.Scalar); + enabledVariable.Value = m_simulationEnabled; + enabledVariable.OnSimpleWriteValue = OnWriteEnabled; + #endregion + + #region Scalar_Simulation_Arrays + FolderState arraysSimulationFolder = CreateFolder(simulationFolder, "Scalar_Simulation_Arrays", "Arrays"); + const string simulationArrays = "Scalar_Simulation_Arrays_"; + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Double", "Double", DataTypeIds.Double, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Float", "Float", DataTypeIds.Float, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Number", "Number", DataTypeIds.Number, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "String", "String", DataTypeIds.String, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Time", "Time", DataTypeIds.Time, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.OneDimension); + #endregion + + #region Scalar_Simulation_Mass + FolderState massSimulationFolder = CreateFolder(simulationFolder, "Scalar_Simulation_Mass", "Mass"); + const string massSimulation = "Scalar_Simulation_Mass_"; + CreateDynamicVariables(massSimulationFolder, massSimulation + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "String", "String", DataTypeIds.String, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Time", "Time", DataTypeIds.Time, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar, 100); + #endregion + + #region DataAccess_DataItem + FolderState daFolder = CreateFolder(root, "DataAccess", "DataAccess"); + BaseDataVariableState daInstructions = CreateVariable(daFolder, "DataAccess_Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + daInstructions.Value = "A library of Read/Write Variables of all supported data-types."; + variables.Add(daInstructions); + + FolderState dataItemFolder = CreateFolder(daFolder, "DataAccess_DataItem", "DataItem"); + const string daDataItem = "DataAccess_DataItem_"; + + foreach (string name in Enum.GetNames(typeof(BuiltInType))) + { + DataItemState item = CreateDataItemVariable(dataItemFolder, daDataItem + name, name, (BuiltInType)Enum.Parse(typeof(BuiltInType), name), ValueRanks.Scalar); + + // set initial value to String.Empty for String node. + if (name == BuiltInType.String.ToString()) + { + item.Value = String.Empty; + } + } + #endregion + + #region DataAccess_AnalogType + FolderState analogItemFolder = CreateFolder(daFolder, "DataAccess_AnalogType", "AnalogType"); + const string daAnalogItem = "DataAccess_AnalogType_"; + + foreach (string name in Enum.GetNames(typeof(BuiltInType))) + { + BuiltInType builtInType = (BuiltInType)Enum.Parse(typeof(BuiltInType), name); + if (IsAnalogType(builtInType)) + { + AnalogItemState item = CreateAnalogItemVariable(analogItemFolder, daAnalogItem + name, name, builtInType, ValueRanks.Scalar); + + if (builtInType == BuiltInType.Int64 || + builtInType == BuiltInType.UInt64) + { + // make test case without optional ranges + item.EngineeringUnits = null; + item.InstrumentRange = null; + } + else if (builtInType == BuiltInType.Float) + { + item.EURange.Value.High = 0; + item.EURange.Value.Low = 0; + } + } + } + #endregion + + #region DataAccess_AnalogType_Array + FolderState analogArrayFolder = CreateFolder(analogItemFolder, "DataAccess_AnalogType_Array", "Array"); + const string daAnalogArray = "DataAccess_AnalogType_Array_"; + + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Boolean", "Boolean", BuiltInType.Boolean, ValueRanks.OneDimension, new Boolean[] { true, false, true, false, true, false, true, false, true }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Byte", "Byte", BuiltInType.Byte, ValueRanks.OneDimension, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "ByteString", "ByteString", BuiltInType.ByteString, ValueRanks.OneDimension, new Byte[][] { new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "DateTime", "DateTime", BuiltInType.DateTime, ValueRanks.OneDimension, new DateTime[] { DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Double", "Double", BuiltInType.Double, ValueRanks.OneDimension, new double[] { 9.00001d, 9.0002d, 9.003d, 9.04d, 9.5d, 9.06d, 9.007d, 9.008d, 9.0009d }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneDimension, new double[] { 9.00001d, 9.0002d, 9.003d, 9.04d, 9.5d, 9.06d, 9.007d, 9.008d, 9.0009d }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Float", "Float", BuiltInType.Float, ValueRanks.OneDimension, new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 1.1f, 2.2f, 3.3f, 4.4f, 5.5f }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Guid", "Guid", BuiltInType.Guid, ValueRanks.OneDimension, new Guid[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int16", "Int16", BuiltInType.Int16, ValueRanks.OneDimension, new Int16[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int32", "Int32", BuiltInType.Int32, ValueRanks.OneDimension, new Int32[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int64", "Int64", BuiltInType.Int64, ValueRanks.OneDimension, new Int64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Integer", "Integer", BuiltInType.Integer, ValueRanks.OneDimension, new Int64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneDimension, new String[] { "en", "fr", "de", "en", "fr", "de", "en", "fr", "de", "en" }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "LocalizedText", "LocalizedText", BuiltInType.LocalizedText, ValueRanks.OneDimension, new LocalizedText[] { new LocalizedText("en", "Hello World1"), new LocalizedText("en", "Hello World2"), new LocalizedText("en", "Hello World3"), new LocalizedText("en", "Hello World4"), new LocalizedText("en", "Hello World5"), new LocalizedText("en", "Hello World6"), new LocalizedText("en", "Hello World7"), new LocalizedText("en", "Hello World8"), new LocalizedText("en", "Hello World9"), new LocalizedText("en", "Hello World10") }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "NodeId", "NodeId", BuiltInType.NodeId, ValueRanks.OneDimension, new NodeId[] { new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()) }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Number", "Number", BuiltInType.Number, ValueRanks.OneDimension, new Int16[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "QualifiedName", "QualifiedName", BuiltInType.QualifiedName, ValueRanks.OneDimension, new QualifiedName[] { "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9"}); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "SByte", "SByte", BuiltInType.SByte, ValueRanks.OneDimension, new SByte[] { 10, 20, 30, 40, 50, 60, 70, 80, 90 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "String", "String", BuiltInType.String, ValueRanks.OneDimension, new String[] { "a00", "b10", "c20", "d30", "e40", "f50", "g60", "h70", "i80", "j90" }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Time", "Time", DataTypeIds.Time, ValueRanks.OneDimension, new String[] { DateTime.MinValue.ToString(), DateTime.MaxValue.ToString(), DateTime.MinValue.ToString(), DateTime.MaxValue.ToString(), DateTime.MinValue.ToString(), DateTime.MaxValue.ToString(), DateTime.MinValue.ToString(), DateTime.MaxValue.ToString(), DateTime.MinValue.ToString(), DateTime.MaxValue.ToString() }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt16", "UInt16", BuiltInType.UInt16, ValueRanks.OneDimension, new UInt16[] { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt32", "UInt32", BuiltInType.UInt32, ValueRanks.OneDimension, new UInt32[] { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt64", "UInt64", BuiltInType.UInt64, ValueRanks.OneDimension, new UInt64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInteger", "UInteger", BuiltInType.UInteger, ValueRanks.OneDimension, new UInt64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneDimension, new DateTime[] { DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime() }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneDimension, new Variant[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + XmlDocument doc1 = new XmlDocument(); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "XmlElement", "XmlElement", BuiltInType.XmlElement, ValueRanks.OneDimension, new XmlElement[] { doc1.CreateElement("tag1"), doc1.CreateElement("tag2"), doc1.CreateElement("tag3"), doc1.CreateElement("tag4"), doc1.CreateElement("tag5"), doc1.CreateElement("tag6"), doc1.CreateElement("tag7"), doc1.CreateElement("tag8"), doc1.CreateElement("tag9"), doc1.CreateElement("tag10") }); + #endregion + + #region DataAccess_DiscreteType + FolderState discreteTypeFolder = CreateFolder(daFolder, "DataAccess_DiscreteType", "DiscreteType"); + FolderState twoStateDiscreteFolder = CreateFolder(discreteTypeFolder, "DataAccess_TwoStateDiscreteType", "TwoStateDiscreteType"); + const string daTwoStateDiscrete = "DataAccess_TwoStateDiscreteType_"; + + // Add our Nodes to the folder, and specify their customized discrete enumerations + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "001", "001", "red", "blue"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "002", "002", "open", "close"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "003", "003", "up", "down"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "004", "004", "left", "right"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "005", "005", "circle", "cross"); + + FolderState multiStateDiscreteFolder = CreateFolder(discreteTypeFolder, "DataAccess_MultiStateDiscreteType", "MultiStateDiscreteType"); + const string daMultiStateDiscrete = "DataAccess_MultiStateDiscreteType_"; + + // Add our Nodes to the folder, and specify their customized discrete enumerations + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "001", "001", "open", "closed", "jammed"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "002", "002", "red", "green", "blue", "cyan"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "003", "003", "lolo", "lo", "normal", "hi", "hihi"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "004", "004", "left", "right", "center"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "005", "005", "circle", "cross", "triangle"); + #endregion + + #region DataAccess_MultiStateValueDiscreteType + FolderState multiStateValueDiscreteFolder = CreateFolder(discreteTypeFolder, "DataAccess_MultiStateValueDiscreteType", "MultiStateValueDiscreteType"); + const string daMultiStateValueDiscrete = "DataAccess_MultiStateValueDiscreteType_"; + + // Add our Nodes to the folder, and specify their customized discrete enumerations + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "001", "001", new string[] { "open", "closed", "jammed" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "002", "002", new string[] { "red", "green", "blue", "cyan" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "003", "003", new string[] { "lolo", "lo", "normal", "hi", "hihi" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "004", "004", new string[] { "left", "right", "center" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "005", "005", new string[] { "circle", "cross", "triangle" }); + + // Add our Nodes to the folder and specify varying data types + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Byte", "Byte", DataTypeIds.Byte, new string[] { "open", "closed", "jammed" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Int16", "Int16", DataTypeIds.Int16, new string[] { "red", "green", "blue", "cyan" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Int32", "Int32", DataTypeIds.Int32, new string[] { "lolo", "lo", "normal", "hi", "hihi" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Int64", "Int64", DataTypeIds.Int64, new string[] { "left", "right", "center" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "SByte", "SByte", DataTypeIds.SByte, new string[] { "open", "closed", "jammed" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "UInt16", "UInt16", DataTypeIds.UInt16, new string[] { "red", "green", "blue", "cyan" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "UInt32", "UInt32", DataTypeIds.UInt32, new string[] { "lolo", "lo", "normal", "hi", "hihi" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "UInt64", "UInt64", DataTypeIds.UInt64, new string[] { "left", "right", "center" }); + + #endregion + + #region References + FolderState referencesFolder = CreateFolder(root, "References", "References"); + const string referencesPrefix = "References_"; + + BaseDataVariableState referencesInstructions = CreateVariable(referencesFolder, "References_Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + referencesInstructions.Value = "This folder will contain nodes that have specific Reference configurations."; + variables.Add(referencesInstructions); + + // create variable nodes with specific references + BaseDataVariableState hasForwardReference = CreateMeshVariable(referencesFolder, referencesPrefix + "HasForwardReference", "HasForwardReference"); + hasForwardReference.AddReference(ReferenceTypes.HasCause, false, variables[0].NodeId); + variables.Add(hasForwardReference); + + BaseDataVariableState hasInverseReference = CreateMeshVariable(referencesFolder, referencesPrefix + "HasInverseReference", "HasInverseReference"); + hasInverseReference.AddReference(ReferenceTypes.HasCause, true, variables[0].NodeId); + variables.Add(hasInverseReference); + + BaseDataVariableState has3InverseReference = null; + for (int i = 1; i <= 5; i++) + { + string referenceString = "Has3ForwardReferences"; + if (i > 1) + { + referenceString += i.ToString(); + } + BaseDataVariableState has3ForwardReferences = CreateMeshVariable(referencesFolder, referencesPrefix + referenceString, referenceString); + has3ForwardReferences.AddReference(ReferenceTypes.HasCause, false, variables[0].NodeId); + has3ForwardReferences.AddReference(ReferenceTypes.HasCause, false, variables[1].NodeId); + has3ForwardReferences.AddReference(ReferenceTypes.HasCause, false, variables[2].NodeId); + if (i == 1) + { + has3InverseReference = has3ForwardReferences; + } + variables.Add(has3ForwardReferences); + } + + BaseDataVariableState has3InverseReferences = CreateMeshVariable(referencesFolder, referencesPrefix + "Has3InverseReferences", "Has3InverseReferences"); + has3InverseReferences.AddReference(ReferenceTypes.HasEffect, true, variables[0].NodeId); + has3InverseReferences.AddReference(ReferenceTypes.HasEffect, true, variables[1].NodeId); + has3InverseReferences.AddReference(ReferenceTypes.HasEffect, true, variables[2].NodeId); + variables.Add(has3InverseReferences); + + BaseDataVariableState hasForwardAndInverseReferences = CreateMeshVariable(referencesFolder, referencesPrefix + "HasForwardAndInverseReference", "HasForwardAndInverseReference", hasForwardReference, hasInverseReference, has3InverseReference, has3InverseReferences, variables[0]); + variables.Add(hasForwardAndInverseReferences); + #endregion + + #region AccessRights + FolderState folderAccessRights = CreateFolder(root, "AccessRights", "AccessRights"); + const string accessRights = "AccessRights_"; + + BaseDataVariableState accessRightsInstructions = CreateVariable(folderAccessRights, accessRights + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + accessRightsInstructions.Value = "This folder will be accessible to all who enter, but contents therein will be secured."; + variables.Add(accessRightsInstructions); + + // sub-folder for "AccessAll" + FolderState folderAccessRightsAccessAll = CreateFolder(folderAccessRights, "AccessRights_AccessAll", "AccessAll"); + const string accessRightsAccessAll = "AccessRights_AccessAll_"; + + BaseDataVariableState arAllRO = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); + arAllRO.AccessLevel = AccessLevels.CurrentRead; + arAllRO.UserAccessLevel = AccessLevels.CurrentRead; + variables.Add(arAllRO); + BaseDataVariableState arAllWO = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); + arAllWO.AccessLevel = AccessLevels.CurrentWrite; + arAllWO.UserAccessLevel = AccessLevels.CurrentWrite; + variables.Add(arAllWO); + BaseDataVariableState arAllRW = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); + arAllRW.AccessLevel = AccessLevels.CurrentReadOrWrite; + arAllRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variables.Add(arAllRW); + BaseDataVariableState arAllRONotUser = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO_NotUser", "RO_NotUser", BuiltInType.Int16, ValueRanks.Scalar); + arAllRONotUser.AccessLevel = AccessLevels.CurrentRead; + arAllRONotUser.UserAccessLevel = AccessLevels.None; + variables.Add(arAllRONotUser); + BaseDataVariableState arAllWONotUser = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "WO_NotUser", "WO_NotUser", BuiltInType.Int16, ValueRanks.Scalar); + arAllWONotUser.AccessLevel = AccessLevels.CurrentWrite; + arAllWONotUser.UserAccessLevel = AccessLevels.None; + variables.Add(arAllWONotUser); + BaseDataVariableState arAllRWNotUser = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RW_NotUser", "RW_NotUser", BuiltInType.Int16, ValueRanks.Scalar); + arAllRWNotUser.AccessLevel = AccessLevels.CurrentReadOrWrite; + arAllRWNotUser.UserAccessLevel = AccessLevels.CurrentRead; + variables.Add(arAllRWNotUser); + BaseDataVariableState arAllROUserRW = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO_User1_RW", "RO_User1_RW", BuiltInType.Int16, ValueRanks.Scalar); + arAllROUserRW.AccessLevel = AccessLevels.CurrentRead; + arAllROUserRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variables.Add(arAllROUserRW); + BaseDataVariableState arAllROGroupRW = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO_Group1_RW", "RO_Group1_RW", BuiltInType.Int16, ValueRanks.Scalar); + arAllROGroupRW.AccessLevel = AccessLevels.CurrentRead; + arAllROGroupRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variables.Add(arAllROGroupRW); + + // sub-folder for "AccessUser1" + FolderState folderAccessRightsAccessUser1 = CreateFolder(folderAccessRights, "AccessRights_AccessUser1", "AccessUser1"); + const string accessRightsAccessUser1 = "AccessRights_AccessUser1_"; + + BaseDataVariableState arUserRO = CreateVariable(folderAccessRightsAccessUser1, accessRightsAccessUser1 + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); + arUserRO.AccessLevel = AccessLevels.CurrentRead; + arUserRO.UserAccessLevel = AccessLevels.CurrentRead; + variables.Add(arUserRO); + BaseDataVariableState arUserWO = CreateVariable(folderAccessRightsAccessUser1, accessRightsAccessUser1 + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); + arUserWO.AccessLevel = AccessLevels.CurrentWrite; + arUserWO.UserAccessLevel = AccessLevels.CurrentWrite; + variables.Add(arUserWO); + BaseDataVariableState arUserRW = CreateVariable(folderAccessRightsAccessUser1, accessRightsAccessUser1 + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); + arUserRW.AccessLevel = AccessLevels.CurrentReadOrWrite; + arUserRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variables.Add(arUserRW); + + // sub-folder for "AccessGroup1" + FolderState folderAccessRightsAccessGroup1 = CreateFolder(folderAccessRights, "AccessRights_AccessGroup1", "AccessGroup1"); + const string accessRightsAccessGroup1 = "AccessRights_AccessGroup1_"; + + BaseDataVariableState arGroupRO = CreateVariable(folderAccessRightsAccessGroup1, accessRightsAccessGroup1 + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); + arGroupRO.AccessLevel = AccessLevels.CurrentRead; + arGroupRO.UserAccessLevel = AccessLevels.CurrentRead; + variables.Add(arGroupRO); + BaseDataVariableState arGroupWO = CreateVariable(folderAccessRightsAccessGroup1, accessRightsAccessGroup1 + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); + arGroupWO.AccessLevel = AccessLevels.CurrentWrite; + arGroupWO.UserAccessLevel = AccessLevels.CurrentWrite; + variables.Add(arGroupWO); + BaseDataVariableState arGroupRW = CreateVariable(folderAccessRightsAccessGroup1, accessRightsAccessGroup1 + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); + arGroupRW.AccessLevel = AccessLevels.CurrentReadOrWrite; + arGroupRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variables.Add(arGroupRW); + + // sub folder for "RolePermissions" + FolderState folderRolePermissions = CreateFolder(folderAccessRights, "AccessRights_RolePermissions", "RolePermissions"); + const string rolePermissions = "AccessRights_RolePermissions_"; + + BaseDataVariableState rpAnonymous = CreateVariable(folderRolePermissions, rolePermissions + "AnonymousAccess", "AnonymousAccess", BuiltInType.Int16, ValueRanks.Scalar); + rpAnonymous.Description = "This node can be accessed by users that have Anonymous Role"; + rpAnonymous.RolePermissions = new RolePermissionTypeCollection() + { + // allow access to users with Anonymous role + new RolePermissionType() + { + RoleId = ObjectIds.WellKnownRole_Anonymous, + Permissions = (uint)(PermissionType.Browse |PermissionType.Read|PermissionType.ReadRolePermissions | PermissionType.Write) + }, + }; + variables.Add(rpAnonymous); + + BaseDataVariableState rpAuthenticatedUser = CreateVariable(folderRolePermissions, rolePermissions + "AuthenticatedUser", "AuthenticatedUser", BuiltInType.Int16, ValueRanks.Scalar); + rpAuthenticatedUser.Description = "This node can be accessed by users that have AuthenticatedUser Role"; + rpAuthenticatedUser.RolePermissions = new RolePermissionTypeCollection() + { + // allow access to users with AuthenticatedUser role + new RolePermissionType() + { + RoleId = ObjectIds.WellKnownRole_AuthenticatedUser, + Permissions = (uint)(PermissionType.Browse |PermissionType.Read|PermissionType.ReadRolePermissions | PermissionType.Write) + }, + }; + variables.Add(rpAuthenticatedUser); + + BaseDataVariableState rpAdminUser = CreateVariable(folderRolePermissions, rolePermissions + "AdminUser", "AdminUser", BuiltInType.Int16, ValueRanks.Scalar); + rpAdminUser.Description = "This node can be accessed by users that have SecurityAdmin Role over an encrypted connection"; + rpAdminUser.AccessRestrictions = AccessRestrictionType.EncryptionRequired; + rpAdminUser.RolePermissions = new RolePermissionTypeCollection() + { + // allow access to users with SecurityAdmin role + new RolePermissionType() + { + RoleId = ObjectIds.WellKnownRole_SecurityAdmin, + Permissions = (uint)(PermissionType.Browse |PermissionType.Read|PermissionType.ReadRolePermissions | PermissionType.Write) + }, + }; + variables.Add(rpAdminUser); + + // sub-folder for "AccessRestrictions" + FolderState folderAccessRestrictions = CreateFolder(folderAccessRights, "AccessRights_AccessRestrictions", "AccessRestrictions"); + const string accessRestrictions = "AccessRights_AccessRestrictions_"; + + BaseDataVariableState arNone = CreateVariable(folderAccessRestrictions, accessRestrictions + "None", "None", BuiltInType.Int16, ValueRanks.Scalar); + arNone.AccessLevel = AccessLevels.CurrentRead; + arNone.UserAccessLevel = AccessLevels.CurrentRead; + arNone.AccessRestrictions = AccessRestrictionType.None; + variables.Add(arNone); + + BaseDataVariableState arSigningRequired = CreateVariable(folderAccessRestrictions, accessRestrictions + "SigningRequired", "SigningRequired", BuiltInType.Int16, ValueRanks.Scalar); + arSigningRequired.AccessLevel = AccessLevels.CurrentRead; + arSigningRequired.UserAccessLevel = AccessLevels.CurrentRead; + arSigningRequired.AccessRestrictions = AccessRestrictionType.SigningRequired; + variables.Add(arSigningRequired); + + BaseDataVariableState arEncryptionRequired = CreateVariable(folderAccessRestrictions, accessRestrictions + "EncryptionRequired", "EncryptionRequired", BuiltInType.Int16, ValueRanks.Scalar); + arEncryptionRequired.AccessLevel = AccessLevels.CurrentRead; + arEncryptionRequired.UserAccessLevel = AccessLevels.CurrentRead; + arEncryptionRequired.AccessRestrictions = AccessRestrictionType.EncryptionRequired; + variables.Add(arEncryptionRequired); + + BaseDataVariableState arSessionRequired = CreateVariable(folderAccessRestrictions, accessRestrictions + "SessionRequired", "SessionRequired", BuiltInType.Int16, ValueRanks.Scalar); + arSessionRequired.AccessLevel = AccessLevels.CurrentRead; + arSessionRequired.UserAccessLevel = AccessLevels.CurrentRead; + arSessionRequired.AccessRestrictions = AccessRestrictionType.SessionRequired; + variables.Add(arSessionRequired); + #endregion + + #region NodeIds + FolderState nodeIdsFolder = CreateFolder(root, "NodeIds", "NodeIds"); + const string nodeIds = "NodeIds_"; + + BaseDataVariableState nodeIdsInstructions = CreateVariable(nodeIdsFolder, nodeIds + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + nodeIdsInstructions.Value = "All supported Node types are available except whichever is in use for the other nodes."; + variables.Add(nodeIdsInstructions); + + BaseDataVariableState integerNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16Integer", "Int16Integer", DataTypeIds.Int16, ValueRanks.Scalar); + integerNodeId.NodeId = new NodeId((uint)9202, NamespaceIndex); + variables.Add(integerNodeId); + + variables.Add(CreateVariable(nodeIdsFolder, nodeIds + "Int16String", "Int16String", DataTypeIds.Int16, ValueRanks.Scalar)); + + BaseDataVariableState guidNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16GUID", "Int16GUID", DataTypeIds.Int16, ValueRanks.Scalar); + guidNodeId.NodeId = new NodeId(new Guid("00000000-0000-0000-0000-000000009204"), NamespaceIndex); + variables.Add(guidNodeId); + + BaseDataVariableState opaqueNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16Opaque", "Int16Opaque", DataTypeIds.Int16, ValueRanks.Scalar); + opaqueNodeId.NodeId = new NodeId(new byte[] { 9, 2, 0, 5 }, NamespaceIndex); + variables.Add(opaqueNodeId); + #endregion + + #region Methods + FolderState methodsFolder = CreateFolder(root, "Methods", "Methods"); + const string methods = "Methods_"; + + BaseDataVariableState methodsInstructions = CreateVariable(methodsFolder, methods + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + methodsInstructions.Value = "Contains methods with varying parameter definitions."; + variables.Add(methodsInstructions); + + MethodState voidMethod = CreateMethod(methodsFolder, methods + "Void", "Void"); + voidMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnVoidCall); + + #region Add Method + MethodState addMethod = CreateMethod(methodsFolder, methods + "Add", "Add"); + // set input arguments + addMethod.InputArguments = new PropertyState(addMethod); + addMethod.InputArguments.NodeId = new NodeId(addMethod.BrowseName.Name + "InArgs", NamespaceIndex); + addMethod.InputArguments.BrowseName = BrowseNames.InputArguments; + addMethod.InputArguments.DisplayName = addMethod.InputArguments.BrowseName.Name; + addMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + addMethod.InputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + addMethod.InputArguments.DataType = DataTypeIds.Argument; + addMethod.InputArguments.ValueRank = ValueRanks.OneDimension; + + addMethod.InputArguments.Value = new Argument[] + { + new Argument() { Name = "Float value", Description = "Float value", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar }, + new Argument() { Name = "UInt32 value", Description = "UInt32 value", DataType = DataTypeIds.UInt32, ValueRank = ValueRanks.Scalar } + }; + + // set output arguments + addMethod.OutputArguments = new PropertyState(addMethod); + addMethod.OutputArguments.NodeId = new NodeId(addMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + addMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; + addMethod.OutputArguments.DisplayName = addMethod.OutputArguments.BrowseName.Name; + addMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + addMethod.OutputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + addMethod.OutputArguments.DataType = DataTypeIds.Argument; + addMethod.OutputArguments.ValueRank = ValueRanks.OneDimension; + + addMethod.OutputArguments.Value = new Argument[] + { + new Argument() { Name = "Add Result", Description = "Add Result", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar } + }; + + addMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnAddCall); + #endregion + + #region Multiply Method + MethodState multiplyMethod = CreateMethod(methodsFolder, methods + "Multiply", "Multiply"); + // set input arguments + multiplyMethod.InputArguments = new PropertyState(multiplyMethod); + multiplyMethod.InputArguments.NodeId = new NodeId(multiplyMethod.BrowseName.Name + "InArgs", NamespaceIndex); + multiplyMethod.InputArguments.BrowseName = BrowseNames.InputArguments; + multiplyMethod.InputArguments.DisplayName = multiplyMethod.InputArguments.BrowseName.Name; + multiplyMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + multiplyMethod.InputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + multiplyMethod.InputArguments.DataType = DataTypeIds.Argument; + multiplyMethod.InputArguments.ValueRank = ValueRanks.OneDimension; + + multiplyMethod.InputArguments.Value = new Argument[] + { + new Argument() { Name = "Int16 value", Description = "Int16 value", DataType = DataTypeIds.Int16, ValueRank = ValueRanks.Scalar }, + new Argument() { Name = "UInt16 value", Description = "UInt16 value", DataType = DataTypeIds.UInt16, ValueRank = ValueRanks.Scalar } + }; + + // set output arguments + multiplyMethod.OutputArguments = new PropertyState(multiplyMethod); + multiplyMethod.OutputArguments.NodeId = new NodeId(multiplyMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + multiplyMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; + multiplyMethod.OutputArguments.DisplayName = multiplyMethod.OutputArguments.BrowseName.Name; + multiplyMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + multiplyMethod.OutputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + multiplyMethod.OutputArguments.DataType = DataTypeIds.Argument; + multiplyMethod.OutputArguments.ValueRank = ValueRanks.OneDimension; + + multiplyMethod.OutputArguments.Value = new Argument[] + { + new Argument() { Name = "Multiply Result", Description = "Multiply Result", DataType = DataTypeIds.Int32, ValueRank = ValueRanks.Scalar } + }; + + multiplyMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnMultiplyCall); + #endregion + + #region Divide Method + MethodState divideMethod = CreateMethod(methodsFolder, methods + "Divide", "Divide"); + // set input arguments + divideMethod.InputArguments = new PropertyState(divideMethod); + divideMethod.InputArguments.NodeId = new NodeId(divideMethod.BrowseName.Name + "InArgs", NamespaceIndex); + divideMethod.InputArguments.BrowseName = BrowseNames.InputArguments; + divideMethod.InputArguments.DisplayName = divideMethod.InputArguments.BrowseName.Name; + divideMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + divideMethod.InputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + divideMethod.InputArguments.DataType = DataTypeIds.Argument; + divideMethod.InputArguments.ValueRank = ValueRanks.OneDimension; + + divideMethod.InputArguments.Value = new Argument[] + { + new Argument() { Name = "Int32 value", Description = "Int32 value", DataType = DataTypeIds.Int32, ValueRank = ValueRanks.Scalar }, + new Argument() { Name = "UInt16 value", Description = "UInt16 value", DataType = DataTypeIds.UInt16, ValueRank = ValueRanks.Scalar } + }; + + // set output arguments + divideMethod.OutputArguments = new PropertyState(divideMethod); + divideMethod.OutputArguments.NodeId = new NodeId(divideMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + divideMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; + divideMethod.OutputArguments.DisplayName = divideMethod.OutputArguments.BrowseName.Name; + divideMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + divideMethod.OutputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + divideMethod.OutputArguments.DataType = DataTypeIds.Argument; + divideMethod.OutputArguments.ValueRank = ValueRanks.OneDimension; + + divideMethod.OutputArguments.Value = new Argument[] + { + new Argument() { Name = "Divide Result", Description = "Divide Result", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar } + }; + + divideMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnDivideCall); + #endregion + + #region Substract Method + MethodState substractMethod = CreateMethod(methodsFolder, methods + "Substract", "Substract"); + // set input arguments + substractMethod.InputArguments = new PropertyState(substractMethod); + substractMethod.InputArguments.NodeId = new NodeId(substractMethod.BrowseName.Name + "InArgs", NamespaceIndex); + substractMethod.InputArguments.BrowseName = BrowseNames.InputArguments; + substractMethod.InputArguments.DisplayName = substractMethod.InputArguments.BrowseName.Name; + substractMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + substractMethod.InputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + substractMethod.InputArguments.DataType = DataTypeIds.Argument; + substractMethod.InputArguments.ValueRank = ValueRanks.OneDimension; + + substractMethod.InputArguments.Value = new Argument[] + { + new Argument() { Name = "Int16 value", Description = "Int16 value", DataType = DataTypeIds.Int16, ValueRank = ValueRanks.Scalar }, + new Argument() { Name = "Byte value", Description = "Byte value", DataType = DataTypeIds.Byte, ValueRank = ValueRanks.Scalar } + }; + + // set output arguments + substractMethod.OutputArguments = new PropertyState(substractMethod); + substractMethod.OutputArguments.NodeId = new NodeId(substractMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + substractMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; + substractMethod.OutputArguments.DisplayName = substractMethod.OutputArguments.BrowseName.Name; + substractMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + substractMethod.OutputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + substractMethod.OutputArguments.DataType = DataTypeIds.Argument; + substractMethod.OutputArguments.ValueRank = ValueRanks.OneDimension; + + substractMethod.OutputArguments.Value = new Argument[] + { + new Argument() { Name = "Substract Result", Description = "Substract Result", DataType = DataTypeIds.Int16, ValueRank = ValueRanks.Scalar } + }; + + substractMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnSubstractCall); + #endregion + + #region Hello Method + MethodState helloMethod = CreateMethod(methodsFolder, methods + "Hello", "Hello"); + // set input arguments + helloMethod.InputArguments = new PropertyState(helloMethod); + helloMethod.InputArguments.NodeId = new NodeId(helloMethod.BrowseName.Name + "InArgs", NamespaceIndex); + helloMethod.InputArguments.BrowseName = BrowseNames.InputArguments; + helloMethod.InputArguments.DisplayName = helloMethod.InputArguments.BrowseName.Name; + helloMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + helloMethod.InputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + helloMethod.InputArguments.DataType = DataTypeIds.Argument; + helloMethod.InputArguments.ValueRank = ValueRanks.OneDimension; + + helloMethod.InputArguments.Value = new Argument[] + { + new Argument() { Name = "String value", Description = "String value", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + }; + + // set output arguments + helloMethod.OutputArguments = new PropertyState(helloMethod); + helloMethod.OutputArguments.NodeId = new NodeId(helloMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + helloMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; + helloMethod.OutputArguments.DisplayName = helloMethod.OutputArguments.BrowseName.Name; + helloMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + helloMethod.OutputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + helloMethod.OutputArguments.DataType = DataTypeIds.Argument; + helloMethod.OutputArguments.ValueRank = ValueRanks.OneDimension; + + helloMethod.OutputArguments.Value = new Argument[] + { + new Argument() { Name = "Hello Result", Description = "Hello Result", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + }; + + helloMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnHelloCall); + #endregion + + #region Input Method + MethodState inputMethod = CreateMethod(methodsFolder, methods + "Input", "Input"); + // set input arguments + inputMethod.InputArguments = new PropertyState(inputMethod); + inputMethod.InputArguments.NodeId = new NodeId(inputMethod.BrowseName.Name + "InArgs", NamespaceIndex); + inputMethod.InputArguments.BrowseName = BrowseNames.InputArguments; + inputMethod.InputArguments.DisplayName = inputMethod.InputArguments.BrowseName.Name; + inputMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + inputMethod.InputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + inputMethod.InputArguments.DataType = DataTypeIds.Argument; + inputMethod.InputArguments.ValueRank = ValueRanks.OneDimension; + + inputMethod.InputArguments.Value = new Argument[] + { + new Argument() { Name = "String value", Description = "String value", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + }; + + inputMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnInputCall); + #endregion + + #region Output Method + MethodState outputMethod = CreateMethod(methodsFolder, methods + "Output", "Output"); + + // set output arguments + outputMethod.OutputArguments = new PropertyState(helloMethod); + outputMethod.OutputArguments.NodeId = new NodeId(helloMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + outputMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; + outputMethod.OutputArguments.DisplayName = helloMethod.OutputArguments.BrowseName.Name; + outputMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; + outputMethod.OutputArguments.ReferenceTypeId = ReferenceTypeIds.HasProperty; + outputMethod.OutputArguments.DataType = DataTypeIds.Argument; + outputMethod.OutputArguments.ValueRank = ValueRanks.OneDimension; + + outputMethod.OutputArguments.Value = new Argument[] + { + new Argument() { Name = "Output Result", Description = "Output Result", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + }; + + outputMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnOutputCall); + #endregion + #endregion + + #region Views + FolderState viewsFolder = CreateFolder(root, "Views", "Views"); + const string views = "Views_"; + + ViewState viewStateOperations = CreateView(viewsFolder, externalReferences, views + "Operations", "Operations"); + ViewState viewStateEngineering = CreateView(viewsFolder, externalReferences, views + "Engineering", "Engineering"); + #endregion + + #region Locales + FolderState localesFolder = CreateFolder(root, "Locales", "Locales"); + const string locales = "Locales_"; + + BaseDataVariableState qnEnglishVariable = CreateVariable(localesFolder, locales + "QNEnglish", "QNEnglish", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnEnglishVariable.Description = new LocalizedText("en", "English"); + qnEnglishVariable.Value = new QualifiedName("Hello World", NamespaceIndex); + variables.Add(qnEnglishVariable); + BaseDataVariableState ltEnglishVariable = CreateVariable(localesFolder, locales + "LTEnglish", "LTEnglish", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltEnglishVariable.Description = new LocalizedText("en", "English"); + ltEnglishVariable.Value = new LocalizedText("en", "Hello World"); + variables.Add(ltEnglishVariable); + + BaseDataVariableState qnFrancaisVariable = CreateVariable(localesFolder, locales + "QNFrancais", "QNFrancais", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnFrancaisVariable.Description = new LocalizedText("en", "Francais"); + qnFrancaisVariable.Value = new QualifiedName("Salut tout le monde", NamespaceIndex); + variables.Add(qnFrancaisVariable); + BaseDataVariableState ltFrancaisVariable = CreateVariable(localesFolder, locales + "LTFrancais", "LTFrancais", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltFrancaisVariable.Description = new LocalizedText("en", "Francais"); + ltFrancaisVariable.Value = new LocalizedText("fr", "Salut tout le monde"); + variables.Add(ltFrancaisVariable); + + BaseDataVariableState qnDeutschVariable = CreateVariable(localesFolder, locales + "QNDeutsch", "QNDeutsch", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnDeutschVariable.Description = new LocalizedText("en", "Deutsch"); + qnDeutschVariable.Value = new QualifiedName("Hallo Welt", NamespaceIndex); + variables.Add(qnDeutschVariable); + BaseDataVariableState ltDeutschVariable = CreateVariable(localesFolder, locales + "LTDeutsch", "LTDeutsch", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltDeutschVariable.Description = new LocalizedText("en", "Deutsch"); + ltDeutschVariable.Value = new LocalizedText("de", "Hallo Welt"); + variables.Add(ltDeutschVariable); + + BaseDataVariableState qnEspanolVariable = CreateVariable(localesFolder, locales + "QNEspanol", "QNEspanol", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnEspanolVariable.Description = new LocalizedText("en", "Espanol"); + qnEspanolVariable.Value = new QualifiedName("Hola mundo", NamespaceIndex); + variables.Add(qnEspanolVariable); + BaseDataVariableState ltEspanolVariable = CreateVariable(localesFolder, locales + "LTEspanol", "LTEspanol", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltEspanolVariable.Description = new LocalizedText("en", "Espanol"); + ltEspanolVariable.Value = new LocalizedText("es", "Hola mundo"); + variables.Add(ltEspanolVariable); + + BaseDataVariableState qnJapaneseVariable = CreateVariable(localesFolder, locales + "QN日本の", "QN日本の", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnJapaneseVariable.Description = new LocalizedText("en", "Japanese"); + qnJapaneseVariable.Value = new QualifiedName("ハローワールド", NamespaceIndex); + variables.Add(qnJapaneseVariable); + BaseDataVariableState ltJapaneseVariable = CreateVariable(localesFolder, locales + "LT日本の", "LT日本の", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltJapaneseVariable.Description = new LocalizedText("en", "Japanese"); + ltJapaneseVariable.Value = new LocalizedText("jp", "ハローワールド"); + variables.Add(ltJapaneseVariable); + + BaseDataVariableState qnChineseVariable = CreateVariable(localesFolder, locales + "QN中國的", "QN中國的", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnChineseVariable.Description = new LocalizedText("en", "Chinese"); + qnChineseVariable.Value = new QualifiedName("世界您好", NamespaceIndex); + variables.Add(qnChineseVariable); + BaseDataVariableState ltChineseVariable = CreateVariable(localesFolder, locales + "LT中國的", "LT中國的", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltChineseVariable.Description = new LocalizedText("en", "Chinese"); + ltChineseVariable.Value = new LocalizedText("ch", "世界您好"); + variables.Add(ltChineseVariable); + + BaseDataVariableState qnRussianVariable = CreateVariable(localesFolder, locales + "QNрусский", "QNрусский", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnRussianVariable.Description = new LocalizedText("en", "Russian"); + qnRussianVariable.Value = new QualifiedName("LTрусский", NamespaceIndex); + variables.Add(qnRussianVariable); + BaseDataVariableState ltRussianVariable = CreateVariable(localesFolder, locales + "LTрусский", "LTрусский", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltRussianVariable.Description = new LocalizedText("en", "Russian"); + ltRussianVariable.Value = new LocalizedText("ru", "LTрусский"); + variables.Add(ltRussianVariable); + + BaseDataVariableState qnArabicVariable = CreateVariable(localesFolder, locales + "QNالعربية", "QNالعربية", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnArabicVariable.Description = new LocalizedText("en", "Arabic"); + qnArabicVariable.Value = new QualifiedName("مرحبا بالعال", NamespaceIndex); + variables.Add(qnArabicVariable); + BaseDataVariableState ltArabicVariable = CreateVariable(localesFolder, locales + "LTالعربية", "LTالعربية", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltArabicVariable.Description = new LocalizedText("en", "Arabic"); + ltArabicVariable.Value = new LocalizedText("ae", "مرحبا بالعال"); + variables.Add(ltArabicVariable); + + BaseDataVariableState qnKlingonVariable = CreateVariable(localesFolder, locales + "QNtlhIngan", "QNtlhIngan", DataTypeIds.QualifiedName, ValueRanks.Scalar); + qnKlingonVariable.Description = new LocalizedText("en", "Klingon"); + qnKlingonVariable.Value = new QualifiedName("qo' vIvan", NamespaceIndex); + variables.Add(qnKlingonVariable); + BaseDataVariableState ltKlingonVariable = CreateVariable(localesFolder, locales + "LTtlhIngan", "LTtlhIngan", DataTypeIds.LocalizedText, ValueRanks.Scalar); + ltKlingonVariable.Description = new LocalizedText("en", "Klingon"); + ltKlingonVariable.Value = new LocalizedText("ko", "qo' vIvan"); + variables.Add(ltKlingonVariable); + #endregion + + #region Attributes + FolderState folderAttributes = CreateFolder(root, "Attributes", "Attributes"); + + #region AccessAll + FolderState folderAttributesAccessAll = CreateFolder(folderAttributes, "Attributes_AccessAll", "AccessAll"); + const string attributesAccessAll = "Attributes_AccessAll_"; + + BaseDataVariableState accessLevelAccessAll = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "AccessLevel", "AccessLevel", DataTypeIds.Double, ValueRanks.Scalar); + accessLevelAccessAll.WriteMask = AttributeWriteMask.AccessLevel; + accessLevelAccessAll.UserWriteMask = AttributeWriteMask.AccessLevel; + variables.Add(accessLevelAccessAll); + + BaseDataVariableState arrayDimensionsAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ArrayDimensions", "ArrayDimensions", DataTypeIds.Double, ValueRanks.Scalar); + arrayDimensionsAccessLevel.WriteMask = AttributeWriteMask.ArrayDimensions; + arrayDimensionsAccessLevel.UserWriteMask = AttributeWriteMask.ArrayDimensions; + variables.Add(arrayDimensionsAccessLevel); + + BaseDataVariableState browseNameAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "BrowseName", "BrowseName", DataTypeIds.Double, ValueRanks.Scalar); + browseNameAccessLevel.WriteMask = AttributeWriteMask.BrowseName; + browseNameAccessLevel.UserWriteMask = AttributeWriteMask.BrowseName; + variables.Add(browseNameAccessLevel); + + BaseDataVariableState containsNoLoopsAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ContainsNoLoops", "ContainsNoLoops", DataTypeIds.Double, ValueRanks.Scalar); + containsNoLoopsAccessLevel.WriteMask = AttributeWriteMask.ContainsNoLoops; + containsNoLoopsAccessLevel.UserWriteMask = AttributeWriteMask.ContainsNoLoops; + variables.Add(containsNoLoopsAccessLevel); + + BaseDataVariableState dataTypeAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "DataType", "DataType", DataTypeIds.Double, ValueRanks.Scalar); + dataTypeAccessLevel.WriteMask = AttributeWriteMask.DataType; + dataTypeAccessLevel.UserWriteMask = AttributeWriteMask.DataType; + variables.Add(dataTypeAccessLevel); + + BaseDataVariableState descriptionAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Description", "Description", DataTypeIds.Double, ValueRanks.Scalar); + descriptionAccessLevel.WriteMask = AttributeWriteMask.Description; + descriptionAccessLevel.UserWriteMask = AttributeWriteMask.Description; + variables.Add(descriptionAccessLevel); + + BaseDataVariableState eventNotifierAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "EventNotifier", "EventNotifier", DataTypeIds.Double, ValueRanks.Scalar); + eventNotifierAccessLevel.WriteMask = AttributeWriteMask.EventNotifier; + eventNotifierAccessLevel.UserWriteMask = AttributeWriteMask.EventNotifier; + variables.Add(eventNotifierAccessLevel); + + BaseDataVariableState executableAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Executable", "Executable", DataTypeIds.Double, ValueRanks.Scalar); + executableAccessLevel.WriteMask = AttributeWriteMask.Executable; + executableAccessLevel.UserWriteMask = AttributeWriteMask.Executable; + variables.Add(executableAccessLevel); + + BaseDataVariableState historizingAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Historizing", "Historizing", DataTypeIds.Double, ValueRanks.Scalar); + historizingAccessLevel.WriteMask = AttributeWriteMask.Historizing; + historizingAccessLevel.UserWriteMask = AttributeWriteMask.Historizing; + variables.Add(historizingAccessLevel); + + BaseDataVariableState inverseNameAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "InverseName", "InverseName", DataTypeIds.Double, ValueRanks.Scalar); + inverseNameAccessLevel.WriteMask = AttributeWriteMask.InverseName; + inverseNameAccessLevel.UserWriteMask = AttributeWriteMask.InverseName; + variables.Add(inverseNameAccessLevel); + + BaseDataVariableState isAbstractAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "IsAbstract", "IsAbstract", DataTypeIds.Double, ValueRanks.Scalar); + isAbstractAccessLevel.WriteMask = AttributeWriteMask.IsAbstract; + isAbstractAccessLevel.UserWriteMask = AttributeWriteMask.IsAbstract; + variables.Add(isAbstractAccessLevel); + + BaseDataVariableState minimumSamplingIntervalAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "MinimumSamplingInterval", "MinimumSamplingInterval", DataTypeIds.Double, ValueRanks.Scalar); + minimumSamplingIntervalAccessLevel.WriteMask = AttributeWriteMask.MinimumSamplingInterval; + minimumSamplingIntervalAccessLevel.UserWriteMask = AttributeWriteMask.MinimumSamplingInterval; + variables.Add(minimumSamplingIntervalAccessLevel); + + BaseDataVariableState nodeClassIntervalAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "NodeClass", "NodeClass", DataTypeIds.Double, ValueRanks.Scalar); + nodeClassIntervalAccessLevel.WriteMask = AttributeWriteMask.NodeClass; + nodeClassIntervalAccessLevel.UserWriteMask = AttributeWriteMask.NodeClass; + variables.Add(nodeClassIntervalAccessLevel); + + BaseDataVariableState nodeIdAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "NodeId", "NodeId", DataTypeIds.Double, ValueRanks.Scalar); + nodeIdAccessLevel.WriteMask = AttributeWriteMask.NodeId; + nodeIdAccessLevel.UserWriteMask = AttributeWriteMask.NodeId; + variables.Add(nodeIdAccessLevel); + + BaseDataVariableState symmetricAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Symmetric", "Symmetric", DataTypeIds.Double, ValueRanks.Scalar); + symmetricAccessLevel.WriteMask = AttributeWriteMask.Symmetric; + symmetricAccessLevel.UserWriteMask = AttributeWriteMask.Symmetric; + variables.Add(symmetricAccessLevel); + + BaseDataVariableState userAccessLevelAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "UserAccessLevel", "UserAccessLevel", DataTypeIds.Double, ValueRanks.Scalar); + userAccessLevelAccessLevel.WriteMask = AttributeWriteMask.UserAccessLevel; + userAccessLevelAccessLevel.UserWriteMask = AttributeWriteMask.UserAccessLevel; + variables.Add(userAccessLevelAccessLevel); + + BaseDataVariableState userExecutableAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "UserExecutable", "UserExecutable", DataTypeIds.Double, ValueRanks.Scalar); + userExecutableAccessLevel.WriteMask = AttributeWriteMask.UserExecutable; + userExecutableAccessLevel.UserWriteMask = AttributeWriteMask.UserExecutable; + variables.Add(userExecutableAccessLevel); + + BaseDataVariableState valueRankAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ValueRank", "ValueRank", DataTypeIds.Double, ValueRanks.Scalar); + valueRankAccessLevel.WriteMask = AttributeWriteMask.ValueRank; + valueRankAccessLevel.UserWriteMask = AttributeWriteMask.ValueRank; + variables.Add(valueRankAccessLevel); + + BaseDataVariableState writeMaskAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "WriteMask", "WriteMask", DataTypeIds.Double, ValueRanks.Scalar); + writeMaskAccessLevel.WriteMask = AttributeWriteMask.WriteMask; + writeMaskAccessLevel.UserWriteMask = AttributeWriteMask.WriteMask; + variables.Add(writeMaskAccessLevel); + + BaseDataVariableState valueForVariableTypeAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ValueForVariableType", "ValueForVariableType", DataTypeIds.Double, ValueRanks.Scalar); + valueForVariableTypeAccessLevel.WriteMask = AttributeWriteMask.ValueForVariableType; + valueForVariableTypeAccessLevel.UserWriteMask = AttributeWriteMask.ValueForVariableType; + variables.Add(valueForVariableTypeAccessLevel); + + BaseDataVariableState allAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "All", "All", DataTypeIds.Double, ValueRanks.Scalar); + allAccessLevel.WriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; + allAccessLevel.UserWriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; + variables.Add(allAccessLevel); + #endregion + + #region AccessUser1 + FolderState folderAttributesAccessUser1 = CreateFolder(folderAttributes, "Attributes_AccessUser1", "AccessUser1"); + const string attributesAccessUser1 = "Attributes_AccessUser1_"; + + BaseDataVariableState accessLevelAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "AccessLevel", "AccessLevel", DataTypeIds.Double, ValueRanks.Scalar); + accessLevelAccessAll.WriteMask = AttributeWriteMask.AccessLevel; + accessLevelAccessAll.UserWriteMask = AttributeWriteMask.AccessLevel; + variables.Add(accessLevelAccessAll); + + BaseDataVariableState arrayDimensionsAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ArrayDimensions", "ArrayDimensions", DataTypeIds.Double, ValueRanks.Scalar); + arrayDimensionsAccessUser1.WriteMask = AttributeWriteMask.ArrayDimensions; + arrayDimensionsAccessUser1.UserWriteMask = AttributeWriteMask.ArrayDimensions; + variables.Add(arrayDimensionsAccessUser1); + + BaseDataVariableState browseNameAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "BrowseName", "BrowseName", DataTypeIds.Double, ValueRanks.Scalar); + browseNameAccessUser1.WriteMask = AttributeWriteMask.BrowseName; + browseNameAccessUser1.UserWriteMask = AttributeWriteMask.BrowseName; + variables.Add(browseNameAccessUser1); + + BaseDataVariableState containsNoLoopsAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ContainsNoLoops", "ContainsNoLoops", DataTypeIds.Double, ValueRanks.Scalar); + containsNoLoopsAccessUser1.WriteMask = AttributeWriteMask.ContainsNoLoops; + containsNoLoopsAccessUser1.UserWriteMask = AttributeWriteMask.ContainsNoLoops; + variables.Add(containsNoLoopsAccessUser1); + + BaseDataVariableState dataTypeAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "DataType", "DataType", DataTypeIds.Double, ValueRanks.Scalar); + dataTypeAccessUser1.WriteMask = AttributeWriteMask.DataType; + dataTypeAccessUser1.UserWriteMask = AttributeWriteMask.DataType; + variables.Add(dataTypeAccessUser1); + + BaseDataVariableState descriptionAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Description", "Description", DataTypeIds.Double, ValueRanks.Scalar); + descriptionAccessUser1.WriteMask = AttributeWriteMask.Description; + descriptionAccessUser1.UserWriteMask = AttributeWriteMask.Description; + variables.Add(descriptionAccessUser1); + + BaseDataVariableState eventNotifierAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "EventNotifier", "EventNotifier", DataTypeIds.Double, ValueRanks.Scalar); + eventNotifierAccessUser1.WriteMask = AttributeWriteMask.EventNotifier; + eventNotifierAccessUser1.UserWriteMask = AttributeWriteMask.EventNotifier; + variables.Add(eventNotifierAccessUser1); + + BaseDataVariableState executableAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Executable", "Executable", DataTypeIds.Double, ValueRanks.Scalar); + executableAccessUser1.WriteMask = AttributeWriteMask.Executable; + executableAccessUser1.UserWriteMask = AttributeWriteMask.Executable; + variables.Add(executableAccessUser1); + + BaseDataVariableState historizingAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Historizing", "Historizing", DataTypeIds.Double, ValueRanks.Scalar); + historizingAccessUser1.WriteMask = AttributeWriteMask.Historizing; + historizingAccessUser1.UserWriteMask = AttributeWriteMask.Historizing; + variables.Add(historizingAccessUser1); + + BaseDataVariableState inverseNameAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "InverseName", "InverseName", DataTypeIds.Double, ValueRanks.Scalar); + inverseNameAccessUser1.WriteMask = AttributeWriteMask.InverseName; + inverseNameAccessUser1.UserWriteMask = AttributeWriteMask.InverseName; + variables.Add(inverseNameAccessUser1); + + BaseDataVariableState isAbstractAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "IsAbstract", "IsAbstract", DataTypeIds.Double, ValueRanks.Scalar); + isAbstractAccessUser1.WriteMask = AttributeWriteMask.IsAbstract; + isAbstractAccessUser1.UserWriteMask = AttributeWriteMask.IsAbstract; + variables.Add(isAbstractAccessUser1); + + BaseDataVariableState minimumSamplingIntervalAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "MinimumSamplingInterval", "MinimumSamplingInterval", DataTypeIds.Double, ValueRanks.Scalar); + minimumSamplingIntervalAccessUser1.WriteMask = AttributeWriteMask.MinimumSamplingInterval; + minimumSamplingIntervalAccessUser1.UserWriteMask = AttributeWriteMask.MinimumSamplingInterval; + variables.Add(minimumSamplingIntervalAccessUser1); + + BaseDataVariableState nodeClassIntervalAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "NodeClass", "NodeClass", DataTypeIds.Double, ValueRanks.Scalar); + nodeClassIntervalAccessUser1.WriteMask = AttributeWriteMask.NodeClass; + nodeClassIntervalAccessUser1.UserWriteMask = AttributeWriteMask.NodeClass; + variables.Add(nodeClassIntervalAccessUser1); + + BaseDataVariableState nodeIdAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "NodeId", "NodeId", DataTypeIds.Double, ValueRanks.Scalar); + nodeIdAccessUser1.WriteMask = AttributeWriteMask.NodeId; + nodeIdAccessUser1.UserWriteMask = AttributeWriteMask.NodeId; + variables.Add(nodeIdAccessUser1); + + BaseDataVariableState symmetricAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Symmetric", "Symmetric", DataTypeIds.Double, ValueRanks.Scalar); + symmetricAccessUser1.WriteMask = AttributeWriteMask.Symmetric; + symmetricAccessUser1.UserWriteMask = AttributeWriteMask.Symmetric; + variables.Add(symmetricAccessUser1); + + BaseDataVariableState userAccessUser1AccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "UserAccessUser1", "UserAccessUser1", DataTypeIds.Double, ValueRanks.Scalar); + userAccessUser1AccessUser1.WriteMask = AttributeWriteMask.UserAccessLevel; + userAccessUser1AccessUser1.UserWriteMask = AttributeWriteMask.UserAccessLevel; + variables.Add(userAccessUser1AccessUser1); + + BaseDataVariableState userExecutableAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "UserExecutable", "UserExecutable", DataTypeIds.Double, ValueRanks.Scalar); + userExecutableAccessUser1.WriteMask = AttributeWriteMask.UserExecutable; + userExecutableAccessUser1.UserWriteMask = AttributeWriteMask.UserExecutable; + variables.Add(userExecutableAccessUser1); + + BaseDataVariableState valueRankAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ValueRank", "ValueRank", DataTypeIds.Double, ValueRanks.Scalar); + valueRankAccessUser1.WriteMask = AttributeWriteMask.ValueRank; + valueRankAccessUser1.UserWriteMask = AttributeWriteMask.ValueRank; + variables.Add(valueRankAccessUser1); + + BaseDataVariableState writeMaskAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "WriteMask", "WriteMask", DataTypeIds.Double, ValueRanks.Scalar); + writeMaskAccessUser1.WriteMask = AttributeWriteMask.WriteMask; + writeMaskAccessUser1.UserWriteMask = AttributeWriteMask.WriteMask; + variables.Add(writeMaskAccessUser1); + + BaseDataVariableState valueForVariableTypeAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ValueForVariableType", "ValueForVariableType", DataTypeIds.Double, ValueRanks.Scalar); + valueForVariableTypeAccessUser1.WriteMask = AttributeWriteMask.ValueForVariableType; + valueForVariableTypeAccessUser1.UserWriteMask = AttributeWriteMask.ValueForVariableType; + variables.Add(valueForVariableTypeAccessUser1); + + BaseDataVariableState allAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "All", "All", DataTypeIds.Double, ValueRanks.Scalar); + allAccessUser1.WriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; + allAccessUser1.UserWriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; + variables.Add(allAccessUser1); + #endregion + #endregion + + #region MyCompany + FolderState myCompanyFolder = CreateFolder(root, "MyCompany", "MyCompany"); + const string myCompany = "MyCompany_"; + + BaseDataVariableState myCompanyInstructions = CreateVariable(myCompanyFolder, myCompany + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + myCompanyInstructions.Value = "A place for the vendor to describe their address-space."; + variables.Add(myCompanyInstructions); + #endregion + } + catch (Exception e) + { + Utils.Trace(e, "Error creating the address space."); + } + + AddPredefinedNode(SystemContext, root); + m_simulationTimer = new Timer(DoSimulation, null, 1000, 1000); + } + } + + private ServiceResult OnWriteInterval(ISystemContext context, NodeState node, ref object value) + { + try + { + m_simulationInterval = (UInt16)value; + + if (m_simulationEnabled) + { + m_simulationTimer.Change(100, (int)m_simulationInterval); + } + + return ServiceResult.Good; + } + catch (Exception e) + { + Utils.Trace(e, "Error writing Interval variable."); + return ServiceResult.Create(e, StatusCodes.Bad, "Error writing Interval variable."); + } + } + + private ServiceResult OnWriteEnabled(ISystemContext context, NodeState node, ref object value) + { + try + { + m_simulationEnabled = (bool)value; + + if (m_simulationEnabled) + { + m_simulationTimer.Change(100, (int)m_simulationInterval); + } + else + { + m_simulationTimer.Change(100, 0); + } + + return ServiceResult.Good; + } + catch (Exception e) + { + Utils.Trace(e, "Error writing Enabled variable."); + return ServiceResult.Create(e, StatusCodes.Bad, "Error writing Enabled variable."); + } + } + + /// + /// Creates a new folder. + /// + private FolderState CreateFolder(NodeState parent, string path, string name) + { + FolderState folder = new FolderState(parent); + + folder.SymbolicName = name; + folder.ReferenceTypeId = ReferenceTypes.Organizes; + folder.TypeDefinitionId = ObjectTypeIds.FolderType; + folder.NodeId = new NodeId(path, NamespaceIndex); + folder.BrowseName = new QualifiedName(path, NamespaceIndex); + folder.DisplayName = new LocalizedText("en", name); + folder.WriteMask = AttributeWriteMask.None; + folder.UserWriteMask = AttributeWriteMask.None; + folder.EventNotifier = EventNotifiers.None; + + if (parent != null) + { + parent.AddChild(folder); + } + + return folder; + } + + /// + /// Creates a new object. + /// + private BaseObjectState CreateObject(NodeState parent, string path, string name) + { + BaseObjectState folder = new BaseObjectState(parent); + + folder.SymbolicName = name; + folder.ReferenceTypeId = ReferenceTypes.Organizes; + folder.TypeDefinitionId = ObjectTypeIds.BaseObjectType; + folder.NodeId = new NodeId(path, NamespaceIndex); + folder.BrowseName = new QualifiedName(name, NamespaceIndex); + folder.DisplayName = folder.BrowseName.Name; + folder.WriteMask = AttributeWriteMask.None; + folder.UserWriteMask = AttributeWriteMask.None; + folder.EventNotifier = EventNotifiers.None; + + if (parent != null) + { + parent.AddChild(folder); + } + + return folder; + } + + /// + /// Creates a new object type. + /// + private BaseObjectTypeState CreateObjectType(NodeState parent, IDictionary> externalReferences, string path, string name) + { + BaseObjectTypeState type = new BaseObjectTypeState(); + + type.SymbolicName = name; + type.SuperTypeId = ObjectTypeIds.BaseObjectType; + type.NodeId = new NodeId(path, NamespaceIndex); + type.BrowseName = new QualifiedName(name, NamespaceIndex); + type.DisplayName = type.BrowseName.Name; + type.WriteMask = AttributeWriteMask.None; + type.UserWriteMask = AttributeWriteMask.None; + type.IsAbstract = false; + + IList references = null; + + if (!externalReferences.TryGetValue(ObjectTypeIds.BaseObjectType, out references)) + { + externalReferences[ObjectTypeIds.BaseObjectType] = references = new List(); + } + + references.Add(new NodeStateReference(ReferenceTypes.HasSubtype, false, type.NodeId)); + + if (parent != null) + { + parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId); + type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId); + } + + AddPredefinedNode(SystemContext, type); + return type; + } + + /// + /// Creates a new variable. + /// + private BaseDataVariableState CreateMeshVariable(NodeState parent, string path, string name, params NodeState[] peers) + { + BaseDataVariableState variable = CreateVariable(parent, path, name, BuiltInType.Double, ValueRanks.Scalar); + + if (peers != null) + { + foreach (NodeState peer in peers) + { + peer.AddReference(ReferenceTypes.HasCause, false, variable.NodeId); + variable.AddReference(ReferenceTypes.HasCause, true, peer.NodeId); + peer.AddReference(ReferenceTypes.HasEffect, true, variable.NodeId); + variable.AddReference(ReferenceTypes.HasEffect, false, peer.NodeId); + } + } + + return variable; + } + + /// + /// Creates a new variable. + /// + private DataItemState CreateDataItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + { + DataItemState variable = new DataItemState(parent); + variable.ValuePrecision = new PropertyState(variable); + variable.Definition = new PropertyState(variable); + + variable.Create( + SystemContext, + null, + variable.BrowseName, + null, + true); + + variable.SymbolicName = name; + variable.ReferenceTypeId = ReferenceTypes.Organizes; + variable.NodeId = new NodeId(path, NamespaceIndex); + variable.BrowseName = new QualifiedName(path, NamespaceIndex); + variable.DisplayName = new LocalizedText("en", name); + variable.WriteMask = AttributeWriteMask.None; + variable.UserWriteMask = AttributeWriteMask.None; + variable.DataType = (uint)dataType; + variable.ValueRank = valueRank; + variable.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Historizing = false; + variable.Value = Opc.Ua.TypeInfo.GetDefaultValue((uint)dataType, valueRank, Server.TypeTree); + variable.StatusCode = StatusCodes.Good; + variable.Timestamp = DateTime.UtcNow; + + if (valueRank == ValueRanks.OneDimension) + { + variable.ArrayDimensions = new ReadOnlyList(new List { 0 }); + } + else if (valueRank == ValueRanks.TwoDimensions) + { + variable.ArrayDimensions = new ReadOnlyList(new List { 0, 0 }); + } + + variable.ValuePrecision.Value = 2; + variable.ValuePrecision.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.ValuePrecision.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Definition.Value = String.Empty; + variable.Definition.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Definition.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + + if (parent != null) + { + parent.AddChild(variable); + } + + return variable; + } + + private DataItemState[] CreateDataItemVariables(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, UInt16 numVariables) + { + List itemsCreated = new List(); + // create the default name first: + itemsCreated.Add(CreateDataItemVariable(parent, path, name, dataType, valueRank)); + // now to create the remaining NUMBERED items + for (uint i = 0; i < numVariables; i++) + { + string newName = string.Format("{0}{1}", name, i.ToString("000")); + string newPath = string.Format("{0}/Mass/{1}", path, newName); + itemsCreated.Add(CreateDataItemVariable(parent, newPath, newName, dataType, valueRank)); + }//for i + return (itemsCreated.ToArray()); + } + + private ServiceResult OnWriteDataItem( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp) + { + DataItemState variable = node as DataItemState; + + // verify data type. + Opc.Ua.TypeInfo typeInfo = Opc.Ua.TypeInfo.IsInstanceOfDataType( + value, + variable.DataType, + variable.ValueRank, + context.NamespaceUris, + context.TypeTable); + + if (typeInfo == null || typeInfo == Opc.Ua.TypeInfo.Unknown) + { + return StatusCodes.BadTypeMismatch; + } + + if (typeInfo.BuiltInType != BuiltInType.DateTime) + { + double number = Convert.ToDouble(value); + number = Math.Round(number, (int)variable.ValuePrecision.Value); + value = Opc.Ua.TypeInfo.Cast(number, typeInfo.BuiltInType); + } + + return ServiceResult.Good; + } + + /// + /// Creates a new variable. + /// + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + { + return (CreateAnalogItemVariable(parent, path, name, dataType, valueRank, null)); + } + + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, object initialValues) + { + return (CreateAnalogItemVariable(parent, path, name, dataType, valueRank, initialValues, null)); + } + + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, object initialValues, Opc.Ua.Range customRange) + { + return CreateAnalogItemVariable(parent, path, name, (uint)dataType, valueRank, initialValues, customRange); + } + + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank, object initialValues, Opc.Ua.Range customRange) + { + AnalogItemState variable = new AnalogItemState(parent); + variable.BrowseName = new QualifiedName(path, NamespaceIndex); + variable.EngineeringUnits = new PropertyState(variable); + variable.InstrumentRange = new PropertyState(variable); + + variable.Create( + SystemContext, + new NodeId(path, NamespaceIndex), + variable.BrowseName, + null, + true); + + variable.NodeId = new NodeId(path, NamespaceIndex); + variable.SymbolicName = name; + variable.DisplayName = new LocalizedText("en", name); + variable.WriteMask = AttributeWriteMask.None; + variable.UserWriteMask = AttributeWriteMask.None; + variable.ReferenceTypeId = ReferenceTypes.Organizes; + variable.DataType = dataType; + variable.ValueRank = valueRank; + variable.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Historizing = false; + + if (valueRank == ValueRanks.OneDimension) + { + variable.ArrayDimensions = new ReadOnlyList(new List { 0 }); + } + else if (valueRank == ValueRanks.TwoDimensions) + { + variable.ArrayDimensions = new ReadOnlyList(new List { 0, 0 }); + } + + BuiltInType builtInType = Opc.Ua.TypeInfo.GetBuiltInType(dataType, Server.TypeTree); + + // Simulate a mV Voltmeter + Range newRange = GetAnalogRange(builtInType); + // Using anything but 120,-10 fails a few tests + newRange.High = Math.Min(newRange.High, 120); + newRange.Low = Math.Max(newRange.Low, -10); + variable.InstrumentRange.Value = newRange; + + if (customRange != null) + { + variable.EURange.Value = customRange; + } + else + { + variable.EURange.Value = new Range(100, 0); + } + + if (initialValues == null) + { + variable.Value = Opc.Ua.TypeInfo.GetDefaultValue(dataType, valueRank, Server.TypeTree); + } + else + { + variable.Value = initialValues; + } + + variable.StatusCode = StatusCodes.Good; + variable.Timestamp = DateTime.UtcNow; + // The latest UNECE version (Rev 11, published in 2015) is available here: + // http://www.opcfoundation.org/UA/EngineeringUnits/UNECE/rec20_latest_08052015.zip + variable.EngineeringUnits.Value = new EUInformation("mV", "millivolt", "http://www.opcfoundation.org/UA/units/un/cefact"); + // The mapping of the UNECE codes to OPC UA(EUInformation.unitId) is available here: + // http://www.opcfoundation.org/UA/EngineeringUnits/UNECE/UNECE_to_OPCUA.csv + variable.EngineeringUnits.Value.UnitId = 12890; // "2Z" + variable.OnWriteValue = OnWriteAnalog; + variable.EURange.OnWriteValue = OnWriteAnalogRange; + variable.EURange.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.EURange.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.EngineeringUnits.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.EngineeringUnits.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.InstrumentRange.OnWriteValue = OnWriteAnalogRange; + variable.InstrumentRange.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.InstrumentRange.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + + if (parent != null) + { + parent.AddChild(variable); + } + + return variable; + } + + /// + /// Creates a new variable. + /// + private DataItemState CreateTwoStateDiscreteItemVariable(NodeState parent, string path, string name, string trueState, string falseState) + { + TwoStateDiscreteState variable = new TwoStateDiscreteState(parent); + + variable.NodeId = new NodeId(path, NamespaceIndex); + variable.BrowseName = new QualifiedName(path, NamespaceIndex); + variable.DisplayName = new LocalizedText("en", name); + variable.WriteMask = AttributeWriteMask.None; + variable.UserWriteMask = AttributeWriteMask.None; + + variable.Create( + SystemContext, + null, + variable.BrowseName, + null, + true); + + variable.SymbolicName = name; + variable.ReferenceTypeId = ReferenceTypes.Organizes; + variable.DataType = DataTypeIds.Boolean; + variable.ValueRank = ValueRanks.Scalar; + variable.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Historizing = false; + variable.Value = (bool)GetNewValue(variable); + variable.StatusCode = StatusCodes.Good; + variable.Timestamp = DateTime.UtcNow; + + variable.TrueState.Value = trueState; + variable.TrueState.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.TrueState.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + + variable.FalseState.Value = falseState; + variable.FalseState.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.FalseState.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + + if (parent != null) + { + parent.AddChild(variable); + } + + return variable; + } + + /// + /// Creates a new variable. + /// + private DataItemState CreateMultiStateDiscreteItemVariable(NodeState parent, string path, string name, params string[] values) + { + MultiStateDiscreteState variable = new MultiStateDiscreteState(parent); + + variable.NodeId = new NodeId(path, NamespaceIndex); + variable.BrowseName = new QualifiedName(path, NamespaceIndex); + variable.DisplayName = new LocalizedText("en", name); + variable.WriteMask = AttributeWriteMask.None; + variable.UserWriteMask = AttributeWriteMask.None; + + variable.Create( + SystemContext, + null, + variable.BrowseName, + null, + true); + + variable.SymbolicName = name; + variable.ReferenceTypeId = ReferenceTypes.Organizes; + variable.DataType = DataTypeIds.UInt32; + variable.ValueRank = ValueRanks.Scalar; + variable.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Historizing = false; + variable.Value = (uint)0; + variable.StatusCode = StatusCodes.Good; + variable.Timestamp = DateTime.UtcNow; + variable.OnWriteValue = OnWriteDiscrete; + + LocalizedText[] strings = new LocalizedText[values.Length]; + + for (int ii = 0; ii < strings.Length; ii++) + { + strings[ii] = values[ii]; + } + + variable.EnumStrings.Value = strings; + variable.EnumStrings.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.EnumStrings.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + + if (parent != null) + { + parent.AddChild(variable); + } + + return variable; + } + + /// + /// Creates a new UInt32 variable. + /// + private DataItemState CreateMultiStateValueDiscreteItemVariable(NodeState parent, string path, string name, params string[] enumNames) + { + return CreateMultiStateValueDiscreteItemVariable(parent, path, name, null, enumNames); + } + + /// + /// Creates a new variable. + /// + private DataItemState CreateMultiStateValueDiscreteItemVariable(NodeState parent, string path, string name, NodeId nodeId, params string[] enumNames) + { + MultiStateValueDiscreteState variable = new MultiStateValueDiscreteState(parent); + + variable.NodeId = new NodeId(path, NamespaceIndex); + variable.BrowseName = new QualifiedName(path, NamespaceIndex); + variable.DisplayName = new LocalizedText("en", name); + variable.WriteMask = AttributeWriteMask.None; + variable.UserWriteMask = AttributeWriteMask.None; + + variable.Create( + SystemContext, + null, + variable.BrowseName, + null, + true); + + variable.SymbolicName = name; + variable.ReferenceTypeId = ReferenceTypes.Organizes; + variable.DataType = (nodeId == null) ? DataTypeIds.UInt32 : nodeId; + variable.ValueRank = ValueRanks.Scalar; + variable.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Historizing = false; + variable.Value = (uint)0; + variable.StatusCode = StatusCodes.Good; + variable.Timestamp = DateTime.UtcNow; + variable.OnWriteValue = OnWriteValueDiscrete; + + // there are two enumerations for this type: + // EnumStrings = the string representations for enumerated values + // ValueAsText = the actual enumerated value + + // set the enumerated strings + LocalizedText[] strings = new LocalizedText[enumNames.Length]; + for (int ii = 0; ii < strings.Length; ii++) + { + strings[ii] = enumNames[ii]; + } + + // set the enumerated values + EnumValueType[] values = new EnumValueType[enumNames.Length]; + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = new EnumValueType(); + values[ii].Value = ii; + values[ii].Description = strings[ii]; + values[ii].DisplayName = strings[ii]; + } + variable.EnumValues.Value = values; + variable.EnumValues.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.EnumValues.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.ValueAsText.Value = variable.EnumValues.Value[0].DisplayName; + + if (parent != null) + { + parent.AddChild(variable); + } + + return variable; + } + + private ServiceResult OnWriteDiscrete( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp) + { + MultiStateDiscreteState variable = node as MultiStateDiscreteState; + + // verify data type. + Opc.Ua.TypeInfo typeInfo = Opc.Ua.TypeInfo.IsInstanceOfDataType( + value, + variable.DataType, + variable.ValueRank, + context.NamespaceUris, + context.TypeTable); + + if (typeInfo == null || typeInfo == Opc.Ua.TypeInfo.Unknown) + { + return StatusCodes.BadTypeMismatch; + } + + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + double number = Convert.ToDouble(value); + + if (number >= variable.EnumStrings.Value.Length | number < 0) + { + return StatusCodes.BadOutOfRange; + } + + return ServiceResult.Good; + } + + private ServiceResult OnWriteValueDiscrete( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp) + { + MultiStateValueDiscreteState variable = node as MultiStateValueDiscreteState; + + TypeInfo typeInfo = TypeInfo.Construct(value); + + if (variable == null || + typeInfo == null || + typeInfo == Opc.Ua.TypeInfo.Unknown || + !TypeInfo.IsNumericType(typeInfo.BuiltInType)) + { + return StatusCodes.BadTypeMismatch; + } + + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + Int32 number = Convert.ToInt32(value); + if (number >= variable.EnumValues.Value.Length || number < 0) + { + return StatusCodes.BadOutOfRange; + } + + if (!node.SetChildValue(context, BrowseNames.ValueAsText, variable.EnumValues.Value[number].DisplayName, true)) + { + return StatusCodes.BadOutOfRange; + } + + node.ClearChangeMasks(context, true); + + return ServiceResult.Good; + } + + private ServiceResult OnWriteAnalog( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp) + { + AnalogItemState variable = node as AnalogItemState; + + // verify data type. + Opc.Ua.TypeInfo typeInfo = Opc.Ua.TypeInfo.IsInstanceOfDataType( + value, + variable.DataType, + variable.ValueRank, + context.NamespaceUris, + context.TypeTable); + + if (typeInfo == null || typeInfo == Opc.Ua.TypeInfo.Unknown) + { + return StatusCodes.BadTypeMismatch; + } + + // check index range. + if (variable.ValueRank >= 0) + { + if (indexRange != NumericRange.Empty) + { + object target = variable.Value; + ServiceResult result = indexRange.UpdateRange(ref target, value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + value = target; + } + } + + // check instrument range. + else + { + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + double number = Convert.ToDouble(value); + + if (variable.InstrumentRange != null && (number < variable.InstrumentRange.Value.Low || number > variable.InstrumentRange.Value.High)) + { + return StatusCodes.BadOutOfRange; + } + } + + return ServiceResult.Good; + } + + private ServiceResult OnWriteAnalogRange( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp) + { + PropertyState variable = node as PropertyState; + ExtensionObject extensionObject = value as ExtensionObject; + TypeInfo typeInfo = TypeInfo.Construct(value); + + if (variable == null || + extensionObject == null || + typeInfo == null || + typeInfo == Opc.Ua.TypeInfo.Unknown) + { + return StatusCodes.BadTypeMismatch; + } + + Range newRange = extensionObject.Body as Range; + AnalogItemState parent = variable.Parent as AnalogItemState; + if (newRange == null || + parent == null) + { + return StatusCodes.BadTypeMismatch; + } + + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + TypeInfo parentTypeInfo = TypeInfo.Construct(parent.Value); + Range parentRange = GetAnalogRange(parentTypeInfo.BuiltInType); + if (parentRange.High < newRange.High || + parentRange.Low > newRange.Low) + { + return StatusCodes.BadOutOfRange; + } + + value = newRange; + + return ServiceResult.Good; + } + + /// + /// Creates a new variable. + /// + private BaseDataVariableState CreateVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + { + return CreateVariable(parent, path, name, (uint)dataType, valueRank); + } + + /// + /// Creates a new variable. + /// + private BaseDataVariableState CreateVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank) + { + BaseDataVariableState variable = new BaseDataVariableState(parent); + + variable.SymbolicName = name; + variable.ReferenceTypeId = ReferenceTypes.Organizes; + variable.TypeDefinitionId = VariableTypeIds.BaseDataVariableType; + variable.NodeId = new NodeId(path, NamespaceIndex); + variable.BrowseName = new QualifiedName(path, NamespaceIndex); + variable.DisplayName = new LocalizedText("en", name); + variable.WriteMask = AttributeWriteMask.DisplayName | AttributeWriteMask.Description; + variable.UserWriteMask = AttributeWriteMask.DisplayName | AttributeWriteMask.Description; + variable.DataType = dataType; + variable.ValueRank = valueRank; + variable.AccessLevel = AccessLevels.CurrentReadOrWrite; + variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite; + variable.Historizing = false; + variable.Value = GetNewValue(variable); + variable.StatusCode = StatusCodes.Good; + variable.Timestamp = DateTime.UtcNow; + + if (valueRank == ValueRanks.OneDimension) + { + variable.ArrayDimensions = new ReadOnlyList(new List { 0 }); + } + else if (valueRank == ValueRanks.TwoDimensions) + { + variable.ArrayDimensions = new ReadOnlyList(new List { 0, 0 }); + } + + if (parent != null) + { + parent.AddChild(variable); + } + + return variable; + } + + private BaseDataVariableState[] CreateVariables(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, UInt16 numVariables) + { + return CreateVariables(parent, path, name, (uint)dataType, valueRank, numVariables); + } + + private BaseDataVariableState[] CreateVariables(NodeState parent, string path, string name, NodeId dataType, int valueRank, UInt16 numVariables) + { + // first, create a new Parent folder for this data-type + FolderState newParentFolder = CreateFolder(parent, path, name); + + List itemsCreated = new List(); + // now to create the remaining NUMBERED items + for (uint i = 0; i < numVariables; i++) + { + string newName = string.Format("{0}_{1}", name, i.ToString("00")); + string newPath = string.Format("{0}_{1}", path, newName); + itemsCreated.Add(CreateVariable(newParentFolder, newPath, newName, dataType, valueRank)); + } + return (itemsCreated.ToArray()); + } + + /// + /// Creates a new variable. + /// + private BaseDataVariableState CreateDynamicVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + { + return CreateDynamicVariable(parent, path, name, (uint)dataType, valueRank); + } + + /// + /// Creates a new variable. + /// + private BaseDataVariableState CreateDynamicVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank) + { + BaseDataVariableState variable = CreateVariable(parent, path, name, dataType, valueRank); + m_dynamicNodes.Add(variable); + return variable; + } + + private BaseDataVariableState[] CreateDynamicVariables(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, uint numVariables) + { + return CreateDynamicVariables(parent, path, name, (uint)dataType, valueRank, numVariables); + + } + + private BaseDataVariableState[] CreateDynamicVariables(NodeState parent, string path, string name, NodeId dataType, int valueRank, uint numVariables) + { + // first, create a new Parent folder for this data-type + FolderState newParentFolder = CreateFolder(parent, path, name); + + List itemsCreated = new List(); + // now to create the remaining NUMBERED items + for (uint i = 0; i < numVariables; i++) + { + string newName = string.Format("{0}_{1}", name, i.ToString("00")); + string newPath = string.Format("{0}_{1}", path, newName); + itemsCreated.Add(CreateDynamicVariable(newParentFolder, newPath, newName, dataType, valueRank)); + }//for i + return (itemsCreated.ToArray()); + } + + /// + /// Creates a new variable type. + /// + private BaseVariableTypeState CreateVariableType(NodeState parent, IDictionary> externalReferences, string path, string name, BuiltInType dataType, int valueRank) + { + BaseDataVariableTypeState type = new BaseDataVariableTypeState(); + + type.SymbolicName = name; + type.SuperTypeId = VariableTypeIds.BaseDataVariableType; + type.NodeId = new NodeId(path, NamespaceIndex); + type.BrowseName = new QualifiedName(name, NamespaceIndex); + type.DisplayName = type.BrowseName.Name; + type.WriteMask = AttributeWriteMask.None; + type.UserWriteMask = AttributeWriteMask.None; + type.IsAbstract = false; + type.DataType = (uint)dataType; + type.ValueRank = valueRank; + type.Value = null; + + IList references = null; + + if (!externalReferences.TryGetValue(VariableTypeIds.BaseDataVariableType, out references)) + { + externalReferences[VariableTypeIds.BaseDataVariableType] = references = new List(); + } + + references.Add(new NodeStateReference(ReferenceTypes.HasSubtype, false, type.NodeId)); + + if (parent != null) + { + parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId); + type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId); + } + + AddPredefinedNode(SystemContext, type); + return type; + } + + /// + /// Creates a new data type. + /// + private DataTypeState CreateDataType(NodeState parent, IDictionary> externalReferences, string path, string name) + { + DataTypeState type = new DataTypeState(); + + type.SymbolicName = name; + type.SuperTypeId = DataTypeIds.Structure; + type.NodeId = new NodeId(path, NamespaceIndex); + type.BrowseName = new QualifiedName(name, NamespaceIndex); + type.DisplayName = type.BrowseName.Name; + type.WriteMask = AttributeWriteMask.None; + type.UserWriteMask = AttributeWriteMask.None; + type.IsAbstract = false; + + IList references = null; + + if (!externalReferences.TryGetValue(DataTypeIds.Structure, out references)) + { + externalReferences[DataTypeIds.Structure] = references = new List(); + } + + references.Add(new NodeStateReference(ReferenceTypeIds.HasSubtype, false, type.NodeId)); + + if (parent != null) + { + parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId); + type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId); + } + + AddPredefinedNode(SystemContext, type); + return type; + } + + /// + /// Creates a new reference type. + /// + private ReferenceTypeState CreateReferenceType(NodeState parent, IDictionary> externalReferences, string path, string name) + { + ReferenceTypeState type = new ReferenceTypeState(); + + type.SymbolicName = name; + type.SuperTypeId = ReferenceTypeIds.NonHierarchicalReferences; + type.NodeId = new NodeId(path, NamespaceIndex); + type.BrowseName = new QualifiedName(name, NamespaceIndex); + type.DisplayName = type.BrowseName.Name; + type.WriteMask = AttributeWriteMask.None; + type.UserWriteMask = AttributeWriteMask.None; + type.IsAbstract = false; + type.Symmetric = true; + type.InverseName = name; + + IList references = null; + + if (!externalReferences.TryGetValue(ReferenceTypeIds.NonHierarchicalReferences, out references)) + { + externalReferences[ReferenceTypeIds.NonHierarchicalReferences] = references = new List(); + } + + references.Add(new NodeStateReference(ReferenceTypeIds.HasSubtype, false, type.NodeId)); + + if (parent != null) + { + parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId); + type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId); + } + + AddPredefinedNode(SystemContext, type); + return type; + } + + /// + /// Creates a new view. + /// + private ViewState CreateView(NodeState parent, IDictionary> externalReferences, string path, string name) + { + ViewState type = new ViewState(); + + type.SymbolicName = name; + type.NodeId = new NodeId(path, NamespaceIndex); + type.BrowseName = new QualifiedName(name, NamespaceIndex); + type.DisplayName = type.BrowseName.Name; + type.WriteMask = AttributeWriteMask.None; + type.UserWriteMask = AttributeWriteMask.None; + type.ContainsNoLoops = true; + + IList references = null; + + if (!externalReferences.TryGetValue(ObjectIds.ViewsFolder, out references)) + { + externalReferences[ObjectIds.ViewsFolder] = references = new List(); + } + + type.AddReference(ReferenceTypeIds.Organizes, true, ObjectIds.ViewsFolder); + references.Add(new NodeStateReference(ReferenceTypeIds.Organizes, false, type.NodeId)); + + if (parent != null) + { + parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId); + type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId); + } + + AddPredefinedNode(SystemContext, type); + return type; + } + + /// + /// Creates a new method. + /// + private MethodState CreateMethod(NodeState parent, string path, string name) + { + MethodState method = new MethodState(parent); + + method.SymbolicName = name; + method.ReferenceTypeId = ReferenceTypeIds.HasComponent; + method.NodeId = new NodeId(path, NamespaceIndex); + method.BrowseName = new QualifiedName(path, NamespaceIndex); + method.DisplayName = new LocalizedText("en", name); + method.WriteMask = AttributeWriteMask.None; + method.UserWriteMask = AttributeWriteMask.None; + method.Executable = true; + method.UserExecutable = true; + + if (parent != null) + { + parent.AddChild(method); + } + + return method; + } + + private ServiceResult OnVoidCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + return ServiceResult.Good; + } + + private ServiceResult OnAddCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + + // all arguments must be provided. + if (inputArguments.Count < 2) + { + return StatusCodes.BadArgumentsMissing; + } + + try + { + float floatValue = (float)inputArguments[0]; + UInt32 uintValue = (UInt32)inputArguments[1]; + + // set output parameter + outputArguments[0] = (float)(floatValue + uintValue); + return ServiceResult.Good; + } + catch + { + return new ServiceResult(StatusCodes.BadInvalidArgument); + } + } + + private ServiceResult OnMultiplyCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + + // all arguments must be provided. + if (inputArguments.Count < 2) + { + return StatusCodes.BadArgumentsMissing; + } + + try + { + Int16 op1 = (Int16)inputArguments[0]; + UInt16 op2 = (UInt16)inputArguments[1]; + + // set output parameter + outputArguments[0] = (Int32)(op1 * op2); + return ServiceResult.Good; + } + catch + { + return new ServiceResult(StatusCodes.BadInvalidArgument); + } + } + + private ServiceResult OnDivideCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + + // all arguments must be provided. + if (inputArguments.Count < 2) + { + return StatusCodes.BadArgumentsMissing; + } + + try + { + Int32 op1 = (Int32)inputArguments[0]; + UInt16 op2 = (UInt16)inputArguments[1]; + + // set output parameter + outputArguments[0] = (float)((float)op1 / (float)op2); + return ServiceResult.Good; + } + catch + { + return new ServiceResult(StatusCodes.BadInvalidArgument); + } + } + + private ServiceResult OnSubstractCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + + // all arguments must be provided. + if (inputArguments.Count < 2) + { + return StatusCodes.BadArgumentsMissing; + } + + try + { + Int16 op1 = (Int16)inputArguments[0]; + Byte op2 = (Byte)inputArguments[1]; + + // set output parameter + outputArguments[0] = (Int16)(op1 - op2); + return ServiceResult.Good; + } + catch + { + return new ServiceResult(StatusCodes.BadInvalidArgument); + } + } + + private ServiceResult OnHelloCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + + // all arguments must be provided. + if (inputArguments.Count < 1) + { + return StatusCodes.BadArgumentsMissing; + } + + try + { + string op1 = (string)inputArguments[0]; + + // set output parameter + outputArguments[0] = (string)("hello " + op1); + return ServiceResult.Good; + } + catch + { + return new ServiceResult(StatusCodes.BadInvalidArgument); + } + } + + private ServiceResult OnInputCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + + // all arguments must be provided. + if (inputArguments.Count < 1) + { + return StatusCodes.BadArgumentsMissing; + } + + return ServiceResult.Good; + } + + private ServiceResult OnOutputCall( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + // all arguments must be provided. + try + { + // set output parameter + outputArguments[0] = (string)("Output"); + return ServiceResult.Good; + } + catch + { + return new ServiceResult(StatusCodes.BadInvalidArgument); + } + } + + private object GetNewValue(BaseVariableState variable) + { + if (m_generator == null) + { + m_generator = new Opc.Ua.Test.DataGenerator(null); + m_generator.BoundaryValueFrequency = 0; + } + + object value = null; + int retryCount = 0; + + while (value == null && retryCount < 10) + { + value = m_generator.GetRandom(variable.DataType, variable.ValueRank, new uint[] { 10 }, Server.TypeTree); + retryCount++; + } + + return value; + } + + private void DoSimulation(object state) + { + try + { + lock (Lock) + { + foreach (BaseDataVariableState variable in m_dynamicNodes) + { + variable.Value = GetNewValue(variable); + variable.Timestamp = DateTime.UtcNow; + variable.ClearChangeMasks(SystemContext, false); + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error doing simulation."); + } + } + + /// + /// Frees any resources allocated for the address space. + /// + public override void DeleteAddressSpace() + { + lock (Lock) + { + // TBD + } + } + + /// + /// Returns a unique handle for the node. + /// + protected override NodeHandle GetManagerHandle(ServerSystemContext context, NodeId nodeId, IDictionary cache) + { + lock (Lock) + { + // quickly exclude nodes that are not in the namespace. + if (!IsNodeIdInNamespace(nodeId)) + { + return null; + } + + NodeState node = null; + + if (!PredefinedNodes.TryGetValue(nodeId, out node)) + { + return null; + } + + NodeHandle handle = new NodeHandle(); + + handle.NodeId = nodeId; + handle.Node = node; + handle.Validated = true; + + return handle; + } + } + + /// + /// Verifies that the specified node exists. + /// + protected override NodeState ValidateNode( + ServerSystemContext context, + NodeHandle handle, + IDictionary cache) + { + // not valid if no root. + if (handle == null) + { + return null; + } + + // check if previously validated. + if (handle.Validated) + { + return handle.Node; + } + + // TBD + + return null; + } + #endregion + + #region Overrides + #endregion + + #region Private Fields + private ReferenceServerConfiguration m_configuration; + private Opc.Ua.Test.DataGenerator m_generator; + private Timer m_simulationTimer; + private UInt16 m_simulationInterval = 1000; + private bool m_simulationEnabled = true; + private List m_dynamicNodes; + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServer.cs b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServer.cs new file mode 100644 index 00000000..56ddc2be --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServer.cs @@ -0,0 +1,333 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using Opc.Ua; +using Opc.Ua.Server; + +namespace Quickstarts.ReferenceServer +{ + /// + /// Implements a basic Quickstart Server. + /// + /// + /// Each server instance must have one instance of a StandardServer object which is + /// responsible for reading the configuration file, creating the endpoints and dispatching + /// incoming requests to the appropriate handler. + /// + /// This sub-class specifies non-configurable metadata such as Product Name and initializes + /// the EmptyNodeManager which provides access to the data exposed by the Server. + /// + public partial class ReferenceServer : ReverseConnectServer + { + #region Overridden Methods + /// + /// Creates the node managers for the server. + /// + /// + /// This method allows the sub-class create any additional node managers which it uses. The SDK + /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification. + /// Any additional NodeManagers are expected to handle application specific nodes. + /// + protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) + { + Utils.Trace("Creating the Node Managers."); + + List nodeManagers = new List(); + + // create the custom node managers. + nodeManagers.Add(new ReferenceNodeManager(server, configuration)); + + // create master node manager. + return new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); + } + + /// + /// Loads the non-configurable properties for the application. + /// + /// + /// These properties are exposed by the server but cannot be changed by administrators. + /// + protected override ServerProperties LoadServerProperties() + { + ServerProperties properties = new ServerProperties(); + + properties.ManufacturerName = "OPC Foundation"; + properties.ProductName = "Quickstart Reference Server"; + properties.ProductUri = "http://opcfoundation.org/Quickstart/ReferenceServer/v1.04"; + properties.SoftwareVersion = Utils.GetAssemblySoftwareVersion(); + properties.BuildNumber = Utils.GetAssemblyBuildNumber(); + properties.BuildDate = Utils.GetAssemblyTimestamp(); + + return properties; + } + + /// + /// Creates the resource manager for the server. + /// + protected override ResourceManager CreateResourceManager(IServerInternal server, ApplicationConfiguration configuration) + { + ResourceManager resourceManager = new ResourceManager(server, configuration); + + System.Reflection.FieldInfo[] fields = typeof(StatusCodes).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); + + foreach (System.Reflection.FieldInfo field in fields) + { + uint? id = field.GetValue(typeof(StatusCodes)) as uint?; + + if (id != null) + { + resourceManager.Add(id.Value, "en-US", field.Name); + } + } + + return resourceManager; + } + + /// + /// Initializes the server before it starts up. + /// + /// + /// This method is called before any startup processing occurs. The sub-class may update the + /// configuration object or do any other application specific startup tasks. + /// + protected override void OnServerStarting(ApplicationConfiguration configuration) + { + Utils.Trace("The server is starting."); + + base.OnServerStarting(configuration); + + // it is up to the application to decide how to validate user identity tokens. + // this function creates validator for X509 identity tokens. + CreateUserIdentityValidators(configuration); + } + + /// + /// Called after the server has been started. + /// + protected override void OnServerStarted(IServerInternal server) + { + base.OnServerStarted(server); + + // request notifications when the user identity is changed. all valid users are accepted by default. + server.SessionManager.ImpersonateUser += new ImpersonateEventHandler(SessionManager_ImpersonateUser); + + try + { + // allow a faster sampling interval for CurrentTime node. + ServerInternal.Status.Variable.CurrentTime.MinimumSamplingInterval = 250; + } + catch + { } + + } + #endregion + + #region User Validation Functions + /// + /// Creates the objects used to validate the user identity tokens supported by the server. + /// + private void CreateUserIdentityValidators(ApplicationConfiguration configuration) + { + for (int ii = 0; ii < configuration.ServerConfiguration.UserTokenPolicies.Count; ii++) + { + UserTokenPolicy policy = configuration.ServerConfiguration.UserTokenPolicies[ii]; + + // create a validator for a certificate token policy. + if (policy.TokenType == UserTokenType.Certificate) + { + // check if user certificate trust lists are specified in configuration. + if (configuration.SecurityConfiguration.TrustedUserCertificates != null && + configuration.SecurityConfiguration.UserIssuerCertificates != null) + { + CertificateValidator certificateValidator = new CertificateValidator(); + certificateValidator.Update(configuration.SecurityConfiguration).Wait(); + certificateValidator.Update(configuration.SecurityConfiguration.UserIssuerCertificates, + configuration.SecurityConfiguration.TrustedUserCertificates, + configuration.SecurityConfiguration.RejectedCertificateStore); + + // set custom validator for user certificates. + m_userCertificateValidator = certificateValidator.GetChannelValidator(); + } + } + } + } + + /// + /// Called when a client tries to change its user identity. + /// + private void SessionManager_ImpersonateUser(Session session, ImpersonateEventArgs args) + { + // check for a user name token. + UserNameIdentityToken userNameToken = args.NewIdentity as UserNameIdentityToken; + + if (userNameToken != null) + { + args.Identity = VerifyPassword(userNameToken); + + // set AuthenticatedUser role for accepted user/password authentication + args.Identity.GrantedRoleIds.Add(ObjectIds.WellKnownRole_AuthenticatedUser); + + if (args.Identity is SystemConfigurationIdentity) + { + // set ConfigureAdmin role for user with permission to configure server + args.Identity.GrantedRoleIds.Add(ObjectIds.WellKnownRole_ConfigureAdmin); + args.Identity.GrantedRoleIds.Add(ObjectIds.WellKnownRole_SecurityAdmin); + } + + return; + } + + // check for x509 user token. + X509IdentityToken x509Token = args.NewIdentity as X509IdentityToken; + + if (x509Token != null) + { + VerifyUserTokenCertificate(x509Token.Certificate); + args.Identity = new UserIdentity(x509Token); + Utils.Trace("X509 Token Accepted: {0}", args.Identity.DisplayName); + + // set AuthenticatedUser role for accepted certificate authentication + args.Identity.GrantedRoleIds.Add(ObjectIds.WellKnownRole_AuthenticatedUser); + + return; + } + + // allow anonymous authentication and set Anonymous role for this authentication + args.Identity = new UserIdentity(); + args.Identity.GrantedRoleIds.Add(ObjectIds.WellKnownRole_Anonymous); + } + + /// + /// Validates the password for a username token. + /// + private IUserIdentity VerifyPassword(UserNameIdentityToken userNameToken) + { + var userName = userNameToken.UserName; + var password = userNameToken.DecryptedPassword; + if (String.IsNullOrEmpty(userName)) + { + // an empty username is not accepted. + throw ServiceResultException.Create(StatusCodes.BadIdentityTokenInvalid, + "Security token is not a valid username token. An empty username is not accepted."); + } + + if (String.IsNullOrEmpty(password)) + { + // an empty password is not accepted. + throw ServiceResultException.Create(StatusCodes.BadIdentityTokenRejected, + "Security token is not a valid username token. An empty password is not accepted."); + } + + // User with permission to configure server + if (userName == "sysadmin" && password == "demo") + { + return new SystemConfigurationIdentity(new UserIdentity(userNameToken)); + } + + // standard users for CTT verification + if (!((userName == "user1" && password == "password") || + (userName == "user2" && password == "password1"))) + { + // construct translation object with default text. + TranslationInfo info = new TranslationInfo( + "InvalidPassword", + "en-US", + "Invalid username or password.", + userName); + + // create an exception with a vendor defined sub-code. + throw new ServiceResultException(new ServiceResult( + StatusCodes.BadUserAccessDenied, + "InvalidPassword", + LoadServerProperties().ProductUri, + new LocalizedText(info))); + } + + return new UserIdentity(userNameToken); + } + + /// + /// Verifies that a certificate user token is trusted. + /// + private void VerifyUserTokenCertificate(X509Certificate2 certificate) + { + try + { + if (m_userCertificateValidator != null) + { + m_userCertificateValidator.Validate(certificate); + } + else + { + CertificateValidator.Validate(certificate); + } + } + catch (Exception e) + { + TranslationInfo info; + StatusCode result = StatusCodes.BadIdentityTokenRejected; + ServiceResultException se = e as ServiceResultException; + if (se != null && se.StatusCode == StatusCodes.BadCertificateUseNotAllowed) + { + info = new TranslationInfo( + "InvalidCertificate", + "en-US", + "'{0}' is an invalid user certificate.", + certificate.Subject); + + result = StatusCodes.BadIdentityTokenInvalid; + } + else + { + // construct translation object with default text. + info = new TranslationInfo( + "UntrustedCertificate", + "en-US", + "'{0}' is not a trusted user certificate.", + certificate.Subject); + } + + // create an exception with a vendor defined sub-code. + throw new ServiceResultException(new ServiceResult( + result, + info.Key, + LoadServerProperties().ProductUri, + new LocalizedText(info))); + } + } + #endregion + + #region Private Fields + private ICertificateValidator m_userCertificateValidator; + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServerConfiguration.cs b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServerConfiguration.cs new file mode 100644 index 00000000..bece9cd7 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServerConfiguration.cs @@ -0,0 +1,86 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ServiceModel; +using System.Runtime.Serialization; +using System.Collections.Generic; +using Opc.Ua.Server; + +namespace Quickstarts.ReferenceServer +{ + /// + /// Stores the configuration the data access node manager. + /// + [DataContract(Namespace=Namespaces.ReferenceApplications)] + public class ReferenceServerConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ReferenceServerConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + /// + /// Whether the user dialog for accepting invalid certificates should be displayed. + /// + [DataMember(Order = 1)] + public bool ShowCertificateValidationDialog + { + get { return m_showCertificateValidationDialog; } + set { m_showCertificateValidationDialog = value; } + } + #endregion + + #region Private Members + private bool m_showCertificateValidationDialog; + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServerUtils.cs b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServerUtils.cs new file mode 100644 index 00000000..d8c009ed --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/ReferenceServerUtils.cs @@ -0,0 +1,537 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua; +using Opc.Ua.Server; +using System; +using System.Collections.Generic; +using System.Data; + +namespace Quickstarts.ReferenceServer +{ + /// + /// The interface that a server exposes to objects that it contains. + /// + public static class ServerUtils + { + private enum EventType + { + WriteValue, + CreateItem, + ModifyItem, + QueueValue, + FilterValue, + DiscardValue, + PublishValue + } + + private class Event + { + public DateTime Timestamp; + public EventType EventType; + public NodeId NodeId; + public uint ServerHandle; + public DataValue Value; + public MonitoringParameters Parameters; + public MonitoringMode MonitoringMode; + } + + private static Queue m_events = new Queue(); + private static bool m_eventsEnabled; + + /// + /// Whether event queuing is enabled. + /// + public static bool EventsEnabled + { + get { return m_eventsEnabled; } + + set + { + if (m_eventsEnabled != value) + { + if (!value) + { + lock (m_events) + { + m_events.Clear(); + } + } + } + + m_eventsEnabled = value; + } + } + + /// + /// Empties the event queue and saves it in the dataset. + /// + public static DataSet EmptyQueue(DataSet dataset) + { + if (dataset == null) + { + dataset = new DataSet(); + dataset.Tables.Add("MonitoredItems"); + + dataset.Tables[0].Columns.Add("Id", typeof(uint)); + dataset.Tables[0].Columns.Add("Timestamp", typeof(string)); + dataset.Tables[0].Columns.Add("EventType", typeof(string)); + dataset.Tables[0].Columns.Add("NodeId", typeof(NodeId)); + dataset.Tables[0].Columns.Add("MonitoringMode", typeof(MonitoringMode)); + dataset.Tables[0].Columns.Add("SamplingInterval", typeof(double)); + dataset.Tables[0].Columns.Add("QueueSize", typeof(uint)); + dataset.Tables[0].Columns.Add("DiscardOldest", typeof(bool)); + dataset.Tables[0].Columns.Add("Filter", typeof(string)); + dataset.Tables[0].Columns.Add("Value", typeof(Variant)); + dataset.Tables[0].Columns.Add("StatusCode", typeof(StatusCode)); + dataset.Tables[0].Columns.Add("SourceTimestamp", typeof(string)); + dataset.Tables[0].Columns.Add("ServerTimestamp", typeof(string)); + + dataset.Tables[0].DefaultView.Sort = "Timestamp"; + } + + lock (m_events) + { + while (m_events.Count > 0) + { + Event e = m_events.Dequeue(); + + DataRow row = dataset.Tables[0].NewRow(); + + row[0] = e.ServerHandle; + row[1] = e.Timestamp.ToLocalTime().ToString("HH:mm:ss.ffffff"); + row[2] = e.EventType.ToString(); + row[3] = e.NodeId; + + if (e.Parameters != null) + { + row[4] = e.MonitoringMode; + row[5] = e.Parameters.SamplingInterval; + row[6] = e.Parameters.QueueSize; + row[7] = e.Parameters.DiscardOldest; + + if (e.Parameters.Filter != null) + { + row[8] = e.Parameters.Filter.ToString(); + } + } + + if (e.Value != null) + { + row[9] = e.Value.WrappedValue; + row[10] = e.Value.StatusCode; + row[11] = e.Value.ServerTimestamp.ToLocalTime().ToString("HH:mm:ss.fff"); + row[12] = e.Value.ServerTimestamp.ToLocalTime().ToString("HH:mm:ss.fff"); + } + + dataset.Tables[0].Rows.Add(row); + } + } + + dataset.AcceptChanges(); + return dataset; + } + + /// + /// Reports a value written. + /// + public static void ReportWriteValue(NodeId nodeId, DataValue value, StatusCode error) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.WriteValue; + e.NodeId = nodeId; + e.ServerHandle = 0; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + + if (StatusCode.IsBad(error)) + { + e.Value = new DataValue(error); + e.Value.WrappedValue = value.WrappedValue; + } + + m_events.Enqueue(e); + } + } + + /// + /// Reports a value queued. + /// + public static void ReportQueuedValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.QueueValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a value excluded by the filter. + /// + public static void ReportFilteredValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.FilterValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a value discarded because of queue overflow. + /// + public static void ReportDiscardedValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.DiscardValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a value published. + /// + public static void ReportPublishValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.PublishValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a new monitored item. + /// + public static void ReportCreateMonitoredItem( + NodeId nodeId, + uint serverHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + MonitoringFilter filter, + MonitoringMode monitoringMode) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.CreateItem; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = null; + e.Parameters = new MonitoringParameters(); + e.Parameters.SamplingInterval = samplingInterval; + e.Parameters.QueueSize = queueSize; + e.Parameters.DiscardOldest = discardOldest; + e.Parameters.Filter = new ExtensionObject(filter); + e.MonitoringMode = monitoringMode; + m_events.Enqueue(e); + } + } + + /// + /// Reports a modified monitored item. + /// + public static void ReportModifyMonitoredItem( + NodeId nodeId, + uint serverHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + MonitoringFilter filter, + MonitoringMode monitoringMode) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.ModifyItem; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = null; + e.Parameters = new MonitoringParameters(); + e.Parameters.SamplingInterval = samplingInterval; + e.Parameters.QueueSize = queueSize; + e.Parameters.DiscardOldest = discardOldest; + e.Parameters.Filter = new ExtensionObject(filter); + e.MonitoringMode = monitoringMode; + m_events.Enqueue(e); + } + } + + #region Error and Diagnostics + /// + /// Fills in the diagnostic information after an error. + /// + public static uint CreateError( + uint code, + OperationContext context, + DiagnosticInfoCollection diagnosticInfos, + int index) + { + ServiceResult error = new ServiceResult(code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[index] = new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable); + } + + return error.Code; + } + + /// + /// Fills in the diagnostic information after an error. + /// + public static bool CreateError( + uint code, + StatusCodeCollection results, + DiagnosticInfoCollection diagnosticInfos, + OperationContext context) + { + ServiceResult error = new ServiceResult(code); + results.Add(error.Code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable)); + return true; + } + + return false; + } + + /// + /// Fills in the diagnostic information after an error. + /// + public static bool CreateError( + uint code, + StatusCodeCollection results, + DiagnosticInfoCollection diagnosticInfos, + int index, + OperationContext context) + { + ServiceResult error = new ServiceResult(code); + results[index] = error.Code; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[index] = new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable); + return true; + } + + return false; + } + + /// + /// Creates a place holder in the lists for the results. + /// + public static void CreateSuccess( + StatusCodeCollection results, + DiagnosticInfoCollection diagnosticInfos, + OperationContext context) + { + results.Add(StatusCodes.Good); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + + /// + /// Creates a collection of diagnostics from a set of errors. + /// + public static DiagnosticInfoCollection CreateDiagnosticInfoCollection( + OperationContext context, + IList errors) + { + // all done if no diagnostics requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) == 0) + { + return null; + } + + // create diagnostics. + DiagnosticInfoCollection results = new DiagnosticInfoCollection(errors.Count); + + foreach (ServiceResult error in errors) + { + if (ServiceResult.IsBad(error)) + { + results.Add(new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable)); + } + else + { + results.Add(null); + } + } + + return results; + } + + /// + /// Creates a collection of status codes and diagnostics from a set of errors. + /// + public static StatusCodeCollection CreateStatusCodeCollection( + OperationContext context, + IList errors, + out DiagnosticInfoCollection diagnosticInfos) + { + diagnosticInfos = null; + + bool noErrors = true; + StatusCodeCollection results = new StatusCodeCollection(errors.Count); + + foreach (ServiceResult error in errors) + { + if (ServiceResult.IsBad(error)) + { + results.Add(error.Code); + noErrors = false; + } + else + { + results.Add(StatusCodes.Good); + } + } + + // only generate diagnostics if errors exist. + if (noErrors) + { + diagnosticInfos = CreateDiagnosticInfoCollection(context, errors); + } + + return results; + } + + /// + /// Creates the diagnostic info and translates any strings. + /// + /// The server. + /// The context containing the string stable. + /// The error to translate. + /// The diagnostics with references to the strings in the context string table. + public static DiagnosticInfo CreateDiagnosticInfo( + IServerInternal server, + OperationContext context, + ServiceResult error) + { + if (error == null) + { + return null; + } + + ServiceResult translatedError = error; + + if ((context.DiagnosticsMask & DiagnosticsMasks.LocalizedText) != 0) + { + translatedError = server.ResourceManager.Translate(context.PreferredLocales, error); + } + + DiagnosticInfo diagnosticInfo = new DiagnosticInfo( + translatedError, + context.DiagnosticsMask, + false, + context.StringTable); + + return diagnosticInfo; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ReferenceServer/Resources/OPCFoundation.jpg b/IOB-OPC-UA/Applications/ReferenceServer/Resources/OPCFoundation.jpg new file mode 100644 index 00000000..d76f480e Binary files /dev/null and b/IOB-OPC-UA/Applications/ReferenceServer/Resources/OPCFoundation.jpg differ diff --git a/IOB-OPC-UA/Applications/ReferenceServer/SerilogTraceLogger.cs b/IOB-OPC-UA/Applications/ReferenceServer/SerilogTraceLogger.cs new file mode 100644 index 00000000..f78a2827 --- /dev/null +++ b/IOB-OPC-UA/Applications/ReferenceServer/SerilogTraceLogger.cs @@ -0,0 +1,135 @@ +/* ======================================================================== + * 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 Opc.Ua; +using Serilog; +using Serilog.Events; + +namespace Quickstarts.ReferenceServer +{ + /// + /// A sample serilog trace logger replacement. + /// + public class SerilogTraceLogger + { + private int m_traceMask; + private ILogger m_logger; + + /// + /// Create a serilog trace logger which replaces the default logging. + /// + /// The application configuration. + /// The min log level for file output. + public static SerilogTraceLogger Create( + ApplicationConfiguration config, + LogEventLevel fileMinimumLevel = LogEventLevel.Information) + { + return Create(null, config, fileMinimumLevel); + } + + /// + /// Create a serilog trace logger which replaces the default logging. + /// + /// The logger configuration. + /// The application configuration. + /// The min log level for file output. + public static SerilogTraceLogger Create( + LoggerConfiguration loggerConfiguration, + ApplicationConfiguration config, + LogEventLevel fileMinimumLevel = LogEventLevel.Information) + { + if (loggerConfiguration == null) + { + loggerConfiguration = new LoggerConfiguration(); + } + // add file logging + if (!string.IsNullOrWhiteSpace(config.TraceConfiguration.OutputFilePath)) + { + loggerConfiguration.WriteTo.File( + Utils.ReplaceSpecialFolderNames(config.TraceConfiguration.OutputFilePath), + rollingInterval: RollingInterval.Day, + rollOnFileSizeLimit: true, + restrictedToMinimumLevel: fileMinimumLevel, + retainedFileCountLimit: 10, + flushToDiskInterval: TimeSpan.FromSeconds(13)); + } + + ILogger logger = loggerConfiguration + .MinimumLevel.Information() + .CreateLogger(); + + SerilogTraceLogger traceLogger = new SerilogTraceLogger(logger, config.TraceConfiguration.TraceMasks); + + // disable the built in tracing, use serilog + Utils.SetTraceMask(Utils.TraceMask & Utils.TraceMasks.StackTrace); + Utils.SetTraceOutput(Utils.TraceOutput.Off); + Utils.Tracing.TraceEventHandler += traceLogger.TraceEventHandler; + + return traceLogger; + } + + /// + /// Ctor of trace logger. + /// + /// The logger + /// The trace mask + public SerilogTraceLogger(ILogger logger, int traceMask) + { + m_logger = logger; + m_traceMask = traceMask; + } + + /// + /// Callback for logging OPC UA stack trace output + /// + /// Sender object + /// The trace event args. + public void TraceEventHandler(object sender, TraceEventArgs e) + { + if ((e.TraceMask & m_traceMask) != 0) + { + if (e.Exception != null) + { + m_logger.Error(e.Exception, e.Format, e.Arguments); + return; + } + switch (e.TraceMask) + { + case Utils.TraceMasks.OperationDetail: + case Utils.TraceMasks.Information: m_logger.Verbose(e.Format, e.Arguments); break; + case Utils.TraceMasks.Error: m_logger.Error(e.Format, e.Arguments); break; + case Utils.TraceMasks.StackTrace: + case Utils.TraceMasks.Security: m_logger.Warning(e.Format, e.Arguments); break; + default: m_logger.Information(e.Format, e.Arguments); break; + } + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.cs new file mode 100644 index 00000000..ab0fc043 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.cs @@ -0,0 +1,222 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace Opc.Ua.Server.Controls +{ + /// + /// A dialog that displays an exception trace in an HTML page. + /// + public partial class ExceptionDlg : Form + { + /// + /// Initializes a new instance of the class. + /// + public ExceptionDlg() + { + InitializeComponent(); + } + + private Exception m_exception; + + /// + /// Replaces all special characters in the message. + /// + private string ReplaceSpecialCharacters(string message) + { + message = message.Replace("&", "&"); + message = message.Replace("<", "<"); + message = message.Replace(">", ">"); + message = message.Replace("\"", """); + message = message.Replace("'", "'"); + message = message.Replace("\r\n", "
"); + + return message; + } + + private void AddBlock(StringBuilder buffer, string text) + { + AddBlock(buffer, text, 0); + } + + private void AddBlock(StringBuilder buffer, string text, int level) + { + if (!String.IsNullOrEmpty(text)) + { + if (level > 0) + { + if (level == 1) + { + buffer.Append(""); + buffer.Append("

"); + } + else + { + buffer.Append(""); + buffer.Append("

"); + } + + buffer.Append(ReplaceSpecialCharacters(text)); + buffer.Append("

"); + buffer.Append(""); + } + } + + private void Add(StringBuilder buffer, Exception e, bool showStackTrace) + { + AddBlock(buffer, "EXCEPTION (" + e.GetType().Name + ")", 1); + AddBlock(buffer, e.Message); + + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + ServiceResult sr = new ServiceResult(sre); + + while (sr != null) + { + AddBlock(buffer, "SERVICE RESULT (" + new StatusCode(sr.Code).ToString() + ")", 2); + + string text = (sr.LocalizedText != null) ? sr.LocalizedText.Text : null; + + if (text != e.Message) + { + AddBlock(buffer, text); + } + + AddBlock(buffer, sr.SymbolicId); + AddBlock(buffer, sr.NamespaceUri); + + if (showStackTrace) + { + if (!String.IsNullOrEmpty(sre.AdditionalInfo)) + { + AddBlock(buffer, "ADDITIONAL INFO (" + new StatusCode(sr.Code).ToString() + ")", 3); + AddBlock(buffer, sre.AdditionalInfo); + } + } + + sr = sr.InnerResult; + } + } + + if (showStackTrace) + { + AddBlock(buffer, "STACK TRACE", 3); + AddBlock(buffer, e.StackTrace); + } + } + + private void Show(bool showStackTrace) + { + StringBuilder buffer = new StringBuilder(); + buffer.Append(""); + //buffer.Append(ExceptionBrowser.Parent.Width); + //buffer.Append("px'>"); + buffer.Append(""); + + Exception e = m_exception; + + while (e != null) + { + Add(buffer, e, showStackTrace); + e = e.InnerException; + } + + buffer.Append("
"); + buffer.Append(""); + + ExceptionBrowser.DocumentText = buffer.ToString(); + } + + /// + /// Displays the exception in a dialog. + /// + public static void Show(string caption, Exception e) + { + // check if running as a service. + if (!Environment.UserInteractive) + { + Utils.Trace(e, "Unexpected error in '{0}'.", caption); + return; + } + + new ExceptionDlg().ShowDialog(caption, e); + } + + /// + /// Display the exception in the dialog. + /// + public void ShowDialog(string caption, Exception e) + { + if (!String.IsNullOrEmpty(caption)) + { + Text = caption; + } + + m_exception = e; + + #if _DEBUG + ShowStackTracesCK.Checked = true; + #else + ShowStackTracesCK.Checked = false; + #endif + + Show(ShowStackTracesCK.Checked); + ShowDialog(); + } + + private void OkButton_Click(object sender, EventArgs e) + { + Close(); + } + + private void ShowStackTracesCK_CheckedChanged(object sender, EventArgs e) + { + Show(ShowStackTracesCK.Checked); + } + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.designer.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.designer.cs new file mode 100644 index 00000000..c0a2daf8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.designer.cs @@ -0,0 +1,151 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Server.Controls +{ + partial class ExceptionDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BottomPN = new System.Windows.Forms.Panel(); + this.ShowStackTracesCK = new System.Windows.Forms.CheckBox(); + this.CloseBTN = new System.Windows.Forms.Button(); + this.MainPN = new System.Windows.Forms.Panel(); + this.ExceptionBrowser = new System.Windows.Forms.WebBrowser(); + this.BottomPN.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SuspendLayout(); + // + // BottomPN + // + this.BottomPN.Controls.Add(this.ShowStackTracesCK); + this.BottomPN.Controls.Add(this.CloseBTN); + this.BottomPN.Dock = System.Windows.Forms.DockStyle.Bottom; + this.BottomPN.Location = new System.Drawing.Point(0, 181); + this.BottomPN.Name = "BottomPN"; + this.BottomPN.Size = new System.Drawing.Size(780, 29); + this.BottomPN.TabIndex = 1; + // + // ShowStackTracesCK + // + this.ShowStackTracesCK.AutoSize = true; + this.ShowStackTracesCK.Location = new System.Drawing.Point(3, 7); + this.ShowStackTracesCK.Name = "ShowStackTracesCK"; + this.ShowStackTracesCK.Size = new System.Drawing.Size(138, 17); + this.ShowStackTracesCK.TabIndex = 1; + this.ShowStackTracesCK.Text = "Show Exception Details"; + this.ShowStackTracesCK.UseVisualStyleBackColor = true; + this.ShowStackTracesCK.CheckedChanged += new System.EventHandler(this.ShowStackTracesCK_CheckedChanged); + // + // CloseBTN + // + this.CloseBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.CloseBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CloseBTN.Location = new System.Drawing.Point(353, 3); + this.CloseBTN.Name = "CloseBTN"; + this.CloseBTN.Size = new System.Drawing.Size(75, 23); + this.CloseBTN.TabIndex = 0; + this.CloseBTN.Text = "Close"; + this.CloseBTN.UseVisualStyleBackColor = true; + // + // MainPN + // + this.MainPN.AutoSize = true; + this.MainPN.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.MainPN.Controls.Add(this.ExceptionBrowser); + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 0); + this.MainPN.Name = "MainPN"; + this.MainPN.Size = new System.Drawing.Size(780, 181); + this.MainPN.TabIndex = 1; + // + // ExceptionBrowser + // + this.ExceptionBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.ExceptionBrowser.Location = new System.Drawing.Point(0, 0); + this.ExceptionBrowser.MinimumSize = new System.Drawing.Size(20, 20); + this.ExceptionBrowser.Name = "ExceptionBrowser"; + this.ExceptionBrowser.ScriptErrorsSuppressed = true; + this.ExceptionBrowser.Size = new System.Drawing.Size(780, 181); + this.ExceptionBrowser.TabIndex = 1; + // + // ExceptionDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(780, 210); + this.Controls.Add(this.MainPN); + this.Controls.Add(this.BottomPN); + this.MaximumSize = new System.Drawing.Size(4096, 4096); + this.Name = "ExceptionDlg"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Exception"; + this.BottomPN.ResumeLayout(false); + this.BottomPN.PerformLayout(); + this.MainPN.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel BottomPN; + private System.Windows.Forms.Button CloseBTN; + private System.Windows.Forms.Panel MainPN; + private System.Windows.Forms.WebBrowser ExceptionBrowser; + private System.Windows.Forms.CheckBox ShowStackTracesCK; + + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.resx b/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ExceptionDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.cs new file mode 100644 index 00000000..3e59b27d --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Opc.Ua.Server.Controls +{ + public partial class HeaderBranding : UserControl + { + public HeaderBranding() + { + InitializeComponent(); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + System.Diagnostics.Process.Start(linkLabel1.Text); + } + catch + { + } + } + + private void linkLabel1_Click(object sender, EventArgs e) + { + linkLabel1_LinkClicked(sender, null); + } + + private void pictureBox2_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start("http://www.opcfoundation.org/certification"); + } + catch + { + } + } + + private void ServerHeaderBranding_Load(object sender, EventArgs e) + { + appName.Text = this.Parent.Text; + } + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.designer.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.designer.cs new file mode 100644 index 00000000..299e37fe --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.designer.cs @@ -0,0 +1,131 @@ +namespace Opc.Ua.Server.Controls +{ + partial class HeaderBranding + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HeaderBranding)); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.appName = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(7, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(177, 70); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + this.toolTip1.SetToolTip(this.pictureBox1, "Visit www.opcfoundation.org"); + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.BackColor = System.Drawing.Color.White; + this.linkLabel1.Location = new System.Drawing.Point(200, 22); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(120, 13); + this.linkLabel1.TabIndex = 2; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "www.opcfoundation.org"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + this.linkLabel1.Click += new System.EventHandler(this.linkLabel1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.White; + this.label1.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(200, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(174, 16); + this.label1.TabIndex = 3; + this.label1.Text = "OPC UA Test application"; + // + // label2 + // + this.label2.BackColor = System.Drawing.Color.White; + this.label2.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(3, 74); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(230, 16); + this.label2.TabIndex = 4; + this.label2.Text = "Steamware OPC-UA test app"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // appName + // + this.appName.BackColor = System.Drawing.Color.White; + this.appName.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.appName.Location = new System.Drawing.Point(203, 44); + this.appName.Name = "appName"; + this.appName.Size = new System.Drawing.Size(306, 19); + this.appName.TabIndex = 8; + this.appName.Text = "Client Test Application"; + this.appName.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // HeaderBranding + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.linkLabel1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.appName); + this.MaximumSize = new System.Drawing.Size(0, 100); + this.MinimumSize = new System.Drawing.Size(500, 90); + this.Name = "HeaderBranding"; + this.Padding = new System.Windows.Forms.Padding(3); + this.Size = new System.Drawing.Size(591, 90); + this.Load += new System.EventHandler(this.ServerHeaderBranding_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label appName; + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.resx b/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.resx new file mode 100644 index 00000000..04b7e643 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/HeaderBranding.resx @@ -0,0 +1,545 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAABiYAAAI2CAYAAADUwTBfAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wgAADsIBFShKgAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMtfuaUMAAGElSURBVHhe7d07 + jmRJdi7qnsm9wJkBSb20BifQ4AAaR0yQoEyCSI0EKN4rXI0UKPIIZxKlppLTOFIhU+zb5m7eGRG5PMIf + 9lhm+/uAHwS7qsLM9vbH9rX243cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAsLRPX7796Xf//X8+zC+//van+p8AAAAAALCaW4vB13L67+FBpyZD8Lq6NZoU + AAAAAAArCAq8zQI3eLYhEQYAAAAAgDy6FILfiTPZiXz++j18vbSK1x0AAAAAwGxB8XZ4oIheG70CAAAA + AMBgUbF2YpzJfnDBa6J7AAAAAADo79mHWffO6VY+HEvwOhgWAAAAAAA6igqzWcMxRPt+dAAAAAAA6CAq + yGYPe4v2+awAAAAAANBQVIhdJWzpdMuuaH/PDAAAAAAAzzk9UDoqwC4Wz53YULCfpwcAAAAAgMft0pS4 + 5LQetpD6tQkAAAAAwP12a0r8Jewh2rdJ4uocAAAAAIBHBAXXbcLSlmiaAQAAAABwh6jQultYV7Q/swUA + AAAAgBtFRdZdw5qifZksnmcCAAAAAHCLoMC6cxSP17PUs08AAAAAAPhAVFzdPawl2odZAwAAAADAO6LC + 6lHCOqL9lzUAAAAAAMQ+ffkWF1YPktP6WUOw/9IGAAAAAIAroqLq0cIaon2XNBpeAAAAAACBo18tcYki + 8iKCfZc1XlMAAAAAAJGgoHrYkF+035JGYwIAAAAAIBIUVA8b8ov2W9J8/vrdawoAAAAA4JWgmHr4kFu0 + z7IGAAAAAIA3omLq0UNu0T7LGgAAAAAAfjjdZiYqph49pPbLr7/F+y1jAAAAAAB4ISqkyjnkFu2zjAEA + AAAA4IWokCrnkFu0z5LFg68BAAAAAN4KiqlSQ27RPssWAAAAAAB+8HyJD0J+0X5LktNzMAAAAAAA+GGp + BwhPyKcv3xSWswv2W5oAAAAAAPBGVEyV1yG/aL9NjqslAAAAAAAiQUFV3oT8ov02OwAAAAAABKKCqrwO + a4j23awAAAAAAHBFVFSV12Ed0f4bHLdwAgAAAAB4T1BYlTdhLdE+HBkAAAAAAN4RFVbldVhPtB9HBAAA + AACAD0TFVXkd1hTty05x+yYAAAAAgFsFRVZ5E9YV7c/G+fz1u9cIAAAAAMDNgkKrvAlL+/TlW7xfWwQA + AAAAgDtFxVZ5HbZwut1StH8fCQAAAAAAj2larN0wnh2wqWBffxS3bAIAAAAAaKDrbW42iGL0MZT3wdvU + fwQAAAAAQHNBQV5qAAAAAACAxqKCvJwDAAAAAAA0FhXk5RxI7nLrqZfPi3E7KgAAAAAgNQ/AjqOwS1rB + 6/WjeF4KAAAAAJBLUMg8fCCRU6Msep3emVMjEgAAAABguqCAefhAAqcrHaLX55NxRRAAAAAAMFWrs7F3 + idvekELw2mweAAAAAIBpoqLlUQOzRa/LXgEAAAAAmMFDsM9xD36mC16X3QMAAAAAMEVUsDxaYKboNTkq + AAAAAACjHf2qCVdLMFXwmhweAAAAAIDhomLlUQKTnB64Hr0mB+f0IHwAAAAAgJFOhcmgYLl7ToVhmCV4 + TU4LAAAAAMBwUbFy98Ak2ZqBbmkGAAAAAMwRFCy3DcwUvSZnBwAAAABgtCz3vO8emC16XU6OZ00AAAAA + AFOcbukSFC13iVvWMF3wukwTAAAAAIApooLlBtGUIIXgtZkmAAAAAADTREXL1ZPIIw8/1ljZRLBv0wQA + AAAAYKqocLlqEmh9m6zTM0FYSvbnuHjOBAAAAAAwX1C8XCkprjII5tUyrqRYxyNXygwPAAAAAMBsrc/0 + H5XpZ38Hc+oZDYr8NCYAAAAAAO4RFTGzZqZoPgPjFk95aUwAAAAAANwrKmRmy0zRfGaFdDQmAAAAAAAe + FRU0Z2eitLe7IhWNCQAAAACAJ2Qpsp7mMVH6Z3CQxuk2W9E+SpLZ7yUAAAAAgJtMK7YmsMyDwckj2j9Z + AgAAAACwmt6F+tPfT2KZpsQl5BDtmywBAAAAAFhZq8J9xtvLLNeUuIT5ov2SJQAAAAAAuylNhvdyui3U + CqKi7iphvmi/TE6mq5EAAAAAAHgpKOquFAXoBIL9Mj2D3XXVEQAAAADAYUVF0xXDVOXqoHC/TMrQZlUw + /q05bTcAAAAAgEMJiqXLhrmifTIrAzR9LgsAAAAAwCFEBdKFs8zzPDZ12v7BfhmdIVchBOM+G7ckAwAA + AAD2FxRHlw9zRftkdHqLxmwZAAAAAIAtRQXRHcJ80X4Zld6iMXsEAAAAAGA7UTF0lzBftF96p7dozE5x + WycAAAAAYCtNH9qbMeQQ7Zte6WzKewYAAAAAYBtREXSjeAh2IsH+aZ4RonFHBJimPEj/9DD96L355/zl + nwMAAABwg6DAsl1I49QoivbRkxlWEAzGHhZgiPcaEPdGcxwAAADgjV5F4nQhnVa3Qxr+/IVgDkMDdDHi + Fm3DP68AAAAAMppyr/wZIa1Hm2MzbpmS4v0CtBW9z0YEAAAA4LCiYsmGcSuNdZSGw9sGQPn/U9y7/cWc + ZsVrGRoJ3l9TAgAAAHA4UZFkw6QoarO+4LU1Om4FA08K3lcpAgAAAHAYUXFk18CzotfVjAB3a/lA615x + RRQAAABwDEFhZNvAs6LX1YwA94neR5kDAAAAsLWoILJr4FnR62pGgNtF76EVAgAAALCtqBiya+BZ0etq + RoDbRO+flQIAAACwpagQsmvgWdHrakaAj0XvnRUDAAAAsJ2oCLJr4FnR62pGgPdF75uVAwAAALCVqACy + YX759TeFHZ4XvLZGx2sZPhC8b7YIAAAAwDai4seG+fTlm6IOzwteW8MDXBe9Z3YKAAAAwBaiwseOgVai + 19fIALHo/bJjAAAAAFZ3upIgKnzsFmglen0Nits4wRXB+2XrAAAAACwvKnrsFmjk1ByIXmMjAvzk89fv + 8ftl5wAAAAAsLyp6bBRnmdNc8DrrHa9juCJ4vxwiAAAAAEuLCh47BRqbcoY28LPovXKQaFYCAAAA6wuK + HtsEOhh6S6cJrjVfTs+lgSyC1+ihAgAAALC0qOCxQbKdUVqKvbcUtE9FYfIL9l3zjBbN4Uq8TpkqeE0e + La6aAAAAAJY29OzvkUngdIZ5NLcbo/CUXLDPmmWkaPxbAzNEr8UjBgAAAGBpUcFj4cwu6Ldu9mhQ5NWl + sTdSNP69gYG6vOcWje8GAAAAYGnbFXom6f1gZPf4TyzYX/dmeJExmMPDgVGi19+RAwAAALC0qOCxYKad + QRrMpVvIK9pfH2TKazaYx9OBzno3f5cMAAAAwPKiosdqmSGaR++Q2kcF1Km3YAnm0yzQU/SaE+87AAAA + YHFRwWOlzBDNY1TgEdFrqVHcboyugtec/DkAAAAAy4uKHgtkSkE0mMfwwD2i11DrQC/R60285wAAAIBN + RIWPxNnmHv2PBm4VvX5aBzo4fc5HrzdxpRIAAACwkaD4kTaDnYpA0TwmZerzCljGqAcHez3SRfBakxcB + AAAA2EZU/MiWGaJ5zA58YOgZ59Ba9DqTHwEAAADYSlQASZBpZ2UHc0kTeE/0mukVaC16ncmPAAAAAGwn + KoJMzNT7aQfzSRN4T/Sa6RVoLXqdyY8AAAAA7CjNcxUmWuLhq3BN9HrpFWho1PNRlg4AAADA1qKCyIBM + vUriIphXusAVnjHBqtI0xhPn1LwBAAAA2F5QGOmRac+SiATzyxbFKa4ZddZ5qvcsJ6Ww/zL1f16GxsTH + WXG/AgAAADwuKJC0SLbi5hK3cboEroleL63DNM80nzIXtjUmPo7GBAAAAHBcQbHknqQ+0zqYb9os5FrB + UZGtk2BbNw9D9SjaZ/ss1pj4OD4zAQAAAKpSKIkKSqXoVf73pW479GYNqZPYo1eepG5afeDyPniZqa/9 + YPu2SllbHYXOHn0v3Z0ETq+raG7yl3jvAQAAAOwoKASlTUbRPB/IMg2KYO7vZqRo/Fahu2ENibeZSGPi + hgAAAACwoagQlDWJ9CqiZjw7uEnxdJRo7GdDf9F2H5ip77tgPvIiAAAAAGwoKgRlTRbR3Foni2huz2SE + aNxHQ1/RNp+ZGaJ5yI8AAAAAsKGoEJQ1GUTz6pXZojm1yAjRuPeGvqJtniGjRXOQHwEAAABgQ1EhKGtm + i+bUO7NEc2mZEaJxbw19Rds8U0aKxpcfAQAAAGBDUSEoa2aK5jMqo0Vz6JEBPn/9Ho99JRmf8bGdYLun + zCjR2HLK6Vk+AAAAAGwoKAalzSzRXEZnlGjsnhno2kO8NSMGCrZ/6gzQ5OHym+bUWAQAAABgQ0ExKG0m + OJ2xG81lcIYUz4Nxe0dT4ECC/b9ERojGFZ8NAAAAALta5Wzdabf0COYyLb1FY44I28vS4Hs4vUVjis8G + AAAAgK1FBaFsmSBbMbVrcyYYb1SmNZ0YJ9jvK6X3a3T5xk2H+FwAAAAA2F1QFEqXGaJ5zE4v0Vgjw76i + /b1ieovGPHIAAAAA2Fv22znNOHM26xnMPR4Gm2KtbGm7KwF6isY7cgAAAAA4gKgwlCUzRPPIktaiMQbH + bVs2FezrpdPRKs/7GRIAAAAAjiFrUWxawTqYS5q0Fo0xI2xlu6slLukpGu+IAQAAAOBAogLR7MwSzSVL + WovGmBH2Eu3jHdKRqyb63K4OAAAAgOyCQtG0TJK9OHiaX0vBGFPCNk7F5Wgf75KeovGOFAAAAACOJ0tR + fuYzB7LfgkZjgvSi/btTOtq+qfNeAAAAADiuFIX5maL5JErzpk0wxpSwj2j/7pTeojGPEAAAAACObWpz + YrZoTtnSUvT3Z4QtHOGM/yFXdAXjbh0AAAAAKEY3J4YU+24RzC1TXDFBatG+3TGdHeqWTgAAAADwk6iQ + 1DinIlwSU68WuSE7PmMiTVOK5wX7d8sMkP2zqEW89wEAAAC4LigoNUsyWR4Afi2tmzgpip/sI9q/O2aU + aOydAgAAAAAfigpLjyazaL5Z0kM0zsiwj2j/bpihV3kF428RAAAAALjHo/c/X+a2HcHc06SHaJxBcSuX + zQT7eMc0v6XaR4I5LB0AAAAAeFZpVJRCXZT6r6wlKqRlSS/RWCPCXqJ9vGGmfLYF81gyAAAAAMDPHr0i + pHt6isbrHFdLbCjYzztmWtM1mMtSAQAAAADeERXVZqe3aMyeYT/Rft4wM68GS/HA+jujCQkAAAAAN8hW + /BtWCA3G7hL2FO3rDZPiNnXBvFIGAAAAALhDVGSblZGi8VuGfUX7e8OkaEwUwdxSBQAAAAC4T5pnTcwQ + zaNF2Fu0zzfM6bMhk2COUwMAAAAAPCEquo3OLNFcngn7i/b7jskqmuvIAAAAAACNRAW4UZnsdMuaaF53 + JN3Z5fQT7P8tk100554BAAAAADqIinG9k8hDDQqOJ3od7JhF9LwdnYYjAAAAAIwQFOe6Jbm3jYpffv0t + zwOBmSbNc1k6przW63KX88wVUN7fAAAAADBLULBrHlhZ9JreKQAAAAAAo3U7Kxx2EL22dwoAAAAAwCzP + 3BblZdwihZ1sfzsnAAAAAIAUogLmR4FdRa/3HQIAAAAAkFW5CuJt6j+C7Z0eEB0V9lcPAAAAAACQVFTY + XzkAAAAAAEBe2101AQAAAAAAJBcV+FcMAAAAAACQ3+ev3+NC/0I5XfkBAAAAAAAsIij2LxUAAAAAADia + e688+PTlW66CejDHJQIAAAAAAIcSFcvvTRbR3DIHAAAAAAAOIyqUP5sMonllDAAAAAAAHEJUJG+d2aI5 + ZQoAAAAAABxCVCTvldmiOWUIAAAAAAAcQlQk753ZojnNDAAAAAAAHEJUJB+VyT5//R7Pa2B++fU3TQkA + AAAAAA4iKJQPTwbRvEYEAAAAAAAOIyqUz0oW0dx6BAAAAAAADiUqls9OIqfbK0VzfCJu2QQAAAAAwHEF + hfPZ+fTlW8rC/TNNCs0IAAAAAAAICuhpsojSRIlS/zEAAAAAAPAXUUMgSRT3AQAAAABgJ0EzIF0AAAAA + AIBNRI2AbAEAAAAAADYRNQKSxQOjAQAAAABgA6eCf9AISBkAAAAAAGBxUQMgawAAAAAAgMVFDYCsAQAA + AAAAFhc1ALIGAAAAAABYXNQASJrPX79rTgAAAAAAwNKCBkDWfPryTWMCAAAAAHjtl19/CwuKJYqKkFDw + Xs0aV0wAAAAAACenhkNQRHw3QA7R+zNrAAAAAADC4uGNOV1dAcwVvDfTBgAAAAA4uKhw+EiAeaL3ZNYA + AAAAAAcWFQ2fCTBH9H7MGgAAAADgoKKC4ZNxWyeYKHhPZovPCAAAAAA4qqBg2CzAHNH7MVsAAAAAgIOK + CoYtA4wXvRezBQAAAAA4oKhY2DrAHNH7MUk+ffnmswEAAAAADikoGLaO+8jDJMH7MU0AAAAAgIOKCoY9 + AswRvR8nx9USAAAAAHBQp+JgUDTsEmCO6P04OwAAAADAMWlMwEFE78lZAQAAAACOS2MCDiR6X44OAAAA + AHBsGhNwMNF7c1A8BB8AAAAA+N3nr9/DAmKXADlE78/O0ZQAAAAAAH4IiohdAuQRvUd7BQAAAADglaiQ + 2DinKzOAXIL3avMAAAAAALx1usVKVFBsGSCv6D37ZE7PrwEAAAAAuCooLLaKe8vDIoL3773RkAAAAAAA + bnIqJgZFxiYBlnLv54HmIwAAAADwmKDg+HQAAAAAAACuipoLjwYAAAAAAOBDUZPh3gAAAAAAANzqqWdO + TFbm/jb1HwEAAAAAAJmdHmobNR+iTHLXHP+cz1+/a1QAAAAAAEB26a5ECJoO92T6/AEAAAAAgPzuvULi + wwAAAAAAAISixkKDuL0TrdzaODv9ewAAAAAAJBYUd1tGoZhHPXsVj9ceAAAAAEA2QTG3S+AOzzYk3kaD + AgAAAAAgg6CA2zVwi+i10yoAAAAAAEwUFW57B644PY8kes00jqsnAAAAAABmCAq2I/LpyzdFYX7S+tZN + H0VzAgAAAABgtKBYOyzwwuimxCWaEwAAAAAAowRF2qGBl6LXyKCcbh8FAAAAAEBnQYF2eKCIXhujAwAA + AABAZ1FxdnQgel3MCgAAAAAAfcy6n/9Pgeh1MSsAAAAAAHQSFWVnhGOLXhOzAwAAAABAB1FBdkI8dPjg + gtfE9AAAAAAA0EFUkJ2QT1++KQQfVJrbib3JaV4AAAAAADQWFGRnRGPiwILXQ5oAAAAAANBYVIydEY4r + ej1kCQAAAAAAbaW5jQ7HFb0eksSzTwAAAAAAGjsVXoOC7PBwSKdbeEWvhyRxizEAAAAAgB6CguzwcEjZ + GxOnAAAAAADQWFSMHRmOK3o9ZAsAAAAAwK7uet5DQ9Nv58RxRa+HbAEAAAAA2E5UDL0xze6BH/ztEXEP + /2NzKycAAAAAgJGiIuijaSH6u73DoWVvTGicAQAAAAD7CIqgz+Z0K6hnBH+za6CIXhtJcrrNGQAAAADA + 8oICaKus0px4ep7sI3h9pAkAAAAAwPKi4mfjZG9OaErwSvAaSROmu/fh/D5fAAAAAOCloIjWK0/fGz/4 + my2iaMhbp9dE8FqZHa/VyYJ9cm/cigsAAACAYwuKZt3zrOhvPhO4Jnq9zA5zRPviyXiIOQAAAADHFBTL + hqSF6O/eEWee86HgdTM9jBXtg9YBAAAAgMOICmSj0lL099+JhgR3CV5D08JY0T7oFQAAAAA4hKg4NjId + lFujvH02QPnf3NOdh714LU0P40Tbv3M0TQEAAADY2tvi/ZTAKqLX7+gwTrT9B0VzAgAAAIB9BQWx4YGV + RK/hUWGcaPuPDgAAAABsKSqGDY4zg1nJrKuMvE8GCrb/tAAAAADAdqJC2IzAQkY3JzQlxpnVeHo3AAAA + ALCVqAg2I7CY04PUo9dy45SHttchGSHYB7PjNQAAAADANk7FrqAINiWwquj13CqMFe2DLAEAAACAHWhM + QBut30tu3TRJsC+yxFUTAAAAAOwjKIBNCWzg2QaFhsREwf5IFwAAAADYQlT8mhHYzK0PUdaMSCLYN+kC + AAAAAFuIil+D4xYlwHTBZ1O2aGIBAAAAsIeg+DU8ABPdenVLigAAAADA6j5//R4Xv0ZmcR89V8BZzhzF + ewX+1O+DYL5pAwAAAABbiIpfg7Jq0f6ZM6xPzSDYwDONzVTvg2B+aQMAAAAAO3imyP50FtNyW3m2Bqva + 7n0QzCttAAAAAGAbUQGsc1a6WuKj2zU9FVhJ9BpukZmi+SSNhiYAAAAA25jyrIlVRHNvnJWaNBzTiCur + pr0PgrlkjcYEAAAAAHsJimDdsopo7p2iOUFaweu1a0aL5pA0GhMAAAAA7CcohDXPKqK5d47mBOkEr9Mh + GSkaP2sAAAAAYEtRMaxVVhHNfVA0J8hixO2brmXo+yAYP20AAAAAYFddCpKLmFmM/UtgsinPnXmT0xxG + CMZOGwAAAADYXlQYuzPLXQEQrGFKaO5a08l9+wPBdpqSAVI0I28NAAAAABxGVCD7IMs1JIpgHbOy5PbL + KNi2H+boom0yKcPeB8HY2eIzAQAAAIBD+uj2LssXzoI1TQ2Pi7bnvTmqaFvMzAjRuNkCAAAAAGwmKgRO + jlsMPSDYjs/kaGepn9YbbIeZGbIPgnHTBQAAAADYTFQIzBBuF22/VjmKaO0ZMkI0bpJoUgIAAADAZk5F + v6AYmCLcJtp2rXME0bozZIRo3CwBAAAAADYTFQKTxJnSNwi2W7dsLONtnC4ZdkutYOzZ8RkAAAAAADsK + ioGpwnXR9uqY0wPgdxWsN1UGSNmcAQAAAAA2FBUDM4Xrou3VO7uK1popo0RjzwoAAAAAsKmoIJgpxKJt + NSDDbis0WrDWVBkpGn90AAAAAICNRUXBTCEWbatR2VG0zkwZLZrDoGzb/AIAAAAAqqAwmCr8LNpOA7Nl + 4ThYZ6rMEM2jczQlAAAAAOAIguJgqvCzaDuNzm6iNWbKLNFcegUAAAAAOIioQJgp/CzaTqOzm2iNmTJT + NJ/WAQAAAAAOJCoSZgqvfPryLd5Oo7ObaI2ZkkE0rydzej0DAAAAAAcTFAuzxP3mA8F2mpHtCsrBGlMl + k2h+d0ZDAgAAAAAO7FT8DwqHKcLPou00IbsVljO/D7Ju689fv4fzvRaNRgAAAADgh6CImCL8LNpOE7Ll + Ge/BOlMEAAAAAGA7UTE0Q/hZtJ0mRGNiYAAAAAAAdpPyNjbEom01Ixs6NVuitU7M6XZJAAAAAABbCoqi + U0MoTfF8V9FaZwYAAAAAYFeprprgfdE2G51NZbpqwtUSAAAAAMD+guLolPC+aJuNzs6i9c4IAAAAAMBL + 751ZXa4+WPZs52A9Q8OHpl/dcgTRukcGAAAAAOAkKiDekFMheSXBGoaE20Xbb1SOIlr7iAAAAAAAhMXD + R7OA09Ue0dx7hvtE23BATlcKNXTr1R/TrkAK5tI1AAAAAMDBRYXDBmld3O0mmHuX8JhoW/ZOA888YHrK + 1UfBPLoEAAAAADi4qHDYOiuI5t0yPOyZAv9DaSH6uw9keHMvmEPTAAAAAAAHFxUOe2UBPR62vOzDwbMJ + tm2XPKnbA7sH6rGGKVeAAAAAAADJBMXD7llEi8LsMrexWkmwnVvm6eJ58DebZrAW7wMNCQAAAADgLCgg + DstC7n04tiJsfy2K5WGeFf3NHpngoYfEAwAAAAD8RVREHJ2FlSJtuRrCFRHzPFQofy9P6tYsuZYELu8B + 7wUAAAAA4H1RkXNCPHeBFp5tCDQrqAd/u2dcmQMAAAAArCMock4LNHL3FRQtRX9/RAAAAAAA0ouKmxPj + 9i/08vJ2W91fZ8Fre0RcNQEAAAAA5BcUN6cHVha9pkcGAAAAACCtqKiZIbCy6DU9MJ7VAgAAAADkFRQ1 + 0wQWdPdzLXoFAAAAACClqKCZJbCi6LU8IwAAAAAA2Zwe/hsVNLMEVhS9lmcEAAAAACCdqJiZKbCi6LU8 + IwAAAAAA6UTFzEQ5XdEBqwley1MCAAAAAJBOVMxMFI0JlhS8lqcEAAAAACCdqJiZKBoTLCl4LU8JAAAA + AEA6UTEzUTQmWFLwWp4SAAAAAIB0omJmpsCCfvn1t/j1PDoAAAAAANmkKaBeC6wqej2PDgAAAABANp+/ + fo8LmlkCq4pezyMDAAAAAJBWVNTMElhV9HoeGQAAAACAtKKiZoKcbjMFKwte1yPiofEAAAAAQGppnzMB + q4te1yMCAAAAAJBeVNycHdhB9NrumNNzYwAAAAAA0gsKnFMDO4le4x3i9mcAAAAAwFqCQue0wEaG3S4N + AAAAAGAlpwfmRsXO0YEnnW5nFL22/pxZVxV0b04AAAAAACwpKngOjPvj85TgNfVeTs240YJ5PBO3bwIA + AAAA1hcUP0dEgfW1UjS/pP5PXPH01T6jRXN4JAAAAAAA24iKoB1z9KbEvbf50cT54d5tdzUzRPO4JQAA + AAAAW4oKoh1y1CL702f51xy5SdGsKXHJRB+txZUzAAAAAMAxBAXSljniMyVaNSTe5miF617bsf55AAAA + AABmOTUPogLuszmiaDu0zlFEa28VAAAAAADma3aG+lFF26JTdr8SpfktnN4GAAAAAIBkomLuOznycxBO + gm3SO1tv82C9zQMAAAAAQF7laoqXqf8zRVT0HpQdmxPdbi32NgAAAAAAsJyo4D06u4nW2CMAAAAAALCU + qNg9KzuJ1tchrvwBAAAAAGAdQaF7enYRra1XAAAAAABgCVGRe3K2uQIgWFu3AAAAAABAelGBO0t2EK2r + Q3Z8cDgAAAAAADsKitxZssVVE8G6esQzJgAAAAAAyC8ocKfL4k5XMkTrah0AAAAAAEgvKnBnyw6idbUO + AAAAAABk9vnr97jAnSxbPDshWFfLeL4EAAAAAAD5BQXutFnc6fkP0bpaBQAAAAAA0osK3Fmzg2hdDeJq + CQAAAAAA1hAUudNmF9Hang0AAAAAACwhKnJnzU6i9T0aAAAAAABYRlTozprdRGu8NwAAAAAAsJSo2J01 + O4rWeUM8UwIAAAAAgDUFRe+02Vm03iAaEgAAAAAArC0ofqfNQXz68u3cgPjzmsv/Lf9//UcAAAAAALC4 + t8X/zAEAAAAAABYXNQCyBgAAAAAAWFzUAMgaAAAAAABgbZ+/fo+bAMniOQsAAAAAAExxeSjwe1HEvlOw + DdMFAAAAAACGiQrVN+bUyOB9wXZLFwAAAAAA6Ol01UNUoH4mXBdtrywBAAAAAICuouJ0y/CzaDtlCQAA + AAAA9HDL8yOahZ9F22l2AAAAAACgi6go3Tu8MrQxdGsAAAAAAKC5qCA9KrwWbaNZAQAAAACA5qKC9Ojw + WrSNRgcAAAAAAFpLdesgXou20agAAAAAAEAXUVF6Zngt2ka9AwAAAAAAXURF6cn59OWbwvhbwXbqFjiA + /+f//f/+9K//9u9/+uMf/+cpv//93/7pf/xf//fdufz3f/8P//in8jdL6hAAAAAAwFunBkBUmM4QfjLk + lluwmf/+X//7T//0z//ypz/84e/CxkLvlHEvTYs6JQAAAAA4sKgwnSSnIjyxYHs9HdhIaUQ8egXEiJS5 + lTmWpkmdMgAAAAAcRFSgzhTeF22zewObKFclRE2AFVKuqii3lapLAQAAAIBNRUXqbOFmt97myZUo7KQU + 8//mr/46LPavmnI1hSYFAAAAAHsKitYpA/DGyldH3JNyJYXbPQEAAACwj6gJkDEA1R//+D/DAv7uKVeF + eHg2AAAAAEu79bY/KQIcXnlQdFSwP1o0KAAAAABYV9QAyBrgsP7jP/9ru2dItEh5DkXdRIdRnrtR1q0x + AwAAALCqqAGQNJ++fFOEggM66m2bbk3dTFsrV8q8bUxpTAAAAACsKmgAZI3GBByPqyTeT2na1E21lfKg + 748ebK4xAQAAALCqoAGQNRoTcByl6BwVo+V1SgG/brLlldt1/eEPfxeuM4rGBAAAAMCqggZA1mhMwDF4 + wPVtKVeT1E22rMvzIqL1fRSNCQAAAIBVBQ2ArNGYgP15nsTtKQ2cutmWEj0v4pFoTAAAAACsKmgAZI3G + BOztntv4yDoPvb7leRGPRGMCAAAAYFVBAyBtgG25UuK+lCZO3XRp9W40aUwAAAAALOp0FULUBMgYYEue + KXF/VnjodTTvltGYAAAAAFhZ1ATIGGA7pbgcFZ3l/dTNl1o075bRmAAAAABYWdQESJZffv1NAQo2FBWc + 5f2s8tDraO4tozEBAAAAsLBT0T9oBqQKsJ2/+au/DgvO8n7q5ksvmnvLaEwAAAAArC5qBmQKsJW//4d/ + DIvN8n5+//u/1Zio0ZgAAAAAWF3UDMgSYDtRoVk+zn/8539pTNRoTAAAAADsIGoKZAiwlRVu4fTHP/7P + U0rx+5I6/ZPSILj87//6b/9++nf/8Ie/C/9Wy9ThlxDNv2Xe7hMAAAAAFpTyWRPAVkoxOSoyz0xplJRb + S7W+GqGstTQsojEfSZlj/dNLiNbQMhoTAAAAALuImgOTcmqUAFvJdLXEP/3zvwz9jCmF9Geuqqh/ZhnR + GlpGYwIAAABgJ0GTYEqArZRGQFRgHpnSGMlQ0C5XZ9xzNcVKD72+iNbRMhoTAAAAALuJGgUjA2xn9tUS + o6+QuFVpUpTGQzTnS1YswkfraBmNCQAAAIAdRQ2DEQG2U4rIUXF5RFa62qA8RyJaQ/3HS4nW0TIaEwAA + AAC7ihoHPQNs6aMrAnpltQdGX7y87VW55VP9n5fycj/0iMYEAAAAwM6iBkLjeNB1f5++fPvTtdR/BbqJ + Csu9k/XWTfdYeQ3RPmkZjQkAAACAzZ2K10FDoUlo7tn99fnrd/uFZmY89HqHpsTqov3SMhoTAAAAAAfR + tEFBU72aR5oUPGv0Q69XvfXRbqJ90zIaEwAAAABHFBSxP4pbNrV32qbBtm4d+45HRUXlXilNkDosk0X7 + p2U0JgAAAAC4+gyD+o9p7LRtgwZC79in3KMUj6Oicq/UYUkg2j8tozEBAAAAACMFDYPhgRuU2ypFReUe + cQunXKJ91DIaEwAAAAAwwKyrJK7F1RN8JCoo90odkiSifdQyGhMAAAAA0FvQGMgQz57gPVFBuUdcLZFP + tJ9aRmMCAAAAAHoKGgLpAm/89//632FBuUfKWHVYkoj2U8toTAAAAABAL1ETIGvghVI4jgrKPVKHJJFo + P7WMxgQAAAAA9BAV/7MHqr//h38MC8qt4zZOOUX7qmU0JgAAAACgsdOzG6LCf/J45gQXpWEQFZRb51// + 7d+95hKK9lXLaEwAAAAAQGtB0X+ZwJ/9/vd/GxaUW8fzJXKK9lXLaEwAAAAAQEtRsX+1cHhRMblH6nAk + E+2rltGY6O8//vO/Ttu5XP1U8oc//F24L6KUf7f8N+WWbuVvlL9V/ywTlX1RUvbLZb8+0kS+7N+SctVa + +ZuaxDlc3rdlv1z20T3v3bcpr4+3+7oOtb3ymi7r/ad//pe/bINoG72Xo247ILfL51vJy2OCZ74vLnn5 + vVE+P8sYjgNzuRwrlLz8jmv1Grjk5d+9vBZK6jQOo6z55XHZ3/zVX4fb6728PPYuf897CugnKvKvGg4t + +kLtkTocyUT7qmWOeFDbUzm4LT9MR1zpVA7GLw2LOjwNle16KTJE239Eyj4u45cfYXVaNFTer5cfuI/8 + uG2Z8kO5FBtW/4F8ed+Mutrz8jmosAD08vJ4YPZ3xduU7w7Hgn1cmk6XfT/qe+3RXI4ZdzjBpazhcnwW + rbVXLtvQ+wloIyrwrxoOLfrS7JE6HA2NPpjKmp0P7sqBcykmZviheinQ7fCDZLQZP34eTflhrFFxv0tx + IXth4WXKfLMX3Mv8Mr13vD+AR5XvifJ5ttL3RBSF1fuU77HL1Q7R9lwtq+77sg8yvvdK88/7CbhfVNxf + PRxW9AXZI3U4GtrlAPfZ7HgwVw6eo7VmSilq1unywqWZtHrhoaQ0o8pa6tJ4oRSnW95GYXbKWrI0Kcq2 + XeH9U+aYvbGz4nFCnfoU5XstmlOWlP1ZpzpFNKfMKZ9rderDXZoQGU4s6RnHCa+V/b7aSQr3pi51CeW1 + udJ7sLxunPwA3CYq7K8eDiv6UuyROhwNaUycs0tjohS4Vvwhs0JxrrdVCqnP5Oj7uaz9KJ+5ZZ2jr4wq + n+OrvodK0SPr91B53UZzzpyZV+Wt8BqsU50imk/mjCrwldfsbs3qR1LeP7sck9/iqPu9Lj+tsk92aAiW + 19XM70Mgs6iov0s4pOiLsEfqcDSkMXHO6j+Cyvx3OIDOXJxrrfxQyH5mba8caT8foeH0XkYUmXZ6H2V9 + b0RzzZyZ2zCaT7bUqQ5X9ks0n8ypU+9CI+L97HoVheOCv027X3c9Lj/ScTdwq6igv0s4pOgLsEd0/NvT + mDhn1YO1Mu8dGhJvU9a045n1R25GRCn7ecfP9aMXHaK0/lFcXjc7b+NshZvVtnU5tqlTHy6aT7bM+n4t + heZoPplTp96EY4DHsnqD4khXS96SjPvzKPtHgwI4+fz1e1zQ3ySn9XE40Rdfj+x65sxMDpTPWfEg7QiF + z5n3dm6pfHbt2EBqlZlFxFZK4UEz4uM8W3DfvSHxNqWIWZc+1WoF5WdfZ48qTcloPtky63h6tWPOFu+/ + 8t3gqojns1pB1QkK15PpxKOj/g4ur80dTwwCbhUU87cLhxN94fXIrB+aO9OYOGelHztHPNuu/MCry1+K + 99ftWfXqidUKtlnySMHvyAWEugmmKe/NaG6ZU6c+1CoF6FmvqWgumfNoAbW8XzQj+iTzCSuaEbelbq6p + Vmki9045rqqbBDiUqJC/WzickQffdUgaUTg9Z5XGxJHPus/8Y/SaaB3yfla7Mi5ag9yW8nlWN+O7NH9y + NO6ieWVOnfZQ0Tyypk55qGgemVOnfRefV/2T8USGaJ4Sp26yaTSPXqe8nzJdxQKMEBXydwuHM7K4vVrR + KjuNiXOyNyac2XPOrYXMLNxL+rFkuX3NLaL5y31574qo8p6P/pujZmYxbrUzwGdsq2geWVOnPFQ0j6x5 + 5qqS6O9J+2T6TRjNT37OzDP0/ZZ6P66egIP49OVbXMjfLKd1ciijv+jrsDSgMXFO5saE2wH8nJXO7Inm + Lx9nlStkornL/XnbjHLW8fXMak6U78loPlkz+nt9te3zXkOwh9W2zzNFb2dkj0uW5kQ0N/k5s35v+S11 + W2bd5g8YKSjibxsOZfSPDVdNtKMxcc6sA+WP+HF7Pat8Djjj+/GscPZWNG95LJdmlALCx5nVnIjmkjWj + Pz9Wu0Ju9PZZrdlYp/0QZ2aPTYbjwWhe8nPq5hqmfFc6Dr8vZXvNvDoT6C0q4O8aDif6YuuZOixP0pg4 + J2NjwoH0x1mhObFaMSZbsu/jaM4iIzKjcLDS99LoMz9X/M6uUx9itePNOu2HRX9T+mX2sUI0J/k5dXMN + sdpVWtmiOQG7igr4u4bDib7QemaV23xkpzFxTrbGhKbE7VmhORHNW25P5lt3RfMVGZHyPVFfhsOsdlVA + nfYQ0fjZU6c+RDR+1rS4msQVr+Mz+vZkL0XzkdcZ2Sx2UlCbZL2jAPCMqIC/azicGbdeWKEgmZ3GxDmZ + Drw0Je5P9mdOKFA8n7op04nmKjIqo68KKGdQRvPImjrt7lbbLpeMPPaJxs+aFtulHJdEf1v6ZtZZ3tFc + 5HVG/W7XlGgbzQnYTVTA3zUczqz7qc48O2YHGhPnZDno0pR4PJkvOVageD5Zr5KL5ioyMqOPg6I5ZM2o + 74VVC2FvHzrfUzR+1tQpPy3629I3M64kK6K5yOuMOIlIU6JPMv/GAu4VFfB3DYcUfZGNiC/Lx2lMnJOh + MaEp8Vxm/Ri9VTRnuS8Zz9qK5ikyOvXlOMRKV4CN+sxY9YHto743y36Ixs+YltvEMfactLgV172iecjr + 1E3VjaZE36i3wC6iAv6u4ZBmFlYzFqxW4EfTObNfP5mKGuV9XF4X5QC/bJdrKWdaZnv9ZH72zIx7s5cC + YtlHJdE+jHLZrxmLjxmbT9E8RUZn5C2dZl0h+0jKZ1mddlfR2KukLqGrlQqGZa512k8rhbxoDOmf0UXU + aA7yOnVTdaEp0T8Zj8GBR0QF/F3DIc0+KGj5Y+IoshWWZ6UUZOsmGW72+6YUtFrcCqT8CCxF7ZkNypKs + t3frWaAo7+PyOur1Oi6X32fYtyUz36uRaI4iMzKyEBeNnzGjGjbR2KtkxOtmpWPN1tsjGkP6Z3QRNZqD + /EjPJrHbpY6L5gTsICrg7xoOK/oSG5nMZ0xnpDFxzqxi56yD6XJg2bORV37Yz3xt1Wmk06KwXwptZd+N + LEK+NbOZlu1HUTTH2SnvvZLSpCufbSXv3dv58u+U/Vr+uxav01VS3k9vt1XdLK9c/llp0GW9bc/Iqyai + 8bOmTrmb8rqIxl0lI5r50bhZU6fczMzvy6Pn2ud5D9H48iM990U0nvRLOWaqmx5YUlTA3zC//PqbD6sD + y/CDXTd/rGgftMzIHxajjS4AlvFGb89yABvNpWdGFuju8UiBIkMj4ppS0Irm3DuZPhOi+Y1KeW2UQnmv + 7VFec+W1V8aJxl8x5RilZSG2bJ9MjZxRnxMzPtcfTZ1yNyttiygjTuiJxs2YXtsiGkv6Z+TvwWh8+ZG6 + mZrL9P17pIx4kDnQyacv38JC/m75/PW7D6oDKz+Koy+wGRlxFhgaE48a3cSb+X4onwujfzxkfd1Ec32b + 8tpY6XU/ujCXqfEUza9nSiNi1g/CVc/8La+XEe+nDAXqUe+NlW6d0fv9Eo25WupSuonGzJhex0mKp/My + 6lgqGlt+pG6mpkb/jpLXqbsBWFJQyN8uHF6msyszFbB2FW33ltmxMVHWFK21RzK9B0b/iKjDpnLt87H8 + 7yufgTTyNV1Sh50umlvrlPdNpitmVmlQlPfUjO02u1hSp9FdNHbG9G7KR2OulrqULkZ/NzyTOuXmVm3q + 7pBRx8DR2HJO+U6sm6mZlT5Xdk05GaPuDmA5USF/t3B4ma6auKScZVqnR2PR9m6ZHRsT0Tp7pPwYrkOm + MfIHesb1v/wxVc6izDjHR4387M+y3aK5tU4dKp2st7Ap76vZjZyZRZNR741rTdZs6Vk8WenKkffS8zir + HH9HY2ZMnXIX0XgyJnUXdBWNK+f0+E6KxpHxyXTSDHCPqJC/W+DPshYsdixyzxZt55bZbZ+Nem9k3m7l + R0o05x6pQ6ay+tUR7xnVnCjF5zrkVNHcWqcOlVK2wmy2Rt+MW7iMem+M/Bx/Jj23xyrb4KP0bN6scruV + 3icwrdLI2zEjvheiceWc1sXrVT5TjpAsx+LAnU7PX4iK+bsEXoi+wDKkfIlqULQTbeOW2W1fRWtsnRXO + YBlV0MlWqDyCcuuUaF+0Th1uqmherVOHSm1GAf5tsn7uzdg2deiuRjUhW6ROubldis09i0vReBnT+2SB + ciwbjStjUndDN9GYck7dRE14H+WLmgqsKiro7xJ4YVRx6tGUH5QrFHCzi7Zty+x0wDOiiLHSa3rUWU91 + OAYa8VrP8NkQzat16lDpzWpO9CyqtjJ62/R+rsJFNHbG1Ok2F421auqSmovGypg63a6icWVM6i7oJhpT + 2n8/zzrOkOtZ4RgMCPzy629xUX/xnNYFb6xwNlmZ4663VRkh2qYts0tjYsTZpSteHTDiR4azeeaI9kXL + 9Lz9yK2iebVOHSq9WWfQ1+FTG71tejxsNLLKLTV6HeNFY62aI2+j8jugTrcrt6CZl97Hx9GY0vY4bdSV + 1nJ/XJ0OqwoK+8sHroi+wDKmFEgVMO8XbcuW2WWf9G7SZSjSPipaT8uMKjrwWu/nqWQ4SyuaV+vUoZYw + 40rJOnR6ox8CXIftqnw/R2NnS48rSLJfFXxvehSWVnl9jCqqzWreSv/jwGhMafsbLvr7kiOumoBVRYX9 + 1QNXrHYgXr5cdf5vF23DltmhMdH7PbD6AWHvAnZJHYqBRnz216GmiebUOnWoZfRuwr5NHXYJ5bM6WkOP + 1CG7i8bOlh6N+xHfWyPTo3A7uhn3aOp0h4jGlzGpu6CLaDxpt813+7zdMbucSAjHExX3Vw18YNXLLzUo + PhZtt5bZ4UCn9+X7dZilRetqGe/lOaJ90TJ1mGmiObVOHWoZo09GqMMuYeQZ5KNuUTmy2fJoejTvo3FW + T11aM6vcuqhOd4gZzZry+i+F3ZLyGXRJ+ayu03qlfHaUf16uCir/zQrv8Vtybb0tRONJu/dW9LdXSXn/ + lPd9eU+9/V6+vNd2aLy4Oh0WtcuzJjxbglut/KVb5l6XwRvR9mqZcsBWh1pWtK5WKQe7dZil9f586FGY + 4mO9izCzPx+iObVOHWopI6+aqEMuY1SRb9QDsI96Vnw0xuqpS2smGiNbZhzfR/NokdIIKidh9PpeLEXU + 0VfEtUzPz8RovKOnvB7r5nnKiic3lvfJI6+30jxbuV7Ss/kH9BQU+pcL3GH1B7+V+fvSfS3aTi2zemOi + 5wH1bsX2aI0tU4dhoPL+jfZFq8y+EiaaU+vUoZZSCljRWnqkDrmMUUWWUQXXckwUjZ8tdbpNjHx9j0zr + 461ojGyZcYzZojl5aULM+k2y4u+5np+J0XhHT6vjs+hvZ015b7d6T446iaFldjlZDo4pKvavEnjA6s2J + knImhAbFWbR9Wmb1xkS0plZZfdu81ftMvFFnEPNatC9aZcbZri9Fc2qdOtRyorX0SB1uKdE6Wqcca9Xh + uovGz5a3t9B4xipXidyb1p+n0RjZUqc61CPNyfJ+znYM0/vEg9bpeTJPNN7KKZ8Flzx6bN7id3J5zUd/ + O2N6nCizYs2kTh1Yzeev3+Oif/bAE3ZoTpRoUPQ/GF+5+F5eG9GaWmS3qyWK3mehlvdrHYqBon3RKhoT + efVuNF5Sh1tKtI4eqcN1N2pfP5OWRd0Vz2S9NXWJT1uhaD3zOCqaz8uUuc28IuJWPY9ze6ROu7lorOwp + n9vlNfZI07bs9/IeL8dg1z4P67/6lFU+a3u+T1ermbQ8CQAYbLXnTXiuBC2Ug5noC23FjDwzMZtoe7TM + yo2JngeTK2+X90RrbZk6DANF+6Fl6jBTRPNpnTrUckadVV6HW8qo4586XHcrnNXasokZ/f1dUpf4tBWu + KulxhvOtomZe+d9WvLLzkStAZqVOublorMzp8Torf/Pyum7R9Ful6TWiebhC8/+SI9dEYAurNCc0JWhp + pYPZWzL77N0Zou3QMisX4KP1tEodYju9zwyqwzBQtB9apg4zRTSf1qlDLWfUGdN1uKXsuG2i8TOl1dnx + q50hfm9ane26wlm+IwqK11yaeas2I95a5cz2Ot3morEyp+dvq/K+avGaXqG5OfLqgGj8rKlTBlaVvTmh + KUEPvW/fMiMzz8IaLVp/y6zamOj5ut754WKXH+u9skMBYDW9z/Sqw0wRzad16lDL0Zi4blRxuw43RDR+ + ttSpPqX3d9TstDq+iP52ttSp0sAqJ5r1+k0RjZU5K/y2iuadKaNPRlzpZM6ZTV+gkazNiU9fvvmAoatV + zra5NWU9R7jPYrT2llm1MdHzVh11iG1Fa26VI17VNFvP90JJHWaKaD6tU4daUrSe1qlDLSdaS+vUoYbo + /T5vkTrVp6xwJcAzKY3kutSnRH87U9xupL1oO2eLxsQ52X9bZb8yrdUVePeK5pIxRzpBE/YXNAemBQZZ + 4Yftvdn9x0+05pZZtTERraVFZh0MjxStu2XqMAyiMfFc6lBLitbTOnWo5URraZ061BArXP3a4mSR6O/u + lrrUp0R/N1NcPdletJ2zpVfBNBorc7L/tsp+G6dZ22+VqyZaNbiBLKImwejAYDve2qlk1QL7R6K1tozG + xOsc4SyUnW/9c0QaE8+lDrWkaD2tU4daTrSW1qlDDRPNIVNaFKOjv7tbnr0NRzlui/5uptSp0lC0nbOl + HI/U6TYVjZU52X9bRXPOktkniEVzypg6XWArUcOgd2CyHS+X3/HqiWidLbNiY6LnPajrEFvbuZB9RBoT + z6UOtaRoPa1Th1pOtJbWqUMN07up/GyeLUquUHBvkWcbOCs8tLZOlYai7ZwtGhPnaEw8ntlXW61y62vP + mYCdRQ2E1oFEytUTq3wB35Odnj0Rra9lVmxM9Gyq1SG21rOxU7Lia2plGhPPpQ61pGg9rVOHWk60ltap + Qw2T/TYTz57p2vuzLEuePYkm+4lFrR7wzWvRts4WjYlzMh8H9/4N8GzqNKdZofFbMruBA4wQNRSeDSS2 + ypfwPdnlljzR2lpmxSJytI4W2fGKm0jZ59H6W0VjYiyNiedSh1pStJ7WqUMtJ1pL69Shhsn+wNKSOtWH + 7HiizLXUJT8k+nuZstPJQZlE2zpbNCbOyXwcnLmxmeF3WO/fSK3S670GJPXLr7/FjYYPcvrvYDHZbxNw + b3YoNEfrahmNiR850tkn0fpbxcHyWBoTz6UOtaRoPa1Th1pOtJbWqUMNFc0jU+o0HxL9vV1Tl/yQ6O9l + Sp0mHyjH3yXlRKryPV6yenOu1/FfNFbmZP5tFc03S7L8DovmljF1usCRff76/U+fvnz7U/m/9X+CLZQz + 8nY6a+3ZWwvMFq2pZVZrTJT5RutokTrEIUTrbxWNibE0Jp5LHWpJ0Xpapw61nGgtrVOHGir7bXwePVt+ + hatBWuaZY6/o72VJOcGpTvPwyj4uhdbyHZ39fdsqGhPnaEw8ljrF6aK5ZUydLgDsqxxU7dKgWLk5Ea2n + ZTIfPEd63nasDnEI0fpbZYcrlTIpBbvyPr2kvAfKj/9Len9O12lMEc2ndepQS4rW0zp1qOVEa2mdOtRQ + 5TMgmkuWPHrGa/bnZ7TOo89hyL7/d7mN6j3KPinrPkrz4b1oTJxTXhN16qlk//yo05wumlvG1OkCwP7K + QcwuDYpS4KvLWka0jpbJevB8Tc8ffnWIQ4jW3zJ1GN5R3nsllwZD1lvp1elOEc2ndepQS4rW0zp1qOVE + a2mdOtRw0Vyy5NHC5G63Ev0oj54wk/2ZcHWa2ypXBJV9cLTX663RmDgn62+rzJ8fmU4ijOaXMZ7nA8Dh + 7NKgWK05Ea2hZVZrTERraJFeP6ayirZBy9RhDq38YLg0HlY+k7IuZ4poPq1Th1pStJ7WqUMtJ1pL69Sh + hst8LPZocSn6W7unLv0u2b9L6jS3Ub7Hy3d4tFb5ORoT52T9bZW5oZbpd9gq9Y7VfsMDQDM7NCjqUpYQ + zb9lNCbOefS2Cqso+/nygMURP0zqsIdQmp2X+0jv0Lx9m7rMKaL5tE4daknRelqnDrWcaC2tU4cabsez + 5qO/s3seOVEm+jtZkqmw+IxyrOSKiMeiMXFO1t9W0VyzJNNt4FZ5/+/+2xUAPlR+UK164P7oGX0zRPNv + GY2Jc1bbDm+V92NZQzlILT8MozWOTJ3Wli5NiGjdO6Yue4poPq1Th1pStJ7WqUMtJ1pL69Shhiuf99F8 + sqRO82bluyv6O7vnkUJc9HeyZOXjqLIvdjyxYHQ0Js7J+l6I5polo7bZ5Wrmy8laK1/R3Ov9BgDLKT+Q + VyzSrdKciObeMiv9kCxzjdbQIitshzLHkhUOpOuUt1AaESv/cHk2dTNMEc2ndepQS4rW0zp1qOVEa2md + OtQU0Xyy5N7v0xWPIVukfK/UTXCT3RpSs5Xvds2ItulVKI3GypysvymiuWZJq2328rfS7t8tvd5vALC0 + cvZB9MWZNSt8oUfzbpmsB8+RMtdoDS1Sh5iurPFyFs/KtxKoy1lSKf5kv1XKyNTNMkU0n9apQy0pWk/r + 1KGWE62ldepQU2T+frj3SoDob4xKKU5H//uo1E1wk57HQM9mpSuRdy9Wzkyv31XRWJmT8bdV5s+Pklu2 + 2eVqh8vV4W65tvYxLAB0tdJZSBkPHl+K5twy2df/Us9icR2iu2y3XOqVutxlaEZcT91EU0TzaZ061JKi + 9bROHWo50Vpapw41xeyC+nu5tzgZ/Y1RmX0VQt0EN8l8zHBvM2q0sp8VMftHY+KcjL+typyiuWZJ+U4r + cyz/t7yOdv6N1DJ19wIA15QDjBUaFHW6KUXzbZmMB8/X9DxIrUM0UbZpSZnvUW8BVDdFeqWY4lYO76du + qimi+bROHWpJ0Xpapw61nGgtrVOHmiaaU5bUKX6onAEb/fejUuYQ/e+jcs8xWObCein812mmoyExLhoT + 52T8baXQv2fq7gUAPpL9TKUytzrVdKL5tozGxDl1iJuV7XY5q8eP3p9TN1NK5fPoyM+MuDd1s00Rzad1 + 6lBLitbTOnWo5URraZ061DTRnLKkTvFDs69UK3OY+X1wTyE3+u+zpE4xFYXY8bnn9XyPaKzM0ZiQUam7 + FwC4VTkzLuvZyVkL9NFcW2alxkTP104d4i9K8bpsm8stl5xVf1/qZkzFrRweS918U0TzaZ061JKi9bRO + HWo50Vpapw41TeZCU53ih2Z+Jl+KqLO342lD3CD6bzPk3od491aO3aJ5Sv9c3lOtRWNlTsbfVk7I2TN1 + 9wIA9yoHbNkKvWU+dXqpRHNtmZUaE9H8W8UBe9vUXZaGhsTjqZtwimg+rVOHWlK0ntapQy0nWkvr1KGm + mX0bpPdy67FF9N+OSjnxoMxhdiH7tCE+UBrr0X+bIeXq0TrN6RzLzY3GxDkZf1tF85T1U3cvAPCobA+b + zfjwvmieLaMxIT1Sd9l0mc8oXiV1U04Rzad16lBLitbTOnWo5URraZ061FTRvDLk1uOp6L8dlcvxz+wG + Txn/tDHeMbt58l7qFKfK3Lg5UjQmztGYkFGpuxcAeFams5nrlNKI5tgyGhPSI3WXTZO5iLNa6iadIppP + 69ShlhStp3XqUMuJ1tI6daipsl4NdkuBspxpH/23o1KncRL981G5pYmTuclepzhN2X7RvGR8NCbO0ZiQ + Uam7FwBoYfYP1EsyXZJeRHNsGY0J6ZG6y6ZwK4e2qZt1img+rVOHWlK0ntapQy0nWkvr1KGmylyUrVO8 + avZndZ3GSfTPR6U0l+o0rsragLrcDmuWbFdeHz0aE+doTMio1N0LALQ0+9kT2Z41Ec2xZTQmpEfqLhvO + Q8rbp27aKaL5tE4daknRelqnDrWcaC2tU4eaKvMtbOoUr4r+m5Gp0ziZ/d1Rp3FV9N9kyC23oerFSQj5 + ojFxjsaEjErdvQBAa7N/bJQf+nUq00XzaxmNCWmV8r4tP0pnXHXk/tL9UjfxFNF8WqcOtaRoPa1Th1pO + tJbWqUNNF80tQ+r0ror+m1Ep31d1Giezb5VUp3FV9N9kSJ3ecJoSOaMxcY7GhIxK3b0AQA8zf3S8/cE6 + UzS/ltGYkHtSfnSWlNfNzDMlX9rt/tLllh2X7XzZ1pdE27z8O9HfaZU6zBTRfFqnDrWkaD2tU4daTrSW + 1qlDTZe1SPve8UX5Z9F/Mypvb0E0+3ai7zX0szbeb7kFVQ+eKZE35Xik7qamorEy573Pvlmiecr6qbsX + AOhl5o/tOoXporm1TMaD52ui+Uv7lB+WpWhTXhuZrh6KrFaguDQdShGq1fbVmHgudaglRetpnTrUcqK1 + tE4darrZRf5rKZ/PdYo/mf1sgLfHPqXpG/17o/JeQXfF/dtL1m0h52hMnPP28yWDaJ6yfuruBQB6mtWc + yFKQjebWMhkPnq+J5i/3p9xLu/x4LEWFlfb/W7MLSe/lso1HbF+NiedSh1pStJ7WqUMtJ1pL69ShUojm + NzvvFSkzPtMh+vdGpk7jJ70/4x9Nnd5Q0TwkT957zz8jGitzNCZkVOruBVbwy6+//el3//1/HsqnL9+8 + 4WGycpZx9GXcM28v858lmlvLaEzsmbdn5tdNuI1st7Yo27s0emY0NDUmnksdaknRelqnDrWcaC2tU4dK + IeuD/+v0fhL9uyNTp/FK9O+NTJ3GT7LeqqtOb5gZvwXkvmhMnKMxIaNSdy+Q0TONiA8DTBF9GfdM+ZFf + h54qmlvLaEysm1KsKD8Cyz7csfnwngxFuLL9MzxnQ2PiudShlhStp3XqUMuJ1tI6dagUZt8a6Vrq9F6Z + 3Vi+dnw3uwFw7fsk+ndnp1cB+prZzwCR26IxcY7GhIxK3b1AKlEjoVNOzQ9gmHKQF30h90wdeqpoXi2j + MZE75Ufe5XkPGYrgGcwsHpWC1nsPKZ1BY+K51KGWFK2ndepQy4nW0jp1qBSyXUV2SZ3eK7OLzNeKp7Ob + O9eu1I3+3dkZfewYzUHyRWPiHI0JGZEsJ1ECf3a61VLQOBgaYIjRl3FneM5ENK+WWakxseNl/OWg8mXz + IcNrLrOyjaLt2DvltZd132hMPJc61JKi9bROHWo50Vpapw6VRjTH2Yk+N3t/Zn2Ua8c9s59bVL5n6lRe + if7d2alTG2L260Vuj8bEORl/W2W40ljaptf7DbjD56/f4ybBzABdjT4jMMOBZTSvlsl48HzNqj9OL82H + 1R82nUG0fXum7LvsV6r0fl/UYaaI5tM6daglRetpnTrUcqK1tE4dKo2MzfvoOy/690amTiMU/fsjU6fx + F7ObJVFGn6UbzUFyRmPinIzH+qv+hpLr6fV+A24VNQWSxC2eoK+RP7yvXVY/UjSvltGYaJPyuizz2/Vh + 0xmM3v8Z3v+36L1d6jBTRPNpnTrUkqL1tE4dajnRWlqnDpVGxvvwl4Z8nd5fRP/eyNRphKJ/f2TqNP6i + HE9E/97MRPu0lzJWNIddcjlxpaTs60vq8l+J/vtsKeuo020qGitzMv4OGH0MLX1yeb5g+b53lT1MkuK2 + TbcG6GLkD+9eB9j3iObVMhkPnq+Z/QP15cOmPe9hvGif9MpK+7f3j806zBTRfFqnDrWkaD2tU4daTrSW + 1qlDpRLNc2beHkeNvvL1ba7dLuki2wOwZz/3IsrIYlg0/oq5NCCeOeaO/m629PrdFI2VORl/W+3e5Nsl + LxsPK/1Gh+OIiv/ZA3QRfZH3yOjL1SPRvFpmpYOeMtdoDS1TDgY97yGfUT+oMrzn71Ves9FaWqUOM0U0 + n9apQy0pWk/r1KGWE62ldepQqUTznJm3jYAR3+Pv5aOz/WdfdfJ2fr0/3x9JnVp3s5tYz6a89svrqS7n + adEY2aIxcU7G31azP3vlHI0HWFlU9F8kbu0E7ZXiYfRl3yN1yGmiObXMSgdFve+13OsHFc+L9lfrrNiU + KDQmnksdaknRelqnDrWcaC2tU4dKJXshe/b8brkaLvrvRqUUreo0TkYe796St/PrKePVIrek17FkNFa2 + HHntL5Pxt1Xv31ByzuXWvqXJrPEAOwmK/atFcwLaGvnDtg45TTSnllntoClaQ8vUYUhk1I+pOtxyen8e + 1mGmiObTOnWoJUXraZ061HKitbROHSqVjMWnOrWT2YX2Oo13Rf/dyNRpnET/fGZaXgHwkWj8zPnoNmHP + isbMFo2Jc7L+tormKvflbePB1fVwBEGRf9VoTkA75UAgOljokTrkNNGcWkZj4nXqMCQy4p7fq70PXtKY + eC51qCVF62mdOtRyorW0Th0qnWiuM1OndRL985Gp03hXKTxF/+2o1GmcRP98Zuq0hojGz5pydUeddjfR + uNmiMXGOxsS60XgAXguK+6tHcwLa0JhoF42J16nDkEi0n1qm91mOvWlMPJc61JKi9bROHWo50Vpapw6V + zuzC+tvUaZ1E/3xUbi2aloJU9N+PSp3GSfTPZ6ZOq7uRx/nPZkRToojGzhaNiXOy/rbKdmu4GdF4AG4X + FPV3ieYEPG/kA/HqkNNEc2qZ1RoTvc+eX2177G7EbUnqUMvSmHgudaglRetpnTrUcqK1tE4dKp3ZhfW3 + uXyvzr7N1K3f75nmGf3zWRlVgC96f6+1ysgTG6Lxs0Vj4pysvyVWeV89E40HoI2gmL9dgKdFByM9Uoeb + JppTy2Q9eL6m98MQR/7w5mO99/fqV0sUGhPPpQ61pGg9rVOHWk60ltapQ6Uz8uSNW3I5zijPJ4j++aic + Ns6Nov9+VC7HIWW7Rf98VkrD5rRxBsh21c+1jCx6RuNni8bEOVl/W83+DG6RctVHeZ2Vz8mynUd+LgEH + cbqaICrk7xjgYSN/rNUhp4nm1DJZD56v6b3vywFvHYoEehcndjiTSmPiudShlhStp3XqUMuJ1tI6daiU + ovnOyqXQ3vuz6qOcNsyNov9+VMqVoWUOI491b8lpwwwSjZ8to09siOaQLRoT52T9bZWtaX0t5beYxgMw + T1TA3znAQ0b+WKtDThPNqWWyHjy/J1pHy9RhSCDaPy1Th1maxsRzqUMtKVpP69ShlhOtpXXqUCn1vu3h + PbkUK2fe3/xS7L9VhibK7Dm8jCL8zylnn9fpDhHNIVs0Js7J/Nsqmm+2OEkMmCcq3G+eT1+++dCFB2hM + tIvGxM9ZcZvsKto/rXJvoSorjYnnUodaUrSe1qlDLSdaS+vUoVIaeZz0US6ftdE/G5V7i8izt1+ZQ6bG + RLlf+2nDDBLNIVvqVIeJ5pAtGhPnZP4dscpt0vwWA4Y71C2c3ga426gfa6PPEItE82qZFQ/8ep8JukvB + egfR/mmV0Wc79qIx8VzqUEuK1tM6dajlRGtpnTpUWtGcZ2X2fB65bV/0d0aljN/7WOeenDbIQNEcsqVO + dZhoDtmiMXFO5t9WpckYzTlbXDUBjBcV7I8U4C6jbgfQ6wD7HtG8WmbFxsSIh7fVoZiovDajfdMqOzxf + otCYeC51qCVF62mdOtRyorW0Th0qrZm3Tnqb2fc2r5vkLtHfGZXe33/3pm6SYaI5ZEud6jDRHLJFY+Kc + zL+tVnnOREmG3+HAUUSF+qMFuEt08NIjlwc2zhTNq2VWbEwU0VpaZpez6VfWuzBTh1mexsRzqUMtKVpP + 69ShlhOtpXXqUGmVY5ho3jMy8yzdR8+8nXnFQqazmmcUB6N5ZEud6jDRHLJFY+Kc7L+tojlnzejbyAFH + FRXqjxjgJv/xn/8VHrj0SIYDy2heLaMxEcclxPNpTNxGY+K51KGWFK2ndepQy4nW0jp1qLRWOjO2Zx49 + yWTE1ZkrZMZxYjSPbKlTHSaaQ7ZoTJyT/bdVptvE3ZLdmxNlfW4jDBMd+tkSbwPcZOTBVIZbvUTzaplV + GxMjzgTd5VY/q9KYuI3GxHOpQy0pWk/r1KGWE62ldepQqUXzPlrKCS11c9xFY+ecujmGiuaRLaOPEaM5 + ZIvGxDnZf1uNPMmvVXZrTpTPj7fH7/UfAcNFBfqD5tSkAT708gu8d+qQU0XzaplVGxMjCgYZHn5+ZBoT + t9GYeC51qCVF62mdOtRyorW0Th0qtfI9Fs39SKmb4iHR3ztSZl09Gs0lW0YXSqM5ZIvGxDkr/LaK5p09 + O1xVUD43rj3/yW2EYYLPX7+HBfpDB3hX+TKPvsh7pQ47VTSvlln5IChaT+s8eqYlz9OYuI3GxHOpQy0p + Wk/r1KGWE62ldepQqbkd0XP7KdMDxGdk1rPWorlkTJ3uENH42aIxcc4KjYnVbuf0MqudVFfqF7ecJOCE + OJghKswfPcC7oi/xXul1cH2vaG4tk2WdjxhxOyfPmphHY+I2GhPPpQ61pGg9rVOHWk60ltapQ6UXzf0o + efYYJ9MDxGdk1i0to7lkzMgCaTR+tmhMnLNC4Xz1W9WV32dZt3M5qe3R7476J4BhosK8+DCCK3oX394m + y8FONLeWWbkxMeqg2qW1c/RuTMwquLSmMfFc6lBLitbTOnWo5URraZ06VHrR3I+SZ4/lVrwXe8vUzTBc + NJesqVPuLho7WzQmzlmhMVHsckVYaQLMPKYv+7u89ltsz92epQGpuY3TOwF+MuOHYR16umhuLbP6ZaOj + DqrrcAzUuzGxS8NJY+K51KGWFK2ndepQy4nW0jp1qPR6f0ZkTt0ET4n+7hEy837u0XyyZtSVtdHY2aIx + cc4qjYnRt0gekfK51ev4vuzX8rdbNSGijPo8AYqoIC/nAD+Jvrh7JtNBQTS/1qlDLWnUQbUDxTmifdEq + OzxEr9CYeC51qCVF62mdOtRyorW0Th0qvSOf9V83wVOiv3uEzGzer3b/+xHHiNG42aIxcc4qjYkimv9u + KSfhlddmSflcK/snSrny4vLvzfwM2uWKbsgvKsjLKZ++fPNBBC/0OiPhvWS6jDKaX+vUoZYVralHev3g + 4rpoP7RMHWZp5XUZra1V6jBTRPNpnTrUkqL1tE4dajnRWlqnDrWEaP67p9UVob0/Y7OmLn+KVZ/tUYqb + dQnNReNlS6/j5GiszOn5Omjt6M/RyZiyT+ruAboKCvLyIsDJjKZESR0+hWh+rbP6/SxHFg3c+3OsaB+0 + TDmTuA61LI2J51KHWlK0ntapQy0nWkvr1KGWUIr00Rp2Tqvv61JkjP7+7qnLn2LlbV5+u/QoTEdjZYvG + xDkrNSaKaA0yN3XXAF1FxXj5EbhR+eLatVA6qykx4nLse4y4lDTbmh8RratXNCfG6f05sPozVgqNiedS + h1pStJ7WqUMtJ1pL69ShllC+t6I17JyWt8OI/v7OyXDGbjSv1VKO4VsUqctrOfr72aIxcc5qjYmRJ3jJ + bdnhxClIzYOvbwjc4O2PzF2KpbPvhZztgbijDhZXO4h+a/RBtebEGCP26+r3cu29jeowU0TzaZ061JKi + 9bROHWo50Vpapw61hFUKmy1Tl95E9Pd3ToaiWDSv1VNOtijf2SWl+VOOvS8p///ln5WseJVTmXfdfU1F + Y2XOir+ponXIvOzyHDxI6/QMhagYLz8CN4i+xErKQeGqhbYy92hNI1OnksbIsxzrkMuK1tQzmhP9lR93 + 0bZvmdWvGOr9uVmHmSKaT+vUoZYUrad16lDLidbSOnWoZURr2DWtP9ePdiusuuypVnsAtmhMXLJiY2Lk + 7025LXXXAD388utvcTFefgQ+cMtVBeVH2SqF0xHFx1uS8WFTI7fN6mdnzGhsHemMlllnUEbbvXVWftCc + xsRzqUMtKVpP69ShlhOtpXXqUMs4UqG39Wf6kYp2WW5xOPsKark/GhPnrNiYKHrfPlXuS7a7OMBeokK8 + vA584N4zt7I2KcqBW6aDoDqtdKK59srqhfZoTb3T+szMbF6+T+v/NNSoz4hVf0hqTDyXOtSSovW0Th1q + OdFaWqcOtYxS5IjWsWNaf54f6VZYmX4vRPOTvNGYOGfV48ky72g9Mic7PAcP8ooK8fI68IHoy+uelDPJ + Zp39XH7clfGjec1Mr4PpFqL59szKzYmZB9Urn3Ufic4QnVGwGHmm6oq3wdOYeC51qCVF62mdOtRyorW0 + Th1qKdE6dkxdblPRODumLjeFI13ls0M0Js5ZtTFReM/lSt0tQHNRIV5eB97Ro0hXDiTLmXS9inLlAK13 + 8ezZ1KmmNOuqklUPrGffC3rlHyTlc+Cj7Vf/1aGiefTKapdOa0w8lzrUkqL1tE4dajnRWlqnDrWUTFep + 9kxdblO23XhHulJlh2hMnLPy74AiWpPMSaYr2GAvUSFeXgfeEX1p9UgpTpYDzPKFWA6wSt67yuLy75R/ + v/x3K/2Ay16InNnUKfvxmYOi8t/OuDonWsvIPLvdRrqlGfEyM/bn6GZTrx/XPfT+fKjDTBHNp3XqUEuK + 1tM6dajlRGtpnTrUUjJesdo6va76tO3mOEpDaIf0OnaKxsqc1RsTZf7RumR8yudf3S1AU1EhXl4HrvAg + uPYpBc+6edPKst/LwVH50VEK2eWg9eUVNmWOl8bU28uAZxyglzm+nMPMlG2W6RZBZV+VAsujP/ZnFC5m + vAfK9inj1imkpTHxXOpQS4rW0zp1qOVEa2mdOtRSshxP9Eyvk02OUKybcbz2kSNs912iMXFOxvfRvdzS + KU9WvM0spPfpy7e4GC8/AleMPmv4CKmbNr1o7qtk1gF6xoPqMqeR26MUoaJm0bOpf36oWWdNls/dzD8K + er/O6zBTRPNpnTrUkqL1tE4dajnRWlqnDrWcaC07pS6zi2i8nVKXmc6s73+5LxoT5+zQmCi873Jkt2cY + QgoaEzcEroi+rOTxZL+F00srN6VmHqBnP6guReVywFm20SNn55eCeflvS8oPwt5nz18y4zZVs8/0La+l + LJ8ZZb+Puq1IHXKKaD6tU4daUrSe1qlDLSdaS+vUoZaz+0kudZldROPtkvIdV5eZzhGu9NkhGhPn7NKY + KKL1yfjU3QE0FRXj5UcgUAqB0ReVPJZSEK6bdgmZbk10b2YfoEdzkucyq4CRpaBW5lE+k0ddSVHeQ6UR + MWP9dQpTRPNpnTrUkqL1tE4dajnRWlqnDrWclY8nPkr5jKzL7KL3FWozk/2s3J23/S7RmDhnp8ZEOc6N + 1ihj88jJa8BHomK8/AgEoi8peSyZzwp7T7SWFTL7AN1BdZ+MKsq/Fc0lQ8oP8svVL/e+5i//TWl2lL+T + qQBTpzhFNJ/WqUMtKVpP69ShlhOtpXXqUEuK1rNDel/Nt3NTZ9Z3+j2ieUueaEycM/t3T2s7f+6tktVO + qIQ1RMV4OeV0qyt4wyXMbVM363LKAX+0nuzJcIDuiqP26fUD9CN+II1N3exTRPNpnTrUkqL1tE4dajnR + WlqnDrWkaD07ZMRZpdG4O6QuLzW/h3JHY+Kc3RoThd9R81N3BdBMUJCXGgjsfj/gkVnhjLBrVj3zP8sB + uoPq9qmbdji3dBiXusmniObTOnWoJUXraZ061HKitbROHWpJq57o8FHq8rqKxl09K52NO+r5SnJ/NCbO + 2bExUfgdNTflxKy6K4AWfvn1t7goLz5sCEVfTnJ/Vm5KXKzYpMp0gO6gum1mHiRnf7D5Lqmbe4poPq1T + h1pStJ7WqUMtJ1pL69ShlrTrmed1eV3teLLQagUvJyfkjMbEObs2Jgq/o+al9zOU4Jiiorz4sOEnDgDa + ZIemxEW0vszJdoDuPdUus5/XojnRP3VTTxHNp3XqUEuK1tM6dajlRGtpnTrUsqI1rZxRtxfc8RiiLm0p + mhP5ojFxzs6NicLvqHmpuwBoJirKHzynK0ngjehLSW5PKVzu1JQoVrsFQ8YD9FVvi5UxdZNOoznRN3Uz + TxHNp3XqUEuK1tM6dajlRGtpnTrUsnb77Bx1rLHj1SZ1acvRnMgVjYlzdm9MFH5HzUlpCtVdALTgdk5B + 4A0PeXsus8/m7mmlgkLmA3RF7edT7vdcN+c09mO/1E08RTSf1qlDLSlaT+vUoZYTraV16lDL2u2s17qs + IaLxV02G7/BnaE7kicbEOUdoTFw4/h6bnWsbME9UnD9y4A0PvX48Kz3I7xErnamS/QDdj9rnUzflVD4v + +6Ru3imi+bROHWpJ0Xpapw61nGgtrVOHWtZuZ7zWZQ0Rjb9qyklQdVnL8kDsHNGYOOdIjYnC76ix2e1O + EDBfVJw/aiAQfRnJxznKAeEqZzuusD/Kgx+jucttybKPV7vN2Qqpm3aKaD6tU4daUrSe1qlDLSdaS+vU + oZYWrWvFjD4ZZafvmrqk5ZXjkGh9Mi4aE+ccrTFR+B01Lqtf5QY5RUX6Iwbe8GCp+1POmK6b7zBW+HG8 + 0gG6s+4fS6b3nuJE29TNOkU0n9apQy0pWk/r1KGWE62ldepQS9vlTNdSFKtLGmKX75kdj5sdx82LxsQ5 + R2xMXHj/jUnd3EAzUZH+YPn05ZsPF36iMXFfjnwQmL2wsNq+Udi+P71+jD5jpzNaZ2X2fo3m1Dp1qCVF + 62mdOtRyorW0Th1qabuc5Trj1hbRPFbLrg9Sdfb2nGhMnHPk36SF31H9s8Mt+CCfoFh/qMA7NCjez64/ + qu6V+f66qx6gu2fxx8l+OXEpVjl76/5k+VyN5tY6daglRetpnTrUcqK1tE4dannR2lZLXcpQ0TxWS13K + tpygMC49jxui8TLn6I2JC++/9im/aTxjAnqJivUHyeev332wcJNykKPA9iOzz+TNKOsZYqsfoDuwfp2/ + +au/Hn7bjGeV12CZd7QeOad8v2R7r0bzbJ061JKi9bROHWo50Vpapw61vNU/G8v861KG2uE2WHUp23Mc + 1yfluGHEmdvR2JmjMfGa99/zcSImjBIU7Q8ReED5cjpqkc0X88eyvTZ2OUAvr71ofUdIeU3t8N5zBcXr + lG2RuckUzbl16lBLitbTOnWo5URraZ061PJWvzpw1pV7q98uaPQDwzNQIH0+M44bonlkjsZEzPvvvpTv + NldHwGC//PpbXLjfOdDAEZoUo87I2UmmH8y7HaCX9RyhuL1LM+KaI3x2RinFqFXek9H8W6cOtaRoPa1T + h1pOtJbWqUMtrxxfRetbJbOOD0vBKJrPKjly8bQcIx/x+//RlOOGmScxRHPKHI2J9x35RK/3Uj6TNCMg + g6h4v2k88JoeyoHQLmcjZD+TdxUZDv52PkDfqbh9OSA+YhNw5ybF7ILCM6L1tE4daknRelqnDrWcaC2t + U4faQrS+VVKXMEU0n1VSl3B4Rz1J4b2U32Blu2QpkEZzzByNiduU3xs73BLvmZS6jdcLZBQU8bcMDHBp + VKxywO3LuZ+yXWec5X+kWwWUbbzSAXaZa/nh6Wqk1y6fm9E2y56yT0tzaZfP0WiNrVOHWlK0ntapQy0n + Wkvr1KG2sPJVgHUJU6xa0C7zrkvghdLEP8IVsW9zOR7MeqZ2NOfM8Vv2fkdoUpTPXbUOWElUyN8pMFH5 + MiyFq9mFt3Lgv1MBbSXlh1evg79y0HXUs+7fKq/t8j6b/SO3jH85EHZ58P3KNivvmbINsxShylwun5/2 + KQC0dfnu361YWo4fnJRCZuW9V16jKzcJX/72qssCVnO6zVFU0N8hkFj58rwUUy+JvmxvyeWsgJJyYO+L + Oa+yby6F11t/gF32r+bSfcrBdtle5YD78v54tNj98j1WUv5uiUL1OJdt/nJ/lkT766NcfsRccvncVDwA + gPkuzYryHZ25aFqO5V8eR9Tpw5Jevu+ynCBU8va3sN9fsKEtH4YNAAAAbONy4klJKVZe0qqBcWk2XHIZ + y8kLHNXlPdfiZK+Xefk+uzQdSjQe4KC2ak4AAAAAAAD5bdGcAAAAAAAAFhMV/FcIAAAAAACwqKjwnzSn + Kz0AAAAAAIC1LXFrJwAAAAAAYDNRQ2ByXCUBAAAAAAC7CxoEUwIAAAAAABxI1CzoHFdIAAAAAADAwY14 + BsXnr981JAAAAAAAgNc+ffkWNhYeiWYEAAAAAABwt9KsuNawKFdblH+mCQEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEA2v/vd/w821uP4fyAg+gAAAABJRU5ErkJggg== + + + + 17, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/MessageDlg.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/MessageDlg.cs new file mode 100644 index 00000000..3dff85c9 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/MessageDlg.cs @@ -0,0 +1,62 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading.Tasks; +using Opc.Ua.Configuration; +using System.Windows.Forms; + +namespace Opc.Ua.Server.Controls +{ + public class ApplicationMessageDlg : IApplicationMessageDlg + { + private string message = string.Empty; + private MessageBoxButtons buttons = MessageBoxButtons.OK; + + public override void Message(string text, bool ask) + { + message = text; + + if (ask) + { + buttons = MessageBoxButtons.YesNo; + } + else + { + buttons = MessageBoxButtons.OK; + } + } + + public override async Task ShowAsync() + { + DialogResult result = MessageBox.Show(message, "OPC UA", buttons); + return await Task.FromResult((result == DialogResult.OK) || (result == DialogResult.Yes)); + } + } +} + diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e8911782 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/AssemblyInfo.cs @@ -0,0 +1,53 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Opc.Ua.ServerControls")] +[assembly: AssemblyDescription("UA Server Controls Library")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OPC Foundation")] +[assembly: AssemblyProduct("OPC UA SDK")] +[assembly: AssemblyCopyright(AssemblyVersionInfo.Copyright)] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fa4aef33-518d-4c6a-8411-203f7f5d16e7")] + diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/AssemblyVersionInfo.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/AssemblyVersionInfo.cs new file mode 100644 index 00000000..6492ea10 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/AssemblyVersionInfo.cs @@ -0,0 +1,38 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 The OPC Foundation, Inc. All rights reserved. + * + * OPC Reciprocal Community License ("RCL") Version 1.00 + * + * Unless explicitly acquired and licensed from Licensor under another + * license, the contents of this file are subject to the Reciprocal + * Community License ("RCL") Version 1.00, or subsequent versions + * as allowed by the RCL, and You may not copy or use this file in either + * source code or executable form, except in compliance with the terms and + * conditions of the RCL. + * + * All software distributed under the RCL is provided strictly on an + * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RCL for specific + * language governing rights and limitations under the RCL. + * + * The complete license agreement can be found here: + * http://opcfoundation.org/License/RCL/1.00/ + * ======================================================================*/ + +using System; +using System.Collections.Generic; +using System.Text; + +/// +/// Defines string constants for SDK version information. +/// +internal static class AssemblyVersionInfo +{ + /// + /// The current copy right notice. + /// + public const string Copyright = "Copyright © 2004-2020 OPC Foundation, Inc"; + +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/Resources.Designer.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/Resources.Designer.cs new file mode 100644 index 00000000..f3217fba --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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 Opc.Ua.Server.Controls.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("Opc.Ua.Server.Controls.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; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/Resources.resx b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/Resources.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.Designer.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.Designer.cs new file mode 100644 index 00000000..95d96280 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.Designer.cs @@ -0,0 +1,389 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Server.Controls +{ + partial class ServerDiagnosticsCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.MainPN = new System.Windows.Forms.SplitContainer(); + this.SessionsGB = new System.Windows.Forms.GroupBox(); + this.SessionsLV = new System.Windows.Forms.ListView(); + this.SessionIdCH = new System.Windows.Forms.ColumnHeader(); + this.SessionNameCH = new System.Windows.Forms.ColumnHeader(); + this.UserNameCH = new System.Windows.Forms.ColumnHeader(); + this.LastContactTimeCH = new System.Windows.Forms.ColumnHeader(); + this.SubscriptionsGB = new System.Windows.Forms.GroupBox(); + this.SubscriptionsLV = new System.Windows.Forms.ListView(); + this.SubscriptionIdCH = new System.Windows.Forms.ColumnHeader(); + this.PublishingIntervalCH = new System.Windows.Forms.ColumnHeader(); + this.ItemCountCH = new System.Windows.Forms.ColumnHeader(); + this.SequenceNumberCH = new System.Windows.Forms.ColumnHeader(); + this.AddressPN = new System.Windows.Forms.Panel(); + this.EndpointsLB = new System.Windows.Forms.Label(); + this.UrlCB = new System.Windows.Forms.ComboBox(); + this.StatusBAR = new System.Windows.Forms.StatusStrip(); + this.ServerStatusLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.ServerStateLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.ServerTimeLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); + this.sessionsLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); + this.subscriptionsLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel(); + this.itemsLB = new System.Windows.Forms.ToolStripStatusLabel(); + this.UpdateTimerCTRL = new System.Windows.Forms.Timer(this.components); + this.MainPN.Panel1.SuspendLayout(); + this.MainPN.Panel2.SuspendLayout(); + this.MainPN.SuspendLayout(); + this.SessionsGB.SuspendLayout(); + this.SubscriptionsGB.SuspendLayout(); + this.AddressPN.SuspendLayout(); + this.StatusBAR.SuspendLayout(); + this.SuspendLayout(); + // + // MainPN + // + this.MainPN.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainPN.Location = new System.Drawing.Point(0, 32); + this.MainPN.Name = "MainPN"; + this.MainPN.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // MainPN.Panel1 + // + this.MainPN.Panel1.Controls.Add(this.SessionsGB); + this.MainPN.Panel1.Padding = new System.Windows.Forms.Padding(2); + // + // MainPN.Panel2 + // + this.MainPN.Panel2.Controls.Add(this.SubscriptionsGB); + this.MainPN.Panel2.Padding = new System.Windows.Forms.Padding(2); + this.MainPN.Size = new System.Drawing.Size(532, 291); + this.MainPN.SplitterDistance = 131; + this.MainPN.TabIndex = 3; + // + // SessionsGB + // + this.SessionsGB.Controls.Add(this.SessionsLV); + this.SessionsGB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionsGB.Location = new System.Drawing.Point(2, 2); + this.SessionsGB.Name = "SessionsGB"; + this.SessionsGB.Size = new System.Drawing.Size(528, 127); + this.SessionsGB.TabIndex = 0; + this.SessionsGB.TabStop = false; + this.SessionsGB.Text = "Sessions"; + // + // SessionsLV + // + this.SessionsLV.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.SessionIdCH, + this.SessionNameCH, + this.UserNameCH, + this.LastContactTimeCH}); + this.SessionsLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionsLV.FullRowSelect = true; + this.SessionsLV.Location = new System.Drawing.Point(3, 16); + this.SessionsLV.Name = "SessionsLV"; + this.SessionsLV.Size = new System.Drawing.Size(522, 108); + this.SessionsLV.TabIndex = 0; + this.SessionsLV.UseCompatibleStateImageBehavior = false; + this.SessionsLV.View = System.Windows.Forms.View.Details; + // + // SessionIdCH + // + this.SessionIdCH.Text = "SessionId"; + this.SessionIdCH.Width = 101; + // + // SessionNameCH + // + this.SessionNameCH.Text = "Name"; + this.SessionNameCH.Width = 90; + // + // UserNameCH + // + this.UserNameCH.Text = "User"; + this.UserNameCH.Width = 90; + // + // LastContactTimeCH + // + this.LastContactTimeCH.Text = "Last Contact"; + this.LastContactTimeCH.Width = 126; + // + // SubscriptionsGB + // + this.SubscriptionsGB.Controls.Add(this.SubscriptionsLV); + this.SubscriptionsGB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SubscriptionsGB.Location = new System.Drawing.Point(2, 2); + this.SubscriptionsGB.Name = "SubscriptionsGB"; + this.SubscriptionsGB.Size = new System.Drawing.Size(528, 152); + this.SubscriptionsGB.TabIndex = 0; + this.SubscriptionsGB.TabStop = false; + this.SubscriptionsGB.Text = "Subscriptions"; + // + // SubscriptionsLV + // + this.SubscriptionsLV.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.SubscriptionIdCH, + this.PublishingIntervalCH, + this.ItemCountCH, + this.SequenceNumberCH}); + this.SubscriptionsLV.Dock = System.Windows.Forms.DockStyle.Fill; + this.SubscriptionsLV.FullRowSelect = true; + this.SubscriptionsLV.Location = new System.Drawing.Point(3, 16); + this.SubscriptionsLV.Name = "SubscriptionsLV"; + this.SubscriptionsLV.Size = new System.Drawing.Size(522, 133); + this.SubscriptionsLV.TabIndex = 0; + this.SubscriptionsLV.UseCompatibleStateImageBehavior = false; + this.SubscriptionsLV.View = System.Windows.Forms.View.Details; + // + // SubscriptionIdCH + // + this.SubscriptionIdCH.Text = "SubscriptionId"; + this.SubscriptionIdCH.Width = 90; + // + // PublishingIntervalCH + // + this.PublishingIntervalCH.Text = "Publishing Interval"; + this.PublishingIntervalCH.Width = 101; + // + // ItemCountCH + // + this.ItemCountCH.Text = "Item Count"; + this.ItemCountCH.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.ItemCountCH.Width = 126; + // + // SequenceNumberCH + // + this.SequenceNumberCH.Text = "Seq No"; + this.SequenceNumberCH.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // AddressPN + // + this.AddressPN.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.AddressPN.Controls.Add(this.EndpointsLB); + this.AddressPN.Controls.Add(this.UrlCB); + this.AddressPN.Dock = System.Windows.Forms.DockStyle.Top; + this.AddressPN.Location = new System.Drawing.Point(0, 0); + this.AddressPN.Name = "AddressPN"; + this.AddressPN.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.AddressPN.Size = new System.Drawing.Size(532, 32); + this.AddressPN.TabIndex = 0; + // + // EndpointsLB + // + this.EndpointsLB.AutoSize = true; + this.EndpointsLB.Location = new System.Drawing.Point(0, 7); + this.EndpointsLB.Name = "EndpointsLB"; + this.EndpointsLB.Size = new System.Drawing.Size(113, 13); + this.EndpointsLB.TabIndex = 0; + this.EndpointsLB.Text = "Server Endpoint URLs"; + this.EndpointsLB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // UrlCB + // + this.UrlCB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UrlCB.FormattingEnabled = true; + this.UrlCB.Location = new System.Drawing.Point(119, 4); + this.UrlCB.Name = "UrlCB"; + this.UrlCB.Size = new System.Drawing.Size(406, 21); + this.UrlCB.TabIndex = 1; + // + // StatusBAR + // + this.StatusBAR.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ServerStatusLB, + this.ServerStateLB, + this.toolStripStatusLabel1, + this.ServerTimeLB, + this.toolStripStatusLabel2, + this.sessionsLB, + this.toolStripStatusLabel3, + this.subscriptionsLB, + this.toolStripStatusLabel4, + this.itemsLB}); + this.StatusBAR.Location = new System.Drawing.Point(0, 323); + this.StatusBAR.Name = "StatusBAR"; + this.StatusBAR.Size = new System.Drawing.Size(532, 22); + this.StatusBAR.TabIndex = 1; + this.StatusBAR.Text = "statusStrip1"; + // + // ServerStatusLB + // + this.ServerStatusLB.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.ServerStatusLB.Name = "ServerStatusLB"; + this.ServerStatusLB.Size = new System.Drawing.Size(45, 17); + this.ServerStatusLB.Text = "Status:"; + // + // ServerStateLB + // + this.ServerStateLB.Name = "ServerStateLB"; + this.ServerStateLB.Size = new System.Drawing.Size(52, 17); + this.ServerStateLB.Text = "Running"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(84, 17); + this.toolStripStatusLabel1.Text = "Current Time:"; + // + // ServerTimeLB + // + this.ServerTimeLB.Name = "ServerTimeLB"; + this.ServerTimeLB.Size = new System.Drawing.Size(49, 17); + this.ServerTimeLB.Text = "00:00:00"; + // + // toolStripStatusLabel2 + // + this.toolStripStatusLabel2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; + this.toolStripStatusLabel2.Size = new System.Drawing.Size(56, 17); + this.toolStripStatusLabel2.Text = "Sessions:"; + // + // sessionsLB + // + this.sessionsLB.Name = "sessionsLB"; + this.sessionsLB.Size = new System.Drawing.Size(13, 17); + this.sessionsLB.Text = "0"; + // + // toolStripStatusLabel3 + // + this.toolStripStatusLabel3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; + this.toolStripStatusLabel3.Size = new System.Drawing.Size(84, 17); + this.toolStripStatusLabel3.Text = "Subscriptions:"; + // + // subscriptionsLB + // + this.subscriptionsLB.Name = "subscriptionsLB"; + this.subscriptionsLB.Size = new System.Drawing.Size(13, 17); + this.subscriptionsLB.Text = "0"; + // + // toolStripStatusLabel4 + // + this.toolStripStatusLabel4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.toolStripStatusLabel4.Name = "toolStripStatusLabel4"; + this.toolStripStatusLabel4.Size = new System.Drawing.Size(42, 17); + this.toolStripStatusLabel4.Text = "Items:"; + // + // itemsLB + // + this.itemsLB.Name = "itemsLB"; + this.itemsLB.Size = new System.Drawing.Size(13, 17); + this.itemsLB.Text = "0"; + // + // UpdateTimerCTRL + // + this.UpdateTimerCTRL.Interval = 1000; + this.UpdateTimerCTRL.Tick += new System.EventHandler(this.UpdateTimerCTRL_Tick); + // + // ServerDiagnosticsCtrl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.MainPN); + this.Controls.Add(this.StatusBAR); + this.Controls.Add(this.AddressPN); + this.Name = "ServerDiagnosticsCtrl"; + this.Size = new System.Drawing.Size(532, 345); + this.MainPN.Panel1.ResumeLayout(false); + this.MainPN.Panel2.ResumeLayout(false); + this.MainPN.ResumeLayout(false); + this.SessionsGB.ResumeLayout(false); + this.SubscriptionsGB.ResumeLayout(false); + this.AddressPN.ResumeLayout(false); + this.AddressPN.PerformLayout(); + this.StatusBAR.ResumeLayout(false); + this.StatusBAR.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.SplitContainer MainPN; + private System.Windows.Forms.GroupBox SessionsGB; + private System.Windows.Forms.ListView SessionsLV; + private System.Windows.Forms.ColumnHeader SessionIdCH; + private System.Windows.Forms.ColumnHeader SessionNameCH; + private System.Windows.Forms.ColumnHeader UserNameCH; + private System.Windows.Forms.ColumnHeader LastContactTimeCH; + private System.Windows.Forms.GroupBox SubscriptionsGB; + private System.Windows.Forms.ListView SubscriptionsLV; + private System.Windows.Forms.ColumnHeader SubscriptionIdCH; + private System.Windows.Forms.ColumnHeader PublishingIntervalCH; + private System.Windows.Forms.ColumnHeader ItemCountCH; + private System.Windows.Forms.ColumnHeader SequenceNumberCH; + private System.Windows.Forms.Panel AddressPN; + private System.Windows.Forms.Label EndpointsLB; + private System.Windows.Forms.ComboBox UrlCB; + private System.Windows.Forms.StatusStrip StatusBAR; + private System.Windows.Forms.ToolStripStatusLabel ServerStatusLB; + private System.Windows.Forms.ToolStripStatusLabel ServerStateLB; + private System.Windows.Forms.ToolStripStatusLabel ServerTimeLB; + private System.Windows.Forms.Timer UpdateTimerCTRL; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; + private System.Windows.Forms.ToolStripStatusLabel sessionsLB; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; + private System.Windows.Forms.ToolStripStatusLabel subscriptionsLB; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4; + private System.Windows.Forms.ToolStripStatusLabel itemsLB; + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.cs new file mode 100644 index 00000000..afd7b9f4 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.cs @@ -0,0 +1,193 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Opc.Ua.Server; + +namespace Opc.Ua.Server.Controls +{ + /// + /// Displays diagnostics information for a server running within the process. + /// + public partial class ServerDiagnosticsCtrl : UserControl + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public ServerDiagnosticsCtrl() + { + InitializeComponent(); + } + #endregion + + #region Private Fields + private StandardServer m_server; + private ApplicationConfiguration m_configuration; + #endregion + + #region Public Interface + /// + /// Creates a form which displays the status for a UA server. + /// + /// The server displayed in the form. + /// The configuration used to initialize the server. + public void Initialize(StandardServer server, ApplicationConfiguration configuration) + { + m_server = server; + m_configuration = configuration; + UpdateTimerCTRL.Enabled = true; + + // add the urls to the drop down. + UrlCB.Items.Clear(); + + foreach (EndpointDescription endpoint in m_server.GetEndpoints()) + { + if (UrlCB.FindStringExact(endpoint.EndpointUrl) == -1) + { + UrlCB.Items.Add(endpoint.EndpointUrl); + } + } + + if (UrlCB.Items.Count > 0) + { + UrlCB.SelectedIndex = 0; + } + } + #endregion + + #region Private Methods + /// + /// Updates the sessions displayed in the form. + /// + private void UpdateSessions() + { + SessionsLV.Items.Clear(); + + IList sessions = m_server.CurrentInstance.SessionManager.GetSessions(); + + for (int ii = 0; ii < sessions.Count; ii++) + { + Session session = sessions[ii]; + + lock (session.DiagnosticsLock) + { + ListViewItem item = new ListViewItem(session.SessionDiagnostics.SessionName); + + if (session.Identity != null) + { + item.SubItems.Add(session.Identity.DisplayName); + } + else + { + item.SubItems.Add(String.Empty); + } + + item.SubItems.Add(String.Format("{0}", session.Id)); + item.SubItems.Add(String.Format("{0:HH:mm:ss}", session.SessionDiagnostics.ClientLastContactTime.ToLocalTime())); + + SessionsLV.Items.Add(item); + } + } + + // adjust + for (int ii = 0; ii < SessionsLV.Columns.Count; ii++) + { + SessionsLV.Columns[ii].Width = -2; + } + } + + /// + /// Updates the subscriptions displayed in the form. + /// + private void UpdateSubscriptions() + { + SubscriptionsLV.Items.Clear(); + + IList subscriptions = m_server.CurrentInstance.SubscriptionManager.GetSubscriptions(); + + for (int ii = 0; ii < subscriptions.Count; ii++) + { + Subscription subscription = subscriptions[ii]; + + ListViewItem item = new ListViewItem(subscription.Id.ToString()); + + item.SubItems.Add(String.Format("{0}", (int)subscription.PublishingInterval)); + item.SubItems.Add(String.Format("{0}", subscription.MonitoredItemCount)); + + lock (subscription.DiagnosticsLock) + { + item.SubItems.Add(String.Format("{0}", subscription.Diagnostics.NextSequenceNumber)); + } + + SubscriptionsLV.Items.Add(item); + } + + for (int ii = 0; ii < SubscriptionsLV.Columns.Count; ii++) + { + SubscriptionsLV.Columns[ii].Width = -2; + } + } + #endregion + + #region Event Handlers + /// + /// A callback used to periodically refresh the form contents. + /// + private void UpdateTimerCTRL_Tick(object sender, EventArgs e) + { + try + { + ServerStateLB.Text = m_server.CurrentInstance.CurrentState.ToString(); + ServerTimeLB.Text = String.Format("{0:HH:mm:ss}", DateTime.Now); + UpdateSessions(); + sessionsLB.Text = Convert.ToString( SessionsLV.Items.Count ); + UpdateSubscriptions(); + subscriptionsLB.Text = Convert.ToString( SubscriptionsLV.Items.Count ); + int itemTotal = 0; + for ( int i = 0; i < SubscriptionsLV.Items.Count; i++ ) + { + itemTotal += Convert.ToInt32( SubscriptionsLV.Items[i].SubItems[2].Text ); + } + itemsLB.Text = Convert.ToString( itemTotal ); + } + catch (Exception exception) + { + ServerUtils.HandleException(this.Text, exception); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.resx b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.resx new file mode 100644 index 00000000..a3ae7ed6 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerDiagnosticsCtrl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 124, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.Designer.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.Designer.cs new file mode 100644 index 00000000..cd2663a1 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.Designer.cs @@ -0,0 +1,176 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.Server.Controls; + +namespace Opc.Ua.Server.Controls +{ + partial class ServerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.TrayIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.ServerDiagnosticsCTRL = new Opc.Ua.Server.Controls.ServerDiagnosticsCtrl(); + this.serverHeaderBranding1 = new Opc.Ua.Server.Controls.HeaderBranding(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // TrayIcon + // + this.TrayIcon.Text = "TrayIcon"; + this.TrayIcon.Visible = true; + this.TrayIcon.MouseMove += new System.Windows.Forms.MouseEventHandler(this.TrayIcon_MouseMove); + this.TrayIcon.DoubleClick += new System.EventHandler(this.TrayIcon_DoubleClick); + // + // ServerDiagnosticsCTRL + // + this.ServerDiagnosticsCTRL.Dock = System.Windows.Forms.DockStyle.Fill; + this.ServerDiagnosticsCTRL.Location = new System.Drawing.Point(0, 114); + this.ServerDiagnosticsCTRL.Name = "ServerDiagnosticsCTRL"; + this.ServerDiagnosticsCTRL.Size = new System.Drawing.Size(739, 368); + this.ServerDiagnosticsCTRL.TabIndex = 0; + // + // serverHeaderBranding1 + // + this.serverHeaderBranding1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.serverHeaderBranding1.BackColor = System.Drawing.Color.White; + this.serverHeaderBranding1.Dock = System.Windows.Forms.DockStyle.Top; + this.serverHeaderBranding1.Location = new System.Drawing.Point(0, 24); + this.serverHeaderBranding1.MaximumSize = new System.Drawing.Size(0, 100); + this.serverHeaderBranding1.MinimumSize = new System.Drawing.Size(500, 90); + this.serverHeaderBranding1.Name = "serverHeaderBranding1"; + this.serverHeaderBranding1.Padding = new System.Windows.Forms.Padding(3); + this.serverHeaderBranding1.Size = new System.Drawing.Size(739, 90); + this.serverHeaderBranding1.TabIndex = 1; + this.serverHeaderBranding1.Visible = false; + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(739, 24); + this.menuStrip1.TabIndex = 2; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(92, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contentsToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "&Help"; + // + // contentsToolStripMenuItem + // + this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem"; + this.contentsToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.contentsToolStripMenuItem.Text = "&Contents"; + this.contentsToolStripMenuItem.Click += new System.EventHandler(this.ContentsToolStripMenuItem_Click); + // + // ServerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(739, 482); + this.Controls.Add(this.ServerDiagnosticsCTRL); + this.Controls.Add(this.serverHeaderBranding1); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "ServerForm"; + this.Text = "Quickstart Empty Server"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ServerForm_FormClosed); + this.Resize += new System.EventHandler(this.ServerForm_Resize); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ServerDiagnosticsCtrl ServerDiagnosticsCTRL; + private System.Windows.Forms.NotifyIcon TrayIcon; + private HeaderBranding serverHeaderBranding1; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem; + + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.cs new file mode 100644 index 00000000..e31dbadb --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.cs @@ -0,0 +1,240 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Runtime.InteropServices; +using Opc.Ua; +using Opc.Ua.Configuration; +using System.IO; +using System.Linq; + +namespace Opc.Ua.Server.Controls +{ + /// + /// The primary form displayed by the application. + /// + public partial class ServerForm : Form + { + #region Constructors + /// + /// Creates an empty form. + /// + public ServerForm() + { + InitializeComponent(); + } + + /// + /// Creates a form which displays the status for a UA server. + /// + public ServerForm(StandardServer server, ApplicationConfiguration configuration, bool showCertificateValidationDialog = false) + { + InitializeComponent(); + + m_server = server; + m_configuration = configuration; + this.ServerDiagnosticsCTRL.Initialize(m_server, m_configuration); + + if (showCertificateValidationDialog && + !configuration.SecurityConfiguration.AutoAcceptUntrustedCertificates) + { + configuration.CertificateValidator.CertificateValidation += + new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + } + + TrayIcon.Text = this.Text = m_configuration.ApplicationName; + this.Icon = TrayIcon.Icon = ServerUtils.GetAppIcon(); + } + + + /// + /// Creates a form which displays the status for a UA server. + /// + public ServerForm(ApplicationInstance application, bool showCertificateValidationDialog = false) + { + InitializeComponent(); + + m_application = application; + m_server = application.Server as StandardServer; + m_configuration = application.ApplicationConfiguration; + this.ServerDiagnosticsCTRL.Initialize(m_server, m_configuration); + + if (showCertificateValidationDialog && + !application.ApplicationConfiguration.SecurityConfiguration.AutoAcceptUntrustedCertificates) + { + application.ApplicationConfiguration.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + } + + TrayIcon.Text = this.Text = m_configuration.ApplicationName; + this.Icon = TrayIcon.Icon = ServerUtils.GetAppIcon(); + } + #endregion + + #region Private Fields + private ApplicationInstance m_application; + private StandardServer m_server; + private ApplicationConfiguration m_configuration; + #endregion + + #region Event Handlers + /// + /// Handles a certificate validation error. + /// + void CertificateValidator_CertificateValidation(CertificateValidator validator, CertificateValidationEventArgs e) + { + try + { + HandleCertificateValidationError(this, validator, e); + } + catch (Exception exception) + { + HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); + } + } + + private void ServerForm_Resize(object sender, EventArgs e) + { + if (FormWindowState.Minimized == WindowState) + { + Hide(); + } + } + + private void TrayIcon_DoubleClick(object sender, EventArgs e) + { + Show(); + WindowState = FormWindowState.Normal; + } + + private void Server_ExitMI_Click(object sender, EventArgs e) + { + Close(); + } + + private void ServerForm_FormClosed(object sender, FormClosedEventArgs e) + { + try + { + m_server.Stop(); + } + catch (Exception exception) + { + Utils.Trace(exception, "Error stopping server."); + } + } + + private void TrayIcon_MouseMove(object sender, MouseEventArgs e) + { + try + { + TrayIcon.Text = String.Format( + "{0} [{1} {2:HH:mm:ss}]", + m_configuration.ApplicationName, + m_server.CurrentInstance.CurrentState, + DateTime.Now); + } + catch (Exception exception) + { + Utils.Trace(exception, "Error getting server status."); + } + } + #endregion + + private void ExitToolStripMenuItem_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Quit the application", "OPC UA", MessageBoxButtons.YesNoCancel) == DialogResult.Yes) + { + Application.Exit(); + } + } + + private void ContentsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start( Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + "WebHelp" + Path.DirectorySeparatorChar + "index.htm"); + } + catch (Exception ex) + { + MessageBox.Show("Unable to launch help documentation. Error: " + ex.Message); + } + } + + /// + /// Displays the details of an exception. + /// + public static void HandleException(string caption, MethodBase method, Exception e) + { + if (String.IsNullOrEmpty(caption)) + { + caption = method.Name; + } + ExceptionDlg.Show(caption, e); + } + + /// + /// Handles a certificate validation error. + /// + /// The caller's text is used as the caption of the shown to provide details about the error. + /// The validator (not used). + /// The instance event arguments provided when a certificate validation error occurs. + public static void HandleCertificateValidationError(Form caller, CertificateValidator validator, CertificateValidationEventArgs e) + { + StringBuilder buffer = new StringBuilder(); + buffer.AppendLine("Certificate could not be validated!"); + buffer.AppendLine("Validation error(s):"); + ServiceResult error = e.Error; + while (error != null) + { + buffer.AppendFormat("- {0}\r\n", error.ToString().Split('\r','\n').FirstOrDefault()); + error = error.InnerResult; + } + buffer.AppendFormat("\r\nSubject: {0}\r\n", e.Certificate.Subject); + buffer.AppendFormat("Issuer: {0}\r\n", X509Utils.CompareDistinguishedName(e.Certificate.Subject, e.Certificate.Issuer) + ? "Self-signed" : e.Certificate.Issuer); + buffer.AppendFormat("Valid From: {0}\r\n", e.Certificate.NotBefore); + buffer.AppendFormat("Valid To: {0}\r\n", e.Certificate.NotAfter); + buffer.AppendFormat("Thumbprint: {0}\r\n\r\n", e.Certificate.Thumbprint); + buffer.Append("Security certificate problems may indicate an attempt to intercept any data you send "); + buffer.Append("to a server or to allow an untrusted client to connect to your server."); + buffer.Append("\r\n\r\nAccept anyway?"); + + if (MessageBox.Show(buffer.ToString(), caller.Text, MessageBoxButtons.YesNo) == DialogResult.Yes) + { + e.AcceptAll = true; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.resx b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.resx new file mode 100644 index 00000000..8b34f150 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 112, 17 + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/ServerUtils.cs b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerUtils.cs new file mode 100644 index 00000000..57818992 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/ServerUtils.cs @@ -0,0 +1,63 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Drawing; + +namespace Opc.Ua.Server.Controls +{ + /// + /// Defines numerous re-useable utility functions. + /// + public partial class ServerUtils + { + /// + /// Handles an exception. + /// + public static void HandleException(string caption, Exception e) + { + ExceptionDlg.Show(caption, e); + } + + /// + /// Returns the application icon. + /// + public static System.Drawing.Icon GetAppIcon() + { + try + { + return new Icon("App.ico"); + } + catch (Exception) + { + return null; + } + } + } +} diff --git a/IOB-OPC-UA/Applications/ServerControls.Net4/UA Server Controls.csproj b/IOB-OPC-UA/Applications/ServerControls.Net4/UA Server Controls.csproj new file mode 100644 index 00000000..97563cd9 --- /dev/null +++ b/IOB-OPC-UA/Applications/ServerControls.Net4/UA Server Controls.csproj @@ -0,0 +1,178 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {80056988-44E7-4EF4-9F59-50BCF215CB03} + Library + Properties + Opc.Ua.Server.Controls + Opc.Ua.ServerControls + v4.6.2 + 512 + false + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + false + + + + + 3.5 + True + + + + + 3.5 + + + 3.5 + + + + + + + Form + + + ExceptionDlg.cs + + + + + + True + True + Resources.resx + + + UserControl + + + ServerDiagnosticsCtrl.cs + + + Form + + + ServerForm.cs + + + UserControl + + + HeaderBranding.cs + + + + + + ExceptionDlg.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + ServerDiagnosticsCtrl.cs + Designer + + + ServerForm.cs + Designer + + + HeaderBranding.cs + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + {d918c0f6-39bd-4ed0-8323-e5a2eb9a85da} + Opc.Ua.Core + + + {a39614ca-8ebe-4408-a9d2-38c7e5ae2a1d} + Opc.Ua.Configuration + + + {251c2bd9-33f5-4eb1-903d-8463c8fd16f0} + Opc.Ua.Server + + + {a247d2ee-14fc-463d-a9ba-6cff1ef22b7a} + UA Client Controls + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Applications/UAReferenceServer.ctt.xml b/IOB-OPC-UA/Applications/UAReferenceServer.ctt.xml new file mode 100644 index 00000000..b4dcac59 --- /dev/null +++ b/IOB-OPC-UA/Applications/UAReferenceServer.ctt.xml @@ -0,0 +1,22073 @@ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/IOB-OPC-UA/Directory.Build.props b/IOB-OPC-UA/Directory.Build.props new file mode 100644 index 00000000..dfd8bff4 --- /dev/null +++ b/IOB-OPC-UA/Directory.Build.props @@ -0,0 +1,5 @@ + + + + + diff --git a/IOB-OPC-UA/Docs/Certificates.md b/IOB-OPC-UA/Docs/Certificates.md new file mode 100644 index 00000000..e06570af --- /dev/null +++ b/IOB-OPC-UA/Docs/Certificates.md @@ -0,0 +1,45 @@ +## Certificates + +All required application certificates for OPC UA are created at the first start of each application in a directory or OS-level certificate store and remain in use until deleted from the store. + +The UA stack allows also for using CA issued application certificates and remote certificate store and trust list management with a *Global Discovery Server* using *Server Push*. + +### Certificate stores + +The layout of the certificate stores for sample applications which store the certificates in the file system follow the recommended layout in the [specification](https://reference.opcfoundation.org/v104/GDS/docs/F.1/), where certificates are stored in a `certs` folder, private keys under a `private` folder and revocation lists under a `crl` folder with a `` folder called `pki`. + +The UA .NET Standard stack supports the following certificate stores: + +- The **Application** store `/own`which contains private keys used by the application. + +- The **Issuer** store `/issuer`which contains certificates which are needed for validation, for example to complete the validation of a certificate chain. A certificate in the *Issuer* store is *not* trusted! + +- The **Trusted** store `/trusted`which contains certificates which are trusted by the application. The certificates in this store can either be self signed, leaf, root CA or sub CA certificates. + The most common use case is to add a self signed application certificate to the *Trusted* store to establish trust with that application. + If the application certificate is the leaf of a chain, the trust can be established by adding the root CA, a sub CA or the leaf certificate itself to the *Trusted* store. Each of the options enables a different set of trusted certificates. A trusted Root CA or Sub CA certificate is used as the trust anchor for the certificate chain, which means any leaf certificate with a chain which contains the Root CA and Sub CA certificate is trusted, but the specification still mandates the validation of the whole chain. For the chain validation any certificate in the chain except the leaf certificate must be available from the *Issuer* store. + + If only the leaf certificate is in the *Trusted* store and the rest of the chain is stored in the *Issuer* store, then only the leaf certificate is trusted. + As an example, to trust an application certificate that is issued by a Root CA, only the Root CA certificate is required in the *Trusted* store to establish trust to all application certificates issued by the CA. This option can greatly simplify the management of OPC UA Clients and Servers because only one certificate needs to be distributed across all systems. + +- The **Rejected** store `/rejected` which contains certificates which have been rejected. This store is provided as a convenience for the administrator of an application to allow to copy an untrusted certificate from the *Rejected* to the *Trusted* store to establish trust with that application. + +- The **Issuer User** store `/issuerUser` which contains user certificates which are used to validate user certificates. + +- The **Trusted User** store `/trustedUser` which contains user certificates which are trusted by an application. To establish trust, the same rules apply as explained for the *Trusted* and the *Issuer* store. + +- The **Issuer Https** store `/issuerHttps` which contains https certificates which are used to validate https connection certificates. + +- The **Trusted Https** store `/trustedHttps` which contains https certificates which are trusted by an application. To establish trust, the same rules apply as explained for the *Trusted* and the *Issuer* store. + +### Windows .NET applications +By default the self signed certificates are stored in a **X509Store** called **CurrentUser\\UA_MachineDefault**. The certificates can be viewed or deleted with the Windows Certificate Management Console (certmgr.msc). The *trusted*, *issuer* and *rejected* stores remain in a folder called **OPC Foundation\pki** with a root folder which is specified by the `SpecialFolder` variable **%CommonApplicationData%**. On Windows 7/8/8.1/10 this is usually the invisible folder **C:\ProgramData**. + +### Windows UWP applications +By default the self signed certificates are stored in a **X509Store** called **CurrentUser\\UA_MachineDefault**. The certificates can be viewed or deleted with the Windows Certificate Management Console (certmgr.msc). + +The *trusted*, *issuer* and *rejected* stores remain in a folder called **OPC Foundation\pki** in the **LocalState** folder of the installed universal windows package. Deleting the application state also deletes the certificate stores. + +### .NET Core applications on Windows, Linux, iOS etc. +The self signed certificates are stored in a folder called **OPC Foundation/pki/own** with a root folder which is specified by the `SpecialFolder` variable **%LocalApplicationData%** or in a **X509Store** called **CurrentUser\\My**, depending on the configuration. For best cross platform support the personal store **CurrentUser\\My** was chosen to support all platforms with the same configuration. Some platforms, like macOS, do not support arbitrary certificate stores. + +The *trusted*, *issuer* and *rejected* stores remain in a shared folder called **OPC Foundation\pki** with a root folder specified by the `SpecialFolder` variable **%LocalApplicationData%**. Depending on the target platform, this folder maps to a hidden locations under the user home directory. \ No newline at end of file diff --git a/IOB-OPC-UA/Docs/ReverseConnect.md b/IOB-OPC-UA/Docs/ReverseConnect.md new file mode 100644 index 00000000..61a892e2 --- /dev/null +++ b/IOB-OPC-UA/Docs/ReverseConnect.md @@ -0,0 +1,86 @@ +# Reverse Connect # +## Overview ## + +The Reverse Connect option consists of the following elements: + +* Updated C# Stack that supports the *ReverseHello* message for Client and Server; +* Updated server library which support to + - Create a *ReverseConnectServer* derived from a *StandardServer* class. + - Extended configuration parameters to setup the client location and timeouts. + - an API extension in the *ReverseConnectServer* to programmatically control client connections. +* Updated client library which support to + - Configure a client endpoint to accept *ReverseHello* messages using a *ReverseConnectManager*. + - A client API extension to allow applications to register for reverse connections either by callback or by waiting for the *ReverseHello* message for a specific server endpoint and application Uri combination. An optional filter for server Uris or endpoint Urls can be applied to allow multiple clients to use the same endpoint. +* The updated C# [Reference Server](../Applications/ConsoleReferenceServer) with reverse connect support. +* The C# Core [Client](https://github.com/OPCFoundation/UA-.NETStandard-Samples/tree/master/Samples/NetCoreComplexClient) and [Server](https://github.com/OPCFoundation/UA-.NETStandard-Samples/tree/master/Samples/NetCoreConsoleServer) samples that can initiate a Reverse connection with command line options. +* A modified C# [Aggregation Server](https://github.com/OPCFoundation/UA-.NETStandard-Samples/tree/master/Workshop/Aggregation) that supports incoming and outgoing reverse connections. + +## Reverse Connect Handshake ## +More details on the reverse connect handshake can be found in the OPC UA spec Part 6, [Establishing a connection](https://reference.opcfoundation.org/v104/Core/docs/Part6/7.1.3/). + +The *ReverseHello* message allows Servers behind firewalls to initiate communication with Clients. This requires that the Server be pre-configured with the location of the Client. The Server adds a configuration option that can be used to initiate a *ReverseHello* with the Client running behind a firewall. + +Once the reverse connection is established, the Server will automatically re-establish the connection if it is closed. Most Servers keep sending *ReverseHello* messages, even if the Client is already connected. In this Server implementation the behavior is configurable to keep sending *ReverseHello* messages, to allow only a single connection or to stop sending messages once the maximum number of Server sessions is exceeded. Only for the single connection configuration the sending of messages is suspended for a configurable timeout if the connection is rejected (i.e. the Client returns *BadTcpMessageTypeInvalid* meaning the Client does not support reverse connections or it does not want a connection from this Server at this time). + +In order to validate and accept a reverse connection in a Client application a *ReverseConnectManager* is configured to call back to the registered applications or to hold incoming connections open for a programmable timeout. An application can register for incoming requests to accept or reject a reverse connection directly or an application can start a connection and wait for an incoming *ReverseHello* message. If the *ReverseConnectManager* holds already an open connection to the Server the connection can be established without waiting. + +The host port is implemented by a transport which implements the *ITransportListener* interface. The transport calls the *ReverseConnectionManager* class in the client library to provide the application interface. This implementation uses only a single port on a client to support multiple incoming *ReverseHello* server connections. The clients register at the *ReverseConnectionManager* for specific serversUris, endpointUrls or any incoming message for callbacks. When the Client receives a *ReverseHello* the application receives an *ITransportWaitingConnection* connection object which can be used to create a client session in a similar way as by connecting using the endpointUrl, just by using a different Connect API which supports the connection object as a parameter. The client then uses the open socket to send the *Hello* message back to the Server for the well known establishment of a secure communication session. + +The second option for a client application is to call the Connect API with a configured *ReverseConnectionManager* to wait for an incoming connection and to establish the connection before the timeout expires. This connection model is similar to the standard connect flow with a Server and might be a good model to add reverse connect support for existing applications, without changing the application logic. + +If no client responds to the *ReverseHello* message or if it is even rejected, the channel is closed with a *BadTcpMessageTypeInvalid* error which the server should interpret as an indication that the Client is not configured to respond to *ReverseHello* messages of that Server. + +If the Client accepts the connection, a secure connection requires that the Client calls *GetEndpoints* to fetch the Server Certificate. At this point the Client closes the channel, which means it needs to wait for the Server to automatically re-connect. When it does, it can use the security information previously cached to connect securely back to the Server. An optimized Server implementation could respond with an immediate *ReverseHello* message to avoid connection delays after a call to *GetEndpoints* . + +The auto-reconnect behavior on the Server is essential to any real application, because Clients close the Socket when the SecureChannel is closed. According to the specification a Server needs to abort the auto-reconnect if it receives a *BadTcpMessageTypeInvalid* code, because that is the error it will receive from peers that have not been upgraded to support the *ReverseHello*. Because of this a Client can use the same error code to tell the Server to stop reconnecting, if a user has rejected the connection. However, in this implementation, only if the Server is configured for a single connection it applies an extended timeout before reconnecting to the Client to reduce the overall traffic. In other configurations the Server keeps sending the *ReverseHello* messages at the configured time interval. + +## Configuration Extensions + +This configuration sample shows the configuration setting for a reverse connection on port 65300. + +The Server configuration extension to connect to one or more reverse connect clients: + +``` + + ... + + + + opc.tcp://localhost:65300 + 30000 + + + 15000 + 30000 + 60000 + + + +``` + +The Client configuration extension to allow incoming connections for one or more reverse connect servers: + +``` + + ... + + + + opc.tcp://localhost:65300 + + + 15000 + 20000 + + +``` + + + +## Known limitations and issues + +- Only support for TCP connections is implemented. Https transport is currently out of scope. + +- Only a limited number of samples is available yet, the Reference Server, the Aggregation Server and the Console server and client. + + \ No newline at end of file diff --git a/IOB-OPC-UA/LICENSE.txt b/IOB-OPC-UA/LICENSE.txt new file mode 100644 index 00000000..1fda7301 --- /dev/null +++ b/IOB-OPC-UA/LICENSE.txt @@ -0,0 +1,47 @@ +https://opcfoundation.org/license/source/1.11/index.html + + + License information for OPC Source Deliverables + + + A. Introduction + +The OPC Foundation provides source code as sample code/reference +implementation. The source code is provided as-is, with no warranty, +support, or misrepresentation of the quality of code. + +The OPC Foundation provides communication stacks, sample libraries, +sample applications and utilities. All sources are available either as a +downloadable ZIP file or in a repository on github +(https://github.com/OPCFoundation/ ). + + + B. License models + +The OPC Foundation provides different licenses depending on the +component and on the membership status of the user of the sources. A +single ZIP file or a single repository can contain multiple components +where the sources have different license models. The valid license is in +the header of each source file. + +Following are basic rules on how the OPC Foundation licenses the +different components: + + 1. OPC UA core components (OPC UA Stacks, OPC UA Local Discovery Server + - LDS) follow a dual-license model: + * *OPC Foundation Corporate Members*: RCL + + enables OPC Foundation corporate members to deploy their + applications using the core component sources without being + required to disclose the application code. + + * *Users that are not OPC Foundation corporate-members*: GPL 2.0 + + Based on the GPL 2.0 license terms these users must disclose + their application code when using the core component sources. + + 2. Samples and Utilities: + All samples and most of the utilities are provided under the MIT + license for OPC + Foundation Members and Non-Members. + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/ComplexTypeSystem.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/ComplexTypeSystem.cs new file mode 100644 index 00000000..003dec99 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/ComplexTypeSystem.cs @@ -0,0 +1,1234 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Threading.Tasks; +using System.Xml; +using static Opc.Ua.Utils; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Manages the custom types of a server for a client session. + /// Loads the custom types into the type factory + /// of a client session, to allow for decoding and encoding + /// of custom enumeration types and structured types. + /// + /// + /// Support for V1.03 dictionaries and all V1.04 data type definitions + /// with the following known restrictions: + /// - Support only for V1.03 structured types which can be mapped to the V1.04 + /// structured type definition. Unsupported V1.03 types are ignored. + /// - V1.04 OptionSet does not create the enumeration flags. + /// + public class ComplexTypeSystem + { + + #region Constructors + /// + /// Initializes the type system with a session to load the custom types. + /// + public ComplexTypeSystem(Session session) + { + Initialize(session, new ComplexTypeBuilderFactory()); + } + + /// + /// Initializes the type system with a session to load the custom types + /// and a customized type builder factory + /// + public ComplexTypeSystem( + Session session, + IComplexTypeFactory complexTypeBuilderFactory) + { + Initialize(session, complexTypeBuilderFactory); + } + + private void Initialize( + Session session, + IComplexTypeFactory complexTypeBuilderFactory) + { + m_session = session; + m_complexTypeBuilderFactory = complexTypeBuilderFactory; + } + #endregion + + #region Public Members + /// + /// Load a single custom type with subtypes. + /// + /// + /// Uses inverse references on the server to find the super type(s). + /// If the new structure contains a type dependency to a yet + /// unknown type, it loads also the dependent type(s). + /// For servers without DataTypeDefinition support all + /// custom types are loaded. + /// + public async Task LoadType(ExpandedNodeId nodeId, bool subTypes = false, bool throwOnError = false) + { + try + { + var subTypeNodes = LoadDataTypes(nodeId, subTypes, true); + var subTypeNodesWithoutKnownTypes = RemoveKnownTypes(subTypeNodes); + + if (subTypeNodesWithoutKnownTypes.Count > 0) + { + IList serverEnumTypes = new List(); + IList serverStructTypes = new List(); + foreach (var node in subTypeNodesWithoutKnownTypes) + { + AddEnumerationOrStructureType(node, serverEnumTypes, serverStructTypes); + } + + // load server types + if (DisableDataTypeDefinition || !LoadBaseDataTypes(serverEnumTypes, serverStructTypes)) + { + if (!DisableDataTypeDictionary) + { + await LoadDictionaryDataTypes(serverEnumTypes, serverStructTypes, false).ConfigureAwait(false); + } + } + } + return GetSystemType(nodeId); + } + catch (ServiceResultException sre) + { + Utils.Trace(sre, "Failed to load the custom type {0}.", nodeId); + if (throwOnError) + { + throw; + } + return null; + } + } + + /// + /// Load all custom types of a namespace. + /// + /// + /// If a new type in the namespace contains a type dependency to an + /// unknown type in another namespace, it loads also the dependent type(s). + /// For servers without DataTypeDefinition support all + /// custom types are loaded. + /// + public async Task LoadNamespace(string nameSpace, bool throwOnError = false) + { + try + { + int index = m_session.NamespaceUris.GetIndex(nameSpace); + if (index < 0) + { + throw new ServiceResultException($"Bad argument {nameSpace}. Namespace not found."); + } + ushort nameSpaceIndex = (ushort)index; + var serverEnumTypes = LoadDataTypes(DataTypeIds.Enumeration); + var serverStructTypes = LoadDataTypes(DataTypeIds.Structure, true); + // filter for namespace + serverEnumTypes = serverEnumTypes.Where(rd => rd.NodeId.NamespaceIndex == nameSpaceIndex).ToList(); + serverStructTypes = serverStructTypes.Where(rd => rd.NodeId.NamespaceIndex == nameSpaceIndex).ToList(); + // load types + if (DisableDataTypeDefinition || !LoadBaseDataTypes(serverEnumTypes, serverStructTypes)) + { + if (DisableDataTypeDictionary) + { + return false; + } + return await LoadDictionaryDataTypes(serverEnumTypes, serverStructTypes, false).ConfigureAwait(false); + } + return true; + } + catch (ServiceResultException sre) + { + Utils.Trace(sre, $"Failed to load the custom type dictionary."); + if (throwOnError) + { + throw; + } + return false; + } + } + + /// + /// Load all custom types from a server into the session system type factory. + /// + /// + /// The loader follows the following strategy: + /// - Load all DataType nodes of the Enumeration subtypes. + /// - Load all DataType nodes of the Structure subtypes. + /// - Create all enumerated custom types using the DataTypeDefinion attribute, if available. + /// - Create all remaining enumerated custom types using the EnumValues or EnumStrings property, if available. + /// - Create all structured types using the DataTypeDefinion attribute, if available. + /// if there are type definitions remaining + /// - Load the binary schema dictionaries with type definitions. + /// - Create all remaining enumerated custom types using the dictionaries. + /// - Convert all structured types in the dictionaries to the DataTypeDefinion attribute, if possible. + /// - Create all structured types from the dictionaries using the converted DataTypeDefinion attribute.. + /// + public async Task Load(bool onlyEnumTypes = false, bool throwOnError = false) + { + try + { + // load server types + IList serverEnumTypes = LoadDataTypes(DataTypeIds.Enumeration); + IList serverStructTypes = onlyEnumTypes ? new List() : LoadDataTypes(DataTypeIds.Structure, true); + if (DisableDataTypeDefinition || !LoadBaseDataTypes(serverEnumTypes, serverStructTypes)) + { + if (DisableDataTypeDictionary) + { + return false; + } + return await LoadDictionaryDataTypes(serverEnumTypes, serverStructTypes, true).ConfigureAwait(false); + } + return true; + } + catch (ServiceResultException sre) + { + Utils.Trace(sre, $"Failed to load the custom type dictionary."); + if (throwOnError) + { + throw; + } + return false; + } + } + + /// + /// Get the types defined in this type system. + /// + public Type[] GetDefinedTypes() + { + return m_complexTypeBuilderFactory.GetTypes(); + } + #endregion + + #region Internal Properties + /// + /// Disable the use of DataTypeDefinition to create the complex type definition. + /// + internal bool DisableDataTypeDefinition { get; set; } = false; + + /// + /// Disable the use of DataType Dictinaries to create the complex type definition. + /// + internal bool DisableDataTypeDictionary { get; set; } = false; + #endregion + + #region Private Members + /// + /// Load listed custom types from dictionaries + /// into the sessions system type factory. + /// + /// + /// Loads all custom types at this time to avoid + /// complexity when resolving type dependencies. + /// + private async Task LoadDictionaryDataTypes( + IList serverEnumTypes, + IList serverStructTypes, + bool fullTypeList + ) + { + // build a type dictionary with all known new types + var allEnumTypes = fullTypeList ? serverEnumTypes : LoadDataTypes(DataTypeIds.Enumeration); + var typeDictionary = new Dictionary(); + + // strip known types from list + serverEnumTypes = RemoveKnownTypes(allEnumTypes); + + // load the binary schema dictionaries from the server + var typeSystem = await m_session.LoadDataTypeSystem().ConfigureAwait(false); + + // sort dictionaries with import dependencies to the end of the list + var sortedTypeSystem = typeSystem.OrderBy(t => t.Value.TypeDictionary?.Import?.Count()).ToList(); + + bool allTypesLoaded = true; + + // create custom types for all dictionaries + foreach (var dictionaryId in sortedTypeSystem) + { + try + { + var dictionary = dictionaryId.Value; + if (dictionary.TypeDictionary == null || + dictionary.TypeDictionary.Items == null) + { + continue; + } + var targetDictionaryNamespace = dictionary.TypeDictionary.TargetNamespace; + var targetNamespaceIndex = m_session.NamespaceUris.GetIndex(targetDictionaryNamespace); + var structureList = new List(); + var enumList = new List(); + + // split into enumeration and structure types and sort + // types with dependencies to the end of the list. + SplitAndSortDictionary(dictionary, structureList, enumList); + + // create assembly for all types in the same module + var complexTypeBuilder = m_complexTypeBuilderFactory.Create( + targetDictionaryNamespace, + targetNamespaceIndex, + dictionary.Name); + + // Add all unknown enumeration types in dictionary + AddEnumTypes(complexTypeBuilder, typeDictionary, enumList, allEnumTypes, serverEnumTypes); + + // handle structures + int lastStructureCount = 0; + while (structureList.Count > 0 && + structureList.Count != lastStructureCount) + { + lastStructureCount = structureList.Count; + var retryStructureList = new List(); + // build structured types + foreach (var item in structureList) + { + if (item is Opc.Ua.Schema.Binary.StructuredType structuredObject) + { // note: the BrowseName contains the actual Value string of the DataType node. + var nodeId = dictionary.DataTypes.FirstOrDefault(d => d.Value.BrowseName.Name == item.Name).Value; + if (nodeId == null) + { + Utils.Trace(TraceMasks.Error, $"Skip the type definition of {item.Name} because the data type node was not found."); + continue; + } + + // find the data type node and the binary encoding id + ExpandedNodeId typeId; + ExpandedNodeId binaryEncodingId; + DataTypeNode dataTypeNode; + bool newTypeDescription = BrowseTypeIdsForDictionaryComponent( + ExpandedNodeId.ToNodeId(nodeId.NodeId, m_session.NamespaceUris), + out typeId, + out binaryEncodingId, + out dataTypeNode); + + if (!newTypeDescription) + { + Utils.Trace(TraceMasks.Error, $"Skip the type definition of {item.Name} because the data type node was not found."); + continue; + } + + if (GetSystemType(typeId) != null) + { + var qName = structuredObject.QName ?? new XmlQualifiedName(structuredObject.Name, targetDictionaryNamespace); + typeDictionary[qName] = ExpandedNodeId.ToNodeId(typeId, m_session.NamespaceUris); + Utils.Trace(TraceMasks.Information, $"Skip the type definition of {item.Name} because the type already exists."); + continue; + } + + // Use DataTypeDefinition attribute, if available (>=V1.04) + StructureDefinition structureDefinition = null; + if (!DisableDataTypeDefinition) + { + structureDefinition = GetStructureDefinition(dataTypeNode); + } + if (structureDefinition == null) + { + try + { + // convert the binary schema description to a StructureDefinition + structureDefinition = structuredObject.ToStructureDefinition( + binaryEncodingId, + typeDictionary, + m_session.NamespaceUris); + } + catch (DataTypeNotFoundException typeNotFoundException) + { + Utils.Trace(typeNotFoundException, + $"Skipped the type definition of {item.Name}. Retry in next round."); + retryStructureList.Add(item); + continue; + } + catch (DataTypeNotSupportedException typeNotSupportedException) + { + Utils.Trace(typeNotSupportedException, + $"Skipped the type definition of {item.Name} because it is not supported."); + continue; + } + catch (ServiceResultException sre) + { + Utils.Trace(sre, $"Skip the type definition of {item.Name}."); + continue; + } + } + + Type complexType = null; + if (structureDefinition != null) + { + var encodingIds = BrowseForEncodings(typeId, m_supportedEncodings, + out binaryEncodingId, out ExpandedNodeId xmlEncodingId); + try + { + // build the actual .Net structured type in assembly + complexType = AddStructuredType( + complexTypeBuilder, + structureDefinition, + dataTypeNode.BrowseName, + typeId, + binaryEncodingId, + xmlEncodingId + ); + } + catch (DataTypeNotFoundException typeNotFoundException) + { + Utils.Trace(typeNotFoundException, + $"Skipped the type definition of {item.Name}. Retry in next round."); + retryStructureList.Add(item); + continue; + } + catch (DataTypeNotSupportedException typeNotSupportedException) + { + Utils.Trace(typeNotSupportedException, + $"Skipped the type definition of {item.Name} because it is not supported."); + continue; + } + + // Add new type to factory + if (complexType != null) + { + // match namespace and add new type to type factory + foreach (var encodingId in encodingIds) + { + AddEncodeableType(encodingId, complexType); + } + AddEncodeableType(typeId, complexType); + var qName = structuredObject.QName ?? new XmlQualifiedName(structuredObject.Name, targetDictionaryNamespace); + typeDictionary[qName] = ExpandedNodeId.ToNodeId(typeId, m_session.NamespaceUris); + } + } + + if (complexType == null) + { + retryStructureList.Add(item); + Utils.Trace(TraceMasks.Error, $"Skipped the type definition of {item.Name}. Retry in next round."); + } + } + } + structureList = retryStructureList; + } + allTypesLoaded = allTypesLoaded && structureList.Count == 0; + } + catch (ServiceResultException sre) + { + Utils.Trace(sre, + $"Unexpected error processing {dictionaryId.Value.Name}."); + } + } + return allTypesLoaded; + } + + /// + /// Load all custom types with DataTypeDefinition into the type factory. + /// + /// true if all types were loaded, false otherwise + private bool LoadBaseDataTypes( + IList serverEnumTypes, + IList serverStructTypes + ) + { + bool repeatDataTypeLoad = false; ; + IList enumTypesToDoList = new List(); + IList structTypesToDoList = new List(); + + do + { + // strip known types + serverEnumTypes = RemoveKnownTypes(serverEnumTypes); + serverStructTypes = RemoveKnownTypes(serverStructTypes); + + repeatDataTypeLoad = false; + try + { + enumTypesToDoList = LoadBaseEnumDataTypes(serverEnumTypes); + structTypesToDoList = LoadBaseStructureDataTypes(serverStructTypes); + } + catch (DataTypeNotFoundException dtnfex) + { + // add missing type to list + var dataTypeNode = m_session.NodeCache.Find(dtnfex.nodeId); + if (dataTypeNode != null) + { + AddEnumerationOrStructureType(dataTypeNode, serverEnumTypes, serverStructTypes); + repeatDataTypeLoad = true; + } + } + } while (repeatDataTypeLoad); + + // all types loaded + return enumTypesToDoList.Count == 0 && structTypesToDoList.Count == 0; + } + + /// + /// Load all custom types with DataTypeDefinition into the type factory. + /// + /// true if all types were loaded, false otherwise + private IList LoadBaseEnumDataTypes( + IList serverEnumTypes + ) + { + // strip known types + serverEnumTypes = RemoveKnownTypes(serverEnumTypes); + + // add new enum Types for all namespaces + var enumTypesToDoList = new List(); + int namespaceCount = m_session.NamespaceUris.Count; + + // create enumeration types for all namespaces + for (uint i = 0; i < namespaceCount; i++) + { + IComplexTypeBuilder complexTypeBuilder = null; + var enumTypes = serverEnumTypes.Where(node => node.NodeId.NamespaceIndex == i).ToList(); + if (enumTypes.Count != 0) + { + if (complexTypeBuilder == null) + { + string targetNamespace = m_session.NamespaceUris.GetString(i); + complexTypeBuilder = m_complexTypeBuilderFactory.Create( + targetNamespace, + (int)i); + } + foreach (var enumType in enumTypes) + { + var newType = AddEnumType(complexTypeBuilder, enumType as DataTypeNode); + if (newType != null) + { + // match namespace and add to type factory + AddEncodeableType(enumType.NodeId, newType); + } + else + { + enumTypesToDoList.Add(enumType); + } + } + } + } + + // all types loaded, return remaining + return enumTypesToDoList; + } + + /// + /// Load all structure custom types with DataTypeDefinition into the type factory. + /// + /// true if all types were loaded, false otherwise + private IList LoadBaseStructureDataTypes( + IList serverStructTypes + ) + { + // strip known types + serverStructTypes = RemoveKnownTypes(serverStructTypes); + + // add new enum Types for all namespaces + int namespaceCount = m_session.NamespaceUris.Count; + + bool retryAddStructType; + var structTypesToDoList = new List(); + var structTypesWorkList = serverStructTypes; + + // create structured types for all namespaces + do + { + retryAddStructType = false; + for (uint i = 0; i < namespaceCount; i++) + { + IComplexTypeBuilder complexTypeBuilder = null; + var structTypes = structTypesWorkList.Where(node => node.NodeId.NamespaceIndex == i).ToList(); + if (structTypes.Count != 0) + { + if (complexTypeBuilder == null) + { + string targetNamespace = m_session.NamespaceUris.GetString(i); + complexTypeBuilder = m_complexTypeBuilderFactory.Create( + targetNamespace, + (int)i); + } + foreach (INode structType in structTypes) + { + Type newType = null; + if (!(structType is DataTypeNode dataTypeNode)) + { + continue; + } + var structureDefinition = GetStructureDefinition(dataTypeNode); + if (structureDefinition != null) + { + var encodingIds = BrowseForEncodings(structType.NodeId, m_supportedEncodings, + out ExpandedNodeId binaryEncodingId, out ExpandedNodeId xmlEncodingId); + try + { + newType = AddStructuredType( + complexTypeBuilder, + structureDefinition, + dataTypeNode.BrowseName, + structType.NodeId, + binaryEncodingId, + xmlEncodingId + ); + } + catch (DataTypeNotFoundException dtnfex) + { + var typeMatch = structTypesWorkList.Where(n => n.NodeId == dtnfex.nodeId).FirstOrDefault(); + if (typeMatch == null) + { + throw; + } + else + { // known missing type, retry on next round + Utils.Trace(dtnfex, "Skipped the type definition of {0}. Retry in next round.", dataTypeNode.BrowseName.Name); + retryAddStructType = true; + } + } + catch (DataTypeNotSupportedException dtnsex) + { + Utils.Trace(dtnsex, "Skipped the type definition of {0} because it is not supported.", dataTypeNode.BrowseName.Name); + continue; + } + catch + { + // creating the new type failed, likely a missing dependency, retry later + retryAddStructType = true; + } + if (newType != null) + { + foreach (var encodingId in encodingIds) + { + AddEncodeableType(encodingId, newType); + } + AddEncodeableType(structType.NodeId, newType); + } + } + if (newType == null) + { + structTypesToDoList.Add(structType); + } + } + } + } + // due to type dependencies, retry missing types until there is no more progress + if (retryAddStructType && + structTypesWorkList.Count != structTypesToDoList.Count) + { + structTypesWorkList = structTypesToDoList; + structTypesToDoList = new List(); + } + } while (retryAddStructType); + + // all types loaded + return structTypesToDoList; + } + + /// + /// Return the structure definition from a DataTypeDefinition + /// + private StructureDefinition GetStructureDefinition(DataTypeNode dataTypeNode) + { + if (dataTypeNode.DataTypeDefinition?.Body is StructureDefinition structureDefinition) + { + // Validate the DataTypeDefinition structure, + // but not if the type is supported + if (structureDefinition.Fields == null || + structureDefinition.BaseDataType.IsNullNodeId || + structureDefinition.BinaryEncodingId.IsNull) + { + return null; + } + // Validate the structure according to Part3, Table 36 + foreach (var field in structureDefinition.Fields) + { + // validate if the DataTypeDefinition is correctly + // filled out, some servers don't do it yet... + if (field.BinaryEncodingId.IsNull || + field.DataType.IsNullNodeId || + field.TypeId.IsNull || + field.Name == null) + { + return null; + } + if (!(field.ValueRank == -1 || + field.ValueRank >= 1)) + { + return null; + } + if (structureDefinition.StructureType == StructureType.Structure && + field.IsOptional) + { + return null; + } + } + return structureDefinition; + } + return null; + + } + + /// + /// Helper to ensure the expanded nodeId contains a valid namespaceUri. + /// + /// The expanded nodeId. + /// The normalized expanded nodeId. + private ExpandedNodeId NormalizeExpandedNodeId(ExpandedNodeId expandedNodeId) + { + var nodeId = ExpandedNodeId.ToNodeId(expandedNodeId, m_session.NamespaceUris); + return NodeId.ToExpandedNodeId(nodeId, m_session.NamespaceUris); + } + + /// + /// Browse for the type and encoding id for a dictionary component. + /// + /// + /// According to Part 5 Annex D, servers shall provide the bi-directional + /// references between data types, data type encodings, data type description + /// and data type dictionary. + /// To find the typeId and encodingId for a dictionary type definition: + /// i) inverse browse the description to get the encodingid + /// ii) from the description inverse browse for encoding + /// to get the subtype typeid + /// iii) load the DataType node + /// + /// + /// + /// + /// + /// true if successful, false otherwise + private bool BrowseTypeIdsForDictionaryComponent( + NodeId nodeId, + out ExpandedNodeId typeId, + out ExpandedNodeId encodingId, + out DataTypeNode dataTypeNode) + { + typeId = ExpandedNodeId.Null; + encodingId = ExpandedNodeId.Null; + dataTypeNode = null; + + var references = m_session.NodeCache.FindReferences( + nodeId, + ReferenceTypeIds.HasDescription, + true, + false + ); + + if (references.Count == 1) + { + encodingId = references[0].NodeId; + references = m_session.NodeCache.FindReferences( + encodingId, + ReferenceTypeIds.HasEncoding, + true, + false + ); + encodingId = NormalizeExpandedNodeId(encodingId); + + if (references.Count == 1) + { + typeId = references[0].NodeId; + dataTypeNode = m_session.NodeCache.Find(typeId) as DataTypeNode; + typeId = NormalizeExpandedNodeId(typeId); + return true; + } + } + return false; + } + + /// + /// Browse for the property. + /// + /// + /// Browse for property (type description) of an enum datatype. + /// + /// + /// + private INode BrowseForSingleProperty( + ExpandedNodeId nodeId) + { + var references = m_session.NodeCache.FindReferences( + nodeId, + ReferenceTypeIds.HasProperty, + false, + false + ); + return references.FirstOrDefault(); + } + + /// + /// Browse for the encodings of a type. + /// + /// + /// Browse for binary encoding of a structure datatype. + /// + private IList BrowseForEncodings( + ExpandedNodeId nodeId, + string[] supportedEncodings, + out ExpandedNodeId binaryEncodingId, + out ExpandedNodeId xmlEncodingId) + { + var references = m_session.NodeCache.FindReferences( + nodeId, + ReferenceTypeIds.HasEncoding, + false, + false + ); + binaryEncodingId = references.Where(r => r.BrowseName.Name == BrowseNames.DefaultBinary).FirstOrDefault()?.NodeId; + binaryEncodingId = NormalizeExpandedNodeId(binaryEncodingId); + xmlEncodingId = references.Where(r => r.BrowseName.Name == BrowseNames.DefaultXml).FirstOrDefault()?.NodeId; + xmlEncodingId = NormalizeExpandedNodeId(xmlEncodingId); + return references.Where(r => supportedEncodings.Contains(r.BrowseName.Name)) + .Select(r => ExpandedNodeId.ToNodeId(r.NodeId, m_session.NamespaceUris)).ToList(); + } + + /// + /// Load all subTypes and optionally nested subtypes of a type definition. + /// Filter for all subtypes or only subtypes outside the default namespace. + /// + private IList LoadDataTypes( + ExpandedNodeId dataType, + bool nestedSubTypes = false, + bool addRootNode = false, + bool filterUATypes = true) + { + var result = new List(); + var nodesToBrowse = new ExpandedNodeIdCollection { + dataType + }; + + if (addRootNode) + { + var rootNode = m_session.NodeCache.Find(dataType); + if (!(rootNode is DataTypeNode)) + { + throw new ServiceResultException("Root Node is not a DataType node."); + } + result.Add(rootNode); + } + + while (nodesToBrowse.Count > 0) + { + var nextNodesToBrowse = new ExpandedNodeIdCollection(); + foreach (var node in nodesToBrowse) + { + var response = m_session.NodeCache.FindReferences( + node, + ReferenceTypeIds.HasSubtype, + false, + false); + + if (nestedSubTypes) + { + nextNodesToBrowse.AddRange(response.Select(r => r.NodeId).ToList()); + } + if (filterUATypes) + { + // filter out default namespace + result.AddRange(response.Where(rd => rd.NodeId.NamespaceIndex != 0)); + } + else + { + result.AddRange(response); + } + } + nodesToBrowse = nextNodesToBrowse; + } + + return result; + } + + /// + /// Add data type to enumeration or structure base type list depending on supertype. + /// + private void AddEnumerationOrStructureType(INode dataTypeNode, IList serverEnumTypes, IList serverStructTypes) + { + NodeId superType = ExpandedNodeId.ToNodeId(dataTypeNode.NodeId, m_session.NamespaceUris); + do + { + superType = m_session.NodeCache.FindSuperType(superType); + if (superType.IsNullNodeId) + { + throw new ServiceResultException(StatusCodes.BadNodeIdInvalid, $"SuperType for {dataTypeNode.NodeId} not found."); + } + if (superType == DataTypeIds.Enumeration) + { + serverEnumTypes.Insert(0, dataTypeNode); + break; + } + else if (superType == DataTypeIds.Structure) + { + serverStructTypes.Insert(0, dataTypeNode); + break; + } + else if (TypeInfo.GetBuiltInType(superType) != BuiltInType.Null) + { + break; + } + } while (true); + } + + /// + /// Remove all known types in the type factory from a list of DataType nodes. + /// + private IList RemoveKnownTypes(IList nodeList) + { + return nodeList.Where( + node => GetSystemType(node.NodeId) == null).ToList(); + } + + /// + /// Get the factory system type for an expanded node id. + /// + private Type GetSystemType(ExpandedNodeId nodeId) + { + if (!nodeId.IsAbsolute) + { + nodeId = NormalizeExpandedNodeId(nodeId); + } + return m_session.Factory.GetSystemType(nodeId); + } + + /// + /// Add an enum type defined in a binary schema dictionary. + /// + private void AddEnumTypes( + IComplexTypeBuilder complexTypeBuilder, + Dictionary typeDictionary, + IList enumList, + IList allEnumerationTypes, + IList enumerationTypes + ) + { + foreach (var item in enumList) + { + Type newType = null; + DataTypeNode enumDescription = null; + DataTypeNode enumType = enumerationTypes.FirstOrDefault(node => + node.BrowseName.Name == item.Name && + (node.BrowseName.NamespaceIndex == complexTypeBuilder.TargetNamespaceIndex || + complexTypeBuilder.TargetNamespaceIndex == -1)) + as DataTypeNode; + if (enumType != null) + { + enumDescription = enumType; + // try dictionary enum definition + var enumeratedObject = item as Schema.Binary.EnumeratedType; + if (enumeratedObject != null) + { + // 1. use Dictionary entry + newType = complexTypeBuilder.AddEnumType(enumeratedObject); + } + if (newType == null) + { + var dataType = m_session.NodeCache.Find(enumType.NodeId) as DataTypeNode; + if (dataType != null) + { + if (dataType.DataTypeDefinition != null) + { + // 2. use DataTypeDefinition + newType = complexTypeBuilder.AddEnumType(enumType.BrowseName.Name, dataType.DataTypeDefinition); + } + else + { + // browse for EnumFields or EnumStrings property + var property = BrowseForSingleProperty(enumType.NodeId); + var enumArray = m_session.ReadValue( + ExpandedNodeId.ToNodeId(property.NodeId, m_session.NamespaceUris)); + if (enumArray.Value is ExtensionObject[]) + { + // 3. use EnumValues + newType = complexTypeBuilder.AddEnumType(enumType.BrowseName.Name, (ExtensionObject[])enumArray.Value); + } + else if (enumArray.Value is LocalizedText[]) + { + // 4. use EnumStrings + newType = complexTypeBuilder.AddEnumType(enumType.BrowseName.Name, (LocalizedText[])enumArray.Value); + } + } + } + } + } + else + { + enumDescription = allEnumerationTypes.Where(node => + node.BrowseName.Name == item.Name && + (node.BrowseName.NamespaceIndex == complexTypeBuilder.TargetNamespaceIndex || + complexTypeBuilder.TargetNamespaceIndex == -1)).FirstOrDefault() + as DataTypeNode; + } + if (enumDescription != null) + { + var qName = new XmlQualifiedName(item.Name, complexTypeBuilder.TargetNamespace); + typeDictionary[qName] = enumDescription.NodeId; + } + if (newType != null) + { + // match namespace and add to type factory + AddEncodeableType(enumType.NodeId, newType); + } + } + } + + /// + /// Helper to add new type with absolute ExpandedNodeId. + /// + private void AddEncodeableType(ExpandedNodeId nodeId, Type type) + { + if (NodeId.IsNull(nodeId) || type == null) + { + return; + } + var internalNodeId = NormalizeExpandedNodeId(nodeId); + Utils.TraceDebug($"Adding Type {type.FullName} as: {internalNodeId.ToString()}"); + m_session.Factory.AddEncodeableType(internalNodeId, type); + } + + /// + /// Add an enum type defined in a DataType node. + /// + private Type AddEnumType( + IComplexTypeBuilder complexTypeBuilder, + DataTypeNode enumTypeNode + ) + { + Type newType = null; + if (enumTypeNode != null) + { + QualifiedName name = enumTypeNode.BrowseName; + if (enumTypeNode.DataTypeDefinition != null) + { + // 1. use DataTypeDefinition + newType = complexTypeBuilder.AddEnumType(name, enumTypeNode.DataTypeDefinition); + } + else + { + // browse for EnumFields or EnumStrings property + var property = BrowseForSingleProperty(enumTypeNode.NodeId); + if (property != null) + { + var enumArray = m_session.ReadValue( + ExpandedNodeId.ToNodeId(property.NodeId, + m_session.NamespaceUris)); + if (enumArray.Value is ExtensionObject[]) + { + // 2. use EnumValues + newType = complexTypeBuilder.AddEnumType(name, (ExtensionObject[])enumArray.Value); + } + else if (enumArray.Value is LocalizedText[]) + { + // 3. use EnumStrings + newType = complexTypeBuilder.AddEnumType(name, (LocalizedText[])enumArray.Value); + } + } + } + } + return newType; + } + + /// + /// Add structured type to assembly with StructureDefinition. + /// + private Type AddStructuredType( + IComplexTypeBuilder complexTypeBuilder, + StructureDefinition structureDefinition, + QualifiedName typeName, + ExpandedNodeId complexTypeId, + ExpandedNodeId binaryEncodingId, + ExpandedNodeId xmlEncodingId + ) + { + // check all types + var typeList = new List(); + foreach (StructureField field in structureDefinition.Fields) + { + var newType = GetFieldType(field); + if (newType == null) + { + throw new DataTypeNotFoundException(field.DataType); + } + typeList.Add(newType); + } + + var fieldBuilder = complexTypeBuilder.AddStructuredType( + typeName, + structureDefinition + ); + + fieldBuilder.AddTypeIdAttribute(complexTypeId, binaryEncodingId, xmlEncodingId); + + int order = 1; + var typeListEnumerator = typeList.GetEnumerator(); + foreach (StructureField field in structureDefinition.Fields) + { + typeListEnumerator.MoveNext(); + fieldBuilder.AddField(field, typeListEnumerator.Current, order); + order++; + } + + return fieldBuilder.CreateType(); + } + + /// + /// Determine the type of a field in a StructureField definition. + /// + private Type GetFieldType(StructureField field) + { + Type collectionType = null; + + if (field.ValueRank != ValueRanks.Scalar && + field.ValueRank != ValueRanks.OneDimension) + { + throw new DataTypeNotSupportedException(field.DataType, $"The ValueRank {field.ValueRank} is not supported."); + } + + Type fieldType = field.DataType.NamespaceIndex == 0 ? + Opc.Ua.TypeInfo.GetSystemType(field.DataType, m_session.Factory) : + GetSystemType(field.DataType); + if (fieldType == null) + { + var superType = GetBuiltInSuperType(field.DataType); + if (superType != null && + !superType.IsNullNodeId) + { + field.DataType = superType; + return GetFieldType(field); + } + return null; + } + + if (field.DataType.NamespaceIndex == 0) + { + if (field.ValueRank == ValueRanks.OneDimension) + { + if (fieldType == typeof(Byte[])) + { + collectionType = typeof(ByteStringCollection); + } + else if (fieldType == typeof(Single)) + { + collectionType = typeof(FloatCollection); + } + else + { + var assemblyQualifiedName = typeof(StatusCode).Assembly; + String collectionClassName = "Opc.Ua." + fieldType.Name + "Collection, " + assemblyQualifiedName; + collectionType = Type.GetType(collectionClassName); + } + } + } + else + { + if (field.ValueRank == ValueRanks.OneDimension) + { + String collectionClassName = (fieldType.Namespace != null) ? fieldType.Namespace + "." : ""; + collectionClassName += fieldType.Name + "Collection, " + fieldType.Assembly; + collectionType = Type.GetType(collectionClassName); + } + } + + if (field.ValueRank == ValueRanks.OneDimension) + { + fieldType = collectionType ?? fieldType.MakeArrayType(); + } + + return fieldType; + } + + /// + /// Find superType for a datatype. + /// + private NodeId GetBuiltInSuperType(NodeId dataType) + { + var superType = dataType; + do + { + superType = m_session.NodeCache.FindSuperType(superType); + if (superType == null || + superType.IsNullNodeId) + { + return null; + } + if (superType.NamespaceIndex == 0) + { + if (superType == DataTypeIds.Enumeration || + superType == DataTypeIds.Structure) + { + return null; + } + break; + } + } while (true); + return superType; + } + + /// + /// Split the dictionary types into a list of structures and enumerations. + /// Sort the structures by dependencies, with structures with dependent + /// types at the end of the list, so they can be added to the factory in order. + /// + private void SplitAndSortDictionary( + DataDictionary dictionary, + List structureList, + List enumList + ) + { + foreach (var item in dictionary.TypeDictionary.Items) + { + if (item is Opc.Ua.Schema.Binary.StructuredType structuredObject) + { + var dependentFields = structuredObject.Field.Where(f => f.TypeName.Namespace == dictionary.TypeDictionary.TargetNamespace); + if (!dependentFields.Any()) + { + structureList.Insert(0, structuredObject); + } + else + { + structureList.Add(structuredObject); + } + } + else if (item is Opc.Ua.Schema.Binary.EnumeratedType) + { + enumList.Add(item); + } + else if (item is Opc.Ua.Schema.Binary.OpaqueType) + { + // TODO: Opaque types not supported yet + } + else + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, $"Unexpected Type in binary schema: {item.GetType().Name}."); + } + } + } + #endregion + + #region Private Fields + private Session m_session; + private IComplexTypeFactory m_complexTypeBuilderFactory; + private string[] m_supportedEncodings = new string[] { BrowseNames.DefaultBinary, BrowseNames.DefaultXml, BrowseNames.DefaultJson }; + private const string kOpcComplexTypesPrefix = "Opc.Ua.ComplexTypes."; + #endregion + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/DataTypeDefinitionExtension.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/DataTypeDefinitionExtension.cs new file mode 100644 index 00000000..813c1630 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/DataTypeDefinitionExtension.cs @@ -0,0 +1,282 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Xml; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Extensions to convert binary schema type definitions to DataTypeDefinitions. + /// + public static class DataTypeDefinitionExtension + { + #region Public Extensions + /// + /// Convert a binary schema type definition to a + /// StructureDefinition. + /// + /// + /// Support for: + /// - Structures, structures with optional fields and unions. + /// - Nested types and typed arrays with length field. + /// The converter has the following known restrictions: + /// - Support only for V1.03 structured types which can be mapped to the V1.04 + /// structured type definition. + /// The following dictionary tags cause bail out for a structure: + /// - use of a terminator of length in bytes + /// - an array length field is not a direct predecessor of the array + /// - The switch value of a union is not the first field. + /// - The selector bits of optional fields are not stored in a 32 bit variable + /// and do not add up to 32 bits. + /// + public static StructureDefinition ToStructureDefinition( + this Schema.Binary.StructuredType structuredType, + ExpandedNodeId defaultEncodingId, + Dictionary typeDictionary, + NamespaceTable namespaceTable) + { + var structureDefinition = new StructureDefinition() { + BaseDataType = null, + DefaultEncodingId = ExpandedNodeId.ToNodeId(defaultEncodingId, namespaceTable), + Fields = new StructureFieldCollection(), + StructureType = StructureType.Structure + }; + + bool isSupportedType = true; + bool hasBitField = false; + bool isUnionType = false; + + foreach (var field in structuredType.Field) + { + // check for yet unsupported properties + if (field.IsLengthInBytes || + field.Terminator != null) + { + isSupportedType = false; + } + + if (field.SwitchValue != 0) + { + isUnionType = true; + } + + if (field.TypeName.Namespace == Namespaces.OpcBinarySchema || + field.TypeName.Namespace == Namespaces.OpcUa) + { + if (field.TypeName.Name == "Bit") + { + hasBitField = true; + continue; + } + } + if (field.Length != 0) + { + isSupportedType = false; + } + } + + // test forbidden combinations + if (!isSupportedType) + { + throw new DataTypeNotSupportedException( + "The structure definition uses a Terminator or LengthInBytes, which are not supported."); + } + + if (isUnionType && hasBitField) + { + throw new DataTypeNotSupportedException( + "The structure definition combines a Union and a bit filed, both of which are not supported in a single structure."); + } + + if (isUnionType) + { + structureDefinition.StructureType = StructureType.Union; + } + + if (hasBitField) + { + structureDefinition.StructureType = StructureType.StructureWithOptionalFields; + } + + byte switchFieldBitPosition = 0; + Int32 dataTypeFieldPosition = 0; + var switchFieldBits = new Dictionary(); + // convert fields + foreach (var field in structuredType.Field) + { + // consume optional bits + if (field.TypeName.IsXmlBitType()) + { + var count = structureDefinition.Fields.Count; + if (count == 0 && + switchFieldBitPosition < 32) + { + structureDefinition.StructureType = StructureType.StructureWithOptionalFields; + byte fieldLength = (byte)((field.Length == 0) ? 1u : field.Length); + switchFieldBits[field.Name] = switchFieldBitPosition; + switchFieldBitPosition += fieldLength; + } + else + { + throw new DataTypeNotSupportedException( + "Options for bit selectors must be 32 bit in size, use the Int32 datatype and must be the first element in the structure."); + } + continue; + } + + if (switchFieldBitPosition != 0 && + switchFieldBitPosition != 32) + { + throw new DataTypeNotSupportedException( + "Bitwise option selectors must have 32 bits."); + } + + var dataTypeField = new StructureField() { + Name = field.Name, + Description = null, + DataType = field.TypeName.ToNodeId(typeDictionary), + IsOptional = false, + MaxStringLength = 0, + ArrayDimensions = null, + ValueRank = -1 + }; + + if (field.LengthField != null) + { + // handle array length + var lastField = structureDefinition.Fields.Last(); + if (lastField.Name != field.LengthField) + { + throw new DataTypeNotSupportedException( + "The length field must precede the type field of an array."); + } + lastField.Name = field.Name; + lastField.DataType = field.TypeName.ToNodeId(typeDictionary); + lastField.ValueRank = 1; + } + else + { + if (isUnionType) + { + // ignore the switchfield + if (field.SwitchField == null) + { + if (structureDefinition.Fields.Count != 0) + { + throw new DataTypeNotSupportedException( + "The switch field of a union must be the first field in the complex type."); + } + continue; + } + if (structureDefinition.Fields.Count != dataTypeFieldPosition) + { + throw new DataTypeNotSupportedException( + "The count of the switch field of the union member is not matching the field position."); + } + dataTypeFieldPosition++; + } + else + { + if (field.SwitchField != null) + { + dataTypeField.IsOptional = true; + byte value; + if (!switchFieldBits.TryGetValue(field.SwitchField, out value)) + { + throw new DataTypeNotSupportedException( + $"The switch field for {field.SwitchField} does not exist."); + } + } + } + structureDefinition.Fields.Add(dataTypeField); + } + } + + return structureDefinition; + } + + /// + /// Test for special Bit type used in the binary schema structure definition. + /// + private static bool IsXmlBitType(this XmlQualifiedName typeName) + { + if (typeName.Namespace == Namespaces.OpcBinarySchema || + typeName.Namespace == Namespaces.OpcUa) + { + if (typeName.Name == "Bit") + { + return true; + } + } + return false; + } + + /// + /// Look up the node id for a qualified name of a type + /// in a binary schema type definition. + /// + private static NodeId ToNodeId( + this XmlQualifiedName typeName, + Dictionary typeCollection) + { + if (typeName.Namespace == Namespaces.OpcBinarySchema || + typeName.Namespace == Namespaces.OpcUa) + { + switch (typeName.Name) + { + case "CharArray": return DataTypeIds.String; + case "Variant": return DataTypeIds.BaseDataType; + case "ExtensionObject": return DataTypeIds.Structure; + } + var internalField = typeof(DataTypeIds).GetField(typeName.Name); + if (internalField == null) + { + throw new DataTypeNotFoundException( + $"The type {typeName.Name} was not found in the internal type factory."); + } + return (NodeId)internalField.GetValue(typeName.Name); + } + else + { + if (!typeCollection.TryGetValue(typeName, out NodeId referenceId)) + { + throw new DataTypeNotFoundException( + typeName.Name, + $"The type {typeName.Name} in namespace {typeName.Namespace} was not found."); + } + return referenceId; + } + } + #endregion + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/DataTypeException.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/DataTypeException.cs new file mode 100644 index 00000000..7a7588a5 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/DataTypeException.cs @@ -0,0 +1,158 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client.ComplexTypes +{ + + /// + /// Exception is thrown if the data type is not found. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "RCS1194:Implement exception constructors.")] + public class DataTypeNotFoundException : Exception + { + /// + /// The nodeId of the data type. + /// + public ExpandedNodeId nodeId; + + /// + /// The name of the data type. + /// + public string typeName; + + /// + /// Create the exception. + /// + /// The nodeId of the data type. + public DataTypeNotFoundException(ExpandedNodeId nodeId) + { + this.nodeId = nodeId; + } + + /// + /// Create the exception. + /// + /// The name of the type. + /// The exception message. + public DataTypeNotFoundException(string typeName, string message) + : base(message) + { + this.nodeId = NodeId.Null; + this.typeName = typeName; + } + + + /// + /// Create the exception. + /// + /// The nodeId of the data type. + /// The exception message. + public DataTypeNotFoundException(ExpandedNodeId nodeId, string message) + : base(message) + { + this.nodeId = nodeId; + } + + /// + /// Create the exception. + /// + /// The nodeId of the data type. + /// The exception message. + /// The inner exception. + public DataTypeNotFoundException(ExpandedNodeId nodeId, string message, Exception inner) + : base(message, inner) + { + this.nodeId = nodeId; + } + } + + /// + /// DataType is not supported due to structure or value rank. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "RCS1194:Implement exception constructors.")] + public class DataTypeNotSupportedException : Exception + { + /// + /// The nodeId of the data type. + /// + public ExpandedNodeId nodeId; + + /// + /// The name of the data type. + /// + public string typeName; + + /// + /// Create the exception. + /// + /// The nodeId of the data type. + public DataTypeNotSupportedException(ExpandedNodeId nodeId) + { + this.nodeId = nodeId; + } + + /// + /// Create the exception. + /// + /// The name of the type. + /// The exception message. + public DataTypeNotSupportedException(string typeName, string message) + : base(message) + { + this.nodeId = NodeId.Null; + this.typeName = typeName; + } + + /// + /// Create the exception. + /// + /// The nodeId of the data type. + /// The exception message. + public DataTypeNotSupportedException(ExpandedNodeId nodeId, string message) + : base(message) + { + this.nodeId = nodeId; + } + + /// + /// Create the exception. + /// + /// The nodeId of the data type. + /// The exception message. + /// The inner exception. + public DataTypeNotSupportedException(ExpandedNodeId nodeId, string message, Exception inner) + : base(message, inner) + { + this.nodeId = nodeId; + } + } + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/IComplexTypeFactory.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/IComplexTypeFactory.cs new file mode 100644 index 00000000..3e458f9d --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/IComplexTypeFactory.cs @@ -0,0 +1,127 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Factory class for the complex type builder. + /// + public abstract class IComplexTypeFactory + { + /// + /// Create a new type builder instance for this factory. + /// + public abstract IComplexTypeBuilder Create( + string targetNamespace, + int targetNamespaceIndex, + string moduleName = null); + + /// + /// Types defined in the factory. + /// + public abstract Type[] GetTypes(); + } + + /// + /// Interface to dynamically build custom + /// enum types and structured types. + /// + public interface IComplexTypeBuilder + { + /// + /// Target namespace information. + /// + string TargetNamespace { get; } + + /// + /// Target namespace index. + /// + int TargetNamespaceIndex { get; } + + /// + /// Create an enum type from a binary schema definition. + /// Available before OPC UA V1.04. + /// + Type AddEnumType(Schema.Binary.EnumeratedType enumeratedType); + + /// + /// Create an enum type from an EnumDefinition in an ExtensionObject. + /// Available since OPC UA V1.04 in the DataTypeDefinition attribute. + /// + Type AddEnumType(QualifiedName typeName, ExtensionObject typeDefinition); + + /// + /// Create an enum type from an EnumValue property of a DataType node. + /// Available before OPC UA V1.04. + /// + Type AddEnumType(QualifiedName typeName, ExtensionObject[] enumDefinition); + + /// + /// Create an enum type from the EnumString array of a DataType node. + /// Available before OPC UA V1.04. + /// + Type AddEnumType(QualifiedName typeName, LocalizedText[] enumDefinition); + + /// + /// Create a complex type from a StructureDefinition. + /// Available since OPC UA V1.04 in the DataTypeDefinition attribute. + /// + IComplexTypeFieldBuilder AddStructuredType( + QualifiedName name, + StructureDefinition structureDefinition); + } + + /// + /// Interface to build property fields. + /// + public interface IComplexTypeFieldBuilder + { + /// + /// Build the StructureTypeId attribute for a complex type. + /// + void AddTypeIdAttribute( + ExpandedNodeId complexTypeId, + ExpandedNodeId binaryEncodingId, + ExpandedNodeId xmlEncodingId + ); + + /// + /// Create a property field of a class with get and set. + /// + void AddField(StructureField field, Type fieldType, int order); + + /// + /// Finish the type creation and returns the new type. + /// + Type CreateType(); + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/IComplexTypeProperties.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/IComplexTypeProperties.cs new file mode 100644 index 00000000..b0ab2112 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/IComplexTypeProperties.cs @@ -0,0 +1,147 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Runtime.Serialization; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Attribute for a complex type property. + /// + public class ComplexTypePropertyAttribute + { + /// + public readonly PropertyInfo PropertyInfo; + + /// + /// The structure field attributes of the complex type. + /// + public readonly StructureFieldAttribute FieldAttribute; + + /// + /// The data attributes of the complex type. + /// + public readonly DataMemberAttribute DataAttribute; + + /// + /// Create the attributes for the complex type. + /// + public ComplexTypePropertyAttribute( + PropertyInfo propertyInfo, + StructureFieldAttribute fieldAttribute, + DataMemberAttribute dataAttribute + ) + { + PropertyInfo = propertyInfo; + FieldAttribute = fieldAttribute; + DataAttribute = dataAttribute; + } + + /// + /// Get the name of the complex type. + /// + public string Name => PropertyInfo.Name; + + /// + /// Get the value of a property. + /// + public object GetValue(object o) + { + return PropertyInfo.GetValue(o); + } + + /// + /// Set the value of a property. + /// + public void SetValue(object o, object v) + { + PropertyInfo.SetValue(o, v); + } + + /// + public Type PropertyType => PropertyInfo.PropertyType; + + /// + public bool IsOptional => FieldAttribute.IsOptional; + + /// + public int ValueRank => FieldAttribute.ValueRank; + + /// + public int Order => DataAttribute.Order; + + /// + /// Optional mask for the field in the property. + /// + public UInt32 OptionalFieldMask; + } + + /// + /// Interface to access properties of a complex type. + /// + public interface IComplexTypeProperties + { + /// + /// Get count of properties. + /// + int GetPropertyCount(); + + /// + /// Get ordered list of property names. + /// + IList GetPropertyNames(); + + /// + /// Get ordered list of property types. + /// + IList GetPropertyTypes(); + + /// + /// Access property values by index. + /// + object this[int index] { get; set; } + + /// + /// Access property values by name. + /// + object this[string name] { get; set; } + + /// + /// Ordered enumerator for properties. + /// + IEnumerable GetPropertyEnumerator(); + + } + + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Opc.Ua.Client.ComplexTypes.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Opc.Ua.Client.ComplexTypes.csproj new file mode 100644 index 00000000..8f087d12 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Opc.Ua.Client.ComplexTypes.csproj @@ -0,0 +1,46 @@ + + + + Opc.Ua.Client.ComplexTypes + $(LibxTargetFrameworks) + 7 + OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes + Opc.Ua.Client.ComplexTypes + OPC UA Complex Types Client Class Library + true + true + + + + $(PackageId).Debug + + + + + + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..49e4a611 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Properties/AssemblyInfo.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ +using System.Runtime.CompilerServices; + +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.Client.ComplexTypes.Tests, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.Client.ComplexTypes.Tests")] +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/AssemblyModule.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/AssemblyModule.cs new file mode 100644 index 00000000..d908e993 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/AssemblyModule.cs @@ -0,0 +1,80 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Reflection.Emit; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Use a single assembly and module builder instance to build the type system. + /// + public class AssemblyModule + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public AssemblyModule(string assemblyName = null) + { + m_assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly( + new AssemblyName(assemblyName ?? Guid.NewGuid().ToString()), + AssemblyBuilderAccess.Run); + m_moduleBuilder = m_assemblyBuilder.DefineDynamicModule(m_opcTypesModuleName); + } + #endregion + + #region Public Members + /// + /// Get the module builder instance. + /// + public ModuleBuilder GetModuleBuilder() + { + return m_moduleBuilder; + } + + /// + /// Get the types defined in this assembly. + /// + public Type[] GetTypes() + { + return m_assemblyBuilder.GetTypes(); + } + #endregion + + #region Private Fields + AssemblyBuilder m_assemblyBuilder; + ModuleBuilder m_moduleBuilder; + private const string m_opcTypesModuleName = "Opc.Ua.ComplexTypes.Module"; + #endregion + } + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/AttributeExtensions.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/AttributeExtensions.cs new file mode 100644 index 00000000..ac094e5a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/AttributeExtensions.cs @@ -0,0 +1,236 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Reflection.Emit; +using System.Runtime.Serialization; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Extensions to build attributes for the complex type builder. + /// + public static class AttributeExtensions + { + #region Extensions + /// + /// Get the return type of an item in a collection. + /// + public static Type GetItemType(this Type collectionType) + { + return collectionType.GetMethod("get_Item").ReturnType; + } + + /// + /// Build the DataContract attribute for a complex type. + /// + public static void DataContractAttribute(this TypeBuilder builder, string Namespace) + { + var attribute = DataContractAttributeBuilder(Namespace); + builder.SetCustomAttribute(attribute); + } + + /// + /// Build the DataContract attribute for an enumeration type. + /// + public static void DataContractAttribute(this EnumBuilder builder, string Namespace) + { + var attribute = DataContractAttributeBuilder(Namespace); + builder.SetCustomAttribute(attribute); + } + + /// + /// Build the DataMember attribute for a complex type. + /// + public static void DataMemberAttribute(this PropertyBuilder typeBuilder, string name, bool isRequired, int order) + { + var attribute = DataMemberAttributeBuilder(name, isRequired, order); + typeBuilder.SetCustomAttribute(attribute); + } + + /// + /// Build the StructureDefiniton attribute for a complex type. + /// + public static void StructureDefinitonAttribute( + this TypeBuilder typeBuilder, + StructureDefinition structureDefinition) + { + var attributeType = typeof(StructureDefinitionAttribute); + var baseDataType = StructureDefinitionAttribute.FromBaseType(structureDefinition.BaseDataType); + ConstructorInfo ctorInfo = attributeType.GetConstructor(Type.EmptyTypes); + CustomAttributeBuilder builder = new CustomAttributeBuilder( + ctorInfo, + new object[0], // constructor arguments + new[] // properties to assign + { + attributeType.GetProperty("DefaultEncodingId"), + attributeType.GetProperty("BaseDataType"), + attributeType.GetProperty("StructureType") + }, + new object[] // values to assign + { + structureDefinition.DefaultEncodingId?.ToString(), + baseDataType, + structureDefinition.StructureType + }); + typeBuilder.SetCustomAttribute(builder); + } + + /// + /// Build the StructureTypeId attribute for a complex type. + /// + public static void StructureTypeIdAttribute( + this TypeBuilder typeBuilder, + ExpandedNodeId complexTypeId, + ExpandedNodeId binaryEncodingId, + ExpandedNodeId xmlEncodingId + ) + { + var attributeType = typeof(StructureTypeIdAttribute); + ConstructorInfo ctorInfo = attributeType.GetConstructor(Type.EmptyTypes); + CustomAttributeBuilder builder = new CustomAttributeBuilder( + ctorInfo, + new object[0], // constructor arguments + new[] // properties to assign + { + attributeType.GetProperty("ComplexTypeId"), + attributeType.GetProperty("BinaryEncodingId"), + attributeType.GetProperty("XmlEncodingId") + }, + new object[] // values to assign + { + complexTypeId?.ToString(), + binaryEncodingId?.ToString(), + xmlEncodingId?.ToString() + }); + typeBuilder.SetCustomAttribute(builder); + } + + /// + /// Build the StructureField attribute for a complex type. + /// + public static void StructureFieldAttribute( + this PropertyBuilder typeBuilder, + StructureField structureField) + { + var attributeType = typeof(StructureFieldAttribute); + ConstructorInfo ctorInfo = attributeType.GetConstructor(Type.EmptyTypes); + CustomAttributeBuilder builder = new CustomAttributeBuilder( + ctorInfo, + new object[0], // constructor arguments + new[] // properties to assign + { + attributeType.GetProperty("ValueRank"), + attributeType.GetProperty("MaxStringLength"), + attributeType.GetProperty("IsOptional") + }, + new object[] // values to assign + { + structureField.ValueRank, + structureField.MaxStringLength, + structureField.IsOptional + }); + typeBuilder.SetCustomAttribute(builder); + } + + /// + /// Build the EnumMember attribute for an enumeration type. + /// + public static void EnumMemberAttribute(this FieldBuilder typeBuilder, string Name, int Value) + { + var attributeType = typeof(EnumMemberAttribute); + Type[] ctorParams = new Type[] { typeof(string) }; + ConstructorInfo ctorInfo = attributeType.GetConstructor(Type.EmptyTypes); + CustomAttributeBuilder builder = new CustomAttributeBuilder( + ctorInfo, + new object[0], // constructor arguments + new[] // properties to assign + { + attributeType.GetProperty("Value") + }, + new object[] // values to assign + { + Name+"_"+Value.ToString() + }); + typeBuilder.SetCustomAttribute(builder); + } + #endregion + + #region Private Static Members + /// + /// Build the DataMember attribute. + /// + private static CustomAttributeBuilder DataMemberAttributeBuilder(string name, bool isRequired, int order) + { + var attributeType = typeof(DataMemberAttribute); + ConstructorInfo ctorInfo = attributeType.GetConstructor(Type.EmptyTypes); + CustomAttributeBuilder builder = new CustomAttributeBuilder( + ctorInfo, + new object[0], // constructor arguments + new[] // properties to assign + { + attributeType.GetProperty("Name"), + attributeType.GetProperty("IsRequired"), + attributeType.GetProperty("Order") + }, + new object[] // values to assign + { + name, + isRequired, + order + }); + return builder; + } + + /// + /// Build the DataContract attribute. + /// + private static CustomAttributeBuilder DataContractAttributeBuilder(string Namespace) + { + var attributeType = typeof(DataContractAttribute); + ConstructorInfo ctorInfo = attributeType.GetConstructor(Type.EmptyTypes); + CustomAttributeBuilder builder = new CustomAttributeBuilder( + ctorInfo, + new object[0], // constructor arguments + new[] // properties to assign + { + attributeType.GetProperty("Namespace") + }, + new object[] // values to assign + { + Namespace + }); + return builder; + } + #endregion + + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeBuilder.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeBuilder.cs new file mode 100644 index 00000000..859a8274 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeBuilder.cs @@ -0,0 +1,245 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Reflection; +using System.Reflection.Emit; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Build an assembly with custom enum types and + /// complex types based on the BaseComplexType class + /// using System.Reflection.Emit. + /// + public class ComplexTypeBuilder : IComplexTypeBuilder + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public ComplexTypeBuilder( + AssemblyModule moduleFactory, + string targetNamespace, + int targetNamespaceIndex, + string moduleName = null) + { + m_targetNamespace = targetNamespace; + m_targetNamespaceIndex = targetNamespaceIndex; + m_moduleName = FindModuleName(moduleName, targetNamespace, targetNamespaceIndex); + m_moduleBuilder = moduleFactory.GetModuleBuilder(); + } + #endregion + + #region Public Members + /// + /// The target namespace of the type builder. + /// + public string TargetNamespace => m_targetNamespace; + + /// + /// The target namespace index of the type builder. + /// + public int TargetNamespaceIndex => m_targetNamespaceIndex; + + /// + /// Create an enum type from a binary schema definition. + /// Available before OPC UA V1.04. + /// + public Type AddEnumType(Schema.Binary.EnumeratedType enumeratedType) + { + if (enumeratedType == null) + { + throw new ArgumentNullException(nameof(enumeratedType)); + } + var enumBuilder = m_moduleBuilder.DefineEnum( + GetFullQualifiedTypeName(enumeratedType.Name), + TypeAttributes.Public, + typeof(int)); + enumBuilder.DataContractAttribute(m_targetNamespace); + foreach (var enumValue in enumeratedType.EnumeratedValue) + { + var newEnum = enumBuilder.DefineLiteral(enumValue.Name, enumValue.Value); + newEnum.EnumMemberAttribute(enumValue.Name, enumValue.Value); + } + return enumBuilder.CreateTypeInfo(); + } + + /// + /// Create an enum type from an EnumDefinition in an ExtensionObject. + /// Available since OPC UA V1.04 in the DataTypeDefinition attribute. + /// + public Type AddEnumType(QualifiedName typeName, ExtensionObject typeDefinition) + { + var enumDefinition = typeDefinition.Body as EnumDefinition; + if (enumDefinition == null) + { + throw new ArgumentNullException(nameof(typeDefinition)); + } + + var enumBuilder = m_moduleBuilder.DefineEnum( + GetFullQualifiedTypeName(typeName), + TypeAttributes.Public, + typeof(int)); + enumBuilder.DataContractAttribute(m_targetNamespace); + foreach (var enumValue in enumDefinition.Fields) + { + var newEnum = enumBuilder.DefineLiteral(enumValue.Name, (int)enumValue.Value); + newEnum.EnumMemberAttribute(enumValue.Name, (int)enumValue.Value); + } + return enumBuilder.CreateTypeInfo(); + } + + /// + /// Create an enum type from an EnumValue property of a DataType node. + /// Available before OPC UA V1.04. + /// + public Type AddEnumType(QualifiedName typeName, ExtensionObject[] enumDefinition) + { + if (enumDefinition == null) + { + throw new ArgumentNullException(nameof(enumDefinition)); + } + + var enumBuilder = m_moduleBuilder.DefineEnum( + GetFullQualifiedTypeName(typeName), + TypeAttributes.Public, + typeof(int)); + enumBuilder.DataContractAttribute(m_targetNamespace); + foreach (var extensionObject in enumDefinition) + { + var enumValue = extensionObject.Body as EnumValueType; + var name = enumValue.DisplayName.Text; + var newEnum = enumBuilder.DefineLiteral(name, (int)enumValue.Value); + newEnum.EnumMemberAttribute(name, (int)enumValue.Value); + } + return enumBuilder.CreateTypeInfo(); + } + + /// + /// Create an enum type from the EnumString array of a DataType node. + /// Available before OPC UA V1.04. + /// + public Type AddEnumType(QualifiedName typeName, LocalizedText[] enumDefinition) + { + if (enumDefinition == null) + { + throw new ArgumentNullException(nameof(enumDefinition)); + } + + var enumBuilder = m_moduleBuilder.DefineEnum( + GetFullQualifiedTypeName(typeName), + TypeAttributes.Public, + typeof(int)); + enumBuilder.DataContractAttribute(m_targetNamespace); + int value = 0; + foreach (var enumValue in enumDefinition) + { + var name = enumValue.Text; + var newEnum = enumBuilder.DefineLiteral(name, value); + newEnum.EnumMemberAttribute(name, value); + value++; + } + return enumBuilder.CreateTypeInfo(); + } + + /// + /// Create a complex type from a StructureDefinition. + /// Available since OPC UA V1.04 in the DataTypeDefinition attribute. + /// + public IComplexTypeFieldBuilder AddStructuredType( + QualifiedName name, + StructureDefinition structureDefinition) + { + if (structureDefinition == null) + { + throw new ArgumentNullException(nameof(structureDefinition)); + } + Type baseType; + switch (structureDefinition.StructureType) + { + case StructureType.StructureWithOptionalFields: baseType = typeof(OptionalFieldsComplexType); break; + case StructureType.Union: baseType = typeof(UnionComplexType); break; + case StructureType.Structure: + default: baseType = typeof(BaseComplexType); break; + } + var structureBuilder = m_moduleBuilder.DefineType( + GetFullQualifiedTypeName(name), + TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.Serializable, + baseType); + structureBuilder.DataContractAttribute(m_targetNamespace); + structureBuilder.StructureDefinitonAttribute(structureDefinition); + return new ComplexTypeFieldBuilder(structureBuilder, structureDefinition.StructureType); + } + #endregion + + #region Private Members + /// + /// Create a unique namespace module name for the type. + /// + private string FindModuleName(string moduleName, string targetNamespace, int targetNamespaceIndex) + { + if (String.IsNullOrWhiteSpace(moduleName)) + { + Uri uri = new Uri(targetNamespace, UriKind.RelativeOrAbsolute); + var tempName = uri.IsAbsoluteUri ? uri.AbsolutePath : uri.ToString(); + + tempName = tempName.Replace("/", ""); + var splitName = tempName.Split(':'); + moduleName = splitName.Last(); + } + return moduleName; + } + + /// + /// Creates a unique full qualified type name for the assembly. + /// + /// The browse name of the type. + private string GetFullQualifiedTypeName(QualifiedName browseName) + { + var result = "Opc.Ua.ComplexTypes." + m_moduleName + "."; + if (browseName.NamespaceIndex > 1) + { + result += browseName.NamespaceIndex + "."; + } + return result + browseName.Name; + } + #endregion + + #region Private Fields + private ModuleBuilder m_moduleBuilder; + private string m_targetNamespace; + private string m_moduleName; + private int m_targetNamespaceIndex; + #endregion + } + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeFactory.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeFactory.cs new file mode 100644 index 00000000..4371a4a1 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeFactory.cs @@ -0,0 +1,74 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Factory function for the default complex type builder + /// using classes created with Reflection.Emit. + /// + public class ComplexTypeBuilderFactory : + IComplexTypeFactory + { + AssemblyModule m_moduleFactory; + + /// + /// Factory creates types in the assembly module. + /// + public ComplexTypeBuilderFactory(string assemblyName = null) + { + m_moduleFactory = new AssemblyModule(assemblyName); + } + + /// + /// Create a new type builder which uses Reflection.Emit. + /// + public override IComplexTypeBuilder Create( + string targetNamespace, + int targetNamespaceIndex, + string moduleName = null) + { + return new ComplexTypeBuilder( + m_moduleFactory, targetNamespace, + targetNamespaceIndex, moduleName); + } + + /// + /// Return array of all types created in this factory. + /// + public override Type[] GetTypes() + { + return m_moduleFactory.GetTypes(); + } + } + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeFieldBuilder.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeFieldBuilder.cs new file mode 100644 index 00000000..7ee1bba9 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/TypeBuilder/ComplexTypeFieldBuilder.cs @@ -0,0 +1,136 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Reflection.Emit; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Builder for property fields. + /// + public class ComplexTypeFieldBuilder : IComplexTypeFieldBuilder + { + #region Constructors + /// + /// The field builder for a complex type. + /// + /// The type builder to use. + /// The structure type. + public ComplexTypeFieldBuilder( + TypeBuilder structureBuilder, + StructureType structureType) + { + m_structureBuilder = structureBuilder; + m_structureType = structureType; + } + #endregion + + #region Public Properties + /// + /// Build the StructureTypeId attribute for a complex type. + /// + public void AddTypeIdAttribute( + ExpandedNodeId complexTypeId, + ExpandedNodeId binaryEncodingId, + ExpandedNodeId xmlEncodingId + ) + { + m_structureBuilder.StructureTypeIdAttribute( + complexTypeId, + binaryEncodingId, + xmlEncodingId + ); + } + + /// + /// Create a property field of a class with get and set. + /// + public void AddField(StructureField field, Type fieldType, int order) + { + var fieldBuilder = m_structureBuilder.DefineField("_" + field.Name, fieldType, FieldAttributes.Private); + var propertyBuilder = m_structureBuilder.DefineProperty( + field.Name, + PropertyAttributes.None, + fieldType, + null); + var methodAttributes = + System.Reflection.MethodAttributes.Public | + System.Reflection.MethodAttributes.HideBySig | + System.Reflection.MethodAttributes.Virtual; + + var setBuilder = m_structureBuilder.DefineMethod("set_" + field.Name, methodAttributes, null, new[] { fieldType }); + var setIl = setBuilder.GetILGenerator(); + setIl.Emit(OpCodes.Ldarg_0); + setIl.Emit(OpCodes.Ldarg_1); + setIl.Emit(OpCodes.Stfld, fieldBuilder); + if (m_structureType == StructureType.Union) + { + // set the union selector to the new field index + FieldInfo unionField = typeof(UnionComplexType).GetField( + "m_switchField", + BindingFlags.NonPublic | + BindingFlags.Instance); + setIl.Emit(OpCodes.Ldarg_0); + setIl.Emit(OpCodes.Ldc_I4, order); + setIl.Emit(OpCodes.Stfld, unionField); + } + setIl.Emit(OpCodes.Ret); + + var getBuilder = m_structureBuilder.DefineMethod("get_" + field.Name, methodAttributes, fieldType, Type.EmptyTypes); + var getIl = getBuilder.GetILGenerator(); + getIl.Emit(OpCodes.Ldarg_0); + getIl.Emit(OpCodes.Ldfld, fieldBuilder); + getIl.Emit(OpCodes.Ret); + + propertyBuilder.SetGetMethod(getBuilder); + propertyBuilder.SetSetMethod(setBuilder); + propertyBuilder.DataMemberAttribute(field.Name, false, order); + propertyBuilder.StructureFieldAttribute(field); + } + + /// + /// Finish the type creation and returns the new type. + /// + public Type CreateType() + { + var complexType = m_structureBuilder.CreateType(); + m_structureBuilder = null; + return complexType; + } + #endregion + + #region Private Member + private TypeBuilder m_structureBuilder; + private StructureType m_structureType; + #endregion + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/BaseComplexType.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/BaseComplexType.cs new file mode 100644 index 00000000..fc33e016 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/BaseComplexType.cs @@ -0,0 +1,969 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// The base class for all complex types. + /// + public class BaseComplexType : + IEncodeable, IFormattable, + IComplexTypeProperties, + IStructureTypeInfo + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public BaseComplexType() + { + TypeId = ExpandedNodeId.Null; + BinaryEncodingId = ExpandedNodeId.Null; + XmlEncodingId = ExpandedNodeId.Null; + m_context = MessageContextExtension.CurrentContext; + InitializePropertyAttributes(); + } + + /// + /// Initializes the object with a . + /// + /// The type to copy and create an instance from + public BaseComplexType(ExpandedNodeId typeId) + { + TypeId = typeId; + } + + [OnSerializing()] + private void UpdateContext(StreamingContext context) + { + m_context = MessageContextExtension.CurrentContext; + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + TypeId = ExpandedNodeId.Null; + m_context = MessageContextExtension.CurrentContext; + } + #endregion + + #region Public Properties + /// + public ExpandedNodeId TypeId { get; set; } + + /// + public ExpandedNodeId BinaryEncodingId { get; set; } + + /// + public ExpandedNodeId XmlEncodingId { get; set; } + + /// + public virtual StructureType StructureType => StructureType.Structure; + + /// + /// Makes a deep copy of the object. + /// + /// + /// A new object that is a copy of this instance. + /// + public new virtual object MemberwiseClone() + { + Type thisType = this.GetType(); + BaseComplexType clone = Activator.CreateInstance(thisType) as BaseComplexType; + + clone.TypeId = TypeId; + clone.BinaryEncodingId = BinaryEncodingId; + clone.XmlEncodingId = XmlEncodingId; + + // clone all properties of derived class + foreach (var property in GetPropertyEnumerator()) + { + property.SetValue(clone, Utils.Clone(property.GetValue(this))); + } + + return clone; + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(TypeId.NamespaceUri); + + foreach (var property in GetPropertyEnumerator()) + { + EncodeProperty(encoder, property.PropertyInfo, property.ValueRank); + } + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(TypeId.NamespaceUri); + + foreach (var property in GetPropertyEnumerator()) + { + DecodeProperty(decoder, property.PropertyInfo, property.ValueRank); + } + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable equalValue) + { + if (Object.ReferenceEquals(this, equalValue)) + { + return true; + } + + if (!(equalValue is BaseComplexType valueBaseType)) + { + return false; + } + + var valueType = valueBaseType.GetType(); + if (this.GetType() != valueType) + { + return false; + } + + foreach (var property in GetPropertyEnumerator()) + { + if (!Utils.IsEqual(property.GetValue(this), property.GetValue(valueBaseType))) + { + return false; + } + } + + return true; + } + + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the complex type. + /// + /// (Unused). Leave this as null + /// The provider of a mechanism for retrieving an object to control formatting. + /// + /// A containing the value of the current embeded instance in the specified format. + /// + /// Thrown if the format parameter is not null + public virtual string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder body = new StringBuilder(); + + foreach (var property in GetPropertyEnumerator()) + { + AppendPropertyValue(formatProvider, body, property.GetValue(this), property.ValueRank); + } + + if (body.Length > 0) + { + body.Append("}"); + return body.ToString(); + } + + if (!NodeId.IsNull(this.TypeId)) + { + return String.Format(formatProvider, "{{{0}}}", this.TypeId); + } + + return "(null)"; + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region IComplexTypeProperties + /// + public virtual int GetPropertyCount() + { + return m_propertyList.Count; + } + + /// + public virtual IList GetPropertyNames() + { + return m_propertyList.Select(p => p.Name).ToList(); + } + + /// + public virtual IList GetPropertyTypes() + { + return m_propertyList.Select(p => p.PropertyType).ToList(); + } + + /// + /// Access property values by index. + /// + public virtual object this[int index] + { + get => m_propertyList.ElementAt(index).GetValue(this); + set => m_propertyList.ElementAt(index).SetValue(this, value); + } + + /// + /// Access property values by name. + /// + public virtual object this[string name] + { + get => m_propertyDict[name].GetValue(this); + set => m_propertyDict[name].SetValue(this, value); + } + + /// + /// Ordered enumerator for properties. + /// + public virtual IEnumerable GetPropertyEnumerator() + { + return m_propertyList; + } + #endregion + + #region Private Members + /// + /// Formatting helper. + /// + private void AddSeparator(StringBuilder body) + { + if (body.Length == 0) + { + body.Append("{"); + } + else + { + body.Append(" | "); + } + } + + /// + /// Append a property to the value string. + /// Handle arrays and enumerations. + /// + protected void AppendPropertyValue( + IFormatProvider formatProvider, + StringBuilder body, + object value, + int valueRank) + { + AddSeparator(body); + if (valueRank >= 0 && + value is IEnumerable) + { + bool first = true; + var enumerable = value as IEnumerable; + body.Append("["); + foreach (var item in enumerable) + { + if (!first) + { + body.Append(","); + } + AppendPropertyValue(formatProvider, body, item); + first = false; + } + body.Append("]"); + } + else + { + AppendPropertyValue(formatProvider, body, value); + } + } + + /// + /// Append a property to the value string. + /// + private void AppendPropertyValue( + IFormatProvider formatProvider, + StringBuilder body, + object value) + { + if (value is byte[]) + { + body.AppendFormat(formatProvider, "Byte[{0}]", ((byte[])value).Length); + return; + } + + if (value is XmlElement) + { + body.AppendFormat(formatProvider, "<{0}>", ((XmlElement)value).Name); + return; + } + + body.AppendFormat("{0}", value); + } + + /// + /// Encode a property based on the property type and value rank. + /// + protected void EncodeProperty( + IEncoder encoder, + string name, + PropertyInfo property, + int valueRank + ) + { + if (valueRank < 0) + { + EncodeProperty(encoder, name, property); + } + else + { + EncodePropertyArray(encoder, name, property); + } + } + + /// + /// Encode a property based on the property type and value rank. + /// + protected void EncodeProperty( + IEncoder encoder, + PropertyInfo property, + int valueRank) + { + EncodeProperty(encoder, property.Name, property, valueRank); + } + + /// + /// Encode a scalar property based on the property type. + /// + private void EncodeProperty(IEncoder encoder, string name, PropertyInfo property) + { + var propertyType = property.PropertyType; + if (propertyType == typeof(Boolean)) + { + encoder.WriteBoolean(name, (Boolean)property.GetValue(this)); + } + else if (propertyType == typeof(SByte)) + { + encoder.WriteSByte(name, (SByte)property.GetValue(this)); + } + else if (propertyType == typeof(Byte)) + { + encoder.WriteByte(name, (Byte)property.GetValue(this)); + } + else if (propertyType == typeof(Int16)) + { + encoder.WriteInt16(name, (Int16)property.GetValue(this)); + } + else if (propertyType == typeof(UInt16)) + { + encoder.WriteUInt16(name, (UInt16)property.GetValue(this)); + } + else if (propertyType.IsEnum) + { + encoder.WriteEnumerated(name, (Enum)property.GetValue(this)); + } + else if (propertyType == typeof(Int32)) + { + encoder.WriteInt32(name, (Int32)property.GetValue(this)); + } + else if (propertyType == typeof(UInt32)) + { + encoder.WriteUInt32(name, (UInt32)property.GetValue(this)); + } + else if (propertyType == typeof(Int64)) + { + encoder.WriteInt64(name, (Int64)property.GetValue(this)); + } + else if (propertyType == typeof(UInt64)) + { + encoder.WriteUInt64(name, (UInt64)property.GetValue(this)); + } + else if (propertyType == typeof(Single)) + { + encoder.WriteFloat(name, (Single)property.GetValue(this)); + } + else if (propertyType == typeof(Double)) + { + encoder.WriteDouble(name, (Double)property.GetValue(this)); + } + else if (propertyType == typeof(String)) + { + encoder.WriteString(name, (String)property.GetValue(this)); + } + else if (propertyType == typeof(DateTime)) + { + encoder.WriteDateTime(name, (DateTime)property.GetValue(this)); + } + else if (propertyType == typeof(Uuid)) + { + encoder.WriteGuid(name, (Uuid)property.GetValue(this)); + } + else if (propertyType == typeof(Byte[])) + { + encoder.WriteByteString(name, (Byte[])property.GetValue(this)); + } + else if (propertyType == typeof(XmlElement)) + { + encoder.WriteXmlElement(name, (XmlElement)property.GetValue(this)); + } + else if (propertyType == typeof(NodeId)) + { + encoder.WriteNodeId(name, (NodeId)property.GetValue(this)); + } + else if (propertyType == typeof(ExpandedNodeId)) + { + encoder.WriteExpandedNodeId(name, (ExpandedNodeId)property.GetValue(this)); + } + else if (propertyType == typeof(StatusCode)) + { + encoder.WriteStatusCode(name, (StatusCode)property.GetValue(this)); + } + else if (propertyType == typeof(DiagnosticInfo)) + { + encoder.WriteDiagnosticInfo(name, (DiagnosticInfo)property.GetValue(this)); + } + else if (propertyType == typeof(QualifiedName)) + { + encoder.WriteQualifiedName(name, (QualifiedName)property.GetValue(this)); + } + else if (propertyType == typeof(LocalizedText)) + { + encoder.WriteLocalizedText(name, (LocalizedText)property.GetValue(this)); + } + else if (propertyType == typeof(DataValue)) + { + encoder.WriteDataValue(name, (DataValue)property.GetValue(this)); + } + else if (propertyType == typeof(Variant)) + { + encoder.WriteVariant(name, (Variant)property.GetValue(this)); + } + else if (propertyType == typeof(ExtensionObject)) + { + encoder.WriteExtensionObject(name, (ExtensionObject)property.GetValue(this)); + } + else if (typeof(IEncodeable).IsAssignableFrom(propertyType)) + { + encoder.WriteEncodeable(name, (IEncodeable)property.GetValue(this), propertyType); + } + else + { + throw new ServiceResultException(StatusCodes.BadNotSupported, + $"Unknown type {propertyType} to encode."); + } + } + + /// + /// Encode an array property based on the base property type. + /// + private void EncodePropertyArray(IEncoder encoder, string name, PropertyInfo property) + { + var elementType = property.PropertyType.GetElementType(); + if (elementType == null) + { + elementType = property.PropertyType.GetItemType(); + } + if (elementType == typeof(Boolean)) + { + encoder.WriteBooleanArray(name, (BooleanCollection)property.GetValue(this)); + } + else if (elementType == typeof(SByte)) + { + encoder.WriteSByteArray(name, (SByteCollection)property.GetValue(this)); + } + else if (elementType == typeof(Byte)) + { + encoder.WriteByteArray(name, (ByteCollection)property.GetValue(this)); + } + else if (elementType == typeof(Int16)) + { + encoder.WriteInt16Array(name, (Int16Collection)property.GetValue(this)); + } + else if (elementType == typeof(UInt16)) + { + encoder.WriteUInt16Array(name, (UInt16Collection)property.GetValue(this)); + } + else if (elementType == typeof(Int32)) + { + encoder.WriteInt32Array(name, (Int32Collection)property.GetValue(this)); + } + else if (elementType.IsEnum) + { + encoder.WriteEnumeratedArray(name, (Array)property.GetValue(this), elementType); + } + else if (elementType == typeof(UInt32)) + { + encoder.WriteUInt32Array(name, (UInt32Collection)property.GetValue(this)); + } + else if (elementType == typeof(Int64)) + { + encoder.WriteInt64Array(name, (Int64Collection)property.GetValue(this)); + } + else if (elementType == typeof(UInt64)) + { + encoder.WriteUInt64Array(name, (UInt64Collection)property.GetValue(this)); + } + else if (elementType == typeof(Single)) + { + encoder.WriteFloatArray(name, (FloatCollection)property.GetValue(this)); + } + else if (elementType == typeof(Double)) + { + encoder.WriteDoubleArray(name, (DoubleCollection)property.GetValue(this)); + } + else if (elementType == typeof(String)) + { + encoder.WriteStringArray(name, (StringCollection)property.GetValue(this)); + } + else if (elementType == typeof(DateTime)) + { + encoder.WriteDateTimeArray(name, (DateTimeCollection)property.GetValue(this)); + } + else if (elementType == typeof(Uuid)) + { + encoder.WriteGuidArray(name, (UuidCollection)property.GetValue(this)); + } + else if (elementType == typeof(Byte[])) + { + encoder.WriteByteStringArray(name, (ByteStringCollection)property.GetValue(this)); + } + else if (elementType == typeof(XmlElement)) + { + encoder.WriteXmlElementArray(name, (XmlElementCollection)property.GetValue(this)); + } + else if (elementType == typeof(NodeId)) + { + encoder.WriteNodeIdArray(name, (NodeIdCollection)property.GetValue(this)); + } + else if (elementType == typeof(ExpandedNodeId)) + { + encoder.WriteExpandedNodeIdArray(name, (ExpandedNodeIdCollection)property.GetValue(this)); + } + else if (elementType == typeof(StatusCode)) + { + encoder.WriteStatusCodeArray(name, (StatusCodeCollection)property.GetValue(this)); + } + else if (elementType == typeof(DiagnosticInfo)) + { + encoder.WriteDiagnosticInfoArray(name, (DiagnosticInfoCollection)property.GetValue(this)); + } + else if (elementType == typeof(QualifiedName)) + { + encoder.WriteQualifiedNameArray(name, (QualifiedNameCollection)property.GetValue(this)); + } + else if (elementType == typeof(LocalizedText)) + { + encoder.WriteLocalizedTextArray(name, (LocalizedTextCollection)property.GetValue(this)); + } + else if (elementType == typeof(DataValue)) + { + encoder.WriteDataValueArray(name, (DataValueCollection)property.GetValue(this)); + } + else if (elementType == typeof(Variant)) + { + encoder.WriteVariantArray(name, (VariantCollection)property.GetValue(this)); + } + else if (elementType == typeof(ExtensionObject)) + { + encoder.WriteExtensionObjectArray(name, (ExtensionObjectCollection)property.GetValue(this)); + } + else if (typeof(IEncodeable).IsAssignableFrom(elementType)) + { + var value = property.GetValue(this); + if (!(value is IEncodeableCollection encodable)) + { + encodable = IEncodeableCollection.ToIEncodeableCollection(value as IEncodeable[]); + } + encoder.WriteEncodeableArray(property.Name, encodable.ToArray(), property.PropertyType); + } + else + { + throw new ServiceResultException(StatusCodes.BadNotSupported, + $"Unknown type {elementType} to encode."); + } + } + + + /// + /// Decode a property based on the property type and value rank. + /// + protected void DecodeProperty( + IDecoder decoder, + PropertyInfo property, + int valueRank) + { + DecodeProperty(decoder, property.Name, property, valueRank); + } + + /// + /// Decode a property based on the property type and value rank. + /// + protected void DecodeProperty( + IDecoder decoder, + string name, + PropertyInfo property, + int valueRank) + { + if (valueRank < 0) + { + DecodeProperty(decoder, name, property); + } + else + { + DecodePropertyArray(decoder, name, property); + } + } + + /// + /// Decode a scalar property based on the property type. + /// + private void DecodeProperty(IDecoder decoder, string name, PropertyInfo property) + { + var propertyType = property.PropertyType; + if (propertyType == typeof(Boolean)) + { + property.SetValue(this, decoder.ReadBoolean(name)); + } + else if (propertyType == typeof(SByte)) + { + property.SetValue(this, decoder.ReadSByte(name)); + } + else if (propertyType == typeof(Byte)) + { + property.SetValue(this, decoder.ReadByte(name)); + } + else if (propertyType == typeof(Int16)) + { + property.SetValue(this, decoder.ReadInt16(name)); + } + else if (propertyType == typeof(UInt16)) + { + property.SetValue(this, decoder.ReadUInt16(name)); + } + else if (propertyType.IsEnum) + { + property.SetValue(this, decoder.ReadEnumerated(name, propertyType)); + } + else if (propertyType == typeof(Int32)) + { + property.SetValue(this, decoder.ReadInt32(name)); + } + else if (propertyType == typeof(UInt32)) + { + property.SetValue(this, decoder.ReadUInt32(name)); + } + else if (propertyType == typeof(Int64)) + { + property.SetValue(this, decoder.ReadInt64(name)); + } + else if (propertyType == typeof(UInt64)) + { + property.SetValue(this, decoder.ReadUInt64(name)); + } + else if (propertyType == typeof(Single)) + { + property.SetValue(this, decoder.ReadFloat(name)); + } + else if (propertyType == typeof(Double)) + { + property.SetValue(this, decoder.ReadDouble(name)); + } + else if (propertyType == typeof(String)) + { + property.SetValue(this, decoder.ReadString(name)); + } + else if (propertyType == typeof(DateTime)) + { + property.SetValue(this, decoder.ReadDateTime(name)); + } + else if (propertyType == typeof(Uuid)) + { + property.SetValue(this, decoder.ReadGuid(name)); + } + else if (propertyType == typeof(Byte[])) + { + property.SetValue(this, decoder.ReadByteString(name)); + } + else if (propertyType == typeof(XmlElement)) + { + property.SetValue(this, decoder.ReadXmlElement(name)); + } + else if (propertyType == typeof(NodeId)) + { + property.SetValue(this, decoder.ReadNodeId(name)); + } + else if (propertyType == typeof(ExpandedNodeId)) + { + property.SetValue(this, decoder.ReadExpandedNodeId(name)); + } + else if (propertyType == typeof(StatusCode)) + { + property.SetValue(this, decoder.ReadStatusCode(name)); + } + else if (propertyType == typeof(DiagnosticInfo)) + { + property.SetValue(this, decoder.ReadDiagnosticInfo(name)); + } + else if (propertyType == typeof(QualifiedName)) + { + property.SetValue(this, decoder.ReadQualifiedName(name)); + } + else if (propertyType == typeof(LocalizedText)) + { + property.SetValue(this, decoder.ReadLocalizedText(name)); + } + else if (propertyType == typeof(DataValue)) + { + property.SetValue(this, decoder.ReadDataValue(name)); + } + else if (propertyType == typeof(Variant)) + { + property.SetValue(this, decoder.ReadVariant(name)); + } + else if (propertyType == typeof(ExtensionObject)) + { + property.SetValue(this, decoder.ReadExtensionObject(name)); + } + else if (typeof(IEncodeable).IsAssignableFrom(propertyType)) + { + property.SetValue(this, decoder.ReadEncodeable(name, propertyType)); + } + else + { + throw new ServiceResultException(StatusCodes.BadNotSupported, + $"Unknown type {propertyType} to decode."); + } + } + + /// + /// Decode an array property based on the base property type. + /// + private void DecodePropertyArray(IDecoder decoder, string name, PropertyInfo property) + { + var elementType = property.PropertyType.GetElementType(); + if (elementType == null) + { + elementType = property.PropertyType.GetItemType(); + } + if (elementType == typeof(Boolean)) + { + property.SetValue(this, decoder.ReadBooleanArray(name)); + } + else if (elementType == typeof(SByte)) + { + property.SetValue(this, decoder.ReadSByteArray(name)); + } + else if (elementType == typeof(Byte)) + { + property.SetValue(this, decoder.ReadByteArray(name)); + } + else if (elementType == typeof(Int16)) + { + property.SetValue(this, decoder.ReadInt16Array(name)); + } + else if (elementType == typeof(UInt16)) + { + property.SetValue(this, decoder.ReadUInt16Array(name)); + } + else if (elementType.IsEnum) + { + property.SetValue(this, decoder.ReadEnumeratedArray(name, elementType)); + } + else if (elementType == typeof(Int32)) + { + property.SetValue(this, decoder.ReadInt32Array(name)); + } + else if (elementType == typeof(UInt32)) + { + property.SetValue(this, decoder.ReadUInt32Array(name)); + } + else if (elementType == typeof(Int64)) + { + property.SetValue(this, decoder.ReadInt64Array(name)); + } + else if (elementType == typeof(UInt64)) + { + property.SetValue(this, decoder.ReadUInt64Array(name)); + } + else if (elementType == typeof(Single)) + { + property.SetValue(this, decoder.ReadFloatArray(name)); + } + else if (elementType == typeof(Double)) + { + property.SetValue(this, decoder.ReadDoubleArray(name)); + } + else if (elementType == typeof(String)) + { + property.SetValue(this, decoder.ReadStringArray(name)); + } + else if (elementType == typeof(DateTime)) + { + property.SetValue(this, decoder.ReadDateTimeArray(name)); + } + else if (elementType == typeof(Uuid)) + { + property.SetValue(this, decoder.ReadGuidArray(name)); + } + else if (elementType == typeof(Byte[])) + { + property.SetValue(this, decoder.ReadByteStringArray(name)); + } + else if (elementType == typeof(XmlElement)) + { + property.SetValue(this, decoder.ReadXmlElementArray(name)); + } + else if (elementType == typeof(NodeId)) + { + property.SetValue(this, decoder.ReadNodeIdArray(name)); + } + else if (elementType == typeof(ExpandedNodeId)) + { + property.SetValue(this, decoder.ReadExpandedNodeIdArray(name)); + } + else if (elementType == typeof(StatusCode)) + { + property.SetValue(this, decoder.ReadStatusCodeArray(name)); + } + else if (elementType == typeof(DiagnosticInfo)) + { + property.SetValue(this, decoder.ReadDiagnosticInfoArray(name)); + } + else if (elementType == typeof(QualifiedName)) + { + property.SetValue(this, decoder.ReadQualifiedNameArray(name)); + } + else if (elementType == typeof(LocalizedText)) + { + property.SetValue(this, decoder.ReadLocalizedTextArray(name)); + } + else if (elementType == typeof(DataValue)) + { + property.SetValue(this, decoder.ReadDataValueArray(name)); + } + else if (elementType == typeof(Variant)) + { + property.SetValue(this, decoder.ReadVariantArray(name)); + } + else if (elementType == typeof(ExtensionObject)) + { + property.SetValue(this, decoder.ReadExtensionObjectArray(name)); + } + else if (typeof(IEncodeable).IsAssignableFrom(elementType)) + { + property.SetValue(this, decoder.ReadEncodeableArray(name, elementType)); + } + else + { + throw new ServiceResultException(StatusCodes.BadNotSupported, + $"Unknown type {elementType} to decode."); + } + } + + /// + /// Initialize the helpers for property enumerator and dictionary. + /// + protected virtual void InitializePropertyAttributes() + { + var definitionAttribute = (StructureDefinitionAttribute) + GetType().GetCustomAttribute(typeof(StructureDefinitionAttribute)); + if (definitionAttribute != null) + { + m_structureBaseType = definitionAttribute.BaseDataType; + } + + var typeAttribute = (StructureTypeIdAttribute) + GetType().GetCustomAttribute(typeof(StructureTypeIdAttribute)); + if (typeAttribute != null) + { + TypeId = ExpandedNodeId.Parse(typeAttribute.ComplexTypeId); + BinaryEncodingId = ExpandedNodeId.Parse(typeAttribute.BinaryEncodingId); + XmlEncodingId = ExpandedNodeId.Parse(typeAttribute.XmlEncodingId); + } + + m_propertyList = new List(); + var properties = GetType().GetProperties(); + foreach (var property in properties) + { + StructureFieldAttribute fieldAttribute = (StructureFieldAttribute) + property.GetCustomAttribute(typeof(StructureFieldAttribute)); + + if (fieldAttribute == null) + { + continue; + } + + DataMemberAttribute dataAttribute = (DataMemberAttribute) + property.GetCustomAttribute(typeof(DataMemberAttribute)); + + var newProperty = new ComplexTypePropertyAttribute(property, fieldAttribute, dataAttribute); + + m_propertyList.Add(newProperty); + } + m_propertyList = m_propertyList.OrderBy(p => p.Order).ToList(); + m_propertyDict = m_propertyList.ToDictionary(p => p.Name, p => p); + } + #endregion + + #region Protected Fields + /// + /// The list of properties of this complex type. + /// + protected IList m_propertyList; + /// + /// The list of properties as dictionary. + /// + protected Dictionary m_propertyDict; + #endregion + + #region Private Fields + private ServiceMessageContext m_context; + private StructureBaseDataType m_structureBaseType; + #endregion + } + + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/OptionalFieldsComplexType.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/OptionalFieldsComplexType.cs new file mode 100644 index 00000000..5446eeac --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/OptionalFieldsComplexType.cs @@ -0,0 +1,325 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Text; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// A complex type with optional fields. + /// + public class OptionalFieldsComplexType : BaseComplexType + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public OptionalFieldsComplexType() + { + m_encodingMask = 0; + } + + /// + /// Initializes the object with a . + /// + /// The type to copy and create an instance from + public OptionalFieldsComplexType(ExpandedNodeId typeId) : base(typeId) + { + m_encodingMask = 0; + } + #endregion + + #region Public Properties + + /// + public override StructureType StructureType => StructureType.StructureWithOptionalFields; + + /// + /// The encoding mask for the optional fields. + /// + public UInt32 EncodingMask => m_encodingMask; + + /// + /// Makes a deep copy of the object. + /// + /// + /// A new object that is a copy of this instance. + /// + public override object MemberwiseClone() + { + OptionalFieldsComplexType clone = (OptionalFieldsComplexType)base.MemberwiseClone(); + clone.m_encodingMask = m_encodingMask; + return clone; + } + + /// + public override void Encode(IEncoder encoder) + { + encoder.PushNamespace(TypeId.NamespaceUri); + + if (encoder.UseReversibleEncoding) + { + encoder.WriteUInt32("EncodingMask", m_encodingMask); + } + + foreach (var property in GetPropertyEnumerator()) + { + if (property.IsOptional) + { + if ((property.OptionalFieldMask & m_encodingMask) == 0) + { + continue; + } + } + + EncodeProperty(encoder, property.PropertyInfo, property.ValueRank); + } + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + decoder.PushNamespace(TypeId.NamespaceUri); + + m_encodingMask = decoder.ReadUInt32("EncodingMask"); + + foreach (var property in GetPropertyEnumerator()) + { + if (property.IsOptional) + { + if ((property.OptionalFieldMask & m_encodingMask) == 0) + { + continue; + } + } + + DecodeProperty(decoder, property.PropertyInfo, property.ValueRank); + } + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable equalValue) + { + if (Object.ReferenceEquals(this, equalValue)) + { + return true; + } + + var valueBaseType = equalValue as OptionalFieldsComplexType; + if (valueBaseType == null) + { + return false; + } + + if (m_encodingMask != valueBaseType.EncodingMask) + { + return false; + } + + var valueType = valueBaseType.GetType(); + if (this.GetType() != valueType) + { + return false; + } + + foreach (var property in GetPropertyEnumerator()) + { + if (property.IsOptional) + { + if ((property.OptionalFieldMask & m_encodingMask) == 0) + { + continue; + } + } + + if (!Utils.IsEqual(property.GetValue(this), property.GetValue(valueBaseType))) + { + return false; + } + } + + return true; + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the complex type. + /// + /// (Unused). Leave this as null + /// The provider of a mechanism for retrieving an object to control formatting. + /// + /// A containing the value of the current embeded instance in the specified format. + /// + /// Thrown if the format parameter is not null + public override string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder body = new StringBuilder(); + foreach (var property in GetPropertyEnumerator()) + { + if (property.IsOptional) + { + if ((property.OptionalFieldMask & m_encodingMask) == 0) + { + continue; + } + } + + AppendPropertyValue(formatProvider, body, property.GetValue(this), property.ValueRank); + } + + if (body.Length > 0) + { + body.Append("}"); + return body.ToString(); + } + + if (!NodeId.IsNull(this.TypeId)) + { + return String.Format(formatProvider, "{{{0}}}", this.TypeId); + } + + return "(null)"; + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region IComplexTypeProperties Members + /// + /// Access property values by index. + /// + public override object this[int index] + { + get + { + var property = m_propertyList.ElementAt(index); + if (property.IsOptional && + (property.OptionalFieldMask & m_encodingMask) == 0) + { + return null; + } + return property.GetValue(this); + } + set + { + var property = m_propertyList.ElementAt(index); + property.SetValue(this, value); + if (property.IsOptional) + { + if (value == null) + { + m_encodingMask &= ~property.OptionalFieldMask; + } + else + { + m_encodingMask |= property.OptionalFieldMask; + } + } + } + } + + /// + /// Access property values by name. + /// + public override object this[string name] + { + get + { + ComplexTypePropertyAttribute property; + if (m_propertyDict.TryGetValue(name, out property)) + { + if (property.IsOptional && + (property.OptionalFieldMask & m_encodingMask) == 0) + { + return null; + } + return property.GetValue(this); + } + throw new KeyNotFoundException(); + } + set + { + ComplexTypePropertyAttribute property; + if (m_propertyDict.TryGetValue(name, out property)) + { + property.SetValue(this, value); + if (value == null) + { + m_encodingMask &= ~property.OptionalFieldMask; + } + else + { + m_encodingMask |= property.OptionalFieldMask; + } + } + else + { + throw new KeyNotFoundException(); + } + } + } + #endregion + + #region Private Members + /// + protected override void InitializePropertyAttributes() + { + base.InitializePropertyAttributes(); + + // build optional field mask attribute + UInt32 optionalFieldMask = 1; + foreach (var property in GetPropertyEnumerator()) + { + property.OptionalFieldMask = 0; + if (property.IsOptional) + { + property.OptionalFieldMask = optionalFieldMask; + optionalFieldMask <<= 1; + } + } + } + #endregion + + #region Private Fields + private UInt32 m_encodingMask; + #endregion + } + + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureDefinitionAttribute.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureDefinitionAttribute.cs new file mode 100644 index 00000000..f23ccf8d --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureDefinitionAttribute.cs @@ -0,0 +1,106 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// The known base complex types. + /// + public enum StructureBaseDataType + { + /// + /// The type is a structure. + /// + Structure, + + /// + /// The type is an OptionSet. + /// + OptionSet, + + /// + /// The type is a Union. + /// + Union + } + + /// + /// Attribute for a base complex type structure definition. + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] + public class StructureDefinitionAttribute : Attribute + { + #region Constructors + /// + /// Create the attribute for a structure definition. + /// + public StructureDefinitionAttribute() + { + StructureType = StructureType.Structure; + } + #endregion + + #region Public Methods + /// + /// Convert the base type node id to a . + /// + /// The base type nodeId. + public static StructureBaseDataType FromBaseType(NodeId baseTypeId) + { + if (baseTypeId == DataTypeIds.Union) + { + return StructureBaseDataType.Union; + } + if (baseTypeId == DataTypeIds.OptionSet) + { + return StructureBaseDataType.OptionSet; + } + return StructureBaseDataType.Structure; + } + #endregion + + #region Public Properties + /// + /// The default encoding Id. + /// + public string DefaultEncodingId { get; set; } + /// + /// The base DataType. + /// + public StructureBaseDataType BaseDataType { get; set; } + /// + /// The structure type. + /// + public StructureType StructureType { get; set; } + #endregion + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureFieldAttribute.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureFieldAttribute.cs new file mode 100644 index 00000000..2c700bed --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureFieldAttribute.cs @@ -0,0 +1,71 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Attribute for a base complex type field definition. + /// + + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] + public class StructureFieldAttribute : Attribute + { + #region Constructors + /// + /// Initialize a field attribute with defaults. + /// + public StructureFieldAttribute() + { + ValueRank = -1; + MaxStringLength = 0; + IsOptional = false; + } + #endregion + + #region Public Properties + /// + /// The value rank of the field. + /// + public Int32 ValueRank { get; set; } + + /// + /// The maximum string length of the field. + /// + public UInt32 MaxStringLength { get; set; } + + /// + /// If the field is optional. + /// + public bool IsOptional { get; set; } + #endregion + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureTypeAttribute.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureTypeAttribute.cs new file mode 100644 index 00000000..523d095f --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/StructureTypeAttribute.cs @@ -0,0 +1,59 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client.ComplexTypes +{ + + /// + /// Attribute for type ids of a structure definition. + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] + public class StructureTypeIdAttribute : Attribute + { + #region Public Properties + /// + /// The complex type id attribute. + /// + public string ComplexTypeId { get; set; } + + /// + /// The binary encoding id attribute. + /// + public string BinaryEncodingId { get; set; } + + /// + /// The xml encoding id attribute. + /// + public string XmlEncodingId { get; set; } + #endregion + } +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/UnionComplexType.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/UnionComplexType.cs new file mode 100644 index 00000000..b28138c0 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client.ComplexTypes/Types/UnionComplexType.cs @@ -0,0 +1,347 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Reflection; +using System.Text; + +namespace Opc.Ua.Client.ComplexTypes +{ + /// + /// Implements a union complex type. + /// + public class UnionComplexType : BaseComplexType + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public UnionComplexType() : base() + { + m_switchField = 0; + } + + /// + /// Initializes the object with a . + /// + /// The type to copy and create an instance from + public UnionComplexType(ExpandedNodeId typeId) : base(typeId) + { + m_switchField = 0; + } + #endregion + + #region Public Properties + /// + /// The union selector determines which property is valid. + /// A value of 0 means all properties are invalid, x=1..n means the + /// xth property is valid. + /// + public UInt32 SwitchField => m_switchField; + + /// + public override StructureType StructureType => StructureType.Union; + + /// + /// Makes a deep copy of the object. + /// + /// + /// A new object that is a copy of this instance. + /// + public override object MemberwiseClone() + { + UnionComplexType clone = (UnionComplexType)base.MemberwiseClone(); + clone.m_switchField = m_switchField; + return clone; + } + + /// + public override void Encode(IEncoder encoder) + { + encoder.PushNamespace(TypeId.NamespaceUri); + + string fieldName = null; + if (encoder.UseReversibleEncoding) + { + encoder.WriteUInt32("SwitchField", m_switchField); + fieldName = "Value"; + } + + if (m_switchField != 0) + { + int unionSelector = 1; + int valueRank = -1; + PropertyInfo unionProperty = null; + foreach (var property in GetPropertyEnumerator()) + { + if (unionSelector == m_switchField) + { + valueRank = property.ValueRank; + unionProperty = property.PropertyInfo; + break; + } + unionSelector++; + } + EncodeProperty(encoder, fieldName, unionProperty, valueRank); + } + else if (!encoder.UseReversibleEncoding) + { + encoder.WriteString(null, "null"); + } + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + decoder.PushNamespace(TypeId.NamespaceUri); + + m_switchField = decoder.ReadUInt32("SwitchField"); + + UInt32 unionSelector = m_switchField; + if (unionSelector > 0) + { + foreach (var property in GetPropertyEnumerator()) + { + if (--unionSelector == 0) + { + DecodeProperty(decoder, "Value", property.PropertyInfo, property.ValueRank); + break; + } + } + } + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable equalValue) + { + if (Object.ReferenceEquals(this, equalValue)) + { + return true; + } + + var valueBaseType = equalValue as UnionComplexType; + if (valueBaseType == null) + { + return false; + } + + if (SwitchField != valueBaseType.SwitchField) + { + return false; + } + + var valueType = valueBaseType.GetType(); + if (this.GetType() != valueType) + { + return false; + } + + if (m_switchField != 0) + { + UInt32 unionSelector = m_switchField; + foreach (var property in GetPropertyEnumerator()) + { + if (--unionSelector == 0) + { + if (!Utils.IsEqual(property.GetValue(this), property.GetValue(valueBaseType))) + { + return false; + } + break; + } + } + } + return true; + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the complex type. + /// + /// (Unused). Leave this as null + /// The provider of a mechanism for retrieving an object to control formatting. + /// + /// A containing the value of the current embeded instance in the specified format. + /// + /// Thrown if the format parameter is not null + public override string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder body = new StringBuilder(); + if (m_switchField != 0) + { + UInt32 unionSelector = m_switchField; + foreach (var property in GetPropertyEnumerator()) + { + if (--unionSelector == 0) + { + object unionProperty = property.GetValue(this); + AppendPropertyValue(formatProvider, body, unionProperty, property.ValueRank); + break; + } + } + } + + if (body.Length > 0) + { + body.Append("}"); + return body.ToString(); + } + + if (!NodeId.IsNull(this.TypeId)) + { + return String.Format(formatProvider, "{{{0}}}", this.TypeId); + } + + return "(null)"; + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region IComplexTypeProperties Members + /// + /// Access property values by index. + /// + /// + /// The value of a Union is determined by the union selector. + /// Calling get on an unselected property returns null, + /// otherwise the selected object. + /// Calling get with an invalid index (e.g.-1) returns the selected object. + /// Calling set with a valid object on a selected property sets the value and the + /// union selector. + /// Calling set with a null object or an invalid index unselects the union. + /// + public override object this[int index] + { + get + { + if (index + 1 == (int)m_switchField) + { + return m_propertyList.ElementAt(index).GetValue(this); + } + if (index < 0 && + m_switchField > 0) + { + return m_propertyList.ElementAt((int)m_switchField - 1).GetValue(this); + } + return null; + } + set + { + if (index >= 0) + { + m_propertyList.ElementAt(index).SetValue(this, value); + // note: selector is updated in SetValue by emitted code for union + // m_unionSelector = (uint)(index + 1); + if (value != null) + { + return; + } + // reset union selector if value is a null + } + m_switchField = 0; + } + } + + /// + /// Access property values by name. + /// + /// + /// The value of a Union is determined by the union selector. + /// Calling get on an unselected property returns null, + /// otherwise the selected object. + /// Calling get with an invalid name returns the selected object. + /// Calling set with a valid object on a selected property sets the value and the + /// union selector. + /// Calling set with a null object or an invalid name unselects the union. + /// + public override object this[string name] + { + get + { + if (SwitchField > 0) + { + ComplexTypePropertyAttribute property; + if (m_propertyDict.TryGetValue(name, out property)) + { + if ((int)m_switchField == property.Order) + { + return property.GetValue(this); + } + } + else + { + return m_propertyList.ElementAt((int)SwitchField - 1).GetValue(this); + } + } + return null; + } + set + { + ComplexTypePropertyAttribute property; + if (m_propertyDict.TryGetValue(name, out property)) + { + property.SetValue(this, value); + // note: selector is updated in SetValue by emitted code for union + // m_unionSelector = (uint)(property.Order); + if (value != null) + { + return; + } + // reset union selector if value is a null + } + m_switchField = 0; + } + } + + /// + /// Simple accessor for Union to access current Value. + /// + public object Value => (m_switchField == 0) ? null : m_propertyList.ElementAt((int)m_switchField - 1).GetValue(this); + #endregion + + #region Private Fields + /// + /// The selector for the value of the Union. + /// + protected UInt32 m_switchField; + #endregion + } + + +}//namespace diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/Browser.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Browser.cs new file mode 100644 index 00000000..8652b512 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Browser.cs @@ -0,0 +1,465 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ServiceModel; +using System.Runtime.Serialization; + +namespace Opc.Ua.Client +{ + /// + /// Stores the options to use for a browse operation. + /// + [DataContract(Namespace=Namespaces.OpcUaXsd)] + public class Browser + { + #region Constructors + /// + /// Creates an unattached instance of a browser. + /// + public Browser() + { + Initialize(); + } + + /// + /// Creates new instance of a browser and attaches it to a session. + /// + public Browser(Session session) + { + Initialize(); + m_session = session; + } + + /// + /// Creates a copy of a browser. + /// + public Browser(Browser template) + { + Initialize(); + + if (template != null) + { + m_session = template.m_session; + m_view = template.m_view; + m_maxReferencesReturned = template.m_maxReferencesReturned; + m_browseDirection = template.m_browseDirection; + m_referenceTypeId = template.m_referenceTypeId; + m_includeSubtypes = template.m_includeSubtypes; + m_nodeClassMask = template.m_nodeClassMask; + m_resultMask = template.m_resultMask; + m_continueUntilDone = template.m_continueUntilDone; + } + } + + /// + /// Sets all private fields to default values. + /// + private void Initialize() + { + m_session = null; + m_view = null; + m_maxReferencesReturned = 0; + m_browseDirection = Opc.Ua.BrowseDirection.Forward; + m_referenceTypeId = null; + m_includeSubtypes = true; + m_nodeClassMask = 0; + m_resultMask = (uint)BrowseResultMask.All; + m_continueUntilDone = false; + m_browseInProgress = false; + } + #endregion + + #region Public Properties + /// + /// The session that the browse is attached to. + /// + public Session Session + { + get { return m_session; } + + set + { + CheckBrowserState(); + m_session = value; + } + } + + /// + /// The view to use for the browse operation. + /// + [DataMember(Order = 1)] + public ViewDescription View + { + get { return m_view; } + + set + { + CheckBrowserState(); + m_view = value; + } + } + + /// + /// The maximum number of refrences to return in a single browse operation. + /// + [DataMember(Order = 2)] + public uint MaxReferencesReturned + { + get { return m_maxReferencesReturned; } + + set + { + CheckBrowserState(); + m_maxReferencesReturned = value; + } + } + + /// + /// The direction to browse. + /// + [DataMember(Order = 3)] + public BrowseDirection BrowseDirection + { + get { return m_browseDirection; } + + set + { + CheckBrowserState(); + m_browseDirection = value; + } + } + + /// + /// The reference type to follow. + /// + [DataMember(Order = 4)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + + set + { + CheckBrowserState(); + m_referenceTypeId = value; + } + } + + /// + /// Whether subtypes of the reference type should be included. + /// + [DataMember(Order = 5)] + public bool IncludeSubtypes + { + get { return m_includeSubtypes; } + + set + { + CheckBrowserState(); + m_includeSubtypes = value; + } + } + + /// + /// The classes of the target nodes. + /// + [DataMember(Order = 6)] + public int NodeClassMask + { + get { return Utils.ToInt32(m_nodeClassMask); } + + set + { + CheckBrowserState(); + m_nodeClassMask = Utils.ToUInt32(value); + } + } + + /// + /// The results to return. + /// + [DataMember(Order=6)] + public uint ResultMask + { + get { return m_resultMask; } + + set + { + CheckBrowserState(); + m_resultMask = value; + } + } + + /// + /// Raised when a browse operation halted because of a continuation point. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event BrowserEventHandler MoreReferences + { + add { m_MoreReferences += value; } + remove { m_MoreReferences -= value; } + } + + /// + /// Whether subsequent continuation points should be processed automatically. + /// + public bool ContinueUntilDone + { + get { return m_continueUntilDone; } + + set + { + CheckBrowserState(); + m_continueUntilDone = value; + } + } + #endregion + + #region Public Methods + /// + /// Browses the specified node. + /// + public ReferenceDescriptionCollection Browse(NodeId nodeId) + { + if (m_session == null) + { + throw new ServiceResultException(StatusCodes.BadServerNotConnected, "Cannot browse if not connected to a server."); + } + + try + { + m_browseInProgress = true; + + // construct request. + BrowseDescription nodeToBrowse = new BrowseDescription(); + + nodeToBrowse.NodeId = nodeId; + nodeToBrowse.BrowseDirection = m_browseDirection; + nodeToBrowse.ReferenceTypeId = m_referenceTypeId; + nodeToBrowse.IncludeSubtypes = m_includeSubtypes; + nodeToBrowse.NodeClassMask = m_nodeClassMask; + nodeToBrowse.ResultMask = m_resultMask; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + nodesToBrowse.Add(nodeToBrowse); + + // make the call to the server. + BrowseResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.Browse( + null, + m_view, + m_maxReferencesReturned, + nodesToBrowse, + out results, + out diagnosticInfos); + + // ensure that the server returned valid results. + Session.ValidateResponse(results, nodesToBrowse); + Session.ValidateDiagnosticInfos(diagnosticInfos, nodesToBrowse); + + // check if valid. + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw ServiceResultException.Create(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable); + } + + // fetch initial set of references. + byte[] continuationPoint = results[0].ContinuationPoint; + ReferenceDescriptionCollection references = results[0].References; + + // process any continuation point. + while (continuationPoint != null) + { + ReferenceDescriptionCollection additionalReferences; + + if (!m_continueUntilDone && m_MoreReferences != null) + { + BrowserEventArgs args = new BrowserEventArgs(references); + m_MoreReferences(this, args); + + // cancel browser and return the references fetched so far. + if (args.Cancel) + { + BrowseNext(ref continuationPoint, true); + return references; + } + + m_continueUntilDone = args.ContinueUntilDone; + } + + additionalReferences = BrowseNext(ref continuationPoint, false); + if (additionalReferences != null && additionalReferences.Count > 0) + { + references.AddRange(additionalReferences); + } + else + { + Utils.Trace("Continuation point exists, but the browse results are null/empty."); + break; + } + } + + // return the results. + return references; + } + finally + { + m_browseInProgress = false; + } + } + #endregion + + #region Private Methods + /// + /// Checks the state of the browser. + /// + private void CheckBrowserState() + { + if (m_browseInProgress) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Cannot change browse parameters while a browse operation is in progress."); + } + } + + /// + /// Fetches the next batch of references. + /// + /// The continuation point. + /// if set to true the browse operation is cancelled. + /// The next batch of references + private ReferenceDescriptionCollection BrowseNext(ref byte[] continuationPoint, bool cancel) + { + ByteStringCollection continuationPoints = new ByteStringCollection(); + continuationPoints.Add(continuationPoint); + + // make the call to the server. + BrowseResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.BrowseNext( + null, + cancel, + continuationPoints, + out results, + out diagnosticInfos); + + // ensure that the server returned valid results. + Session.ValidateResponse(results, continuationPoints); + Session.ValidateDiagnosticInfos(diagnosticInfos, continuationPoints); + + // check if valid. + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw ServiceResultException.Create(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable); + } + + // update continuation point. + continuationPoint = results[0].ContinuationPoint; + + // return references. + return results[0].References; + } + #endregion + + #region Private Fields + private Session m_session; + private ViewDescription m_view; + private uint m_maxReferencesReturned; + private BrowseDirection m_browseDirection; + private NodeId m_referenceTypeId; + private bool m_includeSubtypes; + private uint m_nodeClassMask; + private uint m_resultMask; + private event BrowserEventHandler m_MoreReferences; + private bool m_continueUntilDone; + private bool m_browseInProgress; + #endregion + } + + #region BrowserEventArgs Class + /// + /// The event arguments provided a browse operation returns a continuation point. + /// + public class BrowserEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal BrowserEventArgs(ReferenceDescriptionCollection references) + { + m_references = references; + } + #endregion + + #region Public Properties + /// + /// Whether the browse operation should be cancelled. + /// + public bool Cancel + { + get { return m_cancel; } + set { m_cancel = value; } + } + + /// + /// Whether subsequent continuation points should be processed automatically. + /// + public bool ContinueUntilDone + { + get { return m_continueUntilDone; } + set { m_continueUntilDone = value; } + } + + /// + /// The references that have been fetched so far. + /// + public ReferenceDescriptionCollection References + { + get { return m_references; } + } + #endregion + + #region Private Fields + private bool m_cancel; + private bool m_continueUntilDone; + private ReferenceDescriptionCollection m_references; + #endregion + } + + /// + /// A delegate used to received browser events. + /// + public delegate void BrowserEventHandler(Browser sender, BrowserEventArgs e); + #endregion +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/CoreClientUtils.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/CoreClientUtils.cs new file mode 100644 index 00000000..a2ab39e0 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/CoreClientUtils.cs @@ -0,0 +1,320 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client +{ + /// + /// Defines numerous re-useable utility functions for clients. + /// + public static class CoreClientUtils + { + /// + /// The default discover operation timeout. + /// + public static readonly int DefaultDiscoverTimeout = 15000; + + #region Discovery + /// + /// Discovers the servers on the local machine. + /// + /// The configuration. + /// A list of server urls. + public static IList DiscoverServers(ApplicationConfiguration configuration) + { + return DiscoverServers(configuration, DefaultDiscoverTimeout); + } + + /// + /// Discovers the servers on the local machine. + /// + /// The configuration. + /// Operation timeout in milliseconds. + /// A list of server urls. + public static IList DiscoverServers( + ApplicationConfiguration configuration, + int discoverTimeout + ) + { + List serverUrls = new List(); + + // set a short timeout because this is happening in the drop down event. + var endpointConfiguration = EndpointConfiguration.Create(configuration); + endpointConfiguration.OperationTimeout = discoverTimeout; + + // Connect to the local discovery server and find the available servers. + using (DiscoveryClient client = DiscoveryClient.Create(new Uri(String.Format(Utils.DiscoveryUrls[0], "localhost")), endpointConfiguration)) + { + ApplicationDescriptionCollection servers = client.FindServers(null); + + // populate the drop down list with the discovery URLs for the available servers. + for (int ii = 0; ii < servers.Count; ii++) + { + if (servers[ii].ApplicationType == ApplicationType.DiscoveryServer) + { + continue; + } + + for (int jj = 0; jj < servers[ii].DiscoveryUrls.Count; jj++) + { + string discoveryUrl = servers[ii].DiscoveryUrls[jj]; + + // Many servers will use the '/discovery' suffix for the discovery endpoint. + // The URL without this prefix should be the base URL for the server. + if (discoveryUrl.EndsWith("/discovery")) + { + discoveryUrl = discoveryUrl.Substring(0, discoveryUrl.Length - "/discovery".Length); + } + + // ensure duplicates do not get added. + if (!serverUrls.Contains(discoveryUrl)) + { + serverUrls.Add(discoveryUrl); + } + } + } + } + + return serverUrls; + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + /// The discovery URL. + /// if set to true select an endpoint that uses security. + /// The best available endpoint. + public static EndpointDescription SelectEndpoint(string discoveryUrl, bool useSecurity) + { + return SelectEndpoint(discoveryUrl, useSecurity, DefaultDiscoverTimeout); + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + /// The discovery URL. + /// if set to true select an endpoint that uses security. + /// Operation timeout in milliseconds. + /// The best available endpoint. + public static EndpointDescription SelectEndpoint( + string discoveryUrl, + bool useSecurity, + int discoverTimeout + ) + { + var url = GetDiscoveryUrl(discoveryUrl); + var endpointConfiguration = EndpointConfiguration.Create(); + endpointConfiguration.OperationTimeout = discoverTimeout; + + // Connect to the server's discovery endpoint and find the available configuration. + using (var client = DiscoveryClient.Create(url, endpointConfiguration)) + { + var endpoints = client.GetEndpoints(null); + return SelectEndpoint(url, endpoints, useSecurity); + } + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + public static EndpointDescription SelectEndpoint( + ApplicationConfiguration application, + ITransportWaitingConnection connection, + bool useSecurity + ) + { + return SelectEndpoint(application, connection, useSecurity, DefaultDiscoverTimeout); + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + public static EndpointDescription SelectEndpoint( + ApplicationConfiguration application, + ITransportWaitingConnection connection, + bool useSecurity, + int discoverTimeout + ) + { + var endpointConfiguration = EndpointConfiguration.Create(); + endpointConfiguration.OperationTimeout = discoverTimeout > 0 ? discoverTimeout : DefaultDiscoverTimeout; + + using (DiscoveryClient client = DiscoveryClient.Create(application, connection, endpointConfiguration)) + { + var url = new Uri(client.Endpoint.EndpointUrl); + var endpoints = client.GetEndpoints(null); + return SelectEndpoint(url, endpoints, useSecurity); + } + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + /// The application configuration. + /// The discovery URL. + /// if set to true select an endpoint that uses security. + /// The best available endpoint. + public static EndpointDescription SelectEndpoint( + ApplicationConfiguration application, + string discoveryUrl, + bool useSecurity) + { + return SelectEndpoint(application, discoveryUrl, useSecurity, DefaultDiscoverTimeout); + } + + /// + /// Finds the endpoint that best matches the current settings. + /// + /// The application configuration. + /// The discovery URL. + /// if set to true select an endpoint that uses security. + /// The timeout for the discover operation. + /// The best available endpoint. + public static EndpointDescription SelectEndpoint( + ApplicationConfiguration application, + string discoveryUrl, + bool useSecurity, + int discoverTimeout + ) + { + var uri = GetDiscoveryUrl(discoveryUrl); + var endpointConfiguration = EndpointConfiguration.Create(); + endpointConfiguration.OperationTimeout = discoverTimeout; + + using (var client = DiscoveryClient.Create(application, uri, endpointConfiguration)) + { + // Connect to the server's discovery endpoint and find the available configuration. + Uri url = new Uri(client.Endpoint.EndpointUrl); + var endpoints = client.GetEndpoints(null); + var selectedEndpoint = SelectEndpoint(url, endpoints, useSecurity); + + Uri endpointUrl = Utils.ParseUri(selectedEndpoint.EndpointUrl); + if (endpointUrl != null && endpointUrl.Scheme == uri.Scheme) + { + UriBuilder builder = new UriBuilder(endpointUrl); + builder.Host = uri.DnsSafeHost; + builder.Port = uri.Port; + selectedEndpoint.EndpointUrl = builder.ToString(); + } + + return selectedEndpoint; + } + } + + /// + /// Select the best supported endpoint from an + /// EndpointDescriptionCollection, with or without security. + /// + /// + /// + /// + public static EndpointDescription SelectEndpoint( + Uri url, + EndpointDescriptionCollection endpoints, + bool useSecurity) + { + EndpointDescription selectedEndpoint = null; + + // select the best endpoint to use based on the selected URL and the UseSecurity checkbox. + for (int ii = 0; ii < endpoints.Count; ii++) + { + EndpointDescription endpoint = endpoints[ii]; + + // check for a match on the URL scheme. + if (endpoint.EndpointUrl.StartsWith(url.Scheme)) + { + // check if security was requested. + if (useSecurity) + { + if (endpoint.SecurityMode == MessageSecurityMode.None) + { + continue; + } + + // skip unsupported security policies + if (SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri) == null) + { + continue; + } + } + else + { + if (endpoint.SecurityMode != MessageSecurityMode.None) + { + continue; + } + } + + // pick the first available endpoint by default. + if (selectedEndpoint == null) + { + selectedEndpoint = endpoint; + } + + // The security level is a relative measure assigned by the server to the + // endpoints that it returns. Clients should always pick the highest level + // unless they have a reason not too. + if (endpoint.SecurityLevel > selectedEndpoint.SecurityLevel) + { + selectedEndpoint = endpoint; + } + } + } + + // pick the first available endpoint by default. + if (selectedEndpoint == null && endpoints.Count > 0) + { + selectedEndpoint = endpoints[0]; + } + + // return the selected endpoint. + return selectedEndpoint; + } + #endregion + + #region Private Methods + private static Uri GetDiscoveryUrl(string discoveryUrl) + { + // needs to add the '/discovery' back onto non-UA TCP URLs. + if (discoveryUrl.StartsWith(Utils.UriSchemeHttp)) + { + if (!discoveryUrl.EndsWith("/discovery")) + { + discoveryUrl += "/discovery"; + } + } + + // parse the selected URL. + return new Uri(discoveryUrl); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/DataDictionary.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/DataDictionary.cs new file mode 100644 index 00000000..649d3ba8 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/DataDictionary.cs @@ -0,0 +1,325 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.Schema; +using Opc.Ua.Schema.Binary; +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Threading.Tasks; + +namespace Opc.Ua.Client +{ + /// + /// A class that holds the configuration for a UA service. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix"), DataContract(Namespace = Namespaces.OpcUaXsd)] + public class DataDictionary + { + #region Constructors + /// + /// The default constructor. + /// + public DataDictionary(Session session) + { + Initialize(); + m_session = session; + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_session = null; + DataTypes = new Dictionary(); + m_validator = null; + TypeSystemId = null; + TypeSystemName = null; + DictionaryId = null; + Name = null; + } + #endregion + + #region Public Interface + /// + /// The node id for the dictionary. + /// + public NodeId DictionaryId { get; private set; } + + /// + /// The display name for the dictionary. + /// + public string Name { get; private set; } + + /// + /// The node id for the type system. + /// + public NodeId TypeSystemId { get; private set; } + + /// + /// The display name for the type system. + /// + public string TypeSystemName { get; private set; } + + /// + /// The type dictionary. + /// + public TypeDictionary TypeDictionary { get; private set; } + + /// + /// The data type dictionary. + /// + public Dictionary DataTypes { get; private set; } + + /// + /// Loads the dictionary identified by the node id. + /// + public Task Load(ReferenceDescription dictionary) + { + if (dictionary == null) + { + throw new ArgumentNullException(nameof(dictionary)); + } + NodeId dictionaryId = ExpandedNodeId.ToNodeId(dictionary.NodeId, m_session.NamespaceUris); + return Load(dictionaryId, dictionary.ToString()); + } + + /// + /// Loads the dictionary identified by the node id. + /// + public async Task Load(NodeId dictionaryId, string name) + { + if (dictionaryId == null) + { + throw new ArgumentNullException(nameof(dictionaryId)); + } + + GetTypeSystem(dictionaryId); + + byte[] schema = ReadDictionary(dictionaryId); + + if (schema == null || schema.Length == 0) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Cannot parse empty data dictionary."); + } + + // Interoperability: some server may return a null terminated dictionary string, adjust length + int zeroTerminator = Array.IndexOf(schema, (byte)0); + if (zeroTerminator >= 0) + { + Array.Resize(ref schema, zeroTerminator); + } + + await Validate(schema); + + ReadDataTypes(dictionaryId); + + DictionaryId = dictionaryId; + Name = name; + } + + /// + /// Returns true if the dictionary contains the data type description; + /// + public bool Contains(NodeId descriptionId) + { + return DataTypes.ContainsKey(descriptionId); + } + + /// + /// Returns the schema for the specified type (returns the entire dictionary if null). + /// + public string GetSchema(NodeId descriptionId) + { + ReferenceDescription description = null; + + if (descriptionId != null) + { + if (!DataTypes.TryGetValue(descriptionId, out description)) + { + return null; + } + + return m_validator.GetSchema(description.BrowseName.Name); + } + + return m_validator.GetSchema(null); + } + #endregion + + #region Private Members + /// + /// Retrieves the type system for the dictionary. + /// + private void GetTypeSystem(NodeId dictionaryId) + { + Browser browser = new Browser(m_session); + + browser.BrowseDirection = BrowseDirection.Inverse; + browser.ReferenceTypeId = ReferenceTypeIds.HasComponent; + browser.IncludeSubtypes = false; + browser.NodeClassMask = 0; + + ReferenceDescriptionCollection references = browser.Browse(dictionaryId); + + if (references.Count > 0) + { + TypeSystemId = ExpandedNodeId.ToNodeId(references[0].NodeId, m_session.NamespaceUris); + TypeSystemName = references[0].ToString(); + } + } + + /// + /// Retrieves the data types in the dictionary. + /// + /// + /// In order to allow for fast Linq matching of dictionary + /// QNames with the data type nodes, the BrowseName of + /// the DataType node is replaced with Value string. + /// + private void ReadDataTypes(NodeId dictionaryId) + { + Browser browser = new Browser(m_session); + + browser.BrowseDirection = BrowseDirection.Forward; + browser.ReferenceTypeId = ReferenceTypeIds.HasComponent; + browser.IncludeSubtypes = false; + browser.NodeClassMask = 0; + + ReferenceDescriptionCollection references = browser.Browse(dictionaryId); + + foreach (ReferenceDescription reference in references) + { + NodeId datatypeId = ExpandedNodeId.ToNodeId(reference.NodeId, m_session.NamespaceUris); + + if (datatypeId != null) + { + // read the value to get the name that is used in the dictionary + var value = m_session.ReadValue(datatypeId); + var dictName = (String)value.Value; + // replace the BrowseName with type name used in the dictionary + reference.BrowseName = new QualifiedName(dictName, datatypeId.NamespaceIndex); + DataTypes[datatypeId] = reference; + } + } + } + + /// + /// Reads the contents of a data dictionary. + /// + private byte[] ReadDictionary(NodeId dictionaryId) + { + // create item to read. + ReadValueId itemToRead = new ReadValueId(); + + itemToRead.NodeId = dictionaryId; + itemToRead.AttributeId = Attributes.Value; + itemToRead.IndexRange = null; + itemToRead.DataEncoding = null; + + ReadValueIdCollection itemsToRead = new ReadValueIdCollection(); + itemsToRead.Add(itemToRead); + + // read value. + DataValueCollection values; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + itemsToRead, + out values, + out diagnosticInfos); + + ClientBase.ValidateResponse(values, itemsToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, itemsToRead); + + // check for error. + if (StatusCode.IsBad(values[0].StatusCode)) + { + ServiceResult result = ClientBase.GetResult(values[0].StatusCode, 0, diagnosticInfos, responseHeader); + throw new ServiceResultException(result); + } + + // return as a byte array. + return values[0].Value as byte[]; + } + + /// + /// Validates the type dictionary. + /// + /// + private async Task Validate(byte[] dictionary) + { + MemoryStream istrm = new MemoryStream(dictionary); + + if (TypeSystemId == Objects.XmlSchema_TypeSystem) + { + Schema.Xml.XmlSchemaValidator validator = new Schema.Xml.XmlSchemaValidator(); + + try + { + validator.Validate(istrm); + } + catch (Exception e) + { + Utils.Trace(e, "Could not validate schema."); + } + + m_validator = validator; + } + + if (TypeSystemId == Objects.OPCBinarySchema_TypeSystem) + { + Schema.Binary.BinarySchemaValidator validator = new Schema.Binary.BinarySchemaValidator(); + + try + { + await validator.Validate(istrm); + } + catch (Exception e) + { + Utils.Trace(e, $"Could not validate schema. {e.Message}"); + } + + m_validator = validator; + TypeDictionary = validator.Dictionary; + } + } + #endregion + + #region Private Members + private Session m_session; + private SchemaValidator m_validator; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/Documentation/Opc.Ua.Client.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Documentation/Opc.Ua.Client.cs new file mode 100644 index 00000000..6fa38150 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Documentation/Opc.Ua.Client.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Client +{ + /// + /// The Opc.Ua.Client namespace defines classes which can be used to implement a UA client. + /// These classes manage client side state information, provide higher level abstractions for UA + /// tasks such as managing sessions/subscriptions and saving/restoring connection information for + /// later use. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/MonitoredItem.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/MonitoredItem.cs new file mode 100644 index 00000000..4f91644b --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/MonitoredItem.cs @@ -0,0 +1,1309 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 System.Reflection; + +namespace Opc.Ua.Client +{ + /// + /// A monitored item. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + [KnownType(typeof(DataChangeFilter))] + [KnownType(typeof(EventFilter))] + [KnownType(typeof(AggregateFilter))] + public class MonitoredItem + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public MonitoredItem() + { + Initialize(); + } + + /// + /// Initializes a new instance of the class. + /// + /// The client handle. The caller must ensure it uniquely identifies the monitored item. + public MonitoredItem(uint clientHandle) + { + Initialize(); + m_clientHandle = clientHandle; + } + + /// + /// Initializes a new instance of the class. + /// + /// The template used to specify the monitoring parameters. + public MonitoredItem(MonitoredItem template) : this(template, false) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The template used to specify the monitoring parameters. + /// if set to true the event handlers are copied. + public MonitoredItem(MonitoredItem template, bool copyEventHandlers) : this(template, copyEventHandlers, false) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The template used to specify the monitoring parameters. + /// if set to true the event handlers are copied. + /// if set to true the clientHandle is of the template copied. + public MonitoredItem(MonitoredItem template, bool copyEventHandlers, bool copyClientHandle) + { + Initialize(); + + if (template != null) + { + string displayName = template.DisplayName; + + if (displayName != null) + { + // remove any existing numeric suffix. + int index = displayName.LastIndexOf(' '); + + if (index != -1) + { + try + { + displayName = displayName.Substring(0, index); + } + catch + { + // not a numeric suffix. + } + } + } + + m_handle = template.m_handle; + m_displayName = Utils.Format("{0} {1}", displayName, m_clientHandle); + m_startNodeId = template.m_startNodeId; + m_relativePath = template.m_relativePath; + m_attributeId = template.m_attributeId; + m_indexRange = template.m_indexRange; + m_encoding = template.m_encoding; + m_monitoringMode = template.m_monitoringMode; + m_samplingInterval = template.m_samplingInterval; + m_filter = (MonitoringFilter)Utils.Clone(template.m_filter); + m_queueSize = template.m_queueSize; + m_discardOldest = template.m_discardOldest; + m_attributesModified = true; + + if (copyEventHandlers) + { + m_Notification = template.m_Notification; + } + + if (copyClientHandle) + { + m_clientHandle = template.m_clientHandle; + } + + // this ensures the state is consistent with the node class. + NodeClass = template.m_nodeClass; + } + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + // object initializers are not called during deserialization. + m_cache = new object(); + + Initialize(); + } + + /// + /// Sets the private members to default values. + /// + private void Initialize() + { + m_startNodeId = null; + m_relativePath = null; + m_clientHandle = 0; + m_attributeId = Attributes.Value; + m_indexRange = null; + m_encoding = null; + m_monitoringMode = MonitoringMode.Reporting; + m_samplingInterval = -1; + m_filter = null; + m_queueSize = 0; + m_discardOldest = true; + m_attributesModified = true; + m_status = new MonitoredItemStatus(); + + // this ensures the state is consistent with the node class. + NodeClass = NodeClass.Variable; + + // assign a unique handle. + m_clientHandle = Utils.IncrementIdentifier(ref s_GlobalClientHandle); + } + #endregion + + #region Persistent Properties + /// + /// A display name for the monitored item. + /// + [DataMember(Order = 1)] + public string DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + + /// + /// The start node for the browse path that identifies the node to monitor. + /// + [DataMember(Order = 2)] + public NodeId StartNodeId + { + get { return m_startNodeId; } + set { m_startNodeId = value; } + } + + /// + /// The relative path from the browse path to the node to monitor. + /// + /// + /// A null or empty string specifies that the start node id should be monitored. + /// + [DataMember(Order = 3)] + public string RelativePath + { + get { return m_relativePath; } + + set + { + // clear resolved path if relative path has changed. + if (m_relativePath != value) + { + m_resolvedNodeId = null; + } + + m_relativePath = value; + } + } + + /// + /// The node class of the node being monitored (affects the type of filter available). + /// + [DataMember(Order = 4)] + public NodeClass NodeClass + { + get { return m_nodeClass; } + + set + { + if (m_nodeClass != value) + { + if ((value & (NodeClass.Object | NodeClass.View)) != 0) + { + // ensure a valid event filter. + if (!(m_filter is EventFilter)) + { + UseDefaultEventFilter(); + } + + // set the queue size to the default for events. + if (QueueSize <= 1) + { + QueueSize = Int32.MaxValue; + } + + m_eventCache = new MonitoredItemEventCache(100); + m_attributeId = Attributes.EventNotifier; + } + else + { + // clear the filter if it is only valid for events. + if (m_filter is EventFilter) + { + m_filter = null; + } + + // set the queue size to the default for data changes. + if (QueueSize == Int32.MaxValue) + { + QueueSize = 1; + } + + m_dataCache = new MonitoredItemDataCache(1); + } + } + + m_nodeClass = value; + } + } + + /// + /// The attribute to monitor. + /// + [DataMember(Order = 5)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + /// The range of array indexes to monitor. + /// + [DataMember(Order = 6)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + + /// + /// The encoding to use when returning notifications. + /// + [DataMember(Order = 7)] + public QualifiedName Encoding + { + get { return m_encoding; } + set { m_encoding = value; } + } + + /// + /// The monitoring mode. + /// + [DataMember(Order = 8)] + public MonitoringMode MonitoringMode + { + get { return m_monitoringMode; } + set { m_monitoringMode = value; } + } + + /// + /// The sampling interval. + /// + [DataMember(Order = 9)] + public int SamplingInterval + { + get { return m_samplingInterval; } + + set + { + if (m_samplingInterval != value) + { + m_attributesModified = true; + } + + m_samplingInterval = value; + } + } + + /// + /// The filter to use to select values to return. + /// + [DataMember(Order = 10)] + public MonitoringFilter Filter + { + get { return m_filter; } + + set + { + // validate filter against node class. + ValidateFilter(m_nodeClass, value); + + m_attributesModified = true; + m_filter = value; + } + } + + /// + /// The length of the queue used to buffer values. + /// + [DataMember(Order = 11)] + public uint QueueSize + { + get { return m_queueSize; } + + set + { + if (m_queueSize != value) + { + m_attributesModified = true; + } + + m_queueSize = value; + } + } + + /// + /// Whether to discard the oldest entries in the queue when it is full. + /// + [DataMember(Order = 12)] + public bool DiscardOldest + { + get { return m_discardOldest; } + + set + { + if (m_discardOldest != value) + { + m_attributesModified = true; + } + + m_discardOldest = value; + } + } + #endregion + + #region Dynamic Properties + /// + /// The subscription that owns the monitored item. + /// + public Subscription Subscription + { + get { return m_subscription; } + internal set { m_subscription = value; } + } + + /// + /// A local handle assigned to the monitored item. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the item has been created on the server. + /// + public bool Created + { + get { return m_status.Created; } + } + + /// + /// The identifier assigned by the client. + /// + public uint ClientHandle + { + get { return m_clientHandle; } + } + + /// + /// The node id to monitor after applying any relative path. + /// + public NodeId ResolvedNodeId + { + get + { + // just return the start id if relative path is empty. + if (String.IsNullOrEmpty(m_relativePath)) + { + return m_startNodeId; + } + + return m_resolvedNodeId; + } + + internal set { m_resolvedNodeId = value; } + } + + /// + /// Whether the monitoring attributes have been modified since the item was created. + /// + public bool AttributesModified + { + get { return m_attributesModified; } + } + + /// + /// The status associated with the monitored item. + /// + public MonitoredItemStatus Status + { + get { return m_status; } + } + #endregion + + #region Cache Related Functions + /// + /// Returns the queue size used by the cache. + /// + public int CacheQueueSize + { + get + { + lock (m_cache) + { + if (m_dataCache != null) + { + return m_dataCache.QueueSize; + } + + if (m_eventCache != null) + { + return m_eventCache.QueueSize; + } + + return 0; + } + } + + set + { + lock (m_cache) + { + if (m_dataCache != null) + { + m_dataCache.SetQueueSize(value); + } + + if (m_eventCache != null) + { + m_eventCache.SetQueueSize(value); + } + } + } + } + + /// + /// The last value or event received from the server. + /// + public IEncodeable LastValue + { + get + { + lock (m_cache) + { + return m_lastNotification; + } + } + } + + /// + /// Read all values in the cache queue. + /// + public IList DequeueValues() + { + lock (m_cache) + { + if (m_dataCache != null) + { + return m_dataCache.Publish(); + } + + return new List(); + } + } + + /// + /// Read all events in the cache queue. + /// + public IList DequeueEvents() + { + lock (m_cache) + { + if (m_eventCache != null) + { + return m_eventCache.Publish(); + } + + return new List(); + } + } + + /// + /// The last message containing a notification for the item. + /// + public NotificationMessage LastMessage + { + get + { + lock (m_cache) + { + if (m_dataCache != null) + { + return ((MonitoredItemNotification)m_lastNotification).Message; + } + + if (m_eventCache != null) + { + return ((EventFieldList)m_lastNotification).Message; + } + + return null; + } + } + } + + /// + /// Raised when a new notification arrives. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event MonitoredItemNotificationEventHandler Notification + { + add + { + lock (m_cache) + { + m_Notification += value; + } + } + + remove + { + lock (m_cache) + { + m_Notification -= value; + } + } + } + + /// + /// Saves a data change or event in the cache. + /// + public void SaveValueInCache(IEncodeable newValue) + { + lock (m_cache) + { + m_lastNotification = newValue; + + if (m_dataCache != null) + { + MonitoredItemNotification datachange = newValue as MonitoredItemNotification; + + if (datachange != null) + { + // validate the ServerTimestamp of the notification. + if (datachange.Value != null && datachange.Value.ServerTimestamp > DateTime.UtcNow) + { + Utils.Trace("Received ServerTimestamp {0} is in the future for MonitoredItemId {1}", datachange.Value.ServerTimestamp.ToLocalTime(), ClientHandle); + } + + // validate SourceTimestamp of the notification. + if (datachange.Value != null && datachange.Value.SourceTimestamp > DateTime.UtcNow) + { + Utils.Trace("Received SourceTimestamp {0} is in the future for MonitoredItemId {1}", datachange.Value.SourceTimestamp.ToLocalTime(), ClientHandle); + } + + if (datachange.Value != null && datachange.Value.StatusCode.Overflow) + { + Utils.Trace("Overflow bit set for data change with ServerTimestamp {0} and value {1} for MonitoredItemId {2}", datachange.Value.ServerTimestamp.ToLocalTime(), datachange.Value.Value, ClientHandle); + } + + m_dataCache.OnNotification(datachange); + } + } + + if (m_eventCache != null) + { + EventFieldList eventchange = newValue as EventFieldList; + + if (m_eventCache != null) + { + m_eventCache.OnNotification(eventchange); + } + } + + if (m_Notification != null) + { + m_Notification(this, new MonitoredItemNotificationEventArgs(newValue)); + } + } + } + #endregion + + #region ICloneable Members + /// + /// Creates a deep copy of the object. + /// + public new object MemberwiseClone() + { + return new MonitoredItem(this); + } + #endregion + + #region Public Methods + /// + /// Sets the error status for the monitored item. + /// + public void SetError(ServiceResult error) + { + m_status.SetError(error); + } + + /// + /// Updates the object with the results of a translate browse path request. + /// + public void SetResolvePathResult( + BrowsePathResult result, + int index, + DiagnosticInfoCollection diagnosticInfos, + ResponseHeader responseHeader) + { + ServiceResult error = null; + + if (StatusCode.IsBad(result.StatusCode)) + { + error = ClientBase.GetResult(result.StatusCode, index, diagnosticInfos, responseHeader); + } + else + { + ResolvedNodeId = NodeId.Null; + + // update the node id. + if (result.Targets.Count > 0) + { + ResolvedNodeId = ExpandedNodeId.ToNodeId(result.Targets[0].TargetId, m_subscription.Session.NamespaceUris); + } + } + + m_status.SetResolvePathResult(result, error); + } + + /// + /// Updates the object with the results of a create monitored item request. + /// + public void SetCreateResult( + MonitoredItemCreateRequest request, + MonitoredItemCreateResult result, + int index, + DiagnosticInfoCollection diagnosticInfos, + ResponseHeader responseHeader) + { + ServiceResult error = null; + + if (StatusCode.IsBad(result.StatusCode)) + { + error = ClientBase.GetResult(result.StatusCode, index, diagnosticInfos, responseHeader); + } + + m_status.SetCreateResult(request, result, error); + m_attributesModified = false; + } + + /// + /// Updates the object with the results of a modify monitored item request. + /// + public void SetModifyResult( + MonitoredItemModifyRequest request, + MonitoredItemModifyResult result, + int index, + DiagnosticInfoCollection diagnosticInfos, + ResponseHeader responseHeader) + { + ServiceResult error = null; + + if (StatusCode.IsBad(result.StatusCode)) + { + error = ClientBase.GetResult(result.StatusCode, index, diagnosticInfos, responseHeader); + } + + m_status.SetModifyResult(request, result, error); + m_attributesModified = false; + } + + /// + /// Updates the object with the results of a modify monitored item request. + /// + public void SetDeleteResult( + StatusCode result, + int index, + DiagnosticInfoCollection diagnosticInfos, + ResponseHeader responseHeader) + { + ServiceResult error = null; + + if (StatusCode.IsBad(result)) + { + error = ClientBase.GetResult(result, index, diagnosticInfos, responseHeader); + } + + m_status.SetDeleteResult(error); + } + + /// + /// Returns the field name the specified SelectClause in the EventFilter. + /// + public string GetFieldName(int index) + { + EventFilter filter = m_filter as EventFilter; + + if (filter == null) + { + return null; + } + + if (index < 0 || index >= filter.SelectClauses.Count) + { + return null; + } + + return Utils.Format("{0}", SimpleAttributeOperand.Format(filter.SelectClauses[index].BrowsePath)); + } + + /// + /// Returns value of the field name containing the event type. + /// + public object GetFieldValue( + EventFieldList eventFields, + NodeId eventTypeId, + string browsePath, + uint attributeId) + { + QualifiedNameCollection browseNames = SimpleAttributeOperand.Parse(browsePath); + return GetFieldValue(eventFields, eventTypeId, browseNames, attributeId); + } + + /// + /// Returns value of the field name containing the event type. + /// + public object GetFieldValue( + EventFieldList eventFields, + NodeId eventTypeId, + QualifiedName browseName) + { + QualifiedNameCollection browsePath = new QualifiedNameCollection(); + browsePath.Add(browseName); + return GetFieldValue(eventFields, eventTypeId, browsePath, Attributes.Value); + } + + /// + /// Returns value of the field name containing the event type. + /// + public object GetFieldValue( + EventFieldList eventFields, + NodeId eventTypeId, + IList browsePath, + uint attributeId) + { + if (eventFields == null) + { + return null; + } + + EventFilter filter = m_filter as EventFilter; + + if (filter == null) + { + return null; + } + + for (int ii = 0; ii < filter.SelectClauses.Count; ii++) + { + if (ii >= eventFields.EventFields.Count) + { + return null; + } + + // check for match. + SimpleAttributeOperand clause = filter.SelectClauses[ii]; + + // attribute id + if (clause.AttributeId != attributeId) + { + continue; + } + + // match null browse path. + if (browsePath == null || browsePath.Count == 0) + { + if (clause.BrowsePath != null && clause.BrowsePath.Count > 0) + { + continue; + } + + // ignore event type id when matching null browse paths. + return eventFields.EventFields[ii].Value; + } + + // match browse path. + + // event type id. + if (clause.TypeDefinitionId != eventTypeId) + { + continue; + } + + // match element count. + if (clause.BrowsePath.Count != browsePath.Count) + { + continue; + } + + // check each element. + bool match = true; + + for (int jj = 0; jj < clause.BrowsePath.Count; jj++) + { + if (clause.BrowsePath[jj] != browsePath[jj]) + { + match = false; + break; + } + } + + // check of no match. + if (!match) + { + continue; + } + + // return value. + return eventFields.EventFields[ii].Value; + } + + // no event type in event field list. + return null; + } + + /// + /// Returns value of the field name containing the event type. + /// + public INode GetEventType(EventFieldList eventFields) + { + // get event type. + NodeId eventTypeId = GetFieldValue(eventFields, ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.EventType) as NodeId; + + if (eventTypeId != null && m_subscription != null && m_subscription.Session != null) + { + return m_subscription.Session.NodeCache.Find(eventTypeId); + } + + // no event type in event field list. + return null; + } + + /// + /// Returns value of the field name containing the event type. + /// + public DateTime GetEventTime(EventFieldList eventFields) + { + // get event time. + DateTime? eventTime = GetFieldValue(eventFields, ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.Time) as DateTime?; + + if (eventTime != null) + { + return eventTime.Value; + } + + // no event time in event field list. + return DateTime.MinValue; + } + + /// + /// The service result for a data change notification. + /// + public static ServiceResult GetServiceResult(IEncodeable notification) + { + MonitoredItemNotification datachange = notification as MonitoredItemNotification; + + if (datachange == null) + { + return null; + } + + NotificationMessage message = datachange.Message; + + if (message == null) + { + return null; + } + + return new ServiceResult(datachange.Value.StatusCode, datachange.DiagnosticInfo, message.StringTable); + } + + /// + /// The service result for a field in an notification (the field must contain a Status object). + /// + public static ServiceResult GetServiceResult(IEncodeable notification, int index) + { + EventFieldList eventFields = notification as EventFieldList; + + if (eventFields == null) + { + return null; + } + + NotificationMessage message = eventFields.Message; + + if (message == null) + { + return null; + } + + if (index < 0 || index >= eventFields.EventFields.Count) + { + return null; + } + + StatusResult status = ExtensionObject.ToEncodeable(eventFields.EventFields[index].Value as ExtensionObject) as StatusResult; + + if (status == null) + { + return null; + } + + return new ServiceResult(status.StatusCode, status.DiagnosticInfo, message.StringTable); + } + #endregion + + #region Private Methods + /// + /// Throws an exception if the flter cannot be used with the node class. + /// + private void ValidateFilter(NodeClass nodeClass, MonitoringFilter filter) + { + if (filter == null) + { + return; + } + + switch (nodeClass) + { + case NodeClass.Variable: + case NodeClass.VariableType: + { + if (!typeof(DataChangeFilter).IsInstanceOfType(filter)) + { + m_nodeClass = NodeClass.Variable; + } + + break; + } + + case NodeClass.Object: + case NodeClass.View: + { + if (!typeof(EventFilter).IsInstanceOfType(filter)) + { + m_nodeClass = NodeClass.Object; + } + + break; + } + + default: + { + throw ServiceResultException.Create(StatusCodes.BadFilterNotAllowed, "Filters may not be specified for nodes of class '{0}'.", nodeClass); + } + } + } + + /// + /// Sets the default event filter. + /// + private void UseDefaultEventFilter() + { + EventFilter filter = filter = new EventFilter(); + + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.EventId); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.EventType); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.SourceNode); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.SourceName); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.Time); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.ReceiveTime); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.LocalTime); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.Message); + filter.AddSelectClause(ObjectTypes.BaseEventType, Opc.Ua.BrowseNames.Severity); + + m_filter = filter; + } + #endregion + + #region Private Fields + private Subscription m_subscription; + private object m_handle; + private string m_displayName; + private NodeId m_startNodeId; + private string m_relativePath; + private NodeId m_resolvedNodeId; + private NodeClass m_nodeClass; + private uint m_attributeId; + private string m_indexRange; + private QualifiedName m_encoding; + private MonitoringMode m_monitoringMode; + private int m_samplingInterval; + private MonitoringFilter m_filter; + private uint m_queueSize; + private bool m_discardOldest; + private uint m_clientHandle; + private MonitoredItemStatus m_status; + private bool m_attributesModified; + private static long s_GlobalClientHandle; + + private object m_cache = new object(); + private MonitoredItemDataCache m_dataCache; + private MonitoredItemEventCache m_eventCache; + private IEncodeable m_lastNotification; + private event MonitoredItemNotificationEventHandler m_Notification; + #endregion + } + + #region MonitoredItemEventArgs Class + /// + /// The event arguments provided when a new notification message arrives. + /// + public class MonitoredItemNotificationEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal MonitoredItemNotificationEventArgs(IEncodeable notificationValue) + { + m_notificationValue = notificationValue; + } + #endregion + + #region Public Properties + /// + /// The new notification. + /// + public IEncodeable NotificationValue + { + get { return m_notificationValue; } + } + #endregion + + #region Private Fields + private IEncodeable m_notificationValue; + #endregion + } + + /// + /// The delegate used to receive monitored item value notifications. + /// + public delegate void MonitoredItemNotificationEventHandler(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e); + #endregion + + /// + /// An item in the cache + /// + public class MonitoredItemDataCache + { + #region Constructors + /// + /// Constructs a cache for a monitored item. + /// + public MonitoredItemDataCache(int queueSize) + { + m_queueSize = queueSize; + m_values = new Queue(); + } + #endregion + + #region Public Members + /// + /// The size of the queue to maintain. + /// + public int QueueSize + { + get { return m_queueSize; } + } + + /// + /// The last value received from the server. + /// + public DataValue LastValue + { + get { return m_lastValue; } + } + + /// + /// Returns all values in the queue. + /// + public IList Publish() + { + DataValue[] values = new DataValue[m_values.Count]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = m_values.Dequeue(); + } + + return values; + } + + /// + /// Saves a notification in the cache. + /// + public void OnNotification(MonitoredItemNotification notification) + { + m_values.Enqueue(notification.Value); + m_lastValue = notification.Value; + + Utils.Trace( + "NotificationReceived: ClientHandle={0}, Value={1}", + notification.ClientHandle, + m_lastValue.Value); + + while (m_values.Count > m_queueSize) + { + m_values.Dequeue(); + } + } + + /// + /// Changes the queue size. + /// + public void SetQueueSize(int queueSize) + { + if (queueSize == m_queueSize) + { + return; + } + + if (queueSize < 1) + { + queueSize = 1; + } + + m_queueSize = queueSize; + + while (m_values.Count > m_queueSize) + { + m_values.Dequeue(); + } + } + #endregion + + #region Private Fields + private int m_queueSize; + private DataValue m_lastValue; + private Queue m_values; + #endregion + } + + /// + /// Saves the events received from the srever. + /// + public class MonitoredItemEventCache + { + #region Constructors + /// + /// Constructs a cache for a monitored item. + /// + public MonitoredItemEventCache(int queueSize) + { + m_queueSize = queueSize; + m_events = new Queue(); + } + #endregion + + #region Public Members + /// + /// The size of the queue to maintain. + /// + public int QueueSize + { + get { return m_queueSize; } + } + + /// + /// The last event received. + /// + public EventFieldList LastEvent + { + get { return m_lastEvent; } + } + + /// + /// Returns all events in the queue. + /// + public IList Publish() + { + EventFieldList[] events = new EventFieldList[m_events.Count]; + + for (int ii = 0; ii < events.Length; ii++) + { + events[ii] = m_events.Dequeue(); + } + + return events; + } + + /// + /// Saves a notification in the cache. + /// + public void OnNotification(EventFieldList notification) + { + m_events.Enqueue(notification); + m_lastEvent = notification; + + while (m_events.Count > m_queueSize) + { + m_events.Dequeue(); + } + } + + /// + /// Changes the queue size. + /// + public void SetQueueSize(int queueSize) + { + if (queueSize == m_queueSize) + { + return; + } + + if (queueSize < 1) + { + queueSize = 1; + } + + m_queueSize = queueSize; + + while (m_events.Count > m_queueSize) + { + m_events.Dequeue(); + } + } + #endregion + + #region Private Fields + private int m_queueSize; + private EventFieldList m_lastEvent; + private Queue m_events; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/MonitoredItemStatus.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/MonitoredItemStatus.cs new file mode 100644 index 00000000..1e6e1816 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/MonitoredItemStatus.cs @@ -0,0 +1,293 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client +{ + /// + /// The current status of monitored item. + /// + public class MonitoredItemStatus + { + #region Constructors + /// + /// Creates a empty object. + /// + internal MonitoredItemStatus() + { + Initialize(); + } + + private void Initialize() + { + m_id = 0; + m_nodeId = null; + m_attributeId = Attributes.Value; + m_indexRange = null; + m_encoding = null; + m_monitoringMode = MonitoringMode.Disabled; + m_clientHandle = 0; + m_samplingInterval = 0; + m_filter = null; + m_queueSize = 0; + m_discardOldest = true; + } + #endregion + + #region Public Properties + /// + /// The identifier assigned by the server. + /// + public uint Id + { + get { return m_id; } + } + + /// + /// Whether the item has been created on the server. + /// + public bool Created + { + get { return m_id != 0; } + } + + /// + /// Any error condition associated with the monitored item. + /// + public ServiceResult Error + { + get { return m_error; } + } + + /// + /// The node id being monitored. + /// + public NodeId NodeId + { + get { return m_nodeId; } + } + + /// + /// The attribute being monitored. + /// + public uint AttributeId + { + get { return m_attributeId; } + } + + /// + /// The range of array indexes to being monitored. + /// + public string IndexRange + { + get { return m_indexRange; } + } + + /// + /// The encoding to use when returning notifications. + /// + public QualifiedName DataEncoding + { + get { return m_encoding; } + } + + /// + /// The monitoring mode. + /// + public MonitoringMode MonitoringMode + { + get { return m_monitoringMode; } + } + + /// + /// The identifier assigned by the client. + /// + public uint ClientHandle + { + get { return m_clientHandle; } + } + + /// + /// The sampling interval. + /// + public double SamplingInterval + { + get { return m_samplingInterval; } + } + + /// + /// The filter to use to select values to return. + /// + public MonitoringFilter Filter + { + get { return m_filter; } + } + + /// + /// The length of the queue used to buffer values. + /// + public uint QueueSize + { + get { return m_queueSize; } + } + + /// + /// Whether to discard the oldest entries in the queue when it is full. + /// + public bool DiscardOldest + { + get { return m_discardOldest; } + } + #endregion + + #region Public Methods + /// + /// Updates the monitoring mode. + /// + public void SetMonitoringMode(MonitoringMode monitoringMode) + { + m_monitoringMode = monitoringMode; + } + + /// + /// Updates the object with the results of a translate browse paths request. + /// + internal void SetResolvePathResult( + BrowsePathResult result, + ServiceResult error) + { + m_error = error; + } + + /// + /// Updates the object with the results of a create monitored item request. + /// + internal void SetCreateResult( + MonitoredItemCreateRequest request, + MonitoredItemCreateResult result, + ServiceResult error) + { + if (request == null) throw new ArgumentNullException(nameof(request)); + if (result == null) throw new ArgumentNullException(nameof(result)); + + m_nodeId = request.ItemToMonitor.NodeId; + m_attributeId = request.ItemToMonitor.AttributeId; + m_indexRange = request.ItemToMonitor.IndexRange; + m_encoding = request.ItemToMonitor.DataEncoding; + m_monitoringMode = request.MonitoringMode; + m_clientHandle = request.RequestedParameters.ClientHandle; + m_samplingInterval = request.RequestedParameters.SamplingInterval; + m_queueSize = request.RequestedParameters.QueueSize; + m_discardOldest = request.RequestedParameters.DiscardOldest; + m_filter = null; + m_error = error; + + if (request.RequestedParameters.Filter != null) + { + m_filter = Utils.Clone(request.RequestedParameters.Filter.Body) as MonitoringFilter; + } + + if (ServiceResult.IsGood(error)) + { + m_id = result.MonitoredItemId; + m_samplingInterval = result.RevisedSamplingInterval; + m_queueSize = result.RevisedQueueSize; + } + } + + /// + /// Updates the object with the results of a modify monitored item request. + /// + internal void SetModifyResult( + MonitoredItemModifyRequest request, + MonitoredItemModifyResult result, + ServiceResult error) + { + if (request == null) throw new ArgumentNullException(nameof(request)); + if (result == null) throw new ArgumentNullException(nameof(result)); + + m_error = error; + + if (ServiceResult.IsGood(error)) + { + m_clientHandle = request.RequestedParameters.ClientHandle; + m_samplingInterval = request.RequestedParameters.SamplingInterval; + m_queueSize = request.RequestedParameters.QueueSize; + m_discardOldest = request.RequestedParameters.DiscardOldest; + m_filter = null; + + if (request.RequestedParameters.Filter != null) + { + m_filter = Utils.Clone(request.RequestedParameters.Filter.Body) as MonitoringFilter; + } + + m_samplingInterval = result.RevisedSamplingInterval; + m_queueSize = result.RevisedQueueSize; + } + } + + /// + /// Updates the object with the results of a delete item request. + /// + internal void SetDeleteResult(ServiceResult error) + { + m_id = 0; + m_error = error; + } + + /// + /// Sets the error state for the monitored item status. + /// + internal void SetError(ServiceResult error) + { + m_error = error; + } + #endregion + + #region Private Fields + private uint m_id; + private ServiceResult m_error; + private NodeId m_nodeId; + private uint m_attributeId; + private string m_indexRange; + private QualifiedName m_encoding; + private MonitoringMode m_monitoringMode; + private uint m_clientHandle; + private double m_samplingInterval; + private MonitoringFilter m_filter; + private uint m_queueSize; + private bool m_discardOldest; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/NodeCache.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/NodeCache.cs new file mode 100644 index 00000000..1700f3f7 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/NodeCache.cs @@ -0,0 +1,852 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Client +{ + /// + /// A client side cache of the server's type model. + /// + public class NodeCache : INodeTable, ITypeTable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public NodeCache(Session session) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + + m_session = session; + m_typeTree = new TypeTable(m_session.NamespaceUris); + m_nodes = new NodeTable(m_session.NamespaceUris, m_session.ServerUris, m_typeTree); + } + #endregion + + #region INodeTable Members + /// + public NamespaceTable NamespaceUris + { + get { return m_session.NamespaceUris; } + } + + /// + public StringTable ServerUris + { + get { return m_session.ServerUris; } + } + + /// + public ITypeTable TypeTree + { + get { return this; } + } + + /// + public bool Exists(ExpandedNodeId nodeId) + { + return Find(nodeId) != null; + } + + /// + public INode Find(ExpandedNodeId nodeId) + { + // check for null. + if (NodeId.IsNull(nodeId)) + { + return null; + } + + // check if node alredy exists. + INode node = m_nodes.Find(nodeId); + + if (node != null) + { + // do not return temporary nodes created after a Browse(). + if (node.GetType() != typeof(Node)) + { + return node; + } + } + + // fetch node from server. + try + { + return FetchNode(nodeId); + } + catch (Exception e) + { + Utils.Trace("Could not fetch node from server: NodeId={0}, Reason='{1}'.", nodeId, e.Message); + // m_nodes[nodeId] = null; + return null; + } + } + + /// + public INode Find( + ExpandedNodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + // find the source. + Node source = Find(sourceId) as Node; + + if (source == null) + { + return null; + } + + // find all references. + IList references = source.ReferenceTable.Find(referenceTypeId, isInverse, includeSubtypes, m_typeTree); + + foreach (IReference reference in references) + { + INode target = Find(reference.TargetId); + + if (target == null) + { + continue; + } + + if (target.BrowseName == browseName) + { + return target; + } + } + + // target not found. + return null; + } + + /// + public IList Find( + ExpandedNodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes) + { + List hits = new List(); + + // find the source. + Node source = Find(sourceId) as Node; + + if (source == null) + { + return hits; + } + + // find all references. + IList references = source.ReferenceTable.Find(referenceTypeId, isInverse, includeSubtypes, m_typeTree); + + foreach (IReference reference in references) + { + INode target = Find(reference.TargetId); + + if (target == null) + { + continue; + } + + hits.Add(target); + } + + return hits; + } + #endregion + + #region ITypeTable Methods + /// + /// Determines whether a node id is a known type id. + /// + /// The type extended identifier. + /// + /// true if the specified type id is known; otherwise, false. + /// + public bool IsKnown(ExpandedNodeId typeId) + { + INode type = Find(typeId); + + if (type == null) + { + return false; + } + + return m_typeTree.IsKnown(typeId); + } + + /// + /// Determines whether a node id is a known type id. + /// + /// The type identifier. + /// + /// true if the specified type id is known; otherwise, false. + /// + public bool IsKnown(NodeId typeId) + { + INode type = Find(typeId); + + if (type == null) + { + return false; + } + + return m_typeTree.IsKnown(typeId); + } + + /// + /// Returns the immediate supertype for the type. + /// + /// The extended type identifier. + /// + /// A type identifier of the + /// + public NodeId FindSuperType(ExpandedNodeId typeId) + { + INode type = Find(typeId); + + if (type == null) + { + return null; + } + + return m_typeTree.FindSuperType(typeId); + } + + /// + /// Returns the immediate supertype for the type. + /// + /// The type identifier. + /// + /// The immediate supertype idnetyfier for + /// + public NodeId FindSuperType(NodeId typeId) + { + INode type = Find(typeId); + + if (type == null) + { + return null; + } + + return m_typeTree.FindSuperType(typeId); + } + + /// + /// Returns the immediate subtypes for the type. + /// + /// The extended type identifier. + /// + /// List of type identifiers for + /// + public IList FindSubTypes(ExpandedNodeId typeId) + { + ILocalNode type = Find(typeId) as ILocalNode; + + if (type == null) + { + return new List(); + } + + List subtypes = new List(); + + foreach (IReference reference in type.References.Find(ReferenceTypeIds.HasSubtype, false, true, m_typeTree)) + { + if (!reference.TargetId.IsAbsolute) + { + subtypes.Add((NodeId)reference.TargetId); + } + } + + return subtypes; + } + + /// + /// Determines whether a type is a subtype of another type. + /// + /// The subtype identifier. + /// The supertype identifier. + /// + /// true if is supertype of ; otherwise, false. + /// + public bool IsTypeOf(ExpandedNodeId subTypeId, ExpandedNodeId superTypeId) + { + if (subTypeId == superTypeId) + { + return true; + } + + ILocalNode subtype = Find(subTypeId) as ILocalNode; + + if (subtype == null) + { + return false; + } + + ILocalNode supertype = subtype; + + while (supertype != null) + { + ExpandedNodeId currentId = supertype.References.FindTarget(ReferenceTypeIds.HasSubtype, true, true, m_typeTree, 0); + + if (currentId == superTypeId) + { + return true; + } + + supertype = Find(currentId) as ILocalNode; + } + + return false; + } + + /// + /// Determines whether a type is a subtype of another type. + /// + /// The subtype identifier. + /// The supertype identyfier. + /// + /// true if is supertype of ; otherwise, false. + /// + public bool IsTypeOf(NodeId subTypeId, NodeId superTypeId) + { + if (subTypeId == superTypeId) + { + return true; + } + + ILocalNode subtype = Find(subTypeId) as ILocalNode; + + if (subtype == null) + { + return false; + } + + ILocalNode supertype = subtype; + + while (supertype != null) + { + ExpandedNodeId currentId = supertype.References.FindTarget(ReferenceTypeIds.HasSubtype, true, true, m_typeTree, 0); + + if (currentId == superTypeId) + { + return true; + } + + supertype = Find(currentId) as ILocalNode; + } + + return false; + } + + /// + /// Returns the qualified name for the reference type id. + /// + /// The reference type + /// + /// A name qualified with a namespace for the reference . + /// + public QualifiedName FindReferenceTypeName(NodeId referenceTypeId) + { + return m_typeTree.FindReferenceTypeName(referenceTypeId); + } + + /// + /// Returns the node identifier for the reference type with the specified browse name. + /// + /// Browse name of the reference. + /// + /// The identifier for the + /// + public NodeId FindReferenceType(QualifiedName browseName) + { + return m_typeTree.FindReferenceType(browseName); + } + + /// + /// Checks if the identifier represents a that provides encodings + /// for the . + /// + /// The id the encoding node . + /// The id of the DataType node. + /// + /// true if is encoding of the ; otherwise, false. + /// + public bool IsEncodingOf(ExpandedNodeId encodingId, ExpandedNodeId datatypeId) + { + ILocalNode encoding = Find(encodingId) as ILocalNode; + + if (encoding == null) + { + return false; + } + + foreach (IReference reference in encoding.References.Find(ReferenceTypeIds.HasEncoding, true, true, m_typeTree)) + { + if (reference.TargetId == datatypeId) + { + return true; + } + } + + // no match. + return false; + } + + /// + /// Determines if the value contained in an extension object matches the expected data type. + /// + /// The identifier of the expected type . + /// The value. + /// + /// true if the value contained in an extension object matches the + /// expected data type; otherwise, false. + /// + public bool IsEncodingFor(NodeId expectedTypeId, ExtensionObject value) + { + // no match on null values. + if (value == null) + { + return false; + } + + // check for exact match. + if (expectedTypeId == value.TypeId) + { + return true; + } + + // find the encoding. + ILocalNode encoding = Find(value.TypeId) as ILocalNode; + + if (encoding == null) + { + return false; + } + + // find data type. + foreach (IReference reference in encoding.References.Find(ReferenceTypeIds.HasEncoding, true, true, m_typeTree)) + { + if (reference.TargetId == expectedTypeId) + { + return true; + } + } + + // no match. + return false; + } + + /// + /// Determines if the value is an encoding of the + /// + /// The expected type id. + /// The value. + /// + /// true the value is an encoding of the ; otherwise, false. + /// + public bool IsEncodingFor(NodeId expectedTypeId, object value) + { + // null actual datatype matches nothing. + if (value == null) + { + return false; + } + + // null expected datatype matches everything. + if (NodeId.IsNull(expectedTypeId)) + { + return true; + } + + // get the actual datatype. + NodeId actualTypeId = TypeInfo.GetDataTypeId(value); + + // value is valid if the expected datatype is same as or a supertype of the actual datatype + // for example: expected datatype of 'Integer' matches an actual datatype of 'UInt32'. + if (IsTypeOf(actualTypeId, expectedTypeId)) + { + return true; + } + + // allow matches non-structure values where the actual datatype is a supertype of the expected datatype. + // for example: expected datatype of 'UtcTime' matches an actual datatype of 'DateTime'. + if (actualTypeId != DataTypes.Structure) + { + return IsTypeOf(expectedTypeId, actualTypeId); + } + + // for structure types must try to determine the subtype. + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + return IsEncodingFor(expectedTypeId, extension); + } + + // every element in an array must match. + ExtensionObject[] extensions = value as ExtensionObject[]; + + if (extensions != null) + { + for (int ii = 0; ii < extensions.Length; ii++) + { + if (!IsEncodingFor(expectedTypeId, extensions[ii])) + { + return false; + } + } + + return true; + } + + // can only get here if the value is an unrecognized data type. + return false; + } + + /// + /// Returns the data type for the specified encoding. + /// + /// The encoding id. + /// + public NodeId FindDataTypeId(ExpandedNodeId encodingId) + { + ILocalNode encoding = Find(encodingId) as ILocalNode; + + if (encoding == null) + { + return NodeId.Null; + } + + IList references = encoding.References.Find(ReferenceTypeIds.HasEncoding, true, true, m_typeTree); + + if (references.Count > 0) + { + return ExpandedNodeId.ToNodeId(references[0].TargetId, m_session.NamespaceUris); + } + + return NodeId.Null; + } + + /// + /// Returns the data type for the specified encoding. + /// + /// The encoding id. + /// + /// The data type for the + /// + public NodeId FindDataTypeId(NodeId encodingId) + { + ILocalNode encoding = Find(encodingId) as ILocalNode; + + if (encoding == null) + { + return NodeId.Null; + } + + IList references = encoding.References.Find(ReferenceTypeIds.HasEncoding, true, true, m_typeTree); + + if (references.Count > 0) + { + return ExpandedNodeId.ToNodeId(references[0].TargetId, m_session.NamespaceUris); + } + + return NodeId.Null; + } + #endregion + + #region Public Methods + /// + /// Loads the UA defined types into the cache. + /// + /// The context. + public void LoadUaDefinedTypes(ISystemContext context) + { + NodeStateCollection predefinedNodes = new NodeStateCollection(); + + var assembly = typeof(ArgumentCollection).GetTypeInfo().Assembly; + predefinedNodes.LoadFromBinaryResource(context, "Opc.Ua.Stack.Generated.Opc.Ua.PredefinedNodes.uanodes", assembly, true); + + for (int ii = 0; ii < predefinedNodes.Count; ii++) + { + BaseTypeState type = predefinedNodes[ii] as BaseTypeState; + + if (type == null) + { + continue; + } + + type.Export(context, m_nodes); + } + } + + /// + /// Removes all nodes from the cache. + /// + public void Clear() + { + m_nodes.Clear(); + } + + /// + /// Fetches a node from the server and updates the cache. + /// + public Node FetchNode(ExpandedNodeId nodeId) + { + NodeId localId = ExpandedNodeId.ToNodeId(nodeId, m_session.NamespaceUris); + + if (localId == null) + { + return null; + } + + // fetch node from server. + Node source = m_session.ReadNode(localId); + + try + { + // fetch references from server. + ReferenceDescriptionCollection references = m_session.FetchReferences(localId); + + foreach (ReferenceDescription reference in references) + { + // create a placeholder for the node if it does not already exist. + if (!m_nodes.Exists(reference.NodeId)) + { + // transform absolute identifiers. + if (reference.NodeId != null && reference.NodeId.IsAbsolute) + { + reference.NodeId = ExpandedNodeId.ToNodeId(reference.NodeId, NamespaceUris); + } + + Node target = new Node(reference); + m_nodes.Attach(target); + } + + // add the reference. + source.ReferenceTable.Add(reference.ReferenceTypeId, !reference.IsForward, reference.NodeId); + } + } + catch (Exception e) + { + Utils.Trace("Could not fetch references for valid node with NodeId = {0}. Error = {1}", nodeId, e.Message); + } + + // add to cache. + m_nodes.Attach(source); + + return source; + } + + /// + /// Adds the supertypes of the node to the cache. + /// + public void FetchSuperTypes(ExpandedNodeId nodeId) + { + // find the target node, + ILocalNode source = Find(nodeId) as ILocalNode; + + if (source == null) + { + return; + } + + // follow the tree. + ILocalNode subType = source; + + while (subType != null) + { + ILocalNode superType = null; + + IList references = subType.References.Find(ReferenceTypeIds.HasSubtype, true, true, this); + + if (references != null && references.Count > 0) + { + superType = Find(references[0].TargetId) as ILocalNode; + } + + subType = superType; + } + } + + /// + /// Returns the references of the specified node that meet the criteria specified. + /// + public IList FindReferences( + ExpandedNodeId nodeId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes) + { + IList targets = new List(); + + Node source = Find(nodeId) as Node; + + if (source == null) + { + return targets; + } + + IList references = source.ReferenceTable.Find( + referenceTypeId, + isInverse, + includeSubtypes, + m_typeTree); + + foreach (IReference reference in references) + { + INode target = Find(reference.TargetId); + + if (target != null) + { + targets.Add(target); + } + } + + return targets; + } + + /// + /// Returns a display name for a node. + /// + public string GetDisplayText(INode node) + { + // check for null. + if (node == null) + { + return String.Empty; + } + + // check for remote node. + Node target = node as Node; + + if (target == null) + { + return node.ToString(); + } + + string displayText = null; + + // use the modelling rule to determine which parent to follow. + NodeId modellingRule = target.ModellingRule; + + foreach (IReference reference in target.ReferenceTable.Find(ReferenceTypeIds.Aggregates, true, true, m_typeTree)) + { + Node parent = Find(reference.TargetId) as Node; + + // use the first parent if modelling rule is new. + if (modellingRule == Objects.ModellingRule_Mandatory) + { + displayText = GetDisplayText(parent); + break; + } + + // use the type node as the parent for other modelling rules. + if (parent is VariableTypeNode || parent is ObjectTypeNode) + { + displayText = GetDisplayText(parent); + break; + } + } + + // prepend the parent display name. + if (displayText != null) + { + return Utils.Format("{0}.{1}", displayText, node); + } + + // simply use the node name. + return node.ToString(); + } + + /// + /// Returns a display name for a node. + /// + public string GetDisplayText(ExpandedNodeId nodeId) + { + if (NodeId.IsNull(nodeId)) + { + return String.Empty; + } + + INode node = Find(nodeId); + + if (node != null) + { + return GetDisplayText(node); + } + + return Utils.Format("{0}", nodeId); + } + + /// + /// Returns a display name for the target of a reference. + /// + public string GetDisplayText(ReferenceDescription reference) + { + if (reference == null || NodeId.IsNull(reference.NodeId)) + { + return String.Empty; + } + + INode node = Find(reference.NodeId); + + if (node != null) + { + return GetDisplayText(node); + } + + return reference.ToString(); + } + + /// + /// Builds the relative path from a type to a node. + /// + public NodeId BuildBrowsePath(ILocalNode node, IList browsePath) + { + NodeId typeId = null; + + browsePath.Add(node.BrowseName); + + return typeId; + } + #endregion + + #region Private Fields + private Session m_session; + private TypeTable m_typeTree; + private NodeTable m_nodes; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/Opc.Ua.Client.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Opc.Ua.Client.csproj new file mode 100644 index 00000000..f893ce0c --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Opc.Ua.Client.csproj @@ -0,0 +1,29 @@ + + + + Opc.Ua.Client + $(LibTargetFrameworks) + 6 + OPCFoundation.NetStandard.Opc.Ua.Client + Opc.Ua.Client + OPC UA Client Class Library + true + true + + + + $(PackageId).Debug + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0601fa81 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Properties/AssemblyInfo.cs @@ -0,0 +1,26 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ +using System.Runtime.CompilerServices; + +#if HAVE_CLIENT_TESTS // TODO: uncomment when client tests become available +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.Client.Tests, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.Client.Tests")] +#endif +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/ReverseConnectManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/ReverseConnectManager.cs new file mode 100644 index 00000000..83415a6f --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/ReverseConnectManager.cs @@ -0,0 +1,746 @@ +/* ======================================================================== + * 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.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client +{ + /// + /// The implementation of a reverse connect client manager. + /// + /// + /// This reverse connect manager allows to register for reverse connections + /// with various strategies: + /// i) take any connection. + /// ii) filter for a specific application Uri and Url scheme. + /// iii) filter for the Url. + /// Second, any filter can be combined with the Once or Always flag. + /// + public class ReverseConnectManager : IDisposable + { + /// + /// A default value for reverse hello configurations, if undefined. + /// + /// + /// This value is used as wait timeout if the value is undefined by a caller. + /// + public const int DefaultWaitTimeout = 20000; + + /// + /// Internal state of the reverse connect manager. + /// + private enum ReverseConnectManagerState + { + New = 0, + Stopped = 1, + Started = 2, + Errored = 3 + }; + + /// + /// Internal state of the reverse connect host. + /// + private enum ReverseConnectHostState + { + New = 0, + Closed = 1, + Open = 2, + Errored = 3 + }; + + /// + /// Specify the strategy for the reverse connect registration. + /// + [Flags] + public enum ReverseConnectStrategy + { + /// + /// Undefined strategy, defaults to Once. + /// + Undefined = 0, + + /// + /// Remove entry after reverse connect callback. + /// + Once = 1, + + /// + /// Always callback on matching url or uri. + /// + Always = 2, + + /// + /// Flag for masking any connection. + /// + Any = 0x80, + + /// + /// Respond to any incoming reverse connection, + /// remove entry after reverse connect callback. + /// + AnyOnce = Any | Once, + + /// + /// Respond to any incoming reverse connection, + /// always callback. + /// + AnyAlways = Any | Always + + } + + /// + /// Entry for a client reverse connect registration. + /// + private class ReverseConnectInfo + { + public ReverseConnectInfo(ReverseConnectHost reverseConnectHost, bool configEntry) + { + ReverseConnectHost = reverseConnectHost; + State = ReverseConnectHostState.New; + ConfigEntry = configEntry; + } + public ReverseConnectHost ReverseConnectHost; + public ReverseConnectHostState State; + public bool ConfigEntry; + } + + /// + /// Record to store information on a client + /// registration for a reverse connect event. + /// + private class Registration + { + public Registration( + string serverUri, + Uri endpointUrl, + EventHandler onConnectionWaiting) : + this(endpointUrl, onConnectionWaiting) + { + ServerUri = Utils.ReplaceLocalhost(serverUri); + } + + /// + /// Register with the server certificate. + /// + /// + /// + /// + public Registration( + X509Certificate2 serverCertificate, + Uri endpointUrl, + EventHandler onConnectionWaiting) : + this(endpointUrl, onConnectionWaiting) + { + ServerUri = X509Utils.GetApplicationUriFromCertificate(serverCertificate); + } + + private Registration( + Uri endpointUrl, + EventHandler onConnectionWaiting) + { + EndpointUrl = new Uri(Utils.ReplaceLocalhost(endpointUrl.ToString())); + OnConnectionWaiting = onConnectionWaiting; + ReverseConnectStrategy = ReverseConnectStrategy.Once; + } + + public readonly string ServerUri; + public readonly Uri EndpointUrl; + public readonly EventHandler OnConnectionWaiting; + public ReverseConnectStrategy ReverseConnectStrategy; + } + + #region Constructors + /// + /// Initializes the object with default values. + /// + public ReverseConnectManager() + { + m_state = ReverseConnectManagerState.New; + m_registrations = new List(); + m_registrationsLock = new object(); + m_endpointUrls = new Dictionary(); + m_cts = new CancellationTokenSource(); + } + #endregion + + #region IDisposable Members + /// + /// Dispose implementation. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + public virtual void Dispose(bool disposing) + { + // close the watcher. + if (m_configurationWatcher != null) + { + Utils.SilentDispose(m_configurationWatcher); + m_configurationWatcher = null; + } + DisposeHosts(); + } + #endregion + + #region Protected Members + /// + /// Raised when the configuration changes. + /// + /// The sender. + /// The instance containing the event data. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] + protected virtual async void OnConfigurationChanged(object sender, ConfigurationWatcherEventArgs args) + { + try + { + ApplicationConfiguration configuration = await ApplicationConfiguration.Load( + new FileInfo(args.FilePath), + m_applicationType, + m_configType).ConfigureAwait(false); + + OnUpdateConfiguration(configuration); + } + catch (Exception e) + { + Utils.Trace(e, "Could not load updated configuration file from: {0}", args); + } + } + + /// + /// Called when the configuration is changed on disk. + /// + /// The configuration. + protected virtual void OnUpdateConfiguration(ApplicationConfiguration configuration) + { + // save types for config watcher + m_applicationType = configuration.ApplicationType; + m_configType = configuration.GetType(); + + OnUpdateConfiguration(configuration.ClientConfiguration.ReverseConnect); + } + + /// + /// Called when the reverse connect configuration is changed. + /// + /// + /// An empty configuration or null stops service on all configured endpoints. + /// + /// The client endpoint configuration. + protected virtual void OnUpdateConfiguration(ReverseConnectClientConfiguration configuration) + { + bool restartService = false; + + lock (m_lock) + { + if (m_configuration != null) + { + StopService(); + m_configuration = null; + restartService = true; + } + + m_configuration = configuration; + + // clear configured endpoints + ClearEndpoints(true); + + if (configuration?.ClientEndpoints != null) + { + foreach (var endpoint in configuration.ClientEndpoints) + { + var uri = Utils.ParseUri(endpoint.EndpointUrl); + if (uri != null) + { + AddEndpointInternal(uri, true); + } + } + } + + if (restartService) + { + StartService(); + } + } + } + + /// + /// Open host ports. + /// + private void OpenHosts() + { + lock (m_lock) + { + foreach (var host in m_endpointUrls) + { + var value = host.Value; + try + { + if (host.Value.State < ReverseConnectHostState.Open) + { + value.ReverseConnectHost.Open(); + value.State = ReverseConnectHostState.Open; + } + } + catch (Exception e) + { + Utils.Trace(e, $"Failed to Open {host.Key}."); + value.State = ReverseConnectHostState.Errored; + } + } + } + } + + /// + /// Close host ports. + /// + private void CloseHosts() + { + lock (m_lock) + { + foreach (var host in m_endpointUrls) + { + var value = host.Value; + try + { + if (value.State == ReverseConnectHostState.Open) + { + value.ReverseConnectHost.Close(); + value.State = ReverseConnectHostState.Closed; + } + } + catch (Exception e) + { + Utils.Trace(e, $"Failed to Close {host.Key}."); + value.State = ReverseConnectHostState.Errored; + } + } + } + } + + /// + /// Dispose the hosts; + /// + private void DisposeHosts() + { + lock (m_lock) + { + CloseHosts(); + m_endpointUrls = null; + } + } + + /// + /// Add endpoint for reverse connection. + /// + /// + public void AddEndpoint(Uri endpointUrl) + { + if (endpointUrl == null) throw new ArgumentNullException(nameof(endpointUrl)); + lock (m_lock) + { + if (m_state == ReverseConnectManagerState.Started) throw new ServiceResultException(StatusCodes.BadInvalidState); + AddEndpointInternal(endpointUrl, false); + } + } + + /// + /// Starts the server application. + /// + /// The configuration. + public void StartService(ApplicationConfiguration configuration) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + lock (m_lock) + { + if (m_state == ReverseConnectManagerState.Started) throw new ServiceResultException(StatusCodes.BadInvalidState); + try + { + OnUpdateConfiguration(configuration); + StartService(); + + // monitor the configuration file. + if (!String.IsNullOrEmpty(configuration.SourceFilePath)) + { + m_configurationWatcher = new ConfigurationWatcher(configuration); + m_configurationWatcher.Changed += OnConfigurationChanged; + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error starting reverse connect manager."); + m_state = ReverseConnectManagerState.Errored; + ServiceResult error = ServiceResult.Create(e, StatusCodes.BadInternalError, "Unexpected error starting application"); + throw new ServiceResultException(error); + } + } + } + + /// + /// Starts the server application. + /// + /// The configuration. + public void StartService(ReverseConnectClientConfiguration configuration) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + lock (m_lock) + { + if (m_state == ReverseConnectManagerState.Started) throw new ServiceResultException(StatusCodes.BadInvalidState); + try + { + m_configurationWatcher = null; + OnUpdateConfiguration(configuration); + OpenHosts(); + m_state = ReverseConnectManagerState.Started; + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error starting reverse connect manager."); + m_state = ReverseConnectManagerState.Errored; + ServiceResult error = ServiceResult.Create(e, StatusCodes.BadInternalError, "Unexpected error starting application"); + throw new ServiceResultException(error); + } + } + } + + /// + /// Clears all waiting reverse connectino handlers. + /// + public void ClearWaitingConnections() + { + lock (m_registrationsLock) + { + m_registrations.Clear(); + CancelAndRenewTokenSource(); + } + } + + /// + /// Helper to wait for a reverse connection. + /// + /// + /// + /// + public async Task WaitForConnection( + Uri endpointUrl, + string serverUri, + CancellationToken ct = default(CancellationToken)) + { + var tcs = new TaskCompletionSource(); + int hashCode = RegisterWaitingConnection(endpointUrl, serverUri, + (object sender, ConnectionWaitingEventArgs e) => tcs.TrySetResult(e), + ReverseConnectStrategy.Once); + + Func listenForCancelTaskFnc = async () => { + if (ct == default(CancellationToken)) + { + var waitTimeout = m_configuration.WaitTimeout > 0 ? m_configuration.WaitTimeout : DefaultWaitTimeout; + await Task.Delay(waitTimeout).ConfigureAwait(false); + } + else + { + await Task.Delay(-1, ct).ContinueWith(tsk => { }).ConfigureAwait(false); + } + tcs.TrySetCanceled(); + }; + + await Task.WhenAny(new Task[] { + tcs.Task, + listenForCancelTaskFnc() + }).ConfigureAwait(false); + + if (!tcs.Task.IsCompleted || tcs.Task.IsCanceled) + { + UnregisterWaitingConnection(hashCode); + throw new ServiceResultException(StatusCodes.BadTimeout, "Waiting for the reverse connection timed out."); + } + + return await tcs.Task; + } + + /// + /// Register for a waiting reverse connection. + /// + /// The endpoint Url of the reverse connection. + /// Optional. The server application Uri of the reverse connection. + /// The callback + /// The reverse connect callback strategy. + public int RegisterWaitingConnection( + Uri endpointUrl, + string serverUri, + EventHandler onConnectionWaiting, + ReverseConnectStrategy reverseConnectStrategy + ) + { + if (endpointUrl == null) throw new ArgumentNullException(nameof(endpointUrl)); + var registration = new Registration(serverUri, endpointUrl, onConnectionWaiting) { + ReverseConnectStrategy = reverseConnectStrategy + }; + lock (m_registrationsLock) + { + m_registrations.Add(registration); + CancelAndRenewTokenSource(); + } + return registration.GetHashCode(); + } + + /// + /// Unregister reverse connection callback. + /// + /// The hashcode returned by the registration. + public void UnregisterWaitingConnection(int hashCode) + { + lock (m_registrationsLock) + { + Registration toRemove = null; + foreach (var registration in m_registrations) + { + if (registration.GetHashCode() == hashCode) + { + toRemove = registration; + break; + } + } + if (toRemove != null) + { + m_registrations.Remove(toRemove); + CancelAndRenewTokenSource(); + } + } + } + + /// + /// Called before the server stops + /// + private void StopService() + { + ClearWaitingConnections(); + lock (m_lock) + { + CloseHosts(); + m_state = ReverseConnectManagerState.Stopped; + } + } + + /// + /// Called to start hosting the reverse connect ports. + /// + private void StartService() + { + lock (m_lock) + { + OpenHosts(); + m_state = ReverseConnectManagerState.Started; + } + } + + + /// + /// Remove configuration endpoints from list. + /// + private void ClearEndpoints(bool configEntry) + { + var newEndpointUrls = new Dictionary(); + foreach (var endpoint in m_endpointUrls) + { + if (endpoint.Value.ConfigEntry != configEntry) + { + newEndpointUrls[endpoint.Key] = endpoint.Value; + } + } + m_endpointUrls = newEndpointUrls; + } + + /// + /// Add endpoint for reverse connection. + /// + /// The endpoint Url of the reverse connect client endpoint. + /// Tf this is an entry in the application configuration. + private void AddEndpointInternal(Uri endpointUrl, bool configEntry) + { + var reverseConnectHost = new ReverseConnectHost(); + var info = new ReverseConnectInfo(reverseConnectHost, configEntry); + try + { + m_endpointUrls[endpointUrl] = info; + reverseConnectHost.CreateListener( + endpointUrl, + new ConnectionWaitingHandlerAsync(OnConnectionWaiting), + new EventHandler(OnConnectionStatusChanged)); + } + catch (ArgumentException ae) + { + Utils.Trace(ae, $"No listener was found for endpoint {endpointUrl}."); + info.State = ReverseConnectHostState.Errored; + } + } + + /// + /// Raised when a reverse connection is waiting, + /// finds and calls a waiting connection. + /// + private async Task OnConnectionWaiting(object sender, ConnectionWaitingEventArgs e) + { + DateTime startTime = DateTime.UtcNow; + DateTime endTime = startTime + TimeSpan.FromMilliseconds(m_configuration.HoldTime); + bool matched = MatchRegistration(sender, e); + while (!matched) + { + Utils.Trace("Holding reverse connection: {0} {1}", e.ServerUri, e.EndpointUrl); + CancellationToken ct; + lock (m_registrationsLock) + { + ct = m_cts.Token; + } + TimeSpan delay = endTime - DateTime.UtcNow; + if (delay.TotalMilliseconds > 0) + { + await Task.Delay(delay, ct).ContinueWith(tsk => { + if (tsk.IsCanceled) + { + matched = MatchRegistration(sender, e); + if (matched) + { + Utils.Trace("Matched reverse connection {0} {1} after {2}ms", + e.ServerUri, e.EndpointUrl, + (int)(DateTime.UtcNow - startTime).TotalMilliseconds); + } + } + } + ).ConfigureAwait(false); + } + break; + } + + Utils.Trace("{0} reverse connection: {1} {2} after {3}ms", + e.Accepted ? "Accepted" : "Rejected", + e.ServerUri, e.EndpointUrl, (int)(DateTime.UtcNow - startTime).TotalMilliseconds); + } + + /// + /// Match the waiting connection with a registration, callback registration, + /// return if connection is accepted in event. + /// + /// true if a match was found. + private bool MatchRegistration(object sender, ConnectionWaitingEventArgs e) + { + Registration callbackRegistration = null; + bool found = false; + lock (m_registrationsLock) + { + // first try to match single registrations + foreach (var registration in m_registrations.Where(r => (r.ReverseConnectStrategy & ReverseConnectStrategy.Any) == 0)) + { + if (registration.EndpointUrl.Scheme.Equals(e.EndpointUrl.Scheme, StringComparison.InvariantCulture) && + (registration.ServerUri == e.ServerUri || + registration.EndpointUrl.Authority.Equals(e.EndpointUrl.Authority, StringComparison.InvariantCulture))) + { + callbackRegistration = registration; + e.Accepted = true; + found = true; + Utils.Trace("Accepted reverse connection: {0} {1}", e.ServerUri, e.EndpointUrl); + break; + } + } + + // now try any registrations. + if (callbackRegistration == null) + { + foreach (var registration in m_registrations.Where(r => (r.ReverseConnectStrategy & ReverseConnectStrategy.Any) != 0)) + { + if (registration.EndpointUrl.Scheme.Equals(e.EndpointUrl.Scheme, StringComparison.InvariantCulture)) + { + callbackRegistration = registration; + e.Accepted = true; + found = true; + Utils.Trace("Accept any reverse connection for approval: {0} {1}", e.ServerUri, e.EndpointUrl); + break; + } + } + } + + if (callbackRegistration != null) + { + if ((callbackRegistration.ReverseConnectStrategy & ReverseConnectStrategy.Once) != 0) + { + m_registrations.Remove(callbackRegistration); + } + } + } + + callbackRegistration?.OnConnectionWaiting?.Invoke(sender, e); + + return found; + } + + /// + /// Raised when a connection status changes. + /// + private void OnConnectionStatusChanged(object sender, ConnectionStatusEventArgs e) + { + Utils.Trace("Channel status: {0} {1} {2}", e.EndpointUrl, e.ChannelStatus, e.Closed); + } + + /// + /// Renew the cancellation token after use. + /// + private void CancelAndRenewTokenSource() + { + CancellationTokenSource cts = m_cts; + m_cts = new CancellationTokenSource(); + cts.Cancel(); + } + #endregion + + #region Private Fields + private readonly object m_lock = new object(); + private ConfigurationWatcher m_configurationWatcher; + private ApplicationType m_applicationType; + private Type m_configType; + private ReverseConnectClientConfiguration m_configuration; + private Dictionary m_endpointUrls; + private ReverseConnectManagerState m_state; + private List m_registrations; + private readonly object m_registrationsLock = new object(); + private CancellationTokenSource m_cts; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/Session.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Session.cs new file mode 100644 index 00000000..979f69d8 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Session.cs @@ -0,0 +1,4826 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; +using System.IO; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Xml; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Client +{ + /// + /// Manages a session with a server. + /// + public class Session : SessionClient, IDisposable + { + #region Constructors + /// + /// Constructs a new instance of the class. + /// + /// The channel used to communicate with the server. + /// The configuration for the client application. + /// The endpoint use to initialize the channel. + public Session( + ISessionChannel channel, + ApplicationConfiguration configuration, + ConfiguredEndpoint endpoint) + : + this(channel as ITransportChannel, configuration, endpoint, null) + { + } + + /// + /// Constructs a new instance of the class. + /// + /// The channel used to communicate with the server. + /// The configuration for the client application. + /// The endpoint used to initialize the channel. + /// The certificate to use for the client. + /// The list of available endpoints returned by server in GetEndpoints() response. + /// The value of profileUris used in GetEndpoints() request. + /// + /// The application configuration is used to look up the certificate if none is provided. + /// The clientCertificate must have the private key. This will require that the certificate + /// be loaded from a certicate store. Converting a DER encoded blob to a X509Certificate2 + /// will not include a private key. + /// The availableEndpoints and discoveryProfileUris parameters are used to validate + /// that the list of EndpointDescriptions returned at GetEndpoints matches the list returned at CreateSession. + /// + public Session( + ITransportChannel channel, + ApplicationConfiguration configuration, + ConfiguredEndpoint endpoint, + X509Certificate2 clientCertificate, + EndpointDescriptionCollection availableEndpoints = null, + StringCollection discoveryProfileUris = null) + : + base(channel) + { + Initialize(channel, configuration, endpoint, clientCertificate); + m_discoveryServerEndpoints = availableEndpoints; + m_discoveryProfileUris = discoveryProfileUris; + } + + /// + /// Initializes a new instance of the class. + /// + /// The channel. + /// The template session. + /// if set to true the event handlers are copied. + public Session(ITransportChannel channel, Session template, bool copyEventHandlers) + : + base(channel) + { + Initialize(channel, template.m_configuration, template.m_endpoint, template.m_instanceCertificate); + + m_defaultSubscription = template.m_defaultSubscription; + m_sessionTimeout = template.m_sessionTimeout; + m_maxRequestMessageSize = template.m_maxRequestMessageSize; + m_preferredLocales = template.m_preferredLocales; + m_sessionName = template.m_sessionName; + m_handle = template.m_handle; + m_identity = template.m_identity; + m_keepAliveInterval = template.m_keepAliveInterval; + m_checkDomain = template.m_checkDomain; + + if (copyEventHandlers) + { + m_KeepAlive = template.m_KeepAlive; + m_Publish = template.m_Publish; + m_PublishError = template.m_PublishError; + m_SubscriptionsChanged = template.m_SubscriptionsChanged; + m_SessionClosing = template.m_SessionClosing; + } + + foreach (Subscription subscription in template.Subscriptions) + { + this.AddSubscription(new Subscription(subscription, copyEventHandlers)); + } + } + #endregion + + #region Private Methods + /// + /// Initializes the channel. + /// + private void Initialize( + ITransportChannel channel, + ApplicationConfiguration configuration, + ConfiguredEndpoint endpoint, + X509Certificate2 clientCertificate) + { + Initialize(); + + ValidateClientConfiguration(configuration); + + // save configuration information. + m_configuration = configuration; + m_endpoint = endpoint; + + // update the default subscription. + m_defaultSubscription.MinLifetimeInterval = (uint)configuration.ClientConfiguration.MinSubscriptionLifetime; + + if (m_endpoint.Description.SecurityPolicyUri != SecurityPolicies.None) + { + // update client certificate. + m_instanceCertificate = clientCertificate; + + if (clientCertificate == null) + { + // load the application instance certificate. + if (m_configuration.SecurityConfiguration.ApplicationCertificate == null) + { + throw new ServiceResultException( + StatusCodes.BadConfigurationError, + "The client configuration does not specify an application instance certificate."); + } + + m_instanceCertificate = m_configuration.SecurityConfiguration.ApplicationCertificate.Find(true).Result; + + } + + // check for valid certificate. + if (m_instanceCertificate == null) + { + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, + "Cannot find the application instance certificate. Store={0}, SubjectName={1}, Thumbprint={2}.", + m_configuration.SecurityConfiguration.ApplicationCertificate.StorePath, + m_configuration.SecurityConfiguration.ApplicationCertificate.SubjectName, + m_configuration.SecurityConfiguration.ApplicationCertificate.Thumbprint); + } + + // check for private key. + if (!m_instanceCertificate.HasPrivateKey) + { + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, + "No private key for the application instance certificate. Subject={0}, Thumbprint={1}.", + m_instanceCertificate.Subject, + m_instanceCertificate.Thumbprint); + } + + // load certificate chain. + m_instanceCertificateChain = new X509Certificate2Collection(m_instanceCertificate); + List issuers = new List(); + configuration.CertificateValidator.GetIssuers(m_instanceCertificate, issuers).Wait(); + + for (int i = 0; i < issuers.Count; i++) + { + m_instanceCertificateChain.Add(issuers[i].Certificate); + } + } + + // initialize the message context. + ServiceMessageContext messageContext = channel.MessageContext; + + if (messageContext != null) + { + m_namespaceUris = messageContext.NamespaceUris; + m_serverUris = messageContext.ServerUris; + m_factory = messageContext.Factory; + } + else + { + m_namespaceUris = new NamespaceTable(); + m_serverUris = new StringTable(); + m_factory = new EncodeableFactory(EncodeableFactory.GlobalFactory); + } + + // set the default preferred locales. + m_preferredLocales = new string[] { CultureInfo.CurrentCulture.Name }; + + // create a context to use. + m_systemContext = new SystemContext(); + + m_systemContext.SystemHandle = this; + m_systemContext.EncodeableFactory = m_factory; + m_systemContext.NamespaceUris = m_namespaceUris; + m_systemContext.ServerUris = m_serverUris; + m_systemContext.TypeTable = this.TypeTree; + m_systemContext.PreferredLocales = null; + m_systemContext.SessionId = null; + m_systemContext.UserIdentity = null; + } + + /// + /// Sets the object members to default values. + /// + private void Initialize() + { + m_sessionTimeout = 0; + m_namespaceUris = new NamespaceTable(); + m_serverUris = new StringTable(); + m_factory = EncodeableFactory.GlobalFactory; + m_nodeCache = new NodeCache(this); + m_configuration = null; + m_instanceCertificate = null; + m_endpoint = null; + m_subscriptions = new List(); + m_dictionaries = new Dictionary(); + m_acknowledgementsToSend = new SubscriptionAcknowledgementCollection(); + m_latestAcknowledgementsSent = new Dictionary(); + m_identityHistory = new List(); + m_outstandingRequests = new LinkedList(); + m_keepAliveInterval = 5000; + m_sessionName = ""; + + m_defaultSubscription = new Subscription(); + + m_defaultSubscription.DisplayName = "Subscription"; + m_defaultSubscription.PublishingInterval = 1000; + m_defaultSubscription.KeepAliveCount = 10; + m_defaultSubscription.LifetimeCount = 1000; + m_defaultSubscription.Priority = 255; + m_defaultSubscription.PublishingEnabled = true; + } + + /// + /// Check if all required configuration fields are populated. + /// + private void ValidateClientConfiguration(ApplicationConfiguration configuration) + { + String configurationField; + if (configuration == null) + { + throw new ArgumentNullException(nameof(configuration)); + } + if (configuration.ClientConfiguration == null) + { + configurationField = "ClientConfiguration"; + } + else if (configuration.SecurityConfiguration == null) + { + configurationField = "SecurityConfiguration"; + } + else if (configuration.CertificateValidator == null) + { + configurationField = "CertificateValidator"; + } + else + { + return; + } + + throw new ServiceResultException( + StatusCodes.BadConfigurationError, + $"The client configuration does not specify the {configurationField}."); + } + + /// + /// Validates the server nonce and security parameters of user identity. + /// + private void ValidateServerNonce( + IUserIdentity identity, + byte[] serverNonce, + string securityPolicyUri, + byte[] previousServerNonce, + MessageSecurityMode channelSecurityMode = MessageSecurityMode.None) + { + // skip validation if server nonce is not used for encryption. + if (String.IsNullOrEmpty(securityPolicyUri) || securityPolicyUri == SecurityPolicies.None) + { + return; + } + + if (identity != null && identity.TokenType != UserTokenType.Anonymous) + { + // the server nonce should be validated if the token includes a secret. + if (!Utils.Nonce.ValidateNonce(serverNonce, MessageSecurityMode.SignAndEncrypt, (uint)m_configuration.SecurityConfiguration.NonceLength)) + { + if (channelSecurityMode == MessageSecurityMode.SignAndEncrypt || + m_configuration.SecurityConfiguration.SuppressNonceValidationErrors) + { + Utils.Trace((int)Utils.TraceMasks.Security, "Warning: The server nonce has not the correct length or is not random enough. The error is suppressed by user setting or because the channel is encrypted."); + } + else + { + throw ServiceResultException.Create(StatusCodes.BadNonceInvalid, "The server nonce has not the correct length or is not random enough."); + } + } + + // check that new nonce is different from the previously returned server nonce. + if (previousServerNonce != null && Utils.CompareNonce(serverNonce, previousServerNonce)) + { + if (channelSecurityMode == MessageSecurityMode.SignAndEncrypt || + m_configuration.SecurityConfiguration.SuppressNonceValidationErrors) + { + Utils.Trace((int)Utils.TraceMasks.Security, "Warning: The Server nonce is equal with previously returned nonce. The error is suppressed by user setting or because the channel is encrypted."); + } + else + { + throw ServiceResultException.Create(StatusCodes.BadNonceInvalid, "Server nonce is equal with previously returned nonce."); + } + } + } + } + + #endregion + + #region IDisposable Members + /// + /// Closes the session and the underlying channel. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_keepAliveTimer); + m_keepAliveTimer = null; + + Utils.SilentDispose(m_defaultSubscription); + m_defaultSubscription = null; + + foreach (Subscription subscription in m_subscriptions) + { + Utils.SilentDispose(subscription); + } + + m_subscriptions.Clear(); + } + + base.Dispose(disposing); + } + #endregion + + #region Events + /// + /// Raised when a keep alive arrives from the server or an error is detected. + /// + /// + /// Once a session is created a timer will periodically read the server state and current time. + /// If this read operation succeeds this event will be raised each time the keep alive period elapses. + /// If an error is detected (KeepAliveStopped == true) then this event will be raised as well. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event KeepAliveEventHandler KeepAlive + { + add + { + lock (m_eventLock) + { + m_KeepAlive += value; + } + } + + remove + { + lock (m_eventLock) + { + m_KeepAlive -= value; + } + } + } + + /// + /// Raised when a notification message arrives in a publish response. + /// + /// + /// All publish requests are managed by the Session object. When a response arrives it is + /// validated and passed to the appropriate Subscription object and this event is raised. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event NotificationEventHandler Notification + { + add + { + lock (m_eventLock) + { + m_Publish += value; + } + } + + remove + { + lock (m_eventLock) + { + m_Publish -= value; + } + } + } + + /// + /// Raised when an exception occurs while processing a publish response. + /// + /// + /// Exceptions in a publish response are not necessarily fatal and the Session will + /// attempt to recover by issuing Republish requests if missing messages are detected. + /// That said, timeout errors may be a symptom of a OperationTimeout that is too short + /// when compared to the shortest PublishingInterval/KeepAliveCount amount the current + /// Subscriptions. The OperationTimeout should be twice the minimum value for + /// PublishingInterval*KeepAliveCount. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event PublishErrorEventHandler PublishError + { + add + { + lock (m_eventLock) + { + m_PublishError += value; + } + } + + remove + { + lock (m_eventLock) + { + m_PublishError -= value; + } + } + } + + /// + /// Raised when a subscription is added or removed + /// + public event EventHandler SubscriptionsChanged + { + add + { + m_SubscriptionsChanged += value; + } + + remove + { + m_SubscriptionsChanged -= value; + } + } + + /// + /// Raised to indicate the session is closing. + /// + public event EventHandler SessionClosing + { + add + { + m_SessionClosing += value; + } + + remove + { + m_SessionClosing -= value; + } + } + #endregion + + #region Public Properties + /// + /// Gets the endpoint used to connect to the server. + /// + public ConfiguredEndpoint ConfiguredEndpoint => m_endpoint; + + /// + /// Gets the name assigned to the session. + /// + public string SessionName => m_sessionName; + + /// + /// Gets the period for wich the server will maintain the session if there is no communication from the client. + /// + public double SessionTimeout => m_sessionTimeout; + + /// + /// Gets the local handle assigned to the session + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Gets the user identity currently used for the session. + /// + public IUserIdentity Identity => m_identity; + + /// + /// Gets a list of user identities that can be used to connect to the server. + /// + public IEnumerable IdentityHistory => m_identityHistory; + + /// + /// Gets the table of namespace uris known to the server. + /// + public NamespaceTable NamespaceUris => m_namespaceUris; + + /// + /// Gest the table of remote server uris known to the server. + /// + public StringTable ServerUris => m_serverUris; + + /// + /// Gets the system context for use with the session. + /// + public ISystemContext SystemContext => m_systemContext; + + /// + /// Gets the factory used to create encodeable objects that the server understands. + /// + public EncodeableFactory Factory => m_factory; + + /// + /// Gets the cache of the server's type tree. + /// + public ITypeTable TypeTree => m_nodeCache.TypeTree; + + /// + /// Gets the cache of nodes fetched from the server. + /// + public NodeCache NodeCache => m_nodeCache; + + /// + /// Gets the context to use for filter operations. + /// + public FilterContext FilterContext => new FilterContext(m_namespaceUris, m_nodeCache.TypeTree, m_preferredLocales); + + /// + /// Gets the locales that the server should use when returning localized text. + /// + public StringCollection PreferredLocales => m_preferredLocales; + + /// + /// Gets the data type system dictionaries in use. + /// + public Dictionary DataTypeSystem => m_dictionaries; + + /// + /// Gets the subscriptions owned by the session. + /// + public IEnumerable Subscriptions + { + get + { + lock (SyncRoot) + { + return new ReadOnlyList(m_subscriptions); + } + } + } + + /// + /// Gets the number of subscriptions owned by the session. + /// + public int SubscriptionCount + { + get + { + lock (SyncRoot) + { + return m_subscriptions.Count; + } + } + } + + /// + /// Gets or Sets the default subscription for the session. + /// + public Subscription DefaultSubscription + { + get { return m_defaultSubscription; } + set { m_defaultSubscription = value; } + } + + /// + /// Gets or Sets how frequently the server is pinged to see if communication is still working. + /// + /// + /// This interval controls how much time elaspes before a communication error is detected. + /// If everything is ok the KeepAlive event will be raised each time this period elapses. + /// + public int KeepAliveInterval + { + get + { + return m_keepAliveInterval; + } + + set + { + m_keepAliveInterval = value; + StartKeepAliveTimer(); + } + } + + /// + /// Returns true if the session is not receiving keep alives. + /// + /// + /// Set to true if the server does not respond for 2 times the KeepAliveInterval. + /// Set to false is communication recovers. + /// + public bool KeepAliveStopped + { + get + { + lock (m_eventLock) + { + long delta = DateTime.UtcNow.Ticks - m_lastKeepAliveTime.Ticks; + + // add a 1000ms guard band to allow for network lag. + return (m_keepAliveInterval * 2) * TimeSpan.TicksPerMillisecond <= delta; + } + } + } + + /// + /// Gets the time of the last keep alive. + /// + public DateTime LastKeepAliveTime => m_lastKeepAliveTime; + + /// + /// Gets the number of outstanding publish or keep alive requests. + /// + public int OutstandingRequestCount + { + get + { + lock (m_outstandingRequests) + { + return m_outstandingRequests.Count; + } + } + } + + /// + /// Gets the number of outstanding publish or keep alive requests which appear to be missing. + /// + public int DefunctRequestCount + { + get + { + lock (m_outstandingRequests) + { + int count = 0; + + for (LinkedListNode ii = m_outstandingRequests.First; ii != null; ii = ii.Next) + { + if (ii.Value.Defunct) + { + count++; + } + } + + return count; + } + } + } + + /// + /// Gets the number of good outstanding publish requests. + /// + public int GoodPublishRequestCount + { + get + { + lock (m_outstandingRequests) + { + int count = 0; + + for (LinkedListNode ii = m_outstandingRequests.First; ii != null; ii = ii.Next) + { + if (!ii.Value.Defunct && ii.Value.RequestTypeId == DataTypes.PublishRequest) + { + count++; + } + } + + return count; + } + } + } + #endregion + + #region Public Static Methods + /// + /// Creates a new communication session with a server by invoking the CreateSession service + /// + /// The configuration for the client application. + /// The endpoint for the server. + /// If set to true the discovery endpoint is used to update the endpoint description before connecting. + /// The name to assign to the session. + /// The timeout period for the session. + /// The identity. + /// The user identity to associate with the session. + /// The new session object + public static Task Create( + ApplicationConfiguration configuration, + ConfiguredEndpoint endpoint, + bool updateBeforeConnect, + string sessionName, + uint sessionTimeout, + IUserIdentity identity, + IList preferredLocales) + { + return Create(configuration, endpoint, updateBeforeConnect, false, sessionName, sessionTimeout, identity, preferredLocales); + } + + /// + /// Creates a new communication session with a server by invoking the CreateSession service + /// + /// The configuration for the client application. + /// The endpoint for the server. + /// If set to true the discovery endpoint is used to update the endpoint description before connecting. + /// If set to true then the domain in the certificate must match the endpoint used. + /// The name to assign to the session. + /// The timeout period for the session. + /// The user identity to associate with the session. + /// The preferred locales. + /// The new session object. + public static Task Create( + ApplicationConfiguration configuration, + ConfiguredEndpoint endpoint, + bool updateBeforeConnect, + bool checkDomain, + string sessionName, + uint sessionTimeout, + IUserIdentity identity, + IList preferredLocales) + { + return Create(configuration, null, endpoint, updateBeforeConnect, checkDomain, sessionName, sessionTimeout, identity, preferredLocales); + } + + /// + /// Creates a new communication session with a server using a reverse connection. + /// + /// The configuration for the client application. + /// The client endpoint for the reverse connect. + /// The endpoint for the server. + /// If set to true the discovery endpoint is used to update the endpoint description before connecting. + /// If set to true then the domain in the certificate must match the endpoint used. + /// The name to assign to the session. + /// The timeout period for the session. + /// The user identity to associate with the session. + /// The preferred locales. + /// The new session object. + public static async Task Create( + ApplicationConfiguration configuration, + ITransportWaitingConnection connection, + ConfiguredEndpoint endpoint, + bool updateBeforeConnect, + bool checkDomain, + string sessionName, + uint sessionTimeout, + IUserIdentity identity, + IList preferredLocales) + { + endpoint.UpdateBeforeConnect = updateBeforeConnect; + + EndpointDescription endpointDescription = endpoint.Description; + + // create the endpoint configuration (use the application configuration to provide default values). + EndpointConfiguration endpointConfiguration = endpoint.Configuration; + + if (endpointConfiguration == null) + { + endpoint.Configuration = endpointConfiguration = EndpointConfiguration.Create(configuration); + } + + // create message context. + ServiceMessageContext messageContext = configuration.CreateMessageContext(true); + + // update endpoint description using the discovery endpoint. + if (endpoint.UpdateBeforeConnect && connection == null) + { + endpoint.UpdateFromServer(); + endpointDescription = endpoint.Description; + endpointConfiguration = endpoint.Configuration; + } + + // checks the domains in the certificate. + if (checkDomain && + endpoint.Description.ServerCertificate != null && + endpoint.Description.ServerCertificate.Length > 0) + { + configuration.CertificateValidator?.ValidateDomains( + new X509Certificate2(endpoint.Description.ServerCertificate), + endpoint); + checkDomain = false; + } + + X509Certificate2 clientCertificate = null; + X509Certificate2Collection clientCertificateChain = null; + if (endpointDescription.SecurityPolicyUri != SecurityPolicies.None) + { + clientCertificate = await LoadCertificate(configuration); + clientCertificateChain = await LoadCertificateChain(configuration, clientCertificate); + } + + // initialize the channel which will be created with the server. + ITransportChannel channel; + if (connection != null) + { + channel = SessionChannel.CreateUaBinaryChannel( + configuration, + connection, + endpointDescription, + endpointConfiguration, + clientCertificate, + clientCertificateChain, + messageContext); + } + else + { + channel = SessionChannel.Create( + configuration, + endpointDescription, + endpointConfiguration, + clientCertificate, + clientCertificateChain, + messageContext); + } + + // create the session object. + Session session = new Session(channel, configuration, endpoint, null); + + // create the session. + try + { + session.Open(sessionName, sessionTimeout, identity, preferredLocales, checkDomain); + } + catch (Exception) + { + session.Dispose(); + throw; + } + + return session; + } + + /// + /// Creates a new communication session with a server using a reverse connect manager. + /// + /// The configuration for the client application. + /// The reverse connect manager for the client connection. + /// The endpoint for the server. + /// If set to true the discovery endpoint is used to update the endpoint description before connecting. + /// If set to true then the domain in the certificate must match the endpoint used. + /// The name to assign to the session. + /// The timeout period for the session. + /// The user identity to associate with the session. + /// The preferred locales. + /// The cancellation token. + /// The new session object. + public static async Task Create( + ApplicationConfiguration configuration, + ReverseConnectManager reverseConnectManager, + ConfiguredEndpoint endpoint, + bool updateBeforeConnect, + bool checkDomain, + string sessionName, + uint sessionTimeout, + IUserIdentity userIdentity, + IList preferredLocales, + CancellationToken ct = default(CancellationToken) + ) + { + if (reverseConnectManager == null) + { + return await Create(configuration, endpoint, updateBeforeConnect, + checkDomain, sessionName, sessionTimeout, userIdentity, preferredLocales); + } + + ITransportWaitingConnection connection = null; + do + { + connection = await reverseConnectManager.WaitForConnection( + endpoint.EndpointUrl, + endpoint.ReverseConnect.ServerUri, + ct); + + if (updateBeforeConnect) + { + await endpoint.UpdateFromServerAsync( + endpoint.EndpointUrl, connection, + endpoint.Description.SecurityMode, + endpoint.Description.SecurityPolicyUri); + updateBeforeConnect = false; + connection = null; + } + } while (connection == null); + + return await Create( + configuration, + connection, + endpoint, + false, + checkDomain, + sessionName, + sessionTimeout, + userIdentity, + preferredLocales); + } + + /// + /// Recreates a session based on a specified template. + /// + /// The Session object to use as template + /// The new session object. + public static Session Recreate(Session template) + { + ServiceMessageContext messageContext = template.m_configuration.CreateMessageContext(); + messageContext.Factory = template.Factory; + + // create the channel object used to connect to the server. + ITransportChannel channel = SessionChannel.Create( + template.m_configuration, + template.m_endpoint.Description, + template.m_endpoint.Configuration, + template.m_instanceCertificate, + template.m_configuration.SecurityConfiguration.SendCertificateChain ? + template.m_instanceCertificateChain : null, + messageContext); + + // create the session object. + Session session = new Session(channel, template, true); + + try + { + // open the session. + session.Open( + template.m_sessionName, + (uint)template.m_sessionTimeout, + template.m_identity, + template.m_preferredLocales, + template.m_checkDomain); + + // create the subscriptions. + foreach (Subscription subscription in session.Subscriptions) + { + subscription.Create(); + } + } + catch (Exception e) + { + session.Dispose(); + throw ServiceResultException.Create(StatusCodes.BadCommunicationError, e, "Could not recreate session. {0}", template.m_sessionName); + } + + return session; + } + + /// + /// Recreates a session based on a specified template. + /// + /// The Session object to use as template + /// The waiting reverse connection. + /// The new session object. + public static Session Recreate(Session template, ITransportWaitingConnection connection) + { + ServiceMessageContext messageContext = template.m_configuration.CreateMessageContext(); + messageContext.Factory = template.Factory; + + // create the channel object used to connect to the server. + ITransportChannel channel = SessionChannel.Create( + template.m_configuration, + connection, + template.m_endpoint.Description, + template.m_endpoint.Configuration, + template.m_instanceCertificate, + template.m_configuration.SecurityConfiguration.SendCertificateChain ? + template.m_instanceCertificateChain : null, + messageContext); + + // create the session object. + Session session = new Session(channel, template, true); + + try + { + // open the session. + session.Open( + template.m_sessionName, + (uint)template.m_sessionTimeout, + template.m_identity, + template.m_preferredLocales, + template.m_checkDomain); + + // create the subscriptions. + foreach (Subscription subscription in session.Subscriptions) + { + subscription.Create(); + } + } + catch (Exception e) + { + session.Dispose(); + throw ServiceResultException.Create(StatusCodes.BadCommunicationError, e, "Could not recreate session. {0}", template.m_sessionName); + } + + return session; + } + #endregion + + #region Delegates and Events + /// + /// Used to handle renews of user identity tokens before reconnect. + /// + public delegate IUserIdentity RenewUserIdentityEventHandler(Session session, IUserIdentity identity); + + /// + /// Raised before a reconnect operation completes. + /// + public event RenewUserIdentityEventHandler RenewUserIdentity + { + add { m_RenewUserIdentity += value; } + remove { m_RenewUserIdentity -= value; } + } + + private event RenewUserIdentityEventHandler m_RenewUserIdentity; + #endregion + + #region Public Methods + /// + /// Reconnects to the server after a network failure. + /// + public void Reconnect() + { + Reconnect(null); + } + + /// + /// Reconnects to the server after a network failure using a waiting connection. + /// + public void Reconnect(ITransportWaitingConnection connection) + { + try + { + lock (SyncRoot) + { + // check if already connecting. + if (m_reconnecting) + { + Utils.Trace("Session is already attempting to reconnect."); + + throw ServiceResultException.Create( + StatusCodes.BadInvalidState, + "Session is already attempting to reconnect."); + } + + Utils.Trace("Session RECONNECT starting."); + m_reconnecting = true; + + // stop keep alives. + if (m_keepAliveTimer != null) + { + m_keepAliveTimer.Dispose(); + m_keepAliveTimer = null; + } + } + + // create the client signature. + byte[] dataToSign = Utils.Append(m_serverCertificate != null ? m_serverCertificate.RawData : null, m_serverNonce); + EndpointDescription endpoint = m_endpoint.Description; + SignatureData clientSignature = SecurityPolicies.Sign(m_instanceCertificate, endpoint.SecurityPolicyUri, dataToSign); + + // check that the user identity is supported by the endpoint. + UserTokenPolicy identityPolicy = endpoint.FindUserTokenPolicy(m_identity.TokenType, m_identity.IssuedTokenType); + + if (identityPolicy == null) + { + Utils.Trace("Endpoint does not support the user identity type provided."); + + throw ServiceResultException.Create( + StatusCodes.BadUserAccessDenied, + "Endpoint does not support the user identity type provided."); + } + + // select the security policy for the user token. + string securityPolicyUri = identityPolicy.SecurityPolicyUri; + + if (String.IsNullOrEmpty(securityPolicyUri)) + { + securityPolicyUri = endpoint.SecurityPolicyUri; + } + + // need to refresh the identity (reprompt for password, refresh token). + if (m_RenewUserIdentity != null) + { + m_identity = m_RenewUserIdentity(this, m_identity); + } + + // validate server nonce and security parameters for user identity. + ValidateServerNonce( + m_identity, + m_serverNonce, + securityPolicyUri, + m_previousServerNonce, + m_endpoint.Description.SecurityMode); + + // sign data with user token. + UserIdentityToken identityToken = m_identity.GetIdentityToken(); + identityToken.PolicyId = identityPolicy.PolicyId; + SignatureData userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri); + + // encrypt token. + identityToken.Encrypt(m_serverCertificate, m_serverNonce, securityPolicyUri); + + // send the software certificates assigned to the client. + SignedSoftwareCertificateCollection clientSoftwareCertificates = GetSoftwareCertificates(); + + Utils.Trace("Session REPLACING channel."); + + if (connection != null) + { + // check if the channel supports reconnect. + if ((TransportChannel.SupportedFeatures & TransportChannelFeatures.Reconnect) != 0) + { + TransportChannel.Reconnect(connection); + } + else + { + // initialize the channel which will be created with the server. + ITransportChannel channel = SessionChannel.Create( + m_configuration, + connection, + m_endpoint.Description, + m_endpoint.Configuration, + m_instanceCertificate, + m_configuration.SecurityConfiguration.SendCertificateChain ? m_instanceCertificateChain : null, + MessageContext); + + // disposes the existing channel. + TransportChannel = channel; + } + } + else + { + // check if the channel supports reconnect. + if ((TransportChannel.SupportedFeatures & TransportChannelFeatures.Reconnect) != 0) + { + TransportChannel.Reconnect(); + } + else + { + // initialize the channel which will be created with the server. + ITransportChannel channel = SessionChannel.Create( + m_configuration, + m_endpoint.Description, + m_endpoint.Configuration, + m_instanceCertificate, + m_configuration.SecurityConfiguration.SendCertificateChain ? m_instanceCertificateChain : null, + MessageContext); + + // disposes the existing channel. + TransportChannel = channel; + } + } + + // reactivate session. + byte[] serverNonce = null; + StatusCodeCollection certificateResults = null; + DiagnosticInfoCollection certificateDiagnosticInfos = null; + + Utils.Trace("Session RE-ACTIVATING session."); + + IAsyncResult result = BeginActivateSession( + null, + clientSignature, + null, + m_preferredLocales, + new ExtensionObject(identityToken), + userTokenSignature, + null, + null); + + if (!result.AsyncWaitHandle.WaitOne(5000)) + { + Utils.Trace("WARNING: ACTIVATE SESSION timed out. {1}/{0}", OutstandingRequestCount, GoodPublishRequestCount); + } + + EndActivateSession( + result, + out serverNonce, + out certificateResults, + out certificateDiagnosticInfos); + + int publishCount = 0; + + lock (SyncRoot) + { + Utils.Trace("Session RECONNECT completed successfully."); + m_previousServerNonce = m_serverNonce; + m_serverNonce = serverNonce; + m_reconnecting = false; + publishCount = m_subscriptions.Count; + } + + // refill pipeline. + for (int ii = 0; ii < publishCount; ii++) + { + BeginPublish(OperationTimeout); + } + + StartKeepAliveTimer(); + } + finally + { + m_reconnecting = false; + } + } + + + /// + /// Saves all the subscriptions of the session. + /// + /// The file path. + public void Save(string filePath) + { + Save(filePath, Subscriptions); + } + + /// + /// Saves a set of subscriptions. + /// + public void Save(string filePath, IEnumerable subscriptions) + { + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Indent = true; + settings.OmitXmlDeclaration = false; + settings.Encoding = Encoding.UTF8; + + FileStream stream = new FileStream(filePath, FileMode.Create); + XmlWriter writer = XmlWriter.Create(stream, settings); + + SubscriptionCollection subscriptionList = new SubscriptionCollection(subscriptions); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(SubscriptionCollection)); + serializer.WriteObject(writer, subscriptionList); + } + finally + { + writer.Flush(); + writer.Dispose(); + stream.Dispose(); + } + } + + + /// + /// Load the list of subscriptions saved in a file. + /// + /// The file path. + /// The list of loaded subscriptions + public IEnumerable Load(string filePath) + { + XmlReaderSettings settings = new XmlReaderSettings(); + + settings.ConformanceLevel = ConformanceLevel.Document; + settings.CloseInput = true; + + XmlReader reader = XmlReader.Create(filePath, settings); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(SubscriptionCollection)); + + SubscriptionCollection subscriptions = (SubscriptionCollection)serializer.ReadObject(reader); + + foreach (Subscription subscription in subscriptions) + { + AddSubscription(subscription); + } + + return subscriptions; + } + finally + { + reader.Dispose(); + } + } + + /// + /// Updates the local copy of the server's namespace uri and server uri tables. + /// + public void FetchNamespaceTables() + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + // request namespace array. + ReadValueId valueId = new ReadValueId(); + + valueId.NodeId = Variables.Server_NamespaceArray; + valueId.AttributeId = Attributes.Value; + + nodesToRead.Add(valueId); + + // request server array. + valueId = new ReadValueId(); + + valueId.NodeId = Variables.Server_ServerArray; + valueId.AttributeId = Attributes.Value; + + nodesToRead.Add(valueId); + + // read from server. + DataValueCollection values = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = this.Read( + null, + 0, + TimestampsToReturn.Both, + nodesToRead, + out values, + out diagnosticInfos); + + ValidateResponse(values, nodesToRead); + ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // validate namespace array. + ServiceResult result = ValidateDataValue(values[0], typeof(string[]), 0, diagnosticInfos, responseHeader); + + if (ServiceResult.IsBad(result)) + { + Utils.Trace("FetchNamespaceTables: Cannot read NamespaceArray node: {0} " + result.StatusCode); + } + else + { + m_namespaceUris.Update((string[])values[0].Value); + } + + // validate server array. + result = ValidateDataValue(values[1], typeof(string[]), 1, diagnosticInfos, responseHeader); + + if (ServiceResult.IsBad(result)) + { + Utils.Trace("FetchNamespaceTables: Cannot read ServerArray node: {0} " + result.StatusCode); + } + else + { + m_serverUris.Update((string[])values[1].Value); + } + } + + /// + /// Updates the cache with the type and its subtypes. + /// + /// + /// This method can be used to ensure the TypeTree is populated. + /// + public void FetchTypeTree(ExpandedNodeId typeId) + { + Node node = NodeCache.Find(typeId) as Node; + + if (node != null) + { + foreach (IReference reference in node.Find(ReferenceTypeIds.HasSubtype, false)) + { + FetchTypeTree(reference.TargetId); + } + } + } + + /// + /// Returns the available encodings for a node + /// + /// The variable node. + /// + public ReferenceDescriptionCollection ReadAvailableEncodings(NodeId variableId) + { + VariableNode variable = NodeCache.Find(variableId) as VariableNode; + + if (variable == null) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "NodeId does not refer to a valid variable node."); + } + + // no encodings available if there was a problem reading the data type for the node. + if (NodeId.IsNull(variable.DataType)) + { + return new ReferenceDescriptionCollection(); + } + + // no encodings for non-structures. + if (!TypeTree.IsTypeOf(variable.DataType, DataTypes.Structure)) + { + return new ReferenceDescriptionCollection(); + } + + // look for cached values. + IList encodings = NodeCache.Find(variableId, ReferenceTypeIds.HasEncoding, false, true); + + if (encodings.Count > 0) + { + ReferenceDescriptionCollection references = new ReferenceDescriptionCollection(); + + foreach (INode encoding in encodings) + { + ReferenceDescription reference = new ReferenceDescription(); + + reference.ReferenceTypeId = ReferenceTypeIds.HasEncoding; + reference.IsForward = true; + reference.NodeId = encoding.NodeId; + reference.NodeClass = encoding.NodeClass; + reference.BrowseName = encoding.BrowseName; + reference.DisplayName = encoding.DisplayName; + reference.TypeDefinition = encoding.TypeDefinitionId; + + references.Add(reference); + } + + return references; + } + + Browser browser = new Browser(this); + + browser.BrowseDirection = BrowseDirection.Forward; + browser.ReferenceTypeId = ReferenceTypeIds.HasEncoding; + browser.IncludeSubtypes = false; + browser.NodeClassMask = 0; + + return browser.Browse(variable.DataType); + } + + + /// + /// Returns the data description for the encoding. + /// + /// The encoding Id. + /// + public ReferenceDescription FindDataDescription(NodeId encodingId) + { + Browser browser = new Browser(this); + + browser.BrowseDirection = BrowseDirection.Forward; + browser.ReferenceTypeId = ReferenceTypeIds.HasDescription; + browser.IncludeSubtypes = false; + browser.NodeClassMask = 0; + + ReferenceDescriptionCollection references = browser.Browse(encodingId); + + if (references.Count == 0) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "Encoding does not refer to a valid data description."); + } + + return references[0]; + } + + + /// + /// Returns the data dictionary that contains the description. + /// + /// The description id. + /// + public async Task FindDataDictionary(NodeId descriptionId) + { + // check if the dictionary has already been loaded. + foreach (DataDictionary dictionary in m_dictionaries.Values) + { + if (dictionary.Contains(descriptionId)) + { + return dictionary; + } + } + + // find the dictionary for the description. + Browser browser = new Browser(this); + + browser.BrowseDirection = BrowseDirection.Inverse; + browser.ReferenceTypeId = ReferenceTypeIds.HasComponent; + browser.IncludeSubtypes = false; + browser.NodeClassMask = 0; + + ReferenceDescriptionCollection references = browser.Browse(descriptionId); + + if (references.Count == 0) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "Description does not refer to a valid data dictionary."); + } + + // load the dictionary. + NodeId dictionaryId = ExpandedNodeId.ToNodeId(references[0].NodeId, m_namespaceUris); + + DataDictionary dictionaryToLoad = new DataDictionary(this); + + await dictionaryToLoad.Load(references[0]); + + m_dictionaries[dictionaryId] = dictionaryToLoad; + + return dictionaryToLoad; + } + + /// + /// Returns the data dictionary that contains the description. + /// + /// The dictionary id. + /// + /// The dictionary. + public async Task LoadDataDictionary(ReferenceDescription dictionaryNode, bool forceReload = false) + { + // check if the dictionary has already been loaded. + DataDictionary dictionary; + NodeId dictionaryId = ExpandedNodeId.ToNodeId(dictionaryNode.NodeId, m_namespaceUris); + if (!forceReload && + m_dictionaries.TryGetValue(dictionaryId, out dictionary)) + { + return dictionary; + } + + // load the dictionary. + DataDictionary dictionaryToLoad = new DataDictionary(this); + await dictionaryToLoad.Load(dictionaryId, dictionaryNode.ToString()); + m_dictionaries[dictionaryId] = dictionaryToLoad; + return dictionaryToLoad; + } + + /// + /// Loads all dictionaries of the OPC binary or Xml schema type system. + /// + /// The type system. + /// + public async Task> LoadDataTypeSystem(NodeId dataTypeSystem = null) + { + if (dataTypeSystem == null) + { + dataTypeSystem = ObjectIds.OPCBinarySchema_TypeSystem; + } + else + if (!Utils.Equals(dataTypeSystem, ObjectIds.OPCBinarySchema_TypeSystem) && + !Utils.Equals(dataTypeSystem, ObjectIds.XmlSchema_TypeSystem)) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, $"{nameof(dataTypeSystem)} does not refer to a valid data dictionary."); + } + + // find the dictionary for the description. + Browser browser = new Browser(this); + + browser.BrowseDirection = BrowseDirection.Forward; + browser.ReferenceTypeId = ReferenceTypeIds.HasComponent; + browser.IncludeSubtypes = false; + browser.NodeClassMask = 0; + + ReferenceDescriptionCollection references = browser.Browse(dataTypeSystem); + + if (references.Count == 0) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "Type system does not contain a valid data dictionary."); + } + + // read all type dictionaries in the type system + foreach (var r in references) + { + DataDictionary dictionaryToLoad = null; + NodeId dictionaryId = ExpandedNodeId.ToNodeId(r.NodeId, m_namespaceUris); + if (dictionaryId.NamespaceIndex != 0 && + !m_dictionaries.TryGetValue(dictionaryId, out dictionaryToLoad)) + { + try + { + dictionaryToLoad = new DataDictionary(this); + await dictionaryToLoad.Load(r); + m_dictionaries[dictionaryId] = dictionaryToLoad; + } + catch (Exception ex) + { + Utils.Trace("Dictionary load error for Dictionary {0} : {1}", r.NodeId, ex.Message); + } + } + } + + return m_dictionaries; + } + + /// + /// Reads the values for the node attributes and returns a node object. + /// + /// The nodeId. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1505:AvoidUnmaintainableCode"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public Node ReadNode(NodeId nodeId) + { + // build list of attributes. + var attributes = new SortedDictionary { + { Attributes.NodeId, null }, + { Attributes.NodeClass, null }, + { Attributes.BrowseName, null }, + { Attributes.DisplayName, null }, + { Attributes.Description, null }, + { Attributes.WriteMask, null }, + { Attributes.UserWriteMask, null }, + { Attributes.DataType, null }, + { Attributes.ValueRank, null }, + { Attributes.ArrayDimensions, null }, + { Attributes.AccessLevel, null }, + { Attributes.UserAccessLevel, null }, + { Attributes.Historizing, null }, + { Attributes.MinimumSamplingInterval, null }, + { Attributes.EventNotifier, null }, + { Attributes.Executable, null }, + { Attributes.UserExecutable, null }, + { Attributes.IsAbstract, null }, + { Attributes.InverseName, null }, + { Attributes.Symmetric, null }, + { Attributes.ContainsNoLoops, null }, + { Attributes.DataTypeDefinition, null }, + { Attributes.RolePermissions, null }, + { Attributes.UserRolePermissions, null }, + { Attributes.AccessRestrictions, null }, + { Attributes.AccessLevelEx, null } + }; + + // build list of values to read. + ReadValueIdCollection itemsToRead = new ReadValueIdCollection(); + + foreach (uint attributeId in attributes.Keys) + { + ReadValueId itemToRead = new ReadValueId(); + + itemToRead.NodeId = nodeId; + itemToRead.AttributeId = attributeId; + + itemsToRead.Add(itemToRead); + } + + // read from server. + DataValueCollection values = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = Read( + null, + 0, + TimestampsToReturn.Neither, + itemsToRead, + out values, + out diagnosticInfos); + + ClientBase.ValidateResponse(values, itemsToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, itemsToRead); + + // process results. + int? nodeClass = null; + + for (int ii = 0; ii < itemsToRead.Count; ii++) + { + uint attributeId = itemsToRead[ii].AttributeId; + + // the node probably does not exist if the node class is not found. + if (attributeId == Attributes.NodeClass) + { + if (!DataValue.IsGood(values[ii])) + { + throw ServiceResultException.Create(values[ii].StatusCode, ii, diagnosticInfos, responseHeader.StringTable); + } + + // check for valid node class. + nodeClass = values[ii].Value as int?; + + if (nodeClass == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Node does not have a valid value for NodeClass: {0}.", values[ii].Value); + } + } + else + { + if (!DataValue.IsGood(values[ii])) + { + // check for unsupported attributes. + if (values[ii].StatusCode == StatusCodes.BadAttributeIdInvalid) + { + continue; + } + + // ignore errors on optional attributes + if (StatusCode.IsBad(values[ii].StatusCode)) + { + if (attributeId == Attributes.AccessRestrictions || + attributeId == Attributes.Description || + attributeId == Attributes.RolePermissions || + attributeId == Attributes.UserRolePermissions || + attributeId == Attributes.UserWriteMask || + attributeId == Attributes.WriteMask) + { + continue; + } + } + + // all supported attributes must be readable. + if (attributeId != Attributes.Value) + { + throw ServiceResultException.Create(values[ii].StatusCode, ii, diagnosticInfos, responseHeader.StringTable); + } + } + } + + attributes[attributeId] = values[ii]; + } + + Node node = null; + DataValue value = null; + + switch ((NodeClass)nodeClass.Value) + { + default: + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Node does not have a valid value for NodeClass: {0}.", nodeClass.Value); + } + + case NodeClass.Object: + { + ObjectNode objectNode = new ObjectNode(); + + value = attributes[Attributes.EventNotifier]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Object does not support the EventNotifier attribute."); + } + + objectNode.EventNotifier = (byte)attributes[Attributes.EventNotifier].GetValue(typeof(byte)); + node = objectNode; + break; + } + + case NodeClass.ObjectType: + { + ObjectTypeNode objectTypeNode = new ObjectTypeNode(); + + value = attributes[Attributes.IsAbstract]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "ObjectType does not support the IsAbstract attribute."); + } + + objectTypeNode.IsAbstract = (bool)attributes[Attributes.IsAbstract].GetValue(typeof(bool)); + node = objectTypeNode; + break; + } + + case NodeClass.Variable: + { + VariableNode variableNode = new VariableNode(); + + // DataType Attribute + value = attributes[Attributes.DataType]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Variable does not support the DataType attribute."); + } + + variableNode.DataType = (NodeId)attributes[Attributes.DataType].GetValue(typeof(NodeId)); + + // ValueRank Attribute + value = attributes[Attributes.ValueRank]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Variable does not support the ValueRank attribute."); + } + + variableNode.ValueRank = (int)attributes[Attributes.ValueRank].GetValue(typeof(int)); + + // ArrayDimensions Attribute + value = attributes[Attributes.ArrayDimensions]; + + if (value != null) + { + if (value.Value == null) + { + variableNode.ArrayDimensions = new uint[0]; + } + else + { + variableNode.ArrayDimensions = (uint[])value.GetValue(typeof(uint[])); + } + } + + // AccessLevel Attribute + value = attributes[Attributes.AccessLevel]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Variable does not support the AccessLevel attribute."); + } + + variableNode.AccessLevel = (byte)attributes[Attributes.AccessLevel].GetValue(typeof(byte)); + + // UserAccessLevel Attribute + value = attributes[Attributes.UserAccessLevel]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Variable does not support the UserAccessLevel attribute."); + } + + variableNode.UserAccessLevel = (byte)attributes[Attributes.UserAccessLevel].GetValue(typeof(byte)); + + // Historizing Attribute + value = attributes[Attributes.Historizing]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Variable does not support the Historizing attribute."); + } + + variableNode.Historizing = (bool)attributes[Attributes.Historizing].GetValue(typeof(bool)); + + // MinimumSamplingInterval Attribute + value = attributes[Attributes.MinimumSamplingInterval]; + + if (value != null) + { + variableNode.MinimumSamplingInterval = Convert.ToDouble(attributes[Attributes.MinimumSamplingInterval].Value); + } + + // AccessLevelEx Attribute + value = attributes[Attributes.AccessLevelEx]; + + if (value != null) + { + variableNode.AccessLevelEx = (uint)attributes[Attributes.AccessLevelEx].GetValue(typeof(uint)); + } + + node = variableNode; + break; + } + + case NodeClass.VariableType: + { + VariableTypeNode variableTypeNode = new VariableTypeNode(); + + // IsAbstract Attribute + value = attributes[Attributes.IsAbstract]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "VariableType does not support the IsAbstract attribute."); + } + + variableTypeNode.IsAbstract = (bool)attributes[Attributes.IsAbstract].GetValue(typeof(bool)); + + // DataType Attribute + value = attributes[Attributes.DataType]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "VariableType does not support the DataType attribute."); + } + + variableTypeNode.DataType = (NodeId)attributes[Attributes.DataType].GetValue(typeof(NodeId)); + + // ValueRank Attribute + value = attributes[Attributes.ValueRank]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "VariableType does not support the ValueRank attribute."); + } + + variableTypeNode.ValueRank = (int)attributes[Attributes.ValueRank].GetValue(typeof(int)); + + // ArrayDimensions Attribute + value = attributes[Attributes.ArrayDimensions]; + + if (value != null && value.Value != null) + { + variableTypeNode.ArrayDimensions = (uint[])attributes[Attributes.ArrayDimensions].GetValue(typeof(uint[])); + } + + node = variableTypeNode; + break; + } + + case NodeClass.Method: + { + MethodNode methodNode = new MethodNode(); + + // Executable Attribute + value = attributes[Attributes.Executable]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Method does not support the Executable attribute."); + } + + methodNode.Executable = (bool)attributes[Attributes.Executable].GetValue(typeof(bool)); + + // UserExecutable Attribute + value = attributes[Attributes.UserExecutable]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Method does not support the UserExecutable attribute."); + } + + methodNode.UserExecutable = (bool)attributes[Attributes.UserExecutable].GetValue(typeof(bool)); + + node = methodNode; + break; + } + + case NodeClass.DataType: + { + DataTypeNode dataTypeNode = new DataTypeNode(); + + // IsAbstract Attribute + value = attributes[Attributes.IsAbstract]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "DataType does not support the IsAbstract attribute."); + } + + dataTypeNode.IsAbstract = (bool)attributes[Attributes.IsAbstract].GetValue(typeof(bool)); + + // DataTypeDefinition Attribute + value = attributes[Attributes.DataTypeDefinition]; + + if (value != null) + { + dataTypeNode.DataTypeDefinition = value.Value as ExtensionObject; + } + + node = dataTypeNode; + break; + } + + case NodeClass.ReferenceType: + { + ReferenceTypeNode referenceTypeNode = new ReferenceTypeNode(); + + // IsAbstract Attribute + value = attributes[Attributes.IsAbstract]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "ReferenceType does not support the IsAbstract attribute."); + } + + referenceTypeNode.IsAbstract = (bool)attributes[Attributes.IsAbstract].GetValue(typeof(bool)); + + // Symmetric Attribute + value = attributes[Attributes.Symmetric]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "ReferenceType does not support the Symmetric attribute."); + } + + referenceTypeNode.Symmetric = (bool)attributes[Attributes.IsAbstract].GetValue(typeof(bool)); + + // InverseName Attribute + value = attributes[Attributes.InverseName]; + + if (value != null && value.Value != null) + { + referenceTypeNode.InverseName = (LocalizedText)attributes[Attributes.InverseName].GetValue(typeof(LocalizedText)); + } + + node = referenceTypeNode; + break; + } + + case NodeClass.View: + { + ViewNode viewNode = new ViewNode(); + + // EventNotifier Attribute + value = attributes[Attributes.EventNotifier]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "View does not support the EventNotifier attribute."); + } + + viewNode.EventNotifier = (byte)attributes[Attributes.EventNotifier].GetValue(typeof(byte)); + + // ContainsNoLoops Attribute + value = attributes[Attributes.ContainsNoLoops]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "View does not support the ContainsNoLoops attribute."); + } + + viewNode.ContainsNoLoops = (bool)attributes[Attributes.ContainsNoLoops].GetValue(typeof(bool)); + + node = viewNode; + break; + } + } + + // NodeId Attribute + value = attributes[Attributes.NodeId]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Node does not support the NodeId attribute."); + } + + node.NodeId = (NodeId)attributes[Attributes.NodeId].GetValue(typeof(NodeId)); + node.NodeClass = (NodeClass)nodeClass.Value; + + // BrowseName Attribute + value = attributes[Attributes.BrowseName]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Node does not support the BrowseName attribute."); + } + + node.BrowseName = (QualifiedName)attributes[Attributes.BrowseName].GetValue(typeof(QualifiedName)); + + // DisplayName Attribute + value = attributes[Attributes.DisplayName]; + + if (value == null) + { + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, "Node does not support the DisplayName attribute."); + } + + node.DisplayName = (LocalizedText)attributes[Attributes.DisplayName].GetValue(typeof(LocalizedText)); + + // all optional attributes follow + + // Description Attribute + if (attributes.TryGetValue(Attributes.Description, out value) && + value != null && value.Value != null) + { + node.Description = (LocalizedText)value.GetValue(typeof(LocalizedText)); + } + + // WriteMask Attribute + if (attributes.TryGetValue(Attributes.WriteMask, out value) && + value != null) + { + node.WriteMask = (uint)value.GetValue(typeof(uint)); + } + + // UserWriteMask Attribute + if (attributes.TryGetValue(Attributes.UserWriteMask, out value) && + value != null) + { + node.UserWriteMask = (uint)value.GetValue(typeof(uint)); + } + + // RolePermissions Attribute + if (attributes.TryGetValue(Attributes.RolePermissions, out value) && + value != null) + { + ExtensionObject[] rolePermissions = value.Value as ExtensionObject[]; + + if (rolePermissions != null) + { + node.RolePermissions = new RolePermissionTypeCollection(); + + foreach (ExtensionObject rolePermission in rolePermissions) + { + node.RolePermissions.Add(rolePermission.Body as RolePermissionType); + } + } + } + + // UserRolePermissions Attribute + if (attributes.TryGetValue(Attributes.UserRolePermissions, out value) && + value != null) + { + ExtensionObject[] userRolePermissions = value.Value as ExtensionObject[]; + + if (userRolePermissions != null) + { + node.UserRolePermissions = new RolePermissionTypeCollection(); + + foreach (ExtensionObject rolePermission in userRolePermissions) + { + node.UserRolePermissions.Add(rolePermission.Body as RolePermissionType); + } + } + } + + // AccessRestrictions Attribute + if (attributes.TryGetValue(Attributes.AccessRestrictions, out value) && + value != null) + { + node.AccessRestrictions = (ushort)value.GetValue(typeof(ushort)); + } + + return node; + } + + /// + /// Reads the value for a node. + /// + /// The node Id. + /// + public DataValue ReadValue(NodeId nodeId) + { + ReadValueId itemToRead = new ReadValueId(); + + itemToRead.NodeId = nodeId; + itemToRead.AttributeId = Attributes.Value; + + ReadValueIdCollection itemsToRead = new ReadValueIdCollection(); + itemsToRead.Add(itemToRead); + + // read from server. + DataValueCollection values = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = Read( + null, + 0, + TimestampsToReturn.Both, + itemsToRead, + out values, + out diagnosticInfos); + + ClientBase.ValidateResponse(values, itemsToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, itemsToRead); + + if (StatusCode.IsBad(values[0].StatusCode)) + { + ServiceResult result = ClientBase.GetResult(values[0].StatusCode, 0, diagnosticInfos, responseHeader); + throw new ServiceResultException(result); + } + + return values[0]; + } + + /// + /// Reads the value for a node an checks that it is the specified type. + /// + /// The node id. + /// The expected type. + /// + public object ReadValue(NodeId nodeId, Type expectedType) + { + DataValue dataValue = ReadValue(nodeId); + + object value = dataValue.Value; + + if (expectedType != null) + { + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + value = extension.Body; + } + + if (!expectedType.IsInstanceOfType(value)) + { + throw ServiceResultException.Create( + StatusCodes.BadTypeMismatch, + "Server returned value unexpected type: {0}", + (value != null) ? value.GetType().Name : "(null)"); + } + } + + return value; + } + + + /// + /// Fetches all references for the specified node. + /// + /// The node id. + /// + public ReferenceDescriptionCollection FetchReferences(NodeId nodeId) + { + // browse for all references. + byte[] continuationPoint; + ReferenceDescriptionCollection descriptions; + + Browse( + null, + null, + nodeId, + 0, + BrowseDirection.Both, + null, + true, + 0, + out continuationPoint, + out descriptions); + + // process any continuation point. + while (continuationPoint != null) + { + byte[] revisedContinuationPoint; + ReferenceDescriptionCollection additionalDescriptions; + + BrowseNext( + null, + false, + continuationPoint, + out revisedContinuationPoint, + out additionalDescriptions); + + continuationPoint = revisedContinuationPoint; + + descriptions.AddRange(additionalDescriptions); + } + + return descriptions; + } + + /// + /// Establishes a session with the server. + /// + /// The name to assign to the session. + /// The user identity. + public void Open( + string sessionName, + IUserIdentity identity) + { + Open(sessionName, 0, identity, null); + } + + /// + /// Establishes a session with the server. + /// + /// The name to assign to the session. + /// The session timeout. + /// The user identity. + /// The list of preferred locales. + public void Open( + string sessionName, + uint sessionTimeout, + IUserIdentity identity, + IList preferredLocales) + { + Open(sessionName, sessionTimeout, identity, preferredLocales, true); + } + + /// + /// Establishes a session with the server. + /// + /// The name to assign to the session. + /// The session timeout. + /// The user identity. + /// The list of preferred locales. + /// If set to true then the domain in the certificate must match the endpoint used. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public void Open( + string sessionName, + uint sessionTimeout, + IUserIdentity identity, + IList preferredLocales, + bool checkDomain) + { + // check connection state. + lock (SyncRoot) + { + if (Connected) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Already connected to server."); + } + } + + string securityPolicyUri = m_endpoint.Description.SecurityPolicyUri; + + // catch security policies which are not supported by core + if (SecurityPolicies.GetDisplayName(securityPolicyUri) == null) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "The chosen security policy is not supported by the client to connect to the server."); + } + + // get the identity token. + if (identity == null) + { + identity = new UserIdentity(); + } + + // get identity token. + UserIdentityToken identityToken = identity.GetIdentityToken(); + + // check that the user identity is supported by the endpoint. + UserTokenPolicy identityPolicy = m_endpoint.Description.FindUserTokenPolicy(identityToken.PolicyId); + + if (identityPolicy == null) + { + // try looking up by TokenType if the policy id was not found. + identityPolicy = m_endpoint.Description.FindUserTokenPolicy(identity.TokenType, identity.IssuedTokenType); + + if (identityPolicy == null) + { + throw ServiceResultException.Create( + StatusCodes.BadUserAccessDenied, + "Endpoint does not support the user identity type provided."); + } + + identityToken.PolicyId = identityPolicy.PolicyId; + } + + bool requireEncryption = securityPolicyUri != SecurityPolicies.None; + if (!requireEncryption) + { + requireEncryption = identityPolicy.SecurityPolicyUri != SecurityPolicies.None; + } + + // validate the server certificate /certificate chain. + X509Certificate2 serverCertificate = null; + byte[] certificateData = m_endpoint.Description.ServerCertificate; + + if (certificateData != null && certificateData.Length > 0) + { + X509Certificate2Collection serverCertificateChain = Utils.ParseCertificateChainBlob(certificateData); + + if (serverCertificateChain.Count > 0) + { + serverCertificate = serverCertificateChain[0]; + } + + if (requireEncryption) + { + if (checkDomain) + { + m_configuration.CertificateValidator.Validate(serverCertificateChain, m_endpoint); + } + else + { + m_configuration.CertificateValidator.Validate(serverCertificateChain); + } + // save for reconnect + m_checkDomain = checkDomain; + } + } + + // create a nonce. + uint length = (uint)m_configuration.SecurityConfiguration.NonceLength; + byte[] clientNonce = Utils.Nonce.CreateNonce(length); + NodeId sessionId = null; + NodeId sessionCookie = null; + byte[] serverNonce = new byte[0]; + byte[] serverCertificateData = new byte[0]; + SignatureData serverSignature = null; + EndpointDescriptionCollection serverEndpoints = null; + SignedSoftwareCertificateCollection serverSoftwareCertificates = null; + + // send the application instance certificate for the client. + byte[] clientCertificateData = m_instanceCertificate != null ? m_instanceCertificate.RawData : null; + byte[] clientCertificateChainData = null; + + if (m_instanceCertificateChain != null && m_instanceCertificateChain.Count > 0 && m_configuration.SecurityConfiguration.SendCertificateChain) + { + List clientCertificateChain = new List(); + + for (int i = 0; i < m_instanceCertificateChain.Count; i++) + { + clientCertificateChain.AddRange(m_instanceCertificateChain[i].RawData); + } + + clientCertificateChainData = clientCertificateChain.ToArray(); + } + + ApplicationDescription clientDescription = new ApplicationDescription(); + + clientDescription.ApplicationUri = m_configuration.ApplicationUri; + clientDescription.ApplicationName = m_configuration.ApplicationName; + clientDescription.ApplicationType = ApplicationType.Client; + clientDescription.ProductUri = m_configuration.ProductUri; + + if (sessionTimeout == 0) + { + sessionTimeout = (uint)m_configuration.ClientConfiguration.DefaultSessionTimeout; + } + + bool successCreateSession = false; + //if security none, first try to connect without certificate + if (m_endpoint.Description.SecurityPolicyUri == SecurityPolicies.None) + { + //first try to connect with client certificate NULL + try + { + CreateSession( + null, + clientDescription, + m_endpoint.Description.Server.ApplicationUri, + m_endpoint.EndpointUrl.ToString(), + sessionName, + clientNonce, + null, + sessionTimeout, + (uint)MessageContext.MaxMessageSize, + out sessionId, + out sessionCookie, + out m_sessionTimeout, + out serverNonce, + out serverCertificateData, + out serverEndpoints, + out serverSoftwareCertificates, + out serverSignature, + out m_maxRequestMessageSize); + + successCreateSession = true; + } + catch (Exception ex) + { + Utils.Trace("Create session failed with client certificate NULL. " + ex.Message); + successCreateSession = false; + } + } + + if (!successCreateSession) + { + CreateSession( + null, + clientDescription, + m_endpoint.Description.Server.ApplicationUri, + m_endpoint.EndpointUrl.ToString(), + sessionName, + clientNonce, + clientCertificateChainData != null ? clientCertificateChainData : clientCertificateData, + sessionTimeout, + (uint)MessageContext.MaxMessageSize, + out sessionId, + out sessionCookie, + out m_sessionTimeout, + out serverNonce, + out serverCertificateData, + out serverEndpoints, + out serverSoftwareCertificates, + out serverSignature, + out m_maxRequestMessageSize); + } + // save session id. + lock (SyncRoot) + { + base.SessionCreated(sessionId, sessionCookie); + } + + Utils.Trace("Revised session timeout value: {0}. ", m_sessionTimeout); + Utils.Trace("Max response message size value: {0}. Max request message size: {1} ", MessageContext.MaxMessageSize, m_maxRequestMessageSize); + + //we need to call CloseSession if CreateSession was successful but some other exception is thrown + try + { + // verify that the server returned the same instance certificate. + if (serverCertificateData != null && + m_endpoint.Description.ServerCertificate != null && + !Utils.IsEqual(serverCertificateData, m_endpoint.Description.ServerCertificate)) + { + try + { + // verify for certificate chain in endpoint. + X509Certificate2Collection serverCertificateChain = Utils.ParseCertificateChainBlob(m_endpoint.Description.ServerCertificate); + + if (serverCertificateChain.Count > 0 && !Utils.IsEqual(serverCertificateData, serverCertificateChain[0].RawData)) + { + throw ServiceResultException.Create( + StatusCodes.BadCertificateInvalid, + "Server did not return the certificate used to create the secure channel."); + } + } + catch (Exception) + { + throw ServiceResultException.Create( + StatusCodes.BadCertificateInvalid, + "Server did not return the certificate used to create the secure channel."); + } + } + + if (serverSignature == null || serverSignature.Signature == null) + { + Utils.Trace("Server signature is null or empty."); + + //throw ServiceResultException.Create( + // StatusCodes.BadSecurityChecksFailed, + // "Server signature is null or empty."); + } + + if (m_discoveryServerEndpoints != null && m_discoveryServerEndpoints.Count > 0) + { + // Compare EndpointDescriptions returned at GetEndpoints with values returned at CreateSession + EndpointDescriptionCollection expectedServerEndpoints = null; + + if (serverEndpoints != null && + m_discoveryProfileUris != null && m_discoveryProfileUris.Count > 0) + { + // Select EndpointDescriptions with a transportProfileUri that matches the + // profileUris specified in the original GetEndpoints() request. + expectedServerEndpoints = new EndpointDescriptionCollection(); + + foreach (EndpointDescription serverEndpoint in serverEndpoints) + { + if (m_discoveryProfileUris.Contains(serverEndpoint.TransportProfileUri)) + { + expectedServerEndpoints.Add(serverEndpoint); + } + } + } + else + { + expectedServerEndpoints = serverEndpoints; + } + + if (expectedServerEndpoints == null || + m_discoveryServerEndpoints.Count != expectedServerEndpoints.Count) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "Server did not return a number of ServerEndpoints that matches the one from GetEndpoints."); + } + + for (int ii = 0; ii < expectedServerEndpoints.Count; ii++) + { + EndpointDescription serverEndpoint = expectedServerEndpoints[ii]; + EndpointDescription expectedServerEndpoint = m_discoveryServerEndpoints[ii]; + + if (serverEndpoint.SecurityMode != expectedServerEndpoint.SecurityMode || + serverEndpoint.SecurityPolicyUri != expectedServerEndpoint.SecurityPolicyUri || + serverEndpoint.TransportProfileUri != expectedServerEndpoint.TransportProfileUri || + serverEndpoint.SecurityLevel != expectedServerEndpoint.SecurityLevel) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "The list of ServerEndpoints returned at CreateSession does not match the list from GetEndpoints."); + } + + if (serverEndpoint.UserIdentityTokens.Count != expectedServerEndpoint.UserIdentityTokens.Count) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "The list of ServerEndpoints returned at CreateSession does not match the one from GetEndpoints."); + } + + for (int jj = 0; jj < serverEndpoint.UserIdentityTokens.Count; jj++) + { + if (!serverEndpoint.UserIdentityTokens[jj].IsEqual(expectedServerEndpoint.UserIdentityTokens[jj])) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "The list of ServerEndpoints returned at CreateSession does not match the one from GetEndpoints."); + } + } + } + } + + // find the matching description (TBD - check domains against certificate). + bool found = false; + Uri expectedUrl = Utils.ParseUri(m_endpoint.Description.EndpointUrl); + + if (expectedUrl != null) + { + for (int ii = 0; ii < serverEndpoints.Count; ii++) + { + EndpointDescription serverEndpoint = serverEndpoints[ii]; + Uri actualUrl = Utils.ParseUri(serverEndpoint.EndpointUrl); + + if (actualUrl != null && actualUrl.Scheme == expectedUrl.Scheme) + { + if (serverEndpoint.SecurityPolicyUri == m_endpoint.Description.SecurityPolicyUri) + { + if (serverEndpoint.SecurityMode == m_endpoint.Description.SecurityMode) + { + // ensure endpoint has up to date information. + m_endpoint.Description.Server.ApplicationName = serverEndpoint.Server.ApplicationName; + m_endpoint.Description.Server.ApplicationUri = serverEndpoint.Server.ApplicationUri; + m_endpoint.Description.Server.ApplicationType = serverEndpoint.Server.ApplicationType; + m_endpoint.Description.Server.ProductUri = serverEndpoint.Server.ProductUri; + m_endpoint.Description.TransportProfileUri = serverEndpoint.TransportProfileUri; + m_endpoint.Description.UserIdentityTokens = serverEndpoint.UserIdentityTokens; + + found = true; + break; + } + } + } + } + } + + // could be a security risk. + if (!found) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "Server did not return an EndpointDescription that matched the one used to create the secure channel."); + } + + // validate the server's signature. + byte[] dataToSign = Utils.Append(clientCertificateData, clientNonce); + + if (!SecurityPolicies.Verify(serverCertificate, m_endpoint.Description.SecurityPolicyUri, dataToSign, serverSignature)) + { + // validate the signature with complete chain if the check with leaf certificate failed. + if (clientCertificateChainData != null) + { + dataToSign = Utils.Append(clientCertificateChainData, clientNonce); + + if (!SecurityPolicies.Verify(serverCertificate, m_endpoint.Description.SecurityPolicyUri, dataToSign, serverSignature)) + { + throw ServiceResultException.Create( + StatusCodes.BadApplicationSignatureInvalid, + "Server did not provide a correct signature for the nonce data provided by the client."); + } + } + else + { + throw ServiceResultException.Create( + StatusCodes.BadApplicationSignatureInvalid, + "Server did not provide a correct signature for the nonce data provided by the client."); + } + } + + // get a validator to check certificates provided by server. + CertificateValidator validator = m_configuration.CertificateValidator; + + // validate software certificates. + List softwareCertificates = new List(); + + foreach (SignedSoftwareCertificate signedCertificate in serverSoftwareCertificates) + { + SoftwareCertificate softwareCertificate = null; + + ServiceResult result = SoftwareCertificate.Validate( + validator, + signedCertificate.CertificateData, + out softwareCertificate); + + if (ServiceResult.IsBad(result)) + { + OnSoftwareCertificateError(signedCertificate, result); + } + + softwareCertificates.Add(softwareCertificate); + } + + // check if software certificates meet application requirements. + ValidateSoftwareCertificates(softwareCertificates); + + // create the client signature. + dataToSign = Utils.Append(serverCertificate != null ? serverCertificate.RawData : null, serverNonce); + SignatureData clientSignature = SecurityPolicies.Sign(m_instanceCertificate, securityPolicyUri, dataToSign); + + // select the security policy for the user token. + securityPolicyUri = identityPolicy.SecurityPolicyUri; + + if (String.IsNullOrEmpty(securityPolicyUri)) + { + securityPolicyUri = m_endpoint.Description.SecurityPolicyUri; + } + + byte[] previousServerNonce = null; + + if (TransportChannel.CurrentToken != null) + { + previousServerNonce = TransportChannel.CurrentToken.ServerNonce; + } + + // validate server nonce and security parameters for user identity. + ValidateServerNonce( + identity, + serverNonce, + securityPolicyUri, + previousServerNonce, + m_endpoint.Description.SecurityMode); + + // sign data with user token. + SignatureData userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri); + + // encrypt token. + identityToken.Encrypt(serverCertificate, serverNonce, securityPolicyUri); + + // send the software certificates assigned to the client. + SignedSoftwareCertificateCollection clientSoftwareCertificates = GetSoftwareCertificates(); + + // copy the preferred locales if provided. + if (preferredLocales != null && preferredLocales.Count > 0) + { + m_preferredLocales = new StringCollection(preferredLocales); + } + + StatusCodeCollection certificateResults = null; + DiagnosticInfoCollection certificateDiagnosticInfos = null; + + // activate session. + ActivateSession( + null, + clientSignature, + clientSoftwareCertificates, + m_preferredLocales, + new ExtensionObject(identityToken), + userTokenSignature, + out serverNonce, + out certificateResults, + out certificateDiagnosticInfos); + + if (certificateResults != null) + { + for (int i = 0; i < certificateResults.Count; i++) + { + Utils.Trace("ActivateSession result[{0}] = {1}", i, certificateResults[i]); + } + } + + if (certificateResults == null || certificateResults.Count == 0) + { + Utils.Trace("Empty results were received for the ActivateSession call."); + } + + // fetch namespaces. + FetchNamespaceTables(); + + lock (SyncRoot) + { + // save nonces. + m_sessionName = sessionName; + m_identity = identity; + m_previousServerNonce = previousServerNonce; + m_serverNonce = serverNonce; + m_serverCertificate = serverCertificate; + + // update system context. + m_systemContext.PreferredLocales = m_preferredLocales; + m_systemContext.SessionId = this.SessionId; + m_systemContext.UserIdentity = identity; + } + + // start keep alive thread. + StartKeepAliveTimer(); + } + catch (Exception) + { + try + { + CloseSession(null, false); + CloseChannel(); + } + catch (Exception e) + { + Utils.Trace("Cleanup: CloseSession() or CloseChannel() raised exception. " + e.Message); + } + finally + { + SessionCreated(null, null); + } + + throw; + } + } + + /// + /// Updates the preferred locales used for the session. + /// + /// The preferred locales. + public void ChangePreferredLocales(StringCollection preferredLocales) + { + UpdateSession(Identity, preferredLocales); + } + + /// + /// Updates the user identity and/or locales used for the session. + /// + /// The user identity. + /// The preferred locales. + public void UpdateSession(IUserIdentity identity, StringCollection preferredLocales) + { + byte[] serverNonce = null; + + lock (SyncRoot) + { + // check connection state. + if (!Connected) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Not connected to server."); + } + + // get current nonce. + serverNonce = m_serverNonce; + + if (preferredLocales == null) + { + preferredLocales = m_preferredLocales; + } + } + + // get the identity token. + UserIdentityToken identityToken = null; + SignatureData userTokenSignature = null; + + string securityPolicyUri = m_endpoint.Description.SecurityPolicyUri; + + // create the client signature. + byte[] dataToSign = Utils.Append(m_serverCertificate != null ? m_serverCertificate.RawData : null, serverNonce); + SignatureData clientSignature = SecurityPolicies.Sign(m_instanceCertificate, securityPolicyUri, dataToSign); + + // choose a default token. + if (identity == null) + { + identity = new UserIdentity(); + } + + // check that the user identity is supported by the endpoint. + UserTokenPolicy identityPolicy = m_endpoint.Description.FindUserTokenPolicy(identity.TokenType, identity.IssuedTokenType); + + if (identityPolicy == null) + { + throw ServiceResultException.Create( + StatusCodes.BadUserAccessDenied, + "Endpoint does not support the user identity type provided."); + } + + // select the security policy for the user token. + securityPolicyUri = identityPolicy.SecurityPolicyUri; + + if (String.IsNullOrEmpty(securityPolicyUri)) + { + securityPolicyUri = m_endpoint.Description.SecurityPolicyUri; + } + + bool requireEncryption = securityPolicyUri != SecurityPolicies.None; + + // validate the server certificate before encrypting tokens. + if (m_serverCertificate != null && requireEncryption && identity.TokenType != UserTokenType.Anonymous) + { + m_configuration.CertificateValidator.Validate(m_serverCertificate); + } + + // validate server nonce and security parameters for user identity. + ValidateServerNonce( + identity, + serverNonce, + securityPolicyUri, + m_previousServerNonce, + m_endpoint.Description.SecurityMode); + + // sign data with user token. + identityToken = identity.GetIdentityToken(); + identityToken.PolicyId = identityPolicy.PolicyId; + userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri); + + // encrypt token. + identityToken.Encrypt(m_serverCertificate, serverNonce, securityPolicyUri); + + // send the software certificates assigned to the client. + SignedSoftwareCertificateCollection clientSoftwareCertificates = GetSoftwareCertificates(); + + StatusCodeCollection certificateResults = null; + DiagnosticInfoCollection certificateDiagnosticInfos = null; + + // activate session. + ActivateSession( + null, + clientSignature, + clientSoftwareCertificates, + preferredLocales, + new ExtensionObject(identityToken), + userTokenSignature, + out serverNonce, + out certificateResults, + out certificateDiagnosticInfos); + + // save nonce and new values. + lock (SyncRoot) + { + if (identity != null) + { + m_identity = identity; + } + + m_previousServerNonce = m_serverNonce; + m_serverNonce = serverNonce; + m_preferredLocales = preferredLocales; + + // update system context. + m_systemContext.PreferredLocales = m_preferredLocales; + m_systemContext.SessionId = this.SessionId; + m_systemContext.UserIdentity = identity; + } + } + + /// + /// Finds the NodeIds for the components for an instance. + /// + public void FindComponentIds( + NodeId instanceId, + IList componentPaths, + out NodeIdCollection componentIds, + out List errors) + { + componentIds = new NodeIdCollection(); + errors = new List(); + + // build list of paths to translate. + BrowsePathCollection pathsToTranslate = new BrowsePathCollection(); + + for (int ii = 0; ii < componentPaths.Count; ii++) + { + BrowsePath pathToTranslate = new BrowsePath(); + + pathToTranslate.StartingNode = instanceId; + pathToTranslate.RelativePath = RelativePath.Parse(componentPaths[ii], TypeTree); + + pathsToTranslate.Add(pathToTranslate); + } + + // translate the paths. + BrowsePathResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = TranslateBrowsePathsToNodeIds( + null, + pathsToTranslate, + out results, + out diagnosticInfos); + + // verify that the server returned the correct number of results. + ClientBase.ValidateResponse(results, pathsToTranslate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, pathsToTranslate); + + for (int ii = 0; ii < componentPaths.Count; ii++) + { + componentIds.Add(NodeId.Null); + errors.Add(ServiceResult.Good); + + // process any diagnostics associated with any error. + if (StatusCode.IsBad(results[ii].StatusCode)) + { + errors[ii] = new ServiceResult(results[ii].StatusCode, ii, diagnosticInfos, responseHeader.StringTable); + continue; + } + + // Expecting exact one NodeId for a local node. + // Report an error if the server returns anything other than that. + + if (results[ii].Targets.Count == 0) + { + errors[ii] = ServiceResult.Create( + StatusCodes.BadTargetNodeIdInvalid, + "Could not find target for path: {0}.", + componentPaths[ii]); + + continue; + } + + if (results[ii].Targets.Count != 1) + { + errors[ii] = ServiceResult.Create( + StatusCodes.BadTooManyMatches, + "Too many matches found for path: {0}.", + componentPaths[ii]); + + continue; + } + + if (results[ii].Targets[0].RemainingPathIndex != UInt32.MaxValue) + { + errors[ii] = ServiceResult.Create( + StatusCodes.BadTargetNodeIdInvalid, + "Cannot follow path to external server: {0}.", + componentPaths[ii]); + + continue; + } + + if (NodeId.IsNull(results[ii].Targets[0].TargetId)) + { + errors[ii] = ServiceResult.Create( + StatusCodes.BadUnexpectedError, + "Server returned a null NodeId for path: {0}.", + componentPaths[ii]); + + continue; + } + + if (results[ii].Targets[0].TargetId.IsAbsolute) + { + errors[ii] = ServiceResult.Create( + StatusCodes.BadUnexpectedError, + "Server returned a remote node for path: {0}.", + componentPaths[ii]); + + continue; + } + + // suitable target found. + componentIds[ii] = ExpandedNodeId.ToNodeId(results[ii].Targets[0].TargetId, m_namespaceUris); + } + } + + + /// + /// Reads the values for a set of variables. + /// + /// The variable ids. + /// The expected types. + /// The list of returned values. + /// The list of returned errors. + public void ReadValues( + IList variableIds, + IList expectedTypes, + out List values, + out List errors) + { + values = new List(); + errors = new List(); + + // build list of values to read. + ReadValueIdCollection valuesToRead = new ReadValueIdCollection(); + + for (int ii = 0; ii < variableIds.Count; ii++) + { + ReadValueId valueToRead = new ReadValueId(); + + valueToRead.NodeId = variableIds[ii]; + valueToRead.AttributeId = Attributes.Value; + valueToRead.IndexRange = null; + valueToRead.DataEncoding = null; + + valuesToRead.Add(valueToRead); + } + + // read the values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = Read( + null, + 0, + TimestampsToReturn.Both, + valuesToRead, + out results, + out diagnosticInfos); + + // verify that the server returned the correct number of results. + ClientBase.ValidateResponse(results, valuesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToRead); + + for (int ii = 0; ii < variableIds.Count; ii++) + { + values.Add(null); + errors.Add(ServiceResult.Good); + + // process any diagnostics associated with bad or uncertain data. + if (StatusCode.IsNotGood(results[ii].StatusCode)) + { + errors[ii] = new ServiceResult(results[ii].StatusCode, ii, diagnosticInfos, responseHeader.StringTable); + continue; + } + + object value = results[ii].Value; + + // extract the body from extension objects. + ExtensionObject extension = value as ExtensionObject; + + if (extension != null && extension.Body is IEncodeable) + { + value = extension.Body; + } + + // check expected type. + if (expectedTypes[ii] != null && !expectedTypes[ii].IsInstanceOfType(value)) + { + errors[ii] = ServiceResult.Create( + StatusCodes.BadTypeMismatch, + "Value {0} does not have expected type: {1}.", + value, + expectedTypes[ii].Name); + + continue; + } + + // suitable value found. + values[ii] = value; + } + } + + + /// + /// Reads the display name for a set of Nodes. + /// + public void ReadDisplayName( + IList nodeIds, + out List displayNames, + out List errors) + { + displayNames = new List(); + errors = new List(); + + // build list of values to read. + ReadValueIdCollection valuesToRead = new ReadValueIdCollection(); + + for (int ii = 0; ii < nodeIds.Count; ii++) + { + ReadValueId valueToRead = new ReadValueId(); + + valueToRead.NodeId = nodeIds[ii]; + valueToRead.AttributeId = Attributes.DisplayName; + valueToRead.IndexRange = null; + valueToRead.DataEncoding = null; + + valuesToRead.Add(valueToRead); + } + + // read the values. + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + ResponseHeader responseHeader = Read( + null, + Int32.MaxValue, + TimestampsToReturn.Both, + valuesToRead, + out results, + out diagnosticInfos); + + // verify that the server returned the correct number of results. + ClientBase.ValidateResponse(results, valuesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToRead); + + for (int ii = 0; ii < nodeIds.Count; ii++) + { + displayNames.Add(String.Empty); + errors.Add(ServiceResult.Good); + + // process any diagnostics associated with bad or uncertain data. + if (StatusCode.IsNotGood(results[ii].StatusCode)) + { + errors[ii] = new ServiceResult(results[ii].StatusCode, ii, diagnosticInfos, responseHeader.StringTable); + continue; + } + + // extract the name. + LocalizedText displayName = results[ii].GetValue(null); + + if (!LocalizedText.IsNullOrEmpty(displayName)) + { + displayNames[ii] = displayName.Text; + } + } + } + #endregion + + #region Close Methods + /// + /// Disconnects from the server and frees any network resources. + /// + public override StatusCode Close() + { + return Close(m_keepAliveInterval); + } + + /// + /// Disconnects from the server and frees any network resources with the specified timeout. + /// + public virtual StatusCode Close(int timeout) + { + // check if already called. + if (Disposed) + { + return StatusCodes.Good; + } + + StatusCode result = StatusCodes.Good; + + // stop the keep alive timer. + if (m_keepAliveTimer != null) + { + m_keepAliveTimer.Dispose(); + m_keepAliveTimer = null; + } + + // check if currectly connected. + bool connected = Connected; + + // halt all background threads. + if (connected) + { + if (m_SessionClosing != null) + { + try + { + m_SessionClosing(this, null); + } + catch (Exception e) + { + Utils.Trace(e, "Session: Unexpected eror raising SessionClosing event."); + } + } + } + + // close the session with the server. + if (connected && !KeepAliveStopped) + { + int existingTimeout = this.OperationTimeout; + + try + { + // close the session and delete all subscriptions. + this.OperationTimeout = timeout; + CloseSession(null, true); + this.OperationTimeout = existingTimeout; + + CloseChannel(); + + // raised notification indicating the session is closed. + SessionCreated(null, null); + } + catch (Exception e) + { + // dont throw errors on disconnect, but return them + // so the caller can log the error. + if (e is ServiceResultException) + { + result = ((ServiceResultException)e).StatusCode; + } + else + { + result = StatusCodes.Bad; + } + + Utils.Trace("Session close error: " + result); + } + } + + // clean up. + Dispose(); + return result; + } + #endregion + + #region Subscription Methods + /// + /// Adds a subscription to the session. + /// + /// The subscription to add. + /// + public bool AddSubscription(Subscription subscription) + { + if (subscription == null) throw new ArgumentNullException(nameof(subscription)); + + lock (SyncRoot) + { + if (m_subscriptions.Contains(subscription)) + { + return false; + } + + subscription.Session = this; + m_subscriptions.Add(subscription); + } + + if (m_SubscriptionsChanged != null) + { + m_SubscriptionsChanged(this, null); + } + + return true; + } + + /// + /// Removes a subscription from the session. + /// + /// The subscription to remove. + /// + public bool RemoveSubscription(Subscription subscription) + { + if (subscription == null) throw new ArgumentNullException(nameof(subscription)); + + if (subscription.Created) + { + subscription.Delete(false); + } + + lock (SyncRoot) + { + if (!m_subscriptions.Remove(subscription)) + { + return false; + } + + subscription.Session = null; + } + + if (m_SubscriptionsChanged != null) + { + m_SubscriptionsChanged(this, null); + } + + return true; + } + + /// + /// Removes a list of subscriptions from the sessiont. + /// + /// The list of subscriptions to remove. + /// + public bool RemoveSubscriptions(IEnumerable subscriptions) + { + if (subscriptions == null) throw new ArgumentNullException(nameof(subscriptions)); + + bool removed = false; + List subscriptionsToDelete = new List(); + + lock (SyncRoot) + { + foreach (Subscription subscription in subscriptions) + { + if (m_subscriptions.Remove(subscription)) + { + if (subscription.Created) + { + subscriptionsToDelete.Add(subscription); + } + + removed = true; + } + } + } + + foreach (Subscription subscription in subscriptionsToDelete) + { + subscription.Delete(true); + } + + if (removed) + { + if (m_SubscriptionsChanged != null) + { + m_SubscriptionsChanged(this, null); + } + } + + return true; + } + #endregion + + #region Browse Methods + /// + /// Invokes the Browse service. + /// + /// The request header. + /// The view to browse. + /// The node to browse. + /// The maximum number of returned values. + /// The browse direction. + /// The reference type id. + /// If set to true the subtypes of the ReferenceType will be included in the browse. + /// The node class mask. + /// The continuation point. + /// The list of node references. + /// + public virtual ResponseHeader Browse( + RequestHeader requestHeader, + ViewDescription view, + NodeId nodeToBrowse, + uint maxResultsToReturn, + BrowseDirection browseDirection, + NodeId referenceTypeId, + bool includeSubtypes, + uint nodeClassMask, + out byte[] continuationPoint, + out ReferenceDescriptionCollection references) + { + BrowseDescription description = new BrowseDescription(); + + description.NodeId = nodeToBrowse; + description.BrowseDirection = browseDirection; + description.ReferenceTypeId = referenceTypeId; + description.IncludeSubtypes = includeSubtypes; + description.NodeClassMask = nodeClassMask; + description.ResultMask = (uint)BrowseResultMask.All; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + nodesToBrowse.Add(description); + + BrowseResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = Browse( + requestHeader, + view, + maxResultsToReturn, + nodesToBrowse, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToBrowse); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToBrowse); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(new ServiceResult(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable)); + } + + continuationPoint = results[0].ContinuationPoint; + references = results[0].References; + + return responseHeader; + } + + /// + /// Begins an asynchronous invocation of the Browse service. + /// + /// The request header. + /// The view to browse. + /// The node to browse. + /// The maximum number of returned values.. + /// The browse direction. + /// The reference type id. + /// If set to true the subtypes of the ReferenceType will be included in the browse. + /// The node class mask. + /// The callback. + /// + /// + public IAsyncResult BeginBrowse( + RequestHeader requestHeader, + ViewDescription view, + NodeId nodeToBrowse, + uint maxResultsToReturn, + BrowseDirection browseDirection, + NodeId referenceTypeId, + bool includeSubtypes, + uint nodeClassMask, + AsyncCallback callback, + object asyncState) + { + BrowseDescription description = new BrowseDescription(); + + description.NodeId = nodeToBrowse; + description.BrowseDirection = browseDirection; + description.ReferenceTypeId = referenceTypeId; + description.IncludeSubtypes = includeSubtypes; + description.NodeClassMask = nodeClassMask; + description.ResultMask = (uint)BrowseResultMask.All; + + BrowseDescriptionCollection nodesToBrowse = new BrowseDescriptionCollection(); + nodesToBrowse.Add(description); + + return BeginBrowse( + requestHeader, + view, + maxResultsToReturn, + nodesToBrowse, + callback, + asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Browse service. + /// + /// The result. + /// The continuation point. + /// The list of node references. + /// + public ResponseHeader EndBrowse( + IAsyncResult result, + out byte[] continuationPoint, + out ReferenceDescriptionCollection references) + { + BrowseResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = EndBrowse( + result, + out results, + out diagnosticInfos); + + if (results == null || results.Count != 1) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(new ServiceResult(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable)); + } + + continuationPoint = results[0].ContinuationPoint; + references = results[0].References; + + return responseHeader; + } + #endregion + + #region BrowseNext Methods + /// + /// Invokes the BrowseNext service. + /// + public virtual ResponseHeader BrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoint, + byte[] continuationPoint, + out byte[] revisedContinuationPoint, + out ReferenceDescriptionCollection references) + { + ByteStringCollection continuationPoints = new ByteStringCollection(); + continuationPoints.Add(continuationPoint); + + BrowseResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = BrowseNext( + requestHeader, + releaseContinuationPoint, + continuationPoints, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, continuationPoints); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, continuationPoints); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(new ServiceResult(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable)); + } + + revisedContinuationPoint = results[0].ContinuationPoint; + references = results[0].References; + + return responseHeader; + } + + /// + /// Begins an asynchronous invocation of the BrowseNext service. + /// + public IAsyncResult BeginBrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoint, + byte[] continuationPoint, + AsyncCallback callback, + object asyncState) + { + ByteStringCollection continuationPoints = new ByteStringCollection(); + continuationPoints.Add(continuationPoint); + + return BeginBrowseNext( + requestHeader, + releaseContinuationPoint, + continuationPoints, + callback, + asyncState); + } + + /// + /// Finishes an asynchronous invocation of the BrowseNext service. + /// + public ResponseHeader EndBrowseNext( + IAsyncResult result, + out byte[] revisedContinuationPoint, + out ReferenceDescriptionCollection references) + { + BrowseResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = EndBrowseNext( + result, + out results, + out diagnosticInfos); + + if (results == null || results.Count != 1) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw new ServiceResultException(new ServiceResult(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable)); + } + + revisedContinuationPoint = results[0].ContinuationPoint; + references = results[0].References; + + return responseHeader; + } + #endregion + + #region Call Methods + /// + /// Calls the specified method and returns the output arguments. + /// + /// The NodeId of the object that provides the method. + /// The NodeId of the method to call. + /// The input arguments. + /// The list of output argument values. + public IList Call(NodeId objectId, NodeId methodId, params object[] args) + { + VariantCollection inputArguments = new VariantCollection(); + + if (args != null) + { + for (int ii = 0; ii < args.Length; ii++) + { + inputArguments.Add(new Variant(args[ii])); + } + } + + CallMethodRequest request = new CallMethodRequest(); + + request.ObjectId = objectId; + request.MethodId = methodId; + request.InputArguments = inputArguments; + + CallMethodRequestCollection requests = new CallMethodRequestCollection(); + requests.Add(request); + + CallMethodResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = Call( + null, + requests, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, requests); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, requests); + + if (StatusCode.IsBad(results[0].StatusCode)) + { + throw ServiceResultException.Create(results[0].StatusCode, 0, diagnosticInfos, responseHeader.StringTable); + } + + List outputArguments = new List(); + + foreach (Variant arg in results[0].OutputArguments) + { + outputArguments.Add(arg.Value); + } + + return outputArguments; + } + #endregion + + #region Protected Methods + /// + /// Returns the software certificates assigned to the application. + /// + protected virtual SignedSoftwareCertificateCollection GetSoftwareCertificates() + { + return new SignedSoftwareCertificateCollection(); + } + + /// + /// Handles an error when validating the application instance certificate provided by the server. + /// + protected virtual void OnApplicationCertificateError(byte[] serverCertificate, ServiceResult result) + { + throw new ServiceResultException(result); + } + + /// + /// Handles an error when validating software certificates provided by the server. + /// + protected virtual void OnSoftwareCertificateError(SignedSoftwareCertificate signedCertificate, ServiceResult result) + { + throw new ServiceResultException(result); + } + + /// + /// Inspects the software certificates provided by the server. + /// + protected virtual void ValidateSoftwareCertificates(List softwareCertificates) + { + // always accept valid certificates. + } + + /// + /// Starts a timer to check that the connection to the server is still available. + /// + private void StartKeepAliveTimer() + { + int keepAliveInterval = m_keepAliveInterval; + + lock (m_eventLock) + { + m_serverState = ServerState.Unknown; + m_lastKeepAliveTime = DateTime.UtcNow; + } + + ReadValueIdCollection nodesToRead = new ReadValueIdCollection(); + + // read the server state. + ReadValueId serverState = new ReadValueId(); + + serverState.NodeId = Variables.Server_ServerStatus_State; + serverState.AttributeId = Attributes.Value; + serverState.DataEncoding = null; + serverState.IndexRange = null; + + nodesToRead.Add(serverState); + + // restart the publish timer. + lock (SyncRoot) + { + if (m_keepAliveTimer != null) + { + m_keepAliveTimer.Dispose(); + m_keepAliveTimer = null; + } + + // start timer. + m_keepAliveTimer = new Timer(OnKeepAlive, nodesToRead, keepAliveInterval, keepAliveInterval); + } + + // send initial keep alive. + OnKeepAlive(nodesToRead); + } + + /// + /// Removes a completed async request. + /// + private AsyncRequestState RemoveRequest(IAsyncResult result, uint requestId, uint typeId) + { + lock (m_outstandingRequests) + { + for (LinkedListNode ii = m_outstandingRequests.First; ii != null; ii = ii.Next) + { + if (Object.ReferenceEquals(result, ii.Value.Result) || (requestId == ii.Value.RequestId && typeId == ii.Value.RequestTypeId)) + { + AsyncRequestState state = ii.Value; + m_outstandingRequests.Remove(ii); + return state; + } + } + + return null; + } + } + + /// + /// Adds a new async request. + /// + private void AsyncRequestStarted(IAsyncResult result, uint requestId, uint typeId) + { + lock (m_outstandingRequests) + { + // check if the request completed asynchronously. + AsyncRequestState state = RemoveRequest(result, requestId, typeId); + + // add a new request. + if (state == null) + { + state = new AsyncRequestState(); + + state.Defunct = false; + state.RequestId = requestId; + state.RequestTypeId = typeId; + state.Result = result; + state.Timestamp = DateTime.UtcNow; + + m_outstandingRequests.AddLast(state); + } + } + } + + /// + /// Removes a completed async request. + /// + private void AsyncRequestCompleted(IAsyncResult result, uint requestId, uint typeId) + { + lock (m_outstandingRequests) + { + // remove the request. + AsyncRequestState state = RemoveRequest(result, requestId, typeId); + + if (state != null) + { + // mark any old requests as default (i.e. the should have returned before this request). + DateTime maxAge = state.Timestamp.AddSeconds(-1); + + for (LinkedListNode ii = m_outstandingRequests.First; ii != null; ii = ii.Next) + { + if (ii.Value.RequestTypeId == typeId && ii.Value.Timestamp < maxAge) + { + ii.Value.Defunct = true; + } + } + } + + // add a dummy placeholder since the begin request has not completed yet. + if (state == null) + { + state = new AsyncRequestState(); + + state.Defunct = true; + state.RequestId = requestId; + state.RequestTypeId = typeId; + state.Result = result; + state.Timestamp = DateTime.UtcNow; + + m_outstandingRequests.AddLast(state); + } + } + } + + /// + /// Sends a keep alive by reading from the server. + /// + private void OnKeepAlive(object state) + { + ReadValueIdCollection nodesToRead = (ReadValueIdCollection)state; + + try + { + // check if session has been closed. + if (!Connected || m_keepAliveTimer == null) + { + return; + } + + // raise error if keep alives are not coming back. + if (KeepAliveStopped) + { + if (!OnKeepAliveError(ServiceResult.Create(StatusCodes.BadNoCommunication, "Server not responding to keep alive requests."))) + { + return; + } + } + + RequestHeader requestHeader = new RequestHeader(); + + requestHeader.RequestHandle = Utils.IncrementIdentifier(ref m_keepAliveCounter); + requestHeader.TimeoutHint = (uint)(KeepAliveInterval * 2); + requestHeader.ReturnDiagnostics = 0; + + IAsyncResult result = BeginRead( + requestHeader, + 0, + TimestampsToReturn.Neither, + nodesToRead, + OnKeepAliveComplete, + nodesToRead); + + AsyncRequestStarted(result, requestHeader.RequestHandle, DataTypes.ReadRequest); + } + catch (Exception e) + { + Utils.Trace("Could not send keep alive request: {1} {0}", e.Message, e.GetType().FullName); + } + } + + /// + /// Checks if a notification has arrived. Sends a publish if it has not. + /// + private void OnKeepAliveComplete(IAsyncResult result) + { + ReadValueIdCollection nodesToRead = (ReadValueIdCollection)result.AsyncState; + + AsyncRequestCompleted(result, 0, DataTypes.ReadRequest); + + try + { + // read the server status. + DataValueCollection values = new DataValueCollection(); + DiagnosticInfoCollection diagnosticInfos = new DiagnosticInfoCollection(); + + ResponseHeader responseHeader = EndRead( + result, + out values, + out diagnosticInfos); + + ValidateResponse(values, nodesToRead); + ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + + // validate value returned. + ServiceResult error = ValidateDataValue(values[0], typeof(int), 0, diagnosticInfos, responseHeader); + + if (ServiceResult.IsBad(error)) + { + throw new ServiceResultException(error); + } + + // send notification that keep alive completed. + OnKeepAlive((ServerState)(int)values[0].Value, responseHeader.Timestamp); + } + catch (Exception e) + { + Utils.Trace("Unexpected keep alive error occurred: {0}", e.Message); + } + } + + /// + /// Called when the server returns a keep alive response. + /// + protected virtual void OnKeepAlive(ServerState currentState, DateTime currentTime) + { + // restart publishing if keep alives recovered. + if (KeepAliveStopped) + { + // ignore if already reconnecting. + if (m_reconnecting) + { + return; + } + + int count = 0; + + lock (m_outstandingRequests) + { + for (LinkedListNode ii = m_outstandingRequests.First; ii != null; ii = ii.Next) + { + if (ii.Value.RequestTypeId == DataTypes.PublishRequest) + { + ii.Value.Defunct = true; + } + } + } + + lock (SyncRoot) + { + count = m_subscriptions.Count; + } + + while (count-- > 0) + { + BeginPublish(OperationTimeout); + } + } + + KeepAliveEventHandler callback = null; + + lock (m_eventLock) + { + callback = m_KeepAlive; + + // save server state. + m_serverState = currentState; + m_lastKeepAliveTime = DateTime.UtcNow; + } + + if (callback != null) + { + try + { + callback(this, new KeepAliveEventArgs(null, currentState, currentTime)); + } + catch (Exception e) + { + Utils.Trace(e, "Session: Unexpected error invoking KeepAliveCallback."); + } + } + } + + /// + /// Called when a error occurs during a keep alive. + /// + protected virtual bool OnKeepAliveError(ServiceResult result) + { + long delta = 0; + + lock (m_eventLock) + { + delta = DateTime.UtcNow.Ticks - m_lastKeepAliveTime.Ticks; + } + + Utils.Trace( + "KEEP ALIVE LATE: {0}s, EndpointUrl={1}, RequestCount={3}/{2}", + ((double)delta) / TimeSpan.TicksPerSecond, + this.Endpoint.EndpointUrl, + this.OutstandingRequestCount, + this.GoodPublishRequestCount); + + KeepAliveEventHandler callback = null; + + lock (m_eventLock) + { + callback = m_KeepAlive; + } + + if (callback != null) + { + try + { + KeepAliveEventArgs args = new KeepAliveEventArgs(result, ServerState.Unknown, DateTime.UtcNow); + callback(this, args); + return !args.CancelKeepAlive; + } + catch (Exception e) + { + Utils.Trace(e, "Session: Unexpected error invoking KeepAliveCallback."); + } + } + + return true; + } + #endregion + + #region Publish Methods + /// + /// Sends an additional publish request. + /// + public IAsyncResult BeginPublish(int timeout) + { + // do not publish if reconnecting. + if (m_reconnecting) + { + Utils.Trace("Published skipped due to reconnect"); + return null; + } + + SubscriptionAcknowledgementCollection acknowledgementsToSend = null; + + // collect the current set if acknowledgements. + lock (SyncRoot) + { + acknowledgementsToSend = m_acknowledgementsToSend; + m_acknowledgementsToSend = new SubscriptionAcknowledgementCollection(); + foreach (var toSend in acknowledgementsToSend) + { + if (m_latestAcknowledgementsSent.ContainsKey(toSend.SubscriptionId)) + { + m_latestAcknowledgementsSent[toSend.SubscriptionId] = toSend.SequenceNumber; + } + else + { + m_latestAcknowledgementsSent.Add(toSend.SubscriptionId, toSend.SequenceNumber); + } + } + } + + // send publish request. + RequestHeader requestHeader = new RequestHeader(); + + // ensure the publish request is discarded before the timeout occurs to ensure the channel is dropped. + requestHeader.TimeoutHint = (uint)OperationTimeout / 2; + requestHeader.ReturnDiagnostics = (uint)(int)ReturnDiagnostics; + requestHeader.RequestHandle = Utils.IncrementIdentifier(ref m_publishCounter); + + AsyncRequestState state = new AsyncRequestState(); + + state.RequestTypeId = DataTypes.PublishRequest; + state.RequestId = requestHeader.RequestHandle; + state.Timestamp = DateTime.UtcNow; + + try + { + IAsyncResult result = BeginPublish( + requestHeader, + acknowledgementsToSend, + OnPublishComplete, + new object[] { SessionId, acknowledgementsToSend, requestHeader }); + + AsyncRequestStarted(result, requestHeader.RequestHandle, DataTypes.PublishRequest); + + Utils.Trace("PUBLISH #{0} SENT", requestHeader.RequestHandle); + + return result; + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error sending publish request."); + return null; + } + } + + /// + /// Completes an asynchronous publish operation. + /// + private void OnPublishComplete(IAsyncResult result) + { + // extract state information. + object[] state = (object[])result.AsyncState; + NodeId sessionId = (NodeId)state[0]; + SubscriptionAcknowledgementCollection acknowledgementsToSend = (SubscriptionAcknowledgementCollection)state[1]; + RequestHeader requestHeader = (RequestHeader)state[2]; + bool moreNotifications; + + AsyncRequestCompleted(result, requestHeader.RequestHandle, DataTypes.PublishRequest); + + try + { + Utils.Trace("PUBLISH #{0} RECEIVED", requestHeader.RequestHandle); + + // complete publish. + uint subscriptionId; + UInt32Collection availableSequenceNumbers; + NotificationMessage notificationMessage; + StatusCodeCollection acknowledgeResults; + DiagnosticInfoCollection acknowledgeDiagnosticInfos; + + ResponseHeader responseHeader = EndPublish( + result, + out subscriptionId, + out availableSequenceNumbers, + out moreNotifications, + out notificationMessage, + out acknowledgeResults, + out acknowledgeDiagnosticInfos); + + foreach (StatusCode code in acknowledgeResults) + { + if (StatusCode.IsBad(code)) + { + Utils.Trace("Error - Publish call finished. ResultCode={0}; SubscriptionId={1};", code.ToString(), subscriptionId); + } + } + + // nothing more to do if session changed. + if (sessionId != SessionId) + { + Utils.Trace("Publish response discarded because session id changed: Old {0} != New {1}", sessionId, SessionId); + return; + } + + Utils.Trace("NOTIFICATION RECEIVED: SubId={0}, SeqNo={1}", subscriptionId, notificationMessage.SequenceNumber); + + // process response. + ProcessPublishResponse( + responseHeader, + subscriptionId, + availableSequenceNumbers, + moreNotifications, + notificationMessage); + + // nothing more to do if reconnecting. + if (m_reconnecting) + { + Utils.Trace("No new publish sent because of reconnect in progress."); + return; + } + } + catch (Exception e) + { + if (m_subscriptions.Count == 0) + { + // Publish responses with error should occur after deleting the last subscription. + Utils.Trace("Publish #{0}, Subscription count = 0, Error: {1}", requestHeader.RequestHandle, e.Message); + } + else + { + Utils.Trace("Publish #{0}, Reconnecting={2}, Error: {1}", requestHeader.RequestHandle, e.Message, m_reconnecting); + } + + moreNotifications = false; + + // ignore errors if reconnecting. + if (m_reconnecting) + { + Utils.Trace("Publish abandoned after error due to reconnect: {0}", e.Message); + return; + } + + // nothing more to do if session changed. + if (sessionId != SessionId) + { + Utils.Trace("Publish abandoned after error because session id changed: Old {0} != New {1}", sessionId, SessionId); + return; + } + + // try to acknowledge the notifications again in the next publish. + if (acknowledgementsToSend != null) + { + lock (SyncRoot) + { + m_acknowledgementsToSend.AddRange(acknowledgementsToSend); + } + } + + // raise an error event. + ServiceResult error = new ServiceResult(e); + + if (error.Code != StatusCodes.BadNoSubscription) + { + PublishErrorEventHandler callback = null; + + lock (m_eventLock) + { + callback = m_PublishError; + } + + if (callback != null) + { + try + { + callback(this, new PublishErrorEventArgs(error)); + } + catch (Exception e2) + { + Utils.Trace(e2, "Session: Unexpected error invoking PublishErrorCallback."); + } + } + } + + // don't send another publish for these errors. + switch (error.Code) + { + case StatusCodes.BadNoSubscription: + case StatusCodes.BadSessionClosed: + case StatusCodes.BadSessionIdInvalid: + case StatusCodes.BadTooManyPublishRequests: + case StatusCodes.BadServerHalted: + { + return; + } + } + + Utils.Trace(e, "PUBLISH #{0} - Unhandled error during Publish.", requestHeader.RequestHandle); + } + + int requestCount = GoodPublishRequestCount; + + if (requestCount < m_subscriptions.Count) + { + BeginPublish(OperationTimeout); + } + else + { + Utils.Trace("PUBLISH - Did not send another publish request. GoodPublishRequestCount={0}, Subscriptions={1}", requestCount, m_subscriptions.Count); + } + } + + /// + /// Sends a republish request. + /// + public bool Republish(uint subscriptionId, uint sequenceNumber) + { + // send publish request. + RequestHeader requestHeader = new RequestHeader(); + + requestHeader.TimeoutHint = (uint)OperationTimeout; + requestHeader.ReturnDiagnostics = (uint)(int)ReturnDiagnostics; + requestHeader.RequestHandle = Utils.IncrementIdentifier(ref m_publishCounter); + + try + { + Utils.Trace("Requesting Republish for {0}-{1}", subscriptionId, sequenceNumber); + + // request republish. + NotificationMessage notificationMessage = null; + + ResponseHeader responseHeader = Republish( + requestHeader, + subscriptionId, + sequenceNumber, + out notificationMessage); + + Utils.Trace("Received Republish for {0}-{1}", subscriptionId, sequenceNumber); + + // process response. + ProcessPublishResponse( + responseHeader, + subscriptionId, + null, + false, + notificationMessage); + + return true; + } + catch (Exception e) + { + ServiceResult error = new ServiceResult(e); + + bool result = true; + switch (error.StatusCode.Code) + { + case StatusCodes.BadMessageNotAvailable: + Utils.Trace("Message {0}-{1} no longer available.", subscriptionId, sequenceNumber); + break; + // if encoding limits are exceeded, the issue is logged and + // the published data is acknoledged to prevent the endless republish loop. + case StatusCodes.BadEncodingLimitsExceeded: + Utils.Trace(e, "Message {0}-{1} exceeded size limits, ignored.", subscriptionId, sequenceNumber); + var ack = new SubscriptionAcknowledgement { + SubscriptionId = subscriptionId, + SequenceNumber = sequenceNumber + }; + lock (SyncRoot) + { + m_acknowledgementsToSend.Add(ack); + } + break; + default: + result = false; + Utils.Trace(e, "Unexpected error sending republish request."); + break; + } + + PublishErrorEventHandler callback = null; + + lock (m_eventLock) + { + callback = m_PublishError; + } + + // raise an error event. + if (callback != null) + { + try + { + PublishErrorEventArgs args = new PublishErrorEventArgs( + error, + subscriptionId, + sequenceNumber); + + callback(this, args); + } + catch (Exception e2) + { + Utils.Trace(e2, "Session: Unexpected error invoking PublishErrorCallback."); + } + } + + return result; + } + } + + /// + /// Processes the response from a publish request. + /// + private void ProcessPublishResponse( + ResponseHeader responseHeader, + uint subscriptionId, + UInt32Collection availableSequenceNumbers, + bool moreNotifications, + NotificationMessage notificationMessage) + { + Subscription subscription = null; + + // send notification that the server is alive. + OnKeepAlive(m_serverState, responseHeader.Timestamp); + + // collect the current set if acknowledgements. + lock (SyncRoot) + { + // clear out acknowledgements for messages that the server does not have any more. + SubscriptionAcknowledgementCollection acknowledgementsToSend = new SubscriptionAcknowledgementCollection(); + + for (int ii = 0; ii < m_acknowledgementsToSend.Count; ii++) + { + SubscriptionAcknowledgement acknowledgement = m_acknowledgementsToSend[ii]; + + if (acknowledgement.SubscriptionId != subscriptionId) + { + acknowledgementsToSend.Add(acknowledgement); + } + else + { + if (availableSequenceNumbers == null || availableSequenceNumbers.Contains(acknowledgement.SequenceNumber)) + { + acknowledgementsToSend.Add(acknowledgement); + } + } + } + + // create an acknowledgement to be sent back to the server. + if (notificationMessage.NotificationData.Count > 0) + { + SubscriptionAcknowledgement acknowledgement = new SubscriptionAcknowledgement(); + + acknowledgement.SubscriptionId = subscriptionId; + acknowledgement.SequenceNumber = notificationMessage.SequenceNumber; + + acknowledgementsToSend.Add(acknowledgement); + } + + uint lastSentSequenceNumber = 0; + if (availableSequenceNumbers != null) + { + foreach (uint availableSequenceNumber in availableSequenceNumbers) + { + if (m_latestAcknowledgementsSent.ContainsKey(subscriptionId)) + { + lastSentSequenceNumber = m_latestAcknowledgementsSent[subscriptionId]; + + // If the last sent sequence number is uint.Max do not display the warning; the counter rolled over + // If the last sent sequence number is greater or equal to the available sequence number (returned by the publish), a warning must be logged. + if (((lastSentSequenceNumber >= availableSequenceNumber) && (lastSentSequenceNumber != uint.MaxValue)) || + (lastSentSequenceNumber == availableSequenceNumber) && (lastSentSequenceNumber == uint.MaxValue)) + { + Utils.Trace("Received sequence number which was already acknowledged={0}", availableSequenceNumber); + } + } + } + } + + if (m_latestAcknowledgementsSent.ContainsKey(subscriptionId)) + { + lastSentSequenceNumber = m_latestAcknowledgementsSent[subscriptionId]; + + // If the last sent sequence number is uint.Max do not display the warning; the counter rolled over + // If the last sent sequence number is greater or equal to the notificationMessage's sequence number (returned by the publish), a warning must be logged. + if (((lastSentSequenceNumber >= notificationMessage.SequenceNumber) && (lastSentSequenceNumber != uint.MaxValue)) || (lastSentSequenceNumber == notificationMessage.SequenceNumber) && (lastSentSequenceNumber == uint.MaxValue)) + { + Utils.Trace("Received sequence number which was already acknowledged={0}", notificationMessage.SequenceNumber); + } + } + + if (availableSequenceNumbers != null) + { + foreach (var acknowledgement in acknowledgementsToSend) + { + if (acknowledgement.SubscriptionId == subscriptionId && !availableSequenceNumbers.Contains(acknowledgement.SequenceNumber)) + { + Utils.Trace("Sequence number={0} was not received in the available sequence numbers.", acknowledgement.SequenceNumber); + } + } + } + + m_acknowledgementsToSend = acknowledgementsToSend; + + if (notificationMessage.IsEmpty) + { + Utils.Trace("Empty notification message received for SessionId {0} with PublishTime {1}", SessionId, notificationMessage.PublishTime.ToLocalTime()); + } + + // find the subscription. + foreach (Subscription current in m_subscriptions) + { + if (current.Id == subscriptionId) + { + subscription = current; + break; + } + } + } + + // ignore messages with a subscription that has been deleted. + if (subscription != null) + { + // Validate publish time and reject old values. + if (notificationMessage.PublishTime.AddMilliseconds(subscription.CurrentPublishingInterval * subscription.CurrentLifetimeCount) < DateTime.UtcNow) + { + Utils.Trace("PublishTime {0} in publish response is too old for SubscriptionId {1}.", notificationMessage.PublishTime.ToLocalTime(), subscription.Id); + } + + // Validate publish time and reject old values. + if (notificationMessage.PublishTime > DateTime.UtcNow.AddMilliseconds(subscription.CurrentPublishingInterval * subscription.CurrentLifetimeCount)) + { + Utils.Trace("PublishTime {0} in publish response is newer than actual time for SubscriptionId {1}.", notificationMessage.PublishTime.ToLocalTime(), subscription.Id); + } + + // update subscription cache. + subscription.SaveMessageInCache( + availableSequenceNumbers, + notificationMessage, + responseHeader.StringTable); + + // raise the notification. + lock (m_eventLock) + { + NotificationEventArgs args = new NotificationEventArgs(subscription, notificationMessage, responseHeader.StringTable); + + if (m_Publish != null) + { + Task.Run(() => { + OnRaisePublishNotification(args); + }); + } + } + } + else + { + // Delete abandoned subscription from server. + Utils.Trace("Received Publish Response for Unknown SubscriptionId={0}", subscriptionId); + + Task.Run(() => { + DeleteSubscription(subscriptionId); + }); + } + } + + /// + /// Raises an event indicating that publish has returned a notification. + /// + private void OnRaisePublishNotification(object state) + { + try + { + NotificationEventArgs args = (NotificationEventArgs)state; + NotificationEventHandler callback = m_Publish; + + if (callback != null && args.Subscription.Id != 0) + { + callback(this, args); + } + } + catch (Exception e) + { + Utils.Trace(e, "Session: Unexpected error while raising Notification event."); + } + } + + /// + /// Invokes a DeleteSubscriptions call for the specified subscriptionId. + /// + private void DeleteSubscription(uint subscriptionId) + { + try + { + Utils.Trace("Deleting server subscription for SubscriptionId={0}", subscriptionId); + + // delete the subscription. + UInt32Collection subscriptionIds = new uint[] { subscriptionId }; + + StatusCodeCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = DeleteSubscriptions( + null, + subscriptionIds, + out results, + out diagnosticInfos); + + // validate response. + ClientBase.ValidateResponse(results, subscriptionIds); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, subscriptionIds); + + if (StatusCode.IsBad(results[0])) + { + throw new ServiceResultException(ClientBase.GetResult(results[0], 0, diagnosticInfos, responseHeader)); + } + } + catch (Exception e) + { + Utils.Trace(e, "Session: Unexpected error while deleting subscription for SubscriptionId={0}.", subscriptionId); + } + } + + /// + /// Load certificate chain for connection. + /// + private static async Task LoadCertificate(ApplicationConfiguration configuration) + { + X509Certificate2 clientCertificate; + if (configuration.SecurityConfiguration.ApplicationCertificate == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ApplicationCertificate must be specified."); + } + + clientCertificate = await configuration.SecurityConfiguration.ApplicationCertificate.Find(true); + + if (clientCertificate == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ApplicationCertificate cannot be found."); + } + return clientCertificate; + } + + + /// + /// Load certificate chain for connection. + /// + private static async Task LoadCertificateChain(ApplicationConfiguration configuration, X509Certificate2 clientCertificate) + { + X509Certificate2Collection clientCertificateChain = null; + // load certificate chain. + if (configuration.SecurityConfiguration.SendCertificateChain) + { + clientCertificateChain = new X509Certificate2Collection(clientCertificate); + List issuers = new List(); + await configuration.CertificateValidator.GetIssuers(clientCertificate, issuers); + + for (int i = 0; i < issuers.Count; i++) + { + clientCertificateChain.Add(issuers[i].Certificate); + } + } + return clientCertificateChain; + } + #endregion + + #region Private Fields + private SubscriptionAcknowledgementCollection m_acknowledgementsToSend; + private Dictionary m_latestAcknowledgementsSent; + private List m_subscriptions; + private Dictionary m_dictionaries; + private Subscription m_defaultSubscription; + private double m_sessionTimeout; + private uint m_maxRequestMessageSize; + private StringCollection m_preferredLocales; + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private EncodeableFactory m_factory; + private SystemContext m_systemContext; + private NodeCache m_nodeCache; + private ApplicationConfiguration m_configuration; + private ConfiguredEndpoint m_endpoint; + private X509Certificate2 m_instanceCertificate; + private X509Certificate2Collection m_instanceCertificateChain; + private bool m_checkDomain; + private List m_identityHistory; + + private string m_sessionName; + private object m_handle; + private IUserIdentity m_identity; + private byte[] m_serverNonce; + private byte[] m_previousServerNonce; + private X509Certificate2 m_serverCertificate; + private long m_publishCounter; + private DateTime m_lastKeepAliveTime; + private ServerState m_serverState; + private int m_keepAliveInterval; + private Timer m_keepAliveTimer; + private long m_keepAliveCounter; + private bool m_reconnecting; + private LinkedList m_outstandingRequests; + + private EndpointDescriptionCollection m_discoveryServerEndpoints; + private StringCollection m_discoveryProfileUris; + + private class AsyncRequestState + { + public uint RequestTypeId; + public uint RequestId; + public DateTime Timestamp; + public IAsyncResult Result; + public bool Defunct; + } + + private object m_eventLock = new object(); + private event KeepAliveEventHandler m_KeepAlive; + private event NotificationEventHandler m_Publish; + private event PublishErrorEventHandler m_PublishError; + private event EventHandler m_SubscriptionsChanged; + private event EventHandler m_SessionClosing; + #endregion + } + + #region KeepAliveEventArgs Class + /// + /// The event arguments provided when a keep alive response arrives. + /// + public class KeepAliveEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal KeepAliveEventArgs( + ServiceResult status, + ServerState currentState, + DateTime currentTime) + { + m_status = status; + m_currentState = currentState; + m_currentTime = currentTime; + } + #endregion + + #region Public Properties + /// + /// Gets the status associated with the keep alive operation. + /// + public ServiceResult Status => m_status; + + /// + /// Gets the current server state. + /// + public ServerState CurrentState => m_currentState; + + /// + /// Gets the current server time. + /// + public DateTime CurrentTime => m_currentTime; + + /// + /// Gets or sets a flag indicating whether the session should send another keep alive. + /// + public bool CancelKeepAlive + { + get { return m_cancelKeepAlive; } + set { m_cancelKeepAlive = value; } + } + #endregion + + #region Private Fields + private ServiceResult m_status; + private ServerState m_currentState; + private DateTime m_currentTime; + private bool m_cancelKeepAlive; + #endregion + } + + /// + /// The delegate used to receive keep alive notifications. + /// + public delegate void KeepAliveEventHandler(Session session, KeepAliveEventArgs e); + #endregion + + #region NotificationEventArgs Class + /// + /// Represents the event arguments provided when a new notification message arrives. + /// + public class NotificationEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal NotificationEventArgs( + Subscription subscription, + NotificationMessage notificationMessage, + IList stringTable) + { + m_subscription = subscription; + m_notificationMessage = notificationMessage; + m_stringTable = stringTable; + } + #endregion + + #region Public Properties + /// + /// Gets the subscription that the notification applies to. + /// + public Subscription Subscription => m_subscription; + + /// + /// Gets the notification message. + /// + public NotificationMessage NotificationMessage => m_notificationMessage; + + /// + /// Gets the string table returned with the notification message. + /// + public IList StringTable => m_stringTable; + #endregion + + #region Private Fields + private Subscription m_subscription; + private NotificationMessage m_notificationMessage; + private IList m_stringTable; + #endregion + } + + /// + /// The delegate used to receive publish notifications. + /// + public delegate void NotificationEventHandler(Session session, NotificationEventArgs e); + #endregion + + #region PublishErrorEventArgs Class + /// + /// Represents the event arguments provided when a publish error occurs. + /// + public class PublishErrorEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal PublishErrorEventArgs(ServiceResult status) + { + m_status = status; + } + + /// + /// Creates a new instance. + /// + internal PublishErrorEventArgs(ServiceResult status, uint subscriptionId, uint sequenceNumber) + { + m_status = status; + m_subscriptionId = subscriptionId; + m_sequenceNumber = sequenceNumber; + } + #endregion + + #region Public Properties + /// + /// Gets the status associated with the keep alive operation. + /// + public ServiceResult Status => m_status; + + /// + /// Gets the subscription with the message that could not be republished. + /// + public uint SubscriptionId => m_subscriptionId; + + /// + /// Gets the sequence number for the message that could not be republished. + /// + public uint SequenceNumber => m_sequenceNumber; + #endregion + + #region Private Fields + private uint m_subscriptionId; + private uint m_sequenceNumber; + private ServiceResult m_status; + #endregion + } + + /// + /// The delegate used to receive pubish error notifications. + /// + public delegate void PublishErrorEventHandler(Session session, PublishErrorEventArgs e); + #endregion +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/SessionReconnectHandler.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/SessionReconnectHandler.cs new file mode 100644 index 00000000..d614f6e4 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/SessionReconnectHandler.cs @@ -0,0 +1,245 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Client +{ + /// + /// Attempts to reconnect to the server. + /// + public class SessionReconnectHandler : IDisposable + { + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + if (m_reconnectTimer != null) + { + m_reconnectTimer.Dispose(); + m_reconnectTimer = null; + } + } + } + } + #endregion + + #region Public Methods + /// + /// Gets the session managed by the handler. + /// + /// The session. + public Session Session + { + get { return m_session; } + } + + /// + /// Begins the reconnect process. + /// + public void BeginReconnect(Session session, int reconnectPeriod, EventHandler callback) + { + BeginReconnect(session, null, reconnectPeriod, callback); + } + + /// + /// Begins the reconnect process using a reverse connection. + /// + public void BeginReconnect(Session session, ReverseConnectManager reverseConnectManager, int reconnectPeriod, EventHandler callback) + { + lock (m_lock) + { + if (m_reconnectTimer != null) + { + throw new ServiceResultException(StatusCodes.BadInvalidState); + } + + m_session = session; + m_reconnectFailed = false; + m_reconnectPeriod = reconnectPeriod; + m_callback = callback; + m_reverseConnectManager = reverseConnectManager; + m_reconnectTimer = new System.Threading.Timer(OnReconnect, null, reconnectPeriod, Timeout.Infinite); + } + } + + #endregion + + #region Private Methods + /// + /// Called when the reconnect timer expires. + /// + private async void OnReconnect(object state) + { + try + { + // check for exit. + if (m_reconnectTimer == null) + { + return; + } + + // do the reconnect. + if (await DoReconnect()) + { + lock (m_lock) + { + if (m_reconnectTimer != null) + { + m_reconnectTimer.Dispose(); + m_reconnectTimer = null; + } + } + + // notify the caller. + m_callback(this, null); + + return; + } + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error during reconnect."); + } + + // schedule the next reconnect. + lock (m_lock) + { + m_reconnectTimer = new System.Threading.Timer(OnReconnect, null, m_reconnectPeriod, Timeout.Infinite); + } + } + + /// + /// Reconnects to the server. + /// + private async Task DoReconnect() + { + // try a reconnect. + if (!m_reconnectFailed) + { + try + { + if (m_reverseConnectManager != null) + { + var connection = await m_reverseConnectManager.WaitForConnection( + new Uri(m_session.Endpoint.EndpointUrl), + m_session.Endpoint.Server.ApplicationUri + ); + + m_session.Reconnect(connection); + } + else + { + m_session.Reconnect(); + } + + // monitored items should start updating on their own. + return true; + } + catch (Exception exception) + { + // recreate the session if it has been closed. + ServiceResultException sre = exception as ServiceResultException; + + // check if the server endpoint could not be reached. + if ((sre != null && + (sre.StatusCode == StatusCodes.BadTcpInternalError || + sre.StatusCode == StatusCodes.BadCommunicationError || + sre.StatusCode == StatusCodes.BadNotConnected || + sre.StatusCode == StatusCodes.BadTimeout)) || + exception is System.ServiceModel.EndpointNotFoundException) + { + // check if reconnecting is still an option. + if (m_session.LastKeepAliveTime.AddMilliseconds(m_session.SessionTimeout) > DateTime.UtcNow) + { + Utils.Trace("Calling OnReconnectSession in {0} ms.", m_reconnectPeriod); + return false; + } + } + + m_reconnectFailed = true; + } + } + + // re-create the session. + try + { + Session session; + if (m_reverseConnectManager != null) + { + var connection = await m_reverseConnectManager.WaitForConnection( + new Uri(m_session.Endpoint.EndpointUrl), + m_session.Endpoint.Server.ApplicationUri + ); + + session = Session.Recreate(m_session, connection); + } + else + { + session = Session.Recreate(m_session); + } + m_session.Close(); + m_session = session; + return true; + } + catch (Exception exception) + { + Utils.Trace("Could not reconnect the Session. {0}", exception.Message); + return false; + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private Session m_session; + private bool m_reconnectFailed; + private int m_reconnectPeriod; + private Timer m_reconnectTimer; + private EventHandler m_callback; + private ReverseConnectManager m_reverseConnectManager; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Client/Subscription.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Subscription.cs new file mode 100644 index 00000000..c51025d6 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Client/Subscription.cs @@ -0,0 +1,2189 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Runtime.Serialization; +using System.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Client +{ + /// + /// A subscription + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class Subscription : IDisposable + { + #region Constructors + /// + /// Creates a empty object. + /// + public Subscription() + { + Initialize(); + } + + /// + /// Initializes the subscription from a template. + /// + public Subscription(Subscription template) : this(template, false) + { + } + + /// + /// Initializes the subscription from a template. + /// + /// The template. + /// if set to true the event handlers are copied. + public Subscription(Subscription template, bool copyEventHandlers) + { + Initialize(); + + if (template != null) + { + string displayName = template.DisplayName; + + if (String.IsNullOrEmpty(displayName)) + { + displayName = m_displayName; + } + + // remove any existing numeric suffix. + int index = displayName.LastIndexOf(' '); + + if (index != -1) + { + try + { + displayName = displayName.Substring(0, index); + } + catch + { + // not a numeric suffix. + } + } + + m_displayName = Utils.Format("{0} {1}", displayName, Utils.IncrementIdentifier(ref s_globalSubscriptionCounter)); + m_publishingInterval = template.m_publishingInterval; + m_keepAliveCount = template.m_keepAliveCount; + m_lifetimeCount = template.m_lifetimeCount; + m_minLifetimeInterval = template.m_minLifetimeInterval; + m_maxNotificationsPerPublish = template.m_maxNotificationsPerPublish; + m_publishingEnabled = template.m_publishingEnabled; + m_priority = template.m_priority; + m_timestampsToReturn = template.m_timestampsToReturn; + m_maxMessageCount = template.m_maxMessageCount; + m_defaultItem = (MonitoredItem)template.m_defaultItem.MemberwiseClone(); + m_defaultItem = template.m_defaultItem; + m_handle = template.m_handle; + m_maxMessageCount = template.m_maxMessageCount; + m_disableMonitoredItemCache = template.m_disableMonitoredItemCache; + + if (copyEventHandlers) + { + m_StateChanged = template.m_StateChanged; + m_PublishStatusChanged = template.m_PublishStatusChanged; + m_fastDataChangeCallback = template.m_fastDataChangeCallback; + m_fastEventCallback = template.m_fastEventCallback; + } + + // copy the list of monitored items. + foreach (MonitoredItem monitoredItem in template.MonitoredItems) + { + MonitoredItem clone = new MonitoredItem(monitoredItem, copyEventHandlers, true); + clone.DisplayName = monitoredItem.DisplayName; + AddItem(clone); + } + } + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + m_cache = new object(); + Initialize(); + } + + /// + /// Sets the private members to default values. + /// + private void Initialize() + { + m_id = 0; + m_displayName = "Subscription"; + m_publishingInterval = 0; + m_keepAliveCount = 0; + m_lifetimeCount = 0; + m_maxNotificationsPerPublish = 0; + m_publishingEnabled = false; + m_timestampsToReturn = TimestampsToReturn.Both; + m_maxMessageCount = 10; + m_outstandingMessageWorkers = 0; + m_messageCache = new LinkedList(); + m_monitoredItems = new SortedDictionary(); + m_deletedItems = new List(); + + m_defaultItem = new MonitoredItem(); + + m_defaultItem.DisplayName = "MonitoredItem"; + m_defaultItem.SamplingInterval = -1; + m_defaultItem.MonitoringMode = MonitoringMode.Reporting; + m_defaultItem.QueueSize = 0; + m_defaultItem.DiscardOldest = true; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_publishTimer")] + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_publishTimer); + m_publishTimer = null; + } + } + #endregion + + #region Events + /// + /// Raised to indicate that the state of the subscription has changed. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event SubscriptionStateChangedEventHandler StateChanged + { + add { m_StateChanged += value; } + remove { m_StateChanged -= value; } + } + + /// + /// Raised to indicate the publishing state for the subscription has stopped or resumed (see PublishingStopped property). + /// + public event EventHandler PublishStatusChanged + { + add + { + lock (m_cache) + { + m_PublishStatusChanged += value; + } + } + + remove + { + lock (m_cache) + { + m_PublishStatusChanged -= value; + } + } + } + #endregion + + #region Persistent Properties + /// + /// A display name for the subscription. + /// + [DataMember(Order = 1)] + public string DisplayName + { + get { return m_displayName; } + + set + { + m_displayName = value; + } + } + + /// + /// The publishing interval. + /// + [DataMember(Order = 2)] + public int PublishingInterval + { + get { return m_publishingInterval; } + set { m_publishingInterval = value; } + } + + /// + /// The keep alive count. + /// + [DataMember(Order = 3)] + public uint KeepAliveCount + { + get { return m_keepAliveCount; } + set { m_keepAliveCount = value; } + } + + /// + /// The maximum number of notifications per publish request. + /// + [DataMember(Order = 4)] + public uint LifetimeCount + { + get { return m_lifetimeCount; } + set { m_lifetimeCount = value; } + } + + /// + /// The maximum number of notifications per publish request. + /// + [DataMember(Order = 5)] + public uint MaxNotificationsPerPublish + { + get { return m_maxNotificationsPerPublish; } + set { m_maxNotificationsPerPublish = value; } + } + + /// + /// Whether publishing is enabled. + /// + [DataMember(Order = 6)] + public bool PublishingEnabled + { + get { return m_publishingEnabled; } + set { m_publishingEnabled = value; } + } + + /// + /// The priority assigned to subscription. + /// + [DataMember(Order = 7)] + public byte Priority + { + get { return m_priority; } + set { m_priority = value; } + } + + /// + /// The timestamps to return with the notification messages. + /// + [DataMember(Order = 8)] + public TimestampsToReturn TimestampsToReturn + { + get { return m_timestampsToReturn; } + set { m_timestampsToReturn = value; } + } + + /// + /// The maximum number of messages to keep in the internal cache. + /// + [DataMember(Order = 9)] + public int MaxMessageCount + { + get + { + lock (m_cache) + { + return m_maxMessageCount; + } + } + + set + { + lock (m_cache) + { + m_maxMessageCount = value; + } + } + } + + /// + /// The default monitored item. + /// + [DataMember(Order = 10)] + public MonitoredItem DefaultItem + { + get { return m_defaultItem; } + set { m_defaultItem = value; } + } + + /// + /// The minimum lifetime for subscriptions in milliseconds. + /// + [DataMember(Order = 11)] + public uint MinLifetimeInterval + { + get { return m_minLifetimeInterval; } + set { m_minLifetimeInterval = value; } + } + + /// + /// Gets or sets a value indicating whether the notifications are cached within the monitored items. + /// + /// + /// true if monitored item cache is disabled; otherwise, false. + /// + /// + /// Applications must process the Session.Notication event if this is set to true. + /// This flag improves performance by eliminating the processing involved in updating the cache. + /// + [DataMember(Order = 12)] + public bool DisableMonitoredItemCache + { + get { return m_disableMonitoredItemCache; } + set { m_disableMonitoredItemCache = value; } + } + + /// + /// Gets or sets the fast data change callback. + /// + /// The fast data change callback. + /// + /// Only one callback is allowed at a time but it is more efficient to call than an event. + /// + public FastDataChangeNotificationEventHandler FastDataChangeCallback + { + get { return m_fastDataChangeCallback; } + set { m_fastDataChangeCallback = value; } + } + + /// + /// Gets or sets the fast event callback. + /// + /// The fast event callback. + /// + /// Only one callback is allowed at a time but it is more efficient to call than an event. + /// + public FastEventNotificationEventHandler FastEventCallback + { + get { return m_fastEventCallback; } + set { m_fastEventCallback = value; } + } + + /// + /// The items to monitor. + /// + public IEnumerable MonitoredItems + { + get + { + lock (m_cache) + { + return new List(m_monitoredItems.Values); + } + } + } + + /// + /// Allows the list of monitored items to be saved/restored when the object is serialized. + /// + [DataMember(Name = "MonitoredItems", Order = 11)] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + private List SavedMonitoredItems + { + get + { + lock (m_cache) + { + return new List(m_monitoredItems.Values); + } + } + + set + { + if (this.Created) + { + throw new InvalidOperationException("Cannot update a subscription that has been created on the server."); + } + + lock (m_cache) + { + m_monitoredItems.Clear(); + + foreach (MonitoredItem monitoredItem in value) + { + AddItem(monitoredItem); + } + } + } + } + #endregion + + #region Dynamic Properties + /// + /// Returns true if the subscription has changes that need to be applied. + /// + public bool ChangesPending + { + get + { + if (m_deletedItems.Count > 0) + { + return true; + } + + foreach (MonitoredItem monitoredItem in m_monitoredItems.Values) + { + if (Created && !monitoredItem.Status.Created) + { + return true; + } + + if (monitoredItem.AttributesModified) + { + return true; + } + } + + return false; + } + } + + /// + /// Returns the number of monitored items. + /// + public uint MonitoredItemCount + { + get + { + lock (m_cache) + { + return (uint)m_monitoredItems.Count; + } + } + } + + /// + /// The session that owns the subscription item. + /// + public Session Session + { + get { return m_session; } + internal set { m_session = value; } + } + + /// + /// A local handle assigned to the subscription + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// The unique identifier assigned by the server. + /// + public uint Id + { + get { return m_id; } + } + + /// + /// Whether the subscription has been created on the server. + /// + public bool Created + { + get { return m_id != 0; } + } + + /// + /// The current publishing interval. + /// + public double CurrentPublishingInterval + { + get { return m_currentPublishingInterval; } + } + + /// + /// The current keep alive count. + /// + public uint CurrentKeepAliveCount + { + get { return m_currentKeepAliveCount; } + } + + /// + /// The current lifetime count. + /// + public uint CurrentLifetimeCount + { + get { return m_currentLifetimeCount; } + } + + /// + /// Whether publishing is currently enabled. + /// + public bool CurrentPublishingEnabled + { + get { return m_currentPublishingEnabled; } + } + + /// + /// The priority assigned to subscription when it was created. + /// + public byte CurrentPriority + { + get { return m_currentPriority; } + } + + /// + /// The when that the last notification received was published. + /// + public DateTime PublishTime + { + get + { + lock (m_cache) + { + if (m_messageCache.Count > 0) + { + return m_messageCache.Last.Value.PublishTime; + } + } + + return DateTime.MinValue; + } + } + + /// + /// The when that the last notification was received. + /// + public DateTime LastNotificationTime + { + get + { + lock (m_cache) + { + return m_lastNotificationTime; + } + } + } + + /// + /// The sequence number assigned to the last notification message. + /// + public uint SequenceNumber + { + get + { + lock (m_cache) + { + if (m_messageCache.Count > 0) + { + return m_messageCache.Last.Value.SequenceNumber; + } + } + + return 0; + } + } + + /// + /// The number of notifications contained in the last notification message. + /// + public uint NotificationCount + { + get + { + lock (m_cache) + { + if (m_messageCache.Count > 0) + { + return (uint)m_messageCache.Last.Value.NotificationData.Count; + } + } + + return 0; + } + } + + /// + /// The last notification received from the server. + /// + public NotificationMessage LastNotification + { + get + { + lock (m_cache) + { + if (m_messageCache.Count > 0) + { + return m_messageCache.Last.Value; + } + + return null; + } + } + } + + /// + /// The cached notifications. + /// + public IEnumerable Notifications + { + get + { + lock (m_cache) + { + // make a copy to ensure the state of the last cannot change during enumeration. + return new List(m_messageCache); + } + } + } + + /// + /// The sequence numbers that are available for republish requests. + /// + public IEnumerable AvailableSequenceNumbers + { + get + { + lock (m_cache) + { + return m_availableSequenceNumbers; + } + } + } + + /// + /// Sends a notification that the state of the subscription has changed. + /// + public void ChangesCompleted() + { + if (m_StateChanged != null) + { + m_StateChanged(this, new SubscriptionStateChangedEventArgs(m_changeMask)); + } + + m_changeMask = SubscriptionChangeMask.None; + } + + /// + /// Returns true if the subscription is not receiving publishes. + /// + public bool PublishingStopped + { + get + { + lock (m_cache) + { + int keepAliveInterval = (int)(Math.Min(m_currentPublishingInterval * m_currentKeepAliveCount, Int32.MaxValue - 500)); + + if (m_lastNotificationTime.AddMilliseconds(keepAliveInterval+500) < DateTime.UtcNow) + { + return true; + } + + return false; + } + } + } + #endregion + + #region Public Methods + /// + /// Ensures sensible values for the counts. + /// + private void AdjustCounts(ref uint keepAliveCount, ref uint lifetimeCount) + { + const uint kDefaultKeepAlive = 10; + const uint kDefaultLifeTime = 1000; + // keep alive count must be at least 1, 10 is a good default. + if (keepAliveCount == 0) + { + Utils.Trace("Adjusted KeepAliveCount from value={0}, to value={1}, for subscription {2}. ", keepAliveCount, kDefaultKeepAlive, Id); + keepAliveCount = kDefaultKeepAlive; + } + + // ensure the lifetime is sensible given the sampling interval. + if (m_publishingInterval > 0) + { + uint minLifetimeCount = (uint)(m_minLifetimeInterval/m_publishingInterval); + + if (lifetimeCount < minLifetimeCount) + { + lifetimeCount = minLifetimeCount; + + if (m_minLifetimeInterval%m_publishingInterval != 0) + { + lifetimeCount++; + } + + Utils.Trace("Adjusted LifetimeCount to value={0}, for subscription {1}. ", lifetimeCount, Id); + } + } + else if (lifetimeCount == 0) + { + // don't know what the sampling interval will be - use something large enough + // to ensure the user does not experience unexpected drop outs. + Utils.Trace("Adjusted LifetimeCount from value={0}, to value={1}, for subscription {2}. ", lifetimeCount, kDefaultLifeTime, Id); + lifetimeCount = kDefaultLifeTime; + } + + // validate spec: lifetimecount shall be at least 3*keepAliveCount + uint minLifeTimeCount = 3 * keepAliveCount; + if (lifetimeCount < minLifeTimeCount) + { + Utils.Trace("Adjusted LifetimeCount from value={0}, to value={1}, for subscription {2}. ", lifetimeCount, minLifeTimeCount, Id); + lifetimeCount = minLifeTimeCount; + } + } + + /// + /// Creates a subscription on the server. + /// + public void Create() + { + VerifySubscriptionState(false); + + // create the subscription. + uint subscriptionId; + double revisedPublishingInterval; + uint revisedKeepAliveCount = m_keepAliveCount; + uint revisedLifetimeCounter = m_lifetimeCount; + + AdjustCounts(ref revisedKeepAliveCount, ref revisedLifetimeCounter); + + m_session.CreateSubscription( + null, + m_publishingInterval, + revisedLifetimeCounter, + revisedKeepAliveCount, + m_maxNotificationsPerPublish, + m_publishingEnabled, + m_priority, + out subscriptionId, + out revisedPublishingInterval, + out revisedLifetimeCounter, + out revisedKeepAliveCount); + + // update current state. + m_id = subscriptionId; + m_currentPublishingInterval = revisedPublishingInterval; + m_currentKeepAliveCount = revisedKeepAliveCount; + m_currentLifetimeCount = revisedLifetimeCounter; + m_currentPublishingEnabled = m_publishingEnabled; + m_currentPriority = m_priority; + + StartKeepAliveTimer(); + + m_changeMask |= SubscriptionChangeMask.Created; + + if (m_keepAliveCount != revisedKeepAliveCount) + { + Utils.Trace("For subscription {0}, Keep alive count was revised from {1} to {2}", Id, m_keepAliveCount, revisedKeepAliveCount); + } + + if (m_lifetimeCount != revisedLifetimeCounter) + { + Utils.Trace("For subscription {0}, Lifetime count was revised from {1} to {2}", Id, m_lifetimeCount, revisedLifetimeCounter); + } + + if (m_publishingInterval != revisedPublishingInterval) + { + Utils.Trace("For subscription {0}, Publishing interval was revised from {1} to {2}", Id, m_publishingInterval, revisedPublishingInterval); + } + + if (revisedLifetimeCounter < revisedKeepAliveCount * 3) + { + Utils.Trace("For subscription {0}, Revised lifetime counter (value={1}) is less than three times the keep alive count (value={2})", Id, revisedLifetimeCounter, revisedKeepAliveCount); + } + + if (m_currentPriority == 0) + { + Utils.Trace("For subscription {0}, the priority was set to 0.", Id); + } + + CreateItems(); + + ChangesCompleted(); + } + + /// + /// Starts a timer to ensure publish requests are sent frequently enough to detect network interruptions. + /// + private void StartKeepAliveTimer() + { + // stop the publish timer. + if (m_publishTimer != null) + { + m_publishTimer.Dispose(); + m_publishTimer = null; + } + + lock (m_cache) + { + m_lastNotificationTime = DateTime.MinValue; + } + + int keepAliveInterval = (int)(Math.Min(m_currentPublishingInterval * m_currentKeepAliveCount, Int32.MaxValue)); + + m_lastNotificationTime = DateTime.UtcNow; + m_publishTimer = new Timer(OnKeepAlive, keepAliveInterval, keepAliveInterval, keepAliveInterval); + + // send initial publish. + m_session.BeginPublish(Math.Min(keepAliveInterval, Int32.MaxValue /3)*3); + } + + /// + /// Checks if a notification has arrived. Sends a publish if it has not. + /// + private void OnKeepAlive(object state) + { + // check if a publish has arrived. + EventHandler callback = null; + + lock (m_cache) + { + if (!PublishingStopped) + { + return; + } + + callback = m_PublishStatusChanged; + m_publishLateCount++; + } + + TraceState("PUBLISHING STOPPED"); + + if (callback != null) + { + try + { + callback(this, null); + } + catch (Exception e) + { + Utils.Trace(e, "Error while raising PublishStateChanged event."); + } + } + } + + /// + /// Dumps the current state of the session queue. + /// + internal void TraceState(string context) + { + if ((Utils.TraceMask & Utils.TraceMasks.Information) == 0) + { + return; + } + + StringBuilder buffer = new StringBuilder(); + + buffer.AppendFormat("Subscription {0}", context); + buffer.AppendFormat(", Id={0}", m_id); + buffer.AppendFormat(", LastNotificationTime={0:HH:mm:ss}", m_lastNotificationTime); + + if (m_session != null) + { + buffer.AppendFormat(", GoodPublishRequestCount={0}", m_session.GoodPublishRequestCount); + } + + buffer.AppendFormat(", PublishingInterval={0}", m_currentPublishingInterval); + buffer.AppendFormat(", KeepAliveCount={0}", m_currentKeepAliveCount); + buffer.AppendFormat(", PublishingEnabled={0}", m_currentPublishingEnabled); + buffer.AppendFormat(", MonitoredItemCount={0}", MonitoredItemCount); + + Utils.Trace("{0}", buffer.ToString()); + } + + /// + /// Deletes a subscription on the server. + /// + public void Delete(bool silent) + { + if (!silent) + { + VerifySubscriptionState(true); + } + + // nothing to do if not created. + if (!this.Created) + { + return; + } + + try + { + // stop the publish timer. + if (m_publishTimer != null) + { + m_publishTimer.Dispose(); + m_publishTimer = null; + } + + // delete the subscription. + UInt32Collection subscriptionIds = new uint[] { m_id }; + + StatusCodeCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.DeleteSubscriptions( + null, + subscriptionIds, + out results, + out diagnosticInfos); + + // validate response. + ClientBase.ValidateResponse(results, subscriptionIds); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, subscriptionIds); + + if (StatusCode.IsBad(results[0])) + { + throw new ServiceResultException(ClientBase.GetResult(results[0], 0, diagnosticInfos, responseHeader)); + } + } + + // supress exception if silent flag is set. + catch (Exception e) + { + if (!silent) + { + throw new ServiceResultException(e, StatusCodes.BadUnexpectedError); + } + } + + // always put object in disconnected state even if an error occurs. + finally + { + m_id = 0; + m_currentPublishingInterval = 0; + m_currentKeepAliveCount = 0; + m_currentPublishingEnabled = false; + m_currentPriority = 0; + + // update items. + lock (m_cache) + { + foreach (MonitoredItem monitoredItem in m_monitoredItems.Values) + { + monitoredItem.SetDeleteResult(StatusCodes.Good, -1, null, null); + } + } + + m_deletedItems.Clear(); + + m_changeMask |= SubscriptionChangeMask.Deleted; + } + + ChangesCompleted(); + } + + /// + /// Modifies a subscription on the server. + /// + public void Modify() + { + VerifySubscriptionState(true); + + // modify the subscription. + double revisedPublishingInterval; + uint revisedKeepAliveCount = m_keepAliveCount; + uint revisedLifetimeCounter = m_lifetimeCount; + + AdjustCounts(ref revisedKeepAliveCount, ref revisedLifetimeCounter); + + m_session.ModifySubscription( + null, + m_id, + m_publishingInterval, + revisedLifetimeCounter, + revisedKeepAliveCount, + m_maxNotificationsPerPublish, + m_priority, + out revisedPublishingInterval, + out revisedLifetimeCounter, + out revisedKeepAliveCount); + + // update current state. + m_currentPublishingInterval = revisedPublishingInterval; + m_currentKeepAliveCount = revisedKeepAliveCount; + m_currentLifetimeCount = revisedLifetimeCounter; + m_currentPriority = m_priority; + + m_changeMask |= SubscriptionChangeMask.Modified; + ChangesCompleted(); + } + + /// + /// Changes the publishing enabled state for the subscription. + /// + public void SetPublishingMode(bool enabled) + { + VerifySubscriptionState(true); + + // modify the subscription. + UInt32Collection subscriptionIds = new uint[] { m_id }; + + StatusCodeCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.SetPublishingMode( + null, + enabled, + new uint[] { m_id }, + out results, + out diagnosticInfos); + + // validate response. + ClientBase.ValidateResponse(results, subscriptionIds); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, subscriptionIds); + + if (StatusCode.IsBad(results[0])) + { + throw new ServiceResultException(ClientBase.GetResult(results[0], 0, diagnosticInfos, responseHeader)); + } + + // update current state. + m_currentPublishingEnabled = m_publishingEnabled = enabled; + + m_changeMask |= SubscriptionChangeMask.Modified; + ChangesCompleted(); + } + + /// + /// Republishes the specified notification message. + /// + public NotificationMessage Republish(uint sequenceNumber) + { + VerifySubscriptionState(true); + + NotificationMessage message; + + m_session.Republish( + null, + m_id, + sequenceNumber, + out message); + + return message; + } + + /// + /// Applies any changes to the subscription items. + /// + public void ApplyChanges() + { + DeleteItems(); + ModifyItems(); + CreateItems(); + } + + /// + /// Resolves all relative paths to nodes on the server. + /// + public void ResolveItemNodeIds() + { + VerifySubscriptionState(true); + + // collect list of browse paths. + BrowsePathCollection browsePaths = new BrowsePathCollection(); + List itemsToBrowse = new List(); + + lock (m_cache) + { + foreach (MonitoredItem monitoredItem in m_monitoredItems.Values) + { + if (!String.IsNullOrEmpty(monitoredItem.RelativePath) && NodeId.IsNull(monitoredItem.ResolvedNodeId)) + { + // cannot change the relative path after an item is created. + if (monitoredItem.Created) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Cannot modify item path after it is created."); + } + + BrowsePath browsePath = new BrowsePath(); + + browsePath.StartingNode = monitoredItem.StartNodeId; + + // parse the relative path. + try + { + browsePath.RelativePath = RelativePath.Parse(monitoredItem.RelativePath, m_session.TypeTree); + } + catch (Exception e) + { + monitoredItem.SetError(new ServiceResult(e)); + continue; + } + + browsePaths.Add(browsePath); + itemsToBrowse.Add(monitoredItem); + } + } + } + + // nothing to do. + if (browsePaths.Count == 0) + { + return; + } + + // translate browse paths. + BrowsePathResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.TranslateBrowsePathsToNodeIds( + null, + browsePaths, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, browsePaths); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, browsePaths); + + // update results. + for (int ii = 0; ii < results.Count; ii++) + { + itemsToBrowse[ii].SetResolvePathResult(results[ii], ii, diagnosticInfos, responseHeader); + } + + m_changeMask |= SubscriptionChangeMask.ItemsModified; + } + + /// + /// Creates all items that have not already been created. + /// + public IList CreateItems() + { + VerifySubscriptionState(true); + + ResolveItemNodeIds(); + + MonitoredItemCreateRequestCollection requestItems = new MonitoredItemCreateRequestCollection(); + List itemsToCreate = new List(); + + lock (m_cache) + { + foreach (MonitoredItem monitoredItem in m_monitoredItems.Values) + { + // ignore items that have been created. + if (monitoredItem.Status.Created) + { + continue; + } + + // build item request. + MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(); + + request.ItemToMonitor.NodeId = monitoredItem.ResolvedNodeId; + request.ItemToMonitor.AttributeId = monitoredItem.AttributeId; + request.ItemToMonitor.IndexRange = monitoredItem.IndexRange; + request.ItemToMonitor.DataEncoding = monitoredItem.Encoding; + + request.MonitoringMode = monitoredItem.MonitoringMode; + + request.RequestedParameters.ClientHandle = monitoredItem.ClientHandle; + request.RequestedParameters.SamplingInterval = monitoredItem.SamplingInterval; + request.RequestedParameters.QueueSize = monitoredItem.QueueSize; + request.RequestedParameters.DiscardOldest = monitoredItem.DiscardOldest; + + if (monitoredItem.Filter != null) + { + request.RequestedParameters.Filter = new ExtensionObject(monitoredItem.Filter); + } + + requestItems.Add(request); + itemsToCreate.Add(monitoredItem); + } + } + + if (requestItems.Count == 0) + { + return itemsToCreate; + } + + // modify the subscription. + MonitoredItemCreateResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.CreateMonitoredItems( + null, + m_id, + m_timestampsToReturn, + requestItems, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, itemsToCreate); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, itemsToCreate); + + // update results. + for (int ii = 0; ii < results.Count; ii++) + { + itemsToCreate[ii].SetCreateResult(requestItems[ii], results[ii], ii, diagnosticInfos, responseHeader); + } + + m_changeMask |= SubscriptionChangeMask.ItemsCreated; + ChangesCompleted(); + + // return the list of items affected by the change. + return itemsToCreate; + } + + /// + /// Modies all items that have been changed. + /// + public IList ModifyItems() + { + VerifySubscriptionState(true); + + MonitoredItemModifyRequestCollection requestItems = new MonitoredItemModifyRequestCollection(); + List itemsToModify = new List(); + + lock (m_cache) + { + foreach (MonitoredItem monitoredItem in m_monitoredItems.Values) + { + // ignore items that have been created or modified. + if (!monitoredItem.Status.Created || !monitoredItem.AttributesModified) + { + continue; + } + + // build item request. + MonitoredItemModifyRequest request = new MonitoredItemModifyRequest(); + + request.MonitoredItemId = monitoredItem.Status.Id; + request.RequestedParameters.ClientHandle = monitoredItem.ClientHandle; + request.RequestedParameters.SamplingInterval = monitoredItem.SamplingInterval; + request.RequestedParameters.QueueSize = monitoredItem.QueueSize; + request.RequestedParameters.DiscardOldest = monitoredItem.DiscardOldest; + + if (monitoredItem.Filter != null) + { + request.RequestedParameters.Filter = new ExtensionObject(monitoredItem.Filter); + } + + requestItems.Add(request); + itemsToModify.Add(monitoredItem); + } + } + + if (requestItems.Count == 0) + { + return itemsToModify; + } + + // modify the subscription. + MonitoredItemModifyResultCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.ModifyMonitoredItems( + null, + m_id, + m_timestampsToReturn, + requestItems, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, itemsToModify); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, itemsToModify); + + // update results. + for (int ii = 0; ii < results.Count; ii++) + { + itemsToModify[ii].SetModifyResult(requestItems[ii], results[ii], ii, diagnosticInfos, responseHeader); + } + + m_changeMask |= SubscriptionChangeMask.ItemsCreated; + ChangesCompleted(); + + // return the list of items affected by the change. + return itemsToModify; + } + + /// + /// Deletes all items that have been marked for deletion. + /// + public IList DeleteItems() + { + VerifySubscriptionState(true); + + if (m_deletedItems.Count == 0) + { + return new List(); + } + + List itemsToDelete = m_deletedItems; + m_deletedItems = new List(); + + UInt32Collection monitoredItemIds = new UInt32Collection(); + + foreach (MonitoredItem monitoredItem in itemsToDelete) + { + monitoredItemIds.Add(monitoredItem.Status.Id); + } + + StatusCodeCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.DeleteMonitoredItems( + null, + m_id, + monitoredItemIds, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, monitoredItemIds); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, monitoredItemIds); + + // update results. + for (int ii = 0; ii < results.Count; ii++) + { + itemsToDelete[ii].SetDeleteResult(results[ii], ii, diagnosticInfos, responseHeader); + } + + m_changeMask |= SubscriptionChangeMask.ItemsDeleted; + ChangesCompleted(); + + // return the list of items affected by the change. + return itemsToDelete; + } + + /// + /// Deletes all items that have been marked for deletion. + /// + public List SetMonitoringMode( + MonitoringMode monitoringMode, + IList monitoredItems) + { + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + + VerifySubscriptionState(true); + + if (monitoredItems.Count == 0) + { + return null; + } + + // get list of items to update. + UInt32Collection monitoredItemIds = new UInt32Collection(); + + foreach (MonitoredItem monitoredItem in monitoredItems) + { + monitoredItemIds.Add(monitoredItem.Status.Id); + } + + StatusCodeCollection results; + DiagnosticInfoCollection diagnosticInfos; + + ResponseHeader responseHeader = m_session.SetMonitoringMode( + null, + m_id, + monitoringMode, + monitoredItemIds, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, monitoredItemIds); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, monitoredItemIds); + + // update results. + bool noErrors = true; + List errors = new List(); + + for (int ii = 0; ii < results.Count; ii++) + { + ServiceResult error = null; + + if (StatusCode.IsBad(results[ii])) + { + error = ClientBase.GetResult(results[ii], ii, diagnosticInfos, responseHeader); + noErrors = false; + } + else + { + monitoredItems[ii].MonitoringMode = monitoringMode; + monitoredItems[ii].Status.SetMonitoringMode(monitoringMode); + } + + errors.Add(error); + } + + // raise state changed event. + m_changeMask |= SubscriptionChangeMask.ItemsModified; + ChangesCompleted(); + + // return null list if no errors occurred. + if (noErrors) + { + return null; + } + + return errors; + } + + /// + /// Adds the notification message to internal cache. + /// + public void SaveMessageInCache( + IList availableSequenceNumbers, + NotificationMessage message, + IList stringTable) + { + EventHandler callback = null; + + lock (m_cache) + { + if (availableSequenceNumbers != null) + { + m_availableSequenceNumbers = availableSequenceNumbers; + } + + if (message == null) + { + return; + } + + // check if a publish error was previously reported. + if (PublishingStopped) + { + callback = m_PublishStatusChanged; + TraceState("PUBLISHING RECOVERED"); + } + + m_lastNotificationTime = DateTime.UtcNow; + + // save the string table that came with notification. + message.StringTable = new List(stringTable); + + // create queue for the first time. + if (m_incomingMessages == null) + { + m_incomingMessages = new LinkedList(); + } + + // find or create an entry for the incoming sequence number. + IncomingMessage entry = null; + LinkedListNode node = m_incomingMessages.Last; + + while (node != null) + { + entry = node.Value; + LinkedListNode previous = node.Previous; + + if (entry.SequenceNumber == message.SequenceNumber) + { + entry.Timestamp = DateTime.UtcNow; + break; + } + + if (entry.SequenceNumber < message.SequenceNumber) + { + entry = new IncomingMessage(); + entry.SequenceNumber = message.SequenceNumber; + entry.Timestamp = DateTime.UtcNow; + m_incomingMessages.AddAfter(node, entry); + break; + } + + node = previous; + entry = null; + } + + if (entry == null) + { + entry = new IncomingMessage(); + entry.SequenceNumber = message.SequenceNumber; + entry.Timestamp = DateTime.UtcNow; + m_incomingMessages.AddLast(entry); + } + + // check for keep alive. + if (message.NotificationData.Count > 0) + { + entry.Message = message; + entry.Processed = false; + } + + // fill in any gaps in the queue + node = m_incomingMessages.First; + + while (node != null) + { + entry = node.Value; + LinkedListNode next = node.Next; + + if (next != null && next.Value.SequenceNumber > entry.SequenceNumber+1) + { + IncomingMessage placeholder = new IncomingMessage(); + placeholder.SequenceNumber = entry.SequenceNumber+1; + placeholder.Timestamp = DateTime.UtcNow; + node = m_incomingMessages.AddAfter(node, placeholder); + continue; + } + + node = next; + } + + // clean out processed values. + node = m_incomingMessages.First; + + while (node != null) + { + entry = node.Value; + LinkedListNode next = node.Next; + + // can only pull off processed or expired messages. + if (!entry.Processed && !(entry.Republished && entry.Timestamp.AddSeconds(10) < DateTime.UtcNow)) + { + break; + } + + if (next != null) + { + m_incomingMessages.Remove(node); + } + + node = next; + } + + // process messages. + Task.Run(() => + { + Interlocked.Increment(ref m_outstandingMessageWorkers); + OnMessageReceived(null); + }); + } + + // send notification that publishing has recovered. + if (callback != null) + { + try + { + callback(this, null); + } + catch (Exception e) + { + Utils.Trace(e, "Error while raising PublishStateChanged event."); + } + } + } + + /// + /// Processes the incoming messages. + /// + private void OnMessageReceived(object state) + { + try + { + Session session = null; + uint subscriptionId = 0; + EventHandler callback = null; + + // get list of new messages to process. + List messagesToProcess = null; + + // get list of new messages to republish. + List messagesToRepublish = null; + + lock (m_cache) + { + for (LinkedListNode ii = m_incomingMessages.First; ii != null; ii = ii.Next) + { + // update monitored items with unprocessed messages. + if (ii.Value.Message != null && !ii.Value.Processed) + { + if (messagesToProcess == null) + { + messagesToProcess = new List(); + } + + messagesToProcess.Add(ii.Value.Message); + + // remove the oldest items. + while (m_messageCache.Count > m_maxMessageCount) + { + m_messageCache.RemoveFirst(); + } + + m_messageCache.AddLast(ii.Value.Message); + ii.Value.Processed = true; + } + + // check for missing messages. + if (ii.Next != null && ii.Value.Message == null && !ii.Value.Processed && !ii.Value.Republished) + { + if (ii.Value.Timestamp.AddSeconds(2) < DateTime.UtcNow) + { + if (messagesToRepublish == null) + { + messagesToRepublish = new List(); + } + + messagesToRepublish.Add(ii.Value); + ii.Value.Republished = true; + } + } + } + + session = m_session; + subscriptionId = m_id; + callback = m_PublishStatusChanged; + } + + if (callback != null) + { + try + { + callback(this, null); + } + catch (Exception e) + { + Utils.Trace(e, "Error while raising PublishStateChanged event."); + } + } + + // process new messages. + if (messagesToProcess != null) + { + FastDataChangeNotificationEventHandler datachangeCallback = m_fastDataChangeCallback; + FastEventNotificationEventHandler eventCallback = m_fastEventCallback; + int noNotificationsReceived = 0; + + for (int ii = 0; ii < messagesToProcess.Count; ii++) + { + NotificationMessage message = messagesToProcess[ii]; + noNotificationsReceived = 0; + try + { + for (int jj = 0; jj < message.NotificationData.Count; jj++) + { + DataChangeNotification datachange = message.NotificationData[jj].Body as DataChangeNotification; + + if (datachange != null) + { + noNotificationsReceived += datachange.MonitoredItems.Count; + + if (!m_disableMonitoredItemCache) + { + SaveDataChange(message, datachange, message.StringTable); + } + + if (datachangeCallback != null) + { + datachangeCallback(this, datachange, message.StringTable); + } + } + + EventNotificationList events = message.NotificationData[jj].Body as EventNotificationList; + + if (events != null) + { + noNotificationsReceived += events.Events.Count; + + if (!m_disableMonitoredItemCache) + { + SaveEvents(message, events, message.StringTable); + } + + if (eventCallback != null) + { + eventCallback(this, events, message.StringTable); + } + } + + StatusChangeNotification statusChanged = message.NotificationData[jj].Body as StatusChangeNotification; + + if (statusChanged != null) + { + Utils.Trace("StatusChangeNotification received with Status = {0} for SubscriptionId={1}.", statusChanged.Status.ToString(), Id); + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Error while processing incoming message #{0}.", message.SequenceNumber); + } + + if (MaxNotificationsPerPublish != 0 && noNotificationsReceived > MaxNotificationsPerPublish) + { + Utils.Trace("For subscription {0}, more notifications were received={1} than the max notifications per publish value={2}", Id, noNotificationsReceived, MaxNotificationsPerPublish); + } + } + } + + // do any re-publishes. + if (messagesToRepublish != null && session != null && subscriptionId != 0) + { + for (int ii = 0; ii < messagesToRepublish.Count; ii++) + { + if (!session.Republish(subscriptionId, messagesToRepublish[ii].SequenceNumber)) + { + messagesToRepublish[ii].Republished = false; + } + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Error while processing incoming messages."); + } + finally + { + Interlocked.Decrement(ref m_outstandingMessageWorkers); + } + } + + /// + /// Get the number of outstanding message workers + /// + public int OutstandingMessageWorkers { + get { + return m_outstandingMessageWorkers; + } + } + + /// + /// Adds an item to the subscription. + /// + public void AddItem(MonitoredItem monitoredItem) + { + if (monitoredItem == null) throw new ArgumentNullException(nameof(monitoredItem)); + + lock (m_cache) + { + if (m_monitoredItems.ContainsKey(monitoredItem.ClientHandle)) + { + return; + } + + m_monitoredItems.Add(monitoredItem.ClientHandle, monitoredItem); + monitoredItem.Subscription = this; + } + + m_changeMask |= SubscriptionChangeMask.ItemsAdded; + ChangesCompleted(); + } + + /// + /// Adds an item to the subscription. + /// + public void AddItems(IEnumerable monitoredItems) + { + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + + bool added = false; + + lock (m_cache) + { + foreach (MonitoredItem monitoredItem in monitoredItems) + { + if (!m_monitoredItems.ContainsKey(monitoredItem.ClientHandle)) + { + m_monitoredItems.Add(monitoredItem.ClientHandle, monitoredItem); + monitoredItem.Subscription = this; + added = true; + } + } + } + + if (added) + { + m_changeMask |= SubscriptionChangeMask.ItemsAdded; + ChangesCompleted(); + } + } + + /// + /// Removes an item from the subscription. + /// + public void RemoveItem(MonitoredItem monitoredItem) + { + if (monitoredItem == null) throw new ArgumentNullException(nameof(monitoredItem)); + + lock (m_cache) + { + if (!m_monitoredItems.Remove(monitoredItem.ClientHandle)) + { + return; + } + + monitoredItem.Subscription = null; + } + + if (monitoredItem.Status.Created) + { + m_deletedItems.Add(monitoredItem); + } + + m_changeMask |= SubscriptionChangeMask.ItemsRemoved; + ChangesCompleted(); + } + + /// + /// Removes an item from the subscription. + /// + public void RemoveItems(IEnumerable monitoredItems) + { + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + + bool changed = false; + + lock (m_cache) + { + foreach (MonitoredItem monitoredItem in monitoredItems) + { + if (m_monitoredItems.Remove(monitoredItem.ClientHandle)) + { + monitoredItem.Subscription = null; + + if (monitoredItem.Status.Created) + { + m_deletedItems.Add(monitoredItem); + } + + changed = true; + } + } + } + + if (changed) + { + m_changeMask |= SubscriptionChangeMask.ItemsRemoved; + ChangesCompleted(); + } + } + + /// + /// Returns the monitored item identified by the client handle. + /// + public MonitoredItem FindItemByClientHandle(uint clientHandle) + { + lock (m_cache) + { + MonitoredItem monitoredItem = null; + + if (m_monitoredItems.TryGetValue(clientHandle, out monitoredItem)) + { + return monitoredItem; + } + + return null; + } + } + + /// + /// Tells the server to refresh all conditions being monitored by the subscription. + /// + public void ConditionRefresh() + { + VerifySubscriptionState(true); + + m_session.Call( + ObjectTypeIds.ConditionType, + MethodIds.ConditionType_ConditionRefresh, + m_id); + } + #endregion + + #region Private Methods + /// + /// Throws an exception if the subscription is not in the correct state. + /// + private void VerifySubscriptionState(bool created) + { + if (m_session == null) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Session has not been set."); + } + + if (created && m_id == 0) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Subscription has not been created."); + } + + if (!created && m_id != 0) + { + throw new ServiceResultException(StatusCodes.BadInvalidState, "Subscription has alredy been created."); + } + } + + /// + /// Saves a data change in the monitored item cache. + /// + private void SaveDataChange(NotificationMessage message, DataChangeNotification notifications, IList stringTable) + { + // check for empty monitored items list. + if (notifications.MonitoredItems == null || notifications.MonitoredItems.Count == 0) + { + Utils.Trace("Publish response contains empty MonitoredItems list for SubscritpionId = {0}.", m_id); + } + + for (int ii = 0; ii < notifications.MonitoredItems.Count; ii++) + { + MonitoredItemNotification notification = notifications.MonitoredItems[ii]; + + // lookup monitored item, + MonitoredItem monitoredItem = null; + + lock (m_cache) + { + if (!m_monitoredItems.TryGetValue(notification.ClientHandle, out monitoredItem)) + { + Utils.Trace("Publish response contains invalid MonitoredItem.SubscritpionId = {0}, ClientHandle = {1}", m_id, notification.ClientHandle); + continue; + } + } + + // save the message. + notification.Message = message; + + // get diagnostic info. + if (notifications.DiagnosticInfos.Count > ii) + { + notification.DiagnosticInfo = notifications.DiagnosticInfos[ii]; + } + + // save in cache. + monitoredItem.SaveValueInCache(notification); + } + } + + /// + /// Saves events in the monitored item cache. + /// + private void SaveEvents(NotificationMessage message, EventNotificationList notifications, IList stringTable) + { + for (int ii = 0; ii < notifications.Events.Count; ii++) + { + EventFieldList eventFields = notifications.Events[ii]; + + MonitoredItem monitoredItem = null; + + lock (m_cache) + { + if (!m_monitoredItems.TryGetValue(eventFields.ClientHandle, out monitoredItem)) + { + Utils.Trace("Publish response contains invalid MonitoredItem.SubscritpionId = {0}, ClientHandle = {1}", m_id, eventFields.ClientHandle); + continue; + } + } + + // save the message. + eventFields.Message = message; + + // save in cache. + monitoredItem.SaveValueInCache(eventFields); + } + } + #endregion + + #region Private Fields + private string m_displayName; + private int m_publishingInterval; + private uint m_keepAliveCount; + private uint m_lifetimeCount; + private uint m_minLifetimeInterval; + private uint m_maxNotificationsPerPublish; + private bool m_publishingEnabled; + private byte m_priority; + private TimestampsToReturn m_timestampsToReturn; + private List m_deletedItems; + private event SubscriptionStateChangedEventHandler m_StateChanged; + private MonitoredItem m_defaultItem; + private SubscriptionChangeMask m_changeMask; + + private Session m_session; + private object m_handle; + private uint m_id; + private double m_currentPublishingInterval; + private uint m_currentKeepAliveCount; + private uint m_currentLifetimeCount; + private bool m_currentPublishingEnabled; + private byte m_currentPriority; + private Timer m_publishTimer; + private DateTime m_lastNotificationTime; + private int m_publishLateCount; + private event EventHandler m_PublishStatusChanged; + + private object m_cache = new object(); + private LinkedList m_messageCache; + private IList m_availableSequenceNumbers; + private int m_maxMessageCount; + private SortedDictionary m_monitoredItems; + private bool m_disableMonitoredItemCache; + private FastDataChangeNotificationEventHandler m_fastDataChangeCallback; + private FastEventNotificationEventHandler m_fastEventCallback; + private int m_outstandingMessageWorkers; + + /// + /// A message received from the server cached until is processed or discarded. + /// + private class IncomingMessage + { + public uint SequenceNumber; + public DateTime Timestamp; + public NotificationMessage Message; + public bool Processed; + public bool Republished; + } + + private LinkedList m_incomingMessages; + + private static long s_globalSubscriptionCounter; + #endregion + } + + #region SubscriptionChangeMask Enumeration + /// + /// Flags indicating what has changed in a subscription. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1714:FlagsEnumsShouldHavePluralNames"), Flags] + public enum SubscriptionChangeMask + { + /// + /// The subscription has not changed. + /// + None = 0x00, + + /// + /// The subscription was created on the server. + /// + Created = 0x01, + + /// + /// The subscription was deleted on the server. + /// + Deleted = 0x02, + + /// + /// The subscription was modified on the server. + /// + Modified = 0x04, + + /// + /// Monitored items were added to the subscription (but not created on the server) + /// + ItemsAdded = 0x08, + + /// + /// Monitored items were removed to the subscription (but not deleted on the server) + /// + ItemsRemoved = 0x10, + + /// + /// Monitored items were created on the server. + /// + ItemsCreated = 0x20, + + /// + /// Monitored items were deleted on the server. + /// + ItemsDeleted = 0x40, + + /// + /// Monitored items were modified on the server. + /// + ItemsModified = 0x80 + } + #endregion + + /// + /// The delegate used to receive data change notifications via a direct function call instead of a .NET Event. + /// + public delegate void FastDataChangeNotificationEventHandler(Subscription subscription, DataChangeNotification notification, IList stringTable); + + /// + /// The delegate used to receive event notifications via a direct function call instead of a .NET Event. + /// + public delegate void FastEventNotificationEventHandler(Subscription subscription, EventNotificationList notification, IList stringTable); + + #region SubscriptionStateChangedEventArgs Class + /// + /// The event arguments provided when the state of a subscription changes. + /// + public class SubscriptionStateChangedEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal SubscriptionStateChangedEventArgs(SubscriptionChangeMask changeMask) + { + m_changeMask = changeMask; + } + #endregion + + #region Public Properties + /// + /// The changes that have affected the subscription. + /// + public SubscriptionChangeMask Status + { + get { return m_changeMask; } + } + #endregion + + #region Private Fields + private SubscriptionChangeMask m_changeMask; + #endregion + } + + /// + /// The delegate used to receive subscription state change notifications. + /// + public delegate void SubscriptionStateChangedEventHandler(Subscription subscription, SubscriptionStateChangedEventArgs e); + #endregion + + /// + /// A collection of subscriptions. + /// + [CollectionDataContract(Name = "ListOfSubscription", Namespace = Namespaces.OpcUaXsd, ItemName = "Subscription")] + public partial class SubscriptionCollection : List + { + #region Constructors + /// + /// Initializes an empty collection. + /// + public SubscriptionCollection() {} + + /// + /// Initializes the collection from another collection. + /// + /// The existing collection to use as the basis of creating this collection + public SubscriptionCollection(IEnumerable collection) : base(collection) {} + + /// + /// Initializes the collection with the specified capacity. + /// + /// The max. capacity of the collection + public SubscriptionCollection(int capacity) : base(capacity) {} + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Configuration/ApplicationInstance.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Configuration/ApplicationInstance.cs new file mode 100644 index 00000000..4b97d106 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Configuration/ApplicationInstance.cs @@ -0,0 +1,832 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Net; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace Opc.Ua.Configuration +{ + /// + /// Interface to create application callbacks. + /// + public abstract class IApplicationMessageDlg + { + /// + /// The application message. + /// + /// The text of the message. + /// If the application should ask the user. + public abstract void Message(string text, Boolean ask = false); + + /// + /// Show the message and return result. + /// + public abstract Task ShowAsync(); + } + + /// + /// A class that install, configures and runs a UA application. + /// + public class ApplicationInstance + { + #region Ctors + /// + /// Initializes a new instance of the class. + /// + public ApplicationInstance() + { } + + /// + /// Initializes a new instance of the class. + /// + /// The application configuration. + public ApplicationInstance(ApplicationConfiguration applicationConfiguration) + { + m_applicationConfiguration = applicationConfiguration; + } + #endregion + + #region Public Properties + /// + /// Gets or sets the name of the application. + /// + /// The name of the application. + public string ApplicationName + { + get { return m_applicationName; } + set { m_applicationName = value; } + } + + /// + /// Gets or sets the type of the application. + /// + /// The type of the application. + public ApplicationType ApplicationType + { + get { return m_applicationType; } + set { m_applicationType = value; } + } + + /// + /// Gets or sets the name of the config section containing the path to the application configuration file. + /// + /// The name of the config section. + public string ConfigSectionName + { + get { return m_configSectionName; } + set { m_configSectionName = value; } + } + + /// + /// Gets or sets the type of configuration file. + /// + /// The type of configuration file. + public Type ConfigurationType + { + get { return m_configurationType; } + set { m_configurationType = value; } + } + + /// + /// Gets the server. + /// + /// The server. + public ServerBase Server => m_server; + + /// + /// Gets the application configuration used when the Start() method was called. + /// + /// The application configuration. + public ApplicationConfiguration ApplicationConfiguration + { + get { return m_applicationConfiguration; } + set { m_applicationConfiguration = value; } + } + + /// + /// Gets or sets a flag that indicates whether the application will be set up for management with the GDS agent. + /// + /// If true the application will not be visible to the GDS local agent after installation. + public bool NoGdsAgentAdmin { get; set; } + + /// + /// Get or set the message dialog. + /// + public static IApplicationMessageDlg MessageDlg { get; set; } + + /// + /// Get or set the certificate password provider. + /// + public ICertificatePasswordProvider CertificatePasswordProvider { get; set; } + #endregion + + #region Public Methods + /// + /// Processes the command line. + /// + /// + /// True if the arguments were processed; False otherwise. + /// + public bool ProcessCommandLine() + { + // ignore processing of command line + return false; + } + + /// + /// Starts the UA server as a Windows Service. + /// + /// The server. + public void StartAsService(ServerBase server) + { + throw new NotImplementedException(".NetStandard Opc.Ua libraries do not support to start as a windows service"); + } + + /// + /// Starts the UA server. + /// + /// The server. + public async Task Start(ServerBase server) + { + m_server = server; + + if (m_applicationConfiguration == null) + { + await LoadApplicationConfiguration(false).ConfigureAwait(false); + } + + if (m_applicationConfiguration.CertificateValidator != null) + { + m_applicationConfiguration.CertificateValidator.CertificateValidation += CertificateValidator_CertificateValidation; + } + + server.Start(m_applicationConfiguration); + } + + /// + /// Stops the UA server. + /// + public void Stop() + { + m_server.Stop(); + } + #endregion + + #region Static Methods + /// + /// Helper to replace localhost with the hostname + /// in the application uri and base adresses of the + /// configuration. + /// + /// + public static ApplicationConfiguration FixupAppConfig( + ApplicationConfiguration configuration) + { + configuration.ApplicationUri = Utils.ReplaceLocalhost(configuration.ApplicationUri); + if (configuration.ServerConfiguration != null) + { + for (int i = 0; i < configuration.ServerConfiguration.BaseAddresses.Count; i++) + { + configuration.ServerConfiguration.BaseAddresses[i] = + Utils.ReplaceLocalhost(configuration.ServerConfiguration.BaseAddresses[i]); + } + } + return configuration; + } + + /// + /// Loads the configuration. + /// + public static async Task LoadAppConfig( + bool silent, + string filePath, + ApplicationType applicationType, + Type configurationType, + bool applyTraceSettings, + ICertificatePasswordProvider certificatePasswordProvider = null) + { + Utils.Trace(Utils.TraceMasks.Information, "Loading application configuration file. {0}", filePath); + + try + { + // load the configuration file. + ApplicationConfiguration configuration = await ApplicationConfiguration.Load( + new System.IO.FileInfo(filePath), + applicationType, + configurationType, + applyTraceSettings, + certificatePasswordProvider) + .ConfigureAwait(false); + + if (configuration == null) + { + return null; + } + + return configuration; + } + catch (Exception e) + { + // warn user. + if (!silent && MessageDlg != null) + { + MessageDlg.Message("Load Application Configuration: " + e.Message); + await MessageDlg.ShowAsync().ConfigureAwait(false); + } + + Utils.Trace(e, "Could not load configuration file. {0}", filePath); + return null; + } + } + + /// + /// Loads the application configuration. + /// + public async Task LoadApplicationConfiguration(string filePath, bool silent) + { + ApplicationConfiguration configuration = await LoadAppConfig( + silent, filePath, ApplicationType, ConfigurationType, true, CertificatePasswordProvider) + .ConfigureAwait(false); + + if (configuration == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "Could not load configuration file."); + } + + m_applicationConfiguration = FixupAppConfig(configuration); + + return configuration; + } + + /// + /// Loads the application configuration. + /// + public async Task LoadApplicationConfiguration(bool silent) + { + string filePath = ApplicationConfiguration.GetFilePathFromAppConfig(ConfigSectionName); + ApplicationConfiguration configuration = await LoadAppConfig( + silent, filePath, ApplicationType, ConfigurationType, true, CertificatePasswordProvider) + .ConfigureAwait(false); + + if (configuration == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "Could not load configuration file."); + } + + m_applicationConfiguration = FixupAppConfig(configuration); + + return m_applicationConfiguration; + } + + /// + /// Checks for a valid application instance certificate. + /// + /// if set to true no dialogs will be displayed. + /// Minimum size of the key. + public Task CheckApplicationInstanceCertificate( + bool silent, + ushort minimumKeySize) + { + return CheckApplicationInstanceCertificate(silent, minimumKeySize, CertificateFactory.DefaultLifeTime); + } + + /// + /// Checks for a valid application instance certificate. + /// + /// if set to true no dialogs will be displayed. + /// Minimum size of the key. + /// The lifetime in months. + public async Task CheckApplicationInstanceCertificate( + bool silent, + ushort minimumKeySize, + ushort lifeTimeInMonths) + { + Utils.Trace(Utils.TraceMasks.Information, "Checking application instance certificate."); + if (m_applicationConfiguration == null) + { + await LoadApplicationConfiguration(silent).ConfigureAwait(false); + } + + ApplicationConfiguration configuration = m_applicationConfiguration; + bool certificateValid = false; + + // find the existing certificate. + CertificateIdentifier id = configuration.SecurityConfiguration.ApplicationCertificate; + + if (id == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, + "Configuration file does not specify a certificate."); + } + + X509Certificate2 certificate = await id.Find(true).ConfigureAwait(false); + + // check that it is ok. + if (certificate != null) + { + certificateValid = await CheckApplicationInstanceCertificate(configuration, certificate, silent, minimumKeySize).ConfigureAwait(false); + } + else + { + // check for missing private key. + certificate = await id.Find(false).ConfigureAwait(false); + + if (certificate != null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, + "Cannot access certificate private key. Subject={0}", certificate.Subject); + } + + // check for missing thumbprint. + if (!String.IsNullOrEmpty(id.Thumbprint)) + { + if (!String.IsNullOrEmpty(id.SubjectName)) + { + CertificateIdentifier id2 = new CertificateIdentifier(); + id2.StoreType = id.StoreType; + id2.StorePath = id.StorePath; + id2.SubjectName = id.SubjectName; + certificate = await id2.Find(true).ConfigureAwait(false); + } + + if (certificate != null) + { + var message = new StringBuilder(); + message.AppendLine("Thumbprint was explicitly specified in the configuration."); + message.AppendLine("Another certificate with the same subject name was found."); + message.AppendLine("Use it instead?"); + message.AppendLine("Requested: {0}"); + message.AppendLine("Found: {1}"); + if (!await ApproveMessage(String.Format(message.ToString(), id.SubjectName, certificate.Subject), silent)) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, + message.ToString(), id.SubjectName, certificate.Subject); + } + } + else + { + var message = new StringBuilder(); + message.AppendLine("Thumbprint was explicitly specified in the configuration. "); + message.AppendLine("Cannot generate a new certificate."); + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, message.ToString()); + } + } + } + + if ((certificate == null) || !certificateValid) + { + certificate = await CreateApplicationInstanceCertificate(configuration, + minimumKeySize, lifeTimeInMonths); + + if (certificate == null) + { + var message = new StringBuilder(); + message.AppendLine("There is no cert with subject {0} in the configuration."); + message.AppendLine(" Please generate a cert for your application,"); + message.AppendLine(" then copy the new cert to this location:"); + message.AppendLine(" {1}"); + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, + message.ToString(), id.SubjectName, id.StorePath + ); + } + } + else + { + if (configuration.SecurityConfiguration.AddAppCertToTrustedStore) + { + // ensure it is trusted. + await AddToTrustedStore(configuration, certificate); + } + } + + return true; + } + #endregion + + #region Private Methods + /// + /// Handles a certificate validation error. + /// + private void CertificateValidator_CertificateValidation(CertificateValidator validator, CertificateValidationEventArgs e) + { + try + { + if (m_applicationConfiguration.SecurityConfiguration != null + && m_applicationConfiguration.SecurityConfiguration.AutoAcceptUntrustedCertificates + && e.Error != null && e.Error.Code == StatusCodes.BadCertificateUntrusted) + { + e.Accept = true; + Utils.Trace((int)Utils.TraceMasks.Security, "Automatically accepted certificate: {0}", e.Certificate.Subject); + } + } + catch (Exception exception) + { + Utils.Trace(exception, "Error accepting certificate."); + } + } + + /// + /// Creates an application instance certificate if one does not already exist. + /// + private static async Task CheckApplicationInstanceCertificate( + ApplicationConfiguration configuration, + X509Certificate2 certificate, + bool silent, + ushort minimumKeySize) + { + if (certificate == null) + { + return false; + } + + Utils.Trace(Utils.TraceMasks.Information, "Checking application instance certificate. {0}", certificate.Subject); + + try + { + // validate certificate. + configuration.CertificateValidator.Validate(certificate); + } + catch (Exception ex) + { + string message = Utils.Format( + "Error validating certificate. Exception: {0}. Use certificate anyway?", ex.Message); + if (!await ApproveMessage(message, silent)) + { + return false; + } + } + + // check key size. + int keySize = X509Utils.GetRSAPublicKeySize(certificate); + if (minimumKeySize > keySize) + { + string message = Utils.Format( + "The key size ({0}) in the certificate is less than the minimum provided ({1}). Use certificate anyway?", + keySize, + minimumKeySize); + + if (!await ApproveMessage(message, silent)) + { + return false; + } + } + + // check domains. + if (configuration.ApplicationType != ApplicationType.Client) + { + if (!await CheckDomainsInCertificate(configuration, certificate, silent)) + { + return false; + } + } + + // check uri. + string applicationUri = X509Utils.GetApplicationUriFromCertificate(certificate); + + if (String.IsNullOrEmpty(applicationUri)) + { + string message = "The Application URI could not be read from the certificate. Use certificate anyway?"; + if (!await ApproveMessage(message, silent)) + { + return false; + } + } + else + { + configuration.ApplicationUri = applicationUri; + } + + // update configuration. + configuration.SecurityConfiguration.ApplicationCertificate.Certificate = certificate; + + return true; + } + + /// + /// Checks that the domains in the server addresses match the domains in the certificates. + /// + private static async Task CheckDomainsInCertificate( + ApplicationConfiguration configuration, + X509Certificate2 certificate, + bool silent) + { + Utils.Trace(Utils.TraceMasks.Information, "Checking domains in certificate. {0}", certificate.Subject); + + bool valid = true; + IList serverDomainNames = configuration.GetServerDomainNames(); + IList certificateDomainNames = X509Utils.GetDomainsFromCertficate(certificate); + + // get computer name. + string computerName = Utils.GetHostName(); + + // get IP addresses. + IPAddress[] addresses = null; + + for (int ii = 0; ii < serverDomainNames.Count; ii++) + { + if (Utils.FindStringIgnoreCase(certificateDomainNames, serverDomainNames[ii])) + { + continue; + } + + if (String.Compare(serverDomainNames[ii], "localhost", StringComparison.OrdinalIgnoreCase) == 0) + { + if (Utils.FindStringIgnoreCase(certificateDomainNames, computerName)) + { + continue; + } + + // check for aliases. + bool found = false; + + // get IP addresses only if necessary. + if (addresses == null) + { + addresses = await Utils.GetHostAddressesAsync(computerName); + } + + // check for ip addresses. + for (int jj = 0; jj < addresses.Length; jj++) + { + if (Utils.FindStringIgnoreCase(certificateDomainNames, addresses[jj].ToString())) + { + found = true; + break; + } + } + + if (found) + { + continue; + } + } + + string message = Utils.Format( + "The server is configured to use domain '{0}' which does not appear in the certificate. Use certificate anyway?", + serverDomainNames[ii]); + + valid = false; + + if (await ApproveMessage(message, silent)) + { + valid = true; + continue; + } + + break; + } + + return valid; + } + + /// + /// Creates the application instance certificate. + /// + /// The configuration. + /// Size of the key. + /// The lifetime in months. + /// The new certificate + private static async Task CreateApplicationInstanceCertificate( + ApplicationConfiguration configuration, + ushort keySize, + ushort lifeTimeInMonths + ) + { + Utils.Trace(Utils.TraceMasks.Information, "Creating application instance certificate."); + + // delete any existing certificate. + await DeleteApplicationInstanceCertificate(configuration); + + CertificateIdentifier id = configuration.SecurityConfiguration.ApplicationCertificate; + + // get the domains from the configuration file. + IList serverDomainNames = configuration.GetServerDomainNames(); + + if (serverDomainNames.Count == 0) + { + serverDomainNames.Add(Utils.GetHostName()); + } + + // ensure the certificate store directory exists. + if (id.StoreType == CertificateStoreType.Directory) + { + Utils.GetAbsoluteDirectoryPath(id.StorePath, true, true, true); + } + + X509Certificate2 certificate = CertificateFactory.CreateCertificate( + configuration.ApplicationUri, + configuration.ApplicationName, + id.SubjectName, + serverDomainNames) + .SetLifeTime(lifeTimeInMonths) + .SetRSAKeySize(keySize) + .CreateForRSA(); + + id.Certificate = certificate; + var passwordProvider = configuration.SecurityConfiguration.CertificatePasswordProvider; + certificate.AddToStore( + id.StoreType, + id.StorePath, + passwordProvider?.GetPassword(id) + ); + + // ensure the certificate is trusted. + if (configuration.SecurityConfiguration.AddAppCertToTrustedStore) + { + await AddToTrustedStore(configuration, certificate); + } + + await configuration.CertificateValidator.Update(configuration.SecurityConfiguration); + + Utils.Trace(Utils.TraceMasks.Information, "Certificate created. Thumbprint={0}", certificate.Thumbprint); + + // reload the certificate from disk. + await configuration.SecurityConfiguration.ApplicationCertificate.LoadPrivateKeyEx(passwordProvider); + + return certificate; + } + + /// + /// Deletes an existing application instance certificate. + /// + /// The configuration instance that stores the configurable information for a UA application. + private static async Task DeleteApplicationInstanceCertificate(ApplicationConfiguration configuration) + { + Utils.Trace(Utils.TraceMasks.Information, "Deleting application instance certificate."); + + // create a default certificate id none specified. + CertificateIdentifier id = configuration.SecurityConfiguration.ApplicationCertificate; + + if (id == null) + { + return; + } + + // delete private key. + X509Certificate2 certificate = await id.Find(); + + // delete trusted peer certificate. + if (configuration.SecurityConfiguration != null && configuration.SecurityConfiguration.TrustedPeerCertificates != null) + { + string thumbprint = id.Thumbprint; + + if (certificate != null) + { + thumbprint = certificate.Thumbprint; + } + + using (ICertificateStore store = configuration.SecurityConfiguration.TrustedPeerCertificates.OpenStore()) + { + await store.Delete(thumbprint); + } + } + + // delete private key. + if (certificate != null) + { + using (ICertificateStore store = id.OpenStore()) + { + await store.Delete(certificate.Thumbprint); + } + } + } + + /// + /// Adds the certificate to the Trusted Certificate Store + /// + /// The application's configuration which specifies the location of the TrustedStore. + /// The certificate to register. + private static async Task AddToTrustedStore(ApplicationConfiguration configuration, X509Certificate2 certificate) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + + string storePath = null; + + if (configuration != null && configuration.SecurityConfiguration != null && configuration.SecurityConfiguration.TrustedPeerCertificates != null) + { + storePath = configuration.SecurityConfiguration.TrustedPeerCertificates.StorePath; + } + + if (String.IsNullOrEmpty(storePath)) + { + Utils.Trace(Utils.TraceMasks.Information, "WARNING: Trusted peer store not specified."); + return; + } + + try + { + ICertificateStore store = configuration.SecurityConfiguration.TrustedPeerCertificates.OpenStore(); + + if (store == null) + { + Utils.Trace("Could not open trusted peer store. StorePath={0}", storePath); + return; + } + + try + { + // check if it already exists. + X509Certificate2Collection existingCertificates = await store.FindByThumbprint(certificate.Thumbprint); + + if (existingCertificates.Count > 0) + { + return; + } + + Utils.Trace(Utils.TraceMasks.Information, "Adding certificate to trusted peer store. StorePath={0}", storePath); + + List subjectName = X509Utils.ParseDistinguishedName(certificate.Subject); + + // check for old certificate. + X509Certificate2Collection certificates = await store.Enumerate(); + + for (int ii = 0; ii < certificates.Count; ii++) + { + if (X509Utils.CompareDistinguishedName(certificates[ii], subjectName)) + { + if (certificates[ii].Thumbprint == certificate.Thumbprint) + { + return; + } + + await store.Delete(certificates[ii].Thumbprint); + break; + } + } + + // add new certificate. + X509Certificate2 publicKey = new X509Certificate2(certificate.RawData); + await store.Add(publicKey); + } + finally + { + store.Close(); + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not add certificate to trusted peer store. StorePath={0}", storePath); + } + } + + /// + /// Show a message for approval and return result. + /// + /// + /// + /// True if approved, false otherwise. + private static async Task ApproveMessage(string message, bool silent) + { + if (!silent && MessageDlg != null) + { + MessageDlg.Message(message, true); + return await MessageDlg.ShowAsync(); + } + else + { + Utils.Trace(message); + return false; + } + } + #endregion + + #region Private Fields + private string m_applicationName; + private ApplicationType m_applicationType; + private string m_configSectionName; + private Type m_configurationType; + private ServerBase m_server; + private ApplicationConfiguration m_applicationConfiguration; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Configuration/Opc.Ua.Configuration.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Configuration/Opc.Ua.Configuration.csproj new file mode 100644 index 00000000..e0638f75 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Configuration/Opc.Ua.Configuration.csproj @@ -0,0 +1,36 @@ + + + + Opc.Ua.Configuration + $(LibTargetFrameworks) + 6 + OPCFoundation.NetStandard.Opc.Ua.Configuration + Opc.Ua.Configuration + OPC UA Configuration Class Library + true + true + + + + $(PackageId).Debug + + + + + + + + + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/AdminCredentialsRequiredEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/AdminCredentialsRequiredEventArgs.cs new file mode 100644 index 00000000..11833e87 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/AdminCredentialsRequiredEventArgs.cs @@ -0,0 +1,61 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Gds.Client +{ + /// + /// The arguments passed with a AdminCredentialsRequiredEventArgs event. + /// + public class AdminCredentialsRequiredEventArgs : EventArgs + { + /// + /// Initializes a new instance of the class. + /// + public AdminCredentialsRequiredEventArgs() + { + } + + /// + /// Gets or sets the credentials. + /// + public UserIdentity Credentials { get; set; } + + /// + /// Gets or sets a flag indicating the credentials should be cached. + /// + public bool CacheCredentials { get; set; } + } + + /// + /// A delegate used to handle AdminCredentialsRequired events. + /// + public delegate void AdminCredentialsRequiredEventHandler(object sender, AdminCredentialsRequiredEventArgs e); +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/BuildSchema.bat b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/BuildSchema.bat new file mode 100644 index 00000000..b99804c9 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/BuildSchema.bat @@ -0,0 +1,11 @@ +@echo off +setlocal + +echo Processing RegisteredApplication Schema +xsd /classes /n:Opc.Ua.Gds.Client RegisteredApplication.xsd + +echo #pragma warning disable 1591 > temp.txt +type RegisteredApplication.cs >> temp.txt +type temp.txt > RegisteredApplication.cs + +del temp.txt \ No newline at end of file diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/CertificateWrapper.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/CertificateWrapper.cs new file mode 100644 index 00000000..f835d643 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/CertificateWrapper.cs @@ -0,0 +1,297 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Gds.Client +{ + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class CertificateWrapper : IFormattable, IEncodeable + { + public X509Certificate2 Certificate { get; set; } + + [DataMember(Order = 1)] + public string SubjectName + { + get + { + if (Certificate != null) + { + return Certificate.Subject; + } + + return null; + } + + private set { } + } + + [DataMember(Order = 2)] + public string IssuerName + { + get + { + if (Certificate != null) + { + return Certificate.Issuer; + } + + return null; + } + + private set { } + } + + [DataMember(Order = 3)] + public DateTime ValidFrom + { + get + { + if (Certificate != null) + { + return Certificate.NotBefore; + } + + return DateTime.MinValue; + } + + private set { } + } + + [DataMember(Order = 4)] + public DateTime ValidTo + { + get + { + if (Certificate != null) + { + return Certificate.NotAfter; + } + + return DateTime.MinValue; + } + + private set { } + } + + [DataMember(Order = 5)] + public string SerialNumber + { + get + { + if (Certificate != null) + { + return Certificate.SerialNumber; + } + + return null; + } + + private set { } + } + + [DataMember(Order = 6)] + public string Thumbprint + { + get + { + if (Certificate != null) + { + return Certificate.Thumbprint; + } + + return null; + } + + private set { } + } + + [DataMember(Order = 7)] + public string SignatureAlgorithm + { + get + { + if (Certificate != null) + { + return Certificate.SignatureAlgorithm.FriendlyName; + } + + return null; + } + + private set { } + } + + [DataMember(Order = 8)] + public string PublicKeyAlgorithm + { + get + { + if (Certificate != null) + { + return Certificate.PublicKey.Oid.FriendlyName; + } + + return null; + } + + private set { } + } + + [DataMember(Order = 9)] + public byte[] PublicKey + { + get + { + if (Certificate != null) + { + return Certificate.PublicKey.EncodedKeyValue.RawData; + } + + return null; + } + + private set { } + } + + + [DataMember(Order = 10)] + public int KeySize + { + get + { + if (Certificate != null) + { + return Certificate.PublicKey.Key.KeySize; + } + + return 0; + } + + private set { } + } + + [DataMember(Order = 11)] + public string ApplicationUri + { + get + { + if (Certificate != null) + { + try + { + return X509Utils.GetApplicationUriFromCertificate(Certificate); + } + catch (Exception e) + { + return e.Message; + } + } + + return null; + } + + private set { } + } + + [DataMember(Order = 12)] + public IList Domains + { + get + { + if (Certificate != null) + { + try + { + return X509Utils.GetDomainsFromCertficate(Certificate); + } + catch (Exception e) + { + return new string[] { e.Message }; + } + } + + return null; + } + + private set { } + } + + public override string ToString() + { + return ToString(null, null); + } + + public string ToString(string format, IFormatProvider formatProvider) + { + return SubjectName; + } + + #region IEncodeable Members + public ExpandedNodeId TypeId + { + get { return NodeId.Null; } + } + + public ExpandedNodeId BinaryEncodingId + { + get { return NodeId.Null; } + } + + public ExpandedNodeId XmlEncodingId + { + get { return NodeId.Null; } + } + + public void Encode(IEncoder encoder) + { + throw new NotImplementedException(); + } + + public void Decode(IDecoder decoder) + { + throw new NotImplementedException(); + } + + public bool IsEqual(IEncodeable encodeable) + { + throw new NotImplementedException(); + } + + public object Clone() + { + return new CertificateWrapper() { Certificate = this.Certificate }; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/GlobalDiscoveryClientConfiguration.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/GlobalDiscoveryClientConfiguration.cs new file mode 100644 index 00000000..91f4a3da --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/GlobalDiscoveryClientConfiguration.cs @@ -0,0 +1,77 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Runtime.Serialization; + +namespace Opc.Ua.Gds.Client +{ + /// + /// Stores the configuration the data access node manager. + /// + [DataContract(Namespace = Opc.Ua.Gds.Namespaces.OpcUaGds + "Configuration.xsd")] + public class GlobalDiscoveryClientConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public GlobalDiscoveryClientConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public + [DataMember(Order = 1)] + public string GlobalDiscoveryServerUrl { get; set; } + + [DataMember(Order = 2)] + public string ExternalEditor { get; set; } + #endregion + + #region Private Members + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/GlobalDiscoveryServerClient.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/GlobalDiscoveryServerClient.cs new file mode 100644 index 00000000..24408c46 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/GlobalDiscoveryServerClient.cs @@ -0,0 +1,970 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using Opc.Ua.Client; +using Opc.Ua.Configuration; +using System.Threading.Tasks; +using System.Reflection; + +namespace Opc.Ua.Gds.Client +{ + /// + /// A class that provides access to a Global Discovery Server. + /// + public class GlobalDiscoveryServerClient + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The application. + /// The endpoint Url. + /// The user identity for the administrator. + public GlobalDiscoveryServerClient( + ApplicationInstance application, + string endpointUrl, + IUserIdentity adminUserIdentity = null) + { + Application = application; + EndpointUrl = endpointUrl; + // preset admin + AdminCredentials = adminUserIdentity; + } + #endregion + + #region Public Properties + /// + /// Gets the application. + /// + /// + /// The application. + /// + public ApplicationInstance Application { get; private set; } + + /// + /// Gets or sets the admin credentials. + /// + /// + /// The admin credentials. + /// + public IUserIdentity AdminCredentials { get; set; } + + /// + /// Raised when admin credentials are required. + /// + public event AdminCredentialsRequiredEventHandler AdminCredentialsRequired; + + /// + /// Gets the session. + /// + /// + /// The session. + /// + public Session Session { get; private set; } + + /// + /// Gets or sets the endpoint URL. + /// + /// + /// The endpoint URL. + /// + public string EndpointUrl { get; set; } + + /// + /// Gets or sets the preferred locales. + /// + /// + /// The preferred locales. + /// + public string[] PreferredLocales { get; set; } + + /// + /// Gets a value indicating whether a session is connected. + /// + /// + /// true if [is connected]; otherwise, false. + /// + public bool IsConnected { get { return Session != null && Session.Connected; } } + #endregion + + #region Public Methods + /// + /// Returns list of servers known to the LDS, excluding GDS servers. + /// + /// The LDS to use. + /// + /// TRUE if successful; FALSE otherwise. + /// + public List GetDefaultServerUrls(LocalDiscoveryServerClient lds) + { + List serverUrls = new List(); + + try + { + DateTime lastResetTime; + + if (lds == null) + { + lds = new LocalDiscoveryServerClient(this.Application.ApplicationConfiguration); + } + + var servers = lds.FindServersOnNetwork(0, 1000, out lastResetTime); + + foreach (var server in servers) + { + if (server.ServerCapabilities != null) + { + // ignore GDS and LDS servers + if (server.ServerCapabilities.Contains(ServerCapability.GlobalDiscoveryServer) || + server.ServerCapabilities.Contains(ServerCapability.LocalDiscoveryServer)) + { + continue; + } + } + serverUrls.Add(server.DiscoveryUrl); + } + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error connecting to LDS"); + } + + return serverUrls; + } + + /// + /// Returns list of GDS servers known to the LDS. + /// + /// The LDS to use. + /// + /// TRUE if successful; FALSE otherwise. + /// + public List GetDefaultGdsUrls(LocalDiscoveryServerClient lds) + { + List gdsUrls = new List(); + + try + { + DateTime lastResetTime; + + if (lds == null) + { + lds = new LocalDiscoveryServerClient(this.Application.ApplicationConfiguration); + } + + var servers = lds.FindServersOnNetwork(0, 1000, out lastResetTime); + + foreach (var server in servers) + { + if (server.ServerCapabilities != null && server.ServerCapabilities.Contains(ServerCapability.GlobalDiscoveryServer)) + { + gdsUrls.Add(server.DiscoveryUrl); + } + } + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error connecting to LDS"); + } + + return gdsUrls; + } + + /// + /// Connects using the default endpoint. + /// + public void Connect() + { + Connect(m_endpoint).Wait(); + } + + /// + /// Connects the specified endpoint URL. + /// + /// The endpoint URL. + /// endpointUrl + /// endpointUrl + public async Task Connect(string endpointUrl) + { + if (String.IsNullOrEmpty(endpointUrl)) + { + throw new ArgumentNullException(nameof(endpointUrl)); + } + + if (!Uri.IsWellFormedUriString(endpointUrl, UriKind.Absolute)) + { + throw new ArgumentException(endpointUrl + " is not a valid URL.", nameof(endpointUrl)); + } + + bool serverHalted = false; + do + { + serverHalted = false; + try + { + EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(endpointUrl, true); + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(Application.ApplicationConfiguration); + ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration); + + await Connect(endpoint); + } + catch (ServiceResultException e) + { + if (e.StatusCode == StatusCodes.BadServerHalted) + { + serverHalted = true; + await Task.Delay(1000); + } + else + { + throw; + } + } + } while (serverHalted); + } + + /// + /// Connects the specified endpoint. + /// + /// The endpoint. + public async Task Connect(ConfiguredEndpoint endpoint) + { + if (endpoint != null && m_endpoint != null && endpoint.EndpointUrl != m_endpoint.EndpointUrl) + { + AdminCredentials = null; + } + + if (endpoint == null) + { + endpoint = m_endpoint; + + if (endpoint == null) + { + throw new ArgumentNullException(nameof(endpoint)); + } + } + + if (Session != null) + { + Session.Dispose(); + Session = null; + } + + Session = await Session.Create( + Application.ApplicationConfiguration, + endpoint, + false, + false, + Application.ApplicationName, + 60000, + AdminCredentials, + PreferredLocales); + + m_endpoint = Session.ConfiguredEndpoint; + + Session.SessionClosing += Session_SessionClosing; + Session.KeepAlive += Session_KeepAlive; + Session.KeepAlive += KeepAlive; + // TODO: implement, suppress warning/error + if (ServerStatusChanged != null) { } + + if (Session.Factory.GetSystemType(Opc.Ua.Gds.DataTypeIds.ApplicationRecordDataType) == null) + { + Session.Factory.AddEncodeableTypes(typeof(Opc.Ua.Gds.ObjectIds).GetTypeInfo().Assembly); + } + + Session.ReturnDiagnostics = DiagnosticsMasks.SymbolicIdAndText; + EndpointUrl = Session.ConfiguredEndpoint.EndpointUrl.ToString(); + + } + + /// + /// Disconnect the client connection. + /// + public void Disconnect() + { + if (Session != null) + { + KeepAlive?.Invoke(Session, null); + Session.Close(); + Session = null; + } + } + + private void Session_KeepAlive(Session session, KeepAliveEventArgs e) + { + if (ServiceResult.IsBad(e.Status)) + { + Session?.Dispose(); + Session = null; + } + } + + private void Session_SessionClosing(object sender, EventArgs e) + { + Session.Dispose(); + Session = null; + } + + /// + /// Occurs when keep alive occurs. + /// + public event KeepAliveEventHandler KeepAlive; + + /// + /// Occurs when the server status changes. + /// + public event MonitoredItemNotificationEventHandler ServerStatusChanged; + #endregion + + #region GDS Methods + /// + /// Finds the applications with the specified application uri. + /// + /// The application URI. + /// The matching application. + public ApplicationRecordDataType[] FindApplication(string applicationUri) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_FindApplications, Session.NamespaceUris), + applicationUri); + + ApplicationRecordDataType[] applications = null; + + if (outputArguments.Count > 0) + { + applications = (ApplicationRecordDataType[])ExtensionObject.ToArray(outputArguments[0] as ExtensionObject[], typeof(ApplicationRecordDataType)); + } + + return applications; + } + + /// + /// Queries the GDS for any servers matching the criteria. + /// + /// The max records to return. + /// The filter applied to the application name. + /// The filter applied to the application uri. + /// The filter applied to the product uri. + /// The filter applied to the server capabilities. + /// A enumarator used to access the results. + public IList QueryServers( + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + IList serverCapabilities) + { + return QueryServers( + 0, + maxRecordsToReturn, + applicationName, + applicationUri, + productUri, + serverCapabilities); + } + + /// + /// Queries the GDS for any servers matching the criteria. + /// + /// The id of the first record to return. + /// The max records to return. + /// The filter applied to the application name. + /// The filter applied to the application uri. + /// The filter applied to the product uri. + /// The filter applied to the server capabilities. + /// A enumerator used to access the results. + public IList QueryServers( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + IList serverCapabilities) + { + DateTime lastCounterResetTime; + return QueryServers( + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + productUri, + serverCapabilities, + out lastCounterResetTime); + } + + /// + /// Queries the GDS for any servers matching the criteria. + /// + /// The id of the first record to return. + /// The max records to return. + /// The filter applied to the application name. + /// The filter applied to the application uri. + /// The filter applied to the product uri. + /// The filter applied to the server capabilities. + /// The time when the counter was last changed. + /// A enumerator used to access the results. + public IList QueryServers( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + IList serverCapabilities, + out DateTime lastCounterResetTime) + { + lastCounterResetTime = DateTime.MinValue; + + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_QueryServers, Session.NamespaceUris), + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + productUri, + serverCapabilities); + + ServerOnNetwork[] servers = null; + + if (outputArguments.Count >= 2) + { + lastCounterResetTime = (DateTime)outputArguments[0]; + servers = (ServerOnNetwork[])ExtensionObject.ToArray(outputArguments[1] as ExtensionObject[], typeof(ServerOnNetwork)); + } + + return servers; + } + + + /// + /// Queries the GDS for any servers matching the criteria. + /// + /// The id of the first record to return. + /// The max records to return. + /// The filter applied to the application name. + /// The filter applied to the application uri. + /// The filter applied to the application uri. + /// The filter applied to the product uri. + /// The filter applied to the server capabilities. + /// The time when the counter was last changed. + /// The id of the next record. + /// A enumerator used to access the results. + public IList QueryApplications( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + uint applicationType, + string productUri, + IList serverCapabilities, + out DateTime lastCounterResetTime, + out uint nextRecordId) + { + lastCounterResetTime = DateTime.MinValue; + nextRecordId = 0; + + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_QueryApplications, Session.NamespaceUris), + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + applicationType, + productUri, + serverCapabilities); + + ApplicationDescription[] applications = null; + + if (outputArguments.Count >= 3) + { + lastCounterResetTime = (DateTime)outputArguments[0]; + nextRecordId = (uint)outputArguments[1]; + applications = (ApplicationDescription[])ExtensionObject.ToArray(outputArguments[2] as ExtensionObject[], typeof(ApplicationDescription)); + } + + return applications; + } + + /// + /// Get the application record. + /// + /// The application id. + /// The application record for the specified application id. + public ApplicationRecordDataType GetApplication(NodeId applicationId) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_GetApplication, Session.NamespaceUris), + applicationId); + + if (outputArguments.Count >= 1) + { + return ExtensionObject.ToEncodeable(outputArguments[0] as ExtensionObject) as ApplicationRecordDataType; + } + + return null; + } + + /// + /// Registers the application. + /// + /// The application. + /// The application id assigned to the application. + public NodeId RegisterApplication(ApplicationRecordDataType application) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_RegisterApplication, Session.NamespaceUris), + application); + + if (outputArguments.Count >= 1) + { + return outputArguments[0] as NodeId; + } + + return null; + } + + /// + /// Updates the application. + /// + /// The application. + public void UpdateApplication(ApplicationRecordDataType application) + { + if (!IsConnected) + { + Connect(); + } + + Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_UpdateApplication, Session.NamespaceUris), + application); + } + + /// + /// Unregisters the application. + /// + /// The application id. + public void UnregisterApplication(NodeId applicationId) + { + if (!IsConnected) + { + Connect(); + } + + Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_UnregisterApplication, Session.NamespaceUris), + applicationId); + } + + /// + /// Requests a new certificate. + /// + /// The application id. + /// The authority. + /// Type of the certificate. + /// Name of the subject. + /// The domain names. + /// The private key format (PEM or PFX). + /// The private key password. + /// + /// The id for the request which is used to check when it is approved. + /// + public NodeId StartNewKeyPairRequest( + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + string subjectName, + IList domainNames, + string privateKeyFormat, + string privateKeyPassword) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_StartNewKeyPairRequest, Session.NamespaceUris), + applicationId, + certificateGroupId, + certificateTypeId, + subjectName, + domainNames, + privateKeyFormat, + privateKeyPassword); + + if (outputArguments.Count >= 1) + { + return outputArguments[0] as NodeId; + } + + return null; + } + + /// + /// Signs the certificate. + /// + /// The application id. + /// The group of the trust list. + /// The type of the trust list. + /// The certificate signing request (CSR). + /// The id for the request which is used to check when it is approved. + public NodeId StartSigningRequest( + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + byte[] certificateRequest) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_StartSigningRequest, Session.NamespaceUris), + applicationId, + certificateGroupId, + certificateTypeId, + certificateRequest); + + if (outputArguments.Count >= 1) + { + return outputArguments[0] as NodeId; + } + + return null; + } + /// + /// Checks the request status. + /// + /// The application id. + /// The request id. + /// The private key. + /// The issuer certificates. + /// The public key. + public byte[] FinishRequest( + NodeId applicationId, + NodeId requestId, + out byte[] privateKey, + out byte[][] issuerCertificates) + { + privateKey = null; + issuerCertificates = null; + + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_FinishRequest, Session.NamespaceUris), + applicationId, + requestId); + + byte[] certificate = null; + + if (outputArguments.Count >= 1) + { + certificate = outputArguments[0] as byte[]; + } + + if (outputArguments.Count >= 2) + { + privateKey = outputArguments[1] as byte[]; + } + + if (outputArguments.Count >= 3) + { + issuerCertificates = outputArguments[2] as byte[][]; + } + + return certificate; + } + + /// + /// Gets the certificate groups. + /// + /// The application id. + /// + public NodeId[] GetCertificateGroups( + NodeId applicationId) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_GetCertificateGroups, Session.NamespaceUris), + applicationId); + + if (outputArguments.Count >= 1) + { + return outputArguments[0] as NodeId[]; + } + + return null; + } + + /// + /// Gets the trust lists method. + /// + /// The application id. + /// Type of the trust list. + /// + public NodeId GetTrustList( + NodeId applicationId, + NodeId certificateGroupId) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_GetTrustList, Session.NamespaceUris), + applicationId, + certificateGroupId); + + if (outputArguments.Count >= 1) + { + return outputArguments[0] as NodeId; + } + + return null; + } + + /// + /// Gets the certificate status. + /// + /// The application id. + /// Group of the trust list. + /// Type of the trust list. + /// + public Boolean GetCertificateStatus( + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory, Session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.Gds.MethodIds.Directory_GetCertificateStatus, Session.NamespaceUris), + applicationId, + certificateGroupId, + certificateTypeId); + + if (outputArguments.Count >= 1 && outputArguments[0] != null) + { + Boolean? result = outputArguments[0] as Boolean?; + if (result != null) + { + return (bool)result; + } + } + + return false; + } + + /// + /// Reads the trust list. + /// + public TrustListDataType ReadTrustList(NodeId trustListId) + { + if (!IsConnected) + { + Connect(); + } + + var outputArguments = Session.Call( + trustListId, + Opc.Ua.MethodIds.FileType_Open, + (byte)OpenFileMode.Read); + + uint fileHandle = (uint)outputArguments[0]; + MemoryStream ostrm = new MemoryStream(); + + try + { + while (true) + { + int length = 4096; + + outputArguments = Session.Call( + trustListId, + Opc.Ua.MethodIds.FileType_Read, + fileHandle, + length); + + byte[] bytes = (byte[])outputArguments[0]; + ostrm.Write(bytes, 0, bytes.Length); + + if (length != bytes.Length) + { + break; + } + } + } + catch (Exception) + { + throw; + } + finally + { + if (IsConnected) + { + Session.Call( + trustListId, + Opc.Ua.MethodIds.FileType_Close, + fileHandle); + } + } + + ostrm.Position = 0; + + BinaryDecoder decoder = new BinaryDecoder(ostrm, Session.MessageContext); + TrustListDataType trustList = new TrustListDataType(); + trustList.Decode(decoder); + decoder.Close(); + ostrm.Close(); + + return trustList; + } + #endregion + + #region Private Methods + private IUserIdentity ElevatePermissions() + { + IUserIdentity oldUser = Session.Identity; + + if (AdminCredentials == null || !Object.ReferenceEquals(Session.Identity, AdminCredentials)) + { + IUserIdentity newCredentials = null; + + if (AdminCredentials == null) + { + var handle = AdminCredentialsRequired; + + if (handle == null) + { + throw new InvalidOperationException("The operation requires administrator credentials."); + } + + var args = new AdminCredentialsRequiredEventArgs(); + handle(this, args); + newCredentials = args.Credentials; + + if (args.CacheCredentials) + { + AdminCredentials = args.Credentials; + } + } + else + { + newCredentials = AdminCredentials; + } + + try + { + Session.UpdateSession(newCredentials, PreferredLocales); + } + catch (Exception) + { + AdminCredentials = null; + throw; + } + } + + return oldUser; + } + + private void RevertPermissions(IUserIdentity oldUser) + { + try + { + if (!Object.ReferenceEquals(Session.Identity, oldUser)) + { + Session.UpdateSession(oldUser, PreferredLocales); + } + } + catch (Exception e) + { + Utils.Trace(e, "Error reverting to normal permissions."); + } + } + + #endregion + #region Private Fields + private ConfiguredEndpoint m_endpoint; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/LocalDiscoveryServerClient.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/LocalDiscoveryServerClient.cs new file mode 100644 index 00000000..5c690071 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/LocalDiscoveryServerClient.cs @@ -0,0 +1,439 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Gds.Client +{ + public class LocalDiscoveryServerClient + { + #region Constructors + public LocalDiscoveryServerClient(ApplicationConfiguration configuration) + { + ApplicationConfiguration = configuration; + MessageContext = configuration.CreateMessageContext(); + + // set some defaults for the preferred locales. + System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CurrentUICulture; + + List locales = new List + { + culture.Name + }; + + culture = System.Globalization.CultureInfo.CurrentCulture; + + if (!locales.Contains(culture.Name)) + { + locales.Add(culture.Name); + } + + if (!locales.Contains("en-US")) + { + locales.Add("en-US"); + } + + PreferredLocales = locales.ToArray(); + } + #endregion + + #region Public Properties + public ApplicationConfiguration ApplicationConfiguration { get; private set; } + + public ServiceMessageContext MessageContext { get; private set; } + + public string[] PreferredLocales { get; set; } + + public int DefaultOperationTimeout { get; set; } + #endregion + + #region FindServers + public List FindServers() + { + IAsyncResult result = BeginFindServers(null, null, null, null, null, null, null); + return EndFindServers(result); + } + + public List FindServers(string endpointUrl, string endpointTransportProfileUri) + { + IAsyncResult result = BeginFindServers(endpointUrl, endpointTransportProfileUri, null, null, null, null, null); + return EndFindServers(result); + } + + public IAsyncResult BeginFindServers( + AsyncCallback callback, + object callbackData) + { + return BeginFindServers(null, null, null, null, null, callback, callbackData); + } + + public IAsyncResult BeginFindServers( + string endpointUrl, + string endpointTransportProfileUri, + string actualEndpointUrl, + IList preferredLocales, + IList serverUris, + AsyncCallback callback, + object callbackData) + { + DiscoveryClient client = CreateClient(endpointUrl, endpointTransportProfileUri); + + FindServersData data = new FindServersData(callback, callbackData, client.OperationTimeout) + { + DiscoveryClient = client + }; + + data.InnerResult = client.BeginFindServers( + null, + (actualEndpointUrl) ?? endpointUrl, + new StringCollection((preferredLocales) ?? PreferredLocales), + (serverUris != null) ? new StringCollection(serverUris) : null, + OnFindServersComplete, + data); + + return data; + } + + public List EndFindServers(IAsyncResult result) + { + FindServersData data = result as FindServersData; + + if (data == null) + { + throw new ArgumentException("Did not pass the correct IAsyncResult to end method.", "success"); + } + + try + { + if (!data.WaitForComplete()) + { + throw new TimeoutException(); + } + + return data.Servers; + } + finally + { + data.DiscoveryClient.Close(); + } + } + + private class FindServersData : AsyncResultBase + { + public FindServersData( + AsyncCallback callback, + object callbackData, + int timeout) + : + base(callback, callbackData, timeout) + { + } + + public DiscoveryClient DiscoveryClient; + public List Servers; + } + + private void OnFindServersComplete(IAsyncResult result) + { + FindServersData data = result.AsyncState as FindServersData; + + try + { + ApplicationDescriptionCollection servers = null; + data.DiscoveryClient.EndFindServers(result, out servers); + + data.Servers = servers; + data.OperationCompleted(); + } + catch (Exception e) + { + data.Exception = e; + data.OperationCompleted(); + } + } + #endregion + + #region GetEndpoints + public List GetEndpoints(string endpointUrl) + { + IAsyncResult result = BeginGetEndpoints(endpointUrl, null, null, null); + return EndGetEndpoints(result); + } + + public List GetEndpoints(string endpointUrl, string endpointTransportProfileUri) + { + IAsyncResult result = BeginGetEndpoints(endpointUrl, endpointTransportProfileUri, null, null); + return EndGetEndpoints(result); + } + + public IAsyncResult BeginGetEndpoints( + string endpointUrl, + string endpointTransportProfileUri, + AsyncCallback callback, + object callbackData) + { + DiscoveryClient client = CreateClient(endpointUrl, endpointTransportProfileUri); + + GetEndpointsData data = new GetEndpointsData(callback, callbackData, client.OperationTimeout) + { + DiscoveryClient = client + }; + + data.InnerResult = client.BeginGetEndpoints( + null, + endpointUrl, + new StringCollection(PreferredLocales), + null, + OnGetEndpointsComplete, + data); + + return data; + } + + public List EndGetEndpoints(IAsyncResult result) + { + GetEndpointsData data = result as GetEndpointsData; + + if (data == null) + { + throw new ArgumentException("Did not pass the correct IAsyncResult to end method.", "success"); + } + + try + { + if (!data.WaitForComplete()) + { + throw new TimeoutException(); + } + + return data.Endpoints; + } + finally + { + data.DiscoveryClient.Close(); + } + } + + private class GetEndpointsData : AsyncResultBase + { + public GetEndpointsData( + AsyncCallback callback, + object callbackData, + int timeout) + : + base(callback, callbackData, timeout) + { + } + + public DiscoveryClient DiscoveryClient; + public List Endpoints; + } + + private void OnGetEndpointsComplete(IAsyncResult result) + { + GetEndpointsData data = result.AsyncState as GetEndpointsData; + + try + { + EndpointDescriptionCollection endpoints = null; + data.DiscoveryClient.EndGetEndpoints(result, out endpoints); + + data.Endpoints = endpoints; + data.OperationCompleted(); + } + catch (Exception e) + { + data.Exception = e; + data.OperationCompleted(); + } + } + #endregion + + #region FindServersOnNetwork + public List FindServersOnNetwork( + uint startingRecordId, + uint maxRecordsToReturn, + out DateTime lastCounterResetTime) + { + IAsyncResult result = BeginFindServersOnNetwork(null, null, startingRecordId, maxRecordsToReturn, null, null, null); + return EndFindServersOnNetwork(result, out lastCounterResetTime); + } + + public List FindServersOnNetwork( + string endpointUrl, + string endpointTransportProfileUri, + uint startingRecordId, + uint maxRecordsToReturn, + IList serverCapabilityFilters, + out DateTime lastCounterResetTime) + { + IAsyncResult result = BeginFindServersOnNetwork(endpointUrl, endpointTransportProfileUri, startingRecordId, maxRecordsToReturn, serverCapabilityFilters, null, null); + return EndFindServersOnNetwork(result, out lastCounterResetTime); + } + + public IAsyncResult BeginFindServersOnNetwork( + uint startingRecordId, + uint maxRecordsToReturn, + AsyncCallback callback, + object callbackData) + { + return BeginFindServersOnNetwork(null, null, startingRecordId, maxRecordsToReturn, null, callback, callbackData); + } + + public IAsyncResult BeginFindServersOnNetwork( + string endpointUrl, + string endpointTransportProfileUri, + uint startingRecordId, + uint maxRecordsToReturn, + IList serverCapabilityFilters, + AsyncCallback callback, + object callbackData) + { + DiscoveryClient client = CreateClient(endpointUrl, endpointTransportProfileUri); + + FindServersOnNetworkData data = new FindServersOnNetworkData(callback, callbackData, client.OperationTimeout) + { + DiscoveryClient = client + }; + + data.InnerResult = client.BeginFindServersOnNetwork( + null, + startingRecordId, + maxRecordsToReturn, + (serverCapabilityFilters != null) ? new StringCollection(serverCapabilityFilters) : new StringCollection(), + OnFindServersOnNetworkComplete, + data); + + return data; + } + + public List EndFindServersOnNetwork(IAsyncResult result, out DateTime lastCounterResetTime) + { + FindServersOnNetworkData data = result as FindServersOnNetworkData; + + if (data == null) + { + throw new ArgumentException("Did not pass the correct IAsyncResult to end method.", "success"); + } + + try + { + if (!data.WaitForComplete()) + { + throw new TimeoutException(); + } + + lastCounterResetTime = data.LastCounterResetTime; + return data.Servers; + } + finally + { + data.DiscoveryClient.Close(); + } + } + + private class FindServersOnNetworkData : AsyncResultBase + { + public FindServersOnNetworkData( + AsyncCallback callback, + object callbackData, + int timeout) + : + base(callback, callbackData, timeout) + { + } + + public DiscoveryClient DiscoveryClient; + public DateTime LastCounterResetTime; + public List Servers; + } + + private void OnFindServersOnNetworkComplete(IAsyncResult result) + { + FindServersOnNetworkData data = result.AsyncState as FindServersOnNetworkData; + + try + { + DateTime lastCounterResetTime; + ServerOnNetworkCollection servers = null; + data.DiscoveryClient.EndFindServersOnNetwork(result, out lastCounterResetTime, out servers); + + data.LastCounterResetTime = lastCounterResetTime; + data.Servers = servers; + data.OperationCompleted(); + } + catch (Exception e) + { + data.Exception = e; + data.OperationCompleted(); + } + } + #endregion + + #region Protected Methods + protected virtual DiscoveryClient CreateClient( + string endpointUrl, + string endpointTransportProfileUri) + { + if (String.IsNullOrEmpty(endpointUrl)) + { + endpointUrl = DefaultUrl; + } + + if (!Uri.IsWellFormedUriString(endpointUrl, UriKind.Absolute)) + { + throw new ArgumentException("Not a valid URL.", nameof(endpointUrl)); + } + + ServiceMessageContext context = ApplicationConfiguration.CreateMessageContext(); + + EndpointConfiguration configuration = EndpointConfiguration.Create(ApplicationConfiguration); + + if (DefaultOperationTimeout != 0) + { + configuration.OperationTimeout = DefaultOperationTimeout; + } + + ITransportChannel channel = DiscoveryChannel.Create(new Uri(endpointUrl), configuration, context); + + DiscoveryClient client = new DiscoveryClient(channel); + return client; + } + + #region Private Methods + #endregion + + #endregion + + #region Private Fields + private const string DefaultUrl = "opc.tcp://localhost:4840"; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/Opc.Ua.Gds.Client.Common.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/Opc.Ua.Gds.Client.Common.csproj new file mode 100644 index 00000000..70d45de0 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/Opc.Ua.Gds.Client.Common.csproj @@ -0,0 +1,30 @@ + + + + $(DefineConstants);NET_STANDARD + Opc.Ua.Gds.Client.Common + $(LibTargetFrameworks) + OPCFoundation.NetStandard.Opc.Ua.Gds.Client.Common + Opc.Ua.Gds.Client + 6 + $(NoWarn);CS1591 + OPC UA GDS Client Class Library + true + true + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplication.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplication.cs new file mode 100644 index 00000000..12d65812 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplication.cs @@ -0,0 +1,287 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// 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 Opc.Ua.Gds.Client { + 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://opcfoundation.org/schemas/GDS/RegisteredApplication.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="http://opcfoundation.org/schemas/GDS/RegisteredApplication.xsd", IsNullable=false)] + public partial class RegisteredApplication { + + private string applicationUriField; + + private string applicationNameField; + + private string productUriField; + + private string[] discoveryUrlField; + + private string[] serverCapabilityField; + + private string configurationFileField; + + private string serverUrlField; + + private string certificateStorePathField; + + private string certificateSubjectNameField; + + private string certificatePublicKeyPathField; + + private string certificatePrivateKeyPathField; + + private string trustListStorePathField; + + private string issuerListStorePathField; + + private string httpsCertificatePublicKeyPathField; + + private string httpsCertificatePrivateKeyPathField; + + private string httpsTrustListStorePathField; + + private string httpsIssuerListStorePathField; + + private string certificateRequestIdField; + + private string domainsField; + + private RegistrationType registrationTypeField; + + /// + public string ApplicationUri { + get { + return this.applicationUriField; + } + set { + this.applicationUriField = value; + } + } + + /// + public string ApplicationName { + get { + return this.applicationNameField; + } + set { + this.applicationNameField = value; + } + } + + /// + public string ProductUri { + get { + return this.productUriField; + } + set { + this.productUriField = value; + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("DiscoveryUrl")] + public string[] DiscoveryUrl { + get { + return this.discoveryUrlField; + } + set { + this.discoveryUrlField = value; + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("ServerCapability")] + public string[] ServerCapability { + get { + return this.serverCapabilityField; + } + set { + this.serverCapabilityField = value; + } + } + + /// + public string ConfigurationFile { + get { + return this.configurationFileField; + } + set { + this.configurationFileField = value; + } + } + + /// + public string ServerUrl { + get { + return this.serverUrlField; + } + set { + this.serverUrlField = value; + } + } + + /// + public string CertificateStorePath { + get { + return this.certificateStorePathField; + } + set { + this.certificateStorePathField = value; + } + } + + /// + public string CertificateSubjectName { + get { + return this.certificateSubjectNameField; + } + set { + this.certificateSubjectNameField = value; + } + } + + /// + public string CertificatePublicKeyPath { + get { + return this.certificatePublicKeyPathField; + } + set { + this.certificatePublicKeyPathField = value; + } + } + + /// + public string CertificatePrivateKeyPath { + get { + return this.certificatePrivateKeyPathField; + } + set { + this.certificatePrivateKeyPathField = value; + } + } + + /// + public string TrustListStorePath { + get { + return this.trustListStorePathField; + } + set { + this.trustListStorePathField = value; + } + } + + /// + public string IssuerListStorePath { + get { + return this.issuerListStorePathField; + } + set { + this.issuerListStorePathField = value; + } + } + + /// + public string HttpsCertificatePublicKeyPath { + get { + return this.httpsCertificatePublicKeyPathField; + } + set { + this.httpsCertificatePublicKeyPathField = value; + } + } + + /// + public string HttpsCertificatePrivateKeyPath { + get { + return this.httpsCertificatePrivateKeyPathField; + } + set { + this.httpsCertificatePrivateKeyPathField = value; + } + } + + /// + public string HttpsTrustListStorePath { + get { + return this.httpsTrustListStorePathField; + } + set { + this.httpsTrustListStorePathField = value; + } + } + + /// + public string HttpsIssuerListStorePath { + get { + return this.httpsIssuerListStorePathField; + } + set { + this.httpsIssuerListStorePathField = value; + } + } + + /// + public string CertificateRequestId { + get { + return this.certificateRequestIdField; + } + set { + this.certificateRequestIdField = value; + } + } + + /// + public string Domains { + get { + return this.domainsField; + } + set { + this.domainsField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public RegistrationType RegistrationType { + get { + return this.registrationTypeField; + } + set { + this.registrationTypeField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/schemas/GDS/RegisteredApplication.xsd")] + public enum RegistrationType { + + /// + ClientPull, + + /// + ServerPull, + + /// + ServerPush, + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplication.xsd b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplication.xsd new file mode 100644 index 00000000..dfe0df0d --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplication.xsd @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplicationExtensions.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplicationExtensions.cs new file mode 100644 index 00000000..6c48b62e --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/RegisteredApplicationExtensions.cs @@ -0,0 +1,192 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Security.Cryptography.X509Certificates; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Gds.Client +{ + public partial class RegisteredApplication + { + [System.Xml.Serialization.XmlIgnore()] + public string ApplicationId { get; set; } + + /// + /// Gets the name of the HTTPS domain for the application. + /// + /// + public string GetHttpsDomainName() + { + if (this.DiscoveryUrl != null) + { + foreach (string disoveryUrl in this.DiscoveryUrl) + { + if (Uri.IsWellFormedUriString(disoveryUrl, UriKind.Absolute)) + { + Uri url = new Uri(disoveryUrl); + return url.DnsSafeHost.Replace("localhost", Utils.GetHostName()); + } + } + } + + return null; + } + + public string GetPrivateKeyFormat(string[] privateKeyFormats = null) + { + string privateKeyFormat = "PFX"; + + if (RegistrationType != RegistrationType.ServerPush) + { + if (!String.IsNullOrEmpty(CertificatePrivateKeyPath)) + { + if (CertificatePrivateKeyPath.EndsWith("PEM", StringComparison.OrdinalIgnoreCase)) + { + privateKeyFormat = "PEM"; + } + } + } + else + { + if (privateKeyFormats == null || !privateKeyFormats.Contains("PFX")) + { + privateKeyFormat = "PEM"; + } + } + + return privateKeyFormat; + } + + public List GetDomainNames(X509Certificate2 certificate) + { + List domainNames = new List(); + + if (!String.IsNullOrEmpty(Domains)) + { + var domains = Domains.Split(','); + + List trimmedDomains = new List(); + + foreach (var domain in domains) + { + var d = domain.Trim(); + + if (d.Length > 0) + { + trimmedDomains.Add(d); + } + } + + if (trimmedDomains.Count > 0) + { + return trimmedDomains; + } + } + + if (DiscoveryUrl != null) + { + foreach (var discoveryUrl in DiscoveryUrl) + { + if (Uri.IsWellFormedUriString(discoveryUrl, UriKind.Absolute)) + { + string name = new Uri(discoveryUrl).DnsSafeHost; + + if (name == "localhost") + { + name = Utils.GetHostName(); + } + + bool found = false; + + //domainNames.Any(n => String.Compare(n, name, StringComparison.OrdinalIgnoreCase) == 0); + foreach (var domainName in domainNames) + { + if (String.Compare(domainName, name, StringComparison.OrdinalIgnoreCase) == 0) + { + found = true; + break; + } + } + + if (!found) + { + domainNames.Add(name); + } + } + } + } + + if (domainNames != null && domainNames.Count > 0) + { + return domainNames; + } + + if (certificate != null) + { + var names = X509Utils.GetDomainsFromCertficate(certificate); + + if (names != null && names.Count > 0) + { + domainNames.AddRange(names); + return domainNames; + } + + var fields = X509Utils.ParseDistinguishedName(certificate.Subject); + + string name = null; + + foreach (var field in fields) + { + if (field.StartsWith("DC=", StringComparison.Ordinal)) + { + if (name != null) + { + name += "."; + } + + name += field.Substring(3); + } + } + + if (names != null) + { + domainNames.AddRange(names); + return domainNames; + } + } + + domainNames.Add(Utils.GetHostName()); + return domainNames; + } + + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/ServerCapabilities.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/ServerCapabilities.cs new file mode 100644 index 00000000..4f92b797 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/ServerCapabilities.cs @@ -0,0 +1,239 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; + +namespace Opc.Ua.Gds.Client +{ + /// + /// The set known capability identifiers. + /// + public class ServerCapabilities : IEnumerable + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public ServerCapabilities() + { + Load(); + } + #endregion + + #region IEnumerable Members + public IEnumerator GetEnumerator() + { + if (m_capabilities == null) + { + return new List().GetEnumerator(); + } + + return m_capabilities.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + #endregion + + #region Public Members + /// + /// Loads the default set of server capability identifiers. + /// + public void Load() + { + Load(null); + } + + /// + /// Loads the set of server capability identifiers from the stream. + /// + /// The input stream. + public void Load(Stream istrm) + { + var capabilities = new List(); + + if (istrm == null) + { + foreach (var resourceName in typeof(Opc.Ua.ObjectIds).Assembly.GetManifestResourceNames()) + { + if (resourceName.EndsWith("ServerCapabilities.csv", StringComparison.OrdinalIgnoreCase)) + { + istrm = typeof(Opc.Ua.ObjectIds).Assembly.GetManifestResourceStream(resourceName); + break; + } + } + } + + if (istrm != null) + { + using (StreamReader reader = new StreamReader(istrm)) + { + string line = reader.ReadLine(); + + while (line != null) + { + int index = line.IndexOf(','); + + if (index >= 0) + { + string id = line.Substring(0, index).Trim(); + string description = line.Substring(index + 1).Trim(); + capabilities.Add(new ServerCapability() { Id = id, Description = description }); + } + + line = reader.ReadLine(); + } + } + } + + m_capabilities = capabilities; + } + + /// + /// Finds the sever capability with the specified identifier. + /// + /// The identifier. + /// The sever capability, if found. NULL if it does not exist. + public ServerCapability Find(string id) + { + if (id != null) + { + if (m_capabilities != null) + { + foreach (var capability in m_capabilities) + { + if (capability.Id == id) + { + return capability; + } + } + } + } + + return null; + } + #endregion + + #region Private Fields + private List m_capabilities; + #endregion + } + + /// + /// A server capability. + /// + public class ServerCapability : IFormattable + { + /// + /// Gets or sets the identifier. + /// + /// + /// The identifier. + /// + public string Id { get; set; } + + /// + /// Gets or sets the description. + /// + /// + /// The description. + /// + public string Description { get; set; } + + /// + /// Returns a that represents this instance. + /// + /// + /// A that represents this instance. + /// + public override string ToString() + { + return ToString(null, null); + } + + /// + /// Returns a that represents this instance. + /// + /// The format. + /// The format provider. + /// + /// A that represents this instance. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + return "[" + Id + "] " + Description; + } + + #region Well Known Identifiers + /// + /// No information is available. + /// + public const string NoInformation = "NA"; + + /// + /// The server supports live data. + /// + public const string LiveData = "DA"; + + /// + /// The server supports alarms and conditions + /// + public const string AlarmsAndConditions = "AC"; + + /// + /// The server supports historical data. + /// + public const string HistoricalData = "HD"; + + /// + /// The server supports historical events. + /// + public const string HistoricalEvents = "HE"; + + /// + /// The server is a global discovery server. + /// + public const string GlobalDiscoveryServer = "GDS"; + + /// + /// The server is a local discovery server. + /// + public const string LocalDiscoveryServer = "LDS"; + + /// + /// The server supports the data integration (DI) information model. + /// + public const string DI = "DI"; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/ServerPushConfigurationClient.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/ServerPushConfigurationClient.cs new file mode 100644 index 00000000..515133bd --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Client.Common/ServerPushConfigurationClient.cs @@ -0,0 +1,847 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using Opc.Ua.Client; +using Opc.Ua.Configuration; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Gds.Client +{ + /// + /// A class used to access the Push Configuration information model. + /// + public class ServerPushConfigurationClient + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The application. + public ServerPushConfigurationClient(ApplicationInstance application) + { + m_application = application; + } + #endregion + + #region Public Properties + public NodeId DefaultApplicationGroup { get; private set; } + public NodeId DefaultHttpsGroup { get; private set; } + public NodeId DefaultUserTokenGroup { get; private set; } + // TODO: currently only sha256 cert is supported + public NodeId ApplicationCertificateType => Opc.Ua.ObjectTypeIds.RsaSha256ApplicationCertificateType; + + /// + /// Gets the application instance. + /// + /// + /// The application instance. + /// + public ApplicationInstance Application => m_application; + + /// + /// Gets or sets the admin credentials. + /// + /// + /// The admin credentials. + /// + public IUserIdentity AdminCredentials + { + get { return m_adminCredentials; } + set { m_adminCredentials = value; } + } + + /// + /// Gets or sets the endpoint URL. + /// + /// + /// The endpoint URL. + /// + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + /// Raised when admin credentials are required. + /// + public event AdminCredentialsRequiredEventHandler AdminCredentialsRequired; + + /// + /// Raised when the connection status changes. + /// + public event EventHandler ConnectionStatusChanged; + + /// + /// Gets or sets the preferred locales. + /// + /// + /// The preferred locales. + /// + public string[] PreferredLocales + { + get { return m_preferredLocales; } + set { m_preferredLocales = value; } + } + + /// + /// Gets a value indicating whether the session is connected. + /// + /// + /// true if the session is connected; otherwise, false. + /// + public bool IsConnected => m_session != null && m_session.Connected; + + /// + /// Gets the session. + /// + /// + /// The session. + /// + public Session Session => m_session; + + /// + /// Gets the endpoint. + /// + /// + /// The endpoint. + /// + public ConfiguredEndpoint Endpoint + { + get + { + if (m_session != null && m_session.ConfiguredEndpoint != null) + { + return m_session.ConfiguredEndpoint; + } + + return m_endpoint; + } + + set + { + if (m_session != null) + { + throw new InvalidOperationException("Session must be closed before changing endpoint."); + } + + if (value == null || m_endpoint == null || value.EndpointUrl != m_endpoint.EndpointUrl) + { + m_adminCredentials = null; + } + + m_endpoint = value; + } + } + + /// + /// Occurs when keep alive occurs. + /// + public event KeepAliveEventHandler KeepAlive; + + /// + /// Occurs when the server status changes. + /// + public event MonitoredItemNotificationEventHandler ServerStatusChanged; + #endregion + + #region Public Methods + /// + /// Connects using the default endpoint. + /// + public void Connect() + { + Connect(m_endpoint).Wait(); + } + + /// + /// Connects the specified endpoint URL. + /// + /// The endpoint URL. + /// endpointUrl + /// endpointUrl + public async Task Connect(string endpointUrl) + { + if (String.IsNullOrEmpty(endpointUrl)) + { + throw new ArgumentNullException(nameof(endpointUrl)); + } + + if (!Uri.IsWellFormedUriString(endpointUrl, UriKind.Absolute)) + { + throw new ArgumentException(endpointUrl + " is not a valid URL.", nameof(endpointUrl)); + } + + EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(endpointUrl, true); + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(m_application.ApplicationConfiguration); + ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration); + + await Connect(endpoint); + } + + /// + /// Connects the specified endpoint. + /// + /// The endpoint. + public async Task Connect(ConfiguredEndpoint endpoint) + { + if (endpoint != null && m_endpoint != null && endpoint.EndpointUrl != m_endpoint.EndpointUrl) + { + m_adminCredentials = null; + } + + if (endpoint == null) + { + endpoint = m_endpoint; + + if (endpoint == null) + { + throw new ArgumentNullException(nameof(endpoint)); + } + } + + if (m_session != null) + { + m_session.Dispose(); + m_session = null; + } + + m_session = await Session.Create( + m_application.ApplicationConfiguration, + endpoint, + false, + false, + m_application.ApplicationName, + 60000, + m_adminCredentials, + m_preferredLocales); + + m_endpoint = m_session.ConfiguredEndpoint; + + if (m_session.Factory.GetSystemType(Opc.Ua.DataTypeIds.TrustListDataType) == null) + { + m_session.Factory.AddEncodeableTypes(typeof(Opc.Ua.DataTypeIds).GetTypeInfo().Assembly); + } + + m_session.KeepAlive += Session_KeepAlive; + m_session.KeepAlive += KeepAlive; + + RaiseConnectionStatusChangedEvent(); + + m_session.ReturnDiagnostics = DiagnosticsMasks.SymbolicIdAndText; + + // init some helpers + DefaultApplicationGroup = ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup, m_session.NamespaceUris); + DefaultHttpsGroup = ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultHttpsGroup, m_session.NamespaceUris); + DefaultUserTokenGroup = ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup, m_session.NamespaceUris); + } + + /// + /// Disconnects this instance. + /// + public void Disconnect() + { + if (m_session != null) + { + KeepAlive?.Invoke(m_session, null); + m_session.Close(); + m_session = null; + RaiseConnectionStatusChangedEvent(); + } + } + + private void RaiseConnectionStatusChangedEvent() + { + var Callback = ConnectionStatusChanged; + + if (Callback != null) + { + try + { + Callback(this, EventArgs.Empty); + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error raising ConnectionStatusChanged event."); + } + } + } + + /// + /// Gets the supported key formats. + /// + /// Connection to server is not active. + public string[] GetSupportedKeyFormats() + { + if (AdminCredentials == null || Endpoint == null) + { + return null; + } + + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + + try + { + ReadValueIdCollection nodesToRead = new ReadValueIdCollection + { + new ReadValueId() + { + NodeId = ExpandedNodeId.ToNodeId(Opc.Ua.VariableIds.ServerConfiguration_SupportedPrivateKeyFormats, m_session.NamespaceUris), + AttributeId = Attributes.Value + } + }; + + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + m_session.Read( + null, + 0, + TimestampsToReturn.Neither, + nodesToRead, + out results, + out diagnosticInfos); + + ClientBase.ValidateResponse(results, nodesToRead); + ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead); + return results[0].GetValue(null); + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Reads the trust list. + /// + public TrustListDataType ReadTrustList(TrustListMasks masks = TrustListMasks.All) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + + try + { + var outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks, m_session.NamespaceUris), + (uint)masks); + + uint fileHandle = (uint)outputArguments[0]; + MemoryStream ostrm = new MemoryStream(); + + try + { + while (true) + { + int length = 256; + + outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read, m_session.NamespaceUris), + fileHandle, + length); + + byte[] bytes = (byte[])outputArguments[0]; + ostrm.Write(bytes, 0, bytes.Length); + + if (length != bytes.Length) + { + break; + } + } + + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close, m_session.NamespaceUris), + fileHandle); + } + catch (Exception) + { + if (IsConnected) + { + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close, m_session.NamespaceUris), + fileHandle); + } + + throw; + } + + ostrm.Position = 0; + + BinaryDecoder decoder = new BinaryDecoder(ostrm, m_session.MessageContext); + TrustListDataType trustList = new TrustListDataType(); + trustList.Decode(decoder); + decoder.Close(); + ostrm.Close(); + + return trustList; + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Updates the trust list. + /// + public bool UpdateTrustList(TrustListDataType trustList) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + + try + { + MemoryStream strm = new MemoryStream(); + BinaryEncoder encoder = new BinaryEncoder(strm, m_session.MessageContext); + encoder.WriteEncodeable(null, trustList, null); + strm.Position = 0; + + var outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open, m_session.NamespaceUris), + (byte)(OpenFileMode.Write | OpenFileMode.EraseExisting)); + + uint fileHandle = (uint)outputArguments[0]; + + try + { + bool writing = true; + byte[] buffer = new byte[256]; + + while (writing) + { + int bytesWritten = strm.Read(buffer, 0, buffer.Length); + + if (bytesWritten != buffer.Length) + { + byte[] copy = new byte[bytesWritten]; + Array.Copy(buffer, copy, bytesWritten); + buffer = copy; + writing = false; + } + + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write, m_session.NamespaceUris), + fileHandle, + buffer); + } + + outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate, m_session.NamespaceUris), + fileHandle); + + return (bool)outputArguments[0]; + } + catch (Exception) + { + if (IsConnected) + { + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close, m_session.NamespaceUris), + fileHandle); + } + + throw; + } + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Add certificate. + /// + public void AddCertificate(X509Certificate2 certificate, bool isTrustedCertificate) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + try + { + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate, m_session.NamespaceUris), + certificate.RawData, + isTrustedCertificate + ); + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Add certificate. + /// + public void AddCrl(X509CRL crl, bool isTrustedCertificate) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + try + { + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate, m_session.NamespaceUris), + crl.RawData, + isTrustedCertificate + ); + } + finally + { + RevertPermissions(oldUser); + } + } + + + /// + /// Remove certificate. + /// + public void RemoveCertificate(string thumbprint, bool isTrustedCertificate) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + try + { + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate, m_session.NamespaceUris), + thumbprint, + isTrustedCertificate + ); + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Creates the CSR. + /// + /// The certificate group identifier. + /// The certificate type identifier. + /// Name of the subject. + /// if set to true [regenerate private key]. + /// The nonce. + /// + public byte[] CreateSigningRequest( + NodeId certificateGroupId, + NodeId certificateTypeId, + string subjectName, + bool regeneratePrivateKey, + byte[] nonce) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + + try + { + var outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_CreateSigningRequest, m_session.NamespaceUris), + certificateGroupId, + certificateTypeId, + subjectName, + regeneratePrivateKey, + nonce); + + if (outputArguments.Count > 0) + { + return (byte[])outputArguments[0]; + } + + return null; + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Updates the certificate. + /// + /// The group of the trust list. + /// The type of the trust list. + /// The certificate. + /// The format of the private key, PFX or PEM. + /// The private ky. + /// An array containing the chain of issuer certificates. + public bool UpdateCertificate( + NodeId certificateGroupId, + NodeId certificateTypeId, + byte[] certificate, + string privateKeyFormat, + byte[] privateKey, + byte[][] issuerCertificates) + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + + try + { + var outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_UpdateCertificate, m_session.NamespaceUris), + certificateGroupId, + certificateTypeId, + certificate, + issuerCertificates, + privateKeyFormat, + privateKey); + + if (outputArguments.Count > 0) + { + return (bool)outputArguments[0]; + } + + return false; + } + finally + { + RevertPermissions(oldUser); + } + } + + /// + /// Reads the rejected list. + /// + public X509Certificate2Collection GetRejectedList() + { + if (!IsConnected) + { + Connect(); + } + + IUserIdentity oldUser = ElevatePermissions(); + + try + { + var outputArguments = m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_GetRejectedList, m_session.NamespaceUris) + ); + + byte[][] rawCertificates = (byte[][])outputArguments[0]; + X509Certificate2Collection collection = new X509Certificate2Collection(); + foreach (var rawCertificate in rawCertificates) + { + collection.Add(new X509Certificate2(rawCertificate)); + } + return collection; + } + finally + { + RevertPermissions(oldUser); + } + } + + + /// + /// Restarts this instance. + /// + public void ApplyChanges() + { + if (!IsConnected) + { + Connect(); + } + + ElevatePermissions(); + + m_session.Call( + ExpandedNodeId.ToNodeId(Opc.Ua.ObjectIds.ServerConfiguration, m_session.NamespaceUris), + ExpandedNodeId.ToNodeId(Opc.Ua.MethodIds.ServerConfiguration_ApplyChanges, m_session.NamespaceUris)); + } + #endregion + + #region Private Methods + private IUserIdentity ElevatePermissions() + { + IUserIdentity oldUser = m_session.Identity; + + if (m_adminCredentials == null || !Object.ReferenceEquals(m_session.Identity, m_adminCredentials)) + { + IUserIdentity newCredentials = null; + + if (m_adminCredentials == null) + { + var handle = AdminCredentialsRequired; + + if (handle == null) + { + throw new InvalidOperationException("The operation requires administrator credentials."); + } + + var args = new AdminCredentialsRequiredEventArgs(); + handle(this, args); + newCredentials = args.Credentials; + + if (args.CacheCredentials) + { + m_adminCredentials = args.Credentials; + } + } + else + { + newCredentials = m_adminCredentials; + } + + try + { + m_session.UpdateSession(newCredentials, m_preferredLocales); + } + catch (Exception) + { + m_adminCredentials = null; + throw; + } + } + + return oldUser; + } + + private void RevertPermissions(IUserIdentity oldUser) + { + try + { + if (!Object.ReferenceEquals(m_session.Identity, oldUser)) + { + m_session.UpdateSession(oldUser, m_preferredLocales); + } + } + catch (Exception e) + { + Utils.Trace(e, "Error reverting to normal permissions."); + } + } + + private void Session_KeepAlive(Session session, KeepAliveEventArgs e) + { + if (!Object.ReferenceEquals(session, m_session)) + { + return; + } + + var Callback = KeepAlive; + + if (Callback != null) + { + try + { + Callback(session, e); + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error raising KeepAlive event."); + } + } + } + + private void ServerStatus_Notification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e) + { + if (!Object.ReferenceEquals(monitoredItem.Subscription.Session, m_session)) + { + return; + } + + var Callback = ServerStatusChanged; + + if (Callback != null) + { + try + { + Callback(monitoredItem, e); + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error raising KeepAlive event."); + } + } + } + #endregion + + #region Private Fields + private ApplicationInstance m_application; + private ConfiguredEndpoint m_endpoint; + private string m_endpointUrl; + private string[] m_preferredLocales; + private Session m_session; + private IUserIdentity m_adminCredentials; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ApplicationsDatabaseBase.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ApplicationsDatabaseBase.cs new file mode 100644 index 00000000..d97ee230 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ApplicationsDatabaseBase.cs @@ -0,0 +1,661 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Text; + + + +namespace Opc.Ua.Gds.Server.Database +{ + [Serializable] + public abstract class ApplicationsDatabaseBase : IApplicationsDatabase + { + #region IApplicationsDatabase Members + public virtual void Initialize() + { + } + + public ushort NamespaceIndex { get; set; } + + public virtual NodeId RegisterApplication( + ApplicationRecordDataType application + ) + { + if (application == null) + { + throw new ArgumentNullException(nameof(application)); + } + + if (application.ApplicationUri == null) + { + throw new ArgumentNullException("ApplicationUri"); + } + + if (!Uri.IsWellFormedUriString(application.ApplicationUri, UriKind.Absolute)) + { + throw new ArgumentException(application.ApplicationUri + " is not a valid URI.", "ApplicationUri"); + } + + if (application.ApplicationType < ApplicationType.Server || application.ApplicationType > ApplicationType.DiscoveryServer) + { + throw new ArgumentException(application.ApplicationType.ToString() + " is not a valid ApplicationType.", "ApplicationType"); + } + + if (application.ApplicationNames == null || application.ApplicationNames.Count == 0 || LocalizedText.IsNullOrEmpty(application.ApplicationNames[0])) + { + throw new ArgumentException("At least one ApplicationName must be provided.", "ApplicationNames"); + } + + if (String.IsNullOrEmpty(application.ProductUri)) + { + throw new ArgumentException("A ProductUri must be provided.", "ProductUri"); + } + + if (!Uri.IsWellFormedUriString(application.ProductUri, UriKind.Absolute)) + { + throw new ArgumentException(application.ProductUri + " is not a valid URI.", "ProductUri"); + } + + if (application.DiscoveryUrls != null) + { + foreach (var discoveryUrl in application.DiscoveryUrls) + { + if (String.IsNullOrEmpty(discoveryUrl)) + { + continue; + } + + if (!Uri.IsWellFormedUriString(discoveryUrl, UriKind.Absolute)) + { + throw new ArgumentException(discoveryUrl + " is not a valid URL.", "DiscoveryUrls"); + } + } + } + + if (application.ApplicationType != ApplicationType.Client) + { + if (application.DiscoveryUrls == null || application.DiscoveryUrls.Count == 0) + { + throw new ArgumentException("At least one DiscoveryUrl must be provided.", "DiscoveryUrls"); + } + + if (application.ServerCapabilities == null || application.ServerCapabilities.Count == 0) + { + application.ServerCapabilities = new StringCollection() { "NA" }; + } + } + else + { + if (application.DiscoveryUrls != null && application.DiscoveryUrls.Count > 0) + { + throw new ArgumentException("DiscoveryUrls must not be specified for clients.", "DiscoveryUrls"); + } + } + + NodeId nodeId = new NodeId(); + if (!NodeId.IsNull(application.ApplicationId)) + { + // verify node integrity + switch (application.ApplicationId.IdType) + { + case IdType.Guid: + nodeId = new NodeId((Guid)application.ApplicationId.Identifier, NamespaceIndex); + break; + case IdType.String: + nodeId = new NodeId((string)application.ApplicationId.Identifier, NamespaceIndex); + break; + default: + throw new ArgumentException("The ApplicationId has invalid type {0}", application.ApplicationId.ToString()); + } + } + + return nodeId; + } + + public virtual void UnregisterApplication(NodeId applicationId) + { + ValidateApplicationNodeId(applicationId); + } + + public virtual ApplicationRecordDataType GetApplication( + NodeId applicationId + ) + { + ValidateApplicationNodeId(applicationId); + return null; + } + + public virtual ApplicationRecordDataType[] FindApplications( + string applicationUri + ) + { + return null; + } + + public virtual ServerOnNetwork[] QueryServers( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + string[] serverCapabilities, + out DateTime lastCounterResetTime) + { + lastCounterResetTime = DateTime.MinValue; + return null; + } + + public virtual ApplicationDescription[] QueryApplications( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + uint applicationType, + string productUri, + string[] serverCapabilities, + out DateTime lastCounterResetTime, + out uint nextRecordId + ) + { + lastCounterResetTime = DateTime.MinValue; + nextRecordId = 0; + return null; + } + + public virtual bool SetApplicationCertificate( + NodeId applicationId, + string certificateType, + byte[] certificate + ) + { + ValidateApplicationNodeId(applicationId); + return false; + } + + public virtual bool GetApplicationCertificate( + NodeId applicationId, + string certificateTypeId, + out byte[] certificate) + { + certificate = null; + ValidateApplicationNodeId(applicationId); + return false; + } + + public virtual bool SetApplicationTrustLists( + NodeId applicationId, + string certificateTypeId, + string trustListId) + { + ValidateApplicationNodeId(applicationId); + return false; + } + public virtual bool GetApplicationTrustLists( + NodeId applicationId, + string certificateTypeId, + out string trustListId) + { + trustListId = null; + ValidateApplicationNodeId(applicationId); + return false; + } + #endregion + #region Public Menbers + /// + /// Returns true if the target string matches the UA pattern string. + /// The pattern string may include UA wildcards %_\[]! + /// + /// String to check for a pattern match. + /// Pattern to match with the target string. + /// true if the target string matches the pattern, otherwise false. + public static bool Match(string target, string pattern) + { + if (String.IsNullOrEmpty(target)) + { + return false; + } + + if (String.IsNullOrEmpty(pattern)) + { + return true; + } + + var tokens = Parse(pattern); + + int targetIndex = 0; + + for (int ii = 0; ii < tokens.Count; ii++) + { + targetIndex = Match(target, targetIndex, tokens, ref ii); + + if (targetIndex < 0) + { + return false; + } + } + + if (targetIndex < target.Length) + { + return false; + } + + return true; + } + + /// + /// Returns true if the pattern string contains a UA pattern. + /// The pattern string may include UA wildcards %_\[]! + /// + + public static bool IsMatchPattern(string pattern) + { + var patternChars = new char[] { '%', '_', '\\', '[', ']', '!' }; + if (String.IsNullOrEmpty(pattern)) + { + return false; + } + + foreach (var patternChar in patternChars) + { + if (pattern.Contains(patternChar)) + { + return true; + } + } + return false; + } + + public string ServerCapabilities(ApplicationRecordDataType application) + { + if (application.ApplicationType != ApplicationType.Client) + { + if (application.ServerCapabilities == null || application.ServerCapabilities.Count == 0) + { + throw new ArgumentException("At least one Server Capability must be provided.", "ServerCapabilities"); + } + } + + StringBuilder capabilities = new StringBuilder(); + if (application.ServerCapabilities != null) + { + application.ServerCapabilities.Sort(); + foreach (var capability in application.ServerCapabilities) + { + if (String.IsNullOrEmpty(capability)) + { + continue; + } + + if (capabilities.Length > 0) + { + capabilities.Append(','); + } + + capabilities.Append(capability); + } + } + + return capabilities.ToString(); + } + + protected Guid GetNodeIdGuid( + NodeId nodeId + ) + { + if (NodeId.IsNull(nodeId)) + { + throw new ArgumentNullException(nameof(nodeId)); + } + + if (nodeId.IdType != IdType.Guid || NamespaceIndex != nodeId.NamespaceIndex) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + Guid? id = nodeId.Identifier as Guid?; + + if (id == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + return (Guid)id; + } + + protected string GetNodeIdString( + NodeId nodeId + ) + { + if (NodeId.IsNull(nodeId)) + { + return null; + } + + if (nodeId.IdType != IdType.String || NamespaceIndex != nodeId.NamespaceIndex) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + string id = nodeId.Identifier as string; + + if (id == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + return id; + } + + protected void ValidateApplicationNodeId( + NodeId nodeId + ) + { + if (NodeId.IsNull(nodeId)) + { + throw new ArgumentNullException(nameof(nodeId)); + } + + if ((nodeId.IdType != IdType.Guid && nodeId.IdType != IdType.String) || + NamespaceIndex != nodeId.NamespaceIndex) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + if (nodeId.IdType == IdType.Guid) + { + // test if identifier is a valid Guid + Guid? id = nodeId.Identifier as Guid?; + + if (id == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + } + } + + #endregion + #region Private Members + private static List Parse(string pattern) + { + List tokens = new List(); + + int ii = 0; + var buffer = new System.Text.StringBuilder(); + + while (ii < pattern.Length) + { + char ch = pattern[ii]; + + if (ch == '\\') + { + ii++; + + if (ii >= pattern.Length) + { + break; + } + + buffer.Append(pattern[ii]); + ii++; + continue; + } + + if (ch == '_') + { + if (buffer.Length > 0) + { + tokens.Add(buffer.ToString()); + buffer.Length = 0; + } + + tokens.Add("_"); + ii++; + continue; + } + + if (ch == '%') + { + if (buffer.Length > 0) + { + tokens.Add(buffer.ToString()); + buffer.Length = 0; + } + + tokens.Add("%"); + ii++; + + while (ii < pattern.Length && pattern[ii] == '%') + { + ii++; + } + + continue; + } + + if (ch == '[') + { + if (buffer.Length > 0) + { + tokens.Add(buffer.ToString()); + buffer.Length = 0; + } + + buffer.Append(ch); + ii++; + + int start = 0; + int end = 0; + while (ii < pattern.Length && pattern[ii] != ']') + { + if (pattern[ii] == '-' && ii > 0 && ii < pattern.Length - 1) + { + start = Convert.ToInt32(pattern[ii - 1]) + 1; + end = Convert.ToInt32(pattern[ii + 1]); + + while (start < end) + { + buffer.Append(Convert.ToChar(start)); + start++; + } + + buffer.Append(Convert.ToChar(end)); + ii += 2; + continue; + } + + buffer.Append(pattern[ii]); + ii++; + } + + buffer.Append("]"); + tokens.Add(buffer.ToString()); + buffer.Length = 0; + + ii++; + continue; + } + + buffer.Append(ch); + ii++; + } + + if (buffer.Length > 0) + { + tokens.Add(buffer.ToString()); + buffer.Length = 0; + } + + return tokens; + } + + private static int SkipToNext(string target, int targetIndex, IList tokens, ref int tokenIndex) + { + if (targetIndex >= target.Length - 1) + { + return targetIndex + 1; + } + + if (tokenIndex >= tokens.Count - 1) + { + return target.Length + 1; + } + + + if (!tokens[tokenIndex + 1].StartsWith("[^", StringComparison.Ordinal)) + { + int nextTokenIndex = tokenIndex + 1; + + // skip over unmatched chars. + while (targetIndex < target.Length && Match(target, targetIndex, tokens, ref nextTokenIndex) < 0) + { + targetIndex++; + nextTokenIndex = tokenIndex + 1; + } + + nextTokenIndex = tokenIndex + 1; + + // skip over duplicate matches. + while (targetIndex < target.Length && Match(target, targetIndex, tokens, ref nextTokenIndex) >= 0) + { + targetIndex++; + nextTokenIndex = tokenIndex + 1; + } + + // return last match. + if (targetIndex <= target.Length) + { + return targetIndex - 1; + } + } + else + { + int start = targetIndex; + int nextTokenIndex = tokenIndex + 1; + + // skip over matches. + while (targetIndex < target.Length && Match(target, targetIndex, tokens, ref nextTokenIndex) >= 0) + { + targetIndex++; + nextTokenIndex = tokenIndex + 1; + } + + // no match in string. + if (targetIndex < target.Length) + { + return -1; + } + + // try the next token. + if (tokenIndex >= tokens.Count - 2) + { + return target.Length + 1; + } + + tokenIndex++; + + return SkipToNext(target, start, tokens, ref tokenIndex); + } + + return -1; + } + + private static int Match(string target, int targetIndex, IList tokens, ref int tokenIndex) + { + if (tokens == null || tokenIndex < 0 || tokenIndex >= tokens.Count) + { + return -1; + } + + if (target == null || targetIndex < 0 || targetIndex >= target.Length) + { + if (tokens[tokenIndex] == "%" && tokenIndex == tokens.Count - 1) + { + return targetIndex; + } + + return -1; + } + + string token = tokens[tokenIndex]; + + if (token == "_") + { + if (targetIndex >= target.Length) + { + return -1; + } + + return targetIndex + 1; + } + + if (token == "%") + { + return SkipToNext(target, targetIndex, tokens, ref tokenIndex); + } + + if (token.StartsWith("[", StringComparison.Ordinal)) + { + bool inverse = false; + bool match = false; + + for (int ii = 1; ii < token.Length - 1; ii++) + { + if (token[ii] == '^') + { + inverse = true; + continue; + } + + if (!inverse && target[targetIndex] == token[ii]) + { + return targetIndex + 1; + } + + match |= (inverse && target[targetIndex] == token[ii]); + } + + if (inverse && !match) + { + return targetIndex + 1; + } + + return -1; + } + + if (target.Substring(targetIndex).StartsWith(token, StringComparison.Ordinal)) + { + return targetIndex + token.Length; + } + + return -1; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ApplicationsNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ApplicationsNodeManager.cs new file mode 100644 index 00000000..f2eb5b26 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ApplicationsNodeManager.cs @@ -0,0 +1,1389 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using Opc.Ua.Gds.Server.Database; +using Opc.Ua.Server; + +namespace Opc.Ua.Gds.Server +{ + /// + /// A node manager for a global discovery server + /// + public class ApplicationsNodeManager : CustomNodeManager2 + { + NodeId DefaultApplicationGroupId; + NodeId DefaultHttpsGroupId; + NodeId DefaultUserTokenGroupId; + + #region Constructors + /// + /// Initializes the node manager. + /// + public ApplicationsNodeManager( + IServerInternal server, + ApplicationConfiguration configuration, + IApplicationsDatabase database, + ICertificateRequest request, + ICertificateGroup certificateGroup, + bool autoApprove = false + ) + : base(server, configuration) + { + List namespaceUris = new List + { + "http://opcfoundation.org/UA/GDS/applications/", + Opc.Ua.Gds.Namespaces.OpcUaGds + }; + NamespaceUris = namespaceUris; + + SystemContext.NodeIdFactory = this; + + // get the configuration for the node manager. + m_configuration = configuration.ParseExtension(); + + // use suitable defaults if no configuration exists. + if (m_configuration == null) + { + m_configuration = new GlobalDiscoveryServerConfiguration(); + } + + if (!String.IsNullOrEmpty(m_configuration.DefaultSubjectNameContext)) + { + if (m_configuration.DefaultSubjectNameContext[0] != ',') + { + m_configuration.DefaultSubjectNameContext = "," + m_configuration.DefaultSubjectNameContext; + } + } + + DefaultApplicationGroupId = ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultApplicationGroup, Server.NamespaceUris); + DefaultHttpsGroupId = ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultHttpsGroup, Server.NamespaceUris); + DefaultUserTokenGroupId = ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultUserTokenGroup, Server.NamespaceUris); + + m_autoApprove = autoApprove; + m_database = database; + m_request = request; + m_certificateGroupFactory = certificateGroup; + m_certificateGroups = new Dictionary(); + + try + { + DateTime lastResetTime; + var results = m_database.QueryServers(0, 5, null, null, null, null, out lastResetTime); + Utils.Trace("QueryServers Returned: {0} records", results.Length); + + foreach (var result in results) + { + Utils.Trace("Server Found at {0}", result.DiscoveryUrl); + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not connect to the Database!"); + + var ie = e.InnerException; + + while (ie != null) + { + Utils.Trace(ie, ""); + ie = ie.InnerException; + } + + Utils.Trace("Initialize Database tables!"); + m_database.Initialize(); + + Utils.Trace("Database Initialized!"); + } + + Server.MessageContext.Factory.AddEncodeableTypes(typeof(Opc.Ua.Gds.ObjectIds).GetTypeInfo().Assembly); + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + // TBD + } + } + #endregion + + #region INodeIdFactory Members + /// + /// Creates the NodeId for the specified node. + /// + public override NodeId New(ISystemContext context, NodeState node) + { + // generate a numeric node id if the node has a parent and no node id assigned. + BaseInstanceState instance = node as BaseInstanceState; + if (instance != null && instance.Parent != null) + { + return GenerateNodeId(); + } + + return node.NodeId; + } + #endregion + + #region Private Methods + private void HasApplicationAdminAccess(ISystemContext context) + { + if (context != null) + { + RoleBasedIdentity identity = context.UserIdentity as RoleBasedIdentity; + + if ((identity == null) || (identity.Role != GdsRole.ApplicationAdmin)) + { + throw new ServiceResultException(StatusCodes.BadUserAccessDenied, "Application Administrator access required."); + } + } + } + + private void HasApplicationUserAccess(ISystemContext context) + { + if (context != null) + { + RoleBasedIdentity identity = context.UserIdentity as RoleBasedIdentity; + + if (identity == null) + { + throw new ServiceResultException(StatusCodes.BadUserAccessDenied, "Application User access required."); + } + } + } + + private NodeId GetTrustListId(NodeId certificateGroupId) + { + + if (NodeId.IsNull(certificateGroupId)) + { + certificateGroupId = DefaultApplicationGroupId; + } + + CertificateGroup certificateGroup = null; + if (m_certificateGroups.TryGetValue(certificateGroupId, out certificateGroup)) + { + return certificateGroup.DefaultTrustList?.NodeId; + } + + return null; + } + + private Boolean? GetCertificateStatus( + NodeId certificateGroupId, + NodeId certificateTypeId) + { + CertificateGroup certificateGroup = null; + if (m_certificateGroups.TryGetValue(certificateGroupId, out certificateGroup)) + { + if (!NodeId.IsNull(certificateTypeId)) + { + if (!Utils.IsEqual(certificateGroup.CertificateType, certificateTypeId)) + { + return null; + } + } + return certificateGroup.UpdateRequired; + } + + return null; + } + + private ICertificateGroup GetCertificateGroup(NodeId certificateGroupId) + { + foreach (var certificateGroup in m_certificateGroups.Values) + { + if (certificateGroupId == certificateGroup.Id) + { + return certificateGroup; + } + } + + return null; + } + + private ICertificateGroup GetCertificateGroup(string id) + { + foreach (var certificateGroup in m_certificateGroups.Values) + { + if (id == certificateGroup.Configuration.Id) + { + return certificateGroup; + } + } + + return null; + } + + + private ICertificateGroup GetGroupForCertificate(byte[] certificate) + { + if (certificate != null && certificate.Length > 0) + { + var x509 = new X509Certificate2(certificate); + + foreach (var certificateGroup in m_certificateGroups.Values) + { + if (X509Utils.CompareDistinguishedName(certificateGroup.Certificate.Subject, x509.Issuer)) + { + return certificateGroup; + } + } + } + + return null; + } + + private async Task RevokeCertificateAsync(byte[] certificate) + { + if (certificate != null && certificate.Length > 0) + { + ICertificateGroup certificateGroup = GetGroupForCertificate(certificate); + + if (certificateGroup != null) + { + try + { + var x509 = new X509Certificate2(certificate); + await certificateGroup.RevokeCertificateAsync(x509); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error revoking certificate. {0} for Authority={1}", new X509Certificate2(certificate).Subject, certificateGroup.Id); + } + } + } + } + + protected async Task InitializeCertificateGroup(CertificateGroupConfiguration certificateGroupConfiguration) + { + if (String.IsNullOrEmpty(certificateGroupConfiguration.SubjectName)) + { + throw new ArgumentNullException("SubjectName not specified"); + } + + if (String.IsNullOrEmpty(certificateGroupConfiguration.BaseStorePath)) + { + throw new ArgumentNullException("BaseStorePath not specified"); + } + + CertificateGroup certificateGroup = m_certificateGroupFactory.Create( + m_configuration.AuthoritiesStorePath, certificateGroupConfiguration); + SetCertificateGroupNodes(certificateGroup); + await certificateGroup.Init(); + + return certificateGroup; + } + #endregion + + #region INodeManager Members + /// + /// Does any initialization required before the address space can be used. + /// + /// + /// The externalReferences is an out parameter that allows the node manager to link to nodes + /// in other node managers. For example, the 'Objects' node is managed by the CoreNodeManager and + /// should have a reference to the root folder node(s) exposed by this node manager. + /// + public override void CreateAddressSpace(IDictionary> externalReferences) + { + lock (Lock) + { + base.CreateAddressSpace(externalReferences); + + m_database.NamespaceIndex = this.NamespaceIndexes[0]; + m_request.NamespaceIndex = this.NamespaceIndexes[0]; + + foreach (var certificateGroupConfiguration in m_configuration.CertificateGroups) + { + try + { + CertificateGroup certificateGroup = InitializeCertificateGroup(certificateGroupConfiguration).Result; + m_certificateGroups[certificateGroup.Id] = certificateGroup; + } + catch (Exception e) + { + var message = new StringBuilder(); + message.AppendLine("Unexpected error initializing certificateGroup: {0}"); + message.AppendLine("{1}"); + Utils.Trace(e, message.ToString(), + certificateGroupConfiguration.Id, + ServiceResult.BuildExceptionTrace(e)); + // make sure gds server doesn't start without cert groups! + throw; + } + } + + m_certTypeMap = new Dictionary + { + // list of supported cert type mappings (V1.04) + { Ua.ObjectTypeIds.HttpsCertificateType, nameof(Ua.ObjectTypeIds.HttpsCertificateType) }, + { Ua.ObjectTypeIds.UserCredentialCertificateType, nameof(Ua.ObjectTypeIds.UserCredentialCertificateType) }, + { Ua.ObjectTypeIds.ApplicationCertificateType, nameof(Ua.ObjectTypeIds.ApplicationCertificateType) }, + { Ua.ObjectTypeIds.RsaMinApplicationCertificateType, nameof(Ua.ObjectTypeIds.RsaMinApplicationCertificateType) }, + { Ua.ObjectTypeIds.RsaSha256ApplicationCertificateType, nameof(Ua.ObjectTypeIds.RsaSha256ApplicationCertificateType) } + }; + + } + } + + /// + /// Loads a node set from a file or resource and adds them to the set of predefined nodes. + /// + protected override NodeStateCollection LoadPredefinedNodes(ISystemContext context) + { + NodeStateCollection predefinedNodes = new NodeStateCollection(); + predefinedNodes.LoadFromBinaryResource(context, "Opc.Ua.Gds.Server.Model.Opc.Ua.Gds.PredefinedNodes.uanodes", typeof(ApplicationsNodeManager).GetTypeInfo().Assembly, true); + return predefinedNodes; + } + + /// + /// Replaces the generic node with a node specific to the model. + /// + protected override NodeState AddBehaviourToPredefinedNode(ISystemContext context, NodeState predefinedNode) + { + BaseObjectState passiveNode = predefinedNode as BaseObjectState; + + if (passiveNode == null) + { + return predefinedNode; + } + + NodeId typeId = passiveNode.TypeDefinitionId; + + if (!IsNodeIdInNamespace(typeId) || typeId.IdType != IdType.Numeric) + { + return predefinedNode; + } + + switch ((uint)typeId.Identifier) + { + case Opc.Ua.Gds.ObjectTypes.CertificateDirectoryType: + { + if (passiveNode is Opc.Ua.Gds.CertificateDirectoryState) + { + break; + } + + Opc.Ua.Gds.CertificateDirectoryState activeNode = new Opc.Ua.Gds.CertificateDirectoryState(passiveNode.Parent); + + activeNode.Create(context, passiveNode); + activeNode.QueryServers.OnCall = new QueryServersMethodStateMethodCallHandler(OnQueryServers); + activeNode.QueryApplications.OnCall = new QueryApplicationsMethodStateMethodCallHandler(OnQueryApplications); + activeNode.RegisterApplication.OnCall = new RegisterApplicationMethodStateMethodCallHandler(OnRegisterApplication); + activeNode.UpdateApplication.OnCall = new UpdateApplicationMethodStateMethodCallHandler(OnUpdateApplication); + activeNode.UnregisterApplication.OnCall = new UnregisterApplicationMethodStateMethodCallHandler(OnUnregisterApplication); + activeNode.FindApplications.OnCall = new FindApplicationsMethodStateMethodCallHandler(OnFindApplications); + activeNode.GetApplication.OnCall = new GetApplicationMethodStateMethodCallHandler(OnGetApplication); + activeNode.StartNewKeyPairRequest.OnCall = new StartNewKeyPairRequestMethodStateMethodCallHandler(OnStartNewKeyPairRequest); + activeNode.FinishRequest.OnCall = new FinishRequestMethodStateMethodCallHandler(OnFinishRequest); + activeNode.GetCertificateGroups.OnCall = new GetCertificateGroupsMethodStateMethodCallHandler(OnGetCertificateGroups); + activeNode.GetTrustList.OnCall = new GetTrustListMethodStateMethodCallHandler(OnGetTrustList); + activeNode.GetCertificateStatus.OnCall = new GetCertificateStatusMethodStateMethodCallHandler(OnGetCertificateStatus); + activeNode.StartSigningRequest.OnCall = new StartSigningRequestMethodStateMethodCallHandler(OnStartSigningRequest); + // TODO + //activeNode.RevokeCertificate.OnCall = new RevokeCertificateMethodStateMethodCallHandler(OnRevokeCertificate); + + activeNode.CertificateGroups.DefaultApplicationGroup.CertificateTypes.Value = new NodeId[] { Opc.Ua.ObjectTypeIds.RsaSha256ApplicationCertificateType }; + activeNode.CertificateGroups.DefaultApplicationGroup.TrustList.LastUpdateTime.Value = DateTime.UtcNow; + activeNode.CertificateGroups.DefaultApplicationGroup.TrustList.Writable.Value = false; + activeNode.CertificateGroups.DefaultApplicationGroup.TrustList.UserWritable.Value = false; + + activeNode.CertificateGroups.DefaultHttpsGroup.CertificateTypes.Value = new NodeId[] { Opc.Ua.ObjectTypeIds.HttpsCertificateType }; + activeNode.CertificateGroups.DefaultHttpsGroup.TrustList.LastUpdateTime.Value = DateTime.UtcNow; + activeNode.CertificateGroups.DefaultHttpsGroup.TrustList.Writable.Value = false; + activeNode.CertificateGroups.DefaultHttpsGroup.TrustList.UserWritable.Value = false; + + activeNode.CertificateGroups.DefaultUserTokenGroup.CertificateTypes.Value = new NodeId[] { Opc.Ua.ObjectTypeIds.UserCredentialCertificateType }; + activeNode.CertificateGroups.DefaultUserTokenGroup.TrustList.LastUpdateTime.Value = DateTime.UtcNow; + activeNode.CertificateGroups.DefaultUserTokenGroup.TrustList.Writable.Value = false; + activeNode.CertificateGroups.DefaultUserTokenGroup.TrustList.UserWritable.Value = false; + + // replace the node in the parent. + if (passiveNode.Parent != null) + { + passiveNode.Parent.ReplaceChild(context, activeNode); + } + + return activeNode; + } + } + + return predefinedNode; + } + + private ServiceResult OnQueryServers( + ISystemContext context, + MethodState method, + NodeId objectId, + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + string[] serverCapabilities, + ref DateTime lastCounterResetTime, + ref ServerOnNetwork[] servers) + { + + Utils.Trace(Utils.TraceMasks.Information, "QueryServers: {0} {1}", applicationUri, applicationName); + + servers = m_database.QueryServers( + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + productUri, + serverCapabilities, + out lastCounterResetTime); + + return ServiceResult.Good; + } + + private ServiceResult OnQueryApplications( + ISystemContext context, + MethodState method, + NodeId objectId, + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + uint applicationType, + string productUri, + string[] serverCapabilities, + ref DateTime lastCounterResetTime, + ref uint nextRecordId, + ref ApplicationDescription[] applications + ) + { + Utils.Trace(Utils.TraceMasks.Information, "QueryApplications: {0} {1}", applicationUri, applicationName); + + applications = m_database.QueryApplications( + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + applicationType, + productUri, + serverCapabilities, + out lastCounterResetTime, + out nextRecordId + ); + return ServiceResult.Good; + } + + private ServiceResult OnRegisterApplication( + ISystemContext context, + MethodState method, + NodeId objectId, + ApplicationRecordDataType application, + ref NodeId applicationId) + { + HasApplicationAdminAccess(context); + + Utils.Trace(Utils.TraceMasks.Information, "OnRegisterApplication: {0}", application.ApplicationUri); + + applicationId = m_database.RegisterApplication(application); + + return ServiceResult.Good; + } + + private ServiceResult OnUpdateApplication( + ISystemContext context, + MethodState method, + NodeId objectId, + ApplicationRecordDataType application) + { + HasApplicationAdminAccess(context); + + Utils.Trace(Utils.TraceMasks.Information, "OnUpdateApplication: {0}", application.ApplicationUri); + + var record = m_database.GetApplication(application.ApplicationId); + + if (record == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The application id does not exist."); + } + + m_database.RegisterApplication(application); + + return ServiceResult.Good; + } + + private ServiceResult OnUnregisterApplication( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId) + { + HasApplicationAdminAccess(context); + + Utils.Trace(Utils.TraceMasks.Information, "OnUnregisterApplication: {0}", applicationId.ToString()); + + foreach (var certType in m_certTypeMap) + { + try + { + byte[] certificate; + if (m_database.GetApplicationCertificate(applicationId, certType.Value, out certificate)) + { + if (certificate != null) + { + RevokeCertificateAsync(certificate).Wait(); + } + } + } + catch + { + Utils.Trace(Utils.TraceMasks.Error, "Failed to revoke: {0}", certType.Value); + } + } + + m_database.UnregisterApplication(applicationId); + + return ServiceResult.Good; + } + + private ServiceResult OnFindApplications( + ISystemContext context, + MethodState method, + NodeId objectId, + string applicationUri, + ref ApplicationRecordDataType[] applications) + { + HasApplicationUserAccess(context); + Utils.Trace(Utils.TraceMasks.Information, "OnFindApplications: {0}", applicationUri); + applications = m_database.FindApplications(applicationUri); + return ServiceResult.Good; + } + + private ServiceResult OnGetApplication( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + ref ApplicationRecordDataType application) + { + HasApplicationUserAccess(context); + Utils.Trace(Utils.TraceMasks.Information, "OnGetApplication: {0}", applicationId); + application = m_database.GetApplication(applicationId); + return ServiceResult.Good; + } + + private ServiceResult CheckHttpsDomain(ApplicationRecordDataType application, string commonName) + { + if (application.ApplicationType == ApplicationType.Client) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "Cannot issue HTTPS certificates to client applications."); + } + + bool found = false; + + if (application.DiscoveryUrls != null) + { + foreach (var discoveryUrl in application.DiscoveryUrls) + { + if (Uri.IsWellFormedUriString(discoveryUrl, UriKind.Absolute)) + { + Uri url = new Uri(discoveryUrl); + + if (url.Scheme == Utils.UriSchemeHttps) + { + if (Utils.AreDomainsEqual(commonName, url.DnsSafeHost)) + { + found = true; + break; + } + } + } + } + } + + if (!found) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "Cannot issue HTTPS certificates to server applications without a matching HTTPS discovery URL."); + } + + return ServiceResult.Good; + } + + private string GetDefaultHttpsDomain(ApplicationRecordDataType application) + { + if (application.DiscoveryUrls != null) + { + foreach (var discoveryUrl in application.DiscoveryUrls) + { + if (Uri.IsWellFormedUriString(discoveryUrl, UriKind.Absolute)) + { + Uri url = new Uri(discoveryUrl); + + if (url.Scheme == Utils.UriSchemeHttps) + { + return url.DnsSafeHost; + } + } + } + } + + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "Cannot issue HTTPS certificates to server applications without a HTTPS discovery URL."); + } + + private string GetDefaultUserToken() + { + return "USER"; + } + + private string GetSubjectName(ApplicationRecordDataType application, CertificateGroup certificateGroup, string subjectName) + { + bool contextFound = false; + + var fields = X509Utils.ParseDistinguishedName(subjectName); + + StringBuilder builder = new StringBuilder(); + + foreach (var field in fields) + { + if (builder.Length > 0) + { + builder.Append(","); + } + + if (field.StartsWith("CN=", StringComparison.Ordinal)) + { + if (certificateGroup.Id == DefaultHttpsGroupId) + { + var error = CheckHttpsDomain(application, field.Substring(3)); + + if (StatusCode.IsBad(error.StatusCode)) + { + builder.Append("CN="); + builder.Append(GetDefaultHttpsDomain(application)); + continue; + } + } + } + + contextFound |= (field.StartsWith("DC=", StringComparison.Ordinal) || field.StartsWith("O=", StringComparison.Ordinal)); + + builder.Append(field); + } + + if (!contextFound) + { + if (!String.IsNullOrEmpty(m_configuration.DefaultSubjectNameContext)) + { + builder.Append(m_configuration.DefaultSubjectNameContext); + } + } + + return builder.ToString(); + } + + private string[] GetDefaultDomainNames(ApplicationRecordDataType application) + { + List names = new List(); + + if (application.DiscoveryUrls != null && application.DiscoveryUrls.Count > 0) + { + foreach (var discoveryUrl in application.DiscoveryUrls) + { + if (Uri.IsWellFormedUriString(discoveryUrl, UriKind.Absolute)) + { + Uri url = new Uri(discoveryUrl); + + foreach (var name in names) + { + if (Utils.AreDomainsEqual(name, url.DnsSafeHost)) + { + url = null; + break; + } + } + + if (url != null) + { + names.Add(url.DnsSafeHost); + } + } + } + } + + return names.ToArray(); + } + + private ServiceResult OnStartNewKeyPairRequest( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + string subjectName, + string[] domainNames, + string privateKeyFormat, + string privateKeyPassword, + ref NodeId requestId) + { + HasApplicationAdminAccess(context); + + var application = m_database.GetApplication(applicationId); + + if (application == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The ApplicationId does not refer to a valid application."); + } + + if (NodeId.IsNull(certificateGroupId)) + { + certificateGroupId = ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultApplicationGroup, Server.NamespaceUris); + } + + CertificateGroup certificateGroup = null; + if (!m_certificateGroups.TryGetValue(certificateGroupId, out certificateGroup)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The certificateGroup is not supported."); + } + + if (!NodeId.IsNull(certificateTypeId)) + { + if (!Server.TypeTree.IsTypeOf(certificateGroup.CertificateType, certificateTypeId)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateType is not supported by the certificateGroup."); + } + } + else + { + certificateTypeId = certificateGroup.CertificateType; + } + + string certificateTypeNameId; + if (!m_certTypeMap.TryGetValue(certificateTypeId, out certificateTypeNameId)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateType is invalid."); + } + + if (!String.IsNullOrEmpty(subjectName)) + { + subjectName = GetSubjectName(application, certificateGroup, subjectName); + } + else + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append("CN="); + + if ((NodeId.IsNull(certificateGroup.Id) || (certificateGroup.Id == DefaultApplicationGroupId)) && (application.ApplicationNames.Count > 0)) + { + buffer.Append(application.ApplicationNames[0]); + } + else if (certificateGroup.Id == DefaultHttpsGroupId) + { + buffer.Append(GetDefaultHttpsDomain(application)); + } + else if (certificateGroup.Id == DefaultUserTokenGroupId) + { + buffer.Append(GetDefaultUserToken()); + } + + if (!String.IsNullOrEmpty(m_configuration.DefaultSubjectNameContext)) + { + buffer.Append(m_configuration.DefaultSubjectNameContext); + } + + subjectName = buffer.ToString(); + } + + if (domainNames != null && domainNames.Length > 0) + { + foreach (var domainName in domainNames) + { + if (Uri.CheckHostName(domainName) == UriHostNameType.Unknown) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The domainName ({0}) is not a valid DNS Name or IPAddress.", domainName); + } + } + } + else + { + domainNames = GetDefaultDomainNames(application); + } + + requestId = m_request.StartNewKeyPairRequest( + applicationId, + certificateGroup.Configuration.Id, + certificateTypeNameId, + subjectName, + domainNames, + privateKeyFormat, + privateKeyPassword, + context.UserIdentity?.DisplayName); + + if (m_autoApprove) + { + try + { + m_request.ApproveRequest(requestId, false); + } + catch + { + // ignore error as user may not have authorization to approve requests + } + } + + return ServiceResult.Good; + } + + private ServiceResult OnStartSigningRequest( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + byte[] certificateRequest, + ref NodeId requestId) + { + HasApplicationAdminAccess(context); + + var application = m_database.GetApplication(applicationId); + + if (application == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The ApplicationId does not refer to a valid application."); + } + + if (NodeId.IsNull(certificateGroupId)) + { + certificateGroupId = ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultApplicationGroup, Server.NamespaceUris); + } + + CertificateGroup certificateGroup = null; + if (!m_certificateGroups.TryGetValue(certificateGroupId, out certificateGroup)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateGroupId does not refer to a supported certificateGroup."); + } + + if (!NodeId.IsNull(certificateTypeId)) + { + if (!Server.TypeTree.IsTypeOf(certificateGroup.CertificateType, certificateTypeId)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateTypeId is not supported by the certificateGroup."); + } + } + else + { + certificateTypeId = certificateGroup.CertificateType; + } + + string certificateTypeNameId; + if (!m_certTypeMap.TryGetValue(certificateTypeId, out certificateTypeNameId)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateType is invalid."); + } + + + // verify the CSR integrity for the application + certificateGroup.VerifySigningRequestAsync( + application, + certificateRequest + ).Wait(); + + // store request in the queue for approval + requestId = m_request.StartSigningRequest( + applicationId, + certificateGroup.Configuration.Id, + certificateTypeNameId, + certificateRequest, + context.UserIdentity?.DisplayName); + + if (m_autoApprove) + { + try + { + m_request.ApproveRequest(requestId, false); + } + catch + { + // ignore error as user may not have authorization to approve requests + } + } + + return ServiceResult.Good; + } + + private ServiceResult OnFinishRequest( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId requestId, + ref byte[] signedCertificate, + ref byte[] privateKey, + ref byte[][] issuerCertificates) + { + signedCertificate = null; + issuerCertificates = null; + privateKey = null; + HasApplicationAdminAccess(context); + + var application = m_database.GetApplication(applicationId); + if (application == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The ApplicationId does not refer to a valid application."); + } + + string certificateGroupId; + string certificateTypeId; + + var state = m_request.FinishRequest( + applicationId, + requestId, + out certificateGroupId, + out certificateTypeId, + out signedCertificate, + out privateKey); + + var approvalState = VerifyApprovedState(state); + if (approvalState != null) + { + return approvalState; + } + + CertificateGroup certificateGroup = null; + if (!String.IsNullOrWhiteSpace(certificateGroupId)) + { + foreach (var group in m_certificateGroups) + { + if (String.Compare(group.Value.Configuration.Id, certificateGroupId, StringComparison.OrdinalIgnoreCase) == 0) + { + certificateGroup = group.Value; + break; + } + } + } + + if (certificateGroup == null) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateGroupId does not refer to a supported certificate group."); + } + + NodeId certificateTypeNodeId; + certificateTypeNodeId = m_certTypeMap.Where( + pair => pair.Value.Equals(certificateTypeId, StringComparison.OrdinalIgnoreCase)) + .Select(pair => pair.Key).SingleOrDefault(); + + if (!NodeId.IsNull(certificateTypeNodeId)) + { + if (!Server.TypeTree.IsTypeOf(certificateGroup.CertificateType, certificateTypeNodeId)) + { + return new ServiceResult(StatusCodes.BadInvalidArgument, "The CertificateTypeId is not supported by the certificateGroup."); + } + } + + // distinguish cert creation at approval/complete time + X509Certificate2 certificate = null; + if (signedCertificate == null) + { + byte[] certificateRequest; + string subjectName; + string[] domainNames; + string privateKeyFormat; + string privateKeyPassword; + + state = m_request.ReadRequest( + applicationId, + requestId, + out certificateGroupId, + out certificateTypeId, + out certificateRequest, + out subjectName, + out domainNames, + out privateKeyFormat, + out privateKeyPassword + ); + + approvalState = VerifyApprovedState(state); + if (approvalState != null) + { + return approvalState; + } + + if (certificateRequest != null) + { + try + { + string[] defaultDomainNames = GetDefaultDomainNames(application); + certificate = certificateGroup.SigningRequestAsync( + application, + defaultDomainNames, + certificateRequest + ).Result; + } + catch (Exception e) + { + StringBuilder error = new StringBuilder(); + error.AppendLine("Error Generating Certificate={0}"); + error.AppendLine("ApplicationId={1}"); + error.AppendLine("ApplicationUri={2}"); + error.AppendLine("ApplicationName={3}"); + return ServiceResult.Create(StatusCodes.BadConfigurationError, error.ToString(), + e.Message , applicationId.ToString(), application.ApplicationUri, + application.ApplicationNames[0].Text + ); + } + } + else + { + X509Certificate2KeyPair newKeyPair = null; + try + { + newKeyPair = certificateGroup.NewKeyPairRequestAsync( + application, + subjectName, + domainNames, + privateKeyFormat, + privateKeyPassword).Result; + } + catch (Exception e) + { + StringBuilder error = new StringBuilder(); + error.AppendLine("Error Generating New Key Pair Certificate={0}"); + error.AppendLine("ApplicationId={1}"); + error.AppendLine("ApplicationUri={2}"); + return ServiceResult.Create(StatusCodes.BadConfigurationError, error.ToString(), + e.Message, applicationId.ToString(), application.ApplicationUri); + } + + certificate = newKeyPair.Certificate; + privateKey = newKeyPair.PrivateKey; + + } + + signedCertificate = certificate.RawData; + } + else + { + certificate = new X509Certificate2(signedCertificate); + } + + // TODO: return chain, verify issuer chain cert is up to date, otherwise update local chain + issuerCertificates = new byte[1][]; + issuerCertificates[0] = certificateGroup.Certificate.RawData; + + // store new app certificate + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(m_configuration.ApplicationCertificatesStorePath)) + { + store.Add(certificate).Wait(); + } + + m_database.SetApplicationCertificate(applicationId, m_certTypeMap[certificateGroup.CertificateType], signedCertificate); + + m_request.AcceptRequest(requestId, signedCertificate); + + return ServiceResult.Good; + } + + public ServiceResult OnGetCertificateGroups( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + ref NodeId[] certificateGroupIds) + { + HasApplicationUserAccess(context); + + var application = m_database.GetApplication(applicationId); + + if (application == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The ApplicationId does not refer to a valid application."); + } + + var certificateGroupIdList = new List(); + foreach (var certificateGroup in m_certificateGroups) + { + NodeId key = certificateGroup.Key; + certificateGroupIdList.Add(key); + } + certificateGroupIds = certificateGroupIdList.ToArray(); + + return ServiceResult.Good; + } + + public ServiceResult OnGetTrustList( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + ref NodeId trustListId) + { + HasApplicationUserAccess(context); + + var application = m_database.GetApplication(applicationId); + + if (application == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The ApplicationId does not refer to a valid application."); + } + + if (NodeId.IsNull(certificateGroupId)) + { + certificateGroupId = DefaultApplicationGroupId; + } + + trustListId = GetTrustListId(certificateGroupId); + + if (trustListId == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The CertificateGroupId does not refer to a group that is valid for the application."); + } + + return ServiceResult.Good; + } + + public ServiceResult OnGetCertificateStatus( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + ref Boolean updateRequired) + { + HasApplicationUserAccess(context); + + var application = m_database.GetApplication(applicationId); + + if (application == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The ApplicationId does not refer to a valid application."); + } + + if (NodeId.IsNull(certificateGroupId)) + { + certificateGroupId = DefaultApplicationGroupId; + } + + Boolean? updateRequiredResult = GetCertificateStatus(certificateGroupId, certificateTypeId); + if (updateRequiredResult == null) + { + return new ServiceResult(StatusCodes.BadNotFound, "The CertificateGroupId and CertificateTypeId do not refer to a group and type that is valid for the application."); + } + + updateRequired = (Boolean)updateRequiredResult; + + return ServiceResult.Good; + } + + /// + /// Frees any resources allocated for the address space. + /// + public override void DeleteAddressSpace() + { + lock (Lock) + { + // TBD + } + } + + /// + /// Returns a unique handle for the node. + /// + protected override NodeHandle GetManagerHandle(ServerSystemContext context, NodeId nodeId, IDictionary cache) + { + lock (Lock) + { + // quickly exclude nodes that are not in the namespace. + if (!IsNodeIdInNamespace(nodeId)) + { + return null; + } + + NodeState node = null; + + // check cache (the cache is used because the same node id can appear many times in a single request). + if (cache != null) + { + if (cache.TryGetValue(nodeId, out node)) + { + return new NodeHandle(nodeId, node); + } + } + + // look up predefined node. + if (PredefinedNodes.TryGetValue(nodeId, out node)) + { + NodeHandle handle = new NodeHandle(nodeId, node); + + if (cache != null) + { + cache.Add(nodeId, node); + } + + return handle; + } + + // node not found. + return null; + } + } + + /// + /// Verifies that the specified node exists. + /// + protected override NodeState ValidateNode( + ServerSystemContext context, + NodeHandle handle, + IDictionary cache) + { + // not valid if no root. + if (handle == null) + { + return null; + } + + // check if previously validated. + if (handle.Validated) + { + return handle.Node; + } + + // lookup in operation cache. + NodeState target = FindNodeInCache(context, handle, cache); + + if (target != null) + { + handle.Node = target; + handle.Validated = true; + return handle.Node; + } + + // put root into operation cache. + if (cache != null) + { + cache[handle.NodeId] = target; + } + + handle.Node = target; + handle.Validated = true; + return handle.Node; + } + #endregion + + #region Overridden Methods + #endregion + + #region Private Methods + /// + /// Generates a new node id. + /// + private NodeId GenerateNodeId() + { + return new NodeId(++m_nextNodeId, NamespaceIndex); + } + + protected void SetCertificateGroupNodes(ICertificateGroup certificateGroup) + { + var certificateType = (typeof(Opc.Ua.ObjectTypeIds)).GetField(certificateGroup.Configuration.CertificateType).GetValue(null) as NodeId; + certificateGroup.CertificateType = certificateType; + certificateGroup.DefaultTrustList = null; + if (Utils.Equals(certificateType, Opc.Ua.ObjectTypeIds.HttpsCertificateType)) + { + certificateGroup.Id = DefaultHttpsGroupId; + certificateGroup.DefaultTrustList = (TrustListState)FindPredefinedNode(ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultHttpsGroup_TrustList, Server.NamespaceUris), typeof(TrustListState)); + } + else if (Utils.Equals(certificateType, Opc.Ua.ObjectTypeIds.UserCredentialCertificateType)) + { + certificateGroup.Id = DefaultUserTokenGroupId; + certificateGroup.DefaultTrustList = (TrustListState)FindPredefinedNode(ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList, Server.NamespaceUris), typeof(TrustListState)); + } + else if (Utils.Equals(certificateType, Opc.Ua.ObjectTypeIds.ApplicationCertificateType) || + Utils.Equals(certificateType, Opc.Ua.ObjectTypeIds.RsaMinApplicationCertificateType) || + Utils.Equals(certificateType, Opc.Ua.ObjectTypeIds.RsaSha256ApplicationCertificateType) + ) + { + certificateGroup.Id = DefaultApplicationGroupId; + certificateGroup.DefaultTrustList = (TrustListState)FindPredefinedNode(ExpandedNodeId.ToNodeId(Opc.Ua.Gds.ObjectIds.Directory_CertificateGroups_DefaultApplicationGroup_TrustList, Server.NamespaceUris), typeof(TrustListState)); + } + else + { + throw new NotImplementedException($"Unknown certificate type {certificateGroup.Configuration.CertificateType}. Use ApplicationCertificateType, HttpsCertificateType or UserCredentialCertificateType"); + } + + if (certificateGroup.DefaultTrustList != null) + { + certificateGroup.DefaultTrustList.Handle = new TrustList( + certificateGroup.DefaultTrustList, + certificateGroup.Configuration.TrustedListPath, + certificateGroup.Configuration.IssuerListPath, + new TrustList.SecureAccess(HasApplicationUserAccess), + new TrustList.SecureAccess(HasApplicationAdminAccess)); + } + } + + private ServiceResult VerifyApprovedState(CertificateRequestState state) + { + switch (state) + { + case CertificateRequestState.New: + return new ServiceResult(StatusCodes.BadNothingToDo, "The request has not been approved by the administrator."); + case CertificateRequestState.Rejected: + return new ServiceResult(StatusCodes.BadRequestNotAllowed, "The request has been rejected by the administrator."); + case CertificateRequestState.Accepted: + return new ServiceResult(StatusCodes.BadInvalidArgument, "The request has already been accepted by the application."); + case CertificateRequestState.Approved: + break; + } + return null; + } + #endregion + + #region Private Fields + private bool m_autoApprove; + private uint m_nextNodeId; + private GlobalDiscoveryServerConfiguration m_configuration; + private IApplicationsDatabase m_database; + private ICertificateRequest m_request; + private ICertificateGroup m_certificateGroupFactory; + private Dictionary m_certificateGroups; + private Dictionary m_certTypeMap; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/BinaryApplicationsDatabase.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/BinaryApplicationsDatabase.cs new file mode 100644 index 00000000..c4ec6564 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/BinaryApplicationsDatabase.cs @@ -0,0 +1,79 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; + +namespace Opc.Ua.Gds.Server.Database.Linq +{ + [Serializable] + public class BinaryApplicationsDatabase : LinqApplicationsDatabase + { + #region Constructors + public BinaryApplicationsDatabase(string fileName) + { + m_fileName = fileName; + } + static public BinaryApplicationsDatabase Load(string fileName) + { + try + { + IFormatter formatter = new BinaryFormatter(); + Stream stream = new FileStream(fileName, + FileMode.Open, FileAccess.Read, FileShare.Read); + BinaryApplicationsDatabase db = (BinaryApplicationsDatabase)formatter.Deserialize(stream); + stream.Close(); + db.FileName = fileName; + return db; + } + catch + { + return new BinaryApplicationsDatabase(fileName); + } + } + #endregion + #region Public Members + public override void Save() + { + IFormatter formatter = new BinaryFormatter(); + Stream stream = new FileStream(m_fileName, + FileMode.Create, FileAccess.Write, FileShare.None); + formatter.Serialize(stream, this); + stream.Close(); + } + public string FileName { get { return m_fileName; } private set { m_fileName = value; } } + #endregion + #region Private Fields + [NonSerialized] + string m_fileName; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/CertificateGroup.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/CertificateGroup.cs new file mode 100644 index 00000000..b3628e7a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/CertificateGroup.cs @@ -0,0 +1,490 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Gds.Server +{ + public class CertificateGroup : ICertificateGroup + { + #region Public Fields + public NodeId Id { get; set; } + public NodeId CertificateType { get; set; } + public CertificateGroupConfiguration Configuration { get; } + public X509Certificate2 Certificate { get; set; } + public TrustListState DefaultTrustList { get; set; } + public Boolean UpdateRequired { get; set; } + #endregion + + public CertificateGroup() + { + UpdateRequired = false; + } + + protected CertificateGroup( + string authoritiesStorePath, + CertificateGroupConfiguration certificateGroupConfiguration + ) + { + m_authoritiesStorePath = authoritiesStorePath; + m_authoritiesStoreType = CertificateStoreIdentifier.DetermineStoreType(m_authoritiesStorePath); + Configuration = certificateGroupConfiguration; + m_subjectName = Configuration.SubjectName.Replace("localhost", Utils.GetHostName()); + } + + #region ICertificateGroupProvider + public virtual async Task Init() + { + Utils.Trace(Utils.TraceMasks.Information, "InitializeCertificateGroup: {0}", m_subjectName); + + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(m_authoritiesStorePath)) + { + X509Certificate2Collection certificates = await store.Enumerate(); + foreach (var certificate in certificates) + { + if (X509Utils.CompareDistinguishedName(certificate.Subject, m_subjectName)) + { + if (X509Utils.GetRSAPublicKeySize(certificate) != Configuration.CACertificateKeySize) + { + continue; + } + // TODO check hash size + + if (Certificate != null) + { + // always use latest issued cert in store + if (certificate.NotBefore > DateTime.UtcNow || + Certificate.NotBefore > certificate.NotBefore) + { + continue; + } + } + Certificate = certificate; + } + } + } + + if (Certificate == null) + { + Utils.Trace(Utils.TraceMasks.Security, + "Create new CA Certificate: {0}, KeySize: {1}, HashSize: {2}, LifeTime: {3} months", + m_subjectName, + Configuration.CACertificateKeySize, + Configuration.CACertificateHashSize, + Configuration.CACertificateLifetime + ); + X509Certificate2 newCertificate = await CreateCACertificateAsync(m_subjectName); + Certificate = new X509Certificate2(newCertificate.RawData); + } + } + + public virtual CertificateGroup Create( + string storePath, + CertificateGroupConfiguration certificateGroupConfiguration) + { + return new CertificateGroup(storePath, certificateGroupConfiguration); + } + + /// + /// Create a certificate with a new key pair signed by the CA of the cert group. + /// + /// The application record. + /// The subject of the certificate. + /// The domain names for the subject alt name extension. + /// The private key format as PFX or PEM. + /// A password for the private key. + public virtual async Task NewKeyPairRequestAsync( + ApplicationRecordDataType application, + string subjectName, + string[] domainNames, + string privateKeyFormat, + string privateKeyPassword) + { + if (application == null) throw new ArgumentNullException(nameof(application)); + if (application.ApplicationUri == null) throw new ArgumentNullException(nameof(application.ApplicationUri)); + if (application.ApplicationNames == null) throw new ArgumentNullException(nameof(application.ApplicationNames)); + + using (var signingKey = await LoadSigningKeyAsync(Certificate, string.Empty)) + using (var certificate = CertificateFactory.CreateCertificate( + application.ApplicationUri, + application.ApplicationNames.Count > 0 ? application.ApplicationNames[0].Text : "ApplicationName", + subjectName, + domainNames) + .SetIssuer(signingKey) + .CreateForRSA()) + { + byte[] privateKey; + if (privateKeyFormat == "PFX") + { + privateKey = certificate.Export(X509ContentType.Pfx, privateKeyPassword); + } + else if (privateKeyFormat == "PEM") + { + privateKey = PEMWriter.ExportPrivateKeyAsPEM(certificate, privateKeyPassword); + } + else + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "Invalid private key format"); + } + return new X509Certificate2KeyPair(new X509Certificate2(certificate.RawData), privateKeyFormat, privateKey); + } + } + + public virtual Task RevokeCertificateAsync( + X509Certificate2 certificate) + { + return RevokeCertificateAsync( + m_authoritiesStorePath, + certificate, + null); + } + + public virtual Task VerifySigningRequestAsync( + ApplicationRecordDataType application, + byte[] certificateRequest) + { + try + { + var pkcs10CertificationRequest = new Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest(certificateRequest); + + if (!pkcs10CertificationRequest.Verify()) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "CSR signature invalid."); + } + + var info = pkcs10CertificationRequest.GetCertificationRequestInfo(); + var altNameExtension = GetAltNameExtensionFromCSRInfo(info); + if (altNameExtension != null) + { + if (altNameExtension.Uris.Count > 0) + { + if (!altNameExtension.Uris.Contains(application.ApplicationUri)) + { + throw new ServiceResultException(StatusCodes.BadCertificateUriInvalid, + "CSR AltNameExtension does not match " + application.ApplicationUri); + } + } + } + return Task.CompletedTask; + } + catch (Exception ex) + { + if (ex is ServiceResultException) + { + throw ex as ServiceResultException; + } + throw new ServiceResultException(StatusCodes.BadInvalidArgument, ex.Message); + } + } + + + public virtual async Task SigningRequestAsync( + ApplicationRecordDataType application, + string[] domainNames, + byte[] certificateRequest) + { + try + { + var pkcs10CertificationRequest = new Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest(certificateRequest); + + if (!pkcs10CertificationRequest.Verify()) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "CSR signature invalid."); + } + + var info = pkcs10CertificationRequest.GetCertificationRequestInfo(); + var altNameExtension = GetAltNameExtensionFromCSRInfo(info); + if (altNameExtension != null) + { + if (altNameExtension.Uris.Count > 0) + { + if (!altNameExtension.Uris.Contains(application.ApplicationUri)) + { + throw new ServiceResultException(StatusCodes.BadCertificateUriInvalid, + "CSR AltNameExtension does not match " + application.ApplicationUri); + } + } + + if (altNameExtension.IPAddresses.Count > 0 || altNameExtension.DomainNames.Count > 0) + { + var domainNameList = new List(); + domainNameList.AddRange(altNameExtension.DomainNames); + domainNameList.AddRange(altNameExtension.IPAddresses); + domainNames = domainNameList.ToArray(); + } + } + + DateTime yesterday = DateTime.Today.AddDays(-1); + using (var signingKey = await LoadSigningKeyAsync(Certificate, string.Empty)) + { + return CertificateFactory.CreateCertificate( + application.ApplicationUri, + null, + info.Subject.ToString(), + domainNames) + .SetNotBefore(yesterday) + .SetLifeTime(Configuration.DefaultCertificateLifetime) + .SetHashAlgorithm(X509Utils.GetRSAHashAlgorithmName(Configuration.DefaultCertificateHashSize)) + .SetIssuer(signingKey) + .SetRSAPublicKey(info.SubjectPublicKeyInfo.GetEncoded()) + .CreateForRSA(); + } + } + catch (Exception ex) + { + if (ex is ServiceResultException) + { + throw ex as ServiceResultException; + } + throw new ServiceResultException(StatusCodes.BadInvalidArgument, ex.Message); + } + + } + + public virtual async Task CreateCACertificateAsync( + string subjectName + ) + { + DateTime yesterday = DateTime.Today.AddDays(-1); + X509Certificate2 newCertificate = CertificateFactory.CreateCertificate(subjectName) + .SetNotBefore(yesterday) + .SetLifeTime(Configuration.CACertificateLifetime) + .SetHashAlgorithm(X509Utils.GetRSAHashAlgorithmName(Configuration.CACertificateHashSize)) + .SetCAConstraint() + .SetRSAKeySize(Configuration.CACertificateKeySize) + .CreateForRSA() + .AddToStore( + m_authoritiesStoreType, + m_authoritiesStorePath); + + // save only public key + Certificate = new X509Certificate2(newCertificate.RawData); + + // initialize revocation list + await RevokeCertificateAsync(m_authoritiesStorePath, newCertificate, null); + + await UpdateAuthorityCertInTrustedList(); + + return Certificate; + } + + #endregion + + #region Public Methods + /// + /// load the authority signing key. + /// + public virtual async Task LoadSigningKeyAsync(X509Certificate2 signingCertificate, string signingKeyPassword) + { + CertificateIdentifier certIdentifier = new CertificateIdentifier(signingCertificate) { + StorePath = m_authoritiesStorePath, + StoreType = m_authoritiesStoreType + }; + return await certIdentifier.LoadPrivateKey(signingKeyPassword); + } + + /// + /// Revoke the CA signed certificate. + /// The issuer CA public key, the private key and the crl reside in the storepath. + /// The CRL number is increased by one and existing CRL for the issuer are deleted from the store. + /// + public static async Task RevokeCertificateAsync( + string storePath, + X509Certificate2 certificate, + string issuerKeyFilePassword = null + ) + { + X509CRL updatedCRL = null; + string subjectName = certificate.IssuerName.Name; + string keyId = null; + string serialNumber = null; + + // caller may want to create empty CRL using the CA cert itself + bool isCACert = X509Utils.IsCertificateAuthority(certificate); + + // find the authority key identifier. + X509AuthorityKeyIdentifierExtension authority = X509Extensions.FindExtension(certificate); + + if (authority != null) + { + keyId = authority.KeyIdentifier; + serialNumber = authority.SerialNumber; + } + else + { + throw new ArgumentException("Certificate does not contain an Authority Key"); + } + + if (!isCACert) + { + if (serialNumber == certificate.SerialNumber || + X509Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer)) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Cannot revoke self signed certificates"); + } + } + + X509Certificate2 certCA = null; + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(storePath)) + { + if (store == null) + { + throw new ArgumentException("Invalid store path/type"); + } + certCA = await X509Utils.FindIssuerCABySerialNumberAsync(store, certificate.Issuer, serialNumber); + + if (certCA == null) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Cannot find issuer certificate in store."); + } + + if (!certCA.HasPrivateKey) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Issuer certificate has no private key, cannot revoke certificate."); + } + + CertificateIdentifier certCAIdentifier = new CertificateIdentifier(certCA) { + StorePath = storePath, + StoreType = CertificateStoreIdentifier.DetermineStoreType(storePath) + }; + X509Certificate2 certCAWithPrivateKey = await certCAIdentifier.LoadPrivateKey(issuerKeyFilePassword); + + if (certCAWithPrivateKey == null) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Failed to load issuer private key. Is the password correct?"); + } + + List certCACrl = store.EnumerateCRLs(certCA, false); + + var certificateCollection = new X509Certificate2Collection() { }; + if (!isCACert) + { + certificateCollection.Add(certificate); + } + updatedCRL = CertificateFactory.RevokeCertificate(certCAWithPrivateKey, certCACrl, certificateCollection); + + store.AddCRL(updatedCRL); + + // delete outdated CRLs from store + foreach (X509CRL caCrl in certCACrl) + { + store.DeleteCRL(caCrl); + } + store.Close(); + } + return updatedCRL; + } + #endregion + + #region Private Methods + /// + /// Updates the certificate authority certificate and CRL in the trusted list. + /// + protected async Task UpdateAuthorityCertInTrustedList() + { + string trustedListStorePath = Configuration.TrustedListPath; + if (!String.IsNullOrEmpty(Configuration.TrustedListPath)) + { + using (ICertificateStore authorityStore = CertificateStoreIdentifier.OpenStore(m_authoritiesStorePath)) + using (ICertificateStore trustedStore = CertificateStoreIdentifier.OpenStore(trustedListStorePath)) + { + X509Certificate2Collection certificates = await authorityStore.Enumerate(); + foreach (var certificate in certificates) + { + if (X509Utils.CompareDistinguishedName(certificate.Subject, m_subjectName)) + { + X509Certificate2Collection certs = await trustedStore.FindByThumbprint(certificate.Thumbprint); + if (certs.Count == 0) + { + await trustedStore.Add(new X509Certificate2(certificate.RawData)); + } + + // delete existing CRL in trusted list + foreach (var crl in trustedStore.EnumerateCRLs(certificate, false)) + { + if (crl.VerifySignature(certificate, false)) + { + trustedStore.DeleteCRL(crl); + } + } + + // copy latest CRL to trusted list + foreach (var crl in authorityStore.EnumerateCRLs(certificate, true)) + { + trustedStore.AddCRL(crl); + } + } + } + } + } + } + + protected X509SubjectAltNameExtension GetAltNameExtensionFromCSRInfo(Org.BouncyCastle.Asn1.Pkcs.CertificationRequestInfo info) + { + try + { + for (int i = 0; i < info.Attributes.Count; i++) + { + var sequence = Org.BouncyCastle.Asn1.Asn1Sequence.GetInstance(info.Attributes[i].ToAsn1Object()); + var oid = Org.BouncyCastle.Asn1.DerObjectIdentifier.GetInstance(sequence[0].ToAsn1Object()); + if (oid.Equals(Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Pkcs9AtExtensionRequest)) + { + var extensionInstance = Org.BouncyCastle.Asn1.DerSet.GetInstance(sequence[1]); + var extensionSequence = Org.BouncyCastle.Asn1.Asn1Sequence.GetInstance(extensionInstance[0]); + var extensions = Org.BouncyCastle.Asn1.X509.X509Extensions.GetInstance(extensionSequence); + Org.BouncyCastle.Asn1.X509.X509Extension extension = extensions.GetExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectAlternativeName); + var asnEncodedAltNameExtension = new System.Security.Cryptography.AsnEncodedData(Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectAlternativeName.ToString(), extension.Value.GetOctets()); + var altNameExtension = new X509SubjectAltNameExtension(asnEncodedAltNameExtension, extension.IsCritical); + return altNameExtension; + } + } + } + catch + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "CSR altNameExtension invalid."); + } + return null; + } + #endregion + + #region Protected Fields + protected readonly string m_subjectName; + protected readonly string m_authoritiesStorePath; + protected readonly string m_authoritiesStoreType; + #endregion + + } + +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoverySampleServer.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoverySampleServer.cs new file mode 100644 index 00000000..d8ac0f45 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoverySampleServer.cs @@ -0,0 +1,295 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using System.Threading; +using Opc.Ua.Server; +using Opc.Ua.Gds.Server.Database; + +namespace Opc.Ua.Gds.Server +{ + /// + /// Implements a sample Global Discovery Server. + /// + /// + /// Each server instance must have one instance of a StandardServer object which is + /// responsible for reading the configuration file, creating the endpoints and dispatching + /// incoming requests to the appropriate handler. + /// + /// This sub-class specifies non-configurable metadata such as Product Name and initializes + /// the ApplicationNodeManager which provides access to the data exposed by the Global Discovery Server. + /// + /// + public class GlobalDiscoverySampleServer : StandardServer + { + public GlobalDiscoverySampleServer( + IApplicationsDatabase database, + ICertificateRequest request, + ICertificateGroup certificateGroup, + bool autoApprove = true + ) + { + m_database = database; + m_request = request; + m_certificateGroup = certificateGroup; + m_autoApprove = autoApprove; + } + + #region Overridden Methods + /// + /// Called after the server has been started. + /// + protected override void OnServerStarted(IServerInternal server) + { + base.OnServerStarted(server); + + // request notifications when the user identity is changed. all valid users are accepted by default. + server.SessionManager.ImpersonateUser += SessionManager_ImpersonateUser; + } + + /// + /// Creates the node managers for the server. + /// + /// + /// This method allows the sub-class create any additional node managers which it uses. The SDK + /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification. + /// Any additional NodeManagers are expected to handle application specific nodes. + /// + protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) + { + Utils.Trace("Creating the Node Managers."); + + List nodeManagers = new List + { + // create the custom node managers. + new ApplicationsNodeManager(server, configuration, m_database, m_request, m_certificateGroup, m_autoApprove) + }; + + // create master node manager. + return new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); + } + + /// + /// Loads the non-configurable properties for the application. + /// + /// + /// These properties are exposed by the server but cannot be changed by administrators. + /// + protected override ServerProperties LoadServerProperties() + { + ServerProperties properties = new ServerProperties + { + ManufacturerName = "Some Company Inc", + ProductName = "Global Discovery Server", + ProductUri = "http://somecompany.com/GlobalDiscoveryServer", + SoftwareVersion = Utils.GetAssemblySoftwareVersion(), + BuildNumber = Utils.GetAssemblyBuildNumber(), + BuildDate = Utils.GetAssemblyTimestamp() + }; + + return properties; + } + + /// + /// This method is called at the being of the thread that processes a request. + /// + protected override OperationContext ValidateRequest(RequestHeader requestHeader, RequestType requestType) + { + OperationContext context = base.ValidateRequest(requestHeader, requestType); + + if (requestType == RequestType.Write) + { + // reject all writes if no user provided. + if (context.UserIdentity.TokenType == UserTokenType.Anonymous) + { + // construct translation object with default text. + TranslationInfo info = new TranslationInfo( + "NoWriteAllowed", + "en-US", + "Must provide a valid user before calling write."); + + // create an exception with a vendor defined sub-code. + throw new ServiceResultException(new ServiceResult( + StatusCodes.BadUserAccessDenied, + "NoWriteAllowed", + Opc.Ua.Gds.Namespaces.OpcUaGds, + new LocalizedText(info))); + } + + UserIdentityToken securityToken = context.UserIdentity.GetIdentityToken(); + + // check for a user name token. + UserNameIdentityToken userNameToken = securityToken as UserNameIdentityToken; + if (userNameToken != null) + { + lock (Lock) + { + m_contexts.Add(context.RequestId, new ImpersonationContext()); + } + } + } + + return context; + } + + /// + /// This method is called in a finally block at the end of request processing (i.e. called even on exception). + /// + protected override void OnRequestComplete(OperationContext context) + { + ImpersonationContext impersonationContext = null; + + lock (Lock) + { + if (m_contexts.TryGetValue(context.RequestId, out impersonationContext)) + { + m_contexts.Remove(context.RequestId); + } + } + + base.OnRequestComplete(context); + } + + /// + /// Called when a client tries to change its user identity. + /// + private void SessionManager_ImpersonateUser(Session session, ImpersonateEventArgs args) + { + // check for a user name token + UserNameIdentityToken userNameToken = args.NewIdentity as UserNameIdentityToken; + if (userNameToken != null) + { + if (VerifyPassword(userNameToken)) + { + switch (userNameToken.UserName) + { + // Server configuration administrator, manages the GDS server security + case "sysadmin": + { + args.Identity = new SystemConfigurationIdentity(new UserIdentity(userNameToken)); + Utils.Trace("SystemConfigurationAdmin Token Accepted: {0}", args.Identity.DisplayName); + return; + } + + // GDS administrator + case "appadmin": + { + args.Identity = new RoleBasedIdentity(new UserIdentity(userNameToken), GdsRole.ApplicationAdmin); + Utils.Trace("ApplicationAdmin Token Accepted: {0}", args.Identity.DisplayName); + return; + } + + // GDS user + case "appuser": + { + args.Identity = new RoleBasedIdentity(new UserIdentity(userNameToken), GdsRole.ApplicationUser); + Utils.Trace("ApplicationUser Token Accepted: {0}", args.Identity.DisplayName); + return; + } + } + } + } + + // check for x509 user token. + X509IdentityToken x509Token = args.NewIdentity as X509IdentityToken; + if (x509Token != null) + { + GdsRole role = GdsRole.ApplicationUser; + VerifyUserTokenCertificate(x509Token.Certificate); + + // todo: is cert listed in admin list? then + // role = GdsRole.ApplicationAdmin; + + Utils.Trace("X509 Token Accepted: {0} as {1}", args.Identity.DisplayName, role.ToString()); + args.Identity = new RoleBasedIdentity(new UserIdentity(x509Token), role); + return; + } + } + + /// + /// Verifies that a certificate user token is trusted. + /// + private void VerifyUserTokenCertificate(X509Certificate2 certificate) + { + try + { + CertificateValidator.Validate(certificate); + } + catch (Exception e) + { + TranslationInfo info; + StatusCode result = StatusCodes.BadIdentityTokenRejected; + ServiceResultException se = e as ServiceResultException; + if (se != null && se.StatusCode == StatusCodes.BadCertificateUseNotAllowed) + { + info = new TranslationInfo( + "InvalidCertificate", + "en-US", + "'{0}' is an invalid user certificate.", + certificate.Subject); + + result = StatusCodes.BadIdentityTokenInvalid; + } + else + { + // construct translation object with default text. + info = new TranslationInfo( + "UntrustedCertificate", + "en-US", + "'{0}' is not a trusted user certificate.", + certificate.Subject); + } + + // create an exception with a vendor defined sub-code. + throw new ServiceResultException(new ServiceResult( + result, + info.Key, + LoadServerProperties().ProductUri, + new LocalizedText(info))); + } + } + + private bool VerifyPassword(UserNameIdentityToken userNameToken) + { + // TODO: check username/password permissions + return userNameToken.DecryptedPassword == "demo"; + } + #endregion + + #region Private Fields + private Dictionary m_contexts = new Dictionary(); + private IApplicationsDatabase m_database = null; + private ICertificateRequest m_request = null; + private ICertificateGroup m_certificateGroup = null; + private bool m_autoApprove; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoveryServerConfiguration.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoveryServerConfiguration.cs new file mode 100644 index 00000000..4593834f --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/GlobalDiscoveryServerConfiguration.cs @@ -0,0 +1,195 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Runtime.Serialization; +using System.Collections.Generic; +using System.IO; + +namespace Opc.Ua.Gds.Server +{ + /// + /// Stores the configuration the data access node manager. + /// + [DataContract(Namespace=Opc.Ua.Gds.Namespaces.OpcUaGds + "Configuration.xsd")] + public class GlobalDiscoveryServerConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public GlobalDiscoveryServerConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + [DataMember(Order = 1)] + public string AuthoritiesStorePath { get; set; } + + [DataMember(Order = 2)] + public string ApplicationCertificatesStorePath { get; set; } + + [DataMember(Order = 3)] + public string BaseCertificateGroupStorePath { get; set; } + + [DataMember(Order = 4)] + public string DefaultSubjectNameContext { get; set; } + + [DataMember(Order = 5)] + public CertificateGroupConfigurationCollection CertificateGroups { get; set; } + + [DataMember(Order = 6)] + public StringCollection KnownHostNames { get; set; } + + [DataMember(Order = 7)] + public string DatabaseStorePath { get; set; } + #endregion + + #region Private Members + #endregion + } + + /// + /// Stores the configuration the data access node manager. + /// + [DataContract(Namespace = Opc.Ua.Gds.Namespaces.OpcUaGds + "Configuration.xsd")] + public class CertificateGroupConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public CertificateGroupConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + DefaultCertificateLifetime = CertificateFactory.DefaultLifeTime; + DefaultCertificateKeySize = CertificateFactory.DefaultKeySize; + DefaultCertificateHashSize = CertificateFactory.DefaultHashSize; + CACertificateLifetime = CertificateFactory.DefaultLifeTime; + CACertificateKeySize = CertificateFactory.DefaultKeySize; + CACertificateHashSize = CertificateFactory.DefaultHashSize; + } + #endregion + + #region Public Properties + [DataMember(IsRequired = true, Order = 10)] + public string Id { get; set; } + + [DataMember(IsRequired = true, Order = 20)] + public string CertificateType { get; set; } + + [DataMember(IsRequired = true, Order = 25)] + public string SubjectName { get; set; } + + [DataMember(IsRequired = true, Order = 30)] + public string BaseStorePath { get; set; } + + [DataMember(Order = 40)] + public ushort DefaultCertificateLifetime { get; set; } + + [DataMember(Order = 50)] + public ushort DefaultCertificateKeySize { get; set; } + + [DataMember(Order = 60)] + public ushort DefaultCertificateHashSize { get; set; } + + [DataMember(Order = 70)] + public ushort CACertificateLifetime { get; set; } + + [DataMember(Order = 80)] + public ushort CACertificateKeySize { get; set; } + + [DataMember(Order = 90)] + public ushort CACertificateHashSize { get; set; } + + public string TrustedListPath { get { return BaseStorePath + Path.DirectorySeparatorChar + "trusted"; }} + public string IssuerListPath { get { return BaseStorePath + Path.DirectorySeparatorChar + "issuer"; } } + #endregion + + #region Private Members + #endregion + } + + [CollectionDataContract(Name = "ListOfCertificateGroupConfiguration", Namespace = Opc.Ua.Gds.Namespaces.OpcUaGds + "Configuration.xsd", ItemName = "CertificateGroupConfiguration")] + public class CertificateGroupConfigurationCollection : List + { + /// + /// Initializes an empty collection. + /// + public CertificateGroupConfigurationCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public CertificateGroupConfigurationCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public CertificateGroupConfigurationCollection(int capacity) : base(capacity) { } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/IApplicationsDatabase.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/IApplicationsDatabase.cs new file mode 100644 index 00000000..7a2072af --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/IApplicationsDatabase.cs @@ -0,0 +1,80 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Gds.Server.Database +{ + /// + /// An abstract interface to the application database + /// + public interface IApplicationsDatabase + { + void Initialize(); + ushort NamespaceIndex { get; set; } + NodeId RegisterApplication(ApplicationRecordDataType application); + void UnregisterApplication(NodeId applicationId); + ApplicationRecordDataType GetApplication(NodeId applicationId); + ApplicationRecordDataType[] FindApplications(string applicationUri); + ServerOnNetwork[] QueryServers( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + string[] serverCapabilities, + out DateTime lastCounterResetTime); + bool SetApplicationCertificate( + NodeId applicationId, + string certificateTypeId, + byte[] certificate); + bool GetApplicationCertificate( + NodeId applicationId, + string certificateTypeId, + out byte[] certificate); + bool SetApplicationTrustLists( + NodeId applicationId, + string certificateTypeId, + string trustListId); + bool GetApplicationTrustLists( + NodeId applicationId, + string certificateTypeId, + out string trustListId); + ApplicationDescription[] QueryApplications( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + uint applicationType, + string productUri, + string[] serverCapabilities, + out DateTime lastCounterResetTime, + out uint nextRecordId); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ICertificateGroup.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ICertificateGroup.cs new file mode 100644 index 00000000..dbf0eda8 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ICertificateGroup.cs @@ -0,0 +1,99 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Gds.Server +{ + public class X509Certificate2KeyPair + { + public readonly X509Certificate2 Certificate; + public readonly string PrivateKeyFormat; + public readonly byte[] PrivateKey; + + public X509Certificate2KeyPair(X509Certificate2 certificate, string privateKeyFormat, byte[] privateKey) + { + if (certificate.HasPrivateKey) + { + certificate = new X509Certificate2(certificate.RawData); + } + Certificate = certificate; + PrivateKeyFormat = privateKeyFormat; + PrivateKey = privateKey; + } + }; + + /// + /// An abstract interface to the certificate provider + /// + public interface ICertificateGroup + { + NodeId Id { get; set; } + NodeId CertificateType { get; set; } + CertificateGroupConfiguration Configuration { get; } + X509Certificate2 Certificate { get; set; } + TrustListState DefaultTrustList { get; set; } + bool UpdateRequired { get; set; } + + CertificateGroup Create( + string path, + CertificateGroupConfiguration certificateGroupConfiguration); + + Task Init(); + + Task CreateCACertificateAsync( + string subjectName + ); + + Task RevokeCertificateAsync( + X509Certificate2 certificate + ); + + Task VerifySigningRequestAsync( + ApplicationRecordDataType application, + byte[] certificateRequest + ); + + Task SigningRequestAsync( + ApplicationRecordDataType application, + string[] domainNames, + byte[] certificateRequest + ); + + Task NewKeyPairRequestAsync( + ApplicationRecordDataType application, + string subjectName, + string[] domainNames, + string privateKeyFormat, + string privateKeyPassword + ); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ICertificateRequest.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ICertificateRequest.cs new file mode 100644 index 00000000..91a8d750 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/ICertificateRequest.cs @@ -0,0 +1,171 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Gds.Server +{ + /// + /// The state of a certificate request. + /// + public enum CertificateRequestState + { + /// + /// The certificate request is New. + /// + New, + + /// + /// The certificate request is Approved. + /// + Approved, + + /// + /// The certificate request is Rejected. + /// + Rejected, + + /// + /// The certificate request is Accepted. + /// + Accepted + } + + /// + /// An abstract interface to the application database + /// + public interface ICertificateRequest + { + /// + /// Initialize a certificate request. + /// + void Initialize(); + + /// + /// The namesapce index. + /// + ushort NamespaceIndex { get; set; } + + /// + /// Start a signing request for an application. + /// + /// The id of the application. + /// The target group for the signing request. + /// The certificate type. + /// The certificate signing request (CSR). + /// The authority requesting the certificate. + /// The id of the signing request. + NodeId StartSigningRequest( + NodeId applicationId, + string certificateGroupId, + string certificateTypeId, + byte[] certificateRequest, + string authorityId); + + /// + /// Start a request for a new key pair. + /// + /// The id of the application. + /// The target group for the signing request. + /// The certificate type. + /// The subject for the certificate + /// The domain names for the certficate. + /// The private key format, PEM or PFX. + /// The password for the private key. + /// The authority requesting the certificate. + /// The id of the key pair request. + NodeId StartNewKeyPairRequest( + NodeId applicationId, + string certificateGroupId, + string certificateTypeId, + string subjectName, + string[] domainNames, + string privateKeyFormat, + string privateKeyPassword, + string authorityId); + + /// + /// Approve or reject a request. + /// + /// The id of the request. + /// Whether the request is rejected. + void ApproveRequest( + NodeId requestId, + bool isRejected); + + /// + /// Accept the request. + /// + /// The request id. + /// The accepted certificate. + void AcceptRequest( + NodeId requestId, + byte[] certificate); + + /// + /// Finish the request. + /// + /// The id of the application. + /// The request id. + /// The group id. + /// The certificate type. + /// The signed certificate. + /// The private key, if requested. + CertificateRequestState FinishRequest( + NodeId applicationId, + NodeId requestId, + out string certificateGroupId, + out string certificateTypeId, + out byte[] signedCertificate, + out byte[] privateKey + ); + + /// + /// Read a certificate request. + /// + /// The id of the application. + /// The request id. + /// The group id. + /// The certificate type. + /// + /// The subject for the certificate + /// The domain names for the certficate. + /// The private key format, PEM or PFX. + /// The password for the private key. + CertificateRequestState ReadRequest( + NodeId applicationId, + NodeId requestId, + out string certificateGroupId, + out string certificateTypeId, + out byte[] certificateRequest, + out string subjectName, + out string[] domainNames, + out string privateKeyFormat, + out string privateKeyPassword); + + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/JsonApplicationsDatabase.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/JsonApplicationsDatabase.cs new file mode 100644 index 00000000..9fe4b2a7 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/JsonApplicationsDatabase.cs @@ -0,0 +1,99 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using Newtonsoft.Json; + +namespace Opc.Ua.Gds.Server.Database.Linq +{ + /// + /// A GDS database with JSON storage. + /// + /// + /// This db is good for testing but not for production use. + /// + public class JsonApplicationsDatabase : LinqApplicationsDatabase + { + #region Constructors + /// + /// Create a JSON database. + /// + public JsonApplicationsDatabase(string fileName) + { + m_fileName = fileName; + } + + /// + /// Load the JSON application database. + /// + static public JsonApplicationsDatabase Load(string fileName) + { + if (fileName == null) throw new ArgumentNullException(nameof(fileName)); + try + { + if (File.Exists(fileName)) + { + string json = File.ReadAllText(fileName); + JsonApplicationsDatabase db = JsonConvert.DeserializeObject(json); + db.FileName = fileName; + return db; + } + } + catch + { + + } + return new JsonApplicationsDatabase(fileName); + } + #endregion + + #region Public Members + /// + /// Save the complete database. + /// + public override void Save() + { + string json = JsonConvert.SerializeObject(this, Formatting.Indented); + File.WriteAllText(m_fileName, json); + } + + /// + /// Get or set the filename. + /// + [JsonIgnore] + public string FileName { get { return m_fileName; } private set { m_fileName = value; } } + #endregion + + #region Private Fields + [JsonIgnore] + string m_fileName; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/LinqApplicationsDatabase.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/LinqApplicationsDatabase.cs new file mode 100644 index 00000000..6d3cf520 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/LinqApplicationsDatabase.cs @@ -0,0 +1,1089 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace Opc.Ua.Gds.Server.Database.Linq +{ + [Serializable] + class ApplicationName + { + public Guid ApplicationId { get; set; } + public string Locale { get; set; } + public string Text { get; set; } + } + + [Serializable] + class Application + { + public Application() + { + Certificate = new Dictionary(); + TrustListId = new Dictionary(); + } + public uint ID { get; set; } + public Guid ApplicationId { get; set; } + public string ApplicationUri { get; set; } + public string ApplicationName { get; set; } + public int ApplicationType { get; set; } + public string ProductUri { get; set; } + public string ServerCapabilities { get; set; } + public Dictionary Certificate { get; } + public Dictionary TrustListId { get; } + } + + [Serializable] + class CertificateRequest + { + public Guid RequestId { get; set; } + public Guid ApplicationId { get; set; } + public int State { get; set; } + public string CertificateGroupId { get; set; } + public string CertificateTypeId { get; set; } + public byte[] CertificateSigningRequest { get; set; } + public string SubjectName { get; set; } + public string[] DomainNames { get; set; } + public string PrivateKeyFormat { get; set; } + public string PrivateKeyPassword { get; set; } + public string AuthorityId { get; set; } + public byte[] Certificate { get; set; } + } + + [Serializable] + class CertificateStore + { + CertificateStore() + { + TrustListId = Guid.NewGuid(); + } + public string Path { get; set; } + public string AuthorityId { get; set; } + public Guid TrustListId { get; private set; } + } + + [Serializable] + class ServerEndpoint + { + public Guid ApplicationId { get; set; } + public string DiscoveryUrl { get; set; } + } + + [Serializable] + public class LinqApplicationsDatabase : ApplicationsDatabaseBase, ICertificateRequest + { + #region IApplicationsDatabase + public override void Initialize() + { + } + + public override NodeId RegisterApplication( + ApplicationRecordDataType application + ) + { + NodeId appNodeId = base.RegisterApplication(application); + if (NodeId.IsNull(appNodeId)) + { + appNodeId = new NodeId(Guid.NewGuid(), NamespaceIndex); + } + Guid applicationId = GetNodeIdGuid(appNodeId); + string capabilities = base.ServerCapabilities(application); + + lock (Lock) + { + Application record = null; + + if (applicationId != Guid.Empty) + { + var results = from ii in Applications + where ii.ApplicationId == applicationId + select ii; + + record = results.SingleOrDefault(); + + if (record != null) + { + var endpoints = (from ii in ServerEndpoints + where ii.ApplicationId == record.ApplicationId + select ii).ToList(); + + foreach (var endpoint in endpoints) + { + ServerEndpoints.Remove(endpoint); + } + + var names = (from ii in ApplicationNames + where ii.ApplicationId == record.ApplicationId + select ii).ToList(); + + foreach (var name in names) + { + ApplicationNames.Remove(name); + } + + SaveChanges(); + } + } + + bool isNew = false; + + if (record == null) + { + applicationId = Guid.NewGuid(); + record = new Application() + { + ApplicationId = applicationId, + ID = 0 + }; + isNew = true; + } + + record.ApplicationUri = application.ApplicationUri; + record.ApplicationName = application.ApplicationNames[0].Text; + record.ApplicationType = (int)application.ApplicationType; + record.ProductUri = application.ProductUri; + record.ServerCapabilities = capabilities; + + if (isNew) + { + Applications.Add(record); + } + + SaveChanges(); + + if (application.DiscoveryUrls != null) + { + foreach (var discoveryUrl in application.DiscoveryUrls) + { + ServerEndpoints.Add( + new ServerEndpoint() + { + ApplicationId = record.ApplicationId, + DiscoveryUrl = discoveryUrl + }); + } + } + + if (application.ApplicationNames != null && application.ApplicationNames.Count > 0) + { + foreach (var applicationName in application.ApplicationNames) + { + ApplicationNames.Add(new ApplicationName() + { + ApplicationId = record.ApplicationId, + Locale = applicationName.Locale, + Text = applicationName.Text + }); + } + } + + SaveChanges(); + + return new NodeId(applicationId, NamespaceIndex); + } + } + + + public override void UnregisterApplication(NodeId applicationId) + { + Guid id = GetNodeIdGuid(applicationId); + + List certificates = new List(); + + lock (Lock) + { + var application = (from ii in Applications + where ii.ApplicationId == id + select ii).SingleOrDefault(); + + if (application == null) + { + throw new ArgumentException("A record with the specified application id does not exist.", nameof(applicationId)); + } + + var certificateRequests = + from ii in CertificateRequests + where ii.ApplicationId == id + select ii; + + foreach (var entry in new List(certificateRequests)) + { + CertificateRequests.Remove(entry); + } + + var applicationNames = + from ii in ApplicationNames + where ii.ApplicationId == id + select ii; + + foreach (var entry in new List(applicationNames)) + { + ApplicationNames.Remove(entry); + } + + var serverEndpoints = + from ii in ServerEndpoints + where ii.ApplicationId == id + select ii; + + foreach (var entry in new List(serverEndpoints)) + { + ServerEndpoints.Remove(entry); + } + + Applications.Remove(application); + SaveChanges(); + } + + } + + public override ApplicationRecordDataType GetApplication( + NodeId applicationId + ) + { + Guid id = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var results = from x in Applications + where x.ApplicationId == id + select x; + + var result = results.SingleOrDefault(); + + if (result == null) + { + return null; + } + + var applicationNames = + from ii in ApplicationNames + where ii.ApplicationId == id + select ii; + + var names = new List(); + foreach (var applicationName in applicationNames) + { + names.Add(new LocalizedText(applicationName.Locale, applicationName.Text)); + } + + StringCollection discoveryUrls = null; + + var endpoints = from ii in ServerEndpoints + where ii.ApplicationId == result.ApplicationId + select ii; + + if (endpoints != null) + { + discoveryUrls = new StringCollection(); + + foreach (var endpoint in endpoints) + { + discoveryUrls.Add(endpoint.DiscoveryUrl); + } + } + + var capabilities = new StringCollection(); + if (!String.IsNullOrWhiteSpace(result.ServerCapabilities)) + { + capabilities.AddRange(result.ServerCapabilities.Split(',')); + } + + return new ApplicationRecordDataType() + { + ApplicationId = new NodeId(result.ApplicationId, NamespaceIndex), + ApplicationUri = result.ApplicationUri, + ApplicationType = (ApplicationType)result.ApplicationType, + ApplicationNames = new LocalizedTextCollection(names), + ProductUri = result.ProductUri, + DiscoveryUrls = discoveryUrls, + ServerCapabilities = capabilities + }; + } + } + + public override ApplicationRecordDataType[] FindApplications( + string applicationUri + ) + { + lock (Lock) + { + var results = from x in Applications + where x.ApplicationUri == applicationUri + select x; + + List records = new List(); + + foreach (var result in results) + { + LocalizedText[] names = null; + + if (result.ApplicationName != null) + { + names = new LocalizedText[] { result.ApplicationName }; + } + + StringCollection discoveryUrls = null; + + var endpoints = from ii in ServerEndpoints + where ii.ApplicationId == result.ApplicationId + select ii; + + if (endpoints != null) + { + discoveryUrls = new StringCollection(); + + foreach (var endpoint in endpoints) + { + discoveryUrls.Add(endpoint.DiscoveryUrl); + } + } + + string[] capabilities = null; + + if (result.ServerCapabilities != null) + { + capabilities = result.ServerCapabilities.Split(','); + } + + records.Add(new ApplicationRecordDataType() + { + ApplicationId = new NodeId(result.ApplicationId, NamespaceIndex), + ApplicationUri = result.ApplicationUri, + ApplicationType = (ApplicationType)result.ApplicationType, + ApplicationNames = new LocalizedTextCollection(names), + ProductUri = result.ProductUri, + DiscoveryUrls = discoveryUrls, + ServerCapabilities = capabilities + }); + } + + return records.ToArray(); + } + } + public override ApplicationDescription[] QueryApplications( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + uint applicationType, + string productUri, + string[] serverCapabilities, + out DateTime lastCounterResetTime, + out uint nextRecordId) + { + lastCounterResetTime = DateTime.MinValue; + nextRecordId = 0; + var records = new List(); + + + lock (Lock) + { + var results = from x in Applications + where ((int)startingRecordId == 0 || (int)startingRecordId <= x.ID) + select x; + + lastCounterResetTime = queryCounterResetTime; + uint lastID = 0; + + foreach (var result in results) + { + + if (!String.IsNullOrEmpty(applicationName)) + { + if (!Match(result.ApplicationName, applicationName)) + { + continue; + } + } + + if (!String.IsNullOrEmpty(applicationUri)) + { + if (!Match(result.ApplicationUri, applicationUri)) + { + continue; + } + } + + if (!String.IsNullOrEmpty(productUri)) + { + if (!Match(result.ProductUri, productUri)) + { + continue; + } + } + + string[] capabilities = null; + if (!String.IsNullOrEmpty(result.ServerCapabilities)) + { + capabilities = result.ServerCapabilities.Split(','); + } + + if (serverCapabilities != null && serverCapabilities.Length > 0) + { + bool match = true; + + for (int ii = 0; ii < serverCapabilities.Length; ii++) + { + if (capabilities == null || !capabilities.Contains(serverCapabilities[ii])) + { + match = false; + break; + } + } + + if (!match) + { + continue; + } + } + + // type filter, 0 and 3 returns all + // filter for servers + if (applicationType == 1 && + result.ApplicationType == (int)ApplicationType.Client) + { + continue; + } + else // filter for clients + if (applicationType == 2 && + result.ApplicationType != (int)ApplicationType.Client && + result.ApplicationType != (int)ApplicationType.ClientAndServer) + { + continue; + } + + var endpoints = from ii in ServerEndpoints + where ii.ApplicationId == result.ApplicationId + select ii; + + var discoveryUrls = new StringCollection(); + if (endpoints != null) + { + + foreach (var endpoint in endpoints) + { + discoveryUrls.Add(endpoint.DiscoveryUrl); + } + } + + if (lastID == 0) + { + lastID = result.ID; + } + else + { + if (maxRecordsToReturn != 0 && + records.Count >= maxRecordsToReturn) + { + break; + } + + lastID = result.ID; + } + + records.Add(new ApplicationDescription() + { + ApplicationUri = result.ApplicationUri, + ProductUri = result.ProductUri, + ApplicationName = result.ApplicationName, + ApplicationType = (ApplicationType)result.ApplicationType, + GatewayServerUri = null, + DiscoveryProfileUri = null, + DiscoveryUrls = discoveryUrls + }); + nextRecordId = (uint)lastID + 1; + + } + return records.ToArray(); + } + } + + public override ServerOnNetwork[] QueryServers( + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + string[] serverCapabilities, + out DateTime lastCounterResetTime) + { + lock (Lock) + { + lastCounterResetTime = queryCounterResetTime; + + var results = from x in ServerEndpoints + join y in Applications on x.ApplicationId equals y.ApplicationId + where y.ID >= startingRecordId + orderby y.ID + select new + { + y.ID, + y.ApplicationName, + y.ApplicationUri, + y.ProductUri, + x.DiscoveryUrl, + y.ServerCapabilities + }; + + List records = new List(); + uint lastID = 0; + + foreach (var result in results) + { + if (!String.IsNullOrEmpty(applicationName)) + { + if (!Match(result.ApplicationName, applicationName)) + { + continue; + } + } + + if (!String.IsNullOrEmpty(applicationUri)) + { + if (!Match(result.ApplicationUri, applicationUri)) + { + continue; + } + } + + if (!String.IsNullOrEmpty(productUri)) + { + if (!Match(result.ProductUri, productUri)) + { + continue; + } + } + + string[] capabilities = null; + if (!String.IsNullOrEmpty(result.ServerCapabilities)) + { + capabilities = result.ServerCapabilities.Split(','); + } + + if (serverCapabilities != null && serverCapabilities.Length > 0) + { + bool match = true; + + for (int ii = 0; ii < serverCapabilities.Length; ii++) + { + if (capabilities == null || !capabilities.Contains(serverCapabilities[ii])) + { + match = false; + break; + } + } + + if (!match) + { + continue; + } + } + + if (lastID != 0) + { + if (maxRecordsToReturn != 0 && + lastID != result.ID && + records.Count >= maxRecordsToReturn) + { + break; + } + } + lastID = result.ID; + + records.Add(new ServerOnNetwork() + { + RecordId = result.ID, + ServerName = result.ApplicationName, + DiscoveryUrl = result.DiscoveryUrl, + ServerCapabilities = capabilities + }); + + } + + return records.ToArray(); + } + } + + public override bool SetApplicationCertificate( + NodeId applicationId, + string certificateType, + byte[] certificate + ) + { + Guid id = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var results = from x in Applications + where x.ApplicationId == id + select x; + + var result = results.SingleOrDefault(); + + if (result == null) + { + return false; + } + + result.Certificate[certificateType] = certificate; + + SaveChanges(); + } + + return true; + } + + public override bool GetApplicationCertificate( + NodeId applicationId, + string certificateType, + out byte[] certificate) + { + certificate = null; + + Guid id = GetNodeIdGuid(applicationId); + + List certificates = new List(); + + lock (Lock) + { + var application = (from ii in Applications + where ii.ApplicationId == id + select ii).SingleOrDefault(); + + if (application == null) + { + throw new ArgumentException("A record with the specified application id does not exist.", nameof(applicationId)); + } + + if (!application.Certificate.TryGetValue(certificateType, out certificate)) + { + return false; + } + } + return true; + } + + public override bool SetApplicationTrustLists( + NodeId applicationId, + string certificateType, + string trustListId + ) + { + Guid id = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var result = (from x in Applications where x.ApplicationId == id select x).SingleOrDefault(); + if (result == null) + { + return false; + } + + if (trustListId != null) + { + var result2 = (from x in CertificateStores where x.Path == trustListId select x).SingleOrDefault(); + if (result2 != null) + { + result.TrustListId[certificateType] = result2.TrustListId; + } + } + SaveChanges(); + } + + return true; + } + + public override bool GetApplicationTrustLists( + NodeId applicationId, + string certificateType, + out string trustListId + ) + { + trustListId = null; + Guid id = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var result = (from x in Applications where x.ApplicationId == id select x).SingleOrDefault(); + + if (result == null) + { + return false; + } + + Guid trustListGuid; + if (result.TrustListId.TryGetValue(certificateType, out trustListGuid)) + { + var result2 = (from x in CertificateStores where x.TrustListId == trustListGuid select x).SingleOrDefault(); + if (result2 != null) + { + trustListId = result2.Path; + return true; + } + } + } + + return false; + } + #endregion + + #region ICertificateRequest + public NodeId StartSigningRequest( + NodeId applicationId, + string certificateGroupId, + string certificateTypeId, + byte[] certificateRequest, + string authorityId) + { + Guid id = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var application = (from x in Applications where x.ApplicationId == id select x).SingleOrDefault(); + + if (application == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + var request = (from x in CertificateRequests where x.AuthorityId == authorityId && x.ApplicationId == id select x).SingleOrDefault(); + + bool isNew = false; + + if (request == null) + { + request = new CertificateRequest() { RequestId = Guid.NewGuid(), AuthorityId = authorityId }; + isNew = true; + } + + request.State = (int)CertificateRequestState.New; + request.CertificateGroupId = certificateGroupId; + request.CertificateTypeId = certificateTypeId; + request.SubjectName = null; + request.DomainNames = null; + request.PrivateKeyFormat = null; + request.PrivateKeyPassword = null; + request.CertificateSigningRequest = certificateRequest; + request.ApplicationId = id; + + if (isNew) + { + CertificateRequests.Add(request); + } + + SaveChanges(); + + return new NodeId(request.RequestId, NamespaceIndex); + } + + } + + public NodeId StartNewKeyPairRequest( + NodeId applicationId, + string certificateGroupId, + string certificateTypeId, + string subjectName, + string[] domainNames, + string privateKeyFormat, + string privateKeyPassword, + string authorityId) + { + Guid id = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var application = (from x in Applications where x.ApplicationId == id select x).SingleOrDefault(); + + if (application == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + var request = (from x in CertificateRequests where x.AuthorityId == authorityId && x.ApplicationId == id select x).SingleOrDefault(); + + bool isNew = false; + + if (request == null) + { + request = new CertificateRequest() + { + RequestId = Guid.NewGuid(), + AuthorityId = authorityId + }; + isNew = true; + } + + request.State = (int)CertificateRequestState.New; + request.CertificateGroupId = certificateGroupId; + request.CertificateTypeId = certificateTypeId; + request.SubjectName = subjectName; + request.DomainNames = domainNames; + request.PrivateKeyFormat = privateKeyFormat; + request.PrivateKeyPassword = privateKeyPassword; + request.CertificateSigningRequest = null; + request.ApplicationId = id; + + if (isNew) + { + CertificateRequests.Add(request); + } + + SaveChanges(); + + return new NodeId(request.RequestId, NamespaceIndex); + } + + } + + public void ApproveRequest( + NodeId requestId, + bool isRejected + ) + { + Guid id = GetNodeIdGuid(requestId); + + lock (Lock) + { + var request = (from x in CertificateRequests where x.RequestId == id select x).SingleOrDefault(); + + if (request == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + if (isRejected) + { + request.State = (int)CertificateRequestState.Rejected; + // erase information which is ot required anymore + request.CertificateSigningRequest = null; + request.PrivateKeyPassword = null; + } + else + { + request.State = (int)CertificateRequestState.Approved; + } + + SaveChanges(); + } + + } + + public void AcceptRequest( + NodeId requestId, + byte[] signedCertificate) + { + Guid id = GetNodeIdGuid(requestId); + + lock (Lock) + { + var request = (from x in CertificateRequests where x.RequestId == id select x).SingleOrDefault(); + + if (request == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + request.State = (int)CertificateRequestState.Accepted; + + // save certificate for audit trail + request.Certificate = signedCertificate; + + // erase information which is ot required anymore + request.CertificateSigningRequest = null; + request.PrivateKeyPassword = null; + + SaveChanges(); + } + + } + + public CertificateRequestState FinishRequest( + NodeId applicationId, + NodeId requestId, + out string certificateGroupId, + out string certificateTypeId, + out byte[] signedCertificate, + out byte[] privateKey + ) + { + certificateGroupId = null; + certificateTypeId = null; + signedCertificate = null; + privateKey = null; + Guid reqId = GetNodeIdGuid(requestId); + Guid appId = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var request = (from x in CertificateRequests where x.RequestId == reqId select x).SingleOrDefault(); + + if (request == null) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument); + } + + switch (request.State) + { + case (int)CertificateRequestState.New: + return CertificateRequestState.New; + case (int)CertificateRequestState.Rejected: + return CertificateRequestState.Rejected; + case (int)CertificateRequestState.Accepted: + return CertificateRequestState.Accepted; + case (int)CertificateRequestState.Approved: + break; + default: + throw new ServiceResultException(StatusCodes.BadInvalidArgument); + } + + certificateGroupId = request.CertificateGroupId; + certificateTypeId = request.CertificateTypeId; + + return CertificateRequestState.Approved; + } + } + + public CertificateRequestState ReadRequest( + NodeId applicationId, + NodeId requestId, + out string certificateGroupId, + out string certificateTypeId, + out byte[] certificateRequest, + out string subjectName, + out string[] domainNames, + out string privateKeyFormat, + out string privateKeyPassword) + { + certificateGroupId = null; + certificateTypeId = null; + certificateRequest = null; + subjectName = null; + domainNames = null; + privateKeyFormat = null; + privateKeyPassword = null; + Guid reqId = GetNodeIdGuid(requestId); + Guid appId = GetNodeIdGuid(applicationId); + + lock (Lock) + { + var request = (from x in CertificateRequests where x.RequestId == reqId select x).SingleOrDefault(); + + if (request == null) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument); + } + + switch (request.State) + { + case (int)CertificateRequestState.New: + return CertificateRequestState.New; + case (int)CertificateRequestState.Rejected: + return CertificateRequestState.Rejected; + case (int)CertificateRequestState.Accepted: + return CertificateRequestState.Accepted; + case (int)CertificateRequestState.Approved: + break; + default: + throw new ServiceResultException(StatusCodes.BadInvalidArgument); + } + + certificateGroupId = request.CertificateGroupId; + certificateTypeId = request.CertificateTypeId; + certificateRequest = request.CertificateSigningRequest; + subjectName = request.SubjectName; + domainNames = request.DomainNames; + privateKeyFormat = request.PrivateKeyFormat; + privateKeyPassword = request.PrivateKeyPassword; + + return CertificateRequestState.Approved; + } + } + #endregion + + #region Public Members + public virtual void Save() + { + } + #endregion + + #region Private Members + private void SaveChanges() + { + lock (Lock) + { + queryCounterResetTime = DateTime.UtcNow; + // assign IDs to new apps + var queryNewApps = from x in Applications + where x.ID == 0 + select x; + if (Applications.Count > 0) + { + uint appMax = Applications.Max(a => a.ID); + foreach (var application in queryNewApps) + { + appMax++; + application.ID = appMax; + } + } + Save(); + } + } + #endregion + + #region Internal Members + [OnDeserialized] + internal void OnDeserializedMethod(StreamingContext context) + { + Lock = new object(); + queryCounterResetTime = DateTime.UtcNow; + } + #endregion + + #region Internal Fields + [NonSerialized] + internal object Lock = new object(); + [NonSerialized] + internal DateTime queryCounterResetTime = DateTime.UtcNow; + [JsonProperty] + internal ICollection Applications = new HashSet(); + [JsonProperty] + internal ICollection ApplicationNames = new List(); + [JsonProperty] + internal ICollection ServerEndpoints = new List(); + [JsonProperty] + internal ICollection CertificateRequests = new HashSet(); + [JsonProperty] + internal ICollection CertificateStores = new HashSet(); + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.Classes.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.Classes.cs new file mode 100644 index 00000000..b4302973 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.Classes.cs @@ -0,0 +1,5189 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua; + +namespace Opc.Ua.Gds +{ + #region FindApplicationsMethodState Class + #if (!OPCUA_EXCLUDE_FindApplicationsMethodState) + /// + /// Stores an instance of the FindApplicationsMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FindApplicationsMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FindApplicationsMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new FindApplicationsMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAGgAAAEZp" + + "bmRBcHBsaWNhdGlvbnNNZXRob2RUeXBlAQECAAAvAQECAAIAAAABAf////8CAAAAF2CpCgIAAAAAAA4A" + + "AABJbnB1dEFyZ3VtZW50cwEBAwAALgBEAwAAAJYBAAAAAQAqAQEdAAAADgAAAEFwcGxpY2F0aW9uVXJp" + + "AAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJn" + + "dW1lbnRzAQEEAAAuAEQEAAAAlgEAAAABACoBASEAAAAMAAAAQXBwbGljYXRpb25zAQEBAAEAAAABAAAA" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public FindApplicationsMethodStateMethodCallHandler 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; + + string applicationUri = (string)_inputArguments[0]; + + ApplicationRecordDataType[] applications = (ApplicationRecordDataType[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationUri, + ref applications); + } + + _outputArguments[0] = applications; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult FindApplicationsMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string applicationUri, + ref ApplicationRecordDataType[] applications); + #endif + #endregion + + #region RegisterApplicationMethodState Class + #if (!OPCUA_EXCLUDE_RegisterApplicationMethodState) + /// + /// Stores an instance of the RegisterApplicationMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RegisterApplicationMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RegisterApplicationMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RegisterApplicationMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHQAAAFJl" + + "Z2lzdGVyQXBwbGljYXRpb25NZXRob2RUeXBlAQEFAAAvAQEFAAUAAAABAf////8CAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEBBgAALgBEBgAAAJYBAAAAAQAqAQEcAAAACwAAAEFwcGxpY2F0aW9u" + + "AQEBAP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRB" + + "cmd1bWVudHMBAQcAAC4ARAcAAACWAQAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlvbklkABH/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RegisterApplicationMethodStateMethodCallHandler 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; + + ApplicationRecordDataType application = (ApplicationRecordDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + NodeId applicationId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + application, + ref applicationId); + } + + _outputArguments[0] = applicationId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RegisterApplicationMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ApplicationRecordDataType application, + ref NodeId applicationId); + #endif + #endregion + + #region UpdateApplicationMethodState Class + #if (!OPCUA_EXCLUDE_UpdateApplicationMethodState) + /// + /// Stores an instance of the UpdateApplicationMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UpdateApplicationMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UpdateApplicationMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new UpdateApplicationMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAGwAAAFVw" + + "ZGF0ZUFwcGxpY2F0aW9uTWV0aG9kVHlwZQEBugAALwEBugC6AAAAAQH/////AQAAABdgqQoCAAAAAAAO" + + "AAAASW5wdXRBcmd1bWVudHMBAbsAAC4ARLsAAACWAQAAAAEAKgEBHAAAAAsAAABBcHBsaWNhdGlvbgEB" + + "AQD/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public UpdateApplicationMethodStateMethodCallHandler 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; + + ApplicationRecordDataType application = (ApplicationRecordDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + application); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult UpdateApplicationMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ApplicationRecordDataType application); + #endif + #endregion + + #region UnregisterApplicationMethodState Class + #if (!OPCUA_EXCLUDE_UnregisterApplicationMethodState) + /// + /// Stores an instance of the UnregisterApplicationMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UnregisterApplicationMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UnregisterApplicationMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new UnregisterApplicationMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHwAAAFVu" + + "cmVnaXN0ZXJBcHBsaWNhdGlvbk1ldGhvZFR5cGUBAQgAAC8BAQgACAAAAAEB/////wEAAAAXYKkKAgAA" + + "AAAADgAAAElucHV0QXJndW1lbnRzAQEJAAAuAEQJAAAAlgEAAAABACoBARwAAAANAAAAQXBwbGljYXRp" + + "b25JZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public UnregisterApplicationMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult UnregisterApplicationMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId); + #endif + #endregion + + #region GetApplicationMethodState Class + #if (!OPCUA_EXCLUDE_GetApplicationMethodState) + /// + /// Stores an instance of the GetApplicationMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetApplicationMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetApplicationMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetApplicationMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAGAAAAEdl" + + "dEFwcGxpY2F0aW9uTWV0aG9kVHlwZQEBzwAALwEBzwDPAAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAA" + + "SW5wdXRBcmd1bWVudHMBAdAAAC4ARNAAAACWAQAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlvbklkABH/" + + "////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1l" + + "bnRzAQHRAAAuAETRAAAAlgEAAAABACoBARwAAAALAAAAQXBwbGljYXRpb24BAQEA/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetApplicationMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + + ApplicationRecordDataType application = (ApplicationRecordDataType)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + ref application); + } + + _outputArguments[0] = application; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetApplicationMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + ref ApplicationRecordDataType application); + #endif + #endregion + + #region QueryApplicationsMethodState Class + #if (!OPCUA_EXCLUDE_QueryApplicationsMethodState) + /// + /// Stores an instance of the QueryApplicationsMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class QueryApplicationsMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public QueryApplicationsMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new QueryApplicationsMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAGwAAAFF1" + + "ZXJ5QXBwbGljYXRpb25zTWV0aG9kVHlwZQEBYQMALwEBYQNhAwAAAQH/////AgAAABdgqQoCAAAAAAAO" + + "AAAASW5wdXRBcmd1bWVudHMBAWIDAC4ARGIDAACWBwAAAAEAKgEBHwAAABAAAABTdGFydGluZ1JlY29y" + + "ZElkAAf/////AAAAAAABACoBASEAAAASAAAATWF4UmVjb3Jkc1RvUmV0dXJuAAf/////AAAAAAABACoB" + + "AR4AAAAPAAAAQXBwbGljYXRpb25OYW1lAAz/////AAAAAAABACoBAR0AAAAOAAAAQXBwbGljYXRpb25V" + + "cmkADP////8AAAAAAAEAKgEBHgAAAA8AAABBcHBsaWNhdGlvblR5cGUAB/////8AAAAAAAEAKgEBGQAA" + + "AAoAAABQcm9kdWN0VXJpAAz/////AAAAAAABACoBAR8AAAAMAAAAQ2FwYWJpbGl0aWVzAAwBAAAAAQAA" + + "AAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50" + + "cwEBYwMALgBEYwMAAJYDAAAAAQAqAQElAAAAFAAAAExhc3RDb3VudGVyUmVzZXRUaW1lAQAmAf////8A" + + "AAAAAAEAKgEBGwAAAAwAAABOZXh0UmVjb3JkSWQAB/////8AAAAAAAEAKgEBIQAAAAwAAABBcHBsaWNh" + + "dGlvbnMBADQBAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public QueryApplicationsMethodStateMethodCallHandler 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; + + uint startingRecordId = (uint)_inputArguments[0]; + uint maxRecordsToReturn = (uint)_inputArguments[1]; + string applicationName = (string)_inputArguments[2]; + string applicationUri = (string)_inputArguments[3]; + uint applicationType = (uint)_inputArguments[4]; + string productUri = (string)_inputArguments[5]; + string[] capabilities = (string[])_inputArguments[6]; + + DateTime lastCounterResetTime = (DateTime)_outputArguments[0]; + uint nextRecordId = (uint)_outputArguments[1]; + ApplicationDescription[] applications = (ApplicationDescription[])_outputArguments[2]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + applicationType, + productUri, + capabilities, + ref lastCounterResetTime, + ref nextRecordId, + ref applications); + } + + _outputArguments[0] = lastCounterResetTime; + _outputArguments[1] = nextRecordId; + _outputArguments[2] = applications; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult QueryApplicationsMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + uint applicationType, + string productUri, + string[] capabilities, + ref DateTime lastCounterResetTime, + ref uint nextRecordId, + ref ApplicationDescription[] applications); + #endif + #endregion + + #region QueryServersMethodState Class + #if (!OPCUA_EXCLUDE_QueryServersMethodState) + /// + /// Stores an instance of the QueryServersMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class QueryServersMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public QueryServersMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new QueryServersMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAFgAAAFF1" + + "ZXJ5U2VydmVyc01ldGhvZFR5cGUBAQoAAC8BAQoACgAAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElu" + + "cHV0QXJndW1lbnRzAQELAAAuAEQLAAAAlgYAAAABACoBAR8AAAAQAAAAU3RhcnRpbmdSZWNvcmRJZAAH" + + "/////wAAAAAAAQAqAQEhAAAAEgAAAE1heFJlY29yZHNUb1JldHVybgAH/////wAAAAAAAQAqAQEeAAAA" + + "DwAAAEFwcGxpY2F0aW9uTmFtZQAM/////wAAAAAAAQAqAQEdAAAADgAAAEFwcGxpY2F0aW9uVXJpAAz/" + + "////AAAAAAABACoBARkAAAAKAAAAUHJvZHVjdFVyaQAM/////wAAAAAAAQAqAQElAAAAEgAAAFNlcnZl" + + "ckNhcGFiaWxpdGllcwAMAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIA" + + "AAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAQwAAC4ARAwAAACWAgAAAAEAKgEBJQAAABQAAABMYXN0Q291" + + "bnRlclJlc2V0VGltZQEAJgH/////AAAAAAABACoBARwAAAAHAAAAU2VydmVycwEAnS8BAAAAAQAAAAAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public QueryServersMethodStateMethodCallHandler 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; + + uint startingRecordId = (uint)_inputArguments[0]; + uint maxRecordsToReturn = (uint)_inputArguments[1]; + string applicationName = (string)_inputArguments[2]; + string applicationUri = (string)_inputArguments[3]; + string productUri = (string)_inputArguments[4]; + string[] serverCapabilities = (string[])_inputArguments[5]; + + DateTime lastCounterResetTime = (DateTime)_outputArguments[0]; + ServerOnNetwork[] servers = (ServerOnNetwork[])_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + startingRecordId, + maxRecordsToReturn, + applicationName, + applicationUri, + productUri, + serverCapabilities, + ref lastCounterResetTime, + ref servers); + } + + _outputArguments[0] = lastCounterResetTime; + _outputArguments[1] = servers; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult QueryServersMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint startingRecordId, + uint maxRecordsToReturn, + string applicationName, + string applicationUri, + string productUri, + string[] serverCapabilities, + ref DateTime lastCounterResetTime, + ref ServerOnNetwork[] servers); + #endif + #endregion + + #region DirectoryState Class + #if (!OPCUA_EXCLUDE_DirectoryState) + /// + /// Stores an instance of the DirectoryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DirectoryState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DirectoryState(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(Opc.Ua.Gds.ObjectTypes.DirectoryType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAFQAAAERp" + + "cmVjdG9yeVR5cGVJbnN0YW5jZQEBDQABAQ0ADQAAAP////8IAAAABGCACgEAAAABAAwAAABBcHBsaWNh" + + "dGlvbnMBAQ4AAC8APQ4AAAD/////AAAAAARhggoEAAAAAQAQAAAARmluZEFwcGxpY2F0aW9ucwEBDwAA" + + "LwEBDwAPAAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBARAAAC4ARBAAAACW" + + "AQAAAAEAKgEBHQAAAA4AAABBcHBsaWNhdGlvblVyaQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEBEQAALgBEEQAAAJYBAAAAAQAqAQEh" + + "AAAADAAAAEFwcGxpY2F0aW9ucwEBAQABAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAAEYYIKBAAAAAEAEwAAAFJlZ2lzdGVyQXBwbGljYXRpb24BARIAAC8BARIAEgAAAAEB/////wIAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQETAAAuAEQTAAAAlgEAAAABACoBARwAAAALAAAAQXBw" + + "bGljYXRpb24BAQEA/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAA" + + "AE91dHB1dEFyZ3VtZW50cwEBFAAALgBEFAAAAJYBAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9uSWQA" + + "Ef////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAABABEAAABVcGRhdGVBcHBs" + + "aWNhdGlvbgEBvAAALwEBvAC8AAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "Ab0AAC4ARL0AAACWAQAAAAEAKgEBHAAAAAsAAABBcHBsaWNhdGlvbgEBAQD/////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAQAVAAAAVW5yZWdpc3RlckFwcGxpY2F0aW9uAQEVAAAv" + + "AQEVABUAAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBFgAALgBEFgAAAJYB" + + "AAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9uSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGGCCgQAAAABAA4AAABHZXRBcHBsaWNhdGlvbgEB0gAALwEB0gDSAAAAAQH/////AgAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAdMAAC4ARNMAAACWAQAAAAEAKgEBHAAAAA0AAABBcHBs" + + "aWNhdGlvbklkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAA" + + "T3V0cHV0QXJndW1lbnRzAQHUAAAuAETUAAAAlgEAAAABACoBARwAAAALAAAAQXBwbGljYXRpb24BAQEA" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEAEQAAAFF1ZXJ5QXBwbGlj" + + "YXRpb25zAQFkAwAvAQFkA2QDAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEB" + + "ZQMALgBEZQMAAJYHAAAAAQAqAQEfAAAAEAAAAFN0YXJ0aW5nUmVjb3JkSWQAB/////8AAAAAAAEAKgEB" + + "IQAAABIAAABNYXhSZWNvcmRzVG9SZXR1cm4AB/////8AAAAAAAEAKgEBHgAAAA8AAABBcHBsaWNhdGlv" + + "bk5hbWUADP////8AAAAAAAEAKgEBHQAAAA4AAABBcHBsaWNhdGlvblVyaQAM/////wAAAAAAAQAqAQEe" + + "AAAADwAAAEFwcGxpY2F0aW9uVHlwZQAH/////wAAAAAAAQAqAQEZAAAACgAAAFByb2R1Y3RVcmkADP//" + + "//8AAAAAAAEAKgEBHwAAAAwAAABDYXBhYmlsaXRpZXMADAEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQFmAwAuAERmAwAAlgMAAAAB" + + "ACoBASUAAAAUAAAATGFzdENvdW50ZXJSZXNldFRpbWUBACYB/////wAAAAAAAQAqAQEbAAAADAAAAE5l" + + "eHRSZWNvcmRJZAAH/////wAAAAAAAQAqAQEhAAAADAAAAEFwcGxpY2F0aW9ucwEANAEBAAAAAQAAAAAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEADAAAAFF1ZXJ5U2VydmVycwEBFwAA" + + "LwEBFwAXAAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBARgAAC4ARBgAAACW" + + "BgAAAAEAKgEBHwAAABAAAABTdGFydGluZ1JlY29yZElkAAf/////AAAAAAABACoBASEAAAASAAAATWF4" + + "UmVjb3Jkc1RvUmV0dXJuAAf/////AAAAAAABACoBAR4AAAAPAAAAQXBwbGljYXRpb25OYW1lAAz/////" + + "AAAAAAABACoBAR0AAAAOAAAAQXBwbGljYXRpb25VcmkADP////8AAAAAAAEAKgEBGQAAAAoAAABQcm9k" + + "dWN0VXJpAAz/////AAAAAAABACoBASUAAAASAAAAU2VydmVyQ2FwYWJpbGl0aWVzAAwBAAAAAQAAAAAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEB" + + "GQAALgBEGQAAAJYCAAAAAQAqAQElAAAAFAAAAExhc3RDb3VudGVyUmVzZXRUaW1lAQAmAf////8AAAAA" + + "AAEAKgEBHAAAAAcAAABTZXJ2ZXJzAQCdLwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public FolderState Applications + { + get + { + return m_applications; + } + + set + { + if (!Object.ReferenceEquals(m_applications, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_applications = value; + } + } + + /// + public FindApplicationsMethodState FindApplications + { + get + { + return m_findApplicationsMethod; + } + + set + { + if (!Object.ReferenceEquals(m_findApplicationsMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_findApplicationsMethod = value; + } + } + + /// + public RegisterApplicationMethodState RegisterApplication + { + get + { + return m_registerApplicationMethod; + } + + set + { + if (!Object.ReferenceEquals(m_registerApplicationMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_registerApplicationMethod = value; + } + } + + /// + public UpdateApplicationMethodState UpdateApplication + { + get + { + return m_updateApplicationMethod; + } + + set + { + if (!Object.ReferenceEquals(m_updateApplicationMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateApplicationMethod = value; + } + } + + /// + public UnregisterApplicationMethodState UnregisterApplication + { + get + { + return m_unregisterApplicationMethod; + } + + set + { + if (!Object.ReferenceEquals(m_unregisterApplicationMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unregisterApplicationMethod = value; + } + } + + /// + public GetApplicationMethodState GetApplication + { + get + { + return m_getApplicationMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getApplicationMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getApplicationMethod = value; + } + } + + /// + public QueryApplicationsMethodState QueryApplications + { + get + { + return m_queryApplicationsMethod; + } + + set + { + if (!Object.ReferenceEquals(m_queryApplicationsMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queryApplicationsMethod = value; + } + } + + /// + public QueryServersMethodState QueryServers + { + get + { + return m_queryServersMethod; + } + + set + { + if (!Object.ReferenceEquals(m_queryServersMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queryServersMethod = 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_applications != null) + { + children.Add(m_applications); + } + + if (m_findApplicationsMethod != null) + { + children.Add(m_findApplicationsMethod); + } + + if (m_registerApplicationMethod != null) + { + children.Add(m_registerApplicationMethod); + } + + if (m_updateApplicationMethod != null) + { + children.Add(m_updateApplicationMethod); + } + + if (m_unregisterApplicationMethod != null) + { + children.Add(m_unregisterApplicationMethod); + } + + if (m_getApplicationMethod != null) + { + children.Add(m_getApplicationMethod); + } + + if (m_queryApplicationsMethod != null) + { + children.Add(m_queryApplicationsMethod); + } + + if (m_queryServersMethod != null) + { + children.Add(m_queryServersMethod); + } + + 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 Opc.Ua.Gds.BrowseNames.Applications: + { + if (createOrReplace) + { + if (Applications == null) + { + if (replacement == null) + { + Applications = new FolderState(this); + } + else + { + Applications = (FolderState)replacement; + } + } + } + + instance = Applications; + break; + } + + case Opc.Ua.Gds.BrowseNames.FindApplications: + { + if (createOrReplace) + { + if (FindApplications == null) + { + if (replacement == null) + { + FindApplications = new FindApplicationsMethodState(this); + } + else + { + FindApplications = (FindApplicationsMethodState)replacement; + } + } + } + + instance = FindApplications; + break; + } + + case Opc.Ua.Gds.BrowseNames.RegisterApplication: + { + if (createOrReplace) + { + if (RegisterApplication == null) + { + if (replacement == null) + { + RegisterApplication = new RegisterApplicationMethodState(this); + } + else + { + RegisterApplication = (RegisterApplicationMethodState)replacement; + } + } + } + + instance = RegisterApplication; + break; + } + + case Opc.Ua.Gds.BrowseNames.UpdateApplication: + { + if (createOrReplace) + { + if (UpdateApplication == null) + { + if (replacement == null) + { + UpdateApplication = new UpdateApplicationMethodState(this); + } + else + { + UpdateApplication = (UpdateApplicationMethodState)replacement; + } + } + } + + instance = UpdateApplication; + break; + } + + case Opc.Ua.Gds.BrowseNames.UnregisterApplication: + { + if (createOrReplace) + { + if (UnregisterApplication == null) + { + if (replacement == null) + { + UnregisterApplication = new UnregisterApplicationMethodState(this); + } + else + { + UnregisterApplication = (UnregisterApplicationMethodState)replacement; + } + } + } + + instance = UnregisterApplication; + break; + } + + case Opc.Ua.Gds.BrowseNames.GetApplication: + { + if (createOrReplace) + { + if (GetApplication == null) + { + if (replacement == null) + { + GetApplication = new GetApplicationMethodState(this); + } + else + { + GetApplication = (GetApplicationMethodState)replacement; + } + } + } + + instance = GetApplication; + break; + } + + case Opc.Ua.Gds.BrowseNames.QueryApplications: + { + if (createOrReplace) + { + if (QueryApplications == null) + { + if (replacement == null) + { + QueryApplications = new QueryApplicationsMethodState(this); + } + else + { + QueryApplications = (QueryApplicationsMethodState)replacement; + } + } + } + + instance = QueryApplications; + break; + } + + case Opc.Ua.Gds.BrowseNames.QueryServers: + { + if (createOrReplace) + { + if (QueryServers == null) + { + if (replacement == null) + { + QueryServers = new QueryServersMethodState(this); + } + else + { + QueryServers = (QueryServersMethodState)replacement; + } + } + } + + instance = QueryServers; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private FolderState m_applications; + private FindApplicationsMethodState m_findApplicationsMethod; + private RegisterApplicationMethodState m_registerApplicationMethod; + private UpdateApplicationMethodState m_updateApplicationMethod; + private UnregisterApplicationMethodState m_unregisterApplicationMethod; + private GetApplicationMethodState m_getApplicationMethod; + private QueryApplicationsMethodState m_queryApplicationsMethod; + private QueryServersMethodState m_queryServersMethod; + #endregion + } + #endif + #endregion + + #region ApplicationRegistrationChangedAuditEventState Class + #if (!OPCUA_EXCLUDE_ApplicationRegistrationChangedAuditEventState) + /// + /// Stores an instance of the ApplicationRegistrationChangedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ApplicationRegistrationChangedAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ApplicationRegistrationChangedAuditEventState(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(Opc.Ua.Gds.ObjectTypes.ApplicationRegistrationChangedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEANAAAAEFw" + + "cGxpY2F0aW9uUmVnaXN0cmF0aW9uQ2hhbmdlZEF1ZGl0RXZlbnRUeXBlSW5zdGFuY2UBARoAAQEaABoA" + + "AAD/////DwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEBGwAALgBEGwAAAAAP/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACQAAAEV2ZW50VHlwZQEBHAAALgBEHAAAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5vZGUBAR0AAC4ARB0AAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOYW1lAQEeAAAuAEQeAAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEBHwAALgBE" + + "HwAAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBASAAAC4ARCAAAAAB" + + "ACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBASIAAC4ARCIAAAAAFf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEBIwAALgBEIwAAAAAF/////wEB/////wAAAAAVYIkK" + + "AgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEBJAAALgBEJAAAAAEAJgH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAGAAAAU3RhdHVzAQElAAAuAEQlAAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2Vy" + + "dmVySWQBASYAAC4ARCYAAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGllbnRBdWRpdEVu" + + "dHJ5SWQBAScAAC4ARCcAAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQB" + + "ASgAAC4ARCgAAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABNZXRob2RJZAEBKQAALgBEKQAA" + + "AAAR/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQEqAAAuAEQqAAAAABgB" + + "AAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region StartSigningRequestMethodState Class + #if (!OPCUA_EXCLUDE_StartSigningRequestMethodState) + /// + /// Stores an instance of the StartSigningRequestMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StartSigningRequestMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StartSigningRequestMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new StartSigningRequestMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHQAAAFN0" + + "YXJ0U2lnbmluZ1JlcXVlc3RNZXRob2RUeXBlAQEzAAAvAQEzADMAAAABAf////8CAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEBNAAALgBENAAAAJYEAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9u" + + "SWQAEf////8AAAAAAAEAKgEBIQAAABIAAABDZXJ0aWZpY2F0ZUdyb3VwSWQAEf////8AAAAAAAEAKgEB" + + "IAAAABEAAABDZXJ0aWZpY2F0ZVR5cGVJZAAR/////wAAAAAAAQAqAQEhAAAAEgAAAENlcnRpZmljYXRl" + + "UmVxdWVzdAAP/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91" + + "dHB1dEFyZ3VtZW50cwEBNQAALgBENQAAAJYBAAAAAQAqAQEYAAAACQAAAFJlcXVlc3RJZAAR/////wAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public StartSigningRequestMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + NodeId certificateGroupId = (NodeId)_inputArguments[1]; + NodeId certificateTypeId = (NodeId)_inputArguments[2]; + byte[] certificateRequest = (byte[])_inputArguments[3]; + + NodeId requestId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + certificateGroupId, + certificateTypeId, + certificateRequest, + ref requestId); + } + + _outputArguments[0] = requestId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult StartSigningRequestMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + byte[] certificateRequest, + ref NodeId requestId); + #endif + #endregion + + #region StartNewKeyPairRequestMethodState Class + #if (!OPCUA_EXCLUDE_StartNewKeyPairRequestMethodState) + /// + /// Stores an instance of the StartNewKeyPairRequestMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StartNewKeyPairRequestMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StartNewKeyPairRequestMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new StartNewKeyPairRequestMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAIAAAAFN0" + + "YXJ0TmV3S2V5UGFpclJlcXVlc3RNZXRob2RUeXBlAQEwAAAvAQEwADAAAAABAf////8CAAAAF2CpCgIA" + + "AAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBMQAALgBEMQAAAJYHAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0" + + "aW9uSWQAEf////8AAAAAAAEAKgEBIQAAABIAAABDZXJ0aWZpY2F0ZUdyb3VwSWQAEf////8AAAAAAAEA" + + "KgEBIAAAABEAAABDZXJ0aWZpY2F0ZVR5cGVJZAAR/////wAAAAAAAQAqAQEaAAAACwAAAFN1YmplY3RO" + + "YW1lAAz/////AAAAAAABACoBAR4AAAALAAAARG9tYWluTmFtZXMADAEAAAABAAAAAAAAAAABACoBAR8A" + + "AAAQAAAAUHJpdmF0ZUtleUZvcm1hdAAM/////wAAAAAAAQAqAQEhAAAAEgAAAFByaXZhdGVLZXlQYXNz" + + "d29yZAAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1" + + "dEFyZ3VtZW50cwEBMgAALgBEMgAAAJYBAAAAAQAqAQEYAAAACQAAAFJlcXVlc3RJZAAR/////wAAAAAA" + + "AQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public StartNewKeyPairRequestMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + NodeId certificateGroupId = (NodeId)_inputArguments[1]; + NodeId certificateTypeId = (NodeId)_inputArguments[2]; + string subjectName = (string)_inputArguments[3]; + string[] domainNames = (string[])_inputArguments[4]; + string privateKeyFormat = (string)_inputArguments[5]; + string privateKeyPassword = (string)_inputArguments[6]; + + NodeId requestId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + certificateGroupId, + certificateTypeId, + subjectName, + domainNames, + privateKeyFormat, + privateKeyPassword, + ref requestId); + } + + _outputArguments[0] = requestId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult StartNewKeyPairRequestMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + string subjectName, + string[] domainNames, + string privateKeyFormat, + string privateKeyPassword, + ref NodeId requestId); + #endif + #endregion + + #region FinishRequestMethodState Class + #if (!OPCUA_EXCLUDE_FinishRequestMethodState) + /// + /// Stores an instance of the FinishRequestMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FinishRequestMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FinishRequestMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new FinishRequestMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAFwAAAEZp" + + "bmlzaFJlcXVlc3RNZXRob2RUeXBlAQE5AAAvAQE5ADkAAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJ" + + "bnB1dEFyZ3VtZW50cwEBOgAALgBEOgAAAJYCAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9uSWQAEf//" + + "//8AAAAAAAEAKgEBGAAAAAkAAABSZXF1ZXN0SWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBATsAAC4ARDsAAACWAwAAAAEAKgEBGgAA" + + "AAsAAABDZXJ0aWZpY2F0ZQAP/////wAAAAAAAQAqAQEZAAAACgAAAFByaXZhdGVLZXkAD/////8AAAAA" + + "AAEAKgEBJQAAABIAAABJc3N1ZXJDZXJ0aWZpY2F0ZXMADwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public FinishRequestMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + NodeId requestId = (NodeId)_inputArguments[1]; + + byte[] certificate = (byte[])_outputArguments[0]; + byte[] privateKey = (byte[])_outputArguments[1]; + byte[][] issuerCertificates = (byte[][])_outputArguments[2]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + requestId, + ref certificate, + ref privateKey, + ref issuerCertificates); + } + + _outputArguments[0] = certificate; + _outputArguments[1] = privateKey; + _outputArguments[2] = issuerCertificates; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult FinishRequestMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId requestId, + ref byte[] certificate, + ref byte[] privateKey, + ref byte[][] issuerCertificates); + #endif + #endregion + + #region GetCertificateGroupsMethodState Class + #if (!OPCUA_EXCLUDE_GetCertificateGroupsMethodState) + /// + /// Stores an instance of the GetCertificateGroupsMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetCertificateGroupsMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetCertificateGroupsMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetCertificateGroupsMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHgAAAEdl" + + "dENlcnRpZmljYXRlR3JvdXBzTWV0aG9kVHlwZQEB5gAALwEB5gDmAAAAAQH/////AgAAABdgqQoCAAAA" + + "AAAOAAAASW5wdXRBcmd1bWVudHMBAecAAC4AROcAAACWAQAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlv" + + "bklkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0" + + "QXJndW1lbnRzAQHoAAAuAEToAAAAlgEAAAABACoBASYAAAATAAAAQ2VydGlmaWNhdGVHcm91cElkcwAR" + + "AQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetCertificateGroupsMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + + NodeId[] certificateGroupIds = (NodeId[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + ref certificateGroupIds); + } + + _outputArguments[0] = certificateGroupIds; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetCertificateGroupsMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + ref NodeId[] certificateGroupIds); + #endif + #endregion + + #region GetTrustListMethodState Class + #if (!OPCUA_EXCLUDE_GetTrustListMethodState) + /// + /// Stores an instance of the GetTrustListMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetTrustListMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetTrustListMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetTrustListMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAFgAAAEdl" + + "dFRydXN0TGlzdE1ldGhvZFR5cGUBAb4AAC8BAb4AvgAAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElu" + + "cHV0QXJndW1lbnRzAQG/AAAuAES/AAAAlgIAAAABACoBARwAAAANAAAAQXBwbGljYXRpb25JZAAR////" + + "/wAAAAAAAQAqAQEhAAAAEgAAAENlcnRpZmljYXRlR3JvdXBJZAAR/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEBwAAALgBEwAAAAJYBAAAA" + + "AQAqAQEaAAAACwAAAFRydXN0TGlzdElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAA" + + "AA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetTrustListMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + NodeId certificateGroupId = (NodeId)_inputArguments[1]; + + NodeId trustListId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + certificateGroupId, + ref trustListId); + } + + _outputArguments[0] = trustListId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetTrustListMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + ref NodeId trustListId); + #endif + #endregion + + #region RevokeCertificateMethodState Class + #if (!OPCUA_EXCLUDE_RevokeCertificateMethodState) + /// + /// Stores an instance of the RevokeCertificateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RevokeCertificateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RevokeCertificateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RevokeCertificateMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAGwAAAFJl" + + "dm9rZUNlcnRpZmljYXRlTWV0aG9kVHlwZQEBmToALwEBmTqZOgAAAQH/////AQAAABdgqQoCAAAAAAAO" + + "AAAASW5wdXRBcmd1bWVudHMBAZo6AC4ARJo6AACWAgAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlvbklk" + + "ABH/////AAAAAAABACoBARoAAAALAAAAQ2VydGlmaWNhdGUAD/////8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RevokeCertificateMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + byte[] certificate = (byte[])_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + certificate); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RevokeCertificateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + byte[] certificate); + #endif + #endregion + + #region GetCertificateStatusMethodState Class + #if (!OPCUA_EXCLUDE_GetCertificateStatusMethodState) + /// + /// Stores an instance of the GetCertificateStatusMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetCertificateStatusMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetCertificateStatusMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetCertificateStatusMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHgAAAEdl" + + "dENlcnRpZmljYXRlU3RhdHVzTWV0aG9kVHlwZQEB2wAALwEB2wDbAAAAAQH/////AgAAABdgqQoCAAAA" + + "AAAOAAAASW5wdXRBcmd1bWVudHMBAdwAAC4ARNwAAACWAwAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlv" + + "bklkABH/////AAAAAAABACoBASEAAAASAAAAQ2VydGlmaWNhdGVHcm91cElkABH/////AAAAAAABACoB" + + "ASAAAAARAAAAQ2VydGlmaWNhdGVUeXBlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAd0AAC4ARN0AAACWAQAAAAEAKgEBHQAAAA4A" + + "AABVcGRhdGVSZXF1aXJlZAAB/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetCertificateStatusMethodStateMethodCallHandler 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; + + NodeId applicationId = (NodeId)_inputArguments[0]; + NodeId certificateGroupId = (NodeId)_inputArguments[1]; + NodeId certificateTypeId = (NodeId)_inputArguments[2]; + + bool updateRequired = (bool)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationId, + certificateGroupId, + certificateTypeId, + ref updateRequired); + } + + _outputArguments[0] = updateRequired; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetCertificateStatusMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId applicationId, + NodeId certificateGroupId, + NodeId certificateTypeId, + ref bool updateRequired); + #endif + #endregion + + #region CertificateDirectoryState Class + #if (!OPCUA_EXCLUDE_CertificateDirectoryState) + /// + /// Stores an instance of the CertificateDirectoryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateDirectoryState : DirectoryState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateDirectoryState(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(Opc.Ua.Gds.ObjectTypes.CertificateDirectoryType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (RevokeCertificate != null) + { + RevokeCertificate.Initialize(context, RevokeCertificate_InitializationString); + } + } + + #region Initialization String + private const string RevokeCertificate_InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAEQAAAFJl" + + "dm9rZUNlcnRpZmljYXRlAQGbOgAvAQGbOps6AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFy" + + "Z3VtZW50cwEBnDoALgBEnDoAAJYCAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9uSWQAEf////8AAAAA" + + "AAEAKgEBGgAAAAsAAABDZXJ0aWZpY2F0ZQAP/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + + private const string InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAIAAAAENl" + + "cnRpZmljYXRlRGlyZWN0b3J5VHlwZUluc3RhbmNlAQE/AAEBPwA/AAAA/////xAAAAAEYIAKAQAAAAEA" + + "DAAAAEFwcGxpY2F0aW9ucwEBQAAALwA9QAAAAP////8AAAAABGGCCgQAAAABABAAAABGaW5kQXBwbGlj" + + "YXRpb25zAQFBAAAvAQEPAEEAAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEB" + + "QgAALgBEQgAAAJYBAAAAAQAqAQEdAAAADgAAAEFwcGxpY2F0aW9uVXJpAAz/////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQFDAAAuAERDAAAA" + + "lgEAAAABACoBASEAAAAMAAAAQXBwbGljYXRpb25zAQEBAAEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAARhggoEAAAAAQATAAAAUmVnaXN0ZXJBcHBsaWNhdGlvbgEBRAAALwEBEgBEAAAA" + + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAUUAAC4AREUAAACWAQAAAAEAKgEB" + + "HAAAAAsAAABBcHBsaWNhdGlvbgEBAQD/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdg" + + "qQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQFGAAAuAERGAAAAlgEAAAABACoBARwAAAANAAAAQXBw" + + "bGljYXRpb25JZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEAEQAA" + + "AFVwZGF0ZUFwcGxpY2F0aW9uAQHBAAAvAQG8AMEAAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1" + + "dEFyZ3VtZW50cwEBwgAALgBEwgAAAJYBAAAAAQAqAQEcAAAACwAAAEFwcGxpY2F0aW9uAQEBAP////8A" + + "AAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAABABUAAABVbnJlZ2lzdGVyQXBwbGlj" + + "YXRpb24BAUcAAC8BARUARwAAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQFI" + + "AAAuAERIAAAAlgEAAAABACoBARwAAAANAAAAQXBwbGljYXRpb25JZAAR/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEADgAAAEdldEFwcGxpY2F0aW9uAQHVAAAvAQHSANUAAAAB" + + "Af////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEB1gAALgBE1gAAAJYBAAAAAQAqAQEc" + + "AAAADQAAAEFwcGxpY2F0aW9uSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2Cp" + + "CgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAdcAAC4ARNcAAACWAQAAAAEAKgEBHAAAAAsAAABBcHBs" + + "aWNhdGlvbgEBAQD/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAQARAAAA" + + "UXVlcnlBcHBsaWNhdGlvbnMBAWcDAC8BAWQDZwMAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0" + + "QXJndW1lbnRzAQFoAwAuAERoAwAAlgcAAAABACoBAR8AAAAQAAAAU3RhcnRpbmdSZWNvcmRJZAAH////" + + "/wAAAAAAAQAqAQEhAAAAEgAAAE1heFJlY29yZHNUb1JldHVybgAH/////wAAAAAAAQAqAQEeAAAADwAA" + + "AEFwcGxpY2F0aW9uTmFtZQAM/////wAAAAAAAQAqAQEdAAAADgAAAEFwcGxpY2F0aW9uVXJpAAz/////" + + "AAAAAAABACoBAR4AAAAPAAAAQXBwbGljYXRpb25UeXBlAAf/////AAAAAAABACoBARkAAAAKAAAAUHJv" + + "ZHVjdFVyaQAM/////wAAAAAAAQAqAQEfAAAADAAAAENhcGFiaWxpdGllcwAMAQAAAAEAAAAAAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAWkDAC4A" + + "RGkDAACWAwAAAAEAKgEBJQAAABQAAABMYXN0Q291bnRlclJlc2V0VGltZQEAJgH/////AAAAAAABACoB" + + "ARsAAAAMAAAATmV4dFJlY29yZElkAAf/////AAAAAAABACoBASEAAAAMAAAAQXBwbGljYXRpb25zAQA0" + + "AQEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAQAMAAAAUXVlcnlT" + + "ZXJ2ZXJzAQFJAAAvAQEXAEkAAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEB" + + "SgAALgBESgAAAJYGAAAAAQAqAQEfAAAAEAAAAFN0YXJ0aW5nUmVjb3JkSWQAB/////8AAAAAAAEAKgEB" + + "IQAAABIAAABNYXhSZWNvcmRzVG9SZXR1cm4AB/////8AAAAAAAEAKgEBHgAAAA8AAABBcHBsaWNhdGlv" + + "bk5hbWUADP////8AAAAAAAEAKgEBHQAAAA4AAABBcHBsaWNhdGlvblVyaQAM/////wAAAAAAAQAqAQEZ" + + "AAAACgAAAFByb2R1Y3RVcmkADP////8AAAAAAAEAKgEBJQAAABIAAABTZXJ2ZXJDYXBhYmlsaXRpZXMA" + + "DAEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0" + + "QXJndW1lbnRzAQFLAAAuAERLAAAAlgIAAAABACoBASUAAAAUAAAATGFzdENvdW50ZXJSZXNldFRpbWUB" + + "ACYB/////wAAAAAAAQAqAQEcAAAABwAAAFNlcnZlcnMBAJ0vAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAABGCACgEAAAABABEAAABDZXJ0aWZpY2F0ZUdyb3VwcwEB/wEAIwEA9TX/AQAA" + + "/////wEAAAAEYIAKAQAAAAAAFwAAAERlZmF1bHRBcHBsaWNhdGlvbkdyb3VwAQEAAgAvAQALMQACAAD/" + + "////AgAAAARggAoBAAAAAAAJAAAAVHJ1c3RMaXN0AQEBAgAvAQDqMAECAAD/////DAAAABVgiQoCAAAA" + + "AAAEAAAAU2l6ZQEBAgIALgBEAgIAAAAJ/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFdyaXRhYmxl" + + "AQEDAgAuAEQDAgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAVXNlcldyaXRhYmxlAQEEAgAu" + + "AEQEAgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAT3BlbkNvdW50AQEFAgAuAEQFAgAAAAX/" + + "////AQH/////AAAAAARhggoEAAAAAAAEAAAAT3BlbgEBBwIALwEAPC0HAgAAAQH/////AgAAABdgqQoC" + + "AAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAQgCAC4ARAgCAACWAQAAAAEAKgEBEwAAAAQAAABNb2RlAAP/" + + "////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1l" + + "bnRzAQEJAgAuAEQJAgAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEA" + + "AAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAENsb3NlAQEKAgAvAQA/LQoCAAABAf////8B" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBCwIALgBECwIAAJYBAAAAAQAqAQEZAAAACgAA" + + "AEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAQA" + + "AABSZWFkAQEMAgAvAQBBLQwCAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEB" + + "DQIALgBEDQIAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFQAAAAYA" + + "AABMZW5ndGgABv////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABP" + + "dXRwdXRBcmd1bWVudHMBAQ4CAC4ARA4CAACWAQAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAV3JpdGUBAQ8CAC8BAEQtDwIAAAEB" + + "/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQEQAgAuAEQQAgAAlgIAAAABACoBARkA" + + "AAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQETAAAABAAAAERhdGEAD/////8AAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABHZXRQb3NpdGlvbgEBEQIALwEARi0RAgAA" + + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBARICAC4ARBICAACWAQAAAAEAKgEB" + + "GQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoC" + + "AAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQETAgAuAEQTAgAAlgEAAAABACoBARcAAAAIAAAAUG9zaXRp" + + "b24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABTZXRQb3Np" + + "dGlvbgEBFAIALwEASS0UAgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBARUC" + + "AC4ARBUCAACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARcAAAAIAAAA" + + "UG9zaXRpb24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAA4AAABM" + + "YXN0VXBkYXRlVGltZQEBFgIALgBEFgIAAAEAJgH/////AQH/////AAAAAARhggoEAAAAAAANAAAAT3Bl" + + "bldpdGhNYXNrcwEBFwIALwEA/zAXAgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBARgCAC4ARBgCAACWAQAAAAEAKgEBFAAAAAUAAABNYXNrcwAH/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEBGQIALgBEGQIAAJYBAAAA" + + "AQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "F2CJCgIAAAAAABAAAABDZXJ0aWZpY2F0ZVR5cGVzAQEhAgAuAEQhAgAAABEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGGCCgQAAAABABMAAABTdGFydFNpZ25pbmdSZXF1ZXN0AQFPAAAvAQFPAE8AAAABAf////8C" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBUAAALgBEUAAAAJYEAAAAAQAqAQEcAAAADQAA" + + "AEFwcGxpY2F0aW9uSWQAEf////8AAAAAAAEAKgEBIQAAABIAAABDZXJ0aWZpY2F0ZUdyb3VwSWQAEf//" + + "//8AAAAAAAEAKgEBIAAAABEAAABDZXJ0aWZpY2F0ZVR5cGVJZAAR/////wAAAAAAAQAqAQEhAAAAEgAA" + + "AENlcnRpZmljYXRlUmVxdWVzdAAP/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkK" + + "AgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEBUQAALgBEUQAAAJYBAAAAAQAqAQEYAAAACQAAAFJlcXVl" + + "c3RJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEAFgAAAFN0YXJ0" + + "TmV3S2V5UGFpclJlcXVlc3QBAUwAAC8BAUwATAAAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0" + + "QXJndW1lbnRzAQFNAAAuAERNAAAAlgcAAAABACoBARwAAAANAAAAQXBwbGljYXRpb25JZAAR/////wAA" + + "AAAAAQAqAQEhAAAAEgAAAENlcnRpZmljYXRlR3JvdXBJZAAR/////wAAAAAAAQAqAQEgAAAAEQAAAENl" + + "cnRpZmljYXRlVHlwZUlkABH/////AAAAAAABACoBARoAAAALAAAAU3ViamVjdE5hbWUADP////8AAAAA" + + "AAEAKgEBHgAAAAsAAABEb21haW5OYW1lcwAMAQAAAAEAAAAAAAAAAAEAKgEBHwAAABAAAABQcml2YXRl" + + "S2V5Rm9ybWF0AAz/////AAAAAAABACoBASEAAAASAAAAUHJpdmF0ZUtleVBhc3N3b3JkAAz/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQFO" + + "AAAuAEROAAAAlgEAAAABACoBARgAAAAJAAAAUmVxdWVzdElkABH/////AAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAARhggoEAAAAAQANAAAARmluaXNoUmVxdWVzdAEBVQAALwEBVQBVAAAAAQH/////" + + "AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAVYAAC4ARFYAAACWAgAAAAEAKgEBHAAAAA0A" + + "AABBcHBsaWNhdGlvbklkABH/////AAAAAAABACoBARgAAAAJAAAAUmVxdWVzdElkABH/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQFXAAAu" + + "AERXAAAAlgMAAAABACoBARoAAAALAAAAQ2VydGlmaWNhdGUAD/////8AAAAAAAEAKgEBGQAAAAoAAABQ" + + "cml2YXRlS2V5AA//////AAAAAAABACoBASUAAAASAAAASXNzdWVyQ2VydGlmaWNhdGVzAA8BAAAAAQAA" + + "AAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEAEQAAAFJldm9rZUNlcnRpZmlj" + + "YXRlAQGbOgAvAQGbOps6AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBnDoA" + + "LgBEnDoAAJYCAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9uSWQAEf////8AAAAAAAEAKgEBGgAAAAsA" + + "AABDZXJ0aWZpY2F0ZQAP/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEA" + + "FAAAAEdldENlcnRpZmljYXRlR3JvdXBzAQFxAQAvAQFxAXEBAAABAf////8CAAAAF2CpCgIAAAAAAA4A" + + "AABJbnB1dEFyZ3VtZW50cwEBcgEALgBEcgEAAJYBAAAAAQAqAQEcAAAADQAAAEFwcGxpY2F0aW9uSWQA" + + "Ef////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1" + + "bWVudHMBAXMBAC4ARHMBAACWAQAAAAEAKgEBJgAAABMAAABDZXJ0aWZpY2F0ZUdyb3VwSWRzABEBAAAA" + + "AQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEADAAAAEdldFRydXN0TGlz" + + "dAEBxQAALwEBxQDFAAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAcYAAC4A" + + "RMYAAACWAgAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlvbklkABH/////AAAAAAABACoBASEAAAASAAAA" + + "Q2VydGlmaWNhdGVHcm91cElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoC" + + "AAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQHHAAAuAETHAAAAlgEAAAABACoBARoAAAALAAAAVHJ1c3RM" + + "aXN0SWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAABABQAAABHZXRD" + + "ZXJ0aWZpY2F0ZVN0YXR1cwEB3gAALwEB3gDeAAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRB" + + "cmd1bWVudHMBAd8AAC4ARN8AAACWAwAAAAEAKgEBHAAAAA0AAABBcHBsaWNhdGlvbklkABH/////AAAA" + + "AAABACoBASEAAAASAAAAQ2VydGlmaWNhdGVHcm91cElkABH/////AAAAAAABACoBASAAAAARAAAAQ2Vy" + + "dGlmaWNhdGVUeXBlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAA" + + "AA8AAABPdXRwdXRBcmd1bWVudHMBAeAAAC4AROAAAACWAQAAAAEAKgEBHQAAAA4AAABVcGRhdGVSZXF1" + + "aXJlZAAB/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public CertificateGroupFolderState CertificateGroups + { + get + { + return m_certificateGroups; + } + + set + { + if (!Object.ReferenceEquals(m_certificateGroups, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateGroups = value; + } + } + + /// + public StartSigningRequestMethodState StartSigningRequest + { + get + { + return m_startSigningRequestMethod; + } + + set + { + if (!Object.ReferenceEquals(m_startSigningRequestMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startSigningRequestMethod = value; + } + } + + /// + public StartNewKeyPairRequestMethodState StartNewKeyPairRequest + { + get + { + return m_startNewKeyPairRequestMethod; + } + + set + { + if (!Object.ReferenceEquals(m_startNewKeyPairRequestMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startNewKeyPairRequestMethod = value; + } + } + + /// + public FinishRequestMethodState FinishRequest + { + get + { + return m_finishRequestMethod; + } + + set + { + if (!Object.ReferenceEquals(m_finishRequestMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_finishRequestMethod = value; + } + } + + /// + public RevokeCertificateMethodState RevokeCertificate + { + get + { + return m_revokeCertificateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_revokeCertificateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_revokeCertificateMethod = value; + } + } + + /// + public GetCertificateGroupsMethodState GetCertificateGroups + { + get + { + return m_getCertificateGroupsMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getCertificateGroupsMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getCertificateGroupsMethod = value; + } + } + + /// + public GetTrustListMethodState GetTrustList + { + get + { + return m_getTrustListMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getTrustListMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getTrustListMethod = value; + } + } + + /// + public GetCertificateStatusMethodState GetCertificateStatus + { + get + { + return m_getCertificateStatusMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getCertificateStatusMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getCertificateStatusMethod = 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_certificateGroups != null) + { + children.Add(m_certificateGroups); + } + + if (m_startSigningRequestMethod != null) + { + children.Add(m_startSigningRequestMethod); + } + + if (m_startNewKeyPairRequestMethod != null) + { + children.Add(m_startNewKeyPairRequestMethod); + } + + if (m_finishRequestMethod != null) + { + children.Add(m_finishRequestMethod); + } + + if (m_revokeCertificateMethod != null) + { + children.Add(m_revokeCertificateMethod); + } + + if (m_getCertificateGroupsMethod != null) + { + children.Add(m_getCertificateGroupsMethod); + } + + if (m_getTrustListMethod != null) + { + children.Add(m_getTrustListMethod); + } + + if (m_getCertificateStatusMethod != null) + { + children.Add(m_getCertificateStatusMethod); + } + + 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 Opc.Ua.Gds.BrowseNames.CertificateGroups: + { + if (createOrReplace) + { + if (CertificateGroups == null) + { + if (replacement == null) + { + CertificateGroups = new CertificateGroupFolderState(this); + } + else + { + CertificateGroups = (CertificateGroupFolderState)replacement; + } + } + } + + instance = CertificateGroups; + break; + } + + case Opc.Ua.Gds.BrowseNames.StartSigningRequest: + { + if (createOrReplace) + { + if (StartSigningRequest == null) + { + if (replacement == null) + { + StartSigningRequest = new StartSigningRequestMethodState(this); + } + else + { + StartSigningRequest = (StartSigningRequestMethodState)replacement; + } + } + } + + instance = StartSigningRequest; + break; + } + + case Opc.Ua.Gds.BrowseNames.StartNewKeyPairRequest: + { + if (createOrReplace) + { + if (StartNewKeyPairRequest == null) + { + if (replacement == null) + { + StartNewKeyPairRequest = new StartNewKeyPairRequestMethodState(this); + } + else + { + StartNewKeyPairRequest = (StartNewKeyPairRequestMethodState)replacement; + } + } + } + + instance = StartNewKeyPairRequest; + break; + } + + case Opc.Ua.Gds.BrowseNames.FinishRequest: + { + if (createOrReplace) + { + if (FinishRequest == null) + { + if (replacement == null) + { + FinishRequest = new FinishRequestMethodState(this); + } + else + { + FinishRequest = (FinishRequestMethodState)replacement; + } + } + } + + instance = FinishRequest; + break; + } + + case Opc.Ua.Gds.BrowseNames.RevokeCertificate: + { + if (createOrReplace) + { + if (RevokeCertificate == null) + { + if (replacement == null) + { + RevokeCertificate = new RevokeCertificateMethodState(this); + } + else + { + RevokeCertificate = (RevokeCertificateMethodState)replacement; + } + } + } + + instance = RevokeCertificate; + break; + } + + case Opc.Ua.Gds.BrowseNames.GetCertificateGroups: + { + if (createOrReplace) + { + if (GetCertificateGroups == null) + { + if (replacement == null) + { + GetCertificateGroups = new GetCertificateGroupsMethodState(this); + } + else + { + GetCertificateGroups = (GetCertificateGroupsMethodState)replacement; + } + } + } + + instance = GetCertificateGroups; + break; + } + + case Opc.Ua.Gds.BrowseNames.GetTrustList: + { + if (createOrReplace) + { + if (GetTrustList == null) + { + if (replacement == null) + { + GetTrustList = new GetTrustListMethodState(this); + } + else + { + GetTrustList = (GetTrustListMethodState)replacement; + } + } + } + + instance = GetTrustList; + break; + } + + case Opc.Ua.Gds.BrowseNames.GetCertificateStatus: + { + if (createOrReplace) + { + if (GetCertificateStatus == null) + { + if (replacement == null) + { + GetCertificateStatus = new GetCertificateStatusMethodState(this); + } + else + { + GetCertificateStatus = (GetCertificateStatusMethodState)replacement; + } + } + } + + instance = GetCertificateStatus; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private CertificateGroupFolderState m_certificateGroups; + private StartSigningRequestMethodState m_startSigningRequestMethod; + private StartNewKeyPairRequestMethodState m_startNewKeyPairRequestMethod; + private FinishRequestMethodState m_finishRequestMethod; + private RevokeCertificateMethodState m_revokeCertificateMethod; + private GetCertificateGroupsMethodState m_getCertificateGroupsMethod; + private GetTrustListMethodState m_getTrustListMethod; + private GetCertificateStatusMethodState m_getCertificateStatusMethod; + #endregion + } + #endif + #endregion + + #region CertificateRequestedAuditEventState Class + #if (!OPCUA_EXCLUDE_CertificateRequestedAuditEventState) + /// + /// Stores an instance of the CertificateRequestedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateRequestedAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateRequestedAuditEventState(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(Opc.Ua.Gds.ObjectTypes.CertificateRequestedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAKgAAAENl" + + "cnRpZmljYXRlUmVxdWVzdGVkQXVkaXRFdmVudFR5cGVJbnN0YW5jZQEBWwABAVsAWwAAAP////8RAAAA" + + "FWCJCgIAAAAAAAcAAABFdmVudElkAQFcAAAuAERcAAAAAA//////AQH/////AAAAABVgiQoCAAAAAAAJ" + + "AAAARXZlbnRUeXBlAQFdAAAuAERdAAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNl" + + "Tm9kZQEBXgAALgBEXgAAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUBAV8A" + + "AC4ARF8AAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQFgAAAuAERgAAAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEBYQAALgBEYQAAAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEBYwAALgBEYwAAAAAV/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAFNldmVyaXR5AQFkAAAuAERkAAAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAPAAAA" + + "QWN0aW9uVGltZVN0YW1wAQFlAAAuAERlAAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABT" + + "dGF0dXMBAWYAAC4ARGYAAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXJ2ZXJJZAEBZwAA" + + "LgBEZwAAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1ZGl0RW50cnlJZAEBaAAA" + + "LgBEaAAAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEBaQAALgBEaQAA" + + "AAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElkAQFqAAAuAERqAAAAABH/////AQH/" + + "////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAWsAAC4ARGsAAAAAGAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAVYIkKAgAAAAEAEAAAAENlcnRpZmljYXRlR3JvdXABAc0CAC4ARM0CAAAAEf////8B" + + "Af////8AAAAAFWCJCgIAAAABAA8AAABDZXJ0aWZpY2F0ZVR5cGUBAc4CAC4ARM4CAAAAEf////8BAf//" + + "//8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState CertificateGroup + { + get + { + return m_certificateGroup; + } + + set + { + if (!Object.ReferenceEquals(m_certificateGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateGroup = value; + } + } + + /// + public PropertyState CertificateType + { + get + { + return m_certificateType; + } + + set + { + if (!Object.ReferenceEquals(m_certificateType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateType = 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_certificateGroup != null) + { + children.Add(m_certificateGroup); + } + + if (m_certificateType != null) + { + children.Add(m_certificateType); + } + + 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 Opc.Ua.Gds.BrowseNames.CertificateGroup: + { + if (createOrReplace) + { + if (CertificateGroup == null) + { + if (replacement == null) + { + CertificateGroup = new PropertyState(this); + } + else + { + CertificateGroup = (PropertyState)replacement; + } + } + } + + instance = CertificateGroup; + break; + } + + case Opc.Ua.Gds.BrowseNames.CertificateType: + { + if (createOrReplace) + { + if (CertificateType == null) + { + if (replacement == null) + { + CertificateType = new PropertyState(this); + } + else + { + CertificateType = (PropertyState)replacement; + } + } + } + + instance = CertificateType; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_certificateGroup; + private PropertyState m_certificateType; + #endregion + } + #endif + #endregion + + #region CertificateDeliveredAuditEventState Class + #if (!OPCUA_EXCLUDE_CertificateDeliveredAuditEventState) + /// + /// Stores an instance of the CertificateDeliveredAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateDeliveredAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateDeliveredAuditEventState(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(Opc.Ua.Gds.ObjectTypes.CertificateDeliveredAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAKgAAAENl" + + "cnRpZmljYXRlRGVsaXZlcmVkQXVkaXRFdmVudFR5cGVJbnN0YW5jZQEBbQABAW0AbQAAAP////8RAAAA" + + "FWCJCgIAAAAAAAcAAABFdmVudElkAQFuAAAuAERuAAAAAA//////AQH/////AAAAABVgiQoCAAAAAAAJ" + + "AAAARXZlbnRUeXBlAQFvAAAuAERvAAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNl" + + "Tm9kZQEBcAAALgBEcAAAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUBAXEA" + + "AC4ARHEAAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQFyAAAuAERyAAAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEBcwAALgBEcwAAAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEBdQAALgBEdQAAAAAV/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAFNldmVyaXR5AQF2AAAuAER2AAAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAPAAAA" + + "QWN0aW9uVGltZVN0YW1wAQF3AAAuAER3AAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABT" + + "dGF0dXMBAXgAAC4ARHgAAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXJ2ZXJJZAEBeQAA" + + "LgBEeQAAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1ZGl0RW50cnlJZAEBegAA" + + "LgBEegAAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEBewAALgBEewAA" + + "AAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElkAQF8AAAuAER8AAAAABH/////AQH/" + + "////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAX0AAC4ARH0AAAAAGAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAVYIkKAgAAAAEAEAAAAENlcnRpZmljYXRlR3JvdXABAc8CAC4ARM8CAAAAEf////8B" + + "Af////8AAAAAFWCJCgIAAAABAA8AAABDZXJ0aWZpY2F0ZVR5cGUBAdACAC4ARNACAAAAEf////8BAf//" + + "//8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState CertificateGroup + { + get + { + return m_certificateGroup; + } + + set + { + if (!Object.ReferenceEquals(m_certificateGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateGroup = value; + } + } + + /// + public PropertyState CertificateType + { + get + { + return m_certificateType; + } + + set + { + if (!Object.ReferenceEquals(m_certificateType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateType = 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_certificateGroup != null) + { + children.Add(m_certificateGroup); + } + + if (m_certificateType != null) + { + children.Add(m_certificateType); + } + + 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 Opc.Ua.Gds.BrowseNames.CertificateGroup: + { + if (createOrReplace) + { + if (CertificateGroup == null) + { + if (replacement == null) + { + CertificateGroup = new PropertyState(this); + } + else + { + CertificateGroup = (PropertyState)replacement; + } + } + } + + instance = CertificateGroup; + break; + } + + case Opc.Ua.Gds.BrowseNames.CertificateType: + { + if (createOrReplace) + { + if (CertificateType == null) + { + if (replacement == null) + { + CertificateType = new PropertyState(this); + } + else + { + CertificateType = (PropertyState)replacement; + } + } + } + + instance = CertificateType; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_certificateGroup; + private PropertyState m_certificateType; + #endregion + } + #endif + #endregion + + #region KeyCredentialServiceState Class + #if (!OPCUA_EXCLUDE_KeyCredentialServiceState) + /// + /// Stores an instance of the KeyCredentialServiceType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialServiceState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialServiceState(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(Opc.Ua.Gds.ObjectTypes.KeyCredentialServiceType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (Revoke != null) + { + Revoke.Initialize(context, Revoke_InitializationString); + } + } + + #region Initialization String + private const string Revoke_InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEABgAAAFJl" + + "dm9rZQEBBQQALwEBBQQFBAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAQYE" + + "AC4ARAYEAACWAQAAAAEAKgEBGwAAAAwAAABDcmVkZW50aWFsSWQADP////8AAAAAAAEAKAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAA"; + + private const string InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAIAAAAEtl" + + "eUNyZWRlbnRpYWxTZXJ2aWNlVHlwZUluc3RhbmNlAQH8AwEB/AP8AwAA/////wUAAAAVYIkKAgAAAAEA" + + "CwAAAFJlc291cmNlVXJpAQH9AwAuAET9AwAAAAz/////AQH/////AAAAABdgiQoCAAAAAQALAAAAUHJv" + + "ZmlsZVVyaXMBAf4DAC4ARP4DAAAADAEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEADAAAAFN0" + + "YXJ0UmVxdWVzdAEB/wMALwEB/wP/AwAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBAQAEAC4ARAAEAACWBAAAAAEAKgEBHQAAAA4AAABBcHBsaWNhdGlvblVyaQAM/////wAAAAAAAQAq" + + "AQEYAAAACQAAAFB1YmxpY0tleQAP/////wAAAAAAAQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJp" + + "AAz/////AAAAAAABACoBASEAAAAOAAAAUmVxdWVzdGVkUm9sZXMAEQEAAAABAAAAAAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQEBBAAuAEQBBAAA" + + "lgEAAAABACoBARgAAAAJAAAAUmVxdWVzdElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAAARhggoEAAAAAQANAAAARmluaXNoUmVxdWVzdAEBAgQALwEBAgQCBAAAAQH/////AgAAABdgqQoC" + + "AAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAQMEAC4ARAMEAACWAgAAAAEAKgEBGAAAAAkAAABSZXF1ZXN0" + + "SWQAEf////8AAAAAAAEAKgEBHAAAAA0AAABDYW5jZWxSZXF1ZXN0AAH/////AAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQEEBAAuAEQEBAAAlgUA" + + "AAABACoBARsAAAAMAAAAQ3JlZGVudGlhbElkAAz/////AAAAAAABACoBAR8AAAAQAAAAQ3JlZGVudGlh" + + "bFNlY3JldAAP/////wAAAAAAAQAqAQEkAAAAFQAAAENlcnRpZmljYXRlVGh1bWJwcmludAAM/////wAA" + + "AAAAAQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAAz/////AAAAAAABACoBAR8AAAAMAAAAR3Jh" + + "bnRlZFJvbGVzABEBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEA" + + "BgAAAFJldm9rZQEBBQQALwEBBQQFBAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBAQYEAC4ARAYEAACWAQAAAAEAKgEBGwAAAAwAAABDcmVkZW50aWFsSWQADP////8AAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = value; + } + } + + /// + public PropertyState ProfileUris + { + get + { + return m_profileUris; + } + + set + { + if (!Object.ReferenceEquals(m_profileUris, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_profileUris = value; + } + } + + /// + public KeyCredentialStartRequestMethodState StartRequest + { + get + { + return m_startRequestMethod; + } + + set + { + if (!Object.ReferenceEquals(m_startRequestMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startRequestMethod = value; + } + } + + /// + public KeyCredentialFinishRequestMethodState FinishRequest + { + get + { + return m_finishRequestMethod; + } + + set + { + if (!Object.ReferenceEquals(m_finishRequestMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_finishRequestMethod = value; + } + } + + /// + public KeyCredentialRevokeMethodState Revoke + { + get + { + return m_revokeMethod; + } + + set + { + if (!Object.ReferenceEquals(m_revokeMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_revokeMethod = 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_resourceUri != null) + { + children.Add(m_resourceUri); + } + + if (m_profileUris != null) + { + children.Add(m_profileUris); + } + + if (m_startRequestMethod != null) + { + children.Add(m_startRequestMethod); + } + + if (m_finishRequestMethod != null) + { + children.Add(m_finishRequestMethod); + } + + if (m_revokeMethod != null) + { + children.Add(m_revokeMethod); + } + + 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 Opc.Ua.Gds.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + + case Opc.Ua.Gds.BrowseNames.ProfileUris: + { + if (createOrReplace) + { + if (ProfileUris == null) + { + if (replacement == null) + { + ProfileUris = new PropertyState(this); + } + else + { + ProfileUris = (PropertyState)replacement; + } + } + } + + instance = ProfileUris; + break; + } + + case Opc.Ua.Gds.BrowseNames.StartRequest: + { + if (createOrReplace) + { + if (StartRequest == null) + { + if (replacement == null) + { + StartRequest = new KeyCredentialStartRequestMethodState(this); + } + else + { + StartRequest = (KeyCredentialStartRequestMethodState)replacement; + } + } + } + + instance = StartRequest; + break; + } + + case Opc.Ua.Gds.BrowseNames.FinishRequest: + { + if (createOrReplace) + { + if (FinishRequest == null) + { + if (replacement == null) + { + FinishRequest = new KeyCredentialFinishRequestMethodState(this); + } + else + { + FinishRequest = (KeyCredentialFinishRequestMethodState)replacement; + } + } + } + + instance = FinishRequest; + break; + } + + case Opc.Ua.Gds.BrowseNames.Revoke: + { + if (createOrReplace) + { + if (Revoke == null) + { + if (replacement == null) + { + Revoke = new KeyCredentialRevokeMethodState(this); + } + else + { + Revoke = (KeyCredentialRevokeMethodState)replacement; + } + } + } + + instance = Revoke; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_resourceUri; + private PropertyState m_profileUris; + private KeyCredentialStartRequestMethodState m_startRequestMethod; + private KeyCredentialFinishRequestMethodState m_finishRequestMethod; + private KeyCredentialRevokeMethodState m_revokeMethod; + #endregion + } + #endif + #endregion + + #region KeyCredentialStartRequestMethodState Class + #if (!OPCUA_EXCLUDE_KeyCredentialStartRequestMethodState) + /// + /// Stores an instance of the KeyCredentialStartRequestMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialStartRequestMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialStartRequestMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new KeyCredentialStartRequestMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAIwAAAEtl" + + "eUNyZWRlbnRpYWxTdGFydFJlcXVlc3RNZXRob2RUeXBlAQEHBAAvAQEHBAcEAAABAf////8CAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBCAQALgBECAQAAJYEAAAAAQAqAQEdAAAADgAAAEFwcGxp" + + "Y2F0aW9uVXJpAAz/////AAAAAAABACoBARgAAAAJAAAAUHVibGljS2V5AA//////AAAAAAABACoBASAA" + + "AAARAAAAU2VjdXJpdHlQb2xpY3lVcmkADP////8AAAAAAAEAKgEBIQAAAA4AAABSZXF1ZXN0ZWRSb2xl" + + "cwARAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRw" + + "dXRBcmd1bWVudHMBAQkEAC4ARAkEAACWAQAAAAEAKgEBGAAAAAkAAABSZXF1ZXN0SWQAEf////8AAAAA" + + "AAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public KeyCredentialStartRequestMethodStateMethodCallHandler 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; + + string applicationUri = (string)_inputArguments[0]; + byte[] publicKey = (byte[])_inputArguments[1]; + string securityPolicyUri = (string)_inputArguments[2]; + NodeId[] requestedRoles = (NodeId[])_inputArguments[3]; + + NodeId requestId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationUri, + publicKey, + securityPolicyUri, + requestedRoles, + ref requestId); + } + + _outputArguments[0] = requestId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult KeyCredentialStartRequestMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string applicationUri, + byte[] publicKey, + string securityPolicyUri, + NodeId[] requestedRoles, + ref NodeId requestId); + #endif + #endregion + + #region KeyCredentialFinishRequestMethodState Class + #if (!OPCUA_EXCLUDE_KeyCredentialFinishRequestMethodState) + /// + /// Stores an instance of the KeyCredentialFinishRequestMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialFinishRequestMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialFinishRequestMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new KeyCredentialFinishRequestMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAJAAAAEtl" + + "eUNyZWRlbnRpYWxGaW5pc2hSZXF1ZXN0TWV0aG9kVHlwZQEBCgQALwEBCgQKBAAAAQH/////AgAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAQsEAC4ARAsEAACWAgAAAAEAKgEBGAAAAAkAAABSZXF1" + + "ZXN0SWQAEf////8AAAAAAAEAKgEBHAAAAA0AAABDYW5jZWxSZXF1ZXN0AAH/////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQEMBAAuAEQMBAAA" + + "lgUAAAABACoBARsAAAAMAAAAQ3JlZGVudGlhbElkAAz/////AAAAAAABACoBAR8AAAAQAAAAQ3JlZGVu" + + "dGlhbFNlY3JldAAP/////wAAAAAAAQAqAQEkAAAAFQAAAENlcnRpZmljYXRlVGh1bWJwcmludAAM////" + + "/wAAAAAAAQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAAz/////AAAAAAABACoBAR8AAAAMAAAA" + + "R3JhbnRlZFJvbGVzABEBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public KeyCredentialFinishRequestMethodStateMethodCallHandler 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; + + NodeId requestId = (NodeId)_inputArguments[0]; + bool cancelRequest = (bool)_inputArguments[1]; + + string credentialId = (string)_outputArguments[0]; + byte[] credentialSecret = (byte[])_outputArguments[1]; + string certificateThumbprint = (string)_outputArguments[2]; + string securityPolicyUri = (string)_outputArguments[3]; + NodeId[] grantedRoles = (NodeId[])_outputArguments[4]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + requestId, + cancelRequest, + ref credentialId, + ref credentialSecret, + ref certificateThumbprint, + ref securityPolicyUri, + ref grantedRoles); + } + + _outputArguments[0] = credentialId; + _outputArguments[1] = credentialSecret; + _outputArguments[2] = certificateThumbprint; + _outputArguments[3] = securityPolicyUri; + _outputArguments[4] = grantedRoles; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult KeyCredentialFinishRequestMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId requestId, + bool cancelRequest, + ref string credentialId, + ref byte[] credentialSecret, + ref string certificateThumbprint, + ref string securityPolicyUri, + ref NodeId[] grantedRoles); + #endif + #endregion + + #region KeyCredentialRevokeMethodState Class + #if (!OPCUA_EXCLUDE_KeyCredentialRevokeMethodState) + /// + /// Stores an instance of the KeyCredentialRevokeMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialRevokeMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialRevokeMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new KeyCredentialRevokeMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHQAAAEtl" + + "eUNyZWRlbnRpYWxSZXZva2VNZXRob2RUeXBlAQENBAAvAQENBA0EAAABAf////8BAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEBDgQALgBEDgQAAJYBAAAAAQAqAQEbAAAADAAAAENyZWRlbnRpYWxJ" + + "ZAAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public KeyCredentialRevokeMethodStateMethodCallHandler 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; + + string credentialId = (string)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + credentialId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult KeyCredentialRevokeMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string credentialId); + #endif + #endregion + + #region KeyCredentialRequestedAuditEventState Class + #if (!OPCUA_EXCLUDE_KeyCredentialRequestedAuditEventState) + /// + /// Stores an instance of the KeyCredentialRequestedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialRequestedAuditEventState : KeyCredentialAuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialRequestedAuditEventState(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(Opc.Ua.Gds.ObjectTypes.KeyCredentialRequestedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEALAAAAEtl" + + "eUNyZWRlbnRpYWxSZXF1ZXN0ZWRBdWRpdEV2ZW50VHlwZUluc3RhbmNlAQEPBAEBDwQPBAAA/////xAA" + + "AAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBARAEAC4ARBAEAAAAD/////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAkAAABFdmVudFR5cGUBAREEAC4ARBEEAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOb2RlAQESBAAuAEQSBAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTmFtZQEB" + + "EwQALgBEEwQAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBARQEAC4ARBQEAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQEVBAAuAEQVBAAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQEXBAAuAEQXBAAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAIAAAAU2V2ZXJpdHkBARgEAC4ARBgEAAAABf////8BAf////8AAAAAFWCJCgIAAAAAAA8A" + + "AABBY3Rpb25UaW1lU3RhbXABARkEAC4ARBkEAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABgAA" + + "AFN0YXR1cwEBGgQALgBEGgQAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNlcnZlcklkAQEb" + + "BAAuAEQbBAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50QXVkaXRFbnRyeUlkAQEc" + + "BAAuAEQcBAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQEdBAAuAEQd" + + "BAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQBAR4EAC4ARB4EAAAAEf////8B" + + "Af////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBHwQALgBEHwQAAAAYAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAUmVzb3VyY2VVcmkBASAEAC4ARCAEAAAADP////8BAf//" + + "//8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region KeyCredentialDeliveredAuditEventState Class + #if (!OPCUA_EXCLUDE_KeyCredentialDeliveredAuditEventState) + /// + /// Stores an instance of the KeyCredentialDeliveredAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialDeliveredAuditEventState : KeyCredentialAuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialDeliveredAuditEventState(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(Opc.Ua.Gds.ObjectTypes.KeyCredentialDeliveredAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEALAAAAEtl" + + "eUNyZWRlbnRpYWxEZWxpdmVyZWRBdWRpdEV2ZW50VHlwZUluc3RhbmNlAQEhBAEBIQQhBAAA/////xAA" + + "AAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBASIEAC4ARCIEAAAAD/////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAkAAABFdmVudFR5cGUBASMEAC4ARCMEAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOb2RlAQEkBAAuAEQkBAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTmFtZQEB" + + "JQQALgBEJQQAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBASYEAC4ARCYEAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQEnBAAuAEQnBAAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQEpBAAuAEQpBAAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAIAAAAU2V2ZXJpdHkBASoEAC4ARCoEAAAABf////8BAf////8AAAAAFWCJCgIAAAAAAA8A" + + "AABBY3Rpb25UaW1lU3RhbXABASsEAC4ARCsEAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABgAA" + + "AFN0YXR1cwEBLAQALgBELAQAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNlcnZlcklkAQEt" + + "BAAuAEQtBAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50QXVkaXRFbnRyeUlkAQEu" + + "BAAuAEQuBAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQEvBAAuAEQv" + + "BAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQBATAEAC4ARDAEAAAAEf////8B" + + "Af////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEBMQQALgBEMQQAAAAYAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAUmVzb3VyY2VVcmkBATIEAC4ARDIEAAAADP////8BAf//" + + "//8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region KeyCredentialRevokedAuditEventState Class + #if (!OPCUA_EXCLUDE_KeyCredentialRevokedAuditEventState) + /// + /// Stores an instance of the KeyCredentialRevokedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialRevokedAuditEventState : KeyCredentialAuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialRevokedAuditEventState(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(Opc.Ua.Gds.ObjectTypes.KeyCredentialRevokedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAKgAAAEtl" + + "eUNyZWRlbnRpYWxSZXZva2VkQXVkaXRFdmVudFR5cGVJbnN0YW5jZQEBMwQBATMEMwQAAP////8QAAAA" + + "FWCJCgIAAAAAAAcAAABFdmVudElkAQE0BAAuAEQ0BAAAAA//////AQH/////AAAAABVgiQoCAAAAAAAJ" + + "AAAARXZlbnRUeXBlAQE1BAAuAEQ1BAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNl" + + "Tm9kZQEBNgQALgBENgQAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUBATcE" + + "AC4ARDcEAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQE4BAAuAEQ4BAAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEBOQQALgBEOQQAAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEBOwQALgBEOwQAAAAV/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAFNldmVyaXR5AQE8BAAuAEQ8BAAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAPAAAA" + + "QWN0aW9uVGltZVN0YW1wAQE9BAAuAEQ9BAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABT" + + "dGF0dXMBAT4EAC4ARD4EAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXJ2ZXJJZAEBPwQA" + + "LgBEPwQAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1ZGl0RW50cnlJZAEBQAQA" + + "LgBEQAQAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEBQQQALgBEQQQA" + + "AAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElkAQFCBAAuAERCBAAAABH/////AQH/" + + "////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAUMEAC4AREMEAAAAGAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlc291cmNlVXJpAQFEBAAuAEREBAAAAAz/////AQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuthorizationServiceState Class + #if (!OPCUA_EXCLUDE_AuthorizationServiceState) + /// + /// Stores an instance of the AuthorizationServiceType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuthorizationServiceState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuthorizationServiceState(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(Opc.Ua.Gds.ObjectTypes.AuthorizationServiceType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (UserTokenPolicies != null) + { + UserTokenPolicies.Initialize(context, UserTokenPolicies_InitializationString); + } + + if (RequestAccessToken != null) + { + RequestAccessToken.Initialize(context, RequestAccessToken_InitializationString); + } + } + + #region Initialization String + private const string UserTokenPolicies_InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8XYIkKAgAAAAEAEQAAAFVz" + + "ZXJUb2tlblBvbGljaWVzAQHHAwAuAETHAwAAAQAwAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string RequestAccessToken_InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAEgAAAFJl" + + "cXVlc3RBY2Nlc3NUb2tlbgEByQMALwEByQPJAwAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRB" + + "cmd1bWVudHMBAcoDAC4ARMoDAACWAgAAAAEAKgEBHgAAAA0AAABJZGVudGl0eVRva2VuAQA8Af////8A" + + "AAAAAAEAKgEBGQAAAAoAAABSZXNvdXJjZUlkAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQHLAwAuAETLAwAAlgEAAAABACoBARoAAAAL" + + "AAAAQWNjZXNzVG9rZW4ADP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string InitializationString = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAIAAAAEF1" + + "dGhvcml6YXRpb25TZXJ2aWNlVHlwZUluc3RhbmNlAQHGAwEBxgPGAwAA/////wUAAAAVYIkKAgAAAAEA" + + "CgAAAFNlcnZpY2VVcmkBAesDAC4AROsDAAAADP////8BAf////8AAAAAFWCJCgIAAAABABIAAABTZXJ2" + + "aWNlQ2VydGlmaWNhdGUBAcgDAC4ARMgDAAAAD/////8BAf////8AAAAAF2CJCgIAAAABABEAAABVc2Vy" + + "VG9rZW5Qb2xpY2llcwEBxwMALgBExwMAAAEAMAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAB" + + "ABUAAABHZXRTZXJ2aWNlRGVzY3JpcHRpb24BAewDAC8BAewD7AMAAAEB/////wEAAAAXYKkKAgAAAAAA" + + "DwAAAE91dHB1dEFyZ3VtZW50cwEB7QMALgBE7QMAAJYDAAAAAQAqAQEZAAAACgAAAFNlcnZpY2VVcmkA" + + "DP////8AAAAAAAEAKgEBIQAAABIAAABTZXJ2aWNlQ2VydGlmaWNhdGUAD/////8AAAAAAAEAKgEBJgAA" + + "ABEAAABVc2VyVG9rZW5Qb2xpY2llcwEAMAEBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAEYYIKBAAAAAEAEgAAAFJlcXVlc3RBY2Nlc3NUb2tlbgEByQMALwEByQPJAwAAAQH/////AgAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAcoDAC4ARMoDAACWAgAAAAEAKgEBHgAAAA0AAABJ" + + "ZGVudGl0eVRva2VuAQA8Af////8AAAAAAAEAKgEBGQAAAAoAAABSZXNvdXJjZUlkAAz/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQHLAwAu" + + "AETLAwAAlgEAAAABACoBARoAAAALAAAAQWNjZXNzVG9rZW4ADP////8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ServiceUri + { + get + { + return m_serviceUri; + } + + set + { + if (!Object.ReferenceEquals(m_serviceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serviceUri = value; + } + } + + /// + public PropertyState ServiceCertificate + { + get + { + return m_serviceCertificate; + } + + set + { + if (!Object.ReferenceEquals(m_serviceCertificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serviceCertificate = value; + } + } + + /// + public PropertyState UserTokenPolicies + { + get + { + return m_userTokenPolicies; + } + + set + { + if (!Object.ReferenceEquals(m_userTokenPolicies, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_userTokenPolicies = value; + } + } + + /// + public GetServiceDescriptionMethodState GetServiceDescription + { + get + { + return m_getServiceDescriptionMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getServiceDescriptionMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getServiceDescriptionMethod = value; + } + } + + /// + public RequestAccessTokenMethodState RequestAccessToken + { + get + { + return m_requestAccessTokenMethod; + } + + set + { + if (!Object.ReferenceEquals(m_requestAccessTokenMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestAccessTokenMethod = 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_serviceUri != null) + { + children.Add(m_serviceUri); + } + + if (m_serviceCertificate != null) + { + children.Add(m_serviceCertificate); + } + + if (m_userTokenPolicies != null) + { + children.Add(m_userTokenPolicies); + } + + if (m_getServiceDescriptionMethod != null) + { + children.Add(m_getServiceDescriptionMethod); + } + + if (m_requestAccessTokenMethod != null) + { + children.Add(m_requestAccessTokenMethod); + } + + 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 Opc.Ua.Gds.BrowseNames.ServiceUri: + { + if (createOrReplace) + { + if (ServiceUri == null) + { + if (replacement == null) + { + ServiceUri = new PropertyState(this); + } + else + { + ServiceUri = (PropertyState)replacement; + } + } + } + + instance = ServiceUri; + break; + } + + case Opc.Ua.Gds.BrowseNames.ServiceCertificate: + { + if (createOrReplace) + { + if (ServiceCertificate == null) + { + if (replacement == null) + { + ServiceCertificate = new PropertyState(this); + } + else + { + ServiceCertificate = (PropertyState)replacement; + } + } + } + + instance = ServiceCertificate; + break; + } + + case Opc.Ua.Gds.BrowseNames.UserTokenPolicies: + { + if (createOrReplace) + { + if (UserTokenPolicies == null) + { + if (replacement == null) + { + UserTokenPolicies = new PropertyState(this); + } + else + { + UserTokenPolicies = (PropertyState)replacement; + } + } + } + + instance = UserTokenPolicies; + break; + } + + case Opc.Ua.Gds.BrowseNames.GetServiceDescription: + { + if (createOrReplace) + { + if (GetServiceDescription == null) + { + if (replacement == null) + { + GetServiceDescription = new GetServiceDescriptionMethodState(this); + } + else + { + GetServiceDescription = (GetServiceDescriptionMethodState)replacement; + } + } + } + + instance = GetServiceDescription; + break; + } + + case Opc.Ua.Gds.BrowseNames.RequestAccessToken: + { + if (createOrReplace) + { + if (RequestAccessToken == null) + { + if (replacement == null) + { + RequestAccessToken = new RequestAccessTokenMethodState(this); + } + else + { + RequestAccessToken = (RequestAccessTokenMethodState)replacement; + } + } + } + + instance = RequestAccessToken; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_serviceUri; + private PropertyState m_serviceCertificate; + private PropertyState m_userTokenPolicies; + private GetServiceDescriptionMethodState m_getServiceDescriptionMethod; + private RequestAccessTokenMethodState m_requestAccessTokenMethod; + #endregion + } + #endif + #endregion + + #region GetServiceDescriptionMethodState Class + #if (!OPCUA_EXCLUDE_GetServiceDescriptionMethodState) + /// + /// Stores an instance of the GetServiceDescriptionMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetServiceDescriptionMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetServiceDescriptionMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetServiceDescriptionMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHwAAAEdl" + + "dFNlcnZpY2VEZXNjcmlwdGlvbk1ldGhvZFR5cGUBAe4DAC8BAe4D7gMAAAEB/////wEAAAAXYKkKAgAA" + + "AAAADwAAAE91dHB1dEFyZ3VtZW50cwEB7wMALgBE7wMAAJYDAAAAAQAqAQEZAAAACgAAAFNlcnZpY2VV" + + "cmkADP////8AAAAAAAEAKgEBIQAAABIAAABTZXJ2aWNlQ2VydGlmaWNhdGUAD/////8AAAAAAAEAKgEB" + + "JgAAABEAAABVc2VyVG9rZW5Qb2xpY2llcwEAMAEBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetServiceDescriptionMethodStateMethodCallHandler 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; + + string serviceUri = (string)_outputArguments[0]; + byte[] serviceCertificate = (byte[])_outputArguments[1]; + UserTokenPolicy[] userTokenPolicies = (UserTokenPolicy[])_outputArguments[2]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + ref serviceUri, + ref serviceCertificate, + ref userTokenPolicies); + } + + _outputArguments[0] = serviceUri; + _outputArguments[1] = serviceCertificate; + _outputArguments[2] = userTokenPolicies; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetServiceDescriptionMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ref string serviceUri, + ref byte[] serviceCertificate, + ref UserTokenPolicy[] userTokenPolicies); + #endif + #endregion + + #region RequestAccessTokenMethodState Class + #if (!OPCUA_EXCLUDE_RequestAccessTokenMethodState) + /// + /// Stores an instance of the RequestAccessTokenMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RequestAccessTokenMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RequestAccessTokenMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RequestAccessTokenMethodState(parent); + } + + #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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYYIKBAAAAAEAHAAAAFJl" + + "cXVlc3RBY2Nlc3NUb2tlbk1ldGhvZFR5cGUBAeMDAC8BAeMD4wMAAAEB/////wIAAAAXYKkKAgAAAAAA" + + "DgAAAElucHV0QXJndW1lbnRzAQHkAwAuAETkAwAAlgIAAAABACoBAR4AAAANAAAASWRlbnRpdHlUb2tl" + + "bgEAPAH/////AAAAAAABACoBARkAAAAKAAAAUmVzb3VyY2VJZAAM/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEB5QMALgBE5QMAAJYBAAAA" + + "AQAqAQEaAAAACwAAAEFjY2Vzc1Rva2VuAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAA" + + "AA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RequestAccessTokenMethodStateMethodCallHandler 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; + + UserIdentityToken identityToken = (UserIdentityToken)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + string resourceId = (string)_inputArguments[1]; + + string accessToken = (string)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + identityToken, + resourceId, + ref accessToken); + } + + _outputArguments[0] = accessToken; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RequestAccessTokenMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + UserIdentityToken identityToken, + string resourceId, + ref string accessToken); + #endif + #endregion + + #region AccessTokenIssuedAuditEventState Class + #if (!OPCUA_EXCLUDE_AccessTokenIssuedAuditEventState) + /// + /// Stores an instance of the AccessTokenIssuedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AccessTokenIssuedAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AccessTokenIssuedAuditEventState(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(Opc.Ua.Gds.ObjectTypes.AccessTokenIssuedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "AQAAACAAAABodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTL/////8EYIACAQAAAAEAJwAAAEFj" + + "Y2Vzc1Rva2VuSXNzdWVkQXVkaXRFdmVudFR5cGVJbnN0YW5jZQEBzwMBAc8DzwMAAP////8PAAAAFWCJ" + + "CgIAAAAAAAcAAABFdmVudElkAQHQAwAuAETQAwAAAA//////AQH/////AAAAABVgiQoCAAAAAAAJAAAA" + + "RXZlbnRUeXBlAQHRAwAuAETRAwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9k" + + "ZQEB0gMALgBE0gMAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUBAdMDAC4A" + + "RNMDAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQHUAwAuAETUAwAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEB1QMALgBE1QMAAAEAJgH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEB1wMALgBE1wMAAAAV/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNldmVyaXR5AQHYAwAuAETYAwAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0" + + "aW9uVGltZVN0YW1wAQHZAwAuAETZAwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0" + + "dXMBAdoDAC4ARNoDAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXJ2ZXJJZAEB2wMALgBE" + + "2wMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1ZGl0RW50cnlJZAEB3AMALgBE" + + "3AMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEB3QMALgBE3QMAAAAM" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElkAQHeAwAuAETeAwAAABH/////AQH/////" + + "AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAd8DAC4ARN8DAAAAGAEAAAABAAAAAAAAAAEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.PredefinedNodes.uanodes b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.PredefinedNodes.uanodes new file mode 100644 index 00000000..1db5f77c Binary files /dev/null and b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.PredefinedNodes.uanodes differ diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.PredefinedNodes.xml b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.PredefinedNodes.xml new file mode 100644 index 00000000..42a82631 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Model/Opc.Ua.Gds.PredefinedNodes.xml @@ -0,0 +1,10036 @@ + + + + + + http://opcfoundation.org/UA/GDS/ + + + Object_1 + + ns=1;i=721 + + + 1 + http://opcfoundation.org/UA/GDS/ + + + i=47 + + + i=11616 + + 721 + + + + i=47 + + true + + i=11715 + + + + + Variable_2 + + ns=1;i=722 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + 722 + + + http://opcfoundation.org/UA/GDS/ + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=723 + + + 0 + NamespaceVersion + + + i=46 + + + i=68 + + 723 + + + 1.04.4 + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=724 + + + 0 + NamespacePublicationDate + + + i=46 + + + i=68 + + 724 + + + 2020-01-08T00:00:00Z + + + + i=13 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=725 + + + 0 + IsNamespaceSubset + + + i=46 + + + i=68 + + 725 + + + false + + + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=726 + + + 0 + StaticNodeIdTypes + + + i=46 + + + i=68 + + 726 + + + + 0 + + + + + i=256 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=727 + + + 0 + StaticNumericNodeIdRange + + + i=46 + + + i=68 + + 727 + + + + 1:65535 + + + + + i=291 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=728 + + + 0 + StaticStringNodeIdPattern + + + i=46 + + + i=68 + + 728 + + + + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=862 + + + 0 + DefaultRolePermissions + + + i=46 + + + i=68 + + 862 + + i=96 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=863 + + + 0 + DefaultUserRolePermissions + + + i=46 + + + i=68 + + 863 + + i=96 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=864 + + + 0 + DefaultAccessRestrictions + + + i=46 + + + i=68 + + 864 + + i=95 + + -1 + 1 + 1 + + + + DataType_64 + + ns=1;i=1 + + + 1 + ApplicationRecordDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ApplicationId + + i=17 + + -1 + + 0 + false + + + ApplicationUri + + i=12 + + -1 + + 0 + false + + + ApplicationType + + i=307 + + -1 + + 0 + false + + + ApplicationNames + + i=21 + + 1 + + 0 + false + + + ProductUri + + i=12 + + -1 + + 0 + false + + + DiscoveryUrls + + i=12 + + 1 + + 0 + false + + + ServerCapabilities + + i=12 + + 1 + + 0 + false + + + + + + + + ObjectType_8 + + ns=1;i=13 + + + 1 + DirectoryType + + + i=61 + + + Object_1 + + ns=1;i=14 + + + 1 + Applications + + + i=47 + + + i=61 + + + i=78 + + 14 + + + Method_4 + + ns=1;i=15 + + + 1 + FindApplications + + + i=47 + + + ns=1;i=15 + + + i=78 + + 15 + true + true + + Variable_2 + + ns=1;i=16 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=17 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17 + + + + + + i=297 + + + + Applications + + ns=1;i=1 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=18 + + + 1 + RegisterApplication + + + i=47 + + + ns=1;i=18 + + + i=78 + + 18 + true + true + + Variable_2 + + ns=1;i=19 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 19 + + + + + + i=297 + + + + Application + + ns=1;i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=20 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 20 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=188 + + + 1 + UpdateApplication + + + i=47 + + + ns=1;i=188 + + + i=78 + + 188 + true + true + + Variable_2 + + ns=1;i=189 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 189 + + + + + + i=297 + + + + Application + + ns=1;i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=21 + + + 1 + UnregisterApplication + + + i=47 + + + ns=1;i=21 + + + i=78 + + 21 + true + true + + Variable_2 + + ns=1;i=22 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 22 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=210 + + + 1 + GetApplication + + + i=47 + + + ns=1;i=210 + + + i=78 + + 210 + true + true + + Variable_2 + + ns=1;i=211 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 211 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=212 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 212 + + + + + + i=297 + + + + Application + + ns=1;i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=868 + + + 1 + QueryApplications + + + i=47 + + + ns=1;i=868 + + + i=78 + + 868 + true + true + + Variable_2 + + ns=1;i=869 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 869 + + + + + + i=297 + + + + StartingRecordId + + i=7 + + -1 + + + + + + + i=297 + + + + MaxRecordsToReturn + + i=7 + + -1 + + + + + + + i=297 + + + + ApplicationName + + i=12 + + -1 + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + ApplicationType + + i=7 + + -1 + + + + + + + i=297 + + + + ProductUri + + i=12 + + -1 + + + + + + + i=297 + + + + Capabilities + + i=12 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=870 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 870 + + + + + + i=297 + + + + LastCounterResetTime + + i=294 + + -1 + + + + + + + i=297 + + + + NextRecordId + + i=7 + + -1 + + + + + + + i=297 + + + + Applications + + i=308 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=23 + + + 1 + QueryServers + + + i=47 + + + ns=1;i=23 + + + i=78 + + 23 + true + true + + Variable_2 + + ns=1;i=24 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 24 + + + + + + i=297 + + + + StartingRecordId + + i=7 + + -1 + + + + + + + i=297 + + + + MaxRecordsToReturn + + i=7 + + -1 + + + + + + + i=297 + + + + ApplicationName + + i=12 + + -1 + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + ProductUri + + i=12 + + -1 + + + + + + + i=297 + + + + ServerCapabilities + + i=12 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=25 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 25 + + + + + + i=297 + + + + LastCounterResetTime + + i=294 + + -1 + + + + + + + i=297 + + + + Servers + + i=12189 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + ns=1;i=26 + + + 1 + ApplicationRegistrationChangedAuditEventType + + + i=2127 + + true + + + ObjectType_8 + + ns=1;i=63 + + + 1 + CertificateDirectoryType + + + ns=1;i=13 + + + Object_1 + + ns=1;i=511 + + + 1 + CertificateGroups + + + i=35 + + + i=13813 + + + i=78 + + 511 + + Object_1 + + ns=1;i=512 + + + 0 + DefaultApplicationGroup + + + i=47 + + + i=12555 + + + i=78 + + 512 + + Object_1 + + ns=1;i=513 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 513 + + Variable_2 + + ns=1;i=514 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 514 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=515 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 515 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=516 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 516 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=517 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 517 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=519 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 519 + true + true + + Variable_2 + + ns=1;i=520 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 520 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=521 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 521 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=522 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 522 + true + true + + Variable_2 + + ns=1;i=523 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 523 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=524 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 524 + true + true + + Variable_2 + + ns=1;i=525 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 525 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=526 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 526 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=527 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 527 + true + true + + Variable_2 + + ns=1;i=528 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 528 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=529 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 529 + true + true + + Variable_2 + + ns=1;i=530 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 530 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=531 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 531 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=532 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 532 + true + true + + Variable_2 + + ns=1;i=533 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 533 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + ns=1;i=534 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 534 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=535 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 535 + true + true + + Variable_2 + + ns=1;i=536 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 536 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=537 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 537 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + ns=1;i=545 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 545 + + i=17 + + 1 + 0 + 1 + 1 + + + + + Method_4 + + ns=1;i=79 + + + 1 + StartSigningRequest + + + i=47 + + + ns=1;i=79 + + + i=78 + + 79 + true + true + + Variable_2 + + ns=1;i=80 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 80 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=81 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 81 + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=76 + + + 1 + StartNewKeyPairRequest + + + i=47 + + + ns=1;i=76 + + + i=78 + + 76 + true + true + + Variable_2 + + ns=1;i=77 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 77 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + SubjectName + + i=12 + + -1 + + + + + + + i=297 + + + + DomainNames + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + PrivateKeyFormat + + i=12 + + -1 + + + + + + + i=297 + + + + PrivateKeyPassword + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=78 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 78 + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=85 + + + 1 + FinishRequest + + + i=47 + + + ns=1;i=85 + + + i=78 + + 85 + true + true + + Variable_2 + + ns=1;i=86 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 86 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=87 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 87 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + PrivateKey + + i=15 + + -1 + + + + + + + i=297 + + + + IssuerCertificates + + i=15 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=15003 + + + 1 + RevokeCertificate + + + i=47 + + + ns=1;i=15003 + + + i=80 + + 15003 + true + true + + Variable_2 + + ns=1;i=15004 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15004 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=369 + + + 1 + GetCertificateGroups + + + i=47 + + + ns=1;i=369 + + + i=78 + + 369 + true + true + + Variable_2 + + ns=1;i=370 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 370 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=371 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 371 + + + + + + i=297 + + + + CertificateGroupIds + + i=17 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=197 + + + 1 + GetTrustList + + + i=47 + + + ns=1;i=197 + + + i=78 + + 197 + true + true + + Variable_2 + + ns=1;i=198 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 198 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=199 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 199 + + + + + + i=297 + + + + TrustListId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=222 + + + 1 + GetCertificateStatus + + + i=47 + + + ns=1;i=222 + + + i=78 + + 222 + true + true + + Variable_2 + + ns=1;i=223 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 223 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=224 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 224 + + + + + + i=297 + + + + UpdateRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + ns=1;i=91 + + + 1 + CertificateRequestedAuditEventType + + + i=2127 + + true + + Variable_2 + + ns=1;i=717 + + + 1 + CertificateGroup + + + i=46 + + + i=68 + + + i=78 + + 717 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=718 + + + 1 + CertificateType + + + i=46 + + + i=68 + + + i=78 + + 718 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + ns=1;i=109 + + + 1 + CertificateDeliveredAuditEventType + + + i=2127 + + true + + Variable_2 + + ns=1;i=719 + + + 1 + CertificateGroup + + + i=46 + + + i=68 + + + i=78 + + 719 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=720 + + + 1 + CertificateType + + + i=46 + + + i=68 + + + i=78 + + 720 + + i=17 + + -1 + 1 + 1 + + + + Object_1 + + ns=1;i=1008 + + + 1 + KeyCredentialManagement + + + i=47 + + + i=61 + + 1008 + + + + i=35 + + true + + i=85 + + + + + + ObjectType_8 + + ns=1;i=1020 + + + 1 + KeyCredentialServiceType + + + i=58 + + + Variable_2 + + ns=1;i=1021 + + + 1 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 1021 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=1022 + + + 1 + ProfileUris + + + i=46 + + + i=68 + + + i=78 + + 1022 + + i=12 + + 1 + 0 + 1 + 1 + + + Method_4 + + ns=1;i=1023 + + + 1 + StartRequest + + + i=47 + + + ns=1;i=1023 + + + i=78 + + 1023 + true + true + + Variable_2 + + ns=1;i=1024 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 1024 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + PublicKey + + i=15 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + RequestedRoles + + i=17 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=1025 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 1025 + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=1026 + + + 1 + FinishRequest + + + i=47 + + + ns=1;i=1026 + + + i=78 + + 1026 + true + true + + Variable_2 + + ns=1;i=1027 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 1027 + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + i=297 + + + + CancelRequest + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=1028 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 1028 + + + + + + i=297 + + + + CredentialId + + i=12 + + -1 + + + + + + + i=297 + + + + CredentialSecret + + i=15 + + -1 + + + + + + + i=297 + + + + CertificateThumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + GrantedRoles + + i=17 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=1029 + + + 1 + Revoke + + + i=47 + + + ns=1;i=1029 + + + i=80 + + 1029 + true + true + + Variable_2 + + ns=1;i=1030 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 1030 + + + + + + i=297 + + + + CredentialId + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + ns=1;i=1039 + + + 1 + KeyCredentialRequestedAuditEventType + + + i=18011 + + + + ObjectType_8 + + ns=1;i=1057 + + + 1 + KeyCredentialDeliveredAuditEventType + + + i=18011 + + + + ObjectType_8 + + ns=1;i=1075 + + + 1 + KeyCredentialRevokedAuditEventType + + + i=18011 + + + + Object_1 + + ns=1;i=959 + + + 1 + AuthorizationServices + + + i=47 + + + i=61 + + 959 + + + + i=35 + + true + + i=85 + + + + + + ObjectType_8 + + ns=1;i=966 + + + 1 + AuthorizationServiceType + + + i=58 + + + Variable_2 + + ns=1;i=1003 + + + 1 + ServiceUri + + + i=46 + + + i=68 + + + i=78 + + 1003 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=968 + + + 1 + ServiceCertificate + + + i=46 + + + i=68 + + + i=78 + + 968 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=967 + + + 1 + UserTokenPolicies + + + i=46 + + + i=68 + + + i=80 + + 967 + + i=304 + + 1 + 0 + 1 + 1 + + + Method_4 + + ns=1;i=1004 + + + 1 + GetServiceDescription + + + i=47 + + + ns=1;i=1004 + + + i=78 + + 1004 + true + true + + Variable_2 + + ns=1;i=1005 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 1005 + + + + + + i=297 + + + + ServiceUri + + i=12 + + -1 + + + + + + + i=297 + + + + ServiceCertificate + + i=15 + + -1 + + + + + + + i=297 + + + + UserTokenPolicies + + i=304 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=969 + + + 1 + RequestAccessToken + + + i=47 + + + ns=1;i=969 + + + i=80 + + 969 + true + true + + Variable_2 + + ns=1;i=970 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 970 + + + + + + i=297 + + + + IdentityToken + + i=316 + + -1 + + + + + + + i=297 + + + + ResourceId + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=971 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 971 + + + + + + i=297 + + + + AccessToken + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + ns=1;i=975 + + + 1 + AccessTokenIssuedAuditEventType + + + i=2127 + + true + + + Object_1 + + ns=1;i=141 + + + 1 + Directory + + + i=47 + + + ns=1;i=63 + + 141 + + + + i=35 + + true + + i=85 + + + + + Object_1 + + ns=1;i=142 + + + 1 + Applications + + + i=47 + + + i=61 + + 142 + + + Method_4 + + ns=1;i=143 + + + 1 + FindApplications + + + i=47 + + + ns=1;i=15 + + 143 + true + true + + Variable_2 + + ns=1;i=144 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 144 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=145 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 145 + + + + + + i=297 + + + + Applications + + ns=1;i=1 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=146 + + + 1 + RegisterApplication + + + i=47 + + + ns=1;i=18 + + 146 + true + true + + Variable_2 + + ns=1;i=147 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 147 + + + + + + i=297 + + + + Application + + ns=1;i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=148 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 148 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=200 + + + 1 + UpdateApplication + + + i=47 + + + ns=1;i=188 + + 200 + true + true + + Variable_2 + + ns=1;i=201 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 201 + + + + + + i=297 + + + + Application + + ns=1;i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=149 + + + 1 + UnregisterApplication + + + i=47 + + + ns=1;i=21 + + 149 + true + true + + Variable_2 + + ns=1;i=150 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 150 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=216 + + + 1 + GetApplication + + + i=47 + + + ns=1;i=210 + + 216 + true + true + + Variable_2 + + ns=1;i=217 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 217 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=218 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 218 + + + + + + i=297 + + + + Application + + ns=1;i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=992 + + + 1 + QueryApplications + + + i=47 + + + ns=1;i=868 + + 992 + true + true + + Variable_2 + + ns=1;i=993 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 993 + + + + + + i=297 + + + + StartingRecordId + + i=7 + + -1 + + + + + + + i=297 + + + + MaxRecordsToReturn + + i=7 + + -1 + + + + + + + i=297 + + + + ApplicationName + + i=12 + + -1 + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + ApplicationType + + i=7 + + -1 + + + + + + + i=297 + + + + ProductUri + + i=12 + + -1 + + + + + + + i=297 + + + + Capabilities + + i=12 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=994 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 994 + + + + + + i=297 + + + + LastCounterResetTime + + i=294 + + -1 + + + + + + + i=297 + + + + NextRecordId + + i=7 + + -1 + + + + + + + i=297 + + + + Applications + + i=308 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=151 + + + 1 + QueryServers + + + i=47 + + + ns=1;i=23 + + 151 + true + true + + Variable_2 + + ns=1;i=152 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 152 + + + + + + i=297 + + + + StartingRecordId + + i=7 + + -1 + + + + + + + i=297 + + + + MaxRecordsToReturn + + i=7 + + -1 + + + + + + + i=297 + + + + ApplicationName + + i=12 + + -1 + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + ProductUri + + i=12 + + -1 + + + + + + + i=297 + + + + ServerCapabilities + + i=12 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=153 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 153 + + + + + + i=297 + + + + LastCounterResetTime + + i=294 + + -1 + + + + + + + i=297 + + + + Servers + + i=12189 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Object_1 + + ns=1;i=614 + + + 1 + CertificateGroups + + + i=47 + + + i=13813 + + 614 + + Object_1 + + ns=1;i=615 + + + 1 + DefaultApplicationGroup + + + i=47 + + + i=12555 + + 615 + + Object_1 + + ns=1;i=616 + + + 0 + TrustList + + + i=47 + + + i=12522 + + 616 + + Variable_2 + + ns=1;i=617 + + + 0 + Size + + + i=46 + + + i=68 + + 617 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=618 + + + 0 + Writable + + + i=46 + + + i=68 + + 618 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=619 + + + 0 + UserWritable + + + i=46 + + + i=68 + + 619 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=620 + + + 0 + OpenCount + + + i=46 + + + i=68 + + 620 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=622 + + + 0 + Open + + + i=47 + + + i=11580 + + 622 + true + true + + Variable_2 + + ns=1;i=623 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 623 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=624 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 624 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=625 + + + 0 + Close + + + i=47 + + + i=11583 + + 625 + true + true + + Variable_2 + + ns=1;i=626 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 626 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=627 + + + 0 + Read + + + i=47 + + + i=11585 + + 627 + true + true + + Variable_2 + + ns=1;i=628 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 628 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=629 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 629 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=630 + + + 0 + Write + + + i=47 + + + i=11588 + + 630 + true + true + + Variable_2 + + ns=1;i=631 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 631 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=632 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + 632 + true + true + + Variable_2 + + ns=1;i=633 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 633 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=634 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 634 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=635 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + 635 + true + true + + Variable_2 + + ns=1;i=636 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 636 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + ns=1;i=637 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + 637 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=638 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + 638 + true + true + + Variable_2 + + ns=1;i=639 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 639 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=640 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 640 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=641 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + 641 + true + true + + Variable_2 + + ns=1;i=642 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 642 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=643 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 643 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=644 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + 644 + true + true + + Variable_2 + + ns=1;i=645 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 645 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=646 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + 646 + true + true + + Variable_2 + + ns=1;i=647 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 647 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + ns=1;i=648 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + 648 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + ns=1;i=649 + + + 1 + DefaultHttpsGroup + + + i=47 + + + i=12555 + + 649 + + Object_1 + + ns=1;i=650 + + + 0 + TrustList + + + i=47 + + + i=12522 + + 650 + + Variable_2 + + ns=1;i=651 + + + 0 + Size + + + i=46 + + + i=68 + + 651 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=652 + + + 0 + Writable + + + i=46 + + + i=68 + + 652 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=653 + + + 0 + UserWritable + + + i=46 + + + i=68 + + 653 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=654 + + + 0 + OpenCount + + + i=46 + + + i=68 + + 654 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=656 + + + 0 + Open + + + i=47 + + + i=11580 + + 656 + true + true + + Variable_2 + + ns=1;i=657 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 657 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=658 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 658 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=659 + + + 0 + Close + + + i=47 + + + i=11583 + + 659 + true + true + + Variable_2 + + ns=1;i=660 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 660 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=661 + + + 0 + Read + + + i=47 + + + i=11585 + + 661 + true + true + + Variable_2 + + ns=1;i=662 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 662 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=663 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 663 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=664 + + + 0 + Write + + + i=47 + + + i=11588 + + 664 + true + true + + Variable_2 + + ns=1;i=665 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 665 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=666 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + 666 + true + true + + Variable_2 + + ns=1;i=667 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 667 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=668 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 668 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=669 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + 669 + true + true + + Variable_2 + + ns=1;i=670 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 670 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + ns=1;i=671 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + 671 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=672 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + 672 + true + true + + Variable_2 + + ns=1;i=673 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 673 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=674 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 674 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=675 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + 675 + true + true + + Variable_2 + + ns=1;i=676 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 676 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=677 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 677 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=678 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + 678 + true + true + + Variable_2 + + ns=1;i=679 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 679 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=680 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + 680 + true + true + + Variable_2 + + ns=1;i=681 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 681 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + ns=1;i=682 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + 682 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + ns=1;i=683 + + + 1 + DefaultUserTokenGroup + + + i=47 + + + i=12555 + + 683 + + Object_1 + + ns=1;i=684 + + + 0 + TrustList + + + i=47 + + + i=12522 + + 684 + + Variable_2 + + ns=1;i=685 + + + 0 + Size + + + i=46 + + + i=68 + + 685 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=686 + + + 0 + Writable + + + i=46 + + + i=68 + + 686 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=687 + + + 0 + UserWritable + + + i=46 + + + i=68 + + 687 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=688 + + + 0 + OpenCount + + + i=46 + + + i=68 + + 688 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=690 + + + 0 + Open + + + i=47 + + + i=11580 + + 690 + true + true + + Variable_2 + + ns=1;i=691 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 691 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=692 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 692 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=693 + + + 0 + Close + + + i=47 + + + i=11583 + + 693 + true + true + + Variable_2 + + ns=1;i=694 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 694 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=695 + + + 0 + Read + + + i=47 + + + i=11585 + + 695 + true + true + + Variable_2 + + ns=1;i=696 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 696 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=697 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 697 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=698 + + + 0 + Write + + + i=47 + + + i=11588 + + 698 + true + true + + Variable_2 + + ns=1;i=699 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 699 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=700 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + 700 + true + true + + Variable_2 + + ns=1;i=701 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 701 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=702 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 702 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=703 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + 703 + true + true + + Variable_2 + + ns=1;i=704 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 704 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + ns=1;i=705 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + 705 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + ns=1;i=706 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + 706 + true + true + + Variable_2 + + ns=1;i=707 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 707 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=708 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 708 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=709 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + 709 + true + true + + Variable_2 + + ns=1;i=710 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 710 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=711 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 711 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=712 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + 712 + true + true + + Variable_2 + + ns=1;i=713 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 713 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=714 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + 714 + true + true + + Variable_2 + + ns=1;i=715 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 715 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + ns=1;i=716 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + 716 + + i=17 + + 1 + 0 + 1 + 1 + + + + + Method_4 + + ns=1;i=157 + + + 1 + StartSigningRequest + + + i=47 + + + ns=1;i=79 + + 157 + true + true + + Variable_2 + + ns=1;i=158 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 158 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=159 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 159 + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=154 + + + 1 + StartNewKeyPairRequest + + + i=47 + + + ns=1;i=76 + + 154 + true + true + + Variable_2 + + ns=1;i=155 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 155 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + SubjectName + + i=12 + + -1 + + + + + + + i=297 + + + + DomainNames + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + PrivateKeyFormat + + i=12 + + -1 + + + + + + + i=297 + + + + PrivateKeyPassword + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=156 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 156 + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=163 + + + 1 + FinishRequest + + + i=47 + + + ns=1;i=85 + + 163 + true + true + + Variable_2 + + ns=1;i=164 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 164 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + RequestId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=165 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 165 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + PrivateKey + + i=15 + + -1 + + + + + + + i=297 + + + + IssuerCertificates + + i=15 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=508 + + + 1 + GetCertificateGroups + + + i=47 + + + ns=1;i=369 + + 508 + true + true + + Variable_2 + + ns=1;i=509 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 509 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=510 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 510 + + + + + + i=297 + + + + CertificateGroupIds + + i=17 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=204 + + + 1 + GetTrustList + + + i=47 + + + ns=1;i=197 + + 204 + true + true + + Variable_2 + + ns=1;i=205 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 205 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=206 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 206 + + + + + + i=297 + + + + TrustListId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + ns=1;i=225 + + + 1 + GetCertificateStatus + + + i=47 + + + ns=1;i=222 + + 225 + true + true + + Variable_2 + + ns=1;i=226 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 226 + + + + + + i=297 + + + + ApplicationId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + ns=1;i=227 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 227 + + + + + + i=297 + + + + UpdateRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + ns=1;i=134 + + + 0 + Default Binary + + + i=76 + + 134 + + + + i=38 + + true + + ns=1;i=1 + + + + + i=39 + + + ns=1;i=138 + + + + + + Variable_2 + + ns=1;i=135 + + + 1 + Opc.Ua.Gds + + + i=72 + + 135 + + + PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y +Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M +U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB +LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvR0RTLyINCiAgRGVm +YXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9v +cGNmb3VuZGF0aW9uLm9yZy9VQS9HRFMvIg0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0 +dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSJPcGMuVWEuQmluYXJ5U2NoZW1h +LmJzZCIvPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQXBwbGljYXRpb25SZWNvcmRE +YXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJBcHBsaWNhdGlvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQXBwbGljYXRpb25VcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQXBwbGljYXRpb25UeXBlIiBUeXBlTmFtZT0idWE6QXBwbGljYXRpb25U +eXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFwcGxpY2F0aW9uTmFtZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcHBsaWNhdGlvbk5hbWVz +IiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcHBsaWNhdGlv +bk5hbWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvZHVjdFVyaSIgVHlwZU5hbWU9Im9w +YzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlzY292ZXJ5VXJscyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVVybHMi +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkRpc2NvdmVyeVVybHMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQo8L29wYzpUeXBlRGljdGlvbmFyeT4= + + + + i=15 + + -1 + 1 + 1 + + + + i=47 + + true + + i=93 + + + + + Variable_2 + + ns=1;i=137 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + 137 + + + http://opcfoundation.org/UA/GDS/ + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=8002 + + + 0 + Deprecated + + + i=46 + + + i=68 + + 8002 + + + true + + + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=138 + + + 1 + ApplicationRecordDataType + + + i=47 + + + i=69 + + 138 + + + ApplicationRecordDataType + + + + i=12 + + -1 + 1 + 1 + + + + Object_1 + + ns=1;i=127 + + + 0 + Default XML + + + i=76 + + 127 + + + + i=38 + + true + + ns=1;i=1 + + + + + i=39 + + + ns=1;i=131 + + + + + + Variable_2 + + ns=1;i=128 + + + 1 + Opc.Ua.Gds + + + i=72 + + 128 + + + PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi +DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 +c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBL0dEUy9UeXBlcy54 +c2QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBL0dEUy9U +eXBlcy54c2QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIg0KPg0KICA8eHM6aW1w +b3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLzIwMDgvMDIvVHlwZXMu +eHNkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBcHBsaWNhdGlvblJlY29yZERhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNh +dGlvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlvblVyaSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQXBwbGljYXRpb25UeXBlIiB0eXBlPSJ1YTpBcHBsaWNhdGlvblR5cGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uTmFtZXMiIHR5cGU9InVh +Okxpc3RPZkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9kdWN0VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNj +b3ZlcnlVcmxzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJDYXBhYmlsaXRpZXMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBcHBsaWNhdGlvblJlY29yZERhdGFUeXBlIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25SZWNvcmRE +YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQXBwbGljYXRpb25S +ZWNvcmREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQXBwbGljYXRpb25SZWNvcmREYXRhVHlwZSIgdHlwZT0idG5zOkFwcGxpY2F0aW9uUmVjb3Jk +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkFwcGxpY2F0aW9uUmVjb3JkRGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZBcHBsaWNhdGlvblJlY29yZERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQo8L3hzOnNjaGVtYT4= + + + + i=15 + + -1 + 1 + 1 + + + + i=47 + + true + + i=92 + + + + + Variable_2 + + ns=1;i=130 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + 130 + + + http://opcfoundation.org/UA/GDS/Types.xsd + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=8004 + + + 0 + Deprecated + + + i=46 + + + i=68 + + 8004 + + + true + + + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + ns=1;i=131 + + + 1 + ApplicationRecordDataType + + + i=47 + + + i=69 + + 131 + + + //xs:element[@name='ApplicationRecordDataType'] + + + + i=12 + + -1 + 1 + 1 + + + + Object_1 + + ns=1;i=8001 + + + 0 + Default JSON + + + i=76 + + 8001 + + + + i=38 + + true + + ns=1;i=1 + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Opc.Ua.Gds.Server.Common.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Opc.Ua.Gds.Server.Common.csproj new file mode 100644 index 00000000..693b3dfb --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/Opc.Ua.Gds.Server.Common.csproj @@ -0,0 +1,38 @@ + + + + $(DefineConstants);NET_STANDARD + Opc.Ua.Gds.Server.Common + $(LibTargetFrameworks) + OPCFoundation.NetStandard.Opc.Ua.Gds.Server.Common + Opc.Ua.Gds.Server + 6 + $(NoWarn);CS1591 + OPC UA GDS Server Class Library + true + true + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/RoleBasedIdentity.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/RoleBasedIdentity.cs new file mode 100644 index 00000000..e8b7f03b --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Gds.Server.Common/RoleBasedIdentity.cs @@ -0,0 +1,118 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Xml; + +namespace Opc.Ua.Gds.Server +{ + /// + /// The supported roles in a GDS server. + /// + public enum GdsRole + { + /// + /// The GDS application Administrator. + /// + ApplicationAdmin, + + /// + /// The GDS application user. + /// + ApplicationUser + } + + /// + /// The role based identity for a GDS server. + /// + public class RoleBasedIdentity : IUserIdentity + { + private IUserIdentity m_identity; + private GdsRole m_role; + + /// + /// Initialize the role based identity. + /// + public RoleBasedIdentity(IUserIdentity identity, GdsRole role) + { + m_identity = identity; + m_role = role; + } + + /// + public NodeIdCollection GrantedRoleIds + { + get { return m_identity.GrantedRoleIds; } + set { m_identity.GrantedRoleIds = value; } + } + + /// + /// The role in the context of a Gds. + /// + public GdsRole Role + { + get { return m_role; } + } + + /// + public string DisplayName + { + get { return m_identity.DisplayName; } + } + + /// + public string PolicyId + { + get { return m_identity.PolicyId; } + } + + /// + public UserTokenType TokenType + { + get { return m_identity.TokenType; } + } + + /// + public XmlQualifiedName IssuedTokenType + { + get { return m_identity.IssuedTokenType; } + } + + /// + public bool SupportsSignatures + { + get { return m_identity.SupportsSignatures; } + } + + /// + public UserIdentityToken GetIdentityToken() + { + return m_identity.GetIdentityToken(); + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ConnectionEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ConnectionEventArgs.cs new file mode 100644 index 00000000..83e36616 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ConnectionEventArgs.cs @@ -0,0 +1,48 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Add/Remove events + /// + public class ConnectionEventArgs : EventArgs + { + /// + /// ConfigurationId of object + /// + public uint ConnectionId { get; set; } + /// + /// Reference to object + /// + public PubSubConnectionDataType PubSubConnectionDataType { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/DataSetReaderEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/DataSetReaderEventArgs.cs new file mode 100644 index 00000000..69ce2d19 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/DataSetReaderEventArgs.cs @@ -0,0 +1,54 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Add/Remove events + /// + public class DataSetReaderEventArgs : EventArgs + { + /// + /// ConfigurationId of parent object + /// + public uint ReaderGroupId { get; set; } + + /// + /// ConfigurationId of object + /// + public uint DataSetReaderId { get; set; } + + /// + /// Reference to object + /// + public DataSetReaderDataType DataSetReaderDataType { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/DataSetWriterEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/DataSetWriterEventArgs.cs new file mode 100644 index 00000000..da4f44c2 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/DataSetWriterEventArgs.cs @@ -0,0 +1,54 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Add/Remove events + /// + public class DataSetWriterEventArgs : EventArgs + { + /// + /// ConfigurationId of parent object + /// + public uint WriterGroupId { get; set; } + + /// + /// ConfigurationId of object + /// + public uint DataSetWriterId { get; set; } + + /// + /// Reference to object + /// + public DataSetWriterDataType DataSetWriterDataType { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ExtensionFieldEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ExtensionFieldEventArgs.cs new file mode 100644 index 00000000..9196af18 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ExtensionFieldEventArgs.cs @@ -0,0 +1,53 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for ExtensionFields Add/Remove events + /// + public class ExtensionFieldEventArgs : EventArgs + { + /// + /// Get/Set parent PublishedDataSet configuration id + /// + public uint PublishedDataSetId { get; set; } + + /// + /// Get/Set the configuration id for the ExtensionField + /// + public uint ExtensionFieldId { get; set; } + /// + /// Get/Set the ExtensionField + /// + public KeyValuePair ExtensionField { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/PubSubStateChangedEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/PubSubStateChangedEventArgs.cs new file mode 100644 index 00000000..cc9e649a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/PubSubStateChangedEventArgs.cs @@ -0,0 +1,60 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua; +using System; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Change events + /// + public class PubSubStateChangedEventArgs : EventArgs + { + /// + /// Reference to the object whose was changed + /// + public object ConfigurationObject { get; set; } + + /// + /// Configuration Id of the object whose was changed + /// + public uint ConfigurationObjectId { get; set; } + + /// + /// New + /// + public PubSubState NewState { get; set; } + + /// + /// Old + /// + public PubSubState OldState { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/PublishedDataSetEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/PublishedDataSetEventArgs.cs new file mode 100644 index 00000000..dd75efcd --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/PublishedDataSetEventArgs.cs @@ -0,0 +1,49 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Add/Remove events + /// + public class PublishedDataSetEventArgs : EventArgs + { + /// + /// ConfigurationId of object + /// + public uint PublishedDataSetId { get; set; } + + /// + /// Reference to object + /// + public PublishedDataSetDataType PublishedDataSetDataType { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ReaderGroupEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ReaderGroupEventArgs.cs new file mode 100644 index 00000000..d04b0d05 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/ReaderGroupEventArgs.cs @@ -0,0 +1,54 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Add/Remove events + /// + public class ReaderGroupEventArgs : EventArgs + { + /// + /// ConfigurationId of parent object + /// + public uint ConnectionId { get; set; } + + /// + /// ConfigurationId of object + /// + public uint ReaderGroupId { get; set; } + + /// + /// Reference to object + /// + public ReaderGroupDataType ReaderGroupDataType { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/UaPubSubConfigurationHelper.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/UaPubSubConfigurationHelper.cs new file mode 100644 index 00000000..9d7c171a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/UaPubSubConfigurationHelper.cs @@ -0,0 +1,93 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// Helper class for load/save configuration + /// + public static class UaPubSubConfigurationHelper + { + /// + /// Save a instance as XML + /// + /// + /// + public static void SaveConfiguration(PubSubConfigurationDataType pubSubConfiguration, string filePath) + { + + Stream ostrm = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite); + + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Encoding = Encoding.UTF8; + settings.Indent = true; + settings.CloseOutput = true; + + using (XmlWriter writer = XmlDictionaryWriter.Create(ostrm, settings)) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(PubSubConfigurationDataType)); + serializer.WriteObject(writer, pubSubConfiguration); + } + } + + /// + /// Load a instance from and XML File + /// + /// + public static PubSubConfigurationDataType LoadConfiguration(string filePath) + { + try + { + using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(PubSubConfigurationDataType)); + return (PubSubConfigurationDataType)serializer.ReadObject(stream); + } + } + catch (Exception e) + { + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("Configuration file could not be loaded: {0}\r\n", filePath); + buffer.AppendFormat("Error: {0}", e.Message); + + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, + e, + buffer.ToString()); + } + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/UaPubSubConfigurator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/UaPubSubConfigurator.cs new file mode 100644 index 00000000..c33d2ac9 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/UaPubSubConfigurator.cs @@ -0,0 +1,1729 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// Entity responsible to configure a PubSub Application + /// + /// It has methods for adding/removing configuration objects to a root object. + /// When the root object is modified there are various events raised to allow reaction to configuration changes. + /// Each child object from parent object has a configurationId associated to it and it can be used to alter configuration. + /// The configurationId can be obtained using the method. + /// + public class UaPubSubConfigurator + { + #region Private Fields + /// + /// Value of an uninitialized identifier. + /// + internal static uint InvalidId = 0; + + private object m_lock = new object(); + private PubSubConfigurationDataType m_pubSubConfiguration; + private Dictionary m_idsToObjects; + private Dictionary m_objectsToIds; + private Dictionary m_idsToPubSubState; + private Dictionary m_idsToParentId; + private uint m_nextId = 1; + #endregion + + #region Public Events + /// + /// Event that is triggered when a published data set is added to the configurator + /// + public event EventHandler PublishedDataSetAdded; + + /// + /// Event that is triggered when a published data set is removed from the configurator + /// + public event EventHandler PublishedDataSetRemoved; + + /// + /// Event that is triggered when an extension field is added to a published data set + /// + public event EventHandler ExtensionFieldAdded; + + /// + /// Event that is triggered when an extension field is removed from a published data set + /// + public event EventHandler ExtensionFieldRemoved; + + /// + /// Event that is triggered when a connection is added to the configurator + /// + public event EventHandler ConnectionAdded; + + /// + /// Event that is triggered when a connection is removed from the configurator + /// + public event EventHandler ConnectionRemoved; + + /// + /// Event that is triggered when a WriterGroup is added to a connection + /// + public event EventHandler WriterGroupAdded; + + /// + /// Event that is triggered when a WriterGroup is removed from a connection + /// + public event EventHandler WriterGroupRemoved; + + /// + /// Event that is triggered when a ReaderGroup is added to a connection + /// + public event EventHandler ReaderGroupAdded; + + /// + /// Event that is triggered when a ReaderGroup is removed from a connection + /// + public event EventHandler ReaderGroupRemoved; + + /// + /// Event that is triggered when a DataSetWriter is added to a WriterGroup + /// + public event EventHandler DataSetWriterAdded; + + /// + /// Event that is triggered when a DataSetWriter is removed from a WriterGroup + /// + public event EventHandler DataSetWriterRemoved; + + /// + /// Event that is triggered when a DataSetreader is added to a ReaderGroup + /// + public event EventHandler DataSetReaderAdded; + + /// + /// Event that is triggered when a DataSetreader is removed from a ReaderGroup + /// + public event EventHandler DataSetReaderRemoved; + + /// + /// Event raised when the state of a configuration object is changed + /// + public event EventHandler PubSubStateChanged; + + #endregion + + #region Constructor + /// + /// Create new instance of . + /// + public UaPubSubConfigurator() + { + m_idsToObjects = new Dictionary(); + m_objectsToIds = new Dictionary(); + m_idsToPubSubState = new Dictionary(); + m_idsToParentId = new Dictionary(); + + m_pubSubConfiguration = new PubSubConfigurationDataType(); + m_pubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection(); + m_pubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection(); + + //remember configuration id + uint id = m_nextId++; + m_objectsToIds.Add(m_pubSubConfiguration, id); + m_idsToObjects.Add(id, m_pubSubConfiguration); + m_idsToPubSubState.Add(id, GetInitialPubSubState(m_pubSubConfiguration)); + } + #endregion + + #region Properties + /// + /// Get reference to instance that maintains the configuration for this . + /// + public PubSubConfigurationDataType PubSubConfiguration { get { return m_pubSubConfiguration; } } + #endregion + + #region Public Methods - Find + + /// + /// Search a configured with the specified name and return it + /// + /// Name of the object to be found. + /// Returns null if name was not found. + /// + public PublishedDataSetDataType FindPublishedDataSetByName(string name) + { + foreach(PublishedDataSetDataType publishedDataSet in m_pubSubConfiguration.PublishedDataSets) + { + if (name == publishedDataSet.Name) + { + return publishedDataSet; + } + } + return null; + } + + + /// + /// Search objects in current configuration and return them + /// + /// Id of the object to be found. + /// Returns null if id was not found. + /// + public object FindObjectById(uint id) + { + if (m_idsToObjects.ContainsKey(id)) + { + return m_idsToObjects[id]; + } + return null; + } + + /// + /// Search id for specified configuration object. + /// + /// The object whose id is searched. + /// Returns if object was not found. + public uint FindIdForObject(object configurationObject) + { + if (m_objectsToIds.ContainsKey(configurationObject)) + { + return m_objectsToIds[configurationObject]; + } + return InvalidId; + } + + /// + /// Search for specified configuration object. + /// + /// The object whose is searched. + /// Returns if the object. + public PubSubState FindStateForObject(object configurationObject) + { + uint id = FindIdForObject(configurationObject); + if (m_idsToPubSubState.ContainsKey(id)) + { + return m_idsToPubSubState[id]; + } + return PubSubState.Error; + } + + /// + /// Search for specified configuration object. + /// + /// The id of the object which is searched. + /// Returns if the object. + public PubSubState FindStateForId(uint id) + { + if (m_idsToPubSubState.ContainsKey(id)) + { + return m_idsToPubSubState[id]; + } + return PubSubState.Error; + } + /// + /// Find the parent configuration object for a configuration object + /// + /// + /// + public object FindParentForObject(object configurationObject) + { + uint id = FindIdForObject(configurationObject); + if (id != InvalidId && m_idsToParentId.ContainsKey(id)) + { + uint parentId = m_idsToParentId[id]; + return FindObjectById(parentId); + } + return null; + } + + /// + /// Find children ids for specified object + /// + /// + /// + public List FindChildrenIdsForObject(object configurationObject) + { + uint parentId = FindIdForObject(configurationObject); + + List childrenIds = new List(); + if (parentId != InvalidId && m_idsToParentId.ContainsValue(parentId)) + { + foreach (uint key in m_idsToParentId.Keys) + { + if (m_idsToParentId[key] == parentId) + { + childrenIds.Add(key); + } + } + } + return childrenIds; + } + #endregion + + #region Public Methods - LoadConfiguration + /// + /// Load the specified configuration + /// + /// + /// flag that indicates if current configuration is overwritten + public void LoadConfiguration(string configFilePath, bool replaceExisting = true) + { + // validate input argument + if (configFilePath == null) + { + throw new ArgumentException(nameof(configFilePath)); + } + if (!File.Exists(configFilePath)) + { + throw new ArgumentException("The specified file {0} does not exist", configFilePath); + } + PubSubConfigurationDataType pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configFilePath); + + LoadConfiguration(pubSubConfiguration, replaceExisting); + } + + /// + /// Load the specified configuration + /// + /// + /// flag that indicates if current configuration is overwritten + public void LoadConfiguration(PubSubConfigurationDataType pubSubConfiguration, bool replaceExisting = true) + { + lock (m_lock) + { + if (replaceExisting) + { + //remove previous configured published data sets + if (m_pubSubConfiguration != null && m_pubSubConfiguration.PublishedDataSets.Count > 0) + { + foreach (PublishedDataSetDataType publishedDataSet in pubSubConfiguration.PublishedDataSets) + { + RemovePublishedDataSet(publishedDataSet); + } + } + + //remove previous configured connections + if (m_pubSubConfiguration != null && m_pubSubConfiguration.Connections.Count > 0) + { + foreach (var connection in m_pubSubConfiguration.Connections.ToArray()) + { + RemoveConnection(connection); + } + } + + m_pubSubConfiguration.Connections.Clear(); + m_pubSubConfiguration.PublishedDataSets.Clear(); + } + + //first load Published DataSet information + foreach (PublishedDataSetDataType publishedDataSet in pubSubConfiguration.PublishedDataSets) + { + AddPublishedDataSet(publishedDataSet); + } + + foreach (PubSubConnectionDataType pubSubConnectionDataType in pubSubConfiguration.Connections) + { + // handle empty names + if (string.IsNullOrEmpty(pubSubConnectionDataType.Name)) + { + //set default name + pubSubConnectionDataType.Name = "Connection_" + (m_nextId + 1); + } + AddConnection(pubSubConnectionDataType); + } + } + } + #endregion + + #region Public Methods - PublishedDataSet + /// + /// Add a published data set to current configuration. + /// + /// The object to be added to configuration. + /// + public StatusCode AddPublishedDataSet(PublishedDataSetDataType publishedDataSetDataType) + { + if (m_objectsToIds.ContainsKey(publishedDataSetDataType)) + { + throw new ArgumentException("This PublishedDataSetDataType instance is already added to the configuration."); + } + try + { + lock (m_lock) + { + //validate duplicate name + bool duplicateName = false; + foreach (var publishedDataSet in m_pubSubConfiguration.PublishedDataSets) + { + if (publishedDataSetDataType.Name == publishedDataSet.Name) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "Attempted to add PublishedDataSetDataType with duplicate name = {0}", publishedDataSetDataType.Name); + return StatusCodes.BadBrowseNameDuplicated; + } + + uint newPublishedDataSetId = m_nextId++; + //remember connection + m_idsToObjects.Add(newPublishedDataSetId, publishedDataSetDataType); + m_objectsToIds.Add(publishedDataSetDataType, newPublishedDataSetId); + m_pubSubConfiguration.PublishedDataSets.Add(publishedDataSetDataType); + + // raise PublishedDataSetAdded event + if (PublishedDataSetAdded != null) + { + PublishedDataSetAdded(this, + new PublishedDataSetEventArgs() { PublishedDataSetId = newPublishedDataSetId, PublishedDataSetDataType = publishedDataSetDataType }); + } + + if (publishedDataSetDataType.ExtensionFields == null) + { + publishedDataSetDataType.ExtensionFields = new KeyValuePairCollection(); + } + KeyValuePairCollection extensionFields = new KeyValuePairCollection(publishedDataSetDataType.ExtensionFields); + publishedDataSetDataType.ExtensionFields.Clear(); + foreach (KeyValuePair extensionField in extensionFields) + { + AddExtensionField(newPublishedDataSetId, extensionField); + } + return StatusCodes.Good; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.AddPublishedDataSet: Exception"); + } + //todo implement state validation + return StatusCodes.Bad; + } + + /// + /// Removes a published data set from current configuration. + /// + /// Id of the published data set to be removed. + /// + /// - if operation is successful, + /// - otherwise. + /// + public StatusCode RemovePublishedDataSet(uint publishedDataSetId) + { + lock (m_lock) + { + PublishedDataSetDataType publishedDataSetDataType = FindObjectById(publishedDataSetId) as PublishedDataSetDataType; + if (publishedDataSetDataType == null) + { + // Unexpected exception + Utils.Trace(Utils.TraceMasks.Information, "Current configuration does not contain PublishedDataSetDataType with ConfigId = {0}", publishedDataSetId); + return StatusCodes.Good; + } + return RemovePublishedDataSet(publishedDataSetDataType); + } + } + + /// + /// Removes a published data set from current configuration. + /// + /// The published data set to be removed. + /// + /// - if operation is successful, + /// - otherwise. + /// + public StatusCode RemovePublishedDataSet(PublishedDataSetDataType publishedDataSetDataType) + { + try + { + lock (m_lock) + { + uint publishedDataSetId = FindIdForObject(publishedDataSetDataType); + if (publishedDataSetDataType != null && publishedDataSetId != InvalidId) + { + /*A successful removal of the PublishedDataSetType Object removes all associated DataSetWriter Objects. + * Before the Objects are removed, their state is changed to Disabled_0*/ + + // Find all associated DataSetWriter objects + foreach(var connection in m_pubSubConfiguration.Connections) + { + foreach(var writerGroup in connection.WriterGroups) + { + foreach(var dataSetWriter in writerGroup.DataSetWriters.ToArray()) + { + if (dataSetWriter.DataSetName == publishedDataSetDataType.Name) + { + RemoveDataSetWriter(dataSetWriter); + } + } + } + } + + m_pubSubConfiguration.PublishedDataSets.Remove(publishedDataSetDataType); + + //remove all references from dictionaries + m_idsToObjects.Remove(publishedDataSetId); + m_objectsToIds.Remove(publishedDataSetDataType); + m_idsToParentId.Remove(publishedDataSetId); + m_idsToPubSubState.Remove(publishedDataSetId); + + if (PublishedDataSetRemoved != null) + { + PublishedDataSetRemoved(this, new PublishedDataSetEventArgs() + { + PublishedDataSetId = publishedDataSetId, + PublishedDataSetDataType = publishedDataSetDataType + }); + } + return StatusCodes.Good; + } + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.RemovePublishedDataSet: Exception"); + } + + return StatusCodes.BadNodeIdUnknown; + } + + /// + /// Add Extension field to the specified publishedDataset + /// + /// + /// + /// + public StatusCode AddExtensionField(uint publishedDataSetConfigId, KeyValuePair extensionField) + { + lock (m_lock) + { + PublishedDataSetDataType publishedDataSetDataType = FindObjectById(publishedDataSetConfigId) as PublishedDataSetDataType; + if (publishedDataSetDataType == null) + { + return StatusCodes.BadNodeIdInvalid; + } + if (publishedDataSetDataType.ExtensionFields == null) + { + publishedDataSetDataType.ExtensionFields = new KeyValuePairCollection(); + } + else + { + //validate duplicate name + bool duplicateName = false; + foreach (KeyValuePair element in publishedDataSetDataType.ExtensionFields) + { + if (element.Key == extensionField.Key) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "AddExtensionField - A field with the name already exists. Duplicate name = {0}", extensionField.Key); + return StatusCodes.BadNodeIdExists; + } + } + uint newextensionFieldId = m_nextId++; + //remember connection + m_idsToObjects.Add(newextensionFieldId, extensionField); + m_objectsToIds.Add(extensionField, newextensionFieldId); + publishedDataSetDataType.ExtensionFields.Add(extensionField); + + // raise ExtensionFieldAdded event + if (ExtensionFieldAdded != null) + { + ExtensionFieldAdded(this, + new ExtensionFieldEventArgs() { PublishedDataSetId = publishedDataSetConfigId, ExtensionFieldId = newextensionFieldId, ExtensionField = extensionField }); + } + + return StatusCodes.Good; + } + } + + /// + /// Removes an extension field from a published data set + /// + /// + /// + /// + public StatusCode RemoveExtensionField(uint publishedDataSetConfigId, uint extensionFieldConfigId) + { + lock (m_lock) + { + PublishedDataSetDataType publishedDataSetDataType = FindObjectById(publishedDataSetConfigId) as PublishedDataSetDataType; + KeyValuePair extensionFieldToRemove = FindObjectById(extensionFieldConfigId) as KeyValuePair; + if (publishedDataSetDataType == null || extensionFieldToRemove == null) + { + return StatusCodes.BadNodeIdInvalid; + } + if (publishedDataSetDataType.ExtensionFields == null) + { + publishedDataSetDataType.ExtensionFields = new KeyValuePairCollection(); + return StatusCodes.BadNodeIdInvalid; + } + // locate the extension field + foreach(KeyValuePair extensionField in publishedDataSetDataType.ExtensionFields.ToArray()) + { + if (extensionField.Equals(extensionFieldToRemove)) + { + publishedDataSetDataType.ExtensionFields.Remove(extensionFieldToRemove); + + // raise ExtensionFieldRemoved event + if (ExtensionFieldRemoved != null) + { + ExtensionFieldRemoved(this, + new ExtensionFieldEventArgs() { PublishedDataSetId = publishedDataSetConfigId, ExtensionFieldId = extensionFieldConfigId, ExtensionField = extensionField }); + } + return StatusCodes.Good; + } + } + } + return StatusCodes.BadNodeIdInvalid; + } + #endregion + + #region Public Methods - Connection + /// + /// Add a connection to current configuration. + /// + /// The object that configures the new connection. + /// + /// - The connection was added with success. + /// - An Object with the name already exists. + /// - There was an error adding the connection. + /// + public StatusCode AddConnection(PubSubConnectionDataType pubSubConnectionDataType) + { + if (m_objectsToIds.ContainsKey(pubSubConnectionDataType)) + { + throw new ArgumentException("This PubSubConnectionDataType instance is already added to the configuration."); + } + try + { + lock (m_lock) + { + //validate connection name + bool duplicateName = false; + foreach(var connection in m_pubSubConfiguration.Connections) + { + if (connection.Name == pubSubConnectionDataType.Name) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "Attempted to add PubSubConnectionDataType with duplicate name = {0}", pubSubConnectionDataType.Name); + return StatusCodes.BadBrowseNameDuplicated; + } + + // remember collections + WriterGroupDataTypeCollection writerGroups = new WriterGroupDataTypeCollection(pubSubConnectionDataType.WriterGroups); + pubSubConnectionDataType.WriterGroups.Clear(); + ReaderGroupDataTypeCollection readerGroups = new ReaderGroupDataTypeCollection(pubSubConnectionDataType.ReaderGroups); + pubSubConnectionDataType.ReaderGroups.Clear(); + + uint newConnectionId = m_nextId++; + //remember connection + m_idsToObjects.Add(newConnectionId, pubSubConnectionDataType); + m_objectsToIds.Add(pubSubConnectionDataType, newConnectionId); + // remember parent id + m_idsToParentId.Add(newConnectionId, FindIdForObject(m_pubSubConfiguration)); + //remember initial state + m_idsToPubSubState.Add(newConnectionId, GetInitialPubSubState(pubSubConnectionDataType)); + + m_pubSubConfiguration.Connections.Add(pubSubConnectionDataType); + + // raise ConnectionAdded event + if (ConnectionAdded != null) + { + ConnectionAdded(this, + new ConnectionEventArgs() { ConnectionId = newConnectionId, PubSubConnectionDataType = pubSubConnectionDataType }); + } + //handler reader & writer groups + foreach (WriterGroupDataType writerGroup in writerGroups) + { + // handle empty names + if (string.IsNullOrEmpty(writerGroup.Name)) + { + //set default name + writerGroup.Name = "WriterGroup_" + (m_nextId + 1); + } + AddWriterGroup(newConnectionId, writerGroup); + } + foreach (ReaderGroupDataType readerGroup in readerGroups) + { + // handle empty names + if (string.IsNullOrEmpty(readerGroup.Name)) + { + //set default name + readerGroup.Name = "ReaderGroup_" + (m_nextId + 1); + } + AddReaderGroup(newConnectionId, readerGroup); + } + + return StatusCodes.Good; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.AddConnection: Exception"); + } + return StatusCodes.BadInvalidArgument; + } + + /// + /// Removes a connection from current configuration. + /// + /// Id of the connection to be removed. + /// + /// - The Connection was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the Connection. + /// + public StatusCode RemoveConnection(uint connectionId) + { + lock (m_lock) + { + PubSubConnectionDataType pubSubConnectionDataType = FindObjectById(connectionId) as PubSubConnectionDataType; + if (pubSubConnectionDataType == null) + { + // Unexpected exception + Utils.Trace(Utils.TraceMasks.Information, "Current configuration does not contain PubSubConnectionDataType with ConfigId = {0}", connectionId); + return StatusCodes.BadNodeIdUnknown; + } + return RemoveConnection(pubSubConnectionDataType); + } + } + + /// + /// Removes a connection from current configuration. + /// + /// The connection to be removed. + /// + /// - The Connection was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the Connection. + /// + public StatusCode RemoveConnection(PubSubConnectionDataType pubSubConnectionDataType) + { + try + { + lock (m_lock) + { + uint connectionId = FindIdForObject(pubSubConnectionDataType); + if (pubSubConnectionDataType != null && connectionId != InvalidId) + { + // remove children + WriterGroupDataTypeCollection writerGroups = new WriterGroupDataTypeCollection(pubSubConnectionDataType.WriterGroups); + foreach (var writerGroup in writerGroups) + { + RemoveWriterGroup(writerGroup); + } + ReaderGroupDataTypeCollection readerGroups = new ReaderGroupDataTypeCollection(pubSubConnectionDataType.ReaderGroups); + foreach (var readerGroup in readerGroups) + { + RemoveReaderGroup(readerGroup); + } + m_pubSubConfiguration.Connections.Remove(pubSubConnectionDataType); + + //remove all references from dictionaries + m_idsToObjects.Remove(connectionId); + m_objectsToIds.Remove(pubSubConnectionDataType); + m_idsToParentId.Remove(connectionId); + m_idsToPubSubState.Remove(connectionId); + + if (ConnectionRemoved != null) + { + ConnectionRemoved(this, new ConnectionEventArgs() + { + ConnectionId = connectionId, + PubSubConnectionDataType = pubSubConnectionDataType + }); + } + return StatusCodes.Good; + } + return StatusCodes.BadNodeIdUnknown; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.RemoveConnection: Exception"); + } + + return StatusCodes.BadInvalidArgument; + } + #endregion + + #region Public Methods - WriterGroup + /// + /// Adds a writerGroup to the specified connection + /// + /// + /// + /// + /// - The WriterGroup was added with success. + /// - An Object with the name already exists. + /// - There was an error adding the WriterGroup. + /// + public StatusCode AddWriterGroup(uint parentConnectionId, WriterGroupDataType writerGroupDataType) + { + if (m_objectsToIds.ContainsKey(writerGroupDataType)) + { + throw new ArgumentException("This WriterGroupDataType instance is already added to the configuration."); + } + if (!m_idsToObjects.ContainsKey(parentConnectionId)) + { + throw new ArgumentException(String.Format("There is no connection with configurationId = {0} in current configuration.", parentConnectionId)); + } + try + { + lock (m_lock) + { + // remember collections + DataSetWriterDataTypeCollection dataSetWriters = new DataSetWriterDataTypeCollection(writerGroupDataType.DataSetWriters); + writerGroupDataType.DataSetWriters.Clear(); + PubSubConnectionDataType parentConnection = m_idsToObjects[parentConnectionId] as PubSubConnectionDataType; + if (parentConnection != null) + { + //validate duplicate name + bool duplicateName = false; + foreach (var writerGroup in parentConnection.WriterGroups) + { + if (writerGroup.Name == writerGroupDataType.Name) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "Attempted to add WriterGroupDataType with duplicate name = {0}", writerGroupDataType.Name); + return StatusCodes.BadBrowseNameDuplicated; + } + + uint newWriterGroupId = m_nextId++; + //remember writer group + m_idsToObjects.Add(newWriterGroupId, writerGroupDataType); + m_objectsToIds.Add(writerGroupDataType, newWriterGroupId); + parentConnection.WriterGroups.Add(writerGroupDataType); + + // remember parent id + m_idsToParentId.Add(newWriterGroupId, parentConnectionId); + //remember initial state + m_idsToPubSubState.Add(newWriterGroupId, GetInitialPubSubState(writerGroupDataType)); + + // raise WriterGroupAdded event + if (WriterGroupAdded != null) + { + WriterGroupAdded(this, + new WriterGroupEventArgs() { ConnectionId = parentConnectionId, WriterGroupId = newWriterGroupId, WriterGroupDataType = writerGroupDataType }); + } + + //handler datasetWriters + foreach (DataSetWriterDataType datasetWriter in dataSetWriters) + { + // handle empty names + if (string.IsNullOrEmpty(datasetWriter.Name)) + { + //set default name + datasetWriter.Name = "DataSetWriter_" + (m_nextId + 1); + } + AddDataSetWriter(newWriterGroupId, datasetWriter); + } + + return StatusCodes.Good; + } + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.AddWriterGroup: Exception"); + } + return StatusCodes.BadInvalidArgument; + } + + /// + /// Removes a WriterGroupDataType instance from current configuration specified by confgiId + /// + /// + /// + /// - The WriterGroup was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the WriterGroup. + /// + public StatusCode RemoveWriterGroup(uint writerGroupId) + { + lock (m_lock) + { + WriterGroupDataType writerGroupDataType = FindObjectById(writerGroupId) as WriterGroupDataType; + if (writerGroupDataType == null) + { + // Unexpected exception + Utils.Trace(Utils.TraceMasks.Information, "Current configuration does not contain WriterGroupDataType with ConfigId = {0}", writerGroupId); + return StatusCodes.BadNodeIdUnknown; + } + return RemoveWriterGroup(writerGroupDataType); + } + } + + /// + /// Removes a WriterGroupDataType instance from current configuration + /// + /// Instance to remove + /// + /// - The WriterGroup was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the WriterGroup. + /// + public StatusCode RemoveWriterGroup(WriterGroupDataType writerGroupDataType) + { + try + { + lock (m_lock) + { + uint writerGroupId = FindIdForObject(writerGroupDataType); + if (writerGroupDataType != null && writerGroupId != InvalidId) + { + // remove children + DataSetWriterDataTypeCollection dataSetWriters = new DataSetWriterDataTypeCollection(writerGroupDataType.DataSetWriters); + foreach (var dataSetWriter in dataSetWriters) + { + RemoveDataSetWriter(dataSetWriter); + } + // find parent connection + PubSubConnectionDataType parentConnection = FindParentForObject(writerGroupDataType) as PubSubConnectionDataType; + uint parentConnectionId = FindIdForObject(parentConnection); + if (parentConnection != null && parentConnectionId != InvalidId) + { + parentConnection.WriterGroups.Remove(writerGroupDataType); + + //remove all references from dictionaries + m_idsToObjects.Remove(writerGroupId); + m_objectsToIds.Remove(writerGroupDataType); + m_idsToParentId.Remove(writerGroupId); + m_idsToPubSubState.Remove(writerGroupId); + + if (WriterGroupRemoved != null) + { + WriterGroupRemoved(this, new WriterGroupEventArgs() + { + WriterGroupId = writerGroupId, + WriterGroupDataType = writerGroupDataType, + ConnectionId = parentConnectionId + }); + } + return StatusCodes.Good; + } + } + + return StatusCodes.BadNodeIdUnknown; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.RemoveWriterGroup: Exception"); + } + + return StatusCodes.BadInvalidArgument; + } + #endregion + + #region Public Methods - DataSetWriter + /// + /// Adds a DataSetWriter to the specified writer group + /// + /// + /// + /// + /// - The DataSetWriter was added with success. + /// - An Object with the name already exists. + /// - There was an error adding the DataSetWriter. + /// + public StatusCode AddDataSetWriter(uint parentWriterGroupId, DataSetWriterDataType dataSetWriterDataType) + { + if (m_objectsToIds.ContainsKey(dataSetWriterDataType)) + { + throw new ArgumentException("This DataSetWriterDataType instance is already added to the configuration."); + } + if (!m_idsToObjects.ContainsKey(parentWriterGroupId)) + { + throw new ArgumentException(String.Format("There is no WriterGroup with configurationId = {0} in current configuration.", parentWriterGroupId)); + } + try + { + lock (m_lock) + { + WriterGroupDataType parentWriterGroup = m_idsToObjects[parentWriterGroupId] as WriterGroupDataType; + if (parentWriterGroup != null) + { + //validate duplicate name + bool duplicateName = false; + foreach (var writer in parentWriterGroup.DataSetWriters) + { + if (writer.Name == dataSetWriterDataType.Name) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "Attempted to add DataSetWriterDataType with duplicate name = {0}", dataSetWriterDataType.Name); + return StatusCodes.BadBrowseNameDuplicated; + } + + uint newDataSetWriterId = m_nextId++; + //remember connection + m_idsToObjects.Add(newDataSetWriterId, dataSetWriterDataType); + m_objectsToIds.Add(dataSetWriterDataType, newDataSetWriterId); + parentWriterGroup.DataSetWriters.Add(dataSetWriterDataType); + + // remember parent id + m_idsToParentId.Add(newDataSetWriterId, parentWriterGroupId); + + //remember initial state + m_idsToPubSubState.Add(newDataSetWriterId, GetInitialPubSubState(dataSetWriterDataType)); + + // raise DataSetWriterAdded event + if (DataSetWriterAdded != null) + { + DataSetWriterAdded(this, + new DataSetWriterEventArgs() { WriterGroupId = parentWriterGroupId, DataSetWriterId = newDataSetWriterId, DataSetWriterDataType = dataSetWriterDataType }); + } + + return StatusCodes.Good; + } + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.AddDataSetWriter: Exception"); + } + return StatusCodes.BadInvalidArgument; + } + + /// + /// Removes a DataSetWriterDataType instance from current configuration specified by confgiId + /// + /// + /// + /// - The DataSetWriter was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the DataSetWriter. + /// + public StatusCode RemoveDataSetWriter(uint dataSetWriterId) + { + lock (m_lock) + { + DataSetWriterDataType dataSetWriterDataType = FindObjectById(dataSetWriterId) as DataSetWriterDataType; + if (dataSetWriterDataType == null) + { + // Unexpected exception + Utils.Trace(Utils.TraceMasks.Information, "Current configuration does not contain DataSetWriterDataType with ConfigId = {0}", dataSetWriterId); + return StatusCodes.BadNodeIdUnknown; + } + return RemoveDataSetWriter(dataSetWriterDataType); + } + } + + /// + /// Removes a DataSetWriterDataType instance from current configuration + /// + /// Instance to remove + /// + /// - The DataSetWriter was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the DataSetWriter. + /// + public StatusCode RemoveDataSetWriter(DataSetWriterDataType dataSetWriterDataType) + { + try + { + lock (m_lock) + { + uint dataSetWriterId = FindIdForObject(dataSetWriterDataType); + if (dataSetWriterDataType != null && dataSetWriterId != InvalidId) + { + // find parent writerGroup + WriterGroupDataType parentWriterGroup = FindParentForObject(dataSetWriterDataType) as WriterGroupDataType; + uint parentWriterGroupId = FindIdForObject(parentWriterGroup); + if (parentWriterGroup != null && parentWriterGroupId != InvalidId) + { + parentWriterGroup.DataSetWriters.Remove(dataSetWriterDataType); + + //remove all references from dictionaries + m_idsToObjects.Remove(dataSetWriterId); + m_objectsToIds.Remove(dataSetWriterDataType); + m_idsToParentId.Remove(dataSetWriterId); + m_idsToPubSubState.Remove(dataSetWriterId); + + if (DataSetWriterRemoved != null) + { + DataSetWriterRemoved(this, new DataSetWriterEventArgs() + { + WriterGroupId = parentWriterGroupId, + DataSetWriterDataType = dataSetWriterDataType, + DataSetWriterId = dataSetWriterId + }); + } + return StatusCodes.Good; + } + } + return StatusCodes.BadNodeIdUnknown; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.RemoveDataSetWriter: Exception"); + } + + return StatusCodes.BadInvalidArgument; + } + #endregion + + #region Public Methods - ReaderGroup + /// + /// Adds a readerGroup to the specified connection + /// + /// + /// + /// + /// - The ReaderGroup was added with success. + /// - An Object with the name already exists. + /// - There was an error adding the ReaderGroup. + /// + public StatusCode AddReaderGroup(uint parentConnectionId, ReaderGroupDataType readerGroupDataType) + { + if (m_objectsToIds.ContainsKey(readerGroupDataType)) + { + throw new ArgumentException("This ReaderGroupDataType instance is already added to the configuration."); + } + if (!m_idsToObjects.ContainsKey(parentConnectionId)) + { + throw new ArgumentException(String.Format("There is no connection with configurationId = {0} in current configuration.", parentConnectionId)); + } + try + { + lock (m_lock) + { + // remember collections + DataSetReaderDataTypeCollection dataSetReaders = new DataSetReaderDataTypeCollection(readerGroupDataType.DataSetReaders); + readerGroupDataType.DataSetReaders.Clear(); + PubSubConnectionDataType parentConnection = m_idsToObjects[parentConnectionId] as PubSubConnectionDataType; + if (parentConnection != null) + { + //validate duplicate name + bool duplicateName = false; + foreach (var readerGroup in parentConnection.ReaderGroups) + { + if (readerGroup.Name == readerGroupDataType.Name) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "Attempted to add ReaderGroupDataType with duplicate name = {0}", readerGroupDataType.Name); + return StatusCodes.BadBrowseNameDuplicated; + } + + uint newReaderGroupId = m_nextId++; + //remember reader group + m_idsToObjects.Add(newReaderGroupId, readerGroupDataType); + m_objectsToIds.Add(readerGroupDataType, newReaderGroupId); + parentConnection.ReaderGroups.Add(readerGroupDataType); + + // remember parent id + m_idsToParentId.Add(newReaderGroupId, parentConnectionId); + + //remember initial state + m_idsToPubSubState.Add(newReaderGroupId, GetInitialPubSubState(readerGroupDataType)); + + // raise ReaderGroupAdded event + if (ReaderGroupAdded != null) + { + ReaderGroupAdded(this, + new ReaderGroupEventArgs() { ConnectionId = parentConnectionId, ReaderGroupId = newReaderGroupId, ReaderGroupDataType = readerGroupDataType }); + } + + //handler datasetWriters + foreach (DataSetReaderDataType datasetReader in dataSetReaders) + { + // handle empty names + if (string.IsNullOrEmpty(datasetReader.Name)) + { + //set default name + datasetReader.Name = "DataSetReader_" + (m_nextId + 1); + } + AddDataSetReader(newReaderGroupId, datasetReader); + } + + return StatusCodes.Good; + } + + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.AddReaderGroup: Exception"); + } + return StatusCodes.BadInvalidArgument; + } + + /// + /// Removes a ReaderGroupDataType instance from current configuration specified by confgiId + /// + /// + /// + /// - The ReaderGroup was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the ReaderGroup. + /// + public StatusCode RemoveReaderGroup(uint readerGroupId) + { + lock (m_lock) + { + ReaderGroupDataType readerGroupDataType = FindObjectById(readerGroupId) as ReaderGroupDataType; + if (readerGroupDataType == null) + { + Utils.Trace(Utils.TraceMasks.Information, "Current configuration does not contain ReaderGroupDataType with ConfigId = {0}", readerGroupId); + return StatusCodes.BadInvalidArgument; + } + return RemoveReaderGroup(readerGroupDataType); + } + } + + /// + /// Removes a ReaderGroupDataType instance from current configuration + /// + /// Instance to remove + /// + /// - The ReaderGroup was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the ReaderGroup. + /// + public StatusCode RemoveReaderGroup(ReaderGroupDataType readerGroupDataType) + { + try + { + lock (m_lock) + { + uint readerGroupId = FindIdForObject(readerGroupDataType); + if (readerGroupDataType != null && readerGroupId != InvalidId) + { + // remove children + DataSetReaderDataTypeCollection dataSetReaders = new DataSetReaderDataTypeCollection(readerGroupDataType.DataSetReaders); + foreach (var dataSetReader in dataSetReaders) + { + RemoveDataSetReader(dataSetReader); + } + // find parent connection + PubSubConnectionDataType parentConnection = FindParentForObject(readerGroupDataType) as PubSubConnectionDataType; + uint parentConnectionId = FindIdForObject(parentConnection); + if (parentConnection != null && parentConnectionId != InvalidId) + { + parentConnection.ReaderGroups.Remove(readerGroupDataType); + + //remove all references from dictionaries + m_idsToObjects.Remove(readerGroupId); + m_objectsToIds.Remove(readerGroupDataType); + m_idsToParentId.Remove(readerGroupId); + m_idsToPubSubState.Remove(readerGroupId); + + if (ReaderGroupRemoved != null) + { + ReaderGroupRemoved(this, new ReaderGroupEventArgs() + { + ReaderGroupId = readerGroupId, + ReaderGroupDataType = readerGroupDataType, + ConnectionId = parentConnectionId + }); + } + return StatusCodes.Good; + } + } + + return StatusCodes.BadNodeIdUnknown; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.RemoveReaderGroup: Exception"); + } + + return StatusCodes.BadInvalidArgument; + } + #endregion + + #region Public Methods - DataSetReader + /// + /// Adds a DataSetReader to the specified reader group + /// + /// + /// + /// + /// - The DataSetReader was added with success. + /// - An Object with the name already exists. + /// - There was an error adding the DataSetReader. + /// + public StatusCode AddDataSetReader(uint parentReaderGroupId, DataSetReaderDataType dataSetReaderDataType) + { + if (m_objectsToIds.ContainsKey(dataSetReaderDataType)) + { + throw new ArgumentException("This DataSetReaderDataType instance is already added to the configuration."); + } + if (!m_idsToObjects.ContainsKey(parentReaderGroupId)) + { + throw new ArgumentException(String.Format("There is no ReaderGroup with configurationId = {0} in current configuration.", parentReaderGroupId)); + } + try + { + lock (m_lock) + { + ReaderGroupDataType parentReaderGroup = m_idsToObjects[parentReaderGroupId] as ReaderGroupDataType; + if (parentReaderGroup != null) + { + //validate duplicate name + bool duplicateName = false; + foreach (var reader in parentReaderGroup.DataSetReaders) + { + if (reader.Name == dataSetReaderDataType.Name) + { + duplicateName = true; + break; + } + } + if (duplicateName) + { + Utils.Trace(Utils.TraceMasks.Error, "Attempted to add DataSetReaderDataType with duplicate name = {0}", dataSetReaderDataType.Name); + return StatusCodes.BadBrowseNameDuplicated; + } + + uint newDataSetReaderId = m_nextId++; + //remember connection + m_idsToObjects.Add(newDataSetReaderId, dataSetReaderDataType); + m_objectsToIds.Add(dataSetReaderDataType, newDataSetReaderId); + parentReaderGroup.DataSetReaders.Add(dataSetReaderDataType); + + // remember parent id + m_idsToParentId.Add(newDataSetReaderId, parentReaderGroupId); + + //remember initial state + m_idsToPubSubState.Add(newDataSetReaderId, GetInitialPubSubState(dataSetReaderDataType)); + + // raise WriterGroupAdded event + if (DataSetReaderAdded != null) + { + DataSetReaderAdded(this, + new DataSetReaderEventArgs() { ReaderGroupId = parentReaderGroupId, DataSetReaderId = newDataSetReaderId, DataSetReaderDataType = dataSetReaderDataType }); + } + + return StatusCodes.Good; + } + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.AddDataSetReader: Exception"); + } + return StatusCodes.BadInvalidArgument; + } + + /// + /// Removes a DataSetReaderDataType instance from current configuration specified by confgiId + /// + /// + /// + /// - The DataSetWriter was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the DataSetWriter. + /// + public StatusCode RemoveDataSetReader(uint dataSetReaderId) + { + lock (m_lock) + { + DataSetReaderDataType dataSetReaderDataType = FindObjectById(dataSetReaderId) as DataSetReaderDataType; + if (dataSetReaderDataType == null) + { + // Unexpected exception + Utils.Trace(Utils.TraceMasks.Information, "Current configuration does not contain DataSetReaderDataType with ConfigId = {0}", dataSetReaderId); + return StatusCodes.BadNodeIdUnknown; + } + return RemoveDataSetReader(dataSetReaderDataType); + } + } + + /// + /// Removes a DataSetReaderDataType instance from current configuration + /// + /// Instance to remove + /// + /// - The DataSetWriter was removed with success. + /// - The GroupId is unknown. + /// - There was an error removing the DataSetWriter. + /// + public StatusCode RemoveDataSetReader(DataSetReaderDataType dataSetReaderDataType) + { + try + { + lock (m_lock) + { + uint dataSetReaderId = FindIdForObject(dataSetReaderDataType); + if (dataSetReaderDataType != null && dataSetReaderId != InvalidId) + { + // find parent readerGroup + ReaderGroupDataType parentWriterGroup = FindParentForObject(dataSetReaderDataType) as ReaderGroupDataType; + uint parenReaderGroupId = FindIdForObject(parentWriterGroup); + if (parentWriterGroup != null && parenReaderGroupId != InvalidId) + { + parentWriterGroup.DataSetReaders.Remove(dataSetReaderDataType); + + //remove all references from dictionaries + m_idsToObjects.Remove(dataSetReaderId); + m_objectsToIds.Remove(dataSetReaderDataType); + m_idsToParentId.Remove(dataSetReaderId); + m_idsToPubSubState.Remove(dataSetReaderId); + + if (DataSetReaderRemoved != null) + { + DataSetReaderRemoved(this, new DataSetReaderEventArgs() + { + ReaderGroupId = parenReaderGroupId, + DataSetReaderDataType = dataSetReaderDataType, + DataSetReaderId = dataSetReaderId + }); + } + return StatusCodes.Good; + } + } + return StatusCodes.BadNodeIdUnknown; + } + } + catch (Exception ex) + { + // Unexpected exception + Utils.Trace(ex, "UaPubSubConfigurator.RemoveDataSetReader: Exception"); + } + + return StatusCodes.BadInvalidArgument; + } + #endregion + + #region Public Methods - Enable/Disable + /// + /// Enable the specified configuration object specified by Id + /// + /// + /// + public StatusCode Enable(uint configurationId) + { + return Enable(FindObjectById(configurationId)); + } + + /// + /// Enable the specified configuration object + /// + /// + /// + public StatusCode Enable(object configurationObject) + { + if (configurationObject == null) + { + throw new ArgumentException("The parameter cannot be null.", nameof(configurationObject)); + } + if (!m_objectsToIds.ContainsKey(configurationObject)) + { + throw new ArgumentException("This {0} instance is not part of current configuration.", configurationObject.GetType().Name); + } + PubSubState currentState = FindStateForObject(configurationObject); + if (currentState != PubSubState.Disabled) + { + Utils.Trace(Utils.TraceMasks.Information, "Attempted to call Enable() on an object that is not in Disabled state"); + return StatusCodes.BadInvalidState; + } + PubSubState parentState = PubSubState.Operational; + if (configurationObject != m_pubSubConfiguration) + { + parentState = FindStateForObject(FindParentForObject(configurationObject)); + } + + if (parentState == PubSubState.Operational) + { + // Enabled and parent Operational + SetStateForObject(configurationObject, PubSubState.Operational); + } + else + { + // Enabled but parent not Operational + SetStateForObject(configurationObject, PubSubState.Paused); + } + UpdateChildrenState(configurationObject); + return StatusCodes.Good; + } + + + /// + /// Disable the specified configuration object specified by Id + /// + /// + /// + public StatusCode Disable(uint configurationId) + { + return Disable(FindObjectById(configurationId)); + } + + /// + /// Disable the specified configuration object + /// + /// + /// + public StatusCode Disable(object configurationObject) + { + if (configurationObject == null) + { + throw new ArgumentException("The parameter cannot be null.", nameof(configurationObject)); + } + if (!m_objectsToIds.ContainsKey(configurationObject)) + { + throw new ArgumentException("This {0} instance is not part of current configuration.", configurationObject.GetType().Name); + } + PubSubState currentState = FindStateForObject(configurationObject); + if (currentState == PubSubState.Disabled) + { + Utils.Trace(Utils.TraceMasks.Information, "Attempted to call Disable() on an object that is already in Disabled state"); + return StatusCodes.BadInvalidState; + } + + SetStateForObject(configurationObject, PubSubState.Disabled); + + UpdateChildrenState(configurationObject); + return StatusCodes.Good; + } + #endregion + + #region Private Methods + + /// + /// Change state for the specified configuration object + /// + /// + /// + private void SetStateForObject(object configurationObject, PubSubState newState) + { + uint id = FindIdForObject(configurationObject); + if (id != InvalidId && m_idsToPubSubState.ContainsKey(id)) + { + PubSubState oldState = m_idsToPubSubState[id]; + m_idsToPubSubState[id] = newState; + if (PubSubStateChanged != null) + { + PubSubStateChanged(this, new PubSubStateChangedEventArgs() + { + ConfigurationObject = configurationObject, + ConfigurationObjectId = id, + NewState = newState, + OldState = oldState + }); + } + bool configurationObjectEnabled = (newState == PubSubState.Operational || newState == PubSubState.Paused); + //update the Enabled flag in config object + if (configurationObject is PubSubConfigurationDataType) + { + ((PubSubConfigurationDataType)configurationObject).Enabled = configurationObjectEnabled; + } + else if (configurationObject is PubSubConnectionDataType) + { + ((PubSubConnectionDataType)configurationObject).Enabled = configurationObjectEnabled; + } + else if (configurationObject is WriterGroupDataType) + { + ((WriterGroupDataType)configurationObject).Enabled = configurationObjectEnabled; + } + else if (configurationObject is DataSetWriterDataType) + { + ((DataSetWriterDataType)configurationObject).Enabled = configurationObjectEnabled; + } + else if (configurationObject is ReaderGroupDataType) + { + ((ReaderGroupDataType)configurationObject).Enabled = configurationObjectEnabled; + } + else if (configurationObject is DataSetReaderDataType) + { + ((DataSetReaderDataType)configurationObject).Enabled = configurationObjectEnabled; + } + } + } + + /// + /// Calculate and update the state for child objects of a configuration object (StATE MACHINE) + /// + /// + private void UpdateChildrenState(object configurationObject) + { + PubSubState parentState = FindStateForObject(configurationObject); + //find child ids + var childrenIds = FindChildrenIdsForObject(configurationObject); + if (parentState == PubSubState.Operational) + { + // Enabled and parent Operational + foreach (uint childId in childrenIds) + { + PubSubState childState = FindStateForId(childId); + if (childState == PubSubState.Paused) + { + // become Operational if Parent changed to Operational + object childObject = FindObjectById(childId); + SetStateForObject(childObject, PubSubState.Operational); + + UpdateChildrenState(childObject); + } + } + } + else if (parentState == PubSubState.Disabled || parentState == PubSubState.Paused) + { + // Parent changed to Disabled or Paused + foreach (uint childId in childrenIds) + { + PubSubState childState = FindStateForId(childId); + if (childState == PubSubState.Operational || childState == PubSubState.Error) + { + // become Operational if Parent changed to Operational + object childObject = FindObjectById(childId); + SetStateForObject(childObject, PubSubState.Paused); + + UpdateChildrenState(childObject); + } + } + } + } + + /// + /// Get for an item depending on enabled flag and parent's . + /// + /// Configured Enabled flag. + /// of the parent configured object. + /// + private PubSubState GetInitialPubSubState(bool enabled, PubSubState parentPubSubState) + { + if (enabled) + { + if (parentPubSubState == PubSubState.Operational) + { + // The PubSub component is operational. + return PubSubState.Operational; + } + else + { + // The PubSub component is enabled but currently paused by a parent component. The + // parent component is either Disabled_0 or Paused_1. + return PubSubState.Paused; + } + } + else + { + // PubSub component is configured but currently disabled. + return PubSubState.Disabled; + } + } + + /// + /// Calculate and return the initial state of a pub sub data type configuration object + /// + /// + /// + private PubSubState GetInitialPubSubState(object configurationObject) + { + bool configurationObjectEnabled = false; + PubSubState parentPubSubState = PubSubState.Operational; + uint parentId = InvalidId; + + if (configurationObject is PubSubConfigurationDataType) + { + configurationObjectEnabled = ((PubSubConfigurationDataType)configurationObject).Enabled; + } + else if (configurationObject is PubSubConnectionDataType) + { + configurationObjectEnabled = ((PubSubConnectionDataType)configurationObject).Enabled; + //find parent state + parentPubSubState = FindStateForObject(m_pubSubConfiguration); + } + else if (configurationObject is WriterGroupDataType) + { + configurationObjectEnabled = ((WriterGroupDataType)configurationObject).Enabled; + //find parent connection + object parentConnection = FindParentForObject(configurationObject); + //find parent state + parentPubSubState = FindStateForObject(parentConnection); + } + else if (configurationObject is DataSetWriterDataType) + { + configurationObjectEnabled = ((DataSetWriterDataType)configurationObject).Enabled; + //find parent + object parentWriterGroup = FindParentForObject(configurationObject); + //find parent state + parentPubSubState = FindStateForObject(parentWriterGroup); + } + else if (configurationObject is ReaderGroupDataType) + { + configurationObjectEnabled = ((ReaderGroupDataType)configurationObject).Enabled; + //find parent connection + object parentConnection = FindParentForObject(configurationObject); + //find parent state + parentPubSubState = FindStateForObject(parentConnection); + } + else if (configurationObject is DataSetReaderDataType) + { + configurationObjectEnabled = ((DataSetReaderDataType)configurationObject).Enabled; + //find parent + object parentReaderGroup = FindParentForObject(configurationObject); + //find parent state + parentPubSubState = FindStateForObject(parentReaderGroup); + } + else + { + return PubSubState.Error; + } + return GetInitialPubSubState(configurationObjectEnabled, parentPubSubState); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/WriterGroupEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/WriterGroupEventArgs.cs new file mode 100644 index 00000000..989719ab --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Configuration/WriterGroupEventArgs.cs @@ -0,0 +1,54 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.Configuration +{ + /// + /// EventArgs class for Add/Remove events + /// + public class WriterGroupEventArgs : EventArgs + { + /// + /// ConfigurationId of parent object + /// + public uint ConnectionId { get; set; } + + /// + /// ConfigurationId of object + /// + public uint WriterGroupId { get; set; } + + /// + /// Reference to object + /// + public WriterGroupDataType WriterGroupDataType { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Enums.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Enums.cs new file mode 100644 index 00000000..4b583770 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Enums.cs @@ -0,0 +1,320 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub +{ + /// + /// The possible values for the FieldType encoding byte. + /// + [Flags] + internal enum FieldTypeEncodingMask : byte + { + Variant = 0, + RawData = 1, + DataValue = 2, + Reserved = 3 + } + + /// + /// The possible values for the NetworkMessage DataSetFlags1 encoding byte. + /// + [Flags] + public enum DataSetFlags1EncodingMask : byte + { + /// + /// No dataset flags usage. + /// + None = 0, + /// + /// Dataset flag set as message is valid. + /// + MessageIsValid = 1, + // Field type options (FieldTypeEncodingMask) + /// + /// Dataset flag SequenceNumber is set. + /// + SequenceNumber = 8, + /// + /// Dataset flag Status is set. + /// + Status = 16, + /// + /// Dataset flag ConfigurationVersionMajorVersion is set. + /// + ConfigurationVersionMajorVersion = 32, + /// + /// Dataset flags ConfigurationVersionMinorVersion is set. + /// + ConfigurationVersionMinorVersion = 64, + /// + /// DataSetFlags2 option is set. + /// + DataSetFlags2 = 128 + } + + /// + /// The possible values for the NetworkMessage DataSetFlags2 encoding byte. + /// + [Flags] + public enum DataSetFlags2EncodingMask : byte + { + /// + /// No dataset flag usage. + /// + None = 0, + /// + /// Dataset flag Timestamp is set. + /// + Timestamp = 16, + /// + /// Dataset flag PicoSeconds is set. + /// + PicoSeconds = 32, + /// + /// Dataset flag is reserved. + /// + Reserved = 64, + /// + /// Dataset flag is reserved for extended flags. + /// + ReservedForExtendedFlags = 128 + } + + /// + /// The possible values for the NetworkMessage UADPFlags encoding byte. + /// + [Flags] + public enum UADPFlagsEncodingMask : byte + { + /// + /// No UADP flag usage. + /// + None = 0, + /// + /// UADP PublisherId option is used. + /// + PublisherId = 16, + /// + /// UADP GroupHeader option is used. + /// + GroupHeader = 32, + /// + /// UADP PayloadHeader option is used. + /// + PayloadHeader = 64, + /// + /// UADP ExtendedFlags1 option is used. + /// + ExtendedFlags1 = 128 + } + + /// + /// The possible types of UADP network messages + /// + [Flags] + public enum UADPNetworkMessageType + { + /// + /// DataSet message + /// + DataSetMessage = 0, + /// + /// Discovery Request message + /// + DiscoveryRequest = 4, + /// + /// Discovery Response message + /// + DiscoveryResponse = 8 + } + + /// + /// The possible values for the NetworkMessage ExtendedFlags1 encoding byte. + /// + [Flags] + public enum ExtendedFlags1EncodingMask : byte + { + /// + /// No ExtendedFlags1 usage. + /// + None = 0, + // PublishedId type merge + /// + /// UADP DataSetClassId option is used. + /// + DataSetClassId = 8, + /// + /// UADP Security option is used. + /// + Security = 16, + /// + /// UADP Timestamp option is used. + /// + Timestamp = 32, + /// + /// UADP PicoSeconds option is used. + /// + PicoSeconds = 64, + /// + /// UADP ExtendedFlags2 options are used. + /// + ExtendedFlags2 = 128 + } + + /// + /// The possible values for the NetworkMessage ExtendedFlags2 encoding byte. + /// + [Flags] + public enum ExtendedFlags2EncodingMask : byte + { + /// + /// No ExtendedFlags2 usage. + /// + None = 0, + /// + /// UADP ChunkMessage type is used. + /// + ChunkMessage = 1, + /// + /// UADP PromotedFields type are used. + /// + PromotedFields = 2, + /// + /// UADP NetworkMessageWithDiscoveryRequest type is used. + /// + NetworkMessageWithDiscoveryRequest = 4, + /// + /// UADP NetworkMessageWithDiscoveryResponse type is used. + /// + NetworkMessageWithDiscoveryResponse = 8, + /// + /// UADP ExtendedFlags2 type is reserved. + /// + Reserved = 16 + } + + /// + /// The possible values for the NetworkMessage PublisherIdType encoding byte. + /// + [Flags] + internal enum PublisherIdTypeEncodingMask : byte + { + Byte = 0, + UInt16 = 1, + UInt32 = 2, + UInt64 = 3, + String = 4, + Reserved = 5 + } + + /// + /// The possible values for the NetworkMessage GroupFlags encoding byte. + /// + [Flags] + public enum GroupFlagsEncodingMask : byte + { + /// + /// No ExtendedFlags2 usage. + /// + None = 0, + /// + /// UADP GroupFlags WriterGroupId is used. + /// + WriterGroupId = 1, + /// + /// UADP GroupFlags GroupVersion is used. + /// + GroupVersion = 2, + /// + /// UADP GroupFlags NetworkMessageNumber is used. + /// + NetworkMessageNumber = 4, + /// + /// UADP GroupFlags SequenceNumber is used. + /// + SequenceNumber = 8 + } + + /// + /// The possible values for the NetworkMessage SecurityFlags encoding byte. + /// + [Flags] + public enum SecurityFlagsEncodingMask : byte + { + /// + /// No SecurityFlags usage. + /// + None = 0, + /// + /// UADP SecurityFlags NetworkMessageSigned is used. + /// + NetworkMessageSigned = 1, + /// + /// UADP SecurityFlags NetworkMessageEncrypted is used. + /// + NetworkMessageEncrypted = 2, + /// + /// UADP SecurityFlags SecurityFooter is used. + /// + SecurityFooter = 4, + /// + /// UADP SecurityFlags ForceKeyReset is used. + /// + ForceKeyReset = 8, + /// + /// UADP SecurityFlags is reserved. + /// + Reserved = 16 + } + + /// + /// Enumeration for possible transport protocols used with PubSub + /// + public enum TransportProtocol + { + /// + /// Not available. + /// + NotAvailable, + /// + /// UADP protocol. + /// + UADP, + /// + /// MQTT protocol. + /// + MQTT, + /// + /// AMQP protocol. + /// + AMQP + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPubSubConnection.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPubSubConnection.cs new file mode 100644 index 00000000..18b640b3 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPubSubConnection.cs @@ -0,0 +1,90 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub +{ + /// + /// Interface for an UaPubsubConnection + /// + public interface IUaPubSubConnection : IDisposable + { + /// + /// Get assigned transport protocol for this connection instance + /// + TransportProtocol TransportProtocol { get; } + + /// + /// Get the configuration object for this PubSub connection + /// + PubSubConnectionDataType PubSubConnectionConfiguration { get; } + + /// + /// Get reference to + /// + UaPubSubApplication Application { get; } + + /// + /// Get flag that indicates if the Connection is in running state + /// + bool IsRunning { get; } + + /// + /// Start Publish/Subscribe jobs associated with this instance + /// + void Start(); + + /// + /// Stop Publish/Subscribe jobs associated with this instance + /// + void Stop(); + + /// + /// Determine if the connection has anything to publish -> at least one WriterDataSet is configured as enabled for current writer group + /// + /// + /// + bool CanPublish(WriterGroupDataType writerGroupConfiguration); + + /// + /// Create the network message built from the provided writerGroupConfiguration + /// + /// + /// + UaNetworkMessage CreateNetworkMessage(WriterGroupDataType writerGroupConfiguration); + + /// + /// Publish the network message + /// + /// + /// + bool PublishNetworkMessage(UaNetworkMessage networkMessage); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPubSubDataStore.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPubSubDataStore.cs new file mode 100644 index 00000000..47420673 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPubSubDataStore.cs @@ -0,0 +1,54 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.PubSub +{ + /// + /// Interface for a data store component responsible to store/get data to and from Ua publisher + /// + public interface IUaPubSubDataStore + { + /// + /// Write a DataValue to the DataStore. + /// The DataValue is identified by node NodeId and Attribute. + /// + /// NodeId identifier for DataValue that will be stored + /// Default value is . + /// Default value is null. + void WritePublishedDataItem(NodeId nodeId, uint attributeId = Attributes.Value, DataValue dataValue = null); + + /// + /// Read the DataValue stored for a specific NodeId and Attribute. + /// + /// NodeId identifier of node + /// Default value is + /// + DataValue ReadPublishedDataItem(NodeId nodeId, uint attributeId = Attributes.Value); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPublisher.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPublisher.cs new file mode 100644 index 00000000..020c1b9f --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/IUaPublisher.cs @@ -0,0 +1,59 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub +{ + /// + /// Interface for UaPublisher implementation + /// + public interface IUaPublisher : IDisposable + { + /// + /// Get reference to the associated configuration object, the instance. + /// + WriterGroupDataType WriterGroupConfiguration { get; } + + /// + /// Get reference to the associated parent instance. + /// + IUaPubSubConnection PubSubConnection { get; } + + /// + /// Starts the publisher and makes it ready to send data. + /// + void Start(); + + /// + /// Stop the publishing thread. + /// + void Stop(); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/ObjectFactory.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/ObjectFactory.cs new file mode 100644 index 00000000..6f2bc831 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/ObjectFactory.cs @@ -0,0 +1,55 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.PubSub.Uadp; +using System; + +namespace Opc.Ua.PubSub +{ + /// + /// Implementation of Factory pattern - Used to create objects depending on used protocol + /// + internal static class ObjectFactory + { + /// + /// Create connections from PubSubConnectionDataType configuration objects. + /// + /// + /// + /// + public static UaPubSubConnection CreateConnection(UaPubSubApplication uaPubSubApplication, PubSubConnectionDataType pubSubConnectionDataType) + { + if (pubSubConnectionDataType.TransportProfileUri == Profiles.UadpTransport) + { + return new UadpPubSubConnection(uaPubSubApplication, pubSubConnectionDataType); + } + throw new ArgumentException("Invalid TransportProfileUri.", "pubSubConnectionDataType"); + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Opc.Ua.PubSub.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Opc.Ua.PubSub.csproj new file mode 100644 index 00000000..da3cb922 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Opc.Ua.PubSub.csproj @@ -0,0 +1,44 @@ + + + + Opc.Ua.PubSub + $(LibTargetFrameworks) + 7 + OPCFoundation.NetStandard.Opc.Ua.PubSub + Opc.Ua.PubSub + OPC UA PubSub Class Library + true + true + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a3f43b41 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Properties/AssemblyInfo.cs @@ -0,0 +1,42 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Runtime.CompilerServices; + +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.PubSub.Tests.Disabled, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.PubSub.Tests.Disabled")] +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/DataCollector.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/DataCollector.cs new file mode 100644 index 00000000..11a40fa5 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/DataCollector.cs @@ -0,0 +1,289 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub.PublishedData +{ + /// + /// Class specialized in collecting published data + /// + public class DataCollector + { + #region Private Fields + private Dictionary m_publishedDataSetsByName; + private IUaPubSubDataStore m_dataStore; + #endregion + + #region Constructor + /// + /// Create new instance of . + /// + /// Reference to the that will be used to collect data. + public DataCollector(IUaPubSubDataStore dataStore) + { + m_dataStore = dataStore; + m_publishedDataSetsByName = new Dictionary(); + } + #endregion + + #region Public Methods + /// + /// Validates a configuration object. + /// + /// The that is to be validated. + /// true if configuration is correct. + public bool ValidatePublishedDataSet(PublishedDataSetDataType publishedDataSet) + { + if (publishedDataSet == null) + { + throw new ArgumentException(nameof(publishedDataSet)); + } + if (publishedDataSet.DataSetMetaData == null) + { + Utils.Trace(Utils.TraceMasks.Error, "The DataSetMetaData field is null."); + return false; + } + PublishedDataItemsDataType publishedDataItems = ExtensionObject.ToEncodeable(publishedDataSet.DataSetSource) as PublishedDataItemsDataType; + if (publishedDataItems != null && publishedDataItems.PublishedData != null) + { + if (publishedDataItems.PublishedData.Count != publishedDataSet.DataSetMetaData.Fields.Count) + { + Utils.Trace(Utils.TraceMasks.Error, "The DataSetSource.Count is different from DataSetMetaData.Fields.Count."); + return false; + } + } + + return true; + } + /// + /// Register a publishedDataSet + /// + /// + public void AddPublishedDataSet(PublishedDataSetDataType publishedDataSet) + { + if (publishedDataSet == null) + { + throw new ArgumentException(nameof(publishedDataSet)); + } + // validate publishedDataSet + if (ValidatePublishedDataSet(publishedDataSet)) + { + m_publishedDataSetsByName[publishedDataSet.Name] = publishedDataSet; + } + else + { + Utils.Trace(Utils.TraceMasks.Error, "The PublishedDataSet {0} was not registered because it is not configured properly.", + publishedDataSet.Name); + } + } + + /// + /// Remove a registered a publishedDataSet + /// + /// + public void RemovePublishedDataSet(PublishedDataSetDataType publishedDataSet) + { + if (publishedDataSet == null) + { + throw new ArgumentException(nameof(publishedDataSet)); + } + if (m_publishedDataSetsByName.ContainsKey(publishedDataSet.Name)) + { + m_publishedDataSetsByName.Remove(publishedDataSet.Name); + } + } + + /// + /// Create and return a DataSet object created from its dataSetName + /// + /// + /// + public DataSet CollectData(string dataSetName) + { + if(dataSetName == null) + { + throw new ArgumentException(nameof(dataSetName)); + } + if (m_publishedDataSetsByName.ContainsKey(dataSetName)) + { + PublishedDataSetDataType publishedDataSet = m_publishedDataSetsByName[dataSetName]; + if (publishedDataSet.DataSetSource != null) + { + DataSet dataSet = new DataSet(dataSetName); + PublishedDataItemsDataType publishedDataItems = ExtensionObject.ToEncodeable(publishedDataSet.DataSetSource) as PublishedDataItemsDataType; + if (publishedDataItems != null && publishedDataItems.PublishedData != null && publishedDataItems.PublishedData.Count > 0) + { + dataSet.Fields = new Field[publishedDataItems.PublishedData.Count]; + for (int i = 0; i < publishedDataItems.PublishedData.Count; i++) + { + try + { + PublishedVariableDataType publishedVariable = publishedDataItems.PublishedData[i]; + dataSet.Fields[i] = new Field(); + // set FieldMetaData property + dataSet.Fields[i].FieldMetaData = publishedDataSet.DataSetMetaData.Fields[i]; + + // retrieve value from DataStore + DataValue dataValue = null; + if (publishedVariable.PublishedVariable != null) + { + //todo handle missing value in data store + dataValue = m_dataStore.ReadPublishedDataItem(publishedVariable.PublishedVariable, publishedVariable.AttributeId); + } + + if (dataValue == null) + { + //try to get the dataValue from ExtensionFields + /*If an entry of the PublishedData references one of the ExtensionFields, the substituteValue shall contain the + * QualifiedName of the ExtensionFields entry. + * All other fields of this PublishedVariableDataType array element shall be null*/ + QualifiedName extensionFieldName = publishedVariable.SubstituteValue.Value as QualifiedName; + if (extensionFieldName != null) + { + KeyValuePair extensionField = publishedDataSet.ExtensionFields.Find(x => x.Key == extensionFieldName); + if (extensionField != null) + { + dataValue = new DataValue(extensionField.Value); + } + } + if (dataValue == null) + { + dataValue = new DataValue(StatusCodes.Bad, DateTime.UtcNow); + } + } + else + { + //check StatusCode and return SubstituteValue if possible + if (dataValue.StatusCode == StatusCodes.Bad && publishedVariable.SubstituteValue != Variant.Null) + { + dataValue.Value = publishedVariable.SubstituteValue.Value; + dataValue.StatusCode = StatusCodes.UncertainSubstituteValue; + } + } + dataValue.ServerTimestamp = DateTime.UtcNow; + + #region FieldMetaData -> MaxStringLength size validation + + + Field field = dataSet.Fields[i]; + Variant variant = dataValue.WrappedValue; + + + bool shouldBringToConstraints(uint givenStrlen) + { + if (field.FieldMetaData.MaxStringLength > 0 && + givenStrlen > field.FieldMetaData.MaxStringLength) + { + return true; + } + + return false; + } + + switch ((BuiltInType)field.FieldMetaData.BuiltInType) + { + + case BuiltInType.String: + if (field.FieldMetaData.ValueRank == ValueRanks.Scalar) + { + string strFieldValue = (string)variant.Value; + if (shouldBringToConstraints((uint)strFieldValue.Length)) + { + variant.Value = strFieldValue.Substring(0, (int)field.FieldMetaData.MaxStringLength); + dataValue.Value = variant; + } + } + else if (field.FieldMetaData.ValueRank == ValueRanks.OneDimension) + { + string[] valueArray = (string[])variant.Value; + for (int idx = 0; idx < valueArray.Length; idx++) + { + if (shouldBringToConstraints((uint)valueArray[idx].Length)) + { + valueArray[idx] = valueArray[idx].Substring(0, (int)field.FieldMetaData.MaxStringLength); + } + } + dataValue.Value = valueArray; + } + break; + case BuiltInType.ByteString: + if (field.FieldMetaData.ValueRank == ValueRanks.Scalar) + { + byte[] byteStringFieldValue = (byte[])variant.Value; + if (shouldBringToConstraints((uint)byteStringFieldValue.Length)) + { + byte[] byteArray = (byte[])byteStringFieldValue.Clone(); + Array.Resize(ref byteArray, (int)field.FieldMetaData.MaxStringLength); + variant.Value = byteArray; + dataValue.Value = variant; + } + } + else if (field.FieldMetaData.ValueRank == ValueRanks.OneDimension) + { + byte[][] valueArray = (byte[][])variant.Value; + for (int idx = 0; idx < valueArray.Length; idx++) + { + if (shouldBringToConstraints((uint)valueArray[idx].Length)) + { + byte[] byteArray = (byte[])valueArray[idx].Clone(); + Array.Resize(ref byteArray, (int)field.FieldMetaData.MaxStringLength); + valueArray[idx] = byteArray; + } + } + dataValue.Value = valueArray; + + } + break; + default: + break; + } + + #endregion + + dataSet.Fields[i].Value = dataValue; + } + catch(Exception ex) + { + dataSet.Fields[i].Value = new DataValue(StatusCodes.Bad, DateTime.UtcNow); + Utils.Trace(Utils.TraceMasks.Information, "DataCollector.CollectData for dataset {0} field {1} resulted in ex {2}", + dataSetName, i, ex); + } + } + return dataSet; + } + + } + } + return null; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/DataSet.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/DataSet.cs new file mode 100644 index 00000000..95408777 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/DataSet.cs @@ -0,0 +1,70 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.PubSub.PublishedData +{ + /// + /// Entity that holds DataSet structure that is published/received bu the PubSub + /// + public class DataSet + { + #region Constructor + /// + /// Create new instance of + /// + /// + public DataSet(string name = null) + { + Name = name; + } + #endregion + + #region Properties + /// + /// Get/Set data set name + /// + public string Name { get; set; } + + /// + /// Get/Set the DataSetWriterId that produced this DataSet + /// + public int DataSetWriterId { get; set; } + + /// + /// Gets SequenceNumber - a strictly monotonically increasing sequence number assigned by the publisher to each DataSetMessage sent. + /// + public uint SequenceNumber { get; internal set; } + + /// + /// Get/Set data set fields for this data set + /// + public Field[] Fields { get; set; } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/Field.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/Field.cs new file mode 100644 index 00000000..d7845984 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/PublishedData/Field.cs @@ -0,0 +1,57 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.PubSub.PublishedData +{ + /// + /// Base class for a DataSet field + /// + public class Field + { + /// + /// Get/Set Value + /// + public DataValue Value { get; set; } + + /// + /// Get/Set Target NodeId + /// + public NodeId TargetNodeId { get; set; } + + /// + /// Get/Set target attribute + /// + public uint TargetAttribute { get; set; } + + /// + /// Get configured object for this instance. + /// + public FieldMetaData FieldMetaData { get; internal set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/SubscribedDataEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/SubscribedDataEventArgs.cs new file mode 100644 index 00000000..f2020853 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/SubscribedDataEventArgs.cs @@ -0,0 +1,57 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.PubSub.PublishedData; +using System; +using System.Collections.Generic; +using System.Net; + +namespace Opc.Ua.PubSub +{ + /// + /// class for event + /// + public class SubscribedDataEventArgs : EventArgs + { + /// + /// Get the SequenceNumber of the NetworkMessage. + /// + public UInt16 NetworkMessageSequenceNumber { get; internal set; } + + /// + /// Get the DataSet collection received + /// + public List DataSets { get; internal set; } + + /// + /// Get the Source EndPoint + /// + public IPEndPoint SourceEndPoint { get; internal set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaNetworkMessage.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaNetworkMessage.cs new file mode 100644 index 00000000..a3e67340 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaNetworkMessage.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.PubSub +{ + /// + /// Abstract class for an UA network message + /// + public abstract class UaNetworkMessage + { + /// + /// Encodes the object in a stream. + /// + /// The encoder to be used for encoding the current value. + public abstract void Encode(IEncoder encoder); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubApplication.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubApplication.cs new file mode 100644 index 00000000..88369f0a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubApplication.cs @@ -0,0 +1,318 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using Opc.Ua.PubSub.Configuration; +using Opc.Ua.PubSub.PublishedData; + +namespace Opc.Ua.PubSub +{ + /// + /// A class that runs an OPC UA PubSub application. + /// + public class UaPubSubApplication : IDisposable + { + #region Fields + private object m_lock = new object(); + private List m_uaPubSubConnections; + private DataCollector m_dataCollector; + private IUaPubSubDataStore m_dataStore; + private UaPubSubConfigurator m_uaPubSubConfigurator; + #endregion + + #region Events + /// + /// Event that is triggered when the receives and decodes subscribed DataSets + /// + public event EventHandler DataReceived; + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// The current implementation of used by this instance of pub sub application + private UaPubSubApplication(IUaPubSubDataStore dataStore = null) + { + m_uaPubSubConnections = new List(); + if (dataStore != null) + { + m_dataStore = dataStore; + } + else + { + m_dataStore = new UaPubSubDataStore(); + } + m_dataCollector = new DataCollector(m_dataStore); + m_uaPubSubConfigurator = new UaPubSubConfigurator(); + m_uaPubSubConfigurator.ConnectionAdded += UaPubSubConfigurator_ConnectionAdded; + m_uaPubSubConfigurator.ConnectionRemoved += UaPubSubConfigurator_ConnectionRemoved; + m_uaPubSubConfigurator.PublishedDataSetAdded += UaPubSubConfigurator_PublishedDataSetAdded; + m_uaPubSubConfigurator.PublishedDataSetRemoved += UaPubSubConfigurator_PublishedDataSetRemoved; + } + + #endregion + + #region Public Properties + /// + /// Get the list of SupportedTransportProfiles + /// + public static string[] SupportedTransportProfiles + { + get { return new string[] { Profiles.UadpTransport }; } + } + + /// + /// Get reference to the associated instance. + /// + public UaPubSubConfigurator UaPubSubConfigurator { get { return m_uaPubSubConfigurator; } } + + /// + /// Get reference to current DataStore. Write here all node values needed to be published by this PubSubApplication + /// + public IUaPubSubDataStore DataStore { get { return m_dataStore; } } + #endregion + + #region Internal Properties + /// + /// Get the read only list of created for this Application instance + /// + internal ReadOnlyList PubSubConnections + { + get + { + return new ReadOnlyList(m_uaPubSubConnections); + } + } + + /// + /// Get reference to current configured DataCollector for this UaPubSubApplication + /// + internal DataCollector DataCollector { get { return m_dataCollector; } } + #endregion + + #region Public Static Create Methods + /// + /// Creates a new and associates it with a custom implementation of . + /// + /// The current implementation of used by this instance of pub sub application + /// New instance of + public static UaPubSubApplication Create(IUaPubSubDataStore dataStore) + { + return Create(new PubSubConfigurationDataType(), dataStore); + } + + /// + /// Creates a new by loading the configuration parameters from the specified path. + /// + /// The path of the configuration path. + /// The current implementation of used by this instance of pub sub application + /// New instance of + public static UaPubSubApplication Create(string configFilePath, IUaPubSubDataStore dataStore = null) + { + // validate input argument + if (configFilePath == null) + { + throw new ArgumentException(nameof(configFilePath)); + } + if (!File.Exists(configFilePath)) + { + throw new ArgumentException("The specified file {0} does not exist", configFilePath); + } + PubSubConfigurationDataType pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configFilePath); + + return Create(pubSubConfiguration, dataStore); + } + + /// + /// Creates a new by loading the configuration parameters from the + /// specified parameter. + /// + /// The configuration object. + /// The current implementation of used by this instance of pub sub application + /// New instance of + public static UaPubSubApplication Create(PubSubConfigurationDataType pubSubConfiguration = null, IUaPubSubDataStore dataStore = null) + { + // if no argument received, start with empty configuration + if (pubSubConfiguration == null) + { + pubSubConfiguration = new PubSubConfigurationDataType(); + } + + UaPubSubApplication uaPubSubApplication = new UaPubSubApplication(dataStore); + uaPubSubApplication.m_uaPubSubConfigurator.LoadConfiguration(pubSubConfiguration); + return uaPubSubApplication; + } + #endregion + + #region Public Methods + + /// + /// Start Publish/Subscribe jobs associated with this instance + /// + public void Start() + { + foreach(var connection in m_uaPubSubConnections) + { + connection.Start(); + } + } + + /// + /// Stop Publish/Subscribe jobs associated with this instance + /// + public void Stop() + { + foreach (var connection in m_uaPubSubConnections) + { + connection.Stop(); + } + } + #endregion + + #region Internal Methods + + /// + /// Raise DataReceived event + /// + /// + internal void RaiseDataReceivedEvent(SubscribedDataEventArgs e) + { + try + { + if (DataReceived != null) + { + DataReceived(this, e); + } + } + catch (Exception ex) + { + Utils.Trace(ex, "UaPubSubApplication.RaiseSubscriptionRecievedEvent"); + } + } + #endregion + + #region Private Methods - UaPubSubConfigurator event handlers + /// + /// Handler for event + /// + /// + /// + private void UaPubSubConfigurator_PublishedDataSetAdded(object sender, PublishedDataSetEventArgs e) + { + DataCollector.AddPublishedDataSet(e.PublishedDataSetDataType); + } + + /// + /// Handler for event + /// + /// + /// + private void UaPubSubConfigurator_PublishedDataSetRemoved(object sender, PublishedDataSetEventArgs e) + { + DataCollector.RemovePublishedDataSet(e.PublishedDataSetDataType); + } + + /// + /// Handler for event + /// + /// + /// + private void UaPubSubConfigurator_ConnectionRemoved(object sender, ConnectionEventArgs e) + { + IUaPubSubConnection removedUaPubSubConnection = null; + foreach (var connection in m_uaPubSubConnections) + { + if (connection.PubSubConnectionConfiguration.Equals(e.PubSubConnectionDataType)) + { + removedUaPubSubConnection = connection; + break; + } + } + if (removedUaPubSubConnection != null) + { + m_uaPubSubConnections.Remove(removedUaPubSubConnection); + removedUaPubSubConnection.Dispose(); + } + } + + /// + /// Handler for event + /// + /// + /// + private void UaPubSubConfigurator_ConnectionAdded(object sender, ConnectionEventArgs e) + { + UaPubSubConnection newUaPubSubConnection = ObjectFactory.CreateConnection(this, e.PubSubConnectionDataType); + if (newUaPubSubConnection != null) + { + m_uaPubSubConnections.Add(newUaPubSubConnection); + } + } + #endregion + + #region IDisposable Implementation + /// + /// Releases all resources used by the current instance of the class. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// When overridden in a derived class, releases the unmanaged resources used by that class + /// and optionally releases the managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + m_uaPubSubConfigurator.ConnectionAdded -= UaPubSubConfigurator_ConnectionAdded; + m_uaPubSubConfigurator.ConnectionRemoved -= UaPubSubConfigurator_ConnectionRemoved; + m_uaPubSubConfigurator.PublishedDataSetAdded -= UaPubSubConfigurator_PublishedDataSetAdded; + m_uaPubSubConfigurator.PublishedDataSetRemoved -= UaPubSubConfigurator_PublishedDataSetRemoved; + + Stop(); + // free managed resources + foreach(var connection in m_uaPubSubConnections) + { + connection.Dispose(); + } + m_uaPubSubConnections.Clear(); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubConnection.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubConnection.cs new file mode 100644 index 00000000..04c74ce1 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubConnection.cs @@ -0,0 +1,293 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.PubSub.Configuration; + +namespace Opc.Ua.PubSub +{ + /// + /// This entity represents a working connection for PubSub + /// + internal abstract class UaPubSubConnection : IUaPubSubConnection, IDisposable + { + #region Fields + protected object m_lock = new object(); + private bool m_isRunning; + private List m_publishers; + private PubSubConnectionDataType m_pubSubConnectionDataType; + private UaPubSubApplication m_uaPubSubApplication; + protected TransportProtocol m_transportProtocol = TransportProtocol.NotAvailable; + + #endregion + + #region Constructor + /// + /// Create new instance of UaPubSubConnection with PubSubConnectionDataType configuration data + /// + /// + /// + public UaPubSubConnection(UaPubSubApplication parentUaPubSubApplication, PubSubConnectionDataType pubSubConnectionDataType) + { + m_uaPubSubApplication = parentUaPubSubApplication; + m_uaPubSubApplication.UaPubSubConfigurator.WriterGroupAdded += UaPubSubConfigurator_WriterGroupAdded; + m_pubSubConnectionDataType = pubSubConnectionDataType; + + m_publishers = new List(); + + if (string.IsNullOrEmpty(pubSubConnectionDataType.Name)) + { + pubSubConnectionDataType.Name = ""; + } + } + + private void UaPubSubConfigurator_WriterGroupAdded(object sender, WriterGroupEventArgs e) + { + PubSubConnectionDataType pubSubConnectionDataType = m_uaPubSubApplication.UaPubSubConfigurator.FindObjectById(e.ConnectionId) + as PubSubConnectionDataType; + if (m_pubSubConnectionDataType == pubSubConnectionDataType) + { + UaPublisher publisher = new UaPublisher(this, e.WriterGroupDataType); + m_publishers.Add(publisher); + } + } + + #endregion + + #region Properties + /// + /// Get assigned transport protocol for this connection instance + /// + public TransportProtocol TransportProtocol + { + get { return m_transportProtocol; } + } + + /// + /// Get the configuration object for this PubSub connection + /// + public PubSubConnectionDataType PubSubConnectionConfiguration + { + get { return m_pubSubConnectionDataType; } + } + + /// + /// Get reference to + /// + public UaPubSubApplication Application + { + get { return m_uaPubSubApplication; } + } + + /// + /// Get flag that indicates if the Connection is in running state + /// + public bool IsRunning + { + get { return m_isRunning; } + } + #endregion + + #region Internal Properties + /// + /// Get the list of current publishers associated with this connection + /// + internal IReadOnlyCollection Publishers + { + get { return m_publishers.AsReadOnly(); } + } + + /// + /// Get the read only list of dataset readers associated with this connection + /// + internal IReadOnlyCollection DataSetReaders + { + get { return GetDataSetReaders().AsReadOnly(); } + } + #endregion + + #region Public Methods + /// + /// Start Publish/Subscribe jobs associated with this instance + /// + public void Start() + { + lock (m_lock) + { + m_isRunning = true; + foreach (var publisher in m_publishers) + { + publisher.Start(); + } + } + InternalStart(); + } + /// + /// Stop Publish/Subscribe jobs associated with this instance + /// + public void Stop() + { + InternalStop(); + lock (m_lock) + { + m_isRunning = false; + foreach (var publisher in m_publishers) + { + publisher.Stop(); + } + } + } + + /// + /// Determine if the connection has anything to publish -> at least one WriterDataSet is configured as enabled for current writer group + /// + /// + /// + public bool CanPublish(WriterGroupDataType writerGroupConfiguration) + { + if (!m_isRunning) + { + return false; + } + // check if connection status is operational + if (Application.UaPubSubConfigurator.FindStateForObject(m_pubSubConnectionDataType) != PubSubState.Operational) + { + return false; + } + + if (writerGroupConfiguration.Enabled) + { + foreach (DataSetWriterDataType writer in writerGroupConfiguration.DataSetWriters) + { + if (writer.Enabled) + { + return true; + } + } + } + + return false; + } + + /// + /// Create the network message built from the provided writerGroupConfiguration + /// + /// + /// + public abstract UaNetworkMessage CreateNetworkMessage(WriterGroupDataType writerGroupConfiguration); + + /// + /// Publish the network message + /// + /// + /// + public abstract bool PublishNetworkMessage(UaNetworkMessage networkMessage); + + #endregion + + #region Protected Methods + + /// + /// Initialize the connection object. Must be implemented by derived classes + /// + /// + protected abstract bool InternalInitialize(); + + /// + /// Perform specific Start tasks + /// + protected abstract void InternalStart(); + + /// + /// Perform specific Stop tasks + /// + protected abstract void InternalStop(); + + #endregion + + #region Private Methods + /// + /// Get current list of dataset readers available in this UaSubscriber component + /// + protected List GetDataSetReaders() + { + List readersList = new List(); + if (Application.UaPubSubConfigurator.FindStateForObject(m_pubSubConnectionDataType) != PubSubState.Operational) + { + return readersList; + } + foreach (ReaderGroupDataType readerGroup in m_pubSubConnectionDataType.ReaderGroups) + { + if (Application.UaPubSubConfigurator.FindStateForObject(readerGroup) == PubSubState.Operational) + { + foreach (DataSetReaderDataType reader in readerGroup.DataSetReaders) + { + if (Application.UaPubSubConfigurator.FindStateForObject(reader) == PubSubState.Operational) + { + readersList.Add(reader); + } + } + } + } + return readersList; + } + #endregion + + #region IDisposable Implementation + /// + /// Releases all resources used by the current instance of the class. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// When overridden in a derived class, releases the unmanaged resources used by that class + /// and optionally releases the managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + m_uaPubSubApplication.UaPubSubConfigurator.WriterGroupAdded -= UaPubSubConfigurator_WriterGroupAdded; + Stop(); + // free managed resources + foreach (UaPublisher publisher in m_publishers) + { + publisher.Dispose(); + } + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubDataStore.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubDataStore.cs new file mode 100644 index 00000000..dccba390 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPubSubDataStore.cs @@ -0,0 +1,131 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.PubSub +{ + /// + /// DataStore is a repository where Publisher applications will push data values for nodes + attributes published in data sets + /// + public class UaPubSubDataStore : IUaPubSubDataStore + { + #region Private Fields + private readonly object m_lock = new object(); + private Dictionary> m_store; + #endregion + + #region Constructor + /// + /// Create new instance of + /// + public UaPubSubDataStore() + { + m_store = new Dictionary>(); + } + #endregion + + #region Read/Write Public Methods + /// + /// Write a DataValue to the DataStore. + /// The DataValue is identified by node NodeId and Attribute. + /// + /// NodeId identifier for DataValue that will be stored + /// Default value is . + /// Default value is null. + public void WritePublishedDataItem(NodeId nodeId, uint attributeId = Attributes.Value, DataValue dataValue = null) + { + if (nodeId == null) + { + throw new ArgumentException(nameof(nodeId)); + } + if (attributeId == 0) + { + attributeId = Attributes.Value; + } + if (!Attributes.IsValid(attributeId)) + { + throw new ArgumentException(nameof(attributeId)); + } + //copy instance of dataValue to be stored + if (dataValue != null) + { + dataValue = Utils.Clone(dataValue) as DataValue; + } + lock (m_lock) + { + if (m_store.ContainsKey(nodeId)) + { + m_store[nodeId][attributeId] = dataValue; + } + else + { + Dictionary dictionary = new Dictionary(); + dictionary.Add(attributeId, dataValue); + m_store.Add(nodeId, dictionary); + } + } + } + + /// + /// Read the DataValue stored for a specific NodeId and Attribute. + /// + /// NodeId identifier of node + /// Default value is + /// + public DataValue ReadPublishedDataItem(NodeId nodeId, uint attributeId = Attributes.Value) + { + if (nodeId == null) + { + throw new ArgumentException(nameof(nodeId)); + } + if (attributeId == 0) + { + attributeId = Attributes.Value; + } + if (!Attributes.IsValid(attributeId)) + { + throw new ArgumentException(nameof(attributeId)); + } + lock (m_lock) + { + if (m_store.ContainsKey(nodeId)) + { + if (m_store[nodeId].ContainsKey(attributeId)) + { + return m_store[nodeId][attributeId]; + } + } + } + return null; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPublisher.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPublisher.cs new file mode 100644 index 00000000..0dfd1cd1 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/UaPublisher.cs @@ -0,0 +1,223 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.PubSub +{ + /// + /// A class responsible with calculating and triggering publish messages. + /// + internal class UaPublisher : IUaPublisher, IDisposable + { + #region Fields + private const int MinPublishingInterval = 10; + private object m_lock = new object(); + // event used to trigger publish + private ManualResetEvent m_shutdownEvent; + + private IUaPubSubConnection m_pubSubConnection; + private WriterGroupDataType m_writerGroupConfiguration; + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + internal UaPublisher(IUaPubSubConnection pubSubConnection, WriterGroupDataType writerGroupConfiguration) + { + m_pubSubConnection = pubSubConnection; + m_writerGroupConfiguration = writerGroupConfiguration; + + Initialize(); + } + + #endregion + + #region Public Properties + /// + /// Get reference to the associated parent instance. + /// + public IUaPubSubConnection PubSubConnection + { + get { return m_pubSubConnection; } + } + + /// + /// Get reference to the associated configuration object, the instance. + /// + public WriterGroupDataType WriterGroupConfiguration + { + get { return m_writerGroupConfiguration; } + } + #endregion + + #region Public Methods + + /// + /// Starts the publisher and makes it ready to send data. + /// + public void Start() + { + lock (m_lock) + { + m_shutdownEvent.Reset(); + + Task.Run(() => + { + PublishData(); + }); + } + } + + /// + /// stop the publishing thread. + /// + public virtual void Stop() + { + lock (m_lock) + { + m_shutdownEvent.Set(); + } + } + #endregion + + #region Private Methods + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_shutdownEvent = new ManualResetEvent(true); + } + + /// + /// Periodically checks if there is data to publish. + /// + private void PublishData() + { + try + { + do + { + int sleepCycle = 0; + + lock (m_lock) + { + if (m_writerGroupConfiguration != null) + { + sleepCycle = Convert.ToInt32(m_writerGroupConfiguration.PublishingInterval); + } + } + + if (sleepCycle < MinPublishingInterval) + { + sleepCycle = MinPublishingInterval; + } + + if (m_shutdownEvent.WaitOne(sleepCycle)) + { + Utils.Trace(Utils.TraceMasks.Information, "UaPublisher: Publish Thread Exited Normally."); + break; + } + + lock (m_lock) + { + if (m_pubSubConnection.CanPublish(m_writerGroupConfiguration)) + { + // call on a new thread + Task.Run(() => + { + PublishMessage(); + }); + } + } + } + while (true); + } + catch (Exception e) + { + // Unexpected exception in publish thread! + Utils.Trace(e, "UaPublisher: Publish Thread Exited Unexpectedly"); + } + } + + /// + /// Generate and publish a message + /// + private void PublishMessage() + { + try + { + UaNetworkMessage uaNetworkMessage = m_pubSubConnection.CreateNetworkMessage(m_writerGroupConfiguration); + if (uaNetworkMessage != null) + { + bool success = m_pubSubConnection.PublishNetworkMessage(uaNetworkMessage); + Utils.Trace(Utils.TraceMasks.Information, + "UaPublisher.PublishNetworkMessage, WriterGroupId:{0}; success = {1}", m_writerGroupConfiguration.WriterGroupId, success.ToString()); + } + } + catch (Exception e) + { + // Unexpected exception in PublishMessage + Utils.Trace(e, "UaPublisher.PublishMessage"); + } + } + #endregion + + #region IDisposable Implementation + /// + /// Releases all resources used by the current instance of the class. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// When overridden in a derived class, releases the unmanaged resources used by that class + /// and optionally releases the managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + Stop(); + // free managed resources + m_shutdownEvent.Dispose(); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpDataEventArgs.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpDataEventArgs.cs new file mode 100644 index 00000000..f70a1f45 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpDataEventArgs.cs @@ -0,0 +1,50 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Net; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// EventArgs class for UadpMessage received + /// + internal class UadpDataEventArgs : EventArgs + { + /// + /// Uadp message bytes + /// + internal byte[] Message { get; set; } + + /// + /// Get the Source EndPoint + /// + internal IPEndPoint SourceEndPoint { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpDataSetMessage.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpDataSetMessage.cs new file mode 100644 index 00000000..01cff4e6 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpDataSetMessage.cs @@ -0,0 +1,956 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.PubSub.PublishedData; +using System; +using System.Collections.Generic; +using System.Xml; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// The UADPDataSetMessage class handler. + /// It handles the UADPDataSetMessage encoding + /// + internal class UadpDataSetMessage + { + #region Fields + + // Validation masks + private const byte FieldTypeUsedBits = 0x06; + private const DataSetFlags1EncodingMask PreservedDataSetFlags1UsedBits = (DataSetFlags1EncodingMask) 0x07; + private const DataSetFlags1EncodingMask DataSetFlags1UsedBits = (DataSetFlags1EncodingMask) 0xF9; + + // UadpDataSetMessage header as byte sizes + private const UInt16 DataSetFlags1HeaderSize = 1; + private const UInt16 DataSetFlags2HeaderSize = 1; + private const UInt16 SequenceNumberHeaderSize = 2; + private const UInt16 TimestampHeaderSize = 8; + private const UInt16 PicosecondsHeaderSize = 2; + private const UInt16 StatusHeaderSize = 2; + private const UInt16 ConfigurationMajorVersionHeaderSize = 4; + private const UInt16 ConfigurationMinorVersionHeaderSize = 4; + + private const UInt16 DataSetFieldCountSize = 2; + + // to avoid unsafe code + private const UInt16 SizeOfDateTime = 8; + private const UInt16 SizeOfGuid = 16; + + // Configuration Major and Major current version (VersionTime) + private const UInt32 ConfigMajorVersion = 1; + private const UInt32 ConfigMinorVersion = 1; + + private DataSet m_dataSet; + + #endregion + + #region Constructors + + /// + /// Constructor + /// + public UadpDataSetMessage() + { + ConfigurationMajorVersion = ConfigMajorVersion; + ConfigurationMinorVersion = ConfigMinorVersion; + + TimeStamp = DateTime.UtcNow; + + // configurable !? + // If this bit is set to false, the rest of this DataSetMessage is considered invalid, and shall not be processed by the Subscriber. + DataSetFlags1 |= DataSetFlags1EncodingMask.MessageIsValid; + } + + /// + /// Constructor with DataSet parameter + /// + /// + public UadpDataSetMessage(DataSet dataSet = null) : this() + { + m_dataSet = dataSet; + } + + #endregion + + #region Properties + + #region Inherited from DatasetWriter + + /// + /// Get and Set corresponding DataSetWriterId + /// + public ushort DataSetWriterId { get; set; } + + /// + /// Get DataSetFieldContentMask + /// This DataType defines flags to include DataSet field related information like status and + /// timestamp in addition to the value in the DataSetMessage. + /// + public DataSetFieldContentMask FieldContentMask { get; private set; } + + /// + /// Get UadpDataSetMessageContentMask + /// The DataSetWriterMessageContentMask defines the flags for the content of the DataSetMessage header. + /// The UADP message mapping specific flags are defined by the UadpDataSetMessageContentMask DataType. + /// + public UadpDataSetMessageContentMask MessageContentMask { get; private set; } + + #endregion + + #region DataSetMessage settings + + /// + /// Get DataSetFlags1 + /// + public DataSetFlags1EncodingMask DataSetFlags1 { get; private set; } + + /// + /// Get DataSetFlags2 + /// + public DataSetFlags2EncodingMask DataSetFlags2 { get; private set; } + + /// + /// Get and set the ConfiguredSize of this + /// + public ushort ConfiguredSize { get; set; } + + /// + /// Get and set the DataSetOffset of this + /// + public ushort DataSetOffset { get; set; } + + /// + /// Get and Set SequenceNumber + /// A strictly monotonically increasing sequence number assigned by the publisher to each DataSetMessage sent. + /// + public uint SequenceNumber { get; set; } + + /// + /// Get and Set Major version + /// + public uint ConfigurationMajorVersion { get; set; } + + /// + /// Get and Set Minor version + /// + public uint ConfigurationMinorVersion { get; set; } + + /// + /// Get and Set Timestamp + /// + public DateTime TimeStamp { get; set; } + + /// + /// Get and Set Pico seconds + /// + public UInt16 PicoSeconds { get; set; } + + /// + /// Get and Set Status + /// + public UInt16 Status { get; set; } + + /// + /// Get DataSet + /// + public DataSet DataSet + { + get { return m_dataSet; } + } + + /// + /// Get decoded data DataSets from possible dataset readers + /// + public List DecodedDataSets + { + get; private set; + } + #endregion + + /// + /// Get and Set Decoded payload size (hold it here for now) + /// + public UInt16 PayloadSizeInStream { get; set; } + + /// + /// Get and Set the startPosition in decoder + /// + public int StartPositionInStream { get; set; } + + #endregion Properties + + #region Public Methods + + /// + /// Set DataSetFieldContentMask + /// + /// + public void SetFieldContentMask(DataSetFieldContentMask fieldContentMask) + { + FieldContentMask = fieldContentMask; + + #region DataSetFlags1: Bit range 1-2: Field Encoding + + DataSetFlags1 &= DataSetFlags1UsedBits; + + FieldTypeEncodingMask fieldType = FieldTypeEncodingMask.Reserved; + if (FieldContentMask == DataSetFieldContentMask.None) + { + // 00 Variant Field Encoding + fieldType = FieldTypeEncodingMask.Variant; + } + else if ((FieldContentMask & (DataSetFieldContentMask.StatusCode + | DataSetFieldContentMask.SourceTimestamp + | DataSetFieldContentMask.ServerTimestamp + | DataSetFieldContentMask.SourcePicoSeconds + | DataSetFieldContentMask.ServerPicoSeconds)) != 0) + { + // 10 DataValue Field Encoding + fieldType = FieldTypeEncodingMask.DataValue; + } + else if ((FieldContentMask & DataSetFieldContentMask.RawData) != 0) + { + // 01 RawData Field Encoding + fieldType = FieldTypeEncodingMask.RawData; + } + + DataSetFlags1 |= (DataSetFlags1EncodingMask)((byte)fieldType<<1) ; + + #endregion + } + + /// + /// Set MessageContentMask + /// + /// + public void SetMessageContentMask(UadpDataSetMessageContentMask messageContentMask) + { + MessageContentMask = messageContentMask; + + DataSetFlags1 &= PreservedDataSetFlags1UsedBits; + DataSetFlags2 = 0; + + #region DataSetFlags1: Bit range 3-7: Enabled flags options + + if ((MessageContentMask & UadpDataSetMessageContentMask.SequenceNumber) != 0) + { + DataSetFlags1 |= DataSetFlags1EncodingMask.SequenceNumber; + } + + if ((MessageContentMask & UadpDataSetMessageContentMask.Status) != 0) + { + DataSetFlags1 |= DataSetFlags1EncodingMask.Status; + } + + if ((MessageContentMask & UadpDataSetMessageContentMask.MajorVersion) != 0) + { + DataSetFlags1 |= DataSetFlags1EncodingMask.ConfigurationVersionMajorVersion; + } + + if ((MessageContentMask & UadpDataSetMessageContentMask.MinorVersion) != 0) + { + DataSetFlags1 |= DataSetFlags1EncodingMask.ConfigurationVersionMinorVersion; + } + + #endregion + + #region DataSetFlags2 + + // Bit range 0-3: UADP DataSetMessage type + // 0000 Data Key Frame (by default for now) + // 0001 Data Delta Frame + // 0010 Event + // 0011 Keep Alive + //Always Key frame is sent. + if ((MessageContentMask & UadpDataSetMessageContentMask.Timestamp) != 0) + { + DataSetFlags1 |= DataSetFlags1EncodingMask.DataSetFlags2; + DataSetFlags2 |= DataSetFlags2EncodingMask.Timestamp; + } + + if ((MessageContentMask & UadpDataSetMessageContentMask.PicoSeconds) != 0) + { + DataSetFlags1 |= DataSetFlags1EncodingMask.DataSetFlags2; + DataSetFlags2 |= DataSetFlags2EncodingMask.PicoSeconds; + } + + #endregion + } + /// + /// Encode dataset + /// + /// + public void Encode(BinaryEncoder binaryEncoder) + { + StartPositionInStream = binaryEncoder.Position; + if (DataSetOffset > 0 && StartPositionInStream < DataSetOffset) + { + StartPositionInStream = DataSetOffset; + binaryEncoder.Position = DataSetOffset; + } + + EncodeDataSetMessageHeader(binaryEncoder); + EncodePayload(binaryEncoder); + + PayloadSizeInStream = (UInt16)(binaryEncoder.Position - StartPositionInStream); + + if (ConfiguredSize > 0 && PayloadSizeInStream < ConfiguredSize) + { + PayloadSizeInStream = ConfiguredSize; + binaryEncoder.Position = StartPositionInStream + PayloadSizeInStream; + } + } + + /// + /// Decode dataset + /// + /// + /// + /// + public DataSet DecodePossibleDataSetReader(BinaryDecoder binaryDecoder, DataSetReaderDataType dataSetReader) + { + UadpDataSetReaderMessageDataType messageSettings = ExtensionObject.ToEncodeable(dataSetReader.MessageSettings) + as UadpDataSetReaderMessageDataType; + if (messageSettings != null) + { + //StartPositionInStream is calculated but different from reader configuration dataset cannot be decoded + if (StartPositionInStream != messageSettings.DataSetOffset) + { + if (StartPositionInStream == 0) + { + //use configured offset from reader + StartPositionInStream = messageSettings.DataSetOffset; + } + else if (messageSettings.DataSetOffset != 0) + { + //configuration is different from real position in message, the dataset cannot be decoded + return null; + } + } + } + if (binaryDecoder.BaseStream.Length <= StartPositionInStream) + { + return null; + } + binaryDecoder.BaseStream.Position = StartPositionInStream; + DecodeDataSetMessageHeader(binaryDecoder); + return DecodeFieldMessageData(binaryDecoder, dataSetReader); + } + #endregion + + #region Encode header & payload + + /// + /// Encode DataSet message header + /// + /// + private void EncodeDataSetMessageHeader(IEncoder encoder) + { + if ((DataSetFlags1 & DataSetFlags1EncodingMask.MessageIsValid) != 0) + { + encoder.WriteByte("DataSetFlags1", (byte)DataSetFlags1); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.DataSetFlags2) != 0) + { + encoder.WriteByte("DataSetFlags2", (byte)DataSetFlags2); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.SequenceNumber) != 0) + { + encoder.WriteUInt16("SequenceNumber", (UInt16) SequenceNumber); + } + + if ((DataSetFlags2 & DataSetFlags2EncodingMask.Timestamp) != 0) + { + encoder.WriteDateTime("Timestamp", TimeStamp); + } + + if ((DataSetFlags2 & DataSetFlags2EncodingMask.PicoSeconds) != 0) + { + encoder.WriteUInt16("Picoseconds", PicoSeconds); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.Status) != 0) + { + encoder.WriteUInt16("Status", Status); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.ConfigurationVersionMajorVersion) != 0) + { + encoder.WriteUInt32("ConfigurationMajorVersion", ConfigurationMajorVersion); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.ConfigurationVersionMinorVersion) != 0) + { + encoder.WriteUInt32("ConfigurationMinorVersion", ConfigurationMinorVersion); + } + } + + /// + /// Encode payload data + /// + /// + private void EncodePayload(BinaryEncoder binaryEncoder) + { + FieldTypeEncodingMask fieldType = (FieldTypeEncodingMask)(((byte)DataSetFlags1 & FieldTypeUsedBits) >> 1); + switch (fieldType) + { + case FieldTypeEncodingMask.Variant: + binaryEncoder.WriteUInt16("DataSetFieldCount", (UInt16)m_dataSet.Fields.Length); + foreach (Field field in m_dataSet.Fields) + { + // 00 Variant type + binaryEncoder.WriteVariant("Variant", field.Value.WrappedValue); + } + break; + case FieldTypeEncodingMask.DataValue: + binaryEncoder.WriteUInt16("DataSetFieldCount", (UInt16)m_dataSet.Fields.Length); + foreach (Field field in m_dataSet.Fields) + { + // 10 DataValue type + binaryEncoder.WriteDataValue("DataValue", field.Value); + } + break; + case FieldTypeEncodingMask.RawData: + // DataSetFieldCount is not persisted for RawData + foreach (Field field in m_dataSet.Fields) + { + EncodeFieldAsRawData(binaryEncoder, field); + } + break; + case FieldTypeEncodingMask.Reserved: + // ignore + break; + } + } + + #endregion + + #region Decode header & payload + + /// + /// Decode DataSet message header + /// + /// + private void DecodeDataSetMessageHeader(IDecoder decoder) + { + if ((DataSetFlags1 & DataSetFlags1EncodingMask.MessageIsValid) != 0) + { + DataSetFlags1 = (DataSetFlags1EncodingMask)decoder.ReadByte("DataSetFlags1"); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.DataSetFlags2) != 0) + { + DataSetFlags2 = (DataSetFlags2EncodingMask)decoder.ReadByte("DataSetFlags2"); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.SequenceNumber) != 0) + { + SequenceNumber = decoder.ReadUInt16("SequenceNumber"); + } + + if ((DataSetFlags2 & DataSetFlags2EncodingMask.Timestamp) != 0) + { + TimeStamp = decoder.ReadDateTime("Timestamp"); + } + + if ((DataSetFlags2 & DataSetFlags2EncodingMask.PicoSeconds) != 0) + { + PicoSeconds = decoder.ReadUInt16("Picoseconds"); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.Status) != 0) + { + Status = decoder.ReadUInt16("Status"); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.ConfigurationVersionMajorVersion) != 0) + { + ConfigurationMajorVersion = decoder.ReadUInt32("ConfigurationMajorVersion"); + } + + if ((DataSetFlags1 & DataSetFlags1EncodingMask.ConfigurationVersionMinorVersion) != 0) + { + ConfigurationMinorVersion = decoder.ReadUInt32("ConfigurationMinorVersion"); + } + } + + /// + /// Decode field message data from decoder and using a DataSetReader + /// + /// + /// + /// + private DataSet DecodeFieldMessageData(BinaryDecoder binaryDecoder, DataSetReaderDataType dataSetReader) + { + DataSetMetaDataType metaDataType = dataSetReader.DataSetMetaData; + try + { + ushort fieldCount = 0; + FieldTypeEncodingMask fieldType = (FieldTypeEncodingMask)(((byte)DataSetFlags1 & FieldTypeUsedBits) >> 1); + if (fieldType == FieldTypeEncodingMask.RawData) + { + // metadata should provide field count + fieldCount = (ushort)metaDataType.Fields.Count; + } + else + { + fieldCount = binaryDecoder.ReadUInt16("DataSetFieldCount"); + } + + TargetVariablesDataType targetVariablesData = + ExtensionObject.ToEncodeable(dataSetReader.SubscribedDataSet) as TargetVariablesDataType; + + if (targetVariablesData == null || targetVariablesData.TargetVariables.Count != fieldCount) + { + // dataset cannot be decoded because the configuration is not for TargetVariables + return null; + } + + // check configuration version + List dataValues = new List(); + switch (fieldType) + { + case FieldTypeEncodingMask.Variant: + for (int i = 0; i < fieldCount; i++) + { + dataValues.Add(new DataValue(binaryDecoder.ReadVariant("Variant"))); + } + break; + case FieldTypeEncodingMask.DataValue: + for (int i = 0; i < fieldCount; i++) + { + dataValues.Add(binaryDecoder.ReadDataValue("DataValue")); + } + break; + case FieldTypeEncodingMask.RawData: + if (metaDataType != null) + { + for (int i = 0; i < fieldCount; i++) + { + FieldMetaData fieldMetaData = metaDataType.Fields[i]; + if (fieldMetaData != null) + { + var decodedValue = DecodeRawData(binaryDecoder, fieldMetaData); + dataValues.Add(new DataValue(new Variant(decodedValue))); + } + } + } + // else the decoding is compromised for RawData type + break; + case FieldTypeEncodingMask.Reserved: + // ignore + break; + } + + List dataFields = new List(); + + for (int i = 0; i < dataValues.Count; i++) + { + Field dataField = new Field(); + dataField.Value = dataValues[i]; + dataField.TargetAttribute = targetVariablesData.TargetVariables[i].AttributeId; + dataField.TargetNodeId = targetVariablesData.TargetVariables[i].TargetNodeId; + dataFields.Add(dataField); + } + DataSet dataSet = new DataSet(metaDataType.Name); + dataSet.Fields = dataFields.ToArray(); + dataSet.DataSetWriterId = DataSetWriterId; + dataSet.SequenceNumber = SequenceNumber; + return dataSet; + } + catch (Exception ex) + { + Utils.Trace(ex, "UadpDataSetMessage.DecodeFieldMessageData"); + return null; + } + } + + /// + /// Encodes field value as RawData + /// + /// + /// + private void EncodeFieldAsRawData(BinaryEncoder binaryEncoder, Field field) + { + try + { + // 01 RawData Field Encoding (TODO: StructuredValue) + var variant = field.Value.WrappedValue; + + if (variant.TypeInfo == null || variant.TypeInfo.BuiltInType == BuiltInType.Null) + { + return; + } + + if (field.FieldMetaData.ValueRank == ValueRanks.Scalar) + { + switch ((BuiltInType)field.FieldMetaData.BuiltInType) + { + case BuiltInType.Boolean: + binaryEncoder.WriteBoolean("Bool", Convert.ToBoolean(variant.Value)); + break; + case BuiltInType.SByte: + binaryEncoder.WriteSByte("SByte", Convert.ToSByte(variant.Value)); + break; + case BuiltInType.Byte: + binaryEncoder.WriteByte("Byte", Convert.ToByte(variant.Value)); + break; + case BuiltInType.Int16: + binaryEncoder.WriteInt16("Int16", Convert.ToInt16( variant.Value)); + break; + case BuiltInType.UInt16: + binaryEncoder.WriteUInt16("UInt16", Convert.ToUInt16(variant.Value)); + break; + case BuiltInType.Int32: + binaryEncoder.WriteInt32("Int32", Convert.ToInt32(variant.Value)); + break; + case BuiltInType.UInt32: + binaryEncoder.WriteUInt32("UInt32", Convert.ToUInt32(variant.Value)); + break; + case BuiltInType.Int64: + binaryEncoder.WriteInt64("Int64", Convert.ToInt64(variant.Value)); + break; + case BuiltInType.UInt64: + binaryEncoder.WriteUInt64("UInt64", Convert.ToUInt64(variant.Value)); + break; + case BuiltInType.Float: + binaryEncoder.WriteFloat("Float", Convert.ToSingle(variant.Value)); + break; + case BuiltInType.Double: + binaryEncoder.WriteDouble("Double", Convert.ToDouble(variant.Value)); + break; + case BuiltInType.DateTime: + binaryEncoder.WriteDateTime("DateTime", Convert.ToDateTime(variant.Value)); + break; + case BuiltInType.Guid: + binaryEncoder.WriteGuid("GUID", (Uuid)variant.Value); + break; + case BuiltInType.String: + binaryEncoder.WriteString("String", variant.Value as string); + break; + case BuiltInType.ByteString: + binaryEncoder.WriteByteString("ByteString", (byte[])variant.Value); + break; + case BuiltInType.QualifiedName: + binaryEncoder.WriteQualifiedName("QualifiedName", variant.Value as QualifiedName); + break; + case BuiltInType.LocalizedText: + binaryEncoder.WriteLocalizedText("LocalizedText", variant.Value as LocalizedText); + break; + case BuiltInType.NodeId: + binaryEncoder.WriteNodeId("NodeId", variant.Value as NodeId); + break; + case BuiltInType.ExpandedNodeId: + binaryEncoder.WriteExpandedNodeId("ExpandedNodeId", variant.Value as ExpandedNodeId); + break; + case BuiltInType.StatusCode: + binaryEncoder.WriteStatusCode("StatusCode", (StatusCode)variant.Value); + break; + case BuiltInType.XmlElement: + binaryEncoder.WriteXmlElement("XmlElement", variant.Value as XmlElement); + break; + case BuiltInType.Enumeration: + binaryEncoder.WriteInt32("Enumeration", Convert.ToInt32(variant.Value)); + break; + case BuiltInType.ExtensionObject: + binaryEncoder.WriteExtensionObject("ExtensionObject", variant.Value as ExtensionObject); + break; + } + } + else + { + switch ((BuiltInType)field.FieldMetaData.BuiltInType) + { + case BuiltInType.Boolean: + binaryEncoder.WriteBooleanArray("BooleanArray", (bool[])variant.Value); + break; + case BuiltInType.SByte: + binaryEncoder.WriteSByteArray("SByteArray", (sbyte[])variant.Value); + break; + case BuiltInType.Byte: + binaryEncoder.WriteByteArray("ByteArray", (byte[])variant.Value); + break; + case BuiltInType.Int16: + binaryEncoder.WriteInt16Array("ByteArray", (short[])variant.Value); + break; + case BuiltInType.UInt16: + binaryEncoder.WriteUInt16Array("UInt16Array", (ushort[])variant.Value); + break; + case BuiltInType.Int32: + binaryEncoder.WriteInt32Array("Int32Array", (int[])variant.Value); + break; + case BuiltInType.UInt32: + binaryEncoder.WriteUInt32Array("UInt32Array", (uint[])variant.Value); + break; + case BuiltInType.Int64: + binaryEncoder.WriteInt64Array("Int64Array", (long[])variant.Value); + break; + case BuiltInType.UInt64: + binaryEncoder.WriteUInt64Array("UInt64Array", (ulong[])variant.Value); + break; + case BuiltInType.Float: + binaryEncoder.WriteFloatArray("FloatArray", (float[])variant.Value); + break; + case BuiltInType.Double: + binaryEncoder.WriteDoubleArray("DoubleArray", (double[])variant.Value); + break; + case BuiltInType.DateTime: + binaryEncoder.WriteDateTimeArray("DateTimeArray", (DateTime[])variant.Value); + break; + case BuiltInType.Guid: + binaryEncoder.WriteGuidArray("GuidArray", (Uuid[])variant.Value); + break; + case BuiltInType.String: + binaryEncoder.WriteStringArray("StringArray", (string[])variant.Value); + break; + case BuiltInType.ByteString: + binaryEncoder.WriteByteStringArray("StringArray", (byte[][])variant.Value); + break; + case BuiltInType.QualifiedName: + binaryEncoder.WriteQualifiedNameArray("QualifiedNameArray", (QualifiedName[])variant.Value); + break; + case BuiltInType.LocalizedText: + binaryEncoder.WriteLocalizedTextArray("LocalizedTextArray", (LocalizedText[])variant.Value); + break; + case BuiltInType.NodeId: + binaryEncoder.WriteNodeIdArray("NodeIdArray", (NodeId[])variant.Value); + break; + case BuiltInType.ExpandedNodeId: + binaryEncoder.WriteExpandedNodeIdArray("ExpandedNodeIdArray", (ExpandedNodeId[])variant.Value); + break; + case BuiltInType.StatusCode: + binaryEncoder.WriteStatusCodeArray("StatusCodeArray", (StatusCode[])variant.Value); + break; + case BuiltInType.XmlElement: + binaryEncoder.WriteXmlElementArray("XmlElementArray", (System.Xml.XmlElement[])variant.Value); + break; + case BuiltInType.Variant: + binaryEncoder.WriteVariantArray("VariantArray", (Variant[])variant.Value); + break; + case BuiltInType.Enumeration: + //TODO make this work + //binaryEncoder.WriteInt32Array("EnumerationArray", Convert.ToInt32(variant.Value)); + binaryEncoder.WriteVariantArray("EnumerationArray", (Variant[])variant.Value); + break; + case BuiltInType.ExtensionObject: + binaryEncoder.WriteExtensionObjectArray("ExtensionObjectArray", (ExtensionObject[])variant.Value); + break; + } + } + } + catch(Exception ex) + { + Utils.Trace("Error encoding field {0} - {1}", field.FieldMetaData.Name, ex); + } + } + + /// + /// Decode RawData type (for SimpleTypeDescription!?) + /// + /// + /// + /// + private object DecodeRawData(BinaryDecoder binaryDecoder, FieldMetaData fieldMetaData) + { + if (fieldMetaData.BuiltInType != 0)// && fieldMetaData.DataType.Equals(new NodeId(fieldMetaData.BuiltInType))) + { + try + { + switch (fieldMetaData.ValueRank) + { + + case ValueRanks.Scalar: + return DecodeRawScalar(binaryDecoder, fieldMetaData.BuiltInType); + + case ValueRanks.OneDimension: + return DecodeRawArrayOneDimension(binaryDecoder, (BuiltInType)fieldMetaData.BuiltInType); + + case ValueRanks.TwoDimensions: + case ValueRanks.OneOrMoreDimensions: + //return DecodeRawArrayMultiDimension(binaryDecoder, (BuiltInType)fieldMetaData.BuiltInType, fieldMetaData.ArrayDimensions); + + case ValueRanks.Any:// Scalar or Array with any number of dimensions + case ValueRanks.ScalarOrOneDimension: + //return DecodeRawArrayOrScalar(binaryDecoder, (BuiltInType)fieldMetaData.BuiltInType, fieldMetaData.ArrayDimensions); + + default: + Utils.Trace("Decoding ValueRank = {0} not supported yet !!!", fieldMetaData.ValueRank); + break; + } + } + catch (Exception ex) + { + Utils.Trace(ex, "Error reading element for RawData."); + return (StatusCodes.BadDecodingError); + } + } + return null; + } + + /// + /// Decode an array type according to dimensions constraints specified in 6.2.2.1.3 FieldMetaData + /// + /// + /// + /// + private object DecodeRawArrayOneDimension(BinaryDecoder binaryDecoder, BuiltInType builtInType) + { + + switch ((BuiltInType)builtInType) + { + case BuiltInType.Boolean: + return binaryDecoder.ReadBooleanArray(null); + case BuiltInType.SByte: + return binaryDecoder.ReadSByteArray(null); + case BuiltInType.Byte: + return binaryDecoder.ReadByteArray(null); + case BuiltInType.Int16: + return binaryDecoder.ReadInt16Array(null); + case BuiltInType.UInt16: + return binaryDecoder.ReadUInt16Array(null); + case BuiltInType.Int32: + return binaryDecoder.ReadInt32Array(null); + case BuiltInType.UInt32: + return binaryDecoder.ReadUInt32Array(null); + case BuiltInType.Int64: + return binaryDecoder.ReadInt64Array(null); + case BuiltInType.UInt64: + return binaryDecoder.ReadUInt64Array(null); + case BuiltInType.Float: + return binaryDecoder.ReadFloatArray(null); + case BuiltInType.Double: + return binaryDecoder.ReadDoubleArray(null); + case BuiltInType.String: + return binaryDecoder.ReadStringArray(null); + case BuiltInType.DateTime: + return binaryDecoder.ReadDateTimeArray(null); + case BuiltInType.Guid: + return binaryDecoder.ReadGuidArray(null); + case BuiltInType.ByteString: + return binaryDecoder.ReadByteStringArray(null); + case BuiltInType.XmlElement: + return binaryDecoder.ReadXmlElementArray(null); + case BuiltInType.NodeId: + return binaryDecoder.ReadNodeIdArray(null); + case BuiltInType.ExpandedNodeId: + return binaryDecoder.ReadExpandedNodeIdArray(null); + case BuiltInType.StatusCode: + return binaryDecoder.ReadStatusCodeArray(null); + case BuiltInType.QualifiedName: + return binaryDecoder.ReadQualifiedNameArray(null); + case BuiltInType.LocalizedText: + return binaryDecoder.ReadLocalizedTextArray(null); + case BuiltInType.DataValue: + return binaryDecoder.ReadDataValueArray(null); + case BuiltInType.Enumeration: + //return binaryDecoder.ReadInt32Array(null); + //return binaryDecoder.ReadEnumeratedArray(null, typeof(Int32)); + return binaryDecoder.ReadVariantArray(null); + case BuiltInType.Variant: + return binaryDecoder.ReadVariantArray(null); + case BuiltInType.ExtensionObject: + return binaryDecoder.ReadExtensionObjectArray(null); + + default: + return null; + } + } + + /// + /// Decode a scalar type + /// + /// + /// + /// The decoded object + private object DecodeRawScalar(BinaryDecoder binaryDecoder, byte builtInType) + { + switch ((BuiltInType)builtInType) + { + case BuiltInType.Boolean: + return binaryDecoder.ReadBoolean(null); + case BuiltInType.SByte: + return binaryDecoder.ReadSByte(null); + case BuiltInType.Byte: + return binaryDecoder.ReadByte(null); + case BuiltInType.Int16: + return binaryDecoder.ReadInt16(null); + case BuiltInType.UInt16: + return binaryDecoder.ReadUInt16(null); + case BuiltInType.Int32: + return binaryDecoder.ReadInt32(null); + case BuiltInType.UInt32: + return binaryDecoder.ReadUInt32(null); + case BuiltInType.Int64: + return binaryDecoder.ReadInt64(null); + case BuiltInType.UInt64: + return binaryDecoder.ReadUInt64(null); + case BuiltInType.Float: + return binaryDecoder.ReadFloat(null); + case BuiltInType.Double: + return binaryDecoder.ReadDouble(null); + case BuiltInType.String: + return binaryDecoder.ReadString(null); + case BuiltInType.DateTime: + return binaryDecoder.ReadDateTime(null); + case BuiltInType.Guid: + return binaryDecoder.ReadGuid(null); + case BuiltInType.ByteString: + return binaryDecoder.ReadByteString(null); + case BuiltInType.XmlElement: + return binaryDecoder.ReadXmlElement(null); + case BuiltInType.NodeId: + return binaryDecoder.ReadNodeId(null); + case BuiltInType.ExpandedNodeId: + return binaryDecoder.ReadExpandedNodeId(null); + case BuiltInType.StatusCode: + return binaryDecoder.ReadStatusCode(null); + case BuiltInType.QualifiedName: + return binaryDecoder.ReadQualifiedName(null); + case BuiltInType.LocalizedText: + return binaryDecoder.ReadLocalizedText(null); + case BuiltInType.DataValue: + return binaryDecoder.ReadDataValue(null); + case BuiltInType.Enumeration: + return binaryDecoder.ReadInt32(null); + case BuiltInType.Variant: + return binaryDecoder.ReadVariant(null); + case BuiltInType.ExtensionObject: + return binaryDecoder.ReadExtensionObject(null); + default: + return null; + } + } + + #endregion + + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpNetworkMessage.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpNetworkMessage.cs new file mode 100644 index 00000000..1c80a277 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpNetworkMessage.cs @@ -0,0 +1,1009 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.PubSub.PublishedData; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// UADP Network Message + /// + internal class UadpNetworkMessage : UaNetworkMessage + { + #region Fields + // The UADPVersion for this specification version is 1. + private const byte UadpVersion = 1; + private const byte PublishedIdTypeUsedBits = 0x07; + private const byte UADPVersionBitMask = 0x0F; + private const byte PublishedIdResetMask = 0xFC; + private const byte UADPMessageTypeMask = 0x1C; + + private byte m_uadpVersion; + private object m_publisherId; + private UADPNetworkMessageType m_uadpNetworkMessageType; + + /// + /// Uadp DataSet messages + /// + private readonly List m_uadpDataSetMessages; + #endregion + + #region Constructor + /// + /// Create new instance of UadpNetworkMessage + /// + public UadpNetworkMessage() + { + UADPVersion = UadpVersion; + DataSetClassId = Guid.Empty; + Timestamp = DateTime.UtcNow; + + m_uadpDataSetMessages = new List(); + } + /// + /// Create new instance of UadpNetworkMessage + /// + /// UadpDataSetMessage list as input + public UadpNetworkMessage(List uadpDataSetMessages) : this() + { + m_uadpDataSetMessages = uadpDataSetMessages; + } + #endregion + + #region Properties + + /// + /// UadpDataSet messages + /// + public ReadOnlyCollection UadpDataSetMessages + { + get + { + return new ReadOnlyCollection(m_uadpDataSetMessages); + } + } + + /// + /// NetworkMessageContentMask contains the mask that will be used to check NetworkMessage options selected for usage + /// + public UadpNetworkMessageContentMask NetworkMessageContentMask { get; private set; } + + #region NetworkMessage Header + + /// + /// Get and Set Uadp version + /// + public byte UADPVersion + { + get { return m_uadpVersion; } + set { m_uadpVersion = Convert.ToByte(value & UADPVersionBitMask); } + } + + /// + /// Get Uadp Flags + /// + public UADPFlagsEncodingMask UADPFlags { get; private set; } + + /// + /// Get ExtendedFlags1 + /// + public ExtendedFlags1EncodingMask ExtendedFlags1 { get; private set; } + + /// + /// Get ExtendedFlags2 + /// + public ExtendedFlags2EncodingMask ExtendedFlags2 { get; private set; } + + /// + /// Get and Set PublisherId type + /// + public object PublisherId + { + get { return m_publisherId; } + set + { + m_publisherId = value; + + // Remove previous PublisherId data type + ExtendedFlags1 &= (ExtendedFlags1EncodingMask)PublishedIdResetMask; + + // ExtendedFlags1: Bit range 0-2: PublisherId Type + PublisherIdTypeEncodingMask publishedIdTypeType = PublisherIdTypeEncodingMask.Reserved; + + if (m_publisherId is byte) + { + publishedIdTypeType = PublisherIdTypeEncodingMask.Byte; + } + else if (m_publisherId is UInt16) + { + publishedIdTypeType = PublisherIdTypeEncodingMask.UInt16; + } + else if (m_publisherId is UInt32) + { + publishedIdTypeType = PublisherIdTypeEncodingMask.UInt32; + } + else if (m_publisherId is UInt64) + { + publishedIdTypeType = PublisherIdTypeEncodingMask.UInt64; + } + else if (m_publisherId is String) + { + publishedIdTypeType = PublisherIdTypeEncodingMask.String; + } + + ExtendedFlags1 |= (ExtendedFlags1EncodingMask)publishedIdTypeType; + } + } + + /// + /// Get and Set DataSetClassId + /// + public Guid DataSetClassId { get; set; } + + #endregion + + #region Group Header + + /// + /// Get and Set GroupFlags + /// + public GroupFlagsEncodingMask GroupFlags { get; private set; } + + /// + /// Get and Set WriterGroupId + /// + public UInt16 WriterGroupId { get; set; } + + /// + /// Get and Set VersionTime type: it represents the time in seconds since the year 2000 + /// + public UInt32 GroupVersion { get; set; } + + /// + /// Get and Set NetworkMessageNumber + /// + public UInt16 NetworkMessageNumber { get; set; } + + /// + /// Get and Set SequenceNumber + /// + public UInt16 SequenceNumber { get; set; } + + #endregion + + #region NetworkMessage Header Extended (ExtendedNetwork Header) + + /// + /// Get and Set Timestamp + /// + public DateTime Timestamp { get; set; } + + /// + /// PicoSeconds + /// + public UInt16 PicoSeconds { get; set; } + + #endregion + + #region Security Header + + /// + /// Get and Set SecurityFlags + /// + public SecurityFlagsEncodingMask SecurityFlags { get; set; } + + /// + /// Get and Set SecurityTokenId has IntegerId type + /// + public uint SecurityTokenId { get; set; } + + /// + /// Get and Set NonceLength + /// + public byte NonceLength { get; set; } + + /// + /// Get and Set MessageNonce contains [NonceLength] + /// + public byte[] MessageNonce { get; set; } + + /// + /// Get and Set SecurityFooterSize + /// + public UInt16 SecurityFooterSize { get; set; } + + #endregion + + #region Security footer + + /// + /// Get and Set SecurityFooter + /// + public byte[] SecurityFooter { get; set; } + + #endregion + + #region Signature + + /// + /// Get and Set Signature + /// + public byte[] Signature { get; set; } + + #endregion + + #endregion + + #region Public Methods + + /// + /// Set network message content mask + /// + /// + public void SetNetworkMessageContentMask(UadpNetworkMessageContentMask networkMessageContentMask) + { + NetworkMessageContentMask = networkMessageContentMask; + + SetFlags(); + } + + /// + /// Encodes the object in a stream. + /// + public override void Encode(IEncoder encoder) + { + Encode(encoder as BinaryEncoder); + } + + #endregion + + #region Private Methods - Encoding + /// + /// Encodes the object in a binary stream. + /// + /// + private void Encode(BinaryEncoder binaryEncoder) + { + if (binaryEncoder == null) + { + throw new ArgumentException(nameof(binaryEncoder)); + } + EncodeNetworkMessageHeader(binaryEncoder); + EncodeGroupMessageHeader(binaryEncoder); + EncodePayloadHeader(binaryEncoder); + EncodeExtendedNetworkMessageHeader(binaryEncoder); + EncodeSecurityHeader(binaryEncoder); + EncodePayload(binaryEncoder); + EncodeSecurityFooter(binaryEncoder); + //EncodeSignature(encoder); + } + + + /// + /// Set All flags before encode/decode + /// + private void SetFlags() + { + UADPFlags = 0; + ExtendedFlags1 &= (ExtendedFlags1EncodingMask)PublishedIdTypeUsedBits; + ExtendedFlags2 = 0; + GroupFlags = 0; + + #region Network Message Header + + if ((NetworkMessageContentMask & (UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.DataSetClassId)) != 0) + { + // UADPFlags: The ExtendedFlags1 shall be omitted if bit 7 of the UADPFlags is false. + // Enable ExtendedFlags1 usage + UADPFlags |= UADPFlagsEncodingMask.ExtendedFlags1; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PublisherId) != 0) + { + // UADPFlags: Bit 4: PublisherId enabled + UADPFlags |= UADPFlagsEncodingMask.PublisherId; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.DataSetClassId) != 0) + { + // ExtendedFlags1 Bit 3: DataSetClassId enabled + ExtendedFlags1 |= ExtendedFlags1EncodingMask.DataSetClassId; + } + + #endregion + + #region Group Message Header + + if ((NetworkMessageContentMask & (UadpNetworkMessageContentMask.GroupHeader | + UadpNetworkMessageContentMask.WriterGroupId | + UadpNetworkMessageContentMask.GroupVersion | + UadpNetworkMessageContentMask.NetworkMessageNumber | + UadpNetworkMessageContentMask.SequenceNumber)) != + UadpNetworkMessageContentMask.None) + { + // UADPFlags: Bit 5: GroupHeader enabled + UADPFlags |= UADPFlagsEncodingMask.GroupHeader; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.WriterGroupId) != 0) + { + // GroupFlags: Bit 0: WriterGroupId enabled + GroupFlags |= GroupFlagsEncodingMask.WriterGroupId; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.GroupVersion) != 0) + { + // GroupFlags: Bit 1: GroupVersion enabled + GroupFlags |= GroupFlagsEncodingMask.GroupVersion; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.NetworkMessageNumber) != 0) + { + // GroupFlags: Bit 2: NetworkMessageNumber enabled + GroupFlags |= GroupFlagsEncodingMask.NetworkMessageNumber; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.SequenceNumber) != 0) + { + // GroupFlags: Bit 3: SequenceNumber enabled + GroupFlags |= GroupFlagsEncodingMask.SequenceNumber; + } + + #endregion + + #region Extended network message header + + if ((NetworkMessageContentMask & (UadpNetworkMessageContentMask.Timestamp | + UadpNetworkMessageContentMask.PicoSeconds | + UadpNetworkMessageContentMask.PromotedFields)) != 0) + { + // Enable ExtendedFlags1 usage + UADPFlags |= UADPFlagsEncodingMask.ExtendedFlags1; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.Timestamp) != 0) + { + // ExtendedFlags1: Bit 5: Timestamp enabled + ExtendedFlags1 |= ExtendedFlags1EncodingMask.Timestamp; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PicoSeconds) != 0) + { + // ExtendedFlags1: Bit 6: PicoSeconds enabled + ExtendedFlags1 |= ExtendedFlags1EncodingMask.PicoSeconds; + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PromotedFields) != 0) + { + // todo: + // ExtendedFlags1: Bit 7: ExtendedFlags2 enabled + ExtendedFlags1 |= ExtendedFlags1EncodingMask.ExtendedFlags2; + + // The PromotedFields shall be omitted if bit 4 of the ExtendedFlags2 is false. + // ExtendedFlags2: Bit 1: PromotedFields enabled + // Wireshark: PromotedFields; omitted if bit 1 of ExtendedFlags2 is false + ExtendedFlags2 |= ExtendedFlags2EncodingMask.PromotedFields; + + // Bit range 2-4: UADP NetworkMessage type + // 000 NetworkMessage with DataSetMessage payload for now + } + + #endregion + + #region PayLoad Header + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0) + { + // UADPFlag: Bit 6: PayloadHeader enabled + UADPFlags |= UADPFlagsEncodingMask.PayloadHeader; + } + + #endregion + + #region Security footer (not implemented yet) + + // ExtendedFlags1: Bit 4: Security enabled + // Disable security for now + ExtendedFlags1 &= ~(ExtendedFlags1EncodingMask.Security); + + // The security footer size shall be omitted if bit 2 of the SecurityFlags is false. + SecurityFlags &= ~(SecurityFlagsEncodingMask.SecurityFooter); + + #endregion + } + + /// + /// Decode the stream from decoder parameter and produce a Dataset + /// + /// + /// + /// + public List DecodeSubscribedDataSets(BinaryDecoder binaryDecoder, IEnumerable dataSetReaders) + { + List subscribedDataSets = new List(); + try + { + List dataSetReadersFiltered = new List(); + + // 1. decode network message header (PublisherId & DataSetClassId) + DecodeNetworkMessageHeader(binaryDecoder); + + //ignore network messages that are not dataSet messages + if (m_uadpNetworkMessageType != UADPNetworkMessageType.DataSetMessage + || PublisherId == null) + { + return subscribedDataSets; + } + + /* 6.2.8.1 PublisherId + The parameter PublisherId defines the Publisher to receive NetworkMessages from. + If the value is null, the parameter shall be ignored and all received NetworkMessages pass the PublisherId filter. */ + foreach (DataSetReaderDataType dataSetReader in dataSetReaders) + { + //check Enabled & publisher id + if (PublisherId.Equals(dataSetReader.PublisherId.Value)) + { + dataSetReadersFiltered.Add(dataSetReader); + } + } + if (dataSetReadersFiltered.Count == 0) + { + return subscribedDataSets; + } + dataSetReaders = dataSetReadersFiltered; + + //continue filtering + dataSetReadersFiltered = new List(); + + // 2. decode WriterGroupId + DecodeGroupMessageHeader(binaryDecoder); + /* 6.2.8.2 WriterGroupId + The parameter WriterGroupId with DataType UInt16 defines the identifier of the corresponding WriterGroup. + The default value 0 is defined as null value, and means this parameter shall be ignored.*/ + foreach (DataSetReaderDataType dataSetReader in dataSetReaders) + { + //check WriterGroupId id + if (dataSetReader.WriterGroupId == 0 || dataSetReader.WriterGroupId == WriterGroupId) + { + dataSetReadersFiltered.Add(dataSetReader); + } + } + if (dataSetReadersFiltered.Count == 0) + { + return subscribedDataSets; + } + dataSetReaders = dataSetReadersFiltered; + + // 3. decode payload header + DecodePayloadHeader(binaryDecoder); + // 4. + DecodeExtendedNetworkMessageHeader(binaryDecoder); + // 5. + DecodeSecurityHeader(binaryDecoder); + + //6.1 + DecodePayloadSize(binaryDecoder); + + /* 6.2.8.3 DataSetWriterId + The parameter DataSetWriterId with DataType UInt16 defines the DataSet selected in the Publisher for the DataSetReader. + If the value is 0 (null), the parameter shall be ignored and all received DataSetMessages pass the DataSetWriterId filter.*/ + foreach (DataSetReaderDataType dataSetReader in dataSetReaders) + { + List uadpDataSetMessages = new List(m_uadpDataSetMessages); + //if there is no information regarding dataSet in network message, add dummy datasetMessage to try decoding + if (uadpDataSetMessages.Count == 0) + { + uadpDataSetMessages.Add(new UadpDataSetMessage()); + } + // 6.2 Decode payload into DataSets + // Restore the encoded fields (into dataset for now) for each possible dataset reader + foreach (UadpDataSetMessage uadpDataSetMessage in uadpDataSetMessages) + { + if (dataSetReader.DataSetWriterId == 0 || uadpDataSetMessage.DataSetWriterId == dataSetReader.DataSetWriterId) + { + //decode dataset message using the reader + DataSet dataSet = uadpDataSetMessage.DecodePossibleDataSetReader(binaryDecoder, dataSetReader); + if (dataSet != null) + { + subscribedDataSets.Add(dataSet); + } + } + } + } + } + catch(Exception ex) + { + // Unexpected exception in DecodeSubscribedDataSets + Utils.Trace(ex, "UadpNetworkMessage.DecodeSubscribedDataSets"); + } + return subscribedDataSets; + } + + /// + /// Encode Network Message Header + /// + /// + private void EncodeNetworkMessageHeader(BinaryEncoder encoder) + { + // byte[0..3] UADPVersion value 1 (for now) + // byte[4..7] UADPFlags + encoder.WriteByte("VersionFlags", (byte) (UADPVersion | (byte)UADPFlags)); + + if((UADPFlags & UADPFlagsEncodingMask.ExtendedFlags1) !=0) + { + encoder.WriteByte("ExtendedFlags1", (byte)ExtendedFlags1); + } + + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.ExtendedFlags2) != 0) + { + encoder.WriteByte("ExtendedFlags2", (byte)ExtendedFlags2); + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PublisherId) != 0) + { + PublisherIdTypeEncodingMask publisherIdType = (PublisherIdTypeEncodingMask)((byte)ExtendedFlags1 & PublishedIdTypeUsedBits); + switch (publisherIdType) + { + case PublisherIdTypeEncodingMask.Byte: + encoder.WriteByte("PublisherId", Convert.ToByte(PublisherId)); + break; + case PublisherIdTypeEncodingMask.UInt16: + encoder.WriteUInt16("PublisherId", Convert.ToUInt16(PublisherId)); + break; + case PublisherIdTypeEncodingMask.UInt32: + encoder.WriteUInt32("PublisherId", Convert.ToUInt32(PublisherId)); + break; + case PublisherIdTypeEncodingMask.UInt64: + encoder.WriteUInt64("PublisherId", Convert.ToUInt64(PublisherId)); + break; + case PublisherIdTypeEncodingMask.String: + encoder.WriteString("PublisherId", Convert.ToString(PublisherId)); + break; + default: + // Reserved - no type provided + break; + } + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.DataSetClassId) != 0) + { + encoder.WriteGuid("DataSetClassId", DataSetClassId); + } + + } + + /// + /// Encode Group Message Header + /// + /// + private void EncodeGroupMessageHeader(BinaryEncoder encoder) + { + if ((NetworkMessageContentMask & (UadpNetworkMessageContentMask.GroupHeader | + UadpNetworkMessageContentMask.WriterGroupId | + UadpNetworkMessageContentMask.GroupVersion | + UadpNetworkMessageContentMask.NetworkMessageNumber | + UadpNetworkMessageContentMask.SequenceNumber)) != UadpNetworkMessageContentMask.None) + { + encoder.WriteByte("GroupFlags", (byte)GroupFlags); + } + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.WriterGroupId) != 0) + { + encoder.WriteUInt16("WriterGroupId", WriterGroupId); + } + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.GroupVersion) != 0) + { + encoder.WriteUInt32("GroupVersion", GroupVersion); + } + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.NetworkMessageNumber) != 0) + { + encoder.WriteUInt16("NetworkMessageNumber", NetworkMessageNumber); + } + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.SequenceNumber) != 0) + { + encoder.WriteUInt16("SequenceNumber", SequenceNumber); + } + } + + /// + /// Encode Payload Header + /// + /// + private void EncodePayloadHeader(BinaryEncoder encoder) + { + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0) + { + encoder.WriteByte("Count", (byte) m_uadpDataSetMessages.Count); + + // Collect DataSetSetMessages headers + for (int index = 0; index < m_uadpDataSetMessages.Count; index++) + { + UadpDataSetMessage uadpDataSetMessage = m_uadpDataSetMessages[index]; + if (uadpDataSetMessage.DataSet != null) + { + encoder.WriteUInt16("DataSetWriterId", uadpDataSetMessage.DataSetWriterId); + } + } + } + } + + /// + /// Encode Extended network message header + /// + /// + private void EncodeExtendedNetworkMessageHeader(BinaryEncoder encoder) + { + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.Timestamp) != 0) + { + encoder.WriteDateTime("Timestamp", Timestamp); + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PicoSeconds) != 0) + { + encoder.WriteUInt16("PicoSeconds", PicoSeconds); + } + + if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PromotedFields) != 0) + { + EncodePromotedFields(encoder); + } + } + + /// + /// Encode promoted fields + /// + /// + private void EncodePromotedFields(BinaryEncoder encoder) + { + // todo: Promnoted fields not supported + } + + /// + /// Encode security header + /// + /// + private void EncodeSecurityHeader(BinaryEncoder encoder) + { + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.Security) != 0) + { + encoder.WriteByte("SecurityFlags", (byte)SecurityFlags); + + encoder.WriteUInt32("SecurityTokenId", SecurityTokenId); + encoder.WriteByte("NonceLength", NonceLength); + MessageNonce = new byte[NonceLength]; + encoder.WriteByteArray("MessageNonce", MessageNonce); + + if ((SecurityFlags & SecurityFlagsEncodingMask.SecurityFooter) != 0) + { + encoder.WriteUInt16("SecurityFooterSize", SecurityFooterSize); + } + } + } + + /// + /// Encode payload + /// + /// + private void EncodePayload(BinaryEncoder encoder) + { + int payloadStartPositionInStream = encoder.Position; + if (m_uadpDataSetMessages.Count > 1 + && (NetworkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0) + { + //skip 2 * dataset count for each dataset payload size + encoder.Position = encoder.Position + 2 * m_uadpDataSetMessages.Count; + } + //encode dataset message payload + foreach (UadpDataSetMessage uadpDataSetMessage in m_uadpDataSetMessages) + { + uadpDataSetMessage.Encode(encoder); + } + + if (m_uadpDataSetMessages.Count > 1 + && (NetworkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0) + { + int payloadEndPositionInStream = encoder.Position; + encoder.Position = payloadStartPositionInStream; + foreach (UadpDataSetMessage uadpDataSetMessage in m_uadpDataSetMessages) + { + encoder.WriteUInt16("Size", uadpDataSetMessage.PayloadSizeInStream); + } + encoder.Position = payloadEndPositionInStream; + } + } + + /// + /// Encode security footer + /// + /// + private void EncodeSecurityFooter(BinaryEncoder encoder) + { + if ((SecurityFlags & SecurityFlagsEncodingMask.SecurityFooter) != 0) + { + encoder.WriteByteArray("SecurityFooter", SecurityFooter); + } + } + + /// + /// Encode signature + /// + /// + private void EncodeSignature(BinaryEncoder encoder) + { + // encoder.WriteByteArray("Signature", Signature); + } + + #endregion + + #region Private Methods - Decoding + + /// + /// Encode Network Message Header + /// + /// + private void DecodeNetworkMessageHeader(BinaryDecoder decoder) + { + // byte[0..3] UADPVersion value 1 (for now) + // byte[4..7] UADPFlags + byte versionFlags = decoder.ReadByte("VersionFlags"); + UADPVersion = (byte)(versionFlags & UADPVersionBitMask); + // Decode UADPFlags + UADPFlags = (UADPFlagsEncodingMask)(versionFlags & 0xF0); + + // Decode the ExtendedFlags1 + if ((UADPFlags & UADPFlagsEncodingMask.ExtendedFlags1) != 0) + { + ExtendedFlags1 = (ExtendedFlags1EncodingMask)decoder.ReadByte("ExtendedFlags1"); + } + + // Decode the ExtendedFlags2 + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.ExtendedFlags2) != 0) + { + ExtendedFlags2 = (ExtendedFlags2EncodingMask)decoder.ReadByte("ExtendedFlags2"); + } + // calculate UADPNetworkMessageType + if ((ExtendedFlags2 & ExtendedFlags2EncodingMask.NetworkMessageWithDiscoveryRequest) != 0) + { + m_uadpNetworkMessageType = UADPNetworkMessageType.DiscoveryRequest; + } + else if ((ExtendedFlags2 & ExtendedFlags2EncodingMask.NetworkMessageWithDiscoveryResponse) != 0) + { + m_uadpNetworkMessageType = UADPNetworkMessageType.DiscoveryResponse; + } + else + { + m_uadpNetworkMessageType = UADPNetworkMessageType.DataSetMessage; + } + + // Decode PublisherId + if ((UADPFlags & UADPFlagsEncodingMask.PublisherId) != 0) + { + PublisherIdTypeEncodingMask publishedIdTypeType = (PublisherIdTypeEncodingMask)((byte)ExtendedFlags1 & PublishedIdTypeUsedBits); + + switch (publishedIdTypeType) + { + case PublisherIdTypeEncodingMask.UInt16: + m_publisherId = decoder.ReadUInt16("PublisherId"); + break; + case PublisherIdTypeEncodingMask.UInt32: + m_publisherId = decoder.ReadUInt32("PublisherId"); + break; + case PublisherIdTypeEncodingMask.UInt64: + m_publisherId = decoder.ReadUInt64("PublisherId"); + break; + case PublisherIdTypeEncodingMask.String: + m_publisherId = decoder.ReadString("PublisherId"); + break; + case PublisherIdTypeEncodingMask.Byte: + default: + // 000 The PublisherId is of DataType Byte + // This is the default value if ExtendedFlags1 is omitted + m_publisherId = decoder.ReadByte("PublisherId"); + break; + } + } + + // Decode DataSetClassId + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.DataSetClassId) != 0) + { + DataSetClassId = decoder.ReadGuid("DataSetClassId"); + } + } + + /// + /// Decode Group Message Header + /// + /// + private void DecodeGroupMessageHeader(BinaryDecoder decoder) + { + // Decode GroupHeader (that holds GroupFlags) + if ((UADPFlags & UADPFlagsEncodingMask.GroupHeader) != 0) + { + GroupFlags = (GroupFlagsEncodingMask)decoder.ReadByte("GroupFlags"); + } + + // Decode WriterGroupId + if ((GroupFlags & GroupFlagsEncodingMask.WriterGroupId) != 0) + { + WriterGroupId = decoder.ReadUInt16("WriterGroupId"); + } + + // Decode GroupVersion + if ((GroupFlags & GroupFlagsEncodingMask.GroupVersion) != 0) + { + GroupVersion = decoder.ReadUInt32("GroupVersion"); + } + + // Decode NetworkMessageNumber + if ((GroupFlags & GroupFlagsEncodingMask.NetworkMessageNumber) != 0) + { + NetworkMessageNumber = decoder.ReadUInt16("NetworkMessageNumber"); + } + + // Decode SequenceNumber + if ((GroupFlags & GroupFlagsEncodingMask.SequenceNumber) != 0) + { + SequenceNumber = decoder.ReadUInt16("SequenceNumber"); + } + } + + /// + /// Decode Payload Header + /// + /// + private void DecodePayloadHeader(BinaryDecoder decoder) + { + // Decode PayloadHeader + if ((UADPFlags & UADPFlagsEncodingMask.PayloadHeader) != 0) + { + byte count = decoder.ReadByte("Count"); + for (int idx = 0; idx < count; idx++) + { + m_uadpDataSetMessages.Add(new UadpDataSetMessage()); + } + + // collect DataSetSetMessages headers + foreach (UadpDataSetMessage uadpDataSetMessage in m_uadpDataSetMessages) + { + uadpDataSetMessage.DataSetWriterId = decoder.ReadUInt16("DataSetWriterId"); + } + } + } + + /// + /// Decode extended network message header + /// + private void DecodeExtendedNetworkMessageHeader(BinaryDecoder decoder) + { + // Decode Timestamp + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.Timestamp) != 0) + { + Timestamp = decoder.ReadDateTime("Timestamp"); + } + + // Decode PicoSeconds + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.PicoSeconds) != 0) + { + PicoSeconds = decoder.ReadUInt16("PicoSeconds"); + } + + // Decode Promoted Fields + if ((ExtendedFlags2 & ExtendedFlags2EncodingMask.PromotedFields) != 0) + { + DecodePromotedFields(decoder); + } + } + + /// + /// Decode promoted fields + /// + /// + private void DecodePromotedFields(BinaryDecoder decoder) + { + // todo: + } + + /// + /// Decode payload size and prepare for decoding payload + /// + /// + private void DecodePayloadSize(BinaryDecoder decoder) + { + if (m_uadpDataSetMessages.Count > 1) + { + // Decode PayloadHeader Size + if ((UADPFlags & UADPFlagsEncodingMask.PayloadHeader) != 0) + { + foreach (UadpDataSetMessage uadpDataSetMessage in m_uadpDataSetMessages) + { + // Save the size + uadpDataSetMessage.PayloadSizeInStream = decoder.ReadUInt16("Size"); + } + } + } + BinaryDecoder binaryDecoder = decoder as BinaryDecoder; + if (binaryDecoder != null) + { + int offset = 0; + // set start position of dataset message in binary stream + foreach (UadpDataSetMessage uadpDataSetMessage in m_uadpDataSetMessages) + { + uadpDataSetMessage.StartPositionInStream = binaryDecoder.Position + offset; + offset += uadpDataSetMessage.PayloadSizeInStream; + } + } + } + + /// + /// Decode security header + /// + /// + private void DecodeSecurityHeader(BinaryDecoder decoder) + { + if ((ExtendedFlags1 & ExtendedFlags1EncodingMask.Security) != 0) + { + SecurityFlags = (SecurityFlagsEncodingMask)decoder.ReadByte("SecurityFlags"); + + SecurityTokenId = decoder.ReadUInt32("SecurityTokenId"); + NonceLength = decoder.ReadByte("NonceLength"); + MessageNonce = decoder.ReadByteArray("MessageNonce").ToArray(); + + if ((SecurityFlags & SecurityFlagsEncodingMask.SecurityFooter) != 0) + { + SecurityFooterSize = decoder.ReadUInt16("SecurityFooterSize"); + } + } + } + + /// + /// Decode security footer + /// + /// + private void DecodeSecurityFooter(BinaryDecoder decoder) + { + if ((SecurityFlags & SecurityFlagsEncodingMask.SecurityFooter) != 0) + { + SecurityFooter = decoder.ReadByteArray("SecurityFooter").ToArray(); + } + } + + /// + /// Decode signature + /// + /// + private void DecodeSignature(BinaryDecoder decoder) + { + // Signature = decoder.ReadByteArray("Signature").ToArray(); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpPubSubConnection.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpPubSubConnection.cs new file mode 100644 index 00000000..a2721d70 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UadpPubSubConnection.cs @@ -0,0 +1,482 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.PubSub.PublishedData; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading.Tasks; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// UADP implementation of class. + /// + internal class UadpPubSubConnection : UaPubSubConnection + { + #region Private Fields + private List m_publisherUdpClients = new List(); + private List m_subscriberUdpClients = new List(); + + private static int m_sequenceNumber = 0; + private static int m_dataSetSequenceNumber = 0; + + + /// + /// Event that is triggered when the receives and decodes subscribed DataSets + /// + internal event EventHandler UadpMessageReceived; + + #endregion + + #region Constructor + + /// + /// Create new instance of from configuration data + /// + /// + /// + public UadpPubSubConnection(UaPubSubApplication uaPubSubApplication, PubSubConnectionDataType pubSubConnectionDataType) + : base(uaPubSubApplication, pubSubConnectionDataType) + { + m_transportProtocol = TransportProtocol.UADP; + } + + #endregion + + #region Public Properties + + /// + /// Get the from configured .Address. + /// + public string NetworkInterfaceName { get; set; } + + /// + /// Get the from configured .Address. + /// + public IPEndPoint NetworkAddressEndPoint { get; private set; } + + /// + /// Get the port from configured .Address + /// + public int Port { get; private set; } + #endregion + + #region UaPubSubConnection - Overrides + + /// + /// Initialize UADP connection and return true if success. + /// + /// + protected override bool InternalInitialize() + { + return true; + } + + /// + /// Perform specific Start tasks + /// + protected override void InternalStart() + { + lock (m_lock) + { + //cleanup all existing UdpClient previously open + InternalStop(); + + NetworkAddressUrlDataType networkAddressUrlState = ExtensionObject.ToEncodeable(PubSubConnectionConfiguration.Address) + as NetworkAddressUrlDataType; + if (networkAddressUrlState == null) + { + Utils.Trace(Utils.TraceMasks.Error, "The configuration for connection {0} has invalid Address configuration.", + this.PubSubConnectionConfiguration.Name); + return; + } + NetworkInterfaceName = networkAddressUrlState.NetworkInterface; + NetworkAddressEndPoint = UdpClientCreator.GetEndPoint(networkAddressUrlState.Url); + + if (NetworkAddressEndPoint == null) + { + Utils.Trace(Utils.TraceMasks.Error, "The configuration for connection {0} with Url:'{1}' resulted in an invalid endpoint.", + this.PubSubConnectionConfiguration.Name, networkAddressUrlState.Url); + return; + } + + //publisher initialization + if (Publishers.Count > 0) + { + m_publisherUdpClients = UdpClientCreator.GetUdpClients(UsedInContext.Publisher, networkAddressUrlState, NetworkAddressEndPoint); + } + + //subscriber initialization + if (DataSetReaders.Count > 0) + { + m_subscriberUdpClients = UdpClientCreator.GetUdpClients(UsedInContext.Subscriber, networkAddressUrlState, NetworkAddressEndPoint); + + foreach(UdpClient subscriberUdpClient in m_subscriberUdpClients) + { + try + { + subscriberUdpClient.BeginReceive(new AsyncCallback(OnUadpReceive), subscriberUdpClient); + } + catch(Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "UdpClient '{0}' Cannot receive data. Exception: {1}", + subscriberUdpClient.Client.LocalEndPoint, ex.Message); + } + } + } + } + } + + /// + /// Perform specific Stop tasks + /// + protected override void InternalStop() + { + lock (m_lock) + { + if (m_publisherUdpClients != null && m_publisherUdpClients.Count > 0) + { + foreach (var udpClient in m_publisherUdpClients) + { + udpClient.Close(); + udpClient.Dispose(); + } + m_publisherUdpClients.Clear(); + } + + if (m_subscriberUdpClients != null && m_subscriberUdpClients.Count > 0) + { + foreach (var udpClient in m_subscriberUdpClients) + { + udpClient.Close(); + udpClient.Dispose(); + } + m_subscriberUdpClients.Clear(); + } + } + } + + + /// + /// Create the network message built from the provided writerGroupConfiguration + /// + /// + /// + public override UaNetworkMessage CreateNetworkMessage(WriterGroupDataType writerGroupConfiguration) + { + UadpWriterGroupMessageDataType messageSettings = ExtensionObject.ToEncodeable(writerGroupConfiguration.MessageSettings) + as UadpWriterGroupMessageDataType; + if (messageSettings == null) + { + //Wrong configuration of writer group MessageSettings + return null; + } + + //Create list of dataSet messages to be sent + List dataSetMessages = new List(); + foreach (DataSetWriterDataType dataSetWriter in writerGroupConfiguration.DataSetWriters) + { + //check if dataSetWriter enabled + if (dataSetWriter.Enabled) + { + DataSet dataSet = Application.DataCollector.CollectData(dataSetWriter.DataSetName); + if (dataSet != null) + { + UadpDataSetWriterMessageDataType dataSetMessageSettings = + ExtensionObject.ToEncodeable(dataSetWriter.MessageSettings) as + UadpDataSetWriterMessageDataType; + // check MessageSettings to see how to encode DataSet + if (dataSetMessageSettings != null) + { + UadpDataSetMessage uadpDataSetMessage = new UadpDataSetMessage(dataSet); + uadpDataSetMessage.DataSetWriterId = dataSetWriter.DataSetWriterId; + uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageSettings.DataSetMessageContentMask); + uadpDataSetMessage.SetFieldContentMask((DataSetFieldContentMask)dataSetWriter.DataSetFieldContentMask); + uadpDataSetMessage.SequenceNumber = (ushort)(Utils.IncrementIdentifier(ref m_dataSetSequenceNumber) % UInt16.MaxValue); + uadpDataSetMessage.ConfiguredSize = dataSetMessageSettings.ConfiguredSize; + uadpDataSetMessage.DataSetOffset = dataSetMessageSettings.DataSetOffset; + uadpDataSetMessage.TimeStamp = DateTime.UtcNow; + uadpDataSetMessage.Status = (ushort)StatusCodes.Good; + dataSetMessages.Add(uadpDataSetMessage); + } + } + } + } + + //cancel send if no dataset message + if (dataSetMessages.Count == 0) + { + return null; + } + + UadpNetworkMessage uadpNetworkMessage = new UadpNetworkMessage(dataSetMessages); + uadpNetworkMessage.SetNetworkMessageContentMask((UadpNetworkMessageContentMask)messageSettings.NetworkMessageContentMask); + uadpNetworkMessage.WriterGroupId = writerGroupConfiguration.WriterGroupId; + // Network message header + uadpNetworkMessage.PublisherId = PubSubConnectionConfiguration.PublisherId.Value; + uadpNetworkMessage.SequenceNumber = (ushort)(Utils.IncrementIdentifier(ref m_sequenceNumber) % UInt16.MaxValue); + + // Writer group header + uadpNetworkMessage.GroupVersion = messageSettings.GroupVersion; + uadpNetworkMessage.NetworkMessageNumber = 1; //only one network message per publish + + return uadpNetworkMessage; + } + + /// + /// Publish the network message + /// + /// + /// + public override bool PublishNetworkMessage(UaNetworkMessage networkMessage) + { + if (networkMessage == null || m_publisherUdpClients == null || m_publisherUdpClients.Count == 0) + { + return false; + } + + try + { + lock (m_lock) + { + if (m_publisherUdpClients != null && m_publisherUdpClients.Count > 0) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + BinaryEncoder encoder = new BinaryEncoder(messageContext); + networkMessage.Encode(encoder); + byte[] bytes = ReadBytes(encoder.BaseStream); + encoder.Dispose(); + + foreach(var udpClient in m_publisherUdpClients) + { + try + { + int sent = udpClient.Send(bytes, bytes.Length, NetworkAddressEndPoint); + } + catch(Exception ex) + { + Utils.Trace(ex, "UadpPubSubConnection.PublishNetworkMessage"); + return false; + } + } + return true; + } + } + } + catch (Exception ex) + { + Utils.Trace(ex, "UadpPubSubConnection.PublishNetworkMessage"); + return false; + } + + return false; + } + + #endregion + + #region Private methods + /// + /// Process the bytes received from UADP channel + /// + /// + /// + private void ProcessReceivedMessage(byte[] message, IPEndPoint source) + { + Utils.Trace(Utils.TraceMasks.Information, "UadpPubSubConnection.ProcessReceivedMessage from source={0}", source); + ServiceMessageContext messageContext = new ServiceMessageContext(); + + using (BinaryDecoder decoder = new BinaryDecoder(message, messageContext)) + { + UadpNetworkMessage uadpNetworkMessage = new UadpNetworkMessage(); + //decode bytes using dataset reader information + var subscribedDataSets = uadpNetworkMessage.DecodeSubscribedDataSets(decoder, DataSetReaders); + if (subscribedDataSets != null && subscribedDataSets.Count > 0) + { + //trigger notification for received subscribed data set + Application.RaiseDataReceivedEvent( + new SubscribedDataEventArgs() + { + NetworkMessageSequenceNumber = uadpNetworkMessage.SequenceNumber, + DataSets = subscribedDataSets, + SourceEndPoint = source + } + ); + Utils.Trace(Utils.TraceMasks.Information, + "UadpPubSubConnection.RaiseDataReceivedEvent from source={0}, with {1} DataSets", source, subscribedDataSets.Count); + } + else + { + Utils.Trace(Utils.TraceMasks.Information, + "Message from source={0} cannot be decoded.", source); + } + } + } + + /// + /// Handle Receive event for an UADP channel + /// + /// + private void OnUadpReceive(IAsyncResult result) + { + lock (m_lock) + { + if (m_subscriberUdpClients == null || m_subscriberUdpClients.Count == 0) + { + return; + } + } + + // this is what had been passed into BeginReceive as the second parameter: + UdpClient socket = result.AsyncState as UdpClient; + // points towards whoever had sent the message: + IPEndPoint source = new IPEndPoint(0, 0); + // get the actual message and fill out the source: + try + { + byte[] message = socket.EndReceive(result, ref source); + + RaiseUadpDataReceivedEvent( + new UadpDataEventArgs() + { + Message = message, + SourceEndPoint = source + }); + + Utils.Trace(Utils.TraceMasks.Information, "OnUadpReceive received message with length {0} from {1}", message.Length, source.Address); + + if (message != null && message.Length > 1) + { + // call on a new thread + Task.Run(() => + { + ProcessReceivedMessage(message, source); + }); + } + } + catch (Exception ex) + { + Utils.Trace(ex, "OnUadpReceive from {0}", source.Address); + } + + try + { + // schedule the next receive operation once reading is done: + socket.BeginReceive(new AsyncCallback(OnUadpReceive), socket); + } + catch (Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "OnUadpReceive BeginReceive throwed Exception {0}", ex.Message); + + lock (m_lock) + { + Renew(socket); + } + } + + } + + /// + /// Re initializes the socket + /// + /// The socket which should be reinitialized + private void Renew(UdpClient socket) + { + UdpClient newsocket = null; + + if (socket is UdpClientMulticast mcastSocket) + { + newsocket = new UdpClientMulticast(mcastSocket.Address, mcastSocket.MulticastAddress, mcastSocket.Port); + } + else if (socket is UdpClientBroadcast bcastSocket) + { + newsocket = new UdpClientBroadcast(bcastSocket.Address, bcastSocket.Port, bcastSocket.PubSubContext); + } + else if (socket is UdpClientUnicast ucastSocket) + { + newsocket = new UdpClientUnicast(ucastSocket.Address, ucastSocket.Port); + } + m_subscriberUdpClients.Remove(socket); + m_subscriberUdpClients.Add(newsocket); + socket.Close(); + socket.Dispose(); + + newsocket.BeginReceive(new AsyncCallback(OnUadpReceive), newsocket); + } + + /// + /// Read All bytes from a given stream + /// + /// + /// + private byte[] ReadBytes(Stream stream) + { + stream.Position = 0; + using (MemoryStream ms = new MemoryStream()) + { + stream.CopyTo(ms); + return ms.ToArray(); + } + } + + + /// + /// Raise DataReceived event + /// + /// + internal void RaiseUadpDataReceivedEvent(UadpDataEventArgs e) + { + try + { + if (UadpMessageReceived != null) + { + UadpMessageReceived(this, e); + } + } + catch (Exception ex) + { + Utils.Trace(ex, "UaPubSubConnection.RaiseSubscriptionReceivedEvent"); + } + } + + /// + /// Resets SequenceNumber + /// + internal void ResetSequenceNumber() + { + m_sequenceNumber = 0; + m_dataSetSequenceNumber = 0; + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientBroadcast.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientBroadcast.cs new file mode 100644 index 00000000..ebe4935a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientBroadcast.cs @@ -0,0 +1,120 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Net; +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// This class handles the broadcast message sending. + /// It enables fine tuning the routing option of the internal socket and binding to a specified endpoint so that the messages are routed on a corresponding + /// interface (the one to which the endpoint belongs to). + /// + internal class UdpClientBroadcast : UdpClient + { + internal IPAddress Address { get; } + internal int Port { get; } + internal UsedInContext PubSubContext { get; } + + #region Constructors + /// + /// Instantiates a UDP Broadcast client + /// + /// The IPAddress which the socket should be bound to + /// The port used by the endpoint that should different than 0 on a Subscriber context + /// The context in which the UDP client is to be used + public UdpClientBroadcast(IPAddress address, int port, UsedInContext pubSubContext) + { + Address = address; + Port = port; + PubSubContext = pubSubContext; + + CustomizeSocketToBroadcastThroughIf(); + + IPEndPoint boundEndpoint = null; + if( !RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || pubSubContext == UsedInContext.Publisher) + {//Running on Windows or Publisher on Windows/Linux + boundEndpoint = new IPEndPoint(address, port); + } + else + {//Running on Linux and Subscriber + // On Linux must bind to IPAddress.Any on receiving side to get Broadcast messages + boundEndpoint = new IPEndPoint(IPAddress.Any, port); + } + + Client.Bind(boundEndpoint); + EnableBroadcast = true; + } + #endregion + + #region Private methods + /// + /// Explicitly specifies that routing the packets to a specific interface is enabled + /// and should broadcast only on the interface (to which the socket is bound) + /// + private void CustomizeSocketToBroadcastThroughIf() + { + Socket s = Client; + + Action setSocketOption = (SocketOptionLevel socketOptionLevel, SocketOptionName socketOptionName, bool value) => + { + try + { + s.SetSocketOption(socketOptionLevel, socketOptionName, value); + } + catch (Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "UdpClientBroadcast set SetSocketOption {1} to {2} resulted in ex {0}", ex.Message, SocketOptionName.Broadcast, value); + }; + }; + setSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); + setSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontRoute, false); + setSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + try + { + ExclusiveAddressUse = false; + } + catch (Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "UdpClientBroadcast set ExclusiveAddressUse to false resulted in ex {0}", ex.Message); + } + + } + } + #endregion + + } + +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientCreator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientCreator.cs new file mode 100644 index 00000000..9f0f9391 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientCreator.cs @@ -0,0 +1,296 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Text; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// Where is a method call used in + /// + public enum UsedInContext + { + /// + /// Publisher context call + /// + Publisher, + /// + /// Subscriber context call + /// + Subscriber + }; + + /// + /// Specialized in creating the necessary instances from an URL + /// + internal class UdpClientCreator + { + public const int SIO_UDP_CONNRESET = -1744830452; + + /// + /// Parse the url into an IPaddress and port number + /// + /// + /// A new instance of or null if invalid URL. + internal static IPEndPoint GetEndPoint(string url) + { + Uri connectionUri; + if (url != null && Uri.TryCreate(url, UriKind.Absolute, out connectionUri)) + { + if (connectionUri.Scheme != Utils.UriSchemeOpcUdp) + { + Utils.Trace(Utils.TraceMasks.Error, "Invalid Scheme specified in URL: {0}", url); + return null; + } + if (connectionUri.Port < 0) + { + Utils.Trace(Utils.TraceMasks.Error, "Invalid Port specified in URL: {0}", url); + return null; + } + string hostName = connectionUri.Host; + if (hostName.ToLower() == "localhost") + { + hostName = "127.0.0.1"; + } + + IPAddress ipAddress; + if (IPAddress.TryParse(hostName, out ipAddress)) + { + return new IPEndPoint(ipAddress, connectionUri.Port); + } + try + { + IPHostEntry hostEntry = Dns.GetHostEntry(hostName); + + //you might get more than one IP for a hostname since + //DNS supports more than one record + foreach(IPAddress address in hostEntry.AddressList) + { + if (address.AddressFamily == AddressFamily.InterNetwork) + { + return new IPEndPoint(address, connectionUri.Port); + } + } + } + catch(Exception ex) + { + Utils.Trace(ex, "Could not resolve host name: {0}", hostName); + } + } + return null; + } + + /// + /// Creates and returns a list of created based on configuration options + /// + /// Is the method called in a publisher context or a subscriber context + /// The configuration object . + /// The configured that will be used for data exchange. + /// + internal static List GetUdpClients(UsedInContext pubSubContext, NetworkAddressUrlDataType networkAddressUrl, IPEndPoint configuredEndpoint) + { + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("networkAddressUrl.NetworkInterface = {0} \n", networkAddressUrl != null ? networkAddressUrl.NetworkInterface : "null"); + buffer.AppendFormat("networkAddressUrl.Url = {0} \n", networkAddressUrl.Url != null ? networkAddressUrl.Url : "null"); + buffer.AppendFormat("configuredEndpoint = {0}", configuredEndpoint != null ? configuredEndpoint.ToString() : "null"); + + Utils.Trace(Utils.TraceMasks.Information, buffer.ToString()); + + List udpClients = new List(); + //validate input parameters + if (networkAddressUrl == null || configuredEndpoint == null) + { + //log warning? + return udpClients; + } + //detect the list on network interfaces that will be used for creating the UdpClient s + List usableNetworkInterfaces = new List(); + var interfaces = NetworkInterface.GetAllNetworkInterfaces(); + if (string.IsNullOrEmpty(networkAddressUrl.NetworkInterface)) + { + Utils.Trace(Utils.TraceMasks.Information, "No NetworkInterface name was provided. Use all available NICs."); + usableNetworkInterfaces.AddRange(interfaces); + } + else + { + //the configuration contains a NetworkInterface name, try to locate it + foreach (NetworkInterface nic in interfaces) + { + if (nic.Name.Equals(networkAddressUrl.NetworkInterface, StringComparison.OrdinalIgnoreCase)) + { + usableNetworkInterfaces.Add(nic); + } + } + if (usableNetworkInterfaces.Count == 0) + { + Utils.Trace(Utils.TraceMasks.Information, "The configured value for NetworkInterface name('{0}') could not be used.", networkAddressUrl.NetworkInterface); + usableNetworkInterfaces.AddRange(interfaces); + } + } + + foreach (NetworkInterface nic in usableNetworkInterfaces) + { + Utils.Trace(Utils.TraceMasks.Information, "NetworkInterface name('{0}') attempts to create instance of UdpClient.", nic.Name); + //ignore loop-back interface + if (nic.NetworkInterfaceType == NetworkInterfaceType.Loopback) continue; + //ignore tunnel interface + if (nic.NetworkInterfaceType == NetworkInterfaceType.Tunnel) continue; + UdpClient udpClient = CreateUdpClientForNetworkInterface(pubSubContext, nic, configuredEndpoint); + if (udpClient == null) continue; + //store UdpClient + udpClients.Add(udpClient); + Utils.Trace(Utils.TraceMasks.Information, "NetworkInterface name('{0}') UdpClient successfully created.", nic.Name); + } + return udpClients; + } + + /// + /// Create specific for specified and . + /// + /// Is the method called in a publisher context or a subscriber context + /// + /// + /// + private static UdpClient CreateUdpClientForNetworkInterface(UsedInContext pubSubContext, NetworkInterface networkInterface, IPEndPoint configuredEndpoint) + { + UdpClient udpClient = null; + IPInterfaceProperties ipProps = networkInterface.GetIPProperties(); + IPAddress localAddress = IPAddress.Any; + + foreach (var address in ipProps.UnicastAddresses) + { + if (address.Address.AddressFamily == AddressFamily.InterNetwork) + { + localAddress = address.Address; + } + } + + try + { + //detect the port used for binding + int port = 0; + if (pubSubContext == UsedInContext.Subscriber) + { + port = configuredEndpoint.Port; + } + if (IsIPv4MulticastAddress(configuredEndpoint.Address)) + { + //instantiate multi-cast UdpClient + udpClient = new UdpClientMulticast(localAddress, configuredEndpoint.Address, port); + } + else if (IsIPv4BroadcastAddress(configuredEndpoint.Address, networkInterface)) + { + //instantiate broadcast UdpClient depending on publisher/subscriber usage context + udpClient = new UdpClientBroadcast(localAddress, port, pubSubContext); + } + else + { + //instantiate unicast UdpClient depending on publisher/subscriber usage context + udpClient = new UdpClientUnicast(localAddress, port); + } + if (pubSubContext == UsedInContext.Publisher) + { + //try to send 1 byte for target IP + udpClient.Send(new byte[] { 0 }, 1, configuredEndpoint); + } + + // On Windows Only since Linux does not support this + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + // Disable exceptions raised by ICMP Port Unreachable messages + udpClient.Client.IOControl((IOControlCode)SIO_UDP_CONNRESET, new byte[] { 0, 0, 0, 0 }, null); + } + } + catch (Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "Cannot use Network interface '{0}'. Exception: {1}", + networkInterface.Name, ex.Message); + if (udpClient != null) + { + //cleanup + udpClient.Dispose(); + udpClient = null; + } + } + + return udpClient; + } + + /// + /// Checks if the address provided is an IPv4 multicast address + /// + /// + /// + private static bool IsIPv4MulticastAddress(IPAddress address) + { + if (address == null) return false; + byte[] bytes = address.GetAddressBytes(); + if (bytes[0] >= 224 && bytes[0] <= 239) + { + return true; + } + return false; + } + + + /// + /// Checks if the address provided is an IPv4 broadcast address + /// + /// + /// + /// + private static bool IsIPv4BroadcastAddress(IPAddress address, NetworkInterface networkInterface) + { + var ip = networkInterface.GetPhysicalAddress(); + IPInterfaceProperties ipProps = networkInterface.GetIPProperties(); + foreach (UnicastIPAddressInformation localUnicastAddress in ipProps.UnicastAddresses) + { + if (localUnicastAddress.Address.AddressFamily == AddressFamily.InterNetwork) + { + byte[] subnetMask = localUnicastAddress.IPv4Mask.GetAddressBytes(); + uint addressBits = BitConverter.ToUInt32(address.GetAddressBytes(), 0); + uint invertedSubnetBits = ~BitConverter.ToUInt32(subnetMask, 0); + + bool isBroadcast = ((addressBits & invertedSubnetBits) == invertedSubnetBits); + if (isBroadcast) + { + return true; + } + } + } + return false; + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientMulticast.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientMulticast.cs new file mode 100644 index 00000000..2a571f67 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientMulticast.cs @@ -0,0 +1,91 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Net; +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// Represents a specialized class, configured for Multicast + /// + internal class UdpClientMulticast : UdpClient + { + internal IPAddress Address { get; } + internal IPAddress MulticastAddress { get; } + internal int Port { get; } + + /// + /// Initializes a new instance of the class and binds it to the specified local endpoint + /// and joins the specified multicast group + /// + /// An that represents the local address. + /// The multicast of the group you want to join. + /// The port. + /// An error occurred when accessing the socket. + public UdpClientMulticast(IPAddress localAddress, IPAddress multicastAddress, int port) : base() + { + Address = localAddress; + MulticastAddress = multicastAddress; + Port = port; + + try + { + // this might throw exception on some platforms + Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + } + catch(Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "UdpClientMulticast set SetSocketOption resulted in ex {0}", ex.Message); + } + try + { + // this might throw exception on some platforms + ExclusiveAddressUse = false; + } + catch (Exception ex) + { + Utils.Trace(Utils.TraceMasks.Information, "UdpClientMulticast set ExclusiveAddressUse = false resulted in ex {0}", ex.Message); + } + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + Client.Bind(new IPEndPoint(IPAddress.Any, port)); + JoinMulticastGroup(multicastAddress); + } + else + { + Client.Bind(new IPEndPoint(localAddress, port)); + JoinMulticastGroup(multicastAddress, localAddress); + } + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientUnicast.cs b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientUnicast.cs new file mode 100644 index 00000000..39a79cba --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.PubSub/Uadp/UdpClientUnicast.cs @@ -0,0 +1,72 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Net; +using System.Net.Sockets; + +namespace Opc.Ua.PubSub.Uadp +{ + /// + /// Represents a specialized class, configured for Unicast + /// + internal class UdpClientUnicast : UdpClient + { + internal IPAddress Address { get; } + internal int Port { get; } + + /// + /// Initializes a new instance of the class and binds it to the specified local endpoint + /// + /// An that represents the local address. + /// The port. + /// An error occurred when accessing the socket. + public UdpClientUnicast(IPAddress localAddress, int port) : base() + { + Address = localAddress; + Port = port; + + try + { + // this might throw exception on some platforms + Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + } + catch + { } + try + { + // this might throw exception on some platforms + ExclusiveAddressUse = false; + } + catch + { } + + Client.Bind(new IPEndPoint(localAddress, port)); + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/AsnUtils.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/AsnUtils.cs new file mode 100644 index 00000000..00f926b9 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/AsnUtils.cs @@ -0,0 +1,163 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Formats.Asn1; +using System.Text; + +namespace Opc.Ua.Security.Certificates +{ + internal static class AsnUtils + { + /// + /// Converts a buffer to a hexadecimal string. + /// + internal static string ToHexString(this byte[] buffer, bool invertEndian = false) + { + if (buffer == null || buffer.Length == 0) + { + return String.Empty; + } + + StringBuilder builder = new StringBuilder(buffer.Length * 2); + + if (invertEndian) + { + for (int ii = buffer.Length - 1; ii >= 0; ii--) + { + builder.AppendFormat("{0:X2}", buffer[ii]); + } + } + else + { + for (int ii = 0; ii < buffer.Length; ii++) + { + builder.AppendFormat("{0:X2}", buffer[ii]); + } + } + + return builder.ToString(); + } + + /// + /// Converts a hexadecimal string to an array of bytes. + /// + internal static byte[] FromHexString(this string buffer) + { + if (buffer == null) + { + return null; + } + + if (buffer.Length == 0) + { + return new byte[0]; + } + + const string digits = "0123456789ABCDEF"; + + byte[] bytes = new byte[(buffer.Length / 2) + (buffer.Length % 2)]; + + int ii = 0; + + while (ii < bytes.Length * 2) + { + int index = digits.IndexOf(buffer[ii]); + + if (index == -1) + { + break; + } + + byte b = (byte)index; + b <<= 4; + + if (ii < buffer.Length - 1) + { + index = digits.IndexOf(buffer[ii + 1]); + + if (index == -1) + { + break; + } + + b += (byte)index; + } + + bytes[ii / 2] = b; + ii += 2; + } + + return bytes; + } + + /// + /// Writer for Public Key parameters. + /// + /// + /// https://www.itu.int/rec/T-REC-X.690-201508-I/en + /// section 8.3 (Encoding of an integer value). + /// + /// The writer + /// The key parameter + internal static void WriteKeyParameterInteger(this AsnWriter writer, ReadOnlySpan integer) + { + if (integer[0] == 0) + { + int newStart = 1; + + while (newStart < integer.Length) + { + if (integer[newStart] >= 0x80) + { + newStart--; + break; + } + + if (integer[newStart] != 0) + { + break; + } + + newStart++; + } + + if (newStart == integer.Length) + { + newStart--; + } + + integer = integer.Slice(newStart); + } + + writer.WriteIntegerUnsigned(integer); + } + + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/Oids.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/Oids.cs new file mode 100644 index 00000000..76226332 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/Oids.cs @@ -0,0 +1,209 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Oid constants defined for ASN encoding/decoding. + /// + public static class Oids + { + /// + /// The Oid string of the Digital Signature Algorithm (DSA) subject public key. + /// + public const string Dsa = "1.2.840.10040.4.1"; + /// + /// The Oid string for the RSA encryption scheme with PKCS#1. + /// + public const string Rsa = "1.2.840.113549.1.1.1"; + /// + /// The Oid string for the RSA encryption scheme with OAEP. + /// + public const string RsaOaep = "1.2.840.113549.1.1.7"; + /// + /// The Oid string for the RSA encryption scheme with PSS. + /// + public const string RsaPss = "1.2.840.113549.1.1.10"; + + /// + /// The Oid string for RSA signature, PKCS#1 padding with SHA1 hash. + /// + public const string RsaPkcs1Sha1 = "1.2.840.113549.1.1.5"; + /// + /// The Oid string for RSA signature, PKCS#1 padding with SHA256 hash. + /// + public const string RsaPkcs1Sha256 = "1.2.840.113549.1.1.11"; + /// + /// The Oid string for RSA signature, PKCS#1 padding with SHA384 hash. + /// + public const string RsaPkcs1Sha384 = "1.2.840.113549.1.1.12"; + /// + /// The Oid string for RSA signature, PKCS#1 padding with SHA512 hash. + /// + public const string RsaPkcs1Sha512 = "1.2.840.113549.1.1.13"; + + /// + /// The Oid string for ECDsa signature with SHA1 hash. + /// + public const string ECDsaWithSha1 = "1.2.840.10045.4.1"; + /// + /// The Oid string for ECDsa signature with SHA256 hash. + /// + public const string ECDsaWithSha256 = "1.2.840.10045.4.3.2"; + /// + /// The Oid string for ECDsa signature with SHA384 hash. + /// + public const string ECDsaWithSha384 = "1.2.840.10045.4.3.3"; + /// + /// The Oid string for ECDsa signature with SHA512 hash. + /// + public const string ECDsaWithSha512 = "1.2.840.10045.4.3.4"; + + /// + /// The Oid string for the CRL extension of a CRL Number. + /// + public const string CrlNumber = "2.5.29.20"; + /// + /// The Oid string for the CRL extension of a CRL Reason Code. + /// + public const string CrlReasonCode = "2.5.29.21"; + + /// + /// The Oid string for Transport Layer Security(TLS) World Wide Web(WWW) + /// server authentication. + /// + public const string ServerAuthentication = "1.3.6.1.5.5.7.3.1"; + /// + /// The Oid string for Transport Layer Security(TLS) World Wide Web(WWW) + /// client authentication. + /// + public const string ClientAuthentication = "1.3.6.1.5.5.7.3.2"; + + /// + /// The Oid string for Authority Information access. + /// + public const string AuthorityInfoAccess = "1.3.6.1.5.5.7.1.1"; + /// + /// The Oid string for Online Certificate Status Protocol. + /// + public const string OnlineCertificateStatusProtocol = "1.3.6.1.5.5.7.48.1"; + /// + /// The Oid string for Certificate Authority Issuer. + /// + public const string CertificateAuthorityIssuers = "1.3.6.1.5.5.7.48.2"; + /// + /// The Oid string for CRL Distribution Point. + /// + public const string CRLDistributionPoint = "2.5.29.31"; + + /// + /// Get the RSA oid for a hash algorithm signature. + /// + /// The hash algorithm name. + public static string GetRSAOid(HashAlgorithmName hashAlgorithm) + { + if (hashAlgorithm == HashAlgorithmName.SHA1) + { + return Oids.RsaPkcs1Sha1; + } + else if (hashAlgorithm == HashAlgorithmName.SHA256) + { + return Oids.RsaPkcs1Sha256; + } + else if (hashAlgorithm == HashAlgorithmName.SHA384) + { + return Oids.RsaPkcs1Sha384; + } + else if (hashAlgorithm == HashAlgorithmName.SHA512) + { + return Oids.RsaPkcs1Sha512; + } + else + { + throw new NotSupportedException($"Signing RSA with hash {hashAlgorithm.Name} is not supported. "); + } + } + + /// + /// Get the ECDsa oid for a hash algorithm signature. + /// + /// The hash algorithm name. + public static string GetECDsaOid(HashAlgorithmName hashAlgorithm) + { + if (hashAlgorithm == HashAlgorithmName.SHA1) + { + return Oids.ECDsaWithSha1; + } + else if (hashAlgorithm == HashAlgorithmName.SHA256) + { + return Oids.ECDsaWithSha256; + } + else if (hashAlgorithm == HashAlgorithmName.SHA384) + { + return Oids.ECDsaWithSha384; + } + else if (hashAlgorithm == HashAlgorithmName.SHA512) + { + return Oids.ECDsaWithSha512; + } + else + { + throw new NotSupportedException($"Signing ECDsa with hash {hashAlgorithm.Name} is not supported. "); + } + } + + /// + /// Get the hash algorithm used to sign a certificate. + /// + /// The signature algorithm oid. + public static HashAlgorithmName GetHashAlgorithmName(string oid) + { + switch (oid) + { + case Oids.ECDsaWithSha1: + case Oids.RsaPkcs1Sha1: + return HashAlgorithmName.SHA1; + case Oids.ECDsaWithSha256: + case Oids.RsaPkcs1Sha256: + return HashAlgorithmName.SHA256; + case Oids.ECDsaWithSha384: + case Oids.RsaPkcs1Sha384: + return HashAlgorithmName.SHA384; + case Oids.ECDsaWithSha512: + case Oids.RsaPkcs1Sha512: + return HashAlgorithmName.SHA512; + } + throw new NotSupportedException($"Hash algorithm {oid} is not supported. "); + } + + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/RsaUtils.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/RsaUtils.cs new file mode 100644 index 00000000..ce1c6359 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/RsaUtils.cs @@ -0,0 +1,57 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Defines internal helper functions to implement RSA cryptography. + /// + internal static class RsaUtils + { + /// + /// Dispose RSA object only if not running on Mono runtime. + /// Workaround due to a Mono bug in the X509Certificate2 implementation of RSA. + /// see also: https://github.com/mono/mono/issues/6306 + /// On Mono GetRSAPrivateKey/GetRSAPublickey returns a reference instead of a disposable object. + /// Calling Dispose on RSA makes the X509Certificate2 keys unusable on Mono. + /// Only call dispose when using .Net and .Net Core runtimes. + /// + /// RSA object returned by GetRSAPublicKey/GetRSAPrivateKey + internal static void RSADispose(RSA rsa) + { + if (rsa != null && + !IsRunningOnMono()) + { + rsa.Dispose(); + } + } + + /// + /// Lazy helper to allow runtime check for Mono. + /// + private static readonly Lazy IsRunningOnMonoValue = new Lazy(() => { + return Type.GetType("Mono.Runtime") != null; + }); + + /// + /// Determine if assembly uses mono runtime. + /// + /// true if running on Mono runtime + public static bool IsRunningOnMono() + { + return IsRunningOnMonoValue.Value; + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/X509Defaults.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/X509Defaults.cs new file mode 100644 index 00000000..84bb86a0 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Common/X509Defaults.cs @@ -0,0 +1,74 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// The defaults used in the library for Certificates. + /// + public static class X509Defaults + { + /// + /// The default key size for RSA certificates in bits. + /// + /// + /// Supported values are 1024(deprecated), 2048, 3072 or 4096. + /// + public static readonly ushort RSAKeySize = 2048; + /// + /// The min supported size for a RSA key. + /// + public static readonly ushort RSAKeySizeMin = 1024; + /// + /// The max supported size for a RSA key. + /// + public static readonly ushort RSAKeySizeMax = 4096; + /// + /// The default hash algorithm to use for signatures. + /// + /// + /// Supported values are SHA-1(deprecated) or 256, 384 and 512 for SHA-2. + /// + public static readonly HashAlgorithmName HashAlgorithmName = HashAlgorithmName.SHA256; + /// + /// The default lifetime of certificates in months. + /// + public static readonly ushort LifeTime = 24; + /// + /// The recommended min serial numbers length in octets. + /// + public static readonly int SerialNumberLengthMin = 10; + /// + /// The max serial numbers length in octets. + /// + public static readonly int SerialNumberLengthMax = 20; + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Documentation/Opc.Ua.Security.Certificates.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Documentation/Opc.Ua.Security.Certificates.cs new file mode 100644 index 00000000..4c18c8de --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Documentation/Opc.Ua.Security.Certificates.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Security.Certificates +{ + /// + /// The Opc.Ua.Security.Certificates namespace defines classes which can be used to implement + /// functions to create X509 certificates, to encode and decode X509 Certificate Revocation Lists (CRL), + /// X509 Certificate Signing Requests (CSR) and related X509 extensions needed for the OPC UA certificate + /// specification. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509AuthorityKeyIdentifierExtension.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509AuthorityKeyIdentifierExtension.cs new file mode 100644 index 00000000..09d56114 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509AuthorityKeyIdentifierExtension.cs @@ -0,0 +1,349 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Formats.Asn1; +using System.Numerics; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Stores the authority key identifier extension. + /// + /// + /// id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } + /// AuthorityKeyIdentifier ::= SEQUENCE { + /// keyIdentifier[0] KeyIdentifier OPTIONAL, + /// authorityCertIssuer[1] GeneralNames OPTIONAL, + /// authorityCertSerialNumber[2] CertificateSerialNumber OPTIONAL + /// } + /// KeyIdentifier::= OCTET STRING + /// + public class X509AuthorityKeyIdentifierExtension : X509Extension + { + #region Constructors + /// + /// Creates an empty extension. + /// + protected X509AuthorityKeyIdentifierExtension() + { + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509AuthorityKeyIdentifierExtension(AsnEncodedData encodedExtension, bool critical) + : + this(encodedExtension.Oid, encodedExtension.RawData, critical) + { + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509AuthorityKeyIdentifierExtension(string oid, byte[] rawData, bool critical) + : + this(new Oid(oid, kFriendlyName), rawData, critical) + { + } + + /// + /// Build the X509 Authority Key extension. + /// + /// The subject key identifier + public X509AuthorityKeyIdentifierExtension( + byte[] subjectKeyIdentifier + ) + { + if (subjectKeyIdentifier == null) throw new ArgumentNullException(nameof(subjectKeyIdentifier)); + m_keyIdentifier = subjectKeyIdentifier; + base.Oid = new Oid(AuthorityKeyIdentifier2Oid, kFriendlyName); + base.Critical = false; + base.RawData = Encode(); + } + + /// + /// Build the X509 Authority Key extension. + /// + /// The subject key identifier as a byte array. + /// The distinguished name of the issuer. + /// The serial number of the issuer certificate as little endian byte array. + public X509AuthorityKeyIdentifierExtension( + byte[] subjectKeyIdentifier, + X500DistinguishedName authorityName, + byte[] serialNumber + ) + { + if (subjectKeyIdentifier == null) throw new ArgumentNullException(nameof(subjectKeyIdentifier)); + if (authorityName == null) throw new ArgumentNullException(nameof(authorityName)); + if (serialNumber == null) throw new ArgumentNullException(nameof(serialNumber)); + m_issuer = authorityName; + m_keyIdentifier = subjectKeyIdentifier; + m_serialNumber = serialNumber; + base.Oid = new Oid(AuthorityKeyIdentifier2Oid, kFriendlyName); + base.Critical = false; + base.RawData = Encode(); + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509AuthorityKeyIdentifierExtension(Oid oid, byte[] rawData, bool critical) + : + base(oid, rawData, critical) + { + Decode(rawData); + } + #endregion + + #region Overridden Methods + /// + /// Returns a formatted version of the Authority Key Identifier as a string. + /// + public override string Format(bool multiLine) + { + StringBuilder buffer = new StringBuilder(); + + if (m_keyIdentifier != null && m_keyIdentifier.Length > 0) + { + if (buffer.Length > 0) + { + if (multiLine) + { + buffer.AppendLine(); + } + else + { + buffer.Append(", "); + } + } + + buffer.Append(kKeyIdentifier); + buffer.Append("="); + buffer.Append(m_keyIdentifier.ToHexString()); + } + + if (m_issuer != null) + { + if (multiLine) + { + buffer.AppendLine(); + } + else + { + buffer.Append(", "); + } + + buffer.Append(kIssuer); + buffer.Append("="); + buffer.Append(m_issuer.Format(true)); + } + + if (m_serialNumber != null && m_serialNumber.Length > 0) + { + if (buffer.Length > 0) + { + if (!multiLine) + { + buffer.Append(", "); + } + } + + buffer.Append(kSerialNumber); + buffer.Append("="); + buffer.Append(m_serialNumber.ToHexString(true)); + } + return buffer.ToString(); + } + + /// + /// Initializes the extension from ASN.1 encoded data. + /// + public override void CopyFrom(AsnEncodedData asnEncodedData) + { + if (asnEncodedData == null) throw new ArgumentNullException(nameof(asnEncodedData)); + base.Oid = asnEncodedData.Oid; + base.RawData = asnEncodedData.RawData; + Decode(asnEncodedData.RawData); + } + #endregion + + #region Public Properties + /// + /// The OID for a Authority Key Identifier extension. + /// + public const string AuthorityKeyIdentifierOid = "2.5.29.1"; + + /// + /// The alternate OID for a Authority Key Identifier extension. + /// + public const string AuthorityKeyIdentifier2Oid = "2.5.29.35"; + + /// + /// The identifier for the key as a little endian hexadecimal string. + /// + public string KeyIdentifier => m_keyIdentifier.ToHexString(); + + /// + /// The identifier for the key as a byte array. + /// + public byte[] GetKeyIdentifier() => m_keyIdentifier; + + /// + /// A list of distinguished names for the issuer. + /// + public X500DistinguishedName Issuer => m_issuer; + + /// + /// The serial number of the authority key as a big endian hexadecimal string. + /// + public string SerialNumber => m_serialNumber.ToHexString(true); + + /// + /// The serial number of the authority key as a byte array in little endian order. + /// + public byte[] GetSerialNumber() => m_serialNumber; + #endregion + + #region Private Methods + private byte[] Encode() + { + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.PushSequence(); + + if (m_keyIdentifier != null) + { + Asn1Tag keyIdTag = new Asn1Tag(TagClass.ContextSpecific, 0); + writer.WriteOctetString(m_keyIdentifier, keyIdTag); + } + + if (m_issuer != null) + { + Asn1Tag issuerNameTag = new Asn1Tag(TagClass.ContextSpecific, 1); + writer.PushSequence(issuerNameTag); + + // Add the issuer to constructed context-specific 4 (GeneralName.directoryName) + // NOTE: rewrite using sequence + // X.680 2015-08 31.2.7: "The tagging construction specifies explicit tagging if any of the following holds: + // ... (c) ... the type defined by "Type" is an untagged choice type, ... " + // Since this is a Context-Specific tag the output is the same + Asn1Tag directoryNameTag = new Asn1Tag(TagClass.ContextSpecific, 4, true); + writer.PushSetOf(directoryNameTag); + writer.WriteEncodedValue(m_issuer.RawData); + writer.PopSetOf(directoryNameTag); + writer.PopSequence(issuerNameTag); + } + + if (m_serialNumber != null) + { + Asn1Tag issuerSerialTag = new Asn1Tag(TagClass.ContextSpecific, 2); + BigInteger issuerSerial = new BigInteger(m_serialNumber); + writer.WriteInteger(issuerSerial, issuerSerialTag); + } + + writer.PopSequence(); + return writer.Encode(); + } + + + private void Decode(byte[] data) + { + if (base.Oid.Value == AuthorityKeyIdentifierOid || + base.Oid.Value == AuthorityKeyIdentifier2Oid) + { + try + { + AsnReader dataReader = new AsnReader(data, AsnEncodingRules.DER); + var akiReader = dataReader.ReadSequence(); + dataReader.ThrowIfNotEmpty(); + if (akiReader != null) + { + Asn1Tag keyIdTag = new Asn1Tag(TagClass.ContextSpecific, 0); + Asn1Tag dnameSequencyTag = new Asn1Tag(TagClass.ContextSpecific, 1, true); + Asn1Tag serialNumberTag = new Asn1Tag(TagClass.ContextSpecific, 2); + while (akiReader.HasData) + { + Asn1Tag peekTag = akiReader.PeekTag(); + if (peekTag == keyIdTag) + { + m_keyIdentifier = akiReader.ReadOctetString(keyIdTag); + continue; + } + + if (peekTag == dnameSequencyTag) + { + AsnReader issuerReader = akiReader.ReadSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); + if (issuerReader != null) + { + Asn1Tag directoryNameTag = new Asn1Tag(TagClass.ContextSpecific, 4, true); + m_issuer = new X500DistinguishedName(issuerReader.ReadSequence(directoryNameTag).ReadEncodedValue().ToArray()); + issuerReader.ThrowIfNotEmpty(); + } + continue; + } + + if (peekTag == serialNumberTag) + { + m_serialNumber = akiReader.ReadInteger(serialNumberTag).ToByteArray(); + continue; + } + throw new AsnContentException("Unknown tag in sequence."); + } + akiReader.ThrowIfNotEmpty(); + return; + } + throw new CryptographicException("No valid data in the extension."); + } + catch (AsnContentException ace) + { + throw new CryptographicException("Failed to decode the AuthorityKeyIdentifier extension.", ace); + } + } + throw new CryptographicException("Invalid AuthorityKeyIdentifierOid."); + } + #endregion + + #region Private Fields + /// + /// Authority Key Identifier extension string + /// definitions see RFC 5280 4.2.1.1 + /// + private const string kKeyIdentifier = "KeyID"; + private const string kIssuer = "Issuer"; + private const string kSerialNumber = "SerialNumber"; + private const string kFriendlyName = "Authority Key Identifier"; + private byte[] m_keyIdentifier; + private X500DistinguishedName m_issuer; + private byte[] m_serialNumber; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509CrlNumberExtension.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509CrlNumberExtension.cs new file mode 100644 index 00000000..8e4bae0e --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509CrlNumberExtension.cs @@ -0,0 +1,177 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Formats.Asn1; +using System.Numerics; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// The CRL Number extension. + /// + /// + /// id-ce-cRLNumber OBJECT IDENTIFIER::= { id-ce 20 } + /// CRLNumber::= INTEGER(0..MAX) + /// + public class X509CrlNumberExtension : X509Extension + { + #region Constructors + /// + /// Creates an empty extension. + /// + protected X509CrlNumberExtension() + { + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509CrlNumberExtension(AsnEncodedData encodedExtension, bool critical) + : this(encodedExtension.Oid, encodedExtension.RawData, critical) + { + } + + /// + /// Creates an extension from an Oid and ASN.1 encoded raw data. + /// + public X509CrlNumberExtension(string oid, byte[] rawData, bool critical) + : this(new Oid(oid, kFriendlyName), rawData, critical) + { + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509CrlNumberExtension(Oid oid, byte[] rawData, bool critical) + : + base(oid, rawData, critical) + { + Decode(rawData); + } + + /// + /// Build the CRL Number extension (for CRL extensions). + /// + public X509CrlNumberExtension(BigInteger crlNumber) + { + Oid = new Oid(CrlNumberOid, kFriendlyName); + Critical = false; + CrlNumber = crlNumber; + RawData = Encode(); + } + #endregion + + #region Overridden Methods + /// + /// Returns a formatted version of the Abstract Syntax Notation One (ASN.1)-encoded data as a string. + /// + public override string Format(bool multiLine) + { + StringBuilder buffer = new StringBuilder(); + buffer.Append(kFriendlyName); + buffer.Append("="); + buffer.Append(CrlNumber); + + return buffer.ToString(); + } + + /// + /// Initializes the extension from ASN.1 encoded data. + /// + public override void CopyFrom(AsnEncodedData asnEncodedData) + { + if (asnEncodedData == null) throw new ArgumentNullException(nameof(asnEncodedData)); + Oid = asnEncodedData.Oid; + RawData = asnEncodedData.RawData; + Decode(RawData); + } + #endregion + + #region Public Properties + /// + /// The OID for a CRL Number extension. + /// + public const string CrlNumberOid = "2.5.29.20"; + + /// + /// Gets the CRL Number. + /// + /// The uris. + public BigInteger CrlNumber { get; private set; } + #endregion + + #region Private Methods + /// + /// Encode the CRL Number extension. + /// + private byte[] Encode() + { + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.WriteInteger(CrlNumber); + return writer.Encode(); + } + + /// + /// Decode CRL Number. + /// + private void Decode(byte[] data) + { + if (base.Oid.Value == CrlNumberOid) + { + try + { + AsnReader dataReader = new AsnReader(data, AsnEncodingRules.DER); + CrlNumber = dataReader.ReadInteger(); + dataReader.ThrowIfNotEmpty(); + } + catch (AsnContentException ace) + { + throw new CryptographicException("Failed to decode the CRL Number extension.", ace); + } + } + else + { + throw new CryptographicException("Invalid CrlNumberOid."); + } + } + #endregion + + #region Private Fields + /// + /// CRL Number extension string + /// definitions see RFC 5280 5.2.3 + /// + private const string kFriendlyName = "CRL Number"; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509Extensions.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509Extensions.cs new file mode 100644 index 00000000..9b0d7f59 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509Extensions.cs @@ -0,0 +1,276 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Formats.Asn1; +using System.Linq; +using System.Numerics; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Supporting functions for X509 extensions. + /// + public static class X509Extensions + { + /// + /// Find a typed extension in a certificate. + /// + /// The type of the extension. + /// The certificate with extensions. + public static T FindExtension(this X509Certificate2 certificate) where T : X509Extension + { + return FindExtension(certificate.Extensions); + } + + /// + /// Find a typed extension in a extension collection. + /// + /// The type of the extension. + /// The extensions to search. + public static T FindExtension(this X509ExtensionCollection extensions) where T : X509Extension + { + if (extensions == null) throw new ArgumentNullException(nameof(extensions)); + lock (extensions.SyncRoot) + { + // search known custom extensions + if (typeof(T) == typeof(X509AuthorityKeyIdentifierExtension)) + { + var extension = extensions.Cast().Where(e => ( + e.Oid.Value == X509AuthorityKeyIdentifierExtension.AuthorityKeyIdentifierOid || + e.Oid.Value == X509AuthorityKeyIdentifierExtension.AuthorityKeyIdentifier2Oid) + ).FirstOrDefault(); + if (extension != null) + { + return new X509AuthorityKeyIdentifierExtension(extension, extension.Critical) as T; + } + } + + if (typeof(T) == typeof(X509SubjectAltNameExtension)) + { + var extension = extensions.Cast().Where(e => ( + e.Oid.Value == X509SubjectAltNameExtension.SubjectAltNameOid || + e.Oid.Value == X509SubjectAltNameExtension.SubjectAltName2Oid) + ).FirstOrDefault(); + if (extension != null) + { + return new X509SubjectAltNameExtension(extension, extension.Critical) as T; + } + } + + if (typeof(T) == typeof(X509CrlNumberExtension)) + { + var extension = extensions.Cast().Where(e => ( + e.Oid.Value == X509CrlNumberExtension.CrlNumberOid) + ).FirstOrDefault(); + if (extension != null) + { + return new X509CrlNumberExtension(extension, extension.Critical) as T; + } + } + + // search builtin extension + return extensions.OfType().FirstOrDefault(); + } + } + + /// + /// Build the Authority information Access extension. + /// + /// Array of CA Issuer Urls + /// optional, the OCSP responder + public static X509Extension BuildX509AuthorityInformationAccess( + string[] caIssuerUrls, + string ocspResponder = null + ) + { + if (String.IsNullOrEmpty(ocspResponder) && + (caIssuerUrls == null || caIssuerUrls.Length == 0)) + { + throw new ArgumentNullException(nameof(caIssuerUrls), "One CA Issuer Url or OCSP responder is required for the extension."); + } + + Asn1Tag generalNameUriChoice = new Asn1Tag(TagClass.ContextSpecific, 6); + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.PushSequence(); + if (caIssuerUrls != null) + { + foreach (var caIssuerUrl in caIssuerUrls) + { + writer.PushSequence(); + writer.WriteObjectIdentifier(Oids.CertificateAuthorityIssuers); + writer.WriteCharacterString( + UniversalTagNumber.IA5String, + caIssuerUrl, + generalNameUriChoice + ); + writer.PopSequence(); + } + } + if (!String.IsNullOrEmpty(ocspResponder)) + { + writer.PushSequence(); + writer.WriteObjectIdentifier(Oids.OnlineCertificateStatusProtocol); + writer.WriteCharacterString( + UniversalTagNumber.IA5String, + ocspResponder, + generalNameUriChoice + ); + writer.PopSequence(); + } + writer.PopSequence(); + return new X509Extension(Oids.AuthorityInfoAccess, writer.Encode(), false); + } + + /// + /// Build the CRL Distribution Point extension. + /// + /// The CRL distribution point + public static X509Extension BuildX509CRLDistributionPoints( + string distributionPoint + ) + { + var context0 = new Asn1Tag(TagClass.ContextSpecific, 0, true); + Asn1Tag distributionPointChoice = context0; + Asn1Tag fullNameChoice = context0; + Asn1Tag generalNameUriChoice = new Asn1Tag(TagClass.ContextSpecific, 6); + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.PushSequence(); + writer.PushSequence(); + writer.PushSequence(distributionPointChoice); + writer.PushSequence(fullNameChoice); + writer.WriteCharacterString( + UniversalTagNumber.IA5String, + distributionPoint, + generalNameUriChoice + ); + writer.PopSequence(fullNameChoice); + writer.PopSequence(distributionPointChoice); + writer.PopSequence(); + writer.PopSequence(); + return new X509Extension(Oids.CRLDistributionPoint, writer.Encode(), false); + } + + /// + /// Read an ASN.1 extension sequence as X509Extension object. + /// + /// The ASN reader. + public static X509Extension ReadExtension(this AsnReader reader) + { + if (reader.HasData) + { + var boolTag = new Asn1Tag(UniversalTagNumber.Boolean); + var extReader = reader.ReadSequence(); + var extOid = extReader.ReadObjectIdentifier(); + bool critical = false; + var peekTag = extReader.PeekTag(); + if (peekTag == boolTag) + { + critical = extReader.ReadBoolean(); + } + var data = extReader.ReadOctetString(); + extReader.ThrowIfNotEmpty(); + return new X509Extension(new Oid(extOid), data, critical); + } + return null; + } + + /// + /// Write an extension object as ASN.1. + /// + /// + /// + public static void WriteExtension(this AsnWriter writer, X509Extension extension) + { + var etag = Asn1Tag.Sequence; + writer.PushSequence(etag); + writer.WriteObjectIdentifier(extension.Oid.Value); + if (extension.Critical) + { + writer.WriteBoolean(extension.Critical); + } + writer.WriteOctetString(extension.RawData); + writer.PopSequence(etag); + } + + /// + /// Build the CRL Reason extension. + /// + public static X509Extension BuildX509CRLReason( + CRLReason reason + ) + { + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.WriteEnumeratedValue(reason); + return new X509Extension(Oids.CrlReasonCode, writer.Encode(), false); + } + + /// + /// Build the Authority Key Identifier from an Issuer CA certificate. + /// + /// The issuer CA certificate + public static X509Extension BuildAuthorityKeyIdentifier(X509Certificate2 issuerCaCertificate) + { + // force exception if SKI is not present + var ski = issuerCaCertificate.Extensions.OfType().Single(); + return new X509AuthorityKeyIdentifierExtension( + ski.SubjectKeyIdentifier.FromHexString(), + issuerCaCertificate.SubjectName, + issuerCaCertificate.GetSerialNumber()); + } + + /// + /// Build the CRL number. + /// + public static X509Extension BuildCRLNumber(BigInteger crlNumber) + { + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.WriteInteger(crlNumber); + return new X509Extension(Oids.CrlNumber, writer.Encode(), false); + } + + /// + /// Patch serial number in a Url. byte version. + /// + public static string PatchExtensionUrl(string extensionUrl, byte[] serialNumber) + { + return PatchExtensionUrl(extensionUrl, serialNumber.ToHexString()); + } + + /// + /// Patch serial number in a Url. string version. + /// + public static string PatchExtensionUrl(string extensionUrl, string serial) + { + return extensionUrl.Replace("%serial%", serial.ToLower()); + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509SubjectAltNameExtension.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509SubjectAltNameExtension.cs new file mode 100644 index 00000000..955f5081 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Extensions/X509SubjectAltNameExtension.cs @@ -0,0 +1,446 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Formats.Asn1; +using System.Net; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// The subject alternate name extension. + /// + /// + /// + /// id-ce-subjectAltName OBJECT IDENTIFIER::= { id-ce 17 } + /// + /// SubjectAltName::= GeneralNames + /// + /// GeneralNames::= SEQUENCE SIZE(1..MAX) OF GeneralName + /// + /// GeneralName ::= CHOICE { + /// otherName [0] OtherName, + /// rfc822Name[1] IA5String, + /// dNSName[2] IA5String, + /// x400Address[3] ORAddress, + /// directoryName[4] Name, + /// ediPartyName[5] EDIPartyName, + /// uniformResourceIdentifier[6] IA5String, + /// iPAddress[7] OCTET STRING, + /// registeredID[8] OBJECT IDENTIFIER + /// } + /// + /// OtherName::= SEQUENCE { + /// type-id OBJECT IDENTIFIER, + /// value[0] EXPLICIT ANY DEFINED BY type - id + /// } + /// + /// EDIPartyName::= SEQUENCE { + /// nameAssigner[0] DirectoryString OPTIONAL, + /// partyName[1] DirectoryString + /// } + /// + /// + public class X509SubjectAltNameExtension : X509Extension + { + #region Constructors + /// + /// Creates an empty extension. + /// + protected X509SubjectAltNameExtension() + { + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509SubjectAltNameExtension(AsnEncodedData encodedExtension, bool critical) + : this(encodedExtension.Oid, encodedExtension.RawData, critical) + { + } + + /// + /// Creates an extension from an Oid and ASN.1 encoded raw data. + /// + public X509SubjectAltNameExtension(string oid, byte[] rawData, bool critical) + : this(new Oid(oid, kFriendlyName), rawData, critical) + { + } + + /// + /// Creates an extension from ASN.1 encoded data. + /// + public X509SubjectAltNameExtension(Oid oid, byte[] rawData, bool critical) + : + base(oid, rawData, critical) + { + m_decoded = false; + } + + /// + /// Build the Subject Alternative name extension (for OPC UA application certs). + /// + /// The application Uri + /// The domain names. DNS Hostnames, IPv4 or IPv6 addresses + public X509SubjectAltNameExtension( + string applicationUri, + IEnumerable domainNames) + { + Oid = new Oid(SubjectAltName2Oid, kFriendlyName); + Critical = false; + Initialize(applicationUri, domainNames); + RawData = Encode(); + m_decoded = true; + } + #endregion + + #region Overridden Methods + /// + /// Returns a formatted version of the Abstract Syntax Notation One (ASN.1)-encoded data as a string. + /// + public override string Format(bool multiLine) + { + EnsureDecoded(); + StringBuilder buffer = new StringBuilder(); + for (int ii = 0; ii < m_uris.Count; ii++) + { + if (buffer.Length > 0) + { + if (multiLine) + { + buffer.AppendLine(); + } + else + { + buffer.Append(", "); + } + } + + buffer.Append(kUniformResourceIdentifier); + buffer.Append("="); + buffer.Append(m_uris[ii]); + } + + for (int ii = 0; ii < m_domainNames.Count; ii++) + { + if (buffer.Length > 0) + { + if (multiLine) + { + buffer.AppendLine(); + } + else + { + buffer.Append(", "); + } + } + + buffer.Append(kDnsName); + buffer.Append("="); + buffer.Append(m_domainNames[ii]); + } + + for (int ii = 0; ii < m_ipAddresses.Count; ii++) + { + if (buffer.Length > 0) + { + if (multiLine) + { + buffer.AppendLine(); + } + else + { + buffer.Append(", "); + } + } + + buffer.Append(kIpAddress); + buffer.Append("="); + buffer.Append(m_ipAddresses[ii]); + } + + return buffer.ToString(); + } + + /// + /// Initializes the extension from ASN.1 encoded data. + /// + public override void CopyFrom(AsnEncodedData asnEncodedData) + { + if (asnEncodedData == null) throw new ArgumentNullException(nameof(asnEncodedData)); + Oid = asnEncodedData.Oid; + RawData = asnEncodedData.RawData; + m_decoded = false; + } + #endregion + + #region Public Properties + /// + /// The OID for a Subject Alternate Name extension. + /// + public const string SubjectAltNameOid = "2.5.29.7"; + + /// + /// The OID for a Subject Alternate Name 2 extension. + /// + public static string SubjectAltName2Oid = "2.5.29.17"; + + /// + /// Gets the uris. + /// + /// The uris. + public IReadOnlyList Uris + { + get + { + EnsureDecoded(); + return m_uris.AsReadOnly(); + } + } + + /// + /// Gets the domain names. + /// + /// The domain names. + public IReadOnlyList DomainNames + { + get + { + EnsureDecoded(); + return m_domainNames.AsReadOnly(); + } + } + + /// + /// Gets the IP addresses. + /// + /// The IP addresses. + public IReadOnlyList IPAddresses + { + get + { + EnsureDecoded(); + return m_ipAddresses.AsReadOnly(); + } + } + #endregion + + #region Private Methods + /// + /// Create a normalized IPv4 or IPv6 address from a 4 byte or 16 byte array. + /// + private string IPAddressToString(byte[] encodedIPAddress) + { + try + { + IPAddress address = new IPAddress(encodedIPAddress); + return address.ToString(); + } + catch + { + throw new CryptographicException("Certificate contains invalid IP address."); + } + } + +#if NETSTANDARD2_1 || NET472 + /// + /// Encode the Subject Alternative name extension. + /// + private byte[] Encode() + { + var sanBuilder = new SubjectAlternativeNameBuilder(); + foreach (var uri in m_uris) + { + sanBuilder.AddUri(new Uri(uri)); + } + EncodeGeneralNames(sanBuilder, m_domainNames); + EncodeGeneralNames(sanBuilder, m_ipAddresses); + var extension = sanBuilder.Build(); + return extension.RawData; + } + + /// + /// Encode a list of general Names in a SAN builder. + /// + /// The subject alternative name builder + /// The general Names to add + private void EncodeGeneralNames(SubjectAlternativeNameBuilder sanBuilder, IList generalNames) + { + foreach (string generalName in generalNames) + { + IPAddress ipAddr; + if (String.IsNullOrWhiteSpace(generalName)) + { + continue; + } + if (IPAddress.TryParse(generalName, out ipAddr)) + { + sanBuilder.AddIpAddress(ipAddr); + } + else + { + sanBuilder.AddDnsName(generalName); + } + } + } +#else + /// + /// Encode the Subject Alternative name extension. + /// + private byte[] Encode() + { + return BouncyCastle.X509Extensions.BuildSubjectAltNameExtension(m_uris, m_domainNames, m_ipAddresses).RawData; + } +#endif + + /// + /// Decode if RawData is yet undecoded. + /// + private void EnsureDecoded() + { + if (!m_decoded) + { + Decode(RawData); + } + } + + /// + /// Decode URI, DNS and IP from Subject Alternative Name. + /// + /// + /// Only general names relevant for Opc.Ua are decoded. + /// + private void Decode(byte[] data) + { + if (base.Oid.Value == SubjectAltNameOid || + base.Oid.Value == SubjectAltName2Oid) + { + try + { + List uris = new List(); + List domainNames = new List(); + List ipAddresses = new List(); + AsnReader dataReader = new AsnReader(data, AsnEncodingRules.DER); + var akiReader = dataReader.ReadSequence(); + dataReader.ThrowIfNotEmpty(); + if (akiReader != null) + { + Asn1Tag uriTag = new Asn1Tag(TagClass.ContextSpecific, 6); + Asn1Tag dnsTag = new Asn1Tag(TagClass.ContextSpecific, 2); + Asn1Tag ipTag = new Asn1Tag(TagClass.ContextSpecific, 7); + + while (akiReader.HasData) + { + Asn1Tag peekTag = akiReader.PeekTag(); + if (peekTag == uriTag) + { + var uri = akiReader.ReadCharacterString(UniversalTagNumber.IA5String, uriTag); + uris.Add(uri); + } + else if (peekTag == dnsTag) + { + var dnsName = akiReader.ReadCharacterString(UniversalTagNumber.IA5String, dnsTag); + domainNames.Add(dnsName); + } + else if (peekTag == ipTag) + { + var ip = akiReader.ReadOctetString(ipTag); + ipAddresses.Add(IPAddressToString(ip)); + } + else // skip over + { + akiReader.ReadEncodedValue(); + } + } + akiReader.ThrowIfNotEmpty(); + m_uris = uris; + m_domainNames = domainNames; + m_ipAddresses = ipAddresses; + m_decoded = true; + return; + } + throw new CryptographicException("No valid data in the X509 signature."); + } + catch (AsnContentException ace) + { + throw new CryptographicException("Failed to decode the SubjectAltName extension.", ace); + } + } + throw new CryptographicException("Invalid SubjectAltNameOid."); + } + + /// + /// Initialize the Subject Alternative name extension. + /// + /// The application Uri + /// The general names. DNS Hostnames, IPv4 or IPv6 addresses + private void Initialize(string applicationUri, IEnumerable generalNames) + { + List uris = new List(); + List domainNames = new List(); + List ipAddresses = new List(); + uris.Add(applicationUri); + foreach (string generalName in generalNames) + { + switch (Uri.CheckHostName(generalName)) + { + case UriHostNameType.Dns: + domainNames.Add(generalName); break; + case UriHostNameType.IPv4: + case UriHostNameType.IPv6: + ipAddresses.Add(generalName); break; + default: continue; + } + } + m_uris = uris; + m_domainNames = domainNames; + m_ipAddresses = ipAddresses; + } + #endregion + + #region Private Fields + /// + /// Subject Alternate Name extension string + /// definitions see RFC 5280 4.2.1.7 + /// + private const string kUniformResourceIdentifier = "URL"; + private const string kDnsName = "DNS Name"; + private const string kIpAddress = "IP Address"; + private const string kFriendlyName = "Subject Alternative Name"; + private List m_uris; + private List m_domainNames; + private List m_ipAddresses; + private bool m_decoded; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Opc.Ua.Security.Certificates.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Opc.Ua.Security.Certificates.csproj new file mode 100644 index 00000000..fdfea6c7 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Opc.Ua.Security.Certificates.csproj @@ -0,0 +1,48 @@ + + + + Opc.Ua.Security.Certificates + $(LibTargetFrameworks) + 6 + OPCFoundation.NetStandard.Opc.Ua.Security.Certificates + Opc.Ua.Security.Certificates + OPC UA Security X509 Certificates Class Library + true + true + + + + $(DefineConstants);ECC_SUPPORT + + + + $(DefineConstants);ECC_SUPPORT + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateBuilder.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateBuilder.cs new file mode 100644 index 00000000..40837d43 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateBuilder.cs @@ -0,0 +1,500 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ +#if !NETSTANDARD2_1 && !NET472 + +using System; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Linq; +using System.Collections.Generic; +using Org.BouncyCastle.Asn1; +using Org.BouncyCastle.Asn1.X509; +using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.Crypto.Operators; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Crypto.Prng; +using Org.BouncyCastle.Math; +using Org.BouncyCastle.Security; +using Org.BouncyCastle.X509; +using Opc.Ua.Security.Certificates.BouncyCastle; +using System.Collections; +using Org.BouncyCastle.Pkcs; +using System.Diagnostics; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Builds a Certificate. + /// + public class CertificateBuilder : CertificateBuilderBase + { + #region Constructors + /// + /// Create a Certificate builder. + /// + public static ICertificateBuilder Create(X500DistinguishedName subjectName) + { + return new CertificateBuilder(subjectName); + } + + /// + /// Create a Certificate builder. + /// + public static ICertificateBuilder Create(string subjectName) + { + return new CertificateBuilder(subjectName); + } + + /// + /// Initialize a Certificate builder. + /// + private CertificateBuilder(X500DistinguishedName subjectName) + : base(subjectName) + { + } + + /// + /// Initialize a Certificate builder. + /// + private CertificateBuilder(string subjectName) + : base(subjectName) + { + } + #endregion + + #region Public Methods + /// + public override X509Certificate2 CreateForRSA() + { + if (m_rsaPublicKey != null) + { + return CreateForRSAWithPublicKey(); + } + else + { + string passcode = Guid.NewGuid().ToString(); + return X509PfxUtils.CreateCertificateFromPKCS12(CreatePfxForRSA(passcode), passcode); + } + } + + /// + public override X509Certificate2 CreateForRSA(X509SignatureGenerator generator) + { + if (generator == null) throw new ArgumentNullException(nameof(generator)); + ISignatureFactory signatureFactory = new X509SignatureFactory(HashAlgorithmName, generator); + if (m_rsaPublicKey != null) + { + return CreateForRSAWithPublicKey(signatureFactory); + } + else + { + string passcode = Guid.NewGuid().ToString(); + return X509PfxUtils.CreateCertificateFromPKCS12(CreatePfxForRSA(passcode, signatureFactory), passcode); + } + } + + /// + public override ICertificateBuilderCreateForRSAAny SetRSAPublicKey(byte[] publicKey) + { + if (publicKey == null) throw new ArgumentNullException(nameof(publicKey)); + try + { + var asymmetricKeyParameter = PublicKeyFactory.CreateKey(publicKey); + var rsaKeyParameters = asymmetricKeyParameter as RsaKeyParameters; + var parameters = new RSAParameters { + Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned(), + Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned() + }; + RSA rsaPublicKey = RSA.Create(); + rsaPublicKey.ImportParameters(parameters); + m_rsaPublicKey = rsaPublicKey; + } + catch (Exception e) + { + throw new ArgumentException("Failed to decode and import the public key.", e); + } + return this; + } + + /// + /// Create a Pfx with a private key by combining + /// an existing X509Certificate2 and a RSA private key. + /// + public static byte[] CreatePfxWithRSAPrivateKey( + X509Certificate2 certificate, + string friendlyName, + RSA privateKey, + string passcode) + { + var x509 = new X509CertificateParser().ReadCertificate(certificate.RawData); + using (var cfrg = new CertificateFactoryRandomGenerator()) + { + return X509Utils.CreatePfxWithPrivateKey( + x509, friendlyName, + X509Utils.GetPrivateKeyParameter(privateKey), + passcode, + new SecureRandom(cfrg)); + } + } + + /// + /// Creates a certificate signing request from an + /// existing certificate with a private key. + /// + public static byte[] CreateSigningRequest( + X509Certificate2 certificate, + IList domainNames = null + ) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + using (var cfrg = new CertificateFactoryRandomGenerator()) + { + SecureRandom random = new SecureRandom(cfrg); + + // try to get signing/private key from certificate passed in + AsymmetricKeyParameter signingKey = X509Utils.GetPrivateKeyParameter(certificate); + RsaKeyParameters publicKey = X509Utils.GetPublicKeyParameter(certificate); + + ISignatureFactory signatureFactory = + new Asn1SignatureFactory(X509Utils.GetRSAHashAlgorithm(X509Defaults.HashAlgorithmName), signingKey, random); + + Asn1Set attributes = null; + var san = X509Extensions.FindExtension(certificate); + X509SubjectAltNameExtension alternateName = new X509SubjectAltNameExtension(san, san.Critical); + + string applicationUri = null; + domainNames = domainNames ?? new List(); + if (alternateName != null) + { + if (alternateName.Uris.Count > 0) + { + applicationUri = alternateName.Uris[0]; + } + foreach (var name in alternateName.DomainNames) + { + if (!domainNames.Any(s => s.Equals(name, StringComparison.OrdinalIgnoreCase))) + { + domainNames.Add(name); + } + } + foreach (var ipAddress in alternateName.IPAddresses) + { + if (!domainNames.Any(s => s.Equals(ipAddress, StringComparison.OrdinalIgnoreCase))) + { + domainNames.Add(ipAddress); + } + } + } + + // build CSR extensions + var generalNames = new List(); + + if (applicationUri != null) + { + generalNames.Add(new GeneralName(GeneralName.UniformResourceIdentifier, applicationUri)); + } + + if (domainNames.Count > 0) + { + generalNames.AddRange(BouncyCastle.X509Extensions.CreateSubjectAlternateNameDomains(domainNames)); + } + + if (generalNames.Count > 0) + { + IList oids = new ArrayList(); + IList values = new ArrayList(); + oids.Add(Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectAlternativeName); + values.Add(new Org.BouncyCastle.Asn1.X509.X509Extension(false, + new DerOctetString(new GeneralNames(generalNames.ToArray()).GetDerEncoded()))); + var attribute = new Org.BouncyCastle.Asn1.Pkcs.AttributePkcs(Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Pkcs9AtExtensionRequest, + new DerSet(new Org.BouncyCastle.Asn1.X509.X509Extensions(oids, values))); + attributes = new DerSet(attribute); + } + + var pkcs10CertificationRequest = new Pkcs10CertificationRequest( + signatureFactory, + new CertificateFactoryX509Name(false, certificate.Subject), + publicKey, + attributes); + + return pkcs10CertificationRequest.GetEncoded(); + } + } + #endregion + + #region Private Methods + /// + /// Create a new serial number and validate lifetime. + /// + /// + private void CreateDefaults(IRandomGenerator random = null) + { + if (!m_presetSerial) + { + NewSerialNumber(random); + } + m_presetSerial = false; + + ValidateSettings(); + } + + /// + /// Set all mandatory fields. + /// + /// The cert generator + private void CreateMandatoryFields(X509V3CertificateGenerator cg) + { + m_subjectDN = new CertificateFactoryX509Name(SubjectName.Name); + // subject and issuer DN + m_issuerDN = null; + if (IssuerCAKeyCert != null) + { + m_issuerDN = new CertificateFactoryX509Name(IssuerCAKeyCert.Subject); + } + else + { + // self signed + m_issuerDN = m_subjectDN; + } + cg.SetIssuerDN(m_issuerDN); + cg.SetSubjectDN(m_subjectDN); + + // valid for + cg.SetNotBefore(NotBefore); + cg.SetNotAfter(NotAfter); + + // serial number + cg.SetSerialNumber(new BigInteger(1, m_serialNumber.Reverse().ToArray())); + } + + /// + /// Create the extensions. + /// + /// The cert generator. + /// The public key to use for the extensions. + private void CreateExtensions(X509V3CertificateGenerator cg, AsymmetricKeyParameter subjectPublicKey) + { + // Subject key identifier + cg.AddExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectKeyIdentifier.Id, false, + new SubjectKeyIdentifier(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(subjectPublicKey))); + + // Basic constraints + BasicConstraints basicConstraints = new BasicConstraints(m_isCA); + if (m_isCA && m_pathLengthConstraint >= 0) + { + basicConstraints = new BasicConstraints(m_pathLengthConstraint); + } + else if (!m_isCA && IssuerCAKeyCert == null) + { // self-signed + basicConstraints = new BasicConstraints(0); + } + cg.AddExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.BasicConstraints.Id, true, basicConstraints); + + // Authority Key identifier references the issuer cert or itself when self signed + AsymmetricKeyParameter issuerPublicKey; + BigInteger issuerSerialNumber; + if (IssuerCAKeyCert != null) + { + issuerPublicKey = X509Utils.GetPublicKeyParameter(IssuerCAKeyCert); + issuerSerialNumber = X509Utils.GetSerialNumber(IssuerCAKeyCert); + } + else + { + issuerPublicKey = subjectPublicKey; + issuerSerialNumber = new BigInteger(1, m_serialNumber.Reverse().ToArray()); + } + + cg.AddExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.AuthorityKeyIdentifier.Id, false, + new AuthorityKeyIdentifier(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(issuerPublicKey), + new GeneralNames(new GeneralName(m_issuerDN)), issuerSerialNumber)); + + if (!m_isCA) + { + // Key usage + var keyUsage = KeyUsage.DataEncipherment | KeyUsage.DigitalSignature | + KeyUsage.NonRepudiation | KeyUsage.KeyEncipherment; + if (IssuerCAKeyCert == null) + { // only self signed certs need KeyCertSign flag. + keyUsage |= KeyUsage.KeyCertSign; + } + cg.AddExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.KeyUsage, true, + new KeyUsage(keyUsage)); + + // Extended Key usage + cg.AddExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.ExtendedKeyUsage, true, + new ExtendedKeyUsage(new List() { + new DerObjectIdentifier(Oids.ServerAuthentication), // server auth + new DerObjectIdentifier(Oids.ClientAuthentication), // client auth + })); + } + else + { + // Key usage CA + cg.AddExtension(Org.BouncyCastle.Asn1.X509.X509Extensions.KeyUsage, true, + new KeyUsage(KeyUsage.CrlSign | KeyUsage.DigitalSignature | KeyUsage.KeyCertSign)); + } + + foreach (var extension in m_extensions) + { + cg.AddExtension(extension.Oid.Value, extension.Critical, Asn1Object.FromByteArray(extension.RawData)); + } + + } + + /// + /// Create the RSA certificate with a given public key. + /// + /// The signed certificate. + private X509Certificate2 CreateForRSAWithPublicKey(ISignatureFactory signatureFactory = null) + { + // Cases locked out by API flow + Debug.Assert(m_rsaPublicKey != null, "Need a public key for the certificate."); + Debug.Assert(IssuerCAKeyCert != null, "Need a issuer certificate to sign."); + if (!IssuerCAKeyCert.HasPrivateKey && signatureFactory == null) + { + throw new NotSupportedException("Need an issuer certificate with a private key or a signature generator."); + } + + // cert generators + CreateDefaults(); + + var cg = new X509V3CertificateGenerator(); + CreateMandatoryFields(cg); + + // set public key + AsymmetricKeyParameter subjectPublicKey = X509Utils.GetPublicKeyParameter(m_rsaPublicKey); + cg.SetPublicKey(subjectPublicKey); + + CreateExtensions(cg, subjectPublicKey); + + // sign certificate by issuer + if (signatureFactory == null) + { + AsymmetricKeyParameter signingKey = X509Utils.GetPrivateKeyParameter(IssuerCAKeyCert); + signatureFactory = new Asn1SignatureFactory(X509Utils.GetRSAHashAlgorithm(HashAlgorithmName), signingKey); + } + Org.BouncyCastle.X509.X509Certificate x509 = cg.Generate(signatureFactory); + + // create the signed cert + return new X509Certificate2(x509.GetEncoded()); + } + + /// + /// Create the RSA certificate as Pfx byte array with a private key. + /// + /// + /// Returns the Pfx with certificate and private key. + /// + private byte[] CreatePfxForRSA(string passcode, ISignatureFactory signatureFactory = null) + { + // Cases locked out by API flow + Debug.Assert(m_rsaPublicKey == null, "A public key is not supported for the certificate."); + + if (signatureFactory != null && IssuerCAKeyCert == null) + { + throw new NotSupportedException("Need an issuer certificate for a signature generator."); + } + + if (IssuerCAKeyCert != null && + (!IssuerCAKeyCert.HasPrivateKey && signatureFactory == null)) + { + throw new NotSupportedException("Need an issuer certificate with a private key or a signature generator."); + } + + using (var cfrg = new CertificateFactoryRandomGenerator()) + { + // cert generators + SecureRandom random = new SecureRandom(cfrg); + + CreateDefaults(cfrg); + + X509V3CertificateGenerator cg = new X509V3CertificateGenerator(); + CreateMandatoryFields(cg); + + // create Private/Public Keypair + AsymmetricKeyParameter subjectPublicKey = null; + AsymmetricKeyParameter subjectPrivateKey = null; + using (var rsa = new RSACryptoServiceProvider(m_keySize == 0 ? X509Defaults.RSAKeySize : m_keySize)) + { + subjectPublicKey = X509Utils.GetPublicKeyParameter(rsa); + subjectPrivateKey = X509Utils.GetPrivateKeyParameter(rsa); + } + + cg.SetPublicKey(subjectPublicKey); + CreateExtensions(cg, subjectPublicKey); + + // sign certificate + if (signatureFactory == null) + { + AsymmetricKeyParameter signingKey; + if (IssuerCAKeyCert != null) + { + // signed by issuer + signingKey = X509Utils.GetPrivateKeyParameter(IssuerCAKeyCert); + } + else + { + // self signed + signingKey = subjectPrivateKey; + } + signatureFactory = new Asn1SignatureFactory( + X509Utils.GetRSAHashAlgorithm(HashAlgorithmName), signingKey, random); + } + Org.BouncyCastle.X509.X509Certificate x509 = cg.Generate(signatureFactory); + + // note: this Pfx has a private key! + return X509Utils.CreatePfxWithPrivateKey(x509, null, subjectPrivateKey, passcode, random); + } + } + + /// + /// Create a new random serial number. + /// + private void NewSerialNumber(IRandomGenerator random) + { + if (random == null) + { + NewSerialNumber(); + } + else + { + m_serialNumber = new byte[m_serialNumberLength]; + random.NextBytes(m_serialNumber); + m_serialNumber[m_serialNumberLength - 1] &= 0x7f; + } + } + #endregion + + #region Private Fields + private X509Name m_issuerDN; + private X509Name m_subjectDN; + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateFactoryRandomGenerator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateFactoryRandomGenerator.cs new file mode 100644 index 00000000..51c680e0 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateFactoryRandomGenerator.cs @@ -0,0 +1,75 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#if !NETSTANDARD2_1 && !NET472 +using System; +using System.Security.Cryptography; +using Org.BouncyCastle.Crypto.Prng; + +namespace Opc.Ua.Security.Certificates.BouncyCastle +{ + /// + /// Secure .Net Core Random Number generator wrapper for Bounce Castle. + /// Creates an instance of RNGCryptoServiceProvider or an OpenSSL based version on other OS. + /// + public class CertificateFactoryRandomGenerator : IRandomGenerator, IDisposable + { + RandomNumberGenerator m_prg; + + /// + /// Creates an instance of a crypthographic secure random number generator. + /// + public CertificateFactoryRandomGenerator() + { + m_prg = RandomNumberGenerator.Create(); + } + + /// + /// Dispose the random number generator. + /// + public void Dispose() + { + m_prg.Dispose(); + } + + /// Add more seed material to the generator. Not needed here. + public void AddSeedMaterial(byte[] seed) { } + + /// Add more seed material to the generator. Not needed here. + public void AddSeedMaterial(long seed) { } + + /// + /// Fills an array of bytes with a cryptographically strong + /// random sequence of values. + /// + /// Array to be filled. + public void NextBytes(byte[] bytes) + { + m_prg.GetBytes(bytes); + } + + /// + /// Fills an array of bytes with a cryptographically strong + /// random sequence of values. + /// + /// Array to receive bytes. + /// Index to start filling at. + /// Length of segment to fill. + public void NextBytes(byte[] bytes, int start, int len) + { + byte[] temp = new byte[len]; + m_prg.GetBytes(temp); + Array.Copy(temp, 0, bytes, start, len); + } + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateFactoryX509Name.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateFactoryX509Name.cs new file mode 100644 index 00000000..8f3f9411 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/CertificateFactoryX509Name.cs @@ -0,0 +1,55 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#if !NETSTANDARD2_1 && !NET472 + +using Org.BouncyCastle.Asn1.X509; + +namespace Opc.Ua.Security.Certificates.BouncyCastle +{ + /// + /// A converter class to create a X509Name object + /// from a X509Certificate subject. + /// + /// + /// Handles subtle differences in the string representation + /// of the .NET and the Bouncy Castle implementation. + /// + public class CertificateFactoryX509Name : X509Name + { + /// + /// Create the X509Name from a distinguished name. + /// + /// The distinguished name. + public CertificateFactoryX509Name(string distinguishedName) : + base(true, ConvertToX509Name(distinguishedName)) + { + } + + /// + /// Create the X509Name from a distinguished name. + /// + /// Reverse the order of the names. + /// The distinguished name. + public CertificateFactoryX509Name(bool reverse, string distinguishedName) : + base(reverse, ConvertToX509Name(distinguishedName)) + { + } + + private static string ConvertToX509Name(string distinguishedName) + { + // convert from X509Certificate to bouncy castle DN entries + return distinguishedName.Replace("S=", "ST="); + } + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/PEMReader.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/PEMReader.cs new file mode 100644 index 00000000..770c1909 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/PEMReader.cs @@ -0,0 +1,134 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#if !NETSTANDARD2_1 +using System; +using System.Security.Cryptography; +using System.IO; +using System.Text; +using Org.BouncyCastle.OpenSsl; +using Org.BouncyCastle.Security; +using Org.BouncyCastle.Crypto.Parameters; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Methods or read PEM data. + /// + public static class PEMReader + { + #region Public Methods + /// + /// Import a private key from PEM. + /// + public static RSA ImportPrivateKeyFromPEM( + byte[] pemDataBlob, + string password = null) + { + RSA rsaPrivateKey = null; + Org.BouncyCastle.OpenSsl.PemReader pemReader; + using (StreamReader pemStreamReader = new StreamReader(new MemoryStream(pemDataBlob), Encoding.UTF8, true)) + { + if (String.IsNullOrEmpty(password)) + { + pemReader = new Org.BouncyCastle.OpenSsl.PemReader(pemStreamReader); + } + else + { + Password pwFinder = new Password(password.ToCharArray()); + pemReader = new Org.BouncyCastle.OpenSsl.PemReader(pemStreamReader, pwFinder); + } + try + { + // find the private key in the PEM blob + var pemObject = pemReader.ReadObject(); + while (pemObject != null) + { + RsaPrivateCrtKeyParameters privateKey = null; + var keypair = pemObject as Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair; + if (keypair != null) + { + privateKey = keypair.Private as RsaPrivateCrtKeyParameters; + } + + if (privateKey == null) + { + privateKey = pemObject as RsaPrivateCrtKeyParameters; + } + + if (privateKey != null) + { + rsaPrivateKey = RSA.Create(); + rsaPrivateKey.ImportParameters(DotNetUtilities.ToRSAParameters(privateKey)); + break; + } + + // read next object + pemObject = pemReader.ReadObject(); + } + } + finally + { + pemReader.Reader.Dispose(); + } + } + + if (rsaPrivateKey == null) + { + throw new CryptographicException("PEM data blob does not contain a private key."); + } + + return rsaPrivateKey; + } + #endregion + + #region Internal class + /// + /// Wrapper for a password string. + /// + internal class Password + : IPasswordFinder + { + private readonly char[] password; + + public Password( + char[] word) + { + this.password = (char[])word.Clone(); + } + + public char[] GetPassword() + { + return (char[])password.Clone(); + } + } + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/PEMWriter.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/PEMWriter.cs new file mode 100644 index 00000000..ea3bc527 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/PEMWriter.cs @@ -0,0 +1,103 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#if !NETSTANDARD2_1 + +using System; +using System.Security.Cryptography.X509Certificates; +using System.IO; +using System.Text; +using Opc.Ua.Security.Certificates.BouncyCastle; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Pkcs; +using Org.BouncyCastle.Asn1.Pkcs; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Write certificate data in PEM format. + /// + public static class PEMWriter + { + #region Public Methods + /// + /// Returns a byte array containing the CSR in PEM format. + /// + public static byte[] ExportCSRAsPEM(byte[] csr) + { + return EncodeAsPEM(csr, "CERTIFICATE REQUEST"); + } + + /// + /// Returns a byte array containing the cert in PEM format. + /// + public static byte[] ExportCertificateAsPEM(X509Certificate2 certificate) + { + return EncodeAsPEM(certificate.RawData, "CERTIFICATE"); + } + + /// + /// Returns a byte array containing the private key in PEM format. + /// + public static byte[] ExportPrivateKeyAsPEM( + X509Certificate2 certificate, + string password = null + ) + { + if (!String.IsNullOrEmpty(password)) throw new ArgumentException(nameof(password), "Export with password not supported on this platform."); + RsaPrivateCrtKeyParameters privateKeyParameter = X509Utils.GetPrivateKeyParameter(certificate); + // write private key as PKCS#8 + PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParameter); + byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded(); + return EncodeAsPEM(serializedPrivateBytes, "PRIVATE KEY"); + } + #endregion + + #region Private Methods + private static byte[] EncodeAsPEM(byte[] content, string contentType) + { + const int LineLength = 64; + string base64 = Convert.ToBase64String(content); + using (TextWriter textWriter = new StringWriter()) + { + textWriter.WriteLine("-----BEGIN {0}-----", contentType); + while (base64.Length > LineLength) + { + textWriter.WriteLine(base64.Substring(0, LineLength)); + base64 = base64.Substring(LineLength); + } + textWriter.WriteLine(base64); + textWriter.WriteLine("-----END {0}-----", contentType); + return Encoding.ASCII.GetBytes(textWriter.ToString()); + } + } + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509Extensions.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509Extensions.cs new file mode 100644 index 00000000..2853ae31 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509Extensions.cs @@ -0,0 +1,85 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#if !NETSTANDARD2_1 && !NET472 + +using System; +using System.Collections.Generic; +using Org.BouncyCastle.Asn1; +using Org.BouncyCastle.Asn1.X509; +using X509Extension = System.Security.Cryptography.X509Certificates.X509Extension; + +namespace Opc.Ua.Security.Certificates.BouncyCastle +{ + /// + /// Helper functions for X509 extensions using Org.BouncyCastle. + /// + public static class X509Extensions + { + /// + /// Build the Subject Alternate Name. + /// + public static X509Extension BuildSubjectAltNameExtension(IList uris, IList domainNames, IList ipAddresses) + { + // subject alternate name + var generalNames = new List(); + foreach (var uri in uris) + { + generalNames.Add(new GeneralName(GeneralName.UniformResourceIdentifier, uri)); + } + generalNames.AddRange(CreateSubjectAlternateNameDomains(domainNames)); + generalNames.AddRange(CreateSubjectAlternateNameDomains(ipAddresses)); + var rawData = new DerOctetString(new GeneralNames(generalNames.ToArray()).GetDerEncoded()).GetOctets(); + return new X509Extension(Org.BouncyCastle.Asn1.X509.X509Extensions.SubjectAlternativeName.Id, rawData, false); + } + + /// + /// helper to build alternate name domains list for certs. + /// + public static List CreateSubjectAlternateNameDomains(IList domainNames) + { + // subject alternate name + var generalNames = new List(); + for (int i = 0; i < domainNames.Count; i++) + { + int domainType = GeneralName.OtherName; + switch (Uri.CheckHostName(domainNames[i])) + { + case UriHostNameType.Dns: domainType = GeneralName.DnsName; break; + case UriHostNameType.IPv4: + case UriHostNameType.IPv6: domainType = GeneralName.IPAddress; break; + default: continue; + } + generalNames.Add(new GeneralName(domainType, domainNames[i])); + } + return generalNames; + } + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509SignatureFactory.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509SignatureFactory.cs new file mode 100644 index 00000000..b3318156 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509SignatureFactory.cs @@ -0,0 +1,154 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ +#if !NETSTANDARD2_1 && !NET472 + +using System; +using System.Security.Cryptography; +using Org.BouncyCastle.Asn1.X509; +using Org.BouncyCastle.Crypto; +using System.IO; + +namespace Opc.Ua.Security.Certificates.BouncyCastle +{ + /// + /// The signature factory for Bouncy Castle to sign a digest with a KeyVault key. + /// + public class X509SignatureFactory : ISignatureFactory + { + private readonly AlgorithmIdentifier _algID; + private readonly HashAlgorithmName _hashAlgorithm; + private readonly X509SignatureGenerator _generator; + + /// + /// Constructor which also specifies a source of randomness to be used if one is required. + /// + /// The name of the signature algorithm to use. + /// The signature generator. + public X509SignatureFactory(HashAlgorithmName hashAlgorithm, X509SignatureGenerator generator) + { + Org.BouncyCastle.Asn1.DerObjectIdentifier sigOid; + if (hashAlgorithm == HashAlgorithmName.SHA1) + { + sigOid = Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Sha1WithRsaEncryption; + } + else if (hashAlgorithm == HashAlgorithmName.SHA256) + { + sigOid = Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Sha256WithRsaEncryption; + } + else if (hashAlgorithm == HashAlgorithmName.SHA384) + { + sigOid = Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Sha384WithRsaEncryption; + } + else if (hashAlgorithm == HashAlgorithmName.SHA512) + { + sigOid = Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Sha512WithRsaEncryption; + } + else + { + throw new ArgumentOutOfRangeException(nameof(hashAlgorithm)); + } + _hashAlgorithm = hashAlgorithm; + _generator = generator; + _algID = new AlgorithmIdentifier(sigOid); + } + + /// + public Object AlgorithmDetails => _algID; + + /// + public IStreamCalculator CreateCalculator() + { + return new X509StreamCalculator(_generator, _hashAlgorithm); + } + + /// + /// Signs a Bouncy Castle digest stream with the .Net X509SignatureGenerator. + /// + class X509StreamCalculator : IStreamCalculator + { + private X509SignatureGenerator _generator; + private readonly HashAlgorithmName _hashAlgorithm; + + /// + /// Ctor for the stream calculator. + /// + /// The X509SignatureGenerator to sign the digest. + /// The hash algorithm to use for the signature. + public X509StreamCalculator( + X509SignatureGenerator generator, + HashAlgorithmName hashAlgorithm) + { + Stream = new MemoryStream(); + _generator = generator; + _hashAlgorithm = hashAlgorithm; + } + + /// + /// The digest stream (MemoryStream). + /// + public Stream Stream { get; } + + /// + /// Callback signs the digest with X509SignatureGenerator. + /// + public object GetResult() + { + var memStream = Stream as MemoryStream; + if (memStream == null) throw new ArgumentNullException(nameof(Stream)); + var digest = memStream.ToArray(); + var signature = _generator.SignData(digest, _hashAlgorithm); + return new MemoryBlockResult(signature); + } + } + + /// + /// Helper for Bouncy Castle signing operation to store the result in a memory block. + /// + class MemoryBlockResult : IBlockResult + { + private readonly byte[] _data; + /// + public MemoryBlockResult(byte[] data) + { + _data = data; + } + /// + public byte[] Collect() + { + return _data; + } + /// + public int Collect(byte[] destination, int offset) + { + throw new NotImplementedException(); + } + } + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509Utils.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509Utils.cs new file mode 100644 index 00000000..8fd0cf64 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Org.BouncyCastle/X509Utils.cs @@ -0,0 +1,179 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#if !NETSTANDARD2_1 +using System; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using Org.BouncyCastle.Asn1.X509; +using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Math; +using Org.BouncyCastle.OpenSsl; +using Org.BouncyCastle.Pkcs; +using Org.BouncyCastle.Security; + +namespace Opc.Ua.Security.Certificates.BouncyCastle +{ + /// + /// Helpers to create certificates, CRLs and extensions. + /// + internal static class X509Utils + { + #region Internal Methods + /// + /// Create a Pfx blob with a private key by combining + /// a bouncy castle X509Certificate and a private key. + /// + internal static byte[] CreatePfxWithPrivateKey( + Org.BouncyCastle.X509.X509Certificate certificate, + string friendlyName, + AsymmetricKeyParameter privateKey, + string passcode, + SecureRandom random) + { + // create pkcs12 store for cert and private key + using (MemoryStream pfxData = new MemoryStream()) + { + Pkcs12StoreBuilder builder = new Pkcs12StoreBuilder(); + builder.SetUseDerEncoding(true); + Pkcs12Store pkcsStore = builder.Build(); + X509CertificateEntry[] chain = new X509CertificateEntry[1]; + chain[0] = new X509CertificateEntry(certificate); + if (string.IsNullOrEmpty(friendlyName)) + { + friendlyName = GetCertificateCommonName(certificate); + } + pkcsStore.SetKeyEntry(friendlyName, new AsymmetricKeyEntry(privateKey), chain); + pkcsStore.Save(pfxData, passcode.ToCharArray(), random); + return pfxData.ToArray(); + } + } + + /// + /// Helper to get the Bouncy Castle hash algorithm name by .NET name . + /// + internal static string GetRSAHashAlgorithm(HashAlgorithmName hashAlgorithmName) + { + if (hashAlgorithmName == HashAlgorithmName.SHA1) + { + return "SHA1WITHRSA"; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA256) + { + return "SHA256WITHRSA"; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA384) + { + return "SHA384WITHRSA"; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA512) + { + return "SHA512WITHRSA"; + } + throw new CryptographicException($"The hash algorithm {hashAlgorithmName} is not supported"); + } + + /// + /// Get public key parameters from a X509Certificate2 + /// + internal static RsaKeyParameters GetPublicKeyParameter(X509Certificate2 certificate) + { + RSA rsa = null; + try + { + rsa = certificate.GetRSAPublicKey(); + return GetPublicKeyParameter(rsa); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Get public key parameters from a RSA. + /// + internal static RsaKeyParameters GetPublicKeyParameter(RSA rsa) + { + RSAParameters rsaParams = rsa.ExportParameters(false); + return new RsaKeyParameters( + false, + new BigInteger(1, rsaParams.Modulus), + new BigInteger(1, rsaParams.Exponent)); + } + + /// + /// Get private key parameters from a X509Certificate2. + /// The private key must be exportable. + /// + internal static RsaPrivateCrtKeyParameters GetPrivateKeyParameter(X509Certificate2 certificate) + { + RSA rsa = null; + try + { + // try to get signing/private key from certificate passed in + rsa = certificate.GetRSAPrivateKey(); + return GetPrivateKeyParameter(rsa); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Get private key parameters from a RSA private key. + /// The private key must be exportable. + /// + internal static RsaPrivateCrtKeyParameters GetPrivateKeyParameter(RSA rsa) + { + RSAParameters rsaParams = rsa.ExportParameters(true); + return new RsaPrivateCrtKeyParameters( + new BigInteger(1, rsaParams.Modulus), + new BigInteger(1, rsaParams.Exponent), + new BigInteger(1, rsaParams.D), + new BigInteger(1, rsaParams.P), + new BigInteger(1, rsaParams.Q), + new BigInteger(1, rsaParams.DP), + new BigInteger(1, rsaParams.DQ), + new BigInteger(1, rsaParams.InverseQ)); + } + + + /// + /// Get the serial number from a certificate as BigInteger. + /// + internal static BigInteger GetSerialNumber(X509Certificate2 certificate) + { + byte[] serialNumber = certificate.GetSerialNumber(); + return new BigInteger(1, serialNumber.Reverse().ToArray()); + } + + /// + /// Read the Common Name from a certificate. + /// + internal static string GetCertificateCommonName(Org.BouncyCastle.X509.X509Certificate certificate) + { + var subjectDN = certificate.SubjectDN.GetValueList(X509Name.CN); + if (subjectDN.Count > 0) + { + return subjectDN[0].ToString(); + } + return string.Empty; + } + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/PEM/PEMReader.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/PEM/PEMReader.cs new file mode 100644 index 00000000..2d7635fb --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/PEM/PEMReader.cs @@ -0,0 +1,118 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#if NETSTANDARD2_1 + +using System; +using System.Security.Cryptography; +using System.IO; +using System.Text; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Methods or read PEM data. + /// + public static class PEMReader + { + #region Public Methods + /// + /// Import a PKCS#8 private key or RSA private key from PEM. + /// The PKCS#8 private key may be encrypted using a password. + /// + /// The PEM datablob as byte array. + /// The password to use (optional). + /// The RSA private key. + public static RSA ImportPrivateKeyFromPEM( + byte[] pemDataBlob, + string password = null) + { + string[] labels = { + "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", "RSA PRIVATE KEY" + }; + try + { + string pemText = Encoding.UTF8.GetString(pemDataBlob); + int count = 0; + foreach (var label in labels) + { + count++; + string beginlabel = $"-----BEGIN {label}-----"; + int beginIndex = pemText.IndexOf(beginlabel); + if (beginIndex < 0) + { + continue; + } + string endlabel = $"-----END {label}-----"; + int endIndex = pemText.IndexOf(endlabel); + beginIndex += beginlabel.Length; + if (endIndex < 0 || endIndex <= beginIndex) + { + continue; + } + var pemData = pemText.Substring(beginIndex, endIndex - beginIndex); + byte[] pemDecoded = new byte[pemData.Length]; + int bytesDecoded; + if (Convert.TryFromBase64Chars(pemData, pemDecoded, out bytesDecoded)) + { + RSA rsaPrivateKey = RSA.Create(); + int bytesRead; + switch (count) + { + case 1: + if (String.IsNullOrEmpty(password)) + { + throw new ArgumentException("Need password for encrypted private key."); + } + rsaPrivateKey.ImportEncryptedPkcs8PrivateKey(password.ToCharArray(), pemDecoded, out bytesRead); + break; + case 2: rsaPrivateKey.ImportPkcs8PrivateKey(pemDecoded, out bytesRead); break; + case 3: rsaPrivateKey.ImportRSAPrivateKey(pemDecoded, out bytesRead); break; + } + return rsaPrivateKey; + } + } + } + catch (CryptographicException) + { + throw; + } + catch (Exception ex) + { + throw new CryptographicException("Failed to decode the PEM private key.", ex); + } + throw new ArgumentException("No private PEM key found."); + } + #endregion + + #region Private Methods + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/PEM/PEMWriter.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/PEM/PEMWriter.cs new file mode 100644 index 00000000..29ea8835 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/PEM/PEMWriter.cs @@ -0,0 +1,135 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#if NETSTANDARD2_1 + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Security.Cryptography; +using System.IO; +using System.Text; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Write certificate data in PEM format. + /// + public static class PEMWriter + { + #region Public Methods + /// + /// Returns a byte array containing the CSR in PEM format. + /// + public static byte[] ExportCSRAsPEM(byte[] csr) + { + return EncodeAsPEM(csr, "CERTIFICATE REQUEST"); + } + + /// + /// Returns a byte array containing the cert in PEM format. + /// + public static byte[] ExportCertificateAsPEM(X509Certificate2 certificate) + { + return EncodeAsPEM(certificate.RawData, "CERTIFICATE"); + } + + /// + /// Returns a byte array containing the public key in PEM format. + /// + public static byte[] ExportPublicKeyAsPEM( + X509Certificate2 certificate + ) + { + byte[] exportedPublicKey = null; + using (RSA rsaPublicKey = certificate.GetRSAPublicKey()) + { + exportedPublicKey = rsaPublicKey.ExportSubjectPublicKeyInfo(); + } + return EncodeAsPEM(exportedPublicKey, "PUBLIC KEY"); + } + + /// + /// Returns a byte array containing the RSA private key in PEM format. + /// + public static byte[] ExportRSAPrivateKeyAsPEM( + X509Certificate2 certificate) + { + byte[] exportedRSAPrivateKey = null; + using (RSA rsaPrivateKey = certificate.GetRSAPrivateKey()) + { + // write private key as PKCS#1 + exportedRSAPrivateKey = rsaPrivateKey.ExportRSAPrivateKey(); + } + return EncodeAsPEM(exportedRSAPrivateKey, "RSA PRIVATE KEY"); + } + + /// + /// Returns a byte array containing the private key in PEM format. + /// + public static byte[] ExportPrivateKeyAsPEM( + X509Certificate2 certificate, + string password = null + ) + { + byte[] exportedPkcs8PrivateKey = null; + using (RSA rsaPrivateKey = certificate.GetRSAPrivateKey()) + { + // write private key as PKCS#8 + exportedPkcs8PrivateKey = String.IsNullOrEmpty(password) ? + rsaPrivateKey.ExportPkcs8PrivateKey() : + rsaPrivateKey.ExportEncryptedPkcs8PrivateKey(password.ToCharArray(), + new PbeParameters(PbeEncryptionAlgorithm.TripleDes3KeyPkcs12, HashAlgorithmName.SHA1, 2000)); + } + return EncodeAsPEM(exportedPkcs8PrivateKey, + String.IsNullOrEmpty(password) ? "PRIVATE KEY" : "ENCRYPTED PRIVATE KEY"); + } + #endregion + + #region Private Methods + private static byte[] EncodeAsPEM(byte[] content, string contentType) + { + const int LineLength = 64; + string base64 = Convert.ToBase64String(content); + using (TextWriter textWriter = new StringWriter()) + { + textWriter.WriteLine("-----BEGIN {0}-----", contentType); + while (base64.Length > LineLength) + { + textWriter.WriteLine(base64.Substring(0, LineLength)); + base64 = base64.Substring(LineLength); + } + textWriter.WriteLine(base64); + textWriter.WriteLine("-----END {0}-----", contentType); + return Encoding.ASCII.GetBytes(textWriter.ToString()); + } + } + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..f6415f09 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/Properties/AssemblyInfo.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ +using System.Runtime.CompilerServices; + +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.Security.Certificates.Tests, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.Security.Certificates.Tests")] +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/System.Security.Cryptography.X509Certificates/RSAPkcs1X509SignatureGenerator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/System.Security.Cryptography.X509Certificates/RSAPkcs1X509SignatureGenerator.cs new file mode 100644 index 00000000..c2efbb2c --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/System.Security.Cryptography.X509Certificates/RSAPkcs1X509SignatureGenerator.cs @@ -0,0 +1,107 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#if !NETSTANDARD2_1 && !NET472 + +// This source code is intentionally copied from the .NET core runtime to close +// a gap in the .NET 4.6 and the .NET Core 2.x runtime implementations. +// original code is located here: +// https://github.com/dotnet/runtime/blob/master/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/RSAPkcs1X509SignatureGenerator.cs +#pragma warning disable CS1591 // Suppress missing XML comments to preserve original code + +using System; +using System.Diagnostics; +using System.Formats.Asn1; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + internal sealed class RSAPkcs1X509SignatureGenerator : X509SignatureGenerator + { + private readonly RSA _key; + + internal RSAPkcs1X509SignatureGenerator(RSA key) + { + Debug.Assert(key != null); + + _key = key; + } + + public override byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm) + { + return _key.SignData(data, hashAlgorithm, RSASignaturePadding.Pkcs1); + } + + protected override PublicKey BuildPublicKey() + { + return BuildPublicKey(_key); + } + + internal static PublicKey BuildPublicKey(RSA rsa) + { + Oid oid = new Oid(Oids.Rsa); + + // The OID is being passed to everything here because that's what + // X509Certificate2.PublicKey does. + return new PublicKey( + oid, + // Encode the DER-NULL even though it is OPTIONAL, because everyone else does. + // + // This is due to one version of the ASN.1 not including OPTIONAL, and that was + // the version that got predominately implemented for RSA. Now it's convention. + new AsnEncodedData(oid, new byte[] { 0x05, 0x00 }), + new AsnEncodedData(oid, ExportRSAPublicKey(rsa))); + } + + public override byte[] GetSignatureAlgorithmIdentifier(HashAlgorithmName hashAlgorithm) + { + string oid; + + if (hashAlgorithm == HashAlgorithmName.SHA256) + { + oid = Oids.RsaPkcs1Sha256; + } + else if (hashAlgorithm == HashAlgorithmName.SHA384) + { + oid = Oids.RsaPkcs1Sha384; + } + else if (hashAlgorithm == HashAlgorithmName.SHA512) + { + oid = Oids.RsaPkcs1Sha512; + } + else + { + throw new ArgumentOutOfRangeException( + nameof(hashAlgorithm), + hashAlgorithm, + $"'{hashAlgorithm.Name}' is not a known hash algorithm."); + } + + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.PushSequence(); + writer.WriteObjectIdentifier(oid); + writer.WriteNull(); + writer.PopSequence(); + return writer.Encode(); + } + + private static byte[] ExportRSAPublicKey(RSA rsa) + { + RSAParameters rsaParameters = rsa.ExportParameters(false); + + if (rsaParameters.Modulus == null || rsaParameters.Exponent == null) + { + throw new CryptographicException("Invalid RSA Parameters."); + } + + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + writer.PushSequence(); + writer.WriteKeyParameterInteger(rsaParameters.Modulus); + writer.WriteKeyParameterInteger(rsaParameters.Exponent); + writer.PopSequence(); + return writer.Encode(); + } + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/System.Security.Cryptography.X509Certificates/X509SignatureGenerator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/System.Security.Cryptography.X509Certificates/X509SignatureGenerator.cs new file mode 100644 index 00000000..910f4c45 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/System.Security.Cryptography.X509Certificates/X509SignatureGenerator.cs @@ -0,0 +1,64 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#if !NETSTANDARD2_1 && !NET472 + +// This source code is intentionally copied from the .NET core runtime to close +// a gap in the .NET 4.6 and the .NET Core 2.x runtime implementations. +// original code is located here: +// https://github.com/dotnet/runtime/blob/master/src/libraries/System.Security.Cryptography.X509Certificates/src/System/Security/Cryptography/X509Certificates/X509SignatureGenerator.cs +#pragma warning disable CS1591 // Suppress missing XML comments to preserve original code + +using System; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + public abstract class X509SignatureGenerator + { + private PublicKey _publicKey; + + public PublicKey PublicKey + { + get + { + if (_publicKey == null) + { + _publicKey = BuildPublicKey(); + } + + return _publicKey; + } + } + + public abstract byte[] GetSignatureAlgorithmIdentifier(HashAlgorithmName hashAlgorithm); + public abstract byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm); + protected abstract PublicKey BuildPublicKey(); +#if NOT_SUPPORTED + public static X509SignatureGenerator CreateForECDsa(ECDsa key) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + + return new ECDsaX509SignatureGenerator(key); + } +#endif + public static X509SignatureGenerator CreateForRSA(RSA key, RSASignaturePadding signaturePadding) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + if (signaturePadding == null) + throw new ArgumentNullException(nameof(signaturePadding)); + + if (signaturePadding == RSASignaturePadding.Pkcs1) + return new RSAPkcs1X509SignatureGenerator(key); +#if NOT_SUPPORTED + if (signaturePadding.Mode == RSASignaturePaddingMode.Pss) + return new RSAPssX509SignatureGenerator(key, signaturePadding); +#endif + throw new ArgumentException("Specified padding mode is not valid for this algorithm."); + } + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/CertificateBuilder.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/CertificateBuilder.cs new file mode 100644 index 00000000..3ad405cc --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/CertificateBuilder.cs @@ -0,0 +1,435 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#if NETSTANDARD2_1 || NET472 + +using System; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Linq; +using System.Collections.Generic; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Builds a Certificate. + /// + public class CertificateBuilder : CertificateBuilderBase + { + #region Constructors + /// + /// Create a Certificate builder. + /// + public static ICertificateBuilder Create(X500DistinguishedName subjectName) + { + return new CertificateBuilder(subjectName); + } + + /// + /// Create a Certificate builder. + /// + public static ICertificateBuilder Create(string subjectName) + { + return new CertificateBuilder(subjectName); + } + + /// + /// Constructor of a Certificate builder. + /// + private CertificateBuilder(X500DistinguishedName subjectName) + : base(subjectName) + { + } + + /// + /// Constructor of a Certificate builder. + /// + private CertificateBuilder(string subjectName) + : base(subjectName) + { + } + #endregion + + #region Public Methods + /// + public override X509Certificate2 CreateForRSA() + { + + CreateDefaults(); + + if (m_rsaPublicKey != null && + (IssuerCAKeyCert == null || !IssuerCAKeyCert.HasPrivateKey)) + { + throw new NotSupportedException("Cannot use a public key without a issuer certificate with a private key."); + } + + RSA rsaKeyPair = null; + RSA rsaPublicKey = m_rsaPublicKey; + if (rsaPublicKey == null) + { + rsaKeyPair = RSA.Create(m_keySize == 0 ? X509Defaults.RSAKeySize : m_keySize); + rsaPublicKey = rsaKeyPair; + } + + var padding = RSASignaturePadding.Pkcs1; + var request = new CertificateRequest(SubjectName, rsaPublicKey, HashAlgorithmName, padding); + + CreateX509Extensions(request, false); + + X509Certificate2 signedCert; + var serialNumber = m_serialNumber.Reverse().ToArray(); + if (IssuerCAKeyCert != null) + { + var issuerSubjectName = IssuerCAKeyCert.SubjectName; + using (RSA rsaIssuerKey = IssuerCAKeyCert.GetRSAPrivateKey()) + { + signedCert = request.Create( + IssuerCAKeyCert.SubjectName, + X509SignatureGenerator.CreateForRSA(rsaIssuerKey, padding), + NotBefore, + NotAfter, + serialNumber + ); + } + } + else + { + signedCert = request.Create( + SubjectName, + X509SignatureGenerator.CreateForRSA(rsaKeyPair, padding), + NotBefore, + NotAfter, + serialNumber + ); + } + + return (rsaKeyPair == null) ? signedCert : signedCert.CopyWithPrivateKey(rsaKeyPair); + } + + /// + public override X509Certificate2 CreateForRSA(X509SignatureGenerator generator) + { + + CreateDefaults(); + + if (IssuerCAKeyCert == null) + { + throw new NotSupportedException("X509 Signature generator requires an issuer certificate."); + } + + RSA rsaKeyPair = null; + RSA rsaPublicKey = m_rsaPublicKey; + if (rsaPublicKey == null) + { + rsaKeyPair = RSA.Create(m_keySize == 0 ? X509Defaults.RSAKeySize : m_keySize); + rsaPublicKey = rsaKeyPair; + } + + var request = new CertificateRequest(SubjectName, rsaPublicKey, HashAlgorithmName, RSASignaturePadding.Pkcs1); + + CreateX509Extensions(request, false); + + X509Certificate2 signedCert; + + var issuerSubjectName = IssuerCAKeyCert.SubjectName; + signedCert = request.Create( + IssuerCAKeyCert.SubjectName, + generator, + NotBefore, + NotAfter, + m_serialNumber.Reverse().ToArray() + ); + + return (rsaKeyPair == null) ? signedCert : signedCert.CopyWithPrivateKey(rsaKeyPair); + } + +#if ECC_SUPPORT + /// + public override X509Certificate2 CreateForECDsa() + { + if (m_ecdsaPublicKey != null && IssuerCAKeyCert == null) + { + throw new NotSupportedException("Cannot use a public key without a issuer certificate with a private key."); + } + + if (m_ecdsaPublicKey == null && m_curve == null) + { + throw new NotSupportedException("Need a public key or a ECCurve to create the certificate."); + } + + CreateDefaults(); + + ECDsa key = null; + ECDsa publicKey = m_ecdsaPublicKey; + if (publicKey == null) + { + key = ECDsa.Create((ECCurve)m_curve); + publicKey = key; + } + + var request = new CertificateRequest(SubjectName, publicKey, HashAlgorithmName); + + CreateX509Extensions(request, true); + + var serialNumber = m_serialNumber.Reverse().ToArray(); + if (IssuerCAKeyCert != null) + { + using (ECDsa issuerKey = IssuerCAKeyCert.GetECDsaPrivateKey()) + { + return request.Create( + IssuerCAKeyCert.SubjectName, + X509SignatureGenerator.CreateForECDsa(issuerKey), + NotBefore, + NotAfter, + serialNumber + ); + } + } + else + { + return request.Create( + SubjectName, + X509SignatureGenerator.CreateForECDsa(key), + NotBefore, + NotAfter, + serialNumber + ) + .CopyWithPrivateKey(key); + } + } + + /// + public override X509Certificate2 CreateForECDsa(X509SignatureGenerator generator) + { + if (IssuerCAKeyCert == null) + { + throw new NotSupportedException("X509 Signature generator requires an issuer certificate."); + } + + if (m_ecdsaPublicKey == null && m_curve == null) + { + throw new NotSupportedException("Need a public key or a ECCurve to create the certificate."); + } + + CreateDefaults(); + + ECDsa key = null; + ECDsa publicKey = m_ecdsaPublicKey; + if (publicKey == null) + { + key = ECDsa.Create((ECCurve)m_curve); + publicKey = key; + } + + var request = new CertificateRequest(SubjectName, publicKey, HashAlgorithmName); + + CreateX509Extensions(request, true); + + X509Certificate2 signedCert = request.Create( + IssuerCAKeyCert.SubjectName, + generator, + NotBefore, + NotAfter, + m_serialNumber.Reverse().ToArray() + ); + + // return a X509Certificate2 + return (key == null) ? signedCert : signedCert.CopyWithPrivateKey(key); + } + + /// + public override ICertificateBuilderCreateForECDsaAny SetECDsaPublicKey(byte[] publicKey) + { + if (publicKey == null) throw new ArgumentNullException(nameof(publicKey)); + int bytes = 0; + try + { + m_ecdsaPublicKey = ECDsa.Create(); +#if !NET472 // TODO + m_ecdsaPublicKey.ImportSubjectPublicKeyInfo(publicKey, out bytes); +#endif + } + catch (Exception e) + { + throw new ArgumentException("Failed to decode the public key.", e); + } + + if (publicKey.Length != bytes) + { + throw new ArgumentException("Decoded the public key but extra bytes were found."); + } + return this; + } +#endif + + /// + public override ICertificateBuilderCreateForRSAAny SetRSAPublicKey(byte[] publicKey) + { + if (publicKey == null) throw new ArgumentNullException(nameof(publicKey)); + int bytes = 0; + try + { + m_rsaPublicKey = RSA.Create(); +#if !NET472 // TODO + m_rsaPublicKey.ImportSubjectPublicKeyInfo(publicKey, out bytes); +#endif + } + catch (Exception e) + { + throw new ArgumentException("Failed to decode the public key.", e); + } + + if (publicKey.Length != bytes) + { + throw new ArgumentException("Decoded the public key but extra bytes were found."); + } + return this; + } + #endregion + + #region Private Methods + /// + /// Create some defaults needed to build the certificate. + /// + private void CreateDefaults() + { + if (!m_presetSerial) + { + NewSerialNumber(); + } + m_presetSerial = false; + + ValidateSettings(); + } + + /// + /// Create the X509 extensions to build the certificate. + /// + /// A certificate request. + /// If the certificate is for ECDsa, not RSA. + private void CreateX509Extensions(CertificateRequest request, bool forECDsa) + { + + // Basic Constraints + X509BasicConstraintsExtension bc = GetBasicContraints(); + request.CertificateExtensions.Add(bc); + + // Subject Key Identifier + var ski = new X509SubjectKeyIdentifierExtension( + request.PublicKey, + X509SubjectKeyIdentifierHashAlgorithm.Sha1, + false); + request.CertificateExtensions.Add(ski); + + // Authority Key Identifier + X509Extension authorityKeyIdentifier = IssuerCAKeyCert != null + ? X509Extensions.BuildAuthorityKeyIdentifier(IssuerCAKeyCert) + : new X509AuthorityKeyIdentifierExtension( + ski.SubjectKeyIdentifier.FromHexString(), + SubjectName, + m_serialNumber + ); + request.CertificateExtensions.Add(authorityKeyIdentifier); + + X509KeyUsageFlags keyUsageFlags; + if (m_isCA) + { + keyUsageFlags = X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.CrlSign; + } + else + { + if (forECDsa) + { + // Key Usage for ECDsa + keyUsageFlags = X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.NonRepudiation + | X509KeyUsageFlags.KeyAgreement; + } + else + { + // Key usage for RSA + keyUsageFlags = X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment + | X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.NonRepudiation; + } + if (IssuerCAKeyCert == null) + { + // self signed case + keyUsageFlags |= X509KeyUsageFlags.KeyCertSign; + } + } + + request.CertificateExtensions.Add( + new X509KeyUsageExtension( + keyUsageFlags, + true)); + + if (!m_isCA) + { + // Enhanced key usage + request.CertificateExtensions.Add( + new X509EnhancedKeyUsageExtension( + new OidCollection { + new Oid(Oids.ServerAuthentication), + new Oid(Oids.ClientAuthentication) + }, true)); + } + + foreach (var extension in m_extensions) + { + request.CertificateExtensions.Add(extension); + } + } + + /// + /// Set the basic constraints for various cases. + /// + private X509BasicConstraintsExtension GetBasicContraints() + { + // Basic constraints + if (!m_isCA && IssuerCAKeyCert == null) + { + // self signed + return new X509BasicConstraintsExtension(true, true, 0, true); + } + else if (m_isCA && m_pathLengthConstraint >= 0) + { + // CA with constraints + return new X509BasicConstraintsExtension(true, true, m_pathLengthConstraint, true); + } + else + { + return new X509BasicConstraintsExtension(m_isCA, false, 0, true); + } + } + #endregion + + #region Private Fields + #endregion + } +} +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/CertificateBuilderBase.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/CertificateBuilderBase.cs new file mode 100644 index 00000000..31970f63 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/CertificateBuilderBase.cs @@ -0,0 +1,374 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Linq; +using System.Collections.Generic; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Builds a Certificate. + /// + public abstract class CertificateBuilderBase + : IX509Certificate + , ICertificateBuilder + , ICertificateBuilderConfig + , ICertificateBuilderSetIssuer + , ICertificateBuilderParameter + , ICertificateBuilderIssuer + , ICertificateBuilderRSAParameter + , ICertificateBuilderPublicKey + , ICertificateBuilderRSAPublicKey + , ICertificateBuilderCreateForRSA + , ICertificateBuilderCreateForRSAAny +#if ECC_SUPPORT + , ICertificateBuilderCreateForECDsa + , ICertificateBuilderECDsaPublicKey + , ICertificateBuilderECCParameter + , ICertificateBuilderCreateForECDsaAny +#endif + { + #region Constructors + /// + /// Initialize a Certificate builder. + /// + public CertificateBuilderBase(X500DistinguishedName subjectName) + { + m_issuerName = m_subjectName = subjectName; + Initialize(); + } + + /// + /// Initialize a Certificate builder. + /// + public CertificateBuilderBase(string subjectName) + { + m_issuerName = m_subjectName = new X500DistinguishedName(subjectName); + Initialize(); + } + + /// + /// Default constructor. + /// + protected virtual void Initialize() + { + m_notBefore = DateTime.UtcNow.AddDays(-1).Date; + m_notAfter = NotBefore.AddMonths(X509Defaults.LifeTime); + m_hashAlgorithmName = X509Defaults.HashAlgorithmName; + m_serialNumberLength = X509Defaults.SerialNumberLengthMin; + m_extensions = new X509ExtensionCollection(); + } + #endregion + + #region IX509Certificate Interface + /// + public X500DistinguishedName SubjectName => m_subjectName; + + /// + public X500DistinguishedName IssuerName => m_issuerName; + + /// + public DateTime NotBefore => m_notBefore; + + /// + public DateTime NotAfter => m_notAfter; + + /// + public string SerialNumber => m_serialNumber.ToHexString(true); + + /// + public byte[] GetSerialNumber() { return m_serialNumber; } + + /// + public HashAlgorithmName HashAlgorithmName => m_hashAlgorithmName; + + /// + public X509ExtensionCollection Extensions => m_extensions; + #endregion + + #region Public Methods + /// + public abstract X509Certificate2 CreateForRSA(); + + /// + public abstract X509Certificate2 CreateForRSA(X509SignatureGenerator generator); + +#if ECC_SUPPORT + /// + public abstract X509Certificate2 CreateForECDsa(); + + /// + public abstract X509Certificate2 CreateForECDsa(X509SignatureGenerator generator); +#endif + /// + public ICertificateBuilder SetSerialNumberLength(int length) + { + if (length > X509Defaults.SerialNumberLengthMax || length == 0) + { + throw new ArgumentOutOfRangeException("SerialNumber length out of Range"); + } + m_serialNumberLength = length; + m_presetSerial = false; + return this; + } + + /// + public ICertificateBuilder SetSerialNumber(byte[] serialNumber) + { + if (serialNumber.Length > X509Defaults.SerialNumberLengthMax || + serialNumber.Length == 0) + { + throw new ArgumentOutOfRangeException("SerialNumber array exceeds supported length."); + } + m_serialNumberLength = serialNumber.Length; + m_serialNumber = new byte[serialNumber.Length]; + Array.Copy(serialNumber, m_serialNumber, serialNumber.Length); + m_serialNumber[m_serialNumberLength - 1] &= 0x7f; + m_presetSerial = true; + return this; + } + + /// + public ICertificateBuilder CreateSerialNumber() + { + NewSerialNumber(); + m_presetSerial = true; + return this; + } + + /// + public ICertificateBuilder SetNotBefore(DateTime notBefore) + { + m_notBefore = notBefore; + return this; + } + + /// + public ICertificateBuilder SetNotAfter(DateTime notAfter) + { + m_notAfter = notAfter; + return this; + } + + /// + public ICertificateBuilder SetLifeTime(TimeSpan lifeTime) + { + m_notAfter = m_notBefore.Add(lifeTime); + return this; + } + + /// + public ICertificateBuilder SetLifeTime(ushort months) + { + m_notAfter = m_notBefore.AddMonths(months == 0 ? X509Defaults.LifeTime : (int)months); + return this; + } + + /// + public ICertificateBuilder SetHashAlgorithm(HashAlgorithmName hashAlgorithmName) + { + if (hashAlgorithmName == null) throw new ArgumentNullException(nameof(hashAlgorithmName)); + m_hashAlgorithmName = hashAlgorithmName; + return this; + } + + /// + public ICertificateBuilder SetCAConstraint(int pathLengthConstraint = -1) + { + m_isCA = true; + m_pathLengthConstraint = pathLengthConstraint; + m_serialNumberLength = X509Defaults.SerialNumberLengthMax; + return this; + } + + /// + public virtual ICertificateBuilderCreateForRSAAny SetRSAKeySize(int keySize) + { + if (keySize == 0) + { + keySize = X509Defaults.RSAKeySize; + } + + if (keySize % 1024 != 0 || keySize < X509Defaults.RSAKeySizeMin || keySize > X509Defaults.RSAKeySizeMax) + { + throw new ArgumentException(nameof(keySize), "KeySize must be a multiple of 1024 or is not in the allowed range."); + } + + m_keySize = keySize; + return this; + } + + /// + public virtual ICertificateBuilder AddExtension(X509Extension extension) + { + if (extension == null) throw new ArgumentNullException(nameof(extension)); + m_extensions.Add(extension); + return this; + } + +#if ECC_SUPPORT + /// + public virtual ICertificateBuilderCreateForECDsaAny SetECCurve(ECCurve curve) + { + m_curve = curve; + return this; + } + + /// + public abstract ICertificateBuilderCreateForECDsaAny SetECDsaPublicKey(byte[] publicKey); + + /// + public virtual ICertificateBuilderCreateForECDsaAny SetECDsaPublicKey(ECDsa publicKey) + { + if (publicKey == null) throw new ArgumentNullException(nameof(publicKey)); + m_ecdsaPublicKey = publicKey; + return this; + } +#endif + + /// + public abstract ICertificateBuilderCreateForRSAAny SetRSAPublicKey(byte[] publicKey); + + /// + public virtual ICertificateBuilderCreateForRSAAny SetRSAPublicKey(RSA publicKey) + { + if (publicKey == null) throw new ArgumentNullException(nameof(publicKey)); + m_rsaPublicKey = publicKey; + return this; + } + + /// + public virtual ICertificateBuilderIssuer SetIssuer(X509Certificate2 issuerCertificate) + { + if (issuerCertificate == null) throw new ArgumentNullException(nameof(issuerCertificate)); + m_issuerCAKeyCert = issuerCertificate; + m_issuerName = issuerCertificate.SubjectName; + return this; + } + #endregion + + #region Protected Methods + /// + /// The issuer CA certificate. + /// + protected X509Certificate2 IssuerCAKeyCert => m_issuerCAKeyCert; + + /// + /// Validate and adjust settings to avoid creation of invalid certificates. + /// + protected void ValidateSettings() + { + // lifetime must be in range of issuer + if (m_issuerCAKeyCert != null) + { + if (NotAfter > m_issuerCAKeyCert.NotAfter) + { + m_notAfter = m_issuerCAKeyCert.NotAfter; + } + if (NotBefore < m_issuerCAKeyCert.NotBefore) + { + m_notBefore = m_issuerCAKeyCert.NotBefore; + } + } + } + + /// + /// Create a new cryptographic random serial number. + /// + protected virtual void NewSerialNumber() + { + // new serial number + using (var rnd = RandomNumberGenerator.Create()) + { + m_serialNumber = new byte[m_serialNumberLength]; + rnd.GetBytes(m_serialNumber); + } + // A compliant certificate uses a positive serial number. + m_serialNumber[m_serialNumberLength - 1] &= 0x7F; + } + #endregion + + #region Protected Fields + /// + /// If the certificate is a CA. + /// + protected bool m_isCA; + /// + /// The path length constraint to sue for a CA. + /// + protected int m_pathLengthConstraint; + /// + /// The serial number length in octets. + /// + protected int m_serialNumberLength; + /// + /// If the serial number is preset by the user. + /// + protected bool m_presetSerial; + /// + /// The serial number as a little endian byte array. + /// + protected byte[] m_serialNumber; + /// + /// The collection of X509Extension to add to the certificate. + /// + protected X509ExtensionCollection m_extensions; + /// + /// The RSA public to use when if a certificate is signed. + /// + protected RSA m_rsaPublicKey; + /// + /// The size of a RSA key pair to create. + /// + protected int m_keySize; +#if ECC_SUPPORT + /// + /// The ECDsa public to use when if a certificate is signed. + /// + protected ECDsa m_ecdsaPublicKey; + /// + /// The ECCurve to use. + /// + protected ECCurve? m_curve; +#endif + #endregion + + #region Private Fields + private X509Certificate2 m_issuerCAKeyCert; + private DateTime m_notBefore; + private DateTime m_notAfter; + private HashAlgorithmName m_hashAlgorithmName; + private X500DistinguishedName m_subjectName; + private X500DistinguishedName m_issuerName; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/ICertificateBuilder.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/ICertificateBuilder.cs new file mode 100644 index 00000000..f80535ab --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/ICertificateBuilder.cs @@ -0,0 +1,347 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// The certificate builder interface. + /// + public interface ICertificateBuilder + : ICertificateBuilderConfig + , ICertificateBuilderSetIssuer + , ICertificateBuilderParameter + , ICertificateBuilderCreateForRSA + , IX509Certificate + { } + + /// + /// The interface to set an issuer. + /// + public interface ICertificateBuilderIssuer + : ICertificateBuilderPublicKey + , ICertificateBuilderCreateForRSA + , ICertificateBuilderParameter + , ICertificateBuilderCreateGenerator + { } + + /// + /// The interface to set a public key. + /// + public interface ICertificateBuilderPublicKey + : ICertificateBuilderRSAPublicKey +#if ECC_SUPPORT + , ICertificateBuilderECDsaPublicKey +#endif + { } + + /// + /// The interface to set key parameters. + /// + public interface ICertificateBuilderParameter + : ICertificateBuilderRSAParameter +#if ECC_SUPPORT + , ICertificateBuilderECCParameter +#endif + { } + + /// + /// The interface to create a certificate. + /// + public interface ICertificateBuilderCreate + : ICertificateBuilderCreateForRSA +#if ECC_SUPPORT + , ICertificateBuilderCreateForECDsa +#endif + { } + + /// + /// The interface to use a signature generator. + /// + public interface ICertificateBuilderCreateGenerator + : ICertificateBuilderCreateForRSAGenerator +#if ECC_SUPPORT + , ICertificateBuilderCreateForECDsaGenerator +#endif + { } + + /// + /// The interface to create a RSA based certifcate. + /// + public interface ICertificateBuilderCreateForRSAAny + : ICertificateBuilderCreateForRSA + , ICertificateBuilderCreateForRSAGenerator + { } + +#if ECC_SUPPORT + /// + /// The interface to create a ECDSA based certifcate. + /// + public interface ICertificateBuilderCreateForECDsaAny + : ICertificateBuilderCreateForECDsa + , ICertificateBuilderCreateForECDsaGenerator + { } +#endif + + /// + /// The interface to set the mandatory certificate + /// fields for a certificate builder. + /// + public interface ICertificateBuilderConfig + { + /// + /// Set the length of the serial number. + /// + /// + /// The length of the serial number shall + /// not exceed octets. + /// + /// + ICertificateBuilder SetSerialNumberLength(int length); + + /// + /// Set the value of the serial number directly + /// using a byte array. + /// + /// + /// The length of the serial number shall + /// not exceed octets. + /// + /// The serial number as an array of bytes in little endian order. + ICertificateBuilder SetSerialNumber(byte[] serialNumber); + + /// + /// Create a new serial number and preserve + /// it until the certificate is created. + /// + /// + /// The serial number may be needed to create an extension. + /// This function makes it available before the + /// cert is created. + /// + ICertificateBuilder CreateSerialNumber(); + + /// + /// Set the date when the certificate becomes valid. + /// + /// The date. + ICertificateBuilder SetNotBefore(DateTime notBefore); + + /// + /// Set the certificate expiry date. + /// + /// The date after which the certificate is expired. + ICertificateBuilder SetNotAfter(DateTime notAfter); + + /// + /// Set the lifetime of the certificate using Timespan. + /// + /// The lifetime as . + ICertificateBuilder SetLifeTime(TimeSpan lifeTime); + + /// + /// Set the lifetime of the certificate in month starting now. + /// + /// The lifetime in months. + ICertificateBuilder SetLifeTime(ushort months); + + /// + /// Set the hash algorithm to use for the signature. + /// + /// The hash algorithm name. + ICertificateBuilder SetHashAlgorithm(HashAlgorithmName hashAlgorithmName); + + /// + /// Set the CA flag and the path length constraints of the certificate. + /// + /// + /// The path length constraint to use. + /// -1 corresponds to None, other values constrain the chain length. + /// + ICertificateBuilder SetCAConstraint(int pathLengthConstraint = -1); + + /// + /// Add an extension to the certificate in addition to the default extensions. + /// + /// + /// By default the following X509 extensions are added to a certificate, + /// some depending on certificate type: + /// CA/SubCA/OPC UA application: + /// X509BasicConstraintsExtension + /// X509SubjectKeyIdentifierExtension + /// X509AuthorityKeyIdentifierExtension + /// X509KeyUsageExtension + /// OPC UA application: + /// X509SubjectAltNameExtension + /// X509EnhancedKeyUsageExtension + /// Adding a default extension to the list overrides the default + /// value of the extensions. + /// Adding an extension with a already existing Oid overrides + /// the existing extension in the list. + /// + /// The extension to add + ICertificateBuilder AddExtension(X509Extension extension); + } + + /// + /// The interface to select an issuer for the cert builder. + /// + public interface ICertificateBuilderSetIssuer + { + /// + /// Set the issuer certificate which is used to sign the certificate. + /// + /// + /// The issuer certificate must contain a private key which matches + /// the selected sign algorithm if no generator is avilable. + /// If a is used for signing the + /// the issuer certificate can be set with a public key to create + /// the X509 extensions. + /// + /// The issuer certificate. + ICertificateBuilderIssuer SetIssuer(X509Certificate2 issuerCertificate); + } + + /// + /// The interface to select the RSA key size parameter. + /// + public interface ICertificateBuilderRSAParameter + { + /// + /// Set the RSA key size in bits. + /// + /// The size of the RSA key. + ICertificateBuilderCreateForRSAAny SetRSAKeySize(int keySize); + } + +#if ECC_SUPPORT + /// + /// The interface to select the ECCurve. + /// + public interface ICertificateBuilderECCParameter + { + /// + /// Set the ECC Curve parameter. + /// + /// The ECCurve. + ICertificateBuilderCreateForECDsaAny SetECCurve(ECCurve curve); + } +#endif + + /// + /// The interface to set a RSA public key for a certificate. + /// + public interface ICertificateBuilderRSAPublicKey + { + /// + /// Set the public key using a ASN.1 encoded byte array. + /// + /// The public key as encoded byte array. + ICertificateBuilderCreateForRSAAny SetRSAPublicKey(byte[] publicKey); + + /// + /// Set the public key using a RSA public key. + /// + /// The RSA public key. + ICertificateBuilderCreateForRSAAny SetRSAPublicKey(RSA publicKey); + } + +#if ECC_SUPPORT + /// + /// The interface to set a ECDSA public key for a certificate. + /// + public interface ICertificateBuilderECDsaPublicKey + { + /// + /// Set the public key using a ASN.1 encoded byte array. + /// + /// The public key as encoded byte array. + ICertificateBuilderCreateForECDsaAny SetECDsaPublicKey(byte[] publicKey); + + /// + /// Set the public key using a ECDSA public key. + /// + /// The ECDsa public key. + ICertificateBuilderCreateForECDsaAny SetECDsaPublicKey(ECDsa publicKey); + } +#endif + + /// + /// The interface to create a certificate using the RSA algorithm. + /// + public interface ICertificateBuilderCreateForRSA + { + /// + /// Create the RSA certificate with signature. + /// + /// The signed certificate. + X509Certificate2 CreateForRSA(); + } + + /// + /// The interface to create a certificate using a signature generator. + /// + public interface ICertificateBuilderCreateForRSAGenerator + { + /// + /// Create the RSA certificate with signature using an external generator. + /// + /// The signed certificate. + X509Certificate2 CreateForRSA(X509SignatureGenerator generator); + } + +#if ECC_SUPPORT + /// + /// The interface to create a certificate using the ECDSA algorithm. + /// + public interface ICertificateBuilderCreateForECDsa + { + /// + /// Create the ECC certificate with signature. + /// + /// The signed certificate. + X509Certificate2 CreateForECDsa(); + } + + /// + /// The interface to create a certificate using a signature generator for ECDSA. + /// + public interface ICertificateBuilderCreateForECDsaGenerator + { + /// + /// Create the ECDSA certificate with signature using an external generator. + /// + /// The signed certificate. + X509Certificate2 CreateForECDsa(X509SignatureGenerator generator); + } +#endif +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/IX509Certificate.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/IX509Certificate.cs new file mode 100644 index 00000000..ae08e6fa --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/IX509Certificate.cs @@ -0,0 +1,85 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + + /// + /// Properties of a X.509v3 certificate. + /// + public interface IX509Certificate + { + /// + /// The subject distinguished name from a certificate. + /// + X500DistinguishedName SubjectName { get; } + + /// + /// The distinguished name of the certificate issuer. + /// + X500DistinguishedName IssuerName { get; } + + /// + /// The date in UTC time on which a certificate becomes valid. + /// + DateTime NotBefore { get; } + + /// + /// The date in UTC time after which a certificate is no longer valid. + /// + DateTime NotAfter { get; } + + /// + /// The serial number of the certificate + /// as a big-endian hexadecimal string. + /// + string SerialNumber { get; } + + /// + /// The serial number of the certificate + /// as an array of bytes in little-endian order. + /// + byte[] GetSerialNumber(); + + /// + /// The hash algorithm used to create the signature. + /// + HashAlgorithmName HashAlgorithmName { get; } + + /// + /// A collection of X509 extensions. + /// + X509ExtensionCollection Extensions { get; } + } +} + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs new file mode 100644 index 00000000..0b24b263 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Certificate/X509PfxUtils.cs @@ -0,0 +1,239 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + + +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Utilities to create a Pfx. + /// + public static class X509PfxUtils + { + /// + /// The size of the block used to test a sign or encrypt operation. + /// + public const int TestBlockSize = 0x20; + + /// + /// Return the key usage flags of a certificate. + /// + private static X509KeyUsageFlags GetKeyUsage(X509Certificate2 cert) + { + var allFlags = X509KeyUsageFlags.None; + foreach (X509KeyUsageExtension ext in cert.Extensions.OfType()) + { + allFlags |= ext.KeyUsages; + } + return allFlags; + } + + /// + /// Verify RSA key pair of two certificates. + /// + public static bool VerifyRSAKeyPair( + X509Certificate2 certWithPublicKey, + X509Certificate2 certWithPrivateKey, + bool throwOnError = false) + { + bool result = false; + RSA rsaPrivateKey = null; + RSA rsaPublicKey = null; + try + { + // verify the public and private key match + rsaPrivateKey = certWithPrivateKey.GetRSAPrivateKey(); + rsaPublicKey = certWithPublicKey.GetRSAPublicKey(); + X509KeyUsageFlags keyUsage = GetKeyUsage(certWithPublicKey); + if ((keyUsage & X509KeyUsageFlags.DataEncipherment) != 0) + { + result = VerifyRSAKeyPairCrypt(rsaPublicKey, rsaPrivateKey); + } + else if ((keyUsage & X509KeyUsageFlags.DigitalSignature) != 0) + { + result = VerifyRSAKeyPairSign(rsaPublicKey, rsaPrivateKey); + } + else + { + throw new CryptographicException("Don't know how to verify the public/private key pair."); + } + } + catch (Exception) + { + if (throwOnError) + { + throwOnError = false; + throw; + } + } + finally + { + RsaUtils.RSADispose(rsaPrivateKey); + RsaUtils.RSADispose(rsaPublicKey); + if (!result && throwOnError) + { + throw new CryptographicException("The public/private key pair in the certficates do not match."); + } + } + return result; + } + + /// + /// Creates a certificate from a PKCS #12 store with a private key. + /// + /// The raw PKCS #12 store data. + /// The password to use to access the store. + /// The certificate with a private key. + public static X509Certificate2 CreateCertificateFromPKCS12( + byte[] rawData, + string password + ) + { + Exception ex = null; + X509Certificate2 certificate = null; + + // We need to try MachineKeySet first as UserKeySet in combination with PersistKeySet hangs ASP.Net WebApps on Azure + X509KeyStorageFlags[] storageFlags = { + X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet, + X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.UserKeySet + }; + + // try some combinations of storage flags, support is platform dependent + foreach (var flag in storageFlags) + { + try + { + // merge first cert with private key into X509Certificate2 + certificate = new X509Certificate2( + rawData, + password ?? String.Empty, + flag); + // can we really access the private key? + if (VerifyRSAKeyPair(certificate, certificate, true)) + { + return certificate; + } + } + catch (Exception e) + { + ex = e; + certificate?.Dispose(); + certificate = null; + } + } + + if (certificate == null) + { + throw new NotSupportedException("Creating X509Certificate from PKCS #12 store failed", ex); + } + + return certificate; + } + + /// + /// Verify a RSA key pair using a encryption. + /// + internal static bool VerifyRSAKeyPairCrypt( + RSA rsaPublicKey, + RSA rsaPrivateKey) + { + byte[] testBlock = new byte[TestBlockSize]; + var rnd = new Random(); + rnd.NextBytes(testBlock); + byte[] encryptedBlock = rsaPublicKey.Encrypt(testBlock, RSAEncryptionPadding.OaepSHA1); + byte[] decryptedBlock = rsaPrivateKey.Decrypt(encryptedBlock, RSAEncryptionPadding.OaepSHA1); + if (decryptedBlock != null) + { + return testBlock.SequenceEqual(decryptedBlock); + } + return false; + } + + /// + /// Verify a RSA key pair using a signature. + /// + internal static bool VerifyRSAKeyPairSign( + RSA rsaPublicKey, + RSA rsaPrivateKey) + { + byte[] testBlock = new byte[TestBlockSize]; + var rnd = new Random(); + rnd.NextBytes(testBlock); + byte[] signature = rsaPrivateKey.SignData(testBlock, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + return rsaPublicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + } + +#if ECC_SUPPORT + /// + /// Verify ECDsa key pair of two certificates. + /// + public static bool VerifyECDsaKeyPair( + X509Certificate2 certWithPublicKey, + X509Certificate2 certWithPrivateKey, + bool throwOnError = false) + { + bool result = false; + using (ECDsa ecdsaPublicKey = certWithPrivateKey.GetECDsaPublicKey()) + using (ECDsa ecdsaPrivateKey = certWithPublicKey.GetECDsaPrivateKey()) + { + try + { + // verify the public and private key match + X509KeyUsageFlags keyUsage = GetKeyUsage(certWithPublicKey); + if ((keyUsage & X509KeyUsageFlags.DigitalSignature) != 0) + { + result = VerifyECDsaKeyPairSign(ecdsaPublicKey, ecdsaPrivateKey); + } + else + { + if (throwOnError) + { + throw new CryptographicException("Don't know how to verify the public/private key pair."); + } + } + } + catch (Exception) + { + if (throwOnError) + { + throwOnError = false; + throw; + } + } + } + if (!result && throwOnError) + { + throw new CryptographicException("The public/private key pair in the certficates do not match."); + } + return result; + } + + /// + /// Verify a ECDsa key pair using a signature. + /// + internal static bool VerifyECDsaKeyPairSign( + ECDsa ecdsaPublicKey, + ECDsa ecdsaPrivateKey) + { + byte[] testBlock = new byte[TestBlockSize]; + var rnd = new Random(); + rnd.NextBytes(testBlock); + byte[] signature = ecdsaPrivateKey.SignData(testBlock, HashAlgorithmName.SHA256); + return ecdsaPublicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA256); + } +#endif + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/CrlBuilder.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/CrlBuilder.cs new file mode 100644 index 00000000..cb1282ad --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/CrlBuilder.cs @@ -0,0 +1,395 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Formats.Asn1; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Numerics; +using System.Linq; +using System.Collections.Generic; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Builds a CRL. + /// + public sealed class CrlBuilder : IX509CRL + { + #region Constructors + /// + /// Create a CRL builder initialized with a decoded CRL. + /// + /// The decoded CRL + public static CrlBuilder Create(IX509CRL crl) + { + return new CrlBuilder(crl); + } + + /// + /// Initialize the CRL builder with Issuer. + /// + /// Issuer name + public static CrlBuilder Create(X500DistinguishedName issuerSubjectName) + { + return new CrlBuilder(issuerSubjectName); + } + + /// + /// Initialize the CRL builder with Issuer and hash algorithm. + /// + /// Issuer distinguished name + /// The signing algorithm to use. + public static CrlBuilder Create(X500DistinguishedName issuerSubjectName, HashAlgorithmName hashAlgorithmName) + { + return new CrlBuilder(issuerSubjectName, hashAlgorithmName); + } + + /// + /// Create a CRL builder initialized with a decoded CRL. + /// + /// The decoded CRL + private CrlBuilder(IX509CRL crl) + { + IssuerName = crl.IssuerName; + HashAlgorithmName = crl.HashAlgorithmName; + ThisUpdate = crl.ThisUpdate; + NextUpdate = crl.NextUpdate; + RawData = crl.RawData; + m_revokedCertificates = new List(crl.RevokedCertificates); + m_crlExtensions = new X509ExtensionCollection(); + foreach (var extension in crl.CrlExtensions) + { + m_crlExtensions.Add(extension); + } + } + + /// + /// Initialize the CRL builder with Issuer. + /// + /// Issuer name + private CrlBuilder(X500DistinguishedName issuerSubjectName) + : this(issuerSubjectName, X509Defaults.HashAlgorithmName) + { + } + + /// + /// Initialize the CRL builder with Issuer and hash algorithm. + /// + /// Issuer distinguished name + /// The signing algorithm to use. + private CrlBuilder(X500DistinguishedName issuerSubjectName, HashAlgorithmName hashAlgorithmName) + : this() + { + IssuerName = issuerSubjectName; + HashAlgorithmName = hashAlgorithmName; + } + + /// + /// Default constructor. + /// + private CrlBuilder() + { + ThisUpdate = DateTime.UtcNow; + NextUpdate = DateTime.MinValue; + m_revokedCertificates = new List(); + m_crlExtensions = new X509ExtensionCollection(); + } + #endregion + + #region IX509CRL Interface + /// + public X500DistinguishedName IssuerName { get; } + + /// + public string Issuer => IssuerName.Name; + + /// + public DateTime ThisUpdate { get; private set; } + + /// + public DateTime NextUpdate { get; private set; } + + /// + public HashAlgorithmName HashAlgorithmName { get; private set; } + + /// + public IList RevokedCertificates => m_revokedCertificates; + + /// + public X509ExtensionCollection CrlExtensions => m_crlExtensions; + + /// + public byte[] RawData { get; private set; } + #endregion + + #region Public Methods + /// + /// Set this update time. + /// + public CrlBuilder SetThisUpdate(DateTime thisUpdate) + { + ThisUpdate = thisUpdate; + return this; + } + + /// + /// Set next update time (optional). + /// + public CrlBuilder SetNextUpdate(DateTime nextUpdate) + { + NextUpdate = nextUpdate; + return this; + } + + /// + /// Set the hash algorithm. + /// + public CrlBuilder SetHashAlgorithm(HashAlgorithmName hashAlgorithmName) + { + if (hashAlgorithmName == null) throw new ArgumentNullException(nameof(hashAlgorithmName)); + HashAlgorithmName = hashAlgorithmName; + return this; + } + + /// + /// Add array of serialnumbers of revoked certificates. + /// + /// The array of serial numbers to revoke. + /// The revocation reason + public CrlBuilder AddRevokedSerialNumbers(string[] serialNumbers, CRLReason crlReason = CRLReason.Unspecified) + { + if (serialNumbers == null) throw new ArgumentNullException(nameof(serialNumbers)); + m_revokedCertificates.AddRange(serialNumbers.Select(s => new RevokedCertificate(s, crlReason)).ToList()); + return this; + } + + /// + /// Add a revoked certificate. + /// + /// The certificate to revoke. + /// The revocation reason + public CrlBuilder AddRevokedCertificate(X509Certificate2 certificate, CRLReason crlReason = CRLReason.Unspecified) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + m_revokedCertificates.Add(new RevokedCertificate(certificate.SerialNumber, crlReason)); + return this; + } + + /// + /// Add a revoked certificate. + /// + public CrlBuilder AddRevokedCertificate(RevokedCertificate revokedCertificate) + { + if (revokedCertificate == null) throw new ArgumentNullException(nameof(revokedCertificate)); + m_revokedCertificates.Add(revokedCertificate); + return this; + } + + /// + /// Add a list of revoked certificate. + /// + public CrlBuilder AddRevokedCertificates(IList revokedCertificates) + { + if (revokedCertificates == null) throw new ArgumentNullException(nameof(revokedCertificates)); + m_revokedCertificates.AddRange(revokedCertificates); + return this; + } + + /// + /// Add a revoked certificate. + /// + public CrlBuilder AddCRLExtension(X509Extension extension) + { + m_crlExtensions.Add(extension); + return this; + } + + /// + /// Create the CRL with signature generator. + /// + /// The RSA or ECDsa signature generator to use. + /// The signed CRL. + public IX509CRL CreateSignature(X509SignatureGenerator generator) + { + var tbsRawData = Encode(); + var signatureAlgorithm = generator.GetSignatureAlgorithmIdentifier(HashAlgorithmName); + byte[] signature = generator.SignData(tbsRawData, HashAlgorithmName); + var crlSigner = new X509Signature(tbsRawData, signature, signatureAlgorithm); + RawData = crlSigner.Encode(); + return this; + } + + /// + /// Create the CRL with signature for RSA. + /// + /// The signed CRL. + public IX509CRL CreateForRSA(X509Certificate2 issuerCertificate) + { + using (RSA rsa = issuerCertificate.GetRSAPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForRSA(rsa, RSASignaturePadding.Pkcs1); + return CreateSignature(generator); + } + } + +#if ECC_SUPPORT + /// + /// Create the CRL with signature for ECDsa. + /// + /// The signed CRL. + public IX509CRL CreateForECDsa(X509Certificate2 issuerCertificate) + { + using (ECDsa ecdsa = issuerCertificate.GetECDsaPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForECDsa(ecdsa); + return CreateSignature(generator); + } + } +#endif + #endregion + + #region Internal Methods + /// + /// Constructs Certificate Revocation List raw data in X509 ASN format. + /// + /// + /// CRL fields -- https://tools.ietf.org/html/rfc5280#section-5.1 + /// + /// CertificateList ::= SEQUENCE { + /// tbsCertList TBSCertList, + /// signatureAlgorithm AlgorithmIdentifier, + /// signatureValue BIT STRING + /// } + /// + /// TBSCertList ::= SEQUENCE { + /// version Version OPTIONAL, + /// -- if present, MUST be v2 + /// signature AlgorithmIdentifier, + /// issuer Name, + /// thisUpdate Time, + /// nextUpdate Time OPTIONAL, + /// revokedCertificates SEQUENCE OF SEQUENCE { + /// userCertificate CertificateSerialNumber, + /// revocationDate Time, + /// crlEntryExtensions Extensions OPTIONAL + /// -- if present, version MUST be v2 + /// } OPTIONAL, + /// crlExtensions [0] EXPLICIT Extensions OPTIONAL + /// -- if present, version MUST be v2 + /// } + /// + internal byte[] Encode() + { + AsnWriter crlWriter = new AsnWriter(AsnEncodingRules.DER); + { + // tbsCertList + crlWriter.PushSequence(); + + // version + crlWriter.WriteInteger(1); + + // Signature Algorithm Identifier + crlWriter.PushSequence(); + string signatureAlgorithm = Oids.GetRSAOid(HashAlgorithmName); + crlWriter.WriteObjectIdentifier(signatureAlgorithm); + crlWriter.WriteNull(); + + // pop + crlWriter.PopSequence(); + + // Issuer + crlWriter.WriteEncodedValue((ReadOnlySpan)IssuerName.RawData); + + // this update + crlWriter.WriteUtcTime(this.ThisUpdate); + + if (NextUpdate != DateTime.MinValue && + NextUpdate > ThisUpdate) + { + // next update + crlWriter.WriteUtcTime(NextUpdate); + } + + // sequence to start the revoked certificates. + crlWriter.PushSequence(); + + foreach (var revokedCert in RevokedCertificates) + { + crlWriter.PushSequence(); + + BigInteger srlNumberValue = new BigInteger(revokedCert.UserCertificate); + crlWriter.WriteInteger(srlNumberValue); + crlWriter.WriteUtcTime(revokedCert.RevocationDate); + + if (revokedCert.CrlEntryExtensions.Count > 0) + { + crlWriter.PushSequence(); + foreach (var crlEntryExt in revokedCert.CrlEntryExtensions) + { + crlWriter.WriteExtension(crlEntryExt); + } + crlWriter.PopSequence(); + } + crlWriter.PopSequence(); + } + + crlWriter.PopSequence(); + + // CRL extensions + if (CrlExtensions.Count > 0) + { + // [0] EXPLICIT Extensions OPTIONAL + var tag = new Asn1Tag(TagClass.ContextSpecific, 0); + crlWriter.PushSequence(tag); + + // CRL extensions + crlWriter.PushSequence(); + foreach (var extension in CrlExtensions) + { + crlWriter.WriteExtension(extension); + } + crlWriter.PopSequence(); + + crlWriter.PopSequence(tag); + } + + crlWriter.PopSequence(); + + return crlWriter.Encode(); + } + } + #endregion + + #region Private Fields + private List m_revokedCertificates; + private X509ExtensionCollection m_crlExtensions; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/CrlReason.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/CrlReason.cs new file mode 100644 index 00000000..abe17e67 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/CrlReason.cs @@ -0,0 +1,67 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +#pragma warning disable CS1591 // self describing enum values, suppress warning + +namespace Opc.Ua.Security.Certificates +{ + /// + /// CRL Reason codes. + /// + /// + /// id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 } + /// -- reasonCode::= { CRLReason } + /// CRLReason::= ENUMERATED { + /// unspecified(0), + /// keyCompromise(1), + /// cACompromise(2), + /// affiliationChanged(3), + /// superseded(4), + /// cessationOfOperation(5), + /// certificateHold(6), + /// --value 7 is not used + /// removeFromCRL(8), + /// privilegeWithdrawn(9), + /// aACompromise(10) } + /// + public enum CRLReason + { + Unspecified = 0, + KeyCompromise = 1, + CACompromise = 2, + AffiliationChanged = 3, + Superseded = 4, + CessationOfOperation = 5, + CertificateHold = 6, + RemoveFromCRL = 8, + PrivilegeWithdrawn = 9, + AACompromise = 10 + }; + +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/IX509Crl.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/IX509Crl.cs new file mode 100644 index 00000000..cc72a9e8 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/IX509Crl.cs @@ -0,0 +1,82 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using System.Security.Cryptography; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Provides access to an X509 CRL object. + /// + public interface IX509CRL + { + /// + /// The name of the issuer for the CRL. + /// + X500DistinguishedName IssuerName { get; } + + /// + /// The name of the issuer for the CRL. + /// + string Issuer { get; } + + /// + /// When the CRL was last updated. + /// + DateTime ThisUpdate { get; } + + /// + /// When the CRL is due for its next update. + /// + DateTime NextUpdate { get; } + + /// + /// The hash algorithm used to sign the CRL. + /// + HashAlgorithmName HashAlgorithmName { get; } + + /// + /// The revoked user certificates + /// + IList RevokedCertificates { get; } + + /// + /// The X509Extensions of the CRL. + /// + X509ExtensionCollection CrlExtensions { get; } + + /// + /// The raw data for the CRL. + /// + byte[] RawData { get; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/RevokedCertificate.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/RevokedCertificate.cs new file mode 100644 index 00000000..c4947386 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/RevokedCertificate.cs @@ -0,0 +1,130 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using System.Collections.Generic; +using System.Linq; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Represents a revoked certificate in the + /// revoked certificates sequence of a CRL. + /// + /// + /// CRL fields -- https://tools.ietf.org/html/rfc5280#section-5.1 + /// + /// ... + /// revokedCertificates SEQUENCE OF SEQUENCE { + /// userCertificate CertificateSerialNumber, + /// revocationDate Time, + /// crlEntryExtensions Extensions OPTIONAL + /// -- if present, version MUST be v2 + /// } OPTIONAL, + /// ... + /// + public class RevokedCertificate + { + /// + /// Construct revoked certificate with serialnumber, + /// actual UTC time and the CRL reason. + /// + /// The serial number + /// The reason for revocation + public RevokedCertificate(string serialNumber, CRLReason crlReason) + : this(serialNumber) + { + CrlEntryExtensions.Add(X509Extensions.BuildX509CRLReason(crlReason)); + } + + /// + /// Construct revoked certificate with serialnumber, + /// actual UTC time and the CRL reason. + /// + /// The serial number + /// The reason for revocation + public RevokedCertificate(byte[] serialNumber, CRLReason crlReason) + : this(serialNumber) + { + if (crlReason != CRLReason.Unspecified) + { + CrlEntryExtensions.Add(X509Extensions.BuildX509CRLReason(crlReason)); + } + } + + /// + /// Construct minimal revoked certificate + /// with serialnumber and actual UTC time. + /// + /// + public RevokedCertificate(string serialNumber) : this() + { + UserCertificate = serialNumber.FromHexString().Reverse().ToArray(); + } + + /// + /// Construct minimal revoked certificate + /// with serialnumber and actual UTC time. + /// + /// + public RevokedCertificate(byte[] serialNumber) : this() + { + UserCertificate = serialNumber; + } + + private RevokedCertificate() + { + RevocationDate = DateTime.UtcNow; + CrlEntryExtensions = new X509ExtensionCollection(); + } + + /// + /// The serial number of the revoked certificate as + /// big endian hex string. + /// + public string SerialNumber => UserCertificate.ToHexString(true); + + /// + /// The serial number of the revoked user certificate + /// as a little endian byte array. + /// + public byte[] UserCertificate { get; } + + /// + /// The UTC time of the revocation event. + /// + public DateTime RevocationDate { get; set; } + + /// + /// The list of crl entry extensions. + /// + public X509ExtensionCollection CrlEntryExtensions { get; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/X509Crl.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/X509Crl.cs new file mode 100644 index 00000000..40c5e22a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/X509Crl.cs @@ -0,0 +1,356 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.IO; +using System.Security.Cryptography; +using System.Formats.Asn1; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Decodes a X509 CRL and provides access to information. + /// + public class X509CRL : IX509CRL + { + #region Constructors + /// + /// Loads a CRL from a file. + /// + public X509CRL(string filePath) : this() + { + RawData = File.ReadAllBytes(filePath); + } + + /// + /// Loads a CRL from a memory buffer. + /// + public X509CRL(byte[] crl) : this() + { + RawData = crl; + } + + /// + /// Create CRL from IX509CRL interface. + /// + /// + public X509CRL(IX509CRL crl) + { + m_decoded = true; + m_issuerName = crl.IssuerName; + m_hashAlgorithmName = crl.HashAlgorithmName; + m_thisUpdate = crl.ThisUpdate; + m_nextUpdate = crl.NextUpdate; + m_revokedCertificates = new List(crl.RevokedCertificates); + m_crlExtensions = new X509ExtensionCollection(); + foreach (var extension in crl.CrlExtensions) + { + m_crlExtensions.Add(extension); + } + RawData = crl.RawData; + } + + /// + /// Default constructor, also internal test hook. + /// + internal X509CRL() + { + m_decoded = false; + m_thisUpdate = DateTime.MinValue; + m_nextUpdate = DateTime.MinValue; + m_revokedCertificates = new List(); + m_crlExtensions = new X509ExtensionCollection(); + } + #endregion + + #region IX509CRL Interface + /// + public X500DistinguishedName IssuerName + { + get + { + EnsureDecoded(); + return m_issuerName; + } + } + + /// + public string Issuer => IssuerName.Name; + + /// + public DateTime ThisUpdate + { + get + { + EnsureDecoded(); + return m_thisUpdate; + } + } + + /// + public DateTime NextUpdate + { + get + { + EnsureDecoded(); + return m_nextUpdate; + } + } + + /// + public HashAlgorithmName HashAlgorithmName + { + get + { + EnsureDecoded(); + return m_hashAlgorithmName; + } + } + + /// + public IList RevokedCertificates + { + get + { + EnsureDecoded(); + return m_revokedCertificates.AsReadOnly(); + } + } + + /// + public X509ExtensionCollection CrlExtensions + { + get + { + EnsureDecoded(); + return m_crlExtensions; + } + } + + /// + public byte[] RawData { get; private set; } + #endregion + + #region Public Methods + /// + /// Verifies the signature on the CRL. + /// + public bool VerifySignature(X509Certificate2 issuer, bool throwOnError) + { + bool result; + try + { + var signature = new X509Signature(RawData); + result = signature.Verify(issuer); + } + catch (Exception) + { + result = false; + } + if (!result && throwOnError) + { + throw new CryptographicException("Could not verify signature on CRL."); + } + return result; + } + + /// + /// Returns true if the certificate is revoked in the CRL. + /// + public bool IsRevoked(X509Certificate2 certificate) + { + if (certificate.IssuerName.Equals(IssuerName)) + { + throw new CryptographicException("Certificate was not created by the CRL Issuer."); + } + EnsureDecoded(); + var serialnumber = certificate.GetSerialNumber(); + foreach (var revokedCert in RevokedCertificates) + { + if (serialnumber.SequenceEqual(revokedCert.UserCertificate)) + { + return true; + } + } + return false; + } + #endregion + + #region Private Methods + /// + /// Decode the complete CRL. + /// + /// The raw signed CRL + internal void Decode(byte[] crl) + { + // Decode the Tbs and signature + m_signature = new X509Signature(crl); + // Decode the TbsCertList + DecodeCrl(m_signature.Tbs); + } + + /// + /// Decode the Tbs of the CRL. + /// + /// The raw TbsCertList of the CRL. + internal void DecodeCrl(byte[] tbs) + { + try + { + AsnReader crlReader = new AsnReader(tbs, AsnEncodingRules.DER); + var tag = Asn1Tag.Sequence; + var seqReader = crlReader.ReadSequence(tag); + crlReader.ThrowIfNotEmpty(); + if (seqReader != null) + { + // Version is OPTIONAL + uint version = 0; + var intTag = new Asn1Tag(UniversalTagNumber.Integer); + var peekTag = seqReader.PeekTag(); + if (peekTag == intTag) + { + if (seqReader.TryReadUInt32(out version)) + { + if (version != 1) + { + throw new AsnContentException($"The CRL contains an incorrect version {version}"); + } + } + } + + // Signature Algorithm Identifier + var sigReader = seqReader.ReadSequence(); + var oid = sigReader.ReadObjectIdentifier(); + m_hashAlgorithmName = Oids.GetHashAlgorithmName(oid); + if (sigReader.HasData) + { + sigReader.ReadNull(); + } + sigReader.ThrowIfNotEmpty(); + + // Issuer + m_issuerName = new X500DistinguishedName(seqReader.ReadEncodedValue().ToArray()); + + // thisUpdate + m_thisUpdate = seqReader.ReadUtcTime().UtcDateTime; + + // nextUpdate is OPTIONAL + var utcTag = new Asn1Tag(UniversalTagNumber.UtcTime); + peekTag = seqReader.PeekTag(); + if (peekTag == utcTag) + { + m_nextUpdate = seqReader.ReadUtcTime().UtcDateTime; + } + + var seqTag = new Asn1Tag(UniversalTagNumber.Sequence, true); + peekTag = seqReader.PeekTag(); + if (peekTag == seqTag) + { + // revoked certificates + var revReader = seqReader.ReadSequence(tag); + var revokedCertificates = new List(); + while (revReader.HasData) + { + var crlEntry = revReader.ReadSequence(); + var serial = crlEntry.ReadInteger(); + var revokedCertificate = new RevokedCertificate(serial.ToByteArray()); + revokedCertificate.RevocationDate = crlEntry.ReadUtcTime().UtcDateTime; + if (version == 1 && + crlEntry.HasData) + { + // CRL entry extensions + var crlEntryExtensions = crlEntry.ReadSequence(); + while (crlEntryExtensions.HasData) + { + var extension = crlEntryExtensions.ReadExtension(); + revokedCertificate.CrlEntryExtensions.Add(extension); + } + crlEntryExtensions.ThrowIfNotEmpty(); + } + crlEntry.ThrowIfNotEmpty(); + revokedCertificates.Add(revokedCertificate); + } + revReader.ThrowIfNotEmpty(); + m_revokedCertificates = revokedCertificates; + } + + // CRL extensions OPTIONAL + if (version == 1 && + seqReader.HasData) + { + var extTag = new Asn1Tag(TagClass.ContextSpecific, 0); + var optReader = seqReader.ReadSequence(extTag); + var crlExtensionList = new X509ExtensionCollection(); + var crlExtensions = optReader.ReadSequence(); + while (crlExtensions.HasData) + { + var extension = crlExtensions.ReadExtension(); + crlExtensionList.Add(extension); + } + m_crlExtensions = crlExtensionList; + } + seqReader.ThrowIfNotEmpty(); + m_decoded = true; + return; + } + throw new CryptographicException("The CRL contains ivalid data."); + } + catch (AsnContentException ace) + { + throw new CryptographicException("Failed to decode the CRL.", ace); + } + } + + /// + /// Decode if RawData is yet undecoded. + /// + private void EnsureDecoded() + { + if (!m_decoded) + { + Decode(RawData); + } + } + #endregion + + #region Private Fields + private bool m_decoded = false; + private X509Signature m_signature; + private X500DistinguishedName m_issuerName; + private DateTime m_thisUpdate; + private DateTime m_nextUpdate; + private HashAlgorithmName m_hashAlgorithmName; + private List m_revokedCertificates; + private X509ExtensionCollection m_crlExtensions; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/X509Signature.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/X509Signature.cs new file mode 100644 index 00000000..f113f773 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Security.Certificates/X509Crl/X509Signature.cs @@ -0,0 +1,287 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Diagnostics; +using System.Formats.Asn1; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security.Certificates +{ + /// + /// Describes the three required fields of a X509 Certificate and CRL. + /// + public class X509Signature + { + /// + /// The field contains the ASN.1 data to be signed. + /// + public byte[] Tbs { get; private set; } + /// + /// The signature of the data. + /// + public byte[] Signature { get; private set; } + /// + /// The encoded signature algorithm that was used for signing. + /// + public byte[] SignatureAlgorithmIdentifier { get; private set; } + /// + /// The signature algorithm as Oid string. + /// + public string SignatureAlgorithm { get; private set; } + /// + /// The hash algorithm used for signing. + /// + public HashAlgorithmName Name { get; private set; } + /// + /// Initialize and decode the sequence with binary ASN.1 encoded CRL or certificate. + /// + /// + public X509Signature(byte[] signedBlob) + { + Decode(signedBlob); + } + + /// + /// Initialize the X509 signature values. + /// + /// The data to be signed. + /// The signature of the data. + /// The algorithm used to create the signature. + public X509Signature(byte[] tbs, byte[] signature, byte[] signatureAlgorithmIdentifier) + { + Tbs = tbs; + Signature = signature; + SignatureAlgorithmIdentifier = signatureAlgorithmIdentifier; + SignatureAlgorithm = DecodeAlgorithm(signatureAlgorithmIdentifier); + Name = Oids.GetHashAlgorithmName(SignatureAlgorithm); + } + + /// + /// Encode Tbs with a signature in ASN format. + /// + /// X509 ASN format of EncodedData+SignatureOID+Signature bytes. + public byte[] Encode() + { + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + + var tag = Asn1Tag.Sequence; + writer.PushSequence(tag); + + // write Tbs encoded data + writer.WriteEncodedValue(Tbs); + + // Signature Algorithm Identifier + if (SignatureAlgorithmIdentifier != null) + { + writer.WriteEncodedValue(SignatureAlgorithmIdentifier); + } + else + { + writer.PushSequence(); + string signatureAlgorithmIdentifier = Oids.GetRSAOid(Name); + writer.WriteObjectIdentifier(signatureAlgorithmIdentifier); + writer.WriteNull(); + writer.PopSequence(); + } + + // Add signature + writer.WriteBitString(Signature); + + writer.PopSequence(tag); + + return writer.Encode(); + } + + /// + /// Decoder for the signature sequence. + /// + /// The encoded CRL or certificate sequence. + private void Decode(byte[] crl) + { + try + { + AsnReader crlReader = new AsnReader(crl, AsnEncodingRules.DER); + var seqReader = crlReader.ReadSequence(Asn1Tag.Sequence); + if (seqReader != null) + { + // Tbs encoded data + Tbs = seqReader.ReadEncodedValue().ToArray(); + + // Signature Algorithm Identifier + var sigOid = seqReader.ReadSequence(); + SignatureAlgorithm = sigOid.ReadObjectIdentifier(); + Name = Oids.GetHashAlgorithmName(SignatureAlgorithm); + + // Signature + int unusedBitCount; + Signature = seqReader.ReadBitString(out unusedBitCount); + if (unusedBitCount != 0) + { + throw new AsnContentException("Unexpected data in signature."); + } + seqReader.ThrowIfNotEmpty(); + return; + } + throw new CryptographicException("No valid data in the X509 signature."); + } + catch (AsnContentException ace) + { + throw new CryptographicException("Failed to decode the X509 signature.", ace); + } + } + + /// + /// Verify the signature with the public key of the signer. + /// + /// + /// true if the signature is valid. + public bool Verify(X509Certificate2 certificate) + { + switch (SignatureAlgorithm) + { + case Oids.RsaPkcs1Sha1: + case Oids.RsaPkcs1Sha256: + case Oids.RsaPkcs1Sha384: + case Oids.RsaPkcs1Sha512: + return VerifyForRSA(certificate, RSASignaturePadding.Pkcs1); + + case Oids.ECDsaWithSha1: + case Oids.ECDsaWithSha256: + case Oids.ECDsaWithSha384: + case Oids.ECDsaWithSha512: + return VerifyForECDsa(certificate); + + default: + throw new CryptographicException("Failed to verify signature due to unknown signature algorithm."); + } + } + + /// + /// Verify the signature with the RSA public key of the signer. + /// + private bool VerifyForRSA(X509Certificate2 certificate, RSASignaturePadding padding) + { + RSA rsa = null; + try + { + rsa = certificate.GetRSAPublicKey(); + return rsa.VerifyData(Tbs, Signature, Name, padding); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Verify the signature with the ECC public key of the signer. + /// + private bool VerifyForECDsa(X509Certificate2 certificate) + { + using (ECDsa key = certificate.GetECDsaPublicKey()) + { + var decodedSignature = DecodeECDsa(Signature, key.KeySize); + return key.VerifyData(Tbs, decodedSignature, Name); + } + } + + /// + /// Decode the algorithm that was used for encoding. + /// + /// The ASN.1 encoded algorithm oid. + /// + private string DecodeAlgorithm(byte[] oid) + { + var seqReader = new AsnReader(oid, AsnEncodingRules.DER); + var sigOid = seqReader.ReadSequence(); + seqReader.ThrowIfNotEmpty(); + var result = sigOid.ReadObjectIdentifier(); + if (sigOid.HasData) + { + sigOid.ReadNull(); + } + sigOid.ThrowIfNotEmpty(); + return result; + } + + /// + /// Encode a ECDSA signature as ASN.1. + /// + /// The signature to encode as ASN.1 + private static byte[] EncodeECDsa(byte[] signature) + { + // Encode from IEEE signature format to ASN1 DER encoded + // signature format for ecdsa certificates. + // ECDSA-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER } + AsnWriter writer = new AsnWriter(AsnEncodingRules.DER); + var tag = Asn1Tag.Sequence; + writer.PushSequence(tag); + + int segmentLength = signature.Length / 2; + writer.WriteIntegerUnsigned(new ReadOnlySpan(signature, 0, segmentLength)); + writer.WriteIntegerUnsigned(new ReadOnlySpan(signature, segmentLength, segmentLength)); + + writer.PopSequence(tag); + + return writer.Encode(); + } + + /// + /// Decode a ECDSA signature from ASN.1. + /// + /// The signature to decode from ASN.1 + /// The keySize in bits. + private static byte[] DecodeECDsa(ReadOnlyMemory signature, int keySize) + { + AsnReader reader = new AsnReader(signature, AsnEncodingRules.DER); + var seqReader = reader.ReadSequence(); + reader.ThrowIfNotEmpty(); + var r = seqReader.ReadIntegerBytes(); + var s = seqReader.ReadIntegerBytes(); + seqReader.ThrowIfNotEmpty(); + keySize >>= 3; + if (r.Span[0] == 0 && r.Length > keySize) + { + r = r.Slice(1); + } + if (s.Span[0] == 0 && s.Length > keySize) + { + s = s.Slice(1); + } + var result = new byte[2 * keySize]; + int offset = keySize - r.Length; + r.CopyTo(new Memory(result, offset, r.Length)); + offset = 2 * keySize - s.Length; + s.CopyTo(new Memory(result, offset, s.Length)); + return result; + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AggregateCalculator.cs new file mode 100644 index 00000000..893f24d5 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AggregateCalculator.cs @@ -0,0 +1,1534 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class AggregateCalculator : IAggregateCalculator + { + #region Constructors + /// + /// Creates a default aggregator. + /// + protected AggregateCalculator(NodeId aggregateId) + { + AggregateConfiguration configuration = new AggregateConfiguration(); + configuration.TreatUncertainAsBad = false; + configuration.PercentDataBad = 100; + configuration.PercentDataGood = 100; + configuration.UseSlopedExtrapolation = false; + Initialize(aggregateId, DateTime.UtcNow, DateTime.MaxValue, 1000, false, configuration); + } + + /// + /// Initializes the calculation stream. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public AggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + { + Initialize(aggregateId, startTime, endTime, processingInterval, stepped, configuration); + } + + /// + /// Initializes the calculation stream. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + protected void Initialize( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + { + AggregateId = aggregateId; + StartTime = startTime; + EndTime = endTime; + ProcessingInterval = processingInterval; + Stepped = stepped; + Configuration = configuration; + TimeFlowsBackward = (endTime < startTime); + + if (processingInterval == 0) + { + if (endTime == DateTime.MinValue || startTime == DateTime.MinValue) + { + throw new ArgumentException("Non-zero processingInterval required.", nameof(processingInterval)); + } + + ProcessingInterval = Math.Abs((endTime - startTime).TotalMilliseconds); + } + + m_values = new LinkedList(); + } + #endregion + + #region IAggregateCalculator Members + /// + /// The aggregate function applied by the calculator. + /// + public NodeId AggregateId { get; private set; } + + /// + /// Queues a raw value for processing. + /// + /// The data value to process. + /// True if successful, false if the timestamp has been superceeded by values already in the stream. + public bool QueueRawValue(DataValue value) + { + // ignore bad data. + if (value == null) + { + return false; + } + + // ignore placeholders in the stream. + if (value.StatusCode.CodeBits == StatusCodes.BadNoData) + { + return true; + } + + // check for start of data. + if (m_startOfData == DateTime.MinValue) + { + m_startOfData = value.SourceTimestamp; + } + + // update end of data. + m_endOfData = value.SourceTimestamp; + + // ensure values are being queued in the right order. + if (TimeFlowsBackward) + { + if (m_values.First != null && CompareTimestamps(value, m_values.First) > 0) + { + return false; + } + } + else + { + if (m_values.Last != null && CompareTimestamps(value, m_values.Last) < 0) + { + return false; + } + } + + // ensure value list is always ordered from past to future. + if (TimeFlowsBackward) + { + m_values.AddFirst(value); + } + else + { + m_values.AddLast(value); + } + + return true; + } + + /// + /// Returns the next processed value. + /// + /// If true a partial interval should be processed. + /// The processed value. Null if nothing available and returnPartial is false. + public DataValue GetProcessedValue(bool returnPartial) + { + // check if all done. + if (Complete) + { + return null; + } + + // update the slice. + if (CurrentSlice == null) + { + CurrentSlice = CreateSlice(null); + } + else + { + UpdateSlice(CurrentSlice); + } + + // check if a value can be produced. + if (!CurrentSlice.Complete && !returnPartial) + { + return null; + } + + // check if the slice extends beyond the range of available data. + DateTime earlyTime = CurrentSlice.StartTime; + DateTime lateTime = CurrentSlice.EndTime; + + if (CompareTimestamps(lateTime, m_values.First) < 0 || CompareTimestamps(earlyTime, m_values.Last) > 0) + { + CurrentSlice.OutOfDataRange = true; + } + + Utils.Trace(1, "Computing {0:HH:mm:ss.fff}", CurrentSlice.StartTime); + + // compute the value. + DataValue value = ComputeValue(CurrentSlice); + + // check if overlapping the start of data. + if (SetPartialBit) + { + if (m_startOfData > earlyTime && m_startOfData < lateTime) + { + value.StatusCode = value.StatusCode.SetAggregateBits(value.StatusCode.AggregateBits | AggregateBits.Partial); + } + + if (!UsingExtrapolation) + { + if (m_endOfData >= earlyTime && m_endOfData < lateTime) + { + value.StatusCode = value.StatusCode.SetAggregateBits(value.StatusCode.AggregateBits | AggregateBits.Partial); + } + } + } + + // force value to null if status code is bad. + if (StatusCode.IsBad(value.StatusCode)) + { + value.WrappedValue = Variant.Null; + } + + // delete uneeded data. + if (TimeFlowsBackward) + { + if (CurrentSlice.LateBound != null) + { + LinkedListNode ii = CurrentSlice.LateBound.Next; + + while (ii != null) + { + LinkedListNode next = ii.Next; + m_values.Remove(ii); + ii = next; + } + } + } + else + { + if (CurrentSlice.EarlyBound != null) + { + LinkedListNode ii = CurrentSlice.EarlyBound.Previous; + + if (CurrentSlice.SecondEarlyBound != null) + { + ii = CurrentSlice.SecondEarlyBound.Previous; + } + + while (ii != null) + { + LinkedListNode next = ii.Previous; + m_values.Remove(ii); + ii = next; + } + } + } + + // check if more to be done. + Complete = ((!TimeFlowsBackward && CurrentSlice.EndTime >= EndTime) || (TimeFlowsBackward && CurrentSlice.StartTime <= EndTime)); + + if (Complete) + { + // check if overlapping the end of data. + if (SetPartialBit && !UsingExtrapolation) + { + if (m_endOfData >= earlyTime && m_endOfData < lateTime) + { + value.StatusCode = value.StatusCode.SetAggregateBits(value.StatusCode.AggregateBits | AggregateBits.Partial); + } + } + } + else + { + CurrentSlice = CreateSlice(CurrentSlice); + } + + // return the processed value. + return value; + } + + /// + /// Returns true if the specified time is later than the end of the current interval. + /// + /// Return true if time flows forward and the time is later than the end time. + public bool HasEndTimePassed(DateTime currentTime) + { + if (CurrentSlice == null) + { + return false; + } + + if (TimeFlowsBackward) + { + return CurrentSlice.EndTime >= currentTime; + } + + return CurrentSlice.EndTime <= currentTime; + } + #endregion + + #region Protected Methods + /// + /// The start time for the request. + /// + protected DateTime StartTime { get; private set; } + + /// + /// The end time for the request. + /// + protected DateTime EndTime { get; private set; } + + /// + /// The processing interval for the request. + /// + protected double ProcessingInterval { get; private set; } + + /// + /// True if the data series requires stepped interpolation. + /// + protected bool Stepped { get; private set; } + + /// + /// The configuration to use when processing. + /// + protected AggregateConfiguration Configuration { get; private set; } + + /// + /// Whether to use the server timestamp for all processing. + /// + protected bool UseServerTimestamp { get; private set; } + + /// + /// True if data is being processed in reverse order. + /// + protected bool TimeFlowsBackward { get; private set; } + + /// + /// Whether to use the server timestamp for all processing. + /// + protected TimeSlice CurrentSlice { get; private set; } + + /// + /// True if all values required for the request have been received and processed + /// + protected bool Complete { get; private set; } + + /// + /// True if the GetProcessedValue method should set the Partial bit when appropriate. + /// + protected bool SetPartialBit { get; set; } + + /// + /// True if data is extrapolated after the end of data. + /// + protected bool UsingExtrapolation { get; set; } + + /// + /// Compares timestamps for two DataValues according to the current UseServerTimestamp setting. + /// + /// The first value to compare. + /// The second value to compare. + /// Less than 0 if value1 is earlier than value2; 0 if they are equal; Greater than zero otherwise. + protected int CompareTimestamps(DataValue value1, DataValue value2) + { + if (value1 == null) + { + return (value2 == null)?0:-1; + } + + if (value2 == null) + { + return +1; + } + + if (UseServerTimestamp) + { + int result = value1.ServerTimestamp.CompareTo(value2.ServerTimestamp); + + if (result == 0) + { + return value1.ServerPicoseconds.CompareTo(value2.ServerPicoseconds); + } + + return result; + } + else + { + int result = value1.SourceTimestamp.CompareTo(value2.SourceTimestamp); + + if (result == 0) + { + return value1.SourcePicoseconds.CompareTo(value2.SourcePicoseconds); + } + + return result; + } + } + + /// + /// Compares timestamps for two DataValues according to the current UseServerTimestamp setting. + /// + /// The first value to compare. + /// The second value to compare. + /// Less than 0 if value1 is earlier than value2; 0 if they are equal; Greater than zero otherwise. + protected int CompareTimestamps(DataValue value1, LinkedListNode value2) + { + if (value2 == null) + { + return (value1 == null)?0:+1; + } + + return CompareTimestamps(value1, value2.Value); + } + + /// + /// Compares timestamps for two DataValues according to the current UseServerTimestamp setting. + /// + /// The first value to compare. + /// The second value to compare. + /// Less than 0 if value1 is earlier than value2; 0 if they are equal; Greater than zero otherwise. + protected int CompareTimestamps(LinkedListNode value1, LinkedListNode value2) + { + if (value1 == null) + { + return (value2 == null)?0:-1; + } + + if (value2 == null) + { + return +1; + } + + return CompareTimestamps(value1.Value, value2.Value); + } + + /// + /// Compares timestamps for a timestamp to a DataValue according to the current UseServerTimestamp setting. + /// + /// The timestamp to compare. + /// The data value to compare. + /// Less than 0 if value1 is earlier than value2; 0 if they are equal; Greater than zero otherwise. + protected int CompareTimestamps(DateTime value1, LinkedListNode value2) + { + if (value2 == null || value2.Value == null) + { + return +1; + } + + if (UseServerTimestamp) + { + return value1.CompareTo(value2.Value.ServerTimestamp); + } + else + { + return value1.CompareTo(value2.Value.SourceTimestamp); + } + } + + /// + /// Checks if the value is good according to the configuration rules. + /// + /// The value to test. + /// True if the value is good. + protected bool IsGood(DataValue value) + { + if (value == null) + { + return false; + } + + if (Configuration.TreatUncertainAsBad) + { + if (StatusCode.IsNotGood(value.StatusCode)) + { + return false; + } + } + else + { + if (StatusCode.IsBad(value.StatusCode)) + { + return false; + } + } + + return true; + } + + /// + /// Stores information about a slice of data to be processed. + /// + protected class TimeSlice + { + /// + /// The start time for the slice. + /// + public DateTime StartTime { get; set; } + + /// + /// The end time for the slice. + /// + public DateTime EndTime { get; set; } + + /// + /// True if the slice is a partial interval. + /// + public bool Partial { get; set; } + + /// + /// True if all of the data required to process the slice has been collected. + /// + public bool Complete { get; set; } + + /// + /// True if the slice includes times that are outside of the available dataset. + /// + public bool OutOfDataRange { get; set; } + + /// + /// The first early bound for the slice. + /// + public LinkedListNode EarlyBound { get; set; } + + /// + /// The second early bound for the slice (always earlier than the first). + /// + public LinkedListNode SecondEarlyBound { get; set; } + + /// + /// The beginning of the slice. + /// + public LinkedListNode Begin { get; set; } + + /// + /// The end of the slice. + /// + public LinkedListNode End { get; set; } + + /// + /// The late bound for the slice. + /// + public LinkedListNode LateBound { get; set; } + + /// + /// The last value which was processed. + /// + public LinkedListNode LastProcessedValue { get; set; } + } + + /// + /// Creates a new time slice to process. + /// + /// The previous processed slice. + /// The new time slice. + protected TimeSlice CreateSlice(TimeSlice previousSlice) + { + TimeSlice slice = new TimeSlice(); + + // ensure slice is oriented from past to future even if request is going backwards. + if (TimeFlowsBackward) + { + if (previousSlice == null) + { + slice.EndTime = StartTime; + } + else + { + slice.EndTime = previousSlice.StartTime; + } + + slice.StartTime = slice.EndTime.AddMilliseconds(-ProcessingInterval); + + // check for end of request. + if (slice.StartTime < EndTime) + { + slice.StartTime = EndTime; + slice.Partial = true; + } + } + else + { + if (previousSlice == null) + { + slice.StartTime = StartTime; + } + else + { + slice.StartTime = previousSlice.EndTime; + } + + slice.EndTime = slice.StartTime.AddMilliseconds(ProcessingInterval); + + // check for end of request. + if (slice.EndTime > EndTime) + { + slice.EndTime = EndTime; + slice.Partial = true; + } + } + + // update the slice with current data. + UpdateSlice(slice); + return slice; + } + + /// + /// Creates a new time slice to process. + /// + /// The slice to update. + /// True if the slice is complete. + protected bool UpdateSlice(TimeSlice slice) + { + // check if nothing to do. + if (m_values.First == null) + { + return slice.Complete; + } + + // restart processing from where it left off. + LinkedListNode start = m_values.First; + + if (!TimeFlowsBackward && slice.LastProcessedValue != null) + { + start = slice.LastProcessedValue.Next; + } + + // reset the begin bound each time we go through the values. + if (TimeFlowsBackward) + { + slice.Begin = null; + } + + // initialize slice from value list. + for (LinkedListNode ii = start; ii != null; ii = ii.Next) + { + if (TimeFlowsBackward) + { + // check if before the beginning of the slice. + if (CompareTimestamps(slice.StartTime, ii) >= 0) + { + if (IsGood(ii.Value)) + { + slice.SecondEarlyBound = slice.EarlyBound; + slice.EarlyBound = ii; + } + + continue; + } + + // check if after the end if the slice. + if (CompareTimestamps(slice.EndTime, ii) < 0) + { + if (IsGood(ii.Value)) + { + slice.LateBound = ii; + break; + } + + continue; + } + + // save first value in the slice. + if (slice.End == null) + { + slice.End = ii; + } + + // save end of slice. + if (slice.Begin == null) + { + slice.Begin = ii; + slice.LastProcessedValue = ii; + } + } + else + { + // check if before the beginning of the slice. + if (CompareTimestamps(slice.StartTime, ii) > 0) + { + if (IsGood(ii.Value)) + { + slice.SecondEarlyBound = slice.EarlyBound; + slice.EarlyBound = ii; + slice.LastProcessedValue = ii; + } + + continue; + } + + // check if after the end if the slice. + if (CompareTimestamps(slice.EndTime, ii) < 0) + { + if (IsGood(ii.Value)) + { + slice.LateBound = ii; + slice.LastProcessedValue = ii; + break; + } + + continue; + } + + // save first value in the slice. + if (slice.Begin == null) + { + slice.Begin = ii; + } + + // save end of slice. + slice.End = ii; + slice.LastProcessedValue = ii; + } + } + + // check if no more data needs to be collected. + LinkedListNode requiredBound = null; + + if (TimeFlowsBackward) + { + // only need second early bound if using sloped extrapolation and there is no late bound. + if (Configuration.UseSlopedExtrapolation && slice.LateBound == null) + { + requiredBound = slice.SecondEarlyBound; + } + else + { + requiredBound = slice.EarlyBound; + } + } + else + { + requiredBound = slice.LateBound; + } + + // all done if required bound exists. + if (requiredBound != null) + { + slice.Complete = true; + } + + return slice.Complete; + } + + /// + /// Calculates the value for the timeslice. + /// + /// The slice to process. + /// The processed value. + protected virtual DataValue ComputeValue(TimeSlice slice) + { + return Interpolate(slice); + } + + /// + /// Calculate the interpolate aggregate for the timeslice. + /// + protected DataValue Interpolate(TimeSlice slice) + { + if (TimeFlowsBackward) + { + return Interpolate(slice.EndTime, slice); + } + else + { + return Interpolate(slice.StartTime, slice); + } + } + + /// + /// Return a value indicating there is no data in the time slice. + /// + protected DataValue GetNoDataValue(TimeSlice slice) + { + if (TimeFlowsBackward) + { + return GetNoDataValue(slice.EndTime); + } + else + { + return GetNoDataValue(slice.StartTime); + } + } + + /// + /// Returns the timestamp to use for the slice value. + /// + protected DateTime GetTimestamp(TimeSlice slice) + { + if (TimeFlowsBackward) + { + return slice.EndTime; + } + else + { + return slice.StartTime; + } + } + + /// + /// Return a value indicating there is no data in the time slice. + /// + protected DataValue GetNoDataValue(DateTime timestamp) + { + return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp); + } + + /// + /// Interpolates a value at the timestamp. + /// + /// The timestamp. + /// The timeslice that contains the timestamp. + /// The interpolated value. + protected DataValue Interpolate(DateTime timestamp, TimeSlice reference) + { + TimeSlice slice = new TimeSlice(); + slice.StartTime = timestamp; + slice.EndTime = timestamp; + UpdateSlice(slice); + + // check for value at the timestamp. + if (slice.Begin != null) + { + if (IsGood(slice.Begin.Value)) + { + return slice.Begin.Value; + } + } + + DataValue dataValue = null; + bool stepped = Stepped; + + // check if the required bounds are available. + if (!Stepped) + { + // check if sloped interpolation is possible. + if (slice.EarlyBound != null && slice.LateBound != null) + { + dataValue = SlopedInterpolate(timestamp, slice.EarlyBound.Value, slice.LateBound.Value); + + if (!Object.ReferenceEquals(slice.EarlyBound.Next, slice.LateBound)) + { + dataValue.StatusCode = dataValue.StatusCode.SetCodeBits(StatusCodes.UncertainDataSubNormal); + } + + return dataValue; + } + + // check if extrapolation is possible. + if (slice.EarlyBound != null) + { + if (Configuration.UseSlopedExtrapolation) + { + if (slice.EarlyBound != null && slice.SecondEarlyBound != null) + { + UsingExtrapolation = true; + dataValue = SlopedInterpolate(timestamp, slice.SecondEarlyBound.Value, slice.EarlyBound.Value); + dataValue.StatusCode = dataValue.StatusCode.SetCodeBits(StatusCodes.UncertainDataSubNormal); + return dataValue; + } + } + + // do stepped extrapolation. + stepped = true; + } + } + + // do stepped interpolation. + if (stepped) + { + if (slice.EarlyBound != null) + { + dataValue = SteppedInterpolate(timestamp, slice.EarlyBound.Value); + + if (slice.EarlyBound.Next == null || CompareTimestamps(timestamp, slice.EarlyBound.Next) >= 0) + { + UsingExtrapolation = true; + dataValue.StatusCode = dataValue.StatusCode.SetCodeBits(StatusCodes.UncertainDataSubNormal); + } + + return dataValue; + } + } + + // no data found. + return GetNoDataValue(timestamp); + } + + /// + /// Calculate the value at the timestamp using slopped interpolation. + /// + public static DataValue SteppedInterpolate(DateTime timestamp, DataValue earlyBound) + { + // can't interpolate if no start bound. + if (StatusCode.IsBad(earlyBound.StatusCode)) + { + return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp); + } + + DataValue dataValue = new DataValue(); + dataValue.WrappedValue = earlyBound.WrappedValue; + dataValue.SourceTimestamp = timestamp; + dataValue.ServerTimestamp = timestamp; + dataValue.StatusCode = StatusCodes.Good; + + // update status code. + if (StatusCode.IsBad(earlyBound.StatusCode)) + { + dataValue.StatusCode = StatusCodes.BadNoData; + } + + // update status code. + if (StatusCode.IsNotGood(earlyBound.StatusCode)) + { + dataValue.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + dataValue.StatusCode = dataValue.StatusCode.SetAggregateBits(AggregateBits.Interpolated); + return dataValue; + } + + /// + /// Calculate the value at the timestamp using slopped interpolation. + /// + public static DataValue SlopedInterpolate(DateTime timestamp, DataValue earlyBound, DataValue lateBound) + { + try + { + // can't interpolate if no start bound. + if (StatusCode.IsBad(earlyBound.StatusCode)) + { + return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp); + } + + // revert to stepped if no end bound. + if (StatusCode.IsBad(lateBound.StatusCode)) + { + DataValue dataValue2 = SteppedInterpolate(timestamp, earlyBound); + + if (StatusCode.IsNotBad(dataValue2.StatusCode)) + { + dataValue2.StatusCode = dataValue2.StatusCode.SetCodeBits(StatusCodes.UncertainDataSubNormal); + } + + return dataValue2; + } + + // convert to doubles. + double earlyValue = CastToDouble(earlyBound); + double lateValue = CastToDouble(lateBound); + + // do interpolation. + double range = (lateBound.SourceTimestamp - earlyBound.SourceTimestamp).TotalMilliseconds; + double slope = (lateValue - earlyValue) / range; + double calculatedValue = slope * (timestamp - earlyBound.SourceTimestamp).TotalMilliseconds + earlyValue; + + // convert back to original type. + DataValue dataValue = new DataValue(); + dataValue.WrappedValue = CastToOriginalType(calculatedValue, earlyBound); + dataValue.SourceTimestamp = timestamp; + dataValue.ServerTimestamp = timestamp; + dataValue.StatusCode = StatusCodes.Good; + + // update status code. + if (StatusCode.IsNotGood(earlyBound.StatusCode) || StatusCode.IsNotGood(lateBound.StatusCode)) + { + dataValue.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + dataValue.StatusCode = dataValue.StatusCode.SetAggregateBits(AggregateBits.Interpolated); + + return dataValue; + } + + // exception occurs on data conversion errors. + catch (Exception) + { + return new DataValue(Variant.Null, StatusCodes.BadTypeMismatch, timestamp, timestamp); + } + } + + /// + /// Converts the value to a double for use in calculations (throws exceptions if conversion fails). + /// + protected static double CastToDouble(DataValue value) + { + return (double)TypeInfo.Cast(value.Value, value.WrappedValue.TypeInfo, BuiltInType.Double); + } + + /// + /// Converts the value back to its original type (throws exceptions if conversion fails). + /// + protected static Variant CastToOriginalType(double value, DataValue original) + { + object castValue = TypeInfo.Cast(value, TypeInfo.Scalars.Double, original.WrappedValue.TypeInfo.BuiltInType); + return new Variant(castValue, original.WrappedValue.TypeInfo); + } + + /// + /// Returns the simple bound for the timestamp. + /// + protected DataValue GetSimpleBound(DateTime timestamp, TimeSlice slice) + { + // choose the start point + LinkedListNode start = slice.EarlyBound; + + if (start == null) + { + start = m_values.First; + } + + // look for a raw value at or immediately before the timestamp. + LinkedListNode startBound = start; + + for (LinkedListNode ii = start; ii != null; ii = ii.Next) + { + // check for an exact match. + if (CompareTimestamps(timestamp, ii) == 0) + { + return new DataValue(ii.Value); + } + + // looking for an end bound. + if (CompareTimestamps(timestamp, ii) < 0) + { + // only can find an end bound. + if (ii.Previous == null) + { + return GetNoDataValue(timestamp); + } + + startBound = ii.Previous; + break; + } + + // update start bound. + startBound = ii; + } + + // check if no data found or if start bound is bad.. + if (startBound == null || !IsGood(startBound.Value)) + { + return GetNoDataValue(timestamp); + } + + // look for an end bound. + bool revertToStepped = false; + LinkedListNode endBound = startBound.Next; + + if (!Stepped) + { + if (endBound != null) + { + // do sloped interpolation if two good bounds exist. + if (IsGood(endBound.Value)) + { + return SlopedInterpolate(timestamp, startBound.Value, endBound.Value); + } + } + + // have to use stepped because end bound is not good. + revertToStepped = true; + } + + // check if end of data. + if (startBound.Next == null) + { + return GetNoDataValue(timestamp); + } + + // do stepped interpolation for all other cases. + DataValue value = SteppedInterpolate(timestamp, startBound.Value); + + // need to make it uncertain if interpolation was required but not used. + if (StatusCode.IsGood(value.StatusCode) && revertToStepped) + { + value.StatusCode = StatusCodes.UncertainDataSubNormal; + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Interpolated); + } + + return value; + } + + /// + /// Returns the values in the list with simple bounds. + /// + protected List GetValuesWithSimpleBounds(TimeSlice slice) + { + // check if slice is beyond end of available data. + if (CompareTimestamps(slice.StartTime, m_values.Last) > 0 || CompareTimestamps(slice.EndTime, m_values.First) < 0) + { + return null; + } + + List values = new List(); + + // add the start point. + DataValue startBound = GetSimpleBound(slice.StartTime, slice); + + if (startBound != null) + { + values.Add(startBound); + } + + // initialize slice from value list. + for (LinkedListNode ii = slice.Begin; ii != null; ii = ii.Next) + { + if (CompareTimestamps(slice.EndTime, ii) <= 0) + { + break; + } + + if (CompareTimestamps(slice.StartTime, ii) < 0) + { + values.Add(ii.Value); + } + } + + // add the end point. + DataValue endBound = GetSimpleBound(slice.EndTime, slice); + + if (endBound != null) + { + values.Add(endBound); + } + + return values; + } + + /// + /// Returns the values between the start time and the end time for the slice. + /// + protected List GetValues(TimeSlice slice) + { + // check if slice is beyond end of available data. + if (CompareTimestamps(slice.StartTime, m_values.Last) > 0 || CompareTimestamps(slice.EndTime, m_values.First) < 0) + { + return null; + } + + List values = new List(); + + // initialize slice from value list. + for (LinkedListNode ii = slice.Begin; ii != null; ii = ii.Next) + { + if (TimeFlowsBackward) + { + if (CompareTimestamps(slice.EndTime, ii) < 0) + { + break; + } + + if (CompareTimestamps(slice.StartTime, ii) < 0) + { + values.Add(ii.Value); + } + } + else + { + if (CompareTimestamps(slice.EndTime, ii) <= 0) + { + break; + } + + if (CompareTimestamps(slice.StartTime, ii) <= 0) + { + values.Add(ii.Value); + } + } + } + + return values; + } + + /// + /// Returns the values in the list with interpolated bounds. + /// + protected List GetValuesWithInterpolatedBounds(TimeSlice slice) + { + // check if slice is before the available data. + if (CompareTimestamps(slice.EndTime, m_values.First) < 0) + { + return null; + } + + List values = new List(); + + // add the start point. + DataValue startBound = Interpolate(slice.StartTime, slice); + + if (startBound != null) + { + values.Add(startBound); + } + + // initialize slice from value list. + for (LinkedListNode ii = slice.Begin; ii != null; ii = ii.Next) + { + if (CompareTimestamps(slice.EndTime, ii) <= 0) + { + break; + } + + if (CompareTimestamps(slice.StartTime, ii) < 0) + { + values.Add(ii.Value); + } + } + + // add the end point. + DataValue endBound = Interpolate(slice.EndTime, slice); + + if (endBound != null) + { + values.Add(endBound); + } + + return values; + } + + /// + /// A subset of a slice bounded by two raw data points. + /// + protected class SubRegion + { + /// + /// The value at the start of the region. + /// + public double StartValue { get; set; } + + /// + /// The value at the end of the region. + /// + public double EndValue { get; set; } + + /// + /// The timestamp at the start of the region. + /// + public DateTime StartTime; + + /// + /// The length of the region. + /// + public double Duration { get; set; } + + /// + /// The status for the region. + /// + public StatusCode StatusCode; + + /// + /// The data point at the start of the region. + /// + public DataValue DataPoint; + } + + /// + /// Returns the values in the list with simple bounds. + /// + protected List GetRegionsInValueSet(List values, bool ignoreBadData, bool useSteppedCalculations) + { + // nothing to do if no data. + if (values == null) + { + return null; + } + + SubRegion currentRegion = null; + List regions = new List(); + + for (int ii = 0; ii < values.Count; ii++) + { + double currentValue = 0; + DateTime currentTime = values[ii].SourceTimestamp; + StatusCode currentStatus = values[ii].StatusCode; + + // convert to doubles to facilitate numeric calculations. + if (StatusCode.IsNotBad(currentStatus)) + { + try + { + currentValue = CastToDouble(values[ii]); + } + catch (Exception) + { + currentStatus = StatusCodes.BadTypeMismatch; + } + } + else + { + // use the previous value if end of region is bad. + if (currentRegion != null) + { + currentValue = currentRegion.StartValue; + } + } + + // some aggregates ignore bad data so remove them from the set. + if (ignoreBadData) + { + // always keep the first region. + if (currentRegion != null) + { + if (!IsGood(values[ii])) + { + // set the status to sub normal if bad end data ignored. + if (StatusCode.IsNotBad(currentRegion.StatusCode)) + { + currentRegion.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + // skip everything but the endpoint. + if (ii < values.Count - 1) + { + continue; + } + } + else + { + if (!useSteppedCalculations && StatusCode.IsNotGood(values[ii].StatusCode)) + { + currentRegion.StatusCode = StatusCodes.UncertainDataSubNormal; + } + } + } + } + + if (currentRegion != null) + { + // if using stepped calculations the end value is not used. + if (useSteppedCalculations) + { + currentRegion.EndValue = currentRegion.StartValue; + } + + // using interpolated calculations means the end affects the status of the current region. + else + { + if (IsGood(values[ii])) + { + // handle case with uncertain end point. + if (StatusCode.IsNotGood(values[ii].StatusCode) && StatusCode.IsNotBad(currentRegion.StatusCode)) + { + currentRegion.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + currentRegion.EndValue = currentValue; + } + else + { + if (StatusCode.IsNotBad(currentRegion.StatusCode)) + { + currentRegion.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + if (ignoreBadData && StatusCode.IsNotBad(currentStatus)) + { + currentRegion.EndValue = currentValue; + } + } + } + + // if at end of data then duration is 1 tick. + // must be end of data if start of region is good yet end bound is bad. + if (!ignoreBadData && currentRegion != null && IsGood(currentRegion.DataPoint) && currentStatus == StatusCodes.BadNoData && ii == values.Count - 1) + { + currentRegion.Duration = 1; + } + + // calculate region span. + else + { + // set uncertain status to bad if treat uncertain as bad is true. + if (StatusCode.IsUncertain(currentStatus) && !IsGood(values[ii])) + { + currentStatus = StatusCodes.BadNoData; + } + + currentRegion.Duration = (currentTime - currentRegion.StartTime).TotalMilliseconds; + } + + regions.Add(currentRegion); + } + + // start a new region. + currentRegion = new SubRegion(); + currentRegion.StartValue = currentValue; + currentRegion.EndValue = currentValue; + currentRegion.StartTime = currentTime; + currentRegion.StatusCode = currentStatus; + currentRegion.DataPoint = values[ii]; + } + + return regions; + } + + /// + /// Calculates the value based status code for the slice + /// + protected StatusCode GetValueBasedStatusCode(TimeSlice slice, List values, StatusCode statusCode) + { + // compute the total good/bad/uncertain. + double badCount = 0; + double goodCount = 0; + double totalCount = 0; + + for (int ii = 0; ii < values.Count; ii++) + { + totalCount++; + + if (StatusCode.IsBad(values[ii].StatusCode)) + { + badCount++; + continue; + } + + if (StatusCode.IsGood(values[ii].StatusCode)) + { + goodCount++; + } + } + + // default to good. + statusCode = statusCode.SetCodeBits(StatusCodes.Good); + + // uncertain if the good duration is less than the configured threshold. + if ((goodCount / totalCount) * 100 < Configuration.PercentDataGood) + { + statusCode = statusCode.SetCodeBits(StatusCodes.UncertainDataSubNormal); + } + + // bad if the bad duration is greater than or equal to the configured threshold. + if ((badCount / totalCount) * 100 >= Configuration.PercentDataBad) + { + statusCode = StatusCodes.Bad; + } + + return statusCode; + } + + /// + /// Calculates the status code for the slice + /// + protected StatusCode GetTimeBasedStatusCode(TimeSlice slice, List values, StatusCode defaultCode) + { + // get the regions in the slice. + List regions = GetRegionsInValueSet(values, false, Stepped); + + if (regions == null || regions.Count == 0) + { + return StatusCodes.BadNoData; + } + + return GetTimeBasedStatusCode(regions, defaultCode); + } + + /// + /// Calculates the status code for the slice + /// + protected StatusCode GetTimeBasedStatusCode(List regions, StatusCode statusCode) + { + // check for empty set. + if (regions == null || regions.Count == 0) + { + return StatusCodes.BadNoData; + } + + // compute the total good/bad/uncertain. + double badDuration = 0; + double goodDuration = 0; + double totalDuration = 0; + + foreach (SubRegion region in regions) + { + totalDuration += region.Duration; + + if (StatusCode.IsBad(region.StatusCode)) + { + badDuration += region.Duration; + continue; + } + + if (StatusCode.IsGood(region.StatusCode)) + { + goodDuration += region.Duration; + } + } + + // default to good. + statusCode = statusCode.SetCodeBits(StatusCodes.Good); + + // uncertain if the good duration is less than the configured threshold. + if ((goodDuration/totalDuration)*100 < Configuration.PercentDataGood) + { + statusCode = statusCode.SetCodeBits(StatusCodes.UncertainDataSubNormal); + } + + // bad if the bad duration is greater than or equal to the configured threshold. + if ((badDuration/totalDuration)*100 >= Configuration.PercentDataBad) + { + statusCode = StatusCodes.Bad; + } + + // always calculated. + return statusCode; + } + #endregion + + #region Private Fields + private LinkedList m_values; + private DateTime m_startOfData; + private DateTime m_endOfData; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AggregateManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AggregateManager.cs new file mode 100644 index 00000000..e7da3d44 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AggregateManager.cs @@ -0,0 +1,244 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Security.Principal; + +namespace Opc.Ua.Server +{ + /// + /// An object that manages aggregate factories supported by the server. + /// + public class AggregateManager : IDisposable + { + #region Constructors + /// + /// Initilizes the manager. + /// + public AggregateManager(IServerInternal server) + { + m_server = server; + m_factories = new Dictionary(); + m_minimumProcessingInterval = 1000; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_requestTimer")] + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // TBD + } + } + #endregion + + #region Public Members + /// + /// Checks if the aggregate is supported by the server. + /// + /// The id of the aggregate function. + /// True if the aggregate is supported. + public bool IsSupported(NodeId aggregateId) + { + if (NodeId.IsNull(aggregateId)) + { + return false; + } + + lock (m_lock) + { + return m_factories.ContainsKey(aggregateId); + } + } + + /// + /// The minimum processing interval for any aggregate calculation. + /// + public double MinimumProcessingInterval + { + get + { + lock (m_lock) + { + return m_minimumProcessingInterval; + } + } + + set + { + lock (m_lock) + { + m_minimumProcessingInterval = value; + } + } + } + + /// + /// Returns the default configuration for the specified variable id. + /// + /// The id of history data node. + /// The configuration. + public AggregateConfiguration GetDefaultConfiguration(NodeId variableId) + { + lock (m_lock) + { + if (m_defaultConfiguration == null) + { + m_defaultConfiguration = new AggregateConfiguration(); + m_defaultConfiguration.PercentDataBad = 100; + m_defaultConfiguration.PercentDataGood = 100; + m_defaultConfiguration.TreatUncertainAsBad = false; + m_defaultConfiguration.UseSlopedExtrapolation = false; + m_defaultConfiguration.UseServerCapabilitiesDefaults = false; + } + + return m_defaultConfiguration; + } + } + + /// + /// Sets the default aggregate configuration. + /// + /// The default aggregate configuration.. + public void SetDefaultConfiguration(AggregateConfiguration configuration) + { + lock (m_lock) + { + m_defaultConfiguration = configuration; + } + } + + /// + /// Creates a new aggregate calculator. + /// + /// The id of the aggregate function. + /// When to start processing. + /// When to stop processing. + /// The processing interval. + /// Whether stepped interpolation should be used. + /// The configuaration to use. + /// + public IAggregateCalculator CreateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + { + if (NodeId.IsNull(aggregateId)) + { + return null; + } + + AggregatorFactory factory = null; + + lock (m_lock) + { + if (!m_factories.TryGetValue(aggregateId, out factory)) + { + return null; + } + } + + if (configuration.UseServerCapabilitiesDefaults) + { + configuration = m_defaultConfiguration; + } + + IAggregateCalculator calculator = factory(aggregateId, startTime, endTime, processingInterval, stepped, configuration); + + if (calculator == null) + { + return null; + } + + return calculator; + } + + /// + /// Registers an aggregate factory. + /// + /// The id of the aggregate function. + /// The id of the aggregate name. + /// The factory used to create calculators. + public void RegisterFactory(NodeId aggregateId, string aggregateName, AggregatorFactory factory) + { + lock (m_lock) + { + m_factories[aggregateId] = factory; + } + + if (m_server != null) + { + m_server.DiagnosticsNodeManager.AddAggregateFunction(aggregateId, aggregateName, true); + } + } + + /// + /// Unregisters an aggregate factory. + /// + /// The id of the aggregate function. + public void RegisterFactory(NodeId aggregateId) + { + lock (m_lock) + { + m_factories.Remove(aggregateId); + } + } + #endregion + + #region Private Methods + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private AggregateConfiguration m_defaultConfiguration; + private Dictionary m_factories; + private double m_minimumProcessingInterval; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/Aggregators.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/Aggregators.cs new file mode 100644 index 00000000..bb8a193b --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/Aggregators.cs @@ -0,0 +1,173 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; + +namespace Opc.Ua.Server +{ + /// + /// Creates a new instance of an aggregate factory. + /// + public delegate IAggregateCalculator AggregatorFactory( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration); + + /// + /// The set of built-in aggregate factories. + /// + public static class Aggregators + { + /// + /// Stores the mapping for a aggregate id to the calculator. + /// + private class FactoryMapping + { + public NodeId AggregateId { get; set; } + public QualifiedName AggregateName { get; set; } + public Type Calculator { get; set; } + } + + /// + /// Mapping for all of the standard aggregates. + /// + private static FactoryMapping[] s_Mappings = new FactoryMapping[] + { + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Interpolative, AggregateName = BrowseNames.AggregateFunction_Interpolative, Calculator = typeof(AggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Average, AggregateName = BrowseNames.AggregateFunction_Average, Calculator = typeof(AverageAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_TimeAverage, AggregateName = BrowseNames.AggregateFunction_TimeAverage, Calculator = typeof(AverageAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_TimeAverage2, AggregateName = BrowseNames.AggregateFunction_TimeAverage2, Calculator = typeof(AverageAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Total, AggregateName = BrowseNames.AggregateFunction_Total, Calculator = typeof(AverageAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Total2, AggregateName = BrowseNames.AggregateFunction_Total2, Calculator = typeof(AverageAggregateCalculator) }, + + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Minimum, AggregateName = BrowseNames.AggregateFunction_Minimum, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Maximum, AggregateName = BrowseNames.AggregateFunction_Maximum, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_MinimumActualTime, AggregateName = BrowseNames.AggregateFunction_MinimumActualTime, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_MaximumActualTime, AggregateName = BrowseNames.AggregateFunction_MaximumActualTime, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Range, AggregateName = BrowseNames.AggregateFunction_Range, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Minimum2, AggregateName = BrowseNames.AggregateFunction_Minimum2, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Maximum2, AggregateName = BrowseNames.AggregateFunction_Maximum2, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_MinimumActualTime2, AggregateName = BrowseNames.AggregateFunction_MinimumActualTime2, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_MaximumActualTime2, AggregateName = BrowseNames.AggregateFunction_MaximumActualTime2, Calculator = typeof(MinMaxAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Range2, AggregateName = BrowseNames.AggregateFunction_Range2, Calculator = typeof(MinMaxAggregateCalculator) }, + + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Count, AggregateName = BrowseNames.AggregateFunction_Count, Calculator = typeof(CountAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_AnnotationCount, AggregateName = BrowseNames.AggregateFunction_AnnotationCount, Calculator = typeof(CountAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_DurationInStateZero, AggregateName = BrowseNames.AggregateFunction_DurationInStateZero, Calculator = typeof(CountAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_DurationInStateNonZero, AggregateName = BrowseNames.AggregateFunction_DurationInStateNonZero, Calculator = typeof(CountAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_NumberOfTransitions, AggregateName = BrowseNames.AggregateFunction_NumberOfTransitions, Calculator = typeof(CountAggregateCalculator) }, + + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Start, AggregateName = BrowseNames.AggregateFunction_Start, Calculator = typeof(StartEndAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_End, AggregateName = BrowseNames.AggregateFunction_End, Calculator = typeof(StartEndAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_Delta, AggregateName = BrowseNames.AggregateFunction_Delta, Calculator = typeof(StartEndAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_StartBound, AggregateName = BrowseNames.AggregateFunction_StartBound, Calculator = typeof(StartEndAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_EndBound, AggregateName = BrowseNames.AggregateFunction_EndBound, Calculator = typeof(StartEndAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_DeltaBounds, AggregateName = BrowseNames.AggregateFunction_DeltaBounds, Calculator = typeof(StartEndAggregateCalculator) }, + + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_DurationGood, AggregateName = BrowseNames.AggregateFunction_DurationGood, Calculator = typeof(StatusAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_DurationBad, AggregateName = BrowseNames.AggregateFunction_DurationBad, Calculator = typeof(StatusAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_PercentGood, AggregateName = BrowseNames.AggregateFunction_PercentGood, Calculator = typeof(StatusAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_PercentBad, AggregateName = BrowseNames.AggregateFunction_PercentBad, Calculator = typeof(StatusAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_WorstQuality, AggregateName = BrowseNames.AggregateFunction_WorstQuality, Calculator = typeof(StatusAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_WorstQuality2, AggregateName = BrowseNames.AggregateFunction_WorstQuality2, Calculator = typeof(StatusAggregateCalculator) }, + + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_StandardDeviationPopulation, AggregateName = BrowseNames.AggregateFunction_StandardDeviationPopulation, Calculator = typeof(StdDevAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_VariancePopulation, AggregateName = BrowseNames.AggregateFunction_VariancePopulation, Calculator = typeof(StdDevAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_StandardDeviationSample, AggregateName = BrowseNames.AggregateFunction_StandardDeviationSample, Calculator = typeof(StdDevAggregateCalculator) }, + new FactoryMapping() { AggregateId = ObjectIds.AggregateFunction_VarianceSample, AggregateName = BrowseNames.AggregateFunction_VarianceSample, Calculator = typeof(StdDevAggregateCalculator) }, + }; + + /// + /// Returns the name for a standard aggregates. + /// + public static QualifiedName GetNameForStandardAggregate(NodeId aggregateId) + { + for (int ii = 0; ii < s_Mappings.Length; ii++) + { + if (s_Mappings[ii].AggregateId == aggregateId) + { + return s_Mappings[ii].AggregateName; + } + } + + return null; + } + + /// + /// Returns the id for a standard aggregates. + /// + public static NodeId GetIdForStandardAggregate(QualifiedName aggregateName) + { + for (int ii = 0; ii < s_Mappings.Length; ii++) + { + if (s_Mappings[ii].AggregateName == aggregateName) + { + return s_Mappings[ii].AggregateId; + } + } + + return null; + } + + /// + /// Creates a calculator for one of the standard aggregates. + /// + public static IAggregateCalculator CreateStandardCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + { + for (int ii = 0; ii < s_Mappings.Length; ii++) + { + if (s_Mappings[ii].AggregateId == aggregateId) + { + return (IAggregateCalculator)Activator.CreateInstance( + s_Mappings[ii].Calculator, + aggregateId, + startTime, + endTime, + processingInterval, + stepped, + configuration); + } + } + + return null; + } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AverageAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AverageAggregateCalculator.cs new file mode 100644 index 00000000..a4a4557a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/AverageAggregateCalculator.cs @@ -0,0 +1,253 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class AverageAggregateCalculator : AggregateCalculator + { + #region Constructors + /// + /// Initializes the aggregate calculator. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public AverageAggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + : + base(aggregateId, startTime, endTime, processingInterval, stepped, configuration) + { + SetPartialBit = aggregateId != Opc.Ua.ObjectIds.AggregateFunction_Average; + } + #endregion + + #region Overridden Methods + /// + /// Computes the value for the timeslice. + /// + protected override DataValue ComputeValue(TimeSlice slice) + { + uint? id = AggregateId.Identifier as uint?; + + if (id != null) + { + switch (id.Value) + { + case Objects.AggregateFunction_Average: + { + return ComputeAverage(slice); + } + + case Objects.AggregateFunction_TimeAverage: + { + return ComputeTimeAverage(slice, false, 1); + } + + case Objects.AggregateFunction_Total: + { + return ComputeTimeAverage(slice, false, 2); + } + + case Objects.AggregateFunction_TimeAverage2: + { + return ComputeTimeAverage(slice, true, 1); + } + + case Objects.AggregateFunction_Total2: + { + return ComputeTimeAverage(slice, true, 2); + } + } + } + + return base.ComputeValue(slice); + } + #endregion + + #region Protected Methods + /// + /// Calculates the RegSlope, RegConst and RegStdDev aggregates for the timeslice. + /// + protected DataValue ComputeAverage(TimeSlice slice) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // calculate total and count. + int count = 0; + double total = 0; + + for (int ii = 0; ii < values.Count; ii++) + { + if (StatusCode.IsGood(values[ii].StatusCode)) + { + try + { + double sample = CastToDouble(values[ii]); + total += sample; + count++; + } + catch + { + // ignore conversion errors. + } + } + } + + // check for empty slice. + if (count == 0) + { + return GetNoDataValue(slice); + } + + // select the result. + double result = total/count; + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(result, TypeInfo.Scalars.Double); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + value.StatusCode = GetValueBasedStatusCode(slice, values, value.StatusCode); + + // return result. + return value; + } + + /// + /// Calculates the StdDev, Variance, StdDev2 and Variance2 aggregates for the timeslice. + /// + protected DataValue ComputeTimeAverage(TimeSlice slice, bool useSimpleBounds, int valueType) + { + // get the values in the slice. + List values = null; + + if (useSimpleBounds) + { + values = GetValuesWithSimpleBounds(slice); + } + else + { + values = GetValuesWithInterpolatedBounds(slice); + } + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // get the regions. + List regions = GetRegionsInValueSet(values, !useSimpleBounds, Stepped); + + double total = 0; + double totalDuration = 0; + bool nonGoodRegionsExists = false; + + for (int ii = 0; ii < regions.Count; ii++) + { + double duration = regions[ii].Duration/1000.0; + + if (StatusCode.IsNotBad(regions[ii].StatusCode)) + { + total += (regions[ii].StartValue + regions[ii].EndValue) * duration / 2; + totalDuration += duration; + } + + if (StatusCode.IsNotGood(regions[ii].StatusCode)) + { + nonGoodRegionsExists = true; + } + } + + // check if no good data. + if (totalDuration == 0) + { + return GetNoDataValue(slice); + } + + // select the result. + double result = 0; + + switch (valueType) + { + case 1: { result = total/totalDuration; break; } + case 2: { result = total; break; } + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(result, TypeInfo.Scalars.Double); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + + if (useSimpleBounds) + { + value.StatusCode = GetTimeBasedStatusCode(regions, value.StatusCode); + } + else + { + value.StatusCode = StatusCodes.Good; + + if (nonGoodRegionsExists) + { + value.StatusCode = StatusCodes.UncertainDataSubNormal; + } + } + + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // return result. + return value; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/CountAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/CountAggregateCalculator.cs new file mode 100644 index 00000000..f148d374 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/CountAggregateCalculator.cs @@ -0,0 +1,310 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class CountAggregateCalculator : AggregateCalculator + { + #region Constructors + /// + /// Initializes the aggregate calculator. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public CountAggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + : + base(aggregateId, startTime, endTime, processingInterval, stepped, configuration) + { + SetPartialBit = true; + } + #endregion + + #region Overridden Methods + /// + /// Computes the value for the timeslice. + /// + protected override DataValue ComputeValue(TimeSlice slice) + { + uint? id = AggregateId.Identifier as uint?; + + if (id != null) + { + switch (id.Value) + { + case Objects.AggregateFunction_Count: + { + return ComputeCount(slice); + } + + case Objects.AggregateFunction_AnnotationCount: + { + return ComputeAnnotationCount(slice); + } + + case Objects.AggregateFunction_DurationInStateZero: + { + return ComputeDurationInState(slice, false); + } + + case Objects.AggregateFunction_DurationInStateNonZero: + { + return ComputeDurationInState(slice, true); + } + + case Objects.AggregateFunction_NumberOfTransitions: + { + return ComputeNumberOfTransitions(slice); + } + } + } + + return base.ComputeValue(slice); + } + #endregion + + #region Protected Methods + /// + /// Calculates the Count aggregate for the timeslice. + /// + protected DataValue ComputeCount(TimeSlice slice) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null) + { + return GetNoDataValue(slice); + } + + // count the values. + int count = 0; + + for (int ii = 0; ii < values.Count; ii++) + { + if (StatusCode.IsGood(values[ii].StatusCode)) + { + count++; + } + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(count, TypeInfo.Scalars.Int32); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + value.StatusCode = GetValueBasedStatusCode(slice, values, value.StatusCode); + + // return result. + return value; + } + + /// + /// Calculates the AnnotationCount aggregate for the timeslice. + /// + protected DataValue ComputeAnnotationCount(TimeSlice slice) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null) + { + return GetNoDataValue(slice); + } + + // count the values. + int count = 0; + + for (int ii = 0; ii < values.Count; ii++) + { + count++; + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(count, TypeInfo.Scalars.Int32); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // return result. + return value; + } + + /// + /// Calculates the DurationInStateZero and DurationInStateNonZero aggregates for the timeslice. + /// + protected DataValue ComputeDurationInState(TimeSlice slice, bool isNonZero) + { + // get the values in the slice. + List values = GetValuesWithSimpleBounds(slice); + + // check for empty slice. + if (values == null) + { + return GetNoDataValue(slice); + } + + // get the regions. + List regions = GetRegionsInValueSet(values, false, true); + + double duration = 0; + + for (int ii = 0; ii < regions.Count; ii++) + { + if (StatusCode.IsNotGood(regions[ii].StatusCode)) + { + continue; + } + + if (isNonZero) + { + if (regions[ii].StartValue != 0) + { + duration += regions[ii].Duration; + } + } + else + { + if (regions[ii].StartValue == 0) + { + duration += regions[ii].Duration; + } + } + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(duration, TypeInfo.Scalars.Double); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + value.StatusCode = GetTimeBasedStatusCode(regions, value.StatusCode); + + // return result. + return value; + } + + /// + /// Calculates the Count aggregate for the timeslice. + /// + protected DataValue ComputeNumberOfTransitions(TimeSlice slice) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null) + { + return GetNoDataValue(slice); + } + + // determine whether a transition occurs at the StartTime + double lastValue = Double.NaN; + + if (slice.EarlyBound != null) + { + if (StatusCode.IsGood(slice.EarlyBound.Value.StatusCode)) + { + try + { + lastValue = CastToDouble(slice.EarlyBound.Value); + } + catch (Exception) + { + lastValue = Double.NaN; + } + } + } + + // count the transitions. + int count = 0; + + for (int ii = 0; ii < values.Count; ii++) + { + if (!IsGood(values[ii])) + { + continue; + } + + double nextValue = 0; + + try + { + nextValue = CastToDouble(values[ii]); + } + catch (Exception) + { + continue; + } + + if (!Double.IsNaN(lastValue)) + { + if (lastValue != nextValue) + { + count++; + } + } + + lastValue = nextValue; + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(count, TypeInfo.Scalars.Int32); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + value.StatusCode = GetValueBasedStatusCode(slice, values, value.StatusCode); + + // return result. + return value; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/IAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/IAggregateCalculator.cs new file mode 100644 index 00000000..a836e981 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/IAggregateCalculator.cs @@ -0,0 +1,67 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// An interface that captures the original active API of the AggregateCalculator class + /// required to integrate with the subscription code. + /// + public interface IAggregateCalculator + { + /// + /// The aggregate function applied by the calculator. + /// + NodeId AggregateId { get; } + + /// + /// Pushes the next raw value into the stream. + /// + /// The data value to append to the stream. + /// True if successful, false if the source timestamp has been superceeded by values already in the stream. + bool QueueRawValue(DataValue value); + + /// + /// Returns the next processed value. + /// + /// If true a partial interval should be processed. + /// The processed value. Null if nothing available and returnPartial is false. + DataValue GetProcessedValue(bool returnPartial); + + /// + /// Returns true if the specified time is later than the end of the current interval. + /// + /// Return true if time flows forward and the time is later than the end time. + bool HasEndTimePassed(DateTime currentTime); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/MinMaxAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/MinMaxAggregateCalculator.cs new file mode 100644 index 00000000..cd60e727 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/MinMaxAggregateCalculator.cs @@ -0,0 +1,527 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class MinMaxAggregateCalculator : AggregateCalculator + { + #region Constructors + /// + /// Initializes the aggregate calculator. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public MinMaxAggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + : + base(aggregateId, startTime, endTime, processingInterval, stepped, configuration) + { + SetPartialBit = true; + } + #endregion + + #region Overridden Methods + /// + /// Computes the value for the timeslice. + /// + protected override DataValue ComputeValue(TimeSlice slice) + { + uint? id = AggregateId.Identifier as uint?; + + if (id != null) + { + switch (id.Value) + { + case Objects.AggregateFunction_Minimum: + { + return ComputeMinMax(slice, 1, false); + } + + case Objects.AggregateFunction_MinimumActualTime: + { + return ComputeMinMax(slice, 1, true); + } + + case Objects.AggregateFunction_Maximum: + { + return ComputeMinMax(slice, 2, false); + } + + case Objects.AggregateFunction_MaximumActualTime: + { + return ComputeMinMax(slice, 2, true); + } + + case Objects.AggregateFunction_Range: + { + return ComputeMinMax(slice, 3, false); + } + + case Objects.AggregateFunction_Minimum2: + { + return ComputeMinMax2(slice, 1, false); + } + + case Objects.AggregateFunction_MinimumActualTime2: + { + return ComputeMinMax2(slice, 1, true); + } + + case Objects.AggregateFunction_Maximum2: + { + return ComputeMinMax2(slice, 2, false); + } + + case Objects.AggregateFunction_MaximumActualTime2: + { + return ComputeMinMax2(slice, 2, true); + } + + case Objects.AggregateFunction_Range2: + { + return ComputeMinMax2(slice, 3, false); + } + } + } + + return base.ComputeValue(slice); + } + #endregion + + #region Protected Methods + /// + /// Calculate the Minimum, Maximum, MinimumActualTime and MaximumActualTime aggregates for the timeslice. + /// + protected DataValue ComputeMinMax(TimeSlice slice, int valueType, bool returnActualTime) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + double minimumGoodValue = Double.MaxValue; + double minimumUncertainValue = Double.MaxValue; + double maximumGoodValue = Double.MinValue; + double maximumUncertainValue = Double.MinValue; + + DateTime minimumGoodTimestamp = DateTime.MinValue; + DateTime maximumGoodTimestamp = DateTime.MinValue; + + TypeInfo minimumOriginalType = null; + TypeInfo maximumOriginalType = null; + + bool badValuesExist = false; + bool duplicatesMinimumsExist = false; + bool duplicatesMaximumsExist = false; + bool goodValueExists = false; + + for (int ii = 0; ii < values.Count; ii++) + { + double currentValue = 0; + DateTime currentTime = values[ii].SourceTimestamp; + StatusCode currentStatus = values[ii].StatusCode; + + // ignore bad values. + if (!IsGood(values[ii])) + { + badValuesExist = true; + continue; + } + + // convert to double. + try + { + currentValue = CastToDouble(values[ii]); + } + catch (Exception) + { + badValuesExist = true; + continue; + } + + // check for uncertain. + if (StatusCode.IsUncertain(currentStatus)) + { + if (minimumUncertainValue > currentValue) + { + minimumUncertainValue = currentValue; + } + + if (maximumUncertainValue < currentValue) + { + maximumUncertainValue = currentValue; + } + + continue; + } + + // check for new minimum. + if (minimumGoodValue > currentValue) + { + minimumGoodValue = currentValue; + minimumGoodTimestamp = currentTime; + minimumOriginalType = values[ii].WrappedValue.TypeInfo; + duplicatesMinimumsExist = false; + goodValueExists = true; + } + + // check for duplicate minimums. + else if (minimumGoodValue == currentValue) + { + duplicatesMinimumsExist = true; + } + + // check for new maximum. + if (maximumGoodValue < currentValue) + { + maximumGoodValue = currentValue; + maximumGoodTimestamp = currentTime; + maximumOriginalType = values[ii].WrappedValue.TypeInfo; + duplicatesMaximumsExist = false; + goodValueExists = true; + } + + // check for duplicate maximums. + else if (maximumGoodValue == currentValue) + { + duplicatesMaximumsExist = true; + } + } + + // check if at least on good value exists. + if (!goodValueExists) + { + return GetNoDataValue(slice); + } + + // set the status code. + StatusCode statusCode = StatusCodes.Good; + + // uncertain if any bad values exist. + if (badValuesExist) + { + statusCode = StatusCodes.UncertainDataSubNormal; + } + + // determine the calculated value to return. + object processedValue = null; + TypeInfo processedType = null; + DateTime processedTimestamp = DateTime.MinValue; + bool uncertainValueExists = false; + bool duplicatesExist = false; + + if (valueType == 1) + { + processedValue = minimumGoodValue; + processedTimestamp = minimumGoodTimestamp; + processedType = minimumOriginalType; + uncertainValueExists = minimumGoodValue > minimumUncertainValue; + duplicatesExist = duplicatesMinimumsExist; + } + + else if (valueType == 2) + { + processedValue = maximumGoodValue; + processedTimestamp = maximumGoodTimestamp; + processedType = maximumOriginalType; + uncertainValueExists = maximumGoodValue < maximumUncertainValue; + duplicatesExist = duplicatesMaximumsExist; + } + + else if (valueType == 3) + { + processedValue = Math.Abs(maximumGoodValue - minimumGoodValue); + processedType = TypeInfo.Scalars.Double; + uncertainValueExists = maximumGoodValue < maximumUncertainValue || minimumGoodValue > minimumUncertainValue; + } + + // set calculated if not returning actual time and value is not at the start time. + if (!returnActualTime && processedTimestamp != slice.StartTime) + { + statusCode = statusCode.SetAggregateBits(AggregateBits.Calculated); + } + + // set the multiple values flags. + if (duplicatesExist) + { + statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.MultipleValues); + } + + // convert back to original datatype. + if (processedType != null && processedType.BuiltInType != BuiltInType.Double) + { + processedValue = TypeInfo.Cast(processedValue, TypeInfo.Scalars.Double, processedType.BuiltInType); + } + else + { + processedType = TypeInfo.Scalars.Double; + } + + // create processed value. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(processedValue, processedType); + value.StatusCode = statusCode; + + if (returnActualTime) + { + value.SourceTimestamp = processedTimestamp; + value.ServerTimestamp = processedTimestamp; + } + else + { + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + } + + return value; + } + + /// + /// Calculate the Minimum2, Maximum2, MinimumActualTime2, MaximumActualTime2 and Range2 aggregates for the timeslice. + /// + protected DataValue ComputeMinMax2(TimeSlice slice, int valueType, bool returnActualTime) + { + // get the values in the slice. + List values = GetValuesWithSimpleBounds(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + double minimumGoodValue = Double.MaxValue; + double maximumGoodValue = Double.MinValue; + + DateTime minimumGoodTimestamp = DateTime.MinValue; + DateTime maximumGoodTimestamp = DateTime.MinValue; + + StatusCode minimumGoodStatusCode = StatusCodes.Good; + StatusCode maximumGoodStatusCode = StatusCodes.Good; + + TypeInfo minimumOriginalType = null; + TypeInfo maximumOriginalType = null; + + bool duplicatesMinimumsExist = false; + bool duplicatesMaximumsExist = false; + bool goodValueExists = false; + + for (int ii = 0; ii < values.Count; ii++) + { + double currentValue = 0; + DateTime currentTime = values[ii].SourceTimestamp; + StatusCode currentStatus = values[ii].StatusCode; + + // ignore bad values (as determined by the TreatUncertainAsBad parameter). + if (!IsGood(values[ii])) + { + continue; + } + + // convert to double. + try + { + currentValue = CastToDouble(values[ii]); + } + catch (Exception) + { + continue; + } + + // skip endpoint if stepped. + if (currentTime == slice.EndTime) + { + if (Stepped) + { + break; + } + } + + // check for new minimum. + if (minimumGoodValue > currentValue) + { + minimumGoodValue = currentValue; + minimumGoodTimestamp = currentTime; + minimumGoodStatusCode = currentStatus; + minimumOriginalType = values[ii].WrappedValue.TypeInfo; + duplicatesMinimumsExist = false; + goodValueExists = true; + } + + // check for duplicate minimums. + else if (minimumGoodValue == currentValue) + { + duplicatesMinimumsExist = true; + } + + // check for new maximum. + if (maximumGoodValue < currentValue) + { + maximumGoodValue = currentValue; + maximumGoodTimestamp = currentTime; + maximumGoodStatusCode = currentStatus; + maximumOriginalType = values[ii].WrappedValue.TypeInfo; + duplicatesMaximumsExist = false; + goodValueExists = true; + } + + // check for duplicate maximums. + else if (maximumGoodValue == currentValue) + { + duplicatesMaximumsExist = true; + } + } + + // check if at least on good value exists. + if (!goodValueExists) + { + return GetNoDataValue(slice); + } + + // determine the calculated value to return. + object processedValue = null; + TypeInfo processedType = null; + DateTime processedTimestamp = DateTime.MinValue; + StatusCode processedStatusCode = StatusCodes.Good; + bool duplicatesExist = false; + + if (valueType == 1) + { + processedValue = minimumGoodValue; + processedTimestamp = minimumGoodTimestamp; + processedStatusCode = minimumGoodStatusCode; + processedType = minimumOriginalType; + duplicatesExist = duplicatesMinimumsExist; + } + + else if (valueType == 2) + { + processedValue = maximumGoodValue; + processedTimestamp = maximumGoodTimestamp; + processedStatusCode = maximumGoodStatusCode; + processedType = maximumOriginalType; + duplicatesExist = duplicatesMaximumsExist; + } + + else if (valueType == 3) + { + processedValue = Math.Abs(maximumGoodValue - minimumGoodValue); + processedType = TypeInfo.Scalars.Double; + } + + // set the status code. + StatusCode statusCode = processedStatusCode; + + // set calculated if not returning actual time and value is not at the start time. + if (!returnActualTime && processedTimestamp != slice.StartTime && (statusCode.AggregateBits & AggregateBits.Interpolated) == 0) + { + statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.Calculated); + } + + // set the multiple values flags. + if (duplicatesExist) + { + statusCode = statusCode.SetAggregateBits(statusCode.AggregateBits | AggregateBits.MultipleValues); + } + + // convert back to original datatype. + if (processedType != null && processedType.BuiltInType != BuiltInType.Double) + { + processedValue = TypeInfo.Cast(processedValue, TypeInfo.Scalars.Double, processedType.BuiltInType); + } + else + { + processedType = TypeInfo.Scalars.Double; + } + + // create processed value. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(processedValue, processedType); + value.StatusCode = GetTimeBasedStatusCode(slice, values, statusCode); + + // zero value if status is bad. + if (StatusCode.IsBad(value.StatusCode)) + { + value.WrappedValue = Variant.Null; + } + + if (returnActualTime) + { + // calculate effective time if end bound is used. + if (TimeFlowsBackward) + { + if (processedTimestamp == slice.StartTime) + { + processedTimestamp = processedTimestamp.AddMilliseconds(+1); + value.StatusCode = value.StatusCode.SetAggregateBits(value.StatusCode.AggregateBits | AggregateBits.Interpolated); + } + } + else + { + if (processedTimestamp == slice.EndTime) + { + processedTimestamp = processedTimestamp.AddMilliseconds(-1); + value.StatusCode = value.StatusCode.SetAggregateBits(value.StatusCode.AggregateBits | AggregateBits.Interpolated); + } + } + + value.SourceTimestamp = processedTimestamp; + value.ServerTimestamp = processedTimestamp; + } + else + { + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + } + + return value; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/ServerAggregateFilter.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/ServerAggregateFilter.cs new file mode 100644 index 00000000..396fa5d8 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/ServerAggregateFilter.cs @@ -0,0 +1,47 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; + +namespace Opc.Ua.Server +{ + /// + /// A aggregate filter with additional state information. + /// + public class ServerAggregateFilter : AggregateFilter + { + /// + /// Whether the variable requires stepped interpolation. + /// + public bool Stepped { get; set; } + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StartEndAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StartEndAggregateCalculator.cs new file mode 100644 index 00000000..ae6b665c --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StartEndAggregateCalculator.cs @@ -0,0 +1,370 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class StartEndAggregateCalculator : AggregateCalculator + { + #region Constructors + /// + /// Initializes the aggregate calculator. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public StartEndAggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + : + base(aggregateId, startTime, endTime, processingInterval, stepped, configuration) + { + SetPartialBit = true; + } + #endregion + + #region Overridden Methods + /// + /// Computes the value for the timeslice. + /// + protected override DataValue ComputeValue(TimeSlice slice) + { + uint? id = AggregateId.Identifier as uint?; + + if (id != null) + { + switch (id.Value) + { + case Objects.AggregateFunction_Start: + { + return ComputeStartEnd(slice, false); + } + + case Objects.AggregateFunction_End: + { + return ComputeStartEnd(slice, true); + } + + case Objects.AggregateFunction_Delta: + { + return ComputeDelta(slice); + } + + case Objects.AggregateFunction_StartBound: + { + return ComputeStartEnd2(slice, false); + } + + case Objects.AggregateFunction_EndBound: + { + return ComputeStartEnd2(slice, true); + } + + case Objects.AggregateFunction_DeltaBounds: + { + return ComputeDelta2(slice); + } + } + } + + return base.ComputeValue(slice); + } + #endregion + + #region Protected Methods + /// + /// Calculate the Start and End aggregates for the timeslice. + /// + protected DataValue ComputeStartEnd(TimeSlice slice, bool returnEnd) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // return start value. + if (!returnEnd) + { + return values[0]; + } + + // return end value. + else + { + return values[values.Count - 1]; + } + } + + /// + /// Calculates the Delta aggregate for the timeslice. + /// + protected DataValue ComputeDelta(TimeSlice slice) + { + // get the values in the slice. + List values = GetValues(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // find start value. + DataValue start = null; + double startValue = 0; + TypeInfo originalType = null; + bool badDataSkipped = false; + + for (int ii = 0; ii < values.Count; ii++) + { + start = values[ii]; + + if (StatusCode.IsGood(start.StatusCode)) + { + try + { + startValue = CastToDouble(start); + originalType = start.WrappedValue.TypeInfo; + break; + } + catch (Exception) + { + startValue = Double.NaN; + } + } + + start = null; + badDataSkipped = true; + } + + // find end value. + DataValue end = null; + double endValue = 0; + + for (int ii = values.Count - 1; ii >= 0; ii--) + { + end = values[ii]; + + if (StatusCode.IsGood(end.StatusCode)) + { + try + { + endValue = CastToDouble(end); + break; + } + catch (Exception) + { + endValue = Double.NaN; + } + + break; + } + + end = null; + badDataSkipped = true; + } + + // check if no good data. + if (Double.IsNaN(startValue) || Double.IsNaN(endValue)) + { + return GetNoDataValue(slice); + } + + DataValue value = new DataValue(); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + + // set status code. + if (badDataSkipped) + { + value.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // calculate delta. + double delta = endValue - startValue; + + if (originalType != null && originalType.BuiltInType != BuiltInType.Double) + { + object delta2 = TypeInfo.Cast(delta, TypeInfo.Scalars.Double, originalType.BuiltInType); + value.WrappedValue = new Variant(delta2, originalType); + } + else + { + value.WrappedValue = new Variant(delta, TypeInfo.Scalars.Double); + } + + // return result. + return value; + } + + /// + /// Calculate the Start2 and End2 aggregates for the timeslice. + /// + protected DataValue ComputeStartEnd2(TimeSlice slice, bool returnEnd) + { + // get the values in the slice. + List values = GetValuesWithSimpleBounds(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + DataValue value = null; + + // return start bound. + if ((!returnEnd && !TimeFlowsBackward) || (returnEnd && TimeFlowsBackward)) + { + value = values[0]; + } + + // return end bound. + else + { + value = values[values.Count - 1]; + } + + if (returnEnd) + { + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + + if (StatusCode.IsNotBad(value.StatusCode)) + { + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + } + } + + return value; + } + + /// + /// Calculates the Delta2 aggregate for the timeslice. + /// + protected DataValue ComputeDelta2(TimeSlice slice) + { + // get the values in the slice. + List values = GetValuesWithSimpleBounds(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + DataValue start = values[0]; + DataValue end = values[values.Count-1]; + + // check for bad bounds. + if (StatusCode.IsBad(start.StatusCode) || StatusCode.IsBad(end.StatusCode)) + { + return GetNoDataValue(slice); + } + + // convert to doubles. + double startValue = 0; + TypeInfo originalType = null; + + try + { + startValue = CastToDouble(start); + originalType = start.WrappedValue.TypeInfo; + } + catch (Exception) + { + startValue = Double.NaN; + } + + double endValue = 0; + + try + { + endValue = CastToDouble(end); + } + catch (Exception) + { + endValue = Double.NaN; + } + + // check for bad bounds. + if (Double.IsNaN(startValue) || Double.IsNaN(endValue)) + { + return GetNoDataValue(slice); + } + + DataValue value = new DataValue(); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + + if (StatusCode.IsNotGood(start.StatusCode) || StatusCode.IsNotGood(end.StatusCode)) + { + value.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // calculate delta. + double delta = endValue - startValue; + + if (originalType != null && originalType.BuiltInType != BuiltInType.Double) + { + object delta2 = TypeInfo.Cast(delta, TypeInfo.Scalars.Double, originalType.BuiltInType); + value.WrappedValue = new Variant(delta2, originalType); + } + else + { + value.WrappedValue = new Variant(delta, TypeInfo.Scalars.Double); + } + + // return result. + return value; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StatusAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StatusAggregateCalculator.cs new file mode 100644 index 00000000..e59d1928 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StatusAggregateCalculator.cs @@ -0,0 +1,246 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class StatusAggregateCalculator : AggregateCalculator + { + #region Constructors + /// + /// Initializes the aggregate calculator. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public StatusAggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + : + base(aggregateId, startTime, endTime, processingInterval, stepped, configuration) + { + SetPartialBit = true; + } + #endregion + + #region Overridden Methods + /// + /// Computes the value for the timeslice. + /// + protected override DataValue ComputeValue(TimeSlice slice) + { + uint? id = AggregateId.Identifier as uint?; + + if (id != null) + { + switch (id.Value) + { + case Objects.AggregateFunction_DurationGood: + { + return ComputeDurationGoodBad(slice, false, false); + } + + case Objects.AggregateFunction_DurationBad: + { + return ComputeDurationGoodBad(slice, true, false); + } + + case Objects.AggregateFunction_PercentGood: + { + return ComputeDurationGoodBad(slice, false, true); + } + + case Objects.AggregateFunction_PercentBad: + { + return ComputeDurationGoodBad(slice, true, true); + } + + case Objects.AggregateFunction_WorstQuality: + { + return ComputeWorstQuality(slice, false); + } + + case Objects.AggregateFunction_WorstQuality2: + { + return ComputeWorstQuality(slice, true); + } + } + } + + return base.ComputeValue(slice); + } + #endregion + + #region Protected Methods + /// + /// Calculates the DurationGood and DurationBad aggregates for the timeslice. + /// + protected DataValue ComputeDurationGoodBad(TimeSlice slice, bool isBad, bool usePercent) + { + // get the values in the slice. + List values = GetValuesWithSimpleBounds(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // get the regions. + List regions = GetRegionsInValueSet(values, false, true); + + double duration = 0; + double total = 0; + + for (int ii = 0; ii < regions.Count; ii++) + { + total += regions[ii].Duration; + + if (isBad) + { + if (StatusCode.IsBad(regions[ii].StatusCode)) + { + duration += regions[ii].Duration; + } + } + else + { + if (StatusCode.IsGood(regions[ii].StatusCode)) + { + duration += regions[ii].Duration; + } + } + } + + if (usePercent) + { + duration = (duration / total) * 100; + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(duration, TypeInfo.Scalars.Double); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // return result. + return value; + } + + /// + /// Calculates the DurationGood and DurationBad aggregates for the timeslice. + /// + protected DataValue ComputeWorstQuality(TimeSlice slice, bool includeBounds) + { + // get the values in the slice. + List values = null; + + if (!includeBounds) + { + values = GetValues(slice); + } + else + { + values = GetValuesWithSimpleBounds(slice); + } + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // get the regions. + List regions = GetRegionsInValueSet(values, false, true); + + StatusCode worstQuality = StatusCodes.Good; + int badQualityCount = 0; + int uncertainQualityCount = 0; + + for (int ii = 0; ii < values.Count; ii++) + { + StatusCode quality = values[ii].StatusCode; + + if (StatusCode.IsBad(quality)) + { + badQualityCount++; + + if (StatusCode.IsNotBad(worstQuality)) + { + worstQuality = quality.CodeBits; + } + + continue; + } + + if (StatusCode.IsUncertain(quality)) + { + uncertainQualityCount++; + + if (StatusCode.IsGood(worstQuality)) + { + worstQuality = quality.CodeBits; + } + + continue; + } + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(worstQuality, TypeInfo.Scalars.StatusCode); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + if ((StatusCode.IsBad(worstQuality) && badQualityCount > 1) || (StatusCode.IsUncertain(worstQuality) && uncertainQualityCount > 1)) + { + value.StatusCode = value.StatusCode.SetAggregateBits(value.StatusCode.AggregateBits | AggregateBits.MultipleValues); + } + + // return result. + return value; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StdDevAggregateCalculator.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StdDevAggregateCalculator.cs new file mode 100644 index 00000000..6eab4795 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Aggregates/StdDevAggregateCalculator.cs @@ -0,0 +1,328 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Calculates the value of an aggregate. + /// + public class StdDevAggregateCalculator : AggregateCalculator + { + #region Constructors + /// + /// Initializes the aggregate calculator. + /// + /// The aggregate function to apply. + /// The start time. + /// The end time. + /// The processing interval. + /// Whether to use stepped interpolation. + /// The aggregate configuration. + public StdDevAggregateCalculator( + NodeId aggregateId, + DateTime startTime, + DateTime endTime, + double processingInterval, + bool stepped, + AggregateConfiguration configuration) + : + base(aggregateId, startTime, endTime, processingInterval, stepped, configuration) + { + SetPartialBit = true; + } + #endregion + + #region Overridden Methods + /// + /// Computes the value for the timeslice. + /// + protected override DataValue ComputeValue(TimeSlice slice) + { + uint? id = AggregateId.Identifier as uint?; + + if (id != null) + { + switch (id.Value) + { + case Objects.AggregateFunction_StandardDeviationPopulation: + { + return ComputeStdDev(slice, false, 1); + } + + case Objects.AggregateFunction_StandardDeviationSample: + { + return ComputeStdDev(slice, false, 2); + } + + case Objects.AggregateFunction_VariancePopulation: + { + return ComputeStdDev(slice, true, 1); + } + + case Objects.AggregateFunction_VarianceSample: + { + return ComputeStdDev(slice, true, 2); + } + } + } + + return base.ComputeValue(slice); + } + #endregion + + #region Protected Methods + /// + /// Calculates the RegSlope, RegConst and RegStdDev aggregates for the timeslice. + /// + protected DataValue ComputeRegression(TimeSlice slice, int valueType) + { + // get the values in the slice. + List values = GetValuesWithSimpleBounds(slice); + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // get the regions. + List regions = GetRegionsInValueSet(values, false, true); + + List xData = new List(); + List yData = new List(); + + double duration = 0; + bool nonGoodDataExists = false; + + for (int ii = 0; ii < regions.Count; ii++) + { + if (StatusCode.IsGood(regions[ii].StatusCode)) + { + xData.Add(regions[ii].StartValue); + yData.Add(duration); + } + else + { + nonGoodDataExists = true; + } + + // normalize to seconds. + duration += regions[ii].Duration/1000.0; + } + + // check if no good data. + if (xData.Count == 0) + { + return GetNoDataValue(slice); + } + + // compute the regression parameters. + double regSlope = 0; + double regConst = 0; + double regStdDev = 0; + + if (xData.Count > 1) + { + double xAvg = 0; + double yAvg = 0; + double xxAgv = 0; + double xyAvg = 0; + + for (int ii = 0; ii < xData.Count; ii++) + { + xAvg += xData[ii]; + yAvg += yData[ii]; + xxAgv += xData[ii] * xData[ii]; + xyAvg += xData[ii] * yData[ii]; + } + + xAvg /= xData.Count; + yAvg /= xData.Count; + xxAgv /= xData.Count; + xyAvg /= xData.Count; + + regSlope = (xyAvg - xAvg * yAvg) / (xxAgv - xAvg * xAvg); + regConst = yAvg - regSlope * xAvg; + + List errors = new List(); + + double eAvg = 0; + + for (int ii = 0; ii < xData.Count; ii++) + { + double error = yData[ii] - regConst - regSlope * xData[ii]; + errors.Add(error); + eAvg += error; + } + + eAvg /= errors.Count; + + double variance = 0; + + for (int ii = 0; ii < errors.Count; ii++) + { + double error = errors[ii] - eAvg; + variance += error * error; + } + + variance /= errors.Count; + regStdDev = Math.Sqrt(variance); + } + + // select the result. + double result = 0; + + switch (valueType) + { + case 1: { result = regSlope; break; } + case 2: { result = regConst; break; } + case 3: { result = regStdDev; break; } + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(result, TypeInfo.Scalars.Double); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + + if (nonGoodDataExists) + { + value.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // return result. + return value; + } + + /// + /// Calculates the StdDev, Variance, StdDev2 and Variance2 aggregates for the timeslice. + /// + protected DataValue ComputeStdDev(TimeSlice slice, bool includeBounds, int valueType) + { + // get the values in the slice. + List values = null; + + if (includeBounds) + { + values = GetValuesWithSimpleBounds(slice); + } + else + { + values = GetValues(slice); + } + + // check for empty slice. + if (values == null || values.Count == 0) + { + return GetNoDataValue(slice); + } + + // get the regions. + List regions = GetRegionsInValueSet(values, false, true); + + List xData = new List(); + double average = 0; + bool nonGoodDataExists = false; + + for (int ii = 0; ii < regions.Count; ii++) + { + if (StatusCode.IsGood(regions[ii].StatusCode)) + { + xData.Add(regions[ii].StartValue); + average += regions[ii].StartValue; + } + else + { + nonGoodDataExists = true; + } + } + + // check if no good data. + if (xData.Count == 0) + { + return GetNoDataValue(slice); + } + + average /= xData.Count; + + // calculate variance. + double variance = 0; + + for (int ii = 0; ii < xData.Count; ii++) + { + double error = xData[ii] - average; + variance += error*error; + } + + // use the sample variance if bounds are included. + if (includeBounds) + { + variance /= (xData.Count + 1); + } + + // use the population variance if bounds are not included. + else + { + variance /= xData.Count; + } + + // select the result. + double result = 0; + + switch (valueType) + { + case 1: { result = Math.Sqrt(variance); break; } + case 2: { result = variance; break; } + } + + // set the timestamp and status. + DataValue value = new DataValue(); + value.WrappedValue = new Variant(result, TypeInfo.Scalars.Double); + value.SourceTimestamp = GetTimestamp(slice); + value.ServerTimestamp = GetTimestamp(slice); + + if (nonGoodDataExists) + { + value.StatusCode = StatusCodes.UncertainDataSubNormal; + } + + value.StatusCode = value.StatusCode.SetAggregateBits(AggregateBits.Calculated); + + // return result. + return value; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Configuration/ConfigurationNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Configuration/ConfigurationNodeManager.cs new file mode 100644 index 00000000..45bfc4ac --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Configuration/ConfigurationNodeManager.cs @@ -0,0 +1,770 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using System.Xml; + +namespace Opc.Ua.Server +{ + /// + /// Priviledged identity which can access the system configuration. + /// + public class SystemConfigurationIdentity : IUserIdentity + { + private IUserIdentity m_identity; + + /// + /// Create a user identity with the priviledge + /// to modify the system configuration. + /// + /// The user identity. + public SystemConfigurationIdentity(IUserIdentity identity) + { + m_identity = identity; + } + + #region IUserIdentity + /// + public string DisplayName + { + get { return m_identity.DisplayName; } + } + + /// + public string PolicyId + { + get { return m_identity.PolicyId; } + } + + /// + public UserTokenType TokenType + { + get { return m_identity.TokenType; } + } + + /// + public XmlQualifiedName IssuedTokenType + { + get { return m_identity.IssuedTokenType; } + } + + /// + public bool SupportsSignatures + { + get { return m_identity.SupportsSignatures; } + } + + /// + public NodeIdCollection GrantedRoleIds + { + get { return m_identity.GrantedRoleIds; } + set { m_identity.GrantedRoleIds = value; } + } + + /// + public UserIdentityToken GetIdentityToken() + { + return m_identity.GetIdentityToken(); + } + #endregion + } + + /// + /// The Server Configuration Node Manager. + /// + public class ConfigurationNodeManager : DiagnosticsNodeManager + { + #region Constructors + /// + /// Initializes the configuration and diagnostics manager. + /// + public ConfigurationNodeManager( + IServerInternal server, + ApplicationConfiguration configuration + ) + : + base(server, configuration) + { + m_rejectedStorePath = configuration.SecurityConfiguration.RejectedCertificateStore.StorePath; + m_certificateGroups = new List(); + m_configuration = configuration; + // TODO: configure cert groups in configuration + ServerCertificateGroup defaultApplicationGroup = new ServerCertificateGroup { + BrowseName = Opc.Ua.BrowseNames.DefaultApplicationGroup, + CertificateTypes = new NodeId[] { ObjectTypeIds.RsaSha256ApplicationCertificateType }, + ApplicationCertificate = configuration.SecurityConfiguration.ApplicationCertificate, + IssuerStorePath = configuration.SecurityConfiguration.TrustedIssuerCertificates.StorePath, + TrustedStorePath = configuration.SecurityConfiguration.TrustedPeerCertificates.StorePath + }; + m_certificateGroups.Add(defaultApplicationGroup); + } + #endregion + + #region INodeManager Members + /// + /// Replaces the generic node with a node specific to the model. + /// + protected override NodeState AddBehaviourToPredefinedNode( + ISystemContext context, + NodeState predefinedNode) + { + BaseObjectState passiveNode = predefinedNode as BaseObjectState; + + if (passiveNode != null) + { + NodeId typeId = passiveNode.TypeDefinitionId; + if (IsNodeIdInNamespace(typeId) && typeId.IdType == IdType.Numeric) + { + switch ((uint)typeId.Identifier) + { + + case ObjectTypes.ServerConfigurationType: + { + ServerConfigurationState activeNode = new ServerConfigurationState(passiveNode.Parent); + activeNode.Create(context, passiveNode); + + m_serverConfigurationNode = activeNode; + + // replace the node in the parent. + if (passiveNode.Parent != null) + { + passiveNode.Parent.ReplaceChild(context, activeNode); + } + return activeNode; + } + + case ObjectTypes.CertificateGroupFolderType: + { + CertificateGroupFolderState activeNode = new CertificateGroupFolderState(passiveNode.Parent); + activeNode.Create(context, passiveNode); + + // delete unsupported groups + if (m_certificateGroups.All(group => group.BrowseName != activeNode.DefaultHttpsGroup?.BrowseName)) + { + activeNode.DefaultHttpsGroup = null; + } + if (m_certificateGroups.All(group => group.BrowseName != activeNode.DefaultUserTokenGroup?.BrowseName)) + { + activeNode.DefaultUserTokenGroup = null; + } + if (m_certificateGroups.All(group => group.BrowseName != activeNode.DefaultApplicationGroup?.BrowseName)) + { + activeNode.DefaultApplicationGroup = null; + } + + // replace the node in the parent. + if (passiveNode.Parent != null) + { + passiveNode.Parent.ReplaceChild(context, activeNode); + } + return activeNode; + } + + case ObjectTypes.CertificateGroupType: + { + var result = m_certificateGroups.FirstOrDefault(group => group.BrowseName == passiveNode.BrowseName); + if (result != null) + { + CertificateGroupState activeNode = new CertificateGroupState(passiveNode.Parent); + activeNode.Create(context, passiveNode); + + result.NodeId = activeNode.NodeId; + result.Node = activeNode; + + // replace the node in the parent. + if (passiveNode.Parent != null) + { + passiveNode.Parent.ReplaceChild(context, activeNode); + } + return activeNode; + } + } + break; + } + } + } + return base.AddBehaviourToPredefinedNode(context, predefinedNode); + } + #endregion + + #region Public methods + /// + /// Creates the configuration node for the server. + /// + public void CreateServerConfiguration( + ServerSystemContext systemContext, + ApplicationConfiguration configuration) + { + // setup server configuration node + m_serverConfigurationNode.ServerCapabilities.Value = configuration.ServerConfiguration.ServerCapabilities.ToArray(); + m_serverConfigurationNode.ServerCapabilities.ValueRank = ValueRanks.OneDimension; + m_serverConfigurationNode.ServerCapabilities.ArrayDimensions = new ReadOnlyList(new List { 0 }); + m_serverConfigurationNode.SupportedPrivateKeyFormats.Value = configuration.ServerConfiguration.SupportedPrivateKeyFormats.ToArray(); + m_serverConfigurationNode.SupportedPrivateKeyFormats.ValueRank = ValueRanks.OneDimension; + m_serverConfigurationNode.SupportedPrivateKeyFormats.ArrayDimensions = new ReadOnlyList(new List { 0 }); + m_serverConfigurationNode.MaxTrustListSize.Value = (uint)configuration.ServerConfiguration.MaxTrustListSize; + m_serverConfigurationNode.MulticastDnsEnabled.Value = configuration.ServerConfiguration.MultiCastDnsEnabled; + + m_serverConfigurationNode.UpdateCertificate.OnCall = new UpdateCertificateMethodStateMethodCallHandler(UpdateCertificate); + m_serverConfigurationNode.CreateSigningRequest.OnCall = new CreateSigningRequestMethodStateMethodCallHandler(CreateSigningRequest); + m_serverConfigurationNode.ApplyChanges.OnCallMethod = new GenericMethodCalledEventHandler(ApplyChanges); + m_serverConfigurationNode.GetRejectedList.OnCall = new GetRejectedListMethodStateMethodCallHandler(GetRejectedList); + m_serverConfigurationNode.ClearChangeMasks(systemContext, true); + + // setup certificate group trust list handlers + foreach (var certGroup in m_certificateGroups) + { + certGroup.Node.CertificateTypes.Value = + certGroup.CertificateTypes; + certGroup.Node.TrustList.Handle = new TrustList( + certGroup.Node.TrustList, + certGroup.TrustedStorePath, + certGroup.IssuerStorePath, + new TrustList.SecureAccess(HasApplicationSecureAdminAccess), + new TrustList.SecureAccess(HasApplicationSecureAdminAccess) + ); + certGroup.Node.ClearChangeMasks(systemContext, true); + } + + // find ServerNamespaces node and subscribe to StateChanged + NamespacesState serverNamespacesNode = FindPredefinedNode(ObjectIds.Server_Namespaces, typeof(NamespacesState)) as NamespacesState; + + if (serverNamespacesNode != null) + { + serverNamespacesNode.StateChanged += ServerNamespacesChanged; + } + } + + /// + /// Gets and returns the node associated with the specified NamespaceUri + /// + /// + /// + public NamespaceMetadataState GetNamespaceMetadataState(string namespaceUri) + { + if (namespaceUri == null) + { + return null; + } + + if (m_namespaceMetadataStates.ContainsKey(namespaceUri)) + { + return m_namespaceMetadataStates[namespaceUri]; + } + + NamespaceMetadataState namespaceMetadataState = FindNamespaceMetadataState(namespaceUri); + + lock (Lock) + { + // remember the result for faster access. + m_namespaceMetadataStates[namespaceUri] = namespaceMetadataState; + } + + return namespaceMetadataState; + } + + /// + /// Gets or creates the node for the specified NamespaceUri. + /// + /// + /// + public NamespaceMetadataState CreateNamespaceMetadataState(string namespaceUri) + { + NamespaceMetadataState namespaceMetadataState = FindNamespaceMetadataState(namespaceUri); + + if (namespaceMetadataState == null) + { + // find ServerNamespaces node + NamespacesState serverNamespacesNode = FindPredefinedNode(ObjectIds.Server_Namespaces, typeof(NamespacesState)) as NamespacesState; + if (serverNamespacesNode == null) + { + Utils.Trace("Cannot create NamespaceMetadataState for namespace '{0}'.", namespaceUri); + return null; + } + + // create the NamespaceMetadata node + namespaceMetadataState = new NamespaceMetadataState(serverNamespacesNode); + namespaceMetadataState.BrowseName = new QualifiedName(namespaceUri, NamespaceIndex); + namespaceMetadataState.Create(SystemContext, null, namespaceMetadataState.BrowseName, null, true); + namespaceMetadataState.DisplayName = namespaceUri; + namespaceMetadataState.SymbolicName = namespaceUri; + namespaceMetadataState.NamespaceUri.Value = namespaceUri; + + // add node as child of ServerNamespaces and in predefined nodes + serverNamespacesNode.AddChild(namespaceMetadataState); + serverNamespacesNode.ClearChangeMasks(Server.DefaultSystemContext, true); + AddPredefinedNode(SystemContext, namespaceMetadataState); + } + + return namespaceMetadataState; + } + + /// + /// Determine if the impersonated user has admin access. + /// + /// + /// + /// + public void HasApplicationSecureAdminAccess(ISystemContext context) + { + OperationContext operationContext = (context as SystemContext)?.OperationContext as OperationContext; + if (operationContext != null) + { + if (operationContext.ChannelContext?.EndpointDescription?.SecurityMode != MessageSecurityMode.SignAndEncrypt) + { + throw new ServiceResultException(StatusCodes.BadUserAccessDenied, "Secure Application Administrator access required."); + } + + // allow access to system configuration only through special identity + SystemConfigurationIdentity user = context.UserIdentity as SystemConfigurationIdentity; + if (user == null || user.TokenType == UserTokenType.Anonymous) + { + throw new ServiceResultException(StatusCodes.BadUserAccessDenied, "System Configuration Administrator access required."); + } + + } + } + #endregion + + #region Private Methods + private ServiceResult UpdateCertificate( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId certificateGroupId, + NodeId certificateTypeId, + byte[] certificate, + byte[][] issuerCertificates, + string privateKeyFormat, + byte[] privateKey, + ref bool applyChangesRequired) + { + HasApplicationSecureAdminAccess(context); + + if (certificate == null) + { + throw new ArgumentNullException(nameof(certificate)); + } + + privateKeyFormat = privateKeyFormat?.ToUpper(); + if (!(String.IsNullOrEmpty(privateKeyFormat) || privateKeyFormat == "PEM" || privateKeyFormat == "PFX")) + { + throw new ServiceResultException(StatusCodes.BadNotSupported, "The private key format is not supported."); + } + + ServerCertificateGroup certificateGroup = VerifyGroupAndTypeId(certificateGroupId, certificateTypeId); + certificateGroup.UpdateCertificate = null; + + X509Certificate2Collection newIssuerCollection = new X509Certificate2Collection(); + X509Certificate2 newCert; + try + { + // build issuer chain + if (issuerCertificates != null) + { + foreach (byte[] issuerRawCert in issuerCertificates) + { + var newIssuerCert = new X509Certificate2(issuerRawCert); + newIssuerCollection.Add(newIssuerCert); + } + } + + newCert = new X509Certificate2(certificate); + } + catch + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Certificate data is invalid."); + } + + // validate new subject matches the previous subject + if (!X509Utils.CompareDistinguishedName(certificateGroup.ApplicationCertificate.SubjectName, newCert.SubjectName.Name)) + { + throw new ServiceResultException(StatusCodes.BadSecurityChecksFailed, "Subject Name of new certificate doesn't match the application."); + } + + // self signed + bool selfSigned = X509Utils.CompareDistinguishedName(newCert.Subject, newCert.Issuer); + if (selfSigned && newIssuerCollection.Count != 0) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Issuer list not empty for self signed certificate."); + } + + if (!selfSigned) + { + try + { + // verify cert with issuer chain + CertificateValidator certValidator = new CertificateValidator(); + CertificateTrustList issuerStore = new CertificateTrustList(); + CertificateIdentifierCollection issuerCollection = new CertificateIdentifierCollection(); + foreach (var issuerCert in newIssuerCollection) + { + issuerCollection.Add(new CertificateIdentifier(issuerCert)); + } + issuerStore.TrustedCertificates = issuerCollection; + certValidator.Update(issuerStore, issuerStore, null); + certValidator.Validate(newCert); + } + catch + { + throw new ServiceResultException(StatusCodes.BadSecurityChecksFailed, "Failed to verify integrity of the new certificate and the issuer list."); + } + } + + var updateCertificate = new UpdateCertificateData(); + try + { + var passwordProvider = m_configuration.SecurityConfiguration.CertificatePasswordProvider; + switch (privateKeyFormat) + { + case null: + case "": + { + X509Certificate2 certWithPrivateKey = certificateGroup.ApplicationCertificate.LoadPrivateKeyEx(passwordProvider).Result; + updateCertificate.CertificateWithPrivateKey = CertificateFactory.CreateCertificateWithPrivateKey(newCert, certWithPrivateKey); + break; + } + case "PFX": + { + X509Certificate2 certWithPrivateKey = X509Utils.CreateCertificateFromPKCS12(privateKey, passwordProvider?.GetPassword(certificateGroup.ApplicationCertificate)); + updateCertificate.CertificateWithPrivateKey = CertificateFactory.CreateCertificateWithPrivateKey(newCert, certWithPrivateKey); + break; + } + case "PEM": + { + updateCertificate.CertificateWithPrivateKey = CertificateFactory.CreateCertificateWithPEMPrivateKey(newCert, privateKey, passwordProvider?.GetPassword(certificateGroup.ApplicationCertificate)); + break; + } + } + updateCertificate.IssuerCollection = newIssuerCollection; + updateCertificate.SessionId = context.SessionId; + } + catch + { + throw new ServiceResultException(StatusCodes.BadSecurityChecksFailed, "Failed to verify integrity of the new certificate and the private key."); + } + + certificateGroup.UpdateCertificate = updateCertificate; + applyChangesRequired = true; + + if (updateCertificate != null) + { + try + { + using (ICertificateStore appStore = CertificateStoreIdentifier.OpenStore(certificateGroup.ApplicationCertificate.StorePath)) + { + Utils.Trace(Utils.TraceMasks.Security, "Delete application certificate {0}", certificateGroup.ApplicationCertificate.Thumbprint); + appStore.Delete(certificateGroup.ApplicationCertificate.Thumbprint).Wait(); + Utils.Trace(Utils.TraceMasks.Security, "Add new application certificate {0}", updateCertificate.CertificateWithPrivateKey); + var passwordProvider = m_configuration.SecurityConfiguration.CertificatePasswordProvider; + appStore.Add(updateCertificate.CertificateWithPrivateKey, passwordProvider?.GetPassword(certificateGroup.ApplicationCertificate)).Wait(); + // keep only track of cert without private key + var certOnly = new X509Certificate2(updateCertificate.CertificateWithPrivateKey.RawData); + updateCertificate.CertificateWithPrivateKey.Dispose(); + updateCertificate.CertificateWithPrivateKey = certOnly; + } + using (ICertificateStore issuerStore = CertificateStoreIdentifier.OpenStore(certificateGroup.IssuerStorePath)) + { + foreach (var issuer in updateCertificate.IssuerCollection) + { + try + { + Utils.Trace(Utils.TraceMasks.Security, "Add new issuer certificate {0}", issuer); + issuerStore.Add(issuer).Wait(); + } + catch (ArgumentException) + { + // ignore error if issuer cert already exists + } + } + } + } + catch (Exception ex) + { + Utils.Trace(Utils.TraceMasks.Security, ServiceResult.BuildExceptionTrace(ex)); + throw new ServiceResultException(StatusCodes.BadSecurityChecksFailed, "Failed to update certificate.", ex); + } + } + + return ServiceResult.Good; + } + + private ServiceResult CreateSigningRequest( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId certificateGroupId, + NodeId certificateTypeId, + string subjectName, + bool regeneratePrivateKey, + byte[] nonce, + ref byte[] certificateRequest) + { + HasApplicationSecureAdminAccess(context); + + ServerCertificateGroup certificateGroup = VerifyGroupAndTypeId(certificateGroupId, certificateTypeId); + + if (!String.IsNullOrEmpty(subjectName)) + { + throw new ArgumentException(nameof(subjectName)); + } + + // TODO: implement regeneratePrivateKey + // TODO: use nonce for generating the private key + + var passwordProvider = m_configuration.SecurityConfiguration.CertificatePasswordProvider; + X509Certificate2 certWithPrivateKey = certificateGroup.ApplicationCertificate.LoadPrivateKeyEx(passwordProvider).Result; + certificateRequest = CertificateFactory.CreateSigningRequest(certWithPrivateKey, X509Utils.GetDomainsFromCertficate(certWithPrivateKey)); + return ServiceResult.Good; + } + + private ServiceResult ApplyChanges( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + HasApplicationSecureAdminAccess(context); + + bool disconnectSessions = false; + + foreach (var certificateGroup in m_certificateGroups) + { + try + { + var updateCertificate = certificateGroup.UpdateCertificate; + if (updateCertificate != null) + { + disconnectSessions = true; + Utils.Trace((int)Utils.TraceMasks.Security, $"Apply Changes for certificate {updateCertificate.CertificateWithPrivateKey}"); + } + } + finally + { + certificateGroup.UpdateCertificate = null; + } + } + + if (disconnectSessions) + { + Task.Run(async () => { + Utils.Trace((int)Utils.TraceMasks.Security, $"Apply Changes for application certificate update."); + // give the client some time to receive the response + // before the certificate update may disconnect all sessions + await Task.Delay(1000).ConfigureAwait(false); + await m_configuration.CertificateValidator.UpdateCertificate(m_configuration.SecurityConfiguration); + } + ); + } + + return StatusCodes.Good; + } + + private ServiceResult GetRejectedList( + ISystemContext context, + MethodState method, + NodeId objectId, + ref byte[][] certificates) + { + HasApplicationSecureAdminAccess(context); + + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(m_rejectedStorePath)) + { + X509Certificate2Collection collection = store.Enumerate().Result; + List rawList = new List(); + foreach (var cert in collection) + { + rawList.Add(cert.RawData); + } + certificates = rawList.ToArray(); + } + + return StatusCodes.Good; + } + + private ServerCertificateGroup VerifyGroupAndTypeId( + NodeId certificateGroupId, + NodeId certificateTypeId + ) + { + // verify typeid must be set + if (NodeId.IsNull(certificateTypeId)) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "Certificate type not specified."); + } + + // verify requested certificate group + if (NodeId.IsNull(certificateGroupId)) + { + certificateGroupId = ObjectIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup; + } + + ServerCertificateGroup certificateGroup = m_certificateGroups.FirstOrDefault(group => Utils.IsEqual(group.NodeId, certificateGroupId)); + if (certificateGroup == null) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "Certificate group invalid."); + } + + // verify certificate type + bool foundCertType = certificateGroup.CertificateTypes.Any(t => Utils.IsEqual(t, certificateTypeId)); + if (!foundCertType) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument, "Certificate type not valid for certificate group."); + } + + return certificateGroup; + } + + /// + /// Finds the node for the specified NamespaceUri. + /// + /// + /// + private NamespaceMetadataState FindNamespaceMetadataState(string namespaceUri) + { + try + { + // find ServerNamespaces node + NamespacesState serverNamespacesNode = FindPredefinedNode(ObjectIds.Server_Namespaces, typeof(NamespacesState)) as NamespacesState; + if (serverNamespacesNode == null) + { + Utils.Trace("Cannot find ObjectIds.Server_Namespaces node."); + return null; + } + + IList serverNamespacesChildren = new List(); + serverNamespacesNode.GetChildren(SystemContext, serverNamespacesChildren); + + foreach (var namespacesReference in serverNamespacesChildren) + { + // Find NamespaceMetadata node of NamespaceUri in Namespaces children + NamespaceMetadataState namespaceMetadata = namespacesReference as NamespaceMetadataState; + + if (namespaceMetadata == null) + { + continue; + } + + if (namespaceMetadata.NamespaceUri.Value == namespaceUri) + { + return namespaceMetadata; + } + else + { + continue; + } + } + + IList serverNamespacesReferencs = new List(); + serverNamespacesNode.GetReferences(SystemContext, serverNamespacesReferencs); + + foreach (IReference serverNamespacesReference in serverNamespacesReferencs) + { + if (serverNamespacesReference.IsInverse == false) + { + // Find NamespaceMetadata node of NamespaceUri in Namespaces references + NodeId nameSpaceNodeId = ExpandedNodeId.ToNodeId(serverNamespacesReference.TargetId, Server.NamespaceUris); + NamespaceMetadataState namespaceMetadata = FindNodeInAddressSpace(nameSpaceNodeId) as NamespaceMetadataState; + + if (namespaceMetadata == null) + { + continue; + } + + if (namespaceMetadata.NamespaceUri.Value == namespaceUri) + { + return namespaceMetadata; + } + } + } + + return null; + } + catch (Exception ex) + { + Utils.Trace(ex, "Error searching NamespaceMetadata for namespaceUri {0}.", namespaceUri); + return null; + } + } + + /// + /// Clear NamespaceMetadata nodes cache in case nodes are added or deleted + /// + private void ServerNamespacesChanged(ISystemContext context, NodeState node, NodeStateChangeMasks changes) + { + if ((changes & NodeStateChangeMasks.Children) != 0 || + (changes & NodeStateChangeMasks.References) != 0) + { + try + { + lock (Lock) + { + m_namespaceMetadataStates.Clear(); + } + } + catch + { + // ignore errors + } + } + } + #endregion + + #region Private Fields + private class UpdateCertificateData + { + public NodeId SessionId; + public X509Certificate2 CertificateWithPrivateKey; + public X509Certificate2Collection IssuerCollection; + } + + private class ServerCertificateGroup + { + public string BrowseName; + public NodeId NodeId; + public CertificateGroupState Node; + public NodeId[] CertificateTypes; + public CertificateIdentifier ApplicationCertificate; + public string IssuerStorePath; + public string TrustedStorePath; + public UpdateCertificateData UpdateCertificate; + } + + private ServerConfigurationState m_serverConfigurationNode; + private ApplicationConfiguration m_configuration; + private IList m_certificateGroups; + private readonly string m_rejectedStorePath; + private Dictionary m_namespaceMetadataStates = new Dictionary(); + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Configuration/TrustList.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Configuration/TrustList.cs new file mode 100644 index 00000000..5799a4aa --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Configuration/TrustList.cs @@ -0,0 +1,689 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Security.Cryptography.X509Certificates; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Server +{ + /// + /// The implementation of a server trustlist. + /// + public class TrustList + { + const int DefaultTrustListCapacity = 0x10000; + + #region Constructors + /// + /// Initialize the trustlist with default values. + /// + public TrustList(Opc.Ua.TrustListState node, string trustedListPath, string issuerListPath, SecureAccess readAccess, SecureAccess writeAccess) + { + m_node = node; + m_trustedStorePath = trustedListPath; + m_issuerStorePath = issuerListPath; + m_readAccess = readAccess; + m_writeAccess = writeAccess; + + node.Open.OnCall = new OpenMethodStateMethodCallHandler(Open); + node.OpenWithMasks.OnCall = new OpenWithMasksMethodStateMethodCallHandler(OpenWithMasks); + node.Read.OnCall = new ReadMethodStateMethodCallHandler(Read); + node.Write.OnCall = new WriteMethodStateMethodCallHandler(Write); + node.Close.OnCall = new CloseMethodStateMethodCallHandler(Close); + node.CloseAndUpdate.OnCall = new CloseAndUpdateMethodStateMethodCallHandler(CloseAndUpdate); + node.AddCertificate.OnCall = new AddCertificateMethodStateMethodCallHandler(AddCertificate); + node.RemoveCertificate.OnCall = new RemoveCertificateMethodStateMethodCallHandler(RemoveCertificate); + } + #endregion + + #region Public Methods + /// + /// Delegate to validate the access to the trust list. + /// + /// + public delegate void SecureAccess(ISystemContext context); + #endregion + + #region Private Methods + private ServiceResult Open( + ISystemContext context, + MethodState method, + NodeId objectId, + byte mode, + ref uint fileHandle) + { + return Open(context, method, objectId, (OpenFileMode)mode, TrustListMasks.All, ref fileHandle); + } + + private ServiceResult OpenWithMasks( + ISystemContext context, + MethodState method, + NodeId objectId, + uint masks, + ref uint fileHandle) + { + return Open(context, method, objectId, OpenFileMode.Read, (TrustListMasks)masks, ref fileHandle); + } + + private ServiceResult Open( + ISystemContext context, + MethodState method, + NodeId objectId, + OpenFileMode mode, + TrustListMasks masks, + ref uint fileHandle) + { + HasSecureReadAccess(context); + + if (mode == OpenFileMode.Read) + { + HasSecureReadAccess(context); + } + else if (mode == (OpenFileMode.Write | OpenFileMode.EraseExisting)) + { + HasSecureWriteAccess(context); + } + else + { + return StatusCodes.BadNotWritable; + } + + lock (m_lock) + { + if (m_sessionId != null) + { + // to avoid deadlocks, last open always wins + m_sessionId = null; + m_strm = null; + m_node.OpenCount.Value = 0; + } + + m_readMode = mode == OpenFileMode.Read; + m_sessionId = context.SessionId; + fileHandle = ++m_fileHandle; + + TrustListDataType trustList = new TrustListDataType() { + SpecifiedLists = (uint)masks + }; + + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(m_trustedStorePath)) + { + if ((masks & TrustListMasks.TrustedCertificates) != 0) + { + X509Certificate2Collection certificates = store.Enumerate().Result; + foreach (var certificate in certificates) + { + trustList.TrustedCertificates.Add(certificate.RawData); + } + } + + if ((masks & TrustListMasks.TrustedCrls) != 0) + { + foreach (var crl in store.EnumerateCRLs()) + { + trustList.TrustedCrls.Add(crl.RawData); + } + } + } + + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(m_issuerStorePath)) + { + if ((masks & TrustListMasks.IssuerCertificates) != 0) + { + X509Certificate2Collection certificates = store.Enumerate().Result; + foreach (var certificate in certificates) + { + trustList.IssuerCertificates.Add(certificate.RawData); + } + } + + if ((masks & TrustListMasks.IssuerCrls) != 0) + { + foreach (var crl in store.EnumerateCRLs()) + { + trustList.IssuerCrls.Add(crl.RawData); + } + } + } + + if (m_readMode) + { + m_strm = EncodeTrustListData(context, trustList); + } + else + { + m_strm = new MemoryStream(DefaultTrustListCapacity); + } + + m_node.OpenCount.Value = 1; + } + + return ServiceResult.Good; + } + + private ServiceResult Read( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + int length, + ref byte[] data) + { + HasSecureReadAccess(context); + + lock (m_lock) + { + if (m_sessionId != context.SessionId) + { + return StatusCodes.BadUserAccessDenied; + } + + if (m_fileHandle != fileHandle) + { + return StatusCodes.BadInvalidArgument; + } + + data = new byte[length]; + + int bytesRead = m_strm.Read(data, 0, length); + + if (bytesRead < 0) + { + return StatusCodes.BadUnexpectedError; + } + + if (bytesRead < length) + { + byte[] bytes = new byte[bytesRead]; + Array.Copy(data, bytes, bytesRead); + data = bytes; + } + } + + return ServiceResult.Good; + } + + private ServiceResult Write( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + byte[] data) + { + HasSecureWriteAccess(context); + + lock (m_lock) + { + if (m_sessionId != context.SessionId) + { + return StatusCodes.BadUserAccessDenied; + } + + if (m_fileHandle != fileHandle) + { + return StatusCodes.BadInvalidArgument; + } + + m_strm.Write(data, 0, data.Length); + + } + + return ServiceResult.Good; + } + + + private ServiceResult Close( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle) + { + HasSecureReadAccess(context); + + lock (m_lock) + { + if (m_sessionId != context.SessionId) + { + return StatusCodes.BadUserAccessDenied; + } + + if (m_fileHandle != fileHandle) + { + return StatusCodes.BadInvalidArgument; + } + + m_sessionId = null; + m_strm = null; + m_node.OpenCount.Value = 0; + } + + return ServiceResult.Good; + } + + private ServiceResult CloseAndUpdate( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + ref bool restartRequired) + { + HasSecureWriteAccess(context); + + ServiceResult result = StatusCodes.Good; + + lock (m_lock) + { + if (m_sessionId != context.SessionId) + { + return StatusCodes.BadUserAccessDenied; + } + + if (m_fileHandle != fileHandle) + { + return StatusCodes.BadInvalidArgument; + } + + try + { + + TrustListDataType trustList = DecodeTrustListData(context, m_strm); + TrustListMasks masks = (TrustListMasks)trustList.SpecifiedLists; + + X509Certificate2Collection issuerCertificates = null; + List issuerCrls = null; + X509Certificate2Collection trustedCertificates = null; + List trustedCrls = null; + + // test integrity of all CRLs + if ((masks & TrustListMasks.IssuerCertificates) != 0) + { + issuerCertificates = new X509Certificate2Collection(); + foreach (var cert in trustList.IssuerCertificates) + { + issuerCertificates.Add(new X509Certificate2(cert)); + } + } + if ((masks & TrustListMasks.IssuerCrls) != 0) + { + issuerCrls = new List(); + foreach (var crl in trustList.IssuerCrls) + { + issuerCrls.Add(new X509CRL(crl)); + } + } + if ((masks & TrustListMasks.TrustedCertificates) != 0) + { + trustedCertificates = new X509Certificate2Collection(); + foreach (var cert in trustList.TrustedCertificates) + { + trustedCertificates.Add(new X509Certificate2(cert)); + } + } + if ((masks & TrustListMasks.TrustedCrls) != 0) + { + trustedCrls = new List(); + foreach (var crl in trustList.TrustedCrls) + { + trustedCrls.Add(new X509CRL(crl)); + } + } + + // update store + // test integrity of all CRLs + TrustListMasks updateMasks = TrustListMasks.None; + if ((masks & TrustListMasks.IssuerCertificates) != 0) + { + if (UpdateStoreCertificates(m_issuerStorePath, issuerCertificates)) + { + updateMasks |= TrustListMasks.IssuerCertificates; + } + } + if ((masks & TrustListMasks.IssuerCrls) != 0) + { + if (UpdateStoreCrls(m_issuerStorePath, issuerCrls)) + { + updateMasks |= TrustListMasks.IssuerCrls; + } + } + if ((masks & TrustListMasks.TrustedCertificates) != 0) + { + if (UpdateStoreCertificates(m_trustedStorePath, trustedCertificates)) + { + updateMasks |= TrustListMasks.TrustedCertificates; + } + } + if ((masks & TrustListMasks.TrustedCrls) != 0) + { + if (UpdateStoreCrls(m_trustedStorePath, trustedCrls)) + { + updateMasks |= TrustListMasks.TrustedCrls; + } + } + + if (masks != updateMasks) + { + result = StatusCodes.BadCertificateInvalid; + } + } + catch + { + result = StatusCodes.BadCertificateInvalid; + } + finally + { + m_sessionId = null; + m_strm = null; + m_node.LastUpdateTime.Value = DateTime.UtcNow; + m_node.OpenCount.Value = 0; + } + } + + restartRequired = false; + + return result; + } + + private ServiceResult AddCertificate( + ISystemContext context, + MethodState method, + NodeId objectId, + byte[] certificate, + bool isTrustedCertificate) + { + HasSecureWriteAccess(context); + + lock (m_lock) + { + + if (m_sessionId != null) + { + return StatusCodes.BadInvalidState; + } + + if (certificate == null) + { + return StatusCodes.BadInvalidArgument; + } + + X509Certificate2 cert = null; + X509CRL crl = null; + try + { + cert = new X509Certificate2(certificate); + } + catch + { + try + { + crl = new X509CRL(certificate); + } + catch + { + return StatusCodes.BadCertificateInvalid; + } + } + + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(isTrustedCertificate ? m_trustedStorePath : m_issuerStorePath)) + { + if (cert != null) + { + store.Add(cert).Wait(); + } + if (crl != null) + { + store.AddCRL(crl); + } + } + + m_node.LastUpdateTime.Value = DateTime.UtcNow; + } + + return ServiceResult.Good; + } + + private ServiceResult RemoveCertificate( + ISystemContext context, + MethodState method, + NodeId objectId, + string thumbprint, + bool isTrustedCertificate) + { + HasSecureWriteAccess(context); + + lock (m_lock) + { + + if (m_sessionId != null) + { + return StatusCodes.BadInvalidState; + } + + if (String.IsNullOrEmpty(thumbprint)) + { + return StatusCodes.BadInvalidArgument; + } + + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(isTrustedCertificate ? m_trustedStorePath : m_issuerStorePath)) + { + var certCollection = store.FindByThumbprint(thumbprint).Result; + + if (certCollection.Count == 0) + { + return StatusCodes.BadInvalidArgument; + } + + // delete all CRLs signed by cert + var crlsToDelete = new List(); + foreach (var crl in store.EnumerateCRLs()) + { + foreach (var cert in certCollection) + { + if (X509Utils.CompareDistinguishedName(cert.Subject, crl.Issuer) && + crl.VerifySignature(cert, false)) + { + crlsToDelete.Add(crl); + break; + } + } + } + + if (!store.Delete(thumbprint).Result) + { + return StatusCodes.BadInvalidArgument; + } + + foreach (var crl in crlsToDelete) + { + if (!store.DeleteCRL(crl)) + { + // intentionally ignore errors, try best effort + Utils.Trace("RemoveCertificate: Failed to delete CRL {0}.", crl.ToString()); + } + } + } + + m_node.LastUpdateTime.Value = DateTime.UtcNow; + } + + return ServiceResult.Good; + } + + private Stream EncodeTrustListData( + ISystemContext context, + TrustListDataType trustList + ) + { + ServiceMessageContext messageContext = new ServiceMessageContext() { + NamespaceUris = context.NamespaceUris, + ServerUris = context.ServerUris, + Factory = context.EncodeableFactory + }; + MemoryStream strm = new MemoryStream(); + BinaryEncoder encoder = new BinaryEncoder(strm, messageContext); + encoder.WriteEncodeable(null, trustList, null); + strm.Position = 0; + return strm; + } + + private TrustListDataType DecodeTrustListData( + ISystemContext context, + Stream strm) + { + TrustListDataType trustList = new TrustListDataType(); + ServiceMessageContext messageContext = new ServiceMessageContext() { + NamespaceUris = context.NamespaceUris, + ServerUris = context.ServerUris, + Factory = context.EncodeableFactory + }; + strm.Position = 0; + BinaryDecoder decoder = new BinaryDecoder(strm, messageContext); + trustList.Decode(decoder); + decoder.Close(); + return trustList; + } + + private bool UpdateStoreCrls( + string storePath, + IList updatedCrls) + { + bool result = true; + try + { + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(storePath)) + { + var storeCrls = store.EnumerateCRLs(); + foreach (var crl in storeCrls) + { + if (!updatedCrls.Contains(crl)) + { + if (!store.DeleteCRL(crl)) + { + result = false; + } + } + else + { + updatedCrls.Remove(crl); + } + } + foreach (var crl in updatedCrls) + { + store.AddCRL(crl); + } + } + } + catch + { + result = false; + } + return result; + } + + private bool UpdateStoreCertificates( + string storePath, + X509Certificate2Collection updatedCerts) + { + bool result = true; + try + { + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(storePath)) + { + var storeCerts = store.Enumerate().Result; + foreach (var cert in storeCerts) + { + if (!updatedCerts.Contains(cert)) + { + if (!store.Delete(cert.Thumbprint).Result) + { + result = false; + } + } + else + { + updatedCerts.Remove(cert); + } + } + foreach (var cert in updatedCerts) + { + store.Add(cert).Wait(); + } + } + } + catch + { + result = false; + } + return result; + } + + + private void HasSecureReadAccess(ISystemContext context) + { + if (m_readAccess != null) + { + m_readAccess.Invoke(context); + } + else + { + throw new ServiceResultException(StatusCodes.BadUserAccessDenied); + } + } + + private void HasSecureWriteAccess(ISystemContext context) + { + if (m_writeAccess != null) + { + m_writeAccess.Invoke(context); + } + else + { + throw new ServiceResultException(StatusCodes.BadUserAccessDenied); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private SecureAccess m_readAccess; + private SecureAccess m_writeAccess; + private NodeId m_sessionId; + private uint m_fileHandle; + private readonly string m_trustedStorePath; + private readonly string m_issuerStorePath; + private TrustListState m_node; + private Stream m_strm; + private bool m_readMode; + #endregion + + } + +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs new file mode 100644 index 00000000..e87723b5 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs @@ -0,0 +1,4466 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Text; +using System.Collections.Generic; +using System.Reflection; +using System.Threading; +using Opc.Ua; +using Opc.Ua.Server; + +namespace Opc.Ua.Server +{ + /// + /// A sample implementation of the INodeManager interface. + /// + /// + /// This node manager is a base class used in multiple samples. It implements the INodeManager + /// interface and allows sub-classes to override only the methods that they need. This example + /// is not part of the SDK because most real implementations of a INodeManager will need to + /// modify the behavior of the base class. + /// + public class CustomNodeManager2 : INodeManager2, INodeIdFactory, IDisposable + { + #region Constructors + /// + /// Initializes the node manager. + /// + protected CustomNodeManager2( + IServerInternal server, + params string[] namespaceUris) + : + this(server, (ApplicationConfiguration)null, namespaceUris) + { + } + + /// + /// Initializes the node manager. + /// + protected CustomNodeManager2( + IServerInternal server, + ApplicationConfiguration configuration, + params string[] namespaceUris) + { + // set defaults. + m_maxQueueSize = 1000; + + if (configuration != null) + { + if (configuration.ServerConfiguration != null) + { + m_maxQueueSize = (uint)configuration.ServerConfiguration.MaxNotificationQueueSize; + } + } + + // save a reference to the UA server instance that owns the node manager. + m_server = server; + + // all operations require information about the system + m_systemContext = m_server.DefaultSystemContext.Copy(); + + // the node id factory assigns new node ids to new nodes. + // the strategy used by a NodeManager depends on what kind of information it provides. + m_systemContext.NodeIdFactory = this; + + // create the table of namespaces that are used by the NodeManager. + m_namespaceUris = namespaceUris; + + // add the uris to the server's namespace table and cache the indexes. + if (namespaceUris != null) + { + m_namespaceIndexes = new ushort[m_namespaceUris.Length]; + + for (int ii = 0; ii < m_namespaceUris.Length; ii++) + { + m_namespaceIndexes[ii] = m_server.NamespaceUris.GetIndexOrAppend(m_namespaceUris[ii]); + } + } + + // create the table of monitored items. + // these are items created by clients when they subscribe to data or events. + m_monitoredItems = new Dictionary(); + + // create the table of monitored nodes. + // these are created by the node manager whenever a client subscribe to an attribute of the node. + m_monitoredNodes = new Dictionary(); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + if (m_predefinedNodes != null) + { + foreach (NodeState node in m_predefinedNodes.Values) + { + Utils.SilentDispose(node); + } + + m_predefinedNodes.Clear(); + } + } + } + } + #endregion + + #region INodeIdFactory Members + /// + /// Creates the NodeId for the specified node. + /// + /// The context. + /// The node. + /// The new NodeId. + public virtual NodeId New(ISystemContext context, NodeState node) + { + return node.NodeId; + } + #endregion + + #region Public Properties + /// + /// Acquires the lock on the node manager. + /// + public object Lock + { + get { return m_lock; } + } + + /// + /// Gets the server that the node manager belongs to. + /// + public IServerInternal Server + { + get { return m_server; } + } + + /// + /// The default context to use. + /// + public ServerSystemContext SystemContext + { + get { return m_systemContext; } + } + + /// + /// Gets the default index for the node manager's namespace. + /// + public ushort NamespaceIndex + { + get { return m_namespaceIndexes[0]; } + } + + /// + /// Gets the namespace indexes owned by the node manager. + /// + /// The namespace indexes. + public ushort[] NamespaceIndexes + { + get { return m_namespaceIndexes; } + } + + /// + /// Gets or sets the maximum size of a monitored item queue. + /// + /// The maximum size of a monitored item queue. + public uint MaxQueueSize + { + get { return m_maxQueueSize; } + set { m_maxQueueSize = value; } + } + + /// + /// The root for the alias assigned to the node manager. + /// + public string AliasRoot + { + get { return m_aliasRoot; } + set { m_aliasRoot = value; } + } + #endregion + + #region Protected Members + /// + /// The predefined nodes managed by the node manager. + /// + protected NodeIdDictionary PredefinedNodes + { + get { return m_predefinedNodes; } + } + + /// + /// The root notifiers for the node manager. + /// + protected List RootNotifiers + { + get { return m_rootNotifiers; } + } + + /// + /// Gets the table of monitored items. + /// + protected Dictionary MonitoredItems + { + get { return m_monitoredItems; } + } + + /// + /// Gets the table of nodes being monitored. + /// + protected Dictionary MonitoredNodes + { + get { return m_monitoredNodes; } + } + + /// + /// Sets the namespaces supported by the NodeManager. + /// + /// The namespace uris. + protected void SetNamespaces(params string[] namespaceUris) + { + // create the table of namespaces that are used by the NodeManager. + m_namespaceUris = namespaceUris; + + // add the uris to the server's namespace table and cache the indexes. + m_namespaceIndexes = new ushort[m_namespaceUris.Length]; + + for (int ii = 0; ii < m_namespaceUris.Length; ii++) + { + m_namespaceIndexes[ii] = m_server.NamespaceUris.GetIndexOrAppend(m_namespaceUris[ii]); + } + } + + /// + /// Sets the namespace indexes supported by the NodeManager. + /// + protected void SetNamespaceIndexes(ushort[] namespaceIndexes) + { + m_namespaceIndexes = namespaceIndexes; + m_namespaceUris = new string[namespaceIndexes.Length]; + + for (int ii = 0; ii < namespaceIndexes.Length; ii++) + { + m_namespaceUris[ii] = m_server.NamespaceUris.GetString(namespaceIndexes[ii]); + } + } + + /// + /// Returns true if the namespace for the node id is one of the namespaces managed by the node manager. + /// + /// The node id to check. + /// True if the namespace is one of the nodes. + protected virtual bool IsNodeIdInNamespace(NodeId nodeId) + { + // nulls are never a valid node. + if (NodeId.IsNull(nodeId)) + { + return false; + } + + // quickly exclude nodes that not in the namespace. + for (int ii = 0; ii < m_namespaceIndexes.Length; ii++) + { + if (nodeId.NamespaceIndex == m_namespaceIndexes[ii]) + { + return true; + } + } + + return false; + } + + /// + /// Returns the node if the handle refers to a node managed by this manager. + /// + /// The handle to check. + /// Non-null if the handle belongs to the node manager. + protected virtual NodeHandle IsHandleInNamespace(object managerHandle) + { + NodeHandle source = managerHandle as NodeHandle; + + if (source == null) + { + return null; + } + + if (!IsNodeIdInNamespace(source.NodeId)) + { + return null; + } + + return source; + } + + /// + /// Returns the state object for the specified node if it exists. + /// + public NodeState Find(NodeId nodeId) + { + lock (Lock) + { + if (PredefinedNodes == null) + { + return null; + } + + NodeState node = null; + + if (!PredefinedNodes.TryGetValue(nodeId, out node)) + { + return null; + } + + return node; + } + } + + /// + /// Creates a new instance and assigns unique identifiers to all children. + /// + /// The operation context. + /// An optional parent identifier. + /// The reference type from the parent. + /// The browse name. + /// The instance to create. + /// The new node id. + public NodeId CreateNode( + ServerSystemContext context, + NodeId parentId, + NodeId referenceTypeId, + QualifiedName browseName, + BaseInstanceState instance) + { + ServerSystemContext contextToUse = (ServerSystemContext)m_systemContext.Copy(context); + + lock (Lock) + { + if (m_predefinedNodes == null) + { + m_predefinedNodes = new NodeIdDictionary(); + } + + instance.ReferenceTypeId = referenceTypeId; + + NodeState parent = null; + + if (parentId != null) + { + if (!m_predefinedNodes.TryGetValue(parentId, out parent)) + { + throw ServiceResultException.Create( + StatusCodes.BadNodeIdUnknown, + "Cannot find parent with id: {0}", + parentId); + } + + parent.AddChild(instance); + } + + instance.Create(contextToUse, null, browseName, null, true); + AddPredefinedNode(contextToUse, instance); + + return instance.NodeId; + } + } + + /// + /// Deletes a node and all of its children. + /// + public bool DeleteNode( + ServerSystemContext context, + NodeId nodeId) + { + ServerSystemContext contextToUse = m_systemContext.Copy(context); + + bool found = false; + List referencesToRemove = new List(); + + lock (Lock) + { + if (m_predefinedNodes == null) + { + return false; + } + + NodeState node = null; + + if (PredefinedNodes.TryGetValue(nodeId, out node)) + { + RemovePredefinedNode(contextToUse, node, referencesToRemove); + found = true; + } + + RemoveRootNotifier(node); + } + + // must release the lock before removing cross references to other node managers. + if (referencesToRemove.Count > 0) + { + Server.NodeManager.RemoveReferences(referencesToRemove); + } + + return found; + } + + /// + /// Searches the node id in all node managers + /// + /// + /// + public NodeState FindNodeInAddressSpace(NodeId nodeId) + { + if (nodeId == null) + { + return null; + } + // search node id in all node managers + foreach (INodeManager nodeManager in Server.NodeManager.NodeManagers) + { + NodeHandle handle = nodeManager.GetManagerHandle(nodeId) as NodeHandle; + if (handle == null) + { + continue; + } + return handle.Node; + } + return null; + } + #endregion + + #region INodeManager Members + /// + /// Returns the namespaces used by the node manager. + /// + /// + /// All NodeIds exposed by the node manager must be qualified by a namespace URI. This property + /// returns the URIs used by the node manager. In this example all NodeIds use a single URI. + /// + public virtual IEnumerable NamespaceUris + { + get + { + return m_namespaceUris; + } + + protected set + { + if (value == null) throw new ArgumentNullException(nameof(value)); + List namespaceUris = new List(value); + SetNamespaces(namespaceUris.ToArray()); + } + } + + /// + /// Does any initialization required before the address space can be used. + /// + /// + /// The externalReferences is an out parameter that allows the node manager to link to nodes + /// in other node managers. For example, the 'Objects' node is managed by the CoreNodeManager and + /// should have a reference to the root folder node(s) exposed by this node manager. + /// + public virtual void CreateAddressSpace(IDictionary> externalReferences) + { + LoadPredefinedNodes(m_systemContext, externalReferences); + } + + #region CreateAddressSpace Support Functions + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + public virtual void LoadPredefinedNodes( + ISystemContext context, + Assembly assembly, + string resourcePath, + IDictionary> externalReferences) + { + if (m_predefinedNodes == null) + { + m_predefinedNodes = new NodeIdDictionary(); + } + + // load the predefined nodes from an XML document. + NodeStateCollection predefinedNodes = new NodeStateCollection(); + predefinedNodes.LoadFromResource(context, resourcePath, assembly, true); + + // add the predefined nodes to the node manager. + for (int ii = 0; ii < predefinedNodes.Count; ii++) + { + AddPredefinedNode(context, predefinedNodes[ii]); + } + + // ensure the reverse references exist. + AddReverseReferences(externalReferences); + } + + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + protected virtual NodeStateCollection LoadPredefinedNodes(ISystemContext context) + { + return new NodeStateCollection(); + } + + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + protected virtual void LoadPredefinedNodes( + ISystemContext context, + IDictionary> externalReferences) + { + // load the predefined nodes from an XML document. + NodeStateCollection predefinedNodes = LoadPredefinedNodes(context); + + // add the predefined nodes to the node manager. + for (int ii = 0; ii < predefinedNodes.Count; ii++) + { + AddPredefinedNode(context, predefinedNodes[ii]); + } + + // ensure the reverse references exist. + AddReverseReferences(externalReferences); + } + + /// + /// Replaces the generic node with a node specific to the model. + /// + protected virtual NodeState AddBehaviourToPredefinedNode(ISystemContext context, NodeState predefinedNode) + { + BaseObjectState passiveNode = predefinedNode as BaseObjectState; + + if (passiveNode == null) + { + return predefinedNode; + } + + return predefinedNode; + } + + /// + /// Recursively indexes the node and its children. + /// + protected virtual void AddPredefinedNode(ISystemContext context, NodeState node) + { + if (m_predefinedNodes == null) + { + m_predefinedNodes = new NodeIdDictionary(); + } + + NodeState activeNode = AddBehaviourToPredefinedNode(context, node); + m_predefinedNodes[activeNode.NodeId] = activeNode; + + BaseTypeState type = activeNode as BaseTypeState; + + if (type != null) + { + AddTypesToTypeTree(type); + } + + // update the root notifiers. + if (m_rootNotifiers != null) + { + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + if (m_rootNotifiers[ii].NodeId == activeNode.NodeId) + { + m_rootNotifiers[ii] = activeNode; + + // need to prevent recursion with the server object. + if (activeNode.NodeId != ObjectIds.Server) + { + activeNode.OnReportEvent = OnReportEvent; + + if (!activeNode.ReferenceExists(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server)) + { + activeNode.AddReference(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server); + } + } + + break; + } + } + } + + List children = new List(); + activeNode.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + AddPredefinedNode(context, children[ii]); + } + } + + /// + /// Recursively indexes the node and its children. + /// + protected virtual void RemovePredefinedNode( + ISystemContext context, + NodeState node, + List referencesToRemove) + { + if (m_predefinedNodes == null) + { + return; + } + + m_predefinedNodes.Remove(node.NodeId); + node.UpdateChangeMasks(NodeStateChangeMasks.Deleted); + node.ClearChangeMasks(context, false); + OnNodeRemoved(node); + + // remove from the parent. + BaseInstanceState instance = node as BaseInstanceState; + + if (instance != null && instance.Parent != null) + { + instance.Parent.RemoveChild(instance); + } + + // remove children. + List children = new List(); + node.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + node.RemoveChild(children[ii]); + } + + for (int ii = 0; ii < children.Count; ii++) + { + RemovePredefinedNode(context, children[ii], referencesToRemove); + } + + // remove from type table. + BaseTypeState type = node as BaseTypeState; + + if (type != null) + { + m_server.TypeTree.Remove(type.NodeId); + } + + // remove inverse references. + List references = new List(); + node.GetReferences(context, references); + + for (int ii = 0; ii < references.Count; ii++) + { + IReference reference = references[ii]; + + if (reference.TargetId.IsAbsolute) + { + continue; + } + + LocalReference referenceToRemove = new LocalReference( + (NodeId)reference.TargetId, + reference.ReferenceTypeId, + reference.IsInverse, + node.NodeId); + + referencesToRemove.Add(referenceToRemove); + } + } + + /// + /// Called after a node has been deleted. + /// + protected virtual void OnNodeRemoved(NodeState node) + { + // overridden by the sub-class. + } + + /// + /// Ensures that all reverse references exist. + /// + /// A list of references to add to external targets. + protected virtual void AddReverseReferences(IDictionary> externalReferences) + { + if (m_predefinedNodes == null) + { + return; + } + + foreach (NodeState source in m_predefinedNodes.Values) + { + // assign a default value to any variable value. + BaseVariableState variable = source as BaseVariableState; + + if (variable != null && variable.Value == null) + { + variable.Value = TypeInfo.GetDefaultValue(variable.DataType, variable.ValueRank, Server.TypeTree); + } + + IList references = new List(); + source.GetReferences(SystemContext, references); + + for (int ii = 0; ii < references.Count; ii++) + { + IReference reference = references[ii]; + + // nothing to do with external nodes. + if (reference.TargetId == null || reference.TargetId.IsAbsolute) + { + continue; + } + + // no need to add HasSubtype references since these are handled via the type table. + if (reference.ReferenceTypeId == ReferenceTypeIds.HasSubtype) + { + continue; + } + + NodeId targetId = (NodeId)reference.TargetId; + + // check for data type encoding references. + if (reference.IsInverse && reference.ReferenceTypeId == ReferenceTypeIds.HasEncoding) + { + Server.TypeTree.AddEncoding(targetId, source.NodeId); + } + + // add inverse reference to internal targets. + NodeState target = null; + + if (m_predefinedNodes.TryGetValue(targetId, out target)) + { + if (!target.ReferenceExists(reference.ReferenceTypeId, !reference.IsInverse, source.NodeId)) + { + target.AddReference(reference.ReferenceTypeId, !reference.IsInverse, source.NodeId); + } + + continue; + } + + // check for inverse references to external notifiers. + if (reference.IsInverse && reference.ReferenceTypeId == ReferenceTypeIds.HasNotifier) + { + AddRootNotifier(source); + } + + // nothing more to do for references to nodes managed by this manager. + if (IsNodeIdInNamespace(targetId)) + { + continue; + } + + // add external reference. + AddExternalReference( + targetId, + reference.ReferenceTypeId, + !reference.IsInverse, + source.NodeId, + externalReferences); + } + } + } + + /// + /// Adds an external reference to the dictionary. + /// + protected void AddExternalReference( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + NodeId targetId, + IDictionary> externalReferences) + { + // get list of references to external nodes. + IList referencesToAdd = null; + + if (!externalReferences.TryGetValue(sourceId, out referencesToAdd)) + { + externalReferences[sourceId] = referencesToAdd = new List(); + } + + // add reserve reference from external node. + ReferenceNode referenceToAdd = new ReferenceNode(); + + referenceToAdd.ReferenceTypeId = referenceTypeId; + referenceToAdd.IsInverse = isInverse; + referenceToAdd.TargetId = targetId; + + referencesToAdd.Add(referenceToAdd); + } + + /// + /// Recursively adds the types to the type tree. + /// + protected void AddTypesToTypeTree(BaseTypeState type) + { + if (!NodeId.IsNull(type.SuperTypeId)) + { + if (!Server.TypeTree.IsKnown(type.SuperTypeId)) + { + AddTypesToTypeTree(type.SuperTypeId); + } + } + + if (type.NodeClass != NodeClass.ReferenceType) + { + Server.TypeTree.AddSubtype(type.NodeId, type.SuperTypeId); + } + else + { + Server.TypeTree.AddReferenceSubtype(type.NodeId, type.SuperTypeId, type.BrowseName); + } + } + + /// + /// Recursively adds the types to the type tree. + /// + protected void AddTypesToTypeTree(NodeId typeId) + { + NodeState node = null; + + if (!PredefinedNodes.TryGetValue(typeId, out node)) + { + return; + } + + BaseTypeState type = node as BaseTypeState; + + if (type == null) + { + return; + } + + AddTypesToTypeTree(type); + } + + /// + /// Finds the specified and checks if it is of the expected type. + /// + /// Returns null if not found or not of the correct type. + public NodeState FindPredefinedNode(NodeId nodeId, Type expectedType) + { + if (nodeId == null) + { + return null; + } + + NodeState node = null; + + if (!PredefinedNodes.TryGetValue(nodeId, out node)) + { + return null; + } + + if (expectedType != null) + { + if (!expectedType.IsInstanceOfType(node)) + { + return null; + } + } + + return node; + } + #endregion + + /// + /// Frees any resources allocated for the address space. + /// + public virtual void DeleteAddressSpace() + { + lock (m_lock) + { + if (m_predefinedNodes != null) + { + foreach (NodeState node in m_predefinedNodes.Values) + { + Utils.SilentDispose(node); + } + + m_predefinedNodes.Clear(); + } + } + } + + /// + /// Returns a unique handle for the node. + /// + /// + /// This must efficiently determine whether the node belongs to the node manager. If it does belong to + /// NodeManager it should return a handle that does not require the NodeId to be validated again when + /// the handle is passed into other methods such as 'Read' or 'Write'. + /// + public virtual object GetManagerHandle(NodeId nodeId) + { + lock (Lock) + { + return GetManagerHandle(m_systemContext, nodeId, null); + } + } + + /// + /// Returns a unique handle for the node. + /// + protected virtual NodeHandle GetManagerHandle(ServerSystemContext context, NodeId nodeId, IDictionary cache) + { + if (!IsNodeIdInNamespace(nodeId)) + { + return null; + } + + if (m_predefinedNodes != null) + { + NodeState node = null; + + if (m_predefinedNodes.TryGetValue(nodeId, out node)) + { + NodeHandle handle = new NodeHandle(); + + handle.NodeId = nodeId; + handle.Node = node; + handle.Validated = true; + + return handle; + } + } + + return null; + } + + /// + /// This method is used to add bi-directional references to nodes from other node managers. + /// + /// + /// The additional references are optional, however, the NodeManager should support them. + /// + public virtual void AddReferences(IDictionary> references) + { + lock (Lock) + { + foreach (KeyValuePair> current in references) + { + // get the handle. + NodeHandle source = GetManagerHandle(m_systemContext, current.Key, null); + + // only support external references to nodes that are stored in memory. + if (source == null || !source.Validated || source.Node == null) + { + continue; + } + + // add reference to external target. + foreach (IReference reference in current.Value) + { + if (!source.Node.ReferenceExists(reference.ReferenceTypeId, reference.IsInverse, reference.TargetId)) + { + source.Node.AddReference(reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + } + } + } + } + } + + /// + /// This method is used to delete bi-directional references to nodes from other node managers. + /// + public virtual ServiceResult DeleteReference( + object sourceHandle, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool deleteBiDirectional) + { + lock (Lock) + { + // get the handle. + NodeHandle source = IsHandleInNamespace(sourceHandle); + + if (source == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + // only support external references to nodes that are stored in memory. + if (!source.Validated || source.Node == null) + { + return StatusCodes.BadNotSupported; + } + + // only support references to Source Areas. + source.Node.RemoveReference(referenceTypeId, isInverse, targetId); + + if (deleteBiDirectional) + { + // check if the target is also managed by this node manager. + if (!targetId.IsAbsolute) + { + NodeHandle target = GetManagerHandle(m_systemContext, (NodeId)targetId, null); + + if (target != null && target.Validated && target.Node != null) + { + target.Node.RemoveReference(referenceTypeId, !isInverse, source.NodeId); + } + } + } + + return ServiceResult.Good; + } + } + + /// + /// Returns the basic metadata for the node. Returns null if the node does not exist. + /// + /// + /// This method validates any placeholder handle. + /// + public virtual NodeMetadata GetNodeMetadata( + OperationContext context, + object targetHandle, + BrowseResultMask resultMask) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + // check for valid handle. + NodeHandle handle = IsHandleInNamespace(targetHandle); + + if (handle == null) + { + return null; + } + + // validate node. + NodeState target = ValidateNode(systemContext, handle, null); + + if (target == null) + { + return null; + } + + // read the attributes. + List values = target.ReadAttributes( + systemContext, + Attributes.WriteMask, + Attributes.UserWriteMask, + Attributes.DataType, + Attributes.ValueRank, + Attributes.ArrayDimensions, + Attributes.AccessLevel, + Attributes.UserAccessLevel, + Attributes.EventNotifier, + Attributes.Executable, + Attributes.UserExecutable, + Attributes.AccessRestrictions, + Attributes.RolePermissions, + Attributes.UserRolePermissions); + + // construct the meta-data object. + NodeMetadata metadata = new NodeMetadata(target, target.NodeId); + + metadata.NodeClass = target.NodeClass; + metadata.BrowseName = target.BrowseName; + metadata.DisplayName = target.DisplayName; + + if (values[0] != null && values[1] != null) + { + metadata.WriteMask = (AttributeWriteMask)(((uint)values[0]) & ((uint)values[1])); + } + + metadata.DataType = (NodeId)values[2]; + + if (values[3] != null) + { + metadata.ValueRank = (int)values[3]; + } + + metadata.ArrayDimensions = (IList)values[4]; + + if (values[5] != null && values[6] != null) + { + metadata.AccessLevel = (byte)(((byte)values[5]) & ((byte)values[6])); + } + + if (values[7] != null) + { + metadata.EventNotifier = (byte)values[7]; + } + + if (values[8] != null && values[9] != null) + { + metadata.Executable = (((bool)values[8]) && ((bool)values[9])); + } + + if (values[10] != null) + { + metadata.AccessRestrictions = (AccessRestrictionType)Enum.ToObject(typeof(AccessRestrictionType), values[10]); + } + + if (values[11] != null) + { + metadata.RolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(values[11])); + } + + if (values[12] != null) + { + metadata.UserRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(values[12])); + } + + // check if NamespaceMetadata is defined for NamespaceUri + string namespaceUri = Server.NamespaceUris.GetString(target.NodeId.NamespaceIndex); + NamespaceMetadataState namespaceMetadataState = Server.NodeManager.ConfigurationNodeManager.GetNamespaceMetadataState(namespaceUri); + + if (namespaceMetadataState != null) + { + List namespaceMetadataValues; + + if (namespaceMetadataState.DefaultAccessRestrictions != null) + { + // get DefaultAccessRestrictions for Namespace + namespaceMetadataValues = namespaceMetadataState.DefaultAccessRestrictions.ReadAttributes(systemContext, Attributes.Value); + + if (namespaceMetadataValues[0] != null) + { + metadata.DefaultAccessRestrictions = (AccessRestrictionType)Enum.ToObject(typeof(AccessRestrictionType), namespaceMetadataValues[0]); + } + } + + if (namespaceMetadataState.DefaultRolePermissions != null) + { + // get DefaultRolePermissions for Namespace + namespaceMetadataValues = namespaceMetadataState.DefaultRolePermissions.ReadAttributes(systemContext, Attributes.Value); + + if (namespaceMetadataValues[0] != null) + { + metadata.DefaultRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(namespaceMetadataValues[0])); + } + } + + if (namespaceMetadataState.DefaultUserRolePermissions != null) + { + // get DefaultUserRolePermissions for Namespace + namespaceMetadataValues = namespaceMetadataState.DefaultUserRolePermissions.ReadAttributes(systemContext, Attributes.Value); + + if (namespaceMetadataValues[0] != null) + { + metadata.DefaultUserRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(namespaceMetadataValues[0])); + } + } + } + + // get instance references. + BaseInstanceState instance = target as BaseInstanceState; + + if (instance != null) + { + metadata.TypeDefinition = instance.TypeDefinitionId; + metadata.ModellingRule = instance.ModellingRuleId; + } + + // fill in the common attributes. + return metadata; + } + } + + /// + /// Browses the references from a node managed by the node manager. + /// + /// + /// The continuation point is created for every browse operation and contains the browse parameters. + /// The node manager can store its state information in the Data and Index properties. + /// + public virtual void Browse( + OperationContext context, + ref ContinuationPoint continuationPoint, + IList references) + { + if (continuationPoint == null) throw new ArgumentNullException(nameof(continuationPoint)); + if (references == null) throw new ArgumentNullException(nameof(references)); + + ServerSystemContext systemContext = m_systemContext.Copy(context); + + // check for valid view. + ValidateViewDescription(systemContext, continuationPoint.View); + + INodeBrowser browser = null; + + lock (Lock) + { + // check for valid handle. + NodeHandle handle = IsHandleInNamespace(continuationPoint.NodeToBrowse); + + if (handle == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + // validate node. + NodeState source = ValidateNode(systemContext, handle, null); + + if (source == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + // check if node is in the view. + if (!IsNodeInView(systemContext, continuationPoint, source)) + { + throw new ServiceResultException(StatusCodes.BadNodeNotInView); + } + + // check for previous continuation point. + browser = continuationPoint.Data as INodeBrowser; + + // fetch list of references. + if (browser == null) + { + // create a new browser. + continuationPoint.Data = browser = source.CreateBrowser( + systemContext, + continuationPoint.View, + continuationPoint.ReferenceTypeId, + continuationPoint.IncludeSubtypes, + continuationPoint.BrowseDirection, + null, + null, + false); + } + } + // prevent multiple access the browser object. + lock (browser) + { + // apply filters to references. + Dictionary cache = new Dictionary(); + + for (IReference reference = browser.Next(); reference != null; reference = browser.Next()) + { + // validate Browse permission + ServiceResult serviceResult = ValidateRolePermissions(context, + ExpandedNodeId.ToNodeId(reference.TargetId, Server.NamespaceUris), + PermissionType.Browse); + if (ServiceResult.IsBad(serviceResult)) + { + // ignore reference + continue; + } + // create the type definition reference. + ReferenceDescription description = GetReferenceDescription(systemContext, cache, reference, continuationPoint); + + if (description == null) + { + continue; + } + + // check if limit reached. + if (continuationPoint.MaxResultsToReturn != 0 && references.Count >= continuationPoint.MaxResultsToReturn) + { + browser.Push(reference); + return; + } + + references.Add(description); + } + + // release the continuation point if all done. + continuationPoint.Dispose(); + continuationPoint = null; + } + } + + #region Browse Support Functions + /// + /// Validates the view description passed to a browse request (throws on error). + /// + protected virtual void ValidateViewDescription(ServerSystemContext context, ViewDescription view) + { + if (ViewDescription.IsDefault(view)) + { + return; + } + + ViewState node = (ViewState)FindPredefinedNode(view.ViewId, typeof(ViewState)); + + if (node == null) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + if (view.Timestamp != DateTime.MinValue) + { + throw new ServiceResultException(StatusCodes.BadViewTimestampInvalid); + } + + if (view.ViewVersion != 0) + { + throw new ServiceResultException(StatusCodes.BadViewVersionInvalid); + } + } + + /// + /// Checks if the node is in the view. + /// + protected virtual bool IsNodeInView(ServerSystemContext context, ContinuationPoint continuationPoint, NodeState node) + { + if (continuationPoint == null || ViewDescription.IsDefault(continuationPoint.View)) + { + return true; + } + + return IsNodeInView(context, continuationPoint.View.ViewId, node); + } + + /// + /// Checks if the node is in the view. + /// + protected virtual bool IsNodeInView(ServerSystemContext context, NodeId viewId, NodeState node) + { + ViewState view = (ViewState)FindPredefinedNode(viewId, typeof(ViewState)); + + if (view != null) + { + return true; + } + + return false; + } + + /// + /// Checks if the reference is in the view. + /// + protected virtual bool IsReferenceInView(ServerSystemContext context, ContinuationPoint continuationPoint, IReference reference) + { + return true; + } + + /// + /// Returns the references for the node that meets the criteria specified. + /// + protected virtual ReferenceDescription GetReferenceDescription( + ServerSystemContext context, + Dictionary cache, + IReference reference, + ContinuationPoint continuationPoint) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + // create the type definition reference. + ReferenceDescription description = new ReferenceDescription(); + + description.NodeId = reference.TargetId; + description.SetReferenceType(continuationPoint.ResultMask, reference.ReferenceTypeId, !reference.IsInverse); + + // check if reference is in the view. + if (!IsReferenceInView(context, continuationPoint, reference)) + { + return null; + } + + // do not cache target parameters for remote nodes. + if (reference.TargetId.IsAbsolute) + { + // only return remote references if no node class filter is specified. + if (continuationPoint.NodeClassMask != 0) + { + return null; + } + + return description; + } + + NodeState target = null; + + // check for local reference. + NodeStateReference referenceInfo = reference as NodeStateReference; + + if (referenceInfo != null) + { + target = referenceInfo.Target; + } + + // check for internal reference. + if (target == null) + { + NodeHandle handle = GetManagerHandle(context, (NodeId)reference.TargetId, null) as NodeHandle; + + if (handle != null) + { + target = ValidateNode(context, handle, null); + } + } + + // the target may be a reference to a node in another node manager. In these cases + // the target attributes must be fetched by the caller. The Unfiltered flag tells the + // caller to do that. + if (target == null) + { + description.Unfiltered = true; + return description; + } + + // apply node class filter. + if (continuationPoint.NodeClassMask != 0 && ((continuationPoint.NodeClassMask & (uint)target.NodeClass) == 0)) + { + return null; + } + + // check if target is in the view. + if (!IsNodeInView(context, continuationPoint, target)) + { + return null; + } + + // look up the type definition. + NodeId typeDefinition = null; + + BaseInstanceState instance = target as BaseInstanceState; + + if (instance != null) + { + typeDefinition = instance.TypeDefinitionId; + } + + // set target attributes. + description.SetTargetAttributes( + continuationPoint.ResultMask, + target.NodeClass, + target.BrowseName, + target.DisplayName, + typeDefinition); + + return description; + } + #endregion + + /// + /// Returns the target of the specified browse path fragment(s). + /// + /// + /// If reference exists but the node manager does not know the browse name it must + /// return the NodeId as an unresolvedTargetIds. The caller will try to check the + /// browse name. + /// + public virtual void TranslateBrowsePath( + OperationContext context, + object sourceHandle, + RelativePathElement relativePath, + IList targetIds, + IList unresolvedTargetIds) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + + lock (Lock) + { + // check for valid handle. + NodeHandle handle = IsHandleInNamespace(sourceHandle); + + if (handle == null) + { + return; + } + + // validate node. + NodeState source = ValidateNode(systemContext, handle, operationCache); + + if (source == null) + { + return; + } + + // get list of references that relative path. + INodeBrowser browser = source.CreateBrowser( + systemContext, + null, + relativePath.ReferenceTypeId, + relativePath.IncludeSubtypes, + (relativePath.IsInverse) ? BrowseDirection.Inverse : BrowseDirection.Forward, + relativePath.TargetName, + null, + false); + + // check the browse names. + try + { + for (IReference reference = browser.Next(); reference != null; reference = browser.Next()) + { + // ignore unknown external references. + if (reference.TargetId.IsAbsolute) + { + continue; + } + + NodeState target = null; + + // check for local reference. + NodeStateReference referenceInfo = reference as NodeStateReference; + + if (referenceInfo != null) + { + target = referenceInfo.Target; + } + + if (target == null) + { + NodeId targetId = (NodeId)reference.TargetId; + + // the target may be a reference to a node in another node manager. + if (!IsNodeIdInNamespace(targetId)) + { + unresolvedTargetIds.Add((NodeId)reference.TargetId); + continue; + } + + // look up the target manually. + NodeHandle targetHandle = GetManagerHandle(systemContext, targetId, operationCache); + + if (targetHandle == null) + { + continue; + } + + // validate target. + target = ValidateNode(systemContext, targetHandle, operationCache); + + if (target == null) + { + continue; + } + } + + // check browse name. + if (target.BrowseName == relativePath.TargetName) + { + if (!targetIds.Contains(reference.TargetId)) + { + targetIds.Add(reference.TargetId); + } + } + } + } + finally + { + browser.Dispose(); + } + } + } + + /// + /// Reads the value for the specified attribute. + /// + public virtual void Read( + OperationContext context, + double maxAge, + IList nodesToRead, + IList values, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + ReadValueId nodeToRead = nodesToRead[ii]; + + // skip items that have already been processed. + if (nodeToRead.Processed) + { + continue; + } + + // check for valid handle. + NodeHandle handle = GetManagerHandle(systemContext, nodeToRead.NodeId, operationCache); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + nodeToRead.Processed = true; + + // create an initial value. + DataValue value = values[ii] = new DataValue(); + + value.Value = null; + value.ServerTimestamp = DateTime.UtcNow; + value.SourceTimestamp = DateTime.MinValue; + value.StatusCode = StatusCodes.Good; + + // check if the node is a area in memory. + if (handle.Node == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a separate operation + handle.Index = ii; + nodesToValidate.Add(handle); + + continue; + } + + // read the attribute value. + errors[ii] = handle.Node.ReadAttribute( + systemContext, + nodeToRead.AttributeId, + nodeToRead.ParsedIndexRange, + nodeToRead.DataEncoding, + value); + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + } + + // validates the nodes (reads values from the underlying data source if required). + Read( + systemContext, + nodesToRead, + values, + errors, + nodesToValidate, + operationCache); + } + + #region Read Support Functions + /// + /// Finds a node in the dynamic cache. + /// + /// The current context. + /// The node handle. + /// The cache to search. + /// The node if found. Null otherwise. + protected virtual NodeState FindNodeInCache( + ServerSystemContext context, + NodeHandle handle, + IDictionary cache) + { + NodeState target = null; + + // not valid if no root. + if (handle == null) + { + return null; + } + + // check if previously validated. + if (handle.Validated) + { + return handle.Node; + } + + // construct id for root node. + NodeId rootId = handle.RootId; + + if (cache != null) + { + // lookup component in local cache for request. + if (cache.TryGetValue(handle.NodeId, out target)) + { + return target; + } + + // lookup root in local cache for request. + if (!String.IsNullOrEmpty(handle.ComponentPath)) + { + if (cache.TryGetValue(rootId, out target)) + { + target = target.FindChildBySymbolicName(context, handle.ComponentPath); + + // component exists. + if (target != null) + { + return target; + } + } + } + } + + // lookup component in shared cache. + target = LookupNodeInComponentCache(context, handle); + + if (target != null) + { + return target; + } + + return null; + } + + /// + /// Marks the handle as validated and saves the node in the dynamic cache. + /// + protected virtual NodeState ValidationComplete( + ServerSystemContext context, + NodeHandle handle, + NodeState node, + IDictionary cache) + { + handle.Node = node; + handle.Validated = true; + + if (cache != null && handle != null) + { + cache[handle.NodeId] = node; + } + + return node; + } + + /// + /// Verifies that the specified node exists. + /// + protected virtual NodeState ValidateNode( + ServerSystemContext context, + NodeHandle handle, + IDictionary cache) + { + // lookup in cache. + NodeState target = FindNodeInCache(context, handle, cache); + + if (target != null) + { + handle.Node = target; + handle.Validated = true; + return handle.Node; + } + + // return default. + return handle.Node; + } + + /// + /// Validates the nodes and reads the values from the underlying source. + /// + /// The context. + /// The nodes to read. + /// The values. + /// The errors. + /// The nodes to validate. + /// The cache. + protected virtual void Read( + ServerSystemContext context, + IList nodesToRead, + IList values, + IList errors, + List nodesToValidate, + IDictionary cache) + { + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + NodeHandle handle = nodesToValidate[ii]; + + lock (Lock) + { + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + ReadValueId nodeToRead = nodesToRead[handle.Index]; + DataValue value = values[handle.Index]; + + // update the attribute value. + errors[handle.Index] = source.ReadAttribute( + context, + nodeToRead.AttributeId, + nodeToRead.ParsedIndexRange, + nodeToRead.DataEncoding, + value); + } + } + } + #endregion + + /// + /// Writes the value for the specified attributes. + /// + public virtual void Write( + OperationContext context, + IList nodesToWrite, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToWrite.Count; ii++) + { + + WriteValue nodeToWrite = nodesToWrite[ii]; + + // skip items that have already been processed. + if (nodeToWrite.Processed) + { + continue; + } + + // check for valid handle. + NodeHandle handle = GetManagerHandle(systemContext, nodeToWrite.NodeId, operationCache); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + nodeToWrite.Processed = true; + + // index range is not supported. + if (nodeToWrite.AttributeId != Attributes.Value) + { + if (!String.IsNullOrEmpty(nodeToWrite.IndexRange)) + { + errors[ii] = StatusCodes.BadWriteNotSupported; + continue; + } + } + + // check if the node is a area in memory. + if (handle.Node == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a separate operation. + handle.Index = ii; + nodesToValidate.Add(handle); + + continue; + } + + // check if the node is AnalogItem and the value is outside the InstrumentRange. + AnalogItemState analogItemState = handle.Node as AnalogItemState; + if (analogItemState != null && analogItemState.InstrumentRange != null) + { + try + { + double newValue = System.Convert.ToDouble(nodeToWrite.Value.Value); + + if (newValue > analogItemState.InstrumentRange.Value.High || + newValue < analogItemState.InstrumentRange.Value.Low) + { + errors[ii] = StatusCodes.BadOutOfRange; + continue; + } + } + catch + { + //skip the InstrumentRange check if the transformation isn't possible. + } + } + + Utils.TraceDebug("WRITE: Value={0} Range={1}", nodeToWrite.Value.WrappedValue, nodeToWrite.IndexRange); + + PropertyState propertyState = handle.Node as PropertyState; + object previousPropertyValue = null; + + if (propertyState != null) + { + ExtensionObject extension = propertyState.Value as ExtensionObject; + if (extension != null) + { + previousPropertyValue = extension.Body; + } + else + { + previousPropertyValue = propertyState.Value; + } + } + + // write the attribute value. + errors[ii] = handle.Node.WriteAttribute( + systemContext, + nodeToWrite.AttributeId, + nodeToWrite.ParsedIndexRange, + nodeToWrite.Value); + + if (!ServiceResult.IsGood(errors[ii])) + { + continue; + } + + if (propertyState != null) + { + object propertyValue; + ExtensionObject extension = nodeToWrite.Value.Value as ExtensionObject; + + if (extension != null) + { + propertyValue = extension.Body; + } + else + { + propertyValue = nodeToWrite.Value.Value; + } + + CheckIfSemanticsHaveChanged(systemContext, propertyState, propertyValue, previousPropertyValue); + } + + // updates to source finished - report changes to monitored items. + handle.Node.ClearChangeMasks(systemContext, false); + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + } + + // validates the nodes and writes the value to the underlying system. + Write( + systemContext, + nodesToWrite, + errors, + nodesToValidate, + operationCache); + } + + private void CheckIfSemanticsHaveChanged(ServerSystemContext systemContext, PropertyState property, object newPropertyValue, object previousPropertyValue) + { + // check if the changed property is one that can trigger semantic changes + string propertyName = property.BrowseName.Name; + + if (propertyName != BrowseNames.EURange && + propertyName != BrowseNames.InstrumentRange && + propertyName != BrowseNames.EngineeringUnits && + propertyName != BrowseNames.Title && + propertyName != BrowseNames.AxisDefinition && + propertyName != BrowseNames.FalseState && + propertyName != BrowseNames.TrueState && + propertyName != BrowseNames.EnumStrings && + propertyName != BrowseNames.XAxisDefinition && + propertyName != BrowseNames.YAxisDefinition && + propertyName != BrowseNames.ZAxisDefinition) + { + return; + } + + //look for the Parent and its monitoring items + foreach (var monitoredNode in m_monitoredNodes.Values) + { + var propertyState = monitoredNode.Node.FindChild(systemContext, property.BrowseName); + + if (propertyState != null && property != null && propertyState.NodeId == property.NodeId && !Utils.IsEqual(newPropertyValue, previousPropertyValue)) + { + foreach (var monitoredItem in monitoredNode.DataChangeMonitoredItems) + { + if (monitoredItem.AttributeId == Attributes.Value) + { + NodeState node = monitoredNode.Node; + + if ((node is AnalogItemState && (propertyName == BrowseNames.EURange || propertyName == BrowseNames.EngineeringUnits)) || + (node is TwoStateDiscreteState && (propertyName == BrowseNames.FalseState || propertyName == BrowseNames.TrueState)) || + (node is MultiStateDiscreteState && (propertyName == BrowseNames.EnumStrings)) || + (node is ArrayItemState && (propertyName == BrowseNames.InstrumentRange || propertyName == BrowseNames.EURange || propertyName == BrowseNames.EngineeringUnits || propertyName == BrowseNames.Title)) || + ((node is YArrayItemState || node is XYArrayItemState) && (propertyName == BrowseNames.InstrumentRange || propertyName == BrowseNames.EURange || propertyName == BrowseNames.EngineeringUnits || propertyName == BrowseNames.Title || propertyName == BrowseNames.XAxisDefinition)) || + (node is ImageItemState && (propertyName == BrowseNames.InstrumentRange || propertyName == BrowseNames.EURange || propertyName == BrowseNames.EngineeringUnits || propertyName == BrowseNames.Title || propertyName == BrowseNames.XAxisDefinition || propertyName == BrowseNames.YAxisDefinition)) || + (node is CubeItemState && (propertyName == BrowseNames.InstrumentRange || propertyName == BrowseNames.EURange || propertyName == BrowseNames.EngineeringUnits || propertyName == BrowseNames.Title || propertyName == BrowseNames.XAxisDefinition || propertyName == BrowseNames.YAxisDefinition || propertyName == BrowseNames.ZAxisDefinition)) || + (node is NDimensionArrayItemState && (propertyName == BrowseNames.InstrumentRange || propertyName == BrowseNames.EURange || propertyName == BrowseNames.EngineeringUnits || propertyName == BrowseNames.Title || propertyName == BrowseNames.AxisDefinition))) + { + monitoredItem.SetSemanticsChanged(); + + DataValue value = new DataValue(); + value.ServerTimestamp = DateTime.UtcNow; + + monitoredNode.Node.ReadAttribute(systemContext, Attributes.Value, monitoredItem.IndexRange, null, value); + + monitoredItem.QueueValue(value, ServiceResult.Good, true); + } + } + } + } + } + } + + #region Write Support Functions + /// + /// Validates the nodes and writes the value to the underlying system. + /// + /// The context. + /// The nodes to write. + /// The errors. + /// The nodes to validate. + /// The cache. + protected virtual void Write( + ServerSystemContext context, + IList nodesToWrite, + IList errors, + List nodesToValidate, + IDictionary cache) + { + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + NodeHandle handle = nodesToValidate[ii]; + + lock (Lock) + { + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + WriteValue nodeToWrite = nodesToWrite[handle.Index]; + + // write the attribute value. + errors[handle.Index] = source.WriteAttribute( + context, + nodeToWrite.AttributeId, + nodeToWrite.ParsedIndexRange, + nodeToWrite.Value); + + // updates to source finished - report changes to monitored items. + source.ClearChangeMasks(context, false); + } + } + } + #endregion + + /// + /// Reads the history for the specified nodes. + /// + public virtual void HistoryRead( + OperationContext context, + HistoryReadDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + IList nodesToRead, + IList results, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToProcess = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + HistoryReadValueId nodeToRead = nodesToRead[ii]; + + // skip items that have already been processed. + if (nodeToRead.Processed) + { + continue; + } + + // check for valid handle. + NodeHandle handle = GetManagerHandle(systemContext, nodeToRead.NodeId, operationCache); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + nodeToRead.Processed = true; + + // create an initial result. + HistoryReadResult result = results[ii] = new HistoryReadResult(); + + result.HistoryData = null; + result.ContinuationPoint = null; + result.StatusCode = StatusCodes.Good; + + // check if the node is a area in memory. + if (handle.Node == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation + handle.Index = ii; + nodesToProcess.Add(handle); + + continue; + } + + errors[ii] = StatusCodes.BadHistoryOperationUnsupported; + + // check for data history variable. + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable != null) + { + if ((variable.AccessLevel & AccessLevels.HistoryRead) != 0) + { + handle.Index = ii; + nodesToProcess.Add(handle); + continue; + } + } + + // check for event history object. + BaseObjectState notifier = handle.Node as BaseObjectState; + + if (notifier != null) + { + if ((notifier.EventNotifier & EventNotifiers.HistoryRead) != 0) + { + handle.Index = ii; + nodesToProcess.Add(handle); + continue; + } + } + } + + // check for nothing to do. + if (nodesToProcess.Count == 0) + { + return; + } + } + + // validates the nodes (reads values from the underlying data source if required). + HistoryRead( + systemContext, + details, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead, + results, + errors, + nodesToProcess, + operationCache); + } + + #region HistoryRead Support Functions + /// + /// Releases the continuation points. + /// + protected virtual void HistoryReleaseContinuationPoints( + ServerSystemContext context, + IList nodesToRead, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadContinuationPointInvalid; + } + } + + /// + /// Reads raw history data. + /// + protected virtual void HistoryReadRawModified( + ServerSystemContext context, + ReadRawModifiedDetails details, + TimestampsToReturn timestampsToReturn, + IList nodesToRead, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Reads processed history data. + /// + protected virtual void HistoryReadProcessed( + ServerSystemContext context, + ReadProcessedDetails details, + TimestampsToReturn timestampsToReturn, + IList nodesToRead, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Reads history data at specified times. + /// + protected virtual void HistoryReadAtTime( + ServerSystemContext context, + ReadAtTimeDetails details, + TimestampsToReturn timestampsToReturn, + IList nodesToRead, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Reads history events. + /// + protected virtual void HistoryReadEvents( + ServerSystemContext context, + ReadEventDetails details, + TimestampsToReturn timestampsToReturn, + IList nodesToRead, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Validates the nodes and reads the values from the underlying source. + /// + protected virtual void HistoryRead( + ServerSystemContext context, + HistoryReadDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + IList nodesToRead, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + // check if continuation points are being released. + if (releaseContinuationPoints) + { + HistoryReleaseContinuationPoints( + context, + nodesToRead, + errors, + nodesToProcess, + cache); + + return; + } + + // check timestamps to return. + if (timestampsToReturn < TimestampsToReturn.Source || timestampsToReturn > TimestampsToReturn.Neither) + { + throw new ServiceResultException(StatusCodes.BadTimestampsToReturnInvalid); + } + + // handle raw data request. + ReadRawModifiedDetails readRawModifiedDetails = details as ReadRawModifiedDetails; + + if (readRawModifiedDetails != null) + { + // at least one must be provided. + if (readRawModifiedDetails.StartTime == DateTime.MinValue && readRawModifiedDetails.EndTime == DateTime.MinValue) + { + throw new ServiceResultException(StatusCodes.BadInvalidTimestampArgument); + } + + // if one is null the num values must be provided. + if (readRawModifiedDetails.StartTime == DateTime.MinValue || readRawModifiedDetails.EndTime == DateTime.MinValue) + { + if (readRawModifiedDetails.NumValuesPerNode == 0) + { + throw new ServiceResultException(StatusCodes.BadInvalidTimestampArgument); + } + } + + HistoryReadRawModified( + context, + readRawModifiedDetails, + timestampsToReturn, + nodesToRead, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle processed data request. + ReadProcessedDetails readProcessedDetails = details as ReadProcessedDetails; + + if (readProcessedDetails != null) + { + // check the list of aggregates. + if (readProcessedDetails.AggregateType == null || readProcessedDetails.AggregateType.Count != nodesToRead.Count) + { + throw new ServiceResultException(StatusCodes.BadAggregateListMismatch); + } + + // check start/end time. + if (readProcessedDetails.StartTime == DateTime.MinValue || readProcessedDetails.EndTime == DateTime.MinValue) + { + throw new ServiceResultException(StatusCodes.BadInvalidTimestampArgument); + } + + HistoryReadProcessed( + context, + readProcessedDetails, + timestampsToReturn, + nodesToRead, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle raw data at time request. + ReadAtTimeDetails readAtTimeDetails = details as ReadAtTimeDetails; + + if (readAtTimeDetails != null) + { + HistoryReadAtTime( + context, + readAtTimeDetails, + timestampsToReturn, + nodesToRead, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle read events request. + ReadEventDetails readEventDetails = details as ReadEventDetails; + + if (readEventDetails != null) + { + // check start/end time and max values. + if (readEventDetails.NumValuesPerNode == 0) + { + if (readEventDetails.StartTime == DateTime.MinValue || readEventDetails.EndTime == DateTime.MinValue) + { + throw new ServiceResultException(StatusCodes.BadInvalidTimestampArgument); + } + } + else + { + if (readEventDetails.StartTime == DateTime.MinValue && readEventDetails.EndTime == DateTime.MinValue) + { + throw new ServiceResultException(StatusCodes.BadInvalidTimestampArgument); + } + } + + // validate the event filter. + EventFilter.Result result = readEventDetails.Filter.Validate(new FilterContext(m_server.NamespaceUris, m_server.TypeTree, context)); + + if (ServiceResult.IsBad(result.Status)) + { + throw new ServiceResultException(result.Status); + } + + // read the event history. + HistoryReadEvents( + context, + readEventDetails, + timestampsToReturn, + nodesToRead, + results, + errors, + nodesToProcess, + cache); + + return; + } + } + #endregion + + /// + /// Updates the history for the specified nodes. + /// + public virtual void HistoryUpdate( + OperationContext context, + Type detailsType, + IList nodesToUpdate, + IList results, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToProcess = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToUpdate.Count; ii++) + { + HistoryUpdateDetails nodeToUpdate = nodesToUpdate[ii]; + + // skip items that have already been processed. + if (nodeToUpdate.Processed) + { + continue; + } + + // check for valid handle. + NodeHandle handle = GetManagerHandle(systemContext, nodeToUpdate.NodeId, operationCache); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + nodeToUpdate.Processed = true; + + // create an initial result. + HistoryUpdateResult result = results[ii] = new HistoryUpdateResult(); + result.StatusCode = StatusCodes.Good; + + // check if the node is a area in memory. + if (handle.Node == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation + handle.Index = ii; + nodesToProcess.Add(handle); + continue; + } + + errors[ii] = StatusCodes.BadHistoryOperationUnsupported; + + // check for data history variable. + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable != null) + { + if ((variable.AccessLevel & AccessLevels.HistoryWrite) != 0) + { + handle.Index = ii; + nodesToProcess.Add(handle); + continue; + } + } + + // check for event history object. + BaseObjectState notifier = handle.Node as BaseObjectState; + + if (notifier != null) + { + if ((notifier.EventNotifier & EventNotifiers.HistoryWrite) != 0) + { + handle.Index = ii; + nodesToProcess.Add(handle); + continue; + } + } + } + + // check for nothing to do. + if (nodesToProcess.Count == 0) + { + return; + } + } + + // validates the nodes and updates. + HistoryUpdate( + systemContext, + detailsType, + nodesToUpdate, + results, + errors, + nodesToProcess, + operationCache); + } + + #region HistoryUpdate Support Functions + /// + /// Validates the nodes and updates the history. + /// + protected virtual void HistoryUpdate( + ServerSystemContext context, + Type detailsType, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + // handle update data request. + if (detailsType == typeof(UpdateDataDetails)) + { + UpdateDataDetails[] details = new UpdateDataDetails[nodesToUpdate.Count]; + + for (int ii = 0; ii < details.Length; ii++) + { + details[ii] = (UpdateDataDetails)nodesToUpdate[ii]; + } + + HistoryUpdateData( + context, + details, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle update structure data request. + if (detailsType == typeof(UpdateStructureDataDetails)) + { + UpdateStructureDataDetails[] details = new UpdateStructureDataDetails[nodesToUpdate.Count]; + + for (int ii = 0; ii < details.Length; ii++) + { + details[ii] = (UpdateStructureDataDetails)nodesToUpdate[ii]; + } + + HistoryUpdateStructureData( + context, + details, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle update events request. + if (detailsType == typeof(UpdateEventDetails)) + { + UpdateEventDetails[] details = new UpdateEventDetails[nodesToUpdate.Count]; + + for (int ii = 0; ii < details.Length; ii++) + { + details[ii] = (UpdateEventDetails)nodesToUpdate[ii]; + } + + HistoryUpdateEvents( + context, + details, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle delete raw data request. + if (detailsType == typeof(DeleteRawModifiedDetails)) + { + DeleteRawModifiedDetails[] details = new DeleteRawModifiedDetails[nodesToUpdate.Count]; + + for (int ii = 0; ii < details.Length; ii++) + { + details[ii] = (DeleteRawModifiedDetails)nodesToUpdate[ii]; + } + + HistoryDeleteRawModified( + context, + details, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle delete at time request. + if (detailsType == typeof(DeleteAtTimeDetails)) + { + DeleteAtTimeDetails[] details = new DeleteAtTimeDetails[nodesToUpdate.Count]; + + for (int ii = 0; ii < details.Length; ii++) + { + details[ii] = (DeleteAtTimeDetails)nodesToUpdate[ii]; + } + + HistoryDeleteAtTime( + context, + details, + results, + errors, + nodesToProcess, + cache); + + return; + } + + // handle delete at time request. + if (detailsType == typeof(DeleteEventDetails)) + { + DeleteEventDetails[] details = new DeleteEventDetails[nodesToUpdate.Count]; + + for (int ii = 0; ii < details.Length; ii++) + { + details[ii] = (DeleteEventDetails)nodesToUpdate[ii]; + } + + HistoryDeleteEvents( + context, + details, + results, + errors, + nodesToProcess, + cache); + + return; + } + } + + /// + /// Updates the data history for one or more nodes. + /// + protected virtual void HistoryUpdateData( + ServerSystemContext context, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Updates the structured data history for one or more nodes. + /// + protected virtual void HistoryUpdateStructureData( + ServerSystemContext context, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Updates the event history for one or more nodes. + /// + protected virtual void HistoryUpdateEvents( + ServerSystemContext context, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Deletes the data history for one or more nodes. + /// + protected virtual void HistoryDeleteRawModified( + ServerSystemContext context, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Deletes the data history for one or more nodes. + /// + protected virtual void HistoryDeleteAtTime( + ServerSystemContext context, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + + /// + /// Deletes the event history for one or more nodes. + /// + protected virtual void HistoryDeleteEvents( + ServerSystemContext context, + IList nodesToUpdate, + IList results, + IList errors, + List nodesToProcess, + IDictionary cache) + { + for (int ii = 0; ii < nodesToProcess.Count; ii++) + { + NodeHandle handle = nodesToProcess[ii]; + + // validate node. + NodeState source = ValidateNode(context, handle, cache); + + if (source == null) + { + continue; + } + + errors[handle.Index] = StatusCodes.BadHistoryOperationUnsupported; + } + } + #endregion + + /// + /// Calls a method on the specified nodes. + /// + public virtual void Call( + OperationContext context, + IList methodsToCall, + IList results, + IList errors) + { + ServerSystemContext systemContext = SystemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + + for (int ii = 0; ii < methodsToCall.Count; ii++) + { + CallMethodRequest methodToCall = methodsToCall[ii]; + + // skip items that have already been processed. + if (methodToCall.Processed) + { + continue; + } + + MethodState method = null; + + lock (Lock) + { + // check for valid handle. + NodeHandle handle = GetManagerHandle(systemContext, methodToCall.ObjectId, operationCache); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + methodToCall.Processed = true; + + // validate the source node. + NodeState source = ValidateNode(systemContext, handle, operationCache); + + if (source == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + continue; + } + + // find the method. + method = source.FindMethod(systemContext, methodToCall.MethodId); + + if (method == null) + { + // check for loose coupling. + if (source.ReferenceExists(ReferenceTypeIds.HasComponent, false, methodToCall.MethodId)) + { + method = (MethodState)FindPredefinedNode(methodToCall.MethodId, typeof(MethodState)); + } + + if (method == null) + { + errors[ii] = StatusCodes.BadMethodInvalid; + continue; + } + } + } + + // call the method. + CallMethodResult result = results[ii] = new CallMethodResult(); + + errors[ii] = Call( + systemContext, + methodToCall, + method, + result); + } + } + + /// + /// Calls a method on an object. + /// + protected virtual ServiceResult Call( + ISystemContext context, + CallMethodRequest methodToCall, + MethodState method, + CallMethodResult result) + { + ServerSystemContext systemContext = context as ServerSystemContext; + List argumentErrors = new List(); + VariantCollection outputArguments = new VariantCollection(); + + ServiceResult error = method.Call( + context, + methodToCall.ObjectId, + methodToCall.InputArguments, + argumentErrors, + outputArguments); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // check for argument errors. + bool argumentsValid = true; + + for (int jj = 0; jj < argumentErrors.Count; jj++) + { + ServiceResult argumentError = argumentErrors[jj]; + + if (argumentError != null) + { + result.InputArgumentResults.Add(argumentError.StatusCode); + + if (ServiceResult.IsBad(argumentError)) + { + argumentsValid = false; + } + } + else + { + result.InputArgumentResults.Add(StatusCodes.Good); + } + + // only fill in diagnostic info if it is requested. + if (systemContext.OperationContext != null) + { + if ((systemContext.OperationContext.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + if (ServiceResult.IsBad(argumentError)) + { + argumentsValid = false; + result.InputArgumentDiagnosticInfos.Add(new DiagnosticInfo(argumentError, systemContext.OperationContext.DiagnosticsMask, false, systemContext.OperationContext.StringTable)); + } + else + { + result.InputArgumentDiagnosticInfos.Add(null); + } + } + } + } + + // check for validation errors. + if (!argumentsValid) + { + result.StatusCode = StatusCodes.BadInvalidArgument; + return result.StatusCode; + } + + // do not return diagnostics if there are no errors. + result.InputArgumentDiagnosticInfos.Clear(); + + // return output arguments. + result.OutputArguments = outputArguments; + + return ServiceResult.Good; + } + + + /// + /// Subscribes or unsubscribes to events produced by the specified source. + /// + /// + /// This method is called when a event subscription is created or deletes. The node manager + /// must start/stop reporting events for the specified object and all objects below it in + /// the notifier hierarchy. + /// + public virtual ServiceResult SubscribeToEvents( + OperationContext context, + object sourceId, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + ServerSystemContext systemContext = SystemContext.Copy(context); + + lock (Lock) + { + // check for valid handle. + NodeHandle handle = IsHandleInNamespace(sourceId); + + if (handle == null) + { + return StatusCodes.BadNodeIdInvalid; + } + + // check for valid node. + NodeState source = ValidateNode(systemContext, handle, null); + + if (source == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + // subscribe to events. + return SubscribeToEvents(systemContext, source, monitoredItem, unsubscribe); + } + } + + /// + /// Subscribes or unsubscribes to events produced by all event sources. + /// + /// + /// This method is called when a event subscription is created or deleted. The node + /// manager must start/stop reporting events for all objects that it manages. + /// + public virtual ServiceResult SubscribeToAllEvents( + OperationContext context, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + ServerSystemContext systemContext = SystemContext.Copy(context); + + lock (Lock) + { + // A client has subscribed to the Server object which means all events produced + // by this manager must be reported. This is done by incrementing the monitoring + // reference count for all root notifiers. + if (m_rootNotifiers != null) + { + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + SubscribeToEvents(systemContext, m_rootNotifiers[ii], monitoredItem, unsubscribe); + } + } + + return ServiceResult.Good; + } + } + + #region SubscribeToEvents Support Functions + /// + /// Adds a root notifier. + /// + /// The notifier. + /// + /// A root notifier is a notifier owned by the NodeManager that is not the target of a + /// HasNotifier reference. These nodes need to be linked directly to the Server object. + /// + protected virtual void AddRootNotifier(NodeState notifier) + { + if (m_rootNotifiers == null) + { + m_rootNotifiers = new List(); + } + + bool mustAdd = true; + + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + if (Object.ReferenceEquals(notifier, m_rootNotifiers[ii])) + { + return; + } + + if (m_rootNotifiers[ii].NodeId == notifier.NodeId) + { + m_rootNotifiers[ii] = notifier; + mustAdd = false; + break; + } + } + + if (mustAdd) + { + m_rootNotifiers.Add(notifier); + } + + // need to prevent recursion with the server object. + if (notifier.NodeId != ObjectIds.Server) + { + notifier.OnReportEvent = OnReportEvent; + + if (!notifier.ReferenceExists(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server)) + { + notifier.AddReference(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server); + } + } + + // subscribe to existing events. + if (m_server.EventManager != null) + { + IList monitoredItems = m_server.EventManager.GetMonitoredItems(); + + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + if (monitoredItems[ii].MonitoringAllEvents) + { + SubscribeToEvents( + SystemContext, + notifier, + monitoredItems[ii], + true); + } + } + } + } + + /// + /// Removes a root notifier previously added with AddRootNotifier. + /// + /// The notifier. + protected virtual void RemoveRootNotifier(NodeState notifier) + { + if (m_rootNotifiers != null) + { + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + if (Object.ReferenceEquals(notifier, m_rootNotifiers[ii])) + { + notifier.OnReportEvent = null; + notifier.RemoveReference(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server); + m_rootNotifiers.RemoveAt(ii); + break; + } + } + } + } + + /// + /// Reports an event for a root notifier. + /// + protected virtual void OnReportEvent( + ISystemContext context, + NodeState node, + IFilterTarget e) + { + Server.ReportEvent(context, e); + } + + /// + /// Subscribes to events. + /// + /// The context. + /// The source. + /// The monitored item. + /// if set to true [unsubscribe]. + /// Any error code. + protected virtual ServiceResult SubscribeToEvents( + ServerSystemContext context, + NodeState source, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + MonitoredNode2 monitoredNode = null; + + // handle unsubscribe. + if (unsubscribe) + { + // check for existing monitored node. + if (!MonitoredNodes.TryGetValue(source.NodeId, out monitoredNode)) + { + return StatusCodes.BadNodeIdUnknown; + } + + monitoredNode.Remove(monitoredItem); + + // check if node is no longer being monitored. + if (!monitoredNode.HasMonitoredItems) + { + MonitoredNodes.Remove(source.NodeId); + } + + // update flag. + source.SetAreEventsMonitored(context, !unsubscribe, true); + + // call subclass. + OnSubscribeToEvents(context, monitoredNode, unsubscribe); + + // all done. + return ServiceResult.Good; + } + + // only objects or views can be subscribed to. + BaseObjectState instance = source as BaseObjectState; + + if (instance == null || (instance.EventNotifier & EventNotifiers.SubscribeToEvents) == 0) + { + ViewState view = source as ViewState; + + if (view == null || (view.EventNotifier & EventNotifiers.SubscribeToEvents) == 0) + { + return StatusCodes.BadNotSupported; + } + } + + // check for existing monitored node. + if (!MonitoredNodes.TryGetValue(source.NodeId, out monitoredNode)) + { + MonitoredNodes[source.NodeId] = monitoredNode = new MonitoredNode2(this, source); + } + + // this links the node to specified monitored item and ensures all events + // reported by the node are added to the monitored item's queue. + monitoredNode.Add(monitoredItem); + + // This call recursively updates a reference count all nodes in the notifier + // hierarchy below the area. Sources with a reference count of 0 do not have + // any active subscriptions so they do not need to report events. + source.SetAreEventsMonitored(context, !unsubscribe, true); + + // signal update. + OnSubscribeToEvents(context, monitoredNode, unsubscribe); + + // all done. + return ServiceResult.Good; + } + + /// + /// Called after subscribing/unsubscribing to events. + /// + /// The context. + /// The monitored node. + /// if set to true unsubscribing. + protected virtual void OnSubscribeToEvents( + ServerSystemContext context, + MonitoredNode2 monitoredNode, + bool unsubscribe) + { + // defined by the sub-class + } + #endregion + + /// + /// Tells the node manager to refresh any conditions associated with the specified monitored items. + /// + /// + /// This method is called when the condition refresh method is called for a subscription. + /// The node manager must create a refresh event for each condition monitored by the subscription. + /// + public virtual ServiceResult ConditionRefresh( + OperationContext context, + IList monitoredItems) + { + ServerSystemContext systemContext = SystemContext.Copy(context); + + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + // the IEventMonitoredItem should always be MonitoredItems since they are created by the MasterNodeManager. + MonitoredItem monitoredItem = monitoredItems[ii] as MonitoredItem; + + if (monitoredItem == null) + { + continue; + } + + List events = new List(); + List nodesToRefresh = new List(); + + lock (Lock) + { + // check for server subscription. + if (monitoredItem.NodeId == ObjectIds.Server) + { + if (m_rootNotifiers != null) + { + nodesToRefresh.AddRange(m_rootNotifiers); + } + } + else + { + // check for existing monitored node. + MonitoredNode2 monitoredNode = null; + + if (!MonitoredNodes.TryGetValue(monitoredItem.NodeId, out monitoredNode)) + { + continue; + } + + // get the refresh events. + nodesToRefresh.Add(monitoredNode.Node); + } + } + + // block and wait for the refresh. + for (int jj = 0; jj < nodesToRefresh.Count; jj++) + { + nodesToRefresh[jj].ConditionRefresh(systemContext, events, true); + } + + // queue the events. + for (int jj = 0; jj < events.Count; jj++) + { + monitoredItem.QueueEvent(events[jj]); + } + } + + // all done. + return ServiceResult.Good; + } + + /// + /// Creates a new set of monitored items for a set of variables. + /// + /// + /// This method only handles data change subscriptions. Event subscriptions are created by the SDK. + /// + public virtual void CreateMonitoredItems( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + IList itemsToCreate, + IList errors, + IList filterResults, + IList monitoredItems, + ref long globalIdCounter) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + List createdItems = new List(); + + lock (Lock) + { + for (int ii = 0; ii < itemsToCreate.Count; ii++) + { + MonitoredItemCreateRequest itemToCreate = itemsToCreate[ii]; + + // skip items that have already been processed. + if (itemToCreate.Processed) + { + continue; + } + + ReadValueId itemToMonitor = itemToCreate.ItemToMonitor; + + // check for valid handle. + NodeHandle handle = GetManagerHandle(systemContext, itemToMonitor.NodeId, operationCache); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + itemToCreate.Processed = true; + + // must validate node in a seperate operation. + errors[ii] = StatusCodes.BadNodeIdUnknown; + + handle.Index = ii; + nodesToValidate.Add(handle); + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + NodeHandle handle = nodesToValidate[ii]; + + MonitoringFilterResult filterResult = null; + IMonitoredItem monitoredItem = null; + + lock (Lock) + { + // validate node. + NodeState source = ValidateNode(systemContext, handle, operationCache); + + if (source == null) + { + continue; + } + + MonitoredItemCreateRequest itemToCreate = itemsToCreate[handle.Index]; + + // create monitored item. + errors[handle.Index] = CreateMonitoredItem( + systemContext, + handle, + subscriptionId, + publishingInterval, + context.DiagnosticsMask, + timestampsToReturn, + itemToCreate, + ref globalIdCounter, + out filterResult, + out monitoredItem); + } + + // save any filter error details. + filterResults[handle.Index] = filterResult; + + if (ServiceResult.IsBad(errors[handle.Index])) + { + continue; + } + + // save the monitored item. + monitoredItems[handle.Index] = monitoredItem; + createdItems.Add(monitoredItem); + } + + // do any post processing. + OnCreateMonitoredItemsComplete(systemContext, createdItems); + } + + #region CreateMonitoredItem Support Functions + /// + /// Called when a batch of monitored items has been created. + /// + protected virtual void OnCreateMonitoredItemsComplete(ServerSystemContext context, IList monitoredItems) + { + // defined by the sub-class + } + + /// + /// Creates a new set of monitored items for a set of variables. + /// + /// + /// This method only handles data change subscriptions. Event subscriptions are created by the SDK. + /// + protected virtual ServiceResult CreateMonitoredItem( + ServerSystemContext context, + NodeHandle handle, + uint subscriptionId, + double publishingInterval, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequest itemToCreate, + ref long globalIdCounter, + out MonitoringFilterResult filterResult, + out IMonitoredItem monitoredItem) + { + filterResult = null; + monitoredItem = null; + + // validate parameters. + MonitoringParameters parameters = itemToCreate.RequestedParameters; + + // validate attribute. + if (!Attributes.IsValid(handle.Node.NodeClass, itemToCreate.ItemToMonitor.AttributeId)) + { + return StatusCodes.BadAttributeIdInvalid; + } + + NodeState cachedNode = AddNodeToComponentCache(context, handle, handle.Node); + + // check if the node is already being monitored. + MonitoredNode2 monitoredNode = null; + + if (!m_monitoredNodes.TryGetValue(handle.Node.NodeId, out monitoredNode)) + { + m_monitoredNodes[handle.Node.NodeId] = monitoredNode = new MonitoredNode2(this, cachedNode); + } + + handle.Node = monitoredNode.Node; + handle.MonitoredNode = monitoredNode; + + // create a globally unique identifier. + uint monitoredItemId = Utils.IncrementIdentifier(ref globalIdCounter); + + // determine the sampling interval. + double samplingInterval = itemToCreate.RequestedParameters.SamplingInterval; + + if (samplingInterval < 0) + { + samplingInterval = publishingInterval; + } + + // ensure minimum sampling interval is not exceeded. + if (itemToCreate.ItemToMonitor.AttributeId == Attributes.Value) + { + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable != null && samplingInterval < variable.MinimumSamplingInterval) + { + samplingInterval = variable.MinimumSamplingInterval; + } + } + + // put a large upper limit on sampling. + if (samplingInterval == Double.MaxValue) + { + samplingInterval = 365 * 24 * 3600 * 1000.0; + } + + // put an upper limit on queue size. + uint queueSize = itemToCreate.RequestedParameters.QueueSize; + + if (queueSize > m_maxQueueSize) + { + queueSize = m_maxQueueSize; + } + + // validate the monitoring filter. + Range euRange = null; + MonitoringFilter filterToUse = null; + + ServiceResult error = ValidateMonitoringFilter( + context, + handle, + itemToCreate.ItemToMonitor.AttributeId, + samplingInterval, + queueSize, + parameters.Filter, + out filterToUse, + out euRange, + out filterResult); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // create the item. + MonitoredItem datachangeItem = new MonitoredItem( + Server, + this, + handle, + subscriptionId, + monitoredItemId, + context.OperationContext.Session, + itemToCreate.ItemToMonitor, + diagnosticsMasks, + timestampsToReturn, + itemToCreate.MonitoringMode, + itemToCreate.RequestedParameters.ClientHandle, + filterToUse, + filterToUse, + euRange, + samplingInterval, + queueSize, + itemToCreate.RequestedParameters.DiscardOldest, + 0); + + // report the initial value. + ReadInitialValue(context, handle, datachangeItem); + + // update monitored item list. + monitoredItem = datachangeItem; + + // save the monitored item. + m_monitoredItems.Add(monitoredItemId, datachangeItem); + monitoredNode.Add(datachangeItem); + + // report change. + OnMonitoredItemCreated(context, handle, datachangeItem); + + return error; + } + + /// + /// Reads the initial value for a monitored item. + /// + /// The context. + /// The item handle. + /// The monitored item. + protected virtual void ReadInitialValue( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem) + { + DataValue initialValue = new DataValue(); + + initialValue.Value = null; + initialValue.ServerTimestamp = DateTime.UtcNow; + initialValue.SourceTimestamp = DateTime.MinValue; + initialValue.StatusCode = StatusCodes.BadWaitingForInitialData; + + ServiceResult error = handle.Node.ReadAttribute( + context, + monitoredItem.AttributeId, + monitoredItem.IndexRange, + monitoredItem.DataEncoding, + initialValue); + + monitoredItem.QueueValue(initialValue, error); + } + + /// + /// Called after creating a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + protected virtual void OnMonitoredItemCreated( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem) + { + // overridden by the sub-class. + } + + /// + /// Validates Role permissions for the specified NodeId + /// + /// + /// + /// + /// + public ServiceResult ValidateRolePermissions(OperationContext operationContext, NodeId nodeId, PermissionType requestedPermission) + { + if (operationContext.Session == null || requestedPermission == PermissionType.None) + { + // no permission is required hence the validation passes. + return StatusCodes.Good; + } + + INodeManager nodeManager = null; + object nodeHandle = Server.NodeManager.GetManagerHandle(nodeId, out nodeManager); + + if (nodeHandle == null || nodeManager == null) + { + // ignore unknown nodes. + return StatusCodes.Good; + } + + NodeMetadata nodeMetadata = nodeManager.GetNodeMetadata(operationContext, nodeHandle, BrowseResultMask.All); + + return MasterNodeManager.ValidateRolePermissions(operationContext, nodeMetadata, requestedPermission); + } + + /// + /// Validates the monitoring filter specified by the client. + /// + protected virtual StatusCode ValidateMonitoringFilter( + ServerSystemContext context, + NodeHandle handle, + uint attributeId, + double samplingInterval, + uint queueSize, + ExtensionObject filter, + out MonitoringFilter filterToUse, + out Range range, + out MonitoringFilterResult result) + { + range = null; + filterToUse = null; + result = null; + + // nothing to do if the filter is not specified. + if (ExtensionObject.IsNull(filter)) + { + return StatusCodes.Good; + } + + // extension objects wrap any data structure. must check that the client provided the correct structure. + DataChangeFilter deadbandFilter = ExtensionObject.ToEncodeable(filter) as DataChangeFilter; + + if (deadbandFilter == null) + { + AggregateFilter aggregateFilter = ExtensionObject.ToEncodeable(filter) as AggregateFilter; + + if (aggregateFilter == null || attributeId != Attributes.Value) + { + return StatusCodes.BadFilterNotAllowed; + } + + if (!Server.AggregateManager.IsSupported(aggregateFilter.AggregateType)) + { + return StatusCodes.BadAggregateNotSupported; + } + + ServerAggregateFilter revisedFilter = new ServerAggregateFilter(); + revisedFilter.AggregateType = aggregateFilter.AggregateType; + revisedFilter.StartTime = aggregateFilter.StartTime; + revisedFilter.ProcessingInterval = aggregateFilter.ProcessingInterval; + revisedFilter.AggregateConfiguration = aggregateFilter.AggregateConfiguration; + revisedFilter.Stepped = false; + + StatusCode error = ReviseAggregateFilter(context, handle, samplingInterval, queueSize, revisedFilter); + + if (StatusCode.IsBad(error)) + { + return error; + } + + AggregateFilterResult aggregateFilterResult = new AggregateFilterResult(); + aggregateFilterResult.RevisedProcessingInterval = aggregateFilter.ProcessingInterval; + aggregateFilterResult.RevisedStartTime = aggregateFilter.StartTime; + aggregateFilterResult.RevisedAggregateConfiguration = aggregateFilter.AggregateConfiguration; + + filterToUse = revisedFilter; + result = aggregateFilterResult; + return StatusCodes.Good; + } + + // deadband filters only allowed for variable values. + if (attributeId != Attributes.Value) + { + return StatusCodes.BadFilterNotAllowed; + } + + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable == null) + { + return StatusCodes.BadFilterNotAllowed; + } + + // check for status filter. + if (deadbandFilter.DeadbandType == (uint)DeadbandType.None) + { + filterToUse = deadbandFilter; + return StatusCodes.Good; + } + + // deadband filters can only be used for numeric values. + if (!Server.TypeTree.IsTypeOf(variable.DataType, DataTypeIds.Number)) + { + return StatusCodes.BadFilterNotAllowed; + } + + // nothing more to do for absolute filters. + if (deadbandFilter.DeadbandType == (uint)DeadbandType.Absolute) + { + filterToUse = deadbandFilter; + return StatusCodes.Good; + } + + // need to look up the EU range if a percent filter is requested. + if (deadbandFilter.DeadbandType == (uint)DeadbandType.Percent) + { + PropertyState property = handle.Node.FindChild(context, Opc.Ua.BrowseNames.EURange) as PropertyState; + + if (property == null) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + + range = property.Value as Range; + + if (range == null) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + + filterToUse = deadbandFilter; + + return StatusCodes.Good; + } + + // no other type of filter supported. + return StatusCodes.BadFilterNotAllowed; + } + + /// + /// Revises an aggregate filter (may require knowledge of the variable being used). + /// + /// The context. + /// The handle. + /// The sampling interval for the monitored item. + /// The queue size for the monitored item. + /// The filter to revise. + /// Good if the + protected virtual StatusCode ReviseAggregateFilter( + ServerSystemContext context, + NodeHandle handle, + double samplingInterval, + uint queueSize, + ServerAggregateFilter filterToUse) + { + if (filterToUse.ProcessingInterval < samplingInterval) + { + filterToUse.ProcessingInterval = samplingInterval; + } + + if (filterToUse.ProcessingInterval < Server.AggregateManager.MinimumProcessingInterval) + { + filterToUse.ProcessingInterval = Server.AggregateManager.MinimumProcessingInterval; + } + + DateTime earliestStartTime = DateTime.UtcNow.AddMilliseconds(-(queueSize - 1) * filterToUse.ProcessingInterval); + + if (earliestStartTime > filterToUse.StartTime) + { + filterToUse.StartTime = earliestStartTime; + } + + if (filterToUse.AggregateConfiguration.UseServerCapabilitiesDefaults) + { + filterToUse.AggregateConfiguration = Server.AggregateManager.GetDefaultConfiguration(null); + } + + return StatusCodes.Good; + } + #endregion + + /// + /// Modifies the parameters for a set of monitored items. + /// + public virtual void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + IList monitoredItems, + IList itemsToModify, + IList errors, + IList filterResults) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + List modifiedItems = new List(); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + MonitoredItemModifyRequest itemToModify = itemsToModify[ii]; + + // skip items that have already been processed. + if (itemToModify.Processed || monitoredItems[ii] == null) + { + continue; + } + + // check handle. + NodeHandle handle = IsHandleInNamespace(monitoredItems[ii].ManagerHandle); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + itemToModify.Processed = true; + + // modify the monitored item. + MonitoringFilterResult filterResult = null; + + errors[ii] = ModifyMonitoredItem( + systemContext, + context.DiagnosticsMask, + timestampsToReturn, + monitoredItems[ii], + itemToModify, + handle, + out filterResult); + + // save any filter error details. + filterResults[ii] = filterResult; + + // save the modified item. + if (ServiceResult.IsGood(errors[ii])) + { + modifiedItems.Add(monitoredItems[ii]); + } + } + } + + // do any post processing. + OnModifyMonitoredItemsComplete(systemContext, modifiedItems); + } + + #region ModifyMonitoredItem Support Functions + /// + /// Called when a batch of monitored items has been modified. + /// + protected virtual void OnModifyMonitoredItemsComplete(ServerSystemContext context, IList monitoredItems) + { + // defined by the sub-class + } + + /// + /// Modifies the parameters for a monitored item. + /// + protected virtual ServiceResult ModifyMonitoredItem( + ServerSystemContext context, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + IMonitoredItem monitoredItem, + MonitoredItemModifyRequest itemToModify, + NodeHandle handle, + out MonitoringFilterResult filterResult) + { + filterResult = null; + + // check for valid monitored item. + MonitoredItem datachangeItem = monitoredItem as MonitoredItem; + + // validate parameters. + MonitoringParameters parameters = itemToModify.RequestedParameters; + + double previousSamplingInterval = datachangeItem.SamplingInterval; + + // check if the variable needs to be sampled. + double samplingInterval = itemToModify.RequestedParameters.SamplingInterval; + + if (samplingInterval < 0) + { + samplingInterval = previousSamplingInterval; + } + + // ensure minimum sampling interval is not exceeded. + if (datachangeItem.AttributeId == Attributes.Value) + { + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable != null && samplingInterval < variable.MinimumSamplingInterval) + { + samplingInterval = variable.MinimumSamplingInterval; + } + } + + // put a large upper limit on sampling. + if (samplingInterval == Double.MaxValue) + { + samplingInterval = 365 * 24 * 3600 * 1000.0; + } + + // put an upper limit on queue size. + uint queueSize = itemToModify.RequestedParameters.QueueSize; + + if (queueSize > m_maxQueueSize) + { + queueSize = m_maxQueueSize; + } + + // validate the monitoring filter. + Range euRange = null; + MonitoringFilter filterToUse = null; + + ServiceResult error = ValidateMonitoringFilter( + context, + handle, + datachangeItem.AttributeId, + samplingInterval, + queueSize, + parameters.Filter, + out filterToUse, + out euRange, + out filterResult); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // modify the monitored item parameters. + error = datachangeItem.ModifyAttributes( + diagnosticsMasks, + timestampsToReturn, + itemToModify.RequestedParameters.ClientHandle, + filterToUse, + filterToUse, + euRange, + samplingInterval, + queueSize, + itemToModify.RequestedParameters.DiscardOldest); + + // report change. + if (ServiceResult.IsGood(error)) + { + OnMonitoredItemModified(context, handle, datachangeItem); + } + + return error; + } + + /// + /// Called after modifying a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + protected virtual void OnMonitoredItemModified( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem) + { + // overridden by the sub-class. + } + #endregion + + /// + /// Deletes a set of monitored items. + /// + public virtual void DeleteMonitoredItems( + OperationContext context, + IList monitoredItems, + IList processedItems, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + List deletedItems = new List(); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + // skip items that have already been processed. + if (processedItems[ii] || monitoredItems[ii] == null) + { + continue; + } + + // check handle. + NodeHandle handle = IsHandleInNamespace(monitoredItems[ii].ManagerHandle); + + if (handle == null) + { + continue; + } + + // owned by this node manager. + processedItems[ii] = true; + + errors[ii] = DeleteMonitoredItem( + systemContext, + monitoredItems[ii], + handle); + + // save the modified item. + if (ServiceResult.IsGood(errors[ii])) + { + deletedItems.Add(monitoredItems[ii]); + RemoveNodeFromComponentCache(systemContext, handle); + } + } + } + + // do any post processing. + OnDeleteMonitoredItemsComplete(systemContext, deletedItems); + } + + #region DeleteMonitoredItems Support Functions + /// + /// Called when a batch of monitored items has been modified. + /// + protected virtual void OnDeleteMonitoredItemsComplete(ServerSystemContext context, IList monitoredItems) + { + // defined by the sub-class + } + + /// + /// Deletes a monitored item. + /// + protected virtual ServiceResult DeleteMonitoredItem( + ServerSystemContext context, + IMonitoredItem monitoredItem, + NodeHandle handle) + { + // check for valid monitored item. + MonitoredItem datachangeItem = monitoredItem as MonitoredItem; + + // check if the node is already being monitored. + MonitoredNode2 monitoredNode = null; + + if (m_monitoredNodes.TryGetValue(handle.NodeId, out monitoredNode)) + { + monitoredNode.Remove(datachangeItem); + + // check if node is no longer being monitored. + if (!monitoredNode.HasMonitoredItems) + { + MonitoredNodes.Remove(handle.NodeId); + } + } + + // remove the monitored item. + m_monitoredItems.Remove(monitoredItem.Id); + + // report change. + OnMonitoredItemDeleted(context, handle, datachangeItem); + + return ServiceResult.Good; + } + + /// + /// Called after deleting a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + protected virtual void OnMonitoredItemDeleted( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem) + { + // overridden by the sub-class. + } + #endregion + + /// + /// Changes the monitoring mode for a set of monitored items. + /// + /// The context. + /// The monitoring mode. + /// The set of monitoring items to update. + /// Flags indicating which items have been processed. + /// Any errors. + public virtual void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + IList monitoredItems, + IList processedItems, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + List changedItems = new List(); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + // skip items that have already been processed. + if (processedItems[ii] || monitoredItems[ii] == null) + { + continue; + } + + // check handle. + NodeHandle handle = IsHandleInNamespace(monitoredItems[ii].ManagerHandle); + + if (handle == null) + { + continue; + } + + // indicate whether it was processed or not. + processedItems[ii] = true; + + // update monitoring mode. + errors[ii] = SetMonitoringMode( + systemContext, + monitoredItems[ii], + monitoringMode, + handle); + + // save the modified item. + if (ServiceResult.IsGood(errors[ii])) + { + changedItems.Add(monitoredItems[ii]); + } + } + } + + // do any post processing. + OnSetMonitoringModeComplete(systemContext, changedItems); + } + + #region SetMonitoringMode Support Functions + /// + /// Called when a batch of monitored items has their monitoring mode changed. + /// + protected virtual void OnSetMonitoringModeComplete(ServerSystemContext context, IList monitoredItems) + { + // defined by the sub-class + } + + /// + /// Changes the monitoring mode for an item. + /// + protected virtual ServiceResult SetMonitoringMode( + ServerSystemContext context, + IMonitoredItem monitoredItem, + MonitoringMode monitoringMode, + NodeHandle handle) + { + // check for valid monitored item. + MonitoredItem datachangeItem = monitoredItem as MonitoredItem; + + // update monitoring mode. + MonitoringMode previousMode = datachangeItem.SetMonitoringMode(monitoringMode); + + // must send the latest value after enabling a disabled item. + if (monitoringMode == MonitoringMode.Reporting && previousMode == MonitoringMode.Disabled) + { + handle.MonitoredNode.QueueValue(context, handle.Node, datachangeItem); + } + + // report change. + if (previousMode != monitoringMode) + { + OnMonitoringModeChanged( + context, + handle, + datachangeItem, + previousMode, + monitoringMode); + } + + return ServiceResult.Good; + } + + /// + /// Called after changing the MonitoringMode for a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + /// The previous monitoring mode. + /// The current monitoring mode. + protected virtual void OnMonitoringModeChanged( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem, + MonitoringMode previousMode, + MonitoringMode monitoringMode) + { + // overridden by the sub-class. + } + #endregion + #endregion + + #region INodeManager2 Members + /// + /// Called when a session is closed. + /// + public virtual void SessionClosing(OperationContext context, NodeId sessionId, bool deleteSubscriptions) + { + } + + /// + /// Returns true if a node is in a view. + /// + public virtual bool IsNodeInView(OperationContext context, NodeId viewId, object nodeHandle) + { + NodeHandle handle = nodeHandle as NodeHandle; + + if (handle == null) + { + return false; + } + + if (handle.Node != null) + { + return IsNodeInView(context, viewId, handle.Node); + } + + return false; + } + #endregion + + #region ComponentCache Functions + /// + /// Stores a reference count for entries in the component cache. + /// + private class CacheEntry + { + public int RefCount; + public NodeState Entry; + } + + /// + /// Looks up a component in cache. + /// + protected NodeState LookupNodeInComponentCache(ISystemContext context, NodeHandle handle) + { + lock (Lock) + { + if (m_componentCache == null) + { + return null; + } + + CacheEntry entry = null; + + if (!String.IsNullOrEmpty(handle.ComponentPath)) + { + if (m_componentCache.TryGetValue(handle.RootId, out entry)) + { + return entry.Entry.FindChildBySymbolicName(context, handle.ComponentPath); + } + } + else + { + if (m_componentCache.TryGetValue(handle.NodeId, out entry)) + { + return entry.Entry; + } + } + + return null; + } + } + + /// + /// Removes a reference to a component in thecache. + /// + protected void RemoveNodeFromComponentCache(ISystemContext context, NodeHandle handle) + { + lock (Lock) + { + if (handle == null) + { + return; + } + + if (m_componentCache != null) + { + NodeId nodeId = handle.NodeId; + + if (!String.IsNullOrEmpty(handle.ComponentPath)) + { + nodeId = handle.RootId; + } + + CacheEntry entry = null; + + if (m_componentCache.TryGetValue(nodeId, out entry)) + { + entry.RefCount--; + + if (entry.RefCount == 0) + { + m_componentCache.Remove(nodeId); + } + } + } + } + } + + /// + /// Adds a node to the component cache. + /// + protected NodeState AddNodeToComponentCache(ISystemContext context, NodeHandle handle, NodeState node) + { + lock (Lock) + { + if (handle == null) + { + return node; + } + + if (m_componentCache == null) + { + m_componentCache = new Dictionary(); + } + + // check if a component is actually specified. + if (!String.IsNullOrEmpty(handle.ComponentPath)) + { + CacheEntry entry = null; + + if (m_componentCache.TryGetValue(handle.RootId, out entry)) + { + entry.RefCount++; + + if (!String.IsNullOrEmpty(handle.ComponentPath)) + { + return entry.Entry.FindChildBySymbolicName(context, handle.ComponentPath); + } + + return entry.Entry; + } + + NodeState root = node.GetHierarchyRoot(); + + if (root != null) + { + entry = new CacheEntry(); + entry.RefCount = 1; + entry.Entry = root; + m_componentCache.Add(handle.RootId, entry); + } + } + + // simply add the node to the cache. + else + { + CacheEntry entry = null; + + if (m_componentCache.TryGetValue(handle.NodeId, out entry)) + { + entry.RefCount++; + return entry.Entry; + } + + entry = new CacheEntry(); + entry.RefCount = 1; + entry.Entry = node; + m_componentCache.Add(handle.NodeId, entry); + } + + return node; + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private ServerSystemContext m_systemContext; + private string[] m_namespaceUris; + private ushort[] m_namespaceIndexes; + private Dictionary m_monitoredItems; + private Dictionary m_monitoredNodes; + private Dictionary m_componentCache; + private NodeIdDictionary m_predefinedNodes; + private List m_rootNotifiers; + private uint m_maxQueueSize; + private string m_aliasRoot; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs new file mode 100644 index 00000000..908efc92 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs @@ -0,0 +1,1802 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Threading; + +namespace Opc.Ua.Server +{ + /// + /// A node manager the diagnostic information exposed by the server. + /// + public class DiagnosticsNodeManager : CustomNodeManager2 + { + #region Constructors + /// + /// Initializes the node manager. + /// + public DiagnosticsNodeManager( + IServerInternal server, + ApplicationConfiguration configuration) + : + base(server, configuration) + { + this.AliasRoot = "Core"; + + string[] namespaceUris = new string[2]; + namespaceUris[0] = Namespaces.OpcUa; + namespaceUris[1] = Namespaces.OpcUa + "Diagnostics"; + SetNamespaces(namespaceUris); + + m_namespaceIndex = Server.NamespaceUris.GetIndexOrAppend(namespaceUris[1]); + m_lastUsedId = (long)(DateTime.UtcNow.Ticks & 0x7FFFFFFF); + m_sessions = new List(); + m_subscriptions = new List(); + m_diagnosticsEnabled = true; + m_sampledItems = new List(); + m_minimumSamplingInterval = 100; + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + lock (Lock) + { + Utils.SilentDispose(m_diagnosticsScanTimer); + m_diagnosticsScanTimer = null; + + Utils.SilentDispose(m_samplingTimer); + m_samplingTimer = null; + } + } + + base.Dispose(disposing); + } + #endregion + + #region INodeIdFactory Members + /// + /// Creates the NodeId for the specified node. + /// + /// The context. + /// The node. + /// The new NodeId. + public override NodeId New(ISystemContext context, NodeState node) + { + uint id = Utils.IncrementIdentifier(ref m_lastUsedId); + return new NodeId(id, m_namespaceIndex); + } + #endregion + + #region INodeManager Members + /// + /// Does any initialization required before the address space can be used. + /// + /// + /// The externalReferences is an out parameter that allows the node manager to link to nodes + /// in other node managers. For example, the 'Objects' node is managed by the CoreNodeManager and + /// should have a reference to the root folder node(s) exposed by this node manager. + /// + public override void CreateAddressSpace(IDictionary> externalReferences) + { + lock (Lock) + { + base.CreateAddressSpace(externalReferences); + + // sampling interval diagnostics not supported by the server. + ServerDiagnosticsState serverDiagnosticsNode = (ServerDiagnosticsState)FindPredefinedNode( + ObjectIds.Server_ServerDiagnostics, + typeof(ServerDiagnosticsState)); + + if (serverDiagnosticsNode != null) + { + NodeState samplingDiagnosticsArrayNode = serverDiagnosticsNode.FindChild( + SystemContext, + BrowseNames.SamplingIntervalDiagnosticsArray); + + if (samplingDiagnosticsArrayNode != null) + { + DeleteNode(SystemContext, VariableIds.Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray); + serverDiagnosticsNode.SamplingIntervalDiagnosticsArray = null; + } + } + + // The nodes are now loaded by the DiagnosticsNodeManager from the file + // output by the ModelDesigner V2. These nodes are added to the CoreNodeManager + // via the AttachNode() method when the DiagnosticsNodeManager starts. + Server.CoreNodeManager.ImportNodes(SystemContext, PredefinedNodes.Values, true); + + // hook up the server GetMonitoredItems method. + MethodState getMonitoredItems = (MethodState)FindPredefinedNode( + MethodIds.Server_GetMonitoredItems, + typeof(MethodState)); + + if (getMonitoredItems != null) + { + getMonitoredItems.OnCallMethod = OnGetMonitoredItems; + } + + // set ArrayDimensions for GetMonitoredItems.OutputArguments.Value. + PropertyState getMonitoredItemsOutputArguments = (PropertyState)FindPredefinedNode( + VariableIds.Server_GetMonitoredItems_OutputArguments, + typeof(PropertyState)); + + if (getMonitoredItemsOutputArguments != null) + { + Argument[] outputArgumentsValue = (Argument[])getMonitoredItemsOutputArguments.Value; + + if (outputArgumentsValue != null) + { + foreach (Argument argument in outputArgumentsValue) + { + argument.ArrayDimensions = new UInt32Collection { 0 }; + } + + getMonitoredItemsOutputArguments.ClearChangeMasks(SystemContext, false); + } + } + } + } + + /// + /// Called when a client locks the server. + /// + public ServiceResult OnGetMonitoredItems( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + if (inputArguments == null || inputArguments.Count != 1) + { + return StatusCodes.BadInvalidArgument; + } + + uint? subscriptionId = inputArguments[0] as uint?; + + if (subscriptionId == null) + { + return StatusCodes.BadInvalidArgument; + } + + uint[] serverHandles = null; + uint[] clientHandles = null; + + foreach (Subscription subscription in Server.SubscriptionManager.GetSubscriptions()) + { + if (subscription.Id == subscriptionId) + { + if (subscription.SessionId != context.SessionId) + { + // user tries to access subscription of different session + return StatusCodes.BadUserAccessDenied; + } + + subscription.GetMonitoredItems(out serverHandles, out clientHandles); + + outputArguments[0] = serverHandles; + outputArguments[1] = clientHandles; + + return ServiceResult.Good; + } + } + + return StatusCodes.BadSubscriptionIdInvalid; + } + + /// + /// Called when a client locks the server. + /// + public ServiceResult OnLockServer( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + ServerSystemContext systemContext = context as ServerSystemContext; + + if (m_serverLockHolder != null) + { + if (m_serverLockHolder != systemContext.SessionId) + { + return StatusCodes.BadSessionIdInvalid; + } + } + + m_serverLockHolder = systemContext.SessionId; + + return ServiceResult.Good; + } + + /// + /// Called when a client locks the server. + /// + public ServiceResult OnUnlockServer( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + ServerSystemContext systemContext = context as ServerSystemContext; + + if (m_serverLockHolder != null) + { + if (m_serverLockHolder != systemContext.SessionId) + { + return StatusCodes.BadSessionIdInvalid; + } + } + + m_serverLockHolder = null; + + return ServiceResult.Good; + } + + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + protected override NodeStateCollection LoadPredefinedNodes(ISystemContext context) + { + NodeStateCollection predefinedNodes = new NodeStateCollection(); + var assembly = typeof(ArgumentCollection).GetTypeInfo().Assembly; + predefinedNodes.LoadFromBinaryResource(context, "Opc.Ua.Stack.Generated.Opc.Ua.PredefinedNodes.uanodes", assembly, true); + return predefinedNodes; + } + + /// + /// Replaces the generic node with a node specific to the model. + /// + protected override NodeState AddBehaviourToPredefinedNode(ISystemContext context, NodeState predefinedNode) + { + BaseObjectState passiveNode = predefinedNode as BaseObjectState; + + if (passiveNode == null) + { + MethodState passiveMethod = predefinedNode as MethodState; + + if (passiveMethod == null) + { + return predefinedNode; + } + + if (passiveMethod.NodeId == MethodIds.ConditionType_ConditionRefresh) + { + ConditionRefreshMethodState activeNode = new ConditionRefreshMethodState(passiveMethod.Parent); + activeNode.Create(context, passiveMethod); + + // replace the node in the parent. + if (passiveMethod.Parent != null) + { + passiveMethod.Parent.ReplaceChild(context, activeNode); + } + + activeNode.OnCall = OnConditionRefresh; + + return activeNode; + } + + return predefinedNode; + } + + NodeId typeId = passiveNode.TypeDefinitionId; + + if (!IsNodeIdInNamespace(typeId) || typeId.IdType != IdType.Numeric) + { + return predefinedNode; + } + + switch ((uint)typeId.Identifier) + { + case ObjectTypes.ServerType: + { + if (passiveNode is ServerObjectState) + { + break; + } + + ServerObjectState activeNode = new ServerObjectState(passiveNode.Parent); + activeNode.Create(context, passiveNode); + + // add the server object as the root notifier. + AddRootNotifier(activeNode); + + // replace the node in the parent. + if (passiveNode.Parent != null) + { + passiveNode.Parent.ReplaceChild(context, activeNode); + } + + return activeNode; + } + + } + + return predefinedNode; + } + + /// + /// Handles a request to refresh conditions for a subscription. + /// + private ServiceResult OnConditionRefresh( + ISystemContext context, + MethodState method, + NodeId objectId, + uint subscriptionId) + { + ServerSystemContext systemContext = context as ServerSystemContext; + + if (systemContext == null) + { + systemContext = this.SystemContext; + } + + Server.ConditionRefresh(systemContext.OperationContext, subscriptionId); + + return ServiceResult.Good; + } + + /// + /// Returns true of the node is a diagnostics node. + /// + private bool IsDiagnosticsNode(NodeState node) + { + if (node == null) + { + return false; + } + + if (!IsDiagnosticsStructureNode(node)) + { + BaseInstanceState instance = node as BaseInstanceState; + + if (instance == null) + { + return false; + } + + return IsDiagnosticsStructureNode(instance.Parent); + } + + return true; + } + + /// + /// Returns true of the node is a diagnostics node. + /// + private bool IsDiagnosticsStructureNode(NodeState node) + { + BaseInstanceState instance = node as BaseInstanceState; + + if (instance == null) + { + return false; + } + + NodeId typeId = instance.TypeDefinitionId; + + if (typeId == null || typeId.IdType != IdType.Numeric || typeId.NamespaceIndex != 0) + { + return false; + } + + switch ((uint)typeId.Identifier) + { + case VariableTypes.ServerDiagnosticsSummaryType: + case ObjectTypes.SessionDiagnosticsObjectType: + case VariableTypes.SessionDiagnosticsVariableType: + case VariableTypes.SessionDiagnosticsArrayType: + case VariableTypes.SessionSecurityDiagnosticsType: + case VariableTypes.SessionSecurityDiagnosticsArrayType: + case VariableTypes.SubscriptionDiagnosticsType: + case VariableTypes.SubscriptionDiagnosticsArrayType: + case VariableTypes.SamplingIntervalDiagnosticsArrayType: + { + return true; + } + } + + return false; + } + + /// + /// Force out of band diagnostics update after a change of diagnostics variables. + /// + public void ForceDiagnosticsScan() + { + m_lastDiagnosticsScanTime = DateTime.MinValue; + } + + /// + /// True is diagnostics are currently enabled. + /// + public bool DiagnosticsEnabled => m_diagnosticsEnabled; + + /// + /// Sets the flag controlling whether diagnostics is enabled for the server. + /// + public void SetDiagnosticsEnabled(ServerSystemContext context, bool enabled) + { + List nodesToDelete = new List(); + + lock (Lock) + { + if (enabled == m_diagnosticsEnabled) + { + return; + } + + m_diagnosticsEnabled = enabled; + + if (!enabled) + { + // stop scans. + if (m_diagnosticsScanTimer != null) + { + m_diagnosticsScanTimer.Dispose(); + m_diagnosticsScanTimer = null; + } + + if (m_sessions != null) + { + for (int ii = 0; ii < m_sessions.Count; ii++) + { + nodesToDelete.Add(m_sessions[ii].Summary); + } + + m_sessions.Clear(); + } + + if (m_subscriptions != null) + { + for (int ii = 0; ii < m_subscriptions.Count; ii++) + { + nodesToDelete.Add(m_sessions[ii].Value.Variable); + } + + m_subscriptions.Clear(); + } + } + else + { + // reset all diagnostics nodes. + if (m_serverDiagnostics != null) + { + m_serverDiagnostics.Value = null; + m_serverDiagnostics.Error = StatusCodes.BadWaitingForInitialData; + m_serverDiagnostics.Timestamp = DateTime.UtcNow; + } + + // get the node. + ServerDiagnosticsState diagnosticsNode = (ServerDiagnosticsState)FindPredefinedNode( + ObjectIds.Server_ServerDiagnostics, + typeof(ServerDiagnosticsState)); + + // clear arrays. + if (diagnosticsNode != null) + { + if (diagnosticsNode.SamplingIntervalDiagnosticsArray != null) + { + diagnosticsNode.SamplingIntervalDiagnosticsArray.Value = null; + diagnosticsNode.SamplingIntervalDiagnosticsArray.StatusCode = StatusCodes.BadWaitingForInitialData; + diagnosticsNode.SamplingIntervalDiagnosticsArray.Timestamp = DateTime.UtcNow; + } + + if (diagnosticsNode.SubscriptionDiagnosticsArray != null) + { + diagnosticsNode.SubscriptionDiagnosticsArray.Value = null; + diagnosticsNode.SubscriptionDiagnosticsArray.StatusCode = StatusCodes.BadWaitingForInitialData; + diagnosticsNode.SubscriptionDiagnosticsArray.Timestamp = DateTime.UtcNow; + } + + if (diagnosticsNode.SessionsDiagnosticsSummary != null) + { + diagnosticsNode.SessionsDiagnosticsSummary.SessionDiagnosticsArray.Value = null; + diagnosticsNode.SessionsDiagnosticsSummary.SessionDiagnosticsArray.StatusCode = StatusCodes.BadWaitingForInitialData; + diagnosticsNode.SessionsDiagnosticsSummary.SessionDiagnosticsArray.Timestamp = DateTime.UtcNow; + } + + if (diagnosticsNode.SessionsDiagnosticsSummary != null) + { + diagnosticsNode.SessionsDiagnosticsSummary.SessionSecurityDiagnosticsArray.Value = null; + diagnosticsNode.SessionsDiagnosticsSummary.SessionSecurityDiagnosticsArray.StatusCode = StatusCodes.BadWaitingForInitialData; + diagnosticsNode.SessionsDiagnosticsSummary.SessionSecurityDiagnosticsArray.Timestamp = DateTime.UtcNow; + } + } + + DoScan(true); + } + } + + for (int ii = 0; ii < nodesToDelete.Count; ii++) + { + DeleteNode(context, nodesToDelete[ii].NodeId); + } + } + + /// + /// Creates the diagnostics node for the server. + /// + public void CreateServerDiagnostics( + ServerSystemContext systemContext, + ServerDiagnosticsSummaryDataType diagnostics, + NodeValueSimpleEventHandler updateCallback) + { + lock (Lock) + { + // get the node. + ServerDiagnosticsSummaryState diagnosticsNode = (ServerDiagnosticsSummaryState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_ServerDiagnosticsSummary, + typeof(ServerDiagnosticsSummaryState)); + + // wrap diagnostics in a thread safe object. + ServerDiagnosticsSummaryValue diagnosticsValue = new ServerDiagnosticsSummaryValue( + diagnosticsNode, + diagnostics, + Lock); + + // must ensure the first update gets sent. + diagnosticsValue.Value = null; + diagnosticsValue.Error = StatusCodes.BadWaitingForInitialData; + diagnosticsValue.CopyPolicy = Opc.Ua.VariableCopyPolicy.Never; + diagnosticsValue.OnBeforeRead = OnBeforeReadDiagnostics; + + m_serverDiagnostics = diagnosticsValue; + m_serverDiagnosticsCallback = updateCallback; + + // set up handler for session diagnostics array. + SessionDiagnosticsArrayState array1 = (SessionDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray, + typeof(SessionDiagnosticsArrayState)); + + if (array1 != null) + { + array1.OnSimpleReadValue = OnReadDiagnosticsArray; + } + + // set up handler for session security diagnostics array. + SessionSecurityDiagnosticsArrayState array2 = (SessionSecurityDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray, + typeof(SessionSecurityDiagnosticsArrayState)); + + if (array2 != null) + { + array2.OnSimpleReadValue = OnReadDiagnosticsArray; + } + + // set up handler for subscription security diagnostics array. + SubscriptionDiagnosticsArrayState array3 = (SubscriptionDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray, + typeof(SubscriptionDiagnosticsArrayState)); + + if (array3 != null) + { + array3.OnSimpleReadValue = OnReadDiagnosticsArray; + } + + // send initial update. + DoScan(true); + } + } + + /// + /// Creates the diagnostics node for a subscription. + /// + public NodeId CreateSessionDiagnostics( + ServerSystemContext systemContext, + SessionDiagnosticsDataType diagnostics, + NodeValueSimpleEventHandler updateCallback, + SessionSecurityDiagnosticsDataType securityDiagnostics, + NodeValueSimpleEventHandler updateSecurityCallback) + { + NodeId nodeId = null; + + lock (Lock) + { + SessionDiagnosticsObjectState sessionNode = new SessionDiagnosticsObjectState(null); + + // create a new instance and assign ids. + nodeId = CreateNode( + systemContext, + null, + ReferenceTypeIds.HasComponent, + new QualifiedName(diagnostics.SessionName), + sessionNode); + + diagnostics.SessionId = nodeId; + securityDiagnostics.SessionId = nodeId; + + // check if diagnostics have been enabled. + if (!m_diagnosticsEnabled) + { + return nodeId; + } + + // add reference to session summary object. + sessionNode.AddReference( + ReferenceTypeIds.HasComponent, + true, + ObjectIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary); + + // add reference from session summary object. + SessionsDiagnosticsSummaryState summary = (SessionsDiagnosticsSummaryState)FindPredefinedNode( + ObjectIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary, + typeof(SessionsDiagnosticsSummaryState)); + + if (summary != null) + { + summary.AddReference(ReferenceTypeIds.HasComponent, false, sessionNode.NodeId); + } + + // initialize diagnostics node. + SessionDiagnosticsVariableState diagnosticsNode = sessionNode.CreateChild( + systemContext, + BrowseNames.SessionDiagnostics) as SessionDiagnosticsVariableState; + + // wrap diagnostics in a thread safe object. + SessionDiagnosticsVariableValue diagnosticsValue = new SessionDiagnosticsVariableValue( + diagnosticsNode, + diagnostics, + Lock); + + // must ensure the first update gets sent. + diagnosticsValue.Value = null; + diagnosticsValue.Error = StatusCodes.BadWaitingForInitialData; + diagnosticsValue.CopyPolicy = Opc.Ua.VariableCopyPolicy.Never; + diagnosticsValue.OnBeforeRead = OnBeforeReadDiagnostics; + + // initialize security diagnostics node. + SessionSecurityDiagnosticsState securityDiagnosticsNode = sessionNode.CreateChild( + systemContext, + BrowseNames.SessionSecurityDiagnostics) as SessionSecurityDiagnosticsState; + + // wrap diagnostics in a thread safe object. + SessionSecurityDiagnosticsValue securityDiagnosticsValue = new SessionSecurityDiagnosticsValue( + securityDiagnosticsNode, + securityDiagnostics, + Lock); + + // must ensure the first update gets sent. + securityDiagnosticsValue.Value = null; + securityDiagnosticsValue.Error = StatusCodes.BadWaitingForInitialData; + securityDiagnosticsValue.CopyPolicy = Opc.Ua.VariableCopyPolicy.Never; + securityDiagnosticsValue.OnBeforeRead = OnBeforeReadDiagnostics; + + // save the session. + SessionDiagnosticsData sessionData = new SessionDiagnosticsData( + sessionNode, + diagnosticsValue, + updateCallback, + securityDiagnosticsValue, + updateSecurityCallback); + + m_sessions.Add(sessionData); + + // send initial update. + DoScan(true); + } + + return nodeId; + } + + /// + /// Delete the diagnostics node for a session. + /// + public void DeleteSessionDiagnostics( + ServerSystemContext systemContext, + NodeId nodeId) + { + lock (Lock) + { + for (int ii = 0; ii < m_sessions.Count; ii++) + { + SessionDiagnosticsObjectState summary = m_sessions[ii].Summary; + + if (summary.NodeId == nodeId) + { + m_sessions.RemoveAt(ii); + break; + } + } + + // release the server lock if it is being held. + if (m_serverLockHolder == nodeId) + { + m_serverLockHolder = null; + } + } + + DeleteNode(systemContext, nodeId); + } + + /// + /// Creates the diagnostics node for a subscription. + /// + public NodeId CreateSubscriptionDiagnostics( + ServerSystemContext systemContext, + SubscriptionDiagnosticsDataType diagnostics, + NodeValueSimpleEventHandler updateCallback) + { + NodeId nodeId = null; + + lock (Lock) + { + // check if diagnostics have been enabled. + if (!m_diagnosticsEnabled) + { + return null; + } + + SubscriptionDiagnosticsState diagnosticsNode = new SubscriptionDiagnosticsState(null); + + // create a new instance and assign ids. + nodeId = CreateNode( + systemContext, + null, + ReferenceTypeIds.HasComponent, + new QualifiedName(diagnostics.SubscriptionId.ToString()), + diagnosticsNode); + + // add reference to subscription array. + diagnosticsNode.AddReference( + ReferenceTypeIds.HasComponent, + true, + VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray); + + // wrap diagnostics in a thread safe object. + SubscriptionDiagnosticsValue diagnosticsValue = new SubscriptionDiagnosticsValue(diagnosticsNode, diagnostics, Lock); + diagnosticsValue.CopyPolicy = Opc.Ua.VariableCopyPolicy.Never; + diagnosticsValue.OnBeforeRead = OnBeforeReadDiagnostics; + + // must ensure the first update gets sent. + diagnosticsValue.Value = null; + diagnosticsValue.Error = StatusCodes.BadWaitingForInitialData; + + m_subscriptions.Add(new SubscriptionDiagnosticsData(diagnosticsValue, updateCallback)); + + // add reference from subscription array. + SubscriptionDiagnosticsArrayState array = (SubscriptionDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray, + typeof(SubscriptionDiagnosticsArrayState)); + + if (array != null) + { + array.AddReference(ReferenceTypeIds.HasComponent, false, diagnosticsNode.NodeId); + } + + // add reference to session subscription array. + diagnosticsNode.AddReference( + ReferenceTypeIds.HasComponent, + true, + diagnostics.SessionId); + + // add reference from session subscription array. + SessionDiagnosticsObjectState sessionNode = (SessionDiagnosticsObjectState)FindPredefinedNode( + diagnostics.SessionId, + typeof(SessionDiagnosticsObjectState)); + + if (sessionNode != null) + { + // add reference from subscription array. + array = (SubscriptionDiagnosticsArrayState)sessionNode.CreateChild( + systemContext, + BrowseNames.SubscriptionDiagnosticsArray); + + if (array != null) + { + array.AddReference(ReferenceTypeIds.HasComponent, false, diagnosticsNode.NodeId); + } + } + + // send initial update. + DoScan(true); + } + + return nodeId; + } + + /// + /// Delete the diagnostics node for a subscription. + /// + public void DeleteSubscriptionDiagnostics( + ServerSystemContext systemContext, + NodeId nodeId) + { + lock (Lock) + { + for (int ii = 0; ii < m_subscriptions.Count; ii++) + { + SubscriptionDiagnosticsData diagnostics = m_subscriptions[ii]; + + if (diagnostics.Value.Variable.NodeId == nodeId) + { + m_subscriptions.RemoveAt(ii); + break; + } + } + } + + DeleteNode(systemContext, nodeId); + } + + /// + /// Gets the default history capabilities object. + /// + public HistoryServerCapabilitiesState GetDefaultHistoryCapabilities() + { + lock (Lock) + { + if (m_historyCapabilities != null) + { + return m_historyCapabilities; + } + + HistoryServerCapabilitiesState state = new HistoryServerCapabilitiesState(null); + + NodeId nodeId = CreateNode( + SystemContext, + null, + ReferenceTypeIds.HasComponent, + new QualifiedName(BrowseNames.HistoryServerCapabilities), + state); + + state.AccessHistoryDataCapability.Value = false; + state.AccessHistoryEventsCapability.Value = false; + state.MaxReturnDataValues.Value = 0; + state.MaxReturnEventValues.Value = 0; + state.ReplaceDataCapability.Value = false; + state.UpdateDataCapability.Value = false; + state.InsertEventCapability.Value = false; + state.ReplaceEventCapability.Value = false; + state.UpdateEventCapability.Value = false; + state.InsertAnnotationCapability.Value = false; + state.InsertDataCapability.Value = false; + state.DeleteRawCapability.Value = false; + state.DeleteAtTimeCapability.Value = false; + + NodeState parent = FindPredefinedNode(ObjectIds.Server_ServerCapabilities, typeof(ServerCapabilitiesState)); + + if (parent != null) + { + parent.AddReference(ReferenceTypes.HasComponent, false, state.NodeId); + state.AddReference(ReferenceTypes.HasComponent, true, parent.NodeId); + } + + AddPredefinedNode(SystemContext, state); + + m_historyCapabilities = state; + return m_historyCapabilities; + } + } + + /// + /// Adds an aggregate function to the server capabilities object. + /// + public void AddAggregateFunction(NodeId aggregateId, string aggregateName, bool isHistorical) + { + lock (Lock) + { + FolderState state = new FolderState(null); + + state.SymbolicName = aggregateName; + state.ReferenceTypeId = ReferenceTypes.HasComponent; + state.TypeDefinitionId = ObjectTypeIds.AggregateFunctionType; + state.NodeId = aggregateId; + state.BrowseName = new QualifiedName(aggregateName, aggregateId.NamespaceIndex); + state.DisplayName = state.BrowseName.Name; + state.WriteMask = AttributeWriteMask.None; + state.UserWriteMask = AttributeWriteMask.None; + state.EventNotifier = EventNotifiers.None; + + NodeState folder = FindPredefinedNode(ObjectIds.Server_ServerCapabilities_AggregateFunctions, typeof(BaseObjectState)); + + if (folder != null) + { + folder.AddReference(ReferenceTypes.Organizes, false, state.NodeId); + state.AddReference(ReferenceTypes.Organizes, true, folder.NodeId); + } + + if (isHistorical) + { + folder = FindPredefinedNode(ObjectIds.HistoryServerCapabilities_AggregateFunctions, typeof(BaseObjectState)); + + if (folder != null) + { + folder.AddReference(ReferenceTypes.Organizes, false, state.NodeId); + state.AddReference(ReferenceTypes.Organizes, true, folder.NodeId); + } + } + + AddPredefinedNode(SystemContext, state); + } + } + + /// + /// Updates the server diagnostics summary structure. + /// + private bool UpdateServerDiagnosticsSummary() + { + // get the latest snapshot. + object value = null; + + ServiceResult result = m_serverDiagnosticsCallback( + SystemContext, + m_serverDiagnostics.Variable, + ref value); + + ServerDiagnosticsSummaryDataType newValue = value as ServerDiagnosticsSummaryDataType; + + // check for changes. + if (Utils.IsEqual(newValue, m_serverDiagnostics.Value)) + { + return false; + } + + m_serverDiagnostics.Error = null; + + // check for bad value. + if (ServiceResult.IsNotBad(result) && newValue == null) + { + result = StatusCodes.BadOutOfService; + } + + // check for bad result. + if (ServiceResult.IsBad(result)) + { + m_serverDiagnostics.Error = result; + newValue = null; + } + + // update the value. + m_serverDiagnostics.Value = newValue; + m_serverDiagnostics.Timestamp = DateTime.UtcNow; + + // notify any monitored items. + m_serverDiagnostics.ChangesComplete(SystemContext); + + + return true; + } + + /// + /// Updates the session diagnostics summary structure. + /// + private bool UpdateSessionDiagnostics( + SessionDiagnosticsData diagnostics, + SessionDiagnosticsDataType[] sessionArray, + int index) + { + // get the latest snapshot. + object value = null; + + ServiceResult result = diagnostics.UpdateCallback( + SystemContext, + diagnostics.Value.Variable, + ref value); + + SessionDiagnosticsDataType newValue = value as SessionDiagnosticsDataType; + sessionArray[index] = newValue; + + // check for changes. + if (Utils.IsEqual(newValue, diagnostics.Value.Value)) + { + return false; + } + + diagnostics.Value.Error = null; + + // check for bad value. + if (ServiceResult.IsNotBad(result) && newValue == null) + { + result = StatusCodes.BadOutOfService; + } + + // check for bad result. + if (ServiceResult.IsBad(result)) + { + diagnostics.Value.Error = result; + newValue = null; + } + + // update the value. + diagnostics.Value.Value = newValue; + diagnostics.Value.Timestamp = DateTime.UtcNow; + + // notify any monitored items. + diagnostics.Value.ChangesComplete(SystemContext); + + return true; + } + + /// + /// Updates the session diagnostics summary structure. + /// + private bool UpdateSessionSecurityDiagnostics( + SessionDiagnosticsData diagnostics, + SessionSecurityDiagnosticsDataType[] sessionArray, + int index) + { + // get the latest snapshot. + object value = null; + + ServiceResult result = diagnostics.SecurityUpdateCallback( + SystemContext, + diagnostics.SecurityValue.Variable, + ref value); + + SessionSecurityDiagnosticsDataType newValue = value as SessionSecurityDiagnosticsDataType; + sessionArray[index] = newValue; + + // check for changes. + if (Utils.IsEqual(newValue, diagnostics.SecurityValue.Value)) + { + return false; + } + + diagnostics.SecurityValue.Error = null; + + // check for bad value. + if (ServiceResult.IsNotBad(result) && newValue == null) + { + result = StatusCodes.BadOutOfService; + } + + // check for bad result. + if (ServiceResult.IsBad(result)) + { + diagnostics.SecurityValue.Error = result; + newValue = null; + } + + // update the value. + diagnostics.SecurityValue.Value = newValue; + diagnostics.SecurityValue.Timestamp = DateTime.UtcNow; + + // notify any monitored items. + diagnostics.SecurityValue.ChangesComplete(SystemContext); + + return true; + } + + /// + /// Updates the subscription diagnostics summary structure. + /// + private bool UpdateSubscriptionDiagnostics( + SubscriptionDiagnosticsData diagnostics, + SubscriptionDiagnosticsDataType[] subscriptionArray, + int index) + { + // get the latest snapshot. + object value = null; + + ServiceResult result = diagnostics.UpdateCallback( + SystemContext, + diagnostics.Value.Variable, + ref value); + + SubscriptionDiagnosticsDataType newValue = value as SubscriptionDiagnosticsDataType; + subscriptionArray[index] = newValue; + + // check for changes. + if (Utils.IsEqual(newValue, diagnostics.Value.Value)) + { + return false; + } + + diagnostics.Value.Error = null; + + // check for bad value. + if (ServiceResult.IsNotBad(result) && newValue == null) + { + result = StatusCodes.BadOutOfService; + } + + // check for bad result. + if (ServiceResult.IsBad(result)) + { + diagnostics.Value.Error = result; + newValue = null; + } + + // update the value. + diagnostics.Value.Value = newValue; + diagnostics.Value.Timestamp = DateTime.UtcNow; + + // notify any monitored items. + diagnostics.Value.ChangesComplete(SystemContext); + + return true; + } + + /// + /// Does a scan before the diagnostics are read. + /// + private void OnBeforeReadDiagnostics( + ISystemContext context, + BaseVariableValue variable, + NodeState component) + { + lock (Lock) + { + if (!m_diagnosticsEnabled) + { + return; + } + + if (DateTime.UtcNow < m_lastDiagnosticsScanTime.AddSeconds(1)) + { + return; + } + + DoScan(true); + } + } + + /// + /// Does a scan before the diagnostics are read. + /// + private ServiceResult OnReadDiagnosticsArray( + ISystemContext context, + NodeState node, + ref object value) + { + lock (Lock) + { + if (!m_diagnosticsEnabled) + { + return StatusCodes.BadOutOfService; + } + + if (DateTime.UtcNow < m_lastDiagnosticsScanTime.AddSeconds(1)) + { + // diagnostic nodes already scanned. + return ServiceResult.Good; + } + + if (node.NodeId == VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray) + { + // read session diagnostics. + SessionDiagnosticsDataType[] sessionArray = new SessionDiagnosticsDataType[m_sessions.Count]; + + for (int ii = 0; ii < m_sessions.Count; ii++) + { + SessionDiagnosticsData diagnostics = m_sessions[ii]; + UpdateSessionDiagnostics(diagnostics, sessionArray, ii); + } + + value = sessionArray; + } + else if (node.NodeId == VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray) + { + // read session security diagnostics. + SessionSecurityDiagnosticsDataType[] sessionSecurityArray = new SessionSecurityDiagnosticsDataType[m_sessions.Count]; + + for (int ii = 0; ii < m_sessions.Count; ii++) + { + UpdateSessionSecurityDiagnostics(m_sessions[ii], sessionSecurityArray, ii); + } + + value = sessionSecurityArray; + } + else if (node.NodeId == VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray) + { + // read subscription diagnostics. + SubscriptionDiagnosticsDataType[] subscriptionArray = new SubscriptionDiagnosticsDataType[m_subscriptions.Count]; + + for (int ii = 0; ii < m_subscriptions.Count; ii++) + { + UpdateSubscriptionDiagnostics(m_subscriptions[ii], subscriptionArray, ii); + } + + value = subscriptionArray; + } + + return ServiceResult.Good; + } + } + + /// + /// Reports notifications for any monitored diagnostic nodes. + /// + private void DoScan(object alwaysUpdateArrays) + { + try + { + lock (Lock) + { + if (!m_diagnosticsEnabled) + { + return; + } + + m_lastDiagnosticsScanTime = DateTime.UtcNow; + + // update server diagnostics. + UpdateServerDiagnosticsSummary(); + + // update session diagnostics. + bool sessionsChanged = alwaysUpdateArrays != null; + SessionDiagnosticsDataType[] sessionArray = new SessionDiagnosticsDataType[m_sessions.Count]; + + for (int ii = 0; ii < m_sessions.Count; ii++) + { + SessionDiagnosticsData diagnostics = m_sessions[ii]; + + if (UpdateSessionDiagnostics(diagnostics, sessionArray, ii)) + { + sessionsChanged = true; + } + } + + // check of the session diagnostics array node needs to be updated. + SessionDiagnosticsArrayState sessionsNode = (SessionDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray, + typeof(SessionDiagnosticsArrayState)); + + if (sessionsNode != null && (sessionsNode.Value == null || StatusCode.IsBad(sessionsNode.StatusCode) || sessionsChanged)) + { + sessionsNode.Value = sessionArray; + sessionsNode.ClearChangeMasks(SystemContext, false); + } + + bool sessionsSecurityChanged = alwaysUpdateArrays != null; + SessionSecurityDiagnosticsDataType[] sessionSecurityArray = new SessionSecurityDiagnosticsDataType[m_sessions.Count]; + + for (int ii = 0; ii < m_sessions.Count; ii++) + { + SessionDiagnosticsData diagnostics = m_sessions[ii]; + + if (UpdateSessionSecurityDiagnostics(diagnostics, sessionSecurityArray, ii)) + { + sessionsSecurityChanged = true; + } + } + + // check of the array node needs to be updated. + SessionSecurityDiagnosticsArrayState sessionsSecurityNode = (SessionSecurityDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray, + typeof(SessionSecurityDiagnosticsArrayState)); + + if (sessionsSecurityNode != null && (sessionsSecurityNode.Value == null || StatusCode.IsBad(sessionsSecurityNode.StatusCode) || sessionsSecurityChanged)) + { + sessionsSecurityNode.Value = sessionSecurityArray; + sessionsSecurityNode.ClearChangeMasks(SystemContext, false); + } + + bool subscriptionsChanged = alwaysUpdateArrays != null; + SubscriptionDiagnosticsDataType[] subscriptionArray = new SubscriptionDiagnosticsDataType[m_subscriptions.Count]; + + for (int ii = 0; ii < m_subscriptions.Count; ii++) + { + SubscriptionDiagnosticsData diagnostics = m_subscriptions[ii]; + + if (UpdateSubscriptionDiagnostics(diagnostics, subscriptionArray, ii)) + { + subscriptionsChanged = true; + } + } + + // check of the subscription node needs to be updated. + SubscriptionDiagnosticsArrayState subscriptionsNode = (SubscriptionDiagnosticsArrayState)FindPredefinedNode( + VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray, + typeof(SubscriptionDiagnosticsArrayState)); + + if (subscriptionsNode != null && (subscriptionsNode.Value == null || StatusCode.IsBad(subscriptionsNode.StatusCode) || subscriptionsChanged)) + { + subscriptionsNode.Value = subscriptionArray; + subscriptionsNode.ClearChangeMasks(SystemContext, false); + } + + for (int ii = 0; ii < m_sessions.Count; ii++) + { + SessionDiagnosticsData diagnostics = m_sessions[ii]; + List subscriptionDiagnosticsArray = new List(); + + NodeId sessionId = diagnostics.Summary.NodeId; + + for (int jj = 0; jj < m_subscriptions.Count; jj++) + { + SubscriptionDiagnosticsData subscriptionDiagnostics = m_subscriptions[jj]; + + if (subscriptionDiagnostics.Value.Value == null) + { + continue; + } + + if (subscriptionDiagnostics.Value.Value.SessionId != sessionId) + { + continue; + } + + subscriptionDiagnosticsArray.Add(subscriptionDiagnostics.Value.Value); + } + + // update session subscription array. + subscriptionsNode = (SubscriptionDiagnosticsArrayState)diagnostics.Summary.CreateChild( + SystemContext, + BrowseNames.SubscriptionDiagnosticsArray); + + if (subscriptionsNode != null && (subscriptionsNode.Value == null || StatusCode.IsBad(subscriptionsNode.StatusCode) || subscriptionsChanged)) + { + subscriptionsNode.Value = subscriptionDiagnosticsArray.ToArray(); + subscriptionsNode.ClearChangeMasks(SystemContext, false); + } + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error during diagnostics scan."); + } + } + + /// + /// Validates the view description passed to a browse request (throws on error). + /// + protected override void ValidateViewDescription(ServerSystemContext context, ViewDescription view) + { + // always accept all views so the root nodes appear in the view. + } + + /// + /// Called after creating a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + protected override void OnMonitoredItemCreated( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem) + { + // check if the variable needs to be sampled. + if (monitoredItem.AttributeId == Attributes.Value) + { + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable != null && variable.MinimumSamplingInterval > 0) + { + CreateSampledItem(monitoredItem.SamplingInterval, monitoredItem); + } + } + + // check if diagnostics collection needs to be turned one. + if (IsDiagnosticsNode(handle.Node)) + { + monitoredItem.AlwaysReportUpdates = IsDiagnosticsStructureNode(handle.Node); + + if (monitoredItem.MonitoringMode != MonitoringMode.Disabled) + { + m_diagnosticsMonitoringCount++; + + if (m_diagnosticsScanTimer == null) + { + m_diagnosticsScanTimer = new Timer(DoScan, null, 1000, 1000); + } + + DoScan(true); + } + } + } + + /// + /// Called after deleting a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + protected override void OnMonitoredItemDeleted( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem) + { + // check if diagnostics collection needs to be turned off. + if (IsDiagnosticsNode(handle.Node)) + { + if (monitoredItem.MonitoringMode != MonitoringMode.Disabled) + { + m_diagnosticsMonitoringCount--; + + if (m_diagnosticsMonitoringCount == 0 && m_diagnosticsScanTimer != null) + { + m_diagnosticsScanTimer.Dispose(); + m_diagnosticsScanTimer = null; + } + + if (m_diagnosticsScanTimer != null) + { + DoScan(true); + } + } + } + + // check if sampling needs to be turned off. + if (monitoredItem.AttributeId == Attributes.Value) + { + BaseVariableState variable = handle.Node as BaseVariableState; + + if (variable != null && variable.MinimumSamplingInterval > 0) + { + DeleteSampledItem(monitoredItem); + } + } + } + + /// + /// Called after changing the MonitoringMode for a MonitoredItem. + /// + /// The context. + /// The handle for the node. + /// The monitored item. + /// The previous monitoring mode. + /// The current monitoring mode. + protected override void OnMonitoringModeChanged( + ServerSystemContext context, + NodeHandle handle, + MonitoredItem monitoredItem, + MonitoringMode previousMode, + MonitoringMode monitoringMode) + { + if (previousMode != MonitoringMode.Disabled) + { + m_diagnosticsMonitoringCount--; + } + + if (monitoringMode != MonitoringMode.Disabled) + { + m_diagnosticsMonitoringCount++; + } + + if (m_diagnosticsMonitoringCount == 0 && m_diagnosticsScanTimer != null) + { + if (m_diagnosticsScanTimer != null) + { + m_diagnosticsScanTimer.Dispose(); + m_diagnosticsScanTimer = null; + } + } + else + { + if (m_diagnosticsScanTimer != null) + { + m_diagnosticsScanTimer = new Timer(DoScan, null, 1000, 1000); + } + } + } + #endregion + + #region Node Access Functions +#if V1_Methods + /// + /// Returns an index for the NamespaceURI (Adds it to the server namespace table if it does not already exist). + /// + /// + /// Returns the server's default index (1) if the namespaceUri is empty or null. + /// + public ushort GetNamespaceIndex(string namespaceUri) + { + int namespaceIndex = 1; + + if (!String.IsNullOrEmpty(namespaceUri)) + { + namespaceIndex = Server.NamespaceUris.GetIndex(namespaceUri); + + if (namespaceIndex == -1) + { + namespaceIndex = Server.NamespaceUris.Append(namespaceUri); + } + } + + return (ushort)namespaceIndex; + } + + public NodeId FindTargetId(NodeId sourceId, NodeId referenceTypeId, bool isInverse, QualifiedName browseName) + { + return null; + } + + public ILocalNode GetLocalNode(NodeId nodeId) + { + return null; + } + + public ILocalNode GetTargetNode( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + return null; + } + + private ILocalNode GetTargetNode( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + return null; + } + + public void AttachNode(ILocalNode node) + { + } + + public void ReplaceNode(ILocalNode existingNode, ILocalNode newNode) + { + } + + public void DeleteNode(NodeId nodeId, bool deleteChildren, bool silent) + { + } + + public ILocalNode ReferenceSharedNode( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + QualifiedName browseName) + { + return null; + } + + public ILocalNode UnreferenceSharedNode( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + QualifiedName browseName) + { + return null; + } + + public NodeId CreateUniqueNodeId() + { + return null; + } + + public NodeId CreateObject( + NodeId parentId, + NodeId referenceTypeId, + NodeId nodeId, + QualifiedName browseName, + ObjectAttributes attributes, + ExpandedNodeId typeDefinitionId) + { + return null; + } + + public NodeId CreateObjectType( + NodeId parentId, + NodeId nodeId, + QualifiedName browseName, + ObjectTypeAttributes attributes) + { + return null; + } + + public NodeId CreateVariable( + NodeId parentId, + NodeId referenceTypeId, + NodeId nodeId, + QualifiedName browseName, + VariableAttributes attributes, + ExpandedNodeId typeDefinitionId) + { + return null; + } + + public NodeId CreateVariableType( + NodeId parentId, + NodeId nodeId, + QualifiedName browseName, + VariableTypeAttributes attributes) + { + return null; + } + + public NodeId CreateMethod( + NodeId parentId, + NodeId referenceTypeId, + NodeId nodeId, + QualifiedName browseName, + MethodAttributes attributes) + { + return null; + } +#endif + #endregion + + #region SessionDiagnosticsData Class + /// + /// Stores the callback information for a session diagnostics structures. + /// + private class SessionDiagnosticsData + { + public SessionDiagnosticsData( + SessionDiagnosticsObjectState summary, + SessionDiagnosticsVariableValue value, + NodeValueSimpleEventHandler updateCallback, + SessionSecurityDiagnosticsValue securityValue, + NodeValueSimpleEventHandler securityUpdateCallback) + { + Summary = summary; + Value = value; + UpdateCallback = updateCallback; + SecurityValue = securityValue; + SecurityUpdateCallback = securityUpdateCallback; + } + + public SessionDiagnosticsObjectState Summary; + public SessionDiagnosticsVariableValue Value; + public NodeValueSimpleEventHandler UpdateCallback; + public SessionSecurityDiagnosticsValue SecurityValue; + public NodeValueSimpleEventHandler SecurityUpdateCallback; + } + #endregion + + #region SubscriptionDiagnosticsData Class + /// + /// Stores the callback information for a subscription diagnostics structure. + /// + private class SubscriptionDiagnosticsData + { + public SubscriptionDiagnosticsData( + SubscriptionDiagnosticsValue value, + NodeValueSimpleEventHandler updateCallback) + { + Value = value; + UpdateCallback = updateCallback; + } + + public SubscriptionDiagnosticsValue Value; + public NodeValueSimpleEventHandler UpdateCallback; + } + #endregion + + #region Private Methods + /// + /// Creates a new sampled item. + /// + private void CreateSampledItem(double samplingInterval, MonitoredItem monitoredItem) + { + m_sampledItems.Add(monitoredItem); + + if (m_samplingTimer == null) + { + m_samplingTimer = new Timer(DoSample, null, (int)m_minimumSamplingInterval, (int)m_minimumSamplingInterval); + } + } + + /// + /// Deletes a sampled item. + /// + private void DeleteSampledItem(MonitoredItem monitoredItem) + { + for (int ii = 0; ii < m_sampledItems.Count; ii++) + { + if (Object.ReferenceEquals(monitoredItem, m_sampledItems[ii])) + { + m_sampledItems.RemoveAt(ii); + break; + } + } + + if (m_sampledItems.Count == 0) + { + if (m_samplingTimer != null) + { + m_samplingTimer.Dispose(); + m_samplingTimer = null; + } + } + } + + /// + /// Polls each monitored item which requires sample. + /// + private void DoSample(object state) + { + try + { + lock (Lock) + { + for (int ii = 0; ii < m_sampledItems.Count; ii++) + { + MonitoredItem monitoredItem = m_sampledItems[ii]; + + // get the handle. + NodeHandle handle = monitoredItem.ManagerHandle as NodeHandle; + + if (handle == null) + { + continue; + } + + // check if it is time to sample. + if (monitoredItem.TimeToNextSample > m_minimumSamplingInterval) + { + continue; + } + + // read the value. + DataValue value = new DataValue(); + + ServiceResult error = handle.Node.ReadAttribute( + SystemContext, + monitoredItem.AttributeId, + monitoredItem.IndexRange, + monitoredItem.DataEncoding, + value); + + if (ServiceResult.IsBad(error)) + { + value = new DataValue(error.StatusCode); + } + + value.ServerTimestamp = DateTime.UtcNow; + + // queue the value. + monitoredItem.QueueValue(value, error); + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error during diagnostics scan."); + } + } + #endregion + + #region Private Fields + private ushort m_namespaceIndex; + private long m_lastUsedId; + private Timer m_diagnosticsScanTimer; + private int m_diagnosticsMonitoringCount; + private bool m_diagnosticsEnabled; + private DateTime m_lastDiagnosticsScanTime; + private ServerDiagnosticsSummaryValue m_serverDiagnostics; + private NodeValueSimpleEventHandler m_serverDiagnosticsCallback; + private List m_sessions; + private List m_subscriptions; + private NodeId m_serverLockHolder; + private Timer m_samplingTimer; + private List m_sampledItems; + private double m_minimumSamplingInterval; + private HistoryServerCapabilitiesState m_historyCapabilities; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/MonitoredItemQueue.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/MonitoredItemQueue.cs new file mode 100644 index 00000000..1941b0fd --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/MonitoredItemQueue.cs @@ -0,0 +1,447 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Provides a queue for data changes. + /// + public class MonitoredItemQueue + { + /// + /// Creates an empty queue. + /// + public MonitoredItemQueue(uint monitoredItemId, DiscardedValueHandler discardedValueHandler = null) + { + m_monitoredItemId = monitoredItemId; + m_values = null; + m_errors = null; + m_start = -1; + m_end = -1; + m_overflow = -1; + m_discardOldest = false; + m_nextSampleTime = 0; + m_samplingInterval = 0; + m_discardedValueHandler = discardedValueHandler; + } + + #region Public Methods + /// + /// The delegate for the discarded value handler. + /// + public delegate void DiscardedValueHandler(); + + /// + /// Gets the current queue size. + /// + public uint QueueSize + { + get + { + if (m_values == null) + { + return 0; + } + + return (uint)m_values.Length; + } + } + + /// + /// Gets number of elements actually contained in value queue. + /// + public int ItemsInQueue + { + get + { + if (m_values == null) + { + return 0; + } + + if (m_start < m_end) + { + return m_end - m_start - 1; + } + + return m_values.Length - m_start + m_end - 1; + } + } + + /// + /// Sets the sampling interval used when queuing values. + /// + /// The new sampling interval. + public void SetSamplingInterval(double samplingInterval) + { + // substract the previous sampling interval. + if (m_samplingInterval < m_nextSampleTime) + { + m_nextSampleTime -= m_samplingInterval; + } + + // calculate the next sampling interval. + m_samplingInterval = (long)samplingInterval; + + if (m_samplingInterval > 0) + { + m_nextSampleTime += m_samplingInterval; + } + else + { + m_nextSampleTime = 0; + } + } + + /// + /// Sets the queue size. + /// + /// The new queue size. + /// Whether to discard the oldest values if the queue overflows. + /// Specifies which diagnostics which should be kept in the queue. + public void SetQueueSize(uint queueSize, bool discardOldest, DiagnosticsMasks diagnosticsMasks) + { + int length = (int)queueSize; + + if (length < 1) + { + length = 1; + } + + int start = m_start; + int end = m_end; + + // create new queue. + DataValue[] values = new DataValue[length]; + ServiceResult[] errors = null; + + if ((diagnosticsMasks & DiagnosticsMasks.OperationAll) != 0) + { + errors = new ServiceResult[length]; + } + + // copy existing values. + List existingValues = null; + List existingErrors = null; + + if (m_start >= 0) + { + existingValues = new List(); + existingErrors = new List(); + + DataValue value = null; + ServiceResult error = null; + + while (Dequeue(out value, out error)) + { + existingValues.Add(value); + existingErrors.Add(error); + } + } + + // update internals. + m_values = values; + m_errors = errors; + m_start = -1; + m_end = 0; + m_overflow = -1; + m_discardOldest = discardOldest; + + // requeue the data. + if (existingValues != null) + { + for (int ii = 0; ii < existingValues.Count; ii++) + { + Enqueue(existingValues[ii], existingErrors[ii]); + } + } + } + + /// + /// Adds the value to the queue. + /// + /// The value to queue. + /// The error to queue. + public void QueueValue(DataValue value, ServiceResult error) + { + long now = HiResClock.TickCount64; + + if (m_start >= 0) + { + // check if too soon for another sample. + if (now < m_nextSampleTime) + { + int last = m_end - 1; + + if (last < 0) + { + last = m_values.Length - 1; + } + + // replace last value and error. + m_values[last] = value; + + if (m_errors != null) + { + m_errors[last] = error; + } + + m_discardedValueHandler?.Invoke(); + + return; + } + } + + // update next sample time. + if (m_nextSampleTime > 0) + { + long delta = now - m_nextSampleTime; + + if (m_samplingInterval > 0 && delta >= 0) + { + m_nextSampleTime += ((delta / m_samplingInterval) + 1) * m_samplingInterval; + } + } + else + { + m_nextSampleTime = now + m_samplingInterval; + } + + // queue next value. + Enqueue(value, error); + } + + /// + /// Publishes the oldest value in the queue. + /// + /// The value. + /// The error associated with the value. + /// True if a value was found. False if the queue is empty. + public bool Publish(out DataValue value, out ServiceResult error) + { + return Dequeue(out value, out error); + } + #endregion + + #region Private Methods + /// + /// Adds the value to the queue. Discards values if the queue is full. + /// + /// The value to add. + /// The error to add. + private void Enqueue(DataValue value, ServiceResult error) + { + // check for empty queue. + if (m_start < 0) + { + m_start = 0; + m_end = 1; + m_overflow = -1; + + Utils.Trace("ENQUEUE VALUE: Value={0}", value.WrappedValue); + + m_values[m_start] = value; + + if (m_errors != null) + { + m_errors[m_start] = error; + } + + return; + } + + int next = m_end; + + // check if the latest value has initial dummy data + if (m_values[m_end - 1].StatusCode != StatusCodes.BadWaitingForInitialData) + { + // check for wrap around. + if (next >= m_values.Length) + { + next = 0; + } + + // check if queue is full. + if (m_start == next) + { + m_discardedValueHandler?.Invoke(); + + if (!m_discardOldest) + { + m_overflow = m_end - 1; + ServerUtils.ReportDiscardedValue(null, m_monitoredItemId, value); + + // overwrite last value + m_values[m_overflow] = value; + + if (m_errors != null) + { + m_errors[m_overflow] = error; + } + + return; + } + + // remove oldest value. + m_start++; + + if (m_start >= m_values.Length) + { + m_start = 0; + } + + // set overflow bit. + m_overflow = m_start; + ServerUtils.ReportDiscardedValue(null, m_monitoredItemId, m_values[m_overflow]); + } + else + { + Utils.Trace("ENQUEUE VALUE: Value={0}", value.WrappedValue); + } + } + else + { + // overwrite the last value + next = m_end - 1; + } + + // add value. + m_values[next] = value; + + if (m_errors != null) + { + m_errors[next] = error; + } + + m_end = next + 1; + } + + /// + /// Removes a value and an error from the queue. + /// + /// The value removed from the queue. + /// The error removed from the queue. + /// True if a value was found. False if the queue is empty. + private bool Dequeue(out DataValue value, out ServiceResult error) + { + value = null; + error = null; + + // check for empty queue. + if (m_start < 0) + { + return false; + } + + value = m_values[m_start]; + m_values[m_start] = null; + + if (m_errors != null) + { + error = m_errors[m_start]; + m_errors[m_start] = null; + } + + // set the overflow bit. + if (m_overflow == m_start) + { + SetOverflowBit(ref value, ref error); + m_overflow = -1; + } + + m_start++; + + // check if queue has been emptied. + if (m_start == m_end) + { + m_start = -1; + m_end = 0; + } + + // check for wrap around. + else if (m_start >= m_values.Length) + { + m_start = 0; + } + + Utils.Trace("DEQUEUE VALUE: Value={0} CODE={1}<{1:X8}> OVERFLOW={2}", value.WrappedValue, value.StatusCode.Code, value.StatusCode.Overflow); + + return true; + } + + /// + /// Sets the overflow bit in the value and error. + /// + /// The value to update. + /// The error to update. + private void SetOverflowBit(ref DataValue value, ref ServiceResult error) + { + if (value != null) + { + StatusCode status = value.StatusCode; + status.Overflow = true; + value.StatusCode = status; + } + + if (error != null) + { + StatusCode status = error.StatusCode; + status.Overflow = true; + + // have to copy before updating because the ServiceResult is invariant. + ServiceResult copy = new ServiceResult( + status, + error.SymbolicId, + error.NamespaceUri, + error.LocalizedText, + error.AdditionalInfo, + error.InnerResult); + + error = copy; + } + } + #endregion + + #region Private Fields + private uint m_monitoredItemId; + private DataValue[] m_values; + private ServiceResult[] m_errors; + private int m_start; + private int m_end; + private int m_overflow; + private bool m_discardOldest; + private long m_nextSampleTime; + private long m_samplingInterval; + DiscardedValueHandler m_discardedValueHandler; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs new file mode 100644 index 00000000..71739412 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs @@ -0,0 +1,324 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua; +using Opc.Ua.Server; + +namespace Opc.Ua.Server +{ + /// + /// Stores the current set of MonitoredItems for a Node. + /// + /// + /// An instance of this object is created the first time a MonitoredItem is + /// created for any attribute of a Node. The object is deleted when the last + /// MonitoredItem is deleted. + /// + public class MonitoredNode2 + { + #region Public Interface + /// + /// Initializes a new instance of the class. + /// + /// The node manager. + /// The node. + public MonitoredNode2(CustomNodeManager2 nodeManager, NodeState node) + { + NodeManager = nodeManager; + Node = node; + } + + /// + /// Gets or sets the NodeManager which the MonitoredNode belongs to. + /// + public CustomNodeManager2 NodeManager + { + get { return m_nodeManager; } + set { m_nodeManager = value; } + } + + /// + /// Gets or sets the Node being monitored. + /// + public NodeState Node + { + get { return m_node; } + set { m_node = value; } + } + + /// + /// Gets the current list of data change MonitoredItems. + /// + public List DataChangeMonitoredItems + { + get { return m_dataChangeMonitoredItems; } + private set { m_dataChangeMonitoredItems = value; } + } + + /// + /// Gets the current list of event MonitoredItems. + /// + public List EventMonitoredItems + { + get { return m_eventMonitoredItems; } + private set { m_eventMonitoredItems = value; } + } + + /// + /// Gets a value indicating whether this instance has monitored items. + /// + /// + /// true if this instance has monitored items; otherwise, false. + /// + public bool HasMonitoredItems + { + get + { + if (DataChangeMonitoredItems != null && DataChangeMonitoredItems.Count > 0) + { + return true; + } + + if (EventMonitoredItems != null && EventMonitoredItems.Count > 0) + { + return true; + } + + return false; + } + } + + /// + /// Adds the specified data change monitored item. + /// + /// The monitored item. + public void Add(MonitoredItem datachangeItem) + { + if (DataChangeMonitoredItems == null) + { + DataChangeMonitoredItems = new List(); + Node.OnStateChanged = OnMonitoredNodeChanged; + } + + DataChangeMonitoredItems.Add(datachangeItem); + } + + /// + /// Removes the specified data change monitored item. + /// + /// The monitored item. + public void Remove(MonitoredItem datachangeItem) + { + for (int ii = 0; ii < DataChangeMonitoredItems.Count; ii++) + { + if (Object.ReferenceEquals(DataChangeMonitoredItems[ii], datachangeItem)) + { + DataChangeMonitoredItems.RemoveAt(ii); + break; + } + } + + if (DataChangeMonitoredItems.Count == 0) + { + DataChangeMonitoredItems = null; + Node.OnStateChanged = null; + } + } + + /// + /// Adds the specified event monitored item. + /// + /// The monitored item. + public void Add(IEventMonitoredItem eventItem) + { + if (EventMonitoredItems == null) + { + EventMonitoredItems = new List(); + Node.OnReportEvent = OnReportEvent; + } + + EventMonitoredItems.Add(eventItem); + } + + /// + /// Removes the specified event monitored item. + /// + /// The monitored item. + public void Remove(IEventMonitoredItem eventItem) + { + for (int ii = 0; ii < EventMonitoredItems.Count; ii++) + { + if (Object.ReferenceEquals(EventMonitoredItems[ii], eventItem)) + { + EventMonitoredItems.RemoveAt(ii); + break; + } + } + + if (EventMonitoredItems.Count == 0) + { + EventMonitoredItems = null; + Node.OnReportEvent = null; + } + } + + /// + /// Called when a Node produces an event. + /// + /// The system context. + /// The affected node. + /// The event. + public void OnReportEvent(ISystemContext context, NodeState node, IFilterTarget e) + { + List eventMonitoredItems = new List(); + + lock (NodeManager.Lock) + { + if (EventMonitoredItems == null) + { + return; + } + + for (int ii = 0; ii < EventMonitoredItems.Count; ii++) + { + IEventMonitoredItem monitoredItem = EventMonitoredItems[ii]; + // enqueue event for role permission validation + eventMonitoredItems.Add(monitoredItem); + } + } + + for (int ii = 0; ii < eventMonitoredItems.Count; ii++) + { + IEventMonitoredItem monitoredItem = eventMonitoredItems[ii]; + BaseEventState baseEventState = e as BaseEventState; + + if (baseEventState != null) + { + ServiceResult validationResult = NodeManager.ValidateRolePermissions(new OperationContext(monitoredItem), + baseEventState?.EventType?.Value, PermissionType.ReceiveEvents); + + if (ServiceResult.IsBad(validationResult)) + { + // skip event reporting for EventType without permissions + continue; + } + + validationResult = NodeManager.ValidateRolePermissions(new OperationContext(monitoredItem), + baseEventState?.SourceNode?.Value, PermissionType.ReceiveEvents); + + if (ServiceResult.IsBad(validationResult)) + { + // skip event reporting for SourceNode without permissions + continue; + } + } + + lock (NodeManager.Lock) + { + // enqueue event + monitoredItem?.QueueEvent(e); + } + } + } + + /// + /// Called when the state of a Node changes. + /// + /// The system context. + /// The affected node. + /// The mask indicating what changes have occurred. + public void OnMonitoredNodeChanged(ISystemContext context, NodeState node, NodeStateChangeMasks changes) + { + lock (NodeManager.Lock) + { + if (DataChangeMonitoredItems == null) + { + return; + } + + for (int ii = 0; ii < DataChangeMonitoredItems.Count; ii++) + { + MonitoredItem monitoredItem = DataChangeMonitoredItems[ii]; + + if (monitoredItem.AttributeId == Attributes.Value && (changes & NodeStateChangeMasks.Value) != 0) + { + QueueValue(context, node, monitoredItem); + continue; + } + + if (monitoredItem.AttributeId != Attributes.Value && (changes & NodeStateChangeMasks.NonValue) != 0) + { + QueueValue(context, node, monitoredItem); + continue; + } + } + } + } + + /// + /// Reads the value of an attribute and reports it to the MonitoredItem. + /// + public void QueueValue( + ISystemContext context, + NodeState node, + MonitoredItem monitoredItem) + { + DataValue value = new DataValue(); + + value.Value = null; + value.ServerTimestamp = DateTime.UtcNow; + value.SourceTimestamp = DateTime.MinValue; + value.StatusCode = StatusCodes.Good; + + ServiceResult error = node.ReadAttribute( + context, + monitoredItem.AttributeId, + monitoredItem.IndexRange, + monitoredItem.DataEncoding, + value); + + if (ServiceResult.IsBad(error)) + { + value = null; + } + + monitoredItem.QueueValue(value, error); + } + #endregion + + #region Private Fields + private CustomNodeManager2 m_nodeManager; + private NodeState m_node; + private List m_dataChangeMonitoredItems; + private List m_eventMonitoredItems; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/NodeHandle.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/NodeHandle.cs new file mode 100644 index 00000000..c1fc25c9 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/NodeHandle.cs @@ -0,0 +1,119 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Text; +using Opc.Ua; + +namespace Opc.Ua.Server +{ + /// + /// Stores information about a NodeId specified by the client. + /// + /// + /// A NodeHandle is created when GetManagerHandle is called and will only contain + /// information found by parsing the NodeId. The ValidateNode method is used to + /// verify that the NodeId refers to a real Node and find a NodeState object that + /// can be used to access the Node. + /// + public class NodeHandle + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public NodeHandle() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The node id. + /// The node. + public NodeHandle(NodeId nodeId, NodeState node) + { + this.NodeId = nodeId; + this.Validated = true; + this.Node = node; + } + #endregion + + #region Public Interface + /// + /// The NodeId provided by the client. + /// + public NodeId NodeId { get; set; } + + /// + /// The parsed identifier (must not be null if Validated == False). + /// + public object ParsedNodeId { get; set; } + + /// + /// A unique string identifier for the root of a complex object tree. + /// + public NodeId RootId { get; set; } + + /// + /// A path to a component within the tree identified by the root id. + /// + public string ComponentPath { get; set; } + + /// + /// An index associated with the handle. + /// + /// + /// This is used to keep track of the position in the complete list of Nodes provided by the Client. + /// + public int Index { get; set; } + + /// + /// Whether the handle has been validated. + /// + /// + /// When validation is complete the Node property must have a valid object. + /// + public bool Validated { get; set; } + + /// + /// An object that can be used to access the Node identified by the NodeId. + /// + /// + /// Not set until after the handle is validated. + /// + public NodeState Node { get; set; } + + /// + /// An object that can be used to manage the items which are monitoring the node. + /// + public MonitoredNode2 MonitoredNode { get; set; } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/ParsedNodeId.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/ParsedNodeId.cs new file mode 100644 index 00000000..7ec0bb3b --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/ParsedNodeId.cs @@ -0,0 +1,321 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Text; +using Opc.Ua; + +namespace Opc.Ua.Server +{ + /// + /// Stores the elements of a NodeId after it is parsed. + /// + /// + /// The NodeIds used by the samples are strings with an optional path appended. + /// The RootType identifies the type of Root Node. The RootId is the unique identifier + /// for the Root Node. The ComponentPath is constructed from the SymbolicNames + /// of one or more children of the Root Node. + /// + public class ParsedNodeId + { + #region Public Interface + /// + /// The namespace index that qualified the NodeId. + /// + public ushort NamespaceIndex + { + get { return m_namespaceIndex; } + set { m_namespaceIndex = value; } + } + + /// + /// The identifier for the root of the NodeId. + /// + public string RootId + { + get { return m_rootId; } + set { m_rootId = value; } + } + + /// + /// The type of root node. + /// + public int RootType + { + get { return m_rootType; } + set { m_rootType = value; } + } + + /// + /// The relative path to the component identified by the NodeId. + /// + public string ComponentPath + { + get { return m_componentPath; } + set { m_componentPath = value; } + } + + /// + /// Parses the specified node identifier. + /// + /// The node identifier. + /// The parsed node identifier. Null if the identifier cannot be parsed. + public static ParsedNodeId Parse(NodeId nodeId) + { + // can only parse non-null string node identifiers. + if (NodeId.IsNull(nodeId)) + { + return null; + } + + string identifier = nodeId.Identifier as string; + + if (String.IsNullOrEmpty(identifier)) + { + return null; + } + + ParsedNodeId parsedNodeId = new ParsedNodeId(); + parsedNodeId.NamespaceIndex = nodeId.NamespaceIndex; + + // extract the type of identifier. + parsedNodeId.RootType = 0; + + int start = 0; + + for (int ii = 0; ii < identifier.Length; ii++) + { + if (!Char.IsDigit(identifier[ii])) + { + start = ii; + break; + } + + parsedNodeId.RootType *= 10; + parsedNodeId.RootType += (byte)(identifier[ii] - '0'); + } + + if (start >= identifier.Length || identifier[start] != ':') + { + return null; + } + + // extract any component path. + StringBuilder buffer = new StringBuilder(); + + int index = start+1; + int end = identifier.Length; + + bool escaped = false; + + while (index < end) + { + char ch = identifier[index++]; + + // skip any escape character but keep the one after it. + if (ch == '&') + { + escaped = true; + continue; + } + + if (!escaped && ch == '?') + { + end = index; + break; + } + + buffer.Append(ch); + escaped = false; + } + + // extract any component. + parsedNodeId.RootId = buffer.ToString(); + parsedNodeId.ComponentPath = null; + + if (end < identifier.Length) + { + parsedNodeId.ComponentPath = identifier.Substring(end); + } + + return parsedNodeId; + } + + + /// + /// Constructs a node identifier from the component pieces. + /// + public static NodeId Construct(int rootType, string rootId, ushort namespaceIndex, params string[] componentNames) + { + ParsedNodeId pnd = new ParsedNodeId(); + + pnd.RootType = rootType; + pnd.RootId = rootId; + pnd.NamespaceIndex = namespaceIndex; + + if (componentNames != null) + { + StringBuilder path = new StringBuilder(); + + for (int ii = 0; ii < componentNames.Length; ii++) + { + if (path.Length > 0) + { + path.Append('/'); + } + + path.Append(componentNames[ii]); + } + + pnd.ComponentPath = path.ToString(); + } + + return pnd.Construct(null); + } + + /// + /// Constructs a node identifier. + /// + /// The node identifier. + public NodeId Construct() + { + return Construct(null); + } + + /// + /// Constructs a node identifier for a component with the specified name. + /// + /// The node identifier. + public NodeId Construct(string componentName) + { + StringBuilder buffer = new StringBuilder(); + + // add the root type. + buffer.Append(RootType); + buffer.Append(':'); + + // add the root identifier. + if (this.RootId != null) + { + for (int ii = 0; ii < this.RootId.Length; ii++) + { + char ch = this.RootId[ii]; + + // escape any special characters. + if (ch == '&' || ch == '?') + { + buffer.Append('&'); + } + + buffer.Append(ch); + } + } + + // add the component path. + if (!String.IsNullOrEmpty(this.ComponentPath)) + { + buffer.Append('?'); + buffer.Append(this.ComponentPath); + } + + // add the component name. + if (!String.IsNullOrEmpty(componentName)) + { + if (String.IsNullOrEmpty(this.ComponentPath)) + { + buffer.Append('?'); + } + else + { + buffer.Append('/'); + } + + buffer.Append(componentName); + } + + // construct the node id with the namespace index provided. + return new NodeId(buffer.ToString(), this.NamespaceIndex); + } + + /// + /// Constructs the node identifier for a component. + /// + public static NodeId CreateIdForComponent(NodeState component, ushort namespaceIndex) + { + if (component == null) + { + return null; + } + + // components must be instances with a parent. + BaseInstanceState instance = component as BaseInstanceState; + + if (instance == null || instance.Parent == null) + { + return component.NodeId; + } + + // parent must have a string identifier. + string parentId = instance.Parent.NodeId.Identifier as string; + + if (parentId == null) + { + return null; + } + + StringBuilder buffer = new StringBuilder(); + buffer.Append(parentId); + + // check if the parent is another component. + int index = parentId.IndexOf('?'); + + if (index < 0) + { + buffer.Append('?'); + } + else + { + buffer.Append('/'); + } + + buffer.Append(component.SymbolicName); + + // return the node identifier. + return new NodeId(buffer.ToString(), namespaceIndex); + } + #endregion + + #region Private Fields + private ushort m_namespaceIndex; + private string m_rootId; + private int m_rootType; + private string m_componentPath; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/CustomNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/CustomNodeManager.cs new file mode 100644 index 00000000..ebd80308 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/CustomNodeManager.cs @@ -0,0 +1,3005 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Diagnostics; +using System.Xml; +using System.IO; +using System.Threading; +using System.Reflection; + +namespace Opc.Ua.Server +{ + /// + /// A node manager for a variety of test data. + /// + [Obsolete("Class replaced by Opc.Ua.Server.CustomNodeManager2")] + public class CustomNodeManager : INodeManager, INodeIdFactory, IDisposable + { + #region Constructors + /// + /// Initializes the node manager. + /// + public CustomNodeManager(IServerInternal server) + { + // save a reference to the server that owns the node manager. + m_server = server; + + // create the default context. + m_systemContext = m_server.DefaultSystemContext.Copy(); + + m_systemContext.SystemHandle = null; + m_systemContext.NodeIdFactory = this; + + // create the table of nodes. + m_predefinedNodes = new NodeIdDictionary(); + m_rootNotifiers = new List(); + m_sampledItems = new List(); + m_minimumSamplingInterval = 100; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + Utils.SilentDispose(m_samplingTimer); + m_samplingTimer = null; + + if (m_predefinedNodes != null) + { + foreach (NodeState node in m_predefinedNodes.Values) + { + Utils.SilentDispose(node); + } + } + } + } + } + #endregion + + #region INodeIdFactory Members + /// + /// Creates the NodeId for the specified node. + /// + /// The context. + /// The node. + /// The new NodeId. + public virtual NodeId New(ISystemContext context, NodeState node) + { + return node.NodeId; + } + #endregion + + #region Public Properties + /// + /// Acquires the lock on the node manager. + /// + public object Lock + { + get { return m_lock; } + } + #endregion + + #region Protected Members + /// + /// The server that the node manager belongs to. + /// + protected IServerInternal Server + { + get { return m_server; } + } + + /// + /// The default context to use. + /// + protected ServerSystemContext SystemContext + { + get { return m_systemContext; } + } + + /// + /// The predefined nodes managed by the node manager. + /// + protected NodeIdDictionary PredefinedNodes + { + get { return m_predefinedNodes; } + } + + /// + /// The root notifiers for the node manager. + /// + protected List RootNotifiers + { + get { return m_rootNotifiers; } + } + + /// + /// Returns true if the namespace for the node id is one of the namespaces managed by the node manager. + /// + /// The node id to check. + /// True if the namespace is one of the nodes. + protected virtual bool IsNodeIdInNamespace(NodeId nodeId) + { + if (NodeId.IsNull(nodeId)) + { + return false; + } + + // quickly exclude nodes that not in the namespace. + for (int ii = 0; ii < m_namespaceIndexes.Length; ii++) + { + if (nodeId.NamespaceIndex == m_namespaceIndexes[ii]) + { + return true; + } + } + + return false; + } + + /// + /// Returns the node if the handle refers to a node managed by this manager. + /// + /// The handle to check. + /// Non-null if the handle belongs to the node manager. + protected virtual NodeState IsHandleInNamespace(object managerHandle) + { + NodeState source = managerHandle as NodeState; + + if (source == null) + { + return null; + } + + if (!IsNodeIdInNamespace(source.NodeId)) + { + return null; + } + + return source; + } + + /// + /// Returns the state object for the specified node if it exists. + /// + public NodeState Find(NodeId nodeId) + { + lock (Lock) + { + NodeState node = null; + + if (!PredefinedNodes.TryGetValue(nodeId, out node)) + { + return null; + } + + return node; + } + } + + /// + /// Creates a new instance and assigns unique identifiers to all children. + /// + /// The operation context. + /// An optional parent identifier. + /// The reference type from the parent. + /// The browse name. + /// The instance to create. + /// The new node id. + public NodeId CreateNode( + ServerSystemContext context, + NodeId parentId, + NodeId referenceTypeId, + QualifiedName browseName, + BaseInstanceState instance) + { + ServerSystemContext contextToUse = (ServerSystemContext)m_systemContext.Copy(context); + + lock (Lock) + { + instance.ReferenceTypeId = referenceTypeId; + + NodeState parent = null; + + if (parentId != null) + { + if (!PredefinedNodes.TryGetValue(parentId, out parent)) + { + throw ServiceResultException.Create( + StatusCodes.BadNodeIdUnknown, + "Cannot find parent with id: {0}", + parentId); + } + + parent.AddChild(instance); + } + + instance.Create(contextToUse, null, browseName, null, true); + AddPredefinedNode(contextToUse, instance); + + return instance.NodeId; + } + } + + /// + /// Deletes a node and all of its children. + /// + public bool DeleteNode( + ServerSystemContext context, + NodeId nodeId) + { + ServerSystemContext contextToUse = m_systemContext.Copy(context); + + bool found = false; + List referencesToRemove = new List(); + + lock (Lock) + { + NodeState node = null; + + if (PredefinedNodes.TryGetValue(nodeId, out node)) + { + RemovePredefinedNode(contextToUse, node, referencesToRemove); + found = true; + } + + RemoveRootNotifier(node); + } + + // must release the lock before removing cross references to other node managers. + if (referencesToRemove.Count > 0) + { + Server.NodeManager.RemoveReferences(referencesToRemove); + } + + return found; + } + #endregion + + #region INodeManager Members + /// + /// Returns the namespaces used by the node manager. + /// + /// + /// All NodeIds exposed by the node manager must be qualified by a namespace URI. This property + /// returns the URIs used by the node manager. In this example all NodeIds use a single URI. + /// + public virtual IEnumerable NamespaceUris + { + get + { + return m_namespaceUris; + } + + protected set + { + if (value != null) + { + m_namespaceUris = new List(value); + } + else + { + m_namespaceUris = new List(); + } + + m_namespaceIndexes = new ushort[m_namespaceUris.Count]; + } + } + + /// + /// Does any initialization required before the address space can be used. + /// + /// + /// The externalReferences is an out parameter that allows the node manager to link to nodes + /// in other node managers. For example, the 'Objects' node is managed by the CoreNodeManager and + /// should have a reference to the root folder node(s) exposed by this node manager. + /// + public virtual void CreateAddressSpace(IDictionary> externalReferences) + { + lock (Lock) + { + // add the uris to the server's namespace table and cache the indexes. + for (int ii = 0; ii < m_namespaceUris.Count; ii++) + { + m_namespaceIndexes[ii] = m_server.NamespaceUris.GetIndexOrAppend(m_namespaceUris[ii]); + } + + LoadPredefinedNodes(m_systemContext, externalReferences); + } + } + + #region CreateAddressSpace Support Functions + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + public virtual void LoadPredefinedNodes( + ISystemContext context, + Assembly assembly, + string resourcePath, + IDictionary> externalReferences) + { + // load the predefined nodes from an XML document. + NodeStateCollection predefinedNodes = new NodeStateCollection(); + predefinedNodes.LoadFromResource(context, resourcePath, assembly, true); + + // add the predefined nodes to the node manager. + for (int ii = 0; ii < predefinedNodes.Count; ii++) + { + AddPredefinedNode(context, predefinedNodes[ii]); + } + + // ensure the reverse references exist. + AddReverseReferences(externalReferences); + } + + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + protected virtual NodeStateCollection LoadPredefinedNodes(ISystemContext context) + { + return new NodeStateCollection(); + } + + /// + /// Loads a node set from a file or resource and addes them to the set of predefined nodes. + /// + protected virtual void LoadPredefinedNodes( + ISystemContext context, + IDictionary> externalReferences) + { + // load the predefined nodes from an XML document. + NodeStateCollection predefinedNodes = LoadPredefinedNodes(context); + + // add the predefined nodes to the node manager. + for (int ii = 0; ii < predefinedNodes.Count; ii++) + { + AddPredefinedNode(context, predefinedNodes[ii]); + } + + // ensure the reverse references exist. + AddReverseReferences(externalReferences); + } + + /// + /// Replaces the generic node with a node specific to the model. + /// + protected virtual NodeState AddBehaviourToPredefinedNode(ISystemContext context, NodeState predefinedNode) + { + BaseObjectState passiveNode = predefinedNode as BaseObjectState; + + if (passiveNode == null) + { + return predefinedNode; + } + + return predefinedNode; + } + + /// + /// Recursively indexes the node and its children. + /// + protected virtual void AddPredefinedNode(ISystemContext context, NodeState node) + { + NodeState activeNode = AddBehaviourToPredefinedNode(context, node); + m_predefinedNodes[activeNode.NodeId] = activeNode; + + BaseTypeState type = activeNode as BaseTypeState; + + if (type != null) + { + AddTypesToTypeTree(type); + } + + List children = new List(); + activeNode.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + AddPredefinedNode(context, children[ii]); + } + } + + /// + /// Recursively indexes the node and its children. + /// + protected virtual void RemovePredefinedNode( + ISystemContext context, + NodeState node, + List referencesToRemove) + { + m_predefinedNodes.Remove(node.NodeId); + node.UpdateChangeMasks(NodeStateChangeMasks.Deleted); + node.ClearChangeMasks(context, false); + OnNodeRemoved(node); + + // remove from the parent. + BaseInstanceState instance = node as BaseInstanceState; + + if (instance != null && instance.Parent != null) + { + instance.Parent.RemoveChild(instance); + } + + // remove children. + List children = new List(); + node.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + node.RemoveChild(children[ii]); + } + + for (int ii = 0; ii < children.Count; ii++) + { + RemovePredefinedNode(context, children[ii], referencesToRemove); + } + + // remove from type table. + BaseTypeState type = node as BaseTypeState; + + if (type != null) + { + m_server.TypeTree.Remove(type.NodeId); + } + + // remove inverse references. + List references = new List(); + node.GetReferences(context, references); + + for (int ii = 0; ii < references.Count; ii++) + { + IReference reference = references[ii]; + + if (reference.TargetId.IsAbsolute) + { + continue; + } + + LocalReference referenceToRemove = new LocalReference( + (NodeId)reference.TargetId, + reference.ReferenceTypeId, + reference.IsInverse, + node.NodeId); + + referencesToRemove.Add(referenceToRemove); + } + } + + /// + /// Called after a node has been deleted. + /// + protected virtual void OnNodeRemoved(NodeState node) + { + // overridden by the sub-class. + } + + /// + /// Add the node to the set of root notifiers. + /// + protected virtual void AddRootNotifier(NodeState notifier) + { + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + if (Object.ReferenceEquals(notifier, m_rootNotifiers[ii])) + { + return; + } + } + + m_rootNotifiers.Add(notifier); + + // subscribe to existing events. + if (m_server.EventManager != null) + { + IList monitoredItems = m_server.EventManager.GetMonitoredItems(); + + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + if (monitoredItems[ii].MonitoringAllEvents) + { + SubscribeToAllEvents( + SystemContext, + monitoredItems[ii], + true, + notifier); + } + } + } + } + + /// + /// Remove the node from the set of root notifiers. + /// + protected virtual void RemoveRootNotifier(NodeState notifier) + { + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + if (Object.ReferenceEquals(notifier, m_rootNotifiers[ii])) + { + m_rootNotifiers.RemoveAt(ii); + break; + } + } + } + + /// + /// Ensures that all reverse references exist. + /// + /// A list of references to add to external targets. + protected virtual void AddReverseReferences(IDictionary> externalReferences) + { + foreach (NodeState source in m_predefinedNodes.Values) + { + // assign a default value to any variable value. + BaseVariableState variable = source as BaseVariableState; + + if (variable != null && variable.Value == null) + { + variable.Value = TypeInfo.GetDefaultValue(variable.DataType, variable.ValueRank, Server.TypeTree); + } + + // add reference from supertype for type nodes. + BaseTypeState type = source as BaseTypeState; + + if (type != null && !NodeId.IsNull(type.SuperTypeId)) + { + if (!IsNodeIdInNamespace(type.SuperTypeId)) + { + AddExternalReference( + type.SuperTypeId, + ReferenceTypeIds.HasSubtype, + false, + type.NodeId, + externalReferences); + } + } + + IList references = new List(); + source.GetReferences(SystemContext, references); + + for (int ii = 0; ii < references.Count; ii++) + { + IReference reference = references[ii]; + + // nothing to do with external nodes. + if (reference.TargetId == null || reference.TargetId.IsAbsolute) + { + continue; + } + + NodeId targetId = (NodeId)reference.TargetId; + + // add inverse reference to internal targets. + NodeState target = null; + + if (m_predefinedNodes.TryGetValue(targetId, out target)) + { + if (!target.ReferenceExists(reference.ReferenceTypeId, !reference.IsInverse, source.NodeId)) + { + target.AddReference(reference.ReferenceTypeId, !reference.IsInverse, source.NodeId); + } + + continue; + } + + // check for inverse references to external notifiers. + if (reference.IsInverse && reference.ReferenceTypeId == ReferenceTypeIds.HasNotifier) + { + AddRootNotifier(source); + } + + // nothing more to do for references to nodes managed by this manager. + if (IsNodeIdInNamespace(targetId)) + { + continue; + } + + // add external reference. + AddExternalReference( + targetId, + reference.ReferenceTypeId, + !reference.IsInverse, + source.NodeId, + externalReferences); + } + } + } + + /// + /// Adds an external reference to the dictionary. + /// + protected void AddExternalReference( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + NodeId targetId, + IDictionary> externalReferences) + { + // get list of references to external nodes. + IList referencesToAdd = null; + + if (!externalReferences.TryGetValue(sourceId, out referencesToAdd)) + { + externalReferences[sourceId] = referencesToAdd = new List(); + } + + // add reserve reference from external node. + ReferenceNode referenceToAdd = new ReferenceNode(); + + referenceToAdd.ReferenceTypeId = referenceTypeId; + referenceToAdd.IsInverse = isInverse; + referenceToAdd.TargetId = targetId; + + referencesToAdd.Add(referenceToAdd); + } + + /// + /// Recursively adds the types to the type tree. + /// + protected void AddTypesToTypeTree(BaseTypeState type) + { + if (!NodeId.IsNull(type.SuperTypeId)) + { + if (!Server.TypeTree.IsKnown(type.SuperTypeId)) + { + AddTypesToTypeTree(type.SuperTypeId); + } + } + + if (type.NodeClass != NodeClass.ReferenceType) + { + Server.TypeTree.AddSubtype(type.NodeId, type.SuperTypeId); + } + else + { + Server.TypeTree.AddReferenceSubtype(type.NodeId, type.SuperTypeId, type.BrowseName); + } + } + + /// + /// Recursively adds the types to the type tree. + /// + protected void AddTypesToTypeTree(NodeId typeId) + { + BaseTypeState type = Find(typeId) as BaseTypeState; + + if (type == null) + { + return; + } + + AddTypesToTypeTree(type); + } + + /// + /// Finds the specified and checks if it is of the expected type. + /// + /// Returns null if not found or not of the correct type. + public NodeState FindPredefinedNode(NodeId nodeId, Type expectedType) + { + if (nodeId == null) + { + return null; + } + + NodeState node = null; + + if (!PredefinedNodes.TryGetValue(nodeId, out node)) + { + return null; + } + + if (expectedType != null) + { + if (!expectedType.IsInstanceOfType(node)) + { + return null; + } + } + + return node; + } + #endregion + + /// + /// Frees any resources allocated for the address space. + /// + public virtual void DeleteAddressSpace() + { + lock (Lock) + { + m_predefinedNodes.Clear(); + } + } + + /// + /// Returns a unique handle for the node. + /// + /// + /// This must efficiently determine whether the node belongs to the node manager. If it does belong to + /// NodeManager it should return a handle that does not require the NodeId to be validated again when + /// the handle is passed into other methods such as 'Read' or 'Write'. + /// + public virtual object GetManagerHandle(NodeId nodeId) + { + lock (Lock) + { + return GetManagerHandle(m_systemContext, nodeId, null); + } + } + + /// + /// Returns a unique handle for the node. + /// + /// + /// This must efficiently determine whether the node belongs to the node manager. If it does belong to + /// NodeManager it should return a handle that does not require the NodeId to be validated again when + /// the handle is passed into other methods such as 'Read' or 'Write'. + /// + protected virtual object GetManagerHandle(ISystemContext context, NodeId nodeId, IDictionary cache) + { + lock (Lock) + { + // quickly exclude nodes that not in the namespace. + if (!IsNodeIdInNamespace(nodeId)) + { + return null; + } + + // lookup the node. + NodeState node = null; + + if (!m_predefinedNodes.TryGetValue(nodeId, out node)) + { + return null; + } + + return node; + } + } + + /// + /// This method is used to add bi-directional references to nodes from other node managers. + /// + /// + /// The additional references are optional, however, the NodeManager should support them. + /// + public virtual void AddReferences(IDictionary> references) + { + lock (Lock) + { + foreach (KeyValuePair> current in references) + { + // check for valid handle. + NodeState source = GetManagerHandle(m_systemContext, current.Key, null) as NodeState; + + if (source == null) + { + continue; + } + + // add reference to external target. + foreach (IReference reference in current.Value) + { + source.AddReference(reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + } + } + } + } + + /// + /// This method is used to delete bi-directional references to nodes from other node managers. + /// + public virtual ServiceResult DeleteReference( + object sourceHandle, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool deleteBiDirectional) + { + lock (Lock) + { + // check for valid handle. + NodeState source = IsHandleInNamespace(sourceHandle); + + if (source == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + source.RemoveReference(referenceTypeId, isInverse, targetId); + + if (deleteBiDirectional) + { + // check if the target is also managed by the node manager. + if (!targetId.IsAbsolute) + { + NodeState target = GetManagerHandle(m_systemContext, (NodeId)targetId, null) as NodeState; + + if (target != null) + { + target.RemoveReference(referenceTypeId, !isInverse, source.NodeId); + } + } + } + + return ServiceResult.Good; + } + } + + /// + /// Returns the basic metadata for the node. Returns null if the node does not exist. + /// + /// + /// This method validates any placeholder handle. + /// + public virtual NodeMetadata GetNodeMetadata( + OperationContext context, + object targetHandle, + BrowseResultMask resultMask) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + // check for valid handle. + NodeState target = IsHandleInNamespace(targetHandle); + + if (target == null) + { + return null; + } + + // validate node. + if (!ValidateNode(systemContext, target)) + { + return null; + } + + // read the attributes. + List values = target.ReadAttributes( + systemContext, + Attributes.WriteMask, + Attributes.UserWriteMask, + Attributes.DataType, + Attributes.ValueRank, + Attributes.ArrayDimensions, + Attributes.AccessLevel, + Attributes.UserAccessLevel, + Attributes.EventNotifier, + Attributes.Executable, + Attributes.UserExecutable); + + // construct the metadata object. + + NodeMetadata metadata = new NodeMetadata(target, target.NodeId); + + metadata.NodeClass = target.NodeClass; + metadata.BrowseName = target.BrowseName; + metadata.DisplayName = target.DisplayName; + + if (values[0] != null && values[1] != null) + { + metadata.WriteMask = (AttributeWriteMask)(((uint)values[0]) & ((uint)values[1])); + } + + metadata.DataType = (NodeId)values[2]; + + if (values[3] != null) + { + metadata.ValueRank = (int)values[3]; + } + + metadata.ArrayDimensions = (IList)values[4]; + + if (values[5] != null && values[6] != null) + { + metadata.AccessLevel = (byte)(((byte)values[5]) & ((byte)values[6])); + } + + if (values[7] != null) + { + metadata.EventNotifier = (byte)values[7]; + } + + if (values[8] != null && values[9] != null) + { + metadata.Executable = (((bool)values[8]) && ((bool)values[9])); + } + + // get instance references. + BaseInstanceState instance = target as BaseInstanceState; + + if (instance != null) + { + metadata.TypeDefinition = instance.TypeDefinitionId; + metadata.ModellingRule = instance.ModellingRuleId; + } + + // fill in the common attributes. + return metadata; + } + } + + /// + /// Browses the references from a node managed by the node manager. + /// + /// + /// The continuation point is created for every browse operation and contains the browse parameters. + /// The node manager can store its state information in the Data and Index properties. + /// + public virtual void Browse( + OperationContext context, + ref ContinuationPoint continuationPoint, + IList references) + { + if (continuationPoint == null) throw new ArgumentNullException(nameof(continuationPoint)); + if (references == null) throw new ArgumentNullException(nameof(references)); + + // check for view. + if (!ViewDescription.IsDefault(continuationPoint.View)) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + // verify that the node exists. + NodeState source = IsHandleInNamespace(continuationPoint.NodeToBrowse); + + if (source == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + // validate node. + if (!ValidateNode(systemContext, source)) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + // check for previous continuation point. + INodeBrowser browser = continuationPoint.Data as INodeBrowser; + + // fetch list of references. + if (browser == null) + { + // create a new browser. + browser = source.CreateBrowser( + systemContext, + continuationPoint.View, + continuationPoint.ReferenceTypeId, + continuationPoint.IncludeSubtypes, + continuationPoint.BrowseDirection, + null, + null, + false); + } + + // apply filters to references. + for (IReference reference = browser.Next(); reference != null; reference = browser.Next()) + { + // create the type definition reference. + ReferenceDescription description = GetReferenceDescription(context, reference, continuationPoint); + + if (description == null) + { + continue; + } + + // check if limit reached. + if (continuationPoint.MaxResultsToReturn != 0 && references.Count >= continuationPoint.MaxResultsToReturn) + { + browser.Push(reference); + continuationPoint.Data = browser; + return; + } + + references.Add(description); + } + + // release the continuation point if all done. + continuationPoint.Dispose(); + continuationPoint = null; + } + } + + #region Browse Support Functions + /// + /// Returns the references for the node that meets the criteria specified. + /// + private ReferenceDescription GetReferenceDescription( + OperationContext context, + IReference reference, + ContinuationPoint continuationPoint) + { + // create the type definition reference. + ReferenceDescription description = new ReferenceDescription(); + + description.NodeId = reference.TargetId; + description.SetReferenceType(continuationPoint.ResultMask, reference.ReferenceTypeId, !reference.IsInverse); + + // do not cache target parameters for remote nodes. + if (reference.TargetId.IsAbsolute) + { + // only return remote references if no node class filter is specified. + if (continuationPoint.NodeClassMask != 0) + { + return null; + } + + return description; + } + + NodeState target = null; + + // check for local reference. + NodeStateReference referenceInfo = reference as NodeStateReference; + + if (referenceInfo != null) + { + target = referenceInfo.Target; + } + + // check for internal reference. + if (target == null) + { + NodeId targetId = (NodeId)reference.TargetId; + + if (IsNodeIdInNamespace(targetId)) + { + if (!PredefinedNodes.TryGetValue(targetId, out target)) + { + target = null; + } + } + } + + // the target may be a reference to a node in another node manager. In these cases + // the target attributes must be fetched by the caller. The Unfiltered flag tells the + // caller to do that. + if (target == null) + { + description.Unfiltered = true; + return description; + } + + // apply node class filter. + if (continuationPoint.NodeClassMask != 0 && ((continuationPoint.NodeClassMask & (uint)target.NodeClass) == 0)) + { + return null; + } + + NodeId typeDefinition = null; + + BaseInstanceState instance = target as BaseInstanceState; + + if (instance != null) + { + typeDefinition = instance.TypeDefinitionId; + } + + // set target attributes. + description.SetTargetAttributes( + continuationPoint.ResultMask, + target.NodeClass, + target.BrowseName, + target.DisplayName, + typeDefinition); + + return description; + } + #endregion + + /// + /// Returns the target of the specified browse path fragment(s). + /// + /// + /// If reference exists but the node manager does not know the browse name it must + /// return the NodeId as an unresolvedTargetIds. The caller will try to check the + /// browse name. + /// + public virtual void TranslateBrowsePath( + OperationContext context, + object sourceHandle, + RelativePathElement relativePath, + IList targetIds, + IList unresolvedTargetIds) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + + lock (Lock) + { + // verify that the node exists. + NodeState source = IsHandleInNamespace(sourceHandle); + + if (source == null) + { + return; + } + + // validate node. + if (!ValidateNode(systemContext, source)) + { + return; + } + + // get list of references that relative path. + INodeBrowser browser = source.CreateBrowser( + systemContext, + null, + relativePath.ReferenceTypeId, + relativePath.IncludeSubtypes, + (relativePath.IsInverse) ? BrowseDirection.Inverse : BrowseDirection.Forward, + relativePath.TargetName, + null, + false); + + // check the browse names. + try + { + for (IReference reference = browser.Next(); reference != null; reference = browser.Next()) + { + // ignore unknown external references. + if (reference.TargetId.IsAbsolute) + { + continue; + } + + NodeState target = null; + + // check for local reference. + NodeStateReference referenceInfo = reference as NodeStateReference; + + if (referenceInfo != null) + { + target = referenceInfo.Target; + } + + if (target == null) + { + NodeId targetId = (NodeId)reference.TargetId; + + // the target may be a reference to a node in another node manager. + if (!IsNodeIdInNamespace(targetId)) + { + unresolvedTargetIds.Add((NodeId)reference.TargetId); + continue; + } + + // look up the target manually. + target = GetManagerHandle(systemContext, targetId, operationCache) as NodeState; + + if (target == null) + { + continue; + } + } + + // check browse name. + if (target.BrowseName == relativePath.TargetName) + { + if (!targetIds.Contains(reference.TargetId)) + { + targetIds.Add(reference.TargetId); + } + } + } + } + finally + { + browser.Dispose(); + } + } + } + + /// + /// Reads the value for the specified attribute. + /// + public virtual void Read( + OperationContext context, + double maxAge, + IList nodesToRead, + IList values, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + ReadValueId nodeToRead = nodesToRead[ii]; + + // skip items that have already been processed. + if (nodeToRead.Processed) + { + continue; + } + + // check for valid handle. + NodeState source = GetManagerHandle(systemContext, nodeToRead.NodeId, operationCache) as NodeState; + + if (source == null) + { + continue; + } + + // owned by this node manager. + nodeToRead.Processed = true; + + // create an initial value. + DataValue value = values[ii] = new DataValue(); + + value.Value = null; + value.ServerTimestamp = DateTime.UtcNow; + value.SourceTimestamp = DateTime.MinValue; + value.StatusCode = StatusCodes.Good; + + // check if the node is ready for reading. + if (source.ValidationRequired) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation. + ReadWriteOperationState operation = new ReadWriteOperationState(); + + operation.Source = source; + operation.Index = ii; + + nodesToValidate.Add(operation); + + continue; + } + + // read the attribute value. + errors[ii] = source.ReadAttribute( + systemContext, + nodeToRead.AttributeId, + nodeToRead.ParsedIndexRange, + nodeToRead.DataEncoding, + value); + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + ReadWriteOperationState operation = nodesToValidate[ii]; + + if (!ValidateNode(systemContext, operation.Source)) + { + continue; + } + + ReadValueId nodeToRead = nodesToRead[operation.Index]; + DataValue value = values[operation.Index]; + + // update the attribute value. + errors[operation.Index] = operation.Source.ReadAttribute( + systemContext, + nodeToRead.AttributeId, + nodeToRead.ParsedIndexRange, + nodeToRead.DataEncoding, + value); + } + } + } + + /// + /// Stores the state of a call method operation. + /// + private struct ReadWriteOperationState + { + public NodeState Source; + public int Index; + } + + /// + /// Verifies that the specified node exists. + /// + protected virtual bool ValidateNode(ServerSystemContext context, NodeState node) + { + // validate node only if required. + if (node.ValidationRequired) + { + return node.Validate(context); + } + + return true; + } + + /// + /// Reads the history for the specified nodes. + /// + public virtual void HistoryRead( + OperationContext context, + HistoryReadDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + IList nodesToRead, + IList results, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + List readsToComplete = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + HistoryReadValueId nodeToRead = nodesToRead[ii]; + + // skip items that have already been processed. + if (nodeToRead.Processed) + { + continue; + } + + // check for valid handle. + NodeState source = GetManagerHandle(systemContext, nodeToRead.NodeId, operationCache) as NodeState; + + if (source == null) + { + continue; + } + + // owned by this node manager. + nodeToRead.Processed = true; + + // only variables supported. + BaseVariableState variable = source as BaseVariableState; + + if (variable == null) + { + errors[ii] = StatusCodes.BadHistoryOperationUnsupported; + continue; + } + + results[ii] = new HistoryReadResult(); + + ReadWriteOperationState operation = new ReadWriteOperationState(); + + operation.Source = source; + operation.Index = ii; + + // check if the node is ready for reading. + if (source.ValidationRequired) + { + // must validate node in a seperate operation. + errors[ii] = StatusCodes.BadNodeIdUnknown; + nodesToValidate.Add(operation); + continue; + } + + // read the data. + readsToComplete.Add(operation); + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + ReadWriteOperationState operation = nodesToValidate[ii]; + + if (!ValidateNode(systemContext, operation.Source)) + { + continue; + } + + readsToComplete.Add(operation); + } + } + + // reads the data without holding onto the lock. + for (int ii = 0; ii < readsToComplete.Count; ii++) + { + ReadWriteOperationState operation = readsToComplete[ii]; + + errors[operation.Index] = HistoryRead( + systemContext, + operation.Source, + details, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead[operation.Index], + results[operation.Index]); + } + } + + /// + /// Reads the history for a single node which has already been validated. + /// + protected virtual ServiceResult HistoryRead( + ISystemContext context, + NodeState source, + HistoryReadDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueId nodesToRead, + HistoryReadResult result) + { + // check for variable. + BaseVariableState variable = source as BaseVariableState; + + if (variable == null) + { + return StatusCodes.BadHistoryOperationUnsupported; + } + + // check for access. + lock (Lock) + { + if ((variable.AccessLevel & AccessLevels.HistoryRead) == 0) + { + return StatusCodes.BadNotReadable; + } + } + + // handle read raw. + ReadRawModifiedDetails readRawDetails = details as ReadRawModifiedDetails; + + if (readRawDetails != null) + { + return HistoryReadRaw( + context, + variable, + readRawDetails, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead, + result); + } + + // handle read processed. + ReadProcessedDetails readProcessedDetails = details as ReadProcessedDetails; + + if (readProcessedDetails != null) + { + return HistoryReadProcessed( + context, + variable, + readProcessedDetails, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead, + result); + } + + // handle read processed. + ReadAtTimeDetails readAtTimeDetails = details as ReadAtTimeDetails; + + if (readAtTimeDetails != null) + { + return HistoryReadAtTime( + context, + variable, + readAtTimeDetails, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead, + result); + } + + return StatusCodes.BadHistoryOperationUnsupported; + } + + /// + /// Reads the raw history for the variable value. + /// + protected virtual ServiceResult HistoryReadRaw( + ISystemContext context, + BaseVariableState source, + ReadRawModifiedDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueId nodeToRead, + HistoryReadResult result) + { + return StatusCodes.BadHistoryOperationUnsupported; + } + + /// + /// Reads the processed history for the variable value. + /// + protected virtual ServiceResult HistoryReadProcessed( + ISystemContext context, + BaseVariableState source, + ReadProcessedDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueId nodeToRead, + HistoryReadResult result) + { + return StatusCodes.BadHistoryOperationUnsupported; + } + + /// + /// Reads the history for the variable value. + /// + protected virtual ServiceResult HistoryReadAtTime( + ISystemContext context, + BaseVariableState source, + ReadAtTimeDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueId nodeToRead, + HistoryReadResult result) + { + return StatusCodes.BadHistoryOperationUnsupported; + } + + + /// + /// Writes the value for the specified attributes. + /// + public virtual void Write( + OperationContext context, + IList nodesToWrite, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToWrite.Count; ii++) + { + WriteValue nodeToWrite = nodesToWrite[ii]; + + // skip items that have already been processed. + if (nodeToWrite.Processed) + { + continue; + } + + // check for valid handle. + NodeState source = GetManagerHandle(systemContext, nodeToWrite.NodeId, operationCache) as NodeState; + + if (source == null) + { + continue; + } + + // owned by this node manager. + nodeToWrite.Processed = true; + + // index range is not supported. + if (!String.IsNullOrEmpty(nodeToWrite.IndexRange)) + { + errors[ii] = StatusCodes.BadIndexRangeInvalid; + continue; + } + + // check if the node is ready for reading. + if (source.ValidationRequired) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation. + ReadWriteOperationState operation = new ReadWriteOperationState(); + + operation.Source = source; + operation.Index = ii; + + nodesToValidate.Add(operation); + + continue; + } + + // write the attribute value. + errors[ii] = source.WriteAttribute( + systemContext, + nodeToWrite.AttributeId, + nodeToWrite.ParsedIndexRange, + nodeToWrite.Value); + + // updates to source finished - report changes to monitored items. + source.ClearChangeMasks(systemContext, false); + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + ReadWriteOperationState operation = nodesToValidate[ii]; + + if (!ValidateNode(systemContext, operation.Source)) + { + continue; + } + + WriteValue nodeToWrite = nodesToWrite[operation.Index]; + + // write the attribute value. + errors[operation.Index] = operation.Source.WriteAttribute( + systemContext, + nodeToWrite.AttributeId, + nodeToWrite.ParsedIndexRange, + nodeToWrite.Value); + + // updates to source finished - report changes to monitored items. + operation.Source.ClearChangeMasks(systemContext, false); + } + } + } + + /// + /// Updates the history for the specified nodes. + /// + public virtual void HistoryUpdate( + OperationContext context, + Type detailsType, + IList nodesToUpdate, + IList results, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < nodesToUpdate.Count; ii++) + { + HistoryUpdateDetails nodeToUpdate = nodesToUpdate[ii]; + + // skip items that have already been processed. + if (nodeToUpdate.Processed) + { + continue; + } + + // check for valid handle. + NodeState source = GetManagerHandle(systemContext, nodeToUpdate.NodeId, operationCache) as NodeState; + + if (source == null) + { + continue; + } + + // owned by this node manager. + nodeToUpdate.Processed = true; + + // check if the node is ready for reading. + if (source.ValidationRequired) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation. + ReadWriteOperationState operation = new ReadWriteOperationState(); + + operation.Source = source; + operation.Index = ii; + + nodesToValidate.Add(operation); + + continue; + } + + // historical data not available. + errors[ii] = StatusCodes.BadHistoryOperationUnsupported; + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + ReadWriteOperationState operation = nodesToValidate[ii]; + + if (!ValidateNode(systemContext, operation.Source)) + { + continue; + } + + // historical data not available. + errors[ii] = StatusCodes.BadHistoryOperationUnsupported; + } + } + } + + /// + /// Calls a method on the specified nodes. + /// + public virtual void Call( + OperationContext context, + IList methodsToCall, + IList results, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < methodsToCall.Count; ii++) + { + CallMethodRequest methodToCall = methodsToCall[ii]; + + // skip items that have already been processed. + if (methodToCall.Processed) + { + continue; + } + + // check for valid handle. + NodeState source = GetManagerHandle(systemContext, methodToCall.ObjectId, operationCache) as NodeState; + + if (source == null) + { + continue; + } + + // owned by this node manager. + methodToCall.Processed = true; + + // check for valid method. + MethodState method = GetManagerHandle(systemContext, methodToCall.MethodId, operationCache) as MethodState; + + if (method == null) + { + errors[ii] = StatusCodes.BadMethodInvalid; + continue; + } + + // check if method belongs to the object. + if (!Object.ReferenceEquals(method.Parent, source)) + { + errors[ii] = StatusCodes.BadMethodInvalid; + continue; + } + + CallMethodResult result = results[ii] = new CallMethodResult(); + + // check if the node is ready for reading. + if (source.ValidationRequired) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation. + CallOperationState operation = new CallOperationState(); + + operation.Source = source; + operation.Method = method; + operation.Index = ii; + + nodesToValidate.Add(operation); + + continue; + } + + // call the method. + errors[ii] = Call( + systemContext, + methodToCall, + source, + method, + result); + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + CallOperationState operation = nodesToValidate[ii]; + + // validate the object. + if (!ValidateNode(systemContext, operation.Source)) + { + continue; + } + + // call the method. + CallMethodResult result = results[operation.Index]; + + errors[operation.Index] = Call( + systemContext, + methodsToCall[operation.Index], + operation.Source, + operation.Method, + result); + } + } + } + + /// + /// Stores the state of a call method operation. + /// + private struct CallOperationState + { + public NodeState Source; + public MethodState Method; + public int Index; + } + + /// + /// Calls a method on an object. + /// + protected virtual ServiceResult Call( + ISystemContext context, + CallMethodRequest methodToCall, + NodeState source, + MethodState method, + CallMethodResult result) + { + ServerSystemContext systemContext = context as ServerSystemContext; + List argumentErrors = new List(); + VariantCollection outputArguments = new VariantCollection(); + + ServiceResult error = method.Call( + context, + methodToCall.ObjectId, + methodToCall.InputArguments, + argumentErrors, + outputArguments); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // check for argument errors. + bool argumentsValid = true; + + for (int jj = 0; jj < argumentErrors.Count; jj++) + { + ServiceResult argumentError = argumentErrors[jj]; + + if (argumentError != null) + { + result.InputArgumentResults.Add(argumentError.StatusCode); + + if (ServiceResult.IsBad(argumentError)) + { + argumentsValid = false; + } + } + else + { + result.InputArgumentResults.Add(StatusCodes.Good); + } + + // only fill in diagnostic info if it is requested. + if ((systemContext.OperationContext.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + if (ServiceResult.IsBad(argumentError)) + { + argumentsValid = false; + result.InputArgumentDiagnosticInfos.Add(new DiagnosticInfo(argumentError, systemContext.OperationContext.DiagnosticsMask, false, systemContext.OperationContext.StringTable)); + } + else + { + result.InputArgumentDiagnosticInfos.Add(null); + } + } + } + + // check for validation errors. + if (!argumentsValid) + { + result.StatusCode = StatusCodes.BadInvalidArgument; + return result.StatusCode; + } + + // do not return diagnostics if there are no errors. + result.InputArgumentDiagnosticInfos.Clear(); + + // return output arguments. + result.OutputArguments = outputArguments; + + return ServiceResult.Good; + } + + /// + /// Subscribes or unsubscribes to events produced by the specified source. + /// + /// + /// This method is called when a event subscription is created or deletes. The node manager + /// must start/stop reporting events for the specified object and all objects below it in + /// the notifier hierarchy. + /// + public virtual ServiceResult SubscribeToEvents( + OperationContext context, + object sourceId, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + + lock (Lock) + { + // check for valid handle. + NodeState source = IsHandleInNamespace(sourceId); + + if (source == null) + { + return StatusCodes.BadNodeIdInvalid; + } + + // check if the object supports subscritions. + BaseObjectState instance = sourceId as BaseObjectState; + + if (instance == null || instance.EventNotifier != EventNotifiers.SubscribeToEvents) + { + return StatusCodes.BadNotSupported; + } + + MonitoredNode monitoredNode = instance.Handle as MonitoredNode; + + // handle unsubscribe. + if (unsubscribe) + { + if (monitoredNode != null) + { + monitoredNode.UnsubscribeToEvents(systemContext, monitoredItem); + + // do any post processing. + OnUnsubscribeToEvents(systemContext, monitoredNode, monitoredItem); + } + + return ServiceResult.Good; + } + + // subscribe to events. + if (monitoredNode == null) + { + instance.Handle = monitoredNode = new MonitoredNode(m_server, this, source); + } + + monitoredNode.SubscribeToEvents(systemContext, monitoredItem); + + // do any post processing. + OnSubscribeToEvents(systemContext, monitoredNode, monitoredItem); + + return ServiceResult.Good; + } + } + + /// + /// Subscribes or unsubscribes to events produced by all event sources. + /// + /// + /// This method is called when a event subscription is created or deleted. The node + /// manager must start/stop reporting events for all objects that it manages. + /// + public virtual ServiceResult SubscribeToAllEvents( + OperationContext context, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + + lock (Lock) + { + // update root notifiers. + for (int ii = 0; ii < m_rootNotifiers.Count; ii++) + { + SubscribeToAllEvents( + systemContext, + monitoredItem, + unsubscribe, + m_rootNotifiers[ii]); + } + + return ServiceResult.Good; + } + } + + /// + /// Subscribes/unsubscribes to all events produced by the specified node. + /// + protected void SubscribeToAllEvents( + ISystemContext systemContext, + IEventMonitoredItem monitoredItem, + bool unsubscribe, + NodeState source) + { + MonitoredNode monitoredNode = source.Handle as MonitoredNode; + + // handle unsubscribe. + if (unsubscribe) + { + if (monitoredNode != null) + { + monitoredNode.UnsubscribeToEvents(systemContext, monitoredItem); + + // do any post processing. + OnUnsubscribeToEvents(systemContext, monitoredNode, monitoredItem); + } + + return; + } + + // subscribe to events. + if (monitoredNode == null) + { + source.Handle = monitoredNode = new MonitoredNode(m_server, this, source); + } + + monitoredNode.SubscribeToEvents(systemContext, monitoredItem); + + // do any post processing. + OnSubscribeToEvents(systemContext, monitoredNode, monitoredItem); + } + + /// + /// Does any processing after a monitored item is subscribed to. + /// + protected virtual void OnSubscribeToEvents( + ISystemContext systemContext, + MonitoredNode monitoredNode, + IEventMonitoredItem monitoredItem) + { + // does nothing. + } + + /// + /// Does any processing after a monitored item is subscribed to. + /// + protected virtual void OnUnsubscribeToEvents( + ISystemContext systemContext, + MonitoredNode monitoredNode, + IEventMonitoredItem monitoredItem) + { + // does nothing. + } + + /// + /// Tells the node manager to refresh any conditions associated with the specified monitored items. + /// + /// + /// This method is called when the condition refresh method is called for a subscription. + /// The node manager must create a refresh event for each condition monitored by the subscription. + /// + public virtual ServiceResult ConditionRefresh( + OperationContext context, + IList monitoredItems) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + IEventMonitoredItem monitoredItem = monitoredItems[ii]; + + if (monitoredItem == null) + { + continue; + } + + // check for global subscription. + if (monitoredItem.MonitoringAllEvents) + { + for (int jj = 0; jj < m_rootNotifiers.Count; jj++) + { + MonitoredNode monitoredNode = m_rootNotifiers[jj].Handle as MonitoredNode; + + if (monitoredNode == null) + { + continue; + } + + monitoredNode.ConditionRefresh(systemContext, monitoredItem); + } + } + + // check for subscription to local node. + else + { + NodeState source = IsHandleInNamespace(monitoredItem.ManagerHandle ); + + if (source == null) + { + continue; + } + + MonitoredNode monitoredNode = source.Handle as MonitoredNode; + + if (monitoredNode == null) + { + continue; + } + + monitoredNode.ConditionRefresh(systemContext, monitoredItem); + } + } + } + + return ServiceResult.Good; + } + + /// + /// Creates a new set of monitored items for a set of variables. + /// + /// + /// This method only handles data change subscriptions. Event subscriptions are created by the SDK. + /// + public virtual void CreateMonitoredItems( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + IList itemsToCreate, + IList errors, + IList filterErrors, + IList monitoredItems, + ref long globalIdCounter) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + IDictionary operationCache = new NodeIdDictionary(); + List nodesToValidate = new List(); + + lock (Lock) + { + for (int ii = 0; ii < itemsToCreate.Count; ii++) + { + MonitoredItemCreateRequest itemToCreate = itemsToCreate[ii]; + + // skip items that have already been processed. + if (itemToCreate.Processed) + { + continue; + } + + ReadValueId itemToMonitor = itemToCreate.ItemToMonitor; + + // check for valid handle. + NodeState source = GetManagerHandle(systemContext, itemToMonitor.NodeId, operationCache) as NodeState; + + if (source == null) + { + continue; + } + + // owned by this node manager. + itemToCreate.Processed = true; + + // check if the node is ready for reading. + if (source.ValidationRequired) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + + // must validate node in a seperate operation. + ReadWriteOperationState operation = new ReadWriteOperationState(); + + operation.Source = source; + operation.Index = ii; + + nodesToValidate.Add(operation); + + continue; + } + + MonitoringFilterResult filterError = null; + IMonitoredItem monitoredItem = null; + + errors[ii] = CreateMonitoredItem( + systemContext, + source, + subscriptionId, + publishingInterval, + context.DiagnosticsMask, + timestampsToReturn, + itemToCreate, + ref globalIdCounter, + out filterError, + out monitoredItem); + + // save any filter error details. + filterErrors[ii] = filterError; + + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + + // save the monitored item. + monitoredItems[ii] = monitoredItem; + } + + // check for nothing to do. + if (nodesToValidate.Count == 0) + { + return; + } + + // validates the nodes (reads values from the underlying data source if required). + for (int ii = 0; ii < nodesToValidate.Count; ii++) + { + ReadWriteOperationState operation = nodesToValidate[ii]; + + // validate the object. + if (!ValidateNode(systemContext, operation.Source)) + { + continue; + } + + MonitoredItemCreateRequest itemToCreate = itemsToCreate[operation.Index]; + + MonitoringFilterResult filterError = null; + IMonitoredItem monitoredItem = null; + + errors[operation.Index] = CreateMonitoredItem( + systemContext, + operation.Source, + subscriptionId, + publishingInterval, + context.DiagnosticsMask, + timestampsToReturn, + itemToCreate, + ref globalIdCounter, + out filterError, + out monitoredItem); + + // save any filter error details. + filterErrors[operation.Index] = filterError; + + if (ServiceResult.IsBad(errors[operation.Index])) + { + continue; + } + + // save the monitored item. + monitoredItems[operation.Index] = monitoredItem; + } + } + } + + /// + /// Validates a data change filter provided by the client. + /// + /// The system context. + /// The node being monitored. + /// The attribute being monitored. + /// The requested monitoring filter. + /// The validated data change filter. + /// The EU range associated with the value if required by the filter. + /// Any error condition. Good if no errors occurred. + protected ServiceResult ValidateDataChangeFilter( + ISystemContext context, + NodeState source, + uint attributeId, + ExtensionObject requestedFilter, + out DataChangeFilter filter, + out Range range) + { + filter = null; + range = null; + + // check for valid filter type. + filter = requestedFilter.Body as DataChangeFilter; + + if (filter == null) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + + // only supported for value attributes. + if (attributeId != Attributes.Value) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + + // only supported for variables. + BaseVariableState variable = source as BaseVariableState; + + if (variable == null) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + + // check the datatype. + if (filter.DeadbandType != (uint)DeadbandType.None) + { + BuiltInType builtInType = TypeInfo.GetBuiltInType(variable.DataType, Server.TypeTree); + + if (!TypeInfo.IsNumericType(builtInType)) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + } + + // validate filter. + ServiceResult error = filter.Validate(); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + if (filter.DeadbandType ==(uint)DeadbandType.Percent) + { + BaseVariableState euRange = variable.FindChild(context, BrowseNames.EURange) as BaseVariableState; + + if (euRange == null) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + + range = euRange.Value as Range; + + if (range == null) + { + return StatusCodes.BadMonitoredItemFilterUnsupported; + } + } + + // all good. + return ServiceResult.Good; + } + + /// + /// Creates a new set of monitored items for a set of variables. + /// + /// + /// This method only handles data change subscriptions. Event subscriptions are created by the SDK. + /// + protected virtual ServiceResult CreateMonitoredItem( + ISystemContext context, + NodeState source, + uint subscriptionId, + double publishingInterval, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequest itemToCreate, + ref long globalIdCounter, + out MonitoringFilterResult filterError, + out IMonitoredItem monitoredItem) + { + filterError = null; + monitoredItem = null; + ServiceResult error = null; + + // read initial value. + DataValue initialValue = new DataValue(); + + initialValue.Value = null; + initialValue.ServerTimestamp = DateTime.UtcNow; + initialValue.SourceTimestamp = DateTime.MinValue; + initialValue.StatusCode = StatusCodes.Good; + + error = source.ReadAttribute( + context, + itemToCreate.ItemToMonitor.AttributeId, + itemToCreate.ItemToMonitor.ParsedIndexRange, + itemToCreate.ItemToMonitor.DataEncoding, + initialValue); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // validate parameters. + MonitoringParameters parameters = itemToCreate.RequestedParameters; + + // validate the data change filter. + DataChangeFilter filter = null; + Range range = null; + + if (!ExtensionObject.IsNull(parameters.Filter)) + { + error = ValidateDataChangeFilter( + context, + source, + itemToCreate.ItemToMonitor.AttributeId, + parameters.Filter, + out filter, + out range); + + if (ServiceResult.IsBad(error)) + { + return error; + } + } + + // create monitored node. + MonitoredNode monitoredNode = source.Handle as MonitoredNode; + + if (monitoredNode == null) + { + source.Handle = monitoredNode = new MonitoredNode(m_server, this, source); + } + + // create a globally unique identifier. + uint monitoredItemId = Utils.IncrementIdentifier(ref globalIdCounter); + + // determine the sampling interval. + double samplingInterval = itemToCreate.RequestedParameters.SamplingInterval; + + if (samplingInterval < 0) + { + samplingInterval = publishingInterval; + } + + // check if the variable needs to be sampled. + bool samplingRequired = false; + + if (itemToCreate.ItemToMonitor.AttributeId == Attributes.Value) + { + BaseVariableState variable = source as BaseVariableState; + + if (variable.MinimumSamplingInterval > 0) + { + samplingInterval = CalculateSamplingInterval(variable, samplingInterval); + samplingRequired = true; + } + } + + // create the item. + DataChangeMonitoredItem datachangeItem = monitoredNode.CreateDataChangeItem( + context, + monitoredItemId, + itemToCreate.ItemToMonitor.AttributeId, + itemToCreate.ItemToMonitor.ParsedIndexRange, + itemToCreate.ItemToMonitor.DataEncoding, + diagnosticsMasks, + timestampsToReturn, + itemToCreate.MonitoringMode, + itemToCreate.RequestedParameters.ClientHandle, + samplingInterval, + itemToCreate.RequestedParameters.QueueSize, + itemToCreate.RequestedParameters.DiscardOldest, + filter, + range, + false); + + if (samplingRequired) + { + CreateSampledItem(samplingInterval, datachangeItem); + } + + // report the initial value. + datachangeItem.QueueValue(initialValue, null); + + // do any post processing. + OnCreateMonitoredItem(context, itemToCreate, monitoredNode, datachangeItem); + + // update monitored item list. + monitoredItem = datachangeItem; + + return ServiceResult.Good; + } + + /// + /// Calculates the sampling interval. + /// + private double CalculateSamplingInterval(BaseVariableState variable, double samplingInterval) + { + if (samplingInterval < variable.MinimumSamplingInterval) + { + samplingInterval = variable.MinimumSamplingInterval; + } + + if ((samplingInterval % m_minimumSamplingInterval) != 0) + { + samplingInterval = Math.Truncate(samplingInterval/m_minimumSamplingInterval); + samplingInterval += 1; + samplingInterval *= m_minimumSamplingInterval; + } + + return samplingInterval; + } + + /// + /// Creates a new sampled item. + /// + private void CreateSampledItem(double samplingInterval, DataChangeMonitoredItem monitoredItem) + { + m_sampledItems.Add(monitoredItem); + + if (m_samplingTimer == null) + { + m_samplingTimer = new Timer(DoSample, null, (int)m_minimumSamplingInterval, (int)m_minimumSamplingInterval); + } + } + + /// + /// Deletes a sampled item. + /// + private void DeleteSampledItem(DataChangeMonitoredItem monitoredItem) + { + for (int ii = 0; ii < m_sampledItems.Count; ii++) + { + if (Object.ReferenceEquals(monitoredItem, m_sampledItems[ii])) + { + m_sampledItems.RemoveAt(ii); + break; + } + } + + if (m_sampledItems.Count == 0) + { + if (m_samplingTimer != null) + { + m_samplingTimer.Dispose(); + m_samplingTimer = null; + } + } + } + + /// + /// Polls each monitored item which requires sample. + /// + private void DoSample(object state) + { + try + { + lock (m_lock) + { + for (int ii = 0; ii < m_sampledItems.Count; ii++) + { + DataChangeMonitoredItem monitoredItem = m_sampledItems[ii]; + + if (monitoredItem.TimeToNextSample < m_minimumSamplingInterval) + { + monitoredItem.ValueChanged(SystemContext); + } + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error during diagnostics scan."); + } + } + + /// + /// Does any processing after a monitored item is created. + /// + protected virtual void OnCreateMonitoredItem( + ISystemContext systemContext, + MonitoredItemCreateRequest itemToCreate, + MonitoredNode monitoredNode, + DataChangeMonitoredItem monitoredItem) + { + // does nothing. + } + + /// + /// Modifies the parameters for a set of monitored items. + /// + public virtual void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + IList monitoredItems, + IList itemsToModify, + IList errors, + IList filterErrors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + MonitoredItemModifyRequest itemToModify = itemsToModify[ii]; + + // skip items that have already been processed. + if (itemToModify.Processed || monitoredItems[ii] == null) + { + continue; + } + + // modify the monitored item. + MonitoringFilterResult filterError = null; + + errors[ii] = ModifyMonitoredItem( + systemContext, + context.DiagnosticsMask, + timestampsToReturn, + monitoredItems[ii], + itemToModify, + out filterError); + + // save any filter error details. + filterErrors[ii] = filterError; + } + } + } + + /// + /// Modifies the parameters for a monitored item. + /// + protected virtual ServiceResult ModifyMonitoredItem( + ISystemContext context, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + IMonitoredItem monitoredItem, + MonitoredItemModifyRequest itemToModify, + out MonitoringFilterResult filterError) + { + filterError = null; + ServiceResult error = null; + + // check for valid handle. + MonitoredNode monitoredNode = monitoredItem.ManagerHandle as MonitoredNode; + + if (monitoredNode == null) + { + return ServiceResult.Good; + } + + if (IsHandleInNamespace(monitoredNode.Node) == null) + { + return ServiceResult.Good; + } + + // owned by this node manager. + itemToModify.Processed = true; + + // check for valid monitored item. + DataChangeMonitoredItem datachangeItem = monitoredItem as DataChangeMonitoredItem; + + // validate parameters. + MonitoringParameters parameters = itemToModify.RequestedParameters; + + // validate the data change filter. + DataChangeFilter filter = null; + Range range = null; + + if (!ExtensionObject.IsNull(parameters.Filter)) + { + error = ValidateDataChangeFilter( + context, + monitoredNode.Node, + datachangeItem.AttributeId, + parameters.Filter, + out filter, + out range); + + if (ServiceResult.IsBad(error)) + { + return error; + } + } + + double previousSamplingInterval = datachangeItem.SamplingInterval; + + // check if the variable needs to be sampled. + double samplingInterval = itemToModify.RequestedParameters.SamplingInterval; + + if (datachangeItem.AttributeId == Attributes.Value) + { + BaseVariableState variable = monitoredNode.Node as BaseVariableState; + + if (variable.MinimumSamplingInterval > 0) + { + samplingInterval = CalculateSamplingInterval(variable, samplingInterval); + } + } + + // modify the monitored item parameters. + error = datachangeItem.Modify( + diagnosticsMasks, + timestampsToReturn, + itemToModify.RequestedParameters.ClientHandle, + samplingInterval, + itemToModify.RequestedParameters.QueueSize, + itemToModify.RequestedParameters.DiscardOldest, + filter, + range); + + // do any post processing. + OnModifyMonitoredItem( + context, + itemToModify, + monitoredNode, + datachangeItem, + previousSamplingInterval); + + return ServiceResult.Good; + } + + /// + /// Does any processing after a monitored item is created. + /// + protected virtual void OnModifyMonitoredItem( + ISystemContext systemContext, + MonitoredItemModifyRequest itemToModify, + MonitoredNode monitoredNode, + DataChangeMonitoredItem monitoredItem, + double previousSamplingInterval) + { + // does nothing. + } + + /// + /// Deletes a set of monitored items. + /// + public virtual void DeleteMonitoredItems( + OperationContext context, + IList monitoredItems, + IList processedItems, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + // skip items that have already been processed. + if (processedItems[ii] || monitoredItems[ii] == null) + { + continue; + } + + // delete the monitored item. + bool processed = false; + + errors[ii] = DeleteMonitoredItem( + systemContext, + monitoredItems[ii], + out processed); + + // indicate whether it was processed or not. + processedItems[ii] = processed; + } + } + } + + /// + /// Deletes a monitored item. + /// + protected virtual ServiceResult DeleteMonitoredItem( + ISystemContext context, + IMonitoredItem monitoredItem, + out bool processed) + { + processed = false; + + // check for valid handle. + MonitoredNode monitoredNode = monitoredItem.ManagerHandle as MonitoredNode; + + if (monitoredNode == null) + { + return ServiceResult.Good; + } + + if (IsHandleInNamespace(monitoredNode.Node) == null) + { + return ServiceResult.Good; + } + + // owned by this node manager. + processed = true; + + // get the source. + NodeState source = monitoredNode.Node; + + // check for valid monitored item. + DataChangeMonitoredItem datachangeItem = monitoredItem as DataChangeMonitoredItem; + + // check if the variable needs to be sampled. + if (datachangeItem.AttributeId == Attributes.Value) + { + BaseVariableState variable = monitoredNode.Node as BaseVariableState; + + if (variable.MinimumSamplingInterval > 0) + { + DeleteSampledItem(datachangeItem); + } + } + + // remove item. + monitoredNode.DeleteItem(datachangeItem); + + // do any post processing. + OnDeleteMonitoredItem(context, monitoredNode, datachangeItem); + + return ServiceResult.Good; + } + + /// + /// Does any processing after a monitored item is deleted. + /// + protected virtual void OnDeleteMonitoredItem( + ISystemContext systemContext, + MonitoredNode monitoredNode, + DataChangeMonitoredItem monitoredItem) + { + // does nothing. + } + + /// + /// Changes the monitoring mode for a set of monitored items. + /// + public virtual void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + IList monitoredItems, + IList processedItems, + IList errors) + { + ServerSystemContext systemContext = m_systemContext.Copy(context); + + lock (Lock) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + // skip items that have already been processed. + if (processedItems[ii] || monitoredItems[ii] == null) + { + continue; + } + + // update monitoring mode. + bool processed = false; + + errors[ii] = SetMonitoringMode( + systemContext, + monitoredItems[ii], + monitoringMode, + out processed); + + // indicate whether it was processed or not. + processedItems[ii] = processed; + } + } + } + + /// + /// Changes the monitoring mode for an item. + /// + protected virtual ServiceResult SetMonitoringMode( + ISystemContext context, + IMonitoredItem monitoredItem, + MonitoringMode monitoringMode, + out bool processed) + { + processed = false; + + // check for valid handle. + MonitoredNode monitoredNode = monitoredItem.ManagerHandle as MonitoredNode; + + if (monitoredNode == null) + { + return ServiceResult.Good; + } + + if (IsHandleInNamespace(monitoredNode.Node) == null) + { + return ServiceResult.Good; + } + + // owned by this node manager. + processed = true; + + // check for valid monitored item. + DataChangeMonitoredItem datachangeItem = monitoredItem as DataChangeMonitoredItem; + + // update monitoring mode. + MonitoringMode previousMode = datachangeItem.SetMonitoringMode(monitoringMode); + + // need to provide an immediate update after enabling. + if (previousMode == MonitoringMode.Disabled && monitoringMode != MonitoringMode.Disabled) + { + DataValue initialValue = new DataValue(); + + initialValue.Value = null; + initialValue.ServerTimestamp = DateTime.UtcNow; + initialValue.SourceTimestamp = DateTime.MinValue; + initialValue.StatusCode = StatusCodes.Good; + + ServiceResult error = monitoredNode.Node.ReadAttribute( + context, + datachangeItem.AttributeId, + datachangeItem.IndexRange, + datachangeItem.DataEncoding, + initialValue); + + datachangeItem.QueueValue(initialValue, error); + } + + // do any post processing. + OnSetMonitoringMode(context, monitoredNode, datachangeItem, previousMode, monitoringMode); + + return ServiceResult.Good; + } + + /// + /// Does any processing after a monitored item is created. + /// + protected virtual void OnSetMonitoringMode( + ISystemContext systemContext, + MonitoredNode monitoredNode, + DataChangeMonitoredItem monitoredItem, + MonitoringMode previousMode, + MonitoringMode currentMode) + { + // does nothing. + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private ServerSystemContext m_systemContext; + private IList m_namespaceUris; + private ushort[] m_namespaceIndexes; + private NodeIdDictionary m_predefinedNodes; + private List m_rootNotifiers; + + private Timer m_samplingTimer; + private List m_sampledItems; + private double m_minimumSamplingInterval; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/DataChangeMonitoredItem.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/DataChangeMonitoredItem.cs new file mode 100644 index 00000000..36a7eadb --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/DataChangeMonitoredItem.cs @@ -0,0 +1,819 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Provides a basic monitored item implementation which does not support queuing. + /// + [Obsolete("Class replaced by Opc.Ua.Server.MonitoredItem")] + public class DataChangeMonitoredItem : IDataChangeMonitoredItem + { + #region Constructors + /// + /// Constructs a new instance. + /// + public DataChangeMonitoredItem( + MonitoredNode source, + uint id, + uint attributeId, + NumericRange indexRange, + QualifiedName dataEncoding, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoringMode monitoringMode, + uint clientHandle, + double samplingInterval, + bool alwaysReportUpdates) + { + m_source = source; + m_id = id; + m_attributeId = attributeId; + m_indexRange = indexRange; + m_dataEncoding = dataEncoding; + m_timestampsToReturn = timestampsToReturn; + m_diagnosticsMasks = diagnosticsMasks; + m_monitoringMode = monitoringMode; + m_clientHandle = clientHandle; + m_samplingInterval = samplingInterval; + m_nextSampleTime = HiResClock.TickCount64; + m_readyToPublish = false; + m_readyToTrigger = false; + m_alwaysReportUpdates = alwaysReportUpdates; + } + + /// + /// Constructs a new instance. + /// + public DataChangeMonitoredItem( + MonitoredNode source, + uint id, + uint attributeId, + NumericRange indexRange, + QualifiedName dataEncoding, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoringMode monitoringMode, + uint clientHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + DataChangeFilter filter, + Range range, + bool alwaysReportUpdates) + { + m_source = source; + m_id = id; + m_attributeId = attributeId; + m_indexRange = indexRange; + m_dataEncoding = dataEncoding; + m_timestampsToReturn = timestampsToReturn; + m_diagnosticsMasks = diagnosticsMasks; + m_monitoringMode = monitoringMode; + m_clientHandle = clientHandle; + m_samplingInterval = samplingInterval; + m_nextSampleTime = HiResClock.TickCount64; + m_readyToPublish = false; + m_readyToTrigger = false; + m_queue = null; + m_filter = filter; + m_range = 0; + m_alwaysReportUpdates = alwaysReportUpdates; + + if (range != null) + { + m_range = range.High - range.Low; + } + + if (queueSize > 1) + { + m_queue = new MonitoredItemQueue(id); + m_queue.SetQueueSize(queueSize, discardOldest, diagnosticsMasks); + m_queue.SetSamplingInterval(samplingInterval); + } + } + #endregion + + #region Public Members + /// + /// Gets the id for the attribute being monitored. + /// + public uint AttributeId + { + get { return m_attributeId; } + } + + /// + /// Gets the index range used to selected a subset of the value. + /// + public NumericRange IndexRange + { + get { return m_indexRange; } + } + + /// + /// Gets the data encoding to use when returning the value. + /// + public QualifiedName DataEncoding + { + get { return m_dataEncoding; } + } + + /// + /// Whether the monitored item should report a value without checking if it was changed. + /// + public bool AlwaysReportUpdates + { + get { return m_alwaysReportUpdates; } + set { m_alwaysReportUpdates = value; } + } + + /// + /// The number of milliseconds until the next sample. + /// + public int TimeToNextSample + { + get + { + lock (m_lock) + { + if (m_monitoringMode == MonitoringMode.Disabled) + { + return Int32.MaxValue; + } + + var now = HiResClock.TickCount64; + + if (m_nextSampleTime <= now) + { + return 0; + } + + return (int)(m_nextSampleTime - now); + } + } + } + + /// + /// The monitoring mode. + /// + public MonitoringMode MonitoringMode + { + get + { + return m_monitoringMode; + } + } + + /// + /// The sampling interval. + /// + public double SamplingInterval + { + get + { + lock (m_lock) + { + return m_samplingInterval; + } + } + } + + /// + /// Modifies the monitored item parameters, + /// + public ServiceResult Modify( + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + uint clientHandle, + double samplingInterval) + { + return Modify(diagnosticsMasks, timestampsToReturn, clientHandle, samplingInterval, 0, false, null, null); + } + + /// + /// Modifies the monitored item parameters, + /// + public ServiceResult Modify( + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + uint clientHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + DataChangeFilter filter, + Range range) + { + lock (m_lock) + { + m_diagnosticsMasks = diagnosticsMasks; + m_timestampsToReturn = timestampsToReturn; + m_clientHandle = clientHandle; + + // subtract the previous sampling interval. + long oldSamplingInterval = (long)m_samplingInterval; + + if (oldSamplingInterval < m_nextSampleTime) + { + m_nextSampleTime -= oldSamplingInterval; + } + + m_samplingInterval = samplingInterval; + + // calculate the next sampling interval. + long newSamplingInterval = (long)m_samplingInterval; + + if (m_samplingInterval > 0) + { + m_nextSampleTime += newSamplingInterval; + } + else + { + m_nextSampleTime = 0; + } + + // update the filter and the range. + m_filter = filter; + m_range = 0; + + if (range != null) + { + m_range = range.High - range.Low; + } + + // update the queue size. + if (queueSize > 1) + { + if (m_queue == null) + { + m_queue = new MonitoredItemQueue(m_id); + } + + m_queue.SetQueueSize(queueSize, discardOldest, diagnosticsMasks); + m_queue.SetSamplingInterval(samplingInterval); + } + else + { + m_queue = null; + } + + return ServiceResult.Good; + } + } + + /// + /// Called when the attribute being monitored changed. Reads and queues the value. + /// + public void ValueChanged(ISystemContext context) + { + DataValue value = new DataValue(); + + ServiceResult error = m_source.Node.ReadAttribute(context, m_attributeId, NumericRange.Empty, null, value); + + if (ServiceResult.IsBad(error)) + { + value = new DataValue(error.StatusCode); + } + + value.ServerTimestamp = DateTime.UtcNow; + + QueueValue(value, error); + } + #endregion + + #region IMonitoredItem Members + /// + /// The node manager for the monitored item. + /// + public INodeManager NodeManager + { + get { return m_source.NodeManager; } + } + + /// + /// The session for the monitored item. + /// + public Session Session + { + get + { + ISubscription subscription = m_subscription; + + if (subscription != null) + { + return subscription.Session; + } + + return null; + } + } + + /// + /// The identifier for the subscription that the monitored item belongs to. + /// + public uint SubscriptionId + { + get + { + ISubscription subscription = m_subscription; + + if (subscription != null) + { + return subscription.Id; + } + + return 0; + } + } + + /// + /// The unique identifier for the monitored item. + /// + public uint Id + { + get { return m_id; } + } + + /// + /// The identifier for the client handle assigned to the monitored item. + /// + public uint ClientHandle + { + get { return m_clientHandle; } + } + + /// + /// The callback to use to notify the subscription when values are ready to publish. + /// + public ISubscription SubscriptionCallback + { + get + { + return m_subscription; + } + + set + { + m_subscription = value; + } + } + + /// + /// The handle assigned to the monitored item by the node manager. + /// + public object ManagerHandle + { + get { return m_source; } + } + + /// + /// The type of monitor item. + /// + public int MonitoredItemType + { + get { return MonitoredItemTypeMask.DataChange; } + } + + /// + /// Returns true if the item is ready to publish. + /// + public bool IsReadyToPublish + { + get + { + lock (m_lock) + { + // check if not ready to publish. + if (!m_readyToPublish) + { + return false; + } + + // check if monitoring was turned off. + if (m_monitoringMode != MonitoringMode.Reporting) + { + return false; + } + + // re-queue if too little time has passed since the last publish. + long now = HiResClock.TickCount64; + + if (m_nextSampleTime > now) + { + return false; + } + + return true; + } + } + } + + /// + /// Gets or Sets a value indicating whether the item is ready to trigger in case it has some linked items. + /// + public bool IsReadyToTrigger + { + get + { + lock (m_lock) + { + // only allow to trigger if sampling or reporting. + if (m_monitoringMode == MonitoringMode.Disabled) + { + return false; + } + + return m_readyToTrigger; + } + } + + set + { + lock (m_lock) + { + m_readyToTrigger = value; + } + } + } + + /// + /// Returns the results for the create request. + /// + public ServiceResult GetCreateResult(out MonitoredItemCreateResult result) + { + lock (m_lock) + { + result = new MonitoredItemCreateResult(); + + result.MonitoredItemId = m_id; + result.StatusCode = StatusCodes.Good; + result.RevisedSamplingInterval = m_samplingInterval; + result.RevisedQueueSize = 0; + result.FilterResult = null; + + if (m_queue != null) + { + result.RevisedQueueSize = m_queue.QueueSize; + } + + return ServiceResult.Good; + } + } + + /// + /// Returns the results for the modify request. + /// + public ServiceResult GetModifyResult(out MonitoredItemModifyResult result) + { + lock (m_lock) + { + result = new MonitoredItemModifyResult(); + + result.StatusCode = StatusCodes.Good; + result.RevisedSamplingInterval = m_samplingInterval; + result.RevisedQueueSize = 0; + result.FilterResult = null; + + if (m_queue != null) + { + result.RevisedQueueSize = m_queue.QueueSize; + } + + return ServiceResult.Good; + } + } + #endregion + + #region IDataChangeMonitoredItem Members + /// + /// Queues a new data change. + /// + public void QueueValue(DataValue value, ServiceResult error) + { + lock (m_lock) + { + // check if value has changed. + if (!m_alwaysReportUpdates) + { + if (!Opc.Ua.Server.MonitoredItem.ValueChanged(value, error, m_lastValue, m_lastError, m_filter, m_range)) + { + return; + } + } + + // make a shallow copy of the value. + if (value != null) + { + DataValue copy = new DataValue(); + + copy.WrappedValue = value.WrappedValue; + copy.StatusCode = value.StatusCode; + copy.SourceTimestamp = value.SourceTimestamp; + copy.SourcePicoseconds = value.SourcePicoseconds; + copy.ServerTimestamp = value.ServerTimestamp; + copy.ServerPicoseconds = value.ServerPicoseconds; + + value = copy; + + // ensure the data value matches the error status code. + if (error != null && error.StatusCode.Code != 0) + { + value.StatusCode = error.StatusCode; + } + } + + m_lastValue = value; + m_lastError = error; + + // queue value. + if (m_queue != null) + { + m_queue.QueueValue(value, error); + } + + // flag the item as ready to publish. + m_readyToPublish = true; + m_readyToTrigger = true; + } + } + + /// + /// Sets a flag indicating that the semantics for the monitored node have changed. + /// + /// + /// The StatusCode for next value reported by the monitored item will have the SemanticsChanged bit set. + /// + public void SetSemanticsChanged() + { + lock (m_lock) + { + m_semanticsChanged = true; + } + } + + /// + /// Sets a flag indicating that the structure of the monitored node has changed. + /// + /// + /// The StatusCode for next value reported by the monitored item will have the StructureChanged bit set. + /// + public void SetStructureChanged() + { + lock (m_lock) + { + m_structureChanged = true; + } + } + + /// + /// Changes the monitoring mode. + /// + public MonitoringMode SetMonitoringMode(MonitoringMode monitoringMode) + { + lock (m_lock) + { + MonitoringMode previousMode = m_monitoringMode; + + if (previousMode == monitoringMode) + { + return previousMode; + } + + if (previousMode == MonitoringMode.Disabled) + { + m_nextSampleTime = HiResClock.TickCount64; + m_lastError = null; + m_lastValue = null; + } + + m_monitoringMode = monitoringMode; + + if (monitoringMode == MonitoringMode.Disabled) + { + m_readyToPublish = false; + m_readyToTrigger = false; + } + + return previousMode; + } + } + + /// + /// No filters supported. + /// + public DataChangeFilter DataChangeFilter + { + get { return m_filter; } + } + + /// + /// Increments the sample time to the next interval. + /// + private void IncrementSampleTime() + { + // update next sample time. + long now = HiResClock.TickCount64; + long samplingInterval = (long)m_samplingInterval; + + if (m_nextSampleTime > 0) + { + long delta = now - m_nextSampleTime; + + if (samplingInterval > 0 && delta >= 0) + { + m_nextSampleTime += ((delta / samplingInterval) + 1) * samplingInterval; + } + } + + // set sampling time based on current time. + else + { + m_nextSampleTime = now + samplingInterval; + } + } + + /// + /// Called by the subscription to publish any notification. + /// + public bool Publish(OperationContext context, Queue notifications, Queue diagnostics) + { + lock (m_lock) + { + // check if not ready to publish. + if (!IsReadyToPublish) + { + return false; + } + + // update sample time. + IncrementSampleTime(); + + // update publish flag. + m_readyToPublish = false; + m_readyToTrigger = false; + + // check if queuing is enabled. + if (m_queue == null) + { + Publish(context, m_lastValue, m_lastError, notifications, diagnostics); + } + else + { + DataValue value = null; + ServiceResult error = null; + + while (m_queue.Publish(out value, out error)) + { + Publish(context, value, error, notifications, diagnostics); + } + } + + return true; + } + } + + /// + /// Publishes a value. + /// + private void Publish( + OperationContext context, + DataValue value, + ServiceResult error, + Queue notifications, + Queue diagnostics) + { + // set semantics changed bit. + if (m_semanticsChanged) + { + if (value != null) + { + value.StatusCode = value.StatusCode.SetSemanticsChanged(true); + } + + if (error != null) + { + error = new ServiceResult( + error.StatusCode.SetSemanticsChanged(true), + error.SymbolicId, + error.NamespaceUri, + error.LocalizedText, + error.AdditionalInfo, + error.InnerResult); + } + + m_semanticsChanged = false; + } + + // set structure changed bit. + if (m_structureChanged) + { + if (value != null) + { + value.StatusCode = value.StatusCode.SetStructureChanged(true); + } + + if (error != null) + { + error = new ServiceResult( + error.StatusCode.SetStructureChanged(true), + error.SymbolicId, + error.NamespaceUri, + error.LocalizedText, + error.AdditionalInfo, + error.InnerResult); + } + + m_structureChanged = false; + } + + // copy data value. + MonitoredItemNotification item = new MonitoredItemNotification(); + + item.ClientHandle = m_clientHandle; + item.Value = value; + + // apply timestamp filter. + if (m_timestampsToReturn != TimestampsToReturn.Server && m_timestampsToReturn != TimestampsToReturn.Both) + { + item.Value.ServerTimestamp = DateTime.MinValue; + } + + if (m_timestampsToReturn != TimestampsToReturn.Source && m_timestampsToReturn != TimestampsToReturn.Both) + { + item.Value.SourceTimestamp = DateTime.MinValue; + } + + notifications.Enqueue(item); + + // update diagnostic info. + DiagnosticInfo diagnosticInfo = null; + + if (m_lastError != null) + { + if ((m_diagnosticsMasks & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_source.Server, context, m_lastError); + } + } + + diagnostics.Enqueue(diagnosticInfo); + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private MonitoredNode m_source; + private ISubscription m_subscription; + private uint m_id; + private DataValue m_lastValue; + private ServiceResult m_lastError; + private uint m_attributeId; + private NumericRange m_indexRange; + private QualifiedName m_dataEncoding; + private TimestampsToReturn m_timestampsToReturn; + private DiagnosticsMasks m_diagnosticsMasks; + private uint m_clientHandle; + private double m_samplingInterval; + private MonitoredItemQueue m_queue; + private DataChangeFilter m_filter; + private double m_range; + private MonitoringMode m_monitoringMode; + private long m_nextSampleTime; + private bool m_readyToPublish; + private bool m_readyToTrigger; + private bool m_alwaysReportUpdates; + private bool m_semanticsChanged; + private bool m_structureChanged; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/MonitoredNode.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/MonitoredNode.cs new file mode 100644 index 00000000..c0dfc7d3 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Diagnostics/v10/MonitoredNode.cs @@ -0,0 +1,382 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// Keeps track of the monitored items for a single node. + /// + [Obsolete("Class replaced by Opc.Ua.Server.MonitoredNode2")] + public class MonitoredNode + { + #region Constructors + /// + /// Initializes the instance with the context for the node being monitored. + /// + public MonitoredNode( + IServerInternal server, + INodeManager nodeManager, + NodeState node) + { + m_server = server; + m_nodeManager = nodeManager; + m_node = node; + } + #endregion + + #region Public Properties + /// + /// The server that the node belongs to. + /// + public IServerInternal Server + { + get { return m_server; } + } + + /// + /// The node manager that the node belongs to. + /// + public INodeManager NodeManager + { + get { return m_nodeManager; } + } + + /// + /// The node being monitored. + /// + public NodeState Node + { + get { return m_node; } + } + + /// + /// Whether the node has any active monitored items for the specified attribute. + /// + public bool IsMonitoringRequired(uint attributeId) + { + if (m_monitoredItems != null) + { + for (int ii = 0; ii < m_monitoredItems.Count; ii++) + { + DataChangeMonitoredItem monitoredItem = m_monitoredItems[ii]; + + if (monitoredItem.AttributeId == attributeId && monitoredItem.MonitoringMode != MonitoringMode.Disabled) + { + return true; + } + } + } + + return false; + } + #endregion + + #region Public Methods + /// + /// Creates a new data change monitored item. + /// + /// The system context. + /// The unique identifier for the monitiored item. + /// The attribute to monitor. + /// The index range to use for array values. + /// The data encoding to return for structured values. + /// The diagnostics masks to use. + /// The timestamps to return. + /// The initial monitoring mode. + /// The handle assigned by the client. + /// The sampling interval. + /// The queue size. + /// Whether to discard the oldest values when the queue overflows. + /// The data change filter to use. + /// The range to use when evaluating a percentage deadband filter. + /// Whether the monitored item should skip the check for a change in value. + /// The new monitored item. + public DataChangeMonitoredItem CreateDataChangeItem( + ISystemContext context, + uint monitoredItemId, + uint attributeId, + NumericRange indexRange, + QualifiedName dataEncoding, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoringMode monitoringMode, + uint clientHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + DataChangeFilter filter, + Range range, + bool alwaysReportUpdates) + { + DataChangeMonitoredItem monitoredItem = new DataChangeMonitoredItem( + this, + monitoredItemId, + attributeId, + indexRange, + dataEncoding, + diagnosticsMasks, + timestampsToReturn, + monitoringMode, + clientHandle, + samplingInterval, + queueSize, + discardOldest, + filter, + range, + alwaysReportUpdates); + + if (m_monitoredItems == null) + { + m_monitoredItems = new List(); + m_node.OnStateChanged = OnNodeChange; + } + + m_monitoredItems.Add(monitoredItem); + + return monitoredItem; + } + + /// + /// Creates a new data change monitored item. + /// + /// The system context. + /// The unique identifier for the monitiored item. + /// The attribute to monitor. + /// The index range to use for array values. + /// The data encoding to return for structured values. + /// The diagnostics masks to use. + /// The timestamps to return. + /// The initial monitoring mode. + /// The handle assigned by the client. + /// The sampling interval. + /// Whether the monitored item should skip the check for a change in value. + /// The new monitored item. + public DataChangeMonitoredItem CreateDataChangeItem( + ISystemContext context, + uint monitoredItemId, + uint attributeId, + NumericRange indexRange, + QualifiedName dataEncoding, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoringMode monitoringMode, + uint clientHandle, + double samplingInterval, + bool alwaysReportUpdates) + { + return CreateDataChangeItem( + context, + monitoredItemId, + attributeId, + indexRange, + dataEncoding, + diagnosticsMasks, + timestampsToReturn, + monitoringMode, + clientHandle, + samplingInterval, + 0, + false, + null, + null, + alwaysReportUpdates); + } + + /// + /// Deletes the monitored item. + /// + public void DeleteItem(IMonitoredItem monitoredItem) + { + if (m_monitoredItems != null) + { + for (int ii = 0; ii < m_monitoredItems.Count; ii++) + { + if (Object.ReferenceEquals(monitoredItem, m_monitoredItems[ii])) + { + m_monitoredItems.RemoveAt(ii); + break; + } + } + } + } + + /// + /// Handles change events raised by the node. + /// + /// The system context. + /// The node that raised the event. + /// What caused the event to be raised + public void OnNodeChange(ISystemContext context, NodeState state, NodeStateChangeMasks masks) + { + if (m_monitoredItems != null) + { + for (int ii = 0; ii < m_monitoredItems.Count; ii++) + { + DataChangeMonitoredItem monitoredItem = m_monitoredItems[ii]; + + // check if the node has been deleted. + if ((masks & NodeStateChangeMasks.Deleted) != 0) + { + monitoredItem.QueueValue(null, StatusCodes.BadNodeIdUnknown); + continue; + } + + if (monitoredItem.AttributeId == Attributes.Value) + { + if ((masks & NodeStateChangeMasks.Value) != 0) + { + monitoredItem.ValueChanged(context); + } + } + else + { + if ((masks & NodeStateChangeMasks.NonValue) != 0) + { + monitoredItem.ValueChanged(context); + } + } + } + } + } + + /// + /// Subscribes to events produced by the node. + /// + public void SubscribeToEvents(ISystemContext context, IEventMonitoredItem eventSubscription) + { + if (m_eventSubscriptions == null) + { + m_eventSubscriptions = new List(); + } + + if (m_eventSubscriptions.Count == 0) + { + m_node.OnReportEvent = OnReportEvent; + m_node.SetAreEventsMonitored(context, true, true); + } + + for (int ii = 0; ii < m_eventSubscriptions.Count; ii++) + { + if (Object.ReferenceEquals(eventSubscription, m_eventSubscriptions[ii])) + { + return; + } + } + + m_eventSubscriptions.Add(eventSubscription); + } + + /// + /// Unsubscribes to events produced by the node. + /// + public void UnsubscribeToEvents(ISystemContext context, IEventMonitoredItem eventSubscription) + { + if (m_eventSubscriptions != null) + { + for (int ii = 0; ii < m_eventSubscriptions.Count; ii++) + { + if (Object.ReferenceEquals(eventSubscription, m_eventSubscriptions[ii])) + { + m_eventSubscriptions.RemoveAt(ii); + + if (m_eventSubscriptions.Count == 0) + { + m_node.SetAreEventsMonitored(context, false, true); + m_node.OnReportEvent = null; + } + + break; + } + } + } + } + + /// + /// Handles events reported by the node. + /// + /// The system context. + /// The node that raised the event. + /// The event to report. + public void OnReportEvent(ISystemContext context, NodeState state, IFilterTarget e) + { + if (m_eventSubscriptions != null) + { + for (int ii = 0; ii < m_eventSubscriptions.Count; ii++) + { + m_eventSubscriptions[ii].QueueEvent(e); + } + } + } + + /// + /// Resends the events for any conditions belonging to the node or its children. + /// + /// The system context. + /// The item to refresh. + public void ConditionRefresh( + ISystemContext context, + IEventMonitoredItem monitoredItem) + { + if (m_eventSubscriptions != null) + { + for (int ii = 0; ii < m_eventSubscriptions.Count; ii++) + { + // only process items monitoring this node. + if (!Object.ReferenceEquals(monitoredItem, m_eventSubscriptions[ii])) + { + continue; + } + + // get the set of condition events for the node and its children. + List events = new List(); + m_node.ConditionRefresh(context, events, true); + + // report the events to the monitored item. + for (int jj = 0; jj < events.Count; jj++) + { + monitoredItem.QueueEvent(events[jj]); + } + } + } + } + #endregion + + #region Private Fields + private IServerInternal m_server; + private INodeManager m_nodeManager; + private NodeState m_node; + private List m_eventSubscriptions; + private List m_monitoredItems; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Documentation/Opc.Ua.Server.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Documentation/Opc.Ua.Server.cs new file mode 100644 index 00000000..24f7bd6a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Documentation/Opc.Ua.Server.cs @@ -0,0 +1,42 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Server +{ + /// + /// The Opc.Ua.Server namespace defines classes which can be used to implement a UA server. + /// These classes manage session and subscriptions created by clients and provide a simplified + /// API that can be used to provide access to data and events in an external system. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ContinuationPoint.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ContinuationPoint.cs new file mode 100644 index 00000000..84fbde3d --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ContinuationPoint.cs @@ -0,0 +1,270 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// The table of all reference types known to the server. + /// + /// This class is thread safe. + public class ContinuationPoint : IDisposable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public ContinuationPoint() + { + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_data); + } + } + #endregion + + #region Public Properties + /// + /// A unique identifier for the continuation point. + /// + public Guid Id + { + get { return m_id; } + set { m_id = value; } + } + + /// + /// The node manager that created the continuation point. + /// + public INodeManager Manager + { + get { return m_manager; } + set { m_manager = value; } + } + + /// + /// The view being browsed. + /// + public ViewDescription View + { + get { return m_view; } + set { m_view = value; } + } + + /// + /// The node being browsed. + /// + public object NodeToBrowse + { + get { return m_nodeToBrowse; } + set { m_nodeToBrowse = value; } + } + + /// + /// The maximum number of results to return. + /// + public uint MaxResultsToReturn + { + get { return m_maxResultsToReturn; } + set { m_maxResultsToReturn = value; } + } + + /// + /// What direction to follow the references. + /// + public BrowseDirection BrowseDirection + { + get { return m_browseDirection; } + set { m_browseDirection = value; } + } + + /// + /// The reference type of the references to return. + /// + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + /// Whether subtypes of the reference type should be return as well. + /// + public bool IncludeSubtypes + { + get { return m_includeSubtypes; } + set { m_includeSubtypes = value; } + } + + /// + /// The node class of the target nodes for the references to return. + /// + public uint NodeClassMask + { + get { return m_nodeClassMask; } + set { m_nodeClassMask = value; } + } + + /// + /// The values to return. + /// + public BrowseResultMask ResultMask + { + get { return m_resultMask; } + set { m_resultMask = value; } + } + + /// + /// The index where browsing halted. + /// + public int Index + { + get { return m_index; } + set { m_index = value; } + } + + /// + /// Node manager specific data that is necessary to continue the browse. + /// + /// + /// A node manager needs to hold onto unmanaged resources to continue the browse. + /// If this is the case then the object stored here must implement the Idispose + /// interface. This will ensure the unmanaged resources are freed if the continuation + /// point expires. + /// + public object Data + { + get { return m_data; } + set { m_data = value; } + } + + /// + /// Whether the ReferenceTypeId should be returned in the result. + /// + public bool ReferenceTypeIdRequired + { + get { return (m_resultMask & BrowseResultMask.ReferenceTypeId) != 0; } + } + + /// + /// Whether the IsForward flag should be returned in the result. + /// + public bool IsForwardRequired + { + get { return (m_resultMask & BrowseResultMask.IsForward) != 0; } + } + + /// + /// Whether the NodeClass should be returned in the result. + /// + public bool NodeClassRequired + { + get { return (m_resultMask & BrowseResultMask.NodeClass) != 0; } + } + + /// + /// Whether the BrowseName should be returned in the result. + /// + public bool BrowseNameRequired + { + get { return (m_resultMask & BrowseResultMask.BrowseName) != 0; } + } + + /// + /// Whether the DisplayName should be returned in the result. + /// + public bool DisplayNameRequired + { + get { return (m_resultMask & BrowseResultMask.DisplayName) != 0; } + } + + /// + /// Whether the TypeDefinition should be returned in the result. + /// + public bool TypeDefinitionRequired + { + get { return (m_resultMask & BrowseResultMask.TypeDefinition) != 0; } + } + + /// + /// False if it is not necessary to read the attributes a target node. + /// + /// + /// This flag is true if the NodeClass filter is set or the target node attributes are returned in the result. + /// + public bool TargetAttributesRequired + { + get + { + if (m_nodeClassMask != 0) + { + return true; + } + + return (m_resultMask & (BrowseResultMask.NodeClass | BrowseResultMask.BrowseName | BrowseResultMask.DisplayName | BrowseResultMask.TypeDefinition)) != 0; + } + } + #endregion + + #region Private Fields + private Guid m_id; + private INodeManager m_manager; + private ViewDescription m_view; + private object m_nodeToBrowse; + private uint m_maxResultsToReturn; + private BrowseDirection m_browseDirection; + private NodeId m_referenceTypeId; + private bool m_includeSubtypes; + private uint m_nodeClassMask; + private BrowseResultMask m_resultMask; + private int m_index; + private object m_data; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/CoreNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/CoreNodeManager.cs new file mode 100644 index 00000000..85ebc014 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/CoreNodeManager.cs @@ -0,0 +1,3318 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Threading; +using System.Reflection; +using System.IO; +using System.Diagnostics; +using System.Threading.Tasks; + +#pragma warning disable 0618 + +namespace Opc.Ua.Server +{ + /// + /// The default node manager for the server. + /// + /// + /// Every Server has one instance of this NodeManager. + /// It stores objects that implement ILocalNode and indexes them by NodeId. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public partial class CoreNodeManager : INodeManager, IDisposable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public CoreNodeManager( + IServerInternal server, + ApplicationConfiguration configuration, + ushort dynamicNamespaceIndex) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + m_server = server; + m_nodes = new NodeTable(server.NamespaceUris, server.ServerUris, server.TypeTree); + m_monitoredItems = new Dictionary(); + m_defaultMinimumSamplingInterval = 1000; + m_namespaceUris = new List(); + m_dynamicNamespaceIndex = dynamicNamespaceIndex; + + // use namespace 1 if out of range. + if (m_dynamicNamespaceIndex == 0 || m_dynamicNamespaceIndex >= server.NamespaceUris.Count) + { + m_dynamicNamespaceIndex = 1; + } + + m_samplingGroupManager = new SamplingGroupManager( + server, + this, + (uint)configuration.ServerConfiguration.MaxNotificationQueueSize, + configuration.ServerConfiguration.AvailableSamplingRates); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List nodes = null; + + lock(m_lock) + { + nodes = new List(m_nodes); + m_nodes.Clear(); + + m_monitoredItems.Clear(); + } + + foreach (INode node in nodes) + { + Utils.SilentDispose(node); + } + + Utils.SilentDispose(m_samplingGroupManager); + } + } + #endregion + + #region Public Properties + /// + /// Acquires the lock on the node manager. + /// + public object DataLock + { + get { return m_lock; } + } + #endregion + + /// + /// Imports the nodes from a dictionary of NodeState objects. + /// + public void ImportNodes(ISystemContext context, IEnumerable predefinedNodes) + { + ImportNodes(context, predefinedNodes, false); + } + + /// + /// Imports the nodes from a dictionary of NodeState objects. + /// + internal void ImportNodes(ISystemContext context, IEnumerable predefinedNodes, bool isInternal) + { + NodeTable nodesToExport = new NodeTable(Server.NamespaceUris, Server.ServerUris, Server.TypeTree); + + foreach (NodeState node in predefinedNodes) + { + node.Export(context, nodesToExport); + } + + lock (Server.CoreNodeManager.DataLock) + { + foreach (ILocalNode nodeToExport in nodesToExport) + { + Server.CoreNodeManager.AttachNode(nodeToExport, isInternal); + } + } + } + + #region INodeManager Members + /// + public IEnumerable NamespaceUris + { + get + { + return m_namespaceUris; + } + } + + /// + /// + /// Populates the NodeManager by loading the standard nodes from an XML file stored as an embedded resource. + /// + public void CreateAddressSpace(IDictionary> externalReferences) + { + // TBD + } + + /// + /// + /// Disposes all of the nodes. + /// + public void DeleteAddressSpace() + { + List nodesToDispose = new List(); + + lock(m_lock) + { + // collect nodes to dispose. + foreach (INode node in m_nodes) + { + IDisposable disposable = node as IDisposable; + + if (disposable != null) + { + nodesToDispose.Add(disposable); + } + } + + m_nodes.Clear(); + } + + // dispose of the nodes. + foreach (IDisposable disposable in nodesToDispose) + { + try + { + disposable.Dispose(); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error disposing a Node object."); + } + } + } + + /// + public object GetManagerHandle(NodeId nodeId) + { + lock(m_lock) + { + if (NodeId.IsNull(nodeId)) + { + return null; + } + + return GetLocalNode(nodeId); + } + } + + /// + public void TranslateBrowsePath( + OperationContext context, + object sourceHandle, + RelativePathElement relativePath, + IList targetIds, + IList unresolvedTargetIds) + { + if (sourceHandle == null) throw new ArgumentNullException(nameof(sourceHandle)); + if (relativePath == null) throw new ArgumentNullException(nameof(relativePath)); + if (targetIds == null) throw new ArgumentNullException(nameof(targetIds)); + if (unresolvedTargetIds == null) throw new ArgumentNullException(nameof(unresolvedTargetIds)); + + // check for valid handle. + ILocalNode source = sourceHandle as ILocalNode; + + if (source == null) + { + return; + } + + lock(m_lock) + { + // find the references that meet the filter criteria. + IList references = source.References.Find( + relativePath.ReferenceTypeId, + relativePath.IsInverse, + relativePath.IncludeSubtypes, + m_server.TypeTree); + + // nothing more to do. + if (references == null || references.Count == 0) + { + return; + } + + // find targets with matching browse names. + foreach (IReference reference in references) + { + INode target = GetLocalNode(reference.TargetId); + + // target is not known to the node manager. + if (target == null) + { + // ignore unknown external references. + if (reference.TargetId.IsAbsolute) + { + continue; + } + + // caller must check the browse name. + unresolvedTargetIds.Add((NodeId)reference.TargetId); + continue; + } + + // check browse name. + if (target.BrowseName == relativePath.TargetName) + { + targetIds.Add(reference.TargetId); + } + } + } + } + + #region Browse + /// + public void Browse( + OperationContext context, + ref ContinuationPoint continuationPoint, + IList references) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (continuationPoint == null) throw new ArgumentNullException(nameof(continuationPoint)); + if (references == null) throw new ArgumentNullException(nameof(references)); + + // check for valid handle. + ILocalNode source = continuationPoint.NodeToBrowse as ILocalNode; + + if (source == null) + { + throw new ServiceResultException(StatusCodes.BadNodeIdUnknown); + } + + // check for view. + if (!ViewDescription.IsDefault(continuationPoint.View)) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + lock (m_lock) + { + // construct list of references. + uint maxResultsToReturn = continuationPoint.MaxResultsToReturn; + + // get previous enumerator. + IEnumerator enumerator = continuationPoint.Data as IEnumerator; + + // fetch a snapshot all references for node. + if (enumerator == null) + { + List copy = new List(source.References); + enumerator = copy.GetEnumerator(); + enumerator.MoveNext(); + } + + do + { + IReference reference = enumerator.Current; + + // silently ignore bad values. + if (reference == null || NodeId.IsNull(reference.ReferenceTypeId) || NodeId.IsNull(reference.TargetId)) + { + continue; + } + + // apply browse filters. + bool include = ApplyBrowseFilters( + reference, + continuationPoint.BrowseDirection, + continuationPoint.ReferenceTypeId, + continuationPoint.IncludeSubtypes); + + if (include) + { + ReferenceDescription description = new ReferenceDescription(); + + description.NodeId = reference.TargetId; + description.SetReferenceType(continuationPoint.ResultMask, reference.ReferenceTypeId, !reference.IsInverse); + + // only fetch the metadata if it is requested. + if (continuationPoint.TargetAttributesRequired) + { + // get the metadata for the node. + NodeMetadata metadata = GetNodeMetadata(context, GetManagerHandle(reference.TargetId), continuationPoint.ResultMask); + + // update description with local node metadata. + if (metadata != null) + { + description.SetTargetAttributes( + continuationPoint.ResultMask, + metadata.NodeClass, + metadata.BrowseName, + metadata.DisplayName, + metadata.TypeDefinition); + + // check node class mask. + if (!CheckNodeClassMask(continuationPoint.NodeClassMask, description.NodeClass)) + { + continue; + } + } + + // any target that is not remote must be owned by another node manager. + else if (!reference.TargetId.IsAbsolute) + { + description.Unfiltered = true; + } + } + + // add reference to list. + references.Add(description); + + // construct continuation point if max results reached. + if (maxResultsToReturn > 0 && references.Count >= maxResultsToReturn) + { + continuationPoint.Index = 0; + continuationPoint.Data = enumerator; + enumerator.MoveNext(); + return; + } + } + } + while (enumerator.MoveNext()); + + // nothing more to browse if it exits from the loop normally. + continuationPoint.Dispose(); + continuationPoint = null; + } + } + + /// + /// Returns true is the target meets the filter criteria. + /// + private bool ApplyBrowseFilters( + IReference reference, + BrowseDirection browseDirection, + NodeId referenceTypeId, + bool includeSubtypes) + { + // check browse direction. + if (reference.IsInverse) + { + if (browseDirection == BrowseDirection.Forward) + { + return false; + } + } + else + { + if (browseDirection == BrowseDirection.Inverse) + { + return false; + } + } + + // check reference type filter. + if (!NodeId.IsNull(referenceTypeId)) + { + if (reference.ReferenceTypeId != referenceTypeId) + { + if (includeSubtypes) + { + if (m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, referenceTypeId)) + { + return true; + } + } + + return false; + } + } + + // include reference for now. + return true; + } + #endregion + + /// + public NodeMetadata GetNodeMetadata( + OperationContext context, + object targetHandle, + BrowseResultMask resultMask) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + // find target. + ILocalNode target = targetHandle as ILocalNode; + + if (target == null) + { + return null; + } + + lock (m_lock) + { + // copy the default metadata. + NodeMetadata metadata = new NodeMetadata(target, target.NodeId); + + // copy target attributes. + if ((resultMask & BrowseResultMask.NodeClass) != 0) + { + metadata.NodeClass = (NodeClass)target.NodeClass; + } + + if ((resultMask & BrowseResultMask.BrowseName) != 0) + { + metadata.BrowseName = target.BrowseName; + } + + if ((resultMask & BrowseResultMask.DisplayName) != 0) + { + metadata.DisplayName = target.DisplayName; + + // check if the display name can be localized. + if (!String.IsNullOrEmpty(metadata.DisplayName.Key)) + { + metadata.DisplayName = Server.ResourceManager.Translate(context.PreferredLocales, metadata.DisplayName); + } + } + + metadata.WriteMask = target.WriteMask; + + if (metadata.WriteMask != AttributeWriteMask.None) + { + DataValue value = new DataValue((uint)(int)target.UserWriteMask); + ServiceResult result = target.Read(context, Attributes.UserWriteMask, value); + + if (ServiceResult.IsBad(result)) + { + metadata.WriteMask = AttributeWriteMask.None; + } + else + { + metadata.WriteMask = (AttributeWriteMask)(int)((uint)(int)metadata.WriteMask & (uint)value.Value); + } + } + + metadata.EventNotifier = EventNotifiers.None; + metadata.AccessLevel = AccessLevels.None; + metadata.Executable = false; + + switch (target.NodeClass) + { + case NodeClass.Object: + { + metadata.EventNotifier = ((IObject)target).EventNotifier; + break; + } + + case NodeClass.View: + { + metadata.EventNotifier = ((IView)target).EventNotifier; + break; + } + + case NodeClass.Variable: + { + IVariable variable = (IVariable)target; + metadata.DataType = variable.DataType; + metadata.ValueRank = variable.ValueRank; + metadata.ArrayDimensions = variable.ArrayDimensions; + metadata.AccessLevel = variable.AccessLevel; + + DataValue value = new DataValue(variable.UserAccessLevel); + ServiceResult result = variable.Read(context, Attributes.UserAccessLevel, value); + + if (ServiceResult.IsBad(result)) + { + metadata.AccessLevel = 0; + break; + } + + metadata.AccessLevel = (byte)(metadata.AccessLevel & (byte)value.Value); + break; + } + + case NodeClass.Method: + { + IMethod method = (IMethod)target; + metadata.Executable = method.Executable; + + if (metadata.Executable) + { + DataValue value = new DataValue(method.UserExecutable); + ServiceResult result = method.Read(context, Attributes.UserExecutable, value); + + if (ServiceResult.IsBad(result)) + { + metadata.Executable = false; + break; + } + + metadata.Executable = (bool)value.Value; + } + + break; + } + } + + // look up type definition. + if ((resultMask & BrowseResultMask.TypeDefinition) != 0) + { + if (target.NodeClass == NodeClass.Variable || target.NodeClass == NodeClass.Object) + { + metadata.TypeDefinition = target.TypeDefinitionId; + } + } + + // Set AccessRestrictions and RolePermissions + Node node = (Node)target; + metadata.AccessRestrictions = (AccessRestrictionType)Enum.Parse(typeof(AccessRestrictionType), node.AccessRestrictions.ToString()); + metadata.RolePermissions = node.RolePermissions; + metadata.UserRolePermissions = node.UserRolePermissions; + + // check if NamespaceMetadata is defined for NamespaceUri + string namespaceUri = Server.NamespaceUris.GetString(target.NodeId.NamespaceIndex); + NamespaceMetadataState namespaceMetadataState = Server.NodeManager.ConfigurationNodeManager.GetNamespaceMetadataState(namespaceUri); + if (namespaceMetadataState != null) + { + metadata.DefaultAccessRestrictions = (AccessRestrictionType)Enum.ToObject(typeof(AccessRestrictionType), + namespaceMetadataState.DefaultAccessRestrictions.Value); + + metadata.DefaultRolePermissions = namespaceMetadataState.DefaultRolePermissions.Value; + metadata.DefaultUserRolePermissions = namespaceMetadataState.DefaultUserRolePermissions.Value; + } + + #if LEGACY_NODEMANAGER + // check if a source is defined for the node. + SourceHandle handle = target.Handle as SourceHandle; + + if (handle != null) + { + // check if the metadata needs to be updated by the source. + IReadMetadataSource source = handle.Source as IReadMetadataSource; + + if (source != null) + { + source.ReadMetadata( + context, + handle.Handle, + resultMask, + metadata); + } + } + #endif + + // return metadata. + return metadata; + } + } + + /// + /// + /// This method must not be called without first acquiring + /// + public void AddReferences(IDictionary> references) + { + if (references == null) throw new ArgumentNullException(nameof(references)); + + lock (m_lock) + { + IEnumerator>> enumerator = references.GetEnumerator(); + + while (enumerator.MoveNext()) + { + ILocalNode actualNode = GetLocalNode(enumerator.Current.Key) as ILocalNode; + + if (actualNode != null) + { + foreach (IReference reference in enumerator.Current.Value) + { + AddReference(actualNode, reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + } + } + } + } + } + + /// + public void Read( + OperationContext context, + double maxAge, + IList nodesToRead, + IList values, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (nodesToRead == null) throw new ArgumentNullException(nameof(nodesToRead)); + if (values == null) throw new ArgumentNullException(nameof(values)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + ReadValueId nodeToRead = nodesToRead[ii]; + + // skip items that have already been processed. + if (nodeToRead.Processed) + { + continue; + } + + // look up the node. + ILocalNode node = GetLocalNode(nodeToRead.NodeId) as ILocalNode; + + if (node == null) + { + continue; + } + + DataValue value = values[ii] = new DataValue(); + + value.Value = null; + value.ServerTimestamp = DateTime.UtcNow; + value.SourceTimestamp = DateTime.MinValue; + value.StatusCode = StatusCodes.BadAttributeIdInvalid; + + // owned by this node manager. + nodeToRead.Processed = true; + + // read the default value (also verifies that the attribute id is valid for the node). + ServiceResult error = node.Read(context, nodeToRead.AttributeId, value); + + if (ServiceResult.IsBad(error)) + { + errors[ii] = error; + continue; + } + + // always use default value for base attributes. + bool useDefault = false; + + switch (nodeToRead.AttributeId) + { + case Attributes.NodeId: + case Attributes.NodeClass: + case Attributes.BrowseName: + { + useDefault = true; + break; + } + } + + if (useDefault) + { + errors[ii] = error; + continue; + } + + // apply index range to value attributes. + if (nodeToRead.AttributeId == Attributes.Value) + { + object defaultValue = value.Value; + + error = nodeToRead.ParsedIndexRange.ApplyRange(ref defaultValue); + + if (ServiceResult.IsBad(error)) + { + value.Value = null; + errors[ii] = error; + continue; + } + + // apply data encoding. + if (!QualifiedName.IsNull(nodeToRead.DataEncoding)) + { + error = EncodeableObject.ApplyDataEncoding(Server.MessageContext, nodeToRead.DataEncoding, ref defaultValue); + + if (ServiceResult.IsBad(error)) + { + value.Value = null; + errors[ii] = error; + continue; + } + } + + value.Value = defaultValue; + + // don't replace timestamp if it was set in the NodeSource + if (value.SourceTimestamp == DateTime.MinValue) + { + value.SourceTimestamp = DateTime.UtcNow; + } + } + } + } + + } + + /// + public void HistoryRead( + OperationContext context, + HistoryReadDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + IList nodesToRead, + IList results, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (details == null) throw new ArgumentNullException(nameof(details)); + if (nodesToRead == null) throw new ArgumentNullException(nameof(nodesToRead)); + if (results == null) throw new ArgumentNullException(nameof(results)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + ReadRawModifiedDetails readRawModifiedDetails = details as ReadRawModifiedDetails; + ReadAtTimeDetails readAtTimeDetails = details as ReadAtTimeDetails; + ReadProcessedDetails readProcessedDetails = details as ReadProcessedDetails; + ReadEventDetails readEventDetails = details as ReadEventDetails; + + lock (m_lock) + { + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + HistoryReadValueId nodeToRead = nodesToRead[ii]; + + // skip items that have already been processed. + if (nodeToRead.Processed) + { + continue; + } + + // look up the node. + ILocalNode node = GetLocalNode(nodeToRead.NodeId) as ILocalNode; + + if (node == null) + { + continue; + } + + // owned by this node manager. + nodeToRead.Processed = true; + + errors[ii] = StatusCodes.BadNotReadable; + } + + } + + } + + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public void Write( + OperationContext context, + IList nodesToWrite, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (nodesToWrite == null) throw new ArgumentNullException(nameof(nodesToWrite)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < nodesToWrite.Count; ii++) + { + WriteValue nodeToWrite = nodesToWrite[ii]; + + // skip items that have already been processed. + if (nodeToWrite.Processed) + { + continue; + } + + // look up the node. + ILocalNode node = GetLocalNode(nodeToWrite.NodeId) as ILocalNode; + + if (node == null) + { + continue; + } + + // owned by this node manager. + nodeToWrite.Processed = true; + + if (!node.SupportsAttribute(nodeToWrite.AttributeId)) + { + errors[ii] = StatusCodes.BadAttributeIdInvalid; + continue; + } + + // fetch the node metadata. + NodeMetadata metadata = GetNodeMetadata(context, node, BrowseResultMask.All); + + // check access. + bool writeable = true; + ServiceResult error = null; + + // determine access rights. + switch (nodeToWrite.AttributeId) + { + case Attributes.NodeId: + case Attributes.NodeClass: + case Attributes.AccessLevel: + case Attributes.UserAccessLevel: + case Attributes.Executable: + case Attributes.UserExecutable: + case Attributes.EventNotifier: + { + writeable = false; + break; + } + + case Attributes.Value: + { + writeable = ((metadata.AccessLevel & AccessLevels.CurrentWrite)!= 0); + break; + } + + default: + { + writeable = (metadata.WriteMask & Attributes.GetMask(nodeToWrite.AttributeId)) != 0; + break; + } + } + + // error if not writeable. + if (!writeable) + { + errors[ii] = StatusCodes.BadNotWritable; + continue; + } + + // determine expected datatype and value rank. + NodeId expectedDatatypeId = metadata.DataType; + int expectedValueRank = metadata.ValueRank; + + if (nodeToWrite.AttributeId != Attributes.Value) + { + expectedDatatypeId = Attributes.GetDataTypeId(nodeToWrite.AttributeId); + + DataValue value = nodeToWrite.Value; + + if (value.StatusCode != StatusCodes.Good || value.ServerTimestamp != DateTime.MinValue || value.SourceTimestamp != DateTime.MinValue) + { + errors[ii] = StatusCodes.BadWriteNotSupported; + continue; + } + + expectedValueRank = ValueRanks.Scalar; + + if (nodeToWrite.AttributeId == Attributes.ArrayDimensions) + { + expectedValueRank = ValueRanks.OneDimension; + } + } + + // check whether value being written is an instance of the expected data type. + object valueToWrite = nodeToWrite.Value.Value; + + TypeInfo typeInfo = TypeInfo.IsInstanceOfDataType( + valueToWrite, + expectedDatatypeId, + expectedValueRank, + m_server.NamespaceUris, + m_server.TypeTree); + + if (typeInfo == null) + { + errors[ii] = StatusCodes.BadTypeMismatch; + continue; + } + + // check index range. + if (nodeToWrite.ParsedIndexRange.Count > 0) + { + // check index range for scalars. + if (typeInfo.ValueRank < 0) + { + errors[ii] = StatusCodes.BadIndexRangeInvalid; + continue; + } + + // check index range for arrays. + else + { + Array array = (Array)valueToWrite; + + if (nodeToWrite.ParsedIndexRange.Count != array.Length) + { + errors[ii] = StatusCodes.BadIndexRangeInvalid; + continue; + } + } + } + + // write the default value. + error = node.Write(nodeToWrite.AttributeId, nodeToWrite.Value); + + if (ServiceResult.IsBad(error)) + { + errors[ii] = error; + continue; + } + } + } + } + + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public void HistoryUpdate( + OperationContext context, + Type detailsType, + IList nodesToUpdate, + IList results, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (nodesToUpdate == null) throw new ArgumentNullException(nameof(nodesToUpdate)); + if (results == null) throw new ArgumentNullException(nameof(results)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < nodesToUpdate.Count; ii++) + { + HistoryUpdateDetails nodeToUpdate = nodesToUpdate[ii]; + + // skip items that have already been processed. + if (nodeToUpdate.Processed) + { + continue; + } + + // look up the node. + ILocalNode node = GetLocalNode(nodeToUpdate.NodeId) as ILocalNode; + + if (node == null) + { + continue; + } + + // owned by this node manager. + nodeToUpdate.Processed = true; + + errors[ii] = StatusCodes.BadNotWritable; + } + } + + } + + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public void Call( + OperationContext context, + IList methodsToCall, + IList results, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (methodsToCall == null) throw new ArgumentNullException(nameof(methodsToCall)); + if (results == null) throw new ArgumentNullException(nameof(results)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < methodsToCall.Count; ii++) + { + CallMethodRequest methodToCall = methodsToCall[ii]; + + // skip items that have already been processed. + if (methodToCall.Processed) + { + continue; + } + + // look up the node. + ILocalNode node = GetLocalNode(methodToCall.ObjectId) as ILocalNode; + + if (node == null) + { + continue; + } + + methodToCall.Processed = true; + + // look up the method. + ILocalNode method = GetLocalNode(methodToCall.MethodId) as ILocalNode; + + if (method == null) + { + errors[ii] = ServiceResult.Create(StatusCodes.BadMethodInvalid, "Method is not in the address space."); + continue; + } + + // check that the method is defined for the object. + if (!node.References.Exists(ReferenceTypeIds.HasComponent, false, methodToCall.MethodId, true, m_server.TypeTree)) + { + errors[ii] = ServiceResult.Create(StatusCodes.BadMethodInvalid, "Method is not a component of the Object."); + continue; + } + + errors[ii] = StatusCodes.BadNotImplemented; + } + } + + } + + /// + public ServiceResult SubscribeToEvents( + OperationContext context, + object sourceId, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (sourceId == null) throw new ArgumentNullException(nameof(sourceId)); + if (monitoredItem == null) throw new ArgumentNullException(nameof(monitoredItem)); + + lock (m_lock) + { + // validate the node. + NodeMetadata metadata = GetNodeMetadata(context, sourceId, BrowseResultMask.NodeClass); + + if (metadata == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + // validate the node class. + if (((metadata.NodeClass & NodeClass.Object | NodeClass.View)) == 0) + { + return StatusCodes.BadNotSupported; + } + + // check that it supports events. + if ((metadata.EventNotifier & EventNotifiers.SubscribeToEvents) == 0) + { + return StatusCodes.BadNotSupported; + } + + return ServiceResult.Good; + } + } + + /// + public ServiceResult SubscribeToAllEvents( + OperationContext context, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (monitoredItem == null) throw new ArgumentNullException(nameof(monitoredItem)); + + return ServiceResult.Good; + } + + /// + public ServiceResult ConditionRefresh( + OperationContext context, + IList monitoredItems) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + return ServiceResult.Good; + } + + /// + /// Creates a set of monitored items. + /// + public void CreateMonitoredItems( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + IList itemsToCreate, + IList errors, + IList filterErrors, + IList monitoredItems, + ref long globalIdCounter) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToCreate == null) throw new ArgumentNullException(nameof(itemsToCreate)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + + lock (m_lock) + { + for (int ii = 0; ii < errors.Count; ii++) + { + MonitoredItemCreateRequest itemToCreate = itemsToCreate[ii]; + + // skip items that have already been processed. + if (itemToCreate.Processed) + { + continue; + } + + // look up the node. + ILocalNode node = this.GetLocalNode(itemToCreate.ItemToMonitor.NodeId) as ILocalNode; + + if (node == null) + { + continue; + } + + // owned by this node manager. + itemToCreate.Processed = true; + + if (!node.SupportsAttribute(itemToCreate.ItemToMonitor.AttributeId)) + { + errors[ii] = StatusCodes.BadAttributeIdInvalid; + continue; + } + + // fetch the metadata for the node. + NodeMetadata metadata = GetNodeMetadata(context, node, BrowseResultMask.All); + + if (itemToCreate.ItemToMonitor.AttributeId == Attributes.Value) + { + if ((metadata.AccessLevel & AccessLevels.CurrentRead) == 0) + { + errors[ii] = StatusCodes.BadNotReadable; + continue; + } + } + + // check value rank against index range. + if (itemToCreate.ItemToMonitor.ParsedIndexRange != NumericRange.Empty) + { + int valueRank = metadata.ValueRank; + + if (itemToCreate.ItemToMonitor.AttributeId != Attributes.Value) + { + valueRank = Attributes.GetValueRank(itemToCreate.ItemToMonitor.AttributeId); + } + + if (valueRank == ValueRanks.Scalar) + { + errors[ii] = StatusCodes.BadIndexRangeInvalid; + continue; + } + } + + bool rangeRequired = false; + + // validate the filter against the node/attribute being monitored. + errors[ii] = ValidateFilter( + metadata, + itemToCreate.ItemToMonitor.AttributeId, + itemToCreate.RequestedParameters.Filter, + out rangeRequired); + + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + + // lookup EU range if required. + Range range = null; + + if (rangeRequired) + { + errors[ii] = ReadEURange(context, node, out range); + + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + } + + // create a globally unique identifier. + uint monitoredItemId = Utils.IncrementIdentifier(ref globalIdCounter); + + // limit the sampling rate for non-value attributes. + double minimumSamplingInterval = m_defaultMinimumSamplingInterval; + + if (itemToCreate.ItemToMonitor.AttributeId == Attributes.Value) + { + // use the MinimumSamplingInterval attribute to limit the sampling rate for value attributes. + IVariable variableNode = node as IVariable; + + if (variableNode != null) + { + minimumSamplingInterval = variableNode.MinimumSamplingInterval; + + // use the default if the node does not specify one. + if (minimumSamplingInterval < 0) + { + minimumSamplingInterval = m_defaultMinimumSamplingInterval; + } + } + } + + // create monitored item. + MonitoredItem monitoredItem = m_samplingGroupManager.CreateMonitoredItem( + context, + subscriptionId, + publishingInterval, + timestampsToReturn, + monitoredItemId, + node, + itemToCreate, + range, + minimumSamplingInterval); + + // save monitored item. + m_monitoredItems.Add(monitoredItem.Id, monitoredItem); + + // update monitored item list. + monitoredItems[ii] = monitoredItem; + + // read the initial value. + DataValue initialValue = new DataValue(); + + initialValue.ServerTimestamp = DateTime.UtcNow; + initialValue.StatusCode = StatusCodes.BadWaitingForInitialData; + + ServiceResult error = node.Read(context, itemToCreate.ItemToMonitor.AttributeId, initialValue); + + if (ServiceResult.IsBad(error)) + { + initialValue.Value = null; + initialValue.StatusCode = error.StatusCode; + } + + monitoredItem.QueueValue(initialValue, error); + + // errors updating the monitoring groups will be reported in notifications. + errors[ii] = StatusCodes.Good; + } + } + + // update all groups with any new items. + m_samplingGroupManager.ApplyChanges(); + } + + /// + /// Modifies a set of monitored items. + /// + public void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + IList monitoredItems, + IList itemsToModify, + IList errors, + IList filterErrors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + if (itemsToModify == null) throw new ArgumentNullException(nameof(itemsToModify)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < errors.Count; ii++) + { + MonitoredItemModifyRequest itemToModify = itemsToModify[ii]; + + // skip items that have already been processed. + if (itemToModify.Processed || monitoredItems[ii] == null) + { + continue; + } + + // check if the node manager created the item. + if (!Object.ReferenceEquals(this, monitoredItems[ii].NodeManager)) + { + continue; + } + + // owned by this node manager. + itemToModify.Processed = true; + + // validate monitored item. + MonitoredItem monitoredItem = null; + + if (!m_monitoredItems.TryGetValue(monitoredItems[ii].Id, out monitoredItem)) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + continue; + } + + if (!Object.ReferenceEquals(monitoredItem, monitoredItems[ii])) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + continue; + } + + // find the node being monitored. + ILocalNode node = monitoredItem.ManagerHandle as ILocalNode; + + if (node == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + continue; + } + + // fetch the metadata for the node. + NodeMetadata metadata = GetNodeMetadata(context, monitoredItem.ManagerHandle, BrowseResultMask.All); + + bool rangeRequired = false; + + // validate the filter against the node/attribute being monitored. + errors[ii] = ValidateFilter( + metadata, + monitoredItem.AttributeId, + itemToModify.RequestedParameters.Filter, + out rangeRequired); + + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + + // lookup EU range if required. + Range range = null; + + if (rangeRequired) + { + // look up EU range. + errors[ii] = ReadEURange(context, node, out range); + + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + } + + // update sampling. + errors[ii] = m_samplingGroupManager.ModifyMonitoredItem( + context, + timestampsToReturn, + monitoredItem, + itemToModify, + range); + + // state of item did not change if an error returned here. + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + + // item has been modified successfully. + // errors updating the sampling groups will be reported in notifications. + errors[ii] = StatusCodes.Good; + } + } + + // update all sampling groups. + m_samplingGroupManager.ApplyChanges(); + } + + /// + /// Deletes a set of monitored items. + /// + public void DeleteMonitoredItems( + OperationContext context, + IList monitoredItems, + IList processedItems, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < errors.Count; ii++) + { + // skip items that have already been processed. + if (processedItems[ii] || monitoredItems[ii] == null) + { + continue; + } + + // check if the node manager created the item. + if (!Object.ReferenceEquals(this, monitoredItems[ii].NodeManager)) + { + continue; + } + + // owned by this node manager. + processedItems[ii] = true; + + // validate monitored item. + MonitoredItem monitoredItem = null; + + if (!m_monitoredItems.TryGetValue(monitoredItems[ii].Id, out monitoredItem)) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + continue; + } + + if (!Object.ReferenceEquals(monitoredItem, monitoredItems[ii])) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + continue; + } + + // remove item. + m_samplingGroupManager.StopMonitoring(monitoredItem); + + // remove association with the group. + m_monitoredItems.Remove(monitoredItem.Id); + + // delete successful. + errors[ii] = StatusCodes.Good; + } + } + + // remove all items from groups. + m_samplingGroupManager.ApplyChanges(); + } + + /// + /// Changes the monitoring mode for a set of monitored items. + /// + public void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + IList monitoredItems, + IList processedItems, + IList errors) + { + + if (context == null) throw new ArgumentNullException(nameof(context)); + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + lock (m_lock) + { + for (int ii = 0; ii < errors.Count; ii++) + { + // skip items that have already been processed. + if (processedItems[ii] || monitoredItems[ii] == null) + { + continue; + } + + // check if the node manager created the item. + if (!Object.ReferenceEquals(this, monitoredItems[ii].NodeManager)) + { + continue; + } + + // owned by this node manager. + processedItems[ii] = true; + + // validate monitored item. + MonitoredItem monitoredItem = null; + + if (!m_monitoredItems.TryGetValue(monitoredItems[ii].Id, out monitoredItem)) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + continue; + } + + if (!Object.ReferenceEquals(monitoredItem, monitoredItems[ii])) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + continue; + } + + // update monitoring mode. + MonitoringMode previousMode = monitoredItem.SetMonitoringMode(monitoringMode); + + // need to provide an immediate update after enabling. + if (previousMode == MonitoringMode.Disabled && monitoringMode != MonitoringMode.Disabled) + { + DataValue initialValue = new DataValue(); + + initialValue.ServerTimestamp = DateTime.UtcNow; + initialValue.StatusCode = StatusCodes.BadWaitingForInitialData; + + // read the initial value. + Node node = monitoredItem.ManagerHandle as Node; + + if (node != null) + { + ServiceResult error = node.Read(context, monitoredItem.AttributeId, initialValue); + + if (ServiceResult.IsBad(error)) + { + initialValue.Value = null; + initialValue.StatusCode = error.StatusCode; + } + } + + monitoredItem.QueueValue(initialValue, null); + } + + // modify the item attributes. + m_samplingGroupManager.ModifyMonitoring(context, monitoredItem); + + // item has been modified successfully. + // errors updating the sampling groups will be reported in notifications. + errors[ii] = StatusCodes.Good; + } + } + + // update all sampling groups. + m_samplingGroupManager.ApplyChanges(); + } + #endregion + + #region Static Members + /// + /// Returns true if the node class matches the node class mask. + /// + public static bool CheckNodeClassMask(uint nodeClassMask, NodeClass nodeClass) + { + if (nodeClassMask != 0) + { + return ((uint)nodeClass & nodeClassMask) != 0; + } + + return true; + } + #endregion + + #region Protected Members + /// + /// The server that the node manager belongs to. + /// + protected IServerInternal Server + { + get { return m_server; } + } + #endregion + + #region Browsing/Searching + /// + /// Returns an index for the NamespaceURI (Adds it to the server namespace table if it does not already exist). + /// + /// + /// Returns the server's default index (1) if the namespaceUri is empty or null. + /// + public ushort GetNamespaceIndex(string namespaceUri) + { + int namespaceIndex = 1; + + if (!String.IsNullOrEmpty(namespaceUri)) + { + namespaceIndex = m_server.NamespaceUris.GetIndex(namespaceUri); + + if (namespaceIndex == -1) + { + namespaceIndex = m_server.NamespaceUris.Append(namespaceUri); + } + } + + return (ushort)namespaceIndex; + } + + /// + /// Returns all targets of the specified reference. + /// + public NodeIdCollection FindLocalNodes(NodeId sourceId, NodeId referenceTypeId, bool isInverse) + { + if (sourceId == null) throw new ArgumentNullException(nameof(sourceId)); + if (referenceTypeId == null) throw new ArgumentNullException(nameof(referenceTypeId)); + + lock (m_lock) + { + ILocalNode source = GetManagerHandle(sourceId) as ILocalNode; + + if (source == null) + { + return null; + } + + NodeIdCollection targets = new NodeIdCollection(); + + foreach (IReference reference in source.References) + { + if (reference.IsInverse != isInverse || !m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, referenceTypeId)) + { + continue; + } + + ExpandedNodeId targetId = reference.TargetId; + + if (targetId.IsAbsolute) + { + continue; + } + + targets.Add((NodeId)targetId); + } + + return targets; + } + } + + /// + /// Returns the id the first node with the specified browse name if it exists. null otherwise + /// + public NodeId FindTargetId(NodeId sourceId, NodeId referenceTypeId, bool isInverse, QualifiedName browseName) + { + if (sourceId == null) throw new ArgumentNullException(nameof(sourceId)); + if (referenceTypeId == null) throw new ArgumentNullException(nameof(referenceTypeId)); + + lock (m_lock) + { + ILocalNode source = GetManagerHandle(sourceId) as ILocalNode; + + if (source == null) + { + return null; + } + + foreach (ReferenceNode reference in source.References) + { + if (reference.IsInverse != isInverse || !m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, referenceTypeId)) + { + continue; + } + + ExpandedNodeId targetId = reference.TargetId; + + if (targetId.IsAbsolute) + { + continue; + } + + ILocalNode target = GetManagerHandle((NodeId)targetId) as ILocalNode; + + if (target == null) + { + continue; + } + + if (QualifiedName.IsNull(browseName) || target.BrowseName == browseName) + { + return (NodeId)targetId; + } + } + + return null; + } + } + + /// + /// Returns the first target that matches the browse path. + /// + public NodeId Find(NodeId sourceId, string browsePath) + { + IList targets = TranslateBrowsePath(sourceId, browsePath); + + if (targets.Count > 0) + { + return targets[0]; + } + + return null; + } + + /// + /// Returns a list of targets the match the browse path. + /// + public IList TranslateBrowsePath( + OperationContext context, + NodeId sourceId, + string browsePath) + { + return TranslateBrowsePath(context, sourceId, RelativePath.Parse(browsePath, m_server.TypeTree)); + } + + /// + /// Returns a list of targets the match the browse path. + /// + public IList TranslateBrowsePath( + NodeId sourceId, + string browsePath) + { + return TranslateBrowsePath(null, sourceId, RelativePath.Parse(browsePath, m_server.TypeTree)); + } + + /// + /// Returns a list of targets the match the browse path. + /// + public IList TranslateBrowsePath( + NodeId sourceId, + RelativePath relativePath) + { + return TranslateBrowsePath(null, sourceId, relativePath); + } + + /// + /// Returns a list of targets the match the browse path. + /// + public IList TranslateBrowsePath( + OperationContext context, + NodeId sourceId, + RelativePath relativePath) + { + List targets = new List(); + + if (relativePath == null || relativePath.Elements.Count == 0) + { + targets.Add(sourceId); + return targets; + } + + // look up source in this node manager. + ILocalNode source = null; + + lock (m_lock) + { + source = GetLocalNode(sourceId) as ILocalNode; + + if (source == null) + { + return targets; + } + } + + // return the set of matching targets. + return targets; + } + #endregion + + #region Registering Data/Event Sources + /// + /// Registers a source for a node. + /// + /// + /// The source could be one or more of IDataSource, IEventSource, ICallable, IHistorian or IViewManager + /// + public void RegisterSource(NodeId nodeId, object source, object handle, bool isEventSource) + { + if (nodeId == null) throw new ArgumentNullException(nameof(nodeId)); + if (source == null) throw new ArgumentNullException(nameof(source)); + } + + /// + /// Called when the source is no longer used. + /// + /// + /// When a source disappears it must either delete all of its nodes from the address space + /// or unregister itself their source by calling RegisterSource with source == null. + /// After doing that the source must call this method. + /// + public void UnregisterSource(object source) + { + } + #endregion + + #region Adding/Removing Nodes + + #region Apply Modelling Rules + /// + /// Applys the modelling rules to any existing instance. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public void ApplyModellingRules( + ILocalNode instance, + ILocalNode typeDefinition, + ILocalNode templateDeclaration, + ushort namespaceIndex) + { + if (instance == null) throw new ArgumentNullException(nameof(instance)); + if (typeDefinition == null) throw new ArgumentNullException(nameof(typeDefinition)); + + // check existing type definition. + UpdateTypeDefinition(instance, typeDefinition.NodeId); + + // create list of declarations for the type definition (recursively collects definitions from supertypes). + List declarations = new List(); + BuildDeclarationList(typeDefinition, declarations); + + // add instance declaration if provided. + if (templateDeclaration != null) + { + DeclarationNode declaration = new DeclarationNode(); + + declaration.Node = templateDeclaration; + declaration.BrowsePath = String.Empty; + + declarations.Add(declaration); + + BuildDeclarationList(templateDeclaration, declarations); + } + + // build list of instances to create. + List typeDefinitions = new List(); + SortedDictionary instanceDeclarations = new SortedDictionary(); + SortedDictionary possibleTargets = new SortedDictionary(); + + // create instances from declarations. + // subtypes appear in list last so traversing the list backwards find the overridden nodes first. + for (int ii = declarations.Count-1; ii >= 0; ii--) + { + DeclarationNode declaration = declarations[ii]; + + // update type definition list. + if (String.IsNullOrEmpty(declaration.BrowsePath)) + { + typeDefinitions.Add(declaration.Node); + continue; + } + + // skip declaration if instance already exists. + // (i.e. the declaration was overridden). + if (instanceDeclarations.ContainsKey(declaration.BrowsePath)) + { + continue; + } + + // update instance declaration list. + instanceDeclarations[declaration.BrowsePath] = declaration.Node; + + // save the node as a possible target of references. + possibleTargets[declaration.Node.NodeId] = declaration.Node; + } + + // build list of instances that already exist. + SortedDictionary existingInstances = new SortedDictionary(); + BuildInstanceList(instance, String.Empty, existingInstances); + + // maps the instance declaration onto an instance node. + Dictionary instancesToCreate = new Dictionary(); + + // apply modelling rules to instance declarations. + foreach (KeyValuePair current in instanceDeclarations) + { + string browsePath = current.Key; + ILocalNode instanceDeclaration = current.Value; + + // check if the same instance has multiple browse paths to it. + ILocalNode newInstance = null; + + if (instancesToCreate.TryGetValue(instanceDeclaration.NodeId, out newInstance)) + { + continue; + } + + // check for an existing instance. + if (existingInstances.TryGetValue(browsePath, out newInstance)) + { + continue; + } + + // apply modelling rule to determine whether to create a new instance. + NodeId modellingRule = instanceDeclaration.ModellingRule; + + // always create a new instance if one does not already exist. + if (modellingRule == Objects.ModellingRule_Mandatory) + { + if (newInstance == null) + { + newInstance = instanceDeclaration.CreateCopy(CreateUniqueNodeId()); + AddNode(newInstance); + } + } + + // ignore optional instances unless one has been specified in the existing tree. + else if (modellingRule == Objects.ModellingRule_Optional) + { + if (newInstance == null) + { + continue; + } + } + + // ignore any unknown modelling rules. + else + { + continue; + } + + // save the mapping between the instance declaration and the new instance. + instancesToCreate[instanceDeclaration.NodeId] = newInstance; + } + + // add references from type definitions to top level. + foreach (ILocalNode type in typeDefinitions) + { + foreach (IReference reference in type.References) + { + // ignore external references from type. + if (reference.TargetId.IsAbsolute) + { + continue; + } + + // ignore subtype references. + if (m_nodes.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.HasSubtype)) + { + continue; + } + + // ignore targets that are not in the instance tree. + ILocalNode target = null; + + if (!instancesToCreate.TryGetValue((NodeId)reference.TargetId, out target)) + { + continue; + } + + // add forward and backward reference. + AddReference(instance, reference.ReferenceTypeId, reference.IsInverse, target, true); + } + } + + // add references between instance declarations. + foreach (ILocalNode instanceDeclaration in instanceDeclarations.Values) + { + // find the source for the references. + ILocalNode source = null; + + if (!instancesToCreate.TryGetValue(instanceDeclaration.NodeId, out source)) + { + continue; + } + + // check if the source is a shared node. + bool sharedNode = Object.ReferenceEquals(instanceDeclaration, source); + + foreach (IReference reference in instanceDeclaration.References) + { + // add external reference. + if (reference.TargetId.IsAbsolute) + { + if (!sharedNode) + { + AddReference(source, reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + } + + continue; + } + + // check for modelling rule. + if (reference.ReferenceTypeId == ReferenceTypeIds.HasModellingRule) + { + if (!source.References.Exists(ReferenceTypeIds.HasModellingRule, false, reference.TargetId, false, null)) + { + AddReference(source, reference.ReferenceTypeId, false, reference.TargetId); + } + + continue; + } + + // check for type definition. + if (reference.ReferenceTypeId == ReferenceTypeIds.HasTypeDefinition) + { + if (!sharedNode) + { + UpdateTypeDefinition(source, instanceDeclaration.TypeDefinitionId); + } + + continue; + } + + // add targets that are not in the instance tree. + ILocalNode target = null; + + if (!instancesToCreate.TryGetValue((NodeId)reference.TargetId, out target)) + { + // don't update shared nodes because the reference should already exist. + if (sharedNode) + { + continue; + } + + // top level references to the type definition node were already added. + if (reference.TargetId == typeDefinition.NodeId) + { + continue; + } + + // see if a reference is allowed. + if (!IsExternalReferenceAllowed(reference.ReferenceTypeId)) + { + continue; + } + + // add one way reference. + source.References.Add(reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + continue; + } + + // add forward and backward reference. + AddReference(source, reference.ReferenceTypeId, reference.IsInverse, target, true); + } + } + } + + /// + /// Returns true if a one-way reference to external nodes is permitted. + /// + private bool IsExternalReferenceAllowed(NodeId referenceTypeId) + { + // always exclude hierarchial references. + if (m_nodes.TypeTree.IsTypeOf(referenceTypeId, ReferenceTypeIds.HierarchicalReferences)) + { + return false; + } + + // allow one way reference to event. + if (m_nodes.TypeTree.IsTypeOf(referenceTypeId, ReferenceTypes.GeneratesEvent)) + { + return true; + } + + // all other references not permitted. + return false; + } + + /// + /// Updates the type definition for a node. + /// + private void UpdateTypeDefinition(ILocalNode instance, ExpandedNodeId typeDefinitionId) + { + // check existing type definition. + ExpandedNodeId existingTypeId = instance.TypeDefinitionId; + + if (existingTypeId == typeDefinitionId) + { + return; + } + + if (!NodeId.IsNull(existingTypeId)) + { + if (m_nodes.TypeTree.IsTypeOf(existingTypeId, typeDefinitionId)) + { + throw ServiceResultException.Create( + StatusCodes.BadTypeDefinitionInvalid, + "Type definition {0} is not a subtype of the existing type definition {1}.", + existingTypeId, + typeDefinitionId); + } + + DeleteReference(instance, ReferenceTypeIds.HasTypeDefinition, false, existingTypeId, false); + } + + AddReference(instance, ReferenceTypeIds.HasTypeDefinition, false, typeDefinitionId); + } + + /// + /// A node in the type system that is used to instantiate objects or variables. + /// + private class DeclarationNode + { + public ILocalNode Node; + public string BrowsePath; + } + + /// + /// Builds the list of declaration nodes for a type definition. + /// + private void BuildDeclarationList(ILocalNode typeDefinition, List declarations) + { + if (typeDefinition == null) throw new ArgumentNullException(nameof(typeDefinition)); + if (declarations == null) throw new ArgumentNullException(nameof(declarations)); + + // guard against loops (i.e. common grandparents). + for (int ii = 0; ii < declarations.Count; ii++) + { + if (Object.ReferenceEquals(declarations[ii].Node, typeDefinition)) + { + return; + } + } + + // create the root declaration for the type. + DeclarationNode declaration = new DeclarationNode(); + + declaration.Node = typeDefinition; + declaration.BrowsePath = String.Empty; + + declarations.Add(declaration); + + // follow references to supertypes first. + foreach (IReference reference in typeDefinition.References.Find(ReferenceTypeIds.HasSubtype, true, false, null)) + { + ILocalNode supertype = GetLocalNode(reference.TargetId) as ILocalNode; + + if (supertype == null) + { + continue; + } + + BuildDeclarationList(supertype, declarations); + } + + // add children of type. + BuildDeclarationList(declaration, declarations); + } + + /// + /// Builds a list of declarations from the nodes aggregated by a parent. + /// + private void BuildDeclarationList(DeclarationNode parent, List declarations) + { + if (parent == null) throw new ArgumentNullException(nameof(parent)); + if (declarations == null) throw new ArgumentNullException(nameof(declarations)); + + // get list of children. + IList references = parent.Node.References.Find(ReferenceTypeIds.HierarchicalReferences, false, true, m_nodes.TypeTree); + + foreach (IReference reference in references) + { + // do not follow sub-type references. + if (m_nodes.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.HasSubtype)) + { + continue; + } + + // find child (ignore children that are not in the node table). + ILocalNode child = GetLocalNode(reference.TargetId) as ILocalNode; + + if (child == null) + { + continue; + } + + // create the declartion node. + DeclarationNode declaration = new DeclarationNode(); + + declaration.Node = child; + declaration.BrowsePath = Utils.Format("{0}.{1}", parent.BrowsePath, child.BrowseName); + + declarations.Add(declaration); + + // recursively include aggregated children. + NodeId modellingRule = child.ModellingRule; + + if (modellingRule == Objects.ModellingRule_Mandatory || modellingRule == Objects.ModellingRule_Optional) + { + BuildDeclarationList(declaration, declarations); + } + } + } + + /// + /// Builds a table of instances indexed by browse path from the nodes aggregated by a parent + /// + private void BuildInstanceList(ILocalNode parent, string browsePath, IDictionary instances) + { + if (parent == null) throw new ArgumentNullException(nameof(parent)); + if (instances == null) throw new ArgumentNullException(nameof(instances)); + + // guard against loops. + if (instances.ContainsKey(browsePath)) + { + return; + } + + // index parent by browse path. + instances[browsePath] = parent; + + // get list of children. + IList references = parent.References.Find(ReferenceTypeIds.HierarchicalReferences, false, true, m_nodes.TypeTree); + + foreach (IReference reference in references) + { + // find child (ignore children that are not in the node table). + ILocalNode child = GetLocalNode(reference.TargetId) as ILocalNode; + + if (child == null) + { + continue; + } + + // recursively include aggregated children. + BuildInstanceList(child, Utils.Format("{0}.{1}", browsePath, child.BrowseName), instances); + } + } + #endregion + + /// + /// Exports a node to a nodeset. + /// + public void ExportNode(NodeId nodeId, NodeSet nodeSet) + { + lock (m_lock) + { + ILocalNode node = GetLocalNode(nodeId) as ILocalNode; + + if (node == null) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdUnknown, "NodeId ({0}) does not exist.", nodeId); + } + + ExportNode(node, nodeSet, (node.NodeClass & (NodeClass.Object | NodeClass.Variable)) != 0); + } + } + + /// + /// Exports a node to a nodeset. + /// + public void ExportNode(ILocalNode node, NodeSet nodeSet, bool instance) + { + lock (m_lock) + { + // check if the node has already been added. + NodeId exportedId = nodeSet.Export(node.NodeId, m_nodes.NamespaceUris); + + if (nodeSet.Contains(exportedId)) + { + return; + } + + // add to nodeset. + Node nodeToExport = nodeSet.Add(node, m_nodes.NamespaceUris, m_nodes.ServerUris); + + // follow children. + foreach (ReferenceNode reference in node.References) + { + // export all references. + bool export = true; + + // unless it is a subtype reference. + if (m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.HasSubtype)) + { + export = false; + } + + if (export) + { + nodeSet.AddReference(nodeToExport, reference, m_nodes.NamespaceUris, m_nodes.ServerUris); + } + + if (reference.IsInverse || m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.HasSubtype)) + { + nodeSet.AddReference(nodeToExport, reference, m_nodes.NamespaceUris, m_nodes.ServerUris); + } + + if (m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.Aggregates)) + { + if (reference.IsInverse) + { + continue; + } + + ILocalNode child = GetLocalNode(reference.TargetId) as ILocalNode; + + if (child != null) + { + if (instance) + { + NodeId modellingRule = child.ModellingRule; + + if (modellingRule != Objects.ModellingRule_Mandatory) + { + continue; + } + } + + ExportNode(child, nodeSet, instance); + } + } + } + } + } + + #if XXX + /// + /// Changes the type definition for an instance. + /// + public void ChangeTypeDefinition( + NodeId instanceId, + NodeId typeDefinitionId) + { + try + { + m_lock.Enter(); + + // find the instance. + ILocalNode instance = GetLocalNode(instanceId) as ILocalNode; + + if (instance == null) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdUnknown, "NodeId ({0}) does not exist.", instanceId); + } + + // check node class. + if (instance.NodeClass != NodeClass.Object && instance.NodeClass != NodeClass.Variable) + { + throw ServiceResultException.Create(StatusCodes.BadNodeClassInvalid, "Node (NodeClass={0}) cannot have a type definition.", instance.NodeClass); + } + + // get current type definition. + ExpandedNodeId existingTypeId = instance.TypeDefinitionId; + + if (existingTypeId == typeDefinitionId) + { + return; + } + + // can only change to a subtype of the existing type definition. + if (!m_server.TypeTree.IsTypeOf(typeDefinitionId, existingTypeId)) + { + throw ServiceResultException.Create(StatusCodes.BadTypeDefinitionInvalid, "Type definition ({0}) must be a must subtype of the existing type definition ({1}).", typeDefinitionId, existingTypeId); + } + + // find the type definition node. + ILocalNode typeDefinition = GetLocalNode(typeDefinitionId) as ILocalNode; + + if (typeDefinition == null) + { + throw ServiceResultException.Create(StatusCodes.BadTypeDefinitionInvalid, "TypeDefinitionId ({0}) does not exist.", typeDefinitionId); + } + + // apply modelling rules. + NodeFactory factory = new NodeFactory(m_nodes); + IList nodesToAdd = factory.ApplyModellingRules(instance, typeDefinition.NodeId, ref m_lastId, 1); + + // add the nodes. + foreach (Node nodeToAdd in nodesToAdd) + { + AddNode(nodeToAdd); + } + } + finally + { + m_lock.Exit(); + } + } + #endif + + /// + /// Updates the attributes for the node. + /// + private static void UpdateAttributes(ILocalNode node, NodeAttributes attributes) + { + // DisplayName + if (attributes != null && (attributes.SpecifiedAttributes & (uint)NodeAttributesMask.DisplayName) != 0) + { + node.DisplayName = attributes.DisplayName; + + if (node.DisplayName == null) + { + node.DisplayName = new LocalizedText(node.BrowseName.Name); + } + } + else + { + node.DisplayName = new LocalizedText(node.BrowseName.Name); + } + + // Description + if (attributes != null && (attributes.SpecifiedAttributes & (uint)NodeAttributesMask.Description) != 0) + { + node.Description = attributes.Description; + } + + // WriteMask + if (attributes != null && (attributes.SpecifiedAttributes & (uint)NodeAttributesMask.WriteMask) != 0) + { + node.WriteMask = (AttributeWriteMask)attributes.WriteMask; + } + else + { + node.WriteMask = AttributeWriteMask.None; + } + + // WriteMask + if (attributes != null && (attributes.SpecifiedAttributes & (uint)NodeAttributesMask.UserWriteMask) != 0) + { + node.UserWriteMask = (AttributeWriteMask)attributes.UserWriteMask; + } + else + { + node.UserWriteMask = AttributeWriteMask.None; + } + } + + /// + /// Deletes a node from the address sapce. + /// + public void DeleteNode(NodeId nodeId, bool deleteChildren, bool silent) + { + if (nodeId == null) throw new ArgumentNullException(nameof(nodeId)); + + // find the node to delete. + ILocalNode node = GetManagerHandle(nodeId) as ILocalNode; + + if (node == null) + { + if (!silent) + { + throw ServiceResultException.Create(StatusCodes.BadSourceNodeIdInvalid, "Node '{0}' does not exist.", nodeId); + } + + return; + } + + bool instance = (node.NodeClass & (NodeClass.Object | NodeClass.Variable)) != 0; + + Dictionary> referencesToDelete = new Dictionary>(); + + if (silent) + { + try + { + DeleteNode(node, deleteChildren, instance, referencesToDelete); + } + catch (Exception e) + { + Utils.Trace(e, "Error deleting node: {0}", nodeId); + } + } + else + { + DeleteNode(node, deleteChildren, instance, referencesToDelete); + } + + if (referencesToDelete.Count > 0) + { + Task.Run(() => + { + OnDeleteReferences(referencesToDelete); + }); + } + } + + /// + /// Deletes a node from the address sapce. + /// + private void DeleteNode(ILocalNode node, bool deleteChildren, bool instance, Dictionary> referencesToDelete) + { + if (node == null) throw new ArgumentNullException(nameof(node)); + + List nodesToDelete = new List(); + List referencesForNode = new List(); + + lock (m_lock) + { + // remove the node. + m_nodes.Remove(node.NodeId); + + // check need to connect subtypes to the supertype if they are being deleted. + ExpandedNodeId supertypeId = m_server.TypeTree.FindSuperType(node.NodeId); + + if (!NodeId.IsNull(supertypeId)) + { + m_server.TypeTree.Remove(node.NodeId); + } + + // delete sources. + #if LEGACY_NODEMANAGER + DeleteRegisteredSources(node); + #endif + + // remove any references to the node. + foreach (IReference reference in node.References) + { + // ignore remote references. + if (reference.TargetId.IsAbsolute) + { + continue; + } + + // find the target. + ILocalNode target = GetManagerHandle(reference.TargetId) as ILocalNode; + + if (target == null) + { + referencesForNode.Add(reference); + continue; + } + + // delete the backward reference. + target.References.Remove(reference.ReferenceTypeId, !reference.IsInverse, node.NodeId); + + // check for children that need to be deleted. + if (deleteChildren) + { + if (m_server.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.Aggregates) && !reference.IsInverse) + { + nodesToDelete.Add(target); + } + } + } + + if (referencesForNode.Count > 0) + { + referencesToDelete[node.NodeId] = referencesForNode; + } + } + + // delete the child nodes. + foreach (ILocalNode nodeToDelete in nodesToDelete) + { + DeleteNode(nodeToDelete, deleteChildren, instance, referencesToDelete); + } + } + + /// + /// Deletes the external references to a node in a background thread. + /// + private void OnDeleteReferences(object state) + { + Dictionary> referencesToDelete = state as Dictionary>; + + if (state == null) + { + return; + } + + foreach (KeyValuePair> current in referencesToDelete) + { + try + { + m_server.NodeManager.DeleteReferences(current.Key, current.Value); + } + catch (Exception e) + { + Utils.Trace(e, "Error deleting references for node: {0}", current.Key); + } + } + } + + #region Add/Remove Node Support Functions + /// + /// Verifies that the source and the target meet the restrictions imposed by the reference type. + /// + private void ValidateReference( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + NodeClass targetNodeClass) + { + // find reference type. + IReferenceType referenceType = GetLocalNode(referenceTypeId) as IReferenceType; + + if (referenceType == null) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceTypeIdInvalid, "Reference type '{0}' does not exist.", referenceTypeId); + } + + // swap the source and target for inverse references. + NodeClass sourceNodeClass = source.NodeClass; + + if (isInverse) + { + sourceNodeClass = targetNodeClass; + targetNodeClass = source.NodeClass; + } + + // check HasComponent references. + if (m_server.TypeTree.IsTypeOf(referenceTypeId, ReferenceTypeIds.HasComponent)) + { + if ((sourceNodeClass & (NodeClass.Object | NodeClass.Variable | NodeClass.ObjectType | NodeClass.VariableType)) == 0) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "Source node cannot be used with HasComponent references."); + } + + if ((targetNodeClass & (NodeClass.Object | NodeClass.Variable | NodeClass.Method)) == 0) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "Target node cannot be used with HasComponent references."); + } + + if (targetNodeClass == NodeClass.Variable) + { + if ((targetNodeClass & (NodeClass.Variable | NodeClass.VariableType)) == 0) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "A Variable must be a component of an Variable or VariableType."); + } + } + + if (targetNodeClass == NodeClass.Method) + { + if ((sourceNodeClass & (NodeClass.Object | NodeClass.ObjectType)) == 0) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "A Method must be a component of an Object or ObjectType."); + } + } + } + + // check HasProperty references. + if (m_server.TypeTree.IsTypeOf(referenceTypeId, ReferenceTypes.HasProperty)) + { + if (targetNodeClass != NodeClass.Variable) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "Targets of HasProperty references must be Variables."); + } + } + + // check HasSubtype references. + if (m_server.TypeTree.IsTypeOf(referenceTypeId, ReferenceTypeIds.HasSubtype)) + { + if ((sourceNodeClass & (NodeClass.DataType | NodeClass.ReferenceType | NodeClass.ObjectType | NodeClass.VariableType)) == 0) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "Source node cannot be used with HasSubtype references."); + } + + if (targetNodeClass != sourceNodeClass) + { + throw ServiceResultException.Create(StatusCodes.BadReferenceNotAllowed, "The source and target cannot be connected by a HasSubtype reference."); + } + } + + // TBD - check rules for other reference types. + } + #endregion + #endregion + + #region Adding/Removing References + /// + /// Adds a reference between two existing nodes. + /// + public ServiceResult AddReference( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + NodeId targetId, + bool bidirectional) + { + lock (m_lock) + { + // find source. + ILocalNode source = GetManagerHandle(sourceId) as ILocalNode; + + if (source == null) + { + return StatusCodes.BadParentNodeIdInvalid; + } + + // add reference from target to source. + if (bidirectional) + { + // find target. + ILocalNode target = GetManagerHandle(targetId) as ILocalNode; + + if (target == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + // ensure the reference is valid. + ValidateReference(source, referenceTypeId, isInverse, target.NodeClass); + + // add reference from target to source. + AddReferenceToLocalNode(target, referenceTypeId, !isInverse, sourceId, false); + } + + // add reference from source to target. + AddReferenceToLocalNode(source, referenceTypeId, isInverse, targetId, false); + + return null; + } + } + + /// + /// Ensures any changes to built-in nodes are reflected in the diagnostics node manager. + /// + private void AddReferenceToLocalNode( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool isInternal) + { + source.References.Add(referenceTypeId, isInverse, targetId); + + if (!isInternal && source.NodeId.NamespaceIndex == 0) + { + lock (Server.DiagnosticsNodeManager.Lock) + { + NodeState state = Server.DiagnosticsNodeManager.FindPredefinedNode(source.NodeId, null); + + if (state != null) + { + INodeBrowser browser = state.CreateBrowser( + m_server.DefaultSystemContext, + null, + referenceTypeId, + true, + (isInverse) ? BrowseDirection.Inverse : BrowseDirection.Forward, + null, + null, + true); + + bool found = false; + + for (IReference reference = browser.Next(); reference != null; reference = browser.Next()) + { + if (reference.TargetId == targetId) + { + found = true; + break; + } + } + + if (!found) + { + state.AddReference(referenceTypeId, isInverse, targetId); + } + } + } + } + } + + /// + /// Adds a reference between two existing nodes. + /// + public void CreateReference( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + NodeId targetId, + bool bidirectional) + { + lock (m_lock) + { + ServiceResult result = AddReference(sourceId, referenceTypeId, isInverse, targetId, bidirectional); + + if (ServiceResult.IsBad(result)) + { + throw new ServiceResultException(result); + } + } + } + + /// + /// Adds a reference to the address space. + /// + private void AddReference( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + ILocalNode target, + bool bidirectional) + { + AddReferenceToLocalNode(source, referenceTypeId, isInverse, target.NodeId, false); + + if (bidirectional) + { + AddReferenceToLocalNode(target, referenceTypeId, !isInverse, source.NodeId, false); + } + } + + /// + /// Adds a reference to the address space. + /// + private void AddReference( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId) + { + AddReferenceToLocalNode(source, referenceTypeId, isInverse, targetId, false); + } + + /// + /// Deletes a reference. + /// + public ServiceResult DeleteReference( + object sourceHandle, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool deleteBidirectional) + { + if (sourceHandle == null) throw new ArgumentNullException(nameof(sourceHandle)); + if (referenceTypeId == null) throw new ArgumentNullException(nameof(referenceTypeId)); + if (targetId == null) throw new ArgumentNullException(nameof(targetId)); + + lock (m_lock) + { + ILocalNode source = sourceHandle as ILocalNode; + + if (source == null) + { + return StatusCodes.BadSourceNodeIdInvalid; + } + + source.References.Remove(referenceTypeId, isInverse, targetId); + + if (deleteBidirectional) + { + ILocalNode target = GetManagerHandle(targetId) as ILocalNode; + + if (target != null) + { + target.References.Remove(referenceTypeId, !isInverse, source.NodeId); + } + } + + return ServiceResult.Good; + } + } + + /// + /// Deletes a reference. + /// + public void DeleteReference( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool deleteBidirectional) + { + ServiceResult result = DeleteReference( + GetManagerHandle(sourceId) as ILocalNode, + referenceTypeId, + isInverse, + targetId, + deleteBidirectional); + + if (ServiceResult.IsBad(result)) + { + throw new ServiceResultException(result); + } + } + + /// + /// Adds a node to the address space. + /// + private void AddNode(ILocalNode node) + { + m_nodes.Attach(node); + } + #endregion + + /// + /// Returns a node managed by the manager with the specified node id. + /// + public ILocalNode GetLocalNode(ExpandedNodeId nodeId) + { + if (nodeId == null) + { + return null; + } + + // check for absolute declarations of local nodes. + if (nodeId.IsAbsolute) + { + if (nodeId.ServerIndex != 0) + { + return null; + } + + int namespaceIndex = this.Server.NamespaceUris.GetIndex(nodeId.NamespaceUri); + + if (namespaceIndex < 0 || nodeId.NamespaceIndex >= this.Server.NamespaceUris.Count) + { + return null; + } + + return GetLocalNode(new NodeId(nodeId.Identifier, (ushort)namespaceIndex)); + } + + return GetLocalNode((NodeId)nodeId); + } + + /// + /// Returns a node managed by the manager with the specified node id. + /// + public ILocalNode GetLocalNode( + NodeId nodeId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + lock (m_lock) + { + return m_nodes.Find(nodeId, referenceTypeId, isInverse, includeSubtypes, browseName) as ILocalNode; + } + } + + /// + /// Returns a node managed by the manager with the specified node id. + /// + public ILocalNode GetLocalNode(NodeId nodeId) + { + lock (m_lock) + { + return m_nodes.Find(nodeId) as ILocalNode; + } + } + + /// + /// Returns a list of nodes which are targets of the specified references. + /// + public IList GetLocalNodes( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes) + { + lock (m_lock) + { + List targets = new List(); + + ILocalNode source = GetLocalNode(sourceId) as ILocalNode; + + if (source == null) + { + return targets; + } + + foreach (IReference reference in source.References.Find(referenceTypeId, isInverse, true, m_nodes.TypeTree)) + { + ILocalNode target = GetLocalNode(reference.TargetId) as ILocalNode; + + if (target != null) + { + targets.Add(target); + } + } + + return targets; + } + } + + /// + /// Returns a node managed by the manager that has the specified browse name. + /// + public ILocalNode GetTargetNode( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + lock (m_lock) + { + ILocalNode source = GetLocalNode(sourceId) as ILocalNode; + + if (source == null) + { + return null; + } + + return GetTargetNode(source, referenceTypeId, isInverse, includeSubtypes, browseName); + } + } + + /// + /// Returns a node managed by the manager that has the specified browse name. + /// + private ILocalNode GetTargetNode( + ILocalNode source, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + foreach (IReference reference in source.References.Find(referenceTypeId, isInverse, includeSubtypes, m_server.TypeTree)) + { + ILocalNode target = GetLocalNode(reference.TargetId) as ILocalNode; + + if (target == null) + { + continue; + } + + if (QualifiedName.IsNull(browseName) || browseName == target.BrowseName) + { + return target; + } + } + + return null; + } + /// + /// Attaches a node to the address space. + /// + public void AttachNode(ILocalNode node) + { + AttachNode(node, false); + } + + /// + /// Attaches a node to the address space. + /// + private void AttachNode(ILocalNode node, bool isInternal) + { + if (node == null) throw new ArgumentNullException(nameof(node)); + + lock (m_lock) + { + // check if node exists. + if (m_nodes.Exists(node.NodeId)) + { + throw ServiceResultException.Create( + StatusCodes.BadNodeIdExists, + "A node with the same node id already exists: {0}", + node.NodeId); + } + + // ensure reverse references exist. + foreach (IReference reference in node.References) + { + // ignore references that are always one way. + if (reference.ReferenceTypeId == ReferenceTypeIds.HasTypeDefinition || reference.ReferenceTypeId == ReferenceTypeIds.HasModellingRule) + { + continue; + } + + // find target. + ILocalNode target = GetLocalNode(reference.TargetId) as ILocalNode; + + if (target != null) + { + AddReferenceToLocalNode(target, reference.ReferenceTypeId, !reference.IsInverse, node.NodeId, isInternal); + } + } + + // must generate a model change event. + AddNode(node); + } + } + + /// + /// Creates a unique node identifier. + /// + public NodeId CreateUniqueNodeId() + { + return CreateUniqueNodeId(m_dynamicNamespaceIndex); + } + + #region Private Methods + /// + private object GetManagerHandle(ExpandedNodeId nodeId) + { + lock (m_lock) + { + if (nodeId == null || nodeId.IsAbsolute) + { + return null; + } + + return GetLocalNode(nodeId) as ILocalNode; + } + } + + #if LEGACY_CORENODEMANAGER + /// + /// Checks if the operation needs to be handled by an external source. + /// + private static bool CheckSourceHandle(ILocalNode node, Type sourceType, int index, IDictionary sources) + { + // check if a source is defined for the node. + SourceHandle handle = node.Handle as SourceHandle; + + if (handle == null) + { + return false; + } + + // check if the source type is valid. + if (!sourceType.IsInstanceOfType(handle.Source)) + { + return false; + } + + // find list of handles for the source. + List handles = null; + + if (!sources.Contains(handle.Source)) + { + sources[handle.Source] = handles = new List(); + } + else + { + handles = (List)sources[handle.Source]; + } + + // add node to list of values to process by the source. + handles.Add(new RequestHandle(handle.Handle, index)); + + return true; + } + + /// + /// Recursively subscribes to events for the notifiers in the tree. + /// + private void SubscribeToEvents( + OperationContext context, + ILocalNode node, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe) + { + // find handle associated with the node. + IEventSource eventSource = node as IEventSource; + SourceHandle handle = node.Handle as SourceHandle; + + if (handle != null) + { + eventSource = handle.Source as IEventSource; + } + + if (eventSource != null) + { + try + { + eventSource.SubscribeToEvents(context, (handle != null)?handle.Handle:null, subscriptionId, monitoredItem, unsubscribe); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error calling SubscribeToEvents on an EventSource."); + } + } + + // find the child notifiers. + IList references = node.References.Find(ReferenceTypes.HasNotifier, false, true, m_server.TypeTree); + + for (int ii = 0; ii < references.Count; ii++) + { + if (!references[ii].TargetId.IsAbsolute) + { + ILocalNode target = GetManagerHandle(references[ii].TargetId) as ILocalNode; + + if (target == null) + { + continue; + } + + // only object or views can produce events. + if ((target.NodeClass & (NodeClass.Object | NodeClass.View)) == 0) + { + continue; + } + + SubscribeToEvents(context, target, subscriptionId, monitoredItem, unsubscribe); + } + } + } + #endif + + /// + /// Reads the EU Range for a variable. + /// + private ServiceResult ReadEURange(OperationContext context, ILocalNode node, out Range range) + { + range = null; + + IVariable target = GetTargetNode(node, ReferenceTypes.HasProperty, false, true, BrowseNames.EURange) as IVariable; + + if (target == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + range = target.Value as Range; + + if (range == null) + { + return StatusCodes.BadTypeMismatch; + } + + return ServiceResult.Good; + } + + /// + /// Validates a filter for a monitored item. + /// + private ServiceResult ValidateFilter( + NodeMetadata metadata, + uint attributeId, + ExtensionObject filter, + out bool rangeRequired) + { + rangeRequired = false; + + // check filter. + DataChangeFilter datachangeFilter = null; + + if (filter != null) + { + datachangeFilter = filter.Body as DataChangeFilter; + } + + if (datachangeFilter != null) + { + // get the datatype of the node. + NodeId datatypeId = metadata.DataType; + + // check that filter is valid. + ServiceResult error = datachangeFilter.Validate(); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // check datatype of the variable. + if (!m_server.TypeTree.IsTypeOf(datatypeId, DataTypes.Number)) + { + return StatusCodes.BadDeadbandFilterInvalid; + } + + // percent deadbands only allowed for analog data items. + if (datachangeFilter.DeadbandType == (uint)(int)DeadbandType.Percent) + { + ExpandedNodeId typeDefinitionId = metadata.TypeDefinition; + + if (typeDefinitionId == null) + { + return StatusCodes.BadDeadbandFilterInvalid; + } + + // percent deadbands only allowed for analog data items. + if (!m_server.TypeTree.IsTypeOf(typeDefinitionId, VariableTypes.AnalogItemType)) + { + return StatusCodes.BadDeadbandFilterInvalid; + } + + // the EURange property is required to use the filter. + rangeRequired = true; + } + } + + // filter is valid + return ServiceResult.Good; + } + + /// + /// Creates a new unique identifier for a node. + /// + private NodeId CreateUniqueNodeId(ushort namespaceIndex) + { + return new NodeId(Utils.IncrementIdentifier(ref m_lastId), namespaceIndex); + } + #endregion + + #region Private Fields + private IServerInternal m_server; + private object m_lock = new object(); + private NodeTable m_nodes; + private long m_lastId; + private SamplingGroupManager m_samplingGroupManager; + private Dictionary m_monitoredItems; + + #if LEGACY_CORENODEMANAGER + private Dictionary m_eventSources; + #endif + + private double m_defaultMinimumSamplingInterval; + private List m_namespaceUris; + private ushort m_dynamicNamespaceIndex; + #endregion + } + +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/EventManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/EventManager.cs new file mode 100644 index 00000000..fd4d23d5 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/EventManager.cs @@ -0,0 +1,259 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Security.Principal; + +namespace Opc.Ua.Server +{ + /// + /// An object that manages all events raised within the server. + /// + public class EventManager : IDisposable + { + #region Constructors + /// + /// Creates a new instance of a sampling group. + /// + public EventManager(IServerInternal server, uint maxQueueSize) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + + m_server = server; + m_monitoredItems = new Dictionary(); + m_maxEventQueueSize = maxQueueSize; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List monitoredItems = null; + + lock (m_lock) + { + monitoredItems = new List(m_monitoredItems.Values); + m_monitoredItems.Clear(); + } + + foreach (IEventMonitoredItem monitoredItem in monitoredItems) + { + Utils.SilentDispose(monitoredItem); + } + } + } + #endregion + + #region Public Methods + /// + /// Reports an event. + /// + public static void ReportEvent(IFilterTarget e, IList monitoredItems) + { + if (e == null) throw new ArgumentNullException(nameof(e)); + + foreach (IEventMonitoredItem monitoredItem in monitoredItems) + { + monitoredItem.QueueEvent(e); + } + } + + /// + /// Creates a set of monitored items. + /// + [Obsolete("Replaced by variant that includes the publishingInterval")] + public MonitoredItem CreateMonitoredItem( + OperationContext context, + INodeManager nodeManager, + object handle, + uint subscriptionId, + uint monitoredItemId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequest itemToCreate, + EventFilter filter) + { + return CreateMonitoredItem( + context, + nodeManager, + handle, + subscriptionId, + monitoredItemId, + timestampsToReturn, + 0, + itemToCreate, + filter); + } + + /// + /// Creates a set of monitored items. + /// + public MonitoredItem CreateMonitoredItem( + OperationContext context, + INodeManager nodeManager, + object handle, + uint subscriptionId, + uint monitoredItemId, + TimestampsToReturn timestampsToReturn, + double publishingInterval, + MonitoredItemCreateRequest itemToCreate, + EventFilter filter) + { + lock (m_lock) + { + // calculate sampling interval. + double samplingInterval = itemToCreate.RequestedParameters.SamplingInterval; + + if (samplingInterval < 0) + { + samplingInterval = publishingInterval; + } + + // limit the queue size. + uint queueSize = itemToCreate.RequestedParameters.QueueSize; + + if (queueSize > m_maxEventQueueSize) + { + queueSize = m_maxEventQueueSize; + } + + // create the monitored item. + MonitoredItem monitoredItem = new MonitoredItem( + m_server, + nodeManager, + handle, + subscriptionId, + monitoredItemId, + context.Session, + itemToCreate.ItemToMonitor, + context.DiagnosticsMask, + timestampsToReturn, + itemToCreate.MonitoringMode, + itemToCreate.RequestedParameters.ClientHandle, + filter, + filter, + null, + samplingInterval, + queueSize, + itemToCreate.RequestedParameters.DiscardOldest, + MinimumSamplingIntervals.Continuous); + + // save the monitored item. + m_monitoredItems.Add(monitoredItemId, monitoredItem); + + return monitoredItem; + } + } + + /// + /// Modifies a monitored item. + /// + public void ModifyMonitoredItem( + OperationContext context, + IEventMonitoredItem monitoredItem, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequest itemToModify, + EventFilter filter) + { + lock (m_lock) + { + // should never be called with items that it does not own. + if (!m_monitoredItems.ContainsKey(monitoredItem.Id)) + { + return; + } + + // limit the queue size. + uint queueSize = itemToModify.RequestedParameters.QueueSize; + + if (queueSize > m_maxEventQueueSize) + { + queueSize = m_maxEventQueueSize; + } + + // modify the attributes. + monitoredItem.ModifyAttributes( + context.DiagnosticsMask, + timestampsToReturn, + itemToModify.RequestedParameters.ClientHandle, + filter, + filter, + null, + itemToModify.RequestedParameters.SamplingInterval, + queueSize, + itemToModify.RequestedParameters.DiscardOldest); + } + } + + /// + /// Deletes a monitored item. + /// + public void DeleteMonitoredItem(uint monitoredItemId) + { + lock (m_lock) + { + m_monitoredItems.Remove(monitoredItemId); + } + } + + /// + /// Returns the currently active monitored items. + /// + public IList GetMonitoredItems() + { + lock (m_lock) + { + return new List(m_monitoredItems.Values); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private Dictionary m_monitoredItems; + private uint m_maxEventQueueSize; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/INodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/INodeManager.cs new file mode 100644 index 00000000..9d195da2 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/INodeManager.cs @@ -0,0 +1,541 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// An interface to an object that manages a set of nodes in the address space. + /// + public interface INodeManager + { + /// + /// Returns the NamespaceUris for the Nodes belonging to the NodeManager. + /// + /// + /// By default the MasterNodeManager uses the namespaceIndex to determine who owns an Node. + /// + /// Servers that do not wish to partition their address space this way must provide their own + /// implementation of MasterNodeManager.GetManagerHandle(). + /// + /// NodeManagers which depend on a custom partitioning scheme must return a null value. + /// + IEnumerable NamespaceUris { get; } + + /// + /// Creates the address space by loading any configuration information an connecting to an underlying system (if applicable). + /// + /// A table of references that need to be added to other node managers. + /// + /// A node manager owns a set of nodes. These nodes may be known in advance or they may be stored in an + /// external system are retrived on demand. These nodes may have two way references to nodes that are owned + /// by other node managers. In these cases, the node managers only manage one half of those references. The + /// other half of the reference should be returned to the MasterNodeManager. + /// + void CreateAddressSpace(IDictionary> externalReferences); + + /// + /// Deletes the address by releasing all resources and disconnecting from any underlying system. + /// + void DeleteAddressSpace(); + + /// + /// Returns an opaque handle identifying to the node to the node manager. + /// + /// A node handle, null if the node manager does not recognize the node id. + /// + /// The method must not block by querying an underlying system. If the node manager wraps an + /// underlying system then it must check to see if it recognizes the syntax of the node id. + /// The handle in this case may simply be a partially parsed version of the node id. + /// + object GetManagerHandle(NodeId nodeId); + + /// + /// Adds references to the node manager. + /// + /// + /// The node manager checks the dictionary for nodes that it owns and ensures the associated references exist. + /// + void AddReferences(IDictionary> references); + + /// + /// Deletes a reference. + /// + ServiceResult DeleteReference( + object sourceHandle, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool deleteBidirectional); + + /// + /// Returns the metadata associated with the node. + /// + /// + /// Returns null if the node does not exist. + /// + NodeMetadata GetNodeMetadata( + OperationContext context, + object targetHandle, + BrowseResultMask resultMask); + + /// + /// Returns the set of references that meet the filter criteria. + /// + /// The context to used when processing the request. + /// The continuation point that stores the state of the Browse operation. + /// The list of references that meet the filter criteria. + /// + /// NodeManagers will likely have references to other NodeManagers which means they will not be able + /// to apply the NodeClassMask or fill in the attributes for the target Node. In these cases the + /// NodeManager must return a ReferenceDescription with the NodeId and ReferenceTypeId set. The caller will + /// be responsible for filling in the target attributes. + /// The references parameter may already contain references when the method is called. The implementer must + /// include these references when calculating whether a continutation point must be returned. + /// + /// Thrown if the context, continuationPoint or references parameters are null. + /// Thrown if an error occurs during processing. + void Browse( + OperationContext context, + ref ContinuationPoint continuationPoint, + IList references); + + /// + /// Finds the targets of the relative path from the source node. + /// + /// The context to used when processing the request. + /// The handle for the source node. + /// The relative path to follow. + /// The NodeIds for any target at the end of the relative path. + /// The NodeIds for any local target that is in another NodeManager. + /// + /// A null context indicates that the server's internal logic is making the call. + /// The first target in the list must be the target that matches the instance declaration (if applicable). + /// Any local targets that belong to other NodeManagers are returned as unresolvedTargetIds. + /// The caller must check the BrowseName to determine if it matches the relativePath. + /// The implementor must not throw an exception if the source or target nodes do not exist. + /// + /// Thrown if the sourceHandle, relativePath or targetIds parameters are null. + void TranslateBrowsePath( + OperationContext context, + object sourceHandle, + RelativePathElement relativePath, + IList targetIds, + IList unresolvedTargetIds); + + /// + /// Reads the attribute values for a set of nodes. + /// + /// + /// The MasterNodeManager pre-processes the nodesToRead and ensures that: + /// - the AttributeId is a known attribute. + /// - the IndexRange, if specified, is valid. + /// - the DataEncoding and the IndexRange are not specified if the AttributeId is not Value. + /// + /// The MasterNodeManager post-processes the values by: + /// - sets values[ii].StatusCode to the value of errors[ii].Code + /// - creates a instance of DataValue if one does not exist and an errors[ii] is bad. + /// - removes timestamps from the DataValue if the client does not want them. + /// + /// The node manager must ignore ReadValueId with the Processed flag set to true. + /// The node manager must set the Processed flag for any ReadValueId that it processes. + /// + void Read( + OperationContext context, + double maxAge, + IList nodesToRead, + IList values, + IList errors); + + /// + /// Reads the history of a set of items. + /// + void HistoryRead( + OperationContext context, + HistoryReadDetails details, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + IList nodesToRead, + IList results, + IList errors); + + /// + /// Writes a set of values. + /// + /// + /// Each node manager should only process node ids that it recognizes. If it processes a value it + /// must set the Processed flag in the WriteValue structure. + /// + void Write( + OperationContext context, + IList nodesToWrite, + IList errors); + + /// + /// Updates the history for a set of nodes. + /// + void HistoryUpdate( + OperationContext context, + Type detailsType, + IList nodesToUpdate, + IList results, + IList errors); + + /// + /// Calls a method defined on a object. + /// + void Call( + OperationContext context, + IList methodsToCall, + IList results, + IList errors); + + /// + /// Tells the NodeManager to report events from the specified notifier. + /// + /// + /// This method may be called multiple times for the name monitoredItemId if the + /// context for that MonitoredItem changes (i.e. UserIdentity and/or Locales). + /// + ServiceResult SubscribeToEvents( + OperationContext context, + object sourceId, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe); + + /// + /// Tells the NodeManager to report events all events from all sources. + /// + /// + /// This method may be called multiple times for the name monitoredItemId if the + /// context for that MonitoredItem changes (i.e. UserIdentity and/or Locales). + /// + ServiceResult SubscribeToAllEvents( + OperationContext context, + uint subscriptionId, + IEventMonitoredItem monitoredItem, + bool unsubscribe); + + /// + /// Tells the NodeManager to refresh any conditions. + /// + ServiceResult ConditionRefresh( + OperationContext context, + IList monitoredItems); + + /// + /// Creates a set of monitored items. + /// + void CreateMonitoredItems( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + IList itemsToCreate, + IList errors, + IList filterErrors, + IList monitoredItems, + ref long globalIdCounter); + + /// + /// Modifies a set of monitored items. + /// + void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + IList monitoredItems, + IList itemsToModify, + IList errors, + IList filterErrors); + + /// + /// Deletes a set of monitored items. + /// + void DeleteMonitoredItems( + OperationContext context, + IList monitoredItems, + IList processedItems, + IList errors); + + /// + /// Changes the monitoring mode for a set of monitored items. + /// + void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + IList monitoredItems, + IList processedItems, + IList errors); + } + + /// + /// An interface to an object that manages a set of nodes in the address space. + /// + public interface INodeManager2 : INodeManager + { + /// + /// Called when the session is closed. + /// + void SessionClosing(OperationContext context, NodeId sessionId, bool deleteSubscriptions); + + /// + /// Returns true if the node is in the view. + /// + bool IsNodeInView(OperationContext context, NodeId viewId, object nodeHandle); + } + + /// + /// Stores metadata required to process requests related to a node. + /// + public class NodeMetadata + { + #region Constructors + /// + /// Initializes the object with its handle and NodeId. + /// + public NodeMetadata(object handle, NodeId nodeId) + { + m_handle = handle; + m_nodeId = nodeId; + } + #endregion + + #region Public Properties + /// + /// The handle assigned by the NodeManager that owns the Node. + /// + public object Handle + { + get { return m_handle; } + } + + /// + /// The canonical NodeId for the Node. + /// + public NodeId NodeId + { + get { return m_nodeId; } + } + + /// + /// The NodeClass for the Node. + /// + public NodeClass NodeClass + { + get { return m_nodeClass; } + set { m_nodeClass = value; } + } + + /// + /// The BrowseName for the Node. + /// + public QualifiedName BrowseName + { + get { return m_browseName; } + set { m_browseName = value; } + } + + /// + /// The DisplayName for the Node. + /// + public LocalizedText DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + /// + /// The type definition for the Node (if one exists). + /// + public ExpandedNodeId TypeDefinition + { + get { return m_typeDefinition; } + set { m_typeDefinition = value; } + } + + /// + /// The modelling for the Node (if one exists). + /// + public NodeId ModellingRule + { + get { return m_modellingRule; } + set { m_modellingRule = value; } + } + + /// + /// Specifies which attributes are writeable. + /// + public AttributeWriteMask WriteMask + { + get { return m_writeMask; } + set { m_writeMask = value; } + } + + /// + /// Whether the Node can be used with event subscriptions or for historial event queries. + /// + public byte EventNotifier + { + get { return m_eventNotifier; } + set { m_eventNotifier = value; } + } + + /// + /// Whether the Node can be use to read or write current or historical values. + /// + public byte AccessLevel + { + get { return m_accessLevel; } + set { m_accessLevel = value; } + } + + /// + /// Whether the Node is a Method that can be executed. + /// + public bool Executable + { + get { return m_executable; } + set { m_executable = value; } + } + + /// + /// The DataType of the Value attribute for Variable or VariableType nodes. + /// + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + /// The ValueRank for the Value attribute for Variable or VariableType nodes. + /// + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// The ArrayDimensions for the Value attribute for Variable or VariableType nodes. + /// + public IList ArrayDimensions + { + get { return m_arrayDimensions; } + set { m_arrayDimensions = value; } + } + + /// + /// Specifies the AccessRestrictions that apply to a Node. + /// + public AccessRestrictionType AccessRestrictions + { + get { return m_accessRestrictions; } + set { m_accessRestrictions = value; } + } + + /// + /// The value reflects the DefaultAccessRestrictions Property of the NamespaceMetadata Object for the Namespace + /// to which the Node belongs. + /// + public AccessRestrictionType DefaultAccessRestrictions + { + get { return m_defaultAccessRestrictions; } + set { m_defaultAccessRestrictions = value; } + } + + /// + /// The RolePermissions for the Node. + /// Specifies the Permissions that apply to a Node for all Roles which have access to the Node. + /// + public RolePermissionTypeCollection RolePermissions + { + get { return m_rolePermissions; } + set { m_rolePermissions = value; } + } + + /// + /// The DefaultRolePermissions of the Node's name-space meta-data + /// The value reflects the DefaultRolePermissions Property from the NamespaceMetadata Object associated with the Node. + /// + public RolePermissionTypeCollection DefaultRolePermissions + { + get { return m_defaultRolePermissions; } + set { m_defaultRolePermissions = value; } + } + + /// + /// The UserRolePermissions of the Node. + /// Specifies the Permissions that apply to a Node for all Roles granted to current Session. + /// + public RolePermissionTypeCollection UserRolePermissions + { + get { return m_userRolePermissions; } + set { m_userRolePermissions = value; } + } + + /// + /// The DefaultUserRolePermissions of the Node. + /// The value reflects the DefaultUserRolePermissions Property from the NamespaceMetadata Object associated with the Node. + /// + public RolePermissionTypeCollection DefaultUserRolePermissions + { + get { return m_defaultUserRolePermissions; } + set { m_defaultUserRolePermissions = value; } + } + #endregion + + #region Private Fields + private object m_handle; + private NodeId m_nodeId; + private NodeClass m_nodeClass; + private QualifiedName m_browseName; + private LocalizedText m_displayName; + private ExpandedNodeId m_typeDefinition; + private NodeId m_modellingRule; + private AttributeWriteMask m_writeMask; + private byte m_eventNotifier; + private byte m_accessLevel; + private bool m_executable; + private NodeId m_dataType; + private int m_valueRank; + private IList m_arrayDimensions; + private AccessRestrictionType m_accessRestrictions; + private AccessRestrictionType m_defaultAccessRestrictions; + private RolePermissionTypeCollection m_rolePermissions; + private RolePermissionTypeCollection m_defaultRolePermissions; + private RolePermissionTypeCollection m_userRolePermissions; + private RolePermissionTypeCollection m_defaultUserRolePermissions; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/IViewManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/IViewManager.cs new file mode 100644 index 00000000..9c2250f2 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/IViewManager.cs @@ -0,0 +1,54 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; +using System.Collections.Generic; + +namespace Opc.Ua.Server +{ +#if LEGACY_CORENODEMANAGER + /// + /// An interface to an object manages one or more views. + /// + [Obsolete("The IViewManager interface is obsolete and is not supported. See Opc.Ua.Server.CustomNodeManager for a replacement.")] + public interface IViewManager + { + /// + /// Determines whether a node is in a view. + /// + bool IsNodeInView(ViewDescription description, NodeId nodeId); + + /// + /// Determines whether a reference is in a view. + /// + bool IsReferenceInView(ViewDescription description, ReferenceDescription reference); + } +#endif +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs new file mode 100644 index 00000000..480c0bb6 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs @@ -0,0 +1,3193 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Diagnostics; + +namespace Opc.Ua.Server +{ + /// + /// The master node manager for the server. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public class MasterNodeManager : IDisposable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public MasterNodeManager( + IServerInternal server, + ApplicationConfiguration configuration, + string dynamicNamespaceUri, + params INodeManager[] additionalManagers) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + m_server = server; + m_nodeManagers = new List(); + m_maxContinuationPointsPerBrowse = (uint)configuration.ServerConfiguration.MaxBrowseContinuationPoints; + + // ensure the dynamic namespace uris. + int dynamicNamespaceIndex = 1; + + if (!String.IsNullOrEmpty(dynamicNamespaceUri)) + { + dynamicNamespaceIndex = server.NamespaceUris.GetIndex(dynamicNamespaceUri); + + if (dynamicNamespaceIndex == -1) + { + dynamicNamespaceIndex = server.NamespaceUris.Append(dynamicNamespaceUri); + } + } + + // need to build a table of NamespaceIndexes and their NodeManagers. + List registeredManagers = null; + Dictionary> namespaceManagers = new Dictionary>(); + + namespaceManagers[0] = registeredManagers = new List(); + namespaceManagers[1] = registeredManagers = new List(); + + // always add the diagnostics and configuration node manager to the start of the list. + ConfigurationNodeManager configurationAndDiagnosticsManager = new ConfigurationNodeManager(server, configuration); + RegisterNodeManager(configurationAndDiagnosticsManager, registeredManagers, namespaceManagers); + + // add the core node manager second because the diagnostics node manager takes priority. + // always add the core node manager to the second of the list. + m_nodeManagers.Add(new CoreNodeManager(m_server, configuration, (ushort)dynamicNamespaceIndex)); + + // register core node manager for default UA namespace. + namespaceManagers[0].Add(m_nodeManagers[1]); + + // register core node manager for built-in server namespace. + namespaceManagers[1].Add(m_nodeManagers[1]); + + // add the custom NodeManagers provided by the application. + if (additionalManagers != null) + { + foreach (INodeManager nodeManager in additionalManagers) + { + RegisterNodeManager(nodeManager, registeredManagers, namespaceManagers); + } + + // build table from dictionary. + m_namespaceManagers = new INodeManager[m_server.NamespaceUris.Count][]; + + for (int ii = 0; ii < m_namespaceManagers.Length; ii++) + { + if (namespaceManagers.TryGetValue(ii, out registeredManagers)) + { + m_namespaceManagers[ii] = registeredManagers.ToArray(); + } + } + } + } + + /// + /// Registers the node manager with the master node manager. + /// + private void RegisterNodeManager( + INodeManager nodeManager, + List registeredManagers, + Dictionary> namespaceManagers) + { + m_nodeManagers.Add(nodeManager); + + // ensure the NamespaceUris supported by the NodeManager are in the Server's NamespaceTable. + if (nodeManager.NamespaceUris != null) + { + foreach (string namespaceUri in nodeManager.NamespaceUris) + { + // look up the namespace uri. + int index = m_server.NamespaceUris.GetIndex(namespaceUri); + + if (index == -1) + { + index = m_server.NamespaceUris.Append(namespaceUri); + } + + // add manager to list for the namespace. + if (!namespaceManagers.TryGetValue(index, out registeredManagers)) + { + namespaceManagers[index] = registeredManagers = new List(); + } + + registeredManagers.Add(nodeManager); + } + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List nodeManagers = null; + + lock (m_lock) + { + nodeManagers = new List(m_nodeManagers); + m_nodeManagers.Clear(); + } + + foreach (INodeManager nodeManager in nodeManagers) + { + Utils.SilentDispose(nodeManager); + } + } + } + #endregion + + #region Static Methods + /// + /// Adds a reference to the table of external references. + /// + /// + /// This is a convenience function used by custom NodeManagers. + /// + public static void CreateExternalReference( + IDictionary> externalReferences, + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + NodeId targetId) + { + ReferenceNode reference = new ReferenceNode(); + + reference.ReferenceTypeId = referenceTypeId; + reference.IsInverse = isInverse; + reference.TargetId = targetId; + + IList references = null; + + if (!externalReferences.TryGetValue(sourceId, out references)) + { + externalReferences[sourceId] = references = new List(); + } + + references.Add(reference); + } + + /// + /// Determine the required history access permission depending on the HistoryUpdateDetails + /// + /// The HistoryUpdateDetails passed in + /// The corresponding history access permission + protected static PermissionType DetermineHistoryAccessPermission(HistoryUpdateDetails historyUpdateDetails) + { + Type detailsType = historyUpdateDetails.GetType(); + + if (detailsType == typeof(UpdateDataDetails)) + { + UpdateDataDetails updateDataDetails = (UpdateDataDetails)historyUpdateDetails; + return GetHistoryPermissionType(updateDataDetails.PerformInsertReplace); + } + else if (detailsType == typeof(UpdateStructureDataDetails)) + { + UpdateStructureDataDetails updateStructureDataDetails = (UpdateStructureDataDetails)historyUpdateDetails; + return GetHistoryPermissionType(updateStructureDataDetails.PerformInsertReplace); + } + else if (detailsType == typeof(UpdateEventDetails)) + { + UpdateEventDetails updateEventDetails = (UpdateEventDetails)historyUpdateDetails; + return GetHistoryPermissionType(updateEventDetails.PerformInsertReplace); + } + else if (detailsType == typeof(DeleteRawModifiedDetails) || + detailsType == typeof(DeleteAtTimeDetails) || + detailsType == typeof(DeleteEventDetails)) + { + return PermissionType.DeleteHistory; + } + + return PermissionType.ModifyHistory; + } + + /// + /// Determine the History PermissionType depending on PerformUpdateType + /// + /// + /// The corresponding PermissionType + protected static PermissionType GetHistoryPermissionType(PerformUpdateType updateType) + { + switch (updateType) + { + case PerformUpdateType.Insert: + return PermissionType.InsertHistory; + case PerformUpdateType.Update: + return PermissionType.InsertHistory | PermissionType.ModifyHistory; + default: // PerformUpdateType.Replace or PerformUpdateType.Remove + return PermissionType.ModifyHistory; + } + } + #endregion + + #region Public Interface + /// + /// Returns the core node manager. + /// + public CoreNodeManager CoreNodeManager + { + get + { + return m_nodeManagers[1] as CoreNodeManager; + } + } + + /// + /// Returns the diagnostics node manager. + /// + public DiagnosticsNodeManager DiagnosticsNodeManager + { + get + { + return m_nodeManagers[0] as DiagnosticsNodeManager; + } + } + + /// + /// Returns the configuration node manager. + /// + public ConfigurationNodeManager ConfigurationNodeManager + { + get + { + return m_nodeManagers[0] as ConfigurationNodeManager; + } + } + + /// + /// Creates the node managers and start them + /// + public virtual void Startup() + { + lock (m_lock) + { + Utils.Trace( + Utils.TraceMasks.StartStop, + "MasterNodeManager.Startup - NodeManagers={0}", + m_nodeManagers.Count); + + // create the address spaces. + Dictionary> externalReferences = new Dictionary>(); + + for (int ii = 0; ii < m_nodeManagers.Count; ii++) + { + INodeManager nodeManager = m_nodeManagers[ii]; + + try + { + nodeManager.CreateAddressSpace(externalReferences); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error creating address space for NodeManager #{0}.", ii); + } + } + + // update external references. + for (int ii = 0; ii < m_nodeManagers.Count; ii++) + { + INodeManager nodeManager = m_nodeManagers[ii]; + + try + { + nodeManager.AddReferences(externalReferences); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error adding references for NodeManager #{0}.", ii); + } + } + } + } + + /// + /// Signals that a session is closing. + /// + public virtual void SessionClosing(OperationContext context, NodeId sessionId, bool deleteSubscriptions) + { + lock (m_lock) + { + for (int ii = 0; ii < m_nodeManagers.Count; ii++) + { + INodeManager2 nodeManager = m_nodeManagers[ii] as INodeManager2; + + if (nodeManager != null) + { + try + { + nodeManager.SessionClosing(context, sessionId, deleteSubscriptions); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error closing session for NodeManager #{0}.", ii); + } + } + } + } + } + + /// + /// Shuts down the node managers a + /// + public virtual void Shutdown() + { + lock (m_lock) + { + Utils.Trace( + Utils.TraceMasks.StartStop, + "MasterNodeManager.Shutdown - NodeManagers={0}", + m_nodeManagers.Count); + + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.DeleteAddressSpace(); + } + } + } + + /// + /// Registers the node manager as the node manager for Nodes in the specified namespace. + /// + /// The URI of the namespace. + /// The NodeManager which owns node in the namespace. + /// + /// Multiple NodeManagers may register interest in a Namespace. + /// The order in which this method is called determines the precedence if multiple NodeManagers exist. + /// This method adds the namespaceUri to the Server's Namespace table if it does not already exist. + /// + /// This method is thread safe and can be called at anytime. + /// + /// This method does not have to be called for any namespaces that were in the NodeManager's + /// NamespaceUri property when the MasterNodeManager was created. + /// + /// Throw if the namespaceUri or the nodeManager are null. + public void RegisterNamespaceManager(string namespaceUri, INodeManager nodeManager) + { + if (String.IsNullOrEmpty(namespaceUri)) throw new ArgumentNullException(nameof(namespaceUri)); + if (nodeManager == null) throw new ArgumentNullException(nameof(nodeManager)); + + // look up the namespace uri. + int index = m_server.NamespaceUris.GetIndex(namespaceUri); + + if (index < 0) + { + index = m_server.NamespaceUris.Append(namespaceUri); + } + + // allocate a new table (using arrays instead of collections because lookup efficiency is critical). + INodeManager[][] namespaceManagers = new INodeManager[m_server.NamespaceUris.Count][]; + + lock (m_namespaceManagers.SyncRoot) + { + // copy existing values. + for (int ii = 0; ii < m_namespaceManagers.Length; ii++) + { + if (m_namespaceManagers.Length >= ii) + { + namespaceManagers[ii] = m_namespaceManagers[ii]; + } + } + + // allocate a new array for the index being updated. + INodeManager[] registeredManagers = namespaceManagers[index]; + + if (registeredManagers == null) + { + registeredManagers = new INodeManager[1]; + } + else + { + registeredManagers = new INodeManager[registeredManagers.Length + 1]; + Array.Copy(namespaceManagers[index], registeredManagers, namespaceManagers[index].Length); + } + + // add new node manager to the end of the list. + registeredManagers[registeredManagers.Length - 1] = nodeManager; + namespaceManagers[index] = registeredManagers; + + // replace the table. + m_namespaceManagers = namespaceManagers; + } + } + + /// + /// Returns node handle and its node manager. + /// + public virtual object GetManagerHandle(NodeId nodeId, out INodeManager nodeManager) + { + nodeManager = null; + object handle = null; + + // null node ids have no manager. + if (NodeId.IsNull(nodeId)) + { + return null; + } + + // use the namespace index to select the node manager. + int index = nodeId.NamespaceIndex; + + lock (m_namespaceManagers.SyncRoot) + { + // check if node managers are registered - use the core node manager if unknown. + if (index >= m_namespaceManagers.Length || m_namespaceManagers[index] == null) + { + handle = m_nodeManagers[1].GetManagerHandle(nodeId); + + if (handle != null) + { + nodeManager = m_nodeManagers[1]; + return handle; + } + + return null; + } + + // check each of the registered node managers. + INodeManager[] nodeManagers = m_namespaceManagers[index]; + + for (int ii = 0; ii < nodeManagers.Length; ii++) + { + handle = nodeManagers[ii].GetManagerHandle(nodeId); + + if (handle != null) + { + nodeManager = nodeManagers[ii]; + return handle; + } + } + } + + // node not recognized. + return null; + } + + /// + /// Adds the references to the target. + /// + public virtual void AddReferences(NodeId sourceId, IList references) + { + foreach (IReference reference in references) + { + // find source node. + INodeManager nodeManager = null; + object sourceHandle = GetManagerHandle(sourceId, out nodeManager); + + if (sourceHandle == null) + { + continue; + } + + // delete the reference. + + Dictionary> map = new Dictionary>(); + map.Add(sourceId, references); + nodeManager.AddReferences(map); + } + } + + /// + /// Deletes the references to the target. + /// + public virtual void DeleteReferences(NodeId targetId, IList references) + { + foreach (ReferenceNode reference in references) + { + NodeId sourceId = ExpandedNodeId.ToNodeId(reference.TargetId, m_server.NamespaceUris); + + // find source node. + INodeManager nodeManager = null; + object sourceHandle = GetManagerHandle(sourceId, out nodeManager); + + if (sourceHandle == null) + { + continue; + } + + // delete the reference. + nodeManager.DeleteReference(sourceHandle, reference.ReferenceTypeId, !reference.IsInverse, targetId, false); + } + } + + /// + /// Deletes the specified references. + /// + public void RemoveReferences(List referencesToRemove) + { + for (int ii = 0; ii < referencesToRemove.Count; ii++) + { + LocalReference reference = referencesToRemove[ii]; + + // find source node. + INodeManager nodeManager = null; + object sourceHandle = GetManagerHandle(reference.SourceId, out nodeManager); + + if (sourceHandle == null) + { + continue; + } + + // delete the reference. + nodeManager.DeleteReference(sourceHandle, reference.ReferenceTypeId, reference.IsInverse, reference.TargetId, false); + } + } + + #region Register/Unregister Nodes + /// + /// Registers a set of node ids. + /// + public virtual void RegisterNodes( + OperationContext context, + NodeIdCollection nodesToRegister, + out NodeIdCollection registeredNodeIds) + { + if (nodesToRegister == null) throw new ArgumentNullException(nameof(nodesToRegister)); + + // return the node id provided. + registeredNodeIds = new NodeIdCollection(nodesToRegister.Count); + + for (int ii = 0; ii < nodesToRegister.Count; ii++) + { + registeredNodeIds.Add(nodesToRegister[ii]); + } + + Utils.Trace( + (int)Utils.TraceMasks.ServiceDetail, + "MasterNodeManager.RegisterNodes - Count={0}", + nodesToRegister.Count); + + // it is up to the node managers to assign the handles. + /* + List processedNodes = new List(new bool[itemsToDelete.Count]); + + for (int ii = 0; ii < m_nodeManagers.Count; ii++) + { + m_nodeManagers[ii].RegisterNodes( + context, + nodesToRegister, + registeredNodeIds, + processedNodes); + } + */ + } + + /// + /// Unregisters a set of node ids. + /// + public virtual void UnregisterNodes( + OperationContext context, + NodeIdCollection nodesToUnregister) + { + if (nodesToUnregister == null) throw new ArgumentNullException(nameof(nodesToUnregister)); + + Utils.Trace( + (int)Utils.TraceMasks.ServiceDetail, + "MasterNodeManager.UnregisterNodes - Count={0}", + nodesToUnregister.Count); + + // it is up to the node managers to assign the handles. + /* + List processedNodes = new List(new bool[itemsToDelete.Count]); + + for (int ii = 0; ii < m_nodeManagers.Count; ii++) + { + m_nodeManagers[ii].RegisterNodes( + context, + nodesToUnregister, + processedNodes); + } + */ + } + #endregion + + #region TranslateBrowsePathsToNodeIds + /// + /// Translates a start node id plus a relative paths into a node id. + /// + public virtual void TranslateBrowsePathsToNodeIds( + OperationContext context, + BrowsePathCollection browsePaths, + out BrowsePathResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (browsePaths == null) throw new ArgumentNullException(nameof(browsePaths)); + + bool diagnosticsExist = false; + results = new BrowsePathResultCollection(browsePaths.Count); + diagnosticInfos = new DiagnosticInfoCollection(browsePaths.Count); + + for (int ii = 0; ii < browsePaths.Count; ii++) + { + // check if request has timed out or been cancelled. + if (StatusCode.IsBad(context.OperationStatus)) + { + throw new ServiceResultException(context.OperationStatus); + } + + BrowsePath browsePath = browsePaths[ii]; + + BrowsePathResult result = new BrowsePathResult(); + result.StatusCode = StatusCodes.Good; + results.Add(result); + + ServiceResult error = null; + + // need to trap unexpected exceptions to handle bugs in the node managers. + try + { + error = TranslateBrowsePath(context, browsePath, result); + } + catch (Exception e) + { + error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error translating browse path."); + } + + if (ServiceResult.IsGood(error)) + { + // check for no match. + if (result.Targets.Count == 0) + { + error = StatusCodes.BadNoMatch; + } + + // put a placeholder for diagnostics. + else if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + + // check for error. + if (error != null && error.Code != StatusCodes.Good) + { + result.StatusCode = error.StatusCode; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticInfos.Add(diagnosticInfo); + diagnosticsExist = true; + } + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Updates the diagnostics return parameter. + /// + private void UpdateDiagnostics( + OperationContext context, + bool diagnosticsExist, + ref DiagnosticInfoCollection diagnosticInfos) + { + if (diagnosticInfos == null) + { + return; + } + + if (diagnosticsExist && context.StringTable.Count == 0) + { + diagnosticsExist = false; + + for (int ii = 0; !diagnosticsExist && ii < diagnosticInfos.Count; ii++) + { + DiagnosticInfo diagnosticInfo = diagnosticInfos[ii]; + + while (diagnosticInfo != null) + { + if (!String.IsNullOrEmpty(diagnosticInfo.AdditionalInfo)) + { + diagnosticsExist = true; + break; + } + + diagnosticInfo = diagnosticInfo.InnerDiagnosticInfo; + } + } + } + + if (!diagnosticsExist) + { + diagnosticInfos = null; + } + } + + /// + /// Translates a browse path. + /// + protected ServiceResult TranslateBrowsePath( + OperationContext context, + BrowsePath browsePath, + BrowsePathResult result) + { + Debug.Assert(browsePath != null); + Debug.Assert(result != null); + + // check for valid start node. + INodeManager nodeManager = null; + + object sourceHandle = GetManagerHandle(browsePath.StartingNode, out nodeManager); + + if (sourceHandle == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + // check the relative path. + RelativePath relativePath = browsePath.RelativePath; + + if (relativePath.Elements == null || relativePath.Elements.Count == 0) + { + return StatusCodes.BadNothingToDo; + } + + for (int ii = 0; ii < relativePath.Elements.Count; ii++) + { + RelativePathElement element = relativePath.Elements[ii]; + + if (element == null || QualifiedName.IsNull(relativePath.Elements[ii].TargetName)) + { + return StatusCodes.BadBrowseNameInvalid; + } + + if (NodeId.IsNull(element.ReferenceTypeId)) + { + element.ReferenceTypeId = ReferenceTypeIds.References; + element.IncludeSubtypes = true; + } + } + // validate access rights and role permissions + ServiceResult serviceResult = ValidatePermissions(context, nodeManager, sourceHandle, PermissionType.Browse); + if (ServiceResult.IsGood(serviceResult)) + { + // translate path only if validation is passing + TranslateBrowsePath( + context, + nodeManager, + sourceHandle, + relativePath, + result.Targets, + 0); + } + + return serviceResult; + } + + /// + /// Recursively processes the elements in the RelativePath starting at the specified index. + /// + private void TranslateBrowsePath( + OperationContext context, + INodeManager nodeManager, + object sourceHandle, + RelativePath relativePath, + BrowsePathTargetCollection targets, + int index) + { + Debug.Assert(nodeManager != null); + Debug.Assert(sourceHandle != null); + Debug.Assert(relativePath != null); + Debug.Assert(targets != null); + + // check for end of list. + if (index < 0 || index >= relativePath.Elements.Count) + { + return; + } + + // follow the next hop. + RelativePathElement element = relativePath.Elements[index]; + + // check for valid reference type. + if (!element.IncludeSubtypes && NodeId.IsNull(element.ReferenceTypeId)) + { + return; + } + + // check for valid target name. + if (QualifiedName.IsNull(element.TargetName)) + { + throw new ServiceResultException(StatusCodes.BadBrowseNameInvalid); + } + + List targetIds = new List(); + List externalTargetIds = new List(); + + try + { + nodeManager.TranslateBrowsePath( + context, + sourceHandle, + element, + targetIds, + externalTargetIds); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error translating browse path."); + return; + } + + // must check the browse name on all external targets. + for (int ii = 0; ii < externalTargetIds.Count; ii++) + { + // get the browse name from another node manager. + ReferenceDescription description = new ReferenceDescription(); + + UpdateReferenceDescription( + context, + externalTargetIds[ii], + NodeClass.Unspecified, + BrowseResultMask.BrowseName, + description); + + // add to list if target name matches. + if (description.BrowseName == element.TargetName) + { + bool found = false; + + for (int jj = 0; jj < targetIds.Count; jj++) + { + if (targetIds[jj] == externalTargetIds[ii]) + { + found = true; + break; + } + } + + if (!found) + { + targetIds.Add(externalTargetIds[ii]); + } + } + } + + // check if done after a final hop. + if (index == relativePath.Elements.Count - 1) + { + for (int ii = 0; ii < targetIds.Count; ii++) + { + // Check the role permissions for target nodes + INodeManager targetNodeManager = null; + object targetHandle = GetManagerHandle(ExpandedNodeId.ToNodeId(targetIds[ii], Server.NamespaceUris), out targetNodeManager); + + if (targetHandle != null && targetNodeManager != null) + { + NodeMetadata nodeMetadata = targetNodeManager.GetNodeMetadata(context, targetHandle, BrowseResultMask.All); + ServiceResult serviceResult = ValidateRolePermissions(context, nodeMetadata, PermissionType.Browse); + + if (ServiceResult.IsBad(serviceResult)) + { + // Remove target node without role permissions. + continue; + } + } + + BrowsePathTarget target = new BrowsePathTarget(); + target.TargetId = targetIds[ii]; + target.RemainingPathIndex = UInt32.MaxValue; + + targets.Add(target); + } + + return; + } + + // process next hops. + for (int ii = 0; ii < targetIds.Count; ii++) + { + ExpandedNodeId targetId = targetIds[ii]; + + // check for external reference. + if (targetId.IsAbsolute) + { + BrowsePathTarget target = new BrowsePathTarget(); + + target.TargetId = targetId; + target.RemainingPathIndex = (uint)(index + 1); + + targets.Add(target); + continue; + } + + // check for valid start node. + sourceHandle = GetManagerHandle((NodeId)targetId, out nodeManager); + + if (sourceHandle == null) + { + continue; + } + + // recursively follow hops. + TranslateBrowsePath( + context, + nodeManager, + sourceHandle, + relativePath, + targets, + index + 1); + } + } + #endregion + + #region Browse + /// + /// Returns the set of references that meet the filter criteria. + /// + public virtual void Browse( + OperationContext context, + ViewDescription view, + uint maxReferencesPerNode, + BrowseDescriptionCollection nodesToBrowse, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (nodesToBrowse == null) throw new ArgumentNullException(nameof(nodesToBrowse)); + + if (view != null && !NodeId.IsNull(view.ViewId)) + { + INodeManager viewManager = null; + object viewHandle = GetManagerHandle(view.ViewId, out viewManager); + + if (viewHandle == null) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + NodeMetadata metadata = viewManager.GetNodeMetadata(context, viewHandle, BrowseResultMask.NodeClass); + + if (metadata == null || metadata.NodeClass != NodeClass.View) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + // validate access rights and role permissions + ServiceResult validationResult = ValidatePermissions(context, viewManager, viewHandle, PermissionType.Browse); + if (ServiceResult.IsBad(validationResult)) + { + throw new ServiceResultException(validationResult); + } + view.Handle = viewHandle; + } + + bool diagnosticsExist = false; + results = new BrowseResultCollection(nodesToBrowse.Count); + diagnosticInfos = new DiagnosticInfoCollection(nodesToBrowse.Count); + + uint continuationPointsAssigned = 0; + + for (int ii = 0; ii < nodesToBrowse.Count; ii++) + { + // check if request has timed out or been cancelled. + if (StatusCode.IsBad(context.OperationStatus)) + { + // release all allocated continuation points. + foreach (BrowseResult current in results) + { + if (current != null && current.ContinuationPoint != null && current.ContinuationPoint.Length > 0) + { + ContinuationPoint cp = context.Session.RestoreContinuationPoint(current.ContinuationPoint); + cp.Dispose(); + } + } + + throw new ServiceResultException(context.OperationStatus); + } + + BrowseDescription nodeToBrowse = nodesToBrowse[ii]; + + // initialize result. + BrowseResult result = new BrowseResult(); + result.StatusCode = StatusCodes.Good; + results.Add(result); + + ServiceResult error = null; + + // need to trap unexpected exceptions to handle bugs in the node managers. + try + { + error = Browse( + context, + view, + maxReferencesPerNode, + continuationPointsAssigned < m_maxContinuationPointsPerBrowse, + nodeToBrowse, + result); + } + catch (Exception e) + { + error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error browsing node."); + } + + // check for continuation point. + if (result.ContinuationPoint != null && result.ContinuationPoint.Length > 0) + { + continuationPointsAssigned++; + } + + // check for error. + result.StatusCode = error.StatusCode; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = null; + + if (error != null && error.Code != StatusCodes.Good) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + + diagnosticInfos.Add(diagnosticInfo); + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Continues a browse operation that was previously halted. + /// + public virtual void BrowseNext( + OperationContext context, + bool releaseContinuationPoints, + ByteStringCollection continuationPoints, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (continuationPoints == null) throw new ArgumentNullException(nameof(continuationPoints)); + + bool diagnosticsExist = false; + results = new BrowseResultCollection(continuationPoints.Count); + diagnosticInfos = new DiagnosticInfoCollection(continuationPoints.Count); + + uint continuationPointsAssigned = 0; + + for (int ii = 0; ii < continuationPoints.Count; ii++) + { + ContinuationPoint cp = null; + + // check if request has timed out or been canceled. + if (StatusCode.IsBad(context.OperationStatus)) + { + // release all allocated continuation points. + foreach (BrowseResult current in results) + { + if (current != null && current.ContinuationPoint != null && current.ContinuationPoint.Length > 0) + { + cp = context.Session.RestoreContinuationPoint(current.ContinuationPoint); + cp.Dispose(); + } + } + + throw new ServiceResultException(context.OperationStatus); + } + + // find the continuation point. + cp = context.Session.RestoreContinuationPoint(continuationPoints[ii]); + + // validate access rights and role permissions + if (cp != null) + { + ServiceResult validationResult = ValidatePermissions(context, cp.Manager, cp.NodeToBrowse, PermissionType.Browse); + if (ServiceResult.IsBad(validationResult)) + { + BrowseResult badResult = new BrowseResult(); + badResult.StatusCode = validationResult.Code; + results.Add(badResult); + + // put placeholder for diagnostics + diagnosticInfos.Add(null); + continue; + } + } + + // initialize result. + BrowseResult result = new BrowseResult(); + result.StatusCode = StatusCodes.Good; + results.Add(result); + + // check if simply releasing the continuation point. + if (releaseContinuationPoints) + { + if (cp != null) + { + cp.Dispose(); + cp = null; + } + + continue; + } + + ServiceResult error = null; + + // check if continuation point has expired. + if (cp == null) + { + error = StatusCodes.BadContinuationPointInvalid; + } + + if (cp != null) + { + // need to trap unexpected exceptions to handle bugs in the node managers. + try + { + ReferenceDescriptionCollection references = result.References; + + error = FetchReferences( + context, + continuationPointsAssigned < m_maxContinuationPointsPerBrowse, + ref cp, + ref references); + + result.References = references; + } + catch (Exception e) + { + error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error browsing node."); + } + + // check for continuation point. + if (result.ContinuationPoint != null && result.ContinuationPoint.Length > 0) + { + continuationPointsAssigned++; + } + } + + // check for error. + result.StatusCode = error.StatusCode; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = null; + + if (error != null && error.Code != StatusCodes.Good) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + + diagnosticInfos.Add(diagnosticInfo); + } + + // check for continuation point. + if (cp != null) + { + result.StatusCode = StatusCodes.Good; + result.ContinuationPoint = cp.Id.ToByteArray(); + continue; + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Returns the set of references that meet the filter criteria. + /// + private ServiceResult Browse( + OperationContext context, + ViewDescription view, + uint maxReferencesPerNode, + bool assignContinuationPoint, + BrowseDescription nodeToBrowse, + BrowseResult result) + { + Debug.Assert(context != null); + Debug.Assert(nodeToBrowse != null); + Debug.Assert(result != null); + + // find node manager that owns the node. + INodeManager nodeManager = null; + object handle = GetManagerHandle(nodeToBrowse.NodeId, out nodeManager); + + if (handle == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + if (!NodeId.IsNull(nodeToBrowse.ReferenceTypeId) && !m_server.TypeTree.IsKnown(nodeToBrowse.ReferenceTypeId)) + { + return StatusCodes.BadReferenceTypeIdInvalid; + } + + if (nodeToBrowse.BrowseDirection < BrowseDirection.Forward || nodeToBrowse.BrowseDirection > BrowseDirection.Both) + { + return StatusCodes.BadBrowseDirectionInvalid; + } + // validate access rights and role permissions + ServiceResult validationResult = ValidatePermissions(context, nodeManager, handle, PermissionType.Browse); + if (ServiceResult.IsBad(validationResult)) + { + return validationResult; + } + + // create a continuation point. + ContinuationPoint cp = new ContinuationPoint(); + + cp.Manager = nodeManager; + cp.View = view; + cp.NodeToBrowse = handle; + cp.MaxResultsToReturn = maxReferencesPerNode; + cp.BrowseDirection = nodeToBrowse.BrowseDirection; + cp.ReferenceTypeId = nodeToBrowse.ReferenceTypeId; + cp.IncludeSubtypes = nodeToBrowse.IncludeSubtypes; + cp.NodeClassMask = nodeToBrowse.NodeClassMask; + cp.ResultMask = (BrowseResultMask)nodeToBrowse.ResultMask; + cp.Index = 0; + cp.Data = null; + + // check if reference type left unspecified. + if (NodeId.IsNull(cp.ReferenceTypeId)) + { + cp.ReferenceTypeId = ReferenceTypeIds.References; + cp.IncludeSubtypes = true; + } + + // loop until browse is complete or max results. + ReferenceDescriptionCollection references = result.References; + ServiceResult error = FetchReferences(context, assignContinuationPoint, ref cp, ref references); + result.References = references; + + // save continuation point. + if (cp != null) + { + result.StatusCode = StatusCodes.Good; + result.ContinuationPoint = cp.Id.ToByteArray(); + } + + // all is good. + return error; + } + + /// + /// Loops until browse is complete for max results reached. + /// + protected ServiceResult FetchReferences( + OperationContext context, + bool assignContinuationPoint, + ref ContinuationPoint cp, + ref ReferenceDescriptionCollection references) + { + Debug.Assert(context != null); + Debug.Assert(cp != null); + Debug.Assert(references != null); + + INodeManager nodeManager = cp.Manager; + NodeClass nodeClassMask = (NodeClass)cp.NodeClassMask; + BrowseResultMask resultMask = cp.ResultMask; + + // loop until browse is complete or max results. + while (cp != null) + { + // fetch next batch. + nodeManager.Browse(context, ref cp, references); + + ReferenceDescriptionCollection referencesToKeep = new ReferenceDescriptionCollection(references.Count); + + // check for incomplete reference descriptions. + for (int ii = 0; ii < references.Count; ii++) + { + ReferenceDescription reference = references[ii]; + + // check if filtering must be applied. + if (reference.Unfiltered) + { + // ignore unknown external references. + if (reference.NodeId.IsAbsolute) + { + continue; + } + + // update the description. + bool include = UpdateReferenceDescription( + context, + (NodeId)reference.NodeId, + nodeClassMask, + resultMask, + reference); + + if (!include) + { + continue; + } + } + + // add to list. + referencesToKeep.Add(reference); + } + + // replace list. + references = referencesToKeep; + + // check if browse limit reached. + if (cp != null && references.Count >= cp.MaxResultsToReturn) + { + if (!assignContinuationPoint) + { + return StatusCodes.BadNoContinuationPoints; + } + + cp.Id = Guid.NewGuid(); + context.Session.SaveContinuationPoint(cp); + break; + } + } + + // all is good. + return ServiceResult.Good; + } + #endregion + + /// + /// Updates the reference description with the node attributes. + /// + private bool UpdateReferenceDescription( + OperationContext context, + NodeId targetId, + NodeClass nodeClassMask, + BrowseResultMask resultMask, + ReferenceDescription description) + { + if (targetId == null) throw new ArgumentNullException(nameof(targetId)); + if (description == null) throw new ArgumentNullException(nameof(description)); + + // find node manager that owns the node. + INodeManager nodeManager = null; + object handle = GetManagerHandle(targetId, out nodeManager); + + // dangling reference - nothing more to do. + if (handle == null) + { + return false; + } + + // fetch the node attributes. + NodeMetadata metadata = nodeManager.GetNodeMetadata(context, handle, resultMask); + + if (metadata == null) + { + return false; + } + + // check nodeclass filter. + if (nodeClassMask != NodeClass.Unspecified && (metadata.NodeClass & nodeClassMask) == 0) + { + return false; + } + + // update attributes. + description.NodeId = metadata.NodeId; + + description.SetTargetAttributes( + resultMask, + metadata.NodeClass, + metadata.BrowseName, + metadata.DisplayName, + metadata.TypeDefinition); + + description.Unfiltered = false; + + return true; + } + + /// + /// Reads a set of nodes + /// + public virtual void Read( + OperationContext context, + double maxAge, + TimestampsToReturn timestampsToReturn, + ReadValueIdCollection nodesToRead, + out DataValueCollection values, + out DiagnosticInfoCollection diagnosticInfos) + { + if (nodesToRead == null) throw new ArgumentNullException(nameof(nodesToRead)); + + if (maxAge < 0) + { + throw new ServiceResultException(StatusCodes.BadMaxAgeInvalid); + } + + if (timestampsToReturn < TimestampsToReturn.Source || timestampsToReturn > TimestampsToReturn.Neither) + { + throw new ServiceResultException(StatusCodes.BadTimestampsToReturnInvalid); + } + + bool diagnosticsExist = false; + values = new DataValueCollection(nodesToRead.Count); + diagnosticInfos = new DiagnosticInfoCollection(nodesToRead.Count); + + // create empty list of errors. + List errors = new List(values.Count); + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + errors.Add(null); + } + + // add placeholder for each result. + bool validItems = false; + + Utils.Trace( + (int)Utils.TraceMasks.ServiceDetail, + "MasterNodeManager.Read - Count={0}", + nodesToRead.Count); + + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + // add default value to values collection + values.Add(null); + // add placeholder for diagnostics + diagnosticInfos.Add(null); + + // pre-validate and pre-parse parameter. + errors[ii] = ValidateReadRequest(context, nodesToRead[ii]); + + // return error status. + if (ServiceResult.IsBad(errors[ii])) + { + nodesToRead[ii].Processed = true; + } + // found at least one valid item. + else + { + nodesToRead[ii].Processed = false; + validItems = true; + } + } + + // call each node manager. + if (validItems) + { + for (int ii = 0; ii < m_nodeManagers.Count; ii++) + { + Utils.Trace( + (int)Utils.TraceMasks.ServiceDetail, + "MasterNodeManager.Read - Calling NodeManager {0} of {1}", + ii, + m_nodeManagers.Count); + + m_nodeManagers[ii].Read( + context, + maxAge, + nodesToRead, + values, + errors); + } + } + + // process results. + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + DataValue value = values[ii]; + + // set an error code for nodes that were not handled by any node manager. + if (!nodesToRead[ii].Processed) + { + value = values[ii] = new DataValue(StatusCodes.BadNodeIdUnknown, DateTime.UtcNow); + errors[ii] = new ServiceResult(values[ii].StatusCode); + } + + // update the diagnostic info and ensure the status code in the data value is the same as the error code. + if (errors[ii] != null && errors[ii].Code != StatusCodes.Good) + { + if (value == null) + { + value = values[ii] = new DataValue(errors[ii].Code, DateTime.UtcNow); + } + + value.StatusCode = errors[ii].Code; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + } + + // apply the timestamp filters. + if (timestampsToReturn != TimestampsToReturn.Server && timestampsToReturn != TimestampsToReturn.Both) + { + value.ServerTimestamp = DateTime.MinValue; + } + + if (timestampsToReturn != TimestampsToReturn.Source && timestampsToReturn != TimestampsToReturn.Both) + { + value.SourceTimestamp = DateTime.MinValue; + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Reads the history of a set of items. + /// + public virtual void HistoryRead( + OperationContext context, + ExtensionObject historyReadDetails, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueIdCollection nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + // validate history details parameter. + if (ExtensionObject.IsNull(historyReadDetails)) + { + throw new ServiceResultException(StatusCodes.BadHistoryOperationInvalid); + } + + HistoryReadDetails details = historyReadDetails.Body as HistoryReadDetails; + + if (details == null) + { + throw new ServiceResultException(StatusCodes.BadHistoryOperationUnsupported); + } + + // create result lists. + bool diagnosticsExist = false; + results = new HistoryReadResultCollection(nodesToRead.Count); + diagnosticInfos = new DiagnosticInfoCollection(nodesToRead.Count); + + // pre-validate items. + bool validItems = false; + // create empty list of errors. + List errors = new List(results.Count); + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + errors.Add(null); + } + + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + // Limit permission restrictions to Client initiated service call + HistoryReadResult result = null; + DiagnosticInfo diagnosticInfo = null; + + // pre-validate and pre-parse parameter. + errors[ii] = ValidateHistoryReadRequest(context, nodesToRead[ii]); + + // return error status. + if (ServiceResult.IsBad(errors[ii])) + { + nodesToRead[ii].Processed = true; + result = new HistoryReadResult(); + result.StatusCode = errors[ii].Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + } + // found at least one valid item. + else + { + nodesToRead[ii].Processed = false; + validItems = true; + } + + results.Add(result); + diagnosticInfos.Add(diagnosticInfo); + } + + // call each node manager. + if (validItems) + { + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.HistoryRead( + context, + details, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead, + results, + errors); + } + + for (int ii = 0; ii < nodesToRead.Count; ii++) + { + HistoryReadResult result = results[ii]; + + // set an error code for nodes that were not handled by any node manager. + if (!nodesToRead[ii].Processed) + { + nodesToRead[ii].Processed = true; + result = results[ii] = new HistoryReadResult(); + result.StatusCode = StatusCodes.BadNodeIdUnknown; + errors[ii] = results[ii].StatusCode; + } + + // update the diagnostic info and ensure the status code in the result is the same as the error code. + if (errors[ii] != null && errors[ii].Code != StatusCodes.Good) + { + if (result == null) + { + result = results[ii] = new HistoryReadResult(); + } + + result.StatusCode = errors[ii].Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + } + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Writes a set of values. + /// + public virtual void Write( + OperationContext context, + WriteValueCollection nodesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (nodesToWrite == null) throw new ArgumentNullException(nameof(nodesToWrite)); + + int count = nodesToWrite.Count; + + bool diagnosticsExist = false; + results = new StatusCodeCollection(count); + diagnosticInfos = new DiagnosticInfoCollection(count); + + // add placeholder for each result. + bool validItems = false; + + for (int ii = 0; ii < count; ii++) + { + StatusCode result = StatusCodes.Good; + DiagnosticInfo diagnosticInfo = null; + + // pre-validate and pre-parse parameter. Validate also access rights and role permissions + ServiceResult error = ValidateWriteRequest(context, nodesToWrite[ii]); + + // return error status. + if (ServiceResult.IsBad(error)) + { + nodesToWrite[ii].Processed = true; + result = error.Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + } + + // found at least one valid item. + else + { + nodesToWrite[ii].Processed = false; + validItems = true; + } + + results.Add(result); + diagnosticInfos.Add(diagnosticInfo); + } + + // call each node manager. + if (validItems) + { + List errors = new List(count); + errors.AddRange(new ServiceResult[count]); + + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.Write( + context, + nodesToWrite, + errors); + } + + for (int ii = 0; ii < nodesToWrite.Count; ii++) + { + if (!nodesToWrite[ii].Processed) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + } + + if (errors[ii] != null && errors[ii].Code != StatusCodes.Good) + { + results[ii] = errors[ii].Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + } + + ServerUtils.ReportWriteValue(nodesToWrite[ii].NodeId, nodesToWrite[ii].Value, results[ii]); + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Updates the history for a set of nodes. + /// + public virtual void HistoryUpdate( + OperationContext context, + ExtensionObjectCollection historyUpdateDetails, + out HistoryUpdateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + Type detailsType = null; + List nodesToUpdate = new List(); + + // verify that all extension objects in the list have the same type. + foreach (ExtensionObject details in historyUpdateDetails) + { + if (detailsType == null) + { + detailsType = details.Body.GetType(); + } + + if (!ExtensionObject.IsNull(details)) + { + nodesToUpdate.Add(details.Body as HistoryUpdateDetails); + } + } + + // create result lists. + bool diagnosticsExist = false; + results = new HistoryUpdateResultCollection(nodesToUpdate.Count); + diagnosticInfos = new DiagnosticInfoCollection(nodesToUpdate.Count); + + // pre-validate items. + bool validItems = false; + + // create empty list of errors. + List errors = new List(results.Count); + for (int ii = 0; ii < nodesToUpdate.Count; ii++) + { + errors.Add(null); + } + + for (int ii = 0; ii < nodesToUpdate.Count; ii++) + { + HistoryUpdateResult result = null; + DiagnosticInfo diagnosticInfo = null; + + // check the type of details parameter. + ServiceResult error = null; + + if (nodesToUpdate[ii].GetType() != detailsType) + { + error = StatusCodes.BadHistoryOperationInvalid; + } + // pre-validate and pre-parse parameter. + else + { + error = ValidateHistoryUpdateRequest(context, nodesToUpdate[ii]); + } + + // return error status. + if (ServiceResult.IsBad(error)) + { + nodesToUpdate[ii].Processed = true; + result = new HistoryUpdateResult(); + result.StatusCode = error.Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + } + // found at least one valid item. + else + { + nodesToUpdate[ii].Processed = false; + validItems = true; + } + + results.Add(result); + diagnosticInfos.Add(diagnosticInfo); + } + + // call each node manager. + if (validItems) + { + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.HistoryUpdate( + context, + detailsType, + nodesToUpdate, + results, + errors); + } + + for (int ii = 0; ii < nodesToUpdate.Count; ii++) + { + HistoryUpdateResult result = results[ii]; + + // set an error code for nodes that were not handled by any node manager. + if (!nodesToUpdate[ii].Processed) + { + nodesToUpdate[ii].Processed = true; + result = results[ii] = new HistoryUpdateResult(); + result.StatusCode = StatusCodes.BadNodeIdUnknown; + errors[ii] = result.StatusCode; + } + + // update the diagnostic info and ensure the status code in the result is the same as the error code. + if (errors[ii] != null && errors[ii].Code != StatusCodes.Good) + { + if (result == null) + { + result = results[ii] = new HistoryUpdateResult(); + } + + result.StatusCode = errors[ii].Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + } + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Calls a method defined on a object. + /// + public virtual void Call( + OperationContext context, + CallMethodRequestCollection methodsToCall, + out CallMethodResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (methodsToCall == null) throw new ArgumentNullException(nameof(methodsToCall)); + + bool diagnosticsExist = false; + results = new CallMethodResultCollection(methodsToCall.Count); + diagnosticInfos = new DiagnosticInfoCollection(methodsToCall.Count); + List errors = new List(methodsToCall.Count); + + // add placeholder for each result. + bool validItems = false; + + for (int ii = 0; ii < methodsToCall.Count; ii++) + { + results.Add(null); + errors.Add(null); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + + // validate request parameters. + errors[ii] = ValidateCallRequestItem(context, methodsToCall[ii]); + + if (ServiceResult.IsBad(errors[ii])) + { + methodsToCall[ii].Processed = true; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + + continue; + } + + // found at least one valid item. + validItems = true; + methodsToCall[ii].Processed = false; + } + + // call each node manager. + if (validItems) + { + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.Call( + context, + methodsToCall, + results, + errors); + } + } + + for (int ii = 0; ii < methodsToCall.Count; ii++) + { + // set an error code for calls that were not handled by any node manager. + if (!methodsToCall[ii].Processed) + { + results[ii] = new CallMethodResult(); + errors[ii] = StatusCodes.BadNodeIdUnknown; + } + + // update the diagnostic info and ensure the status code in the result is the same as the error code. + if (errors[ii] != null && errors[ii].Code != StatusCodes.Good) + { + if (results[ii] == null) + { + results[ii] = new CallMethodResult(); + } + + results[ii].StatusCode = errors[ii].Code; + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + } + } + + // clear the diagnostics array if no diagnostics requested or no errors occurred. + UpdateDiagnostics(context, diagnosticsExist, ref diagnosticInfos); + } + + /// + /// Handles condition refresh request. + /// + public virtual void ConditionRefresh(OperationContext context, IList monitoredItems) + { + foreach (INodeManager nodeManager in m_nodeManagers) + { + try + { + nodeManager.ConditionRefresh(context, monitoredItems); + } + catch (Exception e) + { + Utils.Trace(e, "Error calling ConditionRefresh on NodeManager."); + } + } + } + + /// + /// Creates a set of monitored items. + /// + public virtual void CreateMonitoredItems( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + IList itemsToCreate, + IList errors, + IList filterResults, + IList monitoredItems) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToCreate == null) throw new ArgumentNullException(nameof(itemsToCreate)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + if (filterResults == null) throw new ArgumentNullException(nameof(filterResults)); + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + if (publishingInterval < 0) throw new ArgumentOutOfRangeException(nameof(publishingInterval)); + + if (timestampsToReturn < TimestampsToReturn.Source || timestampsToReturn > TimestampsToReturn.Neither) + { + throw new ServiceResultException(StatusCodes.BadTimestampsToReturnInvalid); + } + + // add placeholder for each result. + bool validItems = false; + + for (int ii = 0; ii < itemsToCreate.Count; ii++) + { + // validate request parameters. + errors[ii] = ValidateMonitoredItemCreateRequest(context, itemsToCreate[ii]); + + if (ServiceResult.IsBad(errors[ii])) + { + itemsToCreate[ii].Processed = true; + continue; + } + + // found at least one valid item. + validItems = true; + itemsToCreate[ii].Processed = false; + } + + // call each node manager. + if (validItems) + { + // create items for event filters. + CreateMonitoredItemsForEvents( + context, + subscriptionId, + publishingInterval, + timestampsToReturn, + itemsToCreate, + errors, + filterResults, + monitoredItems, + ref m_lastMonitoredItemId); + + // create items for data access. + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.CreateMonitoredItems( + context, + subscriptionId, + publishingInterval, + timestampsToReturn, + itemsToCreate, + errors, + filterResults, + monitoredItems, + ref m_lastMonitoredItemId); + } + + // fill results for unknown nodes. + for (int ii = 0; ii < errors.Count; ii++) + { + if (!itemsToCreate[ii].Processed) + { + errors[ii] = new ServiceResult(StatusCodes.BadNodeIdUnknown); + } + } + } + } + + /// + /// Create monitored items for event subscriptions. + /// + private void CreateMonitoredItemsForEvents( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + IList itemsToCreate, + IList errors, + IList filterResults, + IList monitoredItems, + ref long globalIdCounter) + { + for (int ii = 0; ii < itemsToCreate.Count; ii++) + { + MonitoredItemCreateRequest itemToCreate = itemsToCreate[ii]; + + if (!itemToCreate.Processed) + { + // must make sure the filter is not null before checking its type. + if (ExtensionObject.IsNull(itemToCreate.RequestedParameters.Filter)) + { + continue; + } + + // all event subscriptions required an event filter. + EventFilter filter = itemToCreate.RequestedParameters.Filter.Body as EventFilter; + + if (filter == null) + { + continue; + } + + itemToCreate.Processed = true; + + // only the value attribute may be used with an event subscription. + if (itemToCreate.ItemToMonitor.AttributeId != Attributes.EventNotifier) + { + errors[ii] = StatusCodes.BadFilterNotAllowed; + continue; + } + + // the index range parameter has no meaning for event subscriptions. + if (!String.IsNullOrEmpty(itemToCreate.ItemToMonitor.IndexRange)) + { + errors[ii] = StatusCodes.BadIndexRangeInvalid; + continue; + } + + // the data encoding has no meaning for event subscriptions. + if (!QualifiedName.IsNull(itemToCreate.ItemToMonitor.DataEncoding)) + { + errors[ii] = StatusCodes.BadDataEncodingInvalid; + continue; + } + + // validate the event filter. + EventFilter.Result result = filter.Validate(new FilterContext(m_server.NamespaceUris, m_server.TypeTree, context)); ; + + if (ServiceResult.IsBad(result.Status)) + { + errors[ii] = result.Status; + filterResults[ii] = result.ToEventFilterResult(context.DiagnosticsMask, context.StringTable); + continue; + } + + // check if a valid node. + INodeManager nodeManager = null; + + object handle = GetManagerHandle(itemToCreate.ItemToMonitor.NodeId, out nodeManager); + + if (handle == null) + { + errors[ii] = StatusCodes.BadNodeIdUnknown; + continue; + } + NodeMetadata nodeMetadata = nodeManager.GetNodeMetadata(context, handle, BrowseResultMask.All); + + errors[ii] = ValidateRolePermissions(context, nodeMetadata, PermissionType.ReceiveEvents); + + if (ServiceResult.IsBad(errors[ii])) + { + continue; + } + + // create a globally unique identifier. + uint monitoredItemId = Utils.IncrementIdentifier(ref globalIdCounter); + + MonitoredItem monitoredItem = m_server.EventManager.CreateMonitoredItem( + context, + nodeManager, + handle, + subscriptionId, + monitoredItemId, + timestampsToReturn, + publishingInterval, + itemToCreate, + filter); + + // subscribe to all node managers. + if (itemToCreate.ItemToMonitor.NodeId == Objects.Server) + { + foreach (INodeManager manager in m_nodeManagers) + { + try + { + manager.SubscribeToAllEvents(context, subscriptionId, monitoredItem, false); + } + catch (Exception e) + { + Utils.Trace(e, "NodeManager threw an exception subscribing to all events. NodeManager={0}", manager); + } + } + } + + // only subscribe to the node manager that owns the node. + else + { + ServiceResult error = nodeManager.SubscribeToEvents(context, handle, subscriptionId, monitoredItem, false); + + if (ServiceResult.IsBad(error)) + { + m_server.EventManager.DeleteMonitoredItem(monitoredItem.Id); + errors[ii] = error; + continue; + } + } + + monitoredItems[ii] = monitoredItem; + errors[ii] = StatusCodes.Good; + } + } + } + + /// + /// Modifies a set of monitored items. + /// + public virtual void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + IList monitoredItems, + IList itemsToModify, + IList errors, + IList filterResults) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToModify == null) throw new ArgumentNullException(nameof(itemsToModify)); + if (monitoredItems == null) throw new ArgumentNullException(nameof(monitoredItems)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + if (filterResults == null) throw new ArgumentNullException(nameof(filterResults)); + + if (timestampsToReturn < TimestampsToReturn.Source || timestampsToReturn > TimestampsToReturn.Neither) + { + throw new ServiceResultException(StatusCodes.BadTimestampsToReturnInvalid); + } + + bool validItems = false; + + for (int ii = 0; ii < itemsToModify.Count; ii++) + { + // check for errors. + if (ServiceResult.IsBad(errors[ii]) || monitoredItems[ii] == null) + { + itemsToModify[ii].Processed = true; + continue; + } + + // validate request parameters. + errors[ii] = ValidateMonitoredItemModifyRequest(itemsToModify[ii]); + + if (ServiceResult.IsBad(errors[ii])) + { + itemsToModify[ii].Processed = true; + continue; + } + + // found at least one valid item. + validItems = true; + itemsToModify[ii].Processed = false; + } + + // call each node manager. + if (validItems) + { + // modify items for event filters. + ModifyMonitoredItemsForEvents( + context, + timestampsToReturn, + monitoredItems, + itemsToModify, + errors, + filterResults); + + // let each node manager figure out which items it owns. + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.ModifyMonitoredItems( + context, + timestampsToReturn, + monitoredItems, + itemsToModify, + errors, + filterResults); + } + + // update results. + for (int ii = 0; ii < errors.Count; ii++) + { + if (!itemsToModify[ii].Processed) + { + errors[ii] = new ServiceResult(StatusCodes.BadMonitoredItemIdInvalid); + } + } + } + } + + /// + /// Modify monitored items for event subscriptions. + /// + private void ModifyMonitoredItemsForEvents( + OperationContext context, + TimestampsToReturn timestampsToReturn, + IList monitoredItems, + IList itemsToModify, + IList errors, + IList filterResults) + { + for (int ii = 0; ii < itemsToModify.Count; ii++) + { + IEventMonitoredItem monitoredItem = monitoredItems[ii] as IEventMonitoredItem; + + // all event subscriptions are handled by the event manager. + if (monitoredItem == null || (monitoredItem.MonitoredItemType & MonitoredItemTypeMask.Events) == 0) + { + continue; + } + + MonitoredItemModifyRequest itemToModify = itemsToModify[ii]; + itemToModify.Processed = true; + + // check for a valid filter. + if (ExtensionObject.IsNull(itemToModify.RequestedParameters.Filter)) + { + errors[ii] = StatusCodes.BadEventFilterInvalid; + continue; + } + + // all event subscriptions required an event filter. + EventFilter filter = itemToModify.RequestedParameters.Filter.Body as EventFilter; + + if (filter == null) + { + errors[ii] = StatusCodes.BadEventFilterInvalid; + continue; + } + + // validate the event filter. + EventFilter.Result result = filter.Validate(new FilterContext(m_server.NamespaceUris, m_server.TypeTree, context)); + + if (ServiceResult.IsBad(result.Status)) + { + errors[ii] = result.Status; + filterResults[ii] = result.ToEventFilterResult(context.DiagnosticsMask, context.StringTable); + continue; + } + + // modify the item. + m_server.EventManager.ModifyMonitoredItem( + context, + monitoredItem, + timestampsToReturn, + itemToModify, + filter); + + // subscribe to all node managers. + if ((monitoredItem.MonitoredItemType & MonitoredItemTypeMask.AllEvents) != 0) + { + foreach (INodeManager manager in m_nodeManagers) + { + manager.SubscribeToAllEvents( + context, + monitoredItem.SubscriptionId, + monitoredItem, + false); + } + } + + // only subscribe to the node manager that owns the node. + else + { + monitoredItem.NodeManager.SubscribeToEvents( + context, + monitoredItem.ManagerHandle, + monitoredItem.SubscriptionId, + monitoredItem, + false); + } + + errors[ii] = StatusCodes.Good; + } + } + + /// + /// Deletes a set of monitored items. + /// + public virtual void DeleteMonitoredItems( + OperationContext context, + uint subscriptionId, + IList itemsToDelete, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToDelete == null) throw new ArgumentNullException(nameof(itemsToDelete)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + List processedItems = new List(itemsToDelete.Count); + + for (int ii = 0; ii < itemsToDelete.Count; ii++) + { + processedItems.Add(ServiceResult.IsBad(errors[ii]) || itemsToDelete[ii] == null); + } + + // delete items for event filters. + DeleteMonitoredItemsForEvents( + context, + subscriptionId, + itemsToDelete, + processedItems, + errors); + + // call each node manager. + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.DeleteMonitoredItems( + context, + itemsToDelete, + processedItems, + errors); + } + + // fill results for unknown nodes. + for (int ii = 0; ii < errors.Count; ii++) + { + if (!processedItems[ii]) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + } + } + } + + /// + /// Delete monitored items for event subscriptions. + /// + private void DeleteMonitoredItemsForEvents( + OperationContext context, + uint subscriptionId, + IList monitoredItems, + IList processedItems, + IList errors) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + IEventMonitoredItem monitoredItem = monitoredItems[ii] as IEventMonitoredItem; + + // all event subscriptions are handled by the event manager. + if (monitoredItem == null || (monitoredItem.MonitoredItemType & MonitoredItemTypeMask.Events) == 0) + { + continue; + } + + processedItems[ii] = true; + + // unsubscribe to all node managers. + if ((monitoredItem.MonitoredItemType & MonitoredItemTypeMask.AllEvents) != 0) + { + foreach (INodeManager manager in m_nodeManagers) + { + manager.SubscribeToAllEvents(context, subscriptionId, monitoredItem, true); + } + } + + // only unsubscribe to the node manager that owns the node. + else + { + monitoredItem.NodeManager.SubscribeToEvents(context, monitoredItem.ManagerHandle, subscriptionId, monitoredItem, true); + } + + // delete the item. + m_server.EventManager.DeleteMonitoredItem(monitoredItem.Id); + + // success. + errors[ii] = StatusCodes.Good; + } + } + + /// + /// Changes the monitoring mode for a set of items. + /// + public virtual void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + IList itemsToModify, + IList errors) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToModify == null) throw new ArgumentNullException(nameof(itemsToModify)); + if (errors == null) throw new ArgumentNullException(nameof(errors)); + + // call each node manager. + List processedItems = new List(itemsToModify.Count); + + for (int ii = 0; ii < itemsToModify.Count; ii++) + { + processedItems.Add(ServiceResult.IsBad(errors[ii]) || itemsToModify[ii] == null); + } + + // delete items for event filters. + SetMonitoringModeForEvents( + context, + monitoringMode, + itemsToModify, + processedItems, + errors); + + foreach (INodeManager nodeManager in m_nodeManagers) + { + nodeManager.SetMonitoringMode( + context, + monitoringMode, + itemsToModify, + processedItems, + errors); + } + + // fill results for unknown nodes. + for (int ii = 0; ii < errors.Count; ii++) + { + if (!processedItems[ii]) + { + errors[ii] = StatusCodes.BadMonitoredItemIdInvalid; + } + } + } + + /// + /// Delete monitored items for event subscriptions. + /// + private static void SetMonitoringModeForEvents( + OperationContext context, + MonitoringMode monitoringMode, + IList monitoredItems, + IList processedItems, + IList errors) + { + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + IEventMonitoredItem monitoredItem = monitoredItems[ii] as IEventMonitoredItem; + + // all event subscriptions are handled by the event manager. + if (monitoredItem == null || (monitoredItem.MonitoredItemType & MonitoredItemTypeMask.Events) == 0) + { + continue; + } + + processedItems[ii] = true; + + // set the monitoring mode. + monitoredItem.SetMonitoringMode(monitoringMode); + + // success. + errors[ii] = StatusCodes.Good; + } + } + #endregion + + #region Protected Members + /// + /// The server that the node manager belongs to. + /// + protected IServerInternal Server + { + get { return m_server; } + } + + /// + /// The node managers being managed. + /// + public IList NodeManagers + { + get { return m_nodeManagers; } + } + + /// + /// Validates a monitoring attributes parameter. + /// + protected static ServiceResult ValidateMonitoringAttributes(MonitoringParameters attributes) + { + // check for null structure. + if (attributes == null) + { + return new ServiceResult(StatusCodes.BadStructureMissing); + } + + // check for known filter. + if (!ExtensionObject.IsNull(attributes.Filter)) + { + MonitoringFilter filter = attributes.Filter.Body as MonitoringFilter; + + if (filter == null) + { + return new ServiceResult(StatusCodes.BadMonitoredItemFilterInvalid); + } + } + + // passed basic validation. + return null; + } + + /// + /// Validates a monitoring filter. + /// + protected static ServiceResult ValidateMonitoringFilter(ExtensionObject filter) + { + ServiceResult error = null; + + // check that no filter is specified for non-value attributes. + if (!ExtensionObject.IsNull(filter)) + { + DataChangeFilter datachangeFilter = filter.Body as DataChangeFilter; + + // validate data change filter. + if (datachangeFilter != null) + { + error = datachangeFilter.Validate(); + + if (ServiceResult.IsBad(error)) + { + return error; + } + } + } + + // passed basic validation. + return null; + } + + /// + /// Validates a monitored item create request parameter. + /// + protected ServiceResult ValidateMonitoredItemCreateRequest(OperationContext operationContext, MonitoredItemCreateRequest item) + { + // check for null structure. + if (item == null) + { + return new ServiceResult(StatusCodes.BadStructureMissing); + } + + // validate read value id component. Validate also access rights and permissions + ServiceResult error = ValidateReadRequest(operationContext, item.ItemToMonitor); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // check for valid monitoring mode. + if ((int)item.MonitoringMode < 0 || (int)item.MonitoringMode > (int)MonitoringMode.Reporting) + { + return new ServiceResult(StatusCodes.BadMonitoringModeInvalid); + } + + // check for null structure. + MonitoringParameters attributes = item.RequestedParameters; + + error = ValidateMonitoringAttributes(attributes); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // check that no filter is specified for non-value attributes. + if (item.ItemToMonitor.AttributeId != Attributes.Value && item.ItemToMonitor.AttributeId != Attributes.EventNotifier) + { + if (!ExtensionObject.IsNull(attributes.Filter)) + { + return new ServiceResult(StatusCodes.BadFilterNotAllowed); + } + } + else + { + error = ValidateMonitoringFilter(attributes.Filter); + + if (ServiceResult.IsBad(error)) + { + return error; + } + } + + // passed basic validation. + return null; + } + + /// + /// Validates a monitored item modify request parameter. + /// + protected static ServiceResult ValidateMonitoredItemModifyRequest(MonitoredItemModifyRequest item) + { + // check for null structure. + if (item == null) + { + return new ServiceResult(StatusCodes.BadStructureMissing); + } + + // check for null structure. + MonitoringParameters attributes = item.RequestedParameters; + + ServiceResult error = ValidateMonitoringAttributes(attributes); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // validate monitoring filter. + error = ValidateMonitoringFilter(attributes.Filter); + + if (ServiceResult.IsBad(error)) + { + return error; + } + + // passed basic validation. + return null; + } + + /// + /// Validates a call request item parameter. It validates also access rights and role permissions + /// + /// + /// + /// + protected ServiceResult ValidateCallRequestItem(OperationContext operationContext, CallMethodRequest callMethodRequest) + { + // check for null structure. + if (callMethodRequest == null) + { + return StatusCodes.BadStructureMissing; + } + + // check object id. + if (NodeId.IsNull(callMethodRequest.ObjectId)) + { + return StatusCodes.BadNodeIdInvalid; + } + + // check method id. + if (NodeId.IsNull(callMethodRequest.MethodId)) + { + return StatusCodes.BadMethodInvalid; + } + + // check input arguments + if (callMethodRequest.InputArguments == null) + { + return StatusCodes.BadStructureMissing; + } + + // passed basic validation. check also access rights and permissions + return ValidatePermissions(operationContext, callMethodRequest.MethodId, PermissionType.Call); + } + + /// + /// Validates a Read or MonitoredItemCreate request. It validates also access rights and role permissions + /// + /// + /// + /// + protected ServiceResult ValidateReadRequest(OperationContext operationContext, ReadValueId readValueId) + { + ServiceResult serviceResult = ReadValueId.Validate(readValueId); + + if (ServiceResult.IsGood(serviceResult)) + { + //any attribute other than Value or RolePermissions + PermissionType requestedPermission = PermissionType.Browse; + if (readValueId.AttributeId == Attributes.RolePermissions) + { + requestedPermission = PermissionType.ReadRolePermissions; + } + else if (readValueId.AttributeId == Attributes.Value) + { + requestedPermission = PermissionType.Read; + } + + // check access rights and role permissions + serviceResult = ValidatePermissions(operationContext, readValueId.NodeId, requestedPermission); + } + return serviceResult; + } + + /// + /// Validates a Write request. It validates also access rights and role permissions + /// + /// + /// + /// + protected ServiceResult ValidateWriteRequest(OperationContext operationContext, WriteValue writeValue) + { + ServiceResult serviceResult = WriteValue.Validate(writeValue); + + if (ServiceResult.IsGood(serviceResult)) + { + PermissionType requestedPermission = PermissionType.WriteAttribute; //any attribute other than Value, RolePermissions or Historizing + if (writeValue.AttributeId == Attributes.RolePermissions) + { + requestedPermission = PermissionType.WriteRolePermissions; + } + else if (writeValue.AttributeId == Attributes.Historizing) + { + requestedPermission = PermissionType.WriteHistorizing; + } + else if (writeValue.AttributeId == Attributes.Value) + { + requestedPermission = PermissionType.Write; + } + + // check access rights and permissions + serviceResult = ValidatePermissions(operationContext, writeValue.NodeId, requestedPermission); + } + return serviceResult; + } + + /// + /// Validates a HistoryRead request. It validates also access rights and role permissions + /// + /// + /// + /// + protected ServiceResult ValidateHistoryReadRequest(OperationContext operationContext, HistoryReadValueId historyReadValueId) + { + ServiceResult serviceResult = HistoryReadValueId.Validate(historyReadValueId); + + if (ServiceResult.IsGood(serviceResult)) + { + // check access rights and permissions + serviceResult = ValidatePermissions(operationContext, historyReadValueId.NodeId, PermissionType.ReadHistory); + } + return serviceResult; + } + + /// + /// Validates a HistoryUpdate request. It validates also access rights and role permissions + /// + /// + /// + /// + protected ServiceResult ValidateHistoryUpdateRequest(OperationContext operationContext, HistoryUpdateDetails historyUpdateDetails) + { + ServiceResult serviceResult = HistoryUpdateDetails.Validate(historyUpdateDetails); + + if (ServiceResult.IsGood(serviceResult)) + { + // check access rights and permissions + PermissionType requiredPermission = DetermineHistoryAccessPermission(historyUpdateDetails); + serviceResult = ValidatePermissions(operationContext, historyUpdateDetails.NodeId, requiredPermission); + } + + return serviceResult; + } + #region Validate Permissions Methods + + /// + /// Check if the Base NodeClass attributes and NameSpace meta-data attributes + /// are valid for the given operation context of the specified node. + /// + /// The Operation Context + /// The node whose attributes are validated + /// The requested permission + /// StatusCode Good if permission is granted, BadUserAccessDenied if not granted + /// or a bad status code describing the validation process failure + protected ServiceResult ValidatePermissions( + OperationContext context, + NodeId nodeId, + PermissionType requestedPermision) + { + if (context.Session != null) + { + INodeManager nodeManager = null; + object nodeHandle = GetManagerHandle(nodeId, out nodeManager); + + return ValidatePermissions(context, nodeManager, nodeHandle, requestedPermision); + } + return StatusCodes.Good; + } + + /// + /// Check if the Base NodeClass attributes and NameSpace meta-data attributes + /// are valid for the given operation context of the specified node. + /// + /// The Operation Context + /// The node manager handling the nodeHandle + /// The node handle of the node whose attributes are validated + /// The requested permission + /// StatusCode Good if permission is granted, BadUserAccessDenied if not granted + /// or a bad status code describing the validation process failure + protected ServiceResult ValidatePermissions( + OperationContext context, + INodeManager nodeManager, + object nodeHandle, + PermissionType requestedPermision) + { + ServiceResult serviceResult = StatusCodes.Good; + + // check if validation is necessary + if (context.Session != null && nodeManager != null && nodeHandle != null) + { + NodeMetadata nodeMetadata = nodeManager.GetNodeMetadata(context, nodeHandle, BrowseResultMask.NodeClass); + if (nodeMetadata != null) + { + // check RolePermissions + serviceResult = ValidateRolePermissions(context, nodeMetadata, requestedPermision); + + if (ServiceResult.IsGood(serviceResult)) + { + // check AccessRestrictions + serviceResult = ValidateAccessRestrictions(context, nodeMetadata); + } + } + } + + return serviceResult; + } + + /// + /// Validate the AccessRestrictions attribute + /// + /// The Operation Context + /// + /// Good if the AccessRestrictions passes the validation + protected static ServiceResult ValidateAccessRestrictions(OperationContext context, NodeMetadata nodeMetadata) + { + ServiceResult serviceResult = StatusCodes.Good; + AccessRestrictionType restrictions = AccessRestrictionType.None; + + if (nodeMetadata.AccessRestrictions != AccessRestrictionType.None) + { + restrictions = nodeMetadata.AccessRestrictions; + } + else if (nodeMetadata.DefaultAccessRestrictions != AccessRestrictionType.None) + { + restrictions = nodeMetadata.DefaultAccessRestrictions; + } + if (restrictions != AccessRestrictionType.None) + { + bool encryptionRequired = (restrictions & AccessRestrictionType.EncryptionRequired) == AccessRestrictionType.EncryptionRequired; + bool signingRequired = (restrictions & AccessRestrictionType.SigningRequired) == AccessRestrictionType.SigningRequired; + bool sessionRequired = (restrictions & AccessRestrictionType.SessionRequired) == AccessRestrictionType.SessionRequired; + + if ((encryptionRequired && + context.ChannelContext.EndpointDescription.SecurityMode != MessageSecurityMode.SignAndEncrypt && + context.ChannelContext.EndpointDescription.TransportProfileUri != Profiles.HttpsBinaryTransport) || + (signingRequired && + context.ChannelContext.EndpointDescription.SecurityMode != MessageSecurityMode.Sign && + context.ChannelContext.EndpointDescription.SecurityMode != MessageSecurityMode.SignAndEncrypt && + context.ChannelContext.EndpointDescription.TransportProfileUri != Profiles.HttpsBinaryTransport) || + (sessionRequired && context.Session == null)) + { + serviceResult = ServiceResult.Create(StatusCodes.BadSecurityModeInsufficient, + "Access restricted to nodeId {0} due to insufficient security mode.", nodeMetadata.NodeId); + } + } + + return serviceResult; + } + + /// + /// Validates the role permissions + /// + /// + /// + /// + /// + protected internal static ServiceResult ValidateRolePermissions(OperationContext context, NodeMetadata nodeMetadata, PermissionType requestedPermission) + { + if (context.Session == null || nodeMetadata == null || requestedPermission == PermissionType.None) + { + // no permission is required hence the validation passes + return StatusCodes.Good; + } + + // get the intersection of user role permissions and role permissions + RolePermissionTypeCollection userRolePermissions = null, rolePermissions = null; + if (nodeMetadata.UserRolePermissions != null && nodeMetadata.UserRolePermissions.Count > 0) + { + userRolePermissions = nodeMetadata.UserRolePermissions; + } + else if (nodeMetadata.DefaultUserRolePermissions != null && nodeMetadata.DefaultUserRolePermissions.Count > 0) + { + userRolePermissions = nodeMetadata.DefaultUserRolePermissions; + } + + if (nodeMetadata.RolePermissions != null && nodeMetadata.RolePermissions.Count > 0) + { + rolePermissions = nodeMetadata.RolePermissions; + } + else + { + rolePermissions = nodeMetadata.DefaultRolePermissions; + } + + if ((userRolePermissions == null || userRolePermissions.Count == 0) && (rolePermissions == null || rolePermissions.Count == 0)) + { + // there is no restriction from role permissions + return StatusCodes.Good; + } + + // group all permissions defined in rolePermissions by RoleId + Dictionary roleIdPermissions = new Dictionary(); + if (rolePermissions != null && rolePermissions.Count > 0) + { + foreach (RolePermissionType rolePermission in rolePermissions) + { + if (roleIdPermissions.ContainsKey(rolePermission.RoleId)) + { + roleIdPermissions[rolePermission.RoleId] |= ((PermissionType)rolePermission.Permissions); + } + else + { + roleIdPermissions[rolePermission.RoleId] = ((PermissionType)rolePermission.Permissions) & requestedPermission; + } + } + } + + // group all permissions defined in userRolePermissions by RoleId + Dictionary roleIdPermissionsDefinedForUser = new Dictionary(); + if (userRolePermissions != null && userRolePermissions.Count > 0) + { + foreach (RolePermissionType rolePermission in userRolePermissions) + { + if (roleIdPermissionsDefinedForUser.ContainsKey(rolePermission.RoleId)) + { + roleIdPermissionsDefinedForUser[rolePermission.RoleId] |= ((PermissionType)rolePermission.Permissions); + } + else + { + roleIdPermissionsDefinedForUser[rolePermission.RoleId] = ((PermissionType)rolePermission.Permissions) & requestedPermission; + } + } + } + + Dictionary commonRoleIdPermissions = null; + if (rolePermissions == null || rolePermissions.Count == 0) + { + // there were no role permissions defined for this node only user role permissions + commonRoleIdPermissions = roleIdPermissionsDefinedForUser; + } + else if (userRolePermissions == null || userRolePermissions.Count == 0) + { + // there were no role permissions defined for this node only user role permissions + commonRoleIdPermissions = roleIdPermissions; + } + else + { + commonRoleIdPermissions = new Dictionary(); + // intersect role permissions from node and user + foreach (NodeId roleId in roleIdPermissions.Keys) + { + if (roleIdPermissionsDefinedForUser.ContainsKey(roleId)) + { + commonRoleIdPermissions[roleId] = roleIdPermissions[roleId] & roleIdPermissionsDefinedForUser[roleId]; + } + } + } + + var currentRoleIds = context.Session.Identity.GrantedRoleIds; + if (currentRoleIds == null || currentRoleIds.Count == 0) + { + return ServiceResult.Create(StatusCodes.BadUserAccessDenied, "Current user has no granted role."); + } + + foreach (NodeId currentRoleId in currentRoleIds) + { + if (commonRoleIdPermissions.ContainsKey(currentRoleId) && commonRoleIdPermissions[currentRoleId] != PermissionType.None) + { + // there is one role that current session has na is listed in requested role + return StatusCodes.Good; + } + } + return ServiceResult.Create(StatusCodes.BadUserAccessDenied, + "The requested permission {0} is not granted for node id {1}.", requestedPermission, nodeMetadata.NodeId); + } + + #endregion + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private List m_nodeManagers; + private long m_lastMonitoredItemId; + private INodeManager[][] m_namespaceManagers; + private uint m_maxContinuationPointsPerBrowse; + #endregion + } + + #region LocalReference Class + /// + /// Stores a reference between NodeManagers that is needs to be created or deleted. + /// + public class LocalReference + { + /// + /// Initializes the reference. + /// + public LocalReference( + NodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + NodeId targetId) + { + m_sourceId = sourceId; + m_referenceTypeId = referenceTypeId; + m_isInverse = isInverse; + m_targetId = targetId; + } + + /// + /// The source of the reference. + /// + public NodeId SourceId + { + get { return m_sourceId; } + } + + /// + /// The type of reference. + /// + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + } + + /// + /// True is the reference is an inverse reference. + /// + public bool IsInverse + { + get { return m_isInverse; } + } + + /// + /// The target of the reference. + /// + public NodeId TargetId + { + get { return m_targetId; } + } + + private NodeId m_sourceId; + private NodeId m_referenceTypeId; + private bool m_isInverse; + private NodeId m_targetId; + } + #endregion +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ResourceManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ResourceManager.cs new file mode 100644 index 00000000..85439449 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ResourceManager.cs @@ -0,0 +1,573 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Resources; +using System.Globalization; +using System.Xml; +using System.Reflection; + +namespace Opc.Ua.Server +{ + /// + /// An object that manages access to localized resources. + /// + public class ResourceManager : IDisposable, ITranslationManager + { + #region Constructors + /// + /// Initializes the resource manager with the server instance that owns it. + /// + public ResourceManager(IServerInternal server, ApplicationConfiguration configuration) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + m_server = server; + m_translationTables = new List(); + } + #endregion + + #region IDisposable Members + /// + /// May be called by the application to clean up resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// Cleans up all resources held by the object. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // nothing to do at this time. + } + } + #endregion + + #region ITranslationManager Members + /// + public virtual LocalizedText Translate(IList preferredLocales, string key, string text, params object[] args) + { + return Translate(preferredLocales, null, new TranslationInfo(key, String.Empty, text, args)); + } + + /// + public LocalizedText Translate(IList preferredLocales, LocalizedText text) + { + return Translate(preferredLocales, text, text.TranslationInfo); + } + + /// + /// Translates a service result. + /// + public ServiceResult Translate(IList preferredLocales, ServiceResult result) + { + if (result == null) + { + return null; + } + + // translate localized text. + LocalizedText translatedText = result.LocalizedText; + + if (LocalizedText.IsNullOrEmpty(result.LocalizedText)) + { + // extract any additional arguments from the translation info. + object[] args = null; + + if (result.LocalizedText != null && result.LocalizedText.TranslationInfo != null) + { + TranslationInfo info = result.LocalizedText.TranslationInfo; + + if (info != null && info.Args != null && info.Args.Length > 0) + { + args = info.Args; + } + } + + if (!String.IsNullOrEmpty(result.SymbolicId)) + { + translatedText = TranslateSymbolicId(preferredLocales, result.SymbolicId, result.NamespaceUri, args); + } + else + { + translatedText = TranslateStatusCode(preferredLocales, result.StatusCode, args); + } + } + else + { + if (preferredLocales == null || preferredLocales.Count == 0) + { + return result; + } + + translatedText = Translate(preferredLocales, result.LocalizedText); + } + + // construct new service result. + ServiceResult translatedResult = new ServiceResult( + result.StatusCode, + result.SymbolicId, + result.NamespaceUri, + translatedText, + result.AdditionalInfo, + Translate(preferredLocales, result.InnerResult)); + + return translatedResult; + } + #endregion + + #region Public Methods + /// + /// Returns the locales supported by the resource manager. + /// + public virtual string[] GetAvailableLocales() + { + lock (m_lock) + { + string[] availableLocales = new string[m_translationTables.Count]; + + for (int ii = 0; ii < m_translationTables.Count; ii++) + { + availableLocales[ii] = m_translationTables[ii].Locale.Name; + } + + return availableLocales; + } + } + + /// + /// Returns the locales supported by the resource manager. + /// + [Obsolete("preferredLocales argument is ignored.")] + public string[] GetAvailableLocales(IEnumerable preferredLocales) + { + return GetAvailableLocales(); + } + + /// + /// Returns the localized form of the text that best matches the preferred locales. + /// + [Obsolete("Replaced by the overrideable ITranslationManager methods.")] + public LocalizedText GetText(IList preferredLocales, string textId, string defaultText, params object[] args) + { + return Translate(preferredLocales, textId, defaultText, args); + } + + /// + /// Adds a translation to the resource manager. + /// + public void Add(string key, string locale, string text) + { + if (key == null) throw new ArgumentNullException(nameof(key)); + if (locale == null) throw new ArgumentNullException(nameof(locale)); + if (text == null) throw new ArgumentNullException(nameof(text)); + + CultureInfo culture = new CultureInfo(locale); + + if (culture.IsNeutralCulture) + { + throw new ArgumentException("Cannot specify neutral locales for translation tables.", nameof(locale)); + } + + lock (m_lock) + { + TranslationTable table = GetTable(culture.Name); + table.Translations[key] = text; + } + } + + /// + /// Adds the translations to the resource manager. + /// + public void Add(string locale, IDictionary translations) + { + if (locale == null) throw new ArgumentNullException(nameof(locale)); + if (translations == null) throw new ArgumentNullException(nameof(translations)); + + CultureInfo culture = new CultureInfo(locale); + + if (culture.IsNeutralCulture) + { + throw new ArgumentException("Cannot specify neutral locales for translation tables.", nameof(locale)); + } + + lock (m_lock) + { + TranslationTable table = GetTable(culture.Name); + + foreach (KeyValuePair translation in translations) + { + table.Translations[translation.Key] = translation.Value; + } + } + } + + /// + /// Adds the translations to the resource manager. + /// + public void Add(uint statusCode, string locale, string text) + { + lock (m_lock) + { + string key = statusCode.ToString(); + + Add(key, locale, text); + + if (m_statusCodeMapping == null) + { + m_statusCodeMapping = new Dictionary(); + } + + if (String.IsNullOrEmpty(locale) || locale == "en-US") + { + m_statusCodeMapping[statusCode] = new TranslationInfo(key, locale, text); + } + } + } + + /// + /// Adds the translations to the resource manager. + /// + public void Add(XmlQualifiedName symbolicId, string locale, string text) + { + lock (m_lock) + { + if (symbolicId != null) + { + string key = symbolicId.ToString(); + + Add(key, locale, text); + + if (m_symbolicIdMapping == null) + { + m_symbolicIdMapping = new Dictionary(); + } + + if (String.IsNullOrEmpty(locale) || locale == "en-US") + { + m_symbolicIdMapping[symbolicId] = new TranslationInfo(key, locale, text); + } + } + } + } + + /// + /// Uses reflection to load default text for standard StatusCodes. + /// + public void LoadDefaultText() + { + System.Reflection.FieldInfo[] fields = typeof(StatusCodes).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); + + foreach (System.Reflection.FieldInfo field in fields) + { + uint? id = field.GetValue(typeof(StatusCodes)) as uint?; + + if (id != null) + { + this.Add(id.Value, "en-US", field.Name); + } + } + } + #endregion + + #region Protected Methods + /// + /// Returns the text for the specified locale (null if the locale is not supported). + /// + [Obsolete("Replaced by the overrideable methods on Translate(IList, LocalizedText, TranslationInfo)")] + protected virtual string GetTextForLocale(string locale, string textId, string defaultText, params object[] args) + { + return null; + } + + /// + /// Translates the text provided. + /// + protected virtual LocalizedText Translate(IList preferredLocales, LocalizedText defaultText, TranslationInfo info) + { + // check for trivial case. + if (info == null || String.IsNullOrEmpty(info.Text)) + { + return defaultText; + } + + // check for exact match. + if (preferredLocales != null && preferredLocales.Count > 0) + { + if (defaultText != null && preferredLocales[0] == defaultText.Locale) + { + return defaultText; + } + + if (preferredLocales[0] == info.Locale) + { + return new LocalizedText(info); + } + } + + // use the text as the key. + string key = info.Key; + + if (key == null) + { + key = info.Text; + } + + // find the best translation. + string translatedText = info.Text; + CultureInfo culture = CultureInfo.InvariantCulture; + + lock (m_lock) + { + translatedText = FindBestTranslation(preferredLocales, key, out culture); + + // use the default if no translation available. + if (translatedText == null) + { + return defaultText; + } + + // get a culture to use for formatting + if (culture == null) + { + if (info.Args != null && info.Args.Length > 0 && !String.IsNullOrEmpty(info.Locale)) + { + try + { + culture = new CultureInfo(info.Locale); + } + catch + { + culture = CultureInfo.InvariantCulture; + } + } + } + } + + // format translated text. + string formattedText = translatedText; + + if (info.Args != null && info.Args.Length > 0) + { + try + { + formattedText = String.Format(culture, translatedText, info.Args); + } + catch + { + formattedText = translatedText; + } + } + + // construct translated localized text. + Opc.Ua.LocalizedText finalText = new LocalizedText(culture.Name, formattedText); + finalText.TranslationInfo = info; + return finalText; + } + #endregion + + #region Private Methods + /// + /// Stores the translations for a locale. + /// + private class TranslationTable + { + public CultureInfo Locale; + public SortedDictionary Translations = new SortedDictionary(); + } + + /// + /// Finds the translation table for the locale. Creates a new table if it does not exist. + /// + private TranslationTable GetTable(string locale) + { + lock (m_lock) + { + // search for table. + for (int ii = 0; ii < m_translationTables.Count; ii++) + { + TranslationTable translationTable = m_translationTables[ii]; + + if (translationTable.Locale.Name == locale) + { + return translationTable; + } + } + + // add table. + TranslationTable table = new TranslationTable(); + table.Locale = new CultureInfo(locale); + m_translationTables.Add(table); + + return table; + } + } + + /// + /// Finds the best translation for the requested locales. + /// + private string FindBestTranslation(IList preferredLocales, string key, out CultureInfo culture) + { + culture = null; + TranslationTable match = null; + + for (int jj = 0; jj < preferredLocales.Count; jj++) + { + // parse the locale. + string language = preferredLocales[jj]; + + int index = language.IndexOf('-'); + + if (index != -1) + { + language = language.Substring(0, index); + } + + // search for translation. + string translatedText = null; + + for (int ii = 0; ii < m_translationTables.Count; ii++) + { + TranslationTable translationTable = m_translationTables[ii]; + + // all done if exact match found. + if (translationTable.Locale.Name == preferredLocales[jj]) + { + if (translationTable.Translations.TryGetValue(key, out translatedText)) + { + culture = translationTable.Locale; + return translatedText; + } + } + + // check for matching language but different region. + if (match == null && translationTable.Locale.TwoLetterISOLanguageName == language) + { + if (translationTable.Translations.TryGetValue(key, out translatedText)) + { + culture = translationTable.Locale; + match = translationTable; + } + + continue; + } + } + + // take a partial match if one found. + if (match != null) + { + return translatedText; + } + } + + // no translations available. + return null; + } + + /// + /// Translates a status code. + /// + private LocalizedText TranslateStatusCode(IList preferredLocales, StatusCode statusCode, object[] args) + { + lock (m_lock) + { + if (m_statusCodeMapping != null) + { + TranslationInfo info = null; + + if (m_statusCodeMapping.TryGetValue(statusCode.Code, out info)) + { + // merge the argument list with the trahslateion info cached for the status code. + if (args != null) + { + info = new TranslationInfo( + info.Key, + info.Locale, + info.Text, + args); + } + + return Translate(preferredLocales, null, info); + } + } + } + + return String.Format("{0:X8}", statusCode.Code); + } + + /// + /// Translates a symbolic id. + /// + private LocalizedText TranslateSymbolicId(IList preferredLocales, string symbolicId, string namespaceUri, object[] args) + { + lock (m_lock) + { + if (m_symbolicIdMapping != null) + { + TranslationInfo info = null; + + if (m_symbolicIdMapping.TryGetValue(new XmlQualifiedName(symbolicId, namespaceUri), out info)) + { + // merge the argument list with the trahslateion info cached for the symbolic id. + if (args != null) + { + info = new TranslationInfo( + info.Key, + info.Locale, + info.Text, + args); + } + + return Translate(preferredLocales, null, info); + } + } + } + + return symbolicId; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + private IServerInternal m_server; + private List m_translationTables; + private Dictionary m_statusCodeMapping; + private Dictionary m_symbolicIdMapping; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs new file mode 100644 index 00000000..1c1a18dd --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs @@ -0,0 +1,496 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Security.Principal; +using System.Globalization; +using System.Threading.Tasks; + +namespace Opc.Ua.Server +{ + /// + /// An object which periodically reads the items and updates the cache. + /// + public class SamplingGroup : IDisposable + { + #region Constructors + /// + /// Creates a new instance of a sampling group. + /// + public SamplingGroup( + IServerInternal server, + INodeManager nodeManager, + List samplingRates, + OperationContext context, + double samplingInterval) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (nodeManager == null) throw new ArgumentNullException(nameof(nodeManager)); + if (samplingRates == null) throw new ArgumentNullException(nameof(samplingRates)); + + m_server = server; + m_nodeManager = nodeManager; + m_samplingRates = samplingRates; + m_session = context.Session; + m_diagnosticsMask = (DiagnosticsMasks)context.DiagnosticsMask & DiagnosticsMasks.OperationAll; + m_samplingInterval = AdjustSamplingInterval(samplingInterval); + + m_itemsToAdd = new List(); + m_itemsToRemove = new List(); + m_items = new Dictionary(); + + // create a event to signal shutdown. + m_shutdownEvent = new ManualResetEvent(true); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + m_shutdownEvent.Set(); + m_samplingRates.Clear(); + } + } + } + #endregion + + #region Public Methods + /// + /// Starts the sampling thread which periodically reads the items in the group. + /// + public void Startup() + { + lock (m_lock) + { + m_shutdownEvent.Reset(); + + Task.Run(() => + { + SampleMonitoredItems(m_samplingInterval); + }); + } + } + + /// + /// Stops the sampling thread. + /// + public void Shutdown() + { + lock (m_lock) + { + m_shutdownEvent.Set(); + m_items.Clear(); + } + } + + /// + /// Checks if the monitored item can be handled by the group. + /// + /// + /// True if the item was added to the group. + /// + /// + /// The ApplyChanges() method must be called to actually start sampling the item. + /// + public bool StartMonitoring(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem) + { + lock (m_lock) + { + if (MeetsGroupCriteria(context, monitoredItem)) + { + m_itemsToAdd.Add(monitoredItem); + monitoredItem.SetSamplingInterval(m_samplingInterval); + return true; + } + + return false; + } + } + + /// + /// Checks if the monitored item can still be handled by the group. + /// + /// + /// False if the item has be marked for removal from the group. + /// + /// + /// The ApplyChanges() method must be called to actually stop sampling the item. + /// + public bool ModifyMonitoring(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem) + { + lock (m_lock) + { + if (m_items.ContainsKey(monitoredItem.Id)) + { + if (MeetsGroupCriteria(context, monitoredItem)) + { + monitoredItem.SetSamplingInterval(m_samplingInterval); + return true; + } + + m_itemsToRemove.Add(monitoredItem); + } + + return false; + } + } + + /// + /// Stops monitoring the item. + /// + /// + /// Returns true if the items was marked for removal from the group. + /// + public bool StopMonitoring(ISampledDataChangeMonitoredItem monitoredItem) + { + lock (m_lock) + { + if (m_items.ContainsKey(monitoredItem.Id)) + { + m_itemsToRemove.Add(monitoredItem); + return true; + } + + return false; + } + } + + /// + /// Updates the group by apply any pending changes. + /// + /// + /// Returns true if the group has no more items and can be dropped. + /// + public bool ApplyChanges() + { + lock (m_lock) + { + // add items. + List itemsToSample = new List(); + + for (int ii = 0; ii < m_itemsToAdd.Count; ii++) + { + ISampledDataChangeMonitoredItem monitoredItem = m_itemsToAdd[ii]; + + if (!m_items.ContainsKey(monitoredItem.Id)) + { + m_items.Add(monitoredItem.Id, monitoredItem); + + if (monitoredItem.MonitoringMode != MonitoringMode.Disabled) + { + itemsToSample.Add(monitoredItem); + } + } + } + + m_itemsToAdd.Clear(); + + // collect first sample. + if (itemsToSample.Count > 0) + { + Task.Run(() => + { + DoSample(itemsToSample); + }); + } + + // remove items. + for (int ii = 0; ii < m_itemsToRemove.Count; ii++) + { + m_items.Remove(m_itemsToRemove[ii].Id); + } + + m_itemsToRemove.Clear(); + + // start the group if it is not running. + if (m_items.Count > 0) + { + Startup(); + } + + // stop the group if it is running. + else if (m_items.Count == 0) + { + Shutdown(); + } + + // can be shutdown if no items left. + return m_items.Count == 0; + } + } + #endregion + + #region Private Methods + /// + /// Checks if the item meets the group's criteria. + /// + private bool MeetsGroupCriteria(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem) + { + // can only sample variables. + if ((monitoredItem.MonitoredItemType & MonitoredItemTypeMask.DataChange) == 0) + { + return false; + } + + // can't sample disabled items. + if (monitoredItem.MonitoringMode == MonitoringMode.Disabled) + { + return false; + } + + // check sampling interval. + if (AdjustSamplingInterval(monitoredItem.SamplingInterval) != m_samplingInterval) + { + return false; + } + + // compare session. + if (context.SessionId != m_session.Id) + { + return false; + } + + // check the diagnostics marks. + if (m_diagnosticsMask != (context.DiagnosticsMask & DiagnosticsMasks.OperationAll)) + { + return false; + } + + return true; + } + + /// + /// Ensures the requested sampling interval lines up with one of the supported sampling rates. + /// + private double AdjustSamplingInterval(double samplingInterval) + { + foreach (SamplingRateGroup samplingRate in m_samplingRates) + { + // groups are ordered by start rate. + if (samplingInterval <= samplingRate.Start) + { + return samplingRate.Start; + } + + // check if within range specfied by the group. + double maxSamplingRate = samplingRate.Start; + + if (samplingRate.Increment > 0) + { + maxSamplingRate += samplingRate.Increment*samplingRate.Count; + } + + if (samplingInterval > maxSamplingRate) + { + continue; + } + + // find sampling rate within rate group. + if (samplingInterval == maxSamplingRate) + { + return maxSamplingRate; + } + + for (double ii = samplingRate.Start; ii <= maxSamplingRate; ii += samplingRate.Increment) + { + if (ii >= samplingInterval) + { + return ii; + } + } + } + + return samplingInterval; + } + + /// + /// Periodically checks if the sessions have timed out. + /// + private void SampleMonitoredItems(object data) + { + try + { + //Utils.Trace("Server: {0} Thread Started.", Thread.CurrentThread.Name); + + int sleepCycle = Convert.ToInt32(data, CultureInfo.InvariantCulture); + int timeToWait = sleepCycle; + + while (m_server.IsRunning) + { + DateTime start = DateTime.UtcNow; + + // wait till next sample. + if (m_shutdownEvent.WaitOne(timeToWait)) + { + break; + } + + // get current list of items to sample. + List items = new List(); + + lock (m_lock) + { + uint disabledItemCount = 0; + Dictionary.Enumerator enumerator = m_items.GetEnumerator(); + + while (enumerator.MoveNext()) + { + ISampledDataChangeMonitoredItem monitoredItem = enumerator.Current.Value; + + if (monitoredItem.MonitoringMode == MonitoringMode.Disabled) + { + disabledItemCount++; + continue; + } + + // check whether the item should be sampled. + //if (!monitoredItem.SamplingIntervalExpired()) + //{ + // continue; + //} + + items.Add(monitoredItem); + } + } + + // sample the values. + DoSample(items); + + int delay = (int)(DateTime.UtcNow - start).TotalMilliseconds; + timeToWait = sleepCycle; + + if (delay > sleepCycle) + { + timeToWait = 2*sleepCycle - delay; + + if (timeToWait < 0) + { + Utils.Trace("WARNING: SamplingGroup cannot sample fast enough. TimeToSample={0}ms, SamplingInterval={1}ms", delay, sleepCycle); + timeToWait = sleepCycle; + } + } + } + + //Utils.Trace("Server: {0} Thread Exited Normally.", Thread.CurrentThread.Name); + } + catch (Exception e) + { + Utils.Trace(e, "Server: SampleMonitoredItems Thread Exited Unexpectedly."); + } + } + + /// + /// Samples the values of the items. + /// + private void DoSample(object state) + { + try + { + List items = state as List; + + // read values for all enabled items. + if (items != null && items.Count > 0) + { + ReadValueIdCollection itemsToRead = new ReadValueIdCollection(items.Count); + DataValueCollection values = new DataValueCollection(items.Count); + List errors = new List(items.Count); + + // allocate space for results. + for (int ii = 0; ii < items.Count; ii++) + { + ReadValueId readValueId = items[ii].GetReadValueId(); + readValueId.Processed = false; + itemsToRead.Add(readValueId); + + values.Add(null); + errors.Add(null); + } + + OperationContext context = new OperationContext(m_session, m_diagnosticsMask); + + // read values. + m_nodeManager.Read( + context, + 0, + itemsToRead, + values, + errors); + + // update monitored items. + for (int ii = 0; ii < items.Count; ii++) + { + if (values[ii] == null) + { + values[ii] = new DataValue(StatusCodes.BadInternalError, DateTime.UtcNow); + } + + items[ii].QueueValue(values[ii], errors[ii]); + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Server: Unexpected error sampling values."); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private INodeManager m_nodeManager; + private Session m_session; + private DiagnosticsMasks m_diagnosticsMask; + private double m_samplingInterval; + private List m_itemsToAdd; + private List m_itemsToRemove; + private Dictionary m_items; + private ManualResetEvent m_shutdownEvent; + private List m_samplingRates; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs new file mode 100644 index 00000000..c30dd763 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs @@ -0,0 +1,527 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Security.Principal; + +namespace Opc.Ua.Server +{ + /// + /// An object that manages the sampling groups for a node manager. + /// + public class SamplingGroupManager : IDisposable + { + #region Constructors + /// + /// Creates a new instance of a sampling group. + /// + public SamplingGroupManager( + IServerInternal server, + INodeManager nodeManager, + uint maxQueueSize, + IEnumerable samplingRates) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (nodeManager == null) throw new ArgumentNullException(nameof(nodeManager)); + + m_server = server; + m_nodeManager = nodeManager; + m_samplingGroups = new List(); + m_sampledItems = new Dictionary(); + m_maxQueueSize = maxQueueSize; + + if (samplingRates != null) + { + m_samplingRates = new List(samplingRates); + + if (m_samplingRates.Count == 0) + { + m_samplingRates = new List(s_DefaultSamplingRates); + } + } + + if (m_samplingRates == null) + { + m_samplingRates = new List(s_DefaultSamplingRates); + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List samplingGroups = null; + List monitoredItems = null; + + lock (m_lock) + { + samplingGroups = new List(m_samplingGroups); + m_samplingGroups.Clear(); + + monitoredItems = new List(m_sampledItems.Keys); + m_sampledItems.Clear(); + } + + foreach (SamplingGroup samplingGroup in samplingGroups) + { + Utils.SilentDispose(samplingGroup); + } + + foreach (MonitoredItem monitoredItem in monitoredItems) + { + Utils.SilentDispose(monitoredItem); + } + } + } + #endregion + + #region Public Methods + /// + /// Stops all sampling groups and clears all items. + /// + public virtual void Shutdown() + { + lock (m_lock) + { + // stop sampling groups. + foreach (SamplingGroup samplingGroup in m_samplingGroups) + { + samplingGroup.Shutdown(); + } + + m_samplingGroups.Clear(); + m_sampledItems.Clear(); + } + } + + /// + /// Creates a new monitored item and calls StartMonitoring(). + /// + public virtual MonitoredItem CreateMonitoredItem( + OperationContext context, + uint subscriptionId, + double publishingInterval, + TimestampsToReturn timestampsToReturn, + uint monitoredItemId, + object managerHandle, + MonitoredItemCreateRequest itemToCreate, + Range range, + double minimumSamplingInterval) + { + // use publishing interval as sampling interval. + double samplingInterval = itemToCreate.RequestedParameters.SamplingInterval; + + if (samplingInterval < 0) + { + samplingInterval = publishingInterval; + } + + // limit the sampling interval. + if (minimumSamplingInterval > 0 && samplingInterval < minimumSamplingInterval) + { + samplingInterval = minimumSamplingInterval; + } + + // calculate queue size. + uint queueSize = itemToCreate.RequestedParameters.QueueSize; + + if (queueSize > m_maxQueueSize) + { + queueSize = m_maxQueueSize; + } + + // get filter. + MonitoringFilter filter = null; + + if (!ExtensionObject.IsNull(itemToCreate.RequestedParameters.Filter)) + { + filter = itemToCreate.RequestedParameters.Filter.Body as MonitoringFilter; + } + + // update limits for event filters. + if (filter is EventFilter) + { + if (queueSize == 0) + { + queueSize = Int32.MaxValue; + } + + samplingInterval = 0; + } + + // check if the queue size was not specified. + if (queueSize == 0) + { + queueSize = 1; + } + + // create monitored item. + MonitoredItem monitoredItem = CreateMonitoredItem( + m_server, + m_nodeManager, + managerHandle, + subscriptionId, + monitoredItemId, + context.Session, + itemToCreate.ItemToMonitor, + context.DiagnosticsMask, + timestampsToReturn, + itemToCreate.MonitoringMode, + itemToCreate.RequestedParameters.ClientHandle, + filter, + filter, + range, + samplingInterval, + queueSize, + itemToCreate.RequestedParameters.DiscardOldest, + samplingInterval); + + // start sampling. + StartMonitoring(context, monitoredItem); + + // return item. + return monitoredItem; + } + + /// + /// Creates a new monitored item. + /// + /// The server. + /// The node manager. + /// The manager handle. + /// The subscription id. + /// The id. + /// The session. + /// The item to monitor. + /// The diagnostics masks. + /// The timestamps to return. + /// The monitoring mode. + /// The client handle. + /// The original filter. + /// The filter to use. + /// The range. + /// The sampling interval. + /// Size of the queue. + /// if set to true [discard oldest]. + /// The minimum sampling interval. + /// The monitored item. + protected virtual MonitoredItem CreateMonitoredItem( + IServerInternal server, + INodeManager nodeManager, + object managerHandle, + uint subscriptionId, + uint id, + Session session, + ReadValueId itemToMonitor, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoringMode monitoringMode, + uint clientHandle, + MonitoringFilter originalFilter, + MonitoringFilter filterToUse, + Range range, + double samplingInterval, + uint queueSize, + bool discardOldest, + double minimumSamplingInterval) + { + return new MonitoredItem( + server, + nodeManager, + managerHandle, + subscriptionId, + id, + session, + itemToMonitor, + diagnosticsMasks, + timestampsToReturn, + monitoringMode, + clientHandle, + originalFilter, + filterToUse, + range, + samplingInterval, + queueSize, + discardOldest, + minimumSamplingInterval); + } + + /// + /// Modifies a monitored item and calls ModifyMonitoring(). + /// + public virtual ServiceResult ModifyMonitoredItem( + OperationContext context, + TimestampsToReturn timestampsToReturn, + ISampledDataChangeMonitoredItem monitoredItem, + MonitoredItemModifyRequest itemToModify, + Range range) + { + // use existing interval as sampling interval. + double samplingInterval = itemToModify.RequestedParameters.SamplingInterval; + + if (samplingInterval < 0) + { + samplingInterval = monitoredItem.SamplingInterval; + } + + // limit the sampling interval. + double minimumSamplingInterval = monitoredItem.MinimumSamplingInterval; + + if (minimumSamplingInterval > 0 && samplingInterval < minimumSamplingInterval) + { + samplingInterval = minimumSamplingInterval; + } + + // calculate queue size. + uint queueSize = itemToModify.RequestedParameters.QueueSize; + + if (queueSize == 0) + { + queueSize = monitoredItem.QueueSize; + } + + if (queueSize > m_maxQueueSize) + { + queueSize = m_maxQueueSize; + } + + // get filter. + MonitoringFilter filter = null; + + if (!ExtensionObject.IsNull(itemToModify.RequestedParameters.Filter)) + { + filter = (MonitoringFilter)itemToModify.RequestedParameters.Filter.Body; + } + + // update limits for event filters. + if (filter is EventFilter) + { + samplingInterval = 0; + } + + // modify the item attributes. + ServiceResult error = monitoredItem.ModifyAttributes( + context.DiagnosticsMask, + timestampsToReturn, + itemToModify.RequestedParameters.ClientHandle, + filter, + filter, + range, + samplingInterval, + queueSize, + itemToModify.RequestedParameters.DiscardOldest); + + // state of item did not change if an error returned here. + if (ServiceResult.IsBad(error)) + { + return error; + } + + // update sampling. + ModifyMonitoring(context, monitoredItem); + + // everything is ok. + return ServiceResult.Good; + } + + /// + /// Starts monitoring the item. + /// + /// + /// It will use the external source for monitoring if the source accepts the item. + /// The changes will not take affect until the ApplyChanges() method is called. + /// + public virtual void StartMonitoring(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem) + { + lock (m_lock) + { + // do nothing for disabled or exception based items. + if (monitoredItem.MonitoringMode == MonitoringMode.Disabled || monitoredItem.MinimumSamplingInterval == 0) + { + m_sampledItems.Add(monitoredItem, null); + return; + } + + // find a suitable sampling group. + foreach (SamplingGroup samplingGroup in m_samplingGroups) + { + if (samplingGroup.StartMonitoring(context, monitoredItem)) + { + m_sampledItems.Add(monitoredItem, samplingGroup); + return; + } + } + + // create a new sampling group. + SamplingGroup samplingGroup2 = new SamplingGroup( + m_server, + m_nodeManager, + m_samplingRates, + context, + monitoredItem.SamplingInterval); + + samplingGroup2.StartMonitoring(context, monitoredItem); + + m_samplingGroups.Add(samplingGroup2); + m_sampledItems.Add(monitoredItem, samplingGroup2); + } + } + + /// + /// Changes monitoring attributes the item. + /// + /// + /// It will call the external source to change the monitoring if an external source was provided originally. + /// The changes will not take affect until the ApplyChanges() method is called. + /// + public virtual void ModifyMonitoring(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem) + { + lock (m_lock) + { + // find existing sampling group. + SamplingGroup samplingGroup = null; + + if (m_sampledItems.TryGetValue(monitoredItem, out samplingGroup)) + { + if (samplingGroup != null) + { + if (samplingGroup.ModifyMonitoring(context, monitoredItem)) + { + return; + } + } + + m_sampledItems.Remove(monitoredItem); + } + + // assign to a new sampling group. + StartMonitoring(context, monitoredItem); + return; + } + } + + /// + /// Stops monitoring the item. + /// + /// + /// It will call the external source to stop the monitoring if an external source was provided originally. + /// The changes will not take affect until the ApplyChanges() method is called. + /// + public virtual void StopMonitoring(ISampledDataChangeMonitoredItem monitoredItem) + { + lock (m_lock) + { + // check for sampling group. + SamplingGroup samplingGroup = null; + + if (m_sampledItems.TryGetValue(monitoredItem, out samplingGroup)) + { + if (samplingGroup != null) + { + samplingGroup.StopMonitoring(monitoredItem); + } + + m_sampledItems.Remove(monitoredItem); + return; + } + } + } + + /// + /// Applies any pending changes caused by adding,changing or removing monitored items. + /// + public virtual void ApplyChanges() + { + lock (m_lock) + { + List unusedGroups = new List(); + + // apply changes to groups. + foreach (SamplingGroup samplingGroup in m_samplingGroups) + { + if (samplingGroup.ApplyChanges()) + { + unusedGroups.Add(samplingGroup); + } + } + + // remove unused groups. + foreach (SamplingGroup samplingGroup in unusedGroups) + { + samplingGroup.Shutdown(); + m_samplingGroups.Remove(samplingGroup); + } + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private INodeManager m_nodeManager; + private List m_samplingGroups; + private Dictionary m_sampledItems; + private List m_samplingRates; + private uint m_maxQueueSize; + + /// + /// The default sampling rates. + /// + private static readonly SamplingRateGroup[] s_DefaultSamplingRates = new SamplingRateGroup[] + { + new SamplingRateGroup(100, 100, 4), + new SamplingRateGroup(500, 250, 2), + new SamplingRateGroup(1000, 1000, 4), + new SamplingRateGroup(5000, 2500, 2), + new SamplingRateGroup(10000, 10000, 4), + new SamplingRateGroup(60000, 30000, 10), + new SamplingRateGroup(300000, 60000, 15), + new SamplingRateGroup(900000, 300000, 9), + new SamplingRateGroup(3600000, 900000, 0) + }; + + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ServerSystemContext.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ServerSystemContext.cs new file mode 100644 index 00000000..54de8e1b --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/NodeManager/ServerSystemContext.cs @@ -0,0 +1,182 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Server +{ + /// + /// A generic implementation for ISystemContext interface. + /// + public class ServerSystemContext : Opc.Ua.SystemContext + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The server. + public ServerSystemContext(IServerInternal server) + { + OperationContext = null; + NamespaceUris = server.NamespaceUris; + ServerUris = server.ServerUris; + TypeTable = server.TypeTree; + EncodeableFactory = server.Factory; + } + + /// + /// Initializes a new instance of the class. + /// + /// The server. + /// The context. + public ServerSystemContext(IServerInternal server, OperationContext context) + { + OperationContext = context; + NamespaceUris = server.NamespaceUris; + ServerUris = server.ServerUris; + TypeTable = server.TypeTree; + EncodeableFactory = server.Factory; + } + + /// + /// Initializes a new instance of the class. + /// + /// The server. + /// The session. + public ServerSystemContext(IServerInternal server, Session session) + { + OperationContext = null; + SessionId = session.Id; + UserIdentity = session.Identity; + PreferredLocales = session.PreferredLocales; + NamespaceUris = server.NamespaceUris; + ServerUris = server.ServerUris; + TypeTable = server.TypeTree; + EncodeableFactory = server.Factory; + } + #endregion + + #region Public Members + /// + /// The operation context associated with system context. + /// + /// The operation context. + public new OperationContext OperationContext + { + get { return base.OperationContext as OperationContext; } + set { base.OperationContext = value; } + } + + /// + /// Creates a copy of the context that can be used with the specified operation context. + /// + /// A copy of the system context. + public ServerSystemContext Copy() + { + return (ServerSystemContext)MemberwiseClone(); + } + + /// + /// Creates a copy of the context that can be used with the specified operation context. + /// + /// The operation context to use. + /// + /// A copy of the system context that references the new operation context. + /// + public ServerSystemContext Copy(OperationContext context) + { + ServerSystemContext copy = (ServerSystemContext)MemberwiseClone(); + + if (context != null) + { + copy.OperationContext = context; + } + + return copy; + } + + /// + /// Creates a copy of the context that can be used with the specified session. + /// + /// The session to use. + /// + /// A copy of the system context that references the new session. + /// + public ServerSystemContext Copy(Session session) + { + ServerSystemContext copy = (ServerSystemContext)MemberwiseClone(); + + copy.OperationContext = null; + + if (session != null) + { + copy.SessionId = session.Id; + copy.UserIdentity = session.Identity; + copy.PreferredLocales = session.PreferredLocales; + } + else + { + copy.SessionId = null; + copy.UserIdentity = null; + copy.PreferredLocales = null; + } + + return copy; + } + + /// + /// Creates a copy of the context that can be used with the specified server context. + /// + /// The server context to use. + /// + /// A copy of the system context that references the new server context. + /// + public ServerSystemContext Copy(ServerSystemContext context) + { + ServerSystemContext copy = (ServerSystemContext)MemberwiseClone(); + + if (context != null) + { + copy.OperationContext = context.OperationContext; + copy.SessionId = context.SessionId; + copy.UserIdentity = context.UserIdentity; + copy.PreferredLocales = context.PreferredLocales; + copy.NamespaceUris = context.NamespaceUris; + copy.ServerUris = context.ServerUris; + copy.TypeTable = context.TypeTable; + copy.EncodeableFactory = context.EncodeableFactory; + } + + return copy; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Opc.Ua.Server.csproj b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Opc.Ua.Server.csproj new file mode 100644 index 00000000..7c7976a5 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Opc.Ua.Server.csproj @@ -0,0 +1,33 @@ + + + + Opc.Ua.Server + $(LibTargetFrameworks) + 6 + OPCFoundation.NetStandard.Opc.Ua.Server + Opc.Ua.Server + OPC UA Server Class Library + PackageReference + true + true + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..29e70b25 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Properties/AssemblyInfo.cs @@ -0,0 +1,26 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ +using System.Runtime.CompilerServices; + +#if HAVE_SERVER_TESTS // TODO: uncomment when server tests become available +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.Server.Tests, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.Server.Tests")] +#endif +#endif diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/IServerInternal.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/IServerInternal.cs new file mode 100644 index 00000000..99a70167 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/IServerInternal.cs @@ -0,0 +1,250 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.ObjectModel; +using System.Collections.Generic; +using System.Text; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Principal; +using System.Security.Cryptography.X509Certificates; + +#pragma warning disable 0618 + +namespace Opc.Ua.Server +{ + /// + /// The interface that a server exposes to objects that it contains. + /// + public interface IServerInternal + { + /// + /// The endpoint addresses used by the server. + /// + /// The endpoint addresses. + IEnumerable EndpointAddresses { get; } + + /// + /// The context to use when serializing/deserializing extension objects. + /// + /// The message context. + ServiceMessageContext MessageContext { get; } + + /// + /// The default system context for the server. + /// + /// The default system context. + ServerSystemContext DefaultSystemContext { get; } + + /// + /// The table of namespace uris known to the server. + /// + /// The namespace URIs. + NamespaceTable NamespaceUris { get; } + + /// + /// The table of remote server uris known to the server. + /// + /// The server URIs. + StringTable ServerUris { get; } + + /// + /// The factory used to create encodeable objects that the server understands. + /// + /// The factory. + EncodeableFactory Factory { get; } + + /// + /// The datatypes, object types and variable types known to the server. + /// + /// The type tree. + /// + /// The type tree table is a global object that all components of a server have access to. + /// Node managers must populate this table with all types that they define. + /// This object is thread safe. + /// + TypeTable TypeTree { get; } + +#if LEGACY_CORENODEMANAGER + /// + /// Returns the source for a types that has shared components defined. + /// + /// The type sources. + /// + /// Some types define shared components which are used by all instances of the type. This + /// table contains sources for those shared components. The namespace qualified browse name + /// is assumed to be a unique identifier for a type. + /// + TypeSourceTable TypeSources { get; } +#endif + + /// + /// The master node manager for the server. + /// + /// The node manager. + MasterNodeManager NodeManager { get; } + + /// + /// The internal node manager for the servers. + /// + /// The core node manager. + CoreNodeManager CoreNodeManager { get; } + + /// + /// Returns the node manager that managers the server diagnostics. + /// + /// The diagnostics node manager. + DiagnosticsNodeManager DiagnosticsNodeManager { get; } + + /// + /// The manager for events that all components use to queue events that occur. + /// + /// The event manager. + EventManager EventManager { get; } + + /// + /// A manager for localized resources that components can use to localize text. + /// + /// The resource manager. + ResourceManager ResourceManager { get; } + + /// + /// A manager for outstanding requests that allows components to receive notifications if the timeout or are cancelled. + /// + /// The request manager. + RequestManager RequestManager { get; } + + /// + /// A manager for aggregate calculators supported by the server. + /// + /// The aggregate manager. + AggregateManager AggregateManager { get; } + + /// + /// The manager for active sessions. + /// + /// The session manager. + ISessionManager SessionManager { get; } + + /// + /// The manager for active subscriptions. + /// + ISubscriptionManager SubscriptionManager { get; } + + /// + /// Whether the server is currently running. + /// + /// + /// true if this instance is running; otherwise, false. + /// + /// + /// This flag is set to false when the server shuts down. Threads running should check this flag whenever + /// they return from a blocking operation. If it is false the thread should clean up and terminate. + /// + bool IsRunning { get; } + + /// + /// Returns the status object for the server. + /// + /// The status. + [Obsolete("No longer thread safe. Must not use.")] + ServerStatusValue Status { get; } + + /// + /// Gets or sets the current state of the server. + /// + /// The state of the current. + ServerState CurrentState { get; set; } + + /// + /// Returns the Server object node + /// + /// The Server object node. + ServerObjectState ServerObject { get; } + + /// + /// Used to synchronize access to the server diagnostics. + /// + /// The diagnostics lock. + object DiagnosticsLock { get; } + + /// + /// Used to synchronize write access to the server diagnostics. + /// + /// The diagnostics lock. + object DiagnosticsWriteLock { get; } + + /// + /// Returns the diagnostics structure for the server. + /// + /// The server diagnostics. + ServerDiagnosticsSummaryDataType ServerDiagnostics { get; } + + /// + /// Whether the server is collecting diagnostics. + /// + /// true if diagnostics is enabled; otherwise, false. + bool DiagnosticsEnabled { get; } + + /// + /// Closes the specified session. + /// + /// The context. + /// The session identifier. + /// if set to true subscriptions are to be deleted. + void CloseSession(OperationContext context, NodeId sessionId, bool deleteSubscriptions); + + /// + /// Deletes the specified subscription. + /// + /// The subscription identifier. + void DeleteSubscription(uint subscriptionId); + + /// + /// Called by any component to report a global event. + /// + /// The event. + void ReportEvent(IFilterTarget e); + + /// + /// Called by any component to report a global event. + /// + /// The context. + /// The event. + void ReportEvent(ISystemContext context, IFilterTarget e); + + /// + /// Refreshes the conditions for the specified subscription. + /// + /// The context. + /// The subscription identifier. + void ConditionRefresh(OperationContext context, uint subscriptionId); + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/OperationContext.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/OperationContext.cs new file mode 100644 index 00000000..6fdaa396 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/OperationContext.cs @@ -0,0 +1,322 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; + +namespace Opc.Ua.Server +{ + /// + /// Stores information used while a thread is completing an operation on behalf of a client. + /// + public class OperationContext : IOperationContext + { + #region Constructors + /// + /// Initializes the context with a session. + /// + /// The request header. + /// Type of the request. + /// The identity used in the request. + public OperationContext(RequestHeader requestHeader, RequestType requestType, IUserIdentity identity = null) + { + if (requestHeader == null) throw new ArgumentNullException(nameof(requestHeader)); + + m_channelContext = SecureChannelContext.Current; + m_session = null; + m_identity = identity; + m_preferredLocales = new string[0]; + m_diagnosticsMask = (DiagnosticsMasks)requestHeader.ReturnDiagnostics; + m_stringTable = new StringTable(); + m_auditLogEntryId = requestHeader.AuditEntryId; + m_requestId = Utils.IncrementIdentifier(ref s_lastRequestId); + m_requestType = requestType; + m_clientHandle = requestHeader.RequestHandle; + m_operationDeadline = DateTime.MaxValue; + + if (requestHeader.TimeoutHint > 0) + { + m_operationDeadline = DateTime.UtcNow.AddMilliseconds(requestHeader.TimeoutHint); + } + } + + /// + /// Initializes the context with a session. + /// + /// The request header. + /// Type of the request. + /// The session. + public OperationContext(RequestHeader requestHeader, RequestType requestType, Session session) + { + if (requestHeader == null) throw new ArgumentNullException(nameof(requestHeader)); + if (session == null) throw new ArgumentNullException(nameof(session)); + + m_channelContext = SecureChannelContext.Current; + m_session = session; + m_identity = session.EffectiveIdentity; + m_preferredLocales = session.PreferredLocales; + m_diagnosticsMask = (DiagnosticsMasks)requestHeader.ReturnDiagnostics; + m_stringTable = new StringTable(); + m_auditLogEntryId = requestHeader.AuditEntryId; + m_requestId = Utils.IncrementIdentifier(ref s_lastRequestId); + m_requestType = requestType; + m_clientHandle = requestHeader.RequestHandle; + m_operationDeadline = DateTime.MaxValue; + + if (requestHeader.TimeoutHint > 0) + { + m_operationDeadline = DateTime.UtcNow.AddMilliseconds(requestHeader.TimeoutHint); + } + } + + /// + /// Initializes the context with a session. + /// + /// The session. + /// The diagnostics masks. + public OperationContext(Session session, DiagnosticsMasks diagnosticsMasks) + { + if (session == null) throw new ArgumentNullException(nameof(session)); + + m_channelContext = null; + m_session = session; + m_identity = session.EffectiveIdentity; + m_preferredLocales = session.PreferredLocales; + m_diagnosticsMask = diagnosticsMasks; + m_stringTable = new StringTable(); + m_auditLogEntryId = null; + m_requestId = 0; + m_requestType = RequestType.Unknown; + m_clientHandle = 0; + m_operationDeadline = DateTime.MaxValue; + } + + /// + /// Initializes the context with a monitored item. + /// + /// The monitored item. + public OperationContext(IMonitoredItem monitoredItem) + { + if (monitoredItem == null) throw new ArgumentNullException(nameof(monitoredItem)); + + m_channelContext = null; + m_session = monitoredItem.Session; + + if (m_session != null) + { + m_identity = m_session.Identity; + m_preferredLocales = m_session.PreferredLocales; + } + + m_diagnosticsMask = DiagnosticsMasks.SymbolicId; + m_stringTable = new StringTable(); + m_auditLogEntryId = null; + m_requestId = 0; + m_requestType = RequestType.Unknown; + m_clientHandle = 0; + m_operationDeadline = DateTime.MaxValue; + } + #endregion + + #region Public Properties + /// + /// The context for the secure channel used to send the request. + /// + /// The channel context. + public SecureChannelContext ChannelContext + { + get { return m_channelContext; } + } + + /// + /// The session associated with the context. + /// + /// The session. + public Session Session + { + get { return m_session; } + } + + /// + /// The security policy used for the secure channel. + /// + /// The security policy URI. + public string SecurityPolicyUri + { + get + { + if (m_channelContext != null && m_channelContext.EndpointDescription != null) + { + return m_channelContext.EndpointDescription.SecurityPolicyUri; + } + + return null; + } + } + + /// + /// The type of request. + /// + /// The type of the request. + public RequestType RequestType + { + get { return m_requestType; } + } + + /// + /// A unique identifier assigned to the request by the server. + /// + /// The request id. + public uint RequestId + { + get { return m_requestId; } + } + + /// + /// The handle assigned by the client to the request. + /// + /// The client handle. + public uint ClientHandle + { + get { return m_clientHandle; } + } + + /// + /// Updates the status code (thread safe). + /// + /// The status code. + public void SetStatusCode(StatusCode statusCode) + { + Interlocked.Exchange(ref m_operationStatus, (long)statusCode.Code); + } + #endregion + + #region IOperationContext Members + /// + /// The identifier for the session (null if multiple sessions are associated with the operation). + /// + /// The session id. + public NodeId SessionId + { + get + { + if (m_session != null) + { + return m_session.Id; + } + + return null; + } + } + + /// + /// The identity context to use when processing the request. + /// + /// The user identity. + public IUserIdentity UserIdentity + { + get { return m_identity; } + } + + /// + /// The locales to use for the operation. + /// + /// The preferred locales. + public IList PreferredLocales + { + get { return m_preferredLocales; } + } + + /// + /// The diagnostics mask specified with the request. + /// + /// The diagnostics mask. + public DiagnosticsMasks DiagnosticsMask + { + get { return m_diagnosticsMask; } + } + + /// + /// A table of diagnostics strings to return in the response. + /// + /// The string table. + /// + /// This object is thread safe. + /// + public StringTable StringTable + { + get { return m_stringTable; } + } + + /// + /// When the request times out. + /// + /// The operation deadline. + public DateTime OperationDeadline + { + get { return m_operationDeadline; } + } + + /// + /// The current status of the request (used to check for timeouts/client cancel requests). + /// + /// The operation status. + public StatusCode OperationStatus + { + get { return (uint)m_operationStatus; } + } + + /// + /// The audit log entry id provided by the client which must be included in an audit events generated by the server. + /// + /// The audit entry id. + public string AuditEntryId + { + get { return m_auditLogEntryId; } + } + #endregion + + #region Private Fields + private SecureChannelContext m_channelContext; + private Session m_session; + private IUserIdentity m_identity; + private IList m_preferredLocales; + private DiagnosticsMasks m_diagnosticsMask; + private StringTable m_stringTable; + private string m_auditLogEntryId; + private uint m_requestId; + private RequestType m_requestType; + private uint m_clientHandle; + private DateTime m_operationDeadline; + private long m_operationStatus; + private static long s_lastRequestId; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/RequestManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/RequestManager.cs new file mode 100644 index 00000000..a8142b04 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/RequestManager.cs @@ -0,0 +1,275 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; + +namespace Opc.Ua.Server +{ + /// + /// An object that manages requests from within the server. + /// + public class RequestManager : IDisposable + { + #region Constructors + /// + /// Initilizes the manager. + /// + /// + public RequestManager(IServerInternal server) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + + m_server = server; + m_requests = new Dictionary(); + m_requestTimer = null; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_requestTimer")] + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List operations = null; + + lock (m_requestsLock) + { + operations = new List(m_requests.Values); + m_requests.Clear(); + } + + foreach (OperationContext operation in operations) + { + operation.SetStatusCode(StatusCodes.BadSessionClosed); + } + + Utils.SilentDispose(m_requestTimer); + m_requestTimer = null; + } + } + #endregion + + #region Public Members + /// + /// Raised when the status of an outstanding request changes. + /// + public event RequestCancelledEventHandler RequestCancelled + { + add + { + lock (m_lock) + { + m_RequestCancelled += value; + } + } + + remove + { + lock (m_lock) + { + m_RequestCancelled -= value; + } + } + } + + /// + /// Called when a new request arrives. + /// + /// + public void RequestReceived(OperationContext context) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + lock (m_requestsLock) + { + m_requests.Add(context.RequestId, context); + + if (context.OperationDeadline < DateTime.MaxValue && m_requestTimer == null) + { + m_requestTimer = new Timer(OnTimerExpired, null, 1000, 1000); + } + } + } + + /// + /// Called when a request completes (normally or abnormally). + /// + public void RequestCompleted(OperationContext context) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + lock (m_requestsLock) + { + // find the completed request. + bool deadlineExists = false; + + foreach (OperationContext request in m_requests.Values) + { + if (request.RequestId == context.RequestId) + { + continue; + } + + if (request.OperationDeadline < DateTime.MaxValue) + { + deadlineExists = true; + } + } + + // check if the timer can be cancelled. + if (m_requestTimer != null && !deadlineExists) + { + m_requestTimer.Dispose(); + m_requestTimer = null; + } + + // remove the request. + m_requests.Remove(context.RequestId); + } + } + + /// + /// Called when the client wishes to cancel one or more requests. + /// + public void CancelRequests(uint requestHandle, out uint cancelCount) + { + List cancelledRequests = new List(); + + // flag requests as cancelled. + lock (m_requestsLock) + { + foreach (OperationContext request in m_requests.Values) + { + if (request.ClientHandle == requestHandle) + { + request.SetStatusCode(StatusCodes.BadRequestCancelledByRequest); + cancelledRequests.Add(request.RequestId); + } + } + } + + // return the number of requests found. + cancelCount = (uint)cancelledRequests.Count; + + // raise notifications. + lock (m_lock) + { + for (int ii = 0; ii < cancelledRequests.Count; ii++) + { + if (m_RequestCancelled != null) + { + try + { + m_RequestCancelled(this, cancelledRequests[ii], StatusCodes.BadRequestCancelledByRequest); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error reporting RequestCancelled event."); + } + } + } + } + } + #endregion + + #region Private Methods + /// + /// Checks for any expired requests and changes their status. + /// + private void OnTimerExpired(object state) + { + List expiredRequests = new List(); + + // flag requests as expired. + lock (m_requestsLock) + { + foreach (OperationContext request in m_requests.Values) + { + if (request.OperationDeadline < DateTime.UtcNow) + { + request.SetStatusCode(StatusCodes.BadTimeout); + expiredRequests.Add(request.RequestId); + } + } + } + + // raise notifications. + lock (m_lock) + { + for (int ii = 0; ii < expiredRequests.Count; ii++) + { + if (m_RequestCancelled != null) + { + try + { + m_RequestCancelled(this, expiredRequests[ii], StatusCodes.BadTimeout); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error reporting RequestCancelled event."); + } + } + } + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + private IServerInternal m_server; + private Dictionary m_requests; + private object m_requestsLock = new object(); + private Timer m_requestTimer; + private event RequestCancelledEventHandler m_RequestCancelled; + #endregion + } + + /// + /// Called when a request is cancelled. + /// + public delegate void RequestCancelledEventHandler( + RequestManager source, + uint requestId, + StatusCode statusCode); +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/ReverseConnectServer.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/ReverseConnectServer.cs new file mode 100644 index 00000000..75c777c9 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/ReverseConnectServer.cs @@ -0,0 +1,444 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Collections.ObjectModel; +using System.Linq; +using System.Threading; + +namespace Opc.Ua.Server +{ + /// + /// Reverse connection states. + /// + public enum ReverseConnectState + { + /// + /// The connection is closed. + /// + Closed = 0, + + /// + /// The server is connecting. + /// + Connecting = 1, + + /// + /// The server is connected with a client. + /// + Connected = 2, + + /// + /// The client rejected the connection with the server. + /// + Rejected = 3, + + /// + /// An error occurred connecting with the client. + /// + Errored = 4 + } + + /// + /// Describes the properties of a server reverse connection. + /// + public class ReverseConnectProperty + { + /// + /// Initialize a reverse connect server property. + /// + /// The Url of the reverse connect client. + /// The timeout to use for a reverse connect attempt. + /// The maximum number of sessions allowed to the client. + /// If this is an application configuration entry. + /// If the connection is enabled. + public ReverseConnectProperty( + Uri clientUrl, + int timeout, + int maxSessionCount, + bool configEntry, + bool enabled = true) + { + ClientUrl = clientUrl; + Timeout = timeout > 0 ? timeout : ReverseConnectServer.DefaultReverseConnectTimeout; + MaxSessionCount = maxSessionCount; + ConfigEntry = configEntry; + Enabled = enabled; + } + + /// + /// The Url of the reverse connect client. + /// + public readonly Uri ClientUrl; + + /// + /// The timeout to use for a reverse connect attempt. + /// + public readonly int Timeout; + + /// + /// If this is an application configuration entry. + /// + public readonly bool ConfigEntry; + + /// + /// The service result of the last connection attempt. + /// + public ServiceResult ServiceResult; + + /// + /// The last state of the reverse connection. + /// + public ReverseConnectState LastState = ReverseConnectState.Closed; + + /// + /// The maximum number of sessions allowed to the client. + /// + public int MaxSessionCount; + + /// + /// If the connection is enabled. + /// + public bool Enabled; + + /// + /// The time when the connection was rejected. + /// + public DateTime RejectTime; + } + + /// + /// The standard implementation of a UA server with reverse connect. + /// + public class ReverseConnectServer : StandardServer + { + /// + /// The default reverse connect interval. + /// + public static int DefaultReverseConnectInterval => 15000; + + /// + /// The default reverse connect timeout. + /// + public static int DefaultReverseConnectTimeout => 30000; + + /// + /// The default timeout after a rejected connection attempt. + /// + public static int DefaultReverseConnectRejectTimeout => 60000; + + /// + /// Creates a reverse connect server based on a StandardServer. + /// + public ReverseConnectServer() + { + m_connectInterval = DefaultReverseConnectInterval; + m_connectTimeout = DefaultReverseConnectTimeout; + m_rejectTimeout = DefaultReverseConnectRejectTimeout; + m_connections = new Dictionary(); + } + + #region StandardServer overrides + /// + protected override void OnServerStarted(IServerInternal server) + { + base.OnServerStarted(server); + + UpdateConfiguration(base.Configuration); + StartTimer(true); + } + + /// + protected override void OnUpdateConfiguration(ApplicationConfiguration configuration) + { + base.OnUpdateConfiguration(configuration); + UpdateConfiguration(configuration); + } + + /// + protected override void OnServerStopping() + { + DisposeTimer(); + base.OnServerStopping(); + } + #endregion + + #region Public Properties + /// + /// Add a reverse connection url. + /// + public virtual void AddReverseConnection(Uri url, int timeout = 0, int maxSessionCount = 0, bool enabled = true) + { + if (m_connections.ContainsKey(url)) + { + throw new ArgumentException("Connection for specified clientUrl is already configured", nameof(url)); + } + else + { + var reverseConnection = new ReverseConnectProperty(url, timeout, maxSessionCount, false, enabled); + lock (m_connectionsLock) + { + m_connections[url] = reverseConnection; + Utils.Trace("Reverse Connection added for EndpointUrl: {0}.", url); + + StartTimer(false); + } + } + } + + /// + /// Remove a reverse connection url. + /// + /// true if the reverse connection is found and removed + public virtual bool RemoveReverseConnection(Uri url) + { + if (url == null) throw new ArgumentNullException(nameof(url)); + lock (m_connectionsLock) + { + bool connectionRemoved = m_connections.Remove(url); + + if (connectionRemoved) + { + Utils.Trace("Reverse Connection removed for EndpointUrl: {0}.", url); + } + + if (m_connections.Count == 0) + { + DisposeTimer(); + } + + return connectionRemoved; + } + } + + /// + /// Return a dictionary of configured reverse connection Urls. + /// + public virtual ReadOnlyDictionary GetReverseConnections() + { + lock (m_connectionsLock) + { + return new ReadOnlyDictionary(m_connections); + } + } + #endregion + + #region Private Properties + /// + /// Timer callback to establish new reverse connections. + /// + private void OnReverseConnect(object state) + { + try + { + lock (m_connectionsLock) + { + foreach (var reverseConnection in m_connections.Values) + { + // recharge a rejected connection after timeout + if (reverseConnection.LastState == ReverseConnectState.Rejected && + reverseConnection.RejectTime + TimeSpan.FromMilliseconds(m_rejectTimeout) < DateTime.UtcNow) + { + reverseConnection.LastState = ReverseConnectState.Closed; + } + + // try the reverse connect + if ((reverseConnection.Enabled) && + (reverseConnection.MaxSessionCount == 0 || + (reverseConnection.MaxSessionCount == 1 && reverseConnection.LastState == ReverseConnectState.Closed) || + reverseConnection.MaxSessionCount > ServerInternal.SessionManager.GetSessions().Count)) + { + try + { + reverseConnection.LastState = ReverseConnectState.Connecting; + base.CreateConnection(reverseConnection.ClientUrl, + reverseConnection.Timeout > 0 ? reverseConnection.Timeout : m_connectTimeout); + Utils.Trace($"Create Connection! [{reverseConnection.LastState}][{reverseConnection.ClientUrl}]"); + } + catch (Exception e) + { + reverseConnection.LastState = ReverseConnectState.Errored; + reverseConnection.ServiceResult = new ServiceResult(e); + Utils.Trace($"Create Connection failed! [{reverseConnection.LastState}][{reverseConnection.ClientUrl}]"); + } + } + } + } + } + catch (Exception ex) + { + Utils.Trace(ex, "OnReverseConnect unexpected error: {0}", ex.Message); + } + finally + { + StartTimer(true); + } + } + + /// + /// Track reverse connection status. + /// + protected override void OnConnectionStatusChanged(object sender, ConnectionStatusEventArgs e) + { + lock (m_connectionsLock) + { + ReverseConnectProperty reverseConnection = null; + if (m_connections.TryGetValue(e.EndpointUrl, out reverseConnection)) + { + ServiceResult priorStatus = reverseConnection.ServiceResult; + if (ServiceResult.IsBad(e.ChannelStatus)) + { + reverseConnection.ServiceResult = e.ChannelStatus; + if (e.ChannelStatus.Code == StatusCodes.BadTcpMessageTypeInvalid) + { + reverseConnection.LastState = ReverseConnectState.Rejected; + reverseConnection.RejectTime = DateTime.UtcNow; + Utils.Trace($"Client Rejected Connection! [{reverseConnection.LastState}][{e.EndpointUrl}]"); + return; + } + else + { + reverseConnection.LastState = ReverseConnectState.Closed; + Utils.Trace($"Connection Error! [{reverseConnection.LastState}][{e.EndpointUrl}]"); + return; + } + } + reverseConnection.LastState = e.Closed ? ReverseConnectState.Closed : ReverseConnectState.Connected; + Utils.Trace($"New Connection State! [{reverseConnection.LastState}][{e.EndpointUrl}]"); + } + else + { + Utils.Trace($"Warning: Status changed for unknown reverse connection: [{e.ChannelStatus}][{e.EndpointUrl}]"); + } + } + + base.OnConnectionStatusChanged(sender, e); + } + + /// + /// Restart the timer. + /// + private void StartTimer(bool forceRestart) + { + if (forceRestart) + { + DisposeTimer(); + } + lock (m_connectionsLock) + { + if (m_connectInterval > 0 && + m_connections.Count > 0 && + m_reverseConnectTimer == null) + { + m_reverseConnectTimer = new Timer(OnReverseConnect, this, m_connectInterval, Timeout.Infinite); + } + } + } + + /// + /// Dispose the current timer. + /// + private void DisposeTimer() + { + // start registration timer. + lock (m_connectionsLock) + { + if (m_reverseConnectTimer != null) + { + Utils.SilentDispose(m_reverseConnectTimer); + m_reverseConnectTimer = null; + } + } + } + + /// + /// Remove a reverse connection url. + /// + private void ClearConnections(bool configEntry) + { + lock (m_connectionsLock) + { + var toRemove = m_connections.Where(r => r.Value.ConfigEntry == configEntry); + foreach (var entry in toRemove) + { + m_connections.Remove(entry.Key); + } + } + } + + /// + /// Update the reverse connect configuration from the application configuration. + /// + private void UpdateConfiguration(ApplicationConfiguration configuration) + { + ClearConnections(true); + + // get the configuration for the reverse connections. + var reverseConnect = configuration.ServerConfiguration.ReverseConnect; + + // add configuration reverse client connection properties. + if (reverseConnect != null) + { + lock (m_connectionsLock) + { + m_connectInterval = reverseConnect.ConnectInterval > 0 ? reverseConnect.ConnectInterval : DefaultReverseConnectInterval; + m_connectTimeout = reverseConnect.ConnectTimeout > 0 ? reverseConnect.ConnectTimeout : DefaultReverseConnectTimeout; + m_rejectTimeout = reverseConnect.RejectTimeout > 0 ? reverseConnect.RejectTimeout : DefaultReverseConnectRejectTimeout; + foreach (var client in reverseConnect.Clients) + { + var uri = Utils.ParseUri(client.EndpointUrl); + if (uri != null) + { + if (m_connections.ContainsKey(uri)) + { + Utils.Trace("Warning: ServerConfiguration.ReverseConnect contains duplicate EndpointUrl: {0}.", uri); + } + else + { + m_connections[uri] = new ReverseConnectProperty(uri, client.Timeout, client.MaxSessionCount, true, client.Enabled); + Utils.Trace("Reverse Connection added for EndpointUrl: {0}.", uri); + } + } + } + } + } + } + #endregion + + #region Private Fields + private Timer m_reverseConnectTimer; + private int m_connectInterval; + private int m_connectTimeout; + private int m_rejectTimeout; + private Dictionary m_connections; + private object m_connectionsLock = new object(); + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/ServerInternalData.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/ServerInternalData.cs new file mode 100644 index 00000000..34feb689 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/ServerInternalData.cs @@ -0,0 +1,785 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; + +#pragma warning disable 0618 + +namespace Opc.Ua.Server +{ + /// + /// A class that stores the globally accessible state of a server instance. + /// + /// + /// This is a readonly class that is initialized when the server starts up. It provides + /// access to global objects and data that different parts of the server may require. + /// It also defines some global methods. + /// + /// This object is constructed is three steps: + /// - the configuration is provided. + /// - the node managers et. al. are provided. + /// - the session/subscription managers are provided. + /// + /// The server is not running until all three steps are complete. + /// + /// The references returned from this object do not change after all three states are complete. + /// This ensures the object is thread safe even though it does not use a lock. + /// Objects returned from this object can be assumed to be threadsafe unless otherwise stated. + /// + public class ServerInternalData : IServerInternal, IDisposable + { + #region Constructors + /// + /// Initializes the datastore with the server configuration. + /// + /// The server description. + /// The configuration. + /// The message context. + /// The certificate validator. + /// The instance certificate. + public ServerInternalData( + ServerProperties serverDescription, + ApplicationConfiguration configuration, + ServiceMessageContext messageContext, + CertificateValidator certificateValidator, + X509Certificate2 instanceCertificate) + { + m_serverDescription = serverDescription; + m_configuration = configuration; + m_messageContext = messageContext; + + m_endpointAddresses = new List(); + + foreach (string baseAddresses in m_configuration.ServerConfiguration.BaseAddresses) + { + Uri url = Utils.ParseUri(baseAddresses); + + if (url != null) + { + m_endpointAddresses.Add(url); + } + } + + m_namespaceUris = m_messageContext.NamespaceUris; + m_factory = m_messageContext.Factory; + + m_serverUris = new StringTable(); + m_typeTree = new TypeTable(m_namespaceUris); + +#if LEGACY_CORENODEMANAGER + m_typeSources = new TypeSourceTable(); +#endif + + // add the server uri to the server table. + m_serverUris.Append(m_configuration.ApplicationUri); + + // create the default system context. + m_defaultSystemContext = new ServerSystemContext(this); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_resourceManager); + Utils.SilentDispose(m_requestManager); + Utils.SilentDispose(m_aggregateManager); + Utils.SilentDispose(m_nodeManager); + Utils.SilentDispose(m_sessionManager); + Utils.SilentDispose(m_subscriptionManager); + } + } + #endregion + + #region Public Interface + /// + /// The session manager to use with the server. + /// + /// The session manager. + public SessionManager SessionManager + { + get { return m_sessionManager; } + } + + /// + /// The subscription manager to use with the server. + /// + /// The subscription manager. + public SubscriptionManager SubscriptionManager + { + get { return m_subscriptionManager; } + } + + /// + /// Stores the MasterNodeManager and the CoreNodeManager + /// + /// The node manager. + public void SetNodeManager(MasterNodeManager nodeManager) + { + m_nodeManager = nodeManager; + m_diagnosticsNodeManager = nodeManager.DiagnosticsNodeManager; + m_coreNodeManager = nodeManager.CoreNodeManager; + } + + /// + /// Sets the EventManager, the ResourceManager, the RequestManager and the AggregateManager. + /// + /// The event manager. + /// The resource manager. + /// The request manager. + public void CreateServerObject( + EventManager eventManager, + ResourceManager resourceManager, + RequestManager requestManager) + { + m_eventManager = eventManager; + m_resourceManager = resourceManager; + m_requestManager = requestManager; + + // create the server object. + CreateServerObject(); + } + + /// + /// Stores the SessionManager, the SubscriptionManager in the datastore. + /// + /// The session manager. + /// The subscription manager. + public void SetSessionManager( + SessionManager sessionManager, + SubscriptionManager subscriptionManager) + { + m_sessionManager = sessionManager; + m_subscriptionManager = subscriptionManager; + } + #endregion + + #region IServerInternal Members + + /// + /// The endpoint addresses used by the server. + /// + /// The endpoint addresses. + public IEnumerable EndpointAddresses + { + get { return m_endpointAddresses; } + } + + + /// + /// The context to use when serializing/deserializing extension objects. + /// + /// The message context. + public ServiceMessageContext MessageContext + { + get { return m_messageContext; } + } + + /// + /// The default system context for the server. + /// + /// The default system context. + public ServerSystemContext DefaultSystemContext + { + get { return m_defaultSystemContext; } + } + + /// + /// The table of namespace uris known to the server. + /// + /// The namespace URIs. + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + } + + /// + /// The table of remote server uris known to the server. + /// + /// The server URIs. + public StringTable ServerUris + { + get { return m_serverUris; } + } + + /// + /// The factory used to create encodeable objects that the server understands. + /// + /// The factory. + public EncodeableFactory Factory + { + get { return m_factory; } + } + + + /// + /// The datatypes, object types and variable types known to the server. + /// + /// The type tree. + /// + /// The type tree table is a global object that all components of a server have access to. + /// Node managers must populate this table with all types that they define. + /// This object is thread safe. + /// + public TypeTable TypeTree + { + get { return m_typeTree; } + } + +#if LEGACY_CORENODEMANAGER + + /// + /// Returns the source for a types that has shared components defined. + /// + /// The type sources. + /// + /// Some types define shared components which are used by all instances of the type. This + /// table contains sources for those shared components. The namespace qualified browse name + /// is assumed to be a unique identifier for a type. + /// + public TypeSourceTable TypeSources + { + get { return m_typeSources; } + } +#endif + + /// + /// The master node manager for the server. + /// + /// The node manager. + public MasterNodeManager NodeManager + { + get { return m_nodeManager; } + } + + /// + /// The internal node manager for the servers. + /// + /// The core node manager. + public CoreNodeManager CoreNodeManager + { + get { return m_coreNodeManager; } + } + + + /// + /// Returns the node manager that managers the server diagnostics. + /// + /// The diagnostics node manager. + public DiagnosticsNodeManager DiagnosticsNodeManager + { + get { return m_diagnosticsNodeManager; } + } + + /// + /// The manager for events that all components use to queue events that occur. + /// + /// The event manager. + public EventManager EventManager + { + get { return m_eventManager; } + } + + /// + /// A manager for localized resources that components can use to localize text. + /// + /// The resource manager. + public ResourceManager ResourceManager + { + get { return m_resourceManager; } + } + + /// + /// A manager for outstanding requests that allows components to receive notifications if the timeout or are cancelled. + /// + /// The request manager. + public RequestManager RequestManager + { + get { return m_requestManager; } + } + + /// + /// A manager for aggregate calculators supported by the server. + /// + /// The aggregate manager. + public AggregateManager AggregateManager + { + get { return m_aggregateManager; } + set { m_aggregateManager = value; } + } + + /// + /// The manager for active sessions. + /// + /// The session manager. + ISessionManager IServerInternal.SessionManager + { + get { return m_sessionManager; } + } + + /// + /// The manager for active subscriptions. + /// + ISubscriptionManager IServerInternal.SubscriptionManager + { + get { return m_subscriptionManager; } + } + + + /// + /// Returns the status object for the server. + /// + /// The status. + public ServerStatusValue Status + { + get { return m_serverStatus; } + } + + /// + /// Gets or sets the current state of the server. + /// + /// The state of the current. + public ServerState CurrentState + { + get + { + lock (m_serverStatus.Lock) + { + return m_serverStatus.Value.State; + } + } + + set + { + lock (m_serverStatus.Lock) + { + m_serverStatus.Value.State = value; + } + } + } + + /// + /// Returns the Server object node + /// + /// The Server object node. + public ServerObjectState ServerObject + { + get { return m_serverObject; } + } + + /// + /// Used to synchronize access to the server diagnostics. + /// + /// The diagnostics lock. + public object DiagnosticsLock + { + get { return m_dataLock; } + } + + /// + /// Used to synchronize write access to + /// the server diagnostics. + /// + /// The diagnostics lock. + public object DiagnosticsWriteLock + { + get + { + // implicitly force diagnostics update + if (DiagnosticsNodeManager != null) + { + DiagnosticsNodeManager.ForceDiagnosticsScan(); + } + return DiagnosticsLock; + } + } + + /// + /// Returns the diagnostics structure for the server. + /// + /// The server diagnostics. + public ServerDiagnosticsSummaryDataType ServerDiagnostics + { + get { return m_serverDiagnostics; } + } + +#if LEGACY_CORENODEMANAGER + + /// + /// Returns the diagnostics object for the server. + /// + /// The diagnostics. + public ServerDiagnostics Diagnostics + { + get { return null; } + } +#endif + + + /// + /// Whether the server is currently running. + /// + /// + /// true if this instance is running; otherwise, false. + /// + /// + /// This flag is set to false when the server shuts down. Threads running should check this flag whenever + /// they return from a blocking operation. If it is false the thread should clean up and terminate. + /// + public bool IsRunning + { + get + { + if (m_serverStatus == null) + { + return false; + } + + lock (m_serverStatus.Lock) + { + if (m_serverStatus.Value.State == ServerState.Running) + return true; + + if (m_serverStatus.Value.State == ServerState.Shutdown && m_serverStatus.Value.SecondsTillShutdown > 0) + return true; + + return false; + } + } + } + + /// + /// Whether the server is collecting diagnostics. + /// + /// true if diagnostics are enabled; otherwise, false. + public bool DiagnosticsEnabled + { + get + { + if (m_diagnosticsNodeManager == null) + { + return false; + } + + return m_diagnosticsNodeManager.DiagnosticsEnabled; + } + } + + /// + /// Closes the specified session. + /// + /// The context. + /// The session identifier. + /// if set to true subscriptions are to be deleted. + public void CloseSession(OperationContext context, NodeId sessionId, bool deleteSubscriptions) + { + m_nodeManager.SessionClosing(context, sessionId, deleteSubscriptions); + m_subscriptionManager.SessionClosing(context, sessionId, deleteSubscriptions); + m_sessionManager.CloseSession(sessionId); + } + + /// + /// Deletes the specified subscription. + /// + /// The subscription identifier. + public void DeleteSubscription(uint subscriptionId) + { + m_subscriptionManager.DeleteSubscription(null, subscriptionId); + } + + /// + /// Called by any component to report a global event. + /// + /// The event. + public void ReportEvent(IFilterTarget e) + { + if (m_serverObject != null) + { + m_serverObject.ReportEvent(this.DefaultSystemContext, e); + } + } + + /// + /// Called by any component to report a global event. + /// + /// The context. + /// The event. + public void ReportEvent(ISystemContext context, IFilterTarget e) + { + if (m_serverObject != null) + { + m_serverObject.ReportEvent(context, e); + } + } + + /// + /// Refreshes the conditions for the specified subscription. + /// + /// The context. + /// The subscription identifier. + public void ConditionRefresh(OperationContext context, uint subscriptionId) + { + m_subscriptionManager.ConditionRefresh(context, subscriptionId); + } + #endregion + + #region Private Methods + /// + /// Creates the ServerObject and attaches it to the NodeManager. + /// + private void CreateServerObject() + { + lock (m_diagnosticsNodeManager.Lock) + { + // get the server object. + ServerObjectState serverObject = m_serverObject = (ServerObjectState)m_diagnosticsNodeManager.FindPredefinedNode( + ObjectIds.Server, + typeof(ServerObjectState)); + + // update server capabilities. + serverObject.ServiceLevel.Value = 255; + serverObject.ServerCapabilities.LocaleIdArray.Value = m_resourceManager.GetAvailableLocales(); + serverObject.ServerCapabilities.ServerProfileArray.Value = m_configuration.ServerConfiguration.ServerProfileArray.ToArray(); + serverObject.ServerCapabilities.MinSupportedSampleRate.Value = 0; + serverObject.ServerCapabilities.MaxBrowseContinuationPoints.Value = (ushort)m_configuration.ServerConfiguration.MaxBrowseContinuationPoints; + serverObject.ServerCapabilities.MaxQueryContinuationPoints.Value = (ushort)m_configuration.ServerConfiguration.MaxQueryContinuationPoints; + serverObject.ServerCapabilities.MaxHistoryContinuationPoints.Value = (ushort)m_configuration.ServerConfiguration.MaxHistoryContinuationPoints; + serverObject.ServerCapabilities.MaxArrayLength.Value = (uint)m_configuration.TransportQuotas.MaxArrayLength; + serverObject.ServerCapabilities.MaxStringLength.Value = (uint)m_configuration.TransportQuotas.MaxStringLength; + serverObject.ServerCapabilities.MaxByteStringLength.Value = (uint)m_configuration.TransportQuotas.MaxByteStringLength; + serverObject.ServerCapabilities.OperationLimits.MaxNodesPerRead.Value = 0; + serverObject.ServerCapabilities.OperationLimits.MaxNodesPerWrite.Value = 0; + serverObject.ServerCapabilities.OperationLimits.MaxNodesPerMethodCall.Value = 1000; + serverObject.ServerCapabilities.OperationLimits.MaxNodesPerBrowse.Value = 0; + serverObject.ServerCapabilities.OperationLimits.MaxNodesPerRegisterNodes.Value = 0; + + // setup callbacks for dynamic values. + serverObject.NamespaceArray.OnSimpleReadValue = OnReadNamespaceArray; + serverObject.NamespaceArray.MinimumSamplingInterval = 1000; + + serverObject.ServerArray.OnSimpleReadValue = OnReadServerArray; + serverObject.ServerArray.MinimumSamplingInterval = 1000; + + // dynamic change of enabledFlag is disabled to pass CTT + serverObject.ServerDiagnostics.EnabledFlag.AccessLevel = AccessLevels.CurrentRead; + serverObject.ServerDiagnostics.EnabledFlag.UserAccessLevel = AccessLevels.CurrentRead; + serverObject.ServerDiagnostics.EnabledFlag.OnSimpleReadValue = OnReadDiagnosticsEnabledFlag; + serverObject.ServerDiagnostics.EnabledFlag.OnSimpleWriteValue = OnWriteDiagnosticsEnabledFlag; + serverObject.ServerDiagnostics.EnabledFlag.MinimumSamplingInterval = 1000; + + // initialize status. + ServerStatusDataType serverStatus = new ServerStatusDataType(); + + serverStatus.StartTime = DateTime.UtcNow; + serverStatus.CurrentTime = DateTime.UtcNow; + serverStatus.State = ServerState.Shutdown; + serverStatus.BuildInfo.ProductName = m_serverDescription.ProductName; + serverStatus.BuildInfo.ProductUri = m_serverDescription.ProductUri; + serverStatus.BuildInfo.ManufacturerName = m_serverDescription.ManufacturerName; + serverStatus.BuildInfo.SoftwareVersion = m_serverDescription.SoftwareVersion; + serverStatus.BuildInfo.BuildNumber = m_serverDescription.BuildNumber; + serverStatus.BuildInfo.BuildDate = m_serverDescription.BuildDate; + + serverObject.ServerStatus.MinimumSamplingInterval = 1000; + serverObject.ServerStatus.CurrentTime.MinimumSamplingInterval = 1000; + + m_serverStatus = new ServerStatusValue( + serverObject.ServerStatus, + serverStatus, + m_dataLock); + + m_serverStatus.Timestamp = DateTime.UtcNow; + m_serverStatus.OnBeforeRead = OnReadServerStatus; + + // initialize diagnostics. + m_serverDiagnostics = new ServerDiagnosticsSummaryDataType(); + + m_serverDiagnostics.ServerViewCount = 0; + m_serverDiagnostics.CurrentSessionCount = 0; + m_serverDiagnostics.CumulatedSessionCount = 0; + m_serverDiagnostics.SecurityRejectedSessionCount = 0; + m_serverDiagnostics.RejectedSessionCount = 0; + m_serverDiagnostics.SessionTimeoutCount = 0; + m_serverDiagnostics.SessionAbortCount = 0; + m_serverDiagnostics.PublishingIntervalCount = 0; + m_serverDiagnostics.CurrentSubscriptionCount = 0; + m_serverDiagnostics.CumulatedSubscriptionCount = 0; + m_serverDiagnostics.SecurityRejectedRequestsCount = 0; + m_serverDiagnostics.RejectedRequestsCount = 0; + + m_diagnosticsNodeManager.CreateServerDiagnostics( + m_defaultSystemContext, + m_serverDiagnostics, + OnUpdateDiagnostics); + + // set the diagnostics enabled state. + m_diagnosticsNodeManager.SetDiagnosticsEnabled( + m_defaultSystemContext, + m_configuration.ServerConfiguration.DiagnosticsEnabled); + + ConfigurationNodeManager configurationNodeManager = m_diagnosticsNodeManager as ConfigurationNodeManager; + configurationNodeManager?.CreateServerConfiguration( + m_defaultSystemContext, + m_configuration); + } + } + + /// + /// Updates the server status before a read. + /// + private void OnReadServerStatus( + ISystemContext context, + BaseVariableValue variable, + NodeState component) + { + lock (m_dataLock) + { + DateTime now = DateTime.UtcNow; + m_serverStatus.Timestamp = now; + m_serverStatus.Value.CurrentTime = now; + } + } + + /// + /// Returns a copy of the namespace array. + /// + private ServiceResult OnReadNamespaceArray( + ISystemContext context, + NodeState node, + ref object value) + { + value = m_namespaceUris.ToArray(); + return ServiceResult.Good; + } + + /// + /// Returns a copy of the server array. + /// + private ServiceResult OnReadServerArray( + ISystemContext context, + NodeState node, + ref object value) + { + value = m_serverUris.ToArray(); + return ServiceResult.Good; + } + + /// + /// Returns Diagnostics.EnabledFlag + /// + private ServiceResult OnReadDiagnosticsEnabledFlag( + ISystemContext context, + NodeState node, + ref object value) + { + value = m_diagnosticsNodeManager.DiagnosticsEnabled; + return ServiceResult.Good; + } + + /// + /// Sets the Diagnostics.EnabledFlag + /// + private ServiceResult OnWriteDiagnosticsEnabledFlag( + ISystemContext context, + NodeState node, + ref object value) + { + bool enabled = (bool)value; + m_diagnosticsNodeManager.SetDiagnosticsEnabled( + m_defaultSystemContext, + enabled); + + return ServiceResult.Good; + } + + /// + /// Returns a copy of the current diagnostics. + /// + private ServiceResult OnUpdateDiagnostics( + ISystemContext context, + NodeState node, + ref object value) + { + lock (m_serverDiagnostics) + { + value = Utils.Clone(m_serverDiagnostics); + } + + return ServiceResult.Good; + } + #endregion + + #region Private Fields + private ServerProperties m_serverDescription; + private ApplicationConfiguration m_configuration; + private List m_endpointAddresses; + private ServiceMessageContext m_messageContext; + private ServerSystemContext m_defaultSystemContext; + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private EncodeableFactory m_factory; + private TypeTable m_typeTree; + +#if LEGACY_CORENODEMANAGER + private TypeSourceTable m_typeSources; +#endif + + private ResourceManager m_resourceManager; + private RequestManager m_requestManager; + private AggregateManager m_aggregateManager; + private MasterNodeManager m_nodeManager; + private CoreNodeManager m_coreNodeManager; + private DiagnosticsNodeManager m_diagnosticsNodeManager; + private EventManager m_eventManager; + private SessionManager m_sessionManager; + private SubscriptionManager m_subscriptionManager; + + private object m_dataLock = new object(); + private ServerObjectState m_serverObject; + private ServerStatusValue m_serverStatus; + private ServerDiagnosticsSummaryDataType m_serverDiagnostics; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/StandardServer.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/StandardServer.cs new file mode 100644 index 00000000..411573c7 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Server/StandardServer.cs @@ -0,0 +1,3160 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; +using Opc.Ua.Bindings; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Server +{ + /// + /// The standard implementation of a UA server. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public partial class StandardServer : SessionServerBase + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public StandardServer() + { + + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_serverInternal"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_registrationTimer"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_configurationWatcher")] + protected override void Dispose(bool disposing) + { + if (disposing) + { + // halt any outstanding timer. + if (m_registrationTimer != null) + { + Utils.SilentDispose(m_registrationTimer); + m_registrationTimer = null; + } + + // close the watcher. + if (m_configurationWatcher != null) + { + Utils.SilentDispose(m_configurationWatcher); + m_configurationWatcher = null; + } + + // close the server. + if (m_serverInternal != null) + { + Utils.SilentDispose(m_serverInternal); + m_serverInternal = null; + } + } + + base.Dispose(disposing); + } + #endregion + + #region IServer Methods + /// + /// Invokes the FindServers service. + /// + /// The request header. + /// The endpoint URL. + /// The locale ids. + /// The server uris. + /// List of Servers that meet criteria specified in the request. + /// + /// Returns a object + /// + public override ResponseHeader FindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + out ApplicationDescriptionCollection servers) + { + servers = new ApplicationDescriptionCollection(); + + ValidateRequest(requestHeader); + + lock (m_lock) + { + // parse the url provided by the client. + IList baseAddresses = BaseAddresses; + + Uri parsedEndpointUrl = Utils.ParseUri(endpointUrl); + + if (parsedEndpointUrl != null) + { + baseAddresses = FilterByEndpointUrl(parsedEndpointUrl, baseAddresses); + } + + // check if nothing to do. + if (baseAddresses.Count == 0) + { + servers = new ApplicationDescriptionCollection(); + return CreateResponse(requestHeader, StatusCodes.Good); + } + + // build list of unique servers. + Dictionary uniqueServers = new Dictionary(); + + foreach (EndpointDescription description in GetEndpoints()) + { + ApplicationDescription server = description.Server; + + // skip servers that have been processed. + if (uniqueServers.ContainsKey(server.ApplicationUri)) + { + continue; + } + + // check client is filtering by server uri. + if (serverUris != null && serverUris.Count > 0) + { + if (!serverUris.Contains(server.ApplicationUri)) + { + continue; + } + } + + // localize the application name if requested. + LocalizedText applicationName = server.ApplicationName; + + if (localeIds != null && localeIds.Count > 0) + { + applicationName = m_serverInternal.ResourceManager.Translate(localeIds, applicationName); + } + + // get the application description. + ApplicationDescription application = TranslateApplicationDescription( + parsedEndpointUrl, + server, + baseAddresses, + applicationName); + + uniqueServers.Add(server.ApplicationUri, application); + + // add to list of servers to return. + servers.Add(application); + } + } + + return CreateResponse(requestHeader, StatusCodes.Good); + } + + /// + /// Invokes the GetEndpoints service. + /// + /// The request header. + /// The endpoint URL. + /// The locale ids. + /// The profile uris. + /// The endpoints supported by the server. + /// + /// Returns a object + /// + public override ResponseHeader GetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + out EndpointDescriptionCollection endpoints) + { + endpoints = null; + + ValidateRequest(requestHeader); + + lock (m_lock) + { + // filter by profile. + IList baseAddresses = FilterByProfile(profileUris, BaseAddresses); + + // get the descriptions. + endpoints = GetEndpointDescriptions( + endpointUrl, + baseAddresses, + localeIds); + } + + return CreateResponse(requestHeader, StatusCodes.Good); + } + + /// + /// Returns the endpoints that match the base addresss and endpoint url. + /// + protected EndpointDescriptionCollection GetEndpointDescriptions( + string endpointUrl, + IList baseAddresses, + StringCollection localeIds) + { + EndpointDescriptionCollection endpoints = null; + + // parse the url provided by the client. + Uri parsedEndpointUrl = Utils.ParseUri(endpointUrl); + + if (parsedEndpointUrl != null) + { + baseAddresses = FilterByEndpointUrl(parsedEndpointUrl, baseAddresses); + } + + // check if nothing to do. + if (baseAddresses.Count != 0) + { + // localize the application name if requested. + LocalizedText applicationName = this.ServerDescription.ApplicationName; + + if (localeIds != null && localeIds.Count > 0) + { + applicationName = m_serverInternal.ResourceManager.Translate(localeIds, applicationName); + } + + // translate the application description. + ApplicationDescription application = TranslateApplicationDescription( + parsedEndpointUrl, + base.ServerDescription, + baseAddresses, + applicationName); + + // translate the endpoint descriptions. + endpoints = TranslateEndpointDescriptions( + parsedEndpointUrl, + baseAddresses, + this.Endpoints, + application); + } + + return endpoints; + } + + /// + /// Invokes the CreateSession service. + /// + /// The request header. + /// Application description for the client application. + /// The server URI. + /// The endpoint URL. + /// Name for the Session assigned by the client. + /// The client nonce. + /// The client certificate. + /// The requested session timeout. + /// Size of the max response message. + /// The unique public identifier assigned by the Server to the Session. + /// The unique private identifier assigned by the Server to the Session. + /// The revised session timeout. + /// The server nonce. + /// The server certificate. + /// The server endpoints. + /// The server software certificates. + /// The server signature. + /// Size of the max request message. + /// + /// Returns a object + /// + public override ResponseHeader CreateSession( + RequestHeader requestHeader, + ApplicationDescription clientDescription, + string serverUri, + string endpointUrl, + string sessionName, + byte[] clientNonce, + byte[] clientCertificate, + double requestedSessionTimeout, + uint maxResponseMessageSize, + out NodeId sessionId, + out NodeId authenticationToken, + out double revisedSessionTimeout, + out byte[] serverNonce, + out byte[] serverCertificate, + out EndpointDescriptionCollection serverEndpoints, + out SignedSoftwareCertificateCollection serverSoftwareCertificates, + out SignatureData serverSignature, + out uint maxRequestMessageSize) + { + sessionId = 0; + revisedSessionTimeout = 0; + serverNonce = null; + serverCertificate = null; + serverSoftwareCertificates = null; + serverSignature = null; + maxRequestMessageSize = (uint)MessageContext.MaxMessageSize; + + OperationContext context = ValidateRequest(requestHeader, RequestType.CreateSession); + + try + { + // check the server uri. + if (!String.IsNullOrEmpty(serverUri)) + { + if (serverUri != this.Configuration.ApplicationUri) + { + throw new ServiceResultException(StatusCodes.BadServerUriInvalid); + } + } + + bool requireEncryption = ServerBase.RequireEncryption(context.ChannelContext.EndpointDescription); + + if (!requireEncryption && clientCertificate != null) + { + requireEncryption = true; + } + + // validate client application instance certificate. + X509Certificate2 parsedClientCertificate = null; + + if (requireEncryption && clientCertificate != null && clientCertificate.Length > 0) + { + try + { + X509Certificate2Collection clientCertificateChain = Utils.ParseCertificateChainBlob(clientCertificate); + parsedClientCertificate = clientCertificateChain[0]; + + if (context.SecurityPolicyUri != SecurityPolicies.None) + { + string certificateApplicationUri = X509Utils.GetApplicationUriFromCertificate(parsedClientCertificate); + + // verify if applicationUri from ApplicationDescription matches the applicationUri in the client certificate. + if (!String.IsNullOrEmpty(certificateApplicationUri) && + !String.IsNullOrEmpty(clientDescription.ApplicationUri) && + certificateApplicationUri != clientDescription.ApplicationUri) + { + throw ServiceResultException.Create( + StatusCodes.BadCertificateUriInvalid, + "The URI specified in the ApplicationDescription does not match the URI in the Certificate."); + } + + CertificateValidator.Validate(clientCertificateChain); + } + } + catch (Exception e) + { + OnApplicationCertificateError(clientCertificate, new ServiceResult(e)); + } + } + + // verify the nonce provided by the client. + if (clientNonce != null) + { + if (clientNonce.Length < m_minNonceLength) + { + throw new ServiceResultException(StatusCodes.BadNonceInvalid); + } + + // ignore nonce if security policy set to none + if (context.SecurityPolicyUri == SecurityPolicies.None) + { + clientNonce = null; + } + } + + // create the session. + Session session = ServerInternal.SessionManager.CreateSession( + context, + requireEncryption ? InstanceCertificate : null, + sessionName, + clientNonce, + clientDescription, + endpointUrl, + parsedClientCertificate, + requestedSessionTimeout, + maxResponseMessageSize, + out sessionId, + out authenticationToken, + out serverNonce, + out revisedSessionTimeout); + + lock (m_lock) + { + // return the application instance certificate for the server. + if (requireEncryption) + { + // check if complete chain should be sent. + if (Configuration.SecurityConfiguration.SendCertificateChain && + InstanceCertificateChain != null && + InstanceCertificateChain.Count > 0) + { + List serverCertificateChain = new List(); + + for (int i = 0; i < InstanceCertificateChain.Count; i++) + { + serverCertificateChain.AddRange(InstanceCertificateChain[i].RawData); + } + + serverCertificate = serverCertificateChain.ToArray(); + } + else + { + serverCertificate = InstanceCertificate.RawData; + } + } + + // return the endpoints supported by the server. + serverEndpoints = GetEndpointDescriptions(endpointUrl, BaseAddresses, null); + + // return the software certificates assigned to the server. + serverSoftwareCertificates = new SignedSoftwareCertificateCollection(ServerProperties.SoftwareCertificates); + + // sign the nonce provided by the client. + serverSignature = null; + + // sign the client nonce (if provided). + if (parsedClientCertificate != null && clientNonce != null) + { + byte[] dataToSign = Utils.Append(parsedClientCertificate.RawData, clientNonce); + serverSignature = SecurityPolicies.Sign(InstanceCertificate, context.SecurityPolicyUri, dataToSign); + } + } + + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.CurrentSessionCount++; + ServerInternal.ServerDiagnostics.CumulatedSessionCount++; + } + + Utils.Trace("Server - SESSION CREATED. SessionId={0}", sessionId); + + return CreateResponse(requestHeader, StatusCodes.Good); + } + catch (ServiceResultException e) + { + Utils.Trace("Server - SESSION CREATE failed. {0}", e.Message); + + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedSessionCount++; + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedSessionCount++; + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException((DiagnosticsMasks)requestHeader.ReturnDiagnostics, new StringCollection(), e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the ActivateSession service. + /// + /// The request header. + /// The client signature. + /// The client software certificates. + /// The locale ids. + /// The user identity token. + /// The user token signature. + /// The server nonce. + /// The results. + /// The diagnostic infos. + /// + /// Returns a object + /// + public override ResponseHeader ActivateSession( + RequestHeader requestHeader, + SignatureData clientSignature, + SignedSoftwareCertificateCollection clientSoftwareCertificates, + StringCollection localeIds, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + out byte[] serverNonce, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + serverNonce = null; + results = null; + diagnosticInfos = null; + + OperationContext context = ValidateRequest(requestHeader, RequestType.ActivateSession); + + try + { + // validate client's software certificates. + List softwareCertificates = new List(); + + if (context.SecurityPolicyUri != SecurityPolicies.None) + { + bool diagnosticsExist = false; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos = new DiagnosticInfoCollection(); + } + + results = new StatusCodeCollection(); + diagnosticInfos = new DiagnosticInfoCollection(); + + foreach (SignedSoftwareCertificate signedCertificate in clientSoftwareCertificates) + { + SoftwareCertificate softwareCertificate = null; + + ServiceResult result = SoftwareCertificate.Validate( + CertificateValidator, + signedCertificate.CertificateData, + out softwareCertificate); + + if (ServiceResult.IsBad(result)) + { + results.Add(result.Code); + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(ServerInternal, context, result); + diagnosticInfos.Add(diagnosticInfo); + diagnosticsExist = true; + } + } + else + { + softwareCertificates.Add(softwareCertificate); + results.Add(StatusCodes.Good); + + // add diagnostics if requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + } + + if (!diagnosticsExist && diagnosticInfos != null) + { + diagnosticInfos.Clear(); + } + } + + // check if certificates meet the server's requirements. + ValidateSoftwareCertificates(softwareCertificates); + + // activate the session. + bool identityChanged = ServerInternal.SessionManager.ActivateSession( + context, + requestHeader.AuthenticationToken, + clientSignature, + softwareCertificates, + userIdentityToken, + userTokenSignature, + localeIds, + out serverNonce); + + if (identityChanged) + { + // TBD - call Node Manager and Subscription Manager. + } + + Utils.Trace("Server - SESSION ACTIVATED."); + + return CreateResponse(requestHeader, StatusCodes.Good); + } + catch (ServiceResultException e) + { + Utils.Trace("Server - SESSION ACTIVATE failed. {0}", e.Message); + + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedSessionCount++; + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedSessionCount++; + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException((DiagnosticsMasks)requestHeader.ReturnDiagnostics, localeIds, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Returns whether the error is a security error. + /// + /// The error. + /// + /// true if the error is one of the security errors, otherwise false. + /// + protected bool IsSecurityError(StatusCode error) + { + switch (error.CodeBits) + { + case StatusCodes.BadUserSignatureInvalid: + case StatusCodes.BadUserAccessDenied: + case StatusCodes.BadSecurityPolicyRejected: + case StatusCodes.BadSecurityModeRejected: + case StatusCodes.BadSecurityChecksFailed: + case StatusCodes.BadSecureChannelTokenUnknown: + case StatusCodes.BadSecureChannelIdInvalid: + case StatusCodes.BadNoValidCertificates: + case StatusCodes.BadIdentityTokenInvalid: + case StatusCodes.BadIdentityTokenRejected: + case StatusCodes.BadIdentityChangeNotSupported: + case StatusCodes.BadCertificateUseNotAllowed: + case StatusCodes.BadCertificateUriInvalid: + case StatusCodes.BadCertificateUntrusted: + case StatusCodes.BadCertificateTimeInvalid: + case StatusCodes.BadCertificateRevoked: + case StatusCodes.BadCertificateRevocationUnknown: + case StatusCodes.BadCertificateIssuerUseNotAllowed: + case StatusCodes.BadCertificateIssuerTimeInvalid: + case StatusCodes.BadCertificateIssuerRevoked: + case StatusCodes.BadCertificateIssuerRevocationUnknown: + case StatusCodes.BadCertificateInvalid: + case StatusCodes.BadCertificateHostNameInvalid: + case StatusCodes.BadApplicationSignatureInvalid: + { + return true; + } + } + + return false; + } + + /// + /// Creates the response header. + /// + /// The object that contains description for the RequestHeader DataType. + /// The exception used to create DiagnosticInfo assigned to the ServiceDiagnostics. + /// Returns a description for the ResponseHeader DataType. + protected ResponseHeader CreateResponse(RequestHeader requestHeader, ServiceResultException exception) + { + ResponseHeader responseHeader = new ResponseHeader(); + + responseHeader.ServiceResult = exception.StatusCode; + + responseHeader.Timestamp = DateTime.UtcNow; + responseHeader.RequestHandle = requestHeader.RequestHandle; + + StringTable stringTable = new StringTable(); + responseHeader.ServiceDiagnostics = new DiagnosticInfo(exception, (DiagnosticsMasks)requestHeader.ReturnDiagnostics, true, stringTable); + responseHeader.StringTable = stringTable.ToArray(); + + return responseHeader; + } + + /// + /// Invokes the CloseSession service. + /// + /// The request header. + /// if set to true subscriptions are deleted. + /// + /// Returns a object + /// + public override ResponseHeader CloseSession(RequestHeader requestHeader, bool deleteSubscriptions) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.CloseSession); + + try + { + ServerInternal.CloseSession(context, context.Session.Id, deleteSubscriptions); + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the Cancel service. + /// + /// The request header. + /// The request handle assigned to the request. + /// The number of cancelled requests. + /// + /// Returns a object + /// + public override ResponseHeader Cancel( + RequestHeader requestHeader, + uint requestHandle, + out uint cancelCount) + { + cancelCount = 0; + + OperationContext context = ValidateRequest(requestHeader, RequestType.Cancel); + + try + { + m_serverInternal.RequestManager.CancelRequests(requestHandle, out cancelCount); + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the Browse service. + /// + /// The request header. + /// The view. + /// The maximum number of references to return for each node. + /// The list of nodes to browse. + /// The list of results for the passed starting nodes and filters. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader Browse( + RequestHeader requestHeader, + ViewDescription view, + uint requestedMaxReferencesPerNode, + BrowseDescriptionCollection nodesToBrowse, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + OperationContext context = ValidateRequest(requestHeader, RequestType.Browse); + + try + { + if (nodesToBrowse == null || nodesToBrowse.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.Browse( + context, + view, + requestedMaxReferencesPerNode, + nodesToBrowse, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the BrowseNext service. + /// + /// The request header. + /// if set to true the continuation points are released. + /// A list of continuation points returned in a previous Browse or BrewseNext call. + /// The list of resulted references for browse. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader BrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoints, + ByteStringCollection continuationPoints, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + OperationContext context = ValidateRequest(requestHeader, RequestType.BrowseNext); + + try + { + if (continuationPoints == null || continuationPoints.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.BrowseNext( + context, + releaseContinuationPoints, + continuationPoints, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the RegisterNodes service. + /// + /// The request header. + /// The list of NodeIds to register. + /// The list of NodeIds identifying the registered nodes. + /// + /// Returns a object + /// + public override ResponseHeader RegisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToRegister, + out NodeIdCollection registeredNodeIds) + { + registeredNodeIds = null; + + OperationContext context = ValidateRequest(requestHeader, RequestType.RegisterNodes); + + try + { + if (nodesToRegister == null || nodesToRegister.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.RegisterNodes( + context, + nodesToRegister, + out registeredNodeIds); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the UnregisterNodes service. + /// + /// The request header. + /// The list of NodeIds to unregister + /// + /// Returns a object + /// + public override ResponseHeader UnregisterNodes(RequestHeader requestHeader, NodeIdCollection nodesToUnregister) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.UnregisterNodes); + + try + { + if (nodesToUnregister == null || nodesToUnregister.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.UnregisterNodes( + context, + nodesToUnregister); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the TranslateBrowsePathsToNodeIds service. + /// + /// The request header. + /// The list of browse paths for which NodeIds are being requested. + /// The list of results for the list of browse paths. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader TranslateBrowsePathsToNodeIds( + RequestHeader requestHeader, + BrowsePathCollection browsePaths, + out BrowsePathResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + OperationContext context = ValidateRequest(requestHeader, RequestType.TranslateBrowsePathsToNodeIds); + + try + { + if (browsePaths == null || browsePaths.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.TranslateBrowsePathsToNodeIds( + context, + browsePaths, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the Read service. + /// + /// The request header. + /// The Maximum age of the value to be read in milliseconds. + /// The type of timestamps to be returned for the requested Variables. + /// The list of Nodes and their Attributes to read. + /// The list of returned Attribute values + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader Read( + RequestHeader requestHeader, + double maxAge, + TimestampsToReturn timestampsToReturn, + ReadValueIdCollection nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.Read); + + try + { + if (nodesToRead == null || nodesToRead.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.Read( + context, + maxAge, + timestampsToReturn, + nodesToRead, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the HistoryRead service. + /// + /// The request header. + /// The history read details. + /// The timestamps to return. + /// if set to true continuation points are released. + /// The nodes to read. + /// The results. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader HistoryRead( + RequestHeader requestHeader, + ExtensionObject historyReadDetails, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueIdCollection nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.HistoryRead); + + try + { + if (nodesToRead == null || nodesToRead.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.HistoryRead( + context, + historyReadDetails, + timestampsToReturn, + releaseContinuationPoints, + nodesToRead, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the Write service. + /// + /// The request header. + /// The list of Nodes, Attributes, and values to write. + /// The list of write result status codes for each write operation. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader Write( + RequestHeader requestHeader, + WriteValueCollection nodesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.Write); + + try + { + if (nodesToWrite == null || nodesToWrite.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.Write( + context, + nodesToWrite, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the HistoryUpdate service. + /// + /// The request header. + /// The details defined for the update. + /// The list of update results for the history update details. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader HistoryUpdate( + RequestHeader requestHeader, + ExtensionObjectCollection historyUpdateDetails, + out HistoryUpdateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.HistoryUpdate); + + try + { + if (historyUpdateDetails == null || historyUpdateDetails.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + m_serverInternal.NodeManager.HistoryUpdate( + context, + historyUpdateDetails, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the CreateSubscription service. + /// + /// The request header. + /// The cyclic rate that the Subscription is being requested to return Notifications to the Client. + /// The client-requested lifetime count for the Subscription + /// The requested max keep alive count. + /// The maximum number of notifications that the Client wishes to receive in a single Publish response. + /// If set to true publishing is enabled for the Subscription. + /// The relative priority of the Subscription. + /// The Server-assigned identifier for the Subscription. + /// The actual publishing interval that the Server will use. + /// The revised lifetime count. + /// The revised max keep alive count. + /// + /// Returns a object + /// + public override ResponseHeader CreateSubscription( + RequestHeader requestHeader, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + bool publishingEnabled, + byte priority, + out uint subscriptionId, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.CreateSubscription); + + try + { + ServerInternal.SubscriptionManager.CreateSubscription( + context, + requestedPublishingInterval, + requestedLifetimeCount, + requestedMaxKeepAliveCount, + maxNotificationsPerPublish, + publishingEnabled, + priority, + out subscriptionId, + out revisedPublishingInterval, + out revisedLifetimeCount, + out revisedMaxKeepAliveCount); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the DeleteSubscriptions service. + /// + /// The request header. + /// The list of Subscriptions to delete. + /// The list of result StatusCodes for the Subscriptions to delete. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader DeleteSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.DeleteSubscriptions); + + try + { + if (subscriptionIds == null || subscriptionIds.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.DeleteSubscriptions( + context, + subscriptionIds, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the Publish service. + /// + /// The request header. + /// The list of acknowledgements for one or more Subscriptions. + /// The subscription identifier. + /// The available sequence numbers. + /// If set to true the number of Notifications that were ready to be sent could not be sent in a single response. + /// The NotificationMessage that contains the list of Notifications. + /// The list of results for the acknowledgements. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader Publish( + RequestHeader requestHeader, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications, + out NotificationMessage notificationMessage, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.Publish); + + try + { + /* + // check if there is an odd delay. + if (DateTime.UtcNow > requestHeader.Timestamp.AddMilliseconds(100)) + { + Utils.Trace( + "WARNING. Unexpected delay receiving Publish request. Time={0:hh:mm:ss.fff}, ReceiveTime={1:hh:mm:ss.fff}", + DateTime.UtcNow, + requestHeader.Timestamp); + } + */ + + Utils.Trace("PUBLISH #{0} RECEIVED. TIME={1:hh:mm:ss.fff}", requestHeader.RequestHandle, requestHeader.Timestamp); + + notificationMessage = ServerInternal.SubscriptionManager.Publish( + context, + subscriptionAcknowledgements, + null, + out subscriptionId, + out availableSequenceNumbers, + out moreNotifications, + out results, + out diagnosticInfos); + + /* + if (notificationMessage != null) + { + Utils.Trace( + "PublishResponse: SubId={0} SeqNo={1}, PublishTime={2:mm:ss.fff}, Time={3:mm:ss.fff}", + subscriptionId, + notificationMessage.SequenceNumber, + notificationMessage.PublishTime, + DateTime.UtcNow); + } + */ + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Begins an asynchronous publish operation. + /// + /// The request. + public virtual void BeginPublish(IEndpointIncomingRequest request) + { + PublishRequest input = (PublishRequest)request.Request; + OperationContext context = ValidateRequest(input.RequestHeader, RequestType.Publish); + + try + { + AsyncPublishOperation operation = new AsyncPublishOperation(context, request, this); + + uint subscriptionId = 0; + UInt32Collection availableSequenceNumbers = null; + bool moreNotifications = false; + NotificationMessage notificationMessage = null; + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + notificationMessage = ServerInternal.SubscriptionManager.Publish( + context, + input.SubscriptionAcknowledgements, + operation, + out subscriptionId, + out availableSequenceNumbers, + out moreNotifications, + out results, + out diagnosticInfos); + + // request completed asychrnously. + if (notificationMessage != null) + { + OnRequestComplete(context); + + operation.Response.ResponseHeader = CreateResponse(input.RequestHeader, context.StringTable); + operation.Response.SubscriptionId = subscriptionId; + operation.Response.AvailableSequenceNumbers = availableSequenceNumbers; + operation.Response.MoreNotifications = moreNotifications; + operation.Response.Results = results; + operation.Response.DiagnosticInfos = diagnosticInfos; + operation.Response.NotificationMessage = notificationMessage; + + Utils.Trace("PUBLISH: #{0} Completed Synchronously", input.RequestHeader.RequestHandle); + request.OperationCompleted(operation.Response, null); + } + } + catch (ServiceResultException e) + { + OnRequestComplete(context); + + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + } + + /// + /// Completes an asynchronous publish operation. + /// + /// The request. + public virtual void CompletePublish(IEndpointIncomingRequest request) + { + AsyncPublishOperation operation = (AsyncPublishOperation)request.Calldata; + OperationContext context = operation.Context; + + try + { + if (ServerInternal.SubscriptionManager.CompletePublish(context, operation)) + { + operation.Response.ResponseHeader = CreateResponse(request.Request.RequestHeader, context.StringTable); + request.OperationCompleted(operation.Response, null); + OnRequestComplete(context); + } + } + catch (ServiceResultException e) + { + OnRequestComplete(context); + + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + } + + /// + /// Invokes the Republish service. + /// + /// The request header. + /// The subscription id. + /// The sequence number of a specific NotificationMessage to be republished. + /// The requested NotificationMessage. + /// + /// Returns a object + /// + public override ResponseHeader Republish( + RequestHeader requestHeader, + uint subscriptionId, + uint retransmitSequenceNumber, + out NotificationMessage notificationMessage) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.Republish); + + try + { + notificationMessage = ServerInternal.SubscriptionManager.Republish( + context, + subscriptionId, + retransmitSequenceNumber); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the ModifySubscription service. + /// + /// The request header. + /// The subscription id. + /// The cyclic rate that the Subscription is being requested to return Notifications to the Client. + /// The client-requested lifetime count for the Subscription. + /// The requested max keep alive count. + /// The maximum number of notifications that the Client wishes to receive in a single Publish response. + /// The relative priority of the Subscription. + /// The revised publishing interval. + /// The revised lifetime count. + /// The revised max keep alive count. + /// + /// Returns a object + /// + public override ResponseHeader ModifySubscription( + RequestHeader requestHeader, + uint subscriptionId, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.ModifySubscription); + + try + { + ServerInternal.SubscriptionManager.ModifySubscription( + context, + subscriptionId, + requestedPublishingInterval, + requestedLifetimeCount, + requestedMaxKeepAliveCount, + maxNotificationsPerPublish, + priority, + out revisedPublishingInterval, + out revisedLifetimeCount, + out revisedMaxKeepAliveCount); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the SetPublishingMode service. + /// + /// The request header. + /// If set to true publishing of NotificationMessages is enabled for the Subscription. + /// The list of subscription ids. + /// The list of StatusCodes for the Subscriptions to enable/disable. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader SetPublishingMode( + RequestHeader requestHeader, + bool publishingEnabled, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.SetPublishingMode); + + try + { + if (subscriptionIds == null || subscriptionIds.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.SetPublishingMode( + context, + publishingEnabled, + subscriptionIds, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the SetTriggering service. + /// + /// The request header. + /// The subscription id. + /// The id for the MonitoredItem used as the triggering item. + /// The list of ids of the items to report that are to be added as triggering links. + /// The list of ids of the items to report for the triggering links to be deleted. + /// The list of StatusCodes for the items to add. + /// The list of diagnostic information for the links to add. + /// The list of StatusCodes for the items to delete. + /// The list of diagnostic information for the links to delete. + /// + /// Returns a object + /// + public override ResponseHeader SetTriggering( + RequestHeader requestHeader, + uint subscriptionId, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos) + { + addResults = null; + addDiagnosticInfos = null; + removeResults = null; + removeDiagnosticInfos = null; + + OperationContext context = ValidateRequest(requestHeader, RequestType.SetTriggering); + + try + { + if ((linksToAdd == null || linksToAdd.Count == 0) && (linksToRemove == null || linksToRemove.Count == 0)) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.SetTriggering( + context, + subscriptionId, + triggeringItemId, + linksToAdd, + linksToRemove, + out addResults, + out addDiagnosticInfos, + out removeResults, + out removeDiagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the CreateMonitoredItems service. + /// + /// The request header. + /// The subscription id that will report notifications. + /// The type of timestamps to be returned for the MonitoredItems. + /// The list of MonitoredItems to be created and assigned to the specified subscription + /// The list of results for the MonitoredItems to create. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader CreateMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.CreateMonitoredItems); + + try + { + if (itemsToCreate == null || itemsToCreate.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.CreateMonitoredItems( + context, + subscriptionId, + timestampsToReturn, + itemsToCreate, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the ModifyMonitoredItems service. + /// + /// The request header. + /// The subscription id. + /// The type of timestamps to be returned for the MonitoredItems. + /// The list of MonitoredItems to modify. + /// The list of results for the MonitoredItems to modify. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader ModifyMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.ModifyMonitoredItems); + + try + { + if (itemsToModify == null || itemsToModify.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.ModifyMonitoredItems( + context, + subscriptionId, + timestampsToReturn, + itemsToModify, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the DeleteMonitoredItems service. + /// + /// The request header. + /// The subscription id. + /// The list of MonitoredItems to delete. + /// The list of results for the MonitoredItems to delete. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader DeleteMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.DeleteMonitoredItems); + + try + { + if (monitoredItemIds == null || monitoredItemIds.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.DeleteMonitoredItems( + context, + subscriptionId, + monitoredItemIds, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the SetMonitoringMode service. + /// + /// The request header. + /// The subscription id. + /// The monitoring mode to be set for the MonitoredItems. + /// The list of MonitoredItems to modify. + /// The list of results for the MonitoredItems to modify. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader SetMonitoringMode( + RequestHeader requestHeader, + uint subscriptionId, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.SetMonitoringMode); + + try + { + if (monitoredItemIds == null || monitoredItemIds.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + ServerInternal.SubscriptionManager.SetMonitoringMode( + context, + subscriptionId, + monitoringMode, + monitoredItemIds, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + + /// + /// Invokes the Call service. + /// + /// The request header. + /// The methods to call. + /// The results. + /// The diagnostic information for the results. + /// + /// Returns a object + /// + public override ResponseHeader Call( + RequestHeader requestHeader, + CallMethodRequestCollection methodsToCall, + out CallMethodResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + OperationContext context = ValidateRequest(requestHeader, RequestType.Call); + + try + { + if (methodsToCall == null || methodsToCall.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNothingToDo); + } + + uint maxNodesPerMethodCall = 0; + + try + { + maxNodesPerMethodCall = ServerInternal.ServerObject.ServerCapabilities.OperationLimits.MaxNodesPerMethodCall.Value; + } + catch + { + //ignore erros + } + + if (maxNodesPerMethodCall > 0 && methodsToCall.Count > maxNodesPerMethodCall) + { + throw new ServiceResultException(StatusCodes.BadTooManyOperations); + } + + m_serverInternal.NodeManager.Call( + context, + methodsToCall, + out results, + out diagnosticInfos); + + return CreateResponse(requestHeader, context.StringTable); + } + catch (ServiceResultException e) + { + lock (ServerInternal.DiagnosticsWriteLock) + { + ServerInternal.ServerDiagnostics.RejectedRequestsCount++; + + if (IsSecurityError(e.StatusCode)) + { + ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++; + } + } + + throw TranslateException(context, e); + } + finally + { + OnRequestComplete(context); + } + } + #endregion + + #region Public Methods used by the Host Process + /// + /// The state object associated with the server. + /// It provides the shared components for the Server. + /// + /// The current instance. + public IServerInternal CurrentInstance + { + get + { + lock (m_lock) + { + if (m_serverInternal == null) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + return m_serverInternal; + } + } + } + + /// + /// Returns the current status of the server. + /// + /// Returns a ServerStatusDataType object + public ServerStatusDataType GetStatus() + { + lock (m_lock) + { + if (m_serverInternal == null) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + return m_serverInternal.Status.Value; + } + } + + /// + /// Registers the server with the discovery server. + /// + /// Boolean value. + public async Task RegisterWithDiscoveryServer() + { + ApplicationConfiguration configuration = string.IsNullOrEmpty(base.Configuration.SourceFilePath) ? + base.Configuration : await ApplicationConfiguration.Load(new FileInfo(base.Configuration.SourceFilePath), ApplicationType.Server, null, false); + CertificateValidationEventHandler registrationCertificateValidator = new CertificateValidationEventHandler(RegistrationValidator_CertificateValidation); + configuration.CertificateValidator.CertificateValidation += registrationCertificateValidator; + + try + { + // try each endpoint. + if (m_registrationEndpoints != null) + { + foreach (ConfiguredEndpoint endpoint in m_registrationEndpoints.Endpoints) + { + RegistrationClient client = null; + int i = 0; + + while (i++ < 2) + { + try + { + // update from the server. + bool updateRequired = true; + + lock (m_registrationLock) + { + updateRequired = endpoint.UpdateBeforeConnect; + } + + if (updateRequired) + { + endpoint.UpdateFromServer(); + } + + lock (m_registrationLock) + { + endpoint.UpdateBeforeConnect = false; + } + + RequestHeader requestHeader = new RequestHeader(); + requestHeader.Timestamp = DateTime.UtcNow; + + // create the client. + client = RegistrationClient.Create( + configuration, + endpoint.Description, + endpoint.Configuration, + base.InstanceCertificate); + + client.OperationTimeout = 10000; + + // register the server. + if (m_useRegisterServer2) + { + ExtensionObjectCollection discoveryConfiguration = new ExtensionObjectCollection(); + StatusCodeCollection configurationResults = null; + DiagnosticInfoCollection diagnosticInfos = null; + MdnsDiscoveryConfiguration mdnsDiscoveryConfig = new MdnsDiscoveryConfiguration(); + mdnsDiscoveryConfig.ServerCapabilities = configuration.ServerConfiguration.ServerCapabilities; + mdnsDiscoveryConfig.MdnsServerName = Utils.GetHostName(); + ExtensionObject extensionObject = new ExtensionObject(mdnsDiscoveryConfig); + discoveryConfiguration.Add(extensionObject); + client.RegisterServer2( + requestHeader, + m_registrationInfo, + discoveryConfiguration, + out configurationResults, + out diagnosticInfos); + } + else + { + client.RegisterServer(requestHeader, m_registrationInfo); + } + + return true; + } + catch (Exception e) + { + Utils.Trace("RegisterServer{0} failed for at: {1}. Exception={2}", + m_useRegisterServer2 ? "2" : "", endpoint.EndpointUrl, e.Message); + m_useRegisterServer2 = !m_useRegisterServer2; + } + finally + { + if (client != null) + { + try + { + client.Close(); + client = null; + } + catch (Exception e) + { + Utils.Trace("Could not cleanly close connection with LDS. Exception={0}", e.Message); + } + } + } + } + } + // retry to start with RegisterServer2 if both failed + m_useRegisterServer2 = true; + } + } + finally + { + if (configuration != null) + { + configuration.CertificateValidator.CertificateValidation -= registrationCertificateValidator; + } + } + + return false; + } + + /// + /// Checks that the domains in the certificate match the current host. + /// + private void RegistrationValidator_CertificateValidation(CertificateValidator sender, CertificateValidationEventArgs e) + { + System.Net.IPAddress[] targetAddresses = Utils.GetHostAddresses(Utils.GetHostName()); + + foreach (string domain in X509Utils.GetDomainsFromCertficate(e.Certificate)) + { + System.Net.IPAddress[] actualAddresses = Utils.GetHostAddresses(domain); + + foreach (System.Net.IPAddress actualAddress in actualAddresses) + { + foreach (System.Net.IPAddress targetAddress in targetAddresses) + { + if (targetAddress.Equals(actualAddress)) + { + e.Accept = true; + return; + } + } + } + } + } + + /// + /// Registers the server endpoints with the LDS. + /// + /// The state. + private async void OnRegisterServer(object state) + { + try + { + lock (m_registrationLock) + { + // halt any outstanding timer. + if (m_registrationTimer != null) + { + m_registrationTimer.Dispose(); + m_registrationTimer = null; + } + } + + if (await RegisterWithDiscoveryServer()) + { + // schedule next registration. + lock (m_registrationLock) + { + if (m_maxRegistrationInterval > 0) + { + m_registrationTimer = new Timer( + OnRegisterServer, + this, + m_maxRegistrationInterval, + Timeout.Infinite); + + m_lastRegistrationInterval = m_minRegistrationInterval; + Utils.Trace("Register server succeeded. Registering again in {0} ms", m_maxRegistrationInterval); + } + } + } + else + { + lock (m_registrationLock) + { + if (m_registrationTimer == null) + { + // calculate next registration attempt. + m_lastRegistrationInterval *= 2; + + if (m_lastRegistrationInterval > m_maxRegistrationInterval) + { + m_lastRegistrationInterval = m_maxRegistrationInterval; + } + + Utils.Trace("Register server failed. Trying again in {0} ms", m_lastRegistrationInterval); + + // create timer. + m_registrationTimer = new Timer(OnRegisterServer, this, m_lastRegistrationInterval, Timeout.Infinite); + } + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected exception handling registration timer."); + } + } + #endregion + + #region Protected Members used for Request Processing + /// + /// The synchronization object. + /// + protected object Lock => m_lock; + + /// + /// The state object associated with the server. + /// + /// The server internal data. + protected ServerInternalData ServerInternal + { + get + { + ServerInternalData serverInternal = m_serverInternal; + + if (serverInternal == null) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + return serverInternal; + } + } + + /// + /// Verifies that the request header is valid. + /// + /// The request header. + protected override void ValidateRequest(RequestHeader requestHeader) + { + // check for server error. + ServiceResult error = ServerError; + + if (ServiceResult.IsBad(error)) + { + throw new ServiceResultException(error); + } + + // check server state. + ServerInternalData serverInternal = m_serverInternal; + + if (serverInternal == null || !serverInternal.IsRunning) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + base.ValidateRequest(requestHeader); + } + + /// + /// Updates the server state. + /// + /// The state. + protected virtual void SetServerState(ServerState state) + { + lock (m_lock) + { + if (ServiceResult.IsBad(ServerError)) + { + throw new ServiceResultException(ServerError); + } + + if (m_serverInternal == null) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + m_serverInternal.CurrentState = state; + } + } + + /// + /// Reports an error during initialization after the base server object has been started. + /// + /// The error. + protected virtual void SetServerError(ServiceResult error) + { + lock (m_lock) + { + ServerError = error; + } + } + + /// + /// Handles an error when validating the application instance certificate provided by a client. + /// + /// The client certificate. + /// The result. + protected virtual void OnApplicationCertificateError(byte[] clientCertificate, ServiceResult result) + { + throw new ServiceResultException(result); + } + + /// + /// Inspects the software certificates provided by the server. + /// + /// The software certificates. + protected virtual void ValidateSoftwareCertificates(List softwareCertificates) + { + // always accept valid certificates. + } + + /// + /// Verifies that the request header is valid. + /// + /// The request header. + /// Type of the request. + /// + protected virtual OperationContext ValidateRequest(RequestHeader requestHeader, RequestType requestType) + { + base.ValidateRequest(requestHeader); + + if (!ServerInternal.IsRunning) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + OperationContext context = ServerInternal.SessionManager.ValidateRequest(requestHeader, requestType); + + Utils.Trace( + (int)Utils.TraceMasks.Service, + "{0} Validated. ID={1}", + context.RequestType, + context.RequestId); + + // notify the request manager. + ServerInternal.RequestManager.RequestReceived(context); + + return context; + } + + /// + /// Translates an exception. + /// + /// The context. + /// The ServiceResultException e. + /// Returns an exception thrown when a UA defined error occurs, the return type is . + protected virtual ServiceResultException TranslateException(OperationContext context, ServiceResultException e) + { + IList preferredLocales = null; + + if (context != null && context.Session != null) + { + preferredLocales = context.Session.PreferredLocales; + } + + return TranslateException(context.DiagnosticsMask, preferredLocales, e); + } + + /// + /// Translates an exception. + /// + /// The fields to return. + /// The preferred locales. + /// The ServiceResultException e. + /// Returns an exception thrown when a UA defined error occurs, the return type is . + protected virtual ServiceResultException TranslateException(DiagnosticsMasks diagnosticsMasks, IList preferredLocales, ServiceResultException e) + { + if (e == null) + { + return null; + } + + // check if inner result required. + ServiceResult innerResult = null; + + if ((diagnosticsMasks & (DiagnosticsMasks.ServiceInnerDiagnostics | DiagnosticsMasks.ServiceInnerStatusCode)) != 0) + { + innerResult = e.InnerResult; + } + + // check if translated text required. + LocalizedText translatedText = null; + + if ((diagnosticsMasks & DiagnosticsMasks.ServiceLocalizedText) != 0) + { + translatedText = e.LocalizedText; + } + + // create new result object. + ServiceResult result = new ServiceResult( + e.StatusCode, + e.SymbolicId, + e.NamespaceUri, + translatedText, + e.AdditionalInfo, + innerResult); + + // translate result. + result = m_serverInternal.ResourceManager.Translate(preferredLocales, result); + return new ServiceResultException(result); + } + + /// + /// Translates a service result. + /// + /// The fields to return. + /// The preferred locales. + /// The result. + /// Returns a class that combines the status code and diagnostic info structures. + protected virtual ServiceResult TranslateResult(DiagnosticsMasks diagnosticsMasks, IList preferredLocales, ServiceResult result) + { + if (result == null) + { + return null; + } + + return m_serverInternal.ResourceManager.Translate(preferredLocales, result); + } + + /// + /// Verifies that the request header is valid. + /// + /// The operation context. + protected virtual void OnRequestComplete(OperationContext context) + { + lock (m_lock) + { + if (m_serverInternal == null) + { + throw new ServiceResultException(StatusCodes.BadServerHalted); + } + + m_serverInternal.RequestManager.RequestCompleted(context); + } + } + #endregion + + #region Protected Members used for Initialization + /// + /// Raised when the configuration changes. + /// + /// The sender. + /// The instance containing the event data. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] + protected virtual async void OnConfigurationChanged(object sender, ConfigurationWatcherEventArgs args) + { + try + { + ApplicationConfiguration configuration = await ApplicationConfiguration.Load( + new FileInfo(args.FilePath), + Configuration.ApplicationType, + Configuration.GetType()); + + OnUpdateConfiguration(configuration); + } + catch (Exception e) + { + Utils.Trace(e, "Could not load updated configuration file from: {0}", args); + } + } + + /// + /// Called when the server configuration is changed on disk. + /// + /// The configuration. + /// + /// Servers are free to ignore changes if it is difficult/impossible to apply them without a restart. + /// + protected override void OnUpdateConfiguration(ApplicationConfiguration configuration) + { + lock (m_lock) + { + // update security configuration. + configuration.SecurityConfiguration.Validate(); + + Configuration.SecurityConfiguration.TrustedIssuerCertificates = configuration.SecurityConfiguration.TrustedIssuerCertificates; + Configuration.SecurityConfiguration.TrustedPeerCertificates = configuration.SecurityConfiguration.TrustedPeerCertificates; + Configuration.SecurityConfiguration.RejectedCertificateStore = configuration.SecurityConfiguration.RejectedCertificateStore; + + Configuration.CertificateValidator.Update(Configuration.SecurityConfiguration).Wait(); + + // update trace configuration. + Configuration.TraceConfiguration = configuration.TraceConfiguration; + + if (Configuration.TraceConfiguration == null) + { + Configuration.TraceConfiguration = new TraceConfiguration(); + } + + Configuration.TraceConfiguration.ApplySettings(); + } + } + + + /// + /// Called before the server starts. + /// + /// The configuration. + protected override void OnServerStarting(ApplicationConfiguration configuration) + { + lock (m_lock) + { + base.OnServerStarting(configuration); + + // save minimum nonce length. + m_minNonceLength = configuration.SecurityConfiguration.NonceLength; + + // try first RegisterServer2 + m_useRegisterServer2 = true; + } + } + + /// + /// Creates the endpoints and creates the hosts. + /// + /// The configuration. + /// The server description. + /// The endpoints. + /// + /// Returns IList of a host for a UA service. + /// + protected override IList InitializeServiceHosts( + ApplicationConfiguration configuration, + out ApplicationDescription serverDescription, + out EndpointDescriptionCollection endpoints) + { + serverDescription = null; + endpoints = null; + + Dictionary hosts = new Dictionary(); + + // ensure at least one security policy exists. + if (configuration.ServerConfiguration.SecurityPolicies.Count == 0) + { + configuration.ServerConfiguration.SecurityPolicies.Add(new ServerSecurityPolicy()); + } + + // ensure at least one user token policy exists. + if (configuration.ServerConfiguration.UserTokenPolicies.Count == 0) + { + UserTokenPolicy userTokenPolicy = new UserTokenPolicy(); + + userTokenPolicy.TokenType = UserTokenType.Anonymous; + userTokenPolicy.PolicyId = userTokenPolicy.TokenType.ToString(); + + configuration.ServerConfiguration.UserTokenPolicies.Add(userTokenPolicy); + } + + // set server description. + serverDescription = new ApplicationDescription(); + + serverDescription.ApplicationUri = configuration.ApplicationUri; + serverDescription.ApplicationName = new LocalizedText("en-US", configuration.ApplicationName); + serverDescription.ApplicationType = configuration.ApplicationType; + serverDescription.ProductUri = configuration.ProductUri; + serverDescription.DiscoveryUrls = GetDiscoveryUrls(); + + endpoints = new EndpointDescriptionCollection(); + IList endpointsForHost = null; + + foreach (var scheme in Utils.DefaultUriSchemes) + { + var binding = TransportBindings.Listeners.GetBinding(scheme); + if (binding != null) + { + endpointsForHost = binding.CreateServiceHost( + this, + hosts, + configuration, + configuration.ServerConfiguration.BaseAddresses, + serverDescription, + configuration.ServerConfiguration.SecurityPolicies, + InstanceCertificate, + InstanceCertificateChain + ); + endpoints.AddRange(endpointsForHost); + } + } + + return new List(hosts.Values); + } + + /// + /// Returns the service contract to use. + /// + protected override Type GetServiceContract() + { + return typeof(ISessionEndpoint); + } + + /// + /// Returns an instance of the endpoint to use. + /// + protected override EndpointBase GetEndpointInstance(ServerBase server) + { + return new SessionEndpoint(server); + } + + /// + /// Starts the server application. + /// + /// The configuration. + protected override void StartApplication(ApplicationConfiguration configuration) + { + base.StartApplication(configuration); + + lock (m_lock) + { + try + { + // create the datastore for the instance. + m_serverInternal = new ServerInternalData( + ServerProperties, + configuration, + MessageContext, + new CertificateValidator(), + InstanceCertificate); + + // create the manager responsible for providing localized string resources. + ResourceManager resourceManager = CreateResourceManager(m_serverInternal, configuration); + + // create the manager responsible for incoming requests. + RequestManager requestManager = CreateRequestManager(m_serverInternal, configuration); + + // create the master node manager. + MasterNodeManager masterNodeManager = CreateMasterNodeManager(m_serverInternal, configuration); + + // add the node manager to the datastore. + m_serverInternal.SetNodeManager(masterNodeManager); + + // put the node manager into a state that allows it to be used by other objects. + masterNodeManager.Startup(); + + // create the manager responsible for handling events. + EventManager eventManager = CreateEventManager(m_serverInternal, configuration); + + // creates the server object. + m_serverInternal.CreateServerObject( + eventManager, + resourceManager, + requestManager); + + // do any additional processing now that the node manager is up and running. + OnNodeManagerStarted(m_serverInternal); + + // create the manager responsible for aggregates. + m_serverInternal.AggregateManager = CreateAggregateManager(m_serverInternal, configuration); + + // start the session manager. + SessionManager sessionManager = CreateSessionManager(m_serverInternal, configuration); + sessionManager.Startup(); + + // start the subscription manager. + SubscriptionManager subscriptionManager = CreateSubscriptionManager(m_serverInternal, configuration); + subscriptionManager.Startup(); + + // add the session manager to the datastore. + m_serverInternal.SetSessionManager(sessionManager, subscriptionManager); + + ServerError = null; + + // setup registration information. + lock (m_registrationLock) + { + m_maxRegistrationInterval = configuration.ServerConfiguration.MaxRegistrationInterval; + + ApplicationDescription serverDescription = ServerDescription; + + m_registrationInfo = new RegisteredServer(); + + m_registrationInfo.ServerUri = serverDescription.ApplicationUri; + m_registrationInfo.ServerNames.Add(serverDescription.ApplicationName); + m_registrationInfo.ProductUri = serverDescription.ProductUri; + m_registrationInfo.ServerType = serverDescription.ApplicationType; + m_registrationInfo.GatewayServerUri = null; + m_registrationInfo.IsOnline = true; + m_registrationInfo.SemaphoreFilePath = null; + + // add all discovery urls. + string computerName = Utils.GetHostName(); + + for (int ii = 0; ii < BaseAddresses.Count; ii++) + { + UriBuilder uri = new UriBuilder(BaseAddresses[ii].DiscoveryUrl); + + if (String.Compare(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase) == 0) + { + uri.Host = computerName; + } + + m_registrationInfo.DiscoveryUrls.Add(uri.ToString()); + } + + // build list of registration endpoints. + m_registrationEndpoints = new ConfiguredEndpointCollection(configuration); + + EndpointDescription endpoint = configuration.ServerConfiguration.RegistrationEndpoint; + + if (endpoint == null) + { + endpoint = new EndpointDescription(); + endpoint.EndpointUrl = Utils.Format(Utils.DiscoveryUrls[0], "localhost"); + endpoint.SecurityLevel = ServerSecurityPolicy.CalculateSecurityLevel(MessageSecurityMode.SignAndEncrypt, SecurityPolicies.Basic256Sha256); + endpoint.SecurityMode = MessageSecurityMode.SignAndEncrypt; + endpoint.SecurityPolicyUri = SecurityPolicies.Basic256Sha256; + endpoint.Server.ApplicationType = ApplicationType.DiscoveryServer; + } + + m_registrationEndpoints.Add(endpoint); + + m_minRegistrationInterval = 1000; + m_lastRegistrationInterval = m_minRegistrationInterval; + + // start registration timer. + if (m_registrationTimer != null) + { + m_registrationTimer.Dispose(); + m_registrationTimer = null; + } + + if (m_maxRegistrationInterval > 0) + { + m_registrationTimer = new Timer(OnRegisterServer, this, m_minRegistrationInterval, Timeout.Infinite); + } + } + + // set the server status as running. + SetServerState(ServerState.Running); + + // all initialization is complete. + OnServerStarted(m_serverInternal); + + // monitor the configuration file. + if (!String.IsNullOrEmpty(configuration.SourceFilePath)) + { + m_configurationWatcher = new ConfigurationWatcher(configuration); + m_configurationWatcher.Changed += new EventHandler(this.OnConfigurationChanged); + } + + CertificateValidator.CertificateUpdate += OnCertificateUpdate; + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error starting application"); + m_serverInternal = null; + ServiceResult error = ServiceResult.Create(e, StatusCodes.BadInternalError, "Unexpected error starting application"); + ServerError = error; + throw new ServiceResultException(error); + } + } + } + + /// + /// Called before the server stops + /// + protected override void OnServerStopping() + { + ShutDownDelay(); + + // halt any outstanding timer. + lock (m_registrationLock) + { + if (m_registrationTimer != null) + { + m_registrationTimer.Dispose(); + m_registrationTimer = null; + } + } + + // attempt graceful shutdown the server. + try + { + if (m_maxRegistrationInterval > 0) + { + // unregister from Discovery Server + m_registrationInfo.IsOnline = false; + RegisterWithDiscoveryServer().Wait(); + } + + lock (m_lock) + { + if (m_serverInternal != null) + { + m_serverInternal.SubscriptionManager.Shutdown(); + m_serverInternal.SessionManager.Shutdown(); + m_serverInternal.NodeManager.Shutdown(); + } + } + } + catch (Exception e) + { + ServerError = new ServiceResult(e); + } + finally + { + // ensure that everything is cleaned up. + if (m_serverInternal != null) + { + Utils.SilentDispose(m_serverInternal); + m_serverInternal = null; + } + } + } + + /// + /// Implements the server shutdown delay if session are connected. + /// + protected void ShutDownDelay() + { + try + { + // check for connected clients. + IList currentessions = this.ServerInternal.SessionManager.GetSessions(); + + if (currentessions.Count > 0) + { + // provide some time for the connected clients to detect the shutdown state. + ServerInternal.Status.Value.ShutdownReason = new LocalizedText("en-US", "Application closed."); + ServerInternal.Status.Variable.ShutdownReason.Value = new LocalizedText("en-US", "Application closed."); + ServerInternal.Status.Value.State = ServerState.Shutdown; + ServerInternal.Status.Variable.State.Value = ServerState.Shutdown; + ServerInternal.Status.Variable.ClearChangeMasks(ServerInternal.DefaultSystemContext, true); + + for (int timeTillShutdown = Configuration.ServerConfiguration.ShutdownDelay; timeTillShutdown > 0; timeTillShutdown--) + { + ServerInternal.Status.Value.SecondsTillShutdown = (uint)timeTillShutdown; + ServerInternal.Status.Variable.SecondsTillShutdown.Value = (uint)timeTillShutdown; + ServerInternal.Status.Variable.ClearChangeMasks(ServerInternal.DefaultSystemContext, true); + + // exit if all client connections are closed. + if (ServerInternal.SessionManager.GetSessions().Count == 0) + { + break; + } + + Thread.Sleep(1000); + } + } + } + catch + { + // ignore error during shutdown procedure. + } + } + + /// + /// Creates the request manager for the server. + /// + /// The server. + /// The configuration. + /// + /// Returns an object that manages requests from within the server, return type is . + /// + protected virtual RequestManager CreateRequestManager(IServerInternal server, ApplicationConfiguration configuration) + { + return new RequestManager(server); + } + + /// + /// Creates the aggregate manager used by the server. + /// + /// The server. + /// The application configuration. + /// The manager. + protected virtual AggregateManager CreateAggregateManager(IServerInternal server, ApplicationConfiguration configuration) + { + AggregateManager manager = new AggregateManager(server); + + manager.RegisterFactory(ObjectIds.AggregateFunction_Interpolative, BrowseNames.AggregateFunction_Interpolative, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Average, BrowseNames.AggregateFunction_Average, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_TimeAverage, BrowseNames.AggregateFunction_TimeAverage, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_TimeAverage2, BrowseNames.AggregateFunction_TimeAverage2, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Total, BrowseNames.AggregateFunction_Total, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Total2, BrowseNames.AggregateFunction_Total2, Aggregators.CreateStandardCalculator); + + manager.RegisterFactory(ObjectIds.AggregateFunction_Minimum, BrowseNames.AggregateFunction_Minimum, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Maximum, BrowseNames.AggregateFunction_Maximum, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_MinimumActualTime, BrowseNames.AggregateFunction_MinimumActualTime, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_MaximumActualTime, BrowseNames.AggregateFunction_MaximumActualTime, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Range, BrowseNames.AggregateFunction_Range, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Minimum2, BrowseNames.AggregateFunction_Minimum2, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Maximum2, BrowseNames.AggregateFunction_Maximum2, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_MinimumActualTime2, BrowseNames.AggregateFunction_MinimumActualTime2, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_MaximumActualTime2, BrowseNames.AggregateFunction_MaximumActualTime2, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Range2, BrowseNames.AggregateFunction_Range2, Aggregators.CreateStandardCalculator); + + manager.RegisterFactory(ObjectIds.AggregateFunction_Count, BrowseNames.AggregateFunction_Count, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_AnnotationCount, BrowseNames.AggregateFunction_AnnotationCount, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_DurationInStateZero, BrowseNames.AggregateFunction_DurationInStateZero, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_DurationInStateNonZero, BrowseNames.AggregateFunction_DurationInStateNonZero, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_NumberOfTransitions, BrowseNames.AggregateFunction_NumberOfTransitions, Aggregators.CreateStandardCalculator); + + manager.RegisterFactory(ObjectIds.AggregateFunction_Start, BrowseNames.AggregateFunction_Start, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_End, BrowseNames.AggregateFunction_End, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_Delta, BrowseNames.AggregateFunction_Delta, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_StartBound, BrowseNames.AggregateFunction_StartBound, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_EndBound, BrowseNames.AggregateFunction_EndBound, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_DeltaBounds, BrowseNames.AggregateFunction_DeltaBounds, Aggregators.CreateStandardCalculator); + + manager.RegisterFactory(ObjectIds.AggregateFunction_DurationGood, BrowseNames.AggregateFunction_DurationGood, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_DurationBad, BrowseNames.AggregateFunction_DurationBad, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_PercentGood, BrowseNames.AggregateFunction_PercentGood, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_PercentBad, BrowseNames.AggregateFunction_PercentBad, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_WorstQuality, BrowseNames.AggregateFunction_WorstQuality, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_WorstQuality2, BrowseNames.AggregateFunction_WorstQuality2, Aggregators.CreateStandardCalculator); + + manager.RegisterFactory(ObjectIds.AggregateFunction_StandardDeviationPopulation, BrowseNames.AggregateFunction_StandardDeviationPopulation, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_VariancePopulation, BrowseNames.AggregateFunction_VariancePopulation, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_StandardDeviationSample, BrowseNames.AggregateFunction_StandardDeviationSample, Aggregators.CreateStandardCalculator); + manager.RegisterFactory(ObjectIds.AggregateFunction_VarianceSample, BrowseNames.AggregateFunction_VarianceSample, Aggregators.CreateStandardCalculator); + + return manager; + } + + /// + /// Creates the resource manager for the server. + /// + /// The server. + /// The configuration. + /// Returns an object that manages access to localized resources, the return type is . + protected virtual ResourceManager CreateResourceManager(IServerInternal server, ApplicationConfiguration configuration) + { + ResourceManager resourceManager = new ResourceManager(server, configuration); + + // load default text for all status codes. + resourceManager.LoadDefaultText(); + + return resourceManager; + } + + /// + /// Creates the master node manager for the server. + /// + /// The server. + /// The configuration. + /// Returns the master node manager for the server, the return type is . + protected virtual MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) + { + return new MasterNodeManager(server, configuration, null); + } + + /// + /// Creates the event manager for the server. + /// + /// The server. + /// The configuration. + /// Returns an object that manages all events raised within the server, the return type is . + protected virtual EventManager CreateEventManager(IServerInternal server, ApplicationConfiguration configuration) + { + return new EventManager(server, (uint)configuration.ServerConfiguration.MaxEventQueueSize); + } + + /// + /// Creates the session manager for the server. + /// + /// The server. + /// The configuration. + /// Returns a generic session manager object for a server, the return type is . + protected virtual SessionManager CreateSessionManager(IServerInternal server, ApplicationConfiguration configuration) + { + return new SessionManager(server, configuration); + } + + /// + /// Creates the session manager for the server. + /// + /// The server. + /// The configuration. + /// Returns a generic session manager object for a server, the return type is . + protected virtual SubscriptionManager CreateSubscriptionManager(IServerInternal server, ApplicationConfiguration configuration) + { + return new SubscriptionManager(server, configuration); + } + + /// + /// Called after the node managers have been started. + /// + /// The server. + protected virtual void OnNodeManagerStarted(IServerInternal server) + { + // may be overridden by the subclass. + } + + /// + /// Called after the server has been started. + /// + /// The server. + protected virtual void OnServerStarted(IServerInternal server) + { + // may be overridden by the subclass. + } + #endregion + + #region Private Fields + private readonly object m_lock = new object(); + private readonly object m_registrationLock = new object(); + private ServerInternalData m_serverInternal; + private ConfigurationWatcher m_configurationWatcher; + private ConfiguredEndpointCollection m_registrationEndpoints; + private RegisteredServer m_registrationInfo; + private Timer m_registrationTimer; + private int m_minRegistrationInterval; + private int m_maxRegistrationInterval; + private int m_lastRegistrationInterval; + private int m_minNonceLength; + private bool m_useRegisterServer2; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/ServerUtils.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/ServerUtils.cs new file mode 100644 index 00000000..1afdad88 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/ServerUtils.cs @@ -0,0 +1,466 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + + +namespace Opc.Ua.Server +{ + /// + /// The interface that a server exposes to objects that it contains. + /// + public static class ServerUtils + { + private enum EventType + { + WriteValue, + CreateItem, + ModifyItem, + QueueValue, + FilterValue, + DiscardValue, + PublishValue + } + + private class Event + { + public DateTime Timestamp; + public EventType EventType; + public NodeId NodeId; + public uint ServerHandle; + public DataValue Value; + public MonitoringParameters Parameters; + public MonitoringMode MonitoringMode; + } + + private static Queue m_events = new Queue(); + private static bool m_eventsEnabled; + + /// + /// Whether event queuing is enabled. + /// + public static bool EventsEnabled + { + get { return m_eventsEnabled; } + + set + { + if (m_eventsEnabled != value) + { + if (!value) + { + lock (m_events) + { + m_events.Clear(); + } + } + } + + m_eventsEnabled = value; + } + } + + /// + /// Reports a value written. + /// + public static void ReportWriteValue(NodeId nodeId, DataValue value, StatusCode error) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.WriteValue; + e.NodeId = nodeId; + e.ServerHandle = 0; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + + if (StatusCode.IsBad(error)) + { + e.Value = new DataValue(error); + e.Value.WrappedValue = value.WrappedValue; + } + + m_events.Enqueue(e); + } + } + + /// + /// Reports a value queued. + /// + public static void ReportQueuedValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.QueueValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a value excluded by the filter. + /// + public static void ReportFilteredValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.FilterValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a value discarded because of queue overflow. + /// + public static void ReportDiscardedValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.DiscardValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a value published. + /// + public static void ReportPublishValue(NodeId nodeId, uint serverHandle, DataValue value) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.PublishValue; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = value; + e.Parameters = null; + e.MonitoringMode = MonitoringMode.Disabled; + m_events.Enqueue(e); + } + } + + /// + /// Reports a new monitored item. + /// + public static void ReportCreateMonitoredItem( + NodeId nodeId, + uint serverHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + MonitoringFilter filter, + MonitoringMode monitoringMode) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.CreateItem; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = null; + e.Parameters = new MonitoringParameters(); + e.Parameters.SamplingInterval = samplingInterval; + e.Parameters.QueueSize = queueSize; + e.Parameters.DiscardOldest = discardOldest; + e.Parameters.Filter = new ExtensionObject(filter); + e.MonitoringMode = monitoringMode; + m_events.Enqueue(e); + } + } + + /// + /// Reports a modified monitored item. + /// + public static void ReportModifyMonitoredItem( + NodeId nodeId, + uint serverHandle, + double samplingInterval, + uint queueSize, + bool discardOldest, + MonitoringFilter filter, + MonitoringMode monitoringMode) + { + if (!m_eventsEnabled) + { + return; + } + + lock (m_events) + { + Event e = new Event(); + e.EventType = EventType.ModifyItem; + e.NodeId = nodeId; + e.ServerHandle = serverHandle; + e.Timestamp = HiResClock.UtcNow; + e.Value = null; + e.Parameters = new MonitoringParameters(); + e.Parameters.SamplingInterval = samplingInterval; + e.Parameters.QueueSize = queueSize; + e.Parameters.DiscardOldest = discardOldest; + e.Parameters.Filter = new ExtensionObject(filter); + e.MonitoringMode = monitoringMode; + m_events.Enqueue(e); + } + } + + #region Error and Diagnostics + /// + /// Fills in the diagnostic information after an error. + /// + public static uint CreateError( + uint code, + OperationContext context, + DiagnosticInfoCollection diagnosticInfos, + int index) + { + ServiceResult error = new ServiceResult(code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[index] = new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable); + } + + return error.Code; + } + + /// + /// Fills in the diagnostic information after an error. + /// + public static bool CreateError( + uint code, + StatusCodeCollection results, + DiagnosticInfoCollection diagnosticInfos, + OperationContext context) + { + ServiceResult error = new ServiceResult(code); + results.Add(error.Code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable)); + return true; + } + + return false; + } + + /// + /// Fills in the diagnostic information after an error. + /// + public static bool CreateError( + uint code, + StatusCodeCollection results, + DiagnosticInfoCollection diagnosticInfos, + int index, + OperationContext context) + { + ServiceResult error = new ServiceResult(code); + results[index] = error.Code; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos[index] = new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable); + return true; + } + + return false; + } + + /// + /// Creates a place holder in the lists for the results. + /// + public static void CreateSuccess( + StatusCodeCollection results, + DiagnosticInfoCollection diagnosticInfos, + OperationContext context) + { + results.Add(StatusCodes.Good); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + + /// + /// Creates a collection of diagnostics from a set of errors. + /// + public static DiagnosticInfoCollection CreateDiagnosticInfoCollection( + OperationContext context, + IList errors) + { + // all done if no diagnostics requested. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) == 0) + { + return null; + } + + // create diagnostics. + DiagnosticInfoCollection results = new DiagnosticInfoCollection(errors.Count); + + foreach (ServiceResult error in errors) + { + if (ServiceResult.IsBad(error)) + { + results.Add(new DiagnosticInfo(error, context.DiagnosticsMask, false, context.StringTable)); + } + else + { + results.Add(null); + } + } + + return results; + } + + /// + /// Creates a collection of status codes and diagnostics from a set of errors. + /// + public static StatusCodeCollection CreateStatusCodeCollection( + OperationContext context, + IList errors, + out DiagnosticInfoCollection diagnosticInfos) + { + diagnosticInfos = null; + + bool noErrors = true; + StatusCodeCollection results = new StatusCodeCollection(errors.Count); + + foreach (ServiceResult error in errors) + { + if (ServiceResult.IsBad(error)) + { + results.Add(error.Code); + noErrors = false; + } + else + { + results.Add(StatusCodes.Good); + } + } + + // only generate diagnostics if errors exist. + if (noErrors) + { + diagnosticInfos = CreateDiagnosticInfoCollection(context, errors); + } + + return results; + } + + /// + /// Creates the diagnostic info and translates any strings. + /// + /// The server. + /// The context containing the string stable. + /// The error to translate. + /// The diagnostics with references to the strings in the context string table. + public static DiagnosticInfo CreateDiagnosticInfo( + IServerInternal server, + OperationContext context, + ServiceResult error) + { + if (error == null) + { + return null; + } + + ServiceResult translatedError = error; + + if ((context.DiagnosticsMask & DiagnosticsMasks.LocalizedText) != 0) + { + translatedError = server.ResourceManager.Translate(context.PreferredLocales, error); + } + + DiagnosticInfo diagnosticInfo = new DiagnosticInfo( + translatedError, + context.DiagnosticsMask, + false, + context.StringTable); + + return diagnosticInfo; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/RequestType.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/RequestType.cs new file mode 100644 index 00000000..612ff161 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/RequestType.cs @@ -0,0 +1,150 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using System.Security.Principal; + +namespace Opc.Ua.Server +{ + /// + /// The set of all service request types (used for collecting diagnostics and checking permissions). + /// + public enum RequestType + { + /// + /// The request type is not known. + /// + Unknown, + + /// + FindServers, + + /// + GetEndpoints, + + /// + CreateSession, + + /// + ActivateSession, + + /// + CloseSession, + + /// + Cancel, + + /// + Read, + + /// + HistoryRead, + + /// + Write, + + /// + HistoryUpdate, + + /// + Call, + + /// + CreateMonitoredItems, + + /// + ModifyMonitoredItems, + + /// + SetMonitoringMode, + + /// + SetTriggering, + + /// + DeleteMonitoredItems, + + /// + CreateSubscription, + + /// + ModifySubscription, + + /// + SetPublishingMode, + + /// + Publish, + + /// + Republish, + + /// + TransferSubscriptions, + + /// + DeleteSubscriptions, + + /// + AddNodes, + + /// + AddReferences, + + /// + DeleteNodes, + + /// + DeleteReferences, + + /// + Browse, + + /// + BrowseNext, + + /// + TranslateBrowsePathsToNodeIds, + + /// + QueryFirst, + + /// + QueryNext, + + /// + RegisterNodes, + + /// + UnregisterNodes + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/Session.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/Session.cs new file mode 100644 index 00000000..c2bc452a --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/Session.cs @@ -0,0 +1,1252 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Security.Cryptography.X509Certificates; +using System.Reflection; + +namespace Opc.Ua.Server +{ + /// + /// A generic session manager object for a server. + /// + public class Session : IDisposable + { + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// The context. + /// The Server object. + /// The server certificate. + /// The unique private identifier assigned to the Session. + /// The client nonce. + /// The server nonce. + /// The name assigned to the Session. + /// Application description for the client application. + /// The endpoint URL. + /// The client certificate. + /// The session timeout. + /// The maximum size of a response message + /// The max request age. + /// The maximum number of browse continuation points. + /// The maximum number of history continuation points. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] + public Session( + OperationContext context, + IServerInternal server, + X509Certificate2 serverCertificate, + NodeId authenticationToken, + byte[] clientNonce, + byte[] serverNonce, + string sessionName, + ApplicationDescription clientDescription, + string endpointUrl, + X509Certificate2 clientCertificate, + double sessionTimeout, + uint maxResponseMessageSize, + double maxRequestAge, + int maxBrowseContinuationPoints, + int maxHistoryContinuationPoints) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (server == null) throw new ArgumentNullException(nameof(server)); + + // verify that a secure channel was specified. + if (context.ChannelContext == null) + { + throw new ServiceResultException(StatusCodes.BadSecureChannelIdInvalid); + } + + m_server = server; + m_authenticationToken = authenticationToken; + m_clientNonce = clientNonce; + m_serverNonce = serverNonce; + m_sessionName = sessionName; + m_serverCertificate = serverCertificate; + m_clientCertificate = clientCertificate; + m_secureChannelId = context.ChannelContext.SecureChannelId; + m_maxResponseMessageSize = maxResponseMessageSize; + m_maxRequestAge = maxRequestAge; + m_maxBrowseContinuationPoints = maxBrowseContinuationPoints; + m_maxHistoryContinuationPoints = maxHistoryContinuationPoints; + m_endpoint = context.ChannelContext.EndpointDescription; + + // use anonymous the default identity. + m_identity = new UserIdentity(); + + // initialize diagnostics. + m_diagnostics = new SessionDiagnosticsDataType(); + + m_diagnostics.SessionId = null; + m_diagnostics.SessionName = sessionName; + m_diagnostics.ClientDescription = clientDescription; + m_diagnostics.ServerUri = null; + m_diagnostics.EndpointUrl = endpointUrl; + m_diagnostics.LocaleIds = new StringCollection(); + m_diagnostics.ActualSessionTimeout = sessionTimeout; + m_diagnostics.ClientConnectionTime = DateTime.UtcNow; + m_diagnostics.ClientLastContactTime = DateTime.UtcNow; + m_diagnostics.CurrentSubscriptionsCount = 0; + m_diagnostics.CurrentMonitoredItemsCount = 0; + m_diagnostics.CurrentPublishRequestsInQueue = 0; + m_diagnostics.TotalRequestCount = new ServiceCounterDataType(); + m_diagnostics.UnauthorizedRequestCount = 0; + m_diagnostics.ReadCount = new ServiceCounterDataType(); + m_diagnostics.HistoryReadCount = new ServiceCounterDataType(); + m_diagnostics.WriteCount = new ServiceCounterDataType(); + m_diagnostics.HistoryUpdateCount = new ServiceCounterDataType(); + m_diagnostics.CallCount = new ServiceCounterDataType(); + m_diagnostics.CreateMonitoredItemsCount = new ServiceCounterDataType(); + m_diagnostics.ModifyMonitoredItemsCount = new ServiceCounterDataType(); + m_diagnostics.SetMonitoringModeCount = new ServiceCounterDataType(); + m_diagnostics.SetTriggeringCount = new ServiceCounterDataType(); + m_diagnostics.DeleteMonitoredItemsCount = new ServiceCounterDataType(); + m_diagnostics.CreateSubscriptionCount= new ServiceCounterDataType(); + m_diagnostics.ModifySubscriptionCount = new ServiceCounterDataType(); + m_diagnostics.SetPublishingModeCount = new ServiceCounterDataType(); + m_diagnostics.PublishCount = new ServiceCounterDataType(); + m_diagnostics.RepublishCount = new ServiceCounterDataType(); + m_diagnostics.TransferSubscriptionsCount = new ServiceCounterDataType(); + m_diagnostics.DeleteSubscriptionsCount = new ServiceCounterDataType(); + m_diagnostics.AddNodesCount = new ServiceCounterDataType(); + m_diagnostics.AddReferencesCount = new ServiceCounterDataType(); + m_diagnostics.DeleteNodesCount = new ServiceCounterDataType(); + m_diagnostics.DeleteReferencesCount = new ServiceCounterDataType(); + m_diagnostics.BrowseCount = new ServiceCounterDataType(); + m_diagnostics.BrowseNextCount = new ServiceCounterDataType(); + m_diagnostics.TranslateBrowsePathsToNodeIdsCount = new ServiceCounterDataType(); + m_diagnostics.QueryFirstCount = new ServiceCounterDataType(); + m_diagnostics.QueryNextCount = new ServiceCounterDataType(); + m_diagnostics.RegisterNodesCount = new ServiceCounterDataType(); + m_diagnostics.UnregisterNodesCount = new ServiceCounterDataType(); + + // initialize security diagnostics. + m_securityDiagnostics = new SessionSecurityDiagnosticsDataType(); + + m_securityDiagnostics.SessionId = m_sessionId; + m_securityDiagnostics.ClientUserIdOfSession = m_identity.DisplayName; + m_securityDiagnostics.AuthenticationMechanism = m_identity.TokenType.ToString(); + m_securityDiagnostics.Encoding = context.ChannelContext.MessageEncoding.ToString(); + + m_securityDiagnostics.ClientUserIdHistory = new StringCollection(); + m_securityDiagnostics.ClientUserIdHistory.Add(m_identity.DisplayName); + + EndpointDescription description = context.ChannelContext.EndpointDescription; + + if (description != null) + { + m_securityDiagnostics.TransportProtocol = new Uri(description.EndpointUrl).Scheme; + m_securityDiagnostics.SecurityMode = m_endpoint.SecurityMode; + m_securityDiagnostics.SecurityPolicyUri = m_endpoint.SecurityPolicyUri; + } + + if (clientCertificate != null) + { + m_securityDiagnostics.ClientCertificate = clientCertificate.RawData; + } + + ServerSystemContext systemContext = m_server.DefaultSystemContext.Copy(context); + + // create diagnostics object. + m_sessionId = server.DiagnosticsNodeManager.CreateSessionDiagnostics( + systemContext, + m_diagnostics, + OnUpdateDiagnostics, + m_securityDiagnostics, + OnUpdateSecurityDiagnostics); + + // report the audit event. + ReportAuditCreateSessionEvent(systemContext); + + TraceState("CREATED"); + } + #endregion + + /// + /// Initializes a session audit event. + /// + private void InitializeSessionAuditEvent(ServerSystemContext systemContext, AuditEventState e, TranslationInfo message) + { + e.Initialize( + systemContext, + null, + EventSeverity.MediumLow, + new LocalizedText(message), + true, + DateTime.UtcNow); + + e.SetChildValue(systemContext, BrowseNames.SourceNode, ObjectIds.Server, false); + e.SetChildValue(systemContext, BrowseNames.SessionId, m_sessionId, false); + e.SetChildValue(systemContext, BrowseNames.ServerId, m_server.ServerUris.GetString(0), false); + e.SetChildValue(systemContext, BrowseNames.ClientUserId, m_identity.DisplayName, false); + e.SetChildValue(systemContext, BrowseNames.ClientAuditEntryId, systemContext.OperationContext.AuditEntryId, false); + } + + /// + /// Reports an audit create session event. + /// + private void ReportAuditCreateSessionEvent(ServerSystemContext context) + { + try + { + // raise an audit event. + AuditCreateSessionEventState e = new AuditCreateSessionEventState(null); + + TranslationInfo message = new TranslationInfo( + "AuditCreateSessionEvent", + "en-US", + "Session {0} created.", + m_sessionName); + + InitializeSessionAuditEvent(context, e, message); + + e.SetChildValue(context, BrowseNames.SourceName, "Session/CreateSession", false); + e.SetChildValue(context, BrowseNames.ClientCertificate, m_securityDiagnostics.ClientCertificate, false); + e.SetChildValue(context, BrowseNames.SecureChannelId, m_secureChannelId, false); + + m_server.ReportEvent(context, e); + } + catch (Exception e) + { + Utils.Trace(e, "Error while reporting AuditCreateSessionEvent event for SessionId {0}.", m_sessionId); + } + } + + /// + /// Reports an audit activate session event. + /// + private void ReportAuditActivateSessionEvent(ServerSystemContext context) + { + try + { + AuditActivateSessionEventState e = new AuditActivateSessionEventState(null); + + TranslationInfo message = new TranslationInfo( + "AuditActivateSessionEvent", + "en-US", + "Session {0} activated.", + m_sessionName); + + InitializeSessionAuditEvent(context, e, message); + + e.SetChildValue(context, BrowseNames.SourceName, "Session/ActivateSession", false); + + if (m_softwareCertificates != null && m_softwareCertificates.Count > 0) + { + e.SetChildValue(context, BrowseNames.ClientSoftwareCertificates, m_softwareCertificates.ToArray(), false); + } + + if (m_identityToken != null) + { + e.SetChildValue(context, BrowseNames.UserIdentityToken, Utils.Clone(m_identityToken), false); + } + + m_server.ReportEvent(context, e); + } + catch (Exception e) + { + Utils.Trace(e, "Error while reporting AuditActivateSessionEvent event for SessionId {0}.", m_sessionId); + } + } + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List browseCPs = null; + + lock (m_lock) + { + browseCPs = m_browseContinuationPoints; + m_browseContinuationPoints = null; + } + + if (browseCPs != null) + { + for (int ii = 0; ii < browseCPs.Count; ii++) + { + Utils.SilentDispose(browseCPs[ii]); + } + } + + List historyCPs = null; + + lock (m_lock) + { + historyCPs = m_historyContinuationPoints; + m_historyContinuationPoints = null; + } + + if (historyCPs != null) + { + for (int ii = 0; ii < historyCPs.Count; ii++) + { + Utils.SilentDispose(historyCPs[ii].Value); + } + } + } + } + #endregion + + #region Public Interface + /// + /// Gets the identifier assigned to the session when it was created. + /// + public NodeId Id + { + get { return m_sessionId; } + } + + /// + /// The user identity provided by the client. + /// + public IUserIdentity Identity + { + get { return m_identity; } + } + + /// + /// The application defined mapping for user identity provided by the client. + /// + public IUserIdentity EffectiveIdentity + { + get { return m_effectiveIdentity; } + } + + /// + /// The user identity token provided by the client. + /// + public UserIdentityToken IdentityToken + { + get { return m_identityToken; } + } + + /// + /// A lock which must be acquired before accessing the diagnostics. + /// + public object DiagnosticsLock + { + get { return m_diagnostics; } + } + + /// + /// The diagnostics associated with the session. + /// + public SessionDiagnosticsDataType SessionDiagnostics + { + get { return m_diagnostics; } + } + + /// + /// Gets or sets the server certificate chain. + /// + /// + /// The server certificate chain. + /// + public byte[] ServerCertificateChain + { + get { return m_serverCertificateChain; } + set { m_serverCertificateChain = value; } + } + + /// + /// The client Nonce associated with the session. + /// + public byte [] ClientNonce + { + get { return m_clientNonce; } + } + + /// + /// The application instance certificate associated with the client. + /// + public X509Certificate2 ClientCertificate + { + get { return m_clientCertificate; } + } + + /// + /// The locales requested when the session was created. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public string[] PreferredLocales + { + get { return m_localeIds; } + } + + /// + /// Whether the session timeout has elapsed since the last communication from the client. + /// + public bool HasExpired + { + get + { + lock (DiagnosticsLock) + { + if (m_diagnostics.ClientLastContactTime.AddMilliseconds(m_diagnostics.ActualSessionTimeout) < DateTime.UtcNow) + { + return true; + } + + return false; + } + } + } + + /// + /// Whether the session has been activated. + /// + public bool Activated + { + get + { + return m_activated; + } + } + + /// + /// Validates the request. + /// + public virtual void ValidateRequest(RequestHeader requestHeader, RequestType requestType) + { + if (requestHeader == null) throw new ArgumentNullException(nameof(requestHeader)); + + lock (m_lock) + { + // get the request context for the current thread. + SecureChannelContext context = SecureChannelContext.Current; + + if (context == null || !IsSecureChannelValid(context.SecureChannelId)) + { + UpdateDiagnosticCounters(requestType, true, true); + throw new ServiceResultException(StatusCodes.BadSecureChannelIdInvalid); + } + + // verify that session has been activated. + if (!m_activated) + { + if (requestType != RequestType.CloseSession) + { + UpdateDiagnosticCounters(requestType, true, true); + throw new ServiceResultException(StatusCodes.BadSessionNotActivated); + } + } + + // verify timestamp. + if (requestHeader.Timestamp.AddMilliseconds(m_maxRequestAge) < DateTime.UtcNow) + { + UpdateDiagnosticCounters(requestType, true, false); + throw new ServiceResultException(StatusCodes.BadInvalidTimestamp); + } + + // request accepted. + UpdateDiagnosticCounters(requestType, false, false); + } + } + + /// + /// Checks if the secure channel is currently valid. + /// + public virtual bool IsSecureChannelValid(string secureChannelId) + { + lock (m_lock) + { + return (m_secureChannelId == secureChannelId); + } + } + + /// + /// Updates the requested locale ids. + /// + /// true if the new locale ids are different from the old locale ids. + public bool UpdateLocaleIds(StringCollection localeIds) + { + if (localeIds == null) throw new ArgumentNullException(nameof(localeIds)); + + lock (m_lock) + { + string[] ids = localeIds.ToArray(); + + if (!Utils.IsEqual(ids, m_localeIds)) + { + m_localeIds = ids; + + // update diagnostics. + lock (DiagnosticsLock) + { + m_diagnostics.LocaleIds = new StringCollection(localeIds); + } + + return true; + } + + return false; + } + } + + /// + /// Activates the session and binds it to the current secure channel. + /// + public void ValidateBeforeActivate( + OperationContext context, + SignatureData clientSignature, + List clientSoftwareCertificates, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + StringCollection localeIds, + byte[] serverNonce, + out UserIdentityToken identityToken, + out UserTokenPolicy userTokenPolicy) + { + lock (m_lock) + { + // verify that a secure channel was specified. + if (context.ChannelContext == null) + { + throw new ServiceResultException(StatusCodes.BadSecureChannelIdInvalid); + } + + // verify that the same security policy has been used. + EndpointDescription endpoint = context.ChannelContext.EndpointDescription; + + if (endpoint.SecurityPolicyUri != m_endpoint.SecurityPolicyUri || endpoint.SecurityMode != m_endpoint.SecurityMode) + { + throw new ServiceResultException(StatusCodes.BadSecurityPolicyRejected); + } + + // verify the client signature. + if (m_clientCertificate != null) + { + if (m_endpoint.SecurityPolicyUri != SecurityPolicies.None && clientSignature != null && clientSignature.Signature == null) + { + throw new ServiceResultException(StatusCodes.BadApplicationSignatureInvalid); + } + + byte[] dataToSign = Utils.Append(m_serverCertificate.RawData, m_serverNonce); + + if (!SecurityPolicies.Verify(m_clientCertificate, m_endpoint.SecurityPolicyUri, dataToSign, clientSignature)) + { + // verify for certificate chain in endpoint. + // validate the signature with complete chain if the check with leaf certificate failed. + X509Certificate2Collection serverCertificateChain = Utils.ParseCertificateChainBlob(m_endpoint.ServerCertificate); + + if (serverCertificateChain.Count > 1) + { + List serverCertificateChainList = new List(); + + for (int i = 0; i < serverCertificateChain.Count; i++) + { + serverCertificateChainList.AddRange(serverCertificateChain[i].RawData); + } + + byte[] serverCertificateChainData = serverCertificateChainList.ToArray(); + dataToSign = Utils.Append(serverCertificateChainData, m_serverNonce); + + if (!SecurityPolicies.Verify(m_clientCertificate, m_endpoint.SecurityPolicyUri, dataToSign, clientSignature)) + { + throw new ServiceResultException(StatusCodes.BadApplicationSignatureInvalid); + } + } + else + { + throw new ServiceResultException(StatusCodes.BadApplicationSignatureInvalid); + } + } + } + + if (!m_activated) + { + // must active the session on the channel that was used to create it. + if (m_secureChannelId != context.ChannelContext.SecureChannelId) + { + throw new ServiceResultException(StatusCodes.BadSecureChannelIdInvalid); + } + } + else + { + // cannot change the certificates after activation. + if (clientSoftwareCertificates != null && clientSoftwareCertificates.Count > 0) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument); + } + } + + // validate the user identity token. + identityToken = ValidateUserIdentityToken(userIdentityToken, userTokenSignature, out userTokenPolicy); + + TraceState("VALIDATED"); + } + } + + /// + /// Activates the session and binds it to the current secure channel. + /// + public bool Activate( + OperationContext context, + List clientSoftwareCertificates, + UserIdentityToken identityToken, + IUserIdentity identity, + IUserIdentity effectiveIdentity, + StringCollection localeIds, + byte[] serverNonce) + { + lock (m_lock) + { + // update user identity. + bool changed = false; + + if (identityToken != null) + { + if (UpdateUserIdentity(identityToken, identity, effectiveIdentity)) + { + changed = true; + } + } + + // update local ids. + if (UpdateLocaleIds( localeIds )) + { + changed = true; + } + + if (!m_activated) + { + // toggle the activated flag. + m_activated = true; + + // save the software certificates. + m_softwareCertificates = clientSoftwareCertificates; + + TraceState("FIRST ACTIVATION"); + } + else + { + // bind to the new secure channel. + m_secureChannelId = context.ChannelContext.SecureChannelId; + + TraceState("RE-ACTIVATION"); + } + + // update server nonce. + m_serverNonce = serverNonce; + + // build list of signed certificates for audit event. + List signedSoftwareCertificates = new List(); + + if (clientSoftwareCertificates != null) + { + foreach (SoftwareCertificate softwareCertificate in clientSoftwareCertificates) + { + SignedSoftwareCertificate item = new SignedSoftwareCertificate(); + item.CertificateData = softwareCertificate.SignedCertificate.RawData; + signedSoftwareCertificates.Add(item); + } + } + + // raise an audit event. + ServerSystemContext systemContext = m_server.DefaultSystemContext.Copy(context); + ReportAuditActivateSessionEvent(systemContext); + + // update the contact time. + lock (DiagnosticsLock) + { + m_diagnostics.ClientLastContactTime = DateTime.UtcNow; + } + + // indicate whether the user context has changed. + return changed; + } + } + + /// + /// Closes a session and removes itself from the address space. + /// + public void Close() + { + TraceState("CLOSED"); + + m_server.DiagnosticsNodeManager.DeleteSessionDiagnostics( + m_server.DefaultSystemContext, + m_sessionId); + } + + /// + /// Saves a continuation point for a session. + /// + /// + /// If the session has too many continuation points the oldest one is dropped. + /// + public void SaveContinuationPoint(ContinuationPoint continuationPoint) + { + if (continuationPoint == null) throw new ArgumentNullException(nameof(continuationPoint)); + + lock (m_lock) + { + if (m_browseContinuationPoints == null) + { + m_browseContinuationPoints = new List(); + } + + // remove the first continuation point if too many points. + while (m_browseContinuationPoints.Count > m_maxBrowseContinuationPoints) + { + ContinuationPoint cp = m_browseContinuationPoints[0]; + m_browseContinuationPoints.RemoveAt(0); + Utils.SilentDispose(cp); + } + + // add to end of list. + m_browseContinuationPoints.Add(continuationPoint); + } + } + + /// + /// Restores a continuation point for a session. + /// + /// + /// The caller is responsible for disposing the continuation point returned. + /// + public ContinuationPoint RestoreContinuationPoint(byte[] continuationPoint) + { + lock (m_lock) + { + if (m_browseContinuationPoints == null) + { + return null; + } + + if (continuationPoint == null || continuationPoint.Length != 16) + { + return null; + } + + Guid id = new Guid(continuationPoint); + + for (int ii = 0; ii < m_browseContinuationPoints.Count; ii++) + { + if (m_browseContinuationPoints[ii].Id == id) + { + ContinuationPoint cp = m_browseContinuationPoints[ii]; + m_browseContinuationPoints.RemoveAt(ii); + return cp; + } + } + + return null; + } + } + + /// + /// Saves a continuation point used for historical reads. + /// + /// The identifier for the continuation point. + /// The continuation point. + /// + /// If the continuationPoint implements IDisposable it will be disposed when + /// the Session is closed or discarded. + /// + public void SaveHistoryContinuationPoint(Guid id, object continuationPoint) + { + if (continuationPoint == null) throw new ArgumentNullException(nameof(continuationPoint)); + + lock (m_lock) + { + if (m_historyContinuationPoints == null) + { + m_historyContinuationPoints = new List(); + } + + // remove existing continuation point if space needed. + while (m_historyContinuationPoints.Count >= m_maxHistoryContinuationPoints) + { + HistoryContinuationPoint oldCP = m_historyContinuationPoints[0]; + m_historyContinuationPoints.RemoveAt(0); + Utils.SilentDispose(oldCP.Value); + } + + // create the cp. + HistoryContinuationPoint cp = new HistoryContinuationPoint(); + + cp.Id = id; + cp.Value = continuationPoint; + cp.Timestamp = DateTime.UtcNow; + + m_historyContinuationPoints.Add(cp); + } + } + + /// + /// Restores a previously saves history continuation point. + /// + /// The identifier for the continuation point. + /// The save continuation point. null if not found. + public object RestoreHistoryContinuationPoint(byte[] continuationPoint) + { + lock (m_lock) + { + if (m_historyContinuationPoints == null) + { + return null; + } + + if (continuationPoint == null || continuationPoint.Length != 16) + { + return null; + } + + Guid id = new Guid(continuationPoint); + + for (int ii = 0; ii < m_historyContinuationPoints.Count; ii++) + { + HistoryContinuationPoint cp = m_historyContinuationPoints[ii]; + + if (cp.Id == id) + { + m_historyContinuationPoints.RemoveAt(ii); + return cp.Value; + } + } + + return null; + } + } + + /// + /// Stores a continuation point used for historial reads. + /// + private class HistoryContinuationPoint + { + public Guid Id; + public object Value; + public DateTime Timestamp; + } + #endregion + + #region Private Methods + /// + /// Dumps the current state of the session queue. + /// + internal void TraceState(string context) + { + if ((Utils.TraceMask & Utils.TraceMasks.Information) == 0) + { + return; + } + + StringBuilder buffer = new StringBuilder(); + + lock (m_lock) + { + buffer.AppendFormat("Session {0}", context); + buffer.AppendFormat(", Id={0}", m_sessionId); + buffer.AppendFormat(", Name={0}", m_sessionName); + buffer.AppendFormat(", ChannelId={0}", m_secureChannelId); + + if (m_identity != null) + { + buffer.AppendFormat(", User={0}", m_identity.DisplayName); + } + } + + Utils.Trace("{0}", buffer.ToString()); + } + + /// + /// Returns a copy of the current diagnostics. + /// + private ServiceResult OnUpdateDiagnostics( + ISystemContext context, + NodeState node, + ref object value) + { + lock (DiagnosticsLock) + { + value = Utils.Clone(m_diagnostics); + } + + return ServiceResult.Good; + } + + /// + /// Returns a copy of the current security diagnostics. + /// + private ServiceResult OnUpdateSecurityDiagnostics( + ISystemContext context, + NodeState node, + ref object value) + { + lock (DiagnosticsLock) + { + value = Utils.Clone(m_securityDiagnostics); + } + + return ServiceResult.Good; + } + + /// + /// Validates the identity token supplied by the client. + /// + private UserIdentityToken ValidateUserIdentityToken( + ExtensionObject identityToken, + SignatureData userTokenSignature, + out UserTokenPolicy policy ) + { + policy = null; + + // check for empty token. + if (identityToken == null || identityToken.Body == null || + identityToken.Body.GetType() == typeof(Opc.Ua.AnonymousIdentityToken)) + { + // not changing the token if already activated. + if (m_activated) + { + return null; + } + + // check if an anonymous login is permitted. + if (m_endpoint.UserIdentityTokens != null && m_endpoint.UserIdentityTokens.Count > 0) + { + bool found = false; + + for (int ii = 0; ii < m_endpoint.UserIdentityTokens.Count; ii++) + { + if (m_endpoint.UserIdentityTokens[ii].TokenType == UserTokenType.Anonymous) + { + found = true; + policy = m_endpoint.UserIdentityTokens[ii]; + break; + } + } + + if (!found) + { + throw ServiceResultException.Create(StatusCodes.BadUserAccessDenied, "Anonymous user token policy not supported."); + } + } + + // create an anonymous token to use for subsequent validation. + AnonymousIdentityToken anonymousToken = new AnonymousIdentityToken(); + anonymousToken.PolicyId = policy.PolicyId; + return anonymousToken; + } + + UserIdentityToken token = null; + // check for unrecognized token. + if (!typeof( UserIdentityToken ).IsInstanceOfType( identityToken.Body )) + { + //handle the use case when the UserIdentityToken is binary encoded over xml message encoding + if (identityToken.Encoding == ExtensionObjectEncoding.Binary && typeof( byte[] ).IsInstanceOfType( identityToken.Body )) + { + UserIdentityToken newToken = BaseVariableState.DecodeExtensionObject( null, typeof( UserIdentityToken ), identityToken, false ) as UserIdentityToken; + if (newToken == null) + { + throw ServiceResultException.Create( StatusCodes.BadUserAccessDenied, "Invalid user identity token provided." ); + } + + policy = m_endpoint.FindUserTokenPolicy( newToken.PolicyId ); + if (policy == null) + { + throw ServiceResultException.Create( StatusCodes.BadUserAccessDenied, "User token policy not supported.", "Opc.Ua.Server.Session.ValidateUserIdentityToken" ); + } + switch (policy.TokenType) + { + case UserTokenType.Anonymous: + token = BaseVariableState.DecodeExtensionObject( null, typeof( AnonymousIdentityToken ), identityToken, true ) as AnonymousIdentityToken; + break; + case UserTokenType.UserName: + token = BaseVariableState.DecodeExtensionObject( null, typeof( UserNameIdentityToken ), identityToken, true ) as UserNameIdentityToken; + break; + case UserTokenType.Certificate: + token = BaseVariableState.DecodeExtensionObject( null, typeof( X509IdentityToken ), identityToken, true ) as X509IdentityToken; + break; + case UserTokenType.IssuedToken: + token = BaseVariableState.DecodeExtensionObject( null, typeof( IssuedIdentityToken ), identityToken, true ) as IssuedIdentityToken; + break; + default: + throw ServiceResultException.Create( StatusCodes.BadUserAccessDenied, "Invalid user identity token provided." ); + } + } + else + { + throw ServiceResultException.Create( StatusCodes.BadUserAccessDenied, "Invalid user identity token provided." ); + } + } + else + { + // get the token. + token = (UserIdentityToken) identityToken.Body; + } + + // find the user token policy. + policy = m_endpoint.FindUserTokenPolicy( token.PolicyId ); + + if (policy == null) + { + throw ServiceResultException.Create(StatusCodes.BadIdentityTokenInvalid, "User token policy not supported."); + } + + // determine the security policy uri. + string securityPolicyUri = policy.SecurityPolicyUri; + + if (String.IsNullOrEmpty( securityPolicyUri )) + { + securityPolicyUri = m_endpoint.SecurityPolicyUri; + } + + if (ServerBase.RequireEncryption(m_endpoint)) + { + // decrypt the token. + if (m_serverCertificate == null) + { + m_serverCertificate = CertificateFactory.Create(m_endpoint.ServerCertificate, true); + + // check for valid certificate. + if (m_serverCertificate == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ApplicationCertificate cannot be found."); + } + } + + try + { + token.Decrypt(m_serverCertificate, m_serverNonce, securityPolicyUri); + } + catch (Exception e) + { + if (e is ServiceResultException) + { + throw; + } + + throw ServiceResultException.Create(StatusCodes.BadIdentityTokenInvalid, e, "Could not decrypt identity token."); + } + + // verify the signature. + if (securityPolicyUri != SecurityPolicies.None) + { + byte[] dataToSign = Utils.Append(m_serverCertificate.RawData, m_serverNonce); + + if (!token.Verify(dataToSign, userTokenSignature, securityPolicyUri)) + { + // verify for certificate chain in endpoint. + // validate the signature with complete chain if the check with leaf certificate failed. + X509Certificate2Collection serverCertificateChain = Utils.ParseCertificateChainBlob(m_endpoint.ServerCertificate); + + if (serverCertificateChain.Count > 1) + { + List serverCertificateChainList = new List(); + + for (int i = 0; i < serverCertificateChain.Count; i++) + { + serverCertificateChainList.AddRange(serverCertificateChain[i].RawData); + } + + byte[] serverCertificateChainData = serverCertificateChainList.ToArray(); + dataToSign = Utils.Append(serverCertificateChainData, m_serverNonce); + + if (!token.Verify(dataToSign, userTokenSignature, securityPolicyUri)) + { + throw new ServiceResultException(StatusCodes.BadIdentityTokenRejected, "Invalid user signature!"); + } + } + else + { + throw new ServiceResultException(StatusCodes.BadIdentityTokenRejected, "Invalid user signature!"); + } + } + } + } + + // validate user identity token. + return token; + } + + /// + /// Updates the user identity. + /// + /// true if the new identity is different from the old identity. + private bool UpdateUserIdentity( + UserIdentityToken identityToken, + IUserIdentity identity, + IUserIdentity effectiveIdentity) + { + if (identityToken == null) throw new ArgumentNullException(nameof(identityToken)); + + lock (m_lock) + { + bool changed = m_effectiveIdentity == null && effectiveIdentity != null; + + if (m_effectiveIdentity != null) + { + changed = !m_effectiveIdentity.Equals(effectiveIdentity); + } + + // always save the new identity since it may have additional information that does not affect equality. + m_identityToken = identityToken; + m_identity = identity; + m_effectiveIdentity = effectiveIdentity; + + // update diagnostics. + lock (DiagnosticsLock) + { + m_securityDiagnostics.ClientUserIdOfSession = identity.DisplayName; + m_securityDiagnostics.AuthenticationMechanism = identity.TokenType.ToString(); + + m_securityDiagnostics.ClientUserIdHistory.Add(identity.DisplayName); + } + + return changed; + } + } + + /// + /// Updates the diagnostic counters associated with the request. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private void UpdateDiagnosticCounters(RequestType requestType, bool error, bool authorizationError) + { + lock (DiagnosticsLock) + { + if (!error) + { + m_diagnostics.ClientLastContactTime = DateTime.UtcNow; + } + + m_diagnostics.TotalRequestCount.TotalCount++; + + if (error) + { + m_diagnostics.TotalRequestCount.ErrorCount++; + + if (authorizationError) + { + m_diagnostics.UnauthorizedRequestCount++; + } + } + + ServiceCounterDataType counter = null; + + switch (requestType) + { + case RequestType.Read: { counter = m_diagnostics.ReadCount; break; } + case RequestType.HistoryRead: { counter = m_diagnostics.HistoryReadCount; break; } + case RequestType.Write: { counter = m_diagnostics.WriteCount; break; } + case RequestType.HistoryUpdate: { counter = m_diagnostics.HistoryUpdateCount; break; } + case RequestType.Call: { counter = m_diagnostics.CallCount; break; } + case RequestType.CreateMonitoredItems: { counter = m_diagnostics.CreateMonitoredItemsCount; break; } + case RequestType.ModifyMonitoredItems: { counter = m_diagnostics.ModifyMonitoredItemsCount; break; } + case RequestType.SetMonitoringMode: { counter = m_diagnostics.SetMonitoringModeCount; break; } + case RequestType.SetTriggering: { counter = m_diagnostics.SetTriggeringCount; break; } + case RequestType.DeleteMonitoredItems: { counter = m_diagnostics.DeleteMonitoredItemsCount; break; } + case RequestType.CreateSubscription: { counter = m_diagnostics.CreateSubscriptionCount; break; } + case RequestType.ModifySubscription: { counter = m_diagnostics.ModifySubscriptionCount; break; } + case RequestType.SetPublishingMode: { counter = m_diagnostics.SetPublishingModeCount; break; } + case RequestType.Publish: { counter = m_diagnostics.PublishCount; break; } + case RequestType.Republish: { counter = m_diagnostics.RepublishCount; break; } + case RequestType.TransferSubscriptions: { counter = m_diagnostics.TransferSubscriptionsCount; break; } + case RequestType.DeleteSubscriptions: { counter = m_diagnostics.DeleteSubscriptionsCount; break; } + case RequestType.AddNodes: { counter = m_diagnostics.AddNodesCount; break; } + case RequestType.AddReferences: { counter = m_diagnostics.AddReferencesCount; break; } + case RequestType.DeleteNodes: { counter = m_diagnostics.DeleteNodesCount; break; } + case RequestType.DeleteReferences: { counter = m_diagnostics.DeleteReferencesCount; break; } + case RequestType.Browse: { counter = m_diagnostics.BrowseCount; break; } + case RequestType.BrowseNext: { counter = m_diagnostics.BrowseNextCount; break; } + case RequestType.TranslateBrowsePathsToNodeIds: { counter = m_diagnostics.TranslateBrowsePathsToNodeIdsCount; break; } + case RequestType.QueryFirst: { counter = m_diagnostics.QueryFirstCount; break; } + case RequestType.QueryNext: { counter = m_diagnostics.QueryNextCount; break; } + case RequestType.RegisterNodes: { counter = m_diagnostics.RegisterNodesCount; break; } + case RequestType.UnregisterNodes: { counter = m_diagnostics.UnregisterNodesCount; break; } + } + + if (counter != null) + { + counter.TotalCount = counter.TotalCount + 1; + + if (error) + { + counter.ErrorCount = counter.ErrorCount + 1; + } + } + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private NodeId m_sessionId; + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + private NodeId m_authenticationToken; + private IServerInternal m_server; + + private UserIdentityToken m_identityToken; + private IUserIdentity m_identity; + private IUserIdentity m_effectiveIdentity; + private bool m_activated; + + private X509Certificate2 m_clientCertificate; + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + private List m_softwareCertificates; + private byte[] m_clientNonce; + private byte[] m_serverNonce; + private string m_sessionName; + private string m_secureChannelId; + private EndpointDescription m_endpoint; + private X509Certificate2 m_serverCertificate; + private byte[] m_serverCertificateChain; + + private string[] m_localeIds; + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + private uint m_maxResponseMessageSize; + private double m_maxRequestAge; + private int m_maxBrowseContinuationPoints; + private int m_maxHistoryContinuationPoints; + + private SessionDiagnosticsDataType m_diagnostics; + private SessionSecurityDiagnosticsDataType m_securityDiagnostics; + private List m_browseContinuationPoints; + private List m_historyContinuationPoints; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/SessionManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/SessionManager.cs new file mode 100644 index 00000000..95a76cb6 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Session/SessionManager.cs @@ -0,0 +1,947 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Security.Cryptography.X509Certificates; +using System.Globalization; +using System.Threading.Tasks; + +namespace Opc.Ua.Server +{ + /// + /// A generic session manager object for a server. + /// + public class SessionManager : ISessionManager, IDisposable + { + #region Constructors + /// + /// Initializes the manager with its configuration. + /// + public SessionManager( + IServerInternal server, + ApplicationConfiguration configuration) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + m_server = server; + + m_minSessionTimeout = configuration.ServerConfiguration.MinSessionTimeout; + m_maxSessionTimeout = configuration.ServerConfiguration.MaxSessionTimeout; + m_maxSessionCount = configuration.ServerConfiguration.MaxSessionCount; + m_maxRequestAge = configuration.ServerConfiguration.MaxRequestAge; + m_maxBrowseContinuationPoints = configuration.ServerConfiguration.MaxBrowseContinuationPoints; + m_maxHistoryContinuationPoints = configuration.ServerConfiguration.MaxHistoryContinuationPoints; + m_minNonceLength = configuration.SecurityConfiguration.NonceLength; + + m_sessions = new Dictionary(); + + // create a event to signal shutdown. + m_shutdownEvent = new ManualResetEvent(true); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List sessions = null; + + lock (m_lock) + { + sessions = new List(m_sessions.Values); + m_sessions.Clear(); + } + + foreach (Session session in sessions) + { + Utils.SilentDispose(session); + } + + m_shutdownEvent.Set(); + } + } + #endregion + + #region Public Interface + /// + /// Starts the session manager. + /// + public virtual void Startup() + { + lock (m_lock) + { + // start thread to monitor sessions. + m_shutdownEvent.Reset(); + + Task.Run(() => { + MonitorSessions(m_minSessionTimeout); + }); + } + } + + /// + /// Stops the session manager and closes all sessions. + /// + public virtual void Shutdown() + { + lock (m_lock) + { + // stop the monitoring thread. + m_shutdownEvent.Set(); + + // dispose of session objects. + foreach (Session session in m_sessions.Values) + { + session.Dispose(); + } + + m_sessions.Clear(); + } + } + + /// + /// Creates a new session. + /// + public virtual Session CreateSession( + OperationContext context, + X509Certificate2 serverCertificate, + string sessionName, + byte[] clientNonce, + ApplicationDescription clientDescription, + string endpointUrl, + X509Certificate2 clientCertificate, + double requestedSessionTimeout, + uint maxResponseMessageSize, + out NodeId sessionId, + out NodeId authenticationToken, + out byte[] serverNonce, + out double revisedSessionTimeout) + { + sessionId = 0; + revisedSessionTimeout = requestedSessionTimeout; + + Session session = null; + + lock (m_lock) + { + // check session count. + if (m_maxSessionCount > 0 && m_sessions.Count >= m_maxSessionCount) + { + throw new ServiceResultException(StatusCodes.BadTooManySessions); + } + + // check for same Nonce in another session + if (clientNonce != null) + { + foreach (Session sessionIterator in m_sessions.Values) + { + if (Utils.CompareNonce(sessionIterator.ClientNonce, clientNonce)) + { + throw new ServiceResultException(StatusCodes.BadNonceInvalid); + } + } + } + // can assign a simple identifier if secured. + authenticationToken = null; + + if (!String.IsNullOrEmpty(context.ChannelContext.SecureChannelId)) + { + if (context.ChannelContext.EndpointDescription.SecurityMode != MessageSecurityMode.None) + { + authenticationToken = Utils.IncrementIdentifier(ref m_lastSessionId); + } + } + + // must assign a hard-to-guess id if not secured. + if (authenticationToken == null) + { + byte[] token = Utils.Nonce.CreateNonce(32); + authenticationToken = new NodeId(token); + } + + // determine session timeout. + if (requestedSessionTimeout > m_maxSessionTimeout) + { + revisedSessionTimeout = m_maxSessionTimeout; + } + + if (requestedSessionTimeout < m_minSessionTimeout) + { + revisedSessionTimeout = m_minSessionTimeout; + } + + // create server nonce. + serverNonce = Utils.Nonce.CreateNonce((uint)m_minNonceLength); + + // assign client name. + if (String.IsNullOrEmpty(sessionName)) + { + sessionName = Utils.Format("Session {0}", sessionId); + } + + // create instance of session. + session = CreateSession( + context, + m_server, + serverCertificate, + authenticationToken, + clientNonce, + serverNonce, + sessionName, + clientDescription, + endpointUrl, + clientCertificate, + revisedSessionTimeout, + maxResponseMessageSize, + m_maxRequestAge, + m_maxBrowseContinuationPoints); + + // get the session id. + sessionId = session.Id; + + // save session. + m_sessions.Add(authenticationToken, session); + } + + // raise session related event. + RaiseSessionEvent(session, SessionEventReason.Created); + + // return session. + return session; + } + + /// + /// Activates an existing session + /// + public virtual bool ActivateSession( + OperationContext context, + NodeId authenticationToken, + SignatureData clientSignature, + List clientSoftwareCertificates, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + StringCollection localeIds, + out byte[] serverNonce) + { + serverNonce = null; + + Session session = null; + UserIdentityToken newIdentity = null; + UserTokenPolicy userTokenPolicy = null; + + lock (m_lock) + { + // find session. + if (!m_sessions.TryGetValue(authenticationToken, out session)) + { + throw new ServiceResultException(StatusCodes.BadSessionIdInvalid); + } + + // check if session timeout has expired. + if (session.HasExpired) + { + m_server.CloseSession(null, session.Id, false); + throw new ServiceResultException(StatusCodes.BadSessionClosed); + } + + // create new server nonce. + serverNonce = Utils.Nonce.CreateNonce((uint)m_minNonceLength); + + // validate before activation. + session.ValidateBeforeActivate( + context, + clientSignature, + clientSoftwareCertificates, + userIdentityToken, + userTokenSignature, + localeIds, + serverNonce, + out newIdentity, + out userTokenPolicy); + } + + IUserIdentity identity = null; + IUserIdentity effectiveIdentity = null; + ServiceResult error = null; + + try + { + // check if the application has a callback which validates the identity tokens. + lock (m_eventLock) + { + if (m_ImpersonateUser != null) + { + ImpersonateEventArgs args = new ImpersonateEventArgs(newIdentity, userTokenPolicy, context.ChannelContext.EndpointDescription); + m_ImpersonateUser(session, args); + + if (ServiceResult.IsBad(args.IdentityValidationError)) + { + error = args.IdentityValidationError; + } + else + { + identity = args.Identity; + effectiveIdentity = args.EffectiveIdentity; + } + } + } + + // parse the token manually if the identity is not provided. + if (identity == null) + { + identity = newIdentity != null ? new UserIdentity(newIdentity) : new UserIdentity(); + } + + // use the identity as the effectiveIdentity if not provided. + if (effectiveIdentity == null) + { + effectiveIdentity = identity; + } + } + catch (Exception e) + { + if (e is ServiceResultException) + { + throw; + } + + throw ServiceResultException.Create( + StatusCodes.BadIdentityTokenInvalid, + e, + "Could not validate user identity token: {0}", + newIdentity); + } + + // check for validation error. + if (ServiceResult.IsBad(error)) + { + throw new ServiceResultException(error); + } + + // activate session. + bool contextChanged = session.Activate( + context, + clientSoftwareCertificates, + newIdentity, + identity, + effectiveIdentity, + localeIds, + serverNonce); + + // raise session related event. + if (contextChanged) + { + RaiseSessionEvent(session, SessionEventReason.Activated); + } + + // indicates that the identity context for the session has changed. + return contextChanged; + } + + /// + /// Closes the specifed session. + /// + /// + /// This method should not throw an exception if the session no longer exists. + /// + public virtual void CloseSession(NodeId sessionId) + { + // find the session. + Session session = null; + + lock (m_lock) + { + foreach (KeyValuePair current in m_sessions) + { + if (current.Value.Id == sessionId) + { + session = current.Value; + m_sessions.Remove(current.Key); + break; + } + } + } + + if (session != null) + { + // raise session related event. + RaiseSessionEvent(session, SessionEventReason.Closing); + + // close the session. + session.Close(); + + // update diagnostics. + lock (m_server.DiagnosticsWriteLock) + { + m_server.ServerDiagnostics.CurrentSessionCount--; + } + } + + } + + /// + /// Validates request header and returns a request context. + /// + /// + /// This method verifies that the session id valid and that it uses secure channel id + /// associated with with current thread. It also verifies that the timestamp is not too + /// and that the sequence number is not out of order (update requests only). + /// + public virtual OperationContext ValidateRequest(RequestHeader requestHeader, RequestType requestType) + { + if (requestHeader == null) throw new ArgumentNullException(nameof(requestHeader)); + + Session session = null; + + try + { + lock (m_lock) + { + // check for create session request. + if (requestType == RequestType.CreateSession || requestType == RequestType.ActivateSession) + { + return new OperationContext(requestHeader, requestType); + } + + // find session. + if (!m_sessions.TryGetValue(requestHeader.AuthenticationToken, out session)) + { + var Handler = m_ValidateSessionLessRequest; + + if (Handler != null) + { + var args = new ValidateSessionLessRequestEventArgs(requestHeader.AuthenticationToken, requestType); + Handler(this, args); + + if (ServiceResult.IsBad(args.Error)) + { + throw new ServiceResultException(args.Error); + } + + return new OperationContext(requestHeader, requestType, args.Identity); + } + + throw new ServiceResultException(StatusCodes.BadSessionIdInvalid); + } + + // validate request header. + session.ValidateRequest(requestHeader, requestType); + + // return context. + return new OperationContext(requestHeader, requestType, session); + } + } + catch (Exception e) + { + ServiceResultException sre = e as ServiceResultException; + + if (sre != null && sre.StatusCode == StatusCodes.BadSessionNotActivated) + { + if (session != null) + { + CloseSession(session.Id); + } + } + + throw new ServiceResultException(e, StatusCodes.BadUnexpectedError); + } + } + #endregion + + #region Protected Methods + /// + /// Creates a new instance of a session. + /// + protected virtual Session CreateSession( + OperationContext context, + IServerInternal server, + X509Certificate2 serverCertificate, + NodeId sessionCookie, + byte[] clientNonce, + byte[] serverNonce, + string sessionName, + ApplicationDescription clientDescription, + string endpointUrl, + X509Certificate2 clientCertificate, + double sessionTimeout, + uint maxResponseMessageSize, + int maxRequestAge, // TBD - Remove unused parameter. + int maxContinuationPoints) // TBD - Remove unused parameter. + { + Session session = new Session( + context, + m_server, + serverCertificate, + sessionCookie, + clientNonce, + serverNonce, + sessionName, + clientDescription, + endpointUrl, + clientCertificate, + sessionTimeout, + maxResponseMessageSize, + m_maxRequestAge, + m_maxBrowseContinuationPoints, + m_maxHistoryContinuationPoints); + + return session; + } + + /// + /// Raises an event related to a session. + /// + protected virtual void RaiseSessionEvent(Session session, SessionEventReason reason) + { + lock (m_eventLock) + { + SessionEventHandler handler = null; + + switch (reason) + { + case SessionEventReason.Created: { handler = m_SessionCreated; break; } + case SessionEventReason.Activated: { handler = m_SessionActivated; break; } + case SessionEventReason.Closing: { handler = m_SessionClosing; break; } + } + + if (handler != null) + { + try + { + handler(session, reason); + } + catch (Exception e) + { + Utils.Trace(e, "Session event handler raised an exception."); + } + } + } + } + #endregion + + #region Private Methods + /// + /// Periodically checks if the sessions have timed out. + /// + private void MonitorSessions(object data) + { + try + { + Utils.Trace("Server: Session Monitor Thread Started."); + + int sleepCycle = Convert.ToInt32(data, CultureInfo.InvariantCulture); + + do + { + Session[] sessions = null; + + lock (m_lock) + { + sessions = new Session[m_sessions.Count]; + m_sessions.Values.CopyTo(sessions, 0); + } + + for (int ii = 0; ii < sessions.Length; ii++) + { + if (sessions[ii].HasExpired) + { + // update diagnostics. + lock (m_server.DiagnosticsWriteLock) + { + m_server.ServerDiagnostics.SessionTimeoutCount++; + } + + m_server.CloseSession(null, sessions[ii].Id, false); + } + } + + if (m_shutdownEvent.WaitOne(sleepCycle)) + { + Utils.Trace("Server: Session Monitor Thread Exited Normally."); + break; + } + } + while (true); + } + catch (Exception e) + { + Utils.Trace(e, "Server: Session Monitor Thread Exited Unexpectedly"); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private Dictionary m_sessions; + private long m_lastSessionId; + private ManualResetEvent m_shutdownEvent; + + private int m_minSessionTimeout; + private int m_maxSessionTimeout; + private int m_maxSessionCount; + private int m_maxRequestAge; + private int m_maxBrowseContinuationPoints; + private int m_maxHistoryContinuationPoints; + private int m_minNonceLength; + + private object m_eventLock = new object(); + private event SessionEventHandler m_SessionCreated; + private event SessionEventHandler m_SessionActivated; + private event SessionEventHandler m_SessionClosing; + private event ImpersonateEventHandler m_ImpersonateUser; + private event EventHandler m_ValidateSessionLessRequest; + #endregion + + #region ISessionManager Members + /// + public event SessionEventHandler SessionCreated + { + add + { + lock (m_eventLock) + { + m_SessionCreated += value; + } + } + + remove + { + lock (m_eventLock) + { + m_SessionCreated -= value; + } + } + } + + /// + public event SessionEventHandler SessionActivated + { + add + { + lock (m_eventLock) + { + m_SessionActivated += value; + } + } + + remove + { + lock (m_eventLock) + { + m_SessionActivated -= value; + } + } + } + + /// + public event SessionEventHandler SessionClosing + { + add + { + lock (m_eventLock) + { + m_SessionClosing += value; + } + } + + remove + { + lock (m_eventLock) + { + m_SessionClosing -= value; + } + } + } + + /// + public event ImpersonateEventHandler ImpersonateUser + { + add + { + lock (m_eventLock) + { + m_ImpersonateUser += value; + } + } + + remove + { + lock (m_eventLock) + { + m_ImpersonateUser -= value; + } + } + } + + /// + public event EventHandler ValidateSessionLessRequest + { + add + { + lock (m_eventLock) + { + m_ValidateSessionLessRequest += value; + } + } + + remove + { + lock (m_eventLock) + { + m_ValidateSessionLessRequest -= value; + } + } + } + + /// + public IList GetSessions() + { + lock (m_lock) + { + return new List(m_sessions.Values); + } + } + #endregion + } + + /// + /// Allows application components to receive notifications when changes to sessions occur. + /// + /// + /// Sinks that receive these events must not block the thread. + /// + public interface ISessionManager + { + /// + /// Raised after a new session is created. + /// + event SessionEventHandler SessionCreated; + + /// + /// Raised whenever a session is activated and the user identity or preferred locales changed. + /// + event SessionEventHandler SessionActivated; + + /// + /// Raised before a session is closed. + /// + event SessionEventHandler SessionClosing; + + /// + /// Raised before the user identity for a session is changed. + /// + event ImpersonateEventHandler ImpersonateUser; + + /// + /// Raised to validate a session-less request. + /// + event EventHandler ValidateSessionLessRequest; + + /// + /// Returns all of the sessions known to the session manager. + /// + /// A list of the sessions. + IList GetSessions(); + } + + /// + /// The possible reasons for a session related eventg. + /// + public enum SessionEventReason + { + /// + /// A new session was created. + /// + Created, + + /// + /// A session is being activated with a new user identity. + /// + Impersonating, + + /// + /// A session was activated and the user identity or preferred locales changed. + /// + Activated, + + /// + /// A session is about to be closed. + /// + Closing + } + + /// + /// The delegate for functions used to receive session related events. + /// + public delegate void SessionEventHandler(Session session, SessionEventReason reason); + + #region ImpersonateEventArgs Class + /// + /// A class which provides the event arguments for session related event. + /// + public class ImpersonateEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + public ImpersonateEventArgs(UserIdentityToken newIdentity, UserTokenPolicy userTokenPolicy, EndpointDescription endpointDescription = null) + { + m_newIdentity = newIdentity; + m_userTokenPolicy = userTokenPolicy; + m_endpointDescription = endpointDescription; + } + #endregion + + #region Public Properties + /// + /// The new user identity for the session. + /// + public UserIdentityToken NewIdentity + { + get { return m_newIdentity; } + } + + /// + /// The user token policy selected by the client. + /// + public UserTokenPolicy UserTokenPolicy + { + get { return m_userTokenPolicy; } + } + + /// + /// An application defined handle that can be used for access control operations. + /// + public IUserIdentity Identity + { + get { return m_identity; } + set { m_identity = value; } + } + + /// + /// An application defined handle that can be used for access control operations. + /// + public IUserIdentity EffectiveIdentity + { + get { return m_effectiveIdentity; } + set { m_effectiveIdentity = value; } + } + + /// + /// Set to indicate that an error occurred validating the identity and that it should be rejected. + /// + public ServiceResult IdentityValidationError + { + get { return m_identityValidationError; } + set { m_identityValidationError = value; } + } + + /// + /// Get the EndpointDescription + /// + public EndpointDescription EndpointDescription + { + get { return m_endpointDescription; } + } + #endregion + + #region Private Fields + private UserIdentityToken m_newIdentity; + private UserTokenPolicy m_userTokenPolicy; + private ServiceResult m_identityValidationError; + private IUserIdentity m_identity; + private IUserIdentity m_effectiveIdentity; + private EndpointDescription m_endpointDescription; + #endregion + } + + /// + /// The delegate for functions used to receive impersonation events. + /// + public delegate void ImpersonateEventHandler(Session session, ImpersonateEventArgs args); + #endregion + + #region ImpersonateEventArgs Class + /// + /// A class which provides the event arguments for session related event. + /// + public class ValidateSessionLessRequestEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + public ValidateSessionLessRequestEventArgs(NodeId authenticationToken, RequestType requestType) + { + AuthenticationToken = authenticationToken; + RequestType = requestType; + } + #endregion + + #region Public Properties + /// + /// The request type for the request. + /// + public RequestType RequestType { get; private set; } + + /// + /// The new user identity for the session. + /// + public NodeId AuthenticationToken { get; private set; } + + /// + /// The identity to associate with the session-less request. + /// + public IUserIdentity Identity { get; set; } + + /// + /// Set to indicate that an error occurred validating the session-less request and that it should be rejected. + /// + public ServiceResult Error { get; set; } + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/AsyncPublishOperation.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/AsyncPublishOperation.cs new file mode 100644 index 00000000..b874e31d --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/AsyncPublishOperation.cs @@ -0,0 +1,140 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Diagnostics; +using System.Xml; +using System.Threading; + +namespace Opc.Ua.Server +{ + /// + /// Stores the state of an asynchrounous publish operation. + /// + public class AsyncPublishOperation + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The context. + /// The request. + /// The server. + public AsyncPublishOperation( + OperationContext context, + IEndpointIncomingRequest request, + StandardServer server) + { + m_context = context; + m_request = request; + m_server = server; + m_response = new PublishResponse(); + m_request.Calldata = this; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + m_request.OperationCompleted(null, StatusCodes.BadServerHalted); + } + } + #endregion + + #region Public Members + /// + /// Gets the context. + /// + /// The context. + public OperationContext Context + { + get { return m_context; } + } + + /// + /// Gets the request handle. + /// + /// The request handle. + public uint RequestHandle + { + get { return m_request.Request.RequestHeader.RequestHandle; } + } + + /// + /// Gets the response. + /// + /// The response. + public PublishResponse Response + { + get { return m_response; } + } + + /// + /// Gets the calldata. + /// + /// The calldata. + public object Calldata + { + get { return m_calldata; } + } + + /// + /// Schedules a thread to complete the request. + /// + /// The data that is used to complete the operation + public void CompletePublish(object calldata) + { + m_calldata = calldata; + m_server.ScheduleIncomingRequest(m_request); + } + #endregion + + #region Private Fields + private IEndpointIncomingRequest m_request; + private StandardServer m_server; + private OperationContext m_context; + private PublishResponse m_response; + private object m_calldata; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/IMonitoredItem.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/IMonitoredItem.cs new file mode 100644 index 00000000..5a359d6b --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/IMonitoredItem.cs @@ -0,0 +1,303 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Diagnostics; +using System.Xml; +using System.Threading; + +namespace Opc.Ua.Server +{ + /// + /// Manages a monitored item created by a client. + /// + public interface IMonitoredItem + { + /// + /// The node manager that created the item. + /// + INodeManager NodeManager { get; } + + /// + /// The session that owns the monitored item. + /// + Session Session { get; } + + /// + /// The identifier for the item that is unique within the server. + /// + uint Id { get; } + + /// + /// The identifier for the subscription that is unique within the server. + /// + uint SubscriptionId { get; } + + /// + /// The identifier for the client handle assigned to the monitored item. + /// + uint ClientHandle { get; } + + /// + /// The object to call when item is ready to publish. + /// + ISubscription SubscriptionCallback { get; set; } + + /// + /// The handle assigned by the NodeManager. + /// + object ManagerHandle { get; } + + /// + /// A bit mask that indicates what the monitored item is. + /// + /// + /// Predefined bits are defined by the MonitoredItemTypeMasks class. + /// NodeManagers may use the remaining bits. + /// + int MonitoredItemType { get; } + + /// + /// Checks if the monitored item is ready to publish. + /// + bool IsReadyToPublish { get; } + + /// + /// Gets or Sets a value indicating whether the monitored item is ready to trigger the linked items. + /// + bool IsReadyToTrigger { get; set; } + + /// + /// Returns the result after creating the monitor item. + /// + ServiceResult GetCreateResult(out MonitoredItemCreateResult result); + + /// + /// Returns the result after modifying the monitor item. + /// + ServiceResult GetModifyResult(out MonitoredItemModifyResult result); + + /// + /// The monitoring mode specified for the item. + /// + MonitoringMode MonitoringMode { get; } + + /// + /// The sampling interval for the item. + /// + double SamplingInterval { get; } + } + + /// + /// A monitored item that can be triggered. + /// + public interface ITriggeredMonitoredItem + { + /// + /// The identifier for the item that is unique within the server. + /// + uint Id { get; } + + /// + /// Flags the monitored item as triggered. + /// + /// True if there is something to publish. + bool SetTriggered(); + } + + /// + /// Manages a monitored item created by a client. + /// + public interface IEventMonitoredItem : IMonitoredItem + { + /// + /// Whether the item is monitoring all events produced by the server. + /// + bool MonitoringAllEvents { get; } + + /// + /// Adds an event to the queue. + /// + void QueueEvent(IFilterTarget instance); + + /// + /// The filter used by the monitored item. + /// + EventFilter EventFilter { get; } + + /// + /// Publishes all available event notifications. + /// + /// True if the caller should re-queue the item for publishing after the next interval elaspses. + bool Publish(OperationContext context, Queue notifications); + + /// + /// Modifies the attributes for monitored item. + /// + ServiceResult ModifyAttributes( + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + uint clientHandle, + MonitoringFilter originalFilter, + MonitoringFilter filterToUse, + Range range, + double samplingInterval, + uint queueSize, + bool discardOldest); + + /// + /// Changes the monitoring mode for the item. + /// + void SetMonitoringMode(MonitoringMode monitoringMode); + } + + /// + /// Manages a monitored item created by a client. + /// + public interface IDataChangeMonitoredItem : IMonitoredItem + { + /// + /// Updates the queue with a data value or an error. + /// + void QueueValue(DataValue value, ServiceResult error); + + /// + /// The filter used by the monitored item. + /// + DataChangeFilter DataChangeFilter { get; } + + /// + /// Publishes all available data change notifications. + /// + /// True if the caller should re-queue the item for publishing after the next interval elaspses. + bool Publish( + OperationContext context, + Queue notifications, + Queue diagnostics); + } + + /// + /// Manages a monitored item created by a client. + /// + public interface IDataChangeMonitoredItem2 : IDataChangeMonitoredItem + { + /// + /// The attribute being monitored. + /// + uint AttributeId { get; } + + /// + /// Updates the queue with a data value or an error. + /// + void QueueValue(DataValue value, ServiceResult error, bool ignoreFilters); + } + + /// + /// Manages a monitored item created by a client. + /// + public interface ISampledDataChangeMonitoredItem : IDataChangeMonitoredItem2 + { + /// + /// The diagnostics mask specified fro the monitored item. + /// + DiagnosticsMasks DiagnosticsMasks { get; } + + /// + /// The queue size for the item. + /// + uint QueueSize { get; } + + /// + /// The minimum sampling interval for the item. + /// + double MinimumSamplingInterval { get; } + + /// + /// Used to check whether the item is ready to sample. + /// + bool SamplingIntervalExpired(); + + /// + /// Returns the parameters that can be used to read the monitored item. + /// + ReadValueId GetReadValueId(); + + /// + /// Modifies the attributes for monitored item. + /// + ServiceResult ModifyAttributes( + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + uint clientHandle, + MonitoringFilter originalFilter, + MonitoringFilter filterToUse, + Range range, + double samplingInterval, + uint queueSize, + bool discardOldest); + + /// + /// Changes the monitoring mode for the item. + /// + void SetMonitoringMode(MonitoringMode monitoringMode); + + /// + /// Updates the sampling interval for an item. + /// + void SetSamplingInterval(double samplingInterval); + } + + /// + /// Defines constants for the monitored item type. + /// + /// + /// Bits 1-8 are reserved for internal use. NodeManagers may use other bits. + /// + public static class MonitoredItemTypeMask + { + /// + /// The monitored item subscribes to data changes. + /// + public const int DataChange = 0x1; + + /// + /// The monitored item subscribes to events. + /// + public const int Events = 0x2; + + /// + /// The monitored item subscribes to all events produced by the server. + /// + /// + /// If this bit is set the Events bit must be set too. + /// + public const int AllEvents = 0x4; + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/MonitoredItem.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/MonitoredItem.cs new file mode 100644 index 00000000..4c6b3809 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/MonitoredItem.cs @@ -0,0 +1,1803 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Globalization; +using System.Runtime.InteropServices; +using System.Xml; +using static Opc.Ua.Utils; + +namespace Opc.Ua.Server +{ + /// + /// A handle that describes how to access a node/attribute via an i/o manager. + /// + public class MonitoredItem : IEventMonitoredItem, ISampledDataChangeMonitoredItem, ITriggeredMonitoredItem + { + #region Constructors + /// + /// Initializes the object with its node type. + /// + public MonitoredItem( + IServerInternal server, + INodeManager nodeManager, + object mangerHandle, + uint subscriptionId, + uint id, + Session session, + ReadValueId itemToMonitor, + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + MonitoringMode monitoringMode, + uint clientHandle, + MonitoringFilter originalFilter, + MonitoringFilter filterToUse, + Range range, + double samplingInterval, + uint queueSize, + bool discardOldest, + double sourceSamplingInterval) + { + if (itemToMonitor == null) throw new ArgumentNullException(nameof(itemToMonitor)); + + Initialize(); + + m_server = server; + m_nodeManager = nodeManager; + m_managerHandle = mangerHandle; + m_subscriptionId = subscriptionId; + m_id = id; + m_session = session; + m_nodeId = itemToMonitor.NodeId; + m_attributeId = itemToMonitor.AttributeId; + m_indexRange = itemToMonitor.IndexRange; + m_parsedIndexRange = itemToMonitor.ParsedIndexRange; + m_encoding = itemToMonitor.DataEncoding; + m_diagnosticsMasks = diagnosticsMasks; + m_timestampsToReturn = timestampsToReturn; + m_monitoringMode = monitoringMode; + m_clientHandle = clientHandle; + m_originalFilter = originalFilter; + m_filterToUse = filterToUse; + m_range = 0; + m_samplingInterval = samplingInterval; + m_queueSize = queueSize; + m_discardOldest = discardOldest; + m_sourceSamplingInterval = (int)sourceSamplingInterval; + m_calculator = null; + m_nextSamplingTime = HiResClock.TickCount64; + m_alwaysReportUpdates = false; + + m_typeMask = MonitoredItemTypeMask.DataChange; + + if (originalFilter is EventFilter) + { + m_typeMask = MonitoredItemTypeMask.Events; + + if (itemToMonitor.NodeId == Objects.Server) + { + m_typeMask |= MonitoredItemTypeMask.AllEvents; + } + } + + // create aggregate calculator. + ServerAggregateFilter aggregateFilter = filterToUse as ServerAggregateFilter; + + if (filterToUse is ServerAggregateFilter) + { + m_calculator = m_server.AggregateManager.CreateCalculator( + aggregateFilter.AggregateType, + aggregateFilter.StartTime, + DateTime.MaxValue, + aggregateFilter.ProcessingInterval, + aggregateFilter.Stepped, + aggregateFilter.AggregateConfiguration); + } + + if (range != null) + { + m_range = range.High - range.Low; + } + + // report change to item state. + ServerUtils.ReportCreateMonitoredItem( + m_nodeId, + m_id, + m_samplingInterval, + m_queueSize, + m_discardOldest, + m_filterToUse, + m_monitoringMode); + + InitializeQueue(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_server = null; + m_nodeManager = null; + m_managerHandle = null; + m_subscriptionId = 0; + m_id = 0; + m_session = null; + m_nodeId = null; + m_attributeId = 0; + m_indexRange = null; + m_parsedIndexRange = NumericRange.Empty; + m_encoding = null; + m_clientHandle = 0; + m_monitoringMode = MonitoringMode.Disabled; + m_samplingInterval = 0; + m_queueSize = 0; + m_discardOldest = true; + m_originalFilter = null; + m_lastValue = null; + m_lastError = null; + m_events = null; + m_overflow = false; + m_readyToPublish = false; + m_readyToTrigger = false; + m_sourceSamplingInterval = 0; + m_samplingError = ServiceResult.Good; + } + #endregion + + #region IMonitoredItem Members + /// + /// The node manager that created the item. + /// + public INodeManager NodeManager => m_nodeManager; + + /// + /// The handle assigned by the node manager when it created the item. + /// + public object ManagerHandle => m_managerHandle; + + /// + /// The identifier for the subscription that owns the monitored item. + /// + public uint SubscriptionId => m_subscriptionId; + + /// + /// A bit mask that indicates what the monitored item is. + /// + /// + /// Predefined bits are defined by the MonitoredItemTypeMasks class. + /// NodeManagers may use the remaining bits. + /// + public int MonitoredItemType => m_typeMask; + + /// + /// Returns true if the item is ready to publish. + /// + public bool IsReadyToPublish + { + get + { + // check if aggregate interval has passed. + if (m_calculator != null) + { + if (m_calculator.HasEndTimePassed(DateTime.UtcNow)) + { + return true; + } + } + + // check if not ready to publish. + if (!m_readyToPublish) + { + Utils.Trace((int)TraceMasks.OperationDetail, "IsReadyToPublish[{0}] FALSE", m_id); + return false; + } + + // check if it has been triggered. + if (m_monitoringMode != MonitoringMode.Disabled && m_triggered) + { + Utils.Trace((int)TraceMasks.OperationDetail, "IsReadyToPublish[{0}] TRIGGERED", m_id); + return true; + } + + // check if monitoring was turned off. + if (m_monitoringMode != MonitoringMode.Reporting) + { + Utils.Trace((int)TraceMasks.OperationDetail, "IsReadyToPublish[{0}] FALSE", m_id); + return false; + } + + if (m_sourceSamplingInterval == 0) + { + // re-queue if too little time has passed since the last publish. + long now = HiResClock.TickCount64; + + if (m_nextSamplingTime > now) + { + Utils.Trace((int)TraceMasks.OperationDetail, "IsReadyToPublish[{0}] FALSE {1}", m_id, new TimeSpan(m_nextSamplingTime - now).TotalSeconds); + return false; + } + } + + Utils.Trace((int)TraceMasks.OperationDetail, "IsReadyToPublish[{0}] NORMAL", m_id); + return true; + } + } + + /// + /// Gets or Sets a value indicating whether the item is ready to trigger in case it has some linked items. + /// + public bool IsReadyToTrigger + { + get + { + lock (m_lock) + { + // only allow to trigger if sampling or reporting. + if (m_monitoringMode == MonitoringMode.Disabled) + { + return false; + } + + return m_readyToTrigger; + } + } + + set + { + lock (m_lock) + { + m_readyToTrigger = value; + } + } + } + + /// + /// Sets a flag indicating that the item has been triggered and should publish. + /// + public bool SetTriggered() + { + lock (m_lock) + { + if (m_readyToPublish) + { + Utils.Trace("SetTriggered[{0}]", m_id); + m_triggered = true; + return true; + } + } + + return false; + } + + /// + /// Sets a flag indicating that the semantics for the monitored node have changed. + /// + /// + /// The StatusCode for next value reported by the monitored item will have the SemanticsChanged bit set. + /// + public void SetSemanticsChanged() + { + m_semanticsChanged = true; + } + + /// + /// Sets a flag indicating that the structure of the monitored node has changed. + /// + /// + /// The StatusCode for next value reported by the monitored item will have the StructureChanged bit set. + /// + public void SetStructureChanged() + { + m_structureChanged = true; + } + + /// + /// The filter used by the monitored item. + /// + public MonitoringFilter Filter => m_originalFilter; + + /// + /// The event filter used by the monitored item. + /// + public EventFilter EventFilter => m_originalFilter as EventFilter; + + /// + /// The data change filter used by the monitored item. + /// + public DataChangeFilter DataChangeFilter => m_originalFilter as DataChangeFilter; + + /// + /// The session that owns the monitored item. + /// + public Session Session + { + get + { + lock (m_lock) + { + return m_session; + } + } + } + + /// + /// The identifier for the item that is unique within the server. + /// + public uint Id => m_id; + + /// + /// The identifier for the client handle assigned to the monitored item. + /// + public uint ClientHandle => m_clientHandle; + + /// + /// The node id being monitored. + /// + public NodeId NodeId => m_nodeId; + + /// + /// The attribute being monitored. + /// + public uint AttributeId => m_attributeId; + + /// + /// The current monitoring mode for the item + /// + public MonitoringMode MonitoringMode => m_monitoringMode; + + /// + /// The sampling interval for the item. + /// + public double SamplingInterval + { + get + { + lock (m_lock) + { + return m_samplingInterval; + } + } + } + + /// + /// The minimum sampling interval for the item. + /// + public double MinimumSamplingInterval => m_sourceSamplingInterval; + + /// + /// The queue size for the item. + /// + public uint QueueSize => m_queueSize; + + /// + /// Gets number of elements actually contained in value queue. + /// + public int ItemsInQueue + { + get + { + lock (m_lock) + { + if (m_events != null) + { + return m_events.Count; + } + + if (m_queue != null) + { + return m_queue.ItemsInQueue; + } + + return 0; + } + } + } + + /// + /// The diagnostics masks to use when collecting notifications for the item. + /// + public DiagnosticsMasks DiagnosticsMasks => m_diagnosticsMasks; + + /// + /// The index range requested by the monitored item. + /// + public NumericRange IndexRange => m_parsedIndexRange; + + /// + /// The data encoding requested by the monitored item. + /// + public QualifiedName DataEncoding => m_encoding; + + /// + /// Whether the monitored item should report a value without checking if it was changed. + /// + public bool AlwaysReportUpdates + { + get { return m_alwaysReportUpdates; } + set { m_alwaysReportUpdates = value; } + } + + /// + /// Returns a description of the item being monitored. + /// + public ReadValueId GetReadValueId() + { + lock (m_lock) + { + ReadValueId valueId = new ReadValueId(); + + valueId.NodeId = m_nodeId; + valueId.AttributeId = m_attributeId; + valueId.IndexRange = m_indexRange; + valueId.ParsedIndexRange = m_parsedIndexRange; + valueId.DataEncoding = m_encoding; + valueId.Handle = m_managerHandle; + + return valueId; + } + } + + /// + /// Sets an error that occured in the sampling group. + /// + /// + /// The sampling group or node manager that owns the item may call this to indicate that + /// a fatal error occurred which means the item will no longer receive any data updates. + /// This error state can be cleared by calling this method and passing in ServiceResult.Good. + /// + public void SetSamplingError(ServiceResult error) + { + lock (m_lock) + { + if (error == null) + { + m_samplingError = ServiceResult.Good; + } + + m_samplingError = error; + } + } + + /// + /// Returns the result after creating the monitor item. + /// + public ServiceResult GetCreateResult(out MonitoredItemCreateResult result) + { + lock (m_lock) + { + result = new MonitoredItemCreateResult(); + + result.MonitoredItemId = m_id; + result.RevisedSamplingInterval = m_samplingInterval; + result.RevisedQueueSize = m_queueSize; + result.StatusCode = StatusCodes.Good; + + if (ServiceResult.IsBad(m_samplingError)) + { + result.StatusCode = m_samplingError.Code; + } + + return m_samplingError; + } + } + + /// + /// Returns the result after modifying the monitor item. + /// + public ServiceResult GetModifyResult(out MonitoredItemModifyResult result) + { + lock (m_lock) + { + result = new MonitoredItemModifyResult(); + + result.RevisedSamplingInterval = m_samplingInterval; + result.RevisedQueueSize = m_queueSize; + result.StatusCode = StatusCodes.Good; + + if (ServiceResult.IsBad(m_samplingError)) + { + result.StatusCode = m_samplingError.Code; + } + + return m_samplingError; + } + } + + /// + /// Modifies the attributes for monitored item. + /// + public ServiceResult ModifyAttributes( + DiagnosticsMasks diagnosticsMasks, + TimestampsToReturn timestampsToReturn, + uint clientHandle, + MonitoringFilter originalFilter, + MonitoringFilter filterToUse, + Range range, + double samplingInterval, + uint queueSize, + bool discardOldest) + { + lock (m_lock) + { + m_diagnosticsMasks = diagnosticsMasks; + m_timestampsToReturn = timestampsToReturn; + m_clientHandle = clientHandle; + m_discardOldest = discardOldest; + + m_originalFilter = originalFilter; + m_filterToUse = filterToUse; + + if (range != null) + { + m_range = range.High - range.Low; + } + + SetSamplingInterval(samplingInterval); + m_queueSize = queueSize; + + // check if aggregate filter has been updated. + ServerAggregateFilter aggregateFilter = filterToUse as ServerAggregateFilter; + + if (filterToUse is ServerAggregateFilter) + { + ServerAggregateFilter existingFilter = filterToUse as ServerAggregateFilter; + + bool match = existingFilter != null; + + if (match) if (existingFilter.AggregateType != aggregateFilter.AggregateType) match = false; + if (match) if (existingFilter.ProcessingInterval != aggregateFilter.ProcessingInterval) match = false; + if (match) if (existingFilter.StartTime != aggregateFilter.StartTime) match = false; + if (match) if (!existingFilter.AggregateConfiguration.IsEqual(aggregateFilter.AggregateConfiguration)) match = false; + + if (!match) + { + m_calculator = m_server.AggregateManager.CreateCalculator( + aggregateFilter.AggregateType, + aggregateFilter.StartTime, + DateTime.MaxValue, + aggregateFilter.ProcessingInterval, + aggregateFilter.Stepped, + aggregateFilter.AggregateConfiguration); + } + } + + // report change to item state. + ServerUtils.ReportModifyMonitoredItem( + m_nodeId, + m_id, + m_samplingInterval, + m_queueSize, + m_discardOldest, + m_filterToUse, + m_monitoringMode); + + InitializeQueue(); + + return null; + } + } + + /// + /// Updates the sampling interval for an item. + /// + public void SetSamplingInterval(double samplingInterval) + { + lock (m_lock) + { + if (samplingInterval == -1) + { + return; + } + + // subtract the previous sampling interval. + long oldSamplingInterval = (long)m_samplingInterval; + + if (oldSamplingInterval < m_nextSamplingTime) + { + m_nextSamplingTime -= oldSamplingInterval; + } + + m_samplingInterval = samplingInterval; + + // calculate the next sampling interval. + long newSamplingInterval = (long)m_samplingInterval; + + if (m_samplingInterval > 0) + { + m_nextSamplingTime += newSamplingInterval; + } + else + { + m_nextSamplingTime = 0; + } + } + } + + /// + /// Changes the monitoring mode for the item. + /// + void ISampledDataChangeMonitoredItem.SetMonitoringMode(MonitoringMode monitoringMode) + { + SetMonitoringMode(monitoringMode); + } + + /// + /// Changes the monitoring mode for the item. + /// + void IEventMonitoredItem.SetMonitoringMode(MonitoringMode monitoringMode) + { + SetMonitoringMode(monitoringMode); + } + + /// + /// Changes the monitoring mode for the item. + /// + public MonitoringMode SetMonitoringMode(MonitoringMode monitoringMode) + { + lock (m_lock) + { + MonitoringMode previousMode = m_monitoringMode; + + if (previousMode == monitoringMode) + { + return previousMode; + } + + Utils.Trace("MONITORING MODE[{0}] {1} -> {2}", m_id, m_monitoringMode, monitoringMode); + + if (previousMode == MonitoringMode.Disabled) + { + m_nextSamplingTime = HiResClock.TickCount64; + m_lastError = null; + m_lastValue = null; + } + + m_monitoringMode = monitoringMode; + + if (monitoringMode == MonitoringMode.Disabled) + { + m_readyToPublish = false; + m_readyToTrigger = false; + m_triggered = false; + } + + // report change to item state. + ServerUtils.ReportModifyMonitoredItem( + m_nodeId, + m_id, + m_samplingInterval, + m_queueSize, + m_discardOldest, + m_filterToUse, + m_monitoringMode); + + InitializeQueue(); + + return previousMode; + } + } + + /// + /// Adds an event to the queue. + /// + public virtual void QueueValue(DataValue value, ServiceResult error) + { + QueueValue(value, error, false); + } + + /// + /// Updates the queue with a data value or an error. + /// + public virtual void QueueValue(DataValue value, ServiceResult error, bool bypassFilter) + { + lock (m_lock) + { + // this method should only be called for variables. + if ((m_typeMask & MonitoredItemTypeMask.DataChange) == 0) + { + throw new ServiceResultException(StatusCodes.BadInternalError); + } + + // check monitoring mode. + if (m_monitoringMode == MonitoringMode.Disabled) + { + return; + } + + // make a shallow copy of the value. + if (value != null) + { + Utils.Trace("RECEIVED VALUE[{0}] Value={1}", this.m_id, value.WrappedValue); + + DataValue copy = new DataValue(); + + copy.WrappedValue = value.WrappedValue; + copy.StatusCode = value.StatusCode; + copy.SourceTimestamp = value.SourceTimestamp; + copy.SourcePicoseconds = value.SourcePicoseconds; + copy.ServerTimestamp = value.ServerTimestamp; + copy.ServerPicoseconds = value.ServerPicoseconds; + + value = copy; + + // ensure the data value matches the error status code. + if (error != null && error.StatusCode.Code != 0) + { + value.StatusCode = error.StatusCode; + } + } + + // create empty value if none provided. + if (ServiceResult.IsBad(error)) + { + if (value == null) + { + value = new DataValue(); + value.StatusCode = error.StatusCode; + value.SourceTimestamp = DateTime.UtcNow; + value.ServerTimestamp = DateTime.UtcNow; + } + } + + // this should never happen. + if (value == null) + { + return; + } + + // apply aggregate filter. + if (m_calculator != null) + { + if (!m_calculator.QueueRawValue(value)) + { + Utils.Trace("Value received out of order: {1}, ServerHandle={0}", m_id, value.SourceTimestamp.ToLocalTime().ToString("HH:mm:ss.fff")); + } + + DataValue processedValue = m_calculator.GetProcessedValue(false); + + while (processedValue != null) + { + AddValueToQueue(processedValue, null); + processedValue = m_calculator.GetProcessedValue(false); + } + + return; + } + + // apply filter to incoming item. + if (!m_alwaysReportUpdates && !bypassFilter) + { + if (!ApplyFilter(value, error)) + { + ServerUtils.ReportFilteredValue(m_nodeId, m_id, value); + return; + } + } + + ServerUtils.ReportQueuedValue(m_nodeId, m_id, value); + + // add the value to the queue. + AddValueToQueue(value, error); + } + } + + /// + /// Sets the overflow bit. + /// + private ServiceResult SetOverflowBit( + object value, + ServiceResult error) + { + DataValue dataValue = value as DataValue; + + if (dataValue != null) + { + dataValue.StatusCode = dataValue.StatusCode.SetOverflow(true); + } + + if (error != null) + { + error = new ServiceResult( + error.StatusCode.SetOverflow(true), + error.SymbolicId, + error.NamespaceUri, + error.LocalizedText, + error.AdditionalInfo, + error.InnerResult); + } + + return error; + } + + /// + /// Adds a value to the queue. + /// + private void AddValueToQueue(DataValue value, ServiceResult error) + { + if (m_queueSize > 1) + { + m_queue.QueueValue(value, error); + } + + if (m_lastValue != null) + { + m_readyToTrigger = true; + } + + // save last value received. + m_lastValue = value; + m_lastError = error; + m_readyToPublish = true; + + Utils.Trace("QUEUE VALUE[{0}]: Value={1} CODE={2}<{2:X8}> OVERFLOW={3}", m_id, m_lastValue.WrappedValue, m_lastValue.StatusCode.Code, m_lastValue.StatusCode.Overflow); + } + + /// + /// Whether the item is monitoring all events produced by the server. + /// + public bool MonitoringAllEvents => this.m_nodeId == ObjectIds.Server; + + /// + /// Fetches the event fields from the event. + /// + private EventFieldList GetEventFields(FilterContext context, EventFilter filter, IFilterTarget instance) + { + // fetch the event fields. + EventFieldList fields = new EventFieldList(); + + fields.ClientHandle = m_clientHandle; + fields.Handle = instance; + + foreach (SimpleAttributeOperand clause in filter.SelectClauses) + { + // get the value of the attribute (apply localization). + object value = instance.GetAttributeValue( + context, + clause.TypeDefinitionId, + clause.BrowsePath, + clause.AttributeId, + clause.ParsedIndexRange); + + // add the value to the list of event fields. + if (value != null) + { + // translate any localized text. + LocalizedText text = value as LocalizedText; + + if (text != null) + { + value = m_server.ResourceManager.Translate(m_session.PreferredLocales, text); + } + + // add value. + fields.EventFields.Add(new Variant(value)); + } + + // add a dummy entry for missing values. + else + { + fields.EventFields.Add(Variant.Null); + } + } + + return fields; + } + + /// + /// Adds an event to the queue. + /// + public virtual void QueueEvent(IFilterTarget instance) + { + QueueEvent(instance, false); + } + + /// + /// Adds an event to the queue. + /// + public virtual void QueueEvent(IFilterTarget instance, bool bypassFilter) + { + if (instance == null) throw new ArgumentNullException(nameof(instance)); + + lock (m_lock) + { + // this method should only be called for objects or views. + if ((m_typeMask & MonitoredItemTypeMask.Events) == 0) + { + throw new ServiceResultException(StatusCodes.BadInternalError); + } + + // can't do anything if queuing is disabled. + if (m_events == null) + { + return; + } + + // check for duplicate instances being reported via multiple paths. + for (int ii = 0; ii < m_events.Count; ii++) + { + EventFieldList processedEvent = m_events[ii] as EventFieldList; + + if (processedEvent != null) + { + if (Object.ReferenceEquals(instance, processedEvent.Handle)) + { + return; + } + } + } + + // check for space in the queue. + if (m_events.Count >= m_queueSize) + { + if (!m_discardOldest) + { + m_overflow = true; + return; + } + } + + // construct the context to use for the event filter. + FilterContext context = new FilterContext(m_server.NamespaceUris, m_server.TypeTree, m_session.PreferredLocales); + + // event filter must be specified. + EventFilter filter = m_filterToUse as EventFilter; + + if (filter == null) + { + throw new ServiceResultException(StatusCodes.BadInternalError); + } + + // apply filter. + if (!bypassFilter) + { + if (!filter.WhereClause.Evaluate(context, instance)) + { + return; + } + } + + // fetch the event fields. + EventFieldList fields = GetEventFields(context, filter, instance); + QueueEvent(fields); + } + } + + /// + /// Adds an event to the queue. + /// + public virtual void QueueEvent(EventFieldList fields) + { + lock (m_lock) + { + // make space in the queue. + if (m_events.Count >= m_queueSize) + { + m_overflow = true; + + if (m_discardOldest) + { + m_events.RemoveAt(0); + } + } + + // queue the event. + m_events.Add(fields); + m_readyToPublish = true; + m_readyToTrigger = true; + } + } + + /// + /// Whether the item has notifications that are ready to publish. + /// + [Obsolete("Not used - Use IsReadyToPublish")] + public virtual bool ReadyToPublish + { + get + { + lock (m_lock) + { + // only publish if reporting. + if (m_monitoringMode != MonitoringMode.Reporting) + { + return false; + } + + return m_readyToPublish; + } + } + } + + /// + /// Used to check whether the item is ready to sample. + /// + public bool SamplingIntervalExpired() + { + lock (m_lock) + { + return TimeToNextSample <= 0; + } + } + + /// + /// Increments the sample time to the next interval. + /// + private void IncrementSampleTime() + { + // update next sample time. + long now = HiResClock.TickCount64; + long samplingInterval = (long)m_samplingInterval; + + if (m_nextSamplingTime > 0) + { + long delta = now - m_nextSamplingTime; + + if (samplingInterval > 0 && delta >= 0) + { + m_nextSamplingTime += ((delta / samplingInterval) + 1) * samplingInterval; + } + } + + // set sampling time based on current time. + else + { + m_nextSamplingTime = now + samplingInterval; + } + } + + /// + /// Publishes all available event notifications. + /// + public virtual bool Publish(OperationContext context, Queue notifications) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (notifications == null) throw new ArgumentNullException(nameof(notifications)); + + lock (m_lock) + { + // check if the item reports events. + if ((m_typeMask & MonitoredItemTypeMask.Events) == 0) + { + return false; + } + + // only publish if reporting. + if (!IsReadyToPublish) + { + return false; + } + + // go to the next sampling interval. + IncrementSampleTime(); + + // publish events. + if (m_events != null) + { + Utils.Trace("MONITORED ITEM: Publish(QueueSize={0})", notifications.Count); + + EventFieldList overflowEvent = null; + + if (m_overflow) + { + // construct event. + EventQueueOverflowEventState e = new EventQueueOverflowEventState(null); + + TranslationInfo message = new TranslationInfo( + "EventQueueOverflowEventState", + "en-US", + "Events lost due to queue overflow."); + + ISystemContext systemContext = new ServerSystemContext(m_server, context); + + e.Initialize( + systemContext, + null, + EventSeverity.Low, + new LocalizedText(message)); + + e.SetChildValue(systemContext, BrowseNames.SourceNode, ObjectIds.Server, false); + e.SetChildValue(systemContext, BrowseNames.SourceName, "Internal", false); + + // fetch the event fields. + overflowEvent = GetEventFields( + new FilterContext(m_server.NamespaceUris, m_server.TypeTree, m_session.PreferredLocales), + m_filterToUse as EventFilter, + e); + } + + // place event at the beginning of the queue. + if (overflowEvent != null && m_discardOldest) + { + notifications.Enqueue(overflowEvent); + } + + for (int ii = 0; ii < m_events.Count; ii++) + { + EventFieldList fields = (EventFieldList)m_events[ii]; + + // apply any diagnostic masks. + for (int jj = 0; jj < fields.EventFields.Count; jj++) + { + object value = fields.EventFields[jj].Value; + + StatusResult result = value as StatusResult; + + if (result != null) + { + result.ApplyDiagnosticMasks(context.DiagnosticsMask, context.StringTable); + } + } + + notifications.Enqueue((EventFieldList)m_events[ii]); + } + + m_events.Clear(); + + // place event at the end of the queue. + if (overflowEvent != null && !m_discardOldest) + { + notifications.Enqueue(overflowEvent); + } + + Utils.Trace("MONITORED ITEM: Publish(QueueSize={0})", notifications.Count); + } + + // reset state variables. + m_overflow = false; + m_readyToPublish = false; + m_readyToTrigger = false; + m_triggered = false; + + return false; + } + } + + /// + /// Publishes all available data change notifications. + /// + public virtual bool Publish( + OperationContext context, + Queue notifications, + Queue diagnostics) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (notifications == null) throw new ArgumentNullException(nameof(notifications)); + if (diagnostics == null) throw new ArgumentNullException(nameof(diagnostics)); + + lock (m_lock) + { + // check if the item reports data changes. + if ((m_typeMask & MonitoredItemTypeMask.DataChange) == 0) + { + return false; + } + + // only publish if reporting. + if (!IsReadyToPublish) + { + return false; + } + + // pull any unprocessed data. + if (m_calculator != null) + { + if (m_calculator.HasEndTimePassed(DateTime.UtcNow)) + { + DataValue processedValue = m_calculator.GetProcessedValue(false); + + while (processedValue != null) + { + AddValueToQueue(processedValue, null); + } + + processedValue = m_calculator.GetProcessedValue(true); + AddValueToQueue(processedValue, null); + } + } + + // go to the next sampling interval. + IncrementSampleTime(); + + // check if queueing enabled. + if (m_queue != null) + { + DataValue value = null; + ServiceResult error = null; + + while (m_queue.Publish(out value, out error)) + { + Publish(context, notifications, diagnostics, value, error); + } + } + + // publish last value if no queuing. + else + { + Utils.Trace("DEQUEUE VALUE: Value={0} CODE={1}<{1:X8}> OVERFLOW={2}", m_lastValue.WrappedValue, m_lastValue.StatusCode.Code, m_lastValue.StatusCode.Overflow); + Publish(context, notifications, diagnostics, m_lastValue, m_lastError); + } + + // reset state variables. + m_overflow = false; + m_readyToPublish = false; + m_readyToTrigger = false; + m_triggered = false; + + return false; + } + } + + /// + /// Publishes a single data change notifications. + /// + protected virtual bool Publish( + OperationContext context, + Queue notifications, + Queue diagnostics, + DataValue value, + ServiceResult error) + { + // set semantics changed bit. + if (m_semanticsChanged) + { + if (value != null) + { + value.StatusCode = value.StatusCode.SetSemanticsChanged(true); + } + + if (error != null) + { + error = new ServiceResult( + error.StatusCode.SetSemanticsChanged(true), + error.SymbolicId, + error.NamespaceUri, + error.LocalizedText, + error.AdditionalInfo, + error.InnerResult); + } + + m_semanticsChanged = false; + } + + // set structure changed bit. + if (m_structureChanged) + { + if (value != null) + { + value.StatusCode = value.StatusCode.SetStructureChanged(true); + } + + if (error != null) + { + error = new ServiceResult( + error.StatusCode.SetStructureChanged(true), + error.SymbolicId, + error.NamespaceUri, + error.LocalizedText, + error.AdditionalInfo, + error.InnerResult); + } + + m_structureChanged = false; + } + + // copy data value. + MonitoredItemNotification item = new MonitoredItemNotification(); + + item.ClientHandle = m_clientHandle; + item.Value = value; + + // apply timestamp filter. + if (m_timestampsToReturn != TimestampsToReturn.Server && m_timestampsToReturn != TimestampsToReturn.Both) + { + item.Value.ServerTimestamp = DateTime.MinValue; + } + + if (m_timestampsToReturn != TimestampsToReturn.Source && m_timestampsToReturn != TimestampsToReturn.Both) + { + item.Value.SourceTimestamp = DateTime.MinValue; + } + + ServerUtils.ReportPublishValue(m_nodeId, m_id, item.Value); + notifications.Enqueue(item); + + // update diagnostic info. + DiagnosticInfo diagnosticInfo = null; + + if ((m_diagnosticsMasks & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + } + + diagnostics.Enqueue(diagnosticInfo); + + return false; + } + + /// + /// The object to call when item is ready to publish. + /// + public ISubscription SubscriptionCallback + { + get + { + lock (m_lock) + { + return m_subscription; + } + } + + set + { + lock (m_lock) + { + m_subscription = value; + } + } + } + + /// + /// The number of milliseconds until the next sample. + /// + public int TimeToNextSample + { + get + { + lock (m_lock) + { + if (m_monitoringMode == MonitoringMode.Disabled) + { + return Int32.MaxValue; + } + + // node manager responsible for ensuring correct sampling. + if (m_sourceSamplingInterval > 0) + { + return 0; + } + + var now = HiResClock.TickCount64; + + if (m_nextSamplingTime <= now) + { + return 0; + } + + return (int)(m_nextSamplingTime - now); + } + } + } + #endregion + + #region Private Methods + /// + /// Applies the filter to value to determine if the new value should be kept. + /// + protected virtual bool ApplyFilter(DataValue value, ServiceResult error) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + bool changed = ValueChanged( + value, + error, + m_lastValue, + m_lastError, + m_filterToUse as DataChangeFilter, + m_range); + + return changed; + } + + /// + /// Applies the filter to value to determine if the new value should be kept. + /// + public static bool ValueChanged( + DataValue value, + ServiceResult error, + DataValue lastValue, + ServiceResult lastError, + DataChangeFilter filter, + double range) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + // select default data change filters. + double deadband = 0.0; + DeadbandType deadbandType = DeadbandType.None; + DataChangeTrigger trigger = DataChangeTrigger.StatusValue; + + // apply filter. + if (filter != null) + { + trigger = filter.Trigger; + deadbandType = (DeadbandType)(int)filter.DeadbandType; + deadband = filter.DeadbandValue; + + // when deadband is used and the trigger is StatusValueTimestamp, then it should behave as if trigger is StatusValue. + if ((deadbandType != DeadbandType.None) && (trigger == DataChangeTrigger.StatusValueTimestamp)) + { + trigger = DataChangeTrigger.StatusValue; + } + } + + // get the current status. + uint status = StatusCodes.Good; + + if (error != null) + { + status = error.StatusCode.Code; + } + else if (lastValue != null) + { + status = value.StatusCode.Code; + } + + // get the last status. + uint lastStatus = StatusCodes.Good; + + if (lastError != null) + { + lastStatus = lastError.StatusCode.Code; + } + else if (lastValue != null) + { + lastStatus = lastValue.StatusCode.Code; + } + + // value changed if any status change occurrs. + if (status != lastStatus) + { + return true; + } + + // value changed if only one is null. + if (value == null || lastValue == null) + { + return lastValue != null || value != null; + } + + // check if timestamp has changed. + if (trigger == DataChangeTrigger.StatusValueTimestamp) + { + if (lastValue.SourceTimestamp != value.SourceTimestamp) + { + return true; + } + } + + // check if value changes are ignored. + if (trigger == DataChangeTrigger.Status) + { + return false; + } + + // check if reference to same object. + if (!Equals(lastValue.Value, value.Value, deadbandType, deadband, range)) + { + return true; + } + + // must be equal. + return false; + } + + /// + /// Checks if the two values are equal. + /// + protected static bool Equals(object value1, object value2, DeadbandType deadbandType, double deadband, double range) + { + // check if reference to same object. + if (Object.ReferenceEquals(value1, value2)) + { + return true; + } + + // check for invalid values. + if (value1 == null || value2 == null) + { + return value1 == value2; + } + + // check for type change. + if (value1.GetType() != value2.GetType()) + { + return false; + } + + // special case NaN is always not equal + if (value1.Equals(float.NaN) || + value1.Equals(double.NaN) || + value2.Equals(float.NaN) || + value2.Equals(double.NaN)) + { + return false; + } + + // check if values are equal. + if (value1.Equals(value2)) + { + return true; + } + + // check for arrays. + Array array1 = value1 as Array; + Array array2 = value2 as Array; + + if (array1 == null || array2 == null) + { + + XmlElement xmlElement1 = value1 as XmlElement; + XmlElement xmlElement2 = value2 as XmlElement; + + if (xmlElement1 != null && xmlElement2 != null) + { + return xmlElement1.OuterXml.Equals(xmlElement2.OuterXml); + } + + // nothing more to do if no deadband. + if (deadbandType == DeadbandType.None) + { + return false; + } + + // check deadband. + return !ExceedsDeadband(value1, value2, deadbandType, deadband, range); + } + + // compare lengths. + if (array1.Length != array2.Length) + { + return false; + } + + // compare each element. + bool isVariant = array1.GetType().GetElementType() == typeof(Variant); + + for (int ii = 0; ii < array1.Length; ii++) + { + object element1 = array1.GetValue(ii); + object element2 = array2.GetValue(ii); + + if (isVariant) + { + element1 = ((Variant)element1).Value; + element2 = ((Variant)element2).Value; + } + + if (!Equals(element1, element2, deadbandType, deadband, range)) + { + return false; + } + } + + // must be equal. + return true; + } + + /// + /// Returns true if the deadband was exceeded. + /// + protected static bool ExceedsDeadband(object value1, object value2, DeadbandType deadbandType, double deadband, double range) + { + // cannot convert doubles safely to decimals. + if (value1 is double) + { + return ExceedsDeadband((double)value1, (double)value2, deadbandType, deadband, range); + } + + try + { + decimal decimal1 = Convert.ToDecimal(value1, CultureInfo.InvariantCulture); + decimal decimal2 = Convert.ToDecimal(value2, CultureInfo.InvariantCulture); + decimal baseline = 1; + + if (deadbandType == DeadbandType.Percent) + { + baseline = ((decimal)range) / 100; + } + + if (baseline > 0) + { + if (Math.Abs((decimal1 - decimal2) / baseline) <= (decimal)deadband) + { + return false; + } + } + } + catch + { + // treat all conversion errors as evidence that the deadband was exceeded. + } + + return true; + } + + /// + /// Returns true if the deadband was exceeded. + /// + private static bool ExceedsDeadband(double value1, double value2, DeadbandType deadbandType, double deadband, double range) + { + double baseline = 1; + + if (deadbandType == DeadbandType.Percent) + { + baseline = range / 100; + } + + if (baseline > 0) + { + if (Math.Abs((value1 - value2) / baseline) <= deadband) + { + return false; + } + } + + return true; + } + + /// + /// Clears and re-initializes the queue if the monitoring parameters changed. + /// + protected void InitializeQueue() + { + switch (m_monitoringMode) + { + default: + case MonitoringMode.Disabled: + { + m_queue = null; + m_events = null; + break; + } + + case MonitoringMode.Reporting: + case MonitoringMode.Sampling: + { + // check if queuing is disabled. + if (m_queueSize == 0) + { + if (m_typeMask == MonitoredItemTypeMask.DataChange) + { + m_queueSize = 1; + } + + if ((m_typeMask & MonitoredItemTypeMask.Events) != 0) + { + m_queueSize = 1000; + } + } + + // create data queue. + if (m_typeMask == MonitoredItemTypeMask.DataChange) + { + if (m_queueSize <= 1) + { + m_queue = null; + break; // queueing is disabled + } + + bool queueLastValue = false; + + if (m_queue == null) + { + m_queue = new MonitoredItemQueue(m_id, QueueOverflowHandler); + queueLastValue = true; + } + + m_queue.SetQueueSize(m_queueSize, m_discardOldest, m_diagnosticsMasks); + m_queue.SetSamplingInterval(m_samplingInterval); + + if (queueLastValue && m_lastValue != null) + { + m_queue.QueueValue(m_lastValue, m_lastError); + } + } + else // create event queue. + { + if (m_events == null) + { + m_events = new List(); + } + + // check if existing queue entries must be discarded; + if (m_events.Count > m_queueSize) + { + int queueSize = (int)m_queueSize; + + if (m_discardOldest) + { + m_events.RemoveRange(0, m_events.Count - queueSize); + } + else + { + m_events.RemoveRange(queueSize, m_events.Count - queueSize); + } + } + } + + break; + } + } + } + + /// + /// Update the overflow count. + /// + private void QueueOverflowHandler() + { + m_subscription?.QueueOverflowHandler(); + } + #endregion + + #region Private Members + private object m_lock = new object(); + private IServerInternal m_server; + private INodeManager m_nodeManager; + private object m_managerHandle; + private uint m_subscriptionId; + private uint m_id; + private int m_typeMask; + private Session m_session; + private NodeId m_nodeId; + private uint m_attributeId; + private string m_indexRange; + private NumericRange m_parsedIndexRange; + private QualifiedName m_encoding; + private DiagnosticsMasks m_diagnosticsMasks; + private TimestampsToReturn m_timestampsToReturn; + private uint m_clientHandle; + private MonitoringMode m_monitoringMode; + private MonitoringFilter m_originalFilter; + private MonitoringFilter m_filterToUse; + private double m_range; + private double m_samplingInterval; + private uint m_queueSize; + private bool m_discardOldest; + private int m_sourceSamplingInterval; + private bool m_alwaysReportUpdates; + + private DataValue m_lastValue; + private ServiceResult m_lastError; + private long m_nextSamplingTime; + private List m_events; + private MonitoredItemQueue m_queue; + private bool m_overflow; + private bool m_readyToPublish; + private bool m_readyToTrigger; + private bool m_semanticsChanged; + private bool m_structureChanged; + private ISubscription m_subscription; + private ServiceResult m_samplingError; + private IAggregateCalculator m_calculator; + private bool m_triggered; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/PublishingState.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/PublishingState.cs new file mode 100644 index 00000000..083231b4 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/PublishingState.cs @@ -0,0 +1,63 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; +using System.Diagnostics; +using System.Xml; +using System.Threading; + +namespace Opc.Ua.Server +{ + /// + /// The current publishing state for a subcription. + /// + public enum PublishingState + { + /// + /// The subscription is not ready to publish. + /// + Idle, + + /// + /// The subscription has notifications that are ready to publish. + /// + NotificationsAvailable, + + /// + /// The has already indicated that it is waiting for a publish request. + /// + WaitingForPublish, + + /// + /// The subscription has expired. + /// + Expired + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs new file mode 100644 index 00000000..1da585ba --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs @@ -0,0 +1,876 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; + +namespace Opc.Ua.Server +{ + /// + /// Manages the publish queues for a session. + /// + public class SessionPublishQueue : IDisposable + { + #region Constructors + /// + /// Creates a new queue. + /// + public SessionPublishQueue(IServerInternal server, Session session, int maxPublishRequests) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (session == null) throw new ArgumentNullException(nameof(session)); + + m_server = server; + m_session = session; + m_publishEvent = new ManualResetEvent(false); + m_queuedRequests = new LinkedList(); + m_queuedSubscriptions = new List(); + m_maxPublishRequests = maxPublishRequests; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + m_publishEvent.Set(); + + while (m_queuedRequests.Count > 0) + { + QueuedRequest request = m_queuedRequests.First.Value; + m_queuedRequests.RemoveFirst(); + + try + { + request.Error = StatusCodes.BadServerHalted; + request.Dispose(); + } + catch (Exception) + { + // ignore errors. + } + } + + m_queuedSubscriptions.Clear(); + m_publishEvent.Dispose(); + } + } + } + #endregion + + #region Public Methods + /// + /// Clears the queues because the session is closing. + /// + /// The list of subscriptions in the queue. + public IList Close() + { + lock (m_lock) + { + // TraceState("SESSION CLOSED"); + + // wake up any waiting publish requests. + m_publishEvent.Set(); + + while (m_queuedRequests.Count > 0) + { + QueuedRequest request = m_queuedRequests.First.Value; + m_queuedRequests.RemoveFirst(); + request.Error = StatusCodes.BadSessionClosed; + request.Set(); + } + + // tell the subscriptions that the session is closed. + Subscription[] subscriptions = new Subscription[m_queuedSubscriptions.Count]; + + for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) + { + subscriptions[ii] = m_queuedSubscriptions[ii].Subscription; + subscriptions[ii].SessionClosed(); + } + + // clear the queue. + m_queuedSubscriptions.Clear(); + + return subscriptions; + } + } + + /// + /// Adds a subscription from the publish queue. + /// + public void Add(Subscription subscription) + { + if (subscription == null) throw new ArgumentNullException(nameof(subscription)); + + lock (m_lock) + { + QueuedSubscription queuedSubscription = new QueuedSubscription(); + + queuedSubscription.ReadyToPublish = false; + queuedSubscription.Timestamp = DateTime.UtcNow; + queuedSubscription.Subscription = subscription; + + m_queuedSubscriptions.Add(queuedSubscription); + + // TraceState("SUBSCRIPTION QUEUED"); + } + } + + /// + /// Removes a subscription from the publish queue. + /// + public void Remove(Subscription subscription) + { + if (subscription == null) throw new ArgumentNullException(nameof(subscription)); + + lock (m_lock) + { + // remove the subscription from the queue. + for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) + { + if (Object.ReferenceEquals(m_queuedSubscriptions[ii].Subscription, subscription)) + { + m_queuedSubscriptions.RemoveAt(ii); + break; + } + } + + // remove any outstanding publishes. + if (m_queuedSubscriptions.Count == 0) + { + while (m_queuedRequests.Count > 0) + { + QueuedRequest request = m_queuedRequests.First.Value; + request.Error = StatusCodes.BadNoSubscription; + request.Set(); + m_queuedRequests.RemoveFirst(); + } + } + + // TraceState("SUBSCRIPTION REMOVED"); + } + } + + /// + /// Processes acknowledgements for previously published messages. + /// + public void Acknowledge( + OperationContext context, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + out StatusCodeCollection acknowledgeResults, + out DiagnosticInfoCollection acknowledgeDiagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (subscriptionAcknowledgements == null) throw new ArgumentNullException(nameof(subscriptionAcknowledgements)); + + lock (m_lock) + { + bool diagnosticsExist = false; + acknowledgeResults = new StatusCodeCollection(subscriptionAcknowledgements.Count); + acknowledgeDiagnosticInfos = new DiagnosticInfoCollection(subscriptionAcknowledgements.Count); + + for (int ii = 0; ii < subscriptionAcknowledgements.Count; ii++) + { + SubscriptionAcknowledgement acknowledgement = subscriptionAcknowledgements[ii]; + + bool found = false; + + for (int jj = 0; jj < m_queuedSubscriptions.Count; jj++) + { + QueuedSubscription subscription = m_queuedSubscriptions[jj]; + + if (subscription.Subscription.Id == acknowledgement.SubscriptionId) + { + ServiceResult result = subscription.Subscription.Acknowledge(context, acknowledgement.SequenceNumber); + + if (ServiceResult.IsGood(result)) + { + acknowledgeResults.Add(StatusCodes.Good); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + acknowledgeDiagnosticInfos.Add(null); + } + } + else + { + acknowledgeResults.Add(result.Code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, result); + acknowledgeDiagnosticInfos.Add(diagnosticInfo); + diagnosticsExist = true; + } + } + + found = true; + break; + } + } + + if (!found) + { + ServiceResult result = new ServiceResult(StatusCodes.BadSubscriptionIdInvalid); + acknowledgeResults.Add(result.Code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, result); + acknowledgeDiagnosticInfos.Add(diagnosticInfo); + diagnosticsExist = true; + } + } + } + + if (!diagnosticsExist) + { + acknowledgeDiagnosticInfos.Clear(); + } + } + } + + /// + /// Returns a subscription that is ready to publish. + /// + public Subscription Publish(uint clientHandle, DateTime deadline, bool requeue, AsyncPublishOperation operation) + { + QueuedRequest request = null; + + // DateTime queueTime = DateTime.UtcNow; + // DateTime dequeueTime = DateTime.UtcNow; + + lock (m_lock) + { + if (m_queuedSubscriptions.Count == 0) + { + // TraceState("PUBLISH ERROR (BadNoSubscription)"); + throw new ServiceResultException(StatusCodes.BadNoSubscription); + } + + // find the waiting subscription with the highest priority. + List subscriptions = new List(); + + for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) + { + QueuedSubscription subscription = m_queuedSubscriptions[ii]; + + if (subscription.ReadyToPublish && !subscription.Publishing) + { + subscriptions.Add(subscription); + } + } + + // find waiting the subscription that has been waiting the longest. + if (subscriptions.Count > 0) + { + byte maxPriority = 0; + DateTime earliestTimestamp = DateTime.MaxValue; + QueuedSubscription subscriptionToPublish = null; + + for (int ii = 0; ii < subscriptions.Count; ii++) + { + QueuedSubscription subscription = subscriptions[ii]; + byte priority = subscription.Subscription.Priority; + if (priority > maxPriority) + { + maxPriority = priority; + earliestTimestamp = DateTime.MaxValue; + } + + if (priority >= maxPriority && earliestTimestamp > subscription.Timestamp) + { + earliestTimestamp = subscription.Timestamp; + subscriptionToPublish = subscription; + } + } + + // reset subscriptions flag. + m_subscriptionsWaiting = false; + + for (int jj = 0; jj < m_queuedSubscriptions.Count; jj++) + { + if (m_queuedSubscriptions[jj].ReadyToPublish) + { + m_subscriptionsWaiting = true; + break; + } + } + + // TraceState("REQUEST #{0} ASSIGNED TO WAITING SUBSCRIPTION", clientHandle); + subscriptionToPublish.Publishing = true; + return subscriptionToPublish.Subscription; + } + + // queue request because there is nothing waiting. + if (subscriptions.Count == 0) + { + LinkedListNode node = m_queuedRequests.First; + + while (node != null) + { + LinkedListNode next = node.Next; + QueuedRequest queuedRequest = node.Value; + StatusCode requestStatus = StatusCodes.Good; + + // check if expired. + if (queuedRequest.Deadline < DateTime.MaxValue && queuedRequest.Deadline.AddMilliseconds(500) < DateTime.UtcNow) + { + requestStatus = StatusCodes.BadTimeout; + } + + // check secure channel. + else if (!m_session.IsSecureChannelValid(queuedRequest.SecureChannelId)) + { + requestStatus = StatusCodes.BadSecureChannelIdInvalid; + } + + // remove bad requests. + if (StatusCode.IsBad(requestStatus)) + { + queuedRequest.Error = requestStatus; + queuedRequest.Set(); + m_queuedRequests.Remove(node); + } + + node = next; + } + + // clear excess requests - keep the newest ones. + while (m_maxPublishRequests > 0 && m_queuedRequests.Count >= m_maxPublishRequests) + { + request = m_queuedRequests.First.Value; + request.Error = StatusCodes.BadTooManyPublishRequests; + request.Set(); + m_queuedRequests.RemoveFirst(); + } + + request = new QueuedRequest(); + + request.SecureChannelId = SecureChannelContext.Current.SecureChannelId; + request.Deadline = deadline; + request.Subscription = null; + request.Error = StatusCodes.Good; + + if (operation == null) + { + request.Event = new ManualResetEvent(false); + } + else + { + request.Operation = operation; + } + + if (requeue) + { + m_queuedRequests.AddFirst(request); + // TraceState("REQUEST #{0} RE-QUEUED", clientHandle); + } + else + { + m_queuedRequests.AddLast(request); + // TraceState("REQUEST #{0} QUEUED", clientHandle); + } + } + } + + // check for non-blocking operation. + if (operation != null) + { + // TraceState("PUBLISH: #{0} Async Request Queued.", clientHandle); + return null; + } + + // wait for subscription. + ServiceResult error = request.Wait(Timeout.Infinite); + + // check for error. + if (ServiceResult.IsGood(error)) + { + if (StatusCode.IsBad(request.Error)) + { + error = request.Error; + } + } + + // must reassign subscription on error. + if (ServiceResult.IsBad(request.Error)) + { + if (request.Subscription != null) + { + lock (m_lock) + { + request.Subscription.Publishing = false; + AssignSubscriptionToRequest(request.Subscription); + } + } + + // TraceState("REQUEST #{0} PUBLISH ERROR ({1})", clientHandle, error.StatusCode); + throw new ServiceResultException(request.Error); + } + + // must be shuting down if this is null but no error. + if (request.Subscription == null) + { + throw new ServiceResultException(StatusCodes.BadNoSubscription); + } + + // TraceState("REQUEST #{0} ASSIGNED", clientHandle); + // return whatever was assigned. + return request.Subscription.Subscription; + } + + /// + /// Completes the publish. + /// + /// if set to true the request must be requeued. + /// The asynchronous operation. + /// The calldata. + /// + public Subscription CompletePublish( + bool requeue, + AsyncPublishOperation operation, + object calldata) + { + Utils.Trace("PUBLISH: #{0} Completing", operation.RequestHandle, requeue); + + QueuedRequest request = (QueuedRequest)calldata; + + // check if need to requeue. + lock (m_lock) + { + if (requeue) + { + request.Subscription = null; + request.Error = StatusCodes.Good; + m_queuedRequests.AddFirst(request); + return null; + } + } + + // must reassign subscription on error. + if (ServiceResult.IsBad(request.Error)) + { + Utils.Trace("PUBLISH: #{0} Reassigned ERROR({1})", operation.RequestHandle, request.Error); + + if (request.Subscription != null) + { + lock (m_lock) + { + request.Subscription.Publishing = false; + AssignSubscriptionToRequest(request.Subscription); + } + } + + // TraceState("REQUEST #{0} PUBLISH ERROR ({1})", clientHandle, error.StatusCode); + throw new ServiceResultException(request.Error); + } + + // must be shuting down if this is null but no error. + if (request.Subscription == null) + { + throw new ServiceResultException(StatusCodes.BadNoSubscription); + } + + // return whatever was assigned. + return request.Subscription.Subscription; + } + + /// + /// Adds a subscription back into the queue because it has more notifications to publish. + /// + public void PublishCompleted(Subscription subscription, bool moreNotifications) + { + lock (m_lock) + { + for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) + { + if (Object.ReferenceEquals(m_queuedSubscriptions[ii].Subscription, subscription)) + { + m_queuedSubscriptions[ii].Publishing = false; + + if (moreNotifications) + { + AssignSubscriptionToRequest(m_queuedSubscriptions[ii]); + } + else + { + m_queuedSubscriptions[ii].ReadyToPublish = false; + m_queuedSubscriptions[ii].Timestamp = DateTime.UtcNow; + } + + break; + } + } + } + } + + /// + /// Checks the state of the subscriptions. + /// + public void PublishTimerExpired() + { + List subscriptionsToDelete = new List(); + + lock (m_lock) + { + List liveSubscriptions = new List(m_queuedSubscriptions.Count); + + // check each available subscription. + for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) + { + QueuedSubscription subscription = m_queuedSubscriptions[ii]; + + PublishingState state = subscription.Subscription.PublishTimerExpired(); + + // check for expired subscription. + if (state == PublishingState.Expired) + { + subscriptionsToDelete.Add(subscription.Subscription); + ((SubscriptionManager)m_server.SubscriptionManager).SubscriptionExpired(subscription.Subscription); + continue; + } + + liveSubscriptions.Add(subscription); + + // check if idle. + if (state == PublishingState.Idle) + { + subscription.ReadyToPublish = false; + continue; + } + + // do nothing if subscription has already been flagged as available. + if (subscription.ReadyToPublish) + { + if (subscription.ReadyToPublish && m_queuedRequests.Count == 0) + { + if (!m_subscriptionsWaiting) + { + m_subscriptionsWaiting = true; + // TraceState("SUBSCRIPTIONS WAITING"); + } + } + + continue; + } + + // assign subscription to request if one is available. + if (!subscription.Publishing) + { + AssignSubscriptionToRequest(subscription); + } + } + + // only keep the live subscriptions. + m_queuedSubscriptions = liveSubscriptions; + + // schedule cleanup on a background thread. + SubscriptionManager.CleanupSubscriptions(m_server, subscriptionsToDelete); + } + } + + /// + /// Checks the state of the subscriptions. + /// + private void AssignSubscriptionToRequest(QueuedSubscription subscription) + { + // find a request. + for (LinkedListNode node = m_queuedRequests.First; node != null; node = node.Next) + { + QueuedRequest request = node.Value; + + StatusCode error = StatusCodes.Good; + + // check if expired. + if (request.Deadline < DateTime.MaxValue && request.Deadline.AddMilliseconds(500) < DateTime.UtcNow) + { + error = StatusCodes.BadTimeout; + } + + // check secure channel. + else if (!m_session.IsSecureChannelValid(request.SecureChannelId)) + { + error = StatusCodes.BadSecureChannelIdInvalid; + Utils.Trace("Publish abandoned because the secure channel changed."); + } + + if (StatusCode.IsBad(error)) + { + // remove request. + LinkedListNode next = node.Next; + m_queuedRequests.Remove(node); + node = next; + + // wake up thread with error. + request.Error = error; + request.Set(); + + if (node == null) + { + break; + } + + continue; + } + + // remove request. + m_queuedRequests.Remove(node); + + Utils.Trace("PUBLISH: #000 Assigned To Subscription({0}).", subscription.Subscription.Id); + + request.Error = StatusCodes.Good; + request.Subscription = subscription; + request.Subscription.Publishing = true; + request.Set(); + return; + } + + // mark it as available. + subscription.ReadyToPublish = true; + subscription.Timestamp = DateTime.UtcNow; + } + #endregion + + #region QueuedRequest Class + /// + /// A request queued while waiting for a subscription. + /// + private class QueuedRequest : IDisposable + { + public ManualResetEvent Event; + public AsyncPublishOperation Operation; + public DateTime Deadline; + public StatusCode Error; + public QueuedSubscription Subscription; + public string SecureChannelId; + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + this.Error = StatusCodes.BadServerHalted; + + if (this.Operation != null) + { + this.Operation.Dispose(); + this.Operation = null; + } + + if (this.Event != null) + { + try + { + this.Event.Set(); + this.Event.Dispose(); + } + catch (Exception) + { + // ignore errors. + } + } + } + } + #endregion + + /// + /// Waits for the request to be processed. + /// + public ServiceResult Wait(int timeout) + { + try + { + // do not block for an async operation. + if (Operation != null) + { + return StatusCodes.BadWouldBlock; + } + + if (!Event.WaitOne(timeout)) + { + return StatusCodes.BadTimeout; + } + + return ServiceResult.Good; + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadTimeout, "Unexpected error waiting for subscription."); + } + finally + { + try + { + Event.Dispose(); + } + catch (Exception) + { + // ignore errors on close. + } + } + } + + /// + /// Sets the event that wakes up the publish thread. + /// + public void Set() + { + try + { + if (Operation != null) + { + Operation.CompletePublish(this); + return; + } + + Event.Set(); + } + catch (Exception e) + { + Utils.Trace(e, "Publish request no longer available."); + } + } + } + #endregion + + #region QueuedSubscription Class + /// + /// Stores a subscription that has notifications ready to be sent back to the client. + /// + private class QueuedSubscription + { + public Subscription Subscription; + public DateTime Timestamp; + public bool ReadyToPublish; + public bool Publishing; + } + #endregion + + #region Private Members + /// + /// Dumps the current state of the session queue. + /// + internal void TraceState(string context, params object[] args) + { + if ((Utils.TraceMask & Utils.TraceMasks.Information) == 0) + { + return; + } + + StringBuilder buffer = new StringBuilder(); + + lock (m_lock) + { + buffer.Append("PublishQueue "); + buffer.AppendFormat(context, args); + + buffer.Append(", SessionId="); + + if (m_session != null) + { + buffer.AppendFormat("{0}", m_session.Id); + } + else + { + buffer.AppendFormat(", SessionId={0}", m_session.Id); + } + + buffer.AppendFormat(", SubscriptionCount={0}", m_queuedSubscriptions.Count); + buffer.AppendFormat(", RequestCount={0}", m_queuedRequests.Count); + + int readyToPublish = 0; + + for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) + { + if (m_queuedSubscriptions[ii].ReadyToPublish) + { + readyToPublish++; + } + } + + buffer.AppendFormat(", ReadyToPublishCount={0}", readyToPublish); + + int expiredRequests = 0; + + for (LinkedListNode ii = m_queuedRequests.First; ii != null; ii = ii.Next) + { + if (ii.Value.Deadline < DateTime.UtcNow) + { + expiredRequests++; + } + } + + buffer.AppendFormat(", ExpiredCount={0}", expiredRequests); + } + + Utils.Trace("{0}", buffer.ToString()); + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private Session m_session; + private ManualResetEvent m_publishEvent; + private LinkedList m_queuedRequests; + private List m_queuedSubscriptions; + private int m_maxPublishRequests; + private bool m_subscriptionsWaiting; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/Subscription.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/Subscription.cs new file mode 100644 index 00000000..7f3332d4 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/Subscription.cs @@ -0,0 +1,2182 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Diagnostics; +using System.Xml; +using System.Threading; +using System.Runtime.Serialization; +using System.Text; + +namespace Opc.Ua.Server +{ + /// + /// An interface used by the monitored items to signal the subscription. + /// + public interface ISubscription + { + /// + /// The session that owns the monitored item. + /// + Session Session { get; } + + /// + /// The identifier for the item that is unique within the server. + /// + uint Id { get; } + + /// + /// Called when a monitored item is ready to publish. + /// + void ItemReadyToPublish(IMonitoredItem monitoredItem); + + /// + /// Called when a monitored item is ready to publish. + /// + void ItemNotificationsAvailable(IMonitoredItem monitoredItem); + + /// + /// Called when a value of monitored item is discarded in the monitoring queue. + /// + void QueueOverflowHandler(); + } + + /// + /// Manages a subscription created by a client. + /// + public class Subscription : ISubscription, IDisposable + { + #region Constructors + /// + /// Initializes the object. + /// + public Subscription( + IServerInternal server, + Session session, + uint subscriptionId, + double publishingInterval, + uint maxLifetimeCount, + uint maxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + bool publishingEnabled, + uint maxMessageCount) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (session == null) throw new ArgumentNullException(nameof(session)); + + m_server = server; + m_session = session; + m_id = subscriptionId; + m_publishingInterval = publishingInterval; + m_maxLifetimeCount = maxLifetimeCount; + m_maxKeepAliveCount = maxKeepAliveCount; + m_maxNotificationsPerPublish = maxNotificationsPerPublish; + m_publishingEnabled = publishingEnabled; + m_priority = priority; + m_publishTimerExpiry = HiResClock.TickCount64 + (long)publishingInterval; + m_keepAliveCounter = maxKeepAliveCount; + m_lifetimeCounter = 0; + m_waitingForPublish = false; + m_maxMessageCount = maxMessageCount; + m_sentMessages = new List(); + + m_monitoredItems = new Dictionary>(); + m_itemsToCheck = new LinkedList(); + m_itemsToPublish = new LinkedList(); + m_itemsToTrigger = new Dictionary>(); + + // m_itemsReadyToPublish = new Queue(); + // m_itemsNotificationsAvailable = new LinkedList(); + m_sequenceNumber = 1; + + // initialize diagnostics. + m_diagnostics = new SubscriptionDiagnosticsDataType(); + + m_diagnostics.SessionId = m_session.Id; + m_diagnostics.SubscriptionId = m_id; + m_diagnostics.Priority = priority; + m_diagnostics.PublishingInterval = publishingInterval; + m_diagnostics.MaxKeepAliveCount = maxKeepAliveCount; + m_diagnostics.MaxLifetimeCount = maxLifetimeCount; + m_diagnostics.MaxNotificationsPerPublish = maxNotificationsPerPublish; + m_diagnostics.PublishingEnabled = publishingEnabled; + m_diagnostics.ModifyCount = 0; + m_diagnostics.EnableCount = 0; + m_diagnostics.DisableCount = 0; + m_diagnostics.RepublishMessageRequestCount = 0; + m_diagnostics.RepublishMessageCount = 0; + m_diagnostics.TransferRequestCount = 0; + m_diagnostics.TransferredToSameClientCount = 0; + m_diagnostics.TransferredToAltClientCount = 0; + m_diagnostics.PublishRequestCount = 0; + m_diagnostics.DataChangeNotificationsCount = 0; + m_diagnostics.EventNotificationsCount = 0; + m_diagnostics.NotificationsCount = 0; + m_diagnostics.LatePublishRequestCount = 0; + m_diagnostics.CurrentKeepAliveCount = 0; + m_diagnostics.CurrentLifetimeCount = 0; + m_diagnostics.UnacknowledgedMessageCount = 0; + m_diagnostics.DiscardedMessageCount = 0; + m_diagnostics.MonitoredItemCount = 0; + m_diagnostics.DisabledMonitoredItemCount = 0; + m_diagnostics.MonitoringQueueOverflowCount = 0; + m_diagnostics.NextSequenceNumber = (uint)m_sequenceNumber; + + ServerSystemContext systemContext = m_server.DefaultSystemContext.Copy(session); + + m_diagnosticsId = server.DiagnosticsNodeManager.CreateSubscriptionDiagnostics( + systemContext, + m_diagnostics, + OnUpdateDiagnostics); + + // TraceState("CREATED"); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + m_monitoredItems.Clear(); + m_sentMessages.Clear(); + m_itemsToCheck.Clear(); + m_itemsToPublish.Clear(); + } + } + } + #endregion + + #region ISubscription Members + /// + /// The session that owns the monitored item. + /// + public Session Session + { + get { return m_session; } + } + + /// + /// The unique identifier assigned to the subscription. + /// + public uint Id + { + get { return m_id; } + } + + /// + /// Queues an item that is ready to publish. + /// + public void ItemReadyToPublish(IMonitoredItem monitoredItem) + { + /* + lock (m_itemsReadyToPublish) + { + m_itemsReadyToPublish.Enqueue(monitoredItem); + } + */ + } + + /// + /// Tells the subscription that notifications are available but the item is not ready to publish. + /// + public void ItemNotificationsAvailable(IMonitoredItem monitoredItem) + { + /* + lock (m_itemsReadyToPublish) + { + m_itemsNotificationsAvailable.AddLast(monitoredItem); + } + */ + } + #endregion + + #region Public Interface + /// + /// The identifier for the session that owns the subscription. + /// + public NodeId SessionId + { + get + { + lock (m_lock) + { + if (m_session == null) + { + return null; + } + + return m_session.Id; + } + } + } + + /// + /// Gets the lock that must be acquired before accessing the contents of the Diagnostics property. + /// + public object DiagnosticsLock + { + get + { + return m_diagnostics; + } + } + + /// + /// Gets the lock that must be acquired before updating the contents of the Diagnostics property. + /// + public object DiagnosticsWriteLock + { + get + { + // mark diagnostic nodes dirty + if (m_server != null && m_server.DiagnosticsNodeManager != null) + { + m_server.DiagnosticsNodeManager.ForceDiagnosticsScan(); + } + return DiagnosticsLock; + } + } + + /// + /// Gets the current diagnostics for the subscription. + /// + public SubscriptionDiagnosticsDataType Diagnostics + { + get + { + return m_diagnostics; + } + } + + /// + /// The publishing rate for the subscription. + /// + public double PublishingInterval + { + get + { + lock (m_lock) + { + return m_publishingInterval; + } + } + } + + /// + /// The number of monitored items. + /// + public int MonitoredItemCount + { + get + { + lock (m_lock) + { + return m_monitoredItems.Count; + } + } + } + + /// + /// The priority assigned to the subscription. + /// + public byte Priority + { + get + { + return m_priority; + } + } + + /// + /// Deletes the subscription. + /// + public void Delete(OperationContext context) + { + // delete the diagnostics. + if (m_diagnosticsId != null && !m_diagnosticsId.IsNullNodeId) + { + ServerSystemContext systemContext = m_server.DefaultSystemContext.Copy(m_session); + m_server.DiagnosticsNodeManager.DeleteSubscriptionDiagnostics(systemContext, m_diagnosticsId); + } + + lock (m_lock) + { + try + { + // TraceState("DELETED"); + + // the context may be null if the server is cleaning up expired subscriptions. + // in this case we create a context with a dummy request and use the current session. + if (context == null) + { + RequestHeader requestHeader = new RequestHeader(); + requestHeader.ReturnDiagnostics = (uint)(int)DiagnosticsMasks.OperationSymbolicIdAndText; + context = new OperationContext(requestHeader, RequestType.Unknown); + } + + StatusCodeCollection results; + DiagnosticInfoCollection diagnosticInfos; + + DeleteMonitoredItems( + context, + new UInt32Collection(m_monitoredItems.Keys), + true, + out results, + out diagnosticInfos); + } + catch (Exception e) + { + Utils.Trace(e, "Delete items for subscription failed."); + } + } + } + + /// + /// Checks if the subscription is ready to publish. + /// + public PublishingState PublishTimerExpired() + { + lock (m_lock) + { + long currentTime = HiResClock.TickCount64; + + // check if publish interval has elapsed. + if (m_publishTimerExpiry >= currentTime) + { + // check if waiting for publish. + if (m_waitingForPublish) + { + return PublishingState.WaitingForPublish; + } + + return PublishingState.Idle; + } + + // set next expiry time. + while (m_publishTimerExpiry < currentTime) + { + m_publishTimerExpiry += (long)m_publishingInterval; + } + + // check lifetime has elapsed. + if (m_waitingForPublish) + { + m_lifetimeCounter++; + + lock (DiagnosticsWriteLock) + { + m_diagnostics.LatePublishRequestCount++; + m_diagnostics.CurrentLifetimeCount = m_lifetimeCounter; + } + + if (m_lifetimeCounter >= m_maxLifetimeCount) + { + TraceState("EXPIRED"); + return PublishingState.Expired; + } + } + + // increment keep alive counter. + m_keepAliveCounter++; + + lock (DiagnosticsWriteLock) + { + m_diagnostics.CurrentKeepAliveCount = m_keepAliveCounter; + } + + // check for monitored items. + if (m_publishingEnabled && m_session != null) + { + // check for monitored items that are ready to publish. + LinkedListNode current = m_itemsToCheck.First; + bool itemsTriggered = false; + + while (current != null) + { + LinkedListNode next = current.Next; + IMonitoredItem monitoredItem = current.Value; + + // check if the item is ready to publish. + if (monitoredItem.IsReadyToPublish) + { + m_itemsToCheck.Remove(current); + m_itemsToPublish.AddLast(current); + } + + // update any triggered items. + List triggeredItems = null; + + if (monitoredItem.IsReadyToTrigger) + { + if (m_itemsToTrigger.TryGetValue(current.Value.Id, out triggeredItems)) + { + for (int ii = 0; ii < triggeredItems.Count; ii++) + { + if (triggeredItems[ii].SetTriggered()) + { + itemsTriggered = true; + } + } + + // clear ReadyToTrigger flag after trigger + monitoredItem.IsReadyToTrigger = false; + } + } + + current = next; + } + + // need to go through the list again if items were triggered. + if (itemsTriggered) + { + current = m_itemsToCheck.First; + + while (current != null) + { + LinkedListNode next = current.Next; + IMonitoredItem monitoredItem = current.Value; + + if (monitoredItem.IsReadyToPublish) + { + m_itemsToCheck.Remove(current); + m_itemsToPublish.AddLast(current); + } + + current = next; + } + } + + if (m_itemsToPublish.Count > 0) + { + if (!m_waitingForPublish) + { + // TraceState("READY TO PUBLISH"); + } + + m_waitingForPublish = true; + return PublishingState.NotificationsAvailable; + } + } + + // check if keep alive expired. + if (m_keepAliveCounter >= m_maxKeepAliveCount) + { + if (!m_waitingForPublish) + { + // TraceState("READY TO KEEPALIVE"); + } + + m_waitingForPublish = true; + return PublishingState.NotificationsAvailable; + } + + // do nothing. + return PublishingState.Idle; + } + } + + /// + /// Tells the subscription that the owning session is being closed. + /// + public void SessionClosed() + { + lock (m_lock) + { + m_session = null; + } + + lock (DiagnosticsWriteLock) + { + m_diagnostics.SessionId = null; + } + } + + /// + /// Resets the keepalive counter. + /// + private void ResetKeepaliveCount() + { + m_keepAliveCounter = 0; + + lock (DiagnosticsWriteLock) + { + m_diagnostics.CurrentKeepAliveCount = 0; + } + } + + /// + /// Resets the lifetime count. + /// + private void ResetLifetimeCount() + { + m_lifetimeCounter = 0; + + lock (DiagnosticsWriteLock) + { + m_diagnostics.CurrentLifetimeCount = 0; + } + } + + /// + /// Update the monitoring queue overflow count. + /// + public void QueueOverflowHandler() + { + lock (DiagnosticsWriteLock) + { + m_diagnostics.MonitoringQueueOverflowCount++; + } + } + + /// + /// Removes a message from the message queue. + /// + public ServiceResult Acknowledge(OperationContext context, uint sequenceNumber) + { + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + // find message in queue. + for (int ii = 0; ii < m_sentMessages.Count; ii++) + { + if (m_sentMessages[ii].SequenceNumber == sequenceNumber) + { + if (m_lastSentMessage > ii) + { + m_lastSentMessage--; + } + + m_sentMessages.RemoveAt(ii); + return null; + } + } + + if (sequenceNumber == 0) + { + return StatusCodes.BadSequenceNumberInvalid; + } + + // TraceState("ACK " + sequenceNumber.ToString()); + + // message not found. + return StatusCodes.BadSequenceNumberUnknown; + } + } + + /// + /// Returns all available notifications. + /// + public NotificationMessage Publish( + OperationContext context, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + NotificationMessage message = null; + + lock (m_lock) + { + moreNotifications = false; + availableSequenceNumbers = null; + + // check if expired. + if (m_expired) + { + return null; + } + + try + { + // update diagnostics. + lock (DiagnosticsWriteLock) + { + m_diagnostics.PublishRequestCount++; + } + + message = InnerPublish(context, out availableSequenceNumbers, out moreNotifications); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.UnacknowledgedMessageCount = (uint)availableSequenceNumbers.Count; + } + } + finally + { + // clear counters on success. + if (message != null) + { + // TraceState(Utils.Format("PUBLISH #{0}", message.SequenceNumber)); + ResetKeepaliveCount(); + m_waitingForPublish = moreNotifications; + ResetLifetimeCount(); + } + } + } + + return message; + } + + /// + /// Publishes a timeout status message. + /// + public NotificationMessage PublishTimeout() + { + NotificationMessage message = null; + + lock (m_lock) + { + m_expired = true; + + message = new NotificationMessage(); + + message.SequenceNumber = (uint)m_sequenceNumber; + message.PublishTime = DateTime.UtcNow; + + Utils.IncrementIdentifier(ref m_sequenceNumber); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.NextSequenceNumber = (uint)m_sequenceNumber; + } + + StatusChangeNotification notification = new StatusChangeNotification(); + notification.Status = StatusCodes.BadTimeout; + message.NotificationData.Add(new ExtensionObject(notification)); + } + + return message; + } + + /// + /// Returns all available notifications. + /// + private NotificationMessage InnerPublish( + OperationContext context, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications) + { + // check session. + VerifySession(context); + + // TraceState("PUBLISH"); + + // check if a keep alive should be sent if there is no data. + bool keepAliveIfNoData = (m_keepAliveCounter >= m_maxKeepAliveCount); + + availableSequenceNumbers = new UInt32Collection(); + + moreNotifications = false; + + if (m_lastSentMessage < m_sentMessages.Count) + { + // return the available sequence numbers. + for (int ii = 0; ii <= m_lastSentMessage && ii < m_sentMessages.Count; ii++) + { + availableSequenceNumbers.Add(m_sentMessages[ii].SequenceNumber); + } + + moreNotifications = m_waitingForPublish = m_lastSentMessage < m_sentMessages.Count - 1; + + // TraceState("PUBLISH QUEUED MESSAGE"); + return m_sentMessages[m_lastSentMessage++]; + } + + List messages = new List(); + + if (m_publishingEnabled) + { + DateTime start1 = DateTime.UtcNow; + + // collect notifications to publish. + Queue events = new Queue(); + Queue datachanges = new Queue(); + Queue datachangeDiagnostics = new Queue(); + + // check for monitored items that are ready to publish. + LinkedListNode current = m_itemsToPublish.First; + + while (current != null) + { + LinkedListNode next = current.Next; + IMonitoredItem monitoredItem = current.Value; + + if ((monitoredItem.MonitoredItemType & MonitoredItemTypeMask.DataChange) != 0) + { + ((IDataChangeMonitoredItem)monitoredItem).Publish(context, datachanges, datachangeDiagnostics); + } + else + { + ((IEventMonitoredItem)monitoredItem).Publish(context, events); + } + + // add back to list to check. + m_itemsToPublish.Remove(current); + m_itemsToCheck.AddLast(current); + + // check there are enough notifications for a message. + if (m_maxNotificationsPerPublish > 0 && events.Count + datachanges.Count > m_maxNotificationsPerPublish) + { + // construct message. + int notificationCount; + int eventCount = events.Count; + int dataChangeCount = datachanges.Count; + + NotificationMessage message = ConstructMessage( + events, + datachanges, + datachangeDiagnostics, + out notificationCount); + + // add to list of messages to send. + messages.Add(message); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.DataChangeNotificationsCount += (uint)dataChangeCount; + m_diagnostics.EventNotificationsCount += (uint)(eventCount - events.Count); + m_diagnostics.NotificationsCount += (uint)notificationCount; + } + } + + current = next; + } + + // pubish the remaining notifications. + while (events.Count + datachanges.Count > 0) + { + // construct message. + int notificationCount; + int eventCount = events.Count; + int dataChangeCount = datachanges.Count; + + NotificationMessage message = ConstructMessage( + events, + datachanges, + datachangeDiagnostics, + out notificationCount); + + // add to list of messages to send. + messages.Add(message); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.DataChangeNotificationsCount += (uint)dataChangeCount; + m_diagnostics.EventNotificationsCount += (uint)(eventCount - events.Count); + m_diagnostics.NotificationsCount += (uint)notificationCount; + } + } + + // check for missing notifications. + if (!keepAliveIfNoData && messages.Count == 0) + { + Utils.Trace( + (int)Utils.TraceMasks.Error, + "Oops! MonitoredItems queued but no notifications availabled."); + + m_waitingForPublish = false; + + return null; + } + + DateTime end1 = DateTime.UtcNow; + + double delta1 = ((double)(end1.Ticks - start1.Ticks)) / TimeSpan.TicksPerMillisecond; + + if (delta1 > 200) + { + TraceState(Utils.Format("PUBLISHING DELAY ({0}ms)", delta1)); + } + } + + if (messages.Count == 0) + { + // create a keep alive message. + NotificationMessage message = new NotificationMessage(); + + // use the sequence number for the next message. + message.SequenceNumber = (uint)m_sequenceNumber; + message.PublishTime = DateTime.UtcNow; + + // return the available sequence numbers. + for (int ii = 0; ii <= m_lastSentMessage && ii < m_sentMessages.Count; ii++) + { + availableSequenceNumbers.Add(m_sentMessages[ii].SequenceNumber); + } + + // TraceState("PUBLISH KEEPALIVE"); + return message; + } + + // have to drop unsent messages if out of queue space. + int overflowCount = messages.Count - (int)m_maxMessageCount; + if (overflowCount > 0) + { + + Utils.Trace( + "WARNING: QUEUE OVERFLOW. Dropping {2} Messages. Increase MaxMessageQueueSize. SubId={0}, MaxMessageQueueSize={1}", + m_id, + m_maxMessageCount, + overflowCount); + + messages.RemoveRange(0, overflowCount); + + } + + // remove old messages if queue is full. + if (m_sentMessages.Count > m_maxMessageCount - messages.Count) + { + lock (DiagnosticsWriteLock) + { + m_diagnostics.UnacknowledgedMessageCount += (uint)messages.Count; + } + + if (m_maxMessageCount <= messages.Count) + { + m_sentMessages.Clear(); + } + else + { + m_sentMessages.RemoveRange(0, messages.Count); + } + } + + // save new message + m_lastSentMessage = m_sentMessages.Count; + m_sentMessages.AddRange(messages); + + // check if there are more notifications to send. + moreNotifications = m_waitingForPublish = messages.Count > 1; + + // return the available sequence numbers. + for (int ii = 0; ii <= m_lastSentMessage && ii < m_sentMessages.Count; ii++) + { + availableSequenceNumbers.Add(m_sentMessages[ii].SequenceNumber); + } + + // TraceState("PUBLISH NEW MESSAGE"); + return m_sentMessages[m_lastSentMessage++]; + } + + /// + /// Construct a message from the queues. + /// + private NotificationMessage ConstructMessage( + Queue events, + Queue datachanges, + Queue datachangeDiagnostics, + out int notificationCount) + { + notificationCount = 0; + + NotificationMessage message = new NotificationMessage(); + + message.SequenceNumber = (uint)m_sequenceNumber; + message.PublishTime = DateTime.UtcNow; + + Utils.IncrementIdentifier(ref m_sequenceNumber); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.NextSequenceNumber = (uint)m_sequenceNumber; + } + + // add events. + if (events.Count > 0 && notificationCount < m_maxNotificationsPerPublish) + { + EventNotificationList notification = new EventNotificationList(); + + while (events.Count > 0 && notificationCount < m_maxNotificationsPerPublish) + { + notification.Events.Add(events.Dequeue()); + notificationCount++; + } + + message.NotificationData.Add(new ExtensionObject(notification)); + } + + // add datachanges (space permitting). + if (datachanges.Count > 0 && notificationCount < m_maxNotificationsPerPublish) + { + bool diagnosticsExist = false; + DataChangeNotification notification = new DataChangeNotification(); + + notification.MonitoredItems = new MonitoredItemNotificationCollection(datachanges.Count); + notification.DiagnosticInfos = new DiagnosticInfoCollection(datachanges.Count); + + while (datachanges.Count > 0 && notificationCount < m_maxNotificationsPerPublish) + { + MonitoredItemNotification datachange = datachanges.Dequeue(); + notification.MonitoredItems.Add(datachange); + + DiagnosticInfo diagnosticInfo = datachangeDiagnostics.Dequeue(); + + if (diagnosticInfo != null) + { + diagnosticsExist = true; + } + + notification.DiagnosticInfos.Add(diagnosticInfo); + + notificationCount++; + } + + // clear diagnostics if not used. + if (!diagnosticsExist) + { + notification.DiagnosticInfos.Clear(); + } + + message.NotificationData.Add(new ExtensionObject(notification)); + } + + return message; + } + + /// + /// Returns a cached notification message. + /// + public NotificationMessage Republish( + OperationContext context, + uint retransmitSequenceNumber) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.RepublishMessageRequestCount++; + } + + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + lock (DiagnosticsWriteLock) + { + m_diagnostics.RepublishRequestCount++; + m_diagnostics.RepublishMessageRequestCount++; + } + + // find message. + foreach (NotificationMessage sentMessage in m_sentMessages) + { + if (sentMessage.SequenceNumber == retransmitSequenceNumber) + { + lock (DiagnosticsWriteLock) + { + m_diagnostics.RepublishMessageCount++; + } + + return sentMessage; + } + } + + // message not available. + throw new ServiceResultException(StatusCodes.BadMessageNotAvailable); + } + } + + /// + /// Updates the publishing parameters for the subscription. + /// + public void Modify( + OperationContext context, + double publishingInterval, + uint maxLifetimeCount, + uint maxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority) + { + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + m_maxLifetimeCount = maxLifetimeCount; + + // update publishing interval. + if (publishingInterval != m_publishingInterval) + { + m_publishingInterval = publishingInterval; + m_publishTimerExpiry = HiResClock.TickCount64 + (long)publishingInterval; + ResetKeepaliveCount(); + } + + // update keep alive count. + if (maxKeepAliveCount != m_maxKeepAliveCount) + { + m_maxKeepAliveCount = maxKeepAliveCount; + } + + m_maxNotificationsPerPublish = maxNotificationsPerPublish; + + // update priority. + m_priority = priority; + + // update diagnostics + lock (DiagnosticsWriteLock) + { + m_diagnostics.ModifyCount++; + m_diagnostics.PublishingInterval = m_publishingInterval; + m_diagnostics.MaxKeepAliveCount = m_maxKeepAliveCount; + m_diagnostics.MaxLifetimeCount = m_maxLifetimeCount; + m_diagnostics.Priority = m_priority; + m_diagnostics.MaxNotificationsPerPublish = m_maxNotificationsPerPublish; + } + + // TraceState("MODIFIED"); + } + } + + /// + /// Enables/disables publishing for the subscription. + /// + public void SetPublishingMode( + OperationContext context, + bool publishingEnabled) + { + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + // update publishing interval. + if (publishingEnabled != m_publishingEnabled) + { + m_publishingEnabled = publishingEnabled; + + // update diagnostics + lock (DiagnosticsWriteLock) + { + m_diagnostics.PublishingEnabled = m_publishingEnabled; + + if (m_publishingEnabled) + { + m_diagnostics.EnableCount++; + } + else + { + m_diagnostics.DisableCount++; + } + } + } + + // TraceState((publishingEnabled)?"ENABLED":"DISABLED"); + } + } + + /// + /// Updates the triggers for the monitored item. + /// + public void SetTriggering( + OperationContext context, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (linksToAdd == null) throw new ArgumentNullException(nameof(linksToAdd)); + if (linksToRemove == null) throw new ArgumentNullException(nameof(linksToRemove)); + + // allocate results. + bool diagnosticsExist = false; + addResults = new StatusCodeCollection(); + addDiagnosticInfos = null; + removeResults = new StatusCodeCollection(); + removeDiagnosticInfos = null; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + addDiagnosticInfos = new DiagnosticInfoCollection(); + removeDiagnosticInfos = new DiagnosticInfoCollection(); + } + + // build list of items to modify. + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + // look up triggering item. + LinkedListNode triggerNode = null; + + if (!m_monitoredItems.TryGetValue(triggeringItemId, out triggerNode)) + { + throw new ServiceResultException(StatusCodes.BadMonitoredItemIdInvalid); + } + + // lookup existing list. + List triggeredItems = null; + + if (!m_itemsToTrigger.TryGetValue(triggeringItemId, out triggeredItems)) + { + m_itemsToTrigger[triggeringItemId] = triggeredItems = new List(); + } + + // remove old links. + for (int ii = 0; ii < linksToRemove.Count; ii++) + { + removeResults.Add(StatusCodes.Good); + + bool found = false; + + for (int jj = 0; jj < triggeredItems.Count; jj++) + { + if (triggeredItems[jj].Id == linksToRemove[ii]) + { + found = true; + triggeredItems.RemoveAt(jj); + break; + } + } + + if (!found) + { + removeResults[ii] = StatusCodes.BadMonitoredItemIdInvalid; + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, removeResults[ii]); + diagnosticsExist = true; + removeDiagnosticInfos.Add(diagnosticInfo); + } + + continue; + } + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + removeDiagnosticInfos.Add(null); + } + } + + // add new links. + for (int ii = 0; ii < linksToAdd.Count; ii++) + { + addResults.Add(StatusCodes.Good); + + LinkedListNode node = null; + + if (!m_monitoredItems.TryGetValue(linksToAdd[ii], out node)) + { + addResults[ii] = StatusCodes.BadMonitoredItemIdInvalid; + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, addResults[ii]); + diagnosticsExist = true; + addDiagnosticInfos.Add(diagnosticInfo); + } + + continue; + } + + // check if triggering interface is supported. + ITriggeredMonitoredItem triggeredItem = node.Value as ITriggeredMonitoredItem; + + if (triggeredItem == null) + { + addResults[ii] = StatusCodes.BadNotSupported; + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, addResults[ii]); + diagnosticsExist = true; + addDiagnosticInfos.Add(diagnosticInfo); + } + + continue; + } + + // add value if not already in list. + bool found = false; + + for (int jj = 0; jj < triggeredItems.Count; jj++) + { + if (triggeredItems[jj].Id == triggeredItem.Id) + { + found = true; + break; + } + } + + if (!found) + { + triggeredItems.Add(triggeredItem); + } + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + addDiagnosticInfos.Add(null); + } + } + + // remove an empty list. + if (triggeredItems.Count == 0) + { + m_itemsToTrigger.Remove(triggeringItemId); + } + + // clear diagnostics if not required. + if (!diagnosticsExist) + { + if (addDiagnosticInfos != null) addDiagnosticInfos.Clear(); + if (removeDiagnosticInfos != null) removeDiagnosticInfos.Clear(); + } + } + } + + /// + /// Adds monitored items to a subscription. + /// + public void CreateMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToCreate == null) throw new ArgumentNullException(nameof(itemsToCreate)); + + int count = itemsToCreate.Count; + + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + } + + // create the monitored items. + List monitoredItems = new List(count); + List errors = new List(count); + List filterResults = new List(count); + + for (int ii = 0; ii < count; ii++) + { + monitoredItems.Add(null); + errors.Add(null); + filterResults.Add(null); + } + + m_server.NodeManager.CreateMonitoredItems( + context, + this.m_id, + m_publishingInterval, + timestampsToReturn, + itemsToCreate, + errors, + filterResults, + monitoredItems); + + // allocate results. + bool diagnosticsExist = false; + results = new MonitoredItemCreateResultCollection(count); + diagnosticInfos = null; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos = new DiagnosticInfoCollection(count); + } + + lock (m_lock) + { + // check session again after CreateMonitoredItems. + VerifySession(context); + + for (int ii = 0; ii < errors.Count; ii++) + { + // update results. + MonitoredItemCreateResult result = null; + + if (ServiceResult.IsBad(errors[ii])) + { + result = new MonitoredItemCreateResult(); + result.StatusCode = errors[ii].Code; + + if (filterResults[ii] != null) + { + result.FilterResult = new ExtensionObject(filterResults[ii]); + } + } + else + { + IMonitoredItem monitoredItem = monitoredItems[ii]; + + if (monitoredItem != null) + { + monitoredItem.SubscriptionCallback = this; + + LinkedListNode node = m_itemsToCheck.AddLast(monitoredItem); + m_monitoredItems.Add(monitoredItem.Id, node); + + errors[ii] = monitoredItem.GetCreateResult(out result); + + // update sampling interval diagnostics. + AddItemToSamplingInterval(result.RevisedSamplingInterval, itemsToCreate[ii].MonitoringMode); + } + } + + results.Add(result); + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = null; + + if (errors[ii] != null && errors[ii].Code != StatusCodes.Good) + { + diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + } + + diagnosticInfos.Add(diagnosticInfo); + } + } + + // clear diagnostics if not required. + if (!diagnosticsExist && diagnosticInfos != null) + { + diagnosticInfos.Clear(); + } + + // TraceState("ITEMS CREATED"); + } + } + + /// + /// Adds an item to the sampling interval. + /// + private void AddItemToSamplingInterval( + double samplingInterval, + MonitoringMode monitoringMode) + { + // update diagnostics + lock (DiagnosticsWriteLock) + { + if (monitoringMode == MonitoringMode.Disabled) + { + m_diagnostics.DisabledMonitoredItemCount++; + } + m_diagnostics.MonitoredItemCount++; + } + } + + /// + /// Adds an item to the sampling interval. + /// + private void ModifyItemSamplingInterval( + double oldInterval, + double newInterval, + MonitoringMode monitoringMode) + { + // TBD + } + + /// + /// Removes an item from the sampling interval. + /// + private void RemoveItemToSamplingInterval( + double samplingInterval, + MonitoringMode monitoringMode) + { + // update diagnostics + lock (DiagnosticsWriteLock) + { + if (monitoringMode == MonitoringMode.Disabled) + { + m_diagnostics.DisabledMonitoredItemCount--; + } + m_diagnostics.MonitoredItemCount--; + } + } + + /// + /// Changes the monitoring mode for an item. + /// + private void ModifyItemMonitoringMode( + double samplingInterval, + MonitoringMode oldMode, + MonitoringMode newMode) + { + if (newMode != oldMode) + { + // update diagnostics + lock (DiagnosticsWriteLock) + { + if (newMode == MonitoringMode.Disabled) + { + m_diagnostics.DisabledMonitoredItemCount++; + } + else + { + m_diagnostics.DisabledMonitoredItemCount--; + } + } + } + } + + /// + /// Modifies monitored items in a subscription. + /// + public void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (itemsToModify == null) throw new ArgumentNullException(nameof(itemsToModify)); + + int count = itemsToModify.Count; + + // allocate results. + bool diagnosticsExist = false; + results = new MonitoredItemModifyResultCollection(count); + diagnosticInfos = null; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos = new DiagnosticInfoCollection(count); + } + + // build list of items to modify. + List monitoredItems = new List(count); + List errors = new List(count); + List filterResults = new List(count); + double[] originalSamplingIntervals = new double[count]; + + bool validItems = false; + + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + for (int ii = 0; ii < count; ii++) + { + filterResults.Add(null); + + LinkedListNode node = null; + + if (!m_monitoredItems.TryGetValue(itemsToModify[ii].MonitoredItemId, out node)) + { + monitoredItems.Add(null); + errors.Add(StatusCodes.BadMonitoredItemIdInvalid); + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + diagnosticInfos.Add(diagnosticInfo); + } + + continue; + } + + IMonitoredItem monitoredItem = node.Value; + monitoredItems.Add(monitoredItem); + originalSamplingIntervals[ii] = monitoredItem.SamplingInterval; + + errors.Add(null); + validItems = true; + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + } + + // update items. + if (validItems) + { + m_server.NodeManager.ModifyMonitoredItems( + context, + timestampsToReturn, + monitoredItems, + itemsToModify, + errors, + filterResults); + } + + lock (m_lock) + { + // create results. + for (int ii = 0; ii < errors.Count; ii++) + { + ServiceResult error = errors[ii]; + + MonitoredItemModifyResult result = null; + + if (ServiceResult.IsGood(error)) + { + error = monitoredItems[ii].GetModifyResult(out result); + } + + if (result == null) + { + result = new MonitoredItemModifyResult(); + } + + if (error == null) + { + result.StatusCode = StatusCodes.Good; + } + else + { + result.StatusCode = error.StatusCode; + } + + // update diagnostics. + if (ServiceResult.IsGood(error)) + { + ModifyItemSamplingInterval(originalSamplingIntervals[ii], result.RevisedSamplingInterval, monitoredItems[ii].MonitoringMode); + } + + if (filterResults[ii] != null) + { + result.FilterResult = new ExtensionObject(filterResults[ii]); + } + + results.Add(result); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + if (error != null && error.Code != StatusCodes.Good) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + } + } + + // clear diagnostics if not required. + if (!diagnosticsExist && diagnosticInfos != null) + { + diagnosticInfos.Clear(); + } + + // TraceState("ITEMS MODIFIED"); + } + } + + /// + /// Deletes the monitored items in a subscription. + /// + public void DeleteMonitoredItems( + OperationContext context, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteMonitoredItems(context, monitoredItemIds, false, out results, out diagnosticInfos); + } + + /// + /// Deletes the monitored items in a subscription. + /// + private void DeleteMonitoredItems( + OperationContext context, + UInt32Collection monitoredItemIds, + bool doNotCheckSession, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (monitoredItemIds == null) throw new ArgumentNullException(nameof(monitoredItemIds)); + + int count = monitoredItemIds.Count; + + bool diagnosticsExist = false; + results = new StatusCodeCollection(count); + diagnosticInfos = null; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos = new DiagnosticInfoCollection(count); + } + + // build list of items to modify. + List monitoredItems = new List(count); + List errors = new List(count); + double[] originalSamplingIntervals = new double[count]; + MonitoringMode[] originalMonitoringModes = new MonitoringMode[count]; + + bool validItems = false; + + lock (m_lock) + { + // check session. + if (!doNotCheckSession) + { + VerifySession(context); + } + + // clear lifetime counter. + ResetLifetimeCount(); + + for (int ii = 0; ii < count; ii++) + { + LinkedListNode node = null; + + if (!m_monitoredItems.TryGetValue(monitoredItemIds[ii], out node)) + { + monitoredItems.Add(null); + errors.Add(StatusCodes.BadMonitoredItemIdInvalid); + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + diagnosticInfos.Add(diagnosticInfo); + } + + continue; + } + + IMonitoredItem monitoredItem = node.Value; + monitoredItems.Add(monitoredItem); + + // remove the item from the internal lists. + m_monitoredItems.Remove(monitoredItemIds[ii]); + m_itemsToTrigger.Remove(monitoredItemIds[ii]); + + //remove the links towards the deleted monitored item + List triggeredItems = null; + foreach (KeyValuePair> item in m_itemsToTrigger) + { + triggeredItems = item.Value; + for (int jj = 0; jj < triggeredItems.Count; jj++) + { + if (triggeredItems[jj].Id == monitoredItemIds[ii]) + { + triggeredItems.RemoveAt(jj); + break; + } + } + } + + if (node.List != null) + { + node.List.Remove(node); + } + + originalSamplingIntervals[ii] = monitoredItem.SamplingInterval; + originalMonitoringModes[ii] = monitoredItem.MonitoringMode; + + errors.Add(null); + validItems = true; + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + } + + // update items. + if (validItems) + { + m_server.NodeManager.DeleteMonitoredItems( + context, + m_id, + monitoredItems, + errors); + } + + lock (m_lock) + { + // update diagnostics. + for (int ii = 0; ii < errors.Count; ii++) + { + ServiceResult error = errors[ii]; + + if (error == null) + { + results.Add(StatusCodes.Good); + } + else + { + results.Add(error.StatusCode); + } + + // update diagnostics. + if (ServiceResult.IsGood(error)) + { + RemoveItemToSamplingInterval(originalSamplingIntervals[ii], originalMonitoringModes[ii]); + } + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + if (error != null && error.Code != StatusCodes.Good) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + } + } + + // clear diagnostics if not required. + if (!diagnosticsExist && diagnosticInfos != null) + { + diagnosticInfos.Clear(); + } + + // TraceState("ITEMS DELETED"); + } + } + + /// + /// Changes the monitoring mode for a set of items. + /// + public void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + if (monitoredItemIds == null) throw new ArgumentNullException(nameof(monitoredItemIds)); + + int count = monitoredItemIds.Count; + + bool diagnosticsExist = false; + results = new StatusCodeCollection(count); + diagnosticInfos = null; + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos = new DiagnosticInfoCollection(count); + } + + // build list of items to modify. + List monitoredItems = new List(count); + List errors = new List(count); + MonitoringMode[] originalMonitoringModes = new MonitoringMode[count]; + + bool validItems = false; + + lock (m_lock) + { + // check session. + VerifySession(context); + + // clear lifetime counter. + ResetLifetimeCount(); + + for (int ii = 0; ii < count; ii++) + { + LinkedListNode node = null; + + if (!m_monitoredItems.TryGetValue(monitoredItemIds[ii], out node)) + { + monitoredItems.Add(null); + errors.Add(StatusCodes.BadMonitoredItemIdInvalid); + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, errors[ii]); + diagnosticsExist = true; + diagnosticInfos.Add(diagnosticInfo); + } + + continue; + } + + IMonitoredItem monitoredItem = node.Value; + monitoredItems.Add(monitoredItem); + originalMonitoringModes[ii] = monitoredItem.MonitoringMode; + + errors.Add(null); + validItems = true; + + // update diagnostics. + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + } + + // update items. + if (validItems) + { + m_server.NodeManager.SetMonitoringMode( + context, + monitoringMode, + monitoredItems, + errors); + } + + lock (m_lock) + { + // update diagnostics. + for (int ii = 0; ii < errors.Count; ii++) + { + ServiceResult error = errors[ii]; + + if (error == null) + { + results.Add(StatusCodes.Good); + } + else + { + results.Add(error.StatusCode); + } + + // update diagnostics. + if (ServiceResult.IsGood(error)) + { + ModifyItemMonitoringMode(monitoredItems[ii].SamplingInterval, originalMonitoringModes[ii], monitoringMode); + } + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + if (error != null && error.Code != StatusCodes.Good) + { + diagnosticInfos[ii] = ServerUtils.CreateDiagnosticInfo(m_server, context, error); + diagnosticsExist = true; + } + } + } + + // clear diagnostics if not required. + if (!diagnosticsExist && diagnosticInfos != null) + { + diagnosticInfos.Clear(); + } + + if (monitoringMode == MonitoringMode.Disabled) + { + // TraceState("ITEMS DISABLED"); + } + else if (monitoringMode == MonitoringMode.Reporting) + { + // TraceState("ITEMS REPORTING ENABLED"); + } + else + { + // TraceState("ITEMS SAMPLING ENABLED"); + } + } + } + + /// + /// Verifies that a condition refresh operation is permitted. + /// + public void ValidateConditionRefresh(OperationContext context) + { + lock (m_lock) + { + VerifySession(context); + + if (m_refreshInProgress) + { + throw new ServiceResultException(StatusCodes.BadRefreshInProgress); + } + } + } + + /// + /// Refreshes the conditions. + /// + public void ConditionRefresh() + { + ServerSystemContext systemContext = m_server.DefaultSystemContext.Copy(m_session); + List monitoredItems = new List(); + + lock (m_lock) + { + // generate start event. + RefreshStartEventState e = new RefreshStartEventState(null); + + TranslationInfo message = new TranslationInfo( + "RefreshStartEvent", + "en-US", + "Condition refresh started for subscription {0}.", + m_id); + + e.Initialize( + systemContext, + null, + EventSeverity.Low, + new LocalizedText(message)); + + e.SetChildValue(systemContext, BrowseNames.SourceNode, m_diagnosticsId, false); + e.SetChildValue(systemContext, BrowseNames.SourceName, Utils.Format("Subscription/{0}", m_id), false); + e.SetChildValue(systemContext, BrowseNames.ReceiveTime, DateTime.UtcNow, false); + + // build list of items to refresh. + foreach (LinkedListNode monitoredItem in m_monitoredItems.Values) + { + MonitoredItem eventMonitoredItem = monitoredItem.Value as MonitoredItem; + + if (eventMonitoredItem.EventFilter != null) + { + // queue start refresh event. + eventMonitoredItem.QueueEvent(e, true); + + // add to list that gets reported to the NodeManagers. + monitoredItems.Add(eventMonitoredItem); + } + } + + // nothing to do if no event subscriptions. + if (monitoredItems.Count == 0) + { + return; + } + } + + // tell the NodeManagers to report the current state of the conditions. + try + { + m_refreshInProgress = true; + + OperationContext operationContext = new OperationContext(m_session, DiagnosticsMasks.None); + m_server.NodeManager.ConditionRefresh(operationContext, monitoredItems); + } + finally + { + m_refreshInProgress = false; + } + + lock (m_lock) + { + // generate start event. + RefreshEndEventState e = new RefreshEndEventState(null); + + TranslationInfo message = new TranslationInfo( + "RefreshEndEvent", + "en-US", + "Condition refresh completed for subscription {0}.", + m_id); + + e.Initialize( + systemContext, + null, + EventSeverity.Low, + new LocalizedText(message)); + + e.SetChildValue(systemContext, BrowseNames.SourceNode, m_diagnosticsId, false); + e.SetChildValue(systemContext, BrowseNames.SourceName, Utils.Format("Subscription/{0}", m_id), false); + e.SetChildValue(systemContext, BrowseNames.ReceiveTime, DateTime.UtcNow, false); + + // send refresh end event. + for (int ii = 0; ii < monitoredItems.Count; ii++) + { + MonitoredItem monitoredItem = monitoredItems[ii] as MonitoredItem; + + if (monitoredItem.EventFilter != null) + { + monitoredItem.QueueEvent(e, true); + } + } + + // TraceState("CONDITION REFRESH"); + } + } + + /// + /// Gets the monitored items for the subscription. + /// + public void GetMonitoredItems(out uint[] serverHandles, out uint[] clientHandles) + { + lock (m_lock) + { + serverHandles = new uint[m_monitoredItems.Count]; + clientHandles = new uint[m_monitoredItems.Count]; + + int ii = 0; + + foreach (KeyValuePair> entry in m_monitoredItems) + { + serverHandles[ii] = entry.Key; + clientHandles[ii] = entry.Value.Value.ClientHandle; + ii++; + } + } + } + #endregion + + #region Private Methods + /// + /// Returns a copy of the current diagnostics. + /// + private ServiceResult OnUpdateDiagnostics( + ISystemContext context, + NodeState node, + ref object value) + { + lock (DiagnosticsLock) + { + value = Utils.Clone(m_diagnostics); + } + + return ServiceResult.Good; + } + + /// + /// Throws an exception if the session is not the owner. + /// + private void VerifySession(OperationContext context) + { + if (m_expired) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + + if (!Object.ReferenceEquals(context.Session, m_session)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid, "Subscription belongs to a different session."); + } + } + + /// + /// Dumps the current state of the session queue. + /// + internal void TraceState(string context) + { + if ((Utils.TraceMask & Utils.TraceMasks.Information) == 0) + { + return; + } + + StringBuilder buffer = new StringBuilder(); + + lock (m_lock) + { + buffer.AppendFormat("Subscription {0}", context); + + buffer.AppendFormat(", Id={0}", m_id); + buffer.AppendFormat(", Publishing={0}", m_publishingInterval); + buffer.AppendFormat(", KeepAlive={0}", m_maxKeepAliveCount); + buffer.AppendFormat(", LifeTime={0}", m_maxLifetimeCount); + buffer.AppendFormat(", Enabled={0}", m_publishingEnabled); + buffer.AppendFormat(", KeepAliveCount={0}", m_keepAliveCounter); + buffer.AppendFormat(", LifeTimeCount={0}", m_lifetimeCounter); + buffer.AppendFormat(", WaitingForPublish={0}", m_waitingForPublish); + buffer.AppendFormat(", SeqNo={0}", m_sequenceNumber); + buffer.AppendFormat(", ItemCount={0}", m_monitoredItems.Count); + buffer.AppendFormat(", ItemsToCheck={0}", m_itemsToCheck.Count); + buffer.AppendFormat(", ItemsToPublish={0}", m_itemsToPublish.Count); + buffer.AppendFormat(", MessageCount={0}", m_sentMessages.Count); + } + + Utils.Trace("{0}", buffer.ToString()); + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IServerInternal m_server; + private Session m_session; + private uint m_id; + private double m_publishingInterval; + private uint m_maxLifetimeCount; + private uint m_maxKeepAliveCount; + private uint m_maxNotificationsPerPublish; + private bool m_publishingEnabled; + private byte m_priority; + private long m_publishTimerExpiry; + private uint m_keepAliveCounter; + private uint m_lifetimeCounter; + private bool m_waitingForPublish; + private List m_sentMessages; + private int m_lastSentMessage; + private long m_sequenceNumber; + private uint m_maxMessageCount; + private Dictionary> m_monitoredItems; + private LinkedList m_itemsToCheck; + private LinkedList m_itemsToPublish; + private NodeId m_diagnosticsId; + private SubscriptionDiagnosticsDataType m_diagnostics; + private bool m_refreshInProgress; + private bool m_expired; + private Dictionary> m_itemsToTrigger; + #endregion + } +} diff --git a/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs new file mode 100644 index 00000000..dd2d3529 --- /dev/null +++ b/IOB-OPC-UA/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs @@ -0,0 +1,1705 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using System.Globalization; +using System.Threading.Tasks; + +namespace Opc.Ua.Server +{ + /// + /// A generic session manager object for a server. + /// + public class SubscriptionManager : IDisposable, ISubscriptionManager + { + #region Constructors + /// + /// Initializes the manager with its configuration. + /// + public SubscriptionManager( + IServerInternal server, + ApplicationConfiguration configuration) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + m_server = server; + + m_minPublishingInterval = configuration.ServerConfiguration.MinPublishingInterval; + m_maxPublishingInterval = configuration.ServerConfiguration.MaxPublishingInterval; + m_publishingResolution = configuration.ServerConfiguration.PublishingResolution; + m_maxSubscriptionLifetime = (uint)configuration.ServerConfiguration.MaxSubscriptionLifetime; + m_minSubscriptionLifetime = (uint)configuration.ServerConfiguration.MinSubscriptionLifetime; + m_maxMessageCount = (uint)configuration.ServerConfiguration.MaxMessageQueueSize; + m_maxNotificationsPerPublish = (uint)configuration.ServerConfiguration.MaxNotificationsPerPublish; + m_maxPublishRequestCount = configuration.ServerConfiguration.MaxPublishRequestCount; + m_maxSubscriptionCount = configuration.ServerConfiguration.MaxSubscriptionCount; + + m_subscriptions = new Dictionary(); + m_publishQueues = new Dictionary(); + m_statusMessages = new Dictionary>(); + + // create a event to signal shutdown. + m_shutdownEvent = new ManualResetEvent(true); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + List subscriptions = null; + List publishQueues = null; + + lock (m_lock) + { + publishQueues = new List(m_publishQueues.Values); + m_publishQueues.Clear(); + + subscriptions = new List(m_subscriptions.Values); + m_subscriptions.Clear(); + } + + foreach (SessionPublishQueue publishQueue in publishQueues) + { + Utils.SilentDispose(publishQueue); + } + + foreach (Subscription subscription in subscriptions) + { + Utils.SilentDispose(subscription); + } + + } + } + #endregion + + #region ISubscriptionManager Members + /// + /// Raised after a new subscription is created. + /// + public event SubscriptionEventHandler SubscriptionCreated + { + add + { + lock (m_eventLock) + { + m_SubscriptionCreated += value; + } + } + + remove + { + lock (m_eventLock) + { + m_SubscriptionCreated -= value; + } + } + } + + /// + /// Raised before a subscription is deleted. + /// + public event SubscriptionEventHandler SubscriptionDeleted + { + add + { + lock (m_eventLock) + { + m_SubscriptionDeleted += value; + } + } + + remove + { + lock (m_eventLock) + { + m_SubscriptionDeleted -= value; + } + } + } + + /// + /// Returns all of the subscriptions known to the subscription manager. + /// + /// A list of the subscriptions. + public IList GetSubscriptions() + { + List subscriptions = new List(); + + lock (m_lock) + { + subscriptions.AddRange(m_subscriptions.Values); + } + + return subscriptions; + } + + /// + /// Raises an event related to a subscription. + /// + protected virtual void RaiseSubscriptionEvent(Subscription subscription, bool deleted) + { + SubscriptionEventHandler handler = null; + + lock (m_eventLock) + { + handler = m_SubscriptionCreated; + + if (deleted) + { + handler = m_SubscriptionDeleted; + } + } + + if (handler != null) + { + try + { + handler(subscription, deleted); + } + catch (Exception e) + { + Utils.Trace(e, "Subscription event handler raised an exception."); + } + } + } + #endregion + + #region Public Interface + /// + /// Starts up the manager makes it ready to create subscriptions. + /// + public virtual void Startup() + { + lock (m_lock) + { + m_shutdownEvent.Reset(); + + Task.Run(() => + { + PublishSubscriptions(m_publishingResolution); + }); + } + } + + /// + /// Closes all subscriptions and rejects any new requests. + /// + public virtual void Shutdown() + { + lock (m_lock) + { + // stop the publishing thread. + m_shutdownEvent.Set(); + + // dispose of publish queues. + foreach (SessionPublishQueue queue in m_publishQueues.Values) + { + queue.Dispose(); + } + + m_publishQueues.Clear(); + + // dispose of subscriptions objects. + foreach (Subscription subscription in m_subscriptions.Values) + { + subscription.Dispose(); + } + + m_subscriptions.Clear(); + } + } + + /// + /// Signals that a session is closing. + /// + public virtual void SessionClosing(OperationContext context, NodeId sessionId, bool deleteSubscriptions) + { + // close the publish queue for the session. + SessionPublishQueue queue = null; + IList subscriptionsToDelete = null; + + lock (m_lock) + { + if (m_publishQueues.TryGetValue(sessionId, out queue)) + { + m_publishQueues.Remove(sessionId); + subscriptionsToDelete = queue.Close(); + + // remove the subscriptions. + if (deleteSubscriptions && subscriptionsToDelete != null) + { + for (int ii = 0; ii < subscriptionsToDelete.Count; ii++) + { + m_subscriptions.Remove(subscriptionsToDelete[ii].Id); + } + } + } + } + + //remove the expired subscription status change notifications for this session + lock (m_statusMessagesLock) + { + Queue statusQueue = null; + if (m_statusMessages.TryGetValue(sessionId, out statusQueue)) + { + m_statusMessages.Remove(sessionId); + } + } + + // process all subscriptions in the queue. + if (subscriptionsToDelete != null) + { + for (int ii = 0; ii < subscriptionsToDelete.Count; ii++) + { + Subscription subscription = subscriptionsToDelete[ii]; + + // delete the subscription. + if (deleteSubscriptions) + { + // raise subscription event. + RaiseSubscriptionEvent(subscription, true); + + // delete subscription. + subscription.Delete(context); + } + + // mark the subscriptions as abandoned. + else + { + lock (m_lock) + { + if (m_abandonedSubscriptions == null) + { + m_abandonedSubscriptions = new List(); + } + + m_abandonedSubscriptions.Add(subscription); + Utils.Trace("Server: Subscription '{0}' Abandoned.", subscription.Id); + } + } + } + } + } + + /// + /// Refreshes the conditions for the specified subscription. + /// + public void ConditionRefresh(OperationContext context, uint subscriptionId) + { + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw ServiceResultException.Create( + StatusCodes.BadSubscriptionIdInvalid, + "Cannot refresh conditions for a subscription that does not exist."); + } + } + + // ensure a condition refresh is allowed. + subscription.ValidateConditionRefresh(context); + + // do the actual refresh in the background. + Task.Run(() => + { + DoConditionRefresh(subscription); + }); + } + + /// + /// Completes a refresh conditions request. + /// + private void DoConditionRefresh(object state) + { + try + { + Subscription subscription = state as Subscription; + + if (subscription != null) + { + subscription.ConditionRefresh(); + } + } + catch (Exception e) + { + Utils.Trace(e, "Server: Publish Subscriptions Thread Exited Unexpectedly"); + } + } + + /// + /// Deletes the specified subscription. + /// + public StatusCode DeleteSubscription(OperationContext context, uint subscriptionId) + { + uint publishingIntervalCount = 0; + int monitoredItemCount = 0; + Subscription subscription = null; + + lock (m_lock) + { + // remove from publish queue. + if (m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + NodeId sessionId = subscription.SessionId; + + if (!NodeId.IsNull(sessionId)) + { + // check that the subscrition is the owner. + if (context != null && !Object.ReferenceEquals(context.Session, subscription.Session)) + { + throw new ServiceResultException(StatusCodes.BadSessionIdInvalid); + } + + SessionPublishQueue queue = null; + + if (m_publishQueues.TryGetValue(sessionId, out queue)) + { + queue.Remove(subscription); + } + } + } + + // check for abandoned subscription. + if (m_abandonedSubscriptions != null) + { + for (int ii = 0; ii < m_abandonedSubscriptions.Count; ii++) + { + if (m_abandonedSubscriptions[ii].Id == subscriptionId) + { + m_abandonedSubscriptions.RemoveAt(ii); + Utils.Trace("Server: Abandoned Subscription '{0}' Deleted.", subscriptionId); + break; + } + } + } + + // remove subscription. + m_subscriptions.Remove(subscriptionId); + } + + if (subscription != null) + { + monitoredItemCount = subscription.MonitoredItemCount; + + // raise subscription event. + RaiseSubscriptionEvent(subscription, true); + + // delete subscription. + subscription.Delete(context); + + // get the count for the diagnostics. + publishingIntervalCount = GetPublishingIntervalCount(); + + lock (m_server.DiagnosticsWriteLock) + { + ServerDiagnosticsSummaryDataType diagnostics = m_server.ServerDiagnostics; + diagnostics.CurrentSubscriptionCount--; + diagnostics.PublishingIntervalCount = publishingIntervalCount; + } + + if (context != null && context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + diagnostics.CurrentSubscriptionsCount--; + UpdateCurrentMonitoredItemsCount(diagnostics, -monitoredItemCount); + } + } + + return StatusCodes.Good; + } + + return StatusCodes.BadSubscriptionIdInvalid; + } + + /// + /// Updates the current monitored item count for the session. + /// + private void UpdateCurrentMonitoredItemsCount(SessionDiagnosticsDataType diagnostics, int change) + { + long monitoredItemsCount = (long)diagnostics.CurrentMonitoredItemsCount; + monitoredItemsCount += change; + + if (monitoredItemsCount > 0) + { + diagnostics.CurrentMonitoredItemsCount = (uint)monitoredItemsCount; + } + else + { + diagnostics.CurrentMonitoredItemsCount = 0; + } + } + + /// + /// Gets the total number of publishing intervals in use. + /// + private uint GetPublishingIntervalCount() + { + Dictionary publishingDiagnostics = new Dictionary(); + + lock (m_lock) + { + foreach (Subscription subscription in m_subscriptions.Values) + { + double publishingInterval = subscription.PublishingInterval; + + uint total = 0; + + if (!publishingDiagnostics.TryGetValue(publishingInterval, out total)) + { + total = 0; + } + + publishingDiagnostics[publishingInterval] = total + 1; + } + } + + return (uint)publishingDiagnostics.Count; + } + + /// + /// Creates a new subscription. + /// + public virtual void CreateSubscription( + OperationContext context, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + bool publishingEnabled, + byte priority, + out uint subscriptionId, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + lock (m_lock) + { + if (m_subscriptions.Count >= m_maxSubscriptionCount) + { + throw new ServiceResultException(StatusCodes.BadTooManySubscriptions); + } + } + + subscriptionId = 0; + revisedPublishingInterval = 0; + revisedLifetimeCount = 0; + revisedMaxKeepAliveCount = 0; + + uint publishingIntervalCount = 0; + Subscription subscription = null; + + // get sessin from context. + Session session = context.Session; + + // assign new identifier. + subscriptionId = Utils.IncrementIdentifier(ref m_lastSubscriptionId); + + // calculate publishing interval. + revisedPublishingInterval = CalculatePublishingInterval(requestedPublishingInterval); + + // calculate the keep alive count. + revisedMaxKeepAliveCount = CalculateKeepAliveCount(revisedPublishingInterval, requestedMaxKeepAliveCount); + + // calculate the lifetime count. + revisedLifetimeCount = CalculateLifetimeCount(revisedPublishingInterval, revisedMaxKeepAliveCount, requestedLifetimeCount); + + // calculate the max notification count. + maxNotificationsPerPublish = CalculateMaxNotificationsPerPublish(maxNotificationsPerPublish); + + // create the subscription. + subscription = CreateSubscription( + context, + subscriptionId, + revisedPublishingInterval, + revisedLifetimeCount, + revisedMaxKeepAliveCount, + maxNotificationsPerPublish, + priority, + publishingEnabled); + + lock (m_lock) + { + // save subscription. + m_subscriptions.Add(subscriptionId, subscription); + + // create/update publish queue. + SessionPublishQueue queue = null; + + if (!m_publishQueues.TryGetValue(session.Id, out queue)) + { + m_publishQueues[session.Id] = queue = new SessionPublishQueue(m_server, session, m_maxPublishRequestCount); + } + + queue.Add(subscription); + + // get the count for the diagnostics. + publishingIntervalCount = GetPublishingIntervalCount(); + } + + lock (m_statusMessagesLock) + { + Queue messagesQueue = null; + if (!m_statusMessages.TryGetValue(session.Id, out messagesQueue)) + { + m_statusMessages[session.Id] = new Queue(); + } + } + + lock (m_server.DiagnosticsWriteLock) + { + ServerDiagnosticsSummaryDataType diagnostics = m_server.ServerDiagnostics; + diagnostics.CurrentSubscriptionCount++; + diagnostics.CumulatedSubscriptionCount++; + diagnostics.PublishingIntervalCount = publishingIntervalCount; + } + + if (context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + diagnostics.CurrentSubscriptionsCount++; + } + } + + // raise subscription event. + RaiseSubscriptionEvent(subscription, false); + } + + /// + /// Deletes group of subscriptions. + /// + public void DeleteSubscriptions( + OperationContext context, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + bool diagnosticsExist = false; + results = new StatusCodeCollection(subscriptionIds.Count); + diagnosticInfos = new DiagnosticInfoCollection(subscriptionIds.Count); + + foreach (uint subscriptionId in subscriptionIds) + { + try + { + StatusCode result = DeleteSubscription(context, subscriptionId); + results.Add(result); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + catch (Exception e) + { + ServiceResult result = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, String.Empty); + results.Add(result.Code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, result); + diagnosticInfos.Add(diagnosticInfo); + diagnosticsExist = true; + } + } + } + + if (!diagnosticsExist) + { + diagnosticInfos.Clear(); + } + } + + /// + /// Publishes a subscription. + /// + public NotificationMessage Publish( + OperationContext context, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + AsyncPublishOperation operation, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications, + out StatusCodeCollection acknowledgeResults, + out DiagnosticInfoCollection acknowledgeDiagnosticInfos) + { + availableSequenceNumbers = null; + moreNotifications = false; + + // get publish queue for session. + SessionPublishQueue queue = null; + + lock (m_lock) + { + if (!m_publishQueues.TryGetValue(context.Session.Id, out queue)) + { + if (m_subscriptions.Count == 0) + { + throw new ServiceResultException(StatusCodes.BadNoSubscription); + } + + throw new ServiceResultException(StatusCodes.BadSessionClosed); + } + } + + // acknowlege previous messages. + queue.Acknowledge( + context, + subscriptionAcknowledgements, + out acknowledgeResults, + out acknowledgeDiagnosticInfos); + + // update diagnostics. + if (context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + diagnostics.CurrentPublishRequestsInQueue++; + } + } + + // save results for asynchrounous operation. + if (operation != null) + { + operation.Response.Results = acknowledgeResults; + operation.Response.DiagnosticInfos = acknowledgeDiagnosticInfos; + } + + // gets the next message that is ready to publish. + NotificationMessage message = GetNextMessage( + context, + queue, + operation, + out subscriptionId, + out availableSequenceNumbers, + out moreNotifications); + + // if no message and no async operation then a timeout occurred. + if (message == null && operation == null) + { + throw new ServiceResultException(StatusCodes.BadTimeout); + } + + // return message. + return message; + } + + /// + /// Called when a subscription expires. + /// + /// The subscription. + internal void SubscriptionExpired(Subscription subscription) + { + lock (m_statusMessagesLock) + { + StatusMessage message = new StatusMessage(); + message.SubscriptionId = subscription.Id; + message.Message = subscription.PublishTimeout(); + + Queue queue = null; + + if (subscription.SessionId != null && m_statusMessages.TryGetValue(subscription.SessionId, out queue)) + { + queue.Enqueue(message); + } + } + } + + /// + /// Completes the publish. + /// + /// The context. + /// The asynchronous operation. + /// + /// True if successful. False if the request has been requeued. + /// + public bool CompletePublish( + OperationContext context, + AsyncPublishOperation operation) + { + // get publish queue for session. + SessionPublishQueue queue = null; + + lock (m_lock) + { + if (!m_publishQueues.TryGetValue(context.Session.Id, out queue)) + { + throw new ServiceResultException(StatusCodes.BadSessionClosed); + } + } + + uint subscriptionId = 0; + UInt32Collection availableSequenceNumbers = null; + bool moreNotifications = false; + + NotificationMessage message = null; + + Utils.Trace("Publish #{0} ReceivedFromClient", context.ClientHandle); + bool requeue = false; + + do + { + // wait for a subscription to publish. + Subscription subscription = queue.CompletePublish(requeue, operation, operation.Calldata); + + if (subscription == null) + { + return false; + } + + subscriptionId = subscription.Id; + moreNotifications = false; + + // publish notifications. + try + { + requeue = false; + + message = subscription.Publish( + context, + out availableSequenceNumbers, + out moreNotifications); + + // a null message indicates a false alarm and that there were no notifications + // to publish and that the request needs to be requeued. + if (message != null) + { + break; + } + + Utils.Trace("Publish False Alarm - Request #{0} Requeued.", context.ClientHandle); + requeue = true; + } + finally + { + queue.PublishCompleted(subscription, moreNotifications); + } + } + while (requeue); + + // fill in response if operation completed. + if (message != null) + { + operation.Response.SubscriptionId = subscriptionId; + operation.Response.AvailableSequenceNumbers = availableSequenceNumbers; + operation.Response.MoreNotifications = moreNotifications; + operation.Response.NotificationMessage = message; + + // update diagnostics. + if (context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + diagnostics.CurrentPublishRequestsInQueue--; + } + } + } + + return true; + } + + /// + /// Publishes a subscription. + /// + public NotificationMessage GetNextMessage( + OperationContext context, + SessionPublishQueue queue, + AsyncPublishOperation operation, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications) + { + subscriptionId = 0; + availableSequenceNumbers = null; + moreNotifications = false; + + NotificationMessage message = null; + + try + { + Utils.Trace("Publish #{0} ReceivedFromClient", context.ClientHandle); + + // check for status messages. + lock (m_statusMessagesLock) + { + Queue statusQueue = null; + + if (m_statusMessages.TryGetValue(context.SessionId, out statusQueue)) + { + if (statusQueue.Count > 0) + { + StatusMessage status = statusQueue.Dequeue(); + subscriptionId = status.SubscriptionId; + return status.Message; + } + } + } + + bool requeue = false; + + do + { + // wait for a subscription to publish. + Subscription subscription = queue.Publish( + context.ClientHandle, + context.OperationDeadline, + requeue, + operation); + + if (subscription == null) + { + Utils.Trace("Publish #{0} Timeout", context.ClientHandle); + return null; + } + + subscriptionId = subscription.Id; + moreNotifications = false; + + // publish notifications. + try + { + requeue = false; + + message = subscription.Publish( + context, + out availableSequenceNumbers, + out moreNotifications); + + // a null message indicates a false alarm and that there were no notifications + // to publish and that the request needs to be requeued. + if (message != null) + { + break; + } + + Utils.Trace("Publish False Alarm - Request #{0} Requeued.", context.ClientHandle); + requeue = true; + } + finally + { + queue.PublishCompleted(subscription, moreNotifications); + } + } + while (requeue); + } + finally + { + // update diagnostics. + if (context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + diagnostics.CurrentPublishRequestsInQueue--; + } + } + } + + return message; + } + + /// + /// Modifies an existing subscription. + /// + public void ModifySubscription( + OperationContext context, + uint subscriptionId, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + revisedPublishingInterval = requestedPublishingInterval; + revisedLifetimeCount = requestedLifetimeCount; + revisedMaxKeepAliveCount = requestedMaxKeepAliveCount; + + uint publishingIntervalCount = 0; + + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + double publishingInterval = subscription.PublishingInterval; + + // calculate publishing interval. + revisedPublishingInterval = CalculatePublishingInterval(requestedPublishingInterval); + + // calculate the keep alive count. + revisedMaxKeepAliveCount = CalculateKeepAliveCount(revisedPublishingInterval, requestedMaxKeepAliveCount); + + // calculate the lifetime count. + revisedLifetimeCount = CalculateLifetimeCount(revisedPublishingInterval, revisedMaxKeepAliveCount, requestedLifetimeCount); + + // calculate the max notification count. + maxNotificationsPerPublish = CalculateMaxNotificationsPerPublish(maxNotificationsPerPublish); + + // update the subscription. + subscription.Modify( + context, + revisedPublishingInterval, + revisedLifetimeCount, + revisedMaxKeepAliveCount, + maxNotificationsPerPublish, + priority); + + // get the count for the diagnostics. + publishingIntervalCount = GetPublishingIntervalCount(); + + lock (m_server.DiagnosticsWriteLock) + { + ServerDiagnosticsSummaryDataType diagnostics = m_server.ServerDiagnostics; + diagnostics.PublishingIntervalCount = publishingIntervalCount; + } + } + + /// + /// Sets the publishing mode for a set of subscriptions. + /// + public void SetPublishingMode( + OperationContext context, + bool publishingEnabled, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + bool diagnosticsExist = false; + results = new StatusCodeCollection(subscriptionIds.Count); + diagnosticInfos = new DiagnosticInfoCollection(subscriptionIds.Count); + + for (int ii = 0; ii < subscriptionIds.Count; ii++) + { + try + { + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionIds[ii], out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + // update the subscription. + subscription.SetPublishingMode(context, publishingEnabled); + + // save results. + results.Add(StatusCodes.Good); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + diagnosticInfos.Add(null); + } + } + catch (Exception e) + { + ServiceResult result = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, String.Empty); + results.Add(result.Code); + + if ((context.DiagnosticsMask & DiagnosticsMasks.OperationAll) != 0) + { + DiagnosticInfo diagnosticInfo = ServerUtils.CreateDiagnosticInfo(m_server, context, result); + diagnosticInfos.Add(diagnosticInfo); + diagnosticsExist = true; + } + } + + if (!diagnosticsExist) + { + diagnosticInfos.Clear(); + } + } + } + + /// + /// Attaches a groups a subscriptions to a different sesssion. + /// + public void TransferSubscriptions( + OperationContext context, + UInt32Collection subscriptionIds, + out TransferResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = new TransferResultCollection(); + diagnosticInfos = new DiagnosticInfoCollection(); + + for (int ii = 0; ii < subscriptionIds.Count; ii++) + { + TransferResult result = new TransferResult(); + + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionIds[ii], out subscription)) + { + result.StatusCode = StatusCodes.BadSubscriptionIdInvalid; + continue; + } + } + + result.StatusCode = StatusCodes.BadNotImplemented; + } + } + + /// + /// Republishes a previously published notification message. + /// + public NotificationMessage Republish( + OperationContext context, + uint subscriptionId, + uint retransmitSequenceNumber) + { + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + // fetch the message. + return subscription.Republish(context, retransmitSequenceNumber); + } + + /// + /// Updates the triggers for the monitored item. + /// + public void SetTriggering( + OperationContext context, + uint subscriptionId, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos) + { + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + // update the triggers. + subscription.SetTriggering( + context, + triggeringItemId, + linksToAdd, + linksToRemove, + out addResults, + out addDiagnosticInfos, + out removeResults, + out removeDiagnosticInfos); + } + + /// + /// Adds monitored items to a subscription. + /// + public void CreateMonitoredItems( + OperationContext context, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + int monitoredItemCountIncrement = 0; + + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + int currentMonitoredItemCount = subscription.MonitoredItemCount; + + // create the items. + subscription.CreateMonitoredItems( + context, + timestampsToReturn, + itemsToCreate, + out results, + out diagnosticInfos); + + monitoredItemCountIncrement = subscription.MonitoredItemCount - currentMonitoredItemCount; + + // update diagnostics. + if (context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + UpdateCurrentMonitoredItemsCount(diagnostics, monitoredItemCountIncrement); + } + } + } + + /// + /// Modifies monitored items in a subscription. + /// + public void ModifyMonitoredItems( + OperationContext context, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + // modify the items. + subscription.ModifyMonitoredItems( + context, + timestampsToReturn, + itemsToModify, + out results, + out diagnosticInfos); + } + + /// + /// Deletes the monitored items in a subscription. + /// + public void DeleteMonitoredItems( + OperationContext context, + uint subscriptionId, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + int monitoredItemCountIncrement = 0; + + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + int currentMonitoredItemCount = subscription.MonitoredItemCount; + + // create the items. + subscription.DeleteMonitoredItems( + context, + monitoredItemIds, + out results, + out diagnosticInfos); + + monitoredItemCountIncrement = subscription.MonitoredItemCount - currentMonitoredItemCount; + + // update diagnostics. + if (context.Session != null) + { + lock (context.Session.DiagnosticsLock) + { + SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics; + UpdateCurrentMonitoredItemsCount(diagnostics, monitoredItemCountIncrement); + } + } + } + + /// + /// Changes the monitoring mode for a set of items. + /// + public void SetMonitoringMode( + OperationContext context, + uint subscriptionId, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + // find subscription. + Subscription subscription = null; + + lock (m_lock) + { + if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) + { + throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid); + } + } + + // create the items. + subscription.SetMonitoringMode( + context, + monitoringMode, + monitoredItemIds, + out results, + out diagnosticInfos); + } + #endregion + + #region Protected Methods + /// + /// Calculates the publishing interval. + /// + protected virtual double CalculatePublishingInterval(double publishingInterval) + { + if (Double.IsNaN(publishingInterval) || publishingInterval < m_minPublishingInterval) + { + publishingInterval = m_minPublishingInterval; + } + + if ( publishingInterval > m_maxPublishingInterval) + { + publishingInterval = m_maxPublishingInterval; + } + + if (publishingInterval < m_publishingResolution) + { + publishingInterval = m_publishingResolution; + } + + if (publishingInterval % m_publishingResolution != 0) + { + publishingInterval = (((int)publishingInterval)/((int)m_publishingResolution)+1)*m_publishingResolution; + } + + return publishingInterval; + } + + /// + /// Calculates the keep alive count. + /// + protected virtual uint CalculateKeepAliveCount(double publishingInterval, uint keepAliveCount) + { + // set default. + if (keepAliveCount == 0) + { + keepAliveCount = 3; + } + + double keepAliveInterval = keepAliveCount*publishingInterval; + + // keep alive interval cannot be longer than the max subscription lifetime. + if (keepAliveInterval > m_maxSubscriptionLifetime) + { + keepAliveCount = (uint)(m_maxSubscriptionLifetime/publishingInterval); + + if (keepAliveCount < UInt32.MaxValue) + { + if (m_maxSubscriptionLifetime%publishingInterval != 0) + { + keepAliveCount++; + } + } + + keepAliveInterval = keepAliveCount*publishingInterval; + } + + // the time between publishes cannot exceed the max publishing interval. + if (keepAliveInterval > m_maxPublishingInterval) + { + keepAliveCount = (uint)(m_maxPublishingInterval/publishingInterval); + + if (keepAliveCount < UInt32.MaxValue) + { + if (m_maxPublishingInterval % publishingInterval != 0) + { + keepAliveCount++; + } + } + } + + return keepAliveCount; + } + + /// + /// Calculates the lifetime count. + /// + protected virtual uint CalculateLifetimeCount(double publishingInterval, uint keepAliveCount, uint lifetimeCount) + { + double lifetimeInterval = lifetimeCount*publishingInterval; + + // lifetime cannot be longer than the max subscription lifetime. + if (lifetimeInterval > m_maxSubscriptionLifetime) + { + lifetimeCount = (uint)(m_maxSubscriptionLifetime/publishingInterval); + + if (lifetimeCount < UInt32.MaxValue) + { + if (m_maxSubscriptionLifetime % publishingInterval != 0) + { + lifetimeCount++; + } + } + } + + // the lifetime must be greater than the keepalive. + if (keepAliveCount < UInt32.MaxValue / 3) + { + if (keepAliveCount * 3 > lifetimeCount) + { + lifetimeCount = keepAliveCount * 3; + } + + lifetimeInterval = lifetimeCount * publishingInterval; + } + else + { + lifetimeCount = UInt32.MaxValue; + lifetimeInterval = Double.MaxValue; + } + + // apply the minimum. + if (m_minSubscriptionLifetime > publishingInterval && m_minSubscriptionLifetime > lifetimeInterval) + { + lifetimeCount = (uint)(m_minSubscriptionLifetime/publishingInterval); + + if (lifetimeCount < UInt32.MaxValue) + { + if (m_minSubscriptionLifetime%publishingInterval != 0) + { + lifetimeCount++; + } + } + } + + return lifetimeCount; + } + + /// + /// Calculates the maximum number of notifications per publish. + /// + protected virtual uint CalculateMaxNotificationsPerPublish(uint maxNotificationsPerPublish) + { + if (maxNotificationsPerPublish == 0 || maxNotificationsPerPublish > m_maxNotificationsPerPublish) + { + return m_maxNotificationsPerPublish; + } + + return maxNotificationsPerPublish; + } + + /// + /// Creates a new instance of a subscription. + /// + protected virtual Subscription CreateSubscription( + OperationContext context, + uint subscriptionId, + double publishingInterval, + uint lifetimeCount, + uint keepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + bool publishingEnabled) + { + Subscription subscription = new Subscription( + m_server, + context.Session, + subscriptionId, + publishingInterval, + lifetimeCount, + keepAliveCount, + maxNotificationsPerPublish, + priority, + publishingEnabled, + m_maxMessageCount); + + return subscription; + } + #endregion + + #region Private Methods + /// + /// Periodically checks if the sessions have timed out. + /// + private void PublishSubscriptions(object data) + { + try + { + Utils.Trace("Server: Publish Subscriptions Thread Started."); + + int sleepCycle = Convert.ToInt32(data, CultureInfo.InvariantCulture); + int timeToWait = sleepCycle; + + do + { + DateTime start = DateTime.UtcNow; + + SessionPublishQueue[] queues = null; + Subscription[] abandonedSubscriptions = null; + + lock (m_lock) + { + // collect active session queues. + queues = new SessionPublishQueue[m_publishQueues.Count]; + m_publishQueues.Values.CopyTo(queues, 0); + + // collect abandoned subscriptions. + if (m_abandonedSubscriptions != null && m_abandonedSubscriptions.Count > 0) + { + abandonedSubscriptions = new Subscription[m_abandonedSubscriptions.Count]; + + for (int ii = 0; ii < abandonedSubscriptions.Length; ii++) + { + abandonedSubscriptions[ii] = m_abandonedSubscriptions[ii]; + } + } + } + + // check the publish timer for each subscription. + for (int ii = 0; ii < queues.Length; ii++) + { + queues[ii].PublishTimerExpired(); + } + + // check the publish timer for each abandoned subscription. + if (abandonedSubscriptions != null) + { + List subscriptionsToDelete = new List(); + + for (int ii = 0; ii < abandonedSubscriptions.Length; ii++) + { + Subscription subscription = abandonedSubscriptions[ii]; + + if (subscription.PublishTimerExpired() != PublishingState.Expired) + { + continue; + } + + if (subscriptionsToDelete == null) + { + subscriptionsToDelete = new List(); + } + + subscriptionsToDelete.Add(subscription); + SubscriptionExpired(subscription); + Utils.Trace("Server: Abandoned Subscription '{0}' Delete Scheduled.", subscription.Id); + } + + // schedule cleanup on a background thread. + if (subscriptionsToDelete.Count > 0) + { + lock (m_lock) + { + for (int ii = 0; ii < subscriptionsToDelete.Count; ii++) + { + m_abandonedSubscriptions.Remove(subscriptionsToDelete[ii]); + } + } + + CleanupSubscriptions(m_server, subscriptionsToDelete); + } + } + + if (m_shutdownEvent.WaitOne(timeToWait)) + { + Utils.Trace("Server: Publish Subscriptions Thread Exited Normally."); + break; + } + + int delay = (int)(DateTime.UtcNow - start).TotalMilliseconds; + timeToWait = sleepCycle; + } + while (true); + } + catch (Exception e) + { + Utils.Trace(e, "Server: Publish Subscriptions Thread Exited Unexpectedly"); + } + } + + /// + /// Cleanups the subscriptions. + /// + /// The server. + /// The subscriptions to delete. + internal static void CleanupSubscriptions(IServerInternal server, IList subscriptionsToDelete) + { + if (subscriptionsToDelete != null && subscriptionsToDelete.Count > 0) + { + Utils.Trace("Server: {0} Subscriptions scheduled for delete.", subscriptionsToDelete.Count); + + Task.Run(() => + { + CleanupSubscriptions(new object[] { server, subscriptionsToDelete }); + }); + } + } + + /// + /// Deletes any expired subscriptions. + /// + internal static void CleanupSubscriptions(object data) + { + try + { + Utils.Trace("Server: CleanupSubscriptions Task Started"); + + object[] args = (object[])data; + + IServerInternal server = (IServerInternal)args[0]; + List subscriptions = (List)args[1]; + + foreach (Subscription subscription in subscriptions) + { + server.DeleteSubscription(subscription.Id); + } + + Utils.Trace("Server: CleanupSubscriptions Task Completed"); + } + catch (Exception e) + { + Utils.Trace(e, "Server: CleanupSubscriptions Task Halted Unexpectedly"); + } + } + #endregion + + #region StatusMessage Class + private class StatusMessage + { + public uint SubscriptionId; + public NotificationMessage Message; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private long m_lastSubscriptionId; + private IServerInternal m_server; + private double m_minPublishingInterval; + private double m_maxPublishingInterval; + private int m_publishingResolution; + private uint m_maxSubscriptionLifetime; + private uint m_minSubscriptionLifetime; + private uint m_maxMessageCount; + private uint m_maxNotificationsPerPublish; + private int m_maxPublishRequestCount; + private int m_maxSubscriptionCount; + private Dictionary m_subscriptions; + private List m_abandonedSubscriptions; + private Dictionary> m_statusMessages; + private object m_statusMessagesLock = new object(); + private Dictionary m_publishQueues; + private ManualResetEvent m_shutdownEvent; + + private object m_eventLock = new object(); + private event SubscriptionEventHandler m_SubscriptionCreated; + private event SubscriptionEventHandler m_SubscriptionDeleted; + #endregion + } + + /// + /// Provides access to the subscription manager within the server. + /// + /// + /// Sinks that receive these events must not block the thread. + /// + public interface ISubscriptionManager + { + /// + /// Raised after a new subscription is created. + /// + event SubscriptionEventHandler SubscriptionCreated; + + /// + /// Raised before a subscription is deleted. + /// + event SubscriptionEventHandler SubscriptionDeleted; + + /// + /// Returns all of the subscriptions known to the subscription manager. + /// + /// A list of the subscriptions. + IList GetSubscriptions(); + } + + /// + /// The delegate for functions used to receive subscription related events. + /// + /// The subscription that was affected. + /// True if the subscription was deleted. + public delegate void SubscriptionEventHandler(Subscription subscription, bool deleted); +} diff --git a/IOB-OPC-UA/Licenses/OPC Foundation RCL License.txt b/IOB-OPC-UA/Licenses/OPC Foundation RCL License.txt new file mode 100644 index 00000000..158d2caa --- /dev/null +++ b/IOB-OPC-UA/Licenses/OPC Foundation RCL License.txt @@ -0,0 +1,549 @@ +https://opcfoundation.org/license/rcl.html + + RCL License + +Reciprocal Community License 1.00 (RCL1.00) +Version 1.00, June 24, 2009 +Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved. + +PREAMBLE + +The Reciprocal Community License (RCL) is based on the concept of +reciprocity or, if you prefer, fairness. + +The RCL is adapted from the Open Source Reciprocal Public License (RPL) +where the “Public” in the Open Source RPL license is replaced by the +“Community” in the RCL License. In short, the RPL license grew out of a +desire to close loopholes in previous open source licenses, loopholes +that allowed parties to acquire open source software and derive +financial benefit from it without having to release their improvements +or derivatives to the community which enabled them. This occurred any +time an entity did not release their application to a "third party". +While there is a certain freedom in this model of licensing, it struck +the authors of the RPL as being unfair to the open source community at +large and to the original authors of the works in particular. After all, +bug fixes, extensions, and meaningful and valuable derivatives were not +consistently faster, growth and expansion of the overall open source +software base. + +While you should clearly read and understand the entire license, the +essence of the RCL is found in two definitions: "Deploy" and "Required +Components". + +Regarding deployment, under the RCL your changes, bug fixes, extensions, +etc. must be made available to the community when you Deploy in any form +-- either internally or to an outside party. + +Once you start running the software you have to start sharing the +software. Further, under the RCL all derivative work components you +author including schemas, scripts, source code, documentation, etc. -- +must be shared. You have to share the whole pie, not an isolated slice +of it. The authored components you must share are confined to the +original module licensed (e.g. SDK, stack, wrapper, proxy, utility, +etc.). You do not need to share any additional authored components that +you create that utilize the licensed component. This license is meant to +be friendly to commercial software vendors that must protect the IP in +their code. You are not expected to share your proprietary source code +that makes use of the module(s) licensed under this agreement. + +The specific terms and conditions of the license are defined in the +remainder of this document. + +1 LICENSE TERMS +1.1 General; Applicability & Definitions. This Reciprocal Community +License Version 1.00 ("License") applies to any programs or other works +as well as any and all updates or maintenance releases of said programs +or works ("Software") not already covered by this License which the +Software copyright holder ("Licensor") makes available containing a +License Notice (hereinafter defined) from the Licensor specifying or +allowing use or distribution under the terms of this License. As used in +this License: +1.2 "Contributor" means any person or entity who created or contributed +to the creation of an Extension. +1.3 "Deploy" means to use, Serve, sublicense or distribute Licensed +Software other than for Your internal Research and/or Personal Use, and +includes without limitation, any and all internal use or distribution of +Licensed Software within Your business or organization other than for +Research and/or Personal Use, as well as direct or indirect sublicensing +or distribution of Licensed Software by You to any third party. +1.4 "Derivative Works" as used in this License is defined under U.S. +copyright law. +1.5 "Extensions" means any Modifications, Derivative Works, or Required +Components as those terms are defined in this License. +1.6 "License" means this Reciprocal Community License. +1.7 "License Notice" means any notice contained in EXHIBIT A. +1.8 "Licensed Software" means any Software licensed pursuant to this +License. Licensed Software also includes all previous Extensions from +any Contributor that You receive. +1.9 "Licensor" means the copyright holder of any Software previously not +covered by this License who releases the Software under the terms of +this License. +1.10 "Modifications" means any additions to or deletions from the +substance or structure of (i) a file containing Licensed Software, or +(ii) any new file that contains any part of Licensed Software. +1.11 "Original Licensor" means the Licensor that is the copyright holder +of the original work. For this license the Original Licensor is always +the OPC Foundation. +1.12 "Personal Use" means use of Licensed Software by an individual +solely for his or her personal, private and non-commercial purposes. +An individual's use of Licensed Software in his or her capacity as an +officer, employee, member, independent contractor or agent of a +corporation, business or organization (commercial or non-commercial) +does not qualify as Personal Use. +1.13 "Required Components" means any text, programs, scripts, schema, +interface definitions, control files, or other works created by You +which are required by a third party of average skill to successfully +install and run Licensed Software containing Your Modifications, or to +install and run Your Derivative Works. Required Components by this +definition are the supporting works that are necessary to utilize your +Modifications and Derivative Works. This does not include your +applications and supporting works that utilize the Licensed Software. +1.14 "Research" means investigation or experimentation for the purpose +of understanding the nature and limits of the Licensed Software and its +potential uses. +1.15 "Serve" means to deliver Licensed Software and/or Your Extensions +by means of a computer network to one or more computers for purposes of +execution of Licensed Software and/or Your Extensions. +1.16 "Software" means any computer programs or other works as well as +any updates or maintenance releases of those programs or works which are +distributed publicly by Licensor. +1.17 "Source Code" means the preferred form for making modifications to +the Licensed Software and/or Your Extensions, including all modules +contained therein, plus any associated text, interface definition files, +scripts used to control compilation and installation of an executable +program or other components required by a third party of average skill +to build a running version of the Licensed Software or Your Extensions. +1.18 "User-Visible Attribution Notice" means any notice contained in +EXHIBIT B. +1.19 "You" or "Your" means an individual or a legal entity exercising +rights under this License. For legal entities, "You" or "Your" includes +any entity which controls, is controlled by, or is under common control +with, You, where "control" means (a) the power, direct or indirect, to +cause the direction or management of such entity, whether by contract or +otherwise, or (b) ownership of fifty percent (50%) or more of the +outstanding shares or beneficial ownership of such entity. + +2.0 Acceptance Of License. You are not required to accept this License +since you have not signed it, however nothing else grants you permission +to use, copy, distribute, modify, or create derivatives of either the +Software or any Extensions created by a Contributor. These actions are +prohibited by law if you do not accept this License. Therefore, by +performing any of these actions You indicate Your acceptance of this +License and Your agreement to be bound by all its terms and conditions. +IF YOU DO NOT AGREE WITH ALL THE TERMS AND CONDITIONS OF THIS LICENSE DO +NOT USE, MODIFY, CREATE DERIVATIVES, OR DISTRIBUTE THE SOFTWARE. IF IT +IS IMPOSSIBLE FOR YOU TO COMPLY WITH ALL THE TERMS AND CONDITIONS OF +THIS LICENSE THEN YOU CAN NOT USE, MODIFY, CREATE DERIVATIVES, OR +DISTRIBUTE THE SOFTWARE. + +3.0 Grant of License From Licensor. Subject to the terms and conditions +of this License, Licensor hereby grants You a world-wide, royalty-free, +non- exclusive license, subject to Licensor's intellectual property +rights, and any third party intellectual property claims derived from +the Licensed Software under this License, to do the following: + +3.1 Use, reproduce, modify, display, and perform Licensed Software and +Your Extensions in both Source Code form or as an executable program. +You may also sublicense and distribute Licensed Software and Your +Extensions as an executable program. OPC Foundation Corporate Members +may also sublicense and distribute Licensed Software and Your Extensions +in Source Code form. + +3.2 Create Derivative Works (as that term is defined under U.S. +copyright law) of Licensed Software. + +3.3 Under claims of patents now or hereafter owned or controlled by +Licensor, to make, use, have made, and/or otherwise dispose of Licensed +Software or portions thereof, but solely to the extent that any such +claim is necessary to enable You to make, use, have made, and/or +otherwise dispose of Licensed Software or portions thereof. + +3.4 Licensor reserves the right to release new versions of the Software +with different features, specifications, capabilities, functions, +licensing terms, general availability or other characteristics. Title, +ownership rights, and intellectual property rights in and to the +Licensed Software shall remain in Licensor and/or its Contributors. + +4.0 Grant of License From Contributor. By application of the provisions +in Section 6 below, each Contributor hereby grants You a world-wide, +royalty- free, non-exclusive license, subject to said Contributor's +intellectual property rights, and any third party intellectual property +claims derived from the Licensed Software under this License, to do the +following: + +4.1 Use, reproduce, modify, display and perform any Extensions Deployed +by such Contributor or portions thereof, in both Source Code form or as +an executable program, either on an unmodified basis or as part of +Derivative Works. You may also sublicense and distribute Extensions +Deployed by such Contributor or portions thereof, as an executable +program. OPC Foundation Corporate Members may also sublicense and +distribute Extensions Deployed by such Contributor or portions +thereof,in Source Code form. + +4.2 Under claims of patents now or hereafter owned or controlled by +Contributor, to make, use, have made, and/or otherwise dispose of +Extensions or portions thereof, but solely to the extent that any such +claim is necessary to enable You to make, use, have made, and/or +otherwise dispose of Licensed Software or portions thereof. + +5.0 Exclusions From License Grant. Nothing in this License shall be +deemed to grant any rights to trademarks, copyrights, patents, trade +secrets or any other intellectual property of Licensor or any +Contributor except as expressly stated herein. Except as expressly +stated in Sections 3 and 4, no other patent rights, express or implied, +are granted herein. Your Extensions may require additional patent +licenses from Licensor or Contributors which each may grant in its sole +discretion. No right is granted to the trademarks of Licensor or any +Contributor even if such marks are included in the Licensed Software. +Nothing in this License shall be interpreted to prohibit Licensor from +licensing under different terms from this License any code that Licensor +otherwise would have a right to license. + +5.1 You expressly acknowledge and agree that although Licensor and each +Contributor grants the licenses to their respective portions of the +Licensed Software set forth herein, no assurances are provided by +Licensor or any Contributor that the Licensed Software does not infringe +the patent or other intellectual property rights of any other entity. +Licensor and each Contributor disclaim any liability to You for claims +brought by any other entity based on infringement of intellectual +property rights or otherwise. As a condition to exercising the rights +and licenses granted hereunder, You hereby assume sole responsibility to +secure any other intellectual property rights needed, if any. For +example, if a third party patent license is required to allow You to +distribute the Licensed Software, it is Your responsibility to acquire +that license before distributing the Licensed Software. + +6.0 Your Obligations And Grants. In consideration of, and as an express +condition to, the licenses granted to You under this License You hereby +agree that any Modifications, Derivative Works, or Required Components +(collectively Extensions) that You create or to which You contribute are +governed by the terms of this License including, without limitation, +Section 4. Any Extensions that You create or to which You contribute +must be Deployed under the terms of this License or a future version of +this License released under Section 7. You hereby grant to Licensor and +all third parties a world-wide, non-exclusive, royalty-free license +under those intellectual property rights You own or control to use, +reproduce, display, perform, modify, create derivatives, sublicense, and +distribute Licensed Software, in any form. Any Extensions You make and +Deploy must have a distinct title so as to readily tell any subsequent +user or Contributor that the Extensions are by You. You must include a +copy of this License or directions on how to obtain a copy with every +copy of the Extensions You distribute. You agree not to offer or impose +any terms on any Source Code or executable version of the Licensed +Software, or its Extensions that alter or restrict the applicable +version of this License or the recipients' rights hereunder. +Additionally, you herby grant to the Original Licensor the right to use, +reproduce, display, perform, modify, create derivatives, sublicense, and +distribute Licensed Software, in any form, under the terms of this +license and/or any other license terms it sees fit. + +6.1 Availability of Source Code. You must make available, under the +terms of this License, the Source Code of any Extensions that You +Deploy, by uploading the Source Code directly to the website of the +Original Licensor. The Source Code for any version that You Deploy must +be made available within one (1) month of when you Deploy. You may not +charge a fee for any copy of the Source Code distributed under this +Section. At the sole discretion of the Original Licensor, some or all of +Your contributed Source Code may be included in a future baseline +version released by the Original Licensor. + +6.2 Description of Modifications. You must cause any Modifications that +You create or to which You contribute to be documented in the Source +Code, clearly describing the additions, changes or deletions You made. +You must include a prominent statement that the Modifications are +derived, directly or indirectly, from the Licensed Software and include +the names of the Licensor and any Contributor to the Licensed Software +in (i) the Source Code and (ii) in any notice displayed by the Licensed +Software You distribute or in related documentation in which You +describe the origin or ownership of the Licensed Software. You may not +modify or delete any pre-existing copyright notices, change notices or +License text in the Licensed Software without written permission of the +respective Licensor or Contributor. + +6.3 Intellectual Property Matters. +a. Third Party Claims. If You have knowledge that a license to a third +party's intellectual property right is required to exercise the rights +granted by this License, You must include a human-readable file with +Your distribution that describes the claim and the party making the +claim in sufficient detail that a recipient will know whom to contact. +b. Contributor APIs. If Your Extensions include an application +programming interface ("API") and You have knowledge of patent licenses +that are reasonably necessary to implement that API, You must also +include this information in a human-readable file supplied with Your +distribution. +c. Representations. You represent that, except as disclosed pursuant to +6.3(a) above, You believe that any Extensions You distribute are Your +original creations and that You have sufficient rights to grant the +rights conveyed by this License. + +6.4 Required Notices. + +a. License Text. You must duplicate this License or instructions on how +to acquire a copy in any documentation You provide along with the Source +Code of any Extensions You create or to which You contribute, wherever +You describe recipients' rights relating to Licensed Software. + +b. License Notice. You must duplicate any notice contained in EXHIBIT A +(the "License Notice") in each file of the Source Code of any copy You +distribute of the Licensed Software and Your Extensions. If You create +an Extension, You may add Your name as a Contributor to the Source Code +and accompanying documentation along with a description of the +contribution. If it is not possible to put the License Notice in a +particular Source Code file due to its structure, then You must include +such License Notice in a location where a user would be likely to look +for such a notice. + +c. User-Visible Attribution. You must duplicate any notice contained in +EXHIBIT B (the "User-Visible Attribution Notice") in each user-visible +display of the Licensed Software and Your Extensions which delineates +copyright, ownership, or similar attribution information. If You create +an Extension, You may add Your name as a Contributor, and add Your +attribution notice, as an equally visible and functional element of any +User-Visible Attribution Notice content. To ensure proper attribution, +You must also include such User-Visible Attribution Notice in at least +one location in the Software documentation where a user would be likely +to look for such notice. + +6.5 Additional Terms. You may choose to offer, and charge a fee for, +warranty, support, indemnity or liability obligations to one or more +recipients of Licensed Software. However, You may do so only on Your own +behalf, and not on behalf of the Licensor or any Contributor except as +permitted under other agreements between you and Licensor or +Contributor. You must make it clear that any such warranty, support, +indemnity or liability obligation is offered by You alone, and You +hereby agree to indemnify the Licensor and every Contributor for any +liability plus attorney fees, costs, and related expenses due to any +such action or claim incurred by the Licensor or such Contributor as a +result of warranty, support, indemnity or liability terms You offer. + +6.6 Conflicts With Other Licenses. Where any portion of Your Extensions, +by virtue of being Derivative Works of another product or similar +circumstance, fall under the terms of another license, the terms of that +license should be honored however You must also make Your Extensions +available under this License. If the terms of this License continue to +conflict with the terms of the other license you may write the Licensor +for permission to resolve the conflict in a fashion that remains +consistent with the intent of this License. Such permission will be +granted at the sole discretion of the Licensor. + +7.0 Versions of This License. Licensor may publish from time to time +revised versions of the License. Once Licensed Software has been +published under a particular version of the License, You may always +continue to use it under the terms of that version. You may also choose +to use such Licensed Software under the terms of any subsequent version +of the License published by Licensor. No one other than Licensor has the +right to modify the terms applicable to Licensed Software created under +this License. + +7.1 If You create or use a modified version of this License, which You +may do only in order to apply it to software that is not already +Licensed Software under this License, You must rename Your license so +that it is not confusingly similar to this License, and must make it +clear that Your license contains terms that differ from this License. In +so naming Your license, You may not use any trademark of Licensor or of +any Contributor. Should Your modifications to this License be limited to +alteration of a) Section 13.8 solely to modify the legal Jurisdiction or +Venue for disputes, b) EXHIBIT A solely to define License Notice text, +or c) to EXHIBIT B solely to define a User-Visible Attribution Notice, +You may continue to refer to Your License as the Reciprocal Community +License or simply the RCL. + +8.0 Disclaimer of Warranty. LICENSED SOFTWARE IS PROVIDED UNDER THIS +LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE +LICENSED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR +PURPOSE OR NON-INFRINGING. FURTHER THERE IS NO WARRANTY MADE AND ALL +IMPLIED WARRANTIES ARE DISCLAIMED THAT THE LICENSED SOFTWARE MEETS OR +COMPLIES WITH ANY DESCRIPTION OF PERFORMANCE OR OPERATION, SAID +COMPATIBILITY AND SUITABILITY BEING YOUR RESPONSIBILITY. LICENSOR +DISCLAIMS ANY WARRANTY, IMPLIED OREXPRESSED,THAT ANY CONTRIBUTOR'S +EXTENSIONS MEET ANY STANDARD OF COMPATIBILITY OR DESCRIPTION OF +PERFORMANCE. THE ENTIRE RISK AS TO THE QUALITY ANDPERFORMANCE OF THE +LICENSED SOFTWARE IS WITH YOU. SHOULD LICENSED SOFTWARE PROVE DEFECTIVE +IN ANY RESPECT, YOU (AND NOT THE LICENSOR OR ANY OTHER CONTRIBUTOR) +ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. UNDER +THE TERMS OF THIS LICENSOR WILL NOT SUPPORT THIS SOFTWARE AND IS UNDER +NO OBLIGATION TO ISSUE UPDATES TO THIS SOFTWARE. LICENSOR HAS NO +KNOWLEDGE OF ERRANT CODE OR VIRUS IN THIS SOFTWARE, BUT DOES NOT WARRANT +THAT THE SOFTWARE IS FREE FROM SUCH ERRORS OR VIRUSES. THIS DISCLAIMER +OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF +LICENSED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +9.0 Limitation of Liability. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL +THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, +SHALL THE LICENSOR, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF LICENSED +SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY +PERSON FOR ANY INDIRECT,SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF +ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF +GOODWILL, WORK STOPPAGE, COMPUTERFAILURE OR MALFUNCTION, OR ANY AND ALL +OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN +INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF +LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY +RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENTAPPLICABLE LAW +PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THISEXCLUSION +AND LIMITATION MAY NOT APPLY TO YOU. + +10.0 Restricted Rights Legend. This Specification is provided with +Restricted Rights. Use, duplication or disclosure by the U.S. government +is subject to restrictions as set forth in (a) this Agreement pursuant +to DFARs 227.7202-3(a); (b) subparagraph (c)(1)(i) of the Rights in +Technical Data and Computer Software clause at DFARs 252.227-7013; or +(c) the Commercial Computer Software Restricted Rights clause at FAR +52.227-19 subdivision (c)(1) and (2), as applicable. Contractor / +manufacturer are the OPC Foundation,. 16101 N. 82nd Street, Suite 3B, +Scottsdale, AZ, 85260-1830 11.0 Responsibility for Claims. As between +Licensor and Contributors, each party is responsible for claims and +damages arising, directly or indirectly, out of its utilization of +rights under this License which specifically disclaims warranties and +limits any liability of the Licensor. This paragraph is to be used in +conjunction with and controlled by the Disclaimer Of Warranties of +Section 8, the Limitation Of Damages in Section 9, and the disclaimer +against use for High Risk Activities in Section 10. The Licensor has +thereby disclaimed all warranties and limited any damages that it is or +may be liable for. You agree to work with Licensor and Contributors to +distribute such responsibility on an equitable basis consistent with the +terms of this License including Sections 8, 9, and 10. Nothing herein is +intended or shall be deemed to constitute any admission of liability. + +12.0 Termination. This License and all rights granted hereunder will +terminate immediately in the event of the circumstances described in +Section 136 or if applicable law prohibits or restricts You from fully +and or specifically complying with Sections 3, 4 and/or 6, or prevents +the enforceability of any of those Sections, and You must immediately +discontinue any use of Licensed Software. + +12.1 Automatic Termination Upon Breach. This License and the rights +granted hereunder will terminate automatically if You fail to comply +with the terms herein and fail to cure such breach within thirty (30) +days of becoming aware of the breach. All sublicenses to the Licensed +Software that are properly granted shall survive any termination of this +License. Provisions that, by their nature, must remain in effect beyond +the termination of this License, shall survive. + +12.2 Termination Upon Assertion of Patent Infringement. If You initiate +litigation by asserting a patent infringement claim (excluding +declaratory judgment actions) against Licensor or a Contributor +(Licensor or Contributor against whom You file such an action is +referred to herein as "Respondent") alleging that Licensed Software +directly or indirectly infringes any patent, then any and all rights +granted by such Respondent to You under Sections 3 or 4 of this License +shall terminate prospectively upon sixty (60) days notice from +Respondent (the "Notice Period") unless within that Notice Period You +either agree in writing (i) to pay Respondent a mutually agreeable +reasonably royalty for Your past or future use of Licensed Software made +by such Respondent, or (ii) withdraw Your litigation claim with respect +to Licensed Software against such Respondent. If within said Notice +Period a reasonable royalty and payment arrangement are not mutually +agreed upon in writing by the parties or the litigation claim is not +withdrawn, the rights granted by Licensor to You under Sections 3 and 4 +automatically terminate at the expiration of said Notice Period. + +12.3 Reasonable Value of This License. If You assert a patent +infringement claim against Respondent alleging that Licensed Software +directly or indirectly infringes any patent where such claim is resolved +(such as by license or settlement) prior to the initiation of patent +infringement litigation, then the reasonable value of the licenses +granted by said Respondent under Sections 3 and 4 shall be taken into +account in determining the amount or value of any payment or license. + +12.4 No Retroactive Effect of Termination. In the event of termination +under this Section all end user license agreements (excluding licenses +to distributors and resellers) that have been validly granted by You or +any distributor hereunder prior to termination shall survive termination. + +13.0 Miscellaneous. + +13.1 U.S. Government End Users. The Licensed Software is a "commercial +item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), +consisting of "commercial computer software" and "commercial computer +software documentation," as such terms are used in 48 C.F.R. 12.212 +(Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 +through 227.7202-4 (June 1995), all U.S. Government End Users acquire +Licensed Software with only those rights set forth herein. + +13.2 Relationship of Parties. This License will not be construed as +creating an agency, partnership, joint venture, or any other form of +legal association between or among You, Licensor, or any Contributor, +and You will not represent to the contrary, whether expressly, by +implication, appearance, or otherwise. + +13.3 Independent Development. Nothing in this License will impair +Licensor's right to acquire, license, develop, subcontract, market, or +distribute technology or products that perform the same or similar +functions as, or otherwise compete with, Extensions that You may +develop, produce, market, or distribute. + +13.4 Consent To Breach Not Waiver. Failure by Licensor or Contributor to +enforce any provision of this License will not be deemed a waiver of +future enforcement of that or any other provision. + +13.5 Severability. This License represents the complete agreement +concerning the subject matter hereof. If any provision of this License +is held to be unenforceable, such provision shall be reformed only to +the extent necessary to make it enforceable. + +13.6 Inability to Comply Due to Statute or Regulation. If it is +impossible for You to comply with any of the terms of this License with +respect to some or all of the Licensed Software due to statute, judicial +order, or regulation, then You cannot use, modify, or distribute the +software. + +13.7 Export Restrictions. You may be restricted with respect to +downloading or otherwise acquiring, exporting, or reexporting the +Licensed Software or any underlying information or technology by United +States and other applicable laws and regulations. By downloading or by +otherwise obtaining the Licensed Software, You are agreeing to be +responsible for compliance with all applicable laws and regulations. + +13.8 Arbitration, Jurisdiction & Venue. This License shall be governed +by Minnesota law provisions (except to the extent applicable law, if +any, provides otherwise), excluding its conflict-of-law provisions. You +expressly agree that any dispute relating to this License shall be +submitted to binding arbitration under the rules then prevailing of the +American Arbitration Association. You further agree that Minnesota USA +is proper venue and grant such arbitration proceeding jurisdiction as +may be appropriate for purposes of resolving any dispute under this +License. Judgment upon any award made in arbitration may be entered and +enforced in any court of competent jurisdiction. The arbitrator shall +award attorney's fees and costs of arbitration to the prevailing party. +Should either party find it necessary to enforce its arbitration award +or seek specific performance of such award in a civil court of competent +jurisdiction, the prevailing party shall be entitled to reasonable +attorney's fees and costs. The application of the United Nations +Convention on Contracts for the International Sale of Goods is expressly +excluded. You and Licensor expressly waive any rights to a jury trial in +any litigation concerning Licensed Software or this License. Any law or +regulation that provides that the language of a contract shall be +construed against the drafter shall not apply to this License. + +13.9 Entire Agreement. This License constitutes the entire agreement +between the parties with respect to the subject matter hereof. + +EXHIBIT A + +The License Notice below must appear in each file of the Source Code of +any copy You distribute of the Licensed Software or any Extensions thereto: + +Unless explicitly acquired and licensed from Licensor under another +license, the contents of this file are subject to the Reciprocal +Community License ("RCL") Version 0.9, or subsequent versions as allowed +by the RCL, and You may not copy or use this file in either source code +or executable form, except in compliance with the terms and conditions +of the RCL. + +All software distributed under the RCL is provided strictly on an "AS +IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND +LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT +LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RCL for specific +language governing rights and limitations under the RCL. + +EXHIBIT B + +The User-Visible Attribution Notice below, when provided, must appear in +each user-visible display as defined in Section 6.4 (c): “Portions +copyright © by OPC Foundation, Inc. and licensed under the Reciprocal +Community License (RCL) + + diff --git a/IOB-OPC-UA/Licenses/OPC Foundation REDISTRIBUTABLES Agreement of Use.txt b/IOB-OPC-UA/Licenses/OPC Foundation REDISTRIBUTABLES Agreement of Use.txt new file mode 100644 index 00000000..26336ab1 --- /dev/null +++ b/IOB-OPC-UA/Licenses/OPC Foundation REDISTRIBUTABLES Agreement of Use.txt @@ -0,0 +1,159 @@ +https://opcfoundation.org/license/redistributables/1.3/ + + OPC REDISTRIBUTABLES Agreement of Use + +Version 1.3, February 06, 2017, OPC Foundation + +The terms and conditions of the Agreement apply to the Software +Deliverables including without limitation any OPC Foundation: + + * updates, + * supplements + * Internet-based services, and + * support services + +for the Software Deliverables, unless OPC Foundation specifies that any +other terms accompany such items, in which case the alternate terms +specified by OPC Foundation would apply. + +*BY USING THE SOURCE DELIVERABLES, YOU ACCEPT THE TERMS OF THIS +AGREEMENT. IF YOU DO NOT ACCEPT THE TERMS OF THIS AGREEMENT, DO NOT USE +THE SOFTWARE DELIVERABLES.* + +If you comply with this Agreement, you have the rights below. + + + 1. INSTALLATION AND USE RIGHTS. + +You may install and use any number of copies of the Software Deliverables. + + + 2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS. + +Distributable Code. The Software Deliverables contain compiled code that +you are permitted to distribute with programs you develop if you comply +with the terms below. + + 1. Right to Use and Distribute. + * You may copy and distribute all files that are part of this + Software Deliverables. + * Third Party Distribution. You may permit distributors of your + programs to copy and distribute the Software Deliverables as + part of those programs. + 2. Distribution Requirements. For any Software Deliverables you + distribute, you must: + 3. add significant primary functionality to it in your programs; + 4. require distributors and external end users to agree to terms that + protect it at least as much as this Agreement; + 5. display your valid copyright notice on your programs; and + 6. indemnify, defend, and hold harmless the OPC Foundation from any + claims, including attorneys’ fees, related to the distribution or + use of your programs. + 7. Distribution Restrictions. You may not: + * alter any copyright, trademark or patent notice in the Software + Deliverables; + * use the OPC Foundation’s trademarks in your programs’ names or + in a way that suggests your programs come from or are endorsed + by the OPC Foundation; + * include Software Deliverables in malicious, deceptive or + unlawful programs; + * modify or distribute the source code of any Software + Deliverables so that any part of it becomes subject to an + Excluded License. An Excluded License is one that requires, as a + condition of use, modification or distribution, that (1). the + code be disclosed or distributed in source code form; or (2) + permit or otherwise allow others to have the right to modify + such Software Deliverables; or + * create additional software components that directly link or + directly load the Software Deliverables without accepting the + corresponding source license for that Software Deliverable. + + + 3. SCOPE OF LICENSE. + +The Software Deliverables are licensed, not sold. This Agreement only +gives you some rights to use the Software Deliverables. The OPC +Foundation reserves all other rights. Unless applicable law gives you +more rights despite this limitation, you may use the software only as +expressly permitted in this Agreement. In doing so, you must comply with +any technical limitations in the Software Deliverables that only allow +you to use it in certain ways. You may not: + + * disclose the results of any benchmark tests of the Software + Deliverables to any third party without OPC Foundation’s prior + written approval; + * work around any technical limitations in the Software Deliverables; + * reverse engineer, decompile or disassemble the Software + Deliverables, except and only to the extent that applicable law + expressly permits, despite this limitation; + * make more copies of the Software Deliverables than specified in this + Agreement or allowed by applicable law, despite this limitation; + * publish the Software Deliverables for others to copy; or + * rent, lease or lend the Software Deliverables. + + + 4. BACKUP COPY. + +You may make one backup copy of the Software Deliverables. You may use +such copy only to reinstall the Software. + + + 5. DOCUMENTATION. + +Any person that has valid access to your computer or internal network +may copy and use the documentation related to the Software Deliverables +for your internal reference purposes. + + + 6. EXPORT RESTRICTIONS. + +The Software Deliverables are subject to United States export laws and +regulations. You must comply with all domestic and international export +laws and regulations that apply to the Software Deliverables. These laws +include restrictions on destinations, end users and end use. + + + 7. SUPPORT SERVICES. + +Because you accept the Software3 Deliverables from OPC Foundation “as +is,” OPC Foundation may not provide support services for it. + + + 8. ENTIRE AGREEMENT. + +This Agreement, and the terms for supplements, updates, Internet-based +services and support services that you use, are the entire Agreement for +the Software Deliverables and support services. + + + 10. LEGAL EFFECT + +This Agreement describes certain legal rights. You may have other rights +under the laws of your country. This Agreement does not change your +rights under the laws of your country if the laws of your country do not +permit it to do so. + + + 11. DISCLAIMER OF WARRANTY. + +THE SOFTWARE DELIVERABLES ARE LICENSED “AS-IS.” YOU BEAR THE RISK OF +USING THE SPECIFICATIONS. THE OPC FOUNDATION MAKES NO WARRANTY OF ANY +KIND, EXPRESSED OR IMPLIED, WITH REGARD TO THE SOFTWARE DELIVERABLES, +INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED +WARRANTY OF MERCHANTABILITY, OR WARRANTY OF FITNESS FOR A PARTICULAR +PURPOSE OR USE.YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL +LAWS THAT THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER +YOUR LOCAL LAWS, THE OPC FOUNDATION EXCLUDES THE IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +IN NO EVENT SHALL THE OPC FOUNDATION BE LIABLE FOR ERRORS CONTAINED IN +THE SOURCE DELIVERABLES OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, +REVENUE, DATA, OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN +CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THE SOFTWARE +DELIVERABLES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE USING THE SOFTWARE +DELIVERABLES IS BORNE BY YOU AND/OR THE USER. + +Copyright, OPC Foundation 1996-2020. All rights reserved. + diff --git a/IOB-OPC-UA/README.md b/IOB-OPC-UA/README.md new file mode 100644 index 00000000..9619d67c --- /dev/null +++ b/IOB-OPC-UA/README.md @@ -0,0 +1,93 @@ + +# Official OPC UA .NET Standard Stack from the OPC Foundation + +## Overview +This OPC UA reference implementation is targeting [.NET Standard](https://docs.microsoft.com/en-us/dotnet/standard/net-standard) specification. + +.NET Standard allows to develop apps that run on all common platforms available today, including Linux, iOS, Android (via Xamarin) and Windows 7/8/8.1/10 (including embedded/IoT editions) without requiring platform-specific modifications. + +One of the reference implementations inside this project has been certified for compliance through an OPC Foundation Certification Test Lab to prove its high quality. Fixes and enhancements since the certification process have been tested and verified for compliance using the Compliance Test Tool (CTT) V1.04. + +Furthermore, cloud applications and services (such as ASP.NET, DNX, Azure Websites, Azure Webjobs, Azure Nano Server and Azure Service Fabric) are also supported. + +More samples based on the official [Nuget](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/) packages can be found in the [OPC UA .NET Standard Samples](https://github.com/OPCFoundation/UA-.NETStandard-Samples) repository. For development there is also a [preview Nuget feed](https://opcfoundation.visualstudio.com/opcua-netstandard/_packaging?_a=feed&feed=opcua-preview%40Local) available. + +## For more information and license terms, see [here](http://opcfoundation.github.io/UA-.NETStandard). + +## Features included +##### Core and Libraries + +1. Fully ported Core OPC UA Stack and Libraries (Client, Server, Configuration, Complex Types & GDS assemblies). +2. Reference sample Server and Client. +3. X.509 [Certificate](Docs/Certificates.md) support for client and server authentication. +4. SHA-2 support (up to SHA512) including security profile Basic256Sha256, Aes128Sha256RsaOaep and Aes256Sha256RsaPss for configurations with high security needs. +5. Anonymous, username and X.509 certificate user authentication. +6. UA-TCP & HTTPS transports (client and server). +7. [Reverse Connect](Docs/ReverseConnect.md) for the UA-TCP transport (client and server). +8. Folder & OS-level (X509Store) [Certificate Stores](Docs/Certificates.md) with *Global Discovery Server* and *Server Push* support. +9. Sessions and Subscriptions. + +##### Samples and Nuget packages + +11. OPC UA [Reference Server](Applications/ReferenceServer) and [Reference Client](Applications/ReferenceClient) for .NET Framework. +12. OPC UA [Console Reference Server](Applications/ConsoleReferenceServer) for .NET Core. +13. The OPC UA [Reference Server](Applications/ReferenceServer/README.md) has been certified for compliance through an OPC Foundation Certification Test Lab. Fixes and enhancements since the certification process have been tested and verified for compliance using the Compliance Test Tool (CTT) Version [1.03.340.380](https://opcfoundation.org/developer-tools/certification-test-tools/opc-ua-compliance-test-tool-uactt/). + All releases are verified for compliance with the latest official Compliance Test Tool by the maintainers. +14. An official OPC UA [Nuget](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/) package of the core, client, server and configuration libraries is available for integration in .NET projects. + +## Project Information + +### General Project Info +[![Github top language](https://img.shields.io/github/languages/top/OPCFoundation/UA-.NETStandard)](https://github.com/OPCFoundation/UA-.NETStandard) +[![Github stars](https://img.shields.io/github/stars/OPCFoundation/UA-.NETStandard?style=flat)](https://github.com/OPCFoundation/UA-.NETStandard) +[![Github forks](https://img.shields.io/github/forks/OPCFoundation/UA-.NETStandard?style=flat)](https://github.com/OPCFoundation/UA-.NETStandard) +[![Github size](https://img.shields.io/github/repo-size/OPCFoundation/UA-.NETStandard?style=flat)](https://github.com/OPCFoundation/UA-.NETStandard) +[![Github release](https://img.shields.io/github/v/release/OPCFoundation/UA-.NETStandard?style=flat)](https://github.com/OPCFoundation/UA-.NETStandard/releases) +[![Nuget Downloads](https://img.shields.io/nuget/dt/OPCFoundation.NetStandard.Opc.Ua)](https://www.nuget.org/packages/OPCFoundation.NetStandard.Opc.Ua/) + +### Build Status +[![Build Status](https://opcfoundation.visualstudio.com/opcua-netstandard/_apis/build/status/OPCFoundation.UA-.NETStandard?branchName=master)](https://opcfoundation.visualstudio.com/opcua-netstandard/_build/latest?definitionId=11&branchName=master) +[![Build Status](https://img.shields.io/appveyor/build/opcfoundation-org/ua-netstandardlibrary/master?label=Appveyor)](https://ci.appveyor.com/project/opcfoundation-org/ua-netstandardlibrary) + +### Code Quality +[![Test Status](https://img.shields.io/azure-devops/tests/opcfoundation/opcua-netstandard/11?style=plastic)](https://opcfoundation.visualstudio.com/opcua-netstandard/_test/analytics?definitionId=11&contextType=build) +[![Coverage Status](https://img.shields.io/azure-devops/coverage/opcfoundation/opcua-netstandard/11/master?style=plastic)](https://codecov.io/gh/OPCFoundation/UA-.NETStandard/branch/master) + +## Getting Started +All the tools you need for .NET Standard come with the .NET Core tools. See [Get started with .NET Core](https://docs.microsoft.com/en-us/dotnet/articles/core/getting-started) for what you need. + +## How to build and run the reference samples in Visual Studio on Windows + +1. Open the UA Reference.sln solution file using Visual Studio 2017. +2. Choose a project in the Solution Explorer and set it with a right click as `Startup Project`. +3. Hit `F5` to build and execute the sample. + +## How to build and run the console samples on Windows, Linux and iOS +This section describes how to run the and **NetCoreReferenceServer** sample application. + +Please follow instructions in this [article](https://aka.ms/dotnetcoregs) to setup the dotnet command line environment for your platform. As of today .NET Core SDK 2.1 is required. + +### Prerequisites +1. Once the `dotnet` command is available, navigate to the root folder in your local copy of the repository and execute `dotnet restore UA Reference.sln`. This command calls into NuGet to restore the tree of dependencies. + +### Start the server +1. Open a command prompt. +2. Navigate to the folder **Applications/NetCoreReferenceServer**. +3. To run the server sample type `dotnet run --project NetCoreReferenceServer.csproj -a`. + - The server is now running and waiting for connections. + +## Remarks + +### Self signed certificates for the sample applications + +All required application certificates for OPC UA are created at the first start of each application in a directory or OS-level certificate store and remain in use until deleted from the store. Please read [Certificates](Docs/Certificates.md) for more information about certificates and stores + +### Local Discovery Server + +By default all sample applications are configured to register with a Local Discovery Server (LDS). A reference implementation of a LDS for Windows can be downloaded [here](https://opcfoundation.org/developer-tools/developer-kits-unified-architecture/local-discovery-server-lds). To setup trust with the LDS the certificates need to be exchanged or registration will fail. + +## Contributing + +We 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 we can accept your changes. The CLA and "I AGREE" button is automatically displayed when you perform the pull request. You can preview CLA [here](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf). diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Opc.Ua.Bindings.Https.csproj b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Opc.Ua.Bindings.Https.csproj new file mode 100644 index 00000000..eb2ee312 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Opc.Ua.Bindings.Https.csproj @@ -0,0 +1,51 @@ + + + + $(DefineConstants);NET_STANDARD + $(LibTargetFrameworks) + 6 + Opc.Ua.Bindings.Https + OPCFoundation.NetStandard.Opc.Ua.Bindings.Https + Opc.Ua.Bindings + OPC UA Https Binding Library + true + true + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..289dc8e4 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Properties/AssemblyInfo.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ +using System.Runtime.CompilerServices; + +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.Core.Tests, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.Core.Tests")] +#endif diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsServiceHost.cs b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsServiceHost.cs new file mode 100644 index 00000000..ee8f41e5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsServiceHost.cs @@ -0,0 +1,175 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 The OPC Foundation, Inc. All rights reserved. + * + * OPC Reciprocal Community License ("RCL") Version 1.00 + * + * Unless explicitly acquired and licensed from Licensor under another + * license, the contents of this file are subject to the Reciprocal + * Community License ("RCL") Version 1.00, or subsequent versions + * as allowed by the RCL, and You may not copy or use this file in either + * source code or executable form, except in compliance with the terms and + * conditions of the RCL. + * + * All software distributed under the RCL is provided strictly on an + * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RCL for specific + * language governing rights and limitations under the RCL. + * + * The complete license agreement can be found here: + * http://opcfoundation.org/License/RCL/1.00/ + * ======================================================================*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + + +namespace Opc.Ua.Bindings +{ + /// + /// Creates a new with + /// interface. + /// + public abstract class HttpsServiceHost : ITransportListenerFactory + { + /// + /// The protocol supported by the listener. + /// + public abstract string UriScheme { get; } + + /// + /// The method creates a new instance of a . + /// + /// The transport listener. + public abstract ITransportListener Create(); + + /// + /// + /// Create a new service host for UA HTTPS. + /// + public List CreateServiceHost( + ServerBase serverBase, + IDictionary hosts, + ApplicationConfiguration configuration, + IList baseAddresses, + ApplicationDescription serverDescription, + List securityPolicies, + X509Certificate2 instanceCertificate, + X509Certificate2Collection instanceCertificateChain + ) + { + // generate a unique host name. + string hostName = String.Empty; + + if (hosts.ContainsKey(hostName)) + { + hostName = "/Https"; + } + + if (hosts.ContainsKey(hostName)) + { + hostName += Utils.Format("/{0}", hosts.Count); + } + + // build list of uris. + List uris = new List(); + EndpointDescriptionCollection endpoints = new EndpointDescriptionCollection(); + + // create the endpoint configuration to use. + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(configuration); + string computerName = Utils.GetHostName(); + + for (int ii = 0; ii < baseAddresses.Count; ii++) + { + if (!baseAddresses[ii].StartsWith(Utils.UriSchemeHttps, StringComparison.Ordinal)) + { + continue; + } + + UriBuilder uri = new UriBuilder(baseAddresses[ii]); + + if (uri.Path[uri.Path.Length - 1] != '/') + { + uri.Path += "/"; + } + + if (String.Compare(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase) == 0) + { + uri.Host = computerName; + } + + uris.Add(uri.Uri); + + if (uri.Scheme == Utils.UriSchemeHttps) + { + // Can only support one policy with HTTPS + // So pick the first policy with security mode sign and encrypt + ServerSecurityPolicy bestPolicy = null; + foreach (ServerSecurityPolicy policy in securityPolicies) + { + if (policy.SecurityMode != MessageSecurityMode.SignAndEncrypt) + { + continue; + } + + bestPolicy = policy; + break; + } + + // Pick the first policy from the list if no policies with sign and encrypt defined + if (bestPolicy == null) + { + bestPolicy = securityPolicies[0]; + } + + EndpointDescription description = new EndpointDescription(); + + description.EndpointUrl = uri.ToString(); + description.Server = serverDescription; + + if (instanceCertificate != null) + { + description.ServerCertificate = instanceCertificate.RawData; + // check if complete chain should be sent. + if (configuration.SecurityConfiguration.SendCertificateChain && + instanceCertificateChain != null && + instanceCertificateChain.Count > 0) + { + List serverCertificateChain = new List(); + + for (int i = 0; i < instanceCertificateChain.Count; i++) + { + serverCertificateChain.AddRange(instanceCertificateChain[i].RawData); + } + + description.ServerCertificate = serverCertificateChain.ToArray(); + } + } + + description.SecurityMode = bestPolicy.SecurityMode; + description.SecurityPolicyUri = bestPolicy.SecurityPolicyUri; + description.SecurityLevel = ServerSecurityPolicy.CalculateSecurityLevel(bestPolicy.SecurityMode, bestPolicy.SecurityPolicyUri); + description.UserIdentityTokens = serverBase.GetUserTokenPolicies(configuration, description); + description.TransportProfileUri = Profiles.HttpsBinaryTransport; + + ITransportListener listener = Create(); + if (listener != null) + { + endpoints.Add(description); + serverBase.CreateServiceHostEndpoint(uri.Uri, endpoints, endpointConfiguration, listener, + configuration.CertificateValidator.GetChannelValidator()); + } + else + { + Utils.Trace(Utils.TraceMasks.Error, "Failed to create endpoint {0} because the transport profile is unsupported.", uri); + } + } + } + + return endpoints; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportChannel.cs new file mode 100644 index 00000000..1ef2f2e2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportChannel.cs @@ -0,0 +1,352 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + + +using System; +using System.IO; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Runtime.InteropServices; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + + /// + /// Creates a new HttpsTransportChannel with ITransportChannel interface. + /// + public class HttpsTransportChannelFactory : ITransportChannelFactory + { + /// + /// The protocol supported by the channel. + /// + public string UriScheme => Utils.UriSchemeHttps; + + /// + /// The method creates a new instance of a Https transport channel + /// + /// The transport channel + public ITransportChannel Create() + { + return new HttpsTransportChannel(); + } + } + + /// + /// Wraps the HttpsTransportChannel and provides an ITransportChannel implementation. + /// + public class HttpsTransportChannel : ITransportChannel + { + /// + public void Dispose() + { + } + + /// + public string UriScheme => Utils.UriSchemeHttps; + + /// + public TransportChannelFeatures SupportedFeatures => TransportChannelFeatures.Open | TransportChannelFeatures.Reconnect | TransportChannelFeatures.BeginSendRequest; + + /// + public EndpointDescription EndpointDescription => m_settings.Description; + + /// + public EndpointConfiguration EndpointConfiguration => m_settings.Configuration; + + /// + public ServiceMessageContext MessageContext => m_quotas.MessageContext; + + /// + public ChannelToken CurrentToken => null; + + /// + public int OperationTimeout + { + get { return m_operationTimeout; } + set { m_operationTimeout = value; } + } + + /// + public void Initialize( + Uri url, + TransportChannelSettings settings) + { + SaveSettings(url, settings); + } + + /// + /// Initializes a secure channel with a waiting reverse connection. + /// + /// The connection to use. + /// The settings to use when creating the channel. + /// Thrown if any communication error occurs. + public void Initialize( + ITransportWaitingConnection connection, + TransportChannelSettings settings) + { + SaveSettings(connection.EndpointUrl, settings); + } + + /// + public void Open() + { + try + { + // auto validate server cert, if supported + // if unsupported, the TLS server cert must be trusted by a root CA + var handler = new HttpClientHandler(); + handler.ClientCertificateOptions = ClientCertificateOption.Manual; + + // send client certificate for servers that require TLS client authentication + if (m_settings.ClientCertificate != null) + { + handler.ClientCertificates.Add(m_settings.ClientCertificate); + } + + // OSX platform cannot auto validate certs and throws + // on PostAsync, do not set validation handler + if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + try + { + handler.ServerCertificateCustomValidationCallback = + (httpRequestMessage, cert, chain, policyErrors) => { + try + { + m_quotas.CertificateValidator?.Validate(cert); + return true; + } + catch (Exception ex) + { + Utils.Trace("HTTPS: Failed to validate server cert: " + cert.Subject); + Utils.Trace("HTTPS: Exception:" + ex.Message); + } + return false; + }; + } + catch (PlatformNotSupportedException) + { + // client may throw if not supported (e.g. UWP) + handler.ServerCertificateCustomValidationCallback = null; + } + } + + m_client = new HttpClient(handler); + } + catch (Exception ex) + { + Utils.Trace("Exception creating HTTPS Client: " + ex.Message); + throw; + } + } + + /// + public void Close() + { + if (m_client != null) + { + m_client.Dispose(); + } + } + + /// + /// The async result class for the Https transport. + /// + private class AsyncResult : AsyncResultBase + { + public IServiceRequest Request; + public HttpResponseMessage Response; + + public AsyncResult( + AsyncCallback callback, + object callbackData, + int timeout, + IServiceRequest request, + HttpResponseMessage response) + : + base(callback, callbackData, timeout) + { + Request = request; + Response = response; + } + } + + /// + public IAsyncResult BeginSendRequest(IServiceRequest request, AsyncCallback callback, object callbackData) + { + HttpResponseMessage response = null; + + try + { + ByteArrayContent content = new ByteArrayContent(BinaryEncoder.EncodeMessage(request, m_quotas.MessageContext)); + content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); + + AsyncResult result = new AsyncResult(callback, callbackData, m_operationTimeout, request, null); + Task.Run(async () => { + try + { + response = await m_client.PostAsync(m_url, content); + response.EnsureSuccessStatusCode(); + } + catch (Exception ex) + { + Utils.Trace("Exception sending HTTPS request: " + ex.Message); + result.Exception = ex; + response = null; + } + result.Response = response; + result.OperationCompleted(); + }); + + return result; + } + catch (Exception ex) + { + Utils.Trace("Exception sending HTTPS request: " + ex.Message); + AsyncResult result = new AsyncResult(callback, callbackData, m_operationTimeout, request, response); + result.Exception = ex; + result.OperationCompleted(); + return result; + } + } + + /// + public IServiceResponse EndSendRequest(IAsyncResult result) + { + AsyncResult result2 = result as AsyncResult; + if (result2 == null) + { + throw new ArgumentException("Invalid result object passed.", nameof(result)); + } + + try + { + result2.WaitForComplete(); + if (result2.Response != null) + { + Stream responseContent = result2.Response.Content.ReadAsStreamAsync().Result; + return BinaryDecoder.DecodeMessage(responseContent, null, m_quotas.MessageContext) as IServiceResponse; + } + } + catch (Exception ex) + { + Utils.Trace("Exception reading HTTPS response: " + ex.Message); + result2.Exception = ex; + } + return result2 as IServiceResponse; + } + + /// + /// Not implemented here. + public IAsyncResult BeginOpen(AsyncCallback callback, object callbackData) + { + throw new NotImplementedException(); + } + + /// + /// Not implemented here. + public void EndOpen(IAsyncResult result) + { + throw new NotImplementedException(); + } + + /// + /// Not implemented here. + public void Reconnect() + { + Utils.Trace("HttpsTransportChannel RECONNECT: Reconnecting to {0}.", m_url); + } + + /// + /// Not implemented here. + void ITransportChannel.Reconnect(ITransportWaitingConnection connection) + { + throw new NotImplementedException(); + } + + /// + /// Not implemented here. + public IAsyncResult BeginReconnect(AsyncCallback callback, object callbackData) + { + throw new NotImplementedException(); + } + + /// + /// Not implemented here. + public void EndReconnect(IAsyncResult result) + { + throw new NotImplementedException(); + } + + /// + /// Not implemented here. + public IAsyncResult BeginClose(AsyncCallback callback, object callbackData) + { + throw new NotImplementedException(); + } + + /// + /// Not implemented here. + public void EndClose(IAsyncResult result) + { + throw new NotImplementedException(); + } + + /// + public IServiceResponse SendRequest(IServiceRequest request) + { + IAsyncResult result = BeginSendRequest(request, null, null); + return EndSendRequest(result); + } + + /// + /// Save the settings for a connection. + /// + /// The server url. + /// The settings for the transport channel. + private void SaveSettings(Uri url, TransportChannelSettings settings) + { + m_url = new Uri(url.ToString()); + + m_settings = settings; + m_operationTimeout = settings.Configuration.OperationTimeout; + + // initialize the quotas. + m_quotas = new ChannelQuotas(); + + m_quotas.MaxBufferSize = m_settings.Configuration.MaxBufferSize; + m_quotas.MaxMessageSize = m_settings.Configuration.MaxMessageSize; + m_quotas.ChannelLifetime = m_settings.Configuration.ChannelLifetime; + m_quotas.SecurityTokenLifetime = m_settings.Configuration.SecurityTokenLifetime; + + m_quotas.MessageContext = new ServiceMessageContext(); + + m_quotas.MessageContext.MaxArrayLength = m_settings.Configuration.MaxArrayLength; + m_quotas.MessageContext.MaxByteStringLength = m_settings.Configuration.MaxByteStringLength; + m_quotas.MessageContext.MaxMessageSize = m_settings.Configuration.MaxMessageSize; + m_quotas.MessageContext.MaxStringLength = m_settings.Configuration.MaxStringLength; + m_quotas.MessageContext.NamespaceUris = m_settings.NamespaceUris; + m_quotas.MessageContext.ServerUris = new StringTable(); + m_quotas.MessageContext.Factory = m_settings.Factory; + + m_quotas.CertificateValidator = settings.CertificateValidator; + } + + private Uri m_url; + private int m_operationTimeout; + private TransportChannelSettings m_settings; + private ChannelQuotas m_quotas; + private HttpClient m_client; + } +} + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportListener.cs b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportListener.cs new file mode 100644 index 00000000..cbe9431e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Bindings.Https/Stack/Https/HttpsTransportListener.cs @@ -0,0 +1,402 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 The OPC Foundation, Inc. All rights reserved. + * + * OPC Reciprocal Community License ("RCL") Version 1.00 + * + * Unless explicitly acquired and licensed from Licensor under another + * license, the contents of this file are subject to the Reciprocal + * Community License ("RCL") Version 1.00, or subsequent versions + * as allowed by the RCL, and You may not copy or use this file in either + * source code or executable form, except in compliance with the terms and + * conditions of the RCL. + * + * All software distributed under the RCL is provided strictly on an + * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RCL for specific + * language governing rights and limitations under the RCL. + * + * The complete license agreement can be found here: + * http://opcfoundation.org/License/RCL/1.00/ + * ======================================================================*/ + +using System; +using System.IO; +using System.Net; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Server.Kestrel.Https; + + +namespace Opc.Ua.Bindings +{ + /// + /// Creates a new with + /// interface. + /// + public class HttpsTransportListenerFactory : HttpsServiceHost + { + /// + /// The protocol supported by the listener. + /// + public override string UriScheme => Utils.UriSchemeHttps; + + /// + /// The method creates a new instance of a . + /// + /// The transport listener. + public override ITransportListener Create() + { + return new HttpsTransportListener(); + } + } + + /// + /// Implements the kestrel startup of the Https listener. + /// + public class Startup + { + /// + /// Get the Https listener. + /// + public static HttpsTransportListener Listener { get; set; } + + /// + /// Configure the request pipeline for the listener. + /// + /// The application builder. + public void Configure(IApplicationBuilder appBuilder) + { + appBuilder.Run(async context => { + if (context.Request.Method != "POST") + { + context.Response.ContentLength = 0; + context.Response.ContentType = "text/plain"; + context.Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; + await context.Response.WriteAsync(string.Empty); + } + else + { + await Listener.SendAsync(context); + } + }); + } + } + + /// + /// Manages the connections for a UA HTTPS server. + /// + public class HttpsTransportListener : ITransportListener + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public HttpsTransportListener() + { + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_simulator")] + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + ConnectionStatusChanged = null; + ConnectionWaiting = null; + Utils.SilentDispose(m_host); + m_host = null; + } + } + #endregion + + #region ITransportListener Members + /// + /// The URI scheme handled by the listener. + /// + public string UriScheme => Utils.UriSchemeHttps; + + /// + /// Opens the listener and starts accepting connection. + /// + /// The base address. + /// The settings to use when creating the listener. + /// The callback to use when requests arrive via the channel. + /// Thrown if any parameter is null. + /// Thrown if any communication error occurs. + public void Open( + Uri baseAddress, + TransportListenerSettings settings, + ITransportListenerCallback callback) + { + // assign a unique guid to the listener. + m_listenerId = Guid.NewGuid().ToString(); + + m_uri = baseAddress; + m_descriptions = settings.Descriptions; + var configuration = settings.Configuration; + + // initialize the quotas. + m_quotas = new ChannelQuotas(); + m_quotas.MaxBufferSize = configuration.MaxBufferSize; + m_quotas.MaxMessageSize = configuration.MaxMessageSize; + m_quotas.ChannelLifetime = configuration.ChannelLifetime; + m_quotas.SecurityTokenLifetime = configuration.SecurityTokenLifetime; + + m_quotas.MessageContext = new ServiceMessageContext(); + + m_quotas.MessageContext.MaxArrayLength = configuration.MaxArrayLength; + m_quotas.MessageContext.MaxByteStringLength = configuration.MaxByteStringLength; + m_quotas.MessageContext.MaxMessageSize = configuration.MaxMessageSize; + m_quotas.MessageContext.MaxStringLength = configuration.MaxStringLength; + m_quotas.MessageContext.NamespaceUris = settings.NamespaceUris; + m_quotas.MessageContext.ServerUris = new StringTable(); + m_quotas.MessageContext.Factory = settings.Factory; + + m_quotas.CertificateValidator = settings.CertificateValidator; + + // save the callback to the server. + m_callback = callback; + + m_serverCert = settings.ServerCertificate; + + // start the listener + Start(); + } + + /// + /// Closes the listener and stops accepting connection. + /// + /// Thrown if any communication error occurs. + public void Close() + { + Stop(); + } + + /// + /// Raised when a new connection is waiting for a client. + /// + public event ConnectionWaitingHandlerAsync ConnectionWaiting; + + /// + /// Raised when a monitored connection's status changed. + /// + public event EventHandler ConnectionStatusChanged; + + /// + /// + /// Reverse connect for the https transport listener is not implemeted. + /// + public void CreateReverseConnection(Uri url, int timeout) + { + // suppress warnings + ConnectionWaiting = null; + ConnectionWaiting?.Invoke(null, null); + ConnectionStatusChanged = null; + ConnectionStatusChanged?.Invoke(null, null); + throw new NotImplementedException(); + } + #endregion + + #region Public Methods + /// + /// Gets the URL for the listener's endpoint. + /// + /// The URL for the listener's endpoint. + public Uri EndpointUrl => m_uri; + + /// + /// Starts listening at the specified port. + /// + public void Start() + { + Startup.Listener = this; + m_hostBuilder = new WebHostBuilder(); + + HttpsConnectionAdapterOptions httpsOptions = new HttpsConnectionAdapterOptions(); + httpsOptions.CheckCertificateRevocation = false; + httpsOptions.ClientCertificateMode = ClientCertificateMode.NoCertificate; + httpsOptions.ServerCertificate = m_serverCert; + httpsOptions.SslProtocols = SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12; + m_hostBuilder.UseKestrel(options => { + options.Listen(IPAddress.Any, m_uri.Port, listenOptions => { + // listenOptions.NoDelay = true; + listenOptions.UseHttps(httpsOptions); + }); + }); + + m_hostBuilder.UseContentRoot(Directory.GetCurrentDirectory()); + m_hostBuilder.UseStartup(); + m_host = m_hostBuilder.Start(Utils.ReplaceLocalhost(m_uri.ToString())); + } + + /// + /// Stops listening. + /// + public void Stop() + { + Dispose(); + } + #endregion + + #region Private Methods + /// + /// Handles requests arriving from a channel. + /// + public async Task SendAsync(HttpContext context) + { + IAsyncResult result = null; + + try + { + if (m_callback == null) + { + context.Response.ContentLength = 0; + context.Response.ContentType = "text/plain"; + context.Response.StatusCode = (int)HttpStatusCode.NotImplemented; + await context.Response.WriteAsync(string.Empty); + return; + } + + if (context.Request.ContentType != "application/octet-stream") + { + context.Response.ContentLength = 0; + context.Response.ContentType = "text/plain"; + context.Response.StatusCode = (int)HttpStatusCode.BadRequest; + await context.Response.WriteAsync("HTTPSLISTENER - Unsupported content type."); + return; + } + + int length = (int)context.Request.ContentLength; + byte[] buffer = await ReadBodyAsync(context.Request); + + if (buffer.Length != length) + { + context.Response.ContentLength = 0; + context.Response.ContentType = "text/plain"; + context.Response.StatusCode = (int)HttpStatusCode.BadRequest; + await context.Response.WriteAsync("HTTPSLISTENER - Couldn't decode buffer."); + return; + } + + IServiceRequest input = (IServiceRequest)BinaryDecoder.DecodeMessage(buffer, null, m_quotas.MessageContext); + + // extract the JWT token from the HTTP headers. + if (input.RequestHeader == null) + { + input.RequestHeader = new RequestHeader(); + } + + if (NodeId.IsNull(input.RequestHeader.AuthenticationToken) && input.TypeId != DataTypeIds.CreateSessionRequest) + { + if (context.Request.Headers.Keys.Contains("Authorization")) + { + foreach (string value in context.Request.Headers["Authorization"]) + { + if (value.StartsWith("Bearer")) + { + input.RequestHeader.AuthenticationToken = new NodeId(value.Substring("Bearer ".Length).Trim()); + } + } + } + } + + EndpointDescription endpoint = null; + + foreach (var ep in m_descriptions) + { + if (ep.EndpointUrl.StartsWith(Utils.UriSchemeHttps)) + { + endpoint = ep; + break; + } + } + + result = m_callback.BeginProcessRequest( + m_listenerId, + endpoint, + input as IServiceRequest, + null, + null); + + IServiceResponse output = m_callback.EndProcessRequest(result); + + byte[] response = BinaryEncoder.EncodeMessage(output, m_quotas.MessageContext); + context.Response.ContentLength = response.Length; + context.Response.ContentType = context.Request.ContentType; + context.Response.StatusCode = (int)HttpStatusCode.OK; + await context.Response.Body.WriteAsync(response, 0, response.Length); + } + catch (Exception e) + { + Utils.Trace(e, "HTTPSLISTENER - Unexpected error processing request."); + context.Response.ContentLength = e.Message.Length; + context.Response.ContentType = "text/plain"; + context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; + await context.Response.WriteAsync(e.Message); + } + } + + /// + /// Called when a UpdateCertificate event occured. + /// + public void CertificateUpdate( + ICertificateValidator validator, + X509Certificate2 serverCertificate, + X509Certificate2Collection serverCertificateChain) + { + Stop(); + + m_quotas.CertificateValidator = validator; + m_serverCert = serverCertificate; + foreach (var description in m_descriptions) + { + if (description.ServerCertificate != null) + { + description.ServerCertificate = serverCertificate.RawData; + } + } + + Start(); + } + + private async Task ReadBodyAsync(HttpRequest req) + { + using (var memory = new MemoryStream()) + using (var reader = new StreamReader(req.Body)) + { + await reader.BaseStream.CopyToAsync(memory); + return memory.ToArray(); + } + } + #endregion + + #region Private Fields + private string m_listenerId; + private Uri m_uri; + private EndpointDescriptionCollection m_descriptions; + private ChannelQuotas m_quotas; + private ITransportListenerCallback m_callback; + private IWebHostBuilder m_hostBuilder; + private IWebHost m_host; + private X509Certificate2 m_serverCert; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Bindings.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Bindings.cs new file mode 100644 index 00000000..a49f80ea --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Bindings.cs @@ -0,0 +1,25 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Bindings +{ + /// + /// The Opc.Ua.Bindings namespace contains classes that implement the bindings for the + /// mappings described in Part 6 of the UA specification. It also includes an implementation for + /// the UA TCP protocol. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Configuration.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Configuration.cs new file mode 100644 index 00000000..a4f6eae8 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Configuration.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Configuration +{ + /// + /// The Opc.Ua.Configuration namespace contains classes that used to manage the + /// configuration and security information for a UA application. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.Binary.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.Binary.cs new file mode 100644 index 00000000..2e56a01b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.Binary.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Schema.Binary +{ + /// + /// The Opc.Ua.Schema.Binary namespace provides classes which implement the OPC Binary + /// Type Description schema which is defined in Part 3 of the UA specification. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.Xml.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.Xml.cs new file mode 100644 index 00000000..779f2e32 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.Xml.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Schema.Xml +{ + /// + /// The Opc.Ua.Schema.Xml namespace provides classes which provide access to + /// XML schemas used to describe the data types provided by a UA Server. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.cs new file mode 100644 index 00000000..0216886e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.Schema.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Schema +{ + /// + /// The Opc.Ua.Schema namespace provides classes which facilitate manipulation of the schemas + /// used to describe data types exposed by a UA server. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.cs new file mode 100644 index 00000000..169d1930 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Documentation/Opc.Ua.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + /// + /// The Opc.Ua namespace contains classes and interfaces which implement all of the types + /// and services defined by the UA specification. + /// + /// + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class NamespaceDoc + { + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Opc.Ua.Core.csproj b/IOB-OPC-UA/Stack/Opc.Ua.Core/Opc.Ua.Core.csproj new file mode 100644 index 00000000..e4403cb0 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Opc.Ua.Core.csproj @@ -0,0 +1,71 @@ + + + + $(DefineConstants);NET_STANDARD + $(LibTargetFrameworks) + 6 + Opc.Ua.Core + OPCFoundation.NetStandard.Opc.Ua.Core + Opc.Ua + OPC UA Core Class Library + true + true + + + + $(PackageId).Debug + + + + $(DefineConstants);SIGNASSEMBLY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Properties/AssemblyInfo.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..289dc8e4 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Properties/AssemblyInfo.cs @@ -0,0 +1,24 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ +using System.Runtime.CompilerServices; + +#if SIGNASSEMBLY +[assembly: InternalsVisibleTo("Opc.Ua.Core.Tests, PublicKey = " + + // OPC Foundation Strong Name Public Key + "0024000004800000940000000602000000240000525341310004000001000100d987b12f068b35" + + "80429f3dde01397508880fc7e62621397618456ca1549aeacfbdb90c62adfe918f05ce3677b390" + + "f78357b8745cb6e1334655afce1a9527ac92fc829ff585ea79f007e52ba0f83ead627e3edda40b" + + "ec5ae574128fc9342cb57cb8285aa4e5b589c0ebef3be571b5c8f2ab1067f7c880e8f8882a73c8" + + "0a12a1ef")] +#else +[assembly: InternalsVisibleTo("Opc.Ua.Core.Tests")] +#endif diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ApplicationConfiguration.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ApplicationConfiguration.cs new file mode 100644 index 00000000..d5301991 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ApplicationConfiguration.cs @@ -0,0 +1,3395 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region ApplicationConfiguration + /// + /// Stores the configurable configuration information for a UA application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class ApplicationConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ApplicationConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_sourceFilePath = null; + + m_securityConfiguration = new SecurityConfiguration(); + m_transportConfigurations = new TransportConfigurationCollection(); + m_disableHiResClock = false; + m_properties = new Dictionary(); + m_certificateValidator = new CertificateValidator(); + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Public Properties + /// + /// Gets an object used to synchronize access to the properties dictionary. + /// + /// + /// The object used to synchronize access to the properties dictionary. + /// + public object PropertiesLock => m_properties; + + /// + /// Gets a dictionary used to save state associated with the application. + /// + /// + /// The dictionary used to save state associated with the application. + /// + public IDictionary Properties => m_properties; + #endregion + + #region Persistent Properties + /// + /// A descriptive name for the the application (not necessarily unique). + /// + /// The name of the application. + [DataMember(IsRequired = true, EmitDefaultValue = false, Order = 0)] + public string ApplicationName + { + get { return m_applicationName; } + set { m_applicationName = value; } + } + + /// + /// A unique identifier for the application instance. + /// + /// The application URI. + [DataMember(IsRequired = true, EmitDefaultValue = false, Order = 1)] + public string ApplicationUri + { + get { return m_applicationUri; } + set { m_applicationUri = value; } + } + + /// + /// A unique identifier for the product. + /// + /// The product URI. + [DataMember(IsRequired = false, Order = 2)] + public string ProductUri + { + get { return m_productUri; } + set { m_productUri = value; } + } + + /// + /// The type of application. + /// + /// The type of the application. + [DataMember(IsRequired = true, Order = 3)] + public ApplicationType ApplicationType + { + get { return m_applicationType; } + set { m_applicationType = value; } + } + + /// + /// The security configuration for the application. + /// + /// The security configuration. + [DataMember(IsRequired = false, EmitDefaultValue = true, Order = 4)] + public SecurityConfiguration SecurityConfiguration + { + get + { + return m_securityConfiguration; + } + + set + { + m_securityConfiguration = value ?? new SecurityConfiguration(); + } + } + + /// + /// The transport configuration for the application. + /// + /// The transport configurations. + [DataMember(IsRequired = false, EmitDefaultValue = true, Order = 5)] + public TransportConfigurationCollection TransportConfigurations + { + get + { + return m_transportConfigurations; + } + + set + { + m_transportConfigurations = value ?? new TransportConfigurationCollection(); + } + } + + /// + /// The quotas that are used at the transport layer. + /// + /// The transport quotas. + [DataMember(IsRequired = false, EmitDefaultValue = true, Order = 6)] + public TransportQuotas TransportQuotas + { + get { return m_transportQuotas; } + set { m_transportQuotas = value; } + } + + /// + /// Additional configuration for server applications. + /// + /// The server configuration. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 7)] + public ServerConfiguration ServerConfiguration + { + get { return m_serverConfiguration; } + set { m_serverConfiguration = value; } + } + + /// + /// Additional configuration for client applications. + /// + /// The client configuration. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 8)] + public ClientConfiguration ClientConfiguration + { + get { return m_clientConfiguration; } + set { m_clientConfiguration = value; } + } + + /// + /// Additional configuration of the discovery server. + /// + /// The discovery server configuration. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 9)] + public DiscoveryServerConfiguration DiscoveryServerConfiguration + { + get { return m_discoveryServerConfiguration; } + set { m_discoveryServerConfiguration = value; } + } + + /// + /// A bucket to store additional application specific configuration data. + /// + /// The extensions. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 10)] + public XmlElementCollection Extensions + { + get { return m_extensions; } + set { m_extensions = value; } + } + + /// + /// Configuration of the trace and information about log file + /// + /// The trace configuration. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 11)] + public TraceConfiguration TraceConfiguration + { + get { return m_traceConfiguration; } + set { m_traceConfiguration = value; } + } + + /// + /// Disabling / enabling high resolution clock + /// + /// true if high resolution clock is disabled; otherwise, false. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 12)] + public bool DisableHiResClock + { + get { return m_disableHiResClock; } + set { m_disableHiResClock = value; } + } + #endregion + + #region Private Fields + private string m_applicationName; + private string m_applicationUri; + private string m_productUri; + private ApplicationType m_applicationType; + + private SecurityConfiguration m_securityConfiguration; + private TransportConfigurationCollection m_transportConfigurations; + + private TransportQuotas m_transportQuotas; + private ServerConfiguration m_serverConfiguration; + private ClientConfiguration m_clientConfiguration; + private DiscoveryServerConfiguration m_discoveryServerConfiguration; + private TraceConfiguration m_traceConfiguration; + private bool m_disableHiResClock; + private XmlElementCollection m_extensions; + private string m_sourceFilePath; + + private ServiceMessageContext m_messageContext; + private CertificateValidator m_certificateValidator; + private Dictionary m_properties; + #endregion + } + #endregion + + #region TransportQuotas Class + /// + /// Specifies various limits that apply to the transport or secure channel layers. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class TransportQuotas + { + #region Constructors + /// + /// The default constructor. + /// + public TransportQuotas() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_operationTimeout = 120000; + m_maxStringLength = 65535; + m_maxByteStringLength = 65535; + m_maxArrayLength = 65535; + m_maxMessageSize = 1048576; + m_maxBufferSize = 65535; + m_channelLifetime = 600000; + m_securityTokenLifetime = 3600000; + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The default timeout to use when sending requests. + /// + /// The operation timeout. + [DataMember(IsRequired = false, Order = 0)] + public int OperationTimeout + { + get { return m_operationTimeout; } + set { m_operationTimeout = value; } + } + + /// + /// The maximum length of string encoded in a message body. + /// + /// The max length of the string. + [DataMember(IsRequired = false, Order = 1)] + public int MaxStringLength + { + get { return m_maxStringLength; } + set { m_maxStringLength = value; } + } + + /// + /// The maximum length of a byte string encoded in a message body. + /// + /// The max length of the byte string. + [DataMember(IsRequired = false, Order = 2)] + public int MaxByteStringLength + { + get { return m_maxByteStringLength; } + set { m_maxByteStringLength = value; } + } + + /// + /// The maximum length of an array encoded in a message body. + /// + /// The max length of the array. + [DataMember(IsRequired = false, Order = 3)] + public int MaxArrayLength + { + get { return m_maxArrayLength; } + set { m_maxArrayLength = value; } + } + + /// + /// The maximum length of a message body. + /// + /// The max size of the message. + [DataMember(IsRequired = false, Order = 4)] + public int MaxMessageSize + { + get { return m_maxMessageSize; } + set { m_maxMessageSize = value; } + } + + /// + /// The maximum size of the buffer to use when sending messages. + /// + /// The max size of the buffer. + [DataMember(IsRequired = false, Order = 5)] + public int MaxBufferSize + { + get { return m_maxBufferSize; } + set { m_maxBufferSize = value; } + } + + /// + /// The lifetime of a secure channel. + /// + /// The channel lifetime. + [DataMember(IsRequired = false, Order = 6)] + public int ChannelLifetime + { + get { return m_channelLifetime; } + set { m_channelLifetime = value; } + } + + /// + /// The lifetime of a security token. + /// + /// The security token lifetime. + [DataMember(IsRequired = false, Order = 7)] + public int SecurityTokenLifetime + { + get { return m_securityTokenLifetime; } + set { m_securityTokenLifetime = value; } + } + #endregion + + #region Private Fields + private int m_operationTimeout; + private int m_maxStringLength; + private int m_maxByteStringLength; + private int m_maxArrayLength; + private int m_maxMessageSize; + private int m_maxBufferSize; + private int m_channelLifetime; + private int m_securityTokenLifetime; + #endregion + } + #endregion + + #region TraceConfiguration Class + /// + /// Specifies parameters used for tracing. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class TraceConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public TraceConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_outputFilePath = null; + m_deleteOnLoad = false; + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The output file used to log the trace information. + /// + /// The output file path. + [DataMember(IsRequired = false, Order = 0)] + public string OutputFilePath + { + get { return m_outputFilePath; } + set { m_outputFilePath = value; } + } + + /// + /// Whether the existing log file should be deleted when the application configuration is loaded. + /// + /// true if existing log file should be deleted when the application configuration is loaded; otherwise, false. + [DataMember(IsRequired = false, Order = 1)] + public bool DeleteOnLoad + { + get { return m_deleteOnLoad; } + set { m_deleteOnLoad = value; } + } + + /// + /// The masks used to select what is written to the output + /// Masks supported by the trace feature: + /// - Do not output any messages -None = 0x0; + /// - Output error messages - Error = 0x1; + /// - Output informational messages - Information = 0x2; + /// - Output stack traces - StackTrace = 0x4; + /// - Output basic messages for service calls - Service = 0x8; + /// - Output detailed messages for service calls - ServiceDetail = 0x10; + /// - Output basic messages for each operation - Operation = 0x20; + /// - Output detailed messages for each operation - OperationDetail = 0x40; + /// - Output messages related to application initialization or shutdown - StartStop = 0x80; + /// - Output messages related to a call to an external system - ExternalSystem = 0x100; + /// - Output messages related to security. - Security = 0x200; + /// + /// The trace masks. + [DataMember(IsRequired = false, Order = 2)] + public int TraceMasks + { + get { return m_traceMasks; } + set { m_traceMasks = value; } + } + #endregion + + #region Private Fields + private string m_outputFilePath; + private bool m_deleteOnLoad; + private int m_traceMasks; + #endregion + } + #endregion + + #region TransportConfiguration Class + /// + /// Specifies the configuration information for a transport protocol + /// + /// + /// Each application is allows to have one transport configure per protocol type. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class TransportConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public TransportConfiguration() + { + } + + /// + /// The default constructor. + /// + /// The URL scheme. + /// The type. + public TransportConfiguration(string urlScheme, Type type) + { + m_uriScheme = urlScheme; + m_typeName = type.AssemblyQualifiedName; + } + #endregion + + #region Persistent Properties + /// + /// The URL prefix used by the application (http, opc.tcp, net.tpc, etc.). + /// + /// The URI scheme. + [DataMember(IsRequired = true, EmitDefaultValue = false, Order = 0)] + public string UriScheme + { + get { return m_uriScheme; } + set { m_uriScheme = value; } + } + + /// + /// The name of the class that defines the binding for the transport. + /// + /// The name of the type. + /// + /// This can be any instance of the System.ServiceModel.Channels.Binding class + /// that implements these constructors: + /// + /// XxxBinding(EndpointDescription description, EndpointConfiguration configuration); + /// XxxBinding(IList{EndpointDescription} descriptions, EndpointConfiguration configuration) + /// XxxBinding(EndpointConfiguration configuration) + /// + [DataMember(IsRequired = true, EmitDefaultValue = false, Order = 1)] + public string TypeName + { + get { return m_typeName; } + set { m_typeName = value; } + } + #endregion + + #region Private Fields + private string m_uriScheme; + private string m_typeName; + #endregion + } + #endregion + + #region TransportConfigurationCollection Class + /// + /// A collection of TransportConfiguration objects. + /// + [CollectionDataContract(Name = "ListOfTransportConfiguration", Namespace = Namespaces.OpcUaConfig, ItemName = "TransportConfiguration")] + public partial class TransportConfigurationCollection : List + { + /// + /// Initializes an empty collection. + /// + public TransportConfigurationCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public TransportConfigurationCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public TransportConfigurationCollection(int capacity) : base(capacity) { } + } + #endregion + + #region ServerSecurityPolicy Class + /// + /// A class that defines a group of sampling rates supported by the server. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ServerSecurityPolicy + { + #region Constructors + /// + /// The default constructor. + /// + public ServerSecurityPolicy() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_securityMode = MessageSecurityMode.SignAndEncrypt; + m_securityPolicyUri = SecurityPolicies.Basic256Sha256; + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Public Properties + /// + /// Calculates the security level, given the security mode and policy + /// Invalid and none is discouraged + /// Just signing is always weaker than any use of encryption + /// + public static byte CalculateSecurityLevel(MessageSecurityMode mode, string policyUri) + { + if ((mode == MessageSecurityMode.Invalid) || (mode == MessageSecurityMode.None)) + { + return 0; + } + + byte result = 0; + switch (policyUri) + { + case SecurityPolicies.Basic128Rsa15: result = 2; break; + case SecurityPolicies.Basic256: result = 4; break; + case SecurityPolicies.Basic256Sha256: result = 6; break; + case SecurityPolicies.Aes128_Sha256_RsaOaep: result = 8; break; + case SecurityPolicies.Aes256_Sha256_RsaPss: result = 10; break; + case SecurityPolicies.None: + default: return 0; + } + + if (mode == MessageSecurityMode.SignAndEncrypt) + { + result += 100; + } + + return result; + } + + /// + /// Specifies whether the messages are signed and encrypted or simply signed + /// + /// The security mode. + [DataMember(IsRequired = false, Order = 1)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + /// The security policy to use. + /// + /// The security policy URI. + [DataMember(IsRequired = false, Order = 2)] + public string SecurityPolicyUri + { + get { return m_securityPolicyUri; } + set { m_securityPolicyUri = value; } + } + #endregion + + #region Private Members + private MessageSecurityMode m_securityMode; + private string m_securityPolicyUri; + #endregion + } + #endregion + + #region ServerSecurityPolicyCollection Class + /// + /// A collection of ServerSecurityPolicy objects. + /// + [CollectionDataContract(Name = "ListOfServerSecurityPolicy", Namespace = Namespaces.OpcUaConfig, ItemName = "ServerSecurityPolicy")] + public partial class ServerSecurityPolicyCollection : List + { + /// + /// Initializes an empty collection. + /// + public ServerSecurityPolicyCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public ServerSecurityPolicyCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public ServerSecurityPolicyCollection(int capacity) : base(capacity) { } + } + #endregion + + #region SecurityConfiguration Class + /// + /// The security configuration for the application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class SecurityConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public SecurityConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_trustedIssuerCertificates = new CertificateTrustList(); + m_trustedPeerCertificates = new CertificateTrustList(); + m_nonceLength = 32; + m_autoAcceptUntrustedCertificates = false; + m_rejectSHA1SignedCertificates = true; + m_rejectUnknownRevocationStatus = false; + m_minCertificateKeySize = CertificateFactory.DefaultKeySize; + m_addAppCertToTrustedStore = true; + m_sendCertificateChain = false; + m_suppressNonceValidationErrors = false; + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The application instance certificate. + /// + /// The application certificate. + /// + /// This certificate must contain the application uri. + /// For servers, URLs for each supported protocol must also be present. + /// + [DataMember(IsRequired = true, EmitDefaultValue = false, Order = 0)] + public CertificateIdentifier ApplicationCertificate + { + get { return m_applicationCertificate; } + set { m_applicationCertificate = value; } + } + + /// + /// The store containing any additional issuer certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 2)] + public CertificateTrustList TrustedIssuerCertificates + { + get + { + return m_trustedIssuerCertificates; + } + + set + { + m_trustedIssuerCertificates = value ?? new CertificateTrustList(); + } + } + + /// + /// The trusted certificate store. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 4)] + public CertificateTrustList TrustedPeerCertificates + { + get + { + return m_trustedPeerCertificates; + } + + set + { + m_trustedPeerCertificates = value ?? new CertificateTrustList(); + } + } + + /// + /// The length of nonce in the CreateSession service. + /// + /// + /// The length of nonce in the CreateSession service. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 6)] + public int NonceLength + { + get { return m_nonceLength; } + set { m_nonceLength = value; } + } + + /// + /// A store where invalid certificates can be placed for later review by the administrator. + /// + /// + /// A store where invalid certificates can be placed for later review by the administrator. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 7)] + public CertificateStoreIdentifier RejectedCertificateStore + { + get { return m_rejectedCertificateStore; } + set { m_rejectedCertificateStore = value; } + } + + /// + /// Gets or sets a value indicating whether untrusted certificates should be automatically accepted. + /// + /// + /// This flag can be set to by servers that allow anonymous clients or use user credentials for authentication. + /// It can be set by clients that connect to URLs specified in configuration rather than with user entry. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 8)] + public bool AutoAcceptUntrustedCertificates + { + get { return m_autoAcceptUntrustedCertificates; } + set { m_autoAcceptUntrustedCertificates = value; } + } + + /// + /// Gets or sets a directory which contains files representing users roles. + /// + [DataMember(Order = 9)] + public string UserRoleDirectory + { + get { return m_userRoleDirectory; } + set { m_userRoleDirectory = value; } + } + + /// + /// Gets or sets a value indicating whether SHA-1 signed certificates are accepted. + /// + /// + /// This flag can be set to false by servers that accept SHA-1 signed certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 10)] + public bool RejectSHA1SignedCertificates + { + get { return m_rejectSHA1SignedCertificates; } + set { m_rejectSHA1SignedCertificates = value; } + } + + /// + /// Gets or sets a value indicating whether certificates with unavailable revocation lists are not accepted. + /// + /// + /// This flag can be set to true by servers that must have a revocation list for each CA (even if empty). + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 11)] + public bool RejectUnknownRevocationStatus + { + get { return m_rejectUnknownRevocationStatus; } + set { m_rejectUnknownRevocationStatus = value; } + } + + /// + /// Gets or sets a value indicating which minimum certificate key strength is accepted. + /// + /// + /// This value can be set to 1024, 2048 or 4096 by servers + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 12)] + public ushort MinimumCertificateKeySize + { + get { return m_minCertificateKeySize; } + set { m_minCertificateKeySize = value; } + } + + /// + /// Gets or sets a value indicating whether the application cert should be copied to the trusted store. + /// + /// + /// It is useful for client/server applications running on the same host and sharing the cert store to autotrust. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 13)] + public bool AddAppCertToTrustedStore + { + get { return m_addAppCertToTrustedStore; } + set { m_addAppCertToTrustedStore = value; } + } + + /// + /// Gets or sets a value indicating whether the application should send the complete certificate chain. + /// + /// + /// If set to true the complete certificate chain will be sent for CA signed certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 14)] + public bool SendCertificateChain + { + get { return m_sendCertificateChain; } + set { m_sendCertificateChain = value; } + } + + /// + /// The store containing additional user issuer certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 15)] + public CertificateTrustList UserIssuerCertificates + { + get + { + return m_userIssuerCertificates; + } + + set + { + m_userIssuerCertificates = value; + + if (m_userIssuerCertificates == null) + { + m_userIssuerCertificates = new CertificateTrustList(); + } + } + } + + /// + /// The store containing trusted user certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 16)] + public CertificateTrustList TrustedUserCertificates + { + get + { + return m_trustedUserCertificates; + } + + set + { + m_trustedUserCertificates = value; + + if (m_trustedUserCertificates == null) + { + m_trustedUserCertificates = new CertificateTrustList(); + } + } + } + + /// + /// The store containing additional Https issuer certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 17)] + public CertificateTrustList HttpsIssuerCertificates + { + get + { + return m_httpsIssuerCertificates; + } + + set + { + m_httpsIssuerCertificates = value; + + if (m_httpsIssuerCertificates == null) + { + m_httpsIssuerCertificates = new CertificateTrustList(); + } + } + } + + /// + /// The store containing trusted Https certificates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 18)] + public CertificateTrustList TrustedHttpsCertificates + { + get + { + return m_trustedHttpsCertificates; + } + + set + { + m_trustedHttpsCertificates = value; + + if (m_trustedHttpsCertificates == null) + { + m_trustedHttpsCertificates = new CertificateTrustList(); + } + } + } + + /// + /// Gets or sets a value indicating whether the server nonce validation errors should be suppressed. + /// + /// + /// Allows client interoperability with legacy servers which do not comply with the specification for nonce usage. + /// If set to true the server nonce validation errors are suppressed. + /// Please set this flag to true only in close and secured networks since it can cause security vulnerabilities. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 19)] + public bool SuppressNonceValidationErrors + { + get { return m_suppressNonceValidationErrors; } + set { m_suppressNonceValidationErrors = value; } + } + #endregion + + #region Private Fields + private CertificateIdentifier m_applicationCertificate; + private CertificateTrustList m_trustedIssuerCertificates; + private CertificateTrustList m_trustedPeerCertificates; + private CertificateTrustList m_httpsIssuerCertificates; + private CertificateTrustList m_trustedHttpsCertificates; + private CertificateTrustList m_userIssuerCertificates; + private CertificateTrustList m_trustedUserCertificates; + private int m_nonceLength; + private CertificateStoreIdentifier m_rejectedCertificateStore; + private bool m_autoAcceptUntrustedCertificates; + private string m_userRoleDirectory; + private bool m_rejectSHA1SignedCertificates; + private bool m_rejectUnknownRevocationStatus; + private ushort m_minCertificateKeySize; + private bool m_addAppCertToTrustedStore; + private bool m_sendCertificateChain; + private bool m_suppressNonceValidationErrors; + #endregion + } + #endregion + + #region SamplingRateGroup Class + /// + /// A class that defines a group of sampling rates supported by the server. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class SamplingRateGroup + { + #region Constructors + /// + /// The default constructor. + /// + public SamplingRateGroup() + { + Initialize(); + } + + /// + /// Creates a group with the specified settings. + /// + /// The start. + /// The increment. + /// The count. + public SamplingRateGroup(int start, int increment, int count) + { + m_start = start; + m_increment = increment; + m_count = count; + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_start = 1000; + m_increment = 0; + m_count = 0; + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Public Properties + /// + /// The first sampling rate in the group (in milliseconds). + /// + /// The first sampling rate in the group (in milliseconds). + [DataMember(IsRequired = false, Order = 1)] + public double Start + { + get { return m_start; } + set { m_start = value; } + } + + /// + /// The increment between sampling rates in the group (in milliseconds). + /// + /// The increment. + /// + /// An increment of 0 means the group only contains one sampling rate equal to the start. + /// + [DataMember(IsRequired = false, Order = 2)] + public double Increment + { + get { return m_increment; } + set { m_increment = value; } + } + + /// + /// The number of sampling rates in the group. + /// + /// The count. + /// + /// A count of 0 means there is no limit. + /// + [DataMember(IsRequired = false, Order = 3)] + public int Count + { + get { return m_count; } + set { m_count = value; } + } + #endregion + + #region Private Members + private double m_start; + private double m_increment; + private int m_count; + #endregion + } + #endregion + + #region SamplingRateGroupCollection Class + /// + /// A collection of SamplingRateGroup objects. + /// + [CollectionDataContract(Name = "ListOfSamplingRateGroup", Namespace = Namespaces.OpcUaConfig, ItemName = "SamplingRateGroup")] + public partial class SamplingRateGroupCollection : List + { + /// + /// Initializes an empty collection. + /// + public SamplingRateGroupCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public SamplingRateGroupCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public SamplingRateGroupCollection(int capacity) : base(capacity) { } + } + #endregion + + #region ServerBaseConfiguration Class + /// + /// Specifies the configuration for a server application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class ServerBaseConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ServerBaseConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_baseAddresses = new StringCollection(); + m_alternateBaseAddresses = new StringCollection(); + m_securityPolicies = new ServerSecurityPolicyCollection(); + m_minRequestThreadCount = 10; + m_maxRequestThreadCount = 100; + m_maxQueuedRequestCount = 200; + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + + /// + /// Remove unsupported security policies and expand wild cards. + /// + [OnDeserialized()] + private void ValidateSecurityPolicyCollection(StreamingContext context) + { + var supportedPolicies = Opc.Ua.SecurityPolicies.GetDisplayNames(); + var newPolicies = new ServerSecurityPolicyCollection(); + foreach (var securityPolicy in m_securityPolicies) + { + if (String.IsNullOrWhiteSpace(securityPolicy.SecurityPolicyUri)) + { + // add wild card policies + foreach (var policyUri in Opc.Ua.SecurityPolicies.GetDefaultUris()) + { + var newPolicy = new ServerSecurityPolicy() { + SecurityMode = securityPolicy.SecurityMode, + SecurityPolicyUri = policyUri + }; + if (newPolicies.Find(s => + s.SecurityMode == newPolicy.SecurityMode && + String.Compare(s.SecurityPolicyUri, newPolicy.SecurityPolicyUri) == 0 + ) == null) + { + newPolicies.Add(newPolicy); + } + } + } + else + { + for (int i = 0; i < supportedPolicies.Length; i++) + { + if (securityPolicy.SecurityPolicyUri.Contains(supportedPolicies[i])) + { + if (newPolicies.Find(s => + s.SecurityMode == securityPolicy.SecurityMode && + String.Compare(s.SecurityPolicyUri, securityPolicy.SecurityPolicyUri) == 0 + ) == null) + { + newPolicies.Add(securityPolicy); + } + break; + } + } + } + } + m_securityPolicies = newPolicies; + } + #endregion + + #region Persistent Properties + /// + /// The base addresses for the server. + /// + /// The base addresses. + /// + /// The actually endpoints are constructed from the security policies. + /// On one base address per supported transport protocol is allowed. + /// + [DataMember(IsRequired = false, Order = 0)] + public StringCollection BaseAddresses + { + get + { + return m_baseAddresses; + } + + set + { + m_baseAddresses = value; + + if (m_baseAddresses == null) + { + m_baseAddresses = new StringCollection(); + } + } + } + + /// + /// Gets or sets the alternate base addresses. + /// + /// The alternate base addresses. + /// + /// These addresses are used to specify alternate paths to ther via firewalls, proxies + /// or similar network infrastructure. If these paths are specified in the configuration + /// file then the server will use the domain of the URL used by the client to determine + /// which, if any, or the alternate addresses to use instead of the primary addresses. + /// + [DataMember(IsRequired = false, Order = 1)] + public StringCollection AlternateBaseAddresses + { + get + { + return m_alternateBaseAddresses; + } + + set + { + m_alternateBaseAddresses = value; + + if (m_alternateBaseAddresses == null) + { + m_alternateBaseAddresses = new StringCollection(); + } + } + } + + /// + /// The security policies supported by the server. + /// + /// The security policies. + /// + /// An endpoint description is created for each combination of base address and security policy. + /// + [DataMember(IsRequired = false, Order = 2)] + public ServerSecurityPolicyCollection SecurityPolicies + { + get + { + return m_securityPolicies; + } + + set + { + m_securityPolicies = value; + + if (m_securityPolicies == null) + { + m_securityPolicies = new ServerSecurityPolicyCollection(); + } + } + } + + /// + /// Gets or sets the minimum number of threads assigned to processing requests. + /// + /// The minimum request thread count. + [DataMember(IsRequired = false, Order = 3)] + public int MinRequestThreadCount + { + get { return m_minRequestThreadCount; } + set { m_minRequestThreadCount = value; } + } + + /// + /// Gets or sets the maximum number of threads assigned to processing requests. + /// + /// The maximum request thread count. + [DataMember(IsRequired = false, Order = 4)] + public int MaxRequestThreadCount + { + get { return m_maxRequestThreadCount; } + set { m_maxRequestThreadCount = value; } + } + + /// + /// Gets or sets the maximum number of requests that will be queued waiting for a thread. + /// + /// The maximum queued request count. + [DataMember(IsRequired = false, Order = 5)] + public int MaxQueuedRequestCount + { + get { return m_maxQueuedRequestCount; } + set { m_maxQueuedRequestCount = value; } + } + #endregion + + #region Private Members + private StringCollection m_baseAddresses; + private StringCollection m_alternateBaseAddresses; + private ServerSecurityPolicyCollection m_securityPolicies; + private int m_minRequestThreadCount; + private int m_maxRequestThreadCount; + private int m_maxQueuedRequestCount; + #endregion + } + #endregion + + #region ServerConfiguration Class + /// + /// Specifies the configuration for a server application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class ServerConfiguration : ServerBaseConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ServerConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_userTokenPolicies = new UserTokenPolicyCollection(); + m_diagnosticsEnabled = false; + m_maxSessionCount = 100; + m_maxSessionTimeout = 3600000; + m_minSessionTimeout = 10000; + m_maxBrowseContinuationPoints = 10; + m_maxQueryContinuationPoints = 10; + m_maxHistoryContinuationPoints = 100; + m_maxRequestAge = 600000; + m_minPublishingInterval = 100; + m_maxPublishingInterval = 3600000; + m_publishingResolution = 100; + m_minSubscriptionLifetime = 10000; + m_maxSubscriptionLifetime = 3600000; + m_maxMessageQueueSize = 10; + m_maxNotificationQueueSize = 100; + m_maxNotificationsPerPublish = 100; + m_minMetadataSamplingInterval = 1000; + m_availableSamplingRates = new SamplingRateGroupCollection(); + m_registrationEndpoint = null; + m_maxRegistrationInterval = 30000; + m_maxPublishRequestCount = 20; + m_maxSubscriptionCount = 100; + m_maxEventQueueSize = 10000; + // see https://opcfoundation-onlineapplications.org/profilereporting/ for list of available profiles + m_serverProfileArray = new string[] { "http://opcfoundation.org/UA-Profile/Server/StandardUA2017" }; + m_shutdownDelay = 5; + m_serverCapabilities = new string[] { "DA" }; + m_supportedPrivateKeyFormats = new string[] { }; + m_maxTrustListSize = 0; + m_multicastDnsEnabled = false; + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public new void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The user tokens accepted by the server. + /// + /// The user token policies. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 3)] + public UserTokenPolicyCollection UserTokenPolicies + { + get + { + return m_userTokenPolicies; + } + + set + { + m_userTokenPolicies = value; + + if (m_userTokenPolicies == null) + { + m_userTokenPolicies = new UserTokenPolicyCollection(); + } + } + } + + /// + /// Whether diagnostics are enabled. + /// + /// true if diagnostic is enabled; otherwise, false. + [DataMember(IsRequired = false, Order = 4)] + public bool DiagnosticsEnabled + { + get { return m_diagnosticsEnabled; } + set { m_diagnosticsEnabled = value; } + } + + /// + /// The maximum number of open sessions. + /// + /// The maximum session count. + [DataMember(IsRequired = false, Order = 5)] + public int MaxSessionCount + { + get { return m_maxSessionCount; } + set { m_maxSessionCount = value; } + } + + /// + /// That minimum period of that a session is allowed to remain open without communication from the client (in milliseconds). + /// + /// The minimum session timeout. + [DataMember(IsRequired = false, Order = 6)] + public int MinSessionTimeout + { + get { return m_minSessionTimeout; } + set { m_minSessionTimeout = value; } + } + + /// + /// That maximum period of that a session is allowed to remain open without communication from the client (in milliseconds). + /// + /// The maximum session timeout. + [DataMember(IsRequired = false, Order = 7)] + public int MaxSessionTimeout + { + get { return m_maxSessionTimeout; } + set { m_maxSessionTimeout = value; } + } + + /// + /// The maximum number of continuation points used for Browse/BrowseNext operations. + /// + /// The maximum number of continuation points used for Browse/BrowseNext operations + [DataMember(IsRequired = false, Order = 8)] + public int MaxBrowseContinuationPoints + { + get { return m_maxBrowseContinuationPoints; } + set { m_maxBrowseContinuationPoints = value; } + } + + /// + /// The maximum number of continuation points used for Query/QueryNext operations. + /// + /// The maximum number of query continuation points. + [DataMember(IsRequired = false, Order = 9)] + public int MaxQueryContinuationPoints + { + get { return m_maxQueryContinuationPoints; } + set { m_maxQueryContinuationPoints = value; } + } + + /// + /// The maximum number of continuation points used for HistoryRead operations. + /// + /// The maximum number of history continuation points. + [DataMember(IsRequired = false, Order = 10)] + public int MaxHistoryContinuationPoints + { + get { return m_maxHistoryContinuationPoints; } + set { m_maxHistoryContinuationPoints = value; } + } + + /// + /// The maximum age of an incoming request (old requests are rejected). + /// + /// The maximum age of an incoming request. + [DataMember(IsRequired = false, Order = 11)] + public int MaxRequestAge + { + get { return m_maxRequestAge; } + set { m_maxRequestAge = value; } + } + + /// + /// The minimum publishing interval supported by the server (in milliseconds). + /// + /// The minimum publishing interval. + [DataMember(IsRequired = false, Order = 12)] + public int MinPublishingInterval + { + get { return m_minPublishingInterval; } + set { m_minPublishingInterval = value; } + } + + /// + /// The maximum publishing interval supported by the server (in milliseconds). + /// + /// The maximum publishing interval. + [DataMember(IsRequired = false, Order = 13)] + public int MaxPublishingInterval + { + get { return m_maxPublishingInterval; } + set { m_maxPublishingInterval = value; } + } + + /// + /// The minimum difference between supported publishing interval (in milliseconds). + /// + /// The publishing resolution. + [DataMember(IsRequired = false, Order = 14)] + public int PublishingResolution + { + get { return m_publishingResolution; } + set { m_publishingResolution = value; } + } + + /// + /// How long the subscriptions will remain open without a publish from the client. + /// + /// The maximum subscription lifetime. + [DataMember(IsRequired = false, Order = 15)] + public int MaxSubscriptionLifetime + { + get { return m_maxSubscriptionLifetime; } + set { m_maxSubscriptionLifetime = value; } + } + + /// + /// The maximum number of messages saved in the queue for each subscription. + /// + /// The maximum size of the message queue. + [DataMember(IsRequired = false, Order = 16)] + public int MaxMessageQueueSize + { + get { return m_maxMessageQueueSize; } + set { m_maxMessageQueueSize = value; } + } + + /// + /// The maximum number of notificates saved in the queue for each monitored item. + /// + /// The maximum size of the notification queue. + [DataMember(IsRequired = false, Order = 17)] + public int MaxNotificationQueueSize + { + get { return m_maxNotificationQueueSize; } + set { m_maxNotificationQueueSize = value; } + } + + /// + /// The maximum number of notifications per publish. + /// + /// The maximum number of notifications per publish. + [DataMember(IsRequired = false, Order = 18)] + public int MaxNotificationsPerPublish + { + get { return m_maxNotificationsPerPublish; } + set { m_maxNotificationsPerPublish = value; } + } + + /// + /// The minimum sampling interval for metadata. + /// + /// The minimum sampling interval for metadata. + [DataMember(IsRequired = false, Order = 19)] + public int MinMetadataSamplingInterval + { + get { return m_minMetadataSamplingInterval; } + set { m_minMetadataSamplingInterval = value; } + } + + /// + /// The available sampling rates. + /// + /// The available sampling rates. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 20)] + public SamplingRateGroupCollection AvailableSamplingRates + { + get { return m_availableSamplingRates; } + set { m_availableSamplingRates = value; } + } + + /// + /// The endpoint description for the registration endpoint. + /// + /// The registration endpoint. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 21)] + public EndpointDescription RegistrationEndpoint + { + get { return m_registrationEndpoint; } + set { m_registrationEndpoint = value; } + } + + /// + /// The maximum time between registration attempts (in milliseconds). + /// + /// The maximum time between registration attempts (in milliseconds). + [DataMember(IsRequired = false, Order = 22)] + public int MaxRegistrationInterval + { + get { return m_maxRegistrationInterval; } + set { m_maxRegistrationInterval = value; } + } + + /// + /// The path to the file containing nodes persisted by the core node manager. + /// + /// The path to the file containing nodes persisted by the core node manager. + [DataMember(IsRequired = false, Order = 23)] + public string NodeManagerSaveFile + { + get { return m_nodeManagerSaveFile; } + set { m_nodeManagerSaveFile = value; } + } + + /// + /// The minimum lifetime for a subscription. + /// + /// The minimum lifetime for a subscription. + [DataMember(IsRequired = false, Order = 24)] + public int MinSubscriptionLifetime + { + get { return m_minSubscriptionLifetime; } + set { m_minSubscriptionLifetime = value; } + } + + /// + /// Gets or sets the max publish request count. + /// + /// The max publish request count. + [DataMember(IsRequired = false, Order = 25)] + public int MaxPublishRequestCount + { + get { return m_maxPublishRequestCount; } + set { m_maxPublishRequestCount = value; } + } + + /// + /// Gets or sets the max subscription count. + /// + /// The max subscription count. + [DataMember(IsRequired = false, Order = 26)] + public int MaxSubscriptionCount + { + get { return m_maxSubscriptionCount; } + set { m_maxSubscriptionCount = value; } + } + + /// + /// Gets or sets the max size of the event queue. + /// + /// The max size of the event queue. + [DataMember(IsRequired = false, Order = 27)] + public int MaxEventQueueSize + { + get { return m_maxEventQueueSize; } + set { m_maxEventQueueSize = value; } + } + + /// + /// Gets or sets the server profile array. + /// + /// The array of server profiles. + [DataMember(IsRequired = false, Order = 28)] + public StringCollection ServerProfileArray + { + get { return m_serverProfileArray; } + set + { + m_serverProfileArray = value; + if (m_serverProfileArray == null) + { + m_serverProfileArray = new StringCollection(); + } + } + } + + /// + /// Gets or sets the server shutdown delay. + /// + /// The array of server profiles. + [DataMember(IsRequired = false, Order = 29)] + public int ShutdownDelay + { + get { return m_shutdownDelay; } + set + { + m_shutdownDelay = value; + } + } + + /// + /// Gets or sets the server capabilities. + /// + /// The array of server profiles. + [DataMember(IsRequired = false, Order = 30)] + public StringCollection ServerCapabilities + { + get { return m_serverCapabilities; } + set + { + m_serverCapabilities = value; + if (m_serverCapabilities == null) + { + m_serverCapabilities = new StringCollection(); + } + } + } + + /// + /// Gets or sets the supported private key format. + /// + /// The array of server profiles. + [DataMember(IsRequired = false, Order = 31)] + public StringCollection SupportedPrivateKeyFormats + { + get { return m_supportedPrivateKeyFormats; } + set + { + m_supportedPrivateKeyFormats = value; + if (m_supportedPrivateKeyFormats == null) + { + m_supportedPrivateKeyFormats = new StringCollection(); + } + } + } + + /// + /// Gets or sets the max size of the trust list. + /// + [DataMember(IsRequired = false, Order = 32)] + public int MaxTrustListSize + { + get { return m_maxTrustListSize; } + set { m_maxTrustListSize = value; } + } + + /// + /// Gets or sets if multicast DNS is enabled. + /// + [DataMember(IsRequired = false, Order = 33)] + public bool MultiCastDnsEnabled + { + get { return m_multicastDnsEnabled; } + set { m_multicastDnsEnabled = value; } + } + + /// + /// Gets or sets reverse connect server configuration. + /// + [DataMember(IsRequired = false, Order = 34)] + public ReverseConnectServerConfiguration ReverseConnect + { + get { return m_reverseConnect; } + set { m_reverseConnect = value; } + } + #endregion + + #region Private Members + private UserTokenPolicyCollection m_userTokenPolicies; + private bool m_diagnosticsEnabled; + private int m_maxSessionCount; + private int m_minSessionTimeout; + private int m_maxSessionTimeout; + private int m_maxBrowseContinuationPoints; + private int m_maxQueryContinuationPoints; + private int m_maxHistoryContinuationPoints; + private int m_maxRequestAge; + private int m_minPublishingInterval; + private int m_maxPublishingInterval; + private int m_publishingResolution; + private int m_minSubscriptionLifetime; + private int m_maxSubscriptionLifetime; + private int m_maxMessageQueueSize; + private int m_maxNotificationQueueSize; + private int m_maxNotificationsPerPublish; + private int m_minMetadataSamplingInterval; + private SamplingRateGroupCollection m_availableSamplingRates; + private EndpointDescription m_registrationEndpoint; + private int m_maxRegistrationInterval; + private string m_nodeManagerSaveFile; + private int m_maxPublishRequestCount; + private int m_maxSubscriptionCount; + private int m_maxEventQueueSize; + private StringCollection m_serverProfileArray; + private int m_shutdownDelay; + private StringCollection m_serverCapabilities; + private StringCollection m_supportedPrivateKeyFormats; + private int m_maxTrustListSize; + private bool m_multicastDnsEnabled; + private ReverseConnectServerConfiguration m_reverseConnect; + #endregion + } + #endregion + + #region ReverseConnectServerConfiguration Class + /// + /// Stores the configuration of the reverse connections. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ReverseConnectServerConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ReverseConnectServerConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + /// + /// A collection of reverse connect clients. + /// + [DataMember(Order = 10)] + public ReverseConnectClientCollection Clients { get; set; } + + /// + /// The interval after which a new reverse connection is attempted. + /// + [DataMember(Order = 20)] + public int ConnectInterval { get; set; } = 15000; + + /// + /// The default timeout to wait for a response to a reverse connection. + /// + [DataMember(Order = 30)] + public int ConnectTimeout { get; set; } = 30000; + + /// + /// The timeout to wait to establish a new reverse + /// connection after a rejected attempt. + /// + [DataMember(Order = 40)] + public int RejectTimeout { get; set; } = 60000; + #endregion + } + #endregion + + #region ReverseConnectClient Class + /// + /// Stores the configuration of the reverse connections. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ReverseConnectClient + { + #region Constructors + /// + /// The default constructor. + /// + public ReverseConnectClient() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + Enabled = true; + } + #endregion + + #region Persistent Properties + /// + /// The endpoint Url of the reverse connect client endpoint. + /// + [DataMember(Order = 10)] + public string EndpointUrl { get; set; } + + /// + /// The timeout to wait for a response to a reverse connection. + /// Overrides the default reverse connection setting. + /// + [DataMember(Order = 20)] + public int Timeout { get; set; } + + /// + /// The maximum count of active reverse connect sessions. + /// 0 or undefined means unlimited number of sessions. + /// 1 means a single connection is created at a time. + /// n disables reverse hello once the total number of sessions + /// in the server reaches n. + /// + [DataMember(Order = 30)] + public int MaxSessionCount { get; set; } + + /// + /// Specifies whether the sending of reverse connect attempts is enabled. + /// + [DataMember(Order = 40)] + public bool Enabled { get; set; } = true; + #endregion + } + #endregion + + #region ReverseConnectClientCollection Class + /// + /// A collection of reverse connect clients. + /// + [CollectionDataContract(Name = "ListOfReverseConnectClient", Namespace = Namespaces.OpcUaConfig, ItemName = "ReverseConnectClient")] + public class ReverseConnectClientCollection : List + { + #region Constructors + /// + /// Initializes an empty collection. + /// + public ReverseConnectClientCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public ReverseConnectClientCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public ReverseConnectClientCollection(int capacity) : base(capacity) { } + #endregion + } + #endregion + + #region ClientConfiguration Class + /// + /// The configuration for a client application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class ClientConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ClientConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_defaultSessionTimeout = 60000; + m_minSubscriptionLifetime = 10000; + m_wellKnownDiscoveryUrls = new StringCollection(); + m_discoveryServers = new EndpointDescriptionCollection(); + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The default session timeout. + /// + /// The default session timeout. + [DataMember(IsRequired = false, Order = 0)] + public int DefaultSessionTimeout + { + get { return m_defaultSessionTimeout; } + set { m_defaultSessionTimeout = value; } + } + + /// + /// The well known URLs for the local discovery servers. + /// + /// The well known discovery URLs. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 1)] + public StringCollection WellKnownDiscoveryUrls + { + get + { + return m_wellKnownDiscoveryUrls; + } + + set + { + m_wellKnownDiscoveryUrls = value; + + if (m_wellKnownDiscoveryUrls == null) + { + m_wellKnownDiscoveryUrls = new StringCollection(); + } + } + } + + /// + /// The endpoint descriptions for central discovery servers. + /// + /// The endpoint descriptions for central discovery servers. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 2)] + public EndpointDescriptionCollection DiscoveryServers + { + get + { + return m_discoveryServers; + } + + set + { + m_discoveryServers = value; + + if (m_discoveryServers == null) + { + m_discoveryServers = new EndpointDescriptionCollection(); + } + } + } + + /// + /// The path to the file containing the cached endpoints. + /// + /// The path to the file containing the cached endpoints. + [DataMember(IsRequired = false, Order = 3)] + public string EndpointCacheFilePath + { + get { return m_endpointCacheFilePath; } + set { m_endpointCacheFilePath = value; } + } + + /// + /// The minimum lifetime for a subscription. + /// + /// The minimum lifetime for a subscription. + [DataMember(IsRequired = false, Order = 4)] + public int MinSubscriptionLifetime + { + get { return m_minSubscriptionLifetime; } + set { m_minSubscriptionLifetime = value; } + } + + /// + /// Gets or sets reverse connect Client configuration. + /// + [DataMember(IsRequired = false, Order = 5)] + public ReverseConnectClientConfiguration ReverseConnect + { + get { return m_reverseConnect; } + set { m_reverseConnect = value; } + } + #endregion + + #region Private Members + private StringCollection m_wellKnownDiscoveryUrls; + private EndpointDescriptionCollection m_discoveryServers; + private int m_defaultSessionTimeout; + private string m_endpointCacheFilePath; + private int m_minSubscriptionLifetime; + private ReverseConnectClientConfiguration m_reverseConnect; + #endregion + } + #endregion + + #region ReverseConnectClientConfiguration Class + /// + /// Stores the configuration of the reverse connections. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ReverseConnectClientConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ReverseConnectClientConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + /// + /// A collection of reverse connect client endpoints. + /// + [DataMember(Order = 10, IsRequired = false)] + public ReverseConnectClientEndpointCollection ClientEndpoints { get; set; } + + /// + /// The time a reverse hello port is held open to wait for a + /// reverse connection until the request is rejected. + /// + [DataMember(Order = 20, IsRequired = false)] + public int HoldTime { get; set; } = 15000; + + /// + /// The timeout to wait for a reverse hello message. + /// + [DataMember(Order = 30, IsRequired = false)] + public int WaitTimeout { get; set; } = 20000; + #endregion + } + #endregion + + #region ReverseConnectClientEndpoint Class + /// + /// Stores the configuration of the reverse connections. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ReverseConnectClientEndpoint + { + #region Constructors + /// + /// The default constructor. + /// + public ReverseConnectClientEndpoint() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Persistent Properties + /// + /// The endpoint Url of a reverse connect client. + /// + [DataMember(Order = 1, IsRequired = false)] + public string EndpointUrl { get; set; } + #endregion + } + #endregion + + #region ReverseConnectClientEndpointCollection Class + /// + /// A collection of reverse connect client endpoints. + /// + [CollectionDataContract(Name = "ListOfReverseConnectClientEndpoint", Namespace = Namespaces.OpcUaConfig, ItemName = "ClientEndpoint")] + public class ReverseConnectClientEndpointCollection : List + { + #region Constructors + /// + /// Initializes an empty collection. + /// + public ReverseConnectClientEndpointCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public ReverseConnectClientEndpointCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public ReverseConnectClientEndpointCollection(int capacity) : base(capacity) { } + #endregion + } + #endregion + + #region DiscoveryServerConfiguration Class + /// + /// Specifies the configuration for a discovery server application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class DiscoveryServerConfiguration : ServerBaseConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public DiscoveryServerConfiguration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_serverNames = new LocalizedTextCollection(); + m_serverRegistrations = new ServerRegistrationCollection(); + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public new void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The localized names for the discovery server. + /// + /// The server names. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 2)] + public LocalizedTextCollection ServerNames + { + get + { + return m_serverNames; + } + + set + { + m_serverNames = value; + + if (m_serverNames == null) + { + m_serverNames = new LocalizedTextCollection(); + } + } + } + + /// + /// The path to the file containing servers saved by the discovery server. + /// + /// The discovery server cache file. + [DataMember(IsRequired = false, Order = 3)] + public string DiscoveryServerCacheFile + { + get { return m_discoveryServerCacheFile; } + set { m_discoveryServerCacheFile = value; } + } + + /// + /// Gets or sets the server registrations associated with the discovery server. + /// + /// The server registrations. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 4)] + public ServerRegistrationCollection ServerRegistrations + { + get { return m_serverRegistrations; } + set { m_serverRegistrations = value; } + } + #endregion + + #region Private Members + private LocalizedTextCollection m_serverNames; + private string m_discoveryServerCacheFile; + private ServerRegistrationCollection m_serverRegistrations; + #endregion + } + #endregion + + #region ServerRegistration Class + /// + /// Specifies the configuration for a discovery server application. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ServerRegistration + { + #region Constructors + /// + /// The default constructor. + /// + public ServerRegistration() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_applicationUri = null; + m_alternateDiscoveryUrls = new StringCollection(); + } + + /// + /// Initializes the object during deserialization. + /// + /// The context. + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// Gets or sets the application URI of the server which the registration applies to. + /// + /// The application uri. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 1)] + public string ApplicationUri + { + get + { + return m_applicationUri; + } + + set + { + m_applicationUri = value; + } + } + + /// + /// Gets or sets the alternate discovery urls. + /// + /// The alternate discovery urls. + /// + /// These addresses are used to specify alternate paths to ther via firewalls, proxies + /// or similar network infrastructure. If these paths are specified in the configuration + /// file then the server will use the domain of the URL used by the client to determine + /// which, if any, or the alternate addresses to use instead of the primary addresses. + /// + /// In the ideal world the server would provide these URLs during registration but this + /// table allows the administrator to provide the information to the disovery server + /// directly without requiring a patch to the server. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 2)] + public StringCollection AlternateDiscoveryUrls + { + get + { + return m_alternateDiscoveryUrls; + } + + set + { + m_alternateDiscoveryUrls = value; + + if (m_alternateDiscoveryUrls == null) + { + m_alternateDiscoveryUrls = new StringCollection(); + } + } + } + #endregion + + #region Private Members + private string m_applicationUri; + private StringCollection m_alternateDiscoveryUrls; + #endregion + } + #endregion + + #region ServerRegistrationCollection Class + /// + /// A collection of AdditionalServerRegistrationInfo objects. + /// + [CollectionDataContract(Name = "ListOfServerRegistration", Namespace = Namespaces.OpcUaConfig, ItemName = "ServerRegistration")] + public partial class ServerRegistrationCollection : List + { + /// + /// Initializes an empty collection. + /// + public ServerRegistrationCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + /// + /// is null. + /// + public ServerRegistrationCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity. + public ServerRegistrationCollection(int capacity) : base(capacity) { } + } + #endregion + + #region CertificateStoreIdentifier Class + /// + /// Describes a certificate store. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class CertificateStoreIdentifier + { + #region Persistent Properties + /// + /// The type of certificate store. + /// + /// + /// If the StoreName is not empty, the CertificateStoreType.X509Store is returned, otherwise the StoreType is returned. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 0)] + public string StoreType + { + get + { + if (!String.IsNullOrEmpty(m_storeName)) + { + return CertificateStoreType.X509Store; + } + + return m_storeType; + } + + set + { + m_storeType = value; + } + } + + /// + /// The path that identifies the certificate store. + /// + /// + /// If the StoreName is not empty and the StoreLocation is empty, the Utils.Format("LocalMachine\\{0}", m_storeName) is returned. + /// If the StoreName is not empty and the StoreLocation is not empty, the Utils.Format("{1}\\{0}", m_storeName, m_storeLocation) is returned. + /// If the StoreName is empty, the m_storePath is returned. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 1)] + public string StorePath + { + get + { + if (!String.IsNullOrEmpty(m_storeName)) + { + if (String.IsNullOrEmpty(m_storeLocation)) + { + return Utils.Format("CurrentUser\\{0}", m_storeName); + } + + return Utils.Format("{1}\\{0}", m_storeName, m_storeLocation); + } + + return m_storePath; + } + + set + { + m_storePath = value; + + if (!String.IsNullOrEmpty(m_storePath)) + { + if (String.IsNullOrEmpty(m_storeType)) + { + if (m_storePath.StartsWith("LocalMachine", StringComparison.CurrentCultureIgnoreCase) || m_storePath.StartsWith("CurrentUser", StringComparison.CurrentCultureIgnoreCase)) + { + m_storeType = CertificateStoreType.X509Store; + } + else + { + m_storeType = CertificateStoreType.Directory; + } + } + } + } + } + + /// + /// The name of the certifcate store that contains the trusted certficates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 2)] + [Obsolete("Use StoreType/StorePath instead")] + public string StoreName + { + get { return m_storeName; } + set { m_storeName = value; } + } + + /// + /// The location of the certifcate store that contains the trusted certficates. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 3)] + [Obsolete("Use StoreType/StorePath instead")] + public string StoreLocation + { + get { return m_storeLocation; } + set { m_storeLocation = value; } + } + + /// + /// Options that can be used to suppress certificate validation errors. + /// + [DataMember(Name = "ValidationOptions", IsRequired = false, EmitDefaultValue = false, Order = 4)] + private int XmlEncodedValidationOptions + { + get { return (int)m_validationOptions; } + set { m_validationOptions = (CertificateValidationOptions)value; } + } + #endregion + + #region Private Fields + private string m_storeType; + private string m_storePath; + private string m_storeLocation; + private string m_storeName; + private CertificateValidationOptions m_validationOptions; + #endregion + } + #endregion + + #region CertificateTrustList Class + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class CertificateTrustList : CertificateStoreIdentifier + { + #region Constructors + /// + /// The default constructor. + /// + public CertificateTrustList() + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() => m_trustedCertificates = new CertificateIdentifierCollection(); + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Persistent Properties + /// + /// The list of trusted certificates. + /// + /// + /// The list of trusted certificates is set when TrustedCertificates is not a null value, otherwise new CertificateIdentifierCollection is set. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 3)] + public CertificateIdentifierCollection TrustedCertificates + { + get + { + return m_trustedCertificates; + } + + set + { + m_trustedCertificates = value; + + if (m_trustedCertificates == null) + { + m_trustedCertificates = new CertificateIdentifierCollection(); + } + } + } + #endregion + + #region Private Fields + private CertificateIdentifierCollection m_trustedCertificates; + #endregion + } + #endregion + + #region CertificateIdentifierCollection Class + [CollectionDataContract(Name = "ListOfCertificateIdentifier", Namespace = Namespaces.OpcUaConfig, ItemName = "CertificateIdentifier")] + public partial class CertificateIdentifierCollection : List + { + /// + /// Initializes an empty collection. + /// + public CertificateIdentifierCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// A collection of values to add to this new collection + public CertificateIdentifierCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + public CertificateIdentifierCollection(int capacity) : base(capacity) { } + } + #endregion + + #region CertificateIdentifier Class + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class CertificateIdentifier + { + #region Constructors + /// + /// The default constructor. + /// + public CertificateIdentifier() + { + Initialize(); + } + + /// + /// Initializes the identifier with the raw data from a certificate. + /// + public CertificateIdentifier(X509Certificate2 certificate) + { + Initialize(); + m_certificate = certificate; + } + + /// + /// Initializes the identifier with the raw data from a certificate. + /// + public CertificateIdentifier(X509Certificate2 certificate, CertificateValidationOptions validationOptions) + { + Initialize(); + m_certificate = certificate; + m_validationOptions = validationOptions; + } + + + /// + /// Initializes the identifier with the raw data from a certificate. + /// + public CertificateIdentifier(byte[] rawData) + { + Initialize(); + m_certificate = CertificateFactory.Create(rawData, true); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + public void Initialize(StreamingContext context) => Initialize(); + #endregion + + #region Public Properties + /// + /// The type of certificate store. + /// + /// The type of the store - defined in the . + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 0)] + public string StoreType + { + get + { + if (!String.IsNullOrEmpty(m_storeName)) + { + return CertificateStoreType.X509Store; + } + + return m_storeType; + } + + set + { + m_storeType = value; + } + } + + /// + /// The path that identifies the certificate store. + /// + /// The store path in the form StoreName\\Store Location . + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 1)] + public string StorePath + { + get + { + if (!String.IsNullOrEmpty(m_storeName)) + { + if (String.IsNullOrEmpty(m_storeLocation)) + { + return Utils.Format("LocalMachine\\{0}", m_storeName); + } + + return Utils.Format("{1}\\{0}", m_storeName, m_storeLocation); + } + + return m_storePath; + } + + set + { + m_storePath = value; + + if (!String.IsNullOrEmpty(m_storePath)) + { + if (String.IsNullOrEmpty(m_storeType)) + { + if (m_storePath.StartsWith("LocalMachine", StringComparison.CurrentCultureIgnoreCase) || m_storePath.StartsWith("CurrentUser", StringComparison.CurrentCultureIgnoreCase)) + { + m_storeType = CertificateStoreType.X509Store; + } + else + { + m_storeType = CertificateStoreType.Directory; + } + } + } + } + } + + /// + /// The name of the store that contains the certificate. + /// + /// The name of the store. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 2)] + [Obsolete("Use StoreType/StorePath instead")] + public string StoreName + { + get { return m_storeName; } + set { m_storeName = value; } + } + + /// + /// The location of the store that contains the certificate. + /// + /// The store location. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 3)] + [Obsolete("Use StoreType/StorePath instead")] + public string StoreLocation + { + get { return m_storeLocation; } + set { m_storeLocation = value; } + } + + /// + /// The certificate's subject name - the distinguished name of an X509 certificate. + /// + /// + /// The distinguished name of an X509 certificate acording to the Abstract Syntax Notation One (ASN.1) syntax. + /// + /// The subject field identifies the entity associated with the public key stored in the subject public + /// key field. The subject name MAY be carried in the subject field and/or the subjectAltName extension. + /// Where it is non-empty, the subject field MUST contain an X.500 distinguished name (DN). + /// Name is defined by the following ASN.1 structures: + /// Name ::= CHOICE {RDNSequence } + /// RDNSequence ::= SEQUENCE OF RelativeDistinguishedName + /// RelativeDistinguishedName ::= SET OF AttributeTypeAndValue + /// AttributeTypeAndValue ::= SEQUENCE {type AttributeType, value AttributeValue } + /// AttributeType ::= OBJECT IDENTIFIER + /// AttributeValue ::= ANY DEFINED BY AttributeType + /// DirectoryString ::= CHOICE { + /// teletexString TeletexString (SIZE (1..MAX)), + /// printableString PrintableString (SIZE (1..MAX)), + /// universalString UniversalString (SIZE (1..MAX)), + /// utf8String UTF8String (SIZE (1..MAX)), + /// bmpString BMPString (SIZE (1..MAX)) } + /// The Name describes a hierarchical name composed of attributes, such as country name, and + /// corresponding values, such as US. The type of the component AttributeValue is determined by + /// the AttributeType; in general it will be a DirectoryString. + /// String X.500 AttributeType: + /// + /// CN commonName + /// L localityName + /// ST stateOrProvinceName + /// O organizationName + /// OU organizationalUnitName + /// C countryName + /// STREET streetAddress + /// DC domainComponent + /// UID userid + /// + /// This notation is designed to be convenient for common forms of name. This section gives a few + /// examples of distinguished names written using this notation. First is a name containing three relative + /// distinguished names (RDNs): + /// CN=Steve Kille,O=Isode Limited,C=GB + /// + /// RFC 3280 Internet X.509 Public Key Infrastructure, April 2002 + /// RFC 2253 LADPv3 Distinguished Names, December 1997 + /// + /// + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 4)] + public string SubjectName + { + get + { + if (m_certificate == null) + { + return m_subjectName; + } + + return m_certificate.Subject; + } + + set + { + if (m_certificate != null && !String.IsNullOrEmpty(value)) + { + if (m_certificate.Subject != value) + { + throw new ArgumentException("SubjectName does not match the SubjectName of the current certificate."); + } + } + + m_subjectName = value; + } + } + + /// + /// The certificate's thumbprint. + /// + /// The thumbprint of a certificate.. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 5)] + public string Thumbprint + { + get + { + if (m_certificate == null) + { + return m_thumbprint; + } + + return m_certificate.Thumbprint; + } + + set + { + if (m_certificate != null) + { + if (!String.IsNullOrEmpty(value) && m_certificate.Thumbprint != value) + { + throw new ArgumentException("Thumbprint does not match the thumbprint of the current certificate."); + } + } + + m_thumbprint = value; + } + } + + /// + /// Gets the DER encoded certificate data or create emebeded in this instance certifcate using the DER encoded certificate data. + /// + /// A byte array containing the X.509 certificate data. + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 6)] + public byte[] RawData + { + get + { + if (m_certificate == null) + { + return null; + } + + return m_certificate.RawData; + } + + set + { + if (value == null || value.Length == 0) + { + m_certificate = null; + return; + } + + m_certificate = CertificateFactory.Create(value, true); + m_subjectName = m_certificate.Subject; + m_thumbprint = m_certificate.Thumbprint; + } + } + + /// + /// Gets or sets the XML encoded validation options - use to serialize the validation options. + /// + /// The XML encoded validation options. + [DataMember(Name = "ValidationOptions", IsRequired = false, EmitDefaultValue = false, Order = 7)] + private int XmlEncodedValidationOptions + { + get { return (int)m_validationOptions; } + set { m_validationOptions = (CertificateValidationOptions)value; } + } + #endregion + + #region Private Fields + private string m_storeType; + private string m_storePath; + private string m_storeLocation; + private string m_storeName; + private string m_subjectName; + private string m_thumbprint; + private X509Certificate2 m_certificate; + private CertificateValidationOptions m_validationOptions; + #endregion + } + #endregion + + #region ConfiguredEndpointCollection Class + /// + /// Stores a list of cached enpoints. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class ConfiguredEndpointCollection + { + #region Constructors + /// + /// The default constructor. + /// + public ConfiguredEndpointCollection() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + public void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_knownHosts = new StringCollection(); + m_discoveryUrls = new StringCollection(Utils.DiscoveryUrls); + m_endpoints = new List(); + m_defaultConfiguration = EndpointConfiguration.Create(); + } + #endregion + + #region Public Properties + /// + /// A list of known hosts that can be used for discovery. + /// + [DataMember(Name = "KnownHosts", IsRequired = false, Order = 1)] + public StringCollection KnownHosts + { + get + { + return m_knownHosts; + } + + set + { + if (value == null) + { + m_knownHosts = new StringCollection(); + } + else + { + m_knownHosts = value; + } + } + } + + /// + /// The default configuration to use when connecting to an endpoint. + /// + [DataMember(Name = "Endpoints", IsRequired = false, Order = 2)] + public List Endpoints + { + get + { + return m_endpoints; + } + + private set + { + if (value == null) + { + m_endpoints = new List(); + } + else + { + m_endpoints = value; + } + + foreach (ConfiguredEndpoint endpoint in m_endpoints) + { + endpoint.Collection = this; + } + } + } + /// + /// The URL of the UA TCP proxy server. + /// + [DataMember(Name = "TcpProxyUrl", EmitDefaultValue = false, Order = 3)] + public Uri TcpProxyUrl + { + get + { + return m_tcpProxyUrl; + } + + set + { + m_tcpProxyUrl = value; + } + } + #endregion + + #region Private Fields + private string m_filepath; + private StringCollection m_knownHosts; + private StringCollection m_discoveryUrls; + private EndpointConfiguration m_defaultConfiguration; + private List m_endpoints; + private Uri m_tcpProxyUrl; + #endregion + } + #endregion + + #region ConfiguredEndpoint Class + /// + /// Stores the configuration information for an endpoint. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + [KnownType(typeof(UserNameIdentityToken))] + [KnownType(typeof(X509IdentityToken))] + [KnownType(typeof(IssuedIdentityToken))] + public partial class ConfiguredEndpoint + { + #region Constructors + /// + /// The default constructor. + /// + public ConfiguredEndpoint() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + public void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_collection = null; + m_description = new EndpointDescription(); + m_configuration = null; + m_updateBeforeConnect = true; + m_binaryEncodingSupport = BinaryEncodingSupport.Optional; + m_selectedUserTokenPolicyIndex = 0; + m_userIdentity = null; + m_reverseConnect = null; + } + #endregion + + #region Public Properties + /// + /// The description for the endpoint. + /// + [DataMember(Name = "Endpoint", Order = 1, IsRequired = true)] + public EndpointDescription Description + { + get + { + return m_description; + } + + private set + { + if (value == null) + { + m_description = new EndpointDescription(); + } + else + { + m_description = value; + } + } + } + + /// + /// The configuration to use when connecting to an endpoint. + /// + [DataMember(Name = "Configuration", Order = 2, IsRequired = false)] + public EndpointConfiguration Configuration + { + get + { + return m_configuration; + } + + set + { + m_configuration = value; + + // copy default configuration if not already set. + if (m_configuration == null) + { + if (m_collection != null) + { + Update(m_collection.DefaultConfiguration); + } + else + { + Update(EndpointConfiguration.Create()); + } + } + } + } + + /// + /// Whether the endpoint information should be updated before connecting to the server. + /// + [DataMember(Name = "UpdateBeforeConnect", Order = 3, IsRequired = false)] + public bool UpdateBeforeConnect + { + get { return m_updateBeforeConnect; } + set { m_updateBeforeConnect = value; } + } + + /// + /// The user identity to use when connecting to the endpoint. + /// + [DataMember(Name = "BinaryEncodingSupport", Order = 4, IsRequired = false)] + public BinaryEncodingSupport BinaryEncodingSupport + { + get { return m_binaryEncodingSupport; } + set { m_binaryEncodingSupport = value; } + } + + /// + /// The user identity to use when connecting to the endpoint. + /// + [DataMember(Name = "SelectedUserTokenPolicy", Order = 5, IsRequired = false)] + public int SelectedUserTokenPolicyIndex + { + get { return m_selectedUserTokenPolicyIndex; } + set { m_selectedUserTokenPolicyIndex = value; } + } + + /// + /// The user identity to use when connecting to the endpoint. + /// + [DataMember(Name = "UserIdentity", Order = 6, IsRequired = false)] + public UserIdentityToken UserIdentity + { + get { return m_userIdentity; } + set { m_userIdentity = value; } + } + + /// + /// The reverse connect information. + /// + [DataMember(Name = "ReverseConnect", Order = 8, IsRequired = false)] + public ReverseConnectEndpoint ReverseConnect + { + get { return m_reverseConnect; } + set { m_reverseConnect = value; } + } + + /// + /// A bucket to store additional application specific configuration data. + /// + [DataMember(IsRequired = false, EmitDefaultValue = false, Order = 9)] + public XmlElementCollection Extensions + { + get { return m_extensions; } + set { m_extensions = value; } + } + #endregion + + #region Private Fields + private ConfiguredEndpointCollection m_collection; + private EndpointDescription m_description; + private EndpointConfiguration m_configuration; + private bool m_updateBeforeConnect; + private BinaryEncodingSupport m_binaryEncodingSupport; + private int m_selectedUserTokenPolicyIndex; + private UserIdentityToken m_userIdentity; + private ReverseConnectEndpoint m_reverseConnect; + private XmlElementCollection m_extensions; + #endregion + } + #endregion + + #region BinaryEncodingSupport Enumeration + /// + /// The type of binary encoding support allowed by a channel. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public enum BinaryEncodingSupport + { + /// + /// The UA binary encoding may be used. + /// + [EnumMember()] + Optional, + + /// + /// The UA binary encoding must be used. + /// + [EnumMember()] + Required, + + /// + /// The UA binary encoding may not be used. + /// + [EnumMember()] + None + } + #endregion + + #region ReverseConnectEndpoint Class + /// + /// Stores the reverse connect information for an endpoint. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public partial class ReverseConnectEndpoint + { + #region Constructors + /// + /// The default constructor. + /// + public ReverseConnectEndpoint() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + public void Initialize(StreamingContext context) => Initialize(); + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_enabled = false; + m_serverUri = null; + m_thumbprint = null; + } + #endregion + + #region Public Properties + /// + /// Whether reverse connect is enabled for the endpoint. + /// + [DataMember(Name = "Enabled", Order = 1, IsRequired = false)] + public bool Enabled + { + get { return m_enabled; } + set { m_enabled = value; } + } + + /// + /// The server Uri of the endpoint. + /// + [DataMember(Name = "ServerUri", Order = 2, IsRequired = false)] + public string ServerUri + { + get { return m_serverUri; } + set { m_serverUri = value; } + } + + /// + /// The thumbprint of the certificate which contains + /// the server Uri. + /// + [DataMember(Name = "Thumbprint", Order = 3, IsRequired = false)] + public string Thumbprint + { + get { return m_thumbprint; } + set { m_thumbprint = value; } + } + #endregion + + #region Private Fields + private bool m_enabled; + private string m_serverUri; + private string m_thumbprint; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ApplicationConfiguration.xsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ApplicationConfiguration.xsd new file mode 100644 index 00000000..dc3396ce --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ApplicationConfiguration.xsd @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/AttributeIds.csv b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/AttributeIds.csv new file mode 100644 index 00000000..92136eae --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/AttributeIds.csv @@ -0,0 +1,27 @@ +NodeId,1 +NodeClass,2 +BrowseName,3 +DisplayName,4 +Description,5 +WriteMask,6 +UserWriteMask,7 +IsAbstract,8 +Symmetric,9 +InverseName,10 +ContainsNoLoops,11 +EventNotifier,12 +Value,13 +DataType,14 +ValueRank,15 +ArrayDimensions,16 +AccessLevel,17 +UserAccessLevel,18 +MinimumSamplingInterval,19 +Historizing,20 +Executable,21 +UserExecutable,22 +DataTypeDefinition,23 +RolePermissions,24 +UserRolePermissions,25 +AccessRestrictions,26 +AccessLevelEx,27 diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/BuildSchema.bat b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/BuildSchema.bat new file mode 100644 index 00000000..3d06a520 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/BuildSchema.bat @@ -0,0 +1,16 @@ +@echo off +setlocal + +echo Processing NodeSet Schema +xsd /classes /n:Opc.Ua.Export UANodeSet.xsd + +echo #pragma warning disable 1591 > temp.txt +type UANodeSet.cs >> temp.txt +type temp.txt > UANodeSet.cs + +echo Processing SecuredApplication Schema +svcutil /dconly /namespace:*,Opc.Ua.Security /out:SecuredApplication.cs SecuredApplication.xsd + +echo #pragma warning disable 1591 > temp.txt +type SecuredApplication.cs >> temp.txt +type temp.txt > SecuredApplication.cs diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/NodeIds.csv b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/NodeIds.csv new file mode 100644 index 00000000..ce9a47d2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/NodeIds.csv @@ -0,0 +1,14362 @@ +Boolean,1,DataType +SByte,2,DataType +Byte,3,DataType +Int16,4,DataType +UInt16,5,DataType +Int32,6,DataType +UInt32,7,DataType +Int64,8,DataType +UInt64,9,DataType +Float,10,DataType +Double,11,DataType +String,12,DataType +DateTime,13,DataType +Guid,14,DataType +ByteString,15,DataType +XmlElement,16,DataType +NodeId,17,DataType +ExpandedNodeId,18,DataType +StatusCode,19,DataType +QualifiedName,20,DataType +LocalizedText,21,DataType +Structure,22,DataType +DataValue,23,DataType +BaseDataType,24,DataType +DiagnosticInfo,25,DataType +Number,26,DataType +Integer,27,DataType +UInteger,28,DataType +Enumeration,29,DataType +Image,30,DataType +References,31,ReferenceType +NonHierarchicalReferences,32,ReferenceType +HierarchicalReferences,33,ReferenceType +HasChild,34,ReferenceType +Organizes,35,ReferenceType +HasEventSource,36,ReferenceType +HasModellingRule,37,ReferenceType +HasEncoding,38,ReferenceType +HasDescription,39,ReferenceType +HasTypeDefinition,40,ReferenceType +GeneratesEvent,41,ReferenceType +Aggregates,44,ReferenceType +HasSubtype,45,ReferenceType +HasProperty,46,ReferenceType +HasComponent,47,ReferenceType +HasNotifier,48,ReferenceType +HasOrderedComponent,49,ReferenceType +Decimal,50,DataType +FromState,51,ReferenceType +ToState,52,ReferenceType +HasCause,53,ReferenceType +HasEffect,54,ReferenceType +HasHistoricalConfiguration,56,ReferenceType +BaseObjectType,58,ObjectType +FolderType,61,ObjectType +BaseVariableType,62,VariableType +BaseDataVariableType,63,VariableType +PropertyType,68,VariableType +DataTypeDescriptionType,69,VariableType +DataTypeDictionaryType,72,VariableType +DataTypeSystemType,75,ObjectType +DataTypeEncodingType,76,ObjectType +ModellingRuleType,77,ObjectType +ModellingRule_Mandatory,78,Object +ModellingRule_Optional,80,Object +ModellingRule_ExposesItsArray,83,Object +RootFolder,84,Object +ObjectsFolder,85,Object +TypesFolder,86,Object +ViewsFolder,87,Object +ObjectTypesFolder,88,Object +VariableTypesFolder,89,Object +DataTypesFolder,90,Object +ReferenceTypesFolder,91,Object +XmlSchema_TypeSystem,92,Object +OPCBinarySchema_TypeSystem,93,Object +PermissionType,94,DataType +AccessRestrictionType,95,DataType +RolePermissionType,96,DataType +DataTypeDefinition,97,DataType +StructureType,98,DataType +StructureDefinition,99,DataType +EnumDefinition,100,DataType +StructureField,101,DataType +EnumField,102,DataType +DataTypeDescriptionType_DataTypeVersion,104,Variable +DataTypeDescriptionType_DictionaryFragment,105,Variable +DataTypeDictionaryType_DataTypeVersion,106,Variable +DataTypeDictionaryType_NamespaceUri,107,Variable +ModellingRuleType_NamingRule,111,Variable +ModellingRule_Mandatory_NamingRule,112,Variable +ModellingRule_Optional_NamingRule,113,Variable +ModellingRule_ExposesItsArray_NamingRule,114,Variable +HasSubStateMachine,117,ReferenceType +NamingRuleType,120,DataType +DataTypeDefinition_Encoding_DefaultBinary,121,Object +StructureDefinition_Encoding_DefaultBinary,122,Object +EnumDefinition_Encoding_DefaultBinary,123,Object +DataSetMetaDataType_Encoding_DefaultBinary,124,Object +DataTypeDescription_Encoding_DefaultBinary,125,Object +StructureDescription_Encoding_DefaultBinary,126,Object +EnumDescription_Encoding_DefaultBinary,127,Object +RolePermissionType_Encoding_DefaultBinary,128,Object +HasArgumentDescription,129,ReferenceType +HasOptionalInputArgumentDescription,131,ReferenceType +IdType,256,DataType +NodeClass,257,DataType +Node,258,DataType +Node_Encoding_DefaultXml,259,Object +Node_Encoding_DefaultBinary,260,Object +ObjectNode,261,DataType +ObjectNode_Encoding_DefaultXml,262,Object +ObjectNode_Encoding_DefaultBinary,263,Object +ObjectTypeNode,264,DataType +ObjectTypeNode_Encoding_DefaultXml,265,Object +ObjectTypeNode_Encoding_DefaultBinary,266,Object +VariableNode,267,DataType +VariableNode_Encoding_DefaultXml,268,Object +VariableNode_Encoding_DefaultBinary,269,Object +VariableTypeNode,270,DataType +VariableTypeNode_Encoding_DefaultXml,271,Object +VariableTypeNode_Encoding_DefaultBinary,272,Object +ReferenceTypeNode,273,DataType +ReferenceTypeNode_Encoding_DefaultXml,274,Object +ReferenceTypeNode_Encoding_DefaultBinary,275,Object +MethodNode,276,DataType +MethodNode_Encoding_DefaultXml,277,Object +MethodNode_Encoding_DefaultBinary,278,Object +ViewNode,279,DataType +ViewNode_Encoding_DefaultXml,280,Object +ViewNode_Encoding_DefaultBinary,281,Object +DataTypeNode,282,DataType +DataTypeNode_Encoding_DefaultXml,283,Object +DataTypeNode_Encoding_DefaultBinary,284,Object +ReferenceNode,285,DataType +ReferenceNode_Encoding_DefaultXml,286,Object +ReferenceNode_Encoding_DefaultBinary,287,Object +IntegerId,288,DataType +Counter,289,DataType +Duration,290,DataType +NumericRange,291,DataType +Time,292,DataType +Date,293,DataType +UtcTime,294,DataType +LocaleId,295,DataType +Argument,296,DataType +Argument_Encoding_DefaultXml,297,Object +Argument_Encoding_DefaultBinary,298,Object +StatusResult,299,DataType +StatusResult_Encoding_DefaultXml,300,Object +StatusResult_Encoding_DefaultBinary,301,Object +MessageSecurityMode,302,DataType +UserTokenType,303,DataType +UserTokenPolicy,304,DataType +UserTokenPolicy_Encoding_DefaultXml,305,Object +UserTokenPolicy_Encoding_DefaultBinary,306,Object +ApplicationType,307,DataType +ApplicationDescription,308,DataType +ApplicationDescription_Encoding_DefaultXml,309,Object +ApplicationDescription_Encoding_DefaultBinary,310,Object +ApplicationInstanceCertificate,311,DataType +EndpointDescription,312,DataType +EndpointDescription_Encoding_DefaultXml,313,Object +EndpointDescription_Encoding_DefaultBinary,314,Object +SecurityTokenRequestType,315,DataType +UserIdentityToken,316,DataType +UserIdentityToken_Encoding_DefaultXml,317,Object +UserIdentityToken_Encoding_DefaultBinary,318,Object +AnonymousIdentityToken,319,DataType +AnonymousIdentityToken_Encoding_DefaultXml,320,Object +AnonymousIdentityToken_Encoding_DefaultBinary,321,Object +UserNameIdentityToken,322,DataType +UserNameIdentityToken_Encoding_DefaultXml,323,Object +UserNameIdentityToken_Encoding_DefaultBinary,324,Object +X509IdentityToken,325,DataType +X509IdentityToken_Encoding_DefaultXml,326,Object +X509IdentityToken_Encoding_DefaultBinary,327,Object +EndpointConfiguration,331,DataType +EndpointConfiguration_Encoding_DefaultXml,332,Object +EndpointConfiguration_Encoding_DefaultBinary,333,Object +BuildInfo,338,DataType +BuildInfo_Encoding_DefaultXml,339,Object +BuildInfo_Encoding_DefaultBinary,340,Object +SignedSoftwareCertificate,344,DataType +SignedSoftwareCertificate_Encoding_DefaultXml,345,Object +SignedSoftwareCertificate_Encoding_DefaultBinary,346,Object +AttributeWriteMask,347,DataType +NodeAttributesMask,348,DataType +NodeAttributes,349,DataType +NodeAttributes_Encoding_DefaultXml,350,Object +NodeAttributes_Encoding_DefaultBinary,351,Object +ObjectAttributes,352,DataType +ObjectAttributes_Encoding_DefaultXml,353,Object +ObjectAttributes_Encoding_DefaultBinary,354,Object +VariableAttributes,355,DataType +VariableAttributes_Encoding_DefaultXml,356,Object +VariableAttributes_Encoding_DefaultBinary,357,Object +MethodAttributes,358,DataType +MethodAttributes_Encoding_DefaultXml,359,Object +MethodAttributes_Encoding_DefaultBinary,360,Object +ObjectTypeAttributes,361,DataType +ObjectTypeAttributes_Encoding_DefaultXml,362,Object +ObjectTypeAttributes_Encoding_DefaultBinary,363,Object +VariableTypeAttributes,364,DataType +VariableTypeAttributes_Encoding_DefaultXml,365,Object +VariableTypeAttributes_Encoding_DefaultBinary,366,Object +ReferenceTypeAttributes,367,DataType +ReferenceTypeAttributes_Encoding_DefaultXml,368,Object +ReferenceTypeAttributes_Encoding_DefaultBinary,369,Object +DataTypeAttributes,370,DataType +DataTypeAttributes_Encoding_DefaultXml,371,Object +DataTypeAttributes_Encoding_DefaultBinary,372,Object +ViewAttributes,373,DataType +ViewAttributes_Encoding_DefaultXml,374,Object +ViewAttributes_Encoding_DefaultBinary,375,Object +AddNodesItem,376,DataType +AddNodesItem_Encoding_DefaultXml,377,Object +AddNodesItem_Encoding_DefaultBinary,378,Object +AddReferencesItem,379,DataType +AddReferencesItem_Encoding_DefaultXml,380,Object +AddReferencesItem_Encoding_DefaultBinary,381,Object +DeleteNodesItem,382,DataType +DeleteNodesItem_Encoding_DefaultXml,383,Object +DeleteNodesItem_Encoding_DefaultBinary,384,Object +DeleteReferencesItem,385,DataType +DeleteReferencesItem_Encoding_DefaultXml,386,Object +DeleteReferencesItem_Encoding_DefaultBinary,387,Object +SessionAuthenticationToken,388,DataType +RequestHeader,389,DataType +RequestHeader_Encoding_DefaultXml,390,Object +RequestHeader_Encoding_DefaultBinary,391,Object +ResponseHeader,392,DataType +ResponseHeader_Encoding_DefaultXml,393,Object +ResponseHeader_Encoding_DefaultBinary,394,Object +ServiceFault,395,DataType +ServiceFault_Encoding_DefaultXml,396,Object +ServiceFault_Encoding_DefaultBinary,397,Object +FindServersRequest,420,DataType +FindServersRequest_Encoding_DefaultXml,421,Object +FindServersRequest_Encoding_DefaultBinary,422,Object +FindServersResponse,423,DataType +FindServersResponse_Encoding_DefaultXml,424,Object +FindServersResponse_Encoding_DefaultBinary,425,Object +GetEndpointsRequest,426,DataType +GetEndpointsRequest_Encoding_DefaultXml,427,Object +GetEndpointsRequest_Encoding_DefaultBinary,428,Object +GetEndpointsResponse,429,DataType +GetEndpointsResponse_Encoding_DefaultXml,430,Object +GetEndpointsResponse_Encoding_DefaultBinary,431,Object +RegisteredServer,432,DataType +RegisteredServer_Encoding_DefaultXml,433,Object +RegisteredServer_Encoding_DefaultBinary,434,Object +RegisterServerRequest,435,DataType +RegisterServerRequest_Encoding_DefaultXml,436,Object +RegisterServerRequest_Encoding_DefaultBinary,437,Object +RegisterServerResponse,438,DataType +RegisterServerResponse_Encoding_DefaultXml,439,Object +RegisterServerResponse_Encoding_DefaultBinary,440,Object +ChannelSecurityToken,441,DataType +ChannelSecurityToken_Encoding_DefaultXml,442,Object +ChannelSecurityToken_Encoding_DefaultBinary,443,Object +OpenSecureChannelRequest,444,DataType +OpenSecureChannelRequest_Encoding_DefaultXml,445,Object +OpenSecureChannelRequest_Encoding_DefaultBinary,446,Object +OpenSecureChannelResponse,447,DataType +OpenSecureChannelResponse_Encoding_DefaultXml,448,Object +OpenSecureChannelResponse_Encoding_DefaultBinary,449,Object +CloseSecureChannelRequest,450,DataType +CloseSecureChannelRequest_Encoding_DefaultXml,451,Object +CloseSecureChannelRequest_Encoding_DefaultBinary,452,Object +CloseSecureChannelResponse,453,DataType +CloseSecureChannelResponse_Encoding_DefaultXml,454,Object +CloseSecureChannelResponse_Encoding_DefaultBinary,455,Object +SignatureData,456,DataType +SignatureData_Encoding_DefaultXml,457,Object +SignatureData_Encoding_DefaultBinary,458,Object +CreateSessionRequest,459,DataType +CreateSessionRequest_Encoding_DefaultXml,460,Object +CreateSessionRequest_Encoding_DefaultBinary,461,Object +CreateSessionResponse,462,DataType +CreateSessionResponse_Encoding_DefaultXml,463,Object +CreateSessionResponse_Encoding_DefaultBinary,464,Object +ActivateSessionRequest,465,DataType +ActivateSessionRequest_Encoding_DefaultXml,466,Object +ActivateSessionRequest_Encoding_DefaultBinary,467,Object +ActivateSessionResponse,468,DataType +ActivateSessionResponse_Encoding_DefaultXml,469,Object +ActivateSessionResponse_Encoding_DefaultBinary,470,Object +CloseSessionRequest,471,DataType +CloseSessionRequest_Encoding_DefaultXml,472,Object +CloseSessionRequest_Encoding_DefaultBinary,473,Object +CloseSessionResponse,474,DataType +CloseSessionResponse_Encoding_DefaultXml,475,Object +CloseSessionResponse_Encoding_DefaultBinary,476,Object +CancelRequest,477,DataType +CancelRequest_Encoding_DefaultXml,478,Object +CancelRequest_Encoding_DefaultBinary,479,Object +CancelResponse,480,DataType +CancelResponse_Encoding_DefaultXml,481,Object +CancelResponse_Encoding_DefaultBinary,482,Object +AddNodesResult,483,DataType +AddNodesResult_Encoding_DefaultXml,484,Object +AddNodesResult_Encoding_DefaultBinary,485,Object +AddNodesRequest,486,DataType +AddNodesRequest_Encoding_DefaultXml,487,Object +AddNodesRequest_Encoding_DefaultBinary,488,Object +AddNodesResponse,489,DataType +AddNodesResponse_Encoding_DefaultXml,490,Object +AddNodesResponse_Encoding_DefaultBinary,491,Object +AddReferencesRequest,492,DataType +AddReferencesRequest_Encoding_DefaultXml,493,Object +AddReferencesRequest_Encoding_DefaultBinary,494,Object +AddReferencesResponse,495,DataType +AddReferencesResponse_Encoding_DefaultXml,496,Object +AddReferencesResponse_Encoding_DefaultBinary,497,Object +DeleteNodesRequest,498,DataType +DeleteNodesRequest_Encoding_DefaultXml,499,Object +DeleteNodesRequest_Encoding_DefaultBinary,500,Object +DeleteNodesResponse,501,DataType +DeleteNodesResponse_Encoding_DefaultXml,502,Object +DeleteNodesResponse_Encoding_DefaultBinary,503,Object +DeleteReferencesRequest,504,DataType +DeleteReferencesRequest_Encoding_DefaultXml,505,Object +DeleteReferencesRequest_Encoding_DefaultBinary,506,Object +DeleteReferencesResponse,507,DataType +DeleteReferencesResponse_Encoding_DefaultXml,508,Object +DeleteReferencesResponse_Encoding_DefaultBinary,509,Object +BrowseDirection,510,DataType +ViewDescription,511,DataType +ViewDescription_Encoding_DefaultXml,512,Object +ViewDescription_Encoding_DefaultBinary,513,Object +BrowseDescription,514,DataType +BrowseDescription_Encoding_DefaultXml,515,Object +BrowseDescription_Encoding_DefaultBinary,516,Object +BrowseResultMask,517,DataType +ReferenceDescription,518,DataType +ReferenceDescription_Encoding_DefaultXml,519,Object +ReferenceDescription_Encoding_DefaultBinary,520,Object +ContinuationPoint,521,DataType +BrowseResult,522,DataType +BrowseResult_Encoding_DefaultXml,523,Object +BrowseResult_Encoding_DefaultBinary,524,Object +BrowseRequest,525,DataType +BrowseRequest_Encoding_DefaultXml,526,Object +BrowseRequest_Encoding_DefaultBinary,527,Object +BrowseResponse,528,DataType +BrowseResponse_Encoding_DefaultXml,529,Object +BrowseResponse_Encoding_DefaultBinary,530,Object +BrowseNextRequest,531,DataType +BrowseNextRequest_Encoding_DefaultXml,532,Object +BrowseNextRequest_Encoding_DefaultBinary,533,Object +BrowseNextResponse,534,DataType +BrowseNextResponse_Encoding_DefaultXml,535,Object +BrowseNextResponse_Encoding_DefaultBinary,536,Object +RelativePathElement,537,DataType +RelativePathElement_Encoding_DefaultXml,538,Object +RelativePathElement_Encoding_DefaultBinary,539,Object +RelativePath,540,DataType +RelativePath_Encoding_DefaultXml,541,Object +RelativePath_Encoding_DefaultBinary,542,Object +BrowsePath,543,DataType +BrowsePath_Encoding_DefaultXml,544,Object +BrowsePath_Encoding_DefaultBinary,545,Object +BrowsePathTarget,546,DataType +BrowsePathTarget_Encoding_DefaultXml,547,Object +BrowsePathTarget_Encoding_DefaultBinary,548,Object +BrowsePathResult,549,DataType +BrowsePathResult_Encoding_DefaultXml,550,Object +BrowsePathResult_Encoding_DefaultBinary,551,Object +TranslateBrowsePathsToNodeIdsRequest,552,DataType +TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml,553,Object +TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary,554,Object +TranslateBrowsePathsToNodeIdsResponse,555,DataType +TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml,556,Object +TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary,557,Object +RegisterNodesRequest,558,DataType +RegisterNodesRequest_Encoding_DefaultXml,559,Object +RegisterNodesRequest_Encoding_DefaultBinary,560,Object +RegisterNodesResponse,561,DataType +RegisterNodesResponse_Encoding_DefaultXml,562,Object +RegisterNodesResponse_Encoding_DefaultBinary,563,Object +UnregisterNodesRequest,564,DataType +UnregisterNodesRequest_Encoding_DefaultXml,565,Object +UnregisterNodesRequest_Encoding_DefaultBinary,566,Object +UnregisterNodesResponse,567,DataType +UnregisterNodesResponse_Encoding_DefaultXml,568,Object +UnregisterNodesResponse_Encoding_DefaultBinary,569,Object +QueryDataDescription,570,DataType +QueryDataDescription_Encoding_DefaultXml,571,Object +QueryDataDescription_Encoding_DefaultBinary,572,Object +NodeTypeDescription,573,DataType +NodeTypeDescription_Encoding_DefaultXml,574,Object +NodeTypeDescription_Encoding_DefaultBinary,575,Object +FilterOperator,576,DataType +QueryDataSet,577,DataType +QueryDataSet_Encoding_DefaultXml,578,Object +QueryDataSet_Encoding_DefaultBinary,579,Object +NodeReference,580,DataType +NodeReference_Encoding_DefaultXml,581,Object +NodeReference_Encoding_DefaultBinary,582,Object +ContentFilterElement,583,DataType +ContentFilterElement_Encoding_DefaultXml,584,Object +ContentFilterElement_Encoding_DefaultBinary,585,Object +ContentFilter,586,DataType +ContentFilter_Encoding_DefaultXml,587,Object +ContentFilter_Encoding_DefaultBinary,588,Object +FilterOperand,589,DataType +FilterOperand_Encoding_DefaultXml,590,Object +FilterOperand_Encoding_DefaultBinary,591,Object +ElementOperand,592,DataType +ElementOperand_Encoding_DefaultXml,593,Object +ElementOperand_Encoding_DefaultBinary,594,Object +LiteralOperand,595,DataType +LiteralOperand_Encoding_DefaultXml,596,Object +LiteralOperand_Encoding_DefaultBinary,597,Object +AttributeOperand,598,DataType +AttributeOperand_Encoding_DefaultXml,599,Object +AttributeOperand_Encoding_DefaultBinary,600,Object +SimpleAttributeOperand,601,DataType +SimpleAttributeOperand_Encoding_DefaultXml,602,Object +SimpleAttributeOperand_Encoding_DefaultBinary,603,Object +ContentFilterElementResult,604,DataType +ContentFilterElementResult_Encoding_DefaultXml,605,Object +ContentFilterElementResult_Encoding_DefaultBinary,606,Object +ContentFilterResult,607,DataType +ContentFilterResult_Encoding_DefaultXml,608,Object +ContentFilterResult_Encoding_DefaultBinary,609,Object +ParsingResult,610,DataType +ParsingResult_Encoding_DefaultXml,611,Object +ParsingResult_Encoding_DefaultBinary,612,Object +QueryFirstRequest,613,DataType +QueryFirstRequest_Encoding_DefaultXml,614,Object +QueryFirstRequest_Encoding_DefaultBinary,615,Object +QueryFirstResponse,616,DataType +QueryFirstResponse_Encoding_DefaultXml,617,Object +QueryFirstResponse_Encoding_DefaultBinary,618,Object +QueryNextRequest,619,DataType +QueryNextRequest_Encoding_DefaultXml,620,Object +QueryNextRequest_Encoding_DefaultBinary,621,Object +QueryNextResponse,622,DataType +QueryNextResponse_Encoding_DefaultXml,623,Object +QueryNextResponse_Encoding_DefaultBinary,624,Object +TimestampsToReturn,625,DataType +ReadValueId,626,DataType +ReadValueId_Encoding_DefaultXml,627,Object +ReadValueId_Encoding_DefaultBinary,628,Object +ReadRequest,629,DataType +ReadRequest_Encoding_DefaultXml,630,Object +ReadRequest_Encoding_DefaultBinary,631,Object +ReadResponse,632,DataType +ReadResponse_Encoding_DefaultXml,633,Object +ReadResponse_Encoding_DefaultBinary,634,Object +HistoryReadValueId,635,DataType +HistoryReadValueId_Encoding_DefaultXml,636,Object +HistoryReadValueId_Encoding_DefaultBinary,637,Object +HistoryReadResult,638,DataType +HistoryReadResult_Encoding_DefaultXml,639,Object +HistoryReadResult_Encoding_DefaultBinary,640,Object +HistoryReadDetails,641,DataType +HistoryReadDetails_Encoding_DefaultXml,642,Object +HistoryReadDetails_Encoding_DefaultBinary,643,Object +ReadEventDetails,644,DataType +ReadEventDetails_Encoding_DefaultXml,645,Object +ReadEventDetails_Encoding_DefaultBinary,646,Object +ReadRawModifiedDetails,647,DataType +ReadRawModifiedDetails_Encoding_DefaultXml,648,Object +ReadRawModifiedDetails_Encoding_DefaultBinary,649,Object +ReadProcessedDetails,650,DataType +ReadProcessedDetails_Encoding_DefaultXml,651,Object +ReadProcessedDetails_Encoding_DefaultBinary,652,Object +ReadAtTimeDetails,653,DataType +ReadAtTimeDetails_Encoding_DefaultXml,654,Object +ReadAtTimeDetails_Encoding_DefaultBinary,655,Object +HistoryData,656,DataType +HistoryData_Encoding_DefaultXml,657,Object +HistoryData_Encoding_DefaultBinary,658,Object +HistoryEvent,659,DataType +HistoryEvent_Encoding_DefaultXml,660,Object +HistoryEvent_Encoding_DefaultBinary,661,Object +HistoryReadRequest,662,DataType +HistoryReadRequest_Encoding_DefaultXml,663,Object +HistoryReadRequest_Encoding_DefaultBinary,664,Object +HistoryReadResponse,665,DataType +HistoryReadResponse_Encoding_DefaultXml,666,Object +HistoryReadResponse_Encoding_DefaultBinary,667,Object +WriteValue,668,DataType +WriteValue_Encoding_DefaultXml,669,Object +WriteValue_Encoding_DefaultBinary,670,Object +WriteRequest,671,DataType +WriteRequest_Encoding_DefaultXml,672,Object +WriteRequest_Encoding_DefaultBinary,673,Object +WriteResponse,674,DataType +WriteResponse_Encoding_DefaultXml,675,Object +WriteResponse_Encoding_DefaultBinary,676,Object +HistoryUpdateDetails,677,DataType +HistoryUpdateDetails_Encoding_DefaultXml,678,Object +HistoryUpdateDetails_Encoding_DefaultBinary,679,Object +UpdateDataDetails,680,DataType +UpdateDataDetails_Encoding_DefaultXml,681,Object +UpdateDataDetails_Encoding_DefaultBinary,682,Object +UpdateEventDetails,683,DataType +UpdateEventDetails_Encoding_DefaultXml,684,Object +UpdateEventDetails_Encoding_DefaultBinary,685,Object +DeleteRawModifiedDetails,686,DataType +DeleteRawModifiedDetails_Encoding_DefaultXml,687,Object +DeleteRawModifiedDetails_Encoding_DefaultBinary,688,Object +DeleteAtTimeDetails,689,DataType +DeleteAtTimeDetails_Encoding_DefaultXml,690,Object +DeleteAtTimeDetails_Encoding_DefaultBinary,691,Object +DeleteEventDetails,692,DataType +DeleteEventDetails_Encoding_DefaultXml,693,Object +DeleteEventDetails_Encoding_DefaultBinary,694,Object +HistoryUpdateResult,695,DataType +HistoryUpdateResult_Encoding_DefaultXml,696,Object +HistoryUpdateResult_Encoding_DefaultBinary,697,Object +HistoryUpdateRequest,698,DataType +HistoryUpdateRequest_Encoding_DefaultXml,699,Object +HistoryUpdateRequest_Encoding_DefaultBinary,700,Object +HistoryUpdateResponse,701,DataType +HistoryUpdateResponse_Encoding_DefaultXml,702,Object +HistoryUpdateResponse_Encoding_DefaultBinary,703,Object +CallMethodRequest,704,DataType +CallMethodRequest_Encoding_DefaultXml,705,Object +CallMethodRequest_Encoding_DefaultBinary,706,Object +CallMethodResult,707,DataType +CallMethodResult_Encoding_DefaultXml,708,Object +CallMethodResult_Encoding_DefaultBinary,709,Object +CallRequest,710,DataType +CallRequest_Encoding_DefaultXml,711,Object +CallRequest_Encoding_DefaultBinary,712,Object +CallResponse,713,DataType +CallResponse_Encoding_DefaultXml,714,Object +CallResponse_Encoding_DefaultBinary,715,Object +MonitoringMode,716,DataType +DataChangeTrigger,717,DataType +DeadbandType,718,DataType +MonitoringFilter,719,DataType +MonitoringFilter_Encoding_DefaultXml,720,Object +MonitoringFilter_Encoding_DefaultBinary,721,Object +DataChangeFilter,722,DataType +DataChangeFilter_Encoding_DefaultXml,723,Object +DataChangeFilter_Encoding_DefaultBinary,724,Object +EventFilter,725,DataType +EventFilter_Encoding_DefaultXml,726,Object +EventFilter_Encoding_DefaultBinary,727,Object +AggregateFilter,728,DataType +AggregateFilter_Encoding_DefaultXml,729,Object +AggregateFilter_Encoding_DefaultBinary,730,Object +MonitoringFilterResult,731,DataType +MonitoringFilterResult_Encoding_DefaultXml,732,Object +MonitoringFilterResult_Encoding_DefaultBinary,733,Object +EventFilterResult,734,DataType +EventFilterResult_Encoding_DefaultXml,735,Object +EventFilterResult_Encoding_DefaultBinary,736,Object +AggregateFilterResult,737,DataType +AggregateFilterResult_Encoding_DefaultXml,738,Object +AggregateFilterResult_Encoding_DefaultBinary,739,Object +MonitoringParameters,740,DataType +MonitoringParameters_Encoding_DefaultXml,741,Object +MonitoringParameters_Encoding_DefaultBinary,742,Object +MonitoredItemCreateRequest,743,DataType +MonitoredItemCreateRequest_Encoding_DefaultXml,744,Object +MonitoredItemCreateRequest_Encoding_DefaultBinary,745,Object +MonitoredItemCreateResult,746,DataType +MonitoredItemCreateResult_Encoding_DefaultXml,747,Object +MonitoredItemCreateResult_Encoding_DefaultBinary,748,Object +CreateMonitoredItemsRequest,749,DataType +CreateMonitoredItemsRequest_Encoding_DefaultXml,750,Object +CreateMonitoredItemsRequest_Encoding_DefaultBinary,751,Object +CreateMonitoredItemsResponse,752,DataType +CreateMonitoredItemsResponse_Encoding_DefaultXml,753,Object +CreateMonitoredItemsResponse_Encoding_DefaultBinary,754,Object +MonitoredItemModifyRequest,755,DataType +MonitoredItemModifyRequest_Encoding_DefaultXml,756,Object +MonitoredItemModifyRequest_Encoding_DefaultBinary,757,Object +MonitoredItemModifyResult,758,DataType +MonitoredItemModifyResult_Encoding_DefaultXml,759,Object +MonitoredItemModifyResult_Encoding_DefaultBinary,760,Object +ModifyMonitoredItemsRequest,761,DataType +ModifyMonitoredItemsRequest_Encoding_DefaultXml,762,Object +ModifyMonitoredItemsRequest_Encoding_DefaultBinary,763,Object +ModifyMonitoredItemsResponse,764,DataType +ModifyMonitoredItemsResponse_Encoding_DefaultXml,765,Object +ModifyMonitoredItemsResponse_Encoding_DefaultBinary,766,Object +SetMonitoringModeRequest,767,DataType +SetMonitoringModeRequest_Encoding_DefaultXml,768,Object +SetMonitoringModeRequest_Encoding_DefaultBinary,769,Object +SetMonitoringModeResponse,770,DataType +SetMonitoringModeResponse_Encoding_DefaultXml,771,Object +SetMonitoringModeResponse_Encoding_DefaultBinary,772,Object +SetTriggeringRequest,773,DataType +SetTriggeringRequest_Encoding_DefaultXml,774,Object +SetTriggeringRequest_Encoding_DefaultBinary,775,Object +SetTriggeringResponse,776,DataType +SetTriggeringResponse_Encoding_DefaultXml,777,Object +SetTriggeringResponse_Encoding_DefaultBinary,778,Object +DeleteMonitoredItemsRequest,779,DataType +DeleteMonitoredItemsRequest_Encoding_DefaultXml,780,Object +DeleteMonitoredItemsRequest_Encoding_DefaultBinary,781,Object +DeleteMonitoredItemsResponse,782,DataType +DeleteMonitoredItemsResponse_Encoding_DefaultXml,783,Object +DeleteMonitoredItemsResponse_Encoding_DefaultBinary,784,Object +CreateSubscriptionRequest,785,DataType +CreateSubscriptionRequest_Encoding_DefaultXml,786,Object +CreateSubscriptionRequest_Encoding_DefaultBinary,787,Object +CreateSubscriptionResponse,788,DataType +CreateSubscriptionResponse_Encoding_DefaultXml,789,Object +CreateSubscriptionResponse_Encoding_DefaultBinary,790,Object +ModifySubscriptionRequest,791,DataType +ModifySubscriptionRequest_Encoding_DefaultXml,792,Object +ModifySubscriptionRequest_Encoding_DefaultBinary,793,Object +ModifySubscriptionResponse,794,DataType +ModifySubscriptionResponse_Encoding_DefaultXml,795,Object +ModifySubscriptionResponse_Encoding_DefaultBinary,796,Object +SetPublishingModeRequest,797,DataType +SetPublishingModeRequest_Encoding_DefaultXml,798,Object +SetPublishingModeRequest_Encoding_DefaultBinary,799,Object +SetPublishingModeResponse,800,DataType +SetPublishingModeResponse_Encoding_DefaultXml,801,Object +SetPublishingModeResponse_Encoding_DefaultBinary,802,Object +NotificationMessage,803,DataType +NotificationMessage_Encoding_DefaultXml,804,Object +NotificationMessage_Encoding_DefaultBinary,805,Object +MonitoredItemNotification,806,DataType +MonitoredItemNotification_Encoding_DefaultXml,807,Object +MonitoredItemNotification_Encoding_DefaultBinary,808,Object +DataChangeNotification,809,DataType +DataChangeNotification_Encoding_DefaultXml,810,Object +DataChangeNotification_Encoding_DefaultBinary,811,Object +StatusChangeNotification,818,DataType +StatusChangeNotification_Encoding_DefaultXml,819,Object +StatusChangeNotification_Encoding_DefaultBinary,820,Object +SubscriptionAcknowledgement,821,DataType +SubscriptionAcknowledgement_Encoding_DefaultXml,822,Object +SubscriptionAcknowledgement_Encoding_DefaultBinary,823,Object +PublishRequest,824,DataType +PublishRequest_Encoding_DefaultXml,825,Object +PublishRequest_Encoding_DefaultBinary,826,Object +PublishResponse,827,DataType +PublishResponse_Encoding_DefaultXml,828,Object +PublishResponse_Encoding_DefaultBinary,829,Object +RepublishRequest,830,DataType +RepublishRequest_Encoding_DefaultXml,831,Object +RepublishRequest_Encoding_DefaultBinary,832,Object +RepublishResponse,833,DataType +RepublishResponse_Encoding_DefaultXml,834,Object +RepublishResponse_Encoding_DefaultBinary,835,Object +TransferResult,836,DataType +TransferResult_Encoding_DefaultXml,837,Object +TransferResult_Encoding_DefaultBinary,838,Object +TransferSubscriptionsRequest,839,DataType +TransferSubscriptionsRequest_Encoding_DefaultXml,840,Object +TransferSubscriptionsRequest_Encoding_DefaultBinary,841,Object +TransferSubscriptionsResponse,842,DataType +TransferSubscriptionsResponse_Encoding_DefaultXml,843,Object +TransferSubscriptionsResponse_Encoding_DefaultBinary,844,Object +DeleteSubscriptionsRequest,845,DataType +DeleteSubscriptionsRequest_Encoding_DefaultXml,846,Object +DeleteSubscriptionsRequest_Encoding_DefaultBinary,847,Object +DeleteSubscriptionsResponse,848,DataType +DeleteSubscriptionsResponse_Encoding_DefaultXml,849,Object +DeleteSubscriptionsResponse_Encoding_DefaultBinary,850,Object +RedundancySupport,851,DataType +ServerState,852,DataType +RedundantServerDataType,853,DataType +RedundantServerDataType_Encoding_DefaultXml,854,Object +RedundantServerDataType_Encoding_DefaultBinary,855,Object +SamplingIntervalDiagnosticsDataType,856,DataType +SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml,857,Object +SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary,858,Object +ServerDiagnosticsSummaryDataType,859,DataType +ServerDiagnosticsSummaryDataType_Encoding_DefaultXml,860,Object +ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary,861,Object +ServerStatusDataType,862,DataType +ServerStatusDataType_Encoding_DefaultXml,863,Object +ServerStatusDataType_Encoding_DefaultBinary,864,Object +SessionDiagnosticsDataType,865,DataType +SessionDiagnosticsDataType_Encoding_DefaultXml,866,Object +SessionDiagnosticsDataType_Encoding_DefaultBinary,867,Object +SessionSecurityDiagnosticsDataType,868,DataType +SessionSecurityDiagnosticsDataType_Encoding_DefaultXml,869,Object +SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary,870,Object +ServiceCounterDataType,871,DataType +ServiceCounterDataType_Encoding_DefaultXml,872,Object +ServiceCounterDataType_Encoding_DefaultBinary,873,Object +SubscriptionDiagnosticsDataType,874,DataType +SubscriptionDiagnosticsDataType_Encoding_DefaultXml,875,Object +SubscriptionDiagnosticsDataType_Encoding_DefaultBinary,876,Object +ModelChangeStructureDataType,877,DataType +ModelChangeStructureDataType_Encoding_DefaultXml,878,Object +ModelChangeStructureDataType_Encoding_DefaultBinary,879,Object +Range,884,DataType +Range_Encoding_DefaultXml,885,Object +Range_Encoding_DefaultBinary,886,Object +EUInformation,887,DataType +EUInformation_Encoding_DefaultXml,888,Object +EUInformation_Encoding_DefaultBinary,889,Object +ExceptionDeviationFormat,890,DataType +Annotation,891,DataType +Annotation_Encoding_DefaultXml,892,Object +Annotation_Encoding_DefaultBinary,893,Object +ProgramDiagnosticDataType,894,DataType +ProgramDiagnosticDataType_Encoding_DefaultXml,895,Object +ProgramDiagnosticDataType_Encoding_DefaultBinary,896,Object +SemanticChangeStructureDataType,897,DataType +SemanticChangeStructureDataType_Encoding_DefaultXml,898,Object +SemanticChangeStructureDataType_Encoding_DefaultBinary,899,Object +EventNotificationList,914,DataType +EventNotificationList_Encoding_DefaultXml,915,Object +EventNotificationList_Encoding_DefaultBinary,916,Object +EventFieldList,917,DataType +EventFieldList_Encoding_DefaultXml,918,Object +EventFieldList_Encoding_DefaultBinary,919,Object +HistoryEventFieldList,920,DataType +HistoryEventFieldList_Encoding_DefaultXml,921,Object +HistoryEventFieldList_Encoding_DefaultBinary,922,Object +IssuedIdentityToken,938,DataType +IssuedIdentityToken_Encoding_DefaultXml,939,Object +IssuedIdentityToken_Encoding_DefaultBinary,940,Object +NotificationData,945,DataType +NotificationData_Encoding_DefaultXml,946,Object +NotificationData_Encoding_DefaultBinary,947,Object +AggregateConfiguration,948,DataType +AggregateConfiguration_Encoding_DefaultXml,949,Object +AggregateConfiguration_Encoding_DefaultBinary,950,Object +ImageBMP,2000,DataType +ImageGIF,2001,DataType +ImageJPG,2002,DataType +ImagePNG,2003,DataType +ServerType,2004,ObjectType +ServerType_ServerArray,2005,Variable +ServerType_NamespaceArray,2006,Variable +ServerType_ServerStatus,2007,Variable +ServerType_ServiceLevel,2008,Variable +ServerType_ServerCapabilities,2009,Object +ServerType_ServerDiagnostics,2010,Object +ServerType_VendorServerInfo,2011,Object +ServerType_ServerRedundancy,2012,Object +ServerCapabilitiesType,2013,ObjectType +ServerCapabilitiesType_ServerProfileArray,2014,Variable +ServerCapabilitiesType_LocaleIdArray,2016,Variable +ServerCapabilitiesType_MinSupportedSampleRate,2017,Variable +ServerCapabilitiesType_ModellingRules,2019,Object +ServerDiagnosticsType,2020,ObjectType +ServerDiagnosticsType_ServerDiagnosticsSummary,2021,Variable +ServerDiagnosticsType_SamplingIntervalDiagnosticsArray,2022,Variable +ServerDiagnosticsType_SubscriptionDiagnosticsArray,2023,Variable +ServerDiagnosticsType_EnabledFlag,2025,Variable +SessionsDiagnosticsSummaryType,2026,ObjectType +SessionsDiagnosticsSummaryType_SessionDiagnosticsArray,2027,Variable +SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray,2028,Variable +SessionDiagnosticsObjectType,2029,ObjectType +SessionDiagnosticsObjectType_SessionDiagnostics,2030,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics,2031,Variable +SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray,2032,Variable +VendorServerInfoType,2033,ObjectType +ServerRedundancyType,2034,ObjectType +ServerRedundancyType_RedundancySupport,2035,Variable +TransparentRedundancyType,2036,ObjectType +TransparentRedundancyType_CurrentServerId,2037,Variable +TransparentRedundancyType_RedundantServerArray,2038,Variable +NonTransparentRedundancyType,2039,ObjectType +NonTransparentRedundancyType_ServerUriArray,2040,Variable +BaseEventType,2041,ObjectType +BaseEventType_EventId,2042,Variable +BaseEventType_EventType,2043,Variable +BaseEventType_SourceNode,2044,Variable +BaseEventType_SourceName,2045,Variable +BaseEventType_Time,2046,Variable +BaseEventType_ReceiveTime,2047,Variable +BaseEventType_Message,2050,Variable +BaseEventType_Severity,2051,Variable +AuditEventType,2052,ObjectType +AuditEventType_ActionTimeStamp,2053,Variable +AuditEventType_Status,2054,Variable +AuditEventType_ServerId,2055,Variable +AuditEventType_ClientAuditEntryId,2056,Variable +AuditEventType_ClientUserId,2057,Variable +AuditSecurityEventType,2058,ObjectType +AuditChannelEventType,2059,ObjectType +AuditOpenSecureChannelEventType,2060,ObjectType +AuditOpenSecureChannelEventType_ClientCertificate,2061,Variable +AuditOpenSecureChannelEventType_RequestType,2062,Variable +AuditOpenSecureChannelEventType_SecurityPolicyUri,2063,Variable +AuditOpenSecureChannelEventType_SecurityMode,2065,Variable +AuditOpenSecureChannelEventType_RequestedLifetime,2066,Variable +AuditSessionEventType,2069,ObjectType +AuditSessionEventType_SessionId,2070,Variable +AuditCreateSessionEventType,2071,ObjectType +AuditCreateSessionEventType_SecureChannelId,2072,Variable +AuditCreateSessionEventType_ClientCertificate,2073,Variable +AuditCreateSessionEventType_RevisedSessionTimeout,2074,Variable +AuditActivateSessionEventType,2075,ObjectType +AuditActivateSessionEventType_ClientSoftwareCertificates,2076,Variable +AuditActivateSessionEventType_UserIdentityToken,2077,Variable +AuditCancelEventType,2078,ObjectType +AuditCancelEventType_RequestHandle,2079,Variable +AuditCertificateEventType,2080,ObjectType +AuditCertificateEventType_Certificate,2081,Variable +AuditCertificateDataMismatchEventType,2082,ObjectType +AuditCertificateDataMismatchEventType_InvalidHostname,2083,Variable +AuditCertificateDataMismatchEventType_InvalidUri,2084,Variable +AuditCertificateExpiredEventType,2085,ObjectType +AuditCertificateInvalidEventType,2086,ObjectType +AuditCertificateUntrustedEventType,2087,ObjectType +AuditCertificateRevokedEventType,2088,ObjectType +AuditCertificateMismatchEventType,2089,ObjectType +AuditNodeManagementEventType,2090,ObjectType +AuditAddNodesEventType,2091,ObjectType +AuditAddNodesEventType_NodesToAdd,2092,Variable +AuditDeleteNodesEventType,2093,ObjectType +AuditDeleteNodesEventType_NodesToDelete,2094,Variable +AuditAddReferencesEventType,2095,ObjectType +AuditAddReferencesEventType_ReferencesToAdd,2096,Variable +AuditDeleteReferencesEventType,2097,ObjectType +AuditDeleteReferencesEventType_ReferencesToDelete,2098,Variable +AuditUpdateEventType,2099,ObjectType +AuditWriteUpdateEventType,2100,ObjectType +AuditWriteUpdateEventType_IndexRange,2101,Variable +AuditWriteUpdateEventType_OldValue,2102,Variable +AuditWriteUpdateEventType_NewValue,2103,Variable +AuditHistoryUpdateEventType,2104,ObjectType +AuditUpdateMethodEventType,2127,ObjectType +AuditUpdateMethodEventType_MethodId,2128,Variable +AuditUpdateMethodEventType_InputArguments,2129,Variable +SystemEventType,2130,ObjectType +DeviceFailureEventType,2131,ObjectType +BaseModelChangeEventType,2132,ObjectType +GeneralModelChangeEventType,2133,ObjectType +GeneralModelChangeEventType_Changes,2134,Variable +ServerVendorCapabilityType,2137,VariableType +ServerStatusType,2138,VariableType +ServerStatusType_StartTime,2139,Variable +ServerStatusType_CurrentTime,2140,Variable +ServerStatusType_State,2141,Variable +ServerStatusType_BuildInfo,2142,Variable +ServerDiagnosticsSummaryType,2150,VariableType +ServerDiagnosticsSummaryType_ServerViewCount,2151,Variable +ServerDiagnosticsSummaryType_CurrentSessionCount,2152,Variable +ServerDiagnosticsSummaryType_CumulatedSessionCount,2153,Variable +ServerDiagnosticsSummaryType_SecurityRejectedSessionCount,2154,Variable +ServerDiagnosticsSummaryType_RejectedSessionCount,2155,Variable +ServerDiagnosticsSummaryType_SessionTimeoutCount,2156,Variable +ServerDiagnosticsSummaryType_SessionAbortCount,2157,Variable +ServerDiagnosticsSummaryType_PublishingIntervalCount,2159,Variable +ServerDiagnosticsSummaryType_CurrentSubscriptionCount,2160,Variable +ServerDiagnosticsSummaryType_CumulatedSubscriptionCount,2161,Variable +ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount,2162,Variable +ServerDiagnosticsSummaryType_RejectedRequestsCount,2163,Variable +SamplingIntervalDiagnosticsArrayType,2164,VariableType +SamplingIntervalDiagnosticsType,2165,VariableType +SamplingIntervalDiagnosticsType_SamplingInterval,2166,Variable +SubscriptionDiagnosticsArrayType,2171,VariableType +SubscriptionDiagnosticsType,2172,VariableType +SubscriptionDiagnosticsType_SessionId,2173,Variable +SubscriptionDiagnosticsType_SubscriptionId,2174,Variable +SubscriptionDiagnosticsType_Priority,2175,Variable +SubscriptionDiagnosticsType_PublishingInterval,2176,Variable +SubscriptionDiagnosticsType_MaxKeepAliveCount,2177,Variable +SubscriptionDiagnosticsType_MaxNotificationsPerPublish,2179,Variable +SubscriptionDiagnosticsType_PublishingEnabled,2180,Variable +SubscriptionDiagnosticsType_ModifyCount,2181,Variable +SubscriptionDiagnosticsType_EnableCount,2182,Variable +SubscriptionDiagnosticsType_DisableCount,2183,Variable +SubscriptionDiagnosticsType_RepublishRequestCount,2184,Variable +SubscriptionDiagnosticsType_RepublishMessageRequestCount,2185,Variable +SubscriptionDiagnosticsType_RepublishMessageCount,2186,Variable +SubscriptionDiagnosticsType_TransferRequestCount,2187,Variable +SubscriptionDiagnosticsType_TransferredToAltClientCount,2188,Variable +SubscriptionDiagnosticsType_TransferredToSameClientCount,2189,Variable +SubscriptionDiagnosticsType_PublishRequestCount,2190,Variable +SubscriptionDiagnosticsType_DataChangeNotificationsCount,2191,Variable +SubscriptionDiagnosticsType_NotificationsCount,2193,Variable +SessionDiagnosticsArrayType,2196,VariableType +SessionDiagnosticsVariableType,2197,VariableType +SessionDiagnosticsVariableType_SessionId,2198,Variable +SessionDiagnosticsVariableType_SessionName,2199,Variable +SessionDiagnosticsVariableType_ClientDescription,2200,Variable +SessionDiagnosticsVariableType_ServerUri,2201,Variable +SessionDiagnosticsVariableType_EndpointUrl,2202,Variable +SessionDiagnosticsVariableType_LocaleIds,2203,Variable +SessionDiagnosticsVariableType_ActualSessionTimeout,2204,Variable +SessionDiagnosticsVariableType_ClientConnectionTime,2205,Variable +SessionDiagnosticsVariableType_ClientLastContactTime,2206,Variable +SessionDiagnosticsVariableType_CurrentSubscriptionsCount,2207,Variable +SessionDiagnosticsVariableType_CurrentMonitoredItemsCount,2208,Variable +SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue,2209,Variable +SessionDiagnosticsVariableType_ReadCount,2217,Variable +SessionDiagnosticsVariableType_HistoryReadCount,2218,Variable +SessionDiagnosticsVariableType_WriteCount,2219,Variable +SessionDiagnosticsVariableType_HistoryUpdateCount,2220,Variable +SessionDiagnosticsVariableType_CallCount,2221,Variable +SessionDiagnosticsVariableType_CreateMonitoredItemsCount,2222,Variable +SessionDiagnosticsVariableType_ModifyMonitoredItemsCount,2223,Variable +SessionDiagnosticsVariableType_SetMonitoringModeCount,2224,Variable +SessionDiagnosticsVariableType_SetTriggeringCount,2225,Variable +SessionDiagnosticsVariableType_DeleteMonitoredItemsCount,2226,Variable +SessionDiagnosticsVariableType_CreateSubscriptionCount,2227,Variable +SessionDiagnosticsVariableType_ModifySubscriptionCount,2228,Variable +SessionDiagnosticsVariableType_SetPublishingModeCount,2229,Variable +SessionDiagnosticsVariableType_PublishCount,2230,Variable +SessionDiagnosticsVariableType_RepublishCount,2231,Variable +SessionDiagnosticsVariableType_TransferSubscriptionsCount,2232,Variable +SessionDiagnosticsVariableType_DeleteSubscriptionsCount,2233,Variable +SessionDiagnosticsVariableType_AddNodesCount,2234,Variable +SessionDiagnosticsVariableType_AddReferencesCount,2235,Variable +SessionDiagnosticsVariableType_DeleteNodesCount,2236,Variable +SessionDiagnosticsVariableType_DeleteReferencesCount,2237,Variable +SessionDiagnosticsVariableType_BrowseCount,2238,Variable +SessionDiagnosticsVariableType_BrowseNextCount,2239,Variable +SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount,2240,Variable +SessionDiagnosticsVariableType_QueryFirstCount,2241,Variable +SessionDiagnosticsVariableType_QueryNextCount,2242,Variable +SessionSecurityDiagnosticsArrayType,2243,VariableType +SessionSecurityDiagnosticsType,2244,VariableType +SessionSecurityDiagnosticsType_SessionId,2245,Variable +SessionSecurityDiagnosticsType_ClientUserIdOfSession,2246,Variable +SessionSecurityDiagnosticsType_ClientUserIdHistory,2247,Variable +SessionSecurityDiagnosticsType_AuthenticationMechanism,2248,Variable +SessionSecurityDiagnosticsType_Encoding,2249,Variable +SessionSecurityDiagnosticsType_TransportProtocol,2250,Variable +SessionSecurityDiagnosticsType_SecurityMode,2251,Variable +SessionSecurityDiagnosticsType_SecurityPolicyUri,2252,Variable +Server,2253,Object +Server_ServerArray,2254,Variable +Server_NamespaceArray,2255,Variable +Server_ServerStatus,2256,Variable +Server_ServerStatus_StartTime,2257,Variable +Server_ServerStatus_CurrentTime,2258,Variable +Server_ServerStatus_State,2259,Variable +Server_ServerStatus_BuildInfo,2260,Variable +Server_ServerStatus_BuildInfo_ProductName,2261,Variable +Server_ServerStatus_BuildInfo_ProductUri,2262,Variable +Server_ServerStatus_BuildInfo_ManufacturerName,2263,Variable +Server_ServerStatus_BuildInfo_SoftwareVersion,2264,Variable +Server_ServerStatus_BuildInfo_BuildNumber,2265,Variable +Server_ServerStatus_BuildInfo_BuildDate,2266,Variable +Server_ServiceLevel,2267,Variable +Server_ServerCapabilities,2268,Object +Server_ServerCapabilities_ServerProfileArray,2269,Variable +Server_ServerCapabilities_LocaleIdArray,2271,Variable +Server_ServerCapabilities_MinSupportedSampleRate,2272,Variable +Server_ServerDiagnostics,2274,Object +Server_ServerDiagnostics_ServerDiagnosticsSummary,2275,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,2276,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,2277,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,2278,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,2279,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,2281,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,2282,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,2284,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,2285,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,2286,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,2287,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,2288,Variable +Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray,2289,Variable +Server_ServerDiagnostics_SubscriptionDiagnosticsArray,2290,Variable +Server_ServerDiagnostics_EnabledFlag,2294,Variable +Server_VendorServerInfo,2295,Object +Server_ServerRedundancy,2296,Object +StateMachineType,2299,ObjectType +StateType,2307,ObjectType +StateType_StateNumber,2308,Variable +InitialStateType,2309,ObjectType +TransitionType,2310,ObjectType +TransitionEventType,2311,ObjectType +TransitionType_TransitionNumber,2312,Variable +AuditUpdateStateEventType,2315,ObjectType +HistoricalDataConfigurationType,2318,ObjectType +HistoricalDataConfigurationType_Stepped,2323,Variable +HistoricalDataConfigurationType_Definition,2324,Variable +HistoricalDataConfigurationType_MaxTimeInterval,2325,Variable +HistoricalDataConfigurationType_MinTimeInterval,2326,Variable +HistoricalDataConfigurationType_ExceptionDeviation,2327,Variable +HistoricalDataConfigurationType_ExceptionDeviationFormat,2328,Variable +HistoryServerCapabilitiesType,2330,ObjectType +HistoryServerCapabilitiesType_AccessHistoryDataCapability,2331,Variable +HistoryServerCapabilitiesType_AccessHistoryEventsCapability,2332,Variable +HistoryServerCapabilitiesType_InsertDataCapability,2334,Variable +HistoryServerCapabilitiesType_ReplaceDataCapability,2335,Variable +HistoryServerCapabilitiesType_UpdateDataCapability,2336,Variable +HistoryServerCapabilitiesType_DeleteRawCapability,2337,Variable +HistoryServerCapabilitiesType_DeleteAtTimeCapability,2338,Variable +AggregateFunctionType,2340,ObjectType +AggregateFunction_Interpolative,2341,Object +AggregateFunction_Average,2342,Object +AggregateFunction_TimeAverage,2343,Object +AggregateFunction_Total,2344,Object +AggregateFunction_Minimum,2346,Object +AggregateFunction_Maximum,2347,Object +AggregateFunction_MinimumActualTime,2348,Object +AggregateFunction_MaximumActualTime,2349,Object +AggregateFunction_Range,2350,Object +AggregateFunction_AnnotationCount,2351,Object +AggregateFunction_Count,2352,Object +AggregateFunction_NumberOfTransitions,2355,Object +AggregateFunction_Start,2357,Object +AggregateFunction_End,2358,Object +AggregateFunction_Delta,2359,Object +AggregateFunction_DurationGood,2360,Object +AggregateFunction_DurationBad,2361,Object +AggregateFunction_PercentGood,2362,Object +AggregateFunction_PercentBad,2363,Object +AggregateFunction_WorstQuality,2364,Object +DataItemType,2365,VariableType +DataItemType_Definition,2366,Variable +DataItemType_ValuePrecision,2367,Variable +AnalogItemType,2368,VariableType +AnalogItemType_EURange,2369,Variable +AnalogItemType_InstrumentRange,2370,Variable +AnalogItemType_EngineeringUnits,2371,Variable +DiscreteItemType,2372,VariableType +TwoStateDiscreteType,2373,VariableType +TwoStateDiscreteType_FalseState,2374,Variable +TwoStateDiscreteType_TrueState,2375,Variable +MultiStateDiscreteType,2376,VariableType +MultiStateDiscreteType_EnumStrings,2377,Variable +ProgramTransitionEventType,2378,ObjectType +ProgramTransitionEventType_IntermediateResult,2379,Variable +ProgramDiagnosticType,2380,VariableType +ProgramDiagnosticType_CreateSessionId,2381,Variable +ProgramDiagnosticType_CreateClientName,2382,Variable +ProgramDiagnosticType_InvocationCreationTime,2383,Variable +ProgramDiagnosticType_LastTransitionTime,2384,Variable +ProgramDiagnosticType_LastMethodCall,2385,Variable +ProgramDiagnosticType_LastMethodSessionId,2386,Variable +ProgramDiagnosticType_LastMethodInputArguments,2387,Variable +ProgramDiagnosticType_LastMethodOutputArguments,2388,Variable +ProgramDiagnosticType_LastMethodCallTime,2389,Variable +ProgramDiagnosticType_LastMethodReturnStatus,2390,Variable +ProgramStateMachineType,2391,ObjectType +ProgramStateMachineType_Creatable,2392,Variable +ProgramStateMachineType_Deletable,2393,Variable +ProgramStateMachineType_AutoDelete,2394,Variable +ProgramStateMachineType_RecycleCount,2395,Variable +ProgramStateMachineType_InstanceCount,2396,Variable +ProgramStateMachineType_MaxInstanceCount,2397,Variable +ProgramStateMachineType_MaxRecycleCount,2398,Variable +ProgramStateMachineType_ProgramDiagnostic,2399,Variable +ProgramStateMachineType_Ready,2400,Object +ProgramStateMachineType_Ready_StateNumber,2401,Variable +ProgramStateMachineType_Running,2402,Object +ProgramStateMachineType_Running_StateNumber,2403,Variable +ProgramStateMachineType_Suspended,2404,Object +ProgramStateMachineType_Suspended_StateNumber,2405,Variable +ProgramStateMachineType_Halted,2406,Object +ProgramStateMachineType_Halted_StateNumber,2407,Variable +ProgramStateMachineType_HaltedToReady,2408,Object +ProgramStateMachineType_HaltedToReady_TransitionNumber,2409,Variable +ProgramStateMachineType_ReadyToRunning,2410,Object +ProgramStateMachineType_ReadyToRunning_TransitionNumber,2411,Variable +ProgramStateMachineType_RunningToHalted,2412,Object +ProgramStateMachineType_RunningToHalted_TransitionNumber,2413,Variable +ProgramStateMachineType_RunningToReady,2414,Object +ProgramStateMachineType_RunningToReady_TransitionNumber,2415,Variable +ProgramStateMachineType_RunningToSuspended,2416,Object +ProgramStateMachineType_RunningToSuspended_TransitionNumber,2417,Variable +ProgramStateMachineType_SuspendedToRunning,2418,Object +ProgramStateMachineType_SuspendedToRunning_TransitionNumber,2419,Variable +ProgramStateMachineType_SuspendedToHalted,2420,Object +ProgramStateMachineType_SuspendedToHalted_TransitionNumber,2421,Variable +ProgramStateMachineType_SuspendedToReady,2422,Object +ProgramStateMachineType_SuspendedToReady_TransitionNumber,2423,Variable +ProgramStateMachineType_ReadyToHalted,2424,Object +ProgramStateMachineType_ReadyToHalted_TransitionNumber,2425,Variable +ProgramStateMachineType_Start,2426,Method +ProgramStateMachineType_Suspend,2427,Method +ProgramStateMachineType_Resume,2428,Method +ProgramStateMachineType_Halt,2429,Method +ProgramStateMachineType_Reset,2430,Method +SessionDiagnosticsVariableType_RegisterNodesCount,2730,Variable +SessionDiagnosticsVariableType_UnregisterNodesCount,2731,Variable +ServerCapabilitiesType_MaxBrowseContinuationPoints,2732,Variable +ServerCapabilitiesType_MaxQueryContinuationPoints,2733,Variable +ServerCapabilitiesType_MaxHistoryContinuationPoints,2734,Variable +Server_ServerCapabilities_MaxBrowseContinuationPoints,2735,Variable +Server_ServerCapabilities_MaxQueryContinuationPoints,2736,Variable +Server_ServerCapabilities_MaxHistoryContinuationPoints,2737,Variable +SemanticChangeEventType,2738,ObjectType +SemanticChangeEventType_Changes,2739,Variable +ServerType_Auditing,2742,Variable +ServerDiagnosticsType_SessionsDiagnosticsSummary,2744,Object +AuditChannelEventType_SecureChannelId,2745,Variable +AuditOpenSecureChannelEventType_ClientCertificateThumbprint,2746,Variable +AuditCreateSessionEventType_ClientCertificateThumbprint,2747,Variable +AuditUrlMismatchEventType,2748,ObjectType +AuditUrlMismatchEventType_EndpointUrl,2749,Variable +AuditWriteUpdateEventType_AttributeId,2750,Variable +AuditHistoryUpdateEventType_ParameterDataTypeId,2751,Variable +ServerStatusType_SecondsTillShutdown,2752,Variable +ServerStatusType_ShutdownReason,2753,Variable +ServerCapabilitiesType_AggregateFunctions,2754,Object +StateVariableType,2755,VariableType +StateVariableType_Id,2756,Variable +StateVariableType_Name,2757,Variable +StateVariableType_Number,2758,Variable +StateVariableType_EffectiveDisplayName,2759,Variable +FiniteStateVariableType,2760,VariableType +FiniteStateVariableType_Id,2761,Variable +TransitionVariableType,2762,VariableType +TransitionVariableType_Id,2763,Variable +TransitionVariableType_Name,2764,Variable +TransitionVariableType_Number,2765,Variable +TransitionVariableType_TransitionTime,2766,Variable +FiniteTransitionVariableType,2767,VariableType +FiniteTransitionVariableType_Id,2768,Variable +StateMachineType_CurrentState,2769,Variable +StateMachineType_LastTransition,2770,Variable +FiniteStateMachineType,2771,ObjectType +FiniteStateMachineType_CurrentState,2772,Variable +FiniteStateMachineType_LastTransition,2773,Variable +TransitionEventType_Transition,2774,Variable +TransitionEventType_FromState,2775,Variable +TransitionEventType_ToState,2776,Variable +AuditUpdateStateEventType_OldStateId,2777,Variable +AuditUpdateStateEventType_NewStateId,2778,Variable +ConditionType,2782,ObjectType +RefreshStartEventType,2787,ObjectType +RefreshEndEventType,2788,ObjectType +RefreshRequiredEventType,2789,ObjectType +AuditConditionEventType,2790,ObjectType +AuditConditionEnableEventType,2803,ObjectType +AuditConditionCommentEventType,2829,ObjectType +DialogConditionType,2830,ObjectType +DialogConditionType_Prompt,2831,Variable +AcknowledgeableConditionType,2881,ObjectType +AlarmConditionType,2915,ObjectType +ShelvedStateMachineType,2929,ObjectType +ShelvedStateMachineType_Unshelved,2930,Object +ShelvedStateMachineType_TimedShelved,2932,Object +ShelvedStateMachineType_OneShotShelved,2933,Object +ShelvedStateMachineType_UnshelvedToTimedShelved,2935,Object +ShelvedStateMachineType_UnshelvedToOneShotShelved,2936,Object +ShelvedStateMachineType_TimedShelvedToUnshelved,2940,Object +ShelvedStateMachineType_TimedShelvedToOneShotShelved,2942,Object +ShelvedStateMachineType_OneShotShelvedToUnshelved,2943,Object +ShelvedStateMachineType_OneShotShelvedToTimedShelved,2945,Object +ShelvedStateMachineType_Unshelve,2947,Method +ShelvedStateMachineType_OneShotShelve,2948,Method +ShelvedStateMachineType_TimedShelve,2949,Method +LimitAlarmType,2955,ObjectType +ShelvedStateMachineType_TimedShelve_InputArguments,2991,Variable +Server_ServerStatus_SecondsTillShutdown,2992,Variable +Server_ServerStatus_ShutdownReason,2993,Variable +Server_Auditing,2994,Variable +Server_ServerCapabilities_ModellingRules,2996,Object +Server_ServerCapabilities_AggregateFunctions,2997,Object +SubscriptionDiagnosticsType_EventNotificationsCount,2998,Variable +AuditHistoryEventUpdateEventType,2999,ObjectType +AuditHistoryEventUpdateEventType_Filter,3003,Variable +AuditHistoryValueUpdateEventType,3006,ObjectType +AuditHistoryDeleteEventType,3012,ObjectType +AuditHistoryRawModifyDeleteEventType,3014,ObjectType +AuditHistoryRawModifyDeleteEventType_IsDeleteModified,3015,Variable +AuditHistoryRawModifyDeleteEventType_StartTime,3016,Variable +AuditHistoryRawModifyDeleteEventType_EndTime,3017,Variable +AuditHistoryAtTimeDeleteEventType,3019,ObjectType +AuditHistoryAtTimeDeleteEventType_ReqTimes,3020,Variable +AuditHistoryAtTimeDeleteEventType_OldValues,3021,Variable +AuditHistoryEventDeleteEventType,3022,ObjectType +AuditHistoryEventDeleteEventType_EventIds,3023,Variable +AuditHistoryEventDeleteEventType_OldValues,3024,Variable +AuditHistoryEventUpdateEventType_UpdatedNode,3025,Variable +AuditHistoryValueUpdateEventType_UpdatedNode,3026,Variable +AuditHistoryDeleteEventType_UpdatedNode,3027,Variable +AuditHistoryEventUpdateEventType_PerformInsertReplace,3028,Variable +AuditHistoryEventUpdateEventType_NewValues,3029,Variable +AuditHistoryEventUpdateEventType_OldValues,3030,Variable +AuditHistoryValueUpdateEventType_PerformInsertReplace,3031,Variable +AuditHistoryValueUpdateEventType_NewValues,3032,Variable +AuditHistoryValueUpdateEventType_OldValues,3033,Variable +AuditHistoryRawModifyDeleteEventType_OldValues,3034,Variable +EventQueueOverflowEventType,3035,ObjectType +EventTypesFolder,3048,Object +ServerCapabilitiesType_SoftwareCertificates,3049,Variable +SessionDiagnosticsVariableType_MaxResponseMessageSize,3050,Variable +BuildInfoType,3051,VariableType +BuildInfoType_ProductUri,3052,Variable +BuildInfoType_ManufacturerName,3053,Variable +BuildInfoType_ProductName,3054,Variable +BuildInfoType_SoftwareVersion,3055,Variable +BuildInfoType_BuildNumber,3056,Variable +BuildInfoType_BuildDate,3057,Variable +SessionSecurityDiagnosticsType_ClientCertificate,3058,Variable +HistoricalDataConfigurationType_AggregateConfiguration,3059,Object +DefaultBinary,3062,Object +DefaultXml,3063,Object +AlwaysGeneratesEvent,3065,ReferenceType +Icon,3067,Variable +NodeVersion,3068,Variable +LocalTime,3069,Variable +AllowNulls,3070,Variable +EnumValues,3071,Variable +InputArguments,3072,Variable +OutputArguments,3073,Variable +ServerType_ServerStatus_StartTime,3074,Variable +ServerType_ServerStatus_CurrentTime,3075,Variable +ServerType_ServerStatus_State,3076,Variable +ServerType_ServerStatus_BuildInfo,3077,Variable +ServerType_ServerStatus_BuildInfo_ProductUri,3078,Variable +ServerType_ServerStatus_BuildInfo_ManufacturerName,3079,Variable +ServerType_ServerStatus_BuildInfo_ProductName,3080,Variable +ServerType_ServerStatus_BuildInfo_SoftwareVersion,3081,Variable +ServerType_ServerStatus_BuildInfo_BuildNumber,3082,Variable +ServerType_ServerStatus_BuildInfo_BuildDate,3083,Variable +ServerType_ServerStatus_SecondsTillShutdown,3084,Variable +ServerType_ServerStatus_ShutdownReason,3085,Variable +ServerType_ServerCapabilities_ServerProfileArray,3086,Variable +ServerType_ServerCapabilities_LocaleIdArray,3087,Variable +ServerType_ServerCapabilities_MinSupportedSampleRate,3088,Variable +ServerType_ServerCapabilities_MaxBrowseContinuationPoints,3089,Variable +ServerType_ServerCapabilities_MaxQueryContinuationPoints,3090,Variable +ServerType_ServerCapabilities_MaxHistoryContinuationPoints,3091,Variable +ServerType_ServerCapabilities_SoftwareCertificates,3092,Variable +ServerType_ServerCapabilities_ModellingRules,3093,Object +ServerType_ServerCapabilities_AggregateFunctions,3094,Object +ServerType_ServerDiagnostics_ServerDiagnosticsSummary,3095,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,3096,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,3097,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,3098,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,3099,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,3100,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,3101,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,3102,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,3104,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,3105,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,3106,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,3107,Variable +ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,3108,Variable +ServerType_ServerDiagnostics_SamplingIntervalDiagnosticsArray,3109,Variable +ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray,3110,Variable +ServerType_ServerDiagnostics_SessionsDiagnosticsSummary,3111,Object +ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3112,Variable +ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3113,Variable +ServerType_ServerDiagnostics_EnabledFlag,3114,Variable +ServerType_ServerRedundancy_RedundancySupport,3115,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount,3116,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount,3117,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount,3118,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount,3119,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount,3120,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount,3121,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount,3122,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount,3124,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount,3125,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount,3126,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,3127,Variable +ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount,3128,Variable +ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3129,Variable +ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3130,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_SessionId,3131,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_SessionName,3132,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription,3133,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri,3134,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl,3135,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds,3136,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout,3137,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize,3138,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime,3139,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime,3140,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount,3141,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount,3142,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue,3143,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount,3151,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount,3152,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount,3153,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount,3154,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_CallCount,3155,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount,3156,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount,3157,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount,3158,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount,3159,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount,3160,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount,3161,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount,3162,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount,3163,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount,3164,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount,3165,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount,3166,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount,3167,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount,3168,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount,3169,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount,3170,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount,3171,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount,3172,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount,3173,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,3174,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount,3175,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount,3176,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount,3177,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount,3178,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId,3179,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession,3180,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory,3181,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism,3182,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding,3183,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol,3184,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode,3185,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri,3186,Variable +SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate,3187,Variable +TransparentRedundancyType_RedundancySupport,3188,Variable +NonTransparentRedundancyType_RedundancySupport,3189,Variable +BaseEventType_LocalTime,3190,Variable +EventQueueOverflowEventType_EventId,3191,Variable +EventQueueOverflowEventType_EventType,3192,Variable +EventQueueOverflowEventType_SourceNode,3193,Variable +EventQueueOverflowEventType_SourceName,3194,Variable +EventQueueOverflowEventType_Time,3195,Variable +EventQueueOverflowEventType_ReceiveTime,3196,Variable +EventQueueOverflowEventType_LocalTime,3197,Variable +EventQueueOverflowEventType_Message,3198,Variable +EventQueueOverflowEventType_Severity,3199,Variable +AuditEventType_EventId,3200,Variable +AuditEventType_EventType,3201,Variable +AuditEventType_SourceNode,3202,Variable +AuditEventType_SourceName,3203,Variable +AuditEventType_Time,3204,Variable +AuditEventType_ReceiveTime,3205,Variable +AuditEventType_LocalTime,3206,Variable +AuditEventType_Message,3207,Variable +AuditEventType_Severity,3208,Variable +AuditSecurityEventType_EventId,3209,Variable +AuditSecurityEventType_EventType,3210,Variable +AuditSecurityEventType_SourceNode,3211,Variable +AuditSecurityEventType_SourceName,3212,Variable +AuditSecurityEventType_Time,3213,Variable +AuditSecurityEventType_ReceiveTime,3214,Variable +AuditSecurityEventType_LocalTime,3215,Variable +AuditSecurityEventType_Message,3216,Variable +AuditSecurityEventType_Severity,3217,Variable +AuditSecurityEventType_ActionTimeStamp,3218,Variable +AuditSecurityEventType_Status,3219,Variable +AuditSecurityEventType_ServerId,3220,Variable +AuditSecurityEventType_ClientAuditEntryId,3221,Variable +AuditSecurityEventType_ClientUserId,3222,Variable +AuditChannelEventType_EventId,3223,Variable +AuditChannelEventType_EventType,3224,Variable +AuditChannelEventType_SourceNode,3225,Variable +AuditChannelEventType_SourceName,3226,Variable +AuditChannelEventType_Time,3227,Variable +AuditChannelEventType_ReceiveTime,3228,Variable +AuditChannelEventType_LocalTime,3229,Variable +AuditChannelEventType_Message,3230,Variable +AuditChannelEventType_Severity,3231,Variable +AuditChannelEventType_ActionTimeStamp,3232,Variable +AuditChannelEventType_Status,3233,Variable +AuditChannelEventType_ServerId,3234,Variable +AuditChannelEventType_ClientAuditEntryId,3235,Variable +AuditChannelEventType_ClientUserId,3236,Variable +AuditOpenSecureChannelEventType_EventId,3237,Variable +AuditOpenSecureChannelEventType_EventType,3238,Variable +AuditOpenSecureChannelEventType_SourceNode,3239,Variable +AuditOpenSecureChannelEventType_SourceName,3240,Variable +AuditOpenSecureChannelEventType_Time,3241,Variable +AuditOpenSecureChannelEventType_ReceiveTime,3242,Variable +AuditOpenSecureChannelEventType_LocalTime,3243,Variable +AuditOpenSecureChannelEventType_Message,3244,Variable +AuditOpenSecureChannelEventType_Severity,3245,Variable +AuditOpenSecureChannelEventType_ActionTimeStamp,3246,Variable +AuditOpenSecureChannelEventType_Status,3247,Variable +AuditOpenSecureChannelEventType_ServerId,3248,Variable +AuditOpenSecureChannelEventType_ClientAuditEntryId,3249,Variable +AuditOpenSecureChannelEventType_ClientUserId,3250,Variable +AuditOpenSecureChannelEventType_SecureChannelId,3251,Variable +AuditSessionEventType_EventId,3252,Variable +AuditSessionEventType_EventType,3253,Variable +AuditSessionEventType_SourceNode,3254,Variable +AuditSessionEventType_SourceName,3255,Variable +AuditSessionEventType_Time,3256,Variable +AuditSessionEventType_ReceiveTime,3257,Variable +AuditSessionEventType_LocalTime,3258,Variable +AuditSessionEventType_Message,3259,Variable +AuditSessionEventType_Severity,3260,Variable +AuditSessionEventType_ActionTimeStamp,3261,Variable +AuditSessionEventType_Status,3262,Variable +AuditSessionEventType_ServerId,3263,Variable +AuditSessionEventType_ClientAuditEntryId,3264,Variable +AuditSessionEventType_ClientUserId,3265,Variable +AuditCreateSessionEventType_EventId,3266,Variable +AuditCreateSessionEventType_EventType,3267,Variable +AuditCreateSessionEventType_SourceNode,3268,Variable +AuditCreateSessionEventType_SourceName,3269,Variable +AuditCreateSessionEventType_Time,3270,Variable +AuditCreateSessionEventType_ReceiveTime,3271,Variable +AuditCreateSessionEventType_LocalTime,3272,Variable +AuditCreateSessionEventType_Message,3273,Variable +AuditCreateSessionEventType_Severity,3274,Variable +AuditCreateSessionEventType_ActionTimeStamp,3275,Variable +AuditCreateSessionEventType_Status,3276,Variable +AuditCreateSessionEventType_ServerId,3277,Variable +AuditCreateSessionEventType_ClientAuditEntryId,3278,Variable +AuditCreateSessionEventType_ClientUserId,3279,Variable +AuditUrlMismatchEventType_EventId,3281,Variable +AuditUrlMismatchEventType_EventType,3282,Variable +AuditUrlMismatchEventType_SourceNode,3283,Variable +AuditUrlMismatchEventType_SourceName,3284,Variable +AuditUrlMismatchEventType_Time,3285,Variable +AuditUrlMismatchEventType_ReceiveTime,3286,Variable +AuditUrlMismatchEventType_LocalTime,3287,Variable +AuditUrlMismatchEventType_Message,3288,Variable +AuditUrlMismatchEventType_Severity,3289,Variable +AuditUrlMismatchEventType_ActionTimeStamp,3290,Variable +AuditUrlMismatchEventType_Status,3291,Variable +AuditUrlMismatchEventType_ServerId,3292,Variable +AuditUrlMismatchEventType_ClientAuditEntryId,3293,Variable +AuditUrlMismatchEventType_ClientUserId,3294,Variable +AuditUrlMismatchEventType_SecureChannelId,3296,Variable +AuditUrlMismatchEventType_ClientCertificate,3297,Variable +AuditUrlMismatchEventType_ClientCertificateThumbprint,3298,Variable +AuditUrlMismatchEventType_RevisedSessionTimeout,3299,Variable +AuditActivateSessionEventType_EventId,3300,Variable +AuditActivateSessionEventType_EventType,3301,Variable +AuditActivateSessionEventType_SourceNode,3302,Variable +AuditActivateSessionEventType_SourceName,3303,Variable +AuditActivateSessionEventType_Time,3304,Variable +AuditActivateSessionEventType_ReceiveTime,3305,Variable +AuditActivateSessionEventType_LocalTime,3306,Variable +AuditActivateSessionEventType_Message,3307,Variable +AuditActivateSessionEventType_Severity,3308,Variable +AuditActivateSessionEventType_ActionTimeStamp,3309,Variable +AuditActivateSessionEventType_Status,3310,Variable +AuditActivateSessionEventType_ServerId,3311,Variable +AuditActivateSessionEventType_ClientAuditEntryId,3312,Variable +AuditActivateSessionEventType_ClientUserId,3313,Variable +AuditActivateSessionEventType_SessionId,3314,Variable +AuditCancelEventType_EventId,3315,Variable +AuditCancelEventType_EventType,3316,Variable +AuditCancelEventType_SourceNode,3317,Variable +AuditCancelEventType_SourceName,3318,Variable +AuditCancelEventType_Time,3319,Variable +AuditCancelEventType_ReceiveTime,3320,Variable +AuditCancelEventType_LocalTime,3321,Variable +AuditCancelEventType_Message,3322,Variable +AuditCancelEventType_Severity,3323,Variable +AuditCancelEventType_ActionTimeStamp,3324,Variable +AuditCancelEventType_Status,3325,Variable +AuditCancelEventType_ServerId,3326,Variable +AuditCancelEventType_ClientAuditEntryId,3327,Variable +AuditCancelEventType_ClientUserId,3328,Variable +AuditCancelEventType_SessionId,3329,Variable +AuditCertificateEventType_EventId,3330,Variable +AuditCertificateEventType_EventType,3331,Variable +AuditCertificateEventType_SourceNode,3332,Variable +AuditCertificateEventType_SourceName,3333,Variable +AuditCertificateEventType_Time,3334,Variable +AuditCertificateEventType_ReceiveTime,3335,Variable +AuditCertificateEventType_LocalTime,3336,Variable +AuditCertificateEventType_Message,3337,Variable +AuditCertificateEventType_Severity,3338,Variable +AuditCertificateEventType_ActionTimeStamp,3339,Variable +AuditCertificateEventType_Status,3340,Variable +AuditCertificateEventType_ServerId,3341,Variable +AuditCertificateEventType_ClientAuditEntryId,3342,Variable +AuditCertificateEventType_ClientUserId,3343,Variable +AuditCertificateDataMismatchEventType_EventId,3344,Variable +AuditCertificateDataMismatchEventType_EventType,3345,Variable +AuditCertificateDataMismatchEventType_SourceNode,3346,Variable +AuditCertificateDataMismatchEventType_SourceName,3347,Variable +AuditCertificateDataMismatchEventType_Time,3348,Variable +AuditCertificateDataMismatchEventType_ReceiveTime,3349,Variable +AuditCertificateDataMismatchEventType_LocalTime,3350,Variable +AuditCertificateDataMismatchEventType_Message,3351,Variable +AuditCertificateDataMismatchEventType_Severity,3352,Variable +AuditCertificateDataMismatchEventType_ActionTimeStamp,3353,Variable +AuditCertificateDataMismatchEventType_Status,3354,Variable +AuditCertificateDataMismatchEventType_ServerId,3355,Variable +AuditCertificateDataMismatchEventType_ClientAuditEntryId,3356,Variable +AuditCertificateDataMismatchEventType_ClientUserId,3357,Variable +AuditCertificateDataMismatchEventType_Certificate,3358,Variable +AuditCertificateExpiredEventType_EventId,3359,Variable +AuditCertificateExpiredEventType_EventType,3360,Variable +AuditCertificateExpiredEventType_SourceNode,3361,Variable +AuditCertificateExpiredEventType_SourceName,3362,Variable +AuditCertificateExpiredEventType_Time,3363,Variable +AuditCertificateExpiredEventType_ReceiveTime,3364,Variable +AuditCertificateExpiredEventType_LocalTime,3365,Variable +AuditCertificateExpiredEventType_Message,3366,Variable +AuditCertificateExpiredEventType_Severity,3367,Variable +AuditCertificateExpiredEventType_ActionTimeStamp,3368,Variable +AuditCertificateExpiredEventType_Status,3369,Variable +AuditCertificateExpiredEventType_ServerId,3370,Variable +AuditCertificateExpiredEventType_ClientAuditEntryId,3371,Variable +AuditCertificateExpiredEventType_ClientUserId,3372,Variable +AuditCertificateExpiredEventType_Certificate,3373,Variable +AuditCertificateInvalidEventType_EventId,3374,Variable +AuditCertificateInvalidEventType_EventType,3375,Variable +AuditCertificateInvalidEventType_SourceNode,3376,Variable +AuditCertificateInvalidEventType_SourceName,3377,Variable +AuditCertificateInvalidEventType_Time,3378,Variable +AuditCertificateInvalidEventType_ReceiveTime,3379,Variable +AuditCertificateInvalidEventType_LocalTime,3380,Variable +AuditCertificateInvalidEventType_Message,3381,Variable +AuditCertificateInvalidEventType_Severity,3382,Variable +AuditCertificateInvalidEventType_ActionTimeStamp,3383,Variable +AuditCertificateInvalidEventType_Status,3384,Variable +AuditCertificateInvalidEventType_ServerId,3385,Variable +AuditCertificateInvalidEventType_ClientAuditEntryId,3386,Variable +AuditCertificateInvalidEventType_ClientUserId,3387,Variable +AuditCertificateInvalidEventType_Certificate,3388,Variable +AuditCertificateUntrustedEventType_EventId,3389,Variable +AuditCertificateUntrustedEventType_EventType,3390,Variable +AuditCertificateUntrustedEventType_SourceNode,3391,Variable +AuditCertificateUntrustedEventType_SourceName,3392,Variable +AuditCertificateUntrustedEventType_Time,3393,Variable +AuditCertificateUntrustedEventType_ReceiveTime,3394,Variable +AuditCertificateUntrustedEventType_LocalTime,3395,Variable +AuditCertificateUntrustedEventType_Message,3396,Variable +AuditCertificateUntrustedEventType_Severity,3397,Variable +AuditCertificateUntrustedEventType_ActionTimeStamp,3398,Variable +AuditCertificateUntrustedEventType_Status,3399,Variable +AuditCertificateUntrustedEventType_ServerId,3400,Variable +AuditCertificateUntrustedEventType_ClientAuditEntryId,3401,Variable +AuditCertificateUntrustedEventType_ClientUserId,3402,Variable +AuditCertificateUntrustedEventType_Certificate,3403,Variable +AuditCertificateRevokedEventType_EventId,3404,Variable +AuditCertificateRevokedEventType_EventType,3405,Variable +AuditCertificateRevokedEventType_SourceNode,3406,Variable +AuditCertificateRevokedEventType_SourceName,3407,Variable +AuditCertificateRevokedEventType_Time,3408,Variable +AuditCertificateRevokedEventType_ReceiveTime,3409,Variable +AuditCertificateRevokedEventType_LocalTime,3410,Variable +AuditCertificateRevokedEventType_Message,3411,Variable +AuditCertificateRevokedEventType_Severity,3412,Variable +AuditCertificateRevokedEventType_ActionTimeStamp,3413,Variable +AuditCertificateRevokedEventType_Status,3414,Variable +AuditCertificateRevokedEventType_ServerId,3415,Variable +AuditCertificateRevokedEventType_ClientAuditEntryId,3416,Variable +AuditCertificateRevokedEventType_ClientUserId,3417,Variable +AuditCertificateRevokedEventType_Certificate,3418,Variable +AuditCertificateMismatchEventType_EventId,3419,Variable +AuditCertificateMismatchEventType_EventType,3420,Variable +AuditCertificateMismatchEventType_SourceNode,3421,Variable +AuditCertificateMismatchEventType_SourceName,3422,Variable +AuditCertificateMismatchEventType_Time,3423,Variable +AuditCertificateMismatchEventType_ReceiveTime,3424,Variable +AuditCertificateMismatchEventType_LocalTime,3425,Variable +AuditCertificateMismatchEventType_Message,3426,Variable +AuditCertificateMismatchEventType_Severity,3427,Variable +AuditCertificateMismatchEventType_ActionTimeStamp,3428,Variable +AuditCertificateMismatchEventType_Status,3429,Variable +AuditCertificateMismatchEventType_ServerId,3430,Variable +AuditCertificateMismatchEventType_ClientAuditEntryId,3431,Variable +AuditCertificateMismatchEventType_ClientUserId,3432,Variable +AuditCertificateMismatchEventType_Certificate,3433,Variable +AuditNodeManagementEventType_EventId,3434,Variable +AuditNodeManagementEventType_EventType,3435,Variable +AuditNodeManagementEventType_SourceNode,3436,Variable +AuditNodeManagementEventType_SourceName,3437,Variable +AuditNodeManagementEventType_Time,3438,Variable +AuditNodeManagementEventType_ReceiveTime,3439,Variable +AuditNodeManagementEventType_LocalTime,3440,Variable +AuditNodeManagementEventType_Message,3441,Variable +AuditNodeManagementEventType_Severity,3442,Variable +AuditNodeManagementEventType_ActionTimeStamp,3443,Variable +AuditNodeManagementEventType_Status,3444,Variable +AuditNodeManagementEventType_ServerId,3445,Variable +AuditNodeManagementEventType_ClientAuditEntryId,3446,Variable +AuditNodeManagementEventType_ClientUserId,3447,Variable +AuditAddNodesEventType_EventId,3448,Variable +AuditAddNodesEventType_EventType,3449,Variable +AuditAddNodesEventType_SourceNode,3450,Variable +AuditAddNodesEventType_SourceName,3451,Variable +AuditAddNodesEventType_Time,3452,Variable +AuditAddNodesEventType_ReceiveTime,3453,Variable +AuditAddNodesEventType_LocalTime,3454,Variable +AuditAddNodesEventType_Message,3455,Variable +AuditAddNodesEventType_Severity,3456,Variable +AuditAddNodesEventType_ActionTimeStamp,3457,Variable +AuditAddNodesEventType_Status,3458,Variable +AuditAddNodesEventType_ServerId,3459,Variable +AuditAddNodesEventType_ClientAuditEntryId,3460,Variable +AuditAddNodesEventType_ClientUserId,3461,Variable +AuditDeleteNodesEventType_EventId,3462,Variable +AuditDeleteNodesEventType_EventType,3463,Variable +AuditDeleteNodesEventType_SourceNode,3464,Variable +AuditDeleteNodesEventType_SourceName,3465,Variable +AuditDeleteNodesEventType_Time,3466,Variable +AuditDeleteNodesEventType_ReceiveTime,3467,Variable +AuditDeleteNodesEventType_LocalTime,3468,Variable +AuditDeleteNodesEventType_Message,3469,Variable +AuditDeleteNodesEventType_Severity,3470,Variable +AuditDeleteNodesEventType_ActionTimeStamp,3471,Variable +AuditDeleteNodesEventType_Status,3472,Variable +AuditDeleteNodesEventType_ServerId,3473,Variable +AuditDeleteNodesEventType_ClientAuditEntryId,3474,Variable +AuditDeleteNodesEventType_ClientUserId,3475,Variable +AuditAddReferencesEventType_EventId,3476,Variable +AuditAddReferencesEventType_EventType,3477,Variable +AuditAddReferencesEventType_SourceNode,3478,Variable +AuditAddReferencesEventType_SourceName,3479,Variable +AuditAddReferencesEventType_Time,3480,Variable +AuditAddReferencesEventType_ReceiveTime,3481,Variable +AuditAddReferencesEventType_LocalTime,3482,Variable +AuditAddReferencesEventType_Message,3483,Variable +AuditAddReferencesEventType_Severity,3484,Variable +AuditAddReferencesEventType_ActionTimeStamp,3485,Variable +AuditAddReferencesEventType_Status,3486,Variable +AuditAddReferencesEventType_ServerId,3487,Variable +AuditAddReferencesEventType_ClientAuditEntryId,3488,Variable +AuditAddReferencesEventType_ClientUserId,3489,Variable +AuditDeleteReferencesEventType_EventId,3490,Variable +AuditDeleteReferencesEventType_EventType,3491,Variable +AuditDeleteReferencesEventType_SourceNode,3492,Variable +AuditDeleteReferencesEventType_SourceName,3493,Variable +AuditDeleteReferencesEventType_Time,3494,Variable +AuditDeleteReferencesEventType_ReceiveTime,3495,Variable +AuditDeleteReferencesEventType_LocalTime,3496,Variable +AuditDeleteReferencesEventType_Message,3497,Variable +AuditDeleteReferencesEventType_Severity,3498,Variable +AuditDeleteReferencesEventType_ActionTimeStamp,3499,Variable +AuditDeleteReferencesEventType_Status,3500,Variable +AuditDeleteReferencesEventType_ServerId,3501,Variable +AuditDeleteReferencesEventType_ClientAuditEntryId,3502,Variable +AuditDeleteReferencesEventType_ClientUserId,3503,Variable +AuditUpdateEventType_EventId,3504,Variable +AuditUpdateEventType_EventType,3505,Variable +AuditUpdateEventType_SourceNode,3506,Variable +AuditUpdateEventType_SourceName,3507,Variable +AuditUpdateEventType_Time,3508,Variable +AuditUpdateEventType_ReceiveTime,3509,Variable +AuditUpdateEventType_LocalTime,3510,Variable +AuditUpdateEventType_Message,3511,Variable +AuditUpdateEventType_Severity,3512,Variable +AuditUpdateEventType_ActionTimeStamp,3513,Variable +AuditUpdateEventType_Status,3514,Variable +AuditUpdateEventType_ServerId,3515,Variable +AuditUpdateEventType_ClientAuditEntryId,3516,Variable +AuditUpdateEventType_ClientUserId,3517,Variable +AuditWriteUpdateEventType_EventId,3518,Variable +AuditWriteUpdateEventType_EventType,3519,Variable +AuditWriteUpdateEventType_SourceNode,3520,Variable +AuditWriteUpdateEventType_SourceName,3521,Variable +AuditWriteUpdateEventType_Time,3522,Variable +AuditWriteUpdateEventType_ReceiveTime,3523,Variable +AuditWriteUpdateEventType_LocalTime,3524,Variable +AuditWriteUpdateEventType_Message,3525,Variable +AuditWriteUpdateEventType_Severity,3526,Variable +AuditWriteUpdateEventType_ActionTimeStamp,3527,Variable +AuditWriteUpdateEventType_Status,3528,Variable +AuditWriteUpdateEventType_ServerId,3529,Variable +AuditWriteUpdateEventType_ClientAuditEntryId,3530,Variable +AuditWriteUpdateEventType_ClientUserId,3531,Variable +AuditHistoryUpdateEventType_EventId,3532,Variable +AuditHistoryUpdateEventType_EventType,3533,Variable +AuditHistoryUpdateEventType_SourceNode,3534,Variable +AuditHistoryUpdateEventType_SourceName,3535,Variable +AuditHistoryUpdateEventType_Time,3536,Variable +AuditHistoryUpdateEventType_ReceiveTime,3537,Variable +AuditHistoryUpdateEventType_LocalTime,3538,Variable +AuditHistoryUpdateEventType_Message,3539,Variable +AuditHistoryUpdateEventType_Severity,3540,Variable +AuditHistoryUpdateEventType_ActionTimeStamp,3541,Variable +AuditHistoryUpdateEventType_Status,3542,Variable +AuditHistoryUpdateEventType_ServerId,3543,Variable +AuditHistoryUpdateEventType_ClientAuditEntryId,3544,Variable +AuditHistoryUpdateEventType_ClientUserId,3545,Variable +AuditHistoryEventUpdateEventType_EventId,3546,Variable +AuditHistoryEventUpdateEventType_EventType,3547,Variable +AuditHistoryEventUpdateEventType_SourceNode,3548,Variable +AuditHistoryEventUpdateEventType_SourceName,3549,Variable +AuditHistoryEventUpdateEventType_Time,3550,Variable +AuditHistoryEventUpdateEventType_ReceiveTime,3551,Variable +AuditHistoryEventUpdateEventType_LocalTime,3552,Variable +AuditHistoryEventUpdateEventType_Message,3553,Variable +AuditHistoryEventUpdateEventType_Severity,3554,Variable +AuditHistoryEventUpdateEventType_ActionTimeStamp,3555,Variable +AuditHistoryEventUpdateEventType_Status,3556,Variable +AuditHistoryEventUpdateEventType_ServerId,3557,Variable +AuditHistoryEventUpdateEventType_ClientAuditEntryId,3558,Variable +AuditHistoryEventUpdateEventType_ClientUserId,3559,Variable +AuditHistoryEventUpdateEventType_ParameterDataTypeId,3560,Variable +AuditHistoryValueUpdateEventType_EventId,3561,Variable +AuditHistoryValueUpdateEventType_EventType,3562,Variable +AuditHistoryValueUpdateEventType_SourceNode,3563,Variable +AuditHistoryValueUpdateEventType_SourceName,3564,Variable +AuditHistoryValueUpdateEventType_Time,3565,Variable +AuditHistoryValueUpdateEventType_ReceiveTime,3566,Variable +AuditHistoryValueUpdateEventType_LocalTime,3567,Variable +AuditHistoryValueUpdateEventType_Message,3568,Variable +AuditHistoryValueUpdateEventType_Severity,3569,Variable +AuditHistoryValueUpdateEventType_ActionTimeStamp,3570,Variable +AuditHistoryValueUpdateEventType_Status,3571,Variable +AuditHistoryValueUpdateEventType_ServerId,3572,Variable +AuditHistoryValueUpdateEventType_ClientAuditEntryId,3573,Variable +AuditHistoryValueUpdateEventType_ClientUserId,3574,Variable +AuditHistoryValueUpdateEventType_ParameterDataTypeId,3575,Variable +AuditHistoryDeleteEventType_EventId,3576,Variable +AuditHistoryDeleteEventType_EventType,3577,Variable +AuditHistoryDeleteEventType_SourceNode,3578,Variable +AuditHistoryDeleteEventType_SourceName,3579,Variable +AuditHistoryDeleteEventType_Time,3580,Variable +AuditHistoryDeleteEventType_ReceiveTime,3581,Variable +AuditHistoryDeleteEventType_LocalTime,3582,Variable +AuditHistoryDeleteEventType_Message,3583,Variable +AuditHistoryDeleteEventType_Severity,3584,Variable +AuditHistoryDeleteEventType_ActionTimeStamp,3585,Variable +AuditHistoryDeleteEventType_Status,3586,Variable +AuditHistoryDeleteEventType_ServerId,3587,Variable +AuditHistoryDeleteEventType_ClientAuditEntryId,3588,Variable +AuditHistoryDeleteEventType_ClientUserId,3589,Variable +AuditHistoryDeleteEventType_ParameterDataTypeId,3590,Variable +AuditHistoryRawModifyDeleteEventType_EventId,3591,Variable +AuditHistoryRawModifyDeleteEventType_EventType,3592,Variable +AuditHistoryRawModifyDeleteEventType_SourceNode,3593,Variable +AuditHistoryRawModifyDeleteEventType_SourceName,3594,Variable +AuditHistoryRawModifyDeleteEventType_Time,3595,Variable +AuditHistoryRawModifyDeleteEventType_ReceiveTime,3596,Variable +AuditHistoryRawModifyDeleteEventType_LocalTime,3597,Variable +AuditHistoryRawModifyDeleteEventType_Message,3598,Variable +AuditHistoryRawModifyDeleteEventType_Severity,3599,Variable +AuditHistoryRawModifyDeleteEventType_ActionTimeStamp,3600,Variable +AuditHistoryRawModifyDeleteEventType_Status,3601,Variable +AuditHistoryRawModifyDeleteEventType_ServerId,3602,Variable +AuditHistoryRawModifyDeleteEventType_ClientAuditEntryId,3603,Variable +AuditHistoryRawModifyDeleteEventType_ClientUserId,3604,Variable +AuditHistoryRawModifyDeleteEventType_ParameterDataTypeId,3605,Variable +AuditHistoryRawModifyDeleteEventType_UpdatedNode,3606,Variable +AuditHistoryAtTimeDeleteEventType_EventId,3607,Variable +AuditHistoryAtTimeDeleteEventType_EventType,3608,Variable +AuditHistoryAtTimeDeleteEventType_SourceNode,3609,Variable +AuditHistoryAtTimeDeleteEventType_SourceName,3610,Variable +AuditHistoryAtTimeDeleteEventType_Time,3611,Variable +AuditHistoryAtTimeDeleteEventType_ReceiveTime,3612,Variable +AuditHistoryAtTimeDeleteEventType_LocalTime,3613,Variable +AuditHistoryAtTimeDeleteEventType_Message,3614,Variable +AuditHistoryAtTimeDeleteEventType_Severity,3615,Variable +AuditHistoryAtTimeDeleteEventType_ActionTimeStamp,3616,Variable +AuditHistoryAtTimeDeleteEventType_Status,3617,Variable +AuditHistoryAtTimeDeleteEventType_ServerId,3618,Variable +AuditHistoryAtTimeDeleteEventType_ClientAuditEntryId,3619,Variable +AuditHistoryAtTimeDeleteEventType_ClientUserId,3620,Variable +AuditHistoryAtTimeDeleteEventType_ParameterDataTypeId,3621,Variable +AuditHistoryAtTimeDeleteEventType_UpdatedNode,3622,Variable +AuditHistoryEventDeleteEventType_EventId,3623,Variable +AuditHistoryEventDeleteEventType_EventType,3624,Variable +AuditHistoryEventDeleteEventType_SourceNode,3625,Variable +AuditHistoryEventDeleteEventType_SourceName,3626,Variable +AuditHistoryEventDeleteEventType_Time,3627,Variable +AuditHistoryEventDeleteEventType_ReceiveTime,3628,Variable +AuditHistoryEventDeleteEventType_LocalTime,3629,Variable +AuditHistoryEventDeleteEventType_Message,3630,Variable +AuditHistoryEventDeleteEventType_Severity,3631,Variable +AuditHistoryEventDeleteEventType_ActionTimeStamp,3632,Variable +AuditHistoryEventDeleteEventType_Status,3633,Variable +AuditHistoryEventDeleteEventType_ServerId,3634,Variable +AuditHistoryEventDeleteEventType_ClientAuditEntryId,3635,Variable +AuditHistoryEventDeleteEventType_ClientUserId,3636,Variable +AuditHistoryEventDeleteEventType_ParameterDataTypeId,3637,Variable +AuditHistoryEventDeleteEventType_UpdatedNode,3638,Variable +AuditUpdateMethodEventType_EventId,3639,Variable +AuditUpdateMethodEventType_EventType,3640,Variable +AuditUpdateMethodEventType_SourceNode,3641,Variable +AuditUpdateMethodEventType_SourceName,3642,Variable +AuditUpdateMethodEventType_Time,3643,Variable +AuditUpdateMethodEventType_ReceiveTime,3644,Variable +AuditUpdateMethodEventType_LocalTime,3645,Variable +AuditUpdateMethodEventType_Message,3646,Variable +AuditUpdateMethodEventType_Severity,3647,Variable +AuditUpdateMethodEventType_ActionTimeStamp,3648,Variable +AuditUpdateMethodEventType_Status,3649,Variable +AuditUpdateMethodEventType_ServerId,3650,Variable +AuditUpdateMethodEventType_ClientAuditEntryId,3651,Variable +AuditUpdateMethodEventType_ClientUserId,3652,Variable +SystemEventType_EventId,3653,Variable +SystemEventType_EventType,3654,Variable +SystemEventType_SourceNode,3655,Variable +SystemEventType_SourceName,3656,Variable +SystemEventType_Time,3657,Variable +SystemEventType_ReceiveTime,3658,Variable +SystemEventType_LocalTime,3659,Variable +SystemEventType_Message,3660,Variable +SystemEventType_Severity,3661,Variable +DeviceFailureEventType_EventId,3662,Variable +DeviceFailureEventType_EventType,3663,Variable +DeviceFailureEventType_SourceNode,3664,Variable +DeviceFailureEventType_SourceName,3665,Variable +DeviceFailureEventType_Time,3666,Variable +DeviceFailureEventType_ReceiveTime,3667,Variable +DeviceFailureEventType_LocalTime,3668,Variable +DeviceFailureEventType_Message,3669,Variable +DeviceFailureEventType_Severity,3670,Variable +BaseModelChangeEventType_EventId,3671,Variable +BaseModelChangeEventType_EventType,3672,Variable +BaseModelChangeEventType_SourceNode,3673,Variable +BaseModelChangeEventType_SourceName,3674,Variable +BaseModelChangeEventType_Time,3675,Variable +BaseModelChangeEventType_ReceiveTime,3676,Variable +BaseModelChangeEventType_LocalTime,3677,Variable +BaseModelChangeEventType_Message,3678,Variable +BaseModelChangeEventType_Severity,3679,Variable +GeneralModelChangeEventType_EventId,3680,Variable +GeneralModelChangeEventType_EventType,3681,Variable +GeneralModelChangeEventType_SourceNode,3682,Variable +GeneralModelChangeEventType_SourceName,3683,Variable +GeneralModelChangeEventType_Time,3684,Variable +GeneralModelChangeEventType_ReceiveTime,3685,Variable +GeneralModelChangeEventType_LocalTime,3686,Variable +GeneralModelChangeEventType_Message,3687,Variable +GeneralModelChangeEventType_Severity,3688,Variable +SemanticChangeEventType_EventId,3689,Variable +SemanticChangeEventType_EventType,3690,Variable +SemanticChangeEventType_SourceNode,3691,Variable +SemanticChangeEventType_SourceName,3692,Variable +SemanticChangeEventType_Time,3693,Variable +SemanticChangeEventType_ReceiveTime,3694,Variable +SemanticChangeEventType_LocalTime,3695,Variable +SemanticChangeEventType_Message,3696,Variable +SemanticChangeEventType_Severity,3697,Variable +ServerStatusType_BuildInfo_ProductUri,3698,Variable +ServerStatusType_BuildInfo_ManufacturerName,3699,Variable +ServerStatusType_BuildInfo_ProductName,3700,Variable +ServerStatusType_BuildInfo_SoftwareVersion,3701,Variable +ServerStatusType_BuildInfo_BuildNumber,3702,Variable +ServerStatusType_BuildInfo_BuildDate,3703,Variable +Server_ServerCapabilities_SoftwareCertificates,3704,Variable +Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,3705,Variable +Server_ServerDiagnostics_SessionsDiagnosticsSummary,3706,Object +Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3707,Variable +Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3708,Variable +Server_ServerRedundancy_RedundancySupport,3709,Variable +FiniteStateVariableType_Name,3714,Variable +FiniteStateVariableType_Number,3715,Variable +FiniteStateVariableType_EffectiveDisplayName,3716,Variable +FiniteTransitionVariableType_Name,3717,Variable +FiniteTransitionVariableType_Number,3718,Variable +FiniteTransitionVariableType_TransitionTime,3719,Variable +StateMachineType_CurrentState_Id,3720,Variable +StateMachineType_CurrentState_Name,3721,Variable +StateMachineType_CurrentState_Number,3722,Variable +StateMachineType_CurrentState_EffectiveDisplayName,3723,Variable +StateMachineType_LastTransition_Id,3724,Variable +StateMachineType_LastTransition_Name,3725,Variable +StateMachineType_LastTransition_Number,3726,Variable +StateMachineType_LastTransition_TransitionTime,3727,Variable +FiniteStateMachineType_CurrentState_Id,3728,Variable +FiniteStateMachineType_CurrentState_Name,3729,Variable +FiniteStateMachineType_CurrentState_Number,3730,Variable +FiniteStateMachineType_CurrentState_EffectiveDisplayName,3731,Variable +FiniteStateMachineType_LastTransition_Id,3732,Variable +FiniteStateMachineType_LastTransition_Name,3733,Variable +FiniteStateMachineType_LastTransition_Number,3734,Variable +FiniteStateMachineType_LastTransition_TransitionTime,3735,Variable +InitialStateType_StateNumber,3736,Variable +TransitionEventType_EventId,3737,Variable +TransitionEventType_EventType,3738,Variable +TransitionEventType_SourceNode,3739,Variable +TransitionEventType_SourceName,3740,Variable +TransitionEventType_Time,3741,Variable +TransitionEventType_ReceiveTime,3742,Variable +TransitionEventType_LocalTime,3743,Variable +TransitionEventType_Message,3744,Variable +TransitionEventType_Severity,3745,Variable +TransitionEventType_FromState_Id,3746,Variable +TransitionEventType_FromState_Name,3747,Variable +TransitionEventType_FromState_Number,3748,Variable +TransitionEventType_FromState_EffectiveDisplayName,3749,Variable +TransitionEventType_ToState_Id,3750,Variable +TransitionEventType_ToState_Name,3751,Variable +TransitionEventType_ToState_Number,3752,Variable +TransitionEventType_ToState_EffectiveDisplayName,3753,Variable +TransitionEventType_Transition_Id,3754,Variable +TransitionEventType_Transition_Name,3755,Variable +TransitionEventType_Transition_Number,3756,Variable +TransitionEventType_Transition_TransitionTime,3757,Variable +AuditUpdateStateEventType_EventId,3758,Variable +AuditUpdateStateEventType_EventType,3759,Variable +AuditUpdateStateEventType_SourceNode,3760,Variable +AuditUpdateStateEventType_SourceName,3761,Variable +AuditUpdateStateEventType_Time,3762,Variable +AuditUpdateStateEventType_ReceiveTime,3763,Variable +AuditUpdateStateEventType_LocalTime,3764,Variable +AuditUpdateStateEventType_Message,3765,Variable +AuditUpdateStateEventType_Severity,3766,Variable +AuditUpdateStateEventType_ActionTimeStamp,3767,Variable +AuditUpdateStateEventType_Status,3768,Variable +AuditUpdateStateEventType_ServerId,3769,Variable +AuditUpdateStateEventType_ClientAuditEntryId,3770,Variable +AuditUpdateStateEventType_ClientUserId,3771,Variable +AuditUpdateStateEventType_MethodId,3772,Variable +AuditUpdateStateEventType_InputArguments,3773,Variable +AnalogItemType_Definition,3774,Variable +AnalogItemType_ValuePrecision,3775,Variable +DiscreteItemType_Definition,3776,Variable +DiscreteItemType_ValuePrecision,3777,Variable +TwoStateDiscreteType_Definition,3778,Variable +TwoStateDiscreteType_ValuePrecision,3779,Variable +MultiStateDiscreteType_Definition,3780,Variable +MultiStateDiscreteType_ValuePrecision,3781,Variable +ProgramTransitionEventType_EventId,3782,Variable +ProgramTransitionEventType_EventType,3783,Variable +ProgramTransitionEventType_SourceNode,3784,Variable +ProgramTransitionEventType_SourceName,3785,Variable +ProgramTransitionEventType_Time,3786,Variable +ProgramTransitionEventType_ReceiveTime,3787,Variable +ProgramTransitionEventType_LocalTime,3788,Variable +ProgramTransitionEventType_Message,3789,Variable +ProgramTransitionEventType_Severity,3790,Variable +ProgramTransitionEventType_FromState,3791,Variable +ProgramTransitionEventType_FromState_Id,3792,Variable +ProgramTransitionEventType_FromState_Name,3793,Variable +ProgramTransitionEventType_FromState_Number,3794,Variable +ProgramTransitionEventType_FromState_EffectiveDisplayName,3795,Variable +ProgramTransitionEventType_ToState,3796,Variable +ProgramTransitionEventType_ToState_Id,3797,Variable +ProgramTransitionEventType_ToState_Name,3798,Variable +ProgramTransitionEventType_ToState_Number,3799,Variable +ProgramTransitionEventType_ToState_EffectiveDisplayName,3800,Variable +ProgramTransitionEventType_Transition,3801,Variable +ProgramTransitionEventType_Transition_Id,3802,Variable +ProgramTransitionEventType_Transition_Name,3803,Variable +ProgramTransitionEventType_Transition_Number,3804,Variable +ProgramTransitionEventType_Transition_TransitionTime,3805,Variable +ProgramTransitionAuditEventType,3806,ObjectType +ProgramTransitionAuditEventType_EventId,3807,Variable +ProgramTransitionAuditEventType_EventType,3808,Variable +ProgramTransitionAuditEventType_SourceNode,3809,Variable +ProgramTransitionAuditEventType_SourceName,3810,Variable +ProgramTransitionAuditEventType_Time,3811,Variable +ProgramTransitionAuditEventType_ReceiveTime,3812,Variable +ProgramTransitionAuditEventType_LocalTime,3813,Variable +ProgramTransitionAuditEventType_Message,3814,Variable +ProgramTransitionAuditEventType_Severity,3815,Variable +ProgramTransitionAuditEventType_ActionTimeStamp,3816,Variable +ProgramTransitionAuditEventType_Status,3817,Variable +ProgramTransitionAuditEventType_ServerId,3818,Variable +ProgramTransitionAuditEventType_ClientAuditEntryId,3819,Variable +ProgramTransitionAuditEventType_ClientUserId,3820,Variable +ProgramTransitionAuditEventType_MethodId,3821,Variable +ProgramTransitionAuditEventType_InputArguments,3822,Variable +ProgramTransitionAuditEventType_OldStateId,3823,Variable +ProgramTransitionAuditEventType_NewStateId,3824,Variable +ProgramTransitionAuditEventType_Transition,3825,Variable +ProgramTransitionAuditEventType_Transition_Id,3826,Variable +ProgramTransitionAuditEventType_Transition_Name,3827,Variable +ProgramTransitionAuditEventType_Transition_Number,3828,Variable +ProgramTransitionAuditEventType_Transition_TransitionTime,3829,Variable +ProgramStateMachineType_CurrentState,3830,Variable +ProgramStateMachineType_CurrentState_Id,3831,Variable +ProgramStateMachineType_CurrentState_Name,3832,Variable +ProgramStateMachineType_CurrentState_Number,3833,Variable +ProgramStateMachineType_CurrentState_EffectiveDisplayName,3834,Variable +ProgramStateMachineType_LastTransition,3835,Variable +ProgramStateMachineType_LastTransition_Id,3836,Variable +ProgramStateMachineType_LastTransition_Name,3837,Variable +ProgramStateMachineType_LastTransition_Number,3838,Variable +ProgramStateMachineType_LastTransition_TransitionTime,3839,Variable +ProgramStateMachineType_ProgramDiagnostic_CreateSessionId,3840,Variable +ProgramStateMachineType_ProgramDiagnostic_CreateClientName,3841,Variable +ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime,3842,Variable +ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime,3843,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodCall,3844,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId,3845,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments,3846,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments,3847,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime,3848,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus,3849,Variable +ProgramStateMachineType_FinalResultData,3850,Object +AddCommentMethodType,3863,Method +AddCommentMethodType_InputArguments,3864,Variable +ConditionType_EventId,3865,Variable +ConditionType_EventType,3866,Variable +ConditionType_SourceNode,3867,Variable +ConditionType_SourceName,3868,Variable +ConditionType_Time,3869,Variable +ConditionType_ReceiveTime,3870,Variable +ConditionType_LocalTime,3871,Variable +ConditionType_Message,3872,Variable +ConditionType_Severity,3873,Variable +ConditionType_Retain,3874,Variable +ConditionType_ConditionRefresh,3875,Method +ConditionType_ConditionRefresh_InputArguments,3876,Variable +RefreshStartEventType_EventId,3969,Variable +RefreshStartEventType_EventType,3970,Variable +RefreshStartEventType_SourceNode,3971,Variable +RefreshStartEventType_SourceName,3972,Variable +RefreshStartEventType_Time,3973,Variable +RefreshStartEventType_ReceiveTime,3974,Variable +RefreshStartEventType_LocalTime,3975,Variable +RefreshStartEventType_Message,3976,Variable +RefreshStartEventType_Severity,3977,Variable +RefreshEndEventType_EventId,3978,Variable +RefreshEndEventType_EventType,3979,Variable +RefreshEndEventType_SourceNode,3980,Variable +RefreshEndEventType_SourceName,3981,Variable +RefreshEndEventType_Time,3982,Variable +RefreshEndEventType_ReceiveTime,3983,Variable +RefreshEndEventType_LocalTime,3984,Variable +RefreshEndEventType_Message,3985,Variable +RefreshEndEventType_Severity,3986,Variable +RefreshRequiredEventType_EventId,3987,Variable +RefreshRequiredEventType_EventType,3988,Variable +RefreshRequiredEventType_SourceNode,3989,Variable +RefreshRequiredEventType_SourceName,3990,Variable +RefreshRequiredEventType_Time,3991,Variable +RefreshRequiredEventType_ReceiveTime,3992,Variable +RefreshRequiredEventType_LocalTime,3993,Variable +RefreshRequiredEventType_Message,3994,Variable +RefreshRequiredEventType_Severity,3995,Variable +AuditConditionEventType_EventId,3996,Variable +AuditConditionEventType_EventType,3997,Variable +AuditConditionEventType_SourceNode,3998,Variable +AuditConditionEventType_SourceName,3999,Variable +AuditConditionEventType_Time,4000,Variable +AuditConditionEventType_ReceiveTime,4001,Variable +AuditConditionEventType_LocalTime,4002,Variable +AuditConditionEventType_Message,4003,Variable +AuditConditionEventType_Severity,4004,Variable +AuditConditionEventType_ActionTimeStamp,4005,Variable +AuditConditionEventType_Status,4006,Variable +AuditConditionEventType_ServerId,4007,Variable +AuditConditionEventType_ClientAuditEntryId,4008,Variable +AuditConditionEventType_ClientUserId,4009,Variable +AuditConditionEventType_MethodId,4010,Variable +AuditConditionEventType_InputArguments,4011,Variable +AuditConditionEnableEventType_EventId,4106,Variable +AuditConditionEnableEventType_EventType,4107,Variable +AuditConditionEnableEventType_SourceNode,4108,Variable +AuditConditionEnableEventType_SourceName,4109,Variable +AuditConditionEnableEventType_Time,4110,Variable +AuditConditionEnableEventType_ReceiveTime,4111,Variable +AuditConditionEnableEventType_LocalTime,4112,Variable +AuditConditionEnableEventType_Message,4113,Variable +AuditConditionEnableEventType_Severity,4114,Variable +AuditConditionEnableEventType_ActionTimeStamp,4115,Variable +AuditConditionEnableEventType_Status,4116,Variable +AuditConditionEnableEventType_ServerId,4117,Variable +AuditConditionEnableEventType_ClientAuditEntryId,4118,Variable +AuditConditionEnableEventType_ClientUserId,4119,Variable +AuditConditionEnableEventType_MethodId,4120,Variable +AuditConditionEnableEventType_InputArguments,4121,Variable +AuditConditionCommentEventType_EventId,4170,Variable +AuditConditionCommentEventType_EventType,4171,Variable +AuditConditionCommentEventType_SourceNode,4172,Variable +AuditConditionCommentEventType_SourceName,4173,Variable +AuditConditionCommentEventType_Time,4174,Variable +AuditConditionCommentEventType_ReceiveTime,4175,Variable +AuditConditionCommentEventType_LocalTime,4176,Variable +AuditConditionCommentEventType_Message,4177,Variable +AuditConditionCommentEventType_Severity,4178,Variable +AuditConditionCommentEventType_ActionTimeStamp,4179,Variable +AuditConditionCommentEventType_Status,4180,Variable +AuditConditionCommentEventType_ServerId,4181,Variable +AuditConditionCommentEventType_ClientAuditEntryId,4182,Variable +AuditConditionCommentEventType_ClientUserId,4183,Variable +AuditConditionCommentEventType_MethodId,4184,Variable +AuditConditionCommentEventType_InputArguments,4185,Variable +DialogConditionType_EventId,4188,Variable +DialogConditionType_EventType,4189,Variable +DialogConditionType_SourceNode,4190,Variable +DialogConditionType_SourceName,4191,Variable +DialogConditionType_Time,4192,Variable +DialogConditionType_ReceiveTime,4193,Variable +DialogConditionType_LocalTime,4194,Variable +DialogConditionType_Message,4195,Variable +DialogConditionType_Severity,4196,Variable +DialogConditionType_Retain,4197,Variable +DialogConditionType_ConditionRefresh,4198,Method +DialogConditionType_ConditionRefresh_InputArguments,4199,Variable +AcknowledgeableConditionType_EventId,5113,Variable +AcknowledgeableConditionType_EventType,5114,Variable +AcknowledgeableConditionType_SourceNode,5115,Variable +AcknowledgeableConditionType_SourceName,5116,Variable +AcknowledgeableConditionType_Time,5117,Variable +AcknowledgeableConditionType_ReceiveTime,5118,Variable +AcknowledgeableConditionType_LocalTime,5119,Variable +AcknowledgeableConditionType_Message,5120,Variable +AcknowledgeableConditionType_Severity,5121,Variable +AcknowledgeableConditionType_Retain,5122,Variable +AcknowledgeableConditionType_ConditionRefresh,5123,Method +AcknowledgeableConditionType_ConditionRefresh_InputArguments,5124,Variable +AlarmConditionType_EventId,5540,Variable +AlarmConditionType_EventType,5541,Variable +AlarmConditionType_SourceNode,5542,Variable +AlarmConditionType_SourceName,5543,Variable +AlarmConditionType_Time,5544,Variable +AlarmConditionType_ReceiveTime,5545,Variable +AlarmConditionType_LocalTime,5546,Variable +AlarmConditionType_Message,5547,Variable +AlarmConditionType_Severity,5548,Variable +AlarmConditionType_Retain,5549,Variable +AlarmConditionType_ConditionRefresh,5550,Method +AlarmConditionType_ConditionRefresh_InputArguments,5551,Variable +ShelvedStateMachineType_CurrentState,6088,Variable +ShelvedStateMachineType_CurrentState_Id,6089,Variable +ShelvedStateMachineType_CurrentState_Name,6090,Variable +ShelvedStateMachineType_CurrentState_Number,6091,Variable +ShelvedStateMachineType_CurrentState_EffectiveDisplayName,6092,Variable +ShelvedStateMachineType_LastTransition,6093,Variable +ShelvedStateMachineType_LastTransition_Id,6094,Variable +ShelvedStateMachineType_LastTransition_Name,6095,Variable +ShelvedStateMachineType_LastTransition_Number,6096,Variable +ShelvedStateMachineType_LastTransition_TransitionTime,6097,Variable +ShelvedStateMachineType_Unshelved_StateNumber,6098,Variable +ShelvedStateMachineType_TimedShelved_StateNumber,6100,Variable +ShelvedStateMachineType_OneShotShelved_StateNumber,6101,Variable +TimedShelveMethodType,6102,Method +TimedShelveMethodType_InputArguments,6103,Variable +LimitAlarmType_EventId,6116,Variable +LimitAlarmType_EventType,6117,Variable +LimitAlarmType_SourceNode,6118,Variable +LimitAlarmType_SourceName,6119,Variable +LimitAlarmType_Time,6120,Variable +LimitAlarmType_ReceiveTime,6121,Variable +LimitAlarmType_LocalTime,6122,Variable +LimitAlarmType_Message,6123,Variable +LimitAlarmType_Severity,6124,Variable +LimitAlarmType_Retain,6125,Variable +LimitAlarmType_ConditionRefresh,6126,Method +LimitAlarmType_ConditionRefresh_InputArguments,6127,Variable +IdType_EnumStrings,7591,Variable +EnumValueType,7594,DataType +MessageSecurityMode_EnumStrings,7595,Variable +UserTokenType_EnumStrings,7596,Variable +ApplicationType_EnumStrings,7597,Variable +SecurityTokenRequestType_EnumStrings,7598,Variable +BrowseDirection_EnumStrings,7603,Variable +FilterOperator_EnumStrings,7605,Variable +TimestampsToReturn_EnumStrings,7606,Variable +MonitoringMode_EnumStrings,7608,Variable +DataChangeTrigger_EnumStrings,7609,Variable +DeadbandType_EnumStrings,7610,Variable +RedundancySupport_EnumStrings,7611,Variable +ServerState_EnumStrings,7612,Variable +ExceptionDeviationFormat_EnumStrings,7614,Variable +EnumValueType_Encoding_DefaultXml,7616,Object +OpcUa_BinarySchema,7617,Variable +OpcUa_BinarySchema_DataTypeVersion,7618,Variable +OpcUa_BinarySchema_NamespaceUri,7619,Variable +OpcUa_BinarySchema_Argument,7650,Variable +OpcUa_BinarySchema_Argument_DataTypeVersion,7651,Variable +OpcUa_BinarySchema_Argument_DictionaryFragment,7652,Variable +OpcUa_BinarySchema_EnumValueType,7656,Variable +OpcUa_BinarySchema_EnumValueType_DataTypeVersion,7657,Variable +OpcUa_BinarySchema_EnumValueType_DictionaryFragment,7658,Variable +OpcUa_BinarySchema_StatusResult,7659,Variable +OpcUa_BinarySchema_StatusResult_DataTypeVersion,7660,Variable +OpcUa_BinarySchema_StatusResult_DictionaryFragment,7661,Variable +OpcUa_BinarySchema_UserTokenPolicy,7662,Variable +OpcUa_BinarySchema_UserTokenPolicy_DataTypeVersion,7663,Variable +OpcUa_BinarySchema_UserTokenPolicy_DictionaryFragment,7664,Variable +OpcUa_BinarySchema_ApplicationDescription,7665,Variable +OpcUa_BinarySchema_ApplicationDescription_DataTypeVersion,7666,Variable +OpcUa_BinarySchema_ApplicationDescription_DictionaryFragment,7667,Variable +OpcUa_BinarySchema_EndpointDescription,7668,Variable +OpcUa_BinarySchema_EndpointDescription_DataTypeVersion,7669,Variable +OpcUa_BinarySchema_EndpointDescription_DictionaryFragment,7670,Variable +OpcUa_BinarySchema_UserIdentityToken,7671,Variable +OpcUa_BinarySchema_UserIdentityToken_DataTypeVersion,7672,Variable +OpcUa_BinarySchema_UserIdentityToken_DictionaryFragment,7673,Variable +OpcUa_BinarySchema_AnonymousIdentityToken,7674,Variable +OpcUa_BinarySchema_AnonymousIdentityToken_DataTypeVersion,7675,Variable +OpcUa_BinarySchema_AnonymousIdentityToken_DictionaryFragment,7676,Variable +OpcUa_BinarySchema_UserNameIdentityToken,7677,Variable +OpcUa_BinarySchema_UserNameIdentityToken_DataTypeVersion,7678,Variable +OpcUa_BinarySchema_UserNameIdentityToken_DictionaryFragment,7679,Variable +OpcUa_BinarySchema_X509IdentityToken,7680,Variable +OpcUa_BinarySchema_X509IdentityToken_DataTypeVersion,7681,Variable +OpcUa_BinarySchema_X509IdentityToken_DictionaryFragment,7682,Variable +OpcUa_BinarySchema_IssuedIdentityToken,7683,Variable +OpcUa_BinarySchema_IssuedIdentityToken_DataTypeVersion,7684,Variable +OpcUa_BinarySchema_IssuedIdentityToken_DictionaryFragment,7685,Variable +OpcUa_BinarySchema_EndpointConfiguration,7686,Variable +OpcUa_BinarySchema_EndpointConfiguration_DataTypeVersion,7687,Variable +OpcUa_BinarySchema_EndpointConfiguration_DictionaryFragment,7688,Variable +OpcUa_BinarySchema_BuildInfo,7692,Variable +OpcUa_BinarySchema_BuildInfo_DataTypeVersion,7693,Variable +OpcUa_BinarySchema_BuildInfo_DictionaryFragment,7694,Variable +OpcUa_BinarySchema_SignedSoftwareCertificate,7698,Variable +OpcUa_BinarySchema_SignedSoftwareCertificate_DataTypeVersion,7699,Variable +OpcUa_BinarySchema_SignedSoftwareCertificate_DictionaryFragment,7700,Variable +OpcUa_BinarySchema_AddNodesItem,7728,Variable +OpcUa_BinarySchema_AddNodesItem_DataTypeVersion,7729,Variable +OpcUa_BinarySchema_AddNodesItem_DictionaryFragment,7730,Variable +OpcUa_BinarySchema_AddReferencesItem,7731,Variable +OpcUa_BinarySchema_AddReferencesItem_DataTypeVersion,7732,Variable +OpcUa_BinarySchema_AddReferencesItem_DictionaryFragment,7733,Variable +OpcUa_BinarySchema_DeleteNodesItem,7734,Variable +OpcUa_BinarySchema_DeleteNodesItem_DataTypeVersion,7735,Variable +OpcUa_BinarySchema_DeleteNodesItem_DictionaryFragment,7736,Variable +OpcUa_BinarySchema_DeleteReferencesItem,7737,Variable +OpcUa_BinarySchema_DeleteReferencesItem_DataTypeVersion,7738,Variable +OpcUa_BinarySchema_DeleteReferencesItem_DictionaryFragment,7739,Variable +OpcUa_BinarySchema_RegisteredServer,7782,Variable +OpcUa_BinarySchema_RegisteredServer_DataTypeVersion,7783,Variable +OpcUa_BinarySchema_RegisteredServer_DictionaryFragment,7784,Variable +OpcUa_BinarySchema_ContentFilterElement,7929,Variable +OpcUa_BinarySchema_ContentFilterElement_DataTypeVersion,7930,Variable +OpcUa_BinarySchema_ContentFilterElement_DictionaryFragment,7931,Variable +OpcUa_BinarySchema_ContentFilter,7932,Variable +OpcUa_BinarySchema_ContentFilter_DataTypeVersion,7933,Variable +OpcUa_BinarySchema_ContentFilter_DictionaryFragment,7934,Variable +OpcUa_BinarySchema_FilterOperand,7935,Variable +OpcUa_BinarySchema_FilterOperand_DataTypeVersion,7936,Variable +OpcUa_BinarySchema_FilterOperand_DictionaryFragment,7937,Variable +OpcUa_BinarySchema_ElementOperand,7938,Variable +OpcUa_BinarySchema_ElementOperand_DataTypeVersion,7939,Variable +OpcUa_BinarySchema_ElementOperand_DictionaryFragment,7940,Variable +OpcUa_BinarySchema_LiteralOperand,7941,Variable +OpcUa_BinarySchema_LiteralOperand_DataTypeVersion,7942,Variable +OpcUa_BinarySchema_LiteralOperand_DictionaryFragment,7943,Variable +OpcUa_BinarySchema_AttributeOperand,7944,Variable +OpcUa_BinarySchema_AttributeOperand_DataTypeVersion,7945,Variable +OpcUa_BinarySchema_AttributeOperand_DictionaryFragment,7946,Variable +OpcUa_BinarySchema_SimpleAttributeOperand,7947,Variable +OpcUa_BinarySchema_SimpleAttributeOperand_DataTypeVersion,7948,Variable +OpcUa_BinarySchema_SimpleAttributeOperand_DictionaryFragment,7949,Variable +OpcUa_BinarySchema_HistoryEvent,8004,Variable +OpcUa_BinarySchema_HistoryEvent_DataTypeVersion,8005,Variable +OpcUa_BinarySchema_HistoryEvent_DictionaryFragment,8006,Variable +OpcUa_BinarySchema_MonitoringFilter,8067,Variable +OpcUa_BinarySchema_MonitoringFilter_DataTypeVersion,8068,Variable +OpcUa_BinarySchema_MonitoringFilter_DictionaryFragment,8069,Variable +OpcUa_BinarySchema_EventFilter,8073,Variable +OpcUa_BinarySchema_EventFilter_DataTypeVersion,8074,Variable +OpcUa_BinarySchema_EventFilter_DictionaryFragment,8075,Variable +OpcUa_BinarySchema_AggregateConfiguration,8076,Variable +OpcUa_BinarySchema_AggregateConfiguration_DataTypeVersion,8077,Variable +OpcUa_BinarySchema_AggregateConfiguration_DictionaryFragment,8078,Variable +OpcUa_BinarySchema_HistoryEventFieldList,8172,Variable +OpcUa_BinarySchema_HistoryEventFieldList_DataTypeVersion,8173,Variable +OpcUa_BinarySchema_HistoryEventFieldList_DictionaryFragment,8174,Variable +OpcUa_BinarySchema_RedundantServerDataType,8208,Variable +OpcUa_BinarySchema_RedundantServerDataType_DataTypeVersion,8209,Variable +OpcUa_BinarySchema_RedundantServerDataType_DictionaryFragment,8210,Variable +OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType,8211,Variable +OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion,8212,Variable +OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment,8213,Variable +OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType,8214,Variable +OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DataTypeVersion,8215,Variable +OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DictionaryFragment,8216,Variable +OpcUa_BinarySchema_ServerStatusDataType,8217,Variable +OpcUa_BinarySchema_ServerStatusDataType_DataTypeVersion,8218,Variable +OpcUa_BinarySchema_ServerStatusDataType_DictionaryFragment,8219,Variable +OpcUa_BinarySchema_SessionDiagnosticsDataType,8220,Variable +OpcUa_BinarySchema_SessionDiagnosticsDataType_DataTypeVersion,8221,Variable +OpcUa_BinarySchema_SessionDiagnosticsDataType_DictionaryFragment,8222,Variable +OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType,8223,Variable +OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DataTypeVersion,8224,Variable +OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DictionaryFragment,8225,Variable +OpcUa_BinarySchema_ServiceCounterDataType,8226,Variable +OpcUa_BinarySchema_ServiceCounterDataType_DataTypeVersion,8227,Variable +OpcUa_BinarySchema_ServiceCounterDataType_DictionaryFragment,8228,Variable +OpcUa_BinarySchema_SubscriptionDiagnosticsDataType,8229,Variable +OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DataTypeVersion,8230,Variable +OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DictionaryFragment,8231,Variable +OpcUa_BinarySchema_ModelChangeStructureDataType,8232,Variable +OpcUa_BinarySchema_ModelChangeStructureDataType_DataTypeVersion,8233,Variable +OpcUa_BinarySchema_ModelChangeStructureDataType_DictionaryFragment,8234,Variable +OpcUa_BinarySchema_SemanticChangeStructureDataType,8235,Variable +OpcUa_BinarySchema_SemanticChangeStructureDataType_DataTypeVersion,8236,Variable +OpcUa_BinarySchema_SemanticChangeStructureDataType_DictionaryFragment,8237,Variable +OpcUa_BinarySchema_Range,8238,Variable +OpcUa_BinarySchema_Range_DataTypeVersion,8239,Variable +OpcUa_BinarySchema_Range_DictionaryFragment,8240,Variable +OpcUa_BinarySchema_EUInformation,8241,Variable +OpcUa_BinarySchema_EUInformation_DataTypeVersion,8242,Variable +OpcUa_BinarySchema_EUInformation_DictionaryFragment,8243,Variable +OpcUa_BinarySchema_Annotation,8244,Variable +OpcUa_BinarySchema_Annotation_DataTypeVersion,8245,Variable +OpcUa_BinarySchema_Annotation_DictionaryFragment,8246,Variable +OpcUa_BinarySchema_ProgramDiagnosticDataType,8247,Variable +OpcUa_BinarySchema_ProgramDiagnosticDataType_DataTypeVersion,8248,Variable +OpcUa_BinarySchema_ProgramDiagnosticDataType_DictionaryFragment,8249,Variable +EnumValueType_Encoding_DefaultBinary,8251,Object +OpcUa_XmlSchema,8252,Variable +OpcUa_XmlSchema_DataTypeVersion,8253,Variable +OpcUa_XmlSchema_NamespaceUri,8254,Variable +OpcUa_XmlSchema_Argument,8285,Variable +OpcUa_XmlSchema_Argument_DataTypeVersion,8286,Variable +OpcUa_XmlSchema_Argument_DictionaryFragment,8287,Variable +OpcUa_XmlSchema_EnumValueType,8291,Variable +OpcUa_XmlSchema_EnumValueType_DataTypeVersion,8292,Variable +OpcUa_XmlSchema_EnumValueType_DictionaryFragment,8293,Variable +OpcUa_XmlSchema_StatusResult,8294,Variable +OpcUa_XmlSchema_StatusResult_DataTypeVersion,8295,Variable +OpcUa_XmlSchema_StatusResult_DictionaryFragment,8296,Variable +OpcUa_XmlSchema_UserTokenPolicy,8297,Variable +OpcUa_XmlSchema_UserTokenPolicy_DataTypeVersion,8298,Variable +OpcUa_XmlSchema_UserTokenPolicy_DictionaryFragment,8299,Variable +OpcUa_XmlSchema_ApplicationDescription,8300,Variable +OpcUa_XmlSchema_ApplicationDescription_DataTypeVersion,8301,Variable +OpcUa_XmlSchema_ApplicationDescription_DictionaryFragment,8302,Variable +OpcUa_XmlSchema_EndpointDescription,8303,Variable +OpcUa_XmlSchema_EndpointDescription_DataTypeVersion,8304,Variable +OpcUa_XmlSchema_EndpointDescription_DictionaryFragment,8305,Variable +OpcUa_XmlSchema_UserIdentityToken,8306,Variable +OpcUa_XmlSchema_UserIdentityToken_DataTypeVersion,8307,Variable +OpcUa_XmlSchema_UserIdentityToken_DictionaryFragment,8308,Variable +OpcUa_XmlSchema_AnonymousIdentityToken,8309,Variable +OpcUa_XmlSchema_AnonymousIdentityToken_DataTypeVersion,8310,Variable +OpcUa_XmlSchema_AnonymousIdentityToken_DictionaryFragment,8311,Variable +OpcUa_XmlSchema_UserNameIdentityToken,8312,Variable +OpcUa_XmlSchema_UserNameIdentityToken_DataTypeVersion,8313,Variable +OpcUa_XmlSchema_UserNameIdentityToken_DictionaryFragment,8314,Variable +OpcUa_XmlSchema_X509IdentityToken,8315,Variable +OpcUa_XmlSchema_X509IdentityToken_DataTypeVersion,8316,Variable +OpcUa_XmlSchema_X509IdentityToken_DictionaryFragment,8317,Variable +OpcUa_XmlSchema_IssuedIdentityToken,8318,Variable +OpcUa_XmlSchema_IssuedIdentityToken_DataTypeVersion,8319,Variable +OpcUa_XmlSchema_IssuedIdentityToken_DictionaryFragment,8320,Variable +OpcUa_XmlSchema_EndpointConfiguration,8321,Variable +OpcUa_XmlSchema_EndpointConfiguration_DataTypeVersion,8322,Variable +OpcUa_XmlSchema_EndpointConfiguration_DictionaryFragment,8323,Variable +OpcUa_XmlSchema_BuildInfo,8327,Variable +OpcUa_XmlSchema_BuildInfo_DataTypeVersion,8328,Variable +OpcUa_XmlSchema_BuildInfo_DictionaryFragment,8329,Variable +OpcUa_XmlSchema_SignedSoftwareCertificate,8333,Variable +OpcUa_XmlSchema_SignedSoftwareCertificate_DataTypeVersion,8334,Variable +OpcUa_XmlSchema_SignedSoftwareCertificate_DictionaryFragment,8335,Variable +OpcUa_XmlSchema_AddNodesItem,8363,Variable +OpcUa_XmlSchema_AddNodesItem_DataTypeVersion,8364,Variable +OpcUa_XmlSchema_AddNodesItem_DictionaryFragment,8365,Variable +OpcUa_XmlSchema_AddReferencesItem,8366,Variable +OpcUa_XmlSchema_AddReferencesItem_DataTypeVersion,8367,Variable +OpcUa_XmlSchema_AddReferencesItem_DictionaryFragment,8368,Variable +OpcUa_XmlSchema_DeleteNodesItem,8369,Variable +OpcUa_XmlSchema_DeleteNodesItem_DataTypeVersion,8370,Variable +OpcUa_XmlSchema_DeleteNodesItem_DictionaryFragment,8371,Variable +OpcUa_XmlSchema_DeleteReferencesItem,8372,Variable +OpcUa_XmlSchema_DeleteReferencesItem_DataTypeVersion,8373,Variable +OpcUa_XmlSchema_DeleteReferencesItem_DictionaryFragment,8374,Variable +OpcUa_XmlSchema_RegisteredServer,8417,Variable +OpcUa_XmlSchema_RegisteredServer_DataTypeVersion,8418,Variable +OpcUa_XmlSchema_RegisteredServer_DictionaryFragment,8419,Variable +OpcUa_XmlSchema_ContentFilterElement,8564,Variable +OpcUa_XmlSchema_ContentFilterElement_DataTypeVersion,8565,Variable +OpcUa_XmlSchema_ContentFilterElement_DictionaryFragment,8566,Variable +OpcUa_XmlSchema_ContentFilter,8567,Variable +OpcUa_XmlSchema_ContentFilter_DataTypeVersion,8568,Variable +OpcUa_XmlSchema_ContentFilter_DictionaryFragment,8569,Variable +OpcUa_XmlSchema_FilterOperand,8570,Variable +OpcUa_XmlSchema_FilterOperand_DataTypeVersion,8571,Variable +OpcUa_XmlSchema_FilterOperand_DictionaryFragment,8572,Variable +OpcUa_XmlSchema_ElementOperand,8573,Variable +OpcUa_XmlSchema_ElementOperand_DataTypeVersion,8574,Variable +OpcUa_XmlSchema_ElementOperand_DictionaryFragment,8575,Variable +OpcUa_XmlSchema_LiteralOperand,8576,Variable +OpcUa_XmlSchema_LiteralOperand_DataTypeVersion,8577,Variable +OpcUa_XmlSchema_LiteralOperand_DictionaryFragment,8578,Variable +OpcUa_XmlSchema_AttributeOperand,8579,Variable +OpcUa_XmlSchema_AttributeOperand_DataTypeVersion,8580,Variable +OpcUa_XmlSchema_AttributeOperand_DictionaryFragment,8581,Variable +OpcUa_XmlSchema_SimpleAttributeOperand,8582,Variable +OpcUa_XmlSchema_SimpleAttributeOperand_DataTypeVersion,8583,Variable +OpcUa_XmlSchema_SimpleAttributeOperand_DictionaryFragment,8584,Variable +OpcUa_XmlSchema_HistoryEvent,8639,Variable +OpcUa_XmlSchema_HistoryEvent_DataTypeVersion,8640,Variable +OpcUa_XmlSchema_HistoryEvent_DictionaryFragment,8641,Variable +OpcUa_XmlSchema_MonitoringFilter,8702,Variable +OpcUa_XmlSchema_MonitoringFilter_DataTypeVersion,8703,Variable +OpcUa_XmlSchema_MonitoringFilter_DictionaryFragment,8704,Variable +OpcUa_XmlSchema_EventFilter,8708,Variable +OpcUa_XmlSchema_EventFilter_DataTypeVersion,8709,Variable +OpcUa_XmlSchema_EventFilter_DictionaryFragment,8710,Variable +OpcUa_XmlSchema_AggregateConfiguration,8711,Variable +OpcUa_XmlSchema_AggregateConfiguration_DataTypeVersion,8712,Variable +OpcUa_XmlSchema_AggregateConfiguration_DictionaryFragment,8713,Variable +OpcUa_XmlSchema_HistoryEventFieldList,8807,Variable +OpcUa_XmlSchema_HistoryEventFieldList_DataTypeVersion,8808,Variable +OpcUa_XmlSchema_HistoryEventFieldList_DictionaryFragment,8809,Variable +OpcUa_XmlSchema_RedundantServerDataType,8843,Variable +OpcUa_XmlSchema_RedundantServerDataType_DataTypeVersion,8844,Variable +OpcUa_XmlSchema_RedundantServerDataType_DictionaryFragment,8845,Variable +OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType,8846,Variable +OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion,8847,Variable +OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment,8848,Variable +OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType,8849,Variable +OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DataTypeVersion,8850,Variable +OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DictionaryFragment,8851,Variable +OpcUa_XmlSchema_ServerStatusDataType,8852,Variable +OpcUa_XmlSchema_ServerStatusDataType_DataTypeVersion,8853,Variable +OpcUa_XmlSchema_ServerStatusDataType_DictionaryFragment,8854,Variable +OpcUa_XmlSchema_SessionDiagnosticsDataType,8855,Variable +OpcUa_XmlSchema_SessionDiagnosticsDataType_DataTypeVersion,8856,Variable +OpcUa_XmlSchema_SessionDiagnosticsDataType_DictionaryFragment,8857,Variable +OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType,8858,Variable +OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DataTypeVersion,8859,Variable +OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DictionaryFragment,8860,Variable +OpcUa_XmlSchema_ServiceCounterDataType,8861,Variable +OpcUa_XmlSchema_ServiceCounterDataType_DataTypeVersion,8862,Variable +OpcUa_XmlSchema_ServiceCounterDataType_DictionaryFragment,8863,Variable +OpcUa_XmlSchema_SubscriptionDiagnosticsDataType,8864,Variable +OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DataTypeVersion,8865,Variable +OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DictionaryFragment,8866,Variable +OpcUa_XmlSchema_ModelChangeStructureDataType,8867,Variable +OpcUa_XmlSchema_ModelChangeStructureDataType_DataTypeVersion,8868,Variable +OpcUa_XmlSchema_ModelChangeStructureDataType_DictionaryFragment,8869,Variable +OpcUa_XmlSchema_SemanticChangeStructureDataType,8870,Variable +OpcUa_XmlSchema_SemanticChangeStructureDataType_DataTypeVersion,8871,Variable +OpcUa_XmlSchema_SemanticChangeStructureDataType_DictionaryFragment,8872,Variable +OpcUa_XmlSchema_Range,8873,Variable +OpcUa_XmlSchema_Range_DataTypeVersion,8874,Variable +OpcUa_XmlSchema_Range_DictionaryFragment,8875,Variable +OpcUa_XmlSchema_EUInformation,8876,Variable +OpcUa_XmlSchema_EUInformation_DataTypeVersion,8877,Variable +OpcUa_XmlSchema_EUInformation_DictionaryFragment,8878,Variable +OpcUa_XmlSchema_Annotation,8879,Variable +OpcUa_XmlSchema_Annotation_DataTypeVersion,8880,Variable +OpcUa_XmlSchema_Annotation_DictionaryFragment,8881,Variable +OpcUa_XmlSchema_ProgramDiagnosticDataType,8882,Variable +OpcUa_XmlSchema_ProgramDiagnosticDataType_DataTypeVersion,8883,Variable +OpcUa_XmlSchema_ProgramDiagnosticDataType_DictionaryFragment,8884,Variable +SubscriptionDiagnosticsType_MaxLifetimeCount,8888,Variable +SubscriptionDiagnosticsType_LatePublishRequestCount,8889,Variable +SubscriptionDiagnosticsType_CurrentKeepAliveCount,8890,Variable +SubscriptionDiagnosticsType_CurrentLifetimeCount,8891,Variable +SubscriptionDiagnosticsType_UnacknowledgedMessageCount,8892,Variable +SubscriptionDiagnosticsType_DiscardedMessageCount,8893,Variable +SubscriptionDiagnosticsType_MonitoredItemCount,8894,Variable +SubscriptionDiagnosticsType_DisabledMonitoredItemCount,8895,Variable +SubscriptionDiagnosticsType_MonitoringQueueOverflowCount,8896,Variable +SubscriptionDiagnosticsType_NextSequenceNumber,8897,Variable +SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount,8898,Variable +SessionDiagnosticsVariableType_TotalRequestCount,8900,Variable +SubscriptionDiagnosticsType_EventQueueOverflowCount,8902,Variable +TimeZoneDataType,8912,DataType +TimeZoneDataType_Encoding_DefaultXml,8913,Object +OpcUa_BinarySchema_TimeZoneDataType,8914,Variable +OpcUa_BinarySchema_TimeZoneDataType_DataTypeVersion,8915,Variable +OpcUa_BinarySchema_TimeZoneDataType_DictionaryFragment,8916,Variable +TimeZoneDataType_Encoding_DefaultBinary,8917,Object +OpcUa_XmlSchema_TimeZoneDataType,8918,Variable +OpcUa_XmlSchema_TimeZoneDataType_DataTypeVersion,8919,Variable +OpcUa_XmlSchema_TimeZoneDataType_DictionaryFragment,8920,Variable +AuditConditionRespondEventType,8927,ObjectType +AuditConditionRespondEventType_EventId,8928,Variable +AuditConditionRespondEventType_EventType,8929,Variable +AuditConditionRespondEventType_SourceNode,8930,Variable +AuditConditionRespondEventType_SourceName,8931,Variable +AuditConditionRespondEventType_Time,8932,Variable +AuditConditionRespondEventType_ReceiveTime,8933,Variable +AuditConditionRespondEventType_LocalTime,8934,Variable +AuditConditionRespondEventType_Message,8935,Variable +AuditConditionRespondEventType_Severity,8936,Variable +AuditConditionRespondEventType_ActionTimeStamp,8937,Variable +AuditConditionRespondEventType_Status,8938,Variable +AuditConditionRespondEventType_ServerId,8939,Variable +AuditConditionRespondEventType_ClientAuditEntryId,8940,Variable +AuditConditionRespondEventType_ClientUserId,8941,Variable +AuditConditionRespondEventType_MethodId,8942,Variable +AuditConditionRespondEventType_InputArguments,8943,Variable +AuditConditionAcknowledgeEventType,8944,ObjectType +AuditConditionAcknowledgeEventType_EventId,8945,Variable +AuditConditionAcknowledgeEventType_EventType,8946,Variable +AuditConditionAcknowledgeEventType_SourceNode,8947,Variable +AuditConditionAcknowledgeEventType_SourceName,8948,Variable +AuditConditionAcknowledgeEventType_Time,8949,Variable +AuditConditionAcknowledgeEventType_ReceiveTime,8950,Variable +AuditConditionAcknowledgeEventType_LocalTime,8951,Variable +AuditConditionAcknowledgeEventType_Message,8952,Variable +AuditConditionAcknowledgeEventType_Severity,8953,Variable +AuditConditionAcknowledgeEventType_ActionTimeStamp,8954,Variable +AuditConditionAcknowledgeEventType_Status,8955,Variable +AuditConditionAcknowledgeEventType_ServerId,8956,Variable +AuditConditionAcknowledgeEventType_ClientAuditEntryId,8957,Variable +AuditConditionAcknowledgeEventType_ClientUserId,8958,Variable +AuditConditionAcknowledgeEventType_MethodId,8959,Variable +AuditConditionAcknowledgeEventType_InputArguments,8960,Variable +AuditConditionConfirmEventType,8961,ObjectType +AuditConditionConfirmEventType_EventId,8962,Variable +AuditConditionConfirmEventType_EventType,8963,Variable +AuditConditionConfirmEventType_SourceNode,8964,Variable +AuditConditionConfirmEventType_SourceName,8965,Variable +AuditConditionConfirmEventType_Time,8966,Variable +AuditConditionConfirmEventType_ReceiveTime,8967,Variable +AuditConditionConfirmEventType_LocalTime,8968,Variable +AuditConditionConfirmEventType_Message,8969,Variable +AuditConditionConfirmEventType_Severity,8970,Variable +AuditConditionConfirmEventType_ActionTimeStamp,8971,Variable +AuditConditionConfirmEventType_Status,8972,Variable +AuditConditionConfirmEventType_ServerId,8973,Variable +AuditConditionConfirmEventType_ClientAuditEntryId,8974,Variable +AuditConditionConfirmEventType_ClientUserId,8975,Variable +AuditConditionConfirmEventType_MethodId,8976,Variable +AuditConditionConfirmEventType_InputArguments,8977,Variable +TwoStateVariableType,8995,VariableType +TwoStateVariableType_Id,8996,Variable +TwoStateVariableType_Name,8997,Variable +TwoStateVariableType_Number,8998,Variable +TwoStateVariableType_EffectiveDisplayName,8999,Variable +TwoStateVariableType_TransitionTime,9000,Variable +TwoStateVariableType_EffectiveTransitionTime,9001,Variable +ConditionVariableType,9002,VariableType +ConditionVariableType_SourceTimestamp,9003,Variable +HasTrueSubState,9004,ReferenceType +HasFalseSubState,9005,ReferenceType +HasCondition,9006,ReferenceType +ConditionRefreshMethodType,9007,Method +ConditionRefreshMethodType_InputArguments,9008,Variable +ConditionType_ConditionName,9009,Variable +ConditionType_BranchId,9010,Variable +ConditionType_EnabledState,9011,Variable +ConditionType_EnabledState_Id,9012,Variable +ConditionType_EnabledState_Name,9013,Variable +ConditionType_EnabledState_Number,9014,Variable +ConditionType_EnabledState_EffectiveDisplayName,9015,Variable +ConditionType_EnabledState_TransitionTime,9016,Variable +ConditionType_EnabledState_EffectiveTransitionTime,9017,Variable +ConditionType_EnabledState_TrueState,9018,Variable +ConditionType_EnabledState_FalseState,9019,Variable +ConditionType_Quality,9020,Variable +ConditionType_Quality_SourceTimestamp,9021,Variable +ConditionType_LastSeverity,9022,Variable +ConditionType_LastSeverity_SourceTimestamp,9023,Variable +ConditionType_Comment,9024,Variable +ConditionType_Comment_SourceTimestamp,9025,Variable +ConditionType_ClientUserId,9026,Variable +ConditionType_Enable,9027,Method +ConditionType_Disable,9028,Method +ConditionType_AddComment,9029,Method +ConditionType_AddComment_InputArguments,9030,Variable +DialogResponseMethodType,9031,Method +DialogResponseMethodType_InputArguments,9032,Variable +DialogConditionType_ConditionName,9033,Variable +DialogConditionType_BranchId,9034,Variable +DialogConditionType_EnabledState,9035,Variable +DialogConditionType_EnabledState_Id,9036,Variable +DialogConditionType_EnabledState_Name,9037,Variable +DialogConditionType_EnabledState_Number,9038,Variable +DialogConditionType_EnabledState_EffectiveDisplayName,9039,Variable +DialogConditionType_EnabledState_TransitionTime,9040,Variable +DialogConditionType_EnabledState_EffectiveTransitionTime,9041,Variable +DialogConditionType_EnabledState_TrueState,9042,Variable +DialogConditionType_EnabledState_FalseState,9043,Variable +DialogConditionType_Quality,9044,Variable +DialogConditionType_Quality_SourceTimestamp,9045,Variable +DialogConditionType_LastSeverity,9046,Variable +DialogConditionType_LastSeverity_SourceTimestamp,9047,Variable +DialogConditionType_Comment,9048,Variable +DialogConditionType_Comment_SourceTimestamp,9049,Variable +DialogConditionType_ClientUserId,9050,Variable +DialogConditionType_Enable,9051,Method +DialogConditionType_Disable,9052,Method +DialogConditionType_AddComment,9053,Method +DialogConditionType_AddComment_InputArguments,9054,Variable +DialogConditionType_DialogState,9055,Variable +DialogConditionType_DialogState_Id,9056,Variable +DialogConditionType_DialogState_Name,9057,Variable +DialogConditionType_DialogState_Number,9058,Variable +DialogConditionType_DialogState_EffectiveDisplayName,9059,Variable +DialogConditionType_DialogState_TransitionTime,9060,Variable +DialogConditionType_DialogState_EffectiveTransitionTime,9061,Variable +DialogConditionType_DialogState_TrueState,9062,Variable +DialogConditionType_DialogState_FalseState,9063,Variable +DialogConditionType_ResponseOptionSet,9064,Variable +DialogConditionType_DefaultResponse,9065,Variable +DialogConditionType_OkResponse,9066,Variable +DialogConditionType_CancelResponse,9067,Variable +DialogConditionType_LastResponse,9068,Variable +DialogConditionType_Respond,9069,Method +DialogConditionType_Respond_InputArguments,9070,Variable +AcknowledgeableConditionType_ConditionName,9071,Variable +AcknowledgeableConditionType_BranchId,9072,Variable +AcknowledgeableConditionType_EnabledState,9073,Variable +AcknowledgeableConditionType_EnabledState_Id,9074,Variable +AcknowledgeableConditionType_EnabledState_Name,9075,Variable +AcknowledgeableConditionType_EnabledState_Number,9076,Variable +AcknowledgeableConditionType_EnabledState_EffectiveDisplayName,9077,Variable +AcknowledgeableConditionType_EnabledState_TransitionTime,9078,Variable +AcknowledgeableConditionType_EnabledState_EffectiveTransitionTime,9079,Variable +AcknowledgeableConditionType_EnabledState_TrueState,9080,Variable +AcknowledgeableConditionType_EnabledState_FalseState,9081,Variable +AcknowledgeableConditionType_Quality,9082,Variable +AcknowledgeableConditionType_Quality_SourceTimestamp,9083,Variable +AcknowledgeableConditionType_LastSeverity,9084,Variable +AcknowledgeableConditionType_LastSeverity_SourceTimestamp,9085,Variable +AcknowledgeableConditionType_Comment,9086,Variable +AcknowledgeableConditionType_Comment_SourceTimestamp,9087,Variable +AcknowledgeableConditionType_ClientUserId,9088,Variable +AcknowledgeableConditionType_Enable,9089,Method +AcknowledgeableConditionType_Disable,9090,Method +AcknowledgeableConditionType_AddComment,9091,Method +AcknowledgeableConditionType_AddComment_InputArguments,9092,Variable +AcknowledgeableConditionType_AckedState,9093,Variable +AcknowledgeableConditionType_AckedState_Id,9094,Variable +AcknowledgeableConditionType_AckedState_Name,9095,Variable +AcknowledgeableConditionType_AckedState_Number,9096,Variable +AcknowledgeableConditionType_AckedState_EffectiveDisplayName,9097,Variable +AcknowledgeableConditionType_AckedState_TransitionTime,9098,Variable +AcknowledgeableConditionType_AckedState_EffectiveTransitionTime,9099,Variable +AcknowledgeableConditionType_AckedState_TrueState,9100,Variable +AcknowledgeableConditionType_AckedState_FalseState,9101,Variable +AcknowledgeableConditionType_ConfirmedState,9102,Variable +AcknowledgeableConditionType_ConfirmedState_Id,9103,Variable +AcknowledgeableConditionType_ConfirmedState_Name,9104,Variable +AcknowledgeableConditionType_ConfirmedState_Number,9105,Variable +AcknowledgeableConditionType_ConfirmedState_EffectiveDisplayName,9106,Variable +AcknowledgeableConditionType_ConfirmedState_TransitionTime,9107,Variable +AcknowledgeableConditionType_ConfirmedState_EffectiveTransitionTime,9108,Variable +AcknowledgeableConditionType_ConfirmedState_TrueState,9109,Variable +AcknowledgeableConditionType_ConfirmedState_FalseState,9110,Variable +AcknowledgeableConditionType_Acknowledge,9111,Method +AcknowledgeableConditionType_Acknowledge_InputArguments,9112,Variable +AcknowledgeableConditionType_Confirm,9113,Method +AcknowledgeableConditionType_Confirm_InputArguments,9114,Variable +ShelvedStateMachineType_UnshelveTime,9115,Variable +AlarmConditionType_ConditionName,9116,Variable +AlarmConditionType_BranchId,9117,Variable +AlarmConditionType_EnabledState,9118,Variable +AlarmConditionType_EnabledState_Id,9119,Variable +AlarmConditionType_EnabledState_Name,9120,Variable +AlarmConditionType_EnabledState_Number,9121,Variable +AlarmConditionType_EnabledState_EffectiveDisplayName,9122,Variable +AlarmConditionType_EnabledState_TransitionTime,9123,Variable +AlarmConditionType_EnabledState_EffectiveTransitionTime,9124,Variable +AlarmConditionType_EnabledState_TrueState,9125,Variable +AlarmConditionType_EnabledState_FalseState,9126,Variable +AlarmConditionType_Quality,9127,Variable +AlarmConditionType_Quality_SourceTimestamp,9128,Variable +AlarmConditionType_LastSeverity,9129,Variable +AlarmConditionType_LastSeverity_SourceTimestamp,9130,Variable +AlarmConditionType_Comment,9131,Variable +AlarmConditionType_Comment_SourceTimestamp,9132,Variable +AlarmConditionType_ClientUserId,9133,Variable +AlarmConditionType_Enable,9134,Method +AlarmConditionType_Disable,9135,Method +AlarmConditionType_AddComment,9136,Method +AlarmConditionType_AddComment_InputArguments,9137,Variable +AlarmConditionType_AckedState,9138,Variable +AlarmConditionType_AckedState_Id,9139,Variable +AlarmConditionType_AckedState_Name,9140,Variable +AlarmConditionType_AckedState_Number,9141,Variable +AlarmConditionType_AckedState_EffectiveDisplayName,9142,Variable +AlarmConditionType_AckedState_TransitionTime,9143,Variable +AlarmConditionType_AckedState_EffectiveTransitionTime,9144,Variable +AlarmConditionType_AckedState_TrueState,9145,Variable +AlarmConditionType_AckedState_FalseState,9146,Variable +AlarmConditionType_ConfirmedState,9147,Variable +AlarmConditionType_ConfirmedState_Id,9148,Variable +AlarmConditionType_ConfirmedState_Name,9149,Variable +AlarmConditionType_ConfirmedState_Number,9150,Variable +AlarmConditionType_ConfirmedState_EffectiveDisplayName,9151,Variable +AlarmConditionType_ConfirmedState_TransitionTime,9152,Variable +AlarmConditionType_ConfirmedState_EffectiveTransitionTime,9153,Variable +AlarmConditionType_ConfirmedState_TrueState,9154,Variable +AlarmConditionType_ConfirmedState_FalseState,9155,Variable +AlarmConditionType_Acknowledge,9156,Method +AlarmConditionType_Acknowledge_InputArguments,9157,Variable +AlarmConditionType_Confirm,9158,Method +AlarmConditionType_Confirm_InputArguments,9159,Variable +AlarmConditionType_ActiveState,9160,Variable +AlarmConditionType_ActiveState_Id,9161,Variable +AlarmConditionType_ActiveState_Name,9162,Variable +AlarmConditionType_ActiveState_Number,9163,Variable +AlarmConditionType_ActiveState_EffectiveDisplayName,9164,Variable +AlarmConditionType_ActiveState_TransitionTime,9165,Variable +AlarmConditionType_ActiveState_EffectiveTransitionTime,9166,Variable +AlarmConditionType_ActiveState_TrueState,9167,Variable +AlarmConditionType_ActiveState_FalseState,9168,Variable +AlarmConditionType_SuppressedState,9169,Variable +AlarmConditionType_SuppressedState_Id,9170,Variable +AlarmConditionType_SuppressedState_Name,9171,Variable +AlarmConditionType_SuppressedState_Number,9172,Variable +AlarmConditionType_SuppressedState_EffectiveDisplayName,9173,Variable +AlarmConditionType_SuppressedState_TransitionTime,9174,Variable +AlarmConditionType_SuppressedState_EffectiveTransitionTime,9175,Variable +AlarmConditionType_SuppressedState_TrueState,9176,Variable +AlarmConditionType_SuppressedState_FalseState,9177,Variable +AlarmConditionType_ShelvingState,9178,Object +AlarmConditionType_ShelvingState_CurrentState,9179,Variable +AlarmConditionType_ShelvingState_CurrentState_Id,9180,Variable +AlarmConditionType_ShelvingState_CurrentState_Name,9181,Variable +AlarmConditionType_ShelvingState_CurrentState_Number,9182,Variable +AlarmConditionType_ShelvingState_CurrentState_EffectiveDisplayName,9183,Variable +AlarmConditionType_ShelvingState_LastTransition,9184,Variable +AlarmConditionType_ShelvingState_LastTransition_Id,9185,Variable +AlarmConditionType_ShelvingState_LastTransition_Name,9186,Variable +AlarmConditionType_ShelvingState_LastTransition_Number,9187,Variable +AlarmConditionType_ShelvingState_LastTransition_TransitionTime,9188,Variable +AlarmConditionType_ShelvingState_UnshelveTime,9189,Variable +AlarmConditionType_ShelvingState_Unshelve,9211,Method +AlarmConditionType_ShelvingState_OneShotShelve,9212,Method +AlarmConditionType_ShelvingState_TimedShelve,9213,Method +AlarmConditionType_ShelvingState_TimedShelve_InputArguments,9214,Variable +AlarmConditionType_SuppressedOrShelved,9215,Variable +AlarmConditionType_MaxTimeShelved,9216,Variable +LimitAlarmType_ConditionName,9217,Variable +LimitAlarmType_BranchId,9218,Variable +LimitAlarmType_EnabledState,9219,Variable +LimitAlarmType_EnabledState_Id,9220,Variable +LimitAlarmType_EnabledState_Name,9221,Variable +LimitAlarmType_EnabledState_Number,9222,Variable +LimitAlarmType_EnabledState_EffectiveDisplayName,9223,Variable +LimitAlarmType_EnabledState_TransitionTime,9224,Variable +LimitAlarmType_EnabledState_EffectiveTransitionTime,9225,Variable +LimitAlarmType_EnabledState_TrueState,9226,Variable +LimitAlarmType_EnabledState_FalseState,9227,Variable +LimitAlarmType_Quality,9228,Variable +LimitAlarmType_Quality_SourceTimestamp,9229,Variable +LimitAlarmType_LastSeverity,9230,Variable +LimitAlarmType_LastSeverity_SourceTimestamp,9231,Variable +LimitAlarmType_Comment,9232,Variable +LimitAlarmType_Comment_SourceTimestamp,9233,Variable +LimitAlarmType_ClientUserId,9234,Variable +LimitAlarmType_Enable,9235,Method +LimitAlarmType_Disable,9236,Method +LimitAlarmType_AddComment,9237,Method +LimitAlarmType_AddComment_InputArguments,9238,Variable +LimitAlarmType_AckedState,9239,Variable +LimitAlarmType_AckedState_Id,9240,Variable +LimitAlarmType_AckedState_Name,9241,Variable +LimitAlarmType_AckedState_Number,9242,Variable +LimitAlarmType_AckedState_EffectiveDisplayName,9243,Variable +LimitAlarmType_AckedState_TransitionTime,9244,Variable +LimitAlarmType_AckedState_EffectiveTransitionTime,9245,Variable +LimitAlarmType_AckedState_TrueState,9246,Variable +LimitAlarmType_AckedState_FalseState,9247,Variable +LimitAlarmType_ConfirmedState,9248,Variable +LimitAlarmType_ConfirmedState_Id,9249,Variable +LimitAlarmType_ConfirmedState_Name,9250,Variable +LimitAlarmType_ConfirmedState_Number,9251,Variable +LimitAlarmType_ConfirmedState_EffectiveDisplayName,9252,Variable +LimitAlarmType_ConfirmedState_TransitionTime,9253,Variable +LimitAlarmType_ConfirmedState_EffectiveTransitionTime,9254,Variable +LimitAlarmType_ConfirmedState_TrueState,9255,Variable +LimitAlarmType_ConfirmedState_FalseState,9256,Variable +LimitAlarmType_Acknowledge,9257,Method +LimitAlarmType_Acknowledge_InputArguments,9258,Variable +LimitAlarmType_Confirm,9259,Method +LimitAlarmType_Confirm_InputArguments,9260,Variable +LimitAlarmType_ActiveState,9261,Variable +LimitAlarmType_ActiveState_Id,9262,Variable +LimitAlarmType_ActiveState_Name,9263,Variable +LimitAlarmType_ActiveState_Number,9264,Variable +LimitAlarmType_ActiveState_EffectiveDisplayName,9265,Variable +LimitAlarmType_ActiveState_TransitionTime,9266,Variable +LimitAlarmType_ActiveState_EffectiveTransitionTime,9267,Variable +LimitAlarmType_ActiveState_TrueState,9268,Variable +LimitAlarmType_ActiveState_FalseState,9269,Variable +LimitAlarmType_SuppressedState,9270,Variable +LimitAlarmType_SuppressedState_Id,9271,Variable +LimitAlarmType_SuppressedState_Name,9272,Variable +LimitAlarmType_SuppressedState_Number,9273,Variable +LimitAlarmType_SuppressedState_EffectiveDisplayName,9274,Variable +LimitAlarmType_SuppressedState_TransitionTime,9275,Variable +LimitAlarmType_SuppressedState_EffectiveTransitionTime,9276,Variable +LimitAlarmType_SuppressedState_TrueState,9277,Variable +LimitAlarmType_SuppressedState_FalseState,9278,Variable +LimitAlarmType_ShelvingState,9279,Object +LimitAlarmType_ShelvingState_CurrentState,9280,Variable +LimitAlarmType_ShelvingState_CurrentState_Id,9281,Variable +LimitAlarmType_ShelvingState_CurrentState_Name,9282,Variable +LimitAlarmType_ShelvingState_CurrentState_Number,9283,Variable +LimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9284,Variable +LimitAlarmType_ShelvingState_LastTransition,9285,Variable +LimitAlarmType_ShelvingState_LastTransition_Id,9286,Variable +LimitAlarmType_ShelvingState_LastTransition_Name,9287,Variable +LimitAlarmType_ShelvingState_LastTransition_Number,9288,Variable +LimitAlarmType_ShelvingState_LastTransition_TransitionTime,9289,Variable +LimitAlarmType_ShelvingState_UnshelveTime,9290,Variable +LimitAlarmType_ShelvingState_Unshelve,9312,Method +LimitAlarmType_ShelvingState_OneShotShelve,9313,Method +LimitAlarmType_ShelvingState_TimedShelve,9314,Method +LimitAlarmType_ShelvingState_TimedShelve_InputArguments,9315,Variable +LimitAlarmType_SuppressedOrShelved,9316,Variable +LimitAlarmType_MaxTimeShelved,9317,Variable +ExclusiveLimitStateMachineType,9318,ObjectType +ExclusiveLimitStateMachineType_CurrentState,9319,Variable +ExclusiveLimitStateMachineType_CurrentState_Id,9320,Variable +ExclusiveLimitStateMachineType_CurrentState_Name,9321,Variable +ExclusiveLimitStateMachineType_CurrentState_Number,9322,Variable +ExclusiveLimitStateMachineType_CurrentState_EffectiveDisplayName,9323,Variable +ExclusiveLimitStateMachineType_LastTransition,9324,Variable +ExclusiveLimitStateMachineType_LastTransition_Id,9325,Variable +ExclusiveLimitStateMachineType_LastTransition_Name,9326,Variable +ExclusiveLimitStateMachineType_LastTransition_Number,9327,Variable +ExclusiveLimitStateMachineType_LastTransition_TransitionTime,9328,Variable +ExclusiveLimitStateMachineType_HighHigh,9329,Object +ExclusiveLimitStateMachineType_HighHigh_StateNumber,9330,Variable +ExclusiveLimitStateMachineType_High,9331,Object +ExclusiveLimitStateMachineType_High_StateNumber,9332,Variable +ExclusiveLimitStateMachineType_Low,9333,Object +ExclusiveLimitStateMachineType_Low_StateNumber,9334,Variable +ExclusiveLimitStateMachineType_LowLow,9335,Object +ExclusiveLimitStateMachineType_LowLow_StateNumber,9336,Variable +ExclusiveLimitStateMachineType_LowLowToLow,9337,Object +ExclusiveLimitStateMachineType_LowToLowLow,9338,Object +ExclusiveLimitStateMachineType_HighHighToHigh,9339,Object +ExclusiveLimitStateMachineType_HighToHighHigh,9340,Object +ExclusiveLimitAlarmType,9341,ObjectType +ExclusiveLimitAlarmType_EventId,9342,Variable +ExclusiveLimitAlarmType_EventType,9343,Variable +ExclusiveLimitAlarmType_SourceNode,9344,Variable +ExclusiveLimitAlarmType_SourceName,9345,Variable +ExclusiveLimitAlarmType_Time,9346,Variable +ExclusiveLimitAlarmType_ReceiveTime,9347,Variable +ExclusiveLimitAlarmType_LocalTime,9348,Variable +ExclusiveLimitAlarmType_Message,9349,Variable +ExclusiveLimitAlarmType_Severity,9350,Variable +ExclusiveLimitAlarmType_ConditionName,9351,Variable +ExclusiveLimitAlarmType_BranchId,9352,Variable +ExclusiveLimitAlarmType_Retain,9353,Variable +ExclusiveLimitAlarmType_EnabledState,9354,Variable +ExclusiveLimitAlarmType_EnabledState_Id,9355,Variable +ExclusiveLimitAlarmType_EnabledState_Name,9356,Variable +ExclusiveLimitAlarmType_EnabledState_Number,9357,Variable +ExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName,9358,Variable +ExclusiveLimitAlarmType_EnabledState_TransitionTime,9359,Variable +ExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime,9360,Variable +ExclusiveLimitAlarmType_EnabledState_TrueState,9361,Variable +ExclusiveLimitAlarmType_EnabledState_FalseState,9362,Variable +ExclusiveLimitAlarmType_Quality,9363,Variable +ExclusiveLimitAlarmType_Quality_SourceTimestamp,9364,Variable +ExclusiveLimitAlarmType_LastSeverity,9365,Variable +ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp,9366,Variable +ExclusiveLimitAlarmType_Comment,9367,Variable +ExclusiveLimitAlarmType_Comment_SourceTimestamp,9368,Variable +ExclusiveLimitAlarmType_ClientUserId,9369,Variable +ExclusiveLimitAlarmType_Enable,9370,Method +ExclusiveLimitAlarmType_Disable,9371,Method +ExclusiveLimitAlarmType_AddComment,9372,Method +ExclusiveLimitAlarmType_AddComment_InputArguments,9373,Variable +ExclusiveLimitAlarmType_ConditionRefresh,9374,Method +ExclusiveLimitAlarmType_ConditionRefresh_InputArguments,9375,Variable +ExclusiveLimitAlarmType_AckedState,9376,Variable +ExclusiveLimitAlarmType_AckedState_Id,9377,Variable +ExclusiveLimitAlarmType_AckedState_Name,9378,Variable +ExclusiveLimitAlarmType_AckedState_Number,9379,Variable +ExclusiveLimitAlarmType_AckedState_EffectiveDisplayName,9380,Variable +ExclusiveLimitAlarmType_AckedState_TransitionTime,9381,Variable +ExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime,9382,Variable +ExclusiveLimitAlarmType_AckedState_TrueState,9383,Variable +ExclusiveLimitAlarmType_AckedState_FalseState,9384,Variable +ExclusiveLimitAlarmType_ConfirmedState,9385,Variable +ExclusiveLimitAlarmType_ConfirmedState_Id,9386,Variable +ExclusiveLimitAlarmType_ConfirmedState_Name,9387,Variable +ExclusiveLimitAlarmType_ConfirmedState_Number,9388,Variable +ExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName,9389,Variable +ExclusiveLimitAlarmType_ConfirmedState_TransitionTime,9390,Variable +ExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime,9391,Variable +ExclusiveLimitAlarmType_ConfirmedState_TrueState,9392,Variable +ExclusiveLimitAlarmType_ConfirmedState_FalseState,9393,Variable +ExclusiveLimitAlarmType_Acknowledge,9394,Method +ExclusiveLimitAlarmType_Acknowledge_InputArguments,9395,Variable +ExclusiveLimitAlarmType_Confirm,9396,Method +ExclusiveLimitAlarmType_Confirm_InputArguments,9397,Variable +ExclusiveLimitAlarmType_ActiveState,9398,Variable +ExclusiveLimitAlarmType_ActiveState_Id,9399,Variable +ExclusiveLimitAlarmType_ActiveState_Name,9400,Variable +ExclusiveLimitAlarmType_ActiveState_Number,9401,Variable +ExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName,9402,Variable +ExclusiveLimitAlarmType_ActiveState_TransitionTime,9403,Variable +ExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime,9404,Variable +ExclusiveLimitAlarmType_ActiveState_TrueState,9405,Variable +ExclusiveLimitAlarmType_ActiveState_FalseState,9406,Variable +ExclusiveLimitAlarmType_SuppressedState,9407,Variable +ExclusiveLimitAlarmType_SuppressedState_Id,9408,Variable +ExclusiveLimitAlarmType_SuppressedState_Name,9409,Variable +ExclusiveLimitAlarmType_SuppressedState_Number,9410,Variable +ExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName,9411,Variable +ExclusiveLimitAlarmType_SuppressedState_TransitionTime,9412,Variable +ExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime,9413,Variable +ExclusiveLimitAlarmType_SuppressedState_TrueState,9414,Variable +ExclusiveLimitAlarmType_SuppressedState_FalseState,9415,Variable +ExclusiveLimitAlarmType_ShelvingState,9416,Object +ExclusiveLimitAlarmType_ShelvingState_CurrentState,9417,Variable +ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id,9418,Variable +ExclusiveLimitAlarmType_ShelvingState_CurrentState_Name,9419,Variable +ExclusiveLimitAlarmType_ShelvingState_CurrentState_Number,9420,Variable +ExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9421,Variable +ExclusiveLimitAlarmType_ShelvingState_LastTransition,9422,Variable +ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id,9423,Variable +ExclusiveLimitAlarmType_ShelvingState_LastTransition_Name,9424,Variable +ExclusiveLimitAlarmType_ShelvingState_LastTransition_Number,9425,Variable +ExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime,9426,Variable +ExclusiveLimitAlarmType_ShelvingState_UnshelveTime,9427,Variable +ExclusiveLimitAlarmType_ShelvingState_Unshelve,9449,Method +ExclusiveLimitAlarmType_ShelvingState_OneShotShelve,9450,Method +ExclusiveLimitAlarmType_ShelvingState_TimedShelve,9451,Method +ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments,9452,Variable +ExclusiveLimitAlarmType_SuppressedOrShelved,9453,Variable +ExclusiveLimitAlarmType_MaxTimeShelved,9454,Variable +ExclusiveLimitAlarmType_LimitState,9455,Object +ExclusiveLimitAlarmType_LimitState_CurrentState,9456,Variable +ExclusiveLimitAlarmType_LimitState_CurrentState_Id,9457,Variable +ExclusiveLimitAlarmType_LimitState_CurrentState_Name,9458,Variable +ExclusiveLimitAlarmType_LimitState_CurrentState_Number,9459,Variable +ExclusiveLimitAlarmType_LimitState_CurrentState_EffectiveDisplayName,9460,Variable +ExclusiveLimitAlarmType_LimitState_LastTransition,9461,Variable +ExclusiveLimitAlarmType_LimitState_LastTransition_Id,9462,Variable +ExclusiveLimitAlarmType_LimitState_LastTransition_Name,9463,Variable +ExclusiveLimitAlarmType_LimitState_LastTransition_Number,9464,Variable +ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime,9465,Variable +ExclusiveLimitAlarmType_HighHighLimit,9478,Variable +ExclusiveLimitAlarmType_HighLimit,9479,Variable +ExclusiveLimitAlarmType_LowLimit,9480,Variable +ExclusiveLimitAlarmType_LowLowLimit,9481,Variable +ExclusiveLevelAlarmType,9482,ObjectType +ExclusiveLevelAlarmType_EventId,9483,Variable +ExclusiveLevelAlarmType_EventType,9484,Variable +ExclusiveLevelAlarmType_SourceNode,9485,Variable +ExclusiveLevelAlarmType_SourceName,9486,Variable +ExclusiveLevelAlarmType_Time,9487,Variable +ExclusiveLevelAlarmType_ReceiveTime,9488,Variable +ExclusiveLevelAlarmType_LocalTime,9489,Variable +ExclusiveLevelAlarmType_Message,9490,Variable +ExclusiveLevelAlarmType_Severity,9491,Variable +ExclusiveLevelAlarmType_ConditionName,9492,Variable +ExclusiveLevelAlarmType_BranchId,9493,Variable +ExclusiveLevelAlarmType_Retain,9494,Variable +ExclusiveLevelAlarmType_EnabledState,9495,Variable +ExclusiveLevelAlarmType_EnabledState_Id,9496,Variable +ExclusiveLevelAlarmType_EnabledState_Name,9497,Variable +ExclusiveLevelAlarmType_EnabledState_Number,9498,Variable +ExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName,9499,Variable +ExclusiveLevelAlarmType_EnabledState_TransitionTime,9500,Variable +ExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime,9501,Variable +ExclusiveLevelAlarmType_EnabledState_TrueState,9502,Variable +ExclusiveLevelAlarmType_EnabledState_FalseState,9503,Variable +ExclusiveLevelAlarmType_Quality,9504,Variable +ExclusiveLevelAlarmType_Quality_SourceTimestamp,9505,Variable +ExclusiveLevelAlarmType_LastSeverity,9506,Variable +ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp,9507,Variable +ExclusiveLevelAlarmType_Comment,9508,Variable +ExclusiveLevelAlarmType_Comment_SourceTimestamp,9509,Variable +ExclusiveLevelAlarmType_ClientUserId,9510,Variable +ExclusiveLevelAlarmType_Enable,9511,Method +ExclusiveLevelAlarmType_Disable,9512,Method +ExclusiveLevelAlarmType_AddComment,9513,Method +ExclusiveLevelAlarmType_AddComment_InputArguments,9514,Variable +ExclusiveLevelAlarmType_ConditionRefresh,9515,Method +ExclusiveLevelAlarmType_ConditionRefresh_InputArguments,9516,Variable +ExclusiveLevelAlarmType_AckedState,9517,Variable +ExclusiveLevelAlarmType_AckedState_Id,9518,Variable +ExclusiveLevelAlarmType_AckedState_Name,9519,Variable +ExclusiveLevelAlarmType_AckedState_Number,9520,Variable +ExclusiveLevelAlarmType_AckedState_EffectiveDisplayName,9521,Variable +ExclusiveLevelAlarmType_AckedState_TransitionTime,9522,Variable +ExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime,9523,Variable +ExclusiveLevelAlarmType_AckedState_TrueState,9524,Variable +ExclusiveLevelAlarmType_AckedState_FalseState,9525,Variable +ExclusiveLevelAlarmType_ConfirmedState,9526,Variable +ExclusiveLevelAlarmType_ConfirmedState_Id,9527,Variable +ExclusiveLevelAlarmType_ConfirmedState_Name,9528,Variable +ExclusiveLevelAlarmType_ConfirmedState_Number,9529,Variable +ExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName,9530,Variable +ExclusiveLevelAlarmType_ConfirmedState_TransitionTime,9531,Variable +ExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime,9532,Variable +ExclusiveLevelAlarmType_ConfirmedState_TrueState,9533,Variable +ExclusiveLevelAlarmType_ConfirmedState_FalseState,9534,Variable +ExclusiveLevelAlarmType_Acknowledge,9535,Method +ExclusiveLevelAlarmType_Acknowledge_InputArguments,9536,Variable +ExclusiveLevelAlarmType_Confirm,9537,Method +ExclusiveLevelAlarmType_Confirm_InputArguments,9538,Variable +ExclusiveLevelAlarmType_ActiveState,9539,Variable +ExclusiveLevelAlarmType_ActiveState_Id,9540,Variable +ExclusiveLevelAlarmType_ActiveState_Name,9541,Variable +ExclusiveLevelAlarmType_ActiveState_Number,9542,Variable +ExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName,9543,Variable +ExclusiveLevelAlarmType_ActiveState_TransitionTime,9544,Variable +ExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime,9545,Variable +ExclusiveLevelAlarmType_ActiveState_TrueState,9546,Variable +ExclusiveLevelAlarmType_ActiveState_FalseState,9547,Variable +ExclusiveLevelAlarmType_SuppressedState,9548,Variable +ExclusiveLevelAlarmType_SuppressedState_Id,9549,Variable +ExclusiveLevelAlarmType_SuppressedState_Name,9550,Variable +ExclusiveLevelAlarmType_SuppressedState_Number,9551,Variable +ExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName,9552,Variable +ExclusiveLevelAlarmType_SuppressedState_TransitionTime,9553,Variable +ExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime,9554,Variable +ExclusiveLevelAlarmType_SuppressedState_TrueState,9555,Variable +ExclusiveLevelAlarmType_SuppressedState_FalseState,9556,Variable +ExclusiveLevelAlarmType_ShelvingState,9557,Object +ExclusiveLevelAlarmType_ShelvingState_CurrentState,9558,Variable +ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id,9559,Variable +ExclusiveLevelAlarmType_ShelvingState_CurrentState_Name,9560,Variable +ExclusiveLevelAlarmType_ShelvingState_CurrentState_Number,9561,Variable +ExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9562,Variable +ExclusiveLevelAlarmType_ShelvingState_LastTransition,9563,Variable +ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id,9564,Variable +ExclusiveLevelAlarmType_ShelvingState_LastTransition_Name,9565,Variable +ExclusiveLevelAlarmType_ShelvingState_LastTransition_Number,9566,Variable +ExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime,9567,Variable +ExclusiveLevelAlarmType_ShelvingState_UnshelveTime,9568,Variable +ExclusiveLevelAlarmType_ShelvingState_Unshelve,9590,Method +ExclusiveLevelAlarmType_ShelvingState_OneShotShelve,9591,Method +ExclusiveLevelAlarmType_ShelvingState_TimedShelve,9592,Method +ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments,9593,Variable +ExclusiveLevelAlarmType_SuppressedOrShelved,9594,Variable +ExclusiveLevelAlarmType_MaxTimeShelved,9595,Variable +ExclusiveLevelAlarmType_LimitState,9596,Object +ExclusiveLevelAlarmType_LimitState_CurrentState,9597,Variable +ExclusiveLevelAlarmType_LimitState_CurrentState_Id,9598,Variable +ExclusiveLevelAlarmType_LimitState_CurrentState_Name,9599,Variable +ExclusiveLevelAlarmType_LimitState_CurrentState_Number,9600,Variable +ExclusiveLevelAlarmType_LimitState_CurrentState_EffectiveDisplayName,9601,Variable +ExclusiveLevelAlarmType_LimitState_LastTransition,9602,Variable +ExclusiveLevelAlarmType_LimitState_LastTransition_Id,9603,Variable +ExclusiveLevelAlarmType_LimitState_LastTransition_Name,9604,Variable +ExclusiveLevelAlarmType_LimitState_LastTransition_Number,9605,Variable +ExclusiveLevelAlarmType_LimitState_LastTransition_TransitionTime,9606,Variable +ExclusiveLevelAlarmType_HighHighLimit,9619,Variable +ExclusiveLevelAlarmType_HighLimit,9620,Variable +ExclusiveLevelAlarmType_LowLimit,9621,Variable +ExclusiveLevelAlarmType_LowLowLimit,9622,Variable +ExclusiveRateOfChangeAlarmType,9623,ObjectType +ExclusiveRateOfChangeAlarmType_EventId,9624,Variable +ExclusiveRateOfChangeAlarmType_EventType,9625,Variable +ExclusiveRateOfChangeAlarmType_SourceNode,9626,Variable +ExclusiveRateOfChangeAlarmType_SourceName,9627,Variable +ExclusiveRateOfChangeAlarmType_Time,9628,Variable +ExclusiveRateOfChangeAlarmType_ReceiveTime,9629,Variable +ExclusiveRateOfChangeAlarmType_LocalTime,9630,Variable +ExclusiveRateOfChangeAlarmType_Message,9631,Variable +ExclusiveRateOfChangeAlarmType_Severity,9632,Variable +ExclusiveRateOfChangeAlarmType_ConditionName,9633,Variable +ExclusiveRateOfChangeAlarmType_BranchId,9634,Variable +ExclusiveRateOfChangeAlarmType_Retain,9635,Variable +ExclusiveRateOfChangeAlarmType_EnabledState,9636,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_Id,9637,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_Name,9638,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_Number,9639,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName,9640,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime,9641,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime,9642,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_TrueState,9643,Variable +ExclusiveRateOfChangeAlarmType_EnabledState_FalseState,9644,Variable +ExclusiveRateOfChangeAlarmType_Quality,9645,Variable +ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp,9646,Variable +ExclusiveRateOfChangeAlarmType_LastSeverity,9647,Variable +ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp,9648,Variable +ExclusiveRateOfChangeAlarmType_Comment,9649,Variable +ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp,9650,Variable +ExclusiveRateOfChangeAlarmType_ClientUserId,9651,Variable +ExclusiveRateOfChangeAlarmType_Enable,9652,Method +ExclusiveRateOfChangeAlarmType_Disable,9653,Method +ExclusiveRateOfChangeAlarmType_AddComment,9654,Method +ExclusiveRateOfChangeAlarmType_AddComment_InputArguments,9655,Variable +ExclusiveRateOfChangeAlarmType_ConditionRefresh,9656,Method +ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments,9657,Variable +ExclusiveRateOfChangeAlarmType_AckedState,9658,Variable +ExclusiveRateOfChangeAlarmType_AckedState_Id,9659,Variable +ExclusiveRateOfChangeAlarmType_AckedState_Name,9660,Variable +ExclusiveRateOfChangeAlarmType_AckedState_Number,9661,Variable +ExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName,9662,Variable +ExclusiveRateOfChangeAlarmType_AckedState_TransitionTime,9663,Variable +ExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime,9664,Variable +ExclusiveRateOfChangeAlarmType_AckedState_TrueState,9665,Variable +ExclusiveRateOfChangeAlarmType_AckedState_FalseState,9666,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState,9667,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_Id,9668,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_Name,9669,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_Number,9670,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName,9671,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime,9672,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime,9673,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState,9674,Variable +ExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState,9675,Variable +ExclusiveRateOfChangeAlarmType_Acknowledge,9676,Method +ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments,9677,Variable +ExclusiveRateOfChangeAlarmType_Confirm,9678,Method +ExclusiveRateOfChangeAlarmType_Confirm_InputArguments,9679,Variable +ExclusiveRateOfChangeAlarmType_ActiveState,9680,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_Id,9681,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_Name,9682,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_Number,9683,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName,9684,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime,9685,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime,9686,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_TrueState,9687,Variable +ExclusiveRateOfChangeAlarmType_ActiveState_FalseState,9688,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState,9689,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_Id,9690,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_Name,9691,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_Number,9692,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName,9693,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime,9694,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime,9695,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_TrueState,9696,Variable +ExclusiveRateOfChangeAlarmType_SuppressedState_FalseState,9697,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState,9698,Object +ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState,9699,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id,9700,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name,9701,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number,9702,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9703,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition,9704,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id,9705,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name,9706,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number,9707,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime,9708,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime,9709,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve,9731,Method +ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve,9732,Method +ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve,9733,Method +ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments,9734,Variable +ExclusiveRateOfChangeAlarmType_SuppressedOrShelved,9735,Variable +ExclusiveRateOfChangeAlarmType_MaxTimeShelved,9736,Variable +ExclusiveRateOfChangeAlarmType_LimitState,9737,Object +ExclusiveRateOfChangeAlarmType_LimitState_CurrentState,9738,Variable +ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id,9739,Variable +ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Name,9740,Variable +ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Number,9741,Variable +ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_EffectiveDisplayName,9742,Variable +ExclusiveRateOfChangeAlarmType_LimitState_LastTransition,9743,Variable +ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id,9744,Variable +ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Name,9745,Variable +ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Number,9746,Variable +ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_TransitionTime,9747,Variable +ExclusiveRateOfChangeAlarmType_HighHighLimit,9760,Variable +ExclusiveRateOfChangeAlarmType_HighLimit,9761,Variable +ExclusiveRateOfChangeAlarmType_LowLimit,9762,Variable +ExclusiveRateOfChangeAlarmType_LowLowLimit,9763,Variable +ExclusiveDeviationAlarmType,9764,ObjectType +ExclusiveDeviationAlarmType_EventId,9765,Variable +ExclusiveDeviationAlarmType_EventType,9766,Variable +ExclusiveDeviationAlarmType_SourceNode,9767,Variable +ExclusiveDeviationAlarmType_SourceName,9768,Variable +ExclusiveDeviationAlarmType_Time,9769,Variable +ExclusiveDeviationAlarmType_ReceiveTime,9770,Variable +ExclusiveDeviationAlarmType_LocalTime,9771,Variable +ExclusiveDeviationAlarmType_Message,9772,Variable +ExclusiveDeviationAlarmType_Severity,9773,Variable +ExclusiveDeviationAlarmType_ConditionName,9774,Variable +ExclusiveDeviationAlarmType_BranchId,9775,Variable +ExclusiveDeviationAlarmType_Retain,9776,Variable +ExclusiveDeviationAlarmType_EnabledState,9777,Variable +ExclusiveDeviationAlarmType_EnabledState_Id,9778,Variable +ExclusiveDeviationAlarmType_EnabledState_Name,9779,Variable +ExclusiveDeviationAlarmType_EnabledState_Number,9780,Variable +ExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName,9781,Variable +ExclusiveDeviationAlarmType_EnabledState_TransitionTime,9782,Variable +ExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime,9783,Variable +ExclusiveDeviationAlarmType_EnabledState_TrueState,9784,Variable +ExclusiveDeviationAlarmType_EnabledState_FalseState,9785,Variable +ExclusiveDeviationAlarmType_Quality,9786,Variable +ExclusiveDeviationAlarmType_Quality_SourceTimestamp,9787,Variable +ExclusiveDeviationAlarmType_LastSeverity,9788,Variable +ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp,9789,Variable +ExclusiveDeviationAlarmType_Comment,9790,Variable +ExclusiveDeviationAlarmType_Comment_SourceTimestamp,9791,Variable +ExclusiveDeviationAlarmType_ClientUserId,9792,Variable +ExclusiveDeviationAlarmType_Enable,9793,Method +ExclusiveDeviationAlarmType_Disable,9794,Method +ExclusiveDeviationAlarmType_AddComment,9795,Method +ExclusiveDeviationAlarmType_AddComment_InputArguments,9796,Variable +ExclusiveDeviationAlarmType_ConditionRefresh,9797,Method +ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments,9798,Variable +ExclusiveDeviationAlarmType_AckedState,9799,Variable +ExclusiveDeviationAlarmType_AckedState_Id,9800,Variable +ExclusiveDeviationAlarmType_AckedState_Name,9801,Variable +ExclusiveDeviationAlarmType_AckedState_Number,9802,Variable +ExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName,9803,Variable +ExclusiveDeviationAlarmType_AckedState_TransitionTime,9804,Variable +ExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime,9805,Variable +ExclusiveDeviationAlarmType_AckedState_TrueState,9806,Variable +ExclusiveDeviationAlarmType_AckedState_FalseState,9807,Variable +ExclusiveDeviationAlarmType_ConfirmedState,9808,Variable +ExclusiveDeviationAlarmType_ConfirmedState_Id,9809,Variable +ExclusiveDeviationAlarmType_ConfirmedState_Name,9810,Variable +ExclusiveDeviationAlarmType_ConfirmedState_Number,9811,Variable +ExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName,9812,Variable +ExclusiveDeviationAlarmType_ConfirmedState_TransitionTime,9813,Variable +ExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime,9814,Variable +ExclusiveDeviationAlarmType_ConfirmedState_TrueState,9815,Variable +ExclusiveDeviationAlarmType_ConfirmedState_FalseState,9816,Variable +ExclusiveDeviationAlarmType_Acknowledge,9817,Method +ExclusiveDeviationAlarmType_Acknowledge_InputArguments,9818,Variable +ExclusiveDeviationAlarmType_Confirm,9819,Method +ExclusiveDeviationAlarmType_Confirm_InputArguments,9820,Variable +ExclusiveDeviationAlarmType_ActiveState,9821,Variable +ExclusiveDeviationAlarmType_ActiveState_Id,9822,Variable +ExclusiveDeviationAlarmType_ActiveState_Name,9823,Variable +ExclusiveDeviationAlarmType_ActiveState_Number,9824,Variable +ExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName,9825,Variable +ExclusiveDeviationAlarmType_ActiveState_TransitionTime,9826,Variable +ExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime,9827,Variable +ExclusiveDeviationAlarmType_ActiveState_TrueState,9828,Variable +ExclusiveDeviationAlarmType_ActiveState_FalseState,9829,Variable +ExclusiveDeviationAlarmType_SuppressedState,9830,Variable +ExclusiveDeviationAlarmType_SuppressedState_Id,9831,Variable +ExclusiveDeviationAlarmType_SuppressedState_Name,9832,Variable +ExclusiveDeviationAlarmType_SuppressedState_Number,9833,Variable +ExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName,9834,Variable +ExclusiveDeviationAlarmType_SuppressedState_TransitionTime,9835,Variable +ExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime,9836,Variable +ExclusiveDeviationAlarmType_SuppressedState_TrueState,9837,Variable +ExclusiveDeviationAlarmType_SuppressedState_FalseState,9838,Variable +ExclusiveDeviationAlarmType_ShelvingState,9839,Object +ExclusiveDeviationAlarmType_ShelvingState_CurrentState,9840,Variable +ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id,9841,Variable +ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name,9842,Variable +ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number,9843,Variable +ExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9844,Variable +ExclusiveDeviationAlarmType_ShelvingState_LastTransition,9845,Variable +ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id,9846,Variable +ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name,9847,Variable +ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number,9848,Variable +ExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime,9849,Variable +ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime,9850,Variable +ExclusiveDeviationAlarmType_ShelvingState_Unshelve,9872,Method +ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve,9873,Method +ExclusiveDeviationAlarmType_ShelvingState_TimedShelve,9874,Method +ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments,9875,Variable +ExclusiveDeviationAlarmType_SuppressedOrShelved,9876,Variable +ExclusiveDeviationAlarmType_MaxTimeShelved,9877,Variable +ExclusiveDeviationAlarmType_LimitState,9878,Object +ExclusiveDeviationAlarmType_LimitState_CurrentState,9879,Variable +ExclusiveDeviationAlarmType_LimitState_CurrentState_Id,9880,Variable +ExclusiveDeviationAlarmType_LimitState_CurrentState_Name,9881,Variable +ExclusiveDeviationAlarmType_LimitState_CurrentState_Number,9882,Variable +ExclusiveDeviationAlarmType_LimitState_CurrentState_EffectiveDisplayName,9883,Variable +ExclusiveDeviationAlarmType_LimitState_LastTransition,9884,Variable +ExclusiveDeviationAlarmType_LimitState_LastTransition_Id,9885,Variable +ExclusiveDeviationAlarmType_LimitState_LastTransition_Name,9886,Variable +ExclusiveDeviationAlarmType_LimitState_LastTransition_Number,9887,Variable +ExclusiveDeviationAlarmType_LimitState_LastTransition_TransitionTime,9888,Variable +ExclusiveDeviationAlarmType_HighHighLimit,9901,Variable +ExclusiveDeviationAlarmType_HighLimit,9902,Variable +ExclusiveDeviationAlarmType_LowLimit,9903,Variable +ExclusiveDeviationAlarmType_LowLowLimit,9904,Variable +ExclusiveDeviationAlarmType_SetpointNode,9905,Variable +NonExclusiveLimitAlarmType,9906,ObjectType +NonExclusiveLimitAlarmType_EventId,9907,Variable +NonExclusiveLimitAlarmType_EventType,9908,Variable +NonExclusiveLimitAlarmType_SourceNode,9909,Variable +NonExclusiveLimitAlarmType_SourceName,9910,Variable +NonExclusiveLimitAlarmType_Time,9911,Variable +NonExclusiveLimitAlarmType_ReceiveTime,9912,Variable +NonExclusiveLimitAlarmType_LocalTime,9913,Variable +NonExclusiveLimitAlarmType_Message,9914,Variable +NonExclusiveLimitAlarmType_Severity,9915,Variable +NonExclusiveLimitAlarmType_ConditionName,9916,Variable +NonExclusiveLimitAlarmType_BranchId,9917,Variable +NonExclusiveLimitAlarmType_Retain,9918,Variable +NonExclusiveLimitAlarmType_EnabledState,9919,Variable +NonExclusiveLimitAlarmType_EnabledState_Id,9920,Variable +NonExclusiveLimitAlarmType_EnabledState_Name,9921,Variable +NonExclusiveLimitAlarmType_EnabledState_Number,9922,Variable +NonExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName,9923,Variable +NonExclusiveLimitAlarmType_EnabledState_TransitionTime,9924,Variable +NonExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime,9925,Variable +NonExclusiveLimitAlarmType_EnabledState_TrueState,9926,Variable +NonExclusiveLimitAlarmType_EnabledState_FalseState,9927,Variable +NonExclusiveLimitAlarmType_Quality,9928,Variable +NonExclusiveLimitAlarmType_Quality_SourceTimestamp,9929,Variable +NonExclusiveLimitAlarmType_LastSeverity,9930,Variable +NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp,9931,Variable +NonExclusiveLimitAlarmType_Comment,9932,Variable +NonExclusiveLimitAlarmType_Comment_SourceTimestamp,9933,Variable +NonExclusiveLimitAlarmType_ClientUserId,9934,Variable +NonExclusiveLimitAlarmType_Enable,9935,Method +NonExclusiveLimitAlarmType_Disable,9936,Method +NonExclusiveLimitAlarmType_AddComment,9937,Method +NonExclusiveLimitAlarmType_AddComment_InputArguments,9938,Variable +NonExclusiveLimitAlarmType_ConditionRefresh,9939,Method +NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments,9940,Variable +NonExclusiveLimitAlarmType_AckedState,9941,Variable +NonExclusiveLimitAlarmType_AckedState_Id,9942,Variable +NonExclusiveLimitAlarmType_AckedState_Name,9943,Variable +NonExclusiveLimitAlarmType_AckedState_Number,9944,Variable +NonExclusiveLimitAlarmType_AckedState_EffectiveDisplayName,9945,Variable +NonExclusiveLimitAlarmType_AckedState_TransitionTime,9946,Variable +NonExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime,9947,Variable +NonExclusiveLimitAlarmType_AckedState_TrueState,9948,Variable +NonExclusiveLimitAlarmType_AckedState_FalseState,9949,Variable +NonExclusiveLimitAlarmType_ConfirmedState,9950,Variable +NonExclusiveLimitAlarmType_ConfirmedState_Id,9951,Variable +NonExclusiveLimitAlarmType_ConfirmedState_Name,9952,Variable +NonExclusiveLimitAlarmType_ConfirmedState_Number,9953,Variable +NonExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName,9954,Variable +NonExclusiveLimitAlarmType_ConfirmedState_TransitionTime,9955,Variable +NonExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime,9956,Variable +NonExclusiveLimitAlarmType_ConfirmedState_TrueState,9957,Variable +NonExclusiveLimitAlarmType_ConfirmedState_FalseState,9958,Variable +NonExclusiveLimitAlarmType_Acknowledge,9959,Method +NonExclusiveLimitAlarmType_Acknowledge_InputArguments,9960,Variable +NonExclusiveLimitAlarmType_Confirm,9961,Method +NonExclusiveLimitAlarmType_Confirm_InputArguments,9962,Variable +NonExclusiveLimitAlarmType_ActiveState,9963,Variable +NonExclusiveLimitAlarmType_ActiveState_Id,9964,Variable +NonExclusiveLimitAlarmType_ActiveState_Name,9965,Variable +NonExclusiveLimitAlarmType_ActiveState_Number,9966,Variable +NonExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName,9967,Variable +NonExclusiveLimitAlarmType_ActiveState_TransitionTime,9968,Variable +NonExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime,9969,Variable +NonExclusiveLimitAlarmType_ActiveState_TrueState,9970,Variable +NonExclusiveLimitAlarmType_ActiveState_FalseState,9971,Variable +NonExclusiveLimitAlarmType_SuppressedState,9972,Variable +NonExclusiveLimitAlarmType_SuppressedState_Id,9973,Variable +NonExclusiveLimitAlarmType_SuppressedState_Name,9974,Variable +NonExclusiveLimitAlarmType_SuppressedState_Number,9975,Variable +NonExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName,9976,Variable +NonExclusiveLimitAlarmType_SuppressedState_TransitionTime,9977,Variable +NonExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime,9978,Variable +NonExclusiveLimitAlarmType_SuppressedState_TrueState,9979,Variable +NonExclusiveLimitAlarmType_SuppressedState_FalseState,9980,Variable +NonExclusiveLimitAlarmType_ShelvingState,9981,Object +NonExclusiveLimitAlarmType_ShelvingState_CurrentState,9982,Variable +NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id,9983,Variable +NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Name,9984,Variable +NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Number,9985,Variable +NonExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9986,Variable +NonExclusiveLimitAlarmType_ShelvingState_LastTransition,9987,Variable +NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id,9988,Variable +NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Name,9989,Variable +NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Number,9990,Variable +NonExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime,9991,Variable +NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime,9992,Variable +NonExclusiveLimitAlarmType_ShelvingState_Unshelve,10014,Method +NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve,10015,Method +NonExclusiveLimitAlarmType_ShelvingState_TimedShelve,10016,Method +NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments,10017,Variable +NonExclusiveLimitAlarmType_SuppressedOrShelved,10018,Variable +NonExclusiveLimitAlarmType_MaxTimeShelved,10019,Variable +NonExclusiveLimitAlarmType_HighHighState,10020,Variable +NonExclusiveLimitAlarmType_HighHighState_Id,10021,Variable +NonExclusiveLimitAlarmType_HighHighState_Name,10022,Variable +NonExclusiveLimitAlarmType_HighHighState_Number,10023,Variable +NonExclusiveLimitAlarmType_HighHighState_EffectiveDisplayName,10024,Variable +NonExclusiveLimitAlarmType_HighHighState_TransitionTime,10025,Variable +NonExclusiveLimitAlarmType_HighHighState_EffectiveTransitionTime,10026,Variable +NonExclusiveLimitAlarmType_HighHighState_TrueState,10027,Variable +NonExclusiveLimitAlarmType_HighHighState_FalseState,10028,Variable +NonExclusiveLimitAlarmType_HighState,10029,Variable +NonExclusiveLimitAlarmType_HighState_Id,10030,Variable +NonExclusiveLimitAlarmType_HighState_Name,10031,Variable +NonExclusiveLimitAlarmType_HighState_Number,10032,Variable +NonExclusiveLimitAlarmType_HighState_EffectiveDisplayName,10033,Variable +NonExclusiveLimitAlarmType_HighState_TransitionTime,10034,Variable +NonExclusiveLimitAlarmType_HighState_EffectiveTransitionTime,10035,Variable +NonExclusiveLimitAlarmType_HighState_TrueState,10036,Variable +NonExclusiveLimitAlarmType_HighState_FalseState,10037,Variable +NonExclusiveLimitAlarmType_LowState,10038,Variable +NonExclusiveLimitAlarmType_LowState_Id,10039,Variable +NonExclusiveLimitAlarmType_LowState_Name,10040,Variable +NonExclusiveLimitAlarmType_LowState_Number,10041,Variable +NonExclusiveLimitAlarmType_LowState_EffectiveDisplayName,10042,Variable +NonExclusiveLimitAlarmType_LowState_TransitionTime,10043,Variable +NonExclusiveLimitAlarmType_LowState_EffectiveTransitionTime,10044,Variable +NonExclusiveLimitAlarmType_LowState_TrueState,10045,Variable +NonExclusiveLimitAlarmType_LowState_FalseState,10046,Variable +NonExclusiveLimitAlarmType_LowLowState,10047,Variable +NonExclusiveLimitAlarmType_LowLowState_Id,10048,Variable +NonExclusiveLimitAlarmType_LowLowState_Name,10049,Variable +NonExclusiveLimitAlarmType_LowLowState_Number,10050,Variable +NonExclusiveLimitAlarmType_LowLowState_EffectiveDisplayName,10051,Variable +NonExclusiveLimitAlarmType_LowLowState_TransitionTime,10052,Variable +NonExclusiveLimitAlarmType_LowLowState_EffectiveTransitionTime,10053,Variable +NonExclusiveLimitAlarmType_LowLowState_TrueState,10054,Variable +NonExclusiveLimitAlarmType_LowLowState_FalseState,10055,Variable +NonExclusiveLimitAlarmType_HighHighLimit,10056,Variable +NonExclusiveLimitAlarmType_HighLimit,10057,Variable +NonExclusiveLimitAlarmType_LowLimit,10058,Variable +NonExclusiveLimitAlarmType_LowLowLimit,10059,Variable +NonExclusiveLevelAlarmType,10060,ObjectType +NonExclusiveLevelAlarmType_EventId,10061,Variable +NonExclusiveLevelAlarmType_EventType,10062,Variable +NonExclusiveLevelAlarmType_SourceNode,10063,Variable +NonExclusiveLevelAlarmType_SourceName,10064,Variable +NonExclusiveLevelAlarmType_Time,10065,Variable +NonExclusiveLevelAlarmType_ReceiveTime,10066,Variable +NonExclusiveLevelAlarmType_LocalTime,10067,Variable +NonExclusiveLevelAlarmType_Message,10068,Variable +NonExclusiveLevelAlarmType_Severity,10069,Variable +NonExclusiveLevelAlarmType_ConditionName,10070,Variable +NonExclusiveLevelAlarmType_BranchId,10071,Variable +NonExclusiveLevelAlarmType_Retain,10072,Variable +NonExclusiveLevelAlarmType_EnabledState,10073,Variable +NonExclusiveLevelAlarmType_EnabledState_Id,10074,Variable +NonExclusiveLevelAlarmType_EnabledState_Name,10075,Variable +NonExclusiveLevelAlarmType_EnabledState_Number,10076,Variable +NonExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName,10077,Variable +NonExclusiveLevelAlarmType_EnabledState_TransitionTime,10078,Variable +NonExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime,10079,Variable +NonExclusiveLevelAlarmType_EnabledState_TrueState,10080,Variable +NonExclusiveLevelAlarmType_EnabledState_FalseState,10081,Variable +NonExclusiveLevelAlarmType_Quality,10082,Variable +NonExclusiveLevelAlarmType_Quality_SourceTimestamp,10083,Variable +NonExclusiveLevelAlarmType_LastSeverity,10084,Variable +NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp,10085,Variable +NonExclusiveLevelAlarmType_Comment,10086,Variable +NonExclusiveLevelAlarmType_Comment_SourceTimestamp,10087,Variable +NonExclusiveLevelAlarmType_ClientUserId,10088,Variable +NonExclusiveLevelAlarmType_Enable,10089,Method +NonExclusiveLevelAlarmType_Disable,10090,Method +NonExclusiveLevelAlarmType_AddComment,10091,Method +NonExclusiveLevelAlarmType_AddComment_InputArguments,10092,Variable +NonExclusiveLevelAlarmType_ConditionRefresh,10093,Method +NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments,10094,Variable +NonExclusiveLevelAlarmType_AckedState,10095,Variable +NonExclusiveLevelAlarmType_AckedState_Id,10096,Variable +NonExclusiveLevelAlarmType_AckedState_Name,10097,Variable +NonExclusiveLevelAlarmType_AckedState_Number,10098,Variable +NonExclusiveLevelAlarmType_AckedState_EffectiveDisplayName,10099,Variable +NonExclusiveLevelAlarmType_AckedState_TransitionTime,10100,Variable +NonExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime,10101,Variable +NonExclusiveLevelAlarmType_AckedState_TrueState,10102,Variable +NonExclusiveLevelAlarmType_AckedState_FalseState,10103,Variable +NonExclusiveLevelAlarmType_ConfirmedState,10104,Variable +NonExclusiveLevelAlarmType_ConfirmedState_Id,10105,Variable +NonExclusiveLevelAlarmType_ConfirmedState_Name,10106,Variable +NonExclusiveLevelAlarmType_ConfirmedState_Number,10107,Variable +NonExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName,10108,Variable +NonExclusiveLevelAlarmType_ConfirmedState_TransitionTime,10109,Variable +NonExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime,10110,Variable +NonExclusiveLevelAlarmType_ConfirmedState_TrueState,10111,Variable +NonExclusiveLevelAlarmType_ConfirmedState_FalseState,10112,Variable +NonExclusiveLevelAlarmType_Acknowledge,10113,Method +NonExclusiveLevelAlarmType_Acknowledge_InputArguments,10114,Variable +NonExclusiveLevelAlarmType_Confirm,10115,Method +NonExclusiveLevelAlarmType_Confirm_InputArguments,10116,Variable +NonExclusiveLevelAlarmType_ActiveState,10117,Variable +NonExclusiveLevelAlarmType_ActiveState_Id,10118,Variable +NonExclusiveLevelAlarmType_ActiveState_Name,10119,Variable +NonExclusiveLevelAlarmType_ActiveState_Number,10120,Variable +NonExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName,10121,Variable +NonExclusiveLevelAlarmType_ActiveState_TransitionTime,10122,Variable +NonExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime,10123,Variable +NonExclusiveLevelAlarmType_ActiveState_TrueState,10124,Variable +NonExclusiveLevelAlarmType_ActiveState_FalseState,10125,Variable +NonExclusiveLevelAlarmType_SuppressedState,10126,Variable +NonExclusiveLevelAlarmType_SuppressedState_Id,10127,Variable +NonExclusiveLevelAlarmType_SuppressedState_Name,10128,Variable +NonExclusiveLevelAlarmType_SuppressedState_Number,10129,Variable +NonExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName,10130,Variable +NonExclusiveLevelAlarmType_SuppressedState_TransitionTime,10131,Variable +NonExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime,10132,Variable +NonExclusiveLevelAlarmType_SuppressedState_TrueState,10133,Variable +NonExclusiveLevelAlarmType_SuppressedState_FalseState,10134,Variable +NonExclusiveLevelAlarmType_ShelvingState,10135,Object +NonExclusiveLevelAlarmType_ShelvingState_CurrentState,10136,Variable +NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id,10137,Variable +NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Name,10138,Variable +NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Number,10139,Variable +NonExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10140,Variable +NonExclusiveLevelAlarmType_ShelvingState_LastTransition,10141,Variable +NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id,10142,Variable +NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Name,10143,Variable +NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Number,10144,Variable +NonExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime,10145,Variable +NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime,10146,Variable +NonExclusiveLevelAlarmType_ShelvingState_Unshelve,10168,Method +NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve,10169,Method +NonExclusiveLevelAlarmType_ShelvingState_TimedShelve,10170,Method +NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments,10171,Variable +NonExclusiveLevelAlarmType_SuppressedOrShelved,10172,Variable +NonExclusiveLevelAlarmType_MaxTimeShelved,10173,Variable +NonExclusiveLevelAlarmType_HighHighState,10174,Variable +NonExclusiveLevelAlarmType_HighHighState_Id,10175,Variable +NonExclusiveLevelAlarmType_HighHighState_Name,10176,Variable +NonExclusiveLevelAlarmType_HighHighState_Number,10177,Variable +NonExclusiveLevelAlarmType_HighHighState_EffectiveDisplayName,10178,Variable +NonExclusiveLevelAlarmType_HighHighState_TransitionTime,10179,Variable +NonExclusiveLevelAlarmType_HighHighState_EffectiveTransitionTime,10180,Variable +NonExclusiveLevelAlarmType_HighHighState_TrueState,10181,Variable +NonExclusiveLevelAlarmType_HighHighState_FalseState,10182,Variable +NonExclusiveLevelAlarmType_HighState,10183,Variable +NonExclusiveLevelAlarmType_HighState_Id,10184,Variable +NonExclusiveLevelAlarmType_HighState_Name,10185,Variable +NonExclusiveLevelAlarmType_HighState_Number,10186,Variable +NonExclusiveLevelAlarmType_HighState_EffectiveDisplayName,10187,Variable +NonExclusiveLevelAlarmType_HighState_TransitionTime,10188,Variable +NonExclusiveLevelAlarmType_HighState_EffectiveTransitionTime,10189,Variable +NonExclusiveLevelAlarmType_HighState_TrueState,10190,Variable +NonExclusiveLevelAlarmType_HighState_FalseState,10191,Variable +NonExclusiveLevelAlarmType_LowState,10192,Variable +NonExclusiveLevelAlarmType_LowState_Id,10193,Variable +NonExclusiveLevelAlarmType_LowState_Name,10194,Variable +NonExclusiveLevelAlarmType_LowState_Number,10195,Variable +NonExclusiveLevelAlarmType_LowState_EffectiveDisplayName,10196,Variable +NonExclusiveLevelAlarmType_LowState_TransitionTime,10197,Variable +NonExclusiveLevelAlarmType_LowState_EffectiveTransitionTime,10198,Variable +NonExclusiveLevelAlarmType_LowState_TrueState,10199,Variable +NonExclusiveLevelAlarmType_LowState_FalseState,10200,Variable +NonExclusiveLevelAlarmType_LowLowState,10201,Variable +NonExclusiveLevelAlarmType_LowLowState_Id,10202,Variable +NonExclusiveLevelAlarmType_LowLowState_Name,10203,Variable +NonExclusiveLevelAlarmType_LowLowState_Number,10204,Variable +NonExclusiveLevelAlarmType_LowLowState_EffectiveDisplayName,10205,Variable +NonExclusiveLevelAlarmType_LowLowState_TransitionTime,10206,Variable +NonExclusiveLevelAlarmType_LowLowState_EffectiveTransitionTime,10207,Variable +NonExclusiveLevelAlarmType_LowLowState_TrueState,10208,Variable +NonExclusiveLevelAlarmType_LowLowState_FalseState,10209,Variable +NonExclusiveLevelAlarmType_HighHighLimit,10210,Variable +NonExclusiveLevelAlarmType_HighLimit,10211,Variable +NonExclusiveLevelAlarmType_LowLimit,10212,Variable +NonExclusiveLevelAlarmType_LowLowLimit,10213,Variable +NonExclusiveRateOfChangeAlarmType,10214,ObjectType +NonExclusiveRateOfChangeAlarmType_EventId,10215,Variable +NonExclusiveRateOfChangeAlarmType_EventType,10216,Variable +NonExclusiveRateOfChangeAlarmType_SourceNode,10217,Variable +NonExclusiveRateOfChangeAlarmType_SourceName,10218,Variable +NonExclusiveRateOfChangeAlarmType_Time,10219,Variable +NonExclusiveRateOfChangeAlarmType_ReceiveTime,10220,Variable +NonExclusiveRateOfChangeAlarmType_LocalTime,10221,Variable +NonExclusiveRateOfChangeAlarmType_Message,10222,Variable +NonExclusiveRateOfChangeAlarmType_Severity,10223,Variable +NonExclusiveRateOfChangeAlarmType_ConditionName,10224,Variable +NonExclusiveRateOfChangeAlarmType_BranchId,10225,Variable +NonExclusiveRateOfChangeAlarmType_Retain,10226,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState,10227,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_Id,10228,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_Name,10229,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_Number,10230,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName,10231,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime,10232,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime,10233,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_TrueState,10234,Variable +NonExclusiveRateOfChangeAlarmType_EnabledState_FalseState,10235,Variable +NonExclusiveRateOfChangeAlarmType_Quality,10236,Variable +NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp,10237,Variable +NonExclusiveRateOfChangeAlarmType_LastSeverity,10238,Variable +NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp,10239,Variable +NonExclusiveRateOfChangeAlarmType_Comment,10240,Variable +NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp,10241,Variable +NonExclusiveRateOfChangeAlarmType_ClientUserId,10242,Variable +NonExclusiveRateOfChangeAlarmType_Enable,10243,Method +NonExclusiveRateOfChangeAlarmType_Disable,10244,Method +NonExclusiveRateOfChangeAlarmType_AddComment,10245,Method +NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments,10246,Variable +NonExclusiveRateOfChangeAlarmType_ConditionRefresh,10247,Method +NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments,10248,Variable +NonExclusiveRateOfChangeAlarmType_AckedState,10249,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_Id,10250,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_Name,10251,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_Number,10252,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName,10253,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_TransitionTime,10254,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime,10255,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_TrueState,10256,Variable +NonExclusiveRateOfChangeAlarmType_AckedState_FalseState,10257,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState,10258,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id,10259,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_Name,10260,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_Number,10261,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName,10262,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime,10263,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime,10264,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState,10265,Variable +NonExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState,10266,Variable +NonExclusiveRateOfChangeAlarmType_Acknowledge,10267,Method +NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments,10268,Variable +NonExclusiveRateOfChangeAlarmType_Confirm,10269,Method +NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments,10270,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState,10271,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_Id,10272,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_Name,10273,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_Number,10274,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName,10275,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime,10276,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime,10277,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_TrueState,10278,Variable +NonExclusiveRateOfChangeAlarmType_ActiveState_FalseState,10279,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState,10280,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_Id,10281,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_Name,10282,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_Number,10283,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName,10284,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime,10285,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime,10286,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_TrueState,10287,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedState_FalseState,10288,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState,10289,Object +NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState,10290,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id,10291,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name,10292,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number,10293,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10294,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition,10295,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id,10296,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name,10297,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number,10298,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime,10299,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime,10300,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve,10322,Method +NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve,10323,Method +NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve,10324,Method +NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments,10325,Variable +NonExclusiveRateOfChangeAlarmType_SuppressedOrShelved,10326,Variable +NonExclusiveRateOfChangeAlarmType_MaxTimeShelved,10327,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState,10328,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_Id,10329,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_Name,10330,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_Number,10331,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveDisplayName,10332,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_TransitionTime,10333,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveTransitionTime,10334,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_TrueState,10335,Variable +NonExclusiveRateOfChangeAlarmType_HighHighState_FalseState,10336,Variable +NonExclusiveRateOfChangeAlarmType_HighState,10337,Variable +NonExclusiveRateOfChangeAlarmType_HighState_Id,10338,Variable +NonExclusiveRateOfChangeAlarmType_HighState_Name,10339,Variable +NonExclusiveRateOfChangeAlarmType_HighState_Number,10340,Variable +NonExclusiveRateOfChangeAlarmType_HighState_EffectiveDisplayName,10341,Variable +NonExclusiveRateOfChangeAlarmType_HighState_TransitionTime,10342,Variable +NonExclusiveRateOfChangeAlarmType_HighState_EffectiveTransitionTime,10343,Variable +NonExclusiveRateOfChangeAlarmType_HighState_TrueState,10344,Variable +NonExclusiveRateOfChangeAlarmType_HighState_FalseState,10345,Variable +NonExclusiveRateOfChangeAlarmType_LowState,10346,Variable +NonExclusiveRateOfChangeAlarmType_LowState_Id,10347,Variable +NonExclusiveRateOfChangeAlarmType_LowState_Name,10348,Variable +NonExclusiveRateOfChangeAlarmType_LowState_Number,10349,Variable +NonExclusiveRateOfChangeAlarmType_LowState_EffectiveDisplayName,10350,Variable +NonExclusiveRateOfChangeAlarmType_LowState_TransitionTime,10351,Variable +NonExclusiveRateOfChangeAlarmType_LowState_EffectiveTransitionTime,10352,Variable +NonExclusiveRateOfChangeAlarmType_LowState_TrueState,10353,Variable +NonExclusiveRateOfChangeAlarmType_LowState_FalseState,10354,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState,10355,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_Id,10356,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_Name,10357,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_Number,10358,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveDisplayName,10359,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_TransitionTime,10360,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveTransitionTime,10361,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_TrueState,10362,Variable +NonExclusiveRateOfChangeAlarmType_LowLowState_FalseState,10363,Variable +NonExclusiveRateOfChangeAlarmType_HighHighLimit,10364,Variable +NonExclusiveRateOfChangeAlarmType_HighLimit,10365,Variable +NonExclusiveRateOfChangeAlarmType_LowLimit,10366,Variable +NonExclusiveRateOfChangeAlarmType_LowLowLimit,10367,Variable +NonExclusiveDeviationAlarmType,10368,ObjectType +NonExclusiveDeviationAlarmType_EventId,10369,Variable +NonExclusiveDeviationAlarmType_EventType,10370,Variable +NonExclusiveDeviationAlarmType_SourceNode,10371,Variable +NonExclusiveDeviationAlarmType_SourceName,10372,Variable +NonExclusiveDeviationAlarmType_Time,10373,Variable +NonExclusiveDeviationAlarmType_ReceiveTime,10374,Variable +NonExclusiveDeviationAlarmType_LocalTime,10375,Variable +NonExclusiveDeviationAlarmType_Message,10376,Variable +NonExclusiveDeviationAlarmType_Severity,10377,Variable +NonExclusiveDeviationAlarmType_ConditionName,10378,Variable +NonExclusiveDeviationAlarmType_BranchId,10379,Variable +NonExclusiveDeviationAlarmType_Retain,10380,Variable +NonExclusiveDeviationAlarmType_EnabledState,10381,Variable +NonExclusiveDeviationAlarmType_EnabledState_Id,10382,Variable +NonExclusiveDeviationAlarmType_EnabledState_Name,10383,Variable +NonExclusiveDeviationAlarmType_EnabledState_Number,10384,Variable +NonExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName,10385,Variable +NonExclusiveDeviationAlarmType_EnabledState_TransitionTime,10386,Variable +NonExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime,10387,Variable +NonExclusiveDeviationAlarmType_EnabledState_TrueState,10388,Variable +NonExclusiveDeviationAlarmType_EnabledState_FalseState,10389,Variable +NonExclusiveDeviationAlarmType_Quality,10390,Variable +NonExclusiveDeviationAlarmType_Quality_SourceTimestamp,10391,Variable +NonExclusiveDeviationAlarmType_LastSeverity,10392,Variable +NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp,10393,Variable +NonExclusiveDeviationAlarmType_Comment,10394,Variable +NonExclusiveDeviationAlarmType_Comment_SourceTimestamp,10395,Variable +NonExclusiveDeviationAlarmType_ClientUserId,10396,Variable +NonExclusiveDeviationAlarmType_Enable,10397,Method +NonExclusiveDeviationAlarmType_Disable,10398,Method +NonExclusiveDeviationAlarmType_AddComment,10399,Method +NonExclusiveDeviationAlarmType_AddComment_InputArguments,10400,Variable +NonExclusiveDeviationAlarmType_ConditionRefresh,10401,Method +NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments,10402,Variable +NonExclusiveDeviationAlarmType_AckedState,10403,Variable +NonExclusiveDeviationAlarmType_AckedState_Id,10404,Variable +NonExclusiveDeviationAlarmType_AckedState_Name,10405,Variable +NonExclusiveDeviationAlarmType_AckedState_Number,10406,Variable +NonExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName,10407,Variable +NonExclusiveDeviationAlarmType_AckedState_TransitionTime,10408,Variable +NonExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime,10409,Variable +NonExclusiveDeviationAlarmType_AckedState_TrueState,10410,Variable +NonExclusiveDeviationAlarmType_AckedState_FalseState,10411,Variable +NonExclusiveDeviationAlarmType_ConfirmedState,10412,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_Id,10413,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_Name,10414,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_Number,10415,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName,10416,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_TransitionTime,10417,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime,10418,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_TrueState,10419,Variable +NonExclusiveDeviationAlarmType_ConfirmedState_FalseState,10420,Variable +NonExclusiveDeviationAlarmType_Acknowledge,10421,Method +NonExclusiveDeviationAlarmType_Acknowledge_InputArguments,10422,Variable +NonExclusiveDeviationAlarmType_Confirm,10423,Method +NonExclusiveDeviationAlarmType_Confirm_InputArguments,10424,Variable +NonExclusiveDeviationAlarmType_ActiveState,10425,Variable +NonExclusiveDeviationAlarmType_ActiveState_Id,10426,Variable +NonExclusiveDeviationAlarmType_ActiveState_Name,10427,Variable +NonExclusiveDeviationAlarmType_ActiveState_Number,10428,Variable +NonExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName,10429,Variable +NonExclusiveDeviationAlarmType_ActiveState_TransitionTime,10430,Variable +NonExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime,10431,Variable +NonExclusiveDeviationAlarmType_ActiveState_TrueState,10432,Variable +NonExclusiveDeviationAlarmType_ActiveState_FalseState,10433,Variable +NonExclusiveDeviationAlarmType_SuppressedState,10434,Variable +NonExclusiveDeviationAlarmType_SuppressedState_Id,10435,Variable +NonExclusiveDeviationAlarmType_SuppressedState_Name,10436,Variable +NonExclusiveDeviationAlarmType_SuppressedState_Number,10437,Variable +NonExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName,10438,Variable +NonExclusiveDeviationAlarmType_SuppressedState_TransitionTime,10439,Variable +NonExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime,10440,Variable +NonExclusiveDeviationAlarmType_SuppressedState_TrueState,10441,Variable +NonExclusiveDeviationAlarmType_SuppressedState_FalseState,10442,Variable +NonExclusiveDeviationAlarmType_ShelvingState,10443,Object +NonExclusiveDeviationAlarmType_ShelvingState_CurrentState,10444,Variable +NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id,10445,Variable +NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name,10446,Variable +NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number,10447,Variable +NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10448,Variable +NonExclusiveDeviationAlarmType_ShelvingState_LastTransition,10449,Variable +NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id,10450,Variable +NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name,10451,Variable +NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number,10452,Variable +NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime,10453,Variable +NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime,10454,Variable +NonExclusiveDeviationAlarmType_ShelvingState_Unshelve,10476,Method +NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve,10477,Method +NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve,10478,Method +NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments,10479,Variable +NonExclusiveDeviationAlarmType_SuppressedOrShelved,10480,Variable +NonExclusiveDeviationAlarmType_MaxTimeShelved,10481,Variable +NonExclusiveDeviationAlarmType_HighHighState,10482,Variable +NonExclusiveDeviationAlarmType_HighHighState_Id,10483,Variable +NonExclusiveDeviationAlarmType_HighHighState_Name,10484,Variable +NonExclusiveDeviationAlarmType_HighHighState_Number,10485,Variable +NonExclusiveDeviationAlarmType_HighHighState_EffectiveDisplayName,10486,Variable +NonExclusiveDeviationAlarmType_HighHighState_TransitionTime,10487,Variable +NonExclusiveDeviationAlarmType_HighHighState_EffectiveTransitionTime,10488,Variable +NonExclusiveDeviationAlarmType_HighHighState_TrueState,10489,Variable +NonExclusiveDeviationAlarmType_HighHighState_FalseState,10490,Variable +NonExclusiveDeviationAlarmType_HighState,10491,Variable +NonExclusiveDeviationAlarmType_HighState_Id,10492,Variable +NonExclusiveDeviationAlarmType_HighState_Name,10493,Variable +NonExclusiveDeviationAlarmType_HighState_Number,10494,Variable +NonExclusiveDeviationAlarmType_HighState_EffectiveDisplayName,10495,Variable +NonExclusiveDeviationAlarmType_HighState_TransitionTime,10496,Variable +NonExclusiveDeviationAlarmType_HighState_EffectiveTransitionTime,10497,Variable +NonExclusiveDeviationAlarmType_HighState_TrueState,10498,Variable +NonExclusiveDeviationAlarmType_HighState_FalseState,10499,Variable +NonExclusiveDeviationAlarmType_LowState,10500,Variable +NonExclusiveDeviationAlarmType_LowState_Id,10501,Variable +NonExclusiveDeviationAlarmType_LowState_Name,10502,Variable +NonExclusiveDeviationAlarmType_LowState_Number,10503,Variable +NonExclusiveDeviationAlarmType_LowState_EffectiveDisplayName,10504,Variable +NonExclusiveDeviationAlarmType_LowState_TransitionTime,10505,Variable +NonExclusiveDeviationAlarmType_LowState_EffectiveTransitionTime,10506,Variable +NonExclusiveDeviationAlarmType_LowState_TrueState,10507,Variable +NonExclusiveDeviationAlarmType_LowState_FalseState,10508,Variable +NonExclusiveDeviationAlarmType_LowLowState,10509,Variable +NonExclusiveDeviationAlarmType_LowLowState_Id,10510,Variable +NonExclusiveDeviationAlarmType_LowLowState_Name,10511,Variable +NonExclusiveDeviationAlarmType_LowLowState_Number,10512,Variable +NonExclusiveDeviationAlarmType_LowLowState_EffectiveDisplayName,10513,Variable +NonExclusiveDeviationAlarmType_LowLowState_TransitionTime,10514,Variable +NonExclusiveDeviationAlarmType_LowLowState_EffectiveTransitionTime,10515,Variable +NonExclusiveDeviationAlarmType_LowLowState_TrueState,10516,Variable +NonExclusiveDeviationAlarmType_LowLowState_FalseState,10517,Variable +NonExclusiveDeviationAlarmType_HighHighLimit,10518,Variable +NonExclusiveDeviationAlarmType_HighLimit,10519,Variable +NonExclusiveDeviationAlarmType_LowLimit,10520,Variable +NonExclusiveDeviationAlarmType_LowLowLimit,10521,Variable +NonExclusiveDeviationAlarmType_SetpointNode,10522,Variable +DiscreteAlarmType,10523,ObjectType +DiscreteAlarmType_EventId,10524,Variable +DiscreteAlarmType_EventType,10525,Variable +DiscreteAlarmType_SourceNode,10526,Variable +DiscreteAlarmType_SourceName,10527,Variable +DiscreteAlarmType_Time,10528,Variable +DiscreteAlarmType_ReceiveTime,10529,Variable +DiscreteAlarmType_LocalTime,10530,Variable +DiscreteAlarmType_Message,10531,Variable +DiscreteAlarmType_Severity,10532,Variable +DiscreteAlarmType_ConditionName,10533,Variable +DiscreteAlarmType_BranchId,10534,Variable +DiscreteAlarmType_Retain,10535,Variable +DiscreteAlarmType_EnabledState,10536,Variable +DiscreteAlarmType_EnabledState_Id,10537,Variable +DiscreteAlarmType_EnabledState_Name,10538,Variable +DiscreteAlarmType_EnabledState_Number,10539,Variable +DiscreteAlarmType_EnabledState_EffectiveDisplayName,10540,Variable +DiscreteAlarmType_EnabledState_TransitionTime,10541,Variable +DiscreteAlarmType_EnabledState_EffectiveTransitionTime,10542,Variable +DiscreteAlarmType_EnabledState_TrueState,10543,Variable +DiscreteAlarmType_EnabledState_FalseState,10544,Variable +DiscreteAlarmType_Quality,10545,Variable +DiscreteAlarmType_Quality_SourceTimestamp,10546,Variable +DiscreteAlarmType_LastSeverity,10547,Variable +DiscreteAlarmType_LastSeverity_SourceTimestamp,10548,Variable +DiscreteAlarmType_Comment,10549,Variable +DiscreteAlarmType_Comment_SourceTimestamp,10550,Variable +DiscreteAlarmType_ClientUserId,10551,Variable +DiscreteAlarmType_Enable,10552,Method +DiscreteAlarmType_Disable,10553,Method +DiscreteAlarmType_AddComment,10554,Method +DiscreteAlarmType_AddComment_InputArguments,10555,Variable +DiscreteAlarmType_ConditionRefresh,10556,Method +DiscreteAlarmType_ConditionRefresh_InputArguments,10557,Variable +DiscreteAlarmType_AckedState,10558,Variable +DiscreteAlarmType_AckedState_Id,10559,Variable +DiscreteAlarmType_AckedState_Name,10560,Variable +DiscreteAlarmType_AckedState_Number,10561,Variable +DiscreteAlarmType_AckedState_EffectiveDisplayName,10562,Variable +DiscreteAlarmType_AckedState_TransitionTime,10563,Variable +DiscreteAlarmType_AckedState_EffectiveTransitionTime,10564,Variable +DiscreteAlarmType_AckedState_TrueState,10565,Variable +DiscreteAlarmType_AckedState_FalseState,10566,Variable +DiscreteAlarmType_ConfirmedState,10567,Variable +DiscreteAlarmType_ConfirmedState_Id,10568,Variable +DiscreteAlarmType_ConfirmedState_Name,10569,Variable +DiscreteAlarmType_ConfirmedState_Number,10570,Variable +DiscreteAlarmType_ConfirmedState_EffectiveDisplayName,10571,Variable +DiscreteAlarmType_ConfirmedState_TransitionTime,10572,Variable +DiscreteAlarmType_ConfirmedState_EffectiveTransitionTime,10573,Variable +DiscreteAlarmType_ConfirmedState_TrueState,10574,Variable +DiscreteAlarmType_ConfirmedState_FalseState,10575,Variable +DiscreteAlarmType_Acknowledge,10576,Method +DiscreteAlarmType_Acknowledge_InputArguments,10577,Variable +DiscreteAlarmType_Confirm,10578,Method +DiscreteAlarmType_Confirm_InputArguments,10579,Variable +DiscreteAlarmType_ActiveState,10580,Variable +DiscreteAlarmType_ActiveState_Id,10581,Variable +DiscreteAlarmType_ActiveState_Name,10582,Variable +DiscreteAlarmType_ActiveState_Number,10583,Variable +DiscreteAlarmType_ActiveState_EffectiveDisplayName,10584,Variable +DiscreteAlarmType_ActiveState_TransitionTime,10585,Variable +DiscreteAlarmType_ActiveState_EffectiveTransitionTime,10586,Variable +DiscreteAlarmType_ActiveState_TrueState,10587,Variable +DiscreteAlarmType_ActiveState_FalseState,10588,Variable +DiscreteAlarmType_SuppressedState,10589,Variable +DiscreteAlarmType_SuppressedState_Id,10590,Variable +DiscreteAlarmType_SuppressedState_Name,10591,Variable +DiscreteAlarmType_SuppressedState_Number,10592,Variable +DiscreteAlarmType_SuppressedState_EffectiveDisplayName,10593,Variable +DiscreteAlarmType_SuppressedState_TransitionTime,10594,Variable +DiscreteAlarmType_SuppressedState_EffectiveTransitionTime,10595,Variable +DiscreteAlarmType_SuppressedState_TrueState,10596,Variable +DiscreteAlarmType_SuppressedState_FalseState,10597,Variable +DiscreteAlarmType_ShelvingState,10598,Object +DiscreteAlarmType_ShelvingState_CurrentState,10599,Variable +DiscreteAlarmType_ShelvingState_CurrentState_Id,10600,Variable +DiscreteAlarmType_ShelvingState_CurrentState_Name,10601,Variable +DiscreteAlarmType_ShelvingState_CurrentState_Number,10602,Variable +DiscreteAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10603,Variable +DiscreteAlarmType_ShelvingState_LastTransition,10604,Variable +DiscreteAlarmType_ShelvingState_LastTransition_Id,10605,Variable +DiscreteAlarmType_ShelvingState_LastTransition_Name,10606,Variable +DiscreteAlarmType_ShelvingState_LastTransition_Number,10607,Variable +DiscreteAlarmType_ShelvingState_LastTransition_TransitionTime,10608,Variable +DiscreteAlarmType_ShelvingState_UnshelveTime,10609,Variable +DiscreteAlarmType_ShelvingState_Unshelve,10631,Method +DiscreteAlarmType_ShelvingState_OneShotShelve,10632,Method +DiscreteAlarmType_ShelvingState_TimedShelve,10633,Method +DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments,10634,Variable +DiscreteAlarmType_SuppressedOrShelved,10635,Variable +DiscreteAlarmType_MaxTimeShelved,10636,Variable +OffNormalAlarmType,10637,ObjectType +OffNormalAlarmType_EventId,10638,Variable +OffNormalAlarmType_EventType,10639,Variable +OffNormalAlarmType_SourceNode,10640,Variable +OffNormalAlarmType_SourceName,10641,Variable +OffNormalAlarmType_Time,10642,Variable +OffNormalAlarmType_ReceiveTime,10643,Variable +OffNormalAlarmType_LocalTime,10644,Variable +OffNormalAlarmType_Message,10645,Variable +OffNormalAlarmType_Severity,10646,Variable +OffNormalAlarmType_ConditionName,10647,Variable +OffNormalAlarmType_BranchId,10648,Variable +OffNormalAlarmType_Retain,10649,Variable +OffNormalAlarmType_EnabledState,10650,Variable +OffNormalAlarmType_EnabledState_Id,10651,Variable +OffNormalAlarmType_EnabledState_Name,10652,Variable +OffNormalAlarmType_EnabledState_Number,10653,Variable +OffNormalAlarmType_EnabledState_EffectiveDisplayName,10654,Variable +OffNormalAlarmType_EnabledState_TransitionTime,10655,Variable +OffNormalAlarmType_EnabledState_EffectiveTransitionTime,10656,Variable +OffNormalAlarmType_EnabledState_TrueState,10657,Variable +OffNormalAlarmType_EnabledState_FalseState,10658,Variable +OffNormalAlarmType_Quality,10659,Variable +OffNormalAlarmType_Quality_SourceTimestamp,10660,Variable +OffNormalAlarmType_LastSeverity,10661,Variable +OffNormalAlarmType_LastSeverity_SourceTimestamp,10662,Variable +OffNormalAlarmType_Comment,10663,Variable +OffNormalAlarmType_Comment_SourceTimestamp,10664,Variable +OffNormalAlarmType_ClientUserId,10665,Variable +OffNormalAlarmType_Enable,10666,Method +OffNormalAlarmType_Disable,10667,Method +OffNormalAlarmType_AddComment,10668,Method +OffNormalAlarmType_AddComment_InputArguments,10669,Variable +OffNormalAlarmType_ConditionRefresh,10670,Method +OffNormalAlarmType_ConditionRefresh_InputArguments,10671,Variable +OffNormalAlarmType_AckedState,10672,Variable +OffNormalAlarmType_AckedState_Id,10673,Variable +OffNormalAlarmType_AckedState_Name,10674,Variable +OffNormalAlarmType_AckedState_Number,10675,Variable +OffNormalAlarmType_AckedState_EffectiveDisplayName,10676,Variable +OffNormalAlarmType_AckedState_TransitionTime,10677,Variable +OffNormalAlarmType_AckedState_EffectiveTransitionTime,10678,Variable +OffNormalAlarmType_AckedState_TrueState,10679,Variable +OffNormalAlarmType_AckedState_FalseState,10680,Variable +OffNormalAlarmType_ConfirmedState,10681,Variable +OffNormalAlarmType_ConfirmedState_Id,10682,Variable +OffNormalAlarmType_ConfirmedState_Name,10683,Variable +OffNormalAlarmType_ConfirmedState_Number,10684,Variable +OffNormalAlarmType_ConfirmedState_EffectiveDisplayName,10685,Variable +OffNormalAlarmType_ConfirmedState_TransitionTime,10686,Variable +OffNormalAlarmType_ConfirmedState_EffectiveTransitionTime,10687,Variable +OffNormalAlarmType_ConfirmedState_TrueState,10688,Variable +OffNormalAlarmType_ConfirmedState_FalseState,10689,Variable +OffNormalAlarmType_Acknowledge,10690,Method +OffNormalAlarmType_Acknowledge_InputArguments,10691,Variable +OffNormalAlarmType_Confirm,10692,Method +OffNormalAlarmType_Confirm_InputArguments,10693,Variable +OffNormalAlarmType_ActiveState,10694,Variable +OffNormalAlarmType_ActiveState_Id,10695,Variable +OffNormalAlarmType_ActiveState_Name,10696,Variable +OffNormalAlarmType_ActiveState_Number,10697,Variable +OffNormalAlarmType_ActiveState_EffectiveDisplayName,10698,Variable +OffNormalAlarmType_ActiveState_TransitionTime,10699,Variable +OffNormalAlarmType_ActiveState_EffectiveTransitionTime,10700,Variable +OffNormalAlarmType_ActiveState_TrueState,10701,Variable +OffNormalAlarmType_ActiveState_FalseState,10702,Variable +OffNormalAlarmType_SuppressedState,10703,Variable +OffNormalAlarmType_SuppressedState_Id,10704,Variable +OffNormalAlarmType_SuppressedState_Name,10705,Variable +OffNormalAlarmType_SuppressedState_Number,10706,Variable +OffNormalAlarmType_SuppressedState_EffectiveDisplayName,10707,Variable +OffNormalAlarmType_SuppressedState_TransitionTime,10708,Variable +OffNormalAlarmType_SuppressedState_EffectiveTransitionTime,10709,Variable +OffNormalAlarmType_SuppressedState_TrueState,10710,Variable +OffNormalAlarmType_SuppressedState_FalseState,10711,Variable +OffNormalAlarmType_ShelvingState,10712,Object +OffNormalAlarmType_ShelvingState_CurrentState,10713,Variable +OffNormalAlarmType_ShelvingState_CurrentState_Id,10714,Variable +OffNormalAlarmType_ShelvingState_CurrentState_Name,10715,Variable +OffNormalAlarmType_ShelvingState_CurrentState_Number,10716,Variable +OffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10717,Variable +OffNormalAlarmType_ShelvingState_LastTransition,10718,Variable +OffNormalAlarmType_ShelvingState_LastTransition_Id,10719,Variable +OffNormalAlarmType_ShelvingState_LastTransition_Name,10720,Variable +OffNormalAlarmType_ShelvingState_LastTransition_Number,10721,Variable +OffNormalAlarmType_ShelvingState_LastTransition_TransitionTime,10722,Variable +OffNormalAlarmType_ShelvingState_UnshelveTime,10723,Variable +OffNormalAlarmType_ShelvingState_Unshelve,10745,Method +OffNormalAlarmType_ShelvingState_OneShotShelve,10746,Method +OffNormalAlarmType_ShelvingState_TimedShelve,10747,Method +OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments,10748,Variable +OffNormalAlarmType_SuppressedOrShelved,10749,Variable +OffNormalAlarmType_MaxTimeShelved,10750,Variable +TripAlarmType,10751,ObjectType +TripAlarmType_EventId,10752,Variable +TripAlarmType_EventType,10753,Variable +TripAlarmType_SourceNode,10754,Variable +TripAlarmType_SourceName,10755,Variable +TripAlarmType_Time,10756,Variable +TripAlarmType_ReceiveTime,10757,Variable +TripAlarmType_LocalTime,10758,Variable +TripAlarmType_Message,10759,Variable +TripAlarmType_Severity,10760,Variable +TripAlarmType_ConditionName,10761,Variable +TripAlarmType_BranchId,10762,Variable +TripAlarmType_Retain,10763,Variable +TripAlarmType_EnabledState,10764,Variable +TripAlarmType_EnabledState_Id,10765,Variable +TripAlarmType_EnabledState_Name,10766,Variable +TripAlarmType_EnabledState_Number,10767,Variable +TripAlarmType_EnabledState_EffectiveDisplayName,10768,Variable +TripAlarmType_EnabledState_TransitionTime,10769,Variable +TripAlarmType_EnabledState_EffectiveTransitionTime,10770,Variable +TripAlarmType_EnabledState_TrueState,10771,Variable +TripAlarmType_EnabledState_FalseState,10772,Variable +TripAlarmType_Quality,10773,Variable +TripAlarmType_Quality_SourceTimestamp,10774,Variable +TripAlarmType_LastSeverity,10775,Variable +TripAlarmType_LastSeverity_SourceTimestamp,10776,Variable +TripAlarmType_Comment,10777,Variable +TripAlarmType_Comment_SourceTimestamp,10778,Variable +TripAlarmType_ClientUserId,10779,Variable +TripAlarmType_Enable,10780,Method +TripAlarmType_Disable,10781,Method +TripAlarmType_AddComment,10782,Method +TripAlarmType_AddComment_InputArguments,10783,Variable +TripAlarmType_ConditionRefresh,10784,Method +TripAlarmType_ConditionRefresh_InputArguments,10785,Variable +TripAlarmType_AckedState,10786,Variable +TripAlarmType_AckedState_Id,10787,Variable +TripAlarmType_AckedState_Name,10788,Variable +TripAlarmType_AckedState_Number,10789,Variable +TripAlarmType_AckedState_EffectiveDisplayName,10790,Variable +TripAlarmType_AckedState_TransitionTime,10791,Variable +TripAlarmType_AckedState_EffectiveTransitionTime,10792,Variable +TripAlarmType_AckedState_TrueState,10793,Variable +TripAlarmType_AckedState_FalseState,10794,Variable +TripAlarmType_ConfirmedState,10795,Variable +TripAlarmType_ConfirmedState_Id,10796,Variable +TripAlarmType_ConfirmedState_Name,10797,Variable +TripAlarmType_ConfirmedState_Number,10798,Variable +TripAlarmType_ConfirmedState_EffectiveDisplayName,10799,Variable +TripAlarmType_ConfirmedState_TransitionTime,10800,Variable +TripAlarmType_ConfirmedState_EffectiveTransitionTime,10801,Variable +TripAlarmType_ConfirmedState_TrueState,10802,Variable +TripAlarmType_ConfirmedState_FalseState,10803,Variable +TripAlarmType_Acknowledge,10804,Method +TripAlarmType_Acknowledge_InputArguments,10805,Variable +TripAlarmType_Confirm,10806,Method +TripAlarmType_Confirm_InputArguments,10807,Variable +TripAlarmType_ActiveState,10808,Variable +TripAlarmType_ActiveState_Id,10809,Variable +TripAlarmType_ActiveState_Name,10810,Variable +TripAlarmType_ActiveState_Number,10811,Variable +TripAlarmType_ActiveState_EffectiveDisplayName,10812,Variable +TripAlarmType_ActiveState_TransitionTime,10813,Variable +TripAlarmType_ActiveState_EffectiveTransitionTime,10814,Variable +TripAlarmType_ActiveState_TrueState,10815,Variable +TripAlarmType_ActiveState_FalseState,10816,Variable +TripAlarmType_SuppressedState,10817,Variable +TripAlarmType_SuppressedState_Id,10818,Variable +TripAlarmType_SuppressedState_Name,10819,Variable +TripAlarmType_SuppressedState_Number,10820,Variable +TripAlarmType_SuppressedState_EffectiveDisplayName,10821,Variable +TripAlarmType_SuppressedState_TransitionTime,10822,Variable +TripAlarmType_SuppressedState_EffectiveTransitionTime,10823,Variable +TripAlarmType_SuppressedState_TrueState,10824,Variable +TripAlarmType_SuppressedState_FalseState,10825,Variable +TripAlarmType_ShelvingState,10826,Object +TripAlarmType_ShelvingState_CurrentState,10827,Variable +TripAlarmType_ShelvingState_CurrentState_Id,10828,Variable +TripAlarmType_ShelvingState_CurrentState_Name,10829,Variable +TripAlarmType_ShelvingState_CurrentState_Number,10830,Variable +TripAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10831,Variable +TripAlarmType_ShelvingState_LastTransition,10832,Variable +TripAlarmType_ShelvingState_LastTransition_Id,10833,Variable +TripAlarmType_ShelvingState_LastTransition_Name,10834,Variable +TripAlarmType_ShelvingState_LastTransition_Number,10835,Variable +TripAlarmType_ShelvingState_LastTransition_TransitionTime,10836,Variable +TripAlarmType_ShelvingState_UnshelveTime,10837,Variable +TripAlarmType_ShelvingState_Unshelve,10859,Method +TripAlarmType_ShelvingState_OneShotShelve,10860,Method +TripAlarmType_ShelvingState_TimedShelve,10861,Method +TripAlarmType_ShelvingState_TimedShelve_InputArguments,10862,Variable +TripAlarmType_SuppressedOrShelved,10863,Variable +TripAlarmType_MaxTimeShelved,10864,Variable +AuditConditionShelvingEventType,11093,ObjectType +AuditConditionShelvingEventType_EventId,11094,Variable +AuditConditionShelvingEventType_EventType,11095,Variable +AuditConditionShelvingEventType_SourceNode,11096,Variable +AuditConditionShelvingEventType_SourceName,11097,Variable +AuditConditionShelvingEventType_Time,11098,Variable +AuditConditionShelvingEventType_ReceiveTime,11099,Variable +AuditConditionShelvingEventType_LocalTime,11100,Variable +AuditConditionShelvingEventType_Message,11101,Variable +AuditConditionShelvingEventType_Severity,11102,Variable +AuditConditionShelvingEventType_ActionTimeStamp,11103,Variable +AuditConditionShelvingEventType_Status,11104,Variable +AuditConditionShelvingEventType_ServerId,11105,Variable +AuditConditionShelvingEventType_ClientAuditEntryId,11106,Variable +AuditConditionShelvingEventType_ClientUserId,11107,Variable +AuditConditionShelvingEventType_MethodId,11108,Variable +AuditConditionShelvingEventType_InputArguments,11109,Variable +TwoStateVariableType_TrueState,11110,Variable +TwoStateVariableType_FalseState,11111,Variable +ConditionType_ConditionClassId,11112,Variable +ConditionType_ConditionClassName,11113,Variable +DialogConditionType_ConditionClassId,11114,Variable +DialogConditionType_ConditionClassName,11115,Variable +AcknowledgeableConditionType_ConditionClassId,11116,Variable +AcknowledgeableConditionType_ConditionClassName,11117,Variable +AlarmConditionType_ConditionClassId,11118,Variable +AlarmConditionType_ConditionClassName,11119,Variable +AlarmConditionType_InputNode,11120,Variable +LimitAlarmType_ConditionClassId,11121,Variable +LimitAlarmType_ConditionClassName,11122,Variable +LimitAlarmType_InputNode,11123,Variable +LimitAlarmType_HighHighLimit,11124,Variable +LimitAlarmType_HighLimit,11125,Variable +LimitAlarmType_LowLimit,11126,Variable +LimitAlarmType_LowLowLimit,11127,Variable +ExclusiveLimitAlarmType_ConditionClassId,11128,Variable +ExclusiveLimitAlarmType_ConditionClassName,11129,Variable +ExclusiveLimitAlarmType_InputNode,11130,Variable +ExclusiveLevelAlarmType_ConditionClassId,11131,Variable +ExclusiveLevelAlarmType_ConditionClassName,11132,Variable +ExclusiveLevelAlarmType_InputNode,11133,Variable +ExclusiveRateOfChangeAlarmType_ConditionClassId,11134,Variable +ExclusiveRateOfChangeAlarmType_ConditionClassName,11135,Variable +ExclusiveRateOfChangeAlarmType_InputNode,11136,Variable +ExclusiveDeviationAlarmType_ConditionClassId,11137,Variable +ExclusiveDeviationAlarmType_ConditionClassName,11138,Variable +ExclusiveDeviationAlarmType_InputNode,11139,Variable +NonExclusiveLimitAlarmType_ConditionClassId,11140,Variable +NonExclusiveLimitAlarmType_ConditionClassName,11141,Variable +NonExclusiveLimitAlarmType_InputNode,11142,Variable +NonExclusiveLevelAlarmType_ConditionClassId,11143,Variable +NonExclusiveLevelAlarmType_ConditionClassName,11144,Variable +NonExclusiveLevelAlarmType_InputNode,11145,Variable +NonExclusiveRateOfChangeAlarmType_ConditionClassId,11146,Variable +NonExclusiveRateOfChangeAlarmType_ConditionClassName,11147,Variable +NonExclusiveRateOfChangeAlarmType_InputNode,11148,Variable +NonExclusiveDeviationAlarmType_ConditionClassId,11149,Variable +NonExclusiveDeviationAlarmType_ConditionClassName,11150,Variable +NonExclusiveDeviationAlarmType_InputNode,11151,Variable +DiscreteAlarmType_ConditionClassId,11152,Variable +DiscreteAlarmType_ConditionClassName,11153,Variable +DiscreteAlarmType_InputNode,11154,Variable +OffNormalAlarmType_ConditionClassId,11155,Variable +OffNormalAlarmType_ConditionClassName,11156,Variable +OffNormalAlarmType_InputNode,11157,Variable +OffNormalAlarmType_NormalState,11158,Variable +TripAlarmType_ConditionClassId,11159,Variable +TripAlarmType_ConditionClassName,11160,Variable +TripAlarmType_InputNode,11161,Variable +TripAlarmType_NormalState,11162,Variable +BaseConditionClassType,11163,ObjectType +ProcessConditionClassType,11164,ObjectType +MaintenanceConditionClassType,11165,ObjectType +SystemConditionClassType,11166,ObjectType +HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad,11168,Variable +HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad,11169,Variable +HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood,11170,Variable +HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation,11171,Variable +HistoryServerCapabilitiesType_AggregateFunctions,11172,Object +AggregateConfigurationType,11187,ObjectType +AggregateConfigurationType_TreatUncertainAsBad,11188,Variable +AggregateConfigurationType_PercentDataBad,11189,Variable +AggregateConfigurationType_PercentDataGood,11190,Variable +AggregateConfigurationType_UseSlopedExtrapolation,11191,Variable +HistoryServerCapabilities,11192,Object +HistoryServerCapabilities_AccessHistoryDataCapability,11193,Variable +HistoryServerCapabilities_InsertDataCapability,11196,Variable +HistoryServerCapabilities_ReplaceDataCapability,11197,Variable +HistoryServerCapabilities_UpdateDataCapability,11198,Variable +HistoryServerCapabilities_DeleteRawCapability,11199,Variable +HistoryServerCapabilities_DeleteAtTimeCapability,11200,Variable +HistoryServerCapabilities_AggregateFunctions,11201,Object +HAConfiguration,11202,Object +HAConfiguration_AggregateConfiguration,11203,Object +HAConfiguration_AggregateConfiguration_TreatUncertainAsBad,11204,Variable +HAConfiguration_AggregateConfiguration_PercentDataBad,11205,Variable +HAConfiguration_AggregateConfiguration_PercentDataGood,11206,Variable +HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation,11207,Variable +HAConfiguration_Stepped,11208,Variable +HAConfiguration_Definition,11209,Variable +HAConfiguration_MaxTimeInterval,11210,Variable +HAConfiguration_MinTimeInterval,11211,Variable +HAConfiguration_ExceptionDeviation,11212,Variable +HAConfiguration_ExceptionDeviationFormat,11213,Variable +Annotations,11214,Variable +HistoricalEventFilter,11215,Variable +ModificationInfo,11216,DataType +HistoryModifiedData,11217,DataType +ModificationInfo_Encoding_DefaultXml,11218,Object +HistoryModifiedData_Encoding_DefaultXml,11219,Object +ModificationInfo_Encoding_DefaultBinary,11226,Object +HistoryModifiedData_Encoding_DefaultBinary,11227,Object +HistoryUpdateType,11234,DataType +MultiStateValueDiscreteType,11238,VariableType +MultiStateValueDiscreteType_Definition,11239,Variable +MultiStateValueDiscreteType_ValuePrecision,11240,Variable +MultiStateValueDiscreteType_EnumValues,11241,Variable +HistoryServerCapabilities_AccessHistoryEventsCapability,11242,Variable +HistoryServerCapabilitiesType_MaxReturnDataValues,11268,Variable +HistoryServerCapabilitiesType_MaxReturnEventValues,11269,Variable +HistoryServerCapabilitiesType_InsertAnnotationCapability,11270,Variable +HistoryServerCapabilities_MaxReturnDataValues,11273,Variable +HistoryServerCapabilities_MaxReturnEventValues,11274,Variable +HistoryServerCapabilities_InsertAnnotationCapability,11275,Variable +HistoryServerCapabilitiesType_InsertEventCapability,11278,Variable +HistoryServerCapabilitiesType_ReplaceEventCapability,11279,Variable +HistoryServerCapabilitiesType_UpdateEventCapability,11280,Variable +HistoryServerCapabilities_InsertEventCapability,11281,Variable +HistoryServerCapabilities_ReplaceEventCapability,11282,Variable +HistoryServerCapabilities_UpdateEventCapability,11283,Variable +AggregateFunction_TimeAverage2,11285,Object +AggregateFunction_Minimum2,11286,Object +AggregateFunction_Maximum2,11287,Object +AggregateFunction_Range2,11288,Object +AggregateFunction_WorstQuality2,11292,Object +PerformUpdateType,11293,DataType +UpdateStructureDataDetails,11295,DataType +UpdateStructureDataDetails_Encoding_DefaultXml,11296,Object +UpdateStructureDataDetails_Encoding_DefaultBinary,11300,Object +AggregateFunction_Total2,11304,Object +AggregateFunction_MinimumActualTime2,11305,Object +AggregateFunction_MaximumActualTime2,11306,Object +AggregateFunction_DurationInStateZero,11307,Object +AggregateFunction_DurationInStateNonZero,11308,Object +Server_ServerRedundancy_CurrentServerId,11312,Variable +Server_ServerRedundancy_RedundantServerArray,11313,Variable +Server_ServerRedundancy_ServerUriArray,11314,Variable +ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber,11322,Variable +ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber,11323,Variable +ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber,11324,Variable +ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber,11325,Variable +ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber,11326,Variable +ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber,11327,Variable +ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber,11340,Variable +ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber,11341,Variable +ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber,11342,Variable +ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber,11343,Variable +AggregateFunction_StandardDeviationSample,11426,Object +AggregateFunction_StandardDeviationPopulation,11427,Object +AggregateFunction_VarianceSample,11428,Object +AggregateFunction_VariancePopulation,11429,Object +EnumStrings,11432,Variable +ValueAsText,11433,Variable +ProgressEventType,11436,ObjectType +ProgressEventType_EventId,11437,Variable +ProgressEventType_EventType,11438,Variable +ProgressEventType_SourceNode,11439,Variable +ProgressEventType_SourceName,11440,Variable +ProgressEventType_Time,11441,Variable +ProgressEventType_ReceiveTime,11442,Variable +ProgressEventType_LocalTime,11443,Variable +ProgressEventType_Message,11444,Variable +ProgressEventType_Severity,11445,Variable +SystemStatusChangeEventType,11446,ObjectType +SystemStatusChangeEventType_EventId,11447,Variable +SystemStatusChangeEventType_EventType,11448,Variable +SystemStatusChangeEventType_SourceNode,11449,Variable +SystemStatusChangeEventType_SourceName,11450,Variable +SystemStatusChangeEventType_Time,11451,Variable +SystemStatusChangeEventType_ReceiveTime,11452,Variable +SystemStatusChangeEventType_LocalTime,11453,Variable +SystemStatusChangeEventType_Message,11454,Variable +SystemStatusChangeEventType_Severity,11455,Variable +TransitionVariableType_EffectiveTransitionTime,11456,Variable +FiniteTransitionVariableType_EffectiveTransitionTime,11457,Variable +StateMachineType_LastTransition_EffectiveTransitionTime,11458,Variable +FiniteStateMachineType_LastTransition_EffectiveTransitionTime,11459,Variable +TransitionEventType_Transition_EffectiveTransitionTime,11460,Variable +MultiStateValueDiscreteType_ValueAsText,11461,Variable +ProgramTransitionEventType_Transition_EffectiveTransitionTime,11462,Variable +ProgramTransitionAuditEventType_Transition_EffectiveTransitionTime,11463,Variable +ProgramStateMachineType_LastTransition_EffectiveTransitionTime,11464,Variable +ShelvedStateMachineType_LastTransition_EffectiveTransitionTime,11465,Variable +AlarmConditionType_ShelvingState_LastTransition_EffectiveTransitionTime,11466,Variable +LimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11467,Variable +ExclusiveLimitStateMachineType_LastTransition_EffectiveTransitionTime,11468,Variable +ExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11469,Variable +ExclusiveLimitAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11470,Variable +ExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11471,Variable +ExclusiveLevelAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11472,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11473,Variable +ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11474,Variable +ExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11475,Variable +ExclusiveDeviationAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11476,Variable +NonExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11477,Variable +NonExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11478,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11479,Variable +NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11480,Variable +DiscreteAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11481,Variable +OffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11482,Variable +TripAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11483,Variable +AuditActivateSessionEventType_SecureChannelId,11485,Variable +OptionSetType,11487,VariableType +OptionSetType_OptionSetValues,11488,Variable +ServerType_GetMonitoredItems,11489,Method +ServerType_GetMonitoredItems_InputArguments,11490,Variable +ServerType_GetMonitoredItems_OutputArguments,11491,Variable +Server_GetMonitoredItems,11492,Method +Server_GetMonitoredItems_InputArguments,11493,Variable +Server_GetMonitoredItems_OutputArguments,11494,Variable +GetMonitoredItemsMethodType,11495,Method +GetMonitoredItemsMethodType_InputArguments,11496,Variable +GetMonitoredItemsMethodType_OutputArguments,11497,Variable +MaxStringLength,11498,Variable +HistoricalDataConfigurationType_StartOfArchive,11499,Variable +HistoricalDataConfigurationType_StartOfOnlineArchive,11500,Variable +HistoryServerCapabilitiesType_DeleteEventCapability,11501,Variable +HistoryServerCapabilities_DeleteEventCapability,11502,Variable +HAConfiguration_StartOfArchive,11503,Variable +HAConfiguration_StartOfOnlineArchive,11504,Variable +AggregateFunction_StartBound,11505,Object +AggregateFunction_EndBound,11506,Object +AggregateFunction_DeltaBounds,11507,Object +ModellingRule_OptionalPlaceholder,11508,Object +ModellingRule_OptionalPlaceholder_NamingRule,11509,Variable +ModellingRule_MandatoryPlaceholder,11510,Object +ModellingRule_MandatoryPlaceholder_NamingRule,11511,Variable +MaxArrayLength,11512,Variable +EngineeringUnits,11513,Variable +ServerType_ServerCapabilities_MaxArrayLength,11514,Variable +ServerType_ServerCapabilities_MaxStringLength,11515,Variable +ServerType_ServerCapabilities_OperationLimits,11516,Object +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRead,11517,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerWrite,11519,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,11521,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,11522,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,11523,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11524,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,11525,Variable +ServerType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,11526,Variable +ServerType_Namespaces,11527,Object +ServerCapabilitiesType_MaxArrayLength,11549,Variable +ServerCapabilitiesType_MaxStringLength,11550,Variable +ServerCapabilitiesType_OperationLimits,11551,Object +ServerCapabilitiesType_OperationLimits_MaxNodesPerRead,11552,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerWrite,11554,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerMethodCall,11556,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerBrowse,11557,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerRegisterNodes,11558,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11559,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerNodeManagement,11560,Variable +ServerCapabilitiesType_OperationLimits_MaxMonitoredItemsPerCall,11561,Variable +ServerCapabilitiesType_VendorCapability_Placeholder,11562,Variable +OperationLimitsType,11564,ObjectType +OperationLimitsType_MaxNodesPerRead,11565,Variable +OperationLimitsType_MaxNodesPerWrite,11567,Variable +OperationLimitsType_MaxNodesPerMethodCall,11569,Variable +OperationLimitsType_MaxNodesPerBrowse,11570,Variable +OperationLimitsType_MaxNodesPerRegisterNodes,11571,Variable +OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds,11572,Variable +OperationLimitsType_MaxNodesPerNodeManagement,11573,Variable +OperationLimitsType_MaxMonitoredItemsPerCall,11574,Variable +FileType,11575,ObjectType +FileType_Size,11576,Variable +FileType_OpenCount,11579,Variable +FileType_Open,11580,Method +FileType_Open_InputArguments,11581,Variable +FileType_Open_OutputArguments,11582,Variable +FileType_Close,11583,Method +FileType_Close_InputArguments,11584,Variable +FileType_Read,11585,Method +FileType_Read_InputArguments,11586,Variable +FileType_Read_OutputArguments,11587,Variable +FileType_Write,11588,Method +FileType_Write_InputArguments,11589,Variable +FileType_GetPosition,11590,Method +FileType_GetPosition_InputArguments,11591,Variable +FileType_GetPosition_OutputArguments,11592,Variable +FileType_SetPosition,11593,Method +FileType_SetPosition_InputArguments,11594,Variable +AddressSpaceFileType,11595,ObjectType +AddressSpaceFileType_Size,11596,Variable +AddressSpaceFileType_OpenCount,11599,Variable +AddressSpaceFileType_Open,11600,Method +AddressSpaceFileType_Open_InputArguments,11601,Variable +AddressSpaceFileType_Open_OutputArguments,11602,Variable +AddressSpaceFileType_Close,11603,Method +AddressSpaceFileType_Close_InputArguments,11604,Variable +AddressSpaceFileType_Read,11605,Method +AddressSpaceFileType_Read_InputArguments,11606,Variable +AddressSpaceFileType_Read_OutputArguments,11607,Variable +AddressSpaceFileType_Write,11608,Method +AddressSpaceFileType_Write_InputArguments,11609,Variable +AddressSpaceFileType_GetPosition,11610,Method +AddressSpaceFileType_GetPosition_InputArguments,11611,Variable +AddressSpaceFileType_GetPosition_OutputArguments,11612,Variable +AddressSpaceFileType_SetPosition,11613,Method +AddressSpaceFileType_SetPosition_InputArguments,11614,Variable +AddressSpaceFileType_ExportNamespace,11615,Method +NamespaceMetadataType,11616,ObjectType +NamespaceMetadataType_NamespaceUri,11617,Variable +NamespaceMetadataType_NamespaceVersion,11618,Variable +NamespaceMetadataType_NamespacePublicationDate,11619,Variable +NamespaceMetadataType_IsNamespaceSubset,11620,Variable +NamespaceMetadataType_StaticNodeIdTypes,11621,Variable +NamespaceMetadataType_StaticNumericNodeIdRange,11622,Variable +NamespaceMetadataType_StaticStringNodeIdPattern,11623,Variable +NamespaceMetadataType_NamespaceFile,11624,Object +NamespaceMetadataType_NamespaceFile_Size,11625,Variable +NamespaceMetadataType_NamespaceFile_OpenCount,11628,Variable +NamespaceMetadataType_NamespaceFile_Open,11629,Method +NamespaceMetadataType_NamespaceFile_Open_InputArguments,11630,Variable +NamespaceMetadataType_NamespaceFile_Open_OutputArguments,11631,Variable +NamespaceMetadataType_NamespaceFile_Close,11632,Method +NamespaceMetadataType_NamespaceFile_Close_InputArguments,11633,Variable +NamespaceMetadataType_NamespaceFile_Read,11634,Method +NamespaceMetadataType_NamespaceFile_Read_InputArguments,11635,Variable +NamespaceMetadataType_NamespaceFile_Read_OutputArguments,11636,Variable +NamespaceMetadataType_NamespaceFile_Write,11637,Method +NamespaceMetadataType_NamespaceFile_Write_InputArguments,11638,Variable +NamespaceMetadataType_NamespaceFile_GetPosition,11639,Method +NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments,11640,Variable +NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments,11641,Variable +NamespaceMetadataType_NamespaceFile_SetPosition,11642,Method +NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments,11643,Variable +NamespaceMetadataType_NamespaceFile_ExportNamespace,11644,Method +NamespacesType,11645,ObjectType +NamespacesType_NamespaceIdentifier_Placeholder,11646,Object +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri,11647,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion,11648,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate,11649,Variable +NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset,11650,Variable +NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes,11651,Variable +NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange,11652,Variable +NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern,11653,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile,11654,Object +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size,11655,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount,11658,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open,11659,Method +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments,11660,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments,11661,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close,11662,Method +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments,11663,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read,11664,Method +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments,11665,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments,11666,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write,11667,Method +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments,11668,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition,11669,Method +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments,11670,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments,11671,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition,11672,Method +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments,11673,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_ExportNamespace,11674,Method +SystemStatusChangeEventType_SystemState,11696,Variable +SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount,11697,Variable +SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount,11698,Variable +SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount,11699,Variable +OptionSetType_BitMask,11701,Variable +Server_ServerCapabilities_MaxArrayLength,11702,Variable +Server_ServerCapabilities_MaxStringLength,11703,Variable +Server_ServerCapabilities_OperationLimits,11704,Object +Server_ServerCapabilities_OperationLimits_MaxNodesPerRead,11705,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite,11707,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,11709,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,11710,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,11711,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11712,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,11713,Variable +Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,11714,Variable +Server_Namespaces,11715,Object +BitFieldMaskDataType,11737,DataType +OpenMethodType,11738,Method +OpenMethodType_InputArguments,11739,Variable +OpenMethodType_OutputArguments,11740,Variable +CloseMethodType,11741,Method +CloseMethodType_InputArguments,11742,Variable +ReadMethodType,11743,Method +ReadMethodType_InputArguments,11744,Variable +ReadMethodType_OutputArguments,11745,Variable +WriteMethodType,11746,Method +WriteMethodType_InputArguments,11747,Variable +GetPositionMethodType,11748,Method +GetPositionMethodType_InputArguments,11749,Variable +GetPositionMethodType_OutputArguments,11750,Variable +SetPositionMethodType,11751,Method +SetPositionMethodType_InputArguments,11752,Variable +SystemOffNormalAlarmType,11753,ObjectType +SystemOffNormalAlarmType_EventId,11754,Variable +SystemOffNormalAlarmType_EventType,11755,Variable +SystemOffNormalAlarmType_SourceNode,11756,Variable +SystemOffNormalAlarmType_SourceName,11757,Variable +SystemOffNormalAlarmType_Time,11758,Variable +SystemOffNormalAlarmType_ReceiveTime,11759,Variable +SystemOffNormalAlarmType_LocalTime,11760,Variable +SystemOffNormalAlarmType_Message,11761,Variable +SystemOffNormalAlarmType_Severity,11762,Variable +SystemOffNormalAlarmType_ConditionClassId,11763,Variable +SystemOffNormalAlarmType_ConditionClassName,11764,Variable +SystemOffNormalAlarmType_ConditionName,11765,Variable +SystemOffNormalAlarmType_BranchId,11766,Variable +SystemOffNormalAlarmType_Retain,11767,Variable +SystemOffNormalAlarmType_EnabledState,11768,Variable +SystemOffNormalAlarmType_EnabledState_Id,11769,Variable +SystemOffNormalAlarmType_EnabledState_Name,11770,Variable +SystemOffNormalAlarmType_EnabledState_Number,11771,Variable +SystemOffNormalAlarmType_EnabledState_EffectiveDisplayName,11772,Variable +SystemOffNormalAlarmType_EnabledState_TransitionTime,11773,Variable +SystemOffNormalAlarmType_EnabledState_EffectiveTransitionTime,11774,Variable +SystemOffNormalAlarmType_EnabledState_TrueState,11775,Variable +SystemOffNormalAlarmType_EnabledState_FalseState,11776,Variable +SystemOffNormalAlarmType_Quality,11777,Variable +SystemOffNormalAlarmType_Quality_SourceTimestamp,11778,Variable +SystemOffNormalAlarmType_LastSeverity,11779,Variable +SystemOffNormalAlarmType_LastSeverity_SourceTimestamp,11780,Variable +SystemOffNormalAlarmType_Comment,11781,Variable +SystemOffNormalAlarmType_Comment_SourceTimestamp,11782,Variable +SystemOffNormalAlarmType_ClientUserId,11783,Variable +SystemOffNormalAlarmType_Disable,11784,Method +SystemOffNormalAlarmType_Enable,11785,Method +SystemOffNormalAlarmType_AddComment,11786,Method +SystemOffNormalAlarmType_AddComment_InputArguments,11787,Variable +SystemOffNormalAlarmType_ConditionRefresh,11788,Method +SystemOffNormalAlarmType_ConditionRefresh_InputArguments,11789,Variable +SystemOffNormalAlarmType_AckedState,11790,Variable +SystemOffNormalAlarmType_AckedState_Id,11791,Variable +SystemOffNormalAlarmType_AckedState_Name,11792,Variable +SystemOffNormalAlarmType_AckedState_Number,11793,Variable +SystemOffNormalAlarmType_AckedState_EffectiveDisplayName,11794,Variable +SystemOffNormalAlarmType_AckedState_TransitionTime,11795,Variable +SystemOffNormalAlarmType_AckedState_EffectiveTransitionTime,11796,Variable +SystemOffNormalAlarmType_AckedState_TrueState,11797,Variable +SystemOffNormalAlarmType_AckedState_FalseState,11798,Variable +SystemOffNormalAlarmType_ConfirmedState,11799,Variable +SystemOffNormalAlarmType_ConfirmedState_Id,11800,Variable +SystemOffNormalAlarmType_ConfirmedState_Name,11801,Variable +SystemOffNormalAlarmType_ConfirmedState_Number,11802,Variable +SystemOffNormalAlarmType_ConfirmedState_EffectiveDisplayName,11803,Variable +SystemOffNormalAlarmType_ConfirmedState_TransitionTime,11804,Variable +SystemOffNormalAlarmType_ConfirmedState_EffectiveTransitionTime,11805,Variable +SystemOffNormalAlarmType_ConfirmedState_TrueState,11806,Variable +SystemOffNormalAlarmType_ConfirmedState_FalseState,11807,Variable +SystemOffNormalAlarmType_Acknowledge,11808,Method +SystemOffNormalAlarmType_Acknowledge_InputArguments,11809,Variable +SystemOffNormalAlarmType_Confirm,11810,Method +SystemOffNormalAlarmType_Confirm_InputArguments,11811,Variable +SystemOffNormalAlarmType_ActiveState,11812,Variable +SystemOffNormalAlarmType_ActiveState_Id,11813,Variable +SystemOffNormalAlarmType_ActiveState_Name,11814,Variable +SystemOffNormalAlarmType_ActiveState_Number,11815,Variable +SystemOffNormalAlarmType_ActiveState_EffectiveDisplayName,11816,Variable +SystemOffNormalAlarmType_ActiveState_TransitionTime,11817,Variable +SystemOffNormalAlarmType_ActiveState_EffectiveTransitionTime,11818,Variable +SystemOffNormalAlarmType_ActiveState_TrueState,11819,Variable +SystemOffNormalAlarmType_ActiveState_FalseState,11820,Variable +SystemOffNormalAlarmType_InputNode,11821,Variable +SystemOffNormalAlarmType_SuppressedState,11822,Variable +SystemOffNormalAlarmType_SuppressedState_Id,11823,Variable +SystemOffNormalAlarmType_SuppressedState_Name,11824,Variable +SystemOffNormalAlarmType_SuppressedState_Number,11825,Variable +SystemOffNormalAlarmType_SuppressedState_EffectiveDisplayName,11826,Variable +SystemOffNormalAlarmType_SuppressedState_TransitionTime,11827,Variable +SystemOffNormalAlarmType_SuppressedState_EffectiveTransitionTime,11828,Variable +SystemOffNormalAlarmType_SuppressedState_TrueState,11829,Variable +SystemOffNormalAlarmType_SuppressedState_FalseState,11830,Variable +SystemOffNormalAlarmType_ShelvingState,11831,Object +SystemOffNormalAlarmType_ShelvingState_CurrentState,11832,Variable +SystemOffNormalAlarmType_ShelvingState_CurrentState_Id,11833,Variable +SystemOffNormalAlarmType_ShelvingState_CurrentState_Name,11834,Variable +SystemOffNormalAlarmType_ShelvingState_CurrentState_Number,11835,Variable +SystemOffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,11836,Variable +SystemOffNormalAlarmType_ShelvingState_LastTransition,11837,Variable +SystemOffNormalAlarmType_ShelvingState_LastTransition_Id,11838,Variable +SystemOffNormalAlarmType_ShelvingState_LastTransition_Name,11839,Variable +SystemOffNormalAlarmType_ShelvingState_LastTransition_Number,11840,Variable +SystemOffNormalAlarmType_ShelvingState_LastTransition_TransitionTime,11841,Variable +SystemOffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11842,Variable +SystemOffNormalAlarmType_ShelvingState_UnshelveTime,11843,Variable +SystemOffNormalAlarmType_ShelvingState_Unshelve,11844,Method +SystemOffNormalAlarmType_ShelvingState_OneShotShelve,11845,Method +SystemOffNormalAlarmType_ShelvingState_TimedShelve,11846,Method +SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments,11847,Variable +SystemOffNormalAlarmType_SuppressedOrShelved,11848,Variable +SystemOffNormalAlarmType_MaxTimeShelved,11849,Variable +SystemOffNormalAlarmType_NormalState,11850,Variable +AuditConditionCommentEventType_Comment,11851,Variable +AuditConditionRespondEventType_SelectedResponse,11852,Variable +AuditConditionAcknowledgeEventType_Comment,11853,Variable +AuditConditionConfirmEventType_Comment,11854,Variable +AuditConditionShelvingEventType_ShelvingTime,11855,Variable +AuditProgramTransitionEventType,11856,ObjectType +AuditProgramTransitionEventType_EventId,11857,Variable +AuditProgramTransitionEventType_EventType,11858,Variable +AuditProgramTransitionEventType_SourceNode,11859,Variable +AuditProgramTransitionEventType_SourceName,11860,Variable +AuditProgramTransitionEventType_Time,11861,Variable +AuditProgramTransitionEventType_ReceiveTime,11862,Variable +AuditProgramTransitionEventType_LocalTime,11863,Variable +AuditProgramTransitionEventType_Message,11864,Variable +AuditProgramTransitionEventType_Severity,11865,Variable +AuditProgramTransitionEventType_ActionTimeStamp,11866,Variable +AuditProgramTransitionEventType_Status,11867,Variable +AuditProgramTransitionEventType_ServerId,11868,Variable +AuditProgramTransitionEventType_ClientAuditEntryId,11869,Variable +AuditProgramTransitionEventType_ClientUserId,11870,Variable +AuditProgramTransitionEventType_MethodId,11871,Variable +AuditProgramTransitionEventType_InputArguments,11872,Variable +AuditProgramTransitionEventType_OldStateId,11873,Variable +AuditProgramTransitionEventType_NewStateId,11874,Variable +AuditProgramTransitionEventType_TransitionNumber,11875,Variable +HistoricalDataConfigurationType_AggregateFunctions,11876,Object +HAConfiguration_AggregateFunctions,11877,Object +NodeClass_EnumValues,11878,Variable +InstanceNode,11879,DataType +TypeNode,11880,DataType +NodeAttributesMask_EnumValues,11881,Variable +BrowseResultMask_EnumValues,11883,Variable +HistoryUpdateType_EnumValues,11884,Variable +PerformUpdateType_EnumValues,11885,Variable +InstanceNode_Encoding_DefaultXml,11887,Object +TypeNode_Encoding_DefaultXml,11888,Object +InstanceNode_Encoding_DefaultBinary,11889,Object +TypeNode_Encoding_DefaultBinary,11890,Object +SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount,11891,Variable +SessionDiagnosticsVariableType_UnauthorizedRequestCount,11892,Variable +OpenFileMode,11939,DataType +OpenFileMode_EnumValues,11940,Variable +ModelChangeStructureVerbMask,11941,DataType +ModelChangeStructureVerbMask_EnumValues,11942,Variable +EndpointUrlListDataType,11943,DataType +NetworkGroupDataType,11944,DataType +NonTransparentNetworkRedundancyType,11945,ObjectType +NonTransparentNetworkRedundancyType_RedundancySupport,11946,Variable +NonTransparentNetworkRedundancyType_ServerUriArray,11947,Variable +NonTransparentNetworkRedundancyType_ServerNetworkGroups,11948,Variable +EndpointUrlListDataType_Encoding_DefaultXml,11949,Object +NetworkGroupDataType_Encoding_DefaultXml,11950,Object +OpcUa_XmlSchema_EndpointUrlListDataType,11951,Variable +OpcUa_XmlSchema_EndpointUrlListDataType_DataTypeVersion,11952,Variable +OpcUa_XmlSchema_EndpointUrlListDataType_DictionaryFragment,11953,Variable +OpcUa_XmlSchema_NetworkGroupDataType,11954,Variable +OpcUa_XmlSchema_NetworkGroupDataType_DataTypeVersion,11955,Variable +OpcUa_XmlSchema_NetworkGroupDataType_DictionaryFragment,11956,Variable +EndpointUrlListDataType_Encoding_DefaultBinary,11957,Object +NetworkGroupDataType_Encoding_DefaultBinary,11958,Object +OpcUa_BinarySchema_EndpointUrlListDataType,11959,Variable +OpcUa_BinarySchema_EndpointUrlListDataType_DataTypeVersion,11960,Variable +OpcUa_BinarySchema_EndpointUrlListDataType_DictionaryFragment,11961,Variable +OpcUa_BinarySchema_NetworkGroupDataType,11962,Variable +OpcUa_BinarySchema_NetworkGroupDataType_DataTypeVersion,11963,Variable +OpcUa_BinarySchema_NetworkGroupDataType_DictionaryFragment,11964,Variable +ArrayItemType,12021,VariableType +ArrayItemType_Definition,12022,Variable +ArrayItemType_ValuePrecision,12023,Variable +ArrayItemType_InstrumentRange,12024,Variable +ArrayItemType_EURange,12025,Variable +ArrayItemType_EngineeringUnits,12026,Variable +ArrayItemType_Title,12027,Variable +ArrayItemType_AxisScaleType,12028,Variable +YArrayItemType,12029,VariableType +YArrayItemType_Definition,12030,Variable +YArrayItemType_ValuePrecision,12031,Variable +YArrayItemType_InstrumentRange,12032,Variable +YArrayItemType_EURange,12033,Variable +YArrayItemType_EngineeringUnits,12034,Variable +YArrayItemType_Title,12035,Variable +YArrayItemType_AxisScaleType,12036,Variable +YArrayItemType_XAxisDefinition,12037,Variable +XYArrayItemType,12038,VariableType +XYArrayItemType_Definition,12039,Variable +XYArrayItemType_ValuePrecision,12040,Variable +XYArrayItemType_InstrumentRange,12041,Variable +XYArrayItemType_EURange,12042,Variable +XYArrayItemType_EngineeringUnits,12043,Variable +XYArrayItemType_Title,12044,Variable +XYArrayItemType_AxisScaleType,12045,Variable +XYArrayItemType_XAxisDefinition,12046,Variable +ImageItemType,12047,VariableType +ImageItemType_Definition,12048,Variable +ImageItemType_ValuePrecision,12049,Variable +ImageItemType_InstrumentRange,12050,Variable +ImageItemType_EURange,12051,Variable +ImageItemType_EngineeringUnits,12052,Variable +ImageItemType_Title,12053,Variable +ImageItemType_AxisScaleType,12054,Variable +ImageItemType_XAxisDefinition,12055,Variable +ImageItemType_YAxisDefinition,12056,Variable +CubeItemType,12057,VariableType +CubeItemType_Definition,12058,Variable +CubeItemType_ValuePrecision,12059,Variable +CubeItemType_InstrumentRange,12060,Variable +CubeItemType_EURange,12061,Variable +CubeItemType_EngineeringUnits,12062,Variable +CubeItemType_Title,12063,Variable +CubeItemType_AxisScaleType,12064,Variable +CubeItemType_XAxisDefinition,12065,Variable +CubeItemType_YAxisDefinition,12066,Variable +CubeItemType_ZAxisDefinition,12067,Variable +NDimensionArrayItemType,12068,VariableType +NDimensionArrayItemType_Definition,12069,Variable +NDimensionArrayItemType_ValuePrecision,12070,Variable +NDimensionArrayItemType_InstrumentRange,12071,Variable +NDimensionArrayItemType_EURange,12072,Variable +NDimensionArrayItemType_EngineeringUnits,12073,Variable +NDimensionArrayItemType_Title,12074,Variable +NDimensionArrayItemType_AxisScaleType,12075,Variable +NDimensionArrayItemType_AxisDefinition,12076,Variable +AxisScaleEnumeration,12077,DataType +AxisScaleEnumeration_EnumStrings,12078,Variable +AxisInformation,12079,DataType +XVType,12080,DataType +AxisInformation_Encoding_DefaultXml,12081,Object +XVType_Encoding_DefaultXml,12082,Object +OpcUa_XmlSchema_AxisInformation,12083,Variable +OpcUa_XmlSchema_AxisInformation_DataTypeVersion,12084,Variable +OpcUa_XmlSchema_AxisInformation_DictionaryFragment,12085,Variable +OpcUa_XmlSchema_XVType,12086,Variable +OpcUa_XmlSchema_XVType_DataTypeVersion,12087,Variable +OpcUa_XmlSchema_XVType_DictionaryFragment,12088,Variable +AxisInformation_Encoding_DefaultBinary,12089,Object +XVType_Encoding_DefaultBinary,12090,Object +OpcUa_BinarySchema_AxisInformation,12091,Variable +OpcUa_BinarySchema_AxisInformation_DataTypeVersion,12092,Variable +OpcUa_BinarySchema_AxisInformation_DictionaryFragment,12093,Variable +OpcUa_BinarySchema_XVType,12094,Variable +OpcUa_BinarySchema_XVType_DataTypeVersion,12095,Variable +OpcUa_BinarySchema_XVType_DictionaryFragment,12096,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder,12097,Object +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics,12098,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId,12099,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName,12100,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription,12101,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri,12102,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl,12103,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds,12104,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout,12105,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize,12106,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime,12107,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime,12108,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount,12109,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount,12110,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue,12111,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount,12112,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount,12113,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount,12114,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount,12115,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount,12116,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount,12117,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount,12118,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount,12119,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount,12120,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount,12121,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount,12122,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount,12123,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount,12124,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount,12125,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount,12126,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount,12127,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount,12128,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount,12129,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount,12130,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount,12131,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount,12132,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount,12133,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount,12134,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount,12135,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount,12136,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,12137,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount,12138,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount,12139,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount,12140,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount,12141,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics,12142,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId,12143,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession,12144,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory,12145,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism,12146,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding,12147,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol,12148,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode,12149,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri,12150,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate,12151,Variable +SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray,12152,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,12153,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,12154,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,12155,Variable +ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,12156,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadData,12157,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadEvents,12158,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateData,12159,Variable +ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateEvents,12160,Variable +OperationLimitsType_MaxNodesPerHistoryReadData,12161,Variable +OperationLimitsType_MaxNodesPerHistoryReadEvents,12162,Variable +OperationLimitsType_MaxNodesPerHistoryUpdateData,12163,Variable +OperationLimitsType_MaxNodesPerHistoryUpdateEvents,12164,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,12165,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,12166,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,12167,Variable +Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,12168,Variable +NamingRuleType_EnumValues,12169,Variable +ViewVersion,12170,Variable +ComplexNumberType,12171,DataType +DoubleComplexNumberType,12172,DataType +ComplexNumberType_Encoding_DefaultXml,12173,Object +DoubleComplexNumberType_Encoding_DefaultXml,12174,Object +OpcUa_XmlSchema_ComplexNumberType,12175,Variable +OpcUa_XmlSchema_ComplexNumberType_DataTypeVersion,12176,Variable +OpcUa_XmlSchema_ComplexNumberType_DictionaryFragment,12177,Variable +OpcUa_XmlSchema_DoubleComplexNumberType,12178,Variable +OpcUa_XmlSchema_DoubleComplexNumberType_DataTypeVersion,12179,Variable +OpcUa_XmlSchema_DoubleComplexNumberType_DictionaryFragment,12180,Variable +ComplexNumberType_Encoding_DefaultBinary,12181,Object +DoubleComplexNumberType_Encoding_DefaultBinary,12182,Object +OpcUa_BinarySchema_ComplexNumberType,12183,Variable +OpcUa_BinarySchema_ComplexNumberType_DataTypeVersion,12184,Variable +OpcUa_BinarySchema_ComplexNumberType_DictionaryFragment,12185,Variable +OpcUa_BinarySchema_DoubleComplexNumberType,12186,Variable +OpcUa_BinarySchema_DoubleComplexNumberType_DataTypeVersion,12187,Variable +OpcUa_BinarySchema_DoubleComplexNumberType_DictionaryFragment,12188,Variable +ServerOnNetwork,12189,DataType +FindServersOnNetworkRequest,12190,DataType +FindServersOnNetworkResponse,12191,DataType +RegisterServer2Request,12193,DataType +RegisterServer2Response,12194,DataType +ServerOnNetwork_Encoding_DefaultXml,12195,Object +FindServersOnNetworkRequest_Encoding_DefaultXml,12196,Object +FindServersOnNetworkResponse_Encoding_DefaultXml,12197,Object +RegisterServer2Request_Encoding_DefaultXml,12199,Object +RegisterServer2Response_Encoding_DefaultXml,12200,Object +OpcUa_XmlSchema_ServerOnNetwork,12201,Variable +OpcUa_XmlSchema_ServerOnNetwork_DataTypeVersion,12202,Variable +OpcUa_XmlSchema_ServerOnNetwork_DictionaryFragment,12203,Variable +ServerOnNetwork_Encoding_DefaultBinary,12207,Object +FindServersOnNetworkRequest_Encoding_DefaultBinary,12208,Object +FindServersOnNetworkResponse_Encoding_DefaultBinary,12209,Object +RegisterServer2Request_Encoding_DefaultBinary,12211,Object +RegisterServer2Response_Encoding_DefaultBinary,12212,Object +OpcUa_BinarySchema_ServerOnNetwork,12213,Variable +OpcUa_BinarySchema_ServerOnNetwork_DataTypeVersion,12214,Variable +OpcUa_BinarySchema_ServerOnNetwork_DictionaryFragment,12215,Variable +ProgressEventType_Context,12502,Variable +ProgressEventType_Progress,12503,Variable +OpenWithMasksMethodType,12513,Method +OpenWithMasksMethodType_InputArguments,12514,Variable +OpenWithMasksMethodType_OutputArguments,12515,Variable +CloseAndUpdateMethodType,12516,Method +CloseAndUpdateMethodType_OutputArguments,12517,Variable +AddCertificateMethodType,12518,Method +AddCertificateMethodType_InputArguments,12519,Variable +RemoveCertificateMethodType,12520,Method +RemoveCertificateMethodType_InputArguments,12521,Variable +TrustListType,12522,ObjectType +TrustListType_Size,12523,Variable +TrustListType_OpenCount,12526,Variable +TrustListType_Open,12527,Method +TrustListType_Open_InputArguments,12528,Variable +TrustListType_Open_OutputArguments,12529,Variable +TrustListType_Close,12530,Method +TrustListType_Close_InputArguments,12531,Variable +TrustListType_Read,12532,Method +TrustListType_Read_InputArguments,12533,Variable +TrustListType_Read_OutputArguments,12534,Variable +TrustListType_Write,12535,Method +TrustListType_Write_InputArguments,12536,Variable +TrustListType_GetPosition,12537,Method +TrustListType_GetPosition_InputArguments,12538,Variable +TrustListType_GetPosition_OutputArguments,12539,Variable +TrustListType_SetPosition,12540,Method +TrustListType_SetPosition_InputArguments,12541,Variable +TrustListType_LastUpdateTime,12542,Variable +TrustListType_OpenWithMasks,12543,Method +TrustListType_OpenWithMasks_InputArguments,12544,Variable +TrustListType_OpenWithMasks_OutputArguments,12545,Variable +TrustListType_CloseAndUpdate,12546,Method +TrustListType_CloseAndUpdate_OutputArguments,12547,Variable +TrustListType_AddCertificate,12548,Method +TrustListType_AddCertificate_InputArguments,12549,Variable +TrustListType_RemoveCertificate,12550,Method +TrustListType_RemoveCertificate_InputArguments,12551,Variable +TrustListMasks,12552,DataType +TrustListMasks_EnumValues,12553,Variable +TrustListDataType,12554,DataType +CertificateGroupType,12555,ObjectType +CertificateType,12556,ObjectType +ApplicationCertificateType,12557,ObjectType +HttpsCertificateType,12558,ObjectType +RsaMinApplicationCertificateType,12559,ObjectType +RsaSha256ApplicationCertificateType,12560,ObjectType +TrustListUpdatedAuditEventType,12561,ObjectType +TrustListUpdatedAuditEventType_EventId,12562,Variable +TrustListUpdatedAuditEventType_EventType,12563,Variable +TrustListUpdatedAuditEventType_SourceNode,12564,Variable +TrustListUpdatedAuditEventType_SourceName,12565,Variable +TrustListUpdatedAuditEventType_Time,12566,Variable +TrustListUpdatedAuditEventType_ReceiveTime,12567,Variable +TrustListUpdatedAuditEventType_LocalTime,12568,Variable +TrustListUpdatedAuditEventType_Message,12569,Variable +TrustListUpdatedAuditEventType_Severity,12570,Variable +TrustListUpdatedAuditEventType_ActionTimeStamp,12571,Variable +TrustListUpdatedAuditEventType_Status,12572,Variable +TrustListUpdatedAuditEventType_ServerId,12573,Variable +TrustListUpdatedAuditEventType_ClientAuditEntryId,12574,Variable +TrustListUpdatedAuditEventType_ClientUserId,12575,Variable +TrustListUpdatedAuditEventType_MethodId,12576,Variable +TrustListUpdatedAuditEventType_InputArguments,12577,Variable +UpdateCertificateMethodType,12578,Method +UpdateCertificateMethodType_InputArguments,12579,Variable +UpdateCertificateMethodType_OutputArguments,12580,Variable +ServerConfigurationType,12581,ObjectType +ServerConfigurationType_SupportedPrivateKeyFormats,12583,Variable +ServerConfigurationType_MaxTrustListSize,12584,Variable +ServerConfigurationType_MulticastDnsEnabled,12585,Variable +ServerConfigurationType_UpdateCertificate,12616,Method +ServerConfigurationType_UpdateCertificate_InputArguments,12617,Variable +ServerConfigurationType_UpdateCertificate_OutputArguments,12618,Variable +CertificateUpdatedAuditEventType,12620,ObjectType +CertificateUpdatedAuditEventType_EventId,12621,Variable +CertificateUpdatedAuditEventType_EventType,12622,Variable +CertificateUpdatedAuditEventType_SourceNode,12623,Variable +CertificateUpdatedAuditEventType_SourceName,12624,Variable +CertificateUpdatedAuditEventType_Time,12625,Variable +CertificateUpdatedAuditEventType_ReceiveTime,12626,Variable +CertificateUpdatedAuditEventType_LocalTime,12627,Variable +CertificateUpdatedAuditEventType_Message,12628,Variable +CertificateUpdatedAuditEventType_Severity,12629,Variable +CertificateUpdatedAuditEventType_ActionTimeStamp,12630,Variable +CertificateUpdatedAuditEventType_Status,12631,Variable +CertificateUpdatedAuditEventType_ServerId,12632,Variable +CertificateUpdatedAuditEventType_ClientAuditEntryId,12633,Variable +CertificateUpdatedAuditEventType_ClientUserId,12634,Variable +CertificateUpdatedAuditEventType_MethodId,12635,Variable +CertificateUpdatedAuditEventType_InputArguments,12636,Variable +ServerConfiguration,12637,Object +ServerConfiguration_SupportedPrivateKeyFormats,12639,Variable +ServerConfiguration_MaxTrustListSize,12640,Variable +ServerConfiguration_MulticastDnsEnabled,12641,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList,12642,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size,12643,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount,12646,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open,12647,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments,12648,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments,12649,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close,12650,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments,12651,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read,12652,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments,12653,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments,12654,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write,12655,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments,12656,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition,12657,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,12658,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,12659,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition,12660,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,12661,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime,12662,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks,12663,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,12664,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,12665,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate,12666,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,12667,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate,12668,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,12669,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate,12670,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,12671,Variable +TrustListDataType_Encoding_DefaultXml,12676,Object +OpcUa_XmlSchema_TrustListDataType,12677,Variable +OpcUa_XmlSchema_TrustListDataType_DataTypeVersion,12678,Variable +OpcUa_XmlSchema_TrustListDataType_DictionaryFragment,12679,Variable +TrustListDataType_Encoding_DefaultBinary,12680,Object +OpcUa_BinarySchema_TrustListDataType,12681,Variable +OpcUa_BinarySchema_TrustListDataType_DataTypeVersion,12682,Variable +OpcUa_BinarySchema_TrustListDataType_DictionaryFragment,12683,Variable +FileType_Writable,12686,Variable +FileType_UserWritable,12687,Variable +AddressSpaceFileType_Writable,12688,Variable +AddressSpaceFileType_UserWritable,12689,Variable +NamespaceMetadataType_NamespaceFile_Writable,12690,Variable +NamespaceMetadataType_NamespaceFile_UserWritable,12691,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable,12692,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable,12693,Variable +TrustListType_Writable,12698,Variable +TrustListType_UserWritable,12699,Variable +CloseAndUpdateMethodType_InputArguments,12704,Variable +TrustListType_CloseAndUpdate_InputArguments,12705,Variable +ServerConfigurationType_ServerCapabilities,12708,Variable +ServerConfiguration_ServerCapabilities,12710,Variable +OpcUa_XmlSchema_RelativePathElement,12712,Variable +OpcUa_XmlSchema_RelativePathElement_DataTypeVersion,12713,Variable +OpcUa_XmlSchema_RelativePathElement_DictionaryFragment,12714,Variable +OpcUa_XmlSchema_RelativePath,12715,Variable +OpcUa_XmlSchema_RelativePath_DataTypeVersion,12716,Variable +OpcUa_XmlSchema_RelativePath_DictionaryFragment,12717,Variable +OpcUa_BinarySchema_RelativePathElement,12718,Variable +OpcUa_BinarySchema_RelativePathElement_DataTypeVersion,12719,Variable +OpcUa_BinarySchema_RelativePathElement_DictionaryFragment,12720,Variable +OpcUa_BinarySchema_RelativePath,12721,Variable +OpcUa_BinarySchema_RelativePath_DataTypeVersion,12722,Variable +OpcUa_BinarySchema_RelativePath_DictionaryFragment,12723,Variable +ServerConfigurationType_CreateSigningRequest,12731,Method +ServerConfigurationType_CreateSigningRequest_InputArguments,12732,Variable +ServerConfigurationType_CreateSigningRequest_OutputArguments,12733,Variable +ServerConfigurationType_ApplyChanges,12734,Method +ServerConfiguration_CreateSigningRequest,12737,Method +ServerConfiguration_CreateSigningRequest_InputArguments,12738,Variable +ServerConfiguration_CreateSigningRequest_OutputArguments,12739,Variable +ServerConfiguration_ApplyChanges,12740,Method +CreateSigningRequestMethodType,12741,Method +CreateSigningRequestMethodType_InputArguments,12742,Variable +CreateSigningRequestMethodType_OutputArguments,12743,Variable +OptionSetValues,12745,Variable +ServerType_SetSubscriptionDurable,12746,Method +ServerType_SetSubscriptionDurable_InputArguments,12747,Variable +ServerType_SetSubscriptionDurable_OutputArguments,12748,Variable +Server_SetSubscriptionDurable,12749,Method +Server_SetSubscriptionDurable_InputArguments,12750,Variable +Server_SetSubscriptionDurable_OutputArguments,12751,Variable +SetSubscriptionDurableMethodType,12752,Method +SetSubscriptionDurableMethodType_InputArguments,12753,Variable +SetSubscriptionDurableMethodType_OutputArguments,12754,Variable +OptionSet,12755,DataType +Union,12756,DataType +OptionSet_Encoding_DefaultXml,12757,Object +Union_Encoding_DefaultXml,12758,Object +OpcUa_XmlSchema_OptionSet,12759,Variable +OpcUa_XmlSchema_OptionSet_DataTypeVersion,12760,Variable +OpcUa_XmlSchema_OptionSet_DictionaryFragment,12761,Variable +OpcUa_XmlSchema_Union,12762,Variable +OpcUa_XmlSchema_Union_DataTypeVersion,12763,Variable +OpcUa_XmlSchema_Union_DictionaryFragment,12764,Variable +OptionSet_Encoding_DefaultBinary,12765,Object +Union_Encoding_DefaultBinary,12766,Object +OpcUa_BinarySchema_OptionSet,12767,Variable +OpcUa_BinarySchema_OptionSet_DataTypeVersion,12768,Variable +OpcUa_BinarySchema_OptionSet_DictionaryFragment,12769,Variable +OpcUa_BinarySchema_Union,12770,Variable +OpcUa_BinarySchema_Union_DataTypeVersion,12771,Variable +OpcUa_BinarySchema_Union_DictionaryFragment,12772,Variable +GetRejectedListMethodType,12773,Method +GetRejectedListMethodType_OutputArguments,12774,Variable +ServerConfigurationType_GetRejectedList,12775,Method +ServerConfigurationType_GetRejectedList_OutputArguments,12776,Variable +ServerConfiguration_GetRejectedList,12777,Method +ServerConfiguration_GetRejectedList_OutputArguments,12778,Variable +SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics,12779,Variable +SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval,12780,Variable +SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount,12781,Variable +SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount,12782,Variable +SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount,12783,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics,12784,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId,12785,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId,12786,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority,12787,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval,12788,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount,12789,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount,12790,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish,12791,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled,12792,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount,12793,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount,12794,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount,12795,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount,12796,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount,12797,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount,12798,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount,12799,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount,12800,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount,12801,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount,12802,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount,12803,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount,12804,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount,12805,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount,12806,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount,12807,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount,12808,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount,12809,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount,12810,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount,12811,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount,12812,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount,12813,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber,12814,Variable +SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount,12815,Variable +SessionDiagnosticsArrayType_SessionDiagnostics,12816,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_SessionId,12817,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_SessionName,12818,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription,12819,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri,12820,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl,12821,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds,12822,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout,12823,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize,12824,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime,12825,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime,12826,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount,12827,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount,12828,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue,12829,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount,12830,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount,12831,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount,12832,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount,12833,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount,12834,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount,12835,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_CallCount,12836,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount,12837,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount,12838,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount,12839,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount,12840,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount,12841,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount,12842,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount,12843,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount,12844,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount,12845,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount,12846,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount,12847,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount,12848,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount,12849,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount,12850,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount,12851,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount,12852,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount,12853,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount,12854,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,12855,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount,12856,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount,12857,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount,12858,Variable +SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount,12859,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics,12860,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId,12861,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession,12862,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory,12863,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism,12864,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding,12865,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol,12866,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode,12867,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri,12868,Variable +SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate,12869,Variable +ServerType_ResendData,12871,Method +ServerType_ResendData_InputArguments,12872,Variable +Server_ResendData,12873,Method +Server_ResendData_InputArguments,12874,Variable +ResendDataMethodType,12875,Method +ResendDataMethodType_InputArguments,12876,Variable +NormalizedString,12877,DataType +DecimalString,12878,DataType +DurationString,12879,DataType +TimeString,12880,DataType +DateString,12881,DataType +ServerType_EstimatedReturnTime,12882,Variable +ServerType_RequestServerStateChange,12883,Method +ServerType_RequestServerStateChange_InputArguments,12884,Variable +Server_EstimatedReturnTime,12885,Variable +Server_RequestServerStateChange,12886,Method +Server_RequestServerStateChange_InputArguments,12887,Variable +RequestServerStateChangeMethodType,12888,Method +RequestServerStateChangeMethodType_InputArguments,12889,Variable +DiscoveryConfiguration,12890,DataType +MdnsDiscoveryConfiguration,12891,DataType +DiscoveryConfiguration_Encoding_DefaultXml,12892,Object +MdnsDiscoveryConfiguration_Encoding_DefaultXml,12893,Object +OpcUa_XmlSchema_DiscoveryConfiguration,12894,Variable +OpcUa_XmlSchema_DiscoveryConfiguration_DataTypeVersion,12895,Variable +OpcUa_XmlSchema_DiscoveryConfiguration_DictionaryFragment,12896,Variable +OpcUa_XmlSchema_MdnsDiscoveryConfiguration,12897,Variable +OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DataTypeVersion,12898,Variable +OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DictionaryFragment,12899,Variable +DiscoveryConfiguration_Encoding_DefaultBinary,12900,Object +MdnsDiscoveryConfiguration_Encoding_DefaultBinary,12901,Object +OpcUa_BinarySchema_DiscoveryConfiguration,12902,Variable +OpcUa_BinarySchema_DiscoveryConfiguration_DataTypeVersion,12903,Variable +OpcUa_BinarySchema_DiscoveryConfiguration_DictionaryFragment,12904,Variable +OpcUa_BinarySchema_MdnsDiscoveryConfiguration,12905,Variable +OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DataTypeVersion,12906,Variable +OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DictionaryFragment,12907,Variable +MaxByteStringLength,12908,Variable +ServerType_ServerCapabilities_MaxByteStringLength,12909,Variable +ServerCapabilitiesType_MaxByteStringLength,12910,Variable +Server_ServerCapabilities_MaxByteStringLength,12911,Variable +ConditionType_ConditionRefresh2,12912,Method +ConditionType_ConditionRefresh2_InputArguments,12913,Variable +ConditionRefresh2MethodType,12914,Method +ConditionRefresh2MethodType_InputArguments,12915,Variable +DialogConditionType_ConditionRefresh2,12916,Method +DialogConditionType_ConditionRefresh2_InputArguments,12917,Variable +AcknowledgeableConditionType_ConditionRefresh2,12918,Method +AcknowledgeableConditionType_ConditionRefresh2_InputArguments,12919,Variable +AlarmConditionType_ConditionRefresh2,12984,Method +AlarmConditionType_ConditionRefresh2_InputArguments,12985,Variable +LimitAlarmType_ConditionRefresh2,12986,Method +LimitAlarmType_ConditionRefresh2_InputArguments,12987,Variable +ExclusiveLimitAlarmType_ConditionRefresh2,12988,Method +ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments,12989,Variable +NonExclusiveLimitAlarmType_ConditionRefresh2,12990,Method +NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments,12991,Variable +NonExclusiveLevelAlarmType_ConditionRefresh2,12992,Method +NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments,12993,Variable +ExclusiveLevelAlarmType_ConditionRefresh2,12994,Method +ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments,12995,Variable +NonExclusiveDeviationAlarmType_ConditionRefresh2,12996,Method +NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments,12997,Variable +ExclusiveDeviationAlarmType_ConditionRefresh2,12998,Method +ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments,12999,Variable +NonExclusiveRateOfChangeAlarmType_ConditionRefresh2,13000,Method +NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments,13001,Variable +ExclusiveRateOfChangeAlarmType_ConditionRefresh2,13002,Method +ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments,13003,Variable +DiscreteAlarmType_ConditionRefresh2,13004,Method +DiscreteAlarmType_ConditionRefresh2_InputArguments,13005,Variable +OffNormalAlarmType_ConditionRefresh2,13006,Method +OffNormalAlarmType_ConditionRefresh2_InputArguments,13007,Variable +SystemOffNormalAlarmType_ConditionRefresh2,13008,Method +SystemOffNormalAlarmType_ConditionRefresh2_InputArguments,13009,Variable +TripAlarmType_ConditionRefresh2,13010,Method +TripAlarmType_ConditionRefresh2_InputArguments,13011,Variable +CertificateExpirationAlarmType,13225,ObjectType +CertificateExpirationAlarmType_EventId,13226,Variable +CertificateExpirationAlarmType_EventType,13227,Variable +CertificateExpirationAlarmType_SourceNode,13228,Variable +CertificateExpirationAlarmType_SourceName,13229,Variable +CertificateExpirationAlarmType_Time,13230,Variable +CertificateExpirationAlarmType_ReceiveTime,13231,Variable +CertificateExpirationAlarmType_LocalTime,13232,Variable +CertificateExpirationAlarmType_Message,13233,Variable +CertificateExpirationAlarmType_Severity,13234,Variable +CertificateExpirationAlarmType_ConditionClassId,13235,Variable +CertificateExpirationAlarmType_ConditionClassName,13236,Variable +CertificateExpirationAlarmType_ConditionName,13237,Variable +CertificateExpirationAlarmType_BranchId,13238,Variable +CertificateExpirationAlarmType_Retain,13239,Variable +CertificateExpirationAlarmType_EnabledState,13240,Variable +CertificateExpirationAlarmType_EnabledState_Id,13241,Variable +CertificateExpirationAlarmType_EnabledState_Name,13242,Variable +CertificateExpirationAlarmType_EnabledState_Number,13243,Variable +CertificateExpirationAlarmType_EnabledState_EffectiveDisplayName,13244,Variable +CertificateExpirationAlarmType_EnabledState_TransitionTime,13245,Variable +CertificateExpirationAlarmType_EnabledState_EffectiveTransitionTime,13246,Variable +CertificateExpirationAlarmType_EnabledState_TrueState,13247,Variable +CertificateExpirationAlarmType_EnabledState_FalseState,13248,Variable +CertificateExpirationAlarmType_Quality,13249,Variable +CertificateExpirationAlarmType_Quality_SourceTimestamp,13250,Variable +CertificateExpirationAlarmType_LastSeverity,13251,Variable +CertificateExpirationAlarmType_LastSeverity_SourceTimestamp,13252,Variable +CertificateExpirationAlarmType_Comment,13253,Variable +CertificateExpirationAlarmType_Comment_SourceTimestamp,13254,Variable +CertificateExpirationAlarmType_ClientUserId,13255,Variable +CertificateExpirationAlarmType_Disable,13256,Method +CertificateExpirationAlarmType_Enable,13257,Method +CertificateExpirationAlarmType_AddComment,13258,Method +CertificateExpirationAlarmType_AddComment_InputArguments,13259,Variable +CertificateExpirationAlarmType_ConditionRefresh,13260,Method +CertificateExpirationAlarmType_ConditionRefresh_InputArguments,13261,Variable +CertificateExpirationAlarmType_ConditionRefresh2,13262,Method +CertificateExpirationAlarmType_ConditionRefresh2_InputArguments,13263,Variable +CertificateExpirationAlarmType_AckedState,13264,Variable +CertificateExpirationAlarmType_AckedState_Id,13265,Variable +CertificateExpirationAlarmType_AckedState_Name,13266,Variable +CertificateExpirationAlarmType_AckedState_Number,13267,Variable +CertificateExpirationAlarmType_AckedState_EffectiveDisplayName,13268,Variable +CertificateExpirationAlarmType_AckedState_TransitionTime,13269,Variable +CertificateExpirationAlarmType_AckedState_EffectiveTransitionTime,13270,Variable +CertificateExpirationAlarmType_AckedState_TrueState,13271,Variable +CertificateExpirationAlarmType_AckedState_FalseState,13272,Variable +CertificateExpirationAlarmType_ConfirmedState,13273,Variable +CertificateExpirationAlarmType_ConfirmedState_Id,13274,Variable +CertificateExpirationAlarmType_ConfirmedState_Name,13275,Variable +CertificateExpirationAlarmType_ConfirmedState_Number,13276,Variable +CertificateExpirationAlarmType_ConfirmedState_EffectiveDisplayName,13277,Variable +CertificateExpirationAlarmType_ConfirmedState_TransitionTime,13278,Variable +CertificateExpirationAlarmType_ConfirmedState_EffectiveTransitionTime,13279,Variable +CertificateExpirationAlarmType_ConfirmedState_TrueState,13280,Variable +CertificateExpirationAlarmType_ConfirmedState_FalseState,13281,Variable +CertificateExpirationAlarmType_Acknowledge,13282,Method +CertificateExpirationAlarmType_Acknowledge_InputArguments,13283,Variable +CertificateExpirationAlarmType_Confirm,13284,Method +CertificateExpirationAlarmType_Confirm_InputArguments,13285,Variable +CertificateExpirationAlarmType_ActiveState,13286,Variable +CertificateExpirationAlarmType_ActiveState_Id,13287,Variable +CertificateExpirationAlarmType_ActiveState_Name,13288,Variable +CertificateExpirationAlarmType_ActiveState_Number,13289,Variable +CertificateExpirationAlarmType_ActiveState_EffectiveDisplayName,13290,Variable +CertificateExpirationAlarmType_ActiveState_TransitionTime,13291,Variable +CertificateExpirationAlarmType_ActiveState_EffectiveTransitionTime,13292,Variable +CertificateExpirationAlarmType_ActiveState_TrueState,13293,Variable +CertificateExpirationAlarmType_ActiveState_FalseState,13294,Variable +CertificateExpirationAlarmType_InputNode,13295,Variable +CertificateExpirationAlarmType_SuppressedState,13296,Variable +CertificateExpirationAlarmType_SuppressedState_Id,13297,Variable +CertificateExpirationAlarmType_SuppressedState_Name,13298,Variable +CertificateExpirationAlarmType_SuppressedState_Number,13299,Variable +CertificateExpirationAlarmType_SuppressedState_EffectiveDisplayName,13300,Variable +CertificateExpirationAlarmType_SuppressedState_TransitionTime,13301,Variable +CertificateExpirationAlarmType_SuppressedState_EffectiveTransitionTime,13302,Variable +CertificateExpirationAlarmType_SuppressedState_TrueState,13303,Variable +CertificateExpirationAlarmType_SuppressedState_FalseState,13304,Variable +CertificateExpirationAlarmType_ShelvingState,13305,Object +CertificateExpirationAlarmType_ShelvingState_CurrentState,13306,Variable +CertificateExpirationAlarmType_ShelvingState_CurrentState_Id,13307,Variable +CertificateExpirationAlarmType_ShelvingState_CurrentState_Name,13308,Variable +CertificateExpirationAlarmType_ShelvingState_CurrentState_Number,13309,Variable +CertificateExpirationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,13310,Variable +CertificateExpirationAlarmType_ShelvingState_LastTransition,13311,Variable +CertificateExpirationAlarmType_ShelvingState_LastTransition_Id,13312,Variable +CertificateExpirationAlarmType_ShelvingState_LastTransition_Name,13313,Variable +CertificateExpirationAlarmType_ShelvingState_LastTransition_Number,13314,Variable +CertificateExpirationAlarmType_ShelvingState_LastTransition_TransitionTime,13315,Variable +CertificateExpirationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,13316,Variable +CertificateExpirationAlarmType_ShelvingState_UnshelveTime,13317,Variable +CertificateExpirationAlarmType_ShelvingState_Unshelve,13318,Method +CertificateExpirationAlarmType_ShelvingState_OneShotShelve,13319,Method +CertificateExpirationAlarmType_ShelvingState_TimedShelve,13320,Method +CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments,13321,Variable +CertificateExpirationAlarmType_SuppressedOrShelved,13322,Variable +CertificateExpirationAlarmType_MaxTimeShelved,13323,Variable +CertificateExpirationAlarmType_NormalState,13324,Variable +CertificateExpirationAlarmType_ExpirationDate,13325,Variable +CertificateExpirationAlarmType_CertificateType,13326,Variable +CertificateExpirationAlarmType_Certificate,13327,Variable +FileType_MimeType,13341,Variable +CreateDirectoryMethodType,13342,Method +CreateDirectoryMethodType_InputArguments,13343,Variable +CreateDirectoryMethodType_OutputArguments,13344,Variable +CreateFileMethodType,13345,Method +CreateFileMethodType_InputArguments,13346,Variable +CreateFileMethodType_OutputArguments,13347,Variable +DeleteFileMethodType,13348,Method +DeleteFileMethodType_InputArguments,13349,Variable +MoveOrCopyMethodType,13350,Method +MoveOrCopyMethodType_InputArguments,13351,Variable +MoveOrCopyMethodType_OutputArguments,13352,Variable +FileDirectoryType,13353,ObjectType +FileDirectoryType_FileDirectoryName_Placeholder,13354,Object +FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory,13355,Method +FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments,13356,Variable +FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments,13357,Variable +FileDirectoryType_FileDirectoryName_Placeholder_CreateFile,13358,Method +FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments,13359,Variable +FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments,13360,Variable +FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy,13363,Method +FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments,13364,Variable +FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments,13365,Variable +FileDirectoryType_FileName_Placeholder,13366,Object +FileDirectoryType_FileName_Placeholder_Size,13367,Variable +FileDirectoryType_FileName_Placeholder_Writable,13368,Variable +FileDirectoryType_FileName_Placeholder_UserWritable,13369,Variable +FileDirectoryType_FileName_Placeholder_OpenCount,13370,Variable +FileDirectoryType_FileName_Placeholder_MimeType,13371,Variable +FileDirectoryType_FileName_Placeholder_Open,13372,Method +FileDirectoryType_FileName_Placeholder_Open_InputArguments,13373,Variable +FileDirectoryType_FileName_Placeholder_Open_OutputArguments,13374,Variable +FileDirectoryType_FileName_Placeholder_Close,13375,Method +FileDirectoryType_FileName_Placeholder_Close_InputArguments,13376,Variable +FileDirectoryType_FileName_Placeholder_Read,13377,Method +FileDirectoryType_FileName_Placeholder_Read_InputArguments,13378,Variable +FileDirectoryType_FileName_Placeholder_Read_OutputArguments,13379,Variable +FileDirectoryType_FileName_Placeholder_Write,13380,Method +FileDirectoryType_FileName_Placeholder_Write_InputArguments,13381,Variable +FileDirectoryType_FileName_Placeholder_GetPosition,13382,Method +FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments,13383,Variable +FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments,13384,Variable +FileDirectoryType_FileName_Placeholder_SetPosition,13385,Method +FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments,13386,Variable +FileDirectoryType_CreateDirectory,13387,Method +FileDirectoryType_CreateDirectory_InputArguments,13388,Variable +FileDirectoryType_CreateDirectory_OutputArguments,13389,Variable +FileDirectoryType_CreateFile,13390,Method +FileDirectoryType_CreateFile_InputArguments,13391,Variable +FileDirectoryType_CreateFile_OutputArguments,13392,Variable +FileDirectoryType_DeleteFileSystemObject,13393,Method +FileDirectoryType_DeleteFileSystemObject_InputArguments,13394,Variable +FileDirectoryType_MoveOrCopy,13395,Method +FileDirectoryType_MoveOrCopy_InputArguments,13396,Variable +FileDirectoryType_MoveOrCopy_OutputArguments,13397,Variable +AddressSpaceFileType_MimeType,13398,Variable +NamespaceMetadataType_NamespaceFile_MimeType,13399,Variable +NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_MimeType,13400,Variable +TrustListType_MimeType,13403,Variable +CertificateGroupType_TrustList,13599,Object +CertificateGroupType_TrustList_Size,13600,Variable +CertificateGroupType_TrustList_Writable,13601,Variable +CertificateGroupType_TrustList_UserWritable,13602,Variable +CertificateGroupType_TrustList_OpenCount,13603,Variable +CertificateGroupType_TrustList_MimeType,13604,Variable +CertificateGroupType_TrustList_Open,13605,Method +CertificateGroupType_TrustList_Open_InputArguments,13606,Variable +CertificateGroupType_TrustList_Open_OutputArguments,13607,Variable +CertificateGroupType_TrustList_Close,13608,Method +CertificateGroupType_TrustList_Close_InputArguments,13609,Variable +CertificateGroupType_TrustList_Read,13610,Method +CertificateGroupType_TrustList_Read_InputArguments,13611,Variable +CertificateGroupType_TrustList_Read_OutputArguments,13612,Variable +CertificateGroupType_TrustList_Write,13613,Method +CertificateGroupType_TrustList_Write_InputArguments,13614,Variable +CertificateGroupType_TrustList_GetPosition,13615,Method +CertificateGroupType_TrustList_GetPosition_InputArguments,13616,Variable +CertificateGroupType_TrustList_GetPosition_OutputArguments,13617,Variable +CertificateGroupType_TrustList_SetPosition,13618,Method +CertificateGroupType_TrustList_SetPosition_InputArguments,13619,Variable +CertificateGroupType_TrustList_LastUpdateTime,13620,Variable +CertificateGroupType_TrustList_OpenWithMasks,13621,Method +CertificateGroupType_TrustList_OpenWithMasks_InputArguments,13622,Variable +CertificateGroupType_TrustList_OpenWithMasks_OutputArguments,13623,Variable +CertificateGroupType_TrustList_CloseAndUpdate,13624,Method +CertificateGroupType_TrustList_CloseAndUpdate_InputArguments,13625,Variable +CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments,13626,Variable +CertificateGroupType_TrustList_AddCertificate,13627,Method +CertificateGroupType_TrustList_AddCertificate_InputArguments,13628,Variable +CertificateGroupType_TrustList_RemoveCertificate,13629,Method +CertificateGroupType_TrustList_RemoveCertificate_InputArguments,13630,Variable +CertificateGroupType_CertificateTypes,13631,Variable +CertificateUpdatedAuditEventType_CertificateGroup,13735,Variable +CertificateUpdatedAuditEventType_CertificateType,13736,Variable +ServerConfiguration_UpdateCertificate,13737,Method +ServerConfiguration_UpdateCertificate_InputArguments,13738,Variable +ServerConfiguration_UpdateCertificate_OutputArguments,13739,Variable +CertificateGroupFolderType,13813,ObjectType +CertificateGroupFolderType_DefaultApplicationGroup,13814,Object +CertificateGroupFolderType_DefaultApplicationGroup_TrustList,13815,Object +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size,13816,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable,13817,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable,13818,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount,13819,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_MimeType,13820,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open,13821,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments,13822,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments,13823,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close,13824,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments,13825,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read,13826,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments,13827,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments,13828,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write,13829,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments,13830,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition,13831,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,13832,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,13833,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition,13834,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,13835,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime,13836,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks,13837,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,13838,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,13839,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate,13840,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,13841,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,13842,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate,13843,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,13844,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate,13845,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,13846,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes,13847,Variable +CertificateGroupFolderType_DefaultHttpsGroup,13848,Object +CertificateGroupFolderType_DefaultHttpsGroup_TrustList,13849,Object +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size,13850,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable,13851,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable,13852,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount,13853,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_MimeType,13854,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open,13855,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments,13856,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments,13857,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close,13858,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments,13859,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read,13860,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments,13861,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments,13862,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write,13863,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments,13864,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition,13865,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,13866,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,13867,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition,13868,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,13869,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime,13870,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks,13871,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,13872,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,13873,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate,13874,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,13875,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,13876,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate,13877,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,13878,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate,13879,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,13880,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes,13881,Variable +CertificateGroupFolderType_DefaultUserTokenGroup,13882,Object +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList,13883,Object +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size,13884,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable,13885,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable,13886,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount,13887,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_MimeType,13888,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open,13889,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments,13890,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments,13891,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close,13892,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments,13893,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read,13894,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments,13895,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments,13896,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write,13897,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments,13898,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition,13899,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,13900,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,13901,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition,13902,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,13903,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime,13904,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks,13905,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,13906,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,13907,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate,13908,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,13909,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,13910,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate,13911,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,13912,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate,13913,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,13914,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes,13915,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder,13916,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList,13917,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size,13918,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable,13919,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable,13920,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount,13921,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_MimeType,13922,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open,13923,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments,13924,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments,13925,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close,13926,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments,13927,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read,13928,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments,13929,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments,13930,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write,13931,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments,13932,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition,13933,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments,13934,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments,13935,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition,13936,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments,13937,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime,13938,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks,13939,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments,13940,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments,13941,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate,13942,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments,13943,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments,13944,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate,13945,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments,13946,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate,13947,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments,13948,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes,13949,Variable +ServerConfigurationType_CertificateGroups,13950,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup,13951,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList,13952,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size,13953,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable,13954,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable,13955,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount,13956,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType,13957,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open,13958,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments,13959,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments,13960,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close,13961,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments,13962,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read,13963,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments,13964,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments,13965,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write,13966,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments,13967,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition,13968,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,13969,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,13970,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition,13971,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,13972,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime,13973,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks,13974,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,13975,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,13976,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate,13977,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,13978,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,13979,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate,13980,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,13981,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate,13982,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,13983,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes,13984,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup,13985,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList,13986,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size,13987,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable,13988,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable,13989,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount,13990,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType,13991,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open,13992,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments,13993,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments,13994,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close,13995,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments,13996,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read,13997,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments,13998,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments,13999,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write,14000,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments,14001,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition,14002,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,14003,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,14004,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition,14005,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,14006,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime,14007,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks,14008,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,14009,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,14010,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate,14011,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,14012,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,14013,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate,14014,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,14015,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate,14016,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,14017,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes,14018,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup,14019,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList,14020,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size,14021,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable,14022,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable,14023,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount,14024,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType,14025,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open,14026,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments,14027,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments,14028,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close,14029,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments,14030,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read,14031,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments,14032,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments,14033,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write,14034,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments,14035,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition,14036,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,14037,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,14038,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition,14039,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,14040,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime,14041,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks,14042,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,14043,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,14044,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate,14045,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,14046,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,14047,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate,14048,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,14049,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate,14050,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,14051,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes,14052,Variable +ServerConfiguration_CertificateGroups,14053,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup,14088,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList,14089,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size,14090,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable,14091,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable,14092,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount,14093,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType,14094,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open,14095,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments,14096,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments,14097,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close,14098,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments,14099,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read,14100,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments,14101,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments,14102,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write,14103,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments,14104,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition,14105,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,14106,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,14107,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition,14108,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,14109,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime,14110,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks,14111,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,14112,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,14113,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate,14114,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,14115,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,14116,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate,14117,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,14118,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate,14119,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,14120,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes,14121,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup,14122,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList,14123,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size,14124,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable,14125,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable,14126,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount,14127,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType,14128,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open,14129,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments,14130,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments,14131,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close,14132,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments,14133,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read,14134,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments,14135,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments,14136,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write,14137,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments,14138,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition,14139,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,14140,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,14141,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition,14142,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,14143,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime,14144,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks,14145,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,14146,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,14147,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate,14148,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,14149,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,14150,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate,14151,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,14152,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate,14153,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,14154,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes,14155,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup,14156,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable,14157,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable,14158,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType,14159,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,14160,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes,14161,Variable +RemoveConnectionMethodType,14183,Method +RemoveConnectionMethodType_InputArguments,14184,Variable +PubSubConnectionType,14209,ObjectType +PubSubConnectionType_Address,14221,Object +PubSubConnectionType_RemoveGroup,14225,Method +PubSubConnectionType_RemoveGroup_InputArguments,14226,Variable +PubSubGroupType,14232,ObjectType +PublishedVariableDataType,14273,DataType +PublishedVariableDataType_Encoding_DefaultXml,14319,Object +OpcUa_XmlSchema_PublishedVariableDataType,14320,Variable +OpcUa_XmlSchema_PublishedVariableDataType_DataTypeVersion,14321,Variable +OpcUa_XmlSchema_PublishedVariableDataType_DictionaryFragment,14322,Variable +PublishedVariableDataType_Encoding_DefaultBinary,14323,Object +OpcUa_BinarySchema_PublishedVariableDataType,14324,Variable +OpcUa_BinarySchema_PublishedVariableDataType_DataTypeVersion,14325,Variable +OpcUa_BinarySchema_PublishedVariableDataType_DictionaryFragment,14326,Variable +AuditCreateSessionEventType_SessionId,14413,Variable +AuditUrlMismatchEventType_SessionId,14414,Variable +Server_ServerRedundancy_ServerNetworkGroups,14415,Variable +PublishSubscribeType,14416,ObjectType +PublishSubscribeType_ConnectionName_Placeholder,14417,Object +PublishSubscribeType_ConnectionName_Placeholder_PublisherId,14418,Variable +PublishSubscribeType_ConnectionName_Placeholder_Status,14419,Object +PublishSubscribeType_ConnectionName_Placeholder_Status_State,14420,Variable +PublishSubscribeType_ConnectionName_Placeholder_Status_Enable,14421,Method +PublishSubscribeType_ConnectionName_Placeholder_Status_Disable,14422,Method +PublishSubscribeType_ConnectionName_Placeholder_Address,14423,Object +PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup,14424,Method +PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments,14425,Variable +PublishSubscribeType_RemoveConnection,14432,Method +PublishSubscribeType_RemoveConnection_InputArguments,14433,Variable +PublishSubscribeType_PublishedDataSets,14434,Object +PublishSubscribeType_PublishedDataSets_AddPublishedDataItems,14435,Method +PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments,14436,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments,14437,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedEvents,14438,Method +PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments,14439,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments,14440,Variable +PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet,14441,Method +PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments,14442,Variable +PublishSubscribe,14443,Object +HasPubSubConnection,14476,ReferenceType +DataSetFolderType,14477,ObjectType +DataSetFolderType_DataSetFolderName_Placeholder,14478,Object +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems,14479,Method +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments,14480,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments,14481,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents,14482,Method +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments,14483,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments,14484,Variable +DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet,14485,Method +DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments,14486,Variable +DataSetFolderType_PublishedDataSetName_Placeholder,14487,Object +DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion,14489,Variable +DataSetFolderType_AddPublishedDataItems,14493,Method +DataSetFolderType_AddPublishedDataItems_InputArguments,14494,Variable +DataSetFolderType_AddPublishedDataItems_OutputArguments,14495,Variable +DataSetFolderType_AddPublishedEvents,14496,Method +DataSetFolderType_AddPublishedEvents_InputArguments,14497,Variable +DataSetFolderType_AddPublishedEvents_OutputArguments,14498,Variable +DataSetFolderType_RemovePublishedDataSet,14499,Method +DataSetFolderType_RemovePublishedDataSet_InputArguments,14500,Variable +AddPublishedDataItemsMethodType,14501,Method +AddPublishedDataItemsMethodType_InputArguments,14502,Variable +AddPublishedDataItemsMethodType_OutputArguments,14503,Variable +AddPublishedEventsMethodType,14504,Method +AddPublishedEventsMethodType_InputArguments,14505,Variable +AddPublishedEventsMethodType_OutputArguments,14506,Variable +RemovePublishedDataSetMethodType,14507,Method +RemovePublishedDataSetMethodType_InputArguments,14508,Variable +PublishedDataSetType,14509,ObjectType +PublishedDataSetType_ConfigurationVersion,14519,Variable +DataSetMetaDataType,14523,DataType +FieldMetaData,14524,DataType +DataTypeDescription,14525,DataType +StructureType_EnumStrings,14528,Variable +KeyValuePair,14533,DataType +PublishedDataItemsType,14534,ObjectType +PublishedDataItemsType_ConfigurationVersion,14544,Variable +PublishedDataItemsType_PublishedData,14548,Variable +PublishedDataItemsType_AddVariables,14555,Method +PublishedDataItemsType_AddVariables_InputArguments,14556,Variable +PublishedDataItemsType_AddVariables_OutputArguments,14557,Variable +PublishedDataItemsType_RemoveVariables,14558,Method +PublishedDataItemsType_RemoveVariables_InputArguments,14559,Variable +PublishedDataItemsType_RemoveVariables_OutputArguments,14560,Variable +PublishedDataItemsAddVariablesMethodType,14564,Method +PublishedDataItemsAddVariablesMethodType_InputArguments,14565,Variable +PublishedDataItemsAddVariablesMethodType_OutputArguments,14566,Variable +PublishedDataItemsRemoveVariablesMethodType,14567,Method +PublishedDataItemsRemoveVariablesMethodType_InputArguments,14568,Variable +PublishedDataItemsRemoveVariablesMethodType_OutputArguments,14569,Variable +PublishedEventsType,14572,ObjectType +PublishedEventsType_ConfigurationVersion,14582,Variable +PublishedEventsType_PubSubEventNotifier,14586,Variable +PublishedEventsType_SelectedFields,14587,Variable +PublishedEventsType_Filter,14588,Variable +ConfigurationVersionDataType,14593,DataType +PubSubConnectionType_PublisherId,14595,Variable +PubSubConnectionType_Status,14600,Object +PubSubConnectionType_Status_State,14601,Variable +PubSubConnectionType_Status_Enable,14602,Method +PubSubConnectionType_Status_Disable,14603,Method +PubSubConnectionTypeRemoveGroupMethodType,14604,Method +PubSubConnectionTypeRemoveGroupMethodType_InputArguments,14605,Variable +PubSubGroupTypeRemoveWriterMethodType,14623,Method +PubSubGroupTypeRemoveWriterMethodType_InputArguments,14624,Variable +PubSubGroupTypeRemoveReaderMethodType,14625,Method +PubSubGroupTypeRemoveReaderMethodType_InputArguments,14626,Variable +PubSubStatusType,14643,ObjectType +PubSubStatusType_State,14644,Variable +PubSubStatusType_Enable,14645,Method +PubSubStatusType_Disable,14646,Method +PubSubState,14647,DataType +PubSubState_EnumStrings,14648,Variable +FieldTargetDataType,14744,DataType +DataSetMetaDataType_Encoding_DefaultXml,14794,Object +FieldMetaData_Encoding_DefaultXml,14795,Object +DataTypeDescription_Encoding_DefaultXml,14796,Object +DataTypeDefinition_Encoding_DefaultXml,14797,Object +StructureDefinition_Encoding_DefaultXml,14798,Object +EnumDefinition_Encoding_DefaultXml,14799,Object +StructureField_Encoding_DefaultXml,14800,Object +EnumField_Encoding_DefaultXml,14801,Object +KeyValuePair_Encoding_DefaultXml,14802,Object +ConfigurationVersionDataType_Encoding_DefaultXml,14803,Object +FieldTargetDataType_Encoding_DefaultXml,14804,Object +OpcUa_XmlSchema_DataSetMetaDataType,14805,Variable +OpcUa_XmlSchema_DataSetMetaDataType_DataTypeVersion,14806,Variable +OpcUa_XmlSchema_DataSetMetaDataType_DictionaryFragment,14807,Variable +OpcUa_XmlSchema_FieldMetaData,14808,Variable +OpcUa_XmlSchema_FieldMetaData_DataTypeVersion,14809,Variable +OpcUa_XmlSchema_FieldMetaData_DictionaryFragment,14810,Variable +OpcUa_XmlSchema_DataTypeDescription,14811,Variable +OpcUa_XmlSchema_DataTypeDescription_DataTypeVersion,14812,Variable +OpcUa_XmlSchema_DataTypeDescription_DictionaryFragment,14813,Variable +OpcUa_XmlSchema_EnumField,14826,Variable +OpcUa_XmlSchema_EnumField_DataTypeVersion,14827,Variable +OpcUa_XmlSchema_EnumField_DictionaryFragment,14828,Variable +OpcUa_XmlSchema_KeyValuePair,14829,Variable +OpcUa_XmlSchema_KeyValuePair_DataTypeVersion,14830,Variable +OpcUa_XmlSchema_KeyValuePair_DictionaryFragment,14831,Variable +OpcUa_XmlSchema_ConfigurationVersionDataType,14832,Variable +OpcUa_XmlSchema_ConfigurationVersionDataType_DataTypeVersion,14833,Variable +OpcUa_XmlSchema_ConfigurationVersionDataType_DictionaryFragment,14834,Variable +OpcUa_XmlSchema_FieldTargetDataType,14835,Variable +OpcUa_XmlSchema_FieldTargetDataType_DataTypeVersion,14836,Variable +OpcUa_XmlSchema_FieldTargetDataType_DictionaryFragment,14837,Variable +FieldMetaData_Encoding_DefaultBinary,14839,Object +StructureField_Encoding_DefaultBinary,14844,Object +EnumField_Encoding_DefaultBinary,14845,Object +KeyValuePair_Encoding_DefaultBinary,14846,Object +ConfigurationVersionDataType_Encoding_DefaultBinary,14847,Object +FieldTargetDataType_Encoding_DefaultBinary,14848,Object +OpcUa_BinarySchema_DataSetMetaDataType,14849,Variable +OpcUa_BinarySchema_DataSetMetaDataType_DataTypeVersion,14850,Variable +OpcUa_BinarySchema_DataSetMetaDataType_DictionaryFragment,14851,Variable +OpcUa_BinarySchema_FieldMetaData,14852,Variable +OpcUa_BinarySchema_FieldMetaData_DataTypeVersion,14853,Variable +OpcUa_BinarySchema_FieldMetaData_DictionaryFragment,14854,Variable +OpcUa_BinarySchema_DataTypeDescription,14855,Variable +OpcUa_BinarySchema_DataTypeDescription_DataTypeVersion,14856,Variable +OpcUa_BinarySchema_DataTypeDescription_DictionaryFragment,14857,Variable +OpcUa_BinarySchema_EnumField,14870,Variable +OpcUa_BinarySchema_EnumField_DataTypeVersion,14871,Variable +OpcUa_BinarySchema_EnumField_DictionaryFragment,14872,Variable +OpcUa_BinarySchema_KeyValuePair,14873,Variable +OpcUa_BinarySchema_KeyValuePair_DataTypeVersion,14874,Variable +OpcUa_BinarySchema_KeyValuePair_DictionaryFragment,14875,Variable +OpcUa_BinarySchema_ConfigurationVersionDataType,14876,Variable +OpcUa_BinarySchema_ConfigurationVersionDataType_DataTypeVersion,14877,Variable +OpcUa_BinarySchema_ConfigurationVersionDataType_DictionaryFragment,14878,Variable +OpcUa_BinarySchema_FieldTargetDataType_DataTypeVersion,14880,Variable +OpcUa_BinarySchema_FieldTargetDataType_DictionaryFragment,14881,Variable +CertificateExpirationAlarmType_ExpirationLimit,14900,Variable +DataSetToWriter,14936,ReferenceType +DataTypeDictionaryType_Deprecated,15001,Variable +MaxCharacters,15002,Variable +ServerType_UrisVersion,15003,Variable +Server_UrisVersion,15004,Variable +SimpleTypeDescription,15005,DataType +UABinaryFileDataType,15006,DataType +BrokerConnectionTransportDataType,15007,DataType +BrokerTransportQualityOfService,15008,DataType +BrokerTransportQualityOfService_EnumStrings,15009,Variable +SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime,15010,Variable +SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri,15011,Variable +SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount,15012,Variable +AuditConditionResetEventType,15013,ObjectType +AuditConditionResetEventType_EventId,15014,Variable +AuditConditionResetEventType_EventType,15015,Variable +AuditConditionResetEventType_SourceNode,15016,Variable +AuditConditionResetEventType_SourceName,15017,Variable +AuditConditionResetEventType_Time,15018,Variable +AuditConditionResetEventType_ReceiveTime,15019,Variable +AuditConditionResetEventType_LocalTime,15020,Variable +AuditConditionResetEventType_Message,15021,Variable +AuditConditionResetEventType_Severity,15022,Variable +AuditConditionResetEventType_ActionTimeStamp,15023,Variable +AuditConditionResetEventType_Status,15024,Variable +AuditConditionResetEventType_ServerId,15025,Variable +AuditConditionResetEventType_ClientAuditEntryId,15026,Variable +AuditConditionResetEventType_ClientUserId,15027,Variable +AuditConditionResetEventType_MethodId,15028,Variable +AuditConditionResetEventType_InputArguments,15029,Variable +PermissionType_OptionSetValues,15030,Variable +AccessLevelType,15031,DataType +AccessLevelType_OptionSetValues,15032,Variable +EventNotifierType,15033,DataType +EventNotifierType_OptionSetValues,15034,Variable +AccessRestrictionType_OptionSetValues,15035,Variable +AttributeWriteMask_OptionSetValues,15036,Variable +OpcUa_BinarySchema_Deprecated,15037,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues,15038,Variable +OpcUa_XmlSchema_Deprecated,15039,Variable +ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues,15040,Variable +KeyValuePair_Encoding_DefaultJson,15041,Object +IdentityMappingRuleType_Encoding_DefaultJson,15042,Object +SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount,15043,Variable +TrustListDataType_Encoding_DefaultJson,15044,Object +DecimalDataType_Encoding_DefaultJson,15045,Object +SecurityGroupType_KeyLifetime,15046,Variable +SecurityGroupType_SecurityPolicyUri,15047,Variable +SecurityGroupType_MaxFutureKeyCount,15048,Variable +ConfigurationVersionDataType_Encoding_DefaultJson,15049,Object +DataSetMetaDataType_Encoding_DefaultJson,15050,Object +FieldMetaData_Encoding_DefaultJson,15051,Object +PublishedEventsType_ModifyFieldSelection,15052,Method +PublishedEventsType_ModifyFieldSelection_InputArguments,15053,Variable +PublishedEventsTypeModifyFieldSelectionMethodType,15054,Method +PublishedEventsTypeModifyFieldSelectionMethodType_InputArguments,15055,Variable +SecurityGroupType_MaxPastKeyCount,15056,Variable +DataTypeDescription_Encoding_DefaultJson,15057,Object +StructureDescription_Encoding_DefaultJson,15058,Object +EnumDescription_Encoding_DefaultJson,15059,Object +PublishedVariableDataType_Encoding_DefaultJson,15060,Object +FieldTargetDataType_Encoding_DefaultJson,15061,Object +RolePermissionType_Encoding_DefaultJson,15062,Object +DataTypeDefinition_Encoding_DefaultJson,15063,Object +DatagramConnectionTransportType,15064,ObjectType +StructureField_Encoding_DefaultJson,15065,Object +StructureDefinition_Encoding_DefaultJson,15066,Object +EnumDefinition_Encoding_DefaultJson,15067,Object +Node_Encoding_DefaultJson,15068,Object +InstanceNode_Encoding_DefaultJson,15069,Object +TypeNode_Encoding_DefaultJson,15070,Object +ObjectNode_Encoding_DefaultJson,15071,Object +DatagramConnectionTransportType_DiscoveryAddress,15072,Object +ObjectTypeNode_Encoding_DefaultJson,15073,Object +VariableNode_Encoding_DefaultJson,15074,Object +VariableTypeNode_Encoding_DefaultJson,15075,Object +ReferenceTypeNode_Encoding_DefaultJson,15076,Object +MethodNode_Encoding_DefaultJson,15077,Object +ViewNode_Encoding_DefaultJson,15078,Object +DataTypeNode_Encoding_DefaultJson,15079,Object +ReferenceNode_Encoding_DefaultJson,15080,Object +Argument_Encoding_DefaultJson,15081,Object +EnumValueType_Encoding_DefaultJson,15082,Object +EnumField_Encoding_DefaultJson,15083,Object +OptionSet_Encoding_DefaultJson,15084,Object +Union_Encoding_DefaultJson,15085,Object +TimeZoneDataType_Encoding_DefaultJson,15086,Object +ApplicationDescription_Encoding_DefaultJson,15087,Object +RequestHeader_Encoding_DefaultJson,15088,Object +ResponseHeader_Encoding_DefaultJson,15089,Object +ServiceFault_Encoding_DefaultJson,15090,Object +SessionlessInvokeRequestType_Encoding_DefaultJson,15091,Object +SessionlessInvokeResponseType_Encoding_DefaultJson,15092,Object +FindServersRequest_Encoding_DefaultJson,15093,Object +FindServersResponse_Encoding_DefaultJson,15094,Object +ServerOnNetwork_Encoding_DefaultJson,15095,Object +FindServersOnNetworkRequest_Encoding_DefaultJson,15096,Object +FindServersOnNetworkResponse_Encoding_DefaultJson,15097,Object +UserTokenPolicy_Encoding_DefaultJson,15098,Object +EndpointDescription_Encoding_DefaultJson,15099,Object +GetEndpointsRequest_Encoding_DefaultJson,15100,Object +GetEndpointsResponse_Encoding_DefaultJson,15101,Object +RegisteredServer_Encoding_DefaultJson,15102,Object +RegisterServerRequest_Encoding_DefaultJson,15103,Object +RegisterServerResponse_Encoding_DefaultJson,15104,Object +DiscoveryConfiguration_Encoding_DefaultJson,15105,Object +MdnsDiscoveryConfiguration_Encoding_DefaultJson,15106,Object +RegisterServer2Request_Encoding_DefaultJson,15107,Object +SubscribedDataSetType,15108,ObjectType +ChoiceStateType,15109,ObjectType +ChoiceStateType_StateNumber,15110,Variable +TargetVariablesType,15111,ObjectType +HasGuard,15112,ReferenceType +GuardVariableType,15113,VariableType +TargetVariablesType_TargetVariables,15114,Variable +TargetVariablesType_AddTargetVariables,15115,Method +TargetVariablesType_AddTargetVariables_InputArguments,15116,Variable +TargetVariablesType_AddTargetVariables_OutputArguments,15117,Variable +TargetVariablesType_RemoveTargetVariables,15118,Method +TargetVariablesType_RemoveTargetVariables_InputArguments,15119,Variable +TargetVariablesType_RemoveTargetVariables_OutputArguments,15120,Variable +TargetVariablesTypeAddTargetVariablesMethodType,15121,Method +TargetVariablesTypeAddTargetVariablesMethodType_InputArguments,15122,Variable +TargetVariablesTypeAddTargetVariablesMethodType_OutputArguments,15123,Variable +TargetVariablesTypeRemoveTargetVariablesMethodType,15124,Method +TargetVariablesTypeRemoveTargetVariablesMethodType_InputArguments,15125,Variable +TargetVariablesTypeRemoveTargetVariablesMethodType_OutputArguments,15126,Variable +SubscribedDataSetMirrorType,15127,ObjectType +ExpressionGuardVariableType,15128,VariableType +ExpressionGuardVariableType_Expression,15129,Variable +RegisterServer2Response_Encoding_DefaultJson,15130,Object +ChannelSecurityToken_Encoding_DefaultJson,15131,Object +OpenSecureChannelRequest_Encoding_DefaultJson,15132,Object +OpenSecureChannelResponse_Encoding_DefaultJson,15133,Object +CloseSecureChannelRequest_Encoding_DefaultJson,15134,Object +CloseSecureChannelResponse_Encoding_DefaultJson,15135,Object +SignedSoftwareCertificate_Encoding_DefaultJson,15136,Object +SignatureData_Encoding_DefaultJson,15137,Object +CreateSessionRequest_Encoding_DefaultJson,15138,Object +CreateSessionResponse_Encoding_DefaultJson,15139,Object +UserIdentityToken_Encoding_DefaultJson,15140,Object +AnonymousIdentityToken_Encoding_DefaultJson,15141,Object +UserNameIdentityToken_Encoding_DefaultJson,15142,Object +X509IdentityToken_Encoding_DefaultJson,15143,Object +IssuedIdentityToken_Encoding_DefaultJson,15144,Object +ActivateSessionRequest_Encoding_DefaultJson,15145,Object +ActivateSessionResponse_Encoding_DefaultJson,15146,Object +CloseSessionRequest_Encoding_DefaultJson,15147,Object +CloseSessionResponse_Encoding_DefaultJson,15148,Object +CancelRequest_Encoding_DefaultJson,15149,Object +CancelResponse_Encoding_DefaultJson,15150,Object +NodeAttributes_Encoding_DefaultJson,15151,Object +ObjectAttributes_Encoding_DefaultJson,15152,Object +VariableAttributes_Encoding_DefaultJson,15153,Object +DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface,15154,Variable +BrokerConnectionTransportType,15155,ObjectType +BrokerConnectionTransportType_ResourceUri,15156,Variable +MethodAttributes_Encoding_DefaultJson,15157,Object +ObjectTypeAttributes_Encoding_DefaultJson,15158,Object +VariableTypeAttributes_Encoding_DefaultJson,15159,Object +ReferenceTypeAttributes_Encoding_DefaultJson,15160,Object +DataTypeAttributes_Encoding_DefaultJson,15161,Object +ViewAttributes_Encoding_DefaultJson,15162,Object +GenericAttributeValue_Encoding_DefaultJson,15163,Object +GenericAttributes_Encoding_DefaultJson,15164,Object +AddNodesItem_Encoding_DefaultJson,15165,Object +AddNodesResult_Encoding_DefaultJson,15166,Object +AddNodesRequest_Encoding_DefaultJson,15167,Object +AddNodesResponse_Encoding_DefaultJson,15168,Object +AddReferencesItem_Encoding_DefaultJson,15169,Object +AddReferencesRequest_Encoding_DefaultJson,15170,Object +AddReferencesResponse_Encoding_DefaultJson,15171,Object +DeleteNodesItem_Encoding_DefaultJson,15172,Object +DeleteNodesRequest_Encoding_DefaultJson,15173,Object +DeleteNodesResponse_Encoding_DefaultJson,15174,Object +DeleteReferencesItem_Encoding_DefaultJson,15175,Object +DeleteReferencesRequest_Encoding_DefaultJson,15176,Object +DeleteReferencesResponse_Encoding_DefaultJson,15177,Object +BrokerConnectionTransportType_AuthenticationProfileUri,15178,Variable +ViewDescription_Encoding_DefaultJson,15179,Object +BrowseDescription_Encoding_DefaultJson,15180,Object +UserCredentialCertificateType,15181,ObjectType +ReferenceDescription_Encoding_DefaultJson,15182,Object +BrowseResult_Encoding_DefaultJson,15183,Object +BrowseRequest_Encoding_DefaultJson,15184,Object +BrowseResponse_Encoding_DefaultJson,15185,Object +BrowseNextRequest_Encoding_DefaultJson,15186,Object +BrowseNextResponse_Encoding_DefaultJson,15187,Object +RelativePathElement_Encoding_DefaultJson,15188,Object +RelativePath_Encoding_DefaultJson,15189,Object +BrowsePath_Encoding_DefaultJson,15190,Object +BrowsePathTarget_Encoding_DefaultJson,15191,Object +BrowsePathResult_Encoding_DefaultJson,15192,Object +TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson,15193,Object +TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson,15194,Object +RegisterNodesRequest_Encoding_DefaultJson,15195,Object +RegisterNodesResponse_Encoding_DefaultJson,15196,Object +UnregisterNodesRequest_Encoding_DefaultJson,15197,Object +UnregisterNodesResponse_Encoding_DefaultJson,15198,Object +EndpointConfiguration_Encoding_DefaultJson,15199,Object +QueryDataDescription_Encoding_DefaultJson,15200,Object +NodeTypeDescription_Encoding_DefaultJson,15201,Object +QueryDataSet_Encoding_DefaultJson,15202,Object +NodeReference_Encoding_DefaultJson,15203,Object +ContentFilterElement_Encoding_DefaultJson,15204,Object +ContentFilter_Encoding_DefaultJson,15205,Object +FilterOperand_Encoding_DefaultJson,15206,Object +ElementOperand_Encoding_DefaultJson,15207,Object +LiteralOperand_Encoding_DefaultJson,15208,Object +AttributeOperand_Encoding_DefaultJson,15209,Object +SimpleAttributeOperand_Encoding_DefaultJson,15210,Object +ContentFilterElementResult_Encoding_DefaultJson,15211,Object +PublishSubscribeType_GetSecurityKeys,15212,Method +PublishSubscribeType_GetSecurityKeys_InputArguments,15213,Variable +PublishSubscribeType_GetSecurityKeys_OutputArguments,15214,Variable +PublishSubscribe_GetSecurityKeys,15215,Method +PublishSubscribe_GetSecurityKeys_InputArguments,15216,Variable +PublishSubscribe_GetSecurityKeys_OutputArguments,15217,Variable +GetSecurityKeysMethodType,15218,Method +GetSecurityKeysMethodType_InputArguments,15219,Variable +GetSecurityKeysMethodType_OutputArguments,15220,Variable +DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData,15221,Variable +PublishedDataSetType_DataSetWriterName_Placeholder,15222,Object +PublishedDataSetType_DataSetWriterName_Placeholder_Status,15223,Object +PublishedDataSetType_DataSetWriterName_Placeholder_Status_State,15224,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Status_Enable,15225,Method +PublishedDataSetType_DataSetWriterName_Placeholder_Status_Disable,15226,Method +PublishedDataSetType_DataSetWriterName_Placeholder_TransportSettings,15227,Object +ContentFilterResult_Encoding_DefaultJson,15228,Object +PublishedDataSetType_DataSetMetaData,15229,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder,15230,Object +PublishedDataItemsType_DataSetWriterName_Placeholder_Status,15231,Object +PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State,15232,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Status_Enable,15233,Method +PublishedDataItemsType_DataSetWriterName_Placeholder_Status_Disable,15234,Method +PublishedDataItemsType_DataSetWriterName_Placeholder_TransportSettings,15235,Object +ParsingResult_Encoding_DefaultJson,15236,Object +PublishedDataItemsType_DataSetMetaData,15237,Variable +PublishedEventsType_DataSetWriterName_Placeholder,15238,Object +PublishedEventsType_DataSetWriterName_Placeholder_Status,15239,Object +PublishedEventsType_DataSetWriterName_Placeholder_Status_State,15240,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Status_Enable,15241,Method +PublishedEventsType_DataSetWriterName_Placeholder_Status_Disable,15242,Method +PublishedEventsType_DataSetWriterName_Placeholder_TransportSettings,15243,Object +QueryFirstRequest_Encoding_DefaultJson,15244,Object +PublishedEventsType_DataSetMetaData,15245,Variable +BrokerWriterGroupTransportType_ResourceUri,15246,Variable +BrokerWriterGroupTransportType_AuthenticationProfileUri,15247,Variable +CreateCredentialMethodType,15248,Method +BrokerWriterGroupTransportType_RequestedDeliveryGuarantee,15249,Variable +BrokerDataSetWriterTransportType_ResourceUri,15250,Variable +BrokerDataSetWriterTransportType_AuthenticationProfileUri,15251,Variable +QueryFirstResponse_Encoding_DefaultJson,15252,Object +CreateCredentialMethodType_InputArguments,15253,Variable +QueryNextRequest_Encoding_DefaultJson,15254,Object +QueryNextResponse_Encoding_DefaultJson,15255,Object +ReadValueId_Encoding_DefaultJson,15256,Object +ReadRequest_Encoding_DefaultJson,15257,Object +ReadResponse_Encoding_DefaultJson,15258,Object +HistoryReadValueId_Encoding_DefaultJson,15259,Object +HistoryReadResult_Encoding_DefaultJson,15260,Object +HistoryReadDetails_Encoding_DefaultJson,15261,Object +ReadEventDetails_Encoding_DefaultJson,15262,Object +ReadRawModifiedDetails_Encoding_DefaultJson,15263,Object +ReadProcessedDetails_Encoding_DefaultJson,15264,Object +PubSubGroupType_Status,15265,Object +PubSubGroupType_Status_State,15266,Variable +PubSubGroupType_Status_Enable,15267,Method +PubSubGroupType_Status_Disable,15268,Method +ReadAtTimeDetails_Encoding_DefaultJson,15269,Object +HistoryData_Encoding_DefaultJson,15270,Object +ModificationInfo_Encoding_DefaultJson,15271,Object +HistoryModifiedData_Encoding_DefaultJson,15272,Object +HistoryEvent_Encoding_DefaultJson,15273,Object +HistoryReadRequest_Encoding_DefaultJson,15274,Object +HistoryReadResponse_Encoding_DefaultJson,15275,Object +WriteValue_Encoding_DefaultJson,15276,Object +WriteRequest_Encoding_DefaultJson,15277,Object +WriteResponse_Encoding_DefaultJson,15278,Object +HistoryUpdateDetails_Encoding_DefaultJson,15279,Object +UpdateDataDetails_Encoding_DefaultJson,15280,Object +UpdateStructureDataDetails_Encoding_DefaultJson,15281,Object +UpdateEventDetails_Encoding_DefaultJson,15282,Object +DeleteRawModifiedDetails_Encoding_DefaultJson,15283,Object +DeleteAtTimeDetails_Encoding_DefaultJson,15284,Object +DeleteEventDetails_Encoding_DefaultJson,15285,Object +HistoryUpdateResult_Encoding_DefaultJson,15286,Object +HistoryUpdateRequest_Encoding_DefaultJson,15287,Object +HistoryUpdateResponse_Encoding_DefaultJson,15288,Object +CallMethodRequest_Encoding_DefaultJson,15289,Object +CallMethodResult_Encoding_DefaultJson,15290,Object +CallRequest_Encoding_DefaultJson,15291,Object +CallResponse_Encoding_DefaultJson,15292,Object +MonitoringFilter_Encoding_DefaultJson,15293,Object +DataChangeFilter_Encoding_DefaultJson,15294,Object +EventFilter_Encoding_DefaultJson,15295,Object +HasDataSetWriter,15296,ReferenceType +HasDataSetReader,15297,ReferenceType +DataSetWriterType,15298,ObjectType +DataSetWriterType_Status,15299,Object +DataSetWriterType_Status_State,15300,Variable +DataSetWriterType_Status_Enable,15301,Method +DataSetWriterType_Status_Disable,15302,Method +DataSetWriterType_TransportSettings,15303,Object +AggregateConfiguration_Encoding_DefaultJson,15304,Object +DataSetWriterTransportType,15305,ObjectType +DataSetReaderType,15306,ObjectType +DataSetReaderType_Status,15307,Object +DataSetReaderType_Status_State,15308,Variable +DataSetReaderType_Status_Enable,15309,Method +DataSetReaderType_Status_Disable,15310,Method +DataSetReaderType_TransportSettings,15311,Object +AggregateFilter_Encoding_DefaultJson,15312,Object +MonitoringFilterResult_Encoding_DefaultJson,15313,Object +EventFilterResult_Encoding_DefaultJson,15314,Object +AggregateFilterResult_Encoding_DefaultJson,15315,Object +DataSetReaderType_SubscribedDataSet,15316,Object +ElseGuardVariableType,15317,VariableType +BaseAnalogType,15318,VariableType +DataSetReaderTransportType,15319,ObjectType +MonitoringParameters_Encoding_DefaultJson,15320,Object +MonitoredItemCreateRequest_Encoding_DefaultJson,15321,Object +MonitoredItemCreateResult_Encoding_DefaultJson,15322,Object +CreateMonitoredItemsRequest_Encoding_DefaultJson,15323,Object +CreateMonitoredItemsResponse_Encoding_DefaultJson,15324,Object +MonitoredItemModifyRequest_Encoding_DefaultJson,15325,Object +MonitoredItemModifyResult_Encoding_DefaultJson,15326,Object +ModifyMonitoredItemsRequest_Encoding_DefaultJson,15327,Object +ModifyMonitoredItemsResponse_Encoding_DefaultJson,15328,Object +SetMonitoringModeRequest_Encoding_DefaultJson,15329,Object +BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee,15330,Variable +SetMonitoringModeResponse_Encoding_DefaultJson,15331,Object +SetTriggeringRequest_Encoding_DefaultJson,15332,Object +SetTriggeringResponse_Encoding_DefaultJson,15333,Object +BrokerDataSetReaderTransportType_ResourceUri,15334,Variable +DeleteMonitoredItemsRequest_Encoding_DefaultJson,15335,Object +DeleteMonitoredItemsResponse_Encoding_DefaultJson,15336,Object +CreateSubscriptionRequest_Encoding_DefaultJson,15337,Object +CreateSubscriptionResponse_Encoding_DefaultJson,15338,Object +ModifySubscriptionRequest_Encoding_DefaultJson,15339,Object +ModifySubscriptionResponse_Encoding_DefaultJson,15340,Object +SetPublishingModeRequest_Encoding_DefaultJson,15341,Object +SetPublishingModeResponse_Encoding_DefaultJson,15342,Object +NotificationMessage_Encoding_DefaultJson,15343,Object +NotificationData_Encoding_DefaultJson,15344,Object +DataChangeNotification_Encoding_DefaultJson,15345,Object +MonitoredItemNotification_Encoding_DefaultJson,15346,Object +EventNotificationList_Encoding_DefaultJson,15347,Object +EventFieldList_Encoding_DefaultJson,15348,Object +HistoryEventFieldList_Encoding_DefaultJson,15349,Object +StatusChangeNotification_Encoding_DefaultJson,15350,Object +SubscriptionAcknowledgement_Encoding_DefaultJson,15351,Object +PublishRequest_Encoding_DefaultJson,15352,Object +PublishResponse_Encoding_DefaultJson,15353,Object +RepublishRequest_Encoding_DefaultJson,15354,Object +RepublishResponse_Encoding_DefaultJson,15355,Object +TransferResult_Encoding_DefaultJson,15356,Object +TransferSubscriptionsRequest_Encoding_DefaultJson,15357,Object +TransferSubscriptionsResponse_Encoding_DefaultJson,15358,Object +DeleteSubscriptionsRequest_Encoding_DefaultJson,15359,Object +DeleteSubscriptionsResponse_Encoding_DefaultJson,15360,Object +BuildInfo_Encoding_DefaultJson,15361,Object +RedundantServerDataType_Encoding_DefaultJson,15362,Object +EndpointUrlListDataType_Encoding_DefaultJson,15363,Object +NetworkGroupDataType_Encoding_DefaultJson,15364,Object +SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson,15365,Object +ServerDiagnosticsSummaryDataType_Encoding_DefaultJson,15366,Object +ServerStatusDataType_Encoding_DefaultJson,15367,Object +SessionDiagnosticsDataType_Encoding_DefaultJson,15368,Object +SessionSecurityDiagnosticsDataType_Encoding_DefaultJson,15369,Object +ServiceCounterDataType_Encoding_DefaultJson,15370,Object +StatusResult_Encoding_DefaultJson,15371,Object +SubscriptionDiagnosticsDataType_Encoding_DefaultJson,15372,Object +ModelChangeStructureDataType_Encoding_DefaultJson,15373,Object +SemanticChangeStructureDataType_Encoding_DefaultJson,15374,Object +Range_Encoding_DefaultJson,15375,Object +EUInformation_Encoding_DefaultJson,15376,Object +ComplexNumberType_Encoding_DefaultJson,15377,Object +DoubleComplexNumberType_Encoding_DefaultJson,15378,Object +AxisInformation_Encoding_DefaultJson,15379,Object +XVType_Encoding_DefaultJson,15380,Object +ProgramDiagnosticDataType_Encoding_DefaultJson,15381,Object +Annotation_Encoding_DefaultJson,15382,Object +ProgramDiagnostic2Type,15383,VariableType +ProgramDiagnostic2Type_CreateSessionId,15384,Variable +ProgramDiagnostic2Type_CreateClientName,15385,Variable +ProgramDiagnostic2Type_InvocationCreationTime,15386,Variable +ProgramDiagnostic2Type_LastTransitionTime,15387,Variable +ProgramDiagnostic2Type_LastMethodCall,15388,Variable +ProgramDiagnostic2Type_LastMethodSessionId,15389,Variable +ProgramDiagnostic2Type_LastMethodInputArguments,15390,Variable +ProgramDiagnostic2Type_LastMethodOutputArguments,15391,Variable +ProgramDiagnostic2Type_LastMethodInputValues,15392,Variable +ProgramDiagnostic2Type_LastMethodOutputValues,15393,Variable +ProgramDiagnostic2Type_LastMethodCallTime,15394,Variable +ProgramDiagnostic2Type_LastMethodReturnStatus,15395,Variable +ProgramDiagnostic2DataType,15396,DataType +ProgramDiagnostic2DataType_Encoding_DefaultBinary,15397,Object +OpcUa_BinarySchema_ProgramDiagnostic2DataType,15398,Variable +OpcUa_BinarySchema_ProgramDiagnostic2DataType_DataTypeVersion,15399,Variable +OpcUa_BinarySchema_ProgramDiagnostic2DataType_DictionaryFragment,15400,Variable +ProgramDiagnostic2DataType_Encoding_DefaultXml,15401,Object +OpcUa_XmlSchema_ProgramDiagnostic2DataType,15402,Variable +OpcUa_XmlSchema_ProgramDiagnostic2DataType_DataTypeVersion,15403,Variable +OpcUa_XmlSchema_ProgramDiagnostic2DataType_DictionaryFragment,15404,Variable +ProgramDiagnostic2DataType_Encoding_DefaultJson,15405,Object +AccessLevelExType,15406,DataType +AccessLevelExType_OptionSetValues,15407,Variable +RoleSetType_RoleName_Placeholder_ApplicationsExclude,15408,Variable +RoleSetType_RoleName_Placeholder_EndpointsExclude,15409,Variable +RoleType_ApplicationsExclude,15410,Variable +RoleType_EndpointsExclude,15411,Variable +WellKnownRole_Anonymous_ApplicationsExclude,15412,Variable +WellKnownRole_Anonymous_EndpointsExclude,15413,Variable +WellKnownRole_AuthenticatedUser_ApplicationsExclude,15414,Variable +WellKnownRole_AuthenticatedUser_EndpointsExclude,15415,Variable +WellKnownRole_Observer_ApplicationsExclude,15416,Variable +WellKnownRole_Observer_EndpointsExclude,15417,Variable +WellKnownRole_Operator_ApplicationsExclude,15418,Variable +BrokerDataSetReaderTransportType_AuthenticationProfileUri,15419,Variable +BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee,15420,Variable +SimpleTypeDescription_Encoding_DefaultBinary,15421,Object +UABinaryFileDataType_Encoding_DefaultBinary,15422,Object +WellKnownRole_Operator_EndpointsExclude,15423,Variable +WellKnownRole_Engineer_ApplicationsExclude,15424,Variable +WellKnownRole_Engineer_EndpointsExclude,15425,Variable +WellKnownRole_Supervisor_ApplicationsExclude,15426,Variable +WellKnownRole_Supervisor_EndpointsExclude,15427,Variable +WellKnownRole_ConfigureAdmin_ApplicationsExclude,15428,Variable +WellKnownRole_ConfigureAdmin_EndpointsExclude,15429,Variable +WellKnownRole_SecurityAdmin_ApplicationsExclude,15430,Variable +PublishSubscribeType_GetSecurityGroup,15431,Method +PublishSubscribeType_GetSecurityGroup_InputArguments,15432,Variable +PublishSubscribeType_GetSecurityGroup_OutputArguments,15433,Variable +PublishSubscribeType_SecurityGroups,15434,Object +PublishSubscribeType_SecurityGroups_AddSecurityGroup,15435,Method +PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments,15436,Variable +PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments,15437,Variable +PublishSubscribeType_SecurityGroups_RemoveSecurityGroup,15438,Method +PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments,15439,Variable +PublishSubscribe_GetSecurityGroup,15440,Method +PublishSubscribe_GetSecurityGroup_InputArguments,15441,Variable +PublishSubscribe_GetSecurityGroup_OutputArguments,15442,Variable +PublishSubscribe_SecurityGroups,15443,Object +PublishSubscribe_SecurityGroups_AddSecurityGroup,15444,Method +PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments,15445,Variable +PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments,15446,Variable +PublishSubscribe_SecurityGroups_RemoveSecurityGroup,15447,Method +PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments,15448,Variable +GetSecurityGroupMethodType,15449,Method +GetSecurityGroupMethodType_InputArguments,15450,Variable +GetSecurityGroupMethodType_OutputArguments,15451,Variable +SecurityGroupFolderType,15452,ObjectType +SecurityGroupFolderType_SecurityGroupFolderName_Placeholder,15453,Object +SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup,15454,Method +SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments,15455,Variable +SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments,15456,Variable +SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup,15457,Method +SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments,15458,Variable +SecurityGroupFolderType_SecurityGroupName_Placeholder,15459,Object +SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId,15460,Variable +SecurityGroupFolderType_AddSecurityGroup,15461,Method +SecurityGroupFolderType_AddSecurityGroup_InputArguments,15462,Variable +SecurityGroupFolderType_AddSecurityGroup_OutputArguments,15463,Variable +SecurityGroupFolderType_RemoveSecurityGroup,15464,Method +SecurityGroupFolderType_RemoveSecurityGroup_InputArguments,15465,Variable +AddSecurityGroupMethodType,15466,Method +AddSecurityGroupMethodType_InputArguments,15467,Variable +AddSecurityGroupMethodType_OutputArguments,15468,Variable +RemoveSecurityGroupMethodType,15469,Method +RemoveSecurityGroupMethodType_InputArguments,15470,Variable +SecurityGroupType,15471,ObjectType +SecurityGroupType_SecurityGroupId,15472,Variable +DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields,15473,Object +DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField,15474,Method +DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments,15475,Variable +DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments,15476,Variable +DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField,15477,Method +DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments,15478,Variable +BrokerConnectionTransportDataType_Encoding_DefaultBinary,15479,Object +WriterGroupDataType,15480,DataType +PublishedDataSetType_ExtensionFields,15481,Object +PublishedDataSetType_ExtensionFields_AddExtensionField,15482,Method +PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments,15483,Variable +PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments,15484,Variable +PublishedDataSetType_ExtensionFields_RemoveExtensionField,15485,Method +PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments,15486,Variable +StructureDescription,15487,DataType +EnumDescription,15488,DataType +ExtensionFieldsType,15489,ObjectType +ExtensionFieldsType_ExtensionFieldName_Placeholder,15490,Variable +ExtensionFieldsType_AddExtensionField,15491,Method +ExtensionFieldsType_AddExtensionField_InputArguments,15492,Variable +ExtensionFieldsType_AddExtensionField_OutputArguments,15493,Variable +ExtensionFieldsType_RemoveExtensionField,15494,Method +ExtensionFieldsType_RemoveExtensionField_InputArguments,15495,Variable +AddExtensionFieldMethodType,15496,Method +AddExtensionFieldMethodType_InputArguments,15497,Variable +AddExtensionFieldMethodType_OutputArguments,15498,Variable +RemoveExtensionFieldMethodType,15499,Method +RemoveExtensionFieldMethodType_InputArguments,15500,Variable +OpcUa_BinarySchema_SimpleTypeDescription,15501,Variable +NetworkAddressDataType,15502,DataType +PublishedDataItemsType_ExtensionFields,15503,Object +PublishedDataItemsType_ExtensionFields_AddExtensionField,15504,Method +PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments,15505,Variable +PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments,15506,Variable +PublishedDataItemsType_ExtensionFields_RemoveExtensionField,15507,Method +PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments,15508,Variable +OpcUa_BinarySchema_SimpleTypeDescription_DataTypeVersion,15509,Variable +NetworkAddressUrlDataType,15510,DataType +PublishedEventsType_ExtensionFields,15511,Object +PublishedEventsType_ExtensionFields_AddExtensionField,15512,Method +PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments,15513,Variable +PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments,15514,Variable +PublishedEventsType_ExtensionFields_RemoveExtensionField,15515,Method +PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments,15516,Variable +PublishedEventsType_ModifyFieldSelection_OutputArguments,15517,Variable +PublishedEventsTypeModifyFieldSelectionMethodType_OutputArguments,15518,Variable +OpcUa_BinarySchema_SimpleTypeDescription_DictionaryFragment,15519,Variable +ReaderGroupDataType,15520,DataType +OpcUa_BinarySchema_UABinaryFileDataType,15521,Variable +OpcUa_BinarySchema_UABinaryFileDataType_DataTypeVersion,15522,Variable +OpcUa_BinarySchema_UABinaryFileDataType_DictionaryFragment,15523,Variable +OpcUa_BinarySchema_BrokerConnectionTransportDataType,15524,Variable +OpcUa_BinarySchema_BrokerConnectionTransportDataType_DataTypeVersion,15525,Variable +OpcUa_BinarySchema_BrokerConnectionTransportDataType_DictionaryFragment,15526,Variable +WellKnownRole_SecurityAdmin_EndpointsExclude,15527,Variable +EndpointType,15528,DataType +SimpleTypeDescription_Encoding_DefaultXml,15529,Object +PubSubConfigurationDataType,15530,DataType +UABinaryFileDataType_Encoding_DefaultXml,15531,Object +DatagramWriterGroupTransportDataType,15532,DataType +PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface,15533,Variable +DataTypeSchemaHeader,15534,DataType +PubSubStatusEventType,15535,ObjectType +PubSubStatusEventType_EventId,15536,Variable +PubSubStatusEventType_EventType,15537,Variable +PubSubStatusEventType_SourceNode,15538,Variable +PubSubStatusEventType_SourceName,15539,Variable +PubSubStatusEventType_Time,15540,Variable +PubSubStatusEventType_ReceiveTime,15541,Variable +PubSubStatusEventType_LocalTime,15542,Variable +PubSubStatusEventType_Message,15543,Variable +PubSubStatusEventType_Severity,15544,Variable +PubSubStatusEventType_ConnectionId,15545,Variable +PubSubStatusEventType_GroupId,15546,Variable +PubSubStatusEventType_State,15547,Variable +PubSubTransportLimitsExceedEventType,15548,ObjectType +PubSubTransportLimitsExceedEventType_EventId,15549,Variable +PubSubTransportLimitsExceedEventType_EventType,15550,Variable +PubSubTransportLimitsExceedEventType_SourceNode,15551,Variable +PubSubTransportLimitsExceedEventType_SourceName,15552,Variable +PubSubTransportLimitsExceedEventType_Time,15553,Variable +PubSubTransportLimitsExceedEventType_ReceiveTime,15554,Variable +PubSubTransportLimitsExceedEventType_LocalTime,15555,Variable +PubSubTransportLimitsExceedEventType_Message,15556,Variable +PubSubTransportLimitsExceedEventType_Severity,15557,Variable +PubSubTransportLimitsExceedEventType_ConnectionId,15558,Variable +PubSubTransportLimitsExceedEventType_GroupId,15559,Variable +PubSubTransportLimitsExceedEventType_State,15560,Variable +PubSubTransportLimitsExceedEventType_Actual,15561,Variable +PubSubTransportLimitsExceedEventType_Maximum,15562,Variable +PubSubCommunicationFailureEventType,15563,ObjectType +PubSubCommunicationFailureEventType_EventId,15564,Variable +PubSubCommunicationFailureEventType_EventType,15565,Variable +PubSubCommunicationFailureEventType_SourceNode,15566,Variable +PubSubCommunicationFailureEventType_SourceName,15567,Variable +PubSubCommunicationFailureEventType_Time,15568,Variable +PubSubCommunicationFailureEventType_ReceiveTime,15569,Variable +PubSubCommunicationFailureEventType_LocalTime,15570,Variable +PubSubCommunicationFailureEventType_Message,15571,Variable +PubSubCommunicationFailureEventType_Severity,15572,Variable +PubSubCommunicationFailureEventType_ConnectionId,15573,Variable +PubSubCommunicationFailureEventType_GroupId,15574,Variable +PubSubCommunicationFailureEventType_State,15575,Variable +PubSubCommunicationFailureEventType_Error,15576,Variable +DataSetFieldFlags_OptionSetValues,15577,Variable +PublishedDataSetDataType,15578,DataType +BrokerConnectionTransportDataType_Encoding_DefaultXml,15579,Object +PublishedDataSetSourceDataType,15580,DataType +PublishedDataItemsDataType,15581,DataType +PublishedEventsDataType,15582,DataType +DataSetFieldContentMask,15583,DataType +DataSetFieldContentMask_OptionSetValues,15584,Variable +OpcUa_XmlSchema_SimpleTypeDescription,15585,Variable +OpcUa_XmlSchema_SimpleTypeDescription_DataTypeVersion,15586,Variable +OpcUa_XmlSchema_SimpleTypeDescription_DictionaryFragment,15587,Variable +OpcUa_XmlSchema_UABinaryFileDataType,15588,Variable +StructureDescription_Encoding_DefaultXml,15589,Object +EnumDescription_Encoding_DefaultXml,15590,Object +OpcUa_XmlSchema_StructureDescription,15591,Variable +OpcUa_XmlSchema_StructureDescription_DataTypeVersion,15592,Variable +OpcUa_XmlSchema_StructureDescription_DictionaryFragment,15593,Variable +OpcUa_XmlSchema_EnumDescription,15594,Variable +OpcUa_XmlSchema_EnumDescription_DataTypeVersion,15595,Variable +OpcUa_XmlSchema_EnumDescription_DictionaryFragment,15596,Variable +DataSetWriterDataType,15597,DataType +DataSetWriterTransportDataType,15598,DataType +OpcUa_BinarySchema_StructureDescription,15599,Variable +OpcUa_BinarySchema_StructureDescription_DataTypeVersion,15600,Variable +OpcUa_BinarySchema_StructureDescription_DictionaryFragment,15601,Variable +OpcUa_BinarySchema_EnumDescription,15602,Variable +OpcUa_BinarySchema_EnumDescription_DataTypeVersion,15603,Variable +OpcUa_BinarySchema_EnumDescription_DictionaryFragment,15604,Variable +DataSetWriterMessageDataType,15605,DataType +Server_ServerCapabilities_RoleSet,15606,Object +RoleSetType,15607,ObjectType +RoleSetType_RoleName_Placeholder,15608,Object +PubSubGroupDataType,15609,DataType +OpcUa_XmlSchema_UABinaryFileDataType_DataTypeVersion,15610,Variable +WriterGroupTransportDataType,15611,DataType +RoleSetType_RoleName_Placeholder_AddIdentity,15612,Method +RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments,15613,Variable +RoleSetType_RoleName_Placeholder_RemoveIdentity,15614,Method +RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments,15615,Variable +WriterGroupMessageDataType,15616,DataType +PubSubConnectionDataType,15617,DataType +ConnectionTransportDataType,15618,DataType +OpcUa_XmlSchema_UABinaryFileDataType_DictionaryFragment,15619,Variable +RoleType,15620,ObjectType +ReaderGroupTransportDataType,15621,DataType +ReaderGroupMessageDataType,15622,DataType +DataSetReaderDataType,15623,DataType +RoleType_AddIdentity,15624,Method +RoleType_AddIdentity_InputArguments,15625,Variable +RoleType_RemoveIdentity,15626,Method +RoleType_RemoveIdentity_InputArguments,15627,Variable +DataSetReaderTransportDataType,15628,DataType +DataSetReaderMessageDataType,15629,DataType +SubscribedDataSetDataType,15630,DataType +TargetVariablesDataType,15631,DataType +IdentityCriteriaType,15632,DataType +IdentityCriteriaType_EnumValues,15633,Variable +IdentityMappingRuleType,15634,DataType +SubscribedDataSetMirrorDataType,15635,DataType +AddIdentityMethodType,15636,Method +AddIdentityMethodType_InputArguments,15637,Variable +RemoveIdentityMethodType,15638,Method +RemoveIdentityMethodType_InputArguments,15639,Variable +OpcUa_XmlSchema_BrokerConnectionTransportDataType,15640,Variable +DataSetOrderingType_EnumStrings,15641,Variable +UadpNetworkMessageContentMask,15642,DataType +UadpNetworkMessageContentMask_OptionSetValues,15643,Variable +WellKnownRole_Anonymous,15644,Object +UadpWriterGroupMessageDataType,15645,DataType +UadpDataSetMessageContentMask,15646,DataType +UadpDataSetMessageContentMask_OptionSetValues,15647,Variable +WellKnownRole_Anonymous_AddIdentity,15648,Method +WellKnownRole_Anonymous_AddIdentity_InputArguments,15649,Variable +WellKnownRole_Anonymous_RemoveIdentity,15650,Method +WellKnownRole_Anonymous_RemoveIdentity_InputArguments,15651,Variable +UadpDataSetWriterMessageDataType,15652,DataType +UadpDataSetReaderMessageDataType,15653,DataType +JsonNetworkMessageContentMask,15654,DataType +JsonNetworkMessageContentMask_OptionSetValues,15655,Variable +WellKnownRole_AuthenticatedUser,15656,Object +JsonWriterGroupMessageDataType,15657,DataType +JsonDataSetMessageContentMask,15658,DataType +JsonDataSetMessageContentMask_OptionSetValues,15659,Variable +WellKnownRole_AuthenticatedUser_AddIdentity,15660,Method +WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments,15661,Variable +WellKnownRole_AuthenticatedUser_RemoveIdentity,15662,Method +WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments,15663,Variable +JsonDataSetWriterMessageDataType,15664,DataType +JsonDataSetReaderMessageDataType,15665,DataType +OpcUa_XmlSchema_BrokerConnectionTransportDataType_DataTypeVersion,15666,Variable +BrokerWriterGroupTransportDataType,15667,DataType +WellKnownRole_Observer,15668,Object +BrokerDataSetWriterTransportDataType,15669,DataType +BrokerDataSetReaderTransportDataType,15670,DataType +EndpointType_Encoding_DefaultBinary,15671,Object +WellKnownRole_Observer_AddIdentity,15672,Method +WellKnownRole_Observer_AddIdentity_InputArguments,15673,Variable +WellKnownRole_Observer_RemoveIdentity,15674,Method +WellKnownRole_Observer_RemoveIdentity_InputArguments,15675,Variable +DataTypeSchemaHeader_Encoding_DefaultBinary,15676,Object +PublishedDataSetDataType_Encoding_DefaultBinary,15677,Object +PublishedDataSetSourceDataType_Encoding_DefaultBinary,15678,Object +PublishedDataItemsDataType_Encoding_DefaultBinary,15679,Object +WellKnownRole_Operator,15680,Object +PublishedEventsDataType_Encoding_DefaultBinary,15681,Object +DataSetWriterDataType_Encoding_DefaultBinary,15682,Object +DataSetWriterTransportDataType_Encoding_DefaultBinary,15683,Object +WellKnownRole_Operator_AddIdentity,15684,Method +WellKnownRole_Operator_AddIdentity_InputArguments,15685,Variable +WellKnownRole_Operator_RemoveIdentity,15686,Method +WellKnownRole_Operator_RemoveIdentity_InputArguments,15687,Variable +DataSetWriterMessageDataType_Encoding_DefaultBinary,15688,Object +PubSubGroupDataType_Encoding_DefaultBinary,15689,Object +OpcUa_XmlSchema_BrokerConnectionTransportDataType_DictionaryFragment,15690,Variable +WriterGroupTransportDataType_Encoding_DefaultBinary,15691,Object +WellKnownRole_Supervisor,15692,Object +WriterGroupMessageDataType_Encoding_DefaultBinary,15693,Object +PubSubConnectionDataType_Encoding_DefaultBinary,15694,Object +ConnectionTransportDataType_Encoding_DefaultBinary,15695,Object +WellKnownRole_Supervisor_AddIdentity,15696,Method +WellKnownRole_Supervisor_AddIdentity_InputArguments,15697,Variable +WellKnownRole_Supervisor_RemoveIdentity,15698,Method +WellKnownRole_Supervisor_RemoveIdentity_InputArguments,15699,Variable +SimpleTypeDescription_Encoding_DefaultJson,15700,Object +ReaderGroupTransportDataType_Encoding_DefaultBinary,15701,Object +ReaderGroupMessageDataType_Encoding_DefaultBinary,15702,Object +DataSetReaderDataType_Encoding_DefaultBinary,15703,Object +WellKnownRole_SecurityAdmin,15704,Object +DataSetReaderTransportDataType_Encoding_DefaultBinary,15705,Object +DataSetReaderMessageDataType_Encoding_DefaultBinary,15706,Object +SubscribedDataSetDataType_Encoding_DefaultBinary,15707,Object +WellKnownRole_SecurityAdmin_AddIdentity,15708,Method +WellKnownRole_SecurityAdmin_AddIdentity_InputArguments,15709,Variable +WellKnownRole_SecurityAdmin_RemoveIdentity,15710,Method +WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments,15711,Variable +TargetVariablesDataType_Encoding_DefaultBinary,15712,Object +SubscribedDataSetMirrorDataType_Encoding_DefaultBinary,15713,Object +UABinaryFileDataType_Encoding_DefaultJson,15714,Object +UadpWriterGroupMessageDataType_Encoding_DefaultBinary,15715,Object +WellKnownRole_ConfigureAdmin,15716,Object +UadpDataSetWriterMessageDataType_Encoding_DefaultBinary,15717,Object +UadpDataSetReaderMessageDataType_Encoding_DefaultBinary,15718,Object +JsonWriterGroupMessageDataType_Encoding_DefaultBinary,15719,Object +WellKnownRole_ConfigureAdmin_AddIdentity,15720,Method +WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments,15721,Variable +WellKnownRole_ConfigureAdmin_RemoveIdentity,15722,Method +WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments,15723,Variable +JsonDataSetWriterMessageDataType_Encoding_DefaultBinary,15724,Object +JsonDataSetReaderMessageDataType_Encoding_DefaultBinary,15725,Object +BrokerConnectionTransportDataType_Encoding_DefaultJson,15726,Object +BrokerWriterGroupTransportDataType_Encoding_DefaultBinary,15727,Object +IdentityMappingRuleType_Encoding_DefaultXml,15728,Object +BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary,15729,Object +OpcUa_XmlSchema_IdentityMappingRuleType,15730,Variable +OpcUa_XmlSchema_IdentityMappingRuleType_DataTypeVersion,15731,Variable +OpcUa_XmlSchema_IdentityMappingRuleType_DictionaryFragment,15732,Variable +BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary,15733,Object +OpcUa_BinarySchema_EndpointType,15734,Variable +OpcUa_BinarySchema_EndpointType_DataTypeVersion,15735,Variable +IdentityMappingRuleType_Encoding_DefaultBinary,15736,Object +OpcUa_BinarySchema_EndpointType_DictionaryFragment,15737,Variable +OpcUa_BinarySchema_IdentityMappingRuleType,15738,Variable +OpcUa_BinarySchema_IdentityMappingRuleType_DataTypeVersion,15739,Variable +OpcUa_BinarySchema_IdentityMappingRuleType_DictionaryFragment,15740,Variable +OpcUa_BinarySchema_DataTypeSchemaHeader,15741,Variable +OpcUa_BinarySchema_DataTypeSchemaHeader_DataTypeVersion,15742,Variable +OpcUa_BinarySchema_DataTypeSchemaHeader_DictionaryFragment,15743,Variable +TemporaryFileTransferType,15744,ObjectType +TemporaryFileTransferType_ClientProcessingTimeout,15745,Variable +TemporaryFileTransferType_GenerateFileForRead,15746,Method +TemporaryFileTransferType_GenerateFileForRead_InputArguments,15747,Variable +TemporaryFileTransferType_GenerateFileForRead_OutputArguments,15748,Variable +TemporaryFileTransferType_GenerateFileForWrite,15749,Method +TemporaryFileTransferType_GenerateFileForWrite_OutputArguments,15750,Variable +TemporaryFileTransferType_CloseAndCommit,15751,Method +TemporaryFileTransferType_CloseAndCommit_InputArguments,15752,Variable +TemporaryFileTransferType_CloseAndCommit_OutputArguments,15753,Variable +TemporaryFileTransferType_TransferState_Placeholder,15754,Object +TemporaryFileTransferType_TransferState_Placeholder_CurrentState,15755,Variable +TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id,15756,Variable +TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Name,15757,Variable +TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Number,15758,Variable +TemporaryFileTransferType_TransferState_Placeholder_CurrentState_EffectiveDisplayName,15759,Variable +TemporaryFileTransferType_TransferState_Placeholder_LastTransition,15760,Variable +TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id,15761,Variable +TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Name,15762,Variable +TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Number,15763,Variable +TemporaryFileTransferType_TransferState_Placeholder_LastTransition_TransitionTime,15764,Variable +TemporaryFileTransferType_TransferState_Placeholder_LastTransition_EffectiveTransitionTime,15765,Variable +OpcUa_BinarySchema_PublishedDataSetDataType,15766,Variable +OpcUa_BinarySchema_PublishedDataSetDataType_DataTypeVersion,15767,Variable +OpcUa_BinarySchema_PublishedDataSetDataType_DictionaryFragment,15768,Variable +OpcUa_BinarySchema_PublishedDataSetSourceDataType,15769,Variable +OpcUa_BinarySchema_PublishedDataSetSourceDataType_DataTypeVersion,15770,Variable +OpcUa_BinarySchema_PublishedDataSetSourceDataType_DictionaryFragment,15771,Variable +OpcUa_BinarySchema_PublishedDataItemsDataType,15772,Variable +OpcUa_BinarySchema_PublishedDataItemsDataType_DataTypeVersion,15773,Variable +OpcUa_BinarySchema_PublishedDataItemsDataType_DictionaryFragment,15774,Variable +OpcUa_BinarySchema_PublishedEventsDataType,15775,Variable +OpcUa_BinarySchema_PublishedEventsDataType_DataTypeVersion,15776,Variable +OpcUa_BinarySchema_PublishedEventsDataType_DictionaryFragment,15777,Variable +OpcUa_BinarySchema_DataSetWriterDataType,15778,Variable +OpcUa_BinarySchema_DataSetWriterDataType_DataTypeVersion,15779,Variable +OpcUa_BinarySchema_DataSetWriterDataType_DictionaryFragment,15780,Variable +OpcUa_BinarySchema_DataSetWriterTransportDataType,15781,Variable +OpcUa_BinarySchema_DataSetWriterTransportDataType_DataTypeVersion,15782,Variable +OpcUa_BinarySchema_DataSetWriterTransportDataType_DictionaryFragment,15783,Variable +OpcUa_BinarySchema_DataSetWriterMessageDataType,15784,Variable +OpcUa_BinarySchema_DataSetWriterMessageDataType_DataTypeVersion,15785,Variable +OpcUa_BinarySchema_DataSetWriterMessageDataType_DictionaryFragment,15786,Variable +OpcUa_BinarySchema_PubSubGroupDataType,15787,Variable +OpcUa_BinarySchema_PubSubGroupDataType_DataTypeVersion,15788,Variable +OpcUa_BinarySchema_PubSubGroupDataType_DictionaryFragment,15789,Variable +PublishSubscribe_ConnectionName_Placeholder,15790,Object +PublishSubscribe_ConnectionName_Placeholder_PublisherId,15791,Variable +PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri,15792,Variable +OpcUa_BinarySchema_WriterGroupTransportDataType,15793,Variable +TemporaryFileTransferType_TransferState_Placeholder_Reset,15794,Method +GenerateFileForReadMethodType,15795,Method +GenerateFileForReadMethodType_InputArguments,15796,Variable +GenerateFileForReadMethodType_OutputArguments,15797,Variable +GenerateFileForWriteMethodType,15798,Method +GenerateFileForWriteMethodType_OutputArguments,15799,Variable +CloseAndCommitMethodType,15800,Method +CloseAndCommitMethodType_InputArguments,15801,Variable +CloseAndCommitMethodType_OutputArguments,15802,Variable +FileTransferStateMachineType,15803,ObjectType +FileTransferStateMachineType_CurrentState,15804,Variable +FileTransferStateMachineType_CurrentState_Id,15805,Variable +FileTransferStateMachineType_CurrentState_Name,15806,Variable +FileTransferStateMachineType_CurrentState_Number,15807,Variable +FileTransferStateMachineType_CurrentState_EffectiveDisplayName,15808,Variable +FileTransferStateMachineType_LastTransition,15809,Variable +FileTransferStateMachineType_LastTransition_Id,15810,Variable +FileTransferStateMachineType_LastTransition_Name,15811,Variable +FileTransferStateMachineType_LastTransition_Number,15812,Variable +FileTransferStateMachineType_LastTransition_TransitionTime,15813,Variable +FileTransferStateMachineType_LastTransition_EffectiveTransitionTime,15814,Variable +FileTransferStateMachineType_Idle,15815,Object +FileTransferStateMachineType_Idle_StateNumber,15816,Variable +FileTransferStateMachineType_ReadPrepare,15817,Object +FileTransferStateMachineType_ReadPrepare_StateNumber,15818,Variable +FileTransferStateMachineType_ReadTransfer,15819,Object +FileTransferStateMachineType_ReadTransfer_StateNumber,15820,Variable +FileTransferStateMachineType_ApplyWrite,15821,Object +FileTransferStateMachineType_ApplyWrite_StateNumber,15822,Variable +FileTransferStateMachineType_Error,15823,Object +FileTransferStateMachineType_Error_StateNumber,15824,Variable +FileTransferStateMachineType_IdleToReadPrepare,15825,Object +FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber,15826,Variable +FileTransferStateMachineType_ReadPrepareToReadTransfer,15827,Object +FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber,15828,Variable +FileTransferStateMachineType_ReadTransferToIdle,15829,Object +FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber,15830,Variable +FileTransferStateMachineType_IdleToApplyWrite,15831,Object +FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber,15832,Variable +FileTransferStateMachineType_ApplyWriteToIdle,15833,Object +FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber,15834,Variable +FileTransferStateMachineType_ReadPrepareToError,15835,Object +FileTransferStateMachineType_ReadPrepareToError_TransitionNumber,15836,Variable +FileTransferStateMachineType_ReadTransferToError,15837,Object +FileTransferStateMachineType_ReadTransferToError_TransitionNumber,15838,Variable +FileTransferStateMachineType_ApplyWriteToError,15839,Object +FileTransferStateMachineType_ApplyWriteToError_TransitionNumber,15840,Variable +FileTransferStateMachineType_ErrorToIdle,15841,Object +FileTransferStateMachineType_ErrorToIdle_TransitionNumber,15842,Variable +FileTransferStateMachineType_Reset,15843,Method +PublishSubscribeType_Status,15844,Object +PublishSubscribeType_Status_State,15845,Variable +PublishSubscribeType_Status_Enable,15846,Method +PublishSubscribeType_Status_Disable,15847,Method +PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections,15848,Variable +PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_SelectionDescriptions,15849,Variable +PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_RestrictToList,15850,Variable +PublishSubscribe_ConnectionName_Placeholder_Address,15851,Object +OpcUa_BinarySchema_WriterGroupTransportDataType_DataTypeVersion,15852,Variable +OpcUa_BinarySchema_WriterGroupTransportDataType_DictionaryFragment,15853,Variable +OpcUa_BinarySchema_WriterGroupMessageDataType,15854,Variable +OpcUa_BinarySchema_WriterGroupMessageDataType_DataTypeVersion,15855,Variable +OpcUa_BinarySchema_WriterGroupMessageDataType_DictionaryFragment,15856,Variable +OpcUa_BinarySchema_PubSubConnectionDataType,15857,Variable +OpcUa_BinarySchema_PubSubConnectionDataType_DataTypeVersion,15858,Variable +OpcUa_BinarySchema_PubSubConnectionDataType_DictionaryFragment,15859,Variable +OpcUa_BinarySchema_ConnectionTransportDataType,15860,Variable +OpcUa_BinarySchema_ConnectionTransportDataType_DataTypeVersion,15861,Variable +OpcUa_BinarySchema_ConnectionTransportDataType_DictionaryFragment,15862,Variable +PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface,15863,Variable +PublishSubscribe_ConnectionName_Placeholder_TransportSettings,15864,Object +PublishSubscribe_ConnectionName_Placeholder_Status,15865,Object +OpcUa_BinarySchema_ReaderGroupTransportDataType,15866,Variable +OpcUa_BinarySchema_ReaderGroupTransportDataType_DataTypeVersion,15867,Variable +OpcUa_BinarySchema_ReaderGroupTransportDataType_DictionaryFragment,15868,Variable +OpcUa_BinarySchema_ReaderGroupMessageDataType,15869,Variable +OpcUa_BinarySchema_ReaderGroupMessageDataType_DataTypeVersion,15870,Variable +OpcUa_BinarySchema_ReaderGroupMessageDataType_DictionaryFragment,15871,Variable +OpcUa_BinarySchema_DataSetReaderDataType,15872,Variable +OpcUa_BinarySchema_DataSetReaderDataType_DataTypeVersion,15873,Variable +OverrideValueHandling,15874,DataType +OverrideValueHandling_EnumStrings,15875,Variable +OpcUa_BinarySchema_DataSetReaderDataType_DictionaryFragment,15876,Variable +OpcUa_BinarySchema_DataSetReaderTransportDataType,15877,Variable +OpcUa_BinarySchema_DataSetReaderTransportDataType_DataTypeVersion,15878,Variable +OpcUa_BinarySchema_DataSetReaderTransportDataType_DictionaryFragment,15879,Variable +OpcUa_BinarySchema_DataSetReaderMessageDataType,15880,Variable +OpcUa_BinarySchema_DataSetReaderMessageDataType_DataTypeVersion,15881,Variable +OpcUa_BinarySchema_DataSetReaderMessageDataType_DictionaryFragment,15882,Variable +OpcUa_BinarySchema_SubscribedDataSetDataType,15883,Variable +OpcUa_BinarySchema_SubscribedDataSetDataType_DataTypeVersion,15884,Variable +OpcUa_BinarySchema_SubscribedDataSetDataType_DictionaryFragment,15885,Variable +OpcUa_BinarySchema_TargetVariablesDataType,15886,Variable +OpcUa_BinarySchema_TargetVariablesDataType_DataTypeVersion,15887,Variable +OpcUa_BinarySchema_TargetVariablesDataType_DictionaryFragment,15888,Variable +OpcUa_BinarySchema_SubscribedDataSetMirrorDataType,15889,Variable +OpcUa_BinarySchema_SubscribedDataSetMirrorDataType_DataTypeVersion,15890,Variable +OpcUa_BinarySchema_SubscribedDataSetMirrorDataType_DictionaryFragment,15891,Variable +PublishSubscribe_ConnectionName_Placeholder_Status_State,15892,Variable +PublishSubscribe_ConnectionName_Placeholder_Status_Enable,15893,Method +PublishSubscribe_ConnectionName_Placeholder_Status_Disable,15894,Method +OpcUa_BinarySchema_UadpWriterGroupMessageDataType,15895,Variable +OpcUa_BinarySchema_UadpWriterGroupMessageDataType_DataTypeVersion,15896,Variable +OpcUa_BinarySchema_UadpWriterGroupMessageDataType_DictionaryFragment,15897,Variable +OpcUa_BinarySchema_UadpDataSetWriterMessageDataType,15898,Variable +OpcUa_BinarySchema_UadpDataSetWriterMessageDataType_DataTypeVersion,15899,Variable +OpcUa_BinarySchema_UadpDataSetWriterMessageDataType_DictionaryFragment,15900,Variable +SessionlessInvokeRequestType,15901,DataType +SessionlessInvokeRequestType_Encoding_DefaultXml,15902,Object +SessionlessInvokeRequestType_Encoding_DefaultBinary,15903,Object +DataSetFieldFlags,15904,DataType +PublishSubscribeType_ConnectionName_Placeholder_TransportSettings,15905,Object +PubSubKeyServiceType,15906,ObjectType +PubSubKeyServiceType_GetSecurityKeys,15907,Method +PubSubKeyServiceType_GetSecurityKeys_InputArguments,15908,Variable +PubSubKeyServiceType_GetSecurityKeys_OutputArguments,15909,Variable +PubSubKeyServiceType_GetSecurityGroup,15910,Method +PubSubKeyServiceType_GetSecurityGroup_InputArguments,15911,Variable +PubSubKeyServiceType_GetSecurityGroup_OutputArguments,15912,Variable +PubSubKeyServiceType_SecurityGroups,15913,Object +PubSubKeyServiceType_SecurityGroups_AddSecurityGroup,15914,Method +PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments,15915,Variable +PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments,15916,Variable +PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup,15917,Method +PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments,15918,Variable +OpcUa_BinarySchema_UadpDataSetReaderMessageDataType,15919,Variable +OpcUa_BinarySchema_UadpDataSetReaderMessageDataType_DataTypeVersion,15920,Variable +OpcUa_BinarySchema_UadpDataSetReaderMessageDataType_DictionaryFragment,15921,Variable +OpcUa_BinarySchema_JsonWriterGroupMessageDataType,15922,Variable +OpcUa_BinarySchema_JsonWriterGroupMessageDataType_DataTypeVersion,15923,Variable +OpcUa_BinarySchema_JsonWriterGroupMessageDataType_DictionaryFragment,15924,Variable +OpcUa_BinarySchema_JsonDataSetWriterMessageDataType,15925,Variable +PubSubGroupType_SecurityMode,15926,Variable +PubSubGroupType_SecurityGroupId,15927,Variable +PubSubGroupType_SecurityKeyServices,15928,Variable +OpcUa_BinarySchema_JsonDataSetWriterMessageDataType_DataTypeVersion,15929,Variable +OpcUa_BinarySchema_JsonDataSetWriterMessageDataType_DictionaryFragment,15930,Variable +OpcUa_BinarySchema_JsonDataSetReaderMessageDataType,15931,Variable +DataSetReaderType_SecurityMode,15932,Variable +DataSetReaderType_SecurityGroupId,15933,Variable +DataSetReaderType_SecurityKeyServices,15934,Variable +OpcUa_BinarySchema_JsonDataSetReaderMessageDataType_DataTypeVersion,15935,Variable +OpcUa_BinarySchema_JsonDataSetReaderMessageDataType_DictionaryFragment,15936,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics,15937,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel,15938,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation,15939,Variable +OpcUa_BinarySchema_BrokerWriterGroupTransportDataType,15940,Variable +OpcUa_BinarySchema_BrokerWriterGroupTransportDataType_DataTypeVersion,15941,Variable +OpcUa_BinarySchema_BrokerWriterGroupTransportDataType_DictionaryFragment,15942,Variable +OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType,15943,Variable +OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType_DataTypeVersion,15944,Variable +OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType_DictionaryFragment,15945,Variable +OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType,15946,Variable +OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType_DataTypeVersion,15947,Variable +OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType_DictionaryFragment,15948,Variable +EndpointType_Encoding_DefaultXml,15949,Object +DataTypeSchemaHeader_Encoding_DefaultXml,15950,Object +PublishedDataSetDataType_Encoding_DefaultXml,15951,Object +PublishedDataSetSourceDataType_Encoding_DefaultXml,15952,Object +PublishedDataItemsDataType_Encoding_DefaultXml,15953,Object +PublishedEventsDataType_Encoding_DefaultXml,15954,Object +DataSetWriterDataType_Encoding_DefaultXml,15955,Object +DataSetWriterTransportDataType_Encoding_DefaultXml,15956,Object +OPCUANamespaceMetadata,15957,Object +OPCUANamespaceMetadata_NamespaceUri,15958,Variable +OPCUANamespaceMetadata_NamespaceVersion,15959,Variable +OPCUANamespaceMetadata_NamespacePublicationDate,15960,Variable +OPCUANamespaceMetadata_IsNamespaceSubset,15961,Variable +OPCUANamespaceMetadata_StaticNodeIdTypes,15962,Variable +OPCUANamespaceMetadata_StaticNumericNodeIdRange,15963,Variable +OPCUANamespaceMetadata_StaticStringNodeIdPattern,15964,Variable +OPCUANamespaceMetadata_NamespaceFile,15965,Object +OPCUANamespaceMetadata_NamespaceFile_Size,15966,Variable +OPCUANamespaceMetadata_NamespaceFile_Writable,15967,Variable +OPCUANamespaceMetadata_NamespaceFile_UserWritable,15968,Variable +OPCUANamespaceMetadata_NamespaceFile_OpenCount,15969,Variable +OPCUANamespaceMetadata_NamespaceFile_MimeType,15970,Variable +OPCUANamespaceMetadata_NamespaceFile_Open,15971,Method +OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments,15972,Variable +OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments,15973,Variable +OPCUANamespaceMetadata_NamespaceFile_Close,15974,Method +OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments,15975,Variable +OPCUANamespaceMetadata_NamespaceFile_Read,15976,Method +OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments,15977,Variable +OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments,15978,Variable +OPCUANamespaceMetadata_NamespaceFile_Write,15979,Method +OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments,15980,Variable +OPCUANamespaceMetadata_NamespaceFile_GetPosition,15981,Method +OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments,15982,Variable +OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments,15983,Variable +OPCUANamespaceMetadata_NamespaceFile_SetPosition,15984,Method +OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments,15985,Variable +OPCUANamespaceMetadata_NamespaceFile_ExportNamespace,15986,Method +DataSetWriterMessageDataType_Encoding_DefaultXml,15987,Object +PubSubGroupDataType_Encoding_DefaultXml,15988,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active,15989,Variable +WriterGroupTransportDataType_Encoding_DefaultXml,15990,Object +WriterGroupMessageDataType_Encoding_DefaultXml,15991,Object +PubSubConnectionDataType_Encoding_DefaultXml,15992,Object +ConnectionTransportDataType_Encoding_DefaultXml,15993,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification,15994,Variable +ReaderGroupTransportDataType_Encoding_DefaultXml,15995,Object +ReaderGroupMessageDataType_Encoding_DefaultXml,15996,Object +RoleSetType_AddRole,15997,Method +RoleSetType_AddRole_InputArguments,15998,Variable +RoleSetType_AddRole_OutputArguments,15999,Variable +RoleSetType_RemoveRole,16000,Method +RoleSetType_RemoveRole_InputArguments,16001,Variable +AddRoleMethodType,16002,Method +AddRoleMethodType_InputArguments,16003,Variable +AddRoleMethodType_OutputArguments,16004,Variable +RemoveRoleMethodType,16005,Method +RemoveRoleMethodType_InputArguments,16006,Variable +DataSetReaderDataType_Encoding_DefaultXml,16007,Object +DataSetReaderTransportDataType_Encoding_DefaultXml,16008,Object +DataSetReaderMessageDataType_Encoding_DefaultXml,16009,Object +SubscribedDataSetDataType_Encoding_DefaultXml,16010,Object +TargetVariablesDataType_Encoding_DefaultXml,16011,Object +SubscribedDataSetMirrorDataType_Encoding_DefaultXml,16012,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,16013,Variable +UadpWriterGroupMessageDataType_Encoding_DefaultXml,16014,Object +UadpDataSetWriterMessageDataType_Encoding_DefaultXml,16015,Object +UadpDataSetReaderMessageDataType_Encoding_DefaultXml,16016,Object +JsonWriterGroupMessageDataType_Encoding_DefaultXml,16017,Object +JsonDataSetWriterMessageDataType_Encoding_DefaultXml,16018,Object +JsonDataSetReaderMessageDataType_Encoding_DefaultXml,16019,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,16020,Variable +BrokerWriterGroupTransportDataType_Encoding_DefaultXml,16021,Object +BrokerDataSetWriterTransportDataType_Encoding_DefaultXml,16022,Object +BrokerDataSetReaderTransportDataType_Encoding_DefaultXml,16023,Object +OpcUa_XmlSchema_EndpointType,16024,Variable +OpcUa_XmlSchema_EndpointType_DataTypeVersion,16025,Variable +OpcUa_XmlSchema_EndpointType_DictionaryFragment,16026,Variable +OpcUa_XmlSchema_DataTypeSchemaHeader,16027,Variable +OpcUa_XmlSchema_DataTypeSchemaHeader_DataTypeVersion,16028,Variable +OpcUa_XmlSchema_DataTypeSchemaHeader_DictionaryFragment,16029,Variable +OpcUa_XmlSchema_PublishedDataSetDataType,16030,Variable +OpcUa_XmlSchema_PublishedDataSetDataType_DataTypeVersion,16031,Variable +OpcUa_XmlSchema_PublishedDataSetDataType_DictionaryFragment,16032,Variable +OpcUa_XmlSchema_PublishedDataSetSourceDataType,16033,Variable +OpcUa_XmlSchema_PublishedDataSetSourceDataType_DataTypeVersion,16034,Variable +OpcUa_XmlSchema_PublishedDataSetSourceDataType_DictionaryFragment,16035,Variable +WellKnownRole_Engineer,16036,Object +OpcUa_XmlSchema_PublishedDataItemsDataType,16037,Variable +OpcUa_XmlSchema_PublishedDataItemsDataType_DataTypeVersion,16038,Variable +OpcUa_XmlSchema_PublishedDataItemsDataType_DictionaryFragment,16039,Variable +OpcUa_XmlSchema_PublishedEventsDataType,16040,Variable +WellKnownRole_Engineer_AddIdentity,16041,Method +WellKnownRole_Engineer_AddIdentity_InputArguments,16042,Variable +WellKnownRole_Engineer_RemoveIdentity,16043,Method +WellKnownRole_Engineer_RemoveIdentity_InputArguments,16044,Variable +OpcUa_XmlSchema_PublishedEventsDataType_DataTypeVersion,16045,Variable +OpcUa_XmlSchema_PublishedEventsDataType_DictionaryFragment,16046,Variable +OpcUa_XmlSchema_DataSetWriterDataType,16047,Variable +OpcUa_XmlSchema_DataSetWriterDataType_DataTypeVersion,16048,Variable +OpcUa_XmlSchema_DataSetWriterDataType_DictionaryFragment,16049,Variable +OpcUa_XmlSchema_DataSetWriterTransportDataType,16050,Variable +OpcUa_XmlSchema_DataSetWriterTransportDataType_DataTypeVersion,16051,Variable +OpcUa_XmlSchema_DataSetWriterTransportDataType_DictionaryFragment,16052,Variable +OpcUa_XmlSchema_DataSetWriterMessageDataType,16053,Variable +OpcUa_XmlSchema_DataSetWriterMessageDataType_DataTypeVersion,16054,Variable +OpcUa_XmlSchema_DataSetWriterMessageDataType_DictionaryFragment,16055,Variable +OpcUa_XmlSchema_PubSubGroupDataType,16056,Variable +OpcUa_XmlSchema_PubSubGroupDataType_DataTypeVersion,16057,Variable +OpcUa_XmlSchema_PubSubGroupDataType_DictionaryFragment,16058,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError,16059,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active,16060,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification,16061,Variable +OpcUa_XmlSchema_WriterGroupTransportDataType,16062,Variable +OpcUa_XmlSchema_WriterGroupTransportDataType_DataTypeVersion,16063,Variable +OpcUa_XmlSchema_WriterGroupTransportDataType_DictionaryFragment,16064,Variable +OpcUa_XmlSchema_WriterGroupMessageDataType,16065,Variable +OpcUa_XmlSchema_WriterGroupMessageDataType_DataTypeVersion,16066,Variable +OpcUa_XmlSchema_WriterGroupMessageDataType_DictionaryFragment,16067,Variable +OpcUa_XmlSchema_PubSubConnectionDataType,16068,Variable +OpcUa_XmlSchema_PubSubConnectionDataType_DataTypeVersion,16069,Variable +OpcUa_XmlSchema_PubSubConnectionDataType_DictionaryFragment,16070,Variable +OpcUa_XmlSchema_ConnectionTransportDataType,16071,Variable +OpcUa_XmlSchema_ConnectionTransportDataType_DataTypeVersion,16072,Variable +OpcUa_XmlSchema_ConnectionTransportDataType_DictionaryFragment,16073,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,16074,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_TimeFirstChange,16075,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset,16076,Method +OpcUa_XmlSchema_ReaderGroupTransportDataType,16077,Variable +OpcUa_XmlSchema_ReaderGroupTransportDataType_DataTypeVersion,16078,Variable +OpcUa_XmlSchema_ReaderGroupTransportDataType_DictionaryFragment,16079,Variable +OpcUa_XmlSchema_ReaderGroupMessageDataType,16080,Variable +OpcUa_XmlSchema_ReaderGroupMessageDataType_DataTypeVersion,16081,Variable +OpcUa_XmlSchema_ReaderGroupMessageDataType_DictionaryFragment,16082,Variable +OpcUa_XmlSchema_DataSetReaderDataType,16083,Variable +OpcUa_XmlSchema_DataSetReaderDataType_DataTypeVersion,16084,Variable +OpcUa_XmlSchema_DataSetReaderDataType_DictionaryFragment,16085,Variable +OpcUa_XmlSchema_DataSetReaderTransportDataType,16086,Variable +OpcUa_XmlSchema_DataSetReaderTransportDataType_DataTypeVersion,16087,Variable +OpcUa_XmlSchema_DataSetReaderTransportDataType_DictionaryFragment,16088,Variable +OpcUa_XmlSchema_DataSetReaderMessageDataType,16089,Variable +OpcUa_XmlSchema_DataSetReaderMessageDataType_DataTypeVersion,16090,Variable +OpcUa_XmlSchema_DataSetReaderMessageDataType_DictionaryFragment,16091,Variable +OpcUa_XmlSchema_SubscribedDataSetDataType,16092,Variable +OpcUa_XmlSchema_SubscribedDataSetDataType_DataTypeVersion,16093,Variable +OpcUa_XmlSchema_SubscribedDataSetDataType_DictionaryFragment,16094,Variable +OpcUa_XmlSchema_TargetVariablesDataType,16095,Variable +OpcUa_XmlSchema_TargetVariablesDataType_DataTypeVersion,16096,Variable +OpcUa_XmlSchema_TargetVariablesDataType_DictionaryFragment,16097,Variable +OpcUa_XmlSchema_SubscribedDataSetMirrorDataType,16098,Variable +OpcUa_XmlSchema_SubscribedDataSetMirrorDataType_DataTypeVersion,16099,Variable +OpcUa_XmlSchema_SubscribedDataSetMirrorDataType_DictionaryFragment,16100,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError,16101,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters,16102,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError,16103,Variable +OpcUa_XmlSchema_UadpWriterGroupMessageDataType,16104,Variable +OpcUa_XmlSchema_UadpWriterGroupMessageDataType_DataTypeVersion,16105,Variable +OpcUa_XmlSchema_UadpWriterGroupMessageDataType_DictionaryFragment,16106,Variable +OpcUa_XmlSchema_UadpDataSetWriterMessageDataType,16107,Variable +OpcUa_XmlSchema_UadpDataSetWriterMessageDataType_DataTypeVersion,16108,Variable +OpcUa_XmlSchema_UadpDataSetWriterMessageDataType_DictionaryFragment,16109,Variable +OpcUa_XmlSchema_UadpDataSetReaderMessageDataType,16110,Variable +OpcUa_XmlSchema_UadpDataSetReaderMessageDataType_DataTypeVersion,16111,Variable +OpcUa_XmlSchema_UadpDataSetReaderMessageDataType_DictionaryFragment,16112,Variable +OpcUa_XmlSchema_JsonWriterGroupMessageDataType,16113,Variable +OpcUa_XmlSchema_JsonWriterGroupMessageDataType_DataTypeVersion,16114,Variable +OpcUa_XmlSchema_JsonWriterGroupMessageDataType_DictionaryFragment,16115,Variable +OpcUa_XmlSchema_JsonDataSetWriterMessageDataType,16116,Variable +OpcUa_XmlSchema_JsonDataSetWriterMessageDataType_DataTypeVersion,16117,Variable +OpcUa_XmlSchema_JsonDataSetWriterMessageDataType_DictionaryFragment,16118,Variable +OpcUa_XmlSchema_JsonDataSetReaderMessageDataType,16119,Variable +OpcUa_XmlSchema_JsonDataSetReaderMessageDataType_DataTypeVersion,16120,Variable +OpcUa_XmlSchema_JsonDataSetReaderMessageDataType_DictionaryFragment,16121,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active,16122,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification,16123,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,16124,Variable +OpcUa_XmlSchema_BrokerWriterGroupTransportDataType,16125,Variable +RolePermissionType_Encoding_DefaultXml,16126,Object +OpcUa_XmlSchema_RolePermissionType,16127,Variable +OpcUa_XmlSchema_RolePermissionType_DataTypeVersion,16128,Variable +OpcUa_XmlSchema_RolePermissionType_DictionaryFragment,16129,Variable +OpcUa_XmlSchema_BrokerWriterGroupTransportDataType_DataTypeVersion,16130,Variable +OpcUa_BinarySchema_RolePermissionType,16131,Variable +OpcUa_BinarySchema_RolePermissionType_DataTypeVersion,16132,Variable +OpcUa_BinarySchema_RolePermissionType_DictionaryFragment,16133,Variable +OPCUANamespaceMetadata_DefaultRolePermissions,16134,Variable +OPCUANamespaceMetadata_DefaultUserRolePermissions,16135,Variable +OPCUANamespaceMetadata_DefaultAccessRestrictions,16136,Variable +NamespaceMetadataType_DefaultRolePermissions,16137,Variable +NamespaceMetadataType_DefaultUserRolePermissions,16138,Variable +NamespaceMetadataType_DefaultAccessRestrictions,16139,Variable +NamespacesType_NamespaceIdentifier_Placeholder_DefaultRolePermissions,16140,Variable +NamespacesType_NamespaceIdentifier_Placeholder_DefaultUserRolePermissions,16141,Variable +NamespacesType_NamespaceIdentifier_Placeholder_DefaultAccessRestrictions,16142,Variable +OpcUa_XmlSchema_BrokerWriterGroupTransportDataType_DictionaryFragment,16143,Variable +OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType,16144,Variable +OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType_DataTypeVersion,16145,Variable +OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType_DictionaryFragment,16146,Variable +OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType,16147,Variable +OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType_DataTypeVersion,16148,Variable +OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType_DictionaryFragment,16149,Variable +EndpointType_Encoding_DefaultJson,16150,Object +DataTypeSchemaHeader_Encoding_DefaultJson,16151,Object +PublishedDataSetDataType_Encoding_DefaultJson,16152,Object +PublishedDataSetSourceDataType_Encoding_DefaultJson,16153,Object +PublishedDataItemsDataType_Encoding_DefaultJson,16154,Object +PublishedEventsDataType_Encoding_DefaultJson,16155,Object +DataSetWriterDataType_Encoding_DefaultJson,16156,Object +DataSetWriterTransportDataType_Encoding_DefaultJson,16157,Object +DataSetWriterMessageDataType_Encoding_DefaultJson,16158,Object +PubSubGroupDataType_Encoding_DefaultJson,16159,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,16160,Variable +WriterGroupTransportDataType_Encoding_DefaultJson,16161,Object +RoleSetType_RoleName_Placeholder_Identities,16162,Variable +RoleSetType_RoleName_Placeholder_Applications,16163,Variable +RoleSetType_RoleName_Placeholder_Endpoints,16164,Variable +RoleSetType_RoleName_Placeholder_AddApplication,16165,Method +RoleSetType_RoleName_Placeholder_AddApplication_InputArguments,16166,Variable +RoleSetType_RoleName_Placeholder_RemoveApplication,16167,Method +RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments,16168,Variable +RoleSetType_RoleName_Placeholder_AddEndpoint,16169,Method +RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments,16170,Variable +RoleSetType_RoleName_Placeholder_RemoveEndpoint,16171,Method +RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments,16172,Variable +RoleType_Identities,16173,Variable +RoleType_Applications,16174,Variable +RoleType_Endpoints,16175,Variable +RoleType_AddApplication,16176,Method +RoleType_AddApplication_InputArguments,16177,Variable +RoleType_RemoveApplication,16178,Method +RoleType_RemoveApplication_InputArguments,16179,Variable +RoleType_AddEndpoint,16180,Method +RoleType_AddEndpoint_InputArguments,16181,Variable +RoleType_RemoveEndpoint,16182,Method +RoleType_RemoveEndpoint_InputArguments,16183,Variable +AddApplicationMethodType,16184,Method +AddApplicationMethodType_InputArguments,16185,Variable +RemoveApplicationMethodType,16186,Method +RemoveApplicationMethodType_InputArguments,16187,Variable +AddEndpointMethodType,16188,Method +AddEndpointMethodType_InputArguments,16189,Variable +RemoveEndpointMethodType,16190,Method +RemoveEndpointMethodType_InputArguments,16191,Variable +WellKnownRole_Anonymous_Identities,16192,Variable +WellKnownRole_Anonymous_Applications,16193,Variable +WellKnownRole_Anonymous_Endpoints,16194,Variable +WellKnownRole_Anonymous_AddApplication,16195,Method +WellKnownRole_Anonymous_AddApplication_InputArguments,16196,Variable +WellKnownRole_Anonymous_RemoveApplication,16197,Method +WellKnownRole_Anonymous_RemoveApplication_InputArguments,16198,Variable +WellKnownRole_Anonymous_AddEndpoint,16199,Method +WellKnownRole_Anonymous_AddEndpoint_InputArguments,16200,Variable +WellKnownRole_Anonymous_RemoveEndpoint,16201,Method +WellKnownRole_Anonymous_RemoveEndpoint_InputArguments,16202,Variable +WellKnownRole_AuthenticatedUser_Identities,16203,Variable +WellKnownRole_AuthenticatedUser_Applications,16204,Variable +WellKnownRole_AuthenticatedUser_Endpoints,16205,Variable +WellKnownRole_AuthenticatedUser_AddApplication,16206,Method +WellKnownRole_AuthenticatedUser_AddApplication_InputArguments,16207,Variable +WellKnownRole_AuthenticatedUser_RemoveApplication,16208,Method +WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments,16209,Variable +WellKnownRole_AuthenticatedUser_AddEndpoint,16210,Method +WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments,16211,Variable +WellKnownRole_AuthenticatedUser_RemoveEndpoint,16212,Method +WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments,16213,Variable +WellKnownRole_Observer_Identities,16214,Variable +WellKnownRole_Observer_Applications,16215,Variable +WellKnownRole_Observer_Endpoints,16216,Variable +WellKnownRole_Observer_AddApplication,16217,Method +WellKnownRole_Observer_AddApplication_InputArguments,16218,Variable +WellKnownRole_Observer_RemoveApplication,16219,Method +WellKnownRole_Observer_RemoveApplication_InputArguments,16220,Variable +WellKnownRole_Observer_AddEndpoint,16221,Method +WellKnownRole_Observer_AddEndpoint_InputArguments,16222,Variable +WellKnownRole_Observer_RemoveEndpoint,16223,Method +WellKnownRole_Observer_RemoveEndpoint_InputArguments,16224,Variable +WellKnownRole_Operator_Identities,16225,Variable +WellKnownRole_Operator_Applications,16226,Variable +WellKnownRole_Operator_Endpoints,16227,Variable +WellKnownRole_Operator_AddApplication,16228,Method +WellKnownRole_Operator_AddApplication_InputArguments,16229,Variable +WellKnownRole_Operator_RemoveApplication,16230,Method +WellKnownRole_Operator_RemoveApplication_InputArguments,16231,Variable +WellKnownRole_Operator_AddEndpoint,16232,Method +WellKnownRole_Operator_AddEndpoint_InputArguments,16233,Variable +WellKnownRole_Operator_RemoveEndpoint,16234,Method +WellKnownRole_Operator_RemoveEndpoint_InputArguments,16235,Variable +WellKnownRole_Engineer_Identities,16236,Variable +WellKnownRole_Engineer_Applications,16237,Variable +WellKnownRole_Engineer_Endpoints,16238,Variable +WellKnownRole_Engineer_AddApplication,16239,Method +WellKnownRole_Engineer_AddApplication_InputArguments,16240,Variable +WellKnownRole_Engineer_RemoveApplication,16241,Method +WellKnownRole_Engineer_RemoveApplication_InputArguments,16242,Variable +WellKnownRole_Engineer_AddEndpoint,16243,Method +WellKnownRole_Engineer_AddEndpoint_InputArguments,16244,Variable +WellKnownRole_Engineer_RemoveEndpoint,16245,Method +WellKnownRole_Engineer_RemoveEndpoint_InputArguments,16246,Variable +WellKnownRole_Supervisor_Identities,16247,Variable +WellKnownRole_Supervisor_Applications,16248,Variable +WellKnownRole_Supervisor_Endpoints,16249,Variable +WellKnownRole_Supervisor_AddApplication,16250,Method +WellKnownRole_Supervisor_AddApplication_InputArguments,16251,Variable +WellKnownRole_Supervisor_RemoveApplication,16252,Method +WellKnownRole_Supervisor_RemoveApplication_InputArguments,16253,Variable +WellKnownRole_Supervisor_AddEndpoint,16254,Method +WellKnownRole_Supervisor_AddEndpoint_InputArguments,16255,Variable +WellKnownRole_Supervisor_RemoveEndpoint,16256,Method +WellKnownRole_Supervisor_RemoveEndpoint_InputArguments,16257,Variable +WellKnownRole_SecurityAdmin_Identities,16258,Variable +WellKnownRole_SecurityAdmin_Applications,16259,Variable +WellKnownRole_SecurityAdmin_Endpoints,16260,Variable +WellKnownRole_SecurityAdmin_AddApplication,16261,Method +WellKnownRole_SecurityAdmin_AddApplication_InputArguments,16262,Variable +WellKnownRole_SecurityAdmin_RemoveApplication,16263,Method +WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments,16264,Variable +WellKnownRole_SecurityAdmin_AddEndpoint,16265,Method +WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments,16266,Variable +WellKnownRole_SecurityAdmin_RemoveEndpoint,16267,Method +WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments,16268,Variable +WellKnownRole_ConfigureAdmin_Identities,16269,Variable +WellKnownRole_ConfigureAdmin_Applications,16270,Variable +WellKnownRole_ConfigureAdmin_Endpoints,16271,Variable +WellKnownRole_ConfigureAdmin_AddApplication,16272,Method +WellKnownRole_ConfigureAdmin_AddApplication_InputArguments,16273,Variable +WellKnownRole_ConfigureAdmin_RemoveApplication,16274,Method +WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments,16275,Variable +WellKnownRole_ConfigureAdmin_AddEndpoint,16276,Method +WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments,16277,Variable +WellKnownRole_ConfigureAdmin_RemoveEndpoint,16278,Method +WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments,16279,Variable +WriterGroupMessageDataType_Encoding_DefaultJson,16280,Object +PubSubConnectionDataType_Encoding_DefaultJson,16281,Object +ConnectionTransportDataType_Encoding_DefaultJson,16282,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,16283,Variable +ReaderGroupTransportDataType_Encoding_DefaultJson,16284,Object +ReaderGroupMessageDataType_Encoding_DefaultJson,16285,Object +DataSetReaderDataType_Encoding_DefaultJson,16286,Object +DataSetReaderTransportDataType_Encoding_DefaultJson,16287,Object +DataSetReaderMessageDataType_Encoding_DefaultJson,16288,Object +ServerType_ServerCapabilities_RoleSet,16289,Object +ServerType_ServerCapabilities_RoleSet_AddRole,16290,Method +ServerType_ServerCapabilities_RoleSet_AddRole_InputArguments,16291,Variable +ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments,16292,Variable +ServerType_ServerCapabilities_RoleSet_RemoveRole,16293,Method +ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments,16294,Variable +ServerCapabilitiesType_RoleSet,16295,Object +ServerCapabilitiesType_RoleSet_AddRole,16296,Method +ServerCapabilitiesType_RoleSet_AddRole_InputArguments,16297,Variable +ServerCapabilitiesType_RoleSet_AddRole_OutputArguments,16298,Variable +ServerCapabilitiesType_RoleSet_RemoveRole,16299,Method +ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments,16300,Variable +Server_ServerCapabilities_RoleSet_AddRole,16301,Method +Server_ServerCapabilities_RoleSet_AddRole_InputArguments,16302,Variable +Server_ServerCapabilities_RoleSet_AddRole_OutputArguments,16303,Variable +Server_ServerCapabilities_RoleSet_RemoveRole,16304,Method +Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments,16305,Variable +DefaultInputValues,16306,Variable +AudioDataType,16307,DataType +SubscribedDataSetDataType_Encoding_DefaultJson,16308,Object +SelectionListType,16309,VariableType +TargetVariablesDataType_Encoding_DefaultJson,16310,Object +SubscribedDataSetMirrorDataType_Encoding_DefaultJson,16311,Object +SelectionListType_RestrictToList,16312,Variable +AdditionalParametersType,16313,DataType +FileSystem,16314,Object +FileSystem_FileDirectoryName_Placeholder,16315,Object +FileSystem_FileDirectoryName_Placeholder_CreateDirectory,16316,Method +FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments,16317,Variable +FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments,16318,Variable +FileSystem_FileDirectoryName_Placeholder_CreateFile,16319,Method +FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments,16320,Variable +FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments,16321,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,16322,Variable +UadpWriterGroupMessageDataType_Encoding_DefaultJson,16323,Object +FileSystem_FileDirectoryName_Placeholder_MoveOrCopy,16324,Method +FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments,16325,Variable +FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments,16326,Variable +FileSystem_FileName_Placeholder,16327,Object +FileSystem_FileName_Placeholder_Size,16328,Variable +FileSystem_FileName_Placeholder_Writable,16329,Variable +FileSystem_FileName_Placeholder_UserWritable,16330,Variable +FileSystem_FileName_Placeholder_OpenCount,16331,Variable +FileSystem_FileName_Placeholder_MimeType,16332,Variable +FileSystem_FileName_Placeholder_Open,16333,Method +FileSystem_FileName_Placeholder_Open_InputArguments,16334,Variable +FileSystem_FileName_Placeholder_Open_OutputArguments,16335,Variable +FileSystem_FileName_Placeholder_Close,16336,Method +FileSystem_FileName_Placeholder_Close_InputArguments,16337,Variable +FileSystem_FileName_Placeholder_Read,16338,Method +FileSystem_FileName_Placeholder_Read_InputArguments,16339,Variable +FileSystem_FileName_Placeholder_Read_OutputArguments,16340,Variable +FileSystem_FileName_Placeholder_Write,16341,Method +FileSystem_FileName_Placeholder_Write_InputArguments,16342,Variable +FileSystem_FileName_Placeholder_GetPosition,16343,Method +FileSystem_FileName_Placeholder_GetPosition_InputArguments,16344,Variable +FileSystem_FileName_Placeholder_GetPosition_OutputArguments,16345,Variable +FileSystem_FileName_Placeholder_SetPosition,16346,Method +FileSystem_FileName_Placeholder_SetPosition_InputArguments,16347,Variable +FileSystem_CreateDirectory,16348,Method +FileSystem_CreateDirectory_InputArguments,16349,Variable +FileSystem_CreateDirectory_OutputArguments,16350,Variable +FileSystem_CreateFile,16351,Method +FileSystem_CreateFile_InputArguments,16352,Variable +FileSystem_CreateFile_OutputArguments,16353,Variable +FileSystem_DeleteFileSystemObject,16354,Method +FileSystem_DeleteFileSystemObject_InputArguments,16355,Variable +FileSystem_MoveOrCopy,16356,Method +FileSystem_MoveOrCopy_InputArguments,16357,Variable +FileSystem_MoveOrCopy_OutputArguments,16358,Variable +TemporaryFileTransferType_GenerateFileForWrite_InputArguments,16359,Variable +GenerateFileForWriteMethodType_InputArguments,16360,Variable +HasAlarmSuppressionGroup,16361,ReferenceType +AlarmGroupMember,16362,ReferenceType +ConditionType_ConditionSubClassId,16363,Variable +ConditionType_ConditionSubClassName,16364,Variable +DialogConditionType_ConditionSubClassId,16365,Variable +DialogConditionType_ConditionSubClassName,16366,Variable +AcknowledgeableConditionType_ConditionSubClassId,16367,Variable +AcknowledgeableConditionType_ConditionSubClassName,16368,Variable +AlarmConditionType_ConditionSubClassId,16369,Variable +AlarmConditionType_ConditionSubClassName,16370,Variable +AlarmConditionType_OutOfServiceState,16371,Variable +AlarmConditionType_OutOfServiceState_Id,16372,Variable +AlarmConditionType_OutOfServiceState_Name,16373,Variable +AlarmConditionType_OutOfServiceState_Number,16374,Variable +AlarmConditionType_OutOfServiceState_EffectiveDisplayName,16375,Variable +AlarmConditionType_OutOfServiceState_TransitionTime,16376,Variable +AlarmConditionType_OutOfServiceState_EffectiveTransitionTime,16377,Variable +AlarmConditionType_OutOfServiceState_TrueState,16378,Variable +AlarmConditionType_OutOfServiceState_FalseState,16379,Variable +AlarmConditionType_SilenceState,16380,Variable +AlarmConditionType_SilenceState_Id,16381,Variable +AlarmConditionType_SilenceState_Name,16382,Variable +AlarmConditionType_SilenceState_Number,16383,Variable +AlarmConditionType_SilenceState_EffectiveDisplayName,16384,Variable +AlarmConditionType_SilenceState_TransitionTime,16385,Variable +AlarmConditionType_SilenceState_EffectiveTransitionTime,16386,Variable +AlarmConditionType_SilenceState_TrueState,16387,Variable +AlarmConditionType_SilenceState_FalseState,16388,Variable +AlarmConditionType_AudibleEnabled,16389,Variable +AlarmConditionType_AudibleSound,16390,Variable +UadpDataSetWriterMessageDataType_Encoding_DefaultJson,16391,Object +UadpDataSetReaderMessageDataType_Encoding_DefaultJson,16392,Object +JsonWriterGroupMessageDataType_Encoding_DefaultJson,16393,Object +JsonDataSetWriterMessageDataType_Encoding_DefaultJson,16394,Object +AlarmConditionType_OnDelay,16395,Variable +AlarmConditionType_OffDelay,16396,Variable +AlarmConditionType_FirstInGroupFlag,16397,Variable +AlarmConditionType_FirstInGroup,16398,Object +AlarmConditionType_AlarmGroup_Placeholder,16399,Object +AlarmConditionType_ReAlarmTime,16400,Variable +AlarmConditionType_ReAlarmRepeatCount,16401,Variable +AlarmConditionType_Silence,16402,Method +AlarmConditionType_Suppress,16403,Method +JsonDataSetReaderMessageDataType_Encoding_DefaultJson,16404,Object +AlarmGroupType,16405,ObjectType +AlarmGroupType_AlarmConditionInstance_Placeholder,16406,Object +AlarmGroupType_AlarmConditionInstance_Placeholder_EventId,16407,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EventType,16408,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode,16409,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName,16410,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Time,16411,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime,16412,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LocalTime,16413,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Message,16414,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Severity,16415,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId,16416,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName,16417,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionSubClassId,16418,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionSubClassName,16419,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName,16420,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId,16421,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Retain,16422,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState,16423,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id,16424,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Name,16425,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Number,16426,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_EffectiveDisplayName,16427,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_TransitionTime,16428,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_EffectiveTransitionTime,16429,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_TrueState,16430,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_FalseState,16431,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Quality,16432,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp,16433,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity,16434,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp,16435,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Comment,16436,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp,16437,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId,16438,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Disable,16439,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_Enable,16440,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment,16441,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments,16442,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState,16443,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id,16444,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Name,16445,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Number,16446,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_EffectiveDisplayName,16447,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_TransitionTime,16448,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_EffectiveTransitionTime,16449,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_TrueState,16450,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_FalseState,16451,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState,16452,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id,16453,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Name,16454,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Number,16455,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_EffectiveDisplayName,16456,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_TransitionTime,16457,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_EffectiveTransitionTime,16458,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_TrueState,16459,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_FalseState,16460,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge,16461,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments,16462,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm,16463,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments,16464,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState,16465,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id,16466,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Name,16467,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Number,16468,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_EffectiveDisplayName,16469,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_TransitionTime,16470,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_EffectiveTransitionTime,16471,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_TrueState,16472,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_FalseState,16473,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode,16474,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState,16475,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id,16476,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Name,16477,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Number,16478,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_EffectiveDisplayName,16479,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_TransitionTime,16480,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_EffectiveTransitionTime,16481,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_TrueState,16482,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_FalseState,16483,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState,16484,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id,16485,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Name,16486,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Number,16487,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_EffectiveDisplayName,16488,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_TransitionTime,16489,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_EffectiveTransitionTime,16490,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_TrueState,16491,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_FalseState,16492,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState,16493,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id,16494,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Name,16495,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Number,16496,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_EffectiveDisplayName,16497,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_TransitionTime,16498,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_EffectiveTransitionTime,16499,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_TrueState,16500,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_FalseState,16501,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState,16502,Object +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState,16503,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id,16504,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Name,16505,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Number,16506,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_EffectiveDisplayName,16507,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition,16508,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id,16509,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Name,16510,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Number,16511,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_TransitionTime,16512,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_EffectiveTransitionTime,16513,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime,16514,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve,16515,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve,16516,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve,16517,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments,16518,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved,16519,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_MaxTimeShelved,16520,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleEnabled,16521,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound,16522,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,16523,Variable +BrokerWriterGroupTransportDataType_Encoding_DefaultJson,16524,Object +BrokerDataSetWriterTransportDataType_Encoding_DefaultJson,16525,Object +BrokerDataSetReaderTransportDataType_Encoding_DefaultJson,16526,Object +AlarmGroupType_AlarmConditionInstance_Placeholder_OnDelay,16527,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_OffDelay,16528,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_FirstInGroupFlag,16529,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_FirstInGroup,16530,Object +AlarmGroupType_AlarmConditionInstance_Placeholder_ReAlarmTime,16531,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ReAlarmRepeatCount,16532,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Silence,16533,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_Suppress,16534,Method +PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup,16535,Method +LimitAlarmType_ConditionSubClassId,16536,Variable +LimitAlarmType_ConditionSubClassName,16537,Variable +LimitAlarmType_OutOfServiceState,16538,Variable +LimitAlarmType_OutOfServiceState_Id,16539,Variable +LimitAlarmType_OutOfServiceState_Name,16540,Variable +LimitAlarmType_OutOfServiceState_Number,16541,Variable +LimitAlarmType_OutOfServiceState_EffectiveDisplayName,16542,Variable +LimitAlarmType_OutOfServiceState_TransitionTime,16543,Variable +LimitAlarmType_OutOfServiceState_EffectiveTransitionTime,16544,Variable +LimitAlarmType_OutOfServiceState_TrueState,16545,Variable +LimitAlarmType_OutOfServiceState_FalseState,16546,Variable +LimitAlarmType_SilenceState,16547,Variable +LimitAlarmType_SilenceState_Id,16548,Variable +LimitAlarmType_SilenceState_Name,16549,Variable +LimitAlarmType_SilenceState_Number,16550,Variable +LimitAlarmType_SilenceState_EffectiveDisplayName,16551,Variable +LimitAlarmType_SilenceState_TransitionTime,16552,Variable +LimitAlarmType_SilenceState_EffectiveTransitionTime,16553,Variable +LimitAlarmType_SilenceState_TrueState,16554,Variable +LimitAlarmType_SilenceState_FalseState,16555,Variable +LimitAlarmType_AudibleEnabled,16556,Variable +LimitAlarmType_AudibleSound,16557,Variable +PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments,16558,Variable +PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments,16559,Variable +PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup,16560,Method +PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments,16561,Variable +LimitAlarmType_OnDelay,16562,Variable +LimitAlarmType_OffDelay,16563,Variable +LimitAlarmType_FirstInGroupFlag,16564,Variable +LimitAlarmType_FirstInGroup,16565,Object +LimitAlarmType_AlarmGroup_Placeholder,16566,Object +LimitAlarmType_ReAlarmTime,16567,Variable +LimitAlarmType_ReAlarmRepeatCount,16568,Variable +LimitAlarmType_Silence,16569,Method +LimitAlarmType_Suppress,16570,Method +PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments,16571,Variable +LimitAlarmType_BaseHighHighLimit,16572,Variable +LimitAlarmType_BaseHighLimit,16573,Variable +LimitAlarmType_BaseLowLimit,16574,Variable +LimitAlarmType_BaseLowLowLimit,16575,Variable +ExclusiveLimitAlarmType_ConditionSubClassId,16576,Variable +ExclusiveLimitAlarmType_ConditionSubClassName,16577,Variable +ExclusiveLimitAlarmType_OutOfServiceState,16578,Variable +ExclusiveLimitAlarmType_OutOfServiceState_Id,16579,Variable +ExclusiveLimitAlarmType_OutOfServiceState_Name,16580,Variable +ExclusiveLimitAlarmType_OutOfServiceState_Number,16581,Variable +ExclusiveLimitAlarmType_OutOfServiceState_EffectiveDisplayName,16582,Variable +ExclusiveLimitAlarmType_OutOfServiceState_TransitionTime,16583,Variable +ExclusiveLimitAlarmType_OutOfServiceState_EffectiveTransitionTime,16584,Variable +ExclusiveLimitAlarmType_OutOfServiceState_TrueState,16585,Variable +ExclusiveLimitAlarmType_OutOfServiceState_FalseState,16586,Variable +ExclusiveLimitAlarmType_SilenceState,16587,Variable +ExclusiveLimitAlarmType_SilenceState_Id,16588,Variable +ExclusiveLimitAlarmType_SilenceState_Name,16589,Variable +ExclusiveLimitAlarmType_SilenceState_Number,16590,Variable +ExclusiveLimitAlarmType_SilenceState_EffectiveDisplayName,16591,Variable +ExclusiveLimitAlarmType_SilenceState_TransitionTime,16592,Variable +ExclusiveLimitAlarmType_SilenceState_EffectiveTransitionTime,16593,Variable +ExclusiveLimitAlarmType_SilenceState_TrueState,16594,Variable +ExclusiveLimitAlarmType_SilenceState_FalseState,16595,Variable +ExclusiveLimitAlarmType_AudibleEnabled,16596,Variable +ExclusiveLimitAlarmType_AudibleSound,16597,Variable +PublishSubscribeType_AddConnection,16598,Method +PublishSubscribeType_AddConnection_InputArguments,16599,Variable +PublishSubscribeType_AddConnection_OutputArguments,16600,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate,16601,Method +ExclusiveLimitAlarmType_OnDelay,16602,Variable +ExclusiveLimitAlarmType_OffDelay,16603,Variable +ExclusiveLimitAlarmType_FirstInGroupFlag,16604,Variable +ExclusiveLimitAlarmType_FirstInGroup,16605,Object +ExclusiveLimitAlarmType_AlarmGroup_Placeholder,16606,Object +ExclusiveLimitAlarmType_ReAlarmTime,16607,Variable +ExclusiveLimitAlarmType_ReAlarmRepeatCount,16608,Variable +ExclusiveLimitAlarmType_Silence,16609,Method +ExclusiveLimitAlarmType_Suppress,16610,Method +PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments,16611,Variable +ExclusiveLimitAlarmType_BaseHighHighLimit,16612,Variable +ExclusiveLimitAlarmType_BaseHighLimit,16613,Variable +ExclusiveLimitAlarmType_BaseLowLimit,16614,Variable +ExclusiveLimitAlarmType_BaseLowLowLimit,16615,Variable +NonExclusiveLimitAlarmType_ConditionSubClassId,16616,Variable +NonExclusiveLimitAlarmType_ConditionSubClassName,16617,Variable +NonExclusiveLimitAlarmType_OutOfServiceState,16618,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_Id,16619,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_Name,16620,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_Number,16621,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_EffectiveDisplayName,16622,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_TransitionTime,16623,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_EffectiveTransitionTime,16624,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_TrueState,16625,Variable +NonExclusiveLimitAlarmType_OutOfServiceState_FalseState,16626,Variable +NonExclusiveLimitAlarmType_SilenceState,16627,Variable +NonExclusiveLimitAlarmType_SilenceState_Id,16628,Variable +NonExclusiveLimitAlarmType_SilenceState_Name,16629,Variable +NonExclusiveLimitAlarmType_SilenceState_Number,16630,Variable +NonExclusiveLimitAlarmType_SilenceState_EffectiveDisplayName,16631,Variable +NonExclusiveLimitAlarmType_SilenceState_TransitionTime,16632,Variable +NonExclusiveLimitAlarmType_SilenceState_EffectiveTransitionTime,16633,Variable +NonExclusiveLimitAlarmType_SilenceState_TrueState,16634,Variable +NonExclusiveLimitAlarmType_SilenceState_FalseState,16635,Variable +NonExclusiveLimitAlarmType_AudibleEnabled,16636,Variable +NonExclusiveLimitAlarmType_AudibleSound,16637,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments,16638,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate,16639,Method +PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments,16640,Variable +PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments,16641,Variable +NonExclusiveLimitAlarmType_OnDelay,16642,Variable +NonExclusiveLimitAlarmType_OffDelay,16643,Variable +NonExclusiveLimitAlarmType_FirstInGroupFlag,16644,Variable +NonExclusiveLimitAlarmType_FirstInGroup,16645,Object +NonExclusiveLimitAlarmType_AlarmGroup_Placeholder,16646,Object +NonExclusiveLimitAlarmType_ReAlarmTime,16647,Variable +NonExclusiveLimitAlarmType_ReAlarmRepeatCount,16648,Variable +NonExclusiveLimitAlarmType_Silence,16649,Method +NonExclusiveLimitAlarmType_Suppress,16650,Method +PublishSubscribeType_PublishedDataSets_AddDataSetFolder,16651,Method +NonExclusiveLimitAlarmType_BaseHighHighLimit,16652,Variable +NonExclusiveLimitAlarmType_BaseHighLimit,16653,Variable +NonExclusiveLimitAlarmType_BaseLowLimit,16654,Variable +NonExclusiveLimitAlarmType_BaseLowLowLimit,16655,Variable +NonExclusiveLevelAlarmType_ConditionSubClassId,16656,Variable +NonExclusiveLevelAlarmType_ConditionSubClassName,16657,Variable +NonExclusiveLevelAlarmType_OutOfServiceState,16658,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_Id,16659,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_Name,16660,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_Number,16661,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_EffectiveDisplayName,16662,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_TransitionTime,16663,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_EffectiveTransitionTime,16664,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_TrueState,16665,Variable +NonExclusiveLevelAlarmType_OutOfServiceState_FalseState,16666,Variable +NonExclusiveLevelAlarmType_SilenceState,16667,Variable +NonExclusiveLevelAlarmType_SilenceState_Id,16668,Variable +NonExclusiveLevelAlarmType_SilenceState_Name,16669,Variable +NonExclusiveLevelAlarmType_SilenceState_Number,16670,Variable +NonExclusiveLevelAlarmType_SilenceState_EffectiveDisplayName,16671,Variable +NonExclusiveLevelAlarmType_SilenceState_TransitionTime,16672,Variable +NonExclusiveLevelAlarmType_SilenceState_EffectiveTransitionTime,16673,Variable +NonExclusiveLevelAlarmType_SilenceState_TrueState,16674,Variable +NonExclusiveLevelAlarmType_SilenceState_FalseState,16675,Variable +NonExclusiveLevelAlarmType_AudibleEnabled,16676,Variable +NonExclusiveLevelAlarmType_AudibleSound,16677,Variable +PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments,16678,Variable +PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments,16679,Variable +PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder,16680,Method +PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments,16681,Variable +NonExclusiveLevelAlarmType_OnDelay,16682,Variable +NonExclusiveLevelAlarmType_OffDelay,16683,Variable +NonExclusiveLevelAlarmType_FirstInGroupFlag,16684,Variable +NonExclusiveLevelAlarmType_FirstInGroup,16685,Object +NonExclusiveLevelAlarmType_AlarmGroup_Placeholder,16686,Object +NonExclusiveLevelAlarmType_ReAlarmTime,16687,Variable +NonExclusiveLevelAlarmType_ReAlarmRepeatCount,16688,Variable +NonExclusiveLevelAlarmType_Silence,16689,Method +NonExclusiveLevelAlarmType_Suppress,16690,Method +AddConnectionMethodType,16691,Method +NonExclusiveLevelAlarmType_BaseHighHighLimit,16692,Variable +NonExclusiveLevelAlarmType_BaseHighLimit,16693,Variable +NonExclusiveLevelAlarmType_BaseLowLimit,16694,Variable +NonExclusiveLevelAlarmType_BaseLowLowLimit,16695,Variable +ExclusiveLevelAlarmType_ConditionSubClassId,16696,Variable +ExclusiveLevelAlarmType_ConditionSubClassName,16697,Variable +ExclusiveLevelAlarmType_OutOfServiceState,16698,Variable +ExclusiveLevelAlarmType_OutOfServiceState_Id,16699,Variable +ExclusiveLevelAlarmType_OutOfServiceState_Name,16700,Variable +ExclusiveLevelAlarmType_OutOfServiceState_Number,16701,Variable +ExclusiveLevelAlarmType_OutOfServiceState_EffectiveDisplayName,16702,Variable +ExclusiveLevelAlarmType_OutOfServiceState_TransitionTime,16703,Variable +ExclusiveLevelAlarmType_OutOfServiceState_EffectiveTransitionTime,16704,Variable +ExclusiveLevelAlarmType_OutOfServiceState_TrueState,16705,Variable +ExclusiveLevelAlarmType_OutOfServiceState_FalseState,16706,Variable +ExclusiveLevelAlarmType_SilenceState,16707,Variable +ExclusiveLevelAlarmType_SilenceState_Id,16708,Variable +ExclusiveLevelAlarmType_SilenceState_Name,16709,Variable +ExclusiveLevelAlarmType_SilenceState_Number,16710,Variable +ExclusiveLevelAlarmType_SilenceState_EffectiveDisplayName,16711,Variable +ExclusiveLevelAlarmType_SilenceState_TransitionTime,16712,Variable +ExclusiveLevelAlarmType_SilenceState_EffectiveTransitionTime,16713,Variable +ExclusiveLevelAlarmType_SilenceState_TrueState,16714,Variable +ExclusiveLevelAlarmType_SilenceState_FalseState,16715,Variable +ExclusiveLevelAlarmType_AudibleEnabled,16716,Variable +ExclusiveLevelAlarmType_AudibleSound,16717,Variable +AddConnectionMethodType_InputArguments,16718,Variable +AddConnectionMethodType_OutputArguments,16719,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId,16720,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask,16721,Variable +ExclusiveLevelAlarmType_OnDelay,16722,Variable +ExclusiveLevelAlarmType_OffDelay,16723,Variable +ExclusiveLevelAlarmType_FirstInGroupFlag,16724,Variable +ExclusiveLevelAlarmType_FirstInGroup,16725,Object +ExclusiveLevelAlarmType_AlarmGroup_Placeholder,16726,Object +ExclusiveLevelAlarmType_ReAlarmTime,16727,Variable +ExclusiveLevelAlarmType_ReAlarmRepeatCount,16728,Variable +ExclusiveLevelAlarmType_Silence,16729,Method +ExclusiveLevelAlarmType_Suppress,16730,Method +PublishedDataSetType_DataSetWriterName_Placeholder_KeyFrameCount,16731,Variable +ExclusiveLevelAlarmType_BaseHighHighLimit,16732,Variable +ExclusiveLevelAlarmType_BaseHighLimit,16733,Variable +ExclusiveLevelAlarmType_BaseLowLimit,16734,Variable +ExclusiveLevelAlarmType_BaseLowLowLimit,16735,Variable +NonExclusiveDeviationAlarmType_ConditionSubClassId,16736,Variable +NonExclusiveDeviationAlarmType_ConditionSubClassName,16737,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState,16738,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_Id,16739,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_Name,16740,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_Number,16741,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_EffectiveDisplayName,16742,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_TransitionTime,16743,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_EffectiveTransitionTime,16744,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_TrueState,16745,Variable +NonExclusiveDeviationAlarmType_OutOfServiceState_FalseState,16746,Variable +NonExclusiveDeviationAlarmType_SilenceState,16747,Variable +NonExclusiveDeviationAlarmType_SilenceState_Id,16748,Variable +NonExclusiveDeviationAlarmType_SilenceState_Name,16749,Variable +NonExclusiveDeviationAlarmType_SilenceState_Number,16750,Variable +NonExclusiveDeviationAlarmType_SilenceState_EffectiveDisplayName,16751,Variable +NonExclusiveDeviationAlarmType_SilenceState_TransitionTime,16752,Variable +NonExclusiveDeviationAlarmType_SilenceState_EffectiveTransitionTime,16753,Variable +NonExclusiveDeviationAlarmType_SilenceState_TrueState,16754,Variable +NonExclusiveDeviationAlarmType_SilenceState_FalseState,16755,Variable +NonExclusiveDeviationAlarmType_AudibleEnabled,16756,Variable +NonExclusiveDeviationAlarmType_AudibleSound,16757,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_MessageSettings,16758,Object +PublishedDataSetType_DataSetClassId,16759,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId,16760,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask,16761,Variable +NonExclusiveDeviationAlarmType_OnDelay,16762,Variable +NonExclusiveDeviationAlarmType_OffDelay,16763,Variable +NonExclusiveDeviationAlarmType_FirstInGroupFlag,16764,Variable +NonExclusiveDeviationAlarmType_FirstInGroup,16765,Object +NonExclusiveDeviationAlarmType_AlarmGroup_Placeholder,16766,Object +NonExclusiveDeviationAlarmType_ReAlarmTime,16767,Variable +NonExclusiveDeviationAlarmType_ReAlarmRepeatCount,16768,Variable +NonExclusiveDeviationAlarmType_Silence,16769,Method +NonExclusiveDeviationAlarmType_Suppress,16770,Method +PublishedDataItemsType_DataSetWriterName_Placeholder_KeyFrameCount,16771,Variable +NonExclusiveDeviationAlarmType_BaseHighHighLimit,16772,Variable +NonExclusiveDeviationAlarmType_BaseHighLimit,16773,Variable +NonExclusiveDeviationAlarmType_BaseLowLimit,16774,Variable +NonExclusiveDeviationAlarmType_BaseLowLowLimit,16775,Variable +NonExclusiveDeviationAlarmType_BaseSetpointNode,16776,Variable +ExclusiveDeviationAlarmType_ConditionSubClassId,16777,Variable +ExclusiveDeviationAlarmType_ConditionSubClassName,16778,Variable +ExclusiveDeviationAlarmType_OutOfServiceState,16779,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_Id,16780,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_Name,16781,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_Number,16782,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_EffectiveDisplayName,16783,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_TransitionTime,16784,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_EffectiveTransitionTime,16785,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_TrueState,16786,Variable +ExclusiveDeviationAlarmType_OutOfServiceState_FalseState,16787,Variable +ExclusiveDeviationAlarmType_SilenceState,16788,Variable +ExclusiveDeviationAlarmType_SilenceState_Id,16789,Variable +ExclusiveDeviationAlarmType_SilenceState_Name,16790,Variable +ExclusiveDeviationAlarmType_SilenceState_Number,16791,Variable +ExclusiveDeviationAlarmType_SilenceState_EffectiveDisplayName,16792,Variable +ExclusiveDeviationAlarmType_SilenceState_TransitionTime,16793,Variable +ExclusiveDeviationAlarmType_SilenceState_EffectiveTransitionTime,16794,Variable +ExclusiveDeviationAlarmType_SilenceState_TrueState,16795,Variable +ExclusiveDeviationAlarmType_SilenceState_FalseState,16796,Variable +ExclusiveDeviationAlarmType_AudibleEnabled,16797,Variable +ExclusiveDeviationAlarmType_AudibleSound,16798,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_MessageSettings,16799,Object +PublishedDataItemsType_DataSetClassId,16800,Variable +PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId,16801,Variable +PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask,16802,Variable +ExclusiveDeviationAlarmType_OnDelay,16803,Variable +ExclusiveDeviationAlarmType_OffDelay,16804,Variable +ExclusiveDeviationAlarmType_FirstInGroupFlag,16805,Variable +ExclusiveDeviationAlarmType_FirstInGroup,16806,Object +ExclusiveDeviationAlarmType_AlarmGroup_Placeholder,16807,Object +ExclusiveDeviationAlarmType_ReAlarmTime,16808,Variable +ExclusiveDeviationAlarmType_ReAlarmRepeatCount,16809,Variable +ExclusiveDeviationAlarmType_Silence,16810,Method +ExclusiveDeviationAlarmType_Suppress,16811,Method +PublishedEventsType_DataSetWriterName_Placeholder_KeyFrameCount,16812,Variable +ExclusiveDeviationAlarmType_BaseHighHighLimit,16813,Variable +ExclusiveDeviationAlarmType_BaseHighLimit,16814,Variable +ExclusiveDeviationAlarmType_BaseLowLimit,16815,Variable +ExclusiveDeviationAlarmType_BaseLowLowLimit,16816,Variable +ExclusiveDeviationAlarmType_BaseSetpointNode,16817,Variable +NonExclusiveRateOfChangeAlarmType_ConditionSubClassId,16818,Variable +NonExclusiveRateOfChangeAlarmType_ConditionSubClassName,16819,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState,16820,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id,16821,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Name,16822,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Number,16823,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveDisplayName,16824,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_TransitionTime,16825,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveTransitionTime,16826,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_TrueState,16827,Variable +NonExclusiveRateOfChangeAlarmType_OutOfServiceState_FalseState,16828,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState,16829,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_Id,16830,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_Name,16831,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_Number,16832,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_EffectiveDisplayName,16833,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_TransitionTime,16834,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_EffectiveTransitionTime,16835,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_TrueState,16836,Variable +NonExclusiveRateOfChangeAlarmType_SilenceState_FalseState,16837,Variable +NonExclusiveRateOfChangeAlarmType_AudibleEnabled,16838,Variable +NonExclusiveRateOfChangeAlarmType_AudibleSound,16839,Variable +PublishedEventsType_DataSetWriterName_Placeholder_MessageSettings,16840,Object +PublishedEventsType_DataSetClassId,16841,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate,16842,Method +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments,16843,Variable +NonExclusiveRateOfChangeAlarmType_OnDelay,16844,Variable +NonExclusiveRateOfChangeAlarmType_OffDelay,16845,Variable +NonExclusiveRateOfChangeAlarmType_FirstInGroupFlag,16846,Variable +NonExclusiveRateOfChangeAlarmType_FirstInGroup,16847,Object +NonExclusiveRateOfChangeAlarmType_AlarmGroup_Placeholder,16848,Object +NonExclusiveRateOfChangeAlarmType_ReAlarmTime,16849,Variable +NonExclusiveRateOfChangeAlarmType_ReAlarmRepeatCount,16850,Variable +NonExclusiveRateOfChangeAlarmType_Silence,16851,Method +NonExclusiveRateOfChangeAlarmType_Suppress,16852,Method +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments,16853,Variable +NonExclusiveRateOfChangeAlarmType_BaseHighHighLimit,16854,Variable +NonExclusiveRateOfChangeAlarmType_BaseHighLimit,16855,Variable +NonExclusiveRateOfChangeAlarmType_BaseLowLimit,16856,Variable +NonExclusiveRateOfChangeAlarmType_BaseLowLowLimit,16857,Variable +NonExclusiveRateOfChangeAlarmType_EngineeringUnits,16858,Variable +ExclusiveRateOfChangeAlarmType_ConditionSubClassId,16859,Variable +ExclusiveRateOfChangeAlarmType_ConditionSubClassName,16860,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState,16861,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id,16862,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_Name,16863,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_Number,16864,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveDisplayName,16865,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_TransitionTime,16866,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveTransitionTime,16867,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_TrueState,16868,Variable +ExclusiveRateOfChangeAlarmType_OutOfServiceState_FalseState,16869,Variable +ExclusiveRateOfChangeAlarmType_SilenceState,16870,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_Id,16871,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_Name,16872,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_Number,16873,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_EffectiveDisplayName,16874,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_TransitionTime,16875,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_EffectiveTransitionTime,16876,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_TrueState,16877,Variable +ExclusiveRateOfChangeAlarmType_SilenceState_FalseState,16878,Variable +ExclusiveRateOfChangeAlarmType_AudibleEnabled,16879,Variable +ExclusiveRateOfChangeAlarmType_AudibleSound,16880,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate,16881,Method +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments,16882,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments,16883,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder,16884,Method +ExclusiveRateOfChangeAlarmType_OnDelay,16885,Variable +ExclusiveRateOfChangeAlarmType_OffDelay,16886,Variable +ExclusiveRateOfChangeAlarmType_FirstInGroupFlag,16887,Variable +ExclusiveRateOfChangeAlarmType_FirstInGroup,16888,Object +ExclusiveRateOfChangeAlarmType_AlarmGroup_Placeholder,16889,Object +ExclusiveRateOfChangeAlarmType_ReAlarmTime,16890,Variable +ExclusiveRateOfChangeAlarmType_ReAlarmRepeatCount,16891,Variable +ExclusiveRateOfChangeAlarmType_Silence,16892,Method +ExclusiveRateOfChangeAlarmType_Suppress,16893,Method +DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments,16894,Variable +ExclusiveRateOfChangeAlarmType_BaseHighHighLimit,16895,Variable +ExclusiveRateOfChangeAlarmType_BaseHighLimit,16896,Variable +ExclusiveRateOfChangeAlarmType_BaseLowLimit,16897,Variable +ExclusiveRateOfChangeAlarmType_BaseLowLowLimit,16898,Variable +ExclusiveRateOfChangeAlarmType_EngineeringUnits,16899,Variable +DiscreteAlarmType_ConditionSubClassId,16900,Variable +DiscreteAlarmType_ConditionSubClassName,16901,Variable +DiscreteAlarmType_OutOfServiceState,16902,Variable +DiscreteAlarmType_OutOfServiceState_Id,16903,Variable +DiscreteAlarmType_OutOfServiceState_Name,16904,Variable +DiscreteAlarmType_OutOfServiceState_Number,16905,Variable +DiscreteAlarmType_OutOfServiceState_EffectiveDisplayName,16906,Variable +DiscreteAlarmType_OutOfServiceState_TransitionTime,16907,Variable +DiscreteAlarmType_OutOfServiceState_EffectiveTransitionTime,16908,Variable +DiscreteAlarmType_OutOfServiceState_TrueState,16909,Variable +DiscreteAlarmType_OutOfServiceState_FalseState,16910,Variable +DiscreteAlarmType_SilenceState,16911,Variable +DiscreteAlarmType_SilenceState_Id,16912,Variable +DiscreteAlarmType_SilenceState_Name,16913,Variable +DiscreteAlarmType_SilenceState_Number,16914,Variable +DiscreteAlarmType_SilenceState_EffectiveDisplayName,16915,Variable +DiscreteAlarmType_SilenceState_TransitionTime,16916,Variable +DiscreteAlarmType_SilenceState_EffectiveTransitionTime,16917,Variable +DiscreteAlarmType_SilenceState_TrueState,16918,Variable +DiscreteAlarmType_SilenceState_FalseState,16919,Variable +DiscreteAlarmType_AudibleEnabled,16920,Variable +DiscreteAlarmType_AudibleSound,16921,Variable +DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments,16922,Variable +DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder,16923,Method +DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments,16924,Variable +DataSetFolderType_PublishedDataSetName_Placeholder_DataSetClassId,16925,Variable +DiscreteAlarmType_OnDelay,16926,Variable +DiscreteAlarmType_OffDelay,16927,Variable +DiscreteAlarmType_FirstInGroupFlag,16928,Variable +DiscreteAlarmType_FirstInGroup,16929,Object +DiscreteAlarmType_AlarmGroup_Placeholder,16930,Object +DiscreteAlarmType_ReAlarmTime,16931,Variable +DiscreteAlarmType_ReAlarmRepeatCount,16932,Variable +DiscreteAlarmType_Silence,16933,Method +DiscreteAlarmType_Suppress,16934,Method +DataSetFolderType_AddPublishedDataItemsTemplate,16935,Method +OffNormalAlarmType_ConditionSubClassId,16936,Variable +OffNormalAlarmType_ConditionSubClassName,16937,Variable +OffNormalAlarmType_OutOfServiceState,16938,Variable +OffNormalAlarmType_OutOfServiceState_Id,16939,Variable +OffNormalAlarmType_OutOfServiceState_Name,16940,Variable +OffNormalAlarmType_OutOfServiceState_Number,16941,Variable +OffNormalAlarmType_OutOfServiceState_EffectiveDisplayName,16942,Variable +OffNormalAlarmType_OutOfServiceState_TransitionTime,16943,Variable +OffNormalAlarmType_OutOfServiceState_EffectiveTransitionTime,16944,Variable +OffNormalAlarmType_OutOfServiceState_TrueState,16945,Variable +OffNormalAlarmType_OutOfServiceState_FalseState,16946,Variable +OffNormalAlarmType_SilenceState,16947,Variable +OffNormalAlarmType_SilenceState_Id,16948,Variable +OffNormalAlarmType_SilenceState_Name,16949,Variable +OffNormalAlarmType_SilenceState_Number,16950,Variable +OffNormalAlarmType_SilenceState_EffectiveDisplayName,16951,Variable +OffNormalAlarmType_SilenceState_TransitionTime,16952,Variable +OffNormalAlarmType_SilenceState_EffectiveTransitionTime,16953,Variable +OffNormalAlarmType_SilenceState_TrueState,16954,Variable +OffNormalAlarmType_SilenceState_FalseState,16955,Variable +OffNormalAlarmType_AudibleEnabled,16956,Variable +OffNormalAlarmType_AudibleSound,16957,Variable +DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments,16958,Variable +DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments,16959,Variable +DataSetFolderType_AddPublishedEventsTemplate,16960,Method +DataSetFolderType_AddPublishedEventsTemplate_InputArguments,16961,Variable +OffNormalAlarmType_OnDelay,16962,Variable +OffNormalAlarmType_OffDelay,16963,Variable +OffNormalAlarmType_FirstInGroupFlag,16964,Variable +OffNormalAlarmType_FirstInGroup,16965,Object +OffNormalAlarmType_AlarmGroup_Placeholder,16966,Object +OffNormalAlarmType_ReAlarmTime,16967,Variable +OffNormalAlarmType_ReAlarmRepeatCount,16968,Variable +OffNormalAlarmType_Silence,16969,Method +OffNormalAlarmType_Suppress,16970,Method +DataSetFolderType_AddPublishedEventsTemplate_OutputArguments,16971,Variable +SystemOffNormalAlarmType_ConditionSubClassId,16972,Variable +SystemOffNormalAlarmType_ConditionSubClassName,16973,Variable +SystemOffNormalAlarmType_OutOfServiceState,16974,Variable +SystemOffNormalAlarmType_OutOfServiceState_Id,16975,Variable +SystemOffNormalAlarmType_OutOfServiceState_Name,16976,Variable +SystemOffNormalAlarmType_OutOfServiceState_Number,16977,Variable +SystemOffNormalAlarmType_OutOfServiceState_EffectiveDisplayName,16978,Variable +SystemOffNormalAlarmType_OutOfServiceState_TransitionTime,16979,Variable +SystemOffNormalAlarmType_OutOfServiceState_EffectiveTransitionTime,16980,Variable +SystemOffNormalAlarmType_OutOfServiceState_TrueState,16981,Variable +SystemOffNormalAlarmType_OutOfServiceState_FalseState,16982,Variable +SystemOffNormalAlarmType_SilenceState,16983,Variable +SystemOffNormalAlarmType_SilenceState_Id,16984,Variable +SystemOffNormalAlarmType_SilenceState_Name,16985,Variable +SystemOffNormalAlarmType_SilenceState_Number,16986,Variable +SystemOffNormalAlarmType_SilenceState_EffectiveDisplayName,16987,Variable +SystemOffNormalAlarmType_SilenceState_TransitionTime,16988,Variable +SystemOffNormalAlarmType_SilenceState_EffectiveTransitionTime,16989,Variable +SystemOffNormalAlarmType_SilenceState_TrueState,16990,Variable +SystemOffNormalAlarmType_SilenceState_FalseState,16991,Variable +SystemOffNormalAlarmType_AudibleEnabled,16992,Variable +SystemOffNormalAlarmType_AudibleSound,16993,Variable +DataSetFolderType_AddDataSetFolder,16994,Method +DataSetFolderType_AddDataSetFolder_InputArguments,16995,Variable +DataSetFolderType_AddDataSetFolder_OutputArguments,16996,Variable +DataSetFolderType_RemoveDataSetFolder,16997,Method +SystemOffNormalAlarmType_OnDelay,16998,Variable +SystemOffNormalAlarmType_OffDelay,16999,Variable +SystemOffNormalAlarmType_FirstInGroupFlag,17000,Variable +SystemOffNormalAlarmType_FirstInGroup,17001,Object +SystemOffNormalAlarmType_AlarmGroup_Placeholder,17002,Object +SystemOffNormalAlarmType_ReAlarmTime,17003,Variable +SystemOffNormalAlarmType_ReAlarmRepeatCount,17004,Variable +SystemOffNormalAlarmType_Silence,17005,Method +SystemOffNormalAlarmType_Suppress,17006,Method +DataSetFolderType_RemoveDataSetFolder_InputArguments,17007,Variable +TripAlarmType_ConditionSubClassId,17008,Variable +TripAlarmType_ConditionSubClassName,17009,Variable +TripAlarmType_OutOfServiceState,17010,Variable +TripAlarmType_OutOfServiceState_Id,17011,Variable +TripAlarmType_OutOfServiceState_Name,17012,Variable +TripAlarmType_OutOfServiceState_Number,17013,Variable +TripAlarmType_OutOfServiceState_EffectiveDisplayName,17014,Variable +TripAlarmType_OutOfServiceState_TransitionTime,17015,Variable +TripAlarmType_OutOfServiceState_EffectiveTransitionTime,17016,Variable +TripAlarmType_OutOfServiceState_TrueState,17017,Variable +TripAlarmType_OutOfServiceState_FalseState,17018,Variable +TripAlarmType_SilenceState,17019,Variable +TripAlarmType_SilenceState_Id,17020,Variable +TripAlarmType_SilenceState_Name,17021,Variable +TripAlarmType_SilenceState_Number,17022,Variable +TripAlarmType_SilenceState_EffectiveDisplayName,17023,Variable +TripAlarmType_SilenceState_TransitionTime,17024,Variable +TripAlarmType_SilenceState_EffectiveTransitionTime,17025,Variable +TripAlarmType_SilenceState_TrueState,17026,Variable +TripAlarmType_SilenceState_FalseState,17027,Variable +TripAlarmType_AudibleEnabled,17028,Variable +TripAlarmType_AudibleSound,17029,Variable +AddPublishedDataItemsTemplateMethodType,17030,Method +AddPublishedDataItemsTemplateMethodType_InputArguments,17031,Variable +AddPublishedDataItemsTemplateMethodType_OutputArguments,17032,Variable +AddPublishedEventsTemplateMethodType,17033,Method +TripAlarmType_OnDelay,17034,Variable +TripAlarmType_OffDelay,17035,Variable +TripAlarmType_FirstInGroupFlag,17036,Variable +TripAlarmType_FirstInGroup,17037,Object +TripAlarmType_AlarmGroup_Placeholder,17038,Object +TripAlarmType_ReAlarmTime,17039,Variable +TripAlarmType_ReAlarmRepeatCount,17040,Variable +TripAlarmType_Silence,17041,Method +TripAlarmType_Suppress,17042,Method +AddPublishedEventsTemplateMethodType_InputArguments,17043,Variable +CertificateExpirationAlarmType_ConditionSubClassId,17044,Variable +CertificateExpirationAlarmType_ConditionSubClassName,17045,Variable +CertificateExpirationAlarmType_OutOfServiceState,17046,Variable +CertificateExpirationAlarmType_OutOfServiceState_Id,17047,Variable +CertificateExpirationAlarmType_OutOfServiceState_Name,17048,Variable +CertificateExpirationAlarmType_OutOfServiceState_Number,17049,Variable +CertificateExpirationAlarmType_OutOfServiceState_EffectiveDisplayName,17050,Variable +CertificateExpirationAlarmType_OutOfServiceState_TransitionTime,17051,Variable +CertificateExpirationAlarmType_OutOfServiceState_EffectiveTransitionTime,17052,Variable +CertificateExpirationAlarmType_OutOfServiceState_TrueState,17053,Variable +CertificateExpirationAlarmType_OutOfServiceState_FalseState,17054,Variable +CertificateExpirationAlarmType_SilenceState,17055,Variable +CertificateExpirationAlarmType_SilenceState_Id,17056,Variable +CertificateExpirationAlarmType_SilenceState_Name,17057,Variable +CertificateExpirationAlarmType_SilenceState_Number,17058,Variable +CertificateExpirationAlarmType_SilenceState_EffectiveDisplayName,17059,Variable +CertificateExpirationAlarmType_SilenceState_TransitionTime,17060,Variable +CertificateExpirationAlarmType_SilenceState_EffectiveTransitionTime,17061,Variable +CertificateExpirationAlarmType_SilenceState_TrueState,17062,Variable +CertificateExpirationAlarmType_SilenceState_FalseState,17063,Variable +CertificateExpirationAlarmType_AudibleEnabled,17064,Variable +CertificateExpirationAlarmType_AudibleSound,17065,Variable +AddPublishedEventsTemplateMethodType_OutputArguments,17066,Variable +AddDataSetFolderMethodType,17067,Method +AddDataSetFolderMethodType_InputArguments,17068,Variable +AddDataSetFolderMethodType_OutputArguments,17069,Variable +CertificateExpirationAlarmType_OnDelay,17070,Variable +CertificateExpirationAlarmType_OffDelay,17071,Variable +CertificateExpirationAlarmType_FirstInGroupFlag,17072,Variable +CertificateExpirationAlarmType_FirstInGroup,17073,Object +CertificateExpirationAlarmType_AlarmGroup_Placeholder,17074,Object +CertificateExpirationAlarmType_ReAlarmTime,17075,Variable +CertificateExpirationAlarmType_ReAlarmRepeatCount,17076,Variable +CertificateExpirationAlarmType_Silence,17077,Method +CertificateExpirationAlarmType_Suppress,17078,Method +RemoveDataSetFolderMethodType,17079,Method +DiscrepancyAlarmType,17080,ObjectType +DiscrepancyAlarmType_EventId,17081,Variable +DiscrepancyAlarmType_EventType,17082,Variable +DiscrepancyAlarmType_SourceNode,17083,Variable +DiscrepancyAlarmType_SourceName,17084,Variable +DiscrepancyAlarmType_Time,17085,Variable +DiscrepancyAlarmType_ReceiveTime,17086,Variable +DiscrepancyAlarmType_LocalTime,17087,Variable +DiscrepancyAlarmType_Message,17088,Variable +DiscrepancyAlarmType_Severity,17089,Variable +DiscrepancyAlarmType_ConditionClassId,17090,Variable +DiscrepancyAlarmType_ConditionClassName,17091,Variable +DiscrepancyAlarmType_ConditionSubClassId,17092,Variable +DiscrepancyAlarmType_ConditionSubClassName,17093,Variable +DiscrepancyAlarmType_ConditionName,17094,Variable +DiscrepancyAlarmType_BranchId,17095,Variable +DiscrepancyAlarmType_Retain,17096,Variable +DiscrepancyAlarmType_EnabledState,17097,Variable +DiscrepancyAlarmType_EnabledState_Id,17098,Variable +DiscrepancyAlarmType_EnabledState_Name,17099,Variable +DiscrepancyAlarmType_EnabledState_Number,17100,Variable +DiscrepancyAlarmType_EnabledState_EffectiveDisplayName,17101,Variable +DiscrepancyAlarmType_EnabledState_TransitionTime,17102,Variable +DiscrepancyAlarmType_EnabledState_EffectiveTransitionTime,17103,Variable +DiscrepancyAlarmType_EnabledState_TrueState,17104,Variable +DiscrepancyAlarmType_EnabledState_FalseState,17105,Variable +DiscrepancyAlarmType_Quality,17106,Variable +DiscrepancyAlarmType_Quality_SourceTimestamp,17107,Variable +DiscrepancyAlarmType_LastSeverity,17108,Variable +DiscrepancyAlarmType_LastSeverity_SourceTimestamp,17109,Variable +DiscrepancyAlarmType_Comment,17110,Variable +DiscrepancyAlarmType_Comment_SourceTimestamp,17111,Variable +DiscrepancyAlarmType_ClientUserId,17112,Variable +DiscrepancyAlarmType_Disable,17113,Method +DiscrepancyAlarmType_Enable,17114,Method +DiscrepancyAlarmType_AddComment,17115,Method +DiscrepancyAlarmType_AddComment_InputArguments,17116,Variable +DiscrepancyAlarmType_ConditionRefresh,17117,Method +DiscrepancyAlarmType_ConditionRefresh_InputArguments,17118,Variable +DiscrepancyAlarmType_ConditionRefresh2,17119,Method +DiscrepancyAlarmType_ConditionRefresh2_InputArguments,17120,Variable +DiscrepancyAlarmType_AckedState,17121,Variable +DiscrepancyAlarmType_AckedState_Id,17122,Variable +DiscrepancyAlarmType_AckedState_Name,17123,Variable +DiscrepancyAlarmType_AckedState_Number,17124,Variable +DiscrepancyAlarmType_AckedState_EffectiveDisplayName,17125,Variable +DiscrepancyAlarmType_AckedState_TransitionTime,17126,Variable +DiscrepancyAlarmType_AckedState_EffectiveTransitionTime,17127,Variable +DiscrepancyAlarmType_AckedState_TrueState,17128,Variable +DiscrepancyAlarmType_AckedState_FalseState,17129,Variable +DiscrepancyAlarmType_ConfirmedState,17130,Variable +DiscrepancyAlarmType_ConfirmedState_Id,17131,Variable +DiscrepancyAlarmType_ConfirmedState_Name,17132,Variable +DiscrepancyAlarmType_ConfirmedState_Number,17133,Variable +DiscrepancyAlarmType_ConfirmedState_EffectiveDisplayName,17134,Variable +DiscrepancyAlarmType_ConfirmedState_TransitionTime,17135,Variable +DiscrepancyAlarmType_ConfirmedState_EffectiveTransitionTime,17136,Variable +DiscrepancyAlarmType_ConfirmedState_TrueState,17137,Variable +DiscrepancyAlarmType_ConfirmedState_FalseState,17138,Variable +DiscrepancyAlarmType_Acknowledge,17139,Method +DiscrepancyAlarmType_Acknowledge_InputArguments,17140,Variable +DiscrepancyAlarmType_Confirm,17141,Method +DiscrepancyAlarmType_Confirm_InputArguments,17142,Variable +DiscrepancyAlarmType_ActiveState,17143,Variable +DiscrepancyAlarmType_ActiveState_Id,17144,Variable +DiscrepancyAlarmType_ActiveState_Name,17145,Variable +DiscrepancyAlarmType_ActiveState_Number,17146,Variable +DiscrepancyAlarmType_ActiveState_EffectiveDisplayName,17147,Variable +DiscrepancyAlarmType_ActiveState_TransitionTime,17148,Variable +DiscrepancyAlarmType_ActiveState_EffectiveTransitionTime,17149,Variable +DiscrepancyAlarmType_ActiveState_TrueState,17150,Variable +DiscrepancyAlarmType_ActiveState_FalseState,17151,Variable +DiscrepancyAlarmType_InputNode,17152,Variable +DiscrepancyAlarmType_SuppressedState,17153,Variable +DiscrepancyAlarmType_SuppressedState_Id,17154,Variable +DiscrepancyAlarmType_SuppressedState_Name,17155,Variable +DiscrepancyAlarmType_SuppressedState_Number,17156,Variable +DiscrepancyAlarmType_SuppressedState_EffectiveDisplayName,17157,Variable +DiscrepancyAlarmType_SuppressedState_TransitionTime,17158,Variable +DiscrepancyAlarmType_SuppressedState_EffectiveTransitionTime,17159,Variable +DiscrepancyAlarmType_SuppressedState_TrueState,17160,Variable +DiscrepancyAlarmType_SuppressedState_FalseState,17161,Variable +DiscrepancyAlarmType_OutOfServiceState,17162,Variable +DiscrepancyAlarmType_OutOfServiceState_Id,17163,Variable +DiscrepancyAlarmType_OutOfServiceState_Name,17164,Variable +DiscrepancyAlarmType_OutOfServiceState_Number,17165,Variable +DiscrepancyAlarmType_OutOfServiceState_EffectiveDisplayName,17166,Variable +DiscrepancyAlarmType_OutOfServiceState_TransitionTime,17167,Variable +DiscrepancyAlarmType_OutOfServiceState_EffectiveTransitionTime,17168,Variable +DiscrepancyAlarmType_OutOfServiceState_TrueState,17169,Variable +DiscrepancyAlarmType_OutOfServiceState_FalseState,17170,Variable +DiscrepancyAlarmType_SilenceState,17171,Variable +DiscrepancyAlarmType_SilenceState_Id,17172,Variable +DiscrepancyAlarmType_SilenceState_Name,17173,Variable +DiscrepancyAlarmType_SilenceState_Number,17174,Variable +DiscrepancyAlarmType_SilenceState_EffectiveDisplayName,17175,Variable +DiscrepancyAlarmType_SilenceState_TransitionTime,17176,Variable +DiscrepancyAlarmType_SilenceState_EffectiveTransitionTime,17177,Variable +DiscrepancyAlarmType_SilenceState_TrueState,17178,Variable +DiscrepancyAlarmType_SilenceState_FalseState,17179,Variable +DiscrepancyAlarmType_ShelvingState,17180,Object +DiscrepancyAlarmType_ShelvingState_CurrentState,17181,Variable +DiscrepancyAlarmType_ShelvingState_CurrentState_Id,17182,Variable +DiscrepancyAlarmType_ShelvingState_CurrentState_Name,17183,Variable +DiscrepancyAlarmType_ShelvingState_CurrentState_Number,17184,Variable +DiscrepancyAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,17185,Variable +DiscrepancyAlarmType_ShelvingState_LastTransition,17186,Variable +DiscrepancyAlarmType_ShelvingState_LastTransition_Id,17187,Variable +DiscrepancyAlarmType_ShelvingState_LastTransition_Name,17188,Variable +DiscrepancyAlarmType_ShelvingState_LastTransition_Number,17189,Variable +DiscrepancyAlarmType_ShelvingState_LastTransition_TransitionTime,17190,Variable +DiscrepancyAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,17191,Variable +DiscrepancyAlarmType_ShelvingState_UnshelveTime,17192,Variable +DiscrepancyAlarmType_ShelvingState_Unshelve,17193,Method +DiscrepancyAlarmType_ShelvingState_OneShotShelve,17194,Method +DiscrepancyAlarmType_ShelvingState_TimedShelve,17195,Method +DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments,17196,Variable +DiscrepancyAlarmType_SuppressedOrShelved,17197,Variable +DiscrepancyAlarmType_MaxTimeShelved,17198,Variable +DiscrepancyAlarmType_AudibleEnabled,17199,Variable +DiscrepancyAlarmType_AudibleSound,17200,Variable +RemoveDataSetFolderMethodType_InputArguments,17201,Variable +PubSubConnectionType_Address_NetworkInterface,17202,Variable +PubSubConnectionType_TransportSettings,17203,Object +PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize,17204,Variable +DiscrepancyAlarmType_OnDelay,17205,Variable +DiscrepancyAlarmType_OffDelay,17206,Variable +DiscrepancyAlarmType_FirstInGroupFlag,17207,Variable +DiscrepancyAlarmType_FirstInGroup,17208,Object +DiscrepancyAlarmType_AlarmGroup_Placeholder,17209,Object +DiscrepancyAlarmType_ReAlarmTime,17210,Variable +DiscrepancyAlarmType_ReAlarmRepeatCount,17211,Variable +DiscrepancyAlarmType_Silence,17212,Method +DiscrepancyAlarmType_Suppress,17213,Method +PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId,17214,Variable +DiscrepancyAlarmType_TargetValueNode,17215,Variable +DiscrepancyAlarmType_ExpectedTime,17216,Variable +DiscrepancyAlarmType_Tolerance,17217,Variable +SafetyConditionClassType,17218,ObjectType +HighlyManagedAlarmConditionClassType,17219,ObjectType +TrainingConditionClassType,17220,ObjectType +TestingConditionSubClassType,17221,ObjectType +AuditConditionCommentEventType_ConditionEventId,17222,Variable +AuditConditionAcknowledgeEventType_ConditionEventId,17223,Variable +AuditConditionConfirmEventType_ConditionEventId,17224,Variable +AuditConditionSuppressionEventType,17225,ObjectType +AuditConditionSuppressionEventType_EventId,17226,Variable +AuditConditionSuppressionEventType_EventType,17227,Variable +AuditConditionSuppressionEventType_SourceNode,17228,Variable +AuditConditionSuppressionEventType_SourceName,17229,Variable +AuditConditionSuppressionEventType_Time,17230,Variable +AuditConditionSuppressionEventType_ReceiveTime,17231,Variable +AuditConditionSuppressionEventType_LocalTime,17232,Variable +AuditConditionSuppressionEventType_Message,17233,Variable +AuditConditionSuppressionEventType_Severity,17234,Variable +AuditConditionSuppressionEventType_ActionTimeStamp,17235,Variable +AuditConditionSuppressionEventType_Status,17236,Variable +AuditConditionSuppressionEventType_ServerId,17237,Variable +AuditConditionSuppressionEventType_ClientAuditEntryId,17238,Variable +AuditConditionSuppressionEventType_ClientUserId,17239,Variable +AuditConditionSuppressionEventType_MethodId,17240,Variable +AuditConditionSuppressionEventType_InputArguments,17241,Variable +AuditConditionSilenceEventType,17242,ObjectType +AuditConditionSilenceEventType_EventId,17243,Variable +AuditConditionSilenceEventType_EventType,17244,Variable +AuditConditionSilenceEventType_SourceNode,17245,Variable +AuditConditionSilenceEventType_SourceName,17246,Variable +AuditConditionSilenceEventType_Time,17247,Variable +AuditConditionSilenceEventType_ReceiveTime,17248,Variable +AuditConditionSilenceEventType_LocalTime,17249,Variable +AuditConditionSilenceEventType_Message,17250,Variable +AuditConditionSilenceEventType_Severity,17251,Variable +AuditConditionSilenceEventType_ActionTimeStamp,17252,Variable +AuditConditionSilenceEventType_Status,17253,Variable +AuditConditionSilenceEventType_ServerId,17254,Variable +AuditConditionSilenceEventType_ClientAuditEntryId,17255,Variable +AuditConditionSilenceEventType_ClientUserId,17256,Variable +AuditConditionSilenceEventType_MethodId,17257,Variable +AuditConditionSilenceEventType_InputArguments,17258,Variable +AuditConditionOutOfServiceEventType,17259,ObjectType +AuditConditionOutOfServiceEventType_EventId,17260,Variable +AuditConditionOutOfServiceEventType_EventType,17261,Variable +AuditConditionOutOfServiceEventType_SourceNode,17262,Variable +AuditConditionOutOfServiceEventType_SourceName,17263,Variable +AuditConditionOutOfServiceEventType_Time,17264,Variable +AuditConditionOutOfServiceEventType_ReceiveTime,17265,Variable +AuditConditionOutOfServiceEventType_LocalTime,17266,Variable +AuditConditionOutOfServiceEventType_Message,17267,Variable +AuditConditionOutOfServiceEventType_Severity,17268,Variable +AuditConditionOutOfServiceEventType_ActionTimeStamp,17269,Variable +AuditConditionOutOfServiceEventType_Status,17270,Variable +AuditConditionOutOfServiceEventType_ServerId,17271,Variable +AuditConditionOutOfServiceEventType_ClientAuditEntryId,17272,Variable +AuditConditionOutOfServiceEventType_ClientUserId,17273,Variable +AuditConditionOutOfServiceEventType_MethodId,17274,Variable +AuditConditionOutOfServiceEventType_InputArguments,17275,Variable +HasEffectDisable,17276,ReferenceType +AlarmRateVariableType,17277,VariableType +AlarmRateVariableType_Rate,17278,Variable +AlarmMetricsType,17279,ObjectType +AlarmMetricsType_AlarmCount,17280,Variable +AlarmMetricsType_MaximumActiveState,17281,Variable +AlarmMetricsType_MaximumUnAck,17282,Variable +AlarmMetricsType_MaximumReAlarmCount,17283,Variable +AlarmMetricsType_CurrentAlarmRate,17284,Variable +AlarmMetricsType_CurrentAlarmRate_Rate,17285,Variable +AlarmMetricsType_MaximumAlarmRate,17286,Variable +AlarmMetricsType_MaximumAlarmRate_Rate,17287,Variable +AlarmMetricsType_AverageAlarmRate,17288,Variable +AlarmMetricsType_AverageAlarmRate_Rate,17289,Variable +PubSubConnectionType_WriterGroupName_Placeholder_TransportSettings,17290,Object +PubSubConnectionType_WriterGroupName_Placeholder_MessageSettings,17291,Object +PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri,17292,Variable +PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter,17293,Method +PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments,17294,Variable +PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_RestrictToList,17295,Variable +PublishSubscribeType_SetSecurityKeys,17296,Method +PublishSubscribeType_SetSecurityKeys_InputArguments,17297,Variable +SetSecurityKeysMethodType,17298,Method +SetSecurityKeysMethodType_InputArguments,17299,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17300,Variable +PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments,17301,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize,17302,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17303,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent,17304,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,17305,Variable +PubSubConnectionType_TransportProfileUri,17306,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_TransportSettings,17307,Object +PubSubConnectionType_ReaderGroupName_Placeholder_MessageSettings,17308,Object +PubSubConnectionType_TransportProfileUri_RestrictToList,17309,Variable +PubSubConnectionType_WriterGroupName_Placeholder,17310,Object +PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode,17311,Variable +PubSubConnectionType_WriterGroupName_Placeholder_SecurityGroupId,17312,Variable +PubSubConnectionType_WriterGroupName_Placeholder_SecurityKeyServices,17313,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Status,17314,Object +PubSubConnectionType_WriterGroupName_Placeholder_Status_State,17315,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Status_Enable,17316,Method +PubSubConnectionType_WriterGroupName_Placeholder_Status_Disable,17317,Method +PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval,17318,Variable +PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime,17319,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,17320,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Priority,17321,Variable +PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds,17322,Variable +PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter,17323,Method +PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments,17324,Variable +PubSubConnectionType_ReaderGroupName_Placeholder,17325,Object +PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode,17326,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_SecurityGroupId,17327,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_SecurityKeyServices,17328,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Status,17329,Object +PubSubConnectionType_ReaderGroupName_Placeholder_Status_State,17330,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Status_Enable,17331,Method +PubSubConnectionType_ReaderGroupName_Placeholder_Status_Disable,17332,Method +PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader,17333,Method +PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments,17334,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17335,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17336,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError,17337,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,17338,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,17339,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17340,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17341,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent,17342,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,17343,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,17344,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17345,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17346,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,17347,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,17348,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,17349,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17350,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17351,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues,17352,Object +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress,17353,Variable +PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel,17354,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader,17355,Method +PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup,17356,Method +PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments,17357,Variable +PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments,17358,Variable +PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup,17359,Method +PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments,17360,Variable +PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments,17361,Variable +PublishSubscribe_ConnectionName_Placeholder_RemoveGroup,17362,Method +PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments,17363,Variable +PublishSubscribe_SetSecurityKeys,17364,Method +PublishSubscribe_SetSecurityKeys_InputArguments,17365,Variable +PublishSubscribe_AddConnection,17366,Method +PublishSubscribe_AddConnection_InputArguments,17367,Variable +PublishSubscribe_AddConnection_OutputArguments,17368,Variable +PublishSubscribe_RemoveConnection,17369,Method +PublishSubscribe_RemoveConnection_InputArguments,17370,Variable +PublishSubscribe_PublishedDataSets,17371,Object +PublishSubscribe_PublishedDataSets_AddPublishedDataItems,17372,Method +PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments,17373,Variable +PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments,17374,Variable +PublishSubscribe_PublishedDataSets_AddPublishedEvents,17375,Method +PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments,17376,Variable +PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments,17377,Variable +PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate,17378,Method +PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments,17379,Variable +PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments,17380,Variable +PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate,17381,Method +PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments,17382,Variable +PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments,17383,Variable +PublishSubscribe_PublishedDataSets_RemovePublishedDataSet,17384,Method +PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments,17385,Variable +DataSetReaderType_CreateTargetVariables,17386,Method +DataSetReaderType_CreateTargetVariables_InputArguments,17387,Variable +DataSetReaderType_CreateTargetVariables_OutputArguments,17388,Variable +DataSetReaderType_CreateDataSetMirror,17389,Method +DataSetReaderType_CreateDataSetMirror_InputArguments,17390,Variable +DataSetReaderType_CreateDataSetMirror_OutputArguments,17391,Variable +DataSetReaderTypeCreateTargetVariablesMethodType,17392,Method +DataSetReaderTypeCreateTargetVariablesMethodType_InputArguments,17393,Variable +DataSetReaderTypeCreateTargetVariablesMethodType_OutputArguments,17394,Variable +DataSetReaderTypeCreateDataSetMirrorMethodType,17395,Method +DataSetReaderTypeCreateDataSetMirrorMethodType_InputArguments,17396,Variable +DataSetReaderTypeCreateDataSetMirrorMethodType_OutputArguments,17397,Variable +PublishSubscribe_PublishedDataSets_AddDataSetFolder,17398,Method +PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments,17399,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments,17400,Variable +PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments,17401,Variable +PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments,17402,Variable +PublishSubscribe_PublishedDataSets_RemoveDataSetFolder,17403,Method +PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments,17404,Variable +PublishSubscribe_Status,17405,Object +PublishSubscribe_Status_State,17406,Variable +PublishSubscribe_Status_Enable,17407,Method +PublishSubscribe_Status_Disable,17408,Method +PublishSubscribe_Diagnostics,17409,Object +PublishSubscribe_Diagnostics_DiagnosticsLevel,17410,Variable +PublishSubscribe_Diagnostics_TotalInformation,17411,Variable +PublishSubscribe_Diagnostics_TotalInformation_Active,17412,Variable +PublishSubscribe_Diagnostics_TotalInformation_Classification,17413,Variable +PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel,17414,Variable +PublishSubscribe_Diagnostics_TotalInformation_TimeFirstChange,17415,Variable +PublishSubscribe_Diagnostics_TotalError,17416,Variable +PublishSubscribe_Diagnostics_TotalError_Active,17417,Variable +PublishSubscribe_Diagnostics_TotalError_Classification,17418,Variable +PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel,17419,Variable +PublishSubscribe_Diagnostics_TotalError_TimeFirstChange,17420,Variable +PublishSubscribe_Diagnostics_Reset,17421,Method +PublishSubscribe_Diagnostics_SubError,17422,Variable +PublishSubscribe_Diagnostics_Counters,17423,Object +PublishSubscribe_Diagnostics_Counters_StateError,17424,Variable +PublishSubscribe_Diagnostics_Counters_StateError_Active,17425,Variable +PublishSubscribe_Diagnostics_Counters_StateError_Classification,17426,Variable +PubSubConnectionType_AddWriterGroup,17427,Method +PubSubConnectionType_AddWriterGroup_InputArguments,17428,Variable +PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel,17429,Variable +PublishSubscribe_Diagnostics_Counters_StateError_TimeFirstChange,17430,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod,17431,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active,17432,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification,17433,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17434,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17435,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByParent,17436,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active,17437,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification,17438,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17439,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17440,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalFromError,17441,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active,17442,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification,17443,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17444,Variable +PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17445,Variable +PublishSubscribe_Diagnostics_Counters_StatePausedByParent,17446,Variable +PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active,17447,Variable +PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification,17448,Variable +PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17449,Variable +PublishSubscribe_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17450,Variable +PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod,17451,Variable +PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active,17452,Variable +PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification,17453,Variable +PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17454,Variable +PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17455,Variable +PubSubConnectionType_AddWriterGroup_OutputArguments,17456,Variable +PublishSubscribe_Diagnostics_LiveValues,17457,Object +PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters,17458,Variable +PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,17459,Variable +PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders,17460,Variable +PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,17461,Variable +PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters,17462,Variable +PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,17463,Variable +PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders,17464,Variable +PubSubConnectionType_AddReaderGroup,17465,Method +PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,17466,Variable +DatagramConnectionTransportDataType,17467,DataType +DatagramConnectionTransportDataType_Encoding_DefaultBinary,17468,Object +OpcUa_BinarySchema_DatagramConnectionTransportDataType,17469,Variable +OpcUa_BinarySchema_DatagramConnectionTransportDataType_DataTypeVersion,17470,Variable +OpcUa_BinarySchema_DatagramConnectionTransportDataType_DictionaryFragment,17471,Variable +DatagramConnectionTransportDataType_Encoding_DefaultXml,17472,Object +OpcUa_XmlSchema_DatagramConnectionTransportDataType,17473,Variable +OpcUa_XmlSchema_DatagramConnectionTransportDataType_DataTypeVersion,17474,Variable +OpcUa_XmlSchema_DatagramConnectionTransportDataType_DictionaryFragment,17475,Variable +DatagramConnectionTransportDataType_Encoding_DefaultJson,17476,Object +UadpDataSetReaderMessageType_DataSetOffset,17477,Variable +PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties,17478,Variable +PublishSubscribeType_SupportedTransportProfiles,17479,Variable +PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties,17480,Variable +PublishSubscribe_SupportedTransportProfiles,17481,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties,17482,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties,17483,Variable +PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties,17484,Variable +PubSubConnectionType_ConnectionProperties,17485,Variable +PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties,17486,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties,17487,Variable +PubSubGroupType_GroupProperties,17488,Variable +WriterGroupType_GroupProperties,17489,Variable +WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties,17490,Variable +ReaderGroupType_GroupProperties,17491,Variable +ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties,17492,Variable +DataSetWriterType_DataSetWriterProperties,17493,Variable +DataSetReaderType_DataSetReaderProperties,17494,Variable +CreateCredentialMethodType_OutputArguments,17495,Variable +KeyCredentialConfigurationFolderType,17496,ObjectType +AnalogUnitType,17497,VariableType +AnalogUnitType_Definition,17498,Variable +AnalogUnitType_ValuePrecision,17499,Variable +AnalogUnitType_InstrumentRange,17500,Variable +AnalogUnitType_EURange,17501,Variable +AnalogUnitType_EngineeringUnits,17502,Variable +PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections,17503,Variable +PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_SelectionDescriptions,17504,Variable +PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_RestrictToList,17505,Variable +PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections,17506,Variable +PubSubConnectionType_AddReaderGroup_InputArguments,17507,Variable +PubSubConnectionType_AddReaderGroup_OutputArguments,17508,Variable +PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_SelectionDescriptions,17509,Variable +PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_RestrictToList,17510,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder,17511,Object +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri,17512,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri,17513,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_EndpointUrls,17514,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ServiceStatus,17515,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_GetEncryptingKey,17516,Method +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_GetEncryptingKey_InputArguments,17517,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_GetEncryptingKey_OutputArguments,17518,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential,17519,Method +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments,17520,Variable +KeyCredentialConfigurationFolderType_ServiceName_Placeholder_DeleteCredential,17521,Method +KeyCredentialConfigurationFolderType_CreateCredential,17522,Method +KeyCredentialConfigurationFolderType_CreateCredential_InputArguments,17523,Variable +KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments,17524,Variable +KeyCredentialConfiguration_ServiceName_Placeholder_GetEncryptingKey,17525,Method +KeyCredentialConfiguration_ServiceName_Placeholder_GetEncryptingKey_InputArguments,17526,Variable +KeyCredentialConfiguration_ServiceName_Placeholder_GetEncryptingKey_OutputArguments,17527,Variable +KeyCredentialConfiguration_CreateCredential,17528,Method +KeyCredentialConfiguration_CreateCredential_InputArguments,17529,Variable +KeyCredentialConfiguration_CreateCredential_OutputArguments,17530,Variable +GetEncryptingKeyMethodType,17531,Method +GetEncryptingKeyMethodType_InputArguments,17532,Variable +GetEncryptingKeyMethodType_OutputArguments,17533,Variable +KeyCredentialConfigurationType_GetEncryptingKey,17534,Method +KeyCredentialConfigurationType_GetEncryptingKey_InputArguments,17535,Variable +KeyCredentialConfigurationType_GetEncryptingKey_OutputArguments,17536,Variable +AdditionalParametersType_Encoding_DefaultBinary,17537,Object +OpcUa_BinarySchema_AdditionalParametersType,17538,Variable +OpcUa_BinarySchema_AdditionalParametersType_DataTypeVersion,17539,Variable +OpcUa_BinarySchema_AdditionalParametersType_DictionaryFragment,17540,Variable +AdditionalParametersType_Encoding_DefaultXml,17541,Object +OpcUa_XmlSchema_AdditionalParametersType,17542,Variable +OpcUa_XmlSchema_AdditionalParametersType_DataTypeVersion,17543,Variable +OpcUa_XmlSchema_AdditionalParametersType_DictionaryFragment,17544,Variable +RsaEncryptedSecret,17545,DataType +EccEncryptedSecret,17546,DataType +AdditionalParametersType_Encoding_DefaultJson,17547,Object +EphemeralKeyType,17548,DataType +EphemeralKeyType_Encoding_DefaultBinary,17549,Object +OpcUa_BinarySchema_EphemeralKeyType,17550,Variable +OpcUa_BinarySchema_EphemeralKeyType_DataTypeVersion,17551,Variable +OpcUa_BinarySchema_EphemeralKeyType_DictionaryFragment,17552,Variable +EphemeralKeyType_Encoding_DefaultXml,17553,Object +OpcUa_XmlSchema_EphemeralKeyType,17554,Variable +OpcUa_XmlSchema_EphemeralKeyType_DataTypeVersion,17555,Variable +OpcUa_XmlSchema_EphemeralKeyType_DictionaryFragment,17556,Variable +EphemeralKeyType_Encoding_DefaultJson,17557,Object +PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri,17558,Variable +WriterGroupType_HeaderLayoutUri,17559,Variable +ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount,17560,Variable +PubSubConnectionTypeAddWriterGroupMethodType,17561,Method +ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri,17562,Variable +DataSetReaderType_KeyFrameCount,17563,Variable +DataSetReaderType_HeaderLayoutUri,17564,Variable +BaseAnalogType_Definition,17565,Variable +BaseAnalogType_ValuePrecision,17566,Variable +BaseAnalogType_InstrumentRange,17567,Variable +BaseAnalogType_EURange,17568,Variable +BaseAnalogType_EngineeringUnits,17569,Variable +AnalogUnitRangeType,17570,VariableType +AnalogUnitRangeType_Definition,17571,Variable +AnalogUnitRangeType_ValuePrecision,17572,Variable +AnalogUnitRangeType_InstrumentRange,17573,Variable +AnalogUnitRangeType_EURange,17574,Variable +AnalogUnitRangeType_EngineeringUnits,17575,Variable +PubSubConnectionType_Address_NetworkInterface_Selections,17576,Variable +PubSubConnectionType_Address_NetworkInterface_SelectionDescriptions,17577,Variable +PubSubConnectionType_Address_NetworkInterface_RestrictToList,17578,Variable +DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections,17579,Variable +DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_SelectionDescriptions,17580,Variable +DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_RestrictToList,17581,Variable +NetworkAddressType_NetworkInterface_Selections,17582,Variable +NetworkAddressType_NetworkInterface_SelectionDescriptions,17583,Variable +NetworkAddressType_NetworkInterface_RestrictToList,17584,Variable +NetworkAddressUrlType_NetworkInterface_Selections,17585,Variable +NetworkAddressUrlType_NetworkInterface_SelectionDescriptions,17586,Variable +NetworkAddressUrlType_NetworkInterface_RestrictToList,17587,Variable +Index,17588,DataType +DictionaryEntryType,17589,ObjectType +DictionaryEntryType_DictionaryEntryName_Placeholder,17590,Object +DictionaryFolderType,17591,ObjectType +DictionaryFolderType_DictionaryFolderName_Placeholder,17592,Object +DictionaryFolderType_DictionaryEntryName_Placeholder,17593,Object +Dictionaries,17594,Object +Dictionaries_DictionaryFolderName_Placeholder,17595,Object +Dictionaries_DictionaryEntryName_Placeholder,17596,Object +HasDictionaryEntry,17597,ReferenceType +IrdiDictionaryEntryType,17598,ObjectType +IrdiDictionaryEntryType_DictionaryEntryName_Placeholder,17599,Object +UriDictionaryEntryType,17600,ObjectType +UriDictionaryEntryType_DictionaryEntryName_Placeholder,17601,Object +BaseInterfaceType,17602,ObjectType +HasInterface,17603,ReferenceType +HasAddIn,17604,ReferenceType +DefaultInstanceBrowseName,17605,Variable +GenericAttributeValue,17606,DataType +GenericAttributes,17607,DataType +GenericAttributeValue_Encoding_DefaultXml,17608,Object +GenericAttributes_Encoding_DefaultXml,17609,Object +GenericAttributeValue_Encoding_DefaultBinary,17610,Object +GenericAttributes_Encoding_DefaultBinary,17611,Object +ServerType_LocalTime,17612,Variable +PubSubConnectionTypeAddWriterGroupMethodType_InputArguments,17613,Variable +PubSubConnectionTypeAddWriterGroupMethodType_OutputArguments,17614,Variable +AuditSecurityEventType_StatusCodeId,17615,Variable +AuditChannelEventType_StatusCodeId,17616,Variable +AuditOpenSecureChannelEventType_StatusCodeId,17617,Variable +AuditSessionEventType_StatusCodeId,17618,Variable +AuditCreateSessionEventType_StatusCodeId,17619,Variable +AuditUrlMismatchEventType_StatusCodeId,17620,Variable +AuditActivateSessionEventType_StatusCodeId,17621,Variable +AuditCancelEventType_StatusCodeId,17622,Variable +AuditCertificateEventType_StatusCodeId,17623,Variable +AuditCertificateDataMismatchEventType_StatusCodeId,17624,Variable +AuditCertificateExpiredEventType_StatusCodeId,17625,Variable +AuditCertificateInvalidEventType_StatusCodeId,17626,Variable +AuditCertificateUntrustedEventType_StatusCodeId,17627,Variable +AuditCertificateRevokedEventType_StatusCodeId,17628,Variable +AuditCertificateMismatchEventType_StatusCodeId,17629,Variable +PubSubConnectionAddReaderGroupGroupMethodType,17630,Method +PubSubConnectionAddReaderGroupGroupMethodType_InputArguments,17631,Variable +SelectionListType_Selections,17632,Variable +SelectionListType_SelectionDescriptions,17633,Variable +Server_LocalTime,17634,Variable +FiniteStateMachineType_AvailableStates,17635,Variable +FiniteStateMachineType_AvailableTransitions,17636,Variable +TemporaryFileTransferType_TransferState_Placeholder_AvailableStates,17637,Variable +TemporaryFileTransferType_TransferState_Placeholder_AvailableTransitions,17638,Variable +FileTransferStateMachineType_AvailableStates,17639,Variable +FileTransferStateMachineType_AvailableTransitions,17640,Variable +RoleMappingRuleChangedAuditEventType,17641,ObjectType +RoleMappingRuleChangedAuditEventType_EventId,17642,Variable +RoleMappingRuleChangedAuditEventType_EventType,17643,Variable +RoleMappingRuleChangedAuditEventType_SourceNode,17644,Variable +RoleMappingRuleChangedAuditEventType_SourceName,17645,Variable +RoleMappingRuleChangedAuditEventType_Time,17646,Variable +RoleMappingRuleChangedAuditEventType_ReceiveTime,17647,Variable +RoleMappingRuleChangedAuditEventType_LocalTime,17648,Variable +RoleMappingRuleChangedAuditEventType_Message,17649,Variable +RoleMappingRuleChangedAuditEventType_Severity,17650,Variable +RoleMappingRuleChangedAuditEventType_ActionTimeStamp,17651,Variable +RoleMappingRuleChangedAuditEventType_Status,17652,Variable +RoleMappingRuleChangedAuditEventType_ServerId,17653,Variable +RoleMappingRuleChangedAuditEventType_ClientAuditEntryId,17654,Variable +RoleMappingRuleChangedAuditEventType_ClientUserId,17655,Variable +RoleMappingRuleChangedAuditEventType_MethodId,17656,Variable +RoleMappingRuleChangedAuditEventType_InputArguments,17657,Variable +AlarmConditionType_ShelvingState_AvailableStates,17658,Variable +AlarmConditionType_ShelvingState_AvailableTransitions,17659,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_AvailableStates,17660,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_AvailableTransitions,17661,Variable +ShelvedStateMachineType_AvailableStates,17662,Variable +ShelvedStateMachineType_AvailableTransitions,17663,Variable +LimitAlarmType_ShelvingState_AvailableStates,17664,Variable +LimitAlarmType_ShelvingState_AvailableTransitions,17665,Variable +ExclusiveLimitStateMachineType_AvailableStates,17666,Variable +ExclusiveLimitStateMachineType_AvailableTransitions,17667,Variable +ExclusiveLimitAlarmType_ShelvingState_AvailableStates,17668,Variable +ExclusiveLimitAlarmType_ShelvingState_AvailableTransitions,17669,Variable +ExclusiveLimitAlarmType_LimitState_AvailableStates,17670,Variable +ExclusiveLimitAlarmType_LimitState_AvailableTransitions,17671,Variable +NonExclusiveLimitAlarmType_ShelvingState_AvailableStates,17672,Variable +NonExclusiveLimitAlarmType_ShelvingState_AvailableTransitions,17673,Variable +NonExclusiveLevelAlarmType_ShelvingState_AvailableStates,17674,Variable +NonExclusiveLevelAlarmType_ShelvingState_AvailableTransitions,17675,Variable +ExclusiveLevelAlarmType_ShelvingState_AvailableStates,17676,Variable +ExclusiveLevelAlarmType_ShelvingState_AvailableTransitions,17677,Variable +ExclusiveLevelAlarmType_LimitState_AvailableStates,17678,Variable +ExclusiveLevelAlarmType_LimitState_AvailableTransitions,17679,Variable +NonExclusiveDeviationAlarmType_ShelvingState_AvailableStates,17680,Variable +NonExclusiveDeviationAlarmType_ShelvingState_AvailableTransitions,17681,Variable +ExclusiveDeviationAlarmType_ShelvingState_AvailableStates,17682,Variable +ExclusiveDeviationAlarmType_ShelvingState_AvailableTransitions,17683,Variable +ExclusiveDeviationAlarmType_LimitState_AvailableStates,17684,Variable +ExclusiveDeviationAlarmType_LimitState_AvailableTransitions,17685,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_AvailableStates,17686,Variable +NonExclusiveRateOfChangeAlarmType_ShelvingState_AvailableTransitions,17687,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_AvailableStates,17688,Variable +ExclusiveRateOfChangeAlarmType_ShelvingState_AvailableTransitions,17689,Variable +ExclusiveRateOfChangeAlarmType_LimitState_AvailableStates,17690,Variable +ExclusiveRateOfChangeAlarmType_LimitState_AvailableTransitions,17691,Variable +DiscreteAlarmType_ShelvingState_AvailableStates,17692,Variable +DiscreteAlarmType_ShelvingState_AvailableTransitions,17693,Variable +OffNormalAlarmType_ShelvingState_AvailableStates,17694,Variable +OffNormalAlarmType_ShelvingState_AvailableTransitions,17695,Variable +SystemOffNormalAlarmType_ShelvingState_AvailableStates,17696,Variable +SystemOffNormalAlarmType_ShelvingState_AvailableTransitions,17697,Variable +TripAlarmType_ShelvingState_AvailableStates,17698,Variable +TripAlarmType_ShelvingState_AvailableTransitions,17699,Variable +CertificateExpirationAlarmType_ShelvingState_AvailableStates,17700,Variable +CertificateExpirationAlarmType_ShelvingState_AvailableTransitions,17701,Variable +DiscrepancyAlarmType_ShelvingState_AvailableStates,17702,Variable +DiscrepancyAlarmType_ShelvingState_AvailableTransitions,17703,Variable +ProgramStateMachineType_AvailableStates,17704,Variable +ProgramStateMachineType_AvailableTransitions,17705,Variable +PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections,17706,Variable +PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_SelectionDescriptions,17707,Variable +InterfaceTypes,17708,Object +RationalNumberType,17709,VariableType +PubSubConnectionType_TransportProfileUri_Selections,17710,Variable +PubSubConnectionType_TransportProfileUri_SelectionDescriptions,17711,Variable +RationalNumberType_Numerator,17712,Variable +RationalNumberType_Denominator,17713,Variable +VectorType,17714,VariableType +VectorType_VectorUnit,17715,Variable +ThreeDVectorType,17716,VariableType +ThreeDVectorType_VectorUnit,17717,Variable +FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject,17718,Method +FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments,17719,Variable +PubSubConnectionAddReaderGroupGroupMethodType_OutputArguments,17720,Variable +ConnectionTransportType,17721,ObjectType +FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject,17722,Method +FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments,17723,Variable +PubSubGroupType_MaxNetworkMessageSize,17724,Variable +WriterGroupType,17725,ObjectType +WriterGroupType_SecurityMode,17726,Variable +WriterGroupType_SecurityGroupId,17727,Variable +WriterGroupType_SecurityKeyServices,17728,Variable +WriterGroupType_MaxNetworkMessageSize,17729,Variable +WriterGroupType_Status,17730,Object +WriterGroupType_Status_State,17731,Variable +AuthorizationServices,17732,Object +AuthorizationServices_ServiceName_Placeholder,17733,Object +WriterGroupType_Status_Enable,17734,Method +WriterGroupType_Status_Disable,17735,Method +WriterGroupType_WriterGroupId,17736,Variable +WriterGroupType_PublishingInterval,17737,Variable +WriterGroupType_KeepAliveTime,17738,Variable +WriterGroupType_Priority,17739,Variable +WriterGroupType_LocaleIds,17740,Variable +WriterGroupType_TransportSettings,17741,Object +WriterGroupType_MessageSettings,17742,Object +WriterGroupType_DataSetWriterName_Placeholder,17743,Object +WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId,17744,Variable +WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask,17745,Variable +WriterGroupType_DataSetWriterName_Placeholder_KeyFrameCount,17746,Variable +WriterGroupType_DataSetWriterName_Placeholder_TransportSettings,17747,Object +WriterGroupType_DataSetWriterName_Placeholder_MessageSettings,17748,Object +WriterGroupType_DataSetWriterName_Placeholder_Status,17749,Object +WriterGroupType_DataSetWriterName_Placeholder_Status_State,17750,Variable +WriterGroupType_DataSetWriterName_Placeholder_Status_Enable,17751,Method +WriterGroupType_DataSetWriterName_Placeholder_Status_Disable,17752,Method +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics,17753,Object +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,17754,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,17755,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,17756,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,17757,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,17758,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,17759,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError,17760,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,17761,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,17762,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,17763,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,17764,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset,17765,Method +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError,17766,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters,17767,Object +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,17768,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,17769,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,17770,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,17771,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,17772,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,17773,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,17774,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,17775,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17776,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17777,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,17778,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,17779,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,17780,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17781,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17782,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,17783,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,17784,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,17785,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17786,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17787,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,17788,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,17789,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,17790,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17791,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17792,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,17793,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,17794,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,17795,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17796,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17797,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,17798,Object +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,17799,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,17800,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,17801,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,17802,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,17803,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,17804,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,17805,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,17806,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,17807,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,17808,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,17809,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,17810,Variable +WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,17811,Variable +WriterGroupType_Diagnostics,17812,Object +WriterGroupType_Diagnostics_DiagnosticsLevel,17813,Variable +WriterGroupType_Diagnostics_TotalInformation,17814,Variable +WriterGroupType_Diagnostics_TotalInformation_Active,17815,Variable +WriterGroupType_Diagnostics_TotalInformation_Classification,17816,Variable +WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel,17817,Variable +WriterGroupType_Diagnostics_TotalInformation_TimeFirstChange,17818,Variable +WriterGroupType_Diagnostics_TotalError,17819,Variable +WriterGroupType_Diagnostics_TotalError_Active,17820,Variable +WriterGroupType_Diagnostics_TotalError_Classification,17821,Variable +WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel,17822,Variable +WriterGroupType_Diagnostics_TotalError_TimeFirstChange,17823,Variable +WriterGroupType_Diagnostics_Reset,17824,Method +WriterGroupType_Diagnostics_SubError,17825,Variable +WriterGroupType_Diagnostics_Counters,17826,Object +WriterGroupType_Diagnostics_Counters_StateError,17827,Variable +WriterGroupType_Diagnostics_Counters_StateError_Active,17828,Variable +WriterGroupType_Diagnostics_Counters_StateError_Classification,17829,Variable +WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel,17830,Variable +WriterGroupType_Diagnostics_Counters_StateError_TimeFirstChange,17831,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByMethod,17832,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active,17833,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification,17834,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17835,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17836,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByParent,17837,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active,17838,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification,17839,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17840,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17841,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalFromError,17842,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active,17843,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification,17844,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17845,Variable +WriterGroupType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17846,Variable +WriterGroupType_Diagnostics_Counters_StatePausedByParent,17847,Variable +WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active,17848,Variable +WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification,17849,Variable +WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17850,Variable +WriterGroupType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17851,Variable +AuthorizationServiceConfigurationType,17852,ObjectType +WriterGroupType_Diagnostics_Counters_StateDisabledByMethod,17853,Variable +WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active,17854,Variable +WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification,17855,Variable +WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17856,Variable +WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17857,Variable +WriterGroupType_Diagnostics_LiveValues,17858,Object +WriterGroupType_Diagnostics_Counters_SentNetworkMessages,17859,Variable +AuthorizationServiceConfigurationType_ServiceCertificate,17860,Variable +DecimalDataType,17861,DataType +DecimalDataType_Encoding_DefaultXml,17862,Object +DecimalDataType_Encoding_DefaultBinary,17863,Object +WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active,17864,Variable +AlarmConditionType_AudibleSound_ListId,17865,Variable +AlarmConditionType_AudibleSound_AgencyId,17866,Variable +AlarmConditionType_AudibleSound_VersionId,17867,Variable +AlarmConditionType_Unsuppress,17868,Method +AlarmConditionType_RemoveFromService,17869,Method +AlarmConditionType_PlaceInService,17870,Method +WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification,17871,Variable +WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel,17872,Variable +WriterGroupType_Diagnostics_Counters_SentNetworkMessages_TimeFirstChange,17873,Variable +WriterGroupType_Diagnostics_Counters_FailedTransmissions,17874,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Unsuppress,17875,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_RemoveFromService,17876,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_PlaceInService,17877,Method +WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active,17878,Variable +LimitAlarmType_AudibleSound_ListId,17879,Variable +LimitAlarmType_AudibleSound_AgencyId,17880,Variable +LimitAlarmType_AudibleSound_VersionId,17881,Variable +LimitAlarmType_Unsuppress,17882,Method +LimitAlarmType_RemoveFromService,17883,Method +LimitAlarmType_PlaceInService,17884,Method +WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification,17885,Variable +ExclusiveLimitAlarmType_AudibleSound_ListId,17886,Variable +ExclusiveLimitAlarmType_AudibleSound_AgencyId,17887,Variable +ExclusiveLimitAlarmType_AudibleSound_VersionId,17888,Variable +ExclusiveLimitAlarmType_Unsuppress,17889,Method +ExclusiveLimitAlarmType_RemoveFromService,17890,Method +ExclusiveLimitAlarmType_PlaceInService,17891,Method +WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel,17892,Variable +NonExclusiveLimitAlarmType_AudibleSound_ListId,17893,Variable +NonExclusiveLimitAlarmType_AudibleSound_AgencyId,17894,Variable +NonExclusiveLimitAlarmType_AudibleSound_VersionId,17895,Variable +NonExclusiveLimitAlarmType_Unsuppress,17896,Method +NonExclusiveLimitAlarmType_RemoveFromService,17897,Method +NonExclusiveLimitAlarmType_PlaceInService,17898,Method +WriterGroupType_Diagnostics_Counters_FailedTransmissions_TimeFirstChange,17899,Variable +WriterGroupType_Diagnostics_Counters_EncryptionErrors,17900,Variable +WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active,17901,Variable +WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification,17902,Variable +WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel,17903,Variable +NonExclusiveLevelAlarmType_RemoveFromService,17904,Method +NonExclusiveLevelAlarmType_PlaceInService,17905,Method +WriterGroupType_Diagnostics_Counters_EncryptionErrors_TimeFirstChange,17906,Variable +ExclusiveLevelAlarmType_AudibleSound_ListId,17907,Variable +ExclusiveLevelAlarmType_AudibleSound_AgencyId,17908,Variable +ExclusiveLevelAlarmType_AudibleSound_VersionId,17909,Variable +ExclusiveLevelAlarmType_Unsuppress,17910,Method +ExclusiveLevelAlarmType_RemoveFromService,17911,Method +ExclusiveLevelAlarmType_PlaceInService,17912,Method +WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters,17913,Variable +NonExclusiveDeviationAlarmType_AudibleSound_ListId,17914,Variable +NonExclusiveDeviationAlarmType_AudibleSound_AgencyId,17915,Variable +NonExclusiveDeviationAlarmType_AudibleSound_VersionId,17916,Variable +NonExclusiveDeviationAlarmType_Unsuppress,17917,Method +NonExclusiveDeviationAlarmType_RemoveFromService,17918,Method +NonExclusiveDeviationAlarmType_PlaceInService,17919,Method +WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,17920,Variable +NonExclusiveRateOfChangeAlarmType_AudibleSound_ListId,17921,Variable +NonExclusiveRateOfChangeAlarmType_AudibleSound_AgencyId,17922,Variable +NonExclusiveRateOfChangeAlarmType_AudibleSound_VersionId,17923,Variable +NonExclusiveRateOfChangeAlarmType_Unsuppress,17924,Method +NonExclusiveRateOfChangeAlarmType_RemoveFromService,17925,Method +NonExclusiveRateOfChangeAlarmType_PlaceInService,17926,Method +WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters,17927,Variable +ExclusiveDeviationAlarmType_AudibleSound_ListId,17928,Variable +ExclusiveDeviationAlarmType_AudibleSound_AgencyId,17929,Variable +ExclusiveDeviationAlarmType_AudibleSound_VersionId,17930,Variable +ExclusiveDeviationAlarmType_Unsuppress,17931,Method +ExclusiveDeviationAlarmType_RemoveFromService,17932,Method +ExclusiveDeviationAlarmType_PlaceInService,17933,Method +WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,17934,Variable +ExclusiveRateOfChangeAlarmType_AudibleSound_ListId,17935,Variable +ExclusiveRateOfChangeAlarmType_AudibleSound_AgencyId,17936,Variable +ExclusiveRateOfChangeAlarmType_AudibleSound_VersionId,17937,Variable +ExclusiveRateOfChangeAlarmType_Unsuppress,17938,Method +ExclusiveRateOfChangeAlarmType_RemoveFromService,17939,Method +ExclusiveRateOfChangeAlarmType_PlaceInService,17940,Method +WriterGroupType_Diagnostics_LiveValues_SecurityTokenID,17941,Variable +DiscreteAlarmType_AudibleSound_ListId,17942,Variable +DiscreteAlarmType_AudibleSound_AgencyId,17943,Variable +DiscreteAlarmType_AudibleSound_VersionId,17944,Variable +DiscreteAlarmType_Unsuppress,17945,Method +DiscreteAlarmType_RemoveFromService,17946,Method +DiscreteAlarmType_PlaceInService,17947,Method +WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,17948,Variable +OffNormalAlarmType_AudibleSound_ListId,17949,Variable +OffNormalAlarmType_AudibleSound_AgencyId,17950,Variable +OffNormalAlarmType_AudibleSound_VersionId,17951,Variable +OffNormalAlarmType_Unsuppress,17952,Method +OffNormalAlarmType_RemoveFromService,17953,Method +OffNormalAlarmType_PlaceInService,17954,Method +WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID,17955,Variable +SystemOffNormalAlarmType_AudibleSound_ListId,17956,Variable +SystemOffNormalAlarmType_AudibleSound_AgencyId,17957,Variable +SystemOffNormalAlarmType_AudibleSound_VersionId,17958,Variable +SystemOffNormalAlarmType_Unsuppress,17959,Method +SystemOffNormalAlarmType_RemoveFromService,17960,Method +SystemOffNormalAlarmType_PlaceInService,17961,Method +WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,17962,Variable +TripAlarmType_AudibleSound_ListId,17963,Variable +TripAlarmType_AudibleSound_AgencyId,17964,Variable +TripAlarmType_AudibleSound_VersionId,17965,Variable +TripAlarmType_Unsuppress,17966,Method +TripAlarmType_RemoveFromService,17967,Method +TripAlarmType_PlaceInService,17968,Method +WriterGroupType_AddDataSetWriter,17969,Method +CertificateExpirationAlarmType_AudibleSound_ListId,17970,Variable +CertificateExpirationAlarmType_AudibleSound_AgencyId,17971,Variable +CertificateExpirationAlarmType_AudibleSound_VersionId,17972,Variable +CertificateExpirationAlarmType_Unsuppress,17973,Method +CertificateExpirationAlarmType_RemoveFromService,17974,Method +CertificateExpirationAlarmType_PlaceInService,17975,Method +WriterGroupType_AddDataSetWriter_InputArguments,17976,Variable +DiscrepancyAlarmType_AudibleSound_ListId,17977,Variable +DiscrepancyAlarmType_AudibleSound_AgencyId,17978,Variable +DiscrepancyAlarmType_AudibleSound_VersionId,17979,Variable +DiscrepancyAlarmType_Unsuppress,17980,Method +DiscrepancyAlarmType_RemoveFromService,17981,Method +DiscrepancyAlarmType_PlaceInService,17982,Method +HasEffectEnable,17983,ReferenceType +HasEffectSuppressed,17984,ReferenceType +HasEffectUnsuppressed,17985,ReferenceType +AudioVariableType,17986,VariableType +WriterGroupType_AddDataSetWriter_OutputArguments,17987,Variable +AudioVariableType_ListId,17988,Variable +AudioVariableType_AgencyId,17989,Variable +AudioVariableType_VersionId,17990,Variable +AlarmMetricsType_StartTime,17991,Variable +WriterGroupType_RemoveDataSetWriter,17992,Method +WriterGroupType_RemoveDataSetWriter_InputArguments,17993,Variable +PubSubGroupTypeAddWriterrMethodType,17994,Method +PubSubGroupTypeAddWriterrMethodType_InputArguments,17995,Variable +PubSubGroupTypeAddWriterrMethodType_OutputArguments,17996,Variable +WriterGroupTransportType,17997,ObjectType +WriterGroupMessageType,17998,ObjectType +ReaderGroupType,17999,ObjectType +ReaderGroupType_SecurityMode,18000,Variable +KeyCredentialConfigurationType,18001,ObjectType +ReaderGroupType_SecurityGroupId,18002,Variable +ReaderGroupType_SecurityKeyServices,18003,Variable +KeyCredentialConfigurationType_EndpointUrls,18004,Variable +KeyCredentialConfigurationType_ServiceStatus,18005,Variable +KeyCredentialConfigurationType_UpdateCredential,18006,Method +KeyCredentialConfigurationType_UpdateCredential_InputArguments,18007,Variable +KeyCredentialConfigurationType_DeleteCredential,18008,Method +KeyCredentialUpdateMethodType,18009,Method +KeyCredentialUpdateMethodType_InputArguments,18010,Variable +KeyCredentialAuditEventType,18011,ObjectType +KeyCredentialAuditEventType_EventId,18012,Variable +KeyCredentialAuditEventType_EventType,18013,Variable +KeyCredentialAuditEventType_SourceNode,18014,Variable +KeyCredentialAuditEventType_SourceName,18015,Variable +KeyCredentialAuditEventType_Time,18016,Variable +KeyCredentialAuditEventType_ReceiveTime,18017,Variable +KeyCredentialAuditEventType_LocalTime,18018,Variable +KeyCredentialAuditEventType_Message,18019,Variable +KeyCredentialAuditEventType_Severity,18020,Variable +KeyCredentialAuditEventType_ActionTimeStamp,18021,Variable +KeyCredentialAuditEventType_Status,18022,Variable +KeyCredentialAuditEventType_ServerId,18023,Variable +KeyCredentialAuditEventType_ClientAuditEntryId,18024,Variable +KeyCredentialAuditEventType_ClientUserId,18025,Variable +KeyCredentialAuditEventType_MethodId,18026,Variable +KeyCredentialAuditEventType_InputArguments,18027,Variable +KeyCredentialAuditEventType_ResourceUri,18028,Variable +KeyCredentialUpdatedAuditEventType,18029,ObjectType +KeyCredentialUpdatedAuditEventType_EventId,18030,Variable +KeyCredentialUpdatedAuditEventType_EventType,18031,Variable +KeyCredentialUpdatedAuditEventType_SourceNode,18032,Variable +KeyCredentialUpdatedAuditEventType_SourceName,18033,Variable +KeyCredentialUpdatedAuditEventType_Time,18034,Variable +KeyCredentialUpdatedAuditEventType_ReceiveTime,18035,Variable +KeyCredentialUpdatedAuditEventType_LocalTime,18036,Variable +KeyCredentialUpdatedAuditEventType_Message,18037,Variable +KeyCredentialUpdatedAuditEventType_Severity,18038,Variable +KeyCredentialUpdatedAuditEventType_ActionTimeStamp,18039,Variable +KeyCredentialUpdatedAuditEventType_Status,18040,Variable +KeyCredentialUpdatedAuditEventType_ServerId,18041,Variable +KeyCredentialUpdatedAuditEventType_ClientAuditEntryId,18042,Variable +KeyCredentialUpdatedAuditEventType_ClientUserId,18043,Variable +KeyCredentialUpdatedAuditEventType_MethodId,18044,Variable +KeyCredentialUpdatedAuditEventType_InputArguments,18045,Variable +KeyCredentialUpdatedAuditEventType_ResourceUri,18046,Variable +KeyCredentialDeletedAuditEventType,18047,ObjectType +KeyCredentialDeletedAuditEventType_EventId,18048,Variable +KeyCredentialDeletedAuditEventType_EventType,18049,Variable +KeyCredentialDeletedAuditEventType_SourceNode,18050,Variable +KeyCredentialDeletedAuditEventType_SourceName,18051,Variable +KeyCredentialDeletedAuditEventType_Time,18052,Variable +KeyCredentialDeletedAuditEventType_ReceiveTime,18053,Variable +KeyCredentialDeletedAuditEventType_LocalTime,18054,Variable +KeyCredentialDeletedAuditEventType_Message,18055,Variable +KeyCredentialDeletedAuditEventType_Severity,18056,Variable +KeyCredentialDeletedAuditEventType_ActionTimeStamp,18057,Variable +KeyCredentialDeletedAuditEventType_Status,18058,Variable +KeyCredentialDeletedAuditEventType_ServerId,18059,Variable +KeyCredentialDeletedAuditEventType_ClientAuditEntryId,18060,Variable +KeyCredentialDeletedAuditEventType_ClientUserId,18061,Variable +KeyCredentialDeletedAuditEventType_MethodId,18062,Variable +KeyCredentialDeletedAuditEventType_InputArguments,18063,Variable +KeyCredentialDeletedAuditEventType_ResourceUri,18064,Variable +ReaderGroupType_MaxNetworkMessageSize,18065,Variable +AuthorizationServices_ServiceName_Placeholder_ServiceCertificate,18066,Variable +ReaderGroupType_Status,18067,Object +ReaderGroupType_Status_State,18068,Variable +KeyCredentialConfigurationType_ResourceUri,18069,Variable +AuthorizationServices_ServiceName_Placeholder_ServiceUri,18070,Variable +AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl,18071,Variable +AuthorizationServiceConfigurationType_ServiceUri,18072,Variable +AuthorizationServiceConfigurationType_IssuerEndpointUrl,18073,Variable +ReaderGroupType_Status_Enable,18074,Method +ReaderGroupType_Status_Disable,18075,Method +ReaderGroupType_DataSetReaderName_Placeholder,18076,Object +ReaderGroupType_DataSetReaderName_Placeholder_PublisherId,18077,Variable +ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId,18078,Variable +ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId,18079,Variable +ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData,18080,Variable +ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask,18081,Variable +ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout,18082,Variable +ReaderGroupType_DataSetReaderName_Placeholder_SecurityMode,18083,Variable +ReaderGroupType_DataSetReaderName_Placeholder_SecurityGroupId,18084,Variable +ReaderGroupType_DataSetReaderName_Placeholder_SecurityKeyServices,18085,Variable +ReaderGroupType_DataSetReaderName_Placeholder_TransportSettings,18086,Object +ReaderGroupType_DataSetReaderName_Placeholder_MessageSettings,18087,Object +ReaderGroupType_DataSetReaderName_Placeholder_Status,18088,Object +ReaderGroupType_DataSetReaderName_Placeholder_Status_State,18089,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Status_Enable,18090,Method +ReaderGroupType_DataSetReaderName_Placeholder_Status_Disable,18091,Method +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics,18092,Object +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel,18093,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation,18094,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active,18095,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification,18096,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18097,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18098,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError,18099,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active,18100,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification,18101,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18102,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18103,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset,18104,Method +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError,18105,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters,18106,Object +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError,18107,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active,18108,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification,18109,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18110,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18111,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18112,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18113,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18114,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18115,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18116,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18117,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18118,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18119,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18120,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18121,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18122,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18123,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18124,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18125,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18126,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent,18127,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18128,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18129,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18130,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18131,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18132,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18133,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18134,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18135,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18136,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues,18137,Object +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,18138,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,18139,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,18140,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,18141,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,18142,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors,18143,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active,18144,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification,18145,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,18146,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,18147,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,18148,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,18149,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode,18150,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,18151,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion,18152,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,18153,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion,18154,Variable +KeyCredentialConfiguration,18155,Object +KeyCredentialConfiguration_ServiceName_Placeholder,18156,Object +KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri,18157,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,18158,Variable +KeyCredentialConfiguration_ServiceName_Placeholder_EndpointUrls,18159,Variable +KeyCredentialConfiguration_ServiceName_Placeholder_ServiceStatus,18160,Variable +KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential,18161,Method +KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments,18162,Variable +KeyCredentialConfiguration_ServiceName_Placeholder_DeleteCredential,18163,Method +KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri,18164,Variable +KeyCredentialConfigurationType_ProfileUri,18165,Variable +OpcUa_XmlSchema_DataTypeDefinition,18166,Variable +OpcUa_XmlSchema_DataTypeDefinition_DataTypeVersion,18167,Variable +OpcUa_XmlSchema_DataTypeDefinition_DictionaryFragment,18168,Variable +OpcUa_XmlSchema_StructureField,18169,Variable +OpcUa_XmlSchema_StructureField_DataTypeVersion,18170,Variable +OpcUa_XmlSchema_StructureField_DictionaryFragment,18171,Variable +OpcUa_XmlSchema_StructureDefinition,18172,Variable +OpcUa_XmlSchema_StructureDefinition_DataTypeVersion,18173,Variable +OpcUa_XmlSchema_StructureDefinition_DictionaryFragment,18174,Variable +OpcUa_XmlSchema_EnumDefinition,18175,Variable +OpcUa_XmlSchema_EnumDefinition_DataTypeVersion,18176,Variable +OpcUa_XmlSchema_EnumDefinition_DictionaryFragment,18177,Variable +OpcUa_BinarySchema_DataTypeDefinition,18178,Variable +OpcUa_BinarySchema_DataTypeDefinition_DataTypeVersion,18179,Variable +OpcUa_BinarySchema_DataTypeDefinition_DictionaryFragment,18180,Variable +OpcUa_BinarySchema_StructureField,18181,Variable +OpcUa_BinarySchema_StructureField_DataTypeVersion,18182,Variable +OpcUa_BinarySchema_StructureField_DictionaryFragment,18183,Variable +OpcUa_BinarySchema_StructureDefinition,18184,Variable +OpcUa_BinarySchema_StructureDefinition_DataTypeVersion,18185,Variable +OpcUa_BinarySchema_StructureDefinition_DictionaryFragment,18186,Variable +OpcUa_BinarySchema_EnumDefinition,18187,Variable +OpcUa_BinarySchema_EnumDefinition_DataTypeVersion,18188,Variable +OpcUa_BinarySchema_EnumDefinition_DictionaryFragment,18189,Variable +AlarmConditionType_LatchedState,18190,Variable +AlarmConditionType_LatchedState_Id,18191,Variable +AlarmConditionType_LatchedState_Name,18192,Variable +AlarmConditionType_LatchedState_Number,18193,Variable +AlarmConditionType_LatchedState_EffectiveDisplayName,18194,Variable +AlarmConditionType_LatchedState_TransitionTime,18195,Variable +AlarmConditionType_LatchedState_EffectiveTransitionTime,18196,Variable +AlarmConditionType_LatchedState_TrueState,18197,Variable +AlarmConditionType_LatchedState_FalseState,18198,Variable +AlarmConditionType_Reset,18199,Method +AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound_ListId,18200,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound_AgencyId,18201,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound_VersionId,18202,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState,18203,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id,18204,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Name,18205,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Number,18206,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_EffectiveDisplayName,18207,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_TransitionTime,18208,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_EffectiveTransitionTime,18209,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_TrueState,18210,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_FalseState,18211,Variable +AlarmGroupType_AlarmConditionInstance_Placeholder_Reset,18212,Method +LimitAlarmType_LatchedState,18213,Variable +LimitAlarmType_LatchedState_Id,18214,Variable +LimitAlarmType_LatchedState_Name,18215,Variable +LimitAlarmType_LatchedState_Number,18216,Variable +LimitAlarmType_LatchedState_EffectiveDisplayName,18217,Variable +LimitAlarmType_LatchedState_TransitionTime,18218,Variable +LimitAlarmType_LatchedState_EffectiveTransitionTime,18219,Variable +LimitAlarmType_LatchedState_TrueState,18220,Variable +LimitAlarmType_LatchedState_FalseState,18221,Variable +LimitAlarmType_Reset,18222,Method +ExclusiveLimitAlarmType_LatchedState,18223,Variable +ExclusiveLimitAlarmType_LatchedState_Id,18224,Variable +ExclusiveLimitAlarmType_LatchedState_Name,18225,Variable +ExclusiveLimitAlarmType_LatchedState_Number,18226,Variable +ExclusiveLimitAlarmType_LatchedState_EffectiveDisplayName,18227,Variable +ExclusiveLimitAlarmType_LatchedState_TransitionTime,18228,Variable +ExclusiveLimitAlarmType_LatchedState_EffectiveTransitionTime,18229,Variable +ExclusiveLimitAlarmType_LatchedState_TrueState,18230,Variable +ExclusiveLimitAlarmType_LatchedState_FalseState,18231,Variable +ExclusiveLimitAlarmType_Reset,18232,Method +NonExclusiveLimitAlarmType_LatchedState,18233,Variable +NonExclusiveLimitAlarmType_LatchedState_Id,18234,Variable +NonExclusiveLimitAlarmType_LatchedState_Name,18235,Variable +NonExclusiveLimitAlarmType_LatchedState_Number,18236,Variable +NonExclusiveLimitAlarmType_LatchedState_EffectiveDisplayName,18237,Variable +NonExclusiveLimitAlarmType_LatchedState_TransitionTime,18238,Variable +NonExclusiveLimitAlarmType_LatchedState_EffectiveTransitionTime,18239,Variable +NonExclusiveLimitAlarmType_LatchedState_TrueState,18240,Variable +NonExclusiveLimitAlarmType_LatchedState_FalseState,18241,Variable +NonExclusiveLimitAlarmType_Reset,18242,Method +NonExclusiveLevelAlarmType_AudibleSound_ListId,18243,Variable +NonExclusiveLevelAlarmType_AudibleSound_AgencyId,18244,Variable +NonExclusiveLevelAlarmType_AudibleSound_VersionId,18245,Variable +NonExclusiveLevelAlarmType_LatchedState,18246,Variable +NonExclusiveLevelAlarmType_LatchedState_Id,18247,Variable +NonExclusiveLevelAlarmType_LatchedState_Name,18248,Variable +NonExclusiveLevelAlarmType_LatchedState_Number,18249,Variable +NonExclusiveLevelAlarmType_LatchedState_EffectiveDisplayName,18250,Variable +NonExclusiveLevelAlarmType_LatchedState_TransitionTime,18251,Variable +NonExclusiveLevelAlarmType_LatchedState_EffectiveTransitionTime,18252,Variable +NonExclusiveLevelAlarmType_LatchedState_TrueState,18253,Variable +NonExclusiveLevelAlarmType_LatchedState_FalseState,18254,Variable +NonExclusiveLevelAlarmType_Unsuppress,18255,Method +NonExclusiveLevelAlarmType_Reset,18256,Method +ExclusiveLevelAlarmType_LatchedState,18257,Variable +ExclusiveLevelAlarmType_LatchedState_Id,18258,Variable +ExclusiveLevelAlarmType_LatchedState_Name,18259,Variable +ExclusiveLevelAlarmType_LatchedState_Number,18260,Variable +ExclusiveLevelAlarmType_LatchedState_EffectiveDisplayName,18261,Variable +ExclusiveLevelAlarmType_LatchedState_TransitionTime,18262,Variable +ExclusiveLevelAlarmType_LatchedState_EffectiveTransitionTime,18263,Variable +ExclusiveLevelAlarmType_LatchedState_TrueState,18264,Variable +ExclusiveLevelAlarmType_LatchedState_FalseState,18265,Variable +ExclusiveLevelAlarmType_Reset,18266,Method +NonExclusiveDeviationAlarmType_LatchedState,18267,Variable +NonExclusiveDeviationAlarmType_LatchedState_Id,18268,Variable +NonExclusiveDeviationAlarmType_LatchedState_Name,18269,Variable +NonExclusiveDeviationAlarmType_LatchedState_Number,18270,Variable +NonExclusiveDeviationAlarmType_LatchedState_EffectiveDisplayName,18271,Variable +NonExclusiveDeviationAlarmType_LatchedState_TransitionTime,18272,Variable +NonExclusiveDeviationAlarmType_LatchedState_EffectiveTransitionTime,18273,Variable +NonExclusiveDeviationAlarmType_LatchedState_TrueState,18274,Variable +NonExclusiveDeviationAlarmType_LatchedState_FalseState,18275,Variable +NonExclusiveDeviationAlarmType_Reset,18276,Method +NonExclusiveRateOfChangeAlarmType_LatchedState,18277,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_Id,18278,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_Name,18279,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_Number,18280,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_EffectiveDisplayName,18281,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_TransitionTime,18282,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_EffectiveTransitionTime,18283,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_TrueState,18284,Variable +NonExclusiveRateOfChangeAlarmType_LatchedState_FalseState,18285,Variable +NonExclusiveRateOfChangeAlarmType_Reset,18286,Method +ExclusiveDeviationAlarmType_LatchedState,18287,Variable +ExclusiveDeviationAlarmType_LatchedState_Id,18288,Variable +ExclusiveDeviationAlarmType_LatchedState_Name,18289,Variable +ExclusiveDeviationAlarmType_LatchedState_Number,18290,Variable +ExclusiveDeviationAlarmType_LatchedState_EffectiveDisplayName,18291,Variable +ExclusiveDeviationAlarmType_LatchedState_TransitionTime,18292,Variable +ExclusiveDeviationAlarmType_LatchedState_EffectiveTransitionTime,18293,Variable +ExclusiveDeviationAlarmType_LatchedState_TrueState,18294,Variable +ExclusiveDeviationAlarmType_LatchedState_FalseState,18295,Variable +ExclusiveDeviationAlarmType_Reset,18296,Method +ExclusiveRateOfChangeAlarmType_LatchedState,18297,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_Id,18298,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_Name,18299,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_Number,18300,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_EffectiveDisplayName,18301,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_TransitionTime,18302,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_EffectiveTransitionTime,18303,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_TrueState,18304,Variable +ExclusiveRateOfChangeAlarmType_LatchedState_FalseState,18305,Variable +ExclusiveRateOfChangeAlarmType_Reset,18306,Method +DiscreteAlarmType_LatchedState,18307,Variable +DiscreteAlarmType_LatchedState_Id,18308,Variable +DiscreteAlarmType_LatchedState_Name,18309,Variable +DiscreteAlarmType_LatchedState_Number,18310,Variable +DiscreteAlarmType_LatchedState_EffectiveDisplayName,18311,Variable +DiscreteAlarmType_LatchedState_TransitionTime,18312,Variable +DiscreteAlarmType_LatchedState_EffectiveTransitionTime,18313,Variable +DiscreteAlarmType_LatchedState_TrueState,18314,Variable +DiscreteAlarmType_LatchedState_FalseState,18315,Variable +DiscreteAlarmType_Reset,18316,Method +OffNormalAlarmType_LatchedState,18317,Variable +OffNormalAlarmType_LatchedState_Id,18318,Variable +OffNormalAlarmType_LatchedState_Name,18319,Variable +OffNormalAlarmType_LatchedState_Number,18320,Variable +OffNormalAlarmType_LatchedState_EffectiveDisplayName,18321,Variable +OffNormalAlarmType_LatchedState_TransitionTime,18322,Variable +OffNormalAlarmType_LatchedState_EffectiveTransitionTime,18323,Variable +OffNormalAlarmType_LatchedState_TrueState,18324,Variable +OffNormalAlarmType_LatchedState_FalseState,18325,Variable +OffNormalAlarmType_Reset,18326,Method +SystemOffNormalAlarmType_LatchedState,18327,Variable +SystemOffNormalAlarmType_LatchedState_Id,18328,Variable +SystemOffNormalAlarmType_LatchedState_Name,18329,Variable +SystemOffNormalAlarmType_LatchedState_Number,18330,Variable +SystemOffNormalAlarmType_LatchedState_EffectiveDisplayName,18331,Variable +SystemOffNormalAlarmType_LatchedState_TransitionTime,18332,Variable +SystemOffNormalAlarmType_LatchedState_EffectiveTransitionTime,18333,Variable +SystemOffNormalAlarmType_LatchedState_TrueState,18334,Variable +SystemOffNormalAlarmType_LatchedState_FalseState,18335,Variable +SystemOffNormalAlarmType_Reset,18336,Method +TripAlarmType_LatchedState,18337,Variable +TripAlarmType_LatchedState_Id,18338,Variable +TripAlarmType_LatchedState_Name,18339,Variable +TripAlarmType_LatchedState_Number,18340,Variable +TripAlarmType_LatchedState_EffectiveDisplayName,18341,Variable +TripAlarmType_LatchedState_TransitionTime,18342,Variable +TripAlarmType_LatchedState_EffectiveTransitionTime,18343,Variable +TripAlarmType_LatchedState_TrueState,18344,Variable +TripAlarmType_LatchedState_FalseState,18345,Variable +TripAlarmType_Reset,18346,Method +InstrumentDiagnosticAlarmType,18347,ObjectType +InstrumentDiagnosticAlarmType_EventId,18348,Variable +InstrumentDiagnosticAlarmType_EventType,18349,Variable +InstrumentDiagnosticAlarmType_SourceNode,18350,Variable +InstrumentDiagnosticAlarmType_SourceName,18351,Variable +InstrumentDiagnosticAlarmType_Time,18352,Variable +InstrumentDiagnosticAlarmType_ReceiveTime,18353,Variable +InstrumentDiagnosticAlarmType_LocalTime,18354,Variable +InstrumentDiagnosticAlarmType_Message,18355,Variable +InstrumentDiagnosticAlarmType_Severity,18356,Variable +InstrumentDiagnosticAlarmType_ConditionClassId,18357,Variable +InstrumentDiagnosticAlarmType_ConditionClassName,18358,Variable +InstrumentDiagnosticAlarmType_ConditionSubClassId,18359,Variable +InstrumentDiagnosticAlarmType_ConditionSubClassName,18360,Variable +InstrumentDiagnosticAlarmType_ConditionName,18361,Variable +InstrumentDiagnosticAlarmType_BranchId,18362,Variable +InstrumentDiagnosticAlarmType_Retain,18363,Variable +InstrumentDiagnosticAlarmType_EnabledState,18364,Variable +InstrumentDiagnosticAlarmType_EnabledState_Id,18365,Variable +InstrumentDiagnosticAlarmType_EnabledState_Name,18366,Variable +InstrumentDiagnosticAlarmType_EnabledState_Number,18367,Variable +InstrumentDiagnosticAlarmType_EnabledState_EffectiveDisplayName,18368,Variable +InstrumentDiagnosticAlarmType_EnabledState_TransitionTime,18369,Variable +InstrumentDiagnosticAlarmType_EnabledState_EffectiveTransitionTime,18370,Variable +InstrumentDiagnosticAlarmType_EnabledState_TrueState,18371,Variable +InstrumentDiagnosticAlarmType_EnabledState_FalseState,18372,Variable +InstrumentDiagnosticAlarmType_Quality,18373,Variable +InstrumentDiagnosticAlarmType_Quality_SourceTimestamp,18374,Variable +InstrumentDiagnosticAlarmType_LastSeverity,18375,Variable +InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp,18376,Variable +InstrumentDiagnosticAlarmType_Comment,18377,Variable +InstrumentDiagnosticAlarmType_Comment_SourceTimestamp,18378,Variable +InstrumentDiagnosticAlarmType_ClientUserId,18379,Variable +InstrumentDiagnosticAlarmType_Disable,18380,Method +InstrumentDiagnosticAlarmType_Enable,18381,Method +InstrumentDiagnosticAlarmType_AddComment,18382,Method +InstrumentDiagnosticAlarmType_AddComment_InputArguments,18383,Variable +InstrumentDiagnosticAlarmType_ConditionRefresh,18384,Method +InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments,18385,Variable +InstrumentDiagnosticAlarmType_ConditionRefresh2,18386,Method +InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments,18387,Variable +InstrumentDiagnosticAlarmType_AckedState,18388,Variable +InstrumentDiagnosticAlarmType_AckedState_Id,18389,Variable +InstrumentDiagnosticAlarmType_AckedState_Name,18390,Variable +InstrumentDiagnosticAlarmType_AckedState_Number,18391,Variable +InstrumentDiagnosticAlarmType_AckedState_EffectiveDisplayName,18392,Variable +InstrumentDiagnosticAlarmType_AckedState_TransitionTime,18393,Variable +InstrumentDiagnosticAlarmType_AckedState_EffectiveTransitionTime,18394,Variable +InstrumentDiagnosticAlarmType_AckedState_TrueState,18395,Variable +InstrumentDiagnosticAlarmType_AckedState_FalseState,18396,Variable +InstrumentDiagnosticAlarmType_ConfirmedState,18397,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_Id,18398,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_Name,18399,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_Number,18400,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_EffectiveDisplayName,18401,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_TransitionTime,18402,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_EffectiveTransitionTime,18403,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_TrueState,18404,Variable +InstrumentDiagnosticAlarmType_ConfirmedState_FalseState,18405,Variable +InstrumentDiagnosticAlarmType_Acknowledge,18406,Method +InstrumentDiagnosticAlarmType_Acknowledge_InputArguments,18407,Variable +InstrumentDiagnosticAlarmType_Confirm,18408,Method +InstrumentDiagnosticAlarmType_Confirm_InputArguments,18409,Variable +InstrumentDiagnosticAlarmType_ActiveState,18410,Variable +InstrumentDiagnosticAlarmType_ActiveState_Id,18411,Variable +InstrumentDiagnosticAlarmType_ActiveState_Name,18412,Variable +InstrumentDiagnosticAlarmType_ActiveState_Number,18413,Variable +InstrumentDiagnosticAlarmType_ActiveState_EffectiveDisplayName,18414,Variable +InstrumentDiagnosticAlarmType_ActiveState_TransitionTime,18415,Variable +InstrumentDiagnosticAlarmType_ActiveState_EffectiveTransitionTime,18416,Variable +InstrumentDiagnosticAlarmType_ActiveState_TrueState,18417,Variable +InstrumentDiagnosticAlarmType_ActiveState_FalseState,18418,Variable +InstrumentDiagnosticAlarmType_InputNode,18419,Variable +InstrumentDiagnosticAlarmType_SuppressedState,18420,Variable +InstrumentDiagnosticAlarmType_SuppressedState_Id,18421,Variable +InstrumentDiagnosticAlarmType_SuppressedState_Name,18422,Variable +InstrumentDiagnosticAlarmType_SuppressedState_Number,18423,Variable +InstrumentDiagnosticAlarmType_SuppressedState_EffectiveDisplayName,18424,Variable +InstrumentDiagnosticAlarmType_SuppressedState_TransitionTime,18425,Variable +InstrumentDiagnosticAlarmType_SuppressedState_EffectiveTransitionTime,18426,Variable +InstrumentDiagnosticAlarmType_SuppressedState_TrueState,18427,Variable +InstrumentDiagnosticAlarmType_SuppressedState_FalseState,18428,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState,18429,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_Id,18430,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_Name,18431,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_Number,18432,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_EffectiveDisplayName,18433,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_TransitionTime,18434,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_EffectiveTransitionTime,18435,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_TrueState,18436,Variable +InstrumentDiagnosticAlarmType_OutOfServiceState_FalseState,18437,Variable +InstrumentDiagnosticAlarmType_ShelvingState,18438,Object +InstrumentDiagnosticAlarmType_ShelvingState_CurrentState,18439,Variable +InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id,18440,Variable +InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Name,18441,Variable +InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Number,18442,Variable +InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,18443,Variable +InstrumentDiagnosticAlarmType_ShelvingState_LastTransition,18444,Variable +InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id,18445,Variable +InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Name,18446,Variable +InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Number,18447,Variable +InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_TransitionTime,18448,Variable +InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,18449,Variable +InstrumentDiagnosticAlarmType_ShelvingState_AvailableStates,18450,Variable +InstrumentDiagnosticAlarmType_ShelvingState_AvailableTransitions,18451,Variable +InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime,18452,Variable +InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve,18453,Method +InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments,18454,Variable +InstrumentDiagnosticAlarmType_ShelvingState_Unshelve,18455,Method +InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve,18456,Method +InstrumentDiagnosticAlarmType_SuppressedOrShelved,18457,Variable +InstrumentDiagnosticAlarmType_MaxTimeShelved,18458,Variable +InstrumentDiagnosticAlarmType_AudibleEnabled,18459,Variable +InstrumentDiagnosticAlarmType_AudibleSound,18460,Variable +InstrumentDiagnosticAlarmType_AudibleSound_ListId,18461,Variable +InstrumentDiagnosticAlarmType_AudibleSound_AgencyId,18462,Variable +InstrumentDiagnosticAlarmType_AudibleSound_VersionId,18463,Variable +InstrumentDiagnosticAlarmType_SilenceState,18464,Variable +InstrumentDiagnosticAlarmType_SilenceState_Id,18465,Variable +InstrumentDiagnosticAlarmType_SilenceState_Name,18466,Variable +InstrumentDiagnosticAlarmType_SilenceState_Number,18467,Variable +InstrumentDiagnosticAlarmType_SilenceState_EffectiveDisplayName,18468,Variable +InstrumentDiagnosticAlarmType_SilenceState_TransitionTime,18469,Variable +InstrumentDiagnosticAlarmType_SilenceState_EffectiveTransitionTime,18470,Variable +InstrumentDiagnosticAlarmType_SilenceState_TrueState,18471,Variable +InstrumentDiagnosticAlarmType_SilenceState_FalseState,18472,Variable +InstrumentDiagnosticAlarmType_OnDelay,18473,Variable +InstrumentDiagnosticAlarmType_OffDelay,18474,Variable +InstrumentDiagnosticAlarmType_FirstInGroupFlag,18475,Variable +InstrumentDiagnosticAlarmType_FirstInGroup,18476,Object +InstrumentDiagnosticAlarmType_LatchedState,18477,Variable +InstrumentDiagnosticAlarmType_LatchedState_Id,18478,Variable +InstrumentDiagnosticAlarmType_LatchedState_Name,18479,Variable +InstrumentDiagnosticAlarmType_LatchedState_Number,18480,Variable +InstrumentDiagnosticAlarmType_LatchedState_EffectiveDisplayName,18481,Variable +InstrumentDiagnosticAlarmType_LatchedState_TransitionTime,18482,Variable +InstrumentDiagnosticAlarmType_LatchedState_EffectiveTransitionTime,18483,Variable +InstrumentDiagnosticAlarmType_LatchedState_TrueState,18484,Variable +InstrumentDiagnosticAlarmType_LatchedState_FalseState,18485,Variable +InstrumentDiagnosticAlarmType_AlarmGroup_Placeholder,18486,Object +InstrumentDiagnosticAlarmType_ReAlarmTime,18487,Variable +InstrumentDiagnosticAlarmType_ReAlarmRepeatCount,18488,Variable +InstrumentDiagnosticAlarmType_Silence,18489,Method +InstrumentDiagnosticAlarmType_Suppress,18490,Method +InstrumentDiagnosticAlarmType_Unsuppress,18491,Method +InstrumentDiagnosticAlarmType_RemoveFromService,18492,Method +InstrumentDiagnosticAlarmType_PlaceInService,18493,Method +InstrumentDiagnosticAlarmType_Reset,18494,Method +InstrumentDiagnosticAlarmType_NormalState,18495,Variable +SystemDiagnosticAlarmType,18496,ObjectType +SystemDiagnosticAlarmType_EventId,18497,Variable +SystemDiagnosticAlarmType_EventType,18498,Variable +SystemDiagnosticAlarmType_SourceNode,18499,Variable +SystemDiagnosticAlarmType_SourceName,18500,Variable +SystemDiagnosticAlarmType_Time,18501,Variable +SystemDiagnosticAlarmType_ReceiveTime,18502,Variable +SystemDiagnosticAlarmType_LocalTime,18503,Variable +SystemDiagnosticAlarmType_Message,18504,Variable +SystemDiagnosticAlarmType_Severity,18505,Variable +SystemDiagnosticAlarmType_ConditionClassId,18506,Variable +SystemDiagnosticAlarmType_ConditionClassName,18507,Variable +SystemDiagnosticAlarmType_ConditionSubClassId,18508,Variable +SystemDiagnosticAlarmType_ConditionSubClassName,18509,Variable +SystemDiagnosticAlarmType_ConditionName,18510,Variable +SystemDiagnosticAlarmType_BranchId,18511,Variable +SystemDiagnosticAlarmType_Retain,18512,Variable +SystemDiagnosticAlarmType_EnabledState,18513,Variable +SystemDiagnosticAlarmType_EnabledState_Id,18514,Variable +SystemDiagnosticAlarmType_EnabledState_Name,18515,Variable +SystemDiagnosticAlarmType_EnabledState_Number,18516,Variable +SystemDiagnosticAlarmType_EnabledState_EffectiveDisplayName,18517,Variable +SystemDiagnosticAlarmType_EnabledState_TransitionTime,18518,Variable +SystemDiagnosticAlarmType_EnabledState_EffectiveTransitionTime,18519,Variable +SystemDiagnosticAlarmType_EnabledState_TrueState,18520,Variable +SystemDiagnosticAlarmType_EnabledState_FalseState,18521,Variable +SystemDiagnosticAlarmType_Quality,18522,Variable +SystemDiagnosticAlarmType_Quality_SourceTimestamp,18523,Variable +SystemDiagnosticAlarmType_LastSeverity,18524,Variable +SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp,18525,Variable +SystemDiagnosticAlarmType_Comment,18526,Variable +SystemDiagnosticAlarmType_Comment_SourceTimestamp,18527,Variable +SystemDiagnosticAlarmType_ClientUserId,18528,Variable +SystemDiagnosticAlarmType_Disable,18529,Method +SystemDiagnosticAlarmType_Enable,18530,Method +SystemDiagnosticAlarmType_AddComment,18531,Method +SystemDiagnosticAlarmType_AddComment_InputArguments,18532,Variable +SystemDiagnosticAlarmType_ConditionRefresh,18533,Method +SystemDiagnosticAlarmType_ConditionRefresh_InputArguments,18534,Variable +SystemDiagnosticAlarmType_ConditionRefresh2,18535,Method +SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments,18536,Variable +SystemDiagnosticAlarmType_AckedState,18537,Variable +SystemDiagnosticAlarmType_AckedState_Id,18538,Variable +SystemDiagnosticAlarmType_AckedState_Name,18539,Variable +SystemDiagnosticAlarmType_AckedState_Number,18540,Variable +SystemDiagnosticAlarmType_AckedState_EffectiveDisplayName,18541,Variable +SystemDiagnosticAlarmType_AckedState_TransitionTime,18542,Variable +SystemDiagnosticAlarmType_AckedState_EffectiveTransitionTime,18543,Variable +SystemDiagnosticAlarmType_AckedState_TrueState,18544,Variable +SystemDiagnosticAlarmType_AckedState_FalseState,18545,Variable +SystemDiagnosticAlarmType_ConfirmedState,18546,Variable +SystemDiagnosticAlarmType_ConfirmedState_Id,18547,Variable +SystemDiagnosticAlarmType_ConfirmedState_Name,18548,Variable +SystemDiagnosticAlarmType_ConfirmedState_Number,18549,Variable +SystemDiagnosticAlarmType_ConfirmedState_EffectiveDisplayName,18550,Variable +SystemDiagnosticAlarmType_ConfirmedState_TransitionTime,18551,Variable +SystemDiagnosticAlarmType_ConfirmedState_EffectiveTransitionTime,18552,Variable +SystemDiagnosticAlarmType_ConfirmedState_TrueState,18553,Variable +SystemDiagnosticAlarmType_ConfirmedState_FalseState,18554,Variable +SystemDiagnosticAlarmType_Acknowledge,18555,Method +SystemDiagnosticAlarmType_Acknowledge_InputArguments,18556,Variable +SystemDiagnosticAlarmType_Confirm,18557,Method +SystemDiagnosticAlarmType_Confirm_InputArguments,18558,Variable +SystemDiagnosticAlarmType_ActiveState,18559,Variable +SystemDiagnosticAlarmType_ActiveState_Id,18560,Variable +SystemDiagnosticAlarmType_ActiveState_Name,18561,Variable +SystemDiagnosticAlarmType_ActiveState_Number,18562,Variable +SystemDiagnosticAlarmType_ActiveState_EffectiveDisplayName,18563,Variable +SystemDiagnosticAlarmType_ActiveState_TransitionTime,18564,Variable +SystemDiagnosticAlarmType_ActiveState_EffectiveTransitionTime,18565,Variable +SystemDiagnosticAlarmType_ActiveState_TrueState,18566,Variable +SystemDiagnosticAlarmType_ActiveState_FalseState,18567,Variable +SystemDiagnosticAlarmType_InputNode,18568,Variable +SystemDiagnosticAlarmType_SuppressedState,18569,Variable +SystemDiagnosticAlarmType_SuppressedState_Id,18570,Variable +SystemDiagnosticAlarmType_SuppressedState_Name,18571,Variable +SystemDiagnosticAlarmType_SuppressedState_Number,18572,Variable +SystemDiagnosticAlarmType_SuppressedState_EffectiveDisplayName,18573,Variable +SystemDiagnosticAlarmType_SuppressedState_TransitionTime,18574,Variable +SystemDiagnosticAlarmType_SuppressedState_EffectiveTransitionTime,18575,Variable +SystemDiagnosticAlarmType_SuppressedState_TrueState,18576,Variable +SystemDiagnosticAlarmType_SuppressedState_FalseState,18577,Variable +SystemDiagnosticAlarmType_OutOfServiceState,18578,Variable +SystemDiagnosticAlarmType_OutOfServiceState_Id,18579,Variable +SystemDiagnosticAlarmType_OutOfServiceState_Name,18580,Variable +SystemDiagnosticAlarmType_OutOfServiceState_Number,18581,Variable +SystemDiagnosticAlarmType_OutOfServiceState_EffectiveDisplayName,18582,Variable +SystemDiagnosticAlarmType_OutOfServiceState_TransitionTime,18583,Variable +SystemDiagnosticAlarmType_OutOfServiceState_EffectiveTransitionTime,18584,Variable +SystemDiagnosticAlarmType_OutOfServiceState_TrueState,18585,Variable +SystemDiagnosticAlarmType_OutOfServiceState_FalseState,18586,Variable +SystemDiagnosticAlarmType_ShelvingState,18587,Object +SystemDiagnosticAlarmType_ShelvingState_CurrentState,18588,Variable +SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id,18589,Variable +SystemDiagnosticAlarmType_ShelvingState_CurrentState_Name,18590,Variable +SystemDiagnosticAlarmType_ShelvingState_CurrentState_Number,18591,Variable +SystemDiagnosticAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,18592,Variable +SystemDiagnosticAlarmType_ShelvingState_LastTransition,18593,Variable +SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id,18594,Variable +SystemDiagnosticAlarmType_ShelvingState_LastTransition_Name,18595,Variable +SystemDiagnosticAlarmType_ShelvingState_LastTransition_Number,18596,Variable +SystemDiagnosticAlarmType_ShelvingState_LastTransition_TransitionTime,18597,Variable +SystemDiagnosticAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,18598,Variable +SystemDiagnosticAlarmType_ShelvingState_AvailableStates,18599,Variable +SystemDiagnosticAlarmType_ShelvingState_AvailableTransitions,18600,Variable +SystemDiagnosticAlarmType_ShelvingState_UnshelveTime,18601,Variable +SystemDiagnosticAlarmType_ShelvingState_TimedShelve,18602,Method +SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments,18603,Variable +SystemDiagnosticAlarmType_ShelvingState_Unshelve,18604,Method +SystemDiagnosticAlarmType_ShelvingState_OneShotShelve,18605,Method +SystemDiagnosticAlarmType_SuppressedOrShelved,18606,Variable +SystemDiagnosticAlarmType_MaxTimeShelved,18607,Variable +SystemDiagnosticAlarmType_AudibleEnabled,18608,Variable +SystemDiagnosticAlarmType_AudibleSound,18609,Variable +SystemDiagnosticAlarmType_AudibleSound_ListId,18610,Variable +SystemDiagnosticAlarmType_AudibleSound_AgencyId,18611,Variable +SystemDiagnosticAlarmType_AudibleSound_VersionId,18612,Variable +SystemDiagnosticAlarmType_SilenceState,18613,Variable +SystemDiagnosticAlarmType_SilenceState_Id,18614,Variable +SystemDiagnosticAlarmType_SilenceState_Name,18615,Variable +SystemDiagnosticAlarmType_SilenceState_Number,18616,Variable +SystemDiagnosticAlarmType_SilenceState_EffectiveDisplayName,18617,Variable +SystemDiagnosticAlarmType_SilenceState_TransitionTime,18618,Variable +SystemDiagnosticAlarmType_SilenceState_EffectiveTransitionTime,18619,Variable +SystemDiagnosticAlarmType_SilenceState_TrueState,18620,Variable +SystemDiagnosticAlarmType_SilenceState_FalseState,18621,Variable +SystemDiagnosticAlarmType_OnDelay,18622,Variable +SystemDiagnosticAlarmType_OffDelay,18623,Variable +SystemDiagnosticAlarmType_FirstInGroupFlag,18624,Variable +SystemDiagnosticAlarmType_FirstInGroup,18625,Object +SystemDiagnosticAlarmType_LatchedState,18626,Variable +SystemDiagnosticAlarmType_LatchedState_Id,18627,Variable +SystemDiagnosticAlarmType_LatchedState_Name,18628,Variable +SystemDiagnosticAlarmType_LatchedState_Number,18629,Variable +SystemDiagnosticAlarmType_LatchedState_EffectiveDisplayName,18630,Variable +SystemDiagnosticAlarmType_LatchedState_TransitionTime,18631,Variable +SystemDiagnosticAlarmType_LatchedState_EffectiveTransitionTime,18632,Variable +SystemDiagnosticAlarmType_LatchedState_TrueState,18633,Variable +SystemDiagnosticAlarmType_LatchedState_FalseState,18634,Variable +SystemDiagnosticAlarmType_AlarmGroup_Placeholder,18635,Object +SystemDiagnosticAlarmType_ReAlarmTime,18636,Variable +SystemDiagnosticAlarmType_ReAlarmRepeatCount,18637,Variable +SystemDiagnosticAlarmType_Silence,18638,Method +SystemDiagnosticAlarmType_Suppress,18639,Method +SystemDiagnosticAlarmType_Unsuppress,18640,Method +SystemDiagnosticAlarmType_RemoveFromService,18641,Method +SystemDiagnosticAlarmType_PlaceInService,18642,Method +SystemDiagnosticAlarmType_Reset,18643,Method +SystemDiagnosticAlarmType_NormalState,18644,Variable +CertificateExpirationAlarmType_LatchedState,18645,Variable +CertificateExpirationAlarmType_LatchedState_Id,18646,Variable +CertificateExpirationAlarmType_LatchedState_Name,18647,Variable +CertificateExpirationAlarmType_LatchedState_Number,18648,Variable +CertificateExpirationAlarmType_LatchedState_EffectiveDisplayName,18649,Variable +CertificateExpirationAlarmType_LatchedState_TransitionTime,18650,Variable +CertificateExpirationAlarmType_LatchedState_EffectiveTransitionTime,18651,Variable +CertificateExpirationAlarmType_LatchedState_TrueState,18652,Variable +CertificateExpirationAlarmType_LatchedState_FalseState,18653,Variable +CertificateExpirationAlarmType_Reset,18654,Method +DiscrepancyAlarmType_LatchedState,18655,Variable +DiscrepancyAlarmType_LatchedState_Id,18656,Variable +DiscrepancyAlarmType_LatchedState_Name,18657,Variable +DiscrepancyAlarmType_LatchedState_Number,18658,Variable +DiscrepancyAlarmType_LatchedState_EffectiveDisplayName,18659,Variable +DiscrepancyAlarmType_LatchedState_TransitionTime,18660,Variable +DiscrepancyAlarmType_LatchedState_EffectiveTransitionTime,18661,Variable +DiscrepancyAlarmType_LatchedState_TrueState,18662,Variable +DiscrepancyAlarmType_LatchedState_FalseState,18663,Variable +DiscrepancyAlarmType_Reset,18664,Method +StatisticalConditionClassType,18665,ObjectType +AlarmMetricsType_Reset,18666,Method +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics,18667,Object +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel,18668,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation,18669,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active,18670,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification,18671,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18672,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18673,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError,18674,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active,18675,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification,18676,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18677,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18678,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset,18679,Method +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError,18680,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters,18681,Object +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError,18682,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active,18683,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification,18684,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18685,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18686,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18687,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18688,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18689,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18690,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18691,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18692,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18693,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18694,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18695,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18696,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18697,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18698,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18699,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18700,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18701,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent,18702,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18703,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18704,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18705,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18706,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18707,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18708,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18709,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18710,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18711,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues,18712,Object +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress,18713,Variable +PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel,18714,Variable +PublishSubscribeType_Diagnostics,18715,Object +PublishSubscribeType_Diagnostics_DiagnosticsLevel,18716,Variable +PublishSubscribeType_Diagnostics_TotalInformation,18717,Variable +PublishSubscribeType_Diagnostics_TotalInformation_Active,18718,Variable +PublishSubscribeType_Diagnostics_TotalInformation_Classification,18719,Variable +PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel,18720,Variable +PublishSubscribeType_Diagnostics_TotalInformation_TimeFirstChange,18721,Variable +PublishSubscribeType_Diagnostics_TotalError,18722,Variable +PublishSubscribeType_Diagnostics_TotalError_Active,18723,Variable +PublishSubscribeType_Diagnostics_TotalError_Classification,18724,Variable +PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel,18725,Variable +PublishSubscribeType_Diagnostics_TotalError_TimeFirstChange,18726,Variable +PublishSubscribeType_Diagnostics_Reset,18727,Method +PublishSubscribeType_Diagnostics_SubError,18728,Variable +PublishSubscribeType_Diagnostics_Counters,18729,Object +PublishSubscribeType_Diagnostics_Counters_StateError,18730,Variable +PublishSubscribeType_Diagnostics_Counters_StateError_Active,18731,Variable +PublishSubscribeType_Diagnostics_Counters_StateError_Classification,18732,Variable +PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel,18733,Variable +PublishSubscribeType_Diagnostics_Counters_StateError_TimeFirstChange,18734,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod,18735,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active,18736,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification,18737,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18738,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18739,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent,18740,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active,18741,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification,18742,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18743,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18744,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError,18745,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active,18746,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification,18747,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18748,Variable +PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18749,Variable +PublishSubscribeType_Diagnostics_Counters_StatePausedByParent,18750,Variable +PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active,18751,Variable +PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification,18752,Variable +PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18753,Variable +PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18754,Variable +PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod,18755,Variable +PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active,18756,Variable +PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification,18757,Variable +PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18758,Variable +PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18759,Variable +PublishSubscribeType_Diagnostics_LiveValues,18760,Object +PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters,18761,Variable +PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,18762,Variable +PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders,18763,Variable +PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,18764,Variable +PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters,18765,Variable +PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,18766,Variable +PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders,18767,Variable +PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,18768,Variable +ThreeDVectorType_X,18769,Variable +ThreeDVectorType_Y,18770,Variable +ThreeDVectorType_Z,18771,Variable +CartesianCoordinatesType,18772,VariableType +CartesianCoordinatesType_LengthUnit,18773,Variable +ThreeDCartesianCoordinatesType,18774,VariableType +ThreeDCartesianCoordinatesType_LengthUnit,18775,Variable +ThreeDCartesianCoordinatesType_X,18776,Variable +ThreeDCartesianCoordinatesType_Y,18777,Variable +ThreeDCartesianCoordinatesType_Z,18778,Variable +OrientationType,18779,VariableType +OrientationType_AngleUnit,18780,Variable +ThreeDOrientationType,18781,VariableType +ThreeDOrientationType_AngleUnit,18782,Variable +ThreeDOrientationType_A,18783,Variable +ThreeDOrientationType_B,18784,Variable +ThreeDOrientationType_C,18785,Variable +FrameType,18786,VariableType +FrameType_Orientation,18787,Variable +FrameType_Constant,18788,Variable +FrameType_BaseFrame,18789,Variable +FrameType_FixedBase,18790,Variable +ThreeDFrameType,18791,VariableType +ThreeDFrameType_Orientation,18792,Variable +ThreeDFrameType_Constant,18793,Variable +ThreeDFrameType_BaseFrame,18794,Variable +ThreeDFrameType_FixedBase,18795,Variable +ThreeDFrameType_CartesianCoordinates,18796,Variable +ThreeDFrameType_CartesianCoordinates_LengthUnit,18797,Variable +ThreeDFrameType_CartesianCoordinates_X,18798,Variable +ThreeDFrameType_CartesianCoordinates_Y,18799,Variable +ThreeDFrameType_CartesianCoordinates_Z,18800,Variable +FrameType_CartesianCoordinates,18801,Variable +FrameType_CartesianCoordinates_LengthUnit,18802,Variable +FrameType_Orientation_AngleUnit,18803,Variable +HasWriterGroup,18804,ReferenceType +HasReaderGroup,18805,ReferenceType +RationalNumber,18806,DataType +Vector,18807,DataType +ThreeDVector,18808,DataType +CartesianCoordinates,18809,DataType +ThreeDCartesianCoordinates,18810,DataType +Orientation,18811,DataType +ThreeDOrientation,18812,DataType +Frame,18813,DataType +ThreeDFrame,18814,DataType +RationalNumber_Encoding_DefaultBinary,18815,Object +Vector_Encoding_DefaultBinary,18816,Object +ThreeDVector_Encoding_DefaultBinary,18817,Object +CartesianCoordinates_Encoding_DefaultBinary,18818,Object +ThreeDCartesianCoordinates_Encoding_DefaultBinary,18819,Object +Orientation_Encoding_DefaultBinary,18820,Object +ThreeDOrientation_Encoding_DefaultBinary,18821,Object +Frame_Encoding_DefaultBinary,18822,Object +ThreeDFrame_Encoding_DefaultBinary,18823,Object +OpcUa_BinarySchema_RationalNumber,18824,Variable +OpcUa_BinarySchema_RationalNumber_DataTypeVersion,18825,Variable +OpcUa_BinarySchema_RationalNumber_DictionaryFragment,18826,Variable +OpcUa_BinarySchema_Vector,18827,Variable +OpcUa_BinarySchema_Vector_DataTypeVersion,18828,Variable +OpcUa_BinarySchema_Vector_DictionaryFragment,18829,Variable +OpcUa_BinarySchema_ThreeDVector,18830,Variable +OpcUa_BinarySchema_ThreeDVector_DataTypeVersion,18831,Variable +OpcUa_BinarySchema_ThreeDVector_DictionaryFragment,18832,Variable +OpcUa_BinarySchema_CartesianCoordinates,18833,Variable +OpcUa_BinarySchema_CartesianCoordinates_DataTypeVersion,18834,Variable +OpcUa_BinarySchema_CartesianCoordinates_DictionaryFragment,18835,Variable +OpcUa_BinarySchema_ThreeDCartesianCoordinates,18836,Variable +OpcUa_BinarySchema_ThreeDCartesianCoordinates_DataTypeVersion,18837,Variable +OpcUa_BinarySchema_ThreeDCartesianCoordinates_DictionaryFragment,18838,Variable +OpcUa_BinarySchema_Orientation,18839,Variable +OpcUa_BinarySchema_Orientation_DataTypeVersion,18840,Variable +OpcUa_BinarySchema_Orientation_DictionaryFragment,18841,Variable +OpcUa_BinarySchema_ThreeDOrientation,18842,Variable +OpcUa_BinarySchema_ThreeDOrientation_DataTypeVersion,18843,Variable +OpcUa_BinarySchema_ThreeDOrientation_DictionaryFragment,18844,Variable +OpcUa_BinarySchema_Frame,18845,Variable +OpcUa_BinarySchema_Frame_DataTypeVersion,18846,Variable +OpcUa_BinarySchema_Frame_DictionaryFragment,18847,Variable +OpcUa_BinarySchema_ThreeDFrame,18848,Variable +OpcUa_BinarySchema_ThreeDFrame_DataTypeVersion,18849,Variable +OpcUa_BinarySchema_ThreeDFrame_DictionaryFragment,18850,Variable +RationalNumber_Encoding_DefaultXml,18851,Object +Vector_Encoding_DefaultXml,18852,Object +ThreeDVector_Encoding_DefaultXml,18853,Object +CartesianCoordinates_Encoding_DefaultXml,18854,Object +ThreeDCartesianCoordinates_Encoding_DefaultXml,18855,Object +Orientation_Encoding_DefaultXml,18856,Object +ThreeDOrientation_Encoding_DefaultXml,18857,Object +Frame_Encoding_DefaultXml,18858,Object +ThreeDFrame_Encoding_DefaultXml,18859,Object +OpcUa_XmlSchema_RationalNumber,18860,Variable +OpcUa_XmlSchema_RationalNumber_DataTypeVersion,18861,Variable +OpcUa_XmlSchema_RationalNumber_DictionaryFragment,18862,Variable +OpcUa_XmlSchema_Vector,18863,Variable +OpcUa_XmlSchema_Vector_DataTypeVersion,18864,Variable +OpcUa_XmlSchema_Vector_DictionaryFragment,18865,Variable +OpcUa_XmlSchema_ThreeDVector,18866,Variable +OpcUa_XmlSchema_ThreeDVector_DataTypeVersion,18867,Variable +OpcUa_XmlSchema_ThreeDVector_DictionaryFragment,18868,Variable +OpcUa_XmlSchema_CartesianCoordinates,18869,Variable +OpcUa_XmlSchema_CartesianCoordinates_DataTypeVersion,18870,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics,18871,Object +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,18872,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,18873,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,18874,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,18875,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18876,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18877,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError,18878,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,18879,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,18880,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18881,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18882,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset,18883,Method +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError,18884,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters,18885,Object +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,18886,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,18887,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,18888,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18889,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18890,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18891,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18892,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18893,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18894,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18895,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18896,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18897,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18898,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18899,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18900,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18901,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18902,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18903,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18904,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18905,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,18906,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18907,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18908,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18909,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18910,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18911,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18912,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18913,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18914,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18915,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,18916,Object +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,18917,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,18918,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,18919,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,18920,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,18921,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,18922,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,18923,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,18924,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,18925,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,18926,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,18927,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,18928,Variable +PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,18929,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics,18930,Object +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,18931,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,18932,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,18933,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,18934,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18935,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18936,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError,18937,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,18938,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,18939,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18940,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18941,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset,18942,Method +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError,18943,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters,18944,Object +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,18945,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,18946,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,18947,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18948,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18949,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18950,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18951,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18952,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18953,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18954,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18955,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18956,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18957,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18958,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18959,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18960,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18961,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18962,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18963,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18964,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,18965,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18966,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18967,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18968,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18969,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18970,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18971,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18972,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18973,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18974,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,18975,Object +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,18976,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,18977,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,18978,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,18979,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,18980,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,18981,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,18982,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,18983,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,18984,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,18985,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,18986,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,18987,Variable +PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,18988,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics,18989,Object +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,18990,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,18991,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,18992,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,18993,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18994,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18995,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError,18996,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,18997,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,18998,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18999,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,19000,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset,19001,Method +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError,19002,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters,19003,Object +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,19004,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,19005,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,19006,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,19007,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,19008,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,19009,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,19010,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,19011,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19012,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19013,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,19014,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,19015,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,19016,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19017,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19018,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,19019,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,19020,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,19021,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19022,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19023,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,19024,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,19025,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,19026,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19027,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19028,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,19029,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,19030,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,19031,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19032,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19033,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,19034,Object +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,19035,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,19036,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,19037,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,19038,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,19039,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,19040,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,19041,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,19042,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,19043,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,19044,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,19045,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,19046,Variable +PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,19047,Variable +OpcUa_XmlSchema_CartesianCoordinates_DictionaryFragment,19048,Variable +OpcUa_XmlSchema_ThreeDCartesianCoordinates,19049,Variable +OpcUa_XmlSchema_ThreeDCartesianCoordinates_DataTypeVersion,19050,Variable +OpcUa_XmlSchema_ThreeDCartesianCoordinates_DictionaryFragment,19051,Variable +OpcUa_XmlSchema_Orientation,19052,Variable +OpcUa_XmlSchema_Orientation_DataTypeVersion,19053,Variable +OpcUa_XmlSchema_Orientation_DictionaryFragment,19054,Variable +OpcUa_XmlSchema_ThreeDOrientation,19055,Variable +OpcUa_XmlSchema_ThreeDOrientation_DataTypeVersion,19056,Variable +OpcUa_XmlSchema_ThreeDOrientation_DictionaryFragment,19057,Variable +OpcUa_XmlSchema_Frame,19058,Variable +OpcUa_XmlSchema_Frame_DataTypeVersion,19059,Variable +OpcUa_XmlSchema_Frame_DictionaryFragment,19060,Variable +OpcUa_XmlSchema_ThreeDFrame,19061,Variable +OpcUa_XmlSchema_ThreeDFrame_DataTypeVersion,19062,Variable +OpcUa_XmlSchema_ThreeDFrame_DictionaryFragment,19063,Variable +RationalNumber_Encoding_DefaultJson,19064,Object +Vector_Encoding_DefaultJson,19065,Object +ThreeDVector_Encoding_DefaultJson,19066,Object +CartesianCoordinates_Encoding_DefaultJson,19067,Object +ThreeDCartesianCoordinates_Encoding_DefaultJson,19068,Object +Orientation_Encoding_DefaultJson,19069,Object +ThreeDOrientation_Encoding_DefaultJson,19070,Object +Frame_Encoding_DefaultJson,19071,Object +ThreeDFrame_Encoding_DefaultJson,19072,Object +ThreeDFrameType_Orientation_AngleUnit,19073,Variable +ThreeDFrameType_Orientation_A,19074,Variable +ThreeDFrameType_Orientation_B,19075,Variable +ThreeDFrameType_Orientation_C,19076,Variable +MultiStateDictionaryEntryDiscreteBaseType,19077,VariableType +MultiStateDictionaryEntryDiscreteBaseType_Definition,19078,Variable +MultiStateDictionaryEntryDiscreteBaseType_ValuePrecision,19079,Variable +MultiStateDictionaryEntryDiscreteBaseType_EnumValues,19080,Variable +MultiStateDictionaryEntryDiscreteBaseType_ValueAsText,19081,Variable +MultiStateDictionaryEntryDiscreteBaseType_EnumDictionaryEntries,19082,Variable +MultiStateDictionaryEntryDiscreteBaseType_ValueAsDictionaryEntries,19083,Variable +MultiStateDictionaryEntryDiscreteType,19084,VariableType +MultiStateDictionaryEntryDiscreteType_Definition,19085,Variable +MultiStateDictionaryEntryDiscreteType_ValuePrecision,19086,Variable +MultiStateDictionaryEntryDiscreteType_EnumValues,19087,Variable +MultiStateDictionaryEntryDiscreteType_ValueAsText,19088,Variable +MultiStateDictionaryEntryDiscreteType_EnumDictionaryEntries,19089,Variable +MultiStateDictionaryEntryDiscreteType_ValueAsDictionaryEntries,19090,Variable +HistoryServerCapabilities_ServerTimestampSupported,19091,Variable +HistoricalDataConfigurationType_ServerTimestampSupported,19092,Variable +HAConfiguration_ServerTimestampSupported,19093,Variable +HistoryServerCapabilitiesType_ServerTimestampSupported,19094,Variable +AuditHistoryAnnotationUpdateEventType,19095,ObjectType +AuditHistoryAnnotationUpdateEventType_EventId,19096,Variable +AuditHistoryAnnotationUpdateEventType_EventType,19097,Variable +AuditHistoryAnnotationUpdateEventType_SourceNode,19098,Variable +AuditHistoryAnnotationUpdateEventType_SourceName,19099,Variable +AuditHistoryAnnotationUpdateEventType_Time,19100,Variable +AuditHistoryAnnotationUpdateEventType_ReceiveTime,19101,Variable +AuditHistoryAnnotationUpdateEventType_LocalTime,19102,Variable +AuditHistoryAnnotationUpdateEventType_Message,19103,Variable +AuditHistoryAnnotationUpdateEventType_Severity,19104,Variable +AuditHistoryAnnotationUpdateEventType_ActionTimeStamp,19105,Variable +AuditHistoryAnnotationUpdateEventType_Status,19106,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics,19107,Object +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel,19108,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation,19109,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active,19110,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification,19111,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,19112,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,19113,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError,19114,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active,19115,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification,19116,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,19117,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_TimeFirstChange,19118,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset,19119,Method +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError,19120,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters,19121,Object +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError,19122,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active,19123,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification,19124,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,19125,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,19126,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,19127,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,19128,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,19129,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19130,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19131,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent,19132,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,19133,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,19134,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19135,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19136,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError,19137,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,19138,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,19139,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19140,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19141,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent,19142,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,19143,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,19144,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19145,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19146,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,19147,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,19148,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,19149,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19150,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19151,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues,19152,Object +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages,19153,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active,19154,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification,19155,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel,19156,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_TimeFirstChange,19157,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions,19158,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active,19159,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification,19160,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel,19161,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_TimeFirstChange,19162,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors,19163,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active,19164,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification,19165,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel,19166,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_TimeFirstChange,19167,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters,19168,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,19169,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters,19170,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,19171,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID,19172,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,19173,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID,19174,Variable +PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,19175,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics,19176,Object +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel,19177,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation,19178,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active,19179,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification,19180,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,19181,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,19182,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError,19183,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active,19184,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification,19185,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,19186,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_TimeFirstChange,19187,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset,19188,Method +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError,19189,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters,19190,Object +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError,19191,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active,19192,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification,19193,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,19194,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,19195,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,19196,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,19197,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,19198,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19199,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19200,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent,19201,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,19202,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,19203,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19204,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19205,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError,19206,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,19207,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,19208,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19209,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19210,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent,19211,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,19212,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,19213,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19214,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19215,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,19216,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,19217,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,19218,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19219,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19220,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues,19221,Object +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages,19222,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active,19223,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification,19224,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel,19225,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_TimeFirstChange,19226,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages,19227,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active,19228,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification,19229,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel,19230,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_TimeFirstChange,19231,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors,19232,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active,19233,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification,19234,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,19235,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,19236,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders,19237,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,19238,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders,19239,Variable +PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,19240,Variable +PubSubConnectionType_Diagnostics,19241,Object +PubSubConnectionType_Diagnostics_DiagnosticsLevel,19242,Variable +PubSubConnectionType_Diagnostics_TotalInformation,19243,Variable +PubSubConnectionType_Diagnostics_TotalInformation_Active,19244,Variable +PubSubConnectionType_Diagnostics_TotalInformation_Classification,19245,Variable +PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel,19246,Variable +PubSubConnectionType_Diagnostics_TotalInformation_TimeFirstChange,19247,Variable +PubSubConnectionType_Diagnostics_TotalError,19248,Variable +PubSubConnectionType_Diagnostics_TotalError_Active,19249,Variable +PubSubConnectionType_Diagnostics_TotalError_Classification,19250,Variable +PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel,19251,Variable +PubSubConnectionType_Diagnostics_TotalError_TimeFirstChange,19252,Variable +PubSubConnectionType_Diagnostics_Reset,19253,Method +PubSubConnectionType_Diagnostics_SubError,19254,Variable +PubSubConnectionType_Diagnostics_Counters,19255,Object +PubSubConnectionType_Diagnostics_Counters_StateError,19256,Variable +PubSubConnectionType_Diagnostics_Counters_StateError_Active,19257,Variable +PubSubConnectionType_Diagnostics_Counters_StateError_Classification,19258,Variable +PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel,19259,Variable +PubSubConnectionType_Diagnostics_Counters_StateError_TimeFirstChange,19260,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod,19261,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active,19262,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification,19263,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19264,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19265,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent,19266,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active,19267,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification,19268,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19269,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19270,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError,19271,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active,19272,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification,19273,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19274,Variable +PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19275,Variable +PubSubConnectionType_Diagnostics_Counters_StatePausedByParent,19276,Variable +PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active,19277,Variable +PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification,19278,Variable +PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19279,Variable +PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19280,Variable +PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod,19281,Variable +PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active,19282,Variable +PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification,19283,Variable +PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19284,Variable +PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19285,Variable +PubSubConnectionType_Diagnostics_LiveValues,19286,Object +PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress,19287,Variable +PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel,19288,Variable +AuditHistoryAnnotationUpdateEventType_ServerId,19289,Variable +AuditHistoryAnnotationUpdateEventType_ClientAuditEntryId,19290,Variable +AuditHistoryAnnotationUpdateEventType_ClientUserId,19291,Variable +AuditHistoryAnnotationUpdateEventType_ParameterDataTypeId,19292,Variable +AuditHistoryAnnotationUpdateEventType_PerformInsertReplace,19293,Variable +AuditHistoryAnnotationUpdateEventType_NewValues,19294,Variable +AuditHistoryAnnotationUpdateEventType_OldValues,19295,Variable +TrustListType_UpdateFrequency,19296,Variable +TrustListOutOfDateAlarmType,19297,ObjectType +TrustListOutOfDateAlarmType_EventId,19298,Variable +TrustListOutOfDateAlarmType_EventType,19299,Variable +TrustListOutOfDateAlarmType_SourceNode,19300,Variable +TrustListOutOfDateAlarmType_SourceName,19301,Variable +TrustListOutOfDateAlarmType_Time,19302,Variable +TrustListOutOfDateAlarmType_ReceiveTime,19303,Variable +TrustListOutOfDateAlarmType_LocalTime,19304,Variable +TrustListOutOfDateAlarmType_Message,19305,Variable +TrustListOutOfDateAlarmType_Severity,19306,Variable +TrustListOutOfDateAlarmType_ConditionClassId,19307,Variable +TrustListOutOfDateAlarmType_ConditionClassName,19308,Variable +TrustListOutOfDateAlarmType_ConditionSubClassId,19309,Variable +TrustListOutOfDateAlarmType_ConditionSubClassName,19310,Variable +TrustListOutOfDateAlarmType_ConditionName,19311,Variable +TrustListOutOfDateAlarmType_BranchId,19312,Variable +TrustListOutOfDateAlarmType_Retain,19313,Variable +TrustListOutOfDateAlarmType_EnabledState,19314,Variable +TrustListOutOfDateAlarmType_EnabledState_Id,19315,Variable +TrustListOutOfDateAlarmType_EnabledState_Name,19316,Variable +TrustListOutOfDateAlarmType_EnabledState_Number,19317,Variable +TrustListOutOfDateAlarmType_EnabledState_EffectiveDisplayName,19318,Variable +TrustListOutOfDateAlarmType_EnabledState_TransitionTime,19319,Variable +TrustListOutOfDateAlarmType_EnabledState_EffectiveTransitionTime,19320,Variable +TrustListOutOfDateAlarmType_EnabledState_TrueState,19321,Variable +TrustListOutOfDateAlarmType_EnabledState_FalseState,19322,Variable +TrustListOutOfDateAlarmType_Quality,19323,Variable +TrustListOutOfDateAlarmType_Quality_SourceTimestamp,19324,Variable +TrustListOutOfDateAlarmType_LastSeverity,19325,Variable +TrustListOutOfDateAlarmType_LastSeverity_SourceTimestamp,19326,Variable +TrustListOutOfDateAlarmType_Comment,19327,Variable +TrustListOutOfDateAlarmType_Comment_SourceTimestamp,19328,Variable +TrustListOutOfDateAlarmType_ClientUserId,19329,Variable +TrustListOutOfDateAlarmType_Disable,19330,Method +TrustListOutOfDateAlarmType_Enable,19331,Method +TrustListOutOfDateAlarmType_AddComment,19332,Method +TrustListOutOfDateAlarmType_AddComment_InputArguments,19333,Variable +TrustListOutOfDateAlarmType_ConditionRefresh,19334,Method +TrustListOutOfDateAlarmType_ConditionRefresh_InputArguments,19335,Variable +TrustListOutOfDateAlarmType_ConditionRefresh2,19336,Method +TrustListOutOfDateAlarmType_ConditionRefresh2_InputArguments,19337,Variable +TrustListOutOfDateAlarmType_AckedState,19338,Variable +TrustListOutOfDateAlarmType_AckedState_Id,19339,Variable +TrustListOutOfDateAlarmType_AckedState_Name,19340,Variable +TrustListOutOfDateAlarmType_AckedState_Number,19341,Variable +TrustListOutOfDateAlarmType_AckedState_EffectiveDisplayName,19342,Variable +TrustListOutOfDateAlarmType_AckedState_TransitionTime,19343,Variable +TrustListOutOfDateAlarmType_AckedState_EffectiveTransitionTime,19344,Variable +TrustListOutOfDateAlarmType_AckedState_TrueState,19345,Variable +TrustListOutOfDateAlarmType_AckedState_FalseState,19346,Variable +TrustListOutOfDateAlarmType_ConfirmedState,19347,Variable +TrustListOutOfDateAlarmType_ConfirmedState_Id,19348,Variable +TrustListOutOfDateAlarmType_ConfirmedState_Name,19349,Variable +TrustListOutOfDateAlarmType_ConfirmedState_Number,19350,Variable +TrustListOutOfDateAlarmType_ConfirmedState_EffectiveDisplayName,19351,Variable +TrustListOutOfDateAlarmType_ConfirmedState_TransitionTime,19352,Variable +TrustListOutOfDateAlarmType_ConfirmedState_EffectiveTransitionTime,19353,Variable +TrustListOutOfDateAlarmType_ConfirmedState_TrueState,19354,Variable +TrustListOutOfDateAlarmType_ConfirmedState_FalseState,19355,Variable +TrustListOutOfDateAlarmType_Acknowledge,19356,Method +TrustListOutOfDateAlarmType_Acknowledge_InputArguments,19357,Variable +TrustListOutOfDateAlarmType_Confirm,19358,Method +TrustListOutOfDateAlarmType_Confirm_InputArguments,19359,Variable +TrustListOutOfDateAlarmType_ActiveState,19360,Variable +TrustListOutOfDateAlarmType_ActiveState_Id,19361,Variable +TrustListOutOfDateAlarmType_ActiveState_Name,19362,Variable +TrustListOutOfDateAlarmType_ActiveState_Number,19363,Variable +TrustListOutOfDateAlarmType_ActiveState_EffectiveDisplayName,19364,Variable +TrustListOutOfDateAlarmType_ActiveState_TransitionTime,19365,Variable +TrustListOutOfDateAlarmType_ActiveState_EffectiveTransitionTime,19366,Variable +TrustListOutOfDateAlarmType_ActiveState_TrueState,19367,Variable +TrustListOutOfDateAlarmType_ActiveState_FalseState,19368,Variable +TrustListOutOfDateAlarmType_InputNode,19369,Variable +TrustListOutOfDateAlarmType_SuppressedState,19370,Variable +TrustListOutOfDateAlarmType_SuppressedState_Id,19371,Variable +TrustListOutOfDateAlarmType_SuppressedState_Name,19372,Variable +TrustListOutOfDateAlarmType_SuppressedState_Number,19373,Variable +TrustListOutOfDateAlarmType_SuppressedState_EffectiveDisplayName,19374,Variable +TrustListOutOfDateAlarmType_SuppressedState_TransitionTime,19375,Variable +TrustListOutOfDateAlarmType_SuppressedState_EffectiveTransitionTime,19376,Variable +TrustListOutOfDateAlarmType_SuppressedState_TrueState,19377,Variable +TrustListOutOfDateAlarmType_SuppressedState_FalseState,19378,Variable +TrustListOutOfDateAlarmType_OutOfServiceState,19379,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_Id,19380,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_Name,19381,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_Number,19382,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_EffectiveDisplayName,19383,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_TransitionTime,19384,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_EffectiveTransitionTime,19385,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_TrueState,19386,Variable +TrustListOutOfDateAlarmType_OutOfServiceState_FalseState,19387,Variable +TrustListOutOfDateAlarmType_ShelvingState,19388,Object +TrustListOutOfDateAlarmType_ShelvingState_CurrentState,19389,Variable +TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Id,19390,Variable +TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Name,19391,Variable +TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Number,19392,Variable +TrustListOutOfDateAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,19393,Variable +TrustListOutOfDateAlarmType_ShelvingState_LastTransition,19394,Variable +TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Id,19395,Variable +TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Name,19396,Variable +TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Number,19397,Variable +TrustListOutOfDateAlarmType_ShelvingState_LastTransition_TransitionTime,19398,Variable +TrustListOutOfDateAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,19399,Variable +TrustListOutOfDateAlarmType_ShelvingState_AvailableStates,19400,Variable +TrustListOutOfDateAlarmType_ShelvingState_AvailableTransitions,19401,Variable +TrustListOutOfDateAlarmType_ShelvingState_UnshelveTime,19402,Variable +TrustListOutOfDateAlarmType_ShelvingState_TimedShelve,19403,Method +TrustListOutOfDateAlarmType_ShelvingState_TimedShelve_InputArguments,19404,Variable +TrustListOutOfDateAlarmType_ShelvingState_Unshelve,19405,Method +TrustListOutOfDateAlarmType_ShelvingState_OneShotShelve,19406,Method +TrustListOutOfDateAlarmType_SuppressedOrShelved,19407,Variable +TrustListOutOfDateAlarmType_MaxTimeShelved,19408,Variable +TrustListOutOfDateAlarmType_AudibleEnabled,19409,Variable +TrustListOutOfDateAlarmType_AudibleSound,19410,Variable +TrustListOutOfDateAlarmType_AudibleSound_ListId,19411,Variable +TrustListOutOfDateAlarmType_AudibleSound_AgencyId,19412,Variable +TrustListOutOfDateAlarmType_AudibleSound_VersionId,19413,Variable +TrustListOutOfDateAlarmType_SilenceState,19414,Variable +TrustListOutOfDateAlarmType_SilenceState_Id,19415,Variable +TrustListOutOfDateAlarmType_SilenceState_Name,19416,Variable +TrustListOutOfDateAlarmType_SilenceState_Number,19417,Variable +TrustListOutOfDateAlarmType_SilenceState_EffectiveDisplayName,19418,Variable +TrustListOutOfDateAlarmType_SilenceState_TransitionTime,19419,Variable +TrustListOutOfDateAlarmType_SilenceState_EffectiveTransitionTime,19420,Variable +TrustListOutOfDateAlarmType_SilenceState_TrueState,19421,Variable +TrustListOutOfDateAlarmType_SilenceState_FalseState,19422,Variable +TrustListOutOfDateAlarmType_OnDelay,19423,Variable +TrustListOutOfDateAlarmType_OffDelay,19424,Variable +TrustListOutOfDateAlarmType_FirstInGroupFlag,19425,Variable +TrustListOutOfDateAlarmType_FirstInGroup,19426,Object +TrustListOutOfDateAlarmType_LatchedState,19427,Variable +TrustListOutOfDateAlarmType_LatchedState_Id,19428,Variable +TrustListOutOfDateAlarmType_LatchedState_Name,19429,Variable +TrustListOutOfDateAlarmType_LatchedState_Number,19430,Variable +TrustListOutOfDateAlarmType_LatchedState_EffectiveDisplayName,19431,Variable +TrustListOutOfDateAlarmType_LatchedState_TransitionTime,19432,Variable +TrustListOutOfDateAlarmType_LatchedState_EffectiveTransitionTime,19433,Variable +TrustListOutOfDateAlarmType_LatchedState_TrueState,19434,Variable +TrustListOutOfDateAlarmType_LatchedState_FalseState,19435,Variable +TrustListOutOfDateAlarmType_AlarmGroup_Placeholder,19436,Object +TrustListOutOfDateAlarmType_ReAlarmTime,19437,Variable +TrustListOutOfDateAlarmType_ReAlarmRepeatCount,19438,Variable +TrustListOutOfDateAlarmType_Silence,19439,Method +TrustListOutOfDateAlarmType_Suppress,19440,Method +TrustListOutOfDateAlarmType_Unsuppress,19441,Method +TrustListOutOfDateAlarmType_RemoveFromService,19442,Method +TrustListOutOfDateAlarmType_PlaceInService,19443,Method +TrustListOutOfDateAlarmType_Reset,19444,Method +TrustListOutOfDateAlarmType_NormalState,19445,Variable +TrustListOutOfDateAlarmType_TrustListId,19446,Variable +TrustListOutOfDateAlarmType_LastUpdateTime,19447,Variable +TrustListOutOfDateAlarmType_UpdateFrequency,19448,Variable +CertificateGroupType_TrustList_UpdateFrequency,19449,Variable +CertificateGroupType_CertificateExpired,19450,Object +CertificateGroupType_CertificateExpired_EventId,19451,Variable +CertificateGroupType_CertificateExpired_EventType,19452,Variable +CertificateGroupType_CertificateExpired_SourceNode,19453,Variable +CertificateGroupType_CertificateExpired_SourceName,19454,Variable +CertificateGroupType_CertificateExpired_Time,19455,Variable +CertificateGroupType_CertificateExpired_ReceiveTime,19456,Variable +CertificateGroupType_CertificateExpired_LocalTime,19457,Variable +CertificateGroupType_CertificateExpired_Message,19458,Variable +CertificateGroupType_CertificateExpired_Severity,19459,Variable +CertificateGroupType_CertificateExpired_ConditionClassId,19460,Variable +CertificateGroupType_CertificateExpired_ConditionClassName,19461,Variable +CertificateGroupType_CertificateExpired_ConditionSubClassId,19462,Variable +CertificateGroupType_CertificateExpired_ConditionSubClassName,19463,Variable +CertificateGroupType_CertificateExpired_ConditionName,19464,Variable +CertificateGroupType_CertificateExpired_BranchId,19465,Variable +CertificateGroupType_CertificateExpired_Retain,19466,Variable +CertificateGroupType_CertificateExpired_EnabledState,19467,Variable +CertificateGroupType_CertificateExpired_EnabledState_Id,19468,Variable +CertificateGroupType_CertificateExpired_EnabledState_Name,19469,Variable +CertificateGroupType_CertificateExpired_EnabledState_Number,19470,Variable +CertificateGroupType_CertificateExpired_EnabledState_EffectiveDisplayName,19471,Variable +CertificateGroupType_CertificateExpired_EnabledState_TransitionTime,19472,Variable +CertificateGroupType_CertificateExpired_EnabledState_EffectiveTransitionTime,19473,Variable +CertificateGroupType_CertificateExpired_EnabledState_TrueState,19474,Variable +CertificateGroupType_CertificateExpired_EnabledState_FalseState,19475,Variable +CertificateGroupType_CertificateExpired_Quality,19476,Variable +CertificateGroupType_CertificateExpired_Quality_SourceTimestamp,19477,Variable +CertificateGroupType_CertificateExpired_LastSeverity,19478,Variable +CertificateGroupType_CertificateExpired_LastSeverity_SourceTimestamp,19479,Variable +CertificateGroupType_CertificateExpired_Comment,19480,Variable +CertificateGroupType_CertificateExpired_Comment_SourceTimestamp,19481,Variable +CertificateGroupType_CertificateExpired_ClientUserId,19482,Variable +CertificateGroupType_CertificateExpired_Disable,19483,Method +CertificateGroupType_CertificateExpired_Enable,19484,Method +CertificateGroupType_CertificateExpired_AddComment,19485,Method +CertificateGroupType_CertificateExpired_AddComment_InputArguments,19486,Variable +CertificateGroupType_CertificateExpired_AckedState,19487,Variable +CertificateGroupType_CertificateExpired_AckedState_Id,19488,Variable +CertificateGroupType_CertificateExpired_AckedState_Name,19489,Variable +CertificateGroupType_CertificateExpired_AckedState_Number,19490,Variable +CertificateGroupType_CertificateExpired_AckedState_EffectiveDisplayName,19491,Variable +CertificateGroupType_CertificateExpired_AckedState_TransitionTime,19492,Variable +CertificateGroupType_CertificateExpired_AckedState_EffectiveTransitionTime,19493,Variable +CertificateGroupType_CertificateExpired_AckedState_TrueState,19494,Variable +CertificateGroupType_CertificateExpired_AckedState_FalseState,19495,Variable +CertificateGroupType_CertificateExpired_ConfirmedState,19496,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_Id,19497,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_Name,19498,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_Number,19499,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_EffectiveDisplayName,19500,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_TransitionTime,19501,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_EffectiveTransitionTime,19502,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_TrueState,19503,Variable +CertificateGroupType_CertificateExpired_ConfirmedState_FalseState,19504,Variable +CertificateGroupType_CertificateExpired_Acknowledge,19505,Method +CertificateGroupType_CertificateExpired_Acknowledge_InputArguments,19506,Variable +CertificateGroupType_CertificateExpired_Confirm,19507,Method +CertificateGroupType_CertificateExpired_Confirm_InputArguments,19508,Variable +CertificateGroupType_CertificateExpired_ActiveState,19509,Variable +CertificateGroupType_CertificateExpired_ActiveState_Id,19510,Variable +CertificateGroupType_CertificateExpired_ActiveState_Name,19511,Variable +CertificateGroupType_CertificateExpired_ActiveState_Number,19512,Variable +CertificateGroupType_CertificateExpired_ActiveState_EffectiveDisplayName,19513,Variable +CertificateGroupType_CertificateExpired_ActiveState_TransitionTime,19514,Variable +CertificateGroupType_CertificateExpired_ActiveState_EffectiveTransitionTime,19515,Variable +CertificateGroupType_CertificateExpired_ActiveState_TrueState,19516,Variable +CertificateGroupType_CertificateExpired_ActiveState_FalseState,19517,Variable +CertificateGroupType_CertificateExpired_InputNode,19518,Variable +CertificateGroupType_CertificateExpired_SuppressedState,19519,Variable +CertificateGroupType_CertificateExpired_SuppressedState_Id,19520,Variable +CertificateGroupType_CertificateExpired_SuppressedState_Name,19521,Variable +CertificateGroupType_CertificateExpired_SuppressedState_Number,19522,Variable +CertificateGroupType_CertificateExpired_SuppressedState_EffectiveDisplayName,19523,Variable +CertificateGroupType_CertificateExpired_SuppressedState_TransitionTime,19524,Variable +CertificateGroupType_CertificateExpired_SuppressedState_EffectiveTransitionTime,19525,Variable +CertificateGroupType_CertificateExpired_SuppressedState_TrueState,19526,Variable +CertificateGroupType_CertificateExpired_SuppressedState_FalseState,19527,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState,19528,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_Id,19529,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_Name,19530,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_Number,19531,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_EffectiveDisplayName,19532,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_TransitionTime,19533,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,19534,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_TrueState,19535,Variable +CertificateGroupType_CertificateExpired_OutOfServiceState_FalseState,19536,Variable +CertificateGroupType_CertificateExpired_ShelvingState,19537,Object +CertificateGroupType_CertificateExpired_ShelvingState_CurrentState,19538,Variable +CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Id,19539,Variable +CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Name,19540,Variable +CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Number,19541,Variable +CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,19542,Variable +CertificateGroupType_CertificateExpired_ShelvingState_LastTransition,19543,Variable +CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Id,19544,Variable +CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Name,19545,Variable +CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Number,19546,Variable +CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_TransitionTime,19547,Variable +CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,19548,Variable +CertificateGroupType_CertificateExpired_ShelvingState_AvailableStates,19549,Variable +DataSetWriterType_Diagnostics,19550,Object +DataSetWriterType_Diagnostics_DiagnosticsLevel,19551,Variable +DataSetWriterType_Diagnostics_TotalInformation,19552,Variable +DataSetWriterType_Diagnostics_TotalInformation_Active,19553,Variable +DataSetWriterType_Diagnostics_TotalInformation_Classification,19554,Variable +DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel,19555,Variable +DataSetWriterType_Diagnostics_TotalInformation_TimeFirstChange,19556,Variable +DataSetWriterType_Diagnostics_TotalError,19557,Variable +DataSetWriterType_Diagnostics_TotalError_Active,19558,Variable +DataSetWriterType_Diagnostics_TotalError_Classification,19559,Variable +DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel,19560,Variable +DataSetWriterType_Diagnostics_TotalError_TimeFirstChange,19561,Variable +DataSetWriterType_Diagnostics_Reset,19562,Method +DataSetWriterType_Diagnostics_SubError,19563,Variable +DataSetWriterType_Diagnostics_Counters,19564,Object +DataSetWriterType_Diagnostics_Counters_StateError,19565,Variable +DataSetWriterType_Diagnostics_Counters_StateError_Active,19566,Variable +DataSetWriterType_Diagnostics_Counters_StateError_Classification,19567,Variable +DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel,19568,Variable +DataSetWriterType_Diagnostics_Counters_StateError_TimeFirstChange,19569,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod,19570,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active,19571,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification,19572,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19573,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19574,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByParent,19575,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active,19576,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification,19577,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19578,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19579,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalFromError,19580,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active,19581,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification,19582,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19583,Variable +DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19584,Variable +DataSetWriterType_Diagnostics_Counters_StatePausedByParent,19585,Variable +DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active,19586,Variable +DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification,19587,Variable +DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19588,Variable +DataSetWriterType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19589,Variable +DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod,19590,Variable +DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active,19591,Variable +DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification,19592,Variable +DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19593,Variable +DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19594,Variable +DataSetWriterType_Diagnostics_LiveValues,19595,Object +DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages,19596,Variable +DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active,19597,Variable +DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification,19598,Variable +DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,19599,Variable +DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,19600,Variable +DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber,19601,Variable +DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,19602,Variable +DataSetWriterType_Diagnostics_LiveValues_StatusCode,19603,Variable +DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,19604,Variable +DataSetWriterType_Diagnostics_LiveValues_MajorVersion,19605,Variable +DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,19606,Variable +DataSetWriterType_Diagnostics_LiveValues_MinorVersion,19607,Variable +DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,19608,Variable +DataSetReaderType_Diagnostics,19609,Object +DataSetReaderType_Diagnostics_DiagnosticsLevel,19610,Variable +DataSetReaderType_Diagnostics_TotalInformation,19611,Variable +DataSetReaderType_Diagnostics_TotalInformation_Active,19612,Variable +DataSetReaderType_Diagnostics_TotalInformation_Classification,19613,Variable +DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel,19614,Variable +DataSetReaderType_Diagnostics_TotalInformation_TimeFirstChange,19615,Variable +DataSetReaderType_Diagnostics_TotalError,19616,Variable +DataSetReaderType_Diagnostics_TotalError_Active,19617,Variable +DataSetReaderType_Diagnostics_TotalError_Classification,19618,Variable +DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel,19619,Variable +DataSetReaderType_Diagnostics_TotalError_TimeFirstChange,19620,Variable +DataSetReaderType_Diagnostics_Reset,19621,Method +DataSetReaderType_Diagnostics_SubError,19622,Variable +DataSetReaderType_Diagnostics_Counters,19623,Object +DataSetReaderType_Diagnostics_Counters_StateError,19624,Variable +DataSetReaderType_Diagnostics_Counters_StateError_Active,19625,Variable +DataSetReaderType_Diagnostics_Counters_StateError_Classification,19626,Variable +DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel,19627,Variable +DataSetReaderType_Diagnostics_Counters_StateError_TimeFirstChange,19628,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod,19629,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active,19630,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification,19631,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19632,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19633,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByParent,19634,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active,19635,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification,19636,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19637,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19638,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalFromError,19639,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active,19640,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification,19641,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19642,Variable +DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19643,Variable +DataSetReaderType_Diagnostics_Counters_StatePausedByParent,19644,Variable +DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active,19645,Variable +DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification,19646,Variable +DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19647,Variable +DataSetReaderType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19648,Variable +DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod,19649,Variable +DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active,19650,Variable +DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification,19651,Variable +DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19652,Variable +DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19653,Variable +DataSetReaderType_Diagnostics_LiveValues,19654,Object +DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages,19655,Variable +DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active,19656,Variable +DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification,19657,Variable +DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,19658,Variable +DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,19659,Variable +DataSetReaderType_Diagnostics_Counters_DecryptionErrors,19660,Variable +DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active,19661,Variable +DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification,19662,Variable +DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,19663,Variable +DataSetReaderType_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,19664,Variable +DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber,19665,Variable +DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,19666,Variable +DataSetReaderType_Diagnostics_LiveValues_StatusCode,19667,Variable +DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,19668,Variable +DataSetReaderType_Diagnostics_LiveValues_MajorVersion,19669,Variable +DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,19670,Variable +DataSetReaderType_Diagnostics_LiveValues_MinorVersion,19671,Variable +DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,19672,Variable +DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID,19673,Variable +DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,19674,Variable +DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID,19675,Variable +DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,19676,Variable +PubSubDiagnosticsType,19677,ObjectType +PubSubDiagnosticsType_DiagnosticsLevel,19678,Variable +PubSubDiagnosticsType_TotalInformation,19679,Variable +PubSubDiagnosticsType_TotalInformation_Active,19680,Variable +PubSubDiagnosticsType_TotalInformation_Classification,19681,Variable +PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel,19682,Variable +PubSubDiagnosticsType_TotalInformation_TimeFirstChange,19683,Variable +PubSubDiagnosticsType_TotalError,19684,Variable +PubSubDiagnosticsType_TotalError_Active,19685,Variable +PubSubDiagnosticsType_TotalError_Classification,19686,Variable +PubSubDiagnosticsType_TotalError_DiagnosticsLevel,19687,Variable +PubSubDiagnosticsType_TotalError_TimeFirstChange,19688,Variable +PubSubDiagnosticsType_Reset,19689,Method +PubSubDiagnosticsType_SubError,19690,Variable +PubSubDiagnosticsType_Counters,19691,Object +PubSubDiagnosticsType_Counters_StateError,19692,Variable +PubSubDiagnosticsType_Counters_StateError_Active,19693,Variable +PubSubDiagnosticsType_Counters_StateError_Classification,19694,Variable +PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel,19695,Variable +PubSubDiagnosticsType_Counters_StateError_TimeFirstChange,19696,Variable +PubSubDiagnosticsType_Counters_StateOperationalByMethod,19697,Variable +PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active,19698,Variable +PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification,19699,Variable +PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel,19700,Variable +PubSubDiagnosticsType_Counters_StateOperationalByMethod_TimeFirstChange,19701,Variable +PubSubDiagnosticsType_Counters_StateOperationalByParent,19702,Variable +PubSubDiagnosticsType_Counters_StateOperationalByParent_Active,19703,Variable +PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification,19704,Variable +PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel,19705,Variable +PubSubDiagnosticsType_Counters_StateOperationalByParent_TimeFirstChange,19706,Variable +PubSubDiagnosticsType_Counters_StateOperationalFromError,19707,Variable +PubSubDiagnosticsType_Counters_StateOperationalFromError_Active,19708,Variable +PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification,19709,Variable +PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel,19710,Variable +PubSubDiagnosticsType_Counters_StateOperationalFromError_TimeFirstChange,19711,Variable +PubSubDiagnosticsType_Counters_StatePausedByParent,19712,Variable +PubSubDiagnosticsType_Counters_StatePausedByParent_Active,19713,Variable +PubSubDiagnosticsType_Counters_StatePausedByParent_Classification,19714,Variable +PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel,19715,Variable +PubSubDiagnosticsType_Counters_StatePausedByParent_TimeFirstChange,19716,Variable +PubSubDiagnosticsType_Counters_StateDisabledByMethod,19717,Variable +PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active,19718,Variable +PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification,19719,Variable +PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel,19720,Variable +PubSubDiagnosticsType_Counters_StateDisabledByMethod_TimeFirstChange,19721,Variable +PubSubDiagnosticsType_LiveValues,19722,Object +DiagnosticsLevel,19723,DataType +DiagnosticsLevel_EnumStrings,19724,Variable +PubSubDiagnosticsCounterType,19725,VariableType +PubSubDiagnosticsCounterType_Active,19726,Variable +PubSubDiagnosticsCounterType_Classification,19727,Variable +PubSubDiagnosticsCounterType_DiagnosticsLevel,19728,Variable +PubSubDiagnosticsCounterType_TimeFirstChange,19729,Variable +PubSubDiagnosticsCounterClassification,19730,DataType +PubSubDiagnosticsCounterClassification_EnumStrings,19731,Variable +PubSubDiagnosticsRootType,19732,ObjectType +PubSubDiagnosticsRootType_DiagnosticsLevel,19733,Variable +PubSubDiagnosticsRootType_TotalInformation,19734,Variable +PubSubDiagnosticsRootType_TotalInformation_Active,19735,Variable +PubSubDiagnosticsRootType_TotalInformation_Classification,19736,Variable +PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel,19737,Variable +PubSubDiagnosticsRootType_TotalInformation_TimeFirstChange,19738,Variable +PubSubDiagnosticsRootType_TotalError,19739,Variable +PubSubDiagnosticsRootType_TotalError_Active,19740,Variable +PubSubDiagnosticsRootType_TotalError_Classification,19741,Variable +PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel,19742,Variable +PubSubDiagnosticsRootType_TotalError_TimeFirstChange,19743,Variable +PubSubDiagnosticsRootType_Reset,19744,Method +PubSubDiagnosticsRootType_SubError,19745,Variable +PubSubDiagnosticsRootType_Counters,19746,Object +PubSubDiagnosticsRootType_Counters_StateError,19747,Variable +PubSubDiagnosticsRootType_Counters_StateError_Active,19748,Variable +PubSubDiagnosticsRootType_Counters_StateError_Classification,19749,Variable +PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel,19750,Variable +PubSubDiagnosticsRootType_Counters_StateError_TimeFirstChange,19751,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByMethod,19752,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active,19753,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification,19754,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel,19755,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_TimeFirstChange,19756,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByParent,19757,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active,19758,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification,19759,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel,19760,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalByParent_TimeFirstChange,19761,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalFromError,19762,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active,19763,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification,19764,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel,19765,Variable +PubSubDiagnosticsRootType_Counters_StateOperationalFromError_TimeFirstChange,19766,Variable +PubSubDiagnosticsRootType_Counters_StatePausedByParent,19767,Variable +PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active,19768,Variable +PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification,19769,Variable +PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel,19770,Variable +PubSubDiagnosticsRootType_Counters_StatePausedByParent_TimeFirstChange,19771,Variable +PubSubDiagnosticsRootType_Counters_StateDisabledByMethod,19772,Variable +PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active,19773,Variable +PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification,19774,Variable +PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel,19775,Variable +PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_TimeFirstChange,19776,Variable +PubSubDiagnosticsRootType_LiveValues,19777,Object +PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters,19778,Variable +PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,19779,Variable +PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders,19780,Variable +PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,19781,Variable +PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters,19782,Variable +PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,19783,Variable +PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders,19784,Variable +PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,19785,Variable +PubSubDiagnosticsConnectionType,19786,ObjectType +PubSubDiagnosticsConnectionType_DiagnosticsLevel,19787,Variable +PubSubDiagnosticsConnectionType_TotalInformation,19788,Variable +PubSubDiagnosticsConnectionType_TotalInformation_Active,19789,Variable +PubSubDiagnosticsConnectionType_TotalInformation_Classification,19790,Variable +PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel,19791,Variable +PubSubDiagnosticsConnectionType_TotalInformation_TimeFirstChange,19792,Variable +PubSubDiagnosticsConnectionType_TotalError,19793,Variable +PubSubDiagnosticsConnectionType_TotalError_Active,19794,Variable +PubSubDiagnosticsConnectionType_TotalError_Classification,19795,Variable +PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel,19796,Variable +PubSubDiagnosticsConnectionType_TotalError_TimeFirstChange,19797,Variable +PubSubDiagnosticsConnectionType_Reset,19798,Method +PubSubDiagnosticsConnectionType_SubError,19799,Variable +PubSubDiagnosticsConnectionType_Counters,19800,Object +PubSubDiagnosticsConnectionType_Counters_StateError,19801,Variable +PubSubDiagnosticsConnectionType_Counters_StateError_Active,19802,Variable +PubSubDiagnosticsConnectionType_Counters_StateError_Classification,19803,Variable +PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel,19804,Variable +PubSubDiagnosticsConnectionType_Counters_StateError_TimeFirstChange,19805,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod,19806,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active,19807,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification,19808,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel,19809,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_TimeFirstChange,19810,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent,19811,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active,19812,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification,19813,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel,19814,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_TimeFirstChange,19815,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError,19816,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active,19817,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification,19818,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel,19819,Variable +PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_TimeFirstChange,19820,Variable +PubSubDiagnosticsConnectionType_Counters_StatePausedByParent,19821,Variable +PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active,19822,Variable +PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification,19823,Variable +PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel,19824,Variable +PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_TimeFirstChange,19825,Variable +PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod,19826,Variable +PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active,19827,Variable +PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification,19828,Variable +PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel,19829,Variable +PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_TimeFirstChange,19830,Variable +PubSubDiagnosticsConnectionType_LiveValues,19831,Object +PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress,19832,Variable +PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel,19833,Variable +PubSubDiagnosticsWriterGroupType,19834,ObjectType +PubSubDiagnosticsWriterGroupType_DiagnosticsLevel,19835,Variable +PubSubDiagnosticsWriterGroupType_TotalInformation,19836,Variable +PubSubDiagnosticsWriterGroupType_TotalInformation_Active,19837,Variable +PubSubDiagnosticsWriterGroupType_TotalInformation_Classification,19838,Variable +PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel,19839,Variable +PubSubDiagnosticsWriterGroupType_TotalInformation_TimeFirstChange,19840,Variable +PubSubDiagnosticsWriterGroupType_TotalError,19841,Variable +PubSubDiagnosticsWriterGroupType_TotalError_Active,19842,Variable +PubSubDiagnosticsWriterGroupType_TotalError_Classification,19843,Variable +PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel,19844,Variable +PubSubDiagnosticsWriterGroupType_TotalError_TimeFirstChange,19845,Variable +PubSubDiagnosticsWriterGroupType_Reset,19846,Method +PubSubDiagnosticsWriterGroupType_SubError,19847,Variable +PubSubDiagnosticsWriterGroupType_Counters,19848,Object +PubSubDiagnosticsWriterGroupType_Counters_StateError,19849,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateError_Active,19850,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification,19851,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel,19852,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateError_TimeFirstChange,19853,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod,19854,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active,19855,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification,19856,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel,19857,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_TimeFirstChange,19858,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent,19859,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active,19860,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification,19861,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel,19862,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_TimeFirstChange,19863,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError,19864,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active,19865,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification,19866,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel,19867,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_TimeFirstChange,19868,Variable +PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent,19869,Variable +PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active,19870,Variable +PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification,19871,Variable +PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel,19872,Variable +PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_TimeFirstChange,19873,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod,19874,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active,19875,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification,19876,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel,19877,Variable +PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_TimeFirstChange,19878,Variable +PubSubDiagnosticsWriterGroupType_LiveValues,19879,Object +PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages,19880,Variable +PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active,19881,Variable +PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification,19882,Variable +PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel,19883,Variable +PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_TimeFirstChange,19884,Variable +PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions,19885,Variable +PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active,19886,Variable +PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification,19887,Variable +PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel,19888,Variable +PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_TimeFirstChange,19889,Variable +PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors,19890,Variable +PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active,19891,Variable +PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification,19892,Variable +PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel,19893,Variable +PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_TimeFirstChange,19894,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters,19895,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,19896,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters,19897,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,19898,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID,19899,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel,19900,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID,19901,Variable +PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel,19902,Variable +PubSubDiagnosticsReaderGroupType,19903,ObjectType +PubSubDiagnosticsReaderGroupType_DiagnosticsLevel,19904,Variable +PubSubDiagnosticsReaderGroupType_TotalInformation,19905,Variable +PubSubDiagnosticsReaderGroupType_TotalInformation_Active,19906,Variable +PubSubDiagnosticsReaderGroupType_TotalInformation_Classification,19907,Variable +PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel,19908,Variable +PubSubDiagnosticsReaderGroupType_TotalInformation_TimeFirstChange,19909,Variable +PubSubDiagnosticsReaderGroupType_TotalError,19910,Variable +PubSubDiagnosticsReaderGroupType_TotalError_Active,19911,Variable +PubSubDiagnosticsReaderGroupType_TotalError_Classification,19912,Variable +PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel,19913,Variable +PubSubDiagnosticsReaderGroupType_TotalError_TimeFirstChange,19914,Variable +PubSubDiagnosticsReaderGroupType_Reset,19915,Method +PubSubDiagnosticsReaderGroupType_SubError,19916,Variable +PubSubDiagnosticsReaderGroupType_Counters,19917,Object +PubSubDiagnosticsReaderGroupType_Counters_StateError,19918,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateError_Active,19919,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification,19920,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel,19921,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateError_TimeFirstChange,19922,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod,19923,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active,19924,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification,19925,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel,19926,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_TimeFirstChange,19927,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent,19928,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active,19929,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification,19930,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel,19931,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_TimeFirstChange,19932,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError,19933,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active,19934,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification,19935,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel,19936,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_TimeFirstChange,19937,Variable +PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent,19938,Variable +PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active,19939,Variable +PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification,19940,Variable +PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel,19941,Variable +PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_TimeFirstChange,19942,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod,19943,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active,19944,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification,19945,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel,19946,Variable +PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_TimeFirstChange,19947,Variable +PubSubDiagnosticsReaderGroupType_LiveValues,19948,Object +PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages,19949,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active,19950,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification,19951,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel,19952,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_TimeFirstChange,19953,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages,19954,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active,19955,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification,19956,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel,19957,Variable +PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_TimeFirstChange,19958,Variable +PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors,19959,Variable +PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active,19960,Variable +PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification,19961,Variable +PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel,19962,Variable +PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_TimeFirstChange,19963,Variable +PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders,19964,Variable +PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,19965,Variable +PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders,19966,Variable +PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,19967,Variable +PubSubDiagnosticsDataSetWriterType,19968,ObjectType +PubSubDiagnosticsDataSetWriterType_DiagnosticsLevel,19969,Variable +PubSubDiagnosticsDataSetWriterType_TotalInformation,19970,Variable +PubSubDiagnosticsDataSetWriterType_TotalInformation_Active,19971,Variable +PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification,19972,Variable +PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel,19973,Variable +PubSubDiagnosticsDataSetWriterType_TotalInformation_TimeFirstChange,19974,Variable +PubSubDiagnosticsDataSetWriterType_TotalError,19975,Variable +PubSubDiagnosticsDataSetWriterType_TotalError_Active,19976,Variable +PubSubDiagnosticsDataSetWriterType_TotalError_Classification,19977,Variable +PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel,19978,Variable +PubSubDiagnosticsDataSetWriterType_TotalError_TimeFirstChange,19979,Variable +PubSubDiagnosticsDataSetWriterType_Reset,19980,Method +PubSubDiagnosticsDataSetWriterType_SubError,19981,Variable +PubSubDiagnosticsDataSetWriterType_Counters,19982,Object +PubSubDiagnosticsDataSetWriterType_Counters_StateError,19983,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active,19984,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification,19985,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel,19986,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateError_TimeFirstChange,19987,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod,19988,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active,19989,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification,19990,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel,19991,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_TimeFirstChange,19992,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent,19993,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active,19994,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification,19995,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel,19996,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_TimeFirstChange,19997,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError,19998,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active,19999,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification,20000,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel,20001,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_TimeFirstChange,20002,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent,20003,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active,20004,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification,20005,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel,20006,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_TimeFirstChange,20007,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod,20008,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active,20009,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification,20010,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel,20011,Variable +PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_TimeFirstChange,20012,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues,20013,Object +PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages,20014,Variable +PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active,20015,Variable +PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification,20016,Variable +PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel,20017,Variable +PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_TimeFirstChange,20018,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber,20019,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel,20020,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode,20021,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel,20022,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion,20023,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel,20024,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion,20025,Variable +PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel,20026,Variable +PubSubDiagnosticsDataSetReaderType,20027,ObjectType +PubSubDiagnosticsDataSetReaderType_DiagnosticsLevel,20028,Variable +PubSubDiagnosticsDataSetReaderType_TotalInformation,20029,Variable +PubSubDiagnosticsDataSetReaderType_TotalInformation_Active,20030,Variable +PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification,20031,Variable +PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel,20032,Variable +PubSubDiagnosticsDataSetReaderType_TotalInformation_TimeFirstChange,20033,Variable +PubSubDiagnosticsDataSetReaderType_TotalError,20034,Variable +PubSubDiagnosticsDataSetReaderType_TotalError_Active,20035,Variable +PubSubDiagnosticsDataSetReaderType_TotalError_Classification,20036,Variable +PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel,20037,Variable +PubSubDiagnosticsDataSetReaderType_TotalError_TimeFirstChange,20038,Variable +PubSubDiagnosticsDataSetReaderType_Reset,20039,Method +PubSubDiagnosticsDataSetReaderType_SubError,20040,Variable +PubSubDiagnosticsDataSetReaderType_Counters,20041,Object +PubSubDiagnosticsDataSetReaderType_Counters_StateError,20042,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active,20043,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification,20044,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel,20045,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateError_TimeFirstChange,20046,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod,20047,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active,20048,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification,20049,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel,20050,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_TimeFirstChange,20051,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent,20052,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active,20053,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification,20054,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel,20055,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_TimeFirstChange,20056,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError,20057,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active,20058,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification,20059,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel,20060,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_TimeFirstChange,20061,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent,20062,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active,20063,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification,20064,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel,20065,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_TimeFirstChange,20066,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod,20067,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active,20068,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification,20069,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel,20070,Variable +PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_TimeFirstChange,20071,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues,20072,Object +PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages,20073,Variable +PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active,20074,Variable +PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification,20075,Variable +PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel,20076,Variable +PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_TimeFirstChange,20077,Variable +PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors,20078,Variable +PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active,20079,Variable +PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification,20080,Variable +PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel,20081,Variable +PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_TimeFirstChange,20082,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber,20083,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel,20084,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode,20085,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel,20086,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion,20087,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel,20088,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion,20089,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel,20090,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID,20091,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel,20092,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID,20093,Variable +PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel,20094,Variable +CertificateGroupType_CertificateExpired_ShelvingState_AvailableTransitions,20095,Variable +CertificateGroupType_CertificateExpired_ShelvingState_UnshelveTime,20096,Variable +CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve,20097,Method +CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve_InputArguments,20098,Variable +CertificateGroupType_CertificateExpired_ShelvingState_Unshelve,20099,Method +CertificateGroupType_CertificateExpired_ShelvingState_OneShotShelve,20100,Method +CertificateGroupType_CertificateExpired_SuppressedOrShelved,20101,Variable +CertificateGroupType_CertificateExpired_MaxTimeShelved,20102,Variable +CertificateGroupType_CertificateExpired_AudibleEnabled,20103,Variable +CertificateGroupType_CertificateExpired_AudibleSound,20104,Variable +CertificateGroupType_CertificateExpired_AudibleSound_ListId,20105,Variable +CertificateGroupType_CertificateExpired_AudibleSound_AgencyId,20106,Variable +CertificateGroupType_CertificateExpired_AudibleSound_VersionId,20107,Variable +CertificateGroupType_CertificateExpired_SilenceState,20108,Variable +CertificateGroupType_CertificateExpired_SilenceState_Id,20109,Variable +CertificateGroupType_CertificateExpired_SilenceState_Name,20110,Variable +CertificateGroupType_CertificateExpired_SilenceState_Number,20111,Variable +CertificateGroupType_CertificateExpired_SilenceState_EffectiveDisplayName,20112,Variable +CertificateGroupType_CertificateExpired_SilenceState_TransitionTime,20113,Variable +CertificateGroupType_CertificateExpired_SilenceState_EffectiveTransitionTime,20114,Variable +CertificateGroupType_CertificateExpired_SilenceState_TrueState,20115,Variable +CertificateGroupType_CertificateExpired_SilenceState_FalseState,20116,Variable +CertificateGroupType_CertificateExpired_OnDelay,20117,Variable +CertificateGroupType_CertificateExpired_OffDelay,20118,Variable +CertificateGroupType_CertificateExpired_FirstInGroupFlag,20119,Variable +CertificateGroupType_CertificateExpired_FirstInGroup,20120,Object +CertificateGroupType_CertificateExpired_LatchedState,20121,Variable +CertificateGroupType_CertificateExpired_LatchedState_Id,20122,Variable +CertificateGroupType_CertificateExpired_LatchedState_Name,20123,Variable +CertificateGroupType_CertificateExpired_LatchedState_Number,20124,Variable +CertificateGroupType_CertificateExpired_LatchedState_EffectiveDisplayName,20125,Variable +CertificateGroupType_CertificateExpired_LatchedState_TransitionTime,20126,Variable +CertificateGroupType_CertificateExpired_LatchedState_EffectiveTransitionTime,20127,Variable +CertificateGroupType_CertificateExpired_LatchedState_TrueState,20128,Variable +CertificateGroupType_CertificateExpired_LatchedState_FalseState,20129,Variable +CertificateGroupType_CertificateExpired_ReAlarmTime,20130,Variable +CertificateGroupType_CertificateExpired_ReAlarmRepeatCount,20131,Variable +CertificateGroupType_CertificateExpired_Silence,20132,Method +CertificateGroupType_CertificateExpired_Suppress,20133,Method +CertificateGroupType_CertificateExpired_Unsuppress,20134,Method +CertificateGroupType_CertificateExpired_RemoveFromService,20135,Method +CertificateGroupType_CertificateExpired_PlaceInService,20136,Method +CertificateGroupType_CertificateExpired_Reset,20137,Method +CertificateGroupType_CertificateExpired_NormalState,20138,Variable +CertificateGroupType_CertificateExpired_ExpirationDate,20139,Variable +CertificateGroupType_CertificateExpired_ExpirationLimit,20140,Variable +CertificateGroupType_CertificateExpired_CertificateType,20141,Variable +CertificateGroupType_CertificateExpired_Certificate,20142,Variable +CertificateGroupType_TrustListOutOfDate,20143,Object +CertificateGroupType_TrustListOutOfDate_EventId,20144,Variable +CertificateGroupType_TrustListOutOfDate_EventType,20145,Variable +CertificateGroupType_TrustListOutOfDate_SourceNode,20146,Variable +CertificateGroupType_TrustListOutOfDate_SourceName,20147,Variable +CertificateGroupType_TrustListOutOfDate_Time,20148,Variable +CertificateGroupType_TrustListOutOfDate_ReceiveTime,20149,Variable +CertificateGroupType_TrustListOutOfDate_LocalTime,20150,Variable +CertificateGroupType_TrustListOutOfDate_Message,20151,Variable +CertificateGroupType_TrustListOutOfDate_Severity,20152,Variable +CertificateGroupType_TrustListOutOfDate_ConditionClassId,20153,Variable +CertificateGroupType_TrustListOutOfDate_ConditionClassName,20154,Variable +CertificateGroupType_TrustListOutOfDate_ConditionSubClassId,20155,Variable +CertificateGroupType_TrustListOutOfDate_ConditionSubClassName,20156,Variable +CertificateGroupType_TrustListOutOfDate_ConditionName,20157,Variable +CertificateGroupType_TrustListOutOfDate_BranchId,20158,Variable +CertificateGroupType_TrustListOutOfDate_Retain,20159,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState,20160,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_Id,20161,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_Name,20162,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_Number,20163,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_EffectiveDisplayName,20164,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_TransitionTime,20165,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,20166,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_TrueState,20167,Variable +CertificateGroupType_TrustListOutOfDate_EnabledState_FalseState,20168,Variable +CertificateGroupType_TrustListOutOfDate_Quality,20169,Variable +CertificateGroupType_TrustListOutOfDate_Quality_SourceTimestamp,20170,Variable +CertificateGroupType_TrustListOutOfDate_LastSeverity,20171,Variable +CertificateGroupType_TrustListOutOfDate_LastSeverity_SourceTimestamp,20172,Variable +CertificateGroupType_TrustListOutOfDate_Comment,20173,Variable +CertificateGroupType_TrustListOutOfDate_Comment_SourceTimestamp,20174,Variable +CertificateGroupType_TrustListOutOfDate_ClientUserId,20175,Variable +CertificateGroupType_TrustListOutOfDate_Disable,20176,Method +CertificateGroupType_TrustListOutOfDate_Enable,20177,Method +CertificateGroupType_TrustListOutOfDate_AddComment,20178,Method +CertificateGroupType_TrustListOutOfDate_AddComment_InputArguments,20179,Variable +CertificateGroupType_TrustListOutOfDate_AckedState,20180,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_Id,20181,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_Name,20182,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_Number,20183,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_EffectiveDisplayName,20184,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_TransitionTime,20185,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_EffectiveTransitionTime,20186,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_TrueState,20187,Variable +CertificateGroupType_TrustListOutOfDate_AckedState_FalseState,20188,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState,20189,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_Id,20190,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_Name,20191,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_Number,20192,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,20193,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_TransitionTime,20194,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,20195,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_TrueState,20196,Variable +CertificateGroupType_TrustListOutOfDate_ConfirmedState_FalseState,20197,Variable +CertificateGroupType_TrustListOutOfDate_Acknowledge,20198,Method +CertificateGroupType_TrustListOutOfDate_Acknowledge_InputArguments,20199,Variable +CertificateGroupType_TrustListOutOfDate_Confirm,20200,Method +CertificateGroupType_TrustListOutOfDate_Confirm_InputArguments,20201,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState,20202,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_Id,20203,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_Name,20204,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_Number,20205,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_EffectiveDisplayName,20206,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_TransitionTime,20207,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,20208,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_TrueState,20209,Variable +CertificateGroupType_TrustListOutOfDate_ActiveState_FalseState,20210,Variable +CertificateGroupType_TrustListOutOfDate_InputNode,20211,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState,20212,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_Id,20213,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_Name,20214,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_Number,20215,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,20216,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_TransitionTime,20217,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,20218,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_TrueState,20219,Variable +CertificateGroupType_TrustListOutOfDate_SuppressedState_FalseState,20220,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState,20221,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Id,20222,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Name,20223,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Number,20224,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,20225,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_TransitionTime,20226,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,20227,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_TrueState,20228,Variable +CertificateGroupType_TrustListOutOfDate_OutOfServiceState_FalseState,20229,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState,20230,Object +CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState,20231,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Id,20232,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Name,20233,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Number,20234,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,20235,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition,20236,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Id,20237,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Name,20238,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Number,20239,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,20240,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,20241,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_AvailableStates,20242,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_AvailableTransitions,20243,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_UnshelveTime,20244,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve,20245,Method +CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,20246,Variable +CertificateGroupType_TrustListOutOfDate_ShelvingState_Unshelve,20247,Method +CertificateGroupType_TrustListOutOfDate_ShelvingState_OneShotShelve,20248,Method +CertificateGroupType_TrustListOutOfDate_SuppressedOrShelved,20249,Variable +CertificateGroupType_TrustListOutOfDate_MaxTimeShelved,20250,Variable +CertificateGroupType_TrustListOutOfDate_AudibleEnabled,20251,Variable +CertificateGroupType_TrustListOutOfDate_AudibleSound,20252,Variable +CertificateGroupType_TrustListOutOfDate_AudibleSound_ListId,20253,Variable +CertificateGroupType_TrustListOutOfDate_AudibleSound_AgencyId,20254,Variable +CertificateGroupType_TrustListOutOfDate_AudibleSound_VersionId,20255,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState,20256,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_Id,20257,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_Name,20258,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_Number,20259,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_EffectiveDisplayName,20260,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_TransitionTime,20261,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,20262,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_TrueState,20263,Variable +CertificateGroupType_TrustListOutOfDate_SilenceState_FalseState,20264,Variable +CertificateGroupType_TrustListOutOfDate_OnDelay,20265,Variable +CertificateGroupType_TrustListOutOfDate_OffDelay,20266,Variable +CertificateGroupType_TrustListOutOfDate_FirstInGroupFlag,20267,Variable +CertificateGroupType_TrustListOutOfDate_FirstInGroup,20268,Object +CertificateGroupType_TrustListOutOfDate_LatchedState,20269,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_Id,20270,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_Name,20271,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_Number,20272,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_EffectiveDisplayName,20273,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_TransitionTime,20274,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,20275,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_TrueState,20276,Variable +CertificateGroupType_TrustListOutOfDate_LatchedState_FalseState,20277,Variable +CertificateGroupType_TrustListOutOfDate_ReAlarmTime,20278,Variable +CertificateGroupType_TrustListOutOfDate_ReAlarmRepeatCount,20279,Variable +CertificateGroupType_TrustListOutOfDate_Silence,20280,Method +CertificateGroupType_TrustListOutOfDate_Suppress,20281,Method +CertificateGroupType_TrustListOutOfDate_Unsuppress,20282,Method +CertificateGroupType_TrustListOutOfDate_RemoveFromService,20283,Method +CertificateGroupType_TrustListOutOfDate_PlaceInService,20284,Method +CertificateGroupType_TrustListOutOfDate_Reset,20285,Method +CertificateGroupType_TrustListOutOfDate_NormalState,20286,Variable +CertificateGroupType_TrustListOutOfDate_TrustListId,20287,Variable +CertificateGroupType_TrustListOutOfDate_LastUpdateTime,20288,Variable +CertificateGroupType_TrustListOutOfDate_UpdateFrequency,20289,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UpdateFrequency,20290,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired,20291,Object +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventId,20292,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventType,20293,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceNode,20294,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceName,20295,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Time,20296,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReceiveTime,20297,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LocalTime,20298,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Message,20299,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Severity,20300,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassId,20301,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassName,20302,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionSubClassId,20303,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionSubClassName,20304,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionName,20305,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_BranchId,20306,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Retain,20307,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState,20308,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Id,20309,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Name,20310,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Number,20311,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_EffectiveDisplayName,20312,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_TransitionTime,20313,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,20314,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_TrueState,20315,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_FalseState,20316,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality,20317,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp,20318,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity,20319,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp,20320,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment,20321,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp,20322,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ClientUserId,20323,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Disable,20324,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Enable,20325,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment,20326,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments,20327,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState,20328,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Id,20329,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Name,20330,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Number,20331,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_EffectiveDisplayName,20332,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_TransitionTime,20333,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_EffectiveTransitionTime,20334,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_TrueState,20335,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_FalseState,20336,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState,20337,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id,20338,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Name,20339,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Number,20340,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,20341,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_TransitionTime,20342,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,20343,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_TrueState,20344,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_FalseState,20345,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge,20346,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments,20347,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm,20348,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments,20349,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState,20350,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Id,20351,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Name,20352,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Number,20353,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_EffectiveDisplayName,20354,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_TransitionTime,20355,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,20356,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_TrueState,20357,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_FalseState,20358,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_InputNode,20359,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState,20360,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id,20361,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Name,20362,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Number,20363,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,20364,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_TransitionTime,20365,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,20366,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_TrueState,20367,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_FalseState,20368,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState,20369,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id,20370,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Name,20371,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Number,20372,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,20373,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_TransitionTime,20374,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,20375,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_TrueState,20376,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_FalseState,20377,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState,20378,Object +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState,20379,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id,20380,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Name,20381,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Number,20382,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,20383,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition,20384,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id,20385,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Name,20386,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Number,20387,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,20388,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,20389,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_AvailableStates,20390,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_AvailableTransitions,20391,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime,20392,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve,20393,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,20394,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve,20395,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve,20396,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved,20397,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_MaxTimeShelved,20398,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AudibleEnabled,20399,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AudibleSound,20400,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AudibleSound_ListId,20401,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AudibleSound_AgencyId,20402,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AudibleSound_VersionId,20403,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState,20404,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Id,20405,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Name,20406,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Number,20407,Variable +DataSetOrderingType,20408,DataType +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID,20409,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_EffectiveDisplayName,20410,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_TransitionTime,20411,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,20412,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_TrueState,20413,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_FalseState,20414,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OnDelay,20415,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OffDelay,20416,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_FirstInGroupFlag,20417,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_FirstInGroup,20418,Object +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState,20419,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Id,20420,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Name,20421,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Number,20422,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_EffectiveDisplayName,20423,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_TransitionTime,20424,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,20425,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_TrueState,20426,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_FalseState,20427,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReAlarmTime,20428,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReAlarmRepeatCount,20429,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Silence,20430,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Suppress,20431,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Unsuppress,20432,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_RemoveFromService,20433,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_PlaceInService,20434,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Reset,20435,Method +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_NormalState,20436,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationDate,20437,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationLimit,20438,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_CertificateType,20439,Variable +CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Certificate,20440,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate,20441,Object +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventId,20442,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventType,20443,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceNode,20444,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceName,20445,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Time,20446,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime,20447,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LocalTime,20448,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Message,20449,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Severity,20450,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId,20451,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName,20452,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionSubClassId,20453,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionSubClassName,20454,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionName,20455,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_BranchId,20456,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Retain,20457,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState,20458,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id,20459,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Name,20460,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Number,20461,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,20462,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_TransitionTime,20463,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,20464,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_TrueState,20465,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_FalseState,20466,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality,20467,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp,20468,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity,20469,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,20470,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment,20471,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp,20472,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId,20473,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Disable,20474,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Enable,20475,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment,20476,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments,20477,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState,20478,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id,20479,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Name,20480,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Number,20481,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,20482,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_TransitionTime,20483,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,20484,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_TrueState,20485,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_FalseState,20486,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState,20487,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id,20488,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Name,20489,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Number,20490,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,20491,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,20492,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,20493,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_TrueState,20494,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_FalseState,20495,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge,20496,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments,20497,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm,20498,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments,20499,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState,20500,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id,20501,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Name,20502,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Number,20503,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,20504,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_TransitionTime,20505,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,20506,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_TrueState,20507,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_FalseState,20508,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_InputNode,20509,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState,20510,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id,20511,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Name,20512,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Number,20513,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,20514,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_TransitionTime,20515,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,20516,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_TrueState,20517,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_FalseState,20518,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState,20519,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id,20520,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Name,20521,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Number,20522,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,20523,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,20524,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,20525,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_TrueState,20526,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_FalseState,20527,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState,20528,Object +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState,20529,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,20530,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,20531,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,20532,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,20533,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition,20534,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,20535,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,20536,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,20537,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,20538,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,20539,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_AvailableStates,20540,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,20541,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,20542,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve,20543,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,20544,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve,20545,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,20546,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved,20547,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_MaxTimeShelved,20548,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AudibleEnabled,20549,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound,20550,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_ListId,20551,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_AgencyId,20552,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_VersionId,20553,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState,20554,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id,20555,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Name,20556,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Number,20557,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,20558,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_TransitionTime,20559,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,20560,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_TrueState,20561,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_FalseState,20562,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OnDelay,20563,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OffDelay,20564,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_FirstInGroupFlag,20565,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_FirstInGroup,20566,Object +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState,20567,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id,20568,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Name,20569,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Number,20570,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,20571,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_TransitionTime,20572,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,20573,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_TrueState,20574,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_FalseState,20575,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReAlarmTime,20576,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReAlarmRepeatCount,20577,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Silence,20578,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Suppress,20579,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Unsuppress,20580,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_RemoveFromService,20581,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_PlaceInService,20582,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Reset,20583,Method +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_NormalState,20584,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_TrustListId,20585,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime,20586,Variable +CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency,20587,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UpdateFrequency,20588,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired,20589,Object +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventId,20590,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventType,20591,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceNode,20592,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceName,20593,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Time,20594,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReceiveTime,20595,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LocalTime,20596,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Message,20597,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Severity,20598,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassId,20599,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassName,20600,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionSubClassId,20601,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionSubClassName,20602,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionName,20603,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_BranchId,20604,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Retain,20605,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState,20606,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Id,20607,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Name,20608,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Number,20609,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_EffectiveDisplayName,20610,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_TransitionTime,20611,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,20612,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_TrueState,20613,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_FalseState,20614,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality,20615,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp,20616,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity,20617,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp,20618,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment,20619,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp,20620,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ClientUserId,20621,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Disable,20622,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Enable,20623,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment,20624,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments,20625,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState,20626,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Id,20627,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Name,20628,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Number,20629,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_EffectiveDisplayName,20630,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_TransitionTime,20631,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_EffectiveTransitionTime,20632,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_TrueState,20633,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_FalseState,20634,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState,20635,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id,20636,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Name,20637,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Number,20638,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,20639,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_TransitionTime,20640,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,20641,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_TrueState,20642,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_FalseState,20643,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge,20644,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments,20645,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm,20646,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments,20647,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState,20648,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Id,20649,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Name,20650,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Number,20651,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_EffectiveDisplayName,20652,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_TransitionTime,20653,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,20654,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_TrueState,20655,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_FalseState,20656,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_InputNode,20657,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState,20658,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id,20659,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Name,20660,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Number,20661,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,20662,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_TransitionTime,20663,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,20664,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_TrueState,20665,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_FalseState,20666,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState,20667,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id,20668,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Name,20669,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Number,20670,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,20671,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_TransitionTime,20672,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,20673,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_TrueState,20674,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_FalseState,20675,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState,20676,Object +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState,20677,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id,20678,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Name,20679,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Number,20680,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,20681,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition,20682,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id,20683,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Name,20684,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Number,20685,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,20686,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,20687,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_AvailableStates,20688,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_AvailableTransitions,20689,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime,20690,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve,20691,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,20692,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve,20693,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve,20694,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved,20695,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_MaxTimeShelved,20696,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AudibleEnabled,20697,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AudibleSound,20698,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AudibleSound_ListId,20699,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AudibleSound_AgencyId,20700,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AudibleSound_VersionId,20701,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState,20702,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Id,20703,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Name,20704,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Number,20705,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_EffectiveDisplayName,20706,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_TransitionTime,20707,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,20708,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_TrueState,20709,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_FalseState,20710,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OnDelay,20711,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OffDelay,20712,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_FirstInGroupFlag,20713,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_FirstInGroup,20714,Object +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState,20715,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Id,20716,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Name,20717,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Number,20718,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_EffectiveDisplayName,20719,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_TransitionTime,20720,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,20721,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_TrueState,20722,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_FalseState,20723,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReAlarmTime,20724,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReAlarmRepeatCount,20725,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Silence,20726,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Suppress,20727,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Unsuppress,20728,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_RemoveFromService,20729,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_PlaceInService,20730,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Reset,20731,Method +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_NormalState,20732,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationDate,20733,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationLimit,20734,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_CertificateType,20735,Variable +CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Certificate,20736,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate,20737,Object +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventId,20738,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventType,20739,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceNode,20740,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceName,20741,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Time,20742,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime,20743,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LocalTime,20744,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Message,20745,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Severity,20746,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId,20747,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName,20748,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionSubClassId,20749,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionSubClassName,20750,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionName,20751,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_BranchId,20752,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Retain,20753,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState,20754,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id,20755,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Name,20756,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Number,20757,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,20758,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_TransitionTime,20759,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,20760,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_TrueState,20761,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_FalseState,20762,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality,20763,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp,20764,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity,20765,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,20766,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment,20767,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp,20768,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId,20769,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Disable,20770,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Enable,20771,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment,20772,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments,20773,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState,20774,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id,20775,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Name,20776,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Number,20777,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,20778,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_TransitionTime,20779,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,20780,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_TrueState,20781,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_FalseState,20782,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState,20783,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id,20784,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Name,20785,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Number,20786,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,20787,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,20788,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,20789,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_TrueState,20790,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_FalseState,20791,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge,20792,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments,20793,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm,20794,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments,20795,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState,20796,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id,20797,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Name,20798,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Number,20799,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,20800,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_TransitionTime,20801,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,20802,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_TrueState,20803,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_FalseState,20804,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_InputNode,20805,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState,20806,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id,20807,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Name,20808,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Number,20809,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,20810,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_TransitionTime,20811,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,20812,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_TrueState,20813,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_FalseState,20814,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState,20815,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id,20816,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Name,20817,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Number,20818,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,20819,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,20820,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,20821,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_TrueState,20822,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_FalseState,20823,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState,20824,Object +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState,20825,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,20826,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,20827,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,20828,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,20829,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition,20830,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,20831,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,20832,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,20833,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,20834,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,20835,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_AvailableStates,20836,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,20837,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,20838,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve,20839,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,20840,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve,20841,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,20842,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved,20843,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_MaxTimeShelved,20844,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AudibleEnabled,20845,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound,20846,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_ListId,20847,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_AgencyId,20848,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_VersionId,20849,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState,20850,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id,20851,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Name,20852,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Number,20853,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,20854,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_TransitionTime,20855,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,20856,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_TrueState,20857,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_FalseState,20858,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OnDelay,20859,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OffDelay,20860,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_FirstInGroupFlag,20861,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_FirstInGroup,20862,Object +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState,20863,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id,20864,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Name,20865,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Number,20866,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,20867,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_TransitionTime,20868,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,20869,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_TrueState,20870,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_FalseState,20871,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReAlarmTime,20872,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReAlarmRepeatCount,20873,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Silence,20874,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Suppress,20875,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Unsuppress,20876,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_RemoveFromService,20877,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_PlaceInService,20878,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Reset,20879,Method +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_NormalState,20880,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_TrustListId,20881,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime,20882,Variable +CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency,20883,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UpdateFrequency,20884,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired,20885,Object +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventId,20886,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventType,20887,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceNode,20888,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceName,20889,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Time,20890,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReceiveTime,20891,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LocalTime,20892,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Message,20893,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Severity,20894,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassId,20895,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassName,20896,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionSubClassId,20897,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionSubClassName,20898,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionName,20899,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_BranchId,20900,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Retain,20901,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState,20902,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id,20903,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Name,20904,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Number,20905,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_EffectiveDisplayName,20906,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_TransitionTime,20907,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,20908,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_TrueState,20909,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_FalseState,20910,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality,20911,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp,20912,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity,20913,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp,20914,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment,20915,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp,20916,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ClientUserId,20917,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Disable,20918,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Enable,20919,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment,20920,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments,20921,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState,20922,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Id,20923,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Name,20924,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Number,20925,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_EffectiveDisplayName,20926,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_TransitionTime,20927,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_EffectiveTransitionTime,20928,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_TrueState,20929,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_FalseState,20930,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState,20931,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id,20932,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Name,20933,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Number,20934,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,20935,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_TransitionTime,20936,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,20937,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_TrueState,20938,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_FalseState,20939,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge,20940,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments,20941,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm,20942,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments,20943,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState,20944,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id,20945,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Name,20946,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Number,20947,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_EffectiveDisplayName,20948,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_TransitionTime,20949,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,20950,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_TrueState,20951,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_FalseState,20952,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_InputNode,20953,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState,20954,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id,20955,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Name,20956,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Number,20957,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,20958,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_TransitionTime,20959,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,20960,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_TrueState,20961,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_FalseState,20962,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState,20963,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id,20964,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Name,20965,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Number,20966,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,20967,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_TransitionTime,20968,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,20969,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_TrueState,20970,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_FalseState,20971,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState,20972,Object +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState,20973,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id,20974,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Name,20975,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Number,20976,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,20977,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition,20978,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id,20979,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Name,20980,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Number,20981,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,20982,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,20983,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_AvailableStates,20984,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_AvailableTransitions,20985,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime,20986,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve,20987,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,20988,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve,20989,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve,20990,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved,20991,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_MaxTimeShelved,20992,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AudibleEnabled,20993,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AudibleSound,20994,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AudibleSound_ListId,20995,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AudibleSound_AgencyId,20996,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AudibleSound_VersionId,20997,Variable +VersionTime,20998,DataType +SessionlessInvokeResponseType,20999,DataType +SessionlessInvokeResponseType_Encoding_DefaultXml,21000,Object +SessionlessInvokeResponseType_Encoding_DefaultBinary,21001,Object +OpcUa_BinarySchema_FieldTargetDataType,21002,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,21003,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID,21004,Variable +ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,21005,Variable +ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet,21006,Object +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState,21007,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id,21008,Variable +ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables,21009,Method +ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments,21010,Variable +ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments,21011,Variable +ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror,21012,Method +ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments,21013,Variable +ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments,21014,Variable +ReaderGroupType_Diagnostics,21015,Object +ReaderGroupType_Diagnostics_DiagnosticsLevel,21016,Variable +ReaderGroupType_Diagnostics_TotalInformation,21017,Variable +ReaderGroupType_Diagnostics_TotalInformation_Active,21018,Variable +ReaderGroupType_Diagnostics_TotalInformation_Classification,21019,Variable +ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel,21020,Variable +ReaderGroupType_Diagnostics_TotalInformation_TimeFirstChange,21021,Variable +ReaderGroupType_Diagnostics_TotalError,21022,Variable +ReaderGroupType_Diagnostics_TotalError_Active,21023,Variable +ReaderGroupType_Diagnostics_TotalError_Classification,21024,Variable +ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel,21025,Variable +ReaderGroupType_Diagnostics_TotalError_TimeFirstChange,21026,Variable +ReaderGroupType_Diagnostics_Reset,21027,Method +ReaderGroupType_Diagnostics_SubError,21028,Variable +ReaderGroupType_Diagnostics_Counters,21029,Object +ReaderGroupType_Diagnostics_Counters_StateError,21030,Variable +ReaderGroupType_Diagnostics_Counters_StateError_Active,21031,Variable +ReaderGroupType_Diagnostics_Counters_StateError_Classification,21032,Variable +ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel,21033,Variable +ReaderGroupType_Diagnostics_Counters_StateError_TimeFirstChange,21034,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod,21035,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active,21036,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification,21037,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,21038,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,21039,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByParent,21040,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active,21041,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification,21042,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,21043,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,21044,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalFromError,21045,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active,21046,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification,21047,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,21048,Variable +ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,21049,Variable +ReaderGroupType_Diagnostics_Counters_StatePausedByParent,21050,Variable +ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active,21051,Variable +ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification,21052,Variable +ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,21053,Variable +ReaderGroupType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,21054,Variable +ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod,21055,Variable +ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active,21056,Variable +ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification,21057,Variable +ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,21058,Variable +ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,21059,Variable +ReaderGroupType_Diagnostics_LiveValues,21060,Object +ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages,21061,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active,21062,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification,21063,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel,21064,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_TimeFirstChange,21065,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages,21066,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active,21067,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification,21068,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel,21069,Variable +ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_TimeFirstChange,21070,Variable +ReaderGroupType_Diagnostics_Counters_DecryptionErrors,21071,Variable +ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active,21072,Variable +ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification,21073,Variable +ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,21074,Variable +ReaderGroupType_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,21075,Variable +ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders,21076,Variable +ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,21077,Variable +ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders,21078,Variable +ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,21079,Variable +ReaderGroupType_TransportSettings,21080,Object +ReaderGroupType_MessageSettings,21081,Object +ReaderGroupType_AddDataSetReader,21082,Method +ReaderGroupType_AddDataSetReader_InputArguments,21083,Variable +ReaderGroupType_AddDataSetReader_OutputArguments,21084,Variable +ReaderGroupType_RemoveDataSetReader,21085,Method +ReaderGroupType_RemoveDataSetReader_InputArguments,21086,Variable +PubSubGroupTypeAddReaderMethodType,21087,Method +PubSubGroupTypeAddReaderMethodType_InputArguments,21088,Variable +PubSubGroupTypeAddReaderMethodType_OutputArguments,21089,Variable +ReaderGroupTransportType,21090,ObjectType +ReaderGroupMessageType,21091,ObjectType +DataSetWriterType_DataSetWriterId,21092,Variable +DataSetWriterType_DataSetFieldContentMask,21093,Variable +DataSetWriterType_KeyFrameCount,21094,Variable +DataSetWriterType_MessageSettings,21095,Object +DataSetWriterMessageType,21096,ObjectType +DataSetReaderType_PublisherId,21097,Variable +DataSetReaderType_WriterGroupId,21098,Variable +DataSetReaderType_DataSetWriterId,21099,Variable +DataSetReaderType_DataSetMetaData,21100,Variable +DataSetReaderType_DataSetFieldContentMask,21101,Variable +DataSetReaderType_MessageReceiveTimeout,21102,Variable +DataSetReaderType_MessageSettings,21103,Object +DataSetReaderMessageType,21104,ObjectType +UadpWriterGroupMessageType,21105,ObjectType +UadpWriterGroupMessageType_GroupVersion,21106,Variable +UadpWriterGroupMessageType_DataSetOrdering,21107,Variable +UadpWriterGroupMessageType_NetworkMessageContentMask,21108,Variable +UadpWriterGroupMessageType_SamplingOffset,21109,Variable +UadpWriterGroupMessageType_PublishingOffset,21110,Variable +UadpDataSetWriterMessageType,21111,ObjectType +UadpDataSetWriterMessageType_DataSetMessageContentMask,21112,Variable +UadpDataSetWriterMessageType_ConfiguredSize,21113,Variable +UadpDataSetWriterMessageType_NetworkMessageNumber,21114,Variable +UadpDataSetWriterMessageType_DataSetOffset,21115,Variable +UadpDataSetReaderMessageType,21116,ObjectType +UadpDataSetReaderMessageType_GroupVersion,21117,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Name,21118,Variable +UadpDataSetReaderMessageType_NetworkMessageNumber,21119,Variable +UadpDataSetReaderMessageType_DataSetClassId,21120,Variable +UadpDataSetReaderMessageType_NetworkMessageContentMask,21121,Variable +UadpDataSetReaderMessageType_DataSetMessageContentMask,21122,Variable +UadpDataSetReaderMessageType_PublishingInterval,21123,Variable +UadpDataSetReaderMessageType_ProcessingOffset,21124,Variable +UadpDataSetReaderMessageType_ReceiveOffset,21125,Variable +JsonWriterGroupMessageType,21126,ObjectType +JsonWriterGroupMessageType_NetworkMessageContentMask,21127,Variable +JsonDataSetWriterMessageType,21128,ObjectType +JsonDataSetWriterMessageType_DataSetMessageContentMask,21129,Variable +JsonDataSetReaderMessageType,21130,ObjectType +JsonDataSetReaderMessageType_NetworkMessageContentMask,21131,Variable +JsonDataSetReaderMessageType_DataSetMessageContentMask,21132,Variable +DatagramWriterGroupTransportType,21133,ObjectType +DatagramWriterGroupTransportType_MessageRepeatCount,21134,Variable +DatagramWriterGroupTransportType_MessageRepeatDelay,21135,Variable +BrokerWriterGroupTransportType,21136,ObjectType +BrokerWriterGroupTransportType_QueueName,21137,Variable +BrokerDataSetWriterTransportType,21138,ObjectType +BrokerDataSetWriterTransportType_QueueName,21139,Variable +BrokerDataSetWriterTransportType_MetaDataQueueName,21140,Variable +BrokerDataSetWriterTransportType_MetaDataUpdateTime,21141,Variable +BrokerDataSetReaderTransportType,21142,ObjectType +BrokerDataSetReaderTransportType_QueueName,21143,Variable +BrokerDataSetReaderTransportType_MetaDataQueueName,21144,Variable +NetworkAddressType,21145,ObjectType +NetworkAddressType_NetworkInterface,21146,Variable +NetworkAddressUrlType,21147,ObjectType +NetworkAddressUrlType_NetworkInterface,21148,Variable +NetworkAddressUrlType_Url,21149,Variable +WriterGroupDataType_Encoding_DefaultBinary,21150,Object +NetworkAddressDataType_Encoding_DefaultBinary,21151,Object +NetworkAddressUrlDataType_Encoding_DefaultBinary,21152,Object +ReaderGroupDataType_Encoding_DefaultBinary,21153,Object +PubSubConfigurationDataType_Encoding_DefaultBinary,21154,Object +DatagramWriterGroupTransportDataType_Encoding_DefaultBinary,21155,Object +OpcUa_BinarySchema_WriterGroupDataType,21156,Variable +OpcUa_BinarySchema_WriterGroupDataType_DataTypeVersion,21157,Variable +OpcUa_BinarySchema_WriterGroupDataType_DictionaryFragment,21158,Variable +OpcUa_BinarySchema_NetworkAddressDataType,21159,Variable +OpcUa_BinarySchema_NetworkAddressDataType_DataTypeVersion,21160,Variable +OpcUa_BinarySchema_NetworkAddressDataType_DictionaryFragment,21161,Variable +OpcUa_BinarySchema_NetworkAddressUrlDataType,21162,Variable +OpcUa_BinarySchema_NetworkAddressUrlDataType_DataTypeVersion,21163,Variable +OpcUa_BinarySchema_NetworkAddressUrlDataType_DictionaryFragment,21164,Variable +OpcUa_BinarySchema_ReaderGroupDataType,21165,Variable +OpcUa_BinarySchema_ReaderGroupDataType_DataTypeVersion,21166,Variable +OpcUa_BinarySchema_ReaderGroupDataType_DictionaryFragment,21167,Variable +OpcUa_BinarySchema_PubSubConfigurationDataType,21168,Variable +OpcUa_BinarySchema_PubSubConfigurationDataType_DataTypeVersion,21169,Variable +OpcUa_BinarySchema_PubSubConfigurationDataType_DictionaryFragment,21170,Variable +OpcUa_BinarySchema_DatagramWriterGroupTransportDataType,21171,Variable +OpcUa_BinarySchema_DatagramWriterGroupTransportDataType_DataTypeVersion,21172,Variable +OpcUa_BinarySchema_DatagramWriterGroupTransportDataType_DictionaryFragment,21173,Variable +WriterGroupDataType_Encoding_DefaultXml,21174,Object +NetworkAddressDataType_Encoding_DefaultXml,21175,Object +NetworkAddressUrlDataType_Encoding_DefaultXml,21176,Object +ReaderGroupDataType_Encoding_DefaultXml,21177,Object +PubSubConfigurationDataType_Encoding_DefaultXml,21178,Object +DatagramWriterGroupTransportDataType_Encoding_DefaultXml,21179,Object +OpcUa_XmlSchema_WriterGroupDataType,21180,Variable +OpcUa_XmlSchema_WriterGroupDataType_DataTypeVersion,21181,Variable +OpcUa_XmlSchema_WriterGroupDataType_DictionaryFragment,21182,Variable +OpcUa_XmlSchema_NetworkAddressDataType,21183,Variable +OpcUa_XmlSchema_NetworkAddressDataType_DataTypeVersion,21184,Variable +OpcUa_XmlSchema_NetworkAddressDataType_DictionaryFragment,21185,Variable +OpcUa_XmlSchema_NetworkAddressUrlDataType,21186,Variable +OpcUa_XmlSchema_NetworkAddressUrlDataType_DataTypeVersion,21187,Variable +OpcUa_XmlSchema_NetworkAddressUrlDataType_DictionaryFragment,21188,Variable +OpcUa_XmlSchema_ReaderGroupDataType,21189,Variable +OpcUa_XmlSchema_ReaderGroupDataType_DataTypeVersion,21190,Variable +OpcUa_XmlSchema_ReaderGroupDataType_DictionaryFragment,21191,Variable +OpcUa_XmlSchema_PubSubConfigurationDataType,21192,Variable +OpcUa_XmlSchema_PubSubConfigurationDataType_DataTypeVersion,21193,Variable +OpcUa_XmlSchema_PubSubConfigurationDataType_DictionaryFragment,21194,Variable +OpcUa_XmlSchema_DatagramWriterGroupTransportDataType,21195,Variable +OpcUa_XmlSchema_DatagramWriterGroupTransportDataType_DataTypeVersion,21196,Variable +OpcUa_XmlSchema_DatagramWriterGroupTransportDataType_DictionaryFragment,21197,Variable +WriterGroupDataType_Encoding_DefaultJson,21198,Object +NetworkAddressDataType_Encoding_DefaultJson,21199,Object +NetworkAddressUrlDataType_Encoding_DefaultJson,21200,Object +ReaderGroupDataType_Encoding_DefaultJson,21201,Object +PubSubConfigurationDataType_Encoding_DefaultJson,21202,Object +DatagramWriterGroupTransportDataType_Encoding_DefaultJson,21203,Object +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Number,21204,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_EffectiveDisplayName,21205,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_TransitionTime,21206,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,21207,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_TrueState,21208,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_FalseState,21209,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OnDelay,21210,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OffDelay,21211,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_FirstInGroupFlag,21212,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_FirstInGroup,21213,Object +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState,21214,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id,21215,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Name,21216,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Number,21217,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_EffectiveDisplayName,21218,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_TransitionTime,21219,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,21220,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_TrueState,21221,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_FalseState,21222,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReAlarmTime,21223,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReAlarmRepeatCount,21224,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Silence,21225,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Suppress,21226,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Unsuppress,21227,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_RemoveFromService,21228,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_PlaceInService,21229,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Reset,21230,Method +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_NormalState,21231,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationDate,21232,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationLimit,21233,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_CertificateType,21234,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Certificate,21235,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate,21236,Object +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventId,21237,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventType,21238,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode,21239,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceName,21240,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Time,21241,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime,21242,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LocalTime,21243,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Message,21244,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Severity,21245,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId,21246,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName,21247,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionSubClassId,21248,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionSubClassName,21249,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName,21250,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_BranchId,21251,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Retain,21252,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState,21253,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id,21254,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Name,21255,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Number,21256,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,21257,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_TransitionTime,21258,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,21259,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_TrueState,21260,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_FalseState,21261,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality,21262,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp,21263,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity,21264,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,21265,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment,21266,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp,21267,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId,21268,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Disable,21269,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Enable,21270,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment,21271,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments,21272,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState,21273,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id,21274,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Name,21275,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Number,21276,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,21277,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_TransitionTime,21278,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,21279,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_TrueState,21280,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_FalseState,21281,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState,21282,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id,21283,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Name,21284,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Number,21285,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,21286,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,21287,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,21288,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_TrueState,21289,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_FalseState,21290,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge,21291,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments,21292,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm,21293,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments,21294,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState,21295,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id,21296,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Name,21297,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Number,21298,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,21299,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_TransitionTime,21300,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,21301,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_TrueState,21302,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_FalseState,21303,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_InputNode,21304,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState,21305,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id,21306,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Name,21307,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Number,21308,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,21309,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_TransitionTime,21310,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,21311,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_TrueState,21312,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_FalseState,21313,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState,21314,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id,21315,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Name,21316,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Number,21317,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,21318,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,21319,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,21320,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_TrueState,21321,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_FalseState,21322,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState,21323,Object +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState,21324,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,21325,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,21326,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,21327,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,21328,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition,21329,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,21330,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,21331,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,21332,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,21333,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,21334,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_AvailableStates,21335,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,21336,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,21337,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve,21338,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,21339,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve,21340,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,21341,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved,21342,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_MaxTimeShelved,21343,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AudibleEnabled,21344,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound,21345,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_ListId,21346,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_AgencyId,21347,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_VersionId,21348,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState,21349,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id,21350,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Name,21351,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Number,21352,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,21353,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_TransitionTime,21354,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,21355,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_TrueState,21356,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_FalseState,21357,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OnDelay,21358,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OffDelay,21359,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_FirstInGroupFlag,21360,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_FirstInGroup,21361,Object +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState,21362,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id,21363,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Name,21364,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Number,21365,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,21366,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_TransitionTime,21367,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,21368,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_TrueState,21369,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_FalseState,21370,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReAlarmTime,21371,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReAlarmRepeatCount,21372,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Silence,21373,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Suppress,21374,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Unsuppress,21375,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_RemoveFromService,21376,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_PlaceInService,21377,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Reset,21378,Method +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_NormalState,21379,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId,21380,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime,21381,Variable +CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency,21382,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UpdateFrequency,21383,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired,21384,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventId,21385,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventType,21386,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceNode,21387,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceName,21388,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Time,21389,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReceiveTime,21390,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LocalTime,21391,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Message,21392,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Severity,21393,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassId,21394,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassName,21395,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionSubClassId,21396,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionSubClassName,21397,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionName,21398,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_BranchId,21399,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Retain,21400,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState,21401,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Id,21402,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Name,21403,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Number,21404,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_EffectiveDisplayName,21405,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_TransitionTime,21406,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_EffectiveTransitionTime,21407,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_TrueState,21408,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_FalseState,21409,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality,21410,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality_SourceTimestamp,21411,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity,21412,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity_SourceTimestamp,21413,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment,21414,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment_SourceTimestamp,21415,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ClientUserId,21416,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Disable,21417,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Enable,21418,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment,21419,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment_InputArguments,21420,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState,21421,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Id,21422,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Name,21423,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Number,21424,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_EffectiveDisplayName,21425,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_TransitionTime,21426,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_EffectiveTransitionTime,21427,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_TrueState,21428,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_FalseState,21429,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState,21430,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Id,21431,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Name,21432,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Number,21433,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_EffectiveDisplayName,21434,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_TransitionTime,21435,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_EffectiveTransitionTime,21436,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_TrueState,21437,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_FalseState,21438,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge,21439,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge_InputArguments,21440,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm,21441,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm_InputArguments,21442,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState,21443,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Id,21444,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Name,21445,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Number,21446,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_EffectiveDisplayName,21447,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_TransitionTime,21448,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_EffectiveTransitionTime,21449,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_TrueState,21450,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_FalseState,21451,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_InputNode,21452,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState,21453,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Id,21454,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Name,21455,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Number,21456,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_EffectiveDisplayName,21457,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_TransitionTime,21458,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_EffectiveTransitionTime,21459,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_TrueState,21460,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_FalseState,21461,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState,21462,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Id,21463,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Name,21464,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Number,21465,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_EffectiveDisplayName,21466,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_TransitionTime,21467,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,21468,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_TrueState,21469,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_FalseState,21470,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState,21471,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState,21472,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Id,21473,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Name,21474,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Number,21475,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,21476,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition,21477,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Id,21478,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Name,21479,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Number,21480,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_TransitionTime,21481,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,21482,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_AvailableStates,21483,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_AvailableTransitions,21484,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_UnshelveTime,21485,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve,21486,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve_InputArguments,21487,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_Unshelve,21488,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_OneShotShelve,21489,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedOrShelved,21490,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_MaxTimeShelved,21491,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AudibleEnabled,21492,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AudibleSound,21493,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AudibleSound_ListId,21494,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AudibleSound_AgencyId,21495,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AudibleSound_VersionId,21496,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState,21497,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Id,21498,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Name,21499,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Number,21500,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_EffectiveDisplayName,21501,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_TransitionTime,21502,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_EffectiveTransitionTime,21503,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_TrueState,21504,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_FalseState,21505,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OnDelay,21506,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OffDelay,21507,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_FirstInGroupFlag,21508,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_FirstInGroup,21509,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState,21510,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Id,21511,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Name,21512,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Number,21513,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_EffectiveDisplayName,21514,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_TransitionTime,21515,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_EffectiveTransitionTime,21516,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_TrueState,21517,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_FalseState,21518,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReAlarmTime,21519,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReAlarmRepeatCount,21520,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Silence,21521,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Suppress,21522,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Unsuppress,21523,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_RemoveFromService,21524,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_PlaceInService,21525,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Reset,21526,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_NormalState,21527,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationDate,21528,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationLimit,21529,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_CertificateType,21530,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Certificate,21531,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate,21532,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventId,21533,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventType,21534,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceNode,21535,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceName,21536,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Time,21537,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReceiveTime,21538,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LocalTime,21539,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Message,21540,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Severity,21541,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassId,21542,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassName,21543,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionSubClassId,21544,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionSubClassName,21545,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionName,21546,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_BranchId,21547,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Retain,21548,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState,21549,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Id,21550,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Name,21551,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Number,21552,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_EffectiveDisplayName,21553,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_TransitionTime,21554,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,21555,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_TrueState,21556,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_FalseState,21557,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality,21558,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality_SourceTimestamp,21559,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity,21560,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity_SourceTimestamp,21561,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment,21562,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment_SourceTimestamp,21563,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ClientUserId,21564,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Disable,21565,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Enable,21566,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment,21567,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment_InputArguments,21568,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState,21569,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Id,21570,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Name,21571,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Number,21572,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_EffectiveDisplayName,21573,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_TransitionTime,21574,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_EffectiveTransitionTime,21575,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_TrueState,21576,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_FalseState,21577,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState,21578,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Id,21579,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Name,21580,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Number,21581,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,21582,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_TransitionTime,21583,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,21584,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_TrueState,21585,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_FalseState,21586,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge,21587,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge_InputArguments,21588,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm,21589,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm_InputArguments,21590,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState,21591,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Id,21592,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Name,21593,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Number,21594,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_EffectiveDisplayName,21595,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_TransitionTime,21596,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,21597,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_TrueState,21598,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_FalseState,21599,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_InputNode,21600,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState,21601,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Id,21602,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Name,21603,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Number,21604,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,21605,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_TransitionTime,21606,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,21607,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_TrueState,21608,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_FalseState,21609,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState,21610,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Id,21611,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Name,21612,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Number,21613,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,21614,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_TransitionTime,21615,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,21616,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_TrueState,21617,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_FalseState,21618,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState,21619,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState,21620,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Id,21621,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Name,21622,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Number,21623,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,21624,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition,21625,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Id,21626,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Name,21627,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Number,21628,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,21629,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,21630,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_AvailableStates,21631,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_AvailableTransitions,21632,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_UnshelveTime,21633,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve,21634,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,21635,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_Unshelve,21636,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_OneShotShelve,21637,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedOrShelved,21638,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_MaxTimeShelved,21639,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AudibleEnabled,21640,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AudibleSound,21641,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AudibleSound_ListId,21642,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AudibleSound_AgencyId,21643,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AudibleSound_VersionId,21644,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState,21645,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Id,21646,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Name,21647,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Number,21648,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_EffectiveDisplayName,21649,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_TransitionTime,21650,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,21651,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_TrueState,21652,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_FalseState,21653,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OnDelay,21654,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OffDelay,21655,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_FirstInGroupFlag,21656,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_FirstInGroup,21657,Object +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState,21658,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Id,21659,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Name,21660,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Number,21661,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_EffectiveDisplayName,21662,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_TransitionTime,21663,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,21664,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_TrueState,21665,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_FalseState,21666,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReAlarmTime,21667,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReAlarmRepeatCount,21668,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Silence,21669,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Suppress,21670,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Unsuppress,21671,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_RemoveFromService,21672,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_PlaceInService,21673,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Reset,21674,Method +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_NormalState,21675,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_TrustListId,21676,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastUpdateTime,21677,Variable +CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_UpdateFrequency,21678,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UpdateFrequency,21679,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired,21680,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId,21681,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType,21682,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode,21683,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName,21684,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time,21685,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime,21686,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LocalTime,21687,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message,21688,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity,21689,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId,21690,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName,21691,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionSubClassId,21692,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionSubClassName,21693,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName,21694,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId,21695,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain,21696,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState,21697,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id,21698,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Name,21699,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Number,21700,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_EffectiveDisplayName,21701,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_TransitionTime,21702,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,21703,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_TrueState,21704,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_FalseState,21705,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality,21706,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp,21707,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity,21708,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp,21709,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment,21710,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp,21711,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId,21712,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable,21713,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable,21714,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment,21715,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments,21716,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState,21717,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id,21718,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Name,21719,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Number,21720,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_EffectiveDisplayName,21721,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_TransitionTime,21722,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_EffectiveTransitionTime,21723,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_TrueState,21724,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_FalseState,21725,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState,21726,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id,21727,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Name,21728,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Number,21729,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,21730,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_TransitionTime,21731,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,21732,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_TrueState,21733,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_FalseState,21734,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge,21735,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments,21736,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm,21737,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments,21738,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState,21739,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id,21740,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Name,21741,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Number,21742,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_EffectiveDisplayName,21743,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_TransitionTime,21744,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,21745,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_TrueState,21746,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_FalseState,21747,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode,21748,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState,21749,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id,21750,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Name,21751,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Number,21752,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,21753,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_TransitionTime,21754,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,21755,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_TrueState,21756,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_FalseState,21757,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState,21758,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id,21759,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Name,21760,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Number,21761,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,21762,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_TransitionTime,21763,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,21764,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_TrueState,21765,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_FalseState,21766,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState,21767,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState,21768,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id,21769,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Name,21770,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Number,21771,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,21772,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition,21773,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id,21774,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Name,21775,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Number,21776,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,21777,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,21778,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_AvailableStates,21779,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_AvailableTransitions,21780,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime,21781,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve,21782,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,21783,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve,21784,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve,21785,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved,21786,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_MaxTimeShelved,21787,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleEnabled,21788,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound,21789,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound_ListId,21790,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound_AgencyId,21791,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound_VersionId,21792,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState,21793,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id,21794,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Name,21795,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Number,21796,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_EffectiveDisplayName,21797,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_TransitionTime,21798,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,21799,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_TrueState,21800,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_FalseState,21801,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OnDelay,21802,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OffDelay,21803,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_FirstInGroupFlag,21804,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_FirstInGroup,21805,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState,21806,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id,21807,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Name,21808,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Number,21809,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_EffectiveDisplayName,21810,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_TransitionTime,21811,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,21812,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_TrueState,21813,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_FalseState,21814,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReAlarmTime,21815,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReAlarmRepeatCount,21816,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Silence,21817,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Suppress,21818,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Unsuppress,21819,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_RemoveFromService,21820,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_PlaceInService,21821,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Reset,21822,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState,21823,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate,21824,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationLimit,21825,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType,21826,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate,21827,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate,21828,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId,21829,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType,21830,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode,21831,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName,21832,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time,21833,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime,21834,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LocalTime,21835,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message,21836,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity,21837,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId,21838,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName,21839,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionSubClassId,21840,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionSubClassName,21841,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName,21842,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId,21843,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain,21844,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState,21845,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id,21846,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Name,21847,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Number,21848,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,21849,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_TransitionTime,21850,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,21851,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_TrueState,21852,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_FalseState,21853,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality,21854,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp,21855,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity,21856,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,21857,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment,21858,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp,21859,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId,21860,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable,21861,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable,21862,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment,21863,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments,21864,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState,21865,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id,21866,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Name,21867,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Number,21868,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,21869,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_TransitionTime,21870,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,21871,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_TrueState,21872,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_FalseState,21873,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState,21874,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id,21875,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Name,21876,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Number,21877,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,21878,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,21879,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,21880,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_TrueState,21881,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_FalseState,21882,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge,21883,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments,21884,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm,21885,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments,21886,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState,21887,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id,21888,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Name,21889,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Number,21890,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,21891,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_TransitionTime,21892,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,21893,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_TrueState,21894,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_FalseState,21895,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode,21896,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState,21897,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id,21898,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Name,21899,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Number,21900,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,21901,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_TransitionTime,21902,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,21903,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_TrueState,21904,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_FalseState,21905,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState,21906,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id,21907,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Name,21908,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Number,21909,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,21910,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,21911,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,21912,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_TrueState,21913,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_FalseState,21914,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState,21915,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState,21916,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,21917,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,21918,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,21919,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,21920,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition,21921,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,21922,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,21923,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,21924,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,21925,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,21926,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_AvailableStates,21927,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,21928,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,21929,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve,21930,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,21931,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve,21932,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,21933,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved,21934,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_MaxTimeShelved,21935,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleEnabled,21936,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound,21937,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_ListId,21938,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_AgencyId,21939,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_VersionId,21940,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState,21941,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id,21942,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Name,21943,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Number,21944,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,21945,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_TransitionTime,21946,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,21947,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_TrueState,21948,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_FalseState,21949,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OnDelay,21950,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OffDelay,21951,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_FirstInGroupFlag,21952,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_FirstInGroup,21953,Object +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState,21954,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id,21955,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Name,21956,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Number,21957,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,21958,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_TransitionTime,21959,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,21960,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_TrueState,21961,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_FalseState,21962,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReAlarmTime,21963,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReAlarmRepeatCount,21964,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Silence,21965,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Suppress,21966,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Unsuppress,21967,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_RemoveFromService,21968,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_PlaceInService,21969,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Reset,21970,Method +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState,21971,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId,21972,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime,21973,Variable +ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency,21974,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UpdateFrequency,21975,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired,21976,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId,21977,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType,21978,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode,21979,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName,21980,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time,21981,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime,21982,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LocalTime,21983,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message,21984,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity,21985,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId,21986,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName,21987,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionSubClassId,21988,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionSubClassName,21989,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName,21990,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId,21991,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain,21992,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState,21993,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id,21994,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Name,21995,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Number,21996,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_EffectiveDisplayName,21997,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_TransitionTime,21998,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,21999,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_TrueState,22000,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_FalseState,22001,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality,22002,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp,22003,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity,22004,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp,22005,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment,22006,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp,22007,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId,22008,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable,22009,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable,22010,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment,22011,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments,22012,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState,22013,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id,22014,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Name,22015,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Number,22016,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_EffectiveDisplayName,22017,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_TransitionTime,22018,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_EffectiveTransitionTime,22019,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_TrueState,22020,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_FalseState,22021,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState,22022,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id,22023,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Name,22024,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Number,22025,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,22026,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_TransitionTime,22027,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,22028,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_TrueState,22029,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_FalseState,22030,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge,22031,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments,22032,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm,22033,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments,22034,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState,22035,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id,22036,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Name,22037,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Number,22038,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_EffectiveDisplayName,22039,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_TransitionTime,22040,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,22041,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_TrueState,22042,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_FalseState,22043,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode,22044,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState,22045,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id,22046,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Name,22047,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Number,22048,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,22049,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_TransitionTime,22050,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,22051,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_TrueState,22052,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_FalseState,22053,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState,22054,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id,22055,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Name,22056,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Number,22057,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,22058,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_TransitionTime,22059,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,22060,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_TrueState,22061,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_FalseState,22062,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState,22063,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState,22064,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id,22065,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Name,22066,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Number,22067,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,22068,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition,22069,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id,22070,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Name,22071,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Number,22072,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,22073,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,22074,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_AvailableStates,22075,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_AvailableTransitions,22076,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime,22077,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve,22078,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,22079,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve,22080,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve,22081,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved,22082,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_MaxTimeShelved,22083,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleEnabled,22084,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound,22085,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound_ListId,22086,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound_AgencyId,22087,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound_VersionId,22088,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState,22089,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id,22090,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Name,22091,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Number,22092,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_EffectiveDisplayName,22093,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_TransitionTime,22094,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,22095,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_TrueState,22096,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_FalseState,22097,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OnDelay,22098,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OffDelay,22099,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_FirstInGroupFlag,22100,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_FirstInGroup,22101,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState,22102,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id,22103,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Name,22104,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Number,22105,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_EffectiveDisplayName,22106,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_TransitionTime,22107,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,22108,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_TrueState,22109,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_FalseState,22110,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReAlarmTime,22111,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReAlarmRepeatCount,22112,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Silence,22113,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Suppress,22114,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Unsuppress,22115,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_RemoveFromService,22116,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_PlaceInService,22117,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Reset,22118,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState,22119,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate,22120,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationLimit,22121,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType,22122,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate,22123,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate,22124,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId,22125,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType,22126,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode,22127,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName,22128,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time,22129,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime,22130,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LocalTime,22131,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message,22132,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity,22133,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId,22134,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName,22135,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionSubClassId,22136,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionSubClassName,22137,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName,22138,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId,22139,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain,22140,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState,22141,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id,22142,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Name,22143,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Number,22144,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,22145,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_TransitionTime,22146,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,22147,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_TrueState,22148,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_FalseState,22149,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality,22150,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp,22151,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity,22152,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,22153,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment,22154,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp,22155,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId,22156,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable,22157,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable,22158,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment,22159,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments,22160,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState,22161,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id,22162,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Name,22163,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Number,22164,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,22165,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_TransitionTime,22166,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,22167,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_TrueState,22168,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_FalseState,22169,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState,22170,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id,22171,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Name,22172,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Number,22173,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,22174,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,22175,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,22176,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_TrueState,22177,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_FalseState,22178,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge,22179,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments,22180,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm,22181,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments,22182,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState,22183,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id,22184,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Name,22185,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Number,22186,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,22187,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_TransitionTime,22188,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,22189,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_TrueState,22190,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_FalseState,22191,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode,22192,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState,22193,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id,22194,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Name,22195,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Number,22196,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,22197,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_TransitionTime,22198,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,22199,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_TrueState,22200,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_FalseState,22201,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState,22202,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id,22203,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Name,22204,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Number,22205,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,22206,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,22207,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,22208,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_TrueState,22209,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_FalseState,22210,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState,22211,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState,22212,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,22213,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,22214,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,22215,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,22216,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition,22217,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,22218,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,22219,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,22220,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,22221,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,22222,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_AvailableStates,22223,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,22224,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,22225,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve,22226,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,22227,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve,22228,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,22229,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved,22230,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_MaxTimeShelved,22231,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleEnabled,22232,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound,22233,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_ListId,22234,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_AgencyId,22235,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_VersionId,22236,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState,22237,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id,22238,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Name,22239,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Number,22240,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,22241,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_TransitionTime,22242,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,22243,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_TrueState,22244,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_FalseState,22245,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OnDelay,22246,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OffDelay,22247,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_FirstInGroupFlag,22248,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_FirstInGroup,22249,Object +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState,22250,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id,22251,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Name,22252,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Number,22253,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,22254,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_TransitionTime,22255,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,22256,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_TrueState,22257,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_FalseState,22258,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReAlarmTime,22259,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReAlarmRepeatCount,22260,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Silence,22261,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Suppress,22262,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Unsuppress,22263,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_RemoveFromService,22264,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_PlaceInService,22265,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Reset,22266,Method +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState,22267,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId,22268,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime,22269,Variable +ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency,22270,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UpdateFrequency,22271,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired,22272,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId,22273,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType,22274,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode,22275,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName,22276,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time,22277,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime,22278,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LocalTime,22279,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message,22280,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity,22281,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId,22282,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName,22283,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionSubClassId,22284,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionSubClassName,22285,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName,22286,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId,22287,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain,22288,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState,22289,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id,22290,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Name,22291,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Number,22292,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_EffectiveDisplayName,22293,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_TransitionTime,22294,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,22295,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_TrueState,22296,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_FalseState,22297,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality,22298,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp,22299,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity,22300,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp,22301,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment,22302,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp,22303,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId,22304,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable,22305,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable,22306,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment,22307,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments,22308,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState,22309,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id,22310,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Name,22311,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Number,22312,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_EffectiveDisplayName,22313,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_TransitionTime,22314,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_EffectiveTransitionTime,22315,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_TrueState,22316,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_FalseState,22317,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState,22318,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id,22319,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Name,22320,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Number,22321,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,22322,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_TransitionTime,22323,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,22324,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_TrueState,22325,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_FalseState,22326,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge,22327,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments,22328,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm,22329,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments,22330,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState,22331,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id,22332,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Name,22333,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Number,22334,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_EffectiveDisplayName,22335,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_TransitionTime,22336,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,22337,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_TrueState,22338,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_FalseState,22339,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode,22340,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState,22341,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id,22342,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Name,22343,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Number,22344,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,22345,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_TransitionTime,22346,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,22347,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_TrueState,22348,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_FalseState,22349,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState,22350,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id,22351,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Name,22352,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Number,22353,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,22354,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_TransitionTime,22355,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,22356,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_TrueState,22357,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_FalseState,22358,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState,22359,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState,22360,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id,22361,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Name,22362,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Number,22363,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,22364,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition,22365,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id,22366,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Name,22367,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Number,22368,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,22369,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,22370,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_AvailableStates,22371,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_AvailableTransitions,22372,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime,22373,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve,22374,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,22375,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve,22376,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve,22377,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved,22378,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_MaxTimeShelved,22379,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleEnabled,22380,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound,22381,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound_ListId,22382,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound_AgencyId,22383,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound_VersionId,22384,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState,22385,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id,22386,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Name,22387,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Number,22388,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_EffectiveDisplayName,22389,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_TransitionTime,22390,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,22391,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_TrueState,22392,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_FalseState,22393,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OnDelay,22394,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OffDelay,22395,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_FirstInGroupFlag,22396,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_FirstInGroup,22397,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState,22398,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id,22399,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Name,22400,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Number,22401,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_EffectiveDisplayName,22402,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_TransitionTime,22403,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,22404,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_TrueState,22405,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_FalseState,22406,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReAlarmTime,22407,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReAlarmRepeatCount,22408,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Silence,22409,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Suppress,22410,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Unsuppress,22411,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_RemoveFromService,22412,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_PlaceInService,22413,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Reset,22414,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState,22415,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate,22416,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationLimit,22417,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType,22418,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate,22419,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate,22420,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId,22421,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType,22422,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode,22423,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName,22424,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time,22425,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime,22426,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LocalTime,22427,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message,22428,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity,22429,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId,22430,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName,22431,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionSubClassId,22432,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionSubClassName,22433,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName,22434,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId,22435,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain,22436,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState,22437,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id,22438,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Name,22439,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Number,22440,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,22441,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_TransitionTime,22442,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,22443,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_TrueState,22444,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_FalseState,22445,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality,22446,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp,22447,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity,22448,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,22449,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment,22450,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp,22451,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId,22452,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable,22453,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable,22454,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment,22455,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments,22456,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState,22457,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id,22458,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Name,22459,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Number,22460,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,22461,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_TransitionTime,22462,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,22463,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_TrueState,22464,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_FalseState,22465,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState,22466,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id,22467,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Name,22468,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Number,22469,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,22470,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,22471,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,22472,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_TrueState,22473,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_FalseState,22474,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge,22475,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments,22476,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm,22477,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments,22478,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState,22479,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id,22480,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Name,22481,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Number,22482,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,22483,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_TransitionTime,22484,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,22485,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_TrueState,22486,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_FalseState,22487,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode,22488,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState,22489,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id,22490,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Name,22491,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Number,22492,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,22493,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_TransitionTime,22494,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,22495,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_TrueState,22496,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_FalseState,22497,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState,22498,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id,22499,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Name,22500,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Number,22501,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,22502,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,22503,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,22504,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_TrueState,22505,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_FalseState,22506,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState,22507,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState,22508,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,22509,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,22510,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,22511,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,22512,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition,22513,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,22514,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,22515,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,22516,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,22517,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,22518,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_AvailableStates,22519,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,22520,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,22521,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve,22522,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,22523,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve,22524,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,22525,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved,22526,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_MaxTimeShelved,22527,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleEnabled,22528,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound,22529,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_ListId,22530,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_AgencyId,22531,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_VersionId,22532,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState,22533,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id,22534,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Name,22535,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Number,22536,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,22537,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_TransitionTime,22538,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,22539,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_TrueState,22540,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_FalseState,22541,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OnDelay,22542,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OffDelay,22543,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_FirstInGroupFlag,22544,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_FirstInGroup,22545,Object +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState,22546,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id,22547,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Name,22548,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Number,22549,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,22550,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_TransitionTime,22551,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,22552,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_TrueState,22553,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_FalseState,22554,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReAlarmTime,22555,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReAlarmRepeatCount,22556,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Silence,22557,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Suppress,22558,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Unsuppress,22559,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_RemoveFromService,22560,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_PlaceInService,22561,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Reset,22562,Method +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState,22563,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId,22564,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime,22565,Variable +ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency,22566,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UpdateFrequency,22567,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired,22568,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId,22569,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType,22570,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode,22571,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName,22572,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time,22573,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime,22574,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LocalTime,22575,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message,22576,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity,22577,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId,22578,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName,22579,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionSubClassId,22580,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionSubClassName,22581,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName,22582,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId,22583,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain,22584,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState,22585,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id,22586,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Name,22587,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Number,22588,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_EffectiveDisplayName,22589,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_TransitionTime,22590,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,22591,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_TrueState,22592,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_FalseState,22593,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality,22594,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp,22595,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity,22596,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp,22597,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment,22598,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp,22599,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId,22600,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable,22601,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable,22602,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment,22603,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments,22604,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState,22605,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id,22606,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Name,22607,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Number,22608,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_EffectiveDisplayName,22609,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_TransitionTime,22610,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_EffectiveTransitionTime,22611,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_TrueState,22612,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_FalseState,22613,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState,22614,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id,22615,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Name,22616,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Number,22617,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,22618,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_TransitionTime,22619,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,22620,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_TrueState,22621,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_FalseState,22622,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge,22623,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments,22624,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm,22625,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments,22626,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState,22627,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id,22628,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Name,22629,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Number,22630,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_EffectiveDisplayName,22631,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_TransitionTime,22632,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,22633,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_TrueState,22634,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_FalseState,22635,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode,22636,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState,22637,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id,22638,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Name,22639,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Number,22640,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,22641,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_TransitionTime,22642,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,22643,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_TrueState,22644,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_FalseState,22645,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState,22646,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id,22647,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Name,22648,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Number,22649,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,22650,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_TransitionTime,22651,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,22652,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_TrueState,22653,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_FalseState,22654,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState,22655,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState,22656,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id,22657,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Name,22658,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Number,22659,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,22660,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition,22661,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id,22662,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Name,22663,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Number,22664,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,22665,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,22666,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_AvailableStates,22667,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_AvailableTransitions,22668,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime,22669,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve,22670,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,22671,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve,22672,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve,22673,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved,22674,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_MaxTimeShelved,22675,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleEnabled,22676,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound,22677,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound_ListId,22678,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound_AgencyId,22679,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AudibleSound_VersionId,22680,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState,22681,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id,22682,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Name,22683,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Number,22684,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_EffectiveDisplayName,22685,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_TransitionTime,22686,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,22687,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_TrueState,22688,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_FalseState,22689,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OnDelay,22690,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OffDelay,22691,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_FirstInGroupFlag,22692,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_FirstInGroup,22693,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState,22694,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id,22695,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Name,22696,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Number,22697,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_EffectiveDisplayName,22698,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_TransitionTime,22699,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,22700,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_TrueState,22701,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_FalseState,22702,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReAlarmTime,22703,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReAlarmRepeatCount,22704,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Silence,22705,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Suppress,22706,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Unsuppress,22707,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_RemoveFromService,22708,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_PlaceInService,22709,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Reset,22710,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState,22711,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate,22712,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationLimit,22713,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType,22714,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate,22715,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate,22716,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId,22717,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType,22718,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode,22719,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName,22720,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time,22721,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime,22722,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LocalTime,22723,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message,22724,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity,22725,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId,22726,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName,22727,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionSubClassId,22728,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionSubClassName,22729,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName,22730,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId,22731,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain,22732,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState,22733,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id,22734,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Name,22735,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Number,22736,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,22737,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_TransitionTime,22738,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,22739,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_TrueState,22740,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_FalseState,22741,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality,22742,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp,22743,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity,22744,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,22745,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment,22746,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp,22747,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId,22748,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable,22749,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable,22750,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment,22751,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments,22752,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState,22753,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id,22754,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Name,22755,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Number,22756,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,22757,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_TransitionTime,22758,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,22759,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_TrueState,22760,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_FalseState,22761,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState,22762,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id,22763,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Name,22764,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Number,22765,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,22766,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,22767,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,22768,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_TrueState,22769,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_FalseState,22770,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge,22771,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments,22772,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm,22773,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments,22774,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState,22775,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id,22776,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Name,22777,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Number,22778,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,22779,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_TransitionTime,22780,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,22781,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_TrueState,22782,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_FalseState,22783,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode,22784,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState,22785,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id,22786,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Name,22787,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Number,22788,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,22789,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_TransitionTime,22790,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,22791,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_TrueState,22792,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_FalseState,22793,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState,22794,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id,22795,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Name,22796,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Number,22797,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,22798,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,22799,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,22800,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_TrueState,22801,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_FalseState,22802,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState,22803,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState,22804,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,22805,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,22806,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,22807,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,22808,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition,22809,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,22810,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,22811,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,22812,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,22813,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,22814,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_AvailableStates,22815,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,22816,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,22817,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve,22818,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,22819,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve,22820,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,22821,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved,22822,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_MaxTimeShelved,22823,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleEnabled,22824,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound,22825,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_ListId,22826,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_AgencyId,22827,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AudibleSound_VersionId,22828,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState,22829,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id,22830,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Name,22831,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Number,22832,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,22833,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_TransitionTime,22834,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,22835,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_TrueState,22836,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_FalseState,22837,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OnDelay,22838,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OffDelay,22839,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_FirstInGroupFlag,22840,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_FirstInGroup,22841,Object +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState,22842,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id,22843,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Name,22844,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Number,22845,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,22846,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_TransitionTime,22847,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,22848,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_TrueState,22849,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_FalseState,22850,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReAlarmTime,22851,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReAlarmRepeatCount,22852,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Silence,22853,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Suppress,22854,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Unsuppress,22855,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_RemoveFromService,22856,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_PlaceInService,22857,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Reset,22858,Method +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState,22859,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId,22860,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime,22861,Variable +ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency,22862,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UpdateFrequency,22863,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired,22864,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId,22865,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType,22866,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode,22867,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName,22868,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time,22869,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime,22870,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LocalTime,22871,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message,22872,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity,22873,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId,22874,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName,22875,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionSubClassId,22876,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionSubClassName,22877,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName,22878,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId,22879,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain,22880,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState,22881,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id,22882,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Name,22883,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Number,22884,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_EffectiveDisplayName,22885,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_TransitionTime,22886,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,22887,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_TrueState,22888,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_FalseState,22889,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality,22890,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp,22891,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity,22892,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp,22893,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment,22894,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp,22895,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId,22896,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable,22897,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable,22898,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment,22899,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments,22900,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState,22901,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id,22902,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Name,22903,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Number,22904,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_EffectiveDisplayName,22905,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_TransitionTime,22906,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_EffectiveTransitionTime,22907,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_TrueState,22908,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_FalseState,22909,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState,22910,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id,22911,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Name,22912,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Number,22913,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,22914,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_TransitionTime,22915,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,22916,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_TrueState,22917,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_FalseState,22918,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge,22919,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments,22920,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm,22921,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments,22922,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState,22923,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id,22924,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Name,22925,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Number,22926,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_EffectiveDisplayName,22927,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_TransitionTime,22928,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,22929,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_TrueState,22930,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_FalseState,22931,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode,22932,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState,22933,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id,22934,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Name,22935,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Number,22936,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,22937,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_TransitionTime,22938,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,22939,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_TrueState,22940,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_FalseState,22941,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState,22942,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id,22943,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Name,22944,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Number,22945,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,22946,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_TransitionTime,22947,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,22948,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_TrueState,22949,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_FalseState,22950,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState,22951,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState,22952,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id,22953,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Name,22954,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Number,22955,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,22956,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition,22957,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id,22958,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Name,22959,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Number,22960,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,22961,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,22962,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_AvailableStates,22963,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_AvailableTransitions,22964,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime,22965,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve,22966,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,22967,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve,22968,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve,22969,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved,22970,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_MaxTimeShelved,22971,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleEnabled,22972,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound,22973,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound_ListId,22974,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound_AgencyId,22975,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AudibleSound_VersionId,22976,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState,22977,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id,22978,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Name,22979,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Number,22980,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_EffectiveDisplayName,22981,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_TransitionTime,22982,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,22983,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_TrueState,22984,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_FalseState,22985,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OnDelay,22986,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OffDelay,22987,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_FirstInGroupFlag,22988,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_FirstInGroup,22989,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState,22990,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id,22991,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Name,22992,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Number,22993,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_EffectiveDisplayName,22994,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_TransitionTime,22995,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,22996,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_TrueState,22997,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_FalseState,22998,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReAlarmTime,22999,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReAlarmRepeatCount,23000,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Silence,23001,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Suppress,23002,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Unsuppress,23003,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_RemoveFromService,23004,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_PlaceInService,23005,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Reset,23006,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState,23007,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate,23008,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationLimit,23009,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType,23010,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate,23011,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate,23012,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId,23013,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType,23014,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode,23015,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName,23016,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time,23017,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime,23018,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LocalTime,23019,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message,23020,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity,23021,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId,23022,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName,23023,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionSubClassId,23024,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionSubClassName,23025,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName,23026,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId,23027,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain,23028,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState,23029,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id,23030,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Name,23031,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Number,23032,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,23033,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_TransitionTime,23034,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,23035,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_TrueState,23036,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_FalseState,23037,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality,23038,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp,23039,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity,23040,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,23041,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment,23042,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp,23043,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId,23044,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable,23045,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable,23046,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment,23047,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments,23048,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState,23049,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id,23050,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Name,23051,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Number,23052,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,23053,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_TransitionTime,23054,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,23055,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_TrueState,23056,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_FalseState,23057,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState,23058,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id,23059,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Name,23060,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Number,23061,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,23062,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,23063,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,23064,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_TrueState,23065,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_FalseState,23066,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge,23067,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments,23068,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm,23069,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments,23070,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState,23071,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id,23072,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Name,23073,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Number,23074,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,23075,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_TransitionTime,23076,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,23077,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_TrueState,23078,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_FalseState,23079,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode,23080,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState,23081,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id,23082,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Name,23083,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Number,23084,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,23085,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_TransitionTime,23086,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,23087,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_TrueState,23088,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_FalseState,23089,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState,23090,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id,23091,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Name,23092,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Number,23093,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,23094,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,23095,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,23096,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_TrueState,23097,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_FalseState,23098,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState,23099,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState,23100,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,23101,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,23102,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,23103,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,23104,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition,23105,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,23106,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,23107,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,23108,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,23109,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,23110,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_AvailableStates,23111,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,23112,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,23113,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve,23114,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,23115,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve,23116,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,23117,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved,23118,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_MaxTimeShelved,23119,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleEnabled,23120,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound,23121,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_ListId,23122,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_AgencyId,23123,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AudibleSound_VersionId,23124,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState,23125,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id,23126,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Name,23127,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Number,23128,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,23129,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_TransitionTime,23130,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,23131,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_TrueState,23132,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_FalseState,23133,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OnDelay,23134,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OffDelay,23135,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_FirstInGroupFlag,23136,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_FirstInGroup,23137,Object +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState,23138,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id,23139,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Name,23140,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Number,23141,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,23142,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_TransitionTime,23143,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,23144,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_TrueState,23145,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_FalseState,23146,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReAlarmTime,23147,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReAlarmRepeatCount,23148,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Silence,23149,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Suppress,23150,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Unsuppress,23151,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_RemoveFromService,23152,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_PlaceInService,23153,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Reset,23154,Method +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState,23155,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId,23156,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime,23157,Variable +ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency,23158,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UpdateFrequency,23159,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired,23160,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId,23161,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType,23162,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode,23163,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName,23164,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time,23165,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime,23166,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LocalTime,23167,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message,23168,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity,23169,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId,23170,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName,23171,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionSubClassId,23172,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionSubClassName,23173,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName,23174,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId,23175,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain,23176,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState,23177,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id,23178,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Name,23179,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Number,23180,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_EffectiveDisplayName,23181,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_TransitionTime,23182,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_EffectiveTransitionTime,23183,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_TrueState,23184,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_FalseState,23185,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality,23186,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp,23187,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity,23188,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp,23189,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment,23190,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp,23191,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId,23192,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable,23193,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable,23194,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment,23195,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments,23196,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState,23197,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id,23198,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Name,23199,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Number,23200,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_EffectiveDisplayName,23201,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_TransitionTime,23202,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_EffectiveTransitionTime,23203,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_TrueState,23204,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_FalseState,23205,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState,23206,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id,23207,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Name,23208,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Number,23209,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_EffectiveDisplayName,23210,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_TransitionTime,23211,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_EffectiveTransitionTime,23212,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_TrueState,23213,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_FalseState,23214,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge,23215,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments,23216,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm,23217,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments,23218,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState,23219,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id,23220,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Name,23221,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Number,23222,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_EffectiveDisplayName,23223,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_TransitionTime,23224,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_EffectiveTransitionTime,23225,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_TrueState,23226,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_FalseState,23227,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode,23228,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState,23229,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id,23230,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Name,23231,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Number,23232,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_EffectiveDisplayName,23233,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_TransitionTime,23234,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_EffectiveTransitionTime,23235,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_TrueState,23236,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_FalseState,23237,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState,23238,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id,23239,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Name,23240,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Number,23241,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_EffectiveDisplayName,23242,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_TransitionTime,23243,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_EffectiveTransitionTime,23244,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_TrueState,23245,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_FalseState,23246,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState,23247,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState,23248,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id,23249,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Name,23250,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Number,23251,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_EffectiveDisplayName,23252,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition,23253,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id,23254,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Name,23255,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Number,23256,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_TransitionTime,23257,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_EffectiveTransitionTime,23258,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_AvailableStates,23259,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_AvailableTransitions,23260,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime,23261,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve,23262,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments,23263,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve,23264,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve,23265,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved,23266,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_MaxTimeShelved,23267,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleEnabled,23268,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound,23269,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound_ListId,23270,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound_AgencyId,23271,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AudibleSound_VersionId,23272,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState,23273,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id,23274,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Name,23275,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Number,23276,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_EffectiveDisplayName,23277,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_TransitionTime,23278,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_EffectiveTransitionTime,23279,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_TrueState,23280,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_FalseState,23281,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OnDelay,23282,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OffDelay,23283,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_FirstInGroupFlag,23284,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_FirstInGroup,23285,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState,23286,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id,23287,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Name,23288,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Number,23289,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_EffectiveDisplayName,23290,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_TransitionTime,23291,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_EffectiveTransitionTime,23292,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_TrueState,23293,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_FalseState,23294,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReAlarmTime,23295,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReAlarmRepeatCount,23296,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Silence,23297,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Suppress,23298,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Unsuppress,23299,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_RemoveFromService,23300,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_PlaceInService,23301,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Reset,23302,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState,23303,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate,23304,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationLimit,23305,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType,23306,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate,23307,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate,23308,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId,23309,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType,23310,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode,23311,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName,23312,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time,23313,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime,23314,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LocalTime,23315,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message,23316,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity,23317,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId,23318,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName,23319,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionSubClassId,23320,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionSubClassName,23321,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName,23322,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId,23323,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain,23324,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState,23325,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id,23326,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Name,23327,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Number,23328,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_EffectiveDisplayName,23329,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_TransitionTime,23330,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_EffectiveTransitionTime,23331,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_TrueState,23332,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_FalseState,23333,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality,23334,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp,23335,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity,23336,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp,23337,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment,23338,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp,23339,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId,23340,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable,23341,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable,23342,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment,23343,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments,23344,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState,23345,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id,23346,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Name,23347,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Number,23348,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_EffectiveDisplayName,23349,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_TransitionTime,23350,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_EffectiveTransitionTime,23351,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_TrueState,23352,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_FalseState,23353,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState,23354,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id,23355,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Name,23356,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Number,23357,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_EffectiveDisplayName,23358,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_TransitionTime,23359,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_EffectiveTransitionTime,23360,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_TrueState,23361,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_FalseState,23362,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge,23363,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments,23364,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm,23365,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments,23366,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState,23367,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id,23368,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Name,23369,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Number,23370,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_EffectiveDisplayName,23371,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_TransitionTime,23372,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_EffectiveTransitionTime,23373,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_TrueState,23374,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_FalseState,23375,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode,23376,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState,23377,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id,23378,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Name,23379,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Number,23380,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_EffectiveDisplayName,23381,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_TransitionTime,23382,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_EffectiveTransitionTime,23383,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_TrueState,23384,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_FalseState,23385,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState,23386,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id,23387,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Name,23388,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Number,23389,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_EffectiveDisplayName,23390,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_TransitionTime,23391,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_EffectiveTransitionTime,23392,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_TrueState,23393,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_FalseState,23394,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState,23395,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState,23396,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id,23397,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Name,23398,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Number,23399,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_EffectiveDisplayName,23400,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition,23401,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id,23402,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Name,23403,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Number,23404,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_TransitionTime,23405,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_EffectiveTransitionTime,23406,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_AvailableStates,23407,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_AvailableTransitions,23408,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime,23409,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve,23410,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments,23411,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve,23412,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve,23413,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved,23414,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_MaxTimeShelved,23415,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleEnabled,23416,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound,23417,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_ListId,23418,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_AgencyId,23419,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AudibleSound_VersionId,23420,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState,23421,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id,23422,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Name,23423,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Number,23424,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_EffectiveDisplayName,23425,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_TransitionTime,23426,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_EffectiveTransitionTime,23427,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_TrueState,23428,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_FalseState,23429,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OnDelay,23430,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OffDelay,23431,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_FirstInGroupFlag,23432,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_FirstInGroup,23433,Object +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState,23434,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id,23435,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Name,23436,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Number,23437,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_EffectiveDisplayName,23438,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_TransitionTime,23439,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_EffectiveTransitionTime,23440,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_TrueState,23441,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_FalseState,23442,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReAlarmTime,23443,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReAlarmRepeatCount,23444,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Silence,23445,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Suppress,23446,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Unsuppress,23447,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_RemoveFromService,23448,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_PlaceInService,23449,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Reset,23450,Method +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState,23451,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId,23452,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime,23453,Variable +ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency,23454,Variable +AliasNameType,23455,ObjectType +AliasNameCategoryType,23456,ObjectType +AliasNameCategoryType_Alias_Placeholder,23457,Object +AliasNameCategoryType_SubAliasNameCategories_Placeholder,23458,Object +AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias,23459,Method +AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_InputArguments,23460,Variable +AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments,23461,Variable +AliasNameCategoryType_FindAlias,23462,Method +AliasNameCategoryType_FindAlias_InputArguments,23463,Variable +AliasNameCategoryType_FindAlias_OutputArguments,23464,Variable +FindAliasMethodType,23465,Method +FindAliasMethodType_InputArguments,23466,Variable +FindAliasMethodType_OutputArguments,23467,Variable +AliasNameDataType,23468,DataType +AliasFor,23469,ReferenceType +Aliases,23470,Object +Aliases_Alias_Placeholder,23471,Object +Aliases_SubAliasNameCategories_Placeholder,23472,Object +Aliases_SubAliasNameCategories_Placeholder_FindAlias,23473,Method +Aliases_SubAliasNameCategories_Placeholder_FindAlias_InputArguments,23474,Variable +Aliases_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments,23475,Variable +Aliases_FindAlias,23476,Method +Aliases_FindAlias_InputArguments,23477,Variable +Aliases_FindAlias_OutputArguments,23478,Variable +TagVariables,23479,Object +TagVariables_Alias_Placeholder,23480,Object +TagVariables_SubAliasNameCategories_Placeholder,23481,Object +TagVariables_SubAliasNameCategories_Placeholder_FindAlias,23482,Method +TagVariables_SubAliasNameCategories_Placeholder_FindAlias_InputArguments,23483,Variable +TagVariables_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments,23484,Variable +TagVariables_FindAlias,23485,Method +TagVariables_FindAlias_InputArguments,23486,Variable +TagVariables_FindAlias_OutputArguments,23487,Variable +Topics,23488,Object +Topics_Alias_Placeholder,23489,Object +Topics_SubAliasNameCategories_Placeholder,23490,Object +Topics_SubAliasNameCategories_Placeholder_FindAlias,23491,Method +Topics_SubAliasNameCategories_Placeholder_FindAlias_InputArguments,23492,Variable +Topics_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments,23493,Variable +Topics_FindAlias,23494,Method +Topics_FindAlias_InputArguments,23495,Variable +Topics_FindAlias_OutputArguments,23496,Variable +ReadAnnotationDataDetails,23497,DataType +CurrencyUnitType,23498,DataType +AliasNameDataType_Encoding_DefaultBinary,23499,Object +ReadAnnotationDataDetails_Encoding_DefaultBinary,23500,Object +CurrencyUnit,23501,Variable +OpcUa_BinarySchema_AliasNameDataType,23502,Variable +OpcUa_BinarySchema_AliasNameDataType_DataTypeVersion,23503,Variable +OpcUa_BinarySchema_AliasNameDataType_DictionaryFragment,23504,Variable +AliasNameDataType_Encoding_DefaultXml,23505,Object +ReadAnnotationDataDetails_Encoding_DefaultXml,23506,Object +CurrencyUnitType_Encoding_DefaultBinary,23507,Object +OpcUa_XmlSchema_AliasNameDataType,23508,Variable +OpcUa_XmlSchema_AliasNameDataType_DataTypeVersion,23509,Variable +OpcUa_XmlSchema_AliasNameDataType_DictionaryFragment,23510,Variable +AliasNameDataType_Encoding_DefaultJson,23511,Object +ReadAnnotationDataDetails_Encoding_DefaultJson,23512,Object +IOrderedObjectType,23513,ObjectType +OpcUa_BinarySchema_CurrencyUnitType,23514,Variable +OpcUa_BinarySchema_CurrencyUnitType_DataTypeVersion,23515,Variable +OpcUa_BinarySchema_CurrencyUnitType_DictionaryFragment,23516,Variable +IOrderedObjectType_NumberInList,23517,Variable +OrderedListType,23518,ObjectType +OrderedListType_OrderedObject_Placeholder,23519,Object +CurrencyUnitType_Encoding_DefaultXml,23520,Object +OrderedListType_OrderedObject_Placeholder_NumberInList,23521,Variable +OpcUa_XmlSchema_CurrencyUnitType,23522,Variable +OpcUa_XmlSchema_CurrencyUnitType_DataTypeVersion,23523,Variable +OpcUa_XmlSchema_CurrencyUnitType_DictionaryFragment,23524,Variable +OrderedListType_NodeVersion,23525,Variable +CurrencyUnitType_Encoding_DefaultJson,23528,Object diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Endpoints.wsdl b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Endpoints.wsdl new file mode 100644 index 00000000..bcc3b59a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Endpoints.wsdl @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.NodeSet.xml b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.NodeSet.xml new file mode 100644 index 00000000..ffb69178 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.NodeSet.xml @@ -0,0 +1,271996 @@ + + + + + + http://opcfoundation.org/UA/ + + + + + + i=1 + + DataType_64 + + 0 + Boolean + + + + Boolean + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=2 + + DataType_64 + + 0 + SByte + + + + SByte + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=27 + + + + false + + + + + i=3 + + DataType_64 + + 0 + Byte + + + + Byte + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=28 + + + + + i=45 + + false + + i=15031 + + + + + i=45 + + false + + i=15033 + + + + false + + + + + i=4 + + DataType_64 + + 0 + Int16 + + + + Int16 + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=27 + + + + false + + + + + i=5 + + DataType_64 + + 0 + UInt16 + + + + UInt16 + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=28 + + + + + i=45 + + false + + i=15904 + + + + false + + + + + i=6 + + DataType_64 + + 0 + Int32 + + + + Int32 + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=27 + + + + false + + + + + i=7 + + DataType_64 + + 0 + UInt32 + + + + UInt32 + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=28 + + + + + i=45 + + false + + i=15583 + + + + + i=45 + + false + + i=15642 + + + + + i=45 + + false + + i=15646 + + + + + i=45 + + false + + i=15654 + + + + + i=45 + + false + + i=15658 + + + + + i=45 + + false + + i=94 + + + + + i=45 + + false + + i=15406 + + + + + i=45 + + false + + i=95 + + + + + i=45 + + false + + i=17588 + + + + + i=45 + + false + + i=288 + + + + + i=45 + + false + + i=20998 + + + + + i=45 + + false + + i=347 + + + + + i=45 + + false + + i=289 + + + + false + + + + + i=8 + + DataType_64 + + 0 + Int64 + + + + Int64 + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=27 + + + + false + + + + + i=9 + + DataType_64 + + 0 + UInt64 + + + + UInt64 + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=28 + + + + + i=45 + + false + + i=11737 + + + + false + + + + + i=10 + + DataType_64 + + 0 + Float + + + + Float + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=26 + + + + false + + + + + i=11 + + DataType_64 + + 0 + Double + + + + Double + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=26 + + + + + i=45 + + false + + i=290 + + + + false + + + + + i=12 + + DataType_64 + + 0 + String + + + + String + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=12877 + + + + + i=45 + + false + + i=12878 + + + + + i=45 + + false + + i=12879 + + + + + i=45 + + false + + i=12880 + + + + + i=45 + + false + + i=12881 + + + + + i=45 + + false + + i=295 + + + + + i=45 + + false + + i=291 + + + + + i=45 + + false + + i=292 + + + + false + + + + + i=13 + + DataType_64 + + 0 + DateTime + + + + DateTime + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=294 + + + + + i=45 + + false + + i=293 + + + + false + + + + + i=14 + + DataType_64 + + 0 + Guid + + + + Guid + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=15 + + DataType_64 + + 0 + ByteString + + + + ByteString + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=30 + + + + + i=45 + + false + + i=16307 + + + + + i=45 + + false + + i=311 + + + + + i=45 + + false + + i=521 + + + + false + + + + + i=16 + + DataType_64 + + 0 + XmlElement + + + + XmlElement + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=17 + + DataType_64 + + 0 + NodeId + + + + NodeId + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=388 + + + + false + + + + + i=18 + + DataType_64 + + 0 + ExpandedNodeId + + + + ExpandedNodeId + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=19 + + DataType_64 + + 0 + StatusCode + + + + StatusCode + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=20 + + DataType_64 + + 0 + QualifiedName + + + + QualifiedName + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=21 + + DataType_64 + + 0 + LocalizedText + + + + LocalizedText + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=22 + + DataType_64 + + 0 + Structure + + + + Structure + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=14533 + + + + + i=45 + + false + + i=15528 + + + + + i=45 + + false + + i=18806 + + + + + i=45 + + false + + i=18807 + + + + + i=45 + + false + + i=18809 + + + + + i=45 + + false + + i=18811 + + + + + i=45 + + false + + i=18813 + + + + + i=45 + + false + + i=15634 + + + + + i=45 + + false + + i=23498 + + + + + i=45 + + false + + i=12554 + + + + + i=45 + + false + + i=15534 + + + + + i=45 + + false + + i=14525 + + + + + i=45 + + false + + i=14524 + + + + + i=45 + + false + + i=14593 + + + + + i=45 + + false + + i=15578 + + + + + i=45 + + false + + i=15580 + + + + + i=45 + + false + + i=14273 + + + + + i=45 + + false + + i=15597 + + + + + i=45 + + false + + i=15598 + + + + + i=45 + + false + + i=15605 + + + + + i=45 + + false + + i=15609 + + + + + i=45 + + false + + i=15611 + + + + + i=45 + + false + + i=15616 + + + + + i=45 + + false + + i=15617 + + + + + i=45 + + false + + i=15618 + + + + + i=45 + + false + + i=15502 + + + + + i=45 + + false + + i=15621 + + + + + i=45 + + false + + i=15622 + + + + + i=45 + + false + + i=15623 + + + + + i=45 + + false + + i=15628 + + + + + i=45 + + false + + i=15629 + + + + + i=45 + + false + + i=15630 + + + + + i=45 + + false + + i=14744 + + + + + i=45 + + false + + i=15530 + + + + + i=45 + + false + + i=23468 + + + + + i=45 + + false + + i=96 + + + + + i=45 + + false + + i=97 + + + + + i=45 + + false + + i=101 + + + + + i=45 + + false + + i=296 + + + + + i=45 + + false + + i=7594 + + + + + i=45 + + false + + i=12755 + + + + + i=45 + + false + + i=12756 + + + + + i=45 + + false + + i=8912 + + + + + i=45 + + false + + i=308 + + + + + i=45 + + false + + i=12189 + + + + + i=45 + + false + + i=304 + + + + + i=45 + + false + + i=312 + + + + + i=45 + + false + + i=432 + + + + + i=45 + + false + + i=12890 + + + + + i=45 + + false + + i=344 + + + + + i=45 + + false + + i=316 + + + + + i=45 + + false + + i=376 + + + + + i=45 + + false + + i=379 + + + + + i=45 + + false + + i=382 + + + + + i=45 + + false + + i=385 + + + + + i=45 + + false + + i=537 + + + + + i=45 + + false + + i=540 + + + + + i=45 + + false + + i=331 + + + + + i=45 + + false + + i=583 + + + + + i=45 + + false + + i=586 + + + + + i=45 + + false + + i=589 + + + + + i=45 + + false + + i=659 + + + + + i=45 + + false + + i=719 + + + + + i=45 + + false + + i=948 + + + + + i=45 + + false + + i=920 + + + + + i=45 + + false + + i=338 + + + + + i=45 + + false + + i=853 + + + + + i=45 + + false + + i=11943 + + + + + i=45 + + false + + i=11944 + + + + + i=45 + + false + + i=856 + + + + + i=45 + + false + + i=859 + + + + + i=45 + + false + + i=862 + + + + + i=45 + + false + + i=865 + + + + + i=45 + + false + + i=868 + + + + + i=45 + + false + + i=871 + + + + + i=45 + + false + + i=299 + + + + + i=45 + + false + + i=874 + + + + + i=45 + + false + + i=877 + + + + + i=45 + + false + + i=897 + + + + + i=45 + + false + + i=884 + + + + + i=45 + + false + + i=887 + + + + + i=45 + + false + + i=12171 + + + + + i=45 + + false + + i=12172 + + + + + i=45 + + false + + i=12079 + + + + + i=45 + + false + + i=12080 + + + + + i=45 + + false + + i=894 + + + + + i=45 + + false + + i=15396 + + + + + i=45 + + false + + i=891 + + + + true + + + + + i=23 + + DataType_64 + + 0 + DataValue + + + + DataValue + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=24 + + DataType_64 + + 0 + BaseDataType + + + + BaseDataType + + + 0 + 0 + + + 0 + + + + i=45 + + false + + i=26 + + + + + i=45 + + false + + i=29 + + + + + i=45 + + false + + i=1 + + + + + i=45 + + false + + i=12 + + + + + i=45 + + false + + i=13 + + + + + i=45 + + false + + i=14 + + + + + i=45 + + false + + i=15 + + + + + i=45 + + false + + i=16 + + + + + i=45 + + false + + i=17 + + + + + i=45 + + false + + i=18 + + + + + i=45 + + false + + i=19 + + + + + i=45 + + false + + i=20 + + + + + i=45 + + false + + i=21 + + + + + i=45 + + false + + i=22 + + + + + i=45 + + false + + i=23 + + + + + i=45 + + false + + i=25 + + + + + i=35 + + true + + i=90 + + + + true + + + + + i=25 + + DataType_64 + + 0 + DiagnosticInfo + + + + DiagnosticInfo + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + false + + + + + i=26 + + DataType_64 + + 0 + Number + + + + Number + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=27 + + + + + i=45 + + false + + i=28 + + + + + i=45 + + false + + i=10 + + + + + i=45 + + false + + i=11 + + + + + i=45 + + false + + i=50 + + + + true + + + + + i=27 + + DataType_64 + + 0 + Integer + + + + Integer + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=26 + + + + + i=45 + + false + + i=2 + + + + + i=45 + + false + + i=4 + + + + + i=45 + + false + + i=6 + + + + + i=45 + + false + + i=8 + + + + true + + + + + i=28 + + DataType_64 + + 0 + UInteger + + + + UInteger + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=26 + + + + + i=45 + + false + + i=3 + + + + + i=45 + + false + + i=5 + + + + + i=45 + + false + + i=7 + + + + + i=45 + + false + + i=9 + + + + true + + + + + i=29 + + DataType_64 + + 0 + Enumeration + + + + Enumeration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=24 + + + + + i=45 + + false + + i=120 + + + + + i=45 + + false + + i=11939 + + + + + i=45 + + false + + i=15632 + + + + + i=45 + + false + + i=12552 + + + + + i=45 + + false + + i=14647 + + + + + i=45 + + false + + i=15874 + + + + + i=45 + + false + + i=20408 + + + + + i=45 + + false + + i=15008 + + + + + i=45 + + false + + i=19723 + + + + + i=45 + + false + + i=19730 + + + + + i=45 + + false + + i=256 + + + + + i=45 + + false + + i=257 + + + + + i=45 + + false + + i=98 + + + + + i=45 + + false + + i=307 + + + + + i=45 + + false + + i=302 + + + + + i=45 + + false + + i=303 + + + + + i=45 + + false + + i=315 + + + + + i=45 + + false + + i=348 + + + + + i=45 + + false + + i=576 + + + + + i=45 + + false + + i=11234 + + + + + i=45 + + false + + i=11293 + + + + + i=45 + + false + + i=851 + + + + + i=45 + + false + + i=852 + + + + + i=45 + + false + + i=12077 + + + + + i=45 + + false + + i=890 + + + + true + + + + + i=30 + + DataType_64 + + 0 + Image + + + + Image + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15 + + + + + i=45 + + false + + i=2000 + + + + + i=45 + + false + + i=2001 + + + + + i=45 + + false + + i=2002 + + + + + i=45 + + false + + i=2003 + + + + true + + + + + i=31 + + ReferenceType_32 + + 0 + References + + + + References + + + 0 + 0 + + + 0 + + + + i=45 + + false + + i=32 + + + + + i=45 + + false + + i=33 + + + + + i=35 + + true + + i=91 + + + + true + true + + + + + + + + i=32 + + ReferenceType_32 + + 0 + NonHierarchicalReferences + + + + NonHierarchicalReferences + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=31 + + + + + i=45 + + false + + i=37 + + + + + i=45 + + false + + i=38 + + + + + i=45 + + false + + i=39 + + + + + i=45 + + false + + i=40 + + + + + i=45 + + false + + i=41 + + + + + i=45 + + false + + i=51 + + + + + i=45 + + false + + i=52 + + + + + i=45 + + false + + i=53 + + + + + i=45 + + false + + i=54 + + + + + i=45 + + false + + i=117 + + + + + i=45 + + false + + i=17597 + + + + + i=45 + + false + + i=17603 + + + + + i=45 + + false + + i=9004 + + + + + i=45 + + false + + i=9005 + + + + + i=45 + + false + + i=9006 + + + + + i=45 + + false + + i=23469 + + + + true + true + + + + + + + + i=33 + + ReferenceType_32 + + 0 + HierarchicalReferences + + + + HierarchicalReferences + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=31 + + + + + i=45 + + false + + i=34 + + + + + i=45 + + false + + i=35 + + + + + i=45 + + false + + i=36 + + + + + i=45 + + false + + i=14936 + + + + true + false + + + HierarchicalReferences + + + + + i=34 + + ReferenceType_32 + + 0 + HasChild + + + + HasChild + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=33 + + + + + i=45 + + false + + i=44 + + + + + i=45 + + false + + i=45 + + + + true + false + + + ChildOf + + + + + i=35 + + ReferenceType_32 + + 0 + Organizes + + + + Organizes + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=33 + + + + + i=45 + + false + + i=16362 + + + + false + false + + + OrganizedBy + + + + + i=36 + + ReferenceType_32 + + 0 + HasEventSource + + + + HasEventSource + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=33 + + + + + i=45 + + false + + i=48 + + + + false + false + + + EventSourceOf + + + + + i=37 + + ReferenceType_32 + + 0 + HasModellingRule + + + + HasModellingRule + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + ModellingRuleOf + + + + + i=38 + + ReferenceType_32 + + 0 + HasEncoding + + + + HasEncoding + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + EncodingOf + + + + + i=39 + + ReferenceType_32 + + 0 + HasDescription + + + + HasDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + DescriptionOf + + + + + i=40 + + ReferenceType_32 + + 0 + HasTypeDefinition + + + + HasTypeDefinition + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + TypeDefinitionOf + + + + + i=41 + + ReferenceType_32 + + 0 + GeneratesEvent + + + + GeneratesEvent + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + + i=45 + + false + + i=3065 + + + + false + false + + + GeneratedBy + + + + + i=44 + + ReferenceType_32 + + 0 + Aggregates + + + + Aggregates + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=34 + + + + + i=45 + + false + + i=46 + + + + + i=45 + + false + + i=47 + + + + + i=45 + + false + + i=56 + + + + true + false + + + AggregatedBy + + + + + i=45 + + ReferenceType_32 + + 0 + HasSubtype + + + + HasSubtype + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=34 + + + + false + false + + + SubtypeOf + + + + + i=46 + + ReferenceType_32 + + 0 + HasProperty + + + + HasProperty + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=44 + + + + false + false + + + PropertyOf + + + + + i=47 + + ReferenceType_32 + + 0 + HasComponent + + + + HasComponent + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=44 + + + + + i=45 + + false + + i=49 + + + + + i=45 + + false + + i=129 + + + + + i=45 + + false + + i=15112 + + + + + i=45 + + false + + i=17604 + + + + + i=45 + + false + + i=16361 + + + + + i=45 + + false + + i=14476 + + + + + i=45 + + false + + i=15296 + + + + + i=45 + + false + + i=18804 + + + + + i=45 + + false + + i=15297 + + + + + i=45 + + false + + i=18805 + + + + false + false + + + ComponentOf + + + + + i=48 + + ReferenceType_32 + + 0 + HasNotifier + + + + HasNotifier + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=36 + + + + false + false + + + NotifierOf + + + + + i=49 + + ReferenceType_32 + + 0 + HasOrderedComponent + + + + HasOrderedComponent + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + OrderedComponentOf + + + + + i=50 + + DataType_64 + + 0 + Decimal + + + + Decimal + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=26 + + + + false + + + + + i=51 + + ReferenceType_32 + + 0 + FromState + + + + FromState + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + ToTransition + + + + + i=52 + + ReferenceType_32 + + 0 + ToState + + + + ToState + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + FromTransition + + + + + i=53 + + ReferenceType_32 + + 0 + HasCause + + + + HasCause + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + MayBeCausedBy + + + + + i=54 + + ReferenceType_32 + + 0 + HasEffect + + + + HasEffect + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + + i=45 + + false + + i=17276 + + + + + i=45 + + false + + i=17983 + + + + + i=45 + + false + + i=17984 + + + + + i=45 + + false + + i=17985 + + + + false + false + + + MayBeEffectedBy + + + + + i=56 + + ReferenceType_32 + + 0 + HasHistoricalConfiguration + + + + HasHistoricalConfiguration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=44 + + + + false + false + + + HistoricalConfigurationOf + + + + + i=58 + + ObjectType_8 + + 0 + BaseObjectType + + + + BaseObjectType + + + 0 + 0 + + + 0 + + + + i=45 + + false + + i=61 + + + + + i=45 + + false + + i=75 + + + + + i=45 + + false + + i=76 + + + + + i=45 + + false + + i=77 + + + + + i=35 + + true + + i=88 + + + + + i=45 + + false + + i=2004 + + + + + i=45 + + false + + i=2013 + + + + + i=45 + + false + + i=2020 + + + + + i=45 + + false + + i=2026 + + + + + i=45 + + false + + i=2029 + + + + + i=45 + + false + + i=2033 + + + + + i=45 + + false + + i=2034 + + + + + i=45 + + false + + i=11575 + + + + + i=45 + + false + + i=11616 + + + + + i=45 + + false + + i=11645 + + + + + i=45 + + false + + i=2041 + + + + + i=45 + + false + + i=2340 + + + + + i=45 + + false + + i=2299 + + + + + i=45 + + false + + i=2307 + + + + + i=45 + + false + + i=2310 + + + + + i=45 + + false + + i=15744 + + + + + i=45 + + false + + i=15607 + + + + + i=45 + + false + + i=15620 + + + + + i=45 + + false + + i=17589 + + + + + i=45 + + false + + i=17602 + + + + + i=45 + + false + + i=23518 + + + + + i=45 + + false + + i=11163 + + + + + i=45 + + false + + i=17279 + + + + + i=45 + + false + + i=2318 + + + + + i=45 + + false + + i=2330 + + + + + i=45 + + false + + i=12555 + + + + + i=45 + + false + + i=12556 + + + + + i=45 + + false + + i=12581 + + + + + i=45 + + false + + i=18001 + + + + + i=45 + + false + + i=17852 + + + + + i=45 + + false + + i=11187 + + + + + i=45 + + false + + i=15906 + + + + + i=45 + + false + + i=15471 + + + + + i=45 + + false + + i=14509 + + + + + i=45 + + false + + i=15489 + + + + + i=45 + + false + + i=14209 + + + + + i=45 + + false + + i=17721 + + + + + i=45 + + false + + i=14232 + + + + + i=45 + + false + + i=17997 + + + + + i=45 + + false + + i=17998 + + + + + i=45 + + false + + i=21090 + + + + + i=45 + + false + + i=21091 + + + + + i=45 + + false + + i=15298 + + + + + i=45 + + false + + i=15305 + + + + + i=45 + + false + + i=21096 + + + + + i=45 + + false + + i=15306 + + + + + i=45 + + false + + i=15319 + + + + + i=45 + + false + + i=21104 + + + + + i=45 + + false + + i=15108 + + + + + i=45 + + false + + i=14643 + + + + + i=45 + + false + + i=19677 + + + + + i=45 + + false + + i=21145 + + + + + i=45 + + false + + i=23455 + + + + false + + + + i=61 + + ObjectType_8 + + 0 + FolderType + + + + FolderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=11564 + + + + + i=45 + + false + + i=13353 + + + + + i=45 + + false + + i=17591 + + + + + i=45 + + false + + i=16405 + + + + + i=45 + + false + + i=13813 + + + + + i=45 + + false + + i=17496 + + + + + i=45 + + false + + i=15452 + + + + + i=45 + + false + + i=14477 + + + + + i=45 + + false + + i=23456 + + + + false + + + + i=62 + + VariableType_16 + + 0 + BaseVariableType + + + + BaseVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + false + + i=63 + + + + + i=45 + + false + + i=68 + + + + + i=35 + + true + + i=89 + + + + + + + + + + i=24 + + -2 + + true + + + + i=63 + + VariableType_16 + + 0 + BaseDataVariableType + + + + BaseDataVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=62 + + + + + i=45 + + false + + i=69 + + + + + i=45 + + false + + i=72 + + + + + i=45 + + false + + i=2137 + + + + + i=45 + + false + + i=2138 + + + + + i=45 + + false + + i=3051 + + + + + i=45 + + false + + i=2150 + + + + + i=45 + + false + + i=2164 + + + + + i=45 + + false + + i=2165 + + + + + i=45 + + false + + i=2171 + + + + + i=45 + + false + + i=2172 + + + + + i=45 + + false + + i=2196 + + + + + i=45 + + false + + i=2197 + + + + + i=45 + + false + + i=2243 + + + + + i=45 + + false + + i=2244 + + + + + i=45 + + false + + i=11487 + + + + + i=45 + + false + + i=16309 + + + + + i=45 + + false + + i=17986 + + + + + i=45 + + false + + i=2755 + + + + + i=45 + + false + + i=2762 + + + + + i=45 + + false + + i=15113 + + + + + i=45 + + false + + i=17709 + + + + + i=45 + + false + + i=17714 + + + + + i=45 + + false + + i=18772 + + + + + i=45 + + false + + i=18779 + + + + + i=45 + + false + + i=18786 + + + + + i=45 + + false + + i=2365 + + + + + i=45 + + false + + i=9002 + + + + + i=45 + + false + + i=17277 + + + + + i=45 + + false + + i=2380 + + + + + i=45 + + false + + i=15383 + + + + + i=45 + + false + + i=19725 + + + + + + + + + + i=24 + + -2 + + false + + + + i=68 + + VariableType_16 + + 0 + PropertyType + + + + PropertyType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=62 + + + + + + + + + + i=24 + + -2 + + false + + + + i=69 + + VariableType_16 + + 0 + DataTypeDescriptionType + + + + DataTypeDescriptionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=104 + + + + + i=46 + + false + + i=105 + + + + + + + + + + i=12 + + -1 + + false + + + + i=72 + + VariableType_16 + + 0 + DataTypeDictionaryType + + + + DataTypeDictionaryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=106 + + + + + i=46 + + false + + i=107 + + + + + i=46 + + false + + i=15001 + + + + + + + + + + i=15 + + -1 + + false + + + + i=75 + + ObjectType_8 + + 0 + DataTypeSystemType + + + + DataTypeSystemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + false + + + + i=76 + + ObjectType_8 + + 0 + DataTypeEncodingType + + + + DataTypeEncodingType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + false + + + + i=77 + + ObjectType_8 + + 0 + ModellingRuleType + + + + ModellingRuleType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=111 + + + + false + + + + i=78 + + Object_1 + + 0 + Mandatory + + + + Mandatory + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=77 + + + + + i=46 + + false + + i=112 + + + + 0 + + + + i=80 + + Object_1 + + 0 + Optional + + + + Optional + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=77 + + + + + i=46 + + false + + i=113 + + + + 0 + + + + i=83 + + Object_1 + + 0 + ExposesItsArray + + + + ExposesItsArray + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=77 + + + + + i=46 + + false + + i=114 + + + + 0 + + + + i=84 + + Object_1 + + 0 + Root + + + + Root + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + false + + i=85 + + + + + i=35 + + false + + i=86 + + + + + i=35 + + false + + i=87 + + + + 0 + + + + i=85 + + Object_1 + + 0 + Objects + + + + Objects + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=84 + + + + + i=35 + + false + + i=2253 + + + + + i=35 + + false + + i=23470 + + + + 0 + + + + i=86 + + Object_1 + + 0 + Types + + + + Types + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=84 + + + + + i=35 + + false + + i=88 + + + + + i=35 + + false + + i=89 + + + + + i=35 + + false + + i=90 + + + + + i=35 + + false + + i=91 + + + + + i=35 + + false + + i=3048 + + + + + i=35 + + false + + i=17708 + + + + 0 + + + + i=87 + + Object_1 + + 0 + Views + + + + Views + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=84 + + + + 0 + + + + i=88 + + Object_1 + + 0 + ObjectTypes + + + + ObjectTypes + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=86 + + + + + i=35 + + false + + i=58 + + + + 0 + + + + i=89 + + Object_1 + + 0 + VariableTypes + + + + VariableTypes + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=86 + + + + + i=35 + + false + + i=62 + + + + 0 + + + + i=90 + + Object_1 + + 0 + DataTypes + + + + DataTypes + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=86 + + + + + i=35 + + false + + i=24 + + + + + i=35 + + false + + i=92 + + + + + i=35 + + false + + i=93 + + + + 0 + + + + i=91 + + Object_1 + + 0 + ReferenceTypes + + + + ReferenceTypes + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=86 + + + + + i=35 + + false + + i=31 + + + + 0 + + + + i=92 + + Object_1 + + 0 + XML Schema + + + + XML Schema + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=75 + + + + + i=35 + + true + + i=90 + + + + + i=47 + + false + + i=8252 + + + + 0 + + + + i=93 + + Object_1 + + 0 + OPC Binary + + + + OPC Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=75 + + + + + i=35 + + true + + i=90 + + + + + i=47 + + false + + i=7617 + + + + 0 + + + + i=94 + + DataType_64 + + 0 + PermissionType + + + + PermissionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15030 + + + + false + + + + + i=95 + + DataType_64 + + 0 + AccessRestrictionType + + + + AccessRestrictionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15035 + + + + false + + + + + i=96 + + DataType_64 + + 0 + RolePermissionType + + + + RolePermissionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=128 + + + + + i=38 + + false + + i=16126 + + + + + i=38 + + false + + i=15062 + + + + false + + + + + i=97 + + DataType_64 + + 0 + DataTypeDefinition + + + + DataTypeDefinition + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=99 + + + + + i=45 + + false + + i=100 + + + + + i=38 + + false + + i=121 + + + + + i=38 + + false + + i=14797 + + + + + i=38 + + false + + i=15063 + + + + true + + + + + i=98 + + DataType_64 + + 0 + StructureType + + + + StructureType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=14528 + + + + false + + + + + i=99 + + DataType_64 + + 0 + StructureDefinition + + + + StructureDefinition + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=97 + + + + + i=38 + + false + + i=122 + + + + + i=38 + + false + + i=14798 + + + + + i=38 + + false + + i=15066 + + + + false + + + + + i=100 + + DataType_64 + + 0 + EnumDefinition + + + + EnumDefinition + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=97 + + + + + i=38 + + false + + i=123 + + + + + i=38 + + false + + i=14799 + + + + + i=38 + + false + + i=15067 + + + + false + + + + + i=101 + + DataType_64 + + 0 + StructureField + + + + StructureField + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=14844 + + + + + i=38 + + false + + i=14800 + + + + + i=38 + + false + + i=15065 + + + + false + + + + + i=102 + + DataType_64 + + 0 + EnumField + + + + EnumField + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7594 + + + + + i=38 + + false + + i=14845 + + + + + i=38 + + false + + i=14801 + + + + + i=38 + + false + + i=15083 + + + + false + + + + + i=104 + + Variable_2 + + 0 + DataTypeVersion + + + + DataTypeVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=69 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=105 + + Variable_2 + + 0 + DictionaryFragment + + + + DictionaryFragment + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=69 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=106 + + Variable_2 + + 0 + DataTypeVersion + + + + DataTypeVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=72 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=107 + + Variable_2 + + 0 + NamespaceUri + + + + NamespaceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=72 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=111 + + Variable_2 + + 0 + NamingRule + + + + NamingRule + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=77 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=120 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=112 + + Variable_2 + + 0 + NamingRule + + + + NamingRule + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=78 + + + + + i=40 + + false + + i=68 + + + + + + 1 + + + + i=120 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=113 + + Variable_2 + + 0 + NamingRule + + + + NamingRule + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=80 + + + + + i=40 + + false + + i=68 + + + + + + 2 + + + + i=120 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=114 + + Variable_2 + + 0 + NamingRule + + + + NamingRule + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=83 + + + + + i=40 + + false + + i=68 + + + + + + 3 + + + + i=120 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=117 + + ReferenceType_32 + + 0 + HasSubStateMachine + + + + HasSubStateMachine + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + SubStateMachineOf + + + + + i=120 + + DataType_64 + + 0 + NamingRuleType + + + + NamingRuleType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=12169 + + + + false + + + + + i=121 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=97 + + + + + i=39 + + false + + i=18178 + + + + 0 + + + + i=122 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=99 + + + + + i=39 + + false + + i=18184 + + + + 0 + + + + i=123 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=100 + + + + + i=39 + + false + + i=18187 + + + + 0 + + + + i=124 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14523 + + + + + i=39 + + false + + i=14849 + + + + 0 + + + + i=125 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14525 + + + + + i=39 + + false + + i=14855 + + + + 0 + + + + i=126 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15487 + + + + + i=39 + + false + + i=15599 + + + + 0 + + + + i=127 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15488 + + + + + i=39 + + false + + i=15602 + + + + 0 + + + + i=128 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=96 + + + + + i=39 + + false + + i=16131 + + + + 0 + + + + i=129 + + ReferenceType_32 + + 0 + HasArgumentDescription + + + + HasArgumentDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + + i=45 + + false + + i=131 + + + + false + false + + + ArgumentDescriptionOf + + + + + i=131 + + ReferenceType_32 + + 0 + HasOptionalInputArgumentDescription + + + + HasOptionalInputArgumentDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=129 + + + + false + false + + + OptionalInputArgumentDescriptionOf + + + + + i=256 + + DataType_64 + + 0 + IdType + + + + IdType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7591 + + + + false + + + + + i=257 + + DataType_64 + + 0 + NodeClass + + + + NodeClass + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=11878 + + + + false + + + + + i=288 + + DataType_64 + + 0 + IntegerId + + + + IntegerId + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + false + + + + + i=289 + + DataType_64 + + 0 + Counter + + + + Counter + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + false + + + + + i=290 + + DataType_64 + + 0 + Duration + + + + Duration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11 + + + + false + + + + + i=291 + + DataType_64 + + 0 + NumericRange + + + + NumericRange + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=292 + + DataType_64 + + 0 + Time + + + + Time + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=293 + + DataType_64 + + 0 + Date + + + + Date + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=13 + + + + false + + + + + i=294 + + DataType_64 + + 0 + UtcTime + + + + UtcTime + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=13 + + + + false + + + + + i=295 + + DataType_64 + + 0 + LocaleId + + + + LocaleId + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=296 + + DataType_64 + + 0 + Argument + + + + Argument + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=298 + + + + + i=38 + + false + + i=297 + + + + + i=38 + + false + + i=15081 + + + + false + + + + + i=297 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=296 + + + + + i=39 + + false + + i=8285 + + + + 0 + + + + i=298 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=296 + + + + + i=39 + + false + + i=7650 + + + + 0 + + + + i=299 + + DataType_64 + + 0 + StatusResult + + + + StatusResult + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=301 + + + + + i=38 + + false + + i=300 + + + + + i=38 + + false + + i=15371 + + + + false + + + + + i=300 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=299 + + + + + i=39 + + false + + i=8294 + + + + 0 + + + + i=301 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=299 + + + + + i=39 + + false + + i=7659 + + + + 0 + + + + i=302 + + DataType_64 + + 0 + MessageSecurityMode + + + + MessageSecurityMode + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7595 + + + + false + + + + + i=303 + + DataType_64 + + 0 + UserTokenType + + + + UserTokenType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7596 + + + + false + + + + + i=304 + + DataType_64 + + 0 + UserTokenPolicy + + + + UserTokenPolicy + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=306 + + + + + i=38 + + false + + i=305 + + + + + i=38 + + false + + i=15098 + + + + false + + + + + i=305 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=304 + + + + + i=39 + + false + + i=8297 + + + + 0 + + + + i=306 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=304 + + + + + i=39 + + false + + i=7662 + + + + 0 + + + + i=307 + + DataType_64 + + 0 + ApplicationType + + + + ApplicationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7597 + + + + false + + + + + i=308 + + DataType_64 + + 0 + ApplicationDescription + + + + ApplicationDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=310 + + + + + i=38 + + false + + i=309 + + + + + i=38 + + false + + i=15087 + + + + false + + + + + i=309 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=308 + + + + + i=39 + + false + + i=8300 + + + + 0 + + + + i=310 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=308 + + + + + i=39 + + false + + i=7665 + + + + 0 + + + + i=311 + + DataType_64 + + 0 + ApplicationInstanceCertificate + + + + ApplicationInstanceCertificate + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15 + + + + false + + + + + i=312 + + DataType_64 + + 0 + EndpointDescription + + + + EndpointDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=314 + + + + + i=38 + + false + + i=313 + + + + + i=38 + + false + + i=15099 + + + + false + + + + + i=313 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=312 + + + + + i=39 + + false + + i=8303 + + + + 0 + + + + i=314 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=312 + + + + + i=39 + + false + + i=7668 + + + + 0 + + + + i=315 + + DataType_64 + + 0 + SecurityTokenRequestType + + + + SecurityTokenRequestType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7598 + + + + false + + + + + i=316 + + DataType_64 + + 0 + UserIdentityToken + + + + UserIdentityToken + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=319 + + + + + i=45 + + false + + i=322 + + + + + i=45 + + false + + i=325 + + + + + i=45 + + false + + i=938 + + + + + i=38 + + false + + i=318 + + + + + i=38 + + false + + i=317 + + + + + i=38 + + false + + i=15140 + + + + true + + + + + i=317 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=316 + + + + + i=39 + + false + + i=8306 + + + + 0 + + + + i=318 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=316 + + + + + i=39 + + false + + i=7671 + + + + 0 + + + + i=319 + + DataType_64 + + 0 + AnonymousIdentityToken + + + + AnonymousIdentityToken + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=316 + + + + + i=38 + + false + + i=321 + + + + + i=38 + + false + + i=320 + + + + + i=38 + + false + + i=15141 + + + + false + + + + + i=320 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=319 + + + + + i=39 + + false + + i=8309 + + + + 0 + + + + i=321 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=319 + + + + + i=39 + + false + + i=7674 + + + + 0 + + + + i=322 + + DataType_64 + + 0 + UserNameIdentityToken + + + + UserNameIdentityToken + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=316 + + + + + i=38 + + false + + i=324 + + + + + i=38 + + false + + i=323 + + + + + i=38 + + false + + i=15142 + + + + false + + + + + i=323 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=322 + + + + + i=39 + + false + + i=8312 + + + + 0 + + + + i=324 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=322 + + + + + i=39 + + false + + i=7677 + + + + 0 + + + + i=325 + + DataType_64 + + 0 + X509IdentityToken + + + + X509IdentityToken + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=316 + + + + + i=38 + + false + + i=327 + + + + + i=38 + + false + + i=326 + + + + + i=38 + + false + + i=15143 + + + + false + + + + + i=326 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=325 + + + + + i=39 + + false + + i=8315 + + + + 0 + + + + i=327 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=325 + + + + + i=39 + + false + + i=7680 + + + + 0 + + + + i=331 + + DataType_64 + + 0 + EndpointConfiguration + + + + EndpointConfiguration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=333 + + + + + i=38 + + false + + i=332 + + + + + i=38 + + false + + i=15199 + + + + false + + + + + i=332 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=331 + + + + + i=39 + + false + + i=8321 + + + + 0 + + + + i=333 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=331 + + + + + i=39 + + false + + i=7686 + + + + 0 + + + + i=338 + + DataType_64 + + 0 + BuildInfo + + + + BuildInfo + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=340 + + + + + i=38 + + false + + i=339 + + + + + i=38 + + false + + i=15361 + + + + false + + + + + i=339 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=338 + + + + + i=39 + + false + + i=8327 + + + + 0 + + + + i=340 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=338 + + + + + i=39 + + false + + i=7692 + + + + 0 + + + + i=344 + + DataType_64 + + 0 + SignedSoftwareCertificate + + + + SignedSoftwareCertificate + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=346 + + + + + i=38 + + false + + i=345 + + + + + i=38 + + false + + i=15136 + + + + false + + + + + i=345 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=344 + + + + + i=39 + + false + + i=8333 + + + + 0 + + + + i=346 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=344 + + + + + i=39 + + false + + i=7698 + + + + 0 + + + + i=347 + + DataType_64 + + 0 + AttributeWriteMask + + + + AttributeWriteMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15036 + + + + false + + + + + i=348 + + DataType_64 + + 0 + NodeAttributesMask + + + + NodeAttributesMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=11881 + + + + false + + + + + i=376 + + DataType_64 + + 0 + AddNodesItem + + + + AddNodesItem + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=378 + + + + + i=38 + + false + + i=377 + + + + + i=38 + + false + + i=15165 + + + + false + + + + + i=377 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=376 + + + + + i=39 + + false + + i=8363 + + + + 0 + + + + i=378 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=376 + + + + + i=39 + + false + + i=7728 + + + + 0 + + + + i=379 + + DataType_64 + + 0 + AddReferencesItem + + + + AddReferencesItem + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=381 + + + + + i=38 + + false + + i=380 + + + + + i=38 + + false + + i=15169 + + + + false + + + + + i=380 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=379 + + + + + i=39 + + false + + i=8366 + + + + 0 + + + + i=381 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=379 + + + + + i=39 + + false + + i=7731 + + + + 0 + + + + i=382 + + DataType_64 + + 0 + DeleteNodesItem + + + + DeleteNodesItem + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=384 + + + + + i=38 + + false + + i=383 + + + + + i=38 + + false + + i=15172 + + + + false + + + + + i=383 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=382 + + + + + i=39 + + false + + i=8369 + + + + 0 + + + + i=384 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=382 + + + + + i=39 + + false + + i=7734 + + + + 0 + + + + i=385 + + DataType_64 + + 0 + DeleteReferencesItem + + + + DeleteReferencesItem + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=387 + + + + + i=38 + + false + + i=386 + + + + + i=38 + + false + + i=15175 + + + + false + + + + + i=386 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=385 + + + + + i=39 + + false + + i=8372 + + + + 0 + + + + i=387 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=385 + + + + + i=39 + + false + + i=7737 + + + + 0 + + + + i=388 + + DataType_64 + + 0 + SessionAuthenticationToken + + + + SessionAuthenticationToken + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17 + + + + false + + + + + i=432 + + DataType_64 + + 0 + RegisteredServer + + + + RegisteredServer + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=434 + + + + + i=38 + + false + + i=433 + + + + + i=38 + + false + + i=15102 + + + + false + + + + + i=433 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=432 + + + + + i=39 + + false + + i=8417 + + + + 0 + + + + i=434 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=432 + + + + + i=39 + + false + + i=7782 + + + + 0 + + + + i=521 + + DataType_64 + + 0 + ContinuationPoint + + + + ContinuationPoint + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15 + + + + false + + + + + i=537 + + DataType_64 + + 0 + RelativePathElement + + + + RelativePathElement + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=539 + + + + + i=38 + + false + + i=538 + + + + + i=38 + + false + + i=15188 + + + + false + + + + + i=538 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=537 + + + + + i=39 + + false + + i=12712 + + + + 0 + + + + i=539 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=537 + + + + + i=39 + + false + + i=12718 + + + + 0 + + + + i=540 + + DataType_64 + + 0 + RelativePath + + + + RelativePath + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=542 + + + + + i=38 + + false + + i=541 + + + + + i=38 + + false + + i=15189 + + + + false + + + + + i=541 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=540 + + + + + i=39 + + false + + i=12715 + + + + 0 + + + + i=542 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=540 + + + + + i=39 + + false + + i=12721 + + + + 0 + + + + i=576 + + DataType_64 + + 0 + FilterOperator + + + + FilterOperator + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7605 + + + + false + + + + + i=583 + + DataType_64 + + 0 + ContentFilterElement + + + + ContentFilterElement + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=585 + + + + + i=38 + + false + + i=584 + + + + + i=38 + + false + + i=15204 + + + + false + + + + + i=584 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=583 + + + + + i=39 + + false + + i=8564 + + + + 0 + + + + i=585 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=583 + + + + + i=39 + + false + + i=7929 + + + + 0 + + + + i=586 + + DataType_64 + + 0 + ContentFilter + + + + ContentFilter + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=588 + + + + + i=38 + + false + + i=587 + + + + + i=38 + + false + + i=15205 + + + + false + + + + + i=587 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=586 + + + + + i=39 + + false + + i=8567 + + + + 0 + + + + i=588 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=586 + + + + + i=39 + + false + + i=7932 + + + + 0 + + + + i=589 + + DataType_64 + + 0 + FilterOperand + + + + FilterOperand + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=592 + + + + + i=45 + + false + + i=595 + + + + + i=45 + + false + + i=598 + + + + + i=45 + + false + + i=601 + + + + + i=38 + + false + + i=591 + + + + + i=38 + + false + + i=590 + + + + + i=38 + + false + + i=15206 + + + + false + + + + + i=590 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=589 + + + + + i=39 + + false + + i=8570 + + + + 0 + + + + i=591 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=589 + + + + + i=39 + + false + + i=7935 + + + + 0 + + + + i=592 + + DataType_64 + + 0 + ElementOperand + + + + ElementOperand + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=589 + + + + + i=38 + + false + + i=594 + + + + + i=38 + + false + + i=593 + + + + + i=38 + + false + + i=15207 + + + + false + + + + + i=593 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=592 + + + + + i=39 + + false + + i=8573 + + + + 0 + + + + i=594 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=592 + + + + + i=39 + + false + + i=7938 + + + + 0 + + + + i=595 + + DataType_64 + + 0 + LiteralOperand + + + + LiteralOperand + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=589 + + + + + i=38 + + false + + i=597 + + + + + i=38 + + false + + i=596 + + + + + i=38 + + false + + i=15208 + + + + false + + + + + i=596 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=595 + + + + + i=39 + + false + + i=8576 + + + + 0 + + + + i=597 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=595 + + + + + i=39 + + false + + i=7941 + + + + 0 + + + + i=598 + + DataType_64 + + 0 + AttributeOperand + + + + AttributeOperand + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=589 + + + + + i=38 + + false + + i=600 + + + + + i=38 + + false + + i=599 + + + + + i=38 + + false + + i=15209 + + + + false + + + + + i=599 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=598 + + + + + i=39 + + false + + i=8579 + + + + 0 + + + + i=600 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=598 + + + + + i=39 + + false + + i=7944 + + + + 0 + + + + i=601 + + DataType_64 + + 0 + SimpleAttributeOperand + + + + SimpleAttributeOperand + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=589 + + + + + i=38 + + false + + i=603 + + + + + i=38 + + false + + i=602 + + + + + i=38 + + false + + i=15210 + + + + false + + + + + i=602 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=601 + + + + + i=39 + + false + + i=8582 + + + + 0 + + + + i=603 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=601 + + + + + i=39 + + false + + i=7947 + + + + 0 + + + + i=659 + + DataType_64 + + 0 + HistoryEvent + + + + HistoryEvent + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=661 + + + + + i=38 + + false + + i=660 + + + + + i=38 + + false + + i=15273 + + + + false + + + + + i=660 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=659 + + + + + i=39 + + false + + i=8639 + + + + 0 + + + + i=661 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=659 + + + + + i=39 + + false + + i=8004 + + + + 0 + + + + i=719 + + DataType_64 + + 0 + MonitoringFilter + + + + MonitoringFilter + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=725 + + + + + i=38 + + false + + i=721 + + + + + i=38 + + false + + i=720 + + + + + i=38 + + false + + i=15293 + + + + false + + + + + i=720 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=719 + + + + + i=39 + + false + + i=8702 + + + + 0 + + + + i=721 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=719 + + + + + i=39 + + false + + i=8067 + + + + 0 + + + + i=725 + + DataType_64 + + 0 + EventFilter + + + + EventFilter + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=719 + + + + + i=38 + + false + + i=727 + + + + + i=38 + + false + + i=726 + + + + + i=38 + + false + + i=15295 + + + + false + + + + + i=726 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=725 + + + + + i=39 + + false + + i=8708 + + + + 0 + + + + i=727 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=725 + + + + + i=39 + + false + + i=8073 + + + + 0 + + + + i=851 + + DataType_64 + + 0 + RedundancySupport + + + + RedundancySupport + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7611 + + + + false + + + + + i=852 + + DataType_64 + + 0 + ServerState + + + + ServerState + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7612 + + + + false + + + + + i=853 + + DataType_64 + + 0 + RedundantServerDataType + + + + RedundantServerDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=855 + + + + + i=38 + + false + + i=854 + + + + + i=38 + + false + + i=15362 + + + + false + + + + + i=854 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=853 + + + + + i=39 + + false + + i=8843 + + + + 0 + + + + i=855 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=853 + + + + + i=39 + + false + + i=8208 + + + + 0 + + + + i=856 + + DataType_64 + + 0 + SamplingIntervalDiagnosticsDataType + + + + SamplingIntervalDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=858 + + + + + i=38 + + false + + i=857 + + + + + i=38 + + false + + i=15365 + + + + false + + + + + i=857 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=856 + + + + + i=39 + + false + + i=8846 + + + + 0 + + + + i=858 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=856 + + + + + i=39 + + false + + i=8211 + + + + 0 + + + + i=859 + + DataType_64 + + 0 + ServerDiagnosticsSummaryDataType + + + + ServerDiagnosticsSummaryDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=861 + + + + + i=38 + + false + + i=860 + + + + + i=38 + + false + + i=15366 + + + + false + + + + + i=860 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=859 + + + + + i=39 + + false + + i=8849 + + + + 0 + + + + i=861 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=859 + + + + + i=39 + + false + + i=8214 + + + + 0 + + + + i=862 + + DataType_64 + + 0 + ServerStatusDataType + + + + ServerStatusDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=864 + + + + + i=38 + + false + + i=863 + + + + + i=38 + + false + + i=15367 + + + + false + + + + + i=863 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=862 + + + + + i=39 + + false + + i=8852 + + + + 0 + + + + i=864 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=862 + + + + + i=39 + + false + + i=8217 + + + + 0 + + + + i=865 + + DataType_64 + + 0 + SessionDiagnosticsDataType + + + + SessionDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=867 + + + + + i=38 + + false + + i=866 + + + + + i=38 + + false + + i=15368 + + + + false + + + + + i=866 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=865 + + + + + i=39 + + false + + i=8855 + + + + 0 + + + + i=867 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=865 + + + + + i=39 + + false + + i=8220 + + + + 0 + + + + i=868 + + DataType_64 + + 0 + SessionSecurityDiagnosticsDataType + + + + SessionSecurityDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=870 + + + + + i=38 + + false + + i=869 + + + + + i=38 + + false + + i=15369 + + + + false + + + + + i=869 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=868 + + + + + i=39 + + false + + i=8858 + + + + 0 + + + + i=870 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=868 + + + + + i=39 + + false + + i=8223 + + + + 0 + + + + i=871 + + DataType_64 + + 0 + ServiceCounterDataType + + + + ServiceCounterDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=873 + + + + + i=38 + + false + + i=872 + + + + + i=38 + + false + + i=15370 + + + + false + + + + + i=872 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=871 + + + + + i=39 + + false + + i=8861 + + + + 0 + + + + i=873 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=871 + + + + + i=39 + + false + + i=8226 + + + + 0 + + + + i=874 + + DataType_64 + + 0 + SubscriptionDiagnosticsDataType + + + + SubscriptionDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=876 + + + + + i=38 + + false + + i=875 + + + + + i=38 + + false + + i=15372 + + + + false + + + + + i=875 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=874 + + + + + i=39 + + false + + i=8864 + + + + 0 + + + + i=876 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=874 + + + + + i=39 + + false + + i=8229 + + + + 0 + + + + i=877 + + DataType_64 + + 0 + ModelChangeStructureDataType + + + + ModelChangeStructureDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=879 + + + + + i=38 + + false + + i=878 + + + + + i=38 + + false + + i=15373 + + + + false + + + + + i=878 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=877 + + + + + i=39 + + false + + i=8867 + + + + 0 + + + + i=879 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=877 + + + + + i=39 + + false + + i=8232 + + + + 0 + + + + i=884 + + DataType_64 + + 0 + Range + + + + Range + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=886 + + + + + i=38 + + false + + i=885 + + + + + i=38 + + false + + i=15375 + + + + false + + + + + i=885 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=884 + + + + + i=39 + + false + + i=8873 + + + + 0 + + + + i=886 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=884 + + + + + i=39 + + false + + i=8238 + + + + 0 + + + + i=887 + + DataType_64 + + 0 + EUInformation + + + + EUInformation + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=889 + + + + + i=38 + + false + + i=888 + + + + + i=38 + + false + + i=15376 + + + + false + + + + + i=888 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=887 + + + + + i=39 + + false + + i=8876 + + + + 0 + + + + i=889 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=887 + + + + + i=39 + + false + + i=8241 + + + + 0 + + + + i=890 + + DataType_64 + + 0 + ExceptionDeviationFormat + + + + ExceptionDeviationFormat + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=7614 + + + + false + + + + + i=891 + + DataType_64 + + 0 + Annotation + + + + Annotation + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=893 + + + + + i=38 + + false + + i=892 + + + + + i=38 + + false + + i=15382 + + + + false + + + + + i=892 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=891 + + + + + i=39 + + false + + i=8879 + + + + 0 + + + + i=893 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=891 + + + + + i=39 + + false + + i=8244 + + + + 0 + + + + i=894 + + DataType_64 + + 0 + ProgramDiagnosticDataType + + + + ProgramDiagnosticDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=896 + + + + + i=38 + + false + + i=895 + + + + + i=38 + + false + + i=15381 + + + + false + + + + + i=895 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=894 + + + + + i=39 + + false + + i=8882 + + + + 0 + + + + i=896 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=894 + + + + + i=39 + + false + + i=8247 + + + + 0 + + + + i=897 + + DataType_64 + + 0 + SemanticChangeStructureDataType + + + + SemanticChangeStructureDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=899 + + + + + i=38 + + false + + i=898 + + + + + i=38 + + false + + i=15374 + + + + false + + + + + i=898 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=897 + + + + + i=39 + + false + + i=8870 + + + + 0 + + + + i=899 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=897 + + + + + i=39 + + false + + i=8235 + + + + 0 + + + + i=920 + + DataType_64 + + 0 + HistoryEventFieldList + + + + HistoryEventFieldList + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=922 + + + + + i=38 + + false + + i=921 + + + + + i=38 + + false + + i=15349 + + + + false + + + + + i=921 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=920 + + + + + i=39 + + false + + i=8807 + + + + 0 + + + + i=922 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=920 + + + + + i=39 + + false + + i=8172 + + + + 0 + + + + i=938 + + DataType_64 + + 0 + IssuedIdentityToken + + + + IssuedIdentityToken + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=316 + + + + + i=38 + + false + + i=940 + + + + + i=38 + + false + + i=939 + + + + + i=38 + + false + + i=15144 + + + + false + + + + + i=939 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=938 + + + + + i=39 + + false + + i=8318 + + + + 0 + + + + i=940 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=938 + + + + + i=39 + + false + + i=7683 + + + + 0 + + + + i=948 + + DataType_64 + + 0 + AggregateConfiguration + + + + AggregateConfiguration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=950 + + + + + i=38 + + false + + i=949 + + + + + i=38 + + false + + i=15304 + + + + false + + + + + i=949 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=948 + + + + + i=39 + + false + + i=8711 + + + + 0 + + + + i=950 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=948 + + + + + i=39 + + false + + i=8076 + + + + 0 + + + + i=2000 + + DataType_64 + + 0 + ImageBMP + + + + ImageBMP + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=30 + + + + false + + + + + i=2001 + + DataType_64 + + 0 + ImageGIF + + + + ImageGIF + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=30 + + + + false + + + + + i=2002 + + DataType_64 + + 0 + ImageJPG + + + + ImageJPG + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=30 + + + + false + + + + + i=2003 + + DataType_64 + + 0 + ImagePNG + + + + ImagePNG + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=30 + + + + false + + + + + i=2004 + + ObjectType_8 + + 0 + ServerType + + + + ServerType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2005 + + + + + i=46 + + false + + i=2006 + + + + + i=46 + + false + + i=15003 + + + + + i=47 + + false + + i=2007 + + + + + i=46 + + false + + i=2008 + + + + + i=46 + + false + + i=2742 + + + + + i=46 + + false + + i=12882 + + + + + i=46 + + false + + i=17612 + + + + + i=47 + + false + + i=2009 + + + + + i=47 + + false + + i=2010 + + + + + i=47 + + false + + i=2011 + + + + + i=47 + + false + + i=2012 + + + + + i=47 + + false + + i=11527 + + + + + i=47 + + false + + i=11489 + + + + + i=47 + + false + + i=12871 + + + + + i=47 + + false + + i=12746 + + + + + i=47 + + false + + i=12883 + + + + false + + + + i=2005 + + Variable_2 + + 0 + ServerArray + + + + ServerArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 1000 + false + 0 + + + + i=2006 + + Variable_2 + + 0 + NamespaceArray + + + + NamespaceArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 1000 + false + 0 + + + + i=2007 + + Variable_2 + + 0 + ServerStatus + + + + ServerStatus + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=2138 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3074 + + + + + i=47 + + false + + i=3075 + + + + + i=47 + + false + + i=3076 + + + + + i=47 + + false + + i=3077 + + + + + i=47 + + false + + i=3084 + + + + + i=47 + + false + + i=3085 + + + + + + + + + + i=862 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2008 + + Variable_2 + + 0 + ServiceLevel + + + + ServiceLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2009 + + Object_1 + + 0 + ServerCapabilities + + + + ServerCapabilities + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=2013 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3086 + + + + + i=46 + + false + + i=3087 + + + + + i=46 + + false + + i=3088 + + + + + i=46 + + false + + i=3089 + + + + + i=46 + + false + + i=3090 + + + + + i=46 + + false + + i=3091 + + + + + i=46 + + false + + i=3092 + + + + + i=47 + + false + + i=3093 + + + + + i=47 + + false + + i=3094 + + + + 0 + + + + i=2010 + + Object_1 + + 0 + ServerDiagnostics + + + + ServerDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=2020 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3095 + + + + + i=47 + + false + + i=3110 + + + + + i=47 + + false + + i=3111 + + + + + i=46 + + false + + i=3114 + + + + 0 + + + + i=2011 + + Object_1 + + 0 + VendorServerInfo + + + + VendorServerInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=2033 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=2012 + + Object_1 + + 0 + ServerRedundancy + + + + ServerRedundancy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=2034 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3115 + + + + 0 + + + + i=2013 + + ObjectType_8 + + 0 + ServerCapabilitiesType + + + + ServerCapabilitiesType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2014 + + + + + i=46 + + false + + i=2016 + + + + + i=46 + + false + + i=2017 + + + + + i=46 + + false + + i=2732 + + + + + i=46 + + false + + i=2733 + + + + + i=46 + + false + + i=2734 + + + + + i=46 + + false + + i=3049 + + + + + i=46 + + false + + i=11549 + + + + + i=46 + + false + + i=11550 + + + + + i=46 + + false + + i=12910 + + + + + i=47 + + false + + i=11551 + + + + + i=47 + + false + + i=2019 + + + + + i=47 + + false + + i=2754 + + + + + i=47 + + false + + i=11562 + + + + + i=47 + + false + + i=16295 + + + + false + + + + i=2014 + + Variable_2 + + 0 + ServerProfileArray + + + + ServerProfileArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2016 + + Variable_2 + + 0 + LocaleIdArray + + + + LocaleIdArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2017 + + Variable_2 + + 0 + MinSupportedSampleRate + + + + MinSupportedSampleRate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2019 + + Object_1 + + 0 + ModellingRules + + + + ModellingRules + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2013 + + + + + i=40 + + false + + i=61 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=2020 + + ObjectType_8 + + 0 + ServerDiagnosticsType + + + + ServerDiagnosticsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=2021 + + + + + i=47 + + false + + i=2022 + + + + + i=47 + + false + + i=2023 + + + + + i=47 + + false + + i=2744 + + + + + i=46 + + false + + i=2025 + + + + false + + + + i=2021 + + Variable_2 + + 0 + ServerDiagnosticsSummary + + + + ServerDiagnosticsSummary + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2020 + + + + + i=40 + + false + + i=2150 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3116 + + + + + i=47 + + false + + i=3117 + + + + + i=47 + + false + + i=3118 + + + + + i=47 + + false + + i=3119 + + + + + i=47 + + false + + i=3120 + + + + + i=47 + + false + + i=3121 + + + + + i=47 + + false + + i=3122 + + + + + i=47 + + false + + i=3124 + + + + + i=47 + + false + + i=3125 + + + + + i=47 + + false + + i=3126 + + + + + i=47 + + false + + i=3127 + + + + + i=47 + + false + + i=3128 + + + + + + + + + + i=859 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2022 + + Variable_2 + + 0 + SamplingIntervalDiagnosticsArray + + + + SamplingIntervalDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2020 + + + + + i=40 + + false + + i=2164 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=856 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2023 + + Variable_2 + + 0 + SubscriptionDiagnosticsArray + + + + SubscriptionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2020 + + + + + i=40 + + false + + i=2171 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=874 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2025 + + Variable_2 + + 0 + EnabledFlag + + + + EnabledFlag + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2020 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 3 + 3 + 0 + false + 0 + + + + i=2026 + + ObjectType_8 + + 0 + SessionsDiagnosticsSummaryType + + + + SessionsDiagnosticsSummaryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=2027 + + + + + i=47 + + false + + i=2028 + + + + + i=47 + + false + + i=12097 + + + + false + + + + i=2027 + + Variable_2 + + 0 + SessionDiagnosticsArray + + + + SessionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2026 + + + + + i=40 + + false + + i=2196 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=865 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2028 + + Variable_2 + + 0 + SessionSecurityDiagnosticsArray + + + + SessionSecurityDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2026 + + + + + i=40 + + false + + i=2243 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=868 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2029 + + ObjectType_8 + + 0 + SessionDiagnosticsObjectType + + + + SessionDiagnosticsObjectType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=2030 + + + + + i=47 + + false + + i=2031 + + + + + i=47 + + false + + i=2032 + + + + false + + + + i=2030 + + Variable_2 + + 0 + SessionDiagnostics + + + + SessionDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2029 + + + + + i=40 + + false + + i=2197 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3131 + + + + + i=47 + + false + + i=3132 + + + + + i=47 + + false + + i=3133 + + + + + i=47 + + false + + i=3134 + + + + + i=47 + + false + + i=3135 + + + + + i=47 + + false + + i=3136 + + + + + i=47 + + false + + i=3137 + + + + + i=47 + + false + + i=3138 + + + + + i=47 + + false + + i=3139 + + + + + i=47 + + false + + i=3140 + + + + + i=47 + + false + + i=3141 + + + + + i=47 + + false + + i=3142 + + + + + i=47 + + false + + i=3143 + + + + + i=47 + + false + + i=8898 + + + + + i=47 + + false + + i=11891 + + + + + i=47 + + false + + i=3151 + + + + + i=47 + + false + + i=3152 + + + + + i=47 + + false + + i=3153 + + + + + i=47 + + false + + i=3154 + + + + + i=47 + + false + + i=3155 + + + + + i=47 + + false + + i=3156 + + + + + i=47 + + false + + i=3157 + + + + + i=47 + + false + + i=3158 + + + + + i=47 + + false + + i=3159 + + + + + i=47 + + false + + i=3160 + + + + + i=47 + + false + + i=3161 + + + + + i=47 + + false + + i=3162 + + + + + i=47 + + false + + i=3163 + + + + + i=47 + + false + + i=3164 + + + + + i=47 + + false + + i=3165 + + + + + i=47 + + false + + i=3166 + + + + + i=47 + + false + + i=3167 + + + + + i=47 + + false + + i=3168 + + + + + i=47 + + false + + i=3169 + + + + + i=47 + + false + + i=3170 + + + + + i=47 + + false + + i=3171 + + + + + i=47 + + false + + i=3172 + + + + + i=47 + + false + + i=3173 + + + + + i=47 + + false + + i=3174 + + + + + i=47 + + false + + i=3175 + + + + + i=47 + + false + + i=3176 + + + + + i=47 + + false + + i=3177 + + + + + i=47 + + false + + i=3178 + + + + + + + + + + i=865 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2031 + + Variable_2 + + 0 + SessionSecurityDiagnostics + + + + SessionSecurityDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2029 + + + + + i=40 + + false + + i=2244 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3179 + + + + + i=47 + + false + + i=3180 + + + + + i=47 + + false + + i=3181 + + + + + i=47 + + false + + i=3182 + + + + + i=47 + + false + + i=3183 + + + + + i=47 + + false + + i=3184 + + + + + i=47 + + false + + i=3185 + + + + + i=47 + + false + + i=3186 + + + + + i=47 + + false + + i=3187 + + + + + + + + + + i=868 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2032 + + Variable_2 + + 0 + SubscriptionDiagnosticsArray + + + + SubscriptionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2029 + + + + + i=40 + + false + + i=2171 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=874 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2033 + + ObjectType_8 + + 0 + VendorServerInfoType + + + + VendorServerInfoType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + false + + + + i=2034 + + ObjectType_8 + + 0 + ServerRedundancyType + + + + ServerRedundancyType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2035 + + + + + i=45 + + false + + i=2036 + + + + + i=45 + + false + + i=2039 + + + + false + + + + i=2035 + + Variable_2 + + 0 + RedundancySupport + + + + RedundancySupport + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2034 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=851 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2036 + + ObjectType_8 + + 0 + TransparentRedundancyType + + + + TransparentRedundancyType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2034 + + + + + i=46 + + false + + i=2037 + + + + + i=46 + + false + + i=2038 + + + + false + + + + i=2037 + + Variable_2 + + 0 + CurrentServerId + + + + CurrentServerId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2036 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2038 + + Variable_2 + + 0 + RedundantServerArray + + + + RedundantServerArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2036 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=853 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2039 + + ObjectType_8 + + 0 + NonTransparentRedundancyType + + + + NonTransparentRedundancyType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2034 + + + + + i=46 + + false + + i=2040 + + + + + i=45 + + false + + i=11945 + + + + false + + + + i=2040 + + Variable_2 + + 0 + ServerUriArray + + + + ServerUriArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2039 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2041 + + ObjectType_8 + + 0 + BaseEventType + + + + BaseEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2042 + + + + + i=46 + + false + + i=2043 + + + + + i=46 + + false + + i=2044 + + + + + i=46 + + false + + i=2045 + + + + + i=46 + + false + + i=2046 + + + + + i=46 + + false + + i=2047 + + + + + i=46 + + false + + i=3190 + + + + + i=46 + + false + + i=2050 + + + + + i=46 + + false + + i=2051 + + + + + i=45 + + false + + i=2052 + + + + + i=45 + + false + + i=2130 + + + + + i=45 + + false + + i=2132 + + + + + i=45 + + false + + i=2738 + + + + + i=45 + + false + + i=3035 + + + + + i=45 + + false + + i=11436 + + + + + i=35 + + true + + i=3048 + + + + + i=45 + + false + + i=2311 + + + + + i=45 + + false + + i=2782 + + + + true + + + + i=2042 + + Variable_2 + + 0 + EventId + + + + EventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2043 + + Variable_2 + + 0 + EventType + + + + EventType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2044 + + Variable_2 + + 0 + SourceNode + + + + SourceNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2045 + + Variable_2 + + 0 + SourceName + + + + SourceName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2046 + + Variable_2 + + 0 + Time + + + + Time + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2047 + + Variable_2 + + 0 + ReceiveTime + + + + ReceiveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2050 + + Variable_2 + + 0 + Message + + + + Message + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2051 + + Variable_2 + + 0 + Severity + + + + Severity + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2052 + + ObjectType_8 + + 0 + AuditEventType + + + + AuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=46 + + false + + i=2053 + + + + + i=46 + + false + + i=2054 + + + + + i=46 + + false + + i=2055 + + + + + i=46 + + false + + i=2056 + + + + + i=46 + + false + + i=2057 + + + + + i=45 + + false + + i=2058 + + + + + i=45 + + false + + i=2090 + + + + + i=45 + + false + + i=2099 + + + + + i=45 + + false + + i=2127 + + + + true + + + + i=2053 + + Variable_2 + + 0 + ActionTimeStamp + + + + ActionTimeStamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2054 + + Variable_2 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2055 + + Variable_2 + + 0 + ServerId + + + + ServerId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2056 + + Variable_2 + + 0 + ClientAuditEntryId + + + + ClientAuditEntryId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2057 + + Variable_2 + + 0 + ClientUserId + + + + ClientUserId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2058 + + ObjectType_8 + + 0 + AuditSecurityEventType + + + + AuditSecurityEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2052 + + + + + i=46 + + false + + i=17615 + + + + + i=45 + + false + + i=2059 + + + + + i=45 + + false + + i=2069 + + + + + i=45 + + false + + i=2080 + + + + true + + + + i=2059 + + ObjectType_8 + + 0 + AuditChannelEventType + + + + AuditChannelEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2058 + + + + + i=46 + + false + + i=2745 + + + + + i=45 + + false + + i=2060 + + + + true + + + + i=2060 + + ObjectType_8 + + 0 + AuditOpenSecureChannelEventType + + + + AuditOpenSecureChannelEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2059 + + + + + i=46 + + false + + i=2061 + + + + + i=46 + + false + + i=2746 + + + + + i=46 + + false + + i=2062 + + + + + i=46 + + false + + i=2063 + + + + + i=46 + + false + + i=2065 + + + + + i=46 + + false + + i=2066 + + + + true + + + + i=2061 + + Variable_2 + + 0 + ClientCertificate + + + + ClientCertificate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2060 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2062 + + Variable_2 + + 0 + RequestType + + + + RequestType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2060 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=315 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2063 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2060 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2065 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2060 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2066 + + Variable_2 + + 0 + RequestedLifetime + + + + RequestedLifetime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2060 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2069 + + ObjectType_8 + + 0 + AuditSessionEventType + + + + AuditSessionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2058 + + + + + i=46 + + false + + i=2070 + + + + + i=45 + + false + + i=2071 + + + + + i=45 + + false + + i=2075 + + + + + i=45 + + false + + i=2078 + + + + true + + + + i=2070 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2069 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2071 + + ObjectType_8 + + 0 + AuditCreateSessionEventType + + + + AuditCreateSessionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2069 + + + + + i=46 + + false + + i=2072 + + + + + i=46 + + false + + i=2073 + + + + + i=46 + + false + + i=2747 + + + + + i=46 + + false + + i=2074 + + + + + i=45 + + false + + i=2748 + + + + true + + + + i=2072 + + Variable_2 + + 0 + SecureChannelId + + + + SecureChannelId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2071 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2073 + + Variable_2 + + 0 + ClientCertificate + + + + ClientCertificate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2071 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2074 + + Variable_2 + + 0 + RevisedSessionTimeout + + + + RevisedSessionTimeout + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2071 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2075 + + ObjectType_8 + + 0 + AuditActivateSessionEventType + + + + AuditActivateSessionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2069 + + + + + i=46 + + false + + i=2076 + + + + + i=46 + + false + + i=2077 + + + + + i=46 + + false + + i=11485 + + + + true + + + + i=2076 + + Variable_2 + + 0 + ClientSoftwareCertificates + + + + ClientSoftwareCertificates + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2075 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=344 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2077 + + Variable_2 + + 0 + UserIdentityToken + + + + UserIdentityToken + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2075 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=316 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2078 + + ObjectType_8 + + 0 + AuditCancelEventType + + + + AuditCancelEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2069 + + + + + i=46 + + false + + i=2079 + + + + true + + + + i=2079 + + Variable_2 + + 0 + RequestHandle + + + + RequestHandle + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2078 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2080 + + ObjectType_8 + + 0 + AuditCertificateEventType + + + + AuditCertificateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2058 + + + + + i=46 + + false + + i=2081 + + + + + i=45 + + false + + i=2082 + + + + + i=45 + + false + + i=2085 + + + + + i=45 + + false + + i=2086 + + + + + i=45 + + false + + i=2087 + + + + + i=45 + + false + + i=2088 + + + + + i=45 + + false + + i=2089 + + + + true + + + + i=2081 + + Variable_2 + + 0 + Certificate + + + + Certificate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2080 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2082 + + ObjectType_8 + + 0 + AuditCertificateDataMismatchEventType + + + + AuditCertificateDataMismatchEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2080 + + + + + i=46 + + false + + i=2083 + + + + + i=46 + + false + + i=2084 + + + + true + + + + i=2083 + + Variable_2 + + 0 + InvalidHostname + + + + InvalidHostname + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2082 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2084 + + Variable_2 + + 0 + InvalidUri + + + + InvalidUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2082 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2085 + + ObjectType_8 + + 0 + AuditCertificateExpiredEventType + + + + AuditCertificateExpiredEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2080 + + + + true + + + + i=2086 + + ObjectType_8 + + 0 + AuditCertificateInvalidEventType + + + + AuditCertificateInvalidEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2080 + + + + true + + + + i=2087 + + ObjectType_8 + + 0 + AuditCertificateUntrustedEventType + + + + AuditCertificateUntrustedEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2080 + + + + true + + + + i=2088 + + ObjectType_8 + + 0 + AuditCertificateRevokedEventType + + + + AuditCertificateRevokedEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2080 + + + + true + + + + i=2089 + + ObjectType_8 + + 0 + AuditCertificateMismatchEventType + + + + AuditCertificateMismatchEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2080 + + + + true + + + + i=2090 + + ObjectType_8 + + 0 + AuditNodeManagementEventType + + + + AuditNodeManagementEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2052 + + + + + i=45 + + false + + i=2091 + + + + + i=45 + + false + + i=2093 + + + + + i=45 + + false + + i=2095 + + + + + i=45 + + false + + i=2097 + + + + true + + + + i=2091 + + ObjectType_8 + + 0 + AuditAddNodesEventType + + + + AuditAddNodesEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2090 + + + + + i=46 + + false + + i=2092 + + + + true + + + + i=2092 + + Variable_2 + + 0 + NodesToAdd + + + + NodesToAdd + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2091 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=376 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2093 + + ObjectType_8 + + 0 + AuditDeleteNodesEventType + + + + AuditDeleteNodesEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2090 + + + + + i=46 + + false + + i=2094 + + + + true + + + + i=2094 + + Variable_2 + + 0 + NodesToDelete + + + + NodesToDelete + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=382 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2095 + + ObjectType_8 + + 0 + AuditAddReferencesEventType + + + + AuditAddReferencesEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2090 + + + + + i=46 + + false + + i=2096 + + + + true + + + + i=2096 + + Variable_2 + + 0 + ReferencesToAdd + + + + ReferencesToAdd + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2095 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=379 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2097 + + ObjectType_8 + + 0 + AuditDeleteReferencesEventType + + + + AuditDeleteReferencesEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2090 + + + + + i=46 + + false + + i=2098 + + + + true + + + + i=2098 + + Variable_2 + + 0 + ReferencesToDelete + + + + ReferencesToDelete + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2097 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=385 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2099 + + ObjectType_8 + + 0 + AuditUpdateEventType + + + + AuditUpdateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2052 + + + + + i=45 + + false + + i=2100 + + + + + i=45 + + false + + i=2104 + + + + true + + + + i=2100 + + ObjectType_8 + + 0 + AuditWriteUpdateEventType + + + + AuditWriteUpdateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2099 + + + + + i=46 + + false + + i=2750 + + + + + i=46 + + false + + i=2101 + + + + + i=46 + + false + + i=2102 + + + + + i=46 + + false + + i=2103 + + + + true + + + + i=2101 + + Variable_2 + + 0 + IndexRange + + + + IndexRange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2100 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=291 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2102 + + Variable_2 + + 0 + OldValue + + + + OldValue + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2100 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2103 + + Variable_2 + + 0 + NewValue + + + + NewValue + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2100 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2104 + + ObjectType_8 + + 0 + AuditHistoryUpdateEventType + + + + AuditHistoryUpdateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2099 + + + + + i=46 + + false + + i=2751 + + + + + i=45 + + false + + i=2999 + + + + + i=45 + + false + + i=3006 + + + + + i=45 + + false + + i=19095 + + + + + i=45 + + false + + i=3012 + + + + true + + + + i=2127 + + ObjectType_8 + + 0 + AuditUpdateMethodEventType + + + + AuditUpdateMethodEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2052 + + + + + i=46 + + false + + i=2128 + + + + + i=46 + + false + + i=2129 + + + + + i=45 + + false + + i=2315 + + + + + i=45 + + false + + i=17641 + + + + + i=45 + + false + + i=2790 + + + + + i=3065 + + true + + i=18666 + + + + + i=45 + + false + + i=12561 + + + + + i=45 + + false + + i=12620 + + + + + i=45 + + false + + i=18011 + + + + true + + + + i=2128 + + Variable_2 + + 0 + MethodId + + + + MethodId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2127 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2129 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2127 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2130 + + ObjectType_8 + + 0 + SystemEventType + + + + SystemEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=45 + + false + + i=2131 + + + + + i=45 + + false + + i=11446 + + + + + i=45 + + false + + i=2787 + + + + + i=45 + + false + + i=2788 + + + + + i=45 + + false + + i=2789 + + + + + i=45 + + false + + i=15535 + + + + true + + + + i=2131 + + ObjectType_8 + + 0 + DeviceFailureEventType + + + + DeviceFailureEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2130 + + + + true + + + + i=2132 + + ObjectType_8 + + 0 + BaseModelChangeEventType + + + + BaseModelChangeEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=45 + + false + + i=2133 + + + + true + + + + i=2133 + + ObjectType_8 + + 0 + GeneralModelChangeEventType + + + + GeneralModelChangeEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2132 + + + + + i=46 + + false + + i=2134 + + + + + i=41 + + true + + i=23518 + + + + true + + + + i=2134 + + Variable_2 + + 0 + Changes + + + + Changes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2133 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=877 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2137 + + VariableType_16 + + 0 + ServerVendorCapabilityType + + + + ServerVendorCapabilityType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + + + + + + i=24 + + -1 + + true + + + + i=2138 + + VariableType_16 + + 0 + ServerStatusType + + + + ServerStatusType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=2139 + + + + + i=47 + + false + + i=2140 + + + + + i=47 + + false + + i=2141 + + + + + i=47 + + false + + i=2142 + + + + + i=47 + + false + + i=2752 + + + + + i=47 + + false + + i=2753 + + + + + + + + + + i=862 + + -1 + + false + + + + i=2139 + + Variable_2 + + 0 + StartTime + + + + StartTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2138 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2140 + + Variable_2 + + 0 + CurrentTime + + + + CurrentTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2138 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2141 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2138 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=852 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2142 + + Variable_2 + + 0 + BuildInfo + + + + BuildInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2138 + + + + + i=40 + + false + + i=3051 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3698 + + + + + i=47 + + false + + i=3699 + + + + + i=47 + + false + + i=3700 + + + + + i=47 + + false + + i=3701 + + + + + i=47 + + false + + i=3702 + + + + + i=47 + + false + + i=3703 + + + + + + + + + + i=338 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2150 + + VariableType_16 + + 0 + ServerDiagnosticsSummaryType + + + + ServerDiagnosticsSummaryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=2151 + + + + + i=47 + + false + + i=2152 + + + + + i=47 + + false + + i=2153 + + + + + i=47 + + false + + i=2154 + + + + + i=47 + + false + + i=2155 + + + + + i=47 + + false + + i=2156 + + + + + i=47 + + false + + i=2157 + + + + + i=47 + + false + + i=2159 + + + + + i=47 + + false + + i=2160 + + + + + i=47 + + false + + i=2161 + + + + + i=47 + + false + + i=2162 + + + + + i=47 + + false + + i=2163 + + + + + + + + + + i=859 + + -1 + + false + + + + i=2151 + + Variable_2 + + 0 + ServerViewCount + + + + ServerViewCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2152 + + Variable_2 + + 0 + CurrentSessionCount + + + + CurrentSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2153 + + Variable_2 + + 0 + CumulatedSessionCount + + + + CumulatedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2154 + + Variable_2 + + 0 + SecurityRejectedSessionCount + + + + SecurityRejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2155 + + Variable_2 + + 0 + RejectedSessionCount + + + + RejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2156 + + Variable_2 + + 0 + SessionTimeoutCount + + + + SessionTimeoutCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2157 + + Variable_2 + + 0 + SessionAbortCount + + + + SessionAbortCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2159 + + Variable_2 + + 0 + PublishingIntervalCount + + + + PublishingIntervalCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2160 + + Variable_2 + + 0 + CurrentSubscriptionCount + + + + CurrentSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2161 + + Variable_2 + + 0 + CumulatedSubscriptionCount + + + + CumulatedSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2162 + + Variable_2 + + 0 + SecurityRejectedRequestsCount + + + + SecurityRejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2163 + + Variable_2 + + 0 + RejectedRequestsCount + + + + RejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2150 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2164 + + VariableType_16 + + 0 + SamplingIntervalDiagnosticsArrayType + + + + SamplingIntervalDiagnosticsArrayType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=12779 + + + + + + + + + + i=856 + + 1 + + 0 + + false + + + + i=2165 + + VariableType_16 + + 0 + SamplingIntervalDiagnosticsType + + + + SamplingIntervalDiagnosticsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=2166 + + + + + i=47 + + false + + i=11697 + + + + + i=47 + + false + + i=11698 + + + + + i=47 + + false + + i=11699 + + + + + + + + + + i=856 + + -1 + + false + + + + i=2166 + + Variable_2 + + 0 + SamplingInterval + + + + SamplingInterval + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2165 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2171 + + VariableType_16 + + 0 + SubscriptionDiagnosticsArrayType + + + + SubscriptionDiagnosticsArrayType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=12784 + + + + + + + + + + i=874 + + 1 + + 0 + + false + + + + i=2172 + + VariableType_16 + + 0 + SubscriptionDiagnosticsType + + + + SubscriptionDiagnosticsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=2173 + + + + + i=47 + + false + + i=2174 + + + + + i=47 + + false + + i=2175 + + + + + i=47 + + false + + i=2176 + + + + + i=47 + + false + + i=2177 + + + + + i=47 + + false + + i=8888 + + + + + i=47 + + false + + i=2179 + + + + + i=47 + + false + + i=2180 + + + + + i=47 + + false + + i=2181 + + + + + i=47 + + false + + i=2182 + + + + + i=47 + + false + + i=2183 + + + + + i=47 + + false + + i=2184 + + + + + i=47 + + false + + i=2185 + + + + + i=47 + + false + + i=2186 + + + + + i=47 + + false + + i=2187 + + + + + i=47 + + false + + i=2188 + + + + + i=47 + + false + + i=2189 + + + + + i=47 + + false + + i=2190 + + + + + i=47 + + false + + i=2191 + + + + + i=47 + + false + + i=2998 + + + + + i=47 + + false + + i=2193 + + + + + i=47 + + false + + i=8889 + + + + + i=47 + + false + + i=8890 + + + + + i=47 + + false + + i=8891 + + + + + i=47 + + false + + i=8892 + + + + + i=47 + + false + + i=8893 + + + + + i=47 + + false + + i=8894 + + + + + i=47 + + false + + i=8895 + + + + + i=47 + + false + + i=8896 + + + + + i=47 + + false + + i=8897 + + + + + i=47 + + false + + i=8902 + + + + + + + + + + i=874 + + -1 + + false + + + + i=2173 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2174 + + Variable_2 + + 0 + SubscriptionId + + + + SubscriptionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2175 + + Variable_2 + + 0 + Priority + + + + Priority + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2176 + + Variable_2 + + 0 + PublishingInterval + + + + PublishingInterval + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2177 + + Variable_2 + + 0 + MaxKeepAliveCount + + + + MaxKeepAliveCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2179 + + Variable_2 + + 0 + MaxNotificationsPerPublish + + + + MaxNotificationsPerPublish + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2180 + + Variable_2 + + 0 + PublishingEnabled + + + + PublishingEnabled + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2181 + + Variable_2 + + 0 + ModifyCount + + + + ModifyCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2182 + + Variable_2 + + 0 + EnableCount + + + + EnableCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2183 + + Variable_2 + + 0 + DisableCount + + + + DisableCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2184 + + Variable_2 + + 0 + RepublishRequestCount + + + + RepublishRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2185 + + Variable_2 + + 0 + RepublishMessageRequestCount + + + + RepublishMessageRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2186 + + Variable_2 + + 0 + RepublishMessageCount + + + + RepublishMessageCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2187 + + Variable_2 + + 0 + TransferRequestCount + + + + TransferRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2188 + + Variable_2 + + 0 + TransferredToAltClientCount + + + + TransferredToAltClientCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2189 + + Variable_2 + + 0 + TransferredToSameClientCount + + + + TransferredToSameClientCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2190 + + Variable_2 + + 0 + PublishRequestCount + + + + PublishRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2191 + + Variable_2 + + 0 + DataChangeNotificationsCount + + + + DataChangeNotificationsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2193 + + Variable_2 + + 0 + NotificationsCount + + + + NotificationsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2196 + + VariableType_16 + + 0 + SessionDiagnosticsArrayType + + + + SessionDiagnosticsArrayType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=12816 + + + + + + + + + + i=865 + + 1 + + 0 + + false + + + + i=2197 + + VariableType_16 + + 0 + SessionDiagnosticsVariableType + + + + SessionDiagnosticsVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=2198 + + + + + i=47 + + false + + i=2199 + + + + + i=47 + + false + + i=2200 + + + + + i=47 + + false + + i=2201 + + + + + i=47 + + false + + i=2202 + + + + + i=47 + + false + + i=2203 + + + + + i=47 + + false + + i=2204 + + + + + i=47 + + false + + i=3050 + + + + + i=47 + + false + + i=2205 + + + + + i=47 + + false + + i=2206 + + + + + i=47 + + false + + i=2207 + + + + + i=47 + + false + + i=2208 + + + + + i=47 + + false + + i=2209 + + + + + i=47 + + false + + i=8900 + + + + + i=47 + + false + + i=11892 + + + + + i=47 + + false + + i=2217 + + + + + i=47 + + false + + i=2218 + + + + + i=47 + + false + + i=2219 + + + + + i=47 + + false + + i=2220 + + + + + i=47 + + false + + i=2221 + + + + + i=47 + + false + + i=2222 + + + + + i=47 + + false + + i=2223 + + + + + i=47 + + false + + i=2224 + + + + + i=47 + + false + + i=2225 + + + + + i=47 + + false + + i=2226 + + + + + i=47 + + false + + i=2227 + + + + + i=47 + + false + + i=2228 + + + + + i=47 + + false + + i=2229 + + + + + i=47 + + false + + i=2230 + + + + + i=47 + + false + + i=2231 + + + + + i=47 + + false + + i=2232 + + + + + i=47 + + false + + i=2233 + + + + + i=47 + + false + + i=2234 + + + + + i=47 + + false + + i=2235 + + + + + i=47 + + false + + i=2236 + + + + + i=47 + + false + + i=2237 + + + + + i=47 + + false + + i=2238 + + + + + i=47 + + false + + i=2239 + + + + + i=47 + + false + + i=2240 + + + + + i=47 + + false + + i=2241 + + + + + i=47 + + false + + i=2242 + + + + + i=47 + + false + + i=2730 + + + + + i=47 + + false + + i=2731 + + + + + + + + + + i=865 + + -1 + + false + + + + i=2198 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2199 + + Variable_2 + + 0 + SessionName + + + + SessionName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2200 + + Variable_2 + + 0 + ClientDescription + + + + ClientDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=308 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2201 + + Variable_2 + + 0 + ServerUri + + + + ServerUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2202 + + Variable_2 + + 0 + EndpointUrl + + + + EndpointUrl + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2203 + + Variable_2 + + 0 + LocaleIds + + + + LocaleIds + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2204 + + Variable_2 + + 0 + ActualSessionTimeout + + + + ActualSessionTimeout + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2205 + + Variable_2 + + 0 + ClientConnectionTime + + + + ClientConnectionTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2206 + + Variable_2 + + 0 + ClientLastContactTime + + + + ClientLastContactTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2207 + + Variable_2 + + 0 + CurrentSubscriptionsCount + + + + CurrentSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2208 + + Variable_2 + + 0 + CurrentMonitoredItemsCount + + + + CurrentMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2209 + + Variable_2 + + 0 + CurrentPublishRequestsInQueue + + + + CurrentPublishRequestsInQueue + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2217 + + Variable_2 + + 0 + ReadCount + + + + ReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2218 + + Variable_2 + + 0 + HistoryReadCount + + + + HistoryReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2219 + + Variable_2 + + 0 + WriteCount + + + + WriteCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2220 + + Variable_2 + + 0 + HistoryUpdateCount + + + + HistoryUpdateCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2221 + + Variable_2 + + 0 + CallCount + + + + CallCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2222 + + Variable_2 + + 0 + CreateMonitoredItemsCount + + + + CreateMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2223 + + Variable_2 + + 0 + ModifyMonitoredItemsCount + + + + ModifyMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2224 + + Variable_2 + + 0 + SetMonitoringModeCount + + + + SetMonitoringModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2225 + + Variable_2 + + 0 + SetTriggeringCount + + + + SetTriggeringCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2226 + + Variable_2 + + 0 + DeleteMonitoredItemsCount + + + + DeleteMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2227 + + Variable_2 + + 0 + CreateSubscriptionCount + + + + CreateSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2228 + + Variable_2 + + 0 + ModifySubscriptionCount + + + + ModifySubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2229 + + Variable_2 + + 0 + SetPublishingModeCount + + + + SetPublishingModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2230 + + Variable_2 + + 0 + PublishCount + + + + PublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2231 + + Variable_2 + + 0 + RepublishCount + + + + RepublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2232 + + Variable_2 + + 0 + TransferSubscriptionsCount + + + + TransferSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2233 + + Variable_2 + + 0 + DeleteSubscriptionsCount + + + + DeleteSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2234 + + Variable_2 + + 0 + AddNodesCount + + + + AddNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2235 + + Variable_2 + + 0 + AddReferencesCount + + + + AddReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2236 + + Variable_2 + + 0 + DeleteNodesCount + + + + DeleteNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2237 + + Variable_2 + + 0 + DeleteReferencesCount + + + + DeleteReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2238 + + Variable_2 + + 0 + BrowseCount + + + + BrowseCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2239 + + Variable_2 + + 0 + BrowseNextCount + + + + BrowseNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2240 + + Variable_2 + + 0 + TranslateBrowsePathsToNodeIdsCount + + + + TranslateBrowsePathsToNodeIdsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2241 + + Variable_2 + + 0 + QueryFirstCount + + + + QueryFirstCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2242 + + Variable_2 + + 0 + QueryNextCount + + + + QueryNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2243 + + VariableType_16 + + 0 + SessionSecurityDiagnosticsArrayType + + + + SessionSecurityDiagnosticsArrayType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=12860 + + + + + + + + + + i=868 + + 1 + + 0 + + false + + + + i=2244 + + VariableType_16 + + 0 + SessionSecurityDiagnosticsType + + + + SessionSecurityDiagnosticsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=2245 + + + + + i=47 + + false + + i=2246 + + + + + i=47 + + false + + i=2247 + + + + + i=47 + + false + + i=2248 + + + + + i=47 + + false + + i=2249 + + + + + i=47 + + false + + i=2250 + + + + + i=47 + + false + + i=2251 + + + + + i=47 + + false + + i=2252 + + + + + i=47 + + false + + i=3058 + + + + + + + + + + i=868 + + -1 + + false + + + + i=2245 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2246 + + Variable_2 + + 0 + ClientUserIdOfSession + + + + ClientUserIdOfSession + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2247 + + Variable_2 + + 0 + ClientUserIdHistory + + + + ClientUserIdHistory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2248 + + Variable_2 + + 0 + AuthenticationMechanism + + + + AuthenticationMechanism + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2249 + + Variable_2 + + 0 + Encoding + + + + Encoding + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2250 + + Variable_2 + + 0 + TransportProtocol + + + + TransportProtocol + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2251 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2252 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2253 + + Object_1 + + 0 + Server + + + + Server + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2004 + + + + + i=35 + + true + + i=85 + + + + + i=46 + + false + + i=2254 + + + + + i=46 + + false + + i=2255 + + + + + i=47 + + false + + i=2256 + + + + + i=46 + + false + + i=2267 + + + + + i=46 + + false + + i=2994 + + + + + i=46 + + false + + i=12885 + + + + + i=46 + + false + + i=17634 + + + + + i=47 + + false + + i=2268 + + + + + i=47 + + false + + i=2274 + + + + + i=47 + + false + + i=2295 + + + + + i=47 + + false + + i=2296 + + + + + i=47 + + false + + i=11715 + + + + + i=47 + + false + + i=11492 + + + + + i=47 + + false + + i=12873 + + + + + i=47 + + false + + i=12749 + + + + + i=47 + + false + + i=12886 + + + + + i=47 + + false + + i=17594 + + + + + i=47 + + false + + i=12637 + + + + + i=47 + + false + + i=14443 + + + + 1 + + + + i=2254 + + Variable_2 + + 0 + ServerArray + + + + ServerArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2253 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 1000 + false + 0 + + + + i=2255 + + Variable_2 + + 0 + NamespaceArray + + + + NamespaceArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2253 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 1000 + false + 0 + + + + i=2256 + + Variable_2 + + 0 + ServerStatus + + + + ServerStatus + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=2138 + + + + + i=47 + + false + + i=2257 + + + + + i=47 + + false + + i=2258 + + + + + i=47 + + false + + i=2259 + + + + + i=47 + + false + + i=2260 + + + + + i=47 + + false + + i=2992 + + + + + i=47 + + false + + i=2993 + + + + + + + + + + i=862 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2257 + + Variable_2 + + 0 + StartTime + + + + StartTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2256 + + + + + i=40 + + false + + i=63 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2258 + + Variable_2 + + 0 + CurrentTime + + + + CurrentTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2256 + + + + + i=40 + + false + + i=63 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2259 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2256 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=852 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2260 + + Variable_2 + + 0 + BuildInfo + + + + BuildInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2256 + + + + + i=40 + + false + + i=3051 + + + + + i=47 + + false + + i=2262 + + + + + i=47 + + false + + i=2263 + + + + + i=47 + + false + + i=2261 + + + + + i=47 + + false + + i=2264 + + + + + i=47 + + false + + i=2265 + + + + + i=47 + + false + + i=2266 + + + + + + + + + + i=338 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2261 + + Variable_2 + + 0 + ProductName + + + + ProductName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2260 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2262 + + Variable_2 + + 0 + ProductUri + + + + ProductUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2260 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2263 + + Variable_2 + + 0 + ManufacturerName + + + + ManufacturerName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2260 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2264 + + Variable_2 + + 0 + SoftwareVersion + + + + SoftwareVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2260 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2265 + + Variable_2 + + 0 + BuildNumber + + + + BuildNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2260 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2266 + + Variable_2 + + 0 + BuildDate + + + + BuildDate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2260 + + + + + i=40 + + false + + i=63 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2267 + + Variable_2 + + 0 + ServiceLevel + + + + ServiceLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2253 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2268 + + Object_1 + + 0 + ServerCapabilities + + + + ServerCapabilities + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=2013 + + + + + i=46 + + false + + i=2269 + + + + + i=46 + + false + + i=2271 + + + + + i=46 + + false + + i=2272 + + + + + i=46 + + false + + i=2735 + + + + + i=46 + + false + + i=2736 + + + + + i=46 + + false + + i=2737 + + + + + i=46 + + false + + i=3704 + + + + + i=46 + + false + + i=11702 + + + + + i=46 + + false + + i=11703 + + + + + i=46 + + false + + i=12911 + + + + + i=47 + + false + + i=11704 + + + + + i=47 + + false + + i=2996 + + + + + i=47 + + false + + i=2997 + + + + + i=47 + + false + + i=15606 + + + + + i=47 + + false + + i=11192 + + + + 0 + + + + i=2269 + + Variable_2 + + 0 + ServerProfileArray + + + + ServerProfileArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2271 + + Variable_2 + + 0 + LocaleIdArray + + + + LocaleIdArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2272 + + Variable_2 + + 0 + MinSupportedSampleRate + + + + MinSupportedSampleRate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2274 + + Object_1 + + 0 + ServerDiagnostics + + + + ServerDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=2020 + + + + + i=47 + + false + + i=2275 + + + + + i=47 + + false + + i=2289 + + + + + i=47 + + false + + i=2290 + + + + + i=47 + + false + + i=3706 + + + + + i=46 + + false + + i=2294 + + + + 0 + + + + i=2275 + + Variable_2 + + 0 + ServerDiagnosticsSummary + + + + ServerDiagnosticsSummary + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2274 + + + + + i=40 + + false + + i=2150 + + + + + i=47 + + false + + i=2276 + + + + + i=47 + + false + + i=2277 + + + + + i=47 + + false + + i=2278 + + + + + i=47 + + false + + i=2279 + + + + + i=47 + + false + + i=3705 + + + + + i=47 + + false + + i=2281 + + + + + i=47 + + false + + i=2282 + + + + + i=47 + + false + + i=2284 + + + + + i=47 + + false + + i=2285 + + + + + i=47 + + false + + i=2286 + + + + + i=47 + + false + + i=2287 + + + + + i=47 + + false + + i=2288 + + + + + + + + + + i=859 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2276 + + Variable_2 + + 0 + ServerViewCount + + + + ServerViewCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2277 + + Variable_2 + + 0 + CurrentSessionCount + + + + CurrentSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2278 + + Variable_2 + + 0 + CumulatedSessionCount + + + + CumulatedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2279 + + Variable_2 + + 0 + SecurityRejectedSessionCount + + + + SecurityRejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2281 + + Variable_2 + + 0 + SessionTimeoutCount + + + + SessionTimeoutCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2282 + + Variable_2 + + 0 + SessionAbortCount + + + + SessionAbortCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2284 + + Variable_2 + + 0 + PublishingIntervalCount + + + + PublishingIntervalCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2285 + + Variable_2 + + 0 + CurrentSubscriptionCount + + + + CurrentSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2286 + + Variable_2 + + 0 + CumulatedSubscriptionCount + + + + CumulatedSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2287 + + Variable_2 + + 0 + SecurityRejectedRequestsCount + + + + SecurityRejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2288 + + Variable_2 + + 0 + RejectedRequestsCount + + + + RejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2289 + + Variable_2 + + 0 + SamplingIntervalDiagnosticsArray + + + + SamplingIntervalDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2274 + + + + + i=40 + + false + + i=2164 + + + + + + + + + + i=856 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2290 + + Variable_2 + + 0 + SubscriptionDiagnosticsArray + + + + SubscriptionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2274 + + + + + i=40 + + false + + i=2171 + + + + + + + + + + i=874 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2294 + + Variable_2 + + 0 + EnabledFlag + + + + EnabledFlag + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2274 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 3 + 3 + 0 + false + 0 + + + + i=2295 + + Object_1 + + 0 + VendorServerInfo + + + + VendorServerInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=2033 + + + + 0 + + + + i=2296 + + Object_1 + + 0 + ServerRedundancy + + + + ServerRedundancy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=2034 + + + + + i=46 + + false + + i=3709 + + + + + i=46 + + false + + i=11312 + + + + + i=46 + + false + + i=11313 + + + + + i=46 + + false + + i=11314 + + + + + i=46 + + false + + i=14415 + + + + 0 + + + + i=2299 + + ObjectType_8 + + 0 + StateMachineType + + + + StateMachineType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=2769 + + + + + i=47 + + false + + i=2770 + + + + + i=45 + + false + + i=2771 + + + + false + + + + i=2307 + + ObjectType_8 + + 0 + StateType + + + + StateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2308 + + + + + i=45 + + false + + i=2309 + + + + + i=45 + + false + + i=15109 + + + + false + + + + i=2308 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2307 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2309 + + ObjectType_8 + + 0 + InitialStateType + + + + InitialStateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2307 + + + + false + + + + i=2310 + + ObjectType_8 + + 0 + TransitionType + + + + TransitionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2312 + + + + false + + + + i=2311 + + ObjectType_8 + + 0 + TransitionEventType + + + + TransitionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=47 + + false + + i=2774 + + + + + i=47 + + false + + i=2775 + + + + + i=47 + + false + + i=2776 + + + + + i=54 + + true + + i=15825 + + + + + i=54 + + true + + i=15827 + + + + + i=54 + + true + + i=15829 + + + + + i=54 + + true + + i=15831 + + + + + i=54 + + true + + i=15833 + + + + + i=54 + + true + + i=15835 + + + + + i=54 + + true + + i=15837 + + + + + i=54 + + true + + i=15839 + + + + + i=54 + + true + + i=15841 + + + + + i=45 + + false + + i=2378 + + + + true + + + + i=2312 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2315 + + ObjectType_8 + + 0 + AuditUpdateStateEventType + + + + AuditUpdateStateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2127 + + + + + i=46 + + false + + i=2777 + + + + + i=46 + + false + + i=2778 + + + + + i=45 + + false + + i=11856 + + + + + i=45 + + false + + i=3806 + + + + true + + + + i=2318 + + ObjectType_8 + + 0 + HistoricalDataConfigurationType + + + + HistoricalDataConfigurationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=3059 + + + + + i=47 + + false + + i=11876 + + + + + i=46 + + false + + i=2323 + + + + + i=46 + + false + + i=2324 + + + + + i=46 + + false + + i=2325 + + + + + i=46 + + false + + i=2326 + + + + + i=46 + + false + + i=2327 + + + + + i=46 + + false + + i=2328 + + + + + i=46 + + false + + i=11499 + + + + + i=46 + + false + + i=11500 + + + + + i=46 + + false + + i=19092 + + + + false + + + + i=2323 + + Variable_2 + + 0 + Stepped + + + + Stepped + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2324 + + Variable_2 + + 0 + Definition + + + + Definition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2325 + + Variable_2 + + 0 + MaxTimeInterval + + + + MaxTimeInterval + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2326 + + Variable_2 + + 0 + MinTimeInterval + + + + MinTimeInterval + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2327 + + Variable_2 + + 0 + ExceptionDeviation + + + + ExceptionDeviation + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2328 + + Variable_2 + + 0 + ExceptionDeviationFormat + + + + ExceptionDeviationFormat + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=890 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2330 + + ObjectType_8 + + 0 + HistoryServerCapabilitiesType + + + + HistoryServerCapabilitiesType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=2331 + + + + + i=46 + + false + + i=2332 + + + + + i=46 + + false + + i=11268 + + + + + i=46 + + false + + i=11269 + + + + + i=46 + + false + + i=2334 + + + + + i=46 + + false + + i=2335 + + + + + i=46 + + false + + i=2336 + + + + + i=46 + + false + + i=2337 + + + + + i=46 + + false + + i=2338 + + + + + i=46 + + false + + i=11278 + + + + + i=46 + + false + + i=11279 + + + + + i=46 + + false + + i=11280 + + + + + i=46 + + false + + i=11501 + + + + + i=46 + + false + + i=11270 + + + + + i=47 + + false + + i=11172 + + + + + i=46 + + false + + i=19094 + + + + false + + + + i=2331 + + Variable_2 + + 0 + AccessHistoryDataCapability + + + + AccessHistoryDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2332 + + Variable_2 + + 0 + AccessHistoryEventsCapability + + + + AccessHistoryEventsCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2334 + + Variable_2 + + 0 + InsertDataCapability + + + + InsertDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2335 + + Variable_2 + + 0 + ReplaceDataCapability + + + + ReplaceDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2336 + + Variable_2 + + 0 + UpdateDataCapability + + + + UpdateDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2337 + + Variable_2 + + 0 + DeleteRawCapability + + + + DeleteRawCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2338 + + Variable_2 + + 0 + DeleteAtTimeCapability + + + + DeleteAtTimeCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2340 + + ObjectType_8 + + 0 + AggregateFunctionType + + + + AggregateFunctionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + false + + + + i=2341 + + Object_1 + + 0 + Interpolative + + + + Interpolative + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2342 + + Object_1 + + 0 + Average + + + + Average + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2343 + + Object_1 + + 0 + TimeAverage + + + + TimeAverage + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2344 + + Object_1 + + 0 + Total + + + + Total + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2346 + + Object_1 + + 0 + Minimum + + + + Minimum + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2347 + + Object_1 + + 0 + Maximum + + + + Maximum + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2348 + + Object_1 + + 0 + MinimumActualTime + + + + MinimumActualTime + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2349 + + Object_1 + + 0 + MaximumActualTime + + + + MaximumActualTime + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2350 + + Object_1 + + 0 + Range + + + + Range + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2351 + + Object_1 + + 0 + AnnotationCount + + + + AnnotationCount + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2352 + + Object_1 + + 0 + Count + + + + Count + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2355 + + Object_1 + + 0 + NumberOfTransitions + + + + NumberOfTransitions + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2357 + + Object_1 + + 0 + Start + + + + Start + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2358 + + Object_1 + + 0 + End + + + + End + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2359 + + Object_1 + + 0 + Delta + + + + Delta + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2360 + + Object_1 + + 0 + DurationGood + + + + DurationGood + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2361 + + Object_1 + + 0 + DurationBad + + + + DurationBad + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2362 + + Object_1 + + 0 + PercentGood + + + + PercentGood + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2363 + + Object_1 + + 0 + PercentBad + + + + PercentBad + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2364 + + Object_1 + + 0 + WorstQuality + + + + WorstQuality + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=2365 + + VariableType_16 + + 0 + DataItemType + + + + DataItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=2366 + + + + + i=46 + + false + + i=2367 + + + + + i=45 + + false + + i=15318 + + + + + i=45 + + false + + i=2372 + + + + + i=45 + + false + + i=12021 + + + + + + + + + + i=24 + + -2 + + false + + + + i=2366 + + Variable_2 + + 0 + Definition + + + + Definition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2365 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2367 + + Variable_2 + + 0 + ValuePrecision + + + + ValuePrecision + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2365 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2368 + + VariableType_16 + + 0 + AnalogItemType + + + + AnalogItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15318 + + + + + i=46 + + false + + i=2369 + + + + + i=45 + + false + + i=17570 + + + + + + + + + + i=26 + + -2 + + false + + + + i=2369 + + Variable_2 + + 0 + EURange + + + + EURange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2368 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=884 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2372 + + VariableType_16 + + 0 + DiscreteItemType + + + + DiscreteItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2365 + + + + + i=45 + + false + + i=2373 + + + + + i=45 + + false + + i=2376 + + + + + i=45 + + false + + i=11238 + + + + + + + + + + i=24 + + -2 + + true + + + + i=2373 + + VariableType_16 + + 0 + TwoStateDiscreteType + + + + TwoStateDiscreteType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2372 + + + + + i=46 + + false + + i=2374 + + + + + i=46 + + false + + i=2375 + + + + + + + + + + i=1 + + -2 + + false + + + + i=2374 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2373 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2375 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2373 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2376 + + VariableType_16 + + 0 + MultiStateDiscreteType + + + + MultiStateDiscreteType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2372 + + + + + i=46 + + false + + i=2377 + + + + + + + + + + i=28 + + -2 + + false + + + + i=2377 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2376 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2378 + + ObjectType_8 + + 0 + ProgramTransitionEventType + + + + ProgramTransitionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2311 + + + + + i=47 + + false + + i=2379 + + + + true + + + + i=2379 + + Variable_2 + + 0 + IntermediateResult + + + + IntermediateResult + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2378 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2380 + + VariableType_16 + + 0 + ProgramDiagnosticType + + + + ProgramDiagnosticType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=2381 + + + + + i=46 + + false + + i=2382 + + + + + i=46 + + false + + i=2383 + + + + + i=46 + + false + + i=2384 + + + + + i=46 + + false + + i=2385 + + + + + i=46 + + false + + i=2386 + + + + + i=46 + + false + + i=2387 + + + + + i=46 + + false + + i=2388 + + + + + i=46 + + false + + i=2389 + + + + + i=46 + + false + + i=2390 + + + + + + + + + + i=894 + + -1 + + false + + + + i=2381 + + Variable_2 + + 0 + CreateSessionId + + + + CreateSessionId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2382 + + Variable_2 + + 0 + CreateClientName + + + + CreateClientName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2383 + + Variable_2 + + 0 + InvocationCreationTime + + + + InvocationCreationTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2384 + + Variable_2 + + 0 + LastTransitionTime + + + + LastTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2385 + + Variable_2 + + 0 + LastMethodCall + + + + LastMethodCall + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2386 + + Variable_2 + + 0 + LastMethodSessionId + + + + LastMethodSessionId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2387 + + Variable_2 + + 0 + LastMethodInputArguments + + + + LastMethodInputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2388 + + Variable_2 + + 0 + LastMethodOutputArguments + + + + LastMethodOutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2389 + + Variable_2 + + 0 + LastMethodCallTime + + + + LastMethodCallTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2390 + + Variable_2 + + 0 + LastMethodReturnStatus + + + + LastMethodReturnStatus + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2391 + + ObjectType_8 + + 0 + ProgramStateMachineType + + + + ProgramStateMachineType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2771 + + + + + i=47 + + false + + i=3830 + + + + + i=47 + + false + + i=3835 + + + + + i=46 + + false + + i=2392 + + + + + i=46 + + false + + i=2393 + + + + + i=46 + + false + + i=2394 + + + + + i=46 + + false + + i=2395 + + + + + i=46 + + false + + i=2396 + + + + + i=46 + + false + + i=2397 + + + + + i=46 + + false + + i=2398 + + + + + i=47 + + false + + i=2399 + + + + + i=47 + + false + + i=3850 + + + + + i=47 + + false + + i=2406 + + + + + i=47 + + false + + i=2400 + + + + + i=47 + + false + + i=2402 + + + + + i=47 + + false + + i=2404 + + + + + i=47 + + false + + i=2408 + + + + + i=47 + + false + + i=2410 + + + + + i=47 + + false + + i=2412 + + + + + i=47 + + false + + i=2414 + + + + + i=47 + + false + + i=2416 + + + + + i=47 + + false + + i=2418 + + + + + i=47 + + false + + i=2420 + + + + + i=47 + + false + + i=2422 + + + + + i=47 + + false + + i=2424 + + + + + i=47 + + false + + i=2426 + + + + + i=47 + + false + + i=2427 + + + + + i=47 + + false + + i=2428 + + + + + i=47 + + false + + i=2429 + + + + + i=47 + + false + + i=2430 + + + + false + + + + i=2392 + + Variable_2 + + 0 + Creatable + + + + Creatable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2393 + + Variable_2 + + 0 + Deletable + + + + Deletable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2394 + + Variable_2 + + 0 + AutoDelete + + + + AutoDelete + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2395 + + Variable_2 + + 0 + RecycleCount + + + + RecycleCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=6 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2396 + + Variable_2 + + 0 + InstanceCount + + + + InstanceCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2397 + + Variable_2 + + 0 + MaxInstanceCount + + + + MaxInstanceCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2398 + + Variable_2 + + 0 + MaxRecycleCount + + + + MaxRecycleCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2391 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2399 + + Variable_2 + + 0 + ProgramDiagnostic + + + + ProgramDiagnostic + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=15383 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=3840 + + + + + i=47 + + false + + i=3841 + + + + + i=47 + + false + + i=3842 + + + + + i=46 + + false + + i=3843 + + + + + i=47 + + false + + i=3844 + + + + + i=47 + + false + + i=3845 + + + + + i=47 + + false + + i=3846 + + + + + i=47 + + false + + i=3847 + + + + + i=47 + + false + + i=15038 + + + + + i=47 + + false + + i=15040 + + + + + i=47 + + false + + i=3848 + + + + + i=47 + + false + + i=3849 + + + + + + + + + + i=15396 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2400 + + Object_1 + + 0 + Ready + + + + Ready + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=2408 + + + + + i=51 + + true + + i=2410 + + + + + i=52 + + true + + i=2414 + + + + + i=52 + + true + + i=2422 + + + + + i=51 + + true + + i=2424 + + + + + i=46 + + false + + i=2401 + + + + 0 + + + + i=2401 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2400 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 12 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2402 + + Object_1 + + 0 + Running + + + + Running + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=2410 + + + + + i=51 + + true + + i=2412 + + + + + i=51 + + true + + i=2414 + + + + + i=51 + + true + + i=2416 + + + + + i=52 + + true + + i=2418 + + + + + i=46 + + false + + i=2403 + + + + 0 + + + + i=2403 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2402 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 13 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2404 + + Object_1 + + 0 + Suspended + + + + Suspended + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=2416 + + + + + i=51 + + true + + i=2418 + + + + + i=51 + + true + + i=2420 + + + + + i=51 + + true + + i=2422 + + + + + i=46 + + false + + i=2405 + + + + 0 + + + + i=2405 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2404 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 14 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2406 + + Object_1 + + 0 + Halted + + + + Halted + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2307 + + + + + i=51 + + true + + i=2408 + + + + + i=52 + + true + + i=2412 + + + + + i=52 + + true + + i=2420 + + + + + i=52 + + true + + i=2424 + + + + + i=46 + + false + + i=2407 + + + + 0 + + + + i=2407 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 11 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2408 + + Object_1 + + 0 + HaltedToReady + + + + HaltedToReady + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2406 + + + + + i=52 + + false + + i=2400 + + + + + i=53 + + false + + i=2430 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2409 + + + + 0 + + + + i=2409 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2408 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2410 + + Object_1 + + 0 + ReadyToRunning + + + + ReadyToRunning + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2400 + + + + + i=52 + + false + + i=2402 + + + + + i=53 + + false + + i=2426 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2411 + + + + 0 + + + + i=2411 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2410 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2412 + + Object_1 + + 0 + RunningToHalted + + + + RunningToHalted + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2402 + + + + + i=52 + + false + + i=2406 + + + + + i=53 + + false + + i=2429 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2413 + + + + 0 + + + + i=2413 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2412 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 3 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2414 + + Object_1 + + 0 + RunningToReady + + + + RunningToReady + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2402 + + + + + i=52 + + false + + i=2400 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2415 + + + + 0 + + + + i=2415 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2414 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 4 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2416 + + Object_1 + + 0 + RunningToSuspended + + + + RunningToSuspended + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2402 + + + + + i=52 + + false + + i=2404 + + + + + i=53 + + false + + i=2427 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2417 + + + + 0 + + + + i=2417 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2416 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 5 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2418 + + Object_1 + + 0 + SuspendedToRunning + + + + SuspendedToRunning + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2404 + + + + + i=52 + + false + + i=2402 + + + + + i=53 + + false + + i=2428 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2419 + + + + 0 + + + + i=2419 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2418 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 6 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2420 + + Object_1 + + 0 + SuspendedToHalted + + + + SuspendedToHalted + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2404 + + + + + i=52 + + false + + i=2406 + + + + + i=53 + + false + + i=2429 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2421 + + + + 0 + + + + i=2421 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2420 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 7 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2422 + + Object_1 + + 0 + SuspendedToReady + + + + SuspendedToReady + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2404 + + + + + i=52 + + false + + i=2400 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2423 + + + + 0 + + + + i=2423 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2422 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 8 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2424 + + Object_1 + + 0 + ReadyToHalted + + + + ReadyToHalted + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2400 + + + + + i=52 + + false + + i=2406 + + + + + i=53 + + false + + i=2429 + + + + + i=54 + + false + + i=2378 + + + + + i=46 + + false + + i=2425 + + + + 0 + + + + i=2425 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2424 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 9 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2426 + + Method_4 + + 0 + Start + + + + Start + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2426 + + + + + i=37 + + false + + i=11508 + + + + + i=53 + + true + + i=2410 + + + + true + true + + + + i=2427 + + Method_4 + + 0 + Suspend + + + + Suspend + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2427 + + + + + i=37 + + false + + i=11508 + + + + + i=53 + + true + + i=2416 + + + + true + true + + + + i=2428 + + Method_4 + + 0 + Resume + + + + Resume + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2428 + + + + + i=37 + + false + + i=11508 + + + + + i=53 + + true + + i=2418 + + + + true + true + + + + i=2429 + + Method_4 + + 0 + Halt + + + + Halt + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2429 + + + + + i=37 + + false + + i=11508 + + + + + i=53 + + true + + i=2412 + + + + + i=53 + + true + + i=2420 + + + + + i=53 + + true + + i=2424 + + + + true + true + + + + i=2430 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2430 + + + + + i=37 + + false + + i=11508 + + + + + i=53 + + true + + i=2408 + + + + true + true + + + + i=2730 + + Variable_2 + + 0 + RegisterNodesCount + + + + RegisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2731 + + Variable_2 + + 0 + UnregisterNodesCount + + + + UnregisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2732 + + Variable_2 + + 0 + MaxBrowseContinuationPoints + + + + MaxBrowseContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2733 + + Variable_2 + + 0 + MaxQueryContinuationPoints + + + + MaxQueryContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2734 + + Variable_2 + + 0 + MaxHistoryContinuationPoints + + + + MaxHistoryContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2735 + + Variable_2 + + 0 + MaxBrowseContinuationPoints + + + + MaxBrowseContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2736 + + Variable_2 + + 0 + MaxQueryContinuationPoints + + + + MaxQueryContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2737 + + Variable_2 + + 0 + MaxHistoryContinuationPoints + + + + MaxHistoryContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2738 + + ObjectType_8 + + 0 + SemanticChangeEventType + + + + SemanticChangeEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=46 + + false + + i=2739 + + + + true + + + + i=2739 + + Variable_2 + + 0 + Changes + + + + Changes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2738 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=897 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2742 + + Variable_2 + + 0 + Auditing + + + + Auditing + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2744 + + Object_1 + + 0 + SessionsDiagnosticsSummary + + + + SessionsDiagnosticsSummary + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2020 + + + + + i=40 + + false + + i=2026 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3129 + + + + + i=47 + + false + + i=3130 + + + + 0 + + + + i=2745 + + Variable_2 + + 0 + SecureChannelId + + + + SecureChannelId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2059 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2746 + + Variable_2 + + 0 + ClientCertificateThumbprint + + + + ClientCertificateThumbprint + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2060 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2747 + + Variable_2 + + 0 + ClientCertificateThumbprint + + + + ClientCertificateThumbprint + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2071 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2748 + + ObjectType_8 + + 0 + AuditUrlMismatchEventType + + + + AuditUrlMismatchEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2071 + + + + + i=46 + + false + + i=2749 + + + + true + + + + i=2749 + + Variable_2 + + 0 + EndpointUrl + + + + EndpointUrl + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2748 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2750 + + Variable_2 + + 0 + AttributeId + + + + AttributeId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2100 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2751 + + Variable_2 + + 0 + ParameterDataTypeId + + + + ParameterDataTypeId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2104 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2752 + + Variable_2 + + 0 + SecondsTillShutdown + + + + SecondsTillShutdown + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2138 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2753 + + Variable_2 + + 0 + ShutdownReason + + + + ShutdownReason + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2138 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2754 + + Object_1 + + 0 + AggregateFunctions + + + + AggregateFunctions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2013 + + + + + i=40 + + false + + i=61 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=2755 + + VariableType_16 + + 0 + StateVariableType + + + + StateVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=2756 + + + + + i=46 + + false + + i=2757 + + + + + i=46 + + false + + i=2758 + + + + + i=46 + + false + + i=2759 + + + + + i=45 + + false + + i=2760 + + + + + i=45 + + false + + i=8995 + + + + + + + + + + i=21 + + -1 + + false + + + + i=2756 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2757 + + Variable_2 + + 0 + Name + + + + Name + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + 0 + + + + + i=20 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2758 + + Variable_2 + + 0 + Number + + + + Number + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2759 + + Variable_2 + + 0 + EffectiveDisplayName + + + + EffectiveDisplayName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2760 + + VariableType_16 + + 0 + FiniteStateVariableType + + + + FiniteStateVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2755 + + + + + i=46 + + false + + i=2761 + + + + + + + + + + i=21 + + -1 + + false + + + + i=2761 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2760 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2762 + + VariableType_16 + + 0 + TransitionVariableType + + + + TransitionVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=2763 + + + + + i=46 + + false + + i=2764 + + + + + i=46 + + false + + i=2765 + + + + + i=46 + + false + + i=2766 + + + + + i=46 + + false + + i=11456 + + + + + i=45 + + false + + i=2767 + + + + + + + + + + i=21 + + -1 + + false + + + + i=2763 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2762 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2764 + + Variable_2 + + 0 + Name + + + + Name + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2762 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + 0 + + + + + i=20 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2765 + + Variable_2 + + 0 + Number + + + + Number + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2762 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2766 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2762 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2767 + + VariableType_16 + + 0 + FiniteTransitionVariableType + + + + FiniteTransitionVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2762 + + + + + i=46 + + false + + i=2768 + + + + + + + + + + i=21 + + -1 + + false + + + + i=2768 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2767 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2769 + + Variable_2 + + 0 + CurrentState + + + + CurrentState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2299 + + + + + i=40 + + false + + i=2755 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3720 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2770 + + Variable_2 + + 0 + LastTransition + + + + LastTransition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2299 + + + + + i=40 + + false + + i=2762 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=3724 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2771 + + ObjectType_8 + + 0 + FiniteStateMachineType + + + + FiniteStateMachineType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2299 + + + + + i=47 + + false + + i=2772 + + + + + i=47 + + false + + i=2773 + + + + + i=47 + + false + + i=17635 + + + + + i=47 + + false + + i=17636 + + + + + i=45 + + false + + i=15803 + + + + + i=45 + + false + + i=2929 + + + + + i=45 + + false + + i=9318 + + + + + i=45 + + false + + i=2391 + + + + true + + + + i=2772 + + Variable_2 + + 0 + CurrentState + + + + CurrentState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2771 + + + + + i=40 + + false + + i=2760 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3728 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2773 + + Variable_2 + + 0 + LastTransition + + + + LastTransition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2771 + + + + + i=40 + + false + + i=2767 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=3732 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2774 + + Variable_2 + + 0 + Transition + + + + Transition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2311 + + + + + i=40 + + false + + i=2762 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3754 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2775 + + Variable_2 + + 0 + FromState + + + + FromState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2311 + + + + + i=40 + + false + + i=2755 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3746 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2776 + + Variable_2 + + 0 + ToState + + + + ToState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2311 + + + + + i=40 + + false + + i=2755 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3750 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2777 + + Variable_2 + + 0 + OldStateId + + + + OldStateId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2315 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2778 + + Variable_2 + + 0 + NewStateId + + + + NewStateId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2315 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2782 + + ObjectType_8 + + 0 + ConditionType + + + + ConditionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=46 + + false + + i=11112 + + + + + i=46 + + false + + i=11113 + + + + + i=46 + + false + + i=16363 + + + + + i=46 + + false + + i=16364 + + + + + i=46 + + false + + i=9009 + + + + + i=46 + + false + + i=9010 + + + + + i=46 + + false + + i=3874 + + + + + i=47 + + false + + i=9011 + + + + + i=47 + + false + + i=9020 + + + + + i=47 + + false + + i=9022 + + + + + i=47 + + false + + i=9024 + + + + + i=46 + + false + + i=9026 + + + + + i=47 + + false + + i=9028 + + + + + i=47 + + false + + i=9027 + + + + + i=47 + + false + + i=9029 + + + + + i=47 + + false + + i=3875 + + + + + i=47 + + false + + i=12912 + + + + + i=45 + + false + + i=2830 + + + + + i=45 + + false + + i=2881 + + + + true + + + + i=2787 + + ObjectType_8 + + 0 + RefreshStartEventType + + + + RefreshStartEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2130 + + + + true + + + + i=2788 + + ObjectType_8 + + 0 + RefreshEndEventType + + + + RefreshEndEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2130 + + + + true + + + + i=2789 + + ObjectType_8 + + 0 + RefreshRequiredEventType + + + + RefreshRequiredEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2130 + + + + true + + + + i=2790 + + ObjectType_8 + + 0 + AuditConditionEventType + + + + AuditConditionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2127 + + + + + i=45 + + false + + i=2803 + + + + + i=45 + + false + + i=2829 + + + + + i=45 + + false + + i=8927 + + + + + i=45 + + false + + i=8944 + + + + + i=45 + + false + + i=8961 + + + + + i=45 + + false + + i=11093 + + + + + i=45 + + false + + i=17225 + + + + + i=45 + + false + + i=17242 + + + + + i=45 + + false + + i=15013 + + + + + i=45 + + false + + i=17259 + + + + false + + + + i=2803 + + ObjectType_8 + + 0 + AuditConditionEnableEventType + + + + AuditConditionEnableEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + + i=3065 + + true + + i=19483 + + + + + i=3065 + + true + + i=19484 + + + + + i=3065 + + true + + i=20176 + + + + + i=3065 + + true + + i=20177 + + + + false + + + + i=2829 + + ObjectType_8 + + 0 + AuditConditionCommentEventType + + + + AuditConditionCommentEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + + i=46 + + false + + i=17222 + + + + + i=46 + + false + + i=11851 + + + + + i=3065 + + true + + i=19485 + + + + + i=3065 + + true + + i=20178 + + + + false + + + + i=2830 + + ObjectType_8 + + 0 + DialogConditionType + + + + DialogConditionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2782 + + + + + i=47 + + false + + i=9035 + + + + + i=47 + + false + + i=9055 + + + + + i=46 + + false + + i=2831 + + + + + i=46 + + false + + i=9064 + + + + + i=46 + + false + + i=9065 + + + + + i=46 + + false + + i=9066 + + + + + i=46 + + false + + i=9067 + + + + + i=46 + + false + + i=9068 + + + + + i=47 + + false + + i=9069 + + + + false + + + + i=2831 + + Variable_2 + + 0 + Prompt + + + + Prompt + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2881 + + ObjectType_8 + + 0 + AcknowledgeableConditionType + + + + AcknowledgeableConditionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2782 + + + + + i=47 + + false + + i=9073 + + + + + i=47 + + false + + i=9093 + + + + + i=47 + + false + + i=9102 + + + + + i=47 + + false + + i=9111 + + + + + i=47 + + false + + i=9113 + + + + + i=45 + + false + + i=2915 + + + + false + + + + i=2915 + + ObjectType_8 + + 0 + AlarmConditionType + + + + AlarmConditionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2881 + + + + + i=47 + + false + + i=9118 + + + + + i=47 + + false + + i=9160 + + + + + i=46 + + false + + i=11120 + + + + + i=47 + + false + + i=9169 + + + + + i=47 + + false + + i=16371 + + + + + i=47 + + false + + i=9178 + + + + + i=46 + + false + + i=9215 + + + + + i=46 + + false + + i=9216 + + + + + i=46 + + false + + i=16389 + + + + + i=46 + + false + + i=16390 + + + + + i=47 + + false + + i=16380 + + + + + i=46 + + false + + i=16395 + + + + + i=46 + + false + + i=16396 + + + + + i=47 + + false + + i=16397 + + + + + i=47 + + false + + i=16398 + + + + + i=47 + + false + + i=18190 + + + + + i=16361 + + false + + i=16399 + + + + + i=46 + + false + + i=16400 + + + + + i=47 + + false + + i=16401 + + + + + i=47 + + false + + i=16402 + + + + + i=47 + + false + + i=16403 + + + + + i=47 + + false + + i=17868 + + + + + i=47 + + false + + i=17869 + + + + + i=47 + + false + + i=17870 + + + + + i=47 + + false + + i=18199 + + + + + i=54 + + true + + i=2935 + + + + + i=54 + + true + + i=2936 + + + + + i=54 + + true + + i=2940 + + + + + i=54 + + true + + i=2942 + + + + + i=54 + + true + + i=2943 + + + + + i=54 + + true + + i=2945 + + + + + i=45 + + false + + i=2955 + + + + + i=45 + + false + + i=10523 + + + + + i=45 + + false + + i=17080 + + + + false + + + + i=2929 + + ObjectType_8 + + 0 + ShelvedStateMachineType + + + + ShelvedStateMachineType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2771 + + + + + i=46 + + false + + i=9115 + + + + + i=47 + + false + + i=2930 + + + + + i=47 + + false + + i=2932 + + + + + i=47 + + false + + i=2933 + + + + + i=47 + + false + + i=2935 + + + + + i=47 + + false + + i=2936 + + + + + i=47 + + false + + i=2940 + + + + + i=47 + + false + + i=2942 + + + + + i=47 + + false + + i=2943 + + + + + i=47 + + false + + i=2945 + + + + + i=47 + + false + + i=2949 + + + + + i=47 + + false + + i=2947 + + + + + i=47 + + false + + i=2948 + + + + false + + + + i=2930 + + Object_1 + + 0 + Unshelved + + + + Unshelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2307 + + + + + i=51 + + true + + i=2935 + + + + + i=51 + + true + + i=2936 + + + + + i=52 + + true + + i=2940 + + + + + i=52 + + true + + i=2943 + + + + + i=46 + + false + + i=6098 + + + + 0 + + + + i=2932 + + Object_1 + + 0 + TimedShelved + + + + Timed Shelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=2935 + + + + + i=51 + + true + + i=2940 + + + + + i=51 + + true + + i=2942 + + + + + i=52 + + true + + i=2945 + + + + + i=46 + + false + + i=6100 + + + + 0 + + + + i=2933 + + Object_1 + + 0 + OneShotShelved + + + + One Shot Shelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=2936 + + + + + i=52 + + true + + i=2942 + + + + + i=51 + + true + + i=2943 + + + + + i=51 + + true + + i=2945 + + + + + i=46 + + false + + i=6101 + + + + 0 + + + + i=2935 + + Object_1 + + 0 + UnshelvedToTimedShelved + + + + UnshelvedToTimedShelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2930 + + + + + i=52 + + false + + i=2932 + + + + + i=54 + + false + + i=2915 + + + + + i=53 + + false + + i=2949 + + + + + i=46 + + false + + i=11322 + + + + 0 + + + + i=2936 + + Object_1 + + 0 + UnshelvedToOneShotShelved + + + + UnshelvedToOneShotShelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2930 + + + + + i=52 + + false + + i=2933 + + + + + i=54 + + false + + i=2915 + + + + + i=53 + + false + + i=2948 + + + + + i=46 + + false + + i=11323 + + + + 0 + + + + i=2940 + + Object_1 + + 0 + TimedShelvedToUnshelved + + + + TimedShelvedToUnshelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2932 + + + + + i=52 + + false + + i=2930 + + + + + i=54 + + false + + i=2915 + + + + + i=53 + + false + + i=2947 + + + + + i=46 + + false + + i=11324 + + + + 0 + + + + i=2942 + + Object_1 + + 0 + TimedShelvedToOneShotShelved + + + + TimedShelvedToOneShotShelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2932 + + + + + i=52 + + false + + i=2933 + + + + + i=54 + + false + + i=2915 + + + + + i=53 + + false + + i=2948 + + + + + i=46 + + false + + i=11325 + + + + 0 + + + + i=2943 + + Object_1 + + 0 + OneShotShelvedToUnshelved + + + + OneShotShelvedToUnshelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2933 + + + + + i=52 + + false + + i=2930 + + + + + i=54 + + false + + i=2915 + + + + + i=53 + + false + + i=2947 + + + + + i=46 + + false + + i=11326 + + + + 0 + + + + i=2945 + + Object_1 + + 0 + OneShotShelvedToTimedShelved + + + + OneShotShelvedToTimedShelved + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=2933 + + + + + i=52 + + false + + i=2932 + + + + + i=54 + + false + + i=2915 + + + + + i=53 + + false + + i=2949 + + + + + i=46 + + false + + i=11327 + + + + 0 + + + + i=2947 + + Method_4 + + 0 + Unshelve + + + + Unshelve + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2947 + + + + + i=37 + + false + + i=78 + + + + + i=53 + + true + + i=2940 + + + + + i=53 + + true + + i=2943 + + + + + i=3065 + + false + + i=11093 + + + + true + true + + + + i=2948 + + Method_4 + + 0 + OneShotShelve + + + + OneShotShelve + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2948 + + + + + i=37 + + false + + i=78 + + + + + i=53 + + true + + i=2936 + + + + + i=53 + + true + + i=2942 + + + + + i=3065 + + false + + i=11093 + + + + true + true + + + + i=2949 + + Method_4 + + 0 + TimedShelve + + + + TimedShelve + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2929 + + + + + i=40 + + false + + i=2949 + + + + + i=37 + + false + + i=78 + + + + + i=53 + + true + + i=2935 + + + + + i=53 + + true + + i=2945 + + + + + i=3065 + + false + + i=11093 + + + + + i=46 + + false + + i=2991 + + + + true + true + + + + i=2955 + + ObjectType_8 + + 0 + LimitAlarmType + + + + LimitAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2915 + + + + + i=46 + + false + + i=11124 + + + + + i=46 + + false + + i=11125 + + + + + i=46 + + false + + i=11126 + + + + + i=46 + + false + + i=11127 + + + + + i=46 + + false + + i=16572 + + + + + i=46 + + false + + i=16573 + + + + + i=46 + + false + + i=16574 + + + + + i=46 + + false + + i=16575 + + + + + i=45 + + false + + i=9341 + + + + + i=45 + + false + + i=9906 + + + + false + + + + i=2991 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2949 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=2992 + + Variable_2 + + 0 + SecondsTillShutdown + + + + SecondsTillShutdown + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2256 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2993 + + Variable_2 + + 0 + ShutdownReason + + + + ShutdownReason + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2256 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2994 + + Variable_2 + + 0 + Auditing + + + + Auditing + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2253 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=2996 + + Object_1 + + 0 + ModellingRules + + + + ModellingRules + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2268 + + + + + i=40 + + false + + i=61 + + + + 0 + + + + i=2997 + + Object_1 + + 0 + AggregateFunctions + + + + AggregateFunctions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2268 + + + + + i=40 + + false + + i=61 + + + + 0 + + + + i=2998 + + Variable_2 + + 0 + EventNotificationsCount + + + + EventNotificationsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=2999 + + ObjectType_8 + + 0 + AuditHistoryEventUpdateEventType + + + + AuditHistoryEventUpdateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2104 + + + + + i=46 + + false + + i=3025 + + + + + i=46 + + false + + i=3028 + + + + + i=46 + + false + + i=3003 + + + + + i=46 + + false + + i=3029 + + + + + i=46 + + false + + i=3030 + + + + true + + + + i=3003 + + Variable_2 + + 0 + Filter + + + + Filter + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2999 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=725 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3006 + + ObjectType_8 + + 0 + AuditHistoryValueUpdateEventType + + + + AuditHistoryValueUpdateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2104 + + + + + i=46 + + false + + i=3026 + + + + + i=46 + + false + + i=3031 + + + + + i=46 + + false + + i=3032 + + + + + i=46 + + false + + i=3033 + + + + true + + + + i=3012 + + ObjectType_8 + + 0 + AuditHistoryDeleteEventType + + + + AuditHistoryDeleteEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2104 + + + + + i=46 + + false + + i=3027 + + + + + i=45 + + false + + i=3014 + + + + + i=45 + + false + + i=3019 + + + + + i=45 + + false + + i=3022 + + + + true + + + + i=3014 + + ObjectType_8 + + 0 + AuditHistoryRawModifyDeleteEventType + + + + AuditHistoryRawModifyDeleteEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=3012 + + + + + i=46 + + false + + i=3015 + + + + + i=46 + + false + + i=3016 + + + + + i=46 + + false + + i=3017 + + + + + i=46 + + false + + i=3034 + + + + true + + + + i=3015 + + Variable_2 + + 0 + IsDeleteModified + + + + IsDeleteModified + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3016 + + Variable_2 + + 0 + StartTime + + + + StartTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3017 + + Variable_2 + + 0 + EndTime + + + + EndTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3019 + + ObjectType_8 + + 0 + AuditHistoryAtTimeDeleteEventType + + + + AuditHistoryAtTimeDeleteEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=3012 + + + + + i=46 + + false + + i=3020 + + + + + i=46 + + false + + i=3021 + + + + true + + + + i=3020 + + Variable_2 + + 0 + ReqTimes + + + + ReqTimes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3019 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=294 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3021 + + Variable_2 + + 0 + OldValues + + + + OldValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3019 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=23 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3022 + + ObjectType_8 + + 0 + AuditHistoryEventDeleteEventType + + + + AuditHistoryEventDeleteEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=3012 + + + + + i=46 + + false + + i=3023 + + + + + i=46 + + false + + i=3024 + + + + true + + + + i=3023 + + Variable_2 + + 0 + EventIds + + + + EventIds + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3022 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3024 + + Variable_2 + + 0 + OldValues + + + + OldValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3022 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=920 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3025 + + Variable_2 + + 0 + UpdatedNode + + + + UpdatedNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2999 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3026 + + Variable_2 + + 0 + UpdatedNode + + + + UpdatedNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3006 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3027 + + Variable_2 + + 0 + UpdatedNode + + + + UpdatedNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3012 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3028 + + Variable_2 + + 0 + PerformInsertReplace + + + + PerformInsertReplace + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2999 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=11293 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3029 + + Variable_2 + + 0 + NewValues + + + + NewValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2999 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=920 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3030 + + Variable_2 + + 0 + OldValues + + + + OldValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2999 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=920 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3031 + + Variable_2 + + 0 + PerformInsertReplace + + + + PerformInsertReplace + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3006 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=11293 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3032 + + Variable_2 + + 0 + NewValues + + + + NewValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3006 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=23 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3033 + + Variable_2 + + 0 + OldValues + + + + OldValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3006 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=23 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3034 + + Variable_2 + + 0 + OldValues + + + + OldValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=23 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3035 + + ObjectType_8 + + 0 + EventQueueOverflowEventType + + + + EventQueueOverflowEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + true + + + + i=3048 + + Object_1 + + 0 + EventTypes + + + + EventTypes + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + true + + i=86 + + + + + i=35 + + false + + i=2041 + + + + 0 + + + + i=3049 + + Variable_2 + + 0 + SoftwareCertificates + + + + SoftwareCertificates + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=344 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3050 + + Variable_2 + + 0 + MaxResponseMessageSize + + + + MaxResponseMessageSize + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3051 + + VariableType_16 + + 0 + BuildInfoType + + + + BuildInfoType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=3052 + + + + + i=47 + + false + + i=3053 + + + + + i=47 + + false + + i=3054 + + + + + i=47 + + false + + i=3055 + + + + + i=47 + + false + + i=3056 + + + + + i=47 + + false + + i=3057 + + + + + + + + + + i=338 + + -1 + + false + + + + i=3052 + + Variable_2 + + 0 + ProductUri + + + + ProductUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3051 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3053 + + Variable_2 + + 0 + ManufacturerName + + + + ManufacturerName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3051 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3054 + + Variable_2 + + 0 + ProductName + + + + ProductName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3051 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3055 + + Variable_2 + + 0 + SoftwareVersion + + + + SoftwareVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3051 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3056 + + Variable_2 + + 0 + BuildNumber + + + + BuildNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3051 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3057 + + Variable_2 + + 0 + BuildDate + + + + BuildDate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3051 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3058 + + Variable_2 + + 0 + ClientCertificate + + + + ClientCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2244 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3059 + + Object_1 + + 0 + AggregateConfiguration + + + + AggregateConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2318 + + + + + i=40 + + false + + i=11187 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11168 + + + + + i=46 + + false + + i=11169 + + + + + i=46 + + false + + i=11170 + + + + + i=46 + + false + + i=11171 + + + + 0 + + + + i=3062 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=58 + + + + 0 + + + + i=3063 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=58 + + + + 0 + + + + i=3065 + + ReferenceType_32 + + 0 + AlwaysGeneratesEvent + + + + AlwaysGeneratesEvent + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=41 + + + + false + false + + + AlwaysGeneratedBy + + + + + i=3067 + + Variable_2 + + 0 + Icon + + + + Icon + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=30 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3068 + + Variable_2 + + 0 + NodeVersion + + + + NodeVersion + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3069 + + Variable_2 + + 0 + LocalTime + + + + LocalTime + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=8912 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3070 + + Variable_2 + + 0 + AllowNulls + + + + AllowNulls + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3071 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3072 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3073 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3074 + + Variable_2 + + 0 + StartTime + + + + StartTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2007 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3075 + + Variable_2 + + 0 + CurrentTime + + + + CurrentTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2007 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3076 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2007 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=852 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3077 + + Variable_2 + + 0 + BuildInfo + + + + BuildInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2007 + + + + + i=40 + + false + + i=3051 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3078 + + + + + i=47 + + false + + i=3079 + + + + + i=47 + + false + + i=3080 + + + + + i=47 + + false + + i=3081 + + + + + i=47 + + false + + i=3082 + + + + + i=47 + + false + + i=3083 + + + + + + + + + + i=338 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3078 + + Variable_2 + + 0 + ProductUri + + + + ProductUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3077 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3079 + + Variable_2 + + 0 + ManufacturerName + + + + ManufacturerName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3077 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3080 + + Variable_2 + + 0 + ProductName + + + + ProductName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3077 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3081 + + Variable_2 + + 0 + SoftwareVersion + + + + SoftwareVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3077 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3082 + + Variable_2 + + 0 + BuildNumber + + + + BuildNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3077 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3083 + + Variable_2 + + 0 + BuildDate + + + + BuildDate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3077 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3084 + + Variable_2 + + 0 + SecondsTillShutdown + + + + SecondsTillShutdown + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2007 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3085 + + Variable_2 + + 0 + ShutdownReason + + + + ShutdownReason + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2007 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3086 + + Variable_2 + + 0 + ServerProfileArray + + + + ServerProfileArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3087 + + Variable_2 + + 0 + LocaleIdArray + + + + LocaleIdArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3088 + + Variable_2 + + 0 + MinSupportedSampleRate + + + + MinSupportedSampleRate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3089 + + Variable_2 + + 0 + MaxBrowseContinuationPoints + + + + MaxBrowseContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3090 + + Variable_2 + + 0 + MaxQueryContinuationPoints + + + + MaxQueryContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3091 + + Variable_2 + + 0 + MaxHistoryContinuationPoints + + + + MaxHistoryContinuationPoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3092 + + Variable_2 + + 0 + SoftwareCertificates + + + + SoftwareCertificates + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2009 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=344 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3093 + + Object_1 + + 0 + ModellingRules + + + + ModellingRules + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2009 + + + + + i=40 + + false + + i=61 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=3094 + + Object_1 + + 0 + AggregateFunctions + + + + AggregateFunctions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2009 + + + + + i=40 + + false + + i=61 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=3095 + + Variable_2 + + 0 + ServerDiagnosticsSummary + + + + ServerDiagnosticsSummary + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2010 + + + + + i=40 + + false + + i=2150 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3096 + + + + + i=47 + + false + + i=3097 + + + + + i=47 + + false + + i=3098 + + + + + i=47 + + false + + i=3099 + + + + + i=47 + + false + + i=3100 + + + + + i=47 + + false + + i=3101 + + + + + i=47 + + false + + i=3102 + + + + + i=47 + + false + + i=3104 + + + + + i=47 + + false + + i=3105 + + + + + i=47 + + false + + i=3106 + + + + + i=47 + + false + + i=3107 + + + + + i=47 + + false + + i=3108 + + + + + + + + + + i=859 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3096 + + Variable_2 + + 0 + ServerViewCount + + + + ServerViewCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3097 + + Variable_2 + + 0 + CurrentSessionCount + + + + CurrentSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3098 + + Variable_2 + + 0 + CumulatedSessionCount + + + + CumulatedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3099 + + Variable_2 + + 0 + SecurityRejectedSessionCount + + + + SecurityRejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3100 + + Variable_2 + + 0 + RejectedSessionCount + + + + RejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3101 + + Variable_2 + + 0 + SessionTimeoutCount + + + + SessionTimeoutCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3102 + + Variable_2 + + 0 + SessionAbortCount + + + + SessionAbortCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3104 + + Variable_2 + + 0 + PublishingIntervalCount + + + + PublishingIntervalCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3105 + + Variable_2 + + 0 + CurrentSubscriptionCount + + + + CurrentSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3106 + + Variable_2 + + 0 + CumulatedSubscriptionCount + + + + CumulatedSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3107 + + Variable_2 + + 0 + SecurityRejectedRequestsCount + + + + SecurityRejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3108 + + Variable_2 + + 0 + RejectedRequestsCount + + + + RejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3095 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3110 + + Variable_2 + + 0 + SubscriptionDiagnosticsArray + + + + SubscriptionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2010 + + + + + i=40 + + false + + i=2171 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=874 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3111 + + Object_1 + + 0 + SessionsDiagnosticsSummary + + + + SessionsDiagnosticsSummary + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2010 + + + + + i=40 + + false + + i=2026 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=3112 + + + + + i=47 + + false + + i=3113 + + + + 0 + + + + i=3112 + + Variable_2 + + 0 + SessionDiagnosticsArray + + + + SessionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3111 + + + + + i=40 + + false + + i=2196 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=865 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3113 + + Variable_2 + + 0 + SessionSecurityDiagnosticsArray + + + + SessionSecurityDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3111 + + + + + i=40 + + false + + i=2243 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=868 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3114 + + Variable_2 + + 0 + EnabledFlag + + + + EnabledFlag + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2010 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 3 + 3 + 0 + false + 0 + + + + i=3115 + + Variable_2 + + 0 + RedundancySupport + + + + RedundancySupport + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2012 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=851 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3116 + + Variable_2 + + 0 + ServerViewCount + + + + ServerViewCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3117 + + Variable_2 + + 0 + CurrentSessionCount + + + + CurrentSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3118 + + Variable_2 + + 0 + CumulatedSessionCount + + + + CumulatedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3119 + + Variable_2 + + 0 + SecurityRejectedSessionCount + + + + SecurityRejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3120 + + Variable_2 + + 0 + RejectedSessionCount + + + + RejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3121 + + Variable_2 + + 0 + SessionTimeoutCount + + + + SessionTimeoutCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3122 + + Variable_2 + + 0 + SessionAbortCount + + + + SessionAbortCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3124 + + Variable_2 + + 0 + PublishingIntervalCount + + + + PublishingIntervalCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3125 + + Variable_2 + + 0 + CurrentSubscriptionCount + + + + CurrentSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3126 + + Variable_2 + + 0 + CumulatedSubscriptionCount + + + + CumulatedSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3127 + + Variable_2 + + 0 + SecurityRejectedRequestsCount + + + + SecurityRejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3128 + + Variable_2 + + 0 + RejectedRequestsCount + + + + RejectedRequestsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2021 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3129 + + Variable_2 + + 0 + SessionDiagnosticsArray + + + + SessionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2744 + + + + + i=40 + + false + + i=2196 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=865 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3130 + + Variable_2 + + 0 + SessionSecurityDiagnosticsArray + + + + SessionSecurityDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2744 + + + + + i=40 + + false + + i=2243 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=868 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3131 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3132 + + Variable_2 + + 0 + SessionName + + + + SessionName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3133 + + Variable_2 + + 0 + ClientDescription + + + + ClientDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=308 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3134 + + Variable_2 + + 0 + ServerUri + + + + ServerUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3135 + + Variable_2 + + 0 + EndpointUrl + + + + EndpointUrl + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3136 + + Variable_2 + + 0 + LocaleIds + + + + LocaleIds + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3137 + + Variable_2 + + 0 + ActualSessionTimeout + + + + ActualSessionTimeout + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3138 + + Variable_2 + + 0 + MaxResponseMessageSize + + + + MaxResponseMessageSize + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3139 + + Variable_2 + + 0 + ClientConnectionTime + + + + ClientConnectionTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3140 + + Variable_2 + + 0 + ClientLastContactTime + + + + ClientLastContactTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3141 + + Variable_2 + + 0 + CurrentSubscriptionsCount + + + + CurrentSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3142 + + Variable_2 + + 0 + CurrentMonitoredItemsCount + + + + CurrentMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3143 + + Variable_2 + + 0 + CurrentPublishRequestsInQueue + + + + CurrentPublishRequestsInQueue + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3151 + + Variable_2 + + 0 + ReadCount + + + + ReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3152 + + Variable_2 + + 0 + HistoryReadCount + + + + HistoryReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3153 + + Variable_2 + + 0 + WriteCount + + + + WriteCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3154 + + Variable_2 + + 0 + HistoryUpdateCount + + + + HistoryUpdateCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3155 + + Variable_2 + + 0 + CallCount + + + + CallCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3156 + + Variable_2 + + 0 + CreateMonitoredItemsCount + + + + CreateMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3157 + + Variable_2 + + 0 + ModifyMonitoredItemsCount + + + + ModifyMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3158 + + Variable_2 + + 0 + SetMonitoringModeCount + + + + SetMonitoringModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3159 + + Variable_2 + + 0 + SetTriggeringCount + + + + SetTriggeringCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3160 + + Variable_2 + + 0 + DeleteMonitoredItemsCount + + + + DeleteMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3161 + + Variable_2 + + 0 + CreateSubscriptionCount + + + + CreateSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3162 + + Variable_2 + + 0 + ModifySubscriptionCount + + + + ModifySubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3163 + + Variable_2 + + 0 + SetPublishingModeCount + + + + SetPublishingModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3164 + + Variable_2 + + 0 + PublishCount + + + + PublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3165 + + Variable_2 + + 0 + RepublishCount + + + + RepublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3166 + + Variable_2 + + 0 + TransferSubscriptionsCount + + + + TransferSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3167 + + Variable_2 + + 0 + DeleteSubscriptionsCount + + + + DeleteSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3168 + + Variable_2 + + 0 + AddNodesCount + + + + AddNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3169 + + Variable_2 + + 0 + AddReferencesCount + + + + AddReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3170 + + Variable_2 + + 0 + DeleteNodesCount + + + + DeleteNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3171 + + Variable_2 + + 0 + DeleteReferencesCount + + + + DeleteReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3172 + + Variable_2 + + 0 + BrowseCount + + + + BrowseCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3173 + + Variable_2 + + 0 + BrowseNextCount + + + + BrowseNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3174 + + Variable_2 + + 0 + TranslateBrowsePathsToNodeIdsCount + + + + TranslateBrowsePathsToNodeIdsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3175 + + Variable_2 + + 0 + QueryFirstCount + + + + QueryFirstCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3176 + + Variable_2 + + 0 + QueryNextCount + + + + QueryNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3177 + + Variable_2 + + 0 + RegisterNodesCount + + + + RegisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3178 + + Variable_2 + + 0 + UnregisterNodesCount + + + + UnregisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3179 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3180 + + Variable_2 + + 0 + ClientUserIdOfSession + + + + ClientUserIdOfSession + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3181 + + Variable_2 + + 0 + ClientUserIdHistory + + + + ClientUserIdHistory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3182 + + Variable_2 + + 0 + AuthenticationMechanism + + + + AuthenticationMechanism + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3183 + + Variable_2 + + 0 + Encoding + + + + Encoding + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3184 + + Variable_2 + + 0 + TransportProtocol + + + + TransportProtocol + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3185 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3186 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3187 + + Variable_2 + + 0 + ClientCertificate + + + + ClientCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2031 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3190 + + Variable_2 + + 0 + LocalTime + + + + LocalTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2041 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=8912 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3698 + + Variable_2 + + 0 + ProductUri + + + + ProductUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3699 + + Variable_2 + + 0 + ManufacturerName + + + + ManufacturerName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3700 + + Variable_2 + + 0 + ProductName + + + + ProductName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3701 + + Variable_2 + + 0 + SoftwareVersion + + + + SoftwareVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3702 + + Variable_2 + + 0 + BuildNumber + + + + BuildNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3703 + + Variable_2 + + 0 + BuildDate + + + + BuildDate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=3704 + + Variable_2 + + 0 + SoftwareCertificates + + + + SoftwareCertificates + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=344 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3705 + + Variable_2 + + 0 + RejectedSessionCount + + + + RejectedSessionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2275 + + + + + i=40 + + false + + i=63 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3706 + + Object_1 + + 0 + SessionsDiagnosticsSummary + + + + SessionsDiagnosticsSummary + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2274 + + + + + i=40 + + false + + i=2026 + + + + + i=47 + + false + + i=3707 + + + + + i=47 + + false + + i=3708 + + + + 0 + + + + i=3707 + + Variable_2 + + 0 + SessionDiagnosticsArray + + + + SessionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3706 + + + + + i=40 + + false + + i=2196 + + + + + + + + + + i=865 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3708 + + Variable_2 + + 0 + SessionSecurityDiagnosticsArray + + + + SessionSecurityDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3706 + + + + + i=40 + + false + + i=2243 + + + + + + + + + + i=868 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3709 + + Variable_2 + + 0 + RedundancySupport + + + + RedundancySupport + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2296 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=851 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3720 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2769 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3724 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2770 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3728 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2772 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3732 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2773 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3746 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2775 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3750 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2776 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3754 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2774 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3806 + + ObjectType_8 + + 0 + ProgramTransitionAuditEventType + + + + ProgramTransitionAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2315 + + + + + i=47 + + false + + i=3825 + + + + false + + + + i=3825 + + Variable_2 + + 0 + Transition + + + + Transition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=3806 + + + + + i=40 + + false + + i=2767 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3826 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3826 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3825 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3830 + + Variable_2 + + 0 + CurrentState + + + + CurrentState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2760 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3831 + + + + + i=46 + + false + + i=3833 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3831 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3833 + + Variable_2 + + 0 + Number + + + + Number + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3835 + + Variable_2 + + 0 + LastTransition + + + + LastTransition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=2767 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=3836 + + + + + i=46 + + false + + i=3838 + + + + + i=46 + + false + + i=3839 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3836 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3835 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3838 + + Variable_2 + + 0 + Number + + + + Number + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3835 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3839 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3835 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3840 + + Variable_2 + + 0 + CreateSessionId + + + + CreateSessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3841 + + Variable_2 + + 0 + CreateClientName + + + + CreateClientName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3842 + + Variable_2 + + 0 + InvocationCreationTime + + + + InvocationCreationTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3843 + + Variable_2 + + 0 + LastTransitionTime + + + + LastTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2399 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3844 + + Variable_2 + + 0 + LastMethodCall + + + + LastMethodCall + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3845 + + Variable_2 + + 0 + LastMethodSessionId + + + + LastMethodSessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3846 + + Variable_2 + + 0 + LastMethodInputArguments + + + + LastMethodInputArguments + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3847 + + Variable_2 + + 0 + LastMethodOutputArguments + + + + LastMethodOutputArguments + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=3848 + + Variable_2 + + 0 + LastMethodCallTime + + + + LastMethodCallTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3849 + + Variable_2 + + 0 + LastMethodReturnStatus + + + + LastMethodReturnStatus + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3850 + + Object_1 + + 0 + FinalResultData + + + + FinalResultData + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2391 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=3874 + + Variable_2 + + 0 + Retain + + + + Retain + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=3875 + + Method_4 + + 0 + ConditionRefresh + + + + ConditionRefresh + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=3875 + + + + + i=3065 + + false + + i=2787 + + + + + i=3065 + + false + + i=2788 + + + + + i=46 + + false + + i=3876 + + + + true + true + + + + i=3876 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3875 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SubscriptionId + + i=288 + + -1 + + + + The identifier for the suscription to refresh. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=6098 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2930 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=6100 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2932 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=6101 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2933 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7591 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=256 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Numeric + + + + String + + + + Guid + + + + Opaque + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7594 + + DataType_64 + + 0 + EnumValueType + + + + EnumValueType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=102 + + + + + i=38 + + false + + i=8251 + + + + + i=38 + + false + + i=7616 + + + + + i=38 + + false + + i=15082 + + + + false + + + + + i=7595 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=302 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Invalid + + + + None + + + + Sign + + + + SignAndEncrypt + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7596 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=303 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Anonymous + + + + UserName + + + + Certificate + + + + IssuedToken + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7597 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=307 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Server + + + + Client + + + + ClientAndServer + + + + DiscoveryServer + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7598 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=315 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Issue + + + + Renew + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7605 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=576 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Equals + + + + IsNull + + + + GreaterThan + + + + LessThan + + + + GreaterThanOrEqual + + + + LessThanOrEqual + + + + Like + + + + Not + + + + Between + + + + InList + + + + And + + + + Or + + + + Cast + + + + InView + + + + OfType + + + + RelatedTo + + + + BitwiseAnd + + + + BitwiseOr + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7611 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=851 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + None + + + + Cold + + + + Warm + + + + Hot + + + + Transparent + + + + HotAndMirrored + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7612 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=852 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Running + + + + Failed + + + + NoConfiguration + + + + Suspended + + + + Shutdown + + + + Test + + + + CommunicationFault + + + + Unknown + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7614 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=890 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + AbsoluteValue + + + + PercentOfValue + + + + PercentOfRange + + + + PercentOfEURange + + + + Unknown + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=7616 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=7594 + + + + + i=39 + + false + + i=8291 + + + + 0 + + + + i=7617 + + Variable_2 + + 0 + Opc.Ua + + + + Opc.Ua + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=72 + + + + + i=47 + + true + + i=93 + + + + + i=46 + + false + + i=7619 + + + + + i=46 + + false + + i=15037 + + + + + i=47 + + false + + i=14873 + + + + + i=47 + + false + + i=15734 + + + + + i=47 + + false + + i=18824 + + + + + i=47 + + false + + i=18827 + + + + + i=47 + + false + + i=18830 + + + + + i=47 + + false + + i=18833 + + + + + i=47 + + false + + i=18836 + + + + + i=47 + + false + + i=18839 + + + + + i=47 + + false + + i=18842 + + + + + i=47 + + false + + i=18845 + + + + + i=47 + + false + + i=18848 + + + + + i=47 + + false + + i=15738 + + + + + i=47 + + false + + i=23514 + + + + + i=47 + + false + + i=12681 + + + + + i=47 + + false + + i=15741 + + + + + i=47 + + false + + i=14855 + + + + + i=47 + + false + + i=15599 + + + + + i=47 + + false + + i=15602 + + + + + i=47 + + false + + i=15501 + + + + + i=47 + + false + + i=15521 + + + + + i=47 + + false + + i=14849 + + + + + i=47 + + false + + i=14852 + + + + + i=47 + + false + + i=14876 + + + + + i=47 + + false + + i=15766 + + + + + i=47 + + false + + i=15769 + + + + + i=47 + + false + + i=14324 + + + + + i=47 + + false + + i=15772 + + + + + i=47 + + false + + i=15775 + + + + + i=47 + + false + + i=15778 + + + + + i=47 + + false + + i=15781 + + + + + i=47 + + false + + i=15784 + + + + + i=47 + + false + + i=15787 + + + + + i=47 + + false + + i=21156 + + + + + i=47 + + false + + i=15793 + + + + + i=47 + + false + + i=15854 + + + + + i=47 + + false + + i=15857 + + + + + i=47 + + false + + i=15860 + + + + + i=47 + + false + + i=21159 + + + + + i=47 + + false + + i=21162 + + + + + i=47 + + false + + i=21165 + + + + + i=47 + + false + + i=15866 + + + + + i=47 + + false + + i=15869 + + + + + i=47 + + false + + i=15872 + + + + + i=47 + + false + + i=15877 + + + + + i=47 + + false + + i=15880 + + + + + i=47 + + false + + i=15883 + + + + + i=47 + + false + + i=15886 + + + + + i=47 + + false + + i=21002 + + + + + i=47 + + false + + i=15889 + + + + + i=47 + + false + + i=21168 + + + + + i=47 + + false + + i=15895 + + + + + i=47 + + false + + i=15898 + + + + + i=47 + + false + + i=15919 + + + + + i=47 + + false + + i=15922 + + + + + i=47 + + false + + i=15925 + + + + + i=47 + + false + + i=15931 + + + + + i=47 + + false + + i=17469 + + + + + i=47 + + false + + i=21171 + + + + + i=47 + + false + + i=15524 + + + + + i=47 + + false + + i=15940 + + + + + i=47 + + false + + i=15943 + + + + + i=47 + + false + + i=15946 + + + + + i=47 + + false + + i=23502 + + + + + i=47 + + false + + i=16131 + + + + + i=47 + + false + + i=18178 + + + + + i=47 + + false + + i=18181 + + + + + i=47 + + false + + i=18184 + + + + + i=47 + + false + + i=18187 + + + + + i=47 + + false + + i=7650 + + + + + i=47 + + false + + i=7656 + + + + + i=47 + + false + + i=14870 + + + + + i=47 + + false + + i=12767 + + + + + i=47 + + false + + i=12770 + + + + + i=47 + + false + + i=8914 + + + + + i=47 + + false + + i=7665 + + + + + i=47 + + false + + i=12213 + + + + + i=47 + + false + + i=7662 + + + + + i=47 + + false + + i=7668 + + + + + i=47 + + false + + i=7782 + + + + + i=47 + + false + + i=12902 + + + + + i=47 + + false + + i=12905 + + + + + i=47 + + false + + i=7698 + + + + + i=47 + + false + + i=7671 + + + + + i=47 + + false + + i=7674 + + + + + i=47 + + false + + i=7677 + + + + + i=47 + + false + + i=7680 + + + + + i=47 + + false + + i=7683 + + + + + i=47 + + false + + i=7728 + + + + + i=47 + + false + + i=7731 + + + + + i=47 + + false + + i=7734 + + + + + i=47 + + false + + i=7737 + + + + + i=47 + + false + + i=12718 + + + + + i=47 + + false + + i=12721 + + + + + i=47 + + false + + i=7686 + + + + + i=47 + + false + + i=7929 + + + + + i=47 + + false + + i=7932 + + + + + i=47 + + false + + i=7935 + + + + + i=47 + + false + + i=7938 + + + + + i=47 + + false + + i=7941 + + + + + i=47 + + false + + i=7944 + + + + + i=47 + + false + + i=7947 + + + + + i=47 + + false + + i=8004 + + + + + i=47 + + false + + i=8067 + + + + + i=47 + + false + + i=8073 + + + + + i=47 + + false + + i=8076 + + + + + i=47 + + false + + i=8172 + + + + + i=47 + + false + + i=7692 + + + + + i=47 + + false + + i=8208 + + + + + i=47 + + false + + i=11959 + + + + + i=47 + + false + + i=11962 + + + + + i=47 + + false + + i=8211 + + + + + i=47 + + false + + i=8214 + + + + + i=47 + + false + + i=8217 + + + + + i=47 + + false + + i=8220 + + + + + i=47 + + false + + i=8223 + + + + + i=47 + + false + + i=8226 + + + + + i=47 + + false + + i=7659 + + + + + i=47 + + false + + i=8229 + + + + + i=47 + + false + + i=8232 + + + + + i=47 + + false + + i=8235 + + + + + i=47 + + false + + i=8238 + + + + + i=47 + + false + + i=8241 + + + + + i=47 + + false + + i=12183 + + + + + i=47 + + false + + i=12186 + + + + + i=47 + + false + + i=12091 + + + + + i=47 + + false + + i=12094 + + + + + i=47 + + false + + i=8247 + + + + + i=47 + + false + + i=15398 + + + + + i=47 + + false + + i=8244 + + + + + + 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 +ICAgDQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlQk1QIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW1hZ2VHSUYiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJJbWFnZUpQRyI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlUE5HIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iQXVkaW9EYXRhVHlwZSI+DQog +IDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkJpdEZpZWxkTWFz +a0RhdGFUeXBlIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IktleVZhbHVlUGFpciIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJLZXkiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVuZHBvaW50 +VHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFByb2ZpbGVVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IlJhdGlvbmFsTnVtYmVyIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVyYXRvciIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbm9taW5hdG9yIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJWZWN0b3IiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRFZl +Y3RvciIgQmFzZVR5cGU9InRuczpWZWN0b3IiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJZIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IloiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgQmFzZVR5cGU9InRuczpDYXJ0ZXNpYW5Db29y +ZGluYXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJYIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iWiIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3JpZW50YXRpb24i +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRE9yaWVudGF0aW9uIiBCYXNlVHlw +ZT0idG5zOk9yaWVudGF0aW9uIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkEiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQiIgVHlwZU5hbWU9Im9wYzpEb3Vi +bGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJG +cmFtZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVGhyZWVERnJhbWUiIEJhc2VUeXBl +PSJ0bnM6RnJhbWUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FydGVzaWFuQ29vcmRpbmF0ZXMi +IFR5cGVOYW1lPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJPcmllbnRhdGlvbiIgVHlwZU5hbWU9InRuczpUaHJlZURPcmllbnRhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJPcGVuRmlsZU1vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlJlYWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IldyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJF +cmFzZUV4aXN0aW5nIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJBcHBlbmQiIFZhbHVlPSI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBlIiBMZW5ndGhJbkJpdHM9 +IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyTmFtZSIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVGh1bWJwcmludCIgVmFsdWU9IjIi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUm9sZSIgVmFsdWU9IjMiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBJZCIgVmFsdWU9IjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQW5vbnltb3VzIiBWYWx1ZT0iNSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBdXRoZW50aWNhdGVkVXNlciIgVmFsdWU9IjYiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWFUeXBlIiBUeXBlTmFtZT0idG5zOklkZW50aXR5 +Q3JpdGVyaWFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWEiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpY0NvZGUiIFR5cGVOYW1lPSJvcGM6 +SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeHBvbmVudCIgVHlwZU5hbWU9Im9wYzpT +Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFscGhhYmV0aWNDb2RlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbmN5IiBUeXBlTmFtZT0i +dWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpF +bnVtZXJhdGVkVHlwZSBOYW1lPSJUcnVzdExpc3RNYXNrcyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENlcnRpZmljYXRlcyIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENybHMiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgVmFs +dWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSXNzdWVyQ3JscyIgVmFs +dWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMTUi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iVHJ1c3RMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkTGlzdHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVz +IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENlcnRp +ZmljYXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZUcnVzdGVkQ3JscyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRydXN0ZWRDcmxzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENybHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZklzc3VlckNybHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc3N1ZXJDcmxzIiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ3JscyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWNpbWFsRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2NhbGUiIFR5cGVOYW1lPSJvcGM6SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1l +c3BhY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFt +ZXNwYWNlcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlw +ZXMiIFR5cGVOYW1lPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +U3RydWN0dXJlRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRh +VHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVt +RGF0YVR5cGVzIiBUeXBlTmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbnVtRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFU +eXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBs +ZURhdGFUeXBlcyIgVHlwZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZp +ZWxkPSJOb09mU2ltcGxlRGF0YVR5cGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN0cnVjdHVyZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVk +TmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iRW51bURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3Jp +cHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGVm +aW5pdGlvbiIgVHlwZU5hbWU9InRuczpFbnVtRGVmaW5pdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkJ1aWx0SW5UeXBlIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2ltcGxlVHlwZURlc2Ny +aXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBl +TmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsdEluVHlwZSIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlVBQmluYXJ5RmlsZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlU2No +ZW1hSGVhZGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0 +bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3RydWN0dXJlRGF0YVR5 +cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlwZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0YVR5cGVzIiBUeXBl +TmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURhdGFUeXBlcyIgVHlw +ZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2ltcGxl +RGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2NoZW1hTG9jYXRpb24iIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpbGVIZWFkZXIi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWxlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWxlSGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQm9keSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +UHViU3ViU3RhdGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQYXVzZWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik9wZXJhdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJFcnJvciIgVmFsdWU9IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldE1ldGFEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpE +YXRhVHlwZVNjaGVtYUhlYWRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmFtZXNwYWNl +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFj +ZXMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZk5hbWVzcGFjZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RydWN0dXJlRGF0YVR5cGVzIiBU +eXBlTmFtZT0idG5zOlN0cnVjdHVyZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlN0cnVj +dHVyZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURhdGFU +eXBlcyIgVHlwZU5hbWU9InRuczpFbnVtRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW51 +bURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTaW1wbGVEYXRhVHlwZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaW1wbGVEYXRh +VHlwZXMiIFR5cGVOYW1lPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0i +Tm9PZlNpbXBsZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZp +ZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxk +cyIgVHlwZU5hbWU9InRuczpGaWVsZE1ldGFEYXRhIiBMZW5ndGhGaWVsZD0iTm9PZkZpZWxkcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1 +aWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbiIgVHlwZU5h +bWU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkTWV0YURhdGEiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlv +biIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJG +aWVsZEZsYWdzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRGaWVsZEZsYWdzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnVpbHRJblR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZElkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUHJvcGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQ +YWlyIiBMZW5ndGhGaWVsZD0iTm9PZlByb3BlcnRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIExl +bmd0aEluQml0cz0iMTYiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQcm9tb3RlZEZpZWxkIiBWYWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFU +eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNaW5vclZlcnNpb24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hlZERhdGFT +ZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0Rm9sZGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldEZvbGRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZp +ZWxkPSJOb09mRGF0YVNldEZvbGRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRN +ZXRhRGF0YSIgVHlwZU5hbWU9InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9InRuczpLZXlW +YWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRXh0ZW5zaW9uRmllbGRzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldFNvdXJjZSIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ0ludGVydmFs +SGludCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFk +YmFuZFR5cGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVhZGJhbmRWYWx1ZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnN0aXR1dGVWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZNZXRhRGF0YVByb3BlcnRpZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +UHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNl +dFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdWJsaXNoZWREYXRh +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVk +RGF0YSIgVHlwZU5hbWU9InRuczpQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlB1Ymxpc2hlZERhdGEiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIEJhc2VUeXBl +PSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkV2ZW50Tm90aWZpZXIiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mU2VsZWN0ZWRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RlZEZpZWxkcyIgVHlwZU5hbWU9InRuczpTaW1wbGVBdHRy +aWJ1dGVPcGVyYW5kIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdGVkRmllbGRzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0 +YVNldEZpZWxkQ29udGVudE1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVl +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNDb2RlIiBWYWx1ZT0iMSIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2VUaW1lc3RhbXAiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclRpbWVzdGFtcCIgVmFsdWU9 +IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU291cmNlUGljb1NlY29uZHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclBpY29T +ZWNvbmRzIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmF3 +RGF0YSIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0RmllbGRDb250 +ZW50TWFzayIgVHlwZU5hbWU9InRuczpEYXRhU2V0RmllbGRDb250ZW50TWFzayIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldFdyaXRlclBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkRh +dGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJNZXNzYWdlU2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlNb2RlIiBUeXBlTmFtZT0idG5zOk1lc3NhZ2VT +ZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlY3VyaXR5 +S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24i +IExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3Jp +dGVyR3JvdXBEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBl +PSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJs +ZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0 +YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5h +bWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5 +U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUi +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5 +cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGll +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlckdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6 +VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVydmFsIiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IktlZXBBbGl2ZVRpbWUi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHki +IFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkhlYWRlckxheW91dFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VTZXR0 +aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRXcml0ZXJE +YXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91 +cE1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHViU3ViQ29u +bmVjdGlvbkRhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUHVibGlzaGVySWQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25Qcm9wZXJ0aWVzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvblBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkNv +bm5lY3Rpb25Qcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0U2V0 +dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0idG5zOldyaXRlckdyb3VwRGF0YVR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mV3JpdGVyR3JvdXBzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9InRuczpSZWFkZXJHcm91cERhdGFUeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlJlYWRlckdyb3VwcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmV0d29ya0ludGVyZmFjZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTmV0d29ya0FkZHJlc3NV +cmxEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBT +b3VyY2VUeXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZGVyR3JvdXBEYXRhVHlwZSIg +QmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBE +YXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5 +TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VU +eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERl +c2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFs +dWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGllcyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRSZWFk +ZXJzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNl +dFJlYWRlcnMiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZkRhdGFTZXRSZWFkZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBl +TmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZXJJZCIg +VHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZXJHcm91 +cElkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFT +ZXRXcml0ZXJJZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEYXRhU2V0TWV0YURhdGEiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBlTmFtZT0i +dG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVz +c2FnZVJlY2VpdmVUaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdl +U2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlHcm91cElkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0 +eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mRGF0YVNldFJlYWRlclByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0UmVhZGVyUHJvcGVydGllcyIgVHlwZU5h +bWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFJlYWRlclByb3Bl +cnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5h +bWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnNjcmliZWREYXRhU2V0IiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6U3Vic2NyaWJl +ZERhdGFTZXREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVGFyZ2V0VmFyaWFi +bGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +VmFyaWFibGVzIiBUeXBlTmFtZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIExlbmd0aEZpZWxk +PSJOb09mVGFyZ2V0VmFyaWFibGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldEZpZWxkSWQi +IFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlY2VpdmVySW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJU +YXJnZXROb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBdHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJXcml0ZUluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBUeXBlTmFtZT0idG5zOk92ZXJyaWRl +VmFsdWVIYW5kbGluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik92ZXJyaWRlVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgTGVuZ3RoSW5CaXRz +PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzYWJsZWQiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxhc3RVc2FibGVWYWx1ZSIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3ZlcnJpZGVWYWx1ZSIg +VmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgQmFzZVR5cGU9InRu +czpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVu +dE5vZGVOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25U +eXBlIiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJTdWJDb25maWd1cmF0 +aW9uRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlB1Ymxpc2hlZERhdGFTZXRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1lPSJ0bnM6UHVi +bGlzaGVkRGF0YVNldERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlB1Ymxpc2hlZERhdGFTZXRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvbnMiIFR5cGVOYW1lPSJ0 +bnM6UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbm5lY3Rpb25z +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5h +bWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlVuZGVmaW5lZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iQXNjZW5kaW5nV3JpdGVySWQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIgSXNP +cHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZh +bHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlB1Ymxpc2hlcklkIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHcm91cEhlYWRlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBWZXJz +aW9uIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOZXR3b3Jr +TWVzc2FnZU51bWJlciIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iUGF5bG9hZEhlYWRlciIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlRpbWVzdGFtcCIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJQaWNvU2Vjb25kcyIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEYXRhU2V0Q2xhc3NJZCIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQcm9tb3RlZEZpZWxkcyIgVmFsdWU9IjEwMjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVWFk +cFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T3JkZXJpbmci +IFR5cGVOYW1lPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6VWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ09mZnNl +dCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHVi +bGlzaGluZ09mZnNldCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlB1Ymxpc2hpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiBMZW5ndGhGaWVsZD0i +Tm9PZlB1Ymxpc2hpbmdPZmZzZXQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIExl +bmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJUaW1lc3RhbXAiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlBpY29TZWNvbmRzIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJTdGF0dXMiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWlub3JWZXJzaW9uIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iU2VxdWVuY2VOdW1iZXIiIFZhbHVlPSIzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3Nh +Z2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1l +PSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDb25maWd1cmVkU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQx +NiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVy +c2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3 +b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5z +OlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpVYWRwRGF0YVNldE1lc3Nh +Z2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZh +bCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNlaXZl +T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTmV0d29ya01lc3NhZ2VIZWFkZXIiIFZhbHVlPSIxIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFTZXRNZXNzYWdlSGVhZGVyIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaW5nbGVEYXRhU2V0TWVz +c2FnZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHVibGlz +aGVySWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFT +ZXRDbGFzc0lkIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwbHlUbyIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgQmFz +ZVR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25OZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBMZW5n +dGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iRGF0YVNldFdyaXRlcklkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJNZXRhRGF0YVZlcnNpb24iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXAiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlN0YXR1cyIgVmFsdWU9IjE2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5h +bWU9InRuczpKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJKc29uRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5 +cGVOYW1lPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERh +dGFUeXBlIiBCYXNlVHlwZT0idG5zOkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9u +T2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9 +InRuczpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1lc3NhZ2VSZXBlYXRDb3VudCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTWVzc2FnZVJlcGVhdERlbGF5IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9r +ZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6Q29ubmVjdGlvblRy +YW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRpY2F0aW9u +UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0 +eU9mU2VydmljZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iTm90U3BlY2lmaWVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJCZXN0RWZmb3J0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBdExlYXN0T25jZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iQXRNb3N0T25jZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iRXhhY3RseU9uY2UiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNw +b3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2 +ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZp +Y2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5z +OkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJR +dWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0i +dG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNZXRhRGF0YVVwZGF0ZVRpbWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291 +cmNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1 +dGhlbnRpY2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgVHlwZU5hbWU9InRuczpC +cm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWV0YURhdGFRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkRpYWdub3N0aWNzTGV2 +ZWwiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJh +c2ljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBZHZhbmNl +ZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5mbyIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG9nIiBWYWx1ZT0iMyIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWJ1ZyIgVmFsdWU9IjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUHVi +U3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIExlbmd0aEluQml0cz0iMzIiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluZm9ybWF0aW9uIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcnJvciIgVmFsdWU9IjEiIC8+DQogIDwv +b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWxpYXNO +YW1lRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWxpYXNOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iSWRUeXBl +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOdW1l +cmljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJpbmci +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikd1aWQiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9wYXF1ZSIgVmFsdWU9IjMi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTm9kZUNsYXNzIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJVbnNwZWNpZmllZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iT2JqZWN0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWYXJpYWJsZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWV0aG9kIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJP +YmplY3RUeXBlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YXJpYWJsZVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJSZWZlcmVuY2VUeXBlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iRGF0YVR5cGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWaWV3IiBWYWx1ZT0iMTI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 +b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlBlcm1pc3Npb25UeXBlIiBMZW5ndGhJbkJpdHM9IjMy +IiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u +ZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQnJvd3NlIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWFkUm9sZVBlcm1p +c3Npb25zIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0 +ZUF0dHJpYnV0ZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +V3JpdGVSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IldyaXRlSGlzdG9yaXppbmciIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJSZWFkIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJSZWFkSGlzdG9yeSIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJJbnNlcnRIaXN0b3J5IiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik1vZGlmeUhpc3RvcnkiIFZhbHVlPSI1MTIiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVsZXRlSGlzdG9yeSIgVmFsdWU9IjEwMjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVjZWl2ZUV2ZW50cyIgVmFsdWU9IjIwNDgiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2FsbCIgVmFsdWU9IjQwOTYiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkUmVmZXJlbmNlIiBWYWx1ZT0iODE5MiIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW1vdmVSZWZlcmVuY2UiIFZhbHVl +PSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWxldGVOb2RlIiBW +YWx1ZT0iMzI3NjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkTm9kZSIg +VmFsdWU9IjY1NTM2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkFjY2Vzc0xldmVsVHlwZSIgTGVuZ3RoSW5CaXRzPSI4IiBJc09wdGlv +blNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVudFJlYWQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkN1cnJlbnRXcml0ZSIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVJlYWQiIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3RvcnlXcml0ZSIg +VmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VtYW50aWNDaGFu +Z2UiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNX +cml0ZSIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRpbWVz +dGFtcFdyaXRlIiBWYWx1ZT0iNjQiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUiIExlbmd0aEluQml0cz0i +MzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJyZW50 +UmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVu +dFdyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0 +b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlz +dG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +ZW1hbnRpY0NoYW5nZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlN0YXR1c1dyaXRlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVGltZXN0YW1wV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25hdG9taWNSZWFkIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik5vbmF0b21pY1dyaXRlIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlRnVsbEFycmF5T25seSIgVmFsdWU9IjEwMjQiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +RXZlbnROb3RpZmllclR5cGUiIExlbmd0aEluQml0cz0iOCIgSXNPcHRpb25TZXQ9InRydWUiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1YnNjcmliZVRvRXZlbnRzIiBWYWx1ZT0iMSIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5UmVhZCIgVmFsdWU9IjQiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVdyaXRlIiBWYWx1ZT0iOCIg +Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJBY2Nlc3NSZXN0cmljdGlvblR5cGUiIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0 +cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaWduaW5nUmVxdWlyZWQiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkVuY3J5cHRpb25SZXF1aXJlZCIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2Vzc2lvblJlcXVp +cmVkIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6 +UGVybWlzc2lvblR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51 +bWVyYXRlZFR5cGUgTmFtZT0iU3RydWN0dXJlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RydWN0dXJlIiBWYWx1ZT0iMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJ1Y3R1cmVXaXRoT3B0aW9uYWxGaWVsZHMiIFZh +bHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVuaW9uIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJTdHJ1Y3R1cmVGaWVsZCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT3B0aW9uYWwiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9InVh +Ok5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cnVjdHVyZVR5cGUiIFR5cGVOYW1l +PSJ0bnM6U3RydWN0dXJlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZGaWVsZHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWVsZHMiIFR5 +cGVOYW1lPSJ0bnM6U3RydWN0dXJlRmllbGQiIExlbmd0aEZpZWxkPSJOb09mRmllbGRzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVu +dW1EZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmllbGRzIiBUeXBlTmFtZT0idG5zOkVudW1GaWVsZCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5h +bWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxv +Y2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5h +bWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRl +TWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIg +TGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBl +cm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBUeXBlTmFtZT0i +dG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJJbnN0YW5j +ZU5vZGUiIEJhc2VUeXBlPSJ0bnM6Tm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQi +IFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlw +ZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFt +ZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFt +ZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1p +c3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBl +TmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOk5vZGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlw +ZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIg +U291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlzc2lv +bnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2VyUm9s +ZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUi +IExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBU +eXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJPYmplY3ROb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2Rl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVD +bGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93 +c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2Fs +aXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6 +Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl +cldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5h +bWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1p +c3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVm +ZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVO +b2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJ +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+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fi +c3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVOb2RlIiBCYXNlVHlwZT0i +dG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5v +ZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVh +bGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9w +YzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJv +bGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1lbnNpb25z +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJheURpbWVu +c2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NMZXZlbCIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBUeXBlTmFt +ZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0 +b3JpemluZyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzTGV2ZWxFeCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVUeXBlTm9kZSIg +QmFzZVR5cGU9InRuczpUeXBlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlz +c2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0i +dG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFt +ZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJy +YXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJh +eURpbWVuc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFt +ZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIEJhc2VUeXBlPSJ0bnM6VHlwZU5v +ZGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIg +VHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNv +dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4 +dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1h +c2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xl +UGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2Vz +IiBUeXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9v +bGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9Ik1ldGhvZE5vZGUiIEJhc2VUeXBlPSJ0bnM6SW5zdGFuY2VOb2Rl +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291 +cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5 +cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNr +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNl +VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Np +b25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBl +cm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJv +bGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIg +VHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9Im9w +YzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlZpZXdOb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0i +dG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9 +InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9u +cyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9s +ZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5z +Ok5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5 +dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZp +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 +aWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25P +YmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVmZXJlbmNlTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ludmVyc2UiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh +biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRhcmdldElkIiBUeXBlTmFtZT0idWE6RXhwYW5k +ZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQXJndW1lbnQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbnVtVmFs +dWVUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVudW1G +aWVsZCIgQmFzZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiBTb3VyY2VUeXBlPSJ0bnM6RW51bVZhbHVlVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3B0aW9uU2V0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWxpZEJpdHMiIFR5cGVOYW1lPSJvcGM6 +Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJVbmlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOb3JtYWxpemVk +U3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i +RGVjaW1hbFN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IkR1cmF0aW9uU3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9w +YXF1ZVR5cGUgTmFtZT0iVGltZVN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9w +YzpPcGFxdWVUeXBlIE5hbWU9IkRhdGVTdHJpbmciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQog +IDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEdXJhdGlvbiI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoN +CiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlV0Y1RpbWUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0K +DQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJMb2NhbGVJZCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaW1lWm9uZURhdGFUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9mZnNldCIgVHlw +ZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRheWxpZ2h0U2F2aW5n +SW5PZmZzZXQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkluZGV4Ij4NCiAgPC9vcGM6T3BhcXVlVHlw +ZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW50ZWdlcklkIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVyIiBW +YWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDbGllbnQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNsaWVudEFuZFNlcnZlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzY292ZXJ5U2Vy +dmVyIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXBwbGljYXRpb25O +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFwcGxpY2F0aW9uVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVByb2ZpbGVVcmkiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpc2NvdmVyeVVybHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlVcmxz +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuRGlhZ25vc3RpY3MiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXVkaXRFbnRyeUlkIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVvdXRIaW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZGl0aW9uYWxI +ZWFkZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0 +YW1wIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2aWNlUmVzdWx0IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZpY2VEaWFnbm9zdGljcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cmluZ1RhYmxlIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RyaW5nVGFibGUiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZlN0cmluZ1RhYmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWRkaXRpb25hbEhlYWRlciIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlZl +cnNpb25UaW1lIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNlcnZpY2VGYXVsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVcmlzVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVyaXNWZXJzaW9uIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZVcmlzVmVyc2lvbiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU2VydmVyVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJO +b09mU2VydmVyVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2Vzc2lv +bmxlc3NJbnZva2VSZXNwb25zZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5hbWVzcGFjZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZOYW1lc3BhY2VVcmlzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUlkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxl +SWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpbmRTZXJ2ZXJzUmVz +cG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6QXBwbGljYXRpb25EZXNj +cmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZlck9uTmV0d29yayIgQmFz +ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNvcmRJ +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Nv +dmVyeVVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtS +ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nUmVjb3JkSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVjb3Jkc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXR5Rmls +dGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVy +Q2FwYWJpbGl0eUZpbHRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +U2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTGFzdENvdW50ZXJSZXNldFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6U2VydmVyT25O +ZXR3b3JrIiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlcnMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlm +aWNhdGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iU2lnbiIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iU2lnbkFuZEVuY3J5cHQiIFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVzZXJUb2tlblR5cGUiIExlbmd0aEluQml0 +cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFub255bW91cyIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlck5hbWUiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNlcnRpZmljYXRlIiBWYWx1ZT0i +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc3N1ZWRUb2tlbiIgVmFsdWU9 +IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iVXNlclRva2VuUG9saWN5IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuVHlwZSIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5UeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVkVG9rZW5UeXBlIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklzc3VlckVuZHBvaW50VXJsIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5 +VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludERlc2NyaXB0aW9uIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJs +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIg +VHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2VydmVyQ2VydGlmaWNhdGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2Vj +dXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJJZGVu +dGl0eVRva2VucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5Qb2xpY3kiIExlbmd0 +aEZpZWxkPSJOb09mVXNlcklkZW50aXR5VG9rZW5zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUxldmVsIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9p +bnRzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUHJvZmlsZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQcm9maWxlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +UHJvZmlsZVVyaXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l +PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9p +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RW5kcG9pbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlck5hbWVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyTmFtZXMiIFR5cGVOYW1l +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlck5hbWVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5VXJs +cyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRGlzY292ZXJ5VXJscyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbWFwaG9yZUZpbGVQYXRoIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT25saW5lIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5h +bWU9InRuczpSZWdpc3RlcmVkU2VydmVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ0bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNZG5zU2VydmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFt +ZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVn +aXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXIiIFR5cGVOYW1lPSJ0bnM6UmVnaXN0 +ZXJlZFNlcnZlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1 +cmF0aW9uIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +Y292ZXJ5Q29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMiIFR5cGVO +YW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlw +ZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW5ldyIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2hhbm5lbFNlY3VyaXR5VG9r +ZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q2hhbm5lbElkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlRva2VuSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3JlYXRlZEF0IiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmV2aXNlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJlQ2hh +bm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50UHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RUeXBlIiBUeXBlTmFtZT0i +dG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl +Y3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0i +dG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyUHJvdG9j +b2xWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNlY3VyaXR5VG9rZW4iIFR5cGVOYW1lPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJOb25jZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2Vy +dGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTaWduYXR1cmUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlNlc3Npb25BdXRoZW50 +aWNhdGlvblRva2VuIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlNpZ25hdHVyZURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWxnb3JpdGhtIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpZ25hdHVyZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNyZWF0ZVNlc3Npb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBl +TmFtZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2Vzc2lvbk5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRTZXNzaW9uVGltZW91dCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhSZXNwb25zZU1l +c3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvblRva2VuIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3Bj +OkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlck5vbmNlIiBUeXBlTmFtZT0i +b3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlckVuZHBvaW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0idG5zOlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mU2Vy +dmVyU29mdHdhcmVDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJT +aWduYXR1cmUiIFR5cGVOYW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heFJlcXVlc3RNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNl +cklkZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFub255bW91c0lk +ZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0 +bnM6VXNlcklkZW50aXR5VG9rZW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlck5hbWVJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0i +dG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFzc3dvcmQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ilg1MDlJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SXNzdWVkSWRlbnRpdHlUb2tlbiIgQmFzZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQb2xpY3lJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJj +ZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRv +a2VuRGF0YSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5jcnlwdGlvbkFsZ29yaXRobSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJSc2FFbmNyeXB0ZWRT +ZWNyZXQiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVl +c3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRTaWduYXR1cmUiIFR5cGVO +YW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDbGll +bnRTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudFNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNp +Z25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mQ2xpZW50U29mdHdhcmVD +ZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9i +amVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJUb2tlblNpZ25hdHVyZSIgVHlwZU5h +bWU9InRuczpTaWduYXR1cmVEYXRhIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VydmVyTm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxk +PSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5m +b3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9z +dGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +aWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFt +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJz +Y3JpcHRpb25zIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FuY2VsUmVxdWVz +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXF1ZXN0SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYW5jZWxS +ZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNhbmNlbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJO +b2RlQXR0cmlidXRlc01hc2siIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkJyb3dzZU5hbWUiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEZXNjcmlwdGlvbiIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkRpc3BsYXlOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRXZlbnROb3RpZmllciIgVmFsdWU9IjEyOCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFeGVjdXRhYmxlIiBWYWx1ZT0iMjU2IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3Rvcml6aW5nIiBWYWx1ZT0iNTEyIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2VOYW1lIiBWYWx1ZT0iMTAyNCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc0Fic3RyYWN0IiBWYWx1ZT0iMjA0 +OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVmFsdWU9IjQwOTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9k +ZUNsYXNzIiBWYWx1ZT0iODE5MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b2RlSWQiIFZhbHVlPSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +eW1tZXRyaWMiIFZhbHVlPSIzMjc2OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJVc2VyQWNjZXNzTGV2ZWwiIFZhbHVlPSI2NTUzNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVmFsdWU9IjEzMTA3MiIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyV3JpdGVNYXNrIiBWYWx1ZT0iMjYyMTQ0IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlUmFuayIgVmFsdWU9IjUyNDI4OCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZU1hc2siIFZhbHVlPSIxMDQ4NTc2 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlIiBWYWx1ZT0iMjA5NzE1 +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24i +IFZhbHVlPSI0MTk0MzA0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJvbGVQ +ZXJtaXNzaW9ucyIgVmFsdWU9IjgzODg2MDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBWYWx1ZT0iMTY3NzcyMTYiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMzM1NTQ0MzEiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQmFzZU5vZGUiIFZhbHVlPSIyNjUwMTIyMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZhbHVlPSIyNjUwMTM0OCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3RUeXBlIiBWYWx1ZT0iMjY1MDMyNjgi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmFyaWFibGUiIFZhbHVlPSIyNjU3 +MTM4MyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYXJpYWJsZVR5cGUiIFZh +bHVlPSIyODYwMDQzOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2Qi +IFZhbHVlPSIyNjYzMjU0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZl +cmVuY2VUeXBlIiBWYWx1ZT0iMjY1MzcwNjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVmlldyIgVmFsdWU9IjI2NTAxMzU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJp +YnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +cGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9i +amVjdEF0dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNv +dXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRp +c3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5h +bWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlZhcmlhYmxlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0 +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJW +YWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +VHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVl +UmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZB +cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0i +Tm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVs +IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNz +TGV2ZWwiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmlt +dW1TYW1wbGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ikhpc3Rvcml6aW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kQXR0 +cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlw +ZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5h +bWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVh +OkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0 +ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0 +ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJv +b2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRl +eHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVBdHRyaWJ1 +dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0 +bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIg +VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFz +ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSXNBYnN0cmFjdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZmVy +ZW5jZVR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMy +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgQmFzZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRB +dHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1l +PSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmlld0F0 +dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlO +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3Jp +dGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1 +dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0i +b3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBl +TmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0i +dWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJHZW5lcmljQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +ZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +QXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZBdHRyaWJ1dGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVudE5v +ZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdGVkTmV3Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlm +aWVkTmFtZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRu +czpOb2RlQ2xhc3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQXR0cmlidXRlcyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVE +ZWZpbml0aW9uIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNSZXN1bHQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Rh +dHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBZGRlZE5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBZGROb2Rlc1JlcXVlc3QiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVz +dEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvQWRkIiBUeXBlTmFtZT0idG5zOkFkZE5vZGVzSXRlbSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvQWRkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QWRkTm9kZXNSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU291cmNlTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlk +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6 +Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNGb3J3YXJkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRTZXJ2ZXJVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBU +eXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJ0bnM6QWRk +UmVmZXJlbmNlc0l0ZW0iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlc1RvQWRkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJl +ZmVyZW5jZXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRl +ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1 +c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIg +TGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVRhcmdl +dFJlZmVyZW5jZXMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3Qi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZk5vZGVzVG9EZWxldGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvRGVsZXRlIiBUeXBlTmFtZT0idG5zOkRlbGV0ZU5vZGVz +SXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvRGVsZXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZU5vZGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2Fy +ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEZWxldGVCaWRpcmVjdGlvbmFsIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXNUb0RlbGV0 +ZSIgVHlwZU5hbWU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS +ZWZlcmVuY2VzVG9EZWxldGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1 +bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw +ZSBOYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0 +PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBY2Nlc3NMZXZlbCIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1 +ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb250YWluc05vTG9vcHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlIiBW +YWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVzY3JpcHRpb24i +IFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFt +ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkV2ZW50Tm90 +aWZpZXIiIFZhbHVlPSIxMjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXhl +Y3V0YWJsZSIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJI +aXN0b3JpemluZyIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJJbnZlcnNlTmFtZSIgVmFsdWU9IjEwMjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iSXNBYnN0cmFjdCIgVmFsdWU9IjIwNDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWwiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vZGVDbGFzcyIgVmFsdWU9IjgxOTIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUlkIiBWYWx1ZT0iMTYzODQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3ltbWV0cmljIiBWYWx1ZT0iMzI3NjgiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBWYWx1ZT0iNjU1 +MzYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckV4ZWN1dGFibGUiIFZh +bHVlPSIxMzEwNzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlcldyaXRl +TWFzayIgVmFsdWU9IjI2MjE0NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YWx1ZVJhbmsiIFZhbHVlPSI1MjQyODgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iV3JpdGVNYXNrIiBWYWx1ZT0iMTA0ODU3NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJWYWx1ZUZvclZhcmlhYmxlVHlwZSIgVmFsdWU9IjIwOTcxNTIiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iNDE5NDMw +NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFZh +bHVlPSI4Mzg4NjA4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc1Jl +c3RyaWN0aW9ucyIgVmFsdWU9IjE2Nzc3MjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsRXgiIFZhbHVlPSIzMzU1NDQzMiIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VEaXJlY3Rpb24i +IExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZvcndh +cmQiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2Ui +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSIz +IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlZpZXdEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJUaW1lc3RhbXAiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3VmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJv +d3NlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQnJvd3NlRGlyZWN0aW9uIiBUeXBlTmFtZT0idG5zOkJyb3dzZURpcmVjdGlvbiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VSZXN1bHRNYXNrIiBMZW5ndGhJbkJpdHM9IjMy +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFZhbHVlPSIxIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzRm9yd2FyZCIgVmFsdWU9IjIiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iNCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iOCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjE2IiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBWYWx1ZT0i +MzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iNjMiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVmZXJlbmNlVHlwZUluZm8iIFZhbHVl +PSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRhcmdldEluZm8iIFZhbHVl +PSI2MCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4 +cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFt +ZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvbnRpbnVhdGlv +blBvaW50Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkJyb3dzZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJCcm93c2VSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0 +aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4UmVmZXJlbmNlc1Blck5v +ZGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5v +ZGVzVG9Ccm93c2UiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb2Rlc1RvQnJvd3NlIiBUeXBlTmFtZT0idG5zOkJyb3dzZURlc2NyaXB0aW9uIiBMZW5ndGhG +aWVsZD0iTm9PZk5vZGVzVG9Ccm93c2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QnJvd3NlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0lu +Zm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2lu +dHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZD +b250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDb250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZDb250aW51YXRpb25Qb2ludHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVJlc3VsdCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9P +ZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YnR5 +cGVzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGgiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1l +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVu +dHMiIFR5cGVOYW1lPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZF +bGVtZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJCcm93c2VQYXRoIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nTm9kZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2 +ZVBhdGgiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VQYXRoUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpT +dGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRhcmdldHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRzIiBUeXBlTmFtZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIExlbmd0aEZpZWxkPSJOb09mVGFyZ2V0cyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xh +dGVCcm93c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkJyb3dzZVBhdGhzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aHMi +IFR5cGVOYW1lPSJ0bnM6QnJvd3NlUGF0aCIgTGVuZ3RoRmllbGQ9Ik5vT2ZCcm93c2VQYXRocyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJl +c3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1 +bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWdpc3Rl +ciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9S +ZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvUmVn +aXN0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZ2lzdGVyZWRO +b2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVn +aXN0ZXJlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVn +aXN0ZXJlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9k +ZXNUb1VucmVnaXN0ZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb2Rlc1RvVW5yZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZOb2Rlc1RvVW5yZWdpc3RlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvdW50ZXIiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOdW1lcmljUmFuZ2UiPg0KICA8L29w +YzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJUaW1lIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iRGF0ZSI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludENvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iT3BlcmF0aW9uVGltZW91dCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlVzZUJpbmFyeUVuY29kaW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhTdHJpbmdMZW5ndGgiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhCeXRlU3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4QXJyYXlMZW5ndGgiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhNZXNzYWdlU2l6ZSIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heEJ1ZmZlclNp +emUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDaGFubmVs +TGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZWN1cml0eVRva2VuTGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUXVlcnlEYXRhRGVz +Y3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVsYXRpdmVQYXRoIiBUeXBlTmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5v +ZGVUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiBUeXBlTmFtZT0idWE6RXhwYW5kZWRO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmNsdWRlU3ViVHlwZXMiIFR5cGVOYW1l +PSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRhVG9SZXR1cm4i +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVG9SZXR1 +cm4iIFR5cGVOYW1lPSJ0bnM6UXVlcnlEYXRhRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RGF0YVRvUmV0dXJuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhdG9yIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcXVhbHMiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzTnVsbCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iR3JlYXRlclRoYW4iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJHcmVhdGVyVGhhbk9yRXF1YWwiIFZhbHVlPSI0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuT3JFcXVhbCIgVmFsdWU9IjUiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGlrZSIgVmFsdWU9IjYiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm90IiBWYWx1ZT0iNyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJCZXR3ZWVuIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJJbkxpc3QiIFZhbHVlPSI5IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IkFuZCIgVmFsdWU9IjEwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik9yIiBWYWx1ZT0iMTEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2Fz +dCIgVmFsdWU9IjEyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluVmlldyIg +VmFsdWU9IjEzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9mVHlwZSIgVmFs +dWU9IjE0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlbGF0ZWRUbyIgVmFs +dWU9IjE1IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJpdHdpc2VBbmQiIFZh +bHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCaXR3aXNlT3IiIFZh +bHVlPSIxNyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJRdWVyeURhdGFTZXQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVmaW5pdGlvbk5vZGUiIFR5cGVOYW1lPSJ1 +YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZWYWx1ZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZXMiIFR5cGVO +YW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZlZhbHVlcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2RlUmVmZXJlbmNl +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVy +ZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzRm9yd2FyZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlZmVyZW5jZWROb2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExl +bmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmls +dGVyT3BlcmF0b3IiIFR5cGVOYW1lPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mRmlsdGVyT3BlcmFuZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJPcGVyYW5kcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lv +bk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWx0ZXJPcGVyYW5kcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb250ZW50RmlsdGVy +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZFbGVtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkVsZW1lbnRzIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkVsZW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhbmQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkVsZW1lbnRPcGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iSW5kZXgiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkxpdGVyYWxP +cGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF0dHJpYnV0ZU9wZXJhbmQiIEJhc2VU +eXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBbGlhcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VQYXRoIiBUeXBl +TmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0 +ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4 +UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIEJh +c2VUeXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVm +aW5pdGlvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkJyb3dzZVBhdGgiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VQYXRoIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZCcm93c2VQYXRoIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmlidXRlSWQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5kZXhSYW5nZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iT3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZPcGVyYW5kU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mT3BlcmFuZERpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik9wZXJhbmREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZPcGVyYW5kRGlhZ25vc3RpY0luZm9zIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVudFJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6 +Q29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mRWxlbWVudFJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRWxlbWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVsZW1lbnREaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbGVtZW50RGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBhcnNpbmdSZXN1bHQiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVN0YXR1 +c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +YXRhU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YURpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh +dGFEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZEYXRhRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5Rmlyc3RSZXF1ZXN0IiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFk +ZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVUeXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vZGVUeXBlcyIgVHlwZU5hbWU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBM +ZW5ndGhGaWVsZD0iTm9PZk5vZGVUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRl +ciIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWF4RGF0YVNldHNUb1JldHVybiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNYXhSZWZlcmVuY2VzVG9SZXR1cm4iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlF1ZXJ5Rmlyc3RSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZRdWVyeURhdGFTZXRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlEYXRhU2V0cyIgVHlw +ZU5hbWU9InRuczpRdWVyeURhdGFTZXQiIExlbmd0aEZpZWxkPSJOb09mUXVlcnlEYXRhU2V0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUGFyc2luZ1Jlc3VsdHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQYXJzaW5nUmVz +dWx0cyIgVHlwZU5hbWU9InRuczpQYXJzaW5nUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlBhcnNp +bmdSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJlc3VsdCIgVHlwZU5h +bWU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5TmV4dFJlcXVlc3QiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRl +ciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVsZWFzZUNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry +aW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlF1ZXJ5TmV4dFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlF1ZXJ5RGF0YVNldHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWVyeURhdGFTZXRz +IiBUeXBlTmFtZT0idG5zOlF1ZXJ5RGF0YVNldCIgTGVuZ3RoRmllbGQ9Ik5vT2ZRdWVyeURhdGFT +ZXRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiBU +eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBMZW5ndGhJbkJp +dHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2UiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlciIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQm90aCIgVmFsdWU9IjIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTmVpdGhlciIgVmFsdWU9IjMiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVu +dW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFZhbHVlSWQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9k +ZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmli +dXRlSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +YXRhRW5jb2RpbmciIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRSZXF1ZXN0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVl +c3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heEFnZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIFR5cGVOYW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJu +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWFkIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1JlYWQiIFR5cGVOYW1lPSJ0 +bnM6UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1JlYWQiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkVmFsdWVJZCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFFbmNvZGluZyIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRp +b25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkUmVzdWx0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1 +c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q29udGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikhpc3RvcnlEYXRhIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlSZWFkRGV0YWlscyIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZEV2 +ZW50RGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkV2ZW50RmlsdGVy +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlJlYWRSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRh +aWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzUmVhZE1vZGlmaWVkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJv +cGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXR1cm5Cb3Vu +ZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUHJvY2Vzc2VkRGV0YWlscyIgQmFzZVR5 +cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRU +aW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5k +VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mQWdncmVnYXRlVHlwZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkFnZ3JlZ2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0 +aEZpZWxkPSJOb09mQWdncmVnYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVOYW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSZWFkQXRUaW1lRGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUi +IExlbmd0aEZpZWxkPSJOb09mUmVxVGltZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VT +aW1wbGVCb3VuZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkQW5ub3RhdGlvbkRhdGFE +ZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RGF0YSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpE +YXRhVmFsdWUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZmljYXRpb25JbmZv +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1v +ZGlmaWNhdGlvblRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJVcGRhdGVUeXBlIiBUeXBlTmFtZT0idG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlNb2RpZmllZERhdGEiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeURhdGEiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEYXRhVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5n +dGhGaWVsZD0iTm9PZkRhdGFWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTW9k +aWZpY2F0aW9uSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb2RpZmljYXRpb25JbmZvcyIgVHlwZU5hbWU9InRuczpNb2RpZmljYXRpb25JbmZvIiBM +ZW5ndGhGaWVsZD0iTm9PZk1vZGlmaWNhdGlvbkluZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlFdmVudCIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBU +eXBlTmFtZT0idG5zOkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkRGV0YWlscyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVz +dGFtcHNUb1JldHVybiIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZWxlYXNlQ29udGludWF0aW9uUG9pbnRzIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1JlYWQiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvUmVhZCIgVHlw +ZU5hbWU9InRuczpIaXN0b3J5UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1Jl +YWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNw +b25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InRuczpIaXN0b3J5UmVhZFJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVh +OkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0 +ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJ0bnM6V3JpdGVWYWx1ZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvV3JpdGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZS +ZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +dWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iSGlzdG9yeVVwZGF0ZURldGFpbHMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikhpc3Rv +cnlVcGRhdGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJJbnNlcnQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlJlcGxhY2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IlVwZGF0ZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVs +ZXRlIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVt +ZXJhdGVkVHlwZSBOYW1lPSJQZXJmb3JtVXBkYXRlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5zZXJ0IiBWYWx1ZT0iMSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXBsYWNlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVcGRhdGUiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlJlbW92ZSIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXBkYXRlRGF0YURldGFpbHMi +IEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVw +ZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFj +ZSIgVHlwZU5hbWU9InRuczpQZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIExlbmd0aEZp +ZWxkPSJOb09mVXBkYXRlVmFsdWVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVwZGF0ZVN0cnVjdHVyZURhdGFEZXRhaWxzIiBCYXNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVE +ZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIFR5 +cGVOYW1lPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVsZD0i +Tm9PZlVwZGF0ZVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJVcGRhdGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgVHlwZU5hbWU9InRuczpQ +ZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlciIgVHlwZU5h +bWU9InRuczpFdmVudEZpbHRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFdmVudERh +dGEiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudERh +dGEiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBMZW5ndGhGaWVsZD0iTm9P +ZkV2ZW50RGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJJc0RlbGV0ZU1vZGlmaWVkIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRlbGV0ZUF0VGltZURldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0 +ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudElkcyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50SWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmF0aW9uUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZk9wZXJhdGlvblJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0 +aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZIaXN0b3J5VXBkYXRlRGV0YWlscyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiBUeXBlTmFtZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0IiBMZW5ndGhGaWVsZD0iTm9PZkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpI +aXN0b3J5VXBkYXRlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxNZXRo +b2RSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9iamVjdElkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWV0aG9kSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJbnB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExlbmd0 +aEZpZWxkPSJOb09mSW5wdXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBU +eXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJbnB1 +dEFyZ3VtZW50UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IklucHV0QXJndW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJbnB1dEFyZ3VtZW50UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZJbnB1dEFyZ3VtZW50RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZklucHV0QXJndW1l +bnREaWFnbm9zdGljSW5mb3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mT3V0cHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iT3V0 +cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZPdXRw +dXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iQ2FsbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1 +ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1ldGhvZHNUb0NhbGwiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXRob2RzVG9DYWxs +IiBUeXBlTmFtZT0idG5zOkNhbGxNZXRob2RSZXF1ZXN0IiBMZW5ndGhGaWVsZD0iTm9PZk1ldGhv +ZHNUb0NhbGwiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQ2FsbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0i +dG5zOkNhbGxNZXRob2RSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9uaXRv +cmluZ01vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJTYW1wbGluZyIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwb3J0aW5nIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlVHJpZ2dlciIgTGVuZ3RoSW5CaXRzPSIz +MiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNWYWx1ZSIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzVmFsdWVUaW1lc3RhbXAiIFZh +bHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRU +eXBlIE5hbWU9IkRlYWRiYW5kVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iQWJzb2x1dGUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlBlcmNlbnQiIFZhbHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIEJhc2VUeXBlPSJ0bnM6TW9u +aXRvcmluZ0ZpbHRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmlnZ2VyIiBUeXBlTmFtZT0i +dG5zOkRhdGFDaGFuZ2VUcmlnZ2VyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVhZGJhbmRU +eXBlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRi +YW5kVmFsdWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyIiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXIiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxl +Y3RDbGF1c2VzIiBUeXBlTmFtZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIExlbmd0aEZp +ZWxkPSJOb09mU2VsZWN0Q2xhdXNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xh +dXNlIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlv +biIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VTZXJ2ZXJDYXBhYmlsaXRpZXNEZWZhdWx0cyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHJlYXRVbmNlcnRhaW5Bc0JhZCIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyY2VudERhdGFCYWQiIFR5cGVOYW1l +PSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBlcmNlbnREYXRhR29vZCIgVHlw +ZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2xvcGVkRXh0cmFw +b2xhdGlvbiIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUZpbHRlciIgQmFzZVR5 +cGU9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0VGlt +ZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQ +cm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idG5zOk1vbml0b3JpbmdG +aWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENsYXVzZVJlc3Vs +dHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RD +bGF1c2VSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZT +ZWxlY3RDbGF1c2VSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdu +b3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xhdXNlUmVzdWx0IiBUeXBlTmFtZT0idG5z +OkNvbnRlbnRGaWx0ZXJSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlRmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNl +ZFN0YXJ0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJldmlzZWRQcm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZEFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVO +YW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yaW5nUGFyYW1ldGVycyIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGll +bnRIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJRdWV1ZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzY2FyZE9sZGVzdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ikl0ZW1Ub01vbml0b3IiIFR5cGVOYW1lPSJ0bnM6UmVhZFZh +bHVlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nTW9kZSIgVHlwZU5hbWU9 +InRuczpNb25pdG9yaW5nTW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFBh +cmFtZXRlcnMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVk +SXRlbUNyZWF0ZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkU2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5h +bWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUXVldWVTaXpl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJl +c3VsdCIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVt +c1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBUeXBlTmFtZT0idG5z +OlRpbWVzdGFtcHNUb1JldHVybiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJdGVtc1Rv +Q3JlYXRlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXRl +bXNUb0NyZWF0ZSIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJdGVtc1RvQ3JlYXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0 +ZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVxdWVzdGVkUGFyYW1ldGVycyIgVHlwZU5hbWU9InRuczpNb25pdG9yaW5n +UGFyYW1ldGVycyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNhbXBsaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZFF1ZXVlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9k +aWZ5TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcHNUb1JldHVy +biIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSXRlbXNUb01vZGlmeSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbU1v +ZGlmeVJlcXVlc3QiIExlbmd0aEZpZWxkPSJOb09mSXRlbXNUb01vZGlmeSIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOk1v +bml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1 +YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0 +TW9uaXRvcmluZ01vZGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JpbmdNb2RlIiBUeXBl +TmFtZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1v +bml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZNb25pdG9yZWRJdGVtSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9P +ZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0lu +Zm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklk +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyaWdnZXJp +bmdJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkxpbmtzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMaW5rc1RvQWRkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZM +aW5rc1RvQWRkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxpbmtzVG9SZW1vdmUiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMaW5rc1RvUmVtb3Zl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZMaW5rc1RvUmVtb3ZlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlNldFRyaWdnZXJpbmdSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGRSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVzdWx0cyIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mQWRkUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1l +PSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3Mi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlUmVzdWx0cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbW92ZVJlc3VsdHMiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlbW92ZVJlc3VsdHMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mUmVtb3ZlRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3Jp +cHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mTW9uaXRvcmVkSXRlbUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhG +aWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTW9uaXRvcmVkSXRlbXNSZXNwb25z +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZp +ZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0ZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTGlmZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOb3Rp +ZmljYXRpb25zUGVyUHVibGlzaCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHkiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVh +dGVTdWJzY3JpcHRpb25SZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRQdWJsaXNoaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJNb2RpZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6 +UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFB1 +Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQ +ZXJQdWJsaXNoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlByaW9yaXR5IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRv +dWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRNYXhLZWVw +QWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVi +bGlzaGluZ01vZGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0 +YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5m +byIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTm90aWZpY2F0aW9uTWVzc2Fn +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQdWJsaXNoVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uRGF0YSIgVHlwZU5hbWU9InVhOkV4dGVu +c2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vdGlmaWNh +dGlvbkRhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mTW9uaXRvcmVkSXRlbXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJdGVtcyIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVt +Tm90aWZpY2F0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRp +YWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9y +ZWRJdGVtTm90aWZpY2F0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVu +dE5vdGlmaWNhdGlvbkxpc3QiIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBUeXBlTmFtZT0idG5zOkV2ZW50RmllbGRMaXN0IiBM +ZW5ndGhGaWVsZD0iTm9PZkV2ZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRIYW5kbGUiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50RmllbGRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRGaWVs +ZHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50RmllbGRzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudEZpZWxkcyIgVHlwZU5hbWU9InVhOlZhcmlh +bnQiIExlbmd0aEZpZWxkPSJOb09mRXZlbnRGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RhdHVzQ2hhbmdlTm90aWZpY2F0 +aW9uIiBCYXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU3RhdHVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJsaXNoUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1 +YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudHMiIFR5cGVOYW1lPSJ0bnM6U3Vic2NyaXB0aW9uQWNr +bm93bGVkZ2VtZW50IiBMZW5ndGhGaWVsZD0iTm9PZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iUHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNl +SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkF2YWlsYWJsZVNlcXVl +bmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZp +ZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTW9yZU5vdGlmaWNhdGlvbnMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIFR5cGVOYW1lPSJ0bnM6Tm90aWZpY2F0 +aW9uTWVzc2FnZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9z +dGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVwdWJsaXNoUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXRyYW5zbWl0U2VxdWVuY2VOdW1iZXIiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlcHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uTWVz +c2FnZSIgVHlwZU5hbWU9InRuczpOb3RpZmljYXRpb25NZXNzYWdlIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zZmVyUmVzdWx0 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0 +YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbklk +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlw +dGlvbklkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mU3Vic2NyaXB0 +aW9uSWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VuZEluaXRpYWxWYWx1ZXMiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpUcmFuc2ZlclJlc3VsdCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRp +YWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +U3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNl +SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJCdWlsZEluZm8iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvZHVjdFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3ROYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvZnR3YXJlVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZE51bWJlciIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZERhdGUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUmVkdW5kYW5jeVN1cHBvcnQiIExlbmd0aEluQml0cz0i +MzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbGQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ildhcm0iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkhvdCIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iVHJhbnNwYXJlbnQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkhvdEFuZE1pcnJvcmVkIiBWYWx1ZT0iNSIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTZXJ2ZXJTdGF0ZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUnVubmluZyIg +VmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmFpbGVkIiBWYWx1 +ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb0NvbmZpZ3VyYXRpb24i +IFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1c3BlbmRlZCIg +VmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2h1dGRvd24iIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRlc3QiIFZhbHVlPSI1 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbW11bmljYXRpb25GYXVsdCIg +VmFsdWU9IjYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFs +dWU9IjciIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVySWQiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUxldmVsIiBUeXBlTmFtZT0ib3Bj +OkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJTdGF0ZSIgVHlwZU5hbWU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9pbnRVcmxMaXN0 +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRV +cmxMaXN0IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbmRwb2ludFVy +bExpc3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iTmV0d29ya0dyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOZXR3b3JrUGF0aHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrUGF0aHMiIFR5cGVOYW1l +PSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mTmV0d29ya1Bh +dGhzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWwi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVmlld0NvdW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTZXNz +aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3VtdWxhdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlY3VyaXR5UmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvblRpbWVv +dXRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXNzaW9uQWJvcnRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291bnQiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVy +dmFsQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VjdXJpdHlSZWplY3RlZFJlcXVlc3RzQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRSZXF1ZXN0c0NvdW50IiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJTZXJ2ZXJTdGF0dXNEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJyZW50VGltZSIgVHlwZU5hbWU9Im9w +YzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXRlIiBUeXBlTmFtZT0idG5z +OlNlcnZlclN0YXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGRJbmZvIiBUeXBlTmFt +ZT0idG5zOkJ1aWxkSW5mbyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY29uZHNUaWxsU2h1 +dGRvd24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2h1 +dGRvd25SZWFzb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlc3Npb25EaWFnbm9z +dGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25OYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBlTmFtZT0idG5zOkFwcGxpY2F0aW9u +RGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmkiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQWN0dWFsU2Vzc2lvblRpbWVvdXQiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVzcG9uc2VNZXNzYWdlU2l6ZSIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRDb25uZWN0 +aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkNsaWVudExhc3RDb250YWN0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudE1vbml0b3JlZEl0ZW1zQ291 +bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVu +dFB1Ymxpc2hSZXF1ZXN0c0luUXVldWUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVuYXV0aG9yaXplZFJlcXVl +c3RDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlQ291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ikhpc3RvcnlVcGRhdGVDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FsbENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0i +dG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRN +b25pdG9yaW5nTW9kZUNvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRUcmlnZ2VyaW5nQ291bnQiIFR5cGVOYW1lPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0 +ZU1vbml0b3JlZEl0ZW1zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiBUeXBl +TmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJNb2RpZnlTdWJzY3JpcHRpb25Db3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRh +dGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVDb3VudCIg +VHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUHVibGlzaENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hDb3VudCIgVHlwZU5hbWU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJT +dWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgVHlwZU5h +bWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWRkTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVmZXJlbmNlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNl +cnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVOb2Rl +c0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEZWxldGVSZWZlcmVuY2VzQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZUNvdW50IiBU +eXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOZXh0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRz +Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlF1ZXJ5Rmlyc3RDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlOZXh0Q291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlZ2lzdGVyTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5yZWdpc3Rlck5vZGVzQ291bnQiIFR5cGVOYW1l +PSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGlj +c0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkNsaWVudFVzZXJJZE9mU2Vzc2lvbiIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQ2xpZW50VXNlcklkSGlzdG9yeSIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudFVzZXJJZEhpc3RvcnkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkNsaWVudFVzZXJJZEhpc3Rvcnki +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmNvZGluZyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRQcm90b2Nv +bCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 +eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmljZUNvdW50ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUb3RhbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVycm9yQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlN0YXR1c1Jlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25J +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcmlvcml0 +eSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGlu +Z0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1heExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0VuYWJsZWQiIFR5 +cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vZGlmeUNvdW50 +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Fi +bGVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXB1Ymxpc2hSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVwdWJsaXNoTWVzc2FnZVJlcXVlc3RDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJSZXF1 +ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNmZXJyZWRUb0FsdENsaWVudENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaFJlcXVlc3RDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhQ2hh +bmdlTm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXRlUHVibGlzaFJlcXVlc3RD +b3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJy +ZW50S2VlcEFsaXZlQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3VycmVudExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVW5hY2tub3dsZWRnZWRNZXNzYWdlQ291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0 +b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5leHRTZXF1ZW5jZU51 +bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVu +dFF1ZXVlT3ZlckZsb3dDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9kZWxDaGFuZ2VT +dHJ1Y3R1cmVWZXJiTWFzayIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iTm9kZUFkZGVkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb2RlRGVsZXRlZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iUmVmZXJlbmNlQWRkZWQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZURlbGV0ZWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlQ2hhbmdlZCIgVmFsdWU9IjE2IiAvPg0KICA8 +L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGVs +Q2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWZmZWN0ZWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWZXJiIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2VtYW50 +aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFmZmVjdGVkVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSYW5nZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMb3ciIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +SGlnaCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRVVJbmZvcm1hdGlvbiIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5pdElkIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3Jp +cHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9u +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMaW5l +YXIiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxvZyIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG4iIFZhbHVlPSIyIiAv +Pg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbXBsZXhOdW1iZXJUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlYWwiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF4aXNJbmZvcm1hdGlvbiIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmdp +bmVlcmluZ1VuaXRzIiBUeXBlTmFtZT0idG5zOkVVSW5mb3JtYXRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJFVVJhbmdlIiBUeXBlTmFtZT0idG5zOlJhbmdlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iVGl0bGUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXhpc1NjYWxlVHlwZSIgVHlwZU5hbWU9InRuczpBeGlzU2NhbGVFbnVtZXJh +dGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiBMZW5ndGhGaWVsZD0iTm9PZkF4aXNTdGVwcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJYVlR5cGUiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlwZU5hbWU9 +Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9Im9w +YzpGbG9hdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJQcm9ncmFtRGlhZ25vc3RpY0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgVHlwZU5h +bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZUNsaWVudE5hbWUi +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52b2NhdGlv +bkNyZWF0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTGFzdE1ldGhvZElucHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFz +dE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9 +InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZFJldHVyblN0 +YXR1cyIgVHlwZU5hbWU9InRuczpTdGF0dXNSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHJvZ3JhbURpYWdub3N0aWMyRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQ3JlYXRlU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3JlYXRlQ2xpZW50TmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJJbnZvY2F0aW9uQ3JlYXRpb25UaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdFRyYW5zaXRpb25UaW1lIiBUeXBl +TmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENh +bGwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1l +dGhvZFNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1l +PSJ0bnM6QXJndW1lbnQiIExlbmd0aEZpZWxkPSJOb09mTGFzdE1ldGhvZElucHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9k +T3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVsZD0iTm9P +Zkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +TGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIg +TGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mTGFzdE1ldGhvZE91dHB1dFZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kQ2FsbFRpbWUiIFR5cGVOYW1lPSJvcGM6 +RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kUmV0dXJuU3RhdHVz +IiBUeXBlTmFtZT0idG5zOlN0YXR1c1Jlc3VsdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBbm5vdGF0aW9uIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2UiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQW5ub3RhdGlvblRpbWUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRXhjZXB0aW9uRGV2aWF0aW9uRm9ybWF0IiBMZW5ndGhJ +bkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBYnNvbHV0ZVZhbHVl +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50T2ZW +YWx1ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGVyY2Vu +dE9mUmFuZ2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlBl +cmNlbnRPZkVVUmFuZ2UiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlVua25vd24iIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KPC9v +cGM6VHlwZURpY3Rpb25hcnk+ + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7619 + + Variable_2 + + 0 + NamespaceUri + + + + NamespaceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=7617 + + + + + i=40 + + false + + i=68 + + + + + + http://opcfoundation.org/UA/ + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7650 + + Variable_2 + + 0 + Argument + + + + Argument + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Argument + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7656 + + Variable_2 + + 0 + EnumValueType + + + + EnumValueType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EnumValueType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7659 + + Variable_2 + + 0 + StatusResult + + + + StatusResult + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + StatusResult + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7662 + + Variable_2 + + 0 + UserTokenPolicy + + + + UserTokenPolicy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UserTokenPolicy + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7665 + + Variable_2 + + 0 + ApplicationDescription + + + + ApplicationDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ApplicationDescription + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7668 + + Variable_2 + + 0 + EndpointDescription + + + + EndpointDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EndpointDescription + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7671 + + Variable_2 + + 0 + UserIdentityToken + + + + UserIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UserIdentityToken + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7674 + + Variable_2 + + 0 + AnonymousIdentityToken + + + + AnonymousIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AnonymousIdentityToken + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7677 + + Variable_2 + + 0 + UserNameIdentityToken + + + + UserNameIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UserNameIdentityToken + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7680 + + Variable_2 + + 0 + X509IdentityToken + + + + X509IdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + X509IdentityToken + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7683 + + Variable_2 + + 0 + IssuedIdentityToken + + + + IssuedIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + IssuedIdentityToken + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7686 + + Variable_2 + + 0 + EndpointConfiguration + + + + EndpointConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EndpointConfiguration + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7692 + + Variable_2 + + 0 + BuildInfo + + + + BuildInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + BuildInfo + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7698 + + Variable_2 + + 0 + SignedSoftwareCertificate + + + + SignedSoftwareCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SignedSoftwareCertificate + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7728 + + Variable_2 + + 0 + AddNodesItem + + + + AddNodesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AddNodesItem + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7731 + + Variable_2 + + 0 + AddReferencesItem + + + + AddReferencesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AddReferencesItem + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7734 + + Variable_2 + + 0 + DeleteNodesItem + + + + DeleteNodesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DeleteNodesItem + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7737 + + Variable_2 + + 0 + DeleteReferencesItem + + + + DeleteReferencesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DeleteReferencesItem + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7782 + + Variable_2 + + 0 + RegisteredServer + + + + RegisteredServer + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + RegisteredServer + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7929 + + Variable_2 + + 0 + ContentFilterElement + + + + ContentFilterElement + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ContentFilterElement + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7932 + + Variable_2 + + 0 + ContentFilter + + + + ContentFilter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ContentFilter + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7935 + + Variable_2 + + 0 + FilterOperand + + + + FilterOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + FilterOperand + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7938 + + Variable_2 + + 0 + ElementOperand + + + + ElementOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ElementOperand + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7941 + + Variable_2 + + 0 + LiteralOperand + + + + LiteralOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + LiteralOperand + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7944 + + Variable_2 + + 0 + AttributeOperand + + + + AttributeOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AttributeOperand + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=7947 + + Variable_2 + + 0 + SimpleAttributeOperand + + + + SimpleAttributeOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SimpleAttributeOperand + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8004 + + Variable_2 + + 0 + HistoryEvent + + + + HistoryEvent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + HistoryEvent + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8067 + + Variable_2 + + 0 + MonitoringFilter + + + + MonitoringFilter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + MonitoringFilter + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8073 + + Variable_2 + + 0 + EventFilter + + + + EventFilter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EventFilter + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8076 + + Variable_2 + + 0 + AggregateConfiguration + + + + AggregateConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AggregateConfiguration + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8172 + + Variable_2 + + 0 + HistoryEventFieldList + + + + HistoryEventFieldList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + HistoryEventFieldList + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8208 + + Variable_2 + + 0 + RedundantServerDataType + + + + RedundantServerDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + RedundantServerDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8211 + + Variable_2 + + 0 + SamplingIntervalDiagnosticsDataType + + + + SamplingIntervalDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SamplingIntervalDiagnosticsDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8214 + + Variable_2 + + 0 + ServerDiagnosticsSummaryDataType + + + + ServerDiagnosticsSummaryDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ServerDiagnosticsSummaryDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8217 + + Variable_2 + + 0 + ServerStatusDataType + + + + ServerStatusDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ServerStatusDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8220 + + Variable_2 + + 0 + SessionDiagnosticsDataType + + + + SessionDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SessionDiagnosticsDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8223 + + Variable_2 + + 0 + SessionSecurityDiagnosticsDataType + + + + SessionSecurityDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SessionSecurityDiagnosticsDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8226 + + Variable_2 + + 0 + ServiceCounterDataType + + + + ServiceCounterDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ServiceCounterDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8229 + + Variable_2 + + 0 + SubscriptionDiagnosticsDataType + + + + SubscriptionDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SubscriptionDiagnosticsDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8232 + + Variable_2 + + 0 + ModelChangeStructureDataType + + + + ModelChangeStructureDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ModelChangeStructureDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8235 + + Variable_2 + + 0 + SemanticChangeStructureDataType + + + + SemanticChangeStructureDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SemanticChangeStructureDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8238 + + Variable_2 + + 0 + Range + + + + Range + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Range + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8241 + + Variable_2 + + 0 + EUInformation + + + + EUInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EUInformation + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8244 + + Variable_2 + + 0 + Annotation + + + + Annotation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Annotation + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8247 + + Variable_2 + + 0 + ProgramDiagnosticDataType + + + + ProgramDiagnosticDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ProgramDiagnosticDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8251 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=7594 + + + + + i=39 + + false + + i=7656 + + + + 0 + + + + i=8252 + + Variable_2 + + 0 + Opc.Ua + + + + Opc.Ua + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=72 + + + + + i=47 + + true + + i=92 + + + + + i=46 + + false + + i=8254 + + + + + i=46 + + false + + i=15039 + + + + + i=47 + + false + + i=14829 + + + + + i=47 + + false + + i=16024 + + + + + i=47 + + false + + i=18860 + + + + + i=47 + + false + + i=18863 + + + + + i=47 + + false + + i=18866 + + + + + i=47 + + false + + i=18869 + + + + + i=47 + + false + + i=19049 + + + + + i=47 + + false + + i=19052 + + + + + i=47 + + false + + i=19055 + + + + + i=47 + + false + + i=19058 + + + + + i=47 + + false + + i=19061 + + + + + i=47 + + false + + i=15730 + + + + + i=47 + + false + + i=23522 + + + + + i=47 + + false + + i=12677 + + + + + i=47 + + false + + i=16027 + + + + + i=47 + + false + + i=14811 + + + + + i=47 + + false + + i=15591 + + + + + i=47 + + false + + i=15594 + + + + + i=47 + + false + + i=15585 + + + + + i=47 + + false + + i=15588 + + + + + i=47 + + false + + i=14805 + + + + + i=47 + + false + + i=14808 + + + + + i=47 + + false + + i=14832 + + + + + i=47 + + false + + i=16030 + + + + + i=47 + + false + + i=16033 + + + + + i=47 + + false + + i=14320 + + + + + i=47 + + false + + i=16037 + + + + + i=47 + + false + + i=16040 + + + + + i=47 + + false + + i=16047 + + + + + i=47 + + false + + i=16050 + + + + + i=47 + + false + + i=16053 + + + + + i=47 + + false + + i=16056 + + + + + i=47 + + false + + i=21180 + + + + + i=47 + + false + + i=16062 + + + + + i=47 + + false + + i=16065 + + + + + i=47 + + false + + i=16068 + + + + + i=47 + + false + + i=16071 + + + + + i=47 + + false + + i=21183 + + + + + i=47 + + false + + i=21186 + + + + + i=47 + + false + + i=21189 + + + + + i=47 + + false + + i=16077 + + + + + i=47 + + false + + i=16080 + + + + + i=47 + + false + + i=16083 + + + + + i=47 + + false + + i=16086 + + + + + i=47 + + false + + i=16089 + + + + + i=47 + + false + + i=16092 + + + + + i=47 + + false + + i=16095 + + + + + i=47 + + false + + i=14835 + + + + + i=47 + + false + + i=16098 + + + + + i=47 + + false + + i=21192 + + + + + i=47 + + false + + i=16104 + + + + + i=47 + + false + + i=16107 + + + + + i=47 + + false + + i=16110 + + + + + i=47 + + false + + i=16113 + + + + + i=47 + + false + + i=16116 + + + + + i=47 + + false + + i=16119 + + + + + i=47 + + false + + i=17473 + + + + + i=47 + + false + + i=21195 + + + + + i=47 + + false + + i=15640 + + + + + i=47 + + false + + i=16125 + + + + + i=47 + + false + + i=16144 + + + + + i=47 + + false + + i=16147 + + + + + i=47 + + false + + i=23508 + + + + + i=47 + + false + + i=16127 + + + + + i=47 + + false + + i=18166 + + + + + i=47 + + false + + i=18169 + + + + + i=47 + + false + + i=18172 + + + + + i=47 + + false + + i=18175 + + + + + i=47 + + false + + i=8285 + + + + + i=47 + + false + + i=8291 + + + + + i=47 + + false + + i=14826 + + + + + i=47 + + false + + i=12759 + + + + + i=47 + + false + + i=12762 + + + + + i=47 + + false + + i=8918 + + + + + i=47 + + false + + i=8300 + + + + + i=47 + + false + + i=12201 + + + + + i=47 + + false + + i=8297 + + + + + i=47 + + false + + i=8303 + + + + + i=47 + + false + + i=8417 + + + + + i=47 + + false + + i=12894 + + + + + i=47 + + false + + i=12897 + + + + + i=47 + + false + + i=8333 + + + + + i=47 + + false + + i=8306 + + + + + i=47 + + false + + i=8309 + + + + + i=47 + + false + + i=8312 + + + + + i=47 + + false + + i=8315 + + + + + i=47 + + false + + i=8318 + + + + + i=47 + + false + + i=8363 + + + + + i=47 + + false + + i=8366 + + + + + i=47 + + false + + i=8369 + + + + + i=47 + + false + + i=8372 + + + + + i=47 + + false + + i=12712 + + + + + i=47 + + false + + i=12715 + + + + + i=47 + + false + + i=8321 + + + + + i=47 + + false + + i=8564 + + + + + i=47 + + false + + i=8567 + + + + + i=47 + + false + + i=8570 + + + + + i=47 + + false + + i=8573 + + + + + i=47 + + false + + i=8576 + + + + + i=47 + + false + + i=8579 + + + + + i=47 + + false + + i=8582 + + + + + i=47 + + false + + i=8639 + + + + + i=47 + + false + + i=8702 + + + + + i=47 + + false + + i=8708 + + + + + i=47 + + false + + i=8711 + + + + + i=47 + + false + + i=8807 + + + + + i=47 + + false + + i=8327 + + + + + i=47 + + false + + i=8843 + + + + + i=47 + + false + + i=11951 + + + + + i=47 + + false + + i=11954 + + + + + i=47 + + false + + i=8846 + + + + + i=47 + + false + + i=8849 + + + + + i=47 + + false + + i=8852 + + + + + i=47 + + false + + i=8855 + + + + + i=47 + + false + + i=8858 + + + + + i=47 + + false + + i=8861 + + + + + i=47 + + false + + i=8294 + + + + + i=47 + + false + + i=8864 + + + + + i=47 + + false + + i=8867 + + + + + i=47 + + false + + i=8870 + + + + + i=47 + + false + + i=8873 + + + + + i=47 + + false + + i=8876 + + + + + i=47 + + false + + i=12175 + + + + + i=47 + + false + + i=12178 + + + + + i=47 + + false + + i=12083 + + + + + i=47 + + false + + i=12086 + + + + + i=47 + + false + + i=8882 + + + + + i=47 + + false + + i=15402 + + + + + i=47 + + false + + i=8879 + + + + + + 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 +cGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCaXRG +aWVsZE1hc2tEYXRhVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRMb25nIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJLZXlWYWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IktleSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBl +PSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5VmFsdWVQYWlyIiB0eXBlPSJ0 +bnM6S2V5VmFsdWVQYWlyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZLZXlW +YWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iktl +eVZhbHVlUGFpciIgdHlwZT0idG5zOktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mS2V5VmFsdWVQYWly +IiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludFR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VHlwZSIgdHlwZT0i +dG5zOkVuZHBvaW50VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5k +cG9pbnRUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF +bmRwb2ludFR5cGUiIHR5cGU9InRuczpFbmRwb2ludFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBvaW50VHlw +ZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmF0aW9uYWxOdW1iZXIiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyYXRvciIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZW5vbWluYXRv +ciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSYXRpb25hbE51 +bWJlciIgdHlwZT0idG5zOlJhdGlvbmFsTnVtYmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSYXRpb25hbE51bWJlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpSYXRpb25hbE51bWJlciIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpMaXN0T2ZSYXRpb25hbE51bWJlciIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +VmVjdG9yIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmVjdG9yIiB0eXBlPSJ0bnM6VmVjdG9y +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZWZWN0b3IiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZlY3RvciIgdHlwZT0idG5zOlZlY3Rv +ciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9mVmVjdG9yIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURWZWN0b3Ii +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6VmVjdG9yIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlgiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlkiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IloiIHR5cGU9InhzOmRvdWJsZSIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl +bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6VGhyZWVEVmVjdG9yIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURWZWN0b3IiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRocmVlRFZlY3RvciIgdHlwZT0i +dG5zOlRocmVlRFZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9m +VGhyZWVEVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6Q2FydGVzaWFuQ29vcmRpbmF0ZXMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVz +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5D +b29yZGluYXRlcyIgdHlwZT0idG5zOkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYXJ0 +ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJU +aHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDYXJ0ZXNpYW5Db29yZGlu +YXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJYIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJZIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJaIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29v +cmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRENhcnRl +c2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOlRocmVlRENhcnRlc2lh +bkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0i +dG5zOkxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPcmllbnRhdGlvbiI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6T3JpZW50YXRpb24iIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk9yaWVudGF0aW9uIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcmllbnRhdGlvbiIgdHlwZT0idG5z +Ok9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxpc3RPZk9yaWVu +dGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpPcmllbnRhdGlvbiI+DQog +ICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJCIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRocmVlRE9y +aWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRE9yaWVudGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOlRo +cmVlRE9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxp +c3RPZlRocmVlRE9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZy +YW1lIiB0eXBlPSJ0bnM6RnJhbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkZyYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGcmFt +ZSIgdHlwZT0idG5zOkZyYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGcmFtZSIgdHlwZT0idG5zOkxpc3RPZkZyYW1l +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJUaHJlZURGcmFtZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGcmFtZSI+DQogICAgICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlw +ZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBl +PSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz +OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJUaHJlZURGcmFtZSIgdHlwZT0idG5zOlRocmVlREZyYW1lIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVERnJhbWUiIHR5cGU9InRuczpUaHJlZURGcmFtZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mVGhyZWVERnJhbWUiIHR5cGU9InRuczpMaXN0T2ZUaHJlZURGcmFtZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3BlbkZpbGVN +b2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVhZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJXcml0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcmFzZUV4aXN0aW5n +XzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVuZF84IiAvPg0KICAgIDwv +eHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +T3BlbkZpbGVNb2RlIiB0eXBlPSJ0bnM6T3BlbkZpbGVNb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik9wZW5GaWxlTW9kZSIgdHlwZT0idG5zOk9wZW5GaWxlTW9kZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcGVuRmls +ZU1vZGUiIHR5cGU9InRuczpMaXN0T2ZPcGVuRmlsZU1vZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBl +Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVXNlck5hbWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iVGh1bWJwcmludF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xlXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwSWRfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vbnltb3VzXzUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkF1dGhlbnRpY2F0ZWRVc2VyXzYiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eUNyaXRlcmlh +VHlwZSIgdHlwZT0idG5zOklkZW50aXR5Q3JpdGVyaWFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIHR5cGU9InRu +czpJZGVudGl0eUNyaXRlcmlhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSIgdHlwZT0idG5zOkxpc3RPZklk +ZW50aXR5Q3JpdGVyaWFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JpdGVyaWFUeXBlIiB0eXBlPSJ0bnM6 +SWRlbnRpdHlDcml0ZXJpYVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkNyaXRlcmlhIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIHR5cGU9InRuczpJZGVudGl0 +eU1hcHBpbmdSdWxlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSWRl +bnRpdHlNYXBwaW5nUnVsZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6SWRlbnRpdHlNYXBw +aW5nUnVsZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyaWNDb2RlIiB0eXBlPSJ4 +czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhwb25l +bnQiIHR5cGU9InhzOmJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFscGhhYmV0aWNDb2RlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW5jeSIgdHlwZT0idWE6 +TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJy +ZW5jeVVuaXRUeXBlIiB0eXBlPSJ0bnM6Q3VycmVuY3lVbml0VHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQ3VycmVuY3lVbml0VHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lVbml0VHlwZSIgdHlwZT0idG5zOkN1 +cnJlbmN5VW5pdFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkN1cnJlbmN5VW5pdFR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZDdXJyZW5jeVVuaXRUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpzaW1wbGVUeXBlICBuYW1lPSJUcnVzdExpc3RNYXNrcyI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZENlcnRpZmljYXRlc18xIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdGVkQ3Jsc18yIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJDZXJ0aWZpY2F0ZXNfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyQ3Jsc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJBbGxfMTUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3RNYXNrcyIgdHlwZT0idG5zOlRy +dXN0TGlzdE1hc2tzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcnVzdExpc3REYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3BlY2lm +aWVkTGlzdHMiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRl +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVHJ1c3RlZENybHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJD +ZXJ0aWZpY2F0ZXMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJDcmxzIiB0eXBl +PSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRydXN0TGlzdERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOlRydXN0TGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOkxpc3RPZlRydXN0TGlzdERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWNpbWFsRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNjYWxlIiB0eXBlPSJ4czpz +aG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5 +cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJEZWNpbWFsRGF0YVR5cGUiIHR5cGU9InRuczpEZWNpbWFsRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTdHJ1Y3R1cmVEZXNj +cmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkVudW1EYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTaW1wbGVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVTY2hlbWFIZWFk +ZXIiIHR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBlPSJ0bnM6 +RGF0YVR5cGVTY2hlbWFIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBl +PSJ0bnM6TGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs +ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0 +aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZEYXRhVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVR5 +cGVEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iU3RydWN0dXJlRGVzY3JpcHRpb24iPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5 +cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVmaW5p +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZURlc2NyaXB0 +aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OlN0cnVjdHVyZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVzY3JpcHRpb24iPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6RGF0YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVmaW5pdGlvbiIgdHlwZT0idG5zOkVudW1E +ZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkVudW1EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVudW1EZXNjcmlwdGlvbiIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVzY3JpcHRpb24i +IHR5cGU9InRuczpFbnVtRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJv +dW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZkVudW1EZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24g +YmFzZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQnVpbHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9u +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpbXBsZVR5 +cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +U2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlVHlwZURlc2NyaXB0 +aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJVQUJpbmFyeUZpbGVEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZVNjaGVtYUhl +YWRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTY2hlbWFMb2NhdGlvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbGVIZWFkZXIiIHR5cGU9 +InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQm9keSIgdHlwZT0idWE6VmFyaWFudCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp +b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVUFCaW5hcnlGaWxlRGF0YVR5cGUiIHR5cGU9InRuczpVQUJpbmFyeUZp +bGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVUFCaW5hcnlG +aWxlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VUFCaW5hcnlGaWxlRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVUFCaW5hcnlGaWxl +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IlB1YlN1YlN0YXRlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry +aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGF1c2VkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9Ik9wZXJhdGlvbmFsXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkVycm9yXzMiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOlB1YlN1YlN0YXRlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJTdGF0ZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViU3RhdGUiIHR5cGU9InRu +czpQdWJTdWJTdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YlN0YXRlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0 +TWV0YURhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJGaWVsZHMiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1ldGFEYXRhIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRDbGFz +c0lkIiB0eXBlPSJ1YTpHdWlkIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb24iIHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVy +c2lvbkRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1l +dGFEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRNZXRhRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRhRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mRGF0YVNldE1ldGFEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRNZXRhRGF0YSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZEZsYWdzIiB0 +eXBlPSJ0bnM6RGF0YVNldEZpZWxkRmxhZ3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2Rl +SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN +YXhTdHJpbmdMZW5ndGgiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRJZCIgdHlwZT0idWE6R3VpZCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWVsZE1ldGFEYXRhIiB0eXBlPSJ0bnM6RmllbGRNZXRhRGF0YSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRmllbGRNZXRhRGF0YSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRNZXRhRGF0YSIgdHlwZT0idG5zOkZpZWxk +TWV0YURhdGEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkZpZWxkTWV0YURhdGEiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1l +dGFEYXRhIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBl +ICBuYW1lPSJEYXRhU2V0RmllbGRGbGFncyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Inhz +OnVuc2lnbmVkU2hvcnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIHR5cGU9InRuczpEYXRh +U2V0RmllbGRGbGFncyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29uZmlndXJhdGlv +blZlcnNpb25EYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWFqb3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWlub3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUi +IHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lv +bkRhdGFUeXBlIiB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mQ29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3Vy +YXRpb25WZXJzaW9uRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVNldEZvbGRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFEYXRh +IiB0eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRTb3VyY2UiIHR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRE +YXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0 +YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRh +U2V0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZERh +dGFTZXRTb3VyY2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbEhpbnQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGVhZGJhbmRUeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVhZGJhbmRWYWx1ZSIgdHlwZT0ieHM6ZG91YmxlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzdGl0dXRlVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1ldGFEYXRhUHJvcGVydGllcyIgdHlw +ZT0idWE6TGlzdE9mUXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkVmFy +aWFibGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHVibGlz +aGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZFZh +cmlhYmxlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 +eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGVkRGF0YSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIg +dHlwZT0idG5zOlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHVibGlz +aGVkRGF0YUl0ZW1zRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6UHVibGlzaGVk +RGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZWxlY3RlZEZpZWxkcyIgdHlwZT0idG5zOkxpc3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmlsdGVyIiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVk +RXZlbnRzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxp +c2hlZEV2ZW50c0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZEV2ZW50 +c0RhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayI+DQog +ICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRG +aWVsZENvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6RGF0YVNldEZpZWxkQ29udGVudE1hc2siIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRD +b250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRl +bnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldEZpZWxkQ29udGVudE1hc2siIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRX +cml0ZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcklkIiB0 +eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENv +bnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlG +cmFtZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRX +cml0ZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgdHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRXcml0ZXJEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFdyaXRlckRhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +V3JpdGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRXcml0ZXJEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFT +ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0V3JpdGVy +TWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUHViU3ViR3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViR3JvdXBEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViR3JvdXBE +YXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1Ykdy +b3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJHcm91cERhdGFUeXBlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0ZXJH +cm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2VlcEFsaXZlVGltZSIg +dHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJpb3JpdHkiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zcG9y +dFNldHRpbmdzIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZVNldHRpbmdz +IiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcnMiIHR5cGU9InRu +czpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6V3JpdGVyR3JvdXBEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3Jv +dXBEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZldyaXRl +ckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJHcm91cERhdGFUeXBlIiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0 +ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVy +R3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZldyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZXJHcm91cE1lc3Nh +Z2VEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJH +cm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJQdWJsaXNoZXJJZCIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlv +blByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRTZXR0 +aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBzIiB0eXBlPSJ0bnM6 +TGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwcyIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29ubmVjdGlvbkRh +dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJDb25uZWN0 +aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNvbm5lY3Rpb25EYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9m +UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBl +IiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0 +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrQWRkcmVzc0RhdGFU +eXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgdHlw +ZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzRGF0 +YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOZXR3b3JrQWRk +cmVzc1VybERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXJsIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +QWRkcmVzc1VybERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NVcmxEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29y +a0FkZHJlc3NVcmxEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3 +b3JrQWRkcmVzc1VybERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNZXNzYWdlU2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0UmVhZGVycyIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N +CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwRGF0YVR5cGUiIHR5 +cGU9InRuczpSZWFkZXJHcm91cERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0 +bnM6UmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw +ZSIgdHlwZT0idG5zOlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlYWRl +ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZSZWFkZXJHcm91cFRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJl +YWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlJlYWRl +ckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlw +ZSIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0UmVh +ZGVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlcklkIiB0eXBlPSJ1 +YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0 +ZXJHcm91cElkIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0V3JpdGVySWQiIHR5cGU9InhzOnVuc2lnbmVkU2hv +cnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRh +RGF0YSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50 +TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVjZWl2ZVRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5RnJh +bWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRSZWFkZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWly +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXQiIHR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0UmVhZGVyRGF0YVR5 +cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRSZWFkZXJEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNl +dFJlYWRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0UmVhZGVyRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5 +cGU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJUcmFu +c3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBl +PSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRE +YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERh +dGFTZXREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0 +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldFZhcmlhYmxlcyIgdHlw +ZT0idG5zOkxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgdHlwZT0idG5zOlRhcmdldFZhcmlh +Ymxlc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUYXJnZXRW +YXJpYWJsZXNEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpUYXJnZXRWYXJpYWJsZXNE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRUYXJnZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkSWQiIHR5cGU9 +InVhOkd1aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlY2Vp +dmVySW5kZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlSW5kZXhSYW5nZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRs +aW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdmVycmlkZVZh +bHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRUYXJnZXRE +YXRhVHlwZSIgdHlwZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIHR5cGU9InRu +czpGaWVsZFRhcmdldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGaWVsZFRhcmdldERhdGFUeXBlIiB0eXBl +PSJ0bnM6TGlzdE9mRmllbGRUYXJnZXREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4N +CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +TGFzdFVzYWJsZVZhbHVlXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJy +aWRlVmFsdWVfMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgdHlwZT0idG5zOk92 +ZXJyaWRlVmFsdWVIYW5kbGluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIHR5cGU9InRuczpPdmVycmlkZVZhbHVl +SGFuZGxpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6TGlzdE9mT3ZlcnJpZGVWYWx1ZUhh +bmRsaW5nIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxl +eENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlN1 +YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyZW50Tm9kZU5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRh +dGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0TWly +cm9yRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiIHR5 +cGU9InRuczpMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJTdWJDb25m +aWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlzaGVkRGF0YVNl +dERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ29ubmVjdGlvbnMiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJDb25uZWN0aW9u +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJh +dGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJD +b25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNv +bmZpZ3VyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBl +IiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZWZpbmVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlXzIiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0i +dG5zOkRhdGFTZXRPcmRlcmluZ1R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRh +dGFTZXRPcmRlcmluZ1R5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8 +eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rp +b24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFz +ayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNz +YWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZV +YWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwVmVyc2lvbiIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEYXRhU2V0T3JkZXJpbmciIHR5cGU9InRuczpEYXRhU2V0T3JkZXJpbmdUeXBl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdP +ZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdPZmZzZXQiIHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAg +ICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRh +VHlwZSIgdHlwZT0idG5zOlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwV3JpdGVy +R3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkxpc3RPZlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVYWRwRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwRGF0YVNl +dE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbmZpZ3VyZWRTaXplIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1i +ZXIiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0i +dG5zOlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRXcml0ZXJN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K +ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlw +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJH +cm91cFZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1iZXIiIHR5cGU9InhzOnVu +c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldENsYXNzSWQiIHR5cGU9InVhOkd1 +aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo +aW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlY2VpdmVPZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdPZmZzZXQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRS +ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURh +dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9 +Ikpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFz +ZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2si +IHR5cGU9InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbk5ldHdv +cmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZKc29uTmV0d29ya01lc3NhZ2VD +b250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21w +bGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNv +bldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6SnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZKc29uV3Jp +dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpz +b25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp +bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRN +YXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldE1l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbkRhdGFTZXRNZXNz +YWdlQ29udGVudE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRh +U2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5 +cGUiIHR5cGU9InRuczpKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +SnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZKc29uRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5 +cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0TWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6SnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldFJlYWRlck1l +c3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25U +cmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5 +cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5QWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUi +IHR5cGU9InRuczpEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFn +cmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9y +dERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZXBlYXRDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTWVzc2FnZVJlcGVhdERlbGF5IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFncmFt +V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mRGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJva2Vy +Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4 +ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkNvbm5lY3Rpb25UcmFu +c3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXNvdXJjZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0 +aW9uUHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog +ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJv +a2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZCcm9rZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFuc3Bv +cnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlz +dE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkXzAiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkJlc3RFZmZvcnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iQXRMZWFzdE9uY2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QXRNb3N0T25jZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFjdGx5T25j +ZV80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIgdHlwZT0idG5z +OkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlP +ZlNlcnZpY2UiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5z +cG9ydFF1YWxpdHlPZlNlcnZpY2UiIHR5cGU9InRuczpMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVzb3VyY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlv +blByb2ZpbGVVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJh +bnRlZSIgdHlwZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpC +cm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mQnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0i +dG5zOkxpc3RPZkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRhdGFT +ZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VVcmki +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJyb2tl +clRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik1ldGFEYXRhVXBkYXRlVGltZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv +bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJEYXRh +U2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ikxpc3RPZkJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRh +dGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p +eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0UmVhZGVy +VHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VV +cmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJy +b2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFJlYWRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFU +eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0UmVh +ZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5z +OkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJva2VyRGF0 +YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQnJva2VyRGF0YVNl +dFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEaWFnbm9zdGljc0xldmVsIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QmFzaWNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZWRfMSIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb18yIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJMb2dfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVi +dWdfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzTGV2ZWwiIHR5cGU9InRuczpEaWFnbm9zdGljc0xl +dmVsIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVs +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +c0xldmVsIiB0eXBlPSJ0bnM6RGlhZ25vc3RpY3NMZXZlbCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVsIiB0eXBlPSJ0bnM6 +TGlzdE9mRGlhZ25vc3RpY3NMZXZlbCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmlj +YXRpb24iPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbl8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJFcnJvcl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2lt +cGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xh +c3NpZmljYXRpb24iIHR5cGU9InRuczpQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNh +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3Rp +Y3NDb3VudGVyQ2xhc3NpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiB0eXBl +PSJ0bnM6UHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3RpY3ND +b3VudGVyQ2xhc3NpZmljYXRpb24iIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJEaWFnbm9zdGljc0Nv +dW50ZXJDbGFzc2lmaWNhdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFsaWFzTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVk +TmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlZmVyZW5jZWROb2RlcyIgdHlwZT0idWE6TGlzdE9mRXhwYW5kZWROb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiIHR5 +cGU9InRuczpBbGlhc05hbWVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6QWxpYXNOYW1lRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQWxpYXNOYW1l +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IklkVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyaWNfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iU3RyaW5nXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ikd1aWRfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3BhcXVlXzMiIC8+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJJZFR5cGUiIHR5cGU9InRuczpJZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZklkVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iSWRUeXBlIiB0eXBlPSJ0bnM6SWRUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZklkVHlwZSIgdHlwZT0idG5zOkxpc3RPZklkVHlw +ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iTm9kZUNsYXNzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zcGVjaWZpZWRfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iT2JqZWN0XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhcmlhYmxlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF80 +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RUeXBlXzgiIC8+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlVHlwZV8xNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8zMiIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGF0YVR5cGVfNjQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlZpZXdfMTI4IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJtaXNzaW9uVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 +L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25UeXBlIiB0eXBl +PSJ0bnM6UGVybWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vz +c0xldmVsVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkQnl0ZSI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJBY2Nlc3NMZXZlbFR5cGUiIHR5cGU9InRuczpBY2Nlc3NMZXZlbFR5cGUiIC8+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vzc0xldmVsRXhUeXBlIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUi +IHR5cGU9InRuczpBY2Nlc3NMZXZlbEV4VHlwZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iRXZlbnROb3RpZmllclR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNp +Z25lZEJ5dGUiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllclR5cGUiIHR5cGU9InRuczpFdmVudE5vdGlm +aWVyVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUm9sZVBlcm1pc3Npb25UeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25zIiB0eXBlPSJ0bnM6UGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJvbGVQZXJt +aXNzaW9uVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Um9sZVBlcm1pc3Npb25UeXBlIiB0eXBlPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlRGVm +aW5pdGlvbiIgdHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVEZWZpbml0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9InRuczpE +YXRhVHlwZURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgdHlwZT0idG5z +Okxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iU3RydWN0dXJlVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0 +cnVjdHVyZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJ1Y3R1cmVXaXRo +T3B0aW9uYWxGaWVsZHNfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb25f +MiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUiIHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVGaWVsZCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVz +Y3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNPcHRpb25hbCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6U3RydWN0dXJlRmll +bGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZUZpZWxkIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVGaWVs +ZCIgdHlwZT0idG5zOlN0cnVjdHVyZUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVGaWVsZCIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZUZpZWxkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkJhc2VEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUi +IHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0dXJlRmllbGQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBl +PSJ0bnM6U3RydWN0dXJlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mU3RydWN0dXJlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlRGVmaW5pdGlvbiIgdHlwZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZT +dHJ1Y3R1cmVEZWZpbml0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVmaW5pdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250 +ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlw +ZURlZmluaXRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mRW51bUZpZWxkIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURlZmluaXRpb24iIHR5cGU9InRuczpFbnVtRGVmaW5p +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlZmluaXRpb24i +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVudW1EZWZpbml0 +aW9uIiB0eXBlPSJ0bnM6RW51bURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZWZpbml0aW9uIiB0 +eXBlPSJ0bnM6TGlzdE9mRW51bURlZmluaXRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNs +YXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJCcm93c2VOYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzcGxheU5h +bWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxp +emVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJXcml0ZU1hc2siIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyUm9sZVBl +cm1pc3Npb25zIiB0eXBlPSJ0bnM6TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNl +Tm9kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlIiB0eXBlPSJ0 +bnM6Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTm9kZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZSIgdHlwZT0idG5zOk5v +ZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZk5vZGUiIHR5cGU9InRuczpMaXN0T2ZOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJbnN0YW5jZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikluc3RhbmNlTm9kZSIg +dHlwZT0idG5zOkluc3RhbmNlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHlw +ZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhz +OmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl +eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlR5cGVO +b2RlIiB0eXBlPSJ0bnM6VHlwZU5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9i +amVjdE5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAg +PHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0Tm9kZSIgdHlwZT0idG5zOk9i +amVjdE5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9iamVjdFR5cGVOb2RlIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ik9iamVjdFR5cGVOb2RlIiB0eXBlPSJ0bnM6T2JqZWN0VHlwZU5vZGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0 +YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +UmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNj +ZXNzTGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWduZWRC +eXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWluaW11 +bVNhbXBsaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3Rvcml6aW5nIiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxF +eCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlTm9kZSIg +dHlwZT0idG5zOlZhcmlhYmxlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFy +aWFibGVUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpUeXBlTm9kZSI+DQogICAgICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBl +IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJWYXJpYWJsZVR5cGVOb2RlIiB0eXBlPSJ0bnM6VmFyaWFibGVUeXBl +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN5bW1ldHJpYyIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Iklu +dmVyc2VOYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIHR5cGU9InRuczpSZWZlcmVuY2VUeXBlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTWV0aG9kTm9kZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpJbnN0YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRXhlY3V0YWJsZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJFeGVjdXRhYmxlIiB0eXBlPSJ4czpi +b29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRob2ROb2RlIiB0eXBlPSJ0bnM6TWV0aG9kTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld05vZGUiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmlld05vZGUiIHR5cGU9InRuczpWaWV3 +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YVR5cGVOb2RlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRh +dGFUeXBlTm9kZSIgdHlwZT0idG5zOkRhdGFUeXBlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUmVmZXJlbmNlTm9kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0ludmVyc2Ui +IHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VOb2RlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlTm9kZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlTm9kZSIg +dHlwZT0idG5zOlJlZmVyZW5jZU5vZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZU5vZGUiIHR5cGU9InRu +czpMaXN0T2ZSZWZlcmVuY2VOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJBcmd1bWVudCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5cGU9InVhOkxpc3RP +ZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFyZ3VtZW50IiB0eXBlPSJ0bnM6QXJndW1lbnQi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFyZ3VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcmd1bWVudCIgdHlwZT0idG5zOkFy +Z3VtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZBcmd1bWVudCIgdHlwZT0idG5zOkxpc3RPZkFyZ3VtZW50IiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVt +VmFsdWVUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJW +YWx1ZSIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzcGxheU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIg +dHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJFbnVtVmFsdWVUeXBlIiB0eXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bVZhbHVlVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bVZhbHVlVHlwZSIgdHlwZT0idG5zOkVudW1W +YWx1ZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkVudW1WYWx1ZVR5cGUiIHR5cGU9InRuczpMaXN0T2ZFbnVtVmFs +dWVUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJFbnVtRmllbGQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2Ui +Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RW51bVZhbHVlVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRmllbGQiIHR5 +cGU9InRuczpFbnVtRmllbGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVu +dW1GaWVsZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51 +bUZpZWxkIiB0eXBlPSJ0bnM6RW51bUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtRmllbGQiIHR5cGU9InRu +czpMaXN0T2ZFbnVtRmllbGQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ik9wdGlvblNldCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbGlkQml0 +cyIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ik9wdGlvblNldCIgdHlwZT0idG5zOk9wdGlvblNldCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mT3B0aW9uU2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJPcHRpb25TZXQiIHR5cGU9InRuczpPcHRpb25TZXQiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +Zk9wdGlvblNldCIgdHlwZT0idG5zOkxpc3RPZk9wdGlvblNldCIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5pb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJVbmlvbiIgdHlwZT0idG5zOlVuaW9uIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVbmlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iVW5pb24iIHR5cGU9InRuczpVbmlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVW5pb24iIHR5cGU9 +InRuczpMaXN0T2ZVbmlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJOb3JtYWxpemVkU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRGVjaW1hbFN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkR1cmF0aW9uU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZVN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGVTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJEdXJhdGlvbiIgdHlwZT0ieHM6ZG91YmxlIiAvPg0KDQogIDx4czpl +bGVtZW50IG5hbWU9IlV0Y1RpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiAvPg0KDQogIDx4czplbGVt +ZW50IG5hbWU9IkxvY2FsZUlkIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlRpbWVab25lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik9mZnNldCIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRheWxpZ2h0U2F2aW5nSW5PZmZzZXQiIHR5cGU9Inhz +OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lWm9uZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6VGltZVpvbmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +VGltZVpvbmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGltZVpvbmVEYXRhVHlwZSIgdHlwZT0idG5zOlRpbWVab25lRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZlRpbWVab25lRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZUaW1lWm9uZURhdGFUeXBlIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkluZGV4 +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlZ2Vy +SWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJB +cHBsaWNhdGlvblR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2ZXJfMCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iQ2xpZW50XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkNsaWVudEFuZFNlcnZlcl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNj +b3ZlcnlTZXJ2ZXJfMyIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgdHlwZT0idG5zOkFwcGxp +Y2F0aW9uVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXBwbGljYXRpb25EZXNj +cmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBw +bGljYXRpb25VcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2R1Y3RVcmkiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFwcGxpY2F0aW9uTmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9u +VHlwZSIgdHlwZT0idG5zOkFwcGxpY2F0aW9uVHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iR2F0ZXdheVNlcnZlclVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlz +Y292ZXJ5UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5VXJscyIgdHlwZT0i +dWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFw +cGxpY2F0aW9uRGVzY3JpcHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlv +bkRlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkFwcGxpY2F0aW9uRGVzY3Jp +cHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlJlcXVlc3RIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFt +cCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXR1cm5EaWFnbm9zdGljcyIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1 +ZGl0RW50cnlJZCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZW91dEhpbnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlv +bmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlc3BvbnNlSGVhZGVyIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXAiIHR5cGU9InhzOmRh +dGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGFuZGxlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VydmljZVJlc3VsdCIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmljZURpYWdub3N0aWNzIiB0 +eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cmluZ1RhYmxlIiB0eXBlPSJ1YTpMaXN0T2ZTdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGRpdGlvbmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpS +ZXNwb25zZUhlYWRlciIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJzaW9uVGltZSIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VG +YXVsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9u +c2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlRmF1bHQiIHR5cGU9InRuczpTZXJ2aWNlRmF1bHQiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25sZXNzSW52b2tlUmVxdWVzdFR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVyaXNWZXJzaW9u +IiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiB0eXBlPSJ0 +bnM6U2Vzc2lvbmxlc3NJbnZva2VSZXF1ZXN0VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25zZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWVzcGFjZVVyaXMiIHR5cGU9InVhOkxpc3RPZlN0 +cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9r +ZVJlc3BvbnNlVHlwZSIgdHlwZT0idG5zOlNlc3Npb25sZXNzSW52b2tlUmVzcG9uc2VUeXBlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2Fs +ZUlkcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpcyIgdHlwZT0idWE6TGlzdE9m +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJz +UmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iRmluZFNlcnZlcnNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlcnMiIHR5cGU9InRuczpMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2Ui +IHR5cGU9InRuczpGaW5kU2VydmVyc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJTZXJ2ZXJPbk5ldHdvcmsiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJDYXBhYmlsaXRpZXMiIHR5cGU9 +InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpTZXJ2ZXJPbk5ldHdvcmsiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNlcnZlck9uTmV0d29yayI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyT25OZXR3b3JrIiB0eXBlPSJ0bnM6U2Vy +dmVyT25OZXR3b3JrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpMaXN0T2ZT +ZXJ2ZXJPbk5ldHdvcmsiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5z +OlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTdGFydGluZ1JlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVjb3Jkc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3 +b3JrUmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RDb3VudGVyUmVzZXRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vy +dmVycyIgdHlwZT0idG5zOkxpc3RPZlNlcnZlck9uTmV0d29yayIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiB0eXBlPSJ0 +bnM6RmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +Lz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSI+DQogICAg +PHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IkludmFsaWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduXzIiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25BbmRFbmNyeXB0XzMiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlU2Vj +dXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCg0KICA8eHM6c2lt +cGxlVHlwZSAgbmFtZT0iVXNlclRva2VuVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9 +InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFub255bW91c18wIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyTmFtZV8xIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJJc3N1ZWRUb2tlbl8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuVHlwZSIgdHlwZT0i +dG5zOlVzZXJUb2tlblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJUb2tl +blBvbGljeSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9s +aWN5SWQiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRva2VuVHlwZSIgdHlwZT0idG5zOlVzZXJUb2tlblR5 +cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlZFRva2Vu +VHlwZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNzdWVyRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuUG9saWN5IiB0eXBlPSJ0bnM6VXNlclRva2Vu +UG9saWN5IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVc2VyVG9rZW5Qb2xp +Y3kiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tl +blBvbGljeSIgdHlwZT0idG5zOlVzZXJUb2tlblBvbGljeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVXNlclRva2VuUG9s +aWN5IiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludERlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVy +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlw +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlckNlcnRpZmljYXRlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 +eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXNlcklkZW50aXR5VG9rZW5zIiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlMZXZlbCIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpF +bmRwb2ludERlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiB0eXBlPSJ0 +bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlw +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9j +YWxlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9maWxlVXJpcyIgdHlwZT0idWE6TGlz +dE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkdldEVuZHBv +aW50c1JlcXVlc3QiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXF1ZXN0IiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJHZXRFbmRwb2ludHNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50cyIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRp +b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2V0RW5kcG9pbnRzUmVz +cG9uc2UiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iUmVnaXN0ZXJlZFNlcnZlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9kdWN0VXJp +IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJOYW1lcyIgdHlwZT0idWE6TGlzdE9mTG9jYWxpemVk +VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclR5cGUiIHR5cGU9InRuczpBcHBsaWNhdGlvblR5cGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkdhdGV3YXlTZXJ2ZXJVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpc2NvdmVyeVVybHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFwaG9y +ZUZpbGVQYXRoIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc09ubGluZSIgdHlwZT0ieHM6Ym9vbGVhbiIg +bWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3Rl +cmVkU2VydmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWdpc3RlcmVk +U2VydmVyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdp +c3RlcmVkU2VydmVyIiB0eXBlPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVnaXN0 +ZXJlZFNlcnZlciIgdHlwZT0idG5zOkxpc3RPZlJlZ2lzdGVyZWRTZXJ2ZXIiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2Vy +dmVyUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXIiIHR5cGU9InRu +czpSZWdpc3RlcmVkU2VydmVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWdpc3RlclNlcnZlclJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXJS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIHR5 +cGU9InRuczpEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEaXNjb3ZlcnlD +b25maWd1cmF0aW9uIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1kbnNTZXJ2ZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2Fw +YWJpbGl0aWVzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOk1kbnNEaXNj +b3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3Rl +clNlcnZlcjJSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlciIgdHlw +ZT0idG5zOlJlZ2lzdGVyZWRTZXJ2ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyMlJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25z +ZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMi +IHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXIyUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlw +ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Iklzc3VlXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlJlbmV3XzEiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIHR5cGU9InRuczpT +ZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNo +YW5uZWxTZWN1cml0eVRva2VuIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDaGFubmVsSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb2tlbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlZEF0IiB0eXBl +PSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZExpZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNoYW5uZWxTZWN1cml0eVRva2VuIiB0eXBlPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4i +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRQcm90b2NvbFZlcnNpb24iIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXF1ZXN0VHlwZSIgdHlwZT0idG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ2xpZW50Tm9uY2UiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZExp +ZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9wZW5T +ZWN1cmVDaGFubmVsUmVxdWVzdCIgdHlwZT0idG5zOk9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclByb3RvY29sVmVyc2lvbiIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5VG9rZW4iIHR5cGU9InRuczpDaGFubmVsU2VjdXJpdHlUb2tlbiIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZl +ck5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOk9wZW5TZWN1 +cmVDaGFubmVsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vj +dXJlQ2hhbm5lbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIHR5 +cGU9InRuczpDbG9zZVNlY3VyZUNoYW5uZWxSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJDbG9zZVNlY3VyZUNoYW5uZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9zZVNlY3Vy +ZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDZXJ0aWZpY2F0ZURh +dGEiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNpZ25lZFNvZnR3YXJl +Q2VydGlmaWNhdGUiIHR5cGU9InRuczpTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduZWRTb2Z0d2Fy +ZUNlcnRpZmljYXRlIiB0eXBlPSJ0bnM6U2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mU2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3 +YXJlQ2VydGlmaWNhdGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2Vzc2lvbkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlRGF0YSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTaWduYXR1cmUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVEYXRhIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0 +YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRlU2Vzc2lvblJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpB +cHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbk5hbWUiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNsaWVudE5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIg +dHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkU2Vzc2lvblRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVz +cG9uc2VNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJDcmVhdGVTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVy +IiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRTZXNzaW9uVGlt +ZW91dCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2VydGlm +aWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckVuZHBvaW50cyIgdHlwZT0idG5z +Okxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIg +dHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTaWduYXR1 +cmUiIHR5cGU9InRuczpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVxdWVzdE1lc3NhZ2VTaXplIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25SZXNw +b25zZSIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlBvbGljeUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iIHR5cGU9InRuczpV +c2VySWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQW5vbnltb3Vz +SWRlbnRpdHlUb2tlbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iIHR5cGU9InRuczpBbm9ueW1v +dXNJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVc2VyTmFtZUlk +ZW50aXR5VG9rZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg +ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlck5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJQYXNzd29yZCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVu +Y3J5cHRpb25BbGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlVzZXJOYW1lSWRlbnRpdHlUb2tlbiIgdHlwZT0idG5zOlVzZXJOYW1lSWRl +bnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iWDUwOUlkZW50aXR5VG9r +ZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGVEYXRhIiB0eXBlPSJ4 +czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJYNTA5SWRl +bnRpdHlUb2tlbiIgdHlwZT0idG5zOlg1MDlJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJJc3N1ZWRJZGVudGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENvbnRl +bnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRva2VuRGF0YSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuY3J5cHRpb25B +bGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv +eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Iklzc3VlZElkZW50aXR5VG9rZW4iIHR5cGU9InRuczpJc3N1ZWRJZGVudGl0eVRva2VuIiAv +Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlJzYUVuY3J5cHRlZFNlY3JldCIgdHlwZT0idWE6VmFy +aWFudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRTaWduYXR1cmUiIHR5cGU9InRu +czpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50U29mdHdhcmVDZXJ0aWZpY2F0ZXMiIHR5cGU9InRuczpM +aXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VXNlclRva2VuU2lnbmF0dXJlIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXF1ZXN0IiB0eXBlPSJ0 +bnM6QWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWN0aXZhdGVTZXNzaW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlz +dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3Rp +Y0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWN0aXZhdGVTZXNz +aW9uUmVzcG9uc2UiIHR5cGU9InRuczpBY3RpdmF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNsb3NlU2Vz +c2lvblJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vzc2lvblJl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2Vzc2lvblJlc3BvbnNlIiB0eXBlPSJ0bnM6Q2xvc2VT +ZXNzaW9uUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNhbmNlbFJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhhbmRsZSIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXF1ZXN0IiB0eXBlPSJ0 +bnM6Q2FuY2VsUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FuY2VsUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxDb3VudCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXNwb25zZSIgdHlw +ZT0idG5zOkNhbmNlbFJlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJOb2Rl +QXR0cmlidXRlc01hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFjY2Vzc0xldmVsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IkFycmF5RGltZW5zaW9uc18yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +cm93c2VOYW1lXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5zTm9M +b29wc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhVHlwZV8xNiIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzY3JpcHRpb25fMzIiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BsYXlOYW1lXzY0IiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJFdmVudE5vdGlmaWVyXzEyOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iRXhlY3V0YWJsZV8yNTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ikhpc3Rvcml6aW5nXzUxMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXJz +ZU5hbWVfMTAyNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNBYnN0cmFjdF8y +MDQ4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbF80MDk2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb2RlQ2xhc3NfODE5 +MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUlkXzE2Mzg0IiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTeW1tZXRyaWNfMzI3NjgiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlVzZXJBY2Nlc3NMZXZlbF82NTUzNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iVXNlckV4ZWN1dGFibGVfMTMxMDcyIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJVc2VyV3JpdGVNYXNrXzI2MjE0NCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVmFsdWVSYW5rXzUyNDI4OCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iV3JpdGVNYXNrXzEwNDg1NzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhbHVlXzIwOTcxNTIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFU +eXBlRGVmaW5pdGlvbl80MTk0MzA0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJS +b2xlUGVybWlzc2lvbnNfODM4ODYwOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QWNjZXNzUmVzdHJpY3Rpb25zXzE2Nzc3MjE2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJBbGxfMzM1NTQ0MzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VO +b2RlXzI2NTAxMjIwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RfMjY1 +MDEzNDgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdFR5cGVfMjY1MDMy +NjgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlXzI2NTcxMzgzIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZVR5cGVfMjg2MDA0MzgiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF8yNjYzMjU0OCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8yNjUzNzA2MCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVmlld18yNjUwMTM1NiIgLz4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVBdHRy +aWJ1dGVzTWFzayIgdHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzTWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFt +ZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6 +ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV3JpdGVNYXNrIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQXR0cmlidXRlcyIgdHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RBdHRyaWJ1 +dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAg +ICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0QXR0cmlidXRlcyIgdHlwZT0idG5z +Ok9iamVjdEF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAg +ICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFy +aWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMi +IHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWdu +ZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +ckFjY2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0i +eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +SGlzdG9yaXppbmciIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyIgdHlwZT0idG5zOlZhcmlhYmxlQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTWV0aG9kQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFeGVjdXRhYmxlIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlckV4ZWN1dGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1ldGhvZEF0dHJpYnV0ZXMiIHR5cGU9InRuczpNZXRob2RBdHRyaWJ1 +dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyIgdHlwZT0idG5zOk9iamVjdFR5 +cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZVR5cGVB +dHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJp +YW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIg +dHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlVHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpWYXJp +YWJsZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVu +Y2VUeXBlQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0 +eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3ltbWV0cmljIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52ZXJzZU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRl +eHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVu +Y2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlQXR0cmli +dXRlcyIgdHlwZT0idG5zOlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhVHlwZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6RGF0YVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJWaWV3QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDb250YWluc05vTG9vcHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudE5vdGlmaWVyIiB0eXBlPSJ4czp1bnNpZ25l +ZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv +eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZpZXdBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6Vmlld0F0 +dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZh +bHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJHZW5lcmlj +QXR0cmlidXRlVmFsdWUiIHR5cGU9InRuczpHZW5lcmljQXR0cmlidXRlVmFsdWUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlVmFsdWVzIiB0eXBlPSJ0bnM6TGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAg +PC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiIHR5cGU9InRuczpH +ZW5lcmljQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNJ +dGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYXJlbnRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWROZXdOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +QnJvd3NlTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVDbGFzcyIgdHlwZT0idG5z +Ok5vZGVDbGFzcyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9k +ZUF0dHJpYnV0ZXMiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uIiB0 +eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpBZGROb2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFkZE5vZGVzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNJdGVtIiB0eXBlPSJ0bnM6QWRkTm9kZXNJ +dGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZBZGROb2Rlc0l0ZW0i +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkFkZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRlZE5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzdWx0IiB0eXBlPSJ0 +bnM6QWRkTm9kZXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFk +ZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJBZGROb2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkFkZE5vZGVzUmVzdWx0IiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBZGRO +b2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkxpc3RPZkFkZE5vZGVzUmVzdWx0IiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGROb2Rlc1JlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb0FkZCIgdHlwZT0idG5zOkxp +c3RPZkFkZE5vZGVzSXRlbSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJB +ZGROb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpBZGROb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQWRkTm9kZXNSZXN1bHQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpBZGROb2Rl +c1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRSZWZlcmVuY2VzSXRl +bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU291cmNlTm9k +ZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iVGFyZ2V0U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUNsYXNzIiB0eXBlPSJ0 +bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIHR5 +cGU9InRuczpBZGRSZWZlcmVuY2VzSXRlbSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWRkUmVmZXJlbmNlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc0l0 +ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6TGlzdE9mQWRkUmVmZXJl +bmNlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlZmVyZW5jZXNUb0FkZCIgdHlwZT0idG5zOkxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0 +IiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSIgdHlwZT0idG5zOkFkZFJlZmVyZW5j +ZXNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNJdGVt +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVRhcmdldFJlZmVyZW5jZXMiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVO +b2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRlbGV0ZU5vZGVz +SXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +Tm9kZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEZWxldGVOb2Rl +c0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVOb2Rlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGV0ZU5vZGVzUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6 +TGlzdE9mRGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRlbGV0ZU5vZGVzUmVxdWVzdCIgdHlwZT0idG5zOkRlbGV0ZU5vZGVzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNSZXNwb25zZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 +InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVOb2Rlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJE +ZWxldGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU291cmNlTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQi +IHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZUJpZGlyZWN0aW9uYWwiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkRlbGV0 +ZVJlZmVyZW5jZXNJdGVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEZWxl +dGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRl +bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVS +ZWZlcmVuY2VzSXRlbSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1 +ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6TGlzdE9mRGVsZXRlUmVm +ZXJlbmNlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVz +Q29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3Bv +bnNlIiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBi +YXNlPSJ4czp1bnNpZ25lZEludCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIHR5cGU9InRu +czpBdHRyaWJ1dGVXcml0ZU1hc2siIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dz +ZURpcmVjdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSW52ZXJzZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmFsaWRfMyIgLz4NCiAg +ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkJyb3dzZURpcmVjdGlvbiIgdHlwZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld0Rlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3SWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVz +dGFtcCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQnJvd3NlRGlyZWN0aW9uIiB0eXBlPSJ0bnM6QnJvd3NlRGlyZWN0aW9uIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzTWFzayIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Vs +dE1hc2siIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpCcm93c2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +QnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dzZVJlc3VsdE1hc2siPg0KICAgIDx4czpyZXN0 +cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO +b25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJZF8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc0ZvcndhcmRfMiIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUNsYXNzXzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkJyb3dzZU5hbWVfOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iRGlzcGxheU5hbWVfMTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVE +ZWZpbml0aW9uXzMyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxfNjMiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJbmZvXzMiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmdldEluZm9fNjAiIC8+DQogICAgPC94czpy +ZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93 +c2VSZXN1bHRNYXNrIiB0eXBlPSJ0bnM6QnJvd3NlUmVzdWx0TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNGb3J3YXJkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +TmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc3BsYXlOYW1lIiB0eXBlPSJ1YTpMb2Nh +bGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXhw +YW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJl +bmNlRGVzY3JpcHRpb24iIHR5cGU9InRuczpSZWZlcmVuY2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9u +IiB0eXBlPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZURlc2Ny +aXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9p +bnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QnJvd3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVmZXJlbmNlcyIgdHlwZT0idG5zOkxpc3RPZlJlZmVyZW5jZURlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJlc3VsdCIgdHlwZT0i +dG5zOkJyb3dzZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJv +d3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VSZXN1bHQiIHR5cGU9InRuczpCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVJlc3Vs +dCIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlUmVxdWVzdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0i +dG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVx +dWVzdGVkTWF4UmVmZXJlbmNlc1Blck5vZGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvQnJvd3NlIiB0eXBlPSJ0 +bnM6TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJvd3NlUmVxdWVzdCIgdHlwZT0idG5zOkJyb3dzZVJlcXVlc3QiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUmVzcG9uc2UiIHR5cGU9InRuczpCcm93c2VS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlTmV4dFJlcXVlc3Qi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFk +ZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsZWFzZUNvbnRpbnVhdGlvblBvaW50cyIg +dHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGludWF0aW9uUG9pbnRzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiB0eXBlPSJ0 +bnM6QnJvd3NlTmV4dFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dz +ZU5leHRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkJyb3dzZU5leHRSZXNwb25zZSIgdHlwZT0idG5zOkJyb3dzZU5leHRSZXNwb25zZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVsYXRpdmVQYXRoRWxlbWVudCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ludmVyc2UiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVh +biIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0TmFtZSIg +dHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsYXRpdmVQYXRo +RWxlbWVudCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlbGF0aXZl +UGF0aEVsZW1lbnQiIHR5cGU9InRuczpMaXN0T2ZSZWxhdGl2ZVBhdGhFbGVtZW50IiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWxhdGl2 +ZVBhdGgiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1l +bnRzIiB0eXBlPSJ0bnM6TGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBh +dGgiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVBhdGgiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0aW5nTm9kZSIgdHlwZT0idWE6 +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVsYXRpdmVQYXRoIiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGgiIHR5cGU9InRuczpCcm93c2VQ +YXRoIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoIiB0eXBl +PSJ0bnM6QnJvd3NlUGF0aCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aCIgdHlwZT0idG5zOkxpc3RPZkJy +b3dzZVBhdGgiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkJyb3dzZVBhdGhUYXJnZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbWFp +bmluZ1BhdGhJbmRleCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJCcm93c2VQYXRoVGFyZ2V0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFRhcmdldCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFRhcmdldCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgdHlwZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhUYXJnZXQiIHR5cGU9InRu +czpMaXN0T2ZCcm93c2VQYXRoVGFyZ2V0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VQYXRoUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRz +IiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0aFRhcmdldCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoUmVzdWx0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFJl +c3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFJlc3Vs +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aFJlc3VsdCIgdHlwZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhS +ZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2xhdGVCcm93c2VQ +YXRoc1RvTm9kZUlkc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +UGF0aHMiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgdHlw +ZT0idG5zOlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJZHNSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZC +cm93c2VQYXRoUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2xhdGVC +cm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6VHJhbnNsYXRlQnJvd3NlUGF0 +aHNUb05vZGVJZHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0 +ZXJOb2Rlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlZ2lz +dGVyIiB0eXBlPSJ1YTpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVx +dWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhl +YWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJlZE5vZGVJZHMiIHR5cGU9 +InVhOkxpc3RPZk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVzcG9uc2UiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVucmVnaXN0ZXJOb2Rlc1JlcXVlc3QiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5 +cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1VucmVnaXN0ZXIiIHR5cGU9InVhOkxpc3RP +Zk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbnJlZ2lzdGVy +Tm9kZXNSZXF1ZXN0IiB0eXBlPSJ0bnM6VW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0 +bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +VW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpVbnJlZ2lzdGVyTm9kZXNSZXNwb25z +ZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb3VudGVyIiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1lcmljUmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uVGltZW91dCIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VCaW5hcnlF +bmNvZGluZyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heEJ5dGVTdHJpbmdMZW5ndGgiIHR5cGU9Inhz +OmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QXJyYXlM +ZW5ndGgiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWF4TWVzc2FnZVNpemUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QnVmZmVyU2l6ZSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsTGlmZXRpbWUiIHR5cGU9 +InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlUb2tlbkxpZmV0aW1lIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpFbmRwb2ludENvbmZpZ3VyYXRpb24iIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRDb25maWd1 +cmF0aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnRDb25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2lu +dENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludENvbmZpZ3VyYXRpb24iIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlF1 +ZXJ5RGF0YURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVyeURhdGFEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlF1ZXJ5 +RGF0YURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZRdWVy +eURhdGFEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpRdWVyeURhdGFEZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZRdWVyeURh +dGFEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBh +bmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluY2x1ZGVTdWJUeXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVRvUmV0dXJuIiB0eXBlPSJ0bnM6 +TGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOk5vZGVUeXBlRGVzY3JpcHRp +b24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5vZGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVUeXBl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOb2Rl +VHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRmls +dGVyT3BlcmF0b3IiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbHNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSXNOdWxsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdy +ZWF0ZXJUaGFuXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbF80IiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbk9yRXF1YWxfNSIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTGlrZV82IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJOb3RfNyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQmV0d2Vl +bl84IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbkxpc3RfOSIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5kXzEwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJPcl8xMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdF8xMiIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5WaWV3XzEzIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJPZlR5cGVfMTQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IlJlbGF0ZWRUb18xNSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0 +d2lzZUFuZF8xNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0d2lzZU9yXzE3 +IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRmlsdGVyT3BlcmF0b3IiIHR5cGU9InRuczpGaWx0ZXJPcGVyYXRvciIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlEYXRhU2V0Ij4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +cyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeURhdGFTZXQiIHR5cGU9InRuczpRdWVyeURhdGFTZXQiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlF1ZXJ5RGF0YVNldCI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlEYXRhU2V0IiB0eXBlPSJ0bnM6UXVlcnlE +YXRhU2V0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZRdWVyeURhdGFTZXQiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFT +ZXQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZWROb2RlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVJlZmVy +ZW5jZSIgdHlwZT0idG5zOk5vZGVSZWZlcmVuY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5vZGVSZWZlcmVuY2UiIHR5cGU9InRuczpOb2RlUmVmZXJlbmNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZOb2RlUmVmZXJlbmNlIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVJlZmVyZW5jZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29udGVu +dEZpbHRlckVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkZpbHRlck9wZXJhdG9yIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmRzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGVudEZpbHRlckVsZW1lbnQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0 +ZXJFbGVtZW50IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRl +bnRGaWx0ZXJFbGVtZW50IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNv +bnRlbnRGaWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkVsZW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlciIgdHlwZT0idG5zOkNv +bnRlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRlbnRG +aWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRl +bnRGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVy +IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmlsdGVyT3BlcmFuZCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmQiIHR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbGVtZW50T3BlcmFuZCI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRWxlbWVudE9wZXJhbmQiIHR5cGU9InRuczpFbGVtZW50T3BlcmFuZCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGl0ZXJhbE9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3Bl +cmFuZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hz +OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu +dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGl0ZXJhbE9wZXJh +bmQiIHR5cGU9InRuczpMaXRlcmFsT3BlcmFuZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz +ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlw +ZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkFsaWFzIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ +bmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6QXR0cmlidXRlT3BlcmFuZCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VQYXRoIiB0eXBlPSJ1YTpMaXN0T2ZRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlk +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIHR5cGU9InRuczpTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZT +aW1wbGVBdHRyaWJ1dGVPcGVyYW5kIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6U2ltcGxlQXR0cmli +dXRlT3BlcmFuZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mU2ltcGxlQXR0cmlidXRlT3BlcmFuZCIgdHlwZT0idG5zOkxp +c3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0 +eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJPcGVyYW5kU3RhdHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVy +YW5kRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudFJlc3Vs +dCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRS +ZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29u +dGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZDb250ZW50RmlsdGVyRWxl +bWVudFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iQ29udGVudEZpbHRlclJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRWxlbWVudFJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZDb250 +ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVh +Okxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXJzaW5nUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU3Rh +dHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRGlhZ25vc3RpY0luZm9z +IiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJQYXJzaW5nUmVzdWx0IiB0eXBlPSJ0bnM6UGFyc2luZ1Jlc3VsdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFyc2luZ1Jlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdCIgdHlwZT0i +dG5zOlBhcnNpbmdSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlBhcnNpbmdSZXN1bHQiIHR5cGU9InRuczpMaXN0 +T2ZQYXJzaW5nUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVR5cGVzIiB0eXBl +PSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idG5zOkNvbnRl +bnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNYXhEYXRhU2V0c1RvUmV0dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVmZXJlbmNlc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5Rmly +c3RSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlF1ZXJ5Rmlyc3RSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlF1ZXJ5RGF0YVNldHMiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFTZXQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250 +aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZQYXJzaW5nUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlclJlc3VsdCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0 +ZXJSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlGaXJz +dFJlc3BvbnNlIiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJRdWVyeU5leHRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJR +dWVyeU5leHRSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlOZXh0UmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9u +c2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJRdWVyeURhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiIHR5cGU9InRu +czpRdWVyeU5leHRSZXNwb25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVGltZXN0 +YW1wc1RvUmV0dXJuIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IlNlcnZlcl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5laXRoZXJfMyIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52YWxpZF80IiAvPg0KICAgIDwveHM6cmVzdHJp +Y3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1w +c1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6 +UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOlJlYWRWYWx1ZUlkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVhZFZhbHVlSWQiIHR5cGU9InRuczpSZWFkVmFsdWVJZCIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +UmVhZFZhbHVlSWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIgbmlsbGFibGU9InRydWUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QWdlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIg +dHlwZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlYWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmVxdWVzdCIgdHlwZT0i +dG5zOlJlYWRSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0 +T2ZEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRSZXNwb25zZSIg +dHlwZT0idG5zOlJlYWRSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlz +dG9yeVJlYWRWYWx1ZUlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBv +aW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iSGlzdG9yeVJlYWRWYWx1ZUlkIiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRWYWx1ZUlk +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5UmVhZFZhbHVlSWQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkVmFsdWVJZCIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRWYWx1ZUlkIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVh +ZFJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Rh +dHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikhpc3RvcnlEYXRhIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5 +UmVhZFJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRSZXN1bHQiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRSZXN1bHQiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3Rv +cnlSZWFkRGV0YWlscyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkRGV0YWls +cyIgdHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUmVhZEV2ZW50RGV0YWlscyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5UmVhZERldGFpbHMi +Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTnVt +VmFsdWVzUGVyTm9kZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlw +ZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWx0ZXIiIHR5cGU9InRuczpFdmVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlYWRFdmVudERldGFpbHMiIHR5cGU9InRuczpSZWFkRXZlbnREZXRhaWxz +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmF3TW9kaWZpZWREZXRhaWxzIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc1JlYWRNb2RpZmllZCIgdHlwZT0ieHM6Ym9v +bGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0 +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmV0dXJuQm91bmRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs +ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +UmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZFJhd01vZGlmaWVkRGV0YWlscyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIgdHlwZT0idWE6TGlzdE9m +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFByb2Nl +c3NlZERldGFpbHMiIHR5cGU9InRuczpSZWFkUHJvY2Vzc2VkRGV0YWlscyIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUmVhZEF0VGltZURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VTaW1w +bGVCb3VuZHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBdFRpbWVE +ZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZEF0VGltZURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiIHR5cGU9InRu +czpSZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJIaXN0b3J5RGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVZhbHVlcyIgdHlwZT0idWE6TGlzdE9mRGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlEYXRhIiB0eXBlPSJ0bnM6SGlzdG9yeURhdGEi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmaWNhdGlvblRpbWUiIHR5 +cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVcGRhdGVUeXBlIiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIgdHlw +ZT0idG5zOk1vZGlmaWNhdGlvbkluZm8iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZk1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iIHR5cGU9InRuczpNb2RpZmljYXRpb25JbmZvIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZNb2RpZmljYXRpb25JbmZvIiB0eXBlPSJ0bnM6TGlzdE9mTW9kaWZpY2F0aW9uSW5m +byIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iSGlzdG9yeU1vZGlmaWVkRGF0YSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5RGF0YSI+DQogICAg +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZmljYXRp +b25JbmZvcyIgdHlwZT0idG5zOkxpc3RPZk1vZGlmaWNhdGlvbkluZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4 +dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5TW9kaWZpZWREYXRhIiB0eXBlPSJ0bnM6SGlzdG9y +eU1vZGlmaWVkRGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudHMiIHR5 +cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeUV2ZW50IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZFJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWREZXRhaWxzIiB0eXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpUaW1lc3RhbXBzVG9SZXR1 +cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGVhc2VDb250 +aW51YXRpb25Qb2ludHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik5vZGVzVG9SZWFkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlS +ZWFkUmVxdWVzdCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5UmVhZFJlc3VsdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgdHlwZT0idG5z +Okhpc3RvcnlSZWFkUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IldyaXRl +VmFsdWUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJ +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6RGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlVmFsdWUiIHR5cGU9InRuczpXcml0ZVZhbHVlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZVZhbHVlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZVZhbHVlIiB0eXBlPSJ0bnM6 +V3JpdGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZldyaXRlVmFs +dWUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IldyaXRlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvV3Jp +dGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IldyaXRlUmVxdWVzdCIgdHlwZT0idG5zOldyaXRlUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlUmVzcG9uc2UiIHR5cGU9InRuczpXcml0ZVJlc3Bv +bnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBl +PSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eVVwZGF0ZURldGFpbHMiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCg0KICA8 +eHM6c2ltcGxlVHlwZSAgbmFtZT0iSGlzdG9yeVVwZGF0ZVR5cGUiPg0KICAgIDx4czpyZXN0cmlj +dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNl +cnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZV8yIiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGVfMyIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGVsZXRlXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpz +aW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlVHlwZSIgdHlwZT0i +dG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJm +b3JtVXBkYXRlVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2VydF8xIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJSZXBsYWNlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlVwZGF0ZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmVfNCIgLz4N +CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlBlcmZvcm1VcGRhdGVUeXBlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6 +Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i +dG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVy +Zm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRl +RGF0YURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZVN0cnVjdHVy +ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNl +cnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RP +ZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZVN0cnVj +dHVyZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlU3RydWN0dXJlRGF0YURldGFpbHMiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZUV2ZW50RGV0YWlscyI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgdHlwZT0idG5zOlBl +cmZvcm1VcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRmlsdGVyIiB0eXBlPSJ0bnM6RXZlbnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnREYXRhIiB0eXBl +PSJ0bnM6TGlzdE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVXBkYXRlRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlRXZlbnREZXRh +aWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFp +bHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNEZWxldGVNb2RpZmllZCIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRlUmF3 +TW9kaWZpZWREZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVBdFRp +bWVEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBl +PSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRl +bGV0ZUF0VGltZURldGFpbHMiIHR5cGU9InRuczpEZWxldGVBdFRpbWVEZXRhaWxzIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRJZHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiIHR5cGU9 +InRuczpEZWxldGVFdmVudERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIHR5cGU9InVhOkxpc3RP +ZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVS +ZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5VXBkYXRlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiB0eXBlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVVwZGF0ZVJlc3VsdCIgdHlwZT0i +dG5zOkxpc3RPZkhpc3RvcnlVcGRhdGVSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0 +eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iSGlzdG9yeVVwZGF0ZVJlcXVlc3QiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVVwZGF0ZVJlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkhpc3Rv +cnlVcGRhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0 +aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRh +dGVSZXNwb25zZSIgdHlwZT0idG5zOkhpc3RvcnlVcGRhdGVSZXNwb25zZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9iamVjdElkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRo +b2RJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudHMiIHR5cGU9InVhOkxpc3RPZlZh +cmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FsbE1ldGhvZFJl +cXVlc3QiIHR5cGU9InRuczpDYWxsTWV0aG9kUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6Q2FsbE1l +dGhvZFJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9m +Q2FsbE1ldGhvZFJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklucHV0QXJndW1lbnRS +ZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0 +aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdXRwdXRBcmd1bWVudHMi +IHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgdHlwZT0idG5zOkNhbGxNZXRob2RSZXN1bHQiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIHR5 +cGU9InRuczpDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiB0eXBl +PSJ0bnM6TGlzdE9mQ2FsbE1ldGhvZFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FsbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpS +ZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTWV0aG9kc1RvQ2FsbCIgdHlwZT0idG5zOkxpc3RPZkNhbGxNZXRob2RS +ZXF1ZXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxSZXF1ZXN0 +IiB0eXBlPSJ0bnM6Q2FsbFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNh +bGxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9 +InRuczpMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJDYWxsUmVzcG9uc2UiIHR5cGU9InRuczpDYWxsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBs +ZVR5cGUgIG5hbWU9Ik1vbml0b3JpbmdNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i +eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxpbmdfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIg +dHlwZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJE +YXRhQ2hhbmdlVHJpZ2dlciI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c18wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNWYWx1ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJTdGF0dXNWYWx1ZVRpbWVzdGFtcF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZVRyaWdn +ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdlVHJpZ2dlciIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAg +bmFtZT0iRGVhZGJhbmRUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5n +Ij4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJBYnNvbHV0ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJQZXJjZW50XzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFR5cGUiIHR5cGU9InRuczpEZWFkYmFu +ZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyIiB0eXBlPSJ0bnM6TW9uaXRv +cmluZ0ZpbHRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZUZpbHRl +ciI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyaWdnZXIiIHR5cGU9InRuczpEYXRhQ2hh +bmdlVHJpZ2dlciIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRlYWRiYW5kVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFZhbHVlIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdl +RmlsdGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFdmVudEZpbHRlciI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlbGVjdENsYXVzZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IldoZXJlQ2xhdXNlIiB0eXBlPSJ0bnM6Q29udGVudEZp +bHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmlsdGVyIiB0eXBl +PSJ0bnM6RXZlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFnZ3JlZ2F0 +ZUNvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlVzZVNlcnZlckNhcGFiaWxpdGllc0RlZmF1bHRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmVhdFVuY2VydGFpbkFzQmFk +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQZXJjZW50RGF0YUJhZCIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJjZW50RGF0YUdvb2QiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +U2xvcGVkRXh0cmFwb2xhdGlvbiIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0 +aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIg +dHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91Ymxl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRl +Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIHR5cGU9InRuczpBZ2dy +ZWdhdGVGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0 +ZXJSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl +ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRl +clJlc3VsdCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZWxlY3RDbGF1c2VSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0lu +Zm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV2hlcmVDbGF1c2VSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0 +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiIHR5 +cGU9InRuczpFdmVudEZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWdncmVnYXRlRmlsdGVyUmVzdWx0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZh +bHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1 +bHQiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZFN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHJvY2Vzc2luZ0ludGVydmFsIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXZpc2VkQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZp +Z3VyYXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0 +ZXJSZXN1bHQiIHR5cGU9InRuczpBZ2dyZWdhdGVGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0lu +dGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVTaXplIiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzY2FyZE9sZGVzdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtVG9Nb25p +dG9yIiB0eXBlPSJ0bnM6UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIgdHlwZT0idG5zOk1v +bml0b3JpbmdNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVl +c3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVS +ZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNy +ZWF0ZVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0Nv +ZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0 +ZW1JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNpemUi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiB0 +eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIg +dHlwZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0 +ZW1DcmVhdGVSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0 +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpU +aW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ikl0ZW1zVG9DcmVhdGUiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVx +dWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9m +TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlz +dE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +Q3JlYXRlTW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkNyZWF0ZU1vbml0b3JlZEl0 +ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1N +b2RpZnlSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJNb25pdG9yZWRJdGVtSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6 +TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtTW9k +aWZ5UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVk +SXRlbU1vZGlmeVJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRl +bU1vZGlmeVJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBl +PSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2Rp +ZnlSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0 +YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNp +emUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3Vs +dCIgdHlwZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3Jl +ZEl0ZW1Nb2RpZnlSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVz +dWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRu +czpUaW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3Qi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmeU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlz +dE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOk1vZGlmeU1vbml0b3Jl +ZEl0ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3Jp +bmdNb2RlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25J +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vbml0b3JpbmdNb2RlIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ01vZGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTZXRNb25pdG9yaW5nTW9kZVJlcXVlc3QiIHR5cGU9InRuczpTZXRNb25pdG9yaW5nTW9kZVJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpM +aXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXRNb25pdG9y +aW5nTW9kZVJlc3BvbnNlIiB0eXBlPSJ0bnM6U2V0TW9uaXRvcmluZ01vZGVSZXNwb25zZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2V0VHJpZ2dlcmluZ1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlnZ2VyaW5nSXRl +bUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlua3NUb0FkZCIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlua3NUb1Jl +bW92ZSIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFRyaWdnZXJpbmdSZXNwb25z +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZFJlc3VsdHMiIHR5cGU9InVhOkxp +c3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdu +b3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVtb3ZlUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +bW92ZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiB0 +eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWRzIiB0eXBlPSJ1YTpM +aXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiB0eXBlPSJ0bnM6RGVsZXRlTW9uaXRvcmVkSXRlbXNSZXF1 +ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1Jl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6 +TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25v +c3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTW9u +aXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RlZExpZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxp +dmVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiB0eXBlPSJ4czp1bnNp +Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGluZ0VuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlByaW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6Q3JlYXRl +U3Vic2NyaXB0aW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRl +U3Vic2NyaXB0aW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJz +Y3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRv +dWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZExp +ZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9u +c2UiIHR5cGU9InRuczpDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZFB1Ymxpc2hpbmdJ +bnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkTWF4S2Vl +cEFsaXZlQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBy +aW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2Rp +ZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVz +dCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNv +dW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1 +YnNjcmlwdGlvblJlc3BvbnNlIiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9uc2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aXB0aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0UHVi +bGlzaGluZ01vZGVSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRQdWJs +aXNoaW5nTW9kZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0 +cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2V0UHVibGlzaGluZ01vZGVSZXNwb25zZSIgdHlwZT0idG5zOlNldFB1Ymxpc2hpbmdNb2Rl +UmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3Nh +Z2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcXVlbmNl +TnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHVibGlzaFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTm90aWZpY2F0aW9uTWVzc2FnZSIgdHlwZT0idG5zOk5vdGlmaWNhdGlvbk1lc3NhZ2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9u +RGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlv +biI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1zIiB0eXBlPSJ0bnM6 +TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5 +cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAg +PC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbiIgdHlwZT0idG5zOkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmlj +YXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVu +dEhhbmRsZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgdHlwZT0i +dG5zOk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIHR5cGU9 +InRuczpNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTm90 +aWZpY2F0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXZl +bnROb3RpZmljYXRpb25MaXN0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNl +Ij4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAg +ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRzIiB0 +eXBlPSJ0bnM6TGlzdE9mRXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJFdmVudE5vdGlmaWNhdGlvbkxpc3QiIHR5cGU9InRuczpFdmVudE5vdGlmaWNhdGlv +bkxpc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2ZW50RmllbGRMaXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJFdmVudEZpZWxkcyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkTGlzdCIgdHlwZT0idG5zOkV2ZW50Rmll +bGRMaXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFdmVudEZpZWxkTGlz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWVs +ZExpc3QiIHR5cGU9InRuczpFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXZlbnRGaWVsZExpc3Qi +IHR5cGU9InRuczpMaXN0T2ZFdmVudEZpZWxkTGlzdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50RmllbGRMaXN0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkcyIg +dHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpIaXN0b3J5RXZlbnRGaWVsZExp +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkhpc3RvcnlFdmVudEZpZWxk +TGlzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eUV2ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVs +ZExpc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRp +b25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXR1cyIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGlj +SW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlm +aWNhdGlvbiIgdHlwZT0idG5zOlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgdHlwZT0idG5zOlN1YnNjcmlwdGlvbkFj +a25vd2xlZGdlbWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRuczpTdWJzY3Jp +cHRpb25BY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dCIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaFJl +cXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVl +c3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoUmVxdWVzdCIgdHlwZT0i +dG5zOlB1Ymxpc2hSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNo +UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +c3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TW9yZU5vdGlmaWNhdGlvbnMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3Rp +ZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UHVi +bGlzaFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXF1 +ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV0cmFuc21pdFNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3QiIHR5cGU9InRuczpSZXB1Ymxpc2hSZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXNwb25zZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5 +cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpO +b3RpZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlcHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVwdWJsaXNoUmVzcG9uc2UiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZmVyUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2Rl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdmFpbGFibGVTZXF1 +ZW5jZU51bWJlcnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclJlc3VsdCIgdHlwZT0idG5zOlRyYW5zZmVyUmVzdWx0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUcmFuc2ZlclJlc3VsdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJSZXN1bHQi +IHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHQiIHR5cGU9 +InRuczpMaXN0T2ZUcmFuc2ZlclJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxp +c3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCIgdHlwZT0idG5zOlRy +YW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZlRyYW5zZmVyUmVzdWx0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3Rp +Y0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgdHlwZT0i +dG5zOlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIg +dHlwZT0idG5zOkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz +cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25v +c3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkJ1aWxkSW5mbyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlw +ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHJvZHVjdE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvZnR3YXJlVmVy +c2lvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGROdW1iZXIiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ1 +aWxkRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsZElu +Zm8iIHR5cGU9InRuczpCdWlsZEluZm8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlJl +ZHVuZGFuY3lTdXBwb3J0Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJDb2xkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ildh +cm1fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSG90XzMiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcGFyZW50XzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkhvdEFuZE1pcnJvcmVkXzUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbmN5U3VwcG9y +dCIgdHlwZT0idG5zOlJlZHVuZGFuY3lTdXBwb3J0IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJTZXJ2ZXJTdGF0ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bm5pbmdfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ik5vQ29uZmlndXJhdGlvbl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJT +dXNwZW5kZWRfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2h1dGRvd25fNCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdF81IiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pY2F0aW9uRmF1bHRfNiIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVW5rbm93bl83IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyU3RhdGUiIHR5cGU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVkdW5kYW50U2Vy +dmVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcnZlcklkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTGV2ZWwiIHR5cGU9InhzOnVuc2ln +bmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVy +U3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZHVu +ZGFudFNlcnZlckRhdGFUeXBlIiB0eXBlPSJ0bnM6UmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZHVuZGFudFNlcnZlckRhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbnRT +ZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlZHVuZGFudFNlcnZl +ckRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxMaXN0IiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxM +aXN0RGF0YVR5cGUiIHR5cGU9InRuczpFbmRwb2ludFVybExpc3REYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdERh +dGFUeXBlIiB0eXBlPSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBv +aW50VXJsTGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5 +cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtQYXRocyIg +dHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0 +d29ya0dyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5l +dHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtHcm91cERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZk5ldHdv +cmtHcm91cERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZh +bCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhNb25pdG9yZWRJdGVtQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIg +dHlwZT0idG5zOlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxp +bmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTYW1wbGluZ0ludGVydmFs +RGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclZpZXdDb3VudCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJl +bnRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1 +cml0eVJlamVjdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZXNzaW9uVGltZW91dENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkFib3J0Q291bnQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTdWJzY3JpcHRpb25D +b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlSZWpl +Y3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWplY3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1t +YXJ5RGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2ZXJEaWFnbm9zdGljc1N1bW1hcnlEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmVyU3RhdHVzRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0i +eHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1 +cnJlbnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGRJbmZvIiB0eXBlPSJ0bnM6QnVpbGRJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU2Vjb25kc1RpbGxTaHV0ZG93biIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNodXRkb3duUmVhc29uIiB0eXBlPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNl +cnZlclN0YXR1c0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2VydmVyU3RhdHVzRGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlc3Npb25OYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkFjdHVhbFNlc3Npb25UaW1lb3V0IiB0eXBlPSJ4czpkb3Vi +bGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heFJlc3BvbnNl +TWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDb25uZWN0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRp +bWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudExhc3RD +b250YWN0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50 +TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJlbnRQdWJsaXNoUmVxdWVzdHNJblF1ZXVl +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVW5hdXRob3JpemVkUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZENvdW50IiB0eXBlPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ2FsbENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNyZWF0ZU1vbml0b3JlZEl0ZW1zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNldFRyaWdnZXJpbmdDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vy +dmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlcHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgdHlwZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZGROb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJCcm93c2VDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNs +YXRlQnJvd3NlUGF0aHNUb05vZGVJZHNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeUZpcnN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUXVlcnlOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVucmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlw +ZSIgdHlwZT0idG5zOlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkRpYWdub3N0aWNzRGF0 +YVR5cGUiIHR5cGU9InRuczpTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2Vz +c2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTZXNzaW9uRGlhZ25vc3Rp +Y3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbklkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDbGllbnRVc2VySWRPZlNlc3Npb24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudFVz +ZXJJZEhpc3RvcnkiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uTWVjaGFu +aXNtIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNw +b3J0UHJvdG9jb2wiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1l +c3NhZ2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0 +ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTZXNz +aW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9z +dGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRv +dGFsQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJFcnJvckNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2aWNl +Q291bnRlckRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNSZXN1 +bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0Nv +ZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNSZXN1bHQiIHR5cGU9InRuczpT +dGF0dXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YXR1c1Jl +c3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVz +UmVzdWx0IiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNSZXN1bHQiIHR5 +cGU9InRuczpMaXN0T2ZTdGF0dXNSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5 +cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25J +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eSIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhM +aWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ +dWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRpc2FibGVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3RDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +cHVibGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJUcmFuc2ZlclJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9BbHRDbGll +bnRDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJs +aXNoUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbnNDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm90aWZpY2F0aW9uc0NvdW50IiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50S2VlcEFsaXZlQ291 +bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDdXJyZW50TGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuYWNrbm93bGVkZ2VkTWVz +c2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25p +dG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV4dFNlcXVlbmNlTnVtYmVyIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRXZlbnRRdWV1ZU92ZXJGbG93Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +OlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU3Vi +c2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVWZXJiTWFz +ayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Ik5vZGVBZGRlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJOb2RlRGVsZXRlZF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZl +cmVuY2VBZGRlZF80IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VE +ZWxldGVkXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlQ2hhbmdl +ZF8xNiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siIHR5cGU9InRuczpN +b2RlbENoYW5nZVN0cnVjdHVyZVZlcmJNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWZmZWN0ZWRU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJiIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6 +TW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIg +dHlwZT0idG5zOk1vZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vZGVsQ2hh +bmdlU3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZNb2RlbENoYW5nZVN0cnVjdHVy +ZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQWZmZWN0ZWRUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5z +OlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJl +RGF0YVR5cGUiIHR5cGU9InRuczpTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU2Vt +YW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmFuZ2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvdyIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaWdoIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSYW5nZSIgdHlwZT0idG5zOlJhbmdlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJFVUluZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXRJ +ZCIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBl +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkVVSW5mb3JtYXRpb24iIHR5cGU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVhcl8w +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMb2dfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iTG5fMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9uIiB0 +eXBlPSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IkNvbXBsZXhOdW1iZXJUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSW1hZ2luYXJ5IiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkNvbXBsZXhOdW1iZXJUeXBlIiB0eXBlPSJ0bnM6Q29tcGxleE51bWJlclR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4 +czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkltYWdp +bmFyeSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIHR5cGU9InRuczpEb3VibGVDb21wbGV4TnVtYmVyVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQXhpc0luZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmdpbmVlcmluZ1VuaXRzIiB0eXBlPSJ0bnM6RVVJ +bmZvcm1hdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVVUmFuZ2UiIHR5cGU9InRuczpSYW5nZSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpdGxlIiB0eXBlPSJ1YTpM +b2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXhpc1NjYWxlVHlwZSIgdHlwZT0idG5zOkF4aXNTY2FsZUVudW1lcmF0 +aW9uIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBeGlzU3RlcHMi +IHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBeGlzSW5mb3JtYXRpb24iIHR5cGU9InRuczpBeGlzSW5mb3JtYXRpb24iIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlhWVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iWCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJYVlR5cGUiIHR5cGU9InRuczpYVlR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ3JlYXRlQ2xpZW50TmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2NhdGlvbkNyZWF0aW9u +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0 +aG9kSW5wdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RP +dXRwdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxs +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0dXMiIHR5cGU9InRuczpTdGF0dXNSZXN1bHQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvZ3JhbURpYWdub3N0aWNE +YXRhVHlwZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkNyZWF0ZUNsaWVudE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikludm9jYXRp +b25DcmVhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0VHJhbnNpdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1l +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2Fs +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZFNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM +YXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0 +TWV0aG9kSW5wdXRWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kT3V0 +cHV0VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiB0 +eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZFJldHVyblN0YXR1cyIgdHlwZT0idG5zOlN0YXR1c1Jlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9ncmFtRGlhZ25vc3RpYzJEYXRhVHlw +ZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJBbm5vdGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJNZXNzYWdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvbiIgdHlwZT0idG5zOkFubm90YXRpb24iIC8+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCI+DQogICAgPHhzOnJl +c3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkFic29sdXRlVmFsdWVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2Vu +dE9mVmFsdWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mUmFu +Z2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mRVVSYW5nZV8z +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVbmtub3duXzQiIC8+DQogICAgPC94 +czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJF +eGNlcHRpb25EZXZpYXRpb25Gb3JtYXQiIHR5cGU9InRuczpFeGNlcHRpb25EZXZpYXRpb25Gb3Jt +YXQiIC8+DQoNCjwveHM6c2NoZW1hPg== + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8254 + + Variable_2 + + 0 + NamespaceUri + + + + NamespaceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8252 + + + + + i=40 + + false + + i=68 + + + + + + http://opcfoundation.org/UA/2008/02/Types.xsd + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8285 + + Variable_2 + + 0 + Argument + + + + Argument + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Argument'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8291 + + Variable_2 + + 0 + EnumValueType + + + + EnumValueType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EnumValueType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8294 + + Variable_2 + + 0 + StatusResult + + + + StatusResult + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='StatusResult'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8297 + + Variable_2 + + 0 + UserTokenPolicy + + + + UserTokenPolicy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UserTokenPolicy'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8300 + + Variable_2 + + 0 + ApplicationDescription + + + + ApplicationDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ApplicationDescription'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8303 + + Variable_2 + + 0 + EndpointDescription + + + + EndpointDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EndpointDescription'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8306 + + Variable_2 + + 0 + UserIdentityToken + + + + UserIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UserIdentityToken'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8309 + + Variable_2 + + 0 + AnonymousIdentityToken + + + + AnonymousIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AnonymousIdentityToken'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8312 + + Variable_2 + + 0 + UserNameIdentityToken + + + + UserNameIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UserNameIdentityToken'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8315 + + Variable_2 + + 0 + X509IdentityToken + + + + X509IdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='X509IdentityToken'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8318 + + Variable_2 + + 0 + IssuedIdentityToken + + + + IssuedIdentityToken + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='IssuedIdentityToken'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8321 + + Variable_2 + + 0 + EndpointConfiguration + + + + EndpointConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EndpointConfiguration'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8327 + + Variable_2 + + 0 + BuildInfo + + + + BuildInfo + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='BuildInfo'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8333 + + Variable_2 + + 0 + SignedSoftwareCertificate + + + + SignedSoftwareCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SignedSoftwareCertificate'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8363 + + Variable_2 + + 0 + AddNodesItem + + + + AddNodesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AddNodesItem'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8366 + + Variable_2 + + 0 + AddReferencesItem + + + + AddReferencesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AddReferencesItem'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8369 + + Variable_2 + + 0 + DeleteNodesItem + + + + DeleteNodesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DeleteNodesItem'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8372 + + Variable_2 + + 0 + DeleteReferencesItem + + + + DeleteReferencesItem + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DeleteReferencesItem'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8417 + + Variable_2 + + 0 + RegisteredServer + + + + RegisteredServer + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='RegisteredServer'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8564 + + Variable_2 + + 0 + ContentFilterElement + + + + ContentFilterElement + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ContentFilterElement'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8567 + + Variable_2 + + 0 + ContentFilter + + + + ContentFilter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ContentFilter'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8570 + + Variable_2 + + 0 + FilterOperand + + + + FilterOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='FilterOperand'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8573 + + Variable_2 + + 0 + ElementOperand + + + + ElementOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ElementOperand'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8576 + + Variable_2 + + 0 + LiteralOperand + + + + LiteralOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='LiteralOperand'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8579 + + Variable_2 + + 0 + AttributeOperand + + + + AttributeOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AttributeOperand'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8582 + + Variable_2 + + 0 + SimpleAttributeOperand + + + + SimpleAttributeOperand + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SimpleAttributeOperand'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8639 + + Variable_2 + + 0 + HistoryEvent + + + + HistoryEvent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='HistoryEvent'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8702 + + Variable_2 + + 0 + MonitoringFilter + + + + MonitoringFilter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='MonitoringFilter'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8708 + + Variable_2 + + 0 + EventFilter + + + + EventFilter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EventFilter'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8711 + + Variable_2 + + 0 + AggregateConfiguration + + + + AggregateConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AggregateConfiguration'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8807 + + Variable_2 + + 0 + HistoryEventFieldList + + + + HistoryEventFieldList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='HistoryEventFieldList'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8843 + + Variable_2 + + 0 + RedundantServerDataType + + + + RedundantServerDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='RedundantServerDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8846 + + Variable_2 + + 0 + SamplingIntervalDiagnosticsDataType + + + + SamplingIntervalDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SamplingIntervalDiagnosticsDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8849 + + Variable_2 + + 0 + ServerDiagnosticsSummaryDataType + + + + ServerDiagnosticsSummaryDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ServerDiagnosticsSummaryDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8852 + + Variable_2 + + 0 + ServerStatusDataType + + + + ServerStatusDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ServerStatusDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8855 + + Variable_2 + + 0 + SessionDiagnosticsDataType + + + + SessionDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SessionDiagnosticsDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8858 + + Variable_2 + + 0 + SessionSecurityDiagnosticsDataType + + + + SessionSecurityDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SessionSecurityDiagnosticsDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8861 + + Variable_2 + + 0 + ServiceCounterDataType + + + + ServiceCounterDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ServiceCounterDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8864 + + Variable_2 + + 0 + SubscriptionDiagnosticsDataType + + + + SubscriptionDiagnosticsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SubscriptionDiagnosticsDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8867 + + Variable_2 + + 0 + ModelChangeStructureDataType + + + + ModelChangeStructureDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ModelChangeStructureDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8870 + + Variable_2 + + 0 + SemanticChangeStructureDataType + + + + SemanticChangeStructureDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SemanticChangeStructureDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8873 + + Variable_2 + + 0 + Range + + + + Range + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Range'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8876 + + Variable_2 + + 0 + EUInformation + + + + EUInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EUInformation'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8879 + + Variable_2 + + 0 + Annotation + + + + Annotation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Annotation'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8882 + + Variable_2 + + 0 + ProgramDiagnosticDataType + + + + ProgramDiagnosticDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ProgramDiagnosticDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8888 + + Variable_2 + + 0 + MaxLifetimeCount + + + + MaxLifetimeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8889 + + Variable_2 + + 0 + LatePublishRequestCount + + + + LatePublishRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8890 + + Variable_2 + + 0 + CurrentKeepAliveCount + + + + CurrentKeepAliveCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8891 + + Variable_2 + + 0 + CurrentLifetimeCount + + + + CurrentLifetimeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8892 + + Variable_2 + + 0 + UnacknowledgedMessageCount + + + + UnacknowledgedMessageCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8893 + + Variable_2 + + 0 + DiscardedMessageCount + + + + DiscardedMessageCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8894 + + Variable_2 + + 0 + MonitoredItemCount + + + + MonitoredItemCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8895 + + Variable_2 + + 0 + DisabledMonitoredItemCount + + + + DisabledMonitoredItemCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8896 + + Variable_2 + + 0 + MonitoringQueueOverflowCount + + + + MonitoringQueueOverflowCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8897 + + Variable_2 + + 0 + NextSequenceNumber + + + + NextSequenceNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8898 + + Variable_2 + + 0 + TotalRequestCount + + + + TotalRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8900 + + Variable_2 + + 0 + TotalRequestCount + + + + TotalRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8902 + + Variable_2 + + 0 + EventQueueOverflowCount + + + + EventQueueOverflowCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2172 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8912 + + DataType_64 + + 0 + TimeZoneDataType + + + + TimeZoneDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=8917 + + + + + i=38 + + false + + i=8913 + + + + + i=38 + + false + + i=15086 + + + + false + + + + + i=8913 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=8912 + + + + + i=39 + + false + + i=8918 + + + + 0 + + + + i=8914 + + Variable_2 + + 0 + TimeZoneDataType + + + + TimeZoneDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + TimeZoneDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8917 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=8912 + + + + + i=39 + + false + + i=8914 + + + + 0 + + + + i=8918 + + Variable_2 + + 0 + TimeZoneDataType + + + + TimeZoneDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='TimeZoneDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=8927 + + ObjectType_8 + + 0 + AuditConditionRespondEventType + + + + AuditConditionRespondEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + + i=46 + + false + + i=11852 + + + + false + + + + i=8944 + + ObjectType_8 + + 0 + AuditConditionAcknowledgeEventType + + + + AuditConditionAcknowledgeEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + + i=46 + + false + + i=17223 + + + + + i=46 + + false + + i=11853 + + + + + i=3065 + + true + + i=19505 + + + + + i=3065 + + true + + i=20198 + + + + false + + + + i=8961 + + ObjectType_8 + + 0 + AuditConditionConfirmEventType + + + + AuditConditionConfirmEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + + i=46 + + false + + i=17224 + + + + + i=46 + + false + + i=11854 + + + + false + + + + i=8995 + + VariableType_16 + + 0 + TwoStateVariableType + + + + TwoStateVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2755 + + + + + i=46 + + false + + i=8996 + + + + + i=46 + + false + + i=9000 + + + + + i=46 + + false + + i=9001 + + + + + i=46 + + false + + i=11110 + + + + + i=46 + + false + + i=11111 + + + + + + + + + + i=21 + + -1 + + false + + + + i=8996 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8995 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9000 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8995 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9001 + + Variable_2 + + 0 + EffectiveTransitionTime + + + + EffectiveTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8995 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9002 + + VariableType_16 + + 0 + ConditionVariableType + + + + ConditionVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=9003 + + + + + + + + + + i=24 + + -2 + + false + + + + i=9003 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9002 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9004 + + ReferenceType_32 + + 0 + HasTrueSubState + + + + HasTrueSubState + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + IsTrueSubStateOf + + + + + i=9005 + + ReferenceType_32 + + 0 + HasFalseSubState + + + + HasFalseSubState + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + IsFalseSubStateOf + + + + + i=9006 + + ReferenceType_32 + + 0 + HasCondition + + + + HasCondition + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + IsConditionOf + + + + + i=9009 + + Variable_2 + + 0 + ConditionName + + + + ConditionName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9010 + + Variable_2 + + 0 + BranchId + + + + BranchId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9011 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=9012 + + + + + i=46 + + false + + i=9015 + + + + + i=46 + + false + + i=9016 + + + + + i=46 + + false + + i=9017 + + + + + i=46 + + false + + i=9018 + + + + + i=46 + + false + + i=9019 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9012 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9015 + + Variable_2 + + 0 + EffectiveDisplayName + + + + EffectiveDisplayName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9016 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9017 + + Variable_2 + + 0 + EffectiveTransitionTime + + + + EffectiveTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9018 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Enabled + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9019 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Disabled + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9020 + + Variable_2 + + 0 + Quality + + + + Quality + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=9021 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9021 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9020 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9022 + + Variable_2 + + 0 + LastSeverity + + + + LastSeverity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=9023 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9023 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9022 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9024 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=9025 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9025 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9024 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9026 + + Variable_2 + + 0 + ClientUserId + + + + ClientUserId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9027 + + Method_4 + + 0 + Enable + + + + Enable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=9027 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=9028 + + Method_4 + + 0 + Disable + + + + Disable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=9028 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=9029 + + Method_4 + + 0 + AddComment + + + + AddComment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=9029 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2829 + + + + + i=46 + + false + + i=9030 + + + + true + true + + + + i=9030 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9029 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=9035 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2830 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + false + + i=9055 + + + + + i=46 + + false + + i=9036 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9036 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9035 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9055 + + Variable_2 + + 0 + DialogState + + + + DialogState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2830 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + true + + i=9035 + + + + + i=46 + + false + + i=9056 + + + + + i=46 + + false + + i=9060 + + + + + i=46 + + false + + i=9062 + + + + + i=46 + + false + + i=9063 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9056 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9060 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9062 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Active + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9063 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Inactive + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9064 + + Variable_2 + + 0 + ResponseOptionSet + + + + ResponseOptionSet + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=9065 + + Variable_2 + + 0 + DefaultResponse + + + + DefaultResponse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=6 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9066 + + Variable_2 + + 0 + OkResponse + + + + OkResponse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=6 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9067 + + Variable_2 + + 0 + CancelResponse + + + + CancelResponse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=6 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9068 + + Variable_2 + + 0 + LastResponse + + + + LastResponse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2830 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=6 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9069 + + Method_4 + + 0 + Respond + + + + Respond + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2830 + + + + + i=40 + + false + + i=9069 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=8927 + + + + + i=46 + + false + + i=9070 + + + + true + true + + + + i=9070 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9069 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SelectedResponse + + i=6 + + -1 + + + + The response to the dialog condition. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=9073 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2881 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + false + + i=9093 + + + + + i=9004 + + false + + i=9102 + + + + + i=46 + + false + + i=9074 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9074 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9073 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9093 + + Variable_2 + + 0 + AckedState + + + + AckedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2881 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + true + + i=9073 + + + + + i=46 + + false + + i=9094 + + + + + i=46 + + false + + i=9098 + + + + + i=46 + + false + + i=9100 + + + + + i=46 + + false + + i=9101 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9094 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9098 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9100 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Acknowledged + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9101 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Unacknowledged + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9102 + + Variable_2 + + 0 + ConfirmedState + + + + ConfirmedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2881 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9073 + + + + + i=46 + + false + + i=9103 + + + + + i=46 + + false + + i=9107 + + + + + i=46 + + false + + i=9109 + + + + + i=46 + + false + + i=9110 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9103 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9102 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9107 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9102 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9109 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9102 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Confirmed + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9110 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9102 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Unconfirmed + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9111 + + Method_4 + + 0 + Acknowledge + + + + Acknowledge + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2881 + + + + + i=40 + + false + + i=9111 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=8944 + + + + + i=46 + + false + + i=9112 + + + + true + true + + + + i=9112 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9111 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=9113 + + Method_4 + + 0 + Confirm + + + + Confirm + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2881 + + + + + i=40 + + false + + i=9113 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=8961 + + + + + i=46 + + false + + i=9114 + + + + true + true + + + + i=9114 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9113 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=9115 + + Variable_2 + + 0 + UnshelveTime + + + + UnshelveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2929 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9118 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + false + + i=9160 + + + + + i=9004 + + false + + i=9169 + + + + + i=9004 + + false + + i=9178 + + + + + i=46 + + false + + i=9119 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9119 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9118 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9160 + + Variable_2 + + 0 + ActiveState + + + + ActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + true + + i=9118 + + + + + i=46 + + false + + i=9161 + + + + + i=46 + + false + + i=9164 + + + + + i=46 + + false + + i=9165 + + + + + i=46 + + false + + i=9166 + + + + + i=46 + + false + + i=9167 + + + + + i=46 + + false + + i=9168 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9161 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9164 + + Variable_2 + + 0 + EffectiveDisplayName + + + + EffectiveDisplayName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9165 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9166 + + Variable_2 + + 0 + EffectiveTransitionTime + + + + EffectiveTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9167 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Active + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9168 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Inactive + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9169 + + Variable_2 + + 0 + SuppressedState + + + + SuppressedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9118 + + + + + i=46 + + false + + i=9170 + + + + + i=46 + + false + + i=9174 + + + + + i=46 + + false + + i=9176 + + + + + i=46 + + false + + i=9177 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9170 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9169 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9174 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9169 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9176 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9169 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Suppressed + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9177 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9169 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Unsuppressed + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9178 + + Object_1 + + 0 + ShelvingState + + + + ShelvingState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=2929 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9118 + + + + + i=47 + + false + + i=9179 + + + + + i=47 + + false + + i=9184 + + + + + i=46 + + false + + i=9189 + + + + + i=47 + + false + + i=9213 + + + + + i=47 + + false + + i=9211 + + + + + i=47 + + false + + i=9212 + + + + 0 + + + + i=9179 + + Variable_2 + + 0 + CurrentState + + + + CurrentState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9178 + + + + + i=40 + + false + + i=2760 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=9180 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9180 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9179 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9184 + + Variable_2 + + 0 + LastTransition + + + + LastTransition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9178 + + + + + i=40 + + false + + i=2767 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=9185 + + + + + i=46 + + false + + i=9188 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9185 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9184 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9188 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9184 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9189 + + Variable_2 + + 0 + UnshelveTime + + + + UnshelveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9178 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9211 + + Method_4 + + 0 + Unshelve + + + + Unshelve + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9178 + + + + + i=40 + + false + + i=2947 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=11093 + + + + true + true + + + + i=9212 + + Method_4 + + 0 + OneShotShelve + + + + OneShotShelve + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9178 + + + + + i=40 + + false + + i=2948 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=11093 + + + + true + true + + + + i=9213 + + Method_4 + + 0 + TimedShelve + + + + TimedShelve + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9178 + + + + + i=40 + + false + + i=2949 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=11093 + + + + + i=46 + + false + + i=9214 + + + + true + true + + + + i=9214 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9213 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=9215 + + Variable_2 + + 0 + SuppressedOrShelved + + + + SuppressedOrShelved + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9216 + + Variable_2 + + 0 + MaxTimeShelved + + + + MaxTimeShelved + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9318 + + ObjectType_8 + + 0 + ExclusiveLimitStateMachineType + + + + ExclusiveLimitStateMachineType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2771 + + + + + i=47 + + false + + i=9329 + + + + + i=47 + + false + + i=9331 + + + + + i=47 + + false + + i=9333 + + + + + i=47 + + false + + i=9335 + + + + + i=47 + + false + + i=9337 + + + + + i=47 + + false + + i=9338 + + + + + i=47 + + false + + i=9339 + + + + + i=47 + + false + + i=9340 + + + + false + + + + i=9329 + + Object_1 + + 0 + HighHigh + + + + HighHigh + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2307 + + + + + i=51 + + true + + i=9339 + + + + + i=52 + + true + + i=9340 + + + + + i=46 + + false + + i=9330 + + + + 0 + + + + i=9330 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9329 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9331 + + Object_1 + + 0 + High + + + + High + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=9339 + + + + + i=51 + + true + + i=9340 + + + + + i=46 + + false + + i=9332 + + + + 0 + + + + i=9332 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9331 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9333 + + Object_1 + + 0 + Low + + + + Low + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=9337 + + + + + i=51 + + true + + i=9338 + + + + + i=46 + + false + + i=9334 + + + + 0 + + + + i=9334 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9333 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9335 + + Object_1 + + 0 + LowLow + + + + LowLow + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2307 + + + + + i=51 + + true + + i=9337 + + + + + i=52 + + true + + i=9338 + + + + + i=46 + + false + + i=9336 + + + + 0 + + + + i=9336 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9335 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9337 + + Object_1 + + 0 + LowLowToLow + + + + LowLowToLow + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=9335 + + + + + i=52 + + false + + i=9333 + + + + + i=46 + + false + + i=11340 + + + + 0 + + + + i=9338 + + Object_1 + + 0 + LowToLowLow + + + + LowToLowLow + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=9333 + + + + + i=52 + + false + + i=9335 + + + + + i=46 + + false + + i=11341 + + + + 0 + + + + i=9339 + + Object_1 + + 0 + HighHighToHigh + + + + HighHighToHigh + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=9329 + + + + + i=52 + + false + + i=9331 + + + + + i=46 + + false + + i=11342 + + + + 0 + + + + i=9340 + + Object_1 + + 0 + HighToHighHigh + + + + HighToHighHigh + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9318 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=9331 + + + + + i=52 + + false + + i=9329 + + + + + i=46 + + false + + i=11343 + + + + 0 + + + + i=9341 + + ObjectType_8 + + 0 + ExclusiveLimitAlarmType + + + + ExclusiveLimitAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2955 + + + + + i=47 + + false + + i=9398 + + + + + i=47 + + false + + i=9455 + + + + + i=45 + + false + + i=9482 + + + + + i=45 + + false + + i=9764 + + + + + i=45 + + false + + i=9623 + + + + false + + + + i=9398 + + Variable_2 + + 0 + ActiveState + + + + ActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9341 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + false + + i=9455 + + + + + i=46 + + false + + i=9399 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9399 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9398 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9455 + + Object_1 + + 0 + LimitState + + + + LimitState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9341 + + + + + i=40 + + false + + i=9318 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + true + + i=9398 + + + + + i=47 + + false + + i=9456 + + + + + i=47 + + false + + i=9461 + + + + 0 + + + + i=9456 + + Variable_2 + + 0 + CurrentState + + + + CurrentState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9455 + + + + + i=40 + + false + + i=2760 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=9457 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9457 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9456 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9461 + + Variable_2 + + 0 + LastTransition + + + + LastTransition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9455 + + + + + i=40 + + false + + i=2767 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=9462 + + + + + i=46 + + false + + i=9465 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9462 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9461 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9465 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9461 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9482 + + ObjectType_8 + + 0 + ExclusiveLevelAlarmType + + + + ExclusiveLevelAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9341 + + + + false + + + + i=9623 + + ObjectType_8 + + 0 + ExclusiveRateOfChangeAlarmType + + + + ExclusiveRateOfChangeAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9341 + + + + + i=46 + + false + + i=16899 + + + + false + + + + i=9764 + + ObjectType_8 + + 0 + ExclusiveDeviationAlarmType + + + + ExclusiveDeviationAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9341 + + + + + i=46 + + false + + i=9905 + + + + + i=46 + + false + + i=16817 + + + + false + + + + i=9905 + + Variable_2 + + 0 + SetpointNode + + + + SetpointNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9764 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9906 + + ObjectType_8 + + 0 + NonExclusiveLimitAlarmType + + + + NonExclusiveLimitAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2955 + + + + + i=47 + + false + + i=9963 + + + + + i=47 + + false + + i=10020 + + + + + i=47 + + false + + i=10029 + + + + + i=47 + + false + + i=10038 + + + + + i=47 + + false + + i=10047 + + + + + i=45 + + false + + i=10060 + + + + + i=45 + + false + + i=10368 + + + + + i=45 + + false + + i=10214 + + + + false + + + + i=9963 + + Variable_2 + + 0 + ActiveState + + + + ActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9906 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=9004 + + false + + i=10020 + + + + + i=9004 + + false + + i=10029 + + + + + i=9004 + + false + + i=10038 + + + + + i=9004 + + false + + i=10047 + + + + + i=46 + + false + + i=9964 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=9964 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9963 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10020 + + Variable_2 + + 0 + HighHighState + + + + HighHighState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9906 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9963 + + + + + i=46 + + false + + i=10021 + + + + + i=46 + + false + + i=10025 + + + + + i=46 + + false + + i=10027 + + + + + i=46 + + false + + i=10028 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10021 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10020 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10025 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10020 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10027 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10020 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + HighHigh active + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10028 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10020 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + HighHigh inactive + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10029 + + Variable_2 + + 0 + HighState + + + + HighState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9906 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9963 + + + + + i=46 + + false + + i=10030 + + + + + i=46 + + false + + i=10034 + + + + + i=46 + + false + + i=10036 + + + + + i=46 + + false + + i=10037 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10030 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10029 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10034 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10029 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10036 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10029 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + High active + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10037 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10029 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + High inactive + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10038 + + Variable_2 + + 0 + LowState + + + + LowState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9906 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9963 + + + + + i=46 + + false + + i=10039 + + + + + i=46 + + false + + i=10043 + + + + + i=46 + + false + + i=10045 + + + + + i=46 + + false + + i=10046 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10039 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10038 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10043 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10038 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10045 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10038 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Low active + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10046 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10038 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Low inactive + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10047 + + Variable_2 + + 0 + LowLowState + + + + LowLowState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=9906 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=9004 + + true + + i=9963 + + + + + i=46 + + false + + i=10048 + + + + + i=46 + + false + + i=10052 + + + + + i=46 + + false + + i=10054 + + + + + i=46 + + false + + i=10055 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10048 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10047 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10052 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10047 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10054 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10047 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + LowLow active + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10055 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10047 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + LowLow inactive + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10060 + + ObjectType_8 + + 0 + NonExclusiveLevelAlarmType + + + + NonExclusiveLevelAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9906 + + + + false + + + + i=10214 + + ObjectType_8 + + 0 + NonExclusiveRateOfChangeAlarmType + + + + NonExclusiveRateOfChangeAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9906 + + + + + i=46 + + false + + i=16858 + + + + false + + + + i=10368 + + ObjectType_8 + + 0 + NonExclusiveDeviationAlarmType + + + + NonExclusiveDeviationAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9906 + + + + + i=46 + + false + + i=10522 + + + + + i=46 + + false + + i=16776 + + + + false + + + + i=10522 + + Variable_2 + + 0 + SetpointNode + + + + SetpointNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10368 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=10523 + + ObjectType_8 + + 0 + DiscreteAlarmType + + + + DiscreteAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2915 + + + + + i=45 + + false + + i=10637 + + + + false + + + + i=10637 + + ObjectType_8 + + 0 + OffNormalAlarmType + + + + OffNormalAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=10523 + + + + + i=46 + + false + + i=11158 + + + + + i=45 + + false + + i=11753 + + + + + i=45 + + false + + i=10751 + + + + + i=45 + + false + + i=18347 + + + + + i=45 + + false + + i=18496 + + + + false + + + + i=10751 + + ObjectType_8 + + 0 + TripAlarmType + + + + TripAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=10637 + + + + false + + + + i=11093 + + ObjectType_8 + + 0 + AuditConditionShelvingEventType + + + + AuditConditionShelvingEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + + i=46 + + false + + i=11855 + + + + false + + + + i=11110 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8995 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11111 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8995 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11112 + + Variable_2 + + 0 + ConditionClassId + + + + ConditionClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11113 + + Variable_2 + + 0 + ConditionClassName + + + + ConditionClassName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11120 + + Variable_2 + + 0 + InputNode + + + + InputNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11124 + + Variable_2 + + 0 + HighHighLimit + + + + HighHighLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11125 + + Variable_2 + + 0 + HighLimit + + + + HighLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11126 + + Variable_2 + + 0 + LowLimit + + + + LowLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11127 + + Variable_2 + + 0 + LowLowLimit + + + + LowLowLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11158 + + Variable_2 + + 0 + NormalState + + + + NormalState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10637 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11163 + + ObjectType_8 + + 0 + BaseConditionClassType + + + + BaseConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=11164 + + + + + i=45 + + false + + i=11165 + + + + + i=45 + + false + + i=11166 + + + + + i=45 + + false + + i=17218 + + + + + i=45 + + false + + i=17219 + + + + + i=45 + + false + + i=17220 + + + + + i=45 + + false + + i=18665 + + + + + i=45 + + false + + i=17221 + + + + true + + + + i=11164 + + ObjectType_8 + + 0 + ProcessConditionClassType + + + + ProcessConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=11165 + + ObjectType_8 + + 0 + MaintenanceConditionClassType + + + + MaintenanceConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=11166 + + ObjectType_8 + + 0 + SystemConditionClassType + + + + SystemConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=11168 + + Variable_2 + + 0 + TreatUncertainAsBad + + + + TreatUncertainAsBad + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3059 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11169 + + Variable_2 + + 0 + PercentDataBad + + + + PercentDataBad + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3059 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11170 + + Variable_2 + + 0 + PercentDataGood + + + + PercentDataGood + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3059 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11171 + + Variable_2 + + 0 + UseSlopedExtrapolation + + + + UseSlopedExtrapolation + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=3059 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11172 + + Object_1 + + 0 + AggregateFunctions + + + + AggregateFunctions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2330 + + + + + i=40 + + false + + i=61 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=11187 + + ObjectType_8 + + 0 + AggregateConfigurationType + + + + AggregateConfigurationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=11188 + + + + + i=46 + + false + + i=11189 + + + + + i=46 + + false + + i=11190 + + + + + i=46 + + false + + i=11191 + + + + false + + + + i=11188 + + Variable_2 + + 0 + TreatUncertainAsBad + + + + TreatUncertainAsBad + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11187 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11189 + + Variable_2 + + 0 + PercentDataBad + + + + PercentDataBad + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11187 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11190 + + Variable_2 + + 0 + PercentDataGood + + + + PercentDataGood + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11187 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11191 + + Variable_2 + + 0 + UseSlopedExtrapolation + + + + UseSlopedExtrapolation + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11187 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11192 + + Object_1 + + 0 + HistoryServerCapabilities + + + + HistoryServerCapabilities + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2330 + + + + + i=47 + + true + + i=2268 + + + + + i=46 + + false + + i=11193 + + + + + i=46 + + false + + i=11242 + + + + + i=46 + + false + + i=11273 + + + + + i=46 + + false + + i=11274 + + + + + i=46 + + false + + i=11196 + + + + + i=46 + + false + + i=11197 + + + + + i=46 + + false + + i=11198 + + + + + i=46 + + false + + i=11199 + + + + + i=46 + + false + + i=11200 + + + + + i=46 + + false + + i=11281 + + + + + i=46 + + false + + i=11282 + + + + + i=46 + + false + + i=11283 + + + + + i=46 + + false + + i=11502 + + + + + i=46 + + false + + i=11275 + + + + + i=47 + + false + + i=11201 + + + + + i=46 + + false + + i=19091 + + + + 0 + + + + i=11193 + + Variable_2 + + 0 + AccessHistoryDataCapability + + + + AccessHistoryDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11196 + + Variable_2 + + 0 + InsertDataCapability + + + + InsertDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11197 + + Variable_2 + + 0 + ReplaceDataCapability + + + + ReplaceDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11198 + + Variable_2 + + 0 + UpdateDataCapability + + + + UpdateDataCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11199 + + Variable_2 + + 0 + DeleteRawCapability + + + + DeleteRawCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11200 + + Variable_2 + + 0 + DeleteAtTimeCapability + + + + DeleteAtTimeCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11201 + + Object_1 + + 0 + AggregateFunctions + + + + AggregateFunctions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11192 + + + + + i=40 + + false + + i=61 + + + + 0 + + + + i=11202 + + Object_1 + + 0 + HA Configuration + + + + HA Configuration + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2318 + + + + + i=47 + + false + + i=11203 + + + + + i=46 + + false + + i=11208 + + + + 0 + + + + i=11203 + + Object_1 + + 0 + AggregateConfiguration + + + + AggregateConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11202 + + + + + i=40 + + false + + i=11187 + + + + + i=46 + + false + + i=11204 + + + + + i=46 + + false + + i=11205 + + + + + i=46 + + false + + i=11206 + + + + + i=46 + + false + + i=11207 + + + + 0 + + + + i=11204 + + Variable_2 + + 0 + TreatUncertainAsBad + + + + TreatUncertainAsBad + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11203 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11205 + + Variable_2 + + 0 + PercentDataBad + + + + PercentDataBad + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11203 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11206 + + Variable_2 + + 0 + PercentDataGood + + + + PercentDataGood + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11203 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11207 + + Variable_2 + + 0 + UseSlopedExtrapolation + + + + UseSlopedExtrapolation + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11203 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11208 + + Variable_2 + + 0 + Stepped + + + + Stepped + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11202 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11214 + + Variable_2 + + 0 + Annotations + + + + Annotations + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=891 + + -2 + + 1 + 1 + 0 + false + 0 + + + + i=11215 + + Variable_2 + + 0 + HistoricalEventFilter + + + + HistoricalEventFilter + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=725 + + -2 + + 1 + 1 + 0 + false + 0 + + + + i=11234 + + DataType_64 + + 0 + HistoryUpdateType + + + + HistoryUpdateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=11884 + + + + false + + + + + i=11238 + + VariableType_16 + + 0 + MultiStateValueDiscreteType + + + + MultiStateValueDiscreteType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2372 + + + + + i=46 + + false + + i=11241 + + + + + i=46 + + false + + i=11461 + + + + + i=45 + + false + + i=19077 + + + + + + + + + + i=26 + + -2 + + false + + + + i=11241 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11238 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11242 + + Variable_2 + + 0 + AccessHistoryEventsCapability + + + + AccessHistoryEventsCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11268 + + Variable_2 + + 0 + MaxReturnDataValues + + + + MaxReturnDataValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11269 + + Variable_2 + + 0 + MaxReturnEventValues + + + + MaxReturnEventValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11270 + + Variable_2 + + 0 + InsertAnnotationCapability + + + + InsertAnnotationCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11273 + + Variable_2 + + 0 + MaxReturnDataValues + + + + MaxReturnDataValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11274 + + Variable_2 + + 0 + MaxReturnEventValues + + + + MaxReturnEventValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11275 + + Variable_2 + + 0 + InsertAnnotationCapability + + + + InsertAnnotationCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11278 + + Variable_2 + + 0 + InsertEventCapability + + + + InsertEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11279 + + Variable_2 + + 0 + ReplaceEventCapability + + + + ReplaceEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11280 + + Variable_2 + + 0 + UpdateEventCapability + + + + UpdateEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11281 + + Variable_2 + + 0 + InsertEventCapability + + + + InsertEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11282 + + Variable_2 + + 0 + ReplaceEventCapability + + + + ReplaceEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11283 + + Variable_2 + + 0 + UpdateEventCapability + + + + UpdateEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11285 + + Object_1 + + 0 + TimeAverage2 + + + + TimeAverage2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11286 + + Object_1 + + 0 + Minimum2 + + + + Minimum2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11287 + + Object_1 + + 0 + Maximum2 + + + + Maximum2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11288 + + Object_1 + + 0 + Range2 + + + + Range2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11292 + + Object_1 + + 0 + WorstQuality2 + + + + WorstQuality2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11293 + + DataType_64 + + 0 + PerformUpdateType + + + + PerformUpdateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=11885 + + + + false + + + + + i=11304 + + Object_1 + + 0 + Total2 + + + + Total2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11305 + + Object_1 + + 0 + MinimumActualTime2 + + + + MinimumActualTime2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11306 + + Object_1 + + 0 + MaximumActualTime2 + + + + MaximumActualTime2 + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11307 + + Object_1 + + 0 + DurationInStateZero + + + + DurationInStateZero + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11308 + + Object_1 + + 0 + DurationInStateNonZero + + + + DurationInStateNonZero + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11312 + + Variable_2 + + 0 + CurrentServerId + + + + CurrentServerId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2296 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11313 + + Variable_2 + + 0 + RedundantServerArray + + + + RedundantServerArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2296 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=853 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11314 + + Variable_2 + + 0 + ServerUriArray + + + + ServerUriArray + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2296 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11322 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2935 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11323 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2936 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11324 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2940 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11325 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2942 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11326 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2943 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11327 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2945 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11340 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9337 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11341 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9338 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11342 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9339 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11343 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9340 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11426 + + Object_1 + + 0 + StandardDeviationSample + + + + StandardDeviationSample + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11427 + + Object_1 + + 0 + StandardDeviationPopulation + + + + StandardDeviationPopulation + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11428 + + Object_1 + + 0 + VarianceSample + + + + VarianceSample + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11429 + + Object_1 + + 0 + VariancePopulation + + + + VariancePopulation + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11432 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11433 + + Variable_2 + + 0 + ValueAsText + + + + ValueAsText + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11436 + + ObjectType_8 + + 0 + ProgressEventType + + + + ProgressEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2041 + + + + + i=46 + + false + + i=12502 + + + + + i=46 + + false + + i=12503 + + + + true + + + + i=11446 + + ObjectType_8 + + 0 + SystemStatusChangeEventType + + + + SystemStatusChangeEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2130 + + + + + i=46 + + false + + i=11696 + + + + true + + + + i=11456 + + Variable_2 + + 0 + EffectiveTransitionTime + + + + EffectiveTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2762 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11461 + + Variable_2 + + 0 + ValueAsText + + + + ValueAsText + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11238 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11485 + + Variable_2 + + 0 + SecureChannelId + + + + SecureChannelId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2075 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11487 + + VariableType_16 + + 0 + OptionSetType + + + + OptionSetType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=11488 + + + + + i=46 + + false + + i=11701 + + + + + + + + + + i=24 + + -1 + + false + + + + i=11488 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11487 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11489 + + Method_4 + + 0 + GetMonitoredItems + + + + GetMonitoredItems + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=11489 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=11490 + + + + + i=46 + + false + + i=11491 + + + + true + true + + + + i=11490 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11489 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11491 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11489 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ServerHandles + + i=7 + + 1 + + 0 + + + + + + + i=297 + + + + ClientHandles + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11492 + + Method_4 + + 0 + GetMonitoredItems + + + + GetMonitoredItems + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=11489 + + + + + i=46 + + false + + i=11493 + + + + + i=46 + + false + + i=11494 + + + + true + true + + + + i=11493 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11492 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11494 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11492 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ServerHandles + + i=7 + + 1 + + 0 + + + + + + + i=297 + + + + ClientHandles + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11498 + + Variable_2 + + 0 + MaxStringLength + + + + MaxStringLength + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11499 + + Variable_2 + + 0 + StartOfArchive + + + + StartOfArchive + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11500 + + Variable_2 + + 0 + StartOfOnlineArchive + + + + StartOfOnlineArchive + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11501 + + Variable_2 + + 0 + DeleteEventCapability + + + + DeleteEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11502 + + Variable_2 + + 0 + DeleteEventCapability + + + + DeleteEventCapability + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11505 + + Object_1 + + 0 + StartBound + + + + StartBound + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11506 + + Object_1 + + 0 + EndBound + + + + EndBound + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11507 + + Object_1 + + 0 + DeltaBounds + + + + DeltaBounds + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=2340 + + + + 0 + + + + i=11508 + + Object_1 + + 0 + OptionalPlaceholder + + + + OptionalPlaceholder + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=77 + + + + + i=46 + + false + + i=11509 + + + + 0 + + + + i=11509 + + Variable_2 + + 0 + NamingRule + + + + NamingRule + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11508 + + + + + i=40 + + false + + i=68 + + + + + + 2 + + + + i=120 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11510 + + Object_1 + + 0 + MandatoryPlaceholder + + + + MandatoryPlaceholder + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=77 + + + + + i=46 + + false + + i=11511 + + + + 0 + + + + i=11511 + + Variable_2 + + 0 + NamingRule + + + + NamingRule + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11510 + + + + + i=40 + + false + + i=68 + + + + + + 1 + + + + i=120 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11512 + + Variable_2 + + 0 + MaxArrayLength + + + + MaxArrayLength + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11513 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11527 + + Object_1 + + 0 + Namespaces + + + + Namespaces + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=11645 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=11549 + + Variable_2 + + 0 + MaxArrayLength + + + + MaxArrayLength + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11550 + + Variable_2 + + 0 + MaxStringLength + + + + MaxStringLength + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11551 + + Object_1 + + 0 + OperationLimits + + + + OperationLimits + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2013 + + + + + i=40 + + false + + i=11564 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=11562 + + Variable_2 + + 0 + <VendorCapability> + + + + <VendorCapability> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2013 + + + + + i=40 + + false + + i=2137 + + + + + i=37 + + false + + i=11508 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11564 + + ObjectType_8 + + 0 + OperationLimitsType + + + + OperationLimitsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=46 + + false + + i=11565 + + + + + i=46 + + false + + i=12161 + + + + + i=46 + + false + + i=12162 + + + + + i=46 + + false + + i=11567 + + + + + i=46 + + false + + i=12163 + + + + + i=46 + + false + + i=12164 + + + + + i=46 + + false + + i=11569 + + + + + i=46 + + false + + i=11570 + + + + + i=46 + + false + + i=11571 + + + + + i=46 + + false + + i=11572 + + + + + i=46 + + false + + i=11573 + + + + + i=46 + + false + + i=11574 + + + + false + + + + i=11565 + + Variable_2 + + 0 + MaxNodesPerRead + + + + MaxNodesPerRead + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11567 + + Variable_2 + + 0 + MaxNodesPerWrite + + + + MaxNodesPerWrite + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11569 + + Variable_2 + + 0 + MaxNodesPerMethodCall + + + + MaxNodesPerMethodCall + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11570 + + Variable_2 + + 0 + MaxNodesPerBrowse + + + + MaxNodesPerBrowse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11571 + + Variable_2 + + 0 + MaxNodesPerRegisterNodes + + + + MaxNodesPerRegisterNodes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11572 + + Variable_2 + + 0 + MaxNodesPerTranslateBrowsePathsToNodeIds + + + + MaxNodesPerTranslateBrowsePathsToNodeIds + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11573 + + Variable_2 + + 0 + MaxNodesPerNodeManagement + + + + MaxNodesPerNodeManagement + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11574 + + Variable_2 + + 0 + MaxMonitoredItemsPerCall + + + + MaxMonitoredItemsPerCall + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11575 + + ObjectType_8 + + 0 + FileType + + + + FileType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=11576 + + + + + i=46 + + false + + i=12686 + + + + + i=46 + + false + + i=12687 + + + + + i=46 + + false + + i=11579 + + + + + i=46 + + false + + i=13341 + + + + + i=47 + + false + + i=11580 + + + + + i=47 + + false + + i=11583 + + + + + i=47 + + false + + i=11585 + + + + + i=47 + + false + + i=11588 + + + + + i=47 + + false + + i=11590 + + + + + i=47 + + false + + i=11593 + + + + + i=45 + + false + + i=11595 + + + + + i=45 + + false + + i=12522 + + + + false + + + + i=11576 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11579 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11580 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11575 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11581 + + + + + i=46 + + false + + i=11582 + + + + true + true + + + + i=11581 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11580 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11582 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11580 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11583 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11575 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11584 + + + + true + true + + + + i=11584 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11583 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11585 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11575 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11586 + + + + + i=46 + + false + + i=11587 + + + + true + true + + + + i=11586 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11585 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11587 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11585 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11588 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11575 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11589 + + + + true + true + + + + i=11589 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11588 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11590 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11575 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11591 + + + + + i=46 + + false + + i=11592 + + + + true + true + + + + i=11591 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11590 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11592 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11590 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11593 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11575 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11594 + + + + true + true + + + + i=11594 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11593 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11595 + + ObjectType_8 + + 0 + AddressSpaceFileType + + + + AddressSpaceFileType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11575 + + + + + i=47 + + false + + i=11615 + + + + false + + + + i=11615 + + Method_4 + + 0 + ExportNamespace + + + + ExportNamespace + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11595 + + + + + i=40 + + false + + i=11615 + + + + + i=37 + + false + + i=80 + + + + true + true + + + + i=11616 + + ObjectType_8 + + 0 + NamespaceMetadataType + + + + NamespaceMetadataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=11617 + + + + + i=46 + + false + + i=11618 + + + + + i=46 + + false + + i=11619 + + + + + i=46 + + false + + i=11620 + + + + + i=46 + + false + + i=11621 + + + + + i=46 + + false + + i=11622 + + + + + i=46 + + false + + i=11623 + + + + + i=47 + + false + + i=11624 + + + + + i=46 + + false + + i=16137 + + + + + i=46 + + false + + i=16138 + + + + + i=46 + + false + + i=16139 + + + + false + + + + i=11617 + + Variable_2 + + 0 + NamespaceUri + + + + NamespaceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11618 + + Variable_2 + + 0 + NamespaceVersion + + + + NamespaceVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11619 + + Variable_2 + + 0 + NamespacePublicationDate + + + + NamespacePublicationDate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11620 + + Variable_2 + + 0 + IsNamespaceSubset + + + + IsNamespaceSubset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11621 + + Variable_2 + + 0 + StaticNodeIdTypes + + + + StaticNodeIdTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=256 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11622 + + Variable_2 + + 0 + StaticNumericNodeIdRange + + + + StaticNumericNodeIdRange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=291 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11623 + + Variable_2 + + 0 + StaticStringNodeIdPattern + + + + StaticStringNodeIdPattern + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11624 + + Object_1 + + 0 + NamespaceFile + + + + NamespaceFile + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11616 + + + + + i=40 + + false + + i=11595 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=11625 + + + + + i=46 + + false + + i=12690 + + + + + i=46 + + false + + i=12691 + + + + + i=46 + + false + + i=11628 + + + + + i=47 + + false + + i=11629 + + + + + i=47 + + false + + i=11632 + + + + + i=47 + + false + + i=11634 + + + + + i=47 + + false + + i=11637 + + + + + i=47 + + false + + i=11639 + + + + + i=47 + + false + + i=11642 + + + + 0 + + + + i=11625 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11628 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11629 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11624 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11630 + + + + + i=46 + + false + + i=11631 + + + + true + true + + + + i=11630 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11629 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11631 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11629 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11632 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11624 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11633 + + + + true + true + + + + i=11633 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11632 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11634 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11624 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11635 + + + + + i=46 + + false + + i=11636 + + + + true + true + + + + i=11635 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11634 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11636 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11634 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11637 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11624 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11638 + + + + true + true + + + + i=11638 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11637 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11639 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11624 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11640 + + + + + i=46 + + false + + i=11641 + + + + true + true + + + + i=11640 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11639 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11641 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11639 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11642 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11624 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=11643 + + + + true + true + + + + i=11643 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11642 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11645 + + ObjectType_8 + + 0 + NamespacesType + + + + NamespacesType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=11646 + + + + false + + + + i=11646 + + Object_1 + + 0 + <NamespaceIdentifier> + + + + <NamespaceIdentifier> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=11645 + + + + + i=40 + + false + + i=11616 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=11647 + + + + + i=46 + + false + + i=11648 + + + + + i=46 + + false + + i=11649 + + + + + i=46 + + false + + i=11650 + + + + + i=46 + + false + + i=11651 + + + + + i=46 + + false + + i=11652 + + + + + i=46 + + false + + i=11653 + + + + 0 + + + + i=11647 + + Variable_2 + + 0 + NamespaceUri + + + + NamespaceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11648 + + Variable_2 + + 0 + NamespaceVersion + + + + NamespaceVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11649 + + Variable_2 + + 0 + NamespacePublicationDate + + + + NamespacePublicationDate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11650 + + Variable_2 + + 0 + IsNamespaceSubset + + + + IsNamespaceSubset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11651 + + Variable_2 + + 0 + StaticNodeIdTypes + + + + StaticNodeIdTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=256 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11652 + + Variable_2 + + 0 + StaticNumericNodeIdRange + + + + StaticNumericNodeIdRange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=291 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11653 + + Variable_2 + + 0 + StaticStringNodeIdPattern + + + + StaticStringNodeIdPattern + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11696 + + Variable_2 + + 0 + SystemState + + + + SystemState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11446 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=852 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11697 + + Variable_2 + + 0 + SampledMonitoredItemsCount + + + + SampledMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2165 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11698 + + Variable_2 + + 0 + MaxSampledMonitoredItemsCount + + + + MaxSampledMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2165 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11699 + + Variable_2 + + 0 + DisabledMonitoredItemsSamplingCount + + + + DisabledMonitoredItemsSamplingCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2165 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11701 + + Variable_2 + + 0 + BitMask + + + + BitMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11487 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=1 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11702 + + Variable_2 + + 0 + MaxArrayLength + + + + MaxArrayLength + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11703 + + Variable_2 + + 0 + MaxStringLength + + + + MaxStringLength + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11704 + + Object_1 + + 0 + OperationLimits + + + + OperationLimits + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2268 + + + + + i=40 + + false + + i=11564 + + + + + i=46 + + false + + i=11705 + + + + + i=46 + + false + + i=12165 + + + + + i=46 + + false + + i=12166 + + + + + i=46 + + false + + i=11707 + + + + + i=46 + + false + + i=12167 + + + + + i=46 + + false + + i=12168 + + + + + i=46 + + false + + i=11709 + + + + + i=46 + + false + + i=11710 + + + + + i=46 + + false + + i=11711 + + + + + i=46 + + false + + i=11712 + + + + + i=46 + + false + + i=11713 + + + + + i=46 + + false + + i=11714 + + + + 0 + + + + i=11705 + + Variable_2 + + 0 + MaxNodesPerRead + + + + MaxNodesPerRead + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11707 + + Variable_2 + + 0 + MaxNodesPerWrite + + + + MaxNodesPerWrite + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11709 + + Variable_2 + + 0 + MaxNodesPerMethodCall + + + + MaxNodesPerMethodCall + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11710 + + Variable_2 + + 0 + MaxNodesPerBrowse + + + + MaxNodesPerBrowse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11711 + + Variable_2 + + 0 + MaxNodesPerRegisterNodes + + + + MaxNodesPerRegisterNodes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11712 + + Variable_2 + + 0 + MaxNodesPerTranslateBrowsePathsToNodeIds + + + + MaxNodesPerTranslateBrowsePathsToNodeIds + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11713 + + Variable_2 + + 0 + MaxNodesPerNodeManagement + + + + MaxNodesPerNodeManagement + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11714 + + Variable_2 + + 0 + MaxMonitoredItemsPerCall + + + + MaxMonitoredItemsPerCall + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11715 + + Object_1 + + 0 + Namespaces + + + + Namespaces + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=11645 + + + + 0 + + + + i=11737 + + DataType_64 + + 0 + BitFieldMaskDataType + + + + BitFieldMaskDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=9 + + + + false + + + + + i=11753 + + ObjectType_8 + + 0 + SystemOffNormalAlarmType + + + + SystemOffNormalAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=10637 + + + + + i=45 + + false + + i=13225 + + + + + i=45 + + false + + i=19297 + + + + true + + + + i=11851 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2829 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11852 + + Variable_2 + + 0 + SelectedResponse + + + + SelectedResponse + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8927 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11853 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8944 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11854 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8961 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11855 + + Variable_2 + + 0 + ShelvingTime + + + + ShelvingTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11856 + + ObjectType_8 + + 0 + AuditProgramTransitionEventType + + + + AuditProgramTransitionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2315 + + + + + i=46 + + false + + i=11875 + + + + true + + + + i=11875 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11856 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11876 + + Object_1 + + 0 + AggregateFunctions + + + + AggregateFunctions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2318 + + + + + i=40 + + false + + i=61 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=11878 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=257 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=7616 + + + + 0 + + + Unspecified + + + + + + + i=7616 + + + + 1 + + + Object + + + + + + + i=7616 + + + + 2 + + + Variable + + + + + + + i=7616 + + + + 4 + + + Method + + + + + + + i=7616 + + + + 8 + + + ObjectType + + + + + + + i=7616 + + + + 16 + + + VariableType + + + + + + + i=7616 + + + + 32 + + + ReferenceType + + + + + + + i=7616 + + + + 64 + + + DataType + + + + + + + i=7616 + + + + 128 + + + View + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11881 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=348 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=7616 + + + + 0 + + + None + + + + + + + i=7616 + + + + 1 + + + AccessLevel + + + + + + + i=7616 + + + + 2 + + + ArrayDimensions + + + + + + + i=7616 + + + + 4 + + + BrowseName + + + + + + + i=7616 + + + + 8 + + + ContainsNoLoops + + + + + + + i=7616 + + + + 16 + + + DataType + + + + + + + i=7616 + + + + 32 + + + Description + + + + + + + i=7616 + + + + 64 + + + DisplayName + + + + + + + i=7616 + + + + 128 + + + EventNotifier + + + + + + + i=7616 + + + + 256 + + + Executable + + + + + + + i=7616 + + + + 512 + + + Historizing + + + + + + + i=7616 + + + + 1024 + + + InverseName + + + + + + + i=7616 + + + + 2048 + + + IsAbstract + + + + + + + i=7616 + + + + 4096 + + + MinimumSamplingInterval + + + + + + + i=7616 + + + + 8192 + + + NodeClass + + + + + + + i=7616 + + + + 16384 + + + NodeId + + + + + + + i=7616 + + + + 32768 + + + Symmetric + + + + + + + i=7616 + + + + 65536 + + + UserAccessLevel + + + + + + + i=7616 + + + + 131072 + + + UserExecutable + + + + + + + i=7616 + + + + 262144 + + + UserWriteMask + + + + + + + i=7616 + + + + 524288 + + + ValueRank + + + + + + + i=7616 + + + + 1048576 + + + WriteMask + + + + + + + i=7616 + + + + 2097152 + + + Value + + + + + + + i=7616 + + + + 4194304 + + + DataTypeDefinition + + + + + + + i=7616 + + + + 8388608 + + + RolePermissions + + + + + + + i=7616 + + + + 16777216 + + + AccessRestrictions + + + + + + + i=7616 + + + + 33554431 + + + All + + + + + + + i=7616 + + + + 26501220 + + + BaseNode + + + + + + + i=7616 + + + + 26501348 + + + Object + + + + + + + i=7616 + + + + 26503268 + + + ObjectType + + + + + + + i=7616 + + + + 26571383 + + + Variable + + + + + + + i=7616 + + + + 28600438 + + + VariableType + + + + + + + i=7616 + + + + 26632548 + + + Method + + + + + + + i=7616 + + + + 26537060 + + + ReferenceType + + + + + + + i=7616 + + + + 26501356 + + + View + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11884 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11234 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=7616 + + + + 1 + + + Insert + + + + + + + i=7616 + + + + 2 + + + Replace + + + + + + + i=7616 + + + + 3 + + + Update + + + + + + + i=7616 + + + + 4 + + + Delete + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11885 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11293 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=7616 + + + + 1 + + + Insert + + + + + + + i=7616 + + + + 2 + + + Replace + + + + + + + i=7616 + + + + 3 + + + Update + + + + + + + i=7616 + + + + 4 + + + Remove + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11891 + + Variable_2 + + 0 + UnauthorizedRequestCount + + + + UnauthorizedRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2030 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11892 + + Variable_2 + + 0 + UnauthorizedRequestCount + + + + UnauthorizedRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2197 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11939 + + DataType_64 + + 0 + OpenFileMode + + + + OpenFileMode + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=11940 + + + + false + + + + + i=11940 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11939 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=7616 + + + + 1 + + + Read + + + + + + + i=7616 + + + + 2 + + + Write + + + + + + + i=7616 + + + + 4 + + + EraseExisting + + + + + + + i=7616 + + + + 8 + + + Append + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11943 + + DataType_64 + + 0 + EndpointUrlListDataType + + + + EndpointUrlListDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=11957 + + + + + i=38 + + false + + i=11949 + + + + + i=38 + + false + + i=15363 + + + + false + + + + + i=11944 + + DataType_64 + + 0 + NetworkGroupDataType + + + + NetworkGroupDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=11958 + + + + + i=38 + + false + + i=11950 + + + + + i=38 + + false + + i=15364 + + + + false + + + + + i=11945 + + ObjectType_8 + + 0 + NonTransparentNetworkRedundancyType + + + + NonTransparentNetworkRedundancyType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2039 + + + + + i=46 + + false + + i=11948 + + + + false + + + + i=11948 + + Variable_2 + + 0 + ServerNetworkGroups + + + + ServerNetworkGroups + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11945 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=11944 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=11949 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=11943 + + + + + i=39 + + false + + i=11951 + + + + 0 + + + + i=11950 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=11944 + + + + + i=39 + + false + + i=11954 + + + + 0 + + + + i=11951 + + Variable_2 + + 0 + EndpointUrlListDataType + + + + EndpointUrlListDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EndpointUrlListDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11954 + + Variable_2 + + 0 + NetworkGroupDataType + + + + NetworkGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='NetworkGroupDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11957 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=11943 + + + + + i=39 + + false + + i=11959 + + + + 0 + + + + i=11958 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=11944 + + + + + i=39 + + false + + i=11962 + + + + 0 + + + + i=11959 + + Variable_2 + + 0 + EndpointUrlListDataType + + + + EndpointUrlListDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EndpointUrlListDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=11962 + + Variable_2 + + 0 + NetworkGroupDataType + + + + NetworkGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + NetworkGroupDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12021 + + VariableType_16 + + 0 + ArrayItemType + + + + ArrayItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2365 + + + + + i=46 + + false + + i=12024 + + + + + i=46 + + false + + i=12025 + + + + + i=46 + + false + + i=12026 + + + + + i=46 + + false + + i=12027 + + + + + i=46 + + false + + i=12028 + + + + + i=45 + + false + + i=12029 + + + + + i=45 + + false + + i=12038 + + + + + i=45 + + false + + i=12047 + + + + + i=45 + + false + + i=12057 + + + + + i=45 + + false + + i=12068 + + + + + + + + + + i=24 + + 0 + + true + + + + i=12024 + + Variable_2 + + 0 + InstrumentRange + + + + InstrumentRange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12021 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=884 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12025 + + Variable_2 + + 0 + EURange + + + + EURange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12021 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=884 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12026 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12021 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12027 + + Variable_2 + + 0 + Title + + + + Title + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12021 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12028 + + Variable_2 + + 0 + AxisScaleType + + + + AxisScaleType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12021 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12077 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12029 + + VariableType_16 + + 0 + YArrayItemType + + + + YArrayItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12021 + + + + + i=46 + + false + + i=12037 + + + + + + + + + + i=24 + + 1 + + 0 + + false + + + + i=12037 + + Variable_2 + + 0 + XAxisDefinition + + + + XAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12029 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12038 + + VariableType_16 + + 0 + XYArrayItemType + + + + XYArrayItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12021 + + + + + i=46 + + false + + i=12046 + + + + + + + + + + i=12080 + + 1 + + 0 + + false + + + + i=12046 + + Variable_2 + + 0 + XAxisDefinition + + + + XAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12038 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12047 + + VariableType_16 + + 0 + ImageItemType + + + + ImageItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12021 + + + + + i=46 + + false + + i=12055 + + + + + i=46 + + false + + i=12056 + + + + + + + + + + i=24 + + 2 + + 0 + 0 + + false + + + + i=12055 + + Variable_2 + + 0 + XAxisDefinition + + + + XAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12047 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12056 + + Variable_2 + + 0 + YAxisDefinition + + + + YAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12047 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12057 + + VariableType_16 + + 0 + CubeItemType + + + + CubeItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12021 + + + + + i=46 + + false + + i=12065 + + + + + i=46 + + false + + i=12066 + + + + + i=46 + + false + + i=12067 + + + + + + + + + + i=24 + + 3 + + 0 + 0 + 0 + + false + + + + i=12065 + + Variable_2 + + 0 + XAxisDefinition + + + + XAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12057 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12066 + + Variable_2 + + 0 + YAxisDefinition + + + + YAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12057 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12067 + + Variable_2 + + 0 + ZAxisDefinition + + + + ZAxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12057 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12068 + + VariableType_16 + + 0 + NDimensionArrayItemType + + + + NDimensionArrayItemType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12021 + + + + + i=46 + + false + + i=12076 + + + + + + + + + + i=24 + + 0 + + false + + + + i=12076 + + Variable_2 + + 0 + AxisDefinition + + + + AxisDefinition + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12068 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12079 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12077 + + DataType_64 + + 0 + AxisScaleEnumeration + + + + AxisScaleEnumeration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=12078 + + + + false + + + + + i=12078 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12077 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Linear + + + + Log + + + + Ln + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12079 + + DataType_64 + + 0 + AxisInformation + + + + AxisInformation + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12089 + + + + + i=38 + + false + + i=12081 + + + + + i=38 + + false + + i=15379 + + + + false + + + + + i=12080 + + DataType_64 + + 0 + XVType + + + + XVType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12090 + + + + + i=38 + + false + + i=12082 + + + + + i=38 + + false + + i=15380 + + + + false + + + + + i=12081 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12079 + + + + + i=39 + + false + + i=12083 + + + + 0 + + + + i=12082 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12080 + + + + + i=39 + + false + + i=12086 + + + + 0 + + + + i=12083 + + Variable_2 + + 0 + AxisInformation + + + + AxisInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AxisInformation'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12086 + + Variable_2 + + 0 + XVType + + + + XVType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='XVType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12089 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12079 + + + + + i=39 + + false + + i=12091 + + + + 0 + + + + i=12090 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12080 + + + + + i=39 + + false + + i=12094 + + + + 0 + + + + i=12091 + + Variable_2 + + 0 + AxisInformation + + + + AxisInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AxisInformation + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12094 + + Variable_2 + + 0 + XVType + + + + XVType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + XVType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12097 + + Object_1 + + 0 + <ClientName> + + + + <ClientName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2026 + + + + + i=40 + + false + + i=2029 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=12098 + + + + + i=47 + + false + + i=12142 + + + + + i=47 + + false + + i=12152 + + + + 0 + + + + i=12098 + + Variable_2 + + 0 + SessionDiagnostics + + + + SessionDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12097 + + + + + i=40 + + false + + i=2197 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=12099 + + + + + i=47 + + false + + i=12100 + + + + + i=47 + + false + + i=12101 + + + + + i=47 + + false + + i=12102 + + + + + i=47 + + false + + i=12103 + + + + + i=47 + + false + + i=12104 + + + + + i=47 + + false + + i=12105 + + + + + i=47 + + false + + i=12106 + + + + + i=47 + + false + + i=12107 + + + + + i=47 + + false + + i=12108 + + + + + i=47 + + false + + i=12109 + + + + + i=47 + + false + + i=12110 + + + + + i=47 + + false + + i=12111 + + + + + i=47 + + false + + i=12112 + + + + + i=47 + + false + + i=12113 + + + + + i=47 + + false + + i=12114 + + + + + i=47 + + false + + i=12115 + + + + + i=47 + + false + + i=12116 + + + + + i=47 + + false + + i=12117 + + + + + i=47 + + false + + i=12118 + + + + + i=47 + + false + + i=12119 + + + + + i=47 + + false + + i=12120 + + + + + i=47 + + false + + i=12121 + + + + + i=47 + + false + + i=12122 + + + + + i=47 + + false + + i=12123 + + + + + i=47 + + false + + i=12124 + + + + + i=47 + + false + + i=12125 + + + + + i=47 + + false + + i=12126 + + + + + i=47 + + false + + i=12127 + + + + + i=47 + + false + + i=12128 + + + + + i=47 + + false + + i=12129 + + + + + i=47 + + false + + i=12130 + + + + + i=47 + + false + + i=12131 + + + + + i=47 + + false + + i=12132 + + + + + i=47 + + false + + i=12133 + + + + + i=47 + + false + + i=12134 + + + + + i=47 + + false + + i=12135 + + + + + i=47 + + false + + i=12136 + + + + + i=47 + + false + + i=12137 + + + + + i=47 + + false + + i=12138 + + + + + i=47 + + false + + i=12139 + + + + + i=47 + + false + + i=12140 + + + + + i=47 + + false + + i=12141 + + + + + + + + + + i=865 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12099 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12100 + + Variable_2 + + 0 + SessionName + + + + SessionName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12101 + + Variable_2 + + 0 + ClientDescription + + + + ClientDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=308 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12102 + + Variable_2 + + 0 + ServerUri + + + + ServerUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12103 + + Variable_2 + + 0 + EndpointUrl + + + + EndpointUrl + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12104 + + Variable_2 + + 0 + LocaleIds + + + + LocaleIds + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12105 + + Variable_2 + + 0 + ActualSessionTimeout + + + + ActualSessionTimeout + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12106 + + Variable_2 + + 0 + MaxResponseMessageSize + + + + MaxResponseMessageSize + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12107 + + Variable_2 + + 0 + ClientConnectionTime + + + + ClientConnectionTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12108 + + Variable_2 + + 0 + ClientLastContactTime + + + + ClientLastContactTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12109 + + Variable_2 + + 0 + CurrentSubscriptionsCount + + + + CurrentSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12110 + + Variable_2 + + 0 + CurrentMonitoredItemsCount + + + + CurrentMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12111 + + Variable_2 + + 0 + CurrentPublishRequestsInQueue + + + + CurrentPublishRequestsInQueue + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12112 + + Variable_2 + + 0 + TotalRequestCount + + + + TotalRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12113 + + Variable_2 + + 0 + UnauthorizedRequestCount + + + + UnauthorizedRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12114 + + Variable_2 + + 0 + ReadCount + + + + ReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12115 + + Variable_2 + + 0 + HistoryReadCount + + + + HistoryReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12116 + + Variable_2 + + 0 + WriteCount + + + + WriteCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12117 + + Variable_2 + + 0 + HistoryUpdateCount + + + + HistoryUpdateCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12118 + + Variable_2 + + 0 + CallCount + + + + CallCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12119 + + Variable_2 + + 0 + CreateMonitoredItemsCount + + + + CreateMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12120 + + Variable_2 + + 0 + ModifyMonitoredItemsCount + + + + ModifyMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12121 + + Variable_2 + + 0 + SetMonitoringModeCount + + + + SetMonitoringModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12122 + + Variable_2 + + 0 + SetTriggeringCount + + + + SetTriggeringCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12123 + + Variable_2 + + 0 + DeleteMonitoredItemsCount + + + + DeleteMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12124 + + Variable_2 + + 0 + CreateSubscriptionCount + + + + CreateSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12125 + + Variable_2 + + 0 + ModifySubscriptionCount + + + + ModifySubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12126 + + Variable_2 + + 0 + SetPublishingModeCount + + + + SetPublishingModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12127 + + Variable_2 + + 0 + PublishCount + + + + PublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12128 + + Variable_2 + + 0 + RepublishCount + + + + RepublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12129 + + Variable_2 + + 0 + TransferSubscriptionsCount + + + + TransferSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12130 + + Variable_2 + + 0 + DeleteSubscriptionsCount + + + + DeleteSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12131 + + Variable_2 + + 0 + AddNodesCount + + + + AddNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12132 + + Variable_2 + + 0 + AddReferencesCount + + + + AddReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12133 + + Variable_2 + + 0 + DeleteNodesCount + + + + DeleteNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12134 + + Variable_2 + + 0 + DeleteReferencesCount + + + + DeleteReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12135 + + Variable_2 + + 0 + BrowseCount + + + + BrowseCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12136 + + Variable_2 + + 0 + BrowseNextCount + + + + BrowseNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12137 + + Variable_2 + + 0 + TranslateBrowsePathsToNodeIdsCount + + + + TranslateBrowsePathsToNodeIdsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12138 + + Variable_2 + + 0 + QueryFirstCount + + + + QueryFirstCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12139 + + Variable_2 + + 0 + QueryNextCount + + + + QueryNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12140 + + Variable_2 + + 0 + RegisterNodesCount + + + + RegisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12141 + + Variable_2 + + 0 + UnregisterNodesCount + + + + UnregisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12098 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12142 + + Variable_2 + + 0 + SessionSecurityDiagnostics + + + + SessionSecurityDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12097 + + + + + i=40 + + false + + i=2244 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=12143 + + + + + i=47 + + false + + i=12144 + + + + + i=47 + + false + + i=12145 + + + + + i=47 + + false + + i=12146 + + + + + i=47 + + false + + i=12147 + + + + + i=47 + + false + + i=12148 + + + + + i=47 + + false + + i=12149 + + + + + i=47 + + false + + i=12150 + + + + + i=47 + + false + + i=12151 + + + + + + + + + + i=868 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12143 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12144 + + Variable_2 + + 0 + ClientUserIdOfSession + + + + ClientUserIdOfSession + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12145 + + Variable_2 + + 0 + ClientUserIdHistory + + + + ClientUserIdHistory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12146 + + Variable_2 + + 0 + AuthenticationMechanism + + + + AuthenticationMechanism + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12147 + + Variable_2 + + 0 + Encoding + + + + Encoding + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12148 + + Variable_2 + + 0 + TransportProtocol + + + + TransportProtocol + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12149 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12150 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12151 + + Variable_2 + + 0 + ClientCertificate + + + + ClientCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12142 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12152 + + Variable_2 + + 0 + SubscriptionDiagnosticsArray + + + + SubscriptionDiagnosticsArray + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12097 + + + + + i=40 + + false + + i=2171 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=874 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12161 + + Variable_2 + + 0 + MaxNodesPerHistoryReadData + + + + MaxNodesPerHistoryReadData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12162 + + Variable_2 + + 0 + MaxNodesPerHistoryReadEvents + + + + MaxNodesPerHistoryReadEvents + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12163 + + Variable_2 + + 0 + MaxNodesPerHistoryUpdateData + + + + MaxNodesPerHistoryUpdateData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12164 + + Variable_2 + + 0 + MaxNodesPerHistoryUpdateEvents + + + + MaxNodesPerHistoryUpdateEvents + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11564 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12165 + + Variable_2 + + 0 + MaxNodesPerHistoryReadData + + + + MaxNodesPerHistoryReadData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12166 + + Variable_2 + + 0 + MaxNodesPerHistoryReadEvents + + + + MaxNodesPerHistoryReadEvents + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12167 + + Variable_2 + + 0 + MaxNodesPerHistoryUpdateData + + + + MaxNodesPerHistoryUpdateData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12168 + + Variable_2 + + 0 + MaxNodesPerHistoryUpdateEvents + + + + MaxNodesPerHistoryUpdateEvents + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11704 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12169 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=120 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12170 + + Variable_2 + + 0 + ViewVersion + + + + ViewVersion + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12171 + + DataType_64 + + 0 + ComplexNumberType + + + + ComplexNumberType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12181 + + + + + i=38 + + false + + i=12173 + + + + + i=38 + + false + + i=15377 + + + + false + + + + + i=12172 + + DataType_64 + + 0 + DoubleComplexNumberType + + + + DoubleComplexNumberType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12182 + + + + + i=38 + + false + + i=12174 + + + + + i=38 + + false + + i=15378 + + + + false + + + + + i=12173 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12171 + + + + + i=39 + + false + + i=12175 + + + + 0 + + + + i=12174 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12172 + + + + + i=39 + + false + + i=12178 + + + + 0 + + + + i=12175 + + Variable_2 + + 0 + ComplexNumberType + + + + ComplexNumberType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ComplexNumberType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12178 + + Variable_2 + + 0 + DoubleComplexNumberType + + + + DoubleComplexNumberType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DoubleComplexNumberType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12181 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12171 + + + + + i=39 + + false + + i=12183 + + + + 0 + + + + i=12182 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12172 + + + + + i=39 + + false + + i=12186 + + + + 0 + + + + i=12183 + + Variable_2 + + 0 + ComplexNumberType + + + + ComplexNumberType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ComplexNumberType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12186 + + Variable_2 + + 0 + DoubleComplexNumberType + + + + DoubleComplexNumberType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DoubleComplexNumberType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12189 + + DataType_64 + + 0 + ServerOnNetwork + + + + ServerOnNetwork + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12207 + + + + + i=38 + + false + + i=12195 + + + + + i=38 + + false + + i=15095 + + + + false + + + + + i=12195 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12189 + + + + + i=39 + + false + + i=12201 + + + + 0 + + + + i=12201 + + Variable_2 + + 0 + ServerOnNetwork + + + + ServerOnNetwork + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ServerOnNetwork'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12207 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12189 + + + + + i=39 + + false + + i=12213 + + + + 0 + + + + i=12213 + + Variable_2 + + 0 + ServerOnNetwork + + + + ServerOnNetwork + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ServerOnNetwork + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12502 + + Variable_2 + + 0 + Context + + + + Context + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11436 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12503 + + Variable_2 + + 0 + Progress + + + + Progress + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11436 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12522 + + ObjectType_8 + + 0 + TrustListType + + + + TrustListType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11575 + + + + + i=46 + + false + + i=12542 + + + + + i=46 + + false + + i=19296 + + + + + i=47 + + false + + i=12543 + + + + + i=47 + + false + + i=12546 + + + + + i=47 + + false + + i=12548 + + + + + i=47 + + false + + i=12550 + + + + false + + + + i=12542 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12522 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12543 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12522 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=12544 + + + + + i=46 + + false + + i=12545 + + + + true + true + + + + i=12544 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12543 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12545 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12543 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12546 + + Method_4 + + 0 + CloseAndUpdate + + + + CloseAndUpdate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12522 + + + + + i=40 + + false + + i=12546 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=12705 + + + + + i=46 + + false + + i=12547 + + + + true + true + + + + i=12547 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12546 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12548 + + Method_4 + + 0 + AddCertificate + + + + AddCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12522 + + + + + i=40 + + false + + i=12548 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=12549 + + + + true + true + + + + i=12549 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12548 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12550 + + Method_4 + + 0 + RemoveCertificate + + + + RemoveCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12522 + + + + + i=40 + + false + + i=12550 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=12551 + + + + true + true + + + + i=12551 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12550 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12552 + + DataType_64 + + 0 + TrustListMasks + + + + TrustListMasks + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=12553 + + + + false + + + + + i=12553 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12552 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=7616 + + + + 0 + + + None + + + + + + + i=7616 + + + + 1 + + + TrustedCertificates + + + + + + + i=7616 + + + + 2 + + + TrustedCrls + + + + + + + i=7616 + + + + 4 + + + IssuerCertificates + + + + + + + i=7616 + + + + 8 + + + IssuerCrls + + + + + + + i=7616 + + + + 15 + + + All + + + + + + + + + i=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12554 + + DataType_64 + + 0 + TrustListDataType + + + + TrustListDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12680 + + + + + i=38 + + false + + i=12676 + + + + + i=38 + + false + + i=15044 + + + + false + + + + + i=12555 + + ObjectType_8 + + 0 + CertificateGroupType + + + + CertificateGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=13599 + + + + + i=46 + + false + + i=13631 + + + + + i=47 + + false + + i=19450 + + + + + i=47 + + false + + i=20143 + + + + false + + + + i=12556 + + ObjectType_8 + + 0 + CertificateType + + + + CertificateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=12557 + + + + + i=45 + + false + + i=12558 + + + + + i=45 + + false + + i=15181 + + + + true + + + + i=12557 + + ObjectType_8 + + 0 + ApplicationCertificateType + + + + ApplicationCertificateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12556 + + + + + i=45 + + false + + i=12559 + + + + + i=45 + + false + + i=12560 + + + + true + + + + i=12558 + + ObjectType_8 + + 0 + HttpsCertificateType + + + + HttpsCertificateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12556 + + + + false + + + + i=12559 + + ObjectType_8 + + 0 + RsaMinApplicationCertificateType + + + + RsaMinApplicationCertificateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12557 + + + + false + + + + i=12560 + + ObjectType_8 + + 0 + RsaSha256ApplicationCertificateType + + + + RsaSha256ApplicationCertificateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12557 + + + + false + + + + i=12561 + + ObjectType_8 + + 0 + TrustListUpdatedAuditEventType + + + + TrustListUpdatedAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2127 + + + + true + + + + i=12581 + + ObjectType_8 + + 0 + ServerConfigurationType + + + + ServerConfigurationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=13950 + + + + + i=46 + + false + + i=12708 + + + + + i=46 + + false + + i=12583 + + + + + i=46 + + false + + i=12584 + + + + + i=46 + + false + + i=12585 + + + + + i=47 + + false + + i=12616 + + + + + i=47 + + false + + i=12734 + + + + + i=47 + + false + + i=12731 + + + + + i=47 + + false + + i=12775 + + + + false + + + + i=12583 + + Variable_2 + + 0 + SupportedPrivateKeyFormats + + + + SupportedPrivateKeyFormats + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12581 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12584 + + Variable_2 + + 0 + MaxTrustListSize + + + + MaxTrustListSize + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12581 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12585 + + Variable_2 + + 0 + MulticastDnsEnabled + + + + MulticastDnsEnabled + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12581 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12616 + + Method_4 + + 0 + UpdateCertificate + + + + UpdateCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12581 + + + + + i=40 + + false + + i=12616 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=12617 + + + + + i=46 + + false + + i=12618 + + + + true + true + + + + i=12617 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12618 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12620 + + ObjectType_8 + + 0 + CertificateUpdatedAuditEventType + + + + CertificateUpdatedAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2127 + + + + + i=46 + + false + + i=13735 + + + + + i=46 + + false + + i=13736 + + + + true + + + + i=12637 + + Object_1 + + 0 + ServerConfiguration + + + + ServerConfiguration + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=12581 + + + + + i=47 + + true + + i=2253 + + + + + i=47 + + false + + i=14053 + + + + + i=46 + + false + + i=12710 + + + + + i=46 + + false + + i=12639 + + + + + i=46 + + false + + i=12640 + + + + + i=46 + + false + + i=12641 + + + + + i=47 + + false + + i=13737 + + + + + i=47 + + false + + i=12740 + + + + + i=47 + + false + + i=12737 + + + + + i=47 + + false + + i=12777 + + + + + i=47 + + false + + i=18155 + + + + + i=47 + + false + + i=17732 + + + + 0 + + + + i=12639 + + Variable_2 + + 0 + SupportedPrivateKeyFormats + + + + SupportedPrivateKeyFormats + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12637 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12640 + + Variable_2 + + 0 + MaxTrustListSize + + + + MaxTrustListSize + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12637 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12641 + + Variable_2 + + 0 + MulticastDnsEnabled + + + + MulticastDnsEnabled + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12637 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12642 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14156 + + + + + i=40 + + false + + i=12522 + + + + + i=46 + + false + + i=12643 + + + + + i=46 + + false + + i=14157 + + + + + i=46 + + false + + i=14158 + + + + + i=46 + + false + + i=12646 + + + + + i=47 + + false + + i=12647 + + + + + i=47 + + false + + i=12650 + + + + + i=47 + + false + + i=12652 + + + + + i=47 + + false + + i=12655 + + + + + i=47 + + false + + i=12657 + + + + + i=47 + + false + + i=12660 + + + + + i=46 + + false + + i=12662 + + + + + i=47 + + false + + i=12663 + + + + + i=47 + + false + + i=12666 + + + + + i=47 + + false + + i=12668 + + + + + i=47 + + false + + i=12670 + + + + 0 + + + + i=12643 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12642 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12646 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12642 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12647 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=11580 + + + + + i=46 + + false + + i=12648 + + + + + i=46 + + false + + i=12649 + + + + true + true + + + + i=12648 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12647 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12649 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12647 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12650 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=11583 + + + + + i=46 + + false + + i=12651 + + + + true + true + + + + i=12651 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12650 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12652 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=11585 + + + + + i=46 + + false + + i=12653 + + + + + i=46 + + false + + i=12654 + + + + true + true + + + + i=12653 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12652 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12654 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12652 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12655 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=11588 + + + + + i=46 + + false + + i=12656 + + + + true + true + + + + i=12656 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12655 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12657 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=11590 + + + + + i=46 + + false + + i=12658 + + + + + i=46 + + false + + i=12659 + + + + true + true + + + + i=12658 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12657 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12659 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12657 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12660 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=11593 + + + + + i=46 + + false + + i=12661 + + + + true + true + + + + i=12661 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12660 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12662 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12642 + + + + + i=40 + + false + + i=68 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12663 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=12543 + + + + + i=46 + + false + + i=12664 + + + + + i=46 + + false + + i=12665 + + + + true + true + + + + i=12664 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12663 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12665 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12663 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12666 + + Method_4 + + 0 + CloseAndUpdate + + + + CloseAndUpdate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=12546 + + + + + i=46 + + false + + i=14160 + + + + + i=46 + + false + + i=12667 + + + + true + true + + + + i=12667 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12666 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12668 + + Method_4 + + 0 + AddCertificate + + + + AddCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=12548 + + + + + i=46 + + false + + i=12669 + + + + true + true + + + + i=12669 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12668 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12670 + + Method_4 + + 0 + RemoveCertificate + + + + RemoveCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12642 + + + + + i=40 + + false + + i=12550 + + + + + i=46 + + false + + i=12671 + + + + true + true + + + + i=12671 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12670 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12676 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12554 + + + + + i=39 + + false + + i=12677 + + + + 0 + + + + i=12677 + + Variable_2 + + 0 + TrustListDataType + + + + TrustListDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='TrustListDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12680 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12554 + + + + + i=39 + + false + + i=12681 + + + + 0 + + + + i=12681 + + Variable_2 + + 0 + TrustListDataType + + + + TrustListDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + TrustListDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12686 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12687 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12690 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12691 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12705 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12546 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12708 + + Variable_2 + + 0 + ServerCapabilities + + + + ServerCapabilities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12581 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12710 + + Variable_2 + + 0 + ServerCapabilities + + + + ServerCapabilities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12637 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12712 + + Variable_2 + + 0 + RelativePathElement + + + + RelativePathElement + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='RelativePathElement'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12715 + + Variable_2 + + 0 + RelativePath + + + + RelativePath + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='RelativePath'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12718 + + Variable_2 + + 0 + RelativePathElement + + + + RelativePathElement + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + RelativePathElement + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12721 + + Variable_2 + + 0 + RelativePath + + + + RelativePath + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + RelativePath + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12731 + + Method_4 + + 0 + CreateSigningRequest + + + + CreateSigningRequest + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12581 + + + + + i=40 + + false + + i=12731 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=12732 + + + + + i=46 + + false + + i=12733 + + + + true + true + + + + i=12732 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12731 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12733 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12731 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12734 + + Method_4 + + 0 + ApplyChanges + + + + ApplyChanges + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12581 + + + + + i=40 + + false + + i=12734 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=12737 + + Method_4 + + 0 + CreateSigningRequest + + + + CreateSigningRequest + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12637 + + + + + i=40 + + false + + i=12731 + + + + + i=46 + + false + + i=12738 + + + + + i=46 + + false + + i=12739 + + + + true + true + + + + i=12738 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12737 + + + + + i=40 + + false + + i=68 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12739 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12737 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12740 + + Method_4 + + 0 + ApplyChanges + + + + ApplyChanges + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12637 + + + + + i=40 + + false + + i=12734 + + + + true + true + + + + i=12745 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12746 + + Method_4 + + 0 + SetSubscriptionDurable + + + + SetSubscriptionDurable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=12746 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=12747 + + + + + i=46 + + false + + i=12748 + + + + true + true + + + + i=12747 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12746 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + i=297 + + + + LifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12748 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12746 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RevisedLifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12749 + + Method_4 + + 0 + SetSubscriptionDurable + + + + SetSubscriptionDurable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=12746 + + + + + i=46 + + false + + i=12750 + + + + + i=46 + + false + + i=12751 + + + + true + true + + + + i=12750 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12749 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + i=297 + + + + LifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12751 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12749 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + RevisedLifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12755 + + DataType_64 + + 0 + OptionSet + + + + OptionSet + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12765 + + + + + i=38 + + false + + i=12757 + + + + + i=38 + + false + + i=15084 + + + + false + + + + + i=12756 + + DataType_64 + + 0 + Union + + + + Union + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=12766 + + + + + i=38 + + false + + i=12758 + + + + + i=38 + + false + + i=15085 + + + + true + + + + + i=12757 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12755 + + + + + i=39 + + false + + i=12759 + + + + 0 + + + + i=12758 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12756 + + + + + i=39 + + false + + i=12762 + + + + 0 + + + + i=12759 + + Variable_2 + + 0 + OptionSet + + + + OptionSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='OptionSet'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12762 + + Variable_2 + + 0 + Union + + + + Union + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Union'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12765 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12755 + + + + + i=39 + + false + + i=12767 + + + + 0 + + + + i=12766 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12756 + + + + + i=39 + + false + + i=12770 + + + + 0 + + + + i=12767 + + Variable_2 + + 0 + OptionSet + + + + OptionSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + OptionSet + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12770 + + Variable_2 + + 0 + Union + + + + Union + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Union + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12775 + + Method_4 + + 0 + GetRejectedList + + + + GetRejectedList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12581 + + + + + i=40 + + false + + i=12775 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=12776 + + + + true + true + + + + i=12776 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12775 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12777 + + Method_4 + + 0 + GetRejectedList + + + + GetRejectedList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12637 + + + + + i=40 + + false + + i=12775 + + + + + i=46 + + false + + i=12778 + + + + true + true + + + + i=12778 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12777 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12779 + + Variable_2 + + 0 + SamplingIntervalDiagnostics + + + + SamplingIntervalDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2164 + + + + + i=40 + + false + + i=2165 + + + + + i=37 + + false + + i=83 + + + + + i=47 + + false + + i=12780 + + + + + i=47 + + false + + i=12781 + + + + + i=47 + + false + + i=12782 + + + + + i=47 + + false + + i=12783 + + + + + + + + + + i=856 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12780 + + Variable_2 + + 0 + SamplingInterval + + + + SamplingInterval + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12779 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12781 + + Variable_2 + + 0 + SampledMonitoredItemsCount + + + + SampledMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12779 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12782 + + Variable_2 + + 0 + MaxSampledMonitoredItemsCount + + + + MaxSampledMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12779 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12783 + + Variable_2 + + 0 + DisabledMonitoredItemsSamplingCount + + + + DisabledMonitoredItemsSamplingCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12779 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12784 + + Variable_2 + + 0 + SubscriptionDiagnostics + + + + SubscriptionDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2171 + + + + + i=40 + + false + + i=2172 + + + + + i=37 + + false + + i=83 + + + + + i=47 + + false + + i=12785 + + + + + i=47 + + false + + i=12786 + + + + + i=47 + + false + + i=12787 + + + + + i=47 + + false + + i=12788 + + + + + i=47 + + false + + i=12789 + + + + + i=47 + + false + + i=12790 + + + + + i=47 + + false + + i=12791 + + + + + i=47 + + false + + i=12792 + + + + + i=47 + + false + + i=12793 + + + + + i=47 + + false + + i=12794 + + + + + i=47 + + false + + i=12795 + + + + + i=47 + + false + + i=12796 + + + + + i=47 + + false + + i=12797 + + + + + i=47 + + false + + i=12798 + + + + + i=47 + + false + + i=12799 + + + + + i=47 + + false + + i=12800 + + + + + i=47 + + false + + i=12801 + + + + + i=47 + + false + + i=12802 + + + + + i=47 + + false + + i=12803 + + + + + i=47 + + false + + i=12804 + + + + + i=47 + + false + + i=12805 + + + + + i=47 + + false + + i=12806 + + + + + i=47 + + false + + i=12807 + + + + + i=47 + + false + + i=12808 + + + + + i=47 + + false + + i=12809 + + + + + i=47 + + false + + i=12810 + + + + + i=47 + + false + + i=12811 + + + + + i=47 + + false + + i=12812 + + + + + i=47 + + false + + i=12813 + + + + + i=47 + + false + + i=12814 + + + + + i=47 + + false + + i=12815 + + + + + + + + + + i=874 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12785 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12786 + + Variable_2 + + 0 + SubscriptionId + + + + SubscriptionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12787 + + Variable_2 + + 0 + Priority + + + + Priority + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12788 + + Variable_2 + + 0 + PublishingInterval + + + + PublishingInterval + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12789 + + Variable_2 + + 0 + MaxKeepAliveCount + + + + MaxKeepAliveCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12790 + + Variable_2 + + 0 + MaxLifetimeCount + + + + MaxLifetimeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12791 + + Variable_2 + + 0 + MaxNotificationsPerPublish + + + + MaxNotificationsPerPublish + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12792 + + Variable_2 + + 0 + PublishingEnabled + + + + PublishingEnabled + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12793 + + Variable_2 + + 0 + ModifyCount + + + + ModifyCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12794 + + Variable_2 + + 0 + EnableCount + + + + EnableCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12795 + + Variable_2 + + 0 + DisableCount + + + + DisableCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12796 + + Variable_2 + + 0 + RepublishRequestCount + + + + RepublishRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12797 + + Variable_2 + + 0 + RepublishMessageRequestCount + + + + RepublishMessageRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12798 + + Variable_2 + + 0 + RepublishMessageCount + + + + RepublishMessageCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12799 + + Variable_2 + + 0 + TransferRequestCount + + + + TransferRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12800 + + Variable_2 + + 0 + TransferredToAltClientCount + + + + TransferredToAltClientCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12801 + + Variable_2 + + 0 + TransferredToSameClientCount + + + + TransferredToSameClientCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12802 + + Variable_2 + + 0 + PublishRequestCount + + + + PublishRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12803 + + Variable_2 + + 0 + DataChangeNotificationsCount + + + + DataChangeNotificationsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12804 + + Variable_2 + + 0 + EventNotificationsCount + + + + EventNotificationsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12805 + + Variable_2 + + 0 + NotificationsCount + + + + NotificationsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12806 + + Variable_2 + + 0 + LatePublishRequestCount + + + + LatePublishRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12807 + + Variable_2 + + 0 + CurrentKeepAliveCount + + + + CurrentKeepAliveCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12808 + + Variable_2 + + 0 + CurrentLifetimeCount + + + + CurrentLifetimeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12809 + + Variable_2 + + 0 + UnacknowledgedMessageCount + + + + UnacknowledgedMessageCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12810 + + Variable_2 + + 0 + DiscardedMessageCount + + + + DiscardedMessageCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12811 + + Variable_2 + + 0 + MonitoredItemCount + + + + MonitoredItemCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12812 + + Variable_2 + + 0 + DisabledMonitoredItemCount + + + + DisabledMonitoredItemCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12813 + + Variable_2 + + 0 + MonitoringQueueOverflowCount + + + + MonitoringQueueOverflowCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12814 + + Variable_2 + + 0 + NextSequenceNumber + + + + NextSequenceNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12815 + + Variable_2 + + 0 + EventQueueOverflowCount + + + + EventQueueOverflowCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12784 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12816 + + Variable_2 + + 0 + SessionDiagnostics + + + + SessionDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2196 + + + + + i=40 + + false + + i=2197 + + + + + i=37 + + false + + i=83 + + + + + i=47 + + false + + i=12817 + + + + + i=47 + + false + + i=12818 + + + + + i=47 + + false + + i=12819 + + + + + i=47 + + false + + i=12820 + + + + + i=47 + + false + + i=12821 + + + + + i=47 + + false + + i=12822 + + + + + i=47 + + false + + i=12823 + + + + + i=47 + + false + + i=12824 + + + + + i=47 + + false + + i=12825 + + + + + i=47 + + false + + i=12826 + + + + + i=47 + + false + + i=12827 + + + + + i=47 + + false + + i=12828 + + + + + i=47 + + false + + i=12829 + + + + + i=47 + + false + + i=12830 + + + + + i=47 + + false + + i=12831 + + + + + i=47 + + false + + i=12832 + + + + + i=47 + + false + + i=12833 + + + + + i=47 + + false + + i=12834 + + + + + i=47 + + false + + i=12835 + + + + + i=47 + + false + + i=12836 + + + + + i=47 + + false + + i=12837 + + + + + i=47 + + false + + i=12838 + + + + + i=47 + + false + + i=12839 + + + + + i=47 + + false + + i=12840 + + + + + i=47 + + false + + i=12841 + + + + + i=47 + + false + + i=12842 + + + + + i=47 + + false + + i=12843 + + + + + i=47 + + false + + i=12844 + + + + + i=47 + + false + + i=12845 + + + + + i=47 + + false + + i=12846 + + + + + i=47 + + false + + i=12847 + + + + + i=47 + + false + + i=12848 + + + + + i=47 + + false + + i=12849 + + + + + i=47 + + false + + i=12850 + + + + + i=47 + + false + + i=12851 + + + + + i=47 + + false + + i=12852 + + + + + i=47 + + false + + i=12853 + + + + + i=47 + + false + + i=12854 + + + + + i=47 + + false + + i=12855 + + + + + i=47 + + false + + i=12856 + + + + + i=47 + + false + + i=12857 + + + + + i=47 + + false + + i=12858 + + + + + i=47 + + false + + i=12859 + + + + + + + + + + i=865 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12817 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12818 + + Variable_2 + + 0 + SessionName + + + + SessionName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12819 + + Variable_2 + + 0 + ClientDescription + + + + ClientDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=308 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12820 + + Variable_2 + + 0 + ServerUri + + + + ServerUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12821 + + Variable_2 + + 0 + EndpointUrl + + + + EndpointUrl + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12822 + + Variable_2 + + 0 + LocaleIds + + + + LocaleIds + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12823 + + Variable_2 + + 0 + ActualSessionTimeout + + + + ActualSessionTimeout + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12824 + + Variable_2 + + 0 + MaxResponseMessageSize + + + + MaxResponseMessageSize + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12825 + + Variable_2 + + 0 + ClientConnectionTime + + + + ClientConnectionTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12826 + + Variable_2 + + 0 + ClientLastContactTime + + + + ClientLastContactTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12827 + + Variable_2 + + 0 + CurrentSubscriptionsCount + + + + CurrentSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12828 + + Variable_2 + + 0 + CurrentMonitoredItemsCount + + + + CurrentMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12829 + + Variable_2 + + 0 + CurrentPublishRequestsInQueue + + + + CurrentPublishRequestsInQueue + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12830 + + Variable_2 + + 0 + TotalRequestCount + + + + TotalRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12831 + + Variable_2 + + 0 + UnauthorizedRequestCount + + + + UnauthorizedRequestCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12832 + + Variable_2 + + 0 + ReadCount + + + + ReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12833 + + Variable_2 + + 0 + HistoryReadCount + + + + HistoryReadCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12834 + + Variable_2 + + 0 + WriteCount + + + + WriteCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12835 + + Variable_2 + + 0 + HistoryUpdateCount + + + + HistoryUpdateCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12836 + + Variable_2 + + 0 + CallCount + + + + CallCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12837 + + Variable_2 + + 0 + CreateMonitoredItemsCount + + + + CreateMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12838 + + Variable_2 + + 0 + ModifyMonitoredItemsCount + + + + ModifyMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12839 + + Variable_2 + + 0 + SetMonitoringModeCount + + + + SetMonitoringModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12840 + + Variable_2 + + 0 + SetTriggeringCount + + + + SetTriggeringCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12841 + + Variable_2 + + 0 + DeleteMonitoredItemsCount + + + + DeleteMonitoredItemsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12842 + + Variable_2 + + 0 + CreateSubscriptionCount + + + + CreateSubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12843 + + Variable_2 + + 0 + ModifySubscriptionCount + + + + ModifySubscriptionCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12844 + + Variable_2 + + 0 + SetPublishingModeCount + + + + SetPublishingModeCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12845 + + Variable_2 + + 0 + PublishCount + + + + PublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12846 + + Variable_2 + + 0 + RepublishCount + + + + RepublishCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12847 + + Variable_2 + + 0 + TransferSubscriptionsCount + + + + TransferSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12848 + + Variable_2 + + 0 + DeleteSubscriptionsCount + + + + DeleteSubscriptionsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12849 + + Variable_2 + + 0 + AddNodesCount + + + + AddNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12850 + + Variable_2 + + 0 + AddReferencesCount + + + + AddReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12851 + + Variable_2 + + 0 + DeleteNodesCount + + + + DeleteNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12852 + + Variable_2 + + 0 + DeleteReferencesCount + + + + DeleteReferencesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12853 + + Variable_2 + + 0 + BrowseCount + + + + BrowseCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12854 + + Variable_2 + + 0 + BrowseNextCount + + + + BrowseNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12855 + + Variable_2 + + 0 + TranslateBrowsePathsToNodeIdsCount + + + + TranslateBrowsePathsToNodeIdsCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12856 + + Variable_2 + + 0 + QueryFirstCount + + + + QueryFirstCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12857 + + Variable_2 + + 0 + QueryNextCount + + + + QueryNextCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12858 + + Variable_2 + + 0 + RegisterNodesCount + + + + RegisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12859 + + Variable_2 + + 0 + UnregisterNodesCount + + + + UnregisterNodesCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12816 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=871 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12860 + + Variable_2 + + 0 + SessionSecurityDiagnostics + + + + SessionSecurityDiagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2243 + + + + + i=40 + + false + + i=2244 + + + + + i=37 + + false + + i=83 + + + + + i=47 + + false + + i=12861 + + + + + i=47 + + false + + i=12862 + + + + + i=47 + + false + + i=12863 + + + + + i=47 + + false + + i=12864 + + + + + i=47 + + false + + i=12865 + + + + + i=47 + + false + + i=12866 + + + + + i=47 + + false + + i=12867 + + + + + i=47 + + false + + i=12868 + + + + + i=47 + + false + + i=12869 + + + + + + + + + + i=868 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12861 + + Variable_2 + + 0 + SessionId + + + + SessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12862 + + Variable_2 + + 0 + ClientUserIdOfSession + + + + ClientUserIdOfSession + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12863 + + Variable_2 + + 0 + ClientUserIdHistory + + + + ClientUserIdHistory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12864 + + Variable_2 + + 0 + AuthenticationMechanism + + + + AuthenticationMechanism + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12865 + + Variable_2 + + 0 + Encoding + + + + Encoding + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12866 + + Variable_2 + + 0 + TransportProtocol + + + + TransportProtocol + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12867 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12868 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12869 + + Variable_2 + + 0 + ClientCertificate + + + + ClientCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12860 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12871 + + Method_4 + + 0 + ResendData + + + + ResendData + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=12871 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=12872 + + + + true + true + + + + i=12872 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12871 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12873 + + Method_4 + + 0 + ResendData + + + + ResendData + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=12871 + + + + + i=46 + + false + + i=12874 + + + + true + true + + + + i=12874 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12873 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12877 + + DataType_64 + + 0 + NormalizedString + + + + NormalizedString + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=12878 + + DataType_64 + + 0 + DecimalString + + + + DecimalString + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=12879 + + DataType_64 + + 0 + DurationString + + + + DurationString + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=12880 + + DataType_64 + + 0 + TimeString + + + + TimeString + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=12881 + + DataType_64 + + 0 + DateString + + + + DateString + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12 + + + + false + + + + + i=12882 + + Variable_2 + + 0 + EstimatedReturnTime + + + + EstimatedReturnTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=12883 + + Method_4 + + 0 + RequestServerStateChange + + + + RequestServerStateChange + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2004 + + + + + i=40 + + false + + i=12883 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=12884 + + + + true + true + + + + i=12884 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12883 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12885 + + Variable_2 + + 0 + EstimatedReturnTime + + + + EstimatedReturnTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2253 + + + + + i=40 + + false + + i=68 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=12886 + + Method_4 + + 0 + RequestServerStateChange + + + + RequestServerStateChange + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2253 + + + + + i=40 + + false + + i=12883 + + + + + i=46 + + false + + i=12887 + + + + true + true + + + + i=12887 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12886 + + + + + i=40 + + false + + i=68 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=12890 + + DataType_64 + + 0 + DiscoveryConfiguration + + + + DiscoveryConfiguration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=12891 + + + + + i=38 + + false + + i=12900 + + + + + i=38 + + false + + i=12892 + + + + + i=38 + + false + + i=15105 + + + + false + + + + + i=12891 + + DataType_64 + + 0 + MdnsDiscoveryConfiguration + + + + MdnsDiscoveryConfiguration + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12890 + + + + + i=38 + + false + + i=12901 + + + + + i=38 + + false + + i=12893 + + + + + i=38 + + false + + i=15106 + + + + false + + + + + i=12892 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12890 + + + + + i=39 + + false + + i=12894 + + + + 0 + + + + i=12893 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12891 + + + + + i=39 + + false + + i=12897 + + + + 0 + + + + i=12894 + + Variable_2 + + 0 + DiscoveryConfiguration + + + + DiscoveryConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DiscoveryConfiguration'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12897 + + Variable_2 + + 0 + MdnsDiscoveryConfiguration + + + + MdnsDiscoveryConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='MdnsDiscoveryConfiguration'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12900 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12890 + + + + + i=39 + + false + + i=12902 + + + + 0 + + + + i=12901 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12891 + + + + + i=39 + + false + + i=12905 + + + + 0 + + + + i=12902 + + Variable_2 + + 0 + DiscoveryConfiguration + + + + DiscoveryConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DiscoveryConfiguration + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12905 + + Variable_2 + + 0 + MdnsDiscoveryConfiguration + + + + MdnsDiscoveryConfiguration + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + MdnsDiscoveryConfiguration + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12908 + + Variable_2 + + 0 + MaxByteStringLength + + + + MaxByteStringLength + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12910 + + Variable_2 + + 0 + MaxByteStringLength + + + + MaxByteStringLength + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2013 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12911 + + Variable_2 + + 0 + MaxByteStringLength + + + + MaxByteStringLength + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2268 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=12912 + + Method_4 + + 0 + ConditionRefresh2 + + + + ConditionRefresh2 + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2782 + + + + + i=40 + + false + + i=12912 + + + + + i=3065 + + false + + i=2787 + + + + + i=3065 + + false + + i=2788 + + + + + i=46 + + false + + i=12913 + + + + true + true + + + + i=12913 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12912 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SubscriptionId + + i=288 + + -1 + + + + The identifier for the suscription to refresh. + + + + + + + i=297 + + + + MonitoredItemId + + i=288 + + -1 + + + + The identifier for the monitored item to refresh. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13225 + + ObjectType_8 + + 0 + CertificateExpirationAlarmType + + + + CertificateExpirationAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11753 + + + + + i=46 + + false + + i=13325 + + + + + i=46 + + false + + i=14900 + + + + + i=46 + + false + + i=13326 + + + + + i=46 + + false + + i=13327 + + + + false + + + + i=13325 + + Variable_2 + + 0 + ExpirationDate + + + + ExpirationDate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13225 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13326 + + Variable_2 + + 0 + CertificateType + + + + CertificateType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13225 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13327 + + Variable_2 + + 0 + Certificate + + + + Certificate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13225 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13341 + + Variable_2 + + 0 + MimeType + + + + MimeType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13353 + + ObjectType_8 + + 0 + FileDirectoryType + + + + FileDirectoryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=35 + + false + + i=13354 + + + + + i=35 + + false + + i=13366 + + + + + i=47 + + false + + i=13387 + + + + + i=47 + + false + + i=13390 + + + + + i=47 + + false + + i=13393 + + + + + i=47 + + false + + i=13395 + + + + false + + + + i=13354 + + Object_1 + + 0 + <FileDirectoryName> + + + + <FileDirectoryName> + + + 0 + 0 + + + 0 + + + + i=35 + + true + + i=13353 + + + + + i=40 + + false + + i=13353 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=13355 + + + + + i=47 + + false + + i=13358 + + + + + i=47 + + false + + i=17718 + + + + + i=47 + + false + + i=13363 + + + + 0 + + + + i=13355 + + Method_4 + + 0 + CreateDirectory + + + + CreateDirectory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13354 + + + + + i=40 + + false + + i=13387 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13356 + + + + + i=46 + + false + + i=13357 + + + + true + true + + + + i=13356 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13355 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13357 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13355 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13358 + + Method_4 + + 0 + CreateFile + + + + CreateFile + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13354 + + + + + i=40 + + false + + i=13390 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13359 + + + + + i=46 + + false + + i=13360 + + + + true + true + + + + i=13359 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13358 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13360 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13358 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13363 + + Method_4 + + 0 + MoveOrCopy + + + + MoveOrCopy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13354 + + + + + i=40 + + false + + i=13395 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13364 + + + + + i=46 + + false + + i=13365 + + + + true + true + + + + i=13364 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13363 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13365 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13363 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13366 + + Object_1 + + 0 + <FileName> + + + + <FileName> + + + 0 + 0 + + + 0 + + + + i=35 + + true + + i=13353 + + + + + i=40 + + false + + i=11575 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=13367 + + + + + i=46 + + false + + i=13368 + + + + + i=46 + + false + + i=13369 + + + + + i=46 + + false + + i=13370 + + + + + i=47 + + false + + i=13372 + + + + + i=47 + + false + + i=13375 + + + + + i=47 + + false + + i=13377 + + + + + i=47 + + false + + i=13380 + + + + + i=47 + + false + + i=13382 + + + + + i=47 + + false + + i=13385 + + + + 0 + + + + i=13367 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13366 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13368 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13366 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13369 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13366 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13370 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13366 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13372 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13366 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13373 + + + + + i=46 + + false + + i=13374 + + + + true + true + + + + i=13373 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13372 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13374 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13372 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13375 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13366 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13376 + + + + true + true + + + + i=13376 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13375 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13377 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13366 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13378 + + + + + i=46 + + false + + i=13379 + + + + true + true + + + + i=13378 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13377 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13379 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13377 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13380 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13366 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13381 + + + + true + true + + + + i=13381 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13382 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13366 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13383 + + + + + i=46 + + false + + i=13384 + + + + true + true + + + + i=13383 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13382 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13384 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13382 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13385 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13366 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13386 + + + + true + true + + + + i=13386 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13385 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13387 + + Method_4 + + 0 + CreateDirectory + + + + CreateDirectory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13353 + + + + + i=40 + + false + + i=13387 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13388 + + + + + i=46 + + false + + i=13389 + + + + true + true + + + + i=13388 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13387 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13389 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13387 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13390 + + Method_4 + + 0 + CreateFile + + + + CreateFile + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13353 + + + + + i=40 + + false + + i=13390 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13391 + + + + + i=46 + + false + + i=13392 + + + + true + true + + + + i=13391 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13390 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13392 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13390 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13393 + + Method_4 + + 0 + Delete + + + + Delete + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13353 + + + + + i=40 + + false + + i=13393 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13394 + + + + true + true + + + + i=13394 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13393 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13395 + + Method_4 + + 0 + MoveOrCopy + + + + MoveOrCopy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13353 + + + + + i=40 + + false + + i=13395 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13396 + + + + + i=46 + + false + + i=13397 + + + + true + true + + + + i=13396 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13395 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13397 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13395 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13599 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12555 + + + + + i=40 + + false + + i=12522 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13600 + + + + + i=46 + + false + + i=13601 + + + + + i=46 + + false + + i=13602 + + + + + i=46 + + false + + i=13603 + + + + + i=47 + + false + + i=13605 + + + + + i=47 + + false + + i=13608 + + + + + i=47 + + false + + i=13610 + + + + + i=47 + + false + + i=13613 + + + + + i=47 + + false + + i=13615 + + + + + i=47 + + false + + i=13618 + + + + + i=46 + + false + + i=13620 + + + + + i=47 + + false + + i=13621 + + + + 0 + + + + i=13600 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13599 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13601 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13599 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13602 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13599 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13603 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13599 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13605 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13606 + + + + + i=46 + + false + + i=13607 + + + + true + true + + + + i=13606 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13605 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13607 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13605 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13608 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13609 + + + + true + true + + + + i=13609 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13608 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13610 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13611 + + + + + i=46 + + false + + i=13612 + + + + true + true + + + + i=13611 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13610 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13612 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13610 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13613 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13614 + + + + true + true + + + + i=13614 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13613 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13615 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13616 + + + + + i=46 + + false + + i=13617 + + + + true + true + + + + i=13616 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13615 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13617 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13615 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13618 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13619 + + + + true + true + + + + i=13619 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13618 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13620 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13599 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13621 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13599 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13622 + + + + + i=46 + + false + + i=13623 + + + + true + true + + + + i=13622 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13621 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13623 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13621 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13631 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12555 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13735 + + Variable_2 + + 0 + CertificateGroup + + + + CertificateGroup + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13736 + + Variable_2 + + 0 + CertificateType + + + + CertificateType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13737 + + Method_4 + + 0 + UpdateCertificate + + + + UpdateCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12637 + + + + + i=40 + + false + + i=12616 + + + + + i=46 + + false + + i=13738 + + + + + i=46 + + false + + i=13739 + + + + true + true + + + + i=13738 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13737 + + + + + i=40 + + false + + i=68 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13739 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13737 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13813 + + ObjectType_8 + + 0 + CertificateGroupFolderType + + + + CertificateGroupFolderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=47 + + false + + i=13814 + + + + + i=47 + + false + + i=13848 + + + + + i=47 + + false + + i=13882 + + + + + i=35 + + false + + i=13916 + + + + false + + + + i=13814 + + Object_1 + + 0 + DefaultApplicationGroup + + + + DefaultApplicationGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13813 + + + + + i=40 + + false + + i=12555 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=13815 + + + + + i=46 + + false + + i=13847 + + + + 0 + + + + i=13815 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13814 + + + + + i=40 + + false + + i=12522 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13816 + + + + + i=46 + + false + + i=13817 + + + + + i=46 + + false + + i=13818 + + + + + i=46 + + false + + i=13819 + + + + + i=47 + + false + + i=13821 + + + + + i=47 + + false + + i=13824 + + + + + i=47 + + false + + i=13826 + + + + + i=47 + + false + + i=13829 + + + + + i=47 + + false + + i=13831 + + + + + i=47 + + false + + i=13834 + + + + + i=46 + + false + + i=13836 + + + + + i=47 + + false + + i=13837 + + + + 0 + + + + i=13816 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13815 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13817 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13815 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13818 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13815 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13819 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13815 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13821 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13822 + + + + + i=46 + + false + + i=13823 + + + + true + true + + + + i=13822 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13821 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13823 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13821 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13824 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13825 + + + + true + true + + + + i=13825 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13824 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13826 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13827 + + + + + i=46 + + false + + i=13828 + + + + true + true + + + + i=13827 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13826 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13828 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13826 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13829 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13830 + + + + true + true + + + + i=13830 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13829 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13831 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13832 + + + + + i=46 + + false + + i=13833 + + + + true + true + + + + i=13832 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13831 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13833 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13831 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13834 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13835 + + + + true + true + + + + i=13835 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13834 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13836 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13815 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13837 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13815 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13838 + + + + + i=46 + + false + + i=13839 + + + + true + true + + + + i=13838 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13837 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13839 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13837 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13847 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13814 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13848 + + Object_1 + + 0 + DefaultHttpsGroup + + + + DefaultHttpsGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13813 + + + + + i=40 + + false + + i=12555 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=13849 + + + + + i=46 + + false + + i=13881 + + + + 0 + + + + i=13849 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13848 + + + + + i=40 + + false + + i=12522 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13850 + + + + + i=46 + + false + + i=13851 + + + + + i=46 + + false + + i=13852 + + + + + i=46 + + false + + i=13853 + + + + + i=47 + + false + + i=13855 + + + + + i=47 + + false + + i=13858 + + + + + i=47 + + false + + i=13860 + + + + + i=47 + + false + + i=13863 + + + + + i=47 + + false + + i=13865 + + + + + i=47 + + false + + i=13868 + + + + + i=46 + + false + + i=13870 + + + + + i=47 + + false + + i=13871 + + + + 0 + + + + i=13850 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13849 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13851 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13849 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13852 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13849 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13853 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13849 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13855 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13856 + + + + + i=46 + + false + + i=13857 + + + + true + true + + + + i=13856 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13855 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13857 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13855 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13858 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13859 + + + + true + true + + + + i=13859 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13858 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13860 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13861 + + + + + i=46 + + false + + i=13862 + + + + true + true + + + + i=13861 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13860 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13862 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13860 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13863 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13864 + + + + true + true + + + + i=13864 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13863 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13865 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13866 + + + + + i=46 + + false + + i=13867 + + + + true + true + + + + i=13866 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13865 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13867 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13865 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13868 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13869 + + + + true + true + + + + i=13869 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13868 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13870 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13849 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13871 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13849 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13872 + + + + + i=46 + + false + + i=13873 + + + + true + true + + + + i=13872 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13871 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13873 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13871 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13881 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13848 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13882 + + Object_1 + + 0 + DefaultUserTokenGroup + + + + DefaultUserTokenGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13813 + + + + + i=40 + + false + + i=12555 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=13883 + + + + + i=46 + + false + + i=13915 + + + + 0 + + + + i=13883 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13882 + + + + + i=40 + + false + + i=12522 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13884 + + + + + i=46 + + false + + i=13885 + + + + + i=46 + + false + + i=13886 + + + + + i=46 + + false + + i=13887 + + + + + i=47 + + false + + i=13889 + + + + + i=47 + + false + + i=13892 + + + + + i=47 + + false + + i=13894 + + + + + i=47 + + false + + i=13897 + + + + + i=47 + + false + + i=13899 + + + + + i=47 + + false + + i=13902 + + + + + i=46 + + false + + i=13904 + + + + + i=47 + + false + + i=13905 + + + + 0 + + + + i=13884 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13883 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13885 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13883 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13886 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13883 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13887 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13883 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13889 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13890 + + + + + i=46 + + false + + i=13891 + + + + true + true + + + + i=13890 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13889 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13891 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13889 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13892 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13893 + + + + true + true + + + + i=13893 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13892 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13894 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13895 + + + + + i=46 + + false + + i=13896 + + + + true + true + + + + i=13895 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13894 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13896 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13894 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13897 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13898 + + + + true + true + + + + i=13898 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13897 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13899 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13900 + + + + + i=46 + + false + + i=13901 + + + + true + true + + + + i=13900 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13899 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13901 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13899 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13902 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13903 + + + + true + true + + + + i=13903 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13902 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13904 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13883 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13905 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13883 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13906 + + + + + i=46 + + false + + i=13907 + + + + true + true + + + + i=13906 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13905 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13907 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13905 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13915 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13882 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13916 + + Object_1 + + 0 + <AdditionalGroup> + + + + <AdditionalGroup> + + + 0 + 0 + + + 0 + + + + i=35 + + true + + i=13813 + + + + + i=40 + + false + + i=12555 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=13917 + + + + + i=46 + + false + + i=13949 + + + + 0 + + + + i=13917 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13916 + + + + + i=40 + + false + + i=12522 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13918 + + + + + i=46 + + false + + i=13919 + + + + + i=46 + + false + + i=13920 + + + + + i=46 + + false + + i=13921 + + + + + i=47 + + false + + i=13923 + + + + + i=47 + + false + + i=13926 + + + + + i=47 + + false + + i=13928 + + + + + i=47 + + false + + i=13931 + + + + + i=47 + + false + + i=13933 + + + + + i=47 + + false + + i=13936 + + + + + i=46 + + false + + i=13938 + + + + + i=47 + + false + + i=13939 + + + + 0 + + + + i=13918 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13917 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13919 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13917 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13920 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13917 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13921 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13917 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13923 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13924 + + + + + i=46 + + false + + i=13925 + + + + true + true + + + + i=13924 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13923 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13925 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13923 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13926 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13927 + + + + true + true + + + + i=13927 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13926 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13928 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13929 + + + + + i=46 + + false + + i=13930 + + + + true + true + + + + i=13929 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13928 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13930 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13928 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13931 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13932 + + + + true + true + + + + i=13932 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13931 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13933 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13934 + + + + + i=46 + + false + + i=13935 + + + + true + true + + + + i=13934 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13933 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13935 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13933 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13936 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13937 + + + + true + true + + + + i=13937 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13936 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13938 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13917 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13939 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13917 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13940 + + + + + i=46 + + false + + i=13941 + + + + true + true + + + + i=13940 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13939 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13941 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13939 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13949 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13916 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13950 + + Object_1 + + 0 + CertificateGroups + + + + CertificateGroups + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12581 + + + + + i=40 + + false + + i=13813 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=13951 + + + + 0 + + + + i=13951 + + Object_1 + + 0 + DefaultApplicationGroup + + + + DefaultApplicationGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13950 + + + + + i=40 + + false + + i=12555 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=13952 + + + + + i=46 + + false + + i=13984 + + + + 0 + + + + i=13952 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13951 + + + + + i=40 + + false + + i=12522 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13953 + + + + + i=46 + + false + + i=13954 + + + + + i=46 + + false + + i=13955 + + + + + i=46 + + false + + i=13956 + + + + + i=47 + + false + + i=13958 + + + + + i=47 + + false + + i=13961 + + + + + i=47 + + false + + i=13963 + + + + + i=47 + + false + + i=13966 + + + + + i=47 + + false + + i=13968 + + + + + i=47 + + false + + i=13971 + + + + + i=46 + + false + + i=13973 + + + + + i=47 + + false + + i=13974 + + + + 0 + + + + i=13953 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13952 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13954 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13952 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13955 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13952 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13956 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13952 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13958 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=11580 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13959 + + + + + i=46 + + false + + i=13960 + + + + true + true + + + + i=13959 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13958 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13960 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13958 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13961 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=11583 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13962 + + + + true + true + + + + i=13962 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13961 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13963 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=11585 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13964 + + + + + i=46 + + false + + i=13965 + + + + true + true + + + + i=13964 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13963 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13965 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13963 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13966 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=11588 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13967 + + + + true + true + + + + i=13967 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13966 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13968 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=11590 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13969 + + + + + i=46 + + false + + i=13970 + + + + true + true + + + + i=13969 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13968 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13970 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13968 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13971 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=11593 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13972 + + + + true + true + + + + i=13972 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13971 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13973 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13952 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=13974 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13952 + + + + + i=40 + + false + + i=12543 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=13975 + + + + + i=46 + + false + + i=13976 + + + + true + true + + + + i=13975 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13974 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13976 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13974 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=13984 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13951 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14053 + + Object_1 + + 0 + CertificateGroups + + + + CertificateGroups + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12637 + + + + + i=40 + + false + + i=13813 + + + + + i=47 + + false + + i=14156 + + + + + i=47 + + false + + i=14088 + + + + + i=47 + + false + + i=14122 + + + + 0 + + + + i=14088 + + Object_1 + + 0 + DefaultHttpsGroup + + + + DefaultHttpsGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14053 + + + + + i=40 + + false + + i=12555 + + + + + i=47 + + false + + i=14089 + + + + + i=46 + + false + + i=14121 + + + + 0 + + + + i=14089 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14088 + + + + + i=40 + + false + + i=12522 + + + + + i=46 + + false + + i=14090 + + + + + i=46 + + false + + i=14091 + + + + + i=46 + + false + + i=14092 + + + + + i=46 + + false + + i=14093 + + + + + i=47 + + false + + i=14095 + + + + + i=47 + + false + + i=14098 + + + + + i=47 + + false + + i=14100 + + + + + i=47 + + false + + i=14103 + + + + + i=47 + + false + + i=14105 + + + + + i=47 + + false + + i=14108 + + + + + i=46 + + false + + i=14110 + + + + + i=47 + + false + + i=14111 + + + + + i=47 + + false + + i=14114 + + + + + i=47 + + false + + i=14117 + + + + + i=47 + + false + + i=14119 + + + + 0 + + + + i=14090 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14089 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14091 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14089 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14092 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14089 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14093 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14089 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14095 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=11580 + + + + + i=46 + + false + + i=14096 + + + + + i=46 + + false + + i=14097 + + + + true + true + + + + i=14096 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14095 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14097 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14095 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14098 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=11583 + + + + + i=46 + + false + + i=14099 + + + + true + true + + + + i=14099 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14098 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14100 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=11585 + + + + + i=46 + + false + + i=14101 + + + + + i=46 + + false + + i=14102 + + + + true + true + + + + i=14101 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14100 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14102 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14100 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14103 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=11588 + + + + + i=46 + + false + + i=14104 + + + + true + true + + + + i=14104 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14103 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14105 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=11590 + + + + + i=46 + + false + + i=14106 + + + + + i=46 + + false + + i=14107 + + + + true + true + + + + i=14106 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14105 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14107 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14105 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14108 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=11593 + + + + + i=46 + + false + + i=14109 + + + + true + true + + + + i=14109 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14108 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14110 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14089 + + + + + i=40 + + false + + i=68 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14111 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=12543 + + + + + i=46 + + false + + i=14112 + + + + + i=46 + + false + + i=14113 + + + + true + true + + + + i=14112 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14111 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14113 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14111 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14114 + + Method_4 + + 0 + CloseAndUpdate + + + + CloseAndUpdate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=12546 + + + + + i=46 + + false + + i=14115 + + + + + i=46 + + false + + i=14116 + + + + true + true + + + + i=14115 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14114 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14116 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14114 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14117 + + Method_4 + + 0 + AddCertificate + + + + AddCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=12548 + + + + + i=46 + + false + + i=14118 + + + + true + true + + + + i=14118 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14117 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14119 + + Method_4 + + 0 + RemoveCertificate + + + + RemoveCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14089 + + + + + i=40 + + false + + i=12550 + + + + + i=46 + + false + + i=14120 + + + + true + true + + + + i=14120 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14119 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14121 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14088 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14122 + + Object_1 + + 0 + DefaultUserTokenGroup + + + + DefaultUserTokenGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14053 + + + + + i=40 + + false + + i=12555 + + + + + i=47 + + false + + i=14123 + + + + + i=46 + + false + + i=14155 + + + + 0 + + + + i=14123 + + Object_1 + + 0 + TrustList + + + + TrustList + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14122 + + + + + i=40 + + false + + i=12522 + + + + + i=46 + + false + + i=14124 + + + + + i=46 + + false + + i=14125 + + + + + i=46 + + false + + i=14126 + + + + + i=46 + + false + + i=14127 + + + + + i=47 + + false + + i=14129 + + + + + i=47 + + false + + i=14132 + + + + + i=47 + + false + + i=14134 + + + + + i=47 + + false + + i=14137 + + + + + i=47 + + false + + i=14139 + + + + + i=47 + + false + + i=14142 + + + + + i=46 + + false + + i=14144 + + + + + i=47 + + false + + i=14145 + + + + + i=47 + + false + + i=14148 + + + + + i=47 + + false + + i=14151 + + + + + i=47 + + false + + i=14153 + + + + 0 + + + + i=14124 + + Variable_2 + + 0 + Size + + + + Size + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14123 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=9 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14125 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14123 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14126 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14123 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14127 + + Variable_2 + + 0 + OpenCount + + + + OpenCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14123 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14129 + + Method_4 + + 0 + Open + + + + Open + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=11580 + + + + + i=46 + + false + + i=14130 + + + + + i=46 + + false + + i=14131 + + + + true + true + + + + i=14130 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14129 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14131 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14129 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14132 + + Method_4 + + 0 + Close + + + + Close + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=11583 + + + + + i=46 + + false + + i=14133 + + + + true + true + + + + i=14133 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14132 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14134 + + Method_4 + + 0 + Read + + + + Read + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=11585 + + + + + i=46 + + false + + i=14135 + + + + + i=46 + + false + + i=14136 + + + + true + true + + + + i=14135 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14134 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14136 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14134 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14137 + + Method_4 + + 0 + Write + + + + Write + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=11588 + + + + + i=46 + + false + + i=14138 + + + + true + true + + + + i=14138 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14137 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14139 + + Method_4 + + 0 + GetPosition + + + + GetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=11590 + + + + + i=46 + + false + + i=14140 + + + + + i=46 + + false + + i=14141 + + + + true + true + + + + i=14140 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14139 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14141 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14139 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14142 + + Method_4 + + 0 + SetPosition + + + + SetPosition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=11593 + + + + + i=46 + + false + + i=14143 + + + + true + true + + + + i=14143 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14142 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14144 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14123 + + + + + i=40 + + false + + i=68 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14145 + + Method_4 + + 0 + OpenWithMasks + + + + OpenWithMasks + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=12543 + + + + + i=46 + + false + + i=14146 + + + + + i=46 + + false + + i=14147 + + + + true + true + + + + i=14146 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14145 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14147 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14145 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14148 + + Method_4 + + 0 + CloseAndUpdate + + + + CloseAndUpdate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=12546 + + + + + i=46 + + false + + i=14149 + + + + + i=46 + + false + + i=14150 + + + + true + true + + + + i=14149 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14148 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14150 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14148 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14151 + + Method_4 + + 0 + AddCertificate + + + + AddCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=12548 + + + + + i=46 + + false + + i=14152 + + + + true + true + + + + i=14152 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14151 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14153 + + Method_4 + + 0 + RemoveCertificate + + + + RemoveCertificate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14123 + + + + + i=40 + + false + + i=12550 + + + + + i=46 + + false + + i=14154 + + + + true + true + + + + i=14154 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14153 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14155 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14122 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14156 + + Object_1 + + 0 + DefaultApplicationGroup + + + + DefaultApplicationGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14053 + + + + + i=40 + + false + + i=12555 + + + + + i=47 + + false + + i=12642 + + + + + i=46 + + false + + i=14161 + + + + 0 + + + + i=14157 + + Variable_2 + + 0 + Writable + + + + Writable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12642 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14158 + + Variable_2 + + 0 + UserWritable + + + + UserWritable + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12642 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14160 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12666 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14161 + + Variable_2 + + 0 + CertificateTypes + + + + CertificateTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14156 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14209 + + ObjectType_8 + + 0 + PubSubConnectionType + + + + PubSubConnectionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=14595 + + + + + i=47 + + false + + i=17306 + + + + + i=46 + + false + + i=17485 + + + + + i=47 + + false + + i=14221 + + + + + i=47 + + false + + i=17203 + + + + + i=18804 + + false + + i=17310 + + + + + i=18805 + + false + + i=17325 + + + + + i=47 + + false + + i=14600 + + + + + i=47 + + false + + i=19241 + + + + + i=47 + + false + + i=17427 + + + + + i=47 + + false + + i=17465 + + + + + i=47 + + false + + i=14225 + + + + false + + + + i=14221 + + Object_1 + + 0 + Address + + + + Address + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=21145 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=17202 + + + + 0 + + + + i=14225 + + Method_4 + + 0 + RemoveGroup + + + + RemoveGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=14225 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14226 + + + + true + true + + + + i=14226 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14225 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14232 + + ObjectType_8 + + 0 + PubSubGroupType + + + + PubSubGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=15926 + + + + + i=46 + + false + + i=15927 + + + + + i=46 + + false + + i=15928 + + + + + i=46 + + false + + i=17724 + + + + + i=46 + + false + + i=17488 + + + + + i=47 + + false + + i=15265 + + + + + i=45 + + false + + i=17725 + + + + + i=45 + + false + + i=17999 + + + + true + + + + i=14273 + + DataType_64 + + 0 + PublishedVariableDataType + + + + PublishedVariableDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=14323 + + + + + i=38 + + false + + i=14319 + + + + + i=38 + + false + + i=15060 + + + + false + + + + + i=14319 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14273 + + + + + i=39 + + false + + i=14320 + + + + 0 + + + + i=14320 + + Variable_2 + + 0 + PublishedVariableDataType + + + + PublishedVariableDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PublishedVariableDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14323 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14273 + + + + + i=39 + + false + + i=14324 + + + + 0 + + + + i=14324 + + Variable_2 + + 0 + PublishedVariableDataType + + + + PublishedVariableDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PublishedVariableDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14415 + + Variable_2 + + 0 + ServerNetworkGroups + + + + ServerNetworkGroups + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2296 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=11944 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14416 + + ObjectType_8 + + 0 + PublishSubscribeType + + + + PublishSubscribeType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15906 + + + + + i=14476 + + false + + i=14417 + + + + + i=47 + + false + + i=17296 + + + + + i=47 + + false + + i=16598 + + + + + i=47 + + false + + i=14432 + + + + + i=47 + + false + + i=14434 + + + + + i=47 + + false + + i=15844 + + + + + i=47 + + false + + i=18715 + + + + + i=46 + + false + + i=17479 + + + + false + + + + i=14417 + + Object_1 + + 0 + <ConnectionName> + + + + <ConnectionName> + + + 0 + 0 + + + 0 + + + + i=14476 + + true + + i=14416 + + + + + i=40 + + false + + i=14209 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=14418 + + + + + i=47 + + false + + i=17292 + + + + + i=46 + + false + + i=17478 + + + + + i=47 + + false + + i=14423 + + + + + i=47 + + false + + i=14419 + + + + 0 + + + + i=14418 + + Variable_2 + + 0 + PublisherId + + + + PublisherId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14417 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14419 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14417 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=14420 + + + + 0 + + + + i=14420 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14419 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14423 + + Object_1 + + 0 + Address + + + + Address + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14417 + + + + + i=40 + + false + + i=21145 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15533 + + + + 0 + + + + i=14432 + + Method_4 + + 0 + RemoveConnection + + + + RemoveConnection + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14416 + + + + + i=40 + + false + + i=14432 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14433 + + + + true + true + + + + i=14433 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14432 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14434 + + Object_1 + + 0 + PublishedDataSets + + + + PublishedDataSets + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14416 + + + + + i=40 + + false + + i=14477 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=14443 + + Object_1 + + 0 + PublishSubscribe + + + + PublishSubscribe + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=14416 + + + + + i=47 + + true + + i=2253 + + + + + i=47 + + false + + i=15215 + + + + + i=47 + + false + + i=15440 + + + + + i=47 + + false + + i=15443 + + + + + i=47 + + false + + i=17366 + + + + + i=47 + + false + + i=17369 + + + + + i=47 + + false + + i=17371 + + + + + i=47 + + false + + i=17405 + + + + + i=47 + + false + + i=17409 + + + + + i=46 + + false + + i=17481 + + + + 0 + + + + i=14476 + + ReferenceType_32 + + 0 + HasPubSubConnection + + + + HasPubSubConnection + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + PubSubConnectionOf + + + + + i=14477 + + ObjectType_8 + + 0 + DataSetFolderType + + + + DataSetFolderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=35 + + false + + i=14478 + + + + + i=47 + + false + + i=14487 + + + + + i=47 + + false + + i=14493 + + + + + i=47 + + false + + i=14496 + + + + + i=47 + + false + + i=16935 + + + + + i=47 + + false + + i=16960 + + + + + i=47 + + false + + i=14499 + + + + + i=47 + + false + + i=16994 + + + + + i=47 + + false + + i=16997 + + + + false + + + + i=14478 + + Object_1 + + 0 + <DataSetFolderName> + + + + <DataSetFolderName> + + + 0 + 0 + + + 0 + + + + i=35 + + true + + i=14477 + + + + + i=40 + + false + + i=14477 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=14479 + + + + + i=47 + + false + + i=14482 + + + + + i=47 + + false + + i=16842 + + + + + i=47 + + false + + i=16881 + + + + + i=47 + + false + + i=14485 + + + + + i=47 + + false + + i=16884 + + + + + i=47 + + false + + i=16923 + + + + 0 + + + + i=14479 + + Method_4 + + 0 + AddPublishedDataItems + + + + AddPublishedDataItems + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=14493 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14480 + + + + + i=46 + + false + + i=14481 + + + + true + true + + + + i=14480 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14479 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14481 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14479 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14482 + + Method_4 + + 0 + AddPublishedEvents + + + + AddPublishedEvents + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=14496 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14483 + + + + + i=46 + + false + + i=14484 + + + + true + true + + + + i=14483 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14482 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14484 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14482 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14485 + + Method_4 + + 0 + RemovePublishedDataSet + + + + RemovePublishedDataSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=14499 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14486 + + + + true + true + + + + i=14486 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14485 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14487 + + Object_1 + + 0 + <PublishedDataSetName> + + + + <PublishedDataSetName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=14509 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=14489 + + + + + i=46 + + false + + i=15221 + + + + 0 + + + + i=14489 + + Variable_2 + + 0 + ConfigurationVersion + + + + ConfigurationVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14487 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14593 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14493 + + Method_4 + + 0 + AddPublishedDataItems + + + + AddPublishedDataItems + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=14493 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14494 + + + + + i=46 + + false + + i=14495 + + + + true + true + + + + i=14494 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14493 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14495 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14493 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14496 + + Method_4 + + 0 + AddPublishedEvents + + + + AddPublishedEvents + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=14496 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14497 + + + + + i=46 + + false + + i=14498 + + + + true + true + + + + i=14497 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14496 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14498 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14496 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14499 + + Method_4 + + 0 + RemovePublishedDataSet + + + + RemovePublishedDataSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=14499 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14500 + + + + true + true + + + + i=14500 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14499 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14509 + + ObjectType_8 + + 0 + PublishedDataSetType + + + + PublishedDataSetType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=14936 + + false + + i=15222 + + + + + i=46 + + false + + i=14519 + + + + + i=46 + + false + + i=15229 + + + + + i=46 + + false + + i=16759 + + + + + i=47 + + false + + i=15481 + + + + + i=45 + + false + + i=14534 + + + + + i=45 + + false + + i=14572 + + + + false + + + + i=14519 + + Variable_2 + + 0 + ConfigurationVersion + + + + ConfigurationVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14509 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14593 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14523 + + DataType_64 + + 0 + DataSetMetaDataType + + + + DataSetMetaDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15534 + + + + + i=38 + + false + + i=124 + + + + + i=38 + + false + + i=14794 + + + + + i=38 + + false + + i=15050 + + + + false + + + + + i=14524 + + DataType_64 + + 0 + FieldMetaData + + + + FieldMetaData + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=14839 + + + + + i=38 + + false + + i=14795 + + + + + i=38 + + false + + i=15051 + + + + false + + + + + i=14525 + + DataType_64 + + 0 + DataTypeDescription + + + + DataTypeDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15487 + + + + + i=45 + + false + + i=15488 + + + + + i=45 + + false + + i=15005 + + + + + i=38 + + false + + i=125 + + + + + i=38 + + false + + i=14796 + + + + + i=38 + + false + + i=15057 + + + + true + + + + + i=14528 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=98 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Structure + + + + StructureWithOptionalFields + + + + Union + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14533 + + DataType_64 + + 0 + KeyValuePair + + + + KeyValuePair + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=14846 + + + + + i=38 + + false + + i=14802 + + + + + i=38 + + false + + i=15041 + + + + false + + + + + i=14534 + + ObjectType_8 + + 0 + PublishedDataItemsType + + + + PublishedDataItemsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14509 + + + + + i=46 + + false + + i=14548 + + + + + i=47 + + false + + i=14555 + + + + + i=47 + + false + + i=14558 + + + + false + + + + i=14548 + + Variable_2 + + 0 + PublishedData + + + + PublishedData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14534 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14273 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14555 + + Method_4 + + 0 + AddVariables + + + + AddVariables + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14534 + + + + + i=40 + + false + + i=14555 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14556 + + + + + i=46 + + false + + i=14557 + + + + true + true + + + + i=14556 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14555 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14557 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14555 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14558 + + Method_4 + + 0 + RemoveVariables + + + + RemoveVariables + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14534 + + + + + i=40 + + false + + i=14558 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=14559 + + + + + i=46 + + false + + i=14560 + + + + true + true + + + + i=14559 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14558 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + VariablesToRemove + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14560 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14558 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + RemoveResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14572 + + ObjectType_8 + + 0 + PublishedEventsType + + + + PublishedEventsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14509 + + + + + i=46 + + false + + i=14586 + + + + + i=46 + + false + + i=14587 + + + + + i=46 + + false + + i=14588 + + + + + i=47 + + false + + i=15052 + + + + false + + + + i=14586 + + Variable_2 + + 0 + EventNotifier + + + + EventNotifier + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14572 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14587 + + Variable_2 + + 0 + SelectedFields + + + + SelectedFields + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14572 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=601 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14588 + + Variable_2 + + 0 + Filter + + + + Filter + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14572 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=586 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14593 + + DataType_64 + + 0 + ConfigurationVersionDataType + + + + ConfigurationVersionDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=14847 + + + + + i=38 + + false + + i=14803 + + + + + i=38 + + false + + i=15049 + + + + false + + + + + i=14595 + + Variable_2 + + 0 + PublisherId + + + + PublisherId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14209 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14600 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=14601 + + + + 0 + + + + i=14601 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14600 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14643 + + ObjectType_8 + + 0 + PubSubStatusType + + + + PubSubStatusType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=14644 + + + + + i=47 + + false + + i=14645 + + + + + i=47 + + false + + i=14646 + + + + false + + + + i=14644 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14643 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14645 + + Method_4 + + 0 + Enable + + + + Enable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14643 + + + + + i=40 + + false + + i=14645 + + + + + i=37 + + false + + i=80 + + + + true + true + + + + i=14646 + + Method_4 + + 0 + Disable + + + + Disable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14643 + + + + + i=40 + + false + + i=14646 + + + + + i=37 + + false + + i=80 + + + + true + true + + + + i=14647 + + DataType_64 + + 0 + PubSubState + + + + PubSubState + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=14648 + + + + false + + + + + i=14648 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14647 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Disabled + + + + Paused + + + + Operational + + + + Error + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=14744 + + DataType_64 + + 0 + FieldTargetDataType + + + + FieldTargetDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=14848 + + + + + i=38 + + false + + i=14804 + + + + + i=38 + + false + + i=15061 + + + + false + + + + + i=14794 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14523 + + + + + i=39 + + false + + i=14805 + + + + 0 + + + + i=14795 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14524 + + + + + i=39 + + false + + i=14808 + + + + 0 + + + + i=14796 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14525 + + + + + i=39 + + false + + i=14811 + + + + 0 + + + + i=14797 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=97 + + + + + i=39 + + false + + i=18166 + + + + 0 + + + + i=14798 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=99 + + + + + i=39 + + false + + i=18172 + + + + 0 + + + + i=14799 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=100 + + + + + i=39 + + false + + i=18175 + + + + 0 + + + + i=14800 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=101 + + + + + i=39 + + false + + i=18169 + + + + 0 + + + + i=14801 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=102 + + + + + i=39 + + false + + i=14826 + + + + 0 + + + + i=14802 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14533 + + + + + i=39 + + false + + i=14829 + + + + 0 + + + + i=14803 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14593 + + + + + i=39 + + false + + i=14832 + + + + 0 + + + + i=14804 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14744 + + + + + i=39 + + false + + i=14835 + + + + 0 + + + + i=14805 + + Variable_2 + + 0 + DataSetMetaDataType + + + + DataSetMetaDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetMetaDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14808 + + Variable_2 + + 0 + FieldMetaData + + + + FieldMetaData + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='FieldMetaData'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14811 + + Variable_2 + + 0 + DataTypeDescription + + + + DataTypeDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataTypeDescription'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14826 + + Variable_2 + + 0 + EnumField + + + + EnumField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EnumField'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14829 + + Variable_2 + + 0 + KeyValuePair + + + + KeyValuePair + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='KeyValuePair'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14832 + + Variable_2 + + 0 + ConfigurationVersionDataType + + + + ConfigurationVersionDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ConfigurationVersionDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14835 + + Variable_2 + + 0 + FieldTargetDataType + + + + FieldTargetDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='FieldTargetDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14839 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14524 + + + + + i=39 + + false + + i=14852 + + + + 0 + + + + i=14844 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=101 + + + + + i=39 + + false + + i=18181 + + + + 0 + + + + i=14845 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=102 + + + + + i=39 + + false + + i=14870 + + + + 0 + + + + i=14846 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14533 + + + + + i=39 + + false + + i=14873 + + + + 0 + + + + i=14847 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14593 + + + + + i=39 + + false + + i=14876 + + + + 0 + + + + i=14848 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14744 + + + + + i=39 + + false + + i=21002 + + + + 0 + + + + i=14849 + + Variable_2 + + 0 + DataSetMetaDataType + + + + DataSetMetaDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetMetaDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14852 + + Variable_2 + + 0 + FieldMetaData + + + + FieldMetaData + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + FieldMetaData + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14855 + + Variable_2 + + 0 + DataTypeDescription + + + + DataTypeDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataTypeDescription + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14870 + + Variable_2 + + 0 + EnumField + + + + EnumField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EnumField + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14873 + + Variable_2 + + 0 + KeyValuePair + + + + KeyValuePair + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + KeyValuePair + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14876 + + Variable_2 + + 0 + ConfigurationVersionDataType + + + + ConfigurationVersionDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ConfigurationVersionDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14900 + + Variable_2 + + 0 + ExpirationLimit + + + + ExpirationLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=13225 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=14936 + + ReferenceType_32 + + 0 + DataSetToWriter + + + + DataSetToWriter + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=33 + + + + false + false + + + WriterToDataSet + + + + + i=15001 + + Variable_2 + + 0 + Deprecated + + + + Deprecated + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=72 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15002 + + Variable_2 + + 0 + MaxCharacters + + + + MaxCharacters + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15003 + + Variable_2 + + 0 + UrisVersion + + + + UrisVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=20998 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=15005 + + DataType_64 + + 0 + SimpleTypeDescription + + + + SimpleTypeDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14525 + + + + + i=38 + + false + + i=15421 + + + + + i=38 + + false + + i=15529 + + + + + i=38 + + false + + i=15700 + + + + false + + + + + i=15006 + + DataType_64 + + 0 + UABinaryFileDataType + + + + UABinaryFileDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15534 + + + + + i=38 + + false + + i=15422 + + + + + i=38 + + false + + i=15531 + + + + + i=38 + + false + + i=15714 + + + + false + + + + + i=15007 + + DataType_64 + + 0 + BrokerConnectionTransportDataType + + + + BrokerConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15618 + + + + + i=38 + + false + + i=15479 + + + + + i=38 + + false + + i=15579 + + + + + i=38 + + false + + i=15726 + + + + false + + + + + i=15008 + + DataType_64 + + 0 + BrokerTransportQualityOfService + + + + BrokerTransportQualityOfService + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=15009 + + + + false + + + + + i=15009 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15008 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + NotSpecified + + + + BestEffort + + + + AtLeastOnce + + + + AtMostOnce + + + + ExactlyOnce + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15010 + + Variable_2 + + 0 + KeyLifetime + + + + KeyLifetime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15011 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15012 + + Variable_2 + + 0 + MaxFutureKeyCount + + + + MaxFutureKeyCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15013 + + ObjectType_8 + + 0 + AuditConditionResetEventType + + + + AuditConditionResetEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + false + + + + i=15030 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=94 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Browse + + + + ReadRolePermissions + + + + WriteAttribute + + + + WriteRolePermissions + + + + WriteHistorizing + + + + Read + + + + Write + + + + ReadHistory + + + + InsertHistory + + + + ModifyHistory + + + + DeleteHistory + + + + ReceiveEvents + + + + Call + + + + AddReference + + + + RemoveReference + + + + DeleteNode + + + + AddNode + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15031 + + DataType_64 + + 0 + AccessLevelType + + + + AccessLevelType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=3 + + + + + i=46 + + false + + i=15032 + + + + false + + + + + i=15032 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15031 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + CurrentRead + + + + CurrentWrite + + + + HistoryRead + + + + HistoryWrite + + + + SemanticChange + + + + StatusWrite + + + + TimestampWrite + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15033 + + DataType_64 + + 0 + EventNotifierType + + + + EventNotifierType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=3 + + + + + i=46 + + false + + i=15034 + + + + false + + + + + i=15034 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15033 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + SubscribeToEvents + + + + Reserved + + + + HistoryRead + + + + HistoryWrite + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15035 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=95 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + SigningRequired + + + + EncryptionRequired + + + + SessionRequired + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15036 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=347 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15037 + + Variable_2 + + 0 + Deprecated + + + + Deprecated + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=7617 + + + + + i=40 + + false + + i=68 + + + + + + true + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15038 + + Variable_2 + + 0 + LastMethodInputValues + + + + LastMethodInputValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15039 + + Variable_2 + + 0 + Deprecated + + + + Deprecated + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8252 + + + + + i=40 + + false + + i=68 + + + + + + true + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15040 + + Variable_2 + + 0 + LastMethodOutputValues + + + + LastMethodOutputValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2399 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15041 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14533 + + + + 0 + + + + i=15042 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15634 + + + + 0 + + + + i=15043 + + Variable_2 + + 0 + MaxPastKeyCount + + + + MaxPastKeyCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15044 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12554 + + + + 0 + + + + i=15046 + + Variable_2 + + 0 + KeyLifetime + + + + KeyLifetime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15471 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15047 + + Variable_2 + + 0 + SecurityPolicyUri + + + + SecurityPolicyUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15471 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15048 + + Variable_2 + + 0 + MaxFutureKeyCount + + + + MaxFutureKeyCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15471 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15049 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14593 + + + + 0 + + + + i=15050 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14523 + + + + 0 + + + + i=15051 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14524 + + + + 0 + + + + i=15052 + + Method_4 + + 0 + ModifyFieldSelection + + + + ModifyFieldSelection + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14572 + + + + + i=40 + + false + + i=15052 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15053 + + + + + i=46 + + false + + i=15517 + + + + true + true + + + + i=15053 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15056 + + Variable_2 + + 0 + MaxPastKeyCount + + + + MaxPastKeyCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15471 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15057 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14525 + + + + 0 + + + + i=15058 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15487 + + + + 0 + + + + i=15059 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15488 + + + + 0 + + + + i=15060 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14273 + + + + 0 + + + + i=15061 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=14744 + + + + 0 + + + + i=15062 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=96 + + + + 0 + + + + i=15063 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=97 + + + + 0 + + + + i=15064 + + ObjectType_8 + + 0 + DatagramConnectionTransportType + + + + DatagramConnectionTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17721 + + + + + i=47 + + false + + i=15072 + + + + false + + + + i=15065 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=101 + + + + 0 + + + + i=15066 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=99 + + + + 0 + + + + i=15067 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=100 + + + + 0 + + + + i=15072 + + Object_1 + + 0 + DiscoveryAddress + + + + DiscoveryAddress + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15064 + + + + + i=40 + + false + + i=21145 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15154 + + + + 0 + + + + i=15081 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=296 + + + + 0 + + + + i=15082 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=7594 + + + + 0 + + + + i=15083 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=102 + + + + 0 + + + + i=15084 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12755 + + + + 0 + + + + i=15085 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12756 + + + + 0 + + + + i=15086 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=8912 + + + + 0 + + + + i=15087 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=308 + + + + 0 + + + + i=15095 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12189 + + + + 0 + + + + i=15098 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=304 + + + + 0 + + + + i=15099 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=312 + + + + 0 + + + + i=15102 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=432 + + + + 0 + + + + i=15105 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12890 + + + + 0 + + + + i=15106 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12891 + + + + 0 + + + + i=15108 + + ObjectType_8 + + 0 + SubscribedDataSetType + + + + SubscribedDataSetType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=15111 + + + + + i=45 + + false + + i=15127 + + + + false + + + + i=15109 + + ObjectType_8 + + 0 + ChoiceStateType + + + + ChoiceStateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2307 + + + + false + + + + i=15111 + + ObjectType_8 + + 0 + TargetVariablesType + + + + TargetVariablesType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15108 + + + + + i=46 + + false + + i=15114 + + + + + i=47 + + false + + i=15115 + + + + + i=47 + + false + + i=15118 + + + + false + + + + i=15112 + + ReferenceType_32 + + 0 + HasGuard + + + + HasGuard + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + GuardOf + + + + + i=15113 + + VariableType_16 + + 0 + GuardVariableType + + + + GuardVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=45 + + false + + i=15128 + + + + + i=45 + + false + + i=15317 + + + + + + + + + + i=21 + + -1 + + false + + + + i=15114 + + Variable_2 + + 0 + TargetVariables + + + + TargetVariables + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15111 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14744 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15115 + + Method_4 + + 0 + AddTargetVariables + + + + AddTargetVariables + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15111 + + + + + i=40 + + false + + i=15115 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15116 + + + + + i=46 + + false + + i=15117 + + + + true + true + + + + i=15116 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15115 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetVariablesToAdd + + i=14744 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15117 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15115 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15118 + + Method_4 + + 0 + RemoveTargetVariables + + + + RemoveTargetVariables + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15111 + + + + + i=40 + + false + + i=15118 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15119 + + + + + i=46 + + false + + i=15120 + + + + true + true + + + + i=15119 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15118 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetsToRemove + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15120 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15118 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RemoveResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15127 + + ObjectType_8 + + 0 + SubscribedDataSetMirrorType + + + + SubscribedDataSetMirrorType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15108 + + + + false + + + + i=15128 + + VariableType_16 + + 0 + ExpressionGuardVariableType + + + + ExpressionGuardVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15113 + + + + + i=46 + + false + + i=15129 + + + + + + + + + + i=21 + + -1 + + false + + + + i=15129 + + Variable_2 + + 0 + Expression + + + + Expression + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15128 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=586 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15136 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=344 + + + + 0 + + + + i=15140 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=316 + + + + 0 + + + + i=15141 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=319 + + + + 0 + + + + i=15142 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=322 + + + + 0 + + + + i=15143 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=325 + + + + 0 + + + + i=15144 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=938 + + + + 0 + + + + i=15154 + + Variable_2 + + 0 + NetworkInterface + + + + NetworkInterface + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15072 + + + + + i=40 + + false + + i=16309 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17579 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15155 + + ObjectType_8 + + 0 + BrokerConnectionTransportType + + + + BrokerConnectionTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17721 + + + + + i=46 + + false + + i=15156 + + + + + i=46 + + false + + i=15178 + + + + false + + + + i=15156 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15155 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15165 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=376 + + + + 0 + + + + i=15169 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=379 + + + + 0 + + + + i=15172 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=382 + + + + 0 + + + + i=15175 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=385 + + + + 0 + + + + i=15178 + + Variable_2 + + 0 + AuthenticationProfileUri + + + + AuthenticationProfileUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15155 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15181 + + ObjectType_8 + + 0 + UserCredentialCertificateType + + + + UserCredentialCertificateType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=12556 + + + + false + + + + i=15188 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=537 + + + + 0 + + + + i=15189 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=540 + + + + 0 + + + + i=15199 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=331 + + + + 0 + + + + i=15204 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=583 + + + + 0 + + + + i=15205 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=586 + + + + 0 + + + + i=15206 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=589 + + + + 0 + + + + i=15207 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=592 + + + + 0 + + + + i=15208 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=595 + + + + 0 + + + + i=15209 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=598 + + + + 0 + + + + i=15210 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=601 + + + + 0 + + + + i=15215 + + Method_4 + + 0 + GetSecurityKeys + + + + GetSecurityKeys + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=15907 + + + + + i=46 + + false + + i=15216 + + + + + i=46 + + false + + i=15217 + + + + true + true + + + + i=15216 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15215 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15217 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15215 + + + + + i=40 + + false + + i=68 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15221 + + Variable_2 + + 0 + DataSetMetaData + + + + DataSetMetaData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14487 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14523 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15222 + + Object_1 + + 0 + <DataSetWriterName> + + + + <DataSetWriterName> + + + 0 + 0 + + + 0 + + + + i=14936 + + true + + i=14509 + + + + + i=40 + + false + + i=15298 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=16720 + + + + + i=46 + + false + + i=16721 + + + + + i=46 + + false + + i=17482 + + + + + i=47 + + false + + i=15223 + + + + 0 + + + + i=15223 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15222 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15224 + + + + 0 + + + + i=15224 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15223 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15229 + + Variable_2 + + 0 + DataSetMetaData + + + + DataSetMetaData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14509 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14523 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15246 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21136 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15247 + + Variable_2 + + 0 + AuthenticationProfileUri + + + + AuthenticationProfileUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21136 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15249 + + Variable_2 + + 0 + RequestedDeliveryGuarantee + + + + RequestedDeliveryGuarantee + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21136 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15008 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15250 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21138 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15251 + + Variable_2 + + 0 + AuthenticationProfileUri + + + + AuthenticationProfileUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21138 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15265 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14232 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15266 + + + + 0 + + + + i=15266 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15265 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15273 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=659 + + + + 0 + + + + i=15293 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=719 + + + + 0 + + + + i=15295 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=725 + + + + 0 + + + + i=15296 + + ReferenceType_32 + + 0 + HasDataSetWriter + + + + HasDataSetWriter + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + IsWriterInGroup + + + + + i=15297 + + ReferenceType_32 + + 0 + HasDataSetReader + + + + HasDataSetReader + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + IsReaderInGroup + + + + + i=15298 + + ObjectType_8 + + 0 + DataSetWriterType + + + + DataSetWriterType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=21092 + + + + + i=46 + + false + + i=21093 + + + + + i=46 + + false + + i=21094 + + + + + i=46 + + false + + i=17493 + + + + + i=47 + + false + + i=15303 + + + + + i=47 + + false + + i=21095 + + + + + i=47 + + false + + i=15299 + + + + + i=47 + + false + + i=19550 + + + + false + + + + i=15299 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15298 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15300 + + + + 0 + + + + i=15300 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15299 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15303 + + Object_1 + + 0 + TransportSettings + + + + TransportSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15298 + + + + + i=40 + + false + + i=15305 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=15304 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=948 + + + + 0 + + + + i=15305 + + ObjectType_8 + + 0 + DataSetWriterTransportType + + + + DataSetWriterTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=21138 + + + + true + + + + i=15306 + + ObjectType_8 + + 0 + DataSetReaderType + + + + DataSetReaderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=21097 + + + + + i=46 + + false + + i=21098 + + + + + i=46 + + false + + i=21099 + + + + + i=46 + + false + + i=21100 + + + + + i=46 + + false + + i=21101 + + + + + i=46 + + false + + i=21102 + + + + + i=46 + + false + + i=17563 + + + + + i=46 + + false + + i=17564 + + + + + i=46 + + false + + i=15932 + + + + + i=46 + + false + + i=15933 + + + + + i=46 + + false + + i=15934 + + + + + i=46 + + false + + i=17494 + + + + + i=47 + + false + + i=15311 + + + + + i=47 + + false + + i=21103 + + + + + i=47 + + false + + i=15307 + + + + + i=47 + + false + + i=19609 + + + + + i=47 + + false + + i=15316 + + + + + i=47 + + false + + i=17386 + + + + + i=47 + + false + + i=17389 + + + + false + + + + i=15307 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15308 + + + + 0 + + + + i=15308 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15307 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15311 + + Object_1 + + 0 + TransportSettings + + + + TransportSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=15319 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=15316 + + Object_1 + + 0 + SubscribedDataSet + + + + SubscribedDataSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=15108 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=15317 + + VariableType_16 + + 0 + ElseGuardVariableType + + + + ElseGuardVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15113 + + + + + + + + + + i=21 + + -1 + + false + + + + i=15318 + + VariableType_16 + + 0 + BaseAnalogType + + + + BaseAnalogType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2365 + + + + + i=46 + + false + + i=17567 + + + + + i=46 + + false + + i=17568 + + + + + i=46 + + false + + i=17569 + + + + + i=45 + + false + + i=2368 + + + + + i=45 + + false + + i=17497 + + + + + + + + + + i=26 + + -2 + + false + + + + i=15319 + + ObjectType_8 + + 0 + DataSetReaderTransportType + + + + DataSetReaderTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=21142 + + + + true + + + + i=15330 + + Variable_2 + + 0 + RequestedDeliveryGuarantee + + + + RequestedDeliveryGuarantee + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21138 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15008 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15334 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21142 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15349 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=920 + + + + 0 + + + + i=15361 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=338 + + + + 0 + + + + i=15362 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=853 + + + + 0 + + + + i=15363 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=11943 + + + + 0 + + + + i=15364 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=11944 + + + + 0 + + + + i=15365 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=856 + + + + 0 + + + + i=15366 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=859 + + + + 0 + + + + i=15367 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=862 + + + + 0 + + + + i=15368 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=865 + + + + 0 + + + + i=15369 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=868 + + + + 0 + + + + i=15370 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=871 + + + + 0 + + + + i=15371 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=299 + + + + 0 + + + + i=15372 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=874 + + + + 0 + + + + i=15373 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=877 + + + + 0 + + + + i=15374 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=897 + + + + 0 + + + + i=15375 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=884 + + + + 0 + + + + i=15376 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=887 + + + + 0 + + + + i=15377 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12171 + + + + 0 + + + + i=15378 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12172 + + + + 0 + + + + i=15379 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12079 + + + + 0 + + + + i=15380 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=12080 + + + + 0 + + + + i=15381 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=894 + + + + 0 + + + + i=15382 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=891 + + + + 0 + + + + i=15383 + + VariableType_16 + + 0 + ProgramDiagnostic2Type + + + + ProgramDiagnostic2Type + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=15384 + + + + + i=47 + + false + + i=15385 + + + + + i=47 + + false + + i=15386 + + + + + i=46 + + false + + i=15387 + + + + + i=47 + + false + + i=15388 + + + + + i=47 + + false + + i=15389 + + + + + i=47 + + false + + i=15390 + + + + + i=47 + + false + + i=15391 + + + + + i=47 + + false + + i=15392 + + + + + i=47 + + false + + i=15393 + + + + + i=47 + + false + + i=15394 + + + + + i=47 + + false + + i=15395 + + + + + + + + + + i=15396 + + -1 + + false + + + + i=15384 + + Variable_2 + + 0 + CreateSessionId + + + + CreateSessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15385 + + Variable_2 + + 0 + CreateClientName + + + + CreateClientName + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15386 + + Variable_2 + + 0 + InvocationCreationTime + + + + InvocationCreationTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15387 + + Variable_2 + + 0 + LastTransitionTime + + + + LastTransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15383 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15388 + + Variable_2 + + 0 + LastMethodCall + + + + LastMethodCall + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15389 + + Variable_2 + + 0 + LastMethodSessionId + + + + LastMethodSessionId + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15390 + + Variable_2 + + 0 + LastMethodInputArguments + + + + LastMethodInputArguments + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15391 + + Variable_2 + + 0 + LastMethodOutputArguments + + + + LastMethodOutputArguments + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15392 + + Variable_2 + + 0 + LastMethodInputValues + + + + LastMethodInputValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15393 + + Variable_2 + + 0 + LastMethodOutputValues + + + + LastMethodOutputValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15394 + + Variable_2 + + 0 + LastMethodCallTime + + + + LastMethodCallTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15395 + + Variable_2 + + 0 + LastMethodReturnStatus + + + + LastMethodReturnStatus + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15383 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15396 + + DataType_64 + + 0 + ProgramDiagnostic2DataType + + + + ProgramDiagnostic2DataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15397 + + + + + i=38 + + false + + i=15401 + + + + + i=38 + + false + + i=15405 + + + + false + + + + + i=15397 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15396 + + + + + i=39 + + false + + i=15398 + + + + 0 + + + + i=15398 + + Variable_2 + + 0 + ProgramDiagnostic2DataType + + + + ProgramDiagnostic2DataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ProgramDiagnostic2DataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15401 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15396 + + + + + i=39 + + false + + i=15402 + + + + 0 + + + + i=15402 + + Variable_2 + + 0 + ProgramDiagnostic2DataType + + + + ProgramDiagnostic2DataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ProgramDiagnostic2DataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15405 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15396 + + + + 0 + + + + i=15406 + + DataType_64 + + 0 + AccessLevelExType + + + + AccessLevelExType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15407 + + + + false + + + + + i=15407 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + CurrentRead + + + + CurrentWrite + + + + HistoryRead + + + + HistoryWrite + + + + SemanticChange + + + + StatusWrite + + + + TimestampWrite + + + + Reserved + + + + NonatomicRead + + + + NonatomicWrite + + + + WriteFullArrayOnly + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15410 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15411 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15412 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15644 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15413 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15644 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15414 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15656 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15415 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15656 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15416 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15668 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15417 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15668 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15418 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15680 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15419 + + Variable_2 + + 0 + AuthenticationProfileUri + + + + AuthenticationProfileUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21142 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15420 + + Variable_2 + + 0 + RequestedDeliveryGuarantee + + + + RequestedDeliveryGuarantee + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21142 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15008 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15421 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15005 + + + + + i=39 + + false + + i=15501 + + + + 0 + + + + i=15422 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15006 + + + + + i=39 + + false + + i=15521 + + + + 0 + + + + i=15423 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15680 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15424 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16036 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15425 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16036 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15426 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15692 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15427 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15692 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15428 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15716 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15429 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15716 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15430 + + Variable_2 + + 0 + ApplicationsExclude + + + + ApplicationsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15704 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15440 + + Method_4 + + 0 + GetSecurityGroup + + + + GetSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=15910 + + + + + i=46 + + false + + i=15441 + + + + + i=46 + + false + + i=15442 + + + + true + true + + + + i=15441 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15440 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15442 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15440 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15443 + + Object_1 + + 0 + SecurityGroups + + + + SecurityGroups + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=15452 + + + + + i=47 + + false + + i=15444 + + + + + i=47 + + false + + i=15447 + + + + 0 + + + + i=15444 + + Method_4 + + 0 + AddSecurityGroup + + + + AddSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15443 + + + + + i=40 + + false + + i=15461 + + + + + i=46 + + false + + i=15445 + + + + + i=46 + + false + + i=15446 + + + + true + true + + + + i=15445 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15444 + + + + + i=40 + + false + + i=68 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15446 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15444 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15447 + + Method_4 + + 0 + RemoveSecurityGroup + + + + RemoveSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15443 + + + + + i=40 + + false + + i=15464 + + + + + i=46 + + false + + i=15448 + + + + true + true + + + + i=15448 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15447 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15452 + + ObjectType_8 + + 0 + SecurityGroupFolderType + + + + SecurityGroupFolderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=35 + + false + + i=15453 + + + + + i=47 + + false + + i=15459 + + + + + i=47 + + false + + i=15461 + + + + + i=47 + + false + + i=15464 + + + + false + + + + i=15453 + + Object_1 + + 0 + <SecurityGroupFolderName> + + + + <SecurityGroupFolderName> + + + 0 + 0 + + + 0 + + + + i=35 + + true + + i=15452 + + + + + i=40 + + false + + i=15452 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=15454 + + + + + i=47 + + false + + i=15457 + + + + 0 + + + + i=15454 + + Method_4 + + 0 + AddSecurityGroup + + + + AddSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15453 + + + + + i=40 + + false + + i=15461 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15455 + + + + + i=46 + + false + + i=15456 + + + + true + true + + + + i=15455 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15454 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15456 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15454 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15457 + + Method_4 + + 0 + RemoveSecurityGroup + + + + RemoveSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15453 + + + + + i=40 + + false + + i=15464 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15458 + + + + true + true + + + + i=15458 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15457 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15459 + + Object_1 + + 0 + <SecurityGroupName> + + + + <SecurityGroupName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15452 + + + + + i=40 + + false + + i=15471 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=15460 + + + + + i=46 + + false + + i=15010 + + + + + i=46 + + false + + i=15011 + + + + + i=46 + + false + + i=15012 + + + + + i=46 + + false + + i=15043 + + + + 0 + + + + i=15460 + + Variable_2 + + 0 + SecurityGroupId + + + + SecurityGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15461 + + Method_4 + + 0 + AddSecurityGroup + + + + AddSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15452 + + + + + i=40 + + false + + i=15461 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15462 + + + + + i=46 + + false + + i=15463 + + + + true + true + + + + i=15462 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15461 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15463 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15461 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15464 + + Method_4 + + 0 + RemoveSecurityGroup + + + + RemoveSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15452 + + + + + i=40 + + false + + i=15464 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15465 + + + + true + true + + + + i=15465 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15464 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15471 + + ObjectType_8 + + 0 + SecurityGroupType + + + + SecurityGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=15472 + + + + + i=46 + + false + + i=15046 + + + + + i=46 + + false + + i=15047 + + + + + i=46 + + false + + i=15048 + + + + + i=46 + + false + + i=15056 + + + + false + + + + i=15472 + + Variable_2 + + 0 + SecurityGroupId + + + + SecurityGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15471 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15479 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15007 + + + + + i=39 + + false + + i=15524 + + + + 0 + + + + i=15480 + + DataType_64 + + 0 + WriterGroupDataType + + + + WriterGroupDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15609 + + + + + i=38 + + false + + i=21150 + + + + + i=38 + + false + + i=21174 + + + + + i=38 + + false + + i=21198 + + + + false + + + + + i=15481 + + Object_1 + + 0 + ExtensionFields + + + + ExtensionFields + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14509 + + + + + i=40 + + false + + i=15489 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=15482 + + + + + i=47 + + false + + i=15485 + + + + 0 + + + + i=15482 + + Method_4 + + 0 + AddExtensionField + + + + AddExtensionField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15481 + + + + + i=40 + + false + + i=15491 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15483 + + + + + i=46 + + false + + i=15484 + + + + true + true + + + + i=15483 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15482 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FieldName + + i=20 + + -1 + + + + + + + i=297 + + + + FieldValue + + i=24 + + -2 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15484 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15482 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15485 + + Method_4 + + 0 + RemoveExtensionField + + + + RemoveExtensionField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15481 + + + + + i=40 + + false + + i=15494 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15486 + + + + true + true + + + + i=15486 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15485 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15487 + + DataType_64 + + 0 + StructureDescription + + + + StructureDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14525 + + + + + i=38 + + false + + i=126 + + + + + i=38 + + false + + i=15589 + + + + + i=38 + + false + + i=15058 + + + + false + + + + + i=15488 + + DataType_64 + + 0 + EnumDescription + + + + EnumDescription + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14525 + + + + + i=38 + + false + + i=127 + + + + + i=38 + + false + + i=15590 + + + + + i=38 + + false + + i=15059 + + + + false + + + + + i=15489 + + ObjectType_8 + + 0 + ExtensionFieldsType + + + + ExtensionFieldsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=15490 + + + + + i=47 + + false + + i=15491 + + + + + i=47 + + false + + i=15494 + + + + false + + + + i=15490 + + Variable_2 + + 0 + <ExtensionFieldName> + + + + <ExtensionFieldName> + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15489 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=11508 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15491 + + Method_4 + + 0 + AddExtensionField + + + + AddExtensionField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15489 + + + + + i=40 + + false + + i=15491 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15492 + + + + + i=46 + + false + + i=15493 + + + + true + true + + + + i=15492 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15491 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FieldName + + i=20 + + -1 + + + + + + + i=297 + + + + FieldValue + + i=24 + + -2 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15493 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15491 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15494 + + Method_4 + + 0 + RemoveExtensionField + + + + RemoveExtensionField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15489 + + + + + i=40 + + false + + i=15494 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15495 + + + + true + true + + + + i=15495 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15494 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15501 + + Variable_2 + + 0 + SimpleTypeDescription + + + + SimpleTypeDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SimpleTypeDescription + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15502 + + DataType_64 + + 0 + NetworkAddressDataType + + + + NetworkAddressDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15510 + + + + + i=38 + + false + + i=21151 + + + + + i=38 + + false + + i=21175 + + + + + i=38 + + false + + i=21199 + + + + true + + + + + i=15510 + + DataType_64 + + 0 + NetworkAddressUrlDataType + + + + NetworkAddressUrlDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15502 + + + + + i=38 + + false + + i=21152 + + + + + i=38 + + false + + i=21176 + + + + + i=38 + + false + + i=21200 + + + + false + + + + + i=15517 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15052 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15520 + + DataType_64 + + 0 + ReaderGroupDataType + + + + ReaderGroupDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15609 + + + + + i=38 + + false + + i=21153 + + + + + i=38 + + false + + i=21177 + + + + + i=38 + + false + + i=21201 + + + + false + + + + + i=15521 + + Variable_2 + + 0 + UABinaryFileDataType + + + + UABinaryFileDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UABinaryFileDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15524 + + Variable_2 + + 0 + BrokerConnectionTransportDataType + + + + BrokerConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + BrokerConnectionTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15527 + + Variable_2 + + 0 + EndpointsExclude + + + + EndpointsExclude + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15704 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15528 + + DataType_64 + + 0 + EndpointType + + + + EndpointType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15671 + + + + + i=38 + + false + + i=15949 + + + + + i=38 + + false + + i=16150 + + + + false + + + + + i=15529 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15005 + + + + + i=39 + + false + + i=15585 + + + + 0 + + + + i=15530 + + DataType_64 + + 0 + PubSubConfigurationDataType + + + + PubSubConfigurationDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=21154 + + + + + i=38 + + false + + i=21178 + + + + + i=38 + + false + + i=21202 + + + + false + + + + + i=15531 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15006 + + + + + i=39 + + false + + i=15588 + + + + 0 + + + + i=15532 + + DataType_64 + + 0 + DatagramWriterGroupTransportDataType + + + + DatagramWriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15611 + + + + + i=38 + + false + + i=21155 + + + + + i=38 + + false + + i=21179 + + + + + i=38 + + false + + i=21203 + + + + false + + + + + i=15533 + + Variable_2 + + 0 + NetworkInterface + + + + NetworkInterface + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14423 + + + + + i=40 + + false + + i=16309 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17503 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15534 + + DataType_64 + + 0 + DataTypeSchemaHeader + + + + DataTypeSchemaHeader + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15006 + + + + + i=45 + + false + + i=14523 + + + + + i=38 + + false + + i=15676 + + + + + i=38 + + false + + i=15950 + + + + + i=38 + + false + + i=16151 + + + + true + + + + + i=15535 + + ObjectType_8 + + 0 + PubSubStatusEventType + + + + PubSubStatusEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2130 + + + + + i=46 + + false + + i=15545 + + + + + i=46 + + false + + i=15546 + + + + + i=46 + + false + + i=15547 + + + + + i=45 + + false + + i=15548 + + + + + i=45 + + false + + i=15563 + + + + true + + + + i=15545 + + Variable_2 + + 0 + ConnectionId + + + + ConnectionId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15535 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15546 + + Variable_2 + + 0 + GroupId + + + + GroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15535 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15547 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15535 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15548 + + ObjectType_8 + + 0 + PubSubTransportLimitsExceedEventType + + + + PubSubTransportLimitsExceedEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15535 + + + + + i=46 + + false + + i=15561 + + + + + i=46 + + false + + i=15562 + + + + true + + + + i=15561 + + Variable_2 + + 0 + Actual + + + + Actual + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15548 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15562 + + Variable_2 + + 0 + Maximum + + + + Maximum + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15548 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15563 + + ObjectType_8 + + 0 + PubSubCommunicationFailureEventType + + + + PubSubCommunicationFailureEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15535 + + + + + i=46 + + false + + i=15576 + + + + true + + + + i=15576 + + Variable_2 + + 0 + Error + + + + Error + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15563 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15577 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15904 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + PromotedField + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15578 + + DataType_64 + + 0 + PublishedDataSetDataType + + + + PublishedDataSetDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15677 + + + + + i=38 + + false + + i=15951 + + + + + i=38 + + false + + i=16152 + + + + false + + + + + i=15579 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15007 + + + + + i=39 + + false + + i=15640 + + + + 0 + + + + i=15580 + + DataType_64 + + 0 + PublishedDataSetSourceDataType + + + + PublishedDataSetSourceDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15581 + + + + + i=45 + + false + + i=15582 + + + + + i=38 + + false + + i=15678 + + + + + i=38 + + false + + i=15952 + + + + + i=38 + + false + + i=16153 + + + + true + + + + + i=15581 + + DataType_64 + + 0 + PublishedDataItemsDataType + + + + PublishedDataItemsDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15580 + + + + + i=38 + + false + + i=15679 + + + + + i=38 + + false + + i=15953 + + + + + i=38 + + false + + i=16154 + + + + false + + + + + i=15582 + + DataType_64 + + 0 + PublishedEventsDataType + + + + PublishedEventsDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15580 + + + + + i=38 + + false + + i=15681 + + + + + i=38 + + false + + i=15954 + + + + + i=38 + + false + + i=16155 + + + + false + + + + + i=15583 + + DataType_64 + + 0 + DataSetFieldContentMask + + + + DataSetFieldContentMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15584 + + + + false + + + + + i=15584 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15583 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + StatusCode + + + + SourceTimestamp + + + + ServerTimestamp + + + + SourcePicoSeconds + + + + ServerPicoSeconds + + + + RawData + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15585 + + Variable_2 + + 0 + SimpleTypeDescription + + + + SimpleTypeDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SimpleTypeDescription'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15588 + + Variable_2 + + 0 + UABinaryFileDataType + + + + UABinaryFileDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UABinaryFileDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15589 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15487 + + + + + i=39 + + false + + i=15591 + + + + 0 + + + + i=15590 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15488 + + + + + i=39 + + false + + i=15594 + + + + 0 + + + + i=15591 + + Variable_2 + + 0 + StructureDescription + + + + StructureDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='StructureDescription'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15594 + + Variable_2 + + 0 + EnumDescription + + + + EnumDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EnumDescription'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15597 + + DataType_64 + + 0 + DataSetWriterDataType + + + + DataSetWriterDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15682 + + + + + i=38 + + false + + i=15955 + + + + + i=38 + + false + + i=16156 + + + + false + + + + + i=15598 + + DataType_64 + + 0 + DataSetWriterTransportDataType + + + + DataSetWriterTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15669 + + + + + i=38 + + false + + i=15683 + + + + + i=38 + + false + + i=15956 + + + + + i=38 + + false + + i=16157 + + + + true + + + + + i=15599 + + Variable_2 + + 0 + StructureDescription + + + + StructureDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + StructureDescription + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15602 + + Variable_2 + + 0 + EnumDescription + + + + EnumDescription + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EnumDescription + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15605 + + DataType_64 + + 0 + DataSetWriterMessageDataType + + + + DataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15652 + + + + + i=45 + + false + + i=15664 + + + + + i=38 + + false + + i=15688 + + + + + i=38 + + false + + i=15987 + + + + + i=38 + + false + + i=16158 + + + + true + + + + + i=15606 + + Object_1 + + 0 + RoleSet + + + + RoleSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2268 + + + + + i=40 + + false + + i=15607 + + + + + i=47 + + false + + i=16301 + + + + + i=47 + + false + + i=16304 + + + + + i=47 + + false + + i=15644 + + + + + i=47 + + false + + i=15656 + + + + + i=47 + + false + + i=15668 + + + + + i=47 + + false + + i=15680 + + + + + i=47 + + false + + i=16036 + + + + + i=47 + + false + + i=15692 + + + + + i=47 + + false + + i=15716 + + + + + i=47 + + false + + i=15704 + + + + 0 + + + + i=15607 + + ObjectType_8 + + 0 + RoleSetType + + + + RoleSetType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=15608 + + + + + i=47 + + false + + i=15997 + + + + + i=47 + + false + + i=16000 + + + + false + + + + i=15608 + + Object_1 + + 0 + <RoleName> + + + + <RoleName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15607 + + + + + i=40 + + false + + i=15620 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=16162 + + + + 0 + + + + i=15609 + + DataType_64 + + 0 + PubSubGroupDataType + + + + PubSubGroupDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15480 + + + + + i=45 + + false + + i=15520 + + + + + i=38 + + false + + i=15689 + + + + + i=38 + + false + + i=15988 + + + + + i=38 + + false + + i=16159 + + + + true + + + + + i=15611 + + DataType_64 + + 0 + WriterGroupTransportDataType + + + + WriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15532 + + + + + i=45 + + false + + i=15667 + + + + + i=38 + + false + + i=15691 + + + + + i=38 + + false + + i=15990 + + + + + i=38 + + false + + i=16161 + + + + true + + + + + i=15616 + + DataType_64 + + 0 + WriterGroupMessageDataType + + + + WriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15645 + + + + + i=45 + + false + + i=15657 + + + + + i=38 + + false + + i=15693 + + + + + i=38 + + false + + i=15991 + + + + + i=38 + + false + + i=16280 + + + + true + + + + + i=15617 + + DataType_64 + + 0 + PubSubConnectionDataType + + + + PubSubConnectionDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15694 + + + + + i=38 + + false + + i=15992 + + + + + i=38 + + false + + i=16281 + + + + false + + + + + i=15618 + + DataType_64 + + 0 + ConnectionTransportDataType + + + + ConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=17467 + + + + + i=45 + + false + + i=15007 + + + + + i=38 + + false + + i=15695 + + + + + i=38 + + false + + i=15993 + + + + + i=38 + + false + + i=16282 + + + + true + + + + + i=15620 + + ObjectType_8 + + 0 + RoleType + + + + RoleType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=16173 + + + + + i=46 + + false + + i=16174 + + + + + i=46 + + false + + i=15410 + + + + + i=46 + + false + + i=16175 + + + + + i=46 + + false + + i=15411 + + + + + i=47 + + false + + i=15624 + + + + + i=47 + + false + + i=15626 + + + + + i=47 + + false + + i=16176 + + + + + i=47 + + false + + i=16178 + + + + + i=47 + + false + + i=16180 + + + + + i=47 + + false + + i=16182 + + + + false + + + + i=15621 + + DataType_64 + + 0 + ReaderGroupTransportDataType + + + + ReaderGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15701 + + + + + i=38 + + false + + i=15995 + + + + + i=38 + + false + + i=16284 + + + + true + + + + + i=15622 + + DataType_64 + + 0 + ReaderGroupMessageDataType + + + + ReaderGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15702 + + + + + i=38 + + false + + i=15996 + + + + + i=38 + + false + + i=16285 + + + + true + + + + + i=15623 + + DataType_64 + + 0 + DataSetReaderDataType + + + + DataSetReaderDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15703 + + + + + i=38 + + false + + i=16007 + + + + + i=38 + + false + + i=16286 + + + + false + + + + + i=15624 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15620 + + + + + i=40 + + false + + i=15624 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15625 + + + + true + true + + + + i=15625 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15626 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15620 + + + + + i=40 + + false + + i=15626 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15627 + + + + true + true + + + + i=15627 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15626 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15628 + + DataType_64 + + 0 + DataSetReaderTransportDataType + + + + DataSetReaderTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15670 + + + + + i=38 + + false + + i=15705 + + + + + i=38 + + false + + i=16008 + + + + + i=38 + + false + + i=16287 + + + + true + + + + + i=15629 + + DataType_64 + + 0 + DataSetReaderMessageDataType + + + + DataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15653 + + + + + i=45 + + false + + i=15665 + + + + + i=38 + + false + + i=15706 + + + + + i=38 + + false + + i=16009 + + + + + i=38 + + false + + i=16288 + + + + true + + + + + i=15630 + + DataType_64 + + 0 + SubscribedDataSetDataType + + + + SubscribedDataSetDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=15631 + + + + + i=45 + + false + + i=15635 + + + + + i=38 + + false + + i=15707 + + + + + i=38 + + false + + i=16010 + + + + + i=38 + + false + + i=16308 + + + + true + + + + + i=15631 + + DataType_64 + + 0 + TargetVariablesDataType + + + + TargetVariablesDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15630 + + + + + i=38 + + false + + i=15712 + + + + + i=38 + + false + + i=16011 + + + + + i=38 + + false + + i=16310 + + + + false + + + + + i=15632 + + DataType_64 + + 0 + IdentityCriteriaType + + + + IdentityCriteriaType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=15633 + + + + false + + + + + i=15633 + + Variable_2 + + 0 + EnumValues + + + + EnumValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15632 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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=7594 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15634 + + DataType_64 + + 0 + IdentityMappingRuleType + + + + IdentityMappingRuleType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=15736 + + + + + i=38 + + false + + i=15728 + + + + + i=38 + + false + + i=15042 + + + + false + + + + + i=15635 + + DataType_64 + + 0 + SubscribedDataSetMirrorDataType + + + + SubscribedDataSetMirrorDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15630 + + + + + i=38 + + false + + i=15713 + + + + + i=38 + + false + + i=16012 + + + + + i=38 + + false + + i=16311 + + + + false + + + + + i=15640 + + Variable_2 + + 0 + BrokerConnectionTransportDataType + + + + BrokerConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='BrokerConnectionTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15641 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20408 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Undefined + + + + AscendingWriterId + + + + AscendingWriterIdSingle + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15642 + + DataType_64 + + 0 + UadpNetworkMessageContentMask + + + + UadpNetworkMessageContentMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15643 + + + + false + + + + + i=15643 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15642 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + PublisherId + + + + GroupHeader + + + + WriterGroupId + + + + GroupVersion + + + + NetworkMessageNumber + + + + SequenceNumber + + + + PayloadHeader + + + + Timestamp + + + + PicoSeconds + + + + DataSetClassId + + + + PromotedFields + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15644 + + Object_1 + + 0 + Anonymous + + + + Anonymous + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16192 + + + + + i=46 + + false + + i=16193 + + + + + i=46 + + false + + i=15412 + + + + + i=46 + + false + + i=16194 + + + + + i=46 + + false + + i=15413 + + + + + i=47 + + false + + i=15648 + + + + + i=47 + + false + + i=15650 + + + + + i=47 + + false + + i=16195 + + + + + i=47 + + false + + i=16197 + + + + + i=47 + + false + + i=16199 + + + + + i=47 + + false + + i=16201 + + + + 0 + + + + i=15645 + + DataType_64 + + 0 + UadpWriterGroupMessageDataType + + + + UadpWriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15616 + + + + + i=38 + + false + + i=15715 + + + + + i=38 + + false + + i=16014 + + + + + i=38 + + false + + i=16323 + + + + false + + + + + i=15646 + + DataType_64 + + 0 + UadpDataSetMessageContentMask + + + + UadpDataSetMessageContentMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15647 + + + + false + + + + + i=15647 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15646 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Timestamp + + + + PicoSeconds + + + + Status + + + + MajorVersion + + + + MinorVersion + + + + SequenceNumber + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15648 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15644 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15649 + + + + true + true + + + + i=15649 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15648 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15650 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15644 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15651 + + + + true + true + + + + i=15651 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15650 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15652 + + DataType_64 + + 0 + UadpDataSetWriterMessageDataType + + + + UadpDataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15605 + + + + + i=38 + + false + + i=15717 + + + + + i=38 + + false + + i=16015 + + + + + i=38 + + false + + i=16391 + + + + false + + + + + i=15653 + + DataType_64 + + 0 + UadpDataSetReaderMessageDataType + + + + UadpDataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15629 + + + + + i=38 + + false + + i=15718 + + + + + i=38 + + false + + i=16016 + + + + + i=38 + + false + + i=16392 + + + + false + + + + + i=15654 + + DataType_64 + + 0 + JsonNetworkMessageContentMask + + + + JsonNetworkMessageContentMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15655 + + + + false + + + + + i=15655 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15654 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + NetworkMessageHeader + + + + DataSetMessageHeader + + + + SingleDataSetMessage + + + + PublisherId + + + + DataSetClassId + + + + ReplyTo + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15656 + + Object_1 + + 0 + AuthenticatedUser + + + + AuthenticatedUser + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16203 + + + + + i=46 + + false + + i=16204 + + + + + i=46 + + false + + i=15414 + + + + + i=46 + + false + + i=16205 + + + + + i=46 + + false + + i=15415 + + + + + i=47 + + false + + i=15660 + + + + + i=47 + + false + + i=15662 + + + + + i=47 + + false + + i=16206 + + + + + i=47 + + false + + i=16208 + + + + + i=47 + + false + + i=16210 + + + + + i=47 + + false + + i=16212 + + + + 0 + + + + i=15657 + + DataType_64 + + 0 + JsonWriterGroupMessageDataType + + + + JsonWriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15616 + + + + + i=38 + + false + + i=15719 + + + + + i=38 + + false + + i=16017 + + + + + i=38 + + false + + i=16393 + + + + false + + + + + i=15658 + + DataType_64 + + 0 + JsonDataSetMessageContentMask + + + + JsonDataSetMessageContentMask + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + + i=46 + + false + + i=15659 + + + + false + + + + + i=15659 + + Variable_2 + + 0 + OptionSetValues + + + + OptionSetValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15658 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + DataSetWriterId + + + + MetaDataVersion + + + + SequenceNumber + + + + Timestamp + + + + Status + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15660 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15656 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15661 + + + + true + true + + + + i=15661 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15660 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15662 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15656 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15663 + + + + true + true + + + + i=15663 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15662 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15664 + + DataType_64 + + 0 + JsonDataSetWriterMessageDataType + + + + JsonDataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15605 + + + + + i=38 + + false + + i=15724 + + + + + i=38 + + false + + i=16018 + + + + + i=38 + + false + + i=16394 + + + + false + + + + + i=15665 + + DataType_64 + + 0 + JsonDataSetReaderMessageDataType + + + + JsonDataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15629 + + + + + i=38 + + false + + i=15725 + + + + + i=38 + + false + + i=16019 + + + + + i=38 + + false + + i=16404 + + + + false + + + + + i=15667 + + DataType_64 + + 0 + BrokerWriterGroupTransportDataType + + + + BrokerWriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15611 + + + + + i=38 + + false + + i=15727 + + + + + i=38 + + false + + i=16021 + + + + + i=38 + + false + + i=16524 + + + + false + + + + + i=15668 + + Object_1 + + 0 + Observer + + + + Observer + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16214 + + + + + i=46 + + false + + i=16215 + + + + + i=46 + + false + + i=15416 + + + + + i=46 + + false + + i=16216 + + + + + i=46 + + false + + i=15417 + + + + + i=47 + + false + + i=15672 + + + + + i=47 + + false + + i=15674 + + + + + i=47 + + false + + i=16217 + + + + + i=47 + + false + + i=16219 + + + + + i=47 + + false + + i=16221 + + + + + i=47 + + false + + i=16223 + + + + 0 + + + + i=15669 + + DataType_64 + + 0 + BrokerDataSetWriterTransportDataType + + + + BrokerDataSetWriterTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15598 + + + + + i=38 + + false + + i=15729 + + + + + i=38 + + false + + i=16022 + + + + + i=38 + + false + + i=16525 + + + + false + + + + + i=15670 + + DataType_64 + + 0 + BrokerDataSetReaderTransportDataType + + + + BrokerDataSetReaderTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15628 + + + + + i=38 + + false + + i=15733 + + + + + i=38 + + false + + i=16023 + + + + + i=38 + + false + + i=16526 + + + + false + + + + + i=15671 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15528 + + + + + i=39 + + false + + i=15734 + + + + 0 + + + + i=15672 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15668 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15673 + + + + true + true + + + + i=15673 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15672 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15674 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15668 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15675 + + + + true + true + + + + i=15675 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15674 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15676 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15534 + + + + + i=39 + + false + + i=15741 + + + + 0 + + + + i=15677 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15578 + + + + + i=39 + + false + + i=15766 + + + + 0 + + + + i=15678 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15580 + + + + + i=39 + + false + + i=15769 + + + + 0 + + + + i=15679 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15581 + + + + + i=39 + + false + + i=15772 + + + + 0 + + + + i=15680 + + Object_1 + + 0 + Operator + + + + Operator + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16225 + + + + + i=46 + + false + + i=16226 + + + + + i=46 + + false + + i=15418 + + + + + i=46 + + false + + i=16227 + + + + + i=46 + + false + + i=15423 + + + + + i=47 + + false + + i=15684 + + + + + i=47 + + false + + i=15686 + + + + + i=47 + + false + + i=16228 + + + + + i=47 + + false + + i=16230 + + + + + i=47 + + false + + i=16232 + + + + + i=47 + + false + + i=16234 + + + + 0 + + + + i=15681 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15582 + + + + + i=39 + + false + + i=15775 + + + + 0 + + + + i=15682 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15597 + + + + + i=39 + + false + + i=15778 + + + + 0 + + + + i=15683 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15598 + + + + + i=39 + + false + + i=15781 + + + + 0 + + + + i=15684 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15680 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15685 + + + + true + true + + + + i=15685 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15684 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15686 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15680 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15687 + + + + true + true + + + + i=15687 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15686 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15688 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15605 + + + + + i=39 + + false + + i=15784 + + + + 0 + + + + i=15689 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15609 + + + + + i=39 + + false + + i=15787 + + + + 0 + + + + i=15691 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15611 + + + + + i=39 + + false + + i=15793 + + + + 0 + + + + i=15692 + + Object_1 + + 0 + Supervisor + + + + Supervisor + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16247 + + + + + i=46 + + false + + i=16248 + + + + + i=46 + + false + + i=15426 + + + + + i=46 + + false + + i=16249 + + + + + i=46 + + false + + i=15427 + + + + + i=47 + + false + + i=15696 + + + + + i=47 + + false + + i=15698 + + + + + i=47 + + false + + i=16250 + + + + + i=47 + + false + + i=16252 + + + + + i=47 + + false + + i=16254 + + + + + i=47 + + false + + i=16256 + + + + 0 + + + + i=15693 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15616 + + + + + i=39 + + false + + i=15854 + + + + 0 + + + + i=15694 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15617 + + + + + i=39 + + false + + i=15857 + + + + 0 + + + + i=15695 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15618 + + + + + i=39 + + false + + i=15860 + + + + 0 + + + + i=15696 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15692 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15697 + + + + true + true + + + + i=15697 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15696 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15698 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15692 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15699 + + + + true + true + + + + i=15699 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15698 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15700 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15005 + + + + 0 + + + + i=15701 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15621 + + + + + i=39 + + false + + i=15866 + + + + 0 + + + + i=15702 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15622 + + + + + i=39 + + false + + i=15869 + + + + 0 + + + + i=15703 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15623 + + + + + i=39 + + false + + i=15872 + + + + 0 + + + + i=15704 + + Object_1 + + 0 + SecurityAdmin + + + + SecurityAdmin + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16258 + + + + + i=46 + + false + + i=16259 + + + + + i=46 + + false + + i=15430 + + + + + i=46 + + false + + i=16260 + + + + + i=46 + + false + + i=15527 + + + + + i=47 + + false + + i=15708 + + + + + i=47 + + false + + i=15710 + + + + + i=47 + + false + + i=16261 + + + + + i=47 + + false + + i=16263 + + + + + i=47 + + false + + i=16265 + + + + + i=47 + + false + + i=16267 + + + + 0 + + + + i=15705 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15628 + + + + + i=39 + + false + + i=15877 + + + + 0 + + + + i=15706 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15629 + + + + + i=39 + + false + + i=15880 + + + + 0 + + + + i=15707 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15630 + + + + + i=39 + + false + + i=15883 + + + + 0 + + + + i=15708 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15704 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15709 + + + + true + true + + + + i=15709 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15708 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15710 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15704 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15711 + + + + true + true + + + + i=15711 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15710 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15712 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15631 + + + + + i=39 + + false + + i=15886 + + + + 0 + + + + i=15713 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15635 + + + + + i=39 + + false + + i=15889 + + + + 0 + + + + i=15714 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15006 + + + + 0 + + + + i=15715 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15645 + + + + + i=39 + + false + + i=15895 + + + + 0 + + + + i=15716 + + Object_1 + + 0 + ConfigureAdmin + + + + ConfigureAdmin + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16269 + + + + + i=46 + + false + + i=16270 + + + + + i=46 + + false + + i=15428 + + + + + i=46 + + false + + i=16271 + + + + + i=46 + + false + + i=15429 + + + + + i=47 + + false + + i=15720 + + + + + i=47 + + false + + i=15722 + + + + + i=47 + + false + + i=16272 + + + + + i=47 + + false + + i=16274 + + + + + i=47 + + false + + i=16276 + + + + + i=47 + + false + + i=16278 + + + + 0 + + + + i=15717 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15652 + + + + + i=39 + + false + + i=15898 + + + + 0 + + + + i=15718 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15653 + + + + + i=39 + + false + + i=15919 + + + + 0 + + + + i=15719 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15657 + + + + + i=39 + + false + + i=15922 + + + + 0 + + + + i=15720 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15716 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=15721 + + + + true + true + + + + i=15721 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15720 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15722 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15716 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=15723 + + + + true + true + + + + i=15723 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15722 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15724 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15664 + + + + + i=39 + + false + + i=15925 + + + + 0 + + + + i=15725 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15665 + + + + + i=39 + + false + + i=15931 + + + + 0 + + + + i=15726 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15007 + + + + 0 + + + + i=15727 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15667 + + + + + i=39 + + false + + i=15940 + + + + 0 + + + + i=15728 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15634 + + + + + i=39 + + false + + i=15730 + + + + 0 + + + + i=15729 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15669 + + + + + i=39 + + false + + i=15943 + + + + 0 + + + + i=15730 + + Variable_2 + + 0 + IdentityMappingRuleType + + + + IdentityMappingRuleType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='IdentityMappingRuleType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15733 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15670 + + + + + i=39 + + false + + i=15946 + + + + 0 + + + + i=15734 + + Variable_2 + + 0 + EndpointType + + + + EndpointType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EndpointType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15736 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15634 + + + + + i=39 + + false + + i=15738 + + + + 0 + + + + i=15738 + + Variable_2 + + 0 + IdentityMappingRuleType + + + + IdentityMappingRuleType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + IdentityMappingRuleType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15741 + + Variable_2 + + 0 + DataTypeSchemaHeader + + + + DataTypeSchemaHeader + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataTypeSchemaHeader + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15744 + + ObjectType_8 + + 0 + TemporaryFileTransferType + + + + TemporaryFileTransferType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=15745 + + + + + i=47 + + false + + i=15746 + + + + + i=47 + + false + + i=15749 + + + + + i=47 + + false + + i=15751 + + + + + i=47 + + false + + i=15754 + + + + false + + + + i=15745 + + Variable_2 + + 0 + ClientProcessingTimeout + + + + ClientProcessingTimeout + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15744 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15746 + + Method_4 + + 0 + GenerateFileForRead + + + + GenerateFileForRead + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15744 + + + + + i=40 + + false + + i=15746 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15747 + + + + + i=46 + + false + + i=15748 + + + + true + true + + + + i=15747 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15746 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15748 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15746 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15749 + + Method_4 + + 0 + GenerateFileForWrite + + + + GenerateFileForWrite + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15744 + + + + + i=40 + + false + + i=15749 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16359 + + + + + i=46 + + false + + i=15750 + + + + true + true + + + + i=15750 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15749 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15751 + + Method_4 + + 0 + CloseAndCommit + + + + CloseAndCommit + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15744 + + + + + i=40 + + false + + i=15751 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15752 + + + + + i=46 + + false + + i=15753 + + + + true + true + + + + i=15752 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15751 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15753 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15751 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15754 + + Object_1 + + 0 + <TransferState> + + + + <TransferState> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15744 + + + + + i=40 + + false + + i=15803 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=15755 + + + + + i=47 + + false + + i=15794 + + + + 0 + + + + i=15755 + + Variable_2 + + 0 + CurrentState + + + + CurrentState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15754 + + + + + i=40 + + false + + i=2760 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15756 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15756 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15766 + + Variable_2 + + 0 + PublishedDataSetDataType + + + + PublishedDataSetDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PublishedDataSetDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15769 + + Variable_2 + + 0 + PublishedDataSetSourceDataType + + + + PublishedDataSetSourceDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PublishedDataSetSourceDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15772 + + Variable_2 + + 0 + PublishedDataItemsDataType + + + + PublishedDataItemsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PublishedDataItemsDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15775 + + Variable_2 + + 0 + PublishedEventsDataType + + + + PublishedEventsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PublishedEventsDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15778 + + Variable_2 + + 0 + DataSetWriterDataType + + + + DataSetWriterDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetWriterDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15781 + + Variable_2 + + 0 + DataSetWriterTransportDataType + + + + DataSetWriterTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetWriterTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15784 + + Variable_2 + + 0 + DataSetWriterMessageDataType + + + + DataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetWriterMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15787 + + Variable_2 + + 0 + PubSubGroupDataType + + + + PubSubGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PubSubGroupDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15793 + + Variable_2 + + 0 + WriterGroupTransportDataType + + + + WriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + WriterGroupTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15794 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15754 + + + + + i=40 + + false + + i=15843 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=15803 + + ObjectType_8 + + 0 + FileTransferStateMachineType + + + + FileTransferStateMachineType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2771 + + + + + i=47 + + false + + i=15815 + + + + + i=47 + + false + + i=15817 + + + + + i=47 + + false + + i=15819 + + + + + i=47 + + false + + i=15821 + + + + + i=47 + + false + + i=15823 + + + + + i=47 + + false + + i=15825 + + + + + i=47 + + false + + i=15827 + + + + + i=47 + + false + + i=15829 + + + + + i=47 + + false + + i=15831 + + + + + i=47 + + false + + i=15833 + + + + + i=47 + + false + + i=15835 + + + + + i=47 + + false + + i=15837 + + + + + i=47 + + false + + i=15839 + + + + + i=47 + + false + + i=15841 + + + + + i=47 + + false + + i=15843 + + + + false + + + + i=15815 + + Object_1 + + 0 + Idle + + + + Idle + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2309 + + + + + i=51 + + true + + i=15825 + + + + + i=52 + + true + + i=15829 + + + + + i=51 + + true + + i=15831 + + + + + i=52 + + true + + i=15833 + + + + + i=52 + + true + + i=15841 + + + + + i=46 + + false + + i=15816 + + + + 0 + + + + i=15816 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15815 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15817 + + Object_1 + + 0 + ReadPrepare + + + + ReadPrepare + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=15825 + + + + + i=51 + + true + + i=15827 + + + + + i=51 + + true + + i=15835 + + + + + i=46 + + false + + i=15818 + + + + 0 + + + + i=15818 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15817 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15819 + + Object_1 + + 0 + ReadTransfer + + + + ReadTransfer + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=15827 + + + + + i=51 + + true + + i=15829 + + + + + i=51 + + true + + i=15837 + + + + + i=46 + + false + + i=15820 + + + + 0 + + + + i=15820 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15819 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15821 + + Object_1 + + 0 + ApplyWrite + + + + ApplyWrite + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=15831 + + + + + i=51 + + true + + i=15833 + + + + + i=51 + + true + + i=15839 + + + + + i=46 + + false + + i=15822 + + + + 0 + + + + i=15822 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15821 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15823 + + Object_1 + + 0 + Error + + + + Error + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2307 + + + + + i=52 + + true + + i=15835 + + + + + i=52 + + true + + i=15837 + + + + + i=52 + + true + + i=15839 + + + + + i=51 + + true + + i=15841 + + + + + i=46 + + false + + i=15824 + + + + 0 + + + + i=15824 + + Variable_2 + + 0 + StateNumber + + + + StateNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15823 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15825 + + Object_1 + + 0 + IdleToReadPrepare + + + + IdleToReadPrepare + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15815 + + + + + i=52 + + false + + i=15817 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15826 + + + + 0 + + + + i=15826 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15825 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15827 + + Object_1 + + 0 + ReadPrepareToReadTransfer + + + + ReadPrepareToReadTransfer + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15817 + + + + + i=52 + + false + + i=15819 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15828 + + + + 0 + + + + i=15828 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15827 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15829 + + Object_1 + + 0 + ReadTransferToIdle + + + + ReadTransferToIdle + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15819 + + + + + i=52 + + false + + i=15815 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15830 + + + + 0 + + + + i=15830 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15829 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15831 + + Object_1 + + 0 + IdleToApplyWrite + + + + IdleToApplyWrite + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15815 + + + + + i=52 + + false + + i=15821 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15832 + + + + 0 + + + + i=15832 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15831 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15833 + + Object_1 + + 0 + ApplyWriteToIdle + + + + ApplyWriteToIdle + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15821 + + + + + i=52 + + false + + i=15815 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15834 + + + + 0 + + + + i=15834 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15833 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15835 + + Object_1 + + 0 + ReadPrepareToError + + + + ReadPrepareToError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15817 + + + + + i=52 + + false + + i=15823 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15836 + + + + 0 + + + + i=15836 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15835 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15837 + + Object_1 + + 0 + ReadTransferToError + + + + ReadTransferToError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15819 + + + + + i=52 + + false + + i=15823 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15838 + + + + 0 + + + + i=15838 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15837 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15839 + + Object_1 + + 0 + ApplyWriteToError + + + + ApplyWriteToError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15821 + + + + + i=52 + + false + + i=15823 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15840 + + + + 0 + + + + i=15840 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15839 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15841 + + Object_1 + + 0 + ErrorToIdle + + + + ErrorToIdle + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=2310 + + + + + i=51 + + false + + i=15823 + + + + + i=52 + + false + + i=15815 + + + + + i=54 + + false + + i=2311 + + + + + i=46 + + false + + i=15842 + + + + 0 + + + + i=15842 + + Variable_2 + + 0 + TransitionNumber + + + + TransitionNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15841 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15843 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15803 + + + + + i=40 + + false + + i=15843 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=15844 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14416 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=15845 + + + + 0 + + + + i=15845 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15844 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15854 + + Variable_2 + + 0 + WriterGroupMessageDataType + + + + WriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + WriterGroupMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15857 + + Variable_2 + + 0 + PubSubConnectionDataType + + + + PubSubConnectionDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PubSubConnectionDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15860 + + Variable_2 + + 0 + ConnectionTransportDataType + + + + ConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ConnectionTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15866 + + Variable_2 + + 0 + ReaderGroupTransportDataType + + + + ReaderGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ReaderGroupTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15869 + + Variable_2 + + 0 + ReaderGroupMessageDataType + + + + ReaderGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ReaderGroupMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15872 + + Variable_2 + + 0 + DataSetReaderDataType + + + + DataSetReaderDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetReaderDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15874 + + DataType_64 + + 0 + OverrideValueHandling + + + + OverrideValueHandling + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=15875 + + + + false + + + + + i=15875 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15874 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Disabled + + + + LastUsableValue + + + + OverrideValue + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15877 + + Variable_2 + + 0 + DataSetReaderTransportDataType + + + + DataSetReaderTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetReaderTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15880 + + Variable_2 + + 0 + DataSetReaderMessageDataType + + + + DataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataSetReaderMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15883 + + Variable_2 + + 0 + SubscribedDataSetDataType + + + + SubscribedDataSetDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SubscribedDataSetDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15886 + + Variable_2 + + 0 + TargetVariablesDataType + + + + TargetVariablesDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + TargetVariablesDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15889 + + Variable_2 + + 0 + SubscribedDataSetMirrorDataType + + + + SubscribedDataSetMirrorDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + SubscribedDataSetMirrorDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15895 + + Variable_2 + + 0 + UadpWriterGroupMessageDataType + + + + UadpWriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UadpWriterGroupMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15898 + + Variable_2 + + 0 + UadpDataSetWriterMessageDataType + + + + UadpDataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UadpDataSetWriterMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15904 + + DataType_64 + + 0 + DataSetFieldFlags + + + + DataSetFieldFlags + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=5 + + + + + i=46 + + false + + i=15577 + + + + false + + + + + i=15906 + + ObjectType_8 + + 0 + PubSubKeyServiceType + + + + PubSubKeyServiceType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=15907 + + + + + i=47 + + false + + i=15910 + + + + + i=47 + + false + + i=15913 + + + + + i=45 + + false + + i=14416 + + + + false + + + + i=15907 + + Method_4 + + 0 + GetSecurityKeys + + + + GetSecurityKeys + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15906 + + + + + i=40 + + false + + i=15907 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15908 + + + + + i=46 + + false + + i=15909 + + + + true + true + + + + i=15908 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15907 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15909 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15907 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15910 + + Method_4 + + 0 + GetSecurityGroup + + + + GetSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15906 + + + + + i=40 + + false + + i=15910 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=15911 + + + + + i=46 + + false + + i=15912 + + + + true + true + + + + i=15911 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15910 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15912 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15910 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15913 + + Object_1 + + 0 + SecurityGroups + + + + SecurityGroups + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15906 + + + + + i=40 + + false + + i=15452 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=15914 + + + + + i=47 + + false + + i=15917 + + + + 0 + + + + i=15914 + + Method_4 + + 0 + AddSecurityGroup + + + + AddSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15913 + + + + + i=40 + + false + + i=15461 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15915 + + + + + i=46 + + false + + i=15916 + + + + true + true + + + + i=15915 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15914 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15916 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15914 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15917 + + Method_4 + + 0 + RemoveSecurityGroup + + + + RemoveSecurityGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15913 + + + + + i=40 + + false + + i=15464 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15918 + + + + true + true + + + + i=15918 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15917 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15919 + + Variable_2 + + 0 + UadpDataSetReaderMessageDataType + + + + UadpDataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + UadpDataSetReaderMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15922 + + Variable_2 + + 0 + JsonWriterGroupMessageDataType + + + + JsonWriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + JsonWriterGroupMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15925 + + Variable_2 + + 0 + JsonDataSetWriterMessageDataType + + + + JsonDataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + JsonDataSetWriterMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15926 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14232 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15927 + + Variable_2 + + 0 + SecurityGroupId + + + + SecurityGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14232 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15928 + + Variable_2 + + 0 + SecurityKeyServices + + + + SecurityKeyServices + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14232 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=312 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15931 + + Variable_2 + + 0 + JsonDataSetReaderMessageDataType + + + + JsonDataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + JsonDataSetReaderMessageDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15932 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15933 + + Variable_2 + + 0 + SecurityGroupId + + + + SecurityGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15934 + + Variable_2 + + 0 + SecurityKeyServices + + + + SecurityKeyServices + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=312 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15940 + + Variable_2 + + 0 + BrokerWriterGroupTransportDataType + + + + BrokerWriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + BrokerWriterGroupTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15943 + + Variable_2 + + 0 + BrokerDataSetWriterTransportDataType + + + + BrokerDataSetWriterTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + BrokerDataSetWriterTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15946 + + Variable_2 + + 0 + BrokerDataSetReaderTransportDataType + + + + BrokerDataSetReaderTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + BrokerDataSetReaderTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15949 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15528 + + + + + i=39 + + false + + i=16024 + + + + 0 + + + + i=15950 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15534 + + + + + i=39 + + false + + i=16027 + + + + 0 + + + + i=15951 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15578 + + + + + i=39 + + false + + i=16030 + + + + 0 + + + + i=15952 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15580 + + + + + i=39 + + false + + i=16033 + + + + 0 + + + + i=15953 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15581 + + + + + i=39 + + false + + i=16037 + + + + 0 + + + + i=15954 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15582 + + + + + i=39 + + false + + i=16040 + + + + 0 + + + + i=15955 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15597 + + + + + i=39 + + false + + i=16047 + + + + 0 + + + + i=15956 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15598 + + + + + i=39 + + false + + i=16050 + + + + 0 + + + + i=15957 + + Object_1 + + 0 + http://opcfoundation.org/UA/ + + + + http://opcfoundation.org/UA/ + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=11616 + + + + + i=47 + + true + + i=11715 + + + + + i=46 + + false + + i=15958 + + + + + i=46 + + false + + i=15959 + + + + + i=46 + + false + + i=15960 + + + + + i=46 + + false + + i=15961 + + + + + i=46 + + false + + i=15962 + + + + + i=46 + + false + + i=15963 + + + + + i=46 + + false + + i=15964 + + + + + i=46 + + false + + i=16134 + + + + + i=46 + + false + + i=16135 + + + + + i=46 + + false + + i=16136 + + + + 0 + + + + i=15958 + + Variable_2 + + 0 + NamespaceUri + + + + NamespaceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + http://opcfoundation.org/UA/ + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15959 + + Variable_2 + + 0 + NamespaceVersion + + + + NamespaceVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + 1.04.7 + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15960 + + Variable_2 + + 0 + NamespacePublicationDate + + + + NamespacePublicationDate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + 2020-07-15T00:00:00Z + + + + i=13 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15961 + + Variable_2 + + 0 + IsNamespaceSubset + + + + IsNamespaceSubset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15962 + + Variable_2 + + 0 + StaticNodeIdTypes + + + + StaticNodeIdTypes + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + + 0 + + + + + i=256 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15963 + + Variable_2 + + 0 + StaticNumericNodeIdRange + + + + StaticNumericNodeIdRange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + + 1:65535 + + + + + i=291 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15964 + + Variable_2 + + 0 + StaticStringNodeIdPattern + + + + StaticStringNodeIdPattern + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=15987 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15605 + + + + + i=39 + + false + + i=16053 + + + + 0 + + + + i=15988 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15609 + + + + + i=39 + + false + + i=16056 + + + + 0 + + + + i=15990 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15611 + + + + + i=39 + + false + + i=16062 + + + + 0 + + + + i=15991 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15616 + + + + + i=39 + + false + + i=16065 + + + + 0 + + + + i=15992 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15617 + + + + + i=39 + + false + + i=16068 + + + + 0 + + + + i=15993 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15618 + + + + + i=39 + + false + + i=16071 + + + + 0 + + + + i=15995 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15621 + + + + + i=39 + + false + + i=16077 + + + + 0 + + + + i=15996 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15622 + + + + + i=39 + + false + + i=16080 + + + + 0 + + + + i=15997 + + Method_4 + + 0 + AddRole + + + + AddRole + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15607 + + + + + i=40 + + false + + i=15997 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=15998 + + + + + i=46 + + false + + i=15999 + + + + true + true + + + + i=15998 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15997 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=15999 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15997 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16000 + + Method_4 + + 0 + RemoveRole + + + + RemoveRole + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15607 + + + + + i=40 + + false + + i=16000 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16001 + + + + true + true + + + + i=16001 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16000 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16007 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15623 + + + + + i=39 + + false + + i=16083 + + + + 0 + + + + i=16008 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15628 + + + + + i=39 + + false + + i=16086 + + + + 0 + + + + i=16009 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15629 + + + + + i=39 + + false + + i=16089 + + + + 0 + + + + i=16010 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15630 + + + + + i=39 + + false + + i=16092 + + + + 0 + + + + i=16011 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15631 + + + + + i=39 + + false + + i=16095 + + + + 0 + + + + i=16012 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15635 + + + + + i=39 + + false + + i=16098 + + + + 0 + + + + i=16014 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15645 + + + + + i=39 + + false + + i=16104 + + + + 0 + + + + i=16015 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15652 + + + + + i=39 + + false + + i=16107 + + + + 0 + + + + i=16016 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15653 + + + + + i=39 + + false + + i=16110 + + + + 0 + + + + i=16017 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15657 + + + + + i=39 + + false + + i=16113 + + + + 0 + + + + i=16018 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15664 + + + + + i=39 + + false + + i=16116 + + + + 0 + + + + i=16019 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15665 + + + + + i=39 + + false + + i=16119 + + + + 0 + + + + i=16021 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15667 + + + + + i=39 + + false + + i=16125 + + + + 0 + + + + i=16022 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15669 + + + + + i=39 + + false + + i=16144 + + + + 0 + + + + i=16023 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15670 + + + + + i=39 + + false + + i=16147 + + + + 0 + + + + i=16024 + + Variable_2 + + 0 + EndpointType + + + + EndpointType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EndpointType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16027 + + Variable_2 + + 0 + DataTypeSchemaHeader + + + + DataTypeSchemaHeader + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataTypeSchemaHeader'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16030 + + Variable_2 + + 0 + PublishedDataSetDataType + + + + PublishedDataSetDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PublishedDataSetDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16033 + + Variable_2 + + 0 + PublishedDataSetSourceDataType + + + + PublishedDataSetSourceDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PublishedDataSetSourceDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16036 + + Object_1 + + 0 + Engineer + + + + Engineer + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=15620 + + + + + i=47 + + true + + i=15606 + + + + + i=46 + + false + + i=16236 + + + + + i=46 + + false + + i=16237 + + + + + i=46 + + false + + i=15424 + + + + + i=46 + + false + + i=16238 + + + + + i=46 + + false + + i=15425 + + + + + i=47 + + false + + i=16041 + + + + + i=47 + + false + + i=16043 + + + + + i=47 + + false + + i=16239 + + + + + i=47 + + false + + i=16241 + + + + + i=47 + + false + + i=16243 + + + + + i=47 + + false + + i=16245 + + + + 0 + + + + i=16037 + + Variable_2 + + 0 + PublishedDataItemsDataType + + + + PublishedDataItemsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PublishedDataItemsDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16040 + + Variable_2 + + 0 + PublishedEventsDataType + + + + PublishedEventsDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PublishedEventsDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16041 + + Method_4 + + 0 + AddIdentity + + + + AddIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16036 + + + + + i=40 + + false + + i=15624 + + + + + i=46 + + false + + i=16042 + + + + true + true + + + + i=16042 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16041 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16043 + + Method_4 + + 0 + RemoveIdentity + + + + RemoveIdentity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16036 + + + + + i=40 + + false + + i=15626 + + + + + i=46 + + false + + i=16044 + + + + true + true + + + + i=16044 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16043 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16047 + + Variable_2 + + 0 + DataSetWriterDataType + + + + DataSetWriterDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetWriterDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16050 + + Variable_2 + + 0 + DataSetWriterTransportDataType + + + + DataSetWriterTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetWriterTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16053 + + Variable_2 + + 0 + DataSetWriterMessageDataType + + + + DataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetWriterMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16056 + + Variable_2 + + 0 + PubSubGroupDataType + + + + PubSubGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PubSubGroupDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16062 + + Variable_2 + + 0 + WriterGroupTransportDataType + + + + WriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='WriterGroupTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16065 + + Variable_2 + + 0 + WriterGroupMessageDataType + + + + WriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='WriterGroupMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16068 + + Variable_2 + + 0 + PubSubConnectionDataType + + + + PubSubConnectionDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PubSubConnectionDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16071 + + Variable_2 + + 0 + ConnectionTransportDataType + + + + ConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ConnectionTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16077 + + Variable_2 + + 0 + ReaderGroupTransportDataType + + + + ReaderGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ReaderGroupTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16080 + + Variable_2 + + 0 + ReaderGroupMessageDataType + + + + ReaderGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ReaderGroupMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16083 + + Variable_2 + + 0 + DataSetReaderDataType + + + + DataSetReaderDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetReaderDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16086 + + Variable_2 + + 0 + DataSetReaderTransportDataType + + + + DataSetReaderTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetReaderTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16089 + + Variable_2 + + 0 + DataSetReaderMessageDataType + + + + DataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataSetReaderMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16092 + + Variable_2 + + 0 + SubscribedDataSetDataType + + + + SubscribedDataSetDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SubscribedDataSetDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16095 + + Variable_2 + + 0 + TargetVariablesDataType + + + + TargetVariablesDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='TargetVariablesDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16098 + + Variable_2 + + 0 + SubscribedDataSetMirrorDataType + + + + SubscribedDataSetMirrorDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='SubscribedDataSetMirrorDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16104 + + Variable_2 + + 0 + UadpWriterGroupMessageDataType + + + + UadpWriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UadpWriterGroupMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16107 + + Variable_2 + + 0 + UadpDataSetWriterMessageDataType + + + + UadpDataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UadpDataSetWriterMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16110 + + Variable_2 + + 0 + UadpDataSetReaderMessageDataType + + + + UadpDataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='UadpDataSetReaderMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16113 + + Variable_2 + + 0 + JsonWriterGroupMessageDataType + + + + JsonWriterGroupMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='JsonWriterGroupMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16116 + + Variable_2 + + 0 + JsonDataSetWriterMessageDataType + + + + JsonDataSetWriterMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='JsonDataSetWriterMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16119 + + Variable_2 + + 0 + JsonDataSetReaderMessageDataType + + + + JsonDataSetReaderMessageDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='JsonDataSetReaderMessageDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16125 + + Variable_2 + + 0 + BrokerWriterGroupTransportDataType + + + + BrokerWriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='BrokerWriterGroupTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16126 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=96 + + + + + i=39 + + false + + i=16127 + + + + 0 + + + + i=16127 + + Variable_2 + + 0 + RolePermissionType + + + + RolePermissionType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='RolePermissionType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16131 + + Variable_2 + + 0 + RolePermissionType + + + + RolePermissionType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + RolePermissionType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16134 + + Variable_2 + + 0 + DefaultRolePermissions + + + + DefaultRolePermissions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=96 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16135 + + Variable_2 + + 0 + DefaultUserRolePermissions + + + + DefaultUserRolePermissions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=96 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16136 + + Variable_2 + + 0 + DefaultAccessRestrictions + + + + DefaultAccessRestrictions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15957 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=95 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16137 + + Variable_2 + + 0 + DefaultRolePermissions + + + + DefaultRolePermissions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=96 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16138 + + Variable_2 + + 0 + DefaultUserRolePermissions + + + + DefaultUserRolePermissions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=96 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16139 + + Variable_2 + + 0 + DefaultAccessRestrictions + + + + DefaultAccessRestrictions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=95 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16144 + + Variable_2 + + 0 + BrokerDataSetWriterTransportDataType + + + + BrokerDataSetWriterTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='BrokerDataSetWriterTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16147 + + Variable_2 + + 0 + BrokerDataSetReaderTransportDataType + + + + BrokerDataSetReaderTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='BrokerDataSetReaderTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16150 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15528 + + + + 0 + + + + i=16151 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15534 + + + + 0 + + + + i=16152 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15578 + + + + 0 + + + + i=16153 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15580 + + + + 0 + + + + i=16154 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15581 + + + + 0 + + + + i=16155 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15582 + + + + 0 + + + + i=16156 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15597 + + + + 0 + + + + i=16157 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15598 + + + + 0 + + + + i=16158 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15605 + + + + 0 + + + + i=16159 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15609 + + + + 0 + + + + i=16161 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15611 + + + + 0 + + + + i=16162 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15608 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16173 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16174 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16175 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15620 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16176 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15620 + + + + + i=40 + + false + + i=16176 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16177 + + + + true + true + + + + i=16177 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16176 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16178 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15620 + + + + + i=40 + + false + + i=16178 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16179 + + + + true + true + + + + i=16179 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16178 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16180 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15620 + + + + + i=40 + + false + + i=16180 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16181 + + + + true + true + + + + i=16181 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16180 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16182 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15620 + + + + + i=40 + + false + + i=16182 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16183 + + + + true + true + + + + i=16183 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16182 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16192 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15644 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16193 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15644 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16194 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15644 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16195 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15644 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16196 + + + + true + true + + + + i=16196 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16195 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16197 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15644 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16198 + + + + true + true + + + + i=16198 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16197 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16199 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15644 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16200 + + + + true + true + + + + i=16200 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16199 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16201 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15644 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16202 + + + + true + true + + + + i=16202 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16201 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16203 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15656 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16204 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15656 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16205 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15656 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16206 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15656 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16207 + + + + true + true + + + + i=16207 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16206 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16208 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15656 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16209 + + + + true + true + + + + i=16209 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16208 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16210 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15656 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16211 + + + + true + true + + + + i=16211 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16210 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16212 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15656 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16213 + + + + true + true + + + + i=16213 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16212 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16214 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15668 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16215 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15668 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16216 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15668 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16217 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15668 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16218 + + + + true + true + + + + i=16218 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16217 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16219 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15668 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16220 + + + + true + true + + + + i=16220 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16219 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16221 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15668 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16222 + + + + true + true + + + + i=16222 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16221 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16223 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15668 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16224 + + + + true + true + + + + i=16224 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16223 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16225 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15680 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16226 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15680 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16227 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15680 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16228 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15680 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16229 + + + + true + true + + + + i=16229 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16228 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16230 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15680 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16231 + + + + true + true + + + + i=16231 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16230 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16232 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15680 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16233 + + + + true + true + + + + i=16233 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16232 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16234 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15680 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16235 + + + + true + true + + + + i=16235 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16234 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16236 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16036 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16237 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16036 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16238 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16036 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16239 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16036 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16240 + + + + true + true + + + + i=16240 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16239 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16241 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16036 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16242 + + + + true + true + + + + i=16242 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16241 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16243 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16036 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16244 + + + + true + true + + + + i=16244 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16243 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16245 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16036 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16246 + + + + true + true + + + + i=16246 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16245 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16247 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15692 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16248 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15692 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16249 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15692 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16250 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15692 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16251 + + + + true + true + + + + i=16251 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16250 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16252 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15692 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16253 + + + + true + true + + + + i=16253 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16252 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16254 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15692 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16255 + + + + true + true + + + + i=16255 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16254 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16256 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15692 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16257 + + + + true + true + + + + i=16257 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16256 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16258 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15704 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16259 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15704 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16260 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15704 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16261 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15704 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16262 + + + + true + true + + + + i=16262 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16261 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16263 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15704 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16264 + + + + true + true + + + + i=16264 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16263 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16265 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15704 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16266 + + + + true + true + + + + i=16266 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16265 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16267 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15704 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16268 + + + + true + true + + + + i=16268 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16267 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16269 + + Variable_2 + + 0 + Identities + + + + Identities + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15716 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15634 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16270 + + Variable_2 + + 0 + Applications + + + + Applications + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15716 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16271 + + Variable_2 + + 0 + Endpoints + + + + Endpoints + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15716 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=15528 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16272 + + Method_4 + + 0 + AddApplication + + + + AddApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15716 + + + + + i=40 + + false + + i=16176 + + + + + i=46 + + false + + i=16273 + + + + true + true + + + + i=16273 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16272 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16274 + + Method_4 + + 0 + RemoveApplication + + + + RemoveApplication + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15716 + + + + + i=40 + + false + + i=16178 + + + + + i=46 + + false + + i=16275 + + + + true + true + + + + i=16275 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16274 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16276 + + Method_4 + + 0 + AddEndpoint + + + + AddEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15716 + + + + + i=40 + + false + + i=16180 + + + + + i=46 + + false + + i=16277 + + + + true + true + + + + i=16277 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16276 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16278 + + Method_4 + + 0 + RemoveEndpoint + + + + RemoveEndpoint + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15716 + + + + + i=40 + + false + + i=16182 + + + + + i=46 + + false + + i=16279 + + + + true + true + + + + i=16279 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16278 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16280 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15616 + + + + 0 + + + + i=16281 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15617 + + + + 0 + + + + i=16282 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15618 + + + + 0 + + + + i=16284 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15621 + + + + 0 + + + + i=16285 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15622 + + + + 0 + + + + i=16286 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15623 + + + + 0 + + + + i=16287 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15628 + + + + 0 + + + + i=16288 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15629 + + + + 0 + + + + i=16295 + + Object_1 + + 0 + RoleSet + + + + RoleSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2013 + + + + + i=40 + + false + + i=15607 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=16296 + + + + + i=47 + + false + + i=16299 + + + + 0 + + + + i=16296 + + Method_4 + + 0 + AddRole + + + + AddRole + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16295 + + + + + i=40 + + false + + i=15997 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16297 + + + + + i=46 + + false + + i=16298 + + + + true + true + + + + i=16297 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16296 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16298 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16296 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16299 + + Method_4 + + 0 + RemoveRole + + + + RemoveRole + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16295 + + + + + i=40 + + false + + i=16000 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16300 + + + + true + true + + + + i=16300 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16299 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16301 + + Method_4 + + 0 + AddRole + + + + AddRole + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15606 + + + + + i=40 + + false + + i=15997 + + + + + i=46 + + false + + i=16302 + + + + + i=46 + + false + + i=16303 + + + + true + true + + + + i=16302 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16301 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16303 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16301 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16304 + + Method_4 + + 0 + RemoveRole + + + + RemoveRole + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15606 + + + + + i=40 + + false + + i=16000 + + + + + i=46 + + false + + i=16305 + + + + true + true + + + + i=16305 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16304 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16306 + + Variable_2 + + 0 + DefaultInputValues + + + + DefaultInputValues + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16307 + + DataType_64 + + 0 + AudioDataType + + + + AudioDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15 + + + + false + + + + + i=16308 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15630 + + + + 0 + + + + i=16309 + + VariableType_16 + + 0 + SelectionListType + + + + SelectionListType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=17632 + + + + + i=46 + + false + + i=17633 + + + + + i=46 + + false + + i=16312 + + + + + + + + + + i=24 + + -2 + + false + + + + i=16310 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15631 + + + + 0 + + + + i=16311 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15635 + + + + 0 + + + + i=16312 + + Variable_2 + + 0 + RestrictToList + + + + RestrictToList + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16309 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16314 + + Object_1 + + 0 + FileSystem + + + + FileSystem + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=13353 + + + + + i=47 + + false + + i=16348 + + + + + i=47 + + false + + i=16351 + + + + + i=47 + + false + + i=16354 + + + + + i=47 + + false + + i=16356 + + + + 0 + + + + i=16323 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15645 + + + + 0 + + + + i=16348 + + Method_4 + + 0 + CreateDirectory + + + + CreateDirectory + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16314 + + + + + i=40 + + false + + i=13387 + + + + + i=46 + + false + + i=16349 + + + + + i=46 + + false + + i=16350 + + + + true + true + + + + i=16349 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16348 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16350 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16348 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16351 + + Method_4 + + 0 + CreateFile + + + + CreateFile + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16314 + + + + + i=40 + + false + + i=13390 + + + + + i=46 + + false + + i=16352 + + + + + i=46 + + false + + i=16353 + + + + true + true + + + + i=16352 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16351 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16353 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16351 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16354 + + Method_4 + + 0 + Delete + + + + Delete + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16314 + + + + + i=40 + + false + + i=13393 + + + + + i=46 + + false + + i=16355 + + + + true + true + + + + i=16355 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16354 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16356 + + Method_4 + + 0 + MoveOrCopy + + + + MoveOrCopy + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16314 + + + + + i=40 + + false + + i=13395 + + + + + i=46 + + false + + i=16357 + + + + + i=46 + + false + + i=16358 + + + + true + true + + + + i=16357 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16356 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16358 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16356 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16359 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15749 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16361 + + ReferenceType_32 + + 0 + HasAlarmSuppressionGroup + + + + HasAlarmSuppressionGroup + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + IsAlarmSuppressionGroupOf + + + + + i=16362 + + ReferenceType_32 + + 0 + AlarmGroupMember + + + + AlarmGroupMember + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=35 + + + + false + false + + + MemberOfAlarmGroup + + + + + i=16363 + + Variable_2 + + 0 + ConditionSubClassId + + + + ConditionSubClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16364 + + Variable_2 + + 0 + ConditionSubClassName + + + + ConditionSubClassName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16371 + + Variable_2 + + 0 + OutOfServiceState + + + + OutOfServiceState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16372 + + + + + i=46 + + false + + i=16376 + + + + + i=46 + + false + + i=16378 + + + + + i=46 + + false + + i=16379 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16372 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16371 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16376 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16371 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16378 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16371 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Out of Service + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16379 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16371 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + In Service + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16380 + + Variable_2 + + 0 + SilenceState + + + + SilenceState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16381 + + + + + i=46 + + false + + i=16385 + + + + + i=46 + + false + + i=16387 + + + + + i=46 + + false + + i=16388 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16381 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16385 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16387 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Silenced + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16388 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16380 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Not Silenced + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16389 + + Variable_2 + + 0 + AudibleEnabled + + + + AudibleEnabled + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16390 + + Variable_2 + + 0 + AudibleSound + + + + AudibleSound + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=17986 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=16307 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16391 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15652 + + + + 0 + + + + i=16392 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15653 + + + + 0 + + + + i=16393 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15657 + + + + 0 + + + + i=16394 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15664 + + + + 0 + + + + i=16395 + + Variable_2 + + 0 + OnDelay + + + + OnDelay + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16396 + + Variable_2 + + 0 + OffDelay + + + + OffDelay + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16397 + + Variable_2 + + 0 + FirstInGroupFlag + + + + FirstInGroupFlag + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16398 + + Object_1 + + 0 + FirstInGroup + + + + FirstInGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=16405 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=16399 + + Object_1 + + 0 + <AlarmGroup> + + + + <AlarmGroup> + + + 0 + 0 + + + 0 + + + + i=16361 + + true + + i=2915 + + + + + i=40 + + false + + i=16405 + + + + + i=37 + + false + + i=11508 + + + + 0 + + + + i=16400 + + Variable_2 + + 0 + ReAlarmTime + + + + ReAlarmTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2915 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16401 + + Variable_2 + + 0 + ReAlarmRepeatCount + + + + ReAlarmRepeatCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=4 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16402 + + Method_4 + + 0 + Silence + + + + Silence + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=16402 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=17242 + + + + true + true + + + + i=16403 + + Method_4 + + 0 + Suppress + + + + Suppress + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=16403 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=17225 + + + + true + true + + + + i=16404 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15665 + + + + 0 + + + + i=16405 + + ObjectType_8 + + 0 + AlarmGroupType + + + + AlarmGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=16362 + + false + + i=16406 + + + + false + + + + i=16406 + + Object_1 + + 0 + <AlarmConditionInstance> + + + + <AlarmConditionInstance> + + + 0 + 0 + + + 0 + + + + i=16362 + + true + + i=16405 + + + + + i=40 + + false + + i=2915 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=16407 + + + + + i=46 + + false + + i=16408 + + + + + i=46 + + false + + i=16409 + + + + + i=46 + + false + + i=16410 + + + + + i=46 + + false + + i=16411 + + + + + i=46 + + false + + i=16412 + + + + + i=46 + + false + + i=16414 + + + + + i=46 + + false + + i=16415 + + + + + i=46 + + false + + i=16416 + + + + + i=46 + + false + + i=16417 + + + + + i=46 + + false + + i=16420 + + + + + i=46 + + false + + i=16421 + + + + + i=46 + + false + + i=16422 + + + + + i=47 + + false + + i=16423 + + + + + i=47 + + false + + i=16432 + + + + + i=47 + + false + + i=16434 + + + + + i=47 + + false + + i=16436 + + + + + i=46 + + false + + i=16438 + + + + + i=47 + + false + + i=16439 + + + + + i=47 + + false + + i=16440 + + + + + i=47 + + false + + i=16441 + + + + + i=47 + + false + + i=16443 + + + + + i=47 + + false + + i=16461 + + + + + i=47 + + false + + i=16465 + + + + + i=46 + + false + + i=16474 + + + + + i=46 + + false + + i=16519 + + + + 0 + + + + i=16407 + + Variable_2 + + 0 + EventId + + + + EventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16408 + + Variable_2 + + 0 + EventType + + + + EventType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16409 + + Variable_2 + + 0 + SourceNode + + + + SourceNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16410 + + Variable_2 + + 0 + SourceName + + + + SourceName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16411 + + Variable_2 + + 0 + Time + + + + Time + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16412 + + Variable_2 + + 0 + ReceiveTime + + + + ReceiveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16414 + + Variable_2 + + 0 + Message + + + + Message + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16415 + + Variable_2 + + 0 + Severity + + + + Severity + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16416 + + Variable_2 + + 0 + ConditionClassId + + + + ConditionClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16417 + + Variable_2 + + 0 + ConditionClassName + + + + ConditionClassName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16420 + + Variable_2 + + 0 + ConditionName + + + + ConditionName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16421 + + Variable_2 + + 0 + BranchId + + + + BranchId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16422 + + Variable_2 + + 0 + Retain + + + + Retain + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16423 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16424 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16424 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16423 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16432 + + Variable_2 + + 0 + Quality + + + + Quality + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16433 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16433 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16432 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16434 + + Variable_2 + + 0 + LastSeverity + + + + LastSeverity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16435 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16435 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16434 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16436 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16437 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16437 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16436 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16438 + + Variable_2 + + 0 + ClientUserId + + + + ClientUserId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16439 + + Method_4 + + 0 + Disable + + + + Disable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9028 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=16440 + + Method_4 + + 0 + Enable + + + + Enable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9027 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=16441 + + Method_4 + + 0 + AddComment + + + + AddComment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9029 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2829 + + + + + i=46 + + false + + i=16442 + + + + true + true + + + + i=16442 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16441 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16443 + + Variable_2 + + 0 + AckedState + + + + AckedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16444 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16444 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16443 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16461 + + Method_4 + + 0 + Acknowledge + + + + Acknowledge + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=9111 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=8944 + + + + + i=46 + + false + + i=16462 + + + + true + true + + + + i=16462 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16461 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16465 + + Variable_2 + + 0 + ActiveState + + + + ActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=16406 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=16466 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16466 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16465 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16474 + + Variable_2 + + 0 + InputNode + + + + InputNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16519 + + Variable_2 + + 0 + SuppressedOrShelved + + + + SuppressedOrShelved + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16406 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16524 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15667 + + + + 0 + + + + i=16525 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15669 + + + + 0 + + + + i=16526 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15670 + + + + 0 + + + + i=16572 + + Variable_2 + + 0 + BaseHighHighLimit + + + + BaseHighHighLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16573 + + Variable_2 + + 0 + BaseHighLimit + + + + BaseHighLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16574 + + Variable_2 + + 0 + BaseLowLimit + + + + BaseLowLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16575 + + Variable_2 + + 0 + BaseLowLowLimit + + + + BaseLowLowLimit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2955 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16598 + + Method_4 + + 0 + AddConnection + + + + AddConnection + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14416 + + + + + i=40 + + false + + i=16598 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16599 + + + + + i=46 + + false + + i=16600 + + + + true + true + + + + i=16599 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16598 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16600 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16598 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16720 + + Variable_2 + + 0 + DataSetWriterId + + + + DataSetWriterId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15222 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16721 + + Variable_2 + + 0 + DataSetFieldContentMask + + + + DataSetFieldContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15222 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15583 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16759 + + Variable_2 + + 0 + DataSetClassId + + + + DataSetClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14509 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + 00000000-0000-0000-0000-000000000000 + + + + + i=14 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16776 + + Variable_2 + + 0 + BaseSetpointNode + + + + BaseSetpointNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10368 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16817 + + Variable_2 + + 0 + BaseSetpointNode + + + + BaseSetpointNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9764 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16842 + + Method_4 + + 0 + AddPublishedDataItemsTemplate + + + + AddPublishedDataItemsTemplate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=16935 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16843 + + + + + i=46 + + false + + i=16853 + + + + true + true + + + + i=16843 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16842 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16853 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16842 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16858 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=10214 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16881 + + Method_4 + + 0 + AddPublishedEventsTemplate + + + + AddPublishedEventsTemplate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=16960 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16882 + + + + + i=46 + + false + + i=16883 + + + + true + true + + + + i=16882 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16881 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16883 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16881 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16884 + + Method_4 + + 0 + AddDataSetFolder + + + + AddDataSetFolder + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=16994 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16894 + + + + + i=46 + + false + + i=16922 + + + + true + true + + + + i=16894 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16884 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16899 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=9623 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=16922 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16884 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16923 + + Method_4 + + 0 + RemoveDataSetFolder + + + + RemoveDataSetFolder + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14478 + + + + + i=40 + + false + + i=16997 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16924 + + + + true + true + + + + i=16924 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16923 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16935 + + Method_4 + + 0 + AddPublishedDataItemsTemplate + + + + AddPublishedDataItemsTemplate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=16935 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16958 + + + + + i=46 + + false + + i=16959 + + + + true + true + + + + i=16958 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16935 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16959 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16935 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16960 + + Method_4 + + 0 + AddPublishedEventsTemplate + + + + AddPublishedEventsTemplate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=16960 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16961 + + + + + i=46 + + false + + i=16971 + + + + true + true + + + + i=16961 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16960 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16971 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16960 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16994 + + Method_4 + + 0 + AddDataSetFolder + + + + AddDataSetFolder + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=16994 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=16995 + + + + + i=46 + + false + + i=16996 + + + + true + true + + + + i=16995 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16994 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16996 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16994 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=16997 + + Method_4 + + 0 + RemoveDataSetFolder + + + + RemoveDataSetFolder + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14477 + + + + + i=40 + + false + + i=16997 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17007 + + + + true + true + + + + i=17007 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16997 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17080 + + ObjectType_8 + + 0 + DiscrepancyAlarmType + + + + DiscrepancyAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2915 + + + + + i=46 + + false + + i=17215 + + + + + i=46 + + false + + i=17216 + + + + + i=46 + + false + + i=17217 + + + + false + + + + i=17202 + + Variable_2 + + 0 + NetworkInterface + + + + NetworkInterface + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14221 + + + + + i=40 + + false + + i=16309 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17576 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17203 + + Object_1 + + 0 + TransportSettings + + + + TransportSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=17721 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=17204 + + Variable_2 + + 0 + MaxNetworkMessageSize + + + + MaxNetworkMessageSize + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17214 + + Variable_2 + + 0 + WriterGroupId + + + + WriterGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17215 + + Variable_2 + + 0 + TargetValueNode + + + + TargetValueNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17080 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17216 + + Variable_2 + + 0 + ExpectedTime + + + + ExpectedTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17080 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17217 + + Variable_2 + + 0 + Tolerance + + + + Tolerance + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17080 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17218 + + ObjectType_8 + + 0 + SafetyConditionClassType + + + + SafetyConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=17219 + + ObjectType_8 + + 0 + HighlyManagedAlarmConditionClassType + + + + HighlyManagedAlarmConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=17220 + + ObjectType_8 + + 0 + TrainingConditionClassType + + + + TrainingConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=17221 + + ObjectType_8 + + 0 + TestingConditionSubClassType + + + + TestingConditionSubClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=17222 + + Variable_2 + + 0 + ConditionEventId + + + + ConditionEventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2829 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17223 + + Variable_2 + + 0 + ConditionEventId + + + + ConditionEventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8944 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17224 + + Variable_2 + + 0 + ConditionEventId + + + + ConditionEventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=8961 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17225 + + ObjectType_8 + + 0 + AuditConditionSuppressionEventType + + + + AuditConditionSuppressionEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + false + + + + i=17242 + + ObjectType_8 + + 0 + AuditConditionSilenceEventType + + + + AuditConditionSilenceEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + false + + + + i=17259 + + ObjectType_8 + + 0 + AuditConditionOutOfServiceEventType + + + + AuditConditionOutOfServiceEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2790 + + + + false + + + + i=17276 + + ReferenceType_32 + + 0 + HasEffectDisable + + + + HasEffectDisable + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=54 + + + + false + false + + + MayBeDisabledBy + + + + + i=17277 + + VariableType_16 + + 0 + AlarmRateVariableType + + + + AlarmRateVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=17278 + + + + + + + + + + i=11 + + -1 + + false + + + + i=17278 + + Variable_2 + + 0 + Rate + + + + Rate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17277 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17279 + + ObjectType_8 + + 0 + AlarmMetricsType + + + + AlarmMetricsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=17280 + + + + + i=47 + + false + + i=17991 + + + + + i=47 + + false + + i=17281 + + + + + i=47 + + false + + i=17282 + + + + + i=47 + + false + + i=17284 + + + + + i=47 + + false + + i=17286 + + + + + i=47 + + false + + i=17283 + + + + + i=47 + + false + + i=17288 + + + + + i=47 + + false + + i=18666 + + + + false + + + + i=17280 + + Variable_2 + + 0 + AlarmCount + + + + AlarmCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17281 + + Variable_2 + + 0 + MaximumActiveState + + + + MaximumActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17282 + + Variable_2 + + 0 + MaximumUnAck + + + + MaximumUnAck + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17283 + + Variable_2 + + 0 + MaximumReAlarmCount + + + + MaximumReAlarmCount + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17284 + + Variable_2 + + 0 + CurrentAlarmRate + + + + CurrentAlarmRate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=17277 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17285 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17285 + + Variable_2 + + 0 + Rate + + + + Rate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17284 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17286 + + Variable_2 + + 0 + MaximumAlarmRate + + + + MaximumAlarmRate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=17277 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17287 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17287 + + Variable_2 + + 0 + Rate + + + + Rate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17286 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17288 + + Variable_2 + + 0 + AverageAlarmRate + + + + AverageAlarmRate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=17277 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17289 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17289 + + Variable_2 + + 0 + Rate + + + + Rate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17288 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17292 + + Variable_2 + + 0 + TransportProfileUri + + + + TransportProfileUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14417 + + + + + i=40 + + false + + i=16309 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17706 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17296 + + Method_4 + + 0 + SetSecurityKeys + + + + SetSecurityKeys + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14416 + + + + + i=40 + + false + + i=17296 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17297 + + + + true + true + + + + i=17297 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17296 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17302 + + Variable_2 + + 0 + MaxNetworkMessageSize + + + + MaxNetworkMessageSize + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17325 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17306 + + Variable_2 + + 0 + TransportProfileUri + + + + TransportProfileUri + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=16309 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17710 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17310 + + Object_1 + + 0 + <WriterGroupName> + + + + <WriterGroupName> + + + 0 + 0 + + + 0 + + + + i=18804 + + true + + i=14209 + + + + + i=40 + + false + + i=17725 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=17311 + + + + + i=46 + + false + + i=17204 + + + + + i=46 + + false + + i=17486 + + + + + i=47 + + false + + i=17314 + + + + + i=46 + + false + + i=17214 + + + + + i=46 + + false + + i=17318 + + + + + i=46 + + false + + i=17319 + + + + + i=46 + + false + + i=17321 + + + + + i=46 + + false + + i=17322 + + + + + i=46 + + false + + i=17558 + + + + 0 + + + + i=17311 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17314 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17310 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=17315 + + + + 0 + + + + i=17315 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17314 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17318 + + Variable_2 + + 0 + PublishingInterval + + + + PublishingInterval + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17319 + + Variable_2 + + 0 + KeepAliveTime + + + + KeepAliveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17321 + + Variable_2 + + 0 + Priority + + + + Priority + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17322 + + Variable_2 + + 0 + LocaleIds + + + + LocaleIds + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17325 + + Object_1 + + 0 + <ReaderGroupName> + + + + <ReaderGroupName> + + + 0 + 0 + + + 0 + + + + i=18805 + + true + + i=14209 + + + + + i=40 + + false + + i=17999 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=17326 + + + + + i=46 + + false + + i=17302 + + + + + i=46 + + false + + i=17487 + + + + + i=47 + + false + + i=17329 + + + + 0 + + + + i=17326 + + Variable_2 + + 0 + SecurityMode + + + + SecurityMode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17325 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=302 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17329 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17325 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=17330 + + + + 0 + + + + i=17330 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17329 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17366 + + Method_4 + + 0 + AddConnection + + + + AddConnection + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=16598 + + + + + i=46 + + false + + i=17367 + + + + + i=46 + + false + + i=17368 + + + + true + true + + + + i=17367 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17366 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17368 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17366 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17369 + + Method_4 + + 0 + RemoveConnection + + + + RemoveConnection + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=14432 + + + + + i=46 + + false + + i=17370 + + + + true + true + + + + i=17370 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17369 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17371 + + Object_1 + + 0 + PublishedDataSets + + + + PublishedDataSets + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=14477 + + + + 0 + + + + i=17386 + + Method_4 + + 0 + CreateTargetVariables + + + + CreateTargetVariables + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=17386 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17387 + + + + + i=46 + + false + + i=17388 + + + + true + true + + + + i=17387 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17386 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetVariablesToAdd + + i=14744 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17388 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17386 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17389 + + Method_4 + + 0 + CreateDataSetMirror + + + + CreateDataSetMirror + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=17389 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17390 + + + + + i=46 + + false + + i=17391 + + + + true + true + + + + i=17390 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17389 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ParentNodeName + + i=12 + + -1 + + + + + + + i=297 + + + + RolePermissions + + i=96 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17391 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17389 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ParentNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17405 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=14643 + + + + + i=47 + + false + + i=17406 + + + + 0 + + + + i=17406 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17405 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17409 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14443 + + + + + i=40 + + false + + i=19732 + + + + + i=47 + + false + + i=17410 + + + + + i=47 + + false + + i=17411 + + + + + i=47 + + false + + i=17416 + + + + + i=47 + + false + + i=17421 + + + + + i=47 + + false + + i=17422 + + + + + i=47 + + false + + i=17423 + + + + + i=47 + + false + + i=17457 + + + + 0 + + + + i=17410 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=63 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17411 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17412 + + + + + i=46 + + false + + i=17413 + + + + + i=46 + + false + + i=17414 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17412 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17411 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17413 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17411 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17414 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17411 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17416 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17417 + + + + + i=46 + + false + + i=17418 + + + + + i=46 + + false + + i=17419 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17417 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17416 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17418 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17416 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17419 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17416 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17421 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=19689 + + + + true + true + + + + i=17422 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=63 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17423 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=58 + + + + + i=47 + + false + + i=17424 + + + + + i=47 + + false + + i=17431 + + + + + i=47 + + false + + i=17436 + + + + + i=47 + + false + + i=17441 + + + + + i=47 + + false + + i=17446 + + + + + i=47 + + false + + i=17451 + + + + 0 + + + + i=17424 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17423 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17425 + + + + + i=46 + + false + + i=17426 + + + + + i=46 + + false + + i=17429 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17425 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17424 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17426 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17424 + + + + + i=40 + + false + + i=68 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17427 + + Method_4 + + 0 + AddWriterGroup + + + + AddWriterGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=17427 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17428 + + + + + i=46 + + false + + i=17456 + + + + true + true + + + + i=17428 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17427 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Configuration + + i=15480 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17429 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17424 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17431 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17423 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17432 + + + + + i=46 + + false + + i=17433 + + + + + i=46 + + false + + i=17434 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17432 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17431 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17433 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17431 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17434 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17431 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17436 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17423 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17437 + + + + + i=46 + + false + + i=17438 + + + + + i=46 + + false + + i=17439 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17437 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17436 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17438 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17436 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17439 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17436 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17441 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17423 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17442 + + + + + i=46 + + false + + i=17443 + + + + + i=46 + + false + + i=17444 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17442 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17441 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17443 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17441 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17444 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17441 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17446 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17423 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17447 + + + + + i=46 + + false + + i=17448 + + + + + i=46 + + false + + i=17449 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17447 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17446 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17448 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17446 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17449 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17446 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17451 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17423 + + + + + i=40 + + false + + i=19725 + + + + + i=46 + + false + + i=17452 + + + + + i=46 + + false + + i=17453 + + + + + i=46 + + false + + i=17454 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17452 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17451 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17453 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17451 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17454 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17451 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17456 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17427 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17457 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17409 + + + + + i=40 + + false + + i=58 + + + + + i=47 + + false + + i=17458 + + + + + i=47 + + false + + i=17460 + + + + + i=47 + + false + + i=17462 + + + + + i=47 + + false + + i=17464 + + + + 0 + + + + i=17458 + + Variable_2 + + 0 + ConfiguredDataSetWriters + + + + ConfiguredDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17457 + + + + + i=40 + + false + + i=63 + + + + + i=46 + + false + + i=17459 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17459 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17458 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17460 + + Variable_2 + + 0 + ConfiguredDataSetReaders + + + + ConfiguredDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17457 + + + + + i=40 + + false + + i=63 + + + + + i=46 + + false + + i=17461 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17461 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17460 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17462 + + Variable_2 + + 0 + OperationalDataSetWriters + + + + OperationalDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17457 + + + + + i=40 + + false + + i=63 + + + + + i=46 + + false + + i=17463 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17463 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17462 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17464 + + Variable_2 + + 0 + OperationalDataSetReaders + + + + OperationalDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17457 + + + + + i=40 + + false + + i=63 + + + + + i=46 + + false + + i=17466 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17465 + + Method_4 + + 0 + AddReaderGroup + + + + AddReaderGroup + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=17465 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17507 + + + + + i=46 + + false + + i=17508 + + + + true + true + + + + i=17466 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17464 + + + + + i=40 + + false + + i=68 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17467 + + DataType_64 + + 0 + DatagramConnectionTransportDataType + + + + DatagramConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15618 + + + + + i=38 + + false + + i=17468 + + + + + i=38 + + false + + i=17472 + + + + + i=38 + + false + + i=17476 + + + + false + + + + + i=17468 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=17467 + + + + + i=39 + + false + + i=17469 + + + + 0 + + + + i=17469 + + Variable_2 + + 0 + DatagramConnectionTransportDataType + + + + DatagramConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DatagramConnectionTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17472 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=17467 + + + + + i=39 + + false + + i=17473 + + + + 0 + + + + i=17473 + + Variable_2 + + 0 + DatagramConnectionTransportDataType + + + + DatagramConnectionTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DatagramConnectionTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17476 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=17467 + + + + 0 + + + + i=17477 + + Variable_2 + + 0 + DataSetOffset + + + + DataSetOffset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17478 + + Variable_2 + + 0 + ConnectionProperties + + + + ConnectionProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14417 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17479 + + Variable_2 + + 0 + SupportedTransportProfiles + + + + SupportedTransportProfiles + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14416 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17481 + + Variable_2 + + 0 + SupportedTransportProfiles + + + + SupportedTransportProfiles + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14443 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17482 + + Variable_2 + + 0 + DataSetWriterProperties + + + + DataSetWriterProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15222 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17485 + + Variable_2 + + 0 + ConnectionProperties + + + + ConnectionProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14209 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17486 + + Variable_2 + + 0 + GroupProperties + + + + GroupProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17487 + + Variable_2 + + 0 + GroupProperties + + + + GroupProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17325 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17488 + + Variable_2 + + 0 + GroupProperties + + + + GroupProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14232 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17490 + + Variable_2 + + 0 + DataSetWriterProperties + + + + DataSetWriterProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17743 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17492 + + Variable_2 + + 0 + DataSetReaderProperties + + + + DataSetReaderProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17493 + + Variable_2 + + 0 + DataSetWriterProperties + + + + DataSetWriterProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15298 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17494 + + Variable_2 + + 0 + DataSetReaderProperties + + + + DataSetReaderProperties + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14533 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17496 + + ObjectType_8 + + 0 + KeyCredentialConfigurationFolderType + + + + KeyCredentialConfigurationFolderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=47 + + false + + i=17511 + + + + + i=47 + + false + + i=17522 + + + + false + + + + i=17497 + + VariableType_16 + + 0 + AnalogUnitType + + + + AnalogUnitType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15318 + + + + + i=46 + + false + + i=17502 + + + + + + + + + + i=26 + + -2 + + false + + + + i=17502 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17497 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17503 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15533 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17507 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17465 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Configuration + + i=15520 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17508 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17465 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17511 + + Object_1 + + 0 + <ServiceName> + + + + <ServiceName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17496 + + + + + i=40 + + false + + i=18001 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=17512 + + + + + i=46 + + false + + i=17513 + + + + 0 + + + + i=17512 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17511 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17513 + + Variable_2 + + 0 + ProfileUri + + + + ProfileUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17511 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17522 + + Method_4 + + 0 + CreateCredential + + + + CreateCredential + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17496 + + + + + i=40 + + false + + i=17522 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17523 + + + + + i=46 + + false + + i=17524 + + + + true + true + + + + i=17523 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17522 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ResourceUri + + i=12 + + -1 + + + + + + + i=297 + + + + ProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrls + + i=12 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17524 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17522 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + CredentialNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17558 + + Variable_2 + + 0 + HeaderLayoutUri + + + + HeaderLayoutUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17310 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17559 + + Variable_2 + + 0 + HeaderLayoutUri + + + + HeaderLayoutUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17560 + + Variable_2 + + 0 + KeyFrameCount + + + + KeyFrameCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17562 + + Variable_2 + + 0 + HeaderLayoutUri + + + + HeaderLayoutUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17563 + + Variable_2 + + 0 + KeyFrameCount + + + + KeyFrameCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17564 + + Variable_2 + + 0 + HeaderLayoutUri + + + + HeaderLayoutUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17567 + + Variable_2 + + 0 + InstrumentRange + + + + InstrumentRange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=884 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17568 + + Variable_2 + + 0 + EURange + + + + EURange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=884 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17569 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17570 + + VariableType_16 + + 0 + AnalogUnitRangeType + + + + AnalogUnitRangeType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2368 + + + + + i=46 + + false + + i=17575 + + + + + + + + + + i=26 + + -2 + + false + + + + i=17575 + + Variable_2 + + 0 + EngineeringUnits + + + + EngineeringUnits + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17570 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17576 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17202 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17579 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15154 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17582 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21146 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17588 + + DataType_64 + + 0 + Index + + + + Index + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + false + + + + + i=17589 + + ObjectType_8 + + 0 + DictionaryEntryType + + + + DictionaryEntryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=17590 + + + + + i=45 + + false + + i=17598 + + + + + i=45 + + false + + i=17600 + + + + true + + + + i=17590 + + Object_1 + + 0 + <DictionaryEntryName> + + + + <DictionaryEntryName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17589 + + + + + i=40 + + false + + i=17589 + + + + + i=37 + + false + + i=11508 + + + + 0 + + + + i=17591 + + ObjectType_8 + + 0 + DictionaryFolderType + + + + DictionaryFolderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=47 + + false + + i=17592 + + + + + i=47 + + false + + i=17593 + + + + false + + + + i=17592 + + Object_1 + + 0 + <DictionaryFolderName> + + + + <DictionaryFolderName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17591 + + + + + i=40 + + false + + i=17591 + + + + + i=37 + + false + + i=11508 + + + + 0 + + + + i=17593 + + Object_1 + + 0 + <DictionaryEntryName> + + + + <DictionaryEntryName> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17591 + + + + + i=40 + + false + + i=17589 + + + + + i=37 + + false + + i=11508 + + + + 0 + + + + i=17594 + + Object_1 + + 0 + Dictionaries + + + + Dictionaries + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=17591 + + + + + i=47 + + true + + i=2253 + + + + 0 + + + + i=17597 + + ReferenceType_32 + + 0 + HasDictionaryEntry + + + + HasDictionaryEntry + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + DictionaryEntryOf + + + + + i=17598 + + ObjectType_8 + + 0 + IrdiDictionaryEntryType + + + + IrdiDictionaryEntryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17589 + + + + false + + + + i=17600 + + ObjectType_8 + + 0 + UriDictionaryEntryType + + + + UriDictionaryEntryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17589 + + + + false + + + + i=17602 + + ObjectType_8 + + 0 + BaseInterfaceType + + + + BaseInterfaceType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=35 + + true + + i=17708 + + + + + i=45 + + false + + i=23513 + + + + true + + + + i=17603 + + ReferenceType_32 + + 0 + HasInterface + + + + HasInterface + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + InterfaceOf + + + + + i=17604 + + ReferenceType_32 + + 0 + HasAddIn + + + + HasAddIn + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + AddInOf + + + + + i=17605 + + Variable_2 + + 0 + DefaultInstanceBrowseName + + + + DefaultInstanceBrowseName + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + 0 + + + + + i=20 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17612 + + Variable_2 + + 0 + LocalTime + + + + LocalTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2004 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=8912 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=17615 + + Variable_2 + + 0 + StatusCodeId + + + + StatusCodeId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2058 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17632 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16309 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17633 + + Variable_2 + + 0 + SelectionDescriptions + + + + SelectionDescriptions + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=16309 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17634 + + Variable_2 + + 0 + LocalTime + + + + LocalTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2253 + + + + + i=40 + + false + + i=68 + + + + + + + + + + i=8912 + + -1 + + 1 + 1 + 1000 + false + 0 + + + + i=17635 + + Variable_2 + + 0 + AvailableStates + + + + AvailableStates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2771 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17636 + + Variable_2 + + 0 + AvailableTransitions + + + + AvailableTransitions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2771 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17641 + + ObjectType_8 + + 0 + RoleMappingRuleChangedAuditEventType + + + + RoleMappingRuleChangedAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2127 + + + + true + + + + i=17706 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17292 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17708 + + Object_1 + + 0 + InterfaceTypes + + + + InterfaceTypes + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=35 + + false + + i=17602 + + + + + i=35 + + true + + i=86 + + + + 0 + + + + i=17709 + + VariableType_16 + + 0 + RationalNumberType + + + + RationalNumberType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=17712 + + + + + i=47 + + false + + i=17713 + + + + + + + + + + i=18806 + + -1 + + false + + + + i=17710 + + Variable_2 + + 0 + Selections + + + + Selections + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17712 + + Variable_2 + + 0 + Numerator + + + + Numerator + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17709 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=6 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17713 + + Variable_2 + + 0 + Denominator + + + + Denominator + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17709 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17714 + + VariableType_16 + + 0 + VectorType + + + + VectorType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=17715 + + + + + i=45 + + false + + i=17716 + + + + + + + + + + i=18807 + + -1 + + true + + + + i=17715 + + Variable_2 + + 0 + VectorUnit + + + + VectorUnit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17714 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17716 + + VariableType_16 + + 0 + 3DVectorType + + + + 3DVectorType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17714 + + + + + i=47 + + false + + i=18769 + + + + + i=47 + + false + + i=18770 + + + + + i=47 + + false + + i=18771 + + + + + + + + + + i=18808 + + -1 + + false + + + + i=17718 + + Method_4 + + 0 + Delete + + + + Delete + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=13354 + + + + + i=40 + + false + + i=13393 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17719 + + + + true + true + + + + i=17719 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17718 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17721 + + ObjectType_8 + + 0 + ConnectionTransportType + + + + ConnectionTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=15064 + + + + + i=45 + + false + + i=15155 + + + + true + + + + i=17724 + + Variable_2 + + 0 + MaxNetworkMessageSize + + + + MaxNetworkMessageSize + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=14232 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17725 + + ObjectType_8 + + 0 + WriterGroupType + + + + WriterGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14232 + + + + + i=46 + + false + + i=17736 + + + + + i=46 + + false + + i=17737 + + + + + i=46 + + false + + i=17738 + + + + + i=46 + + false + + i=17739 + + + + + i=46 + + false + + i=17740 + + + + + i=46 + + false + + i=17559 + + + + + i=47 + + false + + i=17741 + + + + + i=47 + + false + + i=17742 + + + + + i=15296 + + false + + i=17743 + + + + + i=47 + + false + + i=17812 + + + + + i=47 + + false + + i=17969 + + + + + i=47 + + false + + i=17992 + + + + false + + + + i=17732 + + Object_1 + + 0 + AuthorizationServices + + + + AuthorizationServices + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=61 + + + + + i=47 + + true + + i=12637 + + + + 0 + + + + i=17736 + + Variable_2 + + 0 + WriterGroupId + + + + WriterGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17737 + + Variable_2 + + 0 + PublishingInterval + + + + PublishingInterval + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17738 + + Variable_2 + + 0 + KeepAliveTime + + + + KeepAliveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17739 + + Variable_2 + + 0 + Priority + + + + Priority + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17740 + + Variable_2 + + 0 + LocaleIds + + + + LocaleIds + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=295 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17741 + + Object_1 + + 0 + TransportSettings + + + + TransportSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17725 + + + + + i=40 + + false + + i=17997 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=17742 + + Object_1 + + 0 + MessageSettings + + + + MessageSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17725 + + + + + i=40 + + false + + i=17998 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=17743 + + Object_1 + + 0 + <DataSetWriterName> + + + + <DataSetWriterName> + + + 0 + 0 + + + 0 + + + + i=15296 + + true + + i=17725 + + + + + i=40 + + false + + i=15298 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=17744 + + + + + i=46 + + false + + i=17745 + + + + + i=46 + + false + + i=17490 + + + + + i=47 + + false + + i=17749 + + + + 0 + + + + i=17744 + + Variable_2 + + 0 + DataSetWriterId + + + + DataSetWriterId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17743 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17745 + + Variable_2 + + 0 + DataSetFieldContentMask + + + + DataSetFieldContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17743 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15583 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17749 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17743 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=17750 + + + + 0 + + + + i=17750 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17749 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17812 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17725 + + + + + i=40 + + false + + i=19834 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=17813 + + + + + i=47 + + false + + i=17814 + + + + + i=47 + + false + + i=17819 + + + + + i=47 + + false + + i=17824 + + + + + i=47 + + false + + i=17825 + + + + + i=47 + + false + + i=17826 + + + + + i=47 + + false + + i=17858 + + + + 0 + + + + i=17813 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17814 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17815 + + + + + i=46 + + false + + i=17816 + + + + + i=46 + + false + + i=17817 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17815 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17814 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17816 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17814 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17817 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17814 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17819 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17820 + + + + + i=46 + + false + + i=17821 + + + + + i=46 + + false + + i=17822 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17820 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17819 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17821 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17819 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17822 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17819 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17824 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=17825 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17826 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=17827 + + + + + i=47 + + false + + i=17832 + + + + + i=47 + + false + + i=17837 + + + + + i=47 + + false + + i=17842 + + + + + i=47 + + false + + i=17847 + + + + + i=47 + + false + + i=17853 + + + + + i=47 + + false + + i=17859 + + + + + i=47 + + false + + i=17874 + + + + + i=47 + + false + + i=17900 + + + + 0 + + + + i=17827 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17828 + + + + + i=46 + + false + + i=17829 + + + + + i=46 + + false + + i=17830 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17828 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17827 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17829 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17827 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17830 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17827 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17832 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17833 + + + + + i=46 + + false + + i=17834 + + + + + i=46 + + false + + i=17835 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17833 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17832 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17834 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17832 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17835 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17832 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17837 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17838 + + + + + i=46 + + false + + i=17839 + + + + + i=46 + + false + + i=17840 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17838 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17837 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17839 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17837 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17840 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17837 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17842 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17843 + + + + + i=46 + + false + + i=17844 + + + + + i=46 + + false + + i=17845 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17843 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17842 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17844 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17842 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17845 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17842 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17847 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17848 + + + + + i=46 + + false + + i=17849 + + + + + i=46 + + false + + i=17850 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17848 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17847 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17849 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17847 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17850 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17847 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17852 + + ObjectType_8 + + 0 + AuthorizationServiceConfigurationType + + + + AuthorizationServiceConfigurationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=18072 + + + + + i=46 + + false + + i=17860 + + + + + i=46 + + false + + i=18073 + + + + false + + + + i=17853 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17854 + + + + + i=46 + + false + + i=17855 + + + + + i=46 + + false + + i=17856 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17854 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17853 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17855 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17853 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17856 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17853 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17858 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17812 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=17913 + + + + + i=47 + + false + + i=17927 + + + + 0 + + + + i=17859 + + Variable_2 + + 0 + SentNetworkMessages + + + + SentNetworkMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17864 + + + + + i=46 + + false + + i=17871 + + + + + i=46 + + false + + i=17872 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17860 + + Variable_2 + + 0 + ServiceCertificate + + + + ServiceCertificate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17852 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17864 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17859 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17868 + + Method_4 + + 0 + Unsuppress + + + + Unsuppress + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=17868 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=17225 + + + + true + true + + + + i=17869 + + Method_4 + + 0 + RemoveFromService + + + + RemoveFromService + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=17869 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=17259 + + + + true + true + + + + i=17870 + + Method_4 + + 0 + PlaceInService + + + + PlaceInService + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=17870 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=17259 + + + + true + true + + + + i=17871 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17859 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17872 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17859 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17874 + + Variable_2 + + 0 + FailedTransmissions + + + + FailedTransmissions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17878 + + + + + i=46 + + false + + i=17885 + + + + + i=46 + + false + + i=17892 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17878 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17874 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17885 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17874 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17892 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17874 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17900 + + Variable_2 + + 0 + EncryptionErrors + + + + EncryptionErrors + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17826 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17901 + + + + + i=46 + + false + + i=17902 + + + + + i=46 + + false + + i=17903 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17901 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17900 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17902 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17900 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17903 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17900 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17913 + + Variable_2 + + 0 + ConfiguredDataSetWriters + + + + ConfiguredDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17858 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17920 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17920 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17913 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17927 + + Variable_2 + + 0 + OperationalDataSetWriters + + + + OperationalDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17858 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17934 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17934 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17927 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17969 + + Method_4 + + 0 + AddDataSetWriter + + + + AddDataSetWriter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17725 + + + + + i=40 + + false + + i=17969 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17976 + + + + + i=46 + + false + + i=17987 + + + + true + true + + + + i=17976 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17969 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Configuration + + i=15597 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17983 + + ReferenceType_32 + + 0 + HasEffectEnable + + + + HasEffectEnable + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=54 + + + + false + false + + + MayBeEnabledBy + + + + + i=17984 + + ReferenceType_32 + + 0 + HasEffectSuppressed + + + + HasEffectSuppressed + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=54 + + + + false + false + + + MayBeSuppressedBy + + + + + i=17985 + + ReferenceType_32 + + 0 + HasEffectUnsuppressed + + + + HasEffectUnsuppressed + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=54 + + + + false + false + + + MayBeUnsuppressedBy + + + + + i=17986 + + VariableType_16 + + 0 + AudioVariableType + + + + AudioVariableType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=17988 + + + + + i=46 + + false + + i=17989 + + + + + i=46 + + false + + i=17990 + + + + + + + + + + i=16307 + + -1 + + false + + + + i=17987 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17969 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetWriterNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17988 + + Variable_2 + + 0 + ListId + + + + ListId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17986 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17989 + + Variable_2 + + 0 + AgencyId + + + + AgencyId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17986 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17990 + + Variable_2 + + 0 + VersionId + + + + VersionId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17986 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17991 + + Variable_2 + + 0 + StartTime + + + + StartTime + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=17992 + + Method_4 + + 0 + RemoveDataSetWriter + + + + RemoveDataSetWriter + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17725 + + + + + i=40 + + false + + i=17992 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=17993 + + + + true + true + + + + i=17993 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17992 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetWriterNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=17997 + + ObjectType_8 + + 0 + WriterGroupTransportType + + + + WriterGroupTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=21133 + + + + + i=45 + + false + + i=21136 + + + + true + + + + i=17998 + + ObjectType_8 + + 0 + WriterGroupMessageType + + + + WriterGroupMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=21105 + + + + + i=45 + + false + + i=21126 + + + + true + + + + i=17999 + + ObjectType_8 + + 0 + ReaderGroupType + + + + ReaderGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=14232 + + + + + i=15297 + + false + + i=18076 + + + + + i=47 + + false + + i=21015 + + + + + i=47 + + false + + i=21080 + + + + + i=47 + + false + + i=21081 + + + + + i=47 + + false + + i=21082 + + + + + i=47 + + false + + i=21085 + + + + false + + + + i=18001 + + ObjectType_8 + + 0 + KeyCredentialConfigurationType + + + + KeyCredentialConfigurationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=46 + + false + + i=18069 + + + + + i=46 + + false + + i=18165 + + + + + i=46 + + false + + i=18004 + + + + + i=46 + + false + + i=18005 + + + + + i=47 + + false + + i=18006 + + + + + i=47 + + false + + i=18008 + + + + false + + + + i=18004 + + Variable_2 + + 0 + EndpointUrls + + + + EndpointUrls + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18001 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=18005 + + Variable_2 + + 0 + ServiceStatus + + + + ServiceStatus + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18001 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18006 + + Method_4 + + 0 + UpdateCredential + + + + UpdateCredential + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18001 + + + + + i=40 + + false + + i=18006 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=18007 + + + + true + true + + + + i=18007 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18006 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + CredentialId + + i=12 + + -1 + + + + + + + i=297 + + + + CredentialSecret + + i=15 + + -1 + + + + + + + i=297 + + + + CertificateThumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=18008 + + Method_4 + + 0 + DeleteCredential + + + + DeleteCredential + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18001 + + + + + i=40 + + false + + i=18008 + + + + + i=37 + + false + + i=80 + + + + true + true + + + + i=18011 + + ObjectType_8 + + 0 + KeyCredentialAuditEventType + + + + KeyCredentialAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2127 + + + + + i=46 + + false + + i=18028 + + + + + i=45 + + false + + i=18029 + + + + + i=45 + + false + + i=18047 + + + + true + + + + i=18028 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18011 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18029 + + ObjectType_8 + + 0 + KeyCredentialUpdatedAuditEventType + + + + KeyCredentialUpdatedAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18011 + + + + false + + + + i=18047 + + ObjectType_8 + + 0 + KeyCredentialDeletedAuditEventType + + + + KeyCredentialDeletedAuditEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18011 + + + + false + + + + i=18069 + + Variable_2 + + 0 + ResourceUri + + + + ResourceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18001 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18072 + + Variable_2 + + 0 + ServiceUri + + + + ServiceUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17852 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18073 + + Variable_2 + + 0 + IssuerEndpointUrl + + + + IssuerEndpointUrl + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=17852 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18076 + + Object_1 + + 0 + <DataSetReaderName> + + + + <DataSetReaderName> + + + 0 + 0 + + + 0 + + + + i=15297 + + true + + i=17999 + + + + + i=40 + + false + + i=15306 + + + + + i=37 + + false + + i=11508 + + + + + i=46 + + false + + i=18077 + + + + + i=46 + + false + + i=18078 + + + + + i=46 + + false + + i=18079 + + + + + i=46 + + false + + i=18080 + + + + + i=46 + + false + + i=18081 + + + + + i=46 + + false + + i=18082 + + + + + i=46 + + false + + i=17560 + + + + + i=46 + + false + + i=17562 + + + + + i=46 + + false + + i=17492 + + + + + i=47 + + false + + i=18088 + + + + + i=47 + + false + + i=21006 + + + + 0 + + + + i=18077 + + Variable_2 + + 0 + PublisherId + + + + PublisherId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18078 + + Variable_2 + + 0 + WriterGroupId + + + + WriterGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18079 + + Variable_2 + + 0 + DataSetWriterId + + + + DataSetWriterId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18080 + + Variable_2 + + 0 + DataSetMetaData + + + + DataSetMetaData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14523 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18081 + + Variable_2 + + 0 + DataSetFieldContentMask + + + + DataSetFieldContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15583 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18082 + + Variable_2 + + 0 + MessageReceiveTimeout + + + + MessageReceiveTimeout + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18088 + + Object_1 + + 0 + Status + + + + Status + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18076 + + + + + i=40 + + false + + i=14643 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=18089 + + + + 0 + + + + i=18089 + + Variable_2 + + 0 + State + + + + State + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18088 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14647 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18155 + + Object_1 + + 0 + KeyCredentialConfiguration + + + + KeyCredentialConfiguration + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=17496 + + + + + i=47 + + true + + i=12637 + + + + 0 + + + + i=18165 + + Variable_2 + + 0 + ProfileUri + + + + ProfileUri + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18001 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18166 + + Variable_2 + + 0 + DataTypeDefinition + + + + DataTypeDefinition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DataTypeDefinition'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18169 + + Variable_2 + + 0 + StructureField + + + + StructureField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='StructureField'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18172 + + Variable_2 + + 0 + StructureDefinition + + + + StructureDefinition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='StructureDefinition'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18175 + + Variable_2 + + 0 + EnumDefinition + + + + EnumDefinition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='EnumDefinition'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18178 + + Variable_2 + + 0 + DataTypeDefinition + + + + DataTypeDefinition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DataTypeDefinition + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18181 + + Variable_2 + + 0 + StructureField + + + + StructureField + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + StructureField + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18184 + + Variable_2 + + 0 + StructureDefinition + + + + StructureDefinition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + StructureDefinition + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18187 + + Variable_2 + + 0 + EnumDefinition + + + + EnumDefinition + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + EnumDefinition + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18190 + + Variable_2 + + 0 + LatchedState + + + + LatchedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=18191 + + + + + i=46 + + false + + i=18195 + + + + + i=46 + + false + + i=18197 + + + + + i=46 + + false + + i=18198 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18191 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18190 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18195 + + Variable_2 + + 0 + TransitionTime + + + + TransitionTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18190 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18197 + + Variable_2 + + 0 + TrueState + + + + TrueState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18190 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Latched + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18198 + + Variable_2 + + 0 + FalseState + + + + FalseState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18190 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + en + Unlatched + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18199 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=2915 + + + + + i=40 + + false + + i=18199 + + + + + i=37 + + false + + i=80 + + + + + i=3065 + + false + + i=15013 + + + + true + true + + + + i=18347 + + ObjectType_8 + + 0 + InstrumentDiagnosticAlarmType + + + + InstrumentDiagnosticAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=10637 + + + + false + + + + i=18496 + + ObjectType_8 + + 0 + SystemDiagnosticAlarmType + + + + SystemDiagnosticAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=10637 + + + + false + + + + i=18665 + + ObjectType_8 + + 0 + StatisticalConditionClassType + + + + StatisticalConditionClassType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11163 + + + + true + + + + i=18666 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17279 + + + + + i=40 + + false + + i=18666 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2127 + + + + true + true + + + + i=18715 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14416 + + + + + i=40 + + false + + i=19732 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=18716 + + + + + i=47 + + false + + i=18717 + + + + + i=47 + + false + + i=18722 + + + + + i=47 + + false + + i=18727 + + + + + i=47 + + false + + i=18728 + + + + + i=47 + + false + + i=18729 + + + + + i=47 + + false + + i=18760 + + + + 0 + + + + i=18716 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18717 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18718 + + + + + i=46 + + false + + i=18719 + + + + + i=46 + + false + + i=18720 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18718 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18717 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18719 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18717 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18720 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18717 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18722 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18723 + + + + + i=46 + + false + + i=18724 + + + + + i=46 + + false + + i=18725 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18723 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18722 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18724 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18722 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18725 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18722 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18727 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=18728 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18729 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=18730 + + + + + i=47 + + false + + i=18735 + + + + + i=47 + + false + + i=18740 + + + + + i=47 + + false + + i=18745 + + + + + i=47 + + false + + i=18750 + + + + + i=47 + + false + + i=18755 + + + + 0 + + + + i=18730 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18729 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18731 + + + + + i=46 + + false + + i=18732 + + + + + i=46 + + false + + i=18733 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18731 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18730 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18732 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18730 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18733 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18730 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18735 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18729 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18736 + + + + + i=46 + + false + + i=18737 + + + + + i=46 + + false + + i=18738 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18736 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18735 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18737 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18735 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18738 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18735 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18740 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18729 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18741 + + + + + i=46 + + false + + i=18742 + + + + + i=46 + + false + + i=18743 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18741 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18740 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18742 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18740 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18743 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18740 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18745 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18729 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18746 + + + + + i=46 + + false + + i=18747 + + + + + i=46 + + false + + i=18748 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18746 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18745 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18747 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18745 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18748 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18745 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18750 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18729 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18751 + + + + + i=46 + + false + + i=18752 + + + + + i=46 + + false + + i=18753 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18751 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18750 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18752 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18750 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18753 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18750 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18755 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18729 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18756 + + + + + i=46 + + false + + i=18757 + + + + + i=46 + + false + + i=18758 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18756 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18757 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18758 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18755 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18760 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18715 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=18761 + + + + + i=47 + + false + + i=18763 + + + + + i=47 + + false + + i=18765 + + + + + i=47 + + false + + i=18767 + + + + 0 + + + + i=18761 + + Variable_2 + + 0 + ConfiguredDataSetWriters + + + + ConfiguredDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18760 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18762 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18762 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18761 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18763 + + Variable_2 + + 0 + ConfiguredDataSetReaders + + + + ConfiguredDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18760 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18764 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18764 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18763 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18765 + + Variable_2 + + 0 + OperationalDataSetWriters + + + + OperationalDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18760 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18766 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18766 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18765 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18767 + + Variable_2 + + 0 + OperationalDataSetReaders + + + + OperationalDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18760 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=18768 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18768 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18767 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18769 + + Variable_2 + + 0 + X + + + + X + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17716 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18770 + + Variable_2 + + 0 + Y + + + + Y + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17716 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18771 + + Variable_2 + + 0 + Z + + + + Z + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17716 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18772 + + VariableType_16 + + 0 + CartesianCoordinatesType + + + + CartesianCoordinatesType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=18773 + + + + + i=45 + + false + + i=18774 + + + + + + + + + + i=18809 + + -1 + + true + + + + i=18773 + + Variable_2 + + 0 + LengthUnit + + + + LengthUnit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18772 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18774 + + VariableType_16 + + 0 + 3DCartesianCoordinatesType + + + + 3DCartesianCoordinatesType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18772 + + + + + i=47 + + false + + i=18776 + + + + + i=47 + + false + + i=18777 + + + + + i=47 + + false + + i=18778 + + + + + + + + + + i=18810 + + -1 + + false + + + + i=18776 + + Variable_2 + + 0 + X + + + + X + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18774 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18777 + + Variable_2 + + 0 + Y + + + + Y + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18774 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18778 + + Variable_2 + + 0 + Z + + + + Z + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18774 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18779 + + VariableType_16 + + 0 + OrientationType + + + + OrientationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=18780 + + + + + i=45 + + false + + i=18781 + + + + + + + + + + i=18811 + + -1 + + true + + + + i=18780 + + Variable_2 + + 0 + AngleUnit + + + + AngleUnit + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18779 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=887 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18781 + + VariableType_16 + + 0 + 3DOrientationType + + + + 3DOrientationType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18779 + + + + + i=47 + + false + + i=18783 + + + + + i=47 + + false + + i=18784 + + + + + i=47 + + false + + i=18785 + + + + + + + + + + i=18812 + + -1 + + false + + + + i=18783 + + Variable_2 + + 0 + A + + + + A + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18781 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18784 + + Variable_2 + + 0 + B + + + + B + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18781 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18785 + + Variable_2 + + 0 + C + + + + C + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18781 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18786 + + VariableType_16 + + 0 + FrameType + + + + FrameType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=47 + + false + + i=18801 + + + + + i=47 + + false + + i=18787 + + + + + i=46 + + false + + i=18788 + + + + + i=47 + + false + + i=18789 + + + + + i=46 + + false + + i=18790 + + + + + i=45 + + false + + i=18791 + + + + + + + + + + i=18813 + + -1 + + true + + + + i=18787 + + Variable_2 + + 0 + Orientation + + + + Orientation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18786 + + + + + i=40 + + false + + i=18779 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=18811 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18788 + + Variable_2 + + 0 + Constant + + + + Constant + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18786 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18789 + + Variable_2 + + 0 + BaseFrame + + + + BaseFrame + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18786 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18790 + + Variable_2 + + 0 + FixedBase + + + + FixedBase + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=18786 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18791 + + VariableType_16 + + 0 + 3DFrameType + + + + 3DFrameType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18786 + + + + + i=47 + + false + + i=18796 + + + + + i=47 + + false + + i=18792 + + + + + + + + + + i=18814 + + -1 + + false + + + + i=18792 + + Variable_2 + + 0 + Orientation + + + + Orientation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18791 + + + + + i=40 + + false + + i=18781 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19074 + + + + + i=47 + + false + + i=19075 + + + + + i=47 + + false + + i=19076 + + + + + + + + + + i=18812 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18796 + + Variable_2 + + 0 + CartesianCoordinates + + + + CartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18791 + + + + + i=40 + + false + + i=18774 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=18798 + + + + + i=47 + + false + + i=18799 + + + + + i=47 + + false + + i=18800 + + + + + + + + + + i=18810 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18798 + + Variable_2 + + 0 + X + + + + X + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18796 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18799 + + Variable_2 + + 0 + Y + + + + Y + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18796 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18800 + + Variable_2 + + 0 + Z + + + + Z + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18796 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18801 + + Variable_2 + + 0 + CartesianCoordinates + + + + CartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18786 + + + + + i=40 + + false + + i=18772 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=18809 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18804 + + ReferenceType_32 + + 0 + HasWriterGroup + + + + HasWriterGroup + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + IsWriterGroupOf + + + + + i=18805 + + ReferenceType_32 + + 0 + HasReaderGroup + + + + HasReaderGroup + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=47 + + + + false + false + + + IsReaderGroupOf + + + + + i=18806 + + DataType_64 + + 0 + RationalNumber + + + + RationalNumber + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=18815 + + + + + i=38 + + false + + i=18851 + + + + + i=38 + + false + + i=19064 + + + + false + + + + + i=18807 + + DataType_64 + + 0 + Vector + + + + Vector + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=18808 + + + + + i=38 + + false + + i=18816 + + + + + i=38 + + false + + i=18852 + + + + + i=38 + + false + + i=19065 + + + + true + + + + + i=18808 + + DataType_64 + + 0 + 3DVector + + + + 3DVector + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18807 + + + + + i=38 + + false + + i=18817 + + + + + i=38 + + false + + i=18853 + + + + + i=38 + + false + + i=19066 + + + + false + + + + + i=18809 + + DataType_64 + + 0 + CartesianCoordinates + + + + CartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=18810 + + + + + i=38 + + false + + i=18818 + + + + + i=38 + + false + + i=18854 + + + + + i=38 + + false + + i=19067 + + + + true + + + + + i=18810 + + DataType_64 + + 0 + 3DCartesianCoordinates + + + + 3DCartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18809 + + + + + i=38 + + false + + i=18819 + + + + + i=38 + + false + + i=18855 + + + + + i=38 + + false + + i=19068 + + + + false + + + + + i=18811 + + DataType_64 + + 0 + Orientation + + + + Orientation + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=18812 + + + + + i=38 + + false + + i=18820 + + + + + i=38 + + false + + i=18856 + + + + + i=38 + + false + + i=19069 + + + + true + + + + + i=18812 + + DataType_64 + + 0 + 3DOrientation + + + + 3DOrientation + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18811 + + + + + i=38 + + false + + i=18821 + + + + + i=38 + + false + + i=18857 + + + + + i=38 + + false + + i=19070 + + + + false + + + + + i=18813 + + DataType_64 + + 0 + Frame + + + + Frame + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=45 + + false + + i=18814 + + + + + i=38 + + false + + i=18822 + + + + + i=38 + + false + + i=18858 + + + + + i=38 + + false + + i=19071 + + + + true + + + + + i=18814 + + DataType_64 + + 0 + 3DFrame + + + + 3DFrame + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=18813 + + + + + i=38 + + false + + i=18823 + + + + + i=38 + + false + + i=18859 + + + + + i=38 + + false + + i=19072 + + + + false + + + + + i=18815 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18806 + + + + + i=39 + + false + + i=18824 + + + + 0 + + + + i=18816 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18807 + + + + + i=39 + + false + + i=18827 + + + + 0 + + + + i=18817 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18808 + + + + + i=39 + + false + + i=18830 + + + + 0 + + + + i=18818 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18809 + + + + + i=39 + + false + + i=18833 + + + + 0 + + + + i=18819 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18810 + + + + + i=39 + + false + + i=18836 + + + + 0 + + + + i=18820 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18811 + + + + + i=39 + + false + + i=18839 + + + + 0 + + + + i=18821 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18812 + + + + + i=39 + + false + + i=18842 + + + + 0 + + + + i=18822 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18813 + + + + + i=39 + + false + + i=18845 + + + + 0 + + + + i=18823 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18814 + + + + + i=39 + + false + + i=18848 + + + + 0 + + + + i=18824 + + Variable_2 + + 0 + RationalNumber + + + + RationalNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + RationalNumber + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18827 + + Variable_2 + + 0 + Vector + + + + Vector + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Vector + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18830 + + Variable_2 + + 0 + 3DVector + + + + 3DVector + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ThreeDVector + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18833 + + Variable_2 + + 0 + CartesianCoordinates + + + + CartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + CartesianCoordinates + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18836 + + Variable_2 + + 0 + 3DCartesianCoordinates + + + + 3DCartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ThreeDCartesianCoordinates + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18839 + + Variable_2 + + 0 + Orientation + + + + Orientation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Orientation + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18842 + + Variable_2 + + 0 + 3DOrientation + + + + 3DOrientation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ThreeDOrientation + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18845 + + Variable_2 + + 0 + Frame + + + + Frame + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + Frame + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18848 + + Variable_2 + + 0 + 3DFrame + + + + 3DFrame + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ThreeDFrame + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18851 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18806 + + + + + i=39 + + false + + i=18860 + + + + 0 + + + + i=18852 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18807 + + + + + i=39 + + false + + i=18863 + + + + 0 + + + + i=18853 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18808 + + + + + i=39 + + false + + i=18866 + + + + 0 + + + + i=18854 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18809 + + + + + i=39 + + false + + i=18869 + + + + 0 + + + + i=18855 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18810 + + + + + i=39 + + false + + i=19049 + + + + 0 + + + + i=18856 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18811 + + + + + i=39 + + false + + i=19052 + + + + 0 + + + + i=18857 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18812 + + + + + i=39 + + false + + i=19055 + + + + 0 + + + + i=18858 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18813 + + + + + i=39 + + false + + i=19058 + + + + 0 + + + + i=18859 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18814 + + + + + i=39 + + false + + i=19061 + + + + 0 + + + + i=18860 + + Variable_2 + + 0 + RationalNumber + + + + RationalNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='RationalNumber'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18863 + + Variable_2 + + 0 + Vector + + + + Vector + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Vector'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18866 + + Variable_2 + + 0 + 3DVector + + + + 3DVector + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ThreeDVector'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=18869 + + Variable_2 + + 0 + CartesianCoordinates + + + + CartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='CartesianCoordinates'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19049 + + Variable_2 + + 0 + 3DCartesianCoordinates + + + + 3DCartesianCoordinates + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ThreeDCartesianCoordinates'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19052 + + Variable_2 + + 0 + Orientation + + + + Orientation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Orientation'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19055 + + Variable_2 + + 0 + 3DOrientation + + + + 3DOrientation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ThreeDOrientation'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19058 + + Variable_2 + + 0 + Frame + + + + Frame + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='Frame'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19061 + + Variable_2 + + 0 + 3DFrame + + + + 3DFrame + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ThreeDFrame'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19064 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18806 + + + + 0 + + + + i=19065 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18807 + + + + 0 + + + + i=19066 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18808 + + + + 0 + + + + i=19067 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18809 + + + + 0 + + + + i=19068 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18810 + + + + 0 + + + + i=19069 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18811 + + + + 0 + + + + i=19070 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18812 + + + + 0 + + + + i=19071 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18813 + + + + 0 + + + + i=19072 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=18814 + + + + 0 + + + + i=19074 + + Variable_2 + + 0 + A + + + + A + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18792 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19075 + + Variable_2 + + 0 + B + + + + B + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18792 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19076 + + Variable_2 + + 0 + C + + + + C + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18792 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=11 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19077 + + VariableType_16 + + 0 + MultiStateDictionaryEntryDiscreteBaseType + + + + MultiStateDictionaryEntryDiscreteBaseType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11238 + + + + + i=46 + + false + + i=19082 + + + + + i=46 + + false + + i=19083 + + + + + i=45 + + false + + i=19084 + + + + + + + + + + i=26 + + -1 + + false + + + + i=19082 + + Variable_2 + + 0 + EnumDictionaryEntries + + + + EnumDictionaryEntries + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19077 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 2 + + 0 + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19083 + + Variable_2 + + 0 + ValueAsDictionaryEntries + + + + ValueAsDictionaryEntries + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19077 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19084 + + VariableType_16 + + 0 + MultiStateDictionaryEntryDiscreteType + + + + MultiStateDictionaryEntryDiscreteType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19077 + + + + + i=46 + + false + + i=19090 + + + + + + + + + + i=26 + + -1 + + false + + + + i=19090 + + Variable_2 + + 0 + ValueAsDictionaryEntries + + + + ValueAsDictionaryEntries + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19084 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=17 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19091 + + Variable_2 + + 0 + ServerTimestampSupported + + + + ServerTimestampSupported + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=11192 + + + + + i=40 + + false + + i=68 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19092 + + Variable_2 + + 0 + ServerTimestampSupported + + + + ServerTimestampSupported + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2318 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19094 + + Variable_2 + + 0 + ServerTimestampSupported + + + + ServerTimestampSupported + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=2330 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19095 + + ObjectType_8 + + 0 + AuditHistoryAnnotationUpdateEventType + + + + AuditHistoryAnnotationUpdateEventType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=2104 + + + + + i=46 + + false + + i=19293 + + + + + i=46 + + false + + i=19294 + + + + + i=46 + + false + + i=19295 + + + + true + + + + i=19241 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=14209 + + + + + i=40 + + false + + i=19786 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=19242 + + + + + i=47 + + false + + i=19243 + + + + + i=47 + + false + + i=19248 + + + + + i=47 + + false + + i=19253 + + + + + i=47 + + false + + i=19254 + + + + + i=47 + + false + + i=19255 + + + + + i=47 + + false + + i=19286 + + + + 0 + + + + i=19242 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19243 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19244 + + + + + i=46 + + false + + i=19245 + + + + + i=46 + + false + + i=19246 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19244 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19243 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19245 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19243 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19246 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19243 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19248 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19249 + + + + + i=46 + + false + + i=19250 + + + + + i=46 + + false + + i=19251 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19249 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19248 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19250 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19248 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19251 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19248 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19253 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=19254 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19255 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19256 + + + + + i=47 + + false + + i=19261 + + + + + i=47 + + false + + i=19266 + + + + + i=47 + + false + + i=19271 + + + + + i=47 + + false + + i=19276 + + + + + i=47 + + false + + i=19281 + + + + 0 + + + + i=19256 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19255 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19257 + + + + + i=46 + + false + + i=19258 + + + + + i=46 + + false + + i=19259 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19257 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19256 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19258 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19256 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19259 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19256 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19261 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19255 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19262 + + + + + i=46 + + false + + i=19263 + + + + + i=46 + + false + + i=19264 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19262 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19261 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19263 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19261 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19264 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19261 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19266 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19255 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19267 + + + + + i=46 + + false + + i=19268 + + + + + i=46 + + false + + i=19269 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19267 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19266 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19268 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19266 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19269 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19266 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19271 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19255 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19272 + + + + + i=46 + + false + + i=19273 + + + + + i=46 + + false + + i=19274 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19272 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19271 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19273 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19271 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19274 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19271 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19276 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19255 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19277 + + + + + i=46 + + false + + i=19278 + + + + + i=46 + + false + + i=19279 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19277 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19276 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19278 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19276 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19279 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19276 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19281 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19255 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19282 + + + + + i=46 + + false + + i=19283 + + + + + i=46 + + false + + i=19284 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19282 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19281 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19283 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19281 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19284 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19281 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19286 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19241 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19287 + + + + 0 + + + + i=19287 + + Variable_2 + + 0 + ResolvedAddress + + + + ResolvedAddress + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19286 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19288 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19288 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19287 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19293 + + Variable_2 + + 0 + PerformInsertReplace + + + + PerformInsertReplace + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19095 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=11293 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19294 + + Variable_2 + + 0 + NewValues + + + + NewValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19095 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=23 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19295 + + Variable_2 + + 0 + OldValues + + + + OldValues + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19095 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=23 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19296 + + Variable_2 + + 0 + UpdateFrequency + + + + UpdateFrequency + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=12522 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19297 + + ObjectType_8 + + 0 + TrustListOutOfDateAlarmType + + + + TrustListOutOfDateAlarmType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=11753 + + + + + i=46 + + false + + i=19446 + + + + + i=46 + + false + + i=19447 + + + + + i=46 + + false + + i=19448 + + + + false + + + + i=19446 + + Variable_2 + + 0 + TrustListId + + + + TrustListId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19297 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19447 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19297 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19448 + + Variable_2 + + 0 + UpdateFrequency + + + + UpdateFrequency + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19297 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19450 + + Object_1 + + 0 + CertificateExpired + + + + CertificateExpired + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12555 + + + + + i=40 + + false + + i=13225 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=19451 + + + + + i=46 + + false + + i=19452 + + + + + i=46 + + false + + i=19453 + + + + + i=46 + + false + + i=19454 + + + + + i=46 + + false + + i=19455 + + + + + i=46 + + false + + i=19456 + + + + + i=46 + + false + + i=19458 + + + + + i=46 + + false + + i=19459 + + + + + i=46 + + false + + i=19460 + + + + + i=46 + + false + + i=19461 + + + + + i=46 + + false + + i=19464 + + + + + i=46 + + false + + i=19465 + + + + + i=46 + + false + + i=19466 + + + + + i=47 + + false + + i=19467 + + + + + i=47 + + false + + i=19476 + + + + + i=47 + + false + + i=19478 + + + + + i=47 + + false + + i=19480 + + + + + i=46 + + false + + i=19482 + + + + + i=47 + + false + + i=19483 + + + + + i=47 + + false + + i=19484 + + + + + i=47 + + false + + i=19485 + + + + + i=47 + + false + + i=19487 + + + + + i=47 + + false + + i=19505 + + + + + i=47 + + false + + i=19509 + + + + + i=46 + + false + + i=19518 + + + + + i=46 + + false + + i=20101 + + + + + i=46 + + false + + i=20138 + + + + + i=46 + + false + + i=20139 + + + + + i=46 + + false + + i=20141 + + + + + i=46 + + false + + i=20142 + + + + 0 + + + + i=19451 + + Variable_2 + + 0 + EventId + + + + EventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19452 + + Variable_2 + + 0 + EventType + + + + EventType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19453 + + Variable_2 + + 0 + SourceNode + + + + SourceNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19454 + + Variable_2 + + 0 + SourceName + + + + SourceName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19455 + + Variable_2 + + 0 + Time + + + + Time + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19456 + + Variable_2 + + 0 + ReceiveTime + + + + ReceiveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19458 + + Variable_2 + + 0 + Message + + + + Message + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19459 + + Variable_2 + + 0 + Severity + + + + Severity + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19460 + + Variable_2 + + 0 + ConditionClassId + + + + ConditionClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19461 + + Variable_2 + + 0 + ConditionClassName + + + + ConditionClassName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19464 + + Variable_2 + + 0 + ConditionName + + + + ConditionName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19465 + + Variable_2 + + 0 + BranchId + + + + BranchId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19466 + + Variable_2 + + 0 + Retain + + + + Retain + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19467 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19468 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19468 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19467 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19476 + + Variable_2 + + 0 + Quality + + + + Quality + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19477 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19477 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19476 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19478 + + Variable_2 + + 0 + LastSeverity + + + + LastSeverity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19479 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19479 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19478 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19480 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19481 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19481 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19480 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19482 + + Variable_2 + + 0 + ClientUserId + + + + ClientUserId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19483 + + Method_4 + + 0 + Disable + + + + Disable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9028 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=19484 + + Method_4 + + 0 + Enable + + + + Enable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9027 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=19485 + + Method_4 + + 0 + AddComment + + + + AddComment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9029 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2829 + + + + + i=46 + + false + + i=19486 + + + + true + true + + + + i=19486 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19485 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19487 + + Variable_2 + + 0 + AckedState + + + + AckedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19488 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19488 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19487 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19505 + + Method_4 + + 0 + Acknowledge + + + + Acknowledge + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=9111 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=8944 + + + + + i=46 + + false + + i=19506 + + + + true + true + + + + i=19506 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19505 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19509 + + Variable_2 + + 0 + ActiveState + + + + ActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19450 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19510 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19510 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19509 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19518 + + Variable_2 + + 0 + InputNode + + + + InputNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19550 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15298 + + + + + i=40 + + false + + i=19968 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=19551 + + + + + i=47 + + false + + i=19552 + + + + + i=47 + + false + + i=19557 + + + + + i=47 + + false + + i=19562 + + + + + i=47 + + false + + i=19563 + + + + + i=47 + + false + + i=19564 + + + + + i=47 + + false + + i=19595 + + + + 0 + + + + i=19551 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19552 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19553 + + + + + i=46 + + false + + i=19554 + + + + + i=46 + + false + + i=19555 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19553 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19552 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19554 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19552 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19555 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19552 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19557 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19558 + + + + + i=46 + + false + + i=19559 + + + + + i=46 + + false + + i=19560 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19558 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19557 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19559 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19557 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19560 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19557 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19562 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=19563 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19564 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19565 + + + + + i=47 + + false + + i=19570 + + + + + i=47 + + false + + i=19575 + + + + + i=47 + + false + + i=19580 + + + + + i=47 + + false + + i=19585 + + + + + i=47 + + false + + i=19590 + + + + + i=47 + + false + + i=19596 + + + + 0 + + + + i=19565 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19566 + + + + + i=46 + + false + + i=19567 + + + + + i=46 + + false + + i=19568 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19566 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19565 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19567 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19565 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19568 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19565 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19570 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19571 + + + + + i=46 + + false + + i=19572 + + + + + i=46 + + false + + i=19573 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19571 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19570 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19572 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19570 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19573 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19570 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19575 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19576 + + + + + i=46 + + false + + i=19577 + + + + + i=46 + + false + + i=19578 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19576 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19577 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19578 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19575 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19580 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19581 + + + + + i=46 + + false + + i=19582 + + + + + i=46 + + false + + i=19583 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19581 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19580 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19582 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19580 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19583 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19580 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19585 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19586 + + + + + i=46 + + false + + i=19587 + + + + + i=46 + + false + + i=19588 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19586 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19585 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19587 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19585 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19588 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19585 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19590 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19591 + + + + + i=46 + + false + + i=19592 + + + + + i=46 + + false + + i=19593 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19591 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19590 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19592 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19590 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19593 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19590 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19595 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19550 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=19596 + + Variable_2 + + 0 + FailedDataSetMessages + + + + FailedDataSetMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19564 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19597 + + + + + i=46 + + false + + i=19598 + + + + + i=46 + + false + + i=19599 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19597 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19596 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19598 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19596 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19599 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19596 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19609 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=20027 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=19610 + + + + + i=47 + + false + + i=19611 + + + + + i=47 + + false + + i=19616 + + + + + i=47 + + false + + i=19621 + + + + + i=47 + + false + + i=19622 + + + + + i=47 + + false + + i=19623 + + + + + i=47 + + false + + i=19654 + + + + 0 + + + + i=19610 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19611 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19612 + + + + + i=46 + + false + + i=19613 + + + + + i=46 + + false + + i=19614 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19612 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19611 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19613 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19611 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19614 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19611 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19616 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19617 + + + + + i=46 + + false + + i=19618 + + + + + i=46 + + false + + i=19619 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19617 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19618 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19619 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19616 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19621 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=19622 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19623 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19624 + + + + + i=47 + + false + + i=19629 + + + + + i=47 + + false + + i=19634 + + + + + i=47 + + false + + i=19639 + + + + + i=47 + + false + + i=19644 + + + + + i=47 + + false + + i=19649 + + + + + i=47 + + false + + i=19655 + + + + 0 + + + + i=19624 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19625 + + + + + i=46 + + false + + i=19626 + + + + + i=46 + + false + + i=19627 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19625 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19626 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19627 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19624 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19629 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19630 + + + + + i=46 + + false + + i=19631 + + + + + i=46 + + false + + i=19632 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19630 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19629 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19631 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19629 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19632 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19629 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19634 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19635 + + + + + i=46 + + false + + i=19636 + + + + + i=46 + + false + + i=19637 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19635 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19634 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19636 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19634 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19637 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19634 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19639 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19640 + + + + + i=46 + + false + + i=19641 + + + + + i=46 + + false + + i=19642 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19640 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19639 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19641 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19639 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19642 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19639 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19644 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19645 + + + + + i=46 + + false + + i=19646 + + + + + i=46 + + false + + i=19647 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19645 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19644 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19646 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19644 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19647 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19644 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19649 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19650 + + + + + i=46 + + false + + i=19651 + + + + + i=46 + + false + + i=19652 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19650 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19649 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19651 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19649 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19652 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19649 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19654 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19609 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=19655 + + Variable_2 + + 0 + FailedDataSetMessages + + + + FailedDataSetMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19623 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19656 + + + + + i=46 + + false + + i=19657 + + + + + i=46 + + false + + i=19658 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19656 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19655 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19657 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19655 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19658 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19655 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19677 + + ObjectType_8 + + 0 + PubSubDiagnosticsType + + + + PubSubDiagnosticsType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=19678 + + + + + i=47 + + false + + i=19679 + + + + + i=47 + + false + + i=19684 + + + + + i=47 + + false + + i=19689 + + + + + i=47 + + false + + i=19690 + + + + + i=47 + + false + + i=19691 + + + + + i=47 + + false + + i=19722 + + + + + i=45 + + false + + i=19732 + + + + + i=45 + + false + + i=19786 + + + + + i=45 + + false + + i=19834 + + + + + i=45 + + false + + i=19903 + + + + + i=45 + + false + + i=19968 + + + + + i=45 + + false + + i=20027 + + + + true + + + + i=19678 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19679 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19680 + + + + + i=46 + + false + + i=19681 + + + + + i=46 + + false + + i=19682 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19680 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19679 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19681 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19679 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19682 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19679 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19684 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19685 + + + + + i=46 + + false + + i=19686 + + + + + i=46 + + false + + i=19687 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19685 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19684 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19686 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19684 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19687 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19684 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19689 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=19690 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19691 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19692 + + + + + i=47 + + false + + i=19697 + + + + + i=47 + + false + + i=19702 + + + + + i=47 + + false + + i=19707 + + + + + i=47 + + false + + i=19712 + + + + + i=47 + + false + + i=19717 + + + + 0 + + + + i=19692 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19691 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19693 + + + + + i=46 + + false + + i=19694 + + + + + i=46 + + false + + i=19695 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19693 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19692 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19694 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19692 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19695 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19692 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19697 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19691 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19698 + + + + + i=46 + + false + + i=19699 + + + + + i=46 + + false + + i=19700 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19698 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19697 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19699 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19697 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19700 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19697 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19702 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19691 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19703 + + + + + i=46 + + false + + i=19704 + + + + + i=46 + + false + + i=19705 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19703 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19702 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19704 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19702 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19705 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19702 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19707 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19691 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19708 + + + + + i=46 + + false + + i=19709 + + + + + i=46 + + false + + i=19710 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19708 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19707 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19709 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19707 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19710 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19707 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19712 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19691 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19713 + + + + + i=46 + + false + + i=19714 + + + + + i=46 + + false + + i=19715 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19713 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19712 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19714 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19712 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19715 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19712 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19717 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19691 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19718 + + + + + i=46 + + false + + i=19719 + + + + + i=46 + + false + + i=19720 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19718 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19717 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19719 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19717 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19720 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19717 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19722 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19677 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=19723 + + DataType_64 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=19724 + + + + false + + + + + i=19724 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19723 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Basic + + + + Advanced + + + + Info + + + + Log + + + + Debug + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19725 + + VariableType_16 + + 0 + PubSubDiagnosticsCounterType + + + + PubSubDiagnosticsCounterType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=63 + + + + + i=46 + + false + + i=19726 + + + + + i=46 + + false + + i=19727 + + + + + i=46 + + false + + i=19728 + + + + + i=46 + + false + + i=19729 + + + + + + + + + + i=7 + + -1 + + false + + + + i=19726 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19727 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19728 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19729 + + Variable_2 + + 0 + TimeFirstChange + + + + TimeFirstChange + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19725 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19730 + + DataType_64 + + 0 + PubSubDiagnosticsCounterClassification + + + + PubSubDiagnosticsCounterClassification + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=19731 + + + + false + + + + + i=19731 + + Variable_2 + + 0 + EnumStrings + + + + EnumStrings + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19730 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + Information + + + + Error + + + + + + i=21 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=19732 + + ObjectType_8 + + 0 + PubSubDiagnosticsRootType + + + + PubSubDiagnosticsRootType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19677 + + + + + i=47 + + false + + i=19777 + + + + false + + + + i=19777 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19732 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19778 + + + + + i=47 + + false + + i=19780 + + + + + i=47 + + false + + i=19782 + + + + + i=47 + + false + + i=19784 + + + + 0 + + + + i=19778 + + Variable_2 + + 0 + ConfiguredDataSetWriters + + + + ConfiguredDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19777 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19779 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19779 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19778 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19780 + + Variable_2 + + 0 + ConfiguredDataSetReaders + + + + ConfiguredDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19777 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19781 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19781 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19780 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19782 + + Variable_2 + + 0 + OperationalDataSetWriters + + + + OperationalDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19777 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19783 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19783 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19782 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19784 + + Variable_2 + + 0 + OperationalDataSetReaders + + + + OperationalDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19777 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19785 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19785 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19784 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19786 + + ObjectType_8 + + 0 + PubSubDiagnosticsConnectionType + + + + PubSubDiagnosticsConnectionType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19677 + + + + + i=47 + + false + + i=19831 + + + + false + + + + i=19831 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19786 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19832 + + + + 0 + + + + i=19832 + + Variable_2 + + 0 + ResolvedAddress + + + + ResolvedAddress + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19831 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19833 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19833 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19832 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19834 + + ObjectType_8 + + 0 + PubSubDiagnosticsWriterGroupType + + + + PubSubDiagnosticsWriterGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19677 + + + + + i=47 + + false + + i=19848 + + + + + i=47 + + false + + i=19879 + + + + false + + + + i=19848 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19834 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19880 + + + + + i=47 + + false + + i=19885 + + + + + i=47 + + false + + i=19890 + + + + 0 + + + + i=19879 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19834 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19895 + + + + + i=47 + + false + + i=19897 + + + + + i=47 + + false + + i=19899 + + + + + i=47 + + false + + i=19901 + + + + 0 + + + + i=19880 + + Variable_2 + + 0 + SentNetworkMessages + + + + SentNetworkMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19848 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19881 + + + + + i=46 + + false + + i=19882 + + + + + i=46 + + false + + i=19883 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19881 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19880 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19882 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19880 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19883 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19880 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19885 + + Variable_2 + + 0 + FailedTransmissions + + + + FailedTransmissions + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19848 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19886 + + + + + i=46 + + false + + i=19887 + + + + + i=46 + + false + + i=19888 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19886 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19885 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19887 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19885 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19888 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19885 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19890 + + Variable_2 + + 0 + EncryptionErrors + + + + EncryptionErrors + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19848 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19891 + + + + + i=46 + + false + + i=19892 + + + + + i=46 + + false + + i=19893 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19891 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19890 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19892 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19890 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19893 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19890 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19895 + + Variable_2 + + 0 + ConfiguredDataSetWriters + + + + ConfiguredDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19879 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19896 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19896 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19895 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19897 + + Variable_2 + + 0 + OperationalDataSetWriters + + + + OperationalDataSetWriters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19879 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19898 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19898 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19897 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19899 + + Variable_2 + + 0 + SecurityTokenID + + + + SecurityTokenID + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19879 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=19900 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19900 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19899 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19901 + + Variable_2 + + 0 + TimeToNextTokenID + + + + TimeToNextTokenID + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19879 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=19902 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19902 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19901 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19903 + + ObjectType_8 + + 0 + PubSubDiagnosticsReaderGroupType + + + + PubSubDiagnosticsReaderGroupType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19677 + + + + + i=47 + + false + + i=19917 + + + + + i=47 + + false + + i=19948 + + + + false + + + + i=19917 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19903 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19949 + + + + + i=47 + + false + + i=19954 + + + + + i=47 + + false + + i=19959 + + + + 0 + + + + i=19948 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19903 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=19964 + + + + + i=47 + + false + + i=19966 + + + + 0 + + + + i=19949 + + Variable_2 + + 0 + ReceivedNetworkMessages + + + + ReceivedNetworkMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19917 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19950 + + + + + i=46 + + false + + i=19951 + + + + + i=46 + + false + + i=19952 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19950 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19949 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19951 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19949 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19952 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19949 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19954 + + Variable_2 + + 0 + ReceivedInvalidNetworkMessages + + + + ReceivedInvalidNetworkMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19917 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=19955 + + + + + i=46 + + false + + i=19956 + + + + + i=46 + + false + + i=19957 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19955 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19954 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19956 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19954 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19957 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19954 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19959 + + Variable_2 + + 0 + DecryptionErrors + + + + DecryptionErrors + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19917 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=19960 + + + + + i=46 + + false + + i=19961 + + + + + i=46 + + false + + i=19962 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19960 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19959 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19961 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19959 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19962 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19959 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19964 + + Variable_2 + + 0 + ConfiguredDataSetReaders + + + + ConfiguredDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19948 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19965 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19965 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19964 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19966 + + Variable_2 + + 0 + OperationalDataSetReaders + + + + OperationalDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19948 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=19967 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19967 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19966 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=19968 + + ObjectType_8 + + 0 + PubSubDiagnosticsDataSetWriterType + + + + PubSubDiagnosticsDataSetWriterType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19677 + + + + + i=47 + + false + + i=19982 + + + + + i=47 + + false + + i=20013 + + + + false + + + + i=19982 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19968 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=20014 + + + + 0 + + + + i=20013 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19968 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=20019 + + + + + i=47 + + false + + i=20021 + + + + + i=47 + + false + + i=20023 + + + + + i=47 + + false + + i=20025 + + + + 0 + + + + i=20014 + + Variable_2 + + 0 + FailedDataSetMessages + + + + FailedDataSetMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=19982 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20015 + + + + + i=46 + + false + + i=20016 + + + + + i=46 + + false + + i=20017 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20015 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20016 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20017 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20014 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20019 + + Variable_2 + + 0 + MessageSequenceNumber + + + + MessageSequenceNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20013 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20020 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20020 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20019 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20021 + + Variable_2 + + 0 + StatusCode + + + + StatusCode + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20013 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20022 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20022 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20021 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20023 + + Variable_2 + + 0 + MajorVersion + + + + MajorVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20013 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20024 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20024 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20023 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20025 + + Variable_2 + + 0 + MinorVersion + + + + MinorVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20013 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20026 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20026 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20025 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20027 + + ObjectType_8 + + 0 + PubSubDiagnosticsDataSetReaderType + + + + PubSubDiagnosticsDataSetReaderType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=19677 + + + + + i=47 + + false + + i=20041 + + + + + i=47 + + false + + i=20072 + + + + false + + + + i=20041 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20027 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=20073 + + + + + i=47 + + false + + i=20078 + + + + 0 + + + + i=20072 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20027 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=20083 + + + + + i=47 + + false + + i=20085 + + + + + i=47 + + false + + i=20087 + + + + + i=47 + + false + + i=20089 + + + + + i=47 + + false + + i=20091 + + + + + i=47 + + false + + i=20093 + + + + 0 + + + + i=20073 + + Variable_2 + + 0 + FailedDataSetMessages + + + + FailedDataSetMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20041 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20074 + + + + + i=46 + + false + + i=20075 + + + + + i=46 + + false + + i=20076 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20074 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20073 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20075 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20073 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20076 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20073 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20078 + + Variable_2 + + 0 + DecryptionErrors + + + + DecryptionErrors + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20041 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20079 + + + + + i=46 + + false + + i=20080 + + + + + i=46 + + false + + i=20081 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20079 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20078 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20080 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20078 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20081 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20078 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20083 + + Variable_2 + + 0 + MessageSequenceNumber + + + + MessageSequenceNumber + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20072 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20084 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20084 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20083 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20085 + + Variable_2 + + 0 + StatusCode + + + + StatusCode + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20072 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20086 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20086 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20085 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20087 + + Variable_2 + + 0 + MajorVersion + + + + MajorVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20072 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20088 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20088 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20087 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20089 + + Variable_2 + + 0 + MinorVersion + + + + MinorVersion + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20072 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20090 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20090 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20089 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20091 + + Variable_2 + + 0 + SecurityTokenID + + + + SecurityTokenID + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20072 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20092 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20092 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20091 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20093 + + Variable_2 + + 0 + TimeToNextTokenID + + + + TimeToNextTokenID + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20072 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20094 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20094 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20093 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 2 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20101 + + Variable_2 + + 0 + SuppressedOrShelved + + + + SuppressedOrShelved + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20138 + + Variable_2 + + 0 + NormalState + + + + NormalState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20139 + + Variable_2 + + 0 + ExpirationDate + + + + ExpirationDate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=13 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20141 + + Variable_2 + + 0 + CertificateType + + + + CertificateType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20142 + + Variable_2 + + 0 + Certificate + + + + Certificate + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=19450 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20143 + + Object_1 + + 0 + TrustListOutOfDate + + + + TrustListOutOfDate + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=12555 + + + + + i=40 + + false + + i=19297 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=20144 + + + + + i=46 + + false + + i=20145 + + + + + i=46 + + false + + i=20146 + + + + + i=46 + + false + + i=20147 + + + + + i=46 + + false + + i=20148 + + + + + i=46 + + false + + i=20149 + + + + + i=46 + + false + + i=20151 + + + + + i=46 + + false + + i=20152 + + + + + i=46 + + false + + i=20153 + + + + + i=46 + + false + + i=20154 + + + + + i=46 + + false + + i=20157 + + + + + i=46 + + false + + i=20158 + + + + + i=46 + + false + + i=20159 + + + + + i=47 + + false + + i=20160 + + + + + i=47 + + false + + i=20169 + + + + + i=47 + + false + + i=20171 + + + + + i=47 + + false + + i=20173 + + + + + i=46 + + false + + i=20175 + + + + + i=47 + + false + + i=20176 + + + + + i=47 + + false + + i=20177 + + + + + i=47 + + false + + i=20178 + + + + + i=47 + + false + + i=20180 + + + + + i=47 + + false + + i=20198 + + + + + i=47 + + false + + i=20202 + + + + + i=46 + + false + + i=20211 + + + + + i=46 + + false + + i=20249 + + + + + i=46 + + false + + i=20286 + + + + + i=46 + + false + + i=20287 + + + + + i=46 + + false + + i=20288 + + + + + i=46 + + false + + i=20289 + + + + 0 + + + + i=20144 + + Variable_2 + + 0 + EventId + + + + EventId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20145 + + Variable_2 + + 0 + EventType + + + + EventType + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20146 + + Variable_2 + + 0 + SourceNode + + + + SourceNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20147 + + Variable_2 + + 0 + SourceName + + + + SourceName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20148 + + Variable_2 + + 0 + Time + + + + Time + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20149 + + Variable_2 + + 0 + ReceiveTime + + + + ReceiveTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20151 + + Variable_2 + + 0 + Message + + + + Message + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20152 + + Variable_2 + + 0 + Severity + + + + Severity + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20153 + + Variable_2 + + 0 + ConditionClassId + + + + ConditionClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20154 + + Variable_2 + + 0 + ConditionClassName + + + + ConditionClassName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20157 + + Variable_2 + + 0 + ConditionName + + + + ConditionName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20158 + + Variable_2 + + 0 + BranchId + + + + BranchId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20159 + + Variable_2 + + 0 + Retain + + + + Retain + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20160 + + Variable_2 + + 0 + EnabledState + + + + EnabledState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20161 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20161 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20160 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20169 + + Variable_2 + + 0 + Quality + + + + Quality + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20170 + + + + + + + 0 + + + + + i=19 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20170 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20169 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20171 + + Variable_2 + + 0 + LastSeverity + + + + LastSeverity + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20172 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20172 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20171 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20173 + + Variable_2 + + 0 + Comment + + + + Comment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9002 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20174 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20174 + + Variable_2 + + 0 + SourceTimestamp + + + + SourceTimestamp + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20173 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20175 + + Variable_2 + + 0 + ClientUserId + + + + ClientUserId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20176 + + Method_4 + + 0 + Disable + + + + Disable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9028 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=20177 + + Method_4 + + 0 + Enable + + + + Enable + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9027 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2803 + + + + true + true + + + + i=20178 + + Method_4 + + 0 + AddComment + + + + AddComment + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9029 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=2829 + + + + + i=46 + + false + + i=20179 + + + + true + true + + + + i=20179 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20178 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=20180 + + Variable_2 + + 0 + AckedState + + + + AckedState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20181 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20181 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20180 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20198 + + Method_4 + + 0 + Acknowledge + + + + Acknowledge + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=9111 + + + + + i=37 + + false + + i=78 + + + + + i=3065 + + false + + i=8944 + + + + + i=46 + + false + + i=20199 + + + + true + true + + + + i=20199 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20198 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + 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. + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=20202 + + Variable_2 + + 0 + ActiveState + + + + ActiveState + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=20143 + + + + + i=40 + + false + + i=8995 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=20203 + + + + + + + + + + i=21 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20203 + + Variable_2 + + 0 + Id + + + + Id + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20202 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20211 + + Variable_2 + + 0 + InputNode + + + + InputNode + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20249 + + Variable_2 + + 0 + SuppressedOrShelved + + + + SuppressedOrShelved + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20286 + + Variable_2 + + 0 + NormalState + + + + NormalState + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20287 + + Variable_2 + + 0 + TrustListId + + + + TrustListId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + i=0 + + + + + i=17 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20288 + + Variable_2 + + 0 + LastUpdateTime + + + + LastUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0001-01-01T00:00:00 + + + + i=294 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20289 + + Variable_2 + + 0 + UpdateFrequency + + + + UpdateFrequency + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=20143 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=20408 + + DataType_64 + + 0 + DataSetOrderingType + + + + DataSetOrderingType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=29 + + + + + i=46 + + false + + i=15641 + + + + false + + + + + i=20998 + + DataType_64 + + 0 + VersionTime + + + + VersionTime + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=7 + + + + false + + + + + i=21002 + + Variable_2 + + 0 + FieldTargetDataType + + + + FieldTargetDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + FieldTargetDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21006 + + Object_1 + + 0 + SubscribedDataSet + + + + SubscribedDataSet + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=18076 + + + + + i=40 + + false + + i=15108 + + + + + i=37 + + false + + i=78 + + + + 0 + + + + i=21015 + + Object_1 + + 0 + Diagnostics + + + + Diagnostics + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17999 + + + + + i=40 + + false + + i=19903 + + + + + i=37 + + false + + i=80 + + + + + i=47 + + false + + i=21016 + + + + + i=47 + + false + + i=21017 + + + + + i=47 + + false + + i=21022 + + + + + i=47 + + false + + i=21027 + + + + + i=47 + + false + + i=21028 + + + + + i=47 + + false + + i=21029 + + + + + i=47 + + false + + i=21060 + + + + 0 + + + + i=21016 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21017 + + Variable_2 + + 0 + TotalInformation + + + + TotalInformation + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21018 + + + + + i=46 + + false + + i=21019 + + + + + i=46 + + false + + i=21020 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21018 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21017 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21019 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21017 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21020 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21017 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21022 + + Variable_2 + + 0 + TotalError + + + + TotalError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21023 + + + + + i=46 + + false + + i=21024 + + + + + i=46 + + false + + i=21025 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21023 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21022 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21024 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21022 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21025 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21022 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21027 + + Method_4 + + 0 + Reset + + + + Reset + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=19689 + + + + + i=37 + + false + + i=78 + + + + true + true + + + + i=21028 + + Variable_2 + + 0 + SubError + + + + SubError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21029 + + Object_1 + + 0 + Counters + + + + Counters + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=21030 + + + + + i=47 + + false + + i=21035 + + + + + i=47 + + false + + i=21040 + + + + + i=47 + + false + + i=21045 + + + + + i=47 + + false + + i=21050 + + + + + i=47 + + false + + i=21055 + + + + + i=47 + + false + + i=21061 + + + + 0 + + + + i=21030 + + Variable_2 + + 0 + StateError + + + + StateError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21031 + + + + + i=46 + + false + + i=21032 + + + + + i=46 + + false + + i=21033 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21031 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21030 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21032 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21030 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 1 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21033 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21030 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21035 + + Variable_2 + + 0 + StateOperationalByMethod + + + + StateOperationalByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21036 + + + + + i=46 + + false + + i=21037 + + + + + i=46 + + false + + i=21038 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21036 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21035 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21037 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21035 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21038 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21035 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21040 + + Variable_2 + + 0 + StateOperationalByParent + + + + StateOperationalByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21041 + + + + + i=46 + + false + + i=21042 + + + + + i=46 + + false + + i=21043 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21041 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21040 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21042 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21040 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21043 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21040 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21045 + + Variable_2 + + 0 + StateOperationalFromError + + + + StateOperationalFromError + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21046 + + + + + i=46 + + false + + i=21047 + + + + + i=46 + + false + + i=21048 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21046 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21045 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21047 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21045 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21048 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21045 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21050 + + Variable_2 + + 0 + StatePausedByParent + + + + StatePausedByParent + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21051 + + + + + i=46 + + false + + i=21052 + + + + + i=46 + + false + + i=21053 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21051 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21050 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21052 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21050 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21053 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21050 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21055 + + Variable_2 + + 0 + StateDisabledByMethod + + + + StateDisabledByMethod + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21056 + + + + + i=46 + + false + + i=21057 + + + + + i=46 + + false + + i=21058 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21056 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21057 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21058 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21055 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21060 + + Object_1 + + 0 + LiveValues + + + + LiveValues + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21015 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=78 + + + + + i=47 + + false + + i=21076 + + + + + i=47 + + false + + i=21078 + + + + 0 + + + + i=21061 + + Variable_2 + + 0 + ReceivedNetworkMessages + + + + ReceivedNetworkMessages + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21029 + + + + + i=40 + + false + + i=19725 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21062 + + + + + i=46 + + false + + i=21063 + + + + + i=46 + + false + + i=21064 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21062 + + Variable_2 + + 0 + Active + + + + Active + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21061 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + false + + + + i=1 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21063 + + Variable_2 + + 0 + Classification + + + + Classification + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21061 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19730 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21064 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21061 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21076 + + Variable_2 + + 0 + ConfiguredDataSetReaders + + + + ConfiguredDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21060 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21077 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21077 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21076 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21078 + + Variable_2 + + 0 + OperationalDataSetReaders + + + + OperationalDataSetReaders + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21060 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=21079 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21079 + + Variable_2 + + 0 + DiagnosticsLevel + + + + DiagnosticsLevel + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21078 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=19723 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21080 + + Object_1 + + 0 + TransportSettings + + + + TransportSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17999 + + + + + i=40 + + false + + i=21090 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=21081 + + Object_1 + + 0 + MessageSettings + + + + MessageSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17999 + + + + + i=40 + + false + + i=21091 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=21082 + + Method_4 + + 0 + AddDataSetReader + + + + AddDataSetReader + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17999 + + + + + i=40 + + false + + i=21082 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=21083 + + + + + i=46 + + false + + i=21084 + + + + true + true + + + + i=21083 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21082 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + Configuration + + i=15623 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=21084 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21082 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetReaderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=21085 + + Method_4 + + 0 + RemoveDataSetReader + + + + RemoveDataSetReader + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=17999 + + + + + i=40 + + false + + i=21085 + + + + + i=37 + + false + + i=80 + + + + + i=46 + + false + + i=21086 + + + + true + true + + + + i=21086 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21085 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + DataSetReaderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=21090 + + ObjectType_8 + + 0 + ReaderGroupTransportType + + + + ReaderGroupTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + true + + + + i=21091 + + ObjectType_8 + + 0 + ReaderGroupMessageType + + + + ReaderGroupMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + true + + + + i=21092 + + Variable_2 + + 0 + DataSetWriterId + + + + DataSetWriterId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15298 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21093 + + Variable_2 + + 0 + DataSetFieldContentMask + + + + DataSetFieldContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15298 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15583 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21094 + + Variable_2 + + 0 + KeyFrameCount + + + + KeyFrameCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15298 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=7 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21095 + + Object_1 + + 0 + MessageSettings + + + + MessageSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15298 + + + + + i=40 + + false + + i=21096 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=21096 + + ObjectType_8 + + 0 + DataSetWriterMessageType + + + + DataSetWriterMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=21111 + + + + + i=45 + + false + + i=21128 + + + + true + + + + i=21097 + + Variable_2 + + 0 + PublisherId + + + + PublisherId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=24 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21098 + + Variable_2 + + 0 + WriterGroupId + + + + WriterGroupId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21099 + + Variable_2 + + 0 + DataSetWriterId + + + + DataSetWriterId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21100 + + Variable_2 + + 0 + DataSetMetaData + + + + DataSetMetaData + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=14523 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21101 + + Variable_2 + + 0 + DataSetFieldContentMask + + + + DataSetFieldContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15583 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21102 + + Variable_2 + + 0 + MessageReceiveTimeout + + + + MessageReceiveTimeout + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=15306 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21103 + + Object_1 + + 0 + MessageSettings + + + + MessageSettings + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=15306 + + + + + i=40 + + false + + i=21104 + + + + + i=37 + + false + + i=80 + + + + 0 + + + + i=21104 + + ObjectType_8 + + 0 + DataSetReaderMessageType + + + + DataSetReaderMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=45 + + false + + i=21116 + + + + + i=45 + + false + + i=21130 + + + + true + + + + i=21105 + + ObjectType_8 + + 0 + UadpWriterGroupMessageType + + + + UadpWriterGroupMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17998 + + + + + i=46 + + false + + i=21106 + + + + + i=46 + + false + + i=21107 + + + + + i=46 + + false + + i=21108 + + + + + i=46 + + false + + i=21109 + + + + + i=46 + + false + + i=21110 + + + + false + + + + i=21106 + + Variable_2 + + 0 + GroupVersion + + + + GroupVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21105 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=20998 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21107 + + Variable_2 + + 0 + DataSetOrdering + + + + DataSetOrdering + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21105 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=20408 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21108 + + Variable_2 + + 0 + NetworkMessageContentMask + + + + NetworkMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21105 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15642 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21109 + + Variable_2 + + 0 + SamplingOffset + + + + SamplingOffset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21105 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21110 + + Variable_2 + + 0 + PublishingOffset + + + + PublishingOffset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21105 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=290 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=21111 + + ObjectType_8 + + 0 + UadpDataSetWriterMessageType + + + + UadpDataSetWriterMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=21096 + + + + + i=46 + + false + + i=21112 + + + + + i=46 + + false + + i=21113 + + + + + i=46 + + false + + i=21114 + + + + + i=46 + + false + + i=21115 + + + + false + + + + i=21112 + + Variable_2 + + 0 + DataSetMessageContentMask + + + + DataSetMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21111 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15646 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21113 + + Variable_2 + + 0 + ConfiguredSize + + + + ConfiguredSize + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21111 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21114 + + Variable_2 + + 0 + NetworkMessageNumber + + + + NetworkMessageNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21111 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21115 + + Variable_2 + + 0 + DataSetOffset + + + + DataSetOffset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21111 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21116 + + ObjectType_8 + + 0 + UadpDataSetReaderMessageType + + + + UadpDataSetReaderMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=21104 + + + + + i=46 + + false + + i=21117 + + + + + i=46 + + false + + i=21119 + + + + + i=46 + + false + + i=17477 + + + + + i=46 + + false + + i=21120 + + + + + i=46 + + false + + i=21121 + + + + + i=46 + + false + + i=21122 + + + + + i=46 + + false + + i=21123 + + + + + i=46 + + false + + i=21124 + + + + + i=46 + + false + + i=21125 + + + + false + + + + i=21117 + + Variable_2 + + 0 + GroupVersion + + + + GroupVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=20998 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21119 + + Variable_2 + + 0 + NetworkMessageNumber + + + + NetworkMessageNumber + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=5 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21120 + + Variable_2 + + 0 + DataSetClassId + + + + DataSetClassId + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + 00000000-0000-0000-0000-000000000000 + + + + + i=14 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21121 + + Variable_2 + + 0 + NetworkMessageContentMask + + + + NetworkMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15642 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21122 + + Variable_2 + + 0 + DataSetMessageContentMask + + + + DataSetMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15646 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21123 + + Variable_2 + + 0 + PublishingInterval + + + + PublishingInterval + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21124 + + Variable_2 + + 0 + ProcessingOffset + + + + ProcessingOffset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21125 + + Variable_2 + + 0 + ReceiveOffset + + + + ReceiveOffset + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21116 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21126 + + ObjectType_8 + + 0 + JsonWriterGroupMessageType + + + + JsonWriterGroupMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17998 + + + + + i=46 + + false + + i=21127 + + + + false + + + + i=21127 + + Variable_2 + + 0 + NetworkMessageContentMask + + + + NetworkMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21126 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15654 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21128 + + ObjectType_8 + + 0 + JsonDataSetWriterMessageType + + + + JsonDataSetWriterMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=21096 + + + + + i=46 + + false + + i=21129 + + + + false + + + + i=21129 + + Variable_2 + + 0 + DataSetMessageContentMask + + + + DataSetMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21128 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15658 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21130 + + ObjectType_8 + + 0 + JsonDataSetReaderMessageType + + + + JsonDataSetReaderMessageType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=21104 + + + + + i=46 + + false + + i=21131 + + + + + i=46 + + false + + i=21132 + + + + false + + + + i=21131 + + Variable_2 + + 0 + NetworkMessageContentMask + + + + NetworkMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21130 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15654 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21132 + + Variable_2 + + 0 + DataSetMessageContentMask + + + + DataSetMessageContentMask + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21130 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=15658 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21133 + + ObjectType_8 + + 0 + DatagramWriterGroupTransportType + + + + DatagramWriterGroupTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17997 + + + + + i=46 + + false + + i=21134 + + + + + i=46 + + false + + i=21135 + + + + false + + + + i=21134 + + Variable_2 + + 0 + MessageRepeatCount + + + + MessageRepeatCount + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21133 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=3 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21135 + + Variable_2 + + 0 + MessageRepeatDelay + + + + MessageRepeatDelay + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21133 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21136 + + ObjectType_8 + + 0 + BrokerWriterGroupTransportType + + + + BrokerWriterGroupTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17997 + + + + + i=46 + + false + + i=21137 + + + + + i=46 + + false + + i=15246 + + + + + i=46 + + false + + i=15247 + + + + + i=46 + + false + + i=15249 + + + + false + + + + i=21137 + + Variable_2 + + 0 + QueueName + + + + QueueName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21136 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21138 + + ObjectType_8 + + 0 + BrokerDataSetWriterTransportType + + + + BrokerDataSetWriterTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15305 + + + + + i=46 + + false + + i=21139 + + + + + i=46 + + false + + i=21140 + + + + + i=46 + + false + + i=15250 + + + + + i=46 + + false + + i=15251 + + + + + i=46 + + false + + i=15330 + + + + + i=46 + + false + + i=21141 + + + + false + + + + i=21139 + + Variable_2 + + 0 + QueueName + + + + QueueName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21138 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21140 + + Variable_2 + + 0 + MetaDataQueueName + + + + MetaDataQueueName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21138 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21141 + + Variable_2 + + 0 + MetaDataUpdateTime + + + + MetaDataUpdateTime + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21138 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=290 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21142 + + ObjectType_8 + + 0 + BrokerDataSetReaderTransportType + + + + BrokerDataSetReaderTransportType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=15319 + + + + + i=46 + + false + + i=21143 + + + + + i=46 + + false + + i=15334 + + + + + i=46 + + false + + i=15419 + + + + + i=46 + + false + + i=15420 + + + + + i=46 + + false + + i=21144 + + + + false + + + + i=21143 + + Variable_2 + + 0 + QueueName + + + + QueueName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21142 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21144 + + Variable_2 + + 0 + MetaDataQueueName + + + + MetaDataQueueName + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=21142 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21145 + + ObjectType_8 + + 0 + NetworkAddressType + + + + NetworkAddressType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=47 + + false + + i=21146 + + + + + i=45 + + false + + i=21147 + + + + true + + + + i=21146 + + Variable_2 + + 0 + NetworkInterface + + + + NetworkInterface + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21145 + + + + + i=40 + + false + + i=16309 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=17582 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21147 + + ObjectType_8 + + 0 + NetworkAddressUrlType + + + + NetworkAddressUrlType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=21145 + + + + + i=47 + + false + + i=21149 + + + + false + + + + i=21149 + + Variable_2 + + 0 + Url + + + + Url + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=21147 + + + + + i=40 + + false + + i=63 + + + + + i=37 + + false + + i=78 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21150 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15480 + + + + + i=39 + + false + + i=21156 + + + + 0 + + + + i=21151 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15502 + + + + + i=39 + + false + + i=21159 + + + + 0 + + + + i=21152 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15510 + + + + + i=39 + + false + + i=21162 + + + + 0 + + + + i=21153 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15520 + + + + + i=39 + + false + + i=21165 + + + + 0 + + + + i=21154 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15530 + + + + + i=39 + + false + + i=21168 + + + + 0 + + + + i=21155 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15532 + + + + + i=39 + + false + + i=21171 + + + + 0 + + + + i=21156 + + Variable_2 + + 0 + WriterGroupDataType + + + + WriterGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + WriterGroupDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21159 + + Variable_2 + + 0 + NetworkAddressDataType + + + + NetworkAddressDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + NetworkAddressDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21162 + + Variable_2 + + 0 + NetworkAddressUrlDataType + + + + NetworkAddressUrlDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + NetworkAddressUrlDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21165 + + Variable_2 + + 0 + ReaderGroupDataType + + + + ReaderGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + ReaderGroupDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21168 + + Variable_2 + + 0 + PubSubConfigurationDataType + + + + PubSubConfigurationDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + PubSubConfigurationDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21171 + + Variable_2 + + 0 + DatagramWriterGroupTransportDataType + + + + DatagramWriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + DatagramWriterGroupTransportDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21174 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15480 + + + + + i=39 + + false + + i=21180 + + + + 0 + + + + i=21175 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15502 + + + + + i=39 + + false + + i=21183 + + + + 0 + + + + i=21176 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15510 + + + + + i=39 + + false + + i=21186 + + + + 0 + + + + i=21177 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15520 + + + + + i=39 + + false + + i=21189 + + + + 0 + + + + i=21178 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15530 + + + + + i=39 + + false + + i=21192 + + + + 0 + + + + i=21179 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15532 + + + + + i=39 + + false + + i=21195 + + + + 0 + + + + i=21180 + + Variable_2 + + 0 + WriterGroupDataType + + + + WriterGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='WriterGroupDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21183 + + Variable_2 + + 0 + NetworkAddressDataType + + + + NetworkAddressDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='NetworkAddressDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21186 + + Variable_2 + + 0 + NetworkAddressUrlDataType + + + + NetworkAddressUrlDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='NetworkAddressUrlDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21189 + + Variable_2 + + 0 + ReaderGroupDataType + + + + ReaderGroupDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='ReaderGroupDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21192 + + Variable_2 + + 0 + PubSubConfigurationDataType + + + + PubSubConfigurationDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='PubSubConfigurationDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21195 + + Variable_2 + + 0 + DatagramWriterGroupTransportDataType + + + + DatagramWriterGroupTransportDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='DatagramWriterGroupTransportDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=21198 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15480 + + + + 0 + + + + i=21199 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15502 + + + + 0 + + + + i=21200 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15510 + + + + 0 + + + + i=21201 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15520 + + + + 0 + + + + i=21202 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15530 + + + + 0 + + + + i=21203 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=15532 + + + + 0 + + + + i=23455 + + ObjectType_8 + + 0 + AliasNameType + + + + AliasNameType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + false + + + + i=23456 + + ObjectType_8 + + 0 + AliasNameCategoryType + + + + AliasNameCategoryType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=61 + + + + + i=47 + + false + + i=23457 + + + + + i=47 + + false + + i=23458 + + + + + i=47 + + false + + i=23462 + + + + false + + + + i=23457 + + Object_1 + + 0 + <Alias> + + + + <Alias> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23456 + + + + + i=40 + + false + + i=23455 + + + + + i=37 + + false + + i=11508 + + + + 0 + + + + i=23458 + + Object_1 + + 0 + <SubAliasNameCategories> + + + + <SubAliasNameCategories> + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23456 + + + + + i=40 + + false + + i=23456 + + + + + i=37 + + false + + i=11508 + + + + + i=47 + + false + + i=23459 + + + + 0 + + + + i=23459 + + Method_4 + + 0 + FindAlias + + + + FindAlias + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23458 + + + + + i=40 + + false + + i=23462 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=23460 + + + + + i=46 + + false + + i=23461 + + + + true + true + + + + i=23460 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23461 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23459 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23462 + + Method_4 + + 0 + FindAlias + + + + FindAlias + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23456 + + + + + i=40 + + false + + i=23462 + + + + + i=37 + + false + + i=78 + + + + + i=46 + + false + + i=23463 + + + + + i=46 + + false + + i=23464 + + + + true + true + + + + i=23463 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23462 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23464 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23462 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23468 + + DataType_64 + + 0 + AliasNameDataType + + + + AliasNameDataType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=23499 + + + + + i=38 + + false + + i=23505 + + + + + i=38 + + false + + i=23511 + + + + false + + + + + i=23469 + + ReferenceType_32 + + 0 + AliasFor + + + + AliasFor + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=32 + + + + false + false + + + HasAlias + + + + + i=23470 + + Object_1 + + 0 + Aliases + + + + Aliases + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=23456 + + + + + i=35 + + true + + i=85 + + + + + i=47 + + false + + i=23476 + + + + + i=35 + + false + + i=23479 + + + + + i=35 + + false + + i=23488 + + + + 0 + + + + i=23476 + + Method_4 + + 0 + FindAlias + + + + FindAlias + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23470 + + + + + i=40 + + false + + i=23462 + + + + + i=46 + + false + + i=23477 + + + + + i=46 + + false + + i=23478 + + + + true + true + + + + i=23477 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23476 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23478 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23476 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23479 + + Object_1 + + 0 + TagVariables + + + + TagVariables + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=23456 + + + + + i=35 + + true + + i=23470 + + + + + i=47 + + false + + i=23485 + + + + 0 + + + + i=23485 + + Method_4 + + 0 + FindAlias + + + + FindAlias + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23479 + + + + + i=40 + + false + + i=23462 + + + + + i=46 + + false + + i=23486 + + + + + i=46 + + false + + i=23487 + + + + true + true + + + + i=23486 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23485 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23487 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23485 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23488 + + Object_1 + + 0 + Topics + + + + Topics + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=23456 + + + + + i=35 + + true + + i=23470 + + + + + i=47 + + false + + i=23494 + + + + 0 + + + + i=23494 + + Method_4 + + 0 + FindAlias + + + + FindAlias + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=23488 + + + + + i=40 + + false + + i=23462 + + + + + i=46 + + false + + i=23495 + + + + + i=46 + + false + + i=23496 + + + + true + true + + + + i=23495 + + Variable_2 + + 0 + InputArguments + + + + InputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23494 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23496 + + Variable_2 + + 0 + OutputArguments + + + + OutputArguments + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23494 + + + + + i=40 + + false + + i=68 + + + + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + + 0 + + 1 + 1 + 0 + false + 0 + + + + i=23498 + + DataType_64 + + 0 + CurrencyUnitType + + + + CurrencyUnitType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=22 + + + + + i=38 + + false + + i=23507 + + + + + i=38 + + false + + i=23520 + + + + + i=38 + + false + + i=23528 + + + + false + + + + + i=23499 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=23468 + + + + + i=39 + + false + + i=23502 + + + + 0 + + + + i=23501 + + Variable_2 + + 0 + CurrencyUnit + + + + CurrencyUnit + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=68 + + + + + + + + + + i=23498 + + -2 + + 1 + 1 + 0 + false + 0 + + + + i=23502 + + Variable_2 + + 0 + AliasNameDataType + + + + AliasNameDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + AliasNameDataType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23505 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=23468 + + + + + i=39 + + false + + i=23508 + + + + 0 + + + + i=23507 + + Object_1 + + 0 + Default Binary + + + + Default Binary + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=23498 + + + + + i=39 + + false + + i=23514 + + + + 0 + + + + i=23508 + + Variable_2 + + 0 + AliasNameDataType + + + + AliasNameDataType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='AliasNameDataType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23511 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=23468 + + + + 0 + + + + i=23513 + + ObjectType_8 + + 0 + IOrderedObjectType + + + + IOrderedObjectType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=17602 + + + + + i=46 + + false + + i=23517 + + + + + i=17603 + + true + + i=23519 + + + + true + + + + i=23514 + + Variable_2 + + 0 + CurrencyUnitType + + + + CurrencyUnitType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=7617 + + + + + i=40 + + false + + i=69 + + + + + + CurrencyUnitType + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23517 + + Variable_2 + + 0 + NumberInList + + + + NumberInList + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23513 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=26 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23518 + + ObjectType_8 + + 0 + OrderedListType + + + + OrderedListType + + + 0 + 0 + + + 0 + + + + i=45 + + true + + i=58 + + + + + i=41 + + false + + i=2133 + + + + + i=49 + + false + + i=23519 + + + + + i=46 + + false + + i=23525 + + + + false + + + + i=23519 + + Object_1 + + 0 + <OrderedObject> + + + + <OrderedObject> + + + 0 + 0 + + + 0 + + + + i=49 + + true + + i=23518 + + + + + i=40 + + false + + i=58 + + + + + i=37 + + false + + i=11508 + + + + + i=17603 + + false + + i=23513 + + + + + i=46 + + false + + i=23521 + + + + 0 + + + + i=23520 + + Object_1 + + 0 + Default XML + + + + Default XML + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=23498 + + + + + i=39 + + false + + i=23522 + + + + 0 + + + + i=23521 + + Variable_2 + + 0 + NumberInList + + + + NumberInList + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23519 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=78 + + + + + + 0 + + + + i=26 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23522 + + Variable_2 + + 0 + CurrencyUnitType + + + + CurrencyUnitType + + + 0 + 0 + + + 0 + + + + i=47 + + true + + i=8252 + + + + + i=40 + + false + + i=69 + + + + + + //xs:element[@name='CurrencyUnitType'] + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23525 + + Variable_2 + + 0 + NodeVersion + + + + NodeVersion + + + 0 + 0 + + + 0 + + + + i=46 + + true + + i=23518 + + + + + i=40 + + false + + i=68 + + + + + i=37 + + false + + i=80 + + + + + + + + + + i=12 + + -1 + + 1 + 1 + 0 + false + 0 + + + + i=23528 + + Object_1 + + 0 + Default JSON + + + + Default JSON + + + 0 + 0 + + + 0 + + + + i=40 + + false + + i=76 + + + + + i=38 + + true + + i=23498 + + + + 0 + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.NodeSet2.xml b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.NodeSet2.xml new file mode 100644 index 00000000..eb7b2828 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.NodeSet2.xml @@ -0,0 +1,55573 @@ + + + + + + + + + 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 + + + Default Binary + + i=58 + + + + Default XML + + i=58 + + + + BaseDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + + + Number + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + Integer + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=26 + + + + UInteger + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=26 + + + + Enumeration + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + Boolean + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.8 + + i=24 + + + + SByte + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.17 + + i=27 + + + + Byte + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.9 + + i=28 + + + + Int16 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.25 + + i=27 + + + + UInt16 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.35 + + i=28 + + + + Int32 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.26 + + i=27 + + + + UInt32 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.36 + + i=28 + + + + Int64 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.27 + + i=27 + + + + UInt64 + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=28 + + + + Float + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.15 + + i=26 + + + + Double + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=26 + + + + String + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + DateTime + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + Guid + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.16 + + i=24 + + + + ByteString + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + XmlElement + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.39 + + i=24 + + + + NodeId + https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.2 + + i=24 + + + + ExpandedNodeId + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.11 + + i=24 + + + + StatusCode + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.34.1 + + i=24 + + + + QualifiedName + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.3 + + i=24 + + + + LocalizedText + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.5 + + i=24 + + + + Structure + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + DataValue + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.7.1 + + i=24 + + + + DiagnosticInfo + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.8 + + i=24 + + + + Image + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=15 + + + + Decimal + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.54 + + i=26 + + + + References + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.1 + + + + NonHierarchicalReferences + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.3 + + i=31 + + + + HierarchicalReferences + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.2 + + i=31 + + HierarchicalReferences + + + HasChild + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.4 + + i=33 + + ChildOf + + + Organizes + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.6 + + i=33 + + OrganizedBy + + + HasEventSource + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.14 + + i=33 + + EventSourceOf + + + HasModellingRule + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.11 + + i=32 + + ModellingRuleOf + + + HasEncoding + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.13 + + i=32 + + EncodingOf + + + HasDescription + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.1 + + i=32 + + DescriptionOf + + + HasTypeDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.12 + + i=32 + + TypeDefinitionOf + + + GeneratesEvent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.16 + + i=32 + + GeneratedBy + + + AlwaysGeneratesEvent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.17 + + i=41 + + AlwaysGeneratedBy + + + Aggregates + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.5 + + i=34 + + AggregatedBy + + + HasSubtype + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.10 + + i=34 + + SubtypeOf + + + HasProperty + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.9 + + i=44 + + PropertyOf + + + HasComponent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.7 + + i=44 + + ComponentOf + + + HasNotifier + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.15 + + i=36 + + NotifierOf + + + HasOrderedComponent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.8 + + i=47 + + OrderedComponentOf + + + FromState + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.11 + + i=32 + + ToTransition + + + ToState + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.12 + + i=32 + + FromTransition + + + HasCause + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.13 + + i=32 + + MayBeCausedBy + + + HasEffect + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.14 + + i=32 + + MayBeEffectedBy + + + HasSubStateMachine + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.15 + + i=32 + + SubStateMachineOf + + + HasHistoricalConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.3 + + i=44 + + HistoricalConfigurationOf + + + BaseObjectType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.2 + + + + FolderType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.6 + + i=58 + + + + BaseVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.2 + + + + BaseDataVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.4 + + i=62 + + + + PropertyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.3 + + i=62 + + + + DataTypeDescriptionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.3 + + i=104 + i=105 + i=63 + + + + DataTypeVersion + + i=68 + i=80 + i=69 + + + + DictionaryFragment + + i=68 + i=80 + i=69 + + + + DataTypeDictionaryType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.4 + + i=58 + + + + DataTypeEncodingType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.7 + + i=58 + + + + NamingRuleType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.29 + + 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=78 + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.5 + + i=111 + i=58 + + + + NamingRule + + i=68 + i=78 + i=77 + + + 1 + + + + Mandatory + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.2 + + i=112 + i=77 + + + + NamingRule + + i=68 + i=78 + + + 1 + + + + Optional + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.3 + + i=113 + i=77 + + + + NamingRule + + i=68 + i=80 + + + 2 + + + + ExposesItsArray + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.1 + + i=114 + i=77 + + + + NamingRule + + i=68 + i=83 + + + 3 + + + + OptionalPlaceholder + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.4 + + i=11509 + i=77 + + + + NamingRule + + i=68 + i=11508 + + + 2 + + + + MandatoryPlaceholder + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.5 + + i=11511 + i=77 + + + + NamingRule + + i=68 + i=11510 + + + 1 + + + + Root + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.2 + + i=61 + + + + Objects + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.4 + + i=84 + i=61 + + + + Types + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.5 + + i=84 + i=61 + + + + Views + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.3 + + i=84 + i=61 + + + + ObjectTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.6 + + i=86 + i=58 + i=61 + + + + VariableTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.7 + + i=86 + i=62 + i=61 + + + + DataTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.9 + + i=86 + i=24 + i=61 + + + + ReferenceTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.8 + + i=86 + i=31 + i=61 + + + + XML Schema + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.6 + + i=90 + i=75 + + + + OPC Binary + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.5 + + i=90 + i=75 + + + + HasArgumentDescription + https://reference.opcfoundation.org/v104/Core/docs/Amendment3/11.18 + + i=47 + + ArgumentDescriptionOf + + + HasOptionalInputArgumentDescription + https://reference.opcfoundation.org/v104/Core/docs/Amendment3/11.19 + + 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 + + + 1.04.7 + + + + NamespacePublicationDate + + i=68 + i=15957 + + + 2020-07-15T00:00:00Z + + + + IsNamespaceSubset + + i=68 + i=15957 + + + false + + + + StaticNodeIdTypes + + i=68 + i=15957 + + + + 0 + + + + + StaticNumericNodeIdRange + + i=68 + i=15957 + + + + 1:65535 + + + + + 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 + + + + DefaultInputValues + + i=68 + + + + DefaultInstanceBrowseName + + i=68 + + + + ImageBMP + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.20 + + i=30 + + + + ImageGIF + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.21 + + i=30 + + + + ImageJPG + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.22 + + i=30 + + + + ImagePNG + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.23 + + i=30 + + + + AudioDataType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.53 + + i=15 + + + + ServerType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.6 + + i=58 + + + + ServerRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.7 + + i=2035 + i=58 + + + + RedundancySupport + + i=68 + i=78 + i=2034 + + + + TransparentRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.8 + + i=2037 + i=2038 + i=2034 + + + + CurrentServerId + + i=68 + i=78 + i=2036 + + + + RedundantServerArray + + i=68 + i=78 + i=2036 + + + + NonTransparentRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.9 + + i=2040 + i=2034 + + + + ServerUriArray + + i=68 + i=78 + i=2039 + + + + NonTransparentNetworkRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.10 + + i=11948 + i=2039 + + + + ServerNetworkGroups + + i=68 + i=78 + i=11945 + + + + OperationLimitsType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.1 + + i=11576 + i=12686 + i=12687 + i=11579 + i=13341 + 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 + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.12 + + i=11615 + i=11575 + + + + ExportNamespace + + i=80 + i=11595 + + + + NamespaceMetadataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.13 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.14 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.4 + + i=17615 + i=2052 + + + + StatusCodeId + + i=68 + i=80 + i=2058 + + + + AuditChannelEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.5 + + i=2745 + i=2058 + + + + SecureChannelId + + i=68 + i=78 + i=2059 + + + + AuditOpenSecureChannelEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.7 + + i=2070 + i=2058 + + + + SessionId + + i=68 + i=78 + i=2069 + + + + AuditCreateSessionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.8 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.9 + + i=2749 + i=2071 + + + + EndpointUrl + + i=68 + i=78 + i=2748 + + + + AuditActivateSessionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.11 + + i=2079 + i=2069 + + + + RequestHandle + + i=68 + i=78 + i=2078 + + + + AuditCertificateEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.12 + + i=2081 + i=2058 + + + + Certificate + + i=68 + i=78 + i=2080 + + + + AuditCertificateDataMismatchEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.13 + + i=2083 + i=2084 + i=2080 + + + + InvalidHostname + + i=68 + i=78 + i=2082 + + + + InvalidUri + + i=68 + i=78 + i=2082 + + + + AuditCertificateExpiredEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.14 + + i=2080 + + + + AuditCertificateInvalidEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.15 + + i=2080 + + + + AuditCertificateUntrustedEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.16 + + i=2080 + + + + AuditCertificateRevokedEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.17 + + i=2080 + + + + AuditCertificateMismatchEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.18 + + i=2080 + + + + AuditNodeManagementEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.19 + + i=2052 + + + + AuditAddNodesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.20 + + i=2092 + i=2090 + + + + NodesToAdd + + i=68 + i=78 + i=2091 + + + + AuditDeleteNodesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.21 + + i=2094 + i=2090 + + + + NodesToDelete + + i=68 + i=78 + i=2093 + + + + AuditAddReferencesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.22 + + i=2096 + i=2090 + + + + ReferencesToAdd + + i=68 + i=78 + i=2095 + + + + AuditDeleteReferencesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.23 + + i=2098 + i=2090 + + + + ReferencesToDelete + + i=68 + i=78 + i=2097 + + + + AuditUpdateEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.24 + + i=2052 + + + + AuditWriteUpdateEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.25 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.26 + + i=2751 + i=2099 + + + + ParameterDataTypeId + + i=68 + i=78 + i=2104 + + + + AuditUpdateMethodEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.27 + + i=2128 + i=2129 + i=2052 + + + + MethodId + + i=68 + i=78 + i=2127 + + + + InputArguments + + i=68 + i=78 + i=2127 + + + + SystemEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.28 + + i=2041 + + + + DeviceFailureEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.29 + + i=2130 + + + + SystemStatusChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.30 + + i=11696 + i=2130 + + + + SystemState + + i=68 + i=78 + i=11446 + + + + BaseModelChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.31 + + i=2041 + + + + GeneralModelChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.32 + + i=2134 + i=2132 + + + + Changes + + i=68 + i=78 + i=2133 + + + + SemanticChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.33 + + i=2739 + i=2041 + + + + Changes + + i=68 + i=78 + i=2738 + + + + EventQueueOverflowEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.34 + + i=2041 + + + + ProgressEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.35 + + i=12502 + i=12503 + i=2041 + + + + Context + + i=68 + i=78 + i=11436 + + + + Progress + + i=68 + i=78 + i=11436 + + + + AggregateFunctionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.8 + + i=58 + + + + ServerVendorCapabilityType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.5 + + i=63 + + + + ServerStatusType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.8 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.12 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.13 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.14 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.15 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.16 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.17 + + i=11488 + i=11701 + i=63 + + + + OptionSetValues + + i=68 + i=78 + i=11487 + + + + BitMask + + i=68 + i=80 + i=11487 + + + + SelectionListType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.18 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.19 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.10 + + i=86 + i=2041 + i=61 + + + + Server + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.3.2 + + 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=11312 + i=11313 + i=11314 + i=14415 + i=2034 + i=2253 + + + + RedundancySupport + + i=68 + i=2296 + + + + CurrentServerId + + i=68 + i=2296 + + + + RedundantServerArray + + i=68 + i=2296 + + + + ServerUriArray + + i=68 + i=2296 + + + + ServerNetworkGroups + + i=68 + i=2296 + + + + Namespaces + + i=11645 + i=2253 + + + + GetMonitoredItems + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.2 + + i=12874 + i=2253 + + + + InputArguments + + i=68 + i=12873 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + SetSubscriptionDurable + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.4 + + 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 + + + + + + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.18 + + i=9 + + + + KeyValuePair + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.21 + + i=22 + + + + + + + + EndpointType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.22 + + i=22 + + + + + + + + + + StateMachineType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.6 + + i=2761 + i=2755 + + + + Id + + i=68 + i=78 + i=2760 + + + + FiniteTransitionVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.7 + + i=2768 + i=2762 + + + + Id + + i=68 + i=78 + i=2767 + + + + StateType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.8 + + i=2308 + i=58 + + + + StateNumber + + i=68 + i=78 + i=2307 + + + + InitialStateType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.9 + + i=2307 + + + + TransitionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.10 + + i=2312 + i=58 + + + + TransitionNumber + + i=68 + i=78 + i=2310 + + + + ChoiceStateType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.2 + + i=2307 + + + + HasGuard + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.3 + + i=47 + + GuardOf + + + GuardVariableType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.4 + + i=63 + + + + ExpressionGuardVariableType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.5 + + i=15129 + i=15113 + + + + Expression + + i=68 + i=78 + i=15128 + + + + ElseGuardVariableType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.6 + + i=15113 + + + + RationalNumberType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.20 + + i=17712 + i=17713 + i=63 + + + + Numerator + + i=63 + i=78 + i=17709 + + + + Denominator + + i=63 + i=78 + i=17709 + + + + VectorType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.21 + + i=17715 + i=63 + + + + VectorUnit + + i=68 + i=80 + i=17714 + + + + 3DVectorType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.22 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.23 + + i=18773 + i=63 + + + + LengthUnit + + i=68 + i=80 + i=18772 + + + + 3DCartesianCoordinatesType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.24 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.25 + + i=18780 + i=63 + + + + AngleUnit + + i=68 + i=80 + i=18779 + + + + 3DOrientationType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.26 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.27 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.28 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.23 + + i=22 + + + + + + + + Vector + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.24 + + i=22 + + + + 3DVector + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.25 + + i=18807 + + + + + + + + + CartesianCoordinates + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.26 + + i=22 + + + + 3DCartesianCoordinates + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.27 + + i=18809 + + + + + + + + + Orientation + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.28 + + i=22 + + + + 3DOrientation + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.29 + + i=18811 + + + + + + + + + Frame + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.30 + + i=22 + + + + 3DFrame + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.31 + + i=18813 + + + + + + + + TransitionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.16 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.17 + + 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=78 + i=11939 + + + + + + i=7616 + + + + 1 + + + + Read + + + + + + + i=7616 + + + + 2 + + + + Write + + + + + + + i=7616 + + + + 4 + + + + EraseExisting + + + + + + + i=7616 + + + + 8 + + + + Append + + + + + + + + + FileDirectoryType + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.5 + + i=16355 + i=16314 + + + + InputArguments + + i=68 + i=16354 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + MoveOrCopy + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.1 + + i=15745 + i=15746 + i=15749 + i=15751 + i=15754 + i=58 + + + + ClientProcessingTimeout + + i=68 + i=78 + i=15744 + + + + GenerateFileForRead + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.6 + + 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 + + + + ReadPrepare + + i=15818 + i=15825 + i=15827 + i=15835 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15817 + + + + ReadTransfer + + i=15820 + i=15827 + i=15829 + i=15837 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15819 + + + + ApplyWrite + + i=15822 + i=15831 + i=15833 + i=15839 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15821 + + + + Error + + i=15824 + i=15835 + i=15837 + i=15839 + i=15841 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15823 + + + + IdleToReadPrepare + + i=15826 + i=15815 + i=15817 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15825 + + + + ReadPrepareToReadTransfer + + i=15828 + i=15817 + i=15819 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15827 + + + + ReadTransferToIdle + + i=15830 + i=15819 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15829 + + + + IdleToApplyWrite + + i=15832 + i=15815 + i=15821 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15831 + + + + ApplyWriteToIdle + + i=15834 + i=15821 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15833 + + + + ReadPrepareToError + + i=15836 + i=15817 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15835 + + + + ReadTransferToError + + i=15838 + i=15819 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15837 + + + + ApplyWriteToError + + i=15840 + i=15821 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15839 + + + + ErrorToIdle + + i=15842 + i=15823 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15841 + + + + Reset + + i=78 + i=15803 + + + + RoleSetType + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.3.2 + + i=15633 + i=29 + + + + + + + + + + + + EnumValues + + i=68 + i=78 + 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 + + + + + + + + + IdentityMappingRuleType + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.3.2 + + i=22 + + + + + + + + RoleMappingRuleChangedAuditEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.2.3 + + i=17590 + i=58 + + + + <DictionaryEntryName> + + i=17589 + i=11508 + i=17589 + + + + DictionaryFolderType + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.2.4 + + i=17592 + i=17593 + i=61 + + + + <DictionaryFolderName> + + i=17591 + i=11508 + i=17591 + + + + <DictionaryEntryName> + + i=17589 + i=11508 + i=17591 + + + + Dictionaries + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.2.2 + + i=2253 + i=17591 + + + + HasDictionaryEntry + https://reference.opcfoundation.org/v104/Core/docs/Part19/6.1 + + i=32 + + DictionaryEntryOf + + + IrdiDictionaryEntryType + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.3 + + i=17589 + + + + UriDictionaryEntryType + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.4 + + i=17589 + + + + BaseInterfaceType + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/6.9 + + i=58 + + + + InterfaceTypes + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/8.2.11 + + i=17602 + i=86 + i=61 + + + + HasInterface + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/11.20 + + i=32 + + InterfaceOf + + + HasAddIn + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/11.21 + + i=47 + + AddInOf + + + CurrencyUnitType + https://reference.opcfoundation.org/v104/Core/docs/Amendment10/8.61 + + i=22 + + + + + + + + + + CurrencyUnit + + i=68 + + + + IOrderedObjectType + https://reference.opcfoundation.org/v104/Core/docs/Amendment13/6.10 + + i=23517 + i=17602 + + + + NumberInList + + i=68 + i=78 + i=23513 + + + + OrderedListType + https://reference.opcfoundation.org/v104/Core/docs/Amendment13/6.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.1 + + i=2366 + i=2367 + i=63 + + + + Definition + + i=68 + i=80 + i=2365 + + + + ValuePrecision + + i=68 + i=80 + i=2365 + + + + BaseAnalogType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.3 + + i=2369 + i=15318 + + + + EURange + + i=68 + i=78 + i=2368 + + + + AnalogUnitType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.4 + + i=17502 + i=15318 + + + + EngineeringUnits + + i=68 + i=78 + i=17497 + + + + AnalogUnitRangeType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.5 + + i=17575 + i=2368 + + + + EngineeringUnits + + i=68 + i=78 + i=17570 + + + + DiscreteItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.1 + + i=2365 + + + + TwoStateDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.2 + + i=2374 + i=2375 + i=2372 + + + + FalseState + + i=68 + i=78 + i=2373 + + + + TrueState + + i=68 + i=78 + i=2373 + + + + MultiStateDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.3 + + i=2377 + i=2372 + + + + EnumStrings + + i=68 + i=78 + i=2376 + + + + MultiStateValueDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.4 + + i=11241 + i=11461 + i=2372 + + + + EnumValues + + i=68 + i=78 + i=11238 + + + + ValueAsText + + i=68 + i=78 + i=11238 + + + + ArrayItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.2 + + i=12037 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12029 + + + + XYArrayItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.3 + + i=12046 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12038 + + + + ImageItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.4 + + i=12055 + i=12056 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12047 + + + + YAxisDefinition + + i=68 + i=78 + i=12047 + + + + CubeItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.6 + + i=12076 + i=12021 + + + + AxisDefinition + + i=68 + i=78 + i=12068 + + + + TwoStateVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.3 + + i=9003 + i=63 + + + + SourceTimestamp + + i=68 + i=78 + i=9002 + + + + HasTrueSubState + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.2 + + i=32 + + IsTrueSubStateOf + + + HasFalseSubState + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.3 + + i=32 + + IsFalseSubStateOf + + + HasAlarmSuppressionGroup + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.4 + + i=47 + + IsAlarmSuppressionGroupOf + + + AlarmGroupMember + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.5 + + i=35 + + MemberOfAlarmGroup + + + ConditionType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.4 + + i=2803 + i=78 + i=2782 + + + + Enable + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.5 + + i=2803 + i=78 + i=2782 + + + + AddComment + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.7 + + 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 suscription to refresh. + + + + + + + + + ConditionRefresh2 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.8 + + 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 suscription to refresh. + + + + + + + i=297 + + + + MonitoredItemId + + i=288 + + -1 + + + + + The identifier for the monitored item to refresh. + + + + + + + + + DialogConditionType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.6.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.6.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.7.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.7.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.7.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.5 + + i=17242 + i=80 + i=2915 + + + + Suppress + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.6 + + i=17225 + i=80 + i=2915 + + + + Unsuppress + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.7 + + i=17225 + i=80 + i=2915 + + + + RemoveFromService + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.8 + + i=17259 + i=80 + i=2915 + + + + PlaceInService + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.9 + + i=17259 + i=80 + i=2915 + + + + Reset + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.4 + + i=15013 + i=80 + i=2915 + + + + AlarmGroupType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.1 + + 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 + + + + Timed Shelved + + i=6100 + i=2935 + i=2940 + i=2942 + i=2945 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2932 + + + + One Shot Shelved + + i=6101 + i=2936 + i=2942 + i=2943 + i=2945 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2933 + + + + UnshelvedToTimedShelved + + i=11322 + i=2930 + i=2932 + i=2915 + i=2949 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2935 + + + + UnshelvedToOneShotShelved + + i=11323 + i=2930 + i=2933 + i=2915 + i=2948 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2936 + + + + TimedShelvedToUnshelved + + i=11324 + i=2932 + i=2930 + i=2915 + i=2947 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2940 + + + + TimedShelvedToOneShotShelved + + i=11325 + i=2932 + i=2933 + i=2915 + i=2948 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2942 + + + + OneShotShelvedToUnshelved + + i=11326 + i=2933 + i=2930 + i=2915 + i=2947 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2943 + + + + OneShotShelvedToTimedShelved + + i=11327 + i=2933 + i=2932 + i=2915 + i=2949 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2945 + + + + TimedShelve + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.2 + + i=2940 + i=2943 + i=11093 + i=78 + i=2929 + + + + OneShotShelve + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.4 + + i=2936 + i=2942 + i=11093 + i=78 + i=2929 + + + + LimitAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.12/#5.8.12.2 + + 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 + + + + High + + i=9332 + i=9339 + i=9340 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9331 + + + + Low + + i=9334 + i=9337 + i=9338 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9333 + + + + LowLow + + i=9336 + i=9337 + i=9338 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9335 + + + + LowLowToLow + + i=11340 + i=9335 + i=9333 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9337 + + + + LowToLowLow + + i=11341 + i=9333 + i=9335 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9338 + + + + HighHighToHigh + + i=11342 + i=9329 + i=9331 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9339 + + + + HighToHighHigh + + i=11343 + i=9331 + i=9329 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9340 + + + + ExclusiveLimitAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.12/#5.8.12.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.13 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.14/#5.8.14.2 + + i=9906 + + + + ExclusiveLevelAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.14/#5.8.14.3 + + i=9341 + + + + NonExclusiveDeviationAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.15/#5.8.15.2 + + i=10522 + i=16776 + i=9906 + + + + SetpointNode + + i=68 + i=78 + i=10368 + + + + BaseSetpointNode + + i=68 + i=80 + i=10368 + + + + NonExclusiveRateOfChangeAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.16/#5.8.16.2 + + i=16858 + i=9906 + + + + EngineeringUnits + + i=68 + i=80 + i=10214 + + + + ExclusiveDeviationAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.15/#5.8.15.3 + + i=9905 + i=16817 + i=9341 + + + + SetpointNode + + i=68 + i=78 + i=9764 + + + + BaseSetpointNode + + i=68 + i=80 + i=9764 + + + + ExclusiveRateOfChangeAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.16/#5.8.16.3 + + i=16899 + i=9341 + + + + EngineeringUnits + + i=68 + i=80 + i=9623 + + + + DiscreteAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.1 + + i=2915 + + + + OffNormalAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.2 + + i=11158 + i=10523 + + + + NormalState + + i=68 + i=78 + i=10637 + + + + SystemOffNormalAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.3 + + i=10637 + + + + TripAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.4 + + i=10637 + + + + InstrumentDiagnosticAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.5 + + i=10637 + + + + SystemDiagnosticAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.6 + + i=10637 + + + + CertificateExpirationAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.18 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.2 + + i=58 + + + + ProcessConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.3 + + i=11163 + + + + MaintenanceConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.4 + + i=11163 + + + + SystemConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.5 + + i=11163 + + + + SafetyConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.6 + + i=11163 + + + + HighlyManagedAlarmConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.7 + + i=11163 + + + + TrainingConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.8 + + i=11163 + + + + StatisticalConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.9 + + i=11163 + + + + TestingConditionSubClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.10 + + i=11163 + + + + AuditConditionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.2 + + i=2127 + + + + AuditConditionEnableEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.3 + + i=2790 + + + + AuditConditionCommentEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.4 + + i=17222 + i=11851 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=2829 + + + + Comment + + i=68 + i=78 + i=2829 + + + + AuditConditionRespondEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.5 + + i=11852 + i=2790 + + + + SelectedResponse + + i=68 + i=78 + i=8927 + + + + AuditConditionAcknowledgeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.6 + + i=17223 + i=11853 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=8944 + + + + Comment + + i=68 + i=78 + i=8944 + + + + AuditConditionConfirmEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.7 + + i=17224 + i=11854 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=8961 + + + + Comment + + i=68 + i=78 + i=8961 + + + + AuditConditionShelvingEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.8 + + i=11855 + i=2790 + + + + ShelvingTime + + i=68 + i=80 + i=11093 + + + + AuditConditionSuppressionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.9 + + i=2790 + + + + AuditConditionSilenceEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.10 + + i=2790 + + + + AuditConditionResetEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.11 + + i=2790 + + + + AuditConditionOutOfServiceEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.12 + + i=2790 + + + + RefreshStartEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.11.2 + + i=2130 + + + + RefreshEndEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.11.3 + + i=2130 + + + + RefreshRequiredEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.11.4 + + i=2130 + + + + HasCondition + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.12 + + i=32 + + IsConditionOf + + + HasEffectDisable + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.2 + + i=54 + + MayBeDisabledBy + + + HasEffectEnable + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.3 + + i=54 + + MayBeEnabledBy + + + HasEffectSuppressed + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.4 + + i=54 + + MayBeSuppressedBy + + + HasEffectUnsuppressed + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.5 + + i=54 + + MayBeUnsuppressedBy + + + AlarmMetricsType + https://reference.opcfoundation.org/v104/Core/docs/Part9/8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/8.4 + + i=2127 + i=78 + i=17279 + + + + AlarmRateVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part9/8.3 + + i=17278 + i=63 + + + + Rate + + i=68 + i=78 + i=17277 + + + + ProgramStateMachineType + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.5/#5.2.5.2 + + i=2379 + i=2311 + + + + IntermediateResult + + i=63 + i=78 + i=2378 + + + + AuditProgramTransitionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.4.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.5 + + i=3027 + i=2104 + + + + UpdatedNode + + i=68 + i=78 + i=3012 + + + + AuditHistoryRawModifyDeleteEventType + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.7 + + i=3020 + i=3021 + i=3012 + + + + ReqTimes + + i=68 + i=78 + i=3019 + + + + OldValues + + i=68 + i=78 + i=3019 + + + + AuditHistoryEventDeleteEventType + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.8 + + 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=78 + 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=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 + + + + 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 + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.2 + + i=12651 + i=12642 + + + + InputArguments + + i=68 + i=12650 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.4 + + i=12656 + i=12642 + + + + InputArguments + + i=68 + i=12655 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.6 + + 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=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 + + + + 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 + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.1 + + i=22 + + + + + + + + + + DataTypeDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.2 + + i=22 + + + + + + + + StructureDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.3 + + i=14525 + + + + + + + EnumDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.4 + + i=14525 + + + + + + + + SimpleTypeDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.5 + + i=14525 + + + + + + + + UABinaryFileDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.2 + + i=15534 + + + + + + + + + PubSubState + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.1 + + i=14648 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=14647 + + + + + + + Disabled + + + + + Paused + + + + + Operational + + + + + Error + + + + + + DataSetMetaDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.2 + + i=15534 + + + + + + + + + + + FieldMetaData + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.3 + + i=22 + + + + + + + + + + + + + + + + DataSetFieldFlags + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.4 + + i=15577 + i=5 + + + + + + + OptionSetValues + + i=68 + i=78 + i=15904 + + + + + + + PromotedField + + + + + + ConfigurationVersionDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.5 + + i=22 + + + + + + + + PublishedDataSetDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.4 + + i=22 + + + + + + + + + + + PublishedDataSetSourceDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.5 + + i=22 + + + + PublishedVariableDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.6.1 + + i=22 + + + + + + + + + + + + + + PublishedDataItemsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.6.2 + + i=15580 + + + + + + + PublishedEventsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.7.4 + + i=15580 + + + + + + + + + DataSetFieldContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.2 + + i=15584 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15583 + + + + + + + StatusCode + + + + + SourceTimestamp + + + + + ServerTimestamp + + + + + SourcePicoSeconds + + + + + ServerPicoSeconds + + + + + RawData + + + + + + DataSetWriterDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.5.1 + + i=22 + + + + + + + + + + + + + + + DataSetWriterTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.5.2 + + i=22 + + + + DataSetWriterMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.5.3 + + i=22 + + + + PubSubGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.4/#6.2.4.7 + + i=22 + + + + + + + + + + + + + WriterGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.5/#6.2.5.6.1 + + i=15609 + + + + + + + + + + + + + + + WriterGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.5/#6.2.5.6.2 + + i=22 + + + + WriterGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.5/#6.2.5.6.3 + + i=22 + + + + PubSubConnectionDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.1 + + i=22 + + + + + + + + + + + + + + + ConnectionTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.2 + + i=22 + + + + NetworkAddressDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.3 + + i=22 + + + + + + + NetworkAddressUrlDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.4 + + i=15502 + + + + + + + ReaderGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.7/#6.2.7.2.1 + + i=15609 + + + + + + + + + ReaderGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.7/#6.2.7.2.2 + + i=22 + + + + ReaderGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.7/#6.2.7.2.3 + + i=22 + + + + DataSetReaderDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.8/#6.2.8.11.1 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + DataSetReaderTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.8/#6.2.8.11.2 + + i=22 + + + + DataSetReaderMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.8/#6.2.8.11.3 + + i=22 + + + + SubscribedDataSetDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.1 + + i=22 + + + + TargetVariablesDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.2.2 + + i=15630 + + + + + + + FieldTargetDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.2.3 + + i=22 + + + + + + + + + + + + + OverrideValueHandling + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.2.4 + + i=15875 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=15874 + + + + + + + Disabled + + + + + LastUsableValue + + + + + OverrideValue + + + + + + SubscribedDataSetMirrorDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.3.3 + + i=15630 + + + + + + + + PubSubConfigurationDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.11 + + i=22 + + + + + + + + + DataSetOrderingType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.1.3 + + i=15641 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=20408 + + + + + + + Undefined + + + + + AscendingWriterId + + + + + AscendingWriterIdSingle + + + + + + UadpNetworkMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.1.4 + + i=15643 + i=7 + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15642 + + + + + + + PublisherId + + + + + GroupHeader + + + + + WriterGroupId + + + + + GroupVersion + + + + + NetworkMessageNumber + + + + + SequenceNumber + + + + + PayloadHeader + + + + + Timestamp + + + + + PicoSeconds + + + + + DataSetClassId + + + + + PromotedFields + + + + + + UadpWriterGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.1.7 + + i=15616 + + + + + + + + + + + UadpDataSetMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.2.2 + + i=15647 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15646 + + + + + + + Timestamp + + + + + PicoSeconds + + + + + Status + + + + + MajorVersion + + + + + MinorVersion + + + + + SequenceNumber + + + + + + UadpDataSetWriterMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.2.6 + + i=15605 + + + + + + + + + + UadpDataSetReaderMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.3.10 + + i=15629 + + + + + + + + + + + + + + + JsonNetworkMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.1.1 + + i=15655 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15654 + + + + + + + NetworkMessageHeader + + + + + DataSetMessageHeader + + + + + SingleDataSetMessage + + + + + PublisherId + + + + + DataSetClassId + + + + + ReplyTo + + + + + + JsonWriterGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.1.2 + + i=15616 + + + + + + + JsonDataSetMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.2.1 + + i=15659 + i=7 + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15658 + + + + + + + DataSetWriterId + + + + + MetaDataVersion + + + + + SequenceNumber + + + + + Timestamp + + + + + Status + + + + + + JsonDataSetWriterMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.2.2 + + i=15605 + + + + + + + JsonDataSetReaderMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.3.3 + + i=15629 + + + + + + + + DatagramConnectionTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.1/#6.4.1.1.2 + + i=15618 + + + + + + + DatagramWriterGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.1/#6.4.1.2.3 + + i=15611 + + + + + + + + BrokerConnectionTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.1.3 + + i=15618 + + + + + + + + BrokerTransportQualityOfService + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.2.5 + + i=15009 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=15008 + + + + + + + NotSpecified + + + + + BestEffort + + + + + AtLeastOnce + + + + + AtMostOnce + + + + + ExactlyOnce + + + + + + BrokerWriterGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.2.6 + + i=15611 + + + + + + + + + + BrokerDataSetWriterTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.3.7 + + i=15598 + + + + + + + + + + + + BrokerDataSetReaderTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.4.6 + + i=15628 + + + + + + + + + + + PubSubKeyServiceType + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.3/#9.1.3.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.10/#9.1.10.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.3/#9.1.3.6 + + i=47 + + PubSubConnectionOf + + + PublishedDataSetType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.2.5 + + i=33 + + WriterToDataSet + + + PublishedDataItemsType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.4.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.5.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.5/#9.1.5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.5/#9.1.5.6 + + i=58 + + + + PubSubGroupType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.6 + + i=47 + + IsWriterInGroup + + + HasWriterGroup + + i=47 + + IsWriterGroupOf + + + WriterGroupTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.7 + + i=58 + + + + WriterGroupMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.8 + + i=58 + + + + ReaderGroupType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.12 + + i=47 + + IsReaderInGroup + + + HasReaderGroup + + i=47 + + IsReaderGroupOf + + + ReaderGroupTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.13 + + i=58 + + + + ReaderGroupMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.14 + + i=58 + + + + DataSetWriterType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.7/#9.1.7.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.7/#9.1.7.3 + + i=58 + + + + DataSetWriterMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.7/#9.1.7.4 + + i=58 + + + + DataSetReaderType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.8/#9.1.8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.8/#9.1.8.3 + + i=58 + + + + DataSetReaderMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.8/#9.1.8.4 + + i=58 + + + + SubscribedDataSetType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.9/#9.1.9.1 + + i=58 + + + + TargetVariablesType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.9/#9.1.9.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.9/#9.1.9.5 + + i=15108 + + + + PubSubStatusType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.10/#9.1.10.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.4 + + i=19724 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=19723 + + + + + + + Basic + + + + + Advanced + + + + + Info + + + + + Log + + + + + Debug + + + + + + PubSubDiagnosticsCounterType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.6 + + i=19731 + i=29 + + + + + + + + EnumStrings + + i=68 + i=78 + i=19730 + + + + + + + Information + + + + + Error + + + + + + PubSubDiagnosticsRootType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.8 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.12 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.12/#9.1.12.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.12/#9.1.12.2 + + i=15561 + i=15562 + i=15535 + + + + Actual + + i=68 + i=78 + i=15548 + + + + Maximum + + i=68 + i=78 + i=15548 + + + + PubSubCommunicationFailureEventType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.12/#9.1.12.3 + + i=15576 + i=15535 + + + + Error + + i=68 + i=78 + i=15563 + + + + UadpWriterGroupMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.1/#9.2.1.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.1/#9.2.1.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.1/#9.2.1.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.2/#9.2.2.1 + + i=21127 + i=17998 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21126 + + + + JsonDataSetWriterMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.2/#9.2.2.2 + + i=21129 + i=21096 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21128 + + + + JsonDataSetReaderMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.2/#9.2.2.3 + + i=21131 + i=21132 + i=21104 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21130 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21130 + + + + DatagramConnectionTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.1/#9.3.1.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.1/#9.3.1.2 + + i=21134 + i=21135 + i=17997 + + + + MessageRepeatCount + + i=68 + i=80 + i=21133 + + + + MessageRepeatDelay + + i=68 + i=80 + i=21133 + + + + BrokerConnectionTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.1 + + i=15156 + i=15178 + i=17721 + + + + ResourceUri + + i=68 + i=78 + i=15155 + + + + AuthenticationProfileUri + + i=68 + i=78 + i=15155 + + + + BrokerWriterGroupTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.3.1 + + i=21146 + i=58 + + + + NetworkInterface + + i=17582 + i=16309 + i=78 + i=21145 + + + + Selections + + i=68 + i=78 + i=21146 + + + + NetworkAddressUrlType + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.3.2 + + i=21149 + i=21145 + + + + Url + + i=63 + i=78 + i=21147 + + + + AliasNameType + https://reference.opcfoundation.org/v104/Core/docs/Part17/6.2 + + i=58 + + + + AliasNameCategoryType + https://reference.opcfoundation.org/v104/Core/docs/Part17/6.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/6.3.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/7.2 + + i=22 + + + + + + + + AliasFor + https://reference.opcfoundation.org/v104/Core/docs/Part17/8.2 + + i=32 + + HasAlias + + + Aliases + https://reference.opcfoundation.org/v104/Core/docs/Part17/9.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/9.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/9.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part19/7.1 + + i=19082 + i=19083 + i=11238 + + + + EnumDictionaryEntries + + i=68 + i=78 + i=19077 + + + + ValueAsDictionaryEntries + + i=68 + i=80 + i=19077 + + + + MultiStateDictionaryEntryDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part19/7.2 + + i=19090 + i=19077 + + + + ValueAsDictionaryEntries + + i=68 + i=78 + i=19084 + + + + IdType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.2.3 + + i=7591 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=256 + + + + + + + Numeric + + + + + String + + + + + Guid + + + + + Opaque + + + + + + NodeClass + https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.3 + + i=11878 + i=29 + + + + + + + + + + + + + + + EnumValues + + i=68 + i=78 + i=257 + + + + + + i=7616 + + + + 0 + + + + Unspecified + + + + + + + i=7616 + + + + 1 + + + + Object + + + + + + + i=7616 + + + + 2 + + + + Variable + + + + + + + i=7616 + + + + 4 + + + + Method + + + + + + + i=7616 + + + + 8 + + + + ObjectType + + + + + + + i=7616 + + + + 16 + + + + VariableType + + + + + + + i=7616 + + + + 32 + + + + ReferenceType + + + + + + + i=7616 + + + + 64 + + + + DataType + + + + + + + i=7616 + + + + 128 + + + + View + + + + + + + + + PermissionType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.55 + + i=15030 + i=7 + + + + + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=94 + + + + + + + Browse + + + + + ReadRolePermissions + + + + + WriteAttribute + + + + + WriteRolePermissions + + + + + WriteHistorizing + + + + + Read + + + + + Write + + + + + ReadHistory + + + + + InsertHistory + + + + + ModifyHistory + + + + + DeleteHistory + + + + + ReceiveEvents + + + + + Call + + + + + AddReference + + + + + RemoveReference + + + + + DeleteNode + + + + + AddNode + + + + + + AccessLevelType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.57 + + i=15032 + i=3 + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15031 + + + + + + + CurrentRead + + + + + CurrentWrite + + + + + HistoryRead + + + + + HistoryWrite + + + + + SemanticChange + + + + + StatusWrite + + + + + TimestampWrite + + + + + + AccessLevelExType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.58 + + i=15407 + i=7 + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15406 + + + + + + + CurrentRead + + + + + CurrentWrite + + + + + HistoryRead + + + + + HistoryWrite + + + + + SemanticChange + + + + + StatusWrite + + + + + TimestampWrite + + + + + Reserved + + + + + NonatomicRead + + + + + NonatomicWrite + + + + + WriteFullArrayOnly + + + + + + EventNotifierType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.59 + + i=15034 + i=3 + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15033 + + + + + + + SubscribeToEvents + + + + + Reserved + + + + + HistoryRead + + + + + HistoryWrite + + + + + + AccessRestrictionType + + i=15035 + i=7 + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=95 + + + + + + + SigningRequired + + + + + EncryptionRequired + + + + + SessionRequired + + + + + + RolePermissionType + https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.9 + + i=22 + + + + + + + + DataTypeDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=22 + + + + StructureType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.49 + + i=14528 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=98 + + + + + + + Structure + + + + + StructureWithOptionalFields + + + + + Union + + + + + + StructureField + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.51 + + i=22 + + + + + + + + + + + + + StructureDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.49 + + i=97 + + + + + + + + + + EnumDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.50 + + i=97 + + + + + + + Argument + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.6 + + i=22 + + + + + + + + + + + EnumValueType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=22 + + + + + + + + + EnumField + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.52 + + i=7594 + + + + + + + OptionSet + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.41 + + i=22 + + + + + + + + Union + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.42 + + i=22 + + + + NormalizedString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.46 + + i=12 + + + + DecimalString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.44 + + i=12 + + + + DurationString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.45 + + i=12 + + + + TimeString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.47 + + i=12 + + + + DateString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.43 + + i=12 + + + + Duration + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.13 + + i=11 + + + + UtcTime + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.38 + + i=13 + + + + LocaleId + https://reference.opcfoundation.org/v104/Core/docs/Part9/A.1.3 + + i=12 + + + + TimeZoneDataType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.28 + + i=22 + + + + + + + + Index + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.13 + + i=7 + + + + IntegerId + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.14 + + i=7 + + + + ApplicationType + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.1 + + i=7597 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=307 + + + + + + + Server + + + + + Client + + + + + ClientAndServer + + + + + DiscoveryServer + + + + + + ApplicationDescription + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.1 + + i=22 + + + + + + + + + + + + + VersionTime + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.38 + + i=7 + + + + ServerOnNetwork + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.4.3/#5.4.3.2 + + i=22 + + + + + + + + + + ApplicationInstanceCertificate + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.2 + + i=15 + + + + MessageSecurityMode + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.15 + + i=7595 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=302 + + + + + + + Invalid + + + + + None + + + + + Sign + + + + + SignAndEncrypt + + + + + + UserTokenType + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.37 + + i=7596 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=303 + + + + + + + Anonymous + + + + + UserName + + + + + Certificate + + + + + IssuedToken + + + + + + UserTokenPolicy + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.37 + + i=22 + + + + + + + + + + + EndpointDescription + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.10 + + i=22 + + + + + + + + + + + + + + RegisteredServer + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.27 + + i=22 + + + + + + + + + + + + + + DiscoveryConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.9.1 + + i=22 + + + + MdnsDiscoveryConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.9.2 + + i=12890 + + + + + + + + SecurityTokenRequestType + + i=7598 + i=29 + + + + + + + + EnumStrings + + i=68 + i=78 + i=315 + + + + + + + Issue + + + + + Renew + + + + + + SignedSoftwareCertificate + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.33 + + i=22 + + + + + + + + SessionAuthenticationToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.31 + + i=17 + + + + UserIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.3 + + i=22 + + + + + + + AnonymousIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.3 + + i=316 + + + + UserNameIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.4 + + i=316 + + + + + + + + + X509IdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.5 + + i=316 + + + + + + + IssuedIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.6 + + i=316 + + + + + + + + NodeAttributesMask + + i=11881 + i=29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EnumValues + + i=68 + i=78 + i=348 + + + + + + i=7616 + + + + 0 + + + + None + + + + + + + i=7616 + + + + 1 + + + + AccessLevel + + + + + + + i=7616 + + + + 2 + + + + ArrayDimensions + + + + + + + i=7616 + + + + 4 + + + + BrowseName + + + + + + + i=7616 + + + + 8 + + + + ContainsNoLoops + + + + + + + i=7616 + + + + 16 + + + + DataType + + + + + + + i=7616 + + + + 32 + + + + Description + + + + + + + i=7616 + + + + 64 + + + + DisplayName + + + + + + + i=7616 + + + + 128 + + + + EventNotifier + + + + + + + i=7616 + + + + 256 + + + + Executable + + + + + + + i=7616 + + + + 512 + + + + Historizing + + + + + + + i=7616 + + + + 1024 + + + + InverseName + + + + + + + i=7616 + + + + 2048 + + + + IsAbstract + + + + + + + i=7616 + + + + 4096 + + + + MinimumSamplingInterval + + + + + + + i=7616 + + + + 8192 + + + + NodeClass + + + + + + + i=7616 + + + + 16384 + + + + NodeId + + + + + + + i=7616 + + + + 32768 + + + + Symmetric + + + + + + + i=7616 + + + + 65536 + + + + UserAccessLevel + + + + + + + i=7616 + + + + 131072 + + + + UserExecutable + + + + + + + i=7616 + + + + 262144 + + + + UserWriteMask + + + + + + + i=7616 + + + + 524288 + + + + ValueRank + + + + + + + i=7616 + + + + 1048576 + + + + WriteMask + + + + + + + i=7616 + + + + 2097152 + + + + Value + + + + + + + i=7616 + + + + 4194304 + + + + DataTypeDefinition + + + + + + + i=7616 + + + + 8388608 + + + + RolePermissions + + + + + + + i=7616 + + + + 16777216 + + + + AccessRestrictions + + + + + + + i=7616 + + + + 33554431 + + + + All + + + + + + + i=7616 + + + + 26501220 + + + + BaseNode + + + + + + + i=7616 + + + + 26501348 + + + + Object + + + + + + + i=7616 + + + + 26503268 + + + + ObjectType + + + + + + + i=7616 + + + + 26571383 + + + + Variable + + + + + + + i=7616 + + + + 28600438 + + + + VariableType + + + + + + + i=7616 + + + + 26632548 + + + + Method + + + + + + + i=7616 + + + + 26537060 + + + + ReferenceType + + + + + + + i=7616 + + + + 26501356 + + + + View + + + + + + + + + AddNodesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.2/#5.7.2.2 + + i=22 + + + + + + + + + + + + + AddReferencesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.3/#5.7.3.2 + + i=22 + + + + + + + + + + + + DeleteNodesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.4/#5.7.4.2 + + i=22 + + + + + + + + DeleteReferencesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.5/#5.7.5.1 + + i=22 + + + + + + + + + + + AttributeWriteMask + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.60 + + i=15036 + i=7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.6 + + i=15 + + + + RelativePathElement + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.26 + + i=22 + + + + + + + + + + RelativePath + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.26 + + i=22 + + + + + + + Counter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.5 + + i=7 + + + + NumericRange + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.22 + + i=12 + + + + Time + + i=12 + + + + Date + + i=13 + + + + EndpointConfiguration + + i=22 + + + + + + + + + + + + + + + FilterOperator + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.3 + + i=7605 + i=29 + + + + + + + + + + + + + + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=576 + + + + + + + Equals + + + + + IsNull + + + + + GreaterThan + + + + + LessThan + + + + + GreaterThanOrEqual + + + + + LessThanOrEqual + + + + + Like + + + + + Not + + + + + Between + + + + + InList + + + + + And + + + + + Or + + + + + Cast + + + + + InView + + + + + OfType + + + + + RelatedTo + + + + + BitwiseAnd + + + + + BitwiseOr + + + + + + ContentFilterElement + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.1 + + i=22 + + + + + + + + ContentFilter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.1 + + i=22 + + + + + + + FilterOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4 + + i=22 + + + + ElementOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.2 + + i=589 + + + + + + + LiteralOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.3 + + i=589 + + + + + + + AttributeOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.4 + + i=589 + + + + + + + + + + + SimpleAttributeOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.5 + + i=589 + + + + + + + + + + HistoryEvent + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.5.4 + + i=22 + + + + + + + HistoryUpdateType + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.6 + + i=11884 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=78 + i=11234 + + + + + + i=7616 + + + + 1 + + + + Insert + + + + + + + i=7616 + + + + 2 + + + + Replace + + + + + + + i=7616 + + + + 3 + + + + Update + + + + + + + i=7616 + + + + 4 + + + + Delete + + + + + + + + + PerformUpdateType + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.7 + + i=11885 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=78 + i=11293 + + + + + + i=7616 + + + + 1 + + + + Insert + + + + + + + i=7616 + + + + 2 + + + + Replace + + + + + + + i=7616 + + + + 3 + + + + Update + + + + + + + i=7616 + + + + 4 + + + + Remove + + + + + + + + + MonitoringFilter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.17.1 + + i=22 + + + + EventFilter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.17.3 + + i=719 + + + + + + + + AggregateConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.4.4/#6.4.4.1 + + i=22 + + + + + + + + + + + HistoryEventFieldList + + i=22 + + + + + + + BuildInfo + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.4 + + i=22 + + + + + + + + + + + + RedundancySupport + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.5 + + i=7611 + i=29 + + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=851 + + + + + + + None + + + + + Cold + + + + + Warm + + + + + Hot + + + + + Transparent + + + + + HotAndMirrored + + + + + + ServerState + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.6 + + i=7612 + i=29 + + + + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=852 + + + + + + + Running + + + + + Failed + + + + + NoConfiguration + + + + + Suspended + + + + + Shutdown + + + + + Test + + + + + CommunicationFault + + + + + Unknown + + + + + + RedundantServerDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.7 + + i=22 + + + + + + + + + EndpointUrlListDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.20 + + i=22 + + + + + + + NetworkGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.19 + + i=22 + + + + + + + + SamplingIntervalDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.8 + + i=22 + + + + + + + + + + ServerDiagnosticsSummaryDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.9 + + i=22 + + + + + + + + + + + + + + + + + + ServerStatusDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.10 + + i=22 + + + + + + + + + + + + SessionDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.11 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SessionSecurityDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.12 + + i=22 + + + + + + + + + + + + + + + ServiceCounterDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.13 + + i=22 + + + + + + + + StatusResult + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.14 + + i=22 + + + + + + + + SubscriptionDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.15 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ModelChangeStructureDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.16 + + i=22 + + + + + + + + + SemanticChangeStructureDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.17 + + i=22 + + + + + + + + Range + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.2 + + i=22 + + + + + + + + EUInformation + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.3 + + i=22 + + + + + + + + + + AxisScaleEnumeration + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.7 + + i=12078 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=12077 + + + + + + + Linear + + + + + Log + + + + + Ln + + + + + + ComplexNumberType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.4 + + i=22 + + + + + + + + DoubleComplexNumberType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.5 + + i=22 + + + + + + + + AxisInformation + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.6 + + i=22 + + + + + + + + + + + XVType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.8 + + i=22 + + + + + + + + ProgramDiagnosticDataType + + i=22 + + + + + + + + + + + + + + + + ProgramDiagnostic2DataType + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.8 + + i=22 + + + + + + + + + + + + + + + + + + Annotation + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.5 + + i=22 + + + + + + + + + ExceptionDeviationFormat + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.2 + + i=7614 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=890 + + + + + + + AbsoluteValue + + + + + PercentOfValue + + + + + PercentOfRange + + + + + PercentOfEURange + + + + + Unknown + + + + + + Default Binary + + i=14533 + i=14873 + 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=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=12756 + i=12770 + 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=15396 + i=15398 + i=76 + + + + Default Binary + + i=891 + i=8244 + i=76 + + + + Opc.Ua + + i=7619 + i=15037 + i=14873 + 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=16131 + i=18178 + i=18181 + i=18184 + i=18187 + i=7650 + i=7656 + i=14870 + i=12767 + i=12770 + 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=15398 + 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 +ICAgDQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlQk1QIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW1hZ2VHSUYiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJJbWFnZUpQRyI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlUE5HIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iQXVkaW9EYXRhVHlwZSI+DQog +IDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkJpdEZpZWxkTWFz +a0RhdGFUeXBlIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IktleVZhbHVlUGFpciIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJLZXkiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVuZHBvaW50 +VHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFByb2ZpbGVVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IlJhdGlvbmFsTnVtYmVyIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVyYXRvciIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbm9taW5hdG9yIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJWZWN0b3IiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRFZl +Y3RvciIgQmFzZVR5cGU9InRuczpWZWN0b3IiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJZIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IloiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgQmFzZVR5cGU9InRuczpDYXJ0ZXNpYW5Db29y +ZGluYXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJYIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iWiIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3JpZW50YXRpb24i +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRE9yaWVudGF0aW9uIiBCYXNlVHlw +ZT0idG5zOk9yaWVudGF0aW9uIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkEiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQiIgVHlwZU5hbWU9Im9wYzpEb3Vi +bGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJG +cmFtZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVGhyZWVERnJhbWUiIEJhc2VUeXBl +PSJ0bnM6RnJhbWUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FydGVzaWFuQ29vcmRpbmF0ZXMi +IFR5cGVOYW1lPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJPcmllbnRhdGlvbiIgVHlwZU5hbWU9InRuczpUaHJlZURPcmllbnRhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJPcGVuRmlsZU1vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlJlYWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IldyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJF +cmFzZUV4aXN0aW5nIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJBcHBlbmQiIFZhbHVlPSI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBlIiBMZW5ndGhJbkJpdHM9 +IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyTmFtZSIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVGh1bWJwcmludCIgVmFsdWU9IjIi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUm9sZSIgVmFsdWU9IjMiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBJZCIgVmFsdWU9IjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQW5vbnltb3VzIiBWYWx1ZT0iNSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBdXRoZW50aWNhdGVkVXNlciIgVmFsdWU9IjYiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWFUeXBlIiBUeXBlTmFtZT0idG5zOklkZW50aXR5 +Q3JpdGVyaWFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWEiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpY0NvZGUiIFR5cGVOYW1lPSJvcGM6 +SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeHBvbmVudCIgVHlwZU5hbWU9Im9wYzpT +Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFscGhhYmV0aWNDb2RlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbmN5IiBUeXBlTmFtZT0i +dWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpF +bnVtZXJhdGVkVHlwZSBOYW1lPSJUcnVzdExpc3RNYXNrcyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENlcnRpZmljYXRlcyIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENybHMiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgVmFs +dWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSXNzdWVyQ3JscyIgVmFs +dWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMTUi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iVHJ1c3RMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkTGlzdHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVz +IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENlcnRp +ZmljYXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZUcnVzdGVkQ3JscyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRydXN0ZWRDcmxzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENybHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZklzc3VlckNybHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc3N1ZXJDcmxzIiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ3JscyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWNpbWFsRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2NhbGUiIFR5cGVOYW1lPSJvcGM6SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1l +c3BhY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFt +ZXNwYWNlcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlw +ZXMiIFR5cGVOYW1lPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +U3RydWN0dXJlRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRh +VHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVt +RGF0YVR5cGVzIiBUeXBlTmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbnVtRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFU +eXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBs +ZURhdGFUeXBlcyIgVHlwZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZp +ZWxkPSJOb09mU2ltcGxlRGF0YVR5cGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN0cnVjdHVyZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVk +TmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iRW51bURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3Jp +cHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGVm +aW5pdGlvbiIgVHlwZU5hbWU9InRuczpFbnVtRGVmaW5pdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkJ1aWx0SW5UeXBlIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2ltcGxlVHlwZURlc2Ny +aXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBl +TmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsdEluVHlwZSIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlVBQmluYXJ5RmlsZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlU2No +ZW1hSGVhZGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0 +bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3RydWN0dXJlRGF0YVR5 +cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlwZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0YVR5cGVzIiBUeXBl +TmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURhdGFUeXBlcyIgVHlw +ZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2ltcGxl +RGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2NoZW1hTG9jYXRpb24iIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpbGVIZWFkZXIi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWxlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWxlSGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQm9keSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +UHViU3ViU3RhdGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQYXVzZWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik9wZXJhdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJFcnJvciIgVmFsdWU9IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldE1ldGFEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpE +YXRhVHlwZVNjaGVtYUhlYWRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmFtZXNwYWNl +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFj +ZXMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZk5hbWVzcGFjZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RydWN0dXJlRGF0YVR5cGVzIiBU +eXBlTmFtZT0idG5zOlN0cnVjdHVyZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlN0cnVj +dHVyZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURhdGFU +eXBlcyIgVHlwZU5hbWU9InRuczpFbnVtRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW51 +bURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTaW1wbGVEYXRhVHlwZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaW1wbGVEYXRh +VHlwZXMiIFR5cGVOYW1lPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0i +Tm9PZlNpbXBsZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZp +ZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxk +cyIgVHlwZU5hbWU9InRuczpGaWVsZE1ldGFEYXRhIiBMZW5ndGhGaWVsZD0iTm9PZkZpZWxkcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1 +aWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbiIgVHlwZU5h +bWU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkTWV0YURhdGEiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlv +biIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJG +aWVsZEZsYWdzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRGaWVsZEZsYWdzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnVpbHRJblR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZElkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUHJvcGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQ +YWlyIiBMZW5ndGhGaWVsZD0iTm9PZlByb3BlcnRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIExl +bmd0aEluQml0cz0iMTYiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQcm9tb3RlZEZpZWxkIiBWYWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFU +eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNaW5vclZlcnNpb24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hlZERhdGFT +ZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0Rm9sZGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldEZvbGRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZp +ZWxkPSJOb09mRGF0YVNldEZvbGRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRN +ZXRhRGF0YSIgVHlwZU5hbWU9InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9InRuczpLZXlW +YWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRXh0ZW5zaW9uRmllbGRzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldFNvdXJjZSIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ0ludGVydmFs +SGludCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFk +YmFuZFR5cGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVhZGJhbmRWYWx1ZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnN0aXR1dGVWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZNZXRhRGF0YVByb3BlcnRpZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +UHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNl +dFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdWJsaXNoZWREYXRh +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVk +RGF0YSIgVHlwZU5hbWU9InRuczpQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlB1Ymxpc2hlZERhdGEiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIEJhc2VUeXBl +PSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkV2ZW50Tm90aWZpZXIiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mU2VsZWN0ZWRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RlZEZpZWxkcyIgVHlwZU5hbWU9InRuczpTaW1wbGVBdHRy +aWJ1dGVPcGVyYW5kIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdGVkRmllbGRzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0 +YVNldEZpZWxkQ29udGVudE1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVl +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNDb2RlIiBWYWx1ZT0iMSIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2VUaW1lc3RhbXAiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclRpbWVzdGFtcCIgVmFsdWU9 +IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU291cmNlUGljb1NlY29uZHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclBpY29T +ZWNvbmRzIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmF3 +RGF0YSIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0RmllbGRDb250 +ZW50TWFzayIgVHlwZU5hbWU9InRuczpEYXRhU2V0RmllbGRDb250ZW50TWFzayIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldFdyaXRlclBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkRh +dGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJNZXNzYWdlU2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlNb2RlIiBUeXBlTmFtZT0idG5zOk1lc3NhZ2VT +ZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlY3VyaXR5 +S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24i +IExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3Jp +dGVyR3JvdXBEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBl +PSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJs +ZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0 +YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5h +bWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5 +U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUi +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5 +cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGll +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlckdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6 +VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVydmFsIiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IktlZXBBbGl2ZVRpbWUi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHki +IFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkhlYWRlckxheW91dFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VTZXR0 +aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRXcml0ZXJE +YXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91 +cE1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHViU3ViQ29u +bmVjdGlvbkRhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUHVibGlzaGVySWQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25Qcm9wZXJ0aWVzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvblBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkNv +bm5lY3Rpb25Qcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0U2V0 +dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0idG5zOldyaXRlckdyb3VwRGF0YVR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mV3JpdGVyR3JvdXBzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9InRuczpSZWFkZXJHcm91cERhdGFUeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlJlYWRlckdyb3VwcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmV0d29ya0ludGVyZmFjZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTmV0d29ya0FkZHJlc3NV +cmxEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBT +b3VyY2VUeXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZGVyR3JvdXBEYXRhVHlwZSIg +QmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBE +YXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5 +TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VU +eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERl +c2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFs +dWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGllcyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRSZWFk +ZXJzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNl +dFJlYWRlcnMiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZkRhdGFTZXRSZWFkZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBl +TmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZXJJZCIg +VHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZXJHcm91 +cElkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFT +ZXRXcml0ZXJJZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEYXRhU2V0TWV0YURhdGEiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBlTmFtZT0i +dG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVz +c2FnZVJlY2VpdmVUaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdl +U2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlHcm91cElkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0 +eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mRGF0YVNldFJlYWRlclByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0UmVhZGVyUHJvcGVydGllcyIgVHlwZU5h +bWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFJlYWRlclByb3Bl +cnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5h +bWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnNjcmliZWREYXRhU2V0IiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6U3Vic2NyaWJl +ZERhdGFTZXREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVGFyZ2V0VmFyaWFi +bGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +VmFyaWFibGVzIiBUeXBlTmFtZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIExlbmd0aEZpZWxk +PSJOb09mVGFyZ2V0VmFyaWFibGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldEZpZWxkSWQi +IFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlY2VpdmVySW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJU +YXJnZXROb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBdHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJXcml0ZUluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBUeXBlTmFtZT0idG5zOk92ZXJyaWRl +VmFsdWVIYW5kbGluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik92ZXJyaWRlVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgTGVuZ3RoSW5CaXRz +PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzYWJsZWQiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxhc3RVc2FibGVWYWx1ZSIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3ZlcnJpZGVWYWx1ZSIg +VmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgQmFzZVR5cGU9InRu +czpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVu +dE5vZGVOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25U +eXBlIiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJTdWJDb25maWd1cmF0 +aW9uRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlB1Ymxpc2hlZERhdGFTZXRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1lPSJ0bnM6UHVi +bGlzaGVkRGF0YVNldERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlB1Ymxpc2hlZERhdGFTZXRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvbnMiIFR5cGVOYW1lPSJ0 +bnM6UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbm5lY3Rpb25z +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5h +bWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlVuZGVmaW5lZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iQXNjZW5kaW5nV3JpdGVySWQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIgSXNP +cHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZh +bHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlB1Ymxpc2hlcklkIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHcm91cEhlYWRlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBWZXJz +aW9uIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOZXR3b3Jr +TWVzc2FnZU51bWJlciIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iUGF5bG9hZEhlYWRlciIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlRpbWVzdGFtcCIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJQaWNvU2Vjb25kcyIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEYXRhU2V0Q2xhc3NJZCIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQcm9tb3RlZEZpZWxkcyIgVmFsdWU9IjEwMjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVWFk +cFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T3JkZXJpbmci +IFR5cGVOYW1lPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6VWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ09mZnNl +dCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHVi +bGlzaGluZ09mZnNldCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlB1Ymxpc2hpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiBMZW5ndGhGaWVsZD0i +Tm9PZlB1Ymxpc2hpbmdPZmZzZXQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIExl +bmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJUaW1lc3RhbXAiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlBpY29TZWNvbmRzIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJTdGF0dXMiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWlub3JWZXJzaW9uIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iU2VxdWVuY2VOdW1iZXIiIFZhbHVlPSIzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3Nh +Z2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1l +PSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDb25maWd1cmVkU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQx +NiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVy +c2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3 +b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5z +OlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpVYWRwRGF0YVNldE1lc3Nh +Z2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZh +bCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNlaXZl +T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTmV0d29ya01lc3NhZ2VIZWFkZXIiIFZhbHVlPSIxIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFTZXRNZXNzYWdlSGVhZGVyIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaW5nbGVEYXRhU2V0TWVz +c2FnZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHVibGlz +aGVySWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFT +ZXRDbGFzc0lkIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwbHlUbyIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgQmFz +ZVR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25OZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBMZW5n +dGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iRGF0YVNldFdyaXRlcklkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJNZXRhRGF0YVZlcnNpb24iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXAiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlN0YXR1cyIgVmFsdWU9IjE2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5h +bWU9InRuczpKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJKc29uRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5 +cGVOYW1lPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERh +dGFUeXBlIiBCYXNlVHlwZT0idG5zOkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9u +T2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9 +InRuczpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1lc3NhZ2VSZXBlYXRDb3VudCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTWVzc2FnZVJlcGVhdERlbGF5IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9r +ZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6Q29ubmVjdGlvblRy +YW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRpY2F0aW9u +UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0 +eU9mU2VydmljZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iTm90U3BlY2lmaWVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJCZXN0RWZmb3J0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBdExlYXN0T25jZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iQXRNb3N0T25jZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iRXhhY3RseU9uY2UiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNw +b3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2 +ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZp +Y2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5z +OkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJR +dWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0i +dG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNZXRhRGF0YVVwZGF0ZVRpbWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291 +cmNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1 +dGhlbnRpY2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgVHlwZU5hbWU9InRuczpC +cm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWV0YURhdGFRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkRpYWdub3N0aWNzTGV2 +ZWwiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJh +c2ljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBZHZhbmNl +ZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5mbyIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG9nIiBWYWx1ZT0iMyIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWJ1ZyIgVmFsdWU9IjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUHVi +U3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIExlbmd0aEluQml0cz0iMzIiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluZm9ybWF0aW9uIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcnJvciIgVmFsdWU9IjEiIC8+DQogIDwv +b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWxpYXNO +YW1lRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWxpYXNOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iSWRUeXBl +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOdW1l +cmljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJpbmci +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikd1aWQiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9wYXF1ZSIgVmFsdWU9IjMi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTm9kZUNsYXNzIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJVbnNwZWNpZmllZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iT2JqZWN0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWYXJpYWJsZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWV0aG9kIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJP +YmplY3RUeXBlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YXJpYWJsZVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJSZWZlcmVuY2VUeXBlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iRGF0YVR5cGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWaWV3IiBWYWx1ZT0iMTI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 +b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlBlcm1pc3Npb25UeXBlIiBMZW5ndGhJbkJpdHM9IjMy +IiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u +ZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQnJvd3NlIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWFkUm9sZVBlcm1p +c3Npb25zIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0 +ZUF0dHJpYnV0ZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +V3JpdGVSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IldyaXRlSGlzdG9yaXppbmciIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJSZWFkIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJSZWFkSGlzdG9yeSIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJJbnNlcnRIaXN0b3J5IiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik1vZGlmeUhpc3RvcnkiIFZhbHVlPSI1MTIiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVsZXRlSGlzdG9yeSIgVmFsdWU9IjEwMjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVjZWl2ZUV2ZW50cyIgVmFsdWU9IjIwNDgiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2FsbCIgVmFsdWU9IjQwOTYiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkUmVmZXJlbmNlIiBWYWx1ZT0iODE5MiIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW1vdmVSZWZlcmVuY2UiIFZhbHVl +PSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWxldGVOb2RlIiBW +YWx1ZT0iMzI3NjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkTm9kZSIg +VmFsdWU9IjY1NTM2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkFjY2Vzc0xldmVsVHlwZSIgTGVuZ3RoSW5CaXRzPSI4IiBJc09wdGlv +blNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVudFJlYWQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkN1cnJlbnRXcml0ZSIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVJlYWQiIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3RvcnlXcml0ZSIg +VmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VtYW50aWNDaGFu +Z2UiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNX +cml0ZSIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRpbWVz +dGFtcFdyaXRlIiBWYWx1ZT0iNjQiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUiIExlbmd0aEluQml0cz0i +MzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJyZW50 +UmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVu +dFdyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0 +b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlz +dG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +ZW1hbnRpY0NoYW5nZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlN0YXR1c1dyaXRlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVGltZXN0YW1wV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25hdG9taWNSZWFkIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik5vbmF0b21pY1dyaXRlIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlRnVsbEFycmF5T25seSIgVmFsdWU9IjEwMjQiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +RXZlbnROb3RpZmllclR5cGUiIExlbmd0aEluQml0cz0iOCIgSXNPcHRpb25TZXQ9InRydWUiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1YnNjcmliZVRvRXZlbnRzIiBWYWx1ZT0iMSIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5UmVhZCIgVmFsdWU9IjQiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVdyaXRlIiBWYWx1ZT0iOCIg +Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJBY2Nlc3NSZXN0cmljdGlvblR5cGUiIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0 +cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaWduaW5nUmVxdWlyZWQiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkVuY3J5cHRpb25SZXF1aXJlZCIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2Vzc2lvblJlcXVp +cmVkIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6 +UGVybWlzc2lvblR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51 +bWVyYXRlZFR5cGUgTmFtZT0iU3RydWN0dXJlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RydWN0dXJlIiBWYWx1ZT0iMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJ1Y3R1cmVXaXRoT3B0aW9uYWxGaWVsZHMiIFZh +bHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVuaW9uIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJTdHJ1Y3R1cmVGaWVsZCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT3B0aW9uYWwiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9InVh +Ok5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cnVjdHVyZVR5cGUiIFR5cGVOYW1l +PSJ0bnM6U3RydWN0dXJlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZGaWVsZHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWVsZHMiIFR5 +cGVOYW1lPSJ0bnM6U3RydWN0dXJlRmllbGQiIExlbmd0aEZpZWxkPSJOb09mRmllbGRzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVu +dW1EZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmllbGRzIiBUeXBlTmFtZT0idG5zOkVudW1GaWVsZCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5h +bWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxv +Y2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5h +bWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRl +TWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIg +TGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBl +cm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBUeXBlTmFtZT0i +dG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJJbnN0YW5j +ZU5vZGUiIEJhc2VUeXBlPSJ0bnM6Tm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQi +IFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlw +ZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFt +ZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFt +ZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1p +c3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBl +TmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOk5vZGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlw +ZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIg +U291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlzc2lv +bnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2VyUm9s +ZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUi +IExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBU +eXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJPYmplY3ROb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2Rl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVD +bGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93 +c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2Fs +aXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6 +Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl +cldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5h +bWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1p +c3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVm +ZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVO +b2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJ +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+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fi +c3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVOb2RlIiBCYXNlVHlwZT0i +dG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5v +ZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVh +bGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9w +YzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJv +bGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1lbnNpb25z +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJheURpbWVu +c2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NMZXZlbCIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBUeXBlTmFt +ZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0 +b3JpemluZyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzTGV2ZWxFeCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVUeXBlTm9kZSIg +QmFzZVR5cGU9InRuczpUeXBlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlz +c2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0i +dG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFt +ZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJy +YXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJh +eURpbWVuc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFt +ZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIEJhc2VUeXBlPSJ0bnM6VHlwZU5v +ZGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIg +VHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNv +dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4 +dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1h +c2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xl +UGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2Vz +IiBUeXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9v +bGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9Ik1ldGhvZE5vZGUiIEJhc2VUeXBlPSJ0bnM6SW5zdGFuY2VOb2Rl +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291 +cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5 +cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNr +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNl +VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Np +b25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBl +cm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJv +bGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIg +VHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9Im9w +YzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlZpZXdOb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0i +dG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9 +InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9u +cyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9s +ZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5z +Ok5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5 +dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZp +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 +aWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25P +YmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVmZXJlbmNlTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ludmVyc2UiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh +biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRhcmdldElkIiBUeXBlTmFtZT0idWE6RXhwYW5k +ZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQXJndW1lbnQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbnVtVmFs +dWVUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVudW1G +aWVsZCIgQmFzZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiBTb3VyY2VUeXBlPSJ0bnM6RW51bVZhbHVlVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3B0aW9uU2V0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWxpZEJpdHMiIFR5cGVOYW1lPSJvcGM6 +Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJVbmlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOb3JtYWxpemVk +U3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i +RGVjaW1hbFN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IkR1cmF0aW9uU3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9w +YXF1ZVR5cGUgTmFtZT0iVGltZVN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9w +YzpPcGFxdWVUeXBlIE5hbWU9IkRhdGVTdHJpbmciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQog +IDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEdXJhdGlvbiI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoN +CiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlV0Y1RpbWUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0K +DQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJMb2NhbGVJZCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaW1lWm9uZURhdGFUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9mZnNldCIgVHlw +ZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRheWxpZ2h0U2F2aW5n +SW5PZmZzZXQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkluZGV4Ij4NCiAgPC9vcGM6T3BhcXVlVHlw +ZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW50ZWdlcklkIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVyIiBW +YWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDbGllbnQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNsaWVudEFuZFNlcnZlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzY292ZXJ5U2Vy +dmVyIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXBwbGljYXRpb25O +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFwcGxpY2F0aW9uVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVByb2ZpbGVVcmkiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpc2NvdmVyeVVybHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlVcmxz +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuRGlhZ25vc3RpY3MiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXVkaXRFbnRyeUlkIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVvdXRIaW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZGl0aW9uYWxI +ZWFkZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0 +YW1wIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2aWNlUmVzdWx0IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZpY2VEaWFnbm9zdGljcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cmluZ1RhYmxlIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RyaW5nVGFibGUiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZlN0cmluZ1RhYmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWRkaXRpb25hbEhlYWRlciIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlZl +cnNpb25UaW1lIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNlcnZpY2VGYXVsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVcmlzVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVyaXNWZXJzaW9uIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZVcmlzVmVyc2lvbiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU2VydmVyVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJO +b09mU2VydmVyVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2Vzc2lv +bmxlc3NJbnZva2VSZXNwb25zZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5hbWVzcGFjZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZOYW1lc3BhY2VVcmlzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUlkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxl +SWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpbmRTZXJ2ZXJzUmVz +cG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6QXBwbGljYXRpb25EZXNj +cmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZlck9uTmV0d29yayIgQmFz +ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNvcmRJ +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Nv +dmVyeVVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtS +ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nUmVjb3JkSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVjb3Jkc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXR5Rmls +dGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVy +Q2FwYWJpbGl0eUZpbHRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +U2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTGFzdENvdW50ZXJSZXNldFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6U2VydmVyT25O +ZXR3b3JrIiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlcnMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlm +aWNhdGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iU2lnbiIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iU2lnbkFuZEVuY3J5cHQiIFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVzZXJUb2tlblR5cGUiIExlbmd0aEluQml0 +cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFub255bW91cyIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlck5hbWUiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNlcnRpZmljYXRlIiBWYWx1ZT0i +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc3N1ZWRUb2tlbiIgVmFsdWU9 +IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iVXNlclRva2VuUG9saWN5IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuVHlwZSIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5UeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVkVG9rZW5UeXBlIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklzc3VlckVuZHBvaW50VXJsIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5 +VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludERlc2NyaXB0aW9uIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJs +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIg +VHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2VydmVyQ2VydGlmaWNhdGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2Vj +dXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJJZGVu +dGl0eVRva2VucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5Qb2xpY3kiIExlbmd0 +aEZpZWxkPSJOb09mVXNlcklkZW50aXR5VG9rZW5zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUxldmVsIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9p +bnRzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUHJvZmlsZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQcm9maWxlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +UHJvZmlsZVVyaXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l +PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9p +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RW5kcG9pbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlck5hbWVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyTmFtZXMiIFR5cGVOYW1l +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlck5hbWVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5VXJs +cyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRGlzY292ZXJ5VXJscyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbWFwaG9yZUZpbGVQYXRoIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT25saW5lIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5h +bWU9InRuczpSZWdpc3RlcmVkU2VydmVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ0bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNZG5zU2VydmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFt +ZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVn +aXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXIiIFR5cGVOYW1lPSJ0bnM6UmVnaXN0 +ZXJlZFNlcnZlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1 +cmF0aW9uIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +Y292ZXJ5Q29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMiIFR5cGVO +YW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlw +ZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW5ldyIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2hhbm5lbFNlY3VyaXR5VG9r +ZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q2hhbm5lbElkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlRva2VuSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3JlYXRlZEF0IiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmV2aXNlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJlQ2hh +bm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50UHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RUeXBlIiBUeXBlTmFtZT0i +dG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl +Y3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0i +dG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyUHJvdG9j +b2xWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNlY3VyaXR5VG9rZW4iIFR5cGVOYW1lPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJOb25jZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2Vy +dGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTaWduYXR1cmUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlNlc3Npb25BdXRoZW50 +aWNhdGlvblRva2VuIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlNpZ25hdHVyZURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWxnb3JpdGhtIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpZ25hdHVyZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNyZWF0ZVNlc3Npb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBl +TmFtZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2Vzc2lvbk5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRTZXNzaW9uVGltZW91dCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhSZXNwb25zZU1l +c3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvblRva2VuIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3Bj +OkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlck5vbmNlIiBUeXBlTmFtZT0i +b3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlckVuZHBvaW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0idG5zOlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mU2Vy +dmVyU29mdHdhcmVDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJT +aWduYXR1cmUiIFR5cGVOYW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heFJlcXVlc3RNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNl +cklkZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFub255bW91c0lk +ZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0 +bnM6VXNlcklkZW50aXR5VG9rZW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlck5hbWVJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0i +dG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFzc3dvcmQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ilg1MDlJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SXNzdWVkSWRlbnRpdHlUb2tlbiIgQmFzZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQb2xpY3lJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJj +ZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRv +a2VuRGF0YSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5jcnlwdGlvbkFsZ29yaXRobSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJSc2FFbmNyeXB0ZWRT +ZWNyZXQiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVl +c3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRTaWduYXR1cmUiIFR5cGVO +YW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDbGll +bnRTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudFNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNp +Z25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mQ2xpZW50U29mdHdhcmVD +ZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9i +amVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJUb2tlblNpZ25hdHVyZSIgVHlwZU5h +bWU9InRuczpTaWduYXR1cmVEYXRhIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VydmVyTm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxk +PSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5m +b3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9z +dGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +aWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFt +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJz +Y3JpcHRpb25zIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FuY2VsUmVxdWVz +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXF1ZXN0SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYW5jZWxS +ZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNhbmNlbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJO +b2RlQXR0cmlidXRlc01hc2siIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkJyb3dzZU5hbWUiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEZXNjcmlwdGlvbiIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkRpc3BsYXlOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRXZlbnROb3RpZmllciIgVmFsdWU9IjEyOCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFeGVjdXRhYmxlIiBWYWx1ZT0iMjU2IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3Rvcml6aW5nIiBWYWx1ZT0iNTEyIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2VOYW1lIiBWYWx1ZT0iMTAyNCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc0Fic3RyYWN0IiBWYWx1ZT0iMjA0 +OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVmFsdWU9IjQwOTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9k +ZUNsYXNzIiBWYWx1ZT0iODE5MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b2RlSWQiIFZhbHVlPSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +eW1tZXRyaWMiIFZhbHVlPSIzMjc2OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJVc2VyQWNjZXNzTGV2ZWwiIFZhbHVlPSI2NTUzNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVmFsdWU9IjEzMTA3MiIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyV3JpdGVNYXNrIiBWYWx1ZT0iMjYyMTQ0IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlUmFuayIgVmFsdWU9IjUyNDI4OCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZU1hc2siIFZhbHVlPSIxMDQ4NTc2 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlIiBWYWx1ZT0iMjA5NzE1 +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24i +IFZhbHVlPSI0MTk0MzA0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJvbGVQ +ZXJtaXNzaW9ucyIgVmFsdWU9IjgzODg2MDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBWYWx1ZT0iMTY3NzcyMTYiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMzM1NTQ0MzEiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQmFzZU5vZGUiIFZhbHVlPSIyNjUwMTIyMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZhbHVlPSIyNjUwMTM0OCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3RUeXBlIiBWYWx1ZT0iMjY1MDMyNjgi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmFyaWFibGUiIFZhbHVlPSIyNjU3 +MTM4MyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYXJpYWJsZVR5cGUiIFZh +bHVlPSIyODYwMDQzOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2Qi +IFZhbHVlPSIyNjYzMjU0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZl +cmVuY2VUeXBlIiBWYWx1ZT0iMjY1MzcwNjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVmlldyIgVmFsdWU9IjI2NTAxMzU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJp +YnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +cGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9i +amVjdEF0dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNv +dXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRp +c3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5h +bWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlZhcmlhYmxlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0 +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJW +YWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +VHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVl +UmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZB +cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0i +Tm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVs +IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNz +TGV2ZWwiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmlt +dW1TYW1wbGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ikhpc3Rvcml6aW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kQXR0 +cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlw +ZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5h +bWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVh +OkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0 +ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0 +ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJv +b2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRl +eHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVBdHRyaWJ1 +dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0 +bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIg +VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFz +ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSXNBYnN0cmFjdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZmVy +ZW5jZVR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMy +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgQmFzZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRB +dHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1l +PSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmlld0F0 +dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlO +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3Jp +dGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1 +dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0i +b3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBl +TmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0i +dWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJHZW5lcmljQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +ZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +QXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZBdHRyaWJ1dGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVudE5v +ZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdGVkTmV3Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlm +aWVkTmFtZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRu +czpOb2RlQ2xhc3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQXR0cmlidXRlcyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVE +ZWZpbml0aW9uIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNSZXN1bHQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Rh +dHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBZGRlZE5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBZGROb2Rlc1JlcXVlc3QiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVz +dEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvQWRkIiBUeXBlTmFtZT0idG5zOkFkZE5vZGVzSXRlbSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvQWRkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QWRkTm9kZXNSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU291cmNlTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlk +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6 +Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNGb3J3YXJkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRTZXJ2ZXJVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBU +eXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJ0bnM6QWRk +UmVmZXJlbmNlc0l0ZW0iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlc1RvQWRkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJl +ZmVyZW5jZXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRl +ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1 +c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIg +TGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVRhcmdl +dFJlZmVyZW5jZXMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3Qi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZk5vZGVzVG9EZWxldGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvRGVsZXRlIiBUeXBlTmFtZT0idG5zOkRlbGV0ZU5vZGVz +SXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvRGVsZXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZU5vZGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2Fy +ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEZWxldGVCaWRpcmVjdGlvbmFsIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXNUb0RlbGV0 +ZSIgVHlwZU5hbWU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS +ZWZlcmVuY2VzVG9EZWxldGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1 +bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw +ZSBOYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0 +PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBY2Nlc3NMZXZlbCIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1 +ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb250YWluc05vTG9vcHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlIiBW +YWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVzY3JpcHRpb24i +IFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFt +ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkV2ZW50Tm90 +aWZpZXIiIFZhbHVlPSIxMjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXhl +Y3V0YWJsZSIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJI +aXN0b3JpemluZyIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJJbnZlcnNlTmFtZSIgVmFsdWU9IjEwMjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iSXNBYnN0cmFjdCIgVmFsdWU9IjIwNDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWwiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vZGVDbGFzcyIgVmFsdWU9IjgxOTIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUlkIiBWYWx1ZT0iMTYzODQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3ltbWV0cmljIiBWYWx1ZT0iMzI3NjgiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBWYWx1ZT0iNjU1 +MzYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckV4ZWN1dGFibGUiIFZh +bHVlPSIxMzEwNzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlcldyaXRl +TWFzayIgVmFsdWU9IjI2MjE0NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YWx1ZVJhbmsiIFZhbHVlPSI1MjQyODgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iV3JpdGVNYXNrIiBWYWx1ZT0iMTA0ODU3NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJWYWx1ZUZvclZhcmlhYmxlVHlwZSIgVmFsdWU9IjIwOTcxNTIiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iNDE5NDMw +NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFZh +bHVlPSI4Mzg4NjA4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc1Jl +c3RyaWN0aW9ucyIgVmFsdWU9IjE2Nzc3MjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsRXgiIFZhbHVlPSIzMzU1NDQzMiIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VEaXJlY3Rpb24i +IExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZvcndh +cmQiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2Ui +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSIz +IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlZpZXdEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJUaW1lc3RhbXAiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3VmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJv +d3NlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQnJvd3NlRGlyZWN0aW9uIiBUeXBlTmFtZT0idG5zOkJyb3dzZURpcmVjdGlvbiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VSZXN1bHRNYXNrIiBMZW5ndGhJbkJpdHM9IjMy +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFZhbHVlPSIxIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzRm9yd2FyZCIgVmFsdWU9IjIiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iNCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iOCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjE2IiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBWYWx1ZT0i +MzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iNjMiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVmZXJlbmNlVHlwZUluZm8iIFZhbHVl +PSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRhcmdldEluZm8iIFZhbHVl +PSI2MCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4 +cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFt +ZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvbnRpbnVhdGlv +blBvaW50Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkJyb3dzZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJCcm93c2VSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0 +aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4UmVmZXJlbmNlc1Blck5v +ZGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5v +ZGVzVG9Ccm93c2UiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb2Rlc1RvQnJvd3NlIiBUeXBlTmFtZT0idG5zOkJyb3dzZURlc2NyaXB0aW9uIiBMZW5ndGhG +aWVsZD0iTm9PZk5vZGVzVG9Ccm93c2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QnJvd3NlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0lu +Zm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2lu +dHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZD +b250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDb250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZDb250aW51YXRpb25Qb2ludHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVJlc3VsdCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9P +ZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YnR5 +cGVzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGgiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1l +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVu +dHMiIFR5cGVOYW1lPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZF +bGVtZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJCcm93c2VQYXRoIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nTm9kZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2 +ZVBhdGgiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VQYXRoUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpT +dGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRhcmdldHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRzIiBUeXBlTmFtZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIExlbmd0aEZpZWxkPSJOb09mVGFyZ2V0cyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xh +dGVCcm93c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkJyb3dzZVBhdGhzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aHMi +IFR5cGVOYW1lPSJ0bnM6QnJvd3NlUGF0aCIgTGVuZ3RoRmllbGQ9Ik5vT2ZCcm93c2VQYXRocyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJl +c3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1 +bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWdpc3Rl +ciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9S +ZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvUmVn +aXN0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZ2lzdGVyZWRO +b2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVn +aXN0ZXJlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVn +aXN0ZXJlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9k +ZXNUb1VucmVnaXN0ZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb2Rlc1RvVW5yZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZOb2Rlc1RvVW5yZWdpc3RlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvdW50ZXIiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOdW1lcmljUmFuZ2UiPg0KICA8L29w +YzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJUaW1lIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iRGF0ZSI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludENvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iT3BlcmF0aW9uVGltZW91dCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlVzZUJpbmFyeUVuY29kaW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhTdHJpbmdMZW5ndGgiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhCeXRlU3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4QXJyYXlMZW5ndGgiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhNZXNzYWdlU2l6ZSIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heEJ1ZmZlclNp +emUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDaGFubmVs +TGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZWN1cml0eVRva2VuTGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUXVlcnlEYXRhRGVz +Y3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVsYXRpdmVQYXRoIiBUeXBlTmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5v +ZGVUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiBUeXBlTmFtZT0idWE6RXhwYW5kZWRO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmNsdWRlU3ViVHlwZXMiIFR5cGVOYW1l +PSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRhVG9SZXR1cm4i +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVG9SZXR1 +cm4iIFR5cGVOYW1lPSJ0bnM6UXVlcnlEYXRhRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RGF0YVRvUmV0dXJuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhdG9yIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcXVhbHMiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzTnVsbCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iR3JlYXRlclRoYW4iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJHcmVhdGVyVGhhbk9yRXF1YWwiIFZhbHVlPSI0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuT3JFcXVhbCIgVmFsdWU9IjUiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGlrZSIgVmFsdWU9IjYiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm90IiBWYWx1ZT0iNyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJCZXR3ZWVuIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJJbkxpc3QiIFZhbHVlPSI5IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IkFuZCIgVmFsdWU9IjEwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik9yIiBWYWx1ZT0iMTEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2Fz +dCIgVmFsdWU9IjEyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluVmlldyIg +VmFsdWU9IjEzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9mVHlwZSIgVmFs +dWU9IjE0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlbGF0ZWRUbyIgVmFs +dWU9IjE1IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJpdHdpc2VBbmQiIFZh +bHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCaXR3aXNlT3IiIFZh +bHVlPSIxNyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJRdWVyeURhdGFTZXQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVmaW5pdGlvbk5vZGUiIFR5cGVOYW1lPSJ1 +YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZWYWx1ZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZXMiIFR5cGVO +YW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZlZhbHVlcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2RlUmVmZXJlbmNl +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVy +ZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzRm9yd2FyZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlZmVyZW5jZWROb2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExl +bmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmls +dGVyT3BlcmF0b3IiIFR5cGVOYW1lPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mRmlsdGVyT3BlcmFuZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJPcGVyYW5kcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lv +bk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWx0ZXJPcGVyYW5kcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb250ZW50RmlsdGVy +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZFbGVtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkVsZW1lbnRzIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkVsZW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhbmQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkVsZW1lbnRPcGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iSW5kZXgiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkxpdGVyYWxP +cGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF0dHJpYnV0ZU9wZXJhbmQiIEJhc2VU +eXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBbGlhcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VQYXRoIiBUeXBl +TmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0 +ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4 +UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIEJh +c2VUeXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVm +aW5pdGlvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkJyb3dzZVBhdGgiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VQYXRoIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZCcm93c2VQYXRoIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmlidXRlSWQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5kZXhSYW5nZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iT3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZPcGVyYW5kU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mT3BlcmFuZERpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik9wZXJhbmREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZPcGVyYW5kRGlhZ25vc3RpY0luZm9zIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVudFJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6 +Q29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mRWxlbWVudFJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRWxlbWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVsZW1lbnREaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbGVtZW50RGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBhcnNpbmdSZXN1bHQiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVN0YXR1 +c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +YXRhU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YURpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh +dGFEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZEYXRhRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5Rmlyc3RSZXF1ZXN0IiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFk +ZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVUeXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vZGVUeXBlcyIgVHlwZU5hbWU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBM +ZW5ndGhGaWVsZD0iTm9PZk5vZGVUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRl +ciIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWF4RGF0YVNldHNUb1JldHVybiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNYXhSZWZlcmVuY2VzVG9SZXR1cm4iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlF1ZXJ5Rmlyc3RSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZRdWVyeURhdGFTZXRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlEYXRhU2V0cyIgVHlw +ZU5hbWU9InRuczpRdWVyeURhdGFTZXQiIExlbmd0aEZpZWxkPSJOb09mUXVlcnlEYXRhU2V0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUGFyc2luZ1Jlc3VsdHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQYXJzaW5nUmVz +dWx0cyIgVHlwZU5hbWU9InRuczpQYXJzaW5nUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlBhcnNp +bmdSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJlc3VsdCIgVHlwZU5h +bWU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5TmV4dFJlcXVlc3QiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRl +ciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVsZWFzZUNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry +aW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlF1ZXJ5TmV4dFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlF1ZXJ5RGF0YVNldHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWVyeURhdGFTZXRz +IiBUeXBlTmFtZT0idG5zOlF1ZXJ5RGF0YVNldCIgTGVuZ3RoRmllbGQ9Ik5vT2ZRdWVyeURhdGFT +ZXRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiBU +eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBMZW5ndGhJbkJp +dHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2UiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlciIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQm90aCIgVmFsdWU9IjIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTmVpdGhlciIgVmFsdWU9IjMiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVu +dW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFZhbHVlSWQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9k +ZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmli +dXRlSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +YXRhRW5jb2RpbmciIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRSZXF1ZXN0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVl +c3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heEFnZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIFR5cGVOYW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJu +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWFkIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1JlYWQiIFR5cGVOYW1lPSJ0 +bnM6UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1JlYWQiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkVmFsdWVJZCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFFbmNvZGluZyIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRp +b25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkUmVzdWx0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1 +c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q29udGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikhpc3RvcnlEYXRhIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlSZWFkRGV0YWlscyIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZEV2 +ZW50RGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkV2ZW50RmlsdGVy +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlJlYWRSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRh +aWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzUmVhZE1vZGlmaWVkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJv +cGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXR1cm5Cb3Vu +ZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUHJvY2Vzc2VkRGV0YWlscyIgQmFzZVR5 +cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRU +aW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5k +VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mQWdncmVnYXRlVHlwZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkFnZ3JlZ2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0 +aEZpZWxkPSJOb09mQWdncmVnYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVOYW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSZWFkQXRUaW1lRGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUi +IExlbmd0aEZpZWxkPSJOb09mUmVxVGltZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VT +aW1wbGVCb3VuZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkQW5ub3RhdGlvbkRhdGFE +ZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RGF0YSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpE +YXRhVmFsdWUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZmljYXRpb25JbmZv +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1v +ZGlmaWNhdGlvblRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJVcGRhdGVUeXBlIiBUeXBlTmFtZT0idG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlNb2RpZmllZERhdGEiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeURhdGEiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEYXRhVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5n +dGhGaWVsZD0iTm9PZkRhdGFWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTW9k +aWZpY2F0aW9uSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb2RpZmljYXRpb25JbmZvcyIgVHlwZU5hbWU9InRuczpNb2RpZmljYXRpb25JbmZvIiBM +ZW5ndGhGaWVsZD0iTm9PZk1vZGlmaWNhdGlvbkluZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlFdmVudCIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBU +eXBlTmFtZT0idG5zOkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkRGV0YWlscyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVz +dGFtcHNUb1JldHVybiIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZWxlYXNlQ29udGludWF0aW9uUG9pbnRzIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1JlYWQiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvUmVhZCIgVHlw +ZU5hbWU9InRuczpIaXN0b3J5UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1Jl +YWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNw +b25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InRuczpIaXN0b3J5UmVhZFJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVh +OkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0 +ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJ0bnM6V3JpdGVWYWx1ZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvV3JpdGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZS +ZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +dWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iSGlzdG9yeVVwZGF0ZURldGFpbHMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikhpc3Rv +cnlVcGRhdGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJJbnNlcnQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlJlcGxhY2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IlVwZGF0ZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVs +ZXRlIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVt +ZXJhdGVkVHlwZSBOYW1lPSJQZXJmb3JtVXBkYXRlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5zZXJ0IiBWYWx1ZT0iMSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXBsYWNlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVcGRhdGUiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlJlbW92ZSIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXBkYXRlRGF0YURldGFpbHMi +IEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVw +ZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFj +ZSIgVHlwZU5hbWU9InRuczpQZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIExlbmd0aEZp +ZWxkPSJOb09mVXBkYXRlVmFsdWVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVwZGF0ZVN0cnVjdHVyZURhdGFEZXRhaWxzIiBCYXNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVE +ZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIFR5 +cGVOYW1lPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVsZD0i +Tm9PZlVwZGF0ZVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJVcGRhdGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgVHlwZU5hbWU9InRuczpQ +ZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlciIgVHlwZU5h +bWU9InRuczpFdmVudEZpbHRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFdmVudERh +dGEiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudERh +dGEiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBMZW5ndGhGaWVsZD0iTm9P +ZkV2ZW50RGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJJc0RlbGV0ZU1vZGlmaWVkIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRlbGV0ZUF0VGltZURldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0 +ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudElkcyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50SWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmF0aW9uUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZk9wZXJhdGlvblJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0 +aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZIaXN0b3J5VXBkYXRlRGV0YWlscyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiBUeXBlTmFtZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0IiBMZW5ndGhGaWVsZD0iTm9PZkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpI +aXN0b3J5VXBkYXRlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxNZXRo +b2RSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9iamVjdElkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWV0aG9kSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJbnB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExlbmd0 +aEZpZWxkPSJOb09mSW5wdXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBU +eXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJbnB1 +dEFyZ3VtZW50UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IklucHV0QXJndW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJbnB1dEFyZ3VtZW50UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZJbnB1dEFyZ3VtZW50RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZklucHV0QXJndW1l +bnREaWFnbm9zdGljSW5mb3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mT3V0cHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iT3V0 +cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZPdXRw +dXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iQ2FsbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1 +ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1ldGhvZHNUb0NhbGwiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXRob2RzVG9DYWxs +IiBUeXBlTmFtZT0idG5zOkNhbGxNZXRob2RSZXF1ZXN0IiBMZW5ndGhGaWVsZD0iTm9PZk1ldGhv +ZHNUb0NhbGwiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQ2FsbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0i +dG5zOkNhbGxNZXRob2RSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9uaXRv +cmluZ01vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJTYW1wbGluZyIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwb3J0aW5nIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlVHJpZ2dlciIgTGVuZ3RoSW5CaXRzPSIz +MiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNWYWx1ZSIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzVmFsdWVUaW1lc3RhbXAiIFZh +bHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRU +eXBlIE5hbWU9IkRlYWRiYW5kVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iQWJzb2x1dGUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlBlcmNlbnQiIFZhbHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIEJhc2VUeXBlPSJ0bnM6TW9u +aXRvcmluZ0ZpbHRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmlnZ2VyIiBUeXBlTmFtZT0i +dG5zOkRhdGFDaGFuZ2VUcmlnZ2VyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVhZGJhbmRU +eXBlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRi +YW5kVmFsdWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyIiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXIiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxl +Y3RDbGF1c2VzIiBUeXBlTmFtZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIExlbmd0aEZp +ZWxkPSJOb09mU2VsZWN0Q2xhdXNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xh +dXNlIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlv +biIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VTZXJ2ZXJDYXBhYmlsaXRpZXNEZWZhdWx0cyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHJlYXRVbmNlcnRhaW5Bc0JhZCIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyY2VudERhdGFCYWQiIFR5cGVOYW1l +PSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBlcmNlbnREYXRhR29vZCIgVHlw +ZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2xvcGVkRXh0cmFw +b2xhdGlvbiIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUZpbHRlciIgQmFzZVR5 +cGU9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0VGlt +ZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQ +cm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idG5zOk1vbml0b3JpbmdG +aWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENsYXVzZVJlc3Vs +dHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RD +bGF1c2VSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZT +ZWxlY3RDbGF1c2VSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdu +b3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xhdXNlUmVzdWx0IiBUeXBlTmFtZT0idG5z +OkNvbnRlbnRGaWx0ZXJSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlRmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNl +ZFN0YXJ0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJldmlzZWRQcm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZEFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVO +YW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yaW5nUGFyYW1ldGVycyIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGll +bnRIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJRdWV1ZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzY2FyZE9sZGVzdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ikl0ZW1Ub01vbml0b3IiIFR5cGVOYW1lPSJ0bnM6UmVhZFZh +bHVlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nTW9kZSIgVHlwZU5hbWU9 +InRuczpNb25pdG9yaW5nTW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFBh +cmFtZXRlcnMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVk +SXRlbUNyZWF0ZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkU2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5h +bWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUXVldWVTaXpl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJl +c3VsdCIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVt +c1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBUeXBlTmFtZT0idG5z +OlRpbWVzdGFtcHNUb1JldHVybiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJdGVtc1Rv +Q3JlYXRlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXRl +bXNUb0NyZWF0ZSIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJdGVtc1RvQ3JlYXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0 +ZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVxdWVzdGVkUGFyYW1ldGVycyIgVHlwZU5hbWU9InRuczpNb25pdG9yaW5n +UGFyYW1ldGVycyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNhbXBsaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZFF1ZXVlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9k +aWZ5TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcHNUb1JldHVy +biIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSXRlbXNUb01vZGlmeSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbU1v +ZGlmeVJlcXVlc3QiIExlbmd0aEZpZWxkPSJOb09mSXRlbXNUb01vZGlmeSIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOk1v +bml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1 +YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0 +TW9uaXRvcmluZ01vZGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JpbmdNb2RlIiBUeXBl +TmFtZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1v +bml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZNb25pdG9yZWRJdGVtSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9P +ZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0lu +Zm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklk +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyaWdnZXJp +bmdJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkxpbmtzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMaW5rc1RvQWRkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZM +aW5rc1RvQWRkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxpbmtzVG9SZW1vdmUiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMaW5rc1RvUmVtb3Zl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZMaW5rc1RvUmVtb3ZlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlNldFRyaWdnZXJpbmdSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGRSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVzdWx0cyIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mQWRkUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1l +PSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3Mi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlUmVzdWx0cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbW92ZVJlc3VsdHMiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlbW92ZVJlc3VsdHMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mUmVtb3ZlRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3Jp +cHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mTW9uaXRvcmVkSXRlbUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhG +aWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTW9uaXRvcmVkSXRlbXNSZXNwb25z +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZp +ZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0ZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTGlmZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOb3Rp +ZmljYXRpb25zUGVyUHVibGlzaCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHkiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVh +dGVTdWJzY3JpcHRpb25SZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRQdWJsaXNoaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJNb2RpZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6 +UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFB1 +Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQ +ZXJQdWJsaXNoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlByaW9yaXR5IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRv +dWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRNYXhLZWVw +QWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVi +bGlzaGluZ01vZGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0 +YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5m +byIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTm90aWZpY2F0aW9uTWVzc2Fn +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQdWJsaXNoVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uRGF0YSIgVHlwZU5hbWU9InVhOkV4dGVu +c2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vdGlmaWNh +dGlvbkRhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mTW9uaXRvcmVkSXRlbXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJdGVtcyIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVt +Tm90aWZpY2F0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRp +YWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9y +ZWRJdGVtTm90aWZpY2F0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVu +dE5vdGlmaWNhdGlvbkxpc3QiIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBUeXBlTmFtZT0idG5zOkV2ZW50RmllbGRMaXN0IiBM +ZW5ndGhGaWVsZD0iTm9PZkV2ZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRIYW5kbGUiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50RmllbGRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRGaWVs +ZHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50RmllbGRzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudEZpZWxkcyIgVHlwZU5hbWU9InVhOlZhcmlh +bnQiIExlbmd0aEZpZWxkPSJOb09mRXZlbnRGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RhdHVzQ2hhbmdlTm90aWZpY2F0 +aW9uIiBCYXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU3RhdHVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJsaXNoUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1 +YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudHMiIFR5cGVOYW1lPSJ0bnM6U3Vic2NyaXB0aW9uQWNr +bm93bGVkZ2VtZW50IiBMZW5ndGhGaWVsZD0iTm9PZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iUHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNl +SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkF2YWlsYWJsZVNlcXVl +bmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZp +ZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTW9yZU5vdGlmaWNhdGlvbnMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIFR5cGVOYW1lPSJ0bnM6Tm90aWZpY2F0 +aW9uTWVzc2FnZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9z +dGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVwdWJsaXNoUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXRyYW5zbWl0U2VxdWVuY2VOdW1iZXIiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlcHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uTWVz +c2FnZSIgVHlwZU5hbWU9InRuczpOb3RpZmljYXRpb25NZXNzYWdlIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zZmVyUmVzdWx0 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0 +YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbklk +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlw +dGlvbklkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mU3Vic2NyaXB0 +aW9uSWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VuZEluaXRpYWxWYWx1ZXMiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpUcmFuc2ZlclJlc3VsdCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRp +YWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +U3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNl +SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJCdWlsZEluZm8iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvZHVjdFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3ROYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvZnR3YXJlVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZE51bWJlciIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZERhdGUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUmVkdW5kYW5jeVN1cHBvcnQiIExlbmd0aEluQml0cz0i +MzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbGQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ildhcm0iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkhvdCIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iVHJhbnNwYXJlbnQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkhvdEFuZE1pcnJvcmVkIiBWYWx1ZT0iNSIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTZXJ2ZXJTdGF0ZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUnVubmluZyIg +VmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmFpbGVkIiBWYWx1 +ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb0NvbmZpZ3VyYXRpb24i +IFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1c3BlbmRlZCIg +VmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2h1dGRvd24iIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRlc3QiIFZhbHVlPSI1 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbW11bmljYXRpb25GYXVsdCIg +VmFsdWU9IjYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFs +dWU9IjciIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVySWQiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUxldmVsIiBUeXBlTmFtZT0ib3Bj +OkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJTdGF0ZSIgVHlwZU5hbWU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9pbnRVcmxMaXN0 +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRV +cmxMaXN0IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbmRwb2ludFVy +bExpc3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iTmV0d29ya0dyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOZXR3b3JrUGF0aHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrUGF0aHMiIFR5cGVOYW1l +PSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mTmV0d29ya1Bh +dGhzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWwi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVmlld0NvdW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTZXNz +aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3VtdWxhdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlY3VyaXR5UmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvblRpbWVv +dXRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXNzaW9uQWJvcnRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291bnQiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVy +dmFsQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VjdXJpdHlSZWplY3RlZFJlcXVlc3RzQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRSZXF1ZXN0c0NvdW50IiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJTZXJ2ZXJTdGF0dXNEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJyZW50VGltZSIgVHlwZU5hbWU9Im9w +YzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXRlIiBUeXBlTmFtZT0idG5z +OlNlcnZlclN0YXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGRJbmZvIiBUeXBlTmFt +ZT0idG5zOkJ1aWxkSW5mbyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY29uZHNUaWxsU2h1 +dGRvd24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2h1 +dGRvd25SZWFzb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlc3Npb25EaWFnbm9z +dGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25OYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBlTmFtZT0idG5zOkFwcGxpY2F0aW9u +RGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmkiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQWN0dWFsU2Vzc2lvblRpbWVvdXQiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVzcG9uc2VNZXNzYWdlU2l6ZSIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRDb25uZWN0 +aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkNsaWVudExhc3RDb250YWN0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudE1vbml0b3JlZEl0ZW1zQ291 +bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVu +dFB1Ymxpc2hSZXF1ZXN0c0luUXVldWUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVuYXV0aG9yaXplZFJlcXVl +c3RDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlQ291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ikhpc3RvcnlVcGRhdGVDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FsbENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0i +dG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRN +b25pdG9yaW5nTW9kZUNvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRUcmlnZ2VyaW5nQ291bnQiIFR5cGVOYW1lPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0 +ZU1vbml0b3JlZEl0ZW1zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiBUeXBl +TmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJNb2RpZnlTdWJzY3JpcHRpb25Db3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRh +dGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVDb3VudCIg +VHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUHVibGlzaENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hDb3VudCIgVHlwZU5hbWU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJT +dWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgVHlwZU5h +bWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWRkTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVmZXJlbmNlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNl +cnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVOb2Rl +c0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEZWxldGVSZWZlcmVuY2VzQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZUNvdW50IiBU +eXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOZXh0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRz +Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlF1ZXJ5Rmlyc3RDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlOZXh0Q291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlZ2lzdGVyTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5yZWdpc3Rlck5vZGVzQ291bnQiIFR5cGVOYW1l +PSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGlj +c0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkNsaWVudFVzZXJJZE9mU2Vzc2lvbiIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQ2xpZW50VXNlcklkSGlzdG9yeSIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudFVzZXJJZEhpc3RvcnkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkNsaWVudFVzZXJJZEhpc3Rvcnki +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmNvZGluZyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRQcm90b2Nv +bCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 +eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmljZUNvdW50ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUb3RhbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVycm9yQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlN0YXR1c1Jlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25J +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcmlvcml0 +eSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGlu +Z0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1heExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0VuYWJsZWQiIFR5 +cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vZGlmeUNvdW50 +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Fi +bGVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXB1Ymxpc2hSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVwdWJsaXNoTWVzc2FnZVJlcXVlc3RDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJSZXF1 +ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNmZXJyZWRUb0FsdENsaWVudENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaFJlcXVlc3RDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhQ2hh +bmdlTm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXRlUHVibGlzaFJlcXVlc3RD +b3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJy +ZW50S2VlcEFsaXZlQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3VycmVudExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVW5hY2tub3dsZWRnZWRNZXNzYWdlQ291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0 +b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5leHRTZXF1ZW5jZU51 +bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVu +dFF1ZXVlT3ZlckZsb3dDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9kZWxDaGFuZ2VT +dHJ1Y3R1cmVWZXJiTWFzayIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iTm9kZUFkZGVkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb2RlRGVsZXRlZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iUmVmZXJlbmNlQWRkZWQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZURlbGV0ZWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlQ2hhbmdlZCIgVmFsdWU9IjE2IiAvPg0KICA8 +L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGVs +Q2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWZmZWN0ZWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWZXJiIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2VtYW50 +aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFmZmVjdGVkVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSYW5nZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMb3ciIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +SGlnaCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRVVJbmZvcm1hdGlvbiIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5pdElkIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3Jp +cHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9u +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMaW5l +YXIiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxvZyIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG4iIFZhbHVlPSIyIiAv +Pg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbXBsZXhOdW1iZXJUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlYWwiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF4aXNJbmZvcm1hdGlvbiIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmdp +bmVlcmluZ1VuaXRzIiBUeXBlTmFtZT0idG5zOkVVSW5mb3JtYXRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJFVVJhbmdlIiBUeXBlTmFtZT0idG5zOlJhbmdlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iVGl0bGUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXhpc1NjYWxlVHlwZSIgVHlwZU5hbWU9InRuczpBeGlzU2NhbGVFbnVtZXJh +dGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiBMZW5ndGhGaWVsZD0iTm9PZkF4aXNTdGVwcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJYVlR5cGUiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlwZU5hbWU9 +Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9Im9w +YzpGbG9hdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJQcm9ncmFtRGlhZ25vc3RpY0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgVHlwZU5h +bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZUNsaWVudE5hbWUi +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52b2NhdGlv +bkNyZWF0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTGFzdE1ldGhvZElucHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFz +dE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9 +InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZFJldHVyblN0 +YXR1cyIgVHlwZU5hbWU9InRuczpTdGF0dXNSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHJvZ3JhbURpYWdub3N0aWMyRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQ3JlYXRlU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3JlYXRlQ2xpZW50TmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJJbnZvY2F0aW9uQ3JlYXRpb25UaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdFRyYW5zaXRpb25UaW1lIiBUeXBl +TmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENh +bGwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1l +dGhvZFNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1l +PSJ0bnM6QXJndW1lbnQiIExlbmd0aEZpZWxkPSJOb09mTGFzdE1ldGhvZElucHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9k +T3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVsZD0iTm9P +Zkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +TGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIg +TGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mTGFzdE1ldGhvZE91dHB1dFZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kQ2FsbFRpbWUiIFR5cGVOYW1lPSJvcGM6 +RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kUmV0dXJuU3RhdHVz +IiBUeXBlTmFtZT0idG5zOlN0YXR1c1Jlc3VsdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBbm5vdGF0aW9uIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2UiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQW5ub3RhdGlvblRpbWUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRXhjZXB0aW9uRGV2aWF0aW9uRm9ybWF0IiBMZW5ndGhJ +bkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBYnNvbHV0ZVZhbHVl +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50T2ZW +YWx1ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGVyY2Vu +dE9mUmFuZ2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlBl +cmNlbnRPZkVVUmFuZ2UiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlVua25vd24iIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KPC9v +cGM6VHlwZURpY3Rpb25hcnk+ + + + + NamespaceUri + + i=68 + i=7617 + + + http://opcfoundation.org/UA/ + + + + Deprecated + + i=68 + i=7617 + + + true + + + + KeyValuePair + + i=69 + i=7617 + + + KeyValuePair + + + + 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 + + + + 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 + + + + Union + + i=69 + i=7617 + + + Union + + + + 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=14533 + i=14829 + 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=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=12756 + i=12762 + 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=15396 + i=15402 + i=76 + + + + Default XML + + i=891 + i=8879 + i=76 + + + + Opc.Ua + + i=8254 + i=15039 + i=14829 + 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=16127 + i=18166 + i=18169 + i=18172 + i=18175 + i=8285 + i=8291 + i=14826 + i=12759 + i=12762 + 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=15402 + 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 +cGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCaXRG +aWVsZE1hc2tEYXRhVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRMb25nIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJLZXlWYWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IktleSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBl +PSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5VmFsdWVQYWlyIiB0eXBlPSJ0 +bnM6S2V5VmFsdWVQYWlyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZLZXlW +YWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iktl +eVZhbHVlUGFpciIgdHlwZT0idG5zOktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mS2V5VmFsdWVQYWly +IiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludFR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VHlwZSIgdHlwZT0i +dG5zOkVuZHBvaW50VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5k +cG9pbnRUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF +bmRwb2ludFR5cGUiIHR5cGU9InRuczpFbmRwb2ludFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBvaW50VHlw +ZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmF0aW9uYWxOdW1iZXIiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyYXRvciIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZW5vbWluYXRv +ciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSYXRpb25hbE51 +bWJlciIgdHlwZT0idG5zOlJhdGlvbmFsTnVtYmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSYXRpb25hbE51bWJlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpSYXRpb25hbE51bWJlciIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpMaXN0T2ZSYXRpb25hbE51bWJlciIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +VmVjdG9yIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmVjdG9yIiB0eXBlPSJ0bnM6VmVjdG9y +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZWZWN0b3IiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZlY3RvciIgdHlwZT0idG5zOlZlY3Rv +ciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9mVmVjdG9yIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURWZWN0b3Ii +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6VmVjdG9yIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlgiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlkiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IloiIHR5cGU9InhzOmRvdWJsZSIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl +bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6VGhyZWVEVmVjdG9yIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURWZWN0b3IiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRocmVlRFZlY3RvciIgdHlwZT0i +dG5zOlRocmVlRFZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9m +VGhyZWVEVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6Q2FydGVzaWFuQ29vcmRpbmF0ZXMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVz +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5D +b29yZGluYXRlcyIgdHlwZT0idG5zOkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYXJ0 +ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJU +aHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDYXJ0ZXNpYW5Db29yZGlu +YXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJYIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJZIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJaIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29v +cmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRENhcnRl +c2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOlRocmVlRENhcnRlc2lh +bkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0i +dG5zOkxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPcmllbnRhdGlvbiI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6T3JpZW50YXRpb24iIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk9yaWVudGF0aW9uIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcmllbnRhdGlvbiIgdHlwZT0idG5z +Ok9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxpc3RPZk9yaWVu +dGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpPcmllbnRhdGlvbiI+DQog +ICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJCIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRocmVlRE9y +aWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRE9yaWVudGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOlRo +cmVlRE9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxp +c3RPZlRocmVlRE9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZy +YW1lIiB0eXBlPSJ0bnM6RnJhbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkZyYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGcmFt +ZSIgdHlwZT0idG5zOkZyYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGcmFtZSIgdHlwZT0idG5zOkxpc3RPZkZyYW1l +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJUaHJlZURGcmFtZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGcmFtZSI+DQogICAgICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlw +ZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBl +PSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz +OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJUaHJlZURGcmFtZSIgdHlwZT0idG5zOlRocmVlREZyYW1lIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVERnJhbWUiIHR5cGU9InRuczpUaHJlZURGcmFtZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mVGhyZWVERnJhbWUiIHR5cGU9InRuczpMaXN0T2ZUaHJlZURGcmFtZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3BlbkZpbGVN +b2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVhZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJXcml0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcmFzZUV4aXN0aW5n +XzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVuZF84IiAvPg0KICAgIDwv +eHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +T3BlbkZpbGVNb2RlIiB0eXBlPSJ0bnM6T3BlbkZpbGVNb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik9wZW5GaWxlTW9kZSIgdHlwZT0idG5zOk9wZW5GaWxlTW9kZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcGVuRmls +ZU1vZGUiIHR5cGU9InRuczpMaXN0T2ZPcGVuRmlsZU1vZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBl +Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVXNlck5hbWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iVGh1bWJwcmludF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xlXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwSWRfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vbnltb3VzXzUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkF1dGhlbnRpY2F0ZWRVc2VyXzYiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eUNyaXRlcmlh +VHlwZSIgdHlwZT0idG5zOklkZW50aXR5Q3JpdGVyaWFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIHR5cGU9InRu +czpJZGVudGl0eUNyaXRlcmlhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSIgdHlwZT0idG5zOkxpc3RPZklk +ZW50aXR5Q3JpdGVyaWFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JpdGVyaWFUeXBlIiB0eXBlPSJ0bnM6 +SWRlbnRpdHlDcml0ZXJpYVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkNyaXRlcmlhIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIHR5cGU9InRuczpJZGVudGl0 +eU1hcHBpbmdSdWxlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSWRl +bnRpdHlNYXBwaW5nUnVsZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6SWRlbnRpdHlNYXBw +aW5nUnVsZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyaWNDb2RlIiB0eXBlPSJ4 +czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhwb25l +bnQiIHR5cGU9InhzOmJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFscGhhYmV0aWNDb2RlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW5jeSIgdHlwZT0idWE6 +TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJy +ZW5jeVVuaXRUeXBlIiB0eXBlPSJ0bnM6Q3VycmVuY3lVbml0VHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQ3VycmVuY3lVbml0VHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lVbml0VHlwZSIgdHlwZT0idG5zOkN1 +cnJlbmN5VW5pdFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkN1cnJlbmN5VW5pdFR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZDdXJyZW5jeVVuaXRUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpzaW1wbGVUeXBlICBuYW1lPSJUcnVzdExpc3RNYXNrcyI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZENlcnRpZmljYXRlc18xIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdGVkQ3Jsc18yIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJDZXJ0aWZpY2F0ZXNfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyQ3Jsc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJBbGxfMTUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3RNYXNrcyIgdHlwZT0idG5zOlRy +dXN0TGlzdE1hc2tzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcnVzdExpc3REYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3BlY2lm +aWVkTGlzdHMiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRl +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVHJ1c3RlZENybHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJD +ZXJ0aWZpY2F0ZXMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJDcmxzIiB0eXBl +PSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRydXN0TGlzdERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOlRydXN0TGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOkxpc3RPZlRydXN0TGlzdERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWNpbWFsRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNjYWxlIiB0eXBlPSJ4czpz +aG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5 +cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJEZWNpbWFsRGF0YVR5cGUiIHR5cGU9InRuczpEZWNpbWFsRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTdHJ1Y3R1cmVEZXNj +cmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkVudW1EYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTaW1wbGVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVTY2hlbWFIZWFk +ZXIiIHR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBlPSJ0bnM6 +RGF0YVR5cGVTY2hlbWFIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBl +PSJ0bnM6TGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs +ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0 +aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZEYXRhVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVR5 +cGVEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iU3RydWN0dXJlRGVzY3JpcHRpb24iPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5 +cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVmaW5p +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZURlc2NyaXB0 +aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OlN0cnVjdHVyZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVzY3JpcHRpb24iPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6RGF0YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVmaW5pdGlvbiIgdHlwZT0idG5zOkVudW1E +ZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkVudW1EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVudW1EZXNjcmlwdGlvbiIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVzY3JpcHRpb24i +IHR5cGU9InRuczpFbnVtRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJv +dW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZkVudW1EZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24g +YmFzZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQnVpbHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9u +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpbXBsZVR5 +cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +U2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlVHlwZURlc2NyaXB0 +aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJVQUJpbmFyeUZpbGVEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZVNjaGVtYUhl +YWRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTY2hlbWFMb2NhdGlvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbGVIZWFkZXIiIHR5cGU9 +InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQm9keSIgdHlwZT0idWE6VmFyaWFudCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp +b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVUFCaW5hcnlGaWxlRGF0YVR5cGUiIHR5cGU9InRuczpVQUJpbmFyeUZp +bGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVUFCaW5hcnlG +aWxlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VUFCaW5hcnlGaWxlRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVUFCaW5hcnlGaWxl +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IlB1YlN1YlN0YXRlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry +aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGF1c2VkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9Ik9wZXJhdGlvbmFsXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkVycm9yXzMiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOlB1YlN1YlN0YXRlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJTdGF0ZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViU3RhdGUiIHR5cGU9InRu +czpQdWJTdWJTdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YlN0YXRlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0 +TWV0YURhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJGaWVsZHMiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1ldGFEYXRhIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRDbGFz +c0lkIiB0eXBlPSJ1YTpHdWlkIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb24iIHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVy +c2lvbkRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1l +dGFEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRNZXRhRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRhRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mRGF0YVNldE1ldGFEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRNZXRhRGF0YSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZEZsYWdzIiB0 +eXBlPSJ0bnM6RGF0YVNldEZpZWxkRmxhZ3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2Rl +SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN +YXhTdHJpbmdMZW5ndGgiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRJZCIgdHlwZT0idWE6R3VpZCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWVsZE1ldGFEYXRhIiB0eXBlPSJ0bnM6RmllbGRNZXRhRGF0YSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRmllbGRNZXRhRGF0YSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRNZXRhRGF0YSIgdHlwZT0idG5zOkZpZWxk +TWV0YURhdGEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkZpZWxkTWV0YURhdGEiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1l +dGFEYXRhIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBl +ICBuYW1lPSJEYXRhU2V0RmllbGRGbGFncyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Inhz +OnVuc2lnbmVkU2hvcnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIHR5cGU9InRuczpEYXRh +U2V0RmllbGRGbGFncyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29uZmlndXJhdGlv +blZlcnNpb25EYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWFqb3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWlub3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUi +IHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lv +bkRhdGFUeXBlIiB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mQ29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3Vy +YXRpb25WZXJzaW9uRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVNldEZvbGRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFEYXRh +IiB0eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRTb3VyY2UiIHR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRE +YXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0 +YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRh +U2V0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZERh +dGFTZXRTb3VyY2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbEhpbnQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGVhZGJhbmRUeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVhZGJhbmRWYWx1ZSIgdHlwZT0ieHM6ZG91YmxlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzdGl0dXRlVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1ldGFEYXRhUHJvcGVydGllcyIgdHlw +ZT0idWE6TGlzdE9mUXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkVmFy +aWFibGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHVibGlz +aGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZFZh +cmlhYmxlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 +eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGVkRGF0YSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIg +dHlwZT0idG5zOlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHVibGlz +aGVkRGF0YUl0ZW1zRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6UHVibGlzaGVk +RGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZWxlY3RlZEZpZWxkcyIgdHlwZT0idG5zOkxpc3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmlsdGVyIiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVk +RXZlbnRzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxp +c2hlZEV2ZW50c0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZEV2ZW50 +c0RhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayI+DQog +ICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRG +aWVsZENvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6RGF0YVNldEZpZWxkQ29udGVudE1hc2siIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRD +b250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRl +bnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldEZpZWxkQ29udGVudE1hc2siIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRX +cml0ZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcklkIiB0 +eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENv +bnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlG +cmFtZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRX +cml0ZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgdHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRXcml0ZXJEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFdyaXRlckRhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +V3JpdGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRXcml0ZXJEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFT +ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0V3JpdGVy +TWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUHViU3ViR3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViR3JvdXBEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViR3JvdXBE +YXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1Ykdy +b3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJHcm91cERhdGFUeXBlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0ZXJH +cm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2VlcEFsaXZlVGltZSIg +dHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJpb3JpdHkiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zcG9y +dFNldHRpbmdzIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZVNldHRpbmdz +IiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcnMiIHR5cGU9InRu +czpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6V3JpdGVyR3JvdXBEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3Jv +dXBEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZldyaXRl +ckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJHcm91cERhdGFUeXBlIiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0 +ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVy +R3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZldyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZXJHcm91cE1lc3Nh +Z2VEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJH +cm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJQdWJsaXNoZXJJZCIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlv +blByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRTZXR0 +aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBzIiB0eXBlPSJ0bnM6 +TGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwcyIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29ubmVjdGlvbkRh +dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJDb25uZWN0 +aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNvbm5lY3Rpb25EYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9m +UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBl +IiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0 +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrQWRkcmVzc0RhdGFU +eXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgdHlw +ZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzRGF0 +YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOZXR3b3JrQWRk +cmVzc1VybERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXJsIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +QWRkcmVzc1VybERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NVcmxEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29y +a0FkZHJlc3NVcmxEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3 +b3JrQWRkcmVzc1VybERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNZXNzYWdlU2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0UmVhZGVycyIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N +CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwRGF0YVR5cGUiIHR5 +cGU9InRuczpSZWFkZXJHcm91cERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0 +bnM6UmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw +ZSIgdHlwZT0idG5zOlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlYWRl +ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZSZWFkZXJHcm91cFRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJl +YWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlJlYWRl +ckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlw +ZSIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0UmVh +ZGVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlcklkIiB0eXBlPSJ1 +YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0 +ZXJHcm91cElkIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0V3JpdGVySWQiIHR5cGU9InhzOnVuc2lnbmVkU2hv +cnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRh +RGF0YSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50 +TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVjZWl2ZVRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5RnJh +bWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRSZWFkZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWly +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXQiIHR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0UmVhZGVyRGF0YVR5 +cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRSZWFkZXJEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNl +dFJlYWRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0UmVhZGVyRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5 +cGU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJUcmFu +c3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBl +PSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRE +YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERh +dGFTZXREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0 +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldFZhcmlhYmxlcyIgdHlw +ZT0idG5zOkxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgdHlwZT0idG5zOlRhcmdldFZhcmlh +Ymxlc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUYXJnZXRW +YXJpYWJsZXNEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpUYXJnZXRWYXJpYWJsZXNE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRUYXJnZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkSWQiIHR5cGU9 +InVhOkd1aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlY2Vp +dmVySW5kZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlSW5kZXhSYW5nZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRs +aW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdmVycmlkZVZh +bHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRUYXJnZXRE +YXRhVHlwZSIgdHlwZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIHR5cGU9InRu +czpGaWVsZFRhcmdldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGaWVsZFRhcmdldERhdGFUeXBlIiB0eXBl +PSJ0bnM6TGlzdE9mRmllbGRUYXJnZXREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4N +CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +TGFzdFVzYWJsZVZhbHVlXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJy +aWRlVmFsdWVfMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgdHlwZT0idG5zOk92 +ZXJyaWRlVmFsdWVIYW5kbGluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIHR5cGU9InRuczpPdmVycmlkZVZhbHVl +SGFuZGxpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6TGlzdE9mT3ZlcnJpZGVWYWx1ZUhh +bmRsaW5nIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxl +eENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlN1 +YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyZW50Tm9kZU5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRh +dGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0TWly +cm9yRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiIHR5 +cGU9InRuczpMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJTdWJDb25m +aWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlzaGVkRGF0YVNl +dERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ29ubmVjdGlvbnMiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJDb25uZWN0aW9u +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJh +dGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJD +b25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNv +bmZpZ3VyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBl +IiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZWZpbmVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlXzIiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0i +dG5zOkRhdGFTZXRPcmRlcmluZ1R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRh +dGFTZXRPcmRlcmluZ1R5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8 +eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rp +b24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFz +ayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNz +YWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZV +YWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwVmVyc2lvbiIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEYXRhU2V0T3JkZXJpbmciIHR5cGU9InRuczpEYXRhU2V0T3JkZXJpbmdUeXBl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdP +ZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdPZmZzZXQiIHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAg +ICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRh +VHlwZSIgdHlwZT0idG5zOlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwV3JpdGVy +R3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkxpc3RPZlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVYWRwRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwRGF0YVNl +dE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbmZpZ3VyZWRTaXplIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1i +ZXIiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0i +dG5zOlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRXcml0ZXJN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K +ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlw +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJH +cm91cFZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1iZXIiIHR5cGU9InhzOnVu +c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldENsYXNzSWQiIHR5cGU9InVhOkd1 +aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo +aW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlY2VpdmVPZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdPZmZzZXQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRS +ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURh +dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9 +Ikpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFz +ZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2si +IHR5cGU9InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbk5ldHdv +cmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZKc29uTmV0d29ya01lc3NhZ2VD +b250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21w +bGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNv +bldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6SnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZKc29uV3Jp +dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpz +b25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp +bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRN +YXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldE1l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbkRhdGFTZXRNZXNz +YWdlQ29udGVudE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRh +U2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5 +cGUiIHR5cGU9InRuczpKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +SnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZKc29uRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5 +cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0TWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6SnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldFJlYWRlck1l +c3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25U +cmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5 +cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5QWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUi +IHR5cGU9InRuczpEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFn +cmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9y +dERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZXBlYXRDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTWVzc2FnZVJlcGVhdERlbGF5IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFncmFt +V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mRGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJva2Vy +Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4 +ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkNvbm5lY3Rpb25UcmFu +c3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXNvdXJjZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0 +aW9uUHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog +ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJv +a2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZCcm9rZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFuc3Bv +cnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlz +dE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkXzAiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkJlc3RFZmZvcnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iQXRMZWFzdE9uY2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QXRNb3N0T25jZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFjdGx5T25j +ZV80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIgdHlwZT0idG5z +OkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlP +ZlNlcnZpY2UiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5z +cG9ydFF1YWxpdHlPZlNlcnZpY2UiIHR5cGU9InRuczpMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVzb3VyY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlv +blByb2ZpbGVVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJh +bnRlZSIgdHlwZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpC +cm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mQnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0i +dG5zOkxpc3RPZkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRhdGFT +ZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VVcmki +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJyb2tl +clRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik1ldGFEYXRhVXBkYXRlVGltZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv +bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJEYXRh +U2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ikxpc3RPZkJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRh +dGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p +eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0UmVhZGVy +VHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VV +cmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJy +b2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFJlYWRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFU +eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0UmVh +ZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5z +OkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJva2VyRGF0 +YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQnJva2VyRGF0YVNl +dFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEaWFnbm9zdGljc0xldmVsIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QmFzaWNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZWRfMSIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb18yIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJMb2dfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVi +dWdfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzTGV2ZWwiIHR5cGU9InRuczpEaWFnbm9zdGljc0xl +dmVsIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVs +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +c0xldmVsIiB0eXBlPSJ0bnM6RGlhZ25vc3RpY3NMZXZlbCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVsIiB0eXBlPSJ0bnM6 +TGlzdE9mRGlhZ25vc3RpY3NMZXZlbCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmlj +YXRpb24iPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbl8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJFcnJvcl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2lt +cGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xh +c3NpZmljYXRpb24iIHR5cGU9InRuczpQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNh +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3Rp +Y3NDb3VudGVyQ2xhc3NpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiB0eXBl +PSJ0bnM6UHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3RpY3ND +b3VudGVyQ2xhc3NpZmljYXRpb24iIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJEaWFnbm9zdGljc0Nv +dW50ZXJDbGFzc2lmaWNhdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFsaWFzTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVk +TmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlZmVyZW5jZWROb2RlcyIgdHlwZT0idWE6TGlzdE9mRXhwYW5kZWROb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiIHR5 +cGU9InRuczpBbGlhc05hbWVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6QWxpYXNOYW1lRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQWxpYXNOYW1l +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IklkVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyaWNfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iU3RyaW5nXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ikd1aWRfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3BhcXVlXzMiIC8+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJJZFR5cGUiIHR5cGU9InRuczpJZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZklkVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iSWRUeXBlIiB0eXBlPSJ0bnM6SWRUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZklkVHlwZSIgdHlwZT0idG5zOkxpc3RPZklkVHlw +ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iTm9kZUNsYXNzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zcGVjaWZpZWRfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iT2JqZWN0XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhcmlhYmxlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF80 +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RUeXBlXzgiIC8+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlVHlwZV8xNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8zMiIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGF0YVR5cGVfNjQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlZpZXdfMTI4IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJtaXNzaW9uVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 +L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25UeXBlIiB0eXBl +PSJ0bnM6UGVybWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vz +c0xldmVsVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkQnl0ZSI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJBY2Nlc3NMZXZlbFR5cGUiIHR5cGU9InRuczpBY2Nlc3NMZXZlbFR5cGUiIC8+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vzc0xldmVsRXhUeXBlIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUi +IHR5cGU9InRuczpBY2Nlc3NMZXZlbEV4VHlwZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iRXZlbnROb3RpZmllclR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNp +Z25lZEJ5dGUiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllclR5cGUiIHR5cGU9InRuczpFdmVudE5vdGlm +aWVyVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUm9sZVBlcm1pc3Npb25UeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25zIiB0eXBlPSJ0bnM6UGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJvbGVQZXJt +aXNzaW9uVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Um9sZVBlcm1pc3Npb25UeXBlIiB0eXBlPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlRGVm +aW5pdGlvbiIgdHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVEZWZpbml0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9InRuczpE +YXRhVHlwZURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgdHlwZT0idG5z +Okxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iU3RydWN0dXJlVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0 +cnVjdHVyZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJ1Y3R1cmVXaXRo +T3B0aW9uYWxGaWVsZHNfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb25f +MiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUiIHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVGaWVsZCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVz +Y3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNPcHRpb25hbCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6U3RydWN0dXJlRmll +bGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZUZpZWxkIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVGaWVs +ZCIgdHlwZT0idG5zOlN0cnVjdHVyZUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVGaWVsZCIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZUZpZWxkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkJhc2VEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUi +IHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0dXJlRmllbGQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBl +PSJ0bnM6U3RydWN0dXJlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mU3RydWN0dXJlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlRGVmaW5pdGlvbiIgdHlwZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZT +dHJ1Y3R1cmVEZWZpbml0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVmaW5pdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250 +ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlw +ZURlZmluaXRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mRW51bUZpZWxkIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURlZmluaXRpb24iIHR5cGU9InRuczpFbnVtRGVmaW5p +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlZmluaXRpb24i +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVudW1EZWZpbml0 +aW9uIiB0eXBlPSJ0bnM6RW51bURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZWZpbml0aW9uIiB0 +eXBlPSJ0bnM6TGlzdE9mRW51bURlZmluaXRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNs +YXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJCcm93c2VOYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzcGxheU5h +bWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxp +emVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJXcml0ZU1hc2siIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyUm9sZVBl +cm1pc3Npb25zIiB0eXBlPSJ0bnM6TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNl +Tm9kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlIiB0eXBlPSJ0 +bnM6Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTm9kZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZSIgdHlwZT0idG5zOk5v +ZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZk5vZGUiIHR5cGU9InRuczpMaXN0T2ZOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJbnN0YW5jZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikluc3RhbmNlTm9kZSIg +dHlwZT0idG5zOkluc3RhbmNlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHlw +ZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhz +OmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl +eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlR5cGVO +b2RlIiB0eXBlPSJ0bnM6VHlwZU5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9i +amVjdE5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAg +PHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0Tm9kZSIgdHlwZT0idG5zOk9i +amVjdE5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9iamVjdFR5cGVOb2RlIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ik9iamVjdFR5cGVOb2RlIiB0eXBlPSJ0bnM6T2JqZWN0VHlwZU5vZGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0 +YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +UmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNj +ZXNzTGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWduZWRC +eXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWluaW11 +bVNhbXBsaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3Rvcml6aW5nIiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxF +eCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlTm9kZSIg +dHlwZT0idG5zOlZhcmlhYmxlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFy +aWFibGVUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpUeXBlTm9kZSI+DQogICAgICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBl +IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJWYXJpYWJsZVR5cGVOb2RlIiB0eXBlPSJ0bnM6VmFyaWFibGVUeXBl +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN5bW1ldHJpYyIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Iklu +dmVyc2VOYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIHR5cGU9InRuczpSZWZlcmVuY2VUeXBlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTWV0aG9kTm9kZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpJbnN0YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRXhlY3V0YWJsZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJFeGVjdXRhYmxlIiB0eXBlPSJ4czpi +b29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRob2ROb2RlIiB0eXBlPSJ0bnM6TWV0aG9kTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld05vZGUiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmlld05vZGUiIHR5cGU9InRuczpWaWV3 +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YVR5cGVOb2RlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRh +dGFUeXBlTm9kZSIgdHlwZT0idG5zOkRhdGFUeXBlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUmVmZXJlbmNlTm9kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0ludmVyc2Ui +IHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VOb2RlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlTm9kZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlTm9kZSIg +dHlwZT0idG5zOlJlZmVyZW5jZU5vZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZU5vZGUiIHR5cGU9InRu +czpMaXN0T2ZSZWZlcmVuY2VOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJBcmd1bWVudCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5cGU9InVhOkxpc3RP +ZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFyZ3VtZW50IiB0eXBlPSJ0bnM6QXJndW1lbnQi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFyZ3VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcmd1bWVudCIgdHlwZT0idG5zOkFy +Z3VtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZBcmd1bWVudCIgdHlwZT0idG5zOkxpc3RPZkFyZ3VtZW50IiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVt +VmFsdWVUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJW +YWx1ZSIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzcGxheU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIg +dHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJFbnVtVmFsdWVUeXBlIiB0eXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bVZhbHVlVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bVZhbHVlVHlwZSIgdHlwZT0idG5zOkVudW1W +YWx1ZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkVudW1WYWx1ZVR5cGUiIHR5cGU9InRuczpMaXN0T2ZFbnVtVmFs +dWVUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJFbnVtRmllbGQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2Ui +Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RW51bVZhbHVlVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRmllbGQiIHR5 +cGU9InRuczpFbnVtRmllbGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVu +dW1GaWVsZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51 +bUZpZWxkIiB0eXBlPSJ0bnM6RW51bUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtRmllbGQiIHR5cGU9InRu +czpMaXN0T2ZFbnVtRmllbGQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ik9wdGlvblNldCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbGlkQml0 +cyIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ik9wdGlvblNldCIgdHlwZT0idG5zOk9wdGlvblNldCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mT3B0aW9uU2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJPcHRpb25TZXQiIHR5cGU9InRuczpPcHRpb25TZXQiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +Zk9wdGlvblNldCIgdHlwZT0idG5zOkxpc3RPZk9wdGlvblNldCIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5pb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJVbmlvbiIgdHlwZT0idG5zOlVuaW9uIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVbmlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iVW5pb24iIHR5cGU9InRuczpVbmlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVW5pb24iIHR5cGU9 +InRuczpMaXN0T2ZVbmlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJOb3JtYWxpemVkU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRGVjaW1hbFN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkR1cmF0aW9uU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZVN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGVTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJEdXJhdGlvbiIgdHlwZT0ieHM6ZG91YmxlIiAvPg0KDQogIDx4czpl +bGVtZW50IG5hbWU9IlV0Y1RpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiAvPg0KDQogIDx4czplbGVt +ZW50IG5hbWU9IkxvY2FsZUlkIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlRpbWVab25lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik9mZnNldCIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRheWxpZ2h0U2F2aW5nSW5PZmZzZXQiIHR5cGU9Inhz +OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lWm9uZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6VGltZVpvbmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +VGltZVpvbmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGltZVpvbmVEYXRhVHlwZSIgdHlwZT0idG5zOlRpbWVab25lRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZlRpbWVab25lRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZUaW1lWm9uZURhdGFUeXBlIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkluZGV4 +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlZ2Vy +SWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJB +cHBsaWNhdGlvblR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2ZXJfMCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iQ2xpZW50XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkNsaWVudEFuZFNlcnZlcl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNj +b3ZlcnlTZXJ2ZXJfMyIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgdHlwZT0idG5zOkFwcGxp +Y2F0aW9uVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXBwbGljYXRpb25EZXNj +cmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBw +bGljYXRpb25VcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2R1Y3RVcmkiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFwcGxpY2F0aW9uTmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9u +VHlwZSIgdHlwZT0idG5zOkFwcGxpY2F0aW9uVHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iR2F0ZXdheVNlcnZlclVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlz +Y292ZXJ5UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5VXJscyIgdHlwZT0i +dWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFw +cGxpY2F0aW9uRGVzY3JpcHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlv +bkRlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkFwcGxpY2F0aW9uRGVzY3Jp +cHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlJlcXVlc3RIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFt +cCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXR1cm5EaWFnbm9zdGljcyIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1 +ZGl0RW50cnlJZCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZW91dEhpbnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlv +bmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlc3BvbnNlSGVhZGVyIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXAiIHR5cGU9InhzOmRh +dGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGFuZGxlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VydmljZVJlc3VsdCIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmljZURpYWdub3N0aWNzIiB0 +eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cmluZ1RhYmxlIiB0eXBlPSJ1YTpMaXN0T2ZTdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGRpdGlvbmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpS +ZXNwb25zZUhlYWRlciIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJzaW9uVGltZSIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VG +YXVsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9u +c2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlRmF1bHQiIHR5cGU9InRuczpTZXJ2aWNlRmF1bHQiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25sZXNzSW52b2tlUmVxdWVzdFR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVyaXNWZXJzaW9u +IiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiB0eXBlPSJ0 +bnM6U2Vzc2lvbmxlc3NJbnZva2VSZXF1ZXN0VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25zZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWVzcGFjZVVyaXMiIHR5cGU9InVhOkxpc3RPZlN0 +cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9r +ZVJlc3BvbnNlVHlwZSIgdHlwZT0idG5zOlNlc3Npb25sZXNzSW52b2tlUmVzcG9uc2VUeXBlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2Fs +ZUlkcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpcyIgdHlwZT0idWE6TGlzdE9m +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJz +UmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iRmluZFNlcnZlcnNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlcnMiIHR5cGU9InRuczpMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2Ui +IHR5cGU9InRuczpGaW5kU2VydmVyc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJTZXJ2ZXJPbk5ldHdvcmsiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJDYXBhYmlsaXRpZXMiIHR5cGU9 +InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpTZXJ2ZXJPbk5ldHdvcmsiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNlcnZlck9uTmV0d29yayI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyT25OZXR3b3JrIiB0eXBlPSJ0bnM6U2Vy +dmVyT25OZXR3b3JrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpMaXN0T2ZT +ZXJ2ZXJPbk5ldHdvcmsiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5z +OlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTdGFydGluZ1JlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVjb3Jkc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3 +b3JrUmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RDb3VudGVyUmVzZXRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vy +dmVycyIgdHlwZT0idG5zOkxpc3RPZlNlcnZlck9uTmV0d29yayIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiB0eXBlPSJ0 +bnM6RmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +Lz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSI+DQogICAg +PHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IkludmFsaWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduXzIiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25BbmRFbmNyeXB0XzMiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlU2Vj +dXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCg0KICA8eHM6c2lt +cGxlVHlwZSAgbmFtZT0iVXNlclRva2VuVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9 +InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFub255bW91c18wIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyTmFtZV8xIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJJc3N1ZWRUb2tlbl8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuVHlwZSIgdHlwZT0i +dG5zOlVzZXJUb2tlblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJUb2tl +blBvbGljeSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9s +aWN5SWQiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRva2VuVHlwZSIgdHlwZT0idG5zOlVzZXJUb2tlblR5 +cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlZFRva2Vu +VHlwZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNzdWVyRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuUG9saWN5IiB0eXBlPSJ0bnM6VXNlclRva2Vu +UG9saWN5IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVc2VyVG9rZW5Qb2xp +Y3kiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tl +blBvbGljeSIgdHlwZT0idG5zOlVzZXJUb2tlblBvbGljeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVXNlclRva2VuUG9s +aWN5IiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludERlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVy +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlw +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlckNlcnRpZmljYXRlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 +eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXNlcklkZW50aXR5VG9rZW5zIiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlMZXZlbCIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpF +bmRwb2ludERlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiB0eXBlPSJ0 +bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlw +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9j +YWxlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9maWxlVXJpcyIgdHlwZT0idWE6TGlz +dE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkdldEVuZHBv +aW50c1JlcXVlc3QiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXF1ZXN0IiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJHZXRFbmRwb2ludHNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50cyIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRp +b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2V0RW5kcG9pbnRzUmVz +cG9uc2UiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iUmVnaXN0ZXJlZFNlcnZlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9kdWN0VXJp +IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJOYW1lcyIgdHlwZT0idWE6TGlzdE9mTG9jYWxpemVk +VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclR5cGUiIHR5cGU9InRuczpBcHBsaWNhdGlvblR5cGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkdhdGV3YXlTZXJ2ZXJVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpc2NvdmVyeVVybHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFwaG9y +ZUZpbGVQYXRoIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc09ubGluZSIgdHlwZT0ieHM6Ym9vbGVhbiIg +bWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3Rl +cmVkU2VydmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWdpc3RlcmVk +U2VydmVyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdp +c3RlcmVkU2VydmVyIiB0eXBlPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVnaXN0 +ZXJlZFNlcnZlciIgdHlwZT0idG5zOkxpc3RPZlJlZ2lzdGVyZWRTZXJ2ZXIiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2Vy +dmVyUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXIiIHR5cGU9InRu +czpSZWdpc3RlcmVkU2VydmVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWdpc3RlclNlcnZlclJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXJS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIHR5 +cGU9InRuczpEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEaXNjb3ZlcnlD +b25maWd1cmF0aW9uIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1kbnNTZXJ2ZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2Fw +YWJpbGl0aWVzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOk1kbnNEaXNj +b3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3Rl +clNlcnZlcjJSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlciIgdHlw +ZT0idG5zOlJlZ2lzdGVyZWRTZXJ2ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyMlJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25z +ZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMi +IHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXIyUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlw +ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Iklzc3VlXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlJlbmV3XzEiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIHR5cGU9InRuczpT +ZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNo +YW5uZWxTZWN1cml0eVRva2VuIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDaGFubmVsSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb2tlbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlZEF0IiB0eXBl +PSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZExpZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNoYW5uZWxTZWN1cml0eVRva2VuIiB0eXBlPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4i +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRQcm90b2NvbFZlcnNpb24iIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXF1ZXN0VHlwZSIgdHlwZT0idG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ2xpZW50Tm9uY2UiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZExp +ZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9wZW5T +ZWN1cmVDaGFubmVsUmVxdWVzdCIgdHlwZT0idG5zOk9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclByb3RvY29sVmVyc2lvbiIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5VG9rZW4iIHR5cGU9InRuczpDaGFubmVsU2VjdXJpdHlUb2tlbiIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZl +ck5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOk9wZW5TZWN1 +cmVDaGFubmVsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vj +dXJlQ2hhbm5lbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIHR5 +cGU9InRuczpDbG9zZVNlY3VyZUNoYW5uZWxSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJDbG9zZVNlY3VyZUNoYW5uZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9zZVNlY3Vy +ZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDZXJ0aWZpY2F0ZURh +dGEiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNpZ25lZFNvZnR3YXJl +Q2VydGlmaWNhdGUiIHR5cGU9InRuczpTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduZWRTb2Z0d2Fy +ZUNlcnRpZmljYXRlIiB0eXBlPSJ0bnM6U2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mU2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3 +YXJlQ2VydGlmaWNhdGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2Vzc2lvbkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlRGF0YSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTaWduYXR1cmUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVEYXRhIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0 +YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRlU2Vzc2lvblJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpB +cHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbk5hbWUiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNsaWVudE5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIg +dHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkU2Vzc2lvblRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVz +cG9uc2VNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJDcmVhdGVTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVy +IiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRTZXNzaW9uVGlt +ZW91dCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2VydGlm +aWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckVuZHBvaW50cyIgdHlwZT0idG5z +Okxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIg +dHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTaWduYXR1 +cmUiIHR5cGU9InRuczpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVxdWVzdE1lc3NhZ2VTaXplIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25SZXNw +b25zZSIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlBvbGljeUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iIHR5cGU9InRuczpV +c2VySWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQW5vbnltb3Vz +SWRlbnRpdHlUb2tlbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iIHR5cGU9InRuczpBbm9ueW1v +dXNJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVc2VyTmFtZUlk +ZW50aXR5VG9rZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg +ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlck5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJQYXNzd29yZCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVu +Y3J5cHRpb25BbGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlVzZXJOYW1lSWRlbnRpdHlUb2tlbiIgdHlwZT0idG5zOlVzZXJOYW1lSWRl +bnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iWDUwOUlkZW50aXR5VG9r +ZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGVEYXRhIiB0eXBlPSJ4 +czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJYNTA5SWRl +bnRpdHlUb2tlbiIgdHlwZT0idG5zOlg1MDlJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJJc3N1ZWRJZGVudGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENvbnRl +bnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRva2VuRGF0YSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuY3J5cHRpb25B +bGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv +eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Iklzc3VlZElkZW50aXR5VG9rZW4iIHR5cGU9InRuczpJc3N1ZWRJZGVudGl0eVRva2VuIiAv +Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlJzYUVuY3J5cHRlZFNlY3JldCIgdHlwZT0idWE6VmFy +aWFudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRTaWduYXR1cmUiIHR5cGU9InRu +czpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50U29mdHdhcmVDZXJ0aWZpY2F0ZXMiIHR5cGU9InRuczpM +aXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VXNlclRva2VuU2lnbmF0dXJlIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXF1ZXN0IiB0eXBlPSJ0 +bnM6QWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWN0aXZhdGVTZXNzaW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlz +dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3Rp +Y0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWN0aXZhdGVTZXNz +aW9uUmVzcG9uc2UiIHR5cGU9InRuczpBY3RpdmF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNsb3NlU2Vz +c2lvblJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vzc2lvblJl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2Vzc2lvblJlc3BvbnNlIiB0eXBlPSJ0bnM6Q2xvc2VT +ZXNzaW9uUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNhbmNlbFJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhhbmRsZSIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXF1ZXN0IiB0eXBlPSJ0 +bnM6Q2FuY2VsUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FuY2VsUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxDb3VudCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXNwb25zZSIgdHlw +ZT0idG5zOkNhbmNlbFJlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJOb2Rl +QXR0cmlidXRlc01hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFjY2Vzc0xldmVsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IkFycmF5RGltZW5zaW9uc18yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +cm93c2VOYW1lXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5zTm9M +b29wc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhVHlwZV8xNiIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzY3JpcHRpb25fMzIiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BsYXlOYW1lXzY0IiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJFdmVudE5vdGlmaWVyXzEyOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iRXhlY3V0YWJsZV8yNTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ikhpc3Rvcml6aW5nXzUxMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXJz +ZU5hbWVfMTAyNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNBYnN0cmFjdF8y +MDQ4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbF80MDk2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb2RlQ2xhc3NfODE5 +MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUlkXzE2Mzg0IiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTeW1tZXRyaWNfMzI3NjgiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlVzZXJBY2Nlc3NMZXZlbF82NTUzNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iVXNlckV4ZWN1dGFibGVfMTMxMDcyIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJVc2VyV3JpdGVNYXNrXzI2MjE0NCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVmFsdWVSYW5rXzUyNDI4OCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iV3JpdGVNYXNrXzEwNDg1NzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhbHVlXzIwOTcxNTIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFU +eXBlRGVmaW5pdGlvbl80MTk0MzA0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJS +b2xlUGVybWlzc2lvbnNfODM4ODYwOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QWNjZXNzUmVzdHJpY3Rpb25zXzE2Nzc3MjE2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJBbGxfMzM1NTQ0MzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VO +b2RlXzI2NTAxMjIwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RfMjY1 +MDEzNDgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdFR5cGVfMjY1MDMy +NjgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlXzI2NTcxMzgzIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZVR5cGVfMjg2MDA0MzgiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF8yNjYzMjU0OCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8yNjUzNzA2MCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVmlld18yNjUwMTM1NiIgLz4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVBdHRy +aWJ1dGVzTWFzayIgdHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzTWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFt +ZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6 +ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV3JpdGVNYXNrIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQXR0cmlidXRlcyIgdHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RBdHRyaWJ1 +dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAg +ICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0QXR0cmlidXRlcyIgdHlwZT0idG5z +Ok9iamVjdEF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAg +ICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFy +aWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMi +IHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWdu +ZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +ckFjY2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0i +eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +SGlzdG9yaXppbmciIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyIgdHlwZT0idG5zOlZhcmlhYmxlQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTWV0aG9kQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFeGVjdXRhYmxlIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlckV4ZWN1dGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1ldGhvZEF0dHJpYnV0ZXMiIHR5cGU9InRuczpNZXRob2RBdHRyaWJ1 +dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyIgdHlwZT0idG5zOk9iamVjdFR5 +cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZVR5cGVB +dHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJp +YW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIg +dHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlVHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpWYXJp +YWJsZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVu +Y2VUeXBlQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0 +eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3ltbWV0cmljIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52ZXJzZU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRl +eHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVu +Y2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlQXR0cmli +dXRlcyIgdHlwZT0idG5zOlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhVHlwZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6RGF0YVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJWaWV3QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDb250YWluc05vTG9vcHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudE5vdGlmaWVyIiB0eXBlPSJ4czp1bnNpZ25l +ZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv +eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZpZXdBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6Vmlld0F0 +dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZh +bHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJHZW5lcmlj +QXR0cmlidXRlVmFsdWUiIHR5cGU9InRuczpHZW5lcmljQXR0cmlidXRlVmFsdWUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlVmFsdWVzIiB0eXBlPSJ0bnM6TGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAg +PC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiIHR5cGU9InRuczpH +ZW5lcmljQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNJ +dGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYXJlbnRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWROZXdOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +QnJvd3NlTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVDbGFzcyIgdHlwZT0idG5z +Ok5vZGVDbGFzcyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9k +ZUF0dHJpYnV0ZXMiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uIiB0 +eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpBZGROb2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFkZE5vZGVzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNJdGVtIiB0eXBlPSJ0bnM6QWRkTm9kZXNJ +dGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZBZGROb2Rlc0l0ZW0i +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkFkZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRlZE5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzdWx0IiB0eXBlPSJ0 +bnM6QWRkTm9kZXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFk +ZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJBZGROb2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkFkZE5vZGVzUmVzdWx0IiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBZGRO +b2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkxpc3RPZkFkZE5vZGVzUmVzdWx0IiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGROb2Rlc1JlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb0FkZCIgdHlwZT0idG5zOkxp +c3RPZkFkZE5vZGVzSXRlbSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJB +ZGROb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpBZGROb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQWRkTm9kZXNSZXN1bHQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpBZGROb2Rl +c1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRSZWZlcmVuY2VzSXRl +bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU291cmNlTm9k +ZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iVGFyZ2V0U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUNsYXNzIiB0eXBlPSJ0 +bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIHR5 +cGU9InRuczpBZGRSZWZlcmVuY2VzSXRlbSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWRkUmVmZXJlbmNlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc0l0 +ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6TGlzdE9mQWRkUmVmZXJl +bmNlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlZmVyZW5jZXNUb0FkZCIgdHlwZT0idG5zOkxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0 +IiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSIgdHlwZT0idG5zOkFkZFJlZmVyZW5j +ZXNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNJdGVt +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVRhcmdldFJlZmVyZW5jZXMiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVO +b2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRlbGV0ZU5vZGVz +SXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +Tm9kZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEZWxldGVOb2Rl +c0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVOb2Rlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGV0ZU5vZGVzUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6 +TGlzdE9mRGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRlbGV0ZU5vZGVzUmVxdWVzdCIgdHlwZT0idG5zOkRlbGV0ZU5vZGVzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNSZXNwb25zZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 +InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVOb2Rlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJE +ZWxldGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU291cmNlTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQi +IHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZUJpZGlyZWN0aW9uYWwiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkRlbGV0 +ZVJlZmVyZW5jZXNJdGVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEZWxl +dGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRl +bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVS +ZWZlcmVuY2VzSXRlbSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1 +ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6TGlzdE9mRGVsZXRlUmVm +ZXJlbmNlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVz +Q29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3Bv +bnNlIiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBi +YXNlPSJ4czp1bnNpZ25lZEludCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIHR5cGU9InRu +czpBdHRyaWJ1dGVXcml0ZU1hc2siIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dz +ZURpcmVjdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSW52ZXJzZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmFsaWRfMyIgLz4NCiAg +ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkJyb3dzZURpcmVjdGlvbiIgdHlwZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld0Rlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3SWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVz +dGFtcCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQnJvd3NlRGlyZWN0aW9uIiB0eXBlPSJ0bnM6QnJvd3NlRGlyZWN0aW9uIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzTWFzayIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Vs +dE1hc2siIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpCcm93c2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +QnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dzZVJlc3VsdE1hc2siPg0KICAgIDx4czpyZXN0 +cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO +b25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJZF8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc0ZvcndhcmRfMiIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUNsYXNzXzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkJyb3dzZU5hbWVfOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iRGlzcGxheU5hbWVfMTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVE +ZWZpbml0aW9uXzMyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxfNjMiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJbmZvXzMiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmdldEluZm9fNjAiIC8+DQogICAgPC94czpy +ZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93 +c2VSZXN1bHRNYXNrIiB0eXBlPSJ0bnM6QnJvd3NlUmVzdWx0TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNGb3J3YXJkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +TmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc3BsYXlOYW1lIiB0eXBlPSJ1YTpMb2Nh +bGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXhw +YW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJl +bmNlRGVzY3JpcHRpb24iIHR5cGU9InRuczpSZWZlcmVuY2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9u +IiB0eXBlPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZURlc2Ny +aXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9p +bnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QnJvd3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVmZXJlbmNlcyIgdHlwZT0idG5zOkxpc3RPZlJlZmVyZW5jZURlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJlc3VsdCIgdHlwZT0i +dG5zOkJyb3dzZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJv +d3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VSZXN1bHQiIHR5cGU9InRuczpCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVJlc3Vs +dCIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlUmVxdWVzdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0i +dG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVx +dWVzdGVkTWF4UmVmZXJlbmNlc1Blck5vZGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvQnJvd3NlIiB0eXBlPSJ0 +bnM6TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJvd3NlUmVxdWVzdCIgdHlwZT0idG5zOkJyb3dzZVJlcXVlc3QiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUmVzcG9uc2UiIHR5cGU9InRuczpCcm93c2VS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlTmV4dFJlcXVlc3Qi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFk +ZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsZWFzZUNvbnRpbnVhdGlvblBvaW50cyIg +dHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGludWF0aW9uUG9pbnRzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiB0eXBlPSJ0 +bnM6QnJvd3NlTmV4dFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dz +ZU5leHRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkJyb3dzZU5leHRSZXNwb25zZSIgdHlwZT0idG5zOkJyb3dzZU5leHRSZXNwb25zZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVsYXRpdmVQYXRoRWxlbWVudCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ludmVyc2UiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVh +biIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0TmFtZSIg +dHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsYXRpdmVQYXRo +RWxlbWVudCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlbGF0aXZl +UGF0aEVsZW1lbnQiIHR5cGU9InRuczpMaXN0T2ZSZWxhdGl2ZVBhdGhFbGVtZW50IiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWxhdGl2 +ZVBhdGgiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1l +bnRzIiB0eXBlPSJ0bnM6TGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBh +dGgiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVBhdGgiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0aW5nTm9kZSIgdHlwZT0idWE6 +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVsYXRpdmVQYXRoIiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGgiIHR5cGU9InRuczpCcm93c2VQ +YXRoIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoIiB0eXBl +PSJ0bnM6QnJvd3NlUGF0aCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aCIgdHlwZT0idG5zOkxpc3RPZkJy +b3dzZVBhdGgiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkJyb3dzZVBhdGhUYXJnZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbWFp +bmluZ1BhdGhJbmRleCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJCcm93c2VQYXRoVGFyZ2V0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFRhcmdldCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFRhcmdldCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgdHlwZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhUYXJnZXQiIHR5cGU9InRu +czpMaXN0T2ZCcm93c2VQYXRoVGFyZ2V0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VQYXRoUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRz +IiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0aFRhcmdldCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoUmVzdWx0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFJl +c3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFJlc3Vs +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aFJlc3VsdCIgdHlwZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhS +ZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2xhdGVCcm93c2VQ +YXRoc1RvTm9kZUlkc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +UGF0aHMiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgdHlw +ZT0idG5zOlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJZHNSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZC +cm93c2VQYXRoUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2xhdGVC +cm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6VHJhbnNsYXRlQnJvd3NlUGF0 +aHNUb05vZGVJZHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0 +ZXJOb2Rlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlZ2lz +dGVyIiB0eXBlPSJ1YTpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVx +dWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhl +YWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJlZE5vZGVJZHMiIHR5cGU9 +InVhOkxpc3RPZk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVzcG9uc2UiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVucmVnaXN0ZXJOb2Rlc1JlcXVlc3QiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5 +cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1VucmVnaXN0ZXIiIHR5cGU9InVhOkxpc3RP +Zk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbnJlZ2lzdGVy +Tm9kZXNSZXF1ZXN0IiB0eXBlPSJ0bnM6VW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0 +bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +VW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpVbnJlZ2lzdGVyTm9kZXNSZXNwb25z +ZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb3VudGVyIiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1lcmljUmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uVGltZW91dCIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VCaW5hcnlF +bmNvZGluZyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heEJ5dGVTdHJpbmdMZW5ndGgiIHR5cGU9Inhz +OmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QXJyYXlM +ZW5ndGgiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWF4TWVzc2FnZVNpemUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QnVmZmVyU2l6ZSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsTGlmZXRpbWUiIHR5cGU9 +InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlUb2tlbkxpZmV0aW1lIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpFbmRwb2ludENvbmZpZ3VyYXRpb24iIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRDb25maWd1 +cmF0aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnRDb25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2lu +dENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludENvbmZpZ3VyYXRpb24iIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlF1 +ZXJ5RGF0YURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVyeURhdGFEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlF1ZXJ5 +RGF0YURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZRdWVy +eURhdGFEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpRdWVyeURhdGFEZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZRdWVyeURh +dGFEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBh +bmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluY2x1ZGVTdWJUeXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVRvUmV0dXJuIiB0eXBlPSJ0bnM6 +TGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOk5vZGVUeXBlRGVzY3JpcHRp +b24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5vZGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVUeXBl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOb2Rl +VHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRmls +dGVyT3BlcmF0b3IiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbHNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSXNOdWxsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdy +ZWF0ZXJUaGFuXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbF80IiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbk9yRXF1YWxfNSIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTGlrZV82IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJOb3RfNyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQmV0d2Vl +bl84IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbkxpc3RfOSIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5kXzEwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJPcl8xMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdF8xMiIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5WaWV3XzEzIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJPZlR5cGVfMTQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IlJlbGF0ZWRUb18xNSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0 +d2lzZUFuZF8xNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0d2lzZU9yXzE3 +IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRmlsdGVyT3BlcmF0b3IiIHR5cGU9InRuczpGaWx0ZXJPcGVyYXRvciIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlEYXRhU2V0Ij4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +cyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeURhdGFTZXQiIHR5cGU9InRuczpRdWVyeURhdGFTZXQiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlF1ZXJ5RGF0YVNldCI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlEYXRhU2V0IiB0eXBlPSJ0bnM6UXVlcnlE +YXRhU2V0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZRdWVyeURhdGFTZXQiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFT +ZXQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZWROb2RlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVJlZmVy +ZW5jZSIgdHlwZT0idG5zOk5vZGVSZWZlcmVuY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5vZGVSZWZlcmVuY2UiIHR5cGU9InRuczpOb2RlUmVmZXJlbmNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZOb2RlUmVmZXJlbmNlIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVJlZmVyZW5jZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29udGVu +dEZpbHRlckVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkZpbHRlck9wZXJhdG9yIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmRzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGVudEZpbHRlckVsZW1lbnQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0 +ZXJFbGVtZW50IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRl +bnRGaWx0ZXJFbGVtZW50IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNv +bnRlbnRGaWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkVsZW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlciIgdHlwZT0idG5zOkNv +bnRlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRlbnRG +aWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRl +bnRGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVy +IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmlsdGVyT3BlcmFuZCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmQiIHR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbGVtZW50T3BlcmFuZCI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRWxlbWVudE9wZXJhbmQiIHR5cGU9InRuczpFbGVtZW50T3BlcmFuZCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGl0ZXJhbE9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3Bl +cmFuZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hz +OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu +dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGl0ZXJhbE9wZXJh +bmQiIHR5cGU9InRuczpMaXRlcmFsT3BlcmFuZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz +ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlw +ZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkFsaWFzIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ +bmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6QXR0cmlidXRlT3BlcmFuZCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VQYXRoIiB0eXBlPSJ1YTpMaXN0T2ZRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlk +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIHR5cGU9InRuczpTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZT +aW1wbGVBdHRyaWJ1dGVPcGVyYW5kIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6U2ltcGxlQXR0cmli +dXRlT3BlcmFuZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mU2ltcGxlQXR0cmlidXRlT3BlcmFuZCIgdHlwZT0idG5zOkxp +c3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0 +eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJPcGVyYW5kU3RhdHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVy +YW5kRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudFJlc3Vs +dCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRS +ZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29u +dGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZDb250ZW50RmlsdGVyRWxl +bWVudFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iQ29udGVudEZpbHRlclJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRWxlbWVudFJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZDb250 +ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVh +Okxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXJzaW5nUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU3Rh +dHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRGlhZ25vc3RpY0luZm9z +IiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJQYXJzaW5nUmVzdWx0IiB0eXBlPSJ0bnM6UGFyc2luZ1Jlc3VsdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFyc2luZ1Jlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdCIgdHlwZT0i +dG5zOlBhcnNpbmdSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlBhcnNpbmdSZXN1bHQiIHR5cGU9InRuczpMaXN0 +T2ZQYXJzaW5nUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVR5cGVzIiB0eXBl +PSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idG5zOkNvbnRl +bnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNYXhEYXRhU2V0c1RvUmV0dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVmZXJlbmNlc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5Rmly +c3RSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlF1ZXJ5Rmlyc3RSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlF1ZXJ5RGF0YVNldHMiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFTZXQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250 +aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZQYXJzaW5nUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlclJlc3VsdCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0 +ZXJSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlGaXJz +dFJlc3BvbnNlIiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJRdWVyeU5leHRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJR +dWVyeU5leHRSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlOZXh0UmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9u +c2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJRdWVyeURhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiIHR5cGU9InRu +czpRdWVyeU5leHRSZXNwb25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVGltZXN0 +YW1wc1RvUmV0dXJuIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IlNlcnZlcl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5laXRoZXJfMyIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52YWxpZF80IiAvPg0KICAgIDwveHM6cmVzdHJp +Y3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1w +c1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6 +UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOlJlYWRWYWx1ZUlkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVhZFZhbHVlSWQiIHR5cGU9InRuczpSZWFkVmFsdWVJZCIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +UmVhZFZhbHVlSWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIgbmlsbGFibGU9InRydWUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QWdlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIg +dHlwZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlYWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmVxdWVzdCIgdHlwZT0i +dG5zOlJlYWRSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0 +T2ZEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRSZXNwb25zZSIg +dHlwZT0idG5zOlJlYWRSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlz +dG9yeVJlYWRWYWx1ZUlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBv +aW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iSGlzdG9yeVJlYWRWYWx1ZUlkIiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRWYWx1ZUlk +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5UmVhZFZhbHVlSWQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkVmFsdWVJZCIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRWYWx1ZUlkIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVh +ZFJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Rh +dHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikhpc3RvcnlEYXRhIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5 +UmVhZFJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRSZXN1bHQiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRSZXN1bHQiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3Rv +cnlSZWFkRGV0YWlscyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkRGV0YWls +cyIgdHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUmVhZEV2ZW50RGV0YWlscyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5UmVhZERldGFpbHMi +Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTnVt +VmFsdWVzUGVyTm9kZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlw +ZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWx0ZXIiIHR5cGU9InRuczpFdmVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlYWRFdmVudERldGFpbHMiIHR5cGU9InRuczpSZWFkRXZlbnREZXRhaWxz +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmF3TW9kaWZpZWREZXRhaWxzIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc1JlYWRNb2RpZmllZCIgdHlwZT0ieHM6Ym9v +bGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0 +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmV0dXJuQm91bmRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs +ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +UmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZFJhd01vZGlmaWVkRGV0YWlscyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIgdHlwZT0idWE6TGlzdE9m +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFByb2Nl +c3NlZERldGFpbHMiIHR5cGU9InRuczpSZWFkUHJvY2Vzc2VkRGV0YWlscyIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUmVhZEF0VGltZURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VTaW1w +bGVCb3VuZHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBdFRpbWVE +ZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZEF0VGltZURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiIHR5cGU9InRu +czpSZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJIaXN0b3J5RGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVZhbHVlcyIgdHlwZT0idWE6TGlzdE9mRGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlEYXRhIiB0eXBlPSJ0bnM6SGlzdG9yeURhdGEi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmaWNhdGlvblRpbWUiIHR5 +cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVcGRhdGVUeXBlIiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIgdHlw +ZT0idG5zOk1vZGlmaWNhdGlvbkluZm8iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZk1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iIHR5cGU9InRuczpNb2RpZmljYXRpb25JbmZvIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZNb2RpZmljYXRpb25JbmZvIiB0eXBlPSJ0bnM6TGlzdE9mTW9kaWZpY2F0aW9uSW5m +byIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iSGlzdG9yeU1vZGlmaWVkRGF0YSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5RGF0YSI+DQogICAg +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZmljYXRp +b25JbmZvcyIgdHlwZT0idG5zOkxpc3RPZk1vZGlmaWNhdGlvbkluZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4 +dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5TW9kaWZpZWREYXRhIiB0eXBlPSJ0bnM6SGlzdG9y +eU1vZGlmaWVkRGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudHMiIHR5 +cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeUV2ZW50IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZFJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWREZXRhaWxzIiB0eXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpUaW1lc3RhbXBzVG9SZXR1 +cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGVhc2VDb250 +aW51YXRpb25Qb2ludHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik5vZGVzVG9SZWFkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlS +ZWFkUmVxdWVzdCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5UmVhZFJlc3VsdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgdHlwZT0idG5z +Okhpc3RvcnlSZWFkUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IldyaXRl +VmFsdWUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJ +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6RGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlVmFsdWUiIHR5cGU9InRuczpXcml0ZVZhbHVlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZVZhbHVlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZVZhbHVlIiB0eXBlPSJ0bnM6 +V3JpdGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZldyaXRlVmFs +dWUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IldyaXRlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvV3Jp +dGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IldyaXRlUmVxdWVzdCIgdHlwZT0idG5zOldyaXRlUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlUmVzcG9uc2UiIHR5cGU9InRuczpXcml0ZVJlc3Bv +bnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBl +PSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eVVwZGF0ZURldGFpbHMiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCg0KICA8 +eHM6c2ltcGxlVHlwZSAgbmFtZT0iSGlzdG9yeVVwZGF0ZVR5cGUiPg0KICAgIDx4czpyZXN0cmlj +dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNl +cnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZV8yIiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGVfMyIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGVsZXRlXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpz +aW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlVHlwZSIgdHlwZT0i +dG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJm +b3JtVXBkYXRlVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2VydF8xIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJSZXBsYWNlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlVwZGF0ZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmVfNCIgLz4N +CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlBlcmZvcm1VcGRhdGVUeXBlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6 +Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i +dG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVy +Zm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRl +RGF0YURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZVN0cnVjdHVy +ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNl +cnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RP +ZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZVN0cnVj +dHVyZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlU3RydWN0dXJlRGF0YURldGFpbHMiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZUV2ZW50RGV0YWlscyI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgdHlwZT0idG5zOlBl +cmZvcm1VcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRmlsdGVyIiB0eXBlPSJ0bnM6RXZlbnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnREYXRhIiB0eXBl +PSJ0bnM6TGlzdE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVXBkYXRlRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlRXZlbnREZXRh +aWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFp +bHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNEZWxldGVNb2RpZmllZCIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRlUmF3 +TW9kaWZpZWREZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVBdFRp +bWVEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBl +PSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRl +bGV0ZUF0VGltZURldGFpbHMiIHR5cGU9InRuczpEZWxldGVBdFRpbWVEZXRhaWxzIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRJZHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiIHR5cGU9 +InRuczpEZWxldGVFdmVudERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIHR5cGU9InVhOkxpc3RP +ZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVS +ZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5VXBkYXRlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiB0eXBlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVVwZGF0ZVJlc3VsdCIgdHlwZT0i +dG5zOkxpc3RPZkhpc3RvcnlVcGRhdGVSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0 +eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iSGlzdG9yeVVwZGF0ZVJlcXVlc3QiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVVwZGF0ZVJlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkhpc3Rv +cnlVcGRhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0 +aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRh +dGVSZXNwb25zZSIgdHlwZT0idG5zOkhpc3RvcnlVcGRhdGVSZXNwb25zZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9iamVjdElkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRo +b2RJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudHMiIHR5cGU9InVhOkxpc3RPZlZh +cmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FsbE1ldGhvZFJl +cXVlc3QiIHR5cGU9InRuczpDYWxsTWV0aG9kUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6Q2FsbE1l +dGhvZFJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9m +Q2FsbE1ldGhvZFJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklucHV0QXJndW1lbnRS +ZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0 +aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdXRwdXRBcmd1bWVudHMi +IHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgdHlwZT0idG5zOkNhbGxNZXRob2RSZXN1bHQiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIHR5 +cGU9InRuczpDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiB0eXBl +PSJ0bnM6TGlzdE9mQ2FsbE1ldGhvZFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FsbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpS +ZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTWV0aG9kc1RvQ2FsbCIgdHlwZT0idG5zOkxpc3RPZkNhbGxNZXRob2RS +ZXF1ZXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxSZXF1ZXN0 +IiB0eXBlPSJ0bnM6Q2FsbFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNh +bGxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9 +InRuczpMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJDYWxsUmVzcG9uc2UiIHR5cGU9InRuczpDYWxsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBs +ZVR5cGUgIG5hbWU9Ik1vbml0b3JpbmdNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i +eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxpbmdfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIg +dHlwZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJE +YXRhQ2hhbmdlVHJpZ2dlciI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c18wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNWYWx1ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJTdGF0dXNWYWx1ZVRpbWVzdGFtcF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZVRyaWdn +ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdlVHJpZ2dlciIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAg +bmFtZT0iRGVhZGJhbmRUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5n +Ij4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJBYnNvbHV0ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJQZXJjZW50XzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFR5cGUiIHR5cGU9InRuczpEZWFkYmFu +ZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyIiB0eXBlPSJ0bnM6TW9uaXRv +cmluZ0ZpbHRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZUZpbHRl +ciI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyaWdnZXIiIHR5cGU9InRuczpEYXRhQ2hh +bmdlVHJpZ2dlciIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRlYWRiYW5kVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFZhbHVlIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdl +RmlsdGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFdmVudEZpbHRlciI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlbGVjdENsYXVzZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IldoZXJlQ2xhdXNlIiB0eXBlPSJ0bnM6Q29udGVudEZp +bHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmlsdGVyIiB0eXBl +PSJ0bnM6RXZlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFnZ3JlZ2F0 +ZUNvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlVzZVNlcnZlckNhcGFiaWxpdGllc0RlZmF1bHRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmVhdFVuY2VydGFpbkFzQmFk +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQZXJjZW50RGF0YUJhZCIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJjZW50RGF0YUdvb2QiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +U2xvcGVkRXh0cmFwb2xhdGlvbiIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0 +aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIg +dHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91Ymxl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRl +Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIHR5cGU9InRuczpBZ2dy +ZWdhdGVGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0 +ZXJSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl +ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRl +clJlc3VsdCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZWxlY3RDbGF1c2VSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0lu +Zm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV2hlcmVDbGF1c2VSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0 +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiIHR5 +cGU9InRuczpFdmVudEZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWdncmVnYXRlRmlsdGVyUmVzdWx0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZh +bHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1 +bHQiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZFN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHJvY2Vzc2luZ0ludGVydmFsIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXZpc2VkQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZp +Z3VyYXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0 +ZXJSZXN1bHQiIHR5cGU9InRuczpBZ2dyZWdhdGVGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0lu +dGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVTaXplIiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzY2FyZE9sZGVzdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtVG9Nb25p +dG9yIiB0eXBlPSJ0bnM6UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIgdHlwZT0idG5zOk1v +bml0b3JpbmdNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVl +c3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVS +ZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNy +ZWF0ZVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0Nv +ZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0 +ZW1JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNpemUi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiB0 +eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIg +dHlwZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0 +ZW1DcmVhdGVSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0 +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpU +aW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ikl0ZW1zVG9DcmVhdGUiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVx +dWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9m +TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlz +dE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +Q3JlYXRlTW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkNyZWF0ZU1vbml0b3JlZEl0 +ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1N +b2RpZnlSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJNb25pdG9yZWRJdGVtSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6 +TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtTW9k +aWZ5UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVk +SXRlbU1vZGlmeVJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRl +bU1vZGlmeVJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBl +PSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2Rp +ZnlSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0 +YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNp +emUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3Vs +dCIgdHlwZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3Jl +ZEl0ZW1Nb2RpZnlSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVz +dWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRu +czpUaW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3Qi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmeU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlz +dE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOk1vZGlmeU1vbml0b3Jl +ZEl0ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3Jp +bmdNb2RlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25J +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vbml0b3JpbmdNb2RlIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ01vZGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTZXRNb25pdG9yaW5nTW9kZVJlcXVlc3QiIHR5cGU9InRuczpTZXRNb25pdG9yaW5nTW9kZVJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpM +aXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXRNb25pdG9y +aW5nTW9kZVJlc3BvbnNlIiB0eXBlPSJ0bnM6U2V0TW9uaXRvcmluZ01vZGVSZXNwb25zZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2V0VHJpZ2dlcmluZ1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlnZ2VyaW5nSXRl +bUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlua3NUb0FkZCIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlua3NUb1Jl +bW92ZSIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFRyaWdnZXJpbmdSZXNwb25z +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZFJlc3VsdHMiIHR5cGU9InVhOkxp +c3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdu +b3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVtb3ZlUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +bW92ZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiB0 +eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWRzIiB0eXBlPSJ1YTpM +aXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiB0eXBlPSJ0bnM6RGVsZXRlTW9uaXRvcmVkSXRlbXNSZXF1 +ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1Jl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6 +TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25v +c3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTW9u +aXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RlZExpZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxp +dmVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiB0eXBlPSJ4czp1bnNp +Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGluZ0VuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlByaW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6Q3JlYXRl +U3Vic2NyaXB0aW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRl +U3Vic2NyaXB0aW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJz +Y3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRv +dWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZExp +ZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9u +c2UiIHR5cGU9InRuczpDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZFB1Ymxpc2hpbmdJ +bnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkTWF4S2Vl +cEFsaXZlQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBy +aW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2Rp +ZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVz +dCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNv +dW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1 +YnNjcmlwdGlvblJlc3BvbnNlIiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9uc2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aXB0aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0UHVi +bGlzaGluZ01vZGVSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRQdWJs +aXNoaW5nTW9kZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0 +cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2V0UHVibGlzaGluZ01vZGVSZXNwb25zZSIgdHlwZT0idG5zOlNldFB1Ymxpc2hpbmdNb2Rl +UmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3Nh +Z2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcXVlbmNl +TnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHVibGlzaFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTm90aWZpY2F0aW9uTWVzc2FnZSIgdHlwZT0idG5zOk5vdGlmaWNhdGlvbk1lc3NhZ2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9u +RGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlv +biI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1zIiB0eXBlPSJ0bnM6 +TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5 +cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAg +PC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbiIgdHlwZT0idG5zOkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmlj +YXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVu +dEhhbmRsZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgdHlwZT0i +dG5zOk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIHR5cGU9 +InRuczpNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTm90 +aWZpY2F0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXZl +bnROb3RpZmljYXRpb25MaXN0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNl +Ij4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAg +ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRzIiB0 +eXBlPSJ0bnM6TGlzdE9mRXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJFdmVudE5vdGlmaWNhdGlvbkxpc3QiIHR5cGU9InRuczpFdmVudE5vdGlmaWNhdGlv +bkxpc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2ZW50RmllbGRMaXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJFdmVudEZpZWxkcyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkTGlzdCIgdHlwZT0idG5zOkV2ZW50Rmll +bGRMaXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFdmVudEZpZWxkTGlz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWVs +ZExpc3QiIHR5cGU9InRuczpFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXZlbnRGaWVsZExpc3Qi +IHR5cGU9InRuczpMaXN0T2ZFdmVudEZpZWxkTGlzdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50RmllbGRMaXN0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkcyIg +dHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpIaXN0b3J5RXZlbnRGaWVsZExp +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkhpc3RvcnlFdmVudEZpZWxk +TGlzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eUV2ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVs +ZExpc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRp +b25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXR1cyIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGlj +SW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlm +aWNhdGlvbiIgdHlwZT0idG5zOlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgdHlwZT0idG5zOlN1YnNjcmlwdGlvbkFj +a25vd2xlZGdlbWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRuczpTdWJzY3Jp +cHRpb25BY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dCIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaFJl +cXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVl +c3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoUmVxdWVzdCIgdHlwZT0i +dG5zOlB1Ymxpc2hSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNo +UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +c3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TW9yZU5vdGlmaWNhdGlvbnMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3Rp +ZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UHVi +bGlzaFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXF1 +ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV0cmFuc21pdFNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3QiIHR5cGU9InRuczpSZXB1Ymxpc2hSZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXNwb25zZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5 +cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpO +b3RpZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlcHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVwdWJsaXNoUmVzcG9uc2UiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZmVyUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2Rl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdmFpbGFibGVTZXF1 +ZW5jZU51bWJlcnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclJlc3VsdCIgdHlwZT0idG5zOlRyYW5zZmVyUmVzdWx0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUcmFuc2ZlclJlc3VsdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJSZXN1bHQi +IHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHQiIHR5cGU9 +InRuczpMaXN0T2ZUcmFuc2ZlclJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxp +c3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCIgdHlwZT0idG5zOlRy +YW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZlRyYW5zZmVyUmVzdWx0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3Rp +Y0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgdHlwZT0i +dG5zOlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIg +dHlwZT0idG5zOkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz +cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25v +c3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkJ1aWxkSW5mbyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlw +ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHJvZHVjdE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvZnR3YXJlVmVy +c2lvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGROdW1iZXIiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ1 +aWxkRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsZElu +Zm8iIHR5cGU9InRuczpCdWlsZEluZm8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlJl +ZHVuZGFuY3lTdXBwb3J0Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJDb2xkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ildh +cm1fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSG90XzMiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcGFyZW50XzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkhvdEFuZE1pcnJvcmVkXzUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbmN5U3VwcG9y +dCIgdHlwZT0idG5zOlJlZHVuZGFuY3lTdXBwb3J0IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJTZXJ2ZXJTdGF0ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bm5pbmdfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ik5vQ29uZmlndXJhdGlvbl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJT +dXNwZW5kZWRfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2h1dGRvd25fNCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdF81IiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pY2F0aW9uRmF1bHRfNiIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVW5rbm93bl83IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyU3RhdGUiIHR5cGU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVkdW5kYW50U2Vy +dmVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcnZlcklkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTGV2ZWwiIHR5cGU9InhzOnVuc2ln +bmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVy +U3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZHVu +ZGFudFNlcnZlckRhdGFUeXBlIiB0eXBlPSJ0bnM6UmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZHVuZGFudFNlcnZlckRhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbnRT +ZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlZHVuZGFudFNlcnZl +ckRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxMaXN0IiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxM +aXN0RGF0YVR5cGUiIHR5cGU9InRuczpFbmRwb2ludFVybExpc3REYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdERh +dGFUeXBlIiB0eXBlPSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBv +aW50VXJsTGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5 +cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtQYXRocyIg +dHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0 +d29ya0dyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5l +dHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtHcm91cERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZk5ldHdv +cmtHcm91cERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZh +bCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhNb25pdG9yZWRJdGVtQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIg +dHlwZT0idG5zOlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxp +bmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTYW1wbGluZ0ludGVydmFs +RGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclZpZXdDb3VudCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJl +bnRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1 +cml0eVJlamVjdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZXNzaW9uVGltZW91dENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkFib3J0Q291bnQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTdWJzY3JpcHRpb25D +b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlSZWpl +Y3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWplY3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1t +YXJ5RGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2ZXJEaWFnbm9zdGljc1N1bW1hcnlEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmVyU3RhdHVzRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0i +eHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1 +cnJlbnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGRJbmZvIiB0eXBlPSJ0bnM6QnVpbGRJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU2Vjb25kc1RpbGxTaHV0ZG93biIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNodXRkb3duUmVhc29uIiB0eXBlPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNl +cnZlclN0YXR1c0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2VydmVyU3RhdHVzRGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlc3Npb25OYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkFjdHVhbFNlc3Npb25UaW1lb3V0IiB0eXBlPSJ4czpkb3Vi +bGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heFJlc3BvbnNl +TWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDb25uZWN0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRp +bWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudExhc3RD +b250YWN0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50 +TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJlbnRQdWJsaXNoUmVxdWVzdHNJblF1ZXVl +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVW5hdXRob3JpemVkUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZENvdW50IiB0eXBlPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ2FsbENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNyZWF0ZU1vbml0b3JlZEl0ZW1zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNldFRyaWdnZXJpbmdDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vy +dmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlcHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgdHlwZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZGROb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJCcm93c2VDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNs +YXRlQnJvd3NlUGF0aHNUb05vZGVJZHNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeUZpcnN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUXVlcnlOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVucmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlw +ZSIgdHlwZT0idG5zOlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkRpYWdub3N0aWNzRGF0 +YVR5cGUiIHR5cGU9InRuczpTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2Vz +c2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTZXNzaW9uRGlhZ25vc3Rp +Y3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbklkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDbGllbnRVc2VySWRPZlNlc3Npb24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudFVz +ZXJJZEhpc3RvcnkiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uTWVjaGFu +aXNtIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNw +b3J0UHJvdG9jb2wiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1l +c3NhZ2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0 +ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTZXNz +aW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9z +dGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRv +dGFsQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJFcnJvckNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2aWNl +Q291bnRlckRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNSZXN1 +bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0Nv +ZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNSZXN1bHQiIHR5cGU9InRuczpT +dGF0dXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YXR1c1Jl +c3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVz +UmVzdWx0IiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNSZXN1bHQiIHR5 +cGU9InRuczpMaXN0T2ZTdGF0dXNSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5 +cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25J +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eSIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhM +aWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ +dWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRpc2FibGVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3RDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +cHVibGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJUcmFuc2ZlclJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9BbHRDbGll +bnRDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJs +aXNoUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbnNDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm90aWZpY2F0aW9uc0NvdW50IiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50S2VlcEFsaXZlQ291 +bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDdXJyZW50TGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuYWNrbm93bGVkZ2VkTWVz +c2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25p +dG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV4dFNlcXVlbmNlTnVtYmVyIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRXZlbnRRdWV1ZU92ZXJGbG93Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +OlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU3Vi +c2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVWZXJiTWFz +ayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Ik5vZGVBZGRlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJOb2RlRGVsZXRlZF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZl +cmVuY2VBZGRlZF80IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VE +ZWxldGVkXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlQ2hhbmdl +ZF8xNiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siIHR5cGU9InRuczpN +b2RlbENoYW5nZVN0cnVjdHVyZVZlcmJNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWZmZWN0ZWRU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJiIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6 +TW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIg +dHlwZT0idG5zOk1vZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vZGVsQ2hh +bmdlU3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZNb2RlbENoYW5nZVN0cnVjdHVy +ZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQWZmZWN0ZWRUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5z +OlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJl +RGF0YVR5cGUiIHR5cGU9InRuczpTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU2Vt +YW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmFuZ2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvdyIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaWdoIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSYW5nZSIgdHlwZT0idG5zOlJhbmdlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJFVUluZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXRJ +ZCIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBl +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkVVSW5mb3JtYXRpb24iIHR5cGU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVhcl8w +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMb2dfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iTG5fMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9uIiB0 +eXBlPSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IkNvbXBsZXhOdW1iZXJUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSW1hZ2luYXJ5IiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkNvbXBsZXhOdW1iZXJUeXBlIiB0eXBlPSJ0bnM6Q29tcGxleE51bWJlclR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4 +czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkltYWdp +bmFyeSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIHR5cGU9InRuczpEb3VibGVDb21wbGV4TnVtYmVyVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQXhpc0luZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmdpbmVlcmluZ1VuaXRzIiB0eXBlPSJ0bnM6RVVJ +bmZvcm1hdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVVUmFuZ2UiIHR5cGU9InRuczpSYW5nZSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpdGxlIiB0eXBlPSJ1YTpM +b2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXhpc1NjYWxlVHlwZSIgdHlwZT0idG5zOkF4aXNTY2FsZUVudW1lcmF0 +aW9uIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBeGlzU3RlcHMi +IHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBeGlzSW5mb3JtYXRpb24iIHR5cGU9InRuczpBeGlzSW5mb3JtYXRpb24iIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlhWVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iWCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJYVlR5cGUiIHR5cGU9InRuczpYVlR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ3JlYXRlQ2xpZW50TmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2NhdGlvbkNyZWF0aW9u +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0 +aG9kSW5wdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RP +dXRwdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxs +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0dXMiIHR5cGU9InRuczpTdGF0dXNSZXN1bHQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvZ3JhbURpYWdub3N0aWNE +YXRhVHlwZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkNyZWF0ZUNsaWVudE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikludm9jYXRp +b25DcmVhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0VHJhbnNpdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1l +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2Fs +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZFNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM +YXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0 +TWV0aG9kSW5wdXRWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kT3V0 +cHV0VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiB0 +eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZFJldHVyblN0YXR1cyIgdHlwZT0idG5zOlN0YXR1c1Jlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9ncmFtRGlhZ25vc3RpYzJEYXRhVHlw +ZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJBbm5vdGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJNZXNzYWdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvbiIgdHlwZT0idG5zOkFubm90YXRpb24iIC8+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCI+DQogICAgPHhzOnJl +c3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkFic29sdXRlVmFsdWVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2Vu +dE9mVmFsdWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mUmFu +Z2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mRVVSYW5nZV8z +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVbmtub3duXzQiIC8+DQogICAgPC94 +czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJF +eGNlcHRpb25EZXZpYXRpb25Gb3JtYXQiIHR5cGU9InRuczpFeGNlcHRpb25EZXZpYXRpb25Gb3Jt +YXQiIC8+DQoNCjwveHM6c2NoZW1hPg== + + + + NamespaceUri + + i=68 + i=8252 + + + http://opcfoundation.org/UA/2008/02/Types.xsd + + + + Deprecated + + i=68 + i=8252 + + + true + + + + KeyValuePair + + i=69 + i=8252 + + + //xs:element[@name='KeyValuePair'] + + + + 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'] + + + + 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'] + + + + Union + + i=69 + i=8252 + + + //xs:element[@name='Union'] + + + + 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=14533 + 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=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=12756 + 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=15396 + i=76 + + + + Default JSON + + i=891 + i=76 + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Services.wsdl b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Services.wsdl new file mode 100644 index 00000000..036d37bc --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Services.wsdl @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.StatusCodes.csv b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.StatusCodes.csv new file mode 100644 index 00000000..a1c86426 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.StatusCodes.csv @@ -0,0 +1,244 @@ +BadUnexpectedError,0x80010000,"An unexpected error occurred." +BadInternalError,0x80020000,"An internal error occurred as a result of a programming or configuration error." +BadOutOfMemory,0x80030000,"Not enough memory to complete the operation." +BadResourceUnavailable,0x80040000,"An operating system resource is not available." +BadCommunicationError,0x80050000,"A low level communication error occurred." +BadEncodingError,0x80060000,"Encoding halted because of invalid data in the objects being serialized." +BadDecodingError,0x80070000,"Decoding halted because of invalid data in the stream." +BadEncodingLimitsExceeded,0x80080000,"The message encoding/decoding limits imposed by the stack have been exceeded." +BadRequestTooLarge,0x80B80000,"The request message size exceeds limits set by the server." +BadResponseTooLarge,0x80B90000,"The response message size exceeds limits set by the client." +BadUnknownResponse,0x80090000,"An unrecognized response was received from the server." +BadTimeout,0x800A0000,"The operation timed out." +BadServiceUnsupported,0x800B0000,"The server does not support the requested service." +BadShutdown,0x800C0000,"The operation was cancelled because the application is shutting down." +BadServerNotConnected,0x800D0000,"The operation could not complete because the client is not connected to the server." +BadServerHalted,0x800E0000,"The server has stopped and cannot process any requests." +BadNothingToDo,0x800F0000,"There was nothing to do because the client passed a list of operations with no elements." +BadTooManyOperations,0x80100000,"The request could not be processed because it specified too many operations." +BadTooManyMonitoredItems,0x80DB0000,"The request could not be processed because there are too many monitored items in the subscription." +BadDataTypeIdUnknown,0x80110000,"The extension object cannot be (de)serialized because the data type id is not recognized." +BadCertificateInvalid,0x80120000,"The certificate provided as a parameter is not valid." +BadSecurityChecksFailed,0x80130000,"An error occurred verifying security." +BadCertificatePolicyCheckFailed,0x81140000,"The certificate does not meet the requirements of the security policy." +BadCertificateTimeInvalid,0x80140000,"The certificate has expired or is not yet valid." +BadCertificateIssuerTimeInvalid,0x80150000,"An issuer certificate has expired or is not yet valid." +BadCertificateHostNameInvalid,0x80160000,"The HostName used to connect to a server does not match a HostName in the certificate." +BadCertificateUriInvalid,0x80170000,"The URI specified in the ApplicationDescription does not match the URI in the certificate." +BadCertificateUseNotAllowed,0x80180000,"The certificate may not be used for the requested operation." +BadCertificateIssuerUseNotAllowed,0x80190000,"The issuer certificate may not be used for the requested operation." +BadCertificateUntrusted,0x801A0000,"The certificate is not trusted." +BadCertificateRevocationUnknown,0x801B0000,"It was not possible to determine if the certificate has been revoked." +BadCertificateIssuerRevocationUnknown,0x801C0000,"It was not possible to determine if the issuer certificate has been revoked." +BadCertificateRevoked,0x801D0000,"The certificate has been revoked." +BadCertificateIssuerRevoked,0x801E0000,"The issuer certificate has been revoked." +BadCertificateChainIncomplete,0x810D0000,"The certificate chain is incomplete." +BadUserAccessDenied,0x801F0000,"User does not have permission to perform the requested operation." +BadIdentityTokenInvalid,0x80200000,"The user identity token is not valid." +BadIdentityTokenRejected,0x80210000,"The user identity token is valid but the server has rejected it." +BadSecureChannelIdInvalid,0x80220000,"The specified secure channel is no longer valid." +BadInvalidTimestamp,0x80230000,"The timestamp is outside the range allowed by the server." +BadNonceInvalid,0x80240000,"The nonce does appear to be not a random value or it is not the correct length." +BadSessionIdInvalid,0x80250000,"The session id is not valid." +BadSessionClosed,0x80260000,"The session was closed by the client." +BadSessionNotActivated,0x80270000,"The session cannot be used because ActivateSession has not been called." +BadSubscriptionIdInvalid,0x80280000,"The subscription id is not valid." +BadRequestHeaderInvalid,0x802A0000,"The header for the request is missing or invalid." +BadTimestampsToReturnInvalid,0x802B0000,"The timestamps to return parameter is invalid." +BadRequestCancelledByClient,0x802C0000,"The request was cancelled by the client." +BadTooManyArguments,0x80E50000,"Too many arguments were provided." +BadLicenseExpired,0x810E0000,"The server requires a license to operate in general or to perform a service or operation, but existing license is expired." +BadLicenseLimitsExceeded,0x810F0000,"The server has limits on number of allowed operations / objects, based on installed licenses, and these limits where exceeded." +BadLicenseNotAvailable,0x81100000,"The server does not have a license which is required to operate in general or to perform a service or operation." +GoodSubscriptionTransferred,0x002D0000,"The subscription was transferred to another session." +GoodCompletesAsynchronously,0x002E0000,"The processing will complete asynchronously." +GoodOverload,0x002F0000,"Sampling has slowed down due to resource limitations." +GoodClamped,0x00300000,"The value written was accepted but was clamped." +BadNoCommunication,0x80310000,"Communication with the data source is defined, but not established, and there is no last known value available." +BadWaitingForInitialData,0x80320000,"Waiting for the server to obtain values from the underlying data source." +BadNodeIdInvalid,0x80330000,"The syntax of the node id is not valid." +BadNodeIdUnknown,0x80340000,"The node id refers to a node that does not exist in the server address space." +BadAttributeIdInvalid,0x80350000,"The attribute is not supported for the specified Node." +BadIndexRangeInvalid,0x80360000,"The syntax of the index range parameter is invalid." +BadIndexRangeNoData,0x80370000,"No data exists within the range of indexes specified." +BadDataEncodingInvalid,0x80380000,"The data encoding is invalid." +BadDataEncodingUnsupported,0x80390000,"The server does not support the requested data encoding for the node." +BadNotReadable,0x803A0000,"The access level does not allow reading or subscribing to the Node." +BadNotWritable,0x803B0000,"The access level does not allow writing to the Node." +BadOutOfRange,0x803C0000,"The value was out of range." +BadNotSupported,0x803D0000,"The requested operation is not supported." +BadNotFound,0x803E0000,"A requested item was not found or a search operation ended without success." +BadObjectDeleted,0x803F0000,"The object cannot be used because it has been deleted." +BadNotImplemented,0x80400000,"Requested operation is not implemented." +BadMonitoringModeInvalid,0x80410000,"The monitoring mode is invalid." +BadMonitoredItemIdInvalid,0x80420000,"The monitoring item id does not refer to a valid monitored item." +BadMonitoredItemFilterInvalid,0x80430000,"The monitored item filter parameter is not valid." +BadMonitoredItemFilterUnsupported,0x80440000,"The server does not support the requested monitored item filter." +BadFilterNotAllowed,0x80450000,"A monitoring filter cannot be used in combination with the attribute specified." +BadStructureMissing,0x80460000,"A mandatory structured parameter was missing or null." +BadEventFilterInvalid,0x80470000,"The event filter is not valid." +BadContentFilterInvalid,0x80480000,"The content filter is not valid." +BadFilterOperatorInvalid,0x80C10000,"An unrecognized operator was provided in a filter." +BadFilterOperatorUnsupported,0x80C20000,"A valid operator was provided, but the server does not provide support for this filter operator." +BadFilterOperandCountMismatch,0x80C30000,"The number of operands provided for the filter operator was less then expected for the operand provided." +BadFilterOperandInvalid,0x80490000,"The operand used in a content filter is not valid." +BadFilterElementInvalid,0x80C40000,"The referenced element is not a valid element in the content filter." +BadFilterLiteralInvalid,0x80C50000,"The referenced literal is not a valid value." +BadContinuationPointInvalid,0x804A0000,"The continuation point provide is longer valid." +BadNoContinuationPoints,0x804B0000,"The operation could not be processed because all continuation points have been allocated." +BadReferenceTypeIdInvalid,0x804C0000,"The reference type id does not refer to a valid reference type node." +BadBrowseDirectionInvalid,0x804D0000,"The browse direction is not valid." +BadNodeNotInView,0x804E0000,"The node is not part of the view." +BadNumericOverflow,0x81120000,"The number was not accepted because of a numeric overflow." +BadServerUriInvalid,0x804F0000,"The ServerUri is not a valid URI." +BadServerNameMissing,0x80500000,"No ServerName was specified." +BadDiscoveryUrlMissing,0x80510000,"No DiscoveryUrl was specified." +BadSempahoreFileMissing,0x80520000,"The semaphore file specified by the client is not valid." +BadRequestTypeInvalid,0x80530000,"The security token request type is not valid." +BadSecurityModeRejected,0x80540000,"The security mode does not meet the requirements set by the server." +BadSecurityPolicyRejected,0x80550000,"The security policy does not meet the requirements set by the server." +BadTooManySessions,0x80560000,"The server has reached its maximum number of sessions." +BadUserSignatureInvalid,0x80570000,"The user token signature is missing or invalid." +BadApplicationSignatureInvalid,0x80580000,"The signature generated with the client certificate is missing or invalid." +BadNoValidCertificates,0x80590000,"The client did not provide at least one software certificate that is valid and meets the profile requirements for the server." +BadIdentityChangeNotSupported,0x80C60000,"The server does not support changing the user identity assigned to the session." +BadRequestCancelledByRequest,0x805A0000,"The request was cancelled by the client with the Cancel service." +BadParentNodeIdInvalid,0x805B0000,"The parent node id does not to refer to a valid node." +BadReferenceNotAllowed,0x805C0000,"The reference could not be created because it violates constraints imposed by the data model." +BadNodeIdRejected,0x805D0000,"The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client." +BadNodeIdExists,0x805E0000,"The requested node id is already used by another node." +BadNodeClassInvalid,0x805F0000,"The node class is not valid." +BadBrowseNameInvalid,0x80600000,"The browse name is invalid." +BadBrowseNameDuplicated,0x80610000,"The browse name is not unique among nodes that share the same relationship with the parent." +BadNodeAttributesInvalid,0x80620000,"The node attributes are not valid for the node class." +BadTypeDefinitionInvalid,0x80630000,"The type definition node id does not reference an appropriate type node." +BadSourceNodeIdInvalid,0x80640000,"The source node id does not reference a valid node." +BadTargetNodeIdInvalid,0x80650000,"The target node id does not reference a valid node." +BadDuplicateReferenceNotAllowed,0x80660000,"The reference type between the nodes is already defined." +BadInvalidSelfReference,0x80670000,"The server does not allow this type of self reference on this node." +BadReferenceLocalOnly,0x80680000,"The reference type is not valid for a reference to a remote server." +BadNoDeleteRights,0x80690000,"The server will not allow the node to be deleted." +UncertainReferenceNotDeleted,0x40BC0000,"The server was not able to delete all target references." +BadServerIndexInvalid,0x806A0000,"The server index is not valid." +BadViewIdUnknown,0x806B0000,"The view id does not refer to a valid view node." +BadViewTimestampInvalid,0x80C90000,"The view timestamp is not available or not supported." +BadViewParameterMismatch,0x80CA0000,"The view parameters are not consistent with each other." +BadViewVersionInvalid,0x80CB0000,"The view version is not available or not supported." +UncertainNotAllNodesAvailable,0x40C00000,"The list of references may not be complete because the underlying system is not available." +GoodResultsMayBeIncomplete,0x00BA0000,"The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete." +BadNotTypeDefinition,0x80C80000,"The provided Nodeid was not a type definition nodeid." +UncertainReferenceOutOfServer,0x406C0000,"One of the references to follow in the relative path references to a node in the address space in another server." +BadTooManyMatches,0x806D0000,"The requested operation has too many matches to return." +BadQueryTooComplex,0x806E0000,"The requested operation requires too many resources in the server." +BadNoMatch,0x806F0000,"The requested operation has no match to return." +BadMaxAgeInvalid,0x80700000,"The max age parameter is invalid." +BadSecurityModeInsufficient,0x80E60000,"The operation is not permitted over the current secure channel." +BadHistoryOperationInvalid,0x80710000,"The history details parameter is not valid." +BadHistoryOperationUnsupported,0x80720000,"The server does not support the requested operation." +BadInvalidTimestampArgument,0x80BD0000,"The defined timestamp to return was invalid." +BadWriteNotSupported,0x80730000,"The server does not support writing the combination of value, status and timestamps provided." +BadTypeMismatch,0x80740000,"The value supplied for the attribute is not of the same type as the attribute's value." +BadMethodInvalid,0x80750000,"The method id does not refer to a method for the specified object." +BadArgumentsMissing,0x80760000,"The client did not specify all of the input arguments for the method." +BadNotExecutable,0x81110000,"The executable attribute does not allow the execution of the method." +BadTooManySubscriptions,0x80770000,"The server has reached its maximum number of subscriptions." +BadTooManyPublishRequests,0x80780000,"The server has reached the maximum number of queued publish requests." +BadNoSubscription,0x80790000,"There is no subscription available for this session." +BadSequenceNumberUnknown,0x807A0000,"The sequence number is unknown to the server." +BadMessageNotAvailable,0x807B0000,"The requested notification message is no longer available." +BadInsufficientClientProfile,0x807C0000,"The client of the current session does not support one or more Profiles that are necessary for the subscription." +BadStateNotActive,0x80BF0000,"The sub-state machine is not currently active." +BadAlreadyExists,0x81150000,"An equivalent rule already exists." +BadTcpServerTooBusy,0x807D0000,"The server cannot process the request because it is too busy." +BadTcpMessageTypeInvalid,0x807E0000,"The type of the message specified in the header invalid." +BadTcpSecureChannelUnknown,0x807F0000,"The SecureChannelId and/or TokenId are not currently in use." +BadTcpMessageTooLarge,0x80800000,"The size of the message chunk specified in the header is too large." +BadTcpNotEnoughResources,0x80810000,"There are not enough resources to process the request." +BadTcpInternalError,0x80820000,"An internal error occurred." +BadTcpEndpointUrlInvalid,0x80830000,"The server does not recognize the QueryString specified." +BadRequestInterrupted,0x80840000,"The request could not be sent because of a network interruption." +BadRequestTimeout,0x80850000,"Timeout occurred while processing the request." +BadSecureChannelClosed,0x80860000,"The secure channel has been closed." +BadSecureChannelTokenUnknown,0x80870000,"The token has expired or is not recognized." +BadSequenceNumberInvalid,0x80880000,"The sequence number is not valid." +BadProtocolVersionUnsupported,0x80BE0000,"The applications do not have compatible protocol versions." +BadConfigurationError,0x80890000,"There is a problem with the configuration that affects the usefulness of the value." +BadNotConnected,0x808A0000,"The variable should receive its value from another variable, but has never been configured to do so." +BadDeviceFailure,0x808B0000,"There has been a failure in the device/data source that generates the value that has affected the value." +BadSensorFailure,0x808C0000,"There has been a failure in the sensor from which the value is derived by the device/data source." +BadOutOfService,0x808D0000,"The source of the data is not operational." +BadDeadbandFilterInvalid,0x808E0000,"The deadband filter is not valid." +UncertainNoCommunicationLastUsableValue,0x408F0000,"Communication to the data source has failed. The variable value is the last value that had a good quality." +UncertainLastUsableValue,0x40900000,"Whatever was updating this value has stopped doing so." +UncertainSubstituteValue,0x40910000,"The value is an operational value that was manually overwritten." +UncertainInitialValue,0x40920000,"The value is an initial value for a variable that normally receives its value from another variable." +UncertainSensorNotAccurate,0x40930000,"The value is at one of the sensor limits." +UncertainEngineeringUnitsExceeded,0x40940000,"The value is outside of the range of values defined for this parameter." +UncertainSubNormal,0x40950000,"The value is derived from multiple sources and has less than the required number of Good sources." +GoodLocalOverride,0x00960000,"The value has been overridden." +BadRefreshInProgress,0x80970000,"This Condition refresh failed, a Condition refresh operation is already in progress." +BadConditionAlreadyDisabled,0x80980000,"This condition has already been disabled." +BadConditionAlreadyEnabled,0x80CC0000,"This condition has already been enabled." +BadConditionDisabled,0x80990000,"Property not available, this condition is disabled." +BadEventIdUnknown,0x809A0000,"The specified event id is not recognized." +BadEventNotAcknowledgeable,0x80BB0000,"The event cannot be acknowledged." +BadDialogNotActive,0x80CD0000,"The dialog condition is not active." +BadDialogResponseInvalid,0x80CE0000,"The response is not valid for the dialog." +BadConditionBranchAlreadyAcked,0x80CF0000,"The condition branch has already been acknowledged." +BadConditionBranchAlreadyConfirmed,0x80D00000,"The condition branch has already been confirmed." +BadConditionAlreadyShelved,0x80D10000,"The condition has already been shelved." +BadConditionNotShelved,0x80D20000,"The condition is not currently shelved." +BadShelvingTimeOutOfRange,0x80D30000,"The shelving time not within an acceptable range." +BadNoData,0x809B0000,"No data exists for the requested time range or event filter." +BadBoundNotFound,0x80D70000,"No data found to provide upper or lower bound value." +BadBoundNotSupported,0x80D80000,"The server cannot retrieve a bound for the variable." +BadDataLost,0x809D0000,"Data is missing due to collection started/stopped/lost." +BadDataUnavailable,0x809E0000,"Expected data is unavailable for the requested time range due to an un-mounted volume, an off-line archive or tape, or similar reason for temporary unavailability." +BadEntryExists,0x809F0000,"The data or event was not successfully inserted because a matching entry exists." +BadNoEntryExists,0x80A00000,"The data or event was not successfully updated because no matching entry exists." +BadTimestampNotSupported,0x80A10000,"The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)." +GoodEntryInserted,0x00A20000,"The data or event was successfully inserted into the historical database." +GoodEntryReplaced,0x00A30000,"The data or event field was successfully replaced in the historical database." +UncertainDataSubNormal,0x40A40000,"The value is derived from multiple values and has less than the required number of Good values." +GoodNoData,0x00A50000,"No data exists for the requested time range or event filter." +GoodMoreData,0x00A60000,"The data or event field was successfully replaced in the historical database." +BadAggregateListMismatch,0x80D40000,"The requested number of Aggregates does not match the requested number of NodeIds." +BadAggregateNotSupported,0x80D50000,"The requested Aggregate is not support by the server." +BadAggregateInvalidInputs,0x80D60000,"The aggregate value could not be derived due to invalid data inputs." +BadAggregateConfigurationRejected,0x80DA0000,"The aggregate configuration is not valid for specified node." +GoodDataIgnored,0x00D90000,"The request specifies fields which are not valid for the EventType or cannot be saved by the historian." +BadRequestNotAllowed,0x80E40000,"The request was rejected by the server because it did not meet the criteria set by the server." +BadRequestNotComplete,0x81130000,"The request has not been processed by the server yet." +GoodEdited,0x00DC0000,"The value does not come from the real source and has been edited by the server." +GoodPostActionFailed,0x00DD0000,"There was an error in execution of these post-actions." +UncertainDominantValueChanged,0x40DE0000,"The related EngineeringUnit has been changed but the Variable Value is still provided based on the previous unit." +GoodDependentValueChanged,0x00E00000,"A dependent value has been changed but the change has not been applied to the device." +BadDominantValueChanged,0x80E10000,"The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad." +UncertainDependentValueChanged,0x40E20000,"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain." +BadDependentValueChanged,0x80E30000,"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad." +GoodEdited_DependentValueChanged,0x01160000,"It is delivered with a dominant Variable value when a dependent Variable has changed but the change has not been applied." +GoodEdited_DominantValueChanged,0x01170000,"It is delivered with a dependent Variable value when a dominant Variable has changed but the change has not been applied." +GoodEdited_DominantValueChanged_DependentValueChanged,0x01180000,"It is delivered with a dependent Variable value when a dominant or dependent Variable has changed but change has not been applied." +BadEdited_OutOfRange,0x81190000,"It is delivered with a Variable value when Variable has changed but the value is not legal." +BadInitialValue_OutOfRange,0x811A0000,"It is delivered with a Variable value when a source Variable has changed but the value is not legal." +BadOutOfRange_DominantValueChanged,0x811B0000,"It is delivered with a dependent Variable value when a dominant Variable has changed and the value is not legal." +BadEdited_OutOfRange_DominantValueChanged,0x811C0000,"It is delivered with a dependent Variable value when a dominant Variable has changed, the value is not legal and the change has not been applied." +BadOutOfRange_DominantValueChanged_DependentValueChanged,0x811D0000,"It is delivered with a dependent Variable value when a dominant or dependent Variable has changed and the value is not legal." +BadEdited_OutOfRange_DominantValueChanged_DependentValueChanged,0x811E0000,"It is delivered with a dependent Variable value when a dominant or dependent Variable has changed, the value is not legal and the change has not been applied." +GoodCommunicationEvent,0x00A70000,"The communication layer has raised an event." +GoodShutdownEvent,0x00A80000,"The system is shutting down." +GoodCallAgain,0x00A90000,"The operation is not finished and needs to be called again." +GoodNonCriticalTimeout,0x00AA0000,"A non-critical timeout occurred." +BadInvalidArgument,0x80AB0000,"One or more arguments are invalid." +BadConnectionRejected,0x80AC0000,"Could not establish a network connection to remote server." +BadDisconnect,0x80AD0000,"The server has disconnected from the client." +BadConnectionClosed,0x80AE0000,"The network connection has been closed." +BadInvalidState,0x80AF0000,"The operation cannot be completed because the object is closed, uninitialized or in some other invalid state." +BadEndOfStream,0x80B00000,"Cannot move beyond end of the stream." +BadNoDataAvailable,0x80B10000,"No data is currently available for reading from a non-blocking stream." +BadWaitingForResponse,0x80B20000,"The asynchronous operation is waiting for a response." +BadOperationAbandoned,0x80B30000,"The asynchronous operation was abandoned by the caller." +BadExpectedStreamToBlock,0x80B40000,"The stream did not return all data requested (possibly because it is a non-blocking stream)." +BadWouldBlock,0x80B50000,"Non blocking behaviour is required and the operation would block." +BadSyntaxError,0x80B60000,"A value had an invalid syntax." +BadMaxConnectionsReached,0x80B70000,"The operation could not be finished because all available connections are in use." \ No newline at end of file diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Types.bsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Types.bsd new file mode 100644 index 00000000..91c2e9f7 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Types.bsd @@ -0,0 +1,3052 @@ + + + + + + + + + An XML element encoded as a UTF-8 string. + + + + + + The possible encodings for a NodeId value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An identifier for a node in a UA server address space. + + + + + + + + + + + + An identifier for a node in a UA server address space qualified with a complete namespace string. + + + + + + + + + + + + + + + A 32-bit status code value. + + + + A recursive structure containing diagnostic information associated with a status code. + + + + + + + + + + + + + + + + + + + A string qualified with a namespace index. + + + + + + A string qualified with a namespace index. + + + + + + + + + A value with an associated timestamp, and quality. + + + + + + + + + + + + + + + + + A serialized object prefixed with its data type identifier. + + + + + + + + + + + A union of several types. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Types.xsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Types.xsd new file mode 100644 index 00000000..51233525 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/Opc.Ua.Types.xsd @@ -0,0 +1,5108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplication.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplication.cs new file mode 100644 index 00000000..6d732ff8 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplication.cs @@ -0,0 +1,569 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// 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 Opc.Ua.Security +{ + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="SecuredApplication", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd")] + public partial class SecuredApplication : object + { + private string ApplicationNameField; + + private string ApplicationUriField; + + private Opc.Ua.Security.ApplicationType ApplicationTypeField; + + private string ProductNameField; + + private string ConfigurationModeField; + + private System.DateTime LastExportTimeField; + + private string ConfigurationFileField; + + private string ExecutableFileField; + + private Opc.Ua.Security.CertificateIdentifier ApplicationCertificateField; + + private Opc.Ua.Security.CertificateStoreIdentifier TrustedCertificateStoreField; + + private Opc.Ua.Security.CertificateList TrustedCertificatesField; + + private Opc.Ua.Security.CertificateStoreIdentifier IssuerCertificateStoreField; + + private Opc.Ua.Security.CertificateList IssuerCertificatesField; + + private Opc.Ua.Security.CertificateStoreIdentifier RejectedCertificatesStoreField; + + private Opc.Ua.Security.ListOfBaseAddresses BaseAddressesField; + + private Opc.Ua.Security.ListOfSecurityProfiles SecurityProfilesField; + + private Opc.Ua.Security.ListOfExtensions ExtensionsField; + + [System.Runtime.Serialization.DataMemberAttribute()] + public string ApplicationName + { + get + { + return this.ApplicationNameField; + } + set + { + this.ApplicationNameField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute()] + public string ApplicationUri + { + get + { + return this.ApplicationUriField; + } + set + { + this.ApplicationUriField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(Order=2)] + public Opc.Ua.Security.ApplicationType ApplicationType + { + get + { + return this.ApplicationTypeField; + } + set + { + this.ApplicationTypeField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)] + public string ProductName + { + get + { + return this.ProductNameField; + } + set + { + this.ProductNameField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)] + public string ConfigurationMode + { + get + { + return this.ConfigurationModeField; + } + set + { + this.ConfigurationModeField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(Order=5)] + public System.DateTime LastExportTime + { + get + { + return this.LastExportTimeField; + } + set + { + this.LastExportTimeField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)] + public string ConfigurationFile + { + get + { + return this.ConfigurationFileField; + } + set + { + this.ConfigurationFileField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)] + public string ExecutableFile + { + get + { + return this.ExecutableFileField; + } + set + { + this.ExecutableFileField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)] + public Opc.Ua.Security.CertificateIdentifier ApplicationCertificate + { + get + { + return this.ApplicationCertificateField; + } + set + { + this.ApplicationCertificateField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)] + public Opc.Ua.Security.CertificateStoreIdentifier TrustedCertificateStore + { + get + { + return this.TrustedCertificateStoreField; + } + set + { + this.TrustedCertificateStoreField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)] + public Opc.Ua.Security.CertificateList TrustedCertificates + { + get + { + return this.TrustedCertificatesField; + } + set + { + this.TrustedCertificatesField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)] + public Opc.Ua.Security.CertificateStoreIdentifier IssuerCertificateStore + { + get + { + return this.IssuerCertificateStoreField; + } + set + { + this.IssuerCertificateStoreField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=12)] + public Opc.Ua.Security.CertificateList IssuerCertificates + { + get + { + return this.IssuerCertificatesField; + } + set + { + this.IssuerCertificatesField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=13)] + public Opc.Ua.Security.CertificateStoreIdentifier RejectedCertificatesStore + { + get + { + return this.RejectedCertificatesStoreField; + } + set + { + this.RejectedCertificatesStoreField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=14)] + public Opc.Ua.Security.ListOfBaseAddresses BaseAddresses + { + get + { + return this.BaseAddressesField; + } + set + { + this.BaseAddressesField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=15)] + public Opc.Ua.Security.ListOfSecurityProfiles SecurityProfiles + { + get + { + return this.SecurityProfilesField; + } + set + { + this.SecurityProfilesField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=16)] + public Opc.Ua.Security.ListOfExtensions Extensions + { + get + { + return this.ExtensionsField; + } + set + { + this.ExtensionsField = value; + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="CertificateIdentifier", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd")] + public partial class CertificateIdentifier : object + { + private string StoreTypeField; + + private string StorePathField; + + private string SubjectNameField; + + private string ThumbprintField; + + private byte[] RawDataField; + + private int ValidationOptionsField; + + private byte[] OfflineRevocationListField; + + private string OnlineRevocationListField; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] + public string StoreType + { + get + { + return this.StoreTypeField; + } + set + { + this.StoreTypeField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=1)] + public string StorePath + { + get + { + return this.StorePathField; + } + set + { + this.StorePathField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)] + public string SubjectName + { + get + { + return this.SubjectNameField; + } + set + { + this.SubjectNameField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)] + public string Thumbprint + { + get + { + return this.ThumbprintField; + } + set + { + this.ThumbprintField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)] + public byte[] RawData + { + get + { + return this.RawDataField; + } + set + { + this.RawDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(Order=5)] + public int ValidationOptions + { + get + { + return this.ValidationOptionsField; + } + set + { + this.ValidationOptionsField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)] + public byte[] OfflineRevocationList + { + get + { + return this.OfflineRevocationListField; + } + set + { + this.OfflineRevocationListField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)] + public string OnlineRevocationList + { + get + { + return this.OnlineRevocationListField; + } + set + { + this.OnlineRevocationListField = value; + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="CertificateStoreIdentifier", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd")] + public partial class CertificateStoreIdentifier : object + { + private string StoreTypeField; + + private string StorePathField; + + private int ValidationOptionsField; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] + public string StoreType + { + get + { + return this.StoreTypeField; + } + set + { + this.StoreTypeField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=1)] + public string StorePath + { + get + { + return this.StorePathField; + } + set + { + this.StorePathField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(Order=2)] + public int ValidationOptions + { + get + { + return this.ValidationOptionsField; + } + set + { + this.ValidationOptionsField = value; + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="CertificateList", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd")] + public partial class CertificateList : object + { + private Opc.Ua.Security.ListOfCertificateIdentifier CertificatesField; + + private int ValidationOptionsField; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] + public Opc.Ua.Security.ListOfCertificateIdentifier Certificates + { + get + { + return this.CertificatesField; + } + set + { + this.CertificatesField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute()] + public int ValidationOptions + { + get + { + return this.ValidationOptionsField; + } + set + { + this.ValidationOptionsField = value; + } + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="ApplicationType", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd")] + public enum ApplicationType : int + { + + [System.Runtime.Serialization.EnumMemberAttribute()] + Server_0 = 0, + + [System.Runtime.Serialization.EnumMemberAttribute()] + Client_1 = 1, + + [System.Runtime.Serialization.EnumMemberAttribute()] + ClientAndServer_2 = 2, + + [System.Runtime.Serialization.EnumMemberAttribute()] + DiscoveryServer_3 = 3, + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.CollectionDataContractAttribute(Name="ListOfBaseAddresses", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd", ItemName="BaseAddress")] + public class ListOfBaseAddresses : System.Collections.Generic.List + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.CollectionDataContractAttribute(Name="ListOfSecurityProfiles", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd", ItemName="SecurityProfile")] + public class ListOfSecurityProfiles : System.Collections.Generic.List + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.CollectionDataContractAttribute(Name="ListOfExtensions", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd", ItemName="Extension")] + public class ListOfExtensions : System.Collections.Generic.List + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.CollectionDataContractAttribute(Name="ListOfCertificateIdentifier", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd", ItemName="CertificateIdentifier")] + public class ListOfCertificateIdentifier : System.Collections.Generic.List + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="SecurityProfile", Namespace="http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd")] + public partial class SecurityProfile : object + { + private string ProfileUriField; + + private bool EnabledField; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] + public string ProfileUri + { + get + { + return this.ProfileUriField; + } + set + { + this.ProfileUriField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(Order=1)] + public bool Enabled + { + get + { + return this.EnabledField; + } + set + { + this.EnabledField = value; + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplication.xsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplication.xsd new file mode 100644 index 00000000..2f8007b3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplication.xsd @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplicationHelpers.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplicationHelpers.cs new file mode 100644 index 00000000..ffb4427c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/SecuredApplicationHelpers.cs @@ -0,0 +1,468 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua.Security +{ + /// + /// Stores the security settings for an application. + /// + public partial class SecuredApplication + { + /// + /// The name of the application. + /// + [Obsolete("Replaced by ApplicationName")] + public string Name + { + get { return this.ApplicationName; } + set { this.ApplicationName = value; } + } + + /// + /// The uri of the application. + /// + [Obsolete("Replaced by ApplicationUri")] + public string Uri + { + get { return this.ApplicationUri; } + set { this.ApplicationUri = value; } + } + + /// + /// A store of certificates trusted by the application. + /// + [Obsolete("Replaced by TrustedCertificateStore")] + public CertificateStoreIdentifier TrustedPeerStore + { + get { return this.TrustedCertificateStore; } + set { this.TrustedCertificateStore = value; } + } + + /// + /// A list of certificates trusted by the application. + /// + [Obsolete("Replaced by TrustedCertificates")] + public CertificateList TrustedPeerCertificates + { + get { return this.TrustedCertificates; } + set { this.TrustedCertificates = value; } + } + + /// + /// A store of certificate issuers used by the application. + /// + [Obsolete("Replaced by TrustedIssuerStore")] + public CertificateStoreIdentifier TrustedIssuerStore + { + get { return this.IssuerCertificateStore; } + set { this.IssuerCertificateStore = value; } + } + + /// + /// A list of certificate issuers used by the application. + /// + [Obsolete("Replaced by IssuerCertificates")] + public CertificateList TrustedIssuerCertificates + { + get { return this.IssuerCertificates; } + set { this.IssuerCertificates = value; } + } + + /// + /// Casts a ApplicationType value. + /// + public static Opc.Ua.ApplicationType FromApplicationType(Opc.Ua.Security.ApplicationType input) + { + return (Opc.Ua.ApplicationType)(int)input; + } + + /// + /// Casts a ApplicationType value. + /// + public static Opc.Ua.Security.ApplicationType ToApplicationType(Opc.Ua.ApplicationType input) + { + return (Opc.Ua.Security.ApplicationType)(int)input; + } + + /// + /// Creates a CertificateIdentifier object. + /// + public static CertificateIdentifier ToCertificateIdentifier(Opc.Ua.CertificateIdentifier input) + { + if (input != null && !String.IsNullOrEmpty(input.StoreType) && !String.IsNullOrEmpty(input.StorePath)) + { + CertificateIdentifier output = new CertificateIdentifier(); + + output.StoreType = input.StoreType; + output.StorePath = input.StorePath; + output.SubjectName = input.SubjectName; + output.Thumbprint = input.Thumbprint; + output.ValidationOptions = (int)input.ValidationOptions; + output.OfflineRevocationList = null; + output.OnlineRevocationList = null; + + return output; + } + + return null; + } + + /// + /// Creates a CertificateIdentifier object. + /// + public static Opc.Ua.CertificateIdentifier FromCertificateIdentifier(CertificateIdentifier input) + { + Opc.Ua.CertificateIdentifier output = new Opc.Ua.CertificateIdentifier(); + + if (input != null) + { + output.StoreType = input.StoreType; + output.StorePath = input.StorePath; + output.SubjectName = input.SubjectName; + output.Thumbprint = input.Thumbprint; + output.ValidationOptions = (Opc.Ua.CertificateValidationOptions)input.ValidationOptions; + } + + return output; + } + + /// + /// Creates a CertificateStoreIdentifier object. + /// + public static CertificateStoreIdentifier ToCertificateStoreIdentifier(Opc.Ua.CertificateStoreIdentifier input) + { + if (input != null && !String.IsNullOrEmpty(input.StoreType) && !String.IsNullOrEmpty(input.StorePath)) + { + CertificateStoreIdentifier output = new CertificateStoreIdentifier(); + + output.StoreType = input.StoreType; + output.StorePath = input.StorePath; + output.ValidationOptions = (int)input.ValidationOptions; + + return output; + } + + return null; + } + + /// + /// Creates a CertificateTrustList object. + /// + public static Opc.Ua.CertificateTrustList FromCertificateStoreIdentifierToTrustList(CertificateStoreIdentifier input) + { + Opc.Ua.CertificateTrustList output = new Opc.Ua.CertificateTrustList(); + + if (input != null) + { + output.StoreType = input.StoreType; + output.StorePath = input.StorePath; + output.ValidationOptions = (Opc.Ua.CertificateValidationOptions)input.ValidationOptions; + } + + return output; + } + + /// + /// Creates a CertificateStoreIdentifier object. + /// + public static Opc.Ua.CertificateStoreIdentifier FromCertificateStoreIdentifier(CertificateStoreIdentifier input) + { + Opc.Ua.CertificateStoreIdentifier output = new Opc.Ua.CertificateStoreIdentifier(); + + if (input != null) + { + output.StoreType = input.StoreType; + output.StorePath = input.StorePath; + output.ValidationOptions = (Opc.Ua.CertificateValidationOptions)input.ValidationOptions; + } + + return output; + } + + /// + /// Creates a CertificateTrustList object. + /// + public static Opc.Ua.CertificateTrustList ToCertificateTrustList(CertificateStoreIdentifier input) + { + Opc.Ua.CertificateTrustList output = new Opc.Ua.CertificateTrustList(); + + if (input != null) + { + output.StoreType = input.StoreType; + output.StorePath = input.StorePath; + output.ValidationOptions = (Opc.Ua.CertificateValidationOptions)input.ValidationOptions; + } + + return output; + } + + /// + /// Creates a CertificateList object. + /// + public static CertificateList ToCertificateList(Opc.Ua.CertificateIdentifierCollection input) + { + CertificateList output = new CertificateList(); + + if (input != null) + { + output.ValidationOptions = (int)0; + output.Certificates = new ListOfCertificateIdentifier(); + + for (int ii = 0; ii < input.Count; ii++) + { + output.Certificates.Add(ToCertificateIdentifier(input[ii])); + } + } + + return output; + } + + /// + /// Creates a CertificateIdentifierCollection object. + /// + public static Opc.Ua.CertificateIdentifierCollection FromCertificateList(CertificateList input) + { + Opc.Ua.CertificateIdentifierCollection output = new Opc.Ua.CertificateIdentifierCollection(); + + if (input != null && input.Certificates != null) + { + for (int ii = 0; ii < input.Certificates.Count; ii++) + { + output.Add(FromCertificateIdentifier(input.Certificates[ii])); + } + } + + return output; + } + + /// + /// Creates a ListOfBaseAddresses object. + /// + public static ListOfBaseAddresses ToListOfBaseAddresses(ServerBaseConfiguration configuration) + { + ListOfBaseAddresses addresses = new ListOfBaseAddresses(); + + if (configuration != null) + { + if (configuration.BaseAddresses != null) + { + for (int ii = 0; ii < configuration.BaseAddresses.Count; ii++) + { + addresses.Add(configuration.BaseAddresses[ii]); + } + } + + if (configuration.AlternateBaseAddresses != null) + { + for (int ii = 0; ii < configuration.AlternateBaseAddresses.Count; ii++) + { + addresses.Add(configuration.AlternateBaseAddresses[ii]); + } + } + } + + return addresses; + } + + /// + /// Creates a ListOfBaseAddresses object. + /// + public static void FromListOfBaseAddresses(ServerBaseConfiguration configuration, ListOfBaseAddresses addresses) + { + Dictionary map = new Dictionary(); + + if (addresses != null && configuration != null) + { + configuration.BaseAddresses = new StringCollection(); + configuration.AlternateBaseAddresses = null; + + for (int ii = 0; ii < addresses.Count; ii++) + { + Uri url = Utils.ParseUri(addresses[ii]); + + if (url != null) + { + if (map.ContainsKey(url.Scheme)) + { + if (configuration.AlternateBaseAddresses == null) + { + configuration.AlternateBaseAddresses = new StringCollection(); + } + + configuration.AlternateBaseAddresses.Add(url.ToString()); + } + else + { + configuration.BaseAddresses.Add(url.ToString()); + map.Add(url.Scheme, string.Empty); + } + } + } + } + } + + /// + /// Creates a ListOfSecurityProfiles object. + /// + public static ListOfSecurityProfiles ToListOfSecurityProfiles(ServerSecurityPolicyCollection policies) + { + ListOfSecurityProfiles profiles = new ListOfSecurityProfiles(); + profiles.Add(CreateProfile(SecurityPolicies.None)); + profiles.Add(CreateProfile(SecurityPolicies.Basic128Rsa15)); + profiles.Add(CreateProfile(SecurityPolicies.Basic256)); + profiles.Add(CreateProfile(SecurityPolicies.Basic256Sha256)); + profiles.Add(CreateProfile(SecurityPolicies.Aes128_Sha256_RsaOaep)); + profiles.Add(CreateProfile(SecurityPolicies.Aes256_Sha256_RsaPss)); + + if (policies != null) + { + for (int ii = 0; ii < policies.Count; ii++) + { + for (int jj = 0; jj < profiles.Count; jj++) + { + if (policies[ii].SecurityPolicyUri == profiles[jj].ProfileUri) + { + profiles[jj].Enabled = true; + } + } + } + } + + return profiles; + } + + /// + /// Creates a ServerSecurityPolicyCollection object. + /// + public static ServerSecurityPolicyCollection FromListOfSecurityProfiles(ListOfSecurityProfiles profiles) + { + ServerSecurityPolicyCollection policies = new ServerSecurityPolicyCollection(); + + if (profiles != null) + { + for (int ii = 0; ii < profiles.Count; ii++) + { + if (profiles[ii].Enabled) + { + policies.Add(CreatePolicy(profiles[ii].ProfileUri)); + } + } + } + + if (policies.Count == 0) + { + policies.Add(CreatePolicy(SecurityPolicies.None)); + } + + return policies; + } + + /// + /// Creates a new policy object. + /// Always uses sign and encrypt for all security policies except none + /// + private static ServerSecurityPolicy CreatePolicy(string profileUri) + { + ServerSecurityPolicy policy = new ServerSecurityPolicy(); + policy.SecurityPolicyUri = profileUri; + + if (profileUri != null) + { + switch (profileUri) + { + case SecurityPolicies.None: + { + policy.SecurityMode = MessageSecurityMode.None; + break; + } + + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + policy.SecurityMode = MessageSecurityMode.SignAndEncrypt; + break; + } + + } + } + + return policy; + } + + /// + /// Creates a new policy object. + /// + private static Opc.Ua.Security.SecurityProfile CreateProfile(string profileUri) + { + Opc.Ua.Security.SecurityProfile policy = new SecurityProfile(); + policy.ProfileUri = profileUri; + policy.Enabled = false; + return policy; + } + } + + /// + /// An identifier for a certificate. + /// + public partial class CertificateIdentifier + { + /// + /// Gets the certificate associated with the identifier. + /// + public async Task Find() + { + Opc.Ua.CertificateIdentifier output = SecuredApplication.FromCertificateIdentifier(this); + return await output.Find(false); + } + + /// + /// Gets the certificate associated with the identifier. + /// + public async Task Find(bool needPrivateKey) + { + Opc.Ua.CertificateIdentifier output = SecuredApplication.FromCertificateIdentifier(this); + return await output.Find(needPrivateKey); + } + + /// + /// Opens the certificate store. + /// + public ICertificateStore OpenStore() + { + Opc.Ua.CertificateIdentifier output = SecuredApplication.FromCertificateIdentifier(this); + return output.OpenStore(); + } + } + + /// + /// An identifier for a certificate store. + /// + public partial class CertificateStoreIdentifier + { + /// + /// Opens the certificate store. + /// + public ICertificateStore OpenStore() + { + Opc.Ua.CertificateStoreIdentifier output = SecuredApplication.FromCertificateStoreIdentifier(this); + return output.OpenStore(); + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ServerCapabilities.csv b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ServerCapabilities.csv new file mode 100644 index 00000000..e450f797 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/ServerCapabilities.csv @@ -0,0 +1,33 @@ +NA,No capability information is available. Cannot be used in combination with any other capability. +DA,Provides current data. +HD,Provides historical data. +AC,Provides alarms and conditions that may require operator interaction. +HE,Provides historical alarms and events. +GDS,Supports the Global Discovery Server information model. +LDS,Only supports the Discovery Services. Cannot be used in combination with any other capability. +DI,Supports the Device Integration (DI) information model (see DI). +ADI,Supports the Analyser Device Integration (ADI) information model (see ADI). +FDI,Supports the Field Device Integration (FDI) information model (see FDI). +FDIC,Supports the Field Device Integration (FDI) Communication Server information model (see FDI). +PLC,Supports the PLCopen information model (see PLCopen). +S95,Supports the ISA95 information model (see ISA-95). +RCP,Supports the reverse connect capabilities defined in Part 6. +PUB,Supports the Publisher capabilities defined in Part 14. +AUTOID,Supports the AutoID information model. +MDIS,Supports the MDIS information model. +CNC,Supports the information model for Computerized Numerical Control (CNC) systems. +PLK,Supports the POWERLINK information model. +FDT,Supports the FDT information model. +TMC,Supports the Tobacco Machine Communication (TMC) information model. +CSPP,Supports the CSP+ device profile (CSPPlusForMachine) information model. +61850,Supports the IEC61850 information model. +PACKML,Supports the PackML information model. +MTC,Supports the MTConnect information model. +AUTOML,Supports the AutomationML information model. +SERCOS,Supports the Sercos information model. +MIMOSA,Supports the MIMOSA information model. +WITSML,Supports the WITSML information model. +DEXPI,Supports the DEXPI information model. +IOLINK,Supports the IOLINK information model. +VROBOT,Supports the VDMA ROBOTICS information model. +PNO,Supports the ProfiNET information model. diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSet.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSet.cs new file mode 100644 index 00000000..e69076ee --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSet.cs @@ -0,0 +1,1917 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// 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 Opc.Ua.Export { + 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 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("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; + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSet.xsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSet.xsd new file mode 100644 index 00000000..c8612904 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSet.xsd @@ -0,0 +1,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSetHelpers.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSetHelpers.cs new file mode 100644 index 00000000..9d0573ce --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UANodeSetHelpers.cs @@ -0,0 +1,1394 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + + +namespace Opc.Ua.Export +{ + /// + /// A set of nodes in an address space. + /// + public partial class UANodeSet + { + #region Constructors + /// + /// Creates an empty nodeset. + /// + public UANodeSet() + { + } + + /// + /// Loads a nodeset from a stream. + /// + /// The input stream. + /// The set of nodes + public static UANodeSet Read(Stream istrm) + { + StreamReader reader = new StreamReader(istrm); + + try + { + XmlSerializer serializer = new XmlSerializer(typeof(UANodeSet)); + return serializer.Deserialize(reader) as UANodeSet; + } + finally + { + reader.Dispose(); + } + } + + /// + /// Write a nodeset to a stream. + /// + /// The input stream. + public void Write(Stream istrm) + { + StreamWriter writer = new StreamWriter(istrm, Encoding.UTF8); + + try + { + XmlSerializer serializer = new XmlSerializer(typeof(UANodeSet)); + serializer.Serialize(writer, this); + } + finally + { + writer.Flush(); + writer.Dispose(); + } + } + #endregion + + #region Public Methods + /// + /// Adds an alias to the node set. + /// + public void AddAlias(ISystemContext context, string alias, Opc.Ua.NodeId nodeId) + { + int count = 1; + + if (this.Aliases != null) + { + for (int ii = 0; ii < this.Aliases.Length; ii++) + { + if (this.Aliases[ii].Alias == alias) + { + this.Aliases[ii].Value = Export(nodeId, context.NamespaceUris); + return; + } + } + + count += this.Aliases.Length; + } + + NodeIdAlias[] aliases = new NodeIdAlias[count]; + + if (this.Aliases != null) + { + Array.Copy(this.Aliases, aliases, this.Aliases.Length); + } + + aliases[count-1] = new NodeIdAlias() { Alias = alias, Value = Export(nodeId, context.NamespaceUris) }; + this.Aliases = aliases; + } + + /// + /// Imports a node from the set. + /// + public void Import(ISystemContext context, NodeStateCollection nodes) + { + for (int ii = 0; ii < this.Items.Length; ii++) + { + UANode node = this.Items[ii]; + NodeState importedNode = Import(context, node); + nodes.Add(importedNode); + } + } + + /// + /// Adds a node to the set. + /// + public void Export(ISystemContext context, NodeState node, bool outputRedundantNames =true) + { + if (node == null) throw new ArgumentNullException(nameof(node)); + + if (Opc.Ua.NodeId.IsNull(node.NodeId)) + { + throw new ArgumentException("A non-null NodeId must be specified."); + } + + UANode exportedNode = null; + + switch (node.NodeClass) + { + case NodeClass.Object: + { + BaseObjectState o = (BaseObjectState)node; + UAObject value = new UAObject(); + value.EventNotifier = o.EventNotifier; + + if (o.Parent != null) + { + value.ParentNodeId = ExportAlias(o.Parent.NodeId, context.NamespaceUris); + } + + exportedNode = value; + break; + } + + case NodeClass.Variable: + { + BaseVariableState o = (BaseVariableState)node; + UAVariable value = new UAVariable(); + value.DataType = ExportAlias(o.DataType, context.NamespaceUris); + value.ValueRank = o.ValueRank; + value.ArrayDimensions = Export(o.ArrayDimensions); + value.AccessLevel = o.AccessLevelEx; + value.MinimumSamplingInterval = o.MinimumSamplingInterval; + value.Historizing = o.Historizing; + + if (o.Parent != null) + { + value.ParentNodeId = ExportAlias(o.Parent.NodeId, context.NamespaceUris); + } + + if (o.Value != null) + { + XmlEncoder encoder = CreateEncoder(context); + + Variant variant = new Variant(o.Value); + encoder.WriteVariantContents(variant.Value, variant.TypeInfo); + + XmlDocument document = new XmlDocument(); + document.InnerXml = encoder.Close(); + value.Value = document.DocumentElement; + } + + exportedNode = value; + break; + } + + case NodeClass.Method: + { + MethodState o = (MethodState)node; + UAMethod value = new UAMethod(); + value.Executable = o.Executable; + + if (o.TypeDefinitionId != null && !o.TypeDefinitionId.IsNullNodeId && o.TypeDefinitionId != o.NodeId) + { + value.MethodDeclarationId = Export(o.TypeDefinitionId, context.NamespaceUris); + } + + if (o.Parent != null) + { + value.ParentNodeId = ExportAlias(o.Parent.NodeId, context.NamespaceUris); + } + + exportedNode = value; + break; + } + + case NodeClass.View: + { + ViewState o = (ViewState)node; + UAView value = new UAView(); + value.ContainsNoLoops = o.ContainsNoLoops; + exportedNode = value; + break; + } + + case NodeClass.ObjectType: + { + BaseObjectTypeState o = (BaseObjectTypeState)node; + UAObjectType value = new UAObjectType(); + value.IsAbstract = o.IsAbstract; + exportedNode = value; + break; + } + + case NodeClass.VariableType: + { + BaseVariableTypeState o = (BaseVariableTypeState)node; + UAVariableType value = new UAVariableType(); + value.IsAbstract = o.IsAbstract; + value.DataType = ExportAlias(o.DataType, context.NamespaceUris); + value.ValueRank = o.ValueRank; + value.ArrayDimensions = Export(o.ArrayDimensions); + + if (o.Value != null) + { + XmlEncoder encoder = CreateEncoder(context); + + Variant variant = new Variant(o.Value); + encoder.WriteVariantContents(variant.Value, variant.TypeInfo); + + XmlDocument document = new XmlDocument(); + document.InnerXml = encoder.Close(); + value.Value = document.DocumentElement; + } + + exportedNode = value; + break; + } + + case NodeClass.DataType: + { + DataTypeState o = (DataTypeState)node; + UADataType value = new UADataType(); + value.IsAbstract = o.IsAbstract; + value.Definition = Export(o, o.DataTypeDefinition, context.NamespaceUris, outputRedundantNames); + value.Purpose = o.Purpose; + exportedNode = value; + break; + } + + case NodeClass.ReferenceType: + { + ReferenceTypeState o = (ReferenceTypeState)node; + UAReferenceType value = new UAReferenceType(); + value.IsAbstract = o.IsAbstract; + + if (!Opc.Ua.LocalizedText.IsNullOrEmpty(o.InverseName)) + { + value.InverseName = Export(new Opc.Ua.LocalizedText[] { o.InverseName }); + } + + value.Symmetric = o.Symmetric; + exportedNode = value; + break; + } + } + + exportedNode.NodeId = Export(node.NodeId, context.NamespaceUris); + exportedNode.BrowseName = Export(node.BrowseName, context.NamespaceUris); + + if (outputRedundantNames || node.DisplayName.Text != node.BrowseName.Name) + { + exportedNode.DisplayName = Export(new Opc.Ua.LocalizedText[] { node.DisplayName }); + } + else + { + exportedNode.DisplayName = null; + } + + if (node.Description != null && !String.IsNullOrEmpty(node.Description.Text)) + { + exportedNode.Description = Export(new Opc.Ua.LocalizedText[] { node.Description }); + } + else + { + exportedNode.Description = new LocalizedText[0]; + } + + exportedNode.Documentation = node.NodeSetDocumentation; + exportedNode.Category = (node.Categories != null && node.Categories.Count > 0) ? new List(node.Categories).ToArray() : null; + exportedNode.ReleaseStatus = node.ReleaseStatus; + exportedNode.WriteMask = (uint)node.WriteMask; + exportedNode.UserWriteMask = (uint)node.UserWriteMask; + exportedNode.Extensions = node.Extensions; + + if (!String.IsNullOrEmpty(node.SymbolicName) && node.SymbolicName != node.BrowseName.Name) + { + exportedNode.SymbolicName = node.SymbolicName; + } + + // export references. + INodeBrowser browser = node.CreateBrowser(context, null, null, true, BrowseDirection.Both, null, null, true); + List exportedReferences = new List(); + IReference reference = browser.Next(); + + while (reference != null) + { + if (node.NodeClass == NodeClass.Method) + { + if (!reference.IsInverse && reference.ReferenceTypeId == ReferenceTypeIds.HasTypeDefinition) + { + reference = browser.Next(); + continue; + } + } + + Reference exportedReference = new Reference(); + + exportedReference.ReferenceType = ExportAlias(reference.ReferenceTypeId, context.NamespaceUris); + exportedReference.IsForward = !reference.IsInverse; + exportedReference.Value = Export(reference.TargetId, context.NamespaceUris, context.ServerUris); + exportedReferences.Add(exportedReference); + + reference = browser.Next(); + } + + exportedNode.References = exportedReferences.ToArray(); + + // add node to list. + UANode[] nodes = null; + + int count = 1; + + if (this.Items == null) + { + nodes = new UANode[count]; + } + else + { + count += this.Items.Length; + nodes = new UANode[count]; + Array.Copy(this.Items, nodes, this.Items.Length); + } + + nodes[count-1] = exportedNode; + + this.Items = nodes; + + // recusively process children. + List children = new List(); + node.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + Export(context, children[ii], outputRedundantNames); + } + } + #endregion + + #region Private Members + /// + /// Creates an encoder to save Variant values. + /// + private XmlEncoder CreateEncoder(ISystemContext context) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + XmlEncoder encoder = new XmlEncoder(messageContext); + + NamespaceTable namespaceUris = new NamespaceTable(); + + if (NamespaceUris != null) + { + for (int ii = 0; ii < NamespaceUris.Length; ii++) + { + namespaceUris.Append(NamespaceUris[ii]); + } + } + + StringTable serverUris = new StringTable(); + + if (ServerUris != null) + { + serverUris.Append(context.ServerUris.GetString(0)); + + for (int ii = 0; ii < ServerUris.Length; ii++) + { + serverUris.Append(ServerUris[ii]); + } + } + + encoder.SetMappingTables(namespaceUris, serverUris); + + return encoder; + } + + /// + /// Creates an decoder to restore Variant values. + /// + private XmlDecoder CreateDecoder(ISystemContext context, XmlElement source) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + XmlDecoder decoder = new XmlDecoder(source, messageContext); + + NamespaceTable namespaceUris = new NamespaceTable(); + + if (NamespaceUris != null) + { + for (int ii = 0; ii < NamespaceUris.Length; ii++) + { + namespaceUris.Append(NamespaceUris[ii]); + } + } + + StringTable serverUris = new StringTable(); + + if (ServerUris != null) + { + serverUris.Append(context.ServerUris.GetString(0)); + + for (int ii = 0; ii < ServerUris.Length; ii++) + { + serverUris.Append(ServerUris[ii]); + } + } + + decoder.SetMappingTables(namespaceUris, serverUris); + + return decoder; + } + + /// + /// Imports a node from the set. + /// + private NodeState Import(ISystemContext context, UANode node) + { + NodeState importedNode = null; + + NodeClass nodeClass = NodeClass.Unspecified; + + if (node is UAObject) nodeClass = NodeClass.Object; + else if (node is UAVariable) nodeClass = NodeClass.Variable; + else if (node is UAMethod) nodeClass = NodeClass.Method; + else if (node is UAObjectType) nodeClass = NodeClass.ObjectType; + else if (node is UAVariableType) nodeClass = NodeClass.VariableType; + else if (node is UADataType) nodeClass = NodeClass.DataType; + else if (node is UAReferenceType) nodeClass = NodeClass.ReferenceType; + else if (node is UAView) nodeClass = NodeClass.View; + + switch (nodeClass) + { + case NodeClass.Object: + { + UAObject o = (UAObject)node; + BaseObjectState value = new BaseObjectState(null); + value.EventNotifier = o.EventNotifier; + importedNode = value; + break; + } + + case NodeClass.Variable: + { + UAVariable o = (UAVariable)node; + + NodeId typeDefinitionId = null; + + if (node.References != null) + { + for (int ii = 0; ii < node.References.Length; ii++) + { + Opc.Ua.NodeId referenceTypeId = ImportNodeId(node.References[ii].ReferenceType, context.NamespaceUris, true); + bool isInverse = !node.References[ii].IsForward; + Opc.Ua.ExpandedNodeId targetId = ImportExpandedNodeId(node.References[ii].Value, context.NamespaceUris, context.ServerUris); + + if (referenceTypeId == ReferenceTypeIds.HasTypeDefinition && !isInverse) + { + typeDefinitionId = Opc.Ua.ExpandedNodeId.ToNodeId(targetId, context.NamespaceUris); + break; + } + } + } + + BaseVariableState value = null; + + if (typeDefinitionId == Opc.Ua.VariableTypeIds.PropertyType) + { + value = new PropertyState(null); + } + else + { + value = new BaseDataVariableState(null); + } + + value.DataType = ImportNodeId(o.DataType, context.NamespaceUris, true); + value.ValueRank = o.ValueRank; + value.ArrayDimensions = ImportArrayDimensions(o.ArrayDimensions); + value.AccessLevelEx = o.AccessLevel; + value.UserAccessLevel = (byte)(o.AccessLevel & 0xFF); + value.MinimumSamplingInterval = o.MinimumSamplingInterval; + value.Historizing = o.Historizing; + + if (o.Value != null) + { + XmlDecoder decoder = CreateDecoder(context, o.Value); + TypeInfo typeInfo = null; + value.Value = decoder.ReadVariantContents(out typeInfo); + decoder.Close(); + } + + importedNode = value; + break; + } + + case NodeClass.Method: + { + UAMethod o = (UAMethod)node; + MethodState value = new MethodState(null); + value.Executable = o.Executable; + value.UserExecutable = o.Executable; + value.TypeDefinitionId = ImportNodeId(o.MethodDeclarationId, context.NamespaceUris, true); + importedNode = value; + break; + } + + case NodeClass.View: + { + UAView o = (UAView)node; + ViewState value = new ViewState(); + value.ContainsNoLoops = o.ContainsNoLoops; + importedNode = value; + break; + } + + case NodeClass.ObjectType: + { + UAObjectType o = (UAObjectType)node; + BaseObjectTypeState value = new BaseObjectTypeState(); + value.IsAbstract = o.IsAbstract; + importedNode = value; + break; + } + + case NodeClass.VariableType: + { + UAVariableType o = (UAVariableType)node; + BaseVariableTypeState value = new BaseDataVariableTypeState(); + value.IsAbstract = o.IsAbstract; + value.DataType = ImportNodeId(o.DataType, context.NamespaceUris, true); + value.ValueRank = o.ValueRank; + value.ArrayDimensions = ImportArrayDimensions(o.ArrayDimensions); + + if (o.Value != null) + { + XmlDecoder decoder = CreateDecoder(context, o.Value); + TypeInfo typeInfo = null; + value.Value = decoder.ReadVariantContents(out typeInfo); + decoder.Close(); + } + + importedNode = value; + break; + } + + case NodeClass.DataType: + { + UADataType o = (UADataType)node; + DataTypeState value = new DataTypeState(); + value.IsAbstract = o.IsAbstract; + Opc.Ua.DataTypeDefinition dataTypeDefinition = Import(o, o.Definition, context.NamespaceUris); + value.DataTypeDefinition = new ExtensionObject(dataTypeDefinition); + value.Purpose = o.Purpose; + value.DataTypeModifier = DataTypeModifier.None; + + if (o.Definition != null) + { + if (o.Definition.IsOptionSet) + { + value.DataTypeModifier = DataTypeModifier.OptionSet; + } + else if (o.Definition.IsUnion) + { + value.DataTypeModifier = DataTypeModifier.Union; + } + } + + importedNode = value; + break; + } + + case NodeClass.ReferenceType: + { + UAReferenceType o = (UAReferenceType)node; + ReferenceTypeState value = new ReferenceTypeState(); + value.IsAbstract = o.IsAbstract; + value.InverseName = Import(o.InverseName); + value.Symmetric = o.Symmetric; + importedNode = value; + break; + } + } + + importedNode.NodeId = ImportNodeId(node.NodeId, context.NamespaceUris, false); + importedNode.BrowseName = ImportQualifiedName(node.BrowseName, context.NamespaceUris); + importedNode.DisplayName = Import(node.DisplayName); + + if (importedNode.DisplayName == null) + { + importedNode.DisplayName = new Ua.LocalizedText(importedNode.BrowseName.Name); + } + + importedNode.Description = Import(node.Description); + importedNode.NodeSetDocumentation = node.Documentation; + importedNode.Categories = (node.Category != null && node.Category.Length > 0) ? node.Category : null; + importedNode.ReleaseStatus = node.ReleaseStatus; + importedNode.WriteMask = (AttributeWriteMask)node.WriteMask; + importedNode.UserWriteMask = (AttributeWriteMask)node.UserWriteMask; + importedNode.Extensions = node.Extensions; + + if (!String.IsNullOrEmpty(node.SymbolicName)) + { + importedNode.SymbolicName = node.SymbolicName; + } + + if (node.References != null) + { + BaseInstanceState instance = importedNode as BaseInstanceState; + BaseTypeState type = importedNode as BaseTypeState; + + for (int ii = 0; ii < node.References.Length; ii++) + { + Opc.Ua.NodeId referenceTypeId = ImportNodeId(node.References[ii].ReferenceType, context.NamespaceUris, true); + bool isInverse = !node.References[ii].IsForward; + Opc.Ua.ExpandedNodeId targetId = ImportExpandedNodeId(node.References[ii].Value, context.NamespaceUris, context.ServerUris); + + if (instance != null) + { + if (referenceTypeId == ReferenceTypeIds.HasModellingRule && !isInverse) + { + instance.ModellingRuleId = Opc.Ua.ExpandedNodeId.ToNodeId(targetId, context.NamespaceUris); + continue; + } + + if (referenceTypeId == ReferenceTypeIds.HasTypeDefinition && !isInverse) + { + instance.TypeDefinitionId = Opc.Ua.ExpandedNodeId.ToNodeId(targetId, context.NamespaceUris); + continue; + } + } + + if (type != null) + { + if (referenceTypeId == ReferenceTypeIds.HasSubtype && isInverse) + { + type.SuperTypeId = Opc.Ua.ExpandedNodeId.ToNodeId(targetId, context.NamespaceUris); + continue; + } + } + + importedNode.AddReference(referenceTypeId, isInverse, targetId); + } + } + + string parentNodeId = (node as UAInstance)?.ParentNodeId; + + if (!String.IsNullOrEmpty(parentNodeId)) + { + // set parent NodeId in Handle property. + importedNode.Handle = ImportNodeId(parentNodeId, context.NamespaceUris, true); + } + + return importedNode; + } + + /// + /// Exports a NodeId as an alias. + /// + private string ExportAlias(Opc.Ua.NodeId source, NamespaceTable namespaceUris) + { + string nodeId = Export(source, namespaceUris); + + if (!String.IsNullOrEmpty(nodeId)) + { + if (this.Aliases != null) + { + for (int ii = 0; ii < this.Aliases.Length; ii++) + { + if (this.Aliases[ii].Value == nodeId) + { + return this.Aliases[ii].Alias; + } + } + } + } + + return nodeId; + } + + /// + /// Exports a NodeId + /// + private string Export(Opc.Ua.NodeId source, NamespaceTable namespaceUris) + { + if (Opc.Ua.NodeId.IsNull(source)) + { + return String.Empty; + } + + if (source.NamespaceIndex > 0) + { + ushort namespaceIndex = ExportNamespaceIndex(source.NamespaceIndex, namespaceUris); + source = new Opc.Ua.NodeId(source.Identifier, namespaceIndex); + } + + return source.ToString(); + } + + /// + /// Imports a NodeId + /// + private Opc.Ua.NodeId ImportNodeId(string source, NamespaceTable namespaceUris, bool lookupAlias) + { + if (String.IsNullOrEmpty(source)) + { + return Opc.Ua.NodeId.Null; + } + + // lookup alias. + if (lookupAlias && this.Aliases != null) + { + for (int ii = 0; ii < this.Aliases.Length; ii++) + { + if (this.Aliases[ii].Alias == source) + { + source = this.Aliases[ii].Value; + break; + } + } + } + + // parse the string. + Opc.Ua.NodeId nodeId = Opc.Ua.NodeId.Parse(source); + + if (nodeId.NamespaceIndex > 0) + { + ushort namespaceIndex = ImportNamespaceIndex(nodeId.NamespaceIndex, namespaceUris); + nodeId = new Opc.Ua.NodeId(nodeId.Identifier, namespaceIndex); + } + + return nodeId; + } + + /// + /// Exports a ExpandedNodeId + /// + private string Export(Opc.Ua.ExpandedNodeId source, NamespaceTable namespaceUris, StringTable serverUris) + { + if (Opc.Ua.NodeId.IsNull(source)) + { + return String.Empty; + } + + if (source.ServerIndex <= 0 && source.NamespaceIndex <= 0 && String.IsNullOrEmpty(source.NamespaceUri)) + { + return source.ToString(); + } + + ushort namespaceIndex = 0; + + if (String.IsNullOrEmpty(source.NamespaceUri)) + { + namespaceIndex = ExportNamespaceIndex(source.NamespaceIndex, namespaceUris); + } + else + { + namespaceIndex = ExportNamespaceUri(source.NamespaceUri, namespaceUris); + } + + uint serverIndex = ExportServerIndex(source.ServerIndex, serverUris); + source = new Opc.Ua.ExpandedNodeId(source.Identifier, namespaceIndex, null, serverIndex); + return source.ToString(); + } + + /// + /// Imports a ExpandedNodeId + /// + private Opc.Ua.ExpandedNodeId ImportExpandedNodeId(string source, NamespaceTable namespaceUris, StringTable serverUris) + { + if (String.IsNullOrEmpty(source)) + { + return Opc.Ua.ExpandedNodeId.Null; + } + // lookup aliases + if (this.Aliases != null) + { + for (int ii = 0; ii < this.Aliases.Length; ii++) + { + if (this.Aliases[ii].Alias == source) + { + source = this.Aliases[ii].Value; + break; + } + } + } + + // parse the node. + Opc.Ua.ExpandedNodeId nodeId = Opc.Ua.ExpandedNodeId.Parse(source); + + if (nodeId.ServerIndex <= 0 && nodeId.NamespaceIndex <= 0 && String.IsNullOrEmpty(nodeId.NamespaceUri)) + { + return nodeId; + } + + uint serverIndex = ImportServerIndex(nodeId.ServerIndex, serverUris); + ushort namespaceIndex = ImportNamespaceIndex(nodeId.NamespaceIndex, namespaceUris); + + if (serverIndex > 0) + { + string namespaceUri = nodeId.NamespaceUri; + + if (String.IsNullOrEmpty(nodeId.NamespaceUri)) + { + namespaceUri = namespaceUris.GetString(namespaceIndex); + } + + nodeId = new Opc.Ua.ExpandedNodeId(nodeId.Identifier, 0, namespaceUri, serverIndex); + return nodeId; + } + + + nodeId = new Opc.Ua.ExpandedNodeId(nodeId.Identifier, namespaceIndex, null, 0); + return nodeId; + } + + /// + /// Exports a QualifiedName + /// + private string Export(Opc.Ua.QualifiedName source, NamespaceTable namespaceUris) + { + if (Opc.Ua.QualifiedName.IsNull(source)) + { + return String.Empty; + } + + if (source.NamespaceIndex > 0) + { + ushort namespaceIndex = ExportNamespaceIndex(source.NamespaceIndex, namespaceUris); + source = new Opc.Ua.QualifiedName(source.Name, namespaceIndex); + } + + return source.ToString(); + } + + /// + /// Exports a DataTypeDefinition + /// + private Opc.Ua.Export.DataTypeDefinition Export( + DataTypeState dataType, + ExtensionObject source, + NamespaceTable namespaceUris, + bool outputRedundantNames) + { + if (source == null || source.Body == null) + { + return null; + } + + DataTypeDefinition definition = new DataTypeDefinition(); + + if (outputRedundantNames || dataType.BrowseName != null) + { + definition.Name = Export(dataType.BrowseName, namespaceUris); + } + + if (dataType.BrowseName.Name != dataType.SymbolicName) + { + definition.SymbolicName = dataType.SymbolicName; + } + + switch (dataType.DataTypeModifier) + { + case DataTypeModifier.Union: { definition.IsUnion = true; break; } + case DataTypeModifier.OptionSet: { definition.IsOptionSet = true; break; } + } + + StructureDefinition structureDefinition = source.Body as StructureDefinition; + + if (structureDefinition != null) + { + if (structureDefinition.StructureType == StructureType.Union) + { + definition.IsUnion = true; + } + + if (structureDefinition.Fields != null) + { + List fields = new List(); + + for (int ii = structureDefinition.FirstExplicitFieldIndex; ii < structureDefinition.Fields.Count; ii++) + { + StructureField field = structureDefinition.Fields[ii]; + + Opc.Ua.Export.DataTypeField output = new Opc.Ua.Export.DataTypeField(); + + output.Name = field.Name; + output.Description = Export(new Opc.Ua.LocalizedText[] { field.Description }); + output.IsOptional = field.IsOptional; + + if (NodeId.IsNull(field.DataType)) + { + output.DataType = Export(DataTypeIds.BaseDataType, namespaceUris); + } + else + { + output.DataType = Export(field.DataType, namespaceUris); + } + + output.ValueRank = field.ValueRank; + + fields.Add(output); + } + + definition.Field = fields.ToArray(); + } + } + + EnumDefinition enumDefinition = source.Body as EnumDefinition; + + if (enumDefinition != null) + { + if (enumDefinition.Fields != null) + { + List fields = new List(); + + foreach (EnumField field in enumDefinition.Fields) + { + Opc.Ua.Export.DataTypeField output = new Opc.Ua.Export.DataTypeField(); + + output.Name = field.Name; + + if (field.DisplayName != null && output.Name != field.DisplayName.Text) + { + output.DisplayName = Export(new Opc.Ua.LocalizedText[] { field.DisplayName }); + } + else + { + output.DisplayName = new LocalizedText[0]; + } + + output.Description = Export(new Opc.Ua.LocalizedText[] { field.Description }); + output.ValueRank = ValueRanks.Scalar; + output.Value = (int)field.Value; + + fields.Add(output); + } + + definition.Field = fields.ToArray(); + } + } + + return definition; + } + + /// + /// Imports a DataTypeDefinition + /// + private Opc.Ua.DataTypeDefinition Import(UADataType dataType, Opc.Ua.Export.DataTypeDefinition source, NamespaceTable namespaceUris) + { + if (source == null) + { + return null; + } + + Opc.Ua.DataTypeDefinition definition = null; + + if (source.Field != null) + { + // check if definition is for enumeration or structure. + bool isStructure = Array.Exists(source.Field, delegate (DataTypeField fieldLookup) + { + return fieldLookup.Value == -1; + }); + + if (isStructure) + { + StructureDefinition structureDefinition = new StructureDefinition(); + structureDefinition.BaseDataType = ImportNodeId(source.BaseType, namespaceUris, true); + + if (source.IsUnion) + { + structureDefinition.StructureType = StructureType.Union; + } + + if (source.Field != null) + { + List fields = new List(); + + foreach (DataTypeField field in source.Field) + { + if (field.IsOptional) + { + structureDefinition.StructureType = StructureType.StructureWithOptionalFields; + } + + StructureField output = new StructureField(); + + output.Name = field.Name; + output.Description = Import(field.Description); + output.DataType = ImportNodeId(field.DataType, namespaceUris, true); + output.ValueRank = field.ValueRank; + output.IsOptional = field.IsOptional; + + fields.Add(output); + } + + structureDefinition.Fields = fields.ToArray(); + } + definition = structureDefinition; + } + else + { + EnumDefinition enumDefinition = new EnumDefinition(); + if (source.Field != null) + { + List fields = new List(); + + foreach (DataTypeField field in source.Field) + { + EnumField output = new EnumField(); + + output.Name = field.Name; + output.DisplayName = Import(field.DisplayName); + output.Description = Import(field.Description); + output.Value = field.Value; + + fields.Add(output); + } + + enumDefinition.Fields = fields.ToArray(); + } + definition = enumDefinition; + } + } + + return definition; + } + + /// + /// Imports a QualifiedName + /// + private Opc.Ua.QualifiedName ImportQualifiedName(string source, NamespaceTable namespaceUris) + { + if (String.IsNullOrEmpty(source)) + { + return Opc.Ua.QualifiedName.Null; + } + + Opc.Ua.QualifiedName qname = Opc.Ua.QualifiedName.Parse(source); + + if (qname.NamespaceIndex > 0) + { + ushort namespaceIndex = ImportNamespaceIndex(qname.NamespaceIndex, namespaceUris); + qname = new Opc.Ua.QualifiedName(qname.Name, namespaceIndex); + } + + return qname; + } + + /// + /// Exports the array dimensions. + /// + private string Export(IList arrayDimensions) + { + if (arrayDimensions == null) + { + return String.Empty; + } + + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < arrayDimensions.Count; ii++) + { + if (buffer.Length > 0) + { + buffer.Append(','); + } + + buffer.Append(arrayDimensions[ii]); + } + + return buffer.ToString(); + } + + /// + /// Imports the array dimensions. + /// + private uint[] ImportArrayDimensions(string arrayDimensions) + { + if (String.IsNullOrEmpty(arrayDimensions)) + { + return null; + } + + string[] fields = arrayDimensions.Split(','); + uint[] dimensions = new uint[fields.Length]; + + for (int ii = 0; ii < fields.Length; ii++) + { + try + { + dimensions[ii] = Convert.ToUInt32(fields[ii]); + } + catch + { + dimensions[ii] = 0; + } + } + + return dimensions; + } + + /// + /// Exports localized text. + /// + private Opc.Ua.Export.LocalizedText[] Export(Opc.Ua.LocalizedText[] input) + { + if (input == null) + { + return null; + } + + List output = new List(); + + for (int ii = 0; ii < input.Length; ii++) + { + if (input[ii] != null) + { + Opc.Ua.Export.LocalizedText text = new LocalizedText(); + text.Locale = input[ii].Locale; + text.Value = input[ii].Text; + output.Add(text); + } + } + + return output.ToArray(); + } + + /// + /// Exports localized text. + /// + private Opc.Ua.Export.LocalizedText Export(Opc.Ua.LocalizedText input) + { + if (input == null) + { + return null; + } + + Opc.Ua.Export.LocalizedText text = new LocalizedText(); + text.Locale = input.Locale; + text.Value = input.Text; + return text; + } + + /// + /// Imports localized text. + /// + private Opc.Ua.LocalizedText Import(params Opc.Ua.Export.LocalizedText[] input) + { + if (input == null) + { + return null; + } + + for (int ii = 0; ii < input.Length; ii++) + { + if (input[ii] != null) + { + return new Opc.Ua.LocalizedText(input[ii].Locale, input[ii].Value); + } + } + + return null; + } + + /// + /// Exports a namespace index. + /// + private ushort ExportNamespaceIndex(ushort namespaceIndex, NamespaceTable namespaceUris) + { + // nothing special required for indexes 0. + if (namespaceIndex < 1) + { + return namespaceIndex; + } + + // return a bad value if parameters are bad. + if (namespaceUris == null || namespaceUris.Count <= namespaceIndex) + { + return UInt16.MaxValue; + } + + // find an existing index. + int count = 1; + string targetUri = namespaceUris.GetString(namespaceIndex); + + if (this.NamespaceUris != null) + { + for (int ii = 0; ii < this.NamespaceUris.Length; ii++) + { + if (this.NamespaceUris[ii] == targetUri) + { + return (ushort)(ii+1); // add 1 to adjust for the well-known URIs which are not stored. + } + } + + count += this.NamespaceUris.Length; + } + + // add a new entry. + string[] uris = new string[count]; + + if (this.NamespaceUris != null) + { + Array.Copy(this.NamespaceUris, uris, count - 1); + } + + uris[count-1] = targetUri; + this.NamespaceUris = uris; + + // return the new index. + return (ushort)count; + } + + /// + /// Exports a namespace index. + /// + private ushort ImportNamespaceIndex(ushort namespaceIndex, NamespaceTable namespaceUris) + { + // nothing special required for indexes 0 and 1. + if (namespaceIndex < 1) + { + return namespaceIndex; + } + + // return a bad value if parameters are bad. + if (namespaceUris == null || this.NamespaceUris == null || this.NamespaceUris.Length <= namespaceIndex-1) + { + return UInt16.MaxValue; + } + + // find or append uri. + return namespaceUris.GetIndexOrAppend(this.NamespaceUris[namespaceIndex-1]); + } + + /// + /// Exports a namespace uri. + /// + private ushort ExportNamespaceUri(string namespaceUri, NamespaceTable namespaceUris) + { + // return a bad value if parameters are bad. + if (namespaceUris == null) + { + return UInt16.MaxValue; + } + + int namespaceIndex = namespaceUris.GetIndex(namespaceUri); + + // nothing special required for the first two URIs. + if (namespaceIndex == 0) + { + return (ushort)namespaceIndex; + } + + // find an existing index. + int count = 1;; + + if (this.NamespaceUris != null) + { + for (int ii = 0; ii < this.NamespaceUris.Length; ii++) + { + if (this.NamespaceUris[ii] == namespaceUri) + { + return (ushort)(ii + 1); // add 1 to adjust for the well-known URIs which are not stored. + } + } + + count += this.NamespaceUris.Length; + } + + // add a new entry. + string[] uris = new string[count]; + + if (this.NamespaceUris != null) + { + Array.Copy(this.NamespaceUris, uris, count - 1); + } + + uris[count - 1] = namespaceUri; + this.NamespaceUris = uris; + + // return the new index. + return (ushort)(count + 1); + } + + /// + /// Exports a server index. + /// + private uint ExportServerIndex(uint serverIndex, StringTable serverUris) + { + // nothing special required for indexes 0. + if (serverIndex <= 0) + { + return serverIndex; + } + + // return a bad value if parameters are bad. + if (serverUris == null || serverUris.Count < serverIndex) + { + return UInt16.MaxValue; + } + + // find an existing index. + int count = 1; + string targetUri = serverUris.GetString(serverIndex); + + if (this.ServerUris != null) + { + for (int ii = 0; ii < this.ServerUris.Length; ii++) + { + if (this.ServerUris[ii] == targetUri) + { + return (ushort)(ii + 1); // add 1 to adjust for the well-known URIs which are not stored. + } + } + + count += this.ServerUris.Length; + } + + // add a new entry. + string[] uris = new string[count]; + + if (this.ServerUris != null) + { + Array.Copy(this.ServerUris, uris, count - 1); + } + + uris[count-1] = targetUri; + this.ServerUris = uris; + + // return the new index. + return (ushort)count; + } + + /// + /// Exports a server index. + /// + private uint ImportServerIndex(uint serverIndex, StringTable serverUris) + { + // nothing special required for indexes 0. + if (serverIndex <= 0) + { + return serverIndex; + } + + // return a bad value if parameters are bad. + if (serverUris == null || this.ServerUris == null || this.ServerUris.Length <= serverIndex-1) + { + return UInt16.MaxValue; + } + + // find or append uri. + return serverUris.GetIndexOrAppend(this.ServerUris[serverIndex - 1]); + } + #endregion + + #region Private Fields + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UAVariant.xsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UAVariant.xsd new file mode 100644 index 00000000..c86639b8 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Schema/UAVariant.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Audit.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Audit.cs new file mode 100644 index 00000000..7b41a540 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Audit.cs @@ -0,0 +1,138 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Text; +using System.Globalization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security +{ + /// + /// A class which is used to report events which have security implications. + /// + public static class Audit + { + /// + /// Called when a secure channel is created by the client. + /// + /// Information about the secure channel implementation. + /// The identifier assigned to the secure channel + /// The identifier assigned to the secure channel + /// The endpoint. + /// The client certificate. + /// The server certificate. + /// The type of encoding supported by the channel. + public static void SecureChannelCreated( + string implementationInfo, + string endpointUrl, + string secureChannelId, + EndpointDescription endpoint, + X509Certificate2 clientCertificate, + X509Certificate2 serverCertificate, + BinaryEncodingSupport encodingSupport) + { + // do nothing if security turned off. + if ((Utils.TraceMask & Utils.TraceMasks.Security) == 0) + { + return; + } + + StringBuilder buffer = new StringBuilder(); + + buffer.Append("SECURE CHANNEL CREATED"); + buffer.Append(" ["); + buffer.Append(implementationInfo); + buffer.Append("]"); + buffer.Append(" [ID="); + buffer.Append(secureChannelId); + buffer.Append("]"); + buffer.Append(" Connected To: "); + buffer.Append(endpointUrl); + + if (endpoint != null) + { + buffer.Append(" ["); + buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", endpoint.SecurityMode); + buffer.Append("/"); + buffer.Append(SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri)); + buffer.Append("/"); + + if (encodingSupport == BinaryEncodingSupport.Required) + { + buffer.Append("Binary"); + } + else if (encodingSupport == BinaryEncodingSupport.None) + { + buffer.Append("Xml"); + } + else + { + buffer.Append("BinaryOrXml"); + } + + buffer.Append("]"); + + if (endpoint.SecurityMode != MessageSecurityMode.None) + { + if (clientCertificate != null) + { + buffer.Append(" Client Certificate: ["); + buffer.Append(clientCertificate.Subject); + buffer.Append("] ["); + buffer.Append(clientCertificate.Thumbprint); + buffer.Append("]"); + } + + if (serverCertificate != null) + { + buffer.Append(" Server Certificate: ["); + buffer.Append(serverCertificate.Subject); + buffer.Append("] ["); + buffer.Append(serverCertificate.Thumbprint); + buffer.Append("]"); + } + } + } + + Utils.Trace(Utils.TraceMasks.Security, buffer.ToString()); + } + + + /// + /// Called when a secure channel is renewed by the client. + /// + /// Information about the secure channel implementation. + /// The identifier assigned to the secure channel. + public static void SecureChannelRenewed( + string implementationInfo, + string secureChannelId) + { + // do nothing if security turned off. + if ((Utils.TraceMask & Utils.TraceMasks.Security) == 0) + { + return; + } + + StringBuilder buffer = new StringBuilder(); + + buffer.Append("SECURE CHANNEL RENEWED"); + buffer.Append(" ["); + buffer.Append(implementationInfo); + buffer.Append("]"); + buffer.Append(" [ID="); + buffer.Append(secureChannelId); + buffer.Append("]"); + + Utils.Trace(Utils.TraceMasks.Security, buffer.ToString()); + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateFactory.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateFactory.cs new file mode 100644 index 00000000..f3adfc7e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateFactory.cs @@ -0,0 +1,617 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// Creates certificates. + /// + public static class CertificateFactory + { + #region Public Constants + /// + /// The default key size for RSA certificates in bits. + /// + /// + /// Supported values are 1024(deprecated), 2048, 3072 or 4096. + /// + public static readonly ushort DefaultKeySize = 2048; + /// + /// The default hash size for RSA certificates in bits. + /// + /// + /// Supported values are 160 for SHA-1(deprecated) or 256, 384 and 512 for SHA-2. + /// + public static readonly ushort DefaultHashSize = 256; + /// + /// The default lifetime of certificates in months. + /// + public static readonly ushort DefaultLifeTime = 12; + #endregion + + #region Public Methods + /// + /// Creates a certificate from a buffer with DER encoded certificate. + /// + /// The encoded data. + /// if set to true the copy of the certificate in the cache is used. + /// The certificate. + public static X509Certificate2 Create(byte[] encodedData, bool useCache) + { + if (useCache) + { + return Load(new X509Certificate2(encodedData), false); + } + return new X509Certificate2(encodedData); + } + + /// + /// Loads the cached version of a certificate. + /// + /// The certificate to load. + /// If true a key container is created for a certificate that must be deleted by calling Cleanup. + /// The cached certificate. + /// + /// This function is necessary because all private keys used for cryptography + /// operations must be in a key container. + /// Private keys stored in a PFX file have no key container by default. + /// + public static X509Certificate2 Load(X509Certificate2 certificate, bool ensurePrivateKeyAccessible) + { + if (certificate == null) + { + return null; + } + + lock (m_certificatesLock) + { + X509Certificate2 cachedCertificate = null; + + // check for existing cached certificate. + if (m_certificates.TryGetValue(certificate.Thumbprint, out cachedCertificate)) + { + return cachedCertificate; + } + + // nothing more to do if no private key or dont care about accessibility. + if (!certificate.HasPrivateKey || !ensurePrivateKeyAccessible) + { + return certificate; + } + + // update the cache. + m_certificates[certificate.Thumbprint] = certificate; + + if (m_certificates.Count > 100) + { + Utils.Trace("WARNING - Process certificate cache has {0} certificates in it.", m_certificates.Count); + } + + } + return certificate; + } + + /// + /// Create a certificate for any use. + /// + /// The subject of the certificate + /// Return the Certificate builder. + public static ICertificateBuilder CreateCertificate(string subjectName) + { + return CertificateBuilder.Create(subjectName); + } + + /// + /// Create a certificate for an OPC UA application. + /// + /// The application Uri + /// The friendly name of the application + /// The subject of the certificate + /// The domain names for the alt name extension + /// + /// Return the Certificate builder with X509 Subject Alt Name extension + /// to create the certificate. + /// + public static ICertificateBuilder CreateCertificate( + string applicationUri, + string applicationName, + string subjectName, + IList domainNames) + { + SetSuitableDefaults( + ref applicationUri, + ref applicationName, + ref subjectName, + ref domainNames); + + return CertificateBuilder.Create(subjectName) + .AddExtension(new X509SubjectAltNameExtension(applicationUri, domainNames)); + } + + /// + /// Creates a self-signed, signed or CA certificate. + /// + /// Type of certificate store (Directory) . + /// The store path (syntax depends on storeType). + /// The password to use to protect the certificate. + /// The application uri (created if not specified). + /// Name of the application (optional if subjectName is specified). + /// The subject used to create the certificate (optional if applicationName is specified). + /// The domain names that can be used to access the server machine (defaults to local computer name if not specified). + /// Size of the key (1024, 2048 or 4096). + /// The start time. + /// The lifetime of the key in months. + /// The hash size in bits. + /// if set to true then a CA certificate is created. + /// The CA cert with the CA private key. + /// The public key if no new keypair is created. + /// The path length constraint for CA certs. + /// The certificate with a private key. + [Obsolete("Use the new CreateCertificate methods with CertificateBuilder.")] + public static X509Certificate2 CreateCertificate( + string storeType, + string storePath, + string password, + string applicationUri, + string applicationName, + string subjectName, + IList domainNames, + ushort keySize, + DateTime startTime, + ushort lifetimeInMonths, + ushort hashSizeInBits, + bool isCA = false, + X509Certificate2 issuerCAKeyCert = null, + byte[] publicKey = null, + int pathLengthConstraint = 0) + { + return CreateCertificate( + applicationUri, applicationName, subjectName, domainNames, + keySize, startTime, lifetimeInMonths, hashSizeInBits, + isCA, issuerCAKeyCert, publicKey, pathLengthConstraint) + .AddToStore(storeType, storePath, password); + } + + /// + /// Revoke the certificate. + /// The CRL number is increased by one and the new CRL is returned. + /// + public static X509CRL RevokeCertificate( + X509Certificate2 issuerCertificate, + List issuerCrls, + X509Certificate2Collection revokedCertificates + ) + { + return RevokeCertificate(issuerCertificate, issuerCrls, revokedCertificates, + DateTime.UtcNow, DateTime.UtcNow.AddMonths(12)); + } + + /// + /// Revoke the certificates. + /// + /// + /// Merge all existing revoked certificates from CRL list. + /// Add serialnumbers of new revoked certificates. + /// The CRL number is increased by one and the new CRL is returned. + /// + public static X509CRL RevokeCertificate( + X509Certificate2 issuerCertificate, + List issuerCrls, + X509Certificate2Collection revokedCertificates, + DateTime thisUpdate, + DateTime nextUpdate + ) + { + if (!issuerCertificate.HasPrivateKey) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Issuer certificate has no private key, cannot revoke certificate."); + } + + BigInteger crlSerialNumber = 0; + var crlRevokedList = new Dictionary(); + + // merge all existing revocation list + if (issuerCrls != null) + { + foreach (X509CRL issuerCrl in issuerCrls) + { + var extension = X509Extensions.FindExtension(issuerCrl.CrlExtensions); + if (extension != null && + extension.CrlNumber > crlSerialNumber) + { + crlSerialNumber = extension.CrlNumber; + } + foreach (var revokedCertificate in issuerCrl.RevokedCertificates) + { + if (!crlRevokedList.ContainsKey(revokedCertificate.SerialNumber)) + { + crlRevokedList[revokedCertificate.SerialNumber] = revokedCertificate; + } + } + } + } + + // add existing serial numbers + if (revokedCertificates != null) + { + foreach (var cert in revokedCertificates) + { + if (!crlRevokedList.ContainsKey(cert.SerialNumber)) + { + var entry = new RevokedCertificate(cert.SerialNumber, CRLReason.PrivilegeWithdrawn); + crlRevokedList[cert.SerialNumber] = entry; + } + } + } + + CrlBuilder crlBuilder = CrlBuilder.Create(issuerCertificate.SubjectName) + .AddRevokedCertificates(crlRevokedList.Values.ToList()) + .SetThisUpdate(thisUpdate) + .SetNextUpdate(nextUpdate) + .AddCRLExtension(X509Extensions.BuildAuthorityKeyIdentifier(issuerCertificate)) + .AddCRLExtension(X509Extensions.BuildCRLNumber(crlSerialNumber + 1)); + return new X509CRL(crlBuilder.CreateForRSA(issuerCertificate)); + } + +#if NETSTANDARD2_1 + /// + /// Creates a certificate signing request from an existing certificate. + /// + public static byte[] CreateSigningRequest( + X509Certificate2 certificate, + IList domainNames = null + ) + { + if (!certificate.HasPrivateKey) + { + throw new NotSupportedException("Need a certificate with a private key."); + } + + RSA rsaPublicKey = certificate.GetRSAPublicKey(); + var request = new CertificateRequest(certificate.SubjectName, rsaPublicKey, + Oids.GetHashAlgorithmName(certificate.SignatureAlgorithm.Value), RSASignaturePadding.Pkcs1); + + var alternateName = X509Extensions.FindExtension(certificate); + domainNames = domainNames ?? new List(); + if (alternateName != null) + { + foreach (var name in alternateName.DomainNames) + { + if (!domainNames.Any(s => s.Equals(name, StringComparison.OrdinalIgnoreCase))) + { + domainNames.Add(name); + } + } + foreach (var ipAddress in alternateName.IPAddresses) + { + if (!domainNames.Any(s => s.Equals(ipAddress, StringComparison.OrdinalIgnoreCase))) + { + domainNames.Add(ipAddress); + } + } + } + + string applicationUri = X509Utils.GetApplicationUriFromCertificate(certificate); + + // Subject Alternative Name + var subjectAltName = new X509SubjectAltNameExtension(applicationUri, domainNames); + request.CertificateExtensions.Add(new X509Extension(subjectAltName, false)); + + using (RSA rsa = certificate.GetRSAPrivateKey()) + { + var x509SignatureGenerator = X509SignatureGenerator.CreateForRSA(rsa, RSASignaturePadding.Pkcs1); + return request.CreateSigningRequest(x509SignatureGenerator); + } + } + + + /// + /// Create a X509Certificate2 with a private key by combining + /// the new certificate with a private key from an existing certificate + /// + public static X509Certificate2 CreateCertificateWithPrivateKey( + X509Certificate2 certificate, + X509Certificate2 certificateWithPrivateKey) + { + if (!certificateWithPrivateKey.HasPrivateKey) + { + throw new NotSupportedException("Need a certificate with a private key."); + } + + if (!X509Utils.VerifyRSAKeyPair(certificate, certificateWithPrivateKey)) + { + throw new NotSupportedException("The public and the private key pair doesn't match."); + } + + return certificate.CopyWithPrivateKey(certificateWithPrivateKey.GetRSAPrivateKey()); + } + + /// + /// Create a X509Certificate2 with a private key by combining + /// the certificate with a private key from a PEM stream + /// + public static X509Certificate2 CreateCertificateWithPEMPrivateKey( + X509Certificate2 certificate, + byte[] pemDataBlob, + string password = null) + { + RSA rsaPrivateKey = PEMReader.ImportPrivateKeyFromPEM(pemDataBlob, password); + return new X509Certificate2(certificate.RawData).CopyWithPrivateKey(rsaPrivateKey); + } +#else + /// + /// Creates a certificate signing request from an existing certificate. + /// + public static byte[] CreateSigningRequest( + X509Certificate2 certificate, + IList domainNames = null + ) + { + return CertificateBuilder.CreateSigningRequest( + certificate, + domainNames); + } + + /// + /// Create a X509Certificate2 with a private key by combining + /// the new certificate with a private key from an existing certificate + /// + public static X509Certificate2 CreateCertificateWithPrivateKey( + X509Certificate2 certificate, + X509Certificate2 certificateWithPrivateKey) + { + if (!certificateWithPrivateKey.HasPrivateKey) + { + throw new NotSupportedException("Need a certificate with a private key."); + } + + if (!X509Utils.VerifyRSAKeyPair(certificate, certificateWithPrivateKey)) + { + throw new NotSupportedException("The public and the private key pair doesn't match."); + } + + string passcode = Guid.NewGuid().ToString(); + RSA rsaPrivateKey = null; + try + { + rsaPrivateKey = certificateWithPrivateKey.GetRSAPrivateKey(); + byte[] pfxData = CertificateBuilder.CreatePfxWithRSAPrivateKey( + certificate, certificate.FriendlyName, rsaPrivateKey, passcode); + return X509Utils.CreateCertificateFromPKCS12(pfxData, passcode); + } + finally + { + RsaUtils.RSADispose(rsaPrivateKey); + } + } + + /// + /// Create a X509Certificate2 with a private key by combining + /// the certificate with a private key from a PEM stream + /// + public static X509Certificate2 CreateCertificateWithPEMPrivateKey( + X509Certificate2 certificate, + byte[] pemDataBlob, + string password = null) + { + RSA privateKey = PEMReader.ImportPrivateKeyFromPEM(pemDataBlob, password); + if (privateKey == null) + { + throw new ServiceResultException("PEM data blob does not contain a private key."); + } + + string passcode = Guid.NewGuid().ToString(); + byte[] pfxData = CertificateBuilder.CreatePfxWithRSAPrivateKey( + certificate, certificate.FriendlyName, privateKey, passcode); + return X509Utils.CreateCertificateFromPKCS12(pfxData, passcode); + } +#endif + #endregion + + #region Internal Methods + /// + /// Creates a self-signed, signed or CA certificate. + /// + /// The application uri (created if not specified). + /// Name of the application (optional if subjectName is specified). + /// The subject used to create the certificate (optional if applicationName is specified). + /// The domain names that can be used to access the server machine (defaults to local computer name if not specified). + /// Size of the key (1024, 2048 or 4096). + /// The start time. + /// The lifetime of the key in months. + /// The hash size in bits. + /// if set to true then a CA certificate is created. + /// The CA cert with the CA private key. + /// The public key if no new keypair is created. + /// The path length constraint for CA certs. + /// The certificate with a private key. + [Obsolete("Use the new CreateCertificate methods with CertificateBuilder.")] + internal static X509Certificate2 CreateCertificate( + string applicationUri, + string applicationName, + string subjectName, + IList domainNames, + ushort keySize, + DateTime startTime, + ushort lifetimeInMonths, + ushort hashSizeInBits, + bool isCA = false, + X509Certificate2 issuerCAKeyCert = null, + byte[] publicKey = null, + int pathLengthConstraint = 0) + { + ICertificateBuilder builder = null; + if (isCA) + { + builder = CreateCertificate(subjectName); + } + else + { + builder = CreateCertificate( + applicationUri, + applicationName, + subjectName, + domainNames); + } + builder.SetNotBefore(startTime); + builder.SetNotAfter(startTime.AddMonths(lifetimeInMonths)); + builder.SetHashAlgorithm(X509Utils.GetRSAHashAlgorithmName(hashSizeInBits)); + if (isCA) + { + builder.SetCAConstraint(pathLengthConstraint); + } + ICertificateBuilderCreateForRSA createBuilder; + if (issuerCAKeyCert != null) + { + var issuerBuilder = builder.SetIssuer(issuerCAKeyCert); + if (publicKey != null) + { + createBuilder = issuerBuilder.SetRSAPublicKey(publicKey); + } + else + { + createBuilder = issuerBuilder.SetRSAKeySize(keySize); + } + } + else + { + createBuilder = builder.SetRSAKeySize(keySize); + } + return createBuilder.CreateForRSA(); + } + #endregion + + #region Private Methods + /// + /// Sets the parameters to suitable defaults. + /// + private static void SetSuitableDefaults( + ref string applicationUri, + ref string applicationName, + ref string subjectName, + ref IList domainNames) + { + // parse the subject name if specified. + List subjectNameEntries = null; + + if (!String.IsNullOrEmpty(subjectName)) + { + subjectNameEntries = X509Utils.ParseDistinguishedName(subjectName); + } + + // check the application name. + if (String.IsNullOrEmpty(applicationName)) + { + if (subjectNameEntries == null) + { + throw new ArgumentNullException(nameof(applicationName), "Must specify a applicationName or a subjectName."); + } + + // use the common name as the application name. + for (int ii = 0; ii < subjectNameEntries.Count; ii++) + { + if (subjectNameEntries[ii].StartsWith("CN=")) + { + applicationName = subjectNameEntries[ii].Substring(3).Trim(); + break; + } + } + } + + if (String.IsNullOrEmpty(applicationName)) + { + throw new ArgumentNullException(nameof(applicationName), "Must specify a applicationName or a subjectName."); + } + + // remove special characters from name. + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < applicationName.Length; ii++) + { + char ch = applicationName[ii]; + + if (Char.IsControl(ch) || ch == '/' || ch == ',' || ch == ';') + { + ch = '+'; + } + + buffer.Append(ch); + } + + applicationName = buffer.ToString(); + + // ensure at least one host name. + if (domainNames == null || domainNames.Count == 0) + { + domainNames = new List(); + domainNames.Add(Utils.GetHostName()); + } + + // create the application uri. + if (String.IsNullOrEmpty(applicationUri)) + { + StringBuilder builder = new StringBuilder(); + + builder.Append("urn:"); + builder.Append(domainNames[0]); + builder.Append(":"); + builder.Append(applicationName); + + applicationUri = builder.ToString(); + } + + Uri uri = Utils.ParseUri(applicationUri); + + if (uri == null) + { + throw new ArgumentNullException(nameof(applicationUri), "Must specify a valid URL."); + } + + // create the subject name, + if (String.IsNullOrEmpty(subjectName)) + { + subjectName = Utils.Format("CN={0}", applicationName); + } + + if (!subjectName.Contains("CN=")) + { + subjectName = Utils.Format("CN={0}", subjectName); + } + + if (domainNames != null && domainNames.Count > 0) + { + if (!subjectName.Contains("DC=") && !subjectName.Contains("=")) + { + subjectName += Utils.Format(", DC={0}", domainNames[0]); + } + else + { + subjectName = Utils.ReplaceDCLocalhost(subjectName, domainNames[0]); + } + } + } + #endregion + + private static Dictionary m_certificates = new Dictionary(); + private static object m_certificatesLock = new object(); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateIdentifier.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateIdentifier.cs new file mode 100644 index 00000000..c720eba7 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateIdentifier.cs @@ -0,0 +1,814 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// The identifier for an X509 certificate. + /// + public partial class CertificateIdentifier : IFormattable + { + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (!String.IsNullOrEmpty(format)) + { + throw new FormatException(); + } + + return ToString(); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + if (m_certificate != null) + { + return GetDisplayName(m_certificate); + } + + if (m_subjectName != null) + { + return m_subjectName; + } + + return m_thumbprint; + } + + /// + /// Returns true if the objects are equal. + /// + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + CertificateIdentifier id = obj as CertificateIdentifier; + + if (id == null) + { + return false; + } + + if (m_certificate != null && id.m_certificate != null) + { + return m_certificate.Thumbprint == id.m_certificate.Thumbprint; + } + + if (Thumbprint == id.Thumbprint) + { + return true; + } + + if (m_storeLocation != id.m_storeLocation) + { + return false; + } + + if (m_storeName != id.m_storeName) + { + return false; + } + + if (SubjectName != id.SubjectName) + { + return false; + } + + return true; + } + + /// + /// Returns a suitable hash code. + /// + /// + public override int GetHashCode() + { + return base.GetHashCode(); + } + #endregion + + #region Public Properties + /// + /// Gets or sets the validation options. + /// + /// + /// The validation options that can be used to suppress certificate validation errors. + /// + public CertificateValidationOptions ValidationOptions + { + get { return m_validationOptions; } + set { m_validationOptions = value; } + } + #endregion + + #region Public Methods + /// + /// Gets or sets the actual certificate. + /// + /// The X509 certificate used by this instance. + public X509Certificate2 Certificate + { + get { return m_certificate; } + set { m_certificate = value; } + } + + /// + /// Finds a certificate in a store. + /// + public async Task Find() + { + return await Find(false); + } + + /// + /// Loads the private key for the certificate with an optional password. + /// + public Task LoadPrivateKey(string password) + => LoadPrivateKeyEx(password != null ? new CertificatePasswordProvider(password) : null); + + /// + /// Loads the private key for the certificate with an optional password. + /// + public async Task LoadPrivateKeyEx(ICertificatePasswordProvider passwordProvider) + { + if (this.StoreType == CertificateStoreType.Directory) + { + using (DirectoryCertificateStore store = new DirectoryCertificateStore()) + { + store.Open(this.StorePath); + string password = passwordProvider?.GetPassword(this); + m_certificate = store.LoadPrivateKey(this.Thumbprint, this.SubjectName, password); + return m_certificate; + } + } + + return await Find(true); + } + + /// + /// Finds a certificate in a store. + /// + /// if set to true the returned certificate must contain the private key. + /// An instance of the that is emebeded by this instance or find it in + /// the selected strore pointed out by the using selected . + public async Task Find(bool needPrivateKey) + { + X509Certificate2 certificate = null; + + // check if the entire certificate has been specified. + if (m_certificate != null && (!needPrivateKey || m_certificate.HasPrivateKey)) + { + certificate = m_certificate; + } + else + { + // open store. + using (ICertificateStore store = CertificateStoreIdentifier.CreateStore(StoreType)) + { + store.Open(StorePath); + + X509Certificate2Collection collection = await store.Enumerate(); + + certificate = Find(collection, m_thumbprint, m_subjectName, needPrivateKey); + + if (certificate != null) + { + m_certificate = certificate; + } + } + } + + // use the single instance in the certificate cache. + if (needPrivateKey) + { + certificate = m_certificate = CertificateFactory.Load(certificate, true); + } + + return certificate; + } + + /// + /// Updates the object from another object (usage is not updated). + /// + /// The certificate. + private void Paste(CertificateIdentifier certificate) + { + this.SubjectName = certificate.SubjectName; + this.Thumbprint = certificate.Thumbprint; + this.RawData = certificate.RawData; + this.ValidationOptions = certificate.ValidationOptions; + this.Certificate = certificate.Certificate; + } + + /// + /// Returns a display name for a certificate. + /// + /// The certificate. + /// + /// A string containg FriendlyName of the or created using Subject of + /// the . + /// + private static string GetDisplayName(X509Certificate2 certificate) + { + if (!String.IsNullOrEmpty(certificate.FriendlyName)) + { + return certificate.FriendlyName; + } + + string name = certificate.Subject; + + // find the common name delimiter. + int index = name.IndexOf("CN", StringComparison.Ordinal); + + if (index == -1) + { + return name; + } + + StringBuilder buffer = new StringBuilder(name.Length); + + // skip characters until finding the '=' character + for (int ii = index + 2; ii < name.Length; ii++) + { + if (name[ii] == '=') + { + index = ii + 1; + break; + } + } + + // skip whitespace. + for (int ii = index; ii < name.Length; ii++) + { + if (!Char.IsWhiteSpace(name[ii])) + { + index = ii; + break; + } + } + + // read the common until finding a ','. + for (int ii = index; ii < name.Length; ii++) + { + if (name[ii] == ',') + { + break; + } + + buffer.Append(name[ii]); + } + + return buffer.ToString(); + } + + /// + /// Finds a certificate in the specified collection. + /// + /// The collection. + /// The thumbprint of the certificate. + /// Subject name of the certificate. + /// if set to true [need private key]. + /// + public static X509Certificate2 Find(X509Certificate2Collection collection, string thumbprint, string subjectName, bool needPrivateKey) + { + // find by thumbprint. + if (!String.IsNullOrEmpty(thumbprint)) + { + collection = collection.Find(X509FindType.FindByThumbprint, thumbprint, false); + + foreach (X509Certificate2 certificate in collection) + { + if (!needPrivateKey || certificate.HasPrivateKey) + { + if (String.IsNullOrEmpty(subjectName)) + { + return certificate; + } + + List subjectName2 = X509Utils.ParseDistinguishedName(subjectName); + + if (X509Utils.CompareDistinguishedName(certificate, subjectName2)) + { + return certificate; + } + } + } + + return null; + } + // find by subject name. + if (!String.IsNullOrEmpty(subjectName)) + { + List subjectName2 = X509Utils.ParseDistinguishedName(subjectName); + + foreach (X509Certificate2 certificate in collection) + { + if (X509Utils.CompareDistinguishedName(certificate, subjectName2)) + { + if (!needPrivateKey || certificate.HasPrivateKey) + { + return certificate; + } + } + } + + collection = collection.Find(X509FindType.FindBySubjectName, subjectName, false); + + foreach (X509Certificate2 certificate in collection) + { + if (!needPrivateKey || certificate.HasPrivateKey) + { + return certificate; + } + } + } + + // certificate not found. + return null; + } + + /// + /// Creates a DER blob from a certificate with zero or more supporting certificates. + /// + /// The certificates list to be returned as raw data. + /// + /// A DER blob containing zero or more certificates. + /// + /// If the is null or empty. + public static byte[] CreateBlob(IList certificates) + { + if (certificates == null || certificates.Count == 0) + { + throw new CryptographicException("Primary certificate has not been provided."); + } + + // copy the primary certificate. + X509Certificate2 certificate = certificates[0]; + byte[] blobData = certificate.RawData; + + // check for any supporting certificates. + if (certificates.Count > 1) + { + List additionalData = new List(certificates.Count - 1); + int length = blobData.Length; + + for (int ii = 1; ii < certificates.Count; ii++) + { + byte[] bytes = certificates[ii].RawData; + length += bytes.Length; + additionalData.Add(bytes); + } + + // append the supporting certificates to the raw data. + byte[] rawData = new byte[length]; + Array.Copy(blobData, rawData, blobData.Length); + + length = blobData.Length; + + for (int ii = 0; ii < additionalData.Count; ii++) + { + byte[] bytes = additionalData[ii]; + Array.Copy(bytes, 0, rawData, length, bytes.Length); + length += bytes.Length; + } + + blobData = rawData; + } + + return blobData; + } + + /// + /// Parses a blob with a list of DER encoded certificates. + /// + /// The encoded data. + /// + /// An object of containing + /// certificates created from a buffer with DER encoded certificate + /// + /// + /// Any supporting certificates found in the buffer are processed as well. + /// + public static X509Certificate2Collection ParseBlob(byte[] encodedData) + { + if (!IsValidCertificateBlob(encodedData)) + { + throw new CryptographicException("Primary certificate in blob is not valid."); + } + + X509Certificate2Collection collection = new X509Certificate2Collection(); + X509Certificate2 certificate = CertificateFactory.Create(encodedData, true); + collection.Add(certificate); + + byte[] rawData = encodedData; + byte[] data = certificate.RawData; + + int processedBytes = data.Length; + + if (encodedData.Length < processedBytes) + { + byte[] buffer = new byte[encodedData.Length - processedBytes]; + + do + { + Array.Copy(encodedData, processedBytes, buffer, 0, encodedData.Length - processedBytes); + + if (!IsValidCertificateBlob(buffer)) + { + throw new CryptographicException("Supporting certificate in blob is not valid."); + } + + X509Certificate2 issuerCertificate = CertificateFactory.Create(buffer, true); + collection.Add(issuerCertificate); + data = issuerCertificate.RawData; + processedBytes += data.Length; + } + while (processedBytes < encodedData.Length); + } + + return collection; + } + + /// + /// Returns an object that can be used to access the store containing the certificate. + /// + /// An instance of the poined out by the current value of + public ICertificateStore OpenStore() + { + ICertificateStore store = CertificateStoreIdentifier.CreateStore(this.StoreType); + store.Open(this.StorePath); + return store; + } + #endregion + + #region Private Methods + /// + /// Checks if the certificate data represents a valid X509v3 certificate. + /// + /// The raw data of a object. + /// + /// true if is a valid certificate BLOB; otherwise, false. + /// + private static bool IsValidCertificateBlob(byte[] rawData) + { + // check for header. + if (rawData == null || rawData.Length < 4) + { + return false; + } + + // check for ASN.1 header. + if (rawData[0] != 0x30) + { + return false; + } + + // extract length. + int length = 0; + byte octet = rawData[1]; + + // check for short for encoding. + if ((octet & 0x80) == 0) + { + length = octet & 0x7F; + + if (2 + length < rawData.Length) + { + return false; + } + + return true; + } + + // extract number of bytes for the length. + int lengthBytes = octet & 0x7F; + + if (rawData.Length <= 2 + lengthBytes) + { + return false; + } + + // check for unexpected negative number. + if ((rawData[2] & 0x80) != 0) + { + return false; + } + + // extract length. + length = rawData[2]; + + for (int ii = 0; ii < lengthBytes - 1; ii++) + { + length <<= 8; + length |= rawData[ii + 3]; + } + + if (2 + lengthBytes + length > rawData.Length) + { + return false; + } + + // potentially valid. + return true; + } + #endregion + } + + #region CertificateIdentifierCollection Class + /// + /// A collection of CertificateIdentifier objects. + /// + public partial class CertificateIdentifierCollection : ICertificateStore + { + /// + /// Creates a new object that is a copy of the current instance. + /// + /// + /// A new object that is a copy of this instance. + /// + public new object MemberwiseClone() + { + CertificateIdentifierCollection collection = new CertificateIdentifierCollection(); + + for (int ii = 0; ii < this.Count; ii++) + { + collection.Add((CertificateIdentifier)Utils.Clone(this[ii])); + } + + return collection; + } + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // nothing to do. + } + } + #endregion + + #region ICertificateStore Members + /// + /// Opens the store at the specified location. + /// + /// The location. + /// + /// The syntax depends on the store implementation. + /// + public void Open(string location) + { + // nothing to do. + } + + /// + /// Closes the store. + /// + public void Close() + { + // nothing to do. + } + + /// + /// Enumerates the certificates in the store. + /// + /// + /// Identifiers which do not refer to valid certificates are ignored. + /// + /// The list of valid certificates in the store. + public async Task Enumerate() + { + X509Certificate2Collection collection = new X509Certificate2Collection(); + + for (int ii = 0; ii < this.Count; ii++) + { + X509Certificate2 certificate = await this[ii].Find(false); + + if (certificate != null) + { + collection.Add(certificate); + } + } + + return collection; + } + + /// + /// Adds a certificate to the store. + /// + /// The certificate. + /// The password of the certificate. + public async Task Add(X509Certificate2 certificate, string password = null) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + + for (int ii = 0; ii < this.Count; ii++) + { + X509Certificate2 current = await this[ii].Find(false); + + if (current != null && current.Thumbprint == certificate.Thumbprint) + { + throw ServiceResultException.Create( + StatusCodes.BadEntryExists, + "A certificate with the specified thumbprint already exists. Subject={0}, Thumbprint={1}", + certificate.SubjectName, + certificate.Thumbprint); + } + } + + this.Add(new CertificateIdentifier(certificate)); + } + + /// + /// Deletes a certificate from the store. + /// + /// The thumbprint. + /// True if the certificate exists. + public async Task Delete(string thumbprint) + { + if (String.IsNullOrEmpty(thumbprint)) + { + return false; + } + + for (int ii = 0; ii < this.Count; ii++) + { + X509Certificate2 certificate = await this[ii].Find(false); + + if (certificate != null && certificate.Thumbprint == thumbprint) + { + this.RemoveAt(ii); + return true; + } + } + + return false; + } + + /// + /// Finds the certificate with the specified thumprint. + /// + /// The thumbprint. + /// The matching certificate + public async Task FindByThumbprint(string thumbprint) + { + if (String.IsNullOrEmpty(thumbprint)) + { + return null; + } + + for (int ii = 0; ii < this.Count; ii++) + { + X509Certificate2 certificate = await this[ii].Find(false); + + if (certificate != null && certificate.Thumbprint == thumbprint) + { + return new X509Certificate2Collection { certificate }; + } + } + + return new X509Certificate2Collection(); + } + + /// + /// Whether the store support CRLs. + /// + public bool SupportsCRLs { get { return false; } } + + /// + /// Checks if issuer has revoked the certificate. + /// + public StatusCode IsRevoked(X509Certificate2 issuer, X509Certificate2 certificate) + { + return StatusCodes.BadNotSupported; + } + + /// + /// Returns the CRLs in the store. + /// + public List EnumerateCRLs() + { + return new List(); + } + + /// + /// Returns the CRLs for the issuer. + /// + public List EnumerateCRLs(X509Certificate2 issuer, bool validateUpdateTime = true) + { + return new List(); + } + + /// + /// Adds a CRL to the store. + /// + public void AddCRL(X509CRL crl) + { + throw new ServiceResultException(StatusCodes.BadNotSupported); + } + + /// + /// Removes a CRL from the store. + /// + public bool DeleteCRL(X509CRL crl) + { + throw new ServiceResultException(StatusCodes.BadNotSupported); + } + #endregion + } + #endregion + + #region CertificateValidationOptions Class + /// + /// Options that can be used to suppress certificate validation errors. + /// + [Flags] + public enum CertificateValidationOptions + { + /// + /// Use the default options. + /// + Default = 0x0, + + /// + /// Ignore expired certificates. + /// + SuppressCertificateExpired = 0x1, + + /// + /// Ignore mismatches between the URL and the DNS names in the certificate. + /// + SuppressHostNameInvalid = 0x2, + + /// + /// Ignore errors when it is not possible to check the revocation status for a certificate. + /// + SuppressRevocationStatusUnknown = 0x8, + + /// + /// Attempt to check the revocation status online. + /// + CheckRevocationStatusOnline = 0x10, + + /// + /// Attempt to check the revocation status offline. + /// + CheckRevocationStatusOffine = 0x20, + + /// + /// Never trust the certificate. + /// + TreatAsInvalid = 0x40 + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificatePasswordProvider.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificatePasswordProvider.cs new file mode 100644 index 00000000..db9b65ff --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificatePasswordProvider.cs @@ -0,0 +1,55 @@ +/* Copyright (c) 1996-2021 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + #region ICertificatePasswordProvider Interface + /// + /// An interface for a password provider for certificate private keys. + /// + public interface ICertificatePasswordProvider + { + /// + /// Return the password for a certificate private key. + /// + /// The certificate identifier for which the password is needed. + string GetPassword(CertificateIdentifier certificateIdentifier); + } + #endregion + + #region CertificatePasswordProvider + /// + /// The default certificate password provider implementation. + /// + public class CertificatePasswordProvider : ICertificatePasswordProvider + { + /// + /// Constructor which takes a password string. + /// + /// + public CertificatePasswordProvider(string password) + { + m_password = password; + } + + /// + /// Return the password used for the certificate. + /// + public string GetPassword(CertificateIdentifier certificateIdentifier) + { + return m_password; + } + + private string m_password; + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateStoreIdentifier.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateStoreIdentifier.cs new file mode 100644 index 00000000..f6d06de8 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateStoreIdentifier.cs @@ -0,0 +1,186 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// Describes a certificate store. + /// + public partial class CertificateStoreIdentifier : IFormattable + { + /// + /// Creates a new object that is a copy of the current instance. + /// + public new object MemberwiseClone() + { + return base.MemberwiseClone(); + } + + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (!String.IsNullOrEmpty(format)) + { + throw new FormatException(); + } + + return ToString(); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + if (String.IsNullOrEmpty(this.StoreType)) + { + return Utils.Format("{0}", this.StorePath); + } + + return Utils.Format("[{0}]{1}", this.StoreType, this.StorePath); + } + #endregion + + #region Public Properties + /// + /// Options that can be used to suppress certificate validation errors. + /// + public CertificateValidationOptions ValidationOptions + { + get { return m_validationOptions; } + set { m_validationOptions = value; } + } + #endregion + + #region Public Methods + /// + /// Detects the type of store represented by the path. + /// + public static string DetermineStoreType(string storePath) + { + if (String.IsNullOrEmpty(storePath)) + { + return CertificateStoreType.Directory; + } + + if (storePath.StartsWith("LocalMachine\\", StringComparison.OrdinalIgnoreCase)) + { + return CertificateStoreType.X509Store; + } + + if (storePath.StartsWith("CurrentUser\\", StringComparison.OrdinalIgnoreCase)) + { + return CertificateStoreType.X509Store; + } + + if (storePath.StartsWith("User\\", StringComparison.OrdinalIgnoreCase)) + { + return CertificateStoreType.X509Store; + } + + if (storePath.StartsWith("Service\\", StringComparison.OrdinalIgnoreCase)) + { + return CertificateStoreType.X509Store; + } + + return CertificateStoreType.Directory; + } + + /// + /// Returns an object that can be used to access the store. + /// + public static ICertificateStore CreateStore(string storeType) + { + ICertificateStore store = null; + + if (String.IsNullOrEmpty(storeType)) + { + return new CertificateIdentifierCollection(); + } + + switch (storeType) + { + case CertificateStoreType.X509Store: + { + store = new X509CertificateStore(); + break; + } + case CertificateStoreType.Directory: + { + store = new DirectoryCertificateStore(); + break; + } + } + return store; + } + + /// + /// Returns an object that can be used to access the store. + /// + public ICertificateStore OpenStore() + { + ICertificateStore store = CreateStore(this.StoreType); + store.Open(this.StorePath); + return store; + } + + /// + /// Opens the store. + /// + /// The path. + /// The store. + public static ICertificateStore OpenStore(string path) + { + ICertificateStore store = CertificateStoreIdentifier.CreateStore(CertificateStoreIdentifier.DetermineStoreType(path)); + store.Open(path); + return store; + } + #endregion + } + + #region CertificateStoreType Class + /// + /// The type of certificate store. + /// + public static class CertificateStoreType + { + /// + /// A windows certificate store. + /// + public const string X509Store = "X509Store"; + + /// + /// A directory certificate store. + /// + public const string Directory = "Directory"; + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateTrustList.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateTrustList.cs new file mode 100644 index 00000000..c3c5d4bb --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateTrustList.cs @@ -0,0 +1,91 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua +{ + #region CertificateTrustList Class + /// + /// A list of trusted certificates. + /// + /// + /// Administrators can create a list of trusted certificates by designating all certificates + /// in a particular certificate store as trusted and/or by explictly specifying a list of + /// individual certificates. + /// + /// A trust list can contain either instance certificates or certification authority certificates. + /// If the list contains instance certificates the application will trust peers that use the + /// instance certificate (provided the ApplicationUri and HostName match the certificate). + /// + /// If the list contains certification authority certificates then the application will trust + /// peers that have certificates issued by one of the authorities. + /// + /// Any certificate could be revoked by the issuer (CAs may issue certificates for other CAs). + /// The RevocationMode specifies whether this check should be done each time a certificate + /// in the list are used. + /// + public partial class CertificateTrustList : CertificateStoreIdentifier + { + #region Public Methods + /// + /// Returns the certificates in the trust list. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public async Task GetCertificates() + { + X509Certificate2Collection collection = new X509Certificate2Collection(); + + CertificateStoreIdentifier id = new CertificateStoreIdentifier(); + + id.StoreType = this.StoreType; + id.StorePath = this.StorePath; + + if (!String.IsNullOrEmpty(id.StorePath)) + { + try + { + ICertificateStore store = id.OpenStore(); + + try + { + collection = await store.Enumerate(); + } + finally + { + store.Close(); + } + } + catch (Exception) + { + Utils.Trace("Could not load certificates from store: {0}.", this.StorePath); + } + } + + foreach (CertificateIdentifier trustedCertificate in TrustedCertificates) + { + X509Certificate2 certificate = await trustedCertificate.Find(); + + if (certificate != null) + { + collection.Add(certificate); + } + } + + return collection; + } + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateValidator.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateValidator.cs new file mode 100644 index 00000000..73157031 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/CertificateValidator.cs @@ -0,0 +1,1258 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + + /// + /// Validates certificates. + /// + public class CertificateValidator : ICertificateValidator + { + #region Constructors + /// + /// The default constructor. + /// + public CertificateValidator() + { + m_validatedCertificates = new Dictionary(); + m_rejectSHA1SignedCertificates = CertificateFactory.DefaultHashSize >= 256; + m_rejectUnknownRevocationStatus = false; + m_minimumCertificateKeySize = CertificateFactory.DefaultKeySize; + } + #endregion + + #region Public Methods + /// + /// Raised when a certificate validation error occurs. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly")] + public event CertificateValidationEventHandler CertificateValidation + { + add + { + lock (m_callbackLock) + { + m_CertificateValidation += value; + } + } + + remove + { + lock (m_callbackLock) + { + m_CertificateValidation -= value; + } + } + } + + /// + /// Raised when an application certificate update occurs. + /// + public event CertificateUpdateEventHandler CertificateUpdate + { + add + { + lock (m_callbackLock) + { + m_CertificateUpdate += value; + } + } + + remove + { + lock (m_callbackLock) + { + m_CertificateUpdate -= value; + } + } + } + + /// + /// Updates the validator with the current state of the configuration. + /// + public virtual async Task Update(ApplicationConfiguration configuration) + { + if (configuration == null) + { + throw new ArgumentNullException(nameof(configuration)); + } + + await Update(configuration.SecurityConfiguration); + } + + /// + /// Updates the validator with a new set of trust lists. + /// + public virtual void Update( + CertificateTrustList issuerStore, + CertificateTrustList trustedStore, + CertificateStoreIdentifier rejectedCertificateStore) + { + lock (m_lock) + { + m_validatedCertificates.Clear(); + + m_trustedCertificateStore = null; + m_trustedCertificateList = null; + + if (trustedStore != null) + { + m_trustedCertificateStore = new CertificateStoreIdentifier(); + + m_trustedCertificateStore.StoreType = trustedStore.StoreType; + m_trustedCertificateStore.StorePath = trustedStore.StorePath; + m_trustedCertificateStore.ValidationOptions = trustedStore.ValidationOptions; + + if (trustedStore.TrustedCertificates != null) + { + m_trustedCertificateList = new CertificateIdentifierCollection(); + m_trustedCertificateList.AddRange(trustedStore.TrustedCertificates); + } + } + + + m_issuerCertificateStore = null; + m_issuerCertificateList = null; + + if (issuerStore != null) + { + m_issuerCertificateStore = new CertificateStoreIdentifier(); + + m_issuerCertificateStore.StoreType = issuerStore.StoreType; + m_issuerCertificateStore.StorePath = issuerStore.StorePath; + m_issuerCertificateStore.ValidationOptions = issuerStore.ValidationOptions; + + if (issuerStore.TrustedCertificates != null) + { + m_issuerCertificateList = new CertificateIdentifierCollection(); + m_issuerCertificateList.AddRange(issuerStore.TrustedCertificates); + } + } + + m_rejectedCertificateStore = null; + + if (rejectedCertificateStore != null) + { + m_rejectedCertificateStore = (CertificateStoreIdentifier)rejectedCertificateStore.MemberwiseClone(); + } + } + } + + /// + /// Updates the validator with the current state of the configuration. + /// + public virtual async Task Update(SecurityConfiguration configuration) + { + if (configuration == null) + { + throw new ArgumentNullException(nameof(configuration)); + } + + lock (m_lock) + { + Update( + configuration.TrustedIssuerCertificates, + configuration.TrustedPeerCertificates, + configuration.RejectedCertificateStore); + m_rejectSHA1SignedCertificates = configuration.RejectSHA1SignedCertificates; + m_rejectUnknownRevocationStatus = configuration.RejectUnknownRevocationStatus; + m_minimumCertificateKeySize = configuration.MinimumCertificateKeySize; + } + + if (configuration.ApplicationCertificate != null) + { + m_applicationCertificate = await configuration.ApplicationCertificate.Find(true); + } + } + + /// + /// Updates the validator with a new application certificate. + /// + public virtual async Task UpdateCertificate(SecurityConfiguration securityConfiguration) + { + lock (m_lock) + { + securityConfiguration.ApplicationCertificate.Certificate = null; + } + + await Update(securityConfiguration); + await securityConfiguration.ApplicationCertificate.LoadPrivateKeyEx( + securityConfiguration.CertificatePasswordProvider); + + lock (m_callbackLock) + { + if (m_CertificateUpdate != null) + { + var args = new CertificateUpdateEventArgs(securityConfiguration, GetChannelValidator()); + m_CertificateUpdate(this, args); + } + } + } + + + /// + /// Validates the specified certificate against the trust list. + /// + /// The certificate. + public void Validate(X509Certificate2 certificate) + { + Validate(new X509Certificate2Collection() { certificate }); + } + + /// + /// Validates a certificate. + /// + /// + /// Each UA application may have a list of trusted certificates that is different from + /// all other UA applications that may be running on the same machine. As a result, the + /// certificate validator cannot rely completely on the Windows certificate store and + /// user or machine specific CTLs (certificate trust lists). + /// + /// The validator constructs the trust chain for the certificate and follows the chain + /// until it finds a certification that is in the application trust list. Non-fatal trust + /// chain errors (i.e. certificate expired) are ignored if the certificate is in the + /// application trust list. + /// + /// If no certificate in the chain is trusted then the validator will still accept the + /// certification if there are no trust chain errors. + /// + /// The validator may be configured to ignore the application trust list and/or trust chain. + /// + public virtual void Validate(X509Certificate2Collection chain) + { + Validate(chain, null); + } + + /// + /// Validates a certificate with domain validation check. + /// + /// + public virtual void Validate(X509Certificate2Collection chain, ConfiguredEndpoint endpoint) + { + X509Certificate2 certificate = chain[0]; + + try + { + lock (m_lock) + { + + InternalValidate(chain, endpoint).GetAwaiter().GetResult(); + + // add to list of validated certificates. + m_validatedCertificates[certificate.Thumbprint] = new X509Certificate2(certificate.RawData); + } + } + catch (ServiceResultException se) + { + // check for errors that may be suppressed. + if (ContainsUnsuppressibleSC(se.Result)) + { + SaveCertificate(certificate); + Utils.Trace(Utils.TraceMasks.Error, "Certificate '{0}' rejected. Reason={1}.", certificate.Subject, se.Result.ToString()); + TraceInnerServiceResults(se.Result); + throw new ServiceResultException(se, StatusCodes.BadCertificateInvalid); + } + else + { + Utils.Trace("Certificate Vaildation failed for '{0}'. Reason={1}", certificate.Subject, se.ToLongString()); + TraceInnerServiceResults(se.Result); + } + + // invoke callback. + bool accept = false; + + ServiceResult serviceResult = se.Result; + lock (m_callbackLock) + { + if (m_CertificateValidation != null) + { + do + { + CertificateValidationEventArgs args = new CertificateValidationEventArgs(serviceResult, certificate); + m_CertificateValidation(this, args); + if (args.AcceptAll) + { + accept = true; + serviceResult = null; + break; + } + accept = args.Accept; + if (accept) + { + serviceResult = serviceResult.InnerResult; + } + else + { + // report the rejected service result + se = new ServiceResultException(serviceResult); + } + } while (accept && serviceResult != null); + } + } + + // throw if rejected. + if (!accept) + { + // write the invalid certificate to rejected store if specified. + Utils.Trace(Utils.TraceMasks.Error, "Certificate '{0}' rejected. Reason={1}", + certificate.Subject, serviceResult != null ? serviceResult.ToString() : "Unknown Error" ); + SaveCertificate(certificate); + + throw new ServiceResultException(se, StatusCodes.BadCertificateInvalid); + } + + // add to list of peers. + lock (m_lock) + { + Utils.Trace("Validation error suppressed for '{0}'.", certificate.Subject); + m_validatedCertificates[certificate.Thumbprint] = new X509Certificate2(certificate.RawData); + } + } + } + + /// + /// recursively checks whether any of the service results or inner service results + /// of the input sr must not be suppressed. + /// The list of supressible status codes is - for backwards compatibiliyt - longer + /// than the spec would imply. + /// (BadCertificateUntrusted and BadCertificateChainIncomplete + /// must not be supressed according to (e.g.) version 1.04 of the spec) + /// + /// + static private bool ContainsUnsuppressibleSC(ServiceResult sr) + { + while (sr != null) + { + if (!m_suppressibleStatusCodes.Contains(sr.StatusCode)) + { + return true; + } + sr = sr.InnerResult; + } + return false; + } + + /// + /// List all reasons for failing cert validation. + /// + private static void TraceInnerServiceResults(ServiceResult result) + { + while (result != null) + { + Utils.Trace(Utils.TraceMasks.Security, " -- {0}", result.ToString()); + result = result.InnerResult; + } + } + + /// + /// Saves the certificate in the rejected certificate store. + /// + private void SaveCertificate(X509Certificate2 certificate) + { + lock (m_lock) + { + if (m_rejectedCertificateStore != null) + { + Utils.Trace(Utils.TraceMasks.Error, "Writing rejected certificate to directory: {0}", m_rejectedCertificateStore); + try + { + ICertificateStore store = m_rejectedCertificateStore.OpenStore(); + + try + { + store.Delete(certificate.Thumbprint); + store.Add(certificate); + } + finally + { + store.Close(); + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not write certificate to directory: {0}", m_rejectedCertificateStore); + } + } + } + } + + /// + /// Returns the certificate information for a trusted peer certificate. + /// + private async Task GetTrustedCertificate(X509Certificate2 certificate) + { + // check if explicitly trusted. + if (m_trustedCertificateList != null) + { + for (int ii = 0; ii < m_trustedCertificateList.Count; ii++) + { + X509Certificate2 trusted = await m_trustedCertificateList[ii].Find(false); + + if (trusted != null && trusted.Thumbprint == certificate.Thumbprint) + { + if (Utils.IsEqual(trusted.RawData, certificate.RawData)) + { + return m_trustedCertificateList[ii]; + } + } + } + } + + // check if in peer trust store. + if (m_trustedCertificateStore != null) + { + ICertificateStore store = m_trustedCertificateStore.OpenStore(); + + try + { + X509Certificate2Collection trusted = await store.FindByThumbprint(certificate.Thumbprint); + + for (int ii = 0; ii < trusted.Count; ii++) + { + if (Utils.IsEqual(trusted[ii].RawData, certificate.RawData)) + { + return new CertificateIdentifier(trusted[ii], m_trustedCertificateStore.ValidationOptions); + } + } + } + finally + { + store.Close(); + } + } + + // not a trusted. + return null; + } + + /// + /// Returns true if the certificate matches the criteria. + /// + private bool Match( + X509Certificate2 certificate, + string subjectName, + string serialNumber, + string authorityKeyId) + { + // check for null. + if (certificate == null) + { + return false; + } + + // check for subject name match. + if (!X509Utils.CompareDistinguishedName(certificate.SubjectName.Name, subjectName)) + { + return false; + } + + // check for serial number match. + if (!String.IsNullOrEmpty(serialNumber)) + { + if (certificate.SerialNumber != serialNumber) + { + return false; + } + } + + // check for authority key id match. + if (!String.IsNullOrEmpty(authorityKeyId)) + { + X509SubjectKeyIdentifierExtension subjectKeyId = X509Extensions.FindExtension(certificate); + + if (subjectKeyId != null) + { + if (subjectKeyId.SubjectKeyIdentifier != authorityKeyId) + { + return false; + } + } + } + + // found match. + return true; + } + + /// + /// Returns the issuers for the certificates. + /// + public async Task GetIssuers(X509Certificate2Collection certificates, List issuers) + { + bool isTrusted = false; + CertificateIdentifier issuer = null; + X509Certificate2 certificate = certificates[0]; + + CertificateIdentifierCollection collection = new CertificateIdentifierCollection(); + for (int ii = 1; ii < certificates.Count; ii++) + { + collection.Add(new CertificateIdentifier(certificates[ii])); + } + + do + { + issuer = await GetIssuer(certificate, m_trustedCertificateList, m_trustedCertificateStore, true); + + if (issuer == null) + { + issuer = await GetIssuer(certificate, m_issuerCertificateList, m_issuerCertificateStore, true); + + if (issuer == null) + { + issuer = await GetIssuer(certificate, collection, null, true); + } + } + else + { + isTrusted = true; + } + + if (issuer != null) + { + issuers.Add(issuer); + certificate = await issuer.Find(false); + + // check for root. + if (X509Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer)) + { + break; + } + } + } + while (issuer != null); + + return isTrusted; + } + + /// + /// Returns the issuers for the certificate. + /// + /// The certificate. + /// The issuers. + /// + public Task GetIssuers(X509Certificate2 certificate, List issuers) + { + return GetIssuers(new X509Certificate2Collection { certificate }, issuers); + } + + /// + /// Returns the certificate information for a trusted issuer certificate. + /// + private async Task GetIssuer( + X509Certificate2 certificate, + CertificateIdentifierCollection explicitList, + CertificateStoreIdentifier certificateStore, + bool checkRecovationStatus) + { + // check if self-signed. + if (X509Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer)) + { + return null; + } + + string subjectName = certificate.IssuerName.Name; + string keyId = null; + string serialNumber = null; + + // find the authority key identifier. + X509AuthorityKeyIdentifierExtension authority = X509Extensions.FindExtension(certificate); + + if (authority != null) + { + keyId = authority.KeyIdentifier; + serialNumber = authority.SerialNumber; + } + + // check in explicit list. + if (explicitList != null) + { + for (int ii = 0; ii < explicitList.Count; ii++) + { + X509Certificate2 issuer = await explicitList[ii].Find(false); + + if (issuer != null) + { + if (!X509Utils.IsIssuerAllowed(issuer)) + { + continue; + } + + if (Match(issuer, subjectName, serialNumber, keyId)) + { + // can't check revocation. + return new CertificateIdentifier(issuer, CertificateValidationOptions.SuppressRevocationStatusUnknown); + } + } + } + } + + // check in certificate store. + if (certificateStore != null) + { + ICertificateStore store = certificateStore.OpenStore(); + + try + { + X509Certificate2Collection certificates = await store.Enumerate(); + + for (int ii = 0; ii < certificates.Count; ii++) + { + X509Certificate2 issuer = certificates[ii]; + + if (issuer != null) + { + if (!X509Utils.IsIssuerAllowed(issuer)) + { + continue; + } + + if (Match(issuer, subjectName, serialNumber, keyId)) + { + CertificateValidationOptions options = certificateStore.ValidationOptions; + + // already checked revocation for file based stores. windows based stores always suppress. + options |= CertificateValidationOptions.SuppressRevocationStatusUnknown; + + if (checkRecovationStatus) + { + StatusCode status = store.IsRevoked(issuer, certificate); + + if (StatusCode.IsBad(status) && status != StatusCodes.BadNotSupported) + { + if (status == StatusCodes.BadCertificateRevocationUnknown) + { + if (X509Utils.IsCertificateAuthority(certificate)) + { + status.Code = StatusCodes.BadCertificateIssuerRevocationUnknown; + } + + if (m_rejectUnknownRevocationStatus) + { + throw new ServiceResultException(status); + } + } + else + { + throw new ServiceResultException(status); + } + } + } + + return new CertificateIdentifier(certificates[ii], options); + } + } + } + } + finally + { + store.Close(); + } + } + + // not a trusted issuer. + return null; + } + + /// + /// Throws an exception if validation fails. + /// + /// The certificates to be checked. + /// The endpoint for domain validation. + /// If certificate[0] cannot be accepted + protected virtual async Task InternalValidate(X509Certificate2Collection certificates, ConfiguredEndpoint endpoint) + { + X509Certificate2 certificate = certificates[0]; + + // check for previously validated certificate. + X509Certificate2 certificate2 = null; + + if (m_validatedCertificates.TryGetValue(certificate.Thumbprint, out certificate2)) + { + if (Utils.IsEqual(certificate2.RawData, certificate.RawData)) + { + return; + } + } + + CertificateIdentifier trustedCertificate = await GetTrustedCertificate(certificate); + + // get the issuers (checks the revocation lists if using directory stores). + List issuers = new List(); + bool isIssuerTrusted = await GetIssuers(certificates, issuers); + + // setup policy chain + X509ChainPolicy policy = new X509ChainPolicy(); + policy.RevocationFlag = X509RevocationFlag.EntireChain; + policy.RevocationMode = X509RevocationMode.NoCheck; + policy.VerificationFlags = X509VerificationFlags.NoFlag; + + foreach (CertificateIdentifier issuer in issuers) + { + if ((issuer.ValidationOptions & CertificateValidationOptions.SuppressRevocationStatusUnknown) != 0) + { + policy.VerificationFlags |= X509VerificationFlags.IgnoreCertificateAuthorityRevocationUnknown; + policy.VerificationFlags |= X509VerificationFlags.IgnoreCtlSignerRevocationUnknown; + policy.VerificationFlags |= X509VerificationFlags.IgnoreEndRevocationUnknown; + policy.VerificationFlags |= X509VerificationFlags.IgnoreRootRevocationUnknown; + } + + // we did the revocation check in the GetIssuers call. No need here. + policy.RevocationMode = X509RevocationMode.NoCheck; + policy.ExtraStore.Add(issuer.Certificate); + } + + // build chain. + X509Chain chain = new X509Chain(); + chain.ChainPolicy = policy; + chain.Build(certificate); + + // check the chain results. + CertificateIdentifier target = trustedCertificate; + + if (target == null) + { + target = new CertificateIdentifier(certificate); + } + + ServiceResult sresult = null; + for (int ii = 0; ii < chain.ChainElements.Count; ii++) + { + X509ChainElement element = chain.ChainElements[ii]; + + CertificateIdentifier issuer = null; + + if (ii < issuers.Count) + { + issuer = issuers[ii]; + } + // check for chain status errors. + if (element.ChainElementStatus.Length > 0) + { + foreach (X509ChainStatus status in element.ChainElementStatus) + { + ServiceResult result = CheckChainStatus(status, target, issuer, (ii != 0)); + if (ServiceResult.IsBad(result)) + { + sresult = new ServiceResult(result, sresult); + } + } + } + + if (issuer != null) + { + target = issuer; + } + } + + // check whether the chain is complete (if there is a chain) + bool issuedByCA = !X509Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer); + bool chainIncomplete = false; + if (issuers.Count > 0) + { + var rootCertificate = issuers[issuers.Count - 1].Certificate; + if (!X509Utils.CompareDistinguishedName(rootCertificate.Subject, rootCertificate.Issuer)) + { + chainIncomplete = true; + } + } + else + { + if (issuedByCA) + { + // no issuer found at all + chainIncomplete = true; + } + } + + // check if certificate issuer is trusted. + if (issuedByCA && !isIssuerTrusted && trustedCertificate == null) + { + var message = CertificateMessage("Certificate Issuer is not trusted.", certificate); + sresult = new ServiceResult(StatusCodes.BadCertificateUntrusted, + null, null, message, null, sresult); + } + + // check if certificate is trusted. + if (trustedCertificate == null && !isIssuerTrusted) + { + if (m_applicationCertificate == null || !Utils.IsEqual(m_applicationCertificate.RawData, certificate.RawData)) + { + var message = CertificateMessage("Certificate is not trusted.", certificate); + sresult = new ServiceResult(StatusCodes.BadCertificateUntrusted, + null, null, message, null, sresult); + } + } + + if (endpoint != null && !FindDomain(certificate, endpoint)) + { + string message = Utils.Format( + "The domain '{0}' is not listed in the server certificate.", + endpoint.EndpointUrl.DnsSafeHost); + sresult = new ServiceResult(StatusCodes.BadCertificateHostNameInvalid, + null, null, message, null, sresult + ); + } + + // check if certificate is valid for use as app/sw or user cert + X509KeyUsageFlags certificateKeyUsage = X509Utils.GetKeyUsage(certificate); + + if ((certificateKeyUsage & X509KeyUsageFlags.DataEncipherment) == 0) + { + sresult = new ServiceResult(StatusCodes.BadCertificateUseNotAllowed, + null, null, "Usage of certificate is not allowed.", null, sresult); + } + + // check if minimum requirements are met + if (m_rejectSHA1SignedCertificates && IsSHA1SignatureAlgorithm(certificate.SignatureAlgorithm)) + { + sresult = new ServiceResult(StatusCodes.BadCertificatePolicyCheckFailed, + null, null, "SHA1 signed certificates are not trusted.", null, sresult); + } + + int keySize = X509Utils.GetRSAPublicKeySize(certificate); + if (keySize < m_minimumCertificateKeySize) + { + sresult = new ServiceResult(StatusCodes.BadCertificatePolicyCheckFailed, + null, null, "Certificate doesn't meet minimum key length requirement.", null, sresult); + } + + if (issuedByCA && chainIncomplete) + { + var message = CertificateMessage("Certificate chain validation incomplete.", certificate); + sresult = new ServiceResult(StatusCodes.BadCertificateChainIncomplete, + null, null, message, null, sresult); + } + if (sresult != null) + { + throw new ServiceResultException(sresult); + } + } + + /// + /// Returns an object that can be used with a UA channel. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public ICertificateValidator GetChannelValidator() + { + return this; + } + + /// + /// Validate domains in a server certificate against endpoint used to connect a session. + /// + /// The server certificate returned by a session connect. + /// The endpoint used to connect to a server. + public void ValidateDomains(X509Certificate2 serverCertificate, ConfiguredEndpoint endpoint) + { + X509Certificate2 certificate2; + if (m_validatedCertificates.TryGetValue(serverCertificate.Thumbprint, out certificate2)) + { + if (Utils.IsEqual(certificate2.RawData, serverCertificate.RawData)) + { + return; + } + } + + bool domainFound = FindDomain(serverCertificate, endpoint); + + if (!domainFound) + { + bool accept = false; + string message = Utils.Format( + "The domain '{0}' is not listed in the server certificate.", + endpoint.EndpointUrl.DnsSafeHost); + var serviceResult = new ServiceResultException(StatusCodes.BadCertificateHostNameInvalid, message); + if (m_CertificateValidation != null) + { + var args = new CertificateValidationEventArgs(new ServiceResult(serviceResult), serverCertificate); + m_CertificateValidation(this, args); + accept = args.Accept || args.AcceptAll; + } + // throw if rejected. + if (!accept) + { + // write the invalid certificate to rejected store if specified. + Utils.Trace(Utils.TraceMasks.Error, "Certificate '{0}' rejected. Reason={1}", + serverCertificate.Subject, serviceResult.ToString()); + SaveCertificate(serverCertificate); + + throw serviceResult; + } + } + } + #endregion + + #region Private Methods + /// + /// Returns an error if the chain status indicates a fatal error. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private static ServiceResult CheckChainStatus(X509ChainStatus status, CertificateIdentifier id, CertificateIdentifier issuer, bool isIssuer) + { + switch (status.Status) + { + case X509ChainStatusFlags.NotValidForUsage: + { + return ServiceResult.Create( + (isIssuer) ? StatusCodes.BadCertificateUseNotAllowed : StatusCodes.BadCertificateIssuerUseNotAllowed, + "Certificate may not be used as an application instance certificate. {0}: {1}", + status.Status, + status.StatusInformation); + } + + case X509ChainStatusFlags.NoError: + case X509ChainStatusFlags.OfflineRevocation: + case X509ChainStatusFlags.InvalidBasicConstraints: + { + break; + } + + case X509ChainStatusFlags.PartialChain: + case X509ChainStatusFlags.UntrustedRoot: + { + // self signed cert signature validation + // .Net Core ChainStatus returns NotSignatureValid only on Windows, + // so we have to do the extra cert signature check on all platforms + if (issuer == null && !isIssuer && + id.Certificate != null && X509Utils.CompareDistinguishedName(id.Certificate.Subject, id.Certificate.Issuer)) + { + if (!IsSignatureValid(id.Certificate)) + { + goto case X509ChainStatusFlags.NotSignatureValid; + } + } + + // ignore this error because the root check is done + // by looking the certificate up in the trusted issuer stores passed to the validator. + // the ChainStatus uses the trusted issuer stores. + break; + } + + case X509ChainStatusFlags.RevocationStatusUnknown: + { + if (issuer != null) + { + if ((issuer.ValidationOptions & CertificateValidationOptions.SuppressRevocationStatusUnknown) != 0) + { + break; + } + } + + // check for meaning less errors for self-signed certificates. + if (id.Certificate != null && X509Utils.CompareDistinguishedName(id.Certificate.Subject, id.Certificate.Subject)) + { + break; + } + + return ServiceResult.Create( + (isIssuer) ? StatusCodes.BadCertificateIssuerRevocationUnknown : StatusCodes.BadCertificateRevocationUnknown, + "Certificate revocation status cannot be verified. {0}: {1}", + status.Status, + status.StatusInformation); + } + + case X509ChainStatusFlags.Revoked: + { + return ServiceResult.Create( + (isIssuer) ? StatusCodes.BadCertificateIssuerRevoked : StatusCodes.BadCertificateRevoked, + "Certificate has been revoked. {0}: {1}", + status.Status, + status.StatusInformation); + } + + case X509ChainStatusFlags.NotTimeNested: + { + if (id != null && ((id.ValidationOptions & CertificateValidationOptions.SuppressCertificateExpired) != 0)) + { + // TODO: add logging + break; + } + + return ServiceResult.Create( + StatusCodes.BadCertificateIssuerTimeInvalid, + "Issuer Certificate has expired or is not yet valid. {0}: {1}", + status.Status, + status.StatusInformation); + } + + case X509ChainStatusFlags.NotTimeValid: + { + if (id != null && ((id.ValidationOptions & CertificateValidationOptions.SuppressCertificateExpired) != 0)) + { + // TODO: add logging + break; + } + + return ServiceResult.Create( + (isIssuer) ? StatusCodes.BadCertificateIssuerTimeInvalid : StatusCodes.BadCertificateTimeInvalid, + "Certificate has expired or is not yet valid. {0}: {1}", + status.Status, + status.StatusInformation); + } + + case X509ChainStatusFlags.NotSignatureValid: + default: + { + return ServiceResult.Create( + StatusCodes.BadCertificateInvalid, + "Certificate validation failed. {0}: {1}", + status.Status, + status.StatusInformation); + } + } + + return null; + } + /// + /// Returns if a certificate is signed with a SHA1 algorithm. + /// + private static bool IsSHA1SignatureAlgorithm(Oid oid) + { + return oid.Value == "1.3.14.3.2.29" || // sha1RSA + oid.Value == "1.2.840.10040.4.3" || // sha1DSA + oid.Value == "1.2.840.10045.4.1" || // sha1ECDSA + oid.Value == "1.2.840.113549.1.1.5" || // sha1RSA + oid.Value == "1.3.14.3.2.13" || // sha1DSA + oid.Value == "1.3.14.3.2.27"; // dsaSHA1 + } + + /// + /// Returns a certificate information message. + /// + private string CertificateMessage(string error, X509Certificate2 certificate) + { + var message = new StringBuilder(); + message.AppendLine(error); + message.AppendFormat("SubjectName: {0}", certificate.SubjectName.Name); + message.AppendLine(); + message.AppendFormat("IssuerName: {0}", certificate.IssuerName.Name); + message.AppendLine(); + return message.ToString(); + } + + /// + /// Returns if a self signed certificate is properly signed. + /// + private static bool IsSignatureValid(X509Certificate2 cert) + { + return X509Utils.VerifySelfSigned(cert); + } + + /// + /// The list of suppressible status codes. + /// + private static readonly ReadOnlyList m_suppressibleStatusCodes = + new ReadOnlyList( + new List + { + StatusCodes.BadCertificateHostNameInvalid, + StatusCodes.BadCertificateIssuerRevocationUnknown, + StatusCodes.BadCertificateChainIncomplete, + StatusCodes.BadCertificateIssuerTimeInvalid, + StatusCodes.BadCertificateIssuerUseNotAllowed, + StatusCodes.BadCertificateRevocationUnknown, + StatusCodes.BadCertificateTimeInvalid, + StatusCodes.BadCertificatePolicyCheckFailed, + StatusCodes.BadCertificateUseNotAllowed, + StatusCodes.BadCertificateUntrusted + }); + + /// + /// Find the domain in a certificate in the + /// endpoint that was used to connect a session. + /// + /// The server certificate which is tested for domain names. + /// The endpoint which was used to connect. + /// True if domain was found. + private bool FindDomain(X509Certificate2 serverCertificate, ConfiguredEndpoint endpoint) + { + bool domainFound = false; + + // check the certificate domains. + IList domains = X509Utils.GetDomainsFromCertficate(serverCertificate); + + if (domains != null && domains.Count > 0) + { + string hostname; + string dnsHostName = hostname = endpoint.EndpointUrl.DnsSafeHost; + bool isLocalHost = false; + if (endpoint.EndpointUrl.HostNameType == UriHostNameType.Dns) + { + if (String.Equals(dnsHostName, "localhost", StringComparison.InvariantCultureIgnoreCase)) + { + isLocalHost = true; + } + else + { // strip domain names from hostname + hostname = dnsHostName.Split('.')[0]; + } + } + else + { // dnsHostname is a IPv4 or IPv6 address + // normalize ip addresses, cert parser returns normalized addresses + hostname = Utils.NormalizedIPAddress(dnsHostName); + if (hostname == "127.0.0.1" || hostname == "::1") + { + isLocalHost = true; + } + } + + if (isLocalHost) + { + dnsHostName = Utils.GetFullQualifiedDomainName(); + hostname = Utils.GetHostName(); + } + + for (int ii = 0; ii < domains.Count; ii++) + { + if (String.Equals(hostname, domains[ii], StringComparison.OrdinalIgnoreCase) || + String.Equals(dnsHostName, domains[ii], StringComparison.OrdinalIgnoreCase)) + { + domainFound = true; + break; + } + } + } + return domainFound; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private object m_callbackLock = new object(); + private Dictionary m_validatedCertificates; + private CertificateStoreIdentifier m_trustedCertificateStore; + private CertificateIdentifierCollection m_trustedCertificateList; + private CertificateStoreIdentifier m_issuerCertificateStore; + private CertificateIdentifierCollection m_issuerCertificateList; + private CertificateStoreIdentifier m_rejectedCertificateStore; + private event CertificateValidationEventHandler m_CertificateValidation; + private event CertificateUpdateEventHandler m_CertificateUpdate; + private X509Certificate2 m_applicationCertificate; + private bool m_rejectSHA1SignedCertificates; + private bool m_rejectUnknownRevocationStatus; + private ushort m_minimumCertificateKeySize; + #endregion + } + + #region CertificateValidationEventArgs Class + /// + /// The event arguments provided when a certificate validation error occurs. + /// + public class CertificateValidationEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal CertificateValidationEventArgs(ServiceResult error, X509Certificate2 certificate) + { + m_error = error; + m_certificate = certificate; + } + #endregion + + #region Public Properties + /// + /// The error that occurred. + /// + public ServiceResult Error => m_error; + + /// + /// The certificate. + /// + public X509Certificate2 Certificate => m_certificate; + + /// + /// Whether the current error reported for + /// a certificate should be accepted and suppressed. + /// + public bool Accept + { + get { return m_accept; } + set { m_accept = value; } + } + + /// + /// Whether all the errors reported for + /// a certificate should be accepted and suppressed. + /// + public bool AcceptAll + { + get { return m_acceptAll; } + set { m_acceptAll = value; } + } + #endregion + + #region Private Fields + private ServiceResult m_error; + private X509Certificate2 m_certificate; + private bool m_accept; + private bool m_acceptAll; + #endregion + } + + /// + /// Used to handled certificate validation errors. + /// + public delegate void CertificateValidationEventHandler(CertificateValidator sender, CertificateValidationEventArgs e); + #endregion + + #region CertificateUpdateEventArgs Class + /// + /// The event arguments provided when a certificate validation error occurs. + /// + public class CertificateUpdateEventArgs : EventArgs + { + #region Constructors + /// + /// Creates a new instance. + /// + internal CertificateUpdateEventArgs( + SecurityConfiguration configuration, + ICertificateValidator validator) + { + SecurityConfiguration = configuration; + CertificateValidator = validator; + } + #endregion + + #region Public Properties + /// + /// The new security configuration. + /// + public SecurityConfiguration SecurityConfiguration { get; private set; } + /// + /// The new certificate validator. + /// + public ICertificateValidator CertificateValidator { get; private set; } + + #endregion + } + + + /// + /// Used to handle certificate update events. + /// + public delegate void CertificateUpdateEventHandler(CertificateValidator sender, CertificateUpdateEventArgs e); + + #endregion + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/DirectoryCertificateStore.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/DirectoryCertificateStore.cs new file mode 100644 index 00000000..2c2ca6e7 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/DirectoryCertificateStore.cs @@ -0,0 +1,834 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// Provides access to a simple file based certificate store. + /// + public class DirectoryCertificateStore : ICertificateStore + { + #region Constructors + /// + /// Initializes a store with the specified directory path. + /// + public DirectoryCertificateStore() + { + m_certificates = new Dictionary(); + } + #endregion + + #region IDisposable Members + /// + /// May be called by the application to clean up resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// Cleans up all resources held by the object. + /// + protected virtual void Dispose(bool disposing) + { + // clean up managed resources. + if (disposing) + { + Close(); + } + } + #endregion + + #region Public Properties + /// + /// The directory containing the certificate store. + /// + public DirectoryInfo Directory + { + get { return m_directory; } + } + + /// + /// Gets or sets a value indicating whether any private keys are found in the store. + /// + /// + /// true if [no private keys]; otherwise, false. + /// + private bool NoPrivateKeys { get; set; } + #endregion + + #region ICertificateStore Members + /// + public void Open(string location) + { + lock (m_lock) + { + location = Utils.ReplaceSpecialFolderNames(location); + m_directory = new DirectoryInfo(location); + m_certificateSubdir = new DirectoryInfo(m_directory.FullName + Path.DirectorySeparatorChar + "certs"); + m_privateKeySubdir = new DirectoryInfo(m_directory.FullName + Path.DirectorySeparatorChar + "private"); + } + } + + /// + public void Close() + { + lock (m_lock) + { + m_directory = null; + m_certificateSubdir = null; + m_privateKeySubdir = null; + m_certificates.Clear(); + m_lastDirectoryCheck = DateTime.MinValue; + } + } + + /// + public Task Enumerate() + { + lock (m_lock) + { + IDictionary certificatesInStore = Load(null); + X509Certificate2Collection certificates = new X509Certificate2Collection(); + + foreach (Entry entry in certificatesInStore.Values) + { + if (entry.CertificateWithPrivateKey != null) + { + certificates.Add(entry.CertificateWithPrivateKey); + } + else if (entry.Certificate != null) + { + certificates.Add(entry.Certificate); + } + } + + return Task.FromResult(certificates); + } + } + + /// + public Task Add(X509Certificate2 certificate, string password = null) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + + lock (m_lock) + { + byte[] data = null; + + // check for certificate file. + Entry entry = Find(certificate.Thumbprint); + + if (entry != null) + { + throw new ArgumentException("A certificate with the same thumbprint is already in the store."); + } + + if (certificate.HasPrivateKey) + { + string passcode = password ?? String.Empty; + data = certificate.Export(X509ContentType.Pkcs12, passcode); + } + else + { + data = certificate.RawData; + } + + // build file name. + string fileName = GetFileName(certificate); + + // write the private and public key. + WriteFile(data, fileName, certificate.HasPrivateKey); + + if (certificate.HasPrivateKey) + { + WriteFile(certificate.RawData, fileName, false); + } + + m_lastDirectoryCheck = DateTime.MinValue; + } + + return Task.CompletedTask; + } + + /// + public Task Delete(string thumbprint) + { + lock (m_lock) + { + bool found = false; + + Entry entry = Find(thumbprint); + + if (entry != null) + { + if (entry.PrivateKeyFile != null && entry.PrivateKeyFile.Exists) + { + entry.PrivateKeyFile.Delete(); + found = true; + } + + if (entry.CertificateFile != null && entry.CertificateFile.Exists) + { + entry.CertificateFile.Delete(); + found = true; + } + } + + if (found) + { + m_lastDirectoryCheck = DateTime.MinValue; + } + + return Task.FromResult(found); + } + } + + /// + public Task FindByThumbprint(string thumbprint) + { + X509Certificate2Collection certificates = new X509Certificate2Collection(); + + lock (m_lock) + { + Entry entry = Find(thumbprint); + + if (entry != null) + { + if (entry.CertificateWithPrivateKey != null) + { + certificates.Add(entry.CertificateWithPrivateKey); + return Task.FromResult(certificates); + } + + certificates.Add(entry.Certificate); + } + + return Task.FromResult(certificates); + } + } + + /// + /// Returns the path to the public key file. + /// + /// The thumbprint of the certificate. + /// The path. + public string GetPublicKeyFilePath(string thumbprint) + { + Entry entry = Find(thumbprint); + + if (entry == null) + { + return null; + } + + if (entry.CertificateFile == null || !entry.CertificateFile.Exists) + { + return null; + } + + return entry.CertificateFile.FullName; + } + + /// + /// Returns the path to the private key file. + /// + /// The thumbprint of the certificate. + /// The path. + public string GetPrivateKeyFilePath(string thumbprint) + { + Entry entry = Find(thumbprint); + + if (entry == null) + { + return null; + } + + if (entry.PrivateKeyFile == null || !entry.PrivateKeyFile.Exists) + { + return null; + } + + return entry.PrivateKeyFile.FullName; + } + + /// + /// Loads the private key from a PFX file in the certificate store. + /// + public X509Certificate2 LoadPrivateKey(string thumbprint, string subjectName, string password) + { + if (m_certificateSubdir == null || !m_certificateSubdir.Exists) + { + return null; + } + + if (string.IsNullOrEmpty(thumbprint) && string.IsNullOrEmpty(subjectName)) + { + return null; + } + + foreach (FileInfo file in m_certificateSubdir.GetFiles("*.der")) + { + try + { + X509Certificate2 certificate = new X509Certificate2(file.FullName); + + if (!String.IsNullOrEmpty(thumbprint)) + { + if (!string.Equals(certificate.Thumbprint, thumbprint, StringComparison.CurrentCultureIgnoreCase)) + { + continue; + } + } + + if (!String.IsNullOrEmpty(subjectName)) + { + if (!X509Utils.CompareDistinguishedName(subjectName, certificate.Subject)) + { + if (subjectName.Contains("=")) + { + continue; + } + + if (!X509Utils.ParseDistinguishedName(certificate.Subject).Any(s => s.Equals("CN=" + subjectName, StringComparison.OrdinalIgnoreCase))) + { + continue; + } + + } + } + + string fileRoot = file.Name.Substring(0, file.Name.Length - file.Extension.Length); + + StringBuilder filePath = new StringBuilder(); + filePath.Append(m_privateKeySubdir.FullName); + filePath.Append(Path.DirectorySeparatorChar); + filePath.Append(fileRoot); + + X509KeyStorageFlags[] storageFlags = { + X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet, + X509KeyStorageFlags.Exportable | X509KeyStorageFlags.UserKeySet + }; + + FileInfo privateKeyFile = new FileInfo(filePath.ToString() + ".pfx"); + password = password ?? String.Empty; + foreach (var flag in storageFlags) + { + try + { + certificate = new X509Certificate2( + privateKeyFile.FullName, + password, + flag); + if (X509Utils.VerifyRSAKeyPair(certificate, certificate, true)) + { + return certificate; + } + } + catch (Exception) + { + certificate?.Dispose(); + certificate = null; + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not load private key for certificate " + subjectName); + } + } + + return null; + } + + /// + /// Checks if issuer has revoked the certificate. + /// + public StatusCode IsRevoked(X509Certificate2 issuer, X509Certificate2 certificate) + { + if (issuer == null) + { + throw new ArgumentNullException(nameof(issuer)); + } + + if (certificate == null) + { + throw new ArgumentNullException(nameof(certificate)); + } + + // check for CRL. + DirectoryInfo info = new DirectoryInfo(this.Directory.FullName + Path.DirectorySeparatorChar + "crl"); + + if (info.Exists) + { + bool crlExpired = true; + + foreach (FileInfo file in info.GetFiles("*.crl")) + { + X509CRL crl = null; + + try + { + crl = new X509CRL(file.FullName); + } + catch (Exception e) + { + Utils.Trace(e, "Could not parse CRL file."); + continue; + } + + if (!X509Utils.CompareDistinguishedName(crl.Issuer, issuer.Subject)) + { + continue; + } + + if (!crl.VerifySignature(issuer, false)) + { + continue; + } + + if (crl.IsRevoked(certificate)) + { + return StatusCodes.BadCertificateRevoked; + } + + if (crl.ThisUpdate <= DateTime.UtcNow && (crl.NextUpdate == DateTime.MinValue || crl.NextUpdate >= DateTime.UtcNow)) + { + crlExpired = false; + } + } + + // certificate is fine. + if (!crlExpired) + { + return StatusCodes.Good; + } + } + + // can't find a valid CRL. + return StatusCodes.BadCertificateRevocationUnknown; + } + + /// + /// Whether the the store support CRLs. + /// + public bool SupportsCRLs { get { return true; } } + + /// + /// Returns the CRLs in the store. + /// + public List EnumerateCRLs() + { + List crls = new List(); + + // check for CRL. + DirectoryInfo info = new DirectoryInfo(this.Directory.FullName + Path.DirectorySeparatorChar + "crl"); + + if (info.Exists) + { + foreach (FileInfo file in info.GetFiles("*.crl")) + { + X509CRL crl = new X509CRL(file.FullName); + crls.Add(crl); + } + } + + return crls; + } + + /// + /// Returns the CRLs for the issuer. + /// + public List EnumerateCRLs(X509Certificate2 issuer, bool validateUpdateTime = true) + { + if (issuer == null) + { + throw new ArgumentNullException(nameof(issuer)); + } + + List crls = new List(); + + foreach (X509CRL crl in EnumerateCRLs()) + { + if (!X509Utils.CompareDistinguishedName(crl.Issuer, issuer.Subject)) + { + continue; + } + + if (!crl.VerifySignature(issuer, false)) + { + continue; + } + + if (!validateUpdateTime || + crl.ThisUpdate <= DateTime.UtcNow && (crl.NextUpdate == DateTime.MinValue || crl.NextUpdate >= DateTime.UtcNow)) + { + crls.Add(crl); + } + } + + return crls; + } + + /// + /// Adds a CRL to the store. + /// + public void AddCRL(X509CRL crl) + { + if (crl == null) + { + throw new ArgumentNullException(nameof(crl)); + } + + X509Certificate2 issuer = null; + X509Certificate2Collection certificates = null; + certificates = Enumerate().Result; + foreach (X509Certificate2 certificate in certificates) + { + if (X509Utils.CompareDistinguishedName(certificate.Subject, crl.Issuer)) + { + if (crl.VerifySignature(certificate, false)) + { + issuer = certificate; + break; + } + } + } + + if (issuer == null) + { + throw new ServiceResultException(StatusCodes.BadCertificateInvalid, "Could not find issuer of the CRL."); + } + + StringBuilder builder = new StringBuilder(); + builder.Append(m_directory.FullName); + + builder.Append(Path.DirectorySeparatorChar + "crl" + Path.DirectorySeparatorChar); + builder.Append(GetFileName(issuer)); + builder.Append(".crl"); + + FileInfo fileInfo = new FileInfo(builder.ToString()); + + if (!fileInfo.Directory.Exists) + { + fileInfo.Directory.Create(); + } + + File.WriteAllBytes(fileInfo.FullName, crl.RawData); + } + + /// + /// Removes a CRL from the store. + /// + public bool DeleteCRL(X509CRL crl) + { + if (crl == null) + { + throw new ArgumentNullException(nameof(crl)); + } + + string filePath = m_directory.FullName; + filePath += Path.DirectorySeparatorChar + "crl"; + + DirectoryInfo dirInfo = new DirectoryInfo(filePath); + + if (dirInfo.Exists) + { + foreach (FileInfo fileInfo in dirInfo.GetFiles("*.crl")) + { + if (fileInfo.Length == crl.RawData.Length) + { + byte[] bytes = File.ReadAllBytes(fileInfo.FullName); + + if (Utils.IsEqual(bytes, crl.RawData)) + { + fileInfo.Delete(); + return true; + } + } + } + } + + return false; + } + #endregion + + #region Private Methods + /// + /// Reads the current contents of the directory from disk. + /// + private IDictionary Load(string thumbprint) + { + lock (m_lock) + { + DateTime now = DateTime.UtcNow; + + // refresh the directories. + if (m_certificateSubdir != null) + { + m_certificateSubdir.Refresh(); + } + + if (!NoPrivateKeys) + { + if (m_privateKeySubdir != null) + { + m_privateKeySubdir.Refresh(); + } + } + + // check if store exists. + if (!m_certificateSubdir.Exists) + { + m_certificates.Clear(); + return m_certificates; + } + + // check if cache is still good. + if ((m_certificateSubdir.LastWriteTimeUtc < m_lastDirectoryCheck) && + (NoPrivateKeys || !m_privateKeySubdir.Exists || m_privateKeySubdir.LastWriteTimeUtc < m_lastDirectoryCheck)) + { + return m_certificates; + } + + m_certificates.Clear(); + m_lastDirectoryCheck = now; + bool incompleteSearch = false; + + // check for public keys. + foreach (FileInfo file in m_certificateSubdir.GetFiles("*.der")) + { + try + { + Entry entry = new Entry(); + + entry.Certificate = new X509Certificate2(file.FullName); + entry.CertificateFile = file; + entry.PrivateKeyFile = null; + entry.CertificateWithPrivateKey = null; + + if (!NoPrivateKeys) + { + string fileRoot = file.Name.Substring(0, entry.CertificateFile.Name.Length - entry.CertificateFile.Extension.Length); + + StringBuilder filePath = new StringBuilder(); + filePath.Append(m_privateKeySubdir.FullName); + filePath.Append(Path.DirectorySeparatorChar); + filePath.Append(fileRoot); + + entry.PrivateKeyFile = new FileInfo(filePath.ToString() + ".pfx"); + + // check for PFX file. + if (entry.PrivateKeyFile.Exists) + { + try + { + X509Certificate2 certificate = new X509Certificate2( + entry.PrivateKeyFile.FullName + ); + + if (certificate.HasPrivateKey) + { + entry.CertificateWithPrivateKey = certificate; + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not load private key certificate from file: {0}", entry.PrivateKeyFile.Name); + } + } + + // check for PEM file. + else + { + entry.PrivateKeyFile = new FileInfo(filePath.ToString() + ".pem"); + + if (!entry.PrivateKeyFile.Exists) + { + entry.PrivateKeyFile = null; + } + } + } + + m_certificates[entry.Certificate.Thumbprint] = entry; + + if (!String.IsNullOrEmpty(thumbprint) && thumbprint == entry.Certificate.Thumbprint) + { + incompleteSearch = true; + break; + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not load certificate from file: {0}", file.FullName); + } + } + + if (incompleteSearch) + { + m_lastDirectoryCheck = DateTime.MinValue; + } + + return m_certificates; + } + } + + /// + /// Finds the public key for the certificate. + /// + private Entry Find(string thumbprint) + { + IDictionary certificates = Load(thumbprint); + + Entry entry = null; + + if (!String.IsNullOrEmpty(thumbprint)) + { + if (!certificates.TryGetValue(thumbprint, out entry)) + { + return null; + } + } + + return entry; + } + + /// + /// Returns the file name to use for the certificate. + /// + private string GetFileName(X509Certificate2 certificate) + { + // build file name. + string commonName = certificate.FriendlyName; + + List names = X509Utils.ParseDistinguishedName(certificate.Subject); + + for (int ii = 0; ii < names.Count; ii++) + { + if (names[ii].StartsWith("CN=")) + { + commonName = names[ii].Substring(3).Trim(); + break; + } + } + + StringBuilder fileName = new StringBuilder(); + + // remove any special characters. + for (int ii = 0; ii < commonName.Length; ii++) + { + char ch = commonName[ii]; + + if ("<>:\"/\\|?*".IndexOf(ch) != -1) + { + ch = '+'; + } + + fileName.Append(ch); + } + + fileName.Append(" ["); + fileName.Append(certificate.Thumbprint); + fileName.Append("]"); + + return fileName.ToString(); + } + + /// + /// Writes the data to a file. + /// + private void WriteFile(byte[] data, string fileName, bool includePrivateKey) + { + StringBuilder filePath = new StringBuilder(); + + if (!m_directory.Exists) + { + m_directory.Create(); + } + + if (includePrivateKey) + { + filePath.Append(m_privateKeySubdir.FullName); + } + else + { + filePath.Append(m_certificateSubdir.FullName); + } + + filePath.Append(Path.DirectorySeparatorChar); + filePath.Append(fileName); + + if (includePrivateKey) + { + filePath.Append(".pfx"); + } + else + { + filePath.Append(".der"); + } + + // create the directory. + FileInfo fileInfo = new FileInfo(filePath.ToString()); + + if (!fileInfo.Directory.Exists) + { + fileInfo.Directory.Create(); + } + + // write file. + BinaryWriter writer = new BinaryWriter(fileInfo.Open(FileMode.Create)); + + try + { + writer.Write(data); + } + finally + { + writer.Flush(); + writer.Dispose(); + } + + m_certificateSubdir.Refresh(); + m_privateKeySubdir.Refresh(); + } + #endregion + + #region Private Class + private class Entry + { + public FileInfo CertificateFile; + public X509Certificate2 Certificate; + public FileInfo PrivateKeyFile; + public X509Certificate2 CertificateWithPrivateKey; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private DirectoryInfo m_directory; + private DirectoryInfo m_certificateSubdir; + private DirectoryInfo m_privateKeySubdir; + private Dictionary m_certificates; + private DateTime m_lastDirectoryCheck; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/EncryptedData.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/EncryptedData.cs new file mode 100644 index 00000000..612e0fb6 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/EncryptedData.cs @@ -0,0 +1,51 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.ServiceModel; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// Stores a block of encypted data. + /// + public class EncryptedData + { + #region Public Members + /// + /// The algorithm used to encrypt the data. + /// + public string Algorithm + { + get { return m_algorithm; } + set { m_algorithm = value; } + } + + /// + /// The encrypted data. + /// + public byte[] Data + { + get { return m_data; } + set { m_data = value; } + } + #endregion + + #region Private Members + private string m_algorithm; + private byte[] m_data; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/ICertificateStore.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/ICertificateStore.cs new file mode 100644 index 00000000..7024d11a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/ICertificateStore.cs @@ -0,0 +1,96 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// An abstract interface to certficate stores. + /// + public interface ICertificateStore : IDisposable + { + /// + /// Opens the store at the specified location. + /// + /// The location. + /// + /// The syntax depends on the store implementation. + /// + void Open(string location); + + /// + /// Closes the store. + /// + void Close(); + + /// + /// Enumerates the certificates in the store. + /// + Task Enumerate(); + + /// + /// Adds a certificate to the store. + /// + /// The certificate. + /// The certificate password. + Task Add(X509Certificate2 certificate, string password = null); + + /// + /// Deletes a certificate from the store. + /// + /// The thumbprint. + /// True if the certificate exists. + Task Delete(string thumbprint); + + /// + /// Finds the certificate with the specified thumprint. + /// + /// The thumbprint. + /// The matching certificate + Task FindByThumbprint(string thumbprint); + + /// + /// Checks if issuer has revoked the certificate. + /// + StatusCode IsRevoked(X509Certificate2 issuer, X509Certificate2 certificate); + + /// + /// Whether the store supports CRLs. + /// + bool SupportsCRLs { get; } + + /// + /// Returns the CRLs in the store. + /// + List EnumerateCRLs(); + + /// + /// Returns the CRLs for the issuer. + /// + List EnumerateCRLs(X509Certificate2 issuer, bool validateUpdateTime = true); + + /// + /// Adds a CRL to the store. + /// + void AddCRL(X509CRL crl); + + /// + /// Removes a CRL from the store. + /// + bool DeleteCRL(X509CRL crl); + }; +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/ICertificateValidator.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/ICertificateValidator.cs new file mode 100644 index 00000000..7ac52f30 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/ICertificateValidator.cs @@ -0,0 +1,27 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// An abstract interface to the certificate validator. + /// + public interface ICertificateValidator + { + /// + /// Validates a certificate. + /// + void Validate(X509Certificate2 certificate); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs new file mode 100644 index 00000000..f8466ef6 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/RsaUtils.cs @@ -0,0 +1,422 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Defines internal functions to implement RSA cryptography. + /// + internal static class RsaUtils + { + #region Public Enum + public enum Padding + { + Pkcs1, + OaepSHA1, + OaepSHA256 + }; + + internal static RSAEncryptionPadding GetRSAEncryptionPadding(Padding padding) + { + switch (padding) + { + case Padding.Pkcs1: return RSAEncryptionPadding.Pkcs1; + case Padding.OaepSHA1: return RSAEncryptionPadding.OaepSHA1; + case Padding.OaepSHA256: return RSAEncryptionPadding.OaepSHA256; + } + throw new ServiceResultException("Invalid Padding"); + } + #endregion + + #region Public Methods + /// + /// Return the plaintext block size for RSA OAEP encryption. + /// + internal static int GetPlainTextBlockSize(X509Certificate2 encryptingCertificate, Padding padding) + { + RSA rsa = null; + try + { + rsa = encryptingCertificate.GetRSAPublicKey(); + return GetPlainTextBlockSize(rsa, padding); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Return the plaintext block size for RSA OAEP encryption. + /// + internal static int GetPlainTextBlockSize(RSA rsa, Padding padding) + { + if (rsa != null) + { + switch (padding) + { + case Padding.Pkcs1: return rsa.KeySize / 8 - 11; + case Padding.OaepSHA1: return rsa.KeySize / 8 - 42; + case Padding.OaepSHA256: return rsa.KeySize / 8 - 66; + } + } + return -1; + } + + /// + /// Return the ciphertext block size for RSA OAEP encryption. + /// + internal static int GetCipherTextBlockSize(X509Certificate2 encryptingCertificate, Padding padding) + { + RSA rsa = null; + try + { + rsa = encryptingCertificate.GetRSAPublicKey(); + return GetCipherTextBlockSize(rsa, padding); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Return the ciphertext block size for RSA OAEP encryption. + /// + internal static int GetCipherTextBlockSize(RSA rsa, Padding padding) + { + if (rsa != null) + { + return rsa.KeySize / 8; + } + return -1; + } + + /// + /// Returns the length of a RSA PKCS#1 v1.5 signature of a digest. + /// + internal static int GetSignatureLength(X509Certificate2 signingCertificate) + { + RSA rsa = null; + try + { + rsa = signingCertificate.GetRSAPublicKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No public key for certificate."); + } + + return rsa.KeySize / 8; + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Computes a RSA signature. + /// + internal static byte[] Rsa_Sign( + ArraySegment dataToSign, + X509Certificate2 signingCertificate, + HashAlgorithmName hashAlgorithm, + RSASignaturePadding rsaSignaturePadding) + { + RSA rsa = null; + try + { + // extract the private key. + rsa = signingCertificate.GetRSAPrivateKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No private key for certificate."); + } + + // create the signature. + return rsa.SignData(dataToSign.Array, dataToSign.Offset, dataToSign.Count, hashAlgorithm, rsaSignaturePadding); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Verifies a RSA signature. + /// + internal static bool Rsa_Verify( + ArraySegment dataToVerify, + byte[] signature, + X509Certificate2 signingCertificate, + HashAlgorithmName hashAlgorithm, + RSASignaturePadding rsaSignaturePadding) + { + RSA rsa = null; + try + { + // extract the public key. + rsa = signingCertificate.GetRSAPublicKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No public key for certificate."); + } + + // verify signature. + return rsa.VerifyData(dataToVerify.Array, dataToVerify.Offset, dataToVerify.Count, signature, hashAlgorithm, rsaSignaturePadding); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Encrypts the data using RSA encryption. + /// + internal static byte[] Encrypt( + byte[] dataToEncrypt, + X509Certificate2 encryptingCertificate, + Padding padding) + { + RSA rsa = null; + try + { + + rsa = encryptingCertificate.GetRSAPublicKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No public key for certificate."); + } + + int plaintextBlockSize = GetPlainTextBlockSize(rsa, padding); + int blockCount = ((dataToEncrypt.Length + 4) / plaintextBlockSize) + 1; + int plainTextSize = blockCount * plaintextBlockSize; + int cipherTextSize = blockCount * GetCipherTextBlockSize(rsa, padding); + + byte[] plainText = new byte[plainTextSize]; + + // encode length. + plainText[0] = (byte)((0x000000FF & dataToEncrypt.Length)); + plainText[1] = (byte)((0x0000FF00 & dataToEncrypt.Length) >> 8); + plainText[2] = (byte)((0x00FF0000 & dataToEncrypt.Length) >> 16); + plainText[3] = (byte)((0xFF000000 & dataToEncrypt.Length) >> 24); + + // copy data. + Array.Copy(dataToEncrypt, 0, plainText, 4, dataToEncrypt.Length); + + byte[] buffer = new byte[cipherTextSize]; + ArraySegment cipherText = Encrypt(new ArraySegment(plainText), rsa, padding, new ArraySegment(buffer)); + System.Diagnostics.Debug.Assert(cipherText.Count == buffer.Length); + + return buffer; + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Encrypts the data using RSA PKCS#1 v1.5 or OAEP encryption. + /// + private static ArraySegment Encrypt( + ArraySegment dataToEncrypt, + RSA rsa, + Padding padding, + ArraySegment outputBuffer) + { + int inputBlockSize = GetPlainTextBlockSize(rsa, padding); + int outputBlockSize = GetCipherTextBlockSize(rsa, padding); + + // verify the input data is the correct block size. + if (dataToEncrypt.Count % inputBlockSize != 0) + { + Utils.Trace("Message is not an integral multiple of the block size. Length = {0}, BlockSize = {1}.", dataToEncrypt.Count, inputBlockSize); + } + + byte[] encryptedBuffer = outputBuffer.Array; + RSAEncryptionPadding rsaPadding = GetRSAEncryptionPadding(padding); + + using (MemoryStream ostrm = new MemoryStream( + encryptedBuffer, + outputBuffer.Offset, + outputBuffer.Count)) + { + + // encrypt body. + byte[] input = new byte[inputBlockSize]; + + for (int ii = dataToEncrypt.Offset; ii < dataToEncrypt.Offset + dataToEncrypt.Count; ii += inputBlockSize) + { + Array.Copy(dataToEncrypt.Array, ii, input, 0, input.Length); + byte[] cipherText = rsa.Encrypt(input, rsaPadding); + ostrm.Write(cipherText, 0, cipherText.Length); + } + } + + // return buffer + return new ArraySegment( + encryptedBuffer, + outputBuffer.Offset, + (dataToEncrypt.Count / inputBlockSize) * outputBlockSize); + } + + /// + /// Decrypts the data using RSA encryption. + /// + internal static byte[] Decrypt( + ArraySegment dataToDecrypt, + X509Certificate2 encryptingCertificate, + Padding padding) + { + RSA rsa = null; + try + { + rsa = encryptingCertificate.GetRSAPrivateKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No private key for certificate."); + } + + int plainTextSize = dataToDecrypt.Count / GetCipherTextBlockSize(rsa, padding); + plainTextSize *= GetPlainTextBlockSize(encryptingCertificate, padding); + + byte[] buffer = new byte[plainTextSize]; + ArraySegment plainText = Decrypt(dataToDecrypt, rsa, padding, new ArraySegment(buffer)); + System.Diagnostics.Debug.Assert(plainText.Count == buffer.Length); + + // decode length. + int length = 0; + + length += (((int)plainText.Array[plainText.Offset + 0])); + length += (((int)plainText.Array[plainText.Offset + 1]) << 8); + length += (((int)plainText.Array[plainText.Offset + 2]) << 16); + length += (((int)plainText.Array[plainText.Offset + 3]) << 24); + + if (length > (plainText.Count - plainText.Offset - 4)) + { + throw ServiceResultException.Create(StatusCodes.BadEndOfStream, "Could not decrypt data. Invalid total length."); + } + + byte[] decryptedData = new byte[length]; + Array.Copy(plainText.Array, plainText.Offset + 4, decryptedData, 0, length); + + return decryptedData; + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Decrypts the message using RSA encryption. + /// + private static ArraySegment Decrypt( + ArraySegment dataToDecrypt, + RSA rsa, + Padding padding, + ArraySegment outputBuffer) + { + int inputBlockSize = GetCipherTextBlockSize(rsa, padding); + int outputBlockSize = GetPlainTextBlockSize(rsa, padding); + + // verify the input data is the correct block size. + if (dataToDecrypt.Count % inputBlockSize != 0) + { + Utils.Trace("Message is not an integral multiple of the block size. Length = {0}, BlockSize = {1}.", dataToDecrypt.Count, inputBlockSize); + } + + byte[] decryptedBuffer = outputBuffer.Array; + RSAEncryptionPadding rsaPadding = GetRSAEncryptionPadding(padding); + + using (MemoryStream ostrm = new MemoryStream( + decryptedBuffer, + outputBuffer.Offset, + outputBuffer.Count)) + { + + // decrypt body. + byte[] input = new byte[inputBlockSize]; + for (int ii = dataToDecrypt.Offset; ii < dataToDecrypt.Offset + dataToDecrypt.Count; ii += inputBlockSize) + { + Array.Copy(dataToDecrypt.Array, ii, input, 0, input.Length); + byte[] plainText = rsa.Decrypt(input, rsaPadding); + ostrm.Write(plainText, 0, plainText.Length); + } + } + + // return buffers. + return new ArraySegment(decryptedBuffer, outputBuffer.Offset, (dataToDecrypt.Count / inputBlockSize) * outputBlockSize); + } + + /// + /// Helper to test for RSASignaturePadding.Pss support, some platforms do not support it. + /// + internal static bool TryVerifyRSAPssSign(RSA publicKey, RSA privateKey) + { + try + { + Opc.Ua.Test.RandomSource randomSource = new Opc.Ua.Test.RandomSource(); + int blockSize = 0x10; + byte[] testBlock = new byte[blockSize]; + randomSource.NextBytes(testBlock, 0, blockSize); + byte[] signature = privateKey.SignData(testBlock, HashAlgorithmName.SHA1, RSASignaturePadding.Pss); + return publicKey.VerifyData(testBlock, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pss); + } + catch + { + return false; + } + } + /// + /// Lazy helper to allow runtime to check for Pss support. + /// + internal static readonly Lazy IsSupportingRSAPssSign = new Lazy(() => { +#if NETFRAMEWORK + // The Pss check returns false on .Net4.6/4.7, although it is always supported with certs. + // but not supported with Mono + return !Utils.IsRunningOnMono(); +#else + using (var rsa = RSA.Create()) + { + return RsaUtils.TryVerifyRSAPssSign(rsa, rsa); + } +#endif + }); + + /// + /// Dispose RSA object only if not running on Mono runtime. + /// Workaround due to a Mono bug in the X509Certificate2 implementation of RSA. + /// see also: https://github.com/mono/mono/issues/6306 + /// On Mono GetRSAPrivateKey/GetRSAPublickey returns a reference instead of a disposable object. + /// Calling Dispose on RSA makes the X509Certificate2 keys unusable on Mono. + /// Only call dispose when using .Net and .Net Core runtimes. + /// + /// RSA object returned by GetRSAPublicKey/GetRSAPrivateKey + internal static void RSADispose(RSA rsa) + { + if (rsa != null && + !Utils.IsRunningOnMono()) + { + rsa.Dispose(); + } + } +#endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/SecurityConfiguration.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/SecurityConfiguration.cs new file mode 100644 index 00000000..aae11b47 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/SecurityConfiguration.cs @@ -0,0 +1,82 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.IO; + +namespace Opc.Ua +{ + #region SecurityConfiguration Class + /// + /// The security configuration for the application. + /// + public partial class SecurityConfiguration + { + #region Public Methods + /// + /// Adds a certificate as a trusted peer. + /// + public void AddTrustedPeer(byte[] certificate) + { + this.TrustedPeerCertificates.TrustedCertificates.Add(new CertificateIdentifier(certificate)); + } + + /// + /// Validates the security configuration. + /// + public void Validate() + { + if (m_applicationCertificate == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ApplicationCertificate must be specified."); + } + + TrustedIssuerCertificates = CreateDefaultTrustList(TrustedIssuerCertificates); + TrustedPeerCertificates = CreateDefaultTrustList(TrustedPeerCertificates); + + //set a default rejected certificate store. + if (RejectedCertificateStore == null) + { + RejectedCertificateStore = new CertificateStoreIdentifier(); + RejectedCertificateStore.StoreType = CertificateStoreType.Directory; + RejectedCertificateStore.StorePath = Utils.DefaultLocalFolder + Path.DirectorySeparatorChar + "Rejected"; + } + + // replace subjectName DC=localhost with DC=hostname + ApplicationCertificate.SubjectName = Utils.ReplaceDCLocalhost(ApplicationCertificate.SubjectName); + + } + + /// + /// Ensure valid trust lists. + /// + private CertificateTrustList CreateDefaultTrustList(CertificateTrustList trustList) + { + if (trustList != null) + { + if (trustList.StorePath != null) + { + return trustList; + } + } + + return new CertificateTrustList(); + } + + /// + /// Get the provider which is invoked when a password + /// for a private key is requested. + /// + public ICertificatePasswordProvider CertificatePasswordProvider { get; set; } + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/X509CertificateStore.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/X509CertificateStore.cs new file mode 100644 index 00000000..633cf007 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/X509CertificateStore.cs @@ -0,0 +1,239 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// Provides access to a simple X509Store based certificate store. + /// + public class X509CertificateStore : ICertificateStore + { + /// + /// Create an instance of the certificate store. + /// + public X509CertificateStore() + { + // defaults + m_storeName = "My"; + m_storeLocation = StoreLocation.CurrentUser; + } + + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// Dispose method for derived classes. + /// + protected virtual void Dispose(bool disposing) + { + // nothing to do + } + + /// + /// + /// Syntax: StoreLocation\StoreName + /// Example: + /// CurrentUser\My + /// + public void Open(string path) + { + if (path == null) throw new ArgumentNullException(nameof(path)); + + path = path.Trim(); + + if (string.IsNullOrEmpty(path)) + { + throw ServiceResultException.Create( + StatusCodes.BadUnexpectedError, + "Store Location cannot be empty."); + } + + // extract store name. + int index = path.IndexOf('\\'); + if (index == -1) + { + throw ServiceResultException.Create( + StatusCodes.BadUnexpectedError, + "Path does not specify a store name. Path={0}", + path); + } + + // extract store location. + string storeLocation = path.Substring(0, index); + bool found = false; + foreach (StoreLocation availableLocation in (StoreLocation[])Enum.GetValues(typeof(StoreLocation))) + { + if (availableLocation.ToString() == storeLocation) + { + m_storeLocation = availableLocation; + found = true; + } + } + if (found == false) + { + var message = new StringBuilder(); + message.AppendLine("Store location specified not available."); + message.AppendLine("Store location={0}"); + throw ServiceResultException.Create(StatusCodes.BadUnexpectedError, + message.ToString(), storeLocation); + } + + m_storeName = path.Substring(index + 1); + } + + /// + public void Close() + { + // nothing to do + } + + /// + public Task Enumerate() + { + using (X509Store store = new X509Store(m_storeName, m_storeLocation)) + { + store.Open(OpenFlags.ReadOnly); + return Task.FromResult(new X509Certificate2Collection(store.Certificates)); + } + } + + /// + public Task Add(X509Certificate2 certificate, string password = null) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + + using (X509Store store = new X509Store(m_storeName, m_storeLocation)) + { + store.Open(OpenFlags.ReadWrite); + if (!store.Certificates.Contains(certificate)) + { +#if NETSTANDARD2_1 + if (certificate.HasPrivateKey && + (Environment.OSVersion.Platform == PlatformID.Win32NT)) + { + // see https://github.com/dotnet/runtime/issues/29144 + var temp = Guid.NewGuid().ToString(); + using (var persistable = new X509Certificate2(certificate.Export(X509ContentType.Pfx, temp), temp, + X509KeyStorageFlags.PersistKeySet)) + { + store.Add(persistable); + } + } + else +#endif + { + store.Add(certificate); + } + Utils.Trace(Utils.TraceMasks.Information, "Added cert {0} to X509Store {1}.", certificate.ToString(), store.Name); + } + } + + return Task.CompletedTask; + } + + /// + public Task Delete(string thumbprint) + { + using (X509Store store = new X509Store(m_storeName, m_storeLocation)) + { + store.Open(OpenFlags.ReadWrite); + + foreach (X509Certificate2 certificate in store.Certificates) + { + if (certificate.Thumbprint == thumbprint) + { + store.Remove(certificate); + } + } + } + + return Task.FromResult(true); + } + + /// + public Task FindByThumbprint(string thumbprint) + { + using (X509Store store = new X509Store(m_storeName, m_storeLocation)) + { + store.Open(OpenFlags.ReadOnly); + + X509Certificate2Collection collection = new X509Certificate2Collection(); + + foreach (X509Certificate2 certificate in store.Certificates) + { + if (certificate.Thumbprint == thumbprint) + { + collection.Add(certificate); + } + } + + return Task.FromResult(collection); + } + } + + /// + /// CRLs are not supported here. + public bool SupportsCRLs => false; + + /// + /// CRLs are not supported here. + public StatusCode IsRevoked(X509Certificate2 issuer, X509Certificate2 certificate) + { + return StatusCodes.BadNotSupported; + } + + /// + /// CRLs are not supported here. + public List EnumerateCRLs() + { + throw new ServiceResultException(StatusCodes.BadNotSupported); + } + + /// + /// CRLs are not supported here. + public List EnumerateCRLs(X509Certificate2 issuer, bool validateUpdateTime = true) + { + throw new ServiceResultException(StatusCodes.BadNotSupported); + } + + /// + /// CRLs are not supported here. + public void AddCRL(X509CRL crl) + { + throw new ServiceResultException(StatusCodes.BadNotSupported); + } + + /// + /// CRLs are not supported here. + public bool DeleteCRL(X509CRL crl) + { + throw new ServiceResultException(StatusCodes.BadNotSupported); + } + + private string m_storeName; + private StoreLocation m_storeLocation; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/X509Utils.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/X509Utils.cs new file mode 100644 index 00000000..dd7bceb4 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Certificates/X509Utils.cs @@ -0,0 +1,568 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// Utility functions for X509 certificates. + /// + public static class X509Utils + { + /// + /// Extracts the DNS names specified in the certificate. + /// + /// The certificate. + /// The DNS names. + public static IList GetDomainsFromCertficate(X509Certificate2 certificate) + { + List dnsNames = new List(); + + // extracts the domain from the subject name. + List fields = X509Utils.ParseDistinguishedName(certificate.Subject); + + StringBuilder builder = new StringBuilder(); + + for (int ii = 0; ii < fields.Count; ii++) + { + if (fields[ii].StartsWith("DC=")) + { + if (builder.Length > 0) + { + builder.Append('.'); + } + + builder.Append(fields[ii].Substring(3)); + } + } + + if (builder.Length > 0) + { + dnsNames.Add(builder.ToString().ToUpperInvariant()); + } + + // extract the alternate domains from the subject alternate name extension. + X509SubjectAltNameExtension alternateName = X509Extensions.FindExtension(certificate); + if (alternateName != null) + { + for (int ii = 0; ii < alternateName.DomainNames.Count; ii++) + { + string hostname = alternateName.DomainNames[ii]; + + // do not add duplicates to the list. + bool found = false; + + for (int jj = 0; jj < dnsNames.Count; jj++) + { + if (String.Compare(dnsNames[jj], hostname, StringComparison.OrdinalIgnoreCase) == 0) + { + found = true; + break; + } + } + + if (!found) + { + dnsNames.Add(hostname.ToUpperInvariant()); + } + } + + for (int ii = 0; ii < alternateName.IPAddresses.Count; ii++) + { + string ipAddress = alternateName.IPAddresses[ii]; + + if (!dnsNames.Contains(ipAddress)) + { + dnsNames.Add(ipAddress); + } + } + } + + // return the list. + return dnsNames; + } + + /// + /// Returns the size of the public key and disposes RSA key. + /// + /// The certificate + public static int GetRSAPublicKeySize(X509Certificate2 certificate) + { + RSA rsaPublicKey = null; + try + { + rsaPublicKey = certificate.GetRSAPublicKey(); + return rsaPublicKey.KeySize; + } + finally + { + RsaUtils.RSADispose(rsaPublicKey); + } + } + + /// + /// Extracts the application URI specified in the certificate. + /// + /// The certificate. + /// The application URI. + public static string GetApplicationUriFromCertificate(X509Certificate2 certificate) + { + // extract the alternate domains from the subject alternate name extension. + X509SubjectAltNameExtension alternateName = X509Extensions.FindExtension(certificate); + + // get the application uri. + if (alternateName != null && alternateName.Uris.Count > 0) + { + return alternateName.Uris[0]; + } + + return string.Empty; + } + + /// + /// Check if certificate has an application urn. + /// + /// The certificate. + /// true if the application URI starts with urn: + public static bool HasApplicationURN(X509Certificate2 certificate) + { + // extract the alternate domains from the subject alternate name extension. + X509SubjectAltNameExtension alternateName = X509Extensions.FindExtension(certificate); + + // find the application urn. + if (alternateName != null && alternateName.Uris.Count > 0) + { + string urn = "urn:"; + for (int i = 0; i < alternateName.Uris.Count; i++) + { + if (string.Compare(alternateName.Uris[i], 0, urn, 0, urn.Length, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + } + } + + return false; + } + + /// + /// Checks that the domain in the URL provided matches one of the domains in the certificate. + /// + /// The certificate. + /// The endpoint url to verify. + /// True if the certificate matches the url. + public static bool DoesUrlMatchCertificate(X509Certificate2 certificate, Uri endpointUrl) + { + if (endpointUrl == null || certificate == null) + { + return false; + } + + IList domainNames = GetDomainsFromCertficate(certificate); + + for (int jj = 0; jj < domainNames.Count; jj++) + { + if (String.Compare(domainNames[jj], endpointUrl.DnsSafeHost, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + } + + return false; + } + + /// + /// Determines whether the certificate is allowed to be an issuer. + /// + public static bool IsIssuerAllowed(X509Certificate2 certificate) + { + X509BasicConstraintsExtension constraints = X509Extensions.FindExtension(certificate); + + if (constraints != null) + { + return constraints.CertificateAuthority; + } + + return false; + } + + /// + /// Determines whether the certificate is issued by a Certificate Authority. + /// + public static bool IsCertificateAuthority(X509Certificate2 certificate) + { + var constraints = X509Extensions.FindExtension(certificate); + if (constraints != null) + { + return constraints.CertificateAuthority; + } + return false; + } + + /// + /// Return the key usage flags of a certificate. + /// + public static X509KeyUsageFlags GetKeyUsage(X509Certificate2 cert) + { + var allFlags = X509KeyUsageFlags.None; + foreach (X509KeyUsageExtension ext in cert.Extensions.OfType()) + { + allFlags |= ext.KeyUsages; + } + return allFlags; + } + + /// + /// Compares two distinguished names. + /// + public static bool CompareDistinguishedName(string name1, string name2) + { + // check for simple equality. + if (String.Compare(name1, name2, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + + // parse the names. + List fields1 = ParseDistinguishedName(name1); + List fields2 = ParseDistinguishedName(name2); + + // can't be equal if the number of fields is different. + if (fields1.Count != fields2.Count) + { + return false; + } + + // sort to ensure similar entries are compared + fields1.Sort(StringComparer.OrdinalIgnoreCase); + fields2.Sort(StringComparer.OrdinalIgnoreCase); + + // compare each. + for (int ii = 0; ii < fields1.Count; ii++) + { + if (String.Compare(fields1[ii], fields2[ii], StringComparison.OrdinalIgnoreCase) != 0) + { + return false; + } + } + + return true; + } + + /// + /// Compares two distinguished names. + /// + public static bool CompareDistinguishedName(X509Certificate2 certificate, List parsedName) + { + // can't compare if the number of fields is 0. + if (parsedName.Count == 0) + { + return false; + } + + // parse the names. + List certificateName = ParseDistinguishedName(certificate.Subject); + + // can't be equal if the number of fields is different. + if (parsedName.Count != certificateName.Count) + { + return false; + } + + // sort to ensure similar entries are compared + parsedName.Sort(StringComparer.OrdinalIgnoreCase); + certificateName.Sort(StringComparer.OrdinalIgnoreCase); + + // compare each entry + for (int ii = 0; ii < parsedName.Count; ii++) + { + if (String.Compare(parsedName[ii], certificateName[ii], StringComparison.OrdinalIgnoreCase) != 0) + { + return false; + } + } + + return true; + } + + /// + /// Parses a distingushed name. + /// + public static List ParseDistinguishedName(string name) + { + List fields = new List(); + + if (String.IsNullOrEmpty(name)) + { + return fields; + } + + // determine the delimiter used. + char delimiter = ','; + bool found = false; + bool quoted = false; + + for (int ii = name.Length - 1; ii >= 0; ii--) + { + char ch = name[ii]; + + if (ch == '"') + { + quoted = !quoted; + continue; + } + + if (!quoted && ch == '=') + { + ii--; + + while (ii >= 0 && Char.IsWhiteSpace(name[ii])) ii--; + while (ii >= 0 && (Char.IsLetterOrDigit(name[ii]) || name[ii] == '.')) ii--; + while (ii >= 0 && Char.IsWhiteSpace(name[ii])) ii--; + + if (ii >= 0) + { + delimiter = name[ii]; + } + + break; + } + } + + StringBuilder buffer = new StringBuilder(); + + string key = null; + string value = null; + found = false; + + for (int ii = 0; ii < name.Length; ii++) + { + while (ii < name.Length && Char.IsWhiteSpace(name[ii])) ii++; + + if (ii >= name.Length) + { + break; + } + + char ch = name[ii]; + + if (found) + { + char end = delimiter; + + if (ii < name.Length && name[ii] == '"') + { + ii++; + end = '"'; + } + + while (ii < name.Length) + { + ch = name[ii]; + + if (ch == end) + { + while (ii < name.Length && name[ii] != delimiter) ii++; + break; + } + + buffer.Append(ch); + ii++; + } + + value = buffer.ToString().TrimEnd(); + found = false; + + buffer.Length = 0; + buffer.Append(key); + buffer.Append('='); + + if (value.IndexOfAny(new char[] { '/', ',', '=' }) != -1) + { + if (value.Length > 0 && value[0] != '"') + { + buffer.Append('"'); + } + + buffer.Append(value); + + if (value.Length > 0 && value[value.Length - 1] != '"') + { + buffer.Append('"'); + } + } + else + { + buffer.Append(value); + } + + fields.Add(buffer.ToString()); + buffer.Length = 0; + } + + else + { + while (ii < name.Length) + { + ch = name[ii]; + + if (ch == '=') + { + break; + } + + buffer.Append(ch); + ii++; + } + + key = buffer.ToString().TrimEnd().ToUpperInvariant(); + buffer.Length = 0; + found = true; + } + } + + return fields; + } + + /// + /// Verify RSA key pair of two certificates. + /// + public static bool VerifyRSAKeyPair( + X509Certificate2 certWithPublicKey, + X509Certificate2 certWithPrivateKey, + bool throwOnError = false) + { + return X509PfxUtils.VerifyRSAKeyPair(certWithPublicKey, certWithPrivateKey, throwOnError); + } + + /// + /// Verify the signature of a self signed certificate. + /// + public static bool VerifySelfSigned(X509Certificate2 cert) + { + try + { + var signature = new X509Signature(cert.RawData); + return signature.Verify(cert); + } + catch + { + return false; + } + } + + /// + /// Creates a certificate from a PKCS #12 store with a private key. + /// + /// The raw PKCS #12 store data. + /// The password to use to access the store. + /// The certificate with a private key. + public static X509Certificate2 CreateCertificateFromPKCS12( + byte[] rawData, + string password + ) + { + return X509PfxUtils.CreateCertificateFromPKCS12(rawData, password); + } + + /// + /// Get the certificate by issuer and serial number. + /// + public static async Task FindIssuerCABySerialNumberAsync( + ICertificateStore store, + string issuer, + string serialnumber) + { + X509Certificate2Collection certificates = await store.Enumerate(); + + foreach (var certificate in certificates) + { + if (X509Utils.CompareDistinguishedName(certificate.Subject, issuer) && + Utils.IsEqual(certificate.SerialNumber, serialnumber)) + { + return certificate; + } + } + + return null; + } + + /// + /// Extension to add a certificate to a . + /// + /// + /// Saves also the private key, if available. + /// If written to a Pfx file, the password is used for protection. + /// + /// The certificate to store. + /// Type of certificate store (Directory) . + /// The store path (syntax depends on storeType). + /// The password to use to protect the certificate. + /// + public static X509Certificate2 AddToStore( + this X509Certificate2 certificate, + string storeType, + string storePath, + string password = null) + { + // add cert to the store. + if (!String.IsNullOrEmpty(storePath) && !String.IsNullOrEmpty(storeType)) + { + using (ICertificateStore store = Opc.Ua.CertificateStoreIdentifier.CreateStore(storeType)) + { + if (store == null) + { + throw new ArgumentException("Invalid store type"); + } + + store.Open(storePath); + store.Add(certificate, password).Wait(); + store.Close(); + } + } + return certificate; + } + + /// + /// Get the hash algorithm from the hash size in bits. + /// + /// + public static HashAlgorithmName GetRSAHashAlgorithmName(uint hashSizeInBits) + { + if (hashSizeInBits <= 160) + { + return HashAlgorithmName.SHA1; + } + else if (hashSizeInBits <= 256) + { + return HashAlgorithmName.SHA256; + } + else if (hashSizeInBits <= 384) + { + return HashAlgorithmName.SHA384; + } + else + { + return HashAlgorithmName.SHA512; + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Constants/SecurityConstants.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Constants/SecurityConstants.cs new file mode 100644 index 00000000..692d09c3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Constants/SecurityConstants.cs @@ -0,0 +1,141 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + /// + /// Defines constants for key security policies. + /// + public static class SecurityAlgorithms + { + /// + /// The HMAC-SHA1 algorithm used to create symmetric key signatures. + /// + public const string HmacSha1 = "http://www.w3.org/2000/09/xmldsig#hmac-sha1"; + + /// + /// The HMAC-SHA256 algorithm used to create symmetric key signatures. + /// + public const string HmacSha256 = "http://www.w3.org/2000/09/xmldsig#hmac-sha256"; + + /// + /// The RSA-SHA1 algorithm used to create asymmetric key signatures. + /// + public const string RsaSha1 = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"; + + /// + /// The RSA-SHA256 algorithm used to create asymmetric key signatures. + /// + public const string RsaSha256 = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"; + + /// + /// The RSA-PSS-SHA256 algorithm used to create asymmetric key signatures. + /// + public const string RsaPssSha256 = "http://opcfoundation.org/UA/security/rsa-pss-sha2-256"; + + /// + /// The AES128 algorithm used to encrypt data. + /// + public const string Aes128 = "http://www.w3.org/2001/04/xmlenc#aes128-cbc"; + + /// + /// The AES256 algorithm used to encrypt data. + /// + public const string Aes256 = "http://www.w3.org/2001/04/xmlenc#aes256-cbc"; + + /// + /// The RSA-OAEP algorithm used to encrypt data. + /// + public const string RsaOaep = "http://www.w3.org/2001/04/xmlenc#rsa-oaep"; + + /// + /// The RSA-OAEP-SHA256 algorithm used to encrypt data. + /// + public const string RsaOaepSha256 = "http://opcfoundation.org/UA/security/rsa-oaep-sha2-256"; + + /// + /// The RSA-PKCSv1.5 algorithm used to encrypt data. + /// + public const string Rsa15 = "http://www.w3.org/2001/04/xmlenc#rsa-1_5"; + + /// + /// The RSA-PKCSv1.5 SHA256 algorithm used to encrypt data. + /// + public const string Rsa15Sha256 = "http://www.w3.org/2001/04/xmlenc#rsa-1_5-sha2-256"; + + /// + /// The RSA-OAEP algorithm used to encrypt keys. + /// + public const string KwRsaOaep = "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"; + + /// + /// The RSA-PKCSv1.5 algorithm used to encrypt keys. + /// + public const string KwRsa15 = "http://www.w3.org/2001/04/xmlenc#rsa-1_5"; + + /// + /// The P-SHA1 algorithm used to generate keys. + /// + public const string PSha1 = "http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/dk/p_sha1"; + + /// + /// The P-SHA256 algorithm used to generate keys. + /// + public const string PSha256 = "http://opcfoundation.org/ua/security/p_sha2-256"; + } + + /// + /// Common profiles that UA applications may support. + /// + public static class Profiles + { + /// + /// Communicates with UA TCP, UA Security and UA Binary. + /// + public const string UaTcpTransport = "http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary"; + + /// + /// Communicates with UA TCP over secure Websockets, UA Security and UA Binary. + /// + public const string UaWssTransport = "http://opcfoundation.org/UA-Profile/Transport/uawss-uasc-uabinary"; + + /// + /// Communicates with UA Binary over HTTPS. + /// + public const string HttpsBinaryTransport = "http://opcfoundation.org/UA-Profile/Transport/https-uabinary"; + + /// + /// Communicates with PubSub for UADP transport protocol. + /// + public const string UadpTransport = "http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp"; + + /// + /// An Issued User Token that complies with the JWT specification. + /// + public const string JwtUserToken = "http://opcfoundation.org/UA/UserToken#JWT"; + + /// + /// Converts the URI to a URI that can be used for comparison. + /// + /// The profile URI. + /// The normalixed URI. + public static string NormalizeUri(string profileUri) + { + if (System.String.IsNullOrEmpty(profileUri)) + { + return profileUri; + } + + return profileUri; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Constants/SecurityPolicies.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Constants/SecurityPolicies.cs new file mode 100644 index 00000000..566fe3d5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Security/Constants/SecurityPolicies.cs @@ -0,0 +1,444 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Defines constants for key security policies. + /// + public static class SecurityPolicies + { + #region Public Constants + /// + /// The base URI for all policy URIs. + /// + public const string BaseUri = "http://opcfoundation.org/UA/SecurityPolicy#"; + + /// + /// The URI for a policy that uses no security. + /// + public const string None = BaseUri + "None"; + + /// + /// The URI for the Basic128Rsa15 security policy. + /// + public const string Basic128Rsa15 = BaseUri + "Basic128Rsa15"; + + /// + /// The URI for the Basic256 security policy. + /// + public const string Basic256 = BaseUri + "Basic256"; + + /// + /// The URI for the Aes128_Sha256_RsaOaep security policy. + /// + public const string Aes128_Sha256_RsaOaep = BaseUri + "Aes128_Sha256_RsaOaep"; + + /// + /// The URI for the Basic256Sha256 security policy. + /// + public const string Basic256Sha256 = BaseUri + "Basic256Sha256"; + + /// + /// The URI for the Aes256_Sha256_RsaPss security policy. + /// + public const string Aes256_Sha256_RsaPss = BaseUri + "Aes256_Sha256_RsaPss"; + + /// + /// The URI for the Https security policy. + /// + public const string Https = BaseUri + "Https"; + #endregion + + #region Static Methods + private static bool IsPlatformSupportedUri(string name) + { + if (name.Equals(nameof(Aes256_Sha256_RsaPss)) && + !RsaUtils.IsSupportingRSAPssSign.Value) + { + return false; + } + return true; + } + + /// + /// Returns the uri associated with the display name. + /// + public static string GetUri(string displayName) + { + FieldInfo[] fields = typeof(SecurityPolicies).GetFields(BindingFlags.Public | BindingFlags.Static); + foreach (FieldInfo field in fields) + { + if (field.Name == displayName && IsPlatformSupportedUri(field.Name)) + { + return (string)field.GetValue(typeof(SecurityPolicies)); + } + } + + return null; + } + + /// + /// Returns a display name for a security policy uri. + /// + public static string GetDisplayName(string policyUri) + { + FieldInfo[] fields = typeof(SecurityPolicies).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (policyUri == (string)field.GetValue(typeof(SecurityPolicies)) && + IsPlatformSupportedUri(field.Name)) + { + return field.Name; + } + } + + return null; + } + + /// + /// Returns the display names for all security policy uris. + /// + public static string[] GetDisplayNames() + { + FieldInfo[] fields = typeof(SecurityPolicies).GetFields(BindingFlags.Public | BindingFlags.Static); + var names = new List(); + + // skip base Uri + for (int ii = 1; ii < fields.Length - 1; ii++) + { + if (IsPlatformSupportedUri(fields[ii].Name)) + { + names.Add(fields[ii].Name); + } + } + + return names.ToArray(); + } + + /// + /// Returns the default security policy uri. + /// + public static string[] GetDefaultUris() + { + string[] defaultNames = { + nameof(Basic256Sha256), + nameof(Aes128_Sha256_RsaOaep), + nameof(Aes256_Sha256_RsaPss) }; + var defaultUris = new List(); + foreach (var name in defaultNames) + { + var uri = GetUri(name); + if (uri != null) + { + defaultUris.Add(uri); + } + } + return defaultUris.ToArray(); + } + + /// + /// Encrypts the text using the SecurityPolicyUri and returns the result. + /// + public static EncryptedData Encrypt(X509Certificate2 certificate, string securityPolicyUri, byte[] plainText) + { + EncryptedData encryptedData = new EncryptedData(); + + encryptedData.Algorithm = null; + encryptedData.Data = plainText; + + // check if nothing to do. + if (plainText == null) + { + return encryptedData; + } + + // nothing more to do if no encryption. + if (String.IsNullOrEmpty(securityPolicyUri)) + { + return encryptedData; + } + + // encrypt data. + switch (securityPolicyUri) + { + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + { + encryptedData.Algorithm = SecurityAlgorithms.RsaOaep; + encryptedData.Data = RsaUtils.Encrypt(plainText, certificate, RsaUtils.Padding.OaepSHA1); + break; + } + + case SecurityPolicies.Basic128Rsa15: + { + encryptedData.Algorithm = SecurityAlgorithms.Rsa15; + encryptedData.Data = RsaUtils.Encrypt(plainText, certificate, RsaUtils.Padding.Pkcs1); + break; + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + encryptedData.Algorithm = SecurityAlgorithms.RsaOaepSha256; + encryptedData.Data = RsaUtils.Encrypt(plainText, certificate, RsaUtils.Padding.OaepSHA256); + break; + } + + case SecurityPolicies.None: + { + break; + } + + default: + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityPolicyRejected, + "Unsupported security policy: {0}", + securityPolicyUri); + } + } + + return encryptedData; + } + + /// + /// Decrypts the CipherText using the SecurityPolicyUri and returns the PlainTetx. + /// + public static byte[] Decrypt(X509Certificate2 certificate, string securityPolicyUri, EncryptedData dataToDecrypt) + { + // check if nothing to do. + if (dataToDecrypt == null) + { + return null; + } + + // nothing more to do if no encryption. + if (String.IsNullOrEmpty(securityPolicyUri)) + { + return dataToDecrypt.Data; + } + + // decrypt data. + switch (securityPolicyUri) + { + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + { + if (dataToDecrypt.Algorithm == SecurityAlgorithms.RsaOaep) + { + return RsaUtils.Decrypt(new ArraySegment(dataToDecrypt.Data), certificate, RsaUtils.Padding.OaepSHA1); + } + break; + } + + case SecurityPolicies.Basic128Rsa15: + { + if (dataToDecrypt.Algorithm == SecurityAlgorithms.Rsa15) + { + return RsaUtils.Decrypt(new ArraySegment(dataToDecrypt.Data), certificate, RsaUtils.Padding.Pkcs1); + } + break; + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + if (dataToDecrypt.Algorithm == SecurityAlgorithms.RsaOaepSha256) + { + return RsaUtils.Decrypt(new ArraySegment(dataToDecrypt.Data), certificate, RsaUtils.Padding.OaepSHA256); + } + break; + } + + case SecurityPolicies.None: + { + if (String.IsNullOrEmpty(dataToDecrypt.Algorithm)) + { + return dataToDecrypt.Data; + } + break; + } + + default: + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityPolicyRejected, + "Unsupported security policy: {0}", + securityPolicyUri); + } + } + + throw ServiceResultException.Create( + StatusCodes.BadIdentityTokenInvalid, + "Unexpected encryption algorithm : {0}", + dataToDecrypt.Algorithm); + } + + /// + /// Signs the data using the SecurityPolicyUri and returns the signature. + /// + public static SignatureData Sign(X509Certificate2 certificate, string securityPolicyUri, byte[] dataToSign) + { + SignatureData signatureData = new SignatureData(); + + // check if nothing to do. + if (dataToSign == null) + { + return signatureData; + } + + // nothing more to do if no encryption. + if (String.IsNullOrEmpty(securityPolicyUri)) + { + return signatureData; + } + + // sign data. + switch (securityPolicyUri) + { + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic128Rsa15: + { + signatureData.Algorithm = SecurityAlgorithms.RsaSha1; + signatureData.Signature = RsaUtils.Rsa_Sign(new ArraySegment(dataToSign), certificate, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + break; + } + + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Basic256Sha256: + { + signatureData.Algorithm = SecurityAlgorithms.RsaSha256; + signatureData.Signature = RsaUtils.Rsa_Sign(new ArraySegment(dataToSign), certificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + break; + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + signatureData.Algorithm = SecurityAlgorithms.RsaPssSha256; + signatureData.Signature = RsaUtils.Rsa_Sign(new ArraySegment(dataToSign), certificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); + break; + } + + case SecurityPolicies.None: + { + signatureData.Algorithm = null; + signatureData.Signature = null; + break; + } + + default: + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityPolicyRejected, + "Unsupported security policy: {0}", + securityPolicyUri); + } + } + + return signatureData; + } + + /// + /// Verifies the signature using the SecurityPolicyUri and return true if valid. + /// + public static bool Verify(X509Certificate2 certificate, string securityPolicyUri, byte[] dataToVerify, SignatureData signature) + { + // check if nothing to do. + if (signature == null) + { + return true; + } + + // nothing more to do if no encryption. + if (String.IsNullOrEmpty(securityPolicyUri)) + { + return true; + } + + // decrypt data. + switch (securityPolicyUri) + { + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic128Rsa15: + { + if (signature.Algorithm == SecurityAlgorithms.RsaSha1) + { + return RsaUtils.Rsa_Verify(new ArraySegment(dataToVerify), signature.Signature, certificate, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + } + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "Unexpected signature algorithm for Basic256/Basic128Rsa15: {0}\n" + + "Expected signature algorithm: {1}", + signature.Algorithm, + SecurityAlgorithms.RsaSha1); + } + + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Basic256Sha256: + { + if (signature.Algorithm == SecurityAlgorithms.RsaSha256) + { + return RsaUtils.Rsa_Verify(new ArraySegment(dataToVerify), signature.Signature, certificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + } + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "Unexpected signature algorithm for Basic256Sha256/Aes128_Sha256_RsaOaep: {0}\n" + + "Expected signature algorithm: {1}", + signature.Algorithm, + SecurityAlgorithms.RsaSha256); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + if (signature.Algorithm == SecurityAlgorithms.RsaPssSha256) + { + return RsaUtils.Rsa_Verify(new ArraySegment(dataToVerify), signature.Signature, certificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); + } + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "Unexpected signature algorithm for Aes256_Sha256_RsaPss: {0}\n" + + "Expected signature algorithm : {1}", + signature.Algorithm, + SecurityAlgorithms.RsaPssSha256); + } + + // always accept signatures if security is not used. + case SecurityPolicies.None: + { + return true; + } + + default: + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityPolicyRejected, + "Unsupported security policy: {0}", + securityPolicyUri); + } + } + + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + "Unexpected security policy Uri: {0}", + securityPolicyUri); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/ArraySegmentStream.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/ArraySegmentStream.cs new file mode 100644 index 00000000..5d90cd9f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/ArraySegmentStream.cs @@ -0,0 +1,361 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; + +namespace Opc.Ua.Bindings +{ + /// + /// Provides stream access to a sequence of buffers. + /// + public class ArraySegmentStream : Stream + { + #region Constructors + /// + /// Attaches the stream to a set of buffers + /// + /// The buffers. + public ArraySegmentStream(BufferCollection buffers) + { + m_buffers = buffers; + m_endOfLastBuffer = 0; + + if (m_buffers.Count > 0) + { + m_endOfLastBuffer = m_buffers[m_buffers.Count - 1].Count; + } + + SetCurrentBuffer(0); + } + + /// + /// Creates a writeable stream that creates buffers as necessary. + /// + /// The buffer manager. + /// Size of the buffer. + /// The start. + /// The count. + public ArraySegmentStream( + BufferManager bufferManager, + int bufferSize, + int start, + int count) + + { + m_buffers = new BufferCollection(); + + m_bufferManager = bufferManager; + m_bufferSize = bufferSize; + m_start = start; + m_count = count; + + m_endOfLastBuffer = 0; + + SetCurrentBuffer(0); + } + #endregion + + #region Public Methods + /// + /// Returns ownership of the buffers stored in the stream. + /// + /// The owner. + /// + public BufferCollection GetBuffers(string owner) + { + BufferCollection buffers = new BufferCollection(m_buffers.Count); + + for (int ii = 0; ii < m_buffers.Count; ii++) + { + m_bufferManager.TransferBuffer(m_buffers[ii].Array, owner); + buffers.Add(new ArraySegment(m_buffers[ii].Array, m_buffers[ii].Offset, GetBufferCount(ii))); + } + + m_buffers.Clear(); + + return buffers; + } + #endregion + + #region Overridden Methods + /// + public override bool CanRead + { + get { return true; } + } + + /// + public override bool CanSeek + { + get { return true; } + } + + /// + public override bool CanWrite + { + get { return true; } + } + + /// + public override void Flush() + { + // nothing to do. + } + + /// + public override long Length + { + get { return GetAbsoluteLength(); } + } + + /// + public override long Position + { + get + { + return GetAbsolutePosition(); + } + + set + { + Seek(value, SeekOrigin.Begin); + } + } + + /// + public override int Read(byte[] buffer, int offset, int count) + { + int bytesRead = 0; + + while (count > 0) + { + // check for end of stream. + if (m_currentBuffer.Array == null) + { + return bytesRead; + } + + int bytesLeft = GetBufferCount(m_bufferIndex) - m_currentPosition; + + // copy the bytes requested. + if (bytesLeft > count) + { + Array.Copy(m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, buffer, offset, count); + bytesRead += count; + m_currentPosition += count; + return bytesRead; + } + + // copy the bytes available and move to next buffer. + Array.Copy(m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, buffer, offset, bytesLeft); + bytesRead += bytesLeft; + + offset += bytesLeft; + count -= bytesLeft; + + // move to next buffer. + SetCurrentBuffer(m_bufferIndex + 1); + } + + return bytesRead; + } + + /// + public override long Seek(long offset, SeekOrigin origin) + { + switch (origin) + { + case SeekOrigin.Begin: + { + break; + } + + case SeekOrigin.Current: + { + offset += GetAbsolutePosition(); + break; + } + + case SeekOrigin.End: + { + offset += GetAbsoluteLength(); + break; + } + } + + if (offset < 0) + { + throw new IOException("Cannot seek beyond the beginning of the stream."); + } + + int position = (int)offset; + + for (int ii = 0; ii < m_buffers.Count; ii++) + { + int length = GetBufferCount(ii); + + if (offset <= length) + { + SetCurrentBuffer(ii); + m_currentPosition = (int)offset; + return position; + } + + offset -= length; + } + + throw new IOException("Cannot seek beyond the end of the stream."); + } + + /// + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + /// + public override void Write(byte[] buffer, int offset, int count) + { + while (count > 0) + { + // check for end of stream. + if (m_currentBuffer.Array == null) + { + if (m_bufferManager == null) + { + throw new IOException("Attempt to write past end of stream."); + } + + byte[] newBuffer = m_bufferManager.TakeBuffer(m_bufferSize, "ArraySegmentStream.Write"); + m_buffers.Add(new ArraySegment(newBuffer, m_start, m_count)); + m_endOfLastBuffer = 0; + + SetCurrentBuffer(m_buffers.Count - 1); + } + + int bytesLeft = m_currentBuffer.Count - m_currentPosition; + + // copy the bytes requested. + if (bytesLeft >= count) + { + Array.Copy(buffer, offset, m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, count); + + m_currentPosition += count; + + if (m_bufferIndex == m_buffers.Count - 1) + { + if (m_endOfLastBuffer < m_currentPosition) + { + m_endOfLastBuffer = m_currentPosition; + } + } + + return; + } + + // copy the bytes available and move to next buffer. + Array.Copy(buffer, offset, m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, bytesLeft); + + offset += bytesLeft; + count -= bytesLeft; + + // move to next buffer. + SetCurrentBuffer(m_bufferIndex + 1); + } + } + #endregion + + #region Private Methods + /// + /// Sets the current buffer. + /// + private void SetCurrentBuffer(int index) + { + if (index < 0 || index >= m_buffers.Count) + { + m_currentBuffer = new ArraySegment(); + m_currentPosition = 0; + return; + } + + m_bufferIndex = index; + m_currentBuffer = m_buffers[index]; + m_currentPosition = 0; + } + + /// + /// Returns the total length in all buffers. + /// + private int GetAbsoluteLength() + { + int length = 0; + + for (int ii = 0; ii < m_buffers.Count; ii++) + { + length += GetBufferCount(ii); + } + + return length; + } + + /// + /// Returns the current position. + /// + private int GetAbsolutePosition() + { + // check if at end of stream. + if (m_currentBuffer.Array == null) + { + return GetAbsoluteLength(); + } + + // calculate position. + int position = 0; + + for (int ii = 0; ii < m_bufferIndex; ii++) + { + position += GetBufferCount(ii); + } + + position += m_currentPosition; + + return position; + } + + /// + /// Returns the number of bytes used in the buffer. + /// + private int GetBufferCount(int index) + { + if (index == m_buffers.Count - 1) + { + return m_endOfLastBuffer; + } + + return m_buffers[index].Count; + } + #endregion + + #region Private Fields + private int m_bufferIndex; + private ArraySegment m_currentBuffer; + private int m_currentPosition; + private BufferCollection m_buffers; + private BufferManager m_bufferManager; + private int m_start; + private int m_count; + private int m_bufferSize; + private int m_endOfLastBuffer; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/BaseBinding.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/BaseBinding.cs new file mode 100644 index 00000000..a2520e51 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/BaseBinding.cs @@ -0,0 +1,55 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Bindings +{ + /// + /// The binding for the UA native stack + /// + public abstract class BaseBinding + { + #region Constructors + /// + /// Initializes the binding. + /// + protected BaseBinding( + NamespaceTable namespaceUris, + EncodeableFactory factory, + EndpointConfiguration configuration) + { + m_messageContext = new ServiceMessageContext(); + + m_messageContext.MaxStringLength = configuration.MaxStringLength; + m_messageContext.MaxByteStringLength = configuration.MaxByteStringLength; + m_messageContext.MaxArrayLength = configuration.MaxArrayLength; + m_messageContext.MaxMessageSize = configuration.MaxMessageSize; + m_messageContext.Factory = factory; + m_messageContext.NamespaceUris = namespaceUris; + } + #endregion + + #region Public Properties + /// + /// The message context to use with the binding. + /// + public ServiceMessageContext MessageContext + { + get { return m_messageContext; } + set { m_messageContext = value; } + } + #endregion + + #region Private Fields + private ServiceMessageContext m_messageContext; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/BufferManager.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/BufferManager.cs new file mode 100644 index 00000000..e27c463a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/BufferManager.cs @@ -0,0 +1,367 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua.Bindings +{ + + #region BufferCollection Class + /// + /// A collection of buffers. + /// + public class BufferCollection : List> + { + #region Constructors + /// + /// Creates an empty collection. + /// + public BufferCollection() + { + } + + /// + /// Creates an empty collection with the specified capacity. + /// + /// The capacity. + public BufferCollection(int capacity) : base(capacity) + { + } + + /// + /// Creates a collection with a single element. + /// + /// The segment. + public BufferCollection(ArraySegment segment) + { + Add(segment); + } + + /// + /// Creates a collection with a single element. + /// + /// The array. + /// The offset. + /// The count. + public BufferCollection(byte[] array, int offset, int count) + { + Add(new ArraySegment(array, offset, count)); + } + #endregion + + #region Public Methods + /// + /// Returns the buffers to the manager before clearing the collection. + /// + /// The buffer manager. + /// The owner. + /// Length of all buffers in this collection + public int Release(BufferManager bufferManager, string owner) + { + int count = 0; + + foreach (ArraySegment buffer in this) + { + count += buffer.Count; + bufferManager.ReturnBuffer(buffer.Array, owner); + } + + Clear(); + + return count; + } + + /// + /// Returns the total amount of data in the buffers. + /// + /// The total size. + public int TotalSize + { + get + { + int count = 0; + + for (int ii = 0; ii < this.Count; ii++) + { + count += this[ii].Count; + } + + return count; + } + } + #endregion + } + #endregion + + #region BufferManager Class + /// + /// A thread safe wrapper for the buffer manager class. + /// + public class BufferManager + { + #region Constructors + /// + /// Constructs the buffer manager. + /// + /// The name. + /// Max size of the pool. + /// Max size of the buffer. + public BufferManager(string name, int maxPoolSize, int maxBufferSize) + { + m_name = name; + m_manager = System.ServiceModel.Channels.BufferManager.CreateBufferManager(maxPoolSize, maxBufferSize + m_cookieLength); + m_maxBufferSize = maxBufferSize; + } + #endregion + + #region Public Methods + /// + /// Returns a buffer with at least the specified size. + /// + /// The size. + /// The owner. + /// The buffer content + public byte[] TakeBuffer(int size, string owner) + { + if (size > m_maxBufferSize) + { + throw new ArgumentOutOfRangeException(nameof(size)); + } + + lock (m_lock) + { + byte[] buffer = m_manager.TakeBuffer(size + m_cookieLength); +#if TRACK_MEMORY + byte[] bytes = BitConverter.GetBytes(++m_id); + Array.Copy(bytes, 0, buffer, buffer.Length-5, bytes.Length); + + m_allocated += buffer.Length; + + Allocation allocation = new Allocation(); + + allocation.Id = m_id; + allocation.Buffer = buffer; + allocation.Timestamp = DateTime.UtcNow; + allocation.Owner = owner; + + m_allocations[m_id] = allocation; +#endif +#if TRACE_MEMORY + Utils.Trace("{0:X}:TakeBuffer({1:X},{2:X},{3},{4})", this.GetHashCode(), buffer.GetHashCode(), buffer.Length, owner, ++m_buffersTaken); +#endif + buffer[buffer.Length - 1] = m_cookieUnlocked; + return buffer; + } + } + + /// + /// Changes the owner of a buffer (used for debugging only). + /// + /// The buffer. + /// The owner. + public void TransferBuffer(byte[] buffer, string owner) + { +#if TRACK_MEMORY + if (buffer == null) + { + return; + } + + lock (m_lock) + { + int id = BitConverter.ToInt32(buffer, buffer.Length-5); + + Allocation allocation = null; + + if (m_allocations.TryGetValue(id, out allocation)) + { + allocation.Owner = Utils.Format("{0}/{1}", allocation.Owner, owner); + + if (allocation.Reported > 0) + { + Utils.Trace("{0}: Id={1}; Owner={2}; Size={3} KB; *** TRANSFERRED ***", + m_name, + allocation.Id, + allocation.Owner, + allocation.Buffer.Length/1024); + } + } + } +#endif +#if TRACE_MEMORY + Utils.Trace("{0:X}:TransferBuffer({1:X},{2:X},{3})", this.GetHashCode(), buffer.GetHashCode(), buffer.Length, owner); +#endif + } + + /// + /// Locks the buffer (used for debugging only). + /// + /// The buffer. + public static void LockBuffer(byte[] buffer) + { + if (buffer[buffer.Length-1] != m_cookieUnlocked) + { + throw new InvalidOperationException("Buffer is already locked."); + } +#if TRACE_MEMORY + Utils.Trace("LockBuffer({0:X},{1:X})", buffer.GetHashCode(), buffer.Length); +#endif + buffer[buffer.Length-1] = m_cookieLocked; + } + + /// + /// Unlocks the buffer (used for debugging only). + /// + /// The buffer. + public static void UnlockBuffer(byte[] buffer) + { + if (buffer[buffer.Length-1] != m_cookieLocked) + { + throw new InvalidOperationException("Buffer is not locked."); + } +#if TRACE_MEMORY + Utils.Trace("UnlockBuffer({0:X},{1:X})", buffer.GetHashCode(), buffer.Length); +#endif + buffer[buffer.Length-1] = m_cookieUnlocked; + } + + /// + /// Release the buffer. + /// + /// The buffer. + /// The owner. + public void ReturnBuffer(byte[] buffer, string owner) + { + if (buffer == null) + { + return; + } + + lock (m_lock) + { +#if TRACE_MEMORY + Utils.Trace("{0:X}:ReturnBuffer({1:X},{2:X},{3},{4})", this.GetHashCode(), buffer.GetHashCode(), buffer.Length, owner, --m_buffersTaken); +#endif + if (buffer[buffer.Length-1] != m_cookieUnlocked) + { + throw new InvalidOperationException("Buffer has been locked."); + } + + // destroy cookie + buffer[buffer.Length - 1] = m_cookieUnlocked ^ m_cookieLocked; + +#if TRACK_MEMORY + m_allocated -= buffer.Length; + + int id = BitConverter.ToInt32(buffer, buffer.Length-5); + + Allocation allocation = null; + + if (m_allocations.TryGetValue(id, out allocation)) + { + allocation.ReleasedBy = owner; + + if (allocation.Reported > 0) + { + Utils.Trace("{0}: Id={1}; Owner={2}; ReleasedBy={3}; Size={4} KB; *** RETURNED ***", + m_name, + allocation.Id, + allocation.Owner, + allocation.ReleasedBy, + allocation.Buffer.Length/1024); + } + } + + m_allocations.Remove(id); + + //Utils.Trace("Deallocated ID {0}: {1}/{2}", id, buffer.Length, m_allocated); + + foreach (KeyValuePair current in m_allocations) + { + allocation = current.Value; + + if (allocation.ReleasedBy != null) + { + continue; + } + + long ticks = allocation.Timestamp.Ticks; + + double age = Math.Truncate(new TimeSpan(DateTime.UtcNow.Ticks - ticks).TotalSeconds); + + if (age > 3 && Math.Truncate(age)%3 == 0) + { + if (allocation.Reported < age) + { + Utils.Trace("{0}: Id={1}; Owner={2}; Size={3} KB; Age={4}", + m_name, + allocation.Id, + allocation.Owner, + allocation.Buffer.Length/1024, + age); + + allocation.Reported = (int)age; + } + } + } + + for (int ii = 0; ii < buffer.Length-5; ii++) + { + if (m_name == "Server") + { + buffer[ii] = 0xFA; + } + else + { + buffer[ii] = 0xFC; + } + } +#endif + + m_manager.ReturnBuffer(buffer); + } + } +#endregion + +#region Private Fields + private object m_lock = new object(); + private string m_name; + private int m_maxBufferSize; +#if TRACE_MEMORY + private int m_buffersTaken = 0; +#endif + private System.ServiceModel.Channels.BufferManager m_manager; + const byte m_cookieLocked = 0xa5; + const byte m_cookieUnlocked = 0x5a; +#if TRACK_MEMORY + const byte m_cookieLength = 5; + class Allocation + { + public int Id; + public byte[] Buffer; + public DateTime Timestamp; + public string Owner; + public string ReleasedBy; + public int Reported; + } + + private int m_allocated; + private int m_id; + private SortedDictionary m_allocations = new SortedDictionary(); +#else + const byte m_cookieLength = 1; +#endif + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/ITransportBindings.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/ITransportBindings.cs new file mode 100644 index 00000000..960b454c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/ITransportBindings.cs @@ -0,0 +1,118 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// This is an interface to the scheme of a transport binding. + /// + public interface ITransportBindingScheme + { + /// + /// The protocol scheme supported by the binding. + /// + string UriScheme { get; } + } + + /// + /// This is an interface to the factory of a transport binding. + /// + public interface ITransportBindingFactory + : ITransportBindingScheme + { + /// + /// The factory to create a new transport. + /// + /// The transport. + T Create(); + } + + /// + /// The interface to manage transport bindings. + /// + public interface ITransportBindings + { + /// + /// Get a transport binding for a uri scheme. + /// + /// The uri scheme. + T GetBinding(string uriScheme); + + /// + /// Return if there is a transport listener for a uri scheme. + /// + /// The uri scheme. + bool HasBinding(string uriScheme); + + /// + /// Set the transport factory to the binding. + /// Overrides other bindings with the same uri scheme. + /// + void SetBinding(T binding); + + /// + /// Add all bindings with interface exported from a assembly. + /// + /// The assembly with the bindings. + IEnumerable AddBindings(Assembly assembly); + + /// + /// Add all bindings with interface from a list. + /// + /// The array of binding types with interface. + IEnumerable AddBindings(IEnumerable bindings); + } + + /// + /// This is the transport listener factory interface for a binding (server). + /// + public interface ITransportListenerFactory : + ITransportBindingFactory + { + /// + /// Create the service host for a server using + /// + /// The server base. + /// The service hosts are added to this list. + /// The application configuration. + /// The base addreses for the service host. + /// The server description. + /// The list of supported security policies. + /// The server certificate. + /// The cert cahin of the server certificate. + List CreateServiceHost( + ServerBase serverBase, + IDictionary hosts, + ApplicationConfiguration configuration, + IList baseAddresses, + ApplicationDescription serverDescription, + List securityPolicies, + X509Certificate2 instanceCertificate, + X509Certificate2Collection instanceCertificateChain + ); + } + + /// + /// This is the transport channel factory interface for a binding (client). + /// + public interface ITransportChannelFactory : + ITransportBindingFactory + { + } + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/TransportBindings.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/TransportBindings.cs new file mode 100644 index 00000000..b8f343a1 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/TransportBindings.cs @@ -0,0 +1,88 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua.Bindings +{ + /// + /// The transpaort bindings available for teh stack. + /// + public static class TransportBindings + { + static TransportBindings() + { + Channels = new TransportChannelBindings(new Type[] { typeof(TcpTransportChannelFactory) }); + Listeners = new TransportListenerBindings(new Type[] { typeof(TcpTransportListenerFactory) }); + } + + /// + /// The bindings for transport channels (client). + /// + public static TransportChannelBindings Channels { get; private set; } + + /// + /// The bindings for transport listeners (server). + /// + public static TransportListenerBindings Listeners { get; private set; } + + /// + /// The bindings for the transport channels. + /// + public class TransportChannelBindings : + TransportBindingsBase + { + /// + /// Initialize the transport listener. + /// + /// List of known default bindings. + public TransportChannelBindings(Type[] defaultBindings) : base(defaultBindings) + { + } + + /// + /// Get a transport channel for the specified uri scheme. + /// + /// The uri scheme of the transport. + public ITransportChannel GetChannel(string uriScheme) + { + var binding = GetBinding(uriScheme); + return binding?.Create(); + } + } + + /// + /// The bindings for the transport listeners. + /// + public class TransportListenerBindings : + TransportBindingsBase + { + /// + /// Initialize the transport listener. + /// + /// List of known default bindings. + public TransportListenerBindings(Type[] defaultBindings) : base(defaultBindings) + { + } + + /// + /// Get a transport listener for the specified uri scheme. + /// + /// The uri scheme of the transport. + public ITransportListener GetListener(string uriScheme) + { + var binding = GetBinding(uriScheme); + return binding?.Create(); + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/TransportBindingsBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/TransportBindingsBase.cs new file mode 100644 index 00000000..8c110c98 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Bindings/TransportBindingsBase.cs @@ -0,0 +1,174 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace Opc.Ua.Bindings +{ + /// + /// The bindings for the transport listeners. + /// + public class TransportBindingsBase : + ITransportBindings where T : class, ITransportBindingScheme + { + /// + /// Implement the default constructor. + /// + /// + /// The default constructor adds all interfaces T. + /// + protected TransportBindingsBase() + { + Bindings = new Dictionary(); + AddBindings(typeof(TransportBindingsBase).Assembly); + } + + /// + /// Initialize object with default list of bindings. + /// + protected TransportBindingsBase(Type[] defaultBindings) + { + Bindings = new Dictionary(); + AddBindings(defaultBindings); + } + + #region Public Properties + /// + /// Dictionary of bindings. + /// + protected Dictionary Bindings { get; private set; } + #endregion + + #region ITransportBindings + /// + public T GetBinding(string uriScheme) + { + T binding; + if (!Bindings.TryGetValue(uriScheme, out binding)) + { + TryAddDefaultTransportBindings(uriScheme); + if (!Bindings.TryGetValue(uriScheme, out binding)) + { + return default(T); + } + } + return binding; + } + + /// + public bool HasBinding(string uriScheme) + { + T binding; + if (Bindings.TryGetValue(uriScheme, out binding)) + { + return true; + } + return false; + } + + /// + public void SetBinding(T binding) + { + Bindings[binding.UriScheme] = binding; + } + + /// + public IEnumerable AddBindings(Assembly assembly) + { + var bindings = assembly.GetExportedTypes().Where(type => IsBindingType(type)); + return AddBindings(bindings); + } + + /// + public IEnumerable AddBindings(IEnumerable bindings) + { + var result = new List(); + foreach (Type bindingType in bindings) + { + var binding = Activator.CreateInstance(bindingType) as T; + if (binding != null) + { + Bindings[binding.UriScheme] = binding; + result.Add(bindingType); + } + } + return result; + } + #endregion + + #region Private Methods + /// + /// Validate the type is a transport listener. + /// + protected static bool IsBindingType(System.Type bindingType) + { + if (bindingType == null) + { + return false; + } + + var bindingTypeInfo = bindingType.GetTypeInfo(); + if (bindingTypeInfo.IsAbstract || + !typeof(T).GetTypeInfo().IsAssignableFrom(bindingTypeInfo)) + { + return false; + } + + var listener = Activator.CreateInstance(bindingType) as T; + if (listener == null) + { + return false; + } + + return true; + } + + /// + /// Try to load a binding from well known assemblies at runtime. + /// + /// The uri scheme of the binding. + private bool TryAddDefaultTransportBindings(string scheme) + { + string assemblyName; + if (Utils.DefaultBindings.TryGetValue(scheme, out assemblyName)) + { + Assembly assembly = null; + string fullName = Utils.DefaultOpcUaCoreAssemblyFullName.Replace(Utils.DefaultOpcUaCoreAssemblyName, assemblyName); + try + { + assembly = Assembly.Load(fullName); + } + catch + { + Utils.Trace(Utils.TraceMasks.Error, "Failed to load the assembly {0} for transport binding {1}.", + fullName, scheme + ); + } + + if (assembly != null) + { + var listeners = AddBindings(assembly); + return listeners.Count() > 0; + } + } + else + { + Utils.Trace(Utils.TraceMasks.Error, "The transport binding {0} is unsupported.", scheme); + } + return false; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/ClientBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/ClientBase.cs new file mode 100644 index 00000000..e0d3c623 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/ClientBase.cs @@ -0,0 +1,671 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Threading; +using System.Reflection; + +namespace Opc.Ua +{ + /// + /// The client side interface with a UA server. + /// + public partial class ClientBase : IDisposable + { + #region Constructors + /// + /// Intializes the object with a channel and a message context. + /// + /// The channel. + public ClientBase(ITransportChannel channel) + { + if (channel == null) throw new ArgumentNullException(nameof(channel)); + + m_channel = channel; + m_useTransportChannel = true; + + UaChannelBase uaChannel = channel as UaChannelBase; + + if (uaChannel != null) + { + m_useTransportChannel = uaChannel.m_uaBypassChannel != null || uaChannel.UseBinaryEncoding; + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + CloseChannel(); + + m_disposed = true; + } + #endregion + + #region Public Properties + /// + /// The description of the endpoint. + /// + public EndpointDescription Endpoint + { + get + { + ITransportChannel channel = TransportChannel; + + if (channel != null) + { + return channel.EndpointDescription; + } + + return null; + } + } + + /// + /// The configuration for the endpoint. + /// + public EndpointConfiguration EndpointConfiguration + { + get + { + ITransportChannel channel = TransportChannel; + + if (channel != null) + { + return channel.EndpointConfiguration; + } + + return null; + } + } + + /// + /// The message context used when serializing messages. + /// + /// The message context. + public ServiceMessageContext MessageContext + { + get + { + ITransportChannel channel = TransportChannel; + + if (channel != null) + { + return channel.MessageContext; + } + + return null; + } + } + + /// + /// Gets or set the channel being wrapped by the client object. + /// + /// The transport channel. + public ITransportChannel TransportChannel + { + get + { + ITransportChannel channel = m_channel; + + if (channel != null) + { + if (m_disposed) + { + throw new ObjectDisposedException("ClientBase has been disposed."); + } + } + + return channel; + } + + protected set + { + ITransportChannel channel = m_channel; + m_channel = null; + + if (channel != null) + { + try + { + channel.Close(); + channel.Dispose(); + } + catch (Exception) + { + // ignore errors. + } + } + + m_channel = value; + } + } + + /// + /// The channel being wrapped by the client object. + /// + internal IChannelBase InnerChannel + { + get + { + ITransportChannel channel = TransportChannel; + + if (channel != null) + { + return m_channel as IChannelBase; + } + + return null; + } + } + + /// + /// What diagnostics the server should return in the response. + /// + /// The diagnostics. + public DiagnosticsMasks ReturnDiagnostics + { + get + { + return m_returnDiagnostics; + } + + set + { + m_returnDiagnostics = value; + } + } + + /// + /// Sets the timeout for an operation. + /// + public int OperationTimeout + { + get + { + ITransportChannel channel = TransportChannel; + + if (channel != null) + { + return m_channel.OperationTimeout; + } + + return 0; + } + + set + { + ITransportChannel channel = TransportChannel; + + if (channel != null) + { + m_channel.OperationTimeout = value; + } + } + } + + /// + /// Gets a value that indicates whether to use the TransportChannel when sending requests. + /// + protected bool UseTransportChannel + { + get + { + ITransportChannel channel = TransportChannel; + + if (channel == null) + { + throw new ObjectDisposedException("TransportChannel is not available."); + } + + return m_useTransportChannel; + } + } + #endregion + + #region Public Methods + /// + /// Closes the channel. + /// + public virtual StatusCode Close() + { + if (m_channel != null) + { + m_channel.Close(); + m_channel = null; + } + + m_authenticationToken = null; + return StatusCodes.Good; + } + + /// + /// Whether the object has been disposed. + /// + /// true if disposed; otherwise, false. + public bool Disposed + { + get + { + return m_disposed; + } + } + + /// + /// Generates a unique request handle. + /// + public uint NewRequestHandle() + { + return (uint)Utils.IncrementIdentifier(ref m_nextRequestHandle); + } + #endregion + + #region Protected Methods + /// + /// Closes the channel. + /// + protected void CloseChannel() + { + if (m_channel != null) + { + try + { + m_channel.Close(); + } + catch + { + // ignore errors. + } + + DisposeChannel(); + } + } + + /// + /// Disposes the channel. + /// + protected void DisposeChannel() + { + if (m_channel != null) + { + try + { + m_channel.Dispose(); + } + catch + { + // ignore errors. + } + + m_channel = null; + } + } + + /// + /// An object used to synchronize access to the session state. + /// + /// The synchronization object. + protected object SyncRoot + { + get { return m_lock; } + } + + /// + /// The authorization token used to connect to the server. + /// + /// The authentication token. + protected NodeId AuthenticationToken + { + get + { + return m_authenticationToken; + } + + set + { + m_authenticationToken = value; + } + } + + /// + /// Updates the header of a service request. + /// + /// The request. + [Obsolete("Must override the version with useDefault parameter.")] + protected virtual void UpdateRequestHeader(IServiceRequest request) + { + UpdateRequestHeader(request, request == null); + } + + /// + /// Updates the header of a service request. + /// + /// The request. + /// if set to true use defaults]. + protected virtual void UpdateRequestHeader(IServiceRequest request, bool useDefaults) + { + lock (m_lock) + { + if (request.RequestHeader == null) + { + request.RequestHeader = new RequestHeader(); + } + + if (useDefaults) + { + request.RequestHeader.ReturnDiagnostics = (uint)(int)m_returnDiagnostics; + } + + if (request.RequestHeader.RequestHandle == 0) + { + request.RequestHeader.RequestHandle = (uint)Utils.IncrementIdentifier(ref m_nextRequestHandle); + } + + if (NodeId.IsNull(request.RequestHeader.AuthenticationToken)) + { + request.RequestHeader.AuthenticationToken = m_authenticationToken; + } + + request.RequestHeader.Timestamp = DateTime.UtcNow; + request.RequestHeader.AuditEntryId = CreateAuditLogEntry(request); + } + } + + /// + /// Updates the header of a service request. + /// + /// The request. + /// if set to true the no request header was provided. + /// The name of the service. + protected virtual void UpdateRequestHeader(IServiceRequest request, bool useDefaults, string serviceName) + { + UpdateRequestHeader(request, useDefaults); + + Utils.Trace( + (int)Utils.TraceMasks.Service, + "{0} Called. RequestHandle={1}, PendingRequestCount={2}", + serviceName, + request.RequestHeader.RequestHandle, + Interlocked.Increment(ref m_pendingRequestCount)); + } + + /// + /// Called when a request completes. + /// + /// The request. + /// The response. + /// The name of the service. + protected virtual void RequestCompleted(IServiceRequest request, IServiceResponse response, string serviceName) + { + uint requestHandle = 0; + StatusCode statusCode = StatusCodes.Good; + + if (request != null) + { + requestHandle = request.RequestHeader.RequestHandle; + } + else if (response != null) + { + requestHandle = response.ResponseHeader.RequestHandle; + statusCode = response.ResponseHeader.ServiceResult; + } + + if (response == null) + { + statusCode = StatusCodes.Bad; + } + + int pendingRequestCount = Interlocked.Decrement(ref m_pendingRequestCount); + + if (statusCode != StatusCodes.Good) + { + Utils.Trace( + (int)Utils.TraceMasks.Service, + "{0} Completed. RequestHandle={1}, PendingRequestCount={3}, StatusCode={2}", + serviceName, + requestHandle, + statusCode, + pendingRequestCount); + } + else + { + Utils.Trace( + (int)Utils.TraceMasks.Service, + "{0} Completed. RequestHandle={1}, PendingRequestCount={2}", + serviceName, + requestHandle, + pendingRequestCount); + } + } + + /// + /// Creates an audit log entry for the request. + /// + /// The request. + /// log entry + protected virtual string CreateAuditLogEntry(IServiceRequest request) + { + return request.RequestHeader.AuditEntryId; + } + + /// + /// Throws an exception if a response contains an error. + /// + /// The header. + protected static void ValidateResponse(ResponseHeader header) + { + if (header == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse, "Null header in response."); + } + + if (StatusCode.IsBad(header.ServiceResult)) + { + throw new ServiceResultException(new ServiceResult(header.ServiceResult, header.ServiceDiagnostics, header.StringTable)); + } + } + #endregion + + #region Static Methods + /// + /// Validates a response returned by the server. + /// + /// The response. + /// The request. + public static void ValidateResponse(IList response, IList request) + { + if (response is DiagnosticInfoCollection) + { + throw new ArgumentException("Must call ValidateDiagnosticInfos() for DiagnosticInfoCollections.", nameof(response)); + } + + if (response == null || response.Count != request.Count) + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "The server returned a list without the expected number of elements."); + } + } + + /// + /// Validates a response returned by the server. + /// + /// The response. + /// The request. + public static void ValidateDiagnosticInfos(DiagnosticInfoCollection response, IList request) + { + // returning an empty list for diagnostic info arrays is allowed. + if (response != null && response.Count != 0 && response.Count != request.Count) + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "The server forgot to fill in the DiagnosticInfos array correctly when returning an operation level error."); + } + } + + /// + /// Converts a service response to a ServiceResult object. + /// + /// The status code. + /// The index. + /// The diagnostic information. + /// The response header. + /// Converted service response. + public static ServiceResult GetResult( + StatusCode statusCode, + int index, + DiagnosticInfoCollection diagnosticInfos, + ResponseHeader responseHeader) + { + if (diagnosticInfos != null && diagnosticInfos.Count > index) + { + return new ServiceResult(statusCode.Code, diagnosticInfos[index], responseHeader.StringTable); + } + + return new ServiceResult(statusCode.Code); + } + + /// + /// Validates a DataValue returned from the server. + /// + /// The value. + /// The expected type. + /// The index. + /// The diagnostic information. + /// The response header. + /// Result of the vaidation + public static ServiceResult ValidateDataValue( + DataValue value, + Type expectedType, + int index, + DiagnosticInfoCollection diagnosticInfos, + ResponseHeader responseHeader) + { + // check for null. + if (value == null) + { + return new ServiceResult(StatusCodes.BadUnexpectedError, "The server returned a value for a data value."); + } + + // check status code. + if (StatusCode.IsBad(value.StatusCode)) + { + return GetResult(value.StatusCode, index, diagnosticInfos, responseHeader); + } + + // check data type. + if (expectedType != null) + { + if (!expectedType.IsInstanceOfType(value.Value)) + { + return ServiceResult.Create( + StatusCodes.BadUnexpectedError, + "The server returned data value of type {0} when a value of type {1} was expected.", + (value.Value != null) ? value.Value.GetType().Name : "(null)", + expectedType.Name); + } + } + + return null; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private ITransportChannel m_channel; + private NodeId m_authenticationToken; + private DiagnosticsMasks m_returnDiagnostics; + private int m_nextRequestHandle; + private int m_pendingRequestCount; + private bool m_disposed; + private bool m_useTransportChannel; + #endregion + } + + /// + /// The client side interface with a UA server. + /// + public partial class SessionClient + { + #region IDisposable Implementation + /// + /// An overrideable version of the Dispose. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected override void Dispose(bool disposing) + { + if (disposing) + { + m_sessionId = null; + } + + base.Dispose(disposing); + } + #endregion + + #region Public Properties + /// + /// The server assigned identifier for the current session. + /// + /// The session id. + public NodeId SessionId + { + get + { + return m_sessionId; + } + } + + /// + /// Whether a session has beed created with the server. + /// + /// true if connected; otherwise, false. + public bool Connected + { + get + { + return m_sessionId != null; + } + } + #endregion + + #region Protected Methods + /// + /// Called when a new session is created. + /// + /// The session id. + /// The session cookie. + public virtual void SessionCreated(NodeId sessionId, NodeId sessionCookie) + { + lock (m_lock) + { + m_sessionId = sessionId; + AuthenticationToken = sessionCookie; + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private NodeId m_sessionId; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/DiscoveryClient.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/DiscoveryClient.cs new file mode 100644 index 00000000..9f2d033c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/DiscoveryClient.cs @@ -0,0 +1,386 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua +{ + /// + /// An object used by clients to access a UA discovery service. + /// + public partial class DiscoveryClient + { + #region Constructors + /// + /// Creates a binding for to use for discovering servers. + /// + public static DiscoveryClient Create( + ApplicationConfiguration application, + Uri discoveryUrl) + { + var configuration = EndpointConfiguration.Create(); + ITransportChannel channel = DiscoveryChannel.Create(application, discoveryUrl, configuration, new ServiceMessageContext()); + return new DiscoveryClient(channel); + } + + /// + /// Creates a binding for to use for discovering servers. + /// + public static DiscoveryClient Create( + ApplicationConfiguration application, + Uri discoveryUrl, + EndpointConfiguration configuration) + { + if (configuration == null) + { + configuration = EndpointConfiguration.Create(); + } + + ITransportChannel channel = DiscoveryChannel.Create(application, discoveryUrl, configuration, application.CreateMessageContext()); + return new DiscoveryClient(channel); + } + + /// + /// Creates a binding for to use for discovering servers. + /// + public static DiscoveryClient Create( + ApplicationConfiguration application, + ITransportWaitingConnection connection, + EndpointConfiguration configuration) + { + if (configuration == null) + { + configuration = EndpointConfiguration.Create(); + } + + ITransportChannel channel = DiscoveryChannel.Create(application, connection, configuration, application.CreateMessageContext()); + return new DiscoveryClient(channel); + } + + /// + /// Creates a binding for to use for discovering servers. + /// + /// The discovery URL. + /// + public static DiscoveryClient Create(Uri discoveryUrl) + { + return DiscoveryClient.Create(discoveryUrl, null); + } + + /// + /// Creates a binding for to use for discovering servers. + /// + /// The discovery URL. + /// The configuration. + /// + public static DiscoveryClient Create( + Uri discoveryUrl, + EndpointConfiguration configuration) + { + return DiscoveryClient.Create(discoveryUrl, configuration, null); + } + + /// + /// Creates a binding for to use for discovering servers. + /// + public static DiscoveryClient Create( + ITransportWaitingConnection connection, + EndpointConfiguration configuration) + { + if (configuration == null) + { + configuration = EndpointConfiguration.Create(); + } + + ITransportChannel channel = DiscoveryChannel.Create(null, connection, configuration, new ServiceMessageContext()); + return new DiscoveryClient(channel); + } + + /// + /// Creates a binding for to use for discovering servers. + /// + /// The discovery URL. + /// The endpoint configuration. + /// /// The application configuration. + /// + public static DiscoveryClient Create( + Uri discoveryUrl, + EndpointConfiguration endpointConfiguration, + ApplicationConfiguration applicationConfiguration) + { + if (endpointConfiguration == null) + { + endpointConfiguration = EndpointConfiguration.Create(); + } + + // check if application configuration contains instance certificate. + X509Certificate2 clientCertificate = null; + + try + { + if (applicationConfiguration != null && + applicationConfiguration.SecurityConfiguration != null && + applicationConfiguration.SecurityConfiguration.ApplicationCertificate != null) + { + clientCertificate = applicationConfiguration.SecurityConfiguration.ApplicationCertificate.Find(true).Result; + } + } + catch + { + //ignore errors + } + + ITransportChannel channel = DiscoveryChannel.Create(discoveryUrl, endpointConfiguration, new ServiceMessageContext(), clientCertificate); + return new DiscoveryClient(channel); + } + #endregion + + #region Public Methods + /// + /// Invokes the GetEndpoints service. + /// + /// The collection of profile URIs. + /// + public virtual EndpointDescriptionCollection GetEndpoints(StringCollection profileUris) + { + EndpointDescriptionCollection endpoints = null; + + GetEndpoints( + null, + this.Endpoint.EndpointUrl, + null, + profileUris, + out endpoints); + + return PatchEndpointUrls(endpoints); + } + + /// + /// Invokes the GetEndpoints service async. + /// + /// The collection of profile URIs. + /// + public async virtual Task GetEndpointsAsync(StringCollection profileUris) + { + var endpoints = await GetEndpointsAsync(null, this.Endpoint.EndpointUrl, null, profileUris); + return PatchEndpointUrls(endpoints); + } + + /// + /// Invokes the FindServers service. + /// + /// The collection of server URIs. + /// + public virtual ApplicationDescriptionCollection FindServers(StringCollection serverUris) + { + ApplicationDescriptionCollection servers = null; + + FindServers( + null, + this.Endpoint.EndpointUrl, + null, + serverUris, + out servers); + + return servers; + } + + /// + /// Invokes the FindServersOnNetwork service. + /// + /// + /// + /// + /// + /// + public virtual ServerOnNetworkCollection FindServersOnNetwork( + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + out DateTime lastCounterResetTime) + { + ServerOnNetworkCollection servers = null; + + FindServersOnNetwork( + null, + startingRecordId, + maxRecordsToReturn, + serverCapabilityFilter, + out lastCounterResetTime, + out servers); + + return servers; + } + #endregion + #region Private Methods + /// + /// Helper to get endpoints async. + /// + private Task GetEndpointsAsync( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris) + { + return Task.Factory.FromAsync( + (callback, state) => BeginGetEndpoints(requestHeader, + endpointUrl, localeIds, profileUris, callback, state), + result => { + EndpointDescriptionCollection endpoints; + var response = EndGetEndpoints(result, out endpoints); + return endpoints; + }, + TaskCreationOptions.DenyChildAttach); + } + + /// + /// Patch returned endpoints urls with url used to reached the endpoint. + /// + private EndpointDescriptionCollection PatchEndpointUrls(EndpointDescriptionCollection endpoints) + { + // if a server is behind a firewall, can only be accessed with a FQDN or IP address + // it may return URLs that are not accessible to the client. This problem can be avoided + // by assuming that the domain in the URL used to call GetEndpoints can be used to + // access any of the endpoints. This code patches the returned endpoints accordingly. + Uri endpointUrl = Utils.ParseUri(this.Endpoint.EndpointUrl); + if (endpointUrl != null) + { + // patch discovery Url to endpoint Url used for service call + foreach (EndpointDescription discoveryEndPoint in endpoints) + { + Uri discoveryEndPointUri = Utils.ParseUri(discoveryEndPoint.EndpointUrl); + if (endpointUrl.Scheme == discoveryEndPointUri.Scheme) + { + UriBuilder builder = new UriBuilder(discoveryEndPointUri); + builder.Host = endpointUrl.DnsSafeHost; + builder.Port = endpointUrl.Port; + discoveryEndPoint.EndpointUrl = builder.ToString(); + } + + if (discoveryEndPoint.Server != null && + discoveryEndPoint.Server.DiscoveryUrls != null) + { + discoveryEndPoint.Server.DiscoveryUrls.Clear(); + discoveryEndPoint.Server.DiscoveryUrls.Add(this.Endpoint.EndpointUrl.ToString()); + } + } + } + return endpoints; + } + #endregion + } + + /// + /// A channel object used by clients to access a UA discovery service. + /// + public partial class DiscoveryChannel + { + #region Constructors + /// + /// Creates a new transport channel that supports the ISessionChannel service contract. + /// + /// The discovery url. + /// The configuration to use with the endpoint. + /// The message context to use when serializing the messages. + /// The client certificate to use. + /// + public static ITransportChannel Create( + Uri discoveryUrl, + EndpointConfiguration endpointConfiguration, + ServiceMessageContext messageContext, + X509Certificate2 clientCertificate = null) + { + // create a dummy description. + EndpointDescription endpoint = new EndpointDescription(); + + endpoint.EndpointUrl = discoveryUrl.ToString(); + endpoint.SecurityMode = MessageSecurityMode.None; + endpoint.SecurityPolicyUri = SecurityPolicies.None; + endpoint.Server.ApplicationUri = endpoint.EndpointUrl; + endpoint.Server.ApplicationType = ApplicationType.DiscoveryServer; + + ITransportChannel channel = CreateUaBinaryChannel( + null, + endpoint, + endpointConfiguration, + clientCertificate, + messageContext); + + return channel; + } + + /// + /// Creates a new transport channel that supports the ITransportWaitingConnection service contract. + /// + public static ITransportChannel Create( + ApplicationConfiguration configuration, + ITransportWaitingConnection connection, + EndpointConfiguration endpointConfiguration, + ServiceMessageContext messageContext, + X509Certificate2 clientCertificate = null) + { + // create a default description. + var endpoint = new EndpointDescription { + EndpointUrl = connection.EndpointUrl.ToString(), + SecurityMode = MessageSecurityMode.None, + SecurityPolicyUri = SecurityPolicies.None + }; + endpoint.Server.ApplicationUri = endpoint.EndpointUrl; + endpoint.Server.ApplicationType = ApplicationType.DiscoveryServer; + + ITransportChannel channel = CreateUaBinaryChannel( + configuration, + connection, + endpoint, + endpointConfiguration, + clientCertificate, + (X509Certificate2Collection)null, + messageContext); + + return channel; + } + + /// + /// Creates a new transport channel that supports the IDiscoveryChannel service contract. + /// + public static ITransportChannel Create( + ApplicationConfiguration configuration, + Uri discoveryUrl, + EndpointConfiguration endpointConfiguration, + ServiceMessageContext messageContext, + X509Certificate2 clientCertificate = null) + { + // create a default description. + var endpoint = new EndpointDescription { + EndpointUrl = discoveryUrl.ToString(), + SecurityMode = MessageSecurityMode.None, + SecurityPolicyUri = SecurityPolicies.None + }; + endpoint.Server.ApplicationUri = endpoint.EndpointUrl; + endpoint.Server.ApplicationType = ApplicationType.DiscoveryServer; + + ITransportChannel channel = CreateUaBinaryChannel( + configuration, + endpoint, + endpointConfiguration, + clientCertificate, + (X509Certificate2Collection)null, + messageContext); + + return channel; + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IChannelBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IChannelBase.cs new file mode 100644 index 00000000..9718e12b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IChannelBase.cs @@ -0,0 +1,128 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.ServiceModel; +using System.Runtime.Serialization; +using Opc.Ua.Bindings; +using System.ServiceModel.Description; +using System.ServiceModel.Channels; + +namespace Opc.Ua +{ + /// + /// The base interface for client proxies. + /// + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IChannelBase + { + /// + /// Gets the endpoint that the channel is connected to. + /// + [Obsolete("Should use the ITransportChannel interface to access these values.")] + EndpointDescription EndpointDescription { get; } + + /// + /// Gets the endpoint configuration used when the channel was connected. + /// + [Obsolete("Should use the ITransportChannel interface to access these values.")] + EndpointConfiguration EndpointConfiguration { get; } + + /// + /// Gets the message context to use with the service. + /// + [Obsolete("Should use the ITransportChannel interface to access these values.")] + ServiceMessageContext MessageContext { get; } + + /// + /// Returns true if the channel uses the UA Binary encoding. + /// + bool UseBinaryEncoding { get; } + + /// + /// Opens the channel with the server. + /// + [Obsolete("Should use the ITransportChannel interface to access this function.")] + void OpenChannel(); + + /// + /// Closes the channel with the server. + /// + [Obsolete("Should use the ITransportChannel interface to access this function.")] + void CloseChannel(); + + /// + /// Schedules an outgoing request. + /// + /// The request. + void ScheduleOutgoingRequest(IChannelOutgoingRequest request); + + /// + /// The operation contract for the InvokeService service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/InvokeService", ReplyAction = Namespaces.OpcUaWsdl + "/InvokeServiceResponse")] + InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request); + + /// + /// The operation contract for the InvokeService service. + /// + [OperationContractAttribute(AsyncPattern = true, Action = Namespaces.OpcUaWsdl + "/InvokeService", ReplyAction = Namespaces.OpcUaWsdl + "/InvokeServiceResponse")] + IAsyncResult BeginInvokeService(InvokeServiceMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a InvokeService service request. + /// + InvokeServiceResponseMessage EndInvokeService(IAsyncResult result); + } + + /// + /// An interface to an object that manages a request received from a client. + /// + public interface IChannelOutgoingRequest + { + /// + /// Gets the request. + /// + /// The request. + IServiceRequest Request { get; } + + /// + /// Gets the handler that must be used to send the request. + /// + /// The send request handler. + ChannelSendRequestEventHandler Handler { get; } + + /// + /// Used to call the default synchronous handler. + /// + /// + /// This method may block the current thread so the caller must not call in the + /// thread that calls IServerBase.ScheduleIncomingRequest(). + /// This method always traps any exceptions and reports them to the client as a fault. + /// + void CallSynchronously(); + + /// + /// Used to indicate that the asynchronous operation has completed. + /// + /// The response. May be null if an error is provided. + /// An error to result as a fault. + void OperationCompleted(IServiceResponse response, ServiceResult error); + } + + /// + /// A delegate used to dispatch outgoing service requests. + /// + public delegate IServiceResponse ChannelSendRequestEventHandler(IServiceRequest request); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IServiceRequest.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IServiceRequest.cs new file mode 100644 index 00000000..ef684e4f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IServiceRequest.cs @@ -0,0 +1,57 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + /// + /// An interface to a service request. + /// + public interface IServiceRequest : IEncodeable + { + /// + /// The header for the request. + /// + /// The request header. + RequestHeader RequestHeader { get; set; } + } + + /// + /// An interface to a service response. + /// + public interface IServiceResponse : IEncodeable + { + /// + /// The header for the response. + /// + /// The response header. + ResponseHeader ResponseHeader { get; } + } + + /// + /// An interface to a service message. + /// + public interface IServiceMessage + { + /// + /// Returns the request contained in the message. + /// + /// + IServiceRequest GetRequest(); + + /// + /// Creates an instance of a response message. + /// + /// The response. + /// + object CreateResponse(IServiceResponse response); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IUserIdentity.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IUserIdentity.cs new file mode 100644 index 00000000..0e0deb6a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/IUserIdentity.cs @@ -0,0 +1,63 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Xml; + +namespace Opc.Ua +{ + /// + /// An interface to an object with stores the identity of a user. + /// + public interface IUserIdentity + { + /// + /// A display name that identifies the user. + /// + /// The display name. + string DisplayName { get; } + + /// + /// The user token policy. + /// + /// The user token policy. + string PolicyId { get; } + + /// + /// The type of identity token used. + /// + /// The type of the token. + UserTokenType TokenType { get; } + + /// + /// The type of issued token. + /// + /// The type of the issued token. + XmlQualifiedName IssuedTokenType { get; } + + /// + /// Whether the object can create signatures to prove possession of the user's credentials. + /// + /// true if signatures are supported; otherwise, false. + bool SupportsSignatures { get; } + + /// + /// Get or sets the list of granted role ids associated to the UserIdentity. + /// + NodeIdCollection GrantedRoleIds { get; set; } + + /// + /// Returns a UA user identity token containing the user information. + /// + /// UA user identity token containing the user information. + UserIdentityToken GetIdentityToken(); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/InvokeServiceMessage.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/InvokeServiceMessage.cs new file mode 100644 index 00000000..17722056 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/InvokeServiceMessage.cs @@ -0,0 +1,76 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.ServiceModel; + +namespace Opc.Ua +{ + /// + /// The message contract for the InvokeService service. + /// + [MessageContract(IsWrapped=false)] + public class InvokeServiceMessage + { + /// + /// The body of the message. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public byte[] InvokeServiceRequest; + + /// + /// Initializes an empty message. + /// + public InvokeServiceMessage() + { + } + + /// + /// Initializes the message with the body. + /// + /// The invoke service request. + public InvokeServiceMessage(byte[] InvokeServiceRequest) + { + this.InvokeServiceRequest = InvokeServiceRequest; + } + } + + /// + /// The message contract for the InvokeService service response. + /// + [MessageContract(IsWrapped=false)] + public class InvokeServiceResponseMessage + { + /// + /// The body of the message. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public byte[] InvokeServiceResponse; + + /// + /// Initializes an empty message. + /// + public InvokeServiceResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + /// The invoke service response. + public InvokeServiceResponseMessage(byte[] InvokeServiceResponse) + { + this.InvokeServiceResponse = InvokeServiceResponse; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/RegistrationClient.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/RegistrationClient.cs new file mode 100644 index 00000000..6f93dc21 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/RegistrationClient.cs @@ -0,0 +1,103 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// An object used by clients to access a UA discovery service. + /// + public partial class RegistrationClient + { + #region Constructors + + /// + /// Creates a binding for to use for discovering servers. + /// + /// The configuration. + /// The description. + /// The endpoint configuration. + /// The instance certificate. + /// + public static RegistrationClient Create( + ApplicationConfiguration configuration, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 instanceCertificate) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + if (description == null) throw new ArgumentNullException(nameof(description)); + + ITransportChannel channel = RegistrationChannel.Create( + configuration, + description, + endpointConfiguration, + instanceCertificate, + new ServiceMessageContext()); + + return new RegistrationClient(channel); + } + + #endregion + } + + /// + /// A channel object used by clients to access a UA discovery service. + /// + public partial class RegistrationChannel + { + #region Constructors + /// + /// Creates a new transport channel that supports the IRegistrationChannel service contract. + /// + /// The application configuration. + /// The description for the endpoint. + /// The configuration to use with the endpoint. + /// The client certificate. + /// The message context to use when serializing the messages. + /// + public static ITransportChannel Create( + ApplicationConfiguration configuration, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + ServiceMessageContext messageContext) + { + // create a UA binary channel. + ITransportChannel channel = CreateUaBinaryChannel( + configuration, + description, + endpointConfiguration, + clientCertificate, + messageContext); + + // create a WCF XML channel. + if (channel == null) + { + Uri endpointUrl = new Uri(description.EndpointUrl); + channel = new RegistrationChannel(); + + TransportChannelSettings settings = new TransportChannelSettings(); + settings.Configuration = endpointConfiguration; + settings.Description = description; + settings.ClientCertificate = clientCertificate; + channel.Initialize(endpointUrl, settings); + } + + return channel; + } + + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/ReverseConnectHost.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/ReverseConnectHost.cs new file mode 100644 index 00000000..357cc90a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/ReverseConnectHost.cs @@ -0,0 +1,108 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using Opc.Ua.Bindings; + +namespace Opc.Ua +{ + /// + /// Reverse Connect Client Host. + /// + public class ReverseConnectHost + { + #region Constructors + /// + /// Creates a new reverse listener host for a client. + /// + public void CreateListener( + Uri url, + ConnectionWaitingHandlerAsync OnConnectionWaiting, + EventHandler OnConnectionStatusChanged + ) + { + if (url == null) throw new ArgumentNullException(nameof(url)); + + var listener = TransportBindings.Listeners.GetListener(url.Scheme); + if (listener == null) + { + throw ServiceResultException.Create( + StatusCodes.BadProtocolVersionUnsupported, + "Unsupported transport profile for scheme {0}.", url.Scheme); + } + + m_listener = listener; + Url = url; + m_onConnectionWaiting = OnConnectionWaiting; + m_onConnectionStatusChanged = OnConnectionStatusChanged; + } + #endregion + + #region Public Methods + /// + /// The Url which is used by the transport listener. + /// + public Uri Url { get; private set; } + + /// + /// Opens a reverse listener host. + /// + public void Open() + { + // create the UA listener. + try + { + var settings = new TransportListenerSettings { + Descriptions = null, + Configuration = null, + CertificateValidator = null, + NamespaceUris = null, + Factory = null, + ServerCertificate = null, + ServerCertificateChain = null, + ReverseConnectListener = true + }; + + m_listener.Open( + Url, + settings, + null + ); + + m_listener.ConnectionWaiting += m_onConnectionWaiting; + m_listener.ConnectionStatusChanged += m_onConnectionStatusChanged; + } + catch (Exception e) + { + Utils.Trace(e, "Could not open listener for {0}.", Url); + throw; + } + } + + /// + /// Close the reverse connect listener. + /// + public void Close() + { + m_listener.ConnectionWaiting -= m_onConnectionWaiting; + m_listener.ConnectionStatusChanged -= m_onConnectionStatusChanged; + m_listener.Close(); + } + #endregion + + #region Private Fields + private ITransportListener m_listener; + private ConnectionWaitingHandlerAsync m_onConnectionWaiting; + private EventHandler m_onConnectionStatusChanged; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/SessionChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/SessionChannel.cs new file mode 100644 index 00000000..54eb575a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/SessionChannel.cs @@ -0,0 +1,106 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// A channel object used by clients to access a UA service. + /// + public partial class SessionChannel + { + #region Constructors + /// + /// Creates a new transport channel that supports the ISessionChannel service contract. + /// + /// The application configuration. + /// The description for the endpoint. + /// The configuration to use with the endpoint. + /// The client certificate. + /// The message context to use when serializing the messages. + /// + public static ITransportChannel Create( + ApplicationConfiguration configuration, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + ServiceMessageContext messageContext) + { + return Create(configuration, description, endpointConfiguration, clientCertificate, null, messageContext); + } + + /// + /// Creates a new transport channel that supports the ISessionChannel service contract. + /// + /// The application configuration. + /// The description for the endpoint. + /// The configuration to use with the endpoint. + /// The client certificate. + /// The client certificate chain. + /// The message context to use when serializing the messages. + /// + public static ITransportChannel Create( + ApplicationConfiguration configuration, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + X509Certificate2Collection clientCertificateChain, + ServiceMessageContext messageContext) + { + // create a UA binary channel. + ITransportChannel channel = CreateUaBinaryChannel( + configuration, + description, + endpointConfiguration, + clientCertificate, + clientCertificateChain, + messageContext); + + return channel; + } + + /// + /// Creates a new transport channel that supports the ISessionChannel service contract. + /// + /// The application configuration. + /// + /// The description for the endpoint. + /// The configuration to use with the endpoint. + /// The client certificate. + /// The client certificate chain. + /// The message context to use when serializing the messages. + /// + public static ITransportChannel Create( + ApplicationConfiguration configuration, + ITransportWaitingConnection connection, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + X509Certificate2Collection clientCertificateChain, + ServiceMessageContext messageContext) + { + // create a UA binary channel. + ITransportChannel channel = CreateUaBinaryChannel( + configuration, + connection, + description, + endpointConfiguration, + clientCertificate, + clientCertificateChain, + messageContext); + + return channel; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/UaChannelBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/UaChannelBase.cs new file mode 100644 index 00000000..3b9bf251 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/UaChannelBase.cs @@ -0,0 +1,1094 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; +using System.ServiceModel; +using Opc.Ua.Bindings; + +namespace Opc.Ua +{ + /// + /// A base class for UA channel objects used to access UA interfaces + /// + public abstract class UaChannelBase : IChannelBase, ITransportChannel + { + #region Constructors + /// + /// Initializes the object with the specified binding and endpoint address. + /// + public UaChannelBase() + { + m_messageContext = null; + m_settings = null; + m_uaBypassChannel = null; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + // nothing to do. + } + #endregion + + #region IChannelBase Members + /// + /// Returns true if the channel uses the UA Binary encoding. + /// + public bool UseBinaryEncoding + { + get + { + if (m_settings != null && m_settings.Configuration != null) + { + return m_settings.Configuration.UseBinaryEncoding; + } + + return false; + } + } + + /// + /// Gets the binary encoding support. + /// + public BinaryEncodingSupport BinaryEncodingSupport + { + get + { + if (m_settings != null && m_settings.Configuration != null) + { + if (m_settings != null && m_settings.Configuration.UseBinaryEncoding) + { + return BinaryEncodingSupport.Required; + } + + return BinaryEncodingSupport.None; + } + + return BinaryEncodingSupport.Optional; + } + } + + /// + /// Opens the channel with the server. + /// + public void OpenChannel() + { + ICommunicationObject channel = m_channel as ICommunicationObject; + + if (channel != null && channel.State == CommunicationState.Closed) + { + channel.Open(); + } + } + + /// + /// Closes the channel with the server. + /// + public void CloseChannel() + { + ICommunicationObject channel = m_channel as ICommunicationObject; + + if (channel != null && channel.State == CommunicationState.Opened) + { + channel.Abort(); + } + } + + /// + /// Schedules an outgoing request. + /// + /// The request. + public void ScheduleOutgoingRequest(IChannelOutgoingRequest request) + { +#if MANAGE_CHANNEL_THREADS + System.Threading.Thread thread = new System.Threading.Thread(OnSendRequest); + thread.Start(request); +#else + throw new NotImplementedException(); +#endif + } + #endregion + + #region ITransportChannel Members + /// + /// A masking indicating which features are implemented. + /// + public TransportChannelFeatures SupportedFeatures + { + get + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.SupportedFeatures; + } + + return TransportChannelFeatures.Reconnect | TransportChannelFeatures.BeginSendRequest | TransportChannelFeatures.BeginClose; + } + } + + /// + /// Gets the description for the endpoint used by the channel. + /// + public EndpointDescription EndpointDescription + { + get + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.EndpointDescription; + } + + if (m_settings != null) + { + return m_settings.Description; + } + + return null; + } + } + + /// + /// Gets the configuration for the channel. + /// + public EndpointConfiguration EndpointConfiguration + { + get + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.EndpointConfiguration; + } + + if (m_settings != null) + { + return m_settings.Configuration; + } + + return null; + } + } + + /// + /// Gets the context used when serializing messages exchanged via the channel. + /// + public ServiceMessageContext MessageContext + { + get + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.MessageContext; + } + + return m_messageContext; + } + } + + /// + /// Gets the the channel's current security token. + /// + public ChannelToken CurrentToken => null; + + /// + /// Gets or sets the default timeout for requests send via the channel. + /// + public int OperationTimeout + { + get + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.OperationTimeout; + } + + return m_operationTimeout; + } + + set + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.OperationTimeout = value; + return; + } + + m_operationTimeout = value; + } + } + + /// + /// Initializes a secure channel with the endpoint identified by the URL. + /// + /// The URL for the endpoint. + /// The settings to use when creating the channel. + /// Thrown if any communication error occurs. + public void Initialize( + Uri url, + TransportChannelSettings settings) + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.Initialize(url, settings); + return; + } + + throw new NotSupportedException("WCF channels must be configured when they are constructed."); + } + + /// + /// Initializes a secure channel with the endpoint identified by the URL. + /// + /// The connection to use. + /// The settings to use when creating the channel. + /// Thrown if any communication error occurs. + public void Initialize( + ITransportWaitingConnection connection, + TransportChannelSettings settings) + { + throw new NotSupportedException("WCF channels must be configured when they are constructed."); + } + + /// + /// Opens a secure channel with the endpoint identified by the URL. + /// + public void Open() + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.Open(); + return; + } + } + + /// + /// Begins an asynchronous operation to open a secure channel with the endpoint identified by the URL. + /// + public IAsyncResult BeginOpen(AsyncCallback callback, object callbackData) + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.BeginOpen(callback, callbackData); + } + + throw new NotSupportedException("WCF channels must be configured when they are constructed."); + } + + /// + /// Completes an asynchronous operation to open a communication object. + /// + public void EndOpen(IAsyncResult result) + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.EndOpen(result); + return; + } + + throw new NotSupportedException("WCF channels must be configured when they are constructed."); + } + + /// + /// Closes any existing secure channel and opens a new one. + /// + /// Thrown if any communication error occurs. + /// + /// Calling this method will cause outstanding requests over the current secure channel to fail. + /// + public abstract void Reconnect(); + + /// + /// Closes any existing secure channel and opens a new one using an existing channel. + /// + /// The reverse transport connection for the Reconnect. + /// Thrown if any communication error occurs. + /// + /// Calling this method will cause outstanding requests over the current secure channel to fail. + /// + public abstract void Reconnect(ITransportWaitingConnection connection); + + /// + /// Begins an asynchronous operation to close the existing secure channel and open a new one. + /// + public IAsyncResult BeginReconnect(AsyncCallback callback, object callbackData) + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.BeginReconnect(callback, callbackData); + } + + throw new NotSupportedException("WCF channels cannot be reconnected."); + } + + /// + /// Completes an asynchronous operation to close the existing secure channel and open a new one. + /// + public void EndReconnect(IAsyncResult result) + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.EndReconnect(result); + return; + } + + throw new NotSupportedException("WCF channels cannot be reconnected."); + } + + /// + /// Closes any existing secure channel. + /// + public void Close() + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.Close(); + return; + } + + CloseChannel(); + } + + /// + /// Begins an asynchronous operation to close the secure channel. + /// + public IAsyncResult BeginClose(AsyncCallback callback, object callbackData) + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.BeginClose(callback, callbackData); + } + + AsyncResultBase result = new AsyncResultBase(callback, callbackData, 0); + result.OperationCompleted(); + return result; + } + + /// + /// Completes an asynchronous operation to close a communication object. + /// + public void EndClose(IAsyncResult result) + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.EndClose(result); + return; + } + + AsyncResultBase.WaitForComplete(result); + CloseChannel(); + } + + /// + /// Sends a request over the secure channel. + /// + public IServiceResponse SendRequest(IServiceRequest request) + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.SendRequest(request); + } + + byte[] requestMessage = BinaryEncoder.EncodeMessage(request, m_messageContext); + InvokeServiceResponseMessage responseMessage = InvokeService(new InvokeServiceMessage(requestMessage)); + return (IServiceResponse)BinaryDecoder.DecodeMessage(responseMessage.InvokeServiceResponse, null, m_messageContext); + } + + /// + /// Begins an asynchronous operation to send a request over the secure channel. + /// + public IAsyncResult BeginSendRequest(IServiceRequest request, AsyncCallback callback, object callbackData) + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.BeginSendRequest(request, callback, callbackData); + } + +#if MANAGE_CHANNEL_THREADS + SendRequestAsyncResult asyncResult = new SendRequestAsyncResult(this, callback, callbackData, 0); + asyncResult.BeginSendRequest(SendRequest, request); + return asyncResult; +#else + byte[] requestMessage = BinaryEncoder.EncodeMessage(request, m_messageContext); + return BeginInvokeService(new InvokeServiceMessage(requestMessage), callback, callbackData); +#endif + } + + /// + /// Completes an asynchronous operation to send a request over the secure channel. + /// + public IServiceResponse EndSendRequest(IAsyncResult result) + { + if (m_uaBypassChannel != null) + { + return m_uaBypassChannel.EndSendRequest(result); + } + +#if MANAGE_CHANNEL_THREADS + return SendRequestAsyncResult.WaitForComplete(result); +#else + InvokeServiceResponseMessage responseMessage = EndInvokeService(result); + return (IServiceResponse)BinaryDecoder.DecodeMessage(responseMessage.InvokeServiceResponse, null, m_messageContext); +#endif + } + + /// + /// The client side implementation of the InvokeService service contract. + /// + public abstract InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request); + + /// + /// The client side implementation of the BeginInvokeService service contract. + /// + public abstract IAsyncResult BeginInvokeService(InvokeServiceMessage request, AsyncCallback callback, object asyncState); + + /// + /// The client side implementation of the EndInvokeService service contract. + /// + public abstract InvokeServiceResponseMessage EndInvokeService(IAsyncResult result); + #endregion + +#if MANAGE_CHANNEL_THREADS + #region SendRequestAsyncResult Class + /// + /// An AsyncResult object when handling an asynchronous request. + /// + protected class SendRequestAsyncResult : AsyncResultBase, IChannelOutgoingRequest + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The channel being used. + /// The callback to use when the operation completes. + /// The callback data. + /// The timeout in milliseconds + public SendRequestAsyncResult( + IChannelBase channel, + AsyncCallback callback, + object callbackData, + int timeout) + : + base(callback, callbackData, timeout) + { + m_channel = channel; + } + #endregion + + #region IChannelOutgoingRequest Members + /// + /// Gets the request. + /// + /// The request. + public IServiceRequest Request + { + get { return m_request; } + } + + /// + /// Gets the handler used to send the request. + /// + /// The send request handler. + public ChannelSendRequestEventHandler Handler + { + get { return m_handler; } + } + + /// + /// Used to call the default synchronous handler. + /// + /// + /// This method may block the current thread so the caller must not call in the + /// thread that calls IServerBase.ScheduleIncomingRequest(). + /// This method always traps any exceptions and reports them to the client as a fault. + /// + public void CallSynchronously() + { + OnSendRequest(null); + } + + /// + /// Used to indicate that the asynchronous operation has completed. + /// + /// The response. May be null if an error is provided. + /// + public void OperationCompleted(IServiceResponse response, ServiceResult error) + { + // save response and/or error. + m_error = null; + m_response = response; + + if (ServiceResult.IsBad(error)) + { + m_error = new ServiceResultException(error); + m_response = null; + } + + // operation completed. + OperationCompleted(); + } + #endregion + + #region Public Members + /// + /// Begins processing an incoming request. + /// + /// The method which sends the request. + /// The request. + /// The result object that is used to call the EndSendRequest method. + public IAsyncResult BeginSendRequest( + ChannelSendRequestEventHandler handler, + IServiceRequest request) + { + m_handler = handler; + m_request = request; + + try + { + // queue request. + m_channel.ScheduleOutgoingRequest(this); + } + catch (Exception e) + { + m_error = e; + m_response = null; + + // operation completed. + OperationCompleted(); + } + + return this; + } + + /// + /// Checks for a valid IAsyncResult object and waits for the operation to complete. + /// + /// The IAsyncResult object for the operation. + /// The response. + public static new IServiceResponse WaitForComplete(IAsyncResult ar) + { + SendRequestAsyncResult result = ar as SendRequestAsyncResult; + + if (result == null) + { + throw new ArgumentException("End called with an invalid IAsyncResult object.", "ar"); + } + + if (result.m_response == null && result.m_error == null) + { + if (!result.WaitForComplete()) + { + throw new TimeoutException(); + } + } + + if (result.m_error != null) + { + throw new ServiceResultException(result.m_error, StatusCodes.BadInternalError); + } + + return result.m_response; + } + + /// + /// Checks for a valid IAsyncResult object and returns the original request object. + /// + /// The IAsyncResult object for the operation. + /// The request object if available; otherwise null. + public static IServiceRequest GetRequest(IAsyncResult ar) + { + SendRequestAsyncResult result = ar as SendRequestAsyncResult; + + if (result != null) + { + return result.m_request; + } + + return null; + } + #endregion + + #region Private Members + /// + /// Processes the request. + /// + private void OnSendRequest(object state) + { + try + { + // call the service. + m_response = m_handler(m_request); + } + catch (Exception e) + { + // save any error. + m_error = e; + m_response = null; + } + + // report completion. + OperationCompleted(); + } + #endregion + + #region Private Fields + private IChannelBase m_channel; + private ChannelSendRequestEventHandler m_handler; + private IServiceRequest m_request; + private IServiceResponse m_response; + private Exception m_error; + #endregion + } + #endregion + + /// + /// Processes the request. + /// + /// IChannelOutgoingRequest object passed to the ScheduleOutgoingRequest method. + protected virtual void OnSendRequest(object state) + { + try + { + IChannelOutgoingRequest request = (IChannelOutgoingRequest)state; + request.CallSynchronously(); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error sending outgoing request."); + } + } +#endif + + #region Protected Methods + /// + /// Creates a new UA-binary transport channel if requested. Null otherwise. + /// + public static ITransportChannel CreateUaBinaryChannel( + ApplicationConfiguration configuration, + ITransportWaitingConnection connection, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + X509Certificate2Collection clientCertificateChain, + ServiceMessageContext messageContext) + { + // initialize the channel which will be created with the server. + string uriScheme = new Uri(description.EndpointUrl).Scheme; + ITransportChannel channel = TransportBindings.Channels.GetChannel(uriScheme); + if (channel == null) + { + throw ServiceResultException.Create( + StatusCodes.BadProtocolVersionUnsupported, + "Unsupported transport profile for scheme {0}.", uriScheme); + } + + // create a UA channel. + var settings = new TransportChannelSettings { + Description = description, + Configuration = endpointConfiguration, + ClientCertificate = clientCertificate, + ClientCertificateChain = clientCertificateChain + }; + + if (description.ServerCertificate != null && description.ServerCertificate.Length > 0) + { + settings.ServerCertificate = Utils.ParseCertificateBlob(description.ServerCertificate); + } + + if (configuration != null) + { + settings.CertificateValidator = configuration.CertificateValidator.GetChannelValidator(); + } + + settings.NamespaceUris = messageContext.NamespaceUris; + settings.Factory = messageContext.Factory; + + channel.Initialize(connection, settings); + channel.Open(); + + return channel; + } + + /// + /// Creates a new UA-binary transport channel if requested. Null otherwise. + /// + /// The application configuration. + /// The description for the endpoint. + /// The configuration to use with the endpoint. + /// The client certificate. + /// The message context to use when serializing the messages. + /// + public static ITransportChannel CreateUaBinaryChannel( + ApplicationConfiguration configuration, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + ServiceMessageContext messageContext) + { + return CreateUaBinaryChannel(configuration, description, endpointConfiguration, clientCertificate, null, messageContext); + } + + /// + /// Creates a new UA-binary transport channel if requested. Null otherwise. + /// + /// The application configuration. + /// The description for the endpoint. + /// The configuration to use with the endpoint. + /// The client certificate. + /// The client certificate chain. + /// The message context to use when serializing the messages. + /// + public static ITransportChannel CreateUaBinaryChannel( + ApplicationConfiguration configuration, + EndpointDescription description, + EndpointConfiguration endpointConfiguration, + X509Certificate2 clientCertificate, + X509Certificate2Collection clientCertificateChain, + ServiceMessageContext messageContext) + { + string uriScheme = new Uri(description.EndpointUrl).Scheme; + + switch (description.TransportProfileUri) + { + case Profiles.UaTcpTransport: + { + uriScheme = Utils.UriSchemeOpcTcp; + break; + } + + case Profiles.HttpsBinaryTransport: + { + uriScheme = Utils.UriSchemeHttps; + break; + } + + case Profiles.UaWssTransport: + { + uriScheme = Utils.UriSchemeOpcWss; + break; + } + + } + + // initialize the channel which will be created with the server. + ITransportChannel channel = TransportBindings.Channels.GetChannel(uriScheme); + if (channel == null) + { + throw ServiceResultException.Create( + StatusCodes.BadProtocolVersionUnsupported, + "Unsupported transport profile for scheme {0}.", uriScheme); + } + + // create a UA-TCP channel. + TransportChannelSettings settings = new TransportChannelSettings { + Description = description, + Configuration = endpointConfiguration, + ClientCertificate = clientCertificate, + ClientCertificateChain = clientCertificateChain + }; + + if (description.ServerCertificate != null && description.ServerCertificate.Length > 0) + { + settings.ServerCertificate = Utils.ParseCertificateBlob(description.ServerCertificate); + } + + if (configuration != null) + { + settings.CertificateValidator = configuration.CertificateValidator.GetChannelValidator(); + } + + settings.NamespaceUris = messageContext.NamespaceUris; + settings.Factory = messageContext.Factory; + + channel.Initialize(new Uri(description.EndpointUrl), settings); + channel.Open(); + + return channel; + } + + /// + /// Handles the Opened event of the InnerChannel control. + /// + /// The source of the event. + /// The instance containing the event data. + internal void InnerChannel_Opened(object sender, EventArgs e) + { + Uri endpointUrl = this.m_channelFactory.Endpoint.Address.Uri; + + X509Certificate2 clientCertificate = null; + X509Certificate2 serverCertificate = null; + + Security.Audit.SecureChannelCreated( + g_ImplementationString, + m_channelFactory.Endpoint.Address.Uri.ToString(), + null, + EndpointDescription, + clientCertificate, + serverCertificate, + BinaryEncodingSupport.Optional); + } + + /// + /// Converts a FaultException into a ServiceResultException. + /// + public ServiceResultException HandleSoapFault(System.ServiceModel.FaultException exception) + { + if (exception == null || exception.Detail == null || exception.Detail.ResponseHeader == null) + { + return ServiceResultException.Create(StatusCodes.BadUnexpectedError, exception, "SOAP fault did not contain any details."); + } + + ResponseHeader header = exception.Detail.ResponseHeader; + + return new ServiceResultException(new ServiceResult( + header.ServiceResult, + header.ServiceDiagnostics, + header.StringTable)); + } + #endregion + + #region Private Fields + internal TransportChannelSettings m_settings; + internal ServiceMessageContext m_messageContext; + internal ITransportChannel m_uaBypassChannel; + internal int m_operationTimeout; + internal ChannelFactory m_channelFactory; + internal IChannelBase m_channel; + internal string g_ImplementationString = "Opc.Ua.ChannelBase WCF Client " + Utils.GetAssemblySoftwareVersion(); + #endregion + } + + /// + /// A base class for UA channel objects used access UA interfaces + /// + public class WcfChannelBase : UaChannelBase where TChannel : class, IChannelBase + { + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_channel); + m_channel = null; + + Utils.SilentDispose(m_channelFactory); + m_channelFactory = null; + } + + base.Dispose(disposing); + } + #endregion + + #region IChannelBase Members + /// + /// The client side implementation of the InvokeService service contract. + /// + public override InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request) + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginInvokeService(request, null, null); + } + + return this.Channel.EndInvokeService(result); + } + + /// + /// The client side implementation of the BeginInvokeService service contract. + /// + public override IAsyncResult BeginInvokeService(InvokeServiceMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(m_channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginInvokeService(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndInvokeService service contract. + /// + public override InvokeServiceResponseMessage EndInvokeService(IAsyncResult result) + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndInvokeService(asyncResult.InnerResult); + } + #endregion + + #region ITransportChannel Members + /// + /// Closes any existing secure channel and opens a new one. + /// + public override void Reconnect() + { + if (m_uaBypassChannel != null) + { + m_uaBypassChannel.Reconnect(); + return; + } + + Utils.Trace("RECONNECT: Reconnecting to {0}.", m_settings.Description.EndpointUrl); + + // grap the existing channel. + TChannel channel = m_channel; + ChannelFactory channelFactory = m_channelFactory as ChannelFactory; + + // create the new channel. + base.m_channel = m_channel = channelFactory.CreateChannel(); + + ICommunicationObject communicationObject = null; + + if (channel != null) + { + try + { + communicationObject = channel as ICommunicationObject; + + if (communicationObject != null) + { + communicationObject.Close(); + } + } + catch + { + // ignore errors. + } + } + + // register callback with new channel. + communicationObject = m_channel as ICommunicationObject; + + if (communicationObject != null) + { + communicationObject.Opened += new EventHandler(InnerChannel_Opened); + } + } + + /// + public override void Reconnect(ITransportWaitingConnection connection) + { + throw new NotImplementedException("Reconnect for waiting connections is not supported for this channel"); + } + #endregion + + #region WcfChannelAsyncResult Class + /// + /// An async result object that wraps the WCF channel. + /// + protected class WcfChannelAsyncResult : AsyncResultBase + { + /// + /// Initializes a new instance of the class. + /// + /// The channel. + /// The callback. + /// The callback data. + public WcfChannelAsyncResult( + TChannel channel, + AsyncCallback callback, + object callbackData) + : + base(callback, callbackData, 0) + { + m_channel = channel; + } + + /// + /// Gets the wrapped channel. + /// + /// The wrapped channel. + public TChannel Channel => m_channel; + + /// + /// Called when asynchronous operation completes. + /// + /// The asynchronous result object. + public void OnOperationCompleted(IAsyncResult ar) + { + try + { + // check if the begin operation has had a chance to complete. + lock (Lock) + { + if (InnerResult == null) + { + InnerResult = ar; + } + } + + // signal that the operation is complete. + OperationCompleted(); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected exception invoking WcfChannelAsyncResult callback function."); + } + } + + /// + /// Checks for a valid IAsyncResult object and waits for the operation to complete. + /// + /// The IAsyncResult object for the operation. + /// The oject that + public static new WcfChannelAsyncResult WaitForComplete(IAsyncResult ar) + { + WcfChannelAsyncResult asyncResult = ar as WcfChannelAsyncResult; + + if (asyncResult == null) + { + throw new ArgumentException("End called with an invalid IAsyncResult object.", nameof(ar)); + } + + if (!asyncResult.WaitForComplete()) + { + throw new ServiceResultException(StatusCodes.BadTimeout); + } + + return asyncResult; + } + + private TChannel m_channel; + } + #endregion + + #region Protected Methods + /// + /// Gets the inner channel. + /// + /// The channel. + protected TChannel Channel => m_channel; + #endregion + + #region Private Fields + private new TChannel m_channel; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/UserIdentity.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/UserIdentity.cs new file mode 100644 index 00000000..4225e53c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Client/UserIdentity.cs @@ -0,0 +1,251 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A generic user identity class. + /// + public class UserIdentity : IUserIdentity + { + #region Constructors + /// + /// Initializes the object as an anonymous user. + /// + public UserIdentity() + { + AnonymousIdentityToken token = new AnonymousIdentityToken(); + Initialize(token); + } + + /// + /// Initializes the object with a username and password. + /// + /// The user name. + /// The password. + public UserIdentity(string username, string password) + { + UserNameIdentityToken token = new UserNameIdentityToken(); + token.UserName = username; + token.DecryptedPassword = password; + Initialize(token); + } + + /// + /// Initializes the object with a UA identity token. + /// + /// The token. + public UserIdentity(IssuedIdentityToken issuedToken) + { + Initialize(issuedToken); + } + + /// + /// Initializes the object with an X509 certificate identifier + /// + public UserIdentity(CertificateIdentifier certificateId) + { + if (certificateId == null) throw new ArgumentNullException(nameof(certificateId)); + + X509Certificate2 certificate = certificateId.Find().Result; + if (certificate != null) + { + Initialize(certificate); + } + } + + /// + /// Initializes the object with an X509 certificate + /// + public UserIdentity(X509Certificate2 certificate) + { + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + Initialize(certificate); + } + + /// + /// Initializes the object with a UA identity token. + /// + /// The user identity token. + public UserIdentity(UserIdentityToken token) + { + Initialize(token); + } + #endregion + + #region IUserIdentity Members + /// + /// Gets or sets the UserIdentityToken PolicyId associated with the UserIdentity. + /// + /// + /// This value is used to initialize the UserIdentityToken object when GetIdentityToken() is called. + /// + public string PolicyId + { + get { return m_token.PolicyId; } + set { m_token.PolicyId = value; } + } + + /// + public string DisplayName + { + get { return m_displayName; } + } + + /// + public UserTokenType TokenType + { + get { return m_tokenType; } + } + + /// + public XmlQualifiedName IssuedTokenType + { + get { return m_issuedTokenType; } + } + + /// + public bool SupportsSignatures + { + get + { + return false; + } + } + + /// + /// Get or sets the list of granted role ids associated to the UserIdentity. + /// + public NodeIdCollection GrantedRoleIds + { + get { return m_grantedRoleIds; } + set { m_grantedRoleIds = value; } + } + + /// + public UserIdentityToken GetIdentityToken() + { + // check for null and return anonymous. + if (m_token == null) + { + return new AnonymousIdentityToken(); + } + else + { + return m_token; + } + } + #endregion + + #region Private Methods + /// + /// Initializes the object with a UA identity token + /// + private void Initialize(UserIdentityToken token) + { + if (token == null) throw new ArgumentNullException(nameof(token)); + m_grantedRoleIds = new NodeIdCollection(); + m_token = token; + + UserNameIdentityToken usernameToken = token as UserNameIdentityToken; + if (usernameToken != null) + { + m_tokenType = UserTokenType.UserName; + m_issuedTokenType = null; + m_displayName = usernameToken.UserName; + return; + } + + X509IdentityToken x509Token = token as X509IdentityToken; + if (x509Token != null) + { + m_tokenType = UserTokenType.Certificate; + m_issuedTokenType = null; + if (x509Token.Certificate != null) + { + m_displayName = x509Token.Certificate.Subject; + } + else + { + X509Certificate2 cert = CertificateFactory.Create(x509Token.CertificateData, true); + m_displayName = cert.Subject; + } + return; + } + + IssuedIdentityToken issuedToken = token as IssuedIdentityToken; + if (issuedToken != null) + { + if (issuedToken.IssuedTokenType == Ua.IssuedTokenType.JWT) + { + if (issuedToken.DecryptedTokenData == null || issuedToken.DecryptedTokenData.Length == 0) + { + throw new ArgumentException("JSON Web Token has no data associated with it.", nameof(token)); + } + + m_tokenType = UserTokenType.IssuedToken; + m_issuedTokenType = new XmlQualifiedName("", Opc.Ua.Profiles.JwtUserToken); + m_displayName = "JWT"; + return; + } + else + { + throw new NotSupportedException("Only JWT Issued Tokens are supported!"); + } + } + + AnonymousIdentityToken anonymousToken = token as AnonymousIdentityToken; + if (anonymousToken != null) + { + m_tokenType = UserTokenType.Anonymous; + m_issuedTokenType = null; + m_displayName = "Anonymous"; + return; + } + + throw new ArgumentException("Unrecognized UA user identity token type.", nameof(token)); + } + + /// + /// Initializes the object with an X509 certificate + /// + private void Initialize(X509Certificate2 certificate) + { + X509IdentityToken token = new X509IdentityToken(); + token.CertificateData = certificate.RawData; + token.Certificate = certificate; + Initialize(token); + } + #endregion + + #region Private Fields + private UserIdentityToken m_token; + private string m_displayName; + private UserTokenType m_tokenType; + private XmlQualifiedName m_issuedTokenType; + private NodeIdCollection m_grantedRoleIds; + #endregion + } + + #region ImpersonationContext Class + /// + /// Stores information about the user that is currently being impersonated. + /// + public class ImpersonationContext + { + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ApplicationConfiguration.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ApplicationConfiguration.cs new file mode 100644 index 00000000..a0397cd4 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ApplicationConfiguration.cs @@ -0,0 +1,660 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Loads the configuration section for an application. + /// + public class ApplicationConfigurationSection + { + #region IConfigurationSectionHandler Members + /// + /// Creates the configuration object from the configuration section. + /// + /// The parent object. + /// The configuration context object. + /// The section as XML node. + /// The created section handler object. + public object Create(object parent, object configContext, System.Xml.XmlNode section) + { + if (section == null) + { + throw new ArgumentNullException(nameof(section)); + } + + XmlNode element = section.FirstChild; + + while (element != null && typeof(XmlElement) != element.GetType()) + { + element = element.NextSibling; + } + + XmlReader reader = XmlReader.Create(new StringReader(element.OuterXml)); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(ConfigurationLocation)); + ConfigurationLocation configuration = serializer.ReadObject(reader) as ConfigurationLocation; + return configuration; + } + finally + { + reader.Dispose(); + } + } + #endregion + } + /// + /// Represents the location of a configuration file. + /// + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class ConfigurationLocation + { + #region Persistent Properties + /// + /// Gets or sets the relative or absolute path to the configuration file. + /// + /// The file path. + [DataMember(IsRequired = true, Order = 0)] + public string FilePath + { + get { return m_filePath; } + set { m_filePath = value; } + } + #endregion + + #region Private Fields + private string m_filePath; + #endregion + } + + /// + /// Stores the configurable configuration information for a UA application. + /// + public partial class ApplicationConfiguration + { + #region Public Methods + /// + /// Gets the file that was used to load the configuration. + /// + /// The source file path. + public string SourceFilePath => m_sourceFilePath; + + /// + /// Gets or sets the certificate validator which is configured to use. + /// + public CertificateValidator CertificateValidator + { + get { return m_certificateValidator; } + set { m_certificateValidator = value; } + } + + /// + /// Returns the domain names which the server is configured to use. + /// + /// A list of domain names. + public IList GetServerDomainNames() + { + StringCollection baseAddresses = new StringCollection(); + + if (this.ServerConfiguration != null) + { + if (this.ServerConfiguration.BaseAddresses != null) + { + baseAddresses.AddRange(this.ServerConfiguration.BaseAddresses); + } + + if (this.ServerConfiguration.AlternateBaseAddresses != null) + { + baseAddresses.AddRange(this.ServerConfiguration.AlternateBaseAddresses); + } + } + + if (this.DiscoveryServerConfiguration != null) + { + if (this.DiscoveryServerConfiguration.BaseAddresses != null) + { + baseAddresses.AddRange(this.DiscoveryServerConfiguration.BaseAddresses); + } + + if (this.DiscoveryServerConfiguration.AlternateBaseAddresses != null) + { + baseAddresses.AddRange(this.DiscoveryServerConfiguration.AlternateBaseAddresses); + } + } + + var domainNames = new List(); + for (int ii = 0; ii < baseAddresses.Count; ii++) + { + Uri url = Utils.ParseUri(baseAddresses[ii]); + + if (url == null) + { + continue; + } + + string domainName = url.DnsSafeHost; + + if (url.HostNameType == UriHostNameType.Dns) + { + domainName = Utils.ReplaceLocalhost(domainName); + } + else // IPv4/IPv6 address + { + domainName = Utils.NormalizedIPAddress(domainName); + } + + if (!Utils.FindStringIgnoreCase(domainNames, domainName)) + { + domainNames.Add(domainName); + } + } + + return domainNames; + } + + /// + /// Creates the message context from the configuration. + /// + /// A new instance of a ServiceMessageContext object. + public ServiceMessageContext CreateMessageContext(bool clonedFactory = false) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + if (m_transportQuotas != null) + { + messageContext.MaxArrayLength = m_transportQuotas.MaxArrayLength; + messageContext.MaxByteStringLength = m_transportQuotas.MaxByteStringLength; + messageContext.MaxStringLength = m_transportQuotas.MaxStringLength; + messageContext.MaxMessageSize = m_transportQuotas.MaxMessageSize; + } + + messageContext.NamespaceUris = new NamespaceTable(); + messageContext.ServerUris = new StringTable(); + if (clonedFactory) + { + messageContext.Factory = new EncodeableFactory(EncodeableFactory.GlobalFactory); + } + return messageContext; + } + + /// + /// Creates the message context from the configuration. + /// + /// A new instance of a ServiceMessageContext object. + [Obsolete("Warning: Behavior changed return a copy instead of a reference. Should call CreateMessageContext() instead.")] + public ServiceMessageContext MessageContext + { + get + { + if (m_messageContext == null) + { + m_messageContext = CreateMessageContext(); + } + + return m_messageContext; + } + } + + /// + /// Loads and validates the application configuration from a configuration section. + /// + /// Name of configuration section for the current application's default configuration containing . + /// Type of the application. + /// Application configuration + public static Task Load(string sectionName, ApplicationType applicationType) => + Load(sectionName, applicationType, typeof(ApplicationConfiguration)); + + /// + /// Loads and validates the application configuration from a configuration section. + /// + /// Name of configuration section for the current application's default configuration containing . + /// A description for the ApplicationType DataType. + /// A user type of the configuration instance. + /// Application configuration + public static Task Load(string sectionName, ApplicationType applicationType, Type systemType) + { + string filePath = GetFilePathFromAppConfig(sectionName); + + FileInfo file = new FileInfo(filePath); + + if (!file.Exists) + { + var message = new StringBuilder(); + message.AppendFormat("Configuration file does not exist: {0}", filePath); + message.AppendLine(); + message.AppendFormat("Current directory is: {1}", Directory.GetCurrentDirectory()); + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, message.ToString()); + } + + return Load(file, applicationType, systemType); + } + + /// + /// Loads but does not validate the application configuration from a configuration section. + /// + /// The file. + /// Type of the system. + /// Application configuration + /// Use this method to ensure the configuration is not changed during loading. + public static ApplicationConfiguration LoadWithNoValidation(FileInfo file, Type systemType) + { + using (var stream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read)) + { + try + { + DataContractSerializer serializer = new DataContractSerializer(systemType); + + ApplicationConfiguration configuration = serializer.ReadObject(stream) as ApplicationConfiguration; + + if (configuration != null) + { + configuration.m_sourceFilePath = file.FullName; + } + + return configuration; + } + catch (Exception e) + { + var message = new StringBuilder(); + message.AppendFormat("Configuration file could not be loaded: {0}", file.FullName); + message.AppendLine(); + message.AppendFormat("Error is: {1}", e.Message); + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, e, message.ToString()); + } + } + } + + /// + /// Loads and validates the application configuration from a configuration section. + /// + /// The file. + /// Type of the application. + /// Type of the system. + /// Application configuration + public static Task Load(FileInfo file, ApplicationType applicationType, Type systemType) => + ApplicationConfiguration.Load(file, applicationType, systemType, true); + + /// + /// Loads and validates the application configuration from a configuration section. + /// + /// The file. + /// Type of the application. + /// Type of the system. + /// if set to true apply trace settings after validation. + /// The certificate password provider. + /// Application configuration + public static async Task Load( + FileInfo file, + ApplicationType applicationType, + Type systemType, + bool applyTraceSettings, + ICertificatePasswordProvider certificatePasswordProvider = null) + { + ApplicationConfiguration configuration = null; + systemType = systemType ?? typeof(ApplicationConfiguration); + + using (FileStream stream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read)) + { + try + { + DataContractSerializer serializer = new DataContractSerializer(systemType); + configuration = (ApplicationConfiguration)serializer.ReadObject(stream); + } + catch (Exception e) + { + var message = new StringBuilder(); + message.AppendFormat("Configuration file could not be loaded: {0}", file.FullName); + message.AppendLine(); + message.AppendFormat("Error is: {0}", e.Message); + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, e, message.ToString()); + } + } + + if (configuration != null) + { + // should not be here but need to preserve old behavior. + if (applyTraceSettings && configuration.TraceConfiguration != null) + { + configuration.TraceConfiguration.ApplySettings(); + } + + configuration.SecurityConfiguration.CertificatePasswordProvider = certificatePasswordProvider; + + await configuration.Validate(applicationType); + + configuration.m_sourceFilePath = file.FullName; + } + + return configuration; + } + + /// + /// Reads the file path from the application configuration file. + /// + /// Name of configuration section for the current application's default configuration containing . + /// + /// File path from the application configuration file. + public static string GetFilePathFromAppConfig(string sectionName) + { + // convert to absolute file path (expands environment strings). + string absolutePath = Utils.GetAbsoluteFilePath(sectionName + ".Config.xml", true, false, false); + return (absolutePath != null) ? absolutePath : sectionName + ".Config.xml"; + } + + /// + /// Saves the configuration file. + /// + /// The file path. + /// Calls GetType() on the current instance and passes that to the DataContractSerializer. + public void SaveToFile(string filePath) + { + XmlWriterSettings settings = new XmlWriterSettings() { + Encoding = Encoding.UTF8, + Indent = true, + CloseOutput = true + }; + + using (Stream ostrm = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite)) + using (XmlWriter writer = XmlDictionaryWriter.Create(ostrm, settings)) + { + DataContractSerializer serializer = new DataContractSerializer(GetType()); + serializer.WriteObject(writer, this); + } + } + + /// + /// Ensures that the application configuration is valid. + /// + /// Type of the application. + public virtual async Task Validate(ApplicationType applicationType) + { + if (String.IsNullOrEmpty(ApplicationName)) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ApplicationName must be specified."); + } + + if (SecurityConfiguration == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "SecurityConfiguration must be specified."); + } + + SecurityConfiguration.Validate(); + + // load private key + await SecurityConfiguration.ApplicationCertificate.LoadPrivateKeyEx(SecurityConfiguration.CertificatePasswordProvider); + + Func generateDefaultUri = () => { + var sb = new StringBuilder(); + sb.Append("urn:"); + sb.Append(Utils.GetHostName()); + sb.Append(":"); + sb.Append(ApplicationName); + return sb.ToString(); + }; + + if (String.IsNullOrEmpty(ApplicationUri)) m_applicationUri = generateDefaultUri(); + + if (applicationType == ApplicationType.Client || applicationType == ApplicationType.ClientAndServer) + { + if (ClientConfiguration == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ClientConfiguration must be specified."); + } + + ClientConfiguration.Validate(); + } + + if (applicationType == ApplicationType.Server || applicationType == ApplicationType.ClientAndServer) + { + if (ServerConfiguration == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "ServerConfiguration must be specified."); + } + + ServerConfiguration.Validate(); + } + + if (applicationType == ApplicationType.DiscoveryServer) + { + if (DiscoveryServerConfiguration == null) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "DiscoveryServerConfiguration must be specified."); + } + + DiscoveryServerConfiguration.Validate(); + } + + // toggle the state of the hi-res clock. + HiResClock.Disabled = m_disableHiResClock; + + if (m_disableHiResClock) + { + if (m_serverConfiguration != null) + { + if (m_serverConfiguration.PublishingResolution < 50) + { + m_serverConfiguration.PublishingResolution = 50; + } + } + } + + await m_certificateValidator.Update(this.SecurityConfiguration); + } + + /// + /// Loads the endpoints cached on disk. + /// + /// if set to true ConfiguredEndpointCollection is always returned, + /// even if loading from disk fails + /// Colection of configured endpoints from the disk. + public ConfiguredEndpointCollection LoadCachedEndpoints(bool createAlways) => LoadCachedEndpoints(createAlways, false); + + /// + /// Loads the endpoints cached on disk. + /// + /// if set to true ConfiguredEndpointCollection is always returned, + /// even if loading from disk fails + /// if set to true overrides the configuration. + /// + /// Colection of configured endpoints from the disk. + /// + public ConfiguredEndpointCollection LoadCachedEndpoints(bool createAlways, bool overrideConfiguration) + { + if (m_clientConfiguration == null) throw new InvalidOperationException("Only valid for client configurations."); + + string filePath = Utils.GetAbsoluteFilePath(m_clientConfiguration.EndpointCacheFilePath, true, false, false, false); + + if (filePath == null) + { + filePath = m_clientConfiguration.EndpointCacheFilePath; + + if (!Utils.IsPathRooted(filePath)) + { + FileInfo sourceFile = new FileInfo(this.SourceFilePath); + filePath = Utils.Format("{0}{1}{2}", sourceFile.DirectoryName, Path.DirectorySeparatorChar, filePath); + } + } + + if (!createAlways) + { + return ConfiguredEndpointCollection.Load(this, filePath, overrideConfiguration); + } + + ConfiguredEndpointCollection endpoints = new ConfiguredEndpointCollection(this); + try + { + endpoints = ConfiguredEndpointCollection.Load(this, filePath, overrideConfiguration); + } + catch (Exception e) + { + Utils.Trace(e, "Could not load configuration from file: {0}", filePath); + } + finally + { + string localFilePath = Utils.GetAbsoluteFilePath(m_clientConfiguration.EndpointCacheFilePath, true, false, true, true); + if (localFilePath != filePath) + { + endpoints.Save(localFilePath); + } + } + + return endpoints; + } + + /// + /// Looks for an extension with the specified type and uses the DataContractSerializer to parse it. + /// + /// + /// + /// The deserialized extension. Null if an error occurs. + /// + /// + /// The containing element must use the name and namespace uri specified by the DataContractAttribute for the type. + /// + public T ParseExtension() => ParseExtension(null); + + /// + /// Looks for an extension with the specified type and uses the DataContractSerializer to parse it. + /// + /// The type of extension. + /// Name of the element (null means use type name). + /// The extension if found. Null otherwise. + public T ParseExtension(XmlQualifiedName elementName) => Utils.ParseExtension(m_extensions, elementName); + + /// + /// Updates the extension. + /// + /// The type of extension. + /// Name of the element (null means use type name). + /// The value. + public void UpdateExtension(XmlQualifiedName elementName, object value) => + Utils.UpdateExtension(ref m_extensions, elementName, value); + + /// + /// Updates the extension. + /// + /// The type. + /// The value. + [Obsolete("Not non-functional. Replaced by a template version UpdateExtension")] + public void UpdateExtension(Type type, object value) + { + } + #endregion + } + + #region TraceConfiguration Class + /// + /// Specifies parameters used for tracing. + /// + public partial class TraceConfiguration + { + #region Public Methods + /// + /// Applies the trace settings to the current process. + /// + public void ApplySettings() + { + Utils.SetTraceLog(m_outputFilePath, m_deleteOnLoad); + Utils.SetTraceMask(m_traceMasks); + + if (m_traceMasks == 0) + { + Utils.SetTraceOutput(Utils.TraceOutput.Off); + } + else + { + Utils.SetTraceOutput(Utils.TraceOutput.DebugAndFile); + } + } + #endregion + } + #endregion + + #region ServerBaseConfiguration Class + /// + /// Specifies the configuration for a server application. + /// + public partial class ServerBaseConfiguration + { + #region Public Methods + /// + /// Validates the configuration. + /// + public virtual void Validate() + { + if (m_securityPolicies.Count == 0) + { + m_securityPolicies.Add(new ServerSecurityPolicy()); + } + } + #endregion + } + #endregion + + #region ServerConfiguration Class + /// + /// Specifies the configuration for a server application. + /// + public partial class ServerConfiguration : ServerBaseConfiguration + { + #region Public Methods + /// + /// Validates the configuration. + /// + public override void Validate() + { + base.Validate(); + + if (m_userTokenPolicies.Count == 0) + { + m_userTokenPolicies.Add(new UserTokenPolicy()); + } + } + #endregion + } + #endregion + + #region ClientConfiguration Class + /// + /// The configuration for a client application. + /// + public partial class ClientConfiguration + { + #region Public Methods + /// + /// Validates the configuration. + /// + public void Validate() + { + if (WellKnownDiscoveryUrls.Count == 0) + { + WellKnownDiscoveryUrls.AddRange(Utils.DiscoveryUrls); + } + } + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ConfigurationWatcher.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ConfigurationWatcher.cs new file mode 100644 index 00000000..921aa360 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ConfigurationWatcher.cs @@ -0,0 +1,181 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; + +namespace Opc.Ua +{ + /// + /// Watches the configuration file and reports any changes. + /// + public class ConfigurationWatcher : IDisposable + { + #region Constructors + /// + /// Creates the watcher for the configuration. + /// + public ConfigurationWatcher(ApplicationConfiguration configuration) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + FileInfo fileInfo = new FileInfo(configuration.SourceFilePath); + + if (!fileInfo.Exists) + { + throw new FileNotFoundException("Could not load configuration file", configuration.SourceFilePath); + } + + m_configuration = configuration; + m_lastWriteTime = fileInfo.LastWriteTimeUtc; + m_watcher = new System.Threading.Timer(Watcher_Changed, null, 5000, 5000); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_watcher != null) + { + m_watcher.Dispose(); + m_watcher = null; + } + } + } + #endregion + + #region Public Interface + /// + /// Raised when the configuration file changes. + /// + public event EventHandler Changed + { + add + { + lock (m_lock) + { + m_Changed += value; + } + } + + remove + { + lock (m_lock) + { + m_Changed -= value; + } + } + } + #endregion + + #region Private Methods + /// + /// Handles a file changed event. + /// + private void Watcher_Changed(object state) + { + try + { + FileInfo fileInfo = new FileInfo(m_configuration.SourceFilePath); + + if (!fileInfo.Exists) + { + return; + } + + if (fileInfo.LastWriteTimeUtc <= m_lastWriteTime) + { + return; + } + + m_lastWriteTime = fileInfo.LastWriteTimeUtc; + + EventHandler callback = m_Changed; + + if (callback != null) + { + callback(this, new ConfigurationWatcherEventArgs(m_configuration, m_configuration.SourceFilePath)); + } + } + catch (Exception exception) + { + Utils.Trace(exception, "Unexpected error raising configuration file changed event."); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private ApplicationConfiguration m_configuration; + private System.Threading.Timer m_watcher; + private DateTime m_lastWriteTime; + private event EventHandler m_Changed; + #endregion + } + + #region ConfigurationWatcherEventArgs Class + /// + /// Stores the arguments passed when the configuration file changes. + /// + public class ConfigurationWatcherEventArgs : EventArgs + { + #region Constructors + /// + /// Initializes the object with a configuration and a file path. + /// + public ConfigurationWatcherEventArgs( + ApplicationConfiguration configuration, + string filePath) + { + m_configuration = configuration; + m_filePath = filePath; + } + #endregion + + #region Public Properties + /// + /// The application configuration which changed. + /// + public ApplicationConfiguration Configuration + { + get { return m_configuration; } + } + + /// + /// The path to the application configuration file. + /// + public string FilePath + { + get { return m_filePath; } + } + #endregion + + #region Private Fields + private ApplicationConfiguration m_configuration; + private string m_filePath; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ConfiguredEndpoints.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ConfiguredEndpoints.cs new file mode 100644 index 00000000..8523dd66 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ConfiguredEndpoints.cs @@ -0,0 +1,1436 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Runtime.Serialization; +using System.Threading.Tasks; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Stores a list of cached enpoints. + /// + public partial class ConfiguredEndpointCollection + { + #region Constructors + /// + /// Initializes the object with its default endpoint configuration. + /// + public ConfiguredEndpointCollection(EndpointConfiguration configuration) + { + Initialize(); + + m_defaultConfiguration = (EndpointConfiguration)configuration.MemberwiseClone(); + } + + /// + /// Initializes the object from an application configuration. + /// + public ConfiguredEndpointCollection(ApplicationConfiguration configuration) + { + Initialize(); + + m_defaultConfiguration = EndpointConfiguration.Create(configuration); + + if (configuration.ClientConfiguration != null) + { + m_discoveryUrls = new StringCollection(configuration.ClientConfiguration.WellKnownDiscoveryUrls); + } + } + #endregion + + #region Static Methods + /// + /// Loads a collection of endpoints from a file and overrides the endpoint configuration. + /// + public static ConfiguredEndpointCollection Load(ApplicationConfiguration configuration, string filePath) + { + return Load(configuration, filePath, false); + } + + /// + /// Loads a collection of endpoints from a file and overrides the endpoint configuration. + /// + public static ConfiguredEndpointCollection Load(ApplicationConfiguration configuration, string filePath, bool overrideConfiguration) + { + ConfiguredEndpointCollection endpoints = Load(filePath); + + endpoints.m_defaultConfiguration = EndpointConfiguration.Create(configuration); + + // override the settings in the configuration. + foreach (ConfiguredEndpoint endpoint in endpoints.Endpoints) + { + if (endpoint.Configuration == null || overrideConfiguration) + { + endpoint.Update(endpoints.DefaultConfiguration); + } + } + + return endpoints; + } + + /// + /// Loads a collection of endpoints from a file. + /// + public static ConfiguredEndpointCollection Load(string filePath) + { + // load from file. + ConfiguredEndpointCollection endpoints; + using (Stream stream = File.OpenRead(filePath)) + { + endpoints = Load(stream); + } + endpoints.m_filepath = filePath; + + // remove invalid endpoints and ensure server descriptions are consistent. + List endpointsToRemove = new List(); + Dictionary servers = new Dictionary(); + + foreach (ConfiguredEndpoint endpoint in endpoints.m_endpoints) + { + if (endpoint.Description == null) + { + endpointsToRemove.Add(endpoint); + continue; + } + + // set a default value for the server. + if (endpoint.Description.Server == null) + { + endpoint.Description.Server = new ApplicationDescription(); + endpoint.Description.Server.ApplicationType = ApplicationType.Server; + } + + // set a default for application uri. + if (String.IsNullOrEmpty(endpoint.Description.Server.ApplicationUri)) + { + endpoint.Description.Server.ApplicationUri = endpoint.Description.EndpointUrl; + } + + if (endpoint.Description.Server.DiscoveryUrls == null) + { + endpoint.Description.Server.DiscoveryUrls = new StringCollection(); + } + + if (endpoint.Description.Server.DiscoveryUrls.Count == 0) + { + string discoveryUrl = endpoint.Description.EndpointUrl; + + if (!discoveryUrl.StartsWith(Utils.UriSchemeOpcTcp)) + { + discoveryUrl += "/discovery"; + } + + endpoint.Description.Server.DiscoveryUrls.Add(discoveryUrl); + } + + // normalize transport profile uri. + if (endpoint.Description.TransportProfileUri != null) + { + endpoint.Description.TransportProfileUri = Profiles.NormalizeUri(endpoint.Description.TransportProfileUri); + } + + ApplicationDescription server = null; + + if (!servers.TryGetValue(endpoint.Description.Server.ApplicationUri, out server)) + { + // use the first description in the file as the correct master. + server = endpoint.Description.Server; + + servers[server.ApplicationUri] = server; + + // check if the server uri needs to be made globally unique. + server.ApplicationUri = Utils.UpdateInstanceUri(server.ApplicationUri); + servers[server.ApplicationUri] = server; + continue; + } + + endpoint.Description.Server = (ApplicationDescription)server.MemberwiseClone(); + + + } + + // remove invalid endpoints. + foreach (ConfiguredEndpoint endpoint in endpointsToRemove) + { + endpoints.Remove(endpoint); + } + + // return processed collection. + return endpoints; + } + + /// + /// Loads a collection of endpoints from a stream. + /// + public static ConfiguredEndpointCollection Load(Stream istrm) + { + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(ConfiguredEndpointCollection)); + ConfiguredEndpointCollection endpoints = serializer.ReadObject(istrm) as ConfiguredEndpointCollection; + + if (endpoints != null) + { + foreach (ConfiguredEndpoint endpoint in endpoints) + { + if (endpoint.Description != null) + { + endpoint.Description.TransportProfileUri = Profiles.NormalizeUri(endpoint.Description.TransportProfileUri); + } + } + } + + return endpoints; + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error loading ConfiguredEnpoints."); + throw; + } + } + + /// + /// Saves a collection of endpoints the file that it was loaded from. + /// + public void Save() + { + Save(m_filepath); + } + + /// + /// Saves a collection of endpoints to a file. + /// + public void Save(string filePath) + { + using (Stream stream = File.Open(filePath, FileMode.Create)) + { + Save(stream); + } + m_filepath = filePath; + } + + /// + /// Saves a collection of endpoints to a stream. + /// + public void Save(Stream ostrm) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(ConfiguredEndpointCollection)); + serializer.WriteObject(ostrm, this); + } + + /// + /// Returns a deep copy of the collection. + /// + public new object MemberwiseClone() + { + ConfiguredEndpointCollection clone = new ConfiguredEndpointCollection(); + + clone.m_filepath = m_filepath; + clone.m_knownHosts = new StringCollection(m_knownHosts); + clone.m_defaultConfiguration = (EndpointConfiguration)m_defaultConfiguration.MemberwiseClone(); + + foreach (ConfiguredEndpoint endpoint in m_endpoints) + { + ConfiguredEndpoint clonedEndpoint = (ConfiguredEndpoint)endpoint.MemberwiseClone(); + clonedEndpoint.Collection = clone; + clone.m_endpoints.Add(clonedEndpoint); + } + + return clone; + } + + #region IList Members + /// + /// Determines the index of a specific item in the . + /// + /// The object to locate in the . + /// + /// The index of if found in the list; otherwise, -1. + /// + public int IndexOf(ConfiguredEndpoint item) + { + for (int ii = 0; ii < m_endpoints.Count; ii++) + { + if (object.ReferenceEquals(item, m_endpoints[ii])) + { + return ii; + } + } + + return -1; + } + + /// + /// Inserts an item to the at the specified index. + /// + /// The zero-based index at which should be inserted. + /// The object to insert into the . + /// + /// is not a valid index in the . + /// The is read-only. + public void Insert(int index, ConfiguredEndpoint item) + { + Insert(item, index); + } + + /// + /// Removes the item at the specified index. + /// + /// The zero-based index of the item to remove. + /// + /// is not a valid index in the . + /// The is read-only. + public void RemoveAt(int index) + { + if (index < 0 || index >= m_endpoints.Count) throw new ArgumentOutOfRangeException(nameof(index)); + Remove(m_endpoints[index]); + } + + /// + /// Gets or sets the at the specified index. + /// + /// The at the index + public ConfiguredEndpoint this[int index] + { + get + { + return m_endpoints[index]; + } + + set + { + throw new NotImplementedException(); + } + } + #endregion + + #region ICollection Members + /// + /// Removes all items from the . + /// + /// The is read-only. + public void Clear() + { + this.m_endpoints.Clear(); + } + + /// + /// Determines whether the contains a specific value. + /// + /// The object to locate in the . + /// + /// true if is found in the ; otherwise, false. + /// + public bool Contains(ConfiguredEndpoint item) + { + for (int ii = 0; ii < m_endpoints.Count; ii++) + { + if (object.ReferenceEquals(item, m_endpoints[ii])) + { + return true; + } + } + + return 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 at which copying begins. + /// + /// is null. + /// + /// is less than 0. + /// + /// is multidimensional.-or- is equal to or greater than the length of .-or-The number of elements in the source is greater than the available space from to the end of the destination ./>. + public void CopyTo(ConfiguredEndpoint[] array, int arrayIndex) + { + m_endpoints.CopyTo(array, arrayIndex); + } + + /// + /// Gets the number of elements contained in the . + /// + /// The number of elements contained in the . + public int Count => m_endpoints.Count; + + /// + /// Gets a value indicating whether the is read-only. + /// + /// + /// true if the is read-only; otherwise, false. + public bool IsReadOnly => false; + #endregion + + #region IEnumerable Members + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + public IEnumerator GetEnumerator() + { + return m_endpoints.GetEnumerator(); + } + #endregion + + #region Public Methods + /// + /// Add the endpoint description to the cache. + /// + public ConfiguredEndpoint Add(EndpointDescription endpoint) + { + return Add(endpoint, null); + } + + /// + /// Add the endpoint description and configuration to the cache. + /// + public ConfiguredEndpoint Add(EndpointDescription endpoint, EndpointConfiguration configuration) + { + ValidateEndpoint(endpoint); + + foreach (ConfiguredEndpoint item in m_endpoints) + { + if (Object.ReferenceEquals(item.Description, endpoint)) + { + throw new ArgumentException("Endpoint already exists in the collection."); + } + } + + ConfiguredEndpoint configuredEndpoint = new ConfiguredEndpoint(this, endpoint, configuration); + m_endpoints.Add(configuredEndpoint); + return configuredEndpoint; + } + + /// + /// Adds a previous created endpoint to the collection. + /// + public void Add(ConfiguredEndpoint item) + { + Insert(item, -1); + } + + /// + /// Adds a previous created endpoint to the collection. + /// + private void Insert(ConfiguredEndpoint endpoint, int index) + { + if (endpoint == null) throw new ArgumentNullException(nameof(endpoint)); + + ValidateEndpoint(endpoint.Description); + + // update collection. + if (endpoint.Collection != null) + { + endpoint.Collection.Remove(endpoint); + } + + endpoint.Collection = this; + + if (!Object.ReferenceEquals(endpoint.Collection, this)) + { + throw new ArgumentException("Cannot add an endpoint from another collection."); + } + + if (m_endpoints.Contains(endpoint)) + { + throw new ArgumentException("Endpoint already belongs to the collection."); + } + + if (index < 0) + { + m_endpoints.Add(endpoint); + } + else + { + m_endpoints.Insert(index, endpoint); + } + } + + /// + /// Removes the configured endpoint. + /// + public bool Remove(ConfiguredEndpoint item) + { + if (item == null) throw new ArgumentNullException(nameof(item)); + return m_endpoints.Remove(item); + } + + /// + /// Removes all endpoints for the specified server. + /// + public void RemoveServer(string serverUri) + { + if (serverUri == null) throw new ArgumentNullException(nameof(serverUri)); + + foreach (ConfiguredEndpoint endpointToRemove in GetEndpoints(serverUri)) + { + Remove(endpointToRemove); + } + } + + /// + /// Updates the server descrption for the endpoints. + /// + public void SetApplicationDescription(string serverUri, ApplicationDescription server) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + + if (String.IsNullOrEmpty(server.ApplicationUri)) + { + throw new ArgumentException("A ServerUri must provided.", nameof(server)); + } + + if (server.DiscoveryUrls.Count == 0) + { + throw new ArgumentException("At least one DiscoveryUrl must be provided.", nameof(server)); + } + + List endpoints = GetEndpoints(server.ApplicationUri); + + // create a placeholder endpoint for the server description. + if (endpoints.Count == 0) + { + string endpointUrl = null; + + for (int ii = 0; ii < server.DiscoveryUrls.Count; ii++) + { + if (!String.IsNullOrEmpty(server.DiscoveryUrls[ii])) + { + endpointUrl = server.DiscoveryUrls[ii]; + break; + } + } + + if (endpointUrl != null && endpointUrl.EndsWith("/discovery", StringComparison.Ordinal)) + { + endpointUrl = endpointUrl.Substring(0, endpointUrl.Length - "/discovery".Length); + } + + if (endpointUrl != null) + { + ConfiguredEndpoint endpoint = Create(endpointUrl); + endpoint.Description.Server = (ApplicationDescription)server.MemberwiseClone(); + Add(endpoint); + } + } + + // update all endpoints with the same server uri. + else + { + foreach (ConfiguredEndpoint endpointToUpdate in GetEndpoints(serverUri)) + { + endpointToUpdate.Description.Server = (ApplicationDescription)server.MemberwiseClone(); + } + } + } + + /// + /// Creates a new endpoint from a url that is not part of the collection. + /// + /// + /// Call the Add() method to add it to the collection. + /// + public ConfiguredEndpoint Create(string url) + { + // check for security parameters appended to the URL + string parameters = null; + + int index = url.IndexOf("- [", StringComparison.Ordinal); + + if (index != -1) + { + parameters = url.Substring(index + 3); + url = url.Substring(0, index).Trim(); + } + + MessageSecurityMode securityMode = MessageSecurityMode.SignAndEncrypt; + string securityPolicyUri = SecurityPolicies.Basic256Sha256; + bool useBinaryEncoding = true; + + if (!String.IsNullOrEmpty(parameters)) + { + string[] fields = parameters.Split(new char[] { '-', '[', ':', ']' }, StringSplitOptions.RemoveEmptyEntries); + + try + { + if (fields.Length > 0) + { + securityMode = (MessageSecurityMode)Enum.Parse(typeof(MessageSecurityMode), fields[0], false); + } + else + { + securityMode = MessageSecurityMode.None; + } + } + catch + { + securityMode = MessageSecurityMode.None; + } + + try + { + if (fields.Length > 1) + { + securityPolicyUri = SecurityPolicies.GetUri(fields[1]); + } + else + { + securityPolicyUri = SecurityPolicies.None; + } + } + catch + { + securityPolicyUri = SecurityPolicies.None; + } + + try + { + if (fields.Length > 2) + { + useBinaryEncoding = fields[2] == "Binary"; + } + else + { + useBinaryEncoding = false; + } + } + catch + { + useBinaryEncoding = false; + } + } + + Uri uri = new Uri(url); + + EndpointDescription description = new EndpointDescription(); + + description.EndpointUrl = uri.ToString(); + description.SecurityMode = securityMode; + description.SecurityPolicyUri = securityPolicyUri; + description.Server.ApplicationUri = Utils.UpdateInstanceUri(uri.ToString()); + description.Server.ApplicationName = uri.AbsolutePath; + + if (description.EndpointUrl.StartsWith(Utils.UriSchemeOpcTcp, StringComparison.Ordinal)) + { + description.TransportProfileUri = Profiles.UaTcpTransport; + description.Server.DiscoveryUrls.Add(description.EndpointUrl); + } + else if (description.EndpointUrl.StartsWith(Utils.UriSchemeHttps, StringComparison.Ordinal)) + { + description.TransportProfileUri = Profiles.HttpsBinaryTransport; + description.Server.DiscoveryUrls.Add(description.EndpointUrl); + } + + ConfiguredEndpoint endpoint = new ConfiguredEndpoint(this, description, null); + endpoint.Configuration.UseBinaryEncoding = useBinaryEncoding; + endpoint.UpdateBeforeConnect = true; + return endpoint; + } + + /// + /// Returns the configured endpoints for the server uri. + /// + public List GetEndpoints(string serverUri) + { + List endpoints = new List(); + + foreach (ConfiguredEndpoint endpoint in m_endpoints) + { + if (endpoint.Description.Server.ApplicationUri == serverUri) + { + endpoints.Add(endpoint); + } + } + + return endpoints; + } + + /// + /// Returns the servers that are part of the collection. + /// + public ApplicationDescriptionCollection GetServers() + { + Dictionary servers = new Dictionary(); + + foreach (ConfiguredEndpoint endpoint in m_endpoints) + { + ApplicationDescription server = endpoint.Description.Server; + + if (!String.IsNullOrEmpty(server.ApplicationUri)) + { + if (!servers.ContainsKey(server.ApplicationUri)) + { + servers.Add(server.ApplicationUri, server); + } + } + } + + return new ApplicationDescriptionCollection(servers.Values); + } + + /// + /// Copies the endpoints. + /// + /// The server URI. + /// + [Obsolete("Non-functional - replaced with GetEndpoints()")] + public List CopyEndpoints(string serverUri) + { + return null; + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + [Obsolete("Non-functional - method not used - updates should be done with ConfiguredEndpoint.UpdateFromServer()")] + public void UpdateEndpointsForServer(string serverUri) + { + } + #endregion + + #region Public Properties + /// + /// A list of well known urls that can be used for discovery. + /// + public StringCollection DiscoveryUrls + { + get + { + return m_discoveryUrls; + } + + set + { + if (value == null) + { + m_discoveryUrls = new StringCollection(Utils.DiscoveryUrls); + } + else + { + m_discoveryUrls = value; + } + } + } + + /// + /// The default configuration for new ConfiguredEndpoints. + /// + public EndpointConfiguration DefaultConfiguration => m_defaultConfiguration; + #endregion + + #region Private Methods + /// + /// Throws exceptions if the endpoint is not valid. + /// + private static void ValidateEndpoint(EndpointDescription endpoint) + { + if (endpoint == null) + { + throw new ArgumentException("Endpoint must not be null."); + } + + if (String.IsNullOrEmpty(endpoint.EndpointUrl)) + { + throw new ArgumentException("Endpoint must have a valid URL."); + } + + if (endpoint.Server == null) + { + endpoint.Server = new ApplicationDescription(); + endpoint.Server.ApplicationType = ApplicationType.Server; + } + + if (String.IsNullOrEmpty(endpoint.Server.ApplicationUri)) + { + endpoint.Server.ApplicationUri = endpoint.EndpointUrl; + } + } + #endregion + } + + #region ConfiguredEndpoint Class + /// + /// Stores the configuration information for an endpoint. + /// + public partial class ConfiguredEndpoint : IFormattable + { + #region Constructors + /// + /// Creates a configured endpoint from the server description. + /// + public ConfiguredEndpoint( + ApplicationDescription server, + EndpointConfiguration configuration) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + + m_description = new EndpointDescription(); + m_updateBeforeConnect = true; + + m_description.Server = server; + + foreach (string discoveryUrl in server.DiscoveryUrls) + { + string baseUrl = discoveryUrl; + + if (baseUrl != null) + { + if (baseUrl.EndsWith("/discovery", StringComparison.Ordinal)) + { + baseUrl = baseUrl.Substring(0, baseUrl.Length - "/discovery".Length); + } + } + + Uri url = Utils.ParseUri(baseUrl); + + if (url != null) + { + m_description.EndpointUrl = url.ToString(); + m_description.SecurityMode = MessageSecurityMode.SignAndEncrypt; + m_description.SecurityPolicyUri = SecurityPolicies.Basic256Sha256; + m_description.UserIdentityTokens.Add(new UserTokenPolicy(UserTokenType.Anonymous)); + + if (url.Scheme == Utils.UriSchemeHttps) + { + m_description.TransportProfileUri = Profiles.HttpsBinaryTransport; + } + + if (url.Scheme == Utils.UriSchemeOpcTcp) + { + m_description.TransportProfileUri = Profiles.UaTcpTransport; + } + + break; + } + } + + // ensure a default configuration. + if (configuration == null) + { + configuration = EndpointConfiguration.Create(); + } + + Update(configuration); + } + + /// + /// The default constructor. + /// + public ConfiguredEndpoint( + ConfiguredEndpointCollection collection, + EndpointDescription description) + : + this(collection, description, null) + { + } + + /// + /// The default constructor. + /// + public ConfiguredEndpoint( + ConfiguredEndpointCollection collection, + EndpointDescription description, + EndpointConfiguration configuration) + { + if (description == null) throw new ArgumentNullException(nameof(description)); + + m_collection = collection; + m_description = description; + m_updateBeforeConnect = true; + + // ensure a default configuration. + if (configuration == null) + { + if (collection != null) + { + configuration = collection.DefaultConfiguration; + } + else + { + configuration = EndpointConfiguration.Create(); + } + } + + Update(configuration); + } + #endregion + + /// + /// Returns a deep copy of the endpoint. + /// + public new object MemberwiseClone() + { + ConfiguredEndpoint clone = new ConfiguredEndpoint(); + clone.Collection = this.Collection; + clone.Update(this); + return clone; + } + + #region Overridden Methods + /// + /// Returns the string representation of the object. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// (Unused). Always pass NULL/NOTHING + /// (Unused). Always pass NULL/NOTHING + /// Thrown if non-null parameters are used + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return Utils.Format( + "{0} - [{1}:{2}:{3}]", + m_description.EndpointUrl, + m_description.SecurityMode, + SecurityPolicies.GetDisplayName(m_description.SecurityPolicyUri), + (m_configuration != null && m_configuration.UseBinaryEncoding) ? "Binary" : "XML"); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Public Methods + /// + /// Determine if an update of the endpoint from the server is needed. + /// + public bool NeedUpdateFromServer() + { + bool hasCertificate = (Description.ServerCertificate != null && Description.ServerCertificate.Length > 0); + bool usingUserTokenSecurity = + (SelectedUserTokenPolicy.TokenType != UserTokenType.Anonymous) && + (SelectedUserTokenPolicy.SecurityPolicyUri ?? SecurityPolicies.None) != SecurityPolicies.None; + bool usingTransportSecurity = Description.SecurityPolicyUri != SecurityPolicies.None; + return (usingUserTokenSecurity || usingTransportSecurity) && !hasCertificate; + } + + /// + /// Updates the endpoint description. + /// + public void Update(ConfiguredEndpoint endpoint) + { + if (endpoint == null) throw new ArgumentNullException(nameof(endpoint)); + + m_description = (EndpointDescription)endpoint.Description.MemberwiseClone(); + m_configuration = (EndpointConfiguration)endpoint.Configuration.MemberwiseClone(); + + // normalize transport profile uri. + if (m_description.TransportProfileUri != null) + { + m_description.TransportProfileUri = Profiles.NormalizeUri(m_description.TransportProfileUri); + } + + m_updateBeforeConnect = endpoint.m_updateBeforeConnect; + m_selectedUserTokenPolicyIndex = endpoint.m_selectedUserTokenPolicyIndex; + m_binaryEncodingSupport = endpoint.m_binaryEncodingSupport; + + if (endpoint.m_userIdentity != null) + { + m_userIdentity = (UserIdentityToken)endpoint.m_userIdentity.MemberwiseClone(); + } + } + + /// + /// Updates the endpoint description. + /// + public void Update(EndpointDescription description) + { + if (description == null) throw new ArgumentNullException(nameof(description)); + + m_description = (EndpointDescription)description.MemberwiseClone(); + + // normalize transport profile uri. + if (m_description.TransportProfileUri != null) + { + m_description.TransportProfileUri = Profiles.NormalizeUri(m_description.TransportProfileUri); + } + + // set the proxy url. + if (m_collection != null && m_description.EndpointUrl != null) + { + if (m_description.EndpointUrl.StartsWith(Utils.UriSchemeOpcTcp, StringComparison.Ordinal)) + { + m_description.ProxyUrl = m_collection.TcpProxyUrl; + } + } + } + + /// + /// Updates the endpoint configuration. + /// + public void Update(EndpointConfiguration configuration) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + m_configuration = (EndpointConfiguration)configuration.MemberwiseClone(); + + BinaryEncodingSupport binaryEncodingSupport = m_description.EncodingSupport; + + // check if the configuration restricts the encoding if the endpoint supports both. + if (binaryEncodingSupport == BinaryEncodingSupport.Optional) + { + binaryEncodingSupport = m_binaryEncodingSupport; + } + + if (binaryEncodingSupport == BinaryEncodingSupport.None) + { + m_configuration.UseBinaryEncoding = false; + } + + if (binaryEncodingSupport == BinaryEncodingSupport.Required) + { + m_configuration.UseBinaryEncoding = true; + } + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + public void UpdateFromServer() + { + UpdateFromServer(EndpointUrl, m_description.SecurityMode, m_description.SecurityPolicyUri); + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + public void UpdateFromServer( + Uri endpointUrl, + MessageSecurityMode securityMode, + string securityPolicyUri) + { + UpdateFromServer(endpointUrl, null, securityMode, securityPolicyUri); + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + public void UpdateFromServer( + Uri endpointUrl, + ITransportWaitingConnection connection, + MessageSecurityMode securityMode, + string securityPolicyUri) + { + // get the a discovery url. + Uri discoveryUrl = GetDiscoveryUrl(endpointUrl); + + // create the discovery client. + DiscoveryClient client; + if (connection != null) + { + client = DiscoveryClient.Create(connection, m_configuration); + } + else + { + client = DiscoveryClient.Create(discoveryUrl, m_configuration); + } + + try + { + // get the endpoints. + EndpointDescriptionCollection collection = client.GetEndpoints(null); + + // find list of matching endpoints. + var matches = MatchEndpoints( + collection, + endpointUrl, + securityMode, + securityPolicyUri + ); + + // select best match + var match = SelectBestMatch(matches, discoveryUrl); + + // update the endpoint. + Update(match); + } + finally + { + client.Close(); + } + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + public Task UpdateFromServerAsync() + { + return UpdateFromServerAsync(EndpointUrl, m_description.SecurityMode, m_description.SecurityPolicyUri); + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + public Task UpdateFromServerAsync( + Uri endpointUrl, + MessageSecurityMode securityMode, + string securityPolicyUri) + { + return UpdateFromServerAsync(endpointUrl, null, securityMode, securityPolicyUri); + } + + /// + /// Updates an endpoint with information from the server's discovery endpoint. + /// + public async Task UpdateFromServerAsync( + Uri endpointUrl, + ITransportWaitingConnection connection, + MessageSecurityMode securityMode, + string securityPolicyUri) + { + // get the a discovery url. + Uri discoveryUrl = GetDiscoveryUrl(endpointUrl); + + // create the discovery client. + DiscoveryClient client; + if (connection != null) + { + client = DiscoveryClient.Create(connection, m_configuration); + } + else + { + client = DiscoveryClient.Create(discoveryUrl, m_configuration); + } + + try + { + // get the endpoints. + EndpointDescriptionCollection collection = await client.GetEndpointsAsync(null); + + // find list of matching endpoints. + var matches = MatchEndpoints( + collection, + endpointUrl, + securityMode, + securityPolicyUri + ); + + // select best match + var match = SelectBestMatch(matches, discoveryUrl); + + // update the endpoint. + Update(match); + } + finally + { + client.Close(); + } + } + + /// + /// Returns a discovery url that can be used to update the endpoint description. + /// + public Uri GetDiscoveryUrl(Uri endpointUrl) + { + // update the endpoint description. + if (endpointUrl != null) + { + m_description.EndpointUrl = endpointUrl.ToString(); + } + else + { + endpointUrl = Utils.ParseUri(m_description.EndpointUrl); + } + + // get the know discovery URLs. + StringCollection discoveryUrls = null; + + if (m_description.Server != null) + { + discoveryUrls = m_description.Server.DiscoveryUrls; + } + + // attempt to construct a discovery url by appending 'discovery' to the endpoint. + if (discoveryUrls == null || discoveryUrls.Count == 0) + { + if (endpointUrl.Scheme != Utils.UriSchemeOpcTcp) + { + return new Uri(String.Format(CultureInfo.InvariantCulture, "{0}/discovery", endpointUrl)); + } + else + { + return endpointUrl; + } + } + + // choose the URL that uses the same protocol if one exists. + for (int ii = 1; ii < discoveryUrls.Count; ii++) + { + if (discoveryUrls[ii].StartsWith(endpointUrl.Scheme, StringComparison.Ordinal)) + { + return Utils.ParseUri(discoveryUrls[ii]); + } + } + + // return the first in the list. + return Utils.ParseUri(discoveryUrls[0]); + } + + /// + /// Parses the extension. + /// + /// The type of extension. + /// Name of the element (null means use type name). + /// The extension if found. Null otherwise. + public T ParseExtension(XmlQualifiedName elementName) + { + return Utils.ParseExtension(m_extensions, elementName); + } + + /// + /// Updates the extension. + /// + /// The type of extension. + /// Name of the element (null means use type name). + /// The value. + public void UpdateExtension(XmlQualifiedName elementName, object value) + { + Utils.UpdateExtension(ref m_extensions, elementName, value); + } + #endregion + + #region Public Properties + /// + /// The collection that the endpoint belongs to. + /// + public ConfiguredEndpointCollection Collection + { + get + { + return m_collection; + } + + internal set + { + if (value == null) throw new ArgumentNullException(nameof(value)); + m_collection = value; + } + } + + /// + /// The URL used to create a sessions. + /// + public Uri EndpointUrl + { + get + { + if (String.IsNullOrEmpty(m_description.EndpointUrl)) + { + return null; + } + + return Utils.ParseUri(m_description.EndpointUrl); + } + + set + { + if (value == null) + { + m_description.EndpointUrl = null; + } + + m_description.EndpointUrl = String.Format(CultureInfo.InvariantCulture, "{0}", value); + } + } + + /// + /// The user identity to use when connecting to the endpoint. + /// + public UserTokenPolicy SelectedUserTokenPolicy + { + get + { + if (m_description != null && m_description.UserIdentityTokens != null) + { + UserTokenPolicyCollection policies = m_description.UserIdentityTokens; + + if (m_selectedUserTokenPolicyIndex >= 0 && policies.Count > m_selectedUserTokenPolicyIndex) + { + return policies[m_selectedUserTokenPolicyIndex]; + } + } + + return null; + } + + set + { + if (m_description != null && m_description.UserIdentityTokens != null) + { + UserTokenPolicyCollection policies = m_description.UserIdentityTokens; + + for (int ii = 0; ii < policies.Count; ii++) + { + if (Object.ReferenceEquals(policies[ii], value)) + { + m_selectedUserTokenPolicyIndex = ii; + break; + } + } + } + + m_selectedUserTokenPolicyIndex = -1; + } + } + #endregion + + #region Private Methods + private EndpointDescriptionCollection MatchEndpoints( + EndpointDescriptionCollection collection, + Uri endpointUrl, + MessageSecurityMode securityMode, + string securityPolicyUri) + { + if (collection == null || collection.Count == 0) + { + throw ServiceResultException.Create( + StatusCodes.BadUnknownResponse, + "Server does not have any endpoints defined."); + } + + // find list of matching endpoints. + EndpointDescriptionCollection matches = new EndpointDescriptionCollection(); + + // first pass - match on the requested security parameters. + foreach (EndpointDescription description in collection) + { + // check for match on security policy. + if (!String.IsNullOrEmpty(securityPolicyUri)) + { + if (securityPolicyUri != description.SecurityPolicyUri) + { + continue; + } + } + + // check for match on security mode. + if (securityMode != MessageSecurityMode.Invalid) + { + if (securityMode != description.SecurityMode) + { + continue; + } + } + + // add to list of matches. + matches.Add(description); + } + + // no matches (security parameters may have changed). + if (matches.Count == 0) + { + matches = collection; + } + + // check if list has to be narrowed down further. + if (matches.Count > 1) + { + collection = matches; + matches = new EndpointDescriptionCollection(); + + // second pass - match on the url scheme. + foreach (EndpointDescription description in collection) + { + // parse the endpoint url. + Uri sessionUrl = Utils.ParseUri(description.EndpointUrl); + + if (sessionUrl == null) + { + continue; + } + + // check for matching protocol. + if (sessionUrl.Scheme != endpointUrl.Scheme) + { + continue; + } + + matches.Add(description); + } + } + + // no matches (protocol may not be supported). + if (matches.Count == 0) + { + matches = collection; + } + + return matches; + } + + /// + /// Select the best match from a security description. + /// + private EndpointDescription SelectBestMatch( + EndpointDescriptionCollection matches, + Uri discoveryUrl + ) + { + // choose first in list by default. + EndpointDescription match = matches[0]; + + // check if list has to be narrowed down further. + if (matches.Count > 1) + { + // third pass - match based on security level. + foreach (EndpointDescription description in matches) + { + if (description.SecurityLevel > match.SecurityLevel) + { + match = description; + } + } + } + + // check if the endpoint url matches the endpoint used in the request. + if (discoveryUrl != null) + { + Uri matchUrl = Utils.ParseUri(match.EndpointUrl); + if (matchUrl == null || String.Compare(discoveryUrl.DnsSafeHost, matchUrl.DnsSafeHost, StringComparison.OrdinalIgnoreCase) != 0) + { + UriBuilder uri = new UriBuilder(matchUrl); + uri.Host = discoveryUrl.DnsSafeHost; + uri.Port = discoveryUrl.Port; + match.EndpointUrl = uri.ToString(); + + // need to update the discovery urls. + match.Server.DiscoveryUrls.Clear(); + match.Server.DiscoveryUrls.Add(discoveryUrl.ToString()); + } + } + + return match; + } + #endregion + } + #endregion +} +#endregion diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/EndpointConfiguration.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/EndpointConfiguration.cs new file mode 100644 index 00000000..7ab0ef98 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/EndpointConfiguration.cs @@ -0,0 +1,71 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel.Channels; + +namespace Opc.Ua +{ + /// + /// Describes how to connect to an endpoint. + /// + public partial class EndpointConfiguration + { + #region Constructors + /// + /// Creates an instance of a configuration with reasonable default values. + /// + public static EndpointConfiguration Create() + { + EndpointConfiguration configuration = new EndpointConfiguration(); + + configuration.OperationTimeout = 120000; + configuration.UseBinaryEncoding = true; + configuration.MaxArrayLength = UInt16.MaxValue; + configuration.MaxByteStringLength = UInt16.MaxValue*16; + configuration.MaxMessageSize = UInt16.MaxValue*64; + configuration.MaxStringLength = UInt16.MaxValue; + configuration.MaxBufferSize = UInt16.MaxValue; + configuration.ChannelLifetime = 120000; + configuration.SecurityTokenLifetime = 3600000; + + return configuration; + } + + /// + /// Creates an instance of a configuration with reasonable default values. + /// + public static EndpointConfiguration Create(ApplicationConfiguration applicationConfiguration) + { + if (applicationConfiguration == null || applicationConfiguration.TransportQuotas == null) + { + return Create(); + } + + EndpointConfiguration configuration = new EndpointConfiguration(); + + configuration.OperationTimeout = applicationConfiguration.TransportQuotas.OperationTimeout; + configuration.UseBinaryEncoding = true; + configuration.MaxArrayLength = applicationConfiguration.TransportQuotas.MaxArrayLength; + configuration.MaxByteStringLength = applicationConfiguration.TransportQuotas.MaxByteStringLength; + configuration.MaxMessageSize = applicationConfiguration.TransportQuotas.MaxMessageSize; + configuration.MaxStringLength = applicationConfiguration.TransportQuotas.MaxStringLength; + configuration.MaxBufferSize = applicationConfiguration.TransportQuotas.MaxBufferSize; + configuration.ChannelLifetime = applicationConfiguration.TransportQuotas.ChannelLifetime; + configuration.SecurityTokenLifetime = applicationConfiguration.TransportQuotas.SecurityTokenLifetime; + + return configuration; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/EndpointDescription.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/EndpointDescription.cs new file mode 100644 index 00000000..32743dae --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/EndpointDescription.cs @@ -0,0 +1,155 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel.Channels; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Describes how to connect to an endpoint. + /// + public partial class EndpointDescription + { + #region Constructors + /// + /// Creates an endpoint configuration from a url. + /// + public EndpointDescription(string url) + { + Initialize(); + + UriBuilder parsedUrl = new UriBuilder(url); + + if (parsedUrl.Scheme != Utils.UriSchemeOpcTcp) + { + if (!parsedUrl.Path.EndsWith("/discovery")) + { + parsedUrl.Path += "/discovery"; + } + } + + Server.DiscoveryUrls.Add(parsedUrl.ToString()); + + EndpointUrl = url; + Server.ApplicationUri = url; + Server.ApplicationName = url; + SecurityMode = MessageSecurityMode.None; + SecurityPolicyUri = SecurityPolicies.None; + } + #endregion + + #region Public Properties + /// + /// The encodings supported by the configuration. + /// + public BinaryEncodingSupport EncodingSupport + { + get + { + if (!String.IsNullOrEmpty(EndpointUrl) && EndpointUrl.StartsWith(Utils.UriSchemeOpcTcp)) + { + return BinaryEncodingSupport.Required; + } + + TransportProfileUri = Profiles.NormalizeUri(TransportProfileUri); + + switch (TransportProfileUri) + { + case Profiles.HttpsBinaryTransport: + { + return BinaryEncodingSupport.Required; + } + } + + return BinaryEncodingSupport.None; + } + } + + /// + /// The proxy url to use when connecting to the endpoint. + /// + public Uri ProxyUrl + { + get { return m_proxyUrl; } + set { m_proxyUrl = value; } + } + #endregion + + #region Public Methods + /// + /// Finds the user token policy with the specified id. + /// + public UserTokenPolicy FindUserTokenPolicy(string policyId) + { + foreach (UserTokenPolicy policy in m_userIdentityTokens) + { + if (policy.PolicyId == policyId) + { + return policy; + } + } + + return null; + } + + /// + /// Finds a token policy that matches the user identity specified. + /// + public UserTokenPolicy FindUserTokenPolicy(UserTokenType tokenType, XmlQualifiedName issuedTokenType) + { + if (issuedTokenType == null) + { + return FindUserTokenPolicy(tokenType, (string)null); + } + + return FindUserTokenPolicy(tokenType, issuedTokenType.Namespace); + } + + /// + /// Finds a token policy that matches the user identity specified. + /// + public UserTokenPolicy FindUserTokenPolicy(UserTokenType tokenType, string issuedTokenType) + { + // construct issuer type. + string issuedTokenTypeText = issuedTokenType; + + // find matching policy. + foreach (UserTokenPolicy policy in m_userIdentityTokens) + { + // check token type. + if (tokenType != policy.TokenType) + { + continue; + } + + // check issuer token type. + if (issuedTokenTypeText != policy.IssuedTokenType) + { + continue; + } + + return policy; + } + + // no policy found + return null; + } + #endregion + + #region Private Fields + private Uri m_proxyUrl; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ISecurityConfigurationManager.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ISecurityConfigurationManager.cs new file mode 100644 index 00000000..3a38bf58 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ISecurityConfigurationManager.cs @@ -0,0 +1,80 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua.Security +{ + /// + /// Implemented by types that have knownledge of an application configuration. + /// + public interface ISecurityConfigurationManager + { + /// + /// Exports the security configuration for an application identified by a file or url. + /// + /// The file path. + /// The security configuration. + SecuredApplication ReadConfiguration(string filePath); + + /// + /// Updates the security configuration for an application identified by a file or url. + /// + /// The file path. + /// The configuration. + void WriteConfiguration(string filePath, SecuredApplication configuration); + } + + #region SecurityConfigurationManagerFactory Class + /// + /// A class used to create instances of ISecurityConfigurationManager. + /// + public static class SecurityConfigurationManagerFactory + { + /// + /// Returns an instance of the type identified by the assembly qualified name. + /// + /// Name of the type. + /// The new instance. + public static ISecurityConfigurationManager CreateInstance(string typeName) + { + if (String.IsNullOrEmpty(typeName)) + { + return new SecurityConfigurationManager(); + } + + Type type = Type.GetType(typeName); + + if (type == null) + { + throw ServiceResultException.Create( + StatusCodes.BadNotSupported, + "Cannot load type: {0}", + typeName); + } + + ISecurityConfigurationManager configuration = Activator.CreateInstance(type) as ISecurityConfigurationManager; + + if (configuration == null) + { + throw ServiceResultException.Create( + StatusCodes.BadNotSupported, + "Type does not support the ISecurityConfigurationManager interface: {0}", + typeName); + } + + return configuration; + } + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/OAuth2Credential.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/OAuth2Credential.cs new file mode 100644 index 00000000..119452f3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/OAuth2Credential.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +// suppress warnings until OAuth 2.0 is supported +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Opc.Ua +{ + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class OAuth2ServerSettings + { + [DataMember(Order = 1)] + public string ApplicationUri { get; set; } + + [DataMember(Order = 2)] + public string ResourceId { get; set; } + + [DataMember(Order = 3)] + public StringCollection Scopes { get; set; } + } + + [CollectionDataContract(Name = "ListOfOAuth2ServerSettings", Namespace = Namespaces.OpcUaConfig, ItemName = "OAuth2ServerSettings")] + public partial class OAuth2ServerSettingsCollection : List + { + } + + [DataContract(Namespace = Namespaces.OpcUaConfig)] + public class OAuth2Credential + { + #region Constructors + /// + /// The default constructor. + /// + public OAuth2Credential() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + [DataMember(Order = 1)] + public string AuthorityUrl { get; set; } + + [DataMember(Order = 2)] + public string GrantType { get; set; } + + [DataMember(Order = 3)] + public string ClientId { get; set; } + + [DataMember(Order = 4)] + public string ClientSecret { get; set; } + + [DataMember(Order = 5)] + public string RedirectUrl { get; set; } + + [DataMember(Order = 6)] + public string TokenEndpoint { get; set; } + + [DataMember(Order = 7)] + public string AuthorizationEndpoint { get; set; } + + [DataMember(Order = 8)] + public OAuth2ServerSettingsCollection Servers { get; set; } + #endregion + + public OAuth2ServerSettings SelectedServer { get; set; } + } + + [CollectionDataContract(Name = "ListOfOAuth2Credential", Namespace = Namespaces.OpcUaConfig, ItemName = "OAuth2Credential")] + public partial class OAuth2CredentialCollection : List + { + public static OAuth2CredentialCollection Load(ApplicationConfiguration configuration) + { + if (configuration == null) + { + throw new ArgumentNullException(nameof(configuration)); + } + + OAuth2CredentialCollection list = null; + + lock (configuration.PropertiesLock) + { + object value = null; + + if (configuration.Properties.TryGetValue("OAuth2Credentials", out value)) + { + list = value as OAuth2CredentialCollection; + } + + if (list == null) + { + list = configuration.ParseExtension(); + + if (list == null) + { + list = new OAuth2CredentialCollection(); + } + + configuration.Properties["OAuth2Credentials"] = list; + } + } + + return list; + } + + public static OAuth2Credential FindByServerUri(ApplicationConfiguration configuration, string serverApplicationUri) + { + if (serverApplicationUri == null || !Uri.IsWellFormedUriString(serverApplicationUri, UriKind.Absolute)) + { + throw new ArgumentException("serverApplicationUri"); + } + + OAuth2CredentialCollection list = Load(configuration); + + if (list != null) + { + foreach (var ii in list) + { + if (ii.Servers != null && ii.Servers.Count > 0) + { + foreach (var jj in ii.Servers) + { + // this is too allow generic sample config files to work on any machine. + // in a real system explicit host names would be used so this would have no effect. + var uri = jj.ApplicationUri.Replace("localhost", System.Net.Dns.GetHostName().ToLowerInvariant()); + + if (uri == serverApplicationUri) + { + var credential = new OAuth2Credential() { + AuthorityUrl = ii.AuthorityUrl, + GrantType = ii.GrantType, + ClientId = ii.ClientId, + ClientSecret = ii.ClientSecret, + RedirectUrl = ii.RedirectUrl, + TokenEndpoint = ii.TokenEndpoint, + AuthorizationEndpoint = ii.AuthorizationEndpoint, + SelectedServer = jj + }; + + return credential; + } + } + } + } + } + + return null; + } + + public static OAuth2Credential FindByAuthorityUrl(ApplicationConfiguration configuration, string authorityUrl) + { + if (authorityUrl == null || !Uri.IsWellFormedUriString(authorityUrl, UriKind.Absolute)) + { + throw new ArgumentException("authorityUrl"); + } + + if (!authorityUrl.EndsWith("/")) + { + authorityUrl += "/"; + } + + OAuth2CredentialCollection list = Load(configuration); + + if (list != null) + { + foreach (var ii in list) + { + // this is too allow generic sample config files to work on any machine. + // in a real system explicit host names would be used so this would have no effect. + var uri = ii.AuthorityUrl.Replace("localhost", System.Net.Dns.GetHostName().ToLowerInvariant()); + + if (!uri.EndsWith("/")) + { + uri += "/"; + } + + if (String.Compare(uri, authorityUrl, StringComparison.OrdinalIgnoreCase) == 0) + { + var credential = new OAuth2Credential() { + AuthorityUrl = authorityUrl, + GrantType = ii.GrantType, + ClientId = ii.ClientId, + ClientSecret = ii.ClientSecret, + RedirectUrl = ii.RedirectUrl, + TokenEndpoint = ii.TokenEndpoint, + AuthorizationEndpoint = ii.AuthorizationEndpoint + }; + + return credential; + } + } + } + + return null; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/SecurityConfigurationManager.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/SecurityConfigurationManager.cs new file mode 100644 index 00000000..6c9ec33b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/SecurityConfigurationManager.cs @@ -0,0 +1,386 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua.Security +{ + /// + /// Provides access to security configuration for windows based .NET application. + /// + public class SecurityConfigurationManager : ISecurityConfigurationManager + { + #region ISecurityConfigurationManager Members + /// + /// Exports the security configuration for an application identified by a file or url. + /// + /// The file path. + /// The security configuration. + public SecuredApplication ReadConfiguration(string filePath) + { + if (filePath == null) throw new ArgumentNullException(nameof(filePath)); + + string configFilePath = filePath; + string exeFilePath = null; + + // check for valid file. + if (!File.Exists(filePath)) + { + throw ServiceResultException.Create( + StatusCodes.BadNotReadable, + "Cannot find the executable or configuration file: {0}", + filePath); + } + + // find the configuration file for the executable. + if (filePath.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + { + exeFilePath = filePath; + + try + { + FileInfo file = new FileInfo(filePath); + string sectionName = file.Name; + sectionName = sectionName.Substring(0, sectionName.Length - file.Extension.Length); + + configFilePath = ApplicationConfiguration.GetFilePathFromAppConfig(sectionName); + + if (configFilePath == null) + { + configFilePath = filePath + ".config"; + } + } + catch (Exception e) + { + throw ServiceResultException.Create( + StatusCodes.BadNotReadable, + e, + "Cannot find the configuration file for the executable: {0}", + filePath); + } + + if (!File.Exists(configFilePath)) + { + throw ServiceResultException.Create( + StatusCodes.BadNotReadable, + "Cannot find the configuration file: {0}", + configFilePath); + } + } + + SecuredApplication application = null; + ApplicationConfiguration applicationConfiguration = null; + + try + { + FileStream reader = File.Open(configFilePath, FileMode.Open, FileAccess.Read, FileShare.Read); + + + try + { + byte[] data = new byte[reader.Length]; + reader.Read(data, 0, (int)reader.Length); + + // find the SecuredApplication element in the file. + if (data.ToString().Contains("SecuredApplication")) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(SecuredApplication)); + application = serializer.ReadObject(reader) as SecuredApplication; + + application.ConfigurationFile = configFilePath; + application.ExecutableFile = exeFilePath; + } + + // load the application configuration. + else + { + reader.Dispose(); + reader = File.Open(configFilePath, FileMode.Open, FileAccess.Read, FileShare.Read); + DataContractSerializer serializer = new DataContractSerializer(typeof(ApplicationConfiguration)); + applicationConfiguration = serializer.ReadObject(reader) as ApplicationConfiguration; + } + } + finally + { + reader.Dispose(); + } + } + catch (Exception e) + { + throw ServiceResultException.Create( + StatusCodes.BadNotReadable, + e, + "Cannot load the configuration file: {0}", + filePath); + } + + // check if security info store on disk. + if (application != null) + { + return application; + } + + application = new SecuredApplication(); + + // copy application info. + application.ApplicationName = applicationConfiguration.ApplicationName; + application.ApplicationUri = applicationConfiguration.ApplicationUri; + application.ProductName = applicationConfiguration.ProductUri; + application.ApplicationType = (ApplicationType)(int)applicationConfiguration.ApplicationType; + application.ConfigurationFile = configFilePath; + application.ExecutableFile = exeFilePath; + application.ConfigurationMode = "http://opcfoundation.org/UASDK/ConfigurationTool"; + application.LastExportTime = DateTime.UtcNow; + + // copy the security settings. + if (applicationConfiguration.SecurityConfiguration != null) + { + application.ApplicationCertificate = SecuredApplication.ToCertificateIdentifier(applicationConfiguration.SecurityConfiguration.ApplicationCertificate); + + if (applicationConfiguration.SecurityConfiguration.TrustedIssuerCertificates != null) + { + application.IssuerCertificateStore = SecuredApplication.ToCertificateStoreIdentifier(applicationConfiguration.SecurityConfiguration.TrustedIssuerCertificates); + + if (applicationConfiguration.SecurityConfiguration.TrustedIssuerCertificates.TrustedCertificates != null) + { + application.IssuerCertificates = SecuredApplication.ToCertificateList(applicationConfiguration.SecurityConfiguration.TrustedIssuerCertificates.TrustedCertificates); + } + } + + if (applicationConfiguration.SecurityConfiguration.TrustedPeerCertificates != null) + { + application.TrustedCertificateStore = SecuredApplication.ToCertificateStoreIdentifier(applicationConfiguration.SecurityConfiguration.TrustedPeerCertificates); + + if (applicationConfiguration.SecurityConfiguration.TrustedPeerCertificates.TrustedCertificates != null) + { + application.TrustedCertificates = SecuredApplication.ToCertificateList(applicationConfiguration.SecurityConfiguration.TrustedPeerCertificates.TrustedCertificates); + } + } + + if (applicationConfiguration.SecurityConfiguration.RejectedCertificateStore != null) + { + application.RejectedCertificatesStore = SecuredApplication.ToCertificateStoreIdentifier(applicationConfiguration.SecurityConfiguration.RejectedCertificateStore); + } + } + + ServerBaseConfiguration serverConfiguration = null; + + if (applicationConfiguration.ServerConfiguration != null) + { + serverConfiguration = applicationConfiguration.ServerConfiguration; + } + + else if (applicationConfiguration.DiscoveryServerConfiguration != null) + { + serverConfiguration = applicationConfiguration.DiscoveryServerConfiguration; + } + + if (serverConfiguration != null) + { + application.BaseAddresses = SecuredApplication.ToListOfBaseAddresses(serverConfiguration); + application.SecurityProfiles = SecuredApplication.ToListOfSecurityProfiles(serverConfiguration.SecurityPolicies); + } + + // return exported setttings. + return application; + } + + /// + /// Finds the specified parent. + /// + /// The parent. + /// Name of the local. + /// The namespace URI. + /// + private XmlElement Find(XmlNode parent, string localName, string namespaceUri) + { + for (XmlNode ii = parent.FirstChild; ii != null; ii = ii.NextSibling) + { + if (ii is XmlElement && ii.LocalName == "SecuredApplication" && ii.NamespaceURI == Namespaces.OpcUaSecurity) + { + return (XmlElement)ii; + } + + XmlElement child = Find(ii, localName, namespaceUri); + + if (child != null) + { + return child; + } + } + + return null; + } + + /// + /// Updates the security configuration for an application identified by a file or url. + /// + /// The file path. + /// The configuration. + public void WriteConfiguration(string filePath, SecuredApplication configuration) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + // check for valid file. + if (String.IsNullOrEmpty(filePath) || !File.Exists(filePath)) + { + throw ServiceResultException.Create( + StatusCodes.BadNotReadable, + "Cannot find the configuration file: {0}", + configuration.ConfigurationFile); + } + + // load from file. + XmlDocument document = new XmlDocument(); + document.Load(new FileStream(filePath, FileMode.Open)); + + XmlElement element = Find(document.DocumentElement, "SecuredApplication", Namespaces.OpcUaSecurity); + + // update secured application. + if (element != null) + { + configuration.LastExportTime = DateTime.UtcNow; + element.InnerXml = SetObject(typeof(SecuredApplication), configuration); + } + + // update application configuration. + else + { + UpdateDocument(document.DocumentElement, configuration); + } + + try + { + // update configuration file. + Stream ostrm = File.Open(filePath, FileMode.Create, FileAccess.Write); + StreamWriter writer = new StreamWriter(ostrm, System.Text.Encoding.UTF8); + + try + { + document.Save(writer); + } + finally + { + writer.Flush(); + writer.Dispose(); + } + } + catch (Exception e) + { + throw ServiceResultException.Create( + StatusCodes.BadNotWritable, + e, + "Cannot update the configuration file: {0}", + configuration.ConfigurationFile); + } + } + #endregion + + #region Private Methods + /// + /// Updates the XML document with the new configuration information. + /// + private static void UpdateDocument(XmlElement element, SecuredApplication application) + { + for (XmlNode node = element.FirstChild; node != null; node = node.NextSibling) + { + if (node.Name == "ApplicationName" && node.NamespaceURI == Namespaces.OpcUaConfig) + { + node.InnerText = application.ApplicationName; + continue; + } + + if (node.Name == "ApplicationUri" && node.NamespaceURI == Namespaces.OpcUaConfig) + { + node.InnerText = application.ApplicationUri; + continue; + } + + if (node.Name == "SecurityConfiguration" && node.NamespaceURI == Namespaces.OpcUaConfig) + { + SecurityConfiguration security = (SecurityConfiguration)GetObject(typeof(SecurityConfiguration), node); + + if (application.ApplicationCertificate != null) + { + security.ApplicationCertificate = SecuredApplication.FromCertificateIdentifier(application.ApplicationCertificate); + } + + security.TrustedIssuerCertificates = SecuredApplication.FromCertificateStoreIdentifierToTrustList(application.IssuerCertificateStore); + security.TrustedIssuerCertificates.TrustedCertificates = SecuredApplication.FromCertificateList(application.IssuerCertificates); + security.TrustedPeerCertificates = SecuredApplication.FromCertificateStoreIdentifierToTrustList(application.TrustedCertificateStore); + security.TrustedPeerCertificates.TrustedCertificates = SecuredApplication.FromCertificateList(application.TrustedCertificates); + security.RejectedCertificateStore = SecuredApplication.FromCertificateStoreIdentifier(application.RejectedCertificatesStore); + + node.InnerXml = SetObject(typeof(SecurityConfiguration), security); + continue; + } + + if (node.Name == "ServerConfiguration" && node.NamespaceURI == Namespaces.OpcUaConfig) + { + ServerConfiguration configuration = (ServerConfiguration)GetObject(typeof(ServerConfiguration), node); + + SecuredApplication.FromListOfBaseAddresses(configuration, application.BaseAddresses); + configuration.SecurityPolicies = SecuredApplication.FromListOfSecurityProfiles(application.SecurityProfiles); + + node.InnerXml = SetObject(typeof(ServerConfiguration), configuration); + continue; + } + + else if (node.Name == "DiscoveryServerConfiguration" && node.NamespaceURI == Namespaces.OpcUaConfig) + { + DiscoveryServerConfiguration configuration = (DiscoveryServerConfiguration)GetObject(typeof(DiscoveryServerConfiguration), node); + + SecuredApplication.FromListOfBaseAddresses(configuration, application.BaseAddresses); + configuration.SecurityPolicies = SecuredApplication.FromListOfSecurityProfiles(application.SecurityProfiles); + + node.InnerXml = SetObject(typeof(DiscoveryServerConfiguration), configuration); + continue; + } + } + } + + /// + /// Reads an object from the body of an XML element. + /// + private static object GetObject(Type type, XmlNode element) + { + using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(element.InnerXml))) + { + XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memoryStream, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null); + DataContractSerializer serializer = new DataContractSerializer(type); + return serializer.ReadObject(reader); + } + } + + /// + /// Reads an object from the body of an XML element. + /// + private static string SetObject(Type type, object value) + { + using (MemoryStream memoryStream = new MemoryStream()) + { + DataContractSerializer serializer = new DataContractSerializer(value.GetType()); + serializer.WriteObject(memoryStream, value); + + // must extract the inner xml. + XmlDocument document = new XmlDocument(); + document.InnerXml = Encoding.UTF8.GetString(memoryStream.ToArray()); + return document.DocumentElement.InnerXml; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ServerProperties.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ServerProperties.cs new file mode 100644 index 00000000..8f819d09 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Configuration/ServerProperties.cs @@ -0,0 +1,122 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// The properties of the current server instance. + /// + public class ServerProperties + { +#region Constructors + /// + /// The default constructor. + /// + public ServerProperties() + { + m_productUri = String.Empty; + m_manufacturerName = String.Empty; + m_productName = String.Empty; + m_softwareVersion = String.Empty; + m_buildNumber = String.Empty; + m_buildDate = DateTime.MinValue; + m_datatypeAssemblies = new StringCollection(); + m_softwareCertificates = new SignedSoftwareCertificateCollection(); + } +#endregion + +#region Public Properties + /// + /// The unique identifier for the product. + /// + public string ProductUri + { + get { return m_productUri; } + set { m_productUri = value; } + } + + /// + /// The name of the product + /// + public string ProductName + { + get { return m_productName; } + set { m_productName = value; } + } + + /// + /// The name of the manufacturer + /// + public string ManufacturerName + { + get { return m_manufacturerName; } + set { m_manufacturerName = value; } + } + + /// + /// The software version for the application + /// + public string SoftwareVersion + { + get { return m_softwareVersion; } + set { m_softwareVersion = value; } + } + + /// + /// The build number for the application + /// + public string BuildNumber + { + get { return m_buildNumber; } + set { m_buildNumber = value; } + } + + /// + /// When the application was built. + /// + public DateTime BuildDate + { + get { return m_buildDate; } + set { m_buildDate = value; } + } + + /// + /// The assemblies that contain encodeable types that could be uses a variable values. + /// + public StringCollection DatatypeAssemblies + { + get { return m_datatypeAssemblies; } + } + + /// + /// The software certificates granted to the server. + /// + public SignedSoftwareCertificateCollection SoftwareCertificates + { + get { return m_softwareCertificates; } + } +#endregion + +#region Private Members + private string m_productUri; + private string m_productName; + private string m_manufacturerName; + private string m_softwareVersion; + private string m_buildNumber; + private DateTime m_buildDate; + private StringCollection m_datatypeAssemblies; + private SignedSoftwareCertificateCollection m_softwareCertificates; +#endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/ConditionStateNames.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/ConditionStateNames.cs new file mode 100644 index 00000000..9a13b3ec --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/ConditionStateNames.cs @@ -0,0 +1,92 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// Defines the default names for the condition states. + /// + public static partial class ConditionStateNames + { + /// + /// The name of the Disabled state. + /// + public const string Disabled = "Disabled"; + + /// + /// The name of the Enabled state. + /// + public const string Enabled = "Enabled"; + + /// + /// The name of the Inactive state. + /// + public const string Inactive = "Inactive"; + + /// + /// The name of the Active state. + /// + public const string Active = "Active"; + + /// + /// The name of the Unacknowledged state. + /// + public const string Unacknowledged = "Unacknowledged"; + + /// + /// The name of the Acknowledged state. + /// + public const string Acknowledged = "Acknowledged"; + + /// + /// The name of the Unconfirmed state. + /// + public const string Unconfirmed = "Unconfirmed"; + + /// + /// The name of the Confirmed state. + /// + public const string Confirmed = "Confirmed"; + + /// + /// The name of the Unsuppressed state. + /// + public const string Unsuppressed = "Unsuppressed"; + + /// + /// The name of the Suppressed state. + /// + public const string Suppressed = "Suppressed"; + + /// + /// The name of the HighHighActive state. + /// + public const string HighHighActive = "HighHighActive"; + + /// + /// The name of the HighActive state. + /// + public const string HighActive = "HighActive"; + + /// + /// The name of the LowActive state. + /// + public const string LowActive = "LowActive"; + + /// + /// The name of the LowLowActive state. + /// + public const string LowLowActive = "LowLowActive"; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/DataTypes.Helpers.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/DataTypes.Helpers.cs new file mode 100644 index 00000000..1f88fb34 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/DataTypes.Helpers.cs @@ -0,0 +1,145 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Reflection; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A class that defines constants used by UA applications. + /// + public static partial class DataTypes + { + #region Static Helper Functions + /// + /// Returns the browse name for the attribute. + /// + public static string GetBrowseName(int identifier) + { + FieldInfo[] fields = typeof(DataTypes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (identifier == (uint)field.GetValue(typeof(DataTypes))) + { + return field.Name; + } + } + + return System.String.Empty; + } + + /// + /// Returns the browse names for all attributes. + /// + public static string[] GetBrowseNames() + { + FieldInfo[] fields = typeof(DataTypes).GetFields(BindingFlags.Public | BindingFlags.Static); + + int ii = 0; + + string[] names = new string[fields.Length]; + + foreach (FieldInfo field in fields) + { + names[ii++] = field.Name; + } + + return names; + } + + /// + /// Returns the id for the attribute with the specified browse name. + /// + public static uint GetIdentifier(string browseName) + { + FieldInfo[] fields = typeof(DataTypes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (field.Name == browseName) + { + return (uint)field.GetValue(typeof(DataTypes)); + } + } + + return 0; + } + + /// + /// Returns the data type id that describes a value. + /// + public static NodeId GetDataTypeId(object value) + { + return TypeInfo.GetDataTypeId(value); + } + + /// + /// Returns the data type id that describes a value. + /// + public static NodeId GetDataTypeId(Type type) + { + return TypeInfo.GetDataTypeId(type); + } + + /// + /// Returns the data type id that describes a value. + /// + public static NodeId GetDataTypeId(TypeInfo typeInfo) + { + return TypeInfo.GetDataTypeId(typeInfo); + } + + /// + /// Returns the array rank for a value. + /// + public static int GetValueRank(object value) + { + return TypeInfo.GetValueRank(value); + } + + /// + /// Returns the array rank for a type. + /// + public static int GetValueRank(Type type) + { + return TypeInfo.GetValueRank(type); + } + + /// + /// Returns the BuiltInType type for the DataTypeId. + /// + public static BuiltInType GetBuiltInType(NodeId datatypeId) + { + return TypeInfo.GetBuiltInType(datatypeId); + } + + /// + /// Returns the BuiltInType type for the DataTypeId. + /// + public static BuiltInType GetBuiltInType(NodeId datatypeId, ITypeTable typeTree) + { + return TypeInfo.GetBuiltInType(datatypeId, typeTree); + } + + /// + /// Returns the system type for the datatype. + /// + public static Type GetSystemType(NodeId datatypeId, EncodeableFactory factory) + { + return TypeInfo.GetSystemType(datatypeId, factory); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/Namespaces.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/Namespaces.cs new file mode 100644 index 00000000..7ca8ba2e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/Namespaces.cs @@ -0,0 +1,82 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// Defines well-known namespaces. + /// + public static partial class Namespaces + { + /// + /// The XML Schema namespace. + /// + public const string XmlSchema = "http://www.w3.org/2001/XMLSchema"; + + /// + /// The XML Schema Instance namespace. + /// + public const string XmlSchemaInstance = "http://www.w3.org/2001/XMLSchema-instance"; + + /// + /// The WS Secuirity Extensions Namespace. + /// + public const string WSSecurityExtensions = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; + + /// + /// The WS Secuirity Utilities Namespace. + /// + public const string WSSecurityUtilities = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; + + /// + /// The URI for the UA WSDL. + /// + public const string OpcUaWsdl = "http://opcfoundation.org/UA/2008/02/Services.wsdl"; + + /// + /// The URI for the UA SecuredApplication schema. + /// + public const string OpcUaSecurity = "http://opcfoundation.org/UA/2011/03/SecuredApplication.xsd"; + + /// + /// The base URI for the Global Discovery Service. + /// + public const string OpcUaGds = "http://opcfoundation.org/UA/GDS/"; + + /// + /// The base URI for SDK related schemas. + /// + public const string OpcUaSdk = "http://opcfoundation.org/UA/SDK/"; + + /// + /// The URI for the UA SDK Configuration Schema. + /// + public const string OpcUaConfig = OpcUaSdk + "Configuration.xsd"; + + /// + /// The URI for the built-in types namespace. + /// + public const string OpcUaBuiltInTypes = OpcUa + "BuiltInTypes/"; + + /// + /// The URI for the OPC Binary Schema. + /// + public const string OpcBinarySchema = "http://opcfoundation.org/BinarySchema/"; + + /// + /// The URI representing all resources in at a site managed by an OAuthe Authorization Service. + /// + public const string OAuth2SiteResourceUri = "urn:opcfoundation.org:ua:oauth2:resource:site"; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/ReferenceTypes.Helpers.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/ReferenceTypes.Helpers.cs new file mode 100644 index 00000000..7d903b7d --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Constants/ReferenceTypes.Helpers.cs @@ -0,0 +1,85 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using System.Xml; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// A class that defines constants used by UA applications. + /// + public static partial class ReferenceTypes + { + #region Static Helper Functions + /// + /// Returns the browse name for the attribute. + /// + public static string GetBrowseName(uint identifier) + { + FieldInfo[] fields = typeof(ReferenceTypes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (identifier == (uint)field.GetValue(typeof(ReferenceTypes))) + { + return field.Name; + } + } + + return System.String.Empty; + } + + /// + /// Returns the browse names for all attributes. + /// + public static string[] GetBrowseNames() + { + FieldInfo[] fields = typeof(ReferenceTypes).GetFields(BindingFlags.Public | BindingFlags.Static); + + int ii = 0; + + string[] names = new string[fields.Length]; + + foreach (FieldInfo field in fields) + { + names[ii++] = field.Name; + } + + return names; + } + + /// + /// Returns the id for the attribute with the specified browse name. + /// + public static uint GetIdentifier(string browseName) + { + FieldInfo[] fields = typeof(ReferenceTypes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (field.Name == browseName) + { + return (uint)field.GetValue(typeof(ReferenceTypes)); + } + } + + return 0; + } + #endregion + } + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Channels.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Channels.cs new file mode 100644 index 00000000..4ed865ab --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Channels.cs @@ -0,0 +1,2124 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Xml; +using System.ServiceModel; +using System.ServiceModel.Channels; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + #region SessionChannel Class + /// + /// A channel object used by clients to access a UA service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionChannel : WcfChannelBase, ISessionChannel + { + /// + /// Initializes the object with the endpoint address. + /// + internal SessionChannel() + { + } + + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// The client side implementation of the CreateSession service contract. + /// + public CreateSessionResponseMessage CreateSession(CreateSessionMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginCreateSession(request, null, null); + } + + return this.Channel.EndCreateSession(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginCreateSession service contract. + /// + public IAsyncResult BeginCreateSession(CreateSessionMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginCreateSession(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndCreateSession service contract. + /// + public CreateSessionResponseMessage EndCreateSession(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndCreateSession(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// The client side implementation of the ActivateSession service contract. + /// + public ActivateSessionResponseMessage ActivateSession(ActivateSessionMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginActivateSession(request, null, null); + } + + return this.Channel.EndActivateSession(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginActivateSession service contract. + /// + public IAsyncResult BeginActivateSession(ActivateSessionMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginActivateSession(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndActivateSession service contract. + /// + public ActivateSessionResponseMessage EndActivateSession(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndActivateSession(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// The client side implementation of the CloseSession service contract. + /// + public CloseSessionResponseMessage CloseSession(CloseSessionMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginCloseSession(request, null, null); + } + + return this.Channel.EndCloseSession(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginCloseSession service contract. + /// + public IAsyncResult BeginCloseSession(CloseSessionMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginCloseSession(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndCloseSession service contract. + /// + public CloseSessionResponseMessage EndCloseSession(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndCloseSession(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// The client side implementation of the Cancel service contract. + /// + public CancelResponseMessage Cancel(CancelMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginCancel(request, null, null); + } + + return this.Channel.EndCancel(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginCancel service contract. + /// + public IAsyncResult BeginCancel(CancelMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginCancel(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndCancel service contract. + /// + public CancelResponseMessage EndCancel(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndCancel(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// The client side implementation of the AddNodes service contract. + /// + public AddNodesResponseMessage AddNodes(AddNodesMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginAddNodes(request, null, null); + } + + return this.Channel.EndAddNodes(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginAddNodes service contract. + /// + public IAsyncResult BeginAddNodes(AddNodesMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginAddNodes(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndAddNodes service contract. + /// + public AddNodesResponseMessage EndAddNodes(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndAddNodes(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// The client side implementation of the AddReferences service contract. + /// + public AddReferencesResponseMessage AddReferences(AddReferencesMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginAddReferences(request, null, null); + } + + return this.Channel.EndAddReferences(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginAddReferences service contract. + /// + public IAsyncResult BeginAddReferences(AddReferencesMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginAddReferences(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndAddReferences service contract. + /// + public AddReferencesResponseMessage EndAddReferences(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndAddReferences(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// The client side implementation of the DeleteNodes service contract. + /// + public DeleteNodesResponseMessage DeleteNodes(DeleteNodesMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginDeleteNodes(request, null, null); + } + + return this.Channel.EndDeleteNodes(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginDeleteNodes service contract. + /// + public IAsyncResult BeginDeleteNodes(DeleteNodesMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginDeleteNodes(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndDeleteNodes service contract. + /// + public DeleteNodesResponseMessage EndDeleteNodes(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndDeleteNodes(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// The client side implementation of the DeleteReferences service contract. + /// + public DeleteReferencesResponseMessage DeleteReferences(DeleteReferencesMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginDeleteReferences(request, null, null); + } + + return this.Channel.EndDeleteReferences(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginDeleteReferences service contract. + /// + public IAsyncResult BeginDeleteReferences(DeleteReferencesMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginDeleteReferences(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndDeleteReferences service contract. + /// + public DeleteReferencesResponseMessage EndDeleteReferences(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndDeleteReferences(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Browse) + /// + /// The client side implementation of the Browse service contract. + /// + public BrowseResponseMessage Browse(BrowseMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginBrowse(request, null, null); + } + + return this.Channel.EndBrowse(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginBrowse service contract. + /// + public IAsyncResult BeginBrowse(BrowseMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginBrowse(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndBrowse service contract. + /// + public BrowseResponseMessage EndBrowse(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndBrowse(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// The client side implementation of the BrowseNext service contract. + /// + public BrowseNextResponseMessage BrowseNext(BrowseNextMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginBrowseNext(request, null, null); + } + + return this.Channel.EndBrowseNext(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginBrowseNext service contract. + /// + public IAsyncResult BeginBrowseNext(BrowseNextMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginBrowseNext(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndBrowseNext service contract. + /// + public BrowseNextResponseMessage EndBrowseNext(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndBrowseNext(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// The client side implementation of the TranslateBrowsePathsToNodeIds service contract. + /// + public TranslateBrowsePathsToNodeIdsResponseMessage TranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginTranslateBrowsePathsToNodeIds(request, null, null); + } + + return this.Channel.EndTranslateBrowsePathsToNodeIds(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginTranslateBrowsePathsToNodeIds service contract. + /// + public IAsyncResult BeginTranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginTranslateBrowsePathsToNodeIds(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndTranslateBrowsePathsToNodeIds service contract. + /// + public TranslateBrowsePathsToNodeIdsResponseMessage EndTranslateBrowsePathsToNodeIds(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndTranslateBrowsePathsToNodeIds(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// The client side implementation of the RegisterNodes service contract. + /// + public RegisterNodesResponseMessage RegisterNodes(RegisterNodesMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginRegisterNodes(request, null, null); + } + + return this.Channel.EndRegisterNodes(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginRegisterNodes service contract. + /// + public IAsyncResult BeginRegisterNodes(RegisterNodesMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginRegisterNodes(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndRegisterNodes service contract. + /// + public RegisterNodesResponseMessage EndRegisterNodes(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndRegisterNodes(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// The client side implementation of the UnregisterNodes service contract. + /// + public UnregisterNodesResponseMessage UnregisterNodes(UnregisterNodesMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginUnregisterNodes(request, null, null); + } + + return this.Channel.EndUnregisterNodes(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginUnregisterNodes service contract. + /// + public IAsyncResult BeginUnregisterNodes(UnregisterNodesMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginUnregisterNodes(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndUnregisterNodes service contract. + /// + public UnregisterNodesResponseMessage EndUnregisterNodes(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndUnregisterNodes(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// The client side implementation of the QueryFirst service contract. + /// + public QueryFirstResponseMessage QueryFirst(QueryFirstMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginQueryFirst(request, null, null); + } + + return this.Channel.EndQueryFirst(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginQueryFirst service contract. + /// + public IAsyncResult BeginQueryFirst(QueryFirstMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginQueryFirst(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndQueryFirst service contract. + /// + public QueryFirstResponseMessage EndQueryFirst(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndQueryFirst(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// The client side implementation of the QueryNext service contract. + /// + public QueryNextResponseMessage QueryNext(QueryNextMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginQueryNext(request, null, null); + } + + return this.Channel.EndQueryNext(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginQueryNext service contract. + /// + public IAsyncResult BeginQueryNext(QueryNextMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginQueryNext(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndQueryNext service contract. + /// + public QueryNextResponseMessage EndQueryNext(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndQueryNext(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Read) + /// + /// The client side implementation of the Read service contract. + /// + public ReadResponseMessage Read(ReadMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginRead(request, null, null); + } + + return this.Channel.EndRead(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginRead service contract. + /// + public IAsyncResult BeginRead(ReadMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginRead(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndRead service contract. + /// + public ReadResponseMessage EndRead(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndRead(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// The client side implementation of the HistoryRead service contract. + /// + public HistoryReadResponseMessage HistoryRead(HistoryReadMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginHistoryRead(request, null, null); + } + + return this.Channel.EndHistoryRead(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginHistoryRead service contract. + /// + public IAsyncResult BeginHistoryRead(HistoryReadMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginHistoryRead(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndHistoryRead service contract. + /// + public HistoryReadResponseMessage EndHistoryRead(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndHistoryRead(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Write) + /// + /// The client side implementation of the Write service contract. + /// + public WriteResponseMessage Write(WriteMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginWrite(request, null, null); + } + + return this.Channel.EndWrite(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginWrite service contract. + /// + public IAsyncResult BeginWrite(WriteMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginWrite(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndWrite service contract. + /// + public WriteResponseMessage EndWrite(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndWrite(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// The client side implementation of the HistoryUpdate service contract. + /// + public HistoryUpdateResponseMessage HistoryUpdate(HistoryUpdateMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginHistoryUpdate(request, null, null); + } + + return this.Channel.EndHistoryUpdate(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginHistoryUpdate service contract. + /// + public IAsyncResult BeginHistoryUpdate(HistoryUpdateMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginHistoryUpdate(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndHistoryUpdate service contract. + /// + public HistoryUpdateResponseMessage EndHistoryUpdate(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndHistoryUpdate(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Call) + /// + /// The client side implementation of the Call service contract. + /// + public CallResponseMessage Call(CallMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginCall(request, null, null); + } + + return this.Channel.EndCall(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginCall service contract. + /// + public IAsyncResult BeginCall(CallMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginCall(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndCall service contract. + /// + public CallResponseMessage EndCall(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndCall(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// The client side implementation of the CreateMonitoredItems service contract. + /// + public CreateMonitoredItemsResponseMessage CreateMonitoredItems(CreateMonitoredItemsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginCreateMonitoredItems(request, null, null); + } + + return this.Channel.EndCreateMonitoredItems(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginCreateMonitoredItems service contract. + /// + public IAsyncResult BeginCreateMonitoredItems(CreateMonitoredItemsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginCreateMonitoredItems(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndCreateMonitoredItems service contract. + /// + public CreateMonitoredItemsResponseMessage EndCreateMonitoredItems(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndCreateMonitoredItems(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// The client side implementation of the ModifyMonitoredItems service contract. + /// + public ModifyMonitoredItemsResponseMessage ModifyMonitoredItems(ModifyMonitoredItemsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginModifyMonitoredItems(request, null, null); + } + + return this.Channel.EndModifyMonitoredItems(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginModifyMonitoredItems service contract. + /// + public IAsyncResult BeginModifyMonitoredItems(ModifyMonitoredItemsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginModifyMonitoredItems(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndModifyMonitoredItems service contract. + /// + public ModifyMonitoredItemsResponseMessage EndModifyMonitoredItems(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndModifyMonitoredItems(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// The client side implementation of the SetMonitoringMode service contract. + /// + public SetMonitoringModeResponseMessage SetMonitoringMode(SetMonitoringModeMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginSetMonitoringMode(request, null, null); + } + + return this.Channel.EndSetMonitoringMode(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginSetMonitoringMode service contract. + /// + public IAsyncResult BeginSetMonitoringMode(SetMonitoringModeMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginSetMonitoringMode(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndSetMonitoringMode service contract. + /// + public SetMonitoringModeResponseMessage EndSetMonitoringMode(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndSetMonitoringMode(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// The client side implementation of the SetTriggering service contract. + /// + public SetTriggeringResponseMessage SetTriggering(SetTriggeringMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginSetTriggering(request, null, null); + } + + return this.Channel.EndSetTriggering(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginSetTriggering service contract. + /// + public IAsyncResult BeginSetTriggering(SetTriggeringMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginSetTriggering(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndSetTriggering service contract. + /// + public SetTriggeringResponseMessage EndSetTriggering(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndSetTriggering(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// The client side implementation of the DeleteMonitoredItems service contract. + /// + public DeleteMonitoredItemsResponseMessage DeleteMonitoredItems(DeleteMonitoredItemsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginDeleteMonitoredItems(request, null, null); + } + + return this.Channel.EndDeleteMonitoredItems(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginDeleteMonitoredItems service contract. + /// + public IAsyncResult BeginDeleteMonitoredItems(DeleteMonitoredItemsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginDeleteMonitoredItems(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndDeleteMonitoredItems service contract. + /// + public DeleteMonitoredItemsResponseMessage EndDeleteMonitoredItems(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndDeleteMonitoredItems(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// The client side implementation of the CreateSubscription service contract. + /// + public CreateSubscriptionResponseMessage CreateSubscription(CreateSubscriptionMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginCreateSubscription(request, null, null); + } + + return this.Channel.EndCreateSubscription(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginCreateSubscription service contract. + /// + public IAsyncResult BeginCreateSubscription(CreateSubscriptionMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginCreateSubscription(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndCreateSubscription service contract. + /// + public CreateSubscriptionResponseMessage EndCreateSubscription(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndCreateSubscription(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// The client side implementation of the ModifySubscription service contract. + /// + public ModifySubscriptionResponseMessage ModifySubscription(ModifySubscriptionMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginModifySubscription(request, null, null); + } + + return this.Channel.EndModifySubscription(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginModifySubscription service contract. + /// + public IAsyncResult BeginModifySubscription(ModifySubscriptionMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginModifySubscription(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndModifySubscription service contract. + /// + public ModifySubscriptionResponseMessage EndModifySubscription(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndModifySubscription(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// The client side implementation of the SetPublishingMode service contract. + /// + public SetPublishingModeResponseMessage SetPublishingMode(SetPublishingModeMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginSetPublishingMode(request, null, null); + } + + return this.Channel.EndSetPublishingMode(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginSetPublishingMode service contract. + /// + public IAsyncResult BeginSetPublishingMode(SetPublishingModeMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginSetPublishingMode(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndSetPublishingMode service contract. + /// + public SetPublishingModeResponseMessage EndSetPublishingMode(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndSetPublishingMode(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Publish) + /// + /// The client side implementation of the Publish service contract. + /// + public PublishResponseMessage Publish(PublishMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginPublish(request, null, null); + } + + return this.Channel.EndPublish(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginPublish service contract. + /// + public IAsyncResult BeginPublish(PublishMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginPublish(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndPublish service contract. + /// + public PublishResponseMessage EndPublish(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndPublish(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_Republish) + /// + /// The client side implementation of the Republish service contract. + /// + public RepublishResponseMessage Republish(RepublishMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginRepublish(request, null, null); + } + + return this.Channel.EndRepublish(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginRepublish service contract. + /// + public IAsyncResult BeginRepublish(RepublishMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginRepublish(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndRepublish service contract. + /// + public RepublishResponseMessage EndRepublish(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndRepublish(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// The client side implementation of the TransferSubscriptions service contract. + /// + public TransferSubscriptionsResponseMessage TransferSubscriptions(TransferSubscriptionsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginTransferSubscriptions(request, null, null); + } + + return this.Channel.EndTransferSubscriptions(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginTransferSubscriptions service contract. + /// + public IAsyncResult BeginTransferSubscriptions(TransferSubscriptionsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginTransferSubscriptions(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndTransferSubscriptions service contract. + /// + public TransferSubscriptionsResponseMessage EndTransferSubscriptions(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndTransferSubscriptions(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// The client side implementation of the DeleteSubscriptions service contract. + /// + public DeleteSubscriptionsResponseMessage DeleteSubscriptions(DeleteSubscriptionsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginDeleteSubscriptions(request, null, null); + } + + return this.Channel.EndDeleteSubscriptions(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginDeleteSubscriptions service contract. + /// + public IAsyncResult BeginDeleteSubscriptions(DeleteSubscriptionsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginDeleteSubscriptions(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndDeleteSubscriptions service contract. + /// + public DeleteSubscriptionsResponseMessage EndDeleteSubscriptions(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndDeleteSubscriptions(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + } + #endregion + + #region DiscoveryChannel Class + /// + /// A channel object used by clients to access a UA service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DiscoveryChannel : WcfChannelBase, IDiscoveryChannel + { + /// + /// Initializes the object with the endpoint address. + /// + internal DiscoveryChannel() + { + } + + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// The client side implementation of the FindServers service contract. + /// + public FindServersResponseMessage FindServers(FindServersMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginFindServers(request, null, null); + } + + return this.Channel.EndFindServers(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginFindServers service contract. + /// + public IAsyncResult BeginFindServers(FindServersMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginFindServers(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndFindServers service contract. + /// + public FindServersResponseMessage EndFindServers(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndFindServers(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// The client side implementation of the FindServersOnNetwork service contract. + /// + public FindServersOnNetworkResponseMessage FindServersOnNetwork(FindServersOnNetworkMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginFindServersOnNetwork(request, null, null); + } + + return this.Channel.EndFindServersOnNetwork(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginFindServersOnNetwork service contract. + /// + public IAsyncResult BeginFindServersOnNetwork(FindServersOnNetworkMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginFindServersOnNetwork(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndFindServersOnNetwork service contract. + /// + public FindServersOnNetworkResponseMessage EndFindServersOnNetwork(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndFindServersOnNetwork(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// The client side implementation of the GetEndpoints service contract. + /// + public GetEndpointsResponseMessage GetEndpoints(GetEndpointsMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginGetEndpoints(request, null, null); + } + + return this.Channel.EndGetEndpoints(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginGetEndpoints service contract. + /// + public IAsyncResult BeginGetEndpoints(GetEndpointsMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginGetEndpoints(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndGetEndpoints service contract. + /// + public GetEndpointsResponseMessage EndGetEndpoints(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndGetEndpoints(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + } + #endregion + + #region RegistrationChannel Class + /// + /// A channel object used by clients to access a UA service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RegistrationChannel : WcfChannelBase, IRegistrationChannel + { + /// + /// Initializes the object with the endpoint address. + /// + internal RegistrationChannel() + { + } + + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// The client side implementation of the RegisterServer service contract. + /// + public RegisterServerResponseMessage RegisterServer(RegisterServerMessage request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginRegisterServer(request, null, null); + } + + return this.Channel.EndRegisterServer(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginRegisterServer service contract. + /// + public IAsyncResult BeginRegisterServer(RegisterServerMessage request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginRegisterServer(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndRegisterServer service contract. + /// + public RegisterServerResponseMessage EndRegisterServer(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndRegisterServer(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// The client side implementation of the RegisterServer2 service contract. + /// + public RegisterServer2ResponseMessage RegisterServer2(RegisterServer2Message request) + { + try + { + IAsyncResult result = null; + + lock (this.Channel) + { + result = this.Channel.BeginRegisterServer2(request, null, null); + } + + return this.Channel.EndRegisterServer2(result); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + + /// + /// The client side implementation of the BeginRegisterServer2 service contract. + /// + public IAsyncResult BeginRegisterServer2(RegisterServer2Message request, AsyncCallback callback, object asyncState) + { + WcfChannelAsyncResult asyncResult = new WcfChannelAsyncResult(Channel, callback, asyncState); + + lock (asyncResult.Lock) + { + asyncResult.InnerResult = asyncResult.Channel.BeginRegisterServer2(request, asyncResult.OnOperationCompleted, null); + } + + return asyncResult; + } + + /// + /// The client side implementation of the EndRegisterServer2 service contract. + /// + public RegisterServer2ResponseMessage EndRegisterServer2(IAsyncResult result) + { + try + { + WcfChannelAsyncResult asyncResult = WcfChannelAsyncResult.WaitForComplete(result); + return asyncResult.Channel.EndRegisterServer2(asyncResult.InnerResult); + } + catch (FaultException e) + { + throw HandleSoapFault(e); + } + } + #endif + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Classes.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Classes.cs new file mode 100644 index 00000000..68b311a5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Classes.cs @@ -0,0 +1,83705 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua +{ + #region ServerObjectState Class + #if (!OPCUA_EXCLUDE_ServerObjectState) + /// + /// Stores an instance of the ServerType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerObjectState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerObjectState(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(Opc.Ua.ObjectTypes.ServerType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (UrisVersion != null) + { + UrisVersion.Initialize(context, UrisVersion_InitializationString); + } + + if (EstimatedReturnTime != null) + { + EstimatedReturnTime.Initialize(context, EstimatedReturnTime_InitializationString); + } + + if (LocalTime != null) + { + LocalTime.Initialize(context, LocalTime_InitializationString); + } + + if (Namespaces != null) + { + Namespaces.Initialize(context, Namespaces_InitializationString); + } + + if (GetMonitoredItems != null) + { + GetMonitoredItems.Initialize(context, GetMonitoredItems_InitializationString); + } + + if (ResendData != null) + { + ResendData.Initialize(context, ResendData_InitializationString); + } + + if (SetSubscriptionDurable != null) + { + SetSubscriptionDurable.Initialize(context, SetSubscriptionDurable_InitializationString); + } + + if (RequestServerStateChange != null) + { + RequestServerStateChange.Initialize(context, RequestServerStateChange_InitializationString); + } + } + + #region Initialization String + private const string UrisVersion_InitializationString = + "//////////8VcIkKAgAAAAAACwAAAFVyaXNWZXJzaW9uAQCbOgAuAESbOgAAAQAGUv////8BAQAAAAAA" + + "QI9A/////wAAAAA="; + + private const string EstimatedReturnTime_InitializationString = + "//////////8VcIkKAgAAAAAAEwAAAEVzdGltYXRlZFJldHVyblRpbWUBAFIyAC4ARFIyAAAADf////8B" + + "AQAAAAAAQI9A/////wAAAAA="; + + private const string LocalTime_InitializationString = + "//////////8VcIkKAgAAAAAACQAAAExvY2FsVGltZQEAzEQALgBEzEQAAAEA0CL/////AQEAAAAAAECP" + + "QP////8AAAAA"; + + private const string Namespaces_InitializationString = + "//////////8EYIAKAQAAAAAACgAAAE5hbWVzcGFjZXMBAActAC8BAH0tBy0AAP////8AAAAA"; + + private const string GetMonitoredItems_InitializationString = + "//////////8EYYIKBAAAAAAAEQAAAEdldE1vbml0b3JlZEl0ZW1zAQDhLAAvAQDhLOEsAAABAf////8C" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA4iwALgBE4iwAAJYBAAAAAQAqAQEdAAAADgAA" + + "AFN1YnNjcmlwdGlvbklkAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAA" + + "AAAPAAAAT3V0cHV0QXJndW1lbnRzAQDjLAAuAETjLAAAlgIAAAABACoBASAAAAANAAAAU2VydmVySGFu" + + "ZGxlcwAHAQAAAAEAAAAAAAAAAAEAKgEBIAAAAA0AAABDbGllbnRIYW5kbGVzAAcBAAAAAQAAAAAAAAAA" + + "AQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string ResendData_InitializationString = + "//////////8EYYIKBAAAAAAACgAAAFJlc2VuZERhdGEBAEcyAC8BAEcyRzIAAAEB/////wEAAAAXYKkK" + + "AgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBIMgAuAERIMgAAlgEAAAABACoBAR0AAAAOAAAAU3Vic2Ny" + + "aXB0aW9uSWQAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string SetSubscriptionDurable_InitializationString = + "//////////8EYYIKBAAAAAAAFgAAAFNldFN1YnNjcmlwdGlvbkR1cmFibGUBAMoxAC8BAMoxyjEAAAEB" + + "/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDLMQAuAETLMQAAlgIAAAABACoBAR0A" + + "AAAOAAAAU3Vic2NyaXB0aW9uSWQAB/////8AAAAAAAEAKgEBHgAAAA8AAABMaWZldGltZUluSG91cnMA" + + "B/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1" + + "bWVudHMBAMwxAC4ARMwxAACWAQAAAAEAKgEBJQAAABYAAABSZXZpc2VkTGlmZXRpbWVJbkhvdXJzAAf/" + + "////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string RequestServerStateChange_InitializationString = + "//////////8EYYIKBAAAAAAAGAAAAFJlcXVlc3RTZXJ2ZXJTdGF0ZUNoYW5nZQEAUzIALwEAUzJTMgAA" + + "AQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAFQyAC4ARFQyAACWBQAAAAEAKgEB" + + "FgAAAAUAAABTdGF0ZQEAVAP/////AAAAAAABACoBASIAAAATAAAARXN0aW1hdGVkUmV0dXJuVGltZQAN" + + "/////wAAAAAAAQAqAQEiAAAAEwAAAFNlY29uZHNUaWxsU2h1dGRvd24AB/////8AAAAAAAEAKgEBFQAA" + + "AAYAAABSZWFzb24AFf////8AAAAAAAEAKgEBFgAAAAcAAABSZXN0YXJ0AAH/////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAEgAAAFNlcnZlclR5cGVJbnN0YW5jZQEA1AcBANQH1AcAAP////8RAAAA" + + "F3CJCgIAAAAAAAsAAABTZXJ2ZXJBcnJheQEA1QcALgBE1QcAAAAMAQAAAAEAAAAAAAAAAQEAAAAAAECP" + + "QP////8AAAAAF3CJCgIAAAAAAA4AAABOYW1lc3BhY2VBcnJheQEA1gcALgBE1gcAAAAMAQAAAAEAAAAA" + + "AAAAAQEAAAAAAECPQP////8AAAAAFXCJCgIAAAAAAAsAAABVcmlzVmVyc2lvbgEAmzoALgBEmzoAAAEA" + + "BlL/////AQEAAAAAAECPQP////8AAAAAFXCJCgIAAAAAAAwAAABTZXJ2ZXJTdGF0dXMBANcHAC8BAFoI" + + "1wcAAAEAXgP/////AQEAAAAAAECPQP////8GAAAAFWCJCgIAAAAAAAkAAABTdGFydFRpbWUBAAIMAC8A" + + "PwIMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAEN1cnJlbnRUaW1lAQADDAAvAD8DDAAA" + + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAUAAABTdGF0ZQEABAwALwA/BAwAAAEAVAP/////AQH/" + + "////AAAAABVgiQoCAAAAAAAJAAAAQnVpbGRJbmZvAQAFDAAvAQDrCwUMAAABAFIB/////wEB/////wYA" + + "AAAVcIkKAgAAAAAACgAAAFByb2R1Y3RVcmkBAAYMAC8APwYMAAAADP////8BAQAAAAAAQI9A/////wAA" + + "AAAVcIkKAgAAAAAAEAAAAE1hbnVmYWN0dXJlck5hbWUBAAcMAC8APwcMAAAADP////8BAQAAAAAAQI9A" + + "/////wAAAAAVcIkKAgAAAAAACwAAAFByb2R1Y3ROYW1lAQAIDAAvAD8IDAAAAAz/////AQEAAAAAAECP" + + "QP////8AAAAAFXCJCgIAAAAAAA8AAABTb2Z0d2FyZVZlcnNpb24BAAkMAC8APwkMAAAADP////8BAQAA" + + "AAAAQI9A/////wAAAAAVcIkKAgAAAAAACwAAAEJ1aWxkTnVtYmVyAQAKDAAvAD8KDAAAAAz/////AQEA" + + "AAAAAECPQP////8AAAAAFXCJCgIAAAAAAAkAAABCdWlsZERhdGUBAAsMAC8APwsMAAABACYB/////wEB" + + "AAAAAABAj0D/////AAAAABVgiQoCAAAAAAATAAAAU2Vjb25kc1RpbGxTaHV0ZG93bgEADAwALwA/DAwA" + + "AAAH/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFNodXRkb3duUmVhc29uAQANDAAvAD8NDAAAABX/" + + "////AQH/////AAAAABVwiQoCAAAAAAAMAAAAU2VydmljZUxldmVsAQDYBwAuAETYBwAAAAP/////AQEA" + + "AAAAAECPQP////8AAAAAFXCJCgIAAAAAAAgAAABBdWRpdGluZwEAtgoALgBEtgoAAAAB/////wEBAAAA" + + "AABAj0D/////AAAAABVwiQoCAAAAAAATAAAARXN0aW1hdGVkUmV0dXJuVGltZQEAUjIALgBEUjIAAAAN" + + "/////wEBAAAAAABAj0D/////AAAAABVwiQoCAAAAAAAJAAAATG9jYWxUaW1lAQDMRAAuAETMRAAAAQDQ" + + "Iv////8BAQAAAAAAQI9A/////wAAAAAEYIAKAQAAAAAAEgAAAFNlcnZlckNhcGFiaWxpdGllcwEA2QcA" + + "LwEA3QfZBwAA/////wkAAAAXYIkKAgAAAAAAEgAAAFNlcnZlclByb2ZpbGVBcnJheQEADgwALgBEDgwA" + + "AAAMAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAANAAAATG9jYWxlSWRBcnJheQEADwwALgBE" + + "DwwAAAEAJwEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABYAAABNaW5TdXBwb3J0ZWRTYW1w" + + "bGVSYXRlAQAQDAAuAEQQDAAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAABsAAABNYXhCcm93c2VD" + + "b250aW51YXRpb25Qb2ludHMBABEMAC4ARBEMAAAABf////8BAf////8AAAAAFWCJCgIAAAAAABoAAABN" + + "YXhRdWVyeUNvbnRpbnVhdGlvblBvaW50cwEAEgwALgBEEgwAAAAF/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAHAAAAE1heEhpc3RvcnlDb250aW51YXRpb25Qb2ludHMBABMMAC4ARBMMAAAABf////8BAf////8A" + + "AAAAF2CJCgIAAAAAABQAAABTb2Z0d2FyZUNlcnRpZmljYXRlcwEAFAwALgBEFAwAAAEAWAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAABGCACgEAAAAAAA4AAABNb2RlbGxpbmdSdWxlcwEAFQwALwA9FQwAAP////8A" + + "AAAABGCACgEAAAAAABIAAABBZ2dyZWdhdGVGdW5jdGlvbnMBABYMAC8APRYMAAD/////AAAAAARggAoB" + + "AAAAAAARAAAAU2VydmVyRGlhZ25vc3RpY3MBANoHAC8BAOQH2gcAAP////8EAAAAFWCJCgIAAAAAABgA" + + "AABTZXJ2ZXJEaWFnbm9zdGljc1N1bW1hcnkBABcMAC8BAGYIFwwAAAEAWwP/////AQH/////DAAAABVg" + + "iQoCAAAAAAAPAAAAU2VydmVyVmlld0NvdW50AQAYDAAvAD8YDAAAAAf/////AQH/////AAAAABVgiQoC" + + "AAAAAAATAAAAQ3VycmVudFNlc3Npb25Db3VudAEAGQwALwA/GQwAAAAH/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAFQAAAEN1bXVsYXRlZFNlc3Npb25Db3VudAEAGgwALwA/GgwAAAAH/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAHAAAAFNlY3VyaXR5UmVqZWN0ZWRTZXNzaW9uQ291bnQBABsMAC8APxsMAAAAB/////8B" + + "Af////8AAAAAFWCJCgIAAAAAABQAAABSZWplY3RlZFNlc3Npb25Db3VudAEAHAwALwA/HAwAAAAH////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFNlc3Npb25UaW1lb3V0Q291bnQBAB0MAC8APx0MAAAAB///" + + "//8BAf////8AAAAAFWCJCgIAAAAAABEAAABTZXNzaW9uQWJvcnRDb3VudAEAHgwALwA/HgwAAAAH////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAFwAAAFB1Ymxpc2hpbmdJbnRlcnZhbENvdW50AQAgDAAvAD8gDAAA" + + "AAf/////AQH/////AAAAABVgiQoCAAAAAAAYAAAAQ3VycmVudFN1YnNjcmlwdGlvbkNvdW50AQAhDAAv" + + "AD8hDAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAaAAAAQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291" + + "bnQBACIMAC8APyIMAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAAB0AAABTZWN1cml0eVJlamVjdGVk" + + "UmVxdWVzdHNDb3VudAEAIwwALwA/IwwAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFJlamVj" + + "dGVkUmVxdWVzdHNDb3VudAEAJAwALwA/JAwAAAAH/////wEB/////wAAAAAXYIkKAgAAAAAAHAAAAFN1" + + "YnNjcmlwdGlvbkRpYWdub3N0aWNzQXJyYXkBACYMAC8BAHsIJgwAAAEAagMBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGCACgEAAAAAABoAAABTZXNzaW9uc0RpYWdub3N0aWNzU3VtbWFyeQEAJwwALwEA6gcnDAAA" + + "/////wIAAAAXYIkKAgAAAAAAFwAAAFNlc3Npb25EaWFnbm9zdGljc0FycmF5AQAoDAAvAQCUCCgMAAAB" + + "AGEDAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAfAAAAU2Vzc2lvblNlY3VyaXR5RGlhZ25v" + + "c3RpY3NBcnJheQEAKQwALwEAwwgpDAAAAQBkAwEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAA" + + "CwAAAEVuYWJsZWRGbGFnAQAqDAAuAEQqDAAAAAH/////AwP/////AAAAAARggAoBAAAAAAAQAAAAVmVu" + + "ZG9yU2VydmVySW5mbwEA2wcALwEA8QfbBwAA/////wAAAAAEYIAKAQAAAAAAEAAAAFNlcnZlclJlZHVu" + + "ZGFuY3kBANwHAC8BAPIH3AcAAP////8BAAAAFWCJCgIAAAAAABEAAABSZWR1bmRhbmN5U3VwcG9ydAEA" + + "KwwALgBEKwwAAAEAUwP/////AQH/////AAAAAARggAoBAAAAAAAKAAAATmFtZXNwYWNlcwEABy0ALwEA" + + "fS0HLQAA/////wAAAAAEYYIKBAAAAAAAEQAAAEdldE1vbml0b3JlZEl0ZW1zAQDhLAAvAQDhLOEsAAAB" + + "Af////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA4iwALgBE4iwAAJYBAAAAAQAqAQEd" + + "AAAADgAAAFN1YnNjcmlwdGlvbklkAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdg" + + "qQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQDjLAAuAETjLAAAlgIAAAABACoBASAAAAANAAAAU2Vy" + + "dmVySGFuZGxlcwAHAQAAAAEAAAAAAAAAAAEAKgEBIAAAAA0AAABDbGllbnRIYW5kbGVzAAcBAAAAAQAA" + + "AAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACgAAAFJlc2VuZERhdGEBAEcy" + + "AC8BAEcyRzIAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBIMgAuAERIMgAA" + + "lgEAAAABACoBAR0AAAAOAAAAU3Vic2NyaXB0aW9uSWQAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAABGGCCgQAAAAAABYAAABTZXRTdWJzY3JpcHRpb25EdXJhYmxlAQDKMQAvAQDKMcoxAAAB" + + "Af////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAyzEALgBEyzEAAJYCAAAAAQAqAQEd" + + "AAAADgAAAFN1YnNjcmlwdGlvbklkAAf/////AAAAAAABACoBAR4AAAAPAAAATGlmZXRpbWVJbkhvdXJz" + + "AAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJn" + + "dW1lbnRzAQDMMQAuAETMMQAAlgEAAAABACoBASUAAAAWAAAAUmV2aXNlZExpZmV0aW1lSW5Ib3VycwAH" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAAGAAAAFJlcXVlc3RTZXJ2" + + "ZXJTdGF0ZUNoYW5nZQEAUzIALwEAUzJTMgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1" + + "bWVudHMBAFQyAC4ARFQyAACWBQAAAAEAKgEBFgAAAAUAAABTdGF0ZQEAVAP/////AAAAAAABACoBASIA" + + "AAATAAAARXN0aW1hdGVkUmV0dXJuVGltZQAN/////wAAAAAAAQAqAQEiAAAAEwAAAFNlY29uZHNUaWxs" + + "U2h1dGRvd24AB/////8AAAAAAAEAKgEBFQAAAAYAAABSZWFzb24AFf////8AAAAAAAEAKgEBFgAAAAcA" + + "AABSZXN0YXJ0AAH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ServerArray + { + get + { + return m_serverArray; + } + + set + { + if (!Object.ReferenceEquals(m_serverArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverArray = value; + } + } + + /// + public PropertyState NamespaceArray + { + get + { + return m_namespaceArray; + } + + set + { + if (!Object.ReferenceEquals(m_namespaceArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_namespaceArray = value; + } + } + + /// + public PropertyState UrisVersion + { + get + { + return m_urisVersion; + } + + set + { + if (!Object.ReferenceEquals(m_urisVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_urisVersion = value; + } + } + + /// + public ServerStatusState ServerStatus + { + get + { + return m_serverStatus; + } + + set + { + if (!Object.ReferenceEquals(m_serverStatus, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverStatus = value; + } + } + + /// + public PropertyState ServiceLevel + { + get + { + return m_serviceLevel; + } + + set + { + if (!Object.ReferenceEquals(m_serviceLevel, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serviceLevel = value; + } + } + + /// + public PropertyState Auditing + { + get + { + return m_auditing; + } + + set + { + if (!Object.ReferenceEquals(m_auditing, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_auditing = value; + } + } + + /// + public PropertyState EstimatedReturnTime + { + get + { + return m_estimatedReturnTime; + } + + set + { + if (!Object.ReferenceEquals(m_estimatedReturnTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_estimatedReturnTime = value; + } + } + + /// + public PropertyState LocalTime + { + get + { + return m_localTime; + } + + set + { + if (!Object.ReferenceEquals(m_localTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_localTime = value; + } + } + + /// + public ServerCapabilitiesState ServerCapabilities + { + get + { + return m_serverCapabilities; + } + + set + { + if (!Object.ReferenceEquals(m_serverCapabilities, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverCapabilities = value; + } + } + + /// + public ServerDiagnosticsState ServerDiagnostics + { + get + { + return m_serverDiagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_serverDiagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverDiagnostics = value; + } + } + + /// + public VendorServerInfoState VendorServerInfo + { + get + { + return m_vendorServerInfo; + } + + set + { + if (!Object.ReferenceEquals(m_vendorServerInfo, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_vendorServerInfo = value; + } + } + + /// + public ServerRedundancyState ServerRedundancy + { + get + { + return m_serverRedundancy; + } + + set + { + if (!Object.ReferenceEquals(m_serverRedundancy, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverRedundancy = value; + } + } + + /// + public NamespacesState Namespaces + { + get + { + return m_namespaces; + } + + set + { + if (!Object.ReferenceEquals(m_namespaces, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_namespaces = value; + } + } + + /// + public GetMonitoredItemsMethodState GetMonitoredItems + { + get + { + return m_getMonitoredItemsMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getMonitoredItemsMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getMonitoredItemsMethod = value; + } + } + + /// + public ResendDataMethodState ResendData + { + get + { + return m_resendDataMethod; + } + + set + { + if (!Object.ReferenceEquals(m_resendDataMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resendDataMethod = value; + } + } + + /// + public SetSubscriptionDurableMethodState SetSubscriptionDurable + { + get + { + return m_setSubscriptionDurableMethod; + } + + set + { + if (!Object.ReferenceEquals(m_setSubscriptionDurableMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setSubscriptionDurableMethod = value; + } + } + + /// + public RequestServerStateChangeMethodState RequestServerStateChange + { + get + { + return m_requestServerStateChangeMethod; + } + + set + { + if (!Object.ReferenceEquals(m_requestServerStateChangeMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestServerStateChangeMethod = 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_serverArray != null) + { + children.Add(m_serverArray); + } + + if (m_namespaceArray != null) + { + children.Add(m_namespaceArray); + } + + if (m_urisVersion != null) + { + children.Add(m_urisVersion); + } + + if (m_serverStatus != null) + { + children.Add(m_serverStatus); + } + + if (m_serviceLevel != null) + { + children.Add(m_serviceLevel); + } + + if (m_auditing != null) + { + children.Add(m_auditing); + } + + if (m_estimatedReturnTime != null) + { + children.Add(m_estimatedReturnTime); + } + + if (m_localTime != null) + { + children.Add(m_localTime); + } + + if (m_serverCapabilities != null) + { + children.Add(m_serverCapabilities); + } + + if (m_serverDiagnostics != null) + { + children.Add(m_serverDiagnostics); + } + + if (m_vendorServerInfo != null) + { + children.Add(m_vendorServerInfo); + } + + if (m_serverRedundancy != null) + { + children.Add(m_serverRedundancy); + } + + if (m_namespaces != null) + { + children.Add(m_namespaces); + } + + if (m_getMonitoredItemsMethod != null) + { + children.Add(m_getMonitoredItemsMethod); + } + + if (m_resendDataMethod != null) + { + children.Add(m_resendDataMethod); + } + + if (m_setSubscriptionDurableMethod != null) + { + children.Add(m_setSubscriptionDurableMethod); + } + + if (m_requestServerStateChangeMethod != null) + { + children.Add(m_requestServerStateChangeMethod); + } + + 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 Opc.Ua.BrowseNames.ServerArray: + { + if (createOrReplace) + { + if (ServerArray == null) + { + if (replacement == null) + { + ServerArray = new PropertyState(this); + } + else + { + ServerArray = (PropertyState)replacement; + } + } + } + + instance = ServerArray; + break; + } + + case Opc.Ua.BrowseNames.NamespaceArray: + { + if (createOrReplace) + { + if (NamespaceArray == null) + { + if (replacement == null) + { + NamespaceArray = new PropertyState(this); + } + else + { + NamespaceArray = (PropertyState)replacement; + } + } + } + + instance = NamespaceArray; + break; + } + + case Opc.Ua.BrowseNames.UrisVersion: + { + if (createOrReplace) + { + if (UrisVersion == null) + { + if (replacement == null) + { + UrisVersion = new PropertyState(this); + } + else + { + UrisVersion = (PropertyState)replacement; + } + } + } + + instance = UrisVersion; + break; + } + + case Opc.Ua.BrowseNames.ServerStatus: + { + if (createOrReplace) + { + if (ServerStatus == null) + { + if (replacement == null) + { + ServerStatus = new ServerStatusState(this); + } + else + { + ServerStatus = (ServerStatusState)replacement; + } + } + } + + instance = ServerStatus; + break; + } + + case Opc.Ua.BrowseNames.ServiceLevel: + { + if (createOrReplace) + { + if (ServiceLevel == null) + { + if (replacement == null) + { + ServiceLevel = new PropertyState(this); + } + else + { + ServiceLevel = (PropertyState)replacement; + } + } + } + + instance = ServiceLevel; + break; + } + + case Opc.Ua.BrowseNames.Auditing: + { + if (createOrReplace) + { + if (Auditing == null) + { + if (replacement == null) + { + Auditing = new PropertyState(this); + } + else + { + Auditing = (PropertyState)replacement; + } + } + } + + instance = Auditing; + break; + } + + case Opc.Ua.BrowseNames.EstimatedReturnTime: + { + if (createOrReplace) + { + if (EstimatedReturnTime == null) + { + if (replacement == null) + { + EstimatedReturnTime = new PropertyState(this); + } + else + { + EstimatedReturnTime = (PropertyState)replacement; + } + } + } + + instance = EstimatedReturnTime; + break; + } + + case Opc.Ua.BrowseNames.LocalTime: + { + if (createOrReplace) + { + if (LocalTime == null) + { + if (replacement == null) + { + LocalTime = new PropertyState(this); + } + else + { + LocalTime = (PropertyState)replacement; + } + } + } + + instance = LocalTime; + break; + } + + case Opc.Ua.BrowseNames.ServerCapabilities: + { + if (createOrReplace) + { + if (ServerCapabilities == null) + { + if (replacement == null) + { + ServerCapabilities = new ServerCapabilitiesState(this); + } + else + { + ServerCapabilities = (ServerCapabilitiesState)replacement; + } + } + } + + instance = ServerCapabilities; + break; + } + + case Opc.Ua.BrowseNames.ServerDiagnostics: + { + if (createOrReplace) + { + if (ServerDiagnostics == null) + { + if (replacement == null) + { + ServerDiagnostics = new ServerDiagnosticsState(this); + } + else + { + ServerDiagnostics = (ServerDiagnosticsState)replacement; + } + } + } + + instance = ServerDiagnostics; + break; + } + + case Opc.Ua.BrowseNames.VendorServerInfo: + { + if (createOrReplace) + { + if (VendorServerInfo == null) + { + if (replacement == null) + { + VendorServerInfo = new VendorServerInfoState(this); + } + else + { + VendorServerInfo = (VendorServerInfoState)replacement; + } + } + } + + instance = VendorServerInfo; + break; + } + + case Opc.Ua.BrowseNames.ServerRedundancy: + { + if (createOrReplace) + { + if (ServerRedundancy == null) + { + if (replacement == null) + { + ServerRedundancy = new ServerRedundancyState(this); + } + else + { + ServerRedundancy = (ServerRedundancyState)replacement; + } + } + } + + instance = ServerRedundancy; + break; + } + + case Opc.Ua.BrowseNames.Namespaces: + { + if (createOrReplace) + { + if (Namespaces == null) + { + if (replacement == null) + { + Namespaces = new NamespacesState(this); + } + else + { + Namespaces = (NamespacesState)replacement; + } + } + } + + instance = Namespaces; + break; + } + + case Opc.Ua.BrowseNames.GetMonitoredItems: + { + if (createOrReplace) + { + if (GetMonitoredItems == null) + { + if (replacement == null) + { + GetMonitoredItems = new GetMonitoredItemsMethodState(this); + } + else + { + GetMonitoredItems = (GetMonitoredItemsMethodState)replacement; + } + } + } + + instance = GetMonitoredItems; + break; + } + + case Opc.Ua.BrowseNames.ResendData: + { + if (createOrReplace) + { + if (ResendData == null) + { + if (replacement == null) + { + ResendData = new ResendDataMethodState(this); + } + else + { + ResendData = (ResendDataMethodState)replacement; + } + } + } + + instance = ResendData; + break; + } + + case Opc.Ua.BrowseNames.SetSubscriptionDurable: + { + if (createOrReplace) + { + if (SetSubscriptionDurable == null) + { + if (replacement == null) + { + SetSubscriptionDurable = new SetSubscriptionDurableMethodState(this); + } + else + { + SetSubscriptionDurable = (SetSubscriptionDurableMethodState)replacement; + } + } + } + + instance = SetSubscriptionDurable; + break; + } + + case Opc.Ua.BrowseNames.RequestServerStateChange: + { + if (createOrReplace) + { + if (RequestServerStateChange == null) + { + if (replacement == null) + { + RequestServerStateChange = new RequestServerStateChangeMethodState(this); + } + else + { + RequestServerStateChange = (RequestServerStateChangeMethodState)replacement; + } + } + } + + instance = RequestServerStateChange; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_serverArray; + private PropertyState m_namespaceArray; + private PropertyState m_urisVersion; + private ServerStatusState m_serverStatus; + private PropertyState m_serviceLevel; + private PropertyState m_auditing; + private PropertyState m_estimatedReturnTime; + private PropertyState m_localTime; + private ServerCapabilitiesState m_serverCapabilities; + private ServerDiagnosticsState m_serverDiagnostics; + private VendorServerInfoState m_vendorServerInfo; + private ServerRedundancyState m_serverRedundancy; + private NamespacesState m_namespaces; + private GetMonitoredItemsMethodState m_getMonitoredItemsMethod; + private ResendDataMethodState m_resendDataMethod; + private SetSubscriptionDurableMethodState m_setSubscriptionDurableMethod; + private RequestServerStateChangeMethodState m_requestServerStateChangeMethod; + #endregion + } + #endif + #endregion + + #region ServerCapabilitiesState Class + #if (!OPCUA_EXCLUDE_ServerCapabilitiesState) + /// + /// Stores an instance of the ServerCapabilitiesType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerCapabilitiesState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerCapabilitiesState(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(Opc.Ua.ObjectTypes.ServerCapabilitiesType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (MaxArrayLength != null) + { + MaxArrayLength.Initialize(context, MaxArrayLength_InitializationString); + } + + if (MaxStringLength != null) + { + MaxStringLength.Initialize(context, MaxStringLength_InitializationString); + } + + if (MaxByteStringLength != null) + { + MaxByteStringLength.Initialize(context, MaxByteStringLength_InitializationString); + } + + if (OperationLimits != null) + { + OperationLimits.Initialize(context, OperationLimits_InitializationString); + } + + if (RoleSet != null) + { + RoleSet.Initialize(context, RoleSet_InitializationString); + } + } + + #region Initialization String + private const string MaxArrayLength_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAE1heEFycmF5TGVuZ3RoAQAdLQAuAEQdLQAAAAf/////AQH/////" + + "AAAAAA=="; + + private const string MaxStringLength_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAE1heFN0cmluZ0xlbmd0aAEAHi0ALgBEHi0AAAAH/////wEB////" + + "/wAAAAA="; + + private const string MaxByteStringLength_InitializationString = + "//////////8VYIkKAgAAAAAAEwAAAE1heEJ5dGVTdHJpbmdMZW5ndGgBAG4yAC4ARG4yAAAAB/////8B" + + "Af////8AAAAA"; + + private const string OperationLimits_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAE9wZXJhdGlvbkxpbWl0cwEAHy0ALwEALC0fLQAA/////wAAAAA="; + + private const string RoleSet_InitializationString = + "//////////8EYIAKAQAAAAAABwAAAFJvbGVTZXQBAKc/AC8BAPc8pz8AAP////8CAAAABGGCCgQAAAAA" + + "AAcAAABBZGRSb2xlAQCoPwAvAQB9Pqg/AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3Vt" + + "ZW50cwEAqT8ALgBEqT8AAJYCAAAAAQAqAQEXAAAACAAAAFJvbGVOYW1lAAz/////AAAAAAABACoBARsA" + + "AAAMAAAATmFtZXNwYWNlVXJpAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoC" + + "AAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCqPwAuAESqPwAAlgEAAAABACoBARkAAAAKAAAAUm9sZU5v" + + "ZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACgAAAFJlbW92" + + "ZVJvbGUBAKs/AC8BAIA+qz8AAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCs" + + "PwAuAESsPwAAlgEAAAABACoBARkAAAAKAAAAUm9sZU5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHgAAAFNlcnZlckNhcGFiaWxpdGllc1R5cGVJbnN0YW5jZQEA3QcBAN0H" + + "3QcAAP////8OAAAAF2CJCgIAAAAAABIAAABTZXJ2ZXJQcm9maWxlQXJyYXkBAN4HAC4ARN4HAAAADAEA" + + "AAABAAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAADQAAAExvY2FsZUlkQXJyYXkBAOAHAC4AROAHAAAB" + + "ACcBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAWAAAATWluU3VwcG9ydGVkU2FtcGxlUmF0" + + "ZQEA4QcALgBE4QcAAAEAIgH/////AQH/////AAAAABVgiQoCAAAAAAAbAAAATWF4QnJvd3NlQ29udGlu" + + "dWF0aW9uUG9pbnRzAQCsCgAuAESsCgAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAaAAAATWF4UXVl" + + "cnlDb250aW51YXRpb25Qb2ludHMBAK0KAC4ARK0KAAAABf////8BAf////8AAAAAFWCJCgIAAAAAABwA" + + "AABNYXhIaXN0b3J5Q29udGludWF0aW9uUG9pbnRzAQCuCgAuAESuCgAAAAX/////AQH/////AAAAABdg" + + "iQoCAAAAAAAUAAAAU29mdHdhcmVDZXJ0aWZpY2F0ZXMBAOkLAC4AROkLAAABAFgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAABVgiQoCAAAAAAAOAAAATWF4QXJyYXlMZW5ndGgBAB0tAC4ARB0tAAAAB/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABNYXhTdHJpbmdMZW5ndGgBAB4tAC4ARB4tAAAAB/////8BAf////8A" + + "AAAAFWCJCgIAAAAAABMAAABNYXhCeXRlU3RyaW5nTGVuZ3RoAQBuMgAuAERuMgAAAAf/////AQH/////" + + "AAAAAARggAoBAAAAAAAPAAAAT3BlcmF0aW9uTGltaXRzAQAfLQAvAQAsLR8tAAD/////AAAAAARggAoB" + + "AAAAAAAOAAAATW9kZWxsaW5nUnVsZXMBAOMHAC8APeMHAAD/////AAAAAARggAoBAAAAAAASAAAAQWdn" + + "cmVnYXRlRnVuY3Rpb25zAQDCCgAvAD3CCgAA/////wAAAAAEYIAKAQAAAAAABwAAAFJvbGVTZXQBAKc/" + + "AC8BAPc8pz8AAP////8CAAAABGGCCgQAAAAAAAcAAABBZGRSb2xlAQCoPwAvAQB9Pqg/AAABAf////8C" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAqT8ALgBEqT8AAJYCAAAAAQAqAQEXAAAACAAA" + + "AFJvbGVOYW1lAAz/////AAAAAAABACoBARsAAAAMAAAATmFtZXNwYWNlVXJpAAz/////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCqPwAuAESq" + + "PwAAlgEAAAABACoBARkAAAAKAAAAUm9sZU5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAAEYYIKBAAAAAAACgAAAFJlbW92ZVJvbGUBAKs/AC8BAIA+qz8AAAEB/////wEAAAAXYKkK" + + "AgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCsPwAuAESsPwAAlgEAAAABACoBARkAAAAKAAAAUm9sZU5v" + + "ZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ServerProfileArray + { + get + { + return m_serverProfileArray; + } + + set + { + if (!Object.ReferenceEquals(m_serverProfileArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverProfileArray = value; + } + } + + /// + public PropertyState LocaleIdArray + { + get + { + return m_localeIdArray; + } + + set + { + if (!Object.ReferenceEquals(m_localeIdArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_localeIdArray = value; + } + } + + /// + public PropertyState MinSupportedSampleRate + { + get + { + return m_minSupportedSampleRate; + } + + set + { + if (!Object.ReferenceEquals(m_minSupportedSampleRate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_minSupportedSampleRate = value; + } + } + + /// + public PropertyState MaxBrowseContinuationPoints + { + get + { + return m_maxBrowseContinuationPoints; + } + + set + { + if (!Object.ReferenceEquals(m_maxBrowseContinuationPoints, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxBrowseContinuationPoints = value; + } + } + + /// + public PropertyState MaxQueryContinuationPoints + { + get + { + return m_maxQueryContinuationPoints; + } + + set + { + if (!Object.ReferenceEquals(m_maxQueryContinuationPoints, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxQueryContinuationPoints = value; + } + } + + /// + public PropertyState MaxHistoryContinuationPoints + { + get + { + return m_maxHistoryContinuationPoints; + } + + set + { + if (!Object.ReferenceEquals(m_maxHistoryContinuationPoints, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxHistoryContinuationPoints = value; + } + } + + /// + public PropertyState SoftwareCertificates + { + get + { + return m_softwareCertificates; + } + + set + { + if (!Object.ReferenceEquals(m_softwareCertificates, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_softwareCertificates = value; + } + } + + /// + public PropertyState MaxArrayLength + { + get + { + return m_maxArrayLength; + } + + set + { + if (!Object.ReferenceEquals(m_maxArrayLength, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxArrayLength = value; + } + } + + /// + public PropertyState MaxStringLength + { + get + { + return m_maxStringLength; + } + + set + { + if (!Object.ReferenceEquals(m_maxStringLength, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxStringLength = value; + } + } + + /// + public PropertyState MaxByteStringLength + { + get + { + return m_maxByteStringLength; + } + + set + { + if (!Object.ReferenceEquals(m_maxByteStringLength, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxByteStringLength = value; + } + } + + /// + public OperationLimitsState OperationLimits + { + get + { + return m_operationLimits; + } + + set + { + if (!Object.ReferenceEquals(m_operationLimits, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_operationLimits = value; + } + } + + /// + public FolderState ModellingRules + { + get + { + return m_modellingRules; + } + + set + { + if (!Object.ReferenceEquals(m_modellingRules, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_modellingRules = value; + } + } + + /// + public FolderState AggregateFunctions + { + get + { + return m_aggregateFunctions; + } + + set + { + if (!Object.ReferenceEquals(m_aggregateFunctions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_aggregateFunctions = value; + } + } + + /// + public RoleSetState RoleSet + { + get + { + return m_roleSet; + } + + set + { + if (!Object.ReferenceEquals(m_roleSet, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_roleSet = 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_serverProfileArray != null) + { + children.Add(m_serverProfileArray); + } + + if (m_localeIdArray != null) + { + children.Add(m_localeIdArray); + } + + if (m_minSupportedSampleRate != null) + { + children.Add(m_minSupportedSampleRate); + } + + if (m_maxBrowseContinuationPoints != null) + { + children.Add(m_maxBrowseContinuationPoints); + } + + if (m_maxQueryContinuationPoints != null) + { + children.Add(m_maxQueryContinuationPoints); + } + + if (m_maxHistoryContinuationPoints != null) + { + children.Add(m_maxHistoryContinuationPoints); + } + + if (m_softwareCertificates != null) + { + children.Add(m_softwareCertificates); + } + + if (m_maxArrayLength != null) + { + children.Add(m_maxArrayLength); + } + + if (m_maxStringLength != null) + { + children.Add(m_maxStringLength); + } + + if (m_maxByteStringLength != null) + { + children.Add(m_maxByteStringLength); + } + + if (m_operationLimits != null) + { + children.Add(m_operationLimits); + } + + if (m_modellingRules != null) + { + children.Add(m_modellingRules); + } + + if (m_aggregateFunctions != null) + { + children.Add(m_aggregateFunctions); + } + + if (m_roleSet != null) + { + children.Add(m_roleSet); + } + + 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 Opc.Ua.BrowseNames.ServerProfileArray: + { + if (createOrReplace) + { + if (ServerProfileArray == null) + { + if (replacement == null) + { + ServerProfileArray = new PropertyState(this); + } + else + { + ServerProfileArray = (PropertyState)replacement; + } + } + } + + instance = ServerProfileArray; + break; + } + + case Opc.Ua.BrowseNames.LocaleIdArray: + { + if (createOrReplace) + { + if (LocaleIdArray == null) + { + if (replacement == null) + { + LocaleIdArray = new PropertyState(this); + } + else + { + LocaleIdArray = (PropertyState)replacement; + } + } + } + + instance = LocaleIdArray; + break; + } + + case Opc.Ua.BrowseNames.MinSupportedSampleRate: + { + if (createOrReplace) + { + if (MinSupportedSampleRate == null) + { + if (replacement == null) + { + MinSupportedSampleRate = new PropertyState(this); + } + else + { + MinSupportedSampleRate = (PropertyState)replacement; + } + } + } + + instance = MinSupportedSampleRate; + break; + } + + case Opc.Ua.BrowseNames.MaxBrowseContinuationPoints: + { + if (createOrReplace) + { + if (MaxBrowseContinuationPoints == null) + { + if (replacement == null) + { + MaxBrowseContinuationPoints = new PropertyState(this); + } + else + { + MaxBrowseContinuationPoints = (PropertyState)replacement; + } + } + } + + instance = MaxBrowseContinuationPoints; + break; + } + + case Opc.Ua.BrowseNames.MaxQueryContinuationPoints: + { + if (createOrReplace) + { + if (MaxQueryContinuationPoints == null) + { + if (replacement == null) + { + MaxQueryContinuationPoints = new PropertyState(this); + } + else + { + MaxQueryContinuationPoints = (PropertyState)replacement; + } + } + } + + instance = MaxQueryContinuationPoints; + break; + } + + case Opc.Ua.BrowseNames.MaxHistoryContinuationPoints: + { + if (createOrReplace) + { + if (MaxHistoryContinuationPoints == null) + { + if (replacement == null) + { + MaxHistoryContinuationPoints = new PropertyState(this); + } + else + { + MaxHistoryContinuationPoints = (PropertyState)replacement; + } + } + } + + instance = MaxHistoryContinuationPoints; + break; + } + + case Opc.Ua.BrowseNames.SoftwareCertificates: + { + if (createOrReplace) + { + if (SoftwareCertificates == null) + { + if (replacement == null) + { + SoftwareCertificates = new PropertyState(this); + } + else + { + SoftwareCertificates = (PropertyState)replacement; + } + } + } + + instance = SoftwareCertificates; + break; + } + + case Opc.Ua.BrowseNames.MaxArrayLength: + { + if (createOrReplace) + { + if (MaxArrayLength == null) + { + if (replacement == null) + { + MaxArrayLength = new PropertyState(this); + } + else + { + MaxArrayLength = (PropertyState)replacement; + } + } + } + + instance = MaxArrayLength; + break; + } + + case Opc.Ua.BrowseNames.MaxStringLength: + { + if (createOrReplace) + { + if (MaxStringLength == null) + { + if (replacement == null) + { + MaxStringLength = new PropertyState(this); + } + else + { + MaxStringLength = (PropertyState)replacement; + } + } + } + + instance = MaxStringLength; + break; + } + + case Opc.Ua.BrowseNames.MaxByteStringLength: + { + if (createOrReplace) + { + if (MaxByteStringLength == null) + { + if (replacement == null) + { + MaxByteStringLength = new PropertyState(this); + } + else + { + MaxByteStringLength = (PropertyState)replacement; + } + } + } + + instance = MaxByteStringLength; + break; + } + + case Opc.Ua.BrowseNames.OperationLimits: + { + if (createOrReplace) + { + if (OperationLimits == null) + { + if (replacement == null) + { + OperationLimits = new OperationLimitsState(this); + } + else + { + OperationLimits = (OperationLimitsState)replacement; + } + } + } + + instance = OperationLimits; + break; + } + + case Opc.Ua.BrowseNames.ModellingRules: + { + if (createOrReplace) + { + if (ModellingRules == null) + { + if (replacement == null) + { + ModellingRules = new FolderState(this); + } + else + { + ModellingRules = (FolderState)replacement; + } + } + } + + instance = ModellingRules; + break; + } + + case Opc.Ua.BrowseNames.AggregateFunctions: + { + if (createOrReplace) + { + if (AggregateFunctions == null) + { + if (replacement == null) + { + AggregateFunctions = new FolderState(this); + } + else + { + AggregateFunctions = (FolderState)replacement; + } + } + } + + instance = AggregateFunctions; + break; + } + + case Opc.Ua.BrowseNames.RoleSet: + { + if (createOrReplace) + { + if (RoleSet == null) + { + if (replacement == null) + { + RoleSet = new RoleSetState(this); + } + else + { + RoleSet = (RoleSetState)replacement; + } + } + } + + instance = RoleSet; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_serverProfileArray; + private PropertyState m_localeIdArray; + private PropertyState m_minSupportedSampleRate; + private PropertyState m_maxBrowseContinuationPoints; + private PropertyState m_maxQueryContinuationPoints; + private PropertyState m_maxHistoryContinuationPoints; + private PropertyState m_softwareCertificates; + private PropertyState m_maxArrayLength; + private PropertyState m_maxStringLength; + private PropertyState m_maxByteStringLength; + private OperationLimitsState m_operationLimits; + private FolderState m_modellingRules; + private FolderState m_aggregateFunctions; + private RoleSetState m_roleSet; + #endregion + } + #endif + #endregion + + #region ServerDiagnosticsState Class + #if (!OPCUA_EXCLUDE_ServerDiagnosticsState) + /// + /// Stores an instance of the ServerDiagnosticsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerDiagnosticsState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerDiagnosticsState(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(Opc.Ua.ObjectTypes.ServerDiagnosticsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SamplingIntervalDiagnosticsArray != null) + { + SamplingIntervalDiagnosticsArray.Initialize(context, SamplingIntervalDiagnosticsArray_InitializationString); + } + } + + #region Initialization String + private const string SamplingIntervalDiagnosticsArray_InitializationString = + "//////////8XYIkKAgAAAAAAIAAAAFNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0FycmF5AQDmBwAv" + + "AQB0COYHAAABAFgDAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHQAAAFNlcnZlckRpYWdub3N0aWNzVHlwZUluc3RhbmNlAQDkBwEA5Afk" + + "BwAA/////wUAAAAVYIkKAgAAAAAAGAAAAFNlcnZlckRpYWdub3N0aWNzU3VtbWFyeQEA5QcALwEAZgjl" + + "BwAAAQBbA/////8BAf////8MAAAAFWCJCgIAAAAAAA8AAABTZXJ2ZXJWaWV3Q291bnQBACwMAC8APywM" + + "AAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABMAAABDdXJyZW50U2Vzc2lvbkNvdW50AQAtDAAvAD8t" + + "DAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAVAAAAQ3VtdWxhdGVkU2Vzc2lvbkNvdW50AQAuDAAv" + + "AD8uDAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAcAAAAU2VjdXJpdHlSZWplY3RlZFNlc3Npb25D" + + "b3VudAEALwwALwA/LwwAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAFAAAAFJlamVjdGVkU2Vzc2lv" + + "bkNvdW50AQAwDAAvAD8wDAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAATAAAAU2Vzc2lvblRpbWVv" + + "dXRDb3VudAEAMQwALwA/MQwAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAFNlc3Npb25BYm9y" + + "dENvdW50AQAyDAAvAD8yDAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAXAAAAUHVibGlzaGluZ0lu" + + "dGVydmFsQ291bnQBADQMAC8APzQMAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABgAAABDdXJyZW50" + + "U3Vic2NyaXB0aW9uQ291bnQBADUMAC8APzUMAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABoAAABD" + + "dW11bGF0ZWRTdWJzY3JpcHRpb25Db3VudAEANgwALwA/NgwAAAAH/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAHQAAAFNlY3VyaXR5UmVqZWN0ZWRSZXF1ZXN0c0NvdW50AQA3DAAvAD83DAAAAAf/////AQH/////" + + "AAAAABVgiQoCAAAAAAAVAAAAUmVqZWN0ZWRSZXF1ZXN0c0NvdW50AQA4DAAvAD84DAAAAAf/////AQH/" + + "////AAAAABdgiQoCAAAAAAAgAAAAU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNzQXJyYXkBAOYHAC8B" + + "AHQI5gcAAAEAWAMBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAABwAAABTdWJzY3JpcHRpb25E" + + "aWFnbm9zdGljc0FycmF5AQDnBwAvAQB7COcHAAABAGoDAQAAAAEAAAAAAAAAAQH/////AAAAAARggAoB" + + "AAAAAAAaAAAAU2Vzc2lvbnNEaWFnbm9zdGljc1N1bW1hcnkBALgKAC8BAOoHuAoAAP////8CAAAAF2CJ" + + "CgIAAAAAABcAAABTZXNzaW9uRGlhZ25vc3RpY3NBcnJheQEAOQwALwEAlAg5DAAAAQBhAwEAAAABAAAA" + + "AAAAAAEB/////wAAAAAXYIkKAgAAAAAAHwAAAFNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzQXJyYXkB" + + "ADoMAC8BAMMIOgwAAAEAZAMBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABFbmFibGVk" + + "RmxhZwEA6QcALgBE6QcAAAAB/////wMD/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public ServerDiagnosticsSummaryState ServerDiagnosticsSummary + { + get + { + return m_serverDiagnosticsSummary; + } + + set + { + if (!Object.ReferenceEquals(m_serverDiagnosticsSummary, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverDiagnosticsSummary = value; + } + } + + /// + public SamplingIntervalDiagnosticsArrayState SamplingIntervalDiagnosticsArray + { + get + { + return m_samplingIntervalDiagnosticsArray; + } + + set + { + if (!Object.ReferenceEquals(m_samplingIntervalDiagnosticsArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_samplingIntervalDiagnosticsArray = value; + } + } + + /// + public SubscriptionDiagnosticsArrayState SubscriptionDiagnosticsArray + { + get + { + return m_subscriptionDiagnosticsArray; + } + + set + { + if (!Object.ReferenceEquals(m_subscriptionDiagnosticsArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_subscriptionDiagnosticsArray = value; + } + } + + /// + public SessionsDiagnosticsSummaryState SessionsDiagnosticsSummary + { + get + { + return m_sessionsDiagnosticsSummary; + } + + set + { + if (!Object.ReferenceEquals(m_sessionsDiagnosticsSummary, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionsDiagnosticsSummary = value; + } + } + + /// + public PropertyState EnabledFlag + { + get + { + return m_enabledFlag; + } + + set + { + if (!Object.ReferenceEquals(m_enabledFlag, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enabledFlag = 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_serverDiagnosticsSummary != null) + { + children.Add(m_serverDiagnosticsSummary); + } + + if (m_samplingIntervalDiagnosticsArray != null) + { + children.Add(m_samplingIntervalDiagnosticsArray); + } + + if (m_subscriptionDiagnosticsArray != null) + { + children.Add(m_subscriptionDiagnosticsArray); + } + + if (m_sessionsDiagnosticsSummary != null) + { + children.Add(m_sessionsDiagnosticsSummary); + } + + if (m_enabledFlag != null) + { + children.Add(m_enabledFlag); + } + + 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 Opc.Ua.BrowseNames.ServerDiagnosticsSummary: + { + if (createOrReplace) + { + if (ServerDiagnosticsSummary == null) + { + if (replacement == null) + { + ServerDiagnosticsSummary = new ServerDiagnosticsSummaryState(this); + } + else + { + ServerDiagnosticsSummary = (ServerDiagnosticsSummaryState)replacement; + } + } + } + + instance = ServerDiagnosticsSummary; + break; + } + + case Opc.Ua.BrowseNames.SamplingIntervalDiagnosticsArray: + { + if (createOrReplace) + { + if (SamplingIntervalDiagnosticsArray == null) + { + if (replacement == null) + { + SamplingIntervalDiagnosticsArray = new SamplingIntervalDiagnosticsArrayState(this); + } + else + { + SamplingIntervalDiagnosticsArray = (SamplingIntervalDiagnosticsArrayState)replacement; + } + } + } + + instance = SamplingIntervalDiagnosticsArray; + break; + } + + case Opc.Ua.BrowseNames.SubscriptionDiagnosticsArray: + { + if (createOrReplace) + { + if (SubscriptionDiagnosticsArray == null) + { + if (replacement == null) + { + SubscriptionDiagnosticsArray = new SubscriptionDiagnosticsArrayState(this); + } + else + { + SubscriptionDiagnosticsArray = (SubscriptionDiagnosticsArrayState)replacement; + } + } + } + + instance = SubscriptionDiagnosticsArray; + break; + } + + case Opc.Ua.BrowseNames.SessionsDiagnosticsSummary: + { + if (createOrReplace) + { + if (SessionsDiagnosticsSummary == null) + { + if (replacement == null) + { + SessionsDiagnosticsSummary = new SessionsDiagnosticsSummaryState(this); + } + else + { + SessionsDiagnosticsSummary = (SessionsDiagnosticsSummaryState)replacement; + } + } + } + + instance = SessionsDiagnosticsSummary; + break; + } + + case Opc.Ua.BrowseNames.EnabledFlag: + { + if (createOrReplace) + { + if (EnabledFlag == null) + { + if (replacement == null) + { + EnabledFlag = new PropertyState(this); + } + else + { + EnabledFlag = (PropertyState)replacement; + } + } + } + + instance = EnabledFlag; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private ServerDiagnosticsSummaryState m_serverDiagnosticsSummary; + private SamplingIntervalDiagnosticsArrayState m_samplingIntervalDiagnosticsArray; + private SubscriptionDiagnosticsArrayState m_subscriptionDiagnosticsArray; + private SessionsDiagnosticsSummaryState m_sessionsDiagnosticsSummary; + private PropertyState m_enabledFlag; + #endregion + } + #endif + #endregion + + #region SessionsDiagnosticsSummaryState Class + #if (!OPCUA_EXCLUDE_SessionsDiagnosticsSummaryState) + /// + /// Stores an instance of the SessionsDiagnosticsSummaryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionsDiagnosticsSummaryState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SessionsDiagnosticsSummaryState(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(Opc.Ua.ObjectTypes.SessionsDiagnosticsSummaryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAFNlc3Npb25zRGlhZ25vc3RpY3NTdW1tYXJ5VHlwZUluc3RhbmNl" + + "AQDqBwEA6gfqBwAA/////wIAAAAXYIkKAgAAAAAAFwAAAFNlc3Npb25EaWFnbm9zdGljc0FycmF5AQDr" + + "BwAvAQCUCOsHAAABAGEDAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAfAAAAU2Vzc2lvblNl" + + "Y3VyaXR5RGlhZ25vc3RpY3NBcnJheQEA7AcALwEAwwjsBwAAAQBkAwEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public SessionDiagnosticsArrayState SessionDiagnosticsArray + { + get + { + return m_sessionDiagnosticsArray; + } + + set + { + if (!Object.ReferenceEquals(m_sessionDiagnosticsArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionDiagnosticsArray = value; + } + } + + /// + public SessionSecurityDiagnosticsArrayState SessionSecurityDiagnosticsArray + { + get + { + return m_sessionSecurityDiagnosticsArray; + } + + set + { + if (!Object.ReferenceEquals(m_sessionSecurityDiagnosticsArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionSecurityDiagnosticsArray = 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_sessionDiagnosticsArray != null) + { + children.Add(m_sessionDiagnosticsArray); + } + + if (m_sessionSecurityDiagnosticsArray != null) + { + children.Add(m_sessionSecurityDiagnosticsArray); + } + + 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 Opc.Ua.BrowseNames.SessionDiagnosticsArray: + { + if (createOrReplace) + { + if (SessionDiagnosticsArray == null) + { + if (replacement == null) + { + SessionDiagnosticsArray = new SessionDiagnosticsArrayState(this); + } + else + { + SessionDiagnosticsArray = (SessionDiagnosticsArrayState)replacement; + } + } + } + + instance = SessionDiagnosticsArray; + break; + } + + case Opc.Ua.BrowseNames.SessionSecurityDiagnosticsArray: + { + if (createOrReplace) + { + if (SessionSecurityDiagnosticsArray == null) + { + if (replacement == null) + { + SessionSecurityDiagnosticsArray = new SessionSecurityDiagnosticsArrayState(this); + } + else + { + SessionSecurityDiagnosticsArray = (SessionSecurityDiagnosticsArrayState)replacement; + } + } + } + + instance = SessionSecurityDiagnosticsArray; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private SessionDiagnosticsArrayState m_sessionDiagnosticsArray; + private SessionSecurityDiagnosticsArrayState m_sessionSecurityDiagnosticsArray; + #endregion + } + #endif + #endregion + + #region SessionDiagnosticsObjectState Class + #if (!OPCUA_EXCLUDE_SessionDiagnosticsObjectState) + /// + /// Stores an instance of the SessionDiagnosticsObjectType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionDiagnosticsObjectState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SessionDiagnosticsObjectState(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(Opc.Ua.ObjectTypes.SessionDiagnosticsObjectType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAFNlc3Npb25EaWFnbm9zdGljc09iamVjdFR5cGVJbnN0YW5jZQEA" + + "7QcBAO0H7QcAAP////8DAAAAFWCJCgIAAAAAABIAAABTZXNzaW9uRGlhZ25vc3RpY3MBAO4HAC8BAJUI" + + "7gcAAAEAYQP/////AQH/////KwAAABVgiQoCAAAAAAAJAAAAU2Vzc2lvbklkAQA7DAAvAD87DAAAABH/" + + "////AQH/////AAAAABVgiQoCAAAAAAALAAAAU2Vzc2lvbk5hbWUBADwMAC8APzwMAAAADP////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABEAAABDbGllbnREZXNjcmlwdGlvbgEAPQwALwA/PQwAAAEANAH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAJAAAAU2VydmVyVXJpAQA+DAAvAD8+DAAAAAz/////AQH/////AAAAABVg" + + "iQoCAAAAAAALAAAARW5kcG9pbnRVcmwBAD8MAC8APz8MAAAADP////8BAf////8AAAAAF2CJCgIAAAAA" + + "AAkAAABMb2NhbGVJZHMBAEAMAC8AP0AMAAABACcBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAA" + + "AAAUAAAAQWN0dWFsU2Vzc2lvblRpbWVvdXQBAEEMAC8AP0EMAAABACIB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAFgAAAE1heFJlc3BvbnNlTWVzc2FnZVNpemUBAEIMAC8AP0IMAAAAB/////8BAf////8AAAAA" + + "FWCJCgIAAAAAABQAAABDbGllbnRDb25uZWN0aW9uVGltZQEAQwwALwA/QwwAAAEAJgH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAVAAAAQ2xpZW50TGFzdENvbnRhY3RUaW1lAQBEDAAvAD9EDAAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABkAAABDdXJyZW50U3Vic2NyaXB0aW9uc0NvdW50AQBFDAAvAD9FDAAA" + + "AAf/////AQH/////AAAAABVgiQoCAAAAAAAaAAAAQ3VycmVudE1vbml0b3JlZEl0ZW1zQ291bnQBAEYM" + + "AC8AP0YMAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAAB0AAABDdXJyZW50UHVibGlzaFJlcXVlc3Rz" + + "SW5RdWV1ZQEARwwALwA/RwwAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAFRvdGFsUmVxdWVz" + + "dENvdW50AQDCIgAvAD/CIgAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABgAAABVbmF1dGhvcml6" + + "ZWRSZXF1ZXN0Q291bnQBAHMuAC8AP3MuAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABSZWFk" + + "Q291bnQBAE8MAC8AP08MAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAEhpc3RvcnlSZWFk" + + "Q291bnQBAFAMAC8AP1AMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFdyaXRlQ291bnQB" + + "AFEMAC8AP1EMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAEhpc3RvcnlVcGRhdGVDb3Vu" + + "dAEAUgwALwA/UgwAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAQ2FsbENvdW50AQBTDAAv" + + "AD9TDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABkAAABDcmVhdGVNb25pdG9yZWRJdGVtc0Nv" + + "dW50AQBUDAAvAD9UDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABkAAABNb2RpZnlNb25pdG9y" + + "ZWRJdGVtc0NvdW50AQBVDAAvAD9VDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABYAAABTZXRN" + + "b25pdG9yaW5nTW9kZUNvdW50AQBWDAAvAD9WDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABIA" + + "AABTZXRUcmlnZ2VyaW5nQ291bnQBAFcMAC8AP1cMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "GQAAAERlbGV0ZU1vbml0b3JlZEl0ZW1zQ291bnQBAFgMAC8AP1gMAAABAGcD/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAFwAAAENyZWF0ZVN1YnNjcmlwdGlvbkNvdW50AQBZDAAvAD9ZDAAAAQBnA/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABcAAABNb2RpZnlTdWJzY3JpcHRpb25Db3VudAEAWgwALwA/WgwAAAEAZwP/" + + "////AQH/////AAAAABVgiQoCAAAAAAAWAAAAU2V0UHVibGlzaGluZ01vZGVDb3VudAEAWwwALwA/WwwA" + + "AAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAUHVibGlzaENvdW50AQBcDAAvAD9cDAAAAQBn" + + "A/////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABSZXB1Ymxpc2hDb3VudAEAXQwALwA/XQwAAAEAZwP/" + + "////AQH/////AAAAABVgiQoCAAAAAAAaAAAAVHJhbnNmZXJTdWJzY3JpcHRpb25zQ291bnQBAF4MAC8A" + + "P14MAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAERlbGV0ZVN1YnNjcmlwdGlvbnNDb3Vu" + + "dAEAXwwALwA/XwwAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAANAAAAQWRkTm9kZXNDb3VudAEA" + + "YAwALwA/YAwAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQWRkUmVmZXJlbmNlc0NvdW50" + + "AQBhDAAvAD9hDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEZWxldGVOb2Rlc0NvdW50" + + "AQBiDAAvAD9iDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABUAAABEZWxldGVSZWZlcmVuY2Vz" + + "Q291bnQBAGMMAC8AP2MMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAEJyb3dzZUNvdW50" + + "AQBkDAAvAD9kDAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAAA8AAABCcm93c2VOZXh0Q291bnQB" + + "AGUMAC8AP2UMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAIgAAAFRyYW5zbGF0ZUJyb3dzZVBh" + + "dGhzVG9Ob2RlSWRzQ291bnQBAGYMAC8AP2YMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAADwAA" + + "AFF1ZXJ5Rmlyc3RDb3VudAEAZwwALwA/ZwwAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAOAAAA" + + "UXVlcnlOZXh0Q291bnQBAGgMAC8AP2gMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAFJl" + + "Z2lzdGVyTm9kZXNDb3VudAEAaQwALwA/aQwAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAUAAAA" + + "VW5yZWdpc3Rlck5vZGVzQ291bnQBAGoMAC8AP2oMAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "GgAAAFNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzAQDvBwAvAQDECO8HAAABAGQD/////wEB/////wkA" + + "AAAVYIkKAgAAAAAACQAAAFNlc3Npb25JZAEAawwALwA/awwAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAFQAAAENsaWVudFVzZXJJZE9mU2Vzc2lvbgEAbAwALwA/bAwAAAAM/////wEB/////wAAAAAXYIkK" + + "AgAAAAAAEwAAAENsaWVudFVzZXJJZEhpc3RvcnkBAG0MAC8AP20MAAAADAEAAAABAAAAAAAAAAEB////" + + "/wAAAAAVYIkKAgAAAAAAFwAAAEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtAQBuDAAvAD9uDAAAAAz/////" + + "AQH/////AAAAABVgiQoCAAAAAAAIAAAARW5jb2RpbmcBAG8MAC8AP28MAAAADP////8BAf////8AAAAA" + + "FWCJCgIAAAAAABEAAABUcmFuc3BvcnRQcm90b2NvbAEAcAwALwA/cAwAAAAM/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADAAAAFNlY3VyaXR5TW9kZQEAcQwALwA/cQwAAAEALgH/////AQH/////AAAAABVgiQoC" + + "AAAAAAARAAAAU2VjdXJpdHlQb2xpY3lVcmkBAHIMAC8AP3IMAAAADP////8BAf////8AAAAAFWCJCgIA" + + "AAAAABEAAABDbGllbnRDZXJ0aWZpY2F0ZQEAcwwALwA/cwwAAAAP/////wEB/////wAAAAAXYIkKAgAA" + + "AAAAHAAAAFN1YnNjcmlwdGlvbkRpYWdub3N0aWNzQXJyYXkBAPAHAC8BAHsI8AcAAAEAagMBAAAAAQAA" + + "AAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public SessionDiagnosticsVariableState SessionDiagnostics + { + get + { + return m_sessionDiagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_sessionDiagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionDiagnostics = value; + } + } + + /// + public SessionSecurityDiagnosticsState SessionSecurityDiagnostics + { + get + { + return m_sessionSecurityDiagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_sessionSecurityDiagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionSecurityDiagnostics = value; + } + } + + /// + public SubscriptionDiagnosticsArrayState SubscriptionDiagnosticsArray + { + get + { + return m_subscriptionDiagnosticsArray; + } + + set + { + if (!Object.ReferenceEquals(m_subscriptionDiagnosticsArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_subscriptionDiagnosticsArray = 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_sessionDiagnostics != null) + { + children.Add(m_sessionDiagnostics); + } + + if (m_sessionSecurityDiagnostics != null) + { + children.Add(m_sessionSecurityDiagnostics); + } + + if (m_subscriptionDiagnosticsArray != null) + { + children.Add(m_subscriptionDiagnosticsArray); + } + + 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 Opc.Ua.BrowseNames.SessionDiagnostics: + { + if (createOrReplace) + { + if (SessionDiagnostics == null) + { + if (replacement == null) + { + SessionDiagnostics = new SessionDiagnosticsVariableState(this); + } + else + { + SessionDiagnostics = (SessionDiagnosticsVariableState)replacement; + } + } + } + + instance = SessionDiagnostics; + break; + } + + case Opc.Ua.BrowseNames.SessionSecurityDiagnostics: + { + if (createOrReplace) + { + if (SessionSecurityDiagnostics == null) + { + if (replacement == null) + { + SessionSecurityDiagnostics = new SessionSecurityDiagnosticsState(this); + } + else + { + SessionSecurityDiagnostics = (SessionSecurityDiagnosticsState)replacement; + } + } + } + + instance = SessionSecurityDiagnostics; + break; + } + + case Opc.Ua.BrowseNames.SubscriptionDiagnosticsArray: + { + if (createOrReplace) + { + if (SubscriptionDiagnosticsArray == null) + { + if (replacement == null) + { + SubscriptionDiagnosticsArray = new SubscriptionDiagnosticsArrayState(this); + } + else + { + SubscriptionDiagnosticsArray = (SubscriptionDiagnosticsArrayState)replacement; + } + } + } + + instance = SubscriptionDiagnosticsArray; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private SessionDiagnosticsVariableState m_sessionDiagnostics; + private SessionSecurityDiagnosticsState m_sessionSecurityDiagnostics; + private SubscriptionDiagnosticsArrayState m_subscriptionDiagnosticsArray; + #endregion + } + #endif + #endregion + + #region VendorServerInfoState Class + #if (!OPCUA_EXCLUDE_VendorServerInfoState) + /// + /// Stores an instance of the VendorServerInfoType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class VendorServerInfoState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public VendorServerInfoState(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(Opc.Ua.ObjectTypes.VendorServerInfoType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHAAAAFZlbmRvclNlcnZlckluZm9UeXBlSW5zdGFuY2UBAPEHAQDxB/EH" + + "AAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ServerRedundancyState Class + #if (!OPCUA_EXCLUDE_ServerRedundancyState) + /// + /// Stores an instance of the ServerRedundancyType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerRedundancyState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerRedundancyState(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(Opc.Ua.ObjectTypes.ServerRedundancyType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHAAAAFNlcnZlclJlZHVuZGFuY3lUeXBlSW5zdGFuY2UBAPIHAQDyB/IH" + + "AAD/////AQAAABVgiQoCAAAAAAARAAAAUmVkdW5kYW5jeVN1cHBvcnQBAPMHAC4ARPMHAAABAFMD////" + + "/wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState RedundancySupport + { + get + { + return m_redundancySupport; + } + + set + { + if (!Object.ReferenceEquals(m_redundancySupport, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_redundancySupport = 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_redundancySupport != null) + { + children.Add(m_redundancySupport); + } + + 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 Opc.Ua.BrowseNames.RedundancySupport: + { + if (createOrReplace) + { + if (RedundancySupport == null) + { + if (replacement == null) + { + RedundancySupport = new PropertyState(this); + } + else + { + RedundancySupport = (PropertyState)replacement; + } + } + } + + instance = RedundancySupport; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_redundancySupport; + #endregion + } + #endif + #endregion + + #region TransparentRedundancyState Class + #if (!OPCUA_EXCLUDE_TransparentRedundancyState) + /// + /// Stores an instance of the TransparentRedundancyType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TransparentRedundancyState : ServerRedundancyState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TransparentRedundancyState(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(Opc.Ua.ObjectTypes.TransparentRedundancyType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAFRyYW5zcGFyZW50UmVkdW5kYW5jeVR5cGVJbnN0YW5jZQEA9AcB" + + "APQH9AcAAP////8DAAAAFWCJCgIAAAAAABEAAABSZWR1bmRhbmN5U3VwcG9ydAEAdAwALgBEdAwAAAEA" + + "UwP/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAQ3VycmVudFNlcnZlcklkAQD1BwAuAET1BwAAAAz/" + + "////AQH/////AAAAABdgiQoCAAAAAAAUAAAAUmVkdW5kYW50U2VydmVyQXJyYXkBAPYHAC4ARPYHAAAB" + + "AFUDAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState CurrentServerId + { + get + { + return m_currentServerId; + } + + set + { + if (!Object.ReferenceEquals(m_currentServerId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentServerId = value; + } + } + + /// + public PropertyState RedundantServerArray + { + get + { + return m_redundantServerArray; + } + + set + { + if (!Object.ReferenceEquals(m_redundantServerArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_redundantServerArray = 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_currentServerId != null) + { + children.Add(m_currentServerId); + } + + if (m_redundantServerArray != null) + { + children.Add(m_redundantServerArray); + } + + 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 Opc.Ua.BrowseNames.CurrentServerId: + { + if (createOrReplace) + { + if (CurrentServerId == null) + { + if (replacement == null) + { + CurrentServerId = new PropertyState(this); + } + else + { + CurrentServerId = (PropertyState)replacement; + } + } + } + + instance = CurrentServerId; + break; + } + + case Opc.Ua.BrowseNames.RedundantServerArray: + { + if (createOrReplace) + { + if (RedundantServerArray == null) + { + if (replacement == null) + { + RedundantServerArray = new PropertyState(this); + } + else + { + RedundantServerArray = (PropertyState)replacement; + } + } + } + + instance = RedundantServerArray; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_currentServerId; + private PropertyState m_redundantServerArray; + #endregion + } + #endif + #endregion + + #region NonTransparentRedundancyState Class + #if (!OPCUA_EXCLUDE_NonTransparentRedundancyState) + /// + /// Stores an instance of the NonTransparentRedundancyType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NonTransparentRedundancyState : ServerRedundancyState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NonTransparentRedundancyState(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(Opc.Ua.ObjectTypes.NonTransparentRedundancyType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAE5vblRyYW5zcGFyZW50UmVkdW5kYW5jeVR5cGVJbnN0YW5jZQEA" + + "9wcBAPcH9wcAAP////8CAAAAFWCJCgIAAAAAABEAAABSZWR1bmRhbmN5U3VwcG9ydAEAdQwALgBEdQwA" + + "AAEAUwP/////AQH/////AAAAABdgiQoCAAAAAAAOAAAAU2VydmVyVXJpQXJyYXkBAPgHAC4ARPgHAAAA" + + "DAEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ServerUriArray + { + get + { + return m_serverUriArray; + } + + set + { + if (!Object.ReferenceEquals(m_serverUriArray, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverUriArray = 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_serverUriArray != null) + { + children.Add(m_serverUriArray); + } + + 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 Opc.Ua.BrowseNames.ServerUriArray: + { + if (createOrReplace) + { + if (ServerUriArray == null) + { + if (replacement == null) + { + ServerUriArray = new PropertyState(this); + } + else + { + ServerUriArray = (PropertyState)replacement; + } + } + } + + instance = ServerUriArray; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_serverUriArray; + #endregion + } + #endif + #endregion + + #region NonTransparentNetworkRedundancyState Class + #if (!OPCUA_EXCLUDE_NonTransparentNetworkRedundancyState) + /// + /// Stores an instance of the NonTransparentNetworkRedundancyType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NonTransparentNetworkRedundancyState : NonTransparentRedundancyState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NonTransparentNetworkRedundancyState(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(Opc.Ua.ObjectTypes.NonTransparentNetworkRedundancyType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKwAAAE5vblRyYW5zcGFyZW50TmV0d29ya1JlZHVuZGFuY3lUeXBlSW5z" + + "dGFuY2UBAKkuAQCpLqkuAAD/////AwAAABVgiQoCAAAAAAARAAAAUmVkdW5kYW5jeVN1cHBvcnQBAKou" + + "AC4ARKouAAABAFMD/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAFNlcnZlclVyaUFycmF5AQCrLgAu" + + "AESrLgAAAAwBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAABMAAABTZXJ2ZXJOZXR3b3JrR3Jv" + + "dXBzAQCsLgAuAESsLgAAAQCoLgEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ServerNetworkGroups + { + get + { + return m_serverNetworkGroups; + } + + set + { + if (!Object.ReferenceEquals(m_serverNetworkGroups, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverNetworkGroups = 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_serverNetworkGroups != null) + { + children.Add(m_serverNetworkGroups); + } + + 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 Opc.Ua.BrowseNames.ServerNetworkGroups: + { + if (createOrReplace) + { + if (ServerNetworkGroups == null) + { + if (replacement == null) + { + ServerNetworkGroups = new PropertyState(this); + } + else + { + ServerNetworkGroups = (PropertyState)replacement; + } + } + } + + instance = ServerNetworkGroups; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_serverNetworkGroups; + #endregion + } + #endif + #endregion + + #region OperationLimitsState Class + #if (!OPCUA_EXCLUDE_OperationLimitsState) + /// + /// Stores an instance of the OperationLimitsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OperationLimitsState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OperationLimitsState(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(Opc.Ua.ObjectTypes.OperationLimitsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (MaxNodesPerRead != null) + { + MaxNodesPerRead.Initialize(context, MaxNodesPerRead_InitializationString); + } + + if (MaxNodesPerHistoryReadData != null) + { + MaxNodesPerHistoryReadData.Initialize(context, MaxNodesPerHistoryReadData_InitializationString); + } + + if (MaxNodesPerHistoryReadEvents != null) + { + MaxNodesPerHistoryReadEvents.Initialize(context, MaxNodesPerHistoryReadEvents_InitializationString); + } + + if (MaxNodesPerWrite != null) + { + MaxNodesPerWrite.Initialize(context, MaxNodesPerWrite_InitializationString); + } + + if (MaxNodesPerHistoryUpdateData != null) + { + MaxNodesPerHistoryUpdateData.Initialize(context, MaxNodesPerHistoryUpdateData_InitializationString); + } + + if (MaxNodesPerHistoryUpdateEvents != null) + { + MaxNodesPerHistoryUpdateEvents.Initialize(context, MaxNodesPerHistoryUpdateEvents_InitializationString); + } + + if (MaxNodesPerMethodCall != null) + { + MaxNodesPerMethodCall.Initialize(context, MaxNodesPerMethodCall_InitializationString); + } + + if (MaxNodesPerBrowse != null) + { + MaxNodesPerBrowse.Initialize(context, MaxNodesPerBrowse_InitializationString); + } + + if (MaxNodesPerRegisterNodes != null) + { + MaxNodesPerRegisterNodes.Initialize(context, MaxNodesPerRegisterNodes_InitializationString); + } + + if (MaxNodesPerTranslateBrowsePathsToNodeIds != null) + { + MaxNodesPerTranslateBrowsePathsToNodeIds.Initialize(context, MaxNodesPerTranslateBrowsePathsToNodeIds_InitializationString); + } + + if (MaxNodesPerNodeManagement != null) + { + MaxNodesPerNodeManagement.Initialize(context, MaxNodesPerNodeManagement_InitializationString); + } + + if (MaxMonitoredItemsPerCall != null) + { + MaxMonitoredItemsPerCall.Initialize(context, MaxMonitoredItemsPerCall_InitializationString); + } + } + + #region Initialization String + private const string MaxNodesPerRead_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAE1heE5vZGVzUGVyUmVhZAEALS0ALgBELS0AAAAH/////wEB////" + + "/wAAAAA="; + + private const string MaxNodesPerHistoryReadData_InitializationString = + "//////////8VYIkKAgAAAAAAGgAAAE1heE5vZGVzUGVySGlzdG9yeVJlYWREYXRhAQCBLwAuAESBLwAA" + + "AAf/////AQH/////AAAAAA=="; + + private const string MaxNodesPerHistoryReadEvents_InitializationString = + "//////////8VYIkKAgAAAAAAHAAAAE1heE5vZGVzUGVySGlzdG9yeVJlYWRFdmVudHMBAIIvAC4ARIIv" + + "AAAAB/////8BAf////8AAAAA"; + + private const string MaxNodesPerWrite_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAE1heE5vZGVzUGVyV3JpdGUBAC8tAC4ARC8tAAAAB/////8BAf//" + + "//8AAAAA"; + + private const string MaxNodesPerHistoryUpdateData_InitializationString = + "//////////8VYIkKAgAAAAAAHAAAAE1heE5vZGVzUGVySGlzdG9yeVVwZGF0ZURhdGEBAIMvAC4ARIMv" + + "AAAAB/////8BAf////8AAAAA"; + + private const string MaxNodesPerHistoryUpdateEvents_InitializationString = + "//////////8VYIkKAgAAAAAAHgAAAE1heE5vZGVzUGVySGlzdG9yeVVwZGF0ZUV2ZW50cwEAhC8ALgBE" + + "hC8AAAAH/////wEB/////wAAAAA="; + + private const string MaxNodesPerMethodCall_InitializationString = + "//////////8VYIkKAgAAAAAAFQAAAE1heE5vZGVzUGVyTWV0aG9kQ2FsbAEAMS0ALgBEMS0AAAAH////" + + "/wEB/////wAAAAA="; + + private const string MaxNodesPerBrowse_InitializationString = + "//////////8VYIkKAgAAAAAAEQAAAE1heE5vZGVzUGVyQnJvd3NlAQAyLQAuAEQyLQAAAAf/////AQH/" + + "////AAAAAA=="; + + private const string MaxNodesPerRegisterNodes_InitializationString = + "//////////8VYIkKAgAAAAAAGAAAAE1heE5vZGVzUGVyUmVnaXN0ZXJOb2RlcwEAMy0ALgBEMy0AAAAH" + + "/////wEB/////wAAAAA="; + + private const string MaxNodesPerTranslateBrowsePathsToNodeIds_InitializationString = + "//////////8VYIkKAgAAAAAAKAAAAE1heE5vZGVzUGVyVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJ" + + "ZHMBADQtAC4ARDQtAAAAB/////8BAf////8AAAAA"; + + private const string MaxNodesPerNodeManagement_InitializationString = + "//////////8VYIkKAgAAAAAAGQAAAE1heE5vZGVzUGVyTm9kZU1hbmFnZW1lbnQBADUtAC4ARDUtAAAA" + + "B/////8BAf////8AAAAA"; + + private const string MaxMonitoredItemsPerCall_InitializationString = + "//////////8VYIkKAgAAAAAAGAAAAE1heE1vbml0b3JlZEl0ZW1zUGVyQ2FsbAEANi0ALgBENi0AAAAH" + + "/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGwAAAE9wZXJhdGlvbkxpbWl0c1R5cGVJbnN0YW5jZQEALC0BACwtLC0A" + + "AP////8MAAAAFWCJCgIAAAAAAA8AAABNYXhOb2Rlc1BlclJlYWQBAC0tAC4ARC0tAAAAB/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABoAAABNYXhOb2Rlc1Blckhpc3RvcnlSZWFkRGF0YQEAgS8ALgBEgS8AAAAH" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAHAAAAE1heE5vZGVzUGVySGlzdG9yeVJlYWRFdmVudHMBAIIv" + + "AC4ARIIvAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABAAAABNYXhOb2Rlc1BlcldyaXRlAQAvLQAu" + + "AEQvLQAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAcAAAATWF4Tm9kZXNQZXJIaXN0b3J5VXBkYXRl" + + "RGF0YQEAgy8ALgBEgy8AAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAHgAAAE1heE5vZGVzUGVySGlz" + + "dG9yeVVwZGF0ZUV2ZW50cwEAhC8ALgBEhC8AAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAE1h" + + "eE5vZGVzUGVyTWV0aG9kQ2FsbAEAMS0ALgBEMS0AAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAEQAA" + + "AE1heE5vZGVzUGVyQnJvd3NlAQAyLQAuAEQyLQAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAYAAAA" + + "TWF4Tm9kZXNQZXJSZWdpc3Rlck5vZGVzAQAzLQAuAEQzLQAAAAf/////AQH/////AAAAABVgiQoCAAAA" + + "AAAoAAAATWF4Tm9kZXNQZXJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkcwEANC0ALgBENC0AAAAH" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAGQAAAE1heE5vZGVzUGVyTm9kZU1hbmFnZW1lbnQBADUtAC4A" + + "RDUtAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABgAAABNYXhNb25pdG9yZWRJdGVtc1BlckNhbGwB" + + "ADYtAC4ARDYtAAAAB/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState MaxNodesPerRead + { + get + { + return m_maxNodesPerRead; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerRead, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerRead = value; + } + } + + /// + public PropertyState MaxNodesPerHistoryReadData + { + get + { + return m_maxNodesPerHistoryReadData; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerHistoryReadData, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerHistoryReadData = value; + } + } + + /// + public PropertyState MaxNodesPerHistoryReadEvents + { + get + { + return m_maxNodesPerHistoryReadEvents; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerHistoryReadEvents, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerHistoryReadEvents = value; + } + } + + /// + public PropertyState MaxNodesPerWrite + { + get + { + return m_maxNodesPerWrite; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerWrite, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerWrite = value; + } + } + + /// + public PropertyState MaxNodesPerHistoryUpdateData + { + get + { + return m_maxNodesPerHistoryUpdateData; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerHistoryUpdateData, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerHistoryUpdateData = value; + } + } + + /// + public PropertyState MaxNodesPerHistoryUpdateEvents + { + get + { + return m_maxNodesPerHistoryUpdateEvents; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerHistoryUpdateEvents, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerHistoryUpdateEvents = value; + } + } + + /// + public PropertyState MaxNodesPerMethodCall + { + get + { + return m_maxNodesPerMethodCall; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerMethodCall, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerMethodCall = value; + } + } + + /// + public PropertyState MaxNodesPerBrowse + { + get + { + return m_maxNodesPerBrowse; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerBrowse, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerBrowse = value; + } + } + + /// + public PropertyState MaxNodesPerRegisterNodes + { + get + { + return m_maxNodesPerRegisterNodes; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerRegisterNodes, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerRegisterNodes = value; + } + } + + /// + public PropertyState MaxNodesPerTranslateBrowsePathsToNodeIds + { + get + { + return m_maxNodesPerTranslateBrowsePathsToNodeIds; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerTranslateBrowsePathsToNodeIds, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerTranslateBrowsePathsToNodeIds = value; + } + } + + /// + public PropertyState MaxNodesPerNodeManagement + { + get + { + return m_maxNodesPerNodeManagement; + } + + set + { + if (!Object.ReferenceEquals(m_maxNodesPerNodeManagement, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNodesPerNodeManagement = value; + } + } + + /// + public PropertyState MaxMonitoredItemsPerCall + { + get + { + return m_maxMonitoredItemsPerCall; + } + + set + { + if (!Object.ReferenceEquals(m_maxMonitoredItemsPerCall, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxMonitoredItemsPerCall = 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_maxNodesPerRead != null) + { + children.Add(m_maxNodesPerRead); + } + + if (m_maxNodesPerHistoryReadData != null) + { + children.Add(m_maxNodesPerHistoryReadData); + } + + if (m_maxNodesPerHistoryReadEvents != null) + { + children.Add(m_maxNodesPerHistoryReadEvents); + } + + if (m_maxNodesPerWrite != null) + { + children.Add(m_maxNodesPerWrite); + } + + if (m_maxNodesPerHistoryUpdateData != null) + { + children.Add(m_maxNodesPerHistoryUpdateData); + } + + if (m_maxNodesPerHistoryUpdateEvents != null) + { + children.Add(m_maxNodesPerHistoryUpdateEvents); + } + + if (m_maxNodesPerMethodCall != null) + { + children.Add(m_maxNodesPerMethodCall); + } + + if (m_maxNodesPerBrowse != null) + { + children.Add(m_maxNodesPerBrowse); + } + + if (m_maxNodesPerRegisterNodes != null) + { + children.Add(m_maxNodesPerRegisterNodes); + } + + if (m_maxNodesPerTranslateBrowsePathsToNodeIds != null) + { + children.Add(m_maxNodesPerTranslateBrowsePathsToNodeIds); + } + + if (m_maxNodesPerNodeManagement != null) + { + children.Add(m_maxNodesPerNodeManagement); + } + + if (m_maxMonitoredItemsPerCall != null) + { + children.Add(m_maxMonitoredItemsPerCall); + } + + 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 Opc.Ua.BrowseNames.MaxNodesPerRead: + { + if (createOrReplace) + { + if (MaxNodesPerRead == null) + { + if (replacement == null) + { + MaxNodesPerRead = new PropertyState(this); + } + else + { + MaxNodesPerRead = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerRead; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerHistoryReadData: + { + if (createOrReplace) + { + if (MaxNodesPerHistoryReadData == null) + { + if (replacement == null) + { + MaxNodesPerHistoryReadData = new PropertyState(this); + } + else + { + MaxNodesPerHistoryReadData = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerHistoryReadData; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerHistoryReadEvents: + { + if (createOrReplace) + { + if (MaxNodesPerHistoryReadEvents == null) + { + if (replacement == null) + { + MaxNodesPerHistoryReadEvents = new PropertyState(this); + } + else + { + MaxNodesPerHistoryReadEvents = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerHistoryReadEvents; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerWrite: + { + if (createOrReplace) + { + if (MaxNodesPerWrite == null) + { + if (replacement == null) + { + MaxNodesPerWrite = new PropertyState(this); + } + else + { + MaxNodesPerWrite = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerWrite; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerHistoryUpdateData: + { + if (createOrReplace) + { + if (MaxNodesPerHistoryUpdateData == null) + { + if (replacement == null) + { + MaxNodesPerHistoryUpdateData = new PropertyState(this); + } + else + { + MaxNodesPerHistoryUpdateData = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerHistoryUpdateData; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerHistoryUpdateEvents: + { + if (createOrReplace) + { + if (MaxNodesPerHistoryUpdateEvents == null) + { + if (replacement == null) + { + MaxNodesPerHistoryUpdateEvents = new PropertyState(this); + } + else + { + MaxNodesPerHistoryUpdateEvents = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerHistoryUpdateEvents; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerMethodCall: + { + if (createOrReplace) + { + if (MaxNodesPerMethodCall == null) + { + if (replacement == null) + { + MaxNodesPerMethodCall = new PropertyState(this); + } + else + { + MaxNodesPerMethodCall = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerMethodCall; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerBrowse: + { + if (createOrReplace) + { + if (MaxNodesPerBrowse == null) + { + if (replacement == null) + { + MaxNodesPerBrowse = new PropertyState(this); + } + else + { + MaxNodesPerBrowse = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerBrowse; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerRegisterNodes: + { + if (createOrReplace) + { + if (MaxNodesPerRegisterNodes == null) + { + if (replacement == null) + { + MaxNodesPerRegisterNodes = new PropertyState(this); + } + else + { + MaxNodesPerRegisterNodes = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerRegisterNodes; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerTranslateBrowsePathsToNodeIds: + { + if (createOrReplace) + { + if (MaxNodesPerTranslateBrowsePathsToNodeIds == null) + { + if (replacement == null) + { + MaxNodesPerTranslateBrowsePathsToNodeIds = new PropertyState(this); + } + else + { + MaxNodesPerTranslateBrowsePathsToNodeIds = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerTranslateBrowsePathsToNodeIds; + break; + } + + case Opc.Ua.BrowseNames.MaxNodesPerNodeManagement: + { + if (createOrReplace) + { + if (MaxNodesPerNodeManagement == null) + { + if (replacement == null) + { + MaxNodesPerNodeManagement = new PropertyState(this); + } + else + { + MaxNodesPerNodeManagement = (PropertyState)replacement; + } + } + } + + instance = MaxNodesPerNodeManagement; + break; + } + + case Opc.Ua.BrowseNames.MaxMonitoredItemsPerCall: + { + if (createOrReplace) + { + if (MaxMonitoredItemsPerCall == null) + { + if (replacement == null) + { + MaxMonitoredItemsPerCall = new PropertyState(this); + } + else + { + MaxMonitoredItemsPerCall = (PropertyState)replacement; + } + } + } + + instance = MaxMonitoredItemsPerCall; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_maxNodesPerRead; + private PropertyState m_maxNodesPerHistoryReadData; + private PropertyState m_maxNodesPerHistoryReadEvents; + private PropertyState m_maxNodesPerWrite; + private PropertyState m_maxNodesPerHistoryUpdateData; + private PropertyState m_maxNodesPerHistoryUpdateEvents; + private PropertyState m_maxNodesPerMethodCall; + private PropertyState m_maxNodesPerBrowse; + private PropertyState m_maxNodesPerRegisterNodes; + private PropertyState m_maxNodesPerTranslateBrowsePathsToNodeIds; + private PropertyState m_maxNodesPerNodeManagement; + private PropertyState m_maxMonitoredItemsPerCall; + #endregion + } + #endif + #endregion + + #region FileState Class + #if (!OPCUA_EXCLUDE_FileState) + /// + /// Stores an instance of the FileType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FileState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FileState(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(Opc.Ua.ObjectTypes.FileType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (MimeType != null) + { + MimeType.Initialize(context, MimeType_InitializationString); + } + } + + #region Initialization String + private const string MimeType_InitializationString = + "//////////8VYIkKAgAAAAAACAAAAE1pbWVUeXBlAQAdNAAuAEQdNAAAAAz/////AQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAEAAAAEZpbGVUeXBlSW5zdGFuY2UBADctAQA3LTctAAD/////CwAAABVg" + + "iQoCAAAAAAAEAAAAU2l6ZQEAOC0ALgBEOC0AAAAJ/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFdy" + + "aXRhYmxlAQCOMQAuAESOMQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAVXNlcldyaXRhYmxl" + + "AQCPMQAuAESPMQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAT3BlbkNvdW50AQA7LQAuAEQ7" + + "LQAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWltZVR5cGUBAB00AC4ARB00AAAADP////8B" + + "Af////8AAAAABGGCCgQAAAAAAAQAAABPcGVuAQA8LQAvAQA8LTwtAAABAf////8CAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEAPS0ALgBEPS0AAJYBAAAAAQAqAQETAAAABAAAAE1vZGUAA/////8A" + + "AAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMB" + + "AD4tAC4ARD4tAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAQ2xvc2UBAD8tAC8BAD8tPy0AAAEB/////wEAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBALQAuAERALQAAlgEAAAABACoBARkAAAAKAAAARmls" + + "ZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABAAAAFJl" + + "YWQBAEEtAC8BAEEtQS0AAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBCLQAu" + + "AERCLQAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQEVAAAABgAAAExl" + + "bmd0aAAG/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1" + + "dEFyZ3VtZW50cwEAQy0ALgBEQy0AAJYBAAAAAQAqAQETAAAABAAAAERhdGEAD/////8AAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABXcml0ZQEARC0ALwEARC1ELQAAAQH/////" + + "AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAEUtAC4AREUtAACWAgAAAAEAKgEBGQAAAAoA" + + "AABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAEdldFBvc2l0aW9uAQBGLQAvAQBGLUYtAAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEARy0ALgBERy0AAJYBAAAAAQAqAQEZAAAA" + + "CgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAA" + + "AA8AAABPdXRwdXRBcmd1bWVudHMBAEgtAC4AREgtAACWAQAAAAEAKgEBFwAAAAgAAABQb3NpdGlvbgAJ" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAFNldFBvc2l0aW9u" + + "AQBJLQAvAQBJLUktAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEASi0ALgBE" + + "Si0AAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFwAAAAgAAABQb3Np" + + "dGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Size + { + get + { + return m_size; + } + + set + { + if (!Object.ReferenceEquals(m_size, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_size = value; + } + } + + /// + public PropertyState Writable + { + get + { + return m_writable; + } + + set + { + if (!Object.ReferenceEquals(m_writable, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_writable = value; + } + } + + /// + public PropertyState UserWritable + { + get + { + return m_userWritable; + } + + set + { + if (!Object.ReferenceEquals(m_userWritable, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_userWritable = value; + } + } + + /// + public PropertyState OpenCount + { + get + { + return m_openCount; + } + + set + { + if (!Object.ReferenceEquals(m_openCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_openCount = value; + } + } + + /// + public PropertyState MimeType + { + get + { + return m_mimeType; + } + + set + { + if (!Object.ReferenceEquals(m_mimeType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_mimeType = value; + } + } + + /// + public OpenMethodState Open + { + get + { + return m_openMethod; + } + + set + { + if (!Object.ReferenceEquals(m_openMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_openMethod = value; + } + } + + /// + public CloseMethodState Close + { + get + { + return m_closeMethod; + } + + set + { + if (!Object.ReferenceEquals(m_closeMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_closeMethod = value; + } + } + + /// + public ReadMethodState Read + { + get + { + return m_readMethod; + } + + set + { + if (!Object.ReferenceEquals(m_readMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_readMethod = value; + } + } + + /// + public WriteMethodState Write + { + get + { + return m_writeMethod; + } + + set + { + if (!Object.ReferenceEquals(m_writeMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_writeMethod = value; + } + } + + /// + public GetPositionMethodState GetPosition + { + get + { + return m_getPositionMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getPositionMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getPositionMethod = value; + } + } + + /// + public SetPositionMethodState SetPosition + { + get + { + return m_setPositionMethod; + } + + set + { + if (!Object.ReferenceEquals(m_setPositionMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setPositionMethod = 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_size != null) + { + children.Add(m_size); + } + + if (m_writable != null) + { + children.Add(m_writable); + } + + if (m_userWritable != null) + { + children.Add(m_userWritable); + } + + if (m_openCount != null) + { + children.Add(m_openCount); + } + + if (m_mimeType != null) + { + children.Add(m_mimeType); + } + + if (m_openMethod != null) + { + children.Add(m_openMethod); + } + + if (m_closeMethod != null) + { + children.Add(m_closeMethod); + } + + if (m_readMethod != null) + { + children.Add(m_readMethod); + } + + if (m_writeMethod != null) + { + children.Add(m_writeMethod); + } + + if (m_getPositionMethod != null) + { + children.Add(m_getPositionMethod); + } + + if (m_setPositionMethod != null) + { + children.Add(m_setPositionMethod); + } + + 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 Opc.Ua.BrowseNames.Size: + { + if (createOrReplace) + { + if (Size == null) + { + if (replacement == null) + { + Size = new PropertyState(this); + } + else + { + Size = (PropertyState)replacement; + } + } + } + + instance = Size; + break; + } + + case Opc.Ua.BrowseNames.Writable: + { + if (createOrReplace) + { + if (Writable == null) + { + if (replacement == null) + { + Writable = new PropertyState(this); + } + else + { + Writable = (PropertyState)replacement; + } + } + } + + instance = Writable; + break; + } + + case Opc.Ua.BrowseNames.UserWritable: + { + if (createOrReplace) + { + if (UserWritable == null) + { + if (replacement == null) + { + UserWritable = new PropertyState(this); + } + else + { + UserWritable = (PropertyState)replacement; + } + } + } + + instance = UserWritable; + break; + } + + case Opc.Ua.BrowseNames.OpenCount: + { + if (createOrReplace) + { + if (OpenCount == null) + { + if (replacement == null) + { + OpenCount = new PropertyState(this); + } + else + { + OpenCount = (PropertyState)replacement; + } + } + } + + instance = OpenCount; + break; + } + + case Opc.Ua.BrowseNames.MimeType: + { + if (createOrReplace) + { + if (MimeType == null) + { + if (replacement == null) + { + MimeType = new PropertyState(this); + } + else + { + MimeType = (PropertyState)replacement; + } + } + } + + instance = MimeType; + break; + } + + case Opc.Ua.BrowseNames.Open: + { + if (createOrReplace) + { + if (Open == null) + { + if (replacement == null) + { + Open = new OpenMethodState(this); + } + else + { + Open = (OpenMethodState)replacement; + } + } + } + + instance = Open; + break; + } + + case Opc.Ua.BrowseNames.Close: + { + if (createOrReplace) + { + if (Close == null) + { + if (replacement == null) + { + Close = new CloseMethodState(this); + } + else + { + Close = (CloseMethodState)replacement; + } + } + } + + instance = Close; + break; + } + + case Opc.Ua.BrowseNames.Read: + { + if (createOrReplace) + { + if (Read == null) + { + if (replacement == null) + { + Read = new ReadMethodState(this); + } + else + { + Read = (ReadMethodState)replacement; + } + } + } + + instance = Read; + break; + } + + case Opc.Ua.BrowseNames.Write: + { + if (createOrReplace) + { + if (Write == null) + { + if (replacement == null) + { + Write = new WriteMethodState(this); + } + else + { + Write = (WriteMethodState)replacement; + } + } + } + + instance = Write; + break; + } + + case Opc.Ua.BrowseNames.GetPosition: + { + if (createOrReplace) + { + if (GetPosition == null) + { + if (replacement == null) + { + GetPosition = new GetPositionMethodState(this); + } + else + { + GetPosition = (GetPositionMethodState)replacement; + } + } + } + + instance = GetPosition; + break; + } + + case Opc.Ua.BrowseNames.SetPosition: + { + if (createOrReplace) + { + if (SetPosition == null) + { + if (replacement == null) + { + SetPosition = new SetPositionMethodState(this); + } + else + { + SetPosition = (SetPositionMethodState)replacement; + } + } + } + + instance = SetPosition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_size; + private PropertyState m_writable; + private PropertyState m_userWritable; + private PropertyState m_openCount; + private PropertyState m_mimeType; + private OpenMethodState m_openMethod; + private CloseMethodState m_closeMethod; + private ReadMethodState m_readMethod; + private WriteMethodState m_writeMethod; + private GetPositionMethodState m_getPositionMethod; + private SetPositionMethodState m_setPositionMethod; + #endregion + } + #endif + #endregion + + #region AddressSpaceFileState Class + #if (!OPCUA_EXCLUDE_AddressSpaceFileState) + /// + /// Stores an instance of the AddressSpaceFileType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddressSpaceFileState : FileState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddressSpaceFileState(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(Opc.Ua.ObjectTypes.AddressSpaceFileType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ExportNamespace != null) + { + ExportNamespace.Initialize(context, ExportNamespace_InitializationString); + } + } + + #region Initialization String + private const string ExportNamespace_InitializationString = + "//////////8EYYIKBAAAAAAADwAAAEV4cG9ydE5hbWVzcGFjZQEAXy0ALwEAXy1fLQAAAQH/////AAAA" + + "AA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAEFkZHJlc3NTcGFjZUZpbGVUeXBlSW5zdGFuY2UBAEstAQBLLUst" + + "AAD/////CwAAABVgiQoCAAAAAAAEAAAAU2l6ZQEATC0ALgBETC0AAAAJ/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAFdyaXRhYmxlAQCQMQAuAESQMQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAA" + + "VXNlcldyaXRhYmxlAQCRMQAuAESRMQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAT3BlbkNv" + + "dW50AQBPLQAuAERPLQAAAAX/////AQH/////AAAAAARhggoEAAAAAAAEAAAAT3BlbgEAUC0ALwEAPC1Q" + + "LQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAFEtAC4ARFEtAACWAQAAAAEA" + + "KgEBEwAAAAQAAABNb2RlAAP/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAA" + + "AAAPAAAAT3V0cHV0QXJndW1lbnRzAQBSLQAuAERSLQAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRs" + + "ZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAENsb3NlAQBT" + + "LQAvAQA/LVMtAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAVC0ALgBEVC0A" + + "AJYBAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGGCCgQAAAAAAAQAAABSZWFkAQBVLQAvAQBBLVUtAAABAf////8CAAAAF2CpCgIAAAAAAA4A" + + "AABJbnB1dEFyZ3VtZW50cwEAVi0ALgBEVi0AAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB///" + + "//8AAAAAAAEAKgEBFQAAAAYAAABMZW5ndGgABv////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAFctAC4ARFctAACWAQAAAAEAKgEBEwAAAAQA" + + "AABEYXRhAA//////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAV3Jp" + + "dGUBAFgtAC8BAEQtWC0AAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBZLQAu" + + "AERZLQAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQETAAAABAAAAERh" + + "dGEAD/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABHZXRQb3Np" + + "dGlvbgEAWi0ALwEARi1aLQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAFst" + + "AC4ARFstAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQBcLQAuAERcLQAAlgEAAAAB" + + "ACoBARcAAAAIAAAAUG9zaXRpb24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGC" + + "CgQAAAAAAAsAAABTZXRQb3NpdGlvbgEAXS0ALwEASS1dLQAAAQH/////AQAAABdgqQoCAAAAAAAOAAAA" + + "SW5wdXRBcmd1bWVudHMBAF4tAC4ARF4tAACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////" + + "AAAAAAABACoBARcAAAAIAAAAUG9zaXRpb24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAABGGCCgQAAAAAAA8AAABFeHBvcnROYW1lc3BhY2UBAF8tAC8BAF8tXy0AAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public MethodState ExportNamespace + { + get + { + return m_exportNamespaceMethod; + } + + set + { + if (!Object.ReferenceEquals(m_exportNamespaceMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_exportNamespaceMethod = 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_exportNamespaceMethod != null) + { + children.Add(m_exportNamespaceMethod); + } + + 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 Opc.Ua.BrowseNames.ExportNamespace: + { + if (createOrReplace) + { + if (ExportNamespace == null) + { + if (replacement == null) + { + ExportNamespace = new MethodState(this); + } + else + { + ExportNamespace = (MethodState)replacement; + } + } + } + + instance = ExportNamespace; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private MethodState m_exportNamespaceMethod; + #endregion + } + #endif + #endregion + + #region NamespaceMetadataState Class + #if (!OPCUA_EXCLUDE_NamespaceMetadataState) + /// + /// Stores an instance of the NamespaceMetadataType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NamespaceMetadataState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NamespaceMetadataState(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(Opc.Ua.ObjectTypes.NamespaceMetadataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (NamespaceFile != null) + { + NamespaceFile.Initialize(context, NamespaceFile_InitializationString); + } + + if (DefaultRolePermissions != null) + { + DefaultRolePermissions.Initialize(context, DefaultRolePermissions_InitializationString); + } + + if (DefaultUserRolePermissions != null) + { + DefaultUserRolePermissions.Initialize(context, DefaultUserRolePermissions_InitializationString); + } + + if (DefaultAccessRestrictions != null) + { + DefaultAccessRestrictions.Initialize(context, DefaultAccessRestrictions_InitializationString); + } + } + + #region Initialization String + private const string NamespaceFile_InitializationString = + "//////////8EYIAKAQAAAAAADQAAAE5hbWVzcGFjZUZpbGUBAGgtAC8BAEstaC0AAP////8KAAAAFWCJ" + + "CgIAAAAAAAQAAABTaXplAQBpLQAuAERpLQAAAAn/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAV3Jp" + + "dGFibGUBAJIxAC4ARJIxAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABVc2VyV3JpdGFibGUB" + + "AJMxAC4ARJMxAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABPcGVuQ291bnQBAGwtAC4ARGwt" + + "AAAABf////8BAf////8AAAAABGGCCgQAAAAAAAQAAABPcGVuAQBtLQAvAQA8LW0tAAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAbi0ALgBEbi0AAJYBAAAAAQAqAQETAAAABAAAAE1v" + + "ZGUAA/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRB" + + "cmd1bWVudHMBAG8tAC4ARG8tAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAQ2xvc2UBAHAtAC8BAD8tcC0AAAEB" + + "/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBxLQAuAERxLQAAlgEAAAABACoBARkA" + + "AAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAA" + + "AAAABAAAAFJlYWQBAHItAC8BAEEtci0AAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1l" + + "bnRzAQBzLQAuAERzLQAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQEV" + + "AAAABgAAAExlbmd0aAAG/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAA" + + "DwAAAE91dHB1dEFyZ3VtZW50cwEAdC0ALgBEdC0AAJYBAAAAAQAqAQETAAAABAAAAERhdGEAD/////8A" + + "AAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABXcml0ZQEAdS0ALwEARC11" + + "LQAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAHYtAC4ARHYtAACWAgAAAAEA" + + "KgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAA" + + "AQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAEdldFBvc2l0aW9uAQB3LQAvAQBG" + + "LXctAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAeC0ALgBEeC0AAJYBAAAA" + + "AQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "F2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAHktAC4ARHktAACWAQAAAAEAKgEBFwAAAAgAAABQ" + + "b3NpdGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAFNl" + + "dFBvc2l0aW9uAQB6LQAvAQBJLXotAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEAey0ALgBEey0AAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFwAA" + + "AAgAAABQb3NpdGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string DefaultRolePermissions_InitializationString = + "//////////8XYIkKAgAAAAAAFgAAAERlZmF1bHRSb2xlUGVybWlzc2lvbnMBAAk/AC4ARAk/AAAAYAEA" + + "AAABAAAAAAAAAAEB/////wAAAAA="; + + private const string DefaultUserRolePermissions_InitializationString = + "//////////8XYIkKAgAAAAAAGgAAAERlZmF1bHRVc2VyUm9sZVBlcm1pc3Npb25zAQAKPwAuAEQKPwAA" + + "AGABAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string DefaultAccessRestrictions_InitializationString = + "//////////8VYIkKAgAAAAAAGQAAAERlZmF1bHRBY2Nlc3NSZXN0cmljdGlvbnMBAAs/AC4ARAs/AAAA" + + "X/////8BAf////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHQAAAE5hbWVzcGFjZU1ldGFkYXRhVHlwZUluc3RhbmNlAQBgLQEAYC1g" + + "LQAA/////wsAAAAVYIkKAgAAAAAADAAAAE5hbWVzcGFjZVVyaQEAYS0ALgBEYS0AAAAM/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAEAAAAE5hbWVzcGFjZVZlcnNpb24BAGItAC4ARGItAAAADP////8BAf////8A" + + "AAAAFWCJCgIAAAAAABgAAABOYW1lc3BhY2VQdWJsaWNhdGlvbkRhdGUBAGMtAC4ARGMtAAAADf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABEAAABJc05hbWVzcGFjZVN1YnNldAEAZC0ALgBEZC0AAAAB/////wEB" + + "/////wAAAAAXYIkKAgAAAAAAEQAAAFN0YXRpY05vZGVJZFR5cGVzAQBlLQAuAERlLQAAAQAAAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAAGAAAAFN0YXRpY051bWVyaWNOb2RlSWRSYW5nZQEAZi0A" + + "LgBEZi0AAAEAIwEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABkAAABTdGF0aWNTdHJpbmdO" + + "b2RlSWRQYXR0ZXJuAQBnLQAuAERnLQAAAAz/////AQH/////AAAAAARggAoBAAAAAAANAAAATmFtZXNw" + + "YWNlRmlsZQEAaC0ALwEASy1oLQAA/////woAAAAVYIkKAgAAAAAABAAAAFNpemUBAGktAC4ARGktAAAA" + + "Cf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABXcml0YWJsZQEAkjEALgBEkjEAAAAB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAADAAAAFVzZXJXcml0YWJsZQEAkzEALgBEkzEAAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACQAAAE9wZW5Db3VudAEAbC0ALgBEbC0AAAAF/////wEB/////wAAAAAEYYIKBAAAAAAA" + + "BAAAAE9wZW4BAG0tAC8BADwtbS0AAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRz" + + "AQBuLQAuAERuLQAAlgEAAAABACoBARMAAAAEAAAATW9kZQAD/////wAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAby0ALgBEby0AAJYBAAAAAQAq" + + "AQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGC" + + "CgQAAAAAAAUAAABDbG9zZQEAcC0ALwEAPy1wLQAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRB" + + "cmd1bWVudHMBAHEtAC4ARHEtAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAEAAAAUmVhZAEAci0ALwEAQS1yLQAAAQH/" + + "////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAHMtAC4ARHMtAACWAgAAAAEAKgEBGQAA" + + "AAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARUAAAAGAAAATGVuZ3RoAAb/////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQB0LQAuAER0" + + "LQAAlgEAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAAEYYIKBAAAAAAABQAAAFdyaXRlAQB1LQAvAQBELXUtAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJ" + + "bnB1dEFyZ3VtZW50cwEAdi0ALgBEdi0AAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8A" + + "AAAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARh" + + "ggoEAAAAAAALAAAAR2V0UG9zaXRpb24BAHctAC8BAEYtdy0AAAEB/////wIAAAAXYKkKAgAAAAAADgAA" + + "AElucHV0QXJndW1lbnRzAQB4LQAuAER4LQAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50" + + "cwEAeS0ALgBEeS0AAJYBAAAAAQAqAQEXAAAACAAAAFBvc2l0aW9uAAn/////AAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAAARhggoEAAAAAAALAAAAU2V0UG9zaXRpb24BAHotAC8BAEktei0AAAEB////" + + "/wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQB7LQAuAER7LQAAlgIAAAABACoBARkAAAAK" + + "AAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQEXAAAACAAAAFBvc2l0aW9uAAn/////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAWAAAARGVmYXVsdFJvbGVQZXJtaXNzaW9ucwEA" + + "CT8ALgBECT8AAABgAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAaAAAARGVmYXVsdFVzZXJS" + + "b2xlUGVybWlzc2lvbnMBAAo/AC4ARAo/AAAAYAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAA" + + "GQAAAERlZmF1bHRBY2Nlc3NSZXN0cmljdGlvbnMBAAs/AC4ARAs/AAAAX/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NamespaceUri + { + get + { + return m_namespaceUri; + } + + set + { + if (!Object.ReferenceEquals(m_namespaceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_namespaceUri = value; + } + } + + /// + public PropertyState NamespaceVersion + { + get + { + return m_namespaceVersion; + } + + set + { + if (!Object.ReferenceEquals(m_namespaceVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_namespaceVersion = value; + } + } + + /// + public PropertyState NamespacePublicationDate + { + get + { + return m_namespacePublicationDate; + } + + set + { + if (!Object.ReferenceEquals(m_namespacePublicationDate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_namespacePublicationDate = value; + } + } + + /// + public PropertyState IsNamespaceSubset + { + get + { + return m_isNamespaceSubset; + } + + set + { + if (!Object.ReferenceEquals(m_isNamespaceSubset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_isNamespaceSubset = value; + } + } + + /// + public PropertyState StaticNodeIdTypes + { + get + { + return m_staticNodeIdTypes; + } + + set + { + if (!Object.ReferenceEquals(m_staticNodeIdTypes, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_staticNodeIdTypes = value; + } + } + + /// + public PropertyState StaticNumericNodeIdRange + { + get + { + return m_staticNumericNodeIdRange; + } + + set + { + if (!Object.ReferenceEquals(m_staticNumericNodeIdRange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_staticNumericNodeIdRange = value; + } + } + + /// + public PropertyState StaticStringNodeIdPattern + { + get + { + return m_staticStringNodeIdPattern; + } + + set + { + if (!Object.ReferenceEquals(m_staticStringNodeIdPattern, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_staticStringNodeIdPattern = value; + } + } + + /// + public AddressSpaceFileState NamespaceFile + { + get + { + return m_namespaceFile; + } + + set + { + if (!Object.ReferenceEquals(m_namespaceFile, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_namespaceFile = value; + } + } + + /// + public PropertyState DefaultRolePermissions + { + get + { + return m_defaultRolePermissions; + } + + set + { + if (!Object.ReferenceEquals(m_defaultRolePermissions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultRolePermissions = value; + } + } + + /// + public PropertyState DefaultUserRolePermissions + { + get + { + return m_defaultUserRolePermissions; + } + + set + { + if (!Object.ReferenceEquals(m_defaultUserRolePermissions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultUserRolePermissions = value; + } + } + + /// + public PropertyState DefaultAccessRestrictions + { + get + { + return m_defaultAccessRestrictions; + } + + set + { + if (!Object.ReferenceEquals(m_defaultAccessRestrictions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultAccessRestrictions = 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_namespaceUri != null) + { + children.Add(m_namespaceUri); + } + + if (m_namespaceVersion != null) + { + children.Add(m_namespaceVersion); + } + + if (m_namespacePublicationDate != null) + { + children.Add(m_namespacePublicationDate); + } + + if (m_isNamespaceSubset != null) + { + children.Add(m_isNamespaceSubset); + } + + if (m_staticNodeIdTypes != null) + { + children.Add(m_staticNodeIdTypes); + } + + if (m_staticNumericNodeIdRange != null) + { + children.Add(m_staticNumericNodeIdRange); + } + + if (m_staticStringNodeIdPattern != null) + { + children.Add(m_staticStringNodeIdPattern); + } + + if (m_namespaceFile != null) + { + children.Add(m_namespaceFile); + } + + if (m_defaultRolePermissions != null) + { + children.Add(m_defaultRolePermissions); + } + + if (m_defaultUserRolePermissions != null) + { + children.Add(m_defaultUserRolePermissions); + } + + if (m_defaultAccessRestrictions != null) + { + children.Add(m_defaultAccessRestrictions); + } + + 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 Opc.Ua.BrowseNames.NamespaceUri: + { + if (createOrReplace) + { + if (NamespaceUri == null) + { + if (replacement == null) + { + NamespaceUri = new PropertyState(this); + } + else + { + NamespaceUri = (PropertyState)replacement; + } + } + } + + instance = NamespaceUri; + break; + } + + case Opc.Ua.BrowseNames.NamespaceVersion: + { + if (createOrReplace) + { + if (NamespaceVersion == null) + { + if (replacement == null) + { + NamespaceVersion = new PropertyState(this); + } + else + { + NamespaceVersion = (PropertyState)replacement; + } + } + } + + instance = NamespaceVersion; + break; + } + + case Opc.Ua.BrowseNames.NamespacePublicationDate: + { + if (createOrReplace) + { + if (NamespacePublicationDate == null) + { + if (replacement == null) + { + NamespacePublicationDate = new PropertyState(this); + } + else + { + NamespacePublicationDate = (PropertyState)replacement; + } + } + } + + instance = NamespacePublicationDate; + break; + } + + case Opc.Ua.BrowseNames.IsNamespaceSubset: + { + if (createOrReplace) + { + if (IsNamespaceSubset == null) + { + if (replacement == null) + { + IsNamespaceSubset = new PropertyState(this); + } + else + { + IsNamespaceSubset = (PropertyState)replacement; + } + } + } + + instance = IsNamespaceSubset; + break; + } + + case Opc.Ua.BrowseNames.StaticNodeIdTypes: + { + if (createOrReplace) + { + if (StaticNodeIdTypes == null) + { + if (replacement == null) + { + StaticNodeIdTypes = new PropertyState(this); + } + else + { + StaticNodeIdTypes = (PropertyState)replacement; + } + } + } + + instance = StaticNodeIdTypes; + break; + } + + case Opc.Ua.BrowseNames.StaticNumericNodeIdRange: + { + if (createOrReplace) + { + if (StaticNumericNodeIdRange == null) + { + if (replacement == null) + { + StaticNumericNodeIdRange = new PropertyState(this); + } + else + { + StaticNumericNodeIdRange = (PropertyState)replacement; + } + } + } + + instance = StaticNumericNodeIdRange; + break; + } + + case Opc.Ua.BrowseNames.StaticStringNodeIdPattern: + { + if (createOrReplace) + { + if (StaticStringNodeIdPattern == null) + { + if (replacement == null) + { + StaticStringNodeIdPattern = new PropertyState(this); + } + else + { + StaticStringNodeIdPattern = (PropertyState)replacement; + } + } + } + + instance = StaticStringNodeIdPattern; + break; + } + + case Opc.Ua.BrowseNames.NamespaceFile: + { + if (createOrReplace) + { + if (NamespaceFile == null) + { + if (replacement == null) + { + NamespaceFile = new AddressSpaceFileState(this); + } + else + { + NamespaceFile = (AddressSpaceFileState)replacement; + } + } + } + + instance = NamespaceFile; + break; + } + + case Opc.Ua.BrowseNames.DefaultRolePermissions: + { + if (createOrReplace) + { + if (DefaultRolePermissions == null) + { + if (replacement == null) + { + DefaultRolePermissions = new PropertyState(this); + } + else + { + DefaultRolePermissions = (PropertyState)replacement; + } + } + } + + instance = DefaultRolePermissions; + break; + } + + case Opc.Ua.BrowseNames.DefaultUserRolePermissions: + { + if (createOrReplace) + { + if (DefaultUserRolePermissions == null) + { + if (replacement == null) + { + DefaultUserRolePermissions = new PropertyState(this); + } + else + { + DefaultUserRolePermissions = (PropertyState)replacement; + } + } + } + + instance = DefaultUserRolePermissions; + break; + } + + case Opc.Ua.BrowseNames.DefaultAccessRestrictions: + { + if (createOrReplace) + { + if (DefaultAccessRestrictions == null) + { + if (replacement == null) + { + DefaultAccessRestrictions = new PropertyState(this); + } + else + { + DefaultAccessRestrictions = (PropertyState)replacement; + } + } + } + + instance = DefaultAccessRestrictions; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_namespaceUri; + private PropertyState m_namespaceVersion; + private PropertyState m_namespacePublicationDate; + private PropertyState m_isNamespaceSubset; + private PropertyState m_staticNodeIdTypes; + private PropertyState m_staticNumericNodeIdRange; + private PropertyState m_staticStringNodeIdPattern; + private AddressSpaceFileState m_namespaceFile; + private PropertyState m_defaultRolePermissions; + private PropertyState m_defaultUserRolePermissions; + private PropertyState m_defaultAccessRestrictions; + #endregion + } + #endif + #endregion + + #region NamespacesState Class + #if (!OPCUA_EXCLUDE_NamespacesState) + /// + /// Stores an instance of the NamespacesType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NamespacesState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NamespacesState(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(Opc.Ua.ObjectTypes.NamespacesType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFgAAAE5hbWVzcGFjZXNUeXBlSW5zdGFuY2UBAH0tAQB9LX0tAAD/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region BaseEventState Class + #if (!OPCUA_EXCLUDE_BaseEventState) + /// + /// Stores an instance of the BaseEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BaseEventState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BaseEventState(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(Opc.Ua.ObjectTypes.BaseEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (LocalTime != null) + { + LocalTime.Initialize(context, LocalTime_InitializationString); + } + } + + #region Initialization String + private const string LocalTime_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAExvY2FsVGltZQEAdgwALgBEdgwAAAEA0CL/////AQH/////AAAA" + + "AA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFQAAAEJhc2VFdmVudFR5cGVJbnN0YW5jZQEA+QcBAPkH+QcAAP////8J" + + "AAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQD6BwAuAET6BwAAAA//////AQH/////AAAAABVgiQoCAAAA" + + "AAAJAAAARXZlbnRUeXBlAQD7BwAuAET7BwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTm9kZQEA/AcALgBE/AcAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUB" + + "AP0HAC4ARP0HAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQD+BwAuAET+BwAAAQAm" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA/wcALgBE/wcAAAEAJgH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAJAAAATG9jYWxUaW1lAQB2DAAuAER2DAAAAQDQIv////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQACCAAuAEQCCAAAABX/////AQH/////AAAAABVgiQoCAAAA" + + "AAAIAAAAU2V2ZXJpdHkBAAMIAC4ARAMIAAAABf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EventId + { + get + { + return m_eventId; + } + + set + { + if (!Object.ReferenceEquals(m_eventId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eventId = value; + } + } + + /// + public PropertyState EventType + { + get + { + return m_eventType; + } + + set + { + if (!Object.ReferenceEquals(m_eventType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eventType = value; + } + } + + /// + public PropertyState SourceNode + { + get + { + return m_sourceNode; + } + + set + { + if (!Object.ReferenceEquals(m_sourceNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sourceNode = value; + } + } + + /// + public PropertyState SourceName + { + get + { + return m_sourceName; + } + + set + { + if (!Object.ReferenceEquals(m_sourceName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sourceName = value; + } + } + + /// + public PropertyState Time + { + get + { + return m_time; + } + + set + { + if (!Object.ReferenceEquals(m_time, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_time = value; + } + } + + /// + public PropertyState ReceiveTime + { + get + { + return m_receiveTime; + } + + set + { + if (!Object.ReferenceEquals(m_receiveTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_receiveTime = value; + } + } + + /// + public PropertyState LocalTime + { + get + { + return m_localTime; + } + + set + { + if (!Object.ReferenceEquals(m_localTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_localTime = value; + } + } + + /// + public PropertyState Message + { + get + { + return m_message; + } + + set + { + if (!Object.ReferenceEquals(m_message, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_message = value; + } + } + + /// + public PropertyState Severity + { + get + { + return m_severity; + } + + set + { + if (!Object.ReferenceEquals(m_severity, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_severity = 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_eventId != null) + { + children.Add(m_eventId); + } + + if (m_eventType != null) + { + children.Add(m_eventType); + } + + if (m_sourceNode != null) + { + children.Add(m_sourceNode); + } + + if (m_sourceName != null) + { + children.Add(m_sourceName); + } + + if (m_time != null) + { + children.Add(m_time); + } + + if (m_receiveTime != null) + { + children.Add(m_receiveTime); + } + + if (m_localTime != null) + { + children.Add(m_localTime); + } + + if (m_message != null) + { + children.Add(m_message); + } + + if (m_severity != null) + { + children.Add(m_severity); + } + + 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 Opc.Ua.BrowseNames.EventId: + { + if (createOrReplace) + { + if (EventId == null) + { + if (replacement == null) + { + EventId = new PropertyState(this); + } + else + { + EventId = (PropertyState)replacement; + } + } + } + + instance = EventId; + break; + } + + case Opc.Ua.BrowseNames.EventType: + { + if (createOrReplace) + { + if (EventType == null) + { + if (replacement == null) + { + EventType = new PropertyState(this); + } + else + { + EventType = (PropertyState)replacement; + } + } + } + + instance = EventType; + break; + } + + case Opc.Ua.BrowseNames.SourceNode: + { + if (createOrReplace) + { + if (SourceNode == null) + { + if (replacement == null) + { + SourceNode = new PropertyState(this); + } + else + { + SourceNode = (PropertyState)replacement; + } + } + } + + instance = SourceNode; + break; + } + + case Opc.Ua.BrowseNames.SourceName: + { + if (createOrReplace) + { + if (SourceName == null) + { + if (replacement == null) + { + SourceName = new PropertyState(this); + } + else + { + SourceName = (PropertyState)replacement; + } + } + } + + instance = SourceName; + break; + } + + case Opc.Ua.BrowseNames.Time: + { + if (createOrReplace) + { + if (Time == null) + { + if (replacement == null) + { + Time = new PropertyState(this); + } + else + { + Time = (PropertyState)replacement; + } + } + } + + instance = Time; + break; + } + + case Opc.Ua.BrowseNames.ReceiveTime: + { + if (createOrReplace) + { + if (ReceiveTime == null) + { + if (replacement == null) + { + ReceiveTime = new PropertyState(this); + } + else + { + ReceiveTime = (PropertyState)replacement; + } + } + } + + instance = ReceiveTime; + break; + } + + case Opc.Ua.BrowseNames.LocalTime: + { + if (createOrReplace) + { + if (LocalTime == null) + { + if (replacement == null) + { + LocalTime = new PropertyState(this); + } + else + { + LocalTime = (PropertyState)replacement; + } + } + } + + instance = LocalTime; + break; + } + + case Opc.Ua.BrowseNames.Message: + { + if (createOrReplace) + { + if (Message == null) + { + if (replacement == null) + { + Message = new PropertyState(this); + } + else + { + Message = (PropertyState)replacement; + } + } + } + + instance = Message; + break; + } + + case Opc.Ua.BrowseNames.Severity: + { + if (createOrReplace) + { + if (Severity == null) + { + if (replacement == null) + { + Severity = new PropertyState(this); + } + else + { + Severity = (PropertyState)replacement; + } + } + } + + instance = Severity; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_eventId; + private PropertyState m_eventType; + private PropertyState m_sourceNode; + private PropertyState m_sourceName; + private PropertyState m_time; + private PropertyState m_receiveTime; + private PropertyState m_localTime; + private PropertyState m_message; + private PropertyState m_severity; + #endregion + } + #endif + #endregion + + #region AuditEventState Class + #if (!OPCUA_EXCLUDE_AuditEventState) + /// + /// Stores an instance of the AuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditEventState(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(Opc.Ua.ObjectTypes.AuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFgAAAEF1ZGl0RXZlbnRUeXBlSW5zdGFuY2UBAAQIAQAECAQIAAD/////" + + "DQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAgAwALgBEgAwAAAAP/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACQAAAEV2ZW50VHlwZQEAgQwALgBEgQwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNv" + + "dXJjZU5vZGUBAIIMAC4ARIIMAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOYW1l" + + "AQCDDAAuAESDDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAhAwALgBEhAwAAAEA" + + "JgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAIUMAC4ARIUMAAABACYB////" + + "/wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAIcMAC4ARIcMAAAAFf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAgAAABTZXZlcml0eQEAiAwALgBEiAwAAAAF/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DwAAAEFjdGlvblRpbWVTdGFtcAEABQgALgBEBQgAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAG" + + "AAAAU3RhdHVzAQAGCAAuAEQGCAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2VydmVySWQB" + + "AAcIAC4ARAcIAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGllbnRBdWRpdEVudHJ5SWQB" + + "AAgIAC4ARAgIAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBAAkIAC4A" + + "RAkIAAAADP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ActionTimeStamp + { + get + { + return m_actionTimeStamp; + } + + set + { + if (!Object.ReferenceEquals(m_actionTimeStamp, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_actionTimeStamp = value; + } + } + + /// + public PropertyState Status + { + get + { + return m_status; + } + + set + { + if (!Object.ReferenceEquals(m_status, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_status = value; + } + } + + /// + public PropertyState ServerId + { + get + { + return m_serverId; + } + + set + { + if (!Object.ReferenceEquals(m_serverId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverId = value; + } + } + + /// + public PropertyState ClientAuditEntryId + { + get + { + return m_clientAuditEntryId; + } + + set + { + if (!Object.ReferenceEquals(m_clientAuditEntryId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientAuditEntryId = value; + } + } + + /// + public PropertyState ClientUserId + { + get + { + return m_clientUserId; + } + + set + { + if (!Object.ReferenceEquals(m_clientUserId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientUserId = 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_actionTimeStamp != null) + { + children.Add(m_actionTimeStamp); + } + + if (m_status != null) + { + children.Add(m_status); + } + + if (m_serverId != null) + { + children.Add(m_serverId); + } + + if (m_clientAuditEntryId != null) + { + children.Add(m_clientAuditEntryId); + } + + if (m_clientUserId != null) + { + children.Add(m_clientUserId); + } + + 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 Opc.Ua.BrowseNames.ActionTimeStamp: + { + if (createOrReplace) + { + if (ActionTimeStamp == null) + { + if (replacement == null) + { + ActionTimeStamp = new PropertyState(this); + } + else + { + ActionTimeStamp = (PropertyState)replacement; + } + } + } + + instance = ActionTimeStamp; + break; + } + + case Opc.Ua.BrowseNames.Status: + { + if (createOrReplace) + { + if (Status == null) + { + if (replacement == null) + { + Status = new PropertyState(this); + } + else + { + Status = (PropertyState)replacement; + } + } + } + + instance = Status; + break; + } + + case Opc.Ua.BrowseNames.ServerId: + { + if (createOrReplace) + { + if (ServerId == null) + { + if (replacement == null) + { + ServerId = new PropertyState(this); + } + else + { + ServerId = (PropertyState)replacement; + } + } + } + + instance = ServerId; + break; + } + + case Opc.Ua.BrowseNames.ClientAuditEntryId: + { + if (createOrReplace) + { + if (ClientAuditEntryId == null) + { + if (replacement == null) + { + ClientAuditEntryId = new PropertyState(this); + } + else + { + ClientAuditEntryId = (PropertyState)replacement; + } + } + } + + instance = ClientAuditEntryId; + break; + } + + case Opc.Ua.BrowseNames.ClientUserId: + { + if (createOrReplace) + { + if (ClientUserId == null) + { + if (replacement == null) + { + ClientUserId = new PropertyState(this); + } + else + { + ClientUserId = (PropertyState)replacement; + } + } + } + + instance = ClientUserId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_actionTimeStamp; + private PropertyState m_status; + private PropertyState m_serverId; + private PropertyState m_clientAuditEntryId; + private PropertyState m_clientUserId; + #endregion + } + #endif + #endregion + + #region AuditSecurityEventState Class + #if (!OPCUA_EXCLUDE_AuditSecurityEventState) + /// + /// Stores an instance of the AuditSecurityEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditSecurityEventState : AuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditSecurityEventState(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(Opc.Ua.ObjectTypes.AuditSecurityEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (StatusCodeId != null) + { + StatusCodeId.Initialize(context, StatusCodeId_InitializationString); + } + } + + #region Initialization String + private const string StatusCodeId_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAFN0YXR1c0NvZGVJZAEAz0QALgBEz0QAAAAT/////wEB/////wAA" + + "AAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHgAAAEF1ZGl0U2VjdXJpdHlFdmVudFR5cGVJbnN0YW5jZQEACggBAAoI" + + "CggAAP////8OAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCJDAAuAESJDAAAAA//////AQH/////AAAA" + + "ABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCKDAAuAESKDAAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTm9kZQEAiwwALgBEiwwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNv" + + "dXJjZU5hbWUBAIwMAC4ARIwMAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQCNDAAu" + + "AESNDAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAjgwALgBEjgwA" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAkAwALgBEkAwAAAAV/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCRDAAuAESRDAAAAAX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQCSDAAuAESSDAAAAQAmAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAYAAABTdGF0dXMBAJMMAC4ARJMMAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABT" + + "ZXJ2ZXJJZAEAlAwALgBElAwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1ZGl0" + + "RW50cnlJZAEAlQwALgBElQwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJ" + + "ZAEAlgwALgBElgwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAFN0YXR1c0NvZGVJZAEAz0QA" + + "LgBEz0QAAAAT/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState StatusCodeId + { + get + { + return m_statusCodeId; + } + + set + { + if (!Object.ReferenceEquals(m_statusCodeId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_statusCodeId = 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_statusCodeId != null) + { + children.Add(m_statusCodeId); + } + + 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 Opc.Ua.BrowseNames.StatusCodeId: + { + if (createOrReplace) + { + if (StatusCodeId == null) + { + if (replacement == null) + { + StatusCodeId = new PropertyState(this); + } + else + { + StatusCodeId = (PropertyState)replacement; + } + } + } + + instance = StatusCodeId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_statusCodeId; + #endregion + } + #endif + #endregion + + #region AuditChannelEventState Class + #if (!OPCUA_EXCLUDE_AuditChannelEventState) + /// + /// Stores an instance of the AuditChannelEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditChannelEventState : AuditSecurityEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditChannelEventState(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(Opc.Ua.ObjectTypes.AuditChannelEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAEF1ZGl0Q2hhbm5lbEV2ZW50VHlwZUluc3RhbmNlAQALCAEACwgL" + + "CAAA/////w4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAJcMAC4ARJcMAAAAD/////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAJgMAC4ARJgMAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOb2RlAQCZDAAuAESZDAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTmFtZQEAmgwALgBEmgwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAJsMAC4A" + + "RJsMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCcDAAuAEScDAAA" + + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCeDAAuAESeDAAAABX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAJ8MAC4ARJ8MAAAABf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAKAMAC4ARKAMAAABACYB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAABgAAAFN0YXR1cwEAoQwALgBEoQwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNl" + + "cnZlcklkAQCiDAAuAESiDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50QXVkaXRF" + + "bnRyeUlkAQCjDAAuAESjDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklk" + + "AQCkDAAuAESkDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAU2VjdXJlQ2hhbm5lbElkAQC5" + + "CgAuAES5CgAAAAz/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SecureChannelId + { + get + { + return m_secureChannelId; + } + + set + { + if (!Object.ReferenceEquals(m_secureChannelId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_secureChannelId = 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_secureChannelId != null) + { + children.Add(m_secureChannelId); + } + + 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 Opc.Ua.BrowseNames.SecureChannelId: + { + if (createOrReplace) + { + if (SecureChannelId == null) + { + if (replacement == null) + { + SecureChannelId = new PropertyState(this); + } + else + { + SecureChannelId = (PropertyState)replacement; + } + } + } + + instance = SecureChannelId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_secureChannelId; + #endregion + } + #endif + #endregion + + #region AuditOpenSecureChannelEventState Class + #if (!OPCUA_EXCLUDE_AuditOpenSecureChannelEventState) + /// + /// Stores an instance of the AuditOpenSecureChannelEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditOpenSecureChannelEventState : AuditChannelEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditOpenSecureChannelEventState(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(Opc.Ua.ObjectTypes.AuditOpenSecureChannelEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJwAAAEF1ZGl0T3BlblNlY3VyZUNoYW5uZWxFdmVudFR5cGVJbnN0YW5j" + + "ZQEADAgBAAwIDAgAAP////8UAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQClDAAuAESlDAAAAA//////" + + "AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCmDAAuAESmDAAAABH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEApwwALgBEpwwAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5hbWUBAKgMAC4ARKgMAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABU" + + "aW1lAQCpDAAuAESpDAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA" + + "qgwALgBEqgwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEArAwALgBErAwA" + + "AAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCtDAAuAEStDAAAAAX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQCuDAAuAESuDAAAAQAmAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAK8MAC4ARK8MAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAgAAABTZXJ2ZXJJZAEAsAwALgBEsAwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENs" + + "aWVudEF1ZGl0RW50cnlJZAEAsQwALgBEsQwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENs" + + "aWVudFVzZXJJZAEAsgwALgBEsgwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADwAAAFNlY3VyZUNo" + + "YW5uZWxJZAEAswwALgBEswwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAENsaWVudENlcnRp" + + "ZmljYXRlAQANCAAuAEQNCAAAAA//////AQH/////AAAAABVgiQoCAAAAAAAbAAAAQ2xpZW50Q2VydGlm" + + "aWNhdGVUaHVtYnByaW50AQC6CgAuAES6CgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVx" + + "dWVzdFR5cGUBAA4IAC4ARA4IAAABADsB/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAFNlY3VyaXR5" + + "UG9saWN5VXJpAQAPCAAuAEQPCAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAU2VjdXJpdHlN" + + "b2RlAQARCAAuAEQRCAAAAQAuAf////8BAf////8AAAAAFWCJCgIAAAAAABEAAABSZXF1ZXN0ZWRMaWZl" + + "dGltZQEAEggALgBEEggAAAEAIgH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ClientCertificate + { + get + { + return m_clientCertificate; + } + + set + { + if (!Object.ReferenceEquals(m_clientCertificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientCertificate = value; + } + } + + /// + public PropertyState ClientCertificateThumbprint + { + get + { + return m_clientCertificateThumbprint; + } + + set + { + if (!Object.ReferenceEquals(m_clientCertificateThumbprint, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientCertificateThumbprint = value; + } + } + + /// + public PropertyState RequestType + { + get + { + return m_requestType; + } + + set + { + if (!Object.ReferenceEquals(m_requestType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestType = value; + } + } + + /// + public PropertyState SecurityPolicyUri + { + get + { + return m_securityPolicyUri; + } + + set + { + if (!Object.ReferenceEquals(m_securityPolicyUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityPolicyUri = value; + } + } + + /// + public PropertyState SecurityMode + { + get + { + return m_securityMode; + } + + set + { + if (!Object.ReferenceEquals(m_securityMode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityMode = value; + } + } + + /// + public PropertyState RequestedLifetime + { + get + { + return m_requestedLifetime; + } + + set + { + if (!Object.ReferenceEquals(m_requestedLifetime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestedLifetime = 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_clientCertificate != null) + { + children.Add(m_clientCertificate); + } + + if (m_clientCertificateThumbprint != null) + { + children.Add(m_clientCertificateThumbprint); + } + + if (m_requestType != null) + { + children.Add(m_requestType); + } + + if (m_securityPolicyUri != null) + { + children.Add(m_securityPolicyUri); + } + + if (m_securityMode != null) + { + children.Add(m_securityMode); + } + + if (m_requestedLifetime != null) + { + children.Add(m_requestedLifetime); + } + + 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 Opc.Ua.BrowseNames.ClientCertificate: + { + if (createOrReplace) + { + if (ClientCertificate == null) + { + if (replacement == null) + { + ClientCertificate = new PropertyState(this); + } + else + { + ClientCertificate = (PropertyState)replacement; + } + } + } + + instance = ClientCertificate; + break; + } + + case Opc.Ua.BrowseNames.ClientCertificateThumbprint: + { + if (createOrReplace) + { + if (ClientCertificateThumbprint == null) + { + if (replacement == null) + { + ClientCertificateThumbprint = new PropertyState(this); + } + else + { + ClientCertificateThumbprint = (PropertyState)replacement; + } + } + } + + instance = ClientCertificateThumbprint; + break; + } + + case Opc.Ua.BrowseNames.RequestType: + { + if (createOrReplace) + { + if (RequestType == null) + { + if (replacement == null) + { + RequestType = new PropertyState(this); + } + else + { + RequestType = (PropertyState)replacement; + } + } + } + + instance = RequestType; + break; + } + + case Opc.Ua.BrowseNames.SecurityPolicyUri: + { + if (createOrReplace) + { + if (SecurityPolicyUri == null) + { + if (replacement == null) + { + SecurityPolicyUri = new PropertyState(this); + } + else + { + SecurityPolicyUri = (PropertyState)replacement; + } + } + } + + instance = SecurityPolicyUri; + break; + } + + case Opc.Ua.BrowseNames.SecurityMode: + { + if (createOrReplace) + { + if (SecurityMode == null) + { + if (replacement == null) + { + SecurityMode = new PropertyState(this); + } + else + { + SecurityMode = (PropertyState)replacement; + } + } + } + + instance = SecurityMode; + break; + } + + case Opc.Ua.BrowseNames.RequestedLifetime: + { + if (createOrReplace) + { + if (RequestedLifetime == null) + { + if (replacement == null) + { + RequestedLifetime = new PropertyState(this); + } + else + { + RequestedLifetime = (PropertyState)replacement; + } + } + } + + instance = RequestedLifetime; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_clientCertificate; + private PropertyState m_clientCertificateThumbprint; + private PropertyState m_requestType; + private PropertyState m_securityPolicyUri; + private PropertyState m_securityMode; + private PropertyState m_requestedLifetime; + #endregion + } + #endif + #endregion + + #region AuditSessionEventState Class + #if (!OPCUA_EXCLUDE_AuditSessionEventState) + /// + /// Stores an instance of the AuditSessionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditSessionEventState : AuditSecurityEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditSessionEventState(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(Opc.Ua.ObjectTypes.AuditSessionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAEF1ZGl0U2Vzc2lvbkV2ZW50VHlwZUluc3RhbmNlAQAVCAEAFQgV" + + "CAAA/////w4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBALQMAC4ARLQMAAAAD/////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAkAAABFdmVudFR5cGUBALUMAC4ARLUMAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOb2RlAQC2DAAuAES2DAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTmFtZQEAtwwALgBEtwwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBALgMAC4A" + + "RLgMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQC5DAAuAES5DAAA" + + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQC7DAAuAES7DAAAABX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBALwMAC4ARLwMAAAABf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAL0MAC4ARL0MAAABACYB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAABgAAAFN0YXR1cwEAvgwALgBEvgwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNl" + + "cnZlcklkAQC/DAAuAES/DAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50QXVkaXRF" + + "bnRyeUlkAQDADAAuAETADAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklk" + + "AQDBDAAuAETBDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAU2Vzc2lvbklkAQAWCAAuAEQW" + + "CAAAABH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SessionId + { + get + { + return m_sessionId; + } + + set + { + if (!Object.ReferenceEquals(m_sessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionId = 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_sessionId != null) + { + children.Add(m_sessionId); + } + + 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 Opc.Ua.BrowseNames.SessionId: + { + if (createOrReplace) + { + if (SessionId == null) + { + if (replacement == null) + { + SessionId = new PropertyState(this); + } + else + { + SessionId = (PropertyState)replacement; + } + } + } + + instance = SessionId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_sessionId; + #endregion + } + #endif + #endregion + + #region AuditCreateSessionEventState Class + #if (!OPCUA_EXCLUDE_AuditCreateSessionEventState) + /// + /// Stores an instance of the AuditCreateSessionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCreateSessionEventState : AuditSessionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCreateSessionEventState(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(Opc.Ua.ObjectTypes.AuditCreateSessionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEF1ZGl0Q3JlYXRlU2Vzc2lvbkV2ZW50VHlwZUluc3RhbmNlAQAX" + + "CAEAFwgXCAAA/////xIAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAMIMAC4ARMIMAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAMMMAC4ARMMMAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQDEDAAuAETEDAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAxQwALgBExQwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "AMYMAC4ARMYMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQDHDAAu" + + "AETHDAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDJDAAuAETJDAAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAMoMAC4ARMoMAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAMsMAC4ARMsMAAABACYB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAzAwALgBEzAwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CAAAAFNlcnZlcklkAQDNDAAuAETNDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50" + + "QXVkaXRFbnRyeUlkAQDODAAuAETODAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50" + + "VXNlcklkAQDPDAAuAETPDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAU2Vzc2lvbklkAQBN" + + "OAAuAERNOAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAU2VjdXJlQ2hhbm5lbElkAQAYCAAu" + + "AEQYCAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAARAAAAQ2xpZW50Q2VydGlmaWNhdGUBABkIAC4A" + + "RBkIAAAAD/////8BAf////8AAAAAFWCJCgIAAAAAABsAAABDbGllbnRDZXJ0aWZpY2F0ZVRodW1icHJp" + + "bnQBALsKAC4ARLsKAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABUAAABSZXZpc2VkU2Vzc2lvblRp" + + "bWVvdXQBABoIAC4ARBoIAAABACIB/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SecureChannelId + { + get + { + return m_secureChannelId; + } + + set + { + if (!Object.ReferenceEquals(m_secureChannelId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_secureChannelId = value; + } + } + + /// + public PropertyState ClientCertificate + { + get + { + return m_clientCertificate; + } + + set + { + if (!Object.ReferenceEquals(m_clientCertificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientCertificate = value; + } + } + + /// + public PropertyState ClientCertificateThumbprint + { + get + { + return m_clientCertificateThumbprint; + } + + set + { + if (!Object.ReferenceEquals(m_clientCertificateThumbprint, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientCertificateThumbprint = value; + } + } + + /// + public PropertyState RevisedSessionTimeout + { + get + { + return m_revisedSessionTimeout; + } + + set + { + if (!Object.ReferenceEquals(m_revisedSessionTimeout, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_revisedSessionTimeout = 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_secureChannelId != null) + { + children.Add(m_secureChannelId); + } + + if (m_clientCertificate != null) + { + children.Add(m_clientCertificate); + } + + if (m_clientCertificateThumbprint != null) + { + children.Add(m_clientCertificateThumbprint); + } + + if (m_revisedSessionTimeout != null) + { + children.Add(m_revisedSessionTimeout); + } + + 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 Opc.Ua.BrowseNames.SecureChannelId: + { + if (createOrReplace) + { + if (SecureChannelId == null) + { + if (replacement == null) + { + SecureChannelId = new PropertyState(this); + } + else + { + SecureChannelId = (PropertyState)replacement; + } + } + } + + instance = SecureChannelId; + break; + } + + case Opc.Ua.BrowseNames.ClientCertificate: + { + if (createOrReplace) + { + if (ClientCertificate == null) + { + if (replacement == null) + { + ClientCertificate = new PropertyState(this); + } + else + { + ClientCertificate = (PropertyState)replacement; + } + } + } + + instance = ClientCertificate; + break; + } + + case Opc.Ua.BrowseNames.ClientCertificateThumbprint: + { + if (createOrReplace) + { + if (ClientCertificateThumbprint == null) + { + if (replacement == null) + { + ClientCertificateThumbprint = new PropertyState(this); + } + else + { + ClientCertificateThumbprint = (PropertyState)replacement; + } + } + } + + instance = ClientCertificateThumbprint; + break; + } + + case Opc.Ua.BrowseNames.RevisedSessionTimeout: + { + if (createOrReplace) + { + if (RevisedSessionTimeout == null) + { + if (replacement == null) + { + RevisedSessionTimeout = new PropertyState(this); + } + else + { + RevisedSessionTimeout = (PropertyState)replacement; + } + } + } + + instance = RevisedSessionTimeout; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_secureChannelId; + private PropertyState m_clientCertificate; + private PropertyState m_clientCertificateThumbprint; + private PropertyState m_revisedSessionTimeout; + #endregion + } + #endif + #endregion + + #region AuditUrlMismatchEventState Class + #if (!OPCUA_EXCLUDE_AuditUrlMismatchEventState) + /// + /// Stores an instance of the AuditUrlMismatchEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditUrlMismatchEventState : AuditCreateSessionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditUrlMismatchEventState(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(Opc.Ua.ObjectTypes.AuditUrlMismatchEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAEF1ZGl0VXJsTWlzbWF0Y2hFdmVudFR5cGVJbnN0YW5jZQEAvAoB" + + "ALwKvAoAAP////8TAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQDRDAAuAETRDAAAAA//////AQH/////" + + "AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQDSDAAuAETSDAAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTm9kZQEA0wwALgBE0wwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5hbWUBANQMAC4ARNQMAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQDV" + + "DAAuAETVDAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA1gwALgBE" + + "1gwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEA2AwALgBE2AwAAAAV////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQDZDAAuAETZDAAAAAX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQDaDAAuAETaDAAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAYAAABTdGF0dXMBANsMAC4ARNsMAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgA" + + "AABTZXJ2ZXJJZAEA3AwALgBE3AwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1" + + "ZGl0RW50cnlJZAEA3QwALgBE3QwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVz" + + "ZXJJZAEA3gwALgBE3gwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAFNlc3Npb25JZAEATjgA" + + "LgBETjgAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAADwAAAFNlY3VyZUNoYW5uZWxJZAEA4AwALgBE" + + "4AwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAENsaWVudENlcnRpZmljYXRlAQDhDAAuAETh" + + "DAAAAA//////AQH/////AAAAABVgiQoCAAAAAAAbAAAAQ2xpZW50Q2VydGlmaWNhdGVUaHVtYnByaW50" + + "AQDiDAAuAETiDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAVAAAAUmV2aXNlZFNlc3Npb25UaW1l" + + "b3V0AQDjDAAuAETjDAAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABFbmRwb2ludFVybAEA" + + "vQoALgBEvQoAAAAM/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EndpointUrl + { + get + { + return m_endpointUrl; + } + + set + { + if (!Object.ReferenceEquals(m_endpointUrl, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_endpointUrl = 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_endpointUrl != null) + { + children.Add(m_endpointUrl); + } + + 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 Opc.Ua.BrowseNames.EndpointUrl: + { + if (createOrReplace) + { + if (EndpointUrl == null) + { + if (replacement == null) + { + EndpointUrl = new PropertyState(this); + } + else + { + EndpointUrl = (PropertyState)replacement; + } + } + } + + instance = EndpointUrl; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_endpointUrl; + #endregion + } + #endif + #endregion + + #region AuditActivateSessionEventState Class + #if (!OPCUA_EXCLUDE_AuditActivateSessionEventState) + /// + /// Stores an instance of the AuditActivateSessionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditActivateSessionEventState : AuditSessionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditActivateSessionEventState(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(Opc.Ua.ObjectTypes.AuditActivateSessionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAEF1ZGl0QWN0aXZhdGVTZXNzaW9uRXZlbnRUeXBlSW5zdGFuY2UB" + + "ABsIAQAbCBsIAAD/////EQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEA5AwALgBE5AwAAAAP/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEA5QwALgBE5QwAAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAOYMAC4AROYMAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOYW1lAQDnDAAuAETnDAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGlt" + + "ZQEA6AwALgBE6AwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAOkM" + + "AC4AROkMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAOsMAC4AROsMAAAA" + + "Ff////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEA7AwALgBE7AwAAAAF/////wEB////" + + "/wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEA7QwALgBE7QwAAAEAJgH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQDuDAAuAETuDAAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAIAAAAU2VydmVySWQBAO8MAC4ARO8MAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGll" + + "bnRBdWRpdEVudHJ5SWQBAPAMAC4ARPAMAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGll" + + "bnRVc2VySWQBAPEMAC4ARPEMAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABTZXNzaW9uSWQB" + + "APIMAC4ARPIMAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAABoAAABDbGllbnRTb2Z0d2FyZUNlcnRp" + + "ZmljYXRlcwEAHAgALgBEHAgAAAEAWAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABEAAABV" + + "c2VySWRlbnRpdHlUb2tlbgEAHQgALgBEHQgAAAEAPAH/////AQH/////AAAAABVgiQoCAAAAAAAPAAAA" + + "U2VjdXJlQ2hhbm5lbElkAQDdLAAuAETdLAAAAAz/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ClientSoftwareCertificates + { + get + { + return m_clientSoftwareCertificates; + } + + set + { + if (!Object.ReferenceEquals(m_clientSoftwareCertificates, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientSoftwareCertificates = value; + } + } + + /// + public PropertyState UserIdentityToken + { + get + { + return m_userIdentityToken; + } + + set + { + if (!Object.ReferenceEquals(m_userIdentityToken, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_userIdentityToken = value; + } + } + + /// + public PropertyState SecureChannelId + { + get + { + return m_secureChannelId; + } + + set + { + if (!Object.ReferenceEquals(m_secureChannelId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_secureChannelId = 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_clientSoftwareCertificates != null) + { + children.Add(m_clientSoftwareCertificates); + } + + if (m_userIdentityToken != null) + { + children.Add(m_userIdentityToken); + } + + if (m_secureChannelId != null) + { + children.Add(m_secureChannelId); + } + + 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 Opc.Ua.BrowseNames.ClientSoftwareCertificates: + { + if (createOrReplace) + { + if (ClientSoftwareCertificates == null) + { + if (replacement == null) + { + ClientSoftwareCertificates = new PropertyState(this); + } + else + { + ClientSoftwareCertificates = (PropertyState)replacement; + } + } + } + + instance = ClientSoftwareCertificates; + break; + } + + case Opc.Ua.BrowseNames.UserIdentityToken: + { + if (createOrReplace) + { + if (UserIdentityToken == null) + { + if (replacement == null) + { + UserIdentityToken = new PropertyState(this); + } + else + { + UserIdentityToken = (PropertyState)replacement; + } + } + } + + instance = UserIdentityToken; + break; + } + + case Opc.Ua.BrowseNames.SecureChannelId: + { + if (createOrReplace) + { + if (SecureChannelId == null) + { + if (replacement == null) + { + SecureChannelId = new PropertyState(this); + } + else + { + SecureChannelId = (PropertyState)replacement; + } + } + } + + instance = SecureChannelId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_clientSoftwareCertificates; + private PropertyState m_userIdentityToken; + private PropertyState m_secureChannelId; + #endregion + } + #endif + #endregion + + #region AuditCancelEventState Class + #if (!OPCUA_EXCLUDE_AuditCancelEventState) + /// + /// Stores an instance of the AuditCancelEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCancelEventState : AuditSessionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCancelEventState(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(Opc.Ua.ObjectTypes.AuditCancelEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHAAAAEF1ZGl0Q2FuY2VsRXZlbnRUeXBlSW5zdGFuY2UBAB4IAQAeCB4I" + + "AAD/////DwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEA8wwALgBE8wwAAAAP/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACQAAAEV2ZW50VHlwZQEA9AwALgBE9AwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5vZGUBAPUMAC4ARPUMAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOYW1lAQD2DAAuAET2DAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEA9wwALgBE" + + "9wwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAPgMAC4ARPgMAAAB" + + "ACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAPoMAC4ARPoMAAAAFf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEA+wwALgBE+wwAAAAF/////wEB/////wAAAAAVYIkK" + + "AgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEA/AwALgBE/AwAAAEAJgH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAGAAAAU3RhdHVzAQD9DAAuAET9DAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2Vy" + + "dmVySWQBAP4MAC4ARP4MAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGllbnRBdWRpdEVu" + + "dHJ5SWQBAP8MAC4ARP8MAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQB" + + "AAANAC4ARAANAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABTZXNzaW9uSWQBAAENAC4ARAEN" + + "AAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAA0AAABSZXF1ZXN0SGFuZGxlAQAfCAAuAEQfCAAAAAf/" + + "////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState RequestHandle + { + get + { + return m_requestHandle; + } + + set + { + if (!Object.ReferenceEquals(m_requestHandle, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestHandle = 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_requestHandle != null) + { + children.Add(m_requestHandle); + } + + 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 Opc.Ua.BrowseNames.RequestHandle: + { + if (createOrReplace) + { + if (RequestHandle == null) + { + if (replacement == null) + { + RequestHandle = new PropertyState(this); + } + else + { + RequestHandle = (PropertyState)replacement; + } + } + } + + instance = RequestHandle; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_requestHandle; + #endregion + } + #endif + #endregion + + #region AuditCertificateEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateEventState) + /// + /// Stores an instance of the AuditCertificateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateEventState : AuditSecurityEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateEventState(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(Opc.Ua.ObjectTypes.AuditCertificateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAEF1ZGl0Q2VydGlmaWNhdGVFdmVudFR5cGVJbnN0YW5jZQEAIAgB" + + "ACAIIAgAAP////8OAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQACDQAuAEQCDQAAAA//////AQH/////" + + "AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQADDQAuAEQDDQAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTm9kZQEABA0ALgBEBA0AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5hbWUBAAUNAC4ARAUNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQAG" + + "DQAuAEQGDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEABw0ALgBE" + + "Bw0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEACQ0ALgBECQ0AAAAV////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQAKDQAuAEQKDQAAAAX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQALDQAuAEQLDQAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAYAAABTdGF0dXMBAAwNAC4ARAwNAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgA" + + "AABTZXJ2ZXJJZAEADQ0ALgBEDQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1" + + "ZGl0RW50cnlJZAEADg0ALgBEDg0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVz" + + "ZXJJZAEADw0ALgBEDw0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAENlcnRpZmljYXRlAQAh" + + "CAAuAEQhCAAAAA//////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Certificate + { + get + { + return m_certificate; + } + + set + { + if (!Object.ReferenceEquals(m_certificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificate = 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_certificate != null) + { + children.Add(m_certificate); + } + + 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 Opc.Ua.BrowseNames.Certificate: + { + if (createOrReplace) + { + if (Certificate == null) + { + if (replacement == null) + { + Certificate = new PropertyState(this); + } + else + { + Certificate = (PropertyState)replacement; + } + } + } + + instance = Certificate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_certificate; + #endregion + } + #endif + #endregion + + #region AuditCertificateDataMismatchEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateDataMismatchEventState) + /// + /// Stores an instance of the AuditCertificateDataMismatchEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateDataMismatchEventState : AuditCertificateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateDataMismatchEventState(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(Opc.Ua.ObjectTypes.AuditCertificateDataMismatchEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALQAAAEF1ZGl0Q2VydGlmaWNhdGVEYXRhTWlzbWF0Y2hFdmVudFR5cGVJ" + + "bnN0YW5jZQEAIggBACIIIggAAP////8QAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQAQDQAuAEQQDQAA" + + "AA//////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQARDQAuAEQRDQAAABH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAEg0ALgBEEg0AAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACgAAAFNvdXJjZU5hbWUBABMNAC4ARBMNAAAADP////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAQAAABUaW1lAQAUDQAuAEQUDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZl" + + "VGltZQEAFQ0ALgBEFQ0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAFw0A" + + "LgBEFw0AAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQAYDQAuAEQYDQAAAAX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQAZDQAuAEQZDQAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBABoNAC4ARBoNAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAgAAABTZXJ2ZXJJZAEAGw0ALgBEGw0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EgAAAENsaWVudEF1ZGl0RW50cnlJZAEAHA0ALgBEHA0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DAAAAENsaWVudFVzZXJJZAEAHQ0ALgBEHQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAENl" + + "cnRpZmljYXRlAQAeDQAuAEQeDQAAAA//////AQH/////AAAAABVgiQoCAAAAAAAPAAAASW52YWxpZEhv" + + "c3RuYW1lAQAjCAAuAEQjCAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAKAAAASW52YWxpZFVyaQEA" + + "JAgALgBEJAgAAAAM/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState InvalidHostname + { + get + { + return m_invalidHostname; + } + + set + { + if (!Object.ReferenceEquals(m_invalidHostname, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_invalidHostname = value; + } + } + + /// + public PropertyState InvalidUri + { + get + { + return m_invalidUri; + } + + set + { + if (!Object.ReferenceEquals(m_invalidUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_invalidUri = 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_invalidHostname != null) + { + children.Add(m_invalidHostname); + } + + if (m_invalidUri != null) + { + children.Add(m_invalidUri); + } + + 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 Opc.Ua.BrowseNames.InvalidHostname: + { + if (createOrReplace) + { + if (InvalidHostname == null) + { + if (replacement == null) + { + InvalidHostname = new PropertyState(this); + } + else + { + InvalidHostname = (PropertyState)replacement; + } + } + } + + instance = InvalidHostname; + break; + } + + case Opc.Ua.BrowseNames.InvalidUri: + { + if (createOrReplace) + { + if (InvalidUri == null) + { + if (replacement == null) + { + InvalidUri = new PropertyState(this); + } + else + { + InvalidUri = (PropertyState)replacement; + } + } + } + + instance = InvalidUri; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_invalidHostname; + private PropertyState m_invalidUri; + #endregion + } + #endif + #endregion + + #region AuditCertificateExpiredEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateExpiredEventState) + /// + /// Stores an instance of the AuditCertificateExpiredEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateExpiredEventState : AuditCertificateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateExpiredEventState(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(Opc.Ua.ObjectTypes.AuditCertificateExpiredEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEF1ZGl0Q2VydGlmaWNhdGVFeHBpcmVkRXZlbnRUeXBlSW5zdGFu" + + "Y2UBACUIAQAlCCUIAAD/////DgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAHw0ALgBEHw0AAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAIA0ALgBEIA0AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBACENAC4ARCENAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQAiDQAuAEQiDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEAIw0ALgBEIw0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "ACQNAC4ARCQNAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBACYNAC4ARCYN" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAJw0ALgBEJw0AAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAKA0ALgBEKA0AAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQApDQAuAEQpDQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBACoNAC4ARCoNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBACsNAC4ARCsNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBACwNAC4ARCwNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABDZXJ0aWZp" + + "Y2F0ZQEALQ0ALgBELQ0AAAAP/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditCertificateInvalidEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateInvalidEventState) + /// + /// Stores an instance of the AuditCertificateInvalidEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateInvalidEventState : AuditCertificateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateInvalidEventState(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(Opc.Ua.ObjectTypes.AuditCertificateInvalidEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEF1ZGl0Q2VydGlmaWNhdGVJbnZhbGlkRXZlbnRUeXBlSW5zdGFu" + + "Y2UBACYIAQAmCCYIAAD/////DgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEALg0ALgBELg0AAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEALw0ALgBELw0AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBADANAC4ARDANAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQAxDQAuAEQxDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEAMg0ALgBEMg0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "ADMNAC4ARDMNAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBADUNAC4ARDUN" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEANg0ALgBENg0AAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEANw0ALgBENw0AAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQA4DQAuAEQ4DQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBADkNAC4ARDkNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBADoNAC4ARDoNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBADsNAC4ARDsNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABDZXJ0aWZp" + + "Y2F0ZQEAPA0ALgBEPA0AAAAP/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditCertificateUntrustedEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateUntrustedEventState) + /// + /// Stores an instance of the AuditCertificateUntrustedEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateUntrustedEventState : AuditCertificateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateUntrustedEventState(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(Opc.Ua.ObjectTypes.AuditCertificateUntrustedEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAEF1ZGl0Q2VydGlmaWNhdGVVbnRydXN0ZWRFdmVudFR5cGVJbnN0" + + "YW5jZQEAJwgBACcIJwgAAP////8OAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQA9DQAuAEQ9DQAAAA//" + + "////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQA+DQAuAEQ+DQAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAPw0ALgBEPw0AAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5hbWUBAEANAC4AREANAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQA" + + "AABUaW1lAQBBDQAuAERBDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGlt" + + "ZQEAQg0ALgBEQg0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEARA0ALgBE" + + "RA0AAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBFDQAuAERFDQAAAAX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQBGDQAuAERGDQAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAEcNAC4AREcNAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAgAAABTZXJ2ZXJJZAEASA0ALgBESA0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENsaWVudEF1ZGl0RW50cnlJZAEASQ0ALgBESQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAA" + + "AENsaWVudFVzZXJJZAEASg0ALgBESg0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAENlcnRp" + + "ZmljYXRlAQBLDQAuAERLDQAAAA//////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditCertificateRevokedEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateRevokedEventState) + /// + /// Stores an instance of the AuditCertificateRevokedEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateRevokedEventState : AuditCertificateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateRevokedEventState(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(Opc.Ua.ObjectTypes.AuditCertificateRevokedEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEF1ZGl0Q2VydGlmaWNhdGVSZXZva2VkRXZlbnRUeXBlSW5zdGFu" + + "Y2UBACgIAQAoCCgIAAD/////DgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEATA0ALgBETA0AAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEATQ0ALgBETQ0AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAE4NAC4ARE4NAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQBPDQAuAERPDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEAUA0ALgBEUA0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "AFENAC4ARFENAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAFMNAC4ARFMN" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAVA0ALgBEVA0AAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAVQ0ALgBEVQ0AAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQBWDQAuAERWDQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBAFcNAC4ARFcNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBAFgNAC4ARFgNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBAFkNAC4ARFkNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABDZXJ0aWZp" + + "Y2F0ZQEAWg0ALgBEWg0AAAAP/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditCertificateMismatchEventState Class + #if (!OPCUA_EXCLUDE_AuditCertificateMismatchEventState) + /// + /// Stores an instance of the AuditCertificateMismatchEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditCertificateMismatchEventState : AuditCertificateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditCertificateMismatchEventState(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(Opc.Ua.ObjectTypes.AuditCertificateMismatchEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKQAAAEF1ZGl0Q2VydGlmaWNhdGVNaXNtYXRjaEV2ZW50VHlwZUluc3Rh" + + "bmNlAQApCAEAKQgpCAAA/////w4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAFsNAC4ARFsNAAAAD///" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAFwNAC4ARFwNAAAAEf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQBdDQAuAERdDQAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTmFtZQEAXg0ALgBEXg0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAA" + + "AFRpbWUBAF8NAC4ARF8NAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1l" + + "AQBgDQAuAERgDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBiDQAuAERi" + + "DQAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAGMNAC4ARGMNAAAABf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAGQNAC4ARGQNAAABACYB/////wEB" + + "/////wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAZQ0ALgBEZQ0AAAAB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAFNlcnZlcklkAQBmDQAuAERmDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAA" + + "Q2xpZW50QXVkaXRFbnRyeUlkAQBnDQAuAERnDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAA" + + "Q2xpZW50VXNlcklkAQBoDQAuAERoDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAALAAAAQ2VydGlm" + + "aWNhdGUBAGkNAC4ARGkNAAAAD/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditNodeManagementEventState Class + #if (!OPCUA_EXCLUDE_AuditNodeManagementEventState) + /// + /// Stores an instance of the AuditNodeManagementEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditNodeManagementEventState : AuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditNodeManagementEventState(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(Opc.Ua.ObjectTypes.AuditNodeManagementEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAEF1ZGl0Tm9kZU1hbmFnZW1lbnRFdmVudFR5cGVJbnN0YW5jZQEA" + + "KggBACoIKggAAP////8NAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBqDQAuAERqDQAAAA//////AQH/" + + "////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBrDQAuAERrDQAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTm9kZQEAbA0ALgBEbA0AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5hbWUBAG0NAC4ARG0NAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1l" + + "AQBuDQAuAERuDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAbw0A" + + "LgBEbw0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAcQ0ALgBEcQ0AAAAV" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQByDQAuAERyDQAAAAX/////AQH/////" + + "AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQBzDQAuAERzDQAAAQAmAf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAHQNAC4ARHQNAAAAAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAgAAABTZXJ2ZXJJZAEAdQ0ALgBEdQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVu" + + "dEF1ZGl0RW50cnlJZAEAdg0ALgBEdg0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVu" + + "dFVzZXJJZAEAdw0ALgBEdw0AAAAM/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditAddNodesEventState Class + #if (!OPCUA_EXCLUDE_AuditAddNodesEventState) + /// + /// Stores an instance of the AuditAddNodesEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditAddNodesEventState : AuditNodeManagementEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditAddNodesEventState(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(Opc.Ua.ObjectTypes.AuditAddNodesEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHgAAAEF1ZGl0QWRkTm9kZXNFdmVudFR5cGVJbnN0YW5jZQEAKwgBACsI" + + "KwgAAP////8OAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQB4DQAuAER4DQAAAA//////AQH/////AAAA" + + "ABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQB5DQAuAER5DQAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTm9kZQEAeg0ALgBEeg0AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNv" + + "dXJjZU5hbWUBAHsNAC4ARHsNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQB8DQAu" + + "AER8DQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAfQ0ALgBEfQ0A" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAfw0ALgBEfw0AAAAV/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCADQAuAESADQAAAAX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQCBDQAuAESBDQAAAQAmAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAYAAABTdGF0dXMBAIINAC4ARIINAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABT" + + "ZXJ2ZXJJZAEAgw0ALgBEgw0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1ZGl0" + + "RW50cnlJZAEAhA0ALgBEhA0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJ" + + "ZAEAhQ0ALgBEhQ0AAAAM/////wEB/////wAAAAAXYIkKAgAAAAAACgAAAE5vZGVzVG9BZGQBACwIAC4A" + + "RCwIAAABAHgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NodesToAdd + { + get + { + return m_nodesToAdd; + } + + set + { + if (!Object.ReferenceEquals(m_nodesToAdd, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_nodesToAdd = 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_nodesToAdd != null) + { + children.Add(m_nodesToAdd); + } + + 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 Opc.Ua.BrowseNames.NodesToAdd: + { + if (createOrReplace) + { + if (NodesToAdd == null) + { + if (replacement == null) + { + NodesToAdd = new PropertyState(this); + } + else + { + NodesToAdd = (PropertyState)replacement; + } + } + } + + instance = NodesToAdd; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_nodesToAdd; + #endregion + } + #endif + #endregion + + #region AuditDeleteNodesEventState Class + #if (!OPCUA_EXCLUDE_AuditDeleteNodesEventState) + /// + /// Stores an instance of the AuditDeleteNodesEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditDeleteNodesEventState : AuditNodeManagementEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditDeleteNodesEventState(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(Opc.Ua.ObjectTypes.AuditDeleteNodesEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAEF1ZGl0RGVsZXRlTm9kZXNFdmVudFR5cGVJbnN0YW5jZQEALQgB" + + "AC0ILQgAAP////8OAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCGDQAuAESGDQAAAA//////AQH/////" + + "AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCHDQAuAESHDQAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTm9kZQEAiA0ALgBEiA0AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5hbWUBAIkNAC4ARIkNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQCK" + + "DQAuAESKDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAiw0ALgBE" + + "iw0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAjQ0ALgBEjQ0AAAAV////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCODQAuAESODQAAAAX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQCPDQAuAESPDQAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAYAAABTdGF0dXMBAJANAC4ARJANAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgA" + + "AABTZXJ2ZXJJZAEAkQ0ALgBEkQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1" + + "ZGl0RW50cnlJZAEAkg0ALgBEkg0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVz" + + "ZXJJZAEAkw0ALgBEkw0AAAAM/////wEB/////wAAAAAXYIkKAgAAAAAADQAAAE5vZGVzVG9EZWxldGUB" + + "AC4IAC4ARC4IAAABAH4BAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NodesToDelete + { + get + { + return m_nodesToDelete; + } + + set + { + if (!Object.ReferenceEquals(m_nodesToDelete, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_nodesToDelete = 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_nodesToDelete != null) + { + children.Add(m_nodesToDelete); + } + + 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 Opc.Ua.BrowseNames.NodesToDelete: + { + if (createOrReplace) + { + if (NodesToDelete == null) + { + if (replacement == null) + { + NodesToDelete = new PropertyState(this); + } + else + { + NodesToDelete = (PropertyState)replacement; + } + } + } + + instance = NodesToDelete; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_nodesToDelete; + #endregion + } + #endif + #endregion + + #region AuditAddReferencesEventState Class + #if (!OPCUA_EXCLUDE_AuditAddReferencesEventState) + /// + /// Stores an instance of the AuditAddReferencesEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditAddReferencesEventState : AuditNodeManagementEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditAddReferencesEventState(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(Opc.Ua.ObjectTypes.AuditAddReferencesEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEF1ZGl0QWRkUmVmZXJlbmNlc0V2ZW50VHlwZUluc3RhbmNlAQAv" + + "CAEALwgvCAAA/////w4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAJQNAC4ARJQNAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAJUNAC4ARJUNAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQCWDQAuAESWDQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAlw0ALgBElw0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "AJgNAC4ARJgNAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCZDQAu" + + "AESZDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCbDQAuAESbDQAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAJwNAC4ARJwNAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAJ0NAC4ARJ0NAAABACYB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAng0ALgBEng0AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CAAAAFNlcnZlcklkAQCfDQAuAESfDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50" + + "QXVkaXRFbnRyeUlkAQCgDQAuAESgDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50" + + "VXNlcklkAQChDQAuAEShDQAAAAz/////AQH/////AAAAABdgiQoCAAAAAAAPAAAAUmVmZXJlbmNlc1Rv" + + "QWRkAQAwCAAuAEQwCAAAAQB7AQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ReferencesToAdd + { + get + { + return m_referencesToAdd; + } + + set + { + if (!Object.ReferenceEquals(m_referencesToAdd, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_referencesToAdd = 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_referencesToAdd != null) + { + children.Add(m_referencesToAdd); + } + + 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 Opc.Ua.BrowseNames.ReferencesToAdd: + { + if (createOrReplace) + { + if (ReferencesToAdd == null) + { + if (replacement == null) + { + ReferencesToAdd = new PropertyState(this); + } + else + { + ReferencesToAdd = (PropertyState)replacement; + } + } + } + + instance = ReferencesToAdd; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_referencesToAdd; + #endregion + } + #endif + #endregion + + #region AuditDeleteReferencesEventState Class + #if (!OPCUA_EXCLUDE_AuditDeleteReferencesEventState) + /// + /// Stores an instance of the AuditDeleteReferencesEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditDeleteReferencesEventState : AuditNodeManagementEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditDeleteReferencesEventState(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(Opc.Ua.ObjectTypes.AuditDeleteReferencesEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEF1ZGl0RGVsZXRlUmVmZXJlbmNlc0V2ZW50VHlwZUluc3RhbmNl" + + "AQAxCAEAMQgxCAAA/////w4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAKINAC4ARKINAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAKMNAC4ARKMNAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQCkDQAuAESkDQAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEApQ0ALgBEpQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAKYNAC4ARKYNAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCn" + + "DQAuAESnDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCpDQAuAESpDQAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAKoNAC4ARKoNAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAKsNAC4ARKsNAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEArA0ALgBErA0AAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNlcnZlcklkAQCtDQAuAEStDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xp" + + "ZW50QXVkaXRFbnRyeUlkAQCuDQAuAESuDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQCvDQAuAESvDQAAAAz/////AQH/////AAAAABdgiQoCAAAAAAASAAAAUmVmZXJlbmNl" + + "c1RvRGVsZXRlAQAyCAAuAEQyCAAAAQCBAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ReferencesToDelete + { + get + { + return m_referencesToDelete; + } + + set + { + if (!Object.ReferenceEquals(m_referencesToDelete, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_referencesToDelete = 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_referencesToDelete != null) + { + children.Add(m_referencesToDelete); + } + + 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 Opc.Ua.BrowseNames.ReferencesToDelete: + { + if (createOrReplace) + { + if (ReferencesToDelete == null) + { + if (replacement == null) + { + ReferencesToDelete = new PropertyState(this); + } + else + { + ReferencesToDelete = (PropertyState)replacement; + } + } + } + + instance = ReferencesToDelete; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_referencesToDelete; + #endregion + } + #endif + #endregion + + #region AuditUpdateEventState Class + #if (!OPCUA_EXCLUDE_AuditUpdateEventState) + /// + /// Stores an instance of the AuditUpdateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditUpdateEventState : AuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditUpdateEventState(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(Opc.Ua.ObjectTypes.AuditUpdateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHAAAAEF1ZGl0VXBkYXRlRXZlbnRUeXBlSW5zdGFuY2UBADMIAQAzCDMI" + + "AAD/////DQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAsA0ALgBEsA0AAAAP/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAsQ0ALgBEsQ0AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5vZGUBALINAC4ARLINAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOYW1lAQCzDQAuAESzDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAtA0ALgBE" + + "tA0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBALUNAC4ARLUNAAAB" + + "ACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBALcNAC4ARLcNAAAAFf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAuA0ALgBEuA0AAAAF/////wEB/////wAAAAAVYIkK" + + "AgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAuQ0ALgBEuQ0AAAEAJgH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAGAAAAU3RhdHVzAQC6DQAuAES6DQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2Vy" + + "dmVySWQBALsNAC4ARLsNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGllbnRBdWRpdEVu" + + "dHJ5SWQBALwNAC4ARLwNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQB" + + "AL0NAC4ARL0NAAAADP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditWriteUpdateEventState Class + #if (!OPCUA_EXCLUDE_AuditWriteUpdateEventState) + /// + /// Stores an instance of the AuditWriteUpdateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditWriteUpdateEventState : AuditUpdateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditWriteUpdateEventState(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(Opc.Ua.ObjectTypes.AuditWriteUpdateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAEF1ZGl0V3JpdGVVcGRhdGVFdmVudFR5cGVJbnN0YW5jZQEANAgB" + + "ADQINAgAAP////8RAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQC+DQAuAES+DQAAAA//////AQH/////" + + "AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQC/DQAuAES/DQAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTm9kZQEAwA0ALgBEwA0AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5hbWUBAMENAC4ARMENAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQDC" + + "DQAuAETCDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAww0ALgBE" + + "ww0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAxQ0ALgBExQ0AAAAV////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQDGDQAuAETGDQAAAAX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQDHDQAuAETHDQAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAYAAABTdGF0dXMBAMgNAC4ARMgNAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgA" + + "AABTZXJ2ZXJJZAEAyQ0ALgBEyQ0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1" + + "ZGl0RW50cnlJZAEAyg0ALgBEyg0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVz" + + "ZXJJZAEAyw0ALgBEyw0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAEF0dHJpYnV0ZUlkAQC+" + + "CgAuAES+CgAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAKAAAASW5kZXhSYW5nZQEANQgALgBENQgA" + + "AAEAIwH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAT2xkVmFsdWUBADYIAC4ARDYIAAAAGP////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAgAAABOZXdWYWx1ZQEANwgALgBENwgAAAAY/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState AttributeId + { + get + { + return m_attributeId; + } + + set + { + if (!Object.ReferenceEquals(m_attributeId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_attributeId = value; + } + } + + /// + public PropertyState IndexRange + { + get + { + return m_indexRange; + } + + set + { + if (!Object.ReferenceEquals(m_indexRange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_indexRange = value; + } + } + + /// + public PropertyState OldValue + { + get + { + return m_oldValue; + } + + set + { + if (!Object.ReferenceEquals(m_oldValue, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValue = value; + } + } + + /// + public PropertyState NewValue + { + get + { + return m_newValue; + } + + set + { + if (!Object.ReferenceEquals(m_newValue, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_newValue = 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_attributeId != null) + { + children.Add(m_attributeId); + } + + if (m_indexRange != null) + { + children.Add(m_indexRange); + } + + if (m_oldValue != null) + { + children.Add(m_oldValue); + } + + if (m_newValue != null) + { + children.Add(m_newValue); + } + + 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 Opc.Ua.BrowseNames.AttributeId: + { + if (createOrReplace) + { + if (AttributeId == null) + { + if (replacement == null) + { + AttributeId = new PropertyState(this); + } + else + { + AttributeId = (PropertyState)replacement; + } + } + } + + instance = AttributeId; + break; + } + + case Opc.Ua.BrowseNames.IndexRange: + { + if (createOrReplace) + { + if (IndexRange == null) + { + if (replacement == null) + { + IndexRange = new PropertyState(this); + } + else + { + IndexRange = (PropertyState)replacement; + } + } + } + + instance = IndexRange; + break; + } + + case Opc.Ua.BrowseNames.OldValue: + { + if (createOrReplace) + { + if (OldValue == null) + { + if (replacement == null) + { + OldValue = new PropertyState(this); + } + else + { + OldValue = (PropertyState)replacement; + } + } + } + + instance = OldValue; + break; + } + + case Opc.Ua.BrowseNames.NewValue: + { + if (createOrReplace) + { + if (NewValue == null) + { + if (replacement == null) + { + NewValue = new PropertyState(this); + } + else + { + NewValue = (PropertyState)replacement; + } + } + } + + instance = NewValue; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_attributeId; + private PropertyState m_indexRange; + private PropertyState m_oldValue; + private PropertyState m_newValue; + #endregion + } + #endif + #endregion + + #region AuditHistoryUpdateEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryUpdateEventState) + /// + /// Stores an instance of the AuditHistoryUpdateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryUpdateEventState : AuditUpdateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryUpdateEventState(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(Opc.Ua.ObjectTypes.AuditHistoryUpdateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEF1ZGl0SGlzdG9yeVVwZGF0ZUV2ZW50VHlwZUluc3RhbmNlAQA4" + + "CAEAOAg4CAAA/////w4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAMwNAC4ARMwNAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAM0NAC4ARM0NAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQDODQAuAETODQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAzw0ALgBEzw0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "ANANAC4ARNANAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQDRDQAu" + + "AETRDQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDTDQAuAETTDQAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBANQNAC4ARNQNAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABANUNAC4ARNUNAAABACYB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABgAAAFN0YXR1cwEA1g0ALgBE1g0AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CAAAAFNlcnZlcklkAQDXDQAuAETXDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50" + + "QXVkaXRFbnRyeUlkAQDYDQAuAETYDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50" + + "VXNlcklkAQDZDQAuAETZDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAATAAAAUGFyYW1ldGVyRGF0" + + "YVR5cGVJZAEAvwoALgBEvwoAAAAR/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ParameterDataTypeId + { + get + { + return m_parameterDataTypeId; + } + + set + { + if (!Object.ReferenceEquals(m_parameterDataTypeId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_parameterDataTypeId = 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_parameterDataTypeId != null) + { + children.Add(m_parameterDataTypeId); + } + + 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 Opc.Ua.BrowseNames.ParameterDataTypeId: + { + if (createOrReplace) + { + if (ParameterDataTypeId == null) + { + if (replacement == null) + { + ParameterDataTypeId = new PropertyState(this); + } + else + { + ParameterDataTypeId = (PropertyState)replacement; + } + } + } + + instance = ParameterDataTypeId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_parameterDataTypeId; + #endregion + } + #endif + #endregion + + #region AuditUpdateMethodEventState Class + #if (!OPCUA_EXCLUDE_AuditUpdateMethodEventState) + /// + /// Stores an instance of the AuditUpdateMethodEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditUpdateMethodEventState : AuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditUpdateMethodEventState(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(Opc.Ua.ObjectTypes.AuditUpdateMethodEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAEF1ZGl0VXBkYXRlTWV0aG9kRXZlbnRUeXBlSW5zdGFuY2UBAE8I" + + "AQBPCE8IAAD/////DwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEANw4ALgBENw4AAAAP/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAOA4ALgBEOA4AAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5vZGUBADkOAC4ARDkOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABTb3VyY2VOYW1lAQA6DgAuAEQ6DgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEA" + + "Ow4ALgBEOw4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBADwOAC4A" + + "RDwOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAD4OAC4ARD4OAAAAFf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAPw4ALgBEPw4AAAAF/////wEB/////wAA" + + "AAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAQA4ALgBEQA4AAAEAJgH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAGAAAAU3RhdHVzAQBBDgAuAERBDgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAI" + + "AAAAU2VydmVySWQBAEIOAC4AREIOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGllbnRB" + + "dWRpdEVudHJ5SWQBAEMOAC4AREMOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRV" + + "c2VySWQBAEQOAC4AREQOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABNZXRob2RJZAEAUAgA" + + "LgBEUAgAAAAR/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBRCAAuAERR" + + "CAAAABgBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState MethodId + { + get + { + return m_methodId; + } + + set + { + if (!Object.ReferenceEquals(m_methodId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_methodId = value; + } + } + + /// + public PropertyState InputArguments + { + get + { + return m_inputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_inputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_inputArguments = 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_methodId != null) + { + children.Add(m_methodId); + } + + if (m_inputArguments != null) + { + children.Add(m_inputArguments); + } + + 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 Opc.Ua.BrowseNames.MethodId: + { + if (createOrReplace) + { + if (MethodId == null) + { + if (replacement == null) + { + MethodId = new PropertyState(this); + } + else + { + MethodId = (PropertyState)replacement; + } + } + } + + instance = MethodId; + break; + } + + case Opc.Ua.BrowseNames.InputArguments: + { + if (createOrReplace) + { + if (InputArguments == null) + { + if (replacement == null) + { + InputArguments = new PropertyState(this); + } + else + { + InputArguments = (PropertyState)replacement; + } + } + } + + instance = InputArguments; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_methodId; + private PropertyState m_inputArguments; + #endregion + } + #endif + #endregion + + #region SystemEventState Class + #if (!OPCUA_EXCLUDE_SystemEventState) + /// + /// Stores an instance of the SystemEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SystemEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SystemEventState(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(Opc.Ua.ObjectTypes.SystemEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFwAAAFN5c3RlbUV2ZW50VHlwZUluc3RhbmNlAQBSCAEAUghSCAAA////" + + "/wgAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAEUOAC4AREUOAAAAD/////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAkAAABFdmVudFR5cGUBAEYOAC4AREYOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABT" + + "b3VyY2VOb2RlAQBHDgAuAERHDgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTmFt" + + "ZQEASA4ALgBESA4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAEkOAC4AREkOAAAB" + + "ACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBKDgAuAERKDgAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBMDgAuAERMDgAAABX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAE0OAC4ARE0OAAAABf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DeviceFailureEventState Class + #if (!OPCUA_EXCLUDE_DeviceFailureEventState) + /// + /// Stores an instance of the DeviceFailureEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DeviceFailureEventState : SystemEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DeviceFailureEventState(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(Opc.Ua.ObjectTypes.DeviceFailureEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHgAAAERldmljZUZhaWx1cmVFdmVudFR5cGVJbnN0YW5jZQEAUwgBAFMI" + + "UwgAAP////8IAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBODgAuAERODgAAAA//////AQH/////AAAA" + + "ABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBPDgAuAERPDgAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTm9kZQEAUA4ALgBEUA4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNv" + + "dXJjZU5hbWUBAFEOAC4ARFEOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQBSDgAu" + + "AERSDgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAUw4ALgBEUw4A" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAVQ4ALgBEVQ4AAAAV/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBWDgAuAERWDgAAAAX/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SystemStatusChangeEventState Class + #if (!OPCUA_EXCLUDE_SystemStatusChangeEventState) + /// + /// Stores an instance of the SystemStatusChangeEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SystemStatusChangeEventState : SystemEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SystemStatusChangeEventState(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(Opc.Ua.ObjectTypes.SystemStatusChangeEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAFN5c3RlbVN0YXR1c0NoYW5nZUV2ZW50VHlwZUluc3RhbmNlAQC2" + + "LAEAtiy2LAAA/////wkAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBALcsAC4ARLcsAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBALgsAC4ARLgsAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQC5LAAuAES5LAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAuiwALgBEuiwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "ALssAC4ARLssAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQC8LAAu" + + "AES8LAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQC+LAAuAES+LAAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAL8sAC4ARL8sAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAsAAABTeXN0ZW1TdGF0ZQEAsC0ALgBEsC0AAAEAVAP/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SystemState + { + get + { + return m_systemState; + } + + set + { + if (!Object.ReferenceEquals(m_systemState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_systemState = 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_systemState != null) + { + children.Add(m_systemState); + } + + 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 Opc.Ua.BrowseNames.SystemState: + { + if (createOrReplace) + { + if (SystemState == null) + { + if (replacement == null) + { + SystemState = new PropertyState(this); + } + else + { + SystemState = (PropertyState)replacement; + } + } + } + + instance = SystemState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_systemState; + #endregion + } + #endif + #endregion + + #region BaseModelChangeEventState Class + #if (!OPCUA_EXCLUDE_BaseModelChangeEventState) + /// + /// Stores an instance of the BaseModelChangeEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BaseModelChangeEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BaseModelChangeEventState(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(Opc.Ua.ObjectTypes.BaseModelChangeEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAEJhc2VNb2RlbENoYW5nZUV2ZW50VHlwZUluc3RhbmNlAQBUCAEA" + + "VAhUCAAA/////wgAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAFcOAC4ARFcOAAAAD/////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAFgOAC4ARFgOAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOb2RlAQBZDgAuAERZDgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAA" + + "U291cmNlTmFtZQEAWg4ALgBEWg4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAFsO" + + "AC4ARFsOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBcDgAuAERc" + + "DgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBeDgAuAEReDgAAABX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAF8OAC4ARF8OAAAABf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region GeneralModelChangeEventState Class + #if (!OPCUA_EXCLUDE_GeneralModelChangeEventState) + /// + /// Stores an instance of the GeneralModelChangeEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GeneralModelChangeEventState : BaseModelChangeEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GeneralModelChangeEventState(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(Opc.Ua.ObjectTypes.GeneralModelChangeEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEdlbmVyYWxNb2RlbENoYW5nZUV2ZW50VHlwZUluc3RhbmNlAQBV" + + "CAEAVQhVCAAA/////wkAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAGAOAC4ARGAOAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAGEOAC4ARGEOAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQBiDgAuAERiDgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAYw4ALgBEYw4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "AGQOAC4ARGQOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBlDgAu" + + "AERlDgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBnDgAuAERnDgAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAGgOAC4ARGgOAAAABf////8BAf////8A" + + "AAAAF2CJCgIAAAAAAAcAAABDaGFuZ2VzAQBWCAAuAERWCAAAAQBtAwEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Changes + { + get + { + return m_changes; + } + + set + { + if (!Object.ReferenceEquals(m_changes, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_changes = 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_changes != null) + { + children.Add(m_changes); + } + + 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 Opc.Ua.BrowseNames.Changes: + { + if (createOrReplace) + { + if (Changes == null) + { + if (replacement == null) + { + Changes = new PropertyState(this); + } + else + { + Changes = (PropertyState)replacement; + } + } + } + + instance = Changes; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_changes; + #endregion + } + #endif + #endregion + + #region SemanticChangeEventState Class + #if (!OPCUA_EXCLUDE_SemanticChangeEventState) + /// + /// Stores an instance of the SemanticChangeEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SemanticChangeEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SemanticChangeEventState(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(Opc.Ua.ObjectTypes.SemanticChangeEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAFNlbWFudGljQ2hhbmdlRXZlbnRUeXBlSW5zdGFuY2UBALIKAQCy" + + "CrIKAAD/////CQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAaQ4ALgBEaQ4AAAAP/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAag4ALgBEag4AAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5vZGUBAGsOAC4ARGsOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABT" + + "b3VyY2VOYW1lAQBsDgAuAERsDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAbQ4A" + + "LgBEbQ4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAG4OAC4ARG4O" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAHAOAC4ARHAOAAAAFf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAcQ4ALgBEcQ4AAAAF/////wEB/////wAAAAAX" + + "YIkKAgAAAAAABwAAAENoYW5nZXMBALMKAC4ARLMKAAABAIEDAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Changes + { + get + { + return m_changes; + } + + set + { + if (!Object.ReferenceEquals(m_changes, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_changes = 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_changes != null) + { + children.Add(m_changes); + } + + 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 Opc.Ua.BrowseNames.Changes: + { + if (createOrReplace) + { + if (Changes == null) + { + if (replacement == null) + { + Changes = new PropertyState(this); + } + else + { + Changes = (PropertyState)replacement; + } + } + } + + instance = Changes; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_changes; + #endregion + } + #endif + #endregion + + #region EventQueueOverflowEventState Class + #if (!OPCUA_EXCLUDE_EventQueueOverflowEventState) + /// + /// Stores an instance of the EventQueueOverflowEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class EventQueueOverflowEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public EventQueueOverflowEventState(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(Opc.Ua.ObjectTypes.EventQueueOverflowEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEV2ZW50UXVldWVPdmVyZmxvd0V2ZW50VHlwZUluc3RhbmNlAQDb" + + "CwEA2wvbCwAA/////wgAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAHcMAC4ARHcMAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAHgMAC4ARHgMAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQB5DAAuAER5DAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAegwALgBEegwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "AHsMAC4ARHsMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQB8DAAu" + + "AER8DAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQB+DAAuAER+DAAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAH8MAC4ARH8MAAAABf////8BAf////8A" + + "AAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ProgressEventState Class + #if (!OPCUA_EXCLUDE_ProgressEventState) + /// + /// Stores an instance of the ProgressEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProgressEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProgressEventState(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(Opc.Ua.ObjectTypes.ProgressEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGQAAAFByb2dyZXNzRXZlbnRUeXBlSW5zdGFuY2UBAKwsAQCsLKwsAAD/" + + "////CgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEArSwALgBErSwAAAAP/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACQAAAEV2ZW50VHlwZQEAriwALgBEriwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5vZGUBAK8sAC4ARK8sAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VO" + + "YW1lAQCwLAAuAESwLAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAsSwALgBEsSwA" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBALIsAC4ARLIsAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBALQsAC4ARLQsAAAAFf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAtSwALgBEtSwAAAAF/////wEB/////wAAAAAVYIkKAgAA" + + "AAAABwAAAENvbnRleHQBANYwAC4ARNYwAAAAGP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABQcm9n" + + "cmVzcwEA1zAALgBE1zAAAAAF/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Context + { + get + { + return m_context; + } + + set + { + if (!Object.ReferenceEquals(m_context, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_context = value; + } + } + + /// + public PropertyState Progress + { + get + { + return m_progress; + } + + set + { + if (!Object.ReferenceEquals(m_progress, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_progress = 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_context != null) + { + children.Add(m_context); + } + + if (m_progress != null) + { + children.Add(m_progress); + } + + 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 Opc.Ua.BrowseNames.Context: + { + if (createOrReplace) + { + if (Context == null) + { + if (replacement == null) + { + Context = new PropertyState(this); + } + else + { + Context = (PropertyState)replacement; + } + } + } + + instance = Context; + break; + } + + case Opc.Ua.BrowseNames.Progress: + { + if (createOrReplace) + { + if (Progress == null) + { + if (replacement == null) + { + Progress = new PropertyState(this); + } + else + { + Progress = (PropertyState)replacement; + } + } + } + + instance = Progress; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_context; + private PropertyState m_progress; + #endregion + } + #endif + #endregion + + #region AggregateFunctionState Class + #if (!OPCUA_EXCLUDE_AggregateFunctionState) + /// + /// Stores an instance of the AggregateFunctionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AggregateFunctionState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AggregateFunctionState(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(Opc.Ua.ObjectTypes.AggregateFunctionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAEFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZUluc3RhbmNlAQAkCQEAJAkk" + + "CQAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ServerVendorCapabilityState Class + #if (!OPCUA_EXCLUDE_ServerVendorCapabilityState) + /// + /// Stores an instance of the ServerVendorCapabilityType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerVendorCapabilityState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerVendorCapabilityState(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(Opc.Ua.VariableTypes.ServerVendorCapabilityType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAIgAAAFNlcnZlclZlbmRvckNhcGFiaWxpdHlUeXBlSW5zdGFuY2UBAFkI" + + "AQBZCFkIAAAAGP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region ServerVendorCapabilityState Class + /// + /// A typed version of the ServerVendorCapabilityType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ServerVendorCapabilityState : ServerVendorCapabilityState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ServerVendorCapabilityState(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 ServerStatusState Class + #if (!OPCUA_EXCLUDE_ServerStatusState) + /// + /// Stores an instance of the ServerStatusType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerStatusState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerStatusState(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(Opc.Ua.VariableTypes.ServerStatusType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ServerStatusDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAGAAAAFNlcnZlclN0YXR1c1R5cGVJbnN0YW5jZQEAWggBAFoIWggAAAEA" + + "XgP/////AQH/////BgAAABVgiQoCAAAAAAAJAAAAU3RhcnRUaW1lAQBbCAAvAD9bCAAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAsAAABDdXJyZW50VGltZQEAXAgALwA/XAgAAAEAJgH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAFAAAAU3RhdGUBAF0IAC8AP10IAAABAFQD/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACQAAAEJ1aWxkSW5mbwEAXggALwEA6wteCAAAAQBSAf////8BAf////8GAAAAFXCJCgIAAAAAAAoA" + + "AABQcm9kdWN0VXJpAQByDgAvAD9yDgAAAAz/////AQEAAAAAAECPQP////8AAAAAFXCJCgIAAAAAABAA" + + "AABNYW51ZmFjdHVyZXJOYW1lAQBzDgAvAD9zDgAAAAz/////AQEAAAAAAECPQP////8AAAAAFXCJCgIA" + + "AAAAAAsAAABQcm9kdWN0TmFtZQEAdA4ALwA/dA4AAAAM/////wEBAAAAAABAj0D/////AAAAABVwiQoC" + + "AAAAAAAPAAAAU29mdHdhcmVWZXJzaW9uAQB1DgAvAD91DgAAAAz/////AQEAAAAAAECPQP////8AAAAA" + + "FXCJCgIAAAAAAAsAAABCdWlsZE51bWJlcgEAdg4ALwA/dg4AAAAM/////wEBAAAAAABAj0D/////AAAA" + + "ABVwiQoCAAAAAAAJAAAAQnVpbGREYXRlAQB3DgAvAD93DgAAAQAmAf////8BAQAAAAAAQI9A/////wAA" + + "AAAVYIkKAgAAAAAAEwAAAFNlY29uZHNUaWxsU2h1dGRvd24BAMAKAC8AP8AKAAAAB/////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA4AAABTaHV0ZG93blJlYXNvbgEAwQoALwA/wQoAAAAV/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState StartTime + { + get + { + return m_startTime; + } + + set + { + if (!Object.ReferenceEquals(m_startTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startTime = value; + } + } + + /// + public BaseDataVariableState CurrentTime + { + get + { + return m_currentTime; + } + + set + { + if (!Object.ReferenceEquals(m_currentTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentTime = value; + } + } + + /// + public BaseDataVariableState State + { + get + { + return m_state; + } + + set + { + if (!Object.ReferenceEquals(m_state, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_state = value; + } + } + + /// + public BuildInfoVariableState BuildInfo + { + get + { + return m_buildInfo; + } + + set + { + if (!Object.ReferenceEquals(m_buildInfo, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_buildInfo = value; + } + } + + /// + public BaseDataVariableState SecondsTillShutdown + { + get + { + return m_secondsTillShutdown; + } + + set + { + if (!Object.ReferenceEquals(m_secondsTillShutdown, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_secondsTillShutdown = value; + } + } + + /// + public BaseDataVariableState ShutdownReason + { + get + { + return m_shutdownReason; + } + + set + { + if (!Object.ReferenceEquals(m_shutdownReason, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_shutdownReason = 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_startTime != null) + { + children.Add(m_startTime); + } + + if (m_currentTime != null) + { + children.Add(m_currentTime); + } + + if (m_state != null) + { + children.Add(m_state); + } + + if (m_buildInfo != null) + { + children.Add(m_buildInfo); + } + + if (m_secondsTillShutdown != null) + { + children.Add(m_secondsTillShutdown); + } + + if (m_shutdownReason != null) + { + children.Add(m_shutdownReason); + } + + 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 Opc.Ua.BrowseNames.StartTime: + { + if (createOrReplace) + { + if (StartTime == null) + { + if (replacement == null) + { + StartTime = new BaseDataVariableState(this); + } + else + { + StartTime = (BaseDataVariableState)replacement; + } + } + } + + instance = StartTime; + break; + } + + case Opc.Ua.BrowseNames.CurrentTime: + { + if (createOrReplace) + { + if (CurrentTime == null) + { + if (replacement == null) + { + CurrentTime = new BaseDataVariableState(this); + } + else + { + CurrentTime = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentTime; + break; + } + + case Opc.Ua.BrowseNames.State: + { + if (createOrReplace) + { + if (State == null) + { + if (replacement == null) + { + State = new BaseDataVariableState(this); + } + else + { + State = (BaseDataVariableState)replacement; + } + } + } + + instance = State; + break; + } + + case Opc.Ua.BrowseNames.BuildInfo: + { + if (createOrReplace) + { + if (BuildInfo == null) + { + if (replacement == null) + { + BuildInfo = new BuildInfoVariableState(this); + } + else + { + BuildInfo = (BuildInfoVariableState)replacement; + } + } + } + + instance = BuildInfo; + break; + } + + case Opc.Ua.BrowseNames.SecondsTillShutdown: + { + if (createOrReplace) + { + if (SecondsTillShutdown == null) + { + if (replacement == null) + { + SecondsTillShutdown = new BaseDataVariableState(this); + } + else + { + SecondsTillShutdown = (BaseDataVariableState)replacement; + } + } + } + + instance = SecondsTillShutdown; + break; + } + + case Opc.Ua.BrowseNames.ShutdownReason: + { + if (createOrReplace) + { + if (ShutdownReason == null) + { + if (replacement == null) + { + ShutdownReason = new BaseDataVariableState(this); + } + else + { + ShutdownReason = (BaseDataVariableState)replacement; + } + } + } + + instance = ShutdownReason; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_startTime; + private BaseDataVariableState m_currentTime; + private BaseDataVariableState m_state; + private BuildInfoVariableState m_buildInfo; + private BaseDataVariableState m_secondsTillShutdown; + private BaseDataVariableState m_shutdownReason; + #endregion + } + + #region ServerStatusValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ServerStatusValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ServerStatusValue(ServerStatusState variable, ServerStatusDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ServerStatusDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ServerStatusState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ServerStatusDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ServerStatusState 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.StartTime; + instance.OnReadValue = OnRead_StartTime; + instance.OnSimpleWriteValue = OnWrite_StartTime; + updateList.Add(instance); + instance = m_variable.CurrentTime; + instance.OnReadValue = OnRead_CurrentTime; + instance.OnSimpleWriteValue = OnWrite_CurrentTime; + updateList.Add(instance); + instance = m_variable.State; + instance.OnReadValue = OnRead_State; + instance.OnSimpleWriteValue = OnWrite_State; + updateList.Add(instance); + instance = m_variable.BuildInfo; + instance.OnReadValue = OnRead_BuildInfo; + instance.OnSimpleWriteValue = OnWrite_BuildInfo; + updateList.Add(instance); + instance = m_variable.BuildInfo.ProductUri; + instance.OnReadValue = OnRead_BuildInfo_ProductUri; + instance.OnSimpleWriteValue = OnWrite_BuildInfo_ProductUri; + updateList.Add(instance); + instance = m_variable.BuildInfo.ManufacturerName; + instance.OnReadValue = OnRead_BuildInfo_ManufacturerName; + instance.OnSimpleWriteValue = OnWrite_BuildInfo_ManufacturerName; + updateList.Add(instance); + instance = m_variable.BuildInfo.ProductName; + instance.OnReadValue = OnRead_BuildInfo_ProductName; + instance.OnSimpleWriteValue = OnWrite_BuildInfo_ProductName; + updateList.Add(instance); + instance = m_variable.BuildInfo.SoftwareVersion; + instance.OnReadValue = OnRead_BuildInfo_SoftwareVersion; + instance.OnSimpleWriteValue = OnWrite_BuildInfo_SoftwareVersion; + updateList.Add(instance); + instance = m_variable.BuildInfo.BuildNumber; + instance.OnReadValue = OnRead_BuildInfo_BuildNumber; + instance.OnSimpleWriteValue = OnWrite_BuildInfo_BuildNumber; + updateList.Add(instance); + instance = m_variable.BuildInfo.BuildDate; + instance.OnReadValue = OnRead_BuildInfo_BuildDate; + instance.OnSimpleWriteValue = OnWrite_BuildInfo_BuildDate; + updateList.Add(instance); + instance = m_variable.SecondsTillShutdown; + instance.OnReadValue = OnRead_SecondsTillShutdown; + instance.OnSimpleWriteValue = OnWrite_SecondsTillShutdown; + updateList.Add(instance); + instance = m_variable.ShutdownReason; + instance.OnReadValue = OnRead_ShutdownReason; + instance.OnSimpleWriteValue = OnWrite_ShutdownReason; + 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 = (ServerStatusDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region StartTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_StartTime( + 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.StartTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_StartTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.StartTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentTime( + 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.CurrentTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region State Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_State( + 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.State; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_State(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.State = (ServerState)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo( + 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.BuildInfo; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo = (BuildInfo)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo_ProductUri Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo_ProductUri( + 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.BuildInfo.ProductUri; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo_ProductUri(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo.ProductUri = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo_ManufacturerName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo_ManufacturerName( + 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.BuildInfo.ManufacturerName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo_ManufacturerName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo.ManufacturerName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo_ProductName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo_ProductName( + 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.BuildInfo.ProductName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo_ProductName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo.ProductName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo_SoftwareVersion Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo_SoftwareVersion( + 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.BuildInfo.SoftwareVersion; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo_SoftwareVersion(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo.SoftwareVersion = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo_BuildNumber Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo_BuildNumber( + 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.BuildInfo.BuildNumber; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo_BuildNumber(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo.BuildNumber = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildInfo_BuildDate Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildInfo_BuildDate( + 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.BuildInfo.BuildDate; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildInfo_BuildDate(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildInfo.BuildDate = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SecondsTillShutdown Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SecondsTillShutdown( + 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.SecondsTillShutdown; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SecondsTillShutdown(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SecondsTillShutdown = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ShutdownReason Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ShutdownReason( + 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.ShutdownReason; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ShutdownReason(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ShutdownReason = (LocalizedText)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ServerStatusDataType m_value; + private ServerStatusState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region BuildInfoVariableState Class + #if (!OPCUA_EXCLUDE_BuildInfoVariableState) + /// + /// Stores an instance of the BuildInfoType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BuildInfoVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BuildInfoVariableState(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(Opc.Ua.VariableTypes.BuildInfoType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BuildInfo, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAFQAAAEJ1aWxkSW5mb1R5cGVJbnN0YW5jZQEA6wsBAOsL6wsAAAEAUgH/" + + "////AQH/////BgAAABVwiQoCAAAAAAAKAAAAUHJvZHVjdFVyaQEA7AsALwA/7AsAAAAM/////wEBAAAA" + + "AABAj0D/////AAAAABVwiQoCAAAAAAAQAAAATWFudWZhY3R1cmVyTmFtZQEA7QsALwA/7QsAAAAM////" + + "/wEBAAAAAABAj0D/////AAAAABVwiQoCAAAAAAALAAAAUHJvZHVjdE5hbWUBAO4LAC8AP+4LAAAADP//" + + "//8BAQAAAAAAQI9A/////wAAAAAVcIkKAgAAAAAADwAAAFNvZnR3YXJlVmVyc2lvbgEA7wsALwA/7wsA" + + "AAAM/////wEBAAAAAABAj0D/////AAAAABVwiQoCAAAAAAALAAAAQnVpbGROdW1iZXIBAPALAC8AP/AL" + + "AAAADP////8BAQAAAAAAQI9A/////wAAAAAVcIkKAgAAAAAACQAAAEJ1aWxkRGF0ZQEA8QsALwA/8QsA" + + "AAEAJgH/////AQEAAAAAAECPQP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState ProductUri + { + get + { + return m_productUri; + } + + set + { + if (!Object.ReferenceEquals(m_productUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_productUri = value; + } + } + + /// + public BaseDataVariableState ManufacturerName + { + get + { + return m_manufacturerName; + } + + set + { + if (!Object.ReferenceEquals(m_manufacturerName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_manufacturerName = value; + } + } + + /// + public BaseDataVariableState ProductName + { + get + { + return m_productName; + } + + set + { + if (!Object.ReferenceEquals(m_productName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_productName = value; + } + } + + /// + public BaseDataVariableState SoftwareVersion + { + get + { + return m_softwareVersion; + } + + set + { + if (!Object.ReferenceEquals(m_softwareVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_softwareVersion = value; + } + } + + /// + public BaseDataVariableState BuildNumber + { + get + { + return m_buildNumber; + } + + set + { + if (!Object.ReferenceEquals(m_buildNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_buildNumber = value; + } + } + + /// + public BaseDataVariableState BuildDate + { + get + { + return m_buildDate; + } + + set + { + if (!Object.ReferenceEquals(m_buildDate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_buildDate = 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_productUri != null) + { + children.Add(m_productUri); + } + + if (m_manufacturerName != null) + { + children.Add(m_manufacturerName); + } + + if (m_productName != null) + { + children.Add(m_productName); + } + + if (m_softwareVersion != null) + { + children.Add(m_softwareVersion); + } + + if (m_buildNumber != null) + { + children.Add(m_buildNumber); + } + + if (m_buildDate != null) + { + children.Add(m_buildDate); + } + + 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 Opc.Ua.BrowseNames.ProductUri: + { + if (createOrReplace) + { + if (ProductUri == null) + { + if (replacement == null) + { + ProductUri = new BaseDataVariableState(this); + } + else + { + ProductUri = (BaseDataVariableState)replacement; + } + } + } + + instance = ProductUri; + break; + } + + case Opc.Ua.BrowseNames.ManufacturerName: + { + if (createOrReplace) + { + if (ManufacturerName == null) + { + if (replacement == null) + { + ManufacturerName = new BaseDataVariableState(this); + } + else + { + ManufacturerName = (BaseDataVariableState)replacement; + } + } + } + + instance = ManufacturerName; + break; + } + + case Opc.Ua.BrowseNames.ProductName: + { + if (createOrReplace) + { + if (ProductName == null) + { + if (replacement == null) + { + ProductName = new BaseDataVariableState(this); + } + else + { + ProductName = (BaseDataVariableState)replacement; + } + } + } + + instance = ProductName; + break; + } + + case Opc.Ua.BrowseNames.SoftwareVersion: + { + if (createOrReplace) + { + if (SoftwareVersion == null) + { + if (replacement == null) + { + SoftwareVersion = new BaseDataVariableState(this); + } + else + { + SoftwareVersion = (BaseDataVariableState)replacement; + } + } + } + + instance = SoftwareVersion; + break; + } + + case Opc.Ua.BrowseNames.BuildNumber: + { + if (createOrReplace) + { + if (BuildNumber == null) + { + if (replacement == null) + { + BuildNumber = new BaseDataVariableState(this); + } + else + { + BuildNumber = (BaseDataVariableState)replacement; + } + } + } + + instance = BuildNumber; + break; + } + + case Opc.Ua.BrowseNames.BuildDate: + { + if (createOrReplace) + { + if (BuildDate == null) + { + if (replacement == null) + { + BuildDate = new BaseDataVariableState(this); + } + else + { + BuildDate = (BaseDataVariableState)replacement; + } + } + } + + instance = BuildDate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_productUri; + private BaseDataVariableState m_manufacturerName; + private BaseDataVariableState m_productName; + private BaseDataVariableState m_softwareVersion; + private BaseDataVariableState m_buildNumber; + private BaseDataVariableState m_buildDate; + #endregion + } + + #region BuildInfoVariableValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class BuildInfoVariableValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public BuildInfoVariableValue(BuildInfoVariableState variable, BuildInfo value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new BuildInfo(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public BuildInfoVariableState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public BuildInfo Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(BuildInfoVariableState 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.ProductUri; + instance.OnReadValue = OnRead_ProductUri; + instance.OnSimpleWriteValue = OnWrite_ProductUri; + updateList.Add(instance); + instance = m_variable.ManufacturerName; + instance.OnReadValue = OnRead_ManufacturerName; + instance.OnSimpleWriteValue = OnWrite_ManufacturerName; + updateList.Add(instance); + instance = m_variable.ProductName; + instance.OnReadValue = OnRead_ProductName; + instance.OnSimpleWriteValue = OnWrite_ProductName; + updateList.Add(instance); + instance = m_variable.SoftwareVersion; + instance.OnReadValue = OnRead_SoftwareVersion; + instance.OnSimpleWriteValue = OnWrite_SoftwareVersion; + updateList.Add(instance); + instance = m_variable.BuildNumber; + instance.OnReadValue = OnRead_BuildNumber; + instance.OnSimpleWriteValue = OnWrite_BuildNumber; + updateList.Add(instance); + instance = m_variable.BuildDate; + instance.OnReadValue = OnRead_BuildDate; + instance.OnSimpleWriteValue = OnWrite_BuildDate; + 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 = (BuildInfo)Write(value); + } + + return ServiceResult.Good; + } + + #region ProductUri Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ProductUri( + 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.ProductUri; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ProductUri(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ProductUri = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ManufacturerName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ManufacturerName( + 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.ManufacturerName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ManufacturerName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ManufacturerName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ProductName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ProductName( + 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.ProductName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ProductName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ProductName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SoftwareVersion Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SoftwareVersion( + 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.SoftwareVersion; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SoftwareVersion(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SoftwareVersion = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildNumber Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildNumber( + 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.BuildNumber; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildNumber(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildNumber = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BuildDate Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BuildDate( + 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.BuildDate; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BuildDate(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BuildDate = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private BuildInfo m_value; + private BuildInfoVariableState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region ServerDiagnosticsSummaryState Class + #if (!OPCUA_EXCLUDE_ServerDiagnosticsSummaryState) + /// + /// Stores an instance of the ServerDiagnosticsSummaryType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerDiagnosticsSummaryState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerDiagnosticsSummaryState(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(Opc.Ua.VariableTypes.ServerDiagnosticsSummaryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ServerDiagnosticsSummaryDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAJAAAAFNlcnZlckRpYWdub3N0aWNzU3VtbWFyeVR5cGVJbnN0YW5jZQEA" + + "ZggBAGYIZggAAAEAWwP/////AQH/////DAAAABVgiQoCAAAAAAAPAAAAU2VydmVyVmlld0NvdW50AQBn" + + "CAAvAD9nCAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAATAAAAQ3VycmVudFNlc3Npb25Db3VudAEA" + + "aAgALwA/aAgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAEN1bXVsYXRlZFNlc3Npb25Db3Vu" + + "dAEAaQgALwA/aQgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAHAAAAFNlY3VyaXR5UmVqZWN0ZWRT" + + "ZXNzaW9uQ291bnQBAGoIAC8AP2oIAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABQAAABSZWplY3Rl" + + "ZFNlc3Npb25Db3VudAEAawgALwA/awgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFNlc3Np" + + "b25UaW1lb3V0Q291bnQBAGwIAC8AP2wIAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABEAAABTZXNz" + + "aW9uQWJvcnRDb3VudAEAbQgALwA/bQgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAFwAAAFB1Ymxp" + + "c2hpbmdJbnRlcnZhbENvdW50AQBvCAAvAD9vCAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAYAAAA" + + "Q3VycmVudFN1YnNjcmlwdGlvbkNvdW50AQBwCAAvAD9wCAAAAAf/////AQH/////AAAAABVgiQoCAAAA" + + "AAAaAAAAQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291bnQBAHEIAC8AP3EIAAAAB/////8BAf////8AAAAA" + + "FWCJCgIAAAAAAB0AAABTZWN1cml0eVJlamVjdGVkUmVxdWVzdHNDb3VudAEAcggALwA/cggAAAAH////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFJlamVjdGVkUmVxdWVzdHNDb3VudAEAcwgALwA/cwgAAAAH" + + "/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState ServerViewCount + { + get + { + return m_serverViewCount; + } + + set + { + if (!Object.ReferenceEquals(m_serverViewCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverViewCount = value; + } + } + + /// + public BaseDataVariableState CurrentSessionCount + { + get + { + return m_currentSessionCount; + } + + set + { + if (!Object.ReferenceEquals(m_currentSessionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentSessionCount = value; + } + } + + /// + public BaseDataVariableState CumulatedSessionCount + { + get + { + return m_cumulatedSessionCount; + } + + set + { + if (!Object.ReferenceEquals(m_cumulatedSessionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_cumulatedSessionCount = value; + } + } + + /// + public BaseDataVariableState SecurityRejectedSessionCount + { + get + { + return m_securityRejectedSessionCount; + } + + set + { + if (!Object.ReferenceEquals(m_securityRejectedSessionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityRejectedSessionCount = value; + } + } + + /// + public BaseDataVariableState RejectedSessionCount + { + get + { + return m_rejectedSessionCount; + } + + set + { + if (!Object.ReferenceEquals(m_rejectedSessionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_rejectedSessionCount = value; + } + } + + /// + public BaseDataVariableState SessionTimeoutCount + { + get + { + return m_sessionTimeoutCount; + } + + set + { + if (!Object.ReferenceEquals(m_sessionTimeoutCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionTimeoutCount = value; + } + } + + /// + public BaseDataVariableState SessionAbortCount + { + get + { + return m_sessionAbortCount; + } + + set + { + if (!Object.ReferenceEquals(m_sessionAbortCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionAbortCount = value; + } + } + + /// + public BaseDataVariableState PublishingIntervalCount + { + get + { + return m_publishingIntervalCount; + } + + set + { + if (!Object.ReferenceEquals(m_publishingIntervalCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishingIntervalCount = value; + } + } + + /// + public BaseDataVariableState CurrentSubscriptionCount + { + get + { + return m_currentSubscriptionCount; + } + + set + { + if (!Object.ReferenceEquals(m_currentSubscriptionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentSubscriptionCount = value; + } + } + + /// + public BaseDataVariableState CumulatedSubscriptionCount + { + get + { + return m_cumulatedSubscriptionCount; + } + + set + { + if (!Object.ReferenceEquals(m_cumulatedSubscriptionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_cumulatedSubscriptionCount = value; + } + } + + /// + public BaseDataVariableState SecurityRejectedRequestsCount + { + get + { + return m_securityRejectedRequestsCount; + } + + set + { + if (!Object.ReferenceEquals(m_securityRejectedRequestsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityRejectedRequestsCount = value; + } + } + + /// + public BaseDataVariableState RejectedRequestsCount + { + get + { + return m_rejectedRequestsCount; + } + + set + { + if (!Object.ReferenceEquals(m_rejectedRequestsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_rejectedRequestsCount = 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_serverViewCount != null) + { + children.Add(m_serverViewCount); + } + + if (m_currentSessionCount != null) + { + children.Add(m_currentSessionCount); + } + + if (m_cumulatedSessionCount != null) + { + children.Add(m_cumulatedSessionCount); + } + + if (m_securityRejectedSessionCount != null) + { + children.Add(m_securityRejectedSessionCount); + } + + if (m_rejectedSessionCount != null) + { + children.Add(m_rejectedSessionCount); + } + + if (m_sessionTimeoutCount != null) + { + children.Add(m_sessionTimeoutCount); + } + + if (m_sessionAbortCount != null) + { + children.Add(m_sessionAbortCount); + } + + if (m_publishingIntervalCount != null) + { + children.Add(m_publishingIntervalCount); + } + + if (m_currentSubscriptionCount != null) + { + children.Add(m_currentSubscriptionCount); + } + + if (m_cumulatedSubscriptionCount != null) + { + children.Add(m_cumulatedSubscriptionCount); + } + + if (m_securityRejectedRequestsCount != null) + { + children.Add(m_securityRejectedRequestsCount); + } + + if (m_rejectedRequestsCount != null) + { + children.Add(m_rejectedRequestsCount); + } + + 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 Opc.Ua.BrowseNames.ServerViewCount: + { + if (createOrReplace) + { + if (ServerViewCount == null) + { + if (replacement == null) + { + ServerViewCount = new BaseDataVariableState(this); + } + else + { + ServerViewCount = (BaseDataVariableState)replacement; + } + } + } + + instance = ServerViewCount; + break; + } + + case Opc.Ua.BrowseNames.CurrentSessionCount: + { + if (createOrReplace) + { + if (CurrentSessionCount == null) + { + if (replacement == null) + { + CurrentSessionCount = new BaseDataVariableState(this); + } + else + { + CurrentSessionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentSessionCount; + break; + } + + case Opc.Ua.BrowseNames.CumulatedSessionCount: + { + if (createOrReplace) + { + if (CumulatedSessionCount == null) + { + if (replacement == null) + { + CumulatedSessionCount = new BaseDataVariableState(this); + } + else + { + CumulatedSessionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CumulatedSessionCount; + break; + } + + case Opc.Ua.BrowseNames.SecurityRejectedSessionCount: + { + if (createOrReplace) + { + if (SecurityRejectedSessionCount == null) + { + if (replacement == null) + { + SecurityRejectedSessionCount = new BaseDataVariableState(this); + } + else + { + SecurityRejectedSessionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SecurityRejectedSessionCount; + break; + } + + case Opc.Ua.BrowseNames.RejectedSessionCount: + { + if (createOrReplace) + { + if (RejectedSessionCount == null) + { + if (replacement == null) + { + RejectedSessionCount = new BaseDataVariableState(this); + } + else + { + RejectedSessionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RejectedSessionCount; + break; + } + + case Opc.Ua.BrowseNames.SessionTimeoutCount: + { + if (createOrReplace) + { + if (SessionTimeoutCount == null) + { + if (replacement == null) + { + SessionTimeoutCount = new BaseDataVariableState(this); + } + else + { + SessionTimeoutCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SessionTimeoutCount; + break; + } + + case Opc.Ua.BrowseNames.SessionAbortCount: + { + if (createOrReplace) + { + if (SessionAbortCount == null) + { + if (replacement == null) + { + SessionAbortCount = new BaseDataVariableState(this); + } + else + { + SessionAbortCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SessionAbortCount; + break; + } + + case Opc.Ua.BrowseNames.PublishingIntervalCount: + { + if (createOrReplace) + { + if (PublishingIntervalCount == null) + { + if (replacement == null) + { + PublishingIntervalCount = new BaseDataVariableState(this); + } + else + { + PublishingIntervalCount = (BaseDataVariableState)replacement; + } + } + } + + instance = PublishingIntervalCount; + break; + } + + case Opc.Ua.BrowseNames.CurrentSubscriptionCount: + { + if (createOrReplace) + { + if (CurrentSubscriptionCount == null) + { + if (replacement == null) + { + CurrentSubscriptionCount = new BaseDataVariableState(this); + } + else + { + CurrentSubscriptionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentSubscriptionCount; + break; + } + + case Opc.Ua.BrowseNames.CumulatedSubscriptionCount: + { + if (createOrReplace) + { + if (CumulatedSubscriptionCount == null) + { + if (replacement == null) + { + CumulatedSubscriptionCount = new BaseDataVariableState(this); + } + else + { + CumulatedSubscriptionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CumulatedSubscriptionCount; + break; + } + + case Opc.Ua.BrowseNames.SecurityRejectedRequestsCount: + { + if (createOrReplace) + { + if (SecurityRejectedRequestsCount == null) + { + if (replacement == null) + { + SecurityRejectedRequestsCount = new BaseDataVariableState(this); + } + else + { + SecurityRejectedRequestsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SecurityRejectedRequestsCount; + break; + } + + case Opc.Ua.BrowseNames.RejectedRequestsCount: + { + if (createOrReplace) + { + if (RejectedRequestsCount == null) + { + if (replacement == null) + { + RejectedRequestsCount = new BaseDataVariableState(this); + } + else + { + RejectedRequestsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RejectedRequestsCount; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_serverViewCount; + private BaseDataVariableState m_currentSessionCount; + private BaseDataVariableState m_cumulatedSessionCount; + private BaseDataVariableState m_securityRejectedSessionCount; + private BaseDataVariableState m_rejectedSessionCount; + private BaseDataVariableState m_sessionTimeoutCount; + private BaseDataVariableState m_sessionAbortCount; + private BaseDataVariableState m_publishingIntervalCount; + private BaseDataVariableState m_currentSubscriptionCount; + private BaseDataVariableState m_cumulatedSubscriptionCount; + private BaseDataVariableState m_securityRejectedRequestsCount; + private BaseDataVariableState m_rejectedRequestsCount; + #endregion + } + + #region ServerDiagnosticsSummaryValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ServerDiagnosticsSummaryValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ServerDiagnosticsSummaryValue(ServerDiagnosticsSummaryState variable, ServerDiagnosticsSummaryDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ServerDiagnosticsSummaryDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ServerDiagnosticsSummaryState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ServerDiagnosticsSummaryDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ServerDiagnosticsSummaryState 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.ServerViewCount; + instance.OnReadValue = OnRead_ServerViewCount; + instance.OnSimpleWriteValue = OnWrite_ServerViewCount; + updateList.Add(instance); + instance = m_variable.CurrentSessionCount; + instance.OnReadValue = OnRead_CurrentSessionCount; + instance.OnSimpleWriteValue = OnWrite_CurrentSessionCount; + updateList.Add(instance); + instance = m_variable.CumulatedSessionCount; + instance.OnReadValue = OnRead_CumulatedSessionCount; + instance.OnSimpleWriteValue = OnWrite_CumulatedSessionCount; + updateList.Add(instance); + instance = m_variable.SecurityRejectedSessionCount; + instance.OnReadValue = OnRead_SecurityRejectedSessionCount; + instance.OnSimpleWriteValue = OnWrite_SecurityRejectedSessionCount; + updateList.Add(instance); + instance = m_variable.RejectedSessionCount; + instance.OnReadValue = OnRead_RejectedSessionCount; + instance.OnSimpleWriteValue = OnWrite_RejectedSessionCount; + updateList.Add(instance); + instance = m_variable.SessionTimeoutCount; + instance.OnReadValue = OnRead_SessionTimeoutCount; + instance.OnSimpleWriteValue = OnWrite_SessionTimeoutCount; + updateList.Add(instance); + instance = m_variable.SessionAbortCount; + instance.OnReadValue = OnRead_SessionAbortCount; + instance.OnSimpleWriteValue = OnWrite_SessionAbortCount; + updateList.Add(instance); + instance = m_variable.CurrentSubscriptionCount; + instance.OnReadValue = OnRead_CurrentSubscriptionCount; + instance.OnSimpleWriteValue = OnWrite_CurrentSubscriptionCount; + updateList.Add(instance); + instance = m_variable.CumulatedSubscriptionCount; + instance.OnReadValue = OnRead_CumulatedSubscriptionCount; + instance.OnSimpleWriteValue = OnWrite_CumulatedSubscriptionCount; + updateList.Add(instance); + instance = m_variable.PublishingIntervalCount; + instance.OnReadValue = OnRead_PublishingIntervalCount; + instance.OnSimpleWriteValue = OnWrite_PublishingIntervalCount; + updateList.Add(instance); + instance = m_variable.SecurityRejectedRequestsCount; + instance.OnReadValue = OnRead_SecurityRejectedRequestsCount; + instance.OnSimpleWriteValue = OnWrite_SecurityRejectedRequestsCount; + updateList.Add(instance); + instance = m_variable.RejectedRequestsCount; + instance.OnReadValue = OnRead_RejectedRequestsCount; + instance.OnSimpleWriteValue = OnWrite_RejectedRequestsCount; + 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 = (ServerDiagnosticsSummaryDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region ServerViewCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ServerViewCount( + 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.ServerViewCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ServerViewCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ServerViewCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentSessionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentSessionCount( + 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.CurrentSessionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentSessionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentSessionCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CumulatedSessionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CumulatedSessionCount( + 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.CumulatedSessionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CumulatedSessionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CumulatedSessionCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SecurityRejectedSessionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SecurityRejectedSessionCount( + 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.SecurityRejectedSessionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SecurityRejectedSessionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SecurityRejectedSessionCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RejectedSessionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RejectedSessionCount( + 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.RejectedSessionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RejectedSessionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RejectedSessionCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SessionTimeoutCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SessionTimeoutCount( + 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.SessionTimeoutCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SessionTimeoutCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SessionTimeoutCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SessionAbortCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SessionAbortCount( + 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.SessionAbortCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SessionAbortCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SessionAbortCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentSubscriptionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentSubscriptionCount( + 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.CurrentSubscriptionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentSubscriptionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentSubscriptionCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CumulatedSubscriptionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CumulatedSubscriptionCount( + 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.CumulatedSubscriptionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CumulatedSubscriptionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CumulatedSubscriptionCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region PublishingIntervalCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_PublishingIntervalCount( + 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.PublishingIntervalCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_PublishingIntervalCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.PublishingIntervalCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SecurityRejectedRequestsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SecurityRejectedRequestsCount( + 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.SecurityRejectedRequestsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SecurityRejectedRequestsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SecurityRejectedRequestsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RejectedRequestsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RejectedRequestsCount( + 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.RejectedRequestsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RejectedRequestsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RejectedRequestsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ServerDiagnosticsSummaryDataType m_value; + private ServerDiagnosticsSummaryState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region SamplingIntervalDiagnosticsArrayState Class + #if (!OPCUA_EXCLUDE_SamplingIntervalDiagnosticsArrayState) + /// + /// Stores an instance of the SamplingIntervalDiagnosticsArrayType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SamplingIntervalDiagnosticsArrayState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SamplingIntervalDiagnosticsArrayState(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(Opc.Ua.VariableTypes.SamplingIntervalDiagnosticsArrayType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SamplingIntervalDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.OneDimension; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAALAAAAFNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0FycmF5VHlwZUlu" + + "c3RhbmNlAQB0CAEAdAh0CAAAAQBYAwEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SamplingIntervalDiagnosticsState Class + #if (!OPCUA_EXCLUDE_SamplingIntervalDiagnosticsState) + /// + /// Stores an instance of the SamplingIntervalDiagnosticsType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SamplingIntervalDiagnosticsState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SamplingIntervalDiagnosticsState(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(Opc.Ua.VariableTypes.SamplingIntervalDiagnosticsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SamplingIntervalDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAJwAAAFNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc1R5cGVJbnN0YW5j" + + "ZQEAdQgBAHUIdQgAAAEAWAP/////AQH/////BAAAABVgiQoCAAAAAAAQAAAAU2FtcGxpbmdJbnRlcnZh" + + "bAEAdggALwA/dggAAAEAIgH/////AQH/////AAAAABVgiQoCAAAAAAAaAAAAU2FtcGxlZE1vbml0b3Jl" + + "ZEl0ZW1zQ291bnQBALEtAC8AP7EtAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAAB0AAABNYXhTYW1w" + + "bGVkTW9uaXRvcmVkSXRlbXNDb3VudAEAsi0ALwA/si0AAAAH/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "IwAAAERpc2FibGVkTW9uaXRvcmVkSXRlbXNTYW1wbGluZ0NvdW50AQCzLQAvAD+zLQAAAAf/////AQH/" + + "////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState SamplingInterval + { + get + { + return m_samplingInterval; + } + + set + { + if (!Object.ReferenceEquals(m_samplingInterval, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_samplingInterval = value; + } + } + + /// + public BaseDataVariableState SampledMonitoredItemsCount + { + get + { + return m_sampledMonitoredItemsCount; + } + + set + { + if (!Object.ReferenceEquals(m_sampledMonitoredItemsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sampledMonitoredItemsCount = value; + } + } + + /// + public BaseDataVariableState MaxSampledMonitoredItemsCount + { + get + { + return m_maxSampledMonitoredItemsCount; + } + + set + { + if (!Object.ReferenceEquals(m_maxSampledMonitoredItemsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxSampledMonitoredItemsCount = value; + } + } + + /// + public BaseDataVariableState DisabledMonitoredItemsSamplingCount + { + get + { + return m_disabledMonitoredItemsSamplingCount; + } + + set + { + if (!Object.ReferenceEquals(m_disabledMonitoredItemsSamplingCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_disabledMonitoredItemsSamplingCount = 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_samplingInterval != null) + { + children.Add(m_samplingInterval); + } + + if (m_sampledMonitoredItemsCount != null) + { + children.Add(m_sampledMonitoredItemsCount); + } + + if (m_maxSampledMonitoredItemsCount != null) + { + children.Add(m_maxSampledMonitoredItemsCount); + } + + if (m_disabledMonitoredItemsSamplingCount != null) + { + children.Add(m_disabledMonitoredItemsSamplingCount); + } + + 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 Opc.Ua.BrowseNames.SamplingInterval: + { + if (createOrReplace) + { + if (SamplingInterval == null) + { + if (replacement == null) + { + SamplingInterval = new BaseDataVariableState(this); + } + else + { + SamplingInterval = (BaseDataVariableState)replacement; + } + } + } + + instance = SamplingInterval; + break; + } + + case Opc.Ua.BrowseNames.SampledMonitoredItemsCount: + { + if (createOrReplace) + { + if (SampledMonitoredItemsCount == null) + { + if (replacement == null) + { + SampledMonitoredItemsCount = new BaseDataVariableState(this); + } + else + { + SampledMonitoredItemsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SampledMonitoredItemsCount; + break; + } + + case Opc.Ua.BrowseNames.MaxSampledMonitoredItemsCount: + { + if (createOrReplace) + { + if (MaxSampledMonitoredItemsCount == null) + { + if (replacement == null) + { + MaxSampledMonitoredItemsCount = new BaseDataVariableState(this); + } + else + { + MaxSampledMonitoredItemsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = MaxSampledMonitoredItemsCount; + break; + } + + case Opc.Ua.BrowseNames.DisabledMonitoredItemsSamplingCount: + { + if (createOrReplace) + { + if (DisabledMonitoredItemsSamplingCount == null) + { + if (replacement == null) + { + DisabledMonitoredItemsSamplingCount = new BaseDataVariableState(this); + } + else + { + DisabledMonitoredItemsSamplingCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DisabledMonitoredItemsSamplingCount; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_samplingInterval; + private BaseDataVariableState m_sampledMonitoredItemsCount; + private BaseDataVariableState m_maxSampledMonitoredItemsCount; + private BaseDataVariableState m_disabledMonitoredItemsSamplingCount; + #endregion + } + + #region SamplingIntervalDiagnosticsValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class SamplingIntervalDiagnosticsValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public SamplingIntervalDiagnosticsValue(SamplingIntervalDiagnosticsState variable, SamplingIntervalDiagnosticsDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new SamplingIntervalDiagnosticsDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public SamplingIntervalDiagnosticsState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public SamplingIntervalDiagnosticsDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(SamplingIntervalDiagnosticsState 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.SamplingInterval; + instance.OnReadValue = OnRead_SamplingInterval; + instance.OnSimpleWriteValue = OnWrite_SamplingInterval; + 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 = (SamplingIntervalDiagnosticsDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region SamplingInterval Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SamplingInterval( + 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.SamplingInterval; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SamplingInterval(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SamplingInterval = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private SamplingIntervalDiagnosticsDataType m_value; + private SamplingIntervalDiagnosticsState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region SubscriptionDiagnosticsArrayState Class + #if (!OPCUA_EXCLUDE_SubscriptionDiagnosticsArrayState) + /// + /// Stores an instance of the SubscriptionDiagnosticsArrayType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SubscriptionDiagnosticsArrayState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SubscriptionDiagnosticsArrayState(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(Opc.Ua.VariableTypes.SubscriptionDiagnosticsArrayType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SubscriptionDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.OneDimension; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAAKAAAAFN1YnNjcmlwdGlvbkRpYWdub3N0aWNzQXJyYXlUeXBlSW5zdGFu" + + "Y2UBAHsIAQB7CHsIAAABAGoDAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SubscriptionDiagnosticsState Class + #if (!OPCUA_EXCLUDE_SubscriptionDiagnosticsState) + /// + /// Stores an instance of the SubscriptionDiagnosticsType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SubscriptionDiagnosticsState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SubscriptionDiagnosticsState(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(Opc.Ua.VariableTypes.SubscriptionDiagnosticsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SubscriptionDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAIwAAAFN1YnNjcmlwdGlvbkRpYWdub3N0aWNzVHlwZUluc3RhbmNlAQB8" + + "CAEAfAh8CAAAAQBqA/////8BAf////8fAAAAFWCJCgIAAAAAAAkAAABTZXNzaW9uSWQBAH0IAC8AP30I" + + "AAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABTdWJzY3JpcHRpb25JZAEAfggALwA/fggAAAAH" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFByaW9yaXR5AQB/CAAvAD9/CAAAAAP/////AQH/////" + + "AAAAABVgiQoCAAAAAAASAAAAUHVibGlzaGluZ0ludGVydmFsAQCACAAvAD+ACAAAAQAiAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABEAAABNYXhLZWVwQWxpdmVDb3VudAEAgQgALwA/gQgAAAAH/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAEAAAAE1heExpZmV0aW1lQ291bnQBALgiAC8AP7giAAAAB/////8BAf////8A" + + "AAAAFWCJCgIAAAAAABoAAABNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaAEAgwgALwA/gwgAAAAH////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAEQAAAFB1Ymxpc2hpbmdFbmFibGVkAQCECAAvAD+ECAAAAAH/////" + + "AQH/////AAAAABVgiQoCAAAAAAALAAAATW9kaWZ5Q291bnQBAIUIAC8AP4UIAAAAB/////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAsAAABFbmFibGVDb3VudAEAhggALwA/hggAAAAH/////wEB/////wAAAAAVYIkK" + + "AgAAAAAADAAAAERpc2FibGVDb3VudAEAhwgALwA/hwgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "FQAAAFJlcHVibGlzaFJlcXVlc3RDb3VudAEAiAgALwA/iAgAAAAH/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAHAAAAFJlcHVibGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQBAIkIAC8AP4kIAAAAB/////8BAf////8A" + + "AAAAFWCJCgIAAAAAABUAAABSZXB1Ymxpc2hNZXNzYWdlQ291bnQBAIoIAC8AP4oIAAAAB/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABQAAABUcmFuc2ZlclJlcXVlc3RDb3VudAEAiwgALwA/iwgAAAAH/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAGwAAAFRyYW5zZmVycmVkVG9BbHRDbGllbnRDb3VudAEAjAgALwA/jAgA" + + "AAAH/////wEB/////wAAAAAVYIkKAgAAAAAAHAAAAFRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQB" + + "AI0IAC8AP40IAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABMAAABQdWJsaXNoUmVxdWVzdENvdW50" + + "AQCOCAAvAD+OCAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAcAAAARGF0YUNoYW5nZU5vdGlmaWNh" + + "dGlvbnNDb3VudAEAjwgALwA/jwgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAFwAAAEV2ZW50Tm90" + + "aWZpY2F0aW9uc0NvdW50AQC2CwAvAD+2CwAAAAf/////AQH/////AAAAABVgiQoCAAAAAAASAAAATm90" + + "aWZpY2F0aW9uc0NvdW50AQCRCAAvAD+RCAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAXAAAATGF0" + + "ZVB1Ymxpc2hSZXF1ZXN0Q291bnQBALkiAC8AP7kiAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABUA" + + "AABDdXJyZW50S2VlcEFsaXZlQ291bnQBALoiAC8AP7oiAAAAB/////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABQAAABDdXJyZW50TGlmZXRpbWVDb3VudAEAuyIALwA/uyIAAAAH/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAGgAAAFVuYWNrbm93bGVkZ2VkTWVzc2FnZUNvdW50AQC8IgAvAD+8IgAAAAf/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAVAAAARGlzY2FyZGVkTWVzc2FnZUNvdW50AQC9IgAvAD+9IgAAAAf/////AQH/////" + + "AAAAABVgiQoCAAAAAAASAAAATW9uaXRvcmVkSXRlbUNvdW50AQC+IgAvAD++IgAAAAf/////AQH/////" + + "AAAAABVgiQoCAAAAAAAaAAAARGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQBAL8iAC8AP78iAAAAB///" + + "//8BAf////8AAAAAFWCJCgIAAAAAABwAAABNb25pdG9yaW5nUXVldWVPdmVyZmxvd0NvdW50AQDAIgAv" + + "AD/AIgAAAAf/////AQH/////AAAAABVgiQoCAAAAAAASAAAATmV4dFNlcXVlbmNlTnVtYmVyAQDBIgAv" + + "AD/BIgAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAXAAAARXZlbnRRdWV1ZU92ZXJmbG93Q291bnQB" + + "AMYiAC8AP8YiAAAAB/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState SessionId + { + get + { + return m_sessionId; + } + + set + { + if (!Object.ReferenceEquals(m_sessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionId = value; + } + } + + /// + public BaseDataVariableState SubscriptionId + { + get + { + return m_subscriptionId; + } + + set + { + if (!Object.ReferenceEquals(m_subscriptionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_subscriptionId = value; + } + } + + /// + public BaseDataVariableState Priority + { + get + { + return m_priority; + } + + set + { + if (!Object.ReferenceEquals(m_priority, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_priority = value; + } + } + + /// + public BaseDataVariableState PublishingInterval + { + get + { + return m_publishingInterval; + } + + set + { + if (!Object.ReferenceEquals(m_publishingInterval, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishingInterval = value; + } + } + + /// + public BaseDataVariableState MaxKeepAliveCount + { + get + { + return m_maxKeepAliveCount; + } + + set + { + if (!Object.ReferenceEquals(m_maxKeepAliveCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxKeepAliveCount = value; + } + } + + /// + public BaseDataVariableState MaxLifetimeCount + { + get + { + return m_maxLifetimeCount; + } + + set + { + if (!Object.ReferenceEquals(m_maxLifetimeCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxLifetimeCount = value; + } + } + + /// + public BaseDataVariableState MaxNotificationsPerPublish + { + get + { + return m_maxNotificationsPerPublish; + } + + set + { + if (!Object.ReferenceEquals(m_maxNotificationsPerPublish, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNotificationsPerPublish = value; + } + } + + /// + public BaseDataVariableState PublishingEnabled + { + get + { + return m_publishingEnabled; + } + + set + { + if (!Object.ReferenceEquals(m_publishingEnabled, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishingEnabled = value; + } + } + + /// + public BaseDataVariableState ModifyCount + { + get + { + return m_modifyCount; + } + + set + { + if (!Object.ReferenceEquals(m_modifyCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_modifyCount = value; + } + } + + /// + public BaseDataVariableState EnableCount + { + get + { + return m_enableCount; + } + + set + { + if (!Object.ReferenceEquals(m_enableCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enableCount = value; + } + } + + /// + public BaseDataVariableState DisableCount + { + get + { + return m_disableCount; + } + + set + { + if (!Object.ReferenceEquals(m_disableCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_disableCount = value; + } + } + + /// + public BaseDataVariableState RepublishRequestCount + { + get + { + return m_republishRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_republishRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_republishRequestCount = value; + } + } + + /// + public BaseDataVariableState RepublishMessageRequestCount + { + get + { + return m_republishMessageRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_republishMessageRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_republishMessageRequestCount = value; + } + } + + /// + public BaseDataVariableState RepublishMessageCount + { + get + { + return m_republishMessageCount; + } + + set + { + if (!Object.ReferenceEquals(m_republishMessageCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_republishMessageCount = value; + } + } + + /// + public BaseDataVariableState TransferRequestCount + { + get + { + return m_transferRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_transferRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transferRequestCount = value; + } + } + + /// + public BaseDataVariableState TransferredToAltClientCount + { + get + { + return m_transferredToAltClientCount; + } + + set + { + if (!Object.ReferenceEquals(m_transferredToAltClientCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transferredToAltClientCount = value; + } + } + + /// + public BaseDataVariableState TransferredToSameClientCount + { + get + { + return m_transferredToSameClientCount; + } + + set + { + if (!Object.ReferenceEquals(m_transferredToSameClientCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transferredToSameClientCount = value; + } + } + + /// + public BaseDataVariableState PublishRequestCount + { + get + { + return m_publishRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_publishRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishRequestCount = value; + } + } + + /// + public BaseDataVariableState DataChangeNotificationsCount + { + get + { + return m_dataChangeNotificationsCount; + } + + set + { + if (!Object.ReferenceEquals(m_dataChangeNotificationsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataChangeNotificationsCount = value; + } + } + + /// + public BaseDataVariableState EventNotificationsCount + { + get + { + return m_eventNotificationsCount; + } + + set + { + if (!Object.ReferenceEquals(m_eventNotificationsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eventNotificationsCount = value; + } + } + + /// + public BaseDataVariableState NotificationsCount + { + get + { + return m_notificationsCount; + } + + set + { + if (!Object.ReferenceEquals(m_notificationsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_notificationsCount = value; + } + } + + /// + public BaseDataVariableState LatePublishRequestCount + { + get + { + return m_latePublishRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_latePublishRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_latePublishRequestCount = value; + } + } + + /// + public BaseDataVariableState CurrentKeepAliveCount + { + get + { + return m_currentKeepAliveCount; + } + + set + { + if (!Object.ReferenceEquals(m_currentKeepAliveCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentKeepAliveCount = value; + } + } + + /// + public BaseDataVariableState CurrentLifetimeCount + { + get + { + return m_currentLifetimeCount; + } + + set + { + if (!Object.ReferenceEquals(m_currentLifetimeCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentLifetimeCount = value; + } + } + + /// + public BaseDataVariableState UnacknowledgedMessageCount + { + get + { + return m_unacknowledgedMessageCount; + } + + set + { + if (!Object.ReferenceEquals(m_unacknowledgedMessageCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unacknowledgedMessageCount = value; + } + } + + /// + public BaseDataVariableState DiscardedMessageCount + { + get + { + return m_discardedMessageCount; + } + + set + { + if (!Object.ReferenceEquals(m_discardedMessageCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_discardedMessageCount = value; + } + } + + /// + public BaseDataVariableState MonitoredItemCount + { + get + { + return m_monitoredItemCount; + } + + set + { + if (!Object.ReferenceEquals(m_monitoredItemCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_monitoredItemCount = value; + } + } + + /// + public BaseDataVariableState DisabledMonitoredItemCount + { + get + { + return m_disabledMonitoredItemCount; + } + + set + { + if (!Object.ReferenceEquals(m_disabledMonitoredItemCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_disabledMonitoredItemCount = value; + } + } + + /// + public BaseDataVariableState MonitoringQueueOverflowCount + { + get + { + return m_monitoringQueueOverflowCount; + } + + set + { + if (!Object.ReferenceEquals(m_monitoringQueueOverflowCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_monitoringQueueOverflowCount = value; + } + } + + /// + public BaseDataVariableState NextSequenceNumber + { + get + { + return m_nextSequenceNumber; + } + + set + { + if (!Object.ReferenceEquals(m_nextSequenceNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_nextSequenceNumber = value; + } + } + + /// + public BaseDataVariableState EventQueueOverflowCount + { + get + { + return m_eventQueueOverflowCount; + } + + set + { + if (!Object.ReferenceEquals(m_eventQueueOverflowCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eventQueueOverflowCount = 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_sessionId != null) + { + children.Add(m_sessionId); + } + + if (m_subscriptionId != null) + { + children.Add(m_subscriptionId); + } + + if (m_priority != null) + { + children.Add(m_priority); + } + + if (m_publishingInterval != null) + { + children.Add(m_publishingInterval); + } + + if (m_maxKeepAliveCount != null) + { + children.Add(m_maxKeepAliveCount); + } + + if (m_maxLifetimeCount != null) + { + children.Add(m_maxLifetimeCount); + } + + if (m_maxNotificationsPerPublish != null) + { + children.Add(m_maxNotificationsPerPublish); + } + + if (m_publishingEnabled != null) + { + children.Add(m_publishingEnabled); + } + + if (m_modifyCount != null) + { + children.Add(m_modifyCount); + } + + if (m_enableCount != null) + { + children.Add(m_enableCount); + } + + if (m_disableCount != null) + { + children.Add(m_disableCount); + } + + if (m_republishRequestCount != null) + { + children.Add(m_republishRequestCount); + } + + if (m_republishMessageRequestCount != null) + { + children.Add(m_republishMessageRequestCount); + } + + if (m_republishMessageCount != null) + { + children.Add(m_republishMessageCount); + } + + if (m_transferRequestCount != null) + { + children.Add(m_transferRequestCount); + } + + if (m_transferredToAltClientCount != null) + { + children.Add(m_transferredToAltClientCount); + } + + if (m_transferredToSameClientCount != null) + { + children.Add(m_transferredToSameClientCount); + } + + if (m_publishRequestCount != null) + { + children.Add(m_publishRequestCount); + } + + if (m_dataChangeNotificationsCount != null) + { + children.Add(m_dataChangeNotificationsCount); + } + + if (m_eventNotificationsCount != null) + { + children.Add(m_eventNotificationsCount); + } + + if (m_notificationsCount != null) + { + children.Add(m_notificationsCount); + } + + if (m_latePublishRequestCount != null) + { + children.Add(m_latePublishRequestCount); + } + + if (m_currentKeepAliveCount != null) + { + children.Add(m_currentKeepAliveCount); + } + + if (m_currentLifetimeCount != null) + { + children.Add(m_currentLifetimeCount); + } + + if (m_unacknowledgedMessageCount != null) + { + children.Add(m_unacknowledgedMessageCount); + } + + if (m_discardedMessageCount != null) + { + children.Add(m_discardedMessageCount); + } + + if (m_monitoredItemCount != null) + { + children.Add(m_monitoredItemCount); + } + + if (m_disabledMonitoredItemCount != null) + { + children.Add(m_disabledMonitoredItemCount); + } + + if (m_monitoringQueueOverflowCount != null) + { + children.Add(m_monitoringQueueOverflowCount); + } + + if (m_nextSequenceNumber != null) + { + children.Add(m_nextSequenceNumber); + } + + if (m_eventQueueOverflowCount != null) + { + children.Add(m_eventQueueOverflowCount); + } + + 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 Opc.Ua.BrowseNames.SessionId: + { + if (createOrReplace) + { + if (SessionId == null) + { + if (replacement == null) + { + SessionId = new BaseDataVariableState(this); + } + else + { + SessionId = (BaseDataVariableState)replacement; + } + } + } + + instance = SessionId; + break; + } + + case Opc.Ua.BrowseNames.SubscriptionId: + { + if (createOrReplace) + { + if (SubscriptionId == null) + { + if (replacement == null) + { + SubscriptionId = new BaseDataVariableState(this); + } + else + { + SubscriptionId = (BaseDataVariableState)replacement; + } + } + } + + instance = SubscriptionId; + break; + } + + case Opc.Ua.BrowseNames.Priority: + { + if (createOrReplace) + { + if (Priority == null) + { + if (replacement == null) + { + Priority = new BaseDataVariableState(this); + } + else + { + Priority = (BaseDataVariableState)replacement; + } + } + } + + instance = Priority; + break; + } + + case Opc.Ua.BrowseNames.PublishingInterval: + { + if (createOrReplace) + { + if (PublishingInterval == null) + { + if (replacement == null) + { + PublishingInterval = new BaseDataVariableState(this); + } + else + { + PublishingInterval = (BaseDataVariableState)replacement; + } + } + } + + instance = PublishingInterval; + break; + } + + case Opc.Ua.BrowseNames.MaxKeepAliveCount: + { + if (createOrReplace) + { + if (MaxKeepAliveCount == null) + { + if (replacement == null) + { + MaxKeepAliveCount = new BaseDataVariableState(this); + } + else + { + MaxKeepAliveCount = (BaseDataVariableState)replacement; + } + } + } + + instance = MaxKeepAliveCount; + break; + } + + case Opc.Ua.BrowseNames.MaxLifetimeCount: + { + if (createOrReplace) + { + if (MaxLifetimeCount == null) + { + if (replacement == null) + { + MaxLifetimeCount = new BaseDataVariableState(this); + } + else + { + MaxLifetimeCount = (BaseDataVariableState)replacement; + } + } + } + + instance = MaxLifetimeCount; + break; + } + + case Opc.Ua.BrowseNames.MaxNotificationsPerPublish: + { + if (createOrReplace) + { + if (MaxNotificationsPerPublish == null) + { + if (replacement == null) + { + MaxNotificationsPerPublish = new BaseDataVariableState(this); + } + else + { + MaxNotificationsPerPublish = (BaseDataVariableState)replacement; + } + } + } + + instance = MaxNotificationsPerPublish; + break; + } + + case Opc.Ua.BrowseNames.PublishingEnabled: + { + if (createOrReplace) + { + if (PublishingEnabled == null) + { + if (replacement == null) + { + PublishingEnabled = new BaseDataVariableState(this); + } + else + { + PublishingEnabled = (BaseDataVariableState)replacement; + } + } + } + + instance = PublishingEnabled; + break; + } + + case Opc.Ua.BrowseNames.ModifyCount: + { + if (createOrReplace) + { + if (ModifyCount == null) + { + if (replacement == null) + { + ModifyCount = new BaseDataVariableState(this); + } + else + { + ModifyCount = (BaseDataVariableState)replacement; + } + } + } + + instance = ModifyCount; + break; + } + + case Opc.Ua.BrowseNames.EnableCount: + { + if (createOrReplace) + { + if (EnableCount == null) + { + if (replacement == null) + { + EnableCount = new BaseDataVariableState(this); + } + else + { + EnableCount = (BaseDataVariableState)replacement; + } + } + } + + instance = EnableCount; + break; + } + + case Opc.Ua.BrowseNames.DisableCount: + { + if (createOrReplace) + { + if (DisableCount == null) + { + if (replacement == null) + { + DisableCount = new BaseDataVariableState(this); + } + else + { + DisableCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DisableCount; + break; + } + + case Opc.Ua.BrowseNames.RepublishRequestCount: + { + if (createOrReplace) + { + if (RepublishRequestCount == null) + { + if (replacement == null) + { + RepublishRequestCount = new BaseDataVariableState(this); + } + else + { + RepublishRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RepublishRequestCount; + break; + } + + case Opc.Ua.BrowseNames.RepublishMessageRequestCount: + { + if (createOrReplace) + { + if (RepublishMessageRequestCount == null) + { + if (replacement == null) + { + RepublishMessageRequestCount = new BaseDataVariableState(this); + } + else + { + RepublishMessageRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RepublishMessageRequestCount; + break; + } + + case Opc.Ua.BrowseNames.RepublishMessageCount: + { + if (createOrReplace) + { + if (RepublishMessageCount == null) + { + if (replacement == null) + { + RepublishMessageCount = new BaseDataVariableState(this); + } + else + { + RepublishMessageCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RepublishMessageCount; + break; + } + + case Opc.Ua.BrowseNames.TransferRequestCount: + { + if (createOrReplace) + { + if (TransferRequestCount == null) + { + if (replacement == null) + { + TransferRequestCount = new BaseDataVariableState(this); + } + else + { + TransferRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = TransferRequestCount; + break; + } + + case Opc.Ua.BrowseNames.TransferredToAltClientCount: + { + if (createOrReplace) + { + if (TransferredToAltClientCount == null) + { + if (replacement == null) + { + TransferredToAltClientCount = new BaseDataVariableState(this); + } + else + { + TransferredToAltClientCount = (BaseDataVariableState)replacement; + } + } + } + + instance = TransferredToAltClientCount; + break; + } + + case Opc.Ua.BrowseNames.TransferredToSameClientCount: + { + if (createOrReplace) + { + if (TransferredToSameClientCount == null) + { + if (replacement == null) + { + TransferredToSameClientCount = new BaseDataVariableState(this); + } + else + { + TransferredToSameClientCount = (BaseDataVariableState)replacement; + } + } + } + + instance = TransferredToSameClientCount; + break; + } + + case Opc.Ua.BrowseNames.PublishRequestCount: + { + if (createOrReplace) + { + if (PublishRequestCount == null) + { + if (replacement == null) + { + PublishRequestCount = new BaseDataVariableState(this); + } + else + { + PublishRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = PublishRequestCount; + break; + } + + case Opc.Ua.BrowseNames.DataChangeNotificationsCount: + { + if (createOrReplace) + { + if (DataChangeNotificationsCount == null) + { + if (replacement == null) + { + DataChangeNotificationsCount = new BaseDataVariableState(this); + } + else + { + DataChangeNotificationsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DataChangeNotificationsCount; + break; + } + + case Opc.Ua.BrowseNames.EventNotificationsCount: + { + if (createOrReplace) + { + if (EventNotificationsCount == null) + { + if (replacement == null) + { + EventNotificationsCount = new BaseDataVariableState(this); + } + else + { + EventNotificationsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = EventNotificationsCount; + break; + } + + case Opc.Ua.BrowseNames.NotificationsCount: + { + if (createOrReplace) + { + if (NotificationsCount == null) + { + if (replacement == null) + { + NotificationsCount = new BaseDataVariableState(this); + } + else + { + NotificationsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = NotificationsCount; + break; + } + + case Opc.Ua.BrowseNames.LatePublishRequestCount: + { + if (createOrReplace) + { + if (LatePublishRequestCount == null) + { + if (replacement == null) + { + LatePublishRequestCount = new BaseDataVariableState(this); + } + else + { + LatePublishRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = LatePublishRequestCount; + break; + } + + case Opc.Ua.BrowseNames.CurrentKeepAliveCount: + { + if (createOrReplace) + { + if (CurrentKeepAliveCount == null) + { + if (replacement == null) + { + CurrentKeepAliveCount = new BaseDataVariableState(this); + } + else + { + CurrentKeepAliveCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentKeepAliveCount; + break; + } + + case Opc.Ua.BrowseNames.CurrentLifetimeCount: + { + if (createOrReplace) + { + if (CurrentLifetimeCount == null) + { + if (replacement == null) + { + CurrentLifetimeCount = new BaseDataVariableState(this); + } + else + { + CurrentLifetimeCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentLifetimeCount; + break; + } + + case Opc.Ua.BrowseNames.UnacknowledgedMessageCount: + { + if (createOrReplace) + { + if (UnacknowledgedMessageCount == null) + { + if (replacement == null) + { + UnacknowledgedMessageCount = new BaseDataVariableState(this); + } + else + { + UnacknowledgedMessageCount = (BaseDataVariableState)replacement; + } + } + } + + instance = UnacknowledgedMessageCount; + break; + } + + case Opc.Ua.BrowseNames.DiscardedMessageCount: + { + if (createOrReplace) + { + if (DiscardedMessageCount == null) + { + if (replacement == null) + { + DiscardedMessageCount = new BaseDataVariableState(this); + } + else + { + DiscardedMessageCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DiscardedMessageCount; + break; + } + + case Opc.Ua.BrowseNames.MonitoredItemCount: + { + if (createOrReplace) + { + if (MonitoredItemCount == null) + { + if (replacement == null) + { + MonitoredItemCount = new BaseDataVariableState(this); + } + else + { + MonitoredItemCount = (BaseDataVariableState)replacement; + } + } + } + + instance = MonitoredItemCount; + break; + } + + case Opc.Ua.BrowseNames.DisabledMonitoredItemCount: + { + if (createOrReplace) + { + if (DisabledMonitoredItemCount == null) + { + if (replacement == null) + { + DisabledMonitoredItemCount = new BaseDataVariableState(this); + } + else + { + DisabledMonitoredItemCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DisabledMonitoredItemCount; + break; + } + + case Opc.Ua.BrowseNames.MonitoringQueueOverflowCount: + { + if (createOrReplace) + { + if (MonitoringQueueOverflowCount == null) + { + if (replacement == null) + { + MonitoringQueueOverflowCount = new BaseDataVariableState(this); + } + else + { + MonitoringQueueOverflowCount = (BaseDataVariableState)replacement; + } + } + } + + instance = MonitoringQueueOverflowCount; + break; + } + + case Opc.Ua.BrowseNames.NextSequenceNumber: + { + if (createOrReplace) + { + if (NextSequenceNumber == null) + { + if (replacement == null) + { + NextSequenceNumber = new BaseDataVariableState(this); + } + else + { + NextSequenceNumber = (BaseDataVariableState)replacement; + } + } + } + + instance = NextSequenceNumber; + break; + } + + case Opc.Ua.BrowseNames.EventQueueOverflowCount: + { + if (createOrReplace) + { + if (EventQueueOverflowCount == null) + { + if (replacement == null) + { + EventQueueOverflowCount = new BaseDataVariableState(this); + } + else + { + EventQueueOverflowCount = (BaseDataVariableState)replacement; + } + } + } + + instance = EventQueueOverflowCount; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_sessionId; + private BaseDataVariableState m_subscriptionId; + private BaseDataVariableState m_priority; + private BaseDataVariableState m_publishingInterval; + private BaseDataVariableState m_maxKeepAliveCount; + private BaseDataVariableState m_maxLifetimeCount; + private BaseDataVariableState m_maxNotificationsPerPublish; + private BaseDataVariableState m_publishingEnabled; + private BaseDataVariableState m_modifyCount; + private BaseDataVariableState m_enableCount; + private BaseDataVariableState m_disableCount; + private BaseDataVariableState m_republishRequestCount; + private BaseDataVariableState m_republishMessageRequestCount; + private BaseDataVariableState m_republishMessageCount; + private BaseDataVariableState m_transferRequestCount; + private BaseDataVariableState m_transferredToAltClientCount; + private BaseDataVariableState m_transferredToSameClientCount; + private BaseDataVariableState m_publishRequestCount; + private BaseDataVariableState m_dataChangeNotificationsCount; + private BaseDataVariableState m_eventNotificationsCount; + private BaseDataVariableState m_notificationsCount; + private BaseDataVariableState m_latePublishRequestCount; + private BaseDataVariableState m_currentKeepAliveCount; + private BaseDataVariableState m_currentLifetimeCount; + private BaseDataVariableState m_unacknowledgedMessageCount; + private BaseDataVariableState m_discardedMessageCount; + private BaseDataVariableState m_monitoredItemCount; + private BaseDataVariableState m_disabledMonitoredItemCount; + private BaseDataVariableState m_monitoringQueueOverflowCount; + private BaseDataVariableState m_nextSequenceNumber; + private BaseDataVariableState m_eventQueueOverflowCount; + #endregion + } + + #region SubscriptionDiagnosticsValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class SubscriptionDiagnosticsValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public SubscriptionDiagnosticsValue(SubscriptionDiagnosticsState variable, SubscriptionDiagnosticsDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new SubscriptionDiagnosticsDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public SubscriptionDiagnosticsState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public SubscriptionDiagnosticsDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(SubscriptionDiagnosticsState 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.SessionId; + instance.OnReadValue = OnRead_SessionId; + instance.OnSimpleWriteValue = OnWrite_SessionId; + updateList.Add(instance); + instance = m_variable.SubscriptionId; + instance.OnReadValue = OnRead_SubscriptionId; + instance.OnSimpleWriteValue = OnWrite_SubscriptionId; + updateList.Add(instance); + instance = m_variable.Priority; + instance.OnReadValue = OnRead_Priority; + instance.OnSimpleWriteValue = OnWrite_Priority; + updateList.Add(instance); + instance = m_variable.PublishingInterval; + instance.OnReadValue = OnRead_PublishingInterval; + instance.OnSimpleWriteValue = OnWrite_PublishingInterval; + updateList.Add(instance); + instance = m_variable.MaxKeepAliveCount; + instance.OnReadValue = OnRead_MaxKeepAliveCount; + instance.OnSimpleWriteValue = OnWrite_MaxKeepAliveCount; + updateList.Add(instance); + instance = m_variable.MaxLifetimeCount; + instance.OnReadValue = OnRead_MaxLifetimeCount; + instance.OnSimpleWriteValue = OnWrite_MaxLifetimeCount; + updateList.Add(instance); + instance = m_variable.MaxNotificationsPerPublish; + instance.OnReadValue = OnRead_MaxNotificationsPerPublish; + instance.OnSimpleWriteValue = OnWrite_MaxNotificationsPerPublish; + updateList.Add(instance); + instance = m_variable.PublishingEnabled; + instance.OnReadValue = OnRead_PublishingEnabled; + instance.OnSimpleWriteValue = OnWrite_PublishingEnabled; + updateList.Add(instance); + instance = m_variable.ModifyCount; + instance.OnReadValue = OnRead_ModifyCount; + instance.OnSimpleWriteValue = OnWrite_ModifyCount; + updateList.Add(instance); + instance = m_variable.EnableCount; + instance.OnReadValue = OnRead_EnableCount; + instance.OnSimpleWriteValue = OnWrite_EnableCount; + updateList.Add(instance); + instance = m_variable.DisableCount; + instance.OnReadValue = OnRead_DisableCount; + instance.OnSimpleWriteValue = OnWrite_DisableCount; + updateList.Add(instance); + instance = m_variable.RepublishRequestCount; + instance.OnReadValue = OnRead_RepublishRequestCount; + instance.OnSimpleWriteValue = OnWrite_RepublishRequestCount; + updateList.Add(instance); + instance = m_variable.RepublishMessageRequestCount; + instance.OnReadValue = OnRead_RepublishMessageRequestCount; + instance.OnSimpleWriteValue = OnWrite_RepublishMessageRequestCount; + updateList.Add(instance); + instance = m_variable.RepublishMessageCount; + instance.OnReadValue = OnRead_RepublishMessageCount; + instance.OnSimpleWriteValue = OnWrite_RepublishMessageCount; + updateList.Add(instance); + instance = m_variable.TransferRequestCount; + instance.OnReadValue = OnRead_TransferRequestCount; + instance.OnSimpleWriteValue = OnWrite_TransferRequestCount; + updateList.Add(instance); + instance = m_variable.TransferredToAltClientCount; + instance.OnReadValue = OnRead_TransferredToAltClientCount; + instance.OnSimpleWriteValue = OnWrite_TransferredToAltClientCount; + updateList.Add(instance); + instance = m_variable.TransferredToSameClientCount; + instance.OnReadValue = OnRead_TransferredToSameClientCount; + instance.OnSimpleWriteValue = OnWrite_TransferredToSameClientCount; + updateList.Add(instance); + instance = m_variable.PublishRequestCount; + instance.OnReadValue = OnRead_PublishRequestCount; + instance.OnSimpleWriteValue = OnWrite_PublishRequestCount; + updateList.Add(instance); + instance = m_variable.DataChangeNotificationsCount; + instance.OnReadValue = OnRead_DataChangeNotificationsCount; + instance.OnSimpleWriteValue = OnWrite_DataChangeNotificationsCount; + updateList.Add(instance); + instance = m_variable.EventNotificationsCount; + instance.OnReadValue = OnRead_EventNotificationsCount; + instance.OnSimpleWriteValue = OnWrite_EventNotificationsCount; + updateList.Add(instance); + instance = m_variable.NotificationsCount; + instance.OnReadValue = OnRead_NotificationsCount; + instance.OnSimpleWriteValue = OnWrite_NotificationsCount; + updateList.Add(instance); + instance = m_variable.LatePublishRequestCount; + instance.OnReadValue = OnRead_LatePublishRequestCount; + instance.OnSimpleWriteValue = OnWrite_LatePublishRequestCount; + updateList.Add(instance); + instance = m_variable.CurrentKeepAliveCount; + instance.OnReadValue = OnRead_CurrentKeepAliveCount; + instance.OnSimpleWriteValue = OnWrite_CurrentKeepAliveCount; + updateList.Add(instance); + instance = m_variable.CurrentLifetimeCount; + instance.OnReadValue = OnRead_CurrentLifetimeCount; + instance.OnSimpleWriteValue = OnWrite_CurrentLifetimeCount; + updateList.Add(instance); + instance = m_variable.UnacknowledgedMessageCount; + instance.OnReadValue = OnRead_UnacknowledgedMessageCount; + instance.OnSimpleWriteValue = OnWrite_UnacknowledgedMessageCount; + updateList.Add(instance); + instance = m_variable.DiscardedMessageCount; + instance.OnReadValue = OnRead_DiscardedMessageCount; + instance.OnSimpleWriteValue = OnWrite_DiscardedMessageCount; + updateList.Add(instance); + instance = m_variable.MonitoredItemCount; + instance.OnReadValue = OnRead_MonitoredItemCount; + instance.OnSimpleWriteValue = OnWrite_MonitoredItemCount; + updateList.Add(instance); + instance = m_variable.DisabledMonitoredItemCount; + instance.OnReadValue = OnRead_DisabledMonitoredItemCount; + instance.OnSimpleWriteValue = OnWrite_DisabledMonitoredItemCount; + updateList.Add(instance); + instance = m_variable.MonitoringQueueOverflowCount; + instance.OnReadValue = OnRead_MonitoringQueueOverflowCount; + instance.OnSimpleWriteValue = OnWrite_MonitoringQueueOverflowCount; + updateList.Add(instance); + instance = m_variable.NextSequenceNumber; + instance.OnReadValue = OnRead_NextSequenceNumber; + instance.OnSimpleWriteValue = OnWrite_NextSequenceNumber; + 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 = (SubscriptionDiagnosticsDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region SessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SessionId( + 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.SessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SubscriptionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SubscriptionId( + 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.SubscriptionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SubscriptionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SubscriptionId = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Priority Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Priority( + 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.Priority; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Priority(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Priority = (byte)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region PublishingInterval Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_PublishingInterval( + 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.PublishingInterval; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_PublishingInterval(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.PublishingInterval = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region MaxKeepAliveCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_MaxKeepAliveCount( + 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.MaxKeepAliveCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_MaxKeepAliveCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.MaxKeepAliveCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region MaxLifetimeCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_MaxLifetimeCount( + 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.MaxLifetimeCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_MaxLifetimeCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.MaxLifetimeCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region MaxNotificationsPerPublish Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_MaxNotificationsPerPublish( + 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.MaxNotificationsPerPublish; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_MaxNotificationsPerPublish(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.MaxNotificationsPerPublish = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region PublishingEnabled Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_PublishingEnabled( + 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.PublishingEnabled; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_PublishingEnabled(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.PublishingEnabled = (bool)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ModifyCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ModifyCount( + 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.ModifyCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ModifyCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ModifyCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region EnableCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_EnableCount( + 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.EnableCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_EnableCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.EnableCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DisableCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DisableCount( + 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.DisableCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DisableCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DisableCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RepublishRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RepublishRequestCount( + 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.RepublishRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RepublishRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RepublishRequestCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RepublishMessageRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RepublishMessageRequestCount( + 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.RepublishMessageRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RepublishMessageRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RepublishMessageRequestCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RepublishMessageCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RepublishMessageCount( + 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.RepublishMessageCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RepublishMessageCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RepublishMessageCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TransferRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TransferRequestCount( + 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.TransferRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TransferRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TransferRequestCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TransferredToAltClientCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TransferredToAltClientCount( + 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.TransferredToAltClientCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TransferredToAltClientCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TransferredToAltClientCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TransferredToSameClientCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TransferredToSameClientCount( + 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.TransferredToSameClientCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TransferredToSameClientCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TransferredToSameClientCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region PublishRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_PublishRequestCount( + 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.PublishRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_PublishRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.PublishRequestCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DataChangeNotificationsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DataChangeNotificationsCount( + 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.DataChangeNotificationsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DataChangeNotificationsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DataChangeNotificationsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region EventNotificationsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_EventNotificationsCount( + 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.EventNotificationsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_EventNotificationsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.EventNotificationsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region NotificationsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_NotificationsCount( + 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.NotificationsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_NotificationsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.NotificationsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LatePublishRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LatePublishRequestCount( + 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.LatePublishRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LatePublishRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LatePublishRequestCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentKeepAliveCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentKeepAliveCount( + 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.CurrentKeepAliveCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentKeepAliveCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentKeepAliveCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentLifetimeCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentLifetimeCount( + 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.CurrentLifetimeCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentLifetimeCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentLifetimeCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region UnacknowledgedMessageCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_UnacknowledgedMessageCount( + 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.UnacknowledgedMessageCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_UnacknowledgedMessageCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.UnacknowledgedMessageCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DiscardedMessageCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DiscardedMessageCount( + 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.DiscardedMessageCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DiscardedMessageCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DiscardedMessageCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region MonitoredItemCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_MonitoredItemCount( + 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.MonitoredItemCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_MonitoredItemCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.MonitoredItemCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DisabledMonitoredItemCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DisabledMonitoredItemCount( + 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.DisabledMonitoredItemCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DisabledMonitoredItemCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DisabledMonitoredItemCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region MonitoringQueueOverflowCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_MonitoringQueueOverflowCount( + 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.MonitoringQueueOverflowCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_MonitoringQueueOverflowCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.MonitoringQueueOverflowCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region NextSequenceNumber Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_NextSequenceNumber( + 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.NextSequenceNumber; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_NextSequenceNumber(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.NextSequenceNumber = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private SubscriptionDiagnosticsDataType m_value; + private SubscriptionDiagnosticsState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region SessionDiagnosticsArrayState Class + #if (!OPCUA_EXCLUDE_SessionDiagnosticsArrayState) + /// + /// Stores an instance of the SessionDiagnosticsArrayType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionDiagnosticsArrayState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SessionDiagnosticsArrayState(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(Opc.Ua.VariableTypes.SessionDiagnosticsArrayType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SessionDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.OneDimension; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAAIwAAAFNlc3Npb25EaWFnbm9zdGljc0FycmF5VHlwZUluc3RhbmNlAQCU" + + "CAEAlAiUCAAAAQBhAwEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SessionDiagnosticsVariableState Class + #if (!OPCUA_EXCLUDE_SessionDiagnosticsVariableState) + /// + /// Stores an instance of the SessionDiagnosticsVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionDiagnosticsVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SessionDiagnosticsVariableState(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(Opc.Ua.VariableTypes.SessionDiagnosticsVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SessionDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAJgAAAFNlc3Npb25EaWFnbm9zdGljc1ZhcmlhYmxlVHlwZUluc3RhbmNl" + + "AQCVCAEAlQiVCAAAAQBhA/////8BAf////8rAAAAFWCJCgIAAAAAAAkAAABTZXNzaW9uSWQBAJYIAC8A" + + "P5YIAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABTZXNzaW9uTmFtZQEAlwgALwA/lwgAAAAM" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAENsaWVudERlc2NyaXB0aW9uAQCYCAAvAD+YCAAAAQA0" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABTZXJ2ZXJVcmkBAJkIAC8AP5kIAAAADP////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAsAAABFbmRwb2ludFVybAEAmggALwA/mggAAAAM/////wEB/////wAAAAAX" + + "YIkKAgAAAAAACQAAAExvY2FsZUlkcwEAmwgALwA/mwgAAAEAJwEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "FWCJCgIAAAAAABQAAABBY3R1YWxTZXNzaW9uVGltZW91dAEAnAgALwA/nAgAAAEAIgH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAWAAAATWF4UmVzcG9uc2VNZXNzYWdlU2l6ZQEA6gsALwA/6gsAAAAH/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAFAAAAENsaWVudENvbm5lY3Rpb25UaW1lAQCdCAAvAD+dCAAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABUAAABDbGllbnRMYXN0Q29udGFjdFRpbWUBAJ4IAC8AP54IAAAB" + + "ACYB/////wEB/////wAAAAAVYIkKAgAAAAAAGQAAAEN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQBAJ8I" + + "AC8AP58IAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABoAAABDdXJyZW50TW9uaXRvcmVkSXRlbXND" + + "b3VudAEAoAgALwA/oAgAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAHQAAAEN1cnJlbnRQdWJsaXNo" + + "UmVxdWVzdHNJblF1ZXVlAQChCAAvAD+hCAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAARAAAAVG90" + + "YWxSZXF1ZXN0Q291bnQBAMQiAC8AP8QiAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFVu" + + "YXV0aG9yaXplZFJlcXVlc3RDb3VudAEAdC4ALwA/dC4AAAAH/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CQAAAFJlYWRDb3VudAEAqQgALwA/qQgAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAQAAAASGlz" + + "dG9yeVJlYWRDb3VudAEAqggALwA/qggAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAV3Jp" + + "dGVDb3VudAEAqwgALwA/qwgAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAASAAAASGlzdG9yeVVw" + + "ZGF0ZUNvdW50AQCsCAAvAD+sCAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABDYWxsQ291" + + "bnQBAK0IAC8AP60IAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAGQAAAENyZWF0ZU1vbml0b3Jl" + + "ZEl0ZW1zQ291bnQBAK4IAC8AP64IAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAGQAAAE1vZGlm" + + "eU1vbml0b3JlZEl0ZW1zQ291bnQBAK8IAC8AP68IAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "FgAAAFNldE1vbml0b3JpbmdNb2RlQ291bnQBALAIAC8AP7AIAAABAGcD/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAEgAAAFNldFRyaWdnZXJpbmdDb3VudAEAsQgALwA/sQgAAAEAZwP/////AQH/////AAAAABVg" + + "iQoCAAAAAAAZAAAARGVsZXRlTW9uaXRvcmVkSXRlbXNDb3VudAEAsggALwA/sggAAAEAZwP/////AQH/" + + "////AAAAABVgiQoCAAAAAAAXAAAAQ3JlYXRlU3Vic2NyaXB0aW9uQ291bnQBALMIAC8AP7MIAAABAGcD" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAFwAAAE1vZGlmeVN1YnNjcmlwdGlvbkNvdW50AQC0CAAvAD+0" + + "CAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABYAAABTZXRQdWJsaXNoaW5nTW9kZUNvdW50AQC1" + + "CAAvAD+1CAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABQdWJsaXNoQ291bnQBALYIAC8A" + + "P7YIAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFJlcHVibGlzaENvdW50AQC3CAAvAD+3" + + "CAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABoAAABUcmFuc2ZlclN1YnNjcmlwdGlvbnNDb3Vu" + + "dAEAuAgALwA/uAgAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAYAAAARGVsZXRlU3Vic2NyaXB0" + + "aW9uc0NvdW50AQC5CAAvAD+5CAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAAA0AAABBZGROb2Rl" + + "c0NvdW50AQC6CAAvAD+6CAAAAQBnA/////8BAf////8AAAAAFWCJCgIAAAAAABIAAABBZGRSZWZlcmVu" + + "Y2VzQ291bnQBALsIAC8AP7sIAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERlbGV0ZU5v" + + "ZGVzQ291bnQBALwIAC8AP7wIAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAERlbGV0ZVJl" + + "ZmVyZW5jZXNDb3VudAEAvQgALwA/vQgAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAALAAAAQnJv" + + "d3NlQ291bnQBAL4IAC8AP74IAAABAGcD/////wEB/////wAAAAAVYIkKAgAAAAAADwAAAEJyb3dzZU5l" + + "eHRDb3VudAEAvwgALwA/vwgAAAEAZwP/////AQH/////AAAAABVgiQoCAAAAAAAiAAAAVHJhbnNsYXRl" + + "QnJvd3NlUGF0aHNUb05vZGVJZHNDb3VudAEAwAgALwA/wAgAAAEAZwP/////AQH/////AAAAABVgiQoC" + + "AAAAAAAPAAAAUXVlcnlGaXJzdENvdW50AQDBCAAvAD/BCAAAAQBnA/////8BAf////8AAAAAFWCJCgIA" + + "AAAAAA4AAABRdWVyeU5leHRDb3VudAEAwggALwA/wggAAAEAZwP/////AQH/////AAAAABVgiQoCAAAA" + + "AAASAAAAUmVnaXN0ZXJOb2Rlc0NvdW50AQCqCgAvAD+qCgAAAQBnA/////8BAf////8AAAAAFWCJCgIA" + + "AAAAABQAAABVbnJlZ2lzdGVyTm9kZXNDb3VudAEAqwoALwA/qwoAAAEAZwP/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState SessionId + { + get + { + return m_sessionId; + } + + set + { + if (!Object.ReferenceEquals(m_sessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionId = value; + } + } + + /// + public BaseDataVariableState SessionName + { + get + { + return m_sessionName; + } + + set + { + if (!Object.ReferenceEquals(m_sessionName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionName = value; + } + } + + /// + public BaseDataVariableState ClientDescription + { + get + { + return m_clientDescription; + } + + set + { + if (!Object.ReferenceEquals(m_clientDescription, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientDescription = value; + } + } + + /// + public BaseDataVariableState ServerUri + { + get + { + return m_serverUri; + } + + set + { + if (!Object.ReferenceEquals(m_serverUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverUri = value; + } + } + + /// + public BaseDataVariableState EndpointUrl + { + get + { + return m_endpointUrl; + } + + set + { + if (!Object.ReferenceEquals(m_endpointUrl, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_endpointUrl = value; + } + } + + /// + public BaseDataVariableState LocaleIds + { + get + { + return m_localeIds; + } + + set + { + if (!Object.ReferenceEquals(m_localeIds, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_localeIds = value; + } + } + + /// + public BaseDataVariableState ActualSessionTimeout + { + get + { + return m_actualSessionTimeout; + } + + set + { + if (!Object.ReferenceEquals(m_actualSessionTimeout, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_actualSessionTimeout = value; + } + } + + /// + public BaseDataVariableState MaxResponseMessageSize + { + get + { + return m_maxResponseMessageSize; + } + + set + { + if (!Object.ReferenceEquals(m_maxResponseMessageSize, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxResponseMessageSize = value; + } + } + + /// + public BaseDataVariableState ClientConnectionTime + { + get + { + return m_clientConnectionTime; + } + + set + { + if (!Object.ReferenceEquals(m_clientConnectionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientConnectionTime = value; + } + } + + /// + public BaseDataVariableState ClientLastContactTime + { + get + { + return m_clientLastContactTime; + } + + set + { + if (!Object.ReferenceEquals(m_clientLastContactTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientLastContactTime = value; + } + } + + /// + public BaseDataVariableState CurrentSubscriptionsCount + { + get + { + return m_currentSubscriptionsCount; + } + + set + { + if (!Object.ReferenceEquals(m_currentSubscriptionsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentSubscriptionsCount = value; + } + } + + /// + public BaseDataVariableState CurrentMonitoredItemsCount + { + get + { + return m_currentMonitoredItemsCount; + } + + set + { + if (!Object.ReferenceEquals(m_currentMonitoredItemsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentMonitoredItemsCount = value; + } + } + + /// + public BaseDataVariableState CurrentPublishRequestsInQueue + { + get + { + return m_currentPublishRequestsInQueue; + } + + set + { + if (!Object.ReferenceEquals(m_currentPublishRequestsInQueue, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentPublishRequestsInQueue = value; + } + } + + /// + public BaseDataVariableState TotalRequestCount + { + get + { + return m_totalRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_totalRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_totalRequestCount = value; + } + } + + /// + public BaseDataVariableState UnauthorizedRequestCount + { + get + { + return m_unauthorizedRequestCount; + } + + set + { + if (!Object.ReferenceEquals(m_unauthorizedRequestCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unauthorizedRequestCount = value; + } + } + + /// + public BaseDataVariableState ReadCount + { + get + { + return m_readCount; + } + + set + { + if (!Object.ReferenceEquals(m_readCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_readCount = value; + } + } + + /// + public BaseDataVariableState HistoryReadCount + { + get + { + return m_historyReadCount; + } + + set + { + if (!Object.ReferenceEquals(m_historyReadCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_historyReadCount = value; + } + } + + /// + public BaseDataVariableState WriteCount + { + get + { + return m_writeCount; + } + + set + { + if (!Object.ReferenceEquals(m_writeCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_writeCount = value; + } + } + + /// + public BaseDataVariableState HistoryUpdateCount + { + get + { + return m_historyUpdateCount; + } + + set + { + if (!Object.ReferenceEquals(m_historyUpdateCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_historyUpdateCount = value; + } + } + + /// + public BaseDataVariableState CallCount + { + get + { + return m_callCount; + } + + set + { + if (!Object.ReferenceEquals(m_callCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_callCount = value; + } + } + + /// + public BaseDataVariableState CreateMonitoredItemsCount + { + get + { + return m_createMonitoredItemsCount; + } + + set + { + if (!Object.ReferenceEquals(m_createMonitoredItemsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createMonitoredItemsCount = value; + } + } + + /// + public BaseDataVariableState ModifyMonitoredItemsCount + { + get + { + return m_modifyMonitoredItemsCount; + } + + set + { + if (!Object.ReferenceEquals(m_modifyMonitoredItemsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_modifyMonitoredItemsCount = value; + } + } + + /// + public BaseDataVariableState SetMonitoringModeCount + { + get + { + return m_setMonitoringModeCount; + } + + set + { + if (!Object.ReferenceEquals(m_setMonitoringModeCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setMonitoringModeCount = value; + } + } + + /// + public BaseDataVariableState SetTriggeringCount + { + get + { + return m_setTriggeringCount; + } + + set + { + if (!Object.ReferenceEquals(m_setTriggeringCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setTriggeringCount = value; + } + } + + /// + public BaseDataVariableState DeleteMonitoredItemsCount + { + get + { + return m_deleteMonitoredItemsCount; + } + + set + { + if (!Object.ReferenceEquals(m_deleteMonitoredItemsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteMonitoredItemsCount = value; + } + } + + /// + public BaseDataVariableState CreateSubscriptionCount + { + get + { + return m_createSubscriptionCount; + } + + set + { + if (!Object.ReferenceEquals(m_createSubscriptionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createSubscriptionCount = value; + } + } + + /// + public BaseDataVariableState ModifySubscriptionCount + { + get + { + return m_modifySubscriptionCount; + } + + set + { + if (!Object.ReferenceEquals(m_modifySubscriptionCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_modifySubscriptionCount = value; + } + } + + /// + public BaseDataVariableState SetPublishingModeCount + { + get + { + return m_setPublishingModeCount; + } + + set + { + if (!Object.ReferenceEquals(m_setPublishingModeCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setPublishingModeCount = value; + } + } + + /// + public BaseDataVariableState PublishCount + { + get + { + return m_publishCount; + } + + set + { + if (!Object.ReferenceEquals(m_publishCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishCount = value; + } + } + + /// + public BaseDataVariableState RepublishCount + { + get + { + return m_republishCount; + } + + set + { + if (!Object.ReferenceEquals(m_republishCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_republishCount = value; + } + } + + /// + public BaseDataVariableState TransferSubscriptionsCount + { + get + { + return m_transferSubscriptionsCount; + } + + set + { + if (!Object.ReferenceEquals(m_transferSubscriptionsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transferSubscriptionsCount = value; + } + } + + /// + public BaseDataVariableState DeleteSubscriptionsCount + { + get + { + return m_deleteSubscriptionsCount; + } + + set + { + if (!Object.ReferenceEquals(m_deleteSubscriptionsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteSubscriptionsCount = value; + } + } + + /// + public BaseDataVariableState AddNodesCount + { + get + { + return m_addNodesCount; + } + + set + { + if (!Object.ReferenceEquals(m_addNodesCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addNodesCount = value; + } + } + + /// + public BaseDataVariableState AddReferencesCount + { + get + { + return m_addReferencesCount; + } + + set + { + if (!Object.ReferenceEquals(m_addReferencesCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addReferencesCount = value; + } + } + + /// + public BaseDataVariableState DeleteNodesCount + { + get + { + return m_deleteNodesCount; + } + + set + { + if (!Object.ReferenceEquals(m_deleteNodesCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteNodesCount = value; + } + } + + /// + public BaseDataVariableState DeleteReferencesCount + { + get + { + return m_deleteReferencesCount; + } + + set + { + if (!Object.ReferenceEquals(m_deleteReferencesCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteReferencesCount = value; + } + } + + /// + public BaseDataVariableState BrowseCount + { + get + { + return m_browseCount; + } + + set + { + if (!Object.ReferenceEquals(m_browseCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_browseCount = value; + } + } + + /// + public BaseDataVariableState BrowseNextCount + { + get + { + return m_browseNextCount; + } + + set + { + if (!Object.ReferenceEquals(m_browseNextCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_browseNextCount = value; + } + } + + /// + public BaseDataVariableState TranslateBrowsePathsToNodeIdsCount + { + get + { + return m_translateBrowsePathsToNodeIdsCount; + } + + set + { + if (!Object.ReferenceEquals(m_translateBrowsePathsToNodeIdsCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_translateBrowsePathsToNodeIdsCount = value; + } + } + + /// + public BaseDataVariableState QueryFirstCount + { + get + { + return m_queryFirstCount; + } + + set + { + if (!Object.ReferenceEquals(m_queryFirstCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queryFirstCount = value; + } + } + + /// + public BaseDataVariableState QueryNextCount + { + get + { + return m_queryNextCount; + } + + set + { + if (!Object.ReferenceEquals(m_queryNextCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queryNextCount = value; + } + } + + /// + public BaseDataVariableState RegisterNodesCount + { + get + { + return m_registerNodesCount; + } + + set + { + if (!Object.ReferenceEquals(m_registerNodesCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_registerNodesCount = value; + } + } + + /// + public BaseDataVariableState UnregisterNodesCount + { + get + { + return m_unregisterNodesCount; + } + + set + { + if (!Object.ReferenceEquals(m_unregisterNodesCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unregisterNodesCount = 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_sessionId != null) + { + children.Add(m_sessionId); + } + + if (m_sessionName != null) + { + children.Add(m_sessionName); + } + + if (m_clientDescription != null) + { + children.Add(m_clientDescription); + } + + if (m_serverUri != null) + { + children.Add(m_serverUri); + } + + if (m_endpointUrl != null) + { + children.Add(m_endpointUrl); + } + + if (m_localeIds != null) + { + children.Add(m_localeIds); + } + + if (m_actualSessionTimeout != null) + { + children.Add(m_actualSessionTimeout); + } + + if (m_maxResponseMessageSize != null) + { + children.Add(m_maxResponseMessageSize); + } + + if (m_clientConnectionTime != null) + { + children.Add(m_clientConnectionTime); + } + + if (m_clientLastContactTime != null) + { + children.Add(m_clientLastContactTime); + } + + if (m_currentSubscriptionsCount != null) + { + children.Add(m_currentSubscriptionsCount); + } + + if (m_currentMonitoredItemsCount != null) + { + children.Add(m_currentMonitoredItemsCount); + } + + if (m_currentPublishRequestsInQueue != null) + { + children.Add(m_currentPublishRequestsInQueue); + } + + if (m_totalRequestCount != null) + { + children.Add(m_totalRequestCount); + } + + if (m_unauthorizedRequestCount != null) + { + children.Add(m_unauthorizedRequestCount); + } + + if (m_readCount != null) + { + children.Add(m_readCount); + } + + if (m_historyReadCount != null) + { + children.Add(m_historyReadCount); + } + + if (m_writeCount != null) + { + children.Add(m_writeCount); + } + + if (m_historyUpdateCount != null) + { + children.Add(m_historyUpdateCount); + } + + if (m_callCount != null) + { + children.Add(m_callCount); + } + + if (m_createMonitoredItemsCount != null) + { + children.Add(m_createMonitoredItemsCount); + } + + if (m_modifyMonitoredItemsCount != null) + { + children.Add(m_modifyMonitoredItemsCount); + } + + if (m_setMonitoringModeCount != null) + { + children.Add(m_setMonitoringModeCount); + } + + if (m_setTriggeringCount != null) + { + children.Add(m_setTriggeringCount); + } + + if (m_deleteMonitoredItemsCount != null) + { + children.Add(m_deleteMonitoredItemsCount); + } + + if (m_createSubscriptionCount != null) + { + children.Add(m_createSubscriptionCount); + } + + if (m_modifySubscriptionCount != null) + { + children.Add(m_modifySubscriptionCount); + } + + if (m_setPublishingModeCount != null) + { + children.Add(m_setPublishingModeCount); + } + + if (m_publishCount != null) + { + children.Add(m_publishCount); + } + + if (m_republishCount != null) + { + children.Add(m_republishCount); + } + + if (m_transferSubscriptionsCount != null) + { + children.Add(m_transferSubscriptionsCount); + } + + if (m_deleteSubscriptionsCount != null) + { + children.Add(m_deleteSubscriptionsCount); + } + + if (m_addNodesCount != null) + { + children.Add(m_addNodesCount); + } + + if (m_addReferencesCount != null) + { + children.Add(m_addReferencesCount); + } + + if (m_deleteNodesCount != null) + { + children.Add(m_deleteNodesCount); + } + + if (m_deleteReferencesCount != null) + { + children.Add(m_deleteReferencesCount); + } + + if (m_browseCount != null) + { + children.Add(m_browseCount); + } + + if (m_browseNextCount != null) + { + children.Add(m_browseNextCount); + } + + if (m_translateBrowsePathsToNodeIdsCount != null) + { + children.Add(m_translateBrowsePathsToNodeIdsCount); + } + + if (m_queryFirstCount != null) + { + children.Add(m_queryFirstCount); + } + + if (m_queryNextCount != null) + { + children.Add(m_queryNextCount); + } + + if (m_registerNodesCount != null) + { + children.Add(m_registerNodesCount); + } + + if (m_unregisterNodesCount != null) + { + children.Add(m_unregisterNodesCount); + } + + 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 Opc.Ua.BrowseNames.SessionId: + { + if (createOrReplace) + { + if (SessionId == null) + { + if (replacement == null) + { + SessionId = new BaseDataVariableState(this); + } + else + { + SessionId = (BaseDataVariableState)replacement; + } + } + } + + instance = SessionId; + break; + } + + case Opc.Ua.BrowseNames.SessionName: + { + if (createOrReplace) + { + if (SessionName == null) + { + if (replacement == null) + { + SessionName = new BaseDataVariableState(this); + } + else + { + SessionName = (BaseDataVariableState)replacement; + } + } + } + + instance = SessionName; + break; + } + + case Opc.Ua.BrowseNames.ClientDescription: + { + if (createOrReplace) + { + if (ClientDescription == null) + { + if (replacement == null) + { + ClientDescription = new BaseDataVariableState(this); + } + else + { + ClientDescription = (BaseDataVariableState)replacement; + } + } + } + + instance = ClientDescription; + break; + } + + case Opc.Ua.BrowseNames.ServerUri: + { + if (createOrReplace) + { + if (ServerUri == null) + { + if (replacement == null) + { + ServerUri = new BaseDataVariableState(this); + } + else + { + ServerUri = (BaseDataVariableState)replacement; + } + } + } + + instance = ServerUri; + break; + } + + case Opc.Ua.BrowseNames.EndpointUrl: + { + if (createOrReplace) + { + if (EndpointUrl == null) + { + if (replacement == null) + { + EndpointUrl = new BaseDataVariableState(this); + } + else + { + EndpointUrl = (BaseDataVariableState)replacement; + } + } + } + + instance = EndpointUrl; + break; + } + + case Opc.Ua.BrowseNames.LocaleIds: + { + if (createOrReplace) + { + if (LocaleIds == null) + { + if (replacement == null) + { + LocaleIds = new BaseDataVariableState(this); + } + else + { + LocaleIds = (BaseDataVariableState)replacement; + } + } + } + + instance = LocaleIds; + break; + } + + case Opc.Ua.BrowseNames.ActualSessionTimeout: + { + if (createOrReplace) + { + if (ActualSessionTimeout == null) + { + if (replacement == null) + { + ActualSessionTimeout = new BaseDataVariableState(this); + } + else + { + ActualSessionTimeout = (BaseDataVariableState)replacement; + } + } + } + + instance = ActualSessionTimeout; + break; + } + + case Opc.Ua.BrowseNames.MaxResponseMessageSize: + { + if (createOrReplace) + { + if (MaxResponseMessageSize == null) + { + if (replacement == null) + { + MaxResponseMessageSize = new BaseDataVariableState(this); + } + else + { + MaxResponseMessageSize = (BaseDataVariableState)replacement; + } + } + } + + instance = MaxResponseMessageSize; + break; + } + + case Opc.Ua.BrowseNames.ClientConnectionTime: + { + if (createOrReplace) + { + if (ClientConnectionTime == null) + { + if (replacement == null) + { + ClientConnectionTime = new BaseDataVariableState(this); + } + else + { + ClientConnectionTime = (BaseDataVariableState)replacement; + } + } + } + + instance = ClientConnectionTime; + break; + } + + case Opc.Ua.BrowseNames.ClientLastContactTime: + { + if (createOrReplace) + { + if (ClientLastContactTime == null) + { + if (replacement == null) + { + ClientLastContactTime = new BaseDataVariableState(this); + } + else + { + ClientLastContactTime = (BaseDataVariableState)replacement; + } + } + } + + instance = ClientLastContactTime; + break; + } + + case Opc.Ua.BrowseNames.CurrentSubscriptionsCount: + { + if (createOrReplace) + { + if (CurrentSubscriptionsCount == null) + { + if (replacement == null) + { + CurrentSubscriptionsCount = new BaseDataVariableState(this); + } + else + { + CurrentSubscriptionsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentSubscriptionsCount; + break; + } + + case Opc.Ua.BrowseNames.CurrentMonitoredItemsCount: + { + if (createOrReplace) + { + if (CurrentMonitoredItemsCount == null) + { + if (replacement == null) + { + CurrentMonitoredItemsCount = new BaseDataVariableState(this); + } + else + { + CurrentMonitoredItemsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentMonitoredItemsCount; + break; + } + + case Opc.Ua.BrowseNames.CurrentPublishRequestsInQueue: + { + if (createOrReplace) + { + if (CurrentPublishRequestsInQueue == null) + { + if (replacement == null) + { + CurrentPublishRequestsInQueue = new BaseDataVariableState(this); + } + else + { + CurrentPublishRequestsInQueue = (BaseDataVariableState)replacement; + } + } + } + + instance = CurrentPublishRequestsInQueue; + break; + } + + case Opc.Ua.BrowseNames.TotalRequestCount: + { + if (createOrReplace) + { + if (TotalRequestCount == null) + { + if (replacement == null) + { + TotalRequestCount = new BaseDataVariableState(this); + } + else + { + TotalRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = TotalRequestCount; + break; + } + + case Opc.Ua.BrowseNames.UnauthorizedRequestCount: + { + if (createOrReplace) + { + if (UnauthorizedRequestCount == null) + { + if (replacement == null) + { + UnauthorizedRequestCount = new BaseDataVariableState(this); + } + else + { + UnauthorizedRequestCount = (BaseDataVariableState)replacement; + } + } + } + + instance = UnauthorizedRequestCount; + break; + } + + case Opc.Ua.BrowseNames.ReadCount: + { + if (createOrReplace) + { + if (ReadCount == null) + { + if (replacement == null) + { + ReadCount = new BaseDataVariableState(this); + } + else + { + ReadCount = (BaseDataVariableState)replacement; + } + } + } + + instance = ReadCount; + break; + } + + case Opc.Ua.BrowseNames.HistoryReadCount: + { + if (createOrReplace) + { + if (HistoryReadCount == null) + { + if (replacement == null) + { + HistoryReadCount = new BaseDataVariableState(this); + } + else + { + HistoryReadCount = (BaseDataVariableState)replacement; + } + } + } + + instance = HistoryReadCount; + break; + } + + case Opc.Ua.BrowseNames.WriteCount: + { + if (createOrReplace) + { + if (WriteCount == null) + { + if (replacement == null) + { + WriteCount = new BaseDataVariableState(this); + } + else + { + WriteCount = (BaseDataVariableState)replacement; + } + } + } + + instance = WriteCount; + break; + } + + case Opc.Ua.BrowseNames.HistoryUpdateCount: + { + if (createOrReplace) + { + if (HistoryUpdateCount == null) + { + if (replacement == null) + { + HistoryUpdateCount = new BaseDataVariableState(this); + } + else + { + HistoryUpdateCount = (BaseDataVariableState)replacement; + } + } + } + + instance = HistoryUpdateCount; + break; + } + + case Opc.Ua.BrowseNames.CallCount: + { + if (createOrReplace) + { + if (CallCount == null) + { + if (replacement == null) + { + CallCount = new BaseDataVariableState(this); + } + else + { + CallCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CallCount; + break; + } + + case Opc.Ua.BrowseNames.CreateMonitoredItemsCount: + { + if (createOrReplace) + { + if (CreateMonitoredItemsCount == null) + { + if (replacement == null) + { + CreateMonitoredItemsCount = new BaseDataVariableState(this); + } + else + { + CreateMonitoredItemsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CreateMonitoredItemsCount; + break; + } + + case Opc.Ua.BrowseNames.ModifyMonitoredItemsCount: + { + if (createOrReplace) + { + if (ModifyMonitoredItemsCount == null) + { + if (replacement == null) + { + ModifyMonitoredItemsCount = new BaseDataVariableState(this); + } + else + { + ModifyMonitoredItemsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = ModifyMonitoredItemsCount; + break; + } + + case Opc.Ua.BrowseNames.SetMonitoringModeCount: + { + if (createOrReplace) + { + if (SetMonitoringModeCount == null) + { + if (replacement == null) + { + SetMonitoringModeCount = new BaseDataVariableState(this); + } + else + { + SetMonitoringModeCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SetMonitoringModeCount; + break; + } + + case Opc.Ua.BrowseNames.SetTriggeringCount: + { + if (createOrReplace) + { + if (SetTriggeringCount == null) + { + if (replacement == null) + { + SetTriggeringCount = new BaseDataVariableState(this); + } + else + { + SetTriggeringCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SetTriggeringCount; + break; + } + + case Opc.Ua.BrowseNames.DeleteMonitoredItemsCount: + { + if (createOrReplace) + { + if (DeleteMonitoredItemsCount == null) + { + if (replacement == null) + { + DeleteMonitoredItemsCount = new BaseDataVariableState(this); + } + else + { + DeleteMonitoredItemsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DeleteMonitoredItemsCount; + break; + } + + case Opc.Ua.BrowseNames.CreateSubscriptionCount: + { + if (createOrReplace) + { + if (CreateSubscriptionCount == null) + { + if (replacement == null) + { + CreateSubscriptionCount = new BaseDataVariableState(this); + } + else + { + CreateSubscriptionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = CreateSubscriptionCount; + break; + } + + case Opc.Ua.BrowseNames.ModifySubscriptionCount: + { + if (createOrReplace) + { + if (ModifySubscriptionCount == null) + { + if (replacement == null) + { + ModifySubscriptionCount = new BaseDataVariableState(this); + } + else + { + ModifySubscriptionCount = (BaseDataVariableState)replacement; + } + } + } + + instance = ModifySubscriptionCount; + break; + } + + case Opc.Ua.BrowseNames.SetPublishingModeCount: + { + if (createOrReplace) + { + if (SetPublishingModeCount == null) + { + if (replacement == null) + { + SetPublishingModeCount = new BaseDataVariableState(this); + } + else + { + SetPublishingModeCount = (BaseDataVariableState)replacement; + } + } + } + + instance = SetPublishingModeCount; + break; + } + + case Opc.Ua.BrowseNames.PublishCount: + { + if (createOrReplace) + { + if (PublishCount == null) + { + if (replacement == null) + { + PublishCount = new BaseDataVariableState(this); + } + else + { + PublishCount = (BaseDataVariableState)replacement; + } + } + } + + instance = PublishCount; + break; + } + + case Opc.Ua.BrowseNames.RepublishCount: + { + if (createOrReplace) + { + if (RepublishCount == null) + { + if (replacement == null) + { + RepublishCount = new BaseDataVariableState(this); + } + else + { + RepublishCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RepublishCount; + break; + } + + case Opc.Ua.BrowseNames.TransferSubscriptionsCount: + { + if (createOrReplace) + { + if (TransferSubscriptionsCount == null) + { + if (replacement == null) + { + TransferSubscriptionsCount = new BaseDataVariableState(this); + } + else + { + TransferSubscriptionsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = TransferSubscriptionsCount; + break; + } + + case Opc.Ua.BrowseNames.DeleteSubscriptionsCount: + { + if (createOrReplace) + { + if (DeleteSubscriptionsCount == null) + { + if (replacement == null) + { + DeleteSubscriptionsCount = new BaseDataVariableState(this); + } + else + { + DeleteSubscriptionsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DeleteSubscriptionsCount; + break; + } + + case Opc.Ua.BrowseNames.AddNodesCount: + { + if (createOrReplace) + { + if (AddNodesCount == null) + { + if (replacement == null) + { + AddNodesCount = new BaseDataVariableState(this); + } + else + { + AddNodesCount = (BaseDataVariableState)replacement; + } + } + } + + instance = AddNodesCount; + break; + } + + case Opc.Ua.BrowseNames.AddReferencesCount: + { + if (createOrReplace) + { + if (AddReferencesCount == null) + { + if (replacement == null) + { + AddReferencesCount = new BaseDataVariableState(this); + } + else + { + AddReferencesCount = (BaseDataVariableState)replacement; + } + } + } + + instance = AddReferencesCount; + break; + } + + case Opc.Ua.BrowseNames.DeleteNodesCount: + { + if (createOrReplace) + { + if (DeleteNodesCount == null) + { + if (replacement == null) + { + DeleteNodesCount = new BaseDataVariableState(this); + } + else + { + DeleteNodesCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DeleteNodesCount; + break; + } + + case Opc.Ua.BrowseNames.DeleteReferencesCount: + { + if (createOrReplace) + { + if (DeleteReferencesCount == null) + { + if (replacement == null) + { + DeleteReferencesCount = new BaseDataVariableState(this); + } + else + { + DeleteReferencesCount = (BaseDataVariableState)replacement; + } + } + } + + instance = DeleteReferencesCount; + break; + } + + case Opc.Ua.BrowseNames.BrowseCount: + { + if (createOrReplace) + { + if (BrowseCount == null) + { + if (replacement == null) + { + BrowseCount = new BaseDataVariableState(this); + } + else + { + BrowseCount = (BaseDataVariableState)replacement; + } + } + } + + instance = BrowseCount; + break; + } + + case Opc.Ua.BrowseNames.BrowseNextCount: + { + if (createOrReplace) + { + if (BrowseNextCount == null) + { + if (replacement == null) + { + BrowseNextCount = new BaseDataVariableState(this); + } + else + { + BrowseNextCount = (BaseDataVariableState)replacement; + } + } + } + + instance = BrowseNextCount; + break; + } + + case Opc.Ua.BrowseNames.TranslateBrowsePathsToNodeIdsCount: + { + if (createOrReplace) + { + if (TranslateBrowsePathsToNodeIdsCount == null) + { + if (replacement == null) + { + TranslateBrowsePathsToNodeIdsCount = new BaseDataVariableState(this); + } + else + { + TranslateBrowsePathsToNodeIdsCount = (BaseDataVariableState)replacement; + } + } + } + + instance = TranslateBrowsePathsToNodeIdsCount; + break; + } + + case Opc.Ua.BrowseNames.QueryFirstCount: + { + if (createOrReplace) + { + if (QueryFirstCount == null) + { + if (replacement == null) + { + QueryFirstCount = new BaseDataVariableState(this); + } + else + { + QueryFirstCount = (BaseDataVariableState)replacement; + } + } + } + + instance = QueryFirstCount; + break; + } + + case Opc.Ua.BrowseNames.QueryNextCount: + { + if (createOrReplace) + { + if (QueryNextCount == null) + { + if (replacement == null) + { + QueryNextCount = new BaseDataVariableState(this); + } + else + { + QueryNextCount = (BaseDataVariableState)replacement; + } + } + } + + instance = QueryNextCount; + break; + } + + case Opc.Ua.BrowseNames.RegisterNodesCount: + { + if (createOrReplace) + { + if (RegisterNodesCount == null) + { + if (replacement == null) + { + RegisterNodesCount = new BaseDataVariableState(this); + } + else + { + RegisterNodesCount = (BaseDataVariableState)replacement; + } + } + } + + instance = RegisterNodesCount; + break; + } + + case Opc.Ua.BrowseNames.UnregisterNodesCount: + { + if (createOrReplace) + { + if (UnregisterNodesCount == null) + { + if (replacement == null) + { + UnregisterNodesCount = new BaseDataVariableState(this); + } + else + { + UnregisterNodesCount = (BaseDataVariableState)replacement; + } + } + } + + instance = UnregisterNodesCount; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_sessionId; + private BaseDataVariableState m_sessionName; + private BaseDataVariableState m_clientDescription; + private BaseDataVariableState m_serverUri; + private BaseDataVariableState m_endpointUrl; + private BaseDataVariableState m_localeIds; + private BaseDataVariableState m_actualSessionTimeout; + private BaseDataVariableState m_maxResponseMessageSize; + private BaseDataVariableState m_clientConnectionTime; + private BaseDataVariableState m_clientLastContactTime; + private BaseDataVariableState m_currentSubscriptionsCount; + private BaseDataVariableState m_currentMonitoredItemsCount; + private BaseDataVariableState m_currentPublishRequestsInQueue; + private BaseDataVariableState m_totalRequestCount; + private BaseDataVariableState m_unauthorizedRequestCount; + private BaseDataVariableState m_readCount; + private BaseDataVariableState m_historyReadCount; + private BaseDataVariableState m_writeCount; + private BaseDataVariableState m_historyUpdateCount; + private BaseDataVariableState m_callCount; + private BaseDataVariableState m_createMonitoredItemsCount; + private BaseDataVariableState m_modifyMonitoredItemsCount; + private BaseDataVariableState m_setMonitoringModeCount; + private BaseDataVariableState m_setTriggeringCount; + private BaseDataVariableState m_deleteMonitoredItemsCount; + private BaseDataVariableState m_createSubscriptionCount; + private BaseDataVariableState m_modifySubscriptionCount; + private BaseDataVariableState m_setPublishingModeCount; + private BaseDataVariableState m_publishCount; + private BaseDataVariableState m_republishCount; + private BaseDataVariableState m_transferSubscriptionsCount; + private BaseDataVariableState m_deleteSubscriptionsCount; + private BaseDataVariableState m_addNodesCount; + private BaseDataVariableState m_addReferencesCount; + private BaseDataVariableState m_deleteNodesCount; + private BaseDataVariableState m_deleteReferencesCount; + private BaseDataVariableState m_browseCount; + private BaseDataVariableState m_browseNextCount; + private BaseDataVariableState m_translateBrowsePathsToNodeIdsCount; + private BaseDataVariableState m_queryFirstCount; + private BaseDataVariableState m_queryNextCount; + private BaseDataVariableState m_registerNodesCount; + private BaseDataVariableState m_unregisterNodesCount; + #endregion + } + + #region SessionDiagnosticsVariableValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class SessionDiagnosticsVariableValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public SessionDiagnosticsVariableValue(SessionDiagnosticsVariableState variable, SessionDiagnosticsDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new SessionDiagnosticsDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public SessionDiagnosticsVariableState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public SessionDiagnosticsDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(SessionDiagnosticsVariableState 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.SessionId; + instance.OnReadValue = OnRead_SessionId; + instance.OnSimpleWriteValue = OnWrite_SessionId; + updateList.Add(instance); + instance = m_variable.SessionName; + instance.OnReadValue = OnRead_SessionName; + instance.OnSimpleWriteValue = OnWrite_SessionName; + updateList.Add(instance); + instance = m_variable.ClientDescription; + instance.OnReadValue = OnRead_ClientDescription; + instance.OnSimpleWriteValue = OnWrite_ClientDescription; + updateList.Add(instance); + instance = m_variable.ServerUri; + instance.OnReadValue = OnRead_ServerUri; + instance.OnSimpleWriteValue = OnWrite_ServerUri; + updateList.Add(instance); + instance = m_variable.EndpointUrl; + instance.OnReadValue = OnRead_EndpointUrl; + instance.OnSimpleWriteValue = OnWrite_EndpointUrl; + updateList.Add(instance); + instance = m_variable.LocaleIds; + instance.OnReadValue = OnRead_LocaleIds; + instance.OnSimpleWriteValue = OnWrite_LocaleIds; + updateList.Add(instance); + instance = m_variable.ActualSessionTimeout; + instance.OnReadValue = OnRead_ActualSessionTimeout; + instance.OnSimpleWriteValue = OnWrite_ActualSessionTimeout; + updateList.Add(instance); + instance = m_variable.MaxResponseMessageSize; + instance.OnReadValue = OnRead_MaxResponseMessageSize; + instance.OnSimpleWriteValue = OnWrite_MaxResponseMessageSize; + updateList.Add(instance); + instance = m_variable.ClientConnectionTime; + instance.OnReadValue = OnRead_ClientConnectionTime; + instance.OnSimpleWriteValue = OnWrite_ClientConnectionTime; + updateList.Add(instance); + instance = m_variable.ClientLastContactTime; + instance.OnReadValue = OnRead_ClientLastContactTime; + instance.OnSimpleWriteValue = OnWrite_ClientLastContactTime; + updateList.Add(instance); + instance = m_variable.CurrentSubscriptionsCount; + instance.OnReadValue = OnRead_CurrentSubscriptionsCount; + instance.OnSimpleWriteValue = OnWrite_CurrentSubscriptionsCount; + updateList.Add(instance); + instance = m_variable.CurrentMonitoredItemsCount; + instance.OnReadValue = OnRead_CurrentMonitoredItemsCount; + instance.OnSimpleWriteValue = OnWrite_CurrentMonitoredItemsCount; + updateList.Add(instance); + instance = m_variable.CurrentPublishRequestsInQueue; + instance.OnReadValue = OnRead_CurrentPublishRequestsInQueue; + instance.OnSimpleWriteValue = OnWrite_CurrentPublishRequestsInQueue; + updateList.Add(instance); + instance = m_variable.TotalRequestCount; + instance.OnReadValue = OnRead_TotalRequestCount; + instance.OnSimpleWriteValue = OnWrite_TotalRequestCount; + updateList.Add(instance); + instance = m_variable.UnauthorizedRequestCount; + instance.OnReadValue = OnRead_UnauthorizedRequestCount; + instance.OnSimpleWriteValue = OnWrite_UnauthorizedRequestCount; + updateList.Add(instance); + instance = m_variable.ReadCount; + instance.OnReadValue = OnRead_ReadCount; + instance.OnSimpleWriteValue = OnWrite_ReadCount; + updateList.Add(instance); + instance = m_variable.HistoryReadCount; + instance.OnReadValue = OnRead_HistoryReadCount; + instance.OnSimpleWriteValue = OnWrite_HistoryReadCount; + updateList.Add(instance); + instance = m_variable.WriteCount; + instance.OnReadValue = OnRead_WriteCount; + instance.OnSimpleWriteValue = OnWrite_WriteCount; + updateList.Add(instance); + instance = m_variable.HistoryUpdateCount; + instance.OnReadValue = OnRead_HistoryUpdateCount; + instance.OnSimpleWriteValue = OnWrite_HistoryUpdateCount; + updateList.Add(instance); + instance = m_variable.CallCount; + instance.OnReadValue = OnRead_CallCount; + instance.OnSimpleWriteValue = OnWrite_CallCount; + updateList.Add(instance); + instance = m_variable.CreateMonitoredItemsCount; + instance.OnReadValue = OnRead_CreateMonitoredItemsCount; + instance.OnSimpleWriteValue = OnWrite_CreateMonitoredItemsCount; + updateList.Add(instance); + instance = m_variable.ModifyMonitoredItemsCount; + instance.OnReadValue = OnRead_ModifyMonitoredItemsCount; + instance.OnSimpleWriteValue = OnWrite_ModifyMonitoredItemsCount; + updateList.Add(instance); + instance = m_variable.SetMonitoringModeCount; + instance.OnReadValue = OnRead_SetMonitoringModeCount; + instance.OnSimpleWriteValue = OnWrite_SetMonitoringModeCount; + updateList.Add(instance); + instance = m_variable.SetTriggeringCount; + instance.OnReadValue = OnRead_SetTriggeringCount; + instance.OnSimpleWriteValue = OnWrite_SetTriggeringCount; + updateList.Add(instance); + instance = m_variable.DeleteMonitoredItemsCount; + instance.OnReadValue = OnRead_DeleteMonitoredItemsCount; + instance.OnSimpleWriteValue = OnWrite_DeleteMonitoredItemsCount; + updateList.Add(instance); + instance = m_variable.CreateSubscriptionCount; + instance.OnReadValue = OnRead_CreateSubscriptionCount; + instance.OnSimpleWriteValue = OnWrite_CreateSubscriptionCount; + updateList.Add(instance); + instance = m_variable.ModifySubscriptionCount; + instance.OnReadValue = OnRead_ModifySubscriptionCount; + instance.OnSimpleWriteValue = OnWrite_ModifySubscriptionCount; + updateList.Add(instance); + instance = m_variable.SetPublishingModeCount; + instance.OnReadValue = OnRead_SetPublishingModeCount; + instance.OnSimpleWriteValue = OnWrite_SetPublishingModeCount; + updateList.Add(instance); + instance = m_variable.PublishCount; + instance.OnReadValue = OnRead_PublishCount; + instance.OnSimpleWriteValue = OnWrite_PublishCount; + updateList.Add(instance); + instance = m_variable.RepublishCount; + instance.OnReadValue = OnRead_RepublishCount; + instance.OnSimpleWriteValue = OnWrite_RepublishCount; + updateList.Add(instance); + instance = m_variable.TransferSubscriptionsCount; + instance.OnReadValue = OnRead_TransferSubscriptionsCount; + instance.OnSimpleWriteValue = OnWrite_TransferSubscriptionsCount; + updateList.Add(instance); + instance = m_variable.DeleteSubscriptionsCount; + instance.OnReadValue = OnRead_DeleteSubscriptionsCount; + instance.OnSimpleWriteValue = OnWrite_DeleteSubscriptionsCount; + updateList.Add(instance); + instance = m_variable.AddNodesCount; + instance.OnReadValue = OnRead_AddNodesCount; + instance.OnSimpleWriteValue = OnWrite_AddNodesCount; + updateList.Add(instance); + instance = m_variable.AddReferencesCount; + instance.OnReadValue = OnRead_AddReferencesCount; + instance.OnSimpleWriteValue = OnWrite_AddReferencesCount; + updateList.Add(instance); + instance = m_variable.DeleteNodesCount; + instance.OnReadValue = OnRead_DeleteNodesCount; + instance.OnSimpleWriteValue = OnWrite_DeleteNodesCount; + updateList.Add(instance); + instance = m_variable.DeleteReferencesCount; + instance.OnReadValue = OnRead_DeleteReferencesCount; + instance.OnSimpleWriteValue = OnWrite_DeleteReferencesCount; + updateList.Add(instance); + instance = m_variable.BrowseCount; + instance.OnReadValue = OnRead_BrowseCount; + instance.OnSimpleWriteValue = OnWrite_BrowseCount; + updateList.Add(instance); + instance = m_variable.BrowseNextCount; + instance.OnReadValue = OnRead_BrowseNextCount; + instance.OnSimpleWriteValue = OnWrite_BrowseNextCount; + updateList.Add(instance); + instance = m_variable.TranslateBrowsePathsToNodeIdsCount; + instance.OnReadValue = OnRead_TranslateBrowsePathsToNodeIdsCount; + instance.OnSimpleWriteValue = OnWrite_TranslateBrowsePathsToNodeIdsCount; + updateList.Add(instance); + instance = m_variable.QueryFirstCount; + instance.OnReadValue = OnRead_QueryFirstCount; + instance.OnSimpleWriteValue = OnWrite_QueryFirstCount; + updateList.Add(instance); + instance = m_variable.QueryNextCount; + instance.OnReadValue = OnRead_QueryNextCount; + instance.OnSimpleWriteValue = OnWrite_QueryNextCount; + updateList.Add(instance); + instance = m_variable.RegisterNodesCount; + instance.OnReadValue = OnRead_RegisterNodesCount; + instance.OnSimpleWriteValue = OnWrite_RegisterNodesCount; + updateList.Add(instance); + instance = m_variable.UnregisterNodesCount; + instance.OnReadValue = OnRead_UnregisterNodesCount; + instance.OnSimpleWriteValue = OnWrite_UnregisterNodesCount; + 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 = (SessionDiagnosticsDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region SessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SessionId( + 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.SessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SessionName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SessionName( + 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.SessionName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SessionName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SessionName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ClientDescription Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ClientDescription( + 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.ClientDescription; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ClientDescription(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ClientDescription = (ApplicationDescription)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ServerUri Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ServerUri( + 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.ServerUri; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ServerUri(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ServerUri = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region EndpointUrl Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_EndpointUrl( + 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.EndpointUrl; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_EndpointUrl(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.EndpointUrl = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LocaleIds Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LocaleIds( + 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.LocaleIds; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LocaleIds(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LocaleIds = (StringCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ActualSessionTimeout Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ActualSessionTimeout( + 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.ActualSessionTimeout; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ActualSessionTimeout(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ActualSessionTimeout = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region MaxResponseMessageSize Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_MaxResponseMessageSize( + 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.MaxResponseMessageSize; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_MaxResponseMessageSize(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.MaxResponseMessageSize = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ClientConnectionTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ClientConnectionTime( + 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.ClientConnectionTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ClientConnectionTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ClientConnectionTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ClientLastContactTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ClientLastContactTime( + 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.ClientLastContactTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ClientLastContactTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ClientLastContactTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentSubscriptionsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentSubscriptionsCount( + 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.CurrentSubscriptionsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentSubscriptionsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentSubscriptionsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentMonitoredItemsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentMonitoredItemsCount( + 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.CurrentMonitoredItemsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentMonitoredItemsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentMonitoredItemsCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CurrentPublishRequestsInQueue Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CurrentPublishRequestsInQueue( + 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.CurrentPublishRequestsInQueue; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CurrentPublishRequestsInQueue(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CurrentPublishRequestsInQueue = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TotalRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TotalRequestCount( + 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.TotalRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TotalRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TotalRequestCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region UnauthorizedRequestCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_UnauthorizedRequestCount( + 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.UnauthorizedRequestCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_UnauthorizedRequestCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.UnauthorizedRequestCount = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ReadCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ReadCount( + 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.ReadCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ReadCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ReadCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region HistoryReadCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_HistoryReadCount( + 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.HistoryReadCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_HistoryReadCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.HistoryReadCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region WriteCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_WriteCount( + 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.WriteCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_WriteCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.WriteCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region HistoryUpdateCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_HistoryUpdateCount( + 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.HistoryUpdateCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_HistoryUpdateCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.HistoryUpdateCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CallCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CallCount( + 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.CallCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CallCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CallCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CreateMonitoredItemsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CreateMonitoredItemsCount( + 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.CreateMonitoredItemsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CreateMonitoredItemsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CreateMonitoredItemsCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ModifyMonitoredItemsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ModifyMonitoredItemsCount( + 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.ModifyMonitoredItemsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ModifyMonitoredItemsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ModifyMonitoredItemsCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SetMonitoringModeCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SetMonitoringModeCount( + 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.SetMonitoringModeCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SetMonitoringModeCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SetMonitoringModeCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SetTriggeringCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SetTriggeringCount( + 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.SetTriggeringCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SetTriggeringCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SetTriggeringCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DeleteMonitoredItemsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DeleteMonitoredItemsCount( + 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.DeleteMonitoredItemsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DeleteMonitoredItemsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DeleteMonitoredItemsCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CreateSubscriptionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CreateSubscriptionCount( + 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.CreateSubscriptionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CreateSubscriptionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CreateSubscriptionCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ModifySubscriptionCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ModifySubscriptionCount( + 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.ModifySubscriptionCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ModifySubscriptionCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ModifySubscriptionCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SetPublishingModeCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SetPublishingModeCount( + 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.SetPublishingModeCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SetPublishingModeCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SetPublishingModeCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region PublishCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_PublishCount( + 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.PublishCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_PublishCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.PublishCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RepublishCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RepublishCount( + 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.RepublishCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RepublishCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RepublishCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TransferSubscriptionsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TransferSubscriptionsCount( + 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.TransferSubscriptionsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TransferSubscriptionsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TransferSubscriptionsCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DeleteSubscriptionsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DeleteSubscriptionsCount( + 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.DeleteSubscriptionsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DeleteSubscriptionsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DeleteSubscriptionsCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region AddNodesCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_AddNodesCount( + 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.AddNodesCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_AddNodesCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.AddNodesCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region AddReferencesCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_AddReferencesCount( + 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.AddReferencesCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_AddReferencesCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.AddReferencesCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DeleteNodesCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DeleteNodesCount( + 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.DeleteNodesCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DeleteNodesCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DeleteNodesCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region DeleteReferencesCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_DeleteReferencesCount( + 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.DeleteReferencesCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_DeleteReferencesCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.DeleteReferencesCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BrowseCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BrowseCount( + 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.BrowseCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BrowseCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BrowseCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region BrowseNextCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_BrowseNextCount( + 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.BrowseNextCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_BrowseNextCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.BrowseNextCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TranslateBrowsePathsToNodeIdsCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TranslateBrowsePathsToNodeIdsCount( + 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.TranslateBrowsePathsToNodeIdsCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TranslateBrowsePathsToNodeIdsCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TranslateBrowsePathsToNodeIdsCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region QueryFirstCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_QueryFirstCount( + 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.QueryFirstCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_QueryFirstCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.QueryFirstCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region QueryNextCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_QueryNextCount( + 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.QueryNextCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_QueryNextCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.QueryNextCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region RegisterNodesCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_RegisterNodesCount( + 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.RegisterNodesCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_RegisterNodesCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.RegisterNodesCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region UnregisterNodesCount Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_UnregisterNodesCount( + 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.UnregisterNodesCount; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_UnregisterNodesCount(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.UnregisterNodesCount = (ServiceCounterDataType)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private SessionDiagnosticsDataType m_value; + private SessionDiagnosticsVariableState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region SessionSecurityDiagnosticsArrayState Class + #if (!OPCUA_EXCLUDE_SessionSecurityDiagnosticsArrayState) + /// + /// Stores an instance of the SessionSecurityDiagnosticsArrayType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionSecurityDiagnosticsArrayState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SessionSecurityDiagnosticsArrayState(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(Opc.Ua.VariableTypes.SessionSecurityDiagnosticsArrayType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SessionSecurityDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.OneDimension; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAAKwAAAFNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzQXJyYXlUeXBlSW5z" + + "dGFuY2UBAMMIAQDDCMMIAAABAGQDAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SessionSecurityDiagnosticsState Class + #if (!OPCUA_EXCLUDE_SessionSecurityDiagnosticsState) + /// + /// Stores an instance of the SessionSecurityDiagnosticsType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionSecurityDiagnosticsState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SessionSecurityDiagnosticsState(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(Opc.Ua.VariableTypes.SessionSecurityDiagnosticsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.SessionSecurityDiagnosticsDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAJgAAAFNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzVHlwZUluc3RhbmNl" + + "AQDECAEAxAjECAAAAQBkA/////8BAf////8JAAAAFWCJCgIAAAAAAAkAAABTZXNzaW9uSWQBAMUIAC8A" + + "P8UIAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABUAAABDbGllbnRVc2VySWRPZlNlc3Npb24BAMYI" + + "AC8AP8YIAAAADP////8BAf////8AAAAAF2CJCgIAAAAAABMAAABDbGllbnRVc2VySWRIaXN0b3J5AQDH" + + "CAAvAD/HCAAAAAwBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABcAAABBdXRoZW50aWNhdGlv" + + "bk1lY2hhbmlzbQEAyAgALwA/yAgAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAEVuY29kaW5n" + + "AQDJCAAvAD/JCAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAARAAAAVHJhbnNwb3J0UHJvdG9jb2wB" + + "AMoIAC8AP8oIAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABTZWN1cml0eU1vZGUBAMsIAC8A" + + "P8sIAAABAC4B/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAQDMCAAv" + + "AD/MCAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAARAAAAQ2xpZW50Q2VydGlmaWNhdGUBAPILAC8A" + + "P/ILAAAAD/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState SessionId + { + get + { + return m_sessionId; + } + + set + { + if (!Object.ReferenceEquals(m_sessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sessionId = value; + } + } + + /// + public BaseDataVariableState ClientUserIdOfSession + { + get + { + return m_clientUserIdOfSession; + } + + set + { + if (!Object.ReferenceEquals(m_clientUserIdOfSession, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientUserIdOfSession = value; + } + } + + /// + public BaseDataVariableState ClientUserIdHistory + { + get + { + return m_clientUserIdHistory; + } + + set + { + if (!Object.ReferenceEquals(m_clientUserIdHistory, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientUserIdHistory = value; + } + } + + /// + public BaseDataVariableState AuthenticationMechanism + { + get + { + return m_authenticationMechanism; + } + + set + { + if (!Object.ReferenceEquals(m_authenticationMechanism, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_authenticationMechanism = value; + } + } + + /// + public BaseDataVariableState Encoding + { + get + { + return m_encoding; + } + + set + { + if (!Object.ReferenceEquals(m_encoding, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_encoding = value; + } + } + + /// + public BaseDataVariableState TransportProtocol + { + get + { + return m_transportProtocol; + } + + set + { + if (!Object.ReferenceEquals(m_transportProtocol, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportProtocol = value; + } + } + + /// + public BaseDataVariableState SecurityMode + { + get + { + return m_securityMode; + } + + set + { + if (!Object.ReferenceEquals(m_securityMode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityMode = value; + } + } + + /// + public BaseDataVariableState SecurityPolicyUri + { + get + { + return m_securityPolicyUri; + } + + set + { + if (!Object.ReferenceEquals(m_securityPolicyUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityPolicyUri = value; + } + } + + /// + public BaseDataVariableState ClientCertificate + { + get + { + return m_clientCertificate; + } + + set + { + if (!Object.ReferenceEquals(m_clientCertificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientCertificate = 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_sessionId != null) + { + children.Add(m_sessionId); + } + + if (m_clientUserIdOfSession != null) + { + children.Add(m_clientUserIdOfSession); + } + + if (m_clientUserIdHistory != null) + { + children.Add(m_clientUserIdHistory); + } + + if (m_authenticationMechanism != null) + { + children.Add(m_authenticationMechanism); + } + + if (m_encoding != null) + { + children.Add(m_encoding); + } + + if (m_transportProtocol != null) + { + children.Add(m_transportProtocol); + } + + if (m_securityMode != null) + { + children.Add(m_securityMode); + } + + if (m_securityPolicyUri != null) + { + children.Add(m_securityPolicyUri); + } + + if (m_clientCertificate != null) + { + children.Add(m_clientCertificate); + } + + 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 Opc.Ua.BrowseNames.SessionId: + { + if (createOrReplace) + { + if (SessionId == null) + { + if (replacement == null) + { + SessionId = new BaseDataVariableState(this); + } + else + { + SessionId = (BaseDataVariableState)replacement; + } + } + } + + instance = SessionId; + break; + } + + case Opc.Ua.BrowseNames.ClientUserIdOfSession: + { + if (createOrReplace) + { + if (ClientUserIdOfSession == null) + { + if (replacement == null) + { + ClientUserIdOfSession = new BaseDataVariableState(this); + } + else + { + ClientUserIdOfSession = (BaseDataVariableState)replacement; + } + } + } + + instance = ClientUserIdOfSession; + break; + } + + case Opc.Ua.BrowseNames.ClientUserIdHistory: + { + if (createOrReplace) + { + if (ClientUserIdHistory == null) + { + if (replacement == null) + { + ClientUserIdHistory = new BaseDataVariableState(this); + } + else + { + ClientUserIdHistory = (BaseDataVariableState)replacement; + } + } + } + + instance = ClientUserIdHistory; + break; + } + + case Opc.Ua.BrowseNames.AuthenticationMechanism: + { + if (createOrReplace) + { + if (AuthenticationMechanism == null) + { + if (replacement == null) + { + AuthenticationMechanism = new BaseDataVariableState(this); + } + else + { + AuthenticationMechanism = (BaseDataVariableState)replacement; + } + } + } + + instance = AuthenticationMechanism; + break; + } + + case Opc.Ua.BrowseNames.Encoding: + { + if (createOrReplace) + { + if (Encoding == null) + { + if (replacement == null) + { + Encoding = new BaseDataVariableState(this); + } + else + { + Encoding = (BaseDataVariableState)replacement; + } + } + } + + instance = Encoding; + break; + } + + case Opc.Ua.BrowseNames.TransportProtocol: + { + if (createOrReplace) + { + if (TransportProtocol == null) + { + if (replacement == null) + { + TransportProtocol = new BaseDataVariableState(this); + } + else + { + TransportProtocol = (BaseDataVariableState)replacement; + } + } + } + + instance = TransportProtocol; + break; + } + + case Opc.Ua.BrowseNames.SecurityMode: + { + if (createOrReplace) + { + if (SecurityMode == null) + { + if (replacement == null) + { + SecurityMode = new BaseDataVariableState(this); + } + else + { + SecurityMode = (BaseDataVariableState)replacement; + } + } + } + + instance = SecurityMode; + break; + } + + case Opc.Ua.BrowseNames.SecurityPolicyUri: + { + if (createOrReplace) + { + if (SecurityPolicyUri == null) + { + if (replacement == null) + { + SecurityPolicyUri = new BaseDataVariableState(this); + } + else + { + SecurityPolicyUri = (BaseDataVariableState)replacement; + } + } + } + + instance = SecurityPolicyUri; + break; + } + + case Opc.Ua.BrowseNames.ClientCertificate: + { + if (createOrReplace) + { + if (ClientCertificate == null) + { + if (replacement == null) + { + ClientCertificate = new BaseDataVariableState(this); + } + else + { + ClientCertificate = (BaseDataVariableState)replacement; + } + } + } + + instance = ClientCertificate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_sessionId; + private BaseDataVariableState m_clientUserIdOfSession; + private BaseDataVariableState m_clientUserIdHistory; + private BaseDataVariableState m_authenticationMechanism; + private BaseDataVariableState m_encoding; + private BaseDataVariableState m_transportProtocol; + private BaseDataVariableState m_securityMode; + private BaseDataVariableState m_securityPolicyUri; + private BaseDataVariableState m_clientCertificate; + #endregion + } + + #region SessionSecurityDiagnosticsValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class SessionSecurityDiagnosticsValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public SessionSecurityDiagnosticsValue(SessionSecurityDiagnosticsState variable, SessionSecurityDiagnosticsDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new SessionSecurityDiagnosticsDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public SessionSecurityDiagnosticsState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public SessionSecurityDiagnosticsDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(SessionSecurityDiagnosticsState 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.SessionId; + instance.OnReadValue = OnRead_SessionId; + instance.OnSimpleWriteValue = OnWrite_SessionId; + updateList.Add(instance); + instance = m_variable.ClientUserIdOfSession; + instance.OnReadValue = OnRead_ClientUserIdOfSession; + instance.OnSimpleWriteValue = OnWrite_ClientUserIdOfSession; + updateList.Add(instance); + instance = m_variable.ClientUserIdHistory; + instance.OnReadValue = OnRead_ClientUserIdHistory; + instance.OnSimpleWriteValue = OnWrite_ClientUserIdHistory; + updateList.Add(instance); + instance = m_variable.AuthenticationMechanism; + instance.OnReadValue = OnRead_AuthenticationMechanism; + instance.OnSimpleWriteValue = OnWrite_AuthenticationMechanism; + updateList.Add(instance); + instance = m_variable.Encoding; + instance.OnReadValue = OnRead_Encoding; + instance.OnSimpleWriteValue = OnWrite_Encoding; + updateList.Add(instance); + instance = m_variable.TransportProtocol; + instance.OnReadValue = OnRead_TransportProtocol; + instance.OnSimpleWriteValue = OnWrite_TransportProtocol; + updateList.Add(instance); + instance = m_variable.SecurityMode; + instance.OnReadValue = OnRead_SecurityMode; + instance.OnSimpleWriteValue = OnWrite_SecurityMode; + updateList.Add(instance); + instance = m_variable.SecurityPolicyUri; + instance.OnReadValue = OnRead_SecurityPolicyUri; + instance.OnSimpleWriteValue = OnWrite_SecurityPolicyUri; + updateList.Add(instance); + instance = m_variable.ClientCertificate; + instance.OnReadValue = OnRead_ClientCertificate; + instance.OnSimpleWriteValue = OnWrite_ClientCertificate; + 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 = (SessionSecurityDiagnosticsDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region SessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SessionId( + 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.SessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ClientUserIdOfSession Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ClientUserIdOfSession( + 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.ClientUserIdOfSession; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ClientUserIdOfSession(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ClientUserIdOfSession = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ClientUserIdHistory Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ClientUserIdHistory( + 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.ClientUserIdHistory; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ClientUserIdHistory(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ClientUserIdHistory = (StringCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region AuthenticationMechanism Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_AuthenticationMechanism( + 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.AuthenticationMechanism; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_AuthenticationMechanism(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.AuthenticationMechanism = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Encoding Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Encoding( + 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.Encoding; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Encoding(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Encoding = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region TransportProtocol Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_TransportProtocol( + 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.TransportProtocol; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_TransportProtocol(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.TransportProtocol = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SecurityMode Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SecurityMode( + 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.SecurityMode; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SecurityMode(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SecurityMode = (MessageSecurityMode)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region SecurityPolicyUri Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_SecurityPolicyUri( + 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.SecurityPolicyUri; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_SecurityPolicyUri(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.SecurityPolicyUri = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region ClientCertificate Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_ClientCertificate( + 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.ClientCertificate; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_ClientCertificate(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.ClientCertificate = (byte[])Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private SessionSecurityDiagnosticsDataType m_value; + private SessionSecurityDiagnosticsState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region OptionSetState Class + #if (!OPCUA_EXCLUDE_OptionSetState) + /// + /// Stores an instance of the OptionSetType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OptionSetState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OptionSetState(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(Opc.Ua.VariableTypes.OptionSetType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (BitMask != null) + { + BitMask.Initialize(context, BitMask_InitializationString); + } + } + + #region Initialization String + private const string BitMask_InitializationString = + "//////////8XYIkKAgAAAAAABwAAAEJpdE1hc2sBALUtAC4ARLUtAAAAAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAA="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAFQAAAE9wdGlvblNldFR5cGVJbnN0YW5jZQEA3ywBAN8s3ywAAAAY////" + + "/wEB/////wIAAAAXYIkKAgAAAAAADwAAAE9wdGlvblNldFZhbHVlcwEA4CwALgBE4CwAAAAVAQAAAAEA" + + "AAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAHAAAAQml0TWFzawEAtS0ALgBEtS0AAAABAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState OptionSetValues + { + get + { + return m_optionSetValues; + } + + set + { + if (!Object.ReferenceEquals(m_optionSetValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_optionSetValues = value; + } + } + + /// + public PropertyState BitMask + { + get + { + return m_bitMask; + } + + set + { + if (!Object.ReferenceEquals(m_bitMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_bitMask = 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_optionSetValues != null) + { + children.Add(m_optionSetValues); + } + + if (m_bitMask != null) + { + children.Add(m_bitMask); + } + + 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 Opc.Ua.BrowseNames.OptionSetValues: + { + if (createOrReplace) + { + if (OptionSetValues == null) + { + if (replacement == null) + { + OptionSetValues = new PropertyState(this); + } + else + { + OptionSetValues = (PropertyState)replacement; + } + } + } + + instance = OptionSetValues; + break; + } + + case Opc.Ua.BrowseNames.BitMask: + { + if (createOrReplace) + { + if (BitMask == null) + { + if (replacement == null) + { + BitMask = new PropertyState(this); + } + else + { + BitMask = (PropertyState)replacement; + } + } + } + + instance = BitMask; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_optionSetValues; + private PropertyState m_bitMask; + #endregion + } + + #region OptionSetState Class + /// + /// A typed version of the OptionSetType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class OptionSetState : OptionSetState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public OptionSetState(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 SelectionListState Class + #if (!OPCUA_EXCLUDE_SelectionListState) + /// + /// Stores an instance of the SelectionListType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SelectionListState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SelectionListState(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(Opc.Ua.VariableTypes.SelectionListType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.Any; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SelectionDescriptions != null) + { + SelectionDescriptions.Initialize(context, SelectionDescriptions_InitializationString); + } + + if (RestrictToList != null) + { + RestrictToList.Initialize(context, RestrictToList_InitializationString); + } + } + + #region Initialization String + private const string SelectionDescriptions_InitializationString = + "//////////8XYIkKAgAAAAAAFQAAAFNlbGVjdGlvbkRlc2NyaXB0aW9ucwEA4UQALgBE4UQAAAAVAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string RestrictToList_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAFJlc3RyaWN0VG9MaXN0AQC4PwAuAES4PwAAAAH/////AQH/////" + + "AAAAAA=="; + + private const string InitializationString = + "//////////8VYIECAgAAAAAAGQAAAFNlbGVjdGlvbkxpc3RUeXBlSW5zdGFuY2UBALU/AQC1P7U/AAAA" + + "GAEB/////wMAAAAXYIkKAgAAAAAACgAAAFNlbGVjdGlvbnMBAOBEAC4AROBEAAAAGAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAXYIkKAgAAAAAAFQAAAFNlbGVjdGlvbkRlc2NyaXB0aW9ucwEA4UQALgBE4UQAAAAV" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAOAAAAUmVzdHJpY3RUb0xpc3QBALg/AC4ARLg/" + + "AAAAAf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Selections + { + get + { + return m_selections; + } + + set + { + if (!Object.ReferenceEquals(m_selections, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_selections = value; + } + } + + /// + public PropertyState SelectionDescriptions + { + get + { + return m_selectionDescriptions; + } + + set + { + if (!Object.ReferenceEquals(m_selectionDescriptions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_selectionDescriptions = value; + } + } + + /// + public PropertyState RestrictToList + { + get + { + return m_restrictToList; + } + + set + { + if (!Object.ReferenceEquals(m_restrictToList, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_restrictToList = 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_selections != null) + { + children.Add(m_selections); + } + + if (m_selectionDescriptions != null) + { + children.Add(m_selectionDescriptions); + } + + if (m_restrictToList != null) + { + children.Add(m_restrictToList); + } + + 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 Opc.Ua.BrowseNames.Selections: + { + if (createOrReplace) + { + if (Selections == null) + { + if (replacement == null) + { + Selections = new PropertyState(this); + } + else + { + Selections = (PropertyState)replacement; + } + } + } + + instance = Selections; + break; + } + + case Opc.Ua.BrowseNames.SelectionDescriptions: + { + if (createOrReplace) + { + if (SelectionDescriptions == null) + { + if (replacement == null) + { + SelectionDescriptions = new PropertyState(this); + } + else + { + SelectionDescriptions = (PropertyState)replacement; + } + } + } + + instance = SelectionDescriptions; + break; + } + + case Opc.Ua.BrowseNames.RestrictToList: + { + if (createOrReplace) + { + if (RestrictToList == null) + { + if (replacement == null) + { + RestrictToList = new PropertyState(this); + } + else + { + RestrictToList = (PropertyState)replacement; + } + } + } + + instance = RestrictToList; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_selections; + private PropertyState m_selectionDescriptions; + private PropertyState m_restrictToList; + #endregion + } + + #region SelectionListState Class + /// + /// A typed version of the SelectionListType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class SelectionListState : SelectionListState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public SelectionListState(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 AudioVariableState Class + #if (!OPCUA_EXCLUDE_AudioVariableState) + /// + /// Stores an instance of the AudioVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AudioVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AudioVariableState(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(Opc.Ua.VariableTypes.AudioVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.AudioDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (ListId != null) + { + ListId.Initialize(context, ListId_InitializationString); + } + + if (AgencyId != null) + { + AgencyId.Initialize(context, AgencyId_InitializationString); + } + + if (VersionId != null) + { + VersionId.Initialize(context, VersionId_InitializationString); + } + } + + #region Initialization String + private const string ListId_InitializationString = + "//////////8VYIkKAgAAAAAABgAAAExpc3RJZAEAREYALgBEREYAAAAM/////wEB/////wAAAAA="; + + private const string AgencyId_InitializationString = + "//////////8VYIkKAgAAAAAACAAAAEFnZW5jeUlkAQBFRgAuAERFRgAAAAz/////AQH/////AAAAAA=="; + + private const string VersionId_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAFZlcnNpb25JZAEARkYALgBERkYAAAAM/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAGQAAAEF1ZGlvVmFyaWFibGVUeXBlSW5zdGFuY2UBAEJGAQBCRkJGAAAB" + + "ALM//////wEB/////wMAAAAVYIkKAgAAAAAABgAAAExpc3RJZAEAREYALgBEREYAAAAM/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACAAAAEFnZW5jeUlkAQBFRgAuAERFRgAAAAz/////AQH/////AAAAABVgiQoC" + + "AAAAAAAJAAAAVmVyc2lvbklkAQBGRgAuAERGRgAAAAz/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ListId + { + get + { + return m_listId; + } + + set + { + if (!Object.ReferenceEquals(m_listId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_listId = value; + } + } + + /// + public PropertyState AgencyId + { + get + { + return m_agencyId; + } + + set + { + if (!Object.ReferenceEquals(m_agencyId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_agencyId = value; + } + } + + /// + public PropertyState VersionId + { + get + { + return m_versionId; + } + + set + { + if (!Object.ReferenceEquals(m_versionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_versionId = 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_listId != null) + { + children.Add(m_listId); + } + + if (m_agencyId != null) + { + children.Add(m_agencyId); + } + + if (m_versionId != null) + { + children.Add(m_versionId); + } + + 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 Opc.Ua.BrowseNames.ListId: + { + if (createOrReplace) + { + if (ListId == null) + { + if (replacement == null) + { + ListId = new PropertyState(this); + } + else + { + ListId = (PropertyState)replacement; + } + } + } + + instance = ListId; + break; + } + + case Opc.Ua.BrowseNames.AgencyId: + { + if (createOrReplace) + { + if (AgencyId == null) + { + if (replacement == null) + { + AgencyId = new PropertyState(this); + } + else + { + AgencyId = (PropertyState)replacement; + } + } + } + + instance = AgencyId; + break; + } + + case Opc.Ua.BrowseNames.VersionId: + { + if (createOrReplace) + { + if (VersionId == null) + { + if (replacement == null) + { + VersionId = new PropertyState(this); + } + else + { + VersionId = (PropertyState)replacement; + } + } + } + + instance = VersionId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_listId; + private PropertyState m_agencyId; + private PropertyState m_versionId; + #endregion + } + #endif + #endregion + + #region GetMonitoredItemsMethodState Class + #if (!OPCUA_EXCLUDE_GetMonitoredItemsMethodState) + /// + /// Stores an instance of the GetMonitoredItemsMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetMonitoredItemsMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetMonitoredItemsMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetMonitoredItemsMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGwAAAEdldE1vbml0b3JlZEl0ZW1zTWV0aG9kVHlwZQEA5ywALwEA5yzn" + + "LAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOgsAC4AROgsAACWAQAAAAEA" + + "KgEBHQAAAA4AAABTdWJzY3JpcHRpb25JZAAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA6SwALgBE6SwAAJYCAAAAAQAqAQEgAAAADQAA" + + "AFNlcnZlckhhbmRsZXMABwEAAAABAAAAAAAAAAABACoBASAAAAANAAAAQ2xpZW50SGFuZGxlcwAHAQAA" + + "AAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetMonitoredItemsMethodStateMethodCallHandler 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; + + uint subscriptionId = (uint)_inputArguments[0]; + + uint[] serverHandles = (uint[])_outputArguments[0]; + uint[] clientHandles = (uint[])_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + subscriptionId, + ref serverHandles, + ref clientHandles); + } + + _outputArguments[0] = serverHandles; + _outputArguments[1] = clientHandles; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetMonitoredItemsMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint subscriptionId, + ref uint[] serverHandles, + ref uint[] clientHandles); + #endif + #endregion + + #region ResendDataMethodState Class + #if (!OPCUA_EXCLUDE_ResendDataMethodState) + /// + /// Stores an instance of the ResendDataMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ResendDataMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ResendDataMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new ResendDataMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFAAAAFJlc2VuZERhdGFNZXRob2RUeXBlAQBLMgAvAQBLMksyAAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEATDIALgBETDIAAJYBAAAAAQAqAQEdAAAA" + + "DgAAAFN1YnNjcmlwdGlvbklkAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public ResendDataMethodStateMethodCallHandler 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; + + uint subscriptionId = (uint)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + subscriptionId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult ResendDataMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint subscriptionId); + #endif + #endregion + + #region SetSubscriptionDurableMethodState Class + #if (!OPCUA_EXCLUDE_SetSubscriptionDurableMethodState) + /// + /// Stores an instance of the SetSubscriptionDurableMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SetSubscriptionDurableMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SetSubscriptionDurableMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new SetSubscriptionDurableMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAIAAAAFNldFN1YnNjcmlwdGlvbkR1cmFibGVNZXRob2RUeXBlAQDQMQAv" + + "AQDQMdAxAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA0TEALgBE0TEAAJYC" + + "AAAAAQAqAQEdAAAADgAAAFN1YnNjcmlwdGlvbklkAAf/////AAAAAAABACoBAR4AAAAPAAAATGlmZXRp" + + "bWVJbkhvdXJzAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAA" + + "T3V0cHV0QXJndW1lbnRzAQDSMQAuAETSMQAAlgEAAAABACoBASUAAAAWAAAAUmV2aXNlZExpZmV0aW1l" + + "SW5Ib3VycwAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public SetSubscriptionDurableMethodStateMethodCallHandler 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; + + uint subscriptionId = (uint)_inputArguments[0]; + uint lifetimeInHours = (uint)_inputArguments[1]; + + uint revisedLifetimeInHours = (uint)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + subscriptionId, + lifetimeInHours, + ref revisedLifetimeInHours); + } + + _outputArguments[0] = revisedLifetimeInHours; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult SetSubscriptionDurableMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint subscriptionId, + uint lifetimeInHours, + ref uint revisedLifetimeInHours); + #endif + #endregion + + #region RequestServerStateChangeMethodState Class + #if (!OPCUA_EXCLUDE_RequestServerStateChangeMethodState) + /// + /// Stores an instance of the RequestServerStateChangeMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RequestServerStateChangeMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RequestServerStateChangeMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RequestServerStateChangeMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAIgAAAFJlcXVlc3RTZXJ2ZXJTdGF0ZUNoYW5nZU1ldGhvZFR5cGUBAFgy" + + "AC8BAFgyWDIAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBZMgAuAERZMgAA" + + "lgUAAAABACoBARYAAAAFAAAAU3RhdGUBAFQD/////wAAAAAAAQAqAQEiAAAAEwAAAEVzdGltYXRlZFJl" + + "dHVyblRpbWUADf////8AAAAAAAEAKgEBIgAAABMAAABTZWNvbmRzVGlsbFNodXRkb3duAAf/////AAAA" + + "AAABACoBARUAAAAGAAAAUmVhc29uABX/////AAAAAAABACoBARYAAAAHAAAAUmVzdGFydAAB/////wAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RequestServerStateChangeMethodStateMethodCallHandler 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; + + ServerState state = (ServerState)_inputArguments[0]; + DateTime estimatedReturnTime = (DateTime)_inputArguments[1]; + uint secondsTillShutdown = (uint)_inputArguments[2]; + LocalizedText reason = (LocalizedText)_inputArguments[3]; + bool restart = (bool)_inputArguments[4]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + state, + estimatedReturnTime, + secondsTillShutdown, + reason, + restart); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RequestServerStateChangeMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ServerState state, + DateTime estimatedReturnTime, + uint secondsTillShutdown, + LocalizedText reason, + bool restart); + #endif + #endregion + + #region StateMachineState Class + #if (!OPCUA_EXCLUDE_StateMachineState) + /// + /// Stores an instance of the StateMachineType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StateMachineState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StateMachineState(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(Opc.Ua.ObjectTypes.StateMachineType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (LastTransition != null) + { + LastTransition.Initialize(context, LastTransition_InitializationString); + } + } + + #region Initialization String + private const string LastTransition_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAExhc3RUcmFuc2l0aW9uAQDSCgAvAQDKCtIKAAAAFf////8BAf//" + + "//8BAAAAFWCJCgIAAAAAAAIAAABJZAEAjA4ALgBEjA4AAAAY/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGAAAAFN0YXRlTWFjaGluZVR5cGVJbnN0YW5jZQEA+wgBAPsI+wgAAP//" + + "//8CAAAAFWCJCgIAAAAAAAwAAABDdXJyZW50U3RhdGUBANEKAC8BAMMK0QoAAAAV/////wEB/////wEA" + + "AAAVYIkKAgAAAAAAAgAAAElkAQCIDgAuAESIDgAAABj/////AQH/////AAAAABVgiQoCAAAAAAAOAAAA" + + "TGFzdFRyYW5zaXRpb24BANIKAC8BAMoK0goAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAAAgAAAElk" + + "AQCMDgAuAESMDgAAABj/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public StateVariableState CurrentState + { + get + { + return m_currentState; + } + + set + { + if (!Object.ReferenceEquals(m_currentState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentState = value; + } + } + + /// + public TransitionVariableState LastTransition + { + get + { + return m_lastTransition; + } + + set + { + if (!Object.ReferenceEquals(m_lastTransition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastTransition = 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_currentState != null) + { + children.Add(m_currentState); + } + + if (m_lastTransition != null) + { + children.Add(m_lastTransition); + } + + 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 Opc.Ua.BrowseNames.CurrentState: + { + if (createOrReplace) + { + if (CurrentState == null) + { + if (replacement == null) + { + CurrentState = new StateVariableState(this); + } + else + { + CurrentState = (StateVariableState)replacement; + } + } + } + + instance = CurrentState; + break; + } + + case Opc.Ua.BrowseNames.LastTransition: + { + if (createOrReplace) + { + if (LastTransition == null) + { + if (replacement == null) + { + LastTransition = new TransitionVariableState(this); + } + else + { + LastTransition = (TransitionVariableState)replacement; + } + } + } + + instance = LastTransition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private StateVariableState m_currentState; + private TransitionVariableState m_lastTransition; + #endregion + } + #endif + #endregion + + #region StateVariableState Class + #if (!OPCUA_EXCLUDE_StateVariableState) + /// + /// Stores an instance of the StateVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StateVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StateVariableState(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(Opc.Ua.VariableTypes.StateVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (Name != null) + { + Name.Initialize(context, Name_InitializationString); + } + + if (Number != null) + { + Number.Initialize(context, Number_InitializationString); + } + + if (EffectiveDisplayName != null) + { + EffectiveDisplayName.Initialize(context, EffectiveDisplayName_InitializationString); + } + } + + #region Initialization String + private const string Name_InitializationString = + "//////////8VYIkKAgAAAAAABAAAAE5hbWUBAMUKAC4ARMUKAAAAFP////8BAf////8AAAAA"; + + private const string Number_InitializationString = + "//////////8VYIkKAgAAAAAABgAAAE51bWJlcgEAxgoALgBExgoAAAAH/////wEB/////wAAAAA="; + + private const string EffectiveDisplayName_InitializationString = + "//////////8VYIkKAgAAAAAAFAAAAEVmZmVjdGl2ZURpc3BsYXlOYW1lAQDHCgAuAETHCgAAABX/////" + + "AQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAGQAAAFN0YXRlVmFyaWFibGVUeXBlSW5zdGFuY2UBAMMKAQDDCsMKAAAA" + + "Ff////8BAf////8EAAAAFWCJCgIAAAAAAAIAAABJZAEAxAoALgBExAoAAAAY/////wEB/////wAAAAAV" + + "YIkKAgAAAAAABAAAAE5hbWUBAMUKAC4ARMUKAAAAFP////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABO" + + "dW1iZXIBAMYKAC4ARMYKAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABQAAABFZmZlY3RpdmVEaXNw" + + "bGF5TmFtZQEAxwoALgBExwoAAAAV/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Id + { + get + { + return m_id; + } + + set + { + if (!Object.ReferenceEquals(m_id, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_id = value; + } + } + + /// + public PropertyState Name + { + get + { + return m_name; + } + + set + { + if (!Object.ReferenceEquals(m_name, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_name = value; + } + } + + /// + public PropertyState Number + { + get + { + return m_number; + } + + set + { + if (!Object.ReferenceEquals(m_number, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_number = value; + } + } + + /// + public PropertyState EffectiveDisplayName + { + get + { + return m_effectiveDisplayName; + } + + set + { + if (!Object.ReferenceEquals(m_effectiveDisplayName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_effectiveDisplayName = 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_id != null) + { + children.Add(m_id); + } + + if (m_name != null) + { + children.Add(m_name); + } + + if (m_number != null) + { + children.Add(m_number); + } + + if (m_effectiveDisplayName != null) + { + children.Add(m_effectiveDisplayName); + } + + 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 Opc.Ua.BrowseNames.Id: + { + if (createOrReplace) + { + if (Id == null) + { + if (replacement == null) + { + Id = new PropertyState(this); + } + else + { + Id = (PropertyState)replacement; + } + } + } + + instance = Id; + break; + } + + case Opc.Ua.BrowseNames.Name: + { + if (createOrReplace) + { + if (Name == null) + { + if (replacement == null) + { + Name = new PropertyState(this); + } + else + { + Name = (PropertyState)replacement; + } + } + } + + instance = Name; + break; + } + + case Opc.Ua.BrowseNames.Number: + { + if (createOrReplace) + { + if (Number == null) + { + if (replacement == null) + { + Number = new PropertyState(this); + } + else + { + Number = (PropertyState)replacement; + } + } + } + + instance = Number; + break; + } + + case Opc.Ua.BrowseNames.EffectiveDisplayName: + { + if (createOrReplace) + { + if (EffectiveDisplayName == null) + { + if (replacement == null) + { + EffectiveDisplayName = new PropertyState(this); + } + else + { + EffectiveDisplayName = (PropertyState)replacement; + } + } + } + + instance = EffectiveDisplayName; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_id; + private PropertyState m_name; + private PropertyState m_number; + private PropertyState m_effectiveDisplayName; + #endregion + } + #endif + #endregion + + #region TransitionVariableState Class + #if (!OPCUA_EXCLUDE_TransitionVariableState) + /// + /// Stores an instance of the TransitionVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TransitionVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TransitionVariableState(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(Opc.Ua.VariableTypes.TransitionVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (Name != null) + { + Name.Initialize(context, Name_InitializationString); + } + + if (Number != null) + { + Number.Initialize(context, Number_InitializationString); + } + + if (TransitionTime != null) + { + TransitionTime.Initialize(context, TransitionTime_InitializationString); + } + + if (EffectiveTransitionTime != null) + { + EffectiveTransitionTime.Initialize(context, EffectiveTransitionTime_InitializationString); + } + } + + #region Initialization String + private const string Name_InitializationString = + "//////////8VYIkKAgAAAAAABAAAAE5hbWUBAMwKAC4ARMwKAAAAFP////8BAf////8AAAAA"; + + private const string Number_InitializationString = + "//////////8VYIkKAgAAAAAABgAAAE51bWJlcgEAzQoALgBEzQoAAAAH/////wEB/////wAAAAA="; + + private const string TransitionTime_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQDOCgAuAETOCgAAAQAmAf////8BAf//" + + "//8AAAAA"; + + private const string EffectiveTransitionTime_InitializationString = + "//////////8VYIkKAgAAAAAAFwAAAEVmZmVjdGl2ZVRyYW5zaXRpb25UaW1lAQDALAAuAETALAAAAQAm" + + "Af////8BAf////8AAAAA"; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAHgAAAFRyYW5zaXRpb25WYXJpYWJsZVR5cGVJbnN0YW5jZQEAygoBAMoK" + + "ygoAAAAV/////wEB/////wUAAAAVYIkKAgAAAAAAAgAAAElkAQDLCgAuAETLCgAAABj/////AQH/////" + + "AAAAABVgiQoCAAAAAAAEAAAATmFtZQEAzAoALgBEzAoAAAAU/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BgAAAE51bWJlcgEAzQoALgBEzQoAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRp" + + "b25UaW1lAQDOCgAuAETOCgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAABcAAABFZmZlY3RpdmVU" + + "cmFuc2l0aW9uVGltZQEAwCwALgBEwCwAAAEAJgH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Id + { + get + { + return m_id; + } + + set + { + if (!Object.ReferenceEquals(m_id, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_id = value; + } + } + + /// + public PropertyState Name + { + get + { + return m_name; + } + + set + { + if (!Object.ReferenceEquals(m_name, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_name = value; + } + } + + /// + public PropertyState Number + { + get + { + return m_number; + } + + set + { + if (!Object.ReferenceEquals(m_number, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_number = value; + } + } + + /// + public PropertyState TransitionTime + { + get + { + return m_transitionTime; + } + + set + { + if (!Object.ReferenceEquals(m_transitionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transitionTime = value; + } + } + + /// + public PropertyState EffectiveTransitionTime + { + get + { + return m_effectiveTransitionTime; + } + + set + { + if (!Object.ReferenceEquals(m_effectiveTransitionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_effectiveTransitionTime = 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_id != null) + { + children.Add(m_id); + } + + if (m_name != null) + { + children.Add(m_name); + } + + if (m_number != null) + { + children.Add(m_number); + } + + if (m_transitionTime != null) + { + children.Add(m_transitionTime); + } + + if (m_effectiveTransitionTime != null) + { + children.Add(m_effectiveTransitionTime); + } + + 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 Opc.Ua.BrowseNames.Id: + { + if (createOrReplace) + { + if (Id == null) + { + if (replacement == null) + { + Id = new PropertyState(this); + } + else + { + Id = (PropertyState)replacement; + } + } + } + + instance = Id; + break; + } + + case Opc.Ua.BrowseNames.Name: + { + if (createOrReplace) + { + if (Name == null) + { + if (replacement == null) + { + Name = new PropertyState(this); + } + else + { + Name = (PropertyState)replacement; + } + } + } + + instance = Name; + break; + } + + case Opc.Ua.BrowseNames.Number: + { + if (createOrReplace) + { + if (Number == null) + { + if (replacement == null) + { + Number = new PropertyState(this); + } + else + { + Number = (PropertyState)replacement; + } + } + } + + instance = Number; + break; + } + + case Opc.Ua.BrowseNames.TransitionTime: + { + if (createOrReplace) + { + if (TransitionTime == null) + { + if (replacement == null) + { + TransitionTime = new PropertyState(this); + } + else + { + TransitionTime = (PropertyState)replacement; + } + } + } + + instance = TransitionTime; + break; + } + + case Opc.Ua.BrowseNames.EffectiveTransitionTime: + { + if (createOrReplace) + { + if (EffectiveTransitionTime == null) + { + if (replacement == null) + { + EffectiveTransitionTime = new PropertyState(this); + } + else + { + EffectiveTransitionTime = (PropertyState)replacement; + } + } + } + + instance = EffectiveTransitionTime; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_id; + private PropertyState m_name; + private PropertyState m_number; + private PropertyState m_transitionTime; + private PropertyState m_effectiveTransitionTime; + #endregion + } + #endif + #endregion + + #region FiniteStateMachineState Class + #if (!OPCUA_EXCLUDE_FiniteStateMachineState) + /// + /// Stores an instance of the FiniteStateMachineType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FiniteStateMachineState : StateMachineState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FiniteStateMachineState(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(Opc.Ua.ObjectTypes.FiniteStateMachineType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (LastTransition != null) + { + LastTransition.Initialize(context, LastTransition_InitializationString); + } + + if (AvailableStates != null) + { + AvailableStates.Initialize(context, AvailableStates_InitializationString); + } + + if (AvailableTransitions != null) + { + AvailableTransitions.Initialize(context, AvailableTransitions_InitializationString); + } + } + + #region Initialization String + private const string LastTransition_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAExhc3RUcmFuc2l0aW9uAQDVCgAvAQDPCtUKAAAAFf////8BAf//" + + "//8BAAAAFWCJCgIAAAAAAAIAAABJZAEAlA4ALgBElA4AAAAR/////wEB/////wAAAAA="; + + private const string AvailableStates_InitializationString = + "//////////8XYIkKAgAAAAAADwAAAEF2YWlsYWJsZVN0YXRlcwEA40QALwA/40QAAAARAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAA=="; + + private const string AvailableTransitions_InitializationString = + "//////////8XYIkKAgAAAAAAFAAAAEF2YWlsYWJsZVRyYW5zaXRpb25zAQDkRAAvAD/kRAAAABEBAAAA" + + "AQAAAAAAAAABAf////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHgAAAEZpbml0ZVN0YXRlTWFjaGluZVR5cGVJbnN0YW5jZQEA0woBANMK" + + "0woAAP////8EAAAAFWCJCgIAAAAAAAwAAABDdXJyZW50U3RhdGUBANQKAC8BAMgK1AoAAAAV/////wEB" + + "/////wEAAAAVYIkKAgAAAAAAAgAAAElkAQCQDgAuAESQDgAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAOAAAATGFzdFRyYW5zaXRpb24BANUKAC8BAM8K1QoAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAA" + + "AgAAAElkAQCUDgAuAESUDgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAPAAAAQXZhaWxhYmxlU3Rh" + + "dGVzAQDjRAAvAD/jRAAAABEBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAABQAAABBdmFpbGFi" + + "bGVUcmFuc2l0aW9ucwEA5EQALwA/5EQAAAARAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public new FiniteStateVariableState CurrentState + { + get { return (FiniteStateVariableState)base.CurrentState; } + set { base.CurrentState = value; } + } + + /// + public new FiniteTransitionVariableState LastTransition + { + get { return (FiniteTransitionVariableState)base.LastTransition; } + set { base.LastTransition = value; } + } + + /// + public BaseDataVariableState AvailableStates + { + get + { + return m_availableStates; + } + + set + { + if (!Object.ReferenceEquals(m_availableStates, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_availableStates = value; + } + } + + /// + public BaseDataVariableState AvailableTransitions + { + get + { + return m_availableTransitions; + } + + set + { + if (!Object.ReferenceEquals(m_availableTransitions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_availableTransitions = 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_availableStates != null) + { + children.Add(m_availableStates); + } + + if (m_availableTransitions != null) + { + children.Add(m_availableTransitions); + } + + 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 Opc.Ua.BrowseNames.CurrentState: + { + if (createOrReplace) + { + if (CurrentState == null) + { + if (replacement == null) + { + CurrentState = new FiniteStateVariableState(this); + } + else + { + CurrentState = (FiniteStateVariableState)replacement; + } + } + } + + instance = CurrentState; + break; + } + + case Opc.Ua.BrowseNames.LastTransition: + { + if (createOrReplace) + { + if (LastTransition == null) + { + if (replacement == null) + { + LastTransition = new FiniteTransitionVariableState(this); + } + else + { + LastTransition = (FiniteTransitionVariableState)replacement; + } + } + } + + instance = LastTransition; + break; + } + + case Opc.Ua.BrowseNames.AvailableStates: + { + if (createOrReplace) + { + if (AvailableStates == null) + { + if (replacement == null) + { + AvailableStates = new BaseDataVariableState(this); + } + else + { + AvailableStates = (BaseDataVariableState)replacement; + } + } + } + + instance = AvailableStates; + break; + } + + case Opc.Ua.BrowseNames.AvailableTransitions: + { + if (createOrReplace) + { + if (AvailableTransitions == null) + { + if (replacement == null) + { + AvailableTransitions = new BaseDataVariableState(this); + } + else + { + AvailableTransitions = (BaseDataVariableState)replacement; + } + } + } + + instance = AvailableTransitions; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_availableStates; + private BaseDataVariableState m_availableTransitions; + #endregion + } + #endif + #endregion + + #region FiniteStateVariableState Class + #if (!OPCUA_EXCLUDE_FiniteStateVariableState) + /// + /// Stores an instance of the FiniteStateVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FiniteStateVariableState : StateVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FiniteStateVariableState(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(Opc.Ua.VariableTypes.FiniteStateVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAHwAAAEZpbml0ZVN0YXRlVmFyaWFibGVUeXBlSW5zdGFuY2UBAMgKAQDI" + + "CsgKAAAAFf////8BAf////8BAAAAFWCJCgIAAAAAAAIAAABJZAEAyQoALgBEyQoAAAAR/////wEB////" + + "/wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public new PropertyState Id + { + get { return (PropertyState)base.Id; } + set { base.Id = 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) + { + + 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 Opc.Ua.BrowseNames.Id: + { + if (createOrReplace) + { + if (Id == null) + { + if (replacement == null) + { + Id = new PropertyState(this); + } + else + { + Id = (PropertyState)replacement; + } + } + } + + instance = Id; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region FiniteTransitionVariableState Class + #if (!OPCUA_EXCLUDE_FiniteTransitionVariableState) + /// + /// Stores an instance of the FiniteTransitionVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FiniteTransitionVariableState : TransitionVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FiniteTransitionVariableState(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(Opc.Ua.VariableTypes.FiniteTransitionVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAJAAAAEZpbml0ZVRyYW5zaXRpb25WYXJpYWJsZVR5cGVJbnN0YW5jZQEA" + + "zwoBAM8KzwoAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAAAgAAAElkAQDQCgAuAETQCgAAABH/////" + + "AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public new PropertyState Id + { + get { return (PropertyState)base.Id; } + set { base.Id = 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) + { + + 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 Opc.Ua.BrowseNames.Id: + { + if (createOrReplace) + { + if (Id == null) + { + if (replacement == null) + { + Id = new PropertyState(this); + } + else + { + Id = (PropertyState)replacement; + } + } + } + + instance = Id; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region StateMachineStateState Class + #if (!OPCUA_EXCLUDE_StateMachineStateState) + /// + /// Stores an instance of the StateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StateMachineStateState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StateMachineStateState(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(Opc.Ua.ObjectTypes.StateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAEQAAAFN0YXRlVHlwZUluc3RhbmNlAQADCQEAAwkDCQAA/////wEAAAAV" + + "YIkKAgAAAAAACwAAAFN0YXRlTnVtYmVyAQAECQAuAEQECQAAAAf/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState StateNumber + { + get + { + return m_stateNumber; + } + + set + { + if (!Object.ReferenceEquals(m_stateNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_stateNumber = 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_stateNumber != null) + { + children.Add(m_stateNumber); + } + + 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 Opc.Ua.BrowseNames.StateNumber: + { + if (createOrReplace) + { + if (StateNumber == null) + { + if (replacement == null) + { + StateNumber = new PropertyState(this); + } + else + { + StateNumber = (PropertyState)replacement; + } + } + } + + instance = StateNumber; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_stateNumber; + #endregion + } + #endif + #endregion + + #region StateMachineInitialStateState Class + #if (!OPCUA_EXCLUDE_StateMachineInitialStateState) + /// + /// Stores an instance of the InitialStateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StateMachineInitialStateState : StateMachineStateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StateMachineInitialStateState(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(Opc.Ua.ObjectTypes.InitialStateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGAAAAEluaXRpYWxTdGF0ZVR5cGVJbnN0YW5jZQEABQkBAAUJBQkAAP//" + + "//8BAAAAFWCJCgIAAAAAAAsAAABTdGF0ZU51bWJlcgEAmA4ALgBEmA4AAAAH/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region StateMachineTransitionState Class + #if (!OPCUA_EXCLUDE_StateMachineTransitionState) + /// + /// Stores an instance of the TransitionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StateMachineTransitionState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StateMachineTransitionState(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(Opc.Ua.ObjectTypes.TransitionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFgAAAFRyYW5zaXRpb25UeXBlSW5zdGFuY2UBAAYJAQAGCQYJAAD/////" + + "AQAAABVgiQoCAAAAAAAQAAAAVHJhbnNpdGlvbk51bWJlcgEACAkALgBECAkAAAAH/////wEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState TransitionNumber + { + get + { + return m_transitionNumber; + } + + set + { + if (!Object.ReferenceEquals(m_transitionNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transitionNumber = 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_transitionNumber != null) + { + children.Add(m_transitionNumber); + } + + 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 Opc.Ua.BrowseNames.TransitionNumber: + { + if (createOrReplace) + { + if (TransitionNumber == null) + { + if (replacement == null) + { + TransitionNumber = new PropertyState(this); + } + else + { + TransitionNumber = (PropertyState)replacement; + } + } + } + + instance = TransitionNumber; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_transitionNumber; + #endregion + } + #endif + #endregion + + #region StateMachineChoiceStateTypeState Class + #if (!OPCUA_EXCLUDE_StateMachineChoiceStateTypeState) + /// + /// Stores an instance of the ChoiceStateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StateMachineChoiceStateTypeState : StateMachineStateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StateMachineChoiceStateTypeState(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(Opc.Ua.ObjectTypes.ChoiceStateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFwAAAENob2ljZVN0YXRlVHlwZUluc3RhbmNlAQAFOwEABTsFOwAA////" + + "/wEAAAAVYIkKAgAAAAAACwAAAFN0YXRlTnVtYmVyAQAGOwAuAEQGOwAAAAf/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region GuardVariableState Class + #if (!OPCUA_EXCLUDE_GuardVariableState) + /// + /// Stores an instance of the GuardVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GuardVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GuardVariableState(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(Opc.Ua.VariableTypes.GuardVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAGQAAAEd1YXJkVmFyaWFibGVUeXBlSW5zdGFuY2UBAAk7AQAJOwk7AAAA" + + "Ff////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ExpressionGuardVariableState Class + #if (!OPCUA_EXCLUDE_ExpressionGuardVariableState) + /// + /// Stores an instance of the ExpressionGuardVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExpressionGuardVariableState : GuardVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExpressionGuardVariableState(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(Opc.Ua.VariableTypes.ExpressionGuardVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAIwAAAEV4cHJlc3Npb25HdWFyZFZhcmlhYmxlVHlwZUluc3RhbmNlAQAY" + + "OwEAGDsYOwAAABX/////AQH/////AQAAABVgiQoCAAAAAAAKAAAARXhwcmVzc2lvbgEAGTsALgBEGTsA" + + "AAEASgL/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Expression + { + get + { + return m_expression; + } + + set + { + if (!Object.ReferenceEquals(m_expression, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_expression = 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_expression != null) + { + children.Add(m_expression); + } + + 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 Opc.Ua.BrowseNames.Expression: + { + if (createOrReplace) + { + if (Expression == null) + { + if (replacement == null) + { + Expression = new PropertyState(this); + } + else + { + Expression = (PropertyState)replacement; + } + } + } + + instance = Expression; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_expression; + #endregion + } + #endif + #endregion + + #region ElseGuardVariableState Class + #if (!OPCUA_EXCLUDE_ElseGuardVariableState) + /// + /// Stores an instance of the ElseGuardVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ElseGuardVariableState : GuardVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ElseGuardVariableState(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(Opc.Ua.VariableTypes.ElseGuardVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAHQAAAEVsc2VHdWFyZFZhcmlhYmxlVHlwZUluc3RhbmNlAQDVOwEA1TvV" + + "OwAAABX/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region RationalNumberState Class + #if (!OPCUA_EXCLUDE_RationalNumberState) + /// + /// Stores an instance of the RationalNumberType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RationalNumberState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RationalNumberState(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(Opc.Ua.VariableTypes.RationalNumberType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.RationalNumber, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAGgAAAFJhdGlvbmFsTnVtYmVyVHlwZUluc3RhbmNlAQAtRQEALUUtRQAA" + + "AQB2Sf////8BAf////8CAAAAFWCJCgIAAAAAAAkAAABOdW1lcmF0b3IBADBFAC8APzBFAAAABv////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAsAAABEZW5vbWluYXRvcgEAMUUALwA/MUUAAAAH/////wEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState Numerator + { + get + { + return m_numerator; + } + + set + { + if (!Object.ReferenceEquals(m_numerator, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_numerator = value; + } + } + + /// + public BaseDataVariableState Denominator + { + get + { + return m_denominator; + } + + set + { + if (!Object.ReferenceEquals(m_denominator, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_denominator = 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_numerator != null) + { + children.Add(m_numerator); + } + + if (m_denominator != null) + { + children.Add(m_denominator); + } + + 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 Opc.Ua.BrowseNames.Numerator: + { + if (createOrReplace) + { + if (Numerator == null) + { + if (replacement == null) + { + Numerator = new BaseDataVariableState(this); + } + else + { + Numerator = (BaseDataVariableState)replacement; + } + } + } + + instance = Numerator; + break; + } + + case Opc.Ua.BrowseNames.Denominator: + { + if (createOrReplace) + { + if (Denominator == null) + { + if (replacement == null) + { + Denominator = new BaseDataVariableState(this); + } + else + { + Denominator = (BaseDataVariableState)replacement; + } + } + } + + instance = Denominator; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_numerator; + private BaseDataVariableState m_denominator; + #endregion + } + + #region RationalNumberValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class RationalNumberValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public RationalNumberValue(RationalNumberState variable, RationalNumber value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new RationalNumber(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public RationalNumberState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public RationalNumber Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(RationalNumberState 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.Numerator; + instance.OnReadValue = OnRead_Numerator; + instance.OnSimpleWriteValue = OnWrite_Numerator; + updateList.Add(instance); + instance = m_variable.Denominator; + instance.OnReadValue = OnRead_Denominator; + instance.OnSimpleWriteValue = OnWrite_Denominator; + 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 = (RationalNumber)Write(value); + } + + return ServiceResult.Good; + } + + #region Numerator Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Numerator( + 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.Numerator; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Numerator(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Numerator = (int)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Denominator Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Denominator( + 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.Denominator; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Denominator(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Denominator = (uint)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private RationalNumber m_value; + private RationalNumberState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region VectorState Class + #if (!OPCUA_EXCLUDE_VectorState) + /// + /// Stores an instance of the VectorType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class VectorState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public VectorState(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(Opc.Ua.VariableTypes.VectorType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Vector, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (VectorUnit != null) + { + VectorUnit.Initialize(context, VectorUnit_InitializationString); + } + } + + #region Initialization String + private const string VectorUnit_InitializationString = + "//////////8VYIkKAgAAAAAACgAAAFZlY3RvclVuaXQBADNFAC4ARDNFAAABAHcD/////wEB/////wAA" + + "AAA="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAEgAAAFZlY3RvclR5cGVJbnN0YW5jZQEAMkUBADJFMkUAAAEAd0n/////" + + "AQH/////AQAAABVgiQoCAAAAAAAKAAAAVmVjdG9yVW5pdAEAM0UALgBEM0UAAAEAdwP/////AQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState VectorUnit + { + get + { + return m_vectorUnit; + } + + set + { + if (!Object.ReferenceEquals(m_vectorUnit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_vectorUnit = 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_vectorUnit != null) + { + children.Add(m_vectorUnit); + } + + 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 Opc.Ua.BrowseNames.VectorUnit: + { + if (createOrReplace) + { + if (VectorUnit == null) + { + if (replacement == null) + { + VectorUnit = new PropertyState(this); + } + else + { + VectorUnit = (PropertyState)replacement; + } + } + } + + instance = VectorUnit; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_vectorUnit; + #endregion + } + #endif + #endregion + + #region ThreeDVectorState Class + #if (!OPCUA_EXCLUDE_ThreeDVectorState) + /// + /// Stores an instance of the ThreeDVectorType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ThreeDVectorState : VectorState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ThreeDVectorState(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(Opc.Ua.VariableTypes.ThreeDVectorType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ThreeDVector, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAGAAAAFRocmVlRFZlY3RvclR5cGVJbnN0YW5jZQEANEUBADRFNEUAAAEA" + + "eEn/////AQH/////AwAAABVgiQoCAAAAAAABAAAAWAEAUUkALwA/UUkAAAAL/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAAQAAAFkBAFJJAC8AP1JJAAAAC/////8BAf////8AAAAAFWCJCgIAAAAAAAEAAABaAQBT" + + "SQAvAD9TSQAAAAv/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState X + { + get + { + return m_x; + } + + set + { + if (!Object.ReferenceEquals(m_x, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_x = value; + } + } + + /// + public BaseDataVariableState Y + { + get + { + return m_y; + } + + set + { + if (!Object.ReferenceEquals(m_y, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_y = value; + } + } + + /// + public BaseDataVariableState Z + { + get + { + return m_z; + } + + set + { + if (!Object.ReferenceEquals(m_z, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_z = 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_x != null) + { + children.Add(m_x); + } + + if (m_y != null) + { + children.Add(m_y); + } + + if (m_z != null) + { + children.Add(m_z); + } + + 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 Opc.Ua.BrowseNames.X: + { + if (createOrReplace) + { + if (X == null) + { + if (replacement == null) + { + X = new BaseDataVariableState(this); + } + else + { + X = (BaseDataVariableState)replacement; + } + } + } + + instance = X; + break; + } + + case Opc.Ua.BrowseNames.Y: + { + if (createOrReplace) + { + if (Y == null) + { + if (replacement == null) + { + Y = new BaseDataVariableState(this); + } + else + { + Y = (BaseDataVariableState)replacement; + } + } + } + + instance = Y; + break; + } + + case Opc.Ua.BrowseNames.Z: + { + if (createOrReplace) + { + if (Z == null) + { + if (replacement == null) + { + Z = new BaseDataVariableState(this); + } + else + { + Z = (BaseDataVariableState)replacement; + } + } + } + + instance = Z; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_x; + private BaseDataVariableState m_y; + private BaseDataVariableState m_z; + #endregion + } + + #region ThreeDVectorValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ThreeDVectorValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ThreeDVectorValue(ThreeDVectorState variable, ThreeDVector value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ThreeDVector(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ThreeDVectorState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ThreeDVector Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ThreeDVectorState 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.X; + instance.OnReadValue = OnRead_X; + instance.OnSimpleWriteValue = OnWrite_X; + updateList.Add(instance); + instance = m_variable.Y; + instance.OnReadValue = OnRead_Y; + instance.OnSimpleWriteValue = OnWrite_Y; + updateList.Add(instance); + instance = m_variable.Z; + instance.OnReadValue = OnRead_Z; + instance.OnSimpleWriteValue = OnWrite_Z; + 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 = (ThreeDVector)Write(value); + } + + return ServiceResult.Good; + } + + #region X Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_X( + 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.X; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_X(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.X = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Y Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Y( + 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.Y; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Y(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Y = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Z Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Z( + 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.Z; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Z(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Z = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ThreeDVector m_value; + private ThreeDVectorState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region CartesianCoordinatesState Class + #if (!OPCUA_EXCLUDE_CartesianCoordinatesState) + /// + /// Stores an instance of the CartesianCoordinatesType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CartesianCoordinatesState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CartesianCoordinatesState(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(Opc.Ua.VariableTypes.CartesianCoordinatesType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.CartesianCoordinates, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (LengthUnit != null) + { + LengthUnit.Initialize(context, LengthUnit_InitializationString); + } + } + + #region Initialization String + private const string LengthUnit_InitializationString = + "//////////8VYIkKAgAAAAAACgAAAExlbmd0aFVuaXQBAFVJAC4ARFVJAAABAHcD/////wEB/////wAA" + + "AAA="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAIAAAAENhcnRlc2lhbkNvb3JkaW5hdGVzVHlwZUluc3RhbmNlAQBUSQEA" + + "VElUSQAAAQB5Sf////8BAf////8BAAAAFWCJCgIAAAAAAAoAAABMZW5ndGhVbml0AQBVSQAuAERVSQAA" + + "AQB3A/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState LengthUnit + { + get + { + return m_lengthUnit; + } + + set + { + if (!Object.ReferenceEquals(m_lengthUnit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lengthUnit = 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_lengthUnit != null) + { + children.Add(m_lengthUnit); + } + + 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 Opc.Ua.BrowseNames.LengthUnit: + { + if (createOrReplace) + { + if (LengthUnit == null) + { + if (replacement == null) + { + LengthUnit = new PropertyState(this); + } + else + { + LengthUnit = (PropertyState)replacement; + } + } + } + + instance = LengthUnit; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_lengthUnit; + #endregion + } + #endif + #endregion + + #region ThreeDCartesianCoordinatesState Class + #if (!OPCUA_EXCLUDE_ThreeDCartesianCoordinatesState) + /// + /// Stores an instance of the ThreeDCartesianCoordinatesType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ThreeDCartesianCoordinatesState : CartesianCoordinatesState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ThreeDCartesianCoordinatesState(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(Opc.Ua.VariableTypes.ThreeDCartesianCoordinatesType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ThreeDCartesianCoordinates, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAJgAAAFRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzVHlwZUluc3RhbmNl" + + "AQBWSQEAVklWSQAAAQB6Sf////8BAf////8DAAAAFWCJCgIAAAAAAAEAAABYAQBYSQAvAD9YSQAAAAv/" + + "////AQH/////AAAAABVgiQoCAAAAAAABAAAAWQEAWUkALwA/WUkAAAAL/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAAQAAAFoBAFpJAC8AP1pJAAAAC/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState X + { + get + { + return m_x; + } + + set + { + if (!Object.ReferenceEquals(m_x, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_x = value; + } + } + + /// + public BaseDataVariableState Y + { + get + { + return m_y; + } + + set + { + if (!Object.ReferenceEquals(m_y, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_y = value; + } + } + + /// + public BaseDataVariableState Z + { + get + { + return m_z; + } + + set + { + if (!Object.ReferenceEquals(m_z, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_z = 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_x != null) + { + children.Add(m_x); + } + + if (m_y != null) + { + children.Add(m_y); + } + + if (m_z != null) + { + children.Add(m_z); + } + + 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 Opc.Ua.BrowseNames.X: + { + if (createOrReplace) + { + if (X == null) + { + if (replacement == null) + { + X = new BaseDataVariableState(this); + } + else + { + X = (BaseDataVariableState)replacement; + } + } + } + + instance = X; + break; + } + + case Opc.Ua.BrowseNames.Y: + { + if (createOrReplace) + { + if (Y == null) + { + if (replacement == null) + { + Y = new BaseDataVariableState(this); + } + else + { + Y = (BaseDataVariableState)replacement; + } + } + } + + instance = Y; + break; + } + + case Opc.Ua.BrowseNames.Z: + { + if (createOrReplace) + { + if (Z == null) + { + if (replacement == null) + { + Z = new BaseDataVariableState(this); + } + else + { + Z = (BaseDataVariableState)replacement; + } + } + } + + instance = Z; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_x; + private BaseDataVariableState m_y; + private BaseDataVariableState m_z; + #endregion + } + + #region ThreeDCartesianCoordinatesValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ThreeDCartesianCoordinatesValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ThreeDCartesianCoordinatesValue(ThreeDCartesianCoordinatesState variable, ThreeDCartesianCoordinates value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ThreeDCartesianCoordinates(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ThreeDCartesianCoordinatesState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ThreeDCartesianCoordinates Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ThreeDCartesianCoordinatesState 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.X; + instance.OnReadValue = OnRead_X; + instance.OnSimpleWriteValue = OnWrite_X; + updateList.Add(instance); + instance = m_variable.Y; + instance.OnReadValue = OnRead_Y; + instance.OnSimpleWriteValue = OnWrite_Y; + updateList.Add(instance); + instance = m_variable.Z; + instance.OnReadValue = OnRead_Z; + instance.OnSimpleWriteValue = OnWrite_Z; + 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 = (ThreeDCartesianCoordinates)Write(value); + } + + return ServiceResult.Good; + } + + #region X Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_X( + 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.X; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_X(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.X = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Y Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Y( + 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.Y; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Y(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Y = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Z Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Z( + 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.Z; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Z(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Z = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ThreeDCartesianCoordinates m_value; + private ThreeDCartesianCoordinatesState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region OrientationState Class + #if (!OPCUA_EXCLUDE_OrientationState) + /// + /// Stores an instance of the OrientationType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OrientationState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OrientationState(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(Opc.Ua.VariableTypes.OrientationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Orientation, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (AngleUnit != null) + { + AngleUnit.Initialize(context, AngleUnit_InitializationString); + } + } + + #region Initialization String + private const string AngleUnit_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAEFuZ2xlVW5pdAEAXEkALgBEXEkAAAEAdwP/////AQH/////AAAA" + + "AA=="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAFwAAAE9yaWVudGF0aW9uVHlwZUluc3RhbmNlAQBbSQEAW0lbSQAAAQB7" + + "Sf////8BAf////8BAAAAFWCJCgIAAAAAAAkAAABBbmdsZVVuaXQBAFxJAC4ARFxJAAABAHcD/////wEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState AngleUnit + { + get + { + return m_angleUnit; + } + + set + { + if (!Object.ReferenceEquals(m_angleUnit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_angleUnit = 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_angleUnit != null) + { + children.Add(m_angleUnit); + } + + 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 Opc.Ua.BrowseNames.AngleUnit: + { + if (createOrReplace) + { + if (AngleUnit == null) + { + if (replacement == null) + { + AngleUnit = new PropertyState(this); + } + else + { + AngleUnit = (PropertyState)replacement; + } + } + } + + instance = AngleUnit; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_angleUnit; + #endregion + } + #endif + #endregion + + #region ThreeDOrientationState Class + #if (!OPCUA_EXCLUDE_ThreeDOrientationState) + /// + /// Stores an instance of the ThreeDOrientationType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ThreeDOrientationState : OrientationState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ThreeDOrientationState(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(Opc.Ua.VariableTypes.ThreeDOrientationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ThreeDOrientation, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAHQAAAFRocmVlRE9yaWVudGF0aW9uVHlwZUluc3RhbmNlAQBdSQEAXUld" + + "SQAAAQB8Sf////8BAf////8DAAAAFWCJCgIAAAAAAAEAAABBAQBfSQAvAD9fSQAAAAv/////AQH/////" + + "AAAAABVgiQoCAAAAAAABAAAAQgEAYEkALwA/YEkAAAAL/////wEB/////wAAAAAVYIkKAgAAAAAAAQAA" + + "AEMBAGFJAC8AP2FJAAAAC/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState A + { + get + { + return m_a; + } + + set + { + if (!Object.ReferenceEquals(m_a, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_a = value; + } + } + + /// + public BaseDataVariableState B + { + get + { + return m_b; + } + + set + { + if (!Object.ReferenceEquals(m_b, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_b = value; + } + } + + /// + public BaseDataVariableState C + { + get + { + return m_c; + } + + set + { + if (!Object.ReferenceEquals(m_c, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_c = 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_a != null) + { + children.Add(m_a); + } + + if (m_b != null) + { + children.Add(m_b); + } + + if (m_c != null) + { + children.Add(m_c); + } + + 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 Opc.Ua.BrowseNames.A: + { + if (createOrReplace) + { + if (A == null) + { + if (replacement == null) + { + A = new BaseDataVariableState(this); + } + else + { + A = (BaseDataVariableState)replacement; + } + } + } + + instance = A; + break; + } + + case Opc.Ua.BrowseNames.B: + { + if (createOrReplace) + { + if (B == null) + { + if (replacement == null) + { + B = new BaseDataVariableState(this); + } + else + { + B = (BaseDataVariableState)replacement; + } + } + } + + instance = B; + break; + } + + case Opc.Ua.BrowseNames.C: + { + if (createOrReplace) + { + if (C == null) + { + if (replacement == null) + { + C = new BaseDataVariableState(this); + } + else + { + C = (BaseDataVariableState)replacement; + } + } + } + + instance = C; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_a; + private BaseDataVariableState m_b; + private BaseDataVariableState m_c; + #endregion + } + + #region ThreeDOrientationValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ThreeDOrientationValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ThreeDOrientationValue(ThreeDOrientationState variable, ThreeDOrientation value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ThreeDOrientation(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ThreeDOrientationState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ThreeDOrientation Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ThreeDOrientationState 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.A; + instance.OnReadValue = OnRead_A; + instance.OnSimpleWriteValue = OnWrite_A; + updateList.Add(instance); + instance = m_variable.B; + instance.OnReadValue = OnRead_B; + instance.OnSimpleWriteValue = OnWrite_B; + updateList.Add(instance); + instance = m_variable.C; + instance.OnReadValue = OnRead_C; + instance.OnSimpleWriteValue = OnWrite_C; + 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 = (ThreeDOrientation)Write(value); + } + + return ServiceResult.Good; + } + + #region A Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_A( + 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.A; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_A(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.A = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region B Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_B( + 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.B; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_B(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.B = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region C Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_C( + 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.C; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_C(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.C = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ThreeDOrientation m_value; + private ThreeDOrientationState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region FrameState Class + #if (!OPCUA_EXCLUDE_FrameState) + /// + /// Stores an instance of the FrameType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FrameState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FrameState(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(Opc.Ua.VariableTypes.FrameType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Frame, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (Constant != null) + { + Constant.Initialize(context, Constant_InitializationString); + } + + if (BaseFrame != null) + { + BaseFrame.Initialize(context, BaseFrame_InitializationString); + } + + if (FixedBase != null) + { + FixedBase.Initialize(context, FixedBase_InitializationString); + } + } + + #region Initialization String + private const string Constant_InitializationString = + "//////////8VYIkKAgAAAAAACAAAAENvbnN0YW50AQBkSQAuAERkSQAAAAH/////AQH/////AAAAAA=="; + + private const string BaseFrame_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAEJhc2VGcmFtZQEAZUkALwA/ZUkAAAAR/////wEB/////wAAAAA="; + + private const string FixedBase_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAEZpeGVkQmFzZQEAZkkALgBEZkkAAAAB/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAEQAAAEZyYW1lVHlwZUluc3RhbmNlAQBiSQEAYkliSQAAAQB9Sf////8B" + + "Af////8FAAAAFWCJCgIAAAAAABQAAABDYXJ0ZXNpYW5Db29yZGluYXRlcwEAcUkALwEAVElxSQAAAQB5" + + "Sf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABPcmllbnRhdGlvbgEAY0kALwEAW0ljSQAAAQB7Sf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAgAAABDb25zdGFudAEAZEkALgBEZEkAAAAB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACQAAAEJhc2VGcmFtZQEAZUkALwA/ZUkAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACQAAAEZpeGVkQmFzZQEAZkkALgBEZkkAAAAB/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public CartesianCoordinatesState CartesianCoordinates + { + get + { + return m_cartesianCoordinates; + } + + set + { + if (!Object.ReferenceEquals(m_cartesianCoordinates, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_cartesianCoordinates = value; + } + } + + /// + public OrientationState Orientation + { + get + { + return m_orientation; + } + + set + { + if (!Object.ReferenceEquals(m_orientation, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_orientation = value; + } + } + + /// + public PropertyState Constant + { + get + { + return m_constant; + } + + set + { + if (!Object.ReferenceEquals(m_constant, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_constant = value; + } + } + + /// + public BaseDataVariableState BaseFrame + { + get + { + return m_baseFrame; + } + + set + { + if (!Object.ReferenceEquals(m_baseFrame, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseFrame = value; + } + } + + /// + public PropertyState FixedBase + { + get + { + return m_fixedBase; + } + + set + { + if (!Object.ReferenceEquals(m_fixedBase, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_fixedBase = 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_cartesianCoordinates != null) + { + children.Add(m_cartesianCoordinates); + } + + if (m_orientation != null) + { + children.Add(m_orientation); + } + + if (m_constant != null) + { + children.Add(m_constant); + } + + if (m_baseFrame != null) + { + children.Add(m_baseFrame); + } + + if (m_fixedBase != null) + { + children.Add(m_fixedBase); + } + + 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 Opc.Ua.BrowseNames.CartesianCoordinates: + { + if (createOrReplace) + { + if (CartesianCoordinates == null) + { + if (replacement == null) + { + CartesianCoordinates = new CartesianCoordinatesState(this); + } + else + { + CartesianCoordinates = (CartesianCoordinatesState)replacement; + } + } + } + + instance = CartesianCoordinates; + break; + } + + case Opc.Ua.BrowseNames.Orientation: + { + if (createOrReplace) + { + if (Orientation == null) + { + if (replacement == null) + { + Orientation = new OrientationState(this); + } + else + { + Orientation = (OrientationState)replacement; + } + } + } + + instance = Orientation; + break; + } + + case Opc.Ua.BrowseNames.Constant: + { + if (createOrReplace) + { + if (Constant == null) + { + if (replacement == null) + { + Constant = new PropertyState(this); + } + else + { + Constant = (PropertyState)replacement; + } + } + } + + instance = Constant; + break; + } + + case Opc.Ua.BrowseNames.BaseFrame: + { + if (createOrReplace) + { + if (BaseFrame == null) + { + if (replacement == null) + { + BaseFrame = new BaseDataVariableState(this); + } + else + { + BaseFrame = (BaseDataVariableState)replacement; + } + } + } + + instance = BaseFrame; + break; + } + + case Opc.Ua.BrowseNames.FixedBase: + { + if (createOrReplace) + { + if (FixedBase == null) + { + if (replacement == null) + { + FixedBase = new PropertyState(this); + } + else + { + FixedBase = (PropertyState)replacement; + } + } + } + + instance = FixedBase; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private CartesianCoordinatesState m_cartesianCoordinates; + private OrientationState m_orientation; + private PropertyState m_constant; + private BaseDataVariableState m_baseFrame; + private PropertyState m_fixedBase; + #endregion + } + #endif + #endregion + + #region ThreeDFrameState Class + #if (!OPCUA_EXCLUDE_ThreeDFrameState) + /// + /// Stores an instance of the ThreeDFrameType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ThreeDFrameState : FrameState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ThreeDFrameState(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(Opc.Ua.VariableTypes.ThreeDFrameType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ThreeDFrame, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAFwAAAFRocmVlREZyYW1lVHlwZUluc3RhbmNlAQBnSQEAZ0lnSQAAAQB+" + + "Sf////8BAf////8CAAAAFWCJCgIAAAAAABQAAABDYXJ0ZXNpYW5Db29yZGluYXRlcwEAbEkALwEAVkls" + + "SQAAAQB6Sf////8BAf////8DAAAAFWCJCgIAAAAAAAEAAABYAQBuSQAvAD9uSQAAAAv/////AQH/////" + + "AAAAABVgiQoCAAAAAAABAAAAWQEAb0kALwA/b0kAAAAL/////wEB/////wAAAAAVYIkKAgAAAAAAAQAA" + + "AFoBAHBJAC8AP3BJAAAAC/////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABPcmllbnRhdGlvbgEAaEkA" + + "LwEAXUloSQAAAQB8Sf////8BAf////8DAAAAFWCJCgIAAAAAAAEAAABBAQCCSgAvAD+CSgAAAAv/////" + + "AQH/////AAAAABVgiQoCAAAAAAABAAAAQgEAg0oALwA/g0oAAAAL/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAAQAAAEMBAIRKAC8AP4RKAAAAC/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public new ThreeDCartesianCoordinatesState CartesianCoordinates + { + get { return (ThreeDCartesianCoordinatesState)base.CartesianCoordinates; } + set { base.CartesianCoordinates = value; } + } + + /// + public new ThreeDOrientationState Orientation + { + get { return (ThreeDOrientationState)base.Orientation; } + set { base.Orientation = 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) + { + + 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 Opc.Ua.BrowseNames.CartesianCoordinates: + { + if (createOrReplace) + { + if (CartesianCoordinates == null) + { + if (replacement == null) + { + CartesianCoordinates = new ThreeDCartesianCoordinatesState(this); + } + else + { + CartesianCoordinates = (ThreeDCartesianCoordinatesState)replacement; + } + } + } + + instance = CartesianCoordinates; + break; + } + + case Opc.Ua.BrowseNames.Orientation: + { + if (createOrReplace) + { + if (Orientation == null) + { + if (replacement == null) + { + Orientation = new ThreeDOrientationState(this); + } + else + { + Orientation = (ThreeDOrientationState)replacement; + } + } + } + + instance = Orientation; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + #endregion + } + + #region ThreeDFrameValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ThreeDFrameValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ThreeDFrameValue(ThreeDFrameState variable, ThreeDFrame value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ThreeDFrame(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ThreeDFrameState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ThreeDFrame Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ThreeDFrameState 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.CartesianCoordinates; + instance.OnReadValue = OnRead_CartesianCoordinates; + instance.OnSimpleWriteValue = OnWrite_CartesianCoordinates; + updateList.Add(instance); + instance = m_variable.CartesianCoordinates.X; + instance.OnReadValue = OnRead_CartesianCoordinates_X; + instance.OnSimpleWriteValue = OnWrite_CartesianCoordinates_X; + updateList.Add(instance); + instance = m_variable.CartesianCoordinates.Y; + instance.OnReadValue = OnRead_CartesianCoordinates_Y; + instance.OnSimpleWriteValue = OnWrite_CartesianCoordinates_Y; + updateList.Add(instance); + instance = m_variable.CartesianCoordinates.Z; + instance.OnReadValue = OnRead_CartesianCoordinates_Z; + instance.OnSimpleWriteValue = OnWrite_CartesianCoordinates_Z; + updateList.Add(instance); + instance = m_variable.Orientation; + instance.OnReadValue = OnRead_Orientation; + instance.OnSimpleWriteValue = OnWrite_Orientation; + updateList.Add(instance); + instance = m_variable.Orientation.A; + instance.OnReadValue = OnRead_Orientation_A; + instance.OnSimpleWriteValue = OnWrite_Orientation_A; + updateList.Add(instance); + instance = m_variable.Orientation.B; + instance.OnReadValue = OnRead_Orientation_B; + instance.OnSimpleWriteValue = OnWrite_Orientation_B; + updateList.Add(instance); + instance = m_variable.Orientation.C; + instance.OnReadValue = OnRead_Orientation_C; + instance.OnSimpleWriteValue = OnWrite_Orientation_C; + 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 = (ThreeDFrame)Write(value); + } + + return ServiceResult.Good; + } + + #region CartesianCoordinates Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CartesianCoordinates( + 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.CartesianCoordinates; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CartesianCoordinates(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CartesianCoordinates = (ThreeDCartesianCoordinates)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CartesianCoordinates_X Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CartesianCoordinates_X( + 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.CartesianCoordinates.X; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CartesianCoordinates_X(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CartesianCoordinates.X = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CartesianCoordinates_Y Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CartesianCoordinates_Y( + 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.CartesianCoordinates.Y; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CartesianCoordinates_Y(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CartesianCoordinates.Y = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CartesianCoordinates_Z Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CartesianCoordinates_Z( + 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.CartesianCoordinates.Z; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CartesianCoordinates_Z(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CartesianCoordinates.Z = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Orientation Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Orientation( + 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.Orientation; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Orientation(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Orientation = (ThreeDOrientation)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Orientation_A Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Orientation_A( + 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.Orientation.A; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Orientation_A(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Orientation.A = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Orientation_B Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Orientation_B( + 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.Orientation.B; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Orientation_B(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Orientation.B = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region Orientation_C Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_Orientation_C( + 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.Orientation.C; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_Orientation_C(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.Orientation.C = (double)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ThreeDFrame m_value; + private ThreeDFrameState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region TransitionEventState Class + #if (!OPCUA_EXCLUDE_TransitionEventState) + /// + /// Stores an instance of the TransitionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TransitionEventState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TransitionEventState(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(Opc.Ua.ObjectTypes.TransitionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGwAAAFRyYW5zaXRpb25FdmVudFR5cGVJbnN0YW5jZQEABwkBAAcJBwkA" + + "AP////8LAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCZDgAuAESZDgAAAA//////AQH/////AAAAABVg" + + "iQoCAAAAAAAJAAAARXZlbnRUeXBlAQCaDgAuAESaDgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTm9kZQEAmw4ALgBEmw4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJj" + + "ZU5hbWUBAJwOAC4ARJwOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQCdDgAuAESd" + + "DgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAng4ALgBEng4AAAEA" + + "JgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAoA4ALgBEoA4AAAAV/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQChDgAuAEShDgAAAAX/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAVHJhbnNpdGlvbgEA1goALwEAygrWCgAAABX/////AQH/////AQAAABVgiQoCAAAAAAAC" + + "AAAASWQBAKoOAC4ARKoOAAAAGP////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABGcm9tU3RhdGUBANcK" + + "AC8BAMMK1woAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAAAgAAAElkAQCiDgAuAESiDgAAABj/////" + + "AQH/////AAAAABVgiQoCAAAAAAAHAAAAVG9TdGF0ZQEA2AoALwEAwwrYCgAAABX/////AQH/////AQAA" + + "ABVgiQoCAAAAAAACAAAASWQBAKYOAC4ARKYOAAAAGP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public TransitionVariableState Transition + { + get + { + return m_transition; + } + + set + { + if (!Object.ReferenceEquals(m_transition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transition = value; + } + } + + /// + public StateVariableState FromState + { + get + { + return m_fromState; + } + + set + { + if (!Object.ReferenceEquals(m_fromState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_fromState = value; + } + } + + /// + public StateVariableState ToState + { + get + { + return m_toState; + } + + set + { + if (!Object.ReferenceEquals(m_toState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_toState = 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_transition != null) + { + children.Add(m_transition); + } + + if (m_fromState != null) + { + children.Add(m_fromState); + } + + if (m_toState != null) + { + children.Add(m_toState); + } + + 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 Opc.Ua.BrowseNames.Transition: + { + if (createOrReplace) + { + if (Transition == null) + { + if (replacement == null) + { + Transition = new TransitionVariableState(this); + } + else + { + Transition = (TransitionVariableState)replacement; + } + } + } + + instance = Transition; + break; + } + + case Opc.Ua.BrowseNames.FromState: + { + if (createOrReplace) + { + if (FromState == null) + { + if (replacement == null) + { + FromState = new StateVariableState(this); + } + else + { + FromState = (StateVariableState)replacement; + } + } + } + + instance = FromState; + break; + } + + case Opc.Ua.BrowseNames.ToState: + { + if (createOrReplace) + { + if (ToState == null) + { + if (replacement == null) + { + ToState = new StateVariableState(this); + } + else + { + ToState = (StateVariableState)replacement; + } + } + } + + instance = ToState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private TransitionVariableState m_transition; + private StateVariableState m_fromState; + private StateVariableState m_toState; + #endregion + } + #endif + #endregion + + #region AuditUpdateStateEventState Class + #if (!OPCUA_EXCLUDE_AuditUpdateStateEventState) + /// + /// Stores an instance of the AuditUpdateStateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditUpdateStateEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditUpdateStateEventState(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(Opc.Ua.ObjectTypes.AuditUpdateStateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAEF1ZGl0VXBkYXRlU3RhdGVFdmVudFR5cGVJbnN0YW5jZQEACwkB" + + "AAsJCwkAAP////8RAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCuDgAuAESuDgAAAA//////AQH/////" + + "AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCvDgAuAESvDgAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTm9kZQEAsA4ALgBEsA4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5hbWUBALEOAC4ARLEOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQCy" + + "DgAuAESyDgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAsw4ALgBE" + + "sw4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAtQ4ALgBEtQ4AAAAV////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQC2DgAuAES2DgAAAAX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQC3DgAuAES3DgAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAYAAABTdGF0dXMBALgOAC4ARLgOAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAgA" + + "AABTZXJ2ZXJJZAEAuQ4ALgBEuQ4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVudEF1" + + "ZGl0RW50cnlJZAEAug4ALgBEug4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVz" + + "ZXJJZAEAuw4ALgBEuw4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElkAQC8DgAu" + + "AES8DgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAL0OAC4ARL0O" + + "AAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACgAAAE9sZFN0YXRlSWQBANkKAC4ARNkK" + + "AAAAGP////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABOZXdTdGF0ZUlkAQDaCgAuAETaCgAAABj/////" + + "AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState OldStateId + { + get + { + return m_oldStateId; + } + + set + { + if (!Object.ReferenceEquals(m_oldStateId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldStateId = value; + } + } + + /// + public PropertyState NewStateId + { + get + { + return m_newStateId; + } + + set + { + if (!Object.ReferenceEquals(m_newStateId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_newStateId = 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_oldStateId != null) + { + children.Add(m_oldStateId); + } + + if (m_newStateId != null) + { + children.Add(m_newStateId); + } + + 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 Opc.Ua.BrowseNames.OldStateId: + { + if (createOrReplace) + { + if (OldStateId == null) + { + if (replacement == null) + { + OldStateId = new PropertyState(this); + } + else + { + OldStateId = (PropertyState)replacement; + } + } + } + + instance = OldStateId; + break; + } + + case Opc.Ua.BrowseNames.NewStateId: + { + if (createOrReplace) + { + if (NewStateId == null) + { + if (replacement == null) + { + NewStateId = new PropertyState(this); + } + else + { + NewStateId = (PropertyState)replacement; + } + } + } + + instance = NewStateId; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_oldStateId; + private PropertyState m_newStateId; + #endregion + } + #endif + #endregion + + #region OpenMethodState Class + #if (!OPCUA_EXCLUDE_OpenMethodState) + /// + /// Stores an instance of the OpenMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OpenMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OpenMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new OpenMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAADgAAAE9wZW5NZXRob2RUeXBlAQDaLQAvAQDaLdotAAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA2y0ALgBE2y0AAJYBAAAAAQAqAQETAAAABAAAAE1v" + + "ZGUAA/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRB" + + "cmd1bWVudHMBANwtAC4ARNwtAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public OpenMethodStateMethodCallHandler 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; + + byte mode = (byte)_inputArguments[0]; + + uint fileHandle = (uint)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + mode, + ref fileHandle); + } + + _outputArguments[0] = fileHandle; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult OpenMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + byte mode, + ref uint fileHandle); + #endif + #endregion + + #region CloseMethodState Class + #if (!OPCUA_EXCLUDE_CloseMethodState) + /// + /// Stores an instance of the CloseMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CloseMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CloseMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CloseMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAADwAAAENsb3NlTWV0aG9kVHlwZQEA3S0ALwEA3S3dLQAAAQH/////AQAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAN4tAC4ARN4tAACWAQAAAAEAKgEBGQAAAAoAAABG" + + "aWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CloseMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CloseMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle); + #endif + #endregion + + #region ReadMethodState Class + #if (!OPCUA_EXCLUDE_ReadMethodState) + /// + /// Stores an instance of the ReadMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ReadMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ReadMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new ReadMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAADgAAAFJlYWRNZXRob2RUeXBlAQDfLQAvAQDfLd8tAAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA4C0ALgBE4C0AAJYCAAAAAQAqAQEZAAAACgAAAEZp" + + "bGVIYW5kbGUAB/////8AAAAAAAEAKgEBFQAAAAYAAABMZW5ndGgABv////8AAAAAAAEAKAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAOEtAC4AROEtAACWAQAA" + + "AAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public ReadMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + int length = (int)_inputArguments[1]; + + byte[] data = (byte[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle, + length, + ref data); + } + + _outputArguments[0] = data; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult ReadMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + int length, + ref byte[] data); + #endif + #endregion + + #region WriteMethodState Class + #if (!OPCUA_EXCLUDE_WriteMethodState) + /// + /// Stores an instance of the WriteMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class WriteMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public WriteMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new WriteMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAADwAAAFdyaXRlTWV0aG9kVHlwZQEA4i0ALwEA4i3iLQAAAQH/////AQAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOMtAC4AROMtAACWAgAAAAEAKgEBGQAAAAoAAABG" + + "aWxlSGFuZGxlAAf/////AAAAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public WriteMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + byte[] data = (byte[])_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle, + data); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult WriteMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + byte[] data); + #endif + #endregion + + #region GetPositionMethodState Class + #if (!OPCUA_EXCLUDE_GetPositionMethodState) + /// + /// Stores an instance of the GetPositionMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetPositionMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetPositionMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetPositionMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFQAAAEdldFBvc2l0aW9uTWV0aG9kVHlwZQEA5C0ALwEA5C3kLQAAAQH/" + + "////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOUtAC4AROUtAACWAQAAAAEAKgEBGQAA" + + "AAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAA" + + "AAAPAAAAT3V0cHV0QXJndW1lbnRzAQDmLQAuAETmLQAAlgEAAAABACoBARcAAAAIAAAAUG9zaXRpb24A" + + "Cf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetPositionMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + + ulong position = (ulong)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle, + ref position); + } + + _outputArguments[0] = position; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetPositionMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + ref ulong position); + #endif + #endregion + + #region SetPositionMethodState Class + #if (!OPCUA_EXCLUDE_SetPositionMethodState) + /// + /// Stores an instance of the SetPositionMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SetPositionMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SetPositionMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new SetPositionMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFQAAAFNldFBvc2l0aW9uTWV0aG9kVHlwZQEA5y0ALwEA5y3nLQAAAQH/" + + "////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOgtAC4AROgtAACWAgAAAAEAKgEBGQAA" + + "AAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARcAAAAIAAAAUG9zaXRpb24ACf////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public SetPositionMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + ulong position = (ulong)_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle, + position); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult SetPositionMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + ulong position); + #endif + #endregion + + #region FileDirectoryState Class + #if (!OPCUA_EXCLUDE_FileDirectoryState) + /// + /// Stores an instance of the FileDirectoryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FileDirectoryState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FileDirectoryState(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(Opc.Ua.ObjectTypes.FileDirectoryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGQAAAEZpbGVEaXJlY3RvcnlUeXBlSW5zdGFuY2UBACk0AQApNCk0AAD/" + + "////BAAAAARhggoEAAAAAAAPAAAAQ3JlYXRlRGlyZWN0b3J5AQBLNAAvAQBLNEs0AAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEATDQALgBETDQAAJYBAAAAAQAqAQEcAAAADQAAAERp" + + "cmVjdG9yeU5hbWUADP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8A" + + "AABPdXRwdXRBcmd1bWVudHMBAE00AC4ARE00AACWAQAAAAEAKgEBHgAAAA8AAABEaXJlY3RvcnlOb2Rl" + + "SWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAoAAABDcmVhdGVG" + + "aWxlAQBONAAvAQBONE40AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEATzQA" + + "LgBETzQAAJYCAAAAAQAqAQEXAAAACAAAAEZpbGVOYW1lAAz/////AAAAAAABACoBAR4AAAAPAAAAUmVx" + + "dWVzdEZpbGVPcGVuAAH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAP" + + "AAAAT3V0cHV0QXJndW1lbnRzAQBQNAAuAERQNAAAlgIAAAABACoBARkAAAAKAAAARmlsZU5vZGVJZAAR" + + "/////wAAAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAABGHCCgQAAAAWAAAARGVsZXRlRmlsZVN5c3RlbU9iamVjdAAABgAAAERlbGV0ZQEAUTQA" + + "LwEAUTRRNAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAFI0AC4ARFI0AACW" + + "AQAAAAEAKgEBHQAAAA4AAABPYmplY3RUb0RlbGV0ZQAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAAEYYIKBAAAAAAACgAAAE1vdmVPckNvcHkBAFM0AC8BAFM0UzQAAAEB/////wIAAAAXYKkK" + + "AgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBUNAAuAERUNAAAlgQAAAABACoBASEAAAASAAAAT2JqZWN0" + + "VG9Nb3ZlT3JDb3B5ABH/////AAAAAAABACoBAR4AAAAPAAAAVGFyZ2V0RGlyZWN0b3J5ABH/////AAAA" + + "AAABACoBARkAAAAKAAAAQ3JlYXRlQ29weQAB/////wAAAAAAAQAqAQEWAAAABwAAAE5ld05hbWUADP//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVu" + + "dHMBAFU0AC4ARFU0AACWAQAAAAEAKgEBGAAAAAkAAABOZXdOb2RlSWQAEf////8AAAAAAAEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public CreateDirectoryMethodState CreateDirectory + { + get + { + return m_createDirectoryMethod; + } + + set + { + if (!Object.ReferenceEquals(m_createDirectoryMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createDirectoryMethod = value; + } + } + + /// + public CreateFileMethodState CreateFile + { + get + { + return m_createFileMethod; + } + + set + { + if (!Object.ReferenceEquals(m_createFileMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createFileMethod = value; + } + } + + /// + public DeleteFileMethodState DeleteFileSystemObject + { + get + { + return m_deleteFileSystemObjectMethod; + } + + set + { + if (!Object.ReferenceEquals(m_deleteFileSystemObjectMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteFileSystemObjectMethod = value; + } + } + + /// + public MoveOrCopyMethodState MoveOrCopy + { + get + { + return m_moveOrCopyMethod; + } + + set + { + if (!Object.ReferenceEquals(m_moveOrCopyMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_moveOrCopyMethod = 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_createDirectoryMethod != null) + { + children.Add(m_createDirectoryMethod); + } + + if (m_createFileMethod != null) + { + children.Add(m_createFileMethod); + } + + if (m_deleteFileSystemObjectMethod != null) + { + children.Add(m_deleteFileSystemObjectMethod); + } + + if (m_moveOrCopyMethod != null) + { + children.Add(m_moveOrCopyMethod); + } + + 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 Opc.Ua.BrowseNames.CreateDirectory: + { + if (createOrReplace) + { + if (CreateDirectory == null) + { + if (replacement == null) + { + CreateDirectory = new CreateDirectoryMethodState(this); + } + else + { + CreateDirectory = (CreateDirectoryMethodState)replacement; + } + } + } + + instance = CreateDirectory; + break; + } + + case Opc.Ua.BrowseNames.CreateFile: + { + if (createOrReplace) + { + if (CreateFile == null) + { + if (replacement == null) + { + CreateFile = new CreateFileMethodState(this); + } + else + { + CreateFile = (CreateFileMethodState)replacement; + } + } + } + + instance = CreateFile; + break; + } + + case Opc.Ua.BrowseNames.DeleteFileSystemObject: + { + if (createOrReplace) + { + if (DeleteFileSystemObject == null) + { + if (replacement == null) + { + DeleteFileSystemObject = new DeleteFileMethodState(this); + } + else + { + DeleteFileSystemObject = (DeleteFileMethodState)replacement; + } + } + } + + instance = DeleteFileSystemObject; + break; + } + + case Opc.Ua.BrowseNames.MoveOrCopy: + { + if (createOrReplace) + { + if (MoveOrCopy == null) + { + if (replacement == null) + { + MoveOrCopy = new MoveOrCopyMethodState(this); + } + else + { + MoveOrCopy = (MoveOrCopyMethodState)replacement; + } + } + } + + instance = MoveOrCopy; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private CreateDirectoryMethodState m_createDirectoryMethod; + private CreateFileMethodState m_createFileMethod; + private DeleteFileMethodState m_deleteFileSystemObjectMethod; + private MoveOrCopyMethodState m_moveOrCopyMethod; + #endregion + } + #endif + #endregion + + #region CreateDirectoryMethodState Class + #if (!OPCUA_EXCLUDE_CreateDirectoryMethodState) + /// + /// Stores an instance of the CreateDirectoryMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CreateDirectoryMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CreateDirectoryMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CreateDirectoryMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGQAAAENyZWF0ZURpcmVjdG9yeU1ldGhvZFR5cGUBAB40AC8BAB40HjQA" + + "AAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAfNAAuAEQfNAAAlgEAAAABACoB" + + "ARwAAAANAAAARGlyZWN0b3J5TmFtZQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAX" + + "YKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAIDQALgBEIDQAAJYBAAAAAQAqAQEeAAAADwAAAERp" + + "cmVjdG9yeU5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CreateDirectoryMethodStateMethodCallHandler 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; + + string directoryName = (string)_inputArguments[0]; + + NodeId directoryNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + directoryName, + ref directoryNodeId); + } + + _outputArguments[0] = directoryNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CreateDirectoryMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string directoryName, + ref NodeId directoryNodeId); + #endif + #endregion + + #region CreateFileMethodState Class + #if (!OPCUA_EXCLUDE_CreateFileMethodState) + /// + /// Stores an instance of the CreateFileMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CreateFileMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CreateFileMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CreateFileMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFAAAAENyZWF0ZUZpbGVNZXRob2RUeXBlAQAhNAAvAQAhNCE0AAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAIjQALgBEIjQAAJYCAAAAAQAqAQEXAAAA" + + "CAAAAEZpbGVOYW1lAAz/////AAAAAAABACoBAR4AAAAPAAAAUmVxdWVzdEZpbGVPcGVuAAH/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAj" + + "NAAuAEQjNAAAlgIAAAABACoBARkAAAAKAAAARmlsZU5vZGVJZAAR/////wAAAAAAAQAqAQEZAAAACgAA" + + "AEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CreateFileMethodStateMethodCallHandler 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; + + string fileName = (string)_inputArguments[0]; + bool requestFileOpen = (bool)_inputArguments[1]; + + NodeId fileNodeId = (NodeId)_outputArguments[0]; + uint fileHandle = (uint)_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileName, + requestFileOpen, + ref fileNodeId, + ref fileHandle); + } + + _outputArguments[0] = fileNodeId; + _outputArguments[1] = fileHandle; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CreateFileMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string fileName, + bool requestFileOpen, + ref NodeId fileNodeId, + ref uint fileHandle); + #endif + #endregion + + #region DeleteFileMethodState Class + #if (!OPCUA_EXCLUDE_DeleteFileMethodState) + /// + /// Stores an instance of the DeleteFileMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DeleteFileMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DeleteFileMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new DeleteFileMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFAAAAERlbGV0ZUZpbGVNZXRob2RUeXBlAQAkNAAvAQAkNCQ0AAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAJTQALgBEJTQAAJYBAAAAAQAqAQEdAAAA" + + "DgAAAE9iamVjdFRvRGVsZXRlABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public DeleteFileMethodStateMethodCallHandler 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; + + NodeId objectToDelete = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + objectToDelete); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult DeleteFileMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId objectToDelete); + #endif + #endregion + + #region MoveOrCopyMethodState Class + #if (!OPCUA_EXCLUDE_MoveOrCopyMethodState) + /// + /// Stores an instance of the MoveOrCopyMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class MoveOrCopyMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public MoveOrCopyMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new MoveOrCopyMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFAAAAE1vdmVPckNvcHlNZXRob2RUeXBlAQAmNAAvAQAmNCY0AAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAJzQALgBEJzQAAJYEAAAAAQAqAQEhAAAA" + + "EgAAAE9iamVjdFRvTW92ZU9yQ29weQAR/////wAAAAAAAQAqAQEeAAAADwAAAFRhcmdldERpcmVjdG9y" + + "eQAR/////wAAAAAAAQAqAQEZAAAACgAAAENyZWF0ZUNvcHkAAf////8AAAAAAAEAKgEBFgAAAAcAAABO" + + "ZXdOYW1lAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0" + + "cHV0QXJndW1lbnRzAQAoNAAuAEQoNAAAlgEAAAABACoBARgAAAAJAAAATmV3Tm9kZUlkABH/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public MoveOrCopyMethodStateMethodCallHandler 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; + + NodeId objectToMoveOrCopy = (NodeId)_inputArguments[0]; + NodeId targetDirectory = (NodeId)_inputArguments[1]; + bool createCopy = (bool)_inputArguments[2]; + string newName = (string)_inputArguments[3]; + + NodeId newNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + objectToMoveOrCopy, + targetDirectory, + createCopy, + newName, + ref newNodeId); + } + + _outputArguments[0] = newNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult MoveOrCopyMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId objectToMoveOrCopy, + NodeId targetDirectory, + bool createCopy, + string newName, + ref NodeId newNodeId); + #endif + #endregion + + #region TemporaryFileTransferState Class + #if (!OPCUA_EXCLUDE_TemporaryFileTransferState) + /// + /// Stores an instance of the TemporaryFileTransferType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TemporaryFileTransferState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TemporaryFileTransferState(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(Opc.Ua.ObjectTypes.TemporaryFileTransferType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAFRlbXBvcmFyeUZpbGVUcmFuc2ZlclR5cGVJbnN0YW5jZQEAgD0B" + + "AIA9gD0AAP////8EAAAAFWCJCgIAAAAAABcAAABDbGllbnRQcm9jZXNzaW5nVGltZW91dAEAgT0ALgBE" + + "gT0AAAEAIgH/////AQH/////AAAAAARhggoEAAAAAAATAAAAR2VuZXJhdGVGaWxlRm9yUmVhZAEAgj0A" + + "LwEAgj2CPQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIM9AC4ARIM9AACW" + + "AQAAAAEAKgEBHgAAAA8AAABHZW5lcmF0ZU9wdGlvbnMAGP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAIQ9AC4ARIQ9AACWAwAAAAEAKgEB" + + "GQAAAAoAAABGaWxlTm9kZUlkABH/////AAAAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAA" + + "AAAAAQAqAQElAAAAFgAAAENvbXBsZXRpb25TdGF0ZU1hY2hpbmUAEf////8AAAAAAAEAKAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAABGGCCgQAAAAAABQAAABHZW5lcmF0ZUZpbGVGb3JXcml0ZQEAhT0ALwEAhT2F" + + "PQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOc/AC4AROc/AACWAQAAAAEA" + + "KgEBHgAAAA8AAABHZW5lcmF0ZU9wdGlvbnMAGP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAIY9AC4ARIY9AACWAgAAAAEAKgEBGQAAAAoA" + + "AABGaWxlTm9kZUlkABH/////AAAAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAADgAAAENsb3NlQW5kQ29tbWl0AQCHPQAvAQCH" + + "PYc9AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAiD0ALgBEiD0AAJYBAAAA" + + "AQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "F2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAIk9AC4ARIk9AACWAQAAAAEAKgEBJQAAABYAAABD" + + "b21wbGV0aW9uU3RhdGVNYWNoaW5lABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ClientProcessingTimeout + { + get + { + return m_clientProcessingTimeout; + } + + set + { + if (!Object.ReferenceEquals(m_clientProcessingTimeout, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientProcessingTimeout = value; + } + } + + /// + public GenerateFileForReadMethodState GenerateFileForRead + { + get + { + return m_generateFileForReadMethod; + } + + set + { + if (!Object.ReferenceEquals(m_generateFileForReadMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_generateFileForReadMethod = value; + } + } + + /// + public GenerateFileForWriteMethodState GenerateFileForWrite + { + get + { + return m_generateFileForWriteMethod; + } + + set + { + if (!Object.ReferenceEquals(m_generateFileForWriteMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_generateFileForWriteMethod = value; + } + } + + /// + public CloseAndCommitMethodState CloseAndCommit + { + get + { + return m_closeAndCommitMethod; + } + + set + { + if (!Object.ReferenceEquals(m_closeAndCommitMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_closeAndCommitMethod = 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_clientProcessingTimeout != null) + { + children.Add(m_clientProcessingTimeout); + } + + if (m_generateFileForReadMethod != null) + { + children.Add(m_generateFileForReadMethod); + } + + if (m_generateFileForWriteMethod != null) + { + children.Add(m_generateFileForWriteMethod); + } + + if (m_closeAndCommitMethod != null) + { + children.Add(m_closeAndCommitMethod); + } + + 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 Opc.Ua.BrowseNames.ClientProcessingTimeout: + { + if (createOrReplace) + { + if (ClientProcessingTimeout == null) + { + if (replacement == null) + { + ClientProcessingTimeout = new PropertyState(this); + } + else + { + ClientProcessingTimeout = (PropertyState)replacement; + } + } + } + + instance = ClientProcessingTimeout; + break; + } + + case Opc.Ua.BrowseNames.GenerateFileForRead: + { + if (createOrReplace) + { + if (GenerateFileForRead == null) + { + if (replacement == null) + { + GenerateFileForRead = new GenerateFileForReadMethodState(this); + } + else + { + GenerateFileForRead = (GenerateFileForReadMethodState)replacement; + } + } + } + + instance = GenerateFileForRead; + break; + } + + case Opc.Ua.BrowseNames.GenerateFileForWrite: + { + if (createOrReplace) + { + if (GenerateFileForWrite == null) + { + if (replacement == null) + { + GenerateFileForWrite = new GenerateFileForWriteMethodState(this); + } + else + { + GenerateFileForWrite = (GenerateFileForWriteMethodState)replacement; + } + } + } + + instance = GenerateFileForWrite; + break; + } + + case Opc.Ua.BrowseNames.CloseAndCommit: + { + if (createOrReplace) + { + if (CloseAndCommit == null) + { + if (replacement == null) + { + CloseAndCommit = new CloseAndCommitMethodState(this); + } + else + { + CloseAndCommit = (CloseAndCommitMethodState)replacement; + } + } + } + + instance = CloseAndCommit; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_clientProcessingTimeout; + private GenerateFileForReadMethodState m_generateFileForReadMethod; + private GenerateFileForWriteMethodState m_generateFileForWriteMethod; + private CloseAndCommitMethodState m_closeAndCommitMethod; + #endregion + } + #endif + #endregion + + #region GenerateFileForReadMethodState Class + #if (!OPCUA_EXCLUDE_GenerateFileForReadMethodState) + /// + /// Stores an instance of the GenerateFileForReadMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GenerateFileForReadMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GenerateFileForReadMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GenerateFileForReadMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHQAAAEdlbmVyYXRlRmlsZUZvclJlYWRNZXRob2RUeXBlAQCzPQAvAQCz" + + "PbM9AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAtD0ALgBEtD0AAJYBAAAA" + + "AQAqAQEeAAAADwAAAEdlbmVyYXRlT3B0aW9ucwAY/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAtT0ALgBEtT0AAJYDAAAAAQAqAQEZAAAA" + + "CgAAAEZpbGVOb2RlSWQAEf////8AAAAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAAB" + + "ACoBASUAAAAWAAAAQ29tcGxldGlvblN0YXRlTWFjaGluZQAR/////wAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GenerateFileForReadMethodStateMethodCallHandler 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; + + object generateOptions = (object)_inputArguments[0]; + + NodeId fileNodeId = (NodeId)_outputArguments[0]; + uint fileHandle = (uint)_outputArguments[1]; + NodeId completionStateMachine = (NodeId)_outputArguments[2]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + generateOptions, + ref fileNodeId, + ref fileHandle, + ref completionStateMachine); + } + + _outputArguments[0] = fileNodeId; + _outputArguments[1] = fileHandle; + _outputArguments[2] = completionStateMachine; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GenerateFileForReadMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + object generateOptions, + ref NodeId fileNodeId, + ref uint fileHandle, + ref NodeId completionStateMachine); + #endif + #endregion + + #region GenerateFileForWriteMethodState Class + #if (!OPCUA_EXCLUDE_GenerateFileForWriteMethodState) + /// + /// Stores an instance of the GenerateFileForWriteMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GenerateFileForWriteMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GenerateFileForWriteMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GenerateFileForWriteMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHgAAAEdlbmVyYXRlRmlsZUZvcldyaXRlTWV0aG9kVHlwZQEAtj0ALwEA" + + "tj22PQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOg/AC4AROg/AACWAQAA" + + "AAEAKgEBHgAAAA8AAABHZW5lcmF0ZU9wdGlvbnMAGP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBALc9AC4ARLc9AACWAgAAAAEAKgEBGQAA" + + "AAoAAABGaWxlTm9kZUlkABH/////AAAAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAA" + + "AQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GenerateFileForWriteMethodStateMethodCallHandler 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; + + object generateOptions = (object)_inputArguments[0]; + + NodeId fileNodeId = (NodeId)_outputArguments[0]; + uint fileHandle = (uint)_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + generateOptions, + ref fileNodeId, + ref fileHandle); + } + + _outputArguments[0] = fileNodeId; + _outputArguments[1] = fileHandle; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GenerateFileForWriteMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + object generateOptions, + ref NodeId fileNodeId, + ref uint fileHandle); + #endif + #endregion + + #region CloseAndCommitMethodState Class + #if (!OPCUA_EXCLUDE_CloseAndCommitMethodState) + /// + /// Stores an instance of the CloseAndCommitMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CloseAndCommitMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CloseAndCommitMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CloseAndCommitMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAENsb3NlQW5kQ29tbWl0TWV0aG9kVHlwZQEAuD0ALwEAuD24PQAA" + + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBALk9AC4ARLk9AACWAQAAAAEAKgEB" + + "GQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoC" + + "AAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQC6PQAuAES6PQAAlgEAAAABACoBASUAAAAWAAAAQ29tcGxl" + + "dGlvblN0YXRlTWFjaGluZQAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CloseAndCommitMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + + NodeId completionStateMachine = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle, + ref completionStateMachine); + } + + _outputArguments[0] = completionStateMachine; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CloseAndCommitMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + ref NodeId completionStateMachine); + #endif + #endregion + + #region FileTransferStateMachineState Class + #if (!OPCUA_EXCLUDE_FileTransferStateMachineState) + /// + /// Stores an instance of the FileTransferStateMachineType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FileTransferStateMachineState : FiniteStateMachineState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FileTransferStateMachineState(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(Opc.Ua.ObjectTypes.FileTransferStateMachineType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAEZpbGVUcmFuc2ZlclN0YXRlTWFjaGluZVR5cGVJbnN0YW5jZQEA" + + "uz0BALs9uz0AAP////8CAAAAFWCJCgIAAAAAAAwAAABDdXJyZW50U3RhdGUBALw9AC8BAMgKvD0AAAAV" + + "/////wEB/////wEAAAAVYIkKAgAAAAAAAgAAAElkAQC9PQAuAES9PQAAABH/////AQH/////AAAAAARh" + + "ggoEAAAAAAAFAAAAUmVzZXQBAOM9AC8BAOM94z0AAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public MethodState Reset + { + get + { + return m_resetMethod; + } + + set + { + if (!Object.ReferenceEquals(m_resetMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resetMethod = 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_resetMethod != null) + { + children.Add(m_resetMethod); + } + + 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 Opc.Ua.BrowseNames.Reset: + { + if (createOrReplace) + { + if (Reset == null) + { + if (replacement == null) + { + Reset = new MethodState(this); + } + else + { + Reset = (MethodState)replacement; + } + } + } + + instance = Reset; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private MethodState m_resetMethod; + #endregion + } + #endif + #endregion + + #region RoleSetState Class + #if (!OPCUA_EXCLUDE_RoleSetState) + /// + /// Stores an instance of the RoleSetType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RoleSetState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RoleSetState(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(Opc.Ua.ObjectTypes.RoleSetType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAEwAAAFJvbGVTZXRUeXBlSW5zdGFuY2UBAPc8AQD3PPc8AAD/////AgAA" + + "AARhggoEAAAAAAAHAAAAQWRkUm9sZQEAfT4ALwEAfT59PgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAA" + + "SW5wdXRBcmd1bWVudHMBAH4+AC4ARH4+AACWAgAAAAEAKgEBFwAAAAgAAABSb2xlTmFtZQAM/////wAA" + + "AAAAAQAqAQEbAAAADAAAAE5hbWVzcGFjZVVyaQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAfz4ALgBEfz4AAJYBAAAAAQAqAQEZAAAA" + + "CgAAAFJvbGVOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAA" + + "AAoAAABSZW1vdmVSb2xlAQCAPgAvAQCAPoA+AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFy" + + "Z3VtZW50cwEAgT4ALgBEgT4AAJYBAAAAAQAqAQEZAAAACgAAAFJvbGVOb2RlSWQAEf////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public AddRoleMethodState AddRole + { + get + { + return m_addRoleMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addRoleMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addRoleMethod = value; + } + } + + /// + public RemoveRoleMethodState RemoveRole + { + get + { + return m_removeRoleMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeRoleMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeRoleMethod = 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_addRoleMethod != null) + { + children.Add(m_addRoleMethod); + } + + if (m_removeRoleMethod != null) + { + children.Add(m_removeRoleMethod); + } + + 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 Opc.Ua.BrowseNames.AddRole: + { + if (createOrReplace) + { + if (AddRole == null) + { + if (replacement == null) + { + AddRole = new AddRoleMethodState(this); + } + else + { + AddRole = (AddRoleMethodState)replacement; + } + } + } + + instance = AddRole; + break; + } + + case Opc.Ua.BrowseNames.RemoveRole: + { + if (createOrReplace) + { + if (RemoveRole == null) + { + if (replacement == null) + { + RemoveRole = new RemoveRoleMethodState(this); + } + else + { + RemoveRole = (RemoveRoleMethodState)replacement; + } + } + } + + instance = RemoveRole; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private AddRoleMethodState m_addRoleMethod; + private RemoveRoleMethodState m_removeRoleMethod; + #endregion + } + #endif + #endregion + + #region AddRoleMethodState Class + #if (!OPCUA_EXCLUDE_AddRoleMethodState) + /// + /// Stores an instance of the AddRoleMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddRoleMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddRoleMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddRoleMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAEQAAAEFkZFJvbGVNZXRob2RUeXBlAQCCPgAvAQCCPoI+AAABAf////8C" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAgz4ALgBEgz4AAJYCAAAAAQAqAQEXAAAACAAA" + + "AFJvbGVOYW1lAAz/////AAAAAAABACoBARsAAAAMAAAATmFtZXNwYWNlVXJpAAz/////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCEPgAuAESE" + + "PgAAlgEAAAABACoBARkAAAAKAAAAUm9sZU5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddRoleMethodStateMethodCallHandler 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; + + string roleName = (string)_inputArguments[0]; + string namespaceUri = (string)_inputArguments[1]; + + NodeId roleNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + roleName, + namespaceUri, + ref roleNodeId); + } + + _outputArguments[0] = roleNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddRoleMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string roleName, + string namespaceUri, + ref NodeId roleNodeId); + #endif + #endregion + + #region RemoveRoleMethodState Class + #if (!OPCUA_EXCLUDE_RemoveRoleMethodState) + /// + /// Stores an instance of the RemoveRoleMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveRoleMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveRoleMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveRoleMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFAAAAFJlbW92ZVJvbGVNZXRob2RUeXBlAQCFPgAvAQCFPoU+AAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAhj4ALgBEhj4AAJYBAAAAAQAqAQEZAAAA" + + "CgAAAFJvbGVOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveRoleMethodStateMethodCallHandler 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; + + NodeId roleNodeId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + roleNodeId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveRoleMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId roleNodeId); + #endif + #endregion + + #region RoleState Class + #if (!OPCUA_EXCLUDE_RoleState) + /// + /// Stores an instance of the RoleType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RoleState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RoleState(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(Opc.Ua.ObjectTypes.RoleType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (Applications != null) + { + Applications.Initialize(context, Applications_InitializationString); + } + + if (ApplicationsExclude != null) + { + ApplicationsExclude.Initialize(context, ApplicationsExclude_InitializationString); + } + + if (Endpoints != null) + { + Endpoints.Initialize(context, Endpoints_InitializationString); + } + + if (EndpointsExclude != null) + { + EndpointsExclude.Initialize(context, EndpointsExclude_InitializationString); + } + + if (AddIdentity != null) + { + AddIdentity.Initialize(context, AddIdentity_InitializationString); + } + + if (RemoveIdentity != null) + { + RemoveIdentity.Initialize(context, RemoveIdentity_InitializationString); + } + + if (AddApplication != null) + { + AddApplication.Initialize(context, AddApplication_InitializationString); + } + + if (RemoveApplication != null) + { + RemoveApplication.Initialize(context, RemoveApplication_InitializationString); + } + + if (AddEndpoint != null) + { + AddEndpoint.Initialize(context, AddEndpoint_InitializationString); + } + + if (RemoveEndpoint != null) + { + RemoveEndpoint.Initialize(context, RemoveEndpoint_InitializationString); + } + } + + #region Initialization String + private const string Applications_InitializationString = + "//////////8XYIkKAgAAAAAADAAAAEFwcGxpY2F0aW9ucwEALj8ALgBELj8AAAAMAQAAAAEAAAAAAAAA" + + "AQH/////AAAAAA=="; + + private const string ApplicationsExclude_InitializationString = + "//////////8VYIkKAgAAAAAAEwAAAEFwcGxpY2F0aW9uc0V4Y2x1ZGUBADI8AC4ARDI8AAAAAf////8B" + + "Af////8AAAAA"; + + private const string Endpoints_InitializationString = + "//////////8XYIkKAgAAAAAACQAAAEVuZHBvaW50cwEALz8ALgBELz8AAAEAqDwBAAAAAQAAAAAAAAAB" + + "Af////8AAAAA"; + + private const string EndpointsExclude_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEVuZHBvaW50c0V4Y2x1ZGUBADM8AC4ARDM8AAAAAf////8BAf//" + + "//8AAAAA"; + + private const string AddIdentity_InitializationString = + "//////////8EYYIKBAAAAAAACwAAAEFkZElkZW50aXR5AQAIPQAvAQAIPQg9AAABAf////8BAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEACT0ALgBECT0AAJYBAAAAAQAqAQEVAAAABAAAAFJ1bGUB" + + "ABI9/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string RemoveIdentity_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAFJlbW92ZUlkZW50aXR5AQAKPQAvAQAKPQo9AAABAf////8BAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEACz0ALgBECz0AAJYBAAAAAQAqAQEVAAAABAAAAFJ1" + + "bGUBABI9/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string AddApplication_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAEFkZEFwcGxpY2F0aW9uAQAwPwAvAQAwPzA/AAABAf////8BAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAMT8ALgBEMT8AAJYBAAAAAQAqAQEdAAAADgAAAEFw" + + "cGxpY2F0aW9uVXJpAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string RemoveApplication_InitializationString = + "//////////8EYYIKBAAAAAAAEQAAAFJlbW92ZUFwcGxpY2F0aW9uAQAyPwAvAQAyPzI/AAABAf////8B" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAMz8ALgBEMz8AAJYBAAAAAQAqAQEdAAAADgAA" + + "AEFwcGxpY2F0aW9uVXJpAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string AddEndpoint_InitializationString = + "//////////8EYYIKBAAAAAAACwAAAEFkZEVuZHBvaW50AQA0PwAvAQA0PzQ/AAABAf////8BAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEANT8ALgBENT8AAJYBAAAAAQAqAQEZAAAACAAAAEVuZHBv" + + "aW50AQCoPP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string RemoveEndpoint_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAFJlbW92ZUVuZHBvaW50AQA2PwAvAQA2PzY/AAABAf////8BAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEANz8ALgBENz8AAJYBAAAAAQAqAQEZAAAACAAAAEVu" + + "ZHBvaW50AQCoPP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAEAAAAFJvbGVUeXBlSW5zdGFuY2UBAAQ9AQAEPQQ9AAD/////CwAAABdg" + + "iQoCAAAAAAAKAAAASWRlbnRpdGllcwEALT8ALgBELT8AAAEAEj0BAAAAAQAAAAAAAAABAf////8AAAAA" + + "F2CJCgIAAAAAAAwAAABBcHBsaWNhdGlvbnMBAC4/AC4ARC4/AAAADAEAAAABAAAAAAAAAAEB/////wAA" + + "AAAVYIkKAgAAAAAAEwAAAEFwcGxpY2F0aW9uc0V4Y2x1ZGUBADI8AC4ARDI8AAAAAf////8BAf////8A" + + "AAAAF2CJCgIAAAAAAAkAAABFbmRwb2ludHMBAC8/AC4ARC8/AAABAKg8AQAAAAEAAAAAAAAAAQH/////" + + "AAAAABVgiQoCAAAAAAAQAAAARW5kcG9pbnRzRXhjbHVkZQEAMzwALgBEMzwAAAAB/////wEB/////wAA" + + "AAAEYYIKBAAAAAAACwAAAEFkZElkZW50aXR5AQAIPQAvAQAIPQg9AAABAf////8BAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEACT0ALgBECT0AAJYBAAAAAQAqAQEVAAAABAAAAFJ1bGUBABI9////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAADgAAAFJlbW92ZUlkZW50aXR5" + + "AQAKPQAvAQAKPQo9AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEACz0ALgBE" + + "Cz0AAJYBAAAAAQAqAQEVAAAABAAAAFJ1bGUBABI9/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAEYYIKBAAAAAAADgAAAEFkZEFwcGxpY2F0aW9uAQAwPwAvAQAwPzA/AAABAf////8BAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAMT8ALgBEMT8AAJYBAAAAAQAqAQEdAAAADgAAAEFwcGxp" + + "Y2F0aW9uVXJpAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAARAAAA" + + "UmVtb3ZlQXBwbGljYXRpb24BADI/AC8BADI/Mj8AAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0" + + "QXJndW1lbnRzAQAzPwAuAEQzPwAAlgEAAAABACoBAR0AAAAOAAAAQXBwbGljYXRpb25VcmkADP////8A" + + "AAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABBZGRFbmRwb2ludAEAND8A" + + "LwEAND80PwAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADU/AC4ARDU/AACW" + + "AQAAAAEAKgEBGQAAAAgAAABFbmRwb2ludAEAqDz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAAARhggoEAAAAAAAOAAAAUmVtb3ZlRW5kcG9pbnQBADY/AC8BADY/Nj8AAAEB/////wEAAAAXYKkK" + + "AgAAAAAADgAAAElucHV0QXJndW1lbnRzAQA3PwAuAEQ3PwAAlgEAAAABACoBARkAAAAIAAAARW5kcG9p" + + "bnQBAKg8/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Identities + { + get + { + return m_identities; + } + + set + { + if (!Object.ReferenceEquals(m_identities, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_identities = value; + } + } + + /// + public PropertyState Applications + { + get + { + return m_applications; + } + + set + { + if (!Object.ReferenceEquals(m_applications, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_applications = value; + } + } + + /// + public PropertyState ApplicationsExclude + { + get + { + return m_applicationsExclude; + } + + set + { + if (!Object.ReferenceEquals(m_applicationsExclude, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_applicationsExclude = value; + } + } + + /// + public PropertyState Endpoints + { + get + { + return m_endpoints; + } + + set + { + if (!Object.ReferenceEquals(m_endpoints, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_endpoints = value; + } + } + + /// + public PropertyState EndpointsExclude + { + get + { + return m_endpointsExclude; + } + + set + { + if (!Object.ReferenceEquals(m_endpointsExclude, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_endpointsExclude = value; + } + } + + /// + public AddIdentityMethodState AddIdentity + { + get + { + return m_addIdentityMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addIdentityMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addIdentityMethod = value; + } + } + + /// + public RemoveIdentityMethodState RemoveIdentity + { + get + { + return m_removeIdentityMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeIdentityMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeIdentityMethod = value; + } + } + + /// + public AddApplicationMethodState AddApplication + { + get + { + return m_addApplicationMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addApplicationMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addApplicationMethod = value; + } + } + + /// + public RemoveApplicationMethodState RemoveApplication + { + get + { + return m_removeApplicationMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeApplicationMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeApplicationMethod = value; + } + } + + /// + public AddEndpointMethodState AddEndpoint + { + get + { + return m_addEndpointMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addEndpointMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addEndpointMethod = value; + } + } + + /// + public RemoveEndpointMethodState RemoveEndpoint + { + get + { + return m_removeEndpointMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeEndpointMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeEndpointMethod = 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_identities != null) + { + children.Add(m_identities); + } + + if (m_applications != null) + { + children.Add(m_applications); + } + + if (m_applicationsExclude != null) + { + children.Add(m_applicationsExclude); + } + + if (m_endpoints != null) + { + children.Add(m_endpoints); + } + + if (m_endpointsExclude != null) + { + children.Add(m_endpointsExclude); + } + + if (m_addIdentityMethod != null) + { + children.Add(m_addIdentityMethod); + } + + if (m_removeIdentityMethod != null) + { + children.Add(m_removeIdentityMethod); + } + + if (m_addApplicationMethod != null) + { + children.Add(m_addApplicationMethod); + } + + if (m_removeApplicationMethod != null) + { + children.Add(m_removeApplicationMethod); + } + + if (m_addEndpointMethod != null) + { + children.Add(m_addEndpointMethod); + } + + if (m_removeEndpointMethod != null) + { + children.Add(m_removeEndpointMethod); + } + + 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 Opc.Ua.BrowseNames.Identities: + { + if (createOrReplace) + { + if (Identities == null) + { + if (replacement == null) + { + Identities = new PropertyState(this); + } + else + { + Identities = (PropertyState)replacement; + } + } + } + + instance = Identities; + break; + } + + case Opc.Ua.BrowseNames.Applications: + { + if (createOrReplace) + { + if (Applications == null) + { + if (replacement == null) + { + Applications = new PropertyState(this); + } + else + { + Applications = (PropertyState)replacement; + } + } + } + + instance = Applications; + break; + } + + case Opc.Ua.BrowseNames.ApplicationsExclude: + { + if (createOrReplace) + { + if (ApplicationsExclude == null) + { + if (replacement == null) + { + ApplicationsExclude = new PropertyState(this); + } + else + { + ApplicationsExclude = (PropertyState)replacement; + } + } + } + + instance = ApplicationsExclude; + break; + } + + case Opc.Ua.BrowseNames.Endpoints: + { + if (createOrReplace) + { + if (Endpoints == null) + { + if (replacement == null) + { + Endpoints = new PropertyState(this); + } + else + { + Endpoints = (PropertyState)replacement; + } + } + } + + instance = Endpoints; + break; + } + + case Opc.Ua.BrowseNames.EndpointsExclude: + { + if (createOrReplace) + { + if (EndpointsExclude == null) + { + if (replacement == null) + { + EndpointsExclude = new PropertyState(this); + } + else + { + EndpointsExclude = (PropertyState)replacement; + } + } + } + + instance = EndpointsExclude; + break; + } + + case Opc.Ua.BrowseNames.AddIdentity: + { + if (createOrReplace) + { + if (AddIdentity == null) + { + if (replacement == null) + { + AddIdentity = new AddIdentityMethodState(this); + } + else + { + AddIdentity = (AddIdentityMethodState)replacement; + } + } + } + + instance = AddIdentity; + break; + } + + case Opc.Ua.BrowseNames.RemoveIdentity: + { + if (createOrReplace) + { + if (RemoveIdentity == null) + { + if (replacement == null) + { + RemoveIdentity = new RemoveIdentityMethodState(this); + } + else + { + RemoveIdentity = (RemoveIdentityMethodState)replacement; + } + } + } + + instance = RemoveIdentity; + break; + } + + case Opc.Ua.BrowseNames.AddApplication: + { + if (createOrReplace) + { + if (AddApplication == null) + { + if (replacement == null) + { + AddApplication = new AddApplicationMethodState(this); + } + else + { + AddApplication = (AddApplicationMethodState)replacement; + } + } + } + + instance = AddApplication; + break; + } + + case Opc.Ua.BrowseNames.RemoveApplication: + { + if (createOrReplace) + { + if (RemoveApplication == null) + { + if (replacement == null) + { + RemoveApplication = new RemoveApplicationMethodState(this); + } + else + { + RemoveApplication = (RemoveApplicationMethodState)replacement; + } + } + } + + instance = RemoveApplication; + break; + } + + case Opc.Ua.BrowseNames.AddEndpoint: + { + if (createOrReplace) + { + if (AddEndpoint == null) + { + if (replacement == null) + { + AddEndpoint = new AddEndpointMethodState(this); + } + else + { + AddEndpoint = (AddEndpointMethodState)replacement; + } + } + } + + instance = AddEndpoint; + break; + } + + case Opc.Ua.BrowseNames.RemoveEndpoint: + { + if (createOrReplace) + { + if (RemoveEndpoint == null) + { + if (replacement == null) + { + RemoveEndpoint = new RemoveEndpointMethodState(this); + } + else + { + RemoveEndpoint = (RemoveEndpointMethodState)replacement; + } + } + } + + instance = RemoveEndpoint; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_identities; + private PropertyState m_applications; + private PropertyState m_applicationsExclude; + private PropertyState m_endpoints; + private PropertyState m_endpointsExclude; + private AddIdentityMethodState m_addIdentityMethod; + private RemoveIdentityMethodState m_removeIdentityMethod; + private AddApplicationMethodState m_addApplicationMethod; + private RemoveApplicationMethodState m_removeApplicationMethod; + private AddEndpointMethodState m_addEndpointMethod; + private RemoveEndpointMethodState m_removeEndpointMethod; + #endregion + } + #endif + #endregion + + #region AddIdentityMethodState Class + #if (!OPCUA_EXCLUDE_AddIdentityMethodState) + /// + /// Stores an instance of the AddIdentityMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddIdentityMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddIdentityMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddIdentityMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFQAAAEFkZElkZW50aXR5TWV0aG9kVHlwZQEAFD0ALwEAFD0UPQAAAQH/" + + "////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBABU9AC4ARBU9AACWAQAAAAEAKgEBFQAA" + + "AAQAAABSdWxlAQASPf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddIdentityMethodStateMethodCallHandler 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; + + IdentityMappingRuleType rule = (IdentityMappingRuleType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + rule); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddIdentityMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + IdentityMappingRuleType rule); + #endif + #endregion + + #region RemoveIdentityMethodState Class + #if (!OPCUA_EXCLUDE_RemoveIdentityMethodState) + /// + /// Stores an instance of the RemoveIdentityMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveIdentityMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveIdentityMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveIdentityMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAFJlbW92ZUlkZW50aXR5TWV0aG9kVHlwZQEAFj0ALwEAFj0WPQAA" + + "AQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBABc9AC4ARBc9AACWAQAAAAEAKgEB" + + "FQAAAAQAAABSdWxlAQASPf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveIdentityMethodStateMethodCallHandler 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; + + IdentityMappingRuleType rule = (IdentityMappingRuleType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + rule); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveIdentityMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + IdentityMappingRuleType rule); + #endif + #endregion + + #region AddApplicationMethodState Class + #if (!OPCUA_EXCLUDE_AddApplicationMethodState) + /// + /// Stores an instance of the AddApplicationMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddApplicationMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddApplicationMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddApplicationMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAEFkZEFwcGxpY2F0aW9uTWV0aG9kVHlwZQEAOD8ALwEAOD84PwAA" + + "AQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADk/AC4ARDk/AACWAQAAAAEAKgEB" + + "HQAAAA4AAABBcHBsaWNhdGlvblVyaQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddApplicationMethodStateMethodCallHandler 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; + + string applicationUri = (string)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationUri); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddApplicationMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string applicationUri); + #endif + #endregion + + #region RemoveApplicationMethodState Class + #if (!OPCUA_EXCLUDE_RemoveApplicationMethodState) + /// + /// Stores an instance of the RemoveApplicationMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveApplicationMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveApplicationMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveApplicationMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGwAAAFJlbW92ZUFwcGxpY2F0aW9uTWV0aG9kVHlwZQEAOj8ALwEAOj86" + + "PwAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADs/AC4ARDs/AACWAQAAAAEA" + + "KgEBHQAAAA4AAABBcHBsaWNhdGlvblVyaQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveApplicationMethodStateMethodCallHandler 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; + + string applicationUri = (string)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + applicationUri); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveApplicationMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string applicationUri); + #endif + #endregion + + #region AddEndpointMethodState Class + #if (!OPCUA_EXCLUDE_AddEndpointMethodState) + /// + /// Stores an instance of the AddEndpointMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddEndpointMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddEndpointMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddEndpointMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFQAAAEFkZEVuZHBvaW50TWV0aG9kVHlwZQEAPD8ALwEAPD88PwAAAQH/" + + "////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAD0/AC4ARD0/AACWAQAAAAEAKgEBGQAA" + + "AAgAAABFbmRwb2ludAEAqDz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddEndpointMethodStateMethodCallHandler 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; + + EndpointType endpoint = (EndpointType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + endpoint); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddEndpointMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + EndpointType endpoint); + #endif + #endregion + + #region RemoveEndpointMethodState Class + #if (!OPCUA_EXCLUDE_RemoveEndpointMethodState) + /// + /// Stores an instance of the RemoveEndpointMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveEndpointMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveEndpointMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveEndpointMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAFJlbW92ZUVuZHBvaW50TWV0aG9kVHlwZQEAPj8ALwEAPj8+PwAA" + + "AQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAD8/AC4ARD8/AACWAQAAAAEAKgEB" + + "GQAAAAgAAABFbmRwb2ludAEAqDz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveEndpointMethodStateMethodCallHandler 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; + + EndpointType endpoint = (EndpointType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + endpoint); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveEndpointMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + EndpointType endpoint); + #endif + #endregion + + #region RoleMappingRuleChangedAuditEventState Class + #if (!OPCUA_EXCLUDE_RoleMappingRuleChangedAuditEventState) + /// + /// Stores an instance of the RoleMappingRuleChangedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RoleMappingRuleChangedAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RoleMappingRuleChangedAuditEventState(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(Opc.Ua.ObjectTypes.RoleMappingRuleChangedAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALAAAAFJvbGVNYXBwaW5nUnVsZUNoYW5nZWRBdWRpdEV2ZW50VHlwZUlu" + + "c3RhbmNlAQDpRAEA6UTpRAAA/////w8AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAOpEAC4AROpEAAAA" + + "D/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAOtEAC4AROtEAAAAEf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQDsRAAuAETsRAAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTmFtZQEA7UQALgBE7UQAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BAAAAFRpbWUBAO5EAC4ARO5EAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVU" + + "aW1lAQDvRAAuAETvRAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDxRAAu" + + "AETxRAAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAPJEAC4ARPJEAAAABf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAPNEAC4ARPNEAAABACYB////" + + "/wEB/////wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEA9EQALgBE9EQAAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAFNlcnZlcklkAQD1RAAuAET1RAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAS" + + "AAAAQ2xpZW50QXVkaXRFbnRyeUlkAQD2RAAuAET2RAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAM" + + "AAAAQ2xpZW50VXNlcklkAQD3RAAuAET3RAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0" + + "aG9kSWQBAPhEAC4ARPhEAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEA+UQALgBE+UQAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DictionaryEntryState Class + #if (!OPCUA_EXCLUDE_DictionaryEntryState) + /// + /// Stores an instance of the DictionaryEntryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DictionaryEntryState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DictionaryEntryState(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(Opc.Ua.ObjectTypes.DictionaryEntryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGwAAAERpY3Rpb25hcnlFbnRyeVR5cGVJbnN0YW5jZQEAtUQBALVEtUQA" + + "AP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DictionaryFolderState Class + #if (!OPCUA_EXCLUDE_DictionaryFolderState) + /// + /// Stores an instance of the DictionaryFolderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DictionaryFolderState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DictionaryFolderState(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(Opc.Ua.ObjectTypes.DictionaryFolderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHAAAAERpY3Rpb25hcnlGb2xkZXJUeXBlSW5zdGFuY2UBALdEAQC3RLdE" + + "AAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region IrdiDictionaryEntryState Class + #if (!OPCUA_EXCLUDE_IrdiDictionaryEntryState) + /// + /// Stores an instance of the IrdiDictionaryEntryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class IrdiDictionaryEntryState : DictionaryEntryState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public IrdiDictionaryEntryState(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(Opc.Ua.ObjectTypes.IrdiDictionaryEntryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAElyZGlEaWN0aW9uYXJ5RW50cnlUeXBlSW5zdGFuY2UBAL5EAQC+" + + "RL5EAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region UriDictionaryEntryState Class + #if (!OPCUA_EXCLUDE_UriDictionaryEntryState) + /// + /// Stores an instance of the UriDictionaryEntryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UriDictionaryEntryState : DictionaryEntryState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UriDictionaryEntryState(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(Opc.Ua.ObjectTypes.UriDictionaryEntryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHgAAAFVyaURpY3Rpb25hcnlFbnRyeVR5cGVJbnN0YW5jZQEAwEQBAMBE" + + "wEQAAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region BaseInterfaceState Class + #if (!OPCUA_EXCLUDE_BaseInterfaceState) + /// + /// Stores an instance of the BaseInterfaceType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BaseInterfaceState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BaseInterfaceState(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(Opc.Ua.ObjectTypes.BaseInterfaceType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGQAAAEJhc2VJbnRlcmZhY2VUeXBlSW5zdGFuY2UBAMJEAQDCRMJEAAD/" + + "////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region IOrderedObjectState Class + #if (!OPCUA_EXCLUDE_IOrderedObjectState) + /// + /// Stores an instance of the IOrderedObjectType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class IOrderedObjectState : BaseInterfaceState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public IOrderedObjectState(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(Opc.Ua.ObjectTypes.IOrderedObjectType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGgAAAElPcmRlcmVkT2JqZWN0VHlwZUluc3RhbmNlAQDZWwEA2VvZWwAA" + + "/////wEAAAAVYIkKAgAAAAAADAAAAE51bWJlckluTGlzdAEA3VsALgBE3VsAAAAa/////wEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NumberInList + { + get + { + return m_numberInList; + } + + set + { + if (!Object.ReferenceEquals(m_numberInList, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_numberInList = 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_numberInList != null) + { + children.Add(m_numberInList); + } + + 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 Opc.Ua.BrowseNames.NumberInList: + { + if (createOrReplace) + { + if (NumberInList == null) + { + if (replacement == null) + { + NumberInList = new PropertyState(this); + } + else + { + NumberInList = (PropertyState)replacement; + } + } + } + + instance = NumberInList; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_numberInList; + #endregion + } + #endif + #endregion + + #region OrderedListState Class + #if (!OPCUA_EXCLUDE_OrderedListState) + /// + /// Stores an instance of the OrderedListType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OrderedListState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OrderedListState(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(Opc.Ua.ObjectTypes.OrderedListType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (NodeVersion != null) + { + NodeVersion.Initialize(context, NodeVersion_InitializationString); + } + } + + #region Initialization String + private const string NodeVersion_InitializationString = + "//////////8VYIkKAgAAAAAACwAAAE5vZGVWZXJzaW9uAQDlWwAuAETlWwAAAAz/////AQH/////AAAA" + + "AA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFwAAAE9yZGVyZWRMaXN0VHlwZUluc3RhbmNlAQDeWwEA3lveWwAAAQAA" + + "AAApAAEAVQgBAAAAFWCJCgIAAAAAAAsAAABOb2RlVmVyc2lvbgEA5VsALgBE5VsAAAAM/////wEB////" + + "/wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NodeVersion + { + get + { + return m_nodeVersion; + } + + set + { + if (!Object.ReferenceEquals(m_nodeVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_nodeVersion = 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_nodeVersion != null) + { + children.Add(m_nodeVersion); + } + + 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 Opc.Ua.BrowseNames.NodeVersion: + { + if (createOrReplace) + { + if (NodeVersion == null) + { + if (replacement == null) + { + NodeVersion = new PropertyState(this); + } + else + { + NodeVersion = (PropertyState)replacement; + } + } + } + + instance = NodeVersion; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_nodeVersion; + #endregion + } + #endif + #endregion + + #region DataItemState Class + #if (!OPCUA_EXCLUDE_DataItemState) + /// + /// Stores an instance of the DataItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataItemState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataItemState(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(Opc.Ua.VariableTypes.DataItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.Any; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (Definition != null) + { + Definition.Initialize(context, Definition_InitializationString); + } + + if (ValuePrecision != null) + { + ValuePrecision.Initialize(context, ValuePrecision_InitializationString); + } + } + + #region Initialization String + private const string Definition_InitializationString = + "//////////8VYIkKAgAAAAAACgAAAERlZmluaXRpb24BAD4JAC4ARD4JAAAADP////8BAf////8AAAAA"; + + private const string ValuePrecision_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAFZhbHVlUHJlY2lzaW9uAQA/CQAuAEQ/CQAAAAv/////AQH/////" + + "AAAAAA=="; + + private const string InitializationString = + "//////////8VYIECAgAAAAAAFAAAAERhdGFJdGVtVHlwZUluc3RhbmNlAQA9CQEAPQk9CQAAABgBAf//" + + "//8CAAAAFWCJCgIAAAAAAAoAAABEZWZpbml0aW9uAQA+CQAuAEQ+CQAAAAz/////AQH/////AAAAABVg" + + "iQoCAAAAAAAOAAAAVmFsdWVQcmVjaXNpb24BAD8JAC4ARD8JAAAAC/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Definition + { + get + { + return m_definition; + } + + set + { + if (!Object.ReferenceEquals(m_definition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_definition = value; + } + } + + /// + public PropertyState ValuePrecision + { + get + { + return m_valuePrecision; + } + + set + { + if (!Object.ReferenceEquals(m_valuePrecision, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_valuePrecision = 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_definition != null) + { + children.Add(m_definition); + } + + if (m_valuePrecision != null) + { + children.Add(m_valuePrecision); + } + + 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 Opc.Ua.BrowseNames.Definition: + { + if (createOrReplace) + { + if (Definition == null) + { + if (replacement == null) + { + Definition = new PropertyState(this); + } + else + { + Definition = (PropertyState)replacement; + } + } + } + + instance = Definition; + break; + } + + case Opc.Ua.BrowseNames.ValuePrecision: + { + if (createOrReplace) + { + if (ValuePrecision == null) + { + if (replacement == null) + { + ValuePrecision = new PropertyState(this); + } + else + { + ValuePrecision = (PropertyState)replacement; + } + } + } + + instance = ValuePrecision; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_definition; + private PropertyState m_valuePrecision; + #endregion + } + + #region DataItemState Class + /// + /// A typed version of the DataItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class DataItemState : DataItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public DataItemState(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 BaseAnalogState Class + #if (!OPCUA_EXCLUDE_BaseAnalogState) + /// + /// Stores an instance of the BaseAnalogType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BaseAnalogState : DataItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BaseAnalogState(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(Opc.Ua.VariableTypes.BaseAnalogType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (InstrumentRange != null) + { + InstrumentRange.Initialize(context, InstrumentRange_InitializationString); + } + + if (EURange != null) + { + EURange.Initialize(context, EURange_InitializationString); + } + + if (EngineeringUnits != null) + { + EngineeringUnits.Initialize(context, EngineeringUnits_InitializationString); + } + } + + #region Initialization String + private const string InstrumentRange_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAEluc3RydW1lbnRSYW5nZQEAn0QALgBEn0QAAAEAdAP/////AQH/" + + "////AAAAAA=="; + + private const string EURange_InitializationString = + "//////////8VYIkKAgAAAAAABwAAAEVVUmFuZ2UBAKBEAC4ARKBEAAABAHQD/////wEB/////wAAAAA="; + + private const string EngineeringUnits_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBAKFEAC4ARKFEAAABAHcD/////wEB" + + "/////wAAAAA="; + + private const string InitializationString = + "//////////8VYIECAgAAAAAAFgAAAEJhc2VBbmFsb2dUeXBlSW5zdGFuY2UBANY7AQDWO9Y7AAAAGgEB" + + "/////wMAAAAVYIkKAgAAAAAADwAAAEluc3RydW1lbnRSYW5nZQEAn0QALgBEn0QAAAEAdAP/////AQH/" + + "////AAAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEAoEQALgBEoEQAAAEAdAP/////AQH/////AAAAABVg" + + "iQoCAAAAAAAQAAAARW5naW5lZXJpbmdVbml0cwEAoUQALgBEoUQAAAEAdwP/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState InstrumentRange + { + get + { + return m_instrumentRange; + } + + set + { + if (!Object.ReferenceEquals(m_instrumentRange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_instrumentRange = value; + } + } + + /// + public PropertyState EURange + { + get + { + return m_eURange; + } + + set + { + if (!Object.ReferenceEquals(m_eURange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eURange = value; + } + } + + /// + public PropertyState EngineeringUnits + { + get + { + return m_engineeringUnits; + } + + set + { + if (!Object.ReferenceEquals(m_engineeringUnits, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_engineeringUnits = 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_instrumentRange != null) + { + children.Add(m_instrumentRange); + } + + if (m_eURange != null) + { + children.Add(m_eURange); + } + + if (m_engineeringUnits != null) + { + children.Add(m_engineeringUnits); + } + + 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 Opc.Ua.BrowseNames.InstrumentRange: + { + if (createOrReplace) + { + if (InstrumentRange == null) + { + if (replacement == null) + { + InstrumentRange = new PropertyState(this); + } + else + { + InstrumentRange = (PropertyState)replacement; + } + } + } + + instance = InstrumentRange; + break; + } + + case Opc.Ua.BrowseNames.EURange: + { + if (createOrReplace) + { + if (EURange == null) + { + if (replacement == null) + { + EURange = new PropertyState(this); + } + else + { + EURange = (PropertyState)replacement; + } + } + } + + instance = EURange; + break; + } + + case Opc.Ua.BrowseNames.EngineeringUnits: + { + if (createOrReplace) + { + if (EngineeringUnits == null) + { + if (replacement == null) + { + EngineeringUnits = new PropertyState(this); + } + else + { + EngineeringUnits = (PropertyState)replacement; + } + } + } + + instance = EngineeringUnits; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_instrumentRange; + private PropertyState m_eURange; + private PropertyState m_engineeringUnits; + #endregion + } + + #region BaseAnalogState Class + /// + /// A typed version of the BaseAnalogType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class BaseAnalogState : BaseAnalogState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public BaseAnalogState(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 AnalogItemState Class + #if (!OPCUA_EXCLUDE_AnalogItemState) + /// + /// Stores an instance of the AnalogItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AnalogItemState : BaseAnalogState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AnalogItemState(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(Opc.Ua.VariableTypes.AnalogItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAFgAAAEFuYWxvZ0l0ZW1UeXBlSW5zdGFuY2UBAEAJAQBACUAJAAAAGgEB" + + "/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAEEJAC4AREEJAAABAHQD/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region AnalogItemState Class + /// + /// A typed version of the AnalogItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class AnalogItemState : AnalogItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public AnalogItemState(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 AnalogUnitState Class + #if (!OPCUA_EXCLUDE_AnalogUnitState) + /// + /// Stores an instance of the AnalogUnitType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AnalogUnitState : BaseAnalogState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AnalogUnitState(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(Opc.Ua.VariableTypes.AnalogUnitType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAFgAAAEFuYWxvZ1VuaXRUeXBlSW5zdGFuY2UBAFlEAQBZRFlEAAAAGgEB" + + "/////wEAAAAVYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBAF5EAC4ARF5EAAABAHcD/////wEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region AnalogUnitState Class + /// + /// A typed version of the AnalogUnitType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class AnalogUnitState : AnalogUnitState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public AnalogUnitState(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 AnalogUnitRangeState Class + #if (!OPCUA_EXCLUDE_AnalogUnitRangeState) + /// + /// Stores an instance of the AnalogUnitRangeType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AnalogUnitRangeState : AnalogItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AnalogUnitRangeState(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(Opc.Ua.VariableTypes.AnalogUnitRangeType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAGwAAAEFuYWxvZ1VuaXRSYW5nZVR5cGVJbnN0YW5jZQEAokQBAKJEokQA" + + "AAAaAQH/////AgAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEApkQALgBEpkQAAAEAdAP/////AQH/////" + + "AAAAABVgiQoCAAAAAAAQAAAARW5naW5lZXJpbmdVbml0cwEAp0QALgBEp0QAAAEAdwP/////AQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region AnalogUnitRangeState Class + /// + /// A typed version of the AnalogUnitRangeType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class AnalogUnitRangeState : AnalogUnitRangeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public AnalogUnitRangeState(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 DiscreteItemState Class + #if (!OPCUA_EXCLUDE_DiscreteItemState) + /// + /// Stores an instance of the DiscreteItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DiscreteItemState : DataItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DiscreteItemState(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(Opc.Ua.VariableTypes.DiscreteItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAGAAAAERpc2NyZXRlSXRlbVR5cGVJbnN0YW5jZQEARAkBAEQJRAkAAAAY" + + "AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region DiscreteItemState Class + /// + /// A typed version of the DiscreteItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class DiscreteItemState : DiscreteItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public DiscreteItemState(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 TwoStateDiscreteState Class + #if (!OPCUA_EXCLUDE_TwoStateDiscreteState) + /// + /// Stores an instance of the TwoStateDiscreteType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TwoStateDiscreteState : DiscreteItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TwoStateDiscreteState(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(Opc.Ua.VariableTypes.TwoStateDiscreteType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Boolean, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAHAAAAFR3b1N0YXRlRGlzY3JldGVUeXBlSW5zdGFuY2UBAEUJAQBFCUUJ" + + "AAAAAQEB/////wIAAAAVYIkKAgAAAAAACgAAAEZhbHNlU3RhdGUBAEYJAC4AREYJAAAAFf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABUcnVlU3RhdGUBAEcJAC4AREcJAAAAFf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState FalseState + { + get + { + return m_falseState; + } + + set + { + if (!Object.ReferenceEquals(m_falseState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_falseState = value; + } + } + + /// + public PropertyState TrueState + { + get + { + return m_trueState; + } + + set + { + if (!Object.ReferenceEquals(m_trueState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_trueState = 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_falseState != null) + { + children.Add(m_falseState); + } + + if (m_trueState != null) + { + children.Add(m_trueState); + } + + 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 Opc.Ua.BrowseNames.FalseState: + { + if (createOrReplace) + { + if (FalseState == null) + { + if (replacement == null) + { + FalseState = new PropertyState(this); + } + else + { + FalseState = (PropertyState)replacement; + } + } + } + + instance = FalseState; + break; + } + + case Opc.Ua.BrowseNames.TrueState: + { + if (createOrReplace) + { + if (TrueState == null) + { + if (replacement == null) + { + TrueState = new PropertyState(this); + } + else + { + TrueState = (PropertyState)replacement; + } + } + } + + instance = TrueState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_falseState; + private PropertyState m_trueState; + #endregion + } + #endif + #endregion + + #region MultiStateDiscreteState Class + #if (!OPCUA_EXCLUDE_MultiStateDiscreteState) + /// + /// Stores an instance of the MultiStateDiscreteType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class MultiStateDiscreteState : DiscreteItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public MultiStateDiscreteState(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(Opc.Ua.VariableTypes.MultiStateDiscreteType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.UInteger, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAHgAAAE11bHRpU3RhdGVEaXNjcmV0ZVR5cGVJbnN0YW5jZQEASAkBAEgJ" + + "SAkAAAAcAQH/////AQAAABdgiQoCAAAAAAALAAAARW51bVN0cmluZ3MBAEkJAC4AREkJAAAAFQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region MultiStateDiscreteState Class + /// + /// A typed version of the MultiStateDiscreteType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class MultiStateDiscreteState : MultiStateDiscreteState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public MultiStateDiscreteState(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 MultiStateValueDiscreteState Class + #if (!OPCUA_EXCLUDE_MultiStateValueDiscreteState) + /// + /// Stores an instance of the MultiStateValueDiscreteType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class MultiStateValueDiscreteState : DiscreteItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public MultiStateValueDiscreteState(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(Opc.Ua.VariableTypes.MultiStateValueDiscreteType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.Any; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8VYIECAgAAAAAAIwAAAE11bHRpU3RhdGVWYWx1ZURpc2NyZXRlVHlwZUluc3RhbmNlAQDm" + + "KwEA5ivmKwAAABoBAf////8CAAAAF2CJCgIAAAAAAAoAAABFbnVtVmFsdWVzAQDpKwAuAETpKwAAAQCq" + + "HQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAFZhbHVlQXNUZXh0AQDFLAAuAETFLAAA" + + "ABX/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EnumValues + { + get + { + return m_enumValues; + } + + set + { + if (!Object.ReferenceEquals(m_enumValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enumValues = value; + } + } + + /// + public PropertyState ValueAsText + { + get + { + return m_valueAsText; + } + + set + { + if (!Object.ReferenceEquals(m_valueAsText, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_valueAsText = 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_enumValues != null) + { + children.Add(m_enumValues); + } + + if (m_valueAsText != null) + { + children.Add(m_valueAsText); + } + + 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 Opc.Ua.BrowseNames.EnumValues: + { + if (createOrReplace) + { + if (EnumValues == null) + { + if (replacement == null) + { + EnumValues = new PropertyState(this); + } + else + { + EnumValues = (PropertyState)replacement; + } + } + } + + instance = EnumValues; + break; + } + + case Opc.Ua.BrowseNames.ValueAsText: + { + if (createOrReplace) + { + if (ValueAsText == null) + { + if (replacement == null) + { + ValueAsText = new PropertyState(this); + } + else + { + ValueAsText = (PropertyState)replacement; + } + } + } + + instance = ValueAsText; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_enumValues; + private PropertyState m_valueAsText; + #endregion + } + + #region MultiStateValueDiscreteState Class + /// + /// A typed version of the MultiStateValueDiscreteType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class MultiStateValueDiscreteState : MultiStateValueDiscreteState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public MultiStateValueDiscreteState(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 ArrayItemState Class + #if (!OPCUA_EXCLUDE_ArrayItemState) + /// + /// Stores an instance of the ArrayItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ArrayItemState : DataItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ArrayItemState(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(Opc.Ua.VariableTypes.ArrayItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.OneOrMoreDimensions; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (InstrumentRange != null) + { + InstrumentRange.Initialize(context, InstrumentRange_InitializationString); + } + } + + #region Initialization String + private const string InstrumentRange_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAEluc3RydW1lbnRSYW5nZQEA+C4ALgBE+C4AAAEAdAP/////AQH/" + + "////AAAAAA=="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAFQAAAEFycmF5SXRlbVR5cGVJbnN0YW5jZQEA9S4BAPUu9S4AAAAYAAAA" + + "AAEB/////wUAAAAVYIkKAgAAAAAADwAAAEluc3RydW1lbnRSYW5nZQEA+C4ALgBE+C4AAAEAdAP/////" + + "AQH/////AAAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEA+S4ALgBE+S4AAAEAdAP/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAQAAAARW5naW5lZXJpbmdVbml0cwEA+i4ALgBE+i4AAAEAdwP/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAFAAAAVGl0bGUBAPsuAC4ARPsuAAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAA0A" + + "AABBeGlzU2NhbGVUeXBlAQD8LgAuAET8LgAAAQAtL/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState InstrumentRange + { + get + { + return m_instrumentRange; + } + + set + { + if (!Object.ReferenceEquals(m_instrumentRange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_instrumentRange = value; + } + } + + /// + public PropertyState EURange + { + get + { + return m_eURange; + } + + set + { + if (!Object.ReferenceEquals(m_eURange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eURange = value; + } + } + + /// + public PropertyState EngineeringUnits + { + get + { + return m_engineeringUnits; + } + + set + { + if (!Object.ReferenceEquals(m_engineeringUnits, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_engineeringUnits = value; + } + } + + /// + public PropertyState Title + { + get + { + return m_title; + } + + set + { + if (!Object.ReferenceEquals(m_title, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_title = value; + } + } + + /// + public PropertyState AxisScaleType + { + get + { + return m_axisScaleType; + } + + set + { + if (!Object.ReferenceEquals(m_axisScaleType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_axisScaleType = 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_instrumentRange != null) + { + children.Add(m_instrumentRange); + } + + if (m_eURange != null) + { + children.Add(m_eURange); + } + + if (m_engineeringUnits != null) + { + children.Add(m_engineeringUnits); + } + + if (m_title != null) + { + children.Add(m_title); + } + + if (m_axisScaleType != null) + { + children.Add(m_axisScaleType); + } + + 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 Opc.Ua.BrowseNames.InstrumentRange: + { + if (createOrReplace) + { + if (InstrumentRange == null) + { + if (replacement == null) + { + InstrumentRange = new PropertyState(this); + } + else + { + InstrumentRange = (PropertyState)replacement; + } + } + } + + instance = InstrumentRange; + break; + } + + case Opc.Ua.BrowseNames.EURange: + { + if (createOrReplace) + { + if (EURange == null) + { + if (replacement == null) + { + EURange = new PropertyState(this); + } + else + { + EURange = (PropertyState)replacement; + } + } + } + + instance = EURange; + break; + } + + case Opc.Ua.BrowseNames.EngineeringUnits: + { + if (createOrReplace) + { + if (EngineeringUnits == null) + { + if (replacement == null) + { + EngineeringUnits = new PropertyState(this); + } + else + { + EngineeringUnits = (PropertyState)replacement; + } + } + } + + instance = EngineeringUnits; + break; + } + + case Opc.Ua.BrowseNames.Title: + { + if (createOrReplace) + { + if (Title == null) + { + if (replacement == null) + { + Title = new PropertyState(this); + } + else + { + Title = (PropertyState)replacement; + } + } + } + + instance = Title; + break; + } + + case Opc.Ua.BrowseNames.AxisScaleType: + { + if (createOrReplace) + { + if (AxisScaleType == null) + { + if (replacement == null) + { + AxisScaleType = new PropertyState(this); + } + else + { + AxisScaleType = (PropertyState)replacement; + } + } + } + + instance = AxisScaleType; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_instrumentRange; + private PropertyState m_eURange; + private PropertyState m_engineeringUnits; + private PropertyState m_title; + private PropertyState m_axisScaleType; + #endregion + } + + #region ArrayItemState Class + /// + /// A typed version of the ArrayItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ArrayItemState : ArrayItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ArrayItemState(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 YArrayItemState Class + #if (!OPCUA_EXCLUDE_YArrayItemState) + /// + /// Stores an instance of the YArrayItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class YArrayItemState : ArrayItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public YArrayItemState(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(Opc.Ua.VariableTypes.YArrayItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.TwoDimensions; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAAFgAAAFlBcnJheUl0ZW1UeXBlSW5zdGFuY2UBAP0uAQD9Lv0uAAAAGAEA" + + "AAABAAAAAAAAAAEB/////wUAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAAEvAC4ARAEvAAABAHQD////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBAAIvAC4ARAIvAAABAHcD////" + + "/wEB/////wAAAAAVYIkKAgAAAAAABQAAAFRpdGxlAQADLwAuAEQDLwAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAANAAAAQXhpc1NjYWxlVHlwZQEABC8ALgBEBC8AAAEALS//////AQH/////AAAAABVgiQoC" + + "AAAAAAAPAAAAWEF4aXNEZWZpbml0aW9uAQAFLwAuAEQFLwAAAQAvL/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState XAxisDefinition + { + get + { + return m_xAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_xAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_xAxisDefinition = 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_xAxisDefinition != null) + { + children.Add(m_xAxisDefinition); + } + + 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 Opc.Ua.BrowseNames.XAxisDefinition: + { + if (createOrReplace) + { + if (XAxisDefinition == null) + { + if (replacement == null) + { + XAxisDefinition = new PropertyState(this); + } + else + { + XAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = XAxisDefinition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_xAxisDefinition; + #endregion + } + + #region YArrayItemState Class + /// + /// A typed version of the YArrayItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class YArrayItemState : YArrayItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public YArrayItemState(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 XYArrayItemState Class + #if (!OPCUA_EXCLUDE_XYArrayItemState) + /// + /// Stores an instance of the XYArrayItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class XYArrayItemState : ArrayItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public XYArrayItemState(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(Opc.Ua.VariableTypes.XYArrayItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.XVType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.TwoDimensions; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAAFwAAAFhZQXJyYXlJdGVtVHlwZUluc3RhbmNlAQAGLwEABi8GLwAAAQAw" + + "LwEAAAABAAAAAAAAAAEB/////wUAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAAovAC4ARAovAAABAHQD" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBAAsvAC4ARAsvAAABAHcD" + + "/////wEB/////wAAAAAVYIkKAgAAAAAABQAAAFRpdGxlAQAMLwAuAEQMLwAAABX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAANAAAAQXhpc1NjYWxlVHlwZQEADS8ALgBEDS8AAAEALS//////AQH/////AAAAABVg" + + "iQoCAAAAAAAPAAAAWEF4aXNEZWZpbml0aW9uAQAOLwAuAEQOLwAAAQAvL/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState XAxisDefinition + { + get + { + return m_xAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_xAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_xAxisDefinition = 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_xAxisDefinition != null) + { + children.Add(m_xAxisDefinition); + } + + 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 Opc.Ua.BrowseNames.XAxisDefinition: + { + if (createOrReplace) + { + if (XAxisDefinition == null) + { + if (replacement == null) + { + XAxisDefinition = new PropertyState(this); + } + else + { + XAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = XAxisDefinition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_xAxisDefinition; + #endregion + } + #endif + #endregion + + #region ImageItemState Class + #if (!OPCUA_EXCLUDE_ImageItemState) + /// + /// Stores an instance of the ImageItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ImageItemState : ArrayItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ImageItemState(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(Opc.Ua.VariableTypes.ImageItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return 3; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8XYIkCAgAAAAAAFQAAAEltYWdlSXRlbVR5cGVJbnN0YW5jZQEADy8BAA8vDy8AAAAYAgAA" + + "AAIAAAAAAAAAAAAAAAEB/////wYAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBABMvAC4ARBMvAAABAHQD" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBABQvAC4ARBQvAAABAHcD" + + "/////wEB/////wAAAAAVYIkKAgAAAAAABQAAAFRpdGxlAQAVLwAuAEQVLwAAABX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAANAAAAQXhpc1NjYWxlVHlwZQEAFi8ALgBEFi8AAAEALS//////AQH/////AAAAABVg" + + "iQoCAAAAAAAPAAAAWEF4aXNEZWZpbml0aW9uAQAXLwAuAEQXLwAAAQAvL/////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA8AAABZQXhpc0RlZmluaXRpb24BABgvAC4ARBgvAAABAC8v/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState XAxisDefinition + { + get + { + return m_xAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_xAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_xAxisDefinition = value; + } + } + + /// + public PropertyState YAxisDefinition + { + get + { + return m_yAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_yAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_yAxisDefinition = 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_xAxisDefinition != null) + { + children.Add(m_xAxisDefinition); + } + + if (m_yAxisDefinition != null) + { + children.Add(m_yAxisDefinition); + } + + 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 Opc.Ua.BrowseNames.XAxisDefinition: + { + if (createOrReplace) + { + if (XAxisDefinition == null) + { + if (replacement == null) + { + XAxisDefinition = new PropertyState(this); + } + else + { + XAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = XAxisDefinition; + break; + } + + case Opc.Ua.BrowseNames.YAxisDefinition: + { + if (createOrReplace) + { + if (YAxisDefinition == null) + { + if (replacement == null) + { + YAxisDefinition = new PropertyState(this); + } + else + { + YAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = YAxisDefinition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_xAxisDefinition; + private PropertyState m_yAxisDefinition; + #endregion + } + + #region ImageItemState Class + /// + /// A typed version of the ImageItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ImageItemState : ImageItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ImageItemState(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 CubeItemState Class + #if (!OPCUA_EXCLUDE_CubeItemState) + /// + /// Stores an instance of the CubeItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CubeItemState : ArrayItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CubeItemState(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(Opc.Ua.VariableTypes.CubeItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, 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) + { + 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 = + "//////////8XYIkCAgAAAAAAFAAAAEN1YmVJdGVtVHlwZUluc3RhbmNlAQAZLwEAGS8ZLwAAABgDAAAA" + + "AwAAAAAAAAAAAAAAAAAAAAEB/////wcAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAB0vAC4ARB0vAAAB" + + "AHQD/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBAB4vAC4ARB4vAAAB" + + "AHcD/////wEB/////wAAAAAVYIkKAgAAAAAABQAAAFRpdGxlAQAfLwAuAEQfLwAAABX/////AQH/////" + + "AAAAABVgiQoCAAAAAAANAAAAQXhpc1NjYWxlVHlwZQEAIC8ALgBEIC8AAAEALS//////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAWEF4aXNEZWZpbml0aW9uAQAhLwAuAEQhLwAAAQAvL/////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA8AAABZQXhpc0RlZmluaXRpb24BACIvAC4ARCIvAAABAC8v/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADwAAAFpBeGlzRGVmaW5pdGlvbgEAIy8ALgBEIy8AAAEALy//////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState XAxisDefinition + { + get + { + return m_xAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_xAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_xAxisDefinition = value; + } + } + + /// + public PropertyState YAxisDefinition + { + get + { + return m_yAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_yAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_yAxisDefinition = value; + } + } + + /// + public PropertyState ZAxisDefinition + { + get + { + return m_zAxisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_zAxisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_zAxisDefinition = 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_xAxisDefinition != null) + { + children.Add(m_xAxisDefinition); + } + + if (m_yAxisDefinition != null) + { + children.Add(m_yAxisDefinition); + } + + if (m_zAxisDefinition != null) + { + children.Add(m_zAxisDefinition); + } + + 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 Opc.Ua.BrowseNames.XAxisDefinition: + { + if (createOrReplace) + { + if (XAxisDefinition == null) + { + if (replacement == null) + { + XAxisDefinition = new PropertyState(this); + } + else + { + XAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = XAxisDefinition; + break; + } + + case Opc.Ua.BrowseNames.YAxisDefinition: + { + if (createOrReplace) + { + if (YAxisDefinition == null) + { + if (replacement == null) + { + YAxisDefinition = new PropertyState(this); + } + else + { + YAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = YAxisDefinition; + break; + } + + case Opc.Ua.BrowseNames.ZAxisDefinition: + { + if (createOrReplace) + { + if (ZAxisDefinition == null) + { + if (replacement == null) + { + ZAxisDefinition = new PropertyState(this); + } + else + { + ZAxisDefinition = (PropertyState)replacement; + } + } + } + + instance = ZAxisDefinition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_xAxisDefinition; + private PropertyState m_yAxisDefinition; + private PropertyState m_zAxisDefinition; + #endregion + } + + #region CubeItemState Class + /// + /// A typed version of the CubeItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class CubeItemState : CubeItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public CubeItemState(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 NDimensionArrayItemState Class + #if (!OPCUA_EXCLUDE_NDimensionArrayItemState) + /// + /// Stores an instance of the NDimensionArrayItemType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NDimensionArrayItemState : ArrayItemState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NDimensionArrayItemState(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(Opc.Ua.VariableTypes.NDimensionArrayItemType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default value rank for the instance. + /// + protected override int GetDefaultValueRank() + { + return ValueRanks.OneOrMoreDimensions; + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8VYIkCAgAAAAAAHwAAAE5EaW1lbnNpb25BcnJheUl0ZW1UeXBlSW5zdGFuY2UBACQvAQAk" + + "LyQvAAAAGAAAAAABAf////8FAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQAoLwAuAEQoLwAAAQB0A///" + + "//8BAf////8AAAAAFWCJCgIAAAAAABAAAABFbmdpbmVlcmluZ1VuaXRzAQApLwAuAEQpLwAAAQB3A///" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAUAAABUaXRsZQEAKi8ALgBEKi8AAAAV/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADQAAAEF4aXNTY2FsZVR5cGUBACsvAC4ARCsvAAABAC0v/////wEB/////wAAAAAXYIkK" + + "AgAAAAAADgAAAEF4aXNEZWZpbml0aW9uAQAsLwAuAEQsLwAAAQAvLwEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState AxisDefinition + { + get + { + return m_axisDefinition; + } + + set + { + if (!Object.ReferenceEquals(m_axisDefinition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_axisDefinition = 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_axisDefinition != null) + { + children.Add(m_axisDefinition); + } + + 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 Opc.Ua.BrowseNames.AxisDefinition: + { + if (createOrReplace) + { + if (AxisDefinition == null) + { + if (replacement == null) + { + AxisDefinition = new PropertyState(this); + } + else + { + AxisDefinition = (PropertyState)replacement; + } + } + } + + instance = AxisDefinition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_axisDefinition; + #endregion + } + + #region NDimensionArrayItemState Class + /// + /// A typed version of the NDimensionArrayItemType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class NDimensionArrayItemState : NDimensionArrayItemState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public NDimensionArrayItemState(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 TwoStateVariableState Class + #if (!OPCUA_EXCLUDE_TwoStateVariableState) + /// + /// Stores an instance of the TwoStateVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TwoStateVariableState : StateVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TwoStateVariableState(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(Opc.Ua.VariableTypes.TwoStateVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.LocalizedText, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (TransitionTime != null) + { + TransitionTime.Initialize(context, TransitionTime_InitializationString); + } + + if (EffectiveTransitionTime != null) + { + EffectiveTransitionTime.Initialize(context, EffectiveTransitionTime_InitializationString); + } + + if (TrueState != null) + { + TrueState.Initialize(context, TrueState_InitializationString); + } + + if (FalseState != null) + { + FalseState.Initialize(context, FalseState_InitializationString); + } + } + + #region Initialization String + private const string TransitionTime_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQAoIwAuAEQoIwAAAQAmAf////8BAf//" + + "//8AAAAA"; + + private const string EffectiveTransitionTime_InitializationString = + "//////////8VYIkKAgAAAAAAFwAAAEVmZmVjdGl2ZVRyYW5zaXRpb25UaW1lAQApIwAuAEQpIwAAAQAm" + + "Af////8BAf////8AAAAA"; + + private const string TrueState_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAFRydWVTdGF0ZQEAZisALgBEZisAAAAV/////wEB/////wAAAAA="; + + private const string FalseState_InitializationString = + "//////////8VYIkKAgAAAAAACgAAAEZhbHNlU3RhdGUBAGcrAC4ARGcrAAAAFf////8BAf////8AAAAA"; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAHAAAAFR3b1N0YXRlVmFyaWFibGVUeXBlSW5zdGFuY2UBACMjAQAjIyMj" + + "AAAAFf////8BAf////8FAAAAFWCJCgIAAAAAAAIAAABJZAEAJCMALgBEJCMAAAAB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQAoIwAuAEQoIwAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABcAAABFZmZlY3RpdmVUcmFuc2l0aW9uVGltZQEAKSMALgBEKSMAAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQBmKwAuAERmKwAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEAZysALgBEZysAAAAV/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public new PropertyState Id + { + get { return (PropertyState)base.Id; } + set { base.Id = value; } + } + + /// + public PropertyState TransitionTime + { + get + { + return m_transitionTime; + } + + set + { + if (!Object.ReferenceEquals(m_transitionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transitionTime = value; + } + } + + /// + public PropertyState EffectiveTransitionTime + { + get + { + return m_effectiveTransitionTime; + } + + set + { + if (!Object.ReferenceEquals(m_effectiveTransitionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_effectiveTransitionTime = value; + } + } + + /// + public PropertyState TrueState + { + get + { + return m_trueState; + } + + set + { + if (!Object.ReferenceEquals(m_trueState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_trueState = value; + } + } + + /// + public PropertyState FalseState + { + get + { + return m_falseState; + } + + set + { + if (!Object.ReferenceEquals(m_falseState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_falseState = 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_transitionTime != null) + { + children.Add(m_transitionTime); + } + + if (m_effectiveTransitionTime != null) + { + children.Add(m_effectiveTransitionTime); + } + + if (m_trueState != null) + { + children.Add(m_trueState); + } + + if (m_falseState != null) + { + children.Add(m_falseState); + } + + 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 Opc.Ua.BrowseNames.Id: + { + if (createOrReplace) + { + if (Id == null) + { + if (replacement == null) + { + Id = new PropertyState(this); + } + else + { + Id = (PropertyState)replacement; + } + } + } + + instance = Id; + break; + } + + case Opc.Ua.BrowseNames.TransitionTime: + { + if (createOrReplace) + { + if (TransitionTime == null) + { + if (replacement == null) + { + TransitionTime = new PropertyState(this); + } + else + { + TransitionTime = (PropertyState)replacement; + } + } + } + + instance = TransitionTime; + break; + } + + case Opc.Ua.BrowseNames.EffectiveTransitionTime: + { + if (createOrReplace) + { + if (EffectiveTransitionTime == null) + { + if (replacement == null) + { + EffectiveTransitionTime = new PropertyState(this); + } + else + { + EffectiveTransitionTime = (PropertyState)replacement; + } + } + } + + instance = EffectiveTransitionTime; + break; + } + + case Opc.Ua.BrowseNames.TrueState: + { + if (createOrReplace) + { + if (TrueState == null) + { + if (replacement == null) + { + TrueState = new PropertyState(this); + } + else + { + TrueState = (PropertyState)replacement; + } + } + } + + instance = TrueState; + break; + } + + case Opc.Ua.BrowseNames.FalseState: + { + if (createOrReplace) + { + if (FalseState == null) + { + if (replacement == null) + { + FalseState = new PropertyState(this); + } + else + { + FalseState = (PropertyState)replacement; + } + } + } + + instance = FalseState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_transitionTime; + private PropertyState m_effectiveTransitionTime; + private PropertyState m_trueState; + private PropertyState m_falseState; + #endregion + } + #endif + #endregion + + #region ConditionVariableState Class + #if (!OPCUA_EXCLUDE_ConditionVariableState) + /// + /// Stores an instance of the ConditionVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ConditionVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ConditionVariableState(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(Opc.Ua.VariableTypes.ConditionVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIECAgAAAAAAHQAAAENvbmRpdGlvblZhcmlhYmxlVHlwZUluc3RhbmNlAQAqIwEAKiMq" + + "IwAAABgBAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXABACsjAC4ARCsjAAABACYB" + + "/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SourceTimestamp + { + get + { + return m_sourceTimestamp; + } + + set + { + if (!Object.ReferenceEquals(m_sourceTimestamp, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_sourceTimestamp = 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_sourceTimestamp != null) + { + children.Add(m_sourceTimestamp); + } + + 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 Opc.Ua.BrowseNames.SourceTimestamp: + { + if (createOrReplace) + { + if (SourceTimestamp == null) + { + if (replacement == null) + { + SourceTimestamp = new PropertyState(this); + } + else + { + SourceTimestamp = (PropertyState)replacement; + } + } + } + + instance = SourceTimestamp; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_sourceTimestamp; + #endregion + } + + #region ConditionVariableState Class + /// + /// A typed version of the ConditionVariableType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ConditionVariableState : ConditionVariableState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ConditionVariableState(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 ConditionState Class + #if (!OPCUA_EXCLUDE_ConditionState) + /// + /// Stores an instance of the ConditionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ConditionState : BaseEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ConditionState(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(Opc.Ua.ObjectTypes.ConditionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ConditionSubClassId != null) + { + ConditionSubClassId.Initialize(context, ConditionSubClassId_InitializationString); + } + + if (ConditionSubClassName != null) + { + ConditionSubClassName.Initialize(context, ConditionSubClassName_InitializationString); + } + } + + #region Initialization String + private const string ConditionSubClassId_InitializationString = + "//////////8XYIkKAgAAAAAAEwAAAENvbmRpdGlvblN1YkNsYXNzSWQBAOs/AC4AROs/AAAAEQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAA="; + + private const string ConditionSubClassName_InitializationString = + "//////////8XYIkKAgAAAAAAFQAAAENvbmRpdGlvblN1YkNsYXNzTmFtZQEA7D8ALgBE7D8AAAAVAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFQAAAENvbmRpdGlvblR5cGVJbnN0YW5jZQEA3goBAN4K3goAAP////8X" + + "AAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQAZDwAuAEQZDwAAAA//////AQH/////AAAAABVgiQoCAAAA" + + "AAAJAAAARXZlbnRUeXBlAQAaDwAuAEQaDwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTm9kZQEAGw8ALgBEGw8AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUB" + + "ABwPAC4ARBwPAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQAdDwAuAEQdDwAAAQAm" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAHg8ALgBEHg8AAAEAJgH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAIA8ALgBEIA8AAAAV/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAFNldmVyaXR5AQAhDwAuAEQhDwAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAAQ29uZGl0aW9uQ2xhc3NJZAEAaCsALgBEaCsAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENvbmRpdGlvbkNsYXNzTmFtZQEAaSsALgBEaSsAAAAV/////wEB/////wAAAAAXYIkKAgAAAAAAEwAA" + + "AENvbmRpdGlvblN1YkNsYXNzSWQBAOs/AC4AROs/AAAAEQEAAAABAAAAAAAAAAEB/////wAAAAAXYIkK" + + "AgAAAAAAFQAAAENvbmRpdGlvblN1YkNsYXNzTmFtZQEA7D8ALgBE7D8AAAAVAQAAAAEAAAAAAAAAAQH/" + + "////AAAAABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEAMSMALgBEMSMAAAAM/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACAAAAEJyYW5jaElkAQAyIwAuAEQyIwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAGAAAAUmV0YWluAQAiDwAuAEQiDwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxl" + + "ZFN0YXRlAQAzIwAvAQAjIzMjAAAAFf////8BAf////8GAAAAFWCJCgIAAAAAAAIAAABJZAEANCMALgBE" + + "NCMAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAAFAAAAEVmZmVjdGl2ZURpc3BsYXlOYW1lAQA3IwAu" + + "AEQ3IwAAABX/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAVHJhbnNpdGlvblRpbWUBADgjAC4ARDgj" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAAFwAAAEVmZmVjdGl2ZVRyYW5zaXRpb25UaW1lAQA5" + + "IwAuAEQ5IwAAAQAmAf////8BAf////8AAAAAFWCpCgIAAAAAAAkAAABUcnVlU3RhdGUBADojAC4ARDoj" + + "AAAVAwIAAABlbgcAAABFbmFibGVkABX/////AQH/////AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0" + + "ZQEAOyMALgBEOyMAABUDAgAAAGVuCAAAAERpc2FibGVkABX/////AQH/////AAAAABVgiQoCAAAAAAAH" + + "AAAAUXVhbGl0eQEAPCMALwEAKiM8IwAAABP/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNl" + + "VGltZXN0YW1wAQA9IwAuAEQ9IwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABMYXN0U2V2" + + "ZXJpdHkBAD4jAC8BACojPiMAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVz" + + "dGFtcAEAPyMALgBEPyMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29tbWVudAEAQCMA" + + "LwEAKiNAIwAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1wAQBBIwAu" + + "AERBIwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBAEIjAC4AREIj" + + "AAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQBEIwAvAQBEI0QjAAABAQEAAAAB" + + "APkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBAEMjAC8BAEMjQyMAAAEBAQAAAAEA+QsAAQDz" + + "CgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBAEUjAC8BAEUjRSMAAAEBAQAAAAEA+QsAAQANCwEA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBGIwAuAERGIwAAlgIAAAABACoBAUYAAAAHAAAA" + + "RXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNv" + + "bW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8g" + + "YWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ConditionClassId + { + get + { + return m_conditionClassId; + } + + set + { + if (!Object.ReferenceEquals(m_conditionClassId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionClassId = value; + } + } + + /// + public PropertyState ConditionClassName + { + get + { + return m_conditionClassName; + } + + set + { + if (!Object.ReferenceEquals(m_conditionClassName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionClassName = value; + } + } + + /// + public PropertyState ConditionSubClassId + { + get + { + return m_conditionSubClassId; + } + + set + { + if (!Object.ReferenceEquals(m_conditionSubClassId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionSubClassId = value; + } + } + + /// + public PropertyState ConditionSubClassName + { + get + { + return m_conditionSubClassName; + } + + set + { + if (!Object.ReferenceEquals(m_conditionSubClassName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionSubClassName = value; + } + } + + /// + public PropertyState ConditionName + { + get + { + return m_conditionName; + } + + set + { + if (!Object.ReferenceEquals(m_conditionName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionName = value; + } + } + + /// + public PropertyState BranchId + { + get + { + return m_branchId; + } + + set + { + if (!Object.ReferenceEquals(m_branchId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_branchId = value; + } + } + + /// + public PropertyState Retain + { + get + { + return m_retain; + } + + set + { + if (!Object.ReferenceEquals(m_retain, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_retain = value; + } + } + + /// + public TwoStateVariableState EnabledState + { + get + { + return m_enabledState; + } + + set + { + if (!Object.ReferenceEquals(m_enabledState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enabledState = value; + } + } + + /// + public ConditionVariableState Quality + { + get + { + return m_quality; + } + + set + { + if (!Object.ReferenceEquals(m_quality, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_quality = value; + } + } + + /// + public ConditionVariableState LastSeverity + { + get + { + return m_lastSeverity; + } + + set + { + if (!Object.ReferenceEquals(m_lastSeverity, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastSeverity = value; + } + } + + /// + public ConditionVariableState Comment + { + get + { + return m_comment; + } + + set + { + if (!Object.ReferenceEquals(m_comment, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_comment = value; + } + } + + /// + public PropertyState ClientUserId + { + get + { + return m_clientUserId; + } + + set + { + if (!Object.ReferenceEquals(m_clientUserId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_clientUserId = value; + } + } + + /// + public MethodState Disable + { + get + { + return m_disableMethod; + } + + set + { + if (!Object.ReferenceEquals(m_disableMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_disableMethod = value; + } + } + + /// + public MethodState Enable + { + get + { + return m_enableMethod; + } + + set + { + if (!Object.ReferenceEquals(m_enableMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enableMethod = value; + } + } + + /// + public AddCommentMethodState AddComment + { + get + { + return m_addCommentMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addCommentMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addCommentMethod = 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_conditionClassId != null) + { + children.Add(m_conditionClassId); + } + + if (m_conditionClassName != null) + { + children.Add(m_conditionClassName); + } + + if (m_conditionSubClassId != null) + { + children.Add(m_conditionSubClassId); + } + + if (m_conditionSubClassName != null) + { + children.Add(m_conditionSubClassName); + } + + if (m_conditionName != null) + { + children.Add(m_conditionName); + } + + if (m_branchId != null) + { + children.Add(m_branchId); + } + + if (m_retain != null) + { + children.Add(m_retain); + } + + if (m_enabledState != null) + { + children.Add(m_enabledState); + } + + if (m_quality != null) + { + children.Add(m_quality); + } + + if (m_lastSeverity != null) + { + children.Add(m_lastSeverity); + } + + if (m_comment != null) + { + children.Add(m_comment); + } + + if (m_clientUserId != null) + { + children.Add(m_clientUserId); + } + + if (m_disableMethod != null) + { + children.Add(m_disableMethod); + } + + if (m_enableMethod != null) + { + children.Add(m_enableMethod); + } + + if (m_addCommentMethod != null) + { + children.Add(m_addCommentMethod); + } + + 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 Opc.Ua.BrowseNames.ConditionClassId: + { + if (createOrReplace) + { + if (ConditionClassId == null) + { + if (replacement == null) + { + ConditionClassId = new PropertyState(this); + } + else + { + ConditionClassId = (PropertyState)replacement; + } + } + } + + instance = ConditionClassId; + break; + } + + case Opc.Ua.BrowseNames.ConditionClassName: + { + if (createOrReplace) + { + if (ConditionClassName == null) + { + if (replacement == null) + { + ConditionClassName = new PropertyState(this); + } + else + { + ConditionClassName = (PropertyState)replacement; + } + } + } + + instance = ConditionClassName; + break; + } + + case Opc.Ua.BrowseNames.ConditionSubClassId: + { + if (createOrReplace) + { + if (ConditionSubClassId == null) + { + if (replacement == null) + { + ConditionSubClassId = new PropertyState(this); + } + else + { + ConditionSubClassId = (PropertyState)replacement; + } + } + } + + instance = ConditionSubClassId; + break; + } + + case Opc.Ua.BrowseNames.ConditionSubClassName: + { + if (createOrReplace) + { + if (ConditionSubClassName == null) + { + if (replacement == null) + { + ConditionSubClassName = new PropertyState(this); + } + else + { + ConditionSubClassName = (PropertyState)replacement; + } + } + } + + instance = ConditionSubClassName; + break; + } + + case Opc.Ua.BrowseNames.ConditionName: + { + if (createOrReplace) + { + if (ConditionName == null) + { + if (replacement == null) + { + ConditionName = new PropertyState(this); + } + else + { + ConditionName = (PropertyState)replacement; + } + } + } + + instance = ConditionName; + break; + } + + case Opc.Ua.BrowseNames.BranchId: + { + if (createOrReplace) + { + if (BranchId == null) + { + if (replacement == null) + { + BranchId = new PropertyState(this); + } + else + { + BranchId = (PropertyState)replacement; + } + } + } + + instance = BranchId; + break; + } + + case Opc.Ua.BrowseNames.Retain: + { + if (createOrReplace) + { + if (Retain == null) + { + if (replacement == null) + { + Retain = new PropertyState(this); + } + else + { + Retain = (PropertyState)replacement; + } + } + } + + instance = Retain; + break; + } + + case Opc.Ua.BrowseNames.EnabledState: + { + if (createOrReplace) + { + if (EnabledState == null) + { + if (replacement == null) + { + EnabledState = new TwoStateVariableState(this); + } + else + { + EnabledState = (TwoStateVariableState)replacement; + } + } + } + + instance = EnabledState; + break; + } + + case Opc.Ua.BrowseNames.Quality: + { + if (createOrReplace) + { + if (Quality == null) + { + if (replacement == null) + { + Quality = new ConditionVariableState(this); + } + else + { + Quality = (ConditionVariableState)replacement; + } + } + } + + instance = Quality; + break; + } + + case Opc.Ua.BrowseNames.LastSeverity: + { + if (createOrReplace) + { + if (LastSeverity == null) + { + if (replacement == null) + { + LastSeverity = new ConditionVariableState(this); + } + else + { + LastSeverity = (ConditionVariableState)replacement; + } + } + } + + instance = LastSeverity; + break; + } + + case Opc.Ua.BrowseNames.Comment: + { + if (createOrReplace) + { + if (Comment == null) + { + if (replacement == null) + { + Comment = new ConditionVariableState(this); + } + else + { + Comment = (ConditionVariableState)replacement; + } + } + } + + instance = Comment; + break; + } + + case Opc.Ua.BrowseNames.ClientUserId: + { + if (createOrReplace) + { + if (ClientUserId == null) + { + if (replacement == null) + { + ClientUserId = new PropertyState(this); + } + else + { + ClientUserId = (PropertyState)replacement; + } + } + } + + instance = ClientUserId; + break; + } + + case Opc.Ua.BrowseNames.Disable: + { + if (createOrReplace) + { + if (Disable == null) + { + if (replacement == null) + { + Disable = new MethodState(this); + } + else + { + Disable = (MethodState)replacement; + } + } + } + + instance = Disable; + break; + } + + case Opc.Ua.BrowseNames.Enable: + { + if (createOrReplace) + { + if (Enable == null) + { + if (replacement == null) + { + Enable = new MethodState(this); + } + else + { + Enable = (MethodState)replacement; + } + } + } + + instance = Enable; + break; + } + + case Opc.Ua.BrowseNames.AddComment: + { + if (createOrReplace) + { + if (AddComment == null) + { + if (replacement == null) + { + AddComment = new AddCommentMethodState(this); + } + else + { + AddComment = (AddCommentMethodState)replacement; + } + } + } + + instance = AddComment; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_conditionClassId; + private PropertyState m_conditionClassName; + private PropertyState m_conditionSubClassId; + private PropertyState m_conditionSubClassName; + private PropertyState m_conditionName; + private PropertyState m_branchId; + private PropertyState m_retain; + private TwoStateVariableState m_enabledState; + private ConditionVariableState m_quality; + private ConditionVariableState m_lastSeverity; + private ConditionVariableState m_comment; + private PropertyState m_clientUserId; + private MethodState m_disableMethod; + private MethodState m_enableMethod; + private AddCommentMethodState m_addCommentMethod; + #endregion + } + #endif + #endregion + + #region ConditionRefresh2MethodState Class + #if (!OPCUA_EXCLUDE_ConditionRefresh2MethodState) + /// + /// Stores an instance of the ConditionRefresh2MethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ConditionRefresh2MethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ConditionRefresh2MethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new ConditionRefresh2MethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGwAAAENvbmRpdGlvblJlZnJlc2gyTWV0aG9kVHlwZQEAcjIALwEAcjJy" + + "MgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAHMyAC4ARHMyAACWAgAAAAEA" + + "KgEBVQAAAA4AAABTdWJzY3JpcHRpb25JZAEAIAH/////AAAAAAMAAAAALgAAAFRoZSBpZGVudGlmaWVy" + + "IGZvciB0aGUgc3VzY3JpcHRpb24gdG8gcmVmcmVzaC4BACoBAVkAAAAPAAAATW9uaXRvcmVkSXRlbUlk" + + "AQAgAf////8AAAAAAwAAAAAxAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBtb25pdG9yZWQgaXRlbSB0" + + "byByZWZyZXNoLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public ConditionRefresh2MethodStateMethodCallHandler 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; + + uint subscriptionId = (uint)_inputArguments[0]; + uint monitoredItemId = (uint)_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + subscriptionId, + monitoredItemId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult ConditionRefresh2MethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint subscriptionId, + uint monitoredItemId); + #endif + #endregion + + #region ConditionRefreshMethodState Class + #if (!OPCUA_EXCLUDE_ConditionRefreshMethodState) + /// + /// Stores an instance of the ConditionRefreshMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ConditionRefreshMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ConditionRefreshMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new ConditionRefreshMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGgAAAENvbmRpdGlvblJlZnJlc2hNZXRob2RUeXBlAQAvIwAvAQAvIy8j" + + "AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAMCMALgBEMCMAAJYBAAAAAQAq" + + "AQFVAAAADgAAAFN1YnNjcmlwdGlvbklkAQAgAf////8AAAAAAwAAAAAuAAAAVGhlIGlkZW50aWZpZXIg" + + "Zm9yIHRoZSBzdXNjcmlwdGlvbiB0byByZWZyZXNoLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public ConditionRefreshMethodStateMethodCallHandler 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; + + uint subscriptionId = (uint)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + subscriptionId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult ConditionRefreshMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint subscriptionId); + #endif + #endregion + + #region AddCommentMethodState Class + #if (!OPCUA_EXCLUDE_AddCommentMethodState) + /// + /// Stores an instance of the AddCommentMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddCommentMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddCommentMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddCommentMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFAAAAEFkZENvbW1lbnRNZXRob2RUeXBlAQAXDwAvAQAXDxcPAAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAGA8ALgBEGA8AAJYCAAAAAQAqAQFGAAAA" + + "BwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0" + + "byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50" + + "IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddCommentMethodStateMethodCallHandler 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; + + byte[] eventId = (byte[])_inputArguments[0]; + LocalizedText comment = (LocalizedText)_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + eventId, + comment); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddCommentMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + byte[] eventId, + LocalizedText comment); + #endif + #endregion + + #region DialogConditionState Class + #if (!OPCUA_EXCLUDE_DialogConditionState) + /// + /// Stores an instance of the DialogConditionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DialogConditionState : ConditionState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DialogConditionState(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(Opc.Ua.ObjectTypes.DialogConditionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGwAAAERpYWxvZ0NvbmRpdGlvblR5cGVJbnN0YW5jZQEADgsBAA4LDgsA" + + "AP////8dAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBcEAAuAERcEAAAAA//////AQH/////AAAAABVg" + + "iQoCAAAAAAAJAAAARXZlbnRUeXBlAQBdEAAuAERdEAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTm9kZQEAXhAALgBEXhAAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJj" + + "ZU5hbWUBAF8QAC4ARF8QAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQBgEAAuAERg" + + "EAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAYRAALgBEYRAAAAEA" + + "JgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAYxAALgBEYxAAAAAV/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBkEAAuAERkEAAAAAX/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAQ29uZGl0aW9uQ2xhc3NJZAEAaisALgBEaisAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAEgAAAENvbmRpdGlvbkNsYXNzTmFtZQEAaysALgBEaysAAAAV/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADQAAAENvbmRpdGlvbk5hbWUBAEkjAC4AREkjAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgA" + + "AABCcmFuY2hJZAEASiMALgBESiMAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAFJldGFpbgEA" + + "ZRAALgBEZRAAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAEVuYWJsZWRTdGF0ZQEASyMALwEA" + + "IyNLIwAAABX/////AQEBAAAAAQAsIwABAF8jAQAAABVgiQoCAAAAAAACAAAASWQBAEwjAC4AREwjAAAA" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABRdWFsaXR5AQBUIwAvAQAqI1QjAAAAE/////8BAf//" + + "//8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXABAFUjAC4ARFUjAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAADAAAAExhc3RTZXZlcml0eQEAViMALwEAKiNWIwAAAAX/////AQH/////AQAA" + + "ABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1wAQBXIwAuAERXIwAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAcAAABDb21tZW50AQBYIwAvAQAqI1gjAAAAFf////8BAf////8BAAAAFWCJCgIAAAAA" + + "AA8AAABTb3VyY2VUaW1lc3RhbXABAFkjAC4ARFkjAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DAAAAENsaWVudFVzZXJJZAEAWiMALgBEWiMAAAAM/////wEB/////wAAAAAEYYIKBAAAAAAABwAAAERp" + + "c2FibGUBAFwjAC8BAEQjXCMAAAEBAQAAAAEA+QsAAQDzCgAAAAAEYYIKBAAAAAAABgAAAEVuYWJsZQEA" + + "WyMALwEAQyNbIwAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAKAAAAQWRkQ29tbWVudAEAXSMA" + + "LwEARSNdIwAAAQEBAAAAAQD5CwABAA0LAQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAF4j" + + "AC4ARF4jAACWAgAAAAEAKgEBRgAAAAcAAABFdmVudElkAA//////AAAAAAMAAAAAKAAAAFRoZSBpZGVu" + + "dGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVudC4BACoBAUIAAAAHAAAAQ29tbWVudAAV/////wAA" + + "AAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQgdG8gdGhlIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABVgiQoCAAAAAAALAAAARGlhbG9nU3RhdGUBAF8jAC8BACMjXyMAAAAV/////wEB" + + "AQAAAAEALCMBAQBLIwQAAAAVYIkKAgAAAAAAAgAAAElkAQBgIwAuAERgIwAAAAH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAOAAAAVHJhbnNpdGlvblRpbWUBAGQjAC4ARGQjAAABACYB/////wEB/////wAAAAAV" + + "YKkKAgAAAAAACQAAAFRydWVTdGF0ZQEAZiMALgBEZiMAABUDAgAAAGVuBgAAAEFjdGl2ZQAV/////wEB" + + "/////wAAAAAVYKkKAgAAAAAACgAAAEZhbHNlU3RhdGUBAGcjAC4ARGcjAAAVAwIAAABlbggAAABJbmFj" + + "dGl2ZQAV/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAFByb21wdAEADwsALgBEDwsAAAAV/////wEB" + + "/////wAAAAAXYIkKAgAAAAAAEQAAAFJlc3BvbnNlT3B0aW9uU2V0AQBoIwAuAERoIwAAABUBAAAAAQAA" + + "AAAAAAABAf////8AAAAAFWCJCgIAAAAAAA8AAABEZWZhdWx0UmVzcG9uc2UBAGkjAC4ARGkjAAAABv//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAoAAABPa1Jlc3BvbnNlAQBqIwAuAERqIwAAAAb/////AQH/////" + + "AAAAABVgiQoCAAAAAAAOAAAAQ2FuY2VsUmVzcG9uc2UBAGsjAC4ARGsjAAAABv////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAwAAABMYXN0UmVzcG9uc2UBAGwjAC4ARGwjAAAABv////8BAf////8AAAAABGGCCgQA" + + "AAAAAAcAAABSZXNwb25kAQBtIwAvAQBtI20jAAABAQEAAAABAPkLAAEA3yIBAAAAF2CpCgIAAAAAAA4A" + + "AABJbnB1dEFyZ3VtZW50cwEAbiMALgBEbiMAAJYBAAAAAQAqAQFMAAAAEAAAAFNlbGVjdGVkUmVzcG9u" + + "c2UABv////8AAAAAAwAAAAAlAAAAVGhlIHJlc3BvbnNlIHRvIHRoZSBkaWFsb2cgY29uZGl0aW9uLgEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public TwoStateVariableState DialogState + { + get + { + return m_dialogState; + } + + set + { + if (!Object.ReferenceEquals(m_dialogState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dialogState = value; + } + } + + /// + public PropertyState Prompt + { + get + { + return m_prompt; + } + + set + { + if (!Object.ReferenceEquals(m_prompt, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_prompt = value; + } + } + + /// + public PropertyState ResponseOptionSet + { + get + { + return m_responseOptionSet; + } + + set + { + if (!Object.ReferenceEquals(m_responseOptionSet, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_responseOptionSet = value; + } + } + + /// + public PropertyState DefaultResponse + { + get + { + return m_defaultResponse; + } + + set + { + if (!Object.ReferenceEquals(m_defaultResponse, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultResponse = value; + } + } + + /// + public PropertyState OkResponse + { + get + { + return m_okResponse; + } + + set + { + if (!Object.ReferenceEquals(m_okResponse, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_okResponse = value; + } + } + + /// + public PropertyState CancelResponse + { + get + { + return m_cancelResponse; + } + + set + { + if (!Object.ReferenceEquals(m_cancelResponse, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_cancelResponse = value; + } + } + + /// + public PropertyState LastResponse + { + get + { + return m_lastResponse; + } + + set + { + if (!Object.ReferenceEquals(m_lastResponse, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastResponse = value; + } + } + + /// + public DialogResponseMethodState Respond + { + get + { + return m_respondMethod; + } + + set + { + if (!Object.ReferenceEquals(m_respondMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_respondMethod = 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_dialogState != null) + { + children.Add(m_dialogState); + } + + if (m_prompt != null) + { + children.Add(m_prompt); + } + + if (m_responseOptionSet != null) + { + children.Add(m_responseOptionSet); + } + + if (m_defaultResponse != null) + { + children.Add(m_defaultResponse); + } + + if (m_okResponse != null) + { + children.Add(m_okResponse); + } + + if (m_cancelResponse != null) + { + children.Add(m_cancelResponse); + } + + if (m_lastResponse != null) + { + children.Add(m_lastResponse); + } + + if (m_respondMethod != null) + { + children.Add(m_respondMethod); + } + + 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 Opc.Ua.BrowseNames.DialogState: + { + if (createOrReplace) + { + if (DialogState == null) + { + if (replacement == null) + { + DialogState = new TwoStateVariableState(this); + } + else + { + DialogState = (TwoStateVariableState)replacement; + } + } + } + + instance = DialogState; + break; + } + + case Opc.Ua.BrowseNames.Prompt: + { + if (createOrReplace) + { + if (Prompt == null) + { + if (replacement == null) + { + Prompt = new PropertyState(this); + } + else + { + Prompt = (PropertyState)replacement; + } + } + } + + instance = Prompt; + break; + } + + case Opc.Ua.BrowseNames.ResponseOptionSet: + { + if (createOrReplace) + { + if (ResponseOptionSet == null) + { + if (replacement == null) + { + ResponseOptionSet = new PropertyState(this); + } + else + { + ResponseOptionSet = (PropertyState)replacement; + } + } + } + + instance = ResponseOptionSet; + break; + } + + case Opc.Ua.BrowseNames.DefaultResponse: + { + if (createOrReplace) + { + if (DefaultResponse == null) + { + if (replacement == null) + { + DefaultResponse = new PropertyState(this); + } + else + { + DefaultResponse = (PropertyState)replacement; + } + } + } + + instance = DefaultResponse; + break; + } + + case Opc.Ua.BrowseNames.OkResponse: + { + if (createOrReplace) + { + if (OkResponse == null) + { + if (replacement == null) + { + OkResponse = new PropertyState(this); + } + else + { + OkResponse = (PropertyState)replacement; + } + } + } + + instance = OkResponse; + break; + } + + case Opc.Ua.BrowseNames.CancelResponse: + { + if (createOrReplace) + { + if (CancelResponse == null) + { + if (replacement == null) + { + CancelResponse = new PropertyState(this); + } + else + { + CancelResponse = (PropertyState)replacement; + } + } + } + + instance = CancelResponse; + break; + } + + case Opc.Ua.BrowseNames.LastResponse: + { + if (createOrReplace) + { + if (LastResponse == null) + { + if (replacement == null) + { + LastResponse = new PropertyState(this); + } + else + { + LastResponse = (PropertyState)replacement; + } + } + } + + instance = LastResponse; + break; + } + + case Opc.Ua.BrowseNames.Respond: + { + if (createOrReplace) + { + if (Respond == null) + { + if (replacement == null) + { + Respond = new DialogResponseMethodState(this); + } + else + { + Respond = (DialogResponseMethodState)replacement; + } + } + } + + instance = Respond; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private TwoStateVariableState m_dialogState; + private PropertyState m_prompt; + private PropertyState m_responseOptionSet; + private PropertyState m_defaultResponse; + private PropertyState m_okResponse; + private PropertyState m_cancelResponse; + private PropertyState m_lastResponse; + private DialogResponseMethodState m_respondMethod; + #endregion + } + #endif + #endregion + + #region DialogResponseMethodState Class + #if (!OPCUA_EXCLUDE_DialogResponseMethodState) + /// + /// Stores an instance of the DialogResponseMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DialogResponseMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DialogResponseMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new DialogResponseMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAERpYWxvZ1Jlc3BvbnNlTWV0aG9kVHlwZQEARyMALwEARyNHIwAA" + + "AQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAEgjAC4AREgjAACWAQAAAAEAKgEB" + + "TAAAABAAAABTZWxlY3RlZFJlc3BvbnNlAAb/////AAAAAAMAAAAAJQAAAFRoZSByZXNwb25zZSB0byB0" + + "aGUgZGlhbG9nIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public DialogResponseMethodStateMethodCallHandler 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 selectedResponse = (int)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + selectedResponse); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult DialogResponseMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + int selectedResponse); + #endif + #endregion + + #region AcknowledgeableConditionState Class + #if (!OPCUA_EXCLUDE_AcknowledgeableConditionState) + /// + /// Stores an instance of the AcknowledgeableConditionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AcknowledgeableConditionState : ConditionState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AcknowledgeableConditionState(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(Opc.Ua.ObjectTypes.AcknowledgeableConditionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ConfirmedState != null) + { + ConfirmedState.Initialize(context, ConfirmedState_InitializationString); + } + + if (Confirm != null) + { + Confirm.Initialize(context, Confirm_InitializationString); + } + } + + #region Initialization String + private const string ConfirmedState_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAENvbmZpcm1lZFN0YXRlAQCOIwAvAQAjI44jAAAAFf////8BAQEA" + + "AAABACwjAQEAcSMEAAAAFWCJCgIAAAAAAAIAAABJZAEAjyMALgBEjyMAAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQCTIwAuAESTIwAAAQAmAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAAkAAABUcnVlU3RhdGUBAJUjAC4ARJUjAAAVAwIAAABlbgkAAABDb25maXJtZWQAFf////8B" + + "Af////8AAAAAFWCpCgIAAAAAAAoAAABGYWxzZVN0YXRlAQCWIwAuAESWIwAAFQMCAAAAZW4LAAAAVW5j" + + "b25maXJtZWQAFf////8BAf////8AAAAA"; + + private const string Confirm_InitializationString = + "//////////8EYYIKBAAAAAAABwAAAENvbmZpcm0BAJkjAC8BAJkjmSMAAAEBAQAAAAEA+QsAAQABIwEA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCaIwAuAESaIwAAlgIAAAABACoBAUYAAAAHAAAA" + + "RXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNv" + + "bW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8g" + + "YWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJAAAAEFja25vd2xlZGdlYWJsZUNvbmRpdGlvblR5cGVJbnN0YW5jZQEA" + + "QQsBAEELQQsAAP////8ZAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQD5EwAuAET5EwAAAA//////AQH/" + + "////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQD6EwAuAET6EwAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTm9kZQEA+xMALgBE+xMAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5hbWUBAPwTAC4ARPwTAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1l" + + "AQD9EwAuAET9EwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA/hMA" + + "LgBE/hMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAABQALgBEABQAAAAV" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQABFAAuAEQBFAAAAAX/////AQH/////" + + "AAAAABVgiQoCAAAAAAAQAAAAQ29uZGl0aW9uQ2xhc3NJZAEAbCsALgBEbCsAAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAAEgAAAENvbmRpdGlvbkNsYXNzTmFtZQEAbSsALgBEbSsAAAAV/////wEB/////wAA" + + "AAAVYIkKAgAAAAAADQAAAENvbmRpdGlvbk5hbWUBAG8jAC4ARG8jAAAADP////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAgAAABCcmFuY2hJZAEAcCMALgBEcCMAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAA" + + "AFJldGFpbgEAAhQALgBEAhQAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAEVuYWJsZWRTdGF0" + + "ZQEAcSMALwEAIyNxIwAAABX/////AQECAAAAAQAsIwABAIUjAQAsIwABAI4jAQAAABVgiQoCAAAAAAAC" + + "AAAASWQBAHIjAC4ARHIjAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABRdWFsaXR5AQB6IwAv" + + "AQAqI3ojAAAAE/////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXABAHsjAC4A" + + "RHsjAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAExhc3RTZXZlcml0eQEAfCMALwEAKiN8" + + "IwAAAAX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1wAQB9IwAuAER9IwAA" + + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABDb21tZW50AQB+IwAvAQAqI34jAAAAFf////8B" + + "Af////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXABAH8jAC4ARH8jAAABACYB/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEAgCMALgBEgCMAAAAM/////wEB/////wAA" + + "AAAEYYIKBAAAAAAABwAAAERpc2FibGUBAIIjAC8BAEQjgiMAAAEBAQAAAAEA+QsAAQDzCgAAAAAEYYIK" + + "BAAAAAAABgAAAEVuYWJsZQEAgSMALwEAQyOBIwAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAK" + + "AAAAQWRkQ29tbWVudAEAgyMALwEARSODIwAAAQEBAAAAAQD5CwABAA0LAQAAABdgqQoCAAAAAAAOAAAA" + + "SW5wdXRBcmd1bWVudHMBAIQjAC4ARIQjAACWAgAAAAEAKgEBRgAAAAcAAABFdmVudElkAA//////AAAA" + + "AAMAAAAAKAAAAFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVudC4BACoBAUIAAAAH" + + "AAAAQ29tbWVudAAV/////wAAAAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQgdG8gdGhlIGNvbmRp" + + "dGlvbi4BACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAKAAAAQWNrZWRTdGF0ZQEAhSMA" + + "LwEAIyOFIwAAABX/////AQEBAAAAAQAsIwEBAHEjBAAAABVgiQoCAAAAAAACAAAASWQBAIYjAC4ARIYj" + + "AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABUcmFuc2l0aW9uVGltZQEAiiMALgBEiiMAAAEA" + + "JgH/////AQH/////AAAAABVgqQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQCMIwAuAESMIwAAFQMCAAAAZW4M" + + "AAAAQWNrbm93bGVkZ2VkABX/////AQH/////AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEAjSMA" + + "LgBEjSMAABUDAgAAAGVuDgAAAFVuYWNrbm93bGVkZ2VkABX/////AQH/////AAAAABVgiQoCAAAAAAAO" + + "AAAAQ29uZmlybWVkU3RhdGUBAI4jAC8BACMjjiMAAAAV/////wEBAQAAAAEALCMBAQBxIwQAAAAVYIkK" + + "AgAAAAAAAgAAAElkAQCPIwAuAESPIwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAVHJhbnNp" + + "dGlvblRpbWUBAJMjAC4ARJMjAAABACYB/////wEB/////wAAAAAVYKkKAgAAAAAACQAAAFRydWVTdGF0" + + "ZQEAlSMALgBElSMAABUDAgAAAGVuCQAAAENvbmZpcm1lZAAV/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "CgAAAEZhbHNlU3RhdGUBAJYjAC4ARJYjAAAVAwIAAABlbgsAAABVbmNvbmZpcm1lZAAV/////wEB////" + + "/wAAAAAEYYIKBAAAAAAACwAAAEFja25vd2xlZGdlAQCXIwAvAQCXI5cjAAABAQEAAAABAPkLAAEA8CIB" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAmCMALgBEmCMAAJYCAAAAAQAqAQFGAAAABwAA" + + "AEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBj" + + "b21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRv" + + "IGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAcA" + + "AABDb25maXJtAQCZIwAvAQCZI5kjAAABAQEAAAABAPkLAAEAASMBAAAAF2CpCgIAAAAAAA4AAABJbnB1" + + "dEFyZ3VtZW50cwEAmiMALgBEmiMAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAA" + + "AAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABD" + + "b21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9u" + + "LgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public TwoStateVariableState AckedState + { + get + { + return m_ackedState; + } + + set + { + if (!Object.ReferenceEquals(m_ackedState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_ackedState = value; + } + } + + /// + public TwoStateVariableState ConfirmedState + { + get + { + return m_confirmedState; + } + + set + { + if (!Object.ReferenceEquals(m_confirmedState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_confirmedState = value; + } + } + + /// + public AddCommentMethodState Acknowledge + { + get + { + return m_acknowledgeMethod; + } + + set + { + if (!Object.ReferenceEquals(m_acknowledgeMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_acknowledgeMethod = value; + } + } + + /// + public AddCommentMethodState Confirm + { + get + { + return m_confirmMethod; + } + + set + { + if (!Object.ReferenceEquals(m_confirmMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_confirmMethod = 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_ackedState != null) + { + children.Add(m_ackedState); + } + + if (m_confirmedState != null) + { + children.Add(m_confirmedState); + } + + if (m_acknowledgeMethod != null) + { + children.Add(m_acknowledgeMethod); + } + + if (m_confirmMethod != null) + { + children.Add(m_confirmMethod); + } + + 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 Opc.Ua.BrowseNames.AckedState: + { + if (createOrReplace) + { + if (AckedState == null) + { + if (replacement == null) + { + AckedState = new TwoStateVariableState(this); + } + else + { + AckedState = (TwoStateVariableState)replacement; + } + } + } + + instance = AckedState; + break; + } + + case Opc.Ua.BrowseNames.ConfirmedState: + { + if (createOrReplace) + { + if (ConfirmedState == null) + { + if (replacement == null) + { + ConfirmedState = new TwoStateVariableState(this); + } + else + { + ConfirmedState = (TwoStateVariableState)replacement; + } + } + } + + instance = ConfirmedState; + break; + } + + case Opc.Ua.BrowseNames.Acknowledge: + { + if (createOrReplace) + { + if (Acknowledge == null) + { + if (replacement == null) + { + Acknowledge = new AddCommentMethodState(this); + } + else + { + Acknowledge = (AddCommentMethodState)replacement; + } + } + } + + instance = Acknowledge; + break; + } + + case Opc.Ua.BrowseNames.Confirm: + { + if (createOrReplace) + { + if (Confirm == null) + { + if (replacement == null) + { + Confirm = new AddCommentMethodState(this); + } + else + { + Confirm = (AddCommentMethodState)replacement; + } + } + } + + instance = Confirm; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private TwoStateVariableState m_ackedState; + private TwoStateVariableState m_confirmedState; + private AddCommentMethodState m_acknowledgeMethod; + private AddCommentMethodState m_confirmMethod; + #endregion + } + #endif + #endregion + + #region AlarmConditionState Class + #if (!OPCUA_EXCLUDE_AlarmConditionState) + /// + /// Stores an instance of the AlarmConditionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AlarmConditionState : AcknowledgeableConditionState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AlarmConditionState(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(Opc.Ua.ObjectTypes.AlarmConditionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SuppressedState != null) + { + SuppressedState.Initialize(context, SuppressedState_InitializationString); + } + + if (OutOfServiceState != null) + { + OutOfServiceState.Initialize(context, OutOfServiceState_InitializationString); + } + + if (ShelvingState != null) + { + ShelvingState.Initialize(context, ShelvingState_InitializationString); + } + + if (MaxTimeShelved != null) + { + MaxTimeShelved.Initialize(context, MaxTimeShelved_InitializationString); + } + + if (AudibleEnabled != null) + { + AudibleEnabled.Initialize(context, AudibleEnabled_InitializationString); + } + + if (AudibleSound != null) + { + AudibleSound.Initialize(context, AudibleSound_InitializationString); + } + + if (SilenceState != null) + { + SilenceState.Initialize(context, SilenceState_InitializationString); + } + + if (OnDelay != null) + { + OnDelay.Initialize(context, OnDelay_InitializationString); + } + + if (OffDelay != null) + { + OffDelay.Initialize(context, OffDelay_InitializationString); + } + + if (FirstInGroupFlag != null) + { + FirstInGroupFlag.Initialize(context, FirstInGroupFlag_InitializationString); + } + + if (FirstInGroup != null) + { + FirstInGroup.Initialize(context, FirstInGroup_InitializationString); + } + + if (LatchedState != null) + { + LatchedState.Initialize(context, LatchedState_InitializationString); + } + + if (ReAlarmTime != null) + { + ReAlarmTime.Initialize(context, ReAlarmTime_InitializationString); + } + + if (ReAlarmRepeatCount != null) + { + ReAlarmRepeatCount.Initialize(context, ReAlarmRepeatCount_InitializationString); + } + + if (Silence != null) + { + Silence.Initialize(context, Silence_InitializationString); + } + + if (Suppress != null) + { + Suppress.Initialize(context, Suppress_InitializationString); + } + + if (Unsuppress != null) + { + Unsuppress.Initialize(context, Unsuppress_InitializationString); + } + + if (RemoveFromService != null) + { + RemoveFromService.Initialize(context, RemoveFromService_InitializationString); + } + + if (PlaceInService != null) + { + PlaceInService.Initialize(context, PlaceInService_InitializationString); + } + + if (Reset != null) + { + Reset.Initialize(context, Reset_InitializationString); + } + } + + #region Initialization String + private const string SuppressedState_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAFN1cHByZXNzZWRTdGF0ZQEA0SMALwEAIyPRIwAAABX/////AQEB" + + "AAAAAQAsIwEBAJ4jBAAAABVgiQoCAAAAAAACAAAASWQBANIjAC4ARNIjAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA4AAABUcmFuc2l0aW9uVGltZQEA1iMALgBE1iMAAAEAJgH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQDYIwAuAETYIwAAFQMCAAAAZW4KAAAAU3VwcHJlc3NlZAAV////" + + "/wEB/////wAAAAAVYKkKAgAAAAAACgAAAEZhbHNlU3RhdGUBANkjAC4ARNkjAAAVAwIAAABlbgwAAABV" + + "bnN1cHByZXNzZWQAFf////8BAf////8AAAAA"; + + private const string OutOfServiceState_InitializationString = + "//////////8VYIkKAgAAAAAAEQAAAE91dE9mU2VydmljZVN0YXRlAQDzPwAvAQAjI/M/AAAAFf////8B" + + "Af////8EAAAAFWCJCgIAAAAAAAIAAABJZAEA9D8ALgBE9D8AAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADgAAAFRyYW5zaXRpb25UaW1lAQD4PwAuAET4PwAAAQAmAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AAkAAABUcnVlU3RhdGUBAPo/AC4ARPo/AAAVAwIAAABlbg4AAABPdXQgb2YgU2VydmljZQAV/////wEB" + + "/////wAAAAAVYKkKAgAAAAAACgAAAEZhbHNlU3RhdGUBAPs/AC4ARPs/AAAVAwIAAABlbgoAAABJbiBT" + + "ZXJ2aWNlABX/////AQH/////AAAAAA=="; + + private const string ShelvingState_InitializationString = + "//////////8EYIAKAQAAAAAADQAAAFNoZWx2aW5nU3RhdGUBANojAC8BAHEL2iMAAAEAAAABACwjAQEA" + + "niMGAAAAFWCJCgIAAAAAAAwAAABDdXJyZW50U3RhdGUBANsjAC8BAMgK2yMAAAAV/////wEB/////wEA" + + "AAAVYIkKAgAAAAAAAgAAAElkAQDcIwAuAETcIwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAA" + + "TGFzdFRyYW5zaXRpb24BAOAjAC8BAM8K4CMAAAAV/////wEB/////wIAAAAVYIkKAgAAAAAAAgAAAElk" + + "AQDhIwAuAEThIwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAVHJhbnNpdGlvblRpbWUBAOQj" + + "AC4AROQjAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAFVuc2hlbHZlVGltZQEA5SMALgBE" + + "5SMAAAEAIgH/////AQH/////AAAAAARhggoEAAAAAAALAAAAVGltZWRTaGVsdmUBAP0jAC8BAIUL/SMA" + + "AAEBAQAAAAEA+QsAAQBVKwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQD+IwAuAET+IwAA" + + "lgEAAAABACoBAXoAAAAMAAAAU2hlbHZpbmdUaW1lAQAiAf////8AAAAAAwAAAABVAAAASWYgbm90IDAs" + + "IHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyBhIGZpeGVkIHRpbWUgZm9yIHdoaWNoIHRoZSBBbGFybSBp" + + "cyB0byBiZSBzaGVsdmVkLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAgAAABVbnNo" + + "ZWx2ZQEA+yMALwEAgwv7IwAAAQEBAAAAAQD5CwABAFUrAAAAAARhggoEAAAAAAANAAAAT25lU2hvdFNo" + + "ZWx2ZQEA/CMALwEAhAv8IwAAAQEBAAAAAQD5CwABAFUrAAAAAA=="; + + private const string MaxTimeShelved_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAE1heFRpbWVTaGVsdmVkAQAAJAAuAEQAJAAAAQAiAf////8BAf//" + + "//8AAAAA"; + + private const string AudibleEnabled_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAEF1ZGlibGVFbmFibGVkAQAFQAAuAEQFQAAAAAH/////AQH/////" + + "AAAAAA=="; + + private const string AudibleSound_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAEF1ZGlibGVTb3VuZAEABkAALgEAQkYGQAAAAQCzP/////8BAf//" + + "//8AAAAA"; + + private const string SilenceState_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAFNpbGVuY2VTdGF0ZQEA/D8ALwEAIyP8PwAAABX/////AQH/////" + + "BAAAABVgiQoCAAAAAAACAAAASWQBAP0/AC4ARP0/AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAA4A" + + "AABUcmFuc2l0aW9uVGltZQEAAUAALgBEAUAAAAEAJgH/////AQH/////AAAAABVgqQoCAAAAAAAJAAAA" + + "VHJ1ZVN0YXRlAQADQAAuAEQDQAAAFQMCAAAAZW4IAAAAU2lsZW5jZWQAFf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAAoAAABGYWxzZVN0YXRlAQAEQAAuAEQEQAAAFQMCAAAAZW4MAAAATm90IFNpbGVuY2VkABX/" + + "////AQH/////AAAAAA=="; + + private const string OnDelay_InitializationString = + "//////////8VYIkKAgAAAAAABwAAAE9uRGVsYXkBAAtAAC4ARAtAAAABACIB/////wEB/////wAAAAA="; + + private const string OffDelay_InitializationString = + "//////////8VYIkKAgAAAAAACAAAAE9mZkRlbGF5AQAMQAAuAEQMQAAAAQAiAf////8BAf////8AAAAA"; + + private const string FirstInGroupFlag_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEZpcnN0SW5Hcm91cEZsYWcBAA1AAC8APw1AAAAAAf////8BAf//" + + "//8AAAAA"; + + private const string FirstInGroup_InitializationString = + "//////////8EYIAKAQAAAAAADAAAAEZpcnN0SW5Hcm91cAEADkAALwEAFUAOQAAA/////wAAAAA="; + + private const string LatchedState_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAExhdGNoZWRTdGF0ZQEADkcALwEAIyMORwAAABX/////AQH/////" + + "BAAAABVgiQoCAAAAAAACAAAASWQBAA9HAC4ARA9HAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAA4A" + + "AABUcmFuc2l0aW9uVGltZQEAE0cALgBEE0cAAAEAJgH/////AQH/////AAAAABVgqQoCAAAAAAAJAAAA" + + "VHJ1ZVN0YXRlAQAVRwAuAEQVRwAAFQMCAAAAZW4HAAAATGF0Y2hlZAAV/////wEB/////wAAAAAVYKkK" + + "AgAAAAAACgAAAEZhbHNlU3RhdGUBABZHAC4ARBZHAAAVAwIAAABlbgkAAABVbmxhdGNoZWQAFf////8B" + + "Af////8AAAAA"; + + private const string ReAlarmTime_InitializationString = + "//////////8VYIkKAgAAAAAACwAAAFJlQWxhcm1UaW1lAQAQQAAuAEQQQAAAAQAiAf////8BAf////8A" + + "AAAA"; + + private const string ReAlarmRepeatCount_InitializationString = + "//////////8VYIkKAgAAAAAAEgAAAFJlQWxhcm1SZXBlYXRDb3VudAEAEUAALwA/EUAAAAAE/////wEB" + + "/////wAAAAA="; + + private const string Silence_InitializationString = + "//////////8EYYIKBAAAAAAABwAAAFNpbGVuY2UBABJAAC8BABJAEkAAAAEBAQAAAAEA+QsAAQBaQwAA" + + "AAA="; + + private const string Suppress_InitializationString = + "//////////8EYYIKBAAAAAAACAAAAFN1cHByZXNzAQATQAAvAQATQBNAAAABAQEAAAABAPkLAAEASUMA" + + "AAAA"; + + private const string Unsuppress_InitializationString = + "//////////8EYYIKBAAAAAAACgAAAFVuc3VwcHJlc3MBAMxFAC8BAMxFzEUAAAEBAQAAAAEA+QsAAQBJ" + + "QwAAAAA="; + + private const string RemoveFromService_InitializationString = + "//////////8EYYIKBAAAAAAAEQAAAFJlbW92ZUZyb21TZXJ2aWNlAQDNRQAvAQDNRc1FAAABAQEAAAAB" + + "APkLAAEAa0MAAAAA"; + + private const string PlaceInService_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAFBsYWNlSW5TZXJ2aWNlAQDORQAvAQDORc5FAAABAQEAAAABAPkL" + + "AAEAa0MAAAAA"; + + private const string Reset_InitializationString = + "//////////8EYYIKBAAAAAAABQAAAFJlc2V0AQAXRwAvAQAXRxdHAAABAQEAAAABAPkLAAEApToAAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGgAAAEFsYXJtQ29uZGl0aW9uVHlwZUluc3RhbmNlAQBjCwEAYwtjCwAA" + + "/////y4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAKQVAC4ARKQVAAAAD/////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAkAAABFdmVudFR5cGUBAKUVAC4ARKUVAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABTb3VyY2VOb2RlAQCmFQAuAESmFQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNl" + + "TmFtZQEApxUALgBEpxUAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAKgVAC4ARKgV" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCpFQAuAESpFQAAAQAm" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCrFQAuAESrFQAAABX/////AQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAKwVAC4ARKwVAAAABf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABAAAABDb25kaXRpb25DbGFzc0lkAQBuKwAuAERuKwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQBvKwAuAERvKwAAABX/////AQH/////AAAAABVgiQoCAAAA" + + "AAANAAAAQ29uZGl0aW9uTmFtZQEAnCMALgBEnCMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAA" + + "AEJyYW5jaElkAQCdIwAuAESdIwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAAUmV0YWluAQCt" + + "FQAuAEStFQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRlAQCeIwAvAQAj" + + "I54jAAAAFf////8BAQUAAAABACwjAAEAsiMBACwjAAEAuyMBACwjAAEAyCMBACwjAAEA0SMBACwjAAEA" + + "2iMBAAAAFWCJCgIAAAAAAAIAAABJZAEAnyMALgBEnyMAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BwAAAFF1YWxpdHkBAKcjAC8BACojpyMAAAAT/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJj" + + "ZVRpbWVzdGFtcAEAqCMALgBEqCMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAATGFzdFNl" + + "dmVyaXR5AQCpIwAvAQAqI6kjAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1l" + + "c3RhbXABAKojAC4ARKojAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1lbnQBAKsj" + + "AC8BACojqyMAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFtcAEArCMA" + + "LgBErCMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQCtIwAuAESt" + + "IwAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAryMALwEARCOvIwAAAQEBAAAA" + + "AQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQCuIwAvAQBDI64jAAABAQEAAAABAPkLAAEA" + + "8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQCwIwAvAQBFI7AjAAABAQEAAAABAPkLAAEADQsB" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAsSMALgBEsSMAAJYCAAAAAQAqAQFGAAAABwAA" + + "AEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBj" + + "b21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRv" + + "IGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABBY2tlZFN0YXRlAQCyIwAvAQAjI7IjAAAAFf////8BAQEAAAABACwjAQEAniMBAAAAFWCJCgIAAAAA" + + "AAIAAABJZAEAsyMALgBEsyMAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFja25vd2xlZGdl" + + "AQDEIwAvAQCXI8QjAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEAxSMALgBExSMAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhl" + + "IGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/" + + "////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEAyCMALwEAIyPIIwAAABX/" + + "////AQEBAAAAAQAsIwEBAJ4jBgAAABVgiQoCAAAAAAACAAAASWQBAMkjAC4ARMkjAAAAAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABQAAABFZmZlY3RpdmVEaXNwbGF5TmFtZQEAzCMALgBEzCMAAAAV/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQDNIwAuAETNIwAAAQAmAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABcAAABFZmZlY3RpdmVUcmFuc2l0aW9uVGltZQEAziMALgBEziMAAAEAJgH/" + + "////AQH/////AAAAABVgqQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQDPIwAuAETPIwAAFQMCAAAAZW4GAAAA" + + "QWN0aXZlABX/////AQH/////AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEA0CMALgBE0CMAABUD" + + "AgAAAGVuCAAAAEluYWN0aXZlABX/////AQH/////AAAAABVgiQoCAAAAAAAJAAAASW5wdXROb2RlAQBw" + + "KwAuAERwKwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAU3VwcHJlc3NlZFN0YXRlAQDRIwAv" + + "AQAjI9EjAAAAFf////8BAQEAAAABACwjAQEAniMEAAAAFWCJCgIAAAAAAAIAAABJZAEA0iMALgBE0iMA" + + "AAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQDWIwAuAETWIwAAAQAm" + + "Af////8BAf////8AAAAAFWCpCgIAAAAAAAkAAABUcnVlU3RhdGUBANgjAC4ARNgjAAAVAwIAAABlbgoA" + + "AABTdXBwcmVzc2VkABX/////AQH/////AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEA2SMALgBE" + + "2SMAABUDAgAAAGVuDAAAAFVuc3VwcHJlc3NlZAAV/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAE91" + + "dE9mU2VydmljZVN0YXRlAQDzPwAvAQAjI/M/AAAAFf////8BAf////8EAAAAFWCJCgIAAAAAAAIAAABJ" + + "ZAEA9D8ALgBE9D8AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQD4" + + "PwAuAET4PwAAAQAmAf////8BAf////8AAAAAFWCpCgIAAAAAAAkAAABUcnVlU3RhdGUBAPo/AC4ARPo/" + + "AAAVAwIAAABlbg4AAABPdXQgb2YgU2VydmljZQAV/////wEB/////wAAAAAVYKkKAgAAAAAACgAAAEZh" + + "bHNlU3RhdGUBAPs/AC4ARPs/AAAVAwIAAABlbgoAAABJbiBTZXJ2aWNlABX/////AQH/////AAAAAARg" + + "gAoBAAAAAAANAAAAU2hlbHZpbmdTdGF0ZQEA2iMALwEAcQvaIwAAAQAAAAEALCMBAQCeIwYAAAAVYIkK" + + "AgAAAAAADAAAAEN1cnJlbnRTdGF0ZQEA2yMALwEAyArbIwAAABX/////AQH/////AQAAABVgiQoCAAAA" + + "AAACAAAASWQBANwjAC4ARNwjAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABMYXN0VHJhbnNp" + + "dGlvbgEA4CMALwEAzwrgIwAAABX/////AQH/////AgAAABVgiQoCAAAAAAACAAAASWQBAOEjAC4AROEj" + + "AAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABUcmFuc2l0aW9uVGltZQEA5CMALgBE5CMAAAEA" + + "JgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAVW5zaGVsdmVUaW1lAQDlIwAuAETlIwAAAQAiAf//" + + "//8BAf////8AAAAABGGCCgQAAAAAAAsAAABUaW1lZFNoZWx2ZQEA/SMALwEAhQv9IwAAAQEBAAAAAQD5" + + "CwABAFUrAQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAP4jAC4ARP4jAACWAQAAAAEAKgEB" + + "egAAAAwAAABTaGVsdmluZ1RpbWUBACIB/////wAAAAADAAAAAFUAAABJZiBub3QgMCwgdGhpcyBwYXJh" + + "bWV0ZXIgc3BlY2lmaWVzIGEgZml4ZWQgdGltZSBmb3Igd2hpY2ggdGhlIEFsYXJtIGlzIHRvIGJlIHNo" + + "ZWx2ZWQuAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACAAAAFVuc2hlbHZlAQD7IwAv" + + "AQCDC/sjAAABAQEAAAABAPkLAAEAVSsAAAAABGGCCgQAAAAAAA0AAABPbmVTaG90U2hlbHZlAQD8IwAv" + + "AQCEC/wjAAABAQEAAAABAPkLAAEAVSsAAAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVk" + + "AQD/IwAuAET/IwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAATWF4VGltZVNoZWx2ZWQBAAAk" + + "AC4ARAAkAAABACIB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAEF1ZGlibGVFbmFibGVkAQAFQAAu" + + "AEQFQAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQXVkaWJsZVNvdW5kAQAGQAAuAQBCRgZA" + + "AAABALM//////wEB/////wAAAAAVYIkKAgAAAAAADAAAAFNpbGVuY2VTdGF0ZQEA/D8ALwEAIyP8PwAA" + + "ABX/////AQH/////BAAAABVgiQoCAAAAAAACAAAASWQBAP0/AC4ARP0/AAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA4AAABUcmFuc2l0aW9uVGltZQEAAUAALgBEAUAAAAEAJgH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQADQAAuAEQDQAAAFQMCAAAAZW4IAAAAU2lsZW5jZWQAFf////8B" + + "Af////8AAAAAFWCpCgIAAAAAAAoAAABGYWxzZVN0YXRlAQAEQAAuAEQEQAAAFQMCAAAAZW4MAAAATm90" + + "IFNpbGVuY2VkABX/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAT25EZWxheQEAC0AALgBEC0AAAAEA" + + "IgH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAT2ZmRGVsYXkBAAxAAC4ARAxAAAABACIB/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEAAAAEZpcnN0SW5Hcm91cEZsYWcBAA1AAC8APw1AAAAAAf////8BAf//" + + "//8AAAAABGCACgEAAAAAAAwAAABGaXJzdEluR3JvdXABAA5AAC8BABVADkAAAP////8AAAAAFWCJCgIA" + + "AAAAAAwAAABMYXRjaGVkU3RhdGUBAA5HAC8BACMjDkcAAAAV/////wEB/////wQAAAAVYIkKAgAAAAAA" + + "AgAAAElkAQAPRwAuAEQPRwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAVHJhbnNpdGlvblRp" + + "bWUBABNHAC4ARBNHAAABACYB/////wEB/////wAAAAAVYKkKAgAAAAAACQAAAFRydWVTdGF0ZQEAFUcA" + + "LgBEFUcAABUDAgAAAGVuBwAAAExhdGNoZWQAFf////8BAf////8AAAAAFWCpCgIAAAAAAAoAAABGYWxz" + + "ZVN0YXRlAQAWRwAuAEQWRwAAFQMCAAAAZW4JAAAAVW5sYXRjaGVkABX/////AQH/////AAAAABVgiQoC" + + "AAAAAAALAAAAUmVBbGFybVRpbWUBABBAAC4ARBBAAAABACIB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EgAAAFJlQWxhcm1SZXBlYXRDb3VudAEAEUAALwA/EUAAAAAE/////wEB/////wAAAAAEYYIKBAAAAAAA" + + "BwAAAFNpbGVuY2UBABJAAC8BABJAEkAAAAEBAQAAAAEA+QsAAQBaQwAAAAAEYYIKBAAAAAAACAAAAFN1" + + "cHByZXNzAQATQAAvAQATQBNAAAABAQEAAAABAPkLAAEASUMAAAAABGGCCgQAAAAAAAoAAABVbnN1cHBy" + + "ZXNzAQDMRQAvAQDMRcxFAAABAQEAAAABAPkLAAEASUMAAAAABGGCCgQAAAAAABEAAABSZW1vdmVGcm9t" + + "U2VydmljZQEAzUUALwEAzUXNRQAAAQEBAAAAAQD5CwABAGtDAAAAAARhggoEAAAAAAAOAAAAUGxhY2VJ" + + "blNlcnZpY2UBAM5FAC8BAM5FzkUAAAEBAQAAAAEA+QsAAQBrQwAAAAAEYYIKBAAAAAAABQAAAFJlc2V0" + + "AQAXRwAvAQAXRxdHAAABAQEAAAABAPkLAAEApToAAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public TwoStateVariableState ActiveState + { + get + { + return m_activeState; + } + + set + { + if (!Object.ReferenceEquals(m_activeState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_activeState = value; + } + } + + /// + public PropertyState InputNode + { + get + { + return m_inputNode; + } + + set + { + if (!Object.ReferenceEquals(m_inputNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_inputNode = value; + } + } + + /// + public TwoStateVariableState SuppressedState + { + get + { + return m_suppressedState; + } + + set + { + if (!Object.ReferenceEquals(m_suppressedState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_suppressedState = value; + } + } + + /// + public TwoStateVariableState OutOfServiceState + { + get + { + return m_outOfServiceState; + } + + set + { + if (!Object.ReferenceEquals(m_outOfServiceState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_outOfServiceState = value; + } + } + + /// + public ShelvedStateMachineState ShelvingState + { + get + { + return m_shelvingState; + } + + set + { + if (!Object.ReferenceEquals(m_shelvingState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_shelvingState = value; + } + } + + /// + public PropertyState SuppressedOrShelved + { + get + { + return m_suppressedOrShelved; + } + + set + { + if (!Object.ReferenceEquals(m_suppressedOrShelved, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_suppressedOrShelved = value; + } + } + + /// + public PropertyState MaxTimeShelved + { + get + { + return m_maxTimeShelved; + } + + set + { + if (!Object.ReferenceEquals(m_maxTimeShelved, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxTimeShelved = value; + } + } + + /// + public PropertyState AudibleEnabled + { + get + { + return m_audibleEnabled; + } + + set + { + if (!Object.ReferenceEquals(m_audibleEnabled, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_audibleEnabled = value; + } + } + + /// + public AudioVariableState AudibleSound + { + get + { + return m_audibleSound; + } + + set + { + if (!Object.ReferenceEquals(m_audibleSound, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_audibleSound = value; + } + } + + /// + public TwoStateVariableState SilenceState + { + get + { + return m_silenceState; + } + + set + { + if (!Object.ReferenceEquals(m_silenceState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_silenceState = value; + } + } + + /// + public PropertyState OnDelay + { + get + { + return m_onDelay; + } + + set + { + if (!Object.ReferenceEquals(m_onDelay, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_onDelay = value; + } + } + + /// + public PropertyState OffDelay + { + get + { + return m_offDelay; + } + + set + { + if (!Object.ReferenceEquals(m_offDelay, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_offDelay = value; + } + } + + /// + public BaseDataVariableState FirstInGroupFlag + { + get + { + return m_firstInGroupFlag; + } + + set + { + if (!Object.ReferenceEquals(m_firstInGroupFlag, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_firstInGroupFlag = value; + } + } + + /// + public AlarmGroupState FirstInGroup + { + get + { + return m_firstInGroup; + } + + set + { + if (!Object.ReferenceEquals(m_firstInGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_firstInGroup = value; + } + } + + /// + public TwoStateVariableState LatchedState + { + get + { + return m_latchedState; + } + + set + { + if (!Object.ReferenceEquals(m_latchedState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_latchedState = value; + } + } + + /// + public PropertyState ReAlarmTime + { + get + { + return m_reAlarmTime; + } + + set + { + if (!Object.ReferenceEquals(m_reAlarmTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_reAlarmTime = value; + } + } + + /// + public BaseDataVariableState ReAlarmRepeatCount + { + get + { + return m_reAlarmRepeatCount; + } + + set + { + if (!Object.ReferenceEquals(m_reAlarmRepeatCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_reAlarmRepeatCount = value; + } + } + + /// + public MethodState Silence + { + get + { + return m_silenceMethod; + } + + set + { + if (!Object.ReferenceEquals(m_silenceMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_silenceMethod = value; + } + } + + /// + public MethodState Suppress + { + get + { + return m_suppressMethod; + } + + set + { + if (!Object.ReferenceEquals(m_suppressMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_suppressMethod = value; + } + } + + /// + public MethodState Unsuppress + { + get + { + return m_unsuppressMethod; + } + + set + { + if (!Object.ReferenceEquals(m_unsuppressMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unsuppressMethod = value; + } + } + + /// + public MethodState RemoveFromService + { + get + { + return m_removeFromServiceMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeFromServiceMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeFromServiceMethod = value; + } + } + + /// + public MethodState PlaceInService + { + get + { + return m_placeInServiceMethod; + } + + set + { + if (!Object.ReferenceEquals(m_placeInServiceMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_placeInServiceMethod = value; + } + } + + /// + public MethodState Reset + { + get + { + return m_resetMethod; + } + + set + { + if (!Object.ReferenceEquals(m_resetMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resetMethod = 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_activeState != null) + { + children.Add(m_activeState); + } + + if (m_inputNode != null) + { + children.Add(m_inputNode); + } + + if (m_suppressedState != null) + { + children.Add(m_suppressedState); + } + + if (m_outOfServiceState != null) + { + children.Add(m_outOfServiceState); + } + + if (m_shelvingState != null) + { + children.Add(m_shelvingState); + } + + if (m_suppressedOrShelved != null) + { + children.Add(m_suppressedOrShelved); + } + + if (m_maxTimeShelved != null) + { + children.Add(m_maxTimeShelved); + } + + if (m_audibleEnabled != null) + { + children.Add(m_audibleEnabled); + } + + if (m_audibleSound != null) + { + children.Add(m_audibleSound); + } + + if (m_silenceState != null) + { + children.Add(m_silenceState); + } + + if (m_onDelay != null) + { + children.Add(m_onDelay); + } + + if (m_offDelay != null) + { + children.Add(m_offDelay); + } + + if (m_firstInGroupFlag != null) + { + children.Add(m_firstInGroupFlag); + } + + if (m_firstInGroup != null) + { + children.Add(m_firstInGroup); + } + + if (m_latchedState != null) + { + children.Add(m_latchedState); + } + + if (m_reAlarmTime != null) + { + children.Add(m_reAlarmTime); + } + + if (m_reAlarmRepeatCount != null) + { + children.Add(m_reAlarmRepeatCount); + } + + if (m_silenceMethod != null) + { + children.Add(m_silenceMethod); + } + + if (m_suppressMethod != null) + { + children.Add(m_suppressMethod); + } + + if (m_unsuppressMethod != null) + { + children.Add(m_unsuppressMethod); + } + + if (m_removeFromServiceMethod != null) + { + children.Add(m_removeFromServiceMethod); + } + + if (m_placeInServiceMethod != null) + { + children.Add(m_placeInServiceMethod); + } + + if (m_resetMethod != null) + { + children.Add(m_resetMethod); + } + + 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 Opc.Ua.BrowseNames.ActiveState: + { + if (createOrReplace) + { + if (ActiveState == null) + { + if (replacement == null) + { + ActiveState = new TwoStateVariableState(this); + } + else + { + ActiveState = (TwoStateVariableState)replacement; + } + } + } + + instance = ActiveState; + break; + } + + case Opc.Ua.BrowseNames.InputNode: + { + if (createOrReplace) + { + if (InputNode == null) + { + if (replacement == null) + { + InputNode = new PropertyState(this); + } + else + { + InputNode = (PropertyState)replacement; + } + } + } + + instance = InputNode; + break; + } + + case Opc.Ua.BrowseNames.SuppressedState: + { + if (createOrReplace) + { + if (SuppressedState == null) + { + if (replacement == null) + { + SuppressedState = new TwoStateVariableState(this); + } + else + { + SuppressedState = (TwoStateVariableState)replacement; + } + } + } + + instance = SuppressedState; + break; + } + + case Opc.Ua.BrowseNames.OutOfServiceState: + { + if (createOrReplace) + { + if (OutOfServiceState == null) + { + if (replacement == null) + { + OutOfServiceState = new TwoStateVariableState(this); + } + else + { + OutOfServiceState = (TwoStateVariableState)replacement; + } + } + } + + instance = OutOfServiceState; + break; + } + + case Opc.Ua.BrowseNames.ShelvingState: + { + if (createOrReplace) + { + if (ShelvingState == null) + { + if (replacement == null) + { + ShelvingState = new ShelvedStateMachineState(this); + } + else + { + ShelvingState = (ShelvedStateMachineState)replacement; + } + } + } + + instance = ShelvingState; + break; + } + + case Opc.Ua.BrowseNames.SuppressedOrShelved: + { + if (createOrReplace) + { + if (SuppressedOrShelved == null) + { + if (replacement == null) + { + SuppressedOrShelved = new PropertyState(this); + } + else + { + SuppressedOrShelved = (PropertyState)replacement; + } + } + } + + instance = SuppressedOrShelved; + break; + } + + case Opc.Ua.BrowseNames.MaxTimeShelved: + { + if (createOrReplace) + { + if (MaxTimeShelved == null) + { + if (replacement == null) + { + MaxTimeShelved = new PropertyState(this); + } + else + { + MaxTimeShelved = (PropertyState)replacement; + } + } + } + + instance = MaxTimeShelved; + break; + } + + case Opc.Ua.BrowseNames.AudibleEnabled: + { + if (createOrReplace) + { + if (AudibleEnabled == null) + { + if (replacement == null) + { + AudibleEnabled = new PropertyState(this); + } + else + { + AudibleEnabled = (PropertyState)replacement; + } + } + } + + instance = AudibleEnabled; + break; + } + + case Opc.Ua.BrowseNames.AudibleSound: + { + if (createOrReplace) + { + if (AudibleSound == null) + { + if (replacement == null) + { + AudibleSound = new AudioVariableState(this); + } + else + { + AudibleSound = (AudioVariableState)replacement; + } + } + } + + instance = AudibleSound; + break; + } + + case Opc.Ua.BrowseNames.SilenceState: + { + if (createOrReplace) + { + if (SilenceState == null) + { + if (replacement == null) + { + SilenceState = new TwoStateVariableState(this); + } + else + { + SilenceState = (TwoStateVariableState)replacement; + } + } + } + + instance = SilenceState; + break; + } + + case Opc.Ua.BrowseNames.OnDelay: + { + if (createOrReplace) + { + if (OnDelay == null) + { + if (replacement == null) + { + OnDelay = new PropertyState(this); + } + else + { + OnDelay = (PropertyState)replacement; + } + } + } + + instance = OnDelay; + break; + } + + case Opc.Ua.BrowseNames.OffDelay: + { + if (createOrReplace) + { + if (OffDelay == null) + { + if (replacement == null) + { + OffDelay = new PropertyState(this); + } + else + { + OffDelay = (PropertyState)replacement; + } + } + } + + instance = OffDelay; + break; + } + + case Opc.Ua.BrowseNames.FirstInGroupFlag: + { + if (createOrReplace) + { + if (FirstInGroupFlag == null) + { + if (replacement == null) + { + FirstInGroupFlag = new BaseDataVariableState(this); + } + else + { + FirstInGroupFlag = (BaseDataVariableState)replacement; + } + } + } + + instance = FirstInGroupFlag; + break; + } + + case Opc.Ua.BrowseNames.FirstInGroup: + { + if (createOrReplace) + { + if (FirstInGroup == null) + { + if (replacement == null) + { + FirstInGroup = new AlarmGroupState(this); + } + else + { + FirstInGroup = (AlarmGroupState)replacement; + } + } + } + + instance = FirstInGroup; + break; + } + + case Opc.Ua.BrowseNames.LatchedState: + { + if (createOrReplace) + { + if (LatchedState == null) + { + if (replacement == null) + { + LatchedState = new TwoStateVariableState(this); + } + else + { + LatchedState = (TwoStateVariableState)replacement; + } + } + } + + instance = LatchedState; + break; + } + + case Opc.Ua.BrowseNames.ReAlarmTime: + { + if (createOrReplace) + { + if (ReAlarmTime == null) + { + if (replacement == null) + { + ReAlarmTime = new PropertyState(this); + } + else + { + ReAlarmTime = (PropertyState)replacement; + } + } + } + + instance = ReAlarmTime; + break; + } + + case Opc.Ua.BrowseNames.ReAlarmRepeatCount: + { + if (createOrReplace) + { + if (ReAlarmRepeatCount == null) + { + if (replacement == null) + { + ReAlarmRepeatCount = new BaseDataVariableState(this); + } + else + { + ReAlarmRepeatCount = (BaseDataVariableState)replacement; + } + } + } + + instance = ReAlarmRepeatCount; + break; + } + + case Opc.Ua.BrowseNames.Silence: + { + if (createOrReplace) + { + if (Silence == null) + { + if (replacement == null) + { + Silence = new MethodState(this); + } + else + { + Silence = (MethodState)replacement; + } + } + } + + instance = Silence; + break; + } + + case Opc.Ua.BrowseNames.Suppress: + { + if (createOrReplace) + { + if (Suppress == null) + { + if (replacement == null) + { + Suppress = new MethodState(this); + } + else + { + Suppress = (MethodState)replacement; + } + } + } + + instance = Suppress; + break; + } + + case Opc.Ua.BrowseNames.Unsuppress: + { + if (createOrReplace) + { + if (Unsuppress == null) + { + if (replacement == null) + { + Unsuppress = new MethodState(this); + } + else + { + Unsuppress = (MethodState)replacement; + } + } + } + + instance = Unsuppress; + break; + } + + case Opc.Ua.BrowseNames.RemoveFromService: + { + if (createOrReplace) + { + if (RemoveFromService == null) + { + if (replacement == null) + { + RemoveFromService = new MethodState(this); + } + else + { + RemoveFromService = (MethodState)replacement; + } + } + } + + instance = RemoveFromService; + break; + } + + case Opc.Ua.BrowseNames.PlaceInService: + { + if (createOrReplace) + { + if (PlaceInService == null) + { + if (replacement == null) + { + PlaceInService = new MethodState(this); + } + else + { + PlaceInService = (MethodState)replacement; + } + } + } + + instance = PlaceInService; + break; + } + + case Opc.Ua.BrowseNames.Reset: + { + if (createOrReplace) + { + if (Reset == null) + { + if (replacement == null) + { + Reset = new MethodState(this); + } + else + { + Reset = (MethodState)replacement; + } + } + } + + instance = Reset; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private TwoStateVariableState m_activeState; + private PropertyState m_inputNode; + private TwoStateVariableState m_suppressedState; + private TwoStateVariableState m_outOfServiceState; + private ShelvedStateMachineState m_shelvingState; + private PropertyState m_suppressedOrShelved; + private PropertyState m_maxTimeShelved; + private PropertyState m_audibleEnabled; + private AudioVariableState m_audibleSound; + private TwoStateVariableState m_silenceState; + private PropertyState m_onDelay; + private PropertyState m_offDelay; + private BaseDataVariableState m_firstInGroupFlag; + private AlarmGroupState m_firstInGroup; + private TwoStateVariableState m_latchedState; + private PropertyState m_reAlarmTime; + private BaseDataVariableState m_reAlarmRepeatCount; + private MethodState m_silenceMethod; + private MethodState m_suppressMethod; + private MethodState m_unsuppressMethod; + private MethodState m_removeFromServiceMethod; + private MethodState m_placeInServiceMethod; + private MethodState m_resetMethod; + #endregion + } + #endif + #endregion + + #region AlarmGroupState Class + #if (!OPCUA_EXCLUDE_AlarmGroupState) + /// + /// Stores an instance of the AlarmGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AlarmGroupState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AlarmGroupState(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(Opc.Ua.ObjectTypes.AlarmGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFgAAAEFsYXJtR3JvdXBUeXBlSW5zdGFuY2UBABVAAQAVQBVAAAD/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ShelvedStateMachineState Class + #if (!OPCUA_EXCLUDE_ShelvedStateMachineState) + /// + /// Stores an instance of the ShelvedStateMachineType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ShelvedStateMachineState : FiniteStateMachineState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ShelvedStateMachineState(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(Opc.Ua.ObjectTypes.ShelvedStateMachineType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAFNoZWx2ZWRTdGF0ZU1hY2hpbmVUeXBlSW5zdGFuY2UBAHELAQBx" + + "C3ELAAD/////BQAAABVgiQoCAAAAAAAMAAAAQ3VycmVudFN0YXRlAQDIFwAvAQDICsgXAAAAFf////8B" + + "Af////8BAAAAFWCJCgIAAAAAAAIAAABJZAEAyRcALgBEyRcAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADAAAAFVuc2hlbHZlVGltZQEAmyMALgBEmyMAAAEAIgH/////AQH/////AAAAAARhggoEAAAAAAAL" + + "AAAAVGltZWRTaGVsdmUBAIULAC8BAIULhQsAAAEBAwAAAAA1AQEAdwsANQEBAIELAQD5CwABAFUrAQAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAK8LAC4ARK8LAACWAQAAAAEAKgEBegAAAAwAAABT" + + "aGVsdmluZ1RpbWUBACIB/////wAAAAADAAAAAFUAAABJZiBub3QgMCwgdGhpcyBwYXJhbWV0ZXIgc3Bl" + + "Y2lmaWVzIGEgZml4ZWQgdGltZSBmb3Igd2hpY2ggdGhlIEFsYXJtIGlzIHRvIGJlIHNoZWx2ZWQuAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACAAAAFVuc2hlbHZlAQCDCwAvAQCDC4MLAAAB" + + "AQMAAAAANQEBAHwLADUBAQB/CwEA+QsAAQBVKwAAAAAEYYIKBAAAAAAADQAAAE9uZVNob3RTaGVsdmUB" + + "AIQLAC8BAIQLhAsAAAEBAwAAAAA1AQEAeAsANQEBAH4LAQD5CwABAFUrAAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState UnshelveTime + { + get + { + return m_unshelveTime; + } + + set + { + if (!Object.ReferenceEquals(m_unshelveTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unshelveTime = value; + } + } + + /// + public TimedShelveMethodState TimedShelve + { + get + { + return m_timedShelveMethod; + } + + set + { + if (!Object.ReferenceEquals(m_timedShelveMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_timedShelveMethod = value; + } + } + + /// + public MethodState Unshelve + { + get + { + return m_unshelveMethod; + } + + set + { + if (!Object.ReferenceEquals(m_unshelveMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_unshelveMethod = value; + } + } + + /// + public MethodState OneShotShelve + { + get + { + return m_oneShotShelveMethod; + } + + set + { + if (!Object.ReferenceEquals(m_oneShotShelveMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oneShotShelveMethod = 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_unshelveTime != null) + { + children.Add(m_unshelveTime); + } + + if (m_timedShelveMethod != null) + { + children.Add(m_timedShelveMethod); + } + + if (m_unshelveMethod != null) + { + children.Add(m_unshelveMethod); + } + + if (m_oneShotShelveMethod != null) + { + children.Add(m_oneShotShelveMethod); + } + + 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 Opc.Ua.BrowseNames.UnshelveTime: + { + if (createOrReplace) + { + if (UnshelveTime == null) + { + if (replacement == null) + { + UnshelveTime = new PropertyState(this); + } + else + { + UnshelveTime = (PropertyState)replacement; + } + } + } + + instance = UnshelveTime; + break; + } + + case Opc.Ua.BrowseNames.TimedShelve: + { + if (createOrReplace) + { + if (TimedShelve == null) + { + if (replacement == null) + { + TimedShelve = new TimedShelveMethodState(this); + } + else + { + TimedShelve = (TimedShelveMethodState)replacement; + } + } + } + + instance = TimedShelve; + break; + } + + case Opc.Ua.BrowseNames.Unshelve: + { + if (createOrReplace) + { + if (Unshelve == null) + { + if (replacement == null) + { + Unshelve = new MethodState(this); + } + else + { + Unshelve = (MethodState)replacement; + } + } + } + + instance = Unshelve; + break; + } + + case Opc.Ua.BrowseNames.OneShotShelve: + { + if (createOrReplace) + { + if (OneShotShelve == null) + { + if (replacement == null) + { + OneShotShelve = new MethodState(this); + } + else + { + OneShotShelve = (MethodState)replacement; + } + } + } + + instance = OneShotShelve; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_unshelveTime; + private TimedShelveMethodState m_timedShelveMethod; + private MethodState m_unshelveMethod; + private MethodState m_oneShotShelveMethod; + #endregion + } + #endif + #endregion + + #region TimedShelveMethodState Class + #if (!OPCUA_EXCLUDE_TimedShelveMethodState) + /// + /// Stores an instance of the TimedShelveMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TimedShelveMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TimedShelveMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new TimedShelveMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFQAAAFRpbWVkU2hlbHZlTWV0aG9kVHlwZQEA1hcALwEA1hfWFwAAAQH/" + + "////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBANcXAC4ARNcXAACWAQAAAAEAKgEBegAA" + + "AAwAAABTaGVsdmluZ1RpbWUBACIB/////wAAAAADAAAAAFUAAABJZiBub3QgMCwgdGhpcyBwYXJhbWV0" + + "ZXIgc3BlY2lmaWVzIGEgZml4ZWQgdGltZSBmb3Igd2hpY2ggdGhlIEFsYXJtIGlzIHRvIGJlIHNoZWx2" + + "ZWQuAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public TimedShelveMethodStateMethodCallHandler 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; + + double shelvingTime = (double)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + shelvingTime); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult TimedShelveMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + double shelvingTime); + #endif + #endregion + + #region LimitAlarmState Class + #if (!OPCUA_EXCLUDE_LimitAlarmState) + /// + /// Stores an instance of the LimitAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class LimitAlarmState : AlarmConditionState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public LimitAlarmState(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(Opc.Ua.ObjectTypes.LimitAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (HighHighLimit != null) + { + HighHighLimit.Initialize(context, HighHighLimit_InitializationString); + } + + if (HighLimit != null) + { + HighLimit.Initialize(context, HighLimit_InitializationString); + } + + if (LowLimit != null) + { + LowLimit.Initialize(context, LowLimit_InitializationString); + } + + if (LowLowLimit != null) + { + LowLowLimit.Initialize(context, LowLowLimit_InitializationString); + } + + if (BaseHighHighLimit != null) + { + BaseHighHighLimit.Initialize(context, BaseHighHighLimit_InitializationString); + } + + if (BaseHighLimit != null) + { + BaseHighLimit.Initialize(context, BaseHighLimit_InitializationString); + } + + if (BaseLowLimit != null) + { + BaseLowLimit.Initialize(context, BaseLowLimit_InitializationString); + } + + if (BaseLowLowLimit != null) + { + BaseLowLowLimit.Initialize(context, BaseLowLowLimit_InitializationString); + } + } + + #region Initialization String + private const string HighHighLimit_InitializationString = + "//////////8VYIkKAgAAAAAADQAAAEhpZ2hIaWdoTGltaXQBAHQrAC4ARHQrAAAAC/////8BAf////8A" + + "AAAA"; + + private const string HighLimit_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAEhpZ2hMaW1pdAEAdSsALgBEdSsAAAAL/////wEB/////wAAAAA="; + + private const string LowLimit_InitializationString = + "//////////8VYIkKAgAAAAAACAAAAExvd0xpbWl0AQB2KwAuAER2KwAAAAv/////AQH/////AAAAAA=="; + + private const string LowLowLimit_InitializationString = + "//////////8VYIkKAgAAAAAACwAAAExvd0xvd0xpbWl0AQB3KwAuAER3KwAAAAv/////AQH/////AAAA" + + "AA=="; + + private const string BaseHighHighLimit_InitializationString = + "//////////8VYIkKAgAAAAAAEQAAAEJhc2VIaWdoSGlnaExpbWl0AQC8QAAuAES8QAAAAAv/////AQH/" + + "////AAAAAA=="; + + private const string BaseHighLimit_InitializationString = + "//////////8VYIkKAgAAAAAADQAAAEJhc2VIaWdoTGltaXQBAL1AAC4ARL1AAAAAC/////8BAf////8A" + + "AAAA"; + + private const string BaseLowLimit_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAEJhc2VMb3dMaW1pdAEAvkAALgBEvkAAAAAL/////wEB/////wAA" + + "AAA="; + + private const string BaseLowLowLimit_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAEJhc2VMb3dMb3dMaW1pdAEAv0AALgBEv0AAAAAL/////wEB////" + + "/wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFgAAAExpbWl0QWxhcm1UeXBlSW5zdGFuY2UBAIsLAQCLC4sLAAD/////" + + "IgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEA5BcALgBE5BcAAAAP/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACQAAAEV2ZW50VHlwZQEA5RcALgBE5RcAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNv" + + "dXJjZU5vZGUBAOYXAC4AROYXAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOYW1l" + + "AQDnFwAuAETnFwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEA6BcALgBE6BcAAAEA" + + "JgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAOkXAC4AROkXAAABACYB////" + + "/wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAOsXAC4AROsXAAAAFf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAgAAABTZXZlcml0eQEA7BcALgBE7BcAAAAF/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EAAAAENvbmRpdGlvbkNsYXNzSWQBAHErAC4ARHErAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABIA" + + "AABDb25kaXRpb25DbGFzc05hbWUBAHIrAC4ARHIrAAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAA0A" + + "AABDb25kaXRpb25OYW1lAQABJAAuAEQBJAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAQnJh" + + "bmNoSWQBAAIkAC4ARAIkAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABSZXRhaW4BAO0XAC4A" + + "RO0XAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUBAAMkAC8BACMjAyQA" + + "AAAV/////wEBBQAAAAEALCMAAQAXJAEALCMAAQAgJAEALCMAAQAtJAEALCMAAQA2JAEALCMAAQA/JAEA" + + "AAAVYIkKAgAAAAAAAgAAAElkAQAEJAAuAEQEJAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAA" + + "UXVhbGl0eQEADCQALwEAKiMMJAAAABP/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGlt" + + "ZXN0YW1wAQANJAAuAEQNJAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABMYXN0U2V2ZXJp" + + "dHkBAA4kAC8BACojDiQAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFt" + + "cAEADyQALgBEDyQAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29tbWVudAEAECQALwEA" + + "KiMQJAAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1wAQARJAAuAEQR" + + "JAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBABIkAC4ARBIkAAAA" + + "DP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQAUJAAvAQBEIxQkAAABAQEAAAABAPkL" + + "AAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBABMkAC8BAEMjEyQAAAEBAQAAAAEA+QsAAQDzCgAA" + + "AAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBABUkAC8BAEUjFSQAAAEBAQAAAAEA+QsAAQANCwEAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAWJAAuAEQWJAAAlgIAAAABACoBAUYAAAAHAAAARXZl" + + "bnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1l" + + "bnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRk" + + "IHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACgAAAEFj" + + "a2VkU3RhdGUBABckAC8BACMjFyQAAAAV/////wEBAQAAAAEALCMBAQADJAEAAAAVYIkKAgAAAAAAAgAA" + + "AElkAQAYJAAuAEQYJAAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNrbm93bGVkZ2UBACkk" + + "AC8BAJcjKSQAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAq" + + "JAAuAEQqJAAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRl" + + "bnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8A" + + "AAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQAtJAAvAQAjIy0kAAAAFf////8B" + + "AQEAAAABACwjAQEAAyQBAAAAFWCJCgIAAAAAAAIAAABJZAEALiQALgBELiQAAAAB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACQAAAElucHV0Tm9kZQEAcysALgBEcysAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAEwAAAFN1cHByZXNzZWRPclNoZWx2ZWQBAGQkAC4ARGQkAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAA0AAABIaWdoSGlnaExpbWl0AQB0KwAuAER0KwAAAAv/////AQH/////AAAAABVgiQoCAAAAAAAJ" + + "AAAASGlnaExpbWl0AQB1KwAuAER1KwAAAAv/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATG93TGlt" + + "aXQBAHYrAC4ARHYrAAAAC/////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABMb3dMb3dMaW1pdAEAdysA" + + "LgBEdysAAAAL/////wEB/////wAAAAAVYIkKAgAAAAAAEQAAAEJhc2VIaWdoSGlnaExpbWl0AQC8QAAu" + + "AES8QAAAAAv/////AQH/////AAAAABVgiQoCAAAAAAANAAAAQmFzZUhpZ2hMaW1pdAEAvUAALgBEvUAA" + + "AAAL/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAEJhc2VMb3dMaW1pdAEAvkAALgBEvkAAAAAL////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADwAAAEJhc2VMb3dMb3dMaW1pdAEAv0AALgBEv0AAAAAL/////wEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState HighHighLimit + { + get + { + return m_highHighLimit; + } + + set + { + if (!Object.ReferenceEquals(m_highHighLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_highHighLimit = value; + } + } + + /// + public PropertyState HighLimit + { + get + { + return m_highLimit; + } + + set + { + if (!Object.ReferenceEquals(m_highLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_highLimit = value; + } + } + + /// + public PropertyState LowLimit + { + get + { + return m_lowLimit; + } + + set + { + if (!Object.ReferenceEquals(m_lowLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lowLimit = value; + } + } + + /// + public PropertyState LowLowLimit + { + get + { + return m_lowLowLimit; + } + + set + { + if (!Object.ReferenceEquals(m_lowLowLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lowLowLimit = value; + } + } + + /// + public PropertyState BaseHighHighLimit + { + get + { + return m_baseHighHighLimit; + } + + set + { + if (!Object.ReferenceEquals(m_baseHighHighLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseHighHighLimit = value; + } + } + + /// + public PropertyState BaseHighLimit + { + get + { + return m_baseHighLimit; + } + + set + { + if (!Object.ReferenceEquals(m_baseHighLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseHighLimit = value; + } + } + + /// + public PropertyState BaseLowLimit + { + get + { + return m_baseLowLimit; + } + + set + { + if (!Object.ReferenceEquals(m_baseLowLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseLowLimit = value; + } + } + + /// + public PropertyState BaseLowLowLimit + { + get + { + return m_baseLowLowLimit; + } + + set + { + if (!Object.ReferenceEquals(m_baseLowLowLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseLowLowLimit = 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_highHighLimit != null) + { + children.Add(m_highHighLimit); + } + + if (m_highLimit != null) + { + children.Add(m_highLimit); + } + + if (m_lowLimit != null) + { + children.Add(m_lowLimit); + } + + if (m_lowLowLimit != null) + { + children.Add(m_lowLowLimit); + } + + if (m_baseHighHighLimit != null) + { + children.Add(m_baseHighHighLimit); + } + + if (m_baseHighLimit != null) + { + children.Add(m_baseHighLimit); + } + + if (m_baseLowLimit != null) + { + children.Add(m_baseLowLimit); + } + + if (m_baseLowLowLimit != null) + { + children.Add(m_baseLowLowLimit); + } + + 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 Opc.Ua.BrowseNames.HighHighLimit: + { + if (createOrReplace) + { + if (HighHighLimit == null) + { + if (replacement == null) + { + HighHighLimit = new PropertyState(this); + } + else + { + HighHighLimit = (PropertyState)replacement; + } + } + } + + instance = HighHighLimit; + break; + } + + case Opc.Ua.BrowseNames.HighLimit: + { + if (createOrReplace) + { + if (HighLimit == null) + { + if (replacement == null) + { + HighLimit = new PropertyState(this); + } + else + { + HighLimit = (PropertyState)replacement; + } + } + } + + instance = HighLimit; + break; + } + + case Opc.Ua.BrowseNames.LowLimit: + { + if (createOrReplace) + { + if (LowLimit == null) + { + if (replacement == null) + { + LowLimit = new PropertyState(this); + } + else + { + LowLimit = (PropertyState)replacement; + } + } + } + + instance = LowLimit; + break; + } + + case Opc.Ua.BrowseNames.LowLowLimit: + { + if (createOrReplace) + { + if (LowLowLimit == null) + { + if (replacement == null) + { + LowLowLimit = new PropertyState(this); + } + else + { + LowLowLimit = (PropertyState)replacement; + } + } + } + + instance = LowLowLimit; + break; + } + + case Opc.Ua.BrowseNames.BaseHighHighLimit: + { + if (createOrReplace) + { + if (BaseHighHighLimit == null) + { + if (replacement == null) + { + BaseHighHighLimit = new PropertyState(this); + } + else + { + BaseHighHighLimit = (PropertyState)replacement; + } + } + } + + instance = BaseHighHighLimit; + break; + } + + case Opc.Ua.BrowseNames.BaseHighLimit: + { + if (createOrReplace) + { + if (BaseHighLimit == null) + { + if (replacement == null) + { + BaseHighLimit = new PropertyState(this); + } + else + { + BaseHighLimit = (PropertyState)replacement; + } + } + } + + instance = BaseHighLimit; + break; + } + + case Opc.Ua.BrowseNames.BaseLowLimit: + { + if (createOrReplace) + { + if (BaseLowLimit == null) + { + if (replacement == null) + { + BaseLowLimit = new PropertyState(this); + } + else + { + BaseLowLimit = (PropertyState)replacement; + } + } + } + + instance = BaseLowLimit; + break; + } + + case Opc.Ua.BrowseNames.BaseLowLowLimit: + { + if (createOrReplace) + { + if (BaseLowLowLimit == null) + { + if (replacement == null) + { + BaseLowLowLimit = new PropertyState(this); + } + else + { + BaseLowLowLimit = (PropertyState)replacement; + } + } + } + + instance = BaseLowLowLimit; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_highHighLimit; + private PropertyState m_highLimit; + private PropertyState m_lowLimit; + private PropertyState m_lowLowLimit; + private PropertyState m_baseHighHighLimit; + private PropertyState m_baseHighLimit; + private PropertyState m_baseLowLimit; + private PropertyState m_baseLowLowLimit; + #endregion + } + #endif + #endregion + + #region ExclusiveLimitStateMachineState Class + #if (!OPCUA_EXCLUDE_ExclusiveLimitStateMachineState) + /// + /// Stores an instance of the ExclusiveLimitStateMachineType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExclusiveLimitStateMachineState : FiniteStateMachineState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExclusiveLimitStateMachineState(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(Opc.Ua.ObjectTypes.ExclusiveLimitStateMachineType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEV4Y2x1c2l2ZUxpbWl0U3RhdGVNYWNoaW5lVHlwZUluc3RhbmNl" + + "AQBmJAEAZiRmJAAA/////wEAAAAVYIkKAgAAAAAADAAAAEN1cnJlbnRTdGF0ZQEAZyQALwEAyApnJAAA" + + "ABX/////AQH/////AQAAABVgiQoCAAAAAAACAAAASWQBAGgkAC4ARGgkAAAAEf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ExclusiveLimitAlarmState Class + #if (!OPCUA_EXCLUDE_ExclusiveLimitAlarmState) + /// + /// Stores an instance of the ExclusiveLimitAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExclusiveLimitAlarmState : LimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExclusiveLimitAlarmState(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(Opc.Ua.ObjectTypes.ExclusiveLimitAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAEV4Y2x1c2l2ZUxpbWl0QWxhcm1UeXBlSW5zdGFuY2UBAH0kAQB9" + + "JH0kAAD/////GwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAfiQALgBEfiQAAAAP/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAfyQALgBEfyQAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5vZGUBAIAkAC4ARIAkAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABT" + + "b3VyY2VOYW1lAQCBJAAuAESBJAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAgiQA" + + "LgBEgiQAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAIMkAC4ARIMk" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAIUkAC4ARIUkAAAAFf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAhiQALgBEhiQAAAAF/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBAHgrAC4ARHgrAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABIAAABDb25kaXRpb25DbGFzc05hbWUBAHkrAC4ARHkrAAAAFf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA0AAABDb25kaXRpb25OYW1lAQCHJAAuAESHJAAAAAz/////AQH/////AAAAABVgiQoCAAAA" + + "AAAIAAAAQnJhbmNoSWQBAIgkAC4ARIgkAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABSZXRh" + + "aW4BAIkkAC4ARIkkAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUBAIok" + + "AC8BACMjiiQAAAAV/////wEBBQAAAAEALCMAAQCgJAEALCMAAQCpJAEALCMAAQC2JAEALCMAAQC/JAEA" + + "LCMAAQDIJAEAAAAVYIkKAgAAAAAAAgAAAElkAQCLJAAuAESLJAAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAHAAAAUXVhbGl0eQEAkyQALwEAKiOTJAAAABP/////AQH/////AQAAABVgiQoCAAAAAAAPAAAA" + + "U291cmNlVGltZXN0YW1wAQCUJAAuAESUJAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABM" + + "YXN0U2V2ZXJpdHkBAJUkAC8BACojlSQAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJj" + + "ZVRpbWVzdGFtcAEAliQALgBEliQAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29tbWVu" + + "dAEAlyQALwEAKiOXJAAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1w" + + "AQCYJAAuAESYJAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBAJkk" + + "AC4ARJkkAAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQCbJAAvAQBEI5skAAAB" + + "AQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBAJokAC8BAEMjmiQAAAEBAQAAAAEA" + + "+QsAAQDzCgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBAJwkAC8BAEUjnCQAAAEBAQAAAAEA+QsA" + + "AQANCwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCdJAAuAESdJAAAlgIAAAABACoBAUYA" + + "AAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50" + + "IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1l" + + "bnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAEFja2VkU3RhdGUBAKAkAC8BACMjoCQAAAAV/////wEBAQAAAAEALCMBAQCKJAEAAAAVYIkK" + + "AgAAAAAAAgAAAElkAQChJAAuAEShJAAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNrbm93" + + "bGVkZ2UBALIkAC8BAJcjsiQAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJn" + + "dW1lbnRzAQCzJAAuAESzJAAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgA" + + "AABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1l" + + "bnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQC2JAAvAQAjI7Yk" + + "AAAAFf////8BAQIAAAABACwjAQEAiiQBACwjAAEA7yQBAAAAFWCJCgIAAAAAAAIAAABJZAEAtyQALgBE" + + "tyQAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAElucHV0Tm9kZQEAeisALgBEeisAAAAR////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFN1cHByZXNzZWRPclNoZWx2ZWQBAO0kAC4ARO0kAAAAAf//" + + "//8BAf////8AAAAABGCACgEAAAAAAAoAAABMaW1pdFN0YXRlAQDvJAAvAQBmJO8kAAABAAAAAQAsIwEB" + + "ALYkAgAAABVgiQoCAAAAAAAMAAAAQ3VycmVudFN0YXRlAQDwJAAvAQDICvAkAAAAFf////8BAf////8B" + + "AAAAFWCJCgIAAAAAAAIAAABJZAEA8SQALgBE8SQAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAADgAA" + + "AExhc3RUcmFuc2l0aW9uAQD1JAAvAQDPCvUkAAAAFf////8BAf////8CAAAAFWCJCgIAAAAAAAIAAABJ" + + "ZAEA9iQALgBE9iQAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQD5" + + "JAAuAET5JAAAAQAmAf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public ExclusiveLimitStateMachineState LimitState + { + get + { + return m_limitState; + } + + set + { + if (!Object.ReferenceEquals(m_limitState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_limitState = 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_limitState != null) + { + children.Add(m_limitState); + } + + 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 Opc.Ua.BrowseNames.LimitState: + { + if (createOrReplace) + { + if (LimitState == null) + { + if (replacement == null) + { + LimitState = new ExclusiveLimitStateMachineState(this); + } + else + { + LimitState = (ExclusiveLimitStateMachineState)replacement; + } + } + } + + instance = LimitState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private ExclusiveLimitStateMachineState m_limitState; + #endregion + } + #endif + #endregion + + #region NonExclusiveLimitAlarmState Class + #if (!OPCUA_EXCLUDE_NonExclusiveLimitAlarmState) + /// + /// Stores an instance of the NonExclusiveLimitAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NonExclusiveLimitAlarmState : LimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NonExclusiveLimitAlarmState(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(Opc.Ua.ObjectTypes.NonExclusiveLimitAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (HighHighState != null) + { + HighHighState.Initialize(context, HighHighState_InitializationString); + } + + if (HighState != null) + { + HighState.Initialize(context, HighState_InitializationString); + } + + if (LowState != null) + { + LowState.Initialize(context, LowState_InitializationString); + } + + if (LowLowState != null) + { + LowLowState.Initialize(context, LowLowState_InitializationString); + } + } + + #region Initialization String + private const string HighHighState_InitializationString = + "//////////8VYIkKAgAAAAAADQAAAEhpZ2hIaWdoU3RhdGUBACQnAC8BACMjJCcAAAAV/////wEBAQAA" + + "AAEALCMBAQDrJgQAAAAVYIkKAgAAAAAAAgAAAElkAQAlJwAuAEQlJwAAAAH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAOAAAAVHJhbnNpdGlvblRpbWUBACknAC4ARCknAAABACYB/////wEB/////wAAAAAVYKkK" + + "AgAAAAAACQAAAFRydWVTdGF0ZQEAKycALgBEKycAABUDAgAAAGVuDwAAAEhpZ2hIaWdoIGFjdGl2ZQAV" + + "/////wEB/////wAAAAAVYKkKAgAAAAAACgAAAEZhbHNlU3RhdGUBACwnAC4ARCwnAAAVAwIAAABlbhEA" + + "AABIaWdoSGlnaCBpbmFjdGl2ZQAV/////wEB/////wAAAAA="; + + private const string HighState_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAEhpZ2hTdGF0ZQEALScALwEAIyMtJwAAABX/////AQEBAAAAAQAs" + + "IwEBAOsmBAAAABVgiQoCAAAAAAACAAAASWQBAC4nAC4ARC4nAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAA4AAABUcmFuc2l0aW9uVGltZQEAMicALgBEMicAAAEAJgH/////AQH/////AAAAABVgqQoCAAAA" + + "AAAJAAAAVHJ1ZVN0YXRlAQA0JwAuAEQ0JwAAFQMCAAAAZW4LAAAASGlnaCBhY3RpdmUAFf////8BAf//" + + "//8AAAAAFWCpCgIAAAAAAAoAAABGYWxzZVN0YXRlAQA1JwAuAEQ1JwAAFQMCAAAAZW4NAAAASGlnaCBp" + + "bmFjdGl2ZQAV/////wEB/////wAAAAA="; + + private const string LowState_InitializationString = + "//////////8VYIkKAgAAAAAACAAAAExvd1N0YXRlAQA2JwAvAQAjIzYnAAAAFf////8BAQEAAAABACwj" + + "AQEA6yYEAAAAFWCJCgIAAAAAAAIAAABJZAEANycALgBENycAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADgAAAFRyYW5zaXRpb25UaW1lAQA7JwAuAEQ7JwAAAQAmAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AAkAAABUcnVlU3RhdGUBAD0nAC4ARD0nAAAVAwIAAABlbgoAAABMb3cgYWN0aXZlABX/////AQH/////" + + "AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEAPicALgBEPicAABUDAgAAAGVuDAAAAExvdyBpbmFj" + + "dGl2ZQAV/////wEB/////wAAAAA="; + + private const string LowLowState_InitializationString = + "//////////8VYIkKAgAAAAAACwAAAExvd0xvd1N0YXRlAQA/JwAvAQAjIz8nAAAAFf////8BAQEAAAAB" + + "ACwjAQEA6yYEAAAAFWCJCgIAAAAAAAIAAABJZAEAQCcALgBEQCcAAAAB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQBEJwAuAEREJwAAAQAmAf////8BAf////8AAAAAFWCpCgIA" + + "AAAAAAkAAABUcnVlU3RhdGUBAEYnAC4AREYnAAAVAwIAAABlbg0AAABMb3dMb3cgYWN0aXZlABX/////" + + "AQH/////AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEARycALgBERycAABUDAgAAAGVuDwAAAExv" + + "d0xvdyBpbmFjdGl2ZQAV/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAIgAAAE5vbkV4Y2x1c2l2ZUxpbWl0QWxhcm1UeXBlSW5zdGFuY2UBALIm" + + "AQCyJrImAAD/////HgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAsyYALgBEsyYAAAAP/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAtCYALgBEtCYAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5vZGUBALUmAC4ARLUmAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABTb3VyY2VOYW1lAQC2JgAuAES2JgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEA" + + "tyYALgBEtyYAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBALgmAC4A" + + "RLgmAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBALomAC4ARLomAAAAFf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAuyYALgBEuyYAAAAF/////wEB/////wAA" + + "AAAVYIkKAgAAAAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBAIQrAC4ARIQrAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABIAAABDb25kaXRpb25DbGFzc05hbWUBAIUrAC4ARIUrAAAAFf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA0AAABDb25kaXRpb25OYW1lAQC8JgAuAES8JgAAAAz/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAQnJhbmNoSWQBAL0mAC4ARL0mAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABS" + + "ZXRhaW4BAL4mAC4ARL4mAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUB" + + "AL8mAC8BACMjvyYAAAAV/////wEBBQAAAAEALCMAAQDVJgEALCMAAQDeJgEALCMAAQDrJgEALCMAAQD0" + + "JgEALCMAAQD9JgEAAAAVYIkKAgAAAAAAAgAAAElkAQDAJgAuAETAJgAAAAH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAHAAAAUXVhbGl0eQEAyCYALwEAKiPIJgAAABP/////AQH/////AQAAABVgiQoCAAAAAAAP" + + "AAAAU291cmNlVGltZXN0YW1wAQDJJgAuAETJJgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwA" + + "AABMYXN0U2V2ZXJpdHkBAMomAC8BACojyiYAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNv" + + "dXJjZVRpbWVzdGFtcAEAyyYALgBEyyYAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29t" + + "bWVudAEAzCYALwEAKiPMJgAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0" + + "YW1wAQDNJgAuAETNJgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQB" + + "AM4mAC4ARM4mAAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQDQJgAvAQBEI9Am" + + "AAABAQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBAM8mAC8BAEMjzyYAAAEBAQAA" + + "AAEA+QsAAQDzCgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBANEmAC8BAEUj0SYAAAEBAQAAAAEA" + + "+QsAAQANCwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDSJgAuAETSJgAAlgIAAAABACoB" + + "AUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2" + + "ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNv" + + "bW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAEFja2VkU3RhdGUBANUmAC8BACMj1SYAAAAV/////wEBAQAAAAEALCMBAQC/JgEAAAAV" + + "YIkKAgAAAAAAAgAAAElkAQDWJgAuAETWJgAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNr" + + "bm93bGVkZ2UBAOcmAC8BAJcj5yYAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0" + + "QXJndW1lbnRzAQDoJgAuAEToJgAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAA" + + "ACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENv" + + "bW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24u" + + "AQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQDrJgAvAQAj" + + "I+smAAAAFf////8BAQUAAAABACwjAQEAvyYBACwjAAEAJCcBACwjAAEALScBACwjAAEANicBACwjAAEA" + + "PycBAAAAFWCJCgIAAAAAAAIAAABJZAEA7CYALgBE7CYAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CQAAAElucHV0Tm9kZQEAhisALgBEhisAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFN1cHBy" + + "ZXNzZWRPclNoZWx2ZWQBACInAC4ARCInAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAA0AAABIaWdo" + + "SGlnaFN0YXRlAQAkJwAvAQAjIyQnAAAAFf////8BAQEAAAABACwjAQEA6yYEAAAAFWCJCgIAAAAAAAIA" + + "AABJZAEAJScALgBEJScAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1l" + + "AQApJwAuAEQpJwAAAQAmAf////8BAf////8AAAAAFWCpCgIAAAAAAAkAAABUcnVlU3RhdGUBACsnAC4A" + + "RCsnAAAVAwIAAABlbg8AAABIaWdoSGlnaCBhY3RpdmUAFf////8BAf////8AAAAAFWCpCgIAAAAAAAoA" + + "AABGYWxzZVN0YXRlAQAsJwAuAEQsJwAAFQMCAAAAZW4RAAAASGlnaEhpZ2ggaW5hY3RpdmUAFf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABIaWdoU3RhdGUBAC0nAC8BACMjLScAAAAV/////wEBAQAAAAEA" + + "LCMBAQDrJgQAAAAVYIkKAgAAAAAAAgAAAElkAQAuJwAuAEQuJwAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAOAAAAVHJhbnNpdGlvblRpbWUBADInAC4ARDInAAABACYB/////wEB/////wAAAAAVYKkKAgAA" + + "AAAACQAAAFRydWVTdGF0ZQEANCcALgBENCcAABUDAgAAAGVuCwAAAEhpZ2ggYWN0aXZlABX/////AQH/" + + "////AAAAABVgqQoCAAAAAAAKAAAARmFsc2VTdGF0ZQEANScALgBENScAABUDAgAAAGVuDQAAAEhpZ2gg" + + "aW5hY3RpdmUAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABMb3dTdGF0ZQEANicALwEAIyM2JwAA" + + "ABX/////AQEBAAAAAQAsIwEBAOsmBAAAABVgiQoCAAAAAAACAAAASWQBADcnAC4ARDcnAAAAAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAA4AAABUcmFuc2l0aW9uVGltZQEAOycALgBEOycAAAEAJgH/////AQH/" + + "////AAAAABVgqQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQA9JwAuAEQ9JwAAFQMCAAAAZW4KAAAATG93IGFj" + + "dGl2ZQAV/////wEB/////wAAAAAVYKkKAgAAAAAACgAAAEZhbHNlU3RhdGUBAD4nAC4ARD4nAAAVAwIA" + + "AABlbgwAAABMb3cgaW5hY3RpdmUAFf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABMb3dMb3dTdGF0" + + "ZQEAPycALwEAIyM/JwAAABX/////AQEBAAAAAQAsIwEBAOsmBAAAABVgiQoCAAAAAAACAAAASWQBAEAn" + + "AC4AREAnAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABUcmFuc2l0aW9uVGltZQEARCcALgBE" + + "RCcAAAEAJgH/////AQH/////AAAAABVgqQoCAAAAAAAJAAAAVHJ1ZVN0YXRlAQBGJwAuAERGJwAAFQMC" + + "AAAAZW4NAAAATG93TG93IGFjdGl2ZQAV/////wEB/////wAAAAAVYKkKAgAAAAAACgAAAEZhbHNlU3Rh" + + "dGUBAEcnAC4AREcnAAAVAwIAAABlbg8AAABMb3dMb3cgaW5hY3RpdmUAFf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public TwoStateVariableState HighHighState + { + get + { + return m_highHighState; + } + + set + { + if (!Object.ReferenceEquals(m_highHighState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_highHighState = value; + } + } + + /// + public TwoStateVariableState HighState + { + get + { + return m_highState; + } + + set + { + if (!Object.ReferenceEquals(m_highState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_highState = value; + } + } + + /// + public TwoStateVariableState LowState + { + get + { + return m_lowState; + } + + set + { + if (!Object.ReferenceEquals(m_lowState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lowState = value; + } + } + + /// + public TwoStateVariableState LowLowState + { + get + { + return m_lowLowState; + } + + set + { + if (!Object.ReferenceEquals(m_lowLowState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lowLowState = 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_highHighState != null) + { + children.Add(m_highHighState); + } + + if (m_highState != null) + { + children.Add(m_highState); + } + + if (m_lowState != null) + { + children.Add(m_lowState); + } + + if (m_lowLowState != null) + { + children.Add(m_lowLowState); + } + + 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 Opc.Ua.BrowseNames.HighHighState: + { + if (createOrReplace) + { + if (HighHighState == null) + { + if (replacement == null) + { + HighHighState = new TwoStateVariableState(this); + } + else + { + HighHighState = (TwoStateVariableState)replacement; + } + } + } + + instance = HighHighState; + break; + } + + case Opc.Ua.BrowseNames.HighState: + { + if (createOrReplace) + { + if (HighState == null) + { + if (replacement == null) + { + HighState = new TwoStateVariableState(this); + } + else + { + HighState = (TwoStateVariableState)replacement; + } + } + } + + instance = HighState; + break; + } + + case Opc.Ua.BrowseNames.LowState: + { + if (createOrReplace) + { + if (LowState == null) + { + if (replacement == null) + { + LowState = new TwoStateVariableState(this); + } + else + { + LowState = (TwoStateVariableState)replacement; + } + } + } + + instance = LowState; + break; + } + + case Opc.Ua.BrowseNames.LowLowState: + { + if (createOrReplace) + { + if (LowLowState == null) + { + if (replacement == null) + { + LowLowState = new TwoStateVariableState(this); + } + else + { + LowLowState = (TwoStateVariableState)replacement; + } + } + } + + instance = LowLowState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private TwoStateVariableState m_highHighState; + private TwoStateVariableState m_highState; + private TwoStateVariableState m_lowState; + private TwoStateVariableState m_lowLowState; + #endregion + } + #endif + #endregion + + #region NonExclusiveLevelAlarmState Class + #if (!OPCUA_EXCLUDE_NonExclusiveLevelAlarmState) + /// + /// Stores an instance of the NonExclusiveLevelAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NonExclusiveLevelAlarmState : NonExclusiveLimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NonExclusiveLevelAlarmState(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(Opc.Ua.ObjectTypes.NonExclusiveLevelAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAE5vbkV4Y2x1c2l2ZUxldmVsQWxhcm1UeXBlSW5zdGFuY2UBAEwn" + + "AQBMJ0wnAAD/////GgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEATScALgBETScAAAAP/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEATicALgBETicAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5vZGUBAE8nAC4ARE8nAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABTb3VyY2VOYW1lAQBQJwAuAERQJwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEA" + + "UScALgBEUScAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAFInAC4A" + + "RFInAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAFQnAC4ARFQnAAAAFf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAVScALgBEVScAAAAF/////wEB/////wAA" + + "AAAVYIkKAgAAAAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBAIcrAC4ARIcrAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABIAAABDb25kaXRpb25DbGFzc05hbWUBAIgrAC4ARIgrAAAAFf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA0AAABDb25kaXRpb25OYW1lAQBWJwAuAERWJwAAAAz/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAQnJhbmNoSWQBAFcnAC4ARFcnAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABS" + + "ZXRhaW4BAFgnAC4ARFgnAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUB" + + "AFknAC8BACMjWScAAAAV/////wEBBQAAAAEALCMAAQBvJwEALCMAAQB4JwEALCMAAQCFJwEALCMAAQCO" + + "JwEALCMAAQCXJwEAAAAVYIkKAgAAAAAAAgAAAElkAQBaJwAuAERaJwAAAAH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAHAAAAUXVhbGl0eQEAYicALwEAKiNiJwAAABP/////AQH/////AQAAABVgiQoCAAAAAAAP" + + "AAAAU291cmNlVGltZXN0YW1wAQBjJwAuAERjJwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwA" + + "AABMYXN0U2V2ZXJpdHkBAGQnAC8BACojZCcAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNv" + + "dXJjZVRpbWVzdGFtcAEAZScALgBEZScAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29t" + + "bWVudAEAZicALwEAKiNmJwAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0" + + "YW1wAQBnJwAuAERnJwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQB" + + "AGgnAC4ARGgnAAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQBqJwAvAQBEI2on" + + "AAABAQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBAGknAC8BAEMjaScAAAEBAQAA" + + "AAEA+QsAAQDzCgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBAGsnAC8BAEUjaycAAAEBAQAAAAEA" + + "+QsAAQANCwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBsJwAuAERsJwAAlgIAAAABACoB" + + "AUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2" + + "ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNv" + + "bW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAEFja2VkU3RhdGUBAG8nAC8BACMjbycAAAAV/////wEBAQAAAAEALCMBAQBZJwEAAAAV" + + "YIkKAgAAAAAAAgAAAElkAQBwJwAuAERwJwAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNr" + + "bm93bGVkZ2UBAIEnAC8BAJcjgScAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0" + + "QXJndW1lbnRzAQCCJwAuAESCJwAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAA" + + "ACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENv" + + "bW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24u" + + "AQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQCFJwAvAQAj" + + "I4UnAAAAFf////8BAQUAAAABACwjAQEAWScBACwjAAEAvicBACwjAAEAxycBACwjAAEA0CcBACwjAAEA" + + "2ScBAAAAFWCJCgIAAAAAAAIAAABJZAEAhicALgBEhicAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CQAAAElucHV0Tm9kZQEAiSsALgBEiSsAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFN1cHBy" + + "ZXNzZWRPclNoZWx2ZWQBALwnAC4ARLwnAAAAAf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ExclusiveLevelAlarmState Class + #if (!OPCUA_EXCLUDE_ExclusiveLevelAlarmState) + /// + /// Stores an instance of the ExclusiveLevelAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExclusiveLevelAlarmState : ExclusiveLimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExclusiveLevelAlarmState(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(Opc.Ua.ObjectTypes.ExclusiveLevelAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAEV4Y2x1c2l2ZUxldmVsQWxhcm1UeXBlSW5zdGFuY2UBAAolAQAK" + + "JQolAAD/////GwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEACyUALgBECyUAAAAP/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEADCUALgBEDCUAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5vZGUBAA0lAC4ARA0lAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABT" + + "b3VyY2VOYW1lAQAOJQAuAEQOJQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEADyUA" + + "LgBEDyUAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBABAlAC4ARBAl" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBABIlAC4ARBIlAAAAFf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAEyUALgBEEyUAAAAF/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBAHsrAC4ARHsrAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABIAAABDb25kaXRpb25DbGFzc05hbWUBAHwrAC4ARHwrAAAAFf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA0AAABDb25kaXRpb25OYW1lAQAUJQAuAEQUJQAAAAz/////AQH/////AAAAABVgiQoCAAAA" + + "AAAIAAAAQnJhbmNoSWQBABUlAC4ARBUlAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABSZXRh" + + "aW4BABYlAC4ARBYlAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUBABcl" + + "AC8BACMjFyUAAAAV/////wEBBQAAAAEALCMAAQAtJQEALCMAAQA2JQEALCMAAQBDJQEALCMAAQBMJQEA" + + "LCMAAQBVJQEAAAAVYIkKAgAAAAAAAgAAAElkAQAYJQAuAEQYJQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAHAAAAUXVhbGl0eQEAICUALwEAKiMgJQAAABP/////AQH/////AQAAABVgiQoCAAAAAAAPAAAA" + + "U291cmNlVGltZXN0YW1wAQAhJQAuAEQhJQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABM" + + "YXN0U2V2ZXJpdHkBACIlAC8BACojIiUAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJj" + + "ZVRpbWVzdGFtcAEAIyUALgBEIyUAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29tbWVu" + + "dAEAJCUALwEAKiMkJQAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1w" + + "AQAlJQAuAEQlJQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBACYl" + + "AC4ARCYlAAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQAoJQAvAQBEIyglAAAB" + + "AQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBACclAC8BAEMjJyUAAAEBAQAAAAEA" + + "+QsAAQDzCgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBACklAC8BAEUjKSUAAAEBAQAAAAEA+QsA" + + "AQANCwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAqJQAuAEQqJQAAlgIAAAABACoBAUYA" + + "AAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50" + + "IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1l" + + "bnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAEFja2VkU3RhdGUBAC0lAC8BACMjLSUAAAAV/////wEBAQAAAAEALCMBAQAXJQEAAAAVYIkK" + + "AgAAAAAAAgAAAElkAQAuJQAuAEQuJQAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNrbm93" + + "bGVkZ2UBAD8lAC8BAJcjPyUAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJn" + + "dW1lbnRzAQBAJQAuAERAJQAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgA" + + "AABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1l" + + "bnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQBDJQAvAQAjI0Ml" + + "AAAAFf////8BAQIAAAABACwjAQEAFyUBACwjAAEAfCUBAAAAFWCJCgIAAAAAAAIAAABJZAEARCUALgBE" + + "RCUAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAElucHV0Tm9kZQEAfSsALgBEfSsAAAAR////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFN1cHByZXNzZWRPclNoZWx2ZWQBAHolAC4ARHolAAAAAf//" + + "//8BAf////8AAAAABGCACgEAAAAAAAoAAABMaW1pdFN0YXRlAQB8JQAvAQBmJHwlAAABAAAAAQAsIwEB" + + "AEMlAQAAABVgiQoCAAAAAAAMAAAAQ3VycmVudFN0YXRlAQB9JQAvAQDICn0lAAAAFf////8BAf////8B" + + "AAAAFWCJCgIAAAAAAAIAAABJZAEAfiUALgBEfiUAAAAR/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region NonExclusiveDeviationAlarmState Class + #if (!OPCUA_EXCLUDE_NonExclusiveDeviationAlarmState) + /// + /// Stores an instance of the NonExclusiveDeviationAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NonExclusiveDeviationAlarmState : NonExclusiveLimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NonExclusiveDeviationAlarmState(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(Opc.Ua.ObjectTypes.NonExclusiveDeviationAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (BaseSetpointNode != null) + { + BaseSetpointNode.Initialize(context, BaseSetpointNode_InitializationString); + } + } + + #region Initialization String + private const string BaseSetpointNode_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEJhc2VTZXRwb2ludE5vZGUBAIhBAC4ARIhBAAAAEf////8BAf//" + + "//8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJgAAAE5vbkV4Y2x1c2l2ZURldmlhdGlvbkFsYXJtVHlwZUluc3RhbmNl" + + "AQCAKAEAgCiAKAAA/////xwAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAIEoAC4ARIEoAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAIIoAC4ARIIoAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQCDKAAuAESDKAAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEAhCgALgBEhCgAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAIUoAC4ARIUoAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCG" + + "KAAuAESGKAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCIKAAuAESIKAAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAIkoAC4ARIkoAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQCNKwAuAESNKwAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQCOKwAuAESOKwAAABX/////AQH/////" + + "AAAAABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEAiigALgBEiigAAAAM/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAEJyYW5jaElkAQCLKAAuAESLKAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAG" + + "AAAAUmV0YWluAQCMKAAuAESMKAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0" + + "YXRlAQCNKAAvAQAjI40oAAAAFf////8BAQUAAAABACwjAAEAoygBACwjAAEArCgBACwjAAEAuSgBACwj" + + "AAEAwigBACwjAAEAyygBAAAAFWCJCgIAAAAAAAIAAABJZAEAjigALgBEjigAAAAB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABwAAAFF1YWxpdHkBAJYoAC8BACojligAAAAT/////wEB/////wEAAAAVYIkKAgAA" + + "AAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAlygALgBElygAAAEAJgH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAMAAAATGFzdFNldmVyaXR5AQCYKAAvAQAqI5goAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8A" + + "AABTb3VyY2VUaW1lc3RhbXABAJkoAC4ARJkoAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAA" + + "AENvbW1lbnQBAJooAC8BACojmigAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRp" + + "bWVzdGFtcAEAmygALgBEmygAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNl" + + "cklkAQCcKAAuAEScKAAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAnigALwEA" + + "RCOeKAAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQCdKAAvAQBDI50oAAAB" + + "AQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQCfKAAvAQBFI58oAAABAQEA" + + "AAABAPkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAoCgALgBEoCgAAJYCAAAA" + + "AQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRo" + + "ZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRo" + + "ZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABBY2tlZFN0YXRlAQCjKAAvAQAjI6MoAAAAFf////8BAQEAAAABACwjAQEAjSgB" + + "AAAAFWCJCgIAAAAAAAIAAABJZAEApCgALgBEpCgAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAA" + + "AEFja25vd2xlZGdlAQC1KAAvAQCXI7UoAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJ" + + "bnB1dEFyZ3VtZW50cwEAtigALgBEtigAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAA" + + "AwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcA" + + "AABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0" + + "aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEAuSgA" + + "LwEAIyO5KAAAABX/////AQEFAAAAAQAsIwEBAI0oAQAsIwABAPIoAQAsIwABAPsoAQAsIwABAAQpAQAs" + + "IwABAA0pAQAAABVgiQoCAAAAAAACAAAASWQBALooAC4ARLooAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAkAAABJbnB1dE5vZGUBAI8rAC4ARI8rAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABT" + + "dXBwcmVzc2VkT3JTaGVsdmVkAQDwKAAuAETwKAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAA" + + "U2V0cG9pbnROb2RlAQAaKQAuAEQaKQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAQmFzZVNl" + + "dHBvaW50Tm9kZQEAiEEALgBEiEEAAAAR/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SetpointNode + { + get + { + return m_setpointNode; + } + + set + { + if (!Object.ReferenceEquals(m_setpointNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setpointNode = value; + } + } + + /// + public PropertyState BaseSetpointNode + { + get + { + return m_baseSetpointNode; + } + + set + { + if (!Object.ReferenceEquals(m_baseSetpointNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseSetpointNode = 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_setpointNode != null) + { + children.Add(m_setpointNode); + } + + if (m_baseSetpointNode != null) + { + children.Add(m_baseSetpointNode); + } + + 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 Opc.Ua.BrowseNames.SetpointNode: + { + if (createOrReplace) + { + if (SetpointNode == null) + { + if (replacement == null) + { + SetpointNode = new PropertyState(this); + } + else + { + SetpointNode = (PropertyState)replacement; + } + } + } + + instance = SetpointNode; + break; + } + + case Opc.Ua.BrowseNames.BaseSetpointNode: + { + if (createOrReplace) + { + if (BaseSetpointNode == null) + { + if (replacement == null) + { + BaseSetpointNode = new PropertyState(this); + } + else + { + BaseSetpointNode = (PropertyState)replacement; + } + } + } + + instance = BaseSetpointNode; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_setpointNode; + private PropertyState m_baseSetpointNode; + #endregion + } + #endif + #endregion + + #region NonExclusiveRateOfChangeAlarmState Class + #if (!OPCUA_EXCLUDE_NonExclusiveRateOfChangeAlarmState) + /// + /// Stores an instance of the NonExclusiveRateOfChangeAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NonExclusiveRateOfChangeAlarmState : NonExclusiveLimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NonExclusiveRateOfChangeAlarmState(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(Opc.Ua.ObjectTypes.NonExclusiveRateOfChangeAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (EngineeringUnits != null) + { + EngineeringUnits.Initialize(context, EngineeringUnits_InitializationString); + } + } + + #region Initialization String + private const string EngineeringUnits_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBANpBAC4ARNpBAAABAHcD/////wEB" + + "/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAKQAAAE5vbkV4Y2x1c2l2ZVJhdGVPZkNoYW5nZUFsYXJtVHlwZUluc3Rh" + + "bmNlAQDmJwEA5ifmJwAA/////xsAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAOcnAC4AROcnAAAAD///" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAOgnAC4AROgnAAAAEf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQDpJwAuAETpJwAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTmFtZQEA6icALgBE6icAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAA" + + "AFRpbWUBAOsnAC4AROsnAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1l" + + "AQDsJwAuAETsJwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDuJwAuAETu" + + "JwAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAO8nAC4ARO8nAAAABf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQCKKwAuAESKKwAAABH/////AQH/" + + "////AAAAABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQCLKwAuAESLKwAAABX/////AQH/" + + "////AAAAABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEA8CcALgBE8CcAAAAM/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACAAAAEJyYW5jaElkAQDxJwAuAETxJwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAGAAAAUmV0YWluAQDyJwAuAETyJwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxl" + + "ZFN0YXRlAQDzJwAvAQAjI/MnAAAAFf////8BAQUAAAABACwjAAEACSgBACwjAAEAEigBACwjAAEAHygB" + + "ACwjAAEAKCgBACwjAAEAMSgBAAAAFWCJCgIAAAAAAAIAAABJZAEA9CcALgBE9CcAAAAB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABwAAAFF1YWxpdHkBAPwnAC8BACoj/CcAAAAT/////wEB/////wEAAAAVYIkK" + + "AgAAAAAADwAAAFNvdXJjZVRpbWVzdGFtcAEA/ScALgBE/ScAAAEAJgH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAMAAAATGFzdFNldmVyaXR5AQD+JwAvAQAqI/4nAAAABf////8BAf////8BAAAAFWCJCgIAAAAA" + + "AA8AAABTb3VyY2VUaW1lc3RhbXABAP8nAC4ARP8nAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BwAAAENvbW1lbnQBAAAoAC8BACojACgAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJj" + + "ZVRpbWVzdGFtcAEAASgALgBEASgAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50" + + "VXNlcklkAQACKAAuAEQCKAAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEABCgA" + + "LwEARCMEKAAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQADKAAvAQBDIwMo" + + "AAABAQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQAFKAAvAQBFIwUoAAAB" + + "AQEAAAABAPkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEABigALgBEBigAAJYC" + + "AAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9y" + + "IHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAA" + + "AFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAAFWCJCgIAAAAAAAoAAABBY2tlZFN0YXRlAQAJKAAvAQAjIwkoAAAAFf////8BAQEAAAABACwjAQEA" + + "8ycBAAAAFWCJCgIAAAAAAAIAAABJZAEACigALgBECigAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAA" + + "CwAAAEFja25vd2xlZGdlAQAbKAAvAQCXIxsoAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4A" + + "AABJbnB1dEFyZ3VtZW50cwEAHCgALgBEHCgAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8A" + + "AAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAA" + + "AAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29u" + + "ZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEA" + + "HygALwEAIyMfKAAAABX/////AQEFAAAAAQAsIwEBAPMnAQAsIwABAFgoAQAsIwABAGEoAQAsIwABAGoo" + + "AQAsIwABAHMoAQAAABVgiQoCAAAAAAACAAAASWQBACAoAC4ARCAoAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAkAAABJbnB1dE5vZGUBAIwrAC4ARIwrAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABMA" + + "AABTdXBwcmVzc2VkT3JTaGVsdmVkAQBWKAAuAERWKAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAARW5naW5lZXJpbmdVbml0cwEA2kEALgBE2kEAAAEAdwP/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EngineeringUnits + { + get + { + return m_engineeringUnits; + } + + set + { + if (!Object.ReferenceEquals(m_engineeringUnits, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_engineeringUnits = 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_engineeringUnits != null) + { + children.Add(m_engineeringUnits); + } + + 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 Opc.Ua.BrowseNames.EngineeringUnits: + { + if (createOrReplace) + { + if (EngineeringUnits == null) + { + if (replacement == null) + { + EngineeringUnits = new PropertyState(this); + } + else + { + EngineeringUnits = (PropertyState)replacement; + } + } + } + + instance = EngineeringUnits; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_engineeringUnits; + #endregion + } + #endif + #endregion + + #region ExclusiveDeviationAlarmState Class + #if (!OPCUA_EXCLUDE_ExclusiveDeviationAlarmState) + /// + /// Stores an instance of the ExclusiveDeviationAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExclusiveDeviationAlarmState : ExclusiveLimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExclusiveDeviationAlarmState(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(Opc.Ua.ObjectTypes.ExclusiveDeviationAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (BaseSetpointNode != null) + { + BaseSetpointNode.Initialize(context, BaseSetpointNode_InitializationString); + } + } + + #region Initialization String + private const string BaseSetpointNode_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEJhc2VTZXRwb2ludE5vZGUBALFBAC4ARLFBAAAAEf////8BAf//" + + "//8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAIwAAAEV4Y2x1c2l2ZURldmlhdGlvbkFsYXJtVHlwZUluc3RhbmNlAQAk" + + "JgEAJCYkJgAA/////x0AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBACUmAC4ARCUmAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBACYmAC4ARCYmAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQAnJgAuAEQnJgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAKCYALgBEKCYAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "ACkmAC4ARCkmAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQAqJgAu" + + "AEQqJgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQAsJgAuAEQsJgAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAC0mAC4ARC0mAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQCBKwAuAESBKwAAABH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQCCKwAuAESCKwAAABX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEALiYALgBELiYAAAAM/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAEJyYW5jaElkAQAvJgAuAEQvJgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAA" + + "UmV0YWluAQAwJgAuAEQwJgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRl" + + "AQAxJgAvAQAjIzEmAAAAFf////8BAQUAAAABACwjAAEARyYBACwjAAEAUCYBACwjAAEAXSYBACwjAAEA" + + "ZiYBACwjAAEAbyYBAAAAFWCJCgIAAAAAAAIAAABJZAEAMiYALgBEMiYAAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAABwAAAFF1YWxpdHkBADomAC8BACojOiYAAAAT/////wEB/////wEAAAAVYIkKAgAAAAAA" + + "DwAAAFNvdXJjZVRpbWVzdGFtcAEAOyYALgBEOyYAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAM" + + "AAAATGFzdFNldmVyaXR5AQA8JgAvAQAqIzwmAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABT" + + "b3VyY2VUaW1lc3RhbXABAD0mAC4ARD0mAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENv" + + "bW1lbnQBAD4mAC8BACojPiYAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVz" + + "dGFtcAEAPyYALgBEPyYAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklk" + + "AQBAJgAuAERAJgAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAQiYALwEARCNC" + + "JgAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQBBJgAvAQBDI0EmAAABAQEA" + + "AAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQBDJgAvAQBFI0MmAAABAQEAAAAB" + + "APkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEARCYALgBERCYAAJYCAAAAAQAq" + + "AQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBl" + + "dmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBj" + + "b21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABBY2tlZFN0YXRlAQBHJgAvAQAjI0cmAAAAFf////8BAQEAAAABACwjAQEAMSYBAAAA" + + "FWCJCgIAAAAAAAIAAABJZAEASCYALgBESCYAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFj" + + "a25vd2xlZGdlAQBZJgAvAQCXI1kmAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1" + + "dEFyZ3VtZW50cwEAWiYALgBEWiYAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAA" + + "AAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABD" + + "b21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9u" + + "LgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEAXSYALwEA" + + "IyNdJgAAABX/////AQECAAAAAQAsIwEBADEmAQAsIwABAJYmAQAAABVgiQoCAAAAAAACAAAASWQBAF4m" + + "AC4ARF4mAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAIMrAC4ARIMrAAAA" + + "Ef////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQCUJgAuAESUJgAA" + + "AAH/////AQH/////AAAAAARggAoBAAAAAAAKAAAATGltaXRTdGF0ZQEAliYALwEAZiSWJgAAAQAAAAEA" + + "LCMBAQBdJgEAAAAVYIkKAgAAAAAADAAAAEN1cnJlbnRTdGF0ZQEAlyYALwEAyAqXJgAAABX/////AQH/" + + "////AQAAABVgiQoCAAAAAAACAAAASWQBAJgmAC4ARJgmAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAwAAABTZXRwb2ludE5vZGUBALEmAC4ARLEmAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABC" + + "YXNlU2V0cG9pbnROb2RlAQCxQQAuAESxQQAAABH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SetpointNode + { + get + { + return m_setpointNode; + } + + set + { + if (!Object.ReferenceEquals(m_setpointNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setpointNode = value; + } + } + + /// + public PropertyState BaseSetpointNode + { + get + { + return m_baseSetpointNode; + } + + set + { + if (!Object.ReferenceEquals(m_baseSetpointNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_baseSetpointNode = 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_setpointNode != null) + { + children.Add(m_setpointNode); + } + + if (m_baseSetpointNode != null) + { + children.Add(m_baseSetpointNode); + } + + 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 Opc.Ua.BrowseNames.SetpointNode: + { + if (createOrReplace) + { + if (SetpointNode == null) + { + if (replacement == null) + { + SetpointNode = new PropertyState(this); + } + else + { + SetpointNode = (PropertyState)replacement; + } + } + } + + instance = SetpointNode; + break; + } + + case Opc.Ua.BrowseNames.BaseSetpointNode: + { + if (createOrReplace) + { + if (BaseSetpointNode == null) + { + if (replacement == null) + { + BaseSetpointNode = new PropertyState(this); + } + else + { + BaseSetpointNode = (PropertyState)replacement; + } + } + } + + instance = BaseSetpointNode; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_setpointNode; + private PropertyState m_baseSetpointNode; + #endregion + } + #endif + #endregion + + #region ExclusiveRateOfChangeAlarmState Class + #if (!OPCUA_EXCLUDE_ExclusiveRateOfChangeAlarmState) + /// + /// Stores an instance of the ExclusiveRateOfChangeAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExclusiveRateOfChangeAlarmState : ExclusiveLimitAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExclusiveRateOfChangeAlarmState(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(Opc.Ua.ObjectTypes.ExclusiveRateOfChangeAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (EngineeringUnits != null) + { + EngineeringUnits.Initialize(context, EngineeringUnits_InitializationString); + } + } + + #region Initialization String + private const string EngineeringUnits_InitializationString = + "//////////8VYIkKAgAAAAAAEAAAAEVuZ2luZWVyaW5nVW5pdHMBAANCAC4ARANCAAABAHcD/////wEB" + + "/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJgAAAEV4Y2x1c2l2ZVJhdGVPZkNoYW5nZUFsYXJtVHlwZUluc3RhbmNl" + + "AQCXJQEAlyWXJQAA/////xwAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAJglAC4ARJglAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAJklAC4ARJklAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQCaJQAuAESaJQAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEAmyUALgBEmyUAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAJwlAC4ARJwlAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCd" + + "JQAuAESdJQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCfJQAuAESfJQAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAKAlAC4ARKAlAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQB+KwAuAER+KwAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQB/KwAuAER/KwAAABX/////AQH/////" + + "AAAAABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEAoSUALgBEoSUAAAAM/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAEJyYW5jaElkAQCiJQAuAESiJQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAG" + + "AAAAUmV0YWluAQCjJQAuAESjJQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0" + + "YXRlAQCkJQAvAQAjI6QlAAAAFf////8BAQUAAAABACwjAAEAuiUBACwjAAEAwyUBACwjAAEA0CUBACwj" + + "AAEA2SUBACwjAAEA4iUBAAAAFWCJCgIAAAAAAAIAAABJZAEApSUALgBEpSUAAAAB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABwAAAFF1YWxpdHkBAK0lAC8BACojrSUAAAAT/////wEB/////wEAAAAVYIkKAgAA" + + "AAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAriUALgBEriUAAAEAJgH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAMAAAATGFzdFNldmVyaXR5AQCvJQAvAQAqI68lAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8A" + + "AABTb3VyY2VUaW1lc3RhbXABALAlAC4ARLAlAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAA" + + "AENvbW1lbnQBALElAC8BACojsSUAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRp" + + "bWVzdGFtcAEAsiUALgBEsiUAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNl" + + "cklkAQCzJQAuAESzJQAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAtSUALwEA" + + "RCO1JQAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQC0JQAvAQBDI7QlAAAB" + + "AQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQC2JQAvAQBFI7YlAAABAQEA" + + "AAABAPkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAtyUALgBEtyUAAJYCAAAA" + + "AQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRo" + + "ZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRo" + + "ZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABBY2tlZFN0YXRlAQC6JQAvAQAjI7olAAAAFf////8BAQEAAAABACwjAQEApCUB" + + "AAAAFWCJCgIAAAAAAAIAAABJZAEAuyUALgBEuyUAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAA" + + "AEFja25vd2xlZGdlAQDMJQAvAQCXI8wlAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJ" + + "bnB1dEFyZ3VtZW50cwEAzSUALgBEzSUAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAA" + + "AwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcA" + + "AABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0" + + "aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEA0CUA" + + "LwEAIyPQJQAAABX/////AQECAAAAAQAsIwEBAKQlAQAsIwABAAkmAQAAABVgiQoCAAAAAAACAAAASWQB" + + "ANElAC4ARNElAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAIArAC4ARIAr" + + "AAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQAHJgAuAEQH" + + "JgAAAAH/////AQH/////AAAAAARggAoBAAAAAAAKAAAATGltaXRTdGF0ZQEACSYALwEAZiQJJgAAAQAA" + + "AAEALCMBAQDQJQEAAAAVYIkKAgAAAAAADAAAAEN1cnJlbnRTdGF0ZQEACiYALwEAyAoKJgAAABX/////" + + "AQH/////AQAAABVgiQoCAAAAAAACAAAASWQBAAsmAC4ARAsmAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABAAAABFbmdpbmVlcmluZ1VuaXRzAQADQgAuAEQDQgAAAQB3A/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EngineeringUnits + { + get + { + return m_engineeringUnits; + } + + set + { + if (!Object.ReferenceEquals(m_engineeringUnits, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_engineeringUnits = 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_engineeringUnits != null) + { + children.Add(m_engineeringUnits); + } + + 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 Opc.Ua.BrowseNames.EngineeringUnits: + { + if (createOrReplace) + { + if (EngineeringUnits == null) + { + if (replacement == null) + { + EngineeringUnits = new PropertyState(this); + } + else + { + EngineeringUnits = (PropertyState)replacement; + } + } + } + + instance = EngineeringUnits; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_engineeringUnits; + #endregion + } + #endif + #endregion + + #region DiscreteAlarmState Class + #if (!OPCUA_EXCLUDE_DiscreteAlarmState) + /// + /// Stores an instance of the DiscreteAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DiscreteAlarmState : AlarmConditionState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DiscreteAlarmState(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(Opc.Ua.ObjectTypes.DiscreteAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGQAAAERpc2NyZXRlQWxhcm1UeXBlSW5zdGFuY2UBABspAQAbKRspAAD/" + + "////GgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAHCkALgBEHCkAAAAP/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACQAAAEV2ZW50VHlwZQEAHSkALgBEHSkAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5vZGUBAB4pAC4ARB4pAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VO" + + "YW1lAQAfKQAuAEQfKQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAICkALgBEICkA" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBACEpAC4ARCEpAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBACMpAC4ARCMpAAAAFf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAJCkALgBEJCkAAAAF/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBAJArAC4ARJArAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABIAAABDb25kaXRpb25DbGFzc05hbWUBAJErAC4ARJErAAAAFf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AA0AAABDb25kaXRpb25OYW1lAQAlKQAuAEQlKQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAA" + + "QnJhbmNoSWQBACYpAC4ARCYpAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABSZXRhaW4BACcp" + + "AC4ARCcpAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUBACgpAC8BACMj" + + "KCkAAAAV/////wEBBQAAAAEALCMAAQA+KQEALCMAAQBHKQEALCMAAQBUKQEALCMAAQBdKQEALCMAAQBm" + + "KQEAAAAVYIkKAgAAAAAAAgAAAElkAQApKQAuAEQpKQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAH" + + "AAAAUXVhbGl0eQEAMSkALwEAKiMxKQAAABP/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNl" + + "VGltZXN0YW1wAQAyKQAuAEQyKQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABMYXN0U2V2" + + "ZXJpdHkBADMpAC8BACojMykAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVz" + + "dGFtcAEANCkALgBENCkAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29tbWVudAEANSkA" + + "LwEAKiM1KQAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1wAQA2KQAu" + + "AEQ2KQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBADcpAC4ARDcp" + + "AAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQA5KQAvAQBEIzkpAAABAQEAAAAB" + + "APkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBADgpAC8BAEMjOCkAAAEBAQAAAAEA+QsAAQDz" + + "CgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBADopAC8BAEUjOikAAAEBAQAAAAEA+QsAAQANCwEA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQA7KQAuAEQ7KQAAlgIAAAABACoBAUYAAAAHAAAA" + + "RXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNv" + + "bW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8g" + + "YWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AEFja2VkU3RhdGUBAD4pAC8BACMjPikAAAAV/////wEBAQAAAAEALCMBAQAoKQEAAAAVYIkKAgAAAAAA" + + "AgAAAElkAQA/KQAuAEQ/KQAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNrbm93bGVkZ2UB" + + "AFApAC8BAJcjUCkAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRz" + + "AQBRKQAuAERRKQAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUg" + + "aWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf//" + + "//8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQBUKQAvAQAjI1QpAAAAFf//" + + "//8BAQEAAAABACwjAQEAKCkBAAAAFWCJCgIAAAAAAAIAAABJZAEAVSkALgBEVSkAAAAB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACQAAAElucHV0Tm9kZQEAkisALgBEkisAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAEwAAAFN1cHByZXNzZWRPclNoZWx2ZWQBAIspAC4ARIspAAAAAf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region OffNormalAlarmState Class + #if (!OPCUA_EXCLUDE_OffNormalAlarmState) + /// + /// Stores an instance of the OffNormalAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OffNormalAlarmState : DiscreteAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OffNormalAlarmState(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(Opc.Ua.ObjectTypes.OffNormalAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGgAAAE9mZk5vcm1hbEFsYXJtVHlwZUluc3RhbmNlAQCNKQEAjSmNKQAA" + + "/////xsAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAI4pAC4ARI4pAAAAD/////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAkAAABFdmVudFR5cGUBAI8pAC4ARI8pAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABTb3VyY2VOb2RlAQCQKQAuAESQKQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNl" + + "TmFtZQEAkSkALgBEkSkAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAJIpAC4ARJIp" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCTKQAuAESTKQAAAQAm" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCVKQAuAESVKQAAABX/////AQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAJYpAC4ARJYpAAAABf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABAAAABDb25kaXRpb25DbGFzc0lkAQCTKwAuAESTKwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQCUKwAuAESUKwAAABX/////AQH/////AAAAABVgiQoCAAAA" + + "AAANAAAAQ29uZGl0aW9uTmFtZQEAlykALgBElykAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAA" + + "AEJyYW5jaElkAQCYKQAuAESYKQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAAUmV0YWluAQCZ" + + "KQAuAESZKQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRlAQCaKQAvAQAj" + + "I5opAAAAFf////8BAQUAAAABACwjAAEAsCkBACwjAAEAuSkBACwjAAEAxikBACwjAAEAzykBACwjAAEA" + + "2CkBAAAAFWCJCgIAAAAAAAIAAABJZAEAmykALgBEmykAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BwAAAFF1YWxpdHkBAKMpAC8BACojoykAAAAT/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJj" + + "ZVRpbWVzdGFtcAEApCkALgBEpCkAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAATGFzdFNl" + + "dmVyaXR5AQClKQAvAQAqI6UpAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1l" + + "c3RhbXABAKYpAC4ARKYpAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1lbnQBAKcp" + + "AC8BACojpykAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAqCkA" + + "LgBEqCkAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQCpKQAuAESp" + + "KQAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAqykALwEARCOrKQAAAQEBAAAA" + + "AQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQCqKQAvAQBDI6opAAABAQEAAAABAPkLAAEA" + + "8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQCsKQAvAQBFI6wpAAABAQEAAAABAPkLAAEADQsB" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEArSkALgBErSkAAJYCAAAAAQAqAQFGAAAABwAA" + + "AEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBj" + + "b21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRv" + + "IGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABBY2tlZFN0YXRlAQCwKQAvAQAjI7ApAAAAFf////8BAQEAAAABACwjAQEAmikBAAAAFWCJCgIAAAAA" + + "AAIAAABJZAEAsSkALgBEsSkAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFja25vd2xlZGdl" + + "AQDCKQAvAQCXI8IpAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEAwykALgBEwykAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhl" + + "IGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/" + + "////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEAxikALwEAIyPGKQAAABX/" + + "////AQEBAAAAAQAsIwEBAJopAQAAABVgiQoCAAAAAAACAAAASWQBAMcpAC4ARMcpAAAAAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAJUrAC4ARJUrAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQD9KQAuAET9KQAAAAH/////AQH/////AAAAABVg" + + "iQoCAAAAAAALAAAATm9ybWFsU3RhdGUBAJYrAC4ARJYrAAAAEf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NormalState + { + get + { + return m_normalState; + } + + set + { + if (!Object.ReferenceEquals(m_normalState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_normalState = 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_normalState != null) + { + children.Add(m_normalState); + } + + 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 Opc.Ua.BrowseNames.NormalState: + { + if (createOrReplace) + { + if (NormalState == null) + { + if (replacement == null) + { + NormalState = new PropertyState(this); + } + else + { + NormalState = (PropertyState)replacement; + } + } + } + + instance = NormalState; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_normalState; + #endregion + } + #endif + #endregion + + #region SystemOffNormalAlarmState Class + #if (!OPCUA_EXCLUDE_SystemOffNormalAlarmState) + /// + /// Stores an instance of the SystemOffNormalAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SystemOffNormalAlarmState : OffNormalAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SystemOffNormalAlarmState(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(Opc.Ua.ObjectTypes.SystemOffNormalAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAFN5c3RlbU9mZk5vcm1hbEFsYXJtVHlwZUluc3RhbmNlAQDpLQEA" + + "6S3pLQAA/////xsAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAOotAC4AROotAAAAD/////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAOstAC4AROstAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOb2RlAQDsLQAuAETsLQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAA" + + "U291cmNlTmFtZQEA7S0ALgBE7S0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAO4t" + + "AC4ARO4tAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQDvLQAuAETv" + + "LQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDxLQAuAETxLQAAABX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAPItAC4ARPItAAAABf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQDzLQAuAETzLQAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQD0LQAuAET0LQAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEA9S0ALgBE9S0AAAAM/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAEJyYW5jaElkAQD2LQAuAET2LQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAAUmV0" + + "YWluAQD3LQAuAET3LQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRlAQD4" + + "LQAvAQAjI/gtAAAAFf////8BAQUAAAABACwjAAEADi4BACwjAAEAFy4BACwjAAEAJC4BACwjAAEALi4B" + + "ACwjAAEANy4BAAAAFWCJCgIAAAAAAAIAAABJZAEA+S0ALgBE+S0AAAAB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAABwAAAFF1YWxpdHkBAAEuAC8BACojAS4AAAAT/////wEB/////wEAAAAVYIkKAgAAAAAADwAA" + + "AFNvdXJjZVRpbWVzdGFtcAEAAi4ALgBEAi4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAA" + + "TGFzdFNldmVyaXR5AQADLgAvAQAqIwMuAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3Vy" + + "Y2VUaW1lc3RhbXABAAQuAC4ARAQuAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1l" + + "bnQBAAUuAC8BACojBS4AAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFt" + + "cAEABi4ALgBEBi4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQAH" + + "LgAuAEQHLgAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEACC4ALwEARCMILgAA" + + "AQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQAJLgAvAQBDIwkuAAABAQEAAAAB" + + "APkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQAKLgAvAQBFIwouAAABAQEAAAABAPkL" + + "AAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEACy4ALgBECy4AAJYCAAAAAQAqAQFG" + + "AAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVu" + + "dCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21t" + + "ZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABBY2tlZFN0YXRlAQAOLgAvAQAjIw4uAAAAFf////8BAQEAAAABACwjAQEA+C0BAAAAFWCJ" + + "CgIAAAAAAAIAAABJZAEADy4ALgBEDy4AAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFja25v" + + "d2xlZGdlAQAgLgAvAQCXIyAuAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFy" + + "Z3VtZW50cwEAIS4ALgBEIS4AAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAo" + + "AAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21t" + + "ZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEAJC4ALwEAIyMk" + + "LgAAABX/////AQEBAAAAAQAsIwEBAPgtAQAAABVgiQoCAAAAAAACAAAASWQBACUuAC4ARCUuAAAAAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAC0uAC4ARC0uAAAAEf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQBILgAuAERILgAAAAH/////AQH/////" + + "AAAAABVgiQoCAAAAAAALAAAATm9ybWFsU3RhdGUBAEouAC4AREouAAAAEf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region TripAlarmState Class + #if (!OPCUA_EXCLUDE_TripAlarmState) + /// + /// Stores an instance of the TripAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TripAlarmState : OffNormalAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TripAlarmState(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(Opc.Ua.ObjectTypes.TripAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFQAAAFRyaXBBbGFybVR5cGVJbnN0YW5jZQEA/ykBAP8p/ykAAP////8b" + + "AAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQAAKgAuAEQAKgAAAA//////AQH/////AAAAABVgiQoCAAAA" + + "AAAJAAAARXZlbnRUeXBlAQABKgAuAEQBKgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTm9kZQEAAioALgBEAioAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUB" + + "AAMqAC4ARAMqAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQAEKgAuAEQEKgAAAQAm" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEABSoALgBEBSoAAAEAJgH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAByoALgBEByoAAAAV/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAFNldmVyaXR5AQAIKgAuAEQIKgAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAAQ29uZGl0aW9uQ2xhc3NJZAEAlysALgBElysAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENvbmRpdGlvbkNsYXNzTmFtZQEAmCsALgBEmCsAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAADQAA" + + "AENvbmRpdGlvbk5hbWUBAAkqAC4ARAkqAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABCcmFu" + + "Y2hJZAEACioALgBECioAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAFJldGFpbgEACyoALgBE" + + "CyoAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAEVuYWJsZWRTdGF0ZQEADCoALwEAIyMMKgAA" + + "ABX/////AQEFAAAAAQAsIwABACIqAQAsIwABACsqAQAsIwABADgqAQAsIwABAEEqAQAsIwABAEoqAQAA" + + "ABVgiQoCAAAAAAACAAAASWQBAA0qAC4ARA0qAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABR" + + "dWFsaXR5AQAVKgAvAQAqIxUqAAAAE/////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1l" + + "c3RhbXABABYqAC4ARBYqAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAExhc3RTZXZlcml0" + + "eQEAFyoALwEAKiMXKgAAAAX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1w" + + "AQAYKgAuAEQYKgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABDb21tZW50AQAZKgAvAQAq" + + "IxkqAAAAFf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXABABoqAC4ARBoq" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEAGyoALgBEGyoAAAAM" + + "/////wEB/////wAAAAAEYYIKBAAAAAAABwAAAERpc2FibGUBAB0qAC8BAEQjHSoAAAEBAQAAAAEA+QsA" + + "AQDzCgAAAAAEYYIKBAAAAAAABgAAAEVuYWJsZQEAHCoALwEAQyMcKgAAAQEBAAAAAQD5CwABAPMKAAAA" + + "AARhggoEAAAAAAAKAAAAQWRkQ29tbWVudAEAHioALwEARSMeKgAAAQEBAAAAAQD5CwABAA0LAQAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAB8qAC4ARB8qAACWAgAAAAEAKgEBRgAAAAcAAABFdmVu" + + "dElkAA//////AAAAAAMAAAAAKAAAAFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVu" + + "dC4BACoBAUIAAAAHAAAAQ29tbWVudAAV/////wAAAAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQg" + + "dG8gdGhlIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAKAAAAQWNr" + + "ZWRTdGF0ZQEAIioALwEAIyMiKgAAABX/////AQEBAAAAAQAsIwEBAAwqAQAAABVgiQoCAAAAAAACAAAA" + + "SWQBACMqAC4ARCMqAAAAAf////8BAf////8AAAAABGGCCgQAAAAAAAsAAABBY2tub3dsZWRnZQEANCoA" + + "LwEAlyM0KgAAAQEBAAAAAQD5CwABAPAiAQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADUq" + + "AC4ARDUqAACWAgAAAAEAKgEBRgAAAAcAAABFdmVudElkAA//////AAAAAAMAAAAAKAAAAFRoZSBpZGVu" + + "dGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVudC4BACoBAUIAAAAHAAAAQ29tbWVudAAV/////wAA" + + "AAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQgdG8gdGhlIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAQWN0aXZlU3RhdGUBADgqAC8BACMjOCoAAAAV/////wEB" + + "AQAAAAEALCMBAQAMKgEAAAAVYIkKAgAAAAAAAgAAAElkAQA5KgAuAEQ5KgAAAAH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAJAAAASW5wdXROb2RlAQCZKwAuAESZKwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAATAAAAU3VwcHJlc3NlZE9yU2hlbHZlZAEAbyoALgBEbyoAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACwAAAE5vcm1hbFN0YXRlAQCaKwAuAESaKwAAABH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region InstrumentDiagnosticAlarmState Class + #if (!OPCUA_EXCLUDE_InstrumentDiagnosticAlarmState) + /// + /// Stores an instance of the InstrumentDiagnosticAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class InstrumentDiagnosticAlarmState : OffNormalAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public InstrumentDiagnosticAlarmState(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(Opc.Ua.ObjectTypes.InstrumentDiagnosticAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAEluc3RydW1lbnREaWFnbm9zdGljQWxhcm1UeXBlSW5zdGFuY2UB" + + "AKtHAQCrR6tHAAD/////GwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEArEcALgBErEcAAAAP/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEArUcALgBErUcAAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAK5HAC4ARK5HAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOYW1lAQCvRwAuAESvRwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGlt" + + "ZQEAsEcALgBEsEcAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBALFH" + + "AC4ARLFHAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBALNHAC4ARLNHAAAA" + + "Ff////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAtEcALgBEtEcAAAAF/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBALVHAC4ARLVHAAAAEf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABIAAABDb25kaXRpb25DbGFzc05hbWUBALZHAC4ARLZHAAAAFf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA0AAABDb25kaXRpb25OYW1lAQC5RwAuAES5RwAAAAz/////AQH/////AAAAABVg" + + "iQoCAAAAAAAIAAAAQnJhbmNoSWQBALpHAC4ARLpHAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYA" + + "AABSZXRhaW4BALtHAC4ARLtHAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3Rh" + + "dGUBALxHAC8BACMjvEcAAAAV/////wEBBQAAAAEALCMAAQDURwEALCMAAQDdRwEALCMAAQDqRwEALCMA" + + "AQD0RwEALCMAAQAGSAEAAAAVYIkKAgAAAAAAAgAAAElkAQC9RwAuAES9RwAAAAH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAHAAAAUXVhbGl0eQEAxUcALwEAKiPFRwAAABP/////AQH/////AQAAABVgiQoCAAAA" + + "AAAPAAAAU291cmNlVGltZXN0YW1wAQDGRwAuAETGRwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAwAAABMYXN0U2V2ZXJpdHkBAMdHAC8BACojx0cAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAA" + + "AFNvdXJjZVRpbWVzdGFtcAEAyEcALgBEyEcAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAA" + + "Q29tbWVudAEAyUcALwEAKiPJRwAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGlt" + + "ZXN0YW1wAQDKRwAuAETKRwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2Vy" + + "SWQBAMtHAC4ARMtHAAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQDMRwAvAQBE" + + "I8xHAAABAQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBAM1HAC8BAEMjzUcAAAEB" + + "AQAAAAEA+QsAAQDzCgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBAM5HAC8BAEUjzkcAAAEBAQAA" + + "AAEA+QsAAQANCwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDPRwAuAETPRwAAlgIAAAAB" + + "ACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhl" + + "IGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhl" + + "IGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAV" + + "YIkKAgAAAAAACgAAAEFja2VkU3RhdGUBANRHAC8BACMj1EcAAAAV/////wEBAQAAAAEALCMBAQC8RwEA" + + "AAAVYIkKAgAAAAAAAgAAAElkAQDVRwAuAETVRwAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAA" + + "QWNrbm93bGVkZ2UBAOZHAC8BAJcj5kcAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElu" + + "cHV0QXJndW1lbnRzAQDnRwAuAETnRwAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAAD" + + "AAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAA" + + "AENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRp" + + "b24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQDqRwAv" + + "AQAjI+pHAAAAFf////8BAQEAAAABACwjAQEAvEcBAAAAFWCJCgIAAAAAAAIAAABJZAEA60cALgBE60cA" + + "AAAB/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAElucHV0Tm9kZQEA80cALgBE80cAAAAR/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEwAAAFN1cHByZXNzZWRPclNoZWx2ZWQBABlIAC4ARBlIAAAAAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAsAAABOb3JtYWxTdGF0ZQEAP0gALgBEP0gAAAAR/////wEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SystemDiagnosticAlarmState Class + #if (!OPCUA_EXCLUDE_SystemDiagnosticAlarmState) + /// + /// Stores an instance of the SystemDiagnosticAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SystemDiagnosticAlarmState : OffNormalAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SystemDiagnosticAlarmState(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(Opc.Ua.ObjectTypes.SystemDiagnosticAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAFN5c3RlbURpYWdub3N0aWNBbGFybVR5cGVJbnN0YW5jZQEAQEgB" + + "AEBIQEgAAP////8bAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBBSAAuAERBSAAAAA//////AQH/////" + + "AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBCSAAuAERCSAAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTm9kZQEAQ0gALgBEQ0gAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAA" + + "AFNvdXJjZU5hbWUBAERIAC4ARERIAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQBF" + + "SAAuAERFSAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEARkgALgBE" + + "RkgAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEASEgALgBESEgAAAAV////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBJSAAuAERJSAAAAAX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAQAAAAQ29uZGl0aW9uQ2xhc3NJZAEASkgALgBESkgAAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAEgAAAENvbmRpdGlvbkNsYXNzTmFtZQEAS0gALgBES0gAAAAV/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADQAAAENvbmRpdGlvbk5hbWUBAE5IAC4ARE5IAAAADP////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAgAAABCcmFuY2hJZAEAT0gALgBET0gAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAFJl" + + "dGFpbgEAUEgALgBEUEgAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAEVuYWJsZWRTdGF0ZQEA" + + "UUgALwEAIyNRSAAAABX/////AQEFAAAAAQAsIwABAGlIAQAsIwABAHJIAQAsIwABAH9IAQAsIwABAIlI" + + "AQAsIwABAJtIAQAAABVgiQoCAAAAAAACAAAASWQBAFJIAC4ARFJIAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAcAAABRdWFsaXR5AQBaSAAvAQAqI1pIAAAAE/////8BAf////8BAAAAFWCJCgIAAAAAAA8A" + + "AABTb3VyY2VUaW1lc3RhbXABAFtIAC4ARFtIAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAA" + + "AExhc3RTZXZlcml0eQEAXEgALwEAKiNcSAAAAAX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291" + + "cmNlVGltZXN0YW1wAQBdSAAuAERdSAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABDb21t" + + "ZW50AQBeSAAvAQAqI15IAAAAFf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3Rh" + + "bXABAF9IAC4ARF9IAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEA" + + "YEgALgBEYEgAAAAM/////wEB/////wAAAAAEYYIKBAAAAAAABwAAAERpc2FibGUBAGFIAC8BAEQjYUgA" + + "AAEBAQAAAAEA+QsAAQDzCgAAAAAEYYIKBAAAAAAABgAAAEVuYWJsZQEAYkgALwEAQyNiSAAAAQEBAAAA" + + "AQD5CwABAPMKAAAAAARhggoEAAAAAAAKAAAAQWRkQ29tbWVudAEAY0gALwEARSNjSAAAAQEBAAAAAQD5" + + "CwABAA0LAQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAGRIAC4ARGRIAACWAgAAAAEAKgEB" + + "RgAAAAcAAABFdmVudElkAA//////AAAAAAMAAAAAKAAAAFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZXZl" + + "bnQgdG8gY29tbWVudC4BACoBAUIAAAAHAAAAQ29tbWVudAAV/////wAAAAADAAAAACQAAABUaGUgY29t" + + "bWVudCB0byBhZGQgdG8gdGhlIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAQWNrZWRTdGF0ZQEAaUgALwEAIyNpSAAAABX/////AQEBAAAAAQAsIwEBAFFIAQAAABVg" + + "iQoCAAAAAAACAAAASWQBAGpIAC4ARGpIAAAAAf////8BAf////8AAAAABGGCCgQAAAAAAAsAAABBY2tu" + + "b3dsZWRnZQEAe0gALwEAlyN7SAAAAQEBAAAAAQD5CwABAPAiAQAAABdgqQoCAAAAAAAOAAAASW5wdXRB" + + "cmd1bWVudHMBAHxIAC4ARHxIAACWAgAAAAEAKgEBRgAAAAcAAABFdmVudElkAA//////AAAAAAMAAAAA" + + "KAAAAFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVudC4BACoBAUIAAAAHAAAAQ29t" + + "bWVudAAV/////wAAAAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQgdG8gdGhlIGNvbmRpdGlvbi4B" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAQWN0aXZlU3RhdGUBAH9IAC8BACMj" + + "f0gAAAAV/////wEBAQAAAAEALCMBAQBRSAEAAAAVYIkKAgAAAAAAAgAAAElkAQCASAAuAESASAAAAAH/" + + "////AQH/////AAAAABVgiQoCAAAAAAAJAAAASW5wdXROb2RlAQCISAAuAESISAAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAATAAAAU3VwcHJlc3NlZE9yU2hlbHZlZAEArkgALgBErkgAAAAB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACwAAAE5vcm1hbFN0YXRlAQDUSAAuAETUSAAAABH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region CertificateExpirationAlarmState Class + #if (!OPCUA_EXCLUDE_CertificateExpirationAlarmState) + /// + /// Stores an instance of the CertificateExpirationAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateExpirationAlarmState : SystemOffNormalAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateExpirationAlarmState(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(Opc.Ua.ObjectTypes.CertificateExpirationAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ExpirationLimit != null) + { + ExpirationLimit.Initialize(context, ExpirationLimit_InitializationString); + } + } + + #region Initialization String + private const string ExpirationLimit_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAEV4cGlyYXRpb25MaW1pdAEANDoALgBENDoAAAEAIgH/////AQH/" + + "////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJgAAAENlcnRpZmljYXRlRXhwaXJhdGlvbkFsYXJtVHlwZUluc3RhbmNl" + + "AQCpMwEAqTOpMwAA/////x8AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAKozAC4ARKozAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAKszAC4ARKszAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQCsMwAuAESsMwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEArTMALgBErTMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAK4zAC4ARK4zAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCv" + + "MwAuAESvMwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCxMwAuAESxMwAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBALIzAC4ARLIzAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQCzMwAuAESzMwAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQC0MwAuAES0MwAAABX/////AQH/////" + + "AAAAABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEAtTMALgBEtTMAAAAM/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAEJyYW5jaElkAQC2MwAuAES2MwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAG" + + "AAAAUmV0YWluAQC3MwAuAES3MwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0" + + "YXRlAQC4MwAvAQAjI7gzAAAAFf////8BAQUAAAABACwjAAEA0DMBACwjAAEA2TMBACwjAAEA5jMBACwj" + + "AAEA8DMBACwjAAEA+TMBAAAAFWCJCgIAAAAAAAIAAABJZAEAuTMALgBEuTMAAAAB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABwAAAFF1YWxpdHkBAMEzAC8BACojwTMAAAAT/////wEB/////wEAAAAVYIkKAgAA" + + "AAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAwjMALgBEwjMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAMAAAATGFzdFNldmVyaXR5AQDDMwAvAQAqI8MzAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8A" + + "AABTb3VyY2VUaW1lc3RhbXABAMQzAC4ARMQzAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAA" + + "AENvbW1lbnQBAMUzAC8BACojxTMAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRp" + + "bWVzdGFtcAEAxjMALgBExjMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNl" + + "cklkAQDHMwAuAETHMwAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAyDMALwEA" + + "RCPIMwAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQDJMwAvAQBDI8kzAAAB" + + "AQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQDKMwAvAQBFI8ozAAABAQEA" + + "AAABAPkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAyzMALgBEyzMAAJYCAAAA" + + "AQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRo" + + "ZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRo" + + "ZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABBY2tlZFN0YXRlAQDQMwAvAQAjI9AzAAAAFf////8BAQEAAAABACwjAQEAuDMB" + + "AAAAFWCJCgIAAAAAAAIAAABJZAEA0TMALgBE0TMAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAA" + + "AEFja25vd2xlZGdlAQDiMwAvAQCXI+IzAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJ" + + "bnB1dEFyZ3VtZW50cwEA4zMALgBE4zMAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAA" + + "AwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcA" + + "AABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0" + + "aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEA5jMA" + + "LwEAIyPmMwAAABX/////AQEBAAAAAQAsIwEBALgzAQAAABVgiQoCAAAAAAACAAAASWQBAOczAC4AROcz" + + "AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAO8zAC4ARO8zAAAAEf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQAKNAAuAEQKNAAAAAH/////" + + "AQH/////AAAAABVgiQoCAAAAAAALAAAATm9ybWFsU3RhdGUBAAw0AC4ARAw0AAAAEf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA4AAABFeHBpcmF0aW9uRGF0ZQEADTQALgBEDTQAAAAN/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADwAAAEV4cGlyYXRpb25MaW1pdAEANDoALgBENDoAAAEAIgH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAPAAAAQ2VydGlmaWNhdGVUeXBlAQAONAAuAEQONAAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAALAAAAQ2VydGlmaWNhdGUBAA80AC4ARA80AAAAD/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ExpirationDate + { + get + { + return m_expirationDate; + } + + set + { + if (!Object.ReferenceEquals(m_expirationDate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_expirationDate = value; + } + } + + /// + public PropertyState ExpirationLimit + { + get + { + return m_expirationLimit; + } + + set + { + if (!Object.ReferenceEquals(m_expirationLimit, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_expirationLimit = value; + } + } + + /// + public PropertyState CertificateType + { + get + { + return m_certificateType; + } + + set + { + if (!Object.ReferenceEquals(m_certificateType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateType = value; + } + } + + /// + public PropertyState Certificate + { + get + { + return m_certificate; + } + + set + { + if (!Object.ReferenceEquals(m_certificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificate = 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_expirationDate != null) + { + children.Add(m_expirationDate); + } + + if (m_expirationLimit != null) + { + children.Add(m_expirationLimit); + } + + if (m_certificateType != null) + { + children.Add(m_certificateType); + } + + if (m_certificate != null) + { + children.Add(m_certificate); + } + + 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 Opc.Ua.BrowseNames.ExpirationDate: + { + if (createOrReplace) + { + if (ExpirationDate == null) + { + if (replacement == null) + { + ExpirationDate = new PropertyState(this); + } + else + { + ExpirationDate = (PropertyState)replacement; + } + } + } + + instance = ExpirationDate; + break; + } + + case Opc.Ua.BrowseNames.ExpirationLimit: + { + if (createOrReplace) + { + if (ExpirationLimit == null) + { + if (replacement == null) + { + ExpirationLimit = new PropertyState(this); + } + else + { + ExpirationLimit = (PropertyState)replacement; + } + } + } + + instance = ExpirationLimit; + break; + } + + case Opc.Ua.BrowseNames.CertificateType: + { + if (createOrReplace) + { + if (CertificateType == null) + { + if (replacement == null) + { + CertificateType = new PropertyState(this); + } + else + { + CertificateType = (PropertyState)replacement; + } + } + } + + instance = CertificateType; + break; + } + + case Opc.Ua.BrowseNames.Certificate: + { + if (createOrReplace) + { + if (Certificate == null) + { + if (replacement == null) + { + Certificate = new PropertyState(this); + } + else + { + Certificate = (PropertyState)replacement; + } + } + } + + instance = Certificate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_expirationDate; + private PropertyState m_expirationLimit; + private PropertyState m_certificateType; + private PropertyState m_certificate; + #endregion + } + #endif + #endregion + + #region DiscrepancyAlarmState Class + #if (!OPCUA_EXCLUDE_DiscrepancyAlarmState) + /// + /// Stores an instance of the DiscrepancyAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DiscrepancyAlarmState : AlarmConditionState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DiscrepancyAlarmState(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(Opc.Ua.ObjectTypes.DiscrepancyAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (Tolerance != null) + { + Tolerance.Initialize(context, Tolerance_InitializationString); + } + } + + #region Initialization String + private const string Tolerance_InitializationString = + "//////////8VYIkKAgAAAAAACQAAAFRvbGVyYW5jZQEAQUMALgBEQUMAAAAL/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAERpc2NyZXBhbmN5QWxhcm1UeXBlSW5zdGFuY2UBALhCAQC4QrhC" + + "AAD/////HQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAuUIALgBEuUIAAAAP/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAukIALgBEukIAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5vZGUBALtCAC4ARLtCAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOYW1lAQC8QgAuAES8QgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAvUIALgBE" + + "vUIAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAL5CAC4ARL5CAAAB" + + "ACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAMBCAC4ARMBCAAAAFf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAwUIALgBEwUIAAAAF/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAEAAAAENvbmRpdGlvbkNsYXNzSWQBAMJCAC4ARMJCAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABIAAABDb25kaXRpb25DbGFzc05hbWUBAMNCAC4ARMNCAAAAFf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAA0AAABDb25kaXRpb25OYW1lAQDGQgAuAETGQgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAI" + + "AAAAQnJhbmNoSWQBAMdCAC4ARMdCAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABSZXRhaW4B" + + "AMhCAC4ARMhCAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABFbmFibGVkU3RhdGUBAMlCAC8B" + + "ACMjyUIAAAAV/////wEBBQAAAAEALCMAAQDhQgEALCMAAQDqQgEALCMAAQD3QgEALCMAAQABQwEALCMA" + + "AQAcQwEAAAAVYIkKAgAAAAAAAgAAAElkAQDKQgAuAETKQgAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAHAAAAUXVhbGl0eQEA0kIALwEAKiPSQgAAABP/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291" + + "cmNlVGltZXN0YW1wAQDTQgAuAETTQgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABMYXN0" + + "U2V2ZXJpdHkBANRCAC8BACoj1EIAAAAF/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRp" + + "bWVzdGFtcAEA1UIALgBE1UIAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAAQ29tbWVudAEA" + + "1kIALwEAKiPWQgAAABX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1wAQDX" + + "QgAuAETXQgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2VySWQBANhCAC4A" + + "RNhCAAAADP////8BAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxlAQDZQgAvAQBEI9lCAAABAQEA" + + "AAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAYAAABFbmFibGUBANpCAC8BAEMj2kIAAAEBAQAAAAEA+QsA" + + "AQDzCgAAAAAEYYIKBAAAAAAACgAAAEFkZENvbW1lbnQBANtCAC8BAEUj20IAAAEBAQAAAAEA+QsAAQAN" + + "CwEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDcQgAuAETcQgAAlgIAAAABACoBAUYAAAAH" + + "AAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABUaGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRv" + + "IGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQAFf////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQg" + + "dG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAEFja2VkU3RhdGUBAOFCAC8BACMj4UIAAAAV/////wEBAQAAAAEALCMBAQDJQgEAAAAVYIkKAgAA" + + "AAAAAgAAAElkAQDiQgAuAETiQgAAAAH/////AQH/////AAAAAARhggoEAAAAAAALAAAAQWNrbm93bGVk" + + "Z2UBAPNCAC8BAJcj80IAAAEBAQAAAAEA+QsAAQDwIgEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1l" + + "bnRzAQD0QgAuAET0QgAAlgIAAAABACoBAUYAAAAHAAAARXZlbnRJZAAP/////wAAAAADAAAAACgAAABU" + + "aGUgaWRlbnRpZmllciBmb3IgdGhlIGV2ZW50IHRvIGNvbW1lbnQuAQAqAQFCAAAABwAAAENvbW1lbnQA" + + "Ff////8AAAAAAwAAAAAkAAAAVGhlIGNvbW1lbnQgdG8gYWRkIHRvIHRoZSBjb25kaXRpb24uAQAoAQEA" + + "AAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAEFjdGl2ZVN0YXRlAQD3QgAvAQAjI/dCAAAA" + + "Ff////8BAQEAAAABACwjAQEAyUIBAAAAFWCJCgIAAAAAAAIAAABJZAEA+EIALgBE+EIAAAAB/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACQAAAElucHV0Tm9kZQEAAEMALgBEAEMAAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAEwAAAFN1cHByZXNzZWRPclNoZWx2ZWQBAC1DAC4ARC1DAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA8AAABUYXJnZXRWYWx1ZU5vZGUBAD9DAC4ARD9DAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAwAAABFeHBlY3RlZFRpbWUBAEBDAC4AREBDAAABACIB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACQAAAFRvbGVyYW5jZQEAQUMALgBEQUMAAAAL/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState TargetValueNode + { + get + { + return m_targetValueNode; + } + + set + { + if (!Object.ReferenceEquals(m_targetValueNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_targetValueNode = value; + } + } + + /// + public PropertyState ExpectedTime + { + get + { + return m_expectedTime; + } + + set + { + if (!Object.ReferenceEquals(m_expectedTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_expectedTime = value; + } + } + + /// + public PropertyState Tolerance + { + get + { + return m_tolerance; + } + + set + { + if (!Object.ReferenceEquals(m_tolerance, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_tolerance = 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_targetValueNode != null) + { + children.Add(m_targetValueNode); + } + + if (m_expectedTime != null) + { + children.Add(m_expectedTime); + } + + if (m_tolerance != null) + { + children.Add(m_tolerance); + } + + 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 Opc.Ua.BrowseNames.TargetValueNode: + { + if (createOrReplace) + { + if (TargetValueNode == null) + { + if (replacement == null) + { + TargetValueNode = new PropertyState(this); + } + else + { + TargetValueNode = (PropertyState)replacement; + } + } + } + + instance = TargetValueNode; + break; + } + + case Opc.Ua.BrowseNames.ExpectedTime: + { + if (createOrReplace) + { + if (ExpectedTime == null) + { + if (replacement == null) + { + ExpectedTime = new PropertyState(this); + } + else + { + ExpectedTime = (PropertyState)replacement; + } + } + } + + instance = ExpectedTime; + break; + } + + case Opc.Ua.BrowseNames.Tolerance: + { + if (createOrReplace) + { + if (Tolerance == null) + { + if (replacement == null) + { + Tolerance = new PropertyState(this); + } + else + { + Tolerance = (PropertyState)replacement; + } + } + } + + instance = Tolerance; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_targetValueNode; + private PropertyState m_expectedTime; + private PropertyState m_tolerance; + #endregion + } + #endif + #endregion + + #region BaseConditionClassState Class + #if (!OPCUA_EXCLUDE_BaseConditionClassState) + /// + /// Stores an instance of the BaseConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BaseConditionClassState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BaseConditionClassState(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(Opc.Ua.ObjectTypes.BaseConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHgAAAEJhc2VDb25kaXRpb25DbGFzc1R5cGVJbnN0YW5jZQEAmysBAJsr" + + "mysAAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ProcessConditionClassState Class + #if (!OPCUA_EXCLUDE_ProcessConditionClassState) + /// + /// Stores an instance of the ProcessConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProcessConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProcessConditionClassState(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(Opc.Ua.ObjectTypes.ProcessConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAFByb2Nlc3NDb25kaXRpb25DbGFzc1R5cGVJbnN0YW5jZQEAnCsB" + + "AJwrnCsAAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region MaintenanceConditionClassState Class + #if (!OPCUA_EXCLUDE_MaintenanceConditionClassState) + /// + /// Stores an instance of the MaintenanceConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class MaintenanceConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public MaintenanceConditionClassState(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(Opc.Ua.ObjectTypes.MaintenanceConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAE1haW50ZW5hbmNlQ29uZGl0aW9uQ2xhc3NUeXBlSW5zdGFuY2UB" + + "AJ0rAQCdK50rAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SystemConditionClassState Class + #if (!OPCUA_EXCLUDE_SystemConditionClassState) + /// + /// Stores an instance of the SystemConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SystemConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SystemConditionClassState(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(Opc.Ua.ObjectTypes.SystemConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAFN5c3RlbUNvbmRpdGlvbkNsYXNzVHlwZUluc3RhbmNlAQCeKwEA" + + "niueKwAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region SafetyConditionClassState Class + #if (!OPCUA_EXCLUDE_SafetyConditionClassState) + /// + /// Stores an instance of the SafetyConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SafetyConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SafetyConditionClassState(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(Opc.Ua.ObjectTypes.SafetyConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAFNhZmV0eUNvbmRpdGlvbkNsYXNzVHlwZUluc3RhbmNlAQBCQwEA" + + "QkNCQwAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region HighlyManagedAlarmConditionClassState Class + #if (!OPCUA_EXCLUDE_HighlyManagedAlarmConditionClassState) + /// + /// Stores an instance of the HighlyManagedAlarmConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class HighlyManagedAlarmConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public HighlyManagedAlarmConditionClassState(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(Opc.Ua.ObjectTypes.HighlyManagedAlarmConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALAAAAEhpZ2hseU1hbmFnZWRBbGFybUNvbmRpdGlvbkNsYXNzVHlwZUlu" + + "c3RhbmNlAQBDQwEAQ0NDQwAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region TrainingConditionClassState Class + #if (!OPCUA_EXCLUDE_TrainingConditionClassState) + /// + /// Stores an instance of the TrainingConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TrainingConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TrainingConditionClassState(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(Opc.Ua.ObjectTypes.TrainingConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAFRyYWluaW5nQ29uZGl0aW9uQ2xhc3NUeXBlSW5zdGFuY2UBAERD" + + "AQBEQ0RDAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region StatisticalConditionClassState Class + #if (!OPCUA_EXCLUDE_StatisticalConditionClassState) + /// + /// Stores an instance of the StatisticalConditionClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class StatisticalConditionClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public StatisticalConditionClassState(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(Opc.Ua.ObjectTypes.StatisticalConditionClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAFN0YXRpc3RpY2FsQ29uZGl0aW9uQ2xhc3NUeXBlSW5zdGFuY2UB" + + "AOlIAQDpSOlIAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region TestingConditionSubClassState Class + #if (!OPCUA_EXCLUDE_TestingConditionSubClassState) + /// + /// Stores an instance of the TestingConditionSubClassType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TestingConditionSubClassState : BaseConditionClassState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TestingConditionSubClassState(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(Opc.Ua.ObjectTypes.TestingConditionSubClassType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAFRlc3RpbmdDb25kaXRpb25TdWJDbGFzc1R5cGVJbnN0YW5jZQEA" + + "RUMBAEVDRUMAAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditConditionEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionEventState) + /// + /// Stores an instance of the AuditConditionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionEventState(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(Opc.Ua.ObjectTypes.AuditConditionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAEF1ZGl0Q29uZGl0aW9uRXZlbnRUeXBlSW5zdGFuY2UBAOYKAQDm" + + "CuYKAAD/////DwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAnA8ALgBEnA8AAAAP/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAnQ8ALgBEnQ8AAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5vZGUBAJ4PAC4ARJ4PAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABT" + + "b3VyY2VOYW1lAQCfDwAuAESfDwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEAoA8A" + + "LgBEoA8AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAKEPAC4ARKEP" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAKMPAC4ARKMPAAAAFf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEApA8ALgBEpA8AAAAF/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEApQ8ALgBEpQ8AAAEAJgH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAGAAAAU3RhdHVzAQCmDwAuAESmDwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAIAAAA" + + "U2VydmVySWQBAKcPAC4ARKcPAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGllbnRBdWRp" + + "dEVudHJ5SWQBAKgPAC4ARKgPAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGllbnRVc2Vy" + + "SWQBAKkPAC4ARKkPAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABNZXRob2RJZAEAqg8ALgBE" + + "qg8AAAAR/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCrDwAuAESrDwAA" + + "ABgBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditConditionEnableEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionEnableEventState) + /// + /// Stores an instance of the AuditConditionEnableEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionEnableEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionEnableEventState(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(Opc.Ua.ObjectTypes.AuditConditionEnableEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAEF1ZGl0Q29uZGl0aW9uRW5hYmxlRXZlbnRUeXBlSW5zdGFuY2UB" + + "APMKAQDzCvMKAAD/////DwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAChAALgBEChAAAAAP/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEACxAALgBECxAAAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAAwQAC4ARAwQAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOYW1lAQANEAAuAEQNEAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGlt" + + "ZQEADhAALgBEDhAAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAA8Q" + + "AC4ARA8QAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBABEQAC4ARBEQAAAA" + + "Ff////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAEhAALgBEEhAAAAAF/////wEB////" + + "/wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAExAALgBEExAAAAEAJgH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQAUEAAuAEQUEAAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAIAAAAU2VydmVySWQBABUQAC4ARBUQAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABDbGll" + + "bnRBdWRpdEVudHJ5SWQBABYQAC4ARBYQAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDbGll" + + "bnRVc2VySWQBABcQAC4ARBcQAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABNZXRob2RJZAEA" + + "GBAALgBEGBAAAAAR/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAZEAAu" + + "AEQZEAAAABgBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditConditionCommentEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionCommentEventState) + /// + /// Stores an instance of the AuditConditionCommentEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionCommentEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionCommentEventState(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(Opc.Ua.ObjectTypes.AuditConditionCommentEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEF1ZGl0Q29uZGl0aW9uQ29tbWVudEV2ZW50VHlwZUluc3RhbmNl" + + "AQANCwEADQsNCwAA/////xEAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAEoQAC4AREoQAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAEsQAC4AREsQAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQBMEAAuAERMEAAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEATRAALgBETRAAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAE4QAC4ARE4QAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBP" + + "EAAuAERPEAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBREAAuAERREAAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAFIQAC4ARFIQAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAFMQAC4ARFMQAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAVBAALgBEVBAAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNlcnZlcklkAQBVEAAuAERVEAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xp" + + "ZW50QXVkaXRFbnRyeUlkAQBWEAAuAERWEAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQBXEAAuAERXEAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQB" + + "AFgQAC4ARFgQAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAWRAA" + + "LgBEWRAAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAQAAAAQ29uZGl0aW9uRXZlbnRJ" + + "ZAEARkMALgBERkMAAAAP/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1lbnQBAEsuAC4AREsu" + + "AAAAFf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ConditionEventId + { + get + { + return m_conditionEventId; + } + + set + { + if (!Object.ReferenceEquals(m_conditionEventId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionEventId = value; + } + } + + /// + public PropertyState Comment + { + get + { + return m_comment; + } + + set + { + if (!Object.ReferenceEquals(m_comment, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_comment = 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_conditionEventId != null) + { + children.Add(m_conditionEventId); + } + + if (m_comment != null) + { + children.Add(m_comment); + } + + 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 Opc.Ua.BrowseNames.ConditionEventId: + { + if (createOrReplace) + { + if (ConditionEventId == null) + { + if (replacement == null) + { + ConditionEventId = new PropertyState(this); + } + else + { + ConditionEventId = (PropertyState)replacement; + } + } + } + + instance = ConditionEventId; + break; + } + + case Opc.Ua.BrowseNames.Comment: + { + if (createOrReplace) + { + if (Comment == null) + { + if (replacement == null) + { + Comment = new PropertyState(this); + } + else + { + Comment = (PropertyState)replacement; + } + } + } + + instance = Comment; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_conditionEventId; + private PropertyState m_comment; + #endregion + } + #endif + #endregion + + #region AuditConditionRespondEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionRespondEventState) + /// + /// Stores an instance of the AuditConditionRespondEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionRespondEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionRespondEventState(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(Opc.Ua.ObjectTypes.AuditConditionRespondEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEF1ZGl0Q29uZGl0aW9uUmVzcG9uZEV2ZW50VHlwZUluc3RhbmNl" + + "AQDfIgEA3yLfIgAA/////xAAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAOAiAC4AROAiAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAOEiAC4AROEiAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQDiIgAuAETiIgAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEA4yIALgBE4yIAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAOQiAC4AROQiAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQDl" + + "IgAuAETlIgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDnIgAuAETnIgAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAOgiAC4AROgiAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAOkiAC4AROkiAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEA6iIALgBE6iIAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNlcnZlcklkAQDrIgAuAETrIgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xp" + + "ZW50QXVkaXRFbnRyeUlkAQDsIgAuAETsIgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQDtIgAuAETtIgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQB" + + "AO4iAC4ARO4iAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA7yIA" + + "LgBE7yIAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAQAAAAU2VsZWN0ZWRSZXNwb25z" + + "ZQEATC4ALgBETC4AAAAH/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SelectedResponse + { + get + { + return m_selectedResponse; + } + + set + { + if (!Object.ReferenceEquals(m_selectedResponse, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_selectedResponse = 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_selectedResponse != null) + { + children.Add(m_selectedResponse); + } + + 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 Opc.Ua.BrowseNames.SelectedResponse: + { + if (createOrReplace) + { + if (SelectedResponse == null) + { + if (replacement == null) + { + SelectedResponse = new PropertyState(this); + } + else + { + SelectedResponse = (PropertyState)replacement; + } + } + } + + instance = SelectedResponse; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_selectedResponse; + #endregion + } + #endif + #endregion + + #region AuditConditionAcknowledgeEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionAcknowledgeEventState) + /// + /// Stores an instance of the AuditConditionAcknowledgeEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionAcknowledgeEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionAcknowledgeEventState(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(Opc.Ua.ObjectTypes.AuditConditionAcknowledgeEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAEF1ZGl0Q29uZGl0aW9uQWNrbm93bGVkZ2VFdmVudFR5cGVJbnN0" + + "YW5jZQEA8CIBAPAi8CIAAP////8RAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQDxIgAuAETxIgAAAA//" + + "////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQDyIgAuAETyIgAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEA8yIALgBE8yIAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5hbWUBAPQiAC4ARPQiAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQA" + + "AABUaW1lAQD1IgAuAET1IgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGlt" + + "ZQEA9iIALgBE9iIAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEA+CIALgBE" + + "+CIAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQD5IgAuAET5IgAAAAX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQD6IgAuAET6IgAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAPsiAC4ARPsiAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAgAAABTZXJ2ZXJJZAEA/CIALgBE/CIAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENsaWVudEF1ZGl0RW50cnlJZAEA/SIALgBE/SIAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAA" + + "AENsaWVudFVzZXJJZAEA/iIALgBE/iIAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhv" + + "ZElkAQD/IgAuAET/IgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "AAAjAC4ARAAjAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAAEAAAAENvbmRpdGlvbkV2" + + "ZW50SWQBAEdDAC4AREdDAAAAD/////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABDb21tZW50AQBNLgAu" + + "AERNLgAAABX/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ConditionEventId + { + get + { + return m_conditionEventId; + } + + set + { + if (!Object.ReferenceEquals(m_conditionEventId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionEventId = value; + } + } + + /// + public PropertyState Comment + { + get + { + return m_comment; + } + + set + { + if (!Object.ReferenceEquals(m_comment, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_comment = 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_conditionEventId != null) + { + children.Add(m_conditionEventId); + } + + if (m_comment != null) + { + children.Add(m_comment); + } + + 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 Opc.Ua.BrowseNames.ConditionEventId: + { + if (createOrReplace) + { + if (ConditionEventId == null) + { + if (replacement == null) + { + ConditionEventId = new PropertyState(this); + } + else + { + ConditionEventId = (PropertyState)replacement; + } + } + } + + instance = ConditionEventId; + break; + } + + case Opc.Ua.BrowseNames.Comment: + { + if (createOrReplace) + { + if (Comment == null) + { + if (replacement == null) + { + Comment = new PropertyState(this); + } + else + { + Comment = (PropertyState)replacement; + } + } + } + + instance = Comment; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_conditionEventId; + private PropertyState m_comment; + #endregion + } + #endif + #endregion + + #region AuditConditionConfirmEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionConfirmEventState) + /// + /// Stores an instance of the AuditConditionConfirmEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionConfirmEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionConfirmEventState(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(Opc.Ua.ObjectTypes.AuditConditionConfirmEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEF1ZGl0Q29uZGl0aW9uQ29uZmlybUV2ZW50VHlwZUluc3RhbmNl" + + "AQABIwEAASMBIwAA/////xEAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAAIjAC4ARAIjAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAAMjAC4ARAMjAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQAEIwAuAEQEIwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEABSMALgBEBSMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAAYjAC4ARAYjAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQAH" + + "IwAuAEQHIwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQAJIwAuAEQJIwAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAAojAC4ARAojAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAAsjAC4ARAsjAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEADCMALgBEDCMAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNlcnZlcklkAQANIwAuAEQNIwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xp" + + "ZW50QXVkaXRFbnRyeUlkAQAOIwAuAEQOIwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQAPIwAuAEQPIwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQB" + + "ABAjAC4ARBAjAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAESMA" + + "LgBEESMAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAQAAAAQ29uZGl0aW9uRXZlbnRJ" + + "ZAEASEMALgBESEMAAAAP/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1lbnQBAE4uAC4ARE4u" + + "AAAAFf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ConditionEventId + { + get + { + return m_conditionEventId; + } + + set + { + if (!Object.ReferenceEquals(m_conditionEventId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_conditionEventId = value; + } + } + + /// + public PropertyState Comment + { + get + { + return m_comment; + } + + set + { + if (!Object.ReferenceEquals(m_comment, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_comment = 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_conditionEventId != null) + { + children.Add(m_conditionEventId); + } + + if (m_comment != null) + { + children.Add(m_comment); + } + + 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 Opc.Ua.BrowseNames.ConditionEventId: + { + if (createOrReplace) + { + if (ConditionEventId == null) + { + if (replacement == null) + { + ConditionEventId = new PropertyState(this); + } + else + { + ConditionEventId = (PropertyState)replacement; + } + } + } + + instance = ConditionEventId; + break; + } + + case Opc.Ua.BrowseNames.Comment: + { + if (createOrReplace) + { + if (Comment == null) + { + if (replacement == null) + { + Comment = new PropertyState(this); + } + else + { + Comment = (PropertyState)replacement; + } + } + } + + instance = Comment; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_conditionEventId; + private PropertyState m_comment; + #endregion + } + #endif + #endregion + + #region AuditConditionShelvingEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionShelvingEventState) + /// + /// Stores an instance of the AuditConditionShelvingEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionShelvingEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionShelvingEventState(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(Opc.Ua.ObjectTypes.AuditConditionShelvingEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ShelvingTime != null) + { + ShelvingTime.Initialize(context, ShelvingTime_InitializationString); + } + } + + #region Initialization String + private const string ShelvingTime_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAFNoZWx2aW5nVGltZQEATy4ALgBETy4AAAEAIgH/////AQH/////" + + "AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJwAAAEF1ZGl0Q29uZGl0aW9uU2hlbHZpbmdFdmVudFR5cGVJbnN0YW5j" + + "ZQEAVSsBAFUrVSsAAP////8QAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBWKwAuAERWKwAAAA//////" + + "AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBXKwAuAERXKwAAABH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAWCsALgBEWCsAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5hbWUBAFkrAC4ARFkrAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABU" + + "aW1lAQBaKwAuAERaKwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA" + + "WysALgBEWysAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAXSsALgBEXSsA" + + "AAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBeKwAuAEReKwAAAAX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQBfKwAuAERfKwAAAQAmAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAGArAC4ARGArAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAgAAABTZXJ2ZXJJZAEAYSsALgBEYSsAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENs" + + "aWVudEF1ZGl0RW50cnlJZAEAYisALgBEYisAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENs" + + "aWVudFVzZXJJZAEAYysALgBEYysAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElk" + + "AQBkKwAuAERkKwAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAGUr" + + "AC4ARGUrAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAADAAAAFNoZWx2aW5nVGltZQEA" + + "Ty4ALgBETy4AAAEAIgH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ShelvingTime + { + get + { + return m_shelvingTime; + } + + set + { + if (!Object.ReferenceEquals(m_shelvingTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_shelvingTime = 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_shelvingTime != null) + { + children.Add(m_shelvingTime); + } + + 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 Opc.Ua.BrowseNames.ShelvingTime: + { + if (createOrReplace) + { + if (ShelvingTime == null) + { + if (replacement == null) + { + ShelvingTime = new PropertyState(this); + } + else + { + ShelvingTime = (PropertyState)replacement; + } + } + } + + instance = ShelvingTime; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_shelvingTime; + #endregion + } + #endif + #endregion + + #region AuditConditionSuppressionEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionSuppressionEventState) + /// + /// Stores an instance of the AuditConditionSuppressionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionSuppressionEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionSuppressionEventState(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(Opc.Ua.ObjectTypes.AuditConditionSuppressionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAEF1ZGl0Q29uZGl0aW9uU3VwcHJlc3Npb25FdmVudFR5cGVJbnN0" + + "YW5jZQEASUMBAElDSUMAAP////8PAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBKQwAuAERKQwAAAA//" + + "////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBLQwAuAERLQwAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEATEMALgBETEMAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5hbWUBAE1DAC4ARE1DAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQA" + + "AABUaW1lAQBOQwAuAEROQwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGlt" + + "ZQEAT0MALgBET0MAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAUUMALgBE" + + "UUMAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBSQwAuAERSQwAAAAX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQBTQwAuAERTQwAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAFRDAC4ARFRDAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAgAAABTZXJ2ZXJJZAEAVUMALgBEVUMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENsaWVudEF1ZGl0RW50cnlJZAEAVkMALgBEVkMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAA" + + "AENsaWVudFVzZXJJZAEAV0MALgBEV0MAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhv" + + "ZElkAQBYQwAuAERYQwAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "AFlDAC4ARFlDAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditConditionSilenceEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionSilenceEventState) + /// + /// Stores an instance of the AuditConditionSilenceEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionSilenceEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionSilenceEventState(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(Opc.Ua.ObjectTypes.AuditConditionSilenceEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEF1ZGl0Q29uZGl0aW9uU2lsZW5jZUV2ZW50VHlwZUluc3RhbmNl" + + "AQBaQwEAWkNaQwAA/////w8AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAFtDAC4ARFtDAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAFxDAC4ARFxDAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQBdQwAuAERdQwAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEAXkMALgBEXkMAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBAF9DAC4ARF9DAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBg" + + "QwAuAERgQwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBiQwAuAERiQwAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAGNDAC4ARGNDAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAGRDAC4ARGRDAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAZUMALgBEZUMAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNlcnZlcklkAQBmQwAuAERmQwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xp" + + "ZW50QXVkaXRFbnRyeUlkAQBnQwAuAERnQwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQBoQwAuAERoQwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQB" + + "AGlDAC4ARGlDAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAakMA" + + "LgBEakMAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditConditionResetEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionResetEventState) + /// + /// Stores an instance of the AuditConditionResetEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionResetEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionResetEventState(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(Opc.Ua.ObjectTypes.AuditConditionResetEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAEF1ZGl0Q29uZGl0aW9uUmVzZXRFdmVudFR5cGVJbnN0YW5jZQEA" + + "pToBAKU6pToAAP////8PAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCmOgAuAESmOgAAAA//////AQH/" + + "////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCnOgAuAESnOgAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTm9kZQEAqDoALgBEqDoAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CgAAAFNvdXJjZU5hbWUBAKk6AC4ARKk6AAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1l" + + "AQCqOgAuAESqOgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAqzoA" + + "LgBEqzoAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEArToALgBErToAAAAV" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCuOgAuAESuOgAAAAX/////AQH/////" + + "AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQCvOgAuAESvOgAAAQAmAf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBALA6AC4ARLA6AAAAAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAgAAABTZXJ2ZXJJZAEAsToALgBEsToAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENsaWVu" + + "dEF1ZGl0RW50cnlJZAEAsjoALgBEsjoAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVu" + + "dFVzZXJJZAEAszoALgBEszoAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElkAQC0" + + "OgAuAES0OgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBALU6AC4A" + + "RLU6AAAAGAEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuditConditionOutOfServiceEventState Class + #if (!OPCUA_EXCLUDE_AuditConditionOutOfServiceEventState) + /// + /// Stores an instance of the AuditConditionOutOfServiceEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditConditionOutOfServiceEventState : AuditConditionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditConditionOutOfServiceEventState(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(Opc.Ua.ObjectTypes.AuditConditionOutOfServiceEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKwAAAEF1ZGl0Q29uZGl0aW9uT3V0T2ZTZXJ2aWNlRXZlbnRUeXBlSW5z" + + "dGFuY2UBAGtDAQBrQ2tDAAD/////DwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAbEMALgBEbEMAAAAP" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAbUMALgBEbUMAAAAR/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAG5DAC4ARG5DAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOYW1lAQBvQwAuAERvQwAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAE" + + "AAAAVGltZQEAcEMALgBEcEMAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRp" + + "bWUBAHFDAC4ARHFDAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAHNDAC4A" + + "RHNDAAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAdEMALgBEdEMAAAAF////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAdUMALgBEdUMAAAEAJgH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQB2QwAuAER2QwAAAAH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAIAAAAU2VydmVySWQBAHdDAC4ARHdDAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIA" + + "AABDbGllbnRBdWRpdEVudHJ5SWQBAHhDAC4ARHhDAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwA" + + "AABDbGllbnRVc2VySWQBAHlDAC4ARHlDAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABNZXRo" + + "b2RJZAEAekMALgBEekMAAAAR/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAElucHV0QXJndW1lbnRz" + + "AQB7QwAuAER7QwAAABgBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region RefreshStartEventState Class + #if (!OPCUA_EXCLUDE_RefreshStartEventState) + /// + /// Stores an instance of the RefreshStartEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RefreshStartEventState : SystemEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RefreshStartEventState(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(Opc.Ua.ObjectTypes.RefreshStartEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAFJlZnJlc2hTdGFydEV2ZW50VHlwZUluc3RhbmNlAQDjCgEA4wrj" + + "CgAA/////wgAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAIEPAC4ARIEPAAAAD/////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAIIPAC4ARIIPAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOb2RlAQCDDwAuAESDDwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTmFtZQEAhA8ALgBEhA8AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAIUPAC4A" + + "RIUPAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCGDwAuAESGDwAA" + + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCIDwAuAESIDwAAABX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAIkPAC4ARIkPAAAABf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region RefreshEndEventState Class + #if (!OPCUA_EXCLUDE_RefreshEndEventState) + /// + /// Stores an instance of the RefreshEndEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RefreshEndEventState : SystemEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RefreshEndEventState(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(Opc.Ua.ObjectTypes.RefreshEndEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGwAAAFJlZnJlc2hFbmRFdmVudFR5cGVJbnN0YW5jZQEA5AoBAOQK5AoA" + + "AP////8IAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCKDwAuAESKDwAAAA//////AQH/////AAAAABVg" + + "iQoCAAAAAAAJAAAARXZlbnRUeXBlAQCLDwAuAESLDwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTm9kZQEAjA8ALgBEjA8AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJj" + + "ZU5hbWUBAI0PAC4ARI0PAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQCODwAuAESO" + + "DwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAjw8ALgBEjw8AAAEA" + + "JgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAkQ8ALgBEkQ8AAAAV/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCSDwAuAESSDwAAAAX/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region RefreshRequiredEventState Class + #if (!OPCUA_EXCLUDE_RefreshRequiredEventState) + /// + /// Stores an instance of the RefreshRequiredEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RefreshRequiredEventState : SystemEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RefreshRequiredEventState(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(Opc.Ua.ObjectTypes.RefreshRequiredEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAFJlZnJlc2hSZXF1aXJlZEV2ZW50VHlwZUluc3RhbmNlAQDlCgEA" + + "5QrlCgAA/////wgAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAJMPAC4ARJMPAAAAD/////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAJQPAC4ARJQPAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOb2RlAQCVDwAuAESVDwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAA" + + "U291cmNlTmFtZQEAlg8ALgBElg8AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAJcP" + + "AC4ARJcPAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQCYDwAuAESY" + + "DwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQCaDwAuAESaDwAAABX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAJsPAC4ARJsPAAAABf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AlarmMetricsState Class + #if (!OPCUA_EXCLUDE_AlarmMetricsState) + /// + /// Stores an instance of the AlarmMetricsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AlarmMetricsState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AlarmMetricsState(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(Opc.Ua.ObjectTypes.AlarmMetricsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGAAAAEFsYXJtTWV0cmljc1R5cGVJbnN0YW5jZQEAf0MBAH9Df0MAAP//" + + "//8JAAAAFWCJCgIAAAAAAAoAAABBbGFybUNvdW50AQCAQwAvAD+AQwAAAAf/////AQH/////AAAAABVg" + + "iQoCAAAAAAAJAAAAU3RhcnRUaW1lAQBHRgAvAD9HRgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABIAAABNYXhpbXVtQWN0aXZlU3RhdGUBAIFDAC8AP4FDAAABACIB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADAAAAE1heGltdW1VbkFjawEAgkMALwA/gkMAAAEAIgH/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAAQ3VycmVudEFsYXJtUmF0ZQEAhEMALwEAfUOEQwAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAE" + + "AAAAUmF0ZQEAhUMALgBEhUMAAAAF/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAE1heGltdW1BbGFy" + + "bVJhdGUBAIZDAC8BAH1DhkMAAAAL/////wEB/////wEAAAAVYIkKAgAAAAAABAAAAFJhdGUBAIdDAC4A" + + "RIdDAAAABf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABNYXhpbXVtUmVBbGFybUNvdW50AQCDQwAv" + + "AD+DQwAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAQXZlcmFnZUFsYXJtUmF0ZQEAiEMALwEA" + + "fUOIQwAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAEAAAAUmF0ZQEAiUMALgBEiUMAAAAF/////wEB" + + "/////wAAAAAEYYIKBAAAAAAABQAAAFJlc2V0AQDqSAAvAQDqSOpIAAABAQEAAAABAPkLAAEATwgAAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState AlarmCount + { + get + { + return m_alarmCount; + } + + set + { + if (!Object.ReferenceEquals(m_alarmCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_alarmCount = value; + } + } + + /// + public BaseDataVariableState StartTime + { + get + { + return m_startTime; + } + + set + { + if (!Object.ReferenceEquals(m_startTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startTime = value; + } + } + + /// + public BaseDataVariableState MaximumActiveState + { + get + { + return m_maximumActiveState; + } + + set + { + if (!Object.ReferenceEquals(m_maximumActiveState, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maximumActiveState = value; + } + } + + /// + public BaseDataVariableState MaximumUnAck + { + get + { + return m_maximumUnAck; + } + + set + { + if (!Object.ReferenceEquals(m_maximumUnAck, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maximumUnAck = value; + } + } + + /// + public AlarmRateVariableState CurrentAlarmRate + { + get + { + return m_currentAlarmRate; + } + + set + { + if (!Object.ReferenceEquals(m_currentAlarmRate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_currentAlarmRate = value; + } + } + + /// + public AlarmRateVariableState MaximumAlarmRate + { + get + { + return m_maximumAlarmRate; + } + + set + { + if (!Object.ReferenceEquals(m_maximumAlarmRate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maximumAlarmRate = value; + } + } + + /// + public BaseDataVariableState MaximumReAlarmCount + { + get + { + return m_maximumReAlarmCount; + } + + set + { + if (!Object.ReferenceEquals(m_maximumReAlarmCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maximumReAlarmCount = value; + } + } + + /// + public AlarmRateVariableState AverageAlarmRate + { + get + { + return m_averageAlarmRate; + } + + set + { + if (!Object.ReferenceEquals(m_averageAlarmRate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_averageAlarmRate = value; + } + } + + /// + public MethodState Reset + { + get + { + return m_resetMethod; + } + + set + { + if (!Object.ReferenceEquals(m_resetMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resetMethod = 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_alarmCount != null) + { + children.Add(m_alarmCount); + } + + if (m_startTime != null) + { + children.Add(m_startTime); + } + + if (m_maximumActiveState != null) + { + children.Add(m_maximumActiveState); + } + + if (m_maximumUnAck != null) + { + children.Add(m_maximumUnAck); + } + + if (m_currentAlarmRate != null) + { + children.Add(m_currentAlarmRate); + } + + if (m_maximumAlarmRate != null) + { + children.Add(m_maximumAlarmRate); + } + + if (m_maximumReAlarmCount != null) + { + children.Add(m_maximumReAlarmCount); + } + + if (m_averageAlarmRate != null) + { + children.Add(m_averageAlarmRate); + } + + if (m_resetMethod != null) + { + children.Add(m_resetMethod); + } + + 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 Opc.Ua.BrowseNames.AlarmCount: + { + if (createOrReplace) + { + if (AlarmCount == null) + { + if (replacement == null) + { + AlarmCount = new BaseDataVariableState(this); + } + else + { + AlarmCount = (BaseDataVariableState)replacement; + } + } + } + + instance = AlarmCount; + break; + } + + case Opc.Ua.BrowseNames.StartTime: + { + if (createOrReplace) + { + if (StartTime == null) + { + if (replacement == null) + { + StartTime = new BaseDataVariableState(this); + } + else + { + StartTime = (BaseDataVariableState)replacement; + } + } + } + + instance = StartTime; + break; + } + + case Opc.Ua.BrowseNames.MaximumActiveState: + { + if (createOrReplace) + { + if (MaximumActiveState == null) + { + if (replacement == null) + { + MaximumActiveState = new BaseDataVariableState(this); + } + else + { + MaximumActiveState = (BaseDataVariableState)replacement; + } + } + } + + instance = MaximumActiveState; + break; + } + + case Opc.Ua.BrowseNames.MaximumUnAck: + { + if (createOrReplace) + { + if (MaximumUnAck == null) + { + if (replacement == null) + { + MaximumUnAck = new BaseDataVariableState(this); + } + else + { + MaximumUnAck = (BaseDataVariableState)replacement; + } + } + } + + instance = MaximumUnAck; + break; + } + + case Opc.Ua.BrowseNames.CurrentAlarmRate: + { + if (createOrReplace) + { + if (CurrentAlarmRate == null) + { + if (replacement == null) + { + CurrentAlarmRate = new AlarmRateVariableState(this); + } + else + { + CurrentAlarmRate = (AlarmRateVariableState)replacement; + } + } + } + + instance = CurrentAlarmRate; + break; + } + + case Opc.Ua.BrowseNames.MaximumAlarmRate: + { + if (createOrReplace) + { + if (MaximumAlarmRate == null) + { + if (replacement == null) + { + MaximumAlarmRate = new AlarmRateVariableState(this); + } + else + { + MaximumAlarmRate = (AlarmRateVariableState)replacement; + } + } + } + + instance = MaximumAlarmRate; + break; + } + + case Opc.Ua.BrowseNames.MaximumReAlarmCount: + { + if (createOrReplace) + { + if (MaximumReAlarmCount == null) + { + if (replacement == null) + { + MaximumReAlarmCount = new BaseDataVariableState(this); + } + else + { + MaximumReAlarmCount = (BaseDataVariableState)replacement; + } + } + } + + instance = MaximumReAlarmCount; + break; + } + + case Opc.Ua.BrowseNames.AverageAlarmRate: + { + if (createOrReplace) + { + if (AverageAlarmRate == null) + { + if (replacement == null) + { + AverageAlarmRate = new AlarmRateVariableState(this); + } + else + { + AverageAlarmRate = (AlarmRateVariableState)replacement; + } + } + } + + instance = AverageAlarmRate; + break; + } + + case Opc.Ua.BrowseNames.Reset: + { + if (createOrReplace) + { + if (Reset == null) + { + if (replacement == null) + { + Reset = new MethodState(this); + } + else + { + Reset = (MethodState)replacement; + } + } + } + + instance = Reset; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_alarmCount; + private BaseDataVariableState m_startTime; + private BaseDataVariableState m_maximumActiveState; + private BaseDataVariableState m_maximumUnAck; + private AlarmRateVariableState m_currentAlarmRate; + private AlarmRateVariableState m_maximumAlarmRate; + private BaseDataVariableState m_maximumReAlarmCount; + private AlarmRateVariableState m_averageAlarmRate; + private MethodState m_resetMethod; + #endregion + } + #endif + #endregion + + #region AlarmRateVariableState Class + #if (!OPCUA_EXCLUDE_AlarmRateVariableState) + /// + /// Stores an instance of the AlarmRateVariableType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AlarmRateVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AlarmRateVariableState(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(Opc.Ua.VariableTypes.AlarmRateVariableType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Double, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAHQAAAEFsYXJtUmF0ZVZhcmlhYmxlVHlwZUluc3RhbmNlAQB9QwEAfUN9" + + "QwAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAEAAAAUmF0ZQEAfkMALgBEfkMAAAAF/////wEB////" + + "/wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Rate + { + get + { + return m_rate; + } + + set + { + if (!Object.ReferenceEquals(m_rate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_rate = 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_rate != null) + { + children.Add(m_rate); + } + + 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 Opc.Ua.BrowseNames.Rate: + { + if (createOrReplace) + { + if (Rate == null) + { + if (replacement == null) + { + Rate = new PropertyState(this); + } + else + { + Rate = (PropertyState)replacement; + } + } + } + + instance = Rate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_rate; + #endregion + } + #endif + #endregion + + #region ProgramStateMachineState Class + #if (!OPCUA_EXCLUDE_ProgramStateMachineState) + /// + /// Stores an instance of the ProgramStateMachineType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProgramStateMachineState : FiniteStateMachineState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProgramStateMachineState(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(Opc.Ua.ObjectTypes.ProgramStateMachineType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ProgramDiagnostic != null) + { + ProgramDiagnostic.Initialize(context, ProgramDiagnostic_InitializationString); + } + + if (FinalResultData != null) + { + FinalResultData.Initialize(context, FinalResultData_InitializationString); + } + } + + #region Initialization String + private const string ProgramDiagnostic_InitializationString = + "//////////8VYIkKAgAAAAAAEQAAAFByb2dyYW1EaWFnbm9zdGljAQBfCQAvAQAXPF8JAAABACQ8////" + + "/wEB/////wwAAAAVYIkKAgAAAAAADwAAAENyZWF0ZVNlc3Npb25JZAEAAA8ALwA/AA8AAAAR/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEAAAAENyZWF0ZUNsaWVudE5hbWUBAAEPAC8APwEPAAAADP////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABYAAABJbnZvY2F0aW9uQ3JlYXRpb25UaW1lAQACDwAvAD8CDwAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABIAAABMYXN0VHJhbnNpdGlvblRpbWUBAAMPAC4ARAMPAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAExhc3RNZXRob2RDYWxsAQAEDwAvAD8EDwAAAAz/////" + + "AQH/////AAAAABVgiQoCAAAAAAATAAAATGFzdE1ldGhvZFNlc3Npb25JZAEABQ8ALwA/BQ8AAAAR////" + + "/wEB/////wAAAAAXYIkKAgAAAAAAGAAAAExhc3RNZXRob2RJbnB1dEFyZ3VtZW50cwEABg8ALwA/Bg8A" + + "AAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAABkAAABMYXN0TWV0aG9kT3V0cHV0QXJn" + + "dW1lbnRzAQAHDwAvAD8HDwAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAAFQAAAExh" + + "c3RNZXRob2RJbnB1dFZhbHVlcwEAvjoALwA/vjoAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoC" + + "AAAAAAAWAAAATGFzdE1ldGhvZE91dHB1dFZhbHVlcwEAwDoALwA/wDoAAAAYAQAAAAEAAAAAAAAAAQH/" + + "////AAAAABVgiQoCAAAAAAASAAAATGFzdE1ldGhvZENhbGxUaW1lAQAIDwAvAD8IDwAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABYAAABMYXN0TWV0aG9kUmV0dXJuU3RhdHVzAQAJDwAvAD8JDwAAABP/" + + "////AQH/////AAAAAA=="; + + private const string FinalResultData_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAEZpbmFsUmVzdWx0RGF0YQEACg8ALwA6Cg8AAP////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHwAAAFByb2dyYW1TdGF0ZU1hY2hpbmVUeXBlSW5zdGFuY2UBAFcJAQBX" + + "CVcJAAD/////BwAAABVgiQoCAAAAAAAMAAAAQ3VycmVudFN0YXRlAQD2DgAvAQDICvYOAAAAFf////8B" + + "Af////8CAAAAFWCJCgIAAAAAAAIAAABJZAEA9w4ALgBE9w4AAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAABgAAAE51bWJlcgEA+Q4ALgBE+Q4AAAAH/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAExhc3RU" + + "cmFuc2l0aW9uAQD7DgAvAQDPCvsOAAAAFf////8BAf////8DAAAAFWCJCgIAAAAAAAIAAABJZAEA/A4A" + + "LgBE/A4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAE51bWJlcgEA/g4ALgBE/g4AAAAH////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5zaXRpb25UaW1lAQD/DgAuAET/DgAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABEZWxldGFibGUBAFkJAC4ARFkJAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABBdXRvRGVsZXRlAQBaCQAuAERaCQAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAMAAAAUmVjeWNsZUNvdW50AQBbCQAuAERbCQAAAAb/////AQH/////AAAAABVgiQoCAAAAAAARAAAA" + + "UHJvZ3JhbURpYWdub3N0aWMBAF8JAC8BABc8XwkAAAEAJDz/////AQH/////DAAAABVgiQoCAAAAAAAP" + + "AAAAQ3JlYXRlU2Vzc2lvbklkAQAADwAvAD8ADwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAQAAAA" + + "Q3JlYXRlQ2xpZW50TmFtZQEAAQ8ALwA/AQ8AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAFgAAAElu" + + "dm9jYXRpb25DcmVhdGlvblRpbWUBAAIPAC8APwIPAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EgAAAExhc3RUcmFuc2l0aW9uVGltZQEAAw8ALgBEAw8AAAEAJgH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAOAAAATGFzdE1ldGhvZENhbGwBAAQPAC8APwQPAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABMA" + + "AABMYXN0TWV0aG9kU2Vzc2lvbklkAQAFDwAvAD8FDwAAABH/////AQH/////AAAAABdgiQoCAAAAAAAY" + + "AAAATGFzdE1ldGhvZElucHV0QXJndW1lbnRzAQAGDwAvAD8GDwAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAXYIkKAgAAAAAAGQAAAExhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMBAAcPAC8APwcPAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAVAAAATGFzdE1ldGhvZElucHV0VmFsdWVzAQC+" + + "OgAvAD++OgAAABgBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAABYAAABMYXN0TWV0aG9kT3V0" + + "cHV0VmFsdWVzAQDAOgAvAD/AOgAAABgBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABIAAABM" + + "YXN0TWV0aG9kQ2FsbFRpbWUBAAgPAC8APwgPAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAAFgAA" + + "AExhc3RNZXRob2RSZXR1cm5TdGF0dXMBAAkPAC8APwkPAAAAE/////8BAf////8AAAAABGCACgEAAAAA" + + "AA8AAABGaW5hbFJlc3VsdERhdGEBAAoPAC8AOgoPAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Deletable + { + get + { + return m_deletable; + } + + set + { + if (!Object.ReferenceEquals(m_deletable, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deletable = value; + } + } + + /// + public PropertyState AutoDelete + { + get + { + return m_autoDelete; + } + + set + { + if (!Object.ReferenceEquals(m_autoDelete, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_autoDelete = value; + } + } + + /// + public PropertyState RecycleCount + { + get + { + return m_recycleCount; + } + + set + { + if (!Object.ReferenceEquals(m_recycleCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_recycleCount = value; + } + } + + /// + public ProgramDiagnostic2State ProgramDiagnostic + { + get + { + return m_programDiagnostic; + } + + set + { + if (!Object.ReferenceEquals(m_programDiagnostic, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_programDiagnostic = value; + } + } + + /// + public BaseObjectState FinalResultData + { + get + { + return m_finalResultData; + } + + set + { + if (!Object.ReferenceEquals(m_finalResultData, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_finalResultData = 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_deletable != null) + { + children.Add(m_deletable); + } + + if (m_autoDelete != null) + { + children.Add(m_autoDelete); + } + + if (m_recycleCount != null) + { + children.Add(m_recycleCount); + } + + if (m_programDiagnostic != null) + { + children.Add(m_programDiagnostic); + } + + if (m_finalResultData != null) + { + children.Add(m_finalResultData); + } + + 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 Opc.Ua.BrowseNames.Deletable: + { + if (createOrReplace) + { + if (Deletable == null) + { + if (replacement == null) + { + Deletable = new PropertyState(this); + } + else + { + Deletable = (PropertyState)replacement; + } + } + } + + instance = Deletable; + break; + } + + case Opc.Ua.BrowseNames.AutoDelete: + { + if (createOrReplace) + { + if (AutoDelete == null) + { + if (replacement == null) + { + AutoDelete = new PropertyState(this); + } + else + { + AutoDelete = (PropertyState)replacement; + } + } + } + + instance = AutoDelete; + break; + } + + case Opc.Ua.BrowseNames.RecycleCount: + { + if (createOrReplace) + { + if (RecycleCount == null) + { + if (replacement == null) + { + RecycleCount = new PropertyState(this); + } + else + { + RecycleCount = (PropertyState)replacement; + } + } + } + + instance = RecycleCount; + break; + } + + case Opc.Ua.BrowseNames.ProgramDiagnostic: + { + if (createOrReplace) + { + if (ProgramDiagnostic == null) + { + if (replacement == null) + { + ProgramDiagnostic = new ProgramDiagnostic2State(this); + } + else + { + ProgramDiagnostic = (ProgramDiagnostic2State)replacement; + } + } + } + + instance = ProgramDiagnostic; + break; + } + + case Opc.Ua.BrowseNames.FinalResultData: + { + if (createOrReplace) + { + if (FinalResultData == null) + { + if (replacement == null) + { + FinalResultData = new BaseObjectState(this); + } + else + { + FinalResultData = (BaseObjectState)replacement; + } + } + } + + instance = FinalResultData; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_deletable; + private PropertyState m_autoDelete; + private PropertyState m_recycleCount; + private ProgramDiagnostic2State m_programDiagnostic; + private BaseObjectState m_finalResultData; + #endregion + } + #endif + #endregion + + #region ProgramTransitionEventState Class + #if (!OPCUA_EXCLUDE_ProgramTransitionEventState) + /// + /// Stores an instance of the ProgramTransitionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProgramTransitionEventState : TransitionEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProgramTransitionEventState(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(Opc.Ua.ObjectTypes.ProgramTransitionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAFByb2dyYW1UcmFuc2l0aW9uRXZlbnRUeXBlSW5zdGFuY2UBAEoJ" + + "AQBKCUoJAAD/////DAAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAxg4ALgBExg4AAAAP/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAxw4ALgBExw4AAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5vZGUBAMgOAC4ARMgOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoA" + + "AABTb3VyY2VOYW1lAQDJDgAuAETJDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAAVGltZQEA" + + "yg4ALgBEyg4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUBAMsOAC4A" + + "RMsOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAM0OAC4ARM0OAAAAFf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAzg4ALgBEzg4AAAAF/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFRyYW5zaXRpb24BANkOAC8BAMoK2Q4AAAAV/////wEB/////wEAAAAVYIkK" + + "AgAAAAAAAgAAAElkAQDaDgAuAETaDgAAABj/////AQH/////AAAAABVgiQoCAAAAAAAJAAAARnJvbVN0" + + "YXRlAQDPDgAvAQDDCs8OAAAAFf////8BAf////8BAAAAFWCJCgIAAAAAAAIAAABJZAEA0A4ALgBE0A4A" + + "AAAY/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAFRvU3RhdGUBANQOAC8BAMMK1A4AAAAV/////wEB" + + "/////wEAAAAVYIkKAgAAAAAAAgAAAElkAQDVDgAuAETVDgAAABj/////AQH/////AAAAABVgiQoCAAAA" + + "AAASAAAASW50ZXJtZWRpYXRlUmVzdWx0AQBLCQAvAD9LCQAAABj/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState IntermediateResult + { + get + { + return m_intermediateResult; + } + + set + { + if (!Object.ReferenceEquals(m_intermediateResult, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_intermediateResult = 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_intermediateResult != null) + { + children.Add(m_intermediateResult); + } + + 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 Opc.Ua.BrowseNames.IntermediateResult: + { + if (createOrReplace) + { + if (IntermediateResult == null) + { + if (replacement == null) + { + IntermediateResult = new BaseDataVariableState(this); + } + else + { + IntermediateResult = (BaseDataVariableState)replacement; + } + } + } + + instance = IntermediateResult; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_intermediateResult; + #endregion + } + #endif + #endregion + + #region AuditProgramTransitionEventState Class + #if (!OPCUA_EXCLUDE_AuditProgramTransitionEventState) + /// + /// Stores an instance of the AuditProgramTransitionEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditProgramTransitionEventState : AuditUpdateStateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditProgramTransitionEventState(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(Opc.Ua.ObjectTypes.AuditProgramTransitionEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJwAAAEF1ZGl0UHJvZ3JhbVRyYW5zaXRpb25FdmVudFR5cGVJbnN0YW5j" + + "ZQEAUC4BAFAuUC4AAP////8SAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBRLgAuAERRLgAAAA//////" + + "AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBSLgAuAERSLgAAABH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAUy4ALgBEUy4AAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5hbWUBAFQuAC4ARFQuAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABU" + + "aW1lAQBVLgAuAERVLgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA" + + "Vi4ALgBEVi4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAWC4ALgBEWC4A" + + "AAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQBZLgAuAERZLgAAAAX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQBaLgAuAERaLgAAAQAmAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAFsuAC4ARFsuAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAgAAABTZXJ2ZXJJZAEAXC4ALgBEXC4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENs" + + "aWVudEF1ZGl0RW50cnlJZAEAXS4ALgBEXS4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENs" + + "aWVudFVzZXJJZAEAXi4ALgBEXi4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElk" + + "AQBfLgAuAERfLgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAGAu" + + "AC4ARGAuAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACgAAAE9sZFN0YXRlSWQBAGEu" + + "AC4ARGEuAAAAGP////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABOZXdTdGF0ZUlkAQBiLgAuAERiLgAA" + + "ABj/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAVHJhbnNpdGlvbk51bWJlcgEAYy4ALgBEYy4AAAAH" + + "/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState TransitionNumber + { + get + { + return m_transitionNumber; + } + + set + { + if (!Object.ReferenceEquals(m_transitionNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transitionNumber = 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_transitionNumber != null) + { + children.Add(m_transitionNumber); + } + + 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 Opc.Ua.BrowseNames.TransitionNumber: + { + if (createOrReplace) + { + if (TransitionNumber == null) + { + if (replacement == null) + { + TransitionNumber = new PropertyState(this); + } + else + { + TransitionNumber = (PropertyState)replacement; + } + } + } + + instance = TransitionNumber; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_transitionNumber; + #endregion + } + #endif + #endregion + + #region ProgramTransitionAuditEventState Class + #if (!OPCUA_EXCLUDE_ProgramTransitionAuditEventState) + /// + /// Stores an instance of the ProgramTransitionAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProgramTransitionAuditEventState : AuditUpdateStateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProgramTransitionAuditEventState(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(Opc.Ua.ObjectTypes.ProgramTransitionAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJwAAAFByb2dyYW1UcmFuc2l0aW9uQXVkaXRFdmVudFR5cGVJbnN0YW5j" + + "ZQEA3g4BAN4O3g4AAP////8SAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQDfDgAuAETfDgAAAA//////" + + "AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQDgDgAuAETgDgAAABH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEA4Q4ALgBE4Q4AAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACgAAAFNvdXJjZU5hbWUBAOIOAC4AROIOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABU" + + "aW1lAQDjDgAuAETjDgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEA" + + "5A4ALgBE5A4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEA5g4ALgBE5g4A" + + "AAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQDnDgAuAETnDgAAAAX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQDoDgAuAEToDgAAAQAmAf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAOkOAC4AROkOAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAgAAABTZXJ2ZXJJZAEA6g4ALgBE6g4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAENs" + + "aWVudEF1ZGl0RW50cnlJZAEA6w4ALgBE6w4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENs" + + "aWVudFVzZXJJZAEA7A4ALgBE7A4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhvZElk" + + "AQDtDgAuAETtDgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAO4O" + + "AC4ARO4OAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACgAAAE9sZFN0YXRlSWQBAO8O" + + "AC4ARO8OAAAAGP////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABOZXdTdGF0ZUlkAQDwDgAuAETwDgAA" + + "ABj/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAVHJhbnNpdGlvbgEA8Q4ALwEAzwrxDgAAABX/////" + + "AQH/////AQAAABVgiQoCAAAAAAACAAAASWQBAPIOAC4ARPIOAAAAEf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public FiniteTransitionVariableState Transition + { + get + { + return m_transition; + } + + set + { + if (!Object.ReferenceEquals(m_transition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transition = 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_transition != null) + { + children.Add(m_transition); + } + + 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 Opc.Ua.BrowseNames.Transition: + { + if (createOrReplace) + { + if (Transition == null) + { + if (replacement == null) + { + Transition = new FiniteTransitionVariableState(this); + } + else + { + Transition = (FiniteTransitionVariableState)replacement; + } + } + } + + instance = Transition; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private FiniteTransitionVariableState m_transition; + #endregion + } + #endif + #endregion + + #region ProgramDiagnosticState Class + #if (!OPCUA_EXCLUDE_ProgramDiagnosticState) + /// + /// Stores an instance of the ProgramDiagnosticType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProgramDiagnosticState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProgramDiagnosticState(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(Opc.Ua.VariableTypes.ProgramDiagnosticType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ProgramDiagnosticDataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAHQAAAFByb2dyYW1EaWFnbm9zdGljVHlwZUluc3RhbmNlAQBMCQEATAlM" + + "CQAAAQB+A/////8BAf////8KAAAAFWCJCgIAAAAAAA8AAABDcmVhdGVTZXNzaW9uSWQBAE0JAC4ARE0J" + + "AAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABDcmVhdGVDbGllbnROYW1lAQBOCQAuAEROCQAA" + + "AAz/////AQH/////AAAAABVgiQoCAAAAAAAWAAAASW52b2NhdGlvbkNyZWF0aW9uVGltZQEATwkALgBE" + + "TwkAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAASAAAATGFzdFRyYW5zaXRpb25UaW1lAQBQCQAu" + + "AERQCQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABMYXN0TWV0aG9kQ2FsbAEAUQkALgBE" + + "UQkAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAExhc3RNZXRob2RTZXNzaW9uSWQBAFIJAC4A" + + "RFIJAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAABgAAABMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMB" + + "AFMJAC4ARFMJAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAAGQAAAExhc3RNZXRob2RP" + + "dXRwdXRBcmd1bWVudHMBAFQJAC4ARFQJAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAA" + + "EgAAAExhc3RNZXRob2RDYWxsVGltZQEAVQkALgBEVQkAAAEAJgH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAWAAAATGFzdE1ldGhvZFJldHVyblN0YXR1cwEAVgkALgBEVgkAAAAT/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState CreateSessionId + { + get + { + return m_createSessionId; + } + + set + { + if (!Object.ReferenceEquals(m_createSessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createSessionId = value; + } + } + + /// + public PropertyState CreateClientName + { + get + { + return m_createClientName; + } + + set + { + if (!Object.ReferenceEquals(m_createClientName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createClientName = value; + } + } + + /// + public PropertyState InvocationCreationTime + { + get + { + return m_invocationCreationTime; + } + + set + { + if (!Object.ReferenceEquals(m_invocationCreationTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_invocationCreationTime = value; + } + } + + /// + public PropertyState LastTransitionTime + { + get + { + return m_lastTransitionTime; + } + + set + { + if (!Object.ReferenceEquals(m_lastTransitionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastTransitionTime = value; + } + } + + /// + public PropertyState LastMethodCall + { + get + { + return m_lastMethodCall; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodCall, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodCall = value; + } + } + + /// + public PropertyState LastMethodSessionId + { + get + { + return m_lastMethodSessionId; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodSessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodSessionId = value; + } + } + + /// + public PropertyState LastMethodInputArguments + { + get + { + return m_lastMethodInputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodInputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodInputArguments = value; + } + } + + /// + public PropertyState LastMethodOutputArguments + { + get + { + return m_lastMethodOutputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodOutputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodOutputArguments = value; + } + } + + /// + public PropertyState LastMethodCallTime + { + get + { + return m_lastMethodCallTime; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodCallTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodCallTime = value; + } + } + + /// + public PropertyState LastMethodReturnStatus + { + get + { + return m_lastMethodReturnStatus; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodReturnStatus, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodReturnStatus = 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_createSessionId != null) + { + children.Add(m_createSessionId); + } + + if (m_createClientName != null) + { + children.Add(m_createClientName); + } + + if (m_invocationCreationTime != null) + { + children.Add(m_invocationCreationTime); + } + + if (m_lastTransitionTime != null) + { + children.Add(m_lastTransitionTime); + } + + if (m_lastMethodCall != null) + { + children.Add(m_lastMethodCall); + } + + if (m_lastMethodSessionId != null) + { + children.Add(m_lastMethodSessionId); + } + + if (m_lastMethodInputArguments != null) + { + children.Add(m_lastMethodInputArguments); + } + + if (m_lastMethodOutputArguments != null) + { + children.Add(m_lastMethodOutputArguments); + } + + if (m_lastMethodCallTime != null) + { + children.Add(m_lastMethodCallTime); + } + + if (m_lastMethodReturnStatus != null) + { + children.Add(m_lastMethodReturnStatus); + } + + 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 Opc.Ua.BrowseNames.CreateSessionId: + { + if (createOrReplace) + { + if (CreateSessionId == null) + { + if (replacement == null) + { + CreateSessionId = new PropertyState(this); + } + else + { + CreateSessionId = (PropertyState)replacement; + } + } + } + + instance = CreateSessionId; + break; + } + + case Opc.Ua.BrowseNames.CreateClientName: + { + if (createOrReplace) + { + if (CreateClientName == null) + { + if (replacement == null) + { + CreateClientName = new PropertyState(this); + } + else + { + CreateClientName = (PropertyState)replacement; + } + } + } + + instance = CreateClientName; + break; + } + + case Opc.Ua.BrowseNames.InvocationCreationTime: + { + if (createOrReplace) + { + if (InvocationCreationTime == null) + { + if (replacement == null) + { + InvocationCreationTime = new PropertyState(this); + } + else + { + InvocationCreationTime = (PropertyState)replacement; + } + } + } + + instance = InvocationCreationTime; + break; + } + + case Opc.Ua.BrowseNames.LastTransitionTime: + { + if (createOrReplace) + { + if (LastTransitionTime == null) + { + if (replacement == null) + { + LastTransitionTime = new PropertyState(this); + } + else + { + LastTransitionTime = (PropertyState)replacement; + } + } + } + + instance = LastTransitionTime; + break; + } + + case Opc.Ua.BrowseNames.LastMethodCall: + { + if (createOrReplace) + { + if (LastMethodCall == null) + { + if (replacement == null) + { + LastMethodCall = new PropertyState(this); + } + else + { + LastMethodCall = (PropertyState)replacement; + } + } + } + + instance = LastMethodCall; + break; + } + + case Opc.Ua.BrowseNames.LastMethodSessionId: + { + if (createOrReplace) + { + if (LastMethodSessionId == null) + { + if (replacement == null) + { + LastMethodSessionId = new PropertyState(this); + } + else + { + LastMethodSessionId = (PropertyState)replacement; + } + } + } + + instance = LastMethodSessionId; + break; + } + + case Opc.Ua.BrowseNames.LastMethodInputArguments: + { + if (createOrReplace) + { + if (LastMethodInputArguments == null) + { + if (replacement == null) + { + LastMethodInputArguments = new PropertyState(this); + } + else + { + LastMethodInputArguments = (PropertyState)replacement; + } + } + } + + instance = LastMethodInputArguments; + break; + } + + case Opc.Ua.BrowseNames.LastMethodOutputArguments: + { + if (createOrReplace) + { + if (LastMethodOutputArguments == null) + { + if (replacement == null) + { + LastMethodOutputArguments = new PropertyState(this); + } + else + { + LastMethodOutputArguments = (PropertyState)replacement; + } + } + } + + instance = LastMethodOutputArguments; + break; + } + + case Opc.Ua.BrowseNames.LastMethodCallTime: + { + if (createOrReplace) + { + if (LastMethodCallTime == null) + { + if (replacement == null) + { + LastMethodCallTime = new PropertyState(this); + } + else + { + LastMethodCallTime = (PropertyState)replacement; + } + } + } + + instance = LastMethodCallTime; + break; + } + + case Opc.Ua.BrowseNames.LastMethodReturnStatus: + { + if (createOrReplace) + { + if (LastMethodReturnStatus == null) + { + if (replacement == null) + { + LastMethodReturnStatus = new PropertyState(this); + } + else + { + LastMethodReturnStatus = (PropertyState)replacement; + } + } + } + + instance = LastMethodReturnStatus; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_createSessionId; + private PropertyState m_createClientName; + private PropertyState m_invocationCreationTime; + private PropertyState m_lastTransitionTime; + private PropertyState m_lastMethodCall; + private PropertyState m_lastMethodSessionId; + private PropertyState m_lastMethodInputArguments; + private PropertyState m_lastMethodOutputArguments; + private PropertyState m_lastMethodCallTime; + private PropertyState m_lastMethodReturnStatus; + #endregion + } + + #region ProgramDiagnosticValue Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ProgramDiagnosticValue : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ProgramDiagnosticValue(ProgramDiagnosticState variable, ProgramDiagnosticDataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ProgramDiagnosticDataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ProgramDiagnosticState Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ProgramDiagnosticDataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ProgramDiagnosticState 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.CreateSessionId; + instance.OnReadValue = OnRead_CreateSessionId; + instance.OnSimpleWriteValue = OnWrite_CreateSessionId; + updateList.Add(instance); + instance = m_variable.CreateClientName; + instance.OnReadValue = OnRead_CreateClientName; + instance.OnSimpleWriteValue = OnWrite_CreateClientName; + updateList.Add(instance); + instance = m_variable.InvocationCreationTime; + instance.OnReadValue = OnRead_InvocationCreationTime; + instance.OnSimpleWriteValue = OnWrite_InvocationCreationTime; + updateList.Add(instance); + instance = m_variable.LastTransitionTime; + instance.OnReadValue = OnRead_LastTransitionTime; + instance.OnSimpleWriteValue = OnWrite_LastTransitionTime; + updateList.Add(instance); + instance = m_variable.LastMethodCall; + instance.OnReadValue = OnRead_LastMethodCall; + instance.OnSimpleWriteValue = OnWrite_LastMethodCall; + updateList.Add(instance); + instance = m_variable.LastMethodSessionId; + instance.OnReadValue = OnRead_LastMethodSessionId; + instance.OnSimpleWriteValue = OnWrite_LastMethodSessionId; + updateList.Add(instance); + instance = m_variable.LastMethodInputArguments; + instance.OnReadValue = OnRead_LastMethodInputArguments; + instance.OnSimpleWriteValue = OnWrite_LastMethodInputArguments; + updateList.Add(instance); + instance = m_variable.LastMethodOutputArguments; + instance.OnReadValue = OnRead_LastMethodOutputArguments; + instance.OnSimpleWriteValue = OnWrite_LastMethodOutputArguments; + updateList.Add(instance); + instance = m_variable.LastMethodCallTime; + instance.OnReadValue = OnRead_LastMethodCallTime; + instance.OnSimpleWriteValue = OnWrite_LastMethodCallTime; + updateList.Add(instance); + instance = m_variable.LastMethodReturnStatus; + instance.OnReadValue = OnRead_LastMethodReturnStatus; + instance.OnSimpleWriteValue = OnWrite_LastMethodReturnStatus; + 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 = (ProgramDiagnosticDataType)Write(value); + } + + return ServiceResult.Good; + } + + #region CreateSessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CreateSessionId( + 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.CreateSessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CreateSessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CreateSessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CreateClientName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CreateClientName( + 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.CreateClientName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CreateClientName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CreateClientName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region InvocationCreationTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_InvocationCreationTime( + 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.InvocationCreationTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_InvocationCreationTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.InvocationCreationTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastTransitionTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastTransitionTime( + 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.LastTransitionTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastTransitionTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastTransitionTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodCall Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodCall( + 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.LastMethodCall; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodCall(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodCall = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodSessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodSessionId( + 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.LastMethodSessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodSessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodSessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodInputArguments Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodInputArguments( + 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.LastMethodInputArguments; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodInputArguments(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodInputArguments = (ArgumentCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodOutputArguments Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodOutputArguments( + 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.LastMethodOutputArguments; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodOutputArguments(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodOutputArguments = (ArgumentCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodCallTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodCallTime( + 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.LastMethodCallTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodCallTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodCallTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodReturnStatus Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodReturnStatus( + 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.LastMethodReturnStatus; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodReturnStatus(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodReturnStatus = (StatusResult)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ProgramDiagnosticDataType m_value; + private ProgramDiagnosticState m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region ProgramDiagnostic2State Class + #if (!OPCUA_EXCLUDE_ProgramDiagnostic2State) + /// + /// Stores an instance of the ProgramDiagnostic2Type VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ProgramDiagnostic2State : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ProgramDiagnostic2State(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(Opc.Ua.VariableTypes.ProgramDiagnostic2Type, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.ProgramDiagnostic2DataType, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAAHgAAAFByb2dyYW1EaWFnbm9zdGljMlR5cGVJbnN0YW5jZQEAFzwBABc8" + + "FzwAAAEAJDz/////AQH/////DAAAABVgiQoCAAAAAAAPAAAAQ3JlYXRlU2Vzc2lvbklkAQAYPAAvAD8Y" + + "PAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAQ3JlYXRlQ2xpZW50TmFtZQEAGTwALwA/GTwA" + + "AAAM/////wEB/////wAAAAAVYIkKAgAAAAAAFgAAAEludm9jYXRpb25DcmVhdGlvblRpbWUBABo8AC8A" + + "Pxo8AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAAEgAAAExhc3RUcmFuc2l0aW9uVGltZQEAGzwA" + + "LgBEGzwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAATGFzdE1ldGhvZENhbGwBABw8AC8A" + + "Pxw8AAAADP////8BAf////8AAAAAFWCJCgIAAAAAABMAAABMYXN0TWV0aG9kU2Vzc2lvbklkAQAdPAAv" + + "AD8dPAAAABH/////AQH/////AAAAABdgiQoCAAAAAAAYAAAATGFzdE1ldGhvZElucHV0QXJndW1lbnRz" + + "AQAePAAvAD8ePAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAAGQAAAExhc3RNZXRo" + + "b2RPdXRwdXRBcmd1bWVudHMBAB88AC8APx88AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoC" + + "AAAAAAAVAAAATGFzdE1ldGhvZElucHV0VmFsdWVzAQAgPAAvAD8gPAAAABgBAAAAAQAAAAAAAAABAf//" + + "//8AAAAAF2CJCgIAAAAAABYAAABMYXN0TWV0aG9kT3V0cHV0VmFsdWVzAQAhPAAvAD8hPAAAABgBAAAA" + + "AQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABIAAABMYXN0TWV0aG9kQ2FsbFRpbWUBACI8AC8APyI8" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAAFgAAAExhc3RNZXRob2RSZXR1cm5TdGF0dXMBACM8" + + "AC8APyM8AAAAE/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState CreateSessionId + { + get + { + return m_createSessionId; + } + + set + { + if (!Object.ReferenceEquals(m_createSessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createSessionId = value; + } + } + + /// + public BaseDataVariableState CreateClientName + { + get + { + return m_createClientName; + } + + set + { + if (!Object.ReferenceEquals(m_createClientName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createClientName = value; + } + } + + /// + public BaseDataVariableState InvocationCreationTime + { + get + { + return m_invocationCreationTime; + } + + set + { + if (!Object.ReferenceEquals(m_invocationCreationTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_invocationCreationTime = value; + } + } + + /// + public PropertyState LastTransitionTime + { + get + { + return m_lastTransitionTime; + } + + set + { + if (!Object.ReferenceEquals(m_lastTransitionTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastTransitionTime = value; + } + } + + /// + public BaseDataVariableState LastMethodCall + { + get + { + return m_lastMethodCall; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodCall, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodCall = value; + } + } + + /// + public BaseDataVariableState LastMethodSessionId + { + get + { + return m_lastMethodSessionId; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodSessionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodSessionId = value; + } + } + + /// + public BaseDataVariableState LastMethodInputArguments + { + get + { + return m_lastMethodInputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodInputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodInputArguments = value; + } + } + + /// + public BaseDataVariableState LastMethodOutputArguments + { + get + { + return m_lastMethodOutputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodOutputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodOutputArguments = value; + } + } + + /// + public BaseDataVariableState LastMethodInputValues + { + get + { + return m_lastMethodInputValues; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodInputValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodInputValues = value; + } + } + + /// + public BaseDataVariableState LastMethodOutputValues + { + get + { + return m_lastMethodOutputValues; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodOutputValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodOutputValues = value; + } + } + + /// + public BaseDataVariableState LastMethodCallTime + { + get + { + return m_lastMethodCallTime; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodCallTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodCallTime = value; + } + } + + /// + public BaseDataVariableState LastMethodReturnStatus + { + get + { + return m_lastMethodReturnStatus; + } + + set + { + if (!Object.ReferenceEquals(m_lastMethodReturnStatus, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastMethodReturnStatus = 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_createSessionId != null) + { + children.Add(m_createSessionId); + } + + if (m_createClientName != null) + { + children.Add(m_createClientName); + } + + if (m_invocationCreationTime != null) + { + children.Add(m_invocationCreationTime); + } + + if (m_lastTransitionTime != null) + { + children.Add(m_lastTransitionTime); + } + + if (m_lastMethodCall != null) + { + children.Add(m_lastMethodCall); + } + + if (m_lastMethodSessionId != null) + { + children.Add(m_lastMethodSessionId); + } + + if (m_lastMethodInputArguments != null) + { + children.Add(m_lastMethodInputArguments); + } + + if (m_lastMethodOutputArguments != null) + { + children.Add(m_lastMethodOutputArguments); + } + + if (m_lastMethodInputValues != null) + { + children.Add(m_lastMethodInputValues); + } + + if (m_lastMethodOutputValues != null) + { + children.Add(m_lastMethodOutputValues); + } + + if (m_lastMethodCallTime != null) + { + children.Add(m_lastMethodCallTime); + } + + if (m_lastMethodReturnStatus != null) + { + children.Add(m_lastMethodReturnStatus); + } + + 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 Opc.Ua.BrowseNames.CreateSessionId: + { + if (createOrReplace) + { + if (CreateSessionId == null) + { + if (replacement == null) + { + CreateSessionId = new BaseDataVariableState(this); + } + else + { + CreateSessionId = (BaseDataVariableState)replacement; + } + } + } + + instance = CreateSessionId; + break; + } + + case Opc.Ua.BrowseNames.CreateClientName: + { + if (createOrReplace) + { + if (CreateClientName == null) + { + if (replacement == null) + { + CreateClientName = new BaseDataVariableState(this); + } + else + { + CreateClientName = (BaseDataVariableState)replacement; + } + } + } + + instance = CreateClientName; + break; + } + + case Opc.Ua.BrowseNames.InvocationCreationTime: + { + if (createOrReplace) + { + if (InvocationCreationTime == null) + { + if (replacement == null) + { + InvocationCreationTime = new BaseDataVariableState(this); + } + else + { + InvocationCreationTime = (BaseDataVariableState)replacement; + } + } + } + + instance = InvocationCreationTime; + break; + } + + case Opc.Ua.BrowseNames.LastTransitionTime: + { + if (createOrReplace) + { + if (LastTransitionTime == null) + { + if (replacement == null) + { + LastTransitionTime = new PropertyState(this); + } + else + { + LastTransitionTime = (PropertyState)replacement; + } + } + } + + instance = LastTransitionTime; + break; + } + + case Opc.Ua.BrowseNames.LastMethodCall: + { + if (createOrReplace) + { + if (LastMethodCall == null) + { + if (replacement == null) + { + LastMethodCall = new BaseDataVariableState(this); + } + else + { + LastMethodCall = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodCall; + break; + } + + case Opc.Ua.BrowseNames.LastMethodSessionId: + { + if (createOrReplace) + { + if (LastMethodSessionId == null) + { + if (replacement == null) + { + LastMethodSessionId = new BaseDataVariableState(this); + } + else + { + LastMethodSessionId = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodSessionId; + break; + } + + case Opc.Ua.BrowseNames.LastMethodInputArguments: + { + if (createOrReplace) + { + if (LastMethodInputArguments == null) + { + if (replacement == null) + { + LastMethodInputArguments = new BaseDataVariableState(this); + } + else + { + LastMethodInputArguments = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodInputArguments; + break; + } + + case Opc.Ua.BrowseNames.LastMethodOutputArguments: + { + if (createOrReplace) + { + if (LastMethodOutputArguments == null) + { + if (replacement == null) + { + LastMethodOutputArguments = new BaseDataVariableState(this); + } + else + { + LastMethodOutputArguments = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodOutputArguments; + break; + } + + case Opc.Ua.BrowseNames.LastMethodInputValues: + { + if (createOrReplace) + { + if (LastMethodInputValues == null) + { + if (replacement == null) + { + LastMethodInputValues = new BaseDataVariableState(this); + } + else + { + LastMethodInputValues = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodInputValues; + break; + } + + case Opc.Ua.BrowseNames.LastMethodOutputValues: + { + if (createOrReplace) + { + if (LastMethodOutputValues == null) + { + if (replacement == null) + { + LastMethodOutputValues = new BaseDataVariableState(this); + } + else + { + LastMethodOutputValues = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodOutputValues; + break; + } + + case Opc.Ua.BrowseNames.LastMethodCallTime: + { + if (createOrReplace) + { + if (LastMethodCallTime == null) + { + if (replacement == null) + { + LastMethodCallTime = new BaseDataVariableState(this); + } + else + { + LastMethodCallTime = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodCallTime; + break; + } + + case Opc.Ua.BrowseNames.LastMethodReturnStatus: + { + if (createOrReplace) + { + if (LastMethodReturnStatus == null) + { + if (replacement == null) + { + LastMethodReturnStatus = new BaseDataVariableState(this); + } + else + { + LastMethodReturnStatus = (BaseDataVariableState)replacement; + } + } + } + + instance = LastMethodReturnStatus; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_createSessionId; + private BaseDataVariableState m_createClientName; + private BaseDataVariableState m_invocationCreationTime; + private PropertyState m_lastTransitionTime; + private BaseDataVariableState m_lastMethodCall; + private BaseDataVariableState m_lastMethodSessionId; + private BaseDataVariableState m_lastMethodInputArguments; + private BaseDataVariableState m_lastMethodOutputArguments; + private BaseDataVariableState m_lastMethodInputValues; + private BaseDataVariableState m_lastMethodOutputValues; + private BaseDataVariableState m_lastMethodCallTime; + private BaseDataVariableState m_lastMethodReturnStatus; + #endregion + } + + #region ProgramDiagnostic2Value Class + /// + /// A typed version of the _BrowseName_ variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class ProgramDiagnostic2Value : BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ProgramDiagnostic2Value(ProgramDiagnostic2State variable, ProgramDiagnostic2DataType value, object dataLock) : base(dataLock) + { + m_value = value; + + if (m_value == null) + { + m_value = new ProgramDiagnostic2DataType(); + } + + Initialize(variable); + } + #endregion + + #region Public Members + /// + /// The variable that the value belongs to. + /// + public ProgramDiagnostic2State Variable + { + get { return m_variable; } + } + + /// + /// The value of the variable. + /// + public ProgramDiagnostic2DataType Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Methods + /// + /// Initializes the object. + /// + private void Initialize(ProgramDiagnostic2State 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.CreateSessionId; + instance.OnReadValue = OnRead_CreateSessionId; + instance.OnSimpleWriteValue = OnWrite_CreateSessionId; + updateList.Add(instance); + instance = m_variable.CreateClientName; + instance.OnReadValue = OnRead_CreateClientName; + instance.OnSimpleWriteValue = OnWrite_CreateClientName; + updateList.Add(instance); + instance = m_variable.InvocationCreationTime; + instance.OnReadValue = OnRead_InvocationCreationTime; + instance.OnSimpleWriteValue = OnWrite_InvocationCreationTime; + updateList.Add(instance); + instance = m_variable.LastTransitionTime; + instance.OnReadValue = OnRead_LastTransitionTime; + instance.OnSimpleWriteValue = OnWrite_LastTransitionTime; + updateList.Add(instance); + instance = m_variable.LastMethodCall; + instance.OnReadValue = OnRead_LastMethodCall; + instance.OnSimpleWriteValue = OnWrite_LastMethodCall; + updateList.Add(instance); + instance = m_variable.LastMethodSessionId; + instance.OnReadValue = OnRead_LastMethodSessionId; + instance.OnSimpleWriteValue = OnWrite_LastMethodSessionId; + updateList.Add(instance); + instance = m_variable.LastMethodInputArguments; + instance.OnReadValue = OnRead_LastMethodInputArguments; + instance.OnSimpleWriteValue = OnWrite_LastMethodInputArguments; + updateList.Add(instance); + instance = m_variable.LastMethodOutputArguments; + instance.OnReadValue = OnRead_LastMethodOutputArguments; + instance.OnSimpleWriteValue = OnWrite_LastMethodOutputArguments; + updateList.Add(instance); + instance = m_variable.LastMethodInputValues; + instance.OnReadValue = OnRead_LastMethodInputValues; + instance.OnSimpleWriteValue = OnWrite_LastMethodInputValues; + updateList.Add(instance); + instance = m_variable.LastMethodOutputValues; + instance.OnReadValue = OnRead_LastMethodOutputValues; + instance.OnSimpleWriteValue = OnWrite_LastMethodOutputValues; + updateList.Add(instance); + instance = m_variable.LastMethodCallTime; + instance.OnReadValue = OnRead_LastMethodCallTime; + instance.OnSimpleWriteValue = OnWrite_LastMethodCallTime; + updateList.Add(instance); + instance = m_variable.LastMethodReturnStatus; + instance.OnReadValue = OnRead_LastMethodReturnStatus; + instance.OnSimpleWriteValue = OnWrite_LastMethodReturnStatus; + 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 = (ProgramDiagnostic2DataType)Write(value); + } + + return ServiceResult.Good; + } + + #region CreateSessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CreateSessionId( + 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.CreateSessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CreateSessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CreateSessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region CreateClientName Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_CreateClientName( + 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.CreateClientName; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_CreateClientName(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.CreateClientName = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region InvocationCreationTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_InvocationCreationTime( + 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.InvocationCreationTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_InvocationCreationTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.InvocationCreationTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastTransitionTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastTransitionTime( + 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.LastTransitionTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastTransitionTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastTransitionTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodCall Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodCall( + 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.LastMethodCall; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodCall(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodCall = (string)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodSessionId Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodSessionId( + 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.LastMethodSessionId; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodSessionId(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodSessionId = (NodeId)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodInputArguments Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodInputArguments( + 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.LastMethodInputArguments; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodInputArguments(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodInputArguments = (ArgumentCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodOutputArguments Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodOutputArguments( + 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.LastMethodOutputArguments; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodOutputArguments(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodOutputArguments = (ArgumentCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodInputValues Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodInputValues( + 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.LastMethodInputValues; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodInputValues(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodInputValues = (VariantCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodOutputValues Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodOutputValues( + 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.LastMethodOutputValues; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodOutputValues(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodOutputValues = (VariantCollection)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodCallTime Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodCallTime( + 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.LastMethodCallTime; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodCallTime(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodCallTime = (DateTime)Write(value); + } + + return ServiceResult.Good; + } + #endregion + + #region LastMethodReturnStatus Access Methods + /// + /// Reads the value of the variable child. + /// + private ServiceResult OnRead_LastMethodReturnStatus( + 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.LastMethodReturnStatus; + } + + return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); + } + } + + /// + /// Writes the value of the variable child. + /// + private ServiceResult OnWrite_LastMethodReturnStatus(ISystemContext context, NodeState node, ref object value) + { + lock (Lock) + { + m_value.LastMethodReturnStatus = (StatusResult)Write(value); + } + + return ServiceResult.Good; + } + #endregion + #endregion + + #region Private Fields + private ProgramDiagnostic2DataType m_value; + private ProgramDiagnostic2State m_variable; + #endregion + } + #endregion + #endif + #endregion + + #region HistoricalDataConfigurationState Class + #if (!OPCUA_EXCLUDE_HistoricalDataConfigurationState) + /// + /// Stores an instance of the HistoricalDataConfigurationType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class HistoricalDataConfigurationState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public HistoricalDataConfigurationState(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(Opc.Ua.ObjectTypes.HistoricalDataConfigurationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (AggregateFunctions != null) + { + AggregateFunctions.Initialize(context, AggregateFunctions_InitializationString); + } + + if (Definition != null) + { + Definition.Initialize(context, Definition_InitializationString); + } + + if (MaxTimeInterval != null) + { + MaxTimeInterval.Initialize(context, MaxTimeInterval_InitializationString); + } + + if (MinTimeInterval != null) + { + MinTimeInterval.Initialize(context, MinTimeInterval_InitializationString); + } + + if (ExceptionDeviation != null) + { + ExceptionDeviation.Initialize(context, ExceptionDeviation_InitializationString); + } + + if (ExceptionDeviationFormat != null) + { + ExceptionDeviationFormat.Initialize(context, ExceptionDeviationFormat_InitializationString); + } + + if (StartOfArchive != null) + { + StartOfArchive.Initialize(context, StartOfArchive_InitializationString); + } + + if (StartOfOnlineArchive != null) + { + StartOfOnlineArchive.Initialize(context, StartOfOnlineArchive_InitializationString); + } + + if (ServerTimestampSupported != null) + { + ServerTimestampSupported.Initialize(context, ServerTimestampSupported_InitializationString); + } + } + + #region Initialization String + private const string AggregateFunctions_InitializationString = + "//////////8EYIAKAQAAAAAAEgAAAEFnZ3JlZ2F0ZUZ1bmN0aW9ucwEAZC4ALwA9ZC4AAP////8AAAAA"; + + private const string Definition_InitializationString = + "//////////8VYIkKAgAAAAAACgAAAERlZmluaXRpb24BABQJAC4ARBQJAAAADP////8BAf////8AAAAA"; + + private const string MaxTimeInterval_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAE1heFRpbWVJbnRlcnZhbAEAFQkALgBEFQkAAAEAIgH/////AQH/" + + "////AAAAAA=="; + + private const string MinTimeInterval_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAE1pblRpbWVJbnRlcnZhbAEAFgkALgBEFgkAAAEAIgH/////AQH/" + + "////AAAAAA=="; + + private const string ExceptionDeviation_InitializationString = + "//////////8VYIkKAgAAAAAAEgAAAEV4Y2VwdGlvbkRldmlhdGlvbgEAFwkALgBEFwkAAAAL/////wEB" + + "/////wAAAAA="; + + private const string ExceptionDeviationFormat_InitializationString = + "//////////8VYIkKAgAAAAAAGAAAAEV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdAEAGAkALgBEGAkAAAEA" + + "egP/////AQH/////AAAAAA=="; + + private const string StartOfArchive_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAFN0YXJ0T2ZBcmNoaXZlAQDrLAAuAETrLAAAAQAmAf////8BAf//" + + "//8AAAAA"; + + private const string StartOfOnlineArchive_InitializationString = + "//////////8VYIkKAgAAAAAAFAAAAFN0YXJ0T2ZPbmxpbmVBcmNoaXZlAQDsLAAuAETsLAAAAQAmAf//" + + "//8BAf////8AAAAA"; + + private const string ServerTimestampSupported_InitializationString = + "//////////8VYIkKAgAAAAAAGAAAAFNlcnZlclRpbWVzdGFtcFN1cHBvcnRlZAEAlEoALgBElEoAAAAB" + + "/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJwAAAEhpc3RvcmljYWxEYXRhQ29uZmlndXJhdGlvblR5cGVJbnN0YW5j" + + "ZQEADgkBAA4JDgkAAP////8LAAAABGCACgEAAAAAABYAAABBZ2dyZWdhdGVDb25maWd1cmF0aW9uAQDz" + + "CwAvAQCzK/MLAAD/////BAAAABVgiQoCAAAAAAATAAAAVHJlYXRVbmNlcnRhaW5Bc0JhZAEAoCsALgBE" + + "oCsAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFBlcmNlbnREYXRhQmFkAQChKwAuAEShKwAA" + + "AAP/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAUGVyY2VudERhdGFHb29kAQCiKwAuAESiKwAAAAP/" + + "////AQH/////AAAAABVgiQoCAAAAAAAWAAAAVXNlU2xvcGVkRXh0cmFwb2xhdGlvbgEAoysALgBEoysA" + + "AAAB/////wEB/////wAAAAAEYIAKAQAAAAAAEgAAAEFnZ3JlZ2F0ZUZ1bmN0aW9ucwEAZC4ALwA9ZC4A" + + "AP////8AAAAAFWCJCgIAAAAAAAcAAABTdGVwcGVkAQATCQAuAEQTCQAAAAH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAARGVmaW5pdGlvbgEAFAkALgBEFAkAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DwAAAE1heFRpbWVJbnRlcnZhbAEAFQkALgBEFQkAAAEAIgH/////AQH/////AAAAABVgiQoCAAAAAAAP" + + "AAAATWluVGltZUludGVydmFsAQAWCQAuAEQWCQAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAABIA" + + "AABFeGNlcHRpb25EZXZpYXRpb24BABcJAC4ARBcJAAAAC/////8BAf////8AAAAAFWCJCgIAAAAAABgA" + + "AABFeGNlcHRpb25EZXZpYXRpb25Gb3JtYXQBABgJAC4ARBgJAAABAHoD/////wEB/////wAAAAAVYIkK" + + "AgAAAAAADgAAAFN0YXJ0T2ZBcmNoaXZlAQDrLAAuAETrLAAAAQAmAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABQAAABTdGFydE9mT25saW5lQXJjaGl2ZQEA7CwALgBE7CwAAAEAJgH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAYAAAAU2VydmVyVGltZXN0YW1wU3VwcG9ydGVkAQCUSgAuAESUSgAAAAH/////AQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public AggregateConfigurationState AggregateConfiguration + { + get + { + return m_aggregateConfiguration; + } + + set + { + if (!Object.ReferenceEquals(m_aggregateConfiguration, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_aggregateConfiguration = value; + } + } + + /// + public FolderState AggregateFunctions + { + get + { + return m_aggregateFunctions; + } + + set + { + if (!Object.ReferenceEquals(m_aggregateFunctions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_aggregateFunctions = value; + } + } + + /// + public PropertyState Stepped + { + get + { + return m_stepped; + } + + set + { + if (!Object.ReferenceEquals(m_stepped, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_stepped = value; + } + } + + /// + public PropertyState Definition + { + get + { + return m_definition; + } + + set + { + if (!Object.ReferenceEquals(m_definition, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_definition = value; + } + } + + /// + public PropertyState MaxTimeInterval + { + get + { + return m_maxTimeInterval; + } + + set + { + if (!Object.ReferenceEquals(m_maxTimeInterval, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxTimeInterval = value; + } + } + + /// + public PropertyState MinTimeInterval + { + get + { + return m_minTimeInterval; + } + + set + { + if (!Object.ReferenceEquals(m_minTimeInterval, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_minTimeInterval = value; + } + } + + /// + public PropertyState ExceptionDeviation + { + get + { + return m_exceptionDeviation; + } + + set + { + if (!Object.ReferenceEquals(m_exceptionDeviation, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_exceptionDeviation = value; + } + } + + /// + public PropertyState ExceptionDeviationFormat + { + get + { + return m_exceptionDeviationFormat; + } + + set + { + if (!Object.ReferenceEquals(m_exceptionDeviationFormat, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_exceptionDeviationFormat = value; + } + } + + /// + public PropertyState StartOfArchive + { + get + { + return m_startOfArchive; + } + + set + { + if (!Object.ReferenceEquals(m_startOfArchive, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startOfArchive = value; + } + } + + /// + public PropertyState StartOfOnlineArchive + { + get + { + return m_startOfOnlineArchive; + } + + set + { + if (!Object.ReferenceEquals(m_startOfOnlineArchive, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startOfOnlineArchive = value; + } + } + + /// + public PropertyState ServerTimestampSupported + { + get + { + return m_serverTimestampSupported; + } + + set + { + if (!Object.ReferenceEquals(m_serverTimestampSupported, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverTimestampSupported = 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_aggregateConfiguration != null) + { + children.Add(m_aggregateConfiguration); + } + + if (m_aggregateFunctions != null) + { + children.Add(m_aggregateFunctions); + } + + if (m_stepped != null) + { + children.Add(m_stepped); + } + + if (m_definition != null) + { + children.Add(m_definition); + } + + if (m_maxTimeInterval != null) + { + children.Add(m_maxTimeInterval); + } + + if (m_minTimeInterval != null) + { + children.Add(m_minTimeInterval); + } + + if (m_exceptionDeviation != null) + { + children.Add(m_exceptionDeviation); + } + + if (m_exceptionDeviationFormat != null) + { + children.Add(m_exceptionDeviationFormat); + } + + if (m_startOfArchive != null) + { + children.Add(m_startOfArchive); + } + + if (m_startOfOnlineArchive != null) + { + children.Add(m_startOfOnlineArchive); + } + + if (m_serverTimestampSupported != null) + { + children.Add(m_serverTimestampSupported); + } + + 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 Opc.Ua.BrowseNames.AggregateConfiguration: + { + if (createOrReplace) + { + if (AggregateConfiguration == null) + { + if (replacement == null) + { + AggregateConfiguration = new AggregateConfigurationState(this); + } + else + { + AggregateConfiguration = (AggregateConfigurationState)replacement; + } + } + } + + instance = AggregateConfiguration; + break; + } + + case Opc.Ua.BrowseNames.AggregateFunctions: + { + if (createOrReplace) + { + if (AggregateFunctions == null) + { + if (replacement == null) + { + AggregateFunctions = new FolderState(this); + } + else + { + AggregateFunctions = (FolderState)replacement; + } + } + } + + instance = AggregateFunctions; + break; + } + + case Opc.Ua.BrowseNames.Stepped: + { + if (createOrReplace) + { + if (Stepped == null) + { + if (replacement == null) + { + Stepped = new PropertyState(this); + } + else + { + Stepped = (PropertyState)replacement; + } + } + } + + instance = Stepped; + break; + } + + case Opc.Ua.BrowseNames.Definition: + { + if (createOrReplace) + { + if (Definition == null) + { + if (replacement == null) + { + Definition = new PropertyState(this); + } + else + { + Definition = (PropertyState)replacement; + } + } + } + + instance = Definition; + break; + } + + case Opc.Ua.BrowseNames.MaxTimeInterval: + { + if (createOrReplace) + { + if (MaxTimeInterval == null) + { + if (replacement == null) + { + MaxTimeInterval = new PropertyState(this); + } + else + { + MaxTimeInterval = (PropertyState)replacement; + } + } + } + + instance = MaxTimeInterval; + break; + } + + case Opc.Ua.BrowseNames.MinTimeInterval: + { + if (createOrReplace) + { + if (MinTimeInterval == null) + { + if (replacement == null) + { + MinTimeInterval = new PropertyState(this); + } + else + { + MinTimeInterval = (PropertyState)replacement; + } + } + } + + instance = MinTimeInterval; + break; + } + + case Opc.Ua.BrowseNames.ExceptionDeviation: + { + if (createOrReplace) + { + if (ExceptionDeviation == null) + { + if (replacement == null) + { + ExceptionDeviation = new PropertyState(this); + } + else + { + ExceptionDeviation = (PropertyState)replacement; + } + } + } + + instance = ExceptionDeviation; + break; + } + + case Opc.Ua.BrowseNames.ExceptionDeviationFormat: + { + if (createOrReplace) + { + if (ExceptionDeviationFormat == null) + { + if (replacement == null) + { + ExceptionDeviationFormat = new PropertyState(this); + } + else + { + ExceptionDeviationFormat = (PropertyState)replacement; + } + } + } + + instance = ExceptionDeviationFormat; + break; + } + + case Opc.Ua.BrowseNames.StartOfArchive: + { + if (createOrReplace) + { + if (StartOfArchive == null) + { + if (replacement == null) + { + StartOfArchive = new PropertyState(this); + } + else + { + StartOfArchive = (PropertyState)replacement; + } + } + } + + instance = StartOfArchive; + break; + } + + case Opc.Ua.BrowseNames.StartOfOnlineArchive: + { + if (createOrReplace) + { + if (StartOfOnlineArchive == null) + { + if (replacement == null) + { + StartOfOnlineArchive = new PropertyState(this); + } + else + { + StartOfOnlineArchive = (PropertyState)replacement; + } + } + } + + instance = StartOfOnlineArchive; + break; + } + + case Opc.Ua.BrowseNames.ServerTimestampSupported: + { + if (createOrReplace) + { + if (ServerTimestampSupported == null) + { + if (replacement == null) + { + ServerTimestampSupported = new PropertyState(this); + } + else + { + ServerTimestampSupported = (PropertyState)replacement; + } + } + } + + instance = ServerTimestampSupported; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private AggregateConfigurationState m_aggregateConfiguration; + private FolderState m_aggregateFunctions; + private PropertyState m_stepped; + private PropertyState m_definition; + private PropertyState m_maxTimeInterval; + private PropertyState m_minTimeInterval; + private PropertyState m_exceptionDeviation; + private PropertyState m_exceptionDeviationFormat; + private PropertyState m_startOfArchive; + private PropertyState m_startOfOnlineArchive; + private PropertyState m_serverTimestampSupported; + #endregion + } + #endif + #endregion + + #region HistoryServerCapabilitiesState Class + #if (!OPCUA_EXCLUDE_HistoryServerCapabilitiesState) + /// + /// Stores an instance of the HistoryServerCapabilitiesType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class HistoryServerCapabilitiesState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public HistoryServerCapabilitiesState(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(Opc.Ua.ObjectTypes.HistoryServerCapabilitiesType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAEhpc3RvcnlTZXJ2ZXJDYXBhYmlsaXRpZXNUeXBlSW5zdGFuY2UB" + + "ABoJAQAaCRoJAAD/////EAAAABVgiQoCAAAAAAAbAAAAQWNjZXNzSGlzdG9yeURhdGFDYXBhYmlsaXR5" + + "AQAbCQAuAEQbCQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAdAAAAQWNjZXNzSGlzdG9yeUV2ZW50" + + "c0NhcGFiaWxpdHkBABwJAC4ARBwJAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABNYXhSZXR1" + + "cm5EYXRhVmFsdWVzAQAELAAuAEQELAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAUAAAATWF4UmV0" + + "dXJuRXZlbnRWYWx1ZXMBAAUsAC4ARAUsAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABQAAABJbnNl" + + "cnREYXRhQ2FwYWJpbGl0eQEAHgkALgBEHgkAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFJl" + + "cGxhY2VEYXRhQ2FwYWJpbGl0eQEAHwkALgBEHwkAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAAFAAA" + + "AFVwZGF0ZURhdGFDYXBhYmlsaXR5AQAgCQAuAEQgCQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAT" + + "AAAARGVsZXRlUmF3Q2FwYWJpbGl0eQEAIQkALgBEIQkAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "FgAAAERlbGV0ZUF0VGltZUNhcGFiaWxpdHkBACIJAC4ARCIJAAAAAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABUAAABJbnNlcnRFdmVudENhcGFiaWxpdHkBAA4sAC4ARA4sAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABYAAABSZXBsYWNlRXZlbnRDYXBhYmlsaXR5AQAPLAAuAEQPLAAAAAH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAVAAAAVXBkYXRlRXZlbnRDYXBhYmlsaXR5AQAQLAAuAEQQLAAAAAH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAVAAAARGVsZXRlRXZlbnRDYXBhYmlsaXR5AQDtLAAuAETtLAAAAAH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAaAAAASW5zZXJ0QW5ub3RhdGlvbkNhcGFiaWxpdHkBAAYsAC4ARAYsAAAA" + + "Af////8BAf////8AAAAABGCACgEAAAAAABIAAABBZ2dyZWdhdGVGdW5jdGlvbnMBAKQrAC8APaQrAAD/" + + "////AAAAABVgiQoCAAAAAAAYAAAAU2VydmVyVGltZXN0YW1wU3VwcG9ydGVkAQCWSgAuAESWSgAAAAH/" + + "////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState AccessHistoryDataCapability + { + get + { + return m_accessHistoryDataCapability; + } + + set + { + if (!Object.ReferenceEquals(m_accessHistoryDataCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_accessHistoryDataCapability = value; + } + } + + /// + public PropertyState AccessHistoryEventsCapability + { + get + { + return m_accessHistoryEventsCapability; + } + + set + { + if (!Object.ReferenceEquals(m_accessHistoryEventsCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_accessHistoryEventsCapability = value; + } + } + + /// + public PropertyState MaxReturnDataValues + { + get + { + return m_maxReturnDataValues; + } + + set + { + if (!Object.ReferenceEquals(m_maxReturnDataValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxReturnDataValues = value; + } + } + + /// + public PropertyState MaxReturnEventValues + { + get + { + return m_maxReturnEventValues; + } + + set + { + if (!Object.ReferenceEquals(m_maxReturnEventValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxReturnEventValues = value; + } + } + + /// + public PropertyState InsertDataCapability + { + get + { + return m_insertDataCapability; + } + + set + { + if (!Object.ReferenceEquals(m_insertDataCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_insertDataCapability = value; + } + } + + /// + public PropertyState ReplaceDataCapability + { + get + { + return m_replaceDataCapability; + } + + set + { + if (!Object.ReferenceEquals(m_replaceDataCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_replaceDataCapability = value; + } + } + + /// + public PropertyState UpdateDataCapability + { + get + { + return m_updateDataCapability; + } + + set + { + if (!Object.ReferenceEquals(m_updateDataCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateDataCapability = value; + } + } + + /// + public PropertyState DeleteRawCapability + { + get + { + return m_deleteRawCapability; + } + + set + { + if (!Object.ReferenceEquals(m_deleteRawCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteRawCapability = value; + } + } + + /// + public PropertyState DeleteAtTimeCapability + { + get + { + return m_deleteAtTimeCapability; + } + + set + { + if (!Object.ReferenceEquals(m_deleteAtTimeCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteAtTimeCapability = value; + } + } + + /// + public PropertyState InsertEventCapability + { + get + { + return m_insertEventCapability; + } + + set + { + if (!Object.ReferenceEquals(m_insertEventCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_insertEventCapability = value; + } + } + + /// + public PropertyState ReplaceEventCapability + { + get + { + return m_replaceEventCapability; + } + + set + { + if (!Object.ReferenceEquals(m_replaceEventCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_replaceEventCapability = value; + } + } + + /// + public PropertyState UpdateEventCapability + { + get + { + return m_updateEventCapability; + } + + set + { + if (!Object.ReferenceEquals(m_updateEventCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateEventCapability = value; + } + } + + /// + public PropertyState DeleteEventCapability + { + get + { + return m_deleteEventCapability; + } + + set + { + if (!Object.ReferenceEquals(m_deleteEventCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteEventCapability = value; + } + } + + /// + public PropertyState InsertAnnotationCapability + { + get + { + return m_insertAnnotationCapability; + } + + set + { + if (!Object.ReferenceEquals(m_insertAnnotationCapability, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_insertAnnotationCapability = value; + } + } + + /// + public FolderState AggregateFunctions + { + get + { + return m_aggregateFunctions; + } + + set + { + if (!Object.ReferenceEquals(m_aggregateFunctions, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_aggregateFunctions = value; + } + } + + /// + public PropertyState ServerTimestampSupported + { + get + { + return m_serverTimestampSupported; + } + + set + { + if (!Object.ReferenceEquals(m_serverTimestampSupported, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverTimestampSupported = 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_accessHistoryDataCapability != null) + { + children.Add(m_accessHistoryDataCapability); + } + + if (m_accessHistoryEventsCapability != null) + { + children.Add(m_accessHistoryEventsCapability); + } + + if (m_maxReturnDataValues != null) + { + children.Add(m_maxReturnDataValues); + } + + if (m_maxReturnEventValues != null) + { + children.Add(m_maxReturnEventValues); + } + + if (m_insertDataCapability != null) + { + children.Add(m_insertDataCapability); + } + + if (m_replaceDataCapability != null) + { + children.Add(m_replaceDataCapability); + } + + if (m_updateDataCapability != null) + { + children.Add(m_updateDataCapability); + } + + if (m_deleteRawCapability != null) + { + children.Add(m_deleteRawCapability); + } + + if (m_deleteAtTimeCapability != null) + { + children.Add(m_deleteAtTimeCapability); + } + + if (m_insertEventCapability != null) + { + children.Add(m_insertEventCapability); + } + + if (m_replaceEventCapability != null) + { + children.Add(m_replaceEventCapability); + } + + if (m_updateEventCapability != null) + { + children.Add(m_updateEventCapability); + } + + if (m_deleteEventCapability != null) + { + children.Add(m_deleteEventCapability); + } + + if (m_insertAnnotationCapability != null) + { + children.Add(m_insertAnnotationCapability); + } + + if (m_aggregateFunctions != null) + { + children.Add(m_aggregateFunctions); + } + + if (m_serverTimestampSupported != null) + { + children.Add(m_serverTimestampSupported); + } + + 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 Opc.Ua.BrowseNames.AccessHistoryDataCapability: + { + if (createOrReplace) + { + if (AccessHistoryDataCapability == null) + { + if (replacement == null) + { + AccessHistoryDataCapability = new PropertyState(this); + } + else + { + AccessHistoryDataCapability = (PropertyState)replacement; + } + } + } + + instance = AccessHistoryDataCapability; + break; + } + + case Opc.Ua.BrowseNames.AccessHistoryEventsCapability: + { + if (createOrReplace) + { + if (AccessHistoryEventsCapability == null) + { + if (replacement == null) + { + AccessHistoryEventsCapability = new PropertyState(this); + } + else + { + AccessHistoryEventsCapability = (PropertyState)replacement; + } + } + } + + instance = AccessHistoryEventsCapability; + break; + } + + case Opc.Ua.BrowseNames.MaxReturnDataValues: + { + if (createOrReplace) + { + if (MaxReturnDataValues == null) + { + if (replacement == null) + { + MaxReturnDataValues = new PropertyState(this); + } + else + { + MaxReturnDataValues = (PropertyState)replacement; + } + } + } + + instance = MaxReturnDataValues; + break; + } + + case Opc.Ua.BrowseNames.MaxReturnEventValues: + { + if (createOrReplace) + { + if (MaxReturnEventValues == null) + { + if (replacement == null) + { + MaxReturnEventValues = new PropertyState(this); + } + else + { + MaxReturnEventValues = (PropertyState)replacement; + } + } + } + + instance = MaxReturnEventValues; + break; + } + + case Opc.Ua.BrowseNames.InsertDataCapability: + { + if (createOrReplace) + { + if (InsertDataCapability == null) + { + if (replacement == null) + { + InsertDataCapability = new PropertyState(this); + } + else + { + InsertDataCapability = (PropertyState)replacement; + } + } + } + + instance = InsertDataCapability; + break; + } + + case Opc.Ua.BrowseNames.ReplaceDataCapability: + { + if (createOrReplace) + { + if (ReplaceDataCapability == null) + { + if (replacement == null) + { + ReplaceDataCapability = new PropertyState(this); + } + else + { + ReplaceDataCapability = (PropertyState)replacement; + } + } + } + + instance = ReplaceDataCapability; + break; + } + + case Opc.Ua.BrowseNames.UpdateDataCapability: + { + if (createOrReplace) + { + if (UpdateDataCapability == null) + { + if (replacement == null) + { + UpdateDataCapability = new PropertyState(this); + } + else + { + UpdateDataCapability = (PropertyState)replacement; + } + } + } + + instance = UpdateDataCapability; + break; + } + + case Opc.Ua.BrowseNames.DeleteRawCapability: + { + if (createOrReplace) + { + if (DeleteRawCapability == null) + { + if (replacement == null) + { + DeleteRawCapability = new PropertyState(this); + } + else + { + DeleteRawCapability = (PropertyState)replacement; + } + } + } + + instance = DeleteRawCapability; + break; + } + + case Opc.Ua.BrowseNames.DeleteAtTimeCapability: + { + if (createOrReplace) + { + if (DeleteAtTimeCapability == null) + { + if (replacement == null) + { + DeleteAtTimeCapability = new PropertyState(this); + } + else + { + DeleteAtTimeCapability = (PropertyState)replacement; + } + } + } + + instance = DeleteAtTimeCapability; + break; + } + + case Opc.Ua.BrowseNames.InsertEventCapability: + { + if (createOrReplace) + { + if (InsertEventCapability == null) + { + if (replacement == null) + { + InsertEventCapability = new PropertyState(this); + } + else + { + InsertEventCapability = (PropertyState)replacement; + } + } + } + + instance = InsertEventCapability; + break; + } + + case Opc.Ua.BrowseNames.ReplaceEventCapability: + { + if (createOrReplace) + { + if (ReplaceEventCapability == null) + { + if (replacement == null) + { + ReplaceEventCapability = new PropertyState(this); + } + else + { + ReplaceEventCapability = (PropertyState)replacement; + } + } + } + + instance = ReplaceEventCapability; + break; + } + + case Opc.Ua.BrowseNames.UpdateEventCapability: + { + if (createOrReplace) + { + if (UpdateEventCapability == null) + { + if (replacement == null) + { + UpdateEventCapability = new PropertyState(this); + } + else + { + UpdateEventCapability = (PropertyState)replacement; + } + } + } + + instance = UpdateEventCapability; + break; + } + + case Opc.Ua.BrowseNames.DeleteEventCapability: + { + if (createOrReplace) + { + if (DeleteEventCapability == null) + { + if (replacement == null) + { + DeleteEventCapability = new PropertyState(this); + } + else + { + DeleteEventCapability = (PropertyState)replacement; + } + } + } + + instance = DeleteEventCapability; + break; + } + + case Opc.Ua.BrowseNames.InsertAnnotationCapability: + { + if (createOrReplace) + { + if (InsertAnnotationCapability == null) + { + if (replacement == null) + { + InsertAnnotationCapability = new PropertyState(this); + } + else + { + InsertAnnotationCapability = (PropertyState)replacement; + } + } + } + + instance = InsertAnnotationCapability; + break; + } + + case Opc.Ua.BrowseNames.AggregateFunctions: + { + if (createOrReplace) + { + if (AggregateFunctions == null) + { + if (replacement == null) + { + AggregateFunctions = new FolderState(this); + } + else + { + AggregateFunctions = (FolderState)replacement; + } + } + } + + instance = AggregateFunctions; + break; + } + + case Opc.Ua.BrowseNames.ServerTimestampSupported: + { + if (createOrReplace) + { + if (ServerTimestampSupported == null) + { + if (replacement == null) + { + ServerTimestampSupported = new PropertyState(this); + } + else + { + ServerTimestampSupported = (PropertyState)replacement; + } + } + } + + instance = ServerTimestampSupported; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_accessHistoryDataCapability; + private PropertyState m_accessHistoryEventsCapability; + private PropertyState m_maxReturnDataValues; + private PropertyState m_maxReturnEventValues; + private PropertyState m_insertDataCapability; + private PropertyState m_replaceDataCapability; + private PropertyState m_updateDataCapability; + private PropertyState m_deleteRawCapability; + private PropertyState m_deleteAtTimeCapability; + private PropertyState m_insertEventCapability; + private PropertyState m_replaceEventCapability; + private PropertyState m_updateEventCapability; + private PropertyState m_deleteEventCapability; + private PropertyState m_insertAnnotationCapability; + private FolderState m_aggregateFunctions; + private PropertyState m_serverTimestampSupported; + #endregion + } + #endif + #endregion + + #region AuditHistoryEventUpdateEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryEventUpdateEventState) + /// + /// Stores an instance of the AuditHistoryEventUpdateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryEventUpdateEventState : AuditHistoryUpdateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryEventUpdateEventState(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(Opc.Ua.ObjectTypes.AuditHistoryEventUpdateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEF1ZGl0SGlzdG9yeUV2ZW50VXBkYXRlRXZlbnRUeXBlSW5zdGFu" + + "Y2UBALcLAQC3C7cLAAD/////EwAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEA2g0ALgBE2g0AAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEA2w0ALgBE2w0AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBANwNAC4ARNwNAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQDdDQAuAETdDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEA3g0ALgBE3g0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "AN8NAC4ARN8NAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAOENAC4AROEN" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEA4g0ALgBE4g0AAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEA4w0ALgBE4w0AAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQDkDQAuAETkDQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBAOUNAC4AROUNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBAOYNAC4AROYNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBAOcNAC4AROcNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABMAAABQYXJhbWV0" + + "ZXJEYXRhVHlwZUlkAQDoDQAuAEToDQAAABH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAVXBkYXRl" + + "ZE5vZGUBANELAC4ARNELAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABQAAABQZXJmb3JtSW5zZXJ0" + + "UmVwbGFjZQEA1AsALgBE1AsAAAEAHSz/////AQH/////AAAAABVgiQoCAAAAAAAGAAAARmlsdGVyAQC7" + + "CwAuAES7CwAAAQDVAv////8BAf////8AAAAAF2CJCgIAAAAAAAkAAABOZXdWYWx1ZXMBANULAC4ARNUL" + + "AAABAJgDAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAJAAAAT2xkVmFsdWVzAQDWCwAuAETW" + + "CwAAAQCYAwEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState UpdatedNode + { + get + { + return m_updatedNode; + } + + set + { + if (!Object.ReferenceEquals(m_updatedNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updatedNode = value; + } + } + + /// + public PropertyState PerformInsertReplace + { + get + { + return m_performInsertReplace; + } + + set + { + if (!Object.ReferenceEquals(m_performInsertReplace, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_performInsertReplace = value; + } + } + + /// + public PropertyState Filter + { + get + { + return m_filter; + } + + set + { + if (!Object.ReferenceEquals(m_filter, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_filter = value; + } + } + + /// + public PropertyState NewValues + { + get + { + return m_newValues; + } + + set + { + if (!Object.ReferenceEquals(m_newValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_newValues = value; + } + } + + /// + public PropertyState OldValues + { + get + { + return m_oldValues; + } + + set + { + if (!Object.ReferenceEquals(m_oldValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValues = 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_updatedNode != null) + { + children.Add(m_updatedNode); + } + + if (m_performInsertReplace != null) + { + children.Add(m_performInsertReplace); + } + + if (m_filter != null) + { + children.Add(m_filter); + } + + if (m_newValues != null) + { + children.Add(m_newValues); + } + + if (m_oldValues != null) + { + children.Add(m_oldValues); + } + + 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 Opc.Ua.BrowseNames.UpdatedNode: + { + if (createOrReplace) + { + if (UpdatedNode == null) + { + if (replacement == null) + { + UpdatedNode = new PropertyState(this); + } + else + { + UpdatedNode = (PropertyState)replacement; + } + } + } + + instance = UpdatedNode; + break; + } + + case Opc.Ua.BrowseNames.PerformInsertReplace: + { + if (createOrReplace) + { + if (PerformInsertReplace == null) + { + if (replacement == null) + { + PerformInsertReplace = new PropertyState(this); + } + else + { + PerformInsertReplace = (PropertyState)replacement; + } + } + } + + instance = PerformInsertReplace; + break; + } + + case Opc.Ua.BrowseNames.Filter: + { + if (createOrReplace) + { + if (Filter == null) + { + if (replacement == null) + { + Filter = new PropertyState(this); + } + else + { + Filter = (PropertyState)replacement; + } + } + } + + instance = Filter; + break; + } + + case Opc.Ua.BrowseNames.NewValues: + { + if (createOrReplace) + { + if (NewValues == null) + { + if (replacement == null) + { + NewValues = new PropertyState(this); + } + else + { + NewValues = (PropertyState)replacement; + } + } + } + + instance = NewValues; + break; + } + + case Opc.Ua.BrowseNames.OldValues: + { + if (createOrReplace) + { + if (OldValues == null) + { + if (replacement == null) + { + OldValues = new PropertyState(this); + } + else + { + OldValues = (PropertyState)replacement; + } + } + } + + instance = OldValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_updatedNode; + private PropertyState m_performInsertReplace; + private PropertyState m_filter; + private PropertyState m_newValues; + private PropertyState m_oldValues; + #endregion + } + #endif + #endregion + + #region AuditHistoryValueUpdateEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryValueUpdateEventState) + /// + /// Stores an instance of the AuditHistoryValueUpdateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryValueUpdateEventState : AuditHistoryUpdateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryValueUpdateEventState(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(Opc.Ua.ObjectTypes.AuditHistoryValueUpdateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEF1ZGl0SGlzdG9yeVZhbHVlVXBkYXRlRXZlbnRUeXBlSW5zdGFu" + + "Y2UBAL4LAQC+C74LAAD/////EgAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEA6Q0ALgBE6Q0AAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEA6g0ALgBE6g0AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAOsNAC4AROsNAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQDsDQAuAETsDQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEA7Q0ALgBE7Q0AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "AO4NAC4ARO4NAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAPANAC4ARPAN" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEA8Q0ALgBE8Q0AAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEA8g0ALgBE8g0AAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQDzDQAuAETzDQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBAPQNAC4ARPQNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBAPUNAC4ARPUNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBAPYNAC4ARPYNAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABMAAABQYXJhbWV0" + + "ZXJEYXRhVHlwZUlkAQD3DQAuAET3DQAAABH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAVXBkYXRl" + + "ZE5vZGUBANILAC4ARNILAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABQAAABQZXJmb3JtSW5zZXJ0" + + "UmVwbGFjZQEA1wsALgBE1wsAAAEAHSz/////AQH/////AAAAABdgiQoCAAAAAAAJAAAATmV3VmFsdWVz" + + "AQDYCwAuAETYCwAAABcBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAAAkAAABPbGRWYWx1ZXMB" + + "ANkLAC4ARNkLAAAAFwEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState UpdatedNode + { + get + { + return m_updatedNode; + } + + set + { + if (!Object.ReferenceEquals(m_updatedNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updatedNode = value; + } + } + + /// + public PropertyState PerformInsertReplace + { + get + { + return m_performInsertReplace; + } + + set + { + if (!Object.ReferenceEquals(m_performInsertReplace, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_performInsertReplace = value; + } + } + + /// + public PropertyState NewValues + { + get + { + return m_newValues; + } + + set + { + if (!Object.ReferenceEquals(m_newValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_newValues = value; + } + } + + /// + public PropertyState OldValues + { + get + { + return m_oldValues; + } + + set + { + if (!Object.ReferenceEquals(m_oldValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValues = 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_updatedNode != null) + { + children.Add(m_updatedNode); + } + + if (m_performInsertReplace != null) + { + children.Add(m_performInsertReplace); + } + + if (m_newValues != null) + { + children.Add(m_newValues); + } + + if (m_oldValues != null) + { + children.Add(m_oldValues); + } + + 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 Opc.Ua.BrowseNames.UpdatedNode: + { + if (createOrReplace) + { + if (UpdatedNode == null) + { + if (replacement == null) + { + UpdatedNode = new PropertyState(this); + } + else + { + UpdatedNode = (PropertyState)replacement; + } + } + } + + instance = UpdatedNode; + break; + } + + case Opc.Ua.BrowseNames.PerformInsertReplace: + { + if (createOrReplace) + { + if (PerformInsertReplace == null) + { + if (replacement == null) + { + PerformInsertReplace = new PropertyState(this); + } + else + { + PerformInsertReplace = (PropertyState)replacement; + } + } + } + + instance = PerformInsertReplace; + break; + } + + case Opc.Ua.BrowseNames.NewValues: + { + if (createOrReplace) + { + if (NewValues == null) + { + if (replacement == null) + { + NewValues = new PropertyState(this); + } + else + { + NewValues = (PropertyState)replacement; + } + } + } + + instance = NewValues; + break; + } + + case Opc.Ua.BrowseNames.OldValues: + { + if (createOrReplace) + { + if (OldValues == null) + { + if (replacement == null) + { + OldValues = new PropertyState(this); + } + else + { + OldValues = (PropertyState)replacement; + } + } + } + + instance = OldValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_updatedNode; + private PropertyState m_performInsertReplace; + private PropertyState m_newValues; + private PropertyState m_oldValues; + #endregion + } + #endif + #endregion + + #region AuditHistoryAnnotationUpdateEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryAnnotationUpdateEventState) + /// + /// Stores an instance of the AuditHistoryAnnotationUpdateEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryAnnotationUpdateEventState : AuditHistoryUpdateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryAnnotationUpdateEventState(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(Opc.Ua.ObjectTypes.AuditHistoryAnnotationUpdateEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALQAAAEF1ZGl0SGlzdG9yeUFubm90YXRpb25VcGRhdGVFdmVudFR5cGVJ" + + "bnN0YW5jZQEAl0oBAJdKl0oAAP////8RAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCYSgAuAESYSgAA" + + "AA//////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCZSgAuAESZSgAAABH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAmkoALgBEmkoAAAAR/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACgAAAFNvdXJjZU5hbWUBAJtKAC4ARJtKAAAADP////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAQAAABUaW1lAQCcSgAuAEScSgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZl" + + "VGltZQEAnUoALgBEnUoAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAn0oA" + + "LgBEn0oAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCgSgAuAESgSgAAAAX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQChSgAuAEShSgAAAQAmAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAKJKAC4ARKJKAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAgAAABTZXJ2ZXJJZAEAWUsALgBEWUsAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EgAAAENsaWVudEF1ZGl0RW50cnlJZAEAWksALgBEWksAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DAAAAENsaWVudFVzZXJJZAEAW0sALgBEW0sAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAFBh" + + "cmFtZXRlckRhdGFUeXBlSWQBAFxLAC4ARFxLAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAABQAAABQ" + + "ZXJmb3JtSW5zZXJ0UmVwbGFjZQEAXUsALgBEXUsAAAEAHSz/////AQH/////AAAAABdgiQoCAAAAAAAJ" + + "AAAATmV3VmFsdWVzAQBeSwAuAEReSwAAABcBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAAAkA" + + "AABPbGRWYWx1ZXMBAF9LAC4ARF9LAAAAFwEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState PerformInsertReplace + { + get + { + return m_performInsertReplace; + } + + set + { + if (!Object.ReferenceEquals(m_performInsertReplace, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_performInsertReplace = value; + } + } + + /// + public PropertyState NewValues + { + get + { + return m_newValues; + } + + set + { + if (!Object.ReferenceEquals(m_newValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_newValues = value; + } + } + + /// + public PropertyState OldValues + { + get + { + return m_oldValues; + } + + set + { + if (!Object.ReferenceEquals(m_oldValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValues = 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_performInsertReplace != null) + { + children.Add(m_performInsertReplace); + } + + if (m_newValues != null) + { + children.Add(m_newValues); + } + + if (m_oldValues != null) + { + children.Add(m_oldValues); + } + + 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 Opc.Ua.BrowseNames.PerformInsertReplace: + { + if (createOrReplace) + { + if (PerformInsertReplace == null) + { + if (replacement == null) + { + PerformInsertReplace = new PropertyState(this); + } + else + { + PerformInsertReplace = (PropertyState)replacement; + } + } + } + + instance = PerformInsertReplace; + break; + } + + case Opc.Ua.BrowseNames.NewValues: + { + if (createOrReplace) + { + if (NewValues == null) + { + if (replacement == null) + { + NewValues = new PropertyState(this); + } + else + { + NewValues = (PropertyState)replacement; + } + } + } + + instance = NewValues; + break; + } + + case Opc.Ua.BrowseNames.OldValues: + { + if (createOrReplace) + { + if (OldValues == null) + { + if (replacement == null) + { + OldValues = new PropertyState(this); + } + else + { + OldValues = (PropertyState)replacement; + } + } + } + + instance = OldValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_performInsertReplace; + private PropertyState m_newValues; + private PropertyState m_oldValues; + #endregion + } + #endif + #endregion + + #region AuditHistoryDeleteEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryDeleteEventState) + /// + /// Stores an instance of the AuditHistoryDeleteEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryDeleteEventState : AuditHistoryUpdateEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryDeleteEventState(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(Opc.Ua.ObjectTypes.AuditHistoryDeleteEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEF1ZGl0SGlzdG9yeURlbGV0ZUV2ZW50VHlwZUluc3RhbmNlAQDE" + + "CwEAxAvECwAA/////w8AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAPgNAC4ARPgNAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAPkNAC4ARPkNAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQD6DQAuAET6DQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEA+w0ALgBE+w0AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "APwNAC4ARPwNAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQD9DQAu" + + "AET9DQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQD/DQAuAET/DQAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAAAOAC4ARAAOAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAAEOAC4ARAEOAAABACYB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAAg4ALgBEAg4AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CAAAAFNlcnZlcklkAQADDgAuAEQDDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50" + + "QXVkaXRFbnRyeUlkAQAEDgAuAEQEDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50" + + "VXNlcklkAQAFDgAuAEQFDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAATAAAAUGFyYW1ldGVyRGF0" + + "YVR5cGVJZAEABg4ALgBEBg4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFVwZGF0ZWROb2Rl" + + "AQDTCwAuAETTCwAAABH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState UpdatedNode + { + get + { + return m_updatedNode; + } + + set + { + if (!Object.ReferenceEquals(m_updatedNode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updatedNode = 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_updatedNode != null) + { + children.Add(m_updatedNode); + } + + 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 Opc.Ua.BrowseNames.UpdatedNode: + { + if (createOrReplace) + { + if (UpdatedNode == null) + { + if (replacement == null) + { + UpdatedNode = new PropertyState(this); + } + else + { + UpdatedNode = (PropertyState)replacement; + } + } + } + + instance = UpdatedNode; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_updatedNode; + #endregion + } + #endif + #endregion + + #region AuditHistoryRawModifyDeleteEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryRawModifyDeleteEventState) + /// + /// Stores an instance of the AuditHistoryRawModifyDeleteEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryRawModifyDeleteEventState : AuditHistoryDeleteEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryRawModifyDeleteEventState(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(Opc.Ua.ObjectTypes.AuditHistoryRawModifyDeleteEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALAAAAEF1ZGl0SGlzdG9yeVJhd01vZGlmeURlbGV0ZUV2ZW50VHlwZUlu" + + "c3RhbmNlAQDGCwEAxgvGCwAA/////xMAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAAcOAC4ARAcOAAAA" + + "D/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAAgOAC4ARAgOAAAAEf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQAJDgAuAEQJDgAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTmFtZQEACg4ALgBECg4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BAAAAFRpbWUBAAsOAC4ARAsOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVU" + + "aW1lAQAMDgAuAEQMDgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQAODgAu" + + "AEQODgAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAA8OAC4ARA8OAAAABf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABABAOAC4ARBAOAAABACYB////" + + "/wEB/////wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAEQ4ALgBEEQ4AAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAFNlcnZlcklkAQASDgAuAEQSDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAS" + + "AAAAQ2xpZW50QXVkaXRFbnRyeUlkAQATDgAuAEQTDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAM" + + "AAAAQ2xpZW50VXNlcklkAQAUDgAuAEQUDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAATAAAAUGFy" + + "YW1ldGVyRGF0YVR5cGVJZAEAFQ4ALgBEFQ4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFVw" + + "ZGF0ZWROb2RlAQAWDgAuAEQWDgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAQAAAASXNEZWxldGVN" + + "b2RpZmllZAEAxwsALgBExwsAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAFN0YXJ0VGltZQEA" + + "yAsALgBEyAsAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAARW5kVGltZQEAyQsALgBEyQsA" + + "AAEAJgH/////AQH/////AAAAABdgiQoCAAAAAAAJAAAAT2xkVmFsdWVzAQDaCwAuAETaCwAAABcBAAAA" + + "AQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState IsDeleteModified + { + get + { + return m_isDeleteModified; + } + + set + { + if (!Object.ReferenceEquals(m_isDeleteModified, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_isDeleteModified = value; + } + } + + /// + public PropertyState StartTime + { + get + { + return m_startTime; + } + + set + { + if (!Object.ReferenceEquals(m_startTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_startTime = value; + } + } + + /// + public PropertyState EndTime + { + get + { + return m_endTime; + } + + set + { + if (!Object.ReferenceEquals(m_endTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_endTime = value; + } + } + + /// + public PropertyState OldValues + { + get + { + return m_oldValues; + } + + set + { + if (!Object.ReferenceEquals(m_oldValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValues = 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_isDeleteModified != null) + { + children.Add(m_isDeleteModified); + } + + if (m_startTime != null) + { + children.Add(m_startTime); + } + + if (m_endTime != null) + { + children.Add(m_endTime); + } + + if (m_oldValues != null) + { + children.Add(m_oldValues); + } + + 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 Opc.Ua.BrowseNames.IsDeleteModified: + { + if (createOrReplace) + { + if (IsDeleteModified == null) + { + if (replacement == null) + { + IsDeleteModified = new PropertyState(this); + } + else + { + IsDeleteModified = (PropertyState)replacement; + } + } + } + + instance = IsDeleteModified; + break; + } + + case Opc.Ua.BrowseNames.StartTime: + { + if (createOrReplace) + { + if (StartTime == null) + { + if (replacement == null) + { + StartTime = new PropertyState(this); + } + else + { + StartTime = (PropertyState)replacement; + } + } + } + + instance = StartTime; + break; + } + + case Opc.Ua.BrowseNames.EndTime: + { + if (createOrReplace) + { + if (EndTime == null) + { + if (replacement == null) + { + EndTime = new PropertyState(this); + } + else + { + EndTime = (PropertyState)replacement; + } + } + } + + instance = EndTime; + break; + } + + case Opc.Ua.BrowseNames.OldValues: + { + if (createOrReplace) + { + if (OldValues == null) + { + if (replacement == null) + { + OldValues = new PropertyState(this); + } + else + { + OldValues = (PropertyState)replacement; + } + } + } + + instance = OldValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_isDeleteModified; + private PropertyState m_startTime; + private PropertyState m_endTime; + private PropertyState m_oldValues; + #endregion + } + #endif + #endregion + + #region AuditHistoryAtTimeDeleteEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryAtTimeDeleteEventState) + /// + /// Stores an instance of the AuditHistoryAtTimeDeleteEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryAtTimeDeleteEventState : AuditHistoryDeleteEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryAtTimeDeleteEventState(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(Opc.Ua.ObjectTypes.AuditHistoryAtTimeDeleteEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKQAAAEF1ZGl0SGlzdG9yeUF0VGltZURlbGV0ZUV2ZW50VHlwZUluc3Rh" + + "bmNlAQDLCwEAywvLCwAA/////xEAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBABcOAC4ARBcOAAAAD///" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBABgOAC4ARBgOAAAAEf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQAZDgAuAEQZDgAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAKAAAAU291cmNlTmFtZQEAGg4ALgBEGg4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAA" + + "AFRpbWUBABsOAC4ARBsOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1l" + + "AQAcDgAuAEQcDgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQAeDgAuAEQe" + + "DgAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAB8OAC4ARB8OAAAABf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABACAOAC4ARCAOAAABACYB/////wEB" + + "/////wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAIQ4ALgBEIQ4AAAAB/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAFNlcnZlcklkAQAiDgAuAEQiDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAA" + + "Q2xpZW50QXVkaXRFbnRyeUlkAQAjDgAuAEQjDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAA" + + "Q2xpZW50VXNlcklkAQAkDgAuAEQkDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAATAAAAUGFyYW1l" + + "dGVyRGF0YVR5cGVJZAEAJQ4ALgBEJQ4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFVwZGF0" + + "ZWROb2RlAQAmDgAuAEQmDgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAIAAAAUmVxVGltZXMBAMwL" + + "AC4ARMwLAAABACYBAQAAAAEAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAJAAAAT2xkVmFsdWVzAQDN" + + "CwAuAETNCwAAABcBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ReqTimes + { + get + { + return m_reqTimes; + } + + set + { + if (!Object.ReferenceEquals(m_reqTimes, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_reqTimes = value; + } + } + + /// + public PropertyState OldValues + { + get + { + return m_oldValues; + } + + set + { + if (!Object.ReferenceEquals(m_oldValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValues = 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_reqTimes != null) + { + children.Add(m_reqTimes); + } + + if (m_oldValues != null) + { + children.Add(m_oldValues); + } + + 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 Opc.Ua.BrowseNames.ReqTimes: + { + if (createOrReplace) + { + if (ReqTimes == null) + { + if (replacement == null) + { + ReqTimes = new PropertyState(this); + } + else + { + ReqTimes = (PropertyState)replacement; + } + } + } + + instance = ReqTimes; + break; + } + + case Opc.Ua.BrowseNames.OldValues: + { + if (createOrReplace) + { + if (OldValues == null) + { + if (replacement == null) + { + OldValues = new PropertyState(this); + } + else + { + OldValues = (PropertyState)replacement; + } + } + } + + instance = OldValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_reqTimes; + private PropertyState m_oldValues; + #endregion + } + #endif + #endregion + + #region AuditHistoryEventDeleteEventState Class + #if (!OPCUA_EXCLUDE_AuditHistoryEventDeleteEventState) + /// + /// Stores an instance of the AuditHistoryEventDeleteEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuditHistoryEventDeleteEventState : AuditHistoryDeleteEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuditHistoryEventDeleteEventState(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(Opc.Ua.ObjectTypes.AuditHistoryEventDeleteEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEF1ZGl0SGlzdG9yeUV2ZW50RGVsZXRlRXZlbnRUeXBlSW5zdGFu" + + "Y2UBAM4LAQDOC84LAAD/////EQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAJw4ALgBEJw4AAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAKA4ALgBEKA4AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBACkOAC4ARCkOAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQAqDgAuAEQqDgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEAKw4ALgBEKw4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "ACwOAC4ARCwOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAC4OAC4ARC4O" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEALw4ALgBELw4AAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAMA4ALgBEMA4AAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQAxDgAuAEQxDgAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBADIOAC4ARDIOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBADMOAC4ARDMOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBADQOAC4ARDQOAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABMAAABQYXJhbWV0" + + "ZXJEYXRhVHlwZUlkAQA1DgAuAEQ1DgAAABH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAVXBkYXRl" + + "ZE5vZGUBADYOAC4ARDYOAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAAgAAABFdmVudElkcwEAzwsA" + + "LgBEzwsAAAAPAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAJAAAAT2xkVmFsdWVzAQDQCwAu" + + "AETQCwAAAQCYA/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EventIds + { + get + { + return m_eventIds; + } + + set + { + if (!Object.ReferenceEquals(m_eventIds, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_eventIds = value; + } + } + + /// + public PropertyState OldValues + { + get + { + return m_oldValues; + } + + set + { + if (!Object.ReferenceEquals(m_oldValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_oldValues = 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_eventIds != null) + { + children.Add(m_eventIds); + } + + if (m_oldValues != null) + { + children.Add(m_oldValues); + } + + 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 Opc.Ua.BrowseNames.EventIds: + { + if (createOrReplace) + { + if (EventIds == null) + { + if (replacement == null) + { + EventIds = new PropertyState(this); + } + else + { + EventIds = (PropertyState)replacement; + } + } + } + + instance = EventIds; + break; + } + + case Opc.Ua.BrowseNames.OldValues: + { + if (createOrReplace) + { + if (OldValues == null) + { + if (replacement == null) + { + OldValues = new PropertyState(this); + } + else + { + OldValues = (PropertyState)replacement; + } + } + } + + instance = OldValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_eventIds; + private PropertyState m_oldValues; + #endregion + } + #endif + #endregion + + #region OpenWithMasksMethodState Class + #if (!OPCUA_EXCLUDE_OpenWithMasksMethodState) + /// + /// Stores an instance of the OpenWithMasksMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class OpenWithMasksMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public OpenWithMasksMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new OpenWithMasksMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFwAAAE9wZW5XaXRoTWFza3NNZXRob2RUeXBlAQDhMAAvAQDhMOEwAAAB" + + "Af////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA4jAALgBE4jAAAJYBAAAAAQAqAQEU" + + "AAAABQAAAE1hc2tzAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAP" + + "AAAAT3V0cHV0QXJndW1lbnRzAQDjMAAuAETjMAAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public OpenWithMasksMethodStateMethodCallHandler 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; + + uint masks = (uint)_inputArguments[0]; + + uint fileHandle = (uint)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + masks, + ref fileHandle); + } + + _outputArguments[0] = fileHandle; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult OpenWithMasksMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint masks, + ref uint fileHandle); + #endif + #endregion + + #region CloseAndUpdateMethodState Class + #if (!OPCUA_EXCLUDE_CloseAndUpdateMethodState) + /// + /// Stores an instance of the CloseAndUpdateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CloseAndUpdateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CloseAndUpdateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CloseAndUpdateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAENsb3NlQW5kVXBkYXRlTWV0aG9kVHlwZQEA5DAALwEA5DDkMAAA" + + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAKAxAC4ARKAxAACWAQAAAAEAKgEB" + + "GQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoC" + + "AAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQDlMAAuAETlMAAAlgEAAAABACoBASMAAAAUAAAAQXBwbHlD" + + "aGFuZ2VzUmVxdWlyZWQAAf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CloseAndUpdateMethodStateMethodCallHandler 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; + + uint fileHandle = (uint)_inputArguments[0]; + + bool applyChangesRequired = (bool)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fileHandle, + ref applyChangesRequired); + } + + _outputArguments[0] = applyChangesRequired; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CloseAndUpdateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + uint fileHandle, + ref bool applyChangesRequired); + #endif + #endregion + + #region AddCertificateMethodState Class + #if (!OPCUA_EXCLUDE_AddCertificateMethodState) + /// + /// Stores an instance of the AddCertificateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddCertificateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddCertificateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddCertificateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGAAAAEFkZENlcnRpZmljYXRlTWV0aG9kVHlwZQEA5jAALwEA5jDmMAAA" + + "AQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOcwAC4AROcwAACWAgAAAAEAKgEB" + + "GgAAAAsAAABDZXJ0aWZpY2F0ZQAP/////wAAAAAAAQAqAQEjAAAAFAAAAElzVHJ1c3RlZENlcnRpZmlj" + + "YXRlAAH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddCertificateMethodStateMethodCallHandler 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; + + byte[] certificate = (byte[])_inputArguments[0]; + bool isTrustedCertificate = (bool)_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + certificate, + isTrustedCertificate); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddCertificateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + byte[] certificate, + bool isTrustedCertificate); + #endif + #endregion + + #region RemoveCertificateMethodState Class + #if (!OPCUA_EXCLUDE_RemoveCertificateMethodState) + /// + /// Stores an instance of the RemoveCertificateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveCertificateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveCertificateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveCertificateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGwAAAFJlbW92ZUNlcnRpZmljYXRlTWV0aG9kVHlwZQEA6DAALwEA6DDo" + + "MAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOkwAC4AROkwAACWAgAAAAEA" + + "KgEBGQAAAAoAAABUaHVtYnByaW50AAz/////AAAAAAABACoBASMAAAAUAAAASXNUcnVzdGVkQ2VydGlm" + + "aWNhdGUAAf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveCertificateMethodStateMethodCallHandler 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; + + string thumbprint = (string)_inputArguments[0]; + bool isTrustedCertificate = (bool)_inputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + thumbprint, + isTrustedCertificate); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveCertificateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string thumbprint, + bool isTrustedCertificate); + #endif + #endregion + + #region TrustListState Class + #if (!OPCUA_EXCLUDE_TrustListState) + /// + /// Stores an instance of the TrustListType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TrustListState : FileState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TrustListState(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(Opc.Ua.ObjectTypes.TrustListType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (UpdateFrequency != null) + { + UpdateFrequency.Initialize(context, UpdateFrequency_InitializationString); + } + + if (CloseAndUpdate != null) + { + CloseAndUpdate.Initialize(context, CloseAndUpdate_InitializationString); + } + + if (AddCertificate != null) + { + AddCertificate.Initialize(context, AddCertificate_InitializationString); + } + + if (RemoveCertificate != null) + { + RemoveCertificate.Initialize(context, RemoveCertificate_InitializationString); + } + } + + #region Initialization String + private const string UpdateFrequency_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAFVwZGF0ZUZyZXF1ZW5jeQEAYEsALgBEYEsAAAEAIgH/////AQH/" + + "////AAAAAA=="; + + private const string CloseAndUpdate_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAENsb3NlQW5kVXBkYXRlAQACMQAvAQACMQIxAAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAoTEALgBEoTEAAJYBAAAAAQAqAQEZAAAACgAAAEZp" + + "bGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABP" + + "dXRwdXRBcmd1bWVudHMBAAMxAC4ARAMxAACWAQAAAAEAKgEBIwAAABQAAABBcHBseUNoYW5nZXNSZXF1" + + "aXJlZAAB/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string AddCertificate_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAEFkZENlcnRpZmljYXRlAQAEMQAvAQAEMQQxAAABAf////8BAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEABTEALgBEBTEAAJYCAAAAAQAqAQEaAAAACwAAAENl" + + "cnRpZmljYXRlAA//////AAAAAAABACoBASMAAAAUAAAASXNUcnVzdGVkQ2VydGlmaWNhdGUAAf////8A" + + "AAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string RemoveCertificate_InitializationString = + "//////////8EYYIKBAAAAAAAEQAAAFJlbW92ZUNlcnRpZmljYXRlAQAGMQAvAQAGMQYxAAABAf////8B" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEABzEALgBEBzEAAJYCAAAAAQAqAQEZAAAACgAA" + + "AFRodW1icHJpbnQADP////8AAAAAAAEAKgEBIwAAABQAAABJc1RydXN0ZWRDZXJ0aWZpY2F0ZQAB////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFQAAAFRydXN0TGlzdFR5cGVJbnN0YW5jZQEA6jABAOow6jAAAP////8Q" + + "AAAAFWCJCgIAAAAAAAQAAABTaXplAQDrMAAuAETrMAAAAAn/////AQH/////AAAAABVgiQoCAAAAAAAI" + + "AAAAV3JpdGFibGUBAJoxAC4ARJoxAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABVc2VyV3Jp" + + "dGFibGUBAJsxAC4ARJsxAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABPcGVuQ291bnQBAO4w" + + "AC4ARO4wAAAABf////8BAf////8AAAAABGGCCgQAAAAAAAQAAABPcGVuAQDvMAAvAQA8Le8wAAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA8DAALgBE8DAAAJYBAAAAAQAqAQETAAAA" + + "BAAAAE1vZGUAA/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABP" + + "dXRwdXRBcmd1bWVudHMBAPEwAC4ARPEwAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAQ2xvc2UBAPIwAC8BAD8t" + + "8jAAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDzMAAuAETzMAAAlgEAAAAB" + + "ACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAE" + + "YYIKBAAAAAAABAAAAFJlYWQBAPQwAC8BAEEt9DAAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0" + + "QXJndW1lbnRzAQD1MAAuAET1MAAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAA" + + "AQAqAQEVAAAABgAAAExlbmd0aAAG/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkK" + + "AgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA9jAALgBE9jAAAJYBAAAAAQAqAQETAAAABAAAAERhdGEA" + + "D/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABXcml0ZQEA9zAA" + + "LwEARC33MAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAPgwAC4ARPgwAACW" + + "AgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARMAAAAEAAAARGF0YQAP////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAEdldFBvc2l0aW9uAQD5" + + "MAAvAQBGLfkwAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA+jAALgBE+jAA" + + "AJYBAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAPswAC4ARPswAACWAQAAAAEAKgEBFwAA" + + "AAgAAABQb3NpdGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAA" + + "CwAAAFNldFBvc2l0aW9uAQD8MAAvAQBJLfwwAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFy" + + "Z3VtZW50cwEA/TAALgBE/TAAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEA" + + "KgEBFwAAAAgAAABQb3NpdGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkK" + + "AgAAAAAADgAAAExhc3RVcGRhdGVUaW1lAQD+MAAuAET+MAAAAQAmAf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAA8AAABVcGRhdGVGcmVxdWVuY3kBAGBLAC4ARGBLAAABACIB/////wEB/////wAAAAAEYYIKBAAA" + + "AAAADQAAAE9wZW5XaXRoTWFza3MBAP8wAC8BAP8w/zAAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElu" + + "cHV0QXJndW1lbnRzAQAAMQAuAEQAMQAAlgEAAAABACoBARQAAAAFAAAATWFza3MAB/////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAAExAC4A" + + "RAExAACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAAARhggoEAAAAAAAOAAAAQ2xvc2VBbmRVcGRhdGUBAAIxAC8BAAIxAjEAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQChMQAuAEShMQAAlgEAAAABACoBARkAAAAKAAAA" + + "RmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAA" + + "AE91dHB1dEFyZ3VtZW50cwEAAzEALgBEAzEAAJYBAAAAAQAqAQEjAAAAFAAAAEFwcGx5Q2hhbmdlc1Jl" + + "cXVpcmVkAAH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAOAAAAQWRk" + + "Q2VydGlmaWNhdGUBAAQxAC8BAAQxBDEAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1l" + + "bnRzAQAFMQAuAEQFMQAAlgIAAAABACoBARoAAAALAAAAQ2VydGlmaWNhdGUAD/////8AAAAAAAEAKgEB" + + "IwAAABQAAABJc1RydXN0ZWRDZXJ0aWZpY2F0ZQAB/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAEYYIKBAAAAAAAEQAAAFJlbW92ZUNlcnRpZmljYXRlAQAGMQAvAQAGMQYxAAABAf////8BAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEABzEALgBEBzEAAJYCAAAAAQAqAQEZAAAACgAAAFRo" + + "dW1icHJpbnQADP////8AAAAAAAEAKgEBIwAAABQAAABJc1RydXN0ZWRDZXJ0aWZpY2F0ZQAB/////wAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState LastUpdateTime + { + get + { + return m_lastUpdateTime; + } + + set + { + if (!Object.ReferenceEquals(m_lastUpdateTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastUpdateTime = value; + } + } + + /// + public PropertyState UpdateFrequency + { + get + { + return m_updateFrequency; + } + + set + { + if (!Object.ReferenceEquals(m_updateFrequency, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateFrequency = value; + } + } + + /// + public OpenWithMasksMethodState OpenWithMasks + { + get + { + return m_openWithMasksMethod; + } + + set + { + if (!Object.ReferenceEquals(m_openWithMasksMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_openWithMasksMethod = value; + } + } + + /// + public CloseAndUpdateMethodState CloseAndUpdate + { + get + { + return m_closeAndUpdateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_closeAndUpdateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_closeAndUpdateMethod = value; + } + } + + /// + public AddCertificateMethodState AddCertificate + { + get + { + return m_addCertificateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addCertificateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addCertificateMethod = value; + } + } + + /// + public RemoveCertificateMethodState RemoveCertificate + { + get + { + return m_removeCertificateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeCertificateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeCertificateMethod = 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_lastUpdateTime != null) + { + children.Add(m_lastUpdateTime); + } + + if (m_updateFrequency != null) + { + children.Add(m_updateFrequency); + } + + if (m_openWithMasksMethod != null) + { + children.Add(m_openWithMasksMethod); + } + + if (m_closeAndUpdateMethod != null) + { + children.Add(m_closeAndUpdateMethod); + } + + if (m_addCertificateMethod != null) + { + children.Add(m_addCertificateMethod); + } + + if (m_removeCertificateMethod != null) + { + children.Add(m_removeCertificateMethod); + } + + 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 Opc.Ua.BrowseNames.LastUpdateTime: + { + if (createOrReplace) + { + if (LastUpdateTime == null) + { + if (replacement == null) + { + LastUpdateTime = new PropertyState(this); + } + else + { + LastUpdateTime = (PropertyState)replacement; + } + } + } + + instance = LastUpdateTime; + break; + } + + case Opc.Ua.BrowseNames.UpdateFrequency: + { + if (createOrReplace) + { + if (UpdateFrequency == null) + { + if (replacement == null) + { + UpdateFrequency = new PropertyState(this); + } + else + { + UpdateFrequency = (PropertyState)replacement; + } + } + } + + instance = UpdateFrequency; + break; + } + + case Opc.Ua.BrowseNames.OpenWithMasks: + { + if (createOrReplace) + { + if (OpenWithMasks == null) + { + if (replacement == null) + { + OpenWithMasks = new OpenWithMasksMethodState(this); + } + else + { + OpenWithMasks = (OpenWithMasksMethodState)replacement; + } + } + } + + instance = OpenWithMasks; + break; + } + + case Opc.Ua.BrowseNames.CloseAndUpdate: + { + if (createOrReplace) + { + if (CloseAndUpdate == null) + { + if (replacement == null) + { + CloseAndUpdate = new CloseAndUpdateMethodState(this); + } + else + { + CloseAndUpdate = (CloseAndUpdateMethodState)replacement; + } + } + } + + instance = CloseAndUpdate; + break; + } + + case Opc.Ua.BrowseNames.AddCertificate: + { + if (createOrReplace) + { + if (AddCertificate == null) + { + if (replacement == null) + { + AddCertificate = new AddCertificateMethodState(this); + } + else + { + AddCertificate = (AddCertificateMethodState)replacement; + } + } + } + + instance = AddCertificate; + break; + } + + case Opc.Ua.BrowseNames.RemoveCertificate: + { + if (createOrReplace) + { + if (RemoveCertificate == null) + { + if (replacement == null) + { + RemoveCertificate = new RemoveCertificateMethodState(this); + } + else + { + RemoveCertificate = (RemoveCertificateMethodState)replacement; + } + } + } + + instance = RemoveCertificate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_lastUpdateTime; + private PropertyState m_updateFrequency; + private OpenWithMasksMethodState m_openWithMasksMethod; + private CloseAndUpdateMethodState m_closeAndUpdateMethod; + private AddCertificateMethodState m_addCertificateMethod; + private RemoveCertificateMethodState m_removeCertificateMethod; + #endregion + } + #endif + #endregion + + #region TrustListOutOfDateAlarmState Class + #if (!OPCUA_EXCLUDE_TrustListOutOfDateAlarmState) + /// + /// Stores an instance of the TrustListOutOfDateAlarmType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TrustListOutOfDateAlarmState : SystemOffNormalAlarmState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TrustListOutOfDateAlarmState(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(Opc.Ua.ObjectTypes.TrustListOutOfDateAlarmType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAFRydXN0TGlzdE91dE9mRGF0ZUFsYXJtVHlwZUluc3RhbmNlAQBh" + + "SwEAYUthSwAA/////x4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAGJLAC4ARGJLAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAGNLAC4ARGNLAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQBkSwAuAERkSwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAZUsALgBEZUsAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "AGZLAC4ARGZLAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBnSwAu" + + "AERnSwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBpSwAuAERpSwAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAGpLAC4ARGpLAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQBrSwAuAERrSwAAABH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQBsSwAuAERsSwAAABX/////AQH/////AAAA" + + "ABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEAb0sALgBEb0sAAAAM/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACAAAAEJyYW5jaElkAQBwSwAuAERwSwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAA" + + "UmV0YWluAQBxSwAuAERxSwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRl" + + "AQBySwAvAQAjI3JLAAAAFf////8BAQUAAAABACwjAAEAiksBACwjAAEAk0sBACwjAAEAoEsBACwjAAEA" + + "qksBACwjAAEAvEsBAAAAFWCJCgIAAAAAAAIAAABJZAEAc0sALgBEc0sAAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAABwAAAFF1YWxpdHkBAHtLAC8BACoje0sAAAAT/////wEB/////wEAAAAVYIkKAgAAAAAA" + + "DwAAAFNvdXJjZVRpbWVzdGFtcAEAfEsALgBEfEsAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAM" + + "AAAATGFzdFNldmVyaXR5AQB9SwAvAQAqI31LAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABT" + + "b3VyY2VUaW1lc3RhbXABAH5LAC4ARH5LAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENv" + + "bW1lbnQBAH9LAC8BACojf0sAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVz" + + "dGFtcAEAgEsALgBEgEsAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklk" + + "AQCBSwAuAESBSwAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAgksALwEARCOC" + + "SwAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQCDSwAvAQBDI4NLAAABAQEA" + + "AAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQCESwAvAQBFI4RLAAABAQEAAAAB" + + "APkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAhUsALgBEhUsAAJYCAAAAAQAq" + + "AQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBl" + + "dmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBj" + + "b21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABBY2tlZFN0YXRlAQCKSwAvAQAjI4pLAAAAFf////8BAQEAAAABACwjAQEAcksBAAAA" + + "FWCJCgIAAAAAAAIAAABJZAEAi0sALgBEi0sAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFj" + + "a25vd2xlZGdlAQCcSwAvAQCXI5xLAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1" + + "dEFyZ3VtZW50cwEAnUsALgBEnUsAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAA" + + "AAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABD" + + "b21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9u" + + "LgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEAoEsALwEA" + + "IyOgSwAAABX/////AQEBAAAAAQAsIwEBAHJLAQAAABVgiQoCAAAAAAACAAAASWQBAKFLAC4ARKFLAAAA" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAKlLAC4ARKlLAAAAEf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQDPSwAuAETPSwAAAAH/////AQH/" + + "////AAAAABVgiQoCAAAAAAALAAAATm9ybWFsU3RhdGUBAPVLAC4ARPVLAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAsAAABUcnVzdExpc3RJZAEA9ksALgBE9ksAAAAR/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADgAAAExhc3RVcGRhdGVUaW1lAQD3SwAuAET3SwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AA8AAABVcGRhdGVGcmVxdWVuY3kBAPhLAC4ARPhLAAABACIB/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState TrustListId + { + get + { + return m_trustListId; + } + + set + { + if (!Object.ReferenceEquals(m_trustListId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_trustListId = value; + } + } + + /// + public PropertyState LastUpdateTime + { + get + { + return m_lastUpdateTime; + } + + set + { + if (!Object.ReferenceEquals(m_lastUpdateTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_lastUpdateTime = value; + } + } + + /// + public PropertyState UpdateFrequency + { + get + { + return m_updateFrequency; + } + + set + { + if (!Object.ReferenceEquals(m_updateFrequency, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateFrequency = 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_trustListId != null) + { + children.Add(m_trustListId); + } + + if (m_lastUpdateTime != null) + { + children.Add(m_lastUpdateTime); + } + + if (m_updateFrequency != null) + { + children.Add(m_updateFrequency); + } + + 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 Opc.Ua.BrowseNames.TrustListId: + { + if (createOrReplace) + { + if (TrustListId == null) + { + if (replacement == null) + { + TrustListId = new PropertyState(this); + } + else + { + TrustListId = (PropertyState)replacement; + } + } + } + + instance = TrustListId; + break; + } + + case Opc.Ua.BrowseNames.LastUpdateTime: + { + if (createOrReplace) + { + if (LastUpdateTime == null) + { + if (replacement == null) + { + LastUpdateTime = new PropertyState(this); + } + else + { + LastUpdateTime = (PropertyState)replacement; + } + } + } + + instance = LastUpdateTime; + break; + } + + case Opc.Ua.BrowseNames.UpdateFrequency: + { + if (createOrReplace) + { + if (UpdateFrequency == null) + { + if (replacement == null) + { + UpdateFrequency = new PropertyState(this); + } + else + { + UpdateFrequency = (PropertyState)replacement; + } + } + } + + instance = UpdateFrequency; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_trustListId; + private PropertyState m_lastUpdateTime; + private PropertyState m_updateFrequency; + #endregion + } + #endif + #endregion + + #region CertificateGroupState Class + #if (!OPCUA_EXCLUDE_CertificateGroupState) + /// + /// Stores an instance of the CertificateGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateGroupState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateGroupState(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(Opc.Ua.ObjectTypes.CertificateGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (CertificateExpired != null) + { + CertificateExpired.Initialize(context, CertificateExpired_InitializationString); + } + + if (TrustListOutOfDate != null) + { + TrustListOutOfDate.Initialize(context, TrustListOutOfDate_InitializationString); + } + } + + #region Initialization String + private const string CertificateExpired_InitializationString = + "//////////8EYIAKAQAAAAAAEgAAAENlcnRpZmljYXRlRXhwaXJlZAEA+ksALwEAqTP6SwAA/////x4A" + + "AAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAPtLAC4ARPtLAAAAD/////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAkAAABFdmVudFR5cGUBAPxLAC4ARPxLAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOb2RlAQD9SwAuAET9SwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTmFtZQEA" + + "/ksALgBE/ksAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBAP9LAC4ARP9LAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQAATAAuAEQATAAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQACTAAuAEQCTAAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAIAAAAU2V2ZXJpdHkBAANMAC4ARANMAAAABf////8BAf////8AAAAAFWCJCgIAAAAAABAA" + + "AABDb25kaXRpb25DbGFzc0lkAQAETAAuAEQETAAAABH/////AQH/////AAAAABVgiQoCAAAAAAASAAAA" + + "Q29uZGl0aW9uQ2xhc3NOYW1lAQAFTAAuAEQFTAAAABX/////AQH/////AAAAABVgiQoCAAAAAAANAAAA" + + "Q29uZGl0aW9uTmFtZQEACEwALgBECEwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAEJyYW5j" + + "aElkAQAJTAAuAEQJTAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAAUmV0YWluAQAKTAAuAEQK" + + "TAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRlAQALTAAvAQAjIwtMAAAA" + + "Ff////8BAQUAAAABACwjAAEAH0wBACwjAAEAKEwBACwjAAEANUwBACwjAAEAP0wBACwjAAEAUUwBAAAA" + + "FWCJCgIAAAAAAAIAAABJZAEADEwALgBEDEwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAFF1" + + "YWxpdHkBABRMAC8BACojFEwAAAAT/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVz" + + "dGFtcAEAFUwALgBEFUwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAATGFzdFNldmVyaXR5" + + "AQAWTAAvAQAqIxZMAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXAB" + + "ABdMAC4ARBdMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1lbnQBABhMAC8BACoj" + + "GEwAAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAGUwALgBEGUwA" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQAaTAAuAEQaTAAAAAz/" + + "////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEAG0wALwEARCMbTAAAAQEBAAAAAQD5CwAB" + + "APMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQAcTAAvAQBDIxxMAAABAQEAAAABAPkLAAEA8woAAAAA" + + "BGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQAdTAAvAQBFIx1MAAABAQEAAAABAPkLAAEADQsBAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAHkwALgBEHkwAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50" + + "SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50" + + "LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0" + + "byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAoAAABBY2tl" + + "ZFN0YXRlAQAfTAAvAQAjIx9MAAAAFf////8BAQEAAAABACwjAQEAC0wBAAAAFWCJCgIAAAAAAAIAAABJ" + + "ZAEAIEwALgBEIEwAAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFja25vd2xlZGdlAQAxTAAv" + + "AQCXIzFMAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAMkwA" + + "LgBEMkwAAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50" + + "aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAA" + + "AAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEANUwALwEAIyM1TAAAABX/////AQEB" + + "AAAAAQAsIwEBAAtMAQAAABVgiQoCAAAAAAACAAAASWQBADZMAC4ARDZMAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAD5MAC4ARD5MAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQCFTgAuAESFTgAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAALAAAATm9ybWFsU3RhdGUBAKpOAC4ARKpOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABF" + + "eHBpcmF0aW9uRGF0ZQEAq04ALgBEq04AAAAN/////wEB/////wAAAAAVYIkKAgAAAAAADwAAAENlcnRp" + + "ZmljYXRlVHlwZQEArU4ALgBErU4AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAENlcnRpZmlj" + + "YXRlAQCuTgAuAESuTgAAAA//////AQH/////AAAAAA=="; + + private const string TrustListOutOfDate_InitializationString = + "//////////8EYIAKAQAAAAAAEgAAAFRydXN0TGlzdE91dE9mRGF0ZQEAr04ALwEAYUuvTgAA/////x4A" + + "AAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBALBOAC4ARLBOAAAAD/////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAkAAABFdmVudFR5cGUBALFOAC4ARLFOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABTb3Vy" + + "Y2VOb2RlAQCyTgAuAESyTgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTmFtZQEA" + + "s04ALgBEs04AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBALROAC4ARLROAAABACYB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQC1TgAuAES1TgAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQC3TgAuAES3TgAAABX/////AQH/////AAAAABVg" + + "iQoCAAAAAAAIAAAAU2V2ZXJpdHkBALhOAC4ARLhOAAAABf////8BAf////8AAAAAFWCJCgIAAAAAABAA" + + "AABDb25kaXRpb25DbGFzc0lkAQC5TgAuAES5TgAAABH/////AQH/////AAAAABVgiQoCAAAAAAASAAAA" + + "Q29uZGl0aW9uQ2xhc3NOYW1lAQC6TgAuAES6TgAAABX/////AQH/////AAAAABVgiQoCAAAAAAANAAAA" + + "Q29uZGl0aW9uTmFtZQEAvU4ALgBEvU4AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAEJyYW5j" + + "aElkAQC+TgAuAES+TgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAGAAAAUmV0YWluAQC/TgAuAES/" + + "TgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5hYmxlZFN0YXRlAQDATgAvAQAjI8BOAAAA" + + "Ff////8BAQUAAAABACwjAAEA1E4BACwjAAEA3U4BACwjAAEA6k4BACwjAAEA9E4BACwjAAEABk8BAAAA" + + "FWCJCgIAAAAAAAIAAABJZAEAwU4ALgBEwU4AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAFF1" + + "YWxpdHkBAMlOAC8BACojyU4AAAAT/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVz" + + "dGFtcAEAyk4ALgBEyk4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAATGFzdFNldmVyaXR5" + + "AQDLTgAvAQAqI8tOAAAABf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXAB" + + "AMxOAC4ARMxOAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAENvbW1lbnQBAM1OAC8BACoj" + + "zU4AAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAzk4ALgBEzk4A" + + "AAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50VXNlcklkAQDPTgAuAETPTgAAAAz/" + + "////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEA0E4ALwEARCPQTgAAAQEBAAAAAQD5CwAB" + + "APMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQDRTgAvAQBDI9FOAAABAQEAAAABAPkLAAEA8woAAAAA" + + "BGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQDSTgAvAQBFI9JOAAABAQEAAAABAPkLAAEADQsBAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA004ALgBE004AAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50" + + "SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50" + + "LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0" + + "byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAoAAABBY2tl" + + "ZFN0YXRlAQDUTgAvAQAjI9ROAAAAFf////8BAQEAAAABACwjAQEAwE4BAAAAFWCJCgIAAAAAAAIAAABJ" + + "ZAEA1U4ALgBE1U4AAAAB/////wEB/////wAAAAAEYYIKBAAAAAAACwAAAEFja25vd2xlZGdlAQDmTgAv" + + "AQCXI+ZOAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA504A" + + "LgBE504AAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50" + + "aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAA" + + "AAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0ZQEA6k4ALwEAIyPqTgAAABX/////AQEB" + + "AAAAAQAsIwEBAMBOAQAAABVgiQoCAAAAAAACAAAASWQBAOtOAC4AROtOAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAPNOAC4ARPNOAAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQAZTwAuAEQZTwAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAALAAAATm9ybWFsU3RhdGUBAD5PAC4ARD5PAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABU" + + "cnVzdExpc3RJZAEAP08ALgBEP08AAAAR/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAExhc3RVcGRh" + + "dGVUaW1lAQBATwAuAERATwAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAA8AAABVcGRhdGVGcmVx" + + "dWVuY3kBAEFPAC4AREFPAAABACIB/////wEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAENlcnRpZmljYXRlR3JvdXBUeXBlSW5zdGFuY2UBAAsxAQALMQsx" + + "AAD/////BAAAAARggAoBAAAAAAAJAAAAVHJ1c3RMaXN0AQAfNQAvAQDqMB81AAD/////DAAAABVgiQoC" + + "AAAAAAAEAAAAU2l6ZQEAIDUALgBEIDUAAAAJ/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFdyaXRh" + + "YmxlAQAhNQAuAEQhNQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAVXNlcldyaXRhYmxlAQAi" + + "NQAuAEQiNQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAT3BlbkNvdW50AQAjNQAuAEQjNQAA" + + "AAX/////AQH/////AAAAAARhggoEAAAAAAAEAAAAT3BlbgEAJTUALwEAPC0lNQAAAQH/////AgAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACY1AC4ARCY1AACWAQAAAAEAKgEBEwAAAAQAAABNb2Rl" + + "AAP/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJn" + + "dW1lbnRzAQAnNQAuAEQnNQAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAENsb3NlAQAoNQAvAQA/LSg1AAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAKTUALgBEKTUAAJYBAAAAAQAqAQEZAAAA" + + "CgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAA" + + "AAQAAABSZWFkAQAqNQAvAQBBLSo1AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEAKzUALgBEKzUAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFQAA" + + "AAYAAABMZW5ndGgABv////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8A" + + "AABPdXRwdXRBcmd1bWVudHMBACw1AC4ARCw1AACWAQAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAV3JpdGUBAC01AC8BAEQtLTUA" + + "AAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAuNQAuAEQuNQAAlgIAAAABACoB" + + "ARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQETAAAABAAAAERhdGEAD/////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABHZXRQb3NpdGlvbgEALzUALwEARi0v" + + "NQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADA1AC4ARDA1AACWAQAAAAEA" + + "KgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdg" + + "qQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAxNQAuAEQxNQAAlgEAAAABACoBARcAAAAIAAAAUG9z" + + "aXRpb24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABTZXRQ" + + "b3NpdGlvbgEAMjUALwEASS0yNQAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "ADM1AC4ARDM1AACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARcAAAAI" + + "AAAAUG9zaXRpb24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAA4A" + + "AABMYXN0VXBkYXRlVGltZQEANDUALgBENDUAAAEAJgH/////AQH/////AAAAAARhggoEAAAAAAANAAAA" + + "T3BlbldpdGhNYXNrcwEANTUALwEA/zA1NQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1" + + "bWVudHMBADY1AC4ARDY1AACWAQAAAAEAKgEBFAAAAAUAAABNYXNrcwAH/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEANzUALgBENzUAAJYB" + + "AAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAAF2CJCgIAAAAAABAAAABDZXJ0aWZpY2F0ZVR5cGVzAQA/NQAuAEQ/NQAAABEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAABGCACgEAAAAAABIAAABDZXJ0aWZpY2F0ZUV4cGlyZWQBAPpLAC8BAKkz+ksAAP////8e" + + "AAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQD7SwAuAET7SwAAAA//////AQH/////AAAAABVgiQoCAAAA" + + "AAAJAAAARXZlbnRUeXBlAQD8SwAuAET8SwAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTm9kZQEA/UsALgBE/UsAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5hbWUB" + + "AP5LAC4ARP5LAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQAAABUaW1lAQD/SwAuAET/SwAAAQAm" + + "Af////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGltZQEAAEwALgBEAEwAAAEAJgH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAAkwALgBEAkwAAAAV/////wEB/////wAAAAAV" + + "YIkKAgAAAAAACAAAAFNldmVyaXR5AQADTAAuAEQDTAAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAAQ29uZGl0aW9uQ2xhc3NJZAEABEwALgBEBEwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENvbmRpdGlvbkNsYXNzTmFtZQEABUwALgBEBUwAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAADQAA" + + "AENvbmRpdGlvbk5hbWUBAAhMAC4ARAhMAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABCcmFu" + + "Y2hJZAEACUwALgBECUwAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAFJldGFpbgEACkwALgBE" + + "CkwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAEVuYWJsZWRTdGF0ZQEAC0wALwEAIyMLTAAA" + + "ABX/////AQEFAAAAAQAsIwABAB9MAQAsIwABAChMAQAsIwABADVMAQAsIwABAD9MAQAsIwABAFFMAQAA" + + "ABVgiQoCAAAAAAACAAAASWQBAAxMAC4ARAxMAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABR" + + "dWFsaXR5AQAUTAAvAQAqIxRMAAAAE/////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1l" + + "c3RhbXABABVMAC4ARBVMAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAExhc3RTZXZlcml0" + + "eQEAFkwALwEAKiMWTAAAAAX/////AQH/////AQAAABVgiQoCAAAAAAAPAAAAU291cmNlVGltZXN0YW1w" + + "AQAXTAAuAEQXTAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABDb21tZW50AQAYTAAvAQAq" + + "IxhMAAAAFf////8BAf////8BAAAAFWCJCgIAAAAAAA8AAABTb3VyY2VUaW1lc3RhbXABABlMAC4ARBlM" + + "AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAENsaWVudFVzZXJJZAEAGkwALgBEGkwAAAAM" + + "/////wEB/////wAAAAAEYYIKBAAAAAAABwAAAERpc2FibGUBABtMAC8BAEQjG0wAAAEBAQAAAAEA+QsA" + + "AQDzCgAAAAAEYYIKBAAAAAAABgAAAEVuYWJsZQEAHEwALwEAQyMcTAAAAQEBAAAAAQD5CwABAPMKAAAA" + + "AARhggoEAAAAAAAKAAAAQWRkQ29tbWVudAEAHUwALwEARSMdTAAAAQEBAAAAAQD5CwABAA0LAQAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAB5MAC4ARB5MAACWAgAAAAEAKgEBRgAAAAcAAABFdmVu" + + "dElkAA//////AAAAAAMAAAAAKAAAAFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVu" + + "dC4BACoBAUIAAAAHAAAAQ29tbWVudAAV/////wAAAAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQg" + + "dG8gdGhlIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAKAAAAQWNr" + + "ZWRTdGF0ZQEAH0wALwEAIyMfTAAAABX/////AQEBAAAAAQAsIwEBAAtMAQAAABVgiQoCAAAAAAACAAAA" + + "SWQBACBMAC4ARCBMAAAAAf////8BAf////8AAAAABGGCCgQAAAAAAAsAAABBY2tub3dsZWRnZQEAMUwA" + + "LwEAlyMxTAAAAQEBAAAAAQD5CwABAPAiAQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADJM" + + "AC4ARDJMAACWAgAAAAEAKgEBRgAAAAcAAABFdmVudElkAA//////AAAAAAMAAAAAKAAAAFRoZSBpZGVu" + + "dGlmaWVyIGZvciB0aGUgZXZlbnQgdG8gY29tbWVudC4BACoBAUIAAAAHAAAAQ29tbWVudAAV/////wAA" + + "AAADAAAAACQAAABUaGUgY29tbWVudCB0byBhZGQgdG8gdGhlIGNvbmRpdGlvbi4BACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAQWN0aXZlU3RhdGUBADVMAC8BACMjNUwAAAAV/////wEB" + + "AQAAAAEALCMBAQALTAEAAAAVYIkKAgAAAAAAAgAAAElkAQA2TAAuAEQ2TAAAAAH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAJAAAASW5wdXROb2RlAQA+TAAuAEQ+TAAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAATAAAAU3VwcHJlc3NlZE9yU2hlbHZlZAEAhU4ALgBEhU4AAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACwAAAE5vcm1hbFN0YXRlAQCqTgAuAESqTgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAA" + + "RXhwaXJhdGlvbkRhdGUBAKtOAC4ARKtOAAAADf////8BAf////8AAAAAFWCJCgIAAAAAAA8AAABDZXJ0" + + "aWZpY2F0ZVR5cGUBAK1OAC4ARK1OAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABDZXJ0aWZp" + + "Y2F0ZQEArk4ALgBErk4AAAAP/////wEB/////wAAAAAEYIAKAQAAAAAAEgAAAFRydXN0TGlzdE91dE9m" + + "RGF0ZQEAr04ALwEAYUuvTgAA/////x4AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBALBOAC4ARLBOAAAA" + + "D/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBALFOAC4ARLFOAAAAEf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQCyTgAuAESyTgAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTmFtZQEAs04ALgBEs04AAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BAAAAFRpbWUBALROAC4ARLROAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVU" + + "aW1lAQC1TgAuAES1TgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQC3TgAu" + + "AES3TgAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBALhOAC4ARLhOAAAABf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABAAAABDb25kaXRpb25DbGFzc0lkAQC5TgAuAES5TgAAABH/////" + + "AQH/////AAAAABVgiQoCAAAAAAASAAAAQ29uZGl0aW9uQ2xhc3NOYW1lAQC6TgAuAES6TgAAABX/////" + + "AQH/////AAAAABVgiQoCAAAAAAANAAAAQ29uZGl0aW9uTmFtZQEAvU4ALgBEvU4AAAAM/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACAAAAEJyYW5jaElkAQC+TgAuAES+TgAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAGAAAAUmV0YWluAQC/TgAuAES/TgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAARW5h" + + "YmxlZFN0YXRlAQDATgAvAQAjI8BOAAAAFf////8BAQUAAAABACwjAAEA1E4BACwjAAEA3U4BACwjAAEA" + + "6k4BACwjAAEA9E4BACwjAAEABk8BAAAAFWCJCgIAAAAAAAIAAABJZAEAwU4ALgBEwU4AAAAB/////wEB" + + "/////wAAAAAVYIkKAgAAAAAABwAAAFF1YWxpdHkBAMlOAC8BACojyU4AAAAT/////wEB/////wEAAAAV" + + "YIkKAgAAAAAADwAAAFNvdXJjZVRpbWVzdGFtcAEAyk4ALgBEyk4AAAEAJgH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAMAAAATGFzdFNldmVyaXR5AQDLTgAvAQAqI8tOAAAABf////8BAf////8BAAAAFWCJCgIA" + + "AAAAAA8AAABTb3VyY2VUaW1lc3RhbXABAMxOAC4ARMxOAAABACYB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAABwAAAENvbW1lbnQBAM1OAC8BACojzU4AAAAV/////wEB/////wEAAAAVYIkKAgAAAAAADwAAAFNv" + + "dXJjZVRpbWVzdGFtcAEAzk4ALgBEzk4AAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQDPTgAuAETPTgAAAAz/////AQH/////AAAAAARhggoEAAAAAAAHAAAARGlzYWJsZQEA" + + "0E4ALwEARCPQTgAAAQEBAAAAAQD5CwABAPMKAAAAAARhggoEAAAAAAAGAAAARW5hYmxlAQDRTgAvAQBD" + + "I9FOAAABAQEAAAABAPkLAAEA8woAAAAABGGCCgQAAAAAAAoAAABBZGRDb21tZW50AQDSTgAvAQBFI9JO" + + "AAABAQEAAAABAPkLAAEADQsBAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA004ALgBE004A" + + "AJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD/////8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIg" + + "Zm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEBQgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAA" + + "JAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUgY29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAAFWCJCgIAAAAAAAoAAABBY2tlZFN0YXRlAQDUTgAvAQAjI9ROAAAAFf////8BAQEAAAABACwj" + + "AQEAwE4BAAAAFWCJCgIAAAAAAAIAAABJZAEA1U4ALgBE1U4AAAAB/////wEB/////wAAAAAEYYIKBAAA" + + "AAAACwAAAEFja25vd2xlZGdlAQDmTgAvAQCXI+ZOAAABAQEAAAABAPkLAAEA8CIBAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEA504ALgBE504AAJYCAAAAAQAqAQFGAAAABwAAAEV2ZW50SWQAD///" + + "//8AAAAAAwAAAAAoAAAAVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0byBjb21tZW50LgEAKgEB" + + "QgAAAAcAAABDb21tZW50ABX/////AAAAAAMAAAAAJAAAAFRoZSBjb21tZW50IHRvIGFkZCB0byB0aGUg" + + "Y29uZGl0aW9uLgEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAsAAABBY3RpdmVTdGF0" + + "ZQEA6k4ALwEAIyPqTgAAABX/////AQEBAAAAAQAsIwEBAMBOAQAAABVgiQoCAAAAAAACAAAASWQBAOtO" + + "AC4AROtOAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABJbnB1dE5vZGUBAPNOAC4ARPNOAAAA" + + "Ef////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdXBwcmVzc2VkT3JTaGVsdmVkAQAZTwAuAEQZTwAA" + + "AAH/////AQH/////AAAAABVgiQoCAAAAAAALAAAATm9ybWFsU3RhdGUBAD5PAC4ARD5PAAAAEf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAsAAABUcnVzdExpc3RJZAEAP08ALgBEP08AAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAADgAAAExhc3RVcGRhdGVUaW1lAQBATwAuAERATwAAAQAmAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA8AAABVcGRhdGVGcmVxdWVuY3kBAEFPAC4AREFPAAABACIB/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public TrustListState TrustList + { + get + { + return m_trustList; + } + + set + { + if (!Object.ReferenceEquals(m_trustList, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_trustList = value; + } + } + + /// + public PropertyState CertificateTypes + { + get + { + return m_certificateTypes; + } + + set + { + if (!Object.ReferenceEquals(m_certificateTypes, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateTypes = value; + } + } + + /// + public CertificateExpirationAlarmState CertificateExpired + { + get + { + return m_certificateExpired; + } + + set + { + if (!Object.ReferenceEquals(m_certificateExpired, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateExpired = value; + } + } + + /// + public TrustListOutOfDateAlarmState TrustListOutOfDate + { + get + { + return m_trustListOutOfDate; + } + + set + { + if (!Object.ReferenceEquals(m_trustListOutOfDate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_trustListOutOfDate = 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_trustList != null) + { + children.Add(m_trustList); + } + + if (m_certificateTypes != null) + { + children.Add(m_certificateTypes); + } + + if (m_certificateExpired != null) + { + children.Add(m_certificateExpired); + } + + if (m_trustListOutOfDate != null) + { + children.Add(m_trustListOutOfDate); + } + + 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 Opc.Ua.BrowseNames.TrustList: + { + if (createOrReplace) + { + if (TrustList == null) + { + if (replacement == null) + { + TrustList = new TrustListState(this); + } + else + { + TrustList = (TrustListState)replacement; + } + } + } + + instance = TrustList; + break; + } + + case Opc.Ua.BrowseNames.CertificateTypes: + { + if (createOrReplace) + { + if (CertificateTypes == null) + { + if (replacement == null) + { + CertificateTypes = new PropertyState(this); + } + else + { + CertificateTypes = (PropertyState)replacement; + } + } + } + + instance = CertificateTypes; + break; + } + + case Opc.Ua.BrowseNames.CertificateExpired: + { + if (createOrReplace) + { + if (CertificateExpired == null) + { + if (replacement == null) + { + CertificateExpired = new CertificateExpirationAlarmState(this); + } + else + { + CertificateExpired = (CertificateExpirationAlarmState)replacement; + } + } + } + + instance = CertificateExpired; + break; + } + + case Opc.Ua.BrowseNames.TrustListOutOfDate: + { + if (createOrReplace) + { + if (TrustListOutOfDate == null) + { + if (replacement == null) + { + TrustListOutOfDate = new TrustListOutOfDateAlarmState(this); + } + else + { + TrustListOutOfDate = (TrustListOutOfDateAlarmState)replacement; + } + } + } + + instance = TrustListOutOfDate; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private TrustListState m_trustList; + private PropertyState m_certificateTypes; + private CertificateExpirationAlarmState m_certificateExpired; + private TrustListOutOfDateAlarmState m_trustListOutOfDate; + #endregion + } + #endif + #endregion + + #region CertificateGroupFolderState Class + #if (!OPCUA_EXCLUDE_CertificateGroupFolderState) + /// + /// Stores an instance of the CertificateGroupFolderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateGroupFolderState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateGroupFolderState(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(Opc.Ua.ObjectTypes.CertificateGroupFolderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (DefaultHttpsGroup != null) + { + DefaultHttpsGroup.Initialize(context, DefaultHttpsGroup_InitializationString); + } + + if (DefaultUserTokenGroup != null) + { + DefaultUserTokenGroup.Initialize(context, DefaultUserTokenGroup_InitializationString); + } + } + + #region Initialization String + private const string DefaultHttpsGroup_InitializationString = + "//////////8EYIAKAQAAAAAAEQAAAERlZmF1bHRIdHRwc0dyb3VwAQAYNgAvAQALMRg2AAD/////AgAA" + + "AARggAoBAAAAAAAJAAAAVHJ1c3RMaXN0AQAZNgAvAQDqMBk2AAD/////DAAAABVgiQoCAAAAAAAEAAAA" + + "U2l6ZQEAGjYALgBEGjYAAAAJ/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFdyaXRhYmxlAQAbNgAu" + + "AEQbNgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAVXNlcldyaXRhYmxlAQAcNgAuAEQcNgAA" + + "AAH/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAT3BlbkNvdW50AQAdNgAuAEQdNgAAAAX/////AQH/" + + "////AAAAAARhggoEAAAAAAAEAAAAT3BlbgEAHzYALwEAPC0fNgAAAQH/////AgAAABdgqQoCAAAAAAAO" + + "AAAASW5wdXRBcmd1bWVudHMBACA2AC4ARCA2AACWAQAAAAEAKgEBEwAAAAQAAABNb2RlAAP/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAh" + + "NgAuAEQhNgAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAENsb3NlAQAiNgAvAQA/LSI2AAABAf////8BAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAIzYALgBEIzYAAJYBAAAAAQAqAQEZAAAACgAAAEZpbGVI" + + "YW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAQAAABSZWFk" + + "AQAkNgAvAQBBLSQ2AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAJTYALgBE" + + "JTYAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFQAAAAYAAABMZW5n" + + "dGgABv////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRB" + + "cmd1bWVudHMBACY2AC4ARCY2AACWAQAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAV3JpdGUBACc2AC8BAEQtJzYAAAEB/////wEA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAoNgAuAEQoNgAAlgIAAAABACoBARkAAAAKAAAA" + + "RmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQETAAAABAAAAERhdGEAD/////8AAAAAAAEAKAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABHZXRQb3NpdGlvbgEAKTYALwEARi0pNgAAAQH/////" + + "AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACo2AC4ARCo2AACWAQAAAAEAKgEBGQAAAAoA" + + "AABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAP" + + "AAAAT3V0cHV0QXJndW1lbnRzAQArNgAuAEQrNgAAlgEAAAABACoBARcAAAAIAAAAUG9zaXRpb24ACf//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABTZXRQb3NpdGlvbgEA" + + "LDYALwEASS0sNgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAC02AC4ARC02" + + "AACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARcAAAAIAAAAUG9zaXRp" + + "b24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAA4AAABMYXN0VXBk" + + "YXRlVGltZQEALjYALgBELjYAAAEAJgH/////AQH/////AAAAAARhggoEAAAAAAANAAAAT3BlbldpdGhN" + + "YXNrcwEALzYALwEA/zAvNgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBADA2" + + "AC4ARDA2AACWAQAAAAEAKgEBFAAAAAUAAABNYXNrcwAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAMTYALgBEMTYAAJYBAAAAAQAqAQEZ" + + "AAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CJCgIA" + + "AAAAABAAAABDZXJ0aWZpY2F0ZVR5cGVzAQA5NgAuAEQ5NgAAABEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string DefaultUserTokenGroup_InitializationString = + "//////////8EYIAKAQAAAAAAFQAAAERlZmF1bHRVc2VyVG9rZW5Hcm91cAEAOjYALwEACzE6NgAA////" + + "/wIAAAAEYIAKAQAAAAAACQAAAFRydXN0TGlzdAEAOzYALwEA6jA7NgAA/////wwAAAAVYIkKAgAAAAAA" + + "BAAAAFNpemUBADw2AC4ARDw2AAAACf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABXcml0YWJsZQEA" + + "PTYALgBEPTYAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAFVzZXJXcml0YWJsZQEAPjYALgBE" + + "PjYAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAE9wZW5Db3VudAEAPzYALgBEPzYAAAAF////" + + "/wEB/////wAAAAAEYYIKBAAAAAAABAAAAE9wZW4BAEE2AC8BADwtQTYAAAEB/////wIAAAAXYKkKAgAA" + + "AAAADgAAAElucHV0QXJndW1lbnRzAQBCNgAuAERCNgAAlgEAAAABACoBARMAAAAEAAAATW9kZQAD////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50" + + "cwEAQzYALgBEQzYAAJYBAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABDbG9zZQEARDYALwEAPy1ENgAAAQH/////AQAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAEU2AC4AREU2AACWAQAAAAEAKgEBGQAAAAoAAABG" + + "aWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAEAAAA" + + "UmVhZAEARjYALwEAQS1GNgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAEc2" + + "AC4AREc2AACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARUAAAAGAAAA" + + "TGVuZ3RoAAb/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0" + + "cHV0QXJndW1lbnRzAQBINgAuAERINgAAlgEAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAFdyaXRlAQBJNgAvAQBELUk2AAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEASjYALgBESjYAAJYCAAAAAQAqAQEZAAAA" + + "CgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAALAAAAR2V0UG9zaXRpb24BAEs2AC8BAEYtSzYAAAEB" + + "/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBMNgAuAERMNgAAlgEAAAABACoBARkA" + + "AAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAA" + + "AAAADwAAAE91dHB1dEFyZ3VtZW50cwEATTYALgBETTYAAJYBAAAAAQAqAQEXAAAACAAAAFBvc2l0aW9u" + + "AAn/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAALAAAAU2V0UG9zaXRp" + + "b24BAE42AC8BAEktTjYAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBPNgAu" + + "AERPNgAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQEXAAAACAAAAFBv" + + "c2l0aW9uAAn/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAOAAAATGFz" + + "dFVwZGF0ZVRpbWUBAFA2AC4ARFA2AAABACYB/////wEB/////wAAAAAEYYIKBAAAAAAADQAAAE9wZW5X" + + "aXRoTWFza3MBAFE2AC8BAP8wUTYAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRz" + + "AQBSNgAuAERSNgAAlgEAAAABACoBARQAAAAFAAAATWFza3MAB/////8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAFM2AC4ARFM2AACWAQAAAAEA" + + "KgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdg" + + "iQoCAAAAAAAQAAAAQ2VydGlmaWNhdGVUeXBlcwEAWzYALgBEWzYAAAARAQAAAAEAAAAAAAAAAQH/////" + + "AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAIgAAAENlcnRpZmljYXRlR3JvdXBGb2xkZXJUeXBlSW5zdGFuY2UBAPU1" + + "AQD1NfU1AAD/////AwAAAARggAoBAAAAAAAXAAAARGVmYXVsdEFwcGxpY2F0aW9uR3JvdXABAPY1AC8B" + + "AAsx9jUAAP////8CAAAABGCACgEAAAAAAAkAAABUcnVzdExpc3QBAPc1AC8BAOow9zUAAP////8MAAAA" + + "FWCJCgIAAAAAAAQAAABTaXplAQD4NQAuAET4NQAAAAn/////AQH/////AAAAABVgiQoCAAAAAAAIAAAA" + + "V3JpdGFibGUBAPk1AC4ARPk1AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABVc2VyV3JpdGFi" + + "bGUBAPo1AC4ARPo1AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABPcGVuQ291bnQBAPs1AC4A" + + "RPs1AAAABf////8BAf////8AAAAABGGCCgQAAAAAAAQAAABPcGVuAQD9NQAvAQA8Lf01AAABAf////8C" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA/jUALgBE/jUAAJYBAAAAAQAqAQETAAAABAAA" + + "AE1vZGUAA/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRw" + + "dXRBcmd1bWVudHMBAP81AC4ARP81AACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAQ2xvc2UBAAA2AC8BAD8tADYA" + + "AAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQABNgAuAEQBNgAAlgEAAAABACoB" + + "ARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIK" + + "BAAAAAAABAAAAFJlYWQBAAI2AC8BAEEtAjYAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJn" + + "dW1lbnRzAQADNgAuAEQDNgAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAq" + + "AQEVAAAABgAAAExlbmd0aAAG/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAA" + + "AAAADwAAAE91dHB1dEFyZ3VtZW50cwEABDYALgBEBDYAAJYBAAAAAQAqAQETAAAABAAAAERhdGEAD///" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABXcml0ZQEABTYALwEA" + + "RC0FNgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAAY2AC4ARAY2AACWAgAA" + + "AAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARMAAAAEAAAARGF0YQAP/////wAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAEdldFBvc2l0aW9uAQAHNgAv" + + "AQBGLQc2AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEACDYALgBECDYAAJYB" + + "AAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAAk2AC4ARAk2AACWAQAAAAEAKgEBFwAAAAgA" + + "AABQb3NpdGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAA" + + "AFNldFBvc2l0aW9uAQAKNgAvAQBJLQo2AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3Vt" + + "ZW50cwEACzYALgBECzYAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEB" + + "FwAAAAgAAABQb3NpdGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAA" + + "AAAADgAAAExhc3RVcGRhdGVUaW1lAQAMNgAuAEQMNgAAAQAmAf////8BAf////8AAAAABGGCCgQAAAAA" + + "AA0AAABPcGVuV2l0aE1hc2tzAQANNgAvAQD/MA02AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1" + + "dEFyZ3VtZW50cwEADjYALgBEDjYAAJYBAAAAAQAqAQEUAAAABQAAAE1hc2tzAAf/////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAPNgAuAEQP" + + "NgAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAAXYIkKAgAAAAAAEAAAAENlcnRpZmljYXRlVHlwZXMBABc2AC4ARBc2AAAAEQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAEYIAKAQAAAAAAEQAAAERlZmF1bHRIdHRwc0dyb3VwAQAYNgAvAQALMRg2AAD/" + + "////AgAAAARggAoBAAAAAAAJAAAAVHJ1c3RMaXN0AQAZNgAvAQDqMBk2AAD/////DAAAABVgiQoCAAAA" + + "AAAEAAAAU2l6ZQEAGjYALgBEGjYAAAAJ/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFdyaXRhYmxl" + + "AQAbNgAuAEQbNgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAVXNlcldyaXRhYmxlAQAcNgAu" + + "AEQcNgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAJAAAAT3BlbkNvdW50AQAdNgAuAEQdNgAAAAX/" + + "////AQH/////AAAAAARhggoEAAAAAAAEAAAAT3BlbgEAHzYALwEAPC0fNgAAAQH/////AgAAABdgqQoC" + + "AAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACA2AC4ARCA2AACWAQAAAAEAKgEBEwAAAAQAAABNb2RlAAP/" + + "////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1l" + + "bnRzAQAhNgAuAEQhNgAAlgEAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEA" + + "AAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAENsb3NlAQAiNgAvAQA/LSI2AAABAf////8B" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAIzYALgBEIzYAAJYBAAAAAQAqAQEZAAAACgAA" + + "AEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAQA" + + "AABSZWFkAQAkNgAvAQBBLSQ2AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA" + + "JTYALgBEJTYAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFQAAAAYA" + + "AABMZW5ndGgABv////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABP" + + "dXRwdXRBcmd1bWVudHMBACY2AC4ARCY2AACWAQAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAV3JpdGUBACc2AC8BAEQtJzYAAAEB" + + "/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAoNgAuAEQoNgAAlgIAAAABACoBARkA" + + "AAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQETAAAABAAAAERhdGEAD/////8AAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABHZXRQb3NpdGlvbgEAKTYALwEARi0pNgAA" + + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACo2AC4ARCo2AACWAQAAAAEAKgEB" + + "GQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoC" + + "AAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQArNgAuAEQrNgAAlgEAAAABACoBARcAAAAIAAAAUG9zaXRp" + + "b24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAsAAABTZXRQb3Np" + + "dGlvbgEALDYALwEASS0sNgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAC02" + + "AC4ARC02AACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARcAAAAIAAAA" + + "UG9zaXRpb24ACf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAA4AAABM" + + "YXN0VXBkYXRlVGltZQEALjYALgBELjYAAAEAJgH/////AQH/////AAAAAARhggoEAAAAAAANAAAAT3Bl" + + "bldpdGhNYXNrcwEALzYALwEA/zAvNgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBADA2AC4ARDA2AACWAQAAAAEAKgEBFAAAAAUAAABNYXNrcwAH/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAMTYALgBEMTYAAJYBAAAA" + + "AQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "F2CJCgIAAAAAABAAAABDZXJ0aWZpY2F0ZVR5cGVzAQA5NgAuAEQ5NgAAABEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGCACgEAAAAAABUAAABEZWZhdWx0VXNlclRva2VuR3JvdXABADo2AC8BAAsxOjYAAP////8C" + + "AAAABGCACgEAAAAAAAkAAABUcnVzdExpc3QBADs2AC8BAOowOzYAAP////8MAAAAFWCJCgIAAAAAAAQA" + + "AABTaXplAQA8NgAuAEQ8NgAAAAn/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAV3JpdGFibGUBAD02" + + "AC4ARD02AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABVc2VyV3JpdGFibGUBAD42AC4ARD42" + + "AAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABPcGVuQ291bnQBAD82AC4ARD82AAAABf////8B" + + "Af////8AAAAABGGCCgQAAAAAAAQAAABPcGVuAQBBNgAvAQA8LUE2AAABAf////8CAAAAF2CpCgIAAAAA" + + "AA4AAABJbnB1dEFyZ3VtZW50cwEAQjYALgBEQjYAAJYBAAAAAQAqAQETAAAABAAAAE1vZGUAA/////8A" + + "AAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMB" + + "AEM2AC4AREM2AACWAQAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAAARhggoEAAAAAAAFAAAAQ2xvc2UBAEQ2AC8BAD8tRDYAAAEB/////wEAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBFNgAuAERFNgAAlgEAAAABACoBARkAAAAKAAAARmls" + + "ZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABAAAAFJl" + + "YWQBAEY2AC8BAEEtRjYAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBHNgAu" + + "AERHNgAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQEVAAAABgAAAExl" + + "bmd0aAAG/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1" + + "dEFyZ3VtZW50cwEASDYALgBESDYAAJYBAAAAAQAqAQETAAAABAAAAERhdGEAD/////8AAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABXcml0ZQEASTYALwEARC1JNgAAAQH/////" + + "AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAEo2AC4AREo2AACWAgAAAAEAKgEBGQAAAAoA" + + "AABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAEdldFBvc2l0aW9uAQBLNgAvAQBGLUs2AAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEATDYALgBETDYAAJYBAAAAAQAqAQEZAAAA" + + "CgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAA" + + "AA8AAABPdXRwdXRBcmd1bWVudHMBAE02AC4ARE02AACWAQAAAAEAKgEBFwAAAAgAAABQb3NpdGlvbgAJ" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAFNldFBvc2l0aW9u" + + "AQBONgAvAQBJLU42AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEATzYALgBE" + + "TzYAAJYCAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBFwAAAAgAAABQb3Np" + + "dGlvbgAJ/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAADgAAAExhc3RV" + + "cGRhdGVUaW1lAQBQNgAuAERQNgAAAQAmAf////8BAf////8AAAAABGGCCgQAAAAAAA0AAABPcGVuV2l0" + + "aE1hc2tzAQBRNgAvAQD/MFE2AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA" + + "UjYALgBEUjYAAJYBAAAAAQAqAQEUAAAABQAAAE1hc2tzAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQBTNgAuAERTNgAAlgEAAAABACoB" + + "ARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYIkK" + + "AgAAAAAAEAAAAENlcnRpZmljYXRlVHlwZXMBAFs2AC4ARFs2AAAAEQEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public CertificateGroupState DefaultApplicationGroup + { + get + { + return m_defaultApplicationGroup; + } + + set + { + if (!Object.ReferenceEquals(m_defaultApplicationGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultApplicationGroup = value; + } + } + + /// + public CertificateGroupState DefaultHttpsGroup + { + get + { + return m_defaultHttpsGroup; + } + + set + { + if (!Object.ReferenceEquals(m_defaultHttpsGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultHttpsGroup = value; + } + } + + /// + public CertificateGroupState DefaultUserTokenGroup + { + get + { + return m_defaultUserTokenGroup; + } + + set + { + if (!Object.ReferenceEquals(m_defaultUserTokenGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_defaultUserTokenGroup = 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_defaultApplicationGroup != null) + { + children.Add(m_defaultApplicationGroup); + } + + if (m_defaultHttpsGroup != null) + { + children.Add(m_defaultHttpsGroup); + } + + if (m_defaultUserTokenGroup != null) + { + children.Add(m_defaultUserTokenGroup); + } + + 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 Opc.Ua.BrowseNames.DefaultApplicationGroup: + { + if (createOrReplace) + { + if (DefaultApplicationGroup == null) + { + if (replacement == null) + { + DefaultApplicationGroup = new CertificateGroupState(this); + } + else + { + DefaultApplicationGroup = (CertificateGroupState)replacement; + } + } + } + + instance = DefaultApplicationGroup; + break; + } + + case Opc.Ua.BrowseNames.DefaultHttpsGroup: + { + if (createOrReplace) + { + if (DefaultHttpsGroup == null) + { + if (replacement == null) + { + DefaultHttpsGroup = new CertificateGroupState(this); + } + else + { + DefaultHttpsGroup = (CertificateGroupState)replacement; + } + } + } + + instance = DefaultHttpsGroup; + break; + } + + case Opc.Ua.BrowseNames.DefaultUserTokenGroup: + { + if (createOrReplace) + { + if (DefaultUserTokenGroup == null) + { + if (replacement == null) + { + DefaultUserTokenGroup = new CertificateGroupState(this); + } + else + { + DefaultUserTokenGroup = (CertificateGroupState)replacement; + } + } + } + + instance = DefaultUserTokenGroup; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private CertificateGroupState m_defaultApplicationGroup; + private CertificateGroupState m_defaultHttpsGroup; + private CertificateGroupState m_defaultUserTokenGroup; + #endregion + } + #endif + #endregion + + #region CertificateState Class + #if (!OPCUA_EXCLUDE_CertificateState) + /// + /// Stores an instance of the CertificateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateState(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(Opc.Ua.ObjectTypes.CertificateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFwAAAENlcnRpZmljYXRlVHlwZUluc3RhbmNlAQAMMQEADDEMMQAA////" + + "/wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ApplicationCertificateState Class + #if (!OPCUA_EXCLUDE_ApplicationCertificateState) + /// + /// Stores an instance of the ApplicationCertificateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ApplicationCertificateState : CertificateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ApplicationCertificateState(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(Opc.Ua.ObjectTypes.ApplicationCertificateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAEFwcGxpY2F0aW9uQ2VydGlmaWNhdGVUeXBlSW5zdGFuY2UBAA0x" + + "AQANMQ0xAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region HttpsCertificateState Class + #if (!OPCUA_EXCLUDE_HttpsCertificateState) + /// + /// Stores an instance of the HttpsCertificateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class HttpsCertificateState : CertificateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public HttpsCertificateState(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(Opc.Ua.ObjectTypes.HttpsCertificateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHAAAAEh0dHBzQ2VydGlmaWNhdGVUeXBlSW5zdGFuY2UBAA4xAQAOMQ4x" + + "AAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region UserCredentialCertificateState Class + #if (!OPCUA_EXCLUDE_UserCredentialCertificateState) + /// + /// Stores an instance of the UserCredentialCertificateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UserCredentialCertificateState : CertificateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UserCredentialCertificateState(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(Opc.Ua.ObjectTypes.UserCredentialCertificateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAFVzZXJDcmVkZW50aWFsQ2VydGlmaWNhdGVUeXBlSW5zdGFuY2UB" + + "AE07AQBNO007AAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region RsaMinApplicationCertificateState Class + #if (!OPCUA_EXCLUDE_RsaMinApplicationCertificateState) + /// + /// Stores an instance of the RsaMinApplicationCertificateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RsaMinApplicationCertificateState : ApplicationCertificateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RsaMinApplicationCertificateState(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(Opc.Ua.ObjectTypes.RsaMinApplicationCertificateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAFJzYU1pbkFwcGxpY2F0aW9uQ2VydGlmaWNhdGVUeXBlSW5zdGFu" + + "Y2UBAA8xAQAPMQ8xAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region RsaSha256ApplicationCertificateState Class + #if (!OPCUA_EXCLUDE_RsaSha256ApplicationCertificateState) + /// + /// Stores an instance of the RsaSha256ApplicationCertificateType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RsaSha256ApplicationCertificateState : ApplicationCertificateState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RsaSha256ApplicationCertificateState(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(Opc.Ua.ObjectTypes.RsaSha256ApplicationCertificateType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKwAAAFJzYVNoYTI1NkFwcGxpY2F0aW9uQ2VydGlmaWNhdGVUeXBlSW5z" + + "dGFuY2UBABAxAQAQMRAxAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region TrustListUpdatedAuditEventState Class + #if (!OPCUA_EXCLUDE_TrustListUpdatedAuditEventState) + /// + /// Stores an instance of the TrustListUpdatedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TrustListUpdatedAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TrustListUpdatedAuditEventState(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(Opc.Ua.ObjectTypes.TrustListUpdatedAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAFRydXN0TGlzdFVwZGF0ZWRBdWRpdEV2ZW50VHlwZUluc3RhbmNl" + + "AQARMQEAETERMQAA/////w8AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBABIxAC4ARBIxAAAAD/////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBABMxAC4ARBMxAAAAEf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQAUMQAuAEQUMQAAABH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAKAAAAU291cmNlTmFtZQEAFTEALgBEFTEAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRp" + + "bWUBABYxAC4ARBYxAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQAX" + + "MQAuAEQXMQAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQAZMQAuAEQZMQAA" + + "ABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBABoxAC4ARBoxAAAABf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABABsxAC4ARBsxAAABACYB/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAHDEALgBEHDEAAAAB/////wEB/////wAAAAAVYIkKAgAA" + + "AAAACAAAAFNlcnZlcklkAQAdMQAuAEQdMQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xp" + + "ZW50QXVkaXRFbnRyeUlkAQAeMQAuAEQeMQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xp" + + "ZW50VXNlcklkAQAfMQAuAEQfMQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQB" + + "ACAxAC4ARCAxAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAITEA" + + "LgBEITEAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region UpdateCertificateMethodState Class + #if (!OPCUA_EXCLUDE_UpdateCertificateMethodState) + /// + /// Stores an instance of the UpdateCertificateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UpdateCertificateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UpdateCertificateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new UpdateCertificateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGwAAAFVwZGF0ZUNlcnRpZmljYXRlTWV0aG9kVHlwZQEAIjEALwEAIjEi" + + "MQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACMxAC4ARCMxAACWBgAAAAEA" + + "KgEBIQAAABIAAABDZXJ0aWZpY2F0ZUdyb3VwSWQAEf////8AAAAAAAEAKgEBIAAAABEAAABDZXJ0aWZp" + + "Y2F0ZVR5cGVJZAAR/////wAAAAAAAQAqAQEaAAAACwAAAENlcnRpZmljYXRlAA//////AAAAAAABACoB" + + "ASUAAAASAAAASXNzdWVyQ2VydGlmaWNhdGVzAA8BAAAAAQAAAAAAAAAAAQAqAQEfAAAAEAAAAFByaXZh" + + "dGVLZXlGb3JtYXQADP////8AAAAAAAEAKgEBGQAAAAoAAABQcml2YXRlS2V5AA//////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAkMQAuAEQk" + + "MQAAlgEAAAABACoBASMAAAAUAAAAQXBwbHlDaGFuZ2VzUmVxdWlyZWQAAf////8AAAAAAAEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public UpdateCertificateMethodStateMethodCallHandler 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; + + NodeId certificateGroupId = (NodeId)_inputArguments[0]; + NodeId certificateTypeId = (NodeId)_inputArguments[1]; + byte[] certificate = (byte[])_inputArguments[2]; + byte[][] issuerCertificates = (byte[][])_inputArguments[3]; + string privateKeyFormat = (string)_inputArguments[4]; + byte[] privateKey = (byte[])_inputArguments[5]; + + bool applyChangesRequired = (bool)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + certificateGroupId, + certificateTypeId, + certificate, + issuerCertificates, + privateKeyFormat, + privateKey, + ref applyChangesRequired); + } + + _outputArguments[0] = applyChangesRequired; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult UpdateCertificateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId certificateGroupId, + NodeId certificateTypeId, + byte[] certificate, + byte[][] issuerCertificates, + string privateKeyFormat, + byte[] privateKey, + ref bool applyChangesRequired); + #endif + #endregion + + #region CreateSigningRequestMethodState Class + #if (!OPCUA_EXCLUDE_CreateSigningRequestMethodState) + /// + /// Stores an instance of the CreateSigningRequestMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CreateSigningRequestMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CreateSigningRequestMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CreateSigningRequestMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHgAAAENyZWF0ZVNpZ25pbmdSZXF1ZXN0TWV0aG9kVHlwZQEAxTEALwEA" + + "xTHFMQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAMYxAC4ARMYxAACWBQAA" + + "AAEAKgEBIQAAABIAAABDZXJ0aWZpY2F0ZUdyb3VwSWQAEf////8AAAAAAAEAKgEBIAAAABEAAABDZXJ0" + + "aWZpY2F0ZVR5cGVJZAAR/////wAAAAAAAQAqAQEaAAAACwAAAFN1YmplY3ROYW1lAAz/////AAAAAAAB" + + "ACoBASMAAAAUAAAAUmVnZW5lcmF0ZVByaXZhdGVLZXkAAf////8AAAAAAAEAKgEBFAAAAAUAAABOb25j" + + "ZQAP/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFy" + + "Z3VtZW50cwEAxzEALgBExzEAAJYBAAAAAQAqAQEhAAAAEgAAAENlcnRpZmljYXRlUmVxdWVzdAAP////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CreateSigningRequestMethodStateMethodCallHandler 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; + + NodeId certificateGroupId = (NodeId)_inputArguments[0]; + NodeId certificateTypeId = (NodeId)_inputArguments[1]; + string subjectName = (string)_inputArguments[2]; + bool regeneratePrivateKey = (bool)_inputArguments[3]; + byte[] nonce = (byte[])_inputArguments[4]; + + byte[] certificateRequest = (byte[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + certificateGroupId, + certificateTypeId, + subjectName, + regeneratePrivateKey, + nonce, + ref certificateRequest); + } + + _outputArguments[0] = certificateRequest; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CreateSigningRequestMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId certificateGroupId, + NodeId certificateTypeId, + string subjectName, + bool regeneratePrivateKey, + byte[] nonce, + ref byte[] certificateRequest); + #endif + #endregion + + #region GetRejectedListMethodState Class + #if (!OPCUA_EXCLUDE_GetRejectedListMethodState) + /// + /// Stores an instance of the GetRejectedListMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetRejectedListMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetRejectedListMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetRejectedListMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGQAAAEdldFJlamVjdGVkTGlzdE1ldGhvZFR5cGUBAOUxAC8BAOUx5TEA" + + "AAEB/////wEAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA5jEALgBE5jEAAJYBAAAAAQAq" + + "AQEfAAAADAAAAENlcnRpZmljYXRlcwAPAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetRejectedListMethodStateMethodCallHandler 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; + + byte[][] certificates = (byte[][])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + ref certificates); + } + + _outputArguments[0] = certificates; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetRejectedListMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ref byte[][] certificates); + #endif + #endregion + + #region ServerConfigurationState Class + #if (!OPCUA_EXCLUDE_ServerConfigurationState) + /// + /// Stores an instance of the ServerConfigurationType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ServerConfigurationState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ServerConfigurationState(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(Opc.Ua.ObjectTypes.ServerConfigurationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAFNlcnZlckNvbmZpZ3VyYXRpb25UeXBlSW5zdGFuY2UBACUxAQAl" + + "MSUxAAD/////CQAAAARggAoBAAAAAAARAAAAQ2VydGlmaWNhdGVHcm91cHMBAH42AC8BAPU1fjYAAP//" + + "//8BAAAABGCACgEAAAAAABcAAABEZWZhdWx0QXBwbGljYXRpb25Hcm91cAEAfzYALwEACzF/NgAA////" + + "/wIAAAAEYIAKAQAAAAAACQAAAFRydXN0TGlzdAEAgDYALwEA6jCANgAA/////wwAAAAVYIkKAgAAAAAA" + + "BAAAAFNpemUBAIE2AC4ARIE2AAAACf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABXcml0YWJsZQEA" + + "gjYALgBEgjYAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADAAAAFVzZXJXcml0YWJsZQEAgzYALgBE" + + "gzYAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAE9wZW5Db3VudAEAhDYALgBEhDYAAAAF////" + + "/wEB/////wAAAAAEYYIKBAAAAAAABAAAAE9wZW4BAIY2AC8BADwthjYAAAEB/////wIAAAAXYKkKAgAA" + + "AAAADgAAAElucHV0QXJndW1lbnRzAQCHNgAuAESHNgAAlgEAAAABACoBARMAAAAEAAAATW9kZQAD////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50" + + "cwEAiDYALgBEiDYAAJYBAAAAAQAqAQEZAAAACgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAUAAABDbG9zZQEAiTYALwEAPy2JNgAAAQH/////AQAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIo2AC4ARIo2AACWAQAAAAEAKgEBGQAAAAoAAABG" + + "aWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAEAAAA" + + "UmVhZAEAizYALwEAQS2LNgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIw2" + + "AC4ARIw2AACWAgAAAAEAKgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACoBARUAAAAGAAAA" + + "TGVuZ3RoAAb/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0" + + "cHV0QXJndW1lbnRzAQCNNgAuAESNNgAAlgEAAAABACoBARMAAAAEAAAARGF0YQAP/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAABQAAAFdyaXRlAQCONgAvAQBELY42AAABAf//" + + "//8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAjzYALgBEjzYAAJYCAAAAAQAqAQEZAAAA" + + "CgAAAEZpbGVIYW5kbGUAB/////8AAAAAAAEAKgEBEwAAAAQAAABEYXRhAA//////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAALAAAAR2V0UG9zaXRpb24BAJA2AC8BAEYtkDYAAAEB" + + "/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCRNgAuAESRNgAAlgEAAAABACoBARkA" + + "AAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAA" + + "AAAADwAAAE91dHB1dEFyZ3VtZW50cwEAkjYALgBEkjYAAJYBAAAAAQAqAQEXAAAACAAAAFBvc2l0aW9u" + + "AAn/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAALAAAAU2V0UG9zaXRp" + + "b24BAJM2AC8BAEktkzYAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCUNgAu" + + "AESUNgAAlgIAAAABACoBARkAAAAKAAAARmlsZUhhbmRsZQAH/////wAAAAAAAQAqAQEXAAAACAAAAFBv" + + "c2l0aW9uAAn/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAOAAAATGFz" + + "dFVwZGF0ZVRpbWUBAJU2AC4ARJU2AAABACYB/////wEB/////wAAAAAEYYIKBAAAAAAADQAAAE9wZW5X" + + "aXRoTWFza3MBAJY2AC8BAP8wljYAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRz" + + "AQCXNgAuAESXNgAAlgEAAAABACoBARQAAAAFAAAATWFza3MAB/////8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAJg2AC4ARJg2AACWAQAAAAEA" + + "KgEBGQAAAAoAAABGaWxlSGFuZGxlAAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdg" + + "iQoCAAAAAAAQAAAAQ2VydGlmaWNhdGVUeXBlcwEAoDYALgBEoDYAAAARAQAAAAEAAAAAAAAAAQH/////" + + "AAAAABdgiQoCAAAAAAASAAAAU2VydmVyQ2FwYWJpbGl0aWVzAQCkMQAuAESkMQAAAAwBAAAAAQAAAAAA" + + "AAABAf////8AAAAAF2CJCgIAAAAAABoAAABTdXBwb3J0ZWRQcml2YXRlS2V5Rm9ybWF0cwEAJzEALgBE" + + "JzEAAAAMAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAQAAAATWF4VHJ1c3RMaXN0U2l6ZQEA" + + "KDEALgBEKDEAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAE11bHRpY2FzdERuc0VuYWJsZWQB" + + "ACkxAC4ARCkxAAAAAf////8BAf////8AAAAABGGCCgQAAAAAABEAAABVcGRhdGVDZXJ0aWZpY2F0ZQEA" + + "SDEALwEASDFIMQAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAEkxAC4AREkx" + + "AACWBgAAAAEAKgEBIQAAABIAAABDZXJ0aWZpY2F0ZUdyb3VwSWQAEf////8AAAAAAAEAKgEBIAAAABEA" + + "AABDZXJ0aWZpY2F0ZVR5cGVJZAAR/////wAAAAAAAQAqAQEaAAAACwAAAENlcnRpZmljYXRlAA//////" + + "AAAAAAABACoBASUAAAASAAAASXNzdWVyQ2VydGlmaWNhdGVzAA8BAAAAAQAAAAAAAAAAAQAqAQEfAAAA" + + "EAAAAFByaXZhdGVLZXlGb3JtYXQADP////8AAAAAAAEAKgEBGQAAAAoAAABQcml2YXRlS2V5AA//////" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRz" + + "AQBKMQAuAERKMQAAlgEAAAABACoBASMAAAAUAAAAQXBwbHlDaGFuZ2VzUmVxdWlyZWQAAf////8AAAAA" + + "AAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAAwAAABBcHBseUNoYW5nZXMBAL4xAC8B" + + "AL4xvjEAAAEB/////wAAAAAEYYIKBAAAAAAAFAAAAENyZWF0ZVNpZ25pbmdSZXF1ZXN0AQC7MQAvAQC7" + + "MbsxAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAvDEALgBEvDEAAJYFAAAA" + + "AQAqAQEhAAAAEgAAAENlcnRpZmljYXRlR3JvdXBJZAAR/////wAAAAAAAQAqAQEgAAAAEQAAAENlcnRp" + + "ZmljYXRlVHlwZUlkABH/////AAAAAAABACoBARoAAAALAAAAU3ViamVjdE5hbWUADP////8AAAAAAAEA" + + "KgEBIwAAABQAAABSZWdlbmVyYXRlUHJpdmF0ZUtleQAB/////wAAAAAAAQAqAQEUAAAABQAAAE5vbmNl" + + "AA//////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJn" + + "dW1lbnRzAQC9MQAuAES9MQAAlgEAAAABACoBASEAAAASAAAAQ2VydGlmaWNhdGVSZXF1ZXN0AA//////" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAPAAAAR2V0UmVqZWN0ZWRMaXN0" + + "AQDnMQAvAQDnMecxAAABAf////8BAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAOgxAC4A" + + "ROgxAACWAQAAAAEAKgEBHwAAAAwAAABDZXJ0aWZpY2F0ZXMADwEAAAABAAAAAAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public CertificateGroupFolderState CertificateGroups + { + get + { + return m_certificateGroups; + } + + set + { + if (!Object.ReferenceEquals(m_certificateGroups, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateGroups = value; + } + } + + /// + public PropertyState ServerCapabilities + { + get + { + return m_serverCapabilities; + } + + set + { + if (!Object.ReferenceEquals(m_serverCapabilities, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serverCapabilities = value; + } + } + + /// + public PropertyState SupportedPrivateKeyFormats + { + get + { + return m_supportedPrivateKeyFormats; + } + + set + { + if (!Object.ReferenceEquals(m_supportedPrivateKeyFormats, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_supportedPrivateKeyFormats = value; + } + } + + /// + public PropertyState MaxTrustListSize + { + get + { + return m_maxTrustListSize; + } + + set + { + if (!Object.ReferenceEquals(m_maxTrustListSize, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxTrustListSize = value; + } + } + + /// + public PropertyState MulticastDnsEnabled + { + get + { + return m_multicastDnsEnabled; + } + + set + { + if (!Object.ReferenceEquals(m_multicastDnsEnabled, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_multicastDnsEnabled = value; + } + } + + /// + public UpdateCertificateMethodState UpdateCertificate + { + get + { + return m_updateCertificateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_updateCertificateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateCertificateMethod = value; + } + } + + /// + public MethodState ApplyChanges + { + get + { + return m_applyChangesMethod; + } + + set + { + if (!Object.ReferenceEquals(m_applyChangesMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_applyChangesMethod = value; + } + } + + /// + public CreateSigningRequestMethodState CreateSigningRequest + { + get + { + return m_createSigningRequestMethod; + } + + set + { + if (!Object.ReferenceEquals(m_createSigningRequestMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createSigningRequestMethod = value; + } + } + + /// + public GetRejectedListMethodState GetRejectedList + { + get + { + return m_getRejectedListMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getRejectedListMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getRejectedListMethod = 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_certificateGroups != null) + { + children.Add(m_certificateGroups); + } + + if (m_serverCapabilities != null) + { + children.Add(m_serverCapabilities); + } + + if (m_supportedPrivateKeyFormats != null) + { + children.Add(m_supportedPrivateKeyFormats); + } + + if (m_maxTrustListSize != null) + { + children.Add(m_maxTrustListSize); + } + + if (m_multicastDnsEnabled != null) + { + children.Add(m_multicastDnsEnabled); + } + + if (m_updateCertificateMethod != null) + { + children.Add(m_updateCertificateMethod); + } + + if (m_applyChangesMethod != null) + { + children.Add(m_applyChangesMethod); + } + + if (m_createSigningRequestMethod != null) + { + children.Add(m_createSigningRequestMethod); + } + + if (m_getRejectedListMethod != null) + { + children.Add(m_getRejectedListMethod); + } + + 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 Opc.Ua.BrowseNames.CertificateGroups: + { + if (createOrReplace) + { + if (CertificateGroups == null) + { + if (replacement == null) + { + CertificateGroups = new CertificateGroupFolderState(this); + } + else + { + CertificateGroups = (CertificateGroupFolderState)replacement; + } + } + } + + instance = CertificateGroups; + break; + } + + case Opc.Ua.BrowseNames.ServerCapabilities: + { + if (createOrReplace) + { + if (ServerCapabilities == null) + { + if (replacement == null) + { + ServerCapabilities = new PropertyState(this); + } + else + { + ServerCapabilities = (PropertyState)replacement; + } + } + } + + instance = ServerCapabilities; + break; + } + + case Opc.Ua.BrowseNames.SupportedPrivateKeyFormats: + { + if (createOrReplace) + { + if (SupportedPrivateKeyFormats == null) + { + if (replacement == null) + { + SupportedPrivateKeyFormats = new PropertyState(this); + } + else + { + SupportedPrivateKeyFormats = (PropertyState)replacement; + } + } + } + + instance = SupportedPrivateKeyFormats; + break; + } + + case Opc.Ua.BrowseNames.MaxTrustListSize: + { + if (createOrReplace) + { + if (MaxTrustListSize == null) + { + if (replacement == null) + { + MaxTrustListSize = new PropertyState(this); + } + else + { + MaxTrustListSize = (PropertyState)replacement; + } + } + } + + instance = MaxTrustListSize; + break; + } + + case Opc.Ua.BrowseNames.MulticastDnsEnabled: + { + if (createOrReplace) + { + if (MulticastDnsEnabled == null) + { + if (replacement == null) + { + MulticastDnsEnabled = new PropertyState(this); + } + else + { + MulticastDnsEnabled = (PropertyState)replacement; + } + } + } + + instance = MulticastDnsEnabled; + break; + } + + case Opc.Ua.BrowseNames.UpdateCertificate: + { + if (createOrReplace) + { + if (UpdateCertificate == null) + { + if (replacement == null) + { + UpdateCertificate = new UpdateCertificateMethodState(this); + } + else + { + UpdateCertificate = (UpdateCertificateMethodState)replacement; + } + } + } + + instance = UpdateCertificate; + break; + } + + case Opc.Ua.BrowseNames.ApplyChanges: + { + if (createOrReplace) + { + if (ApplyChanges == null) + { + if (replacement == null) + { + ApplyChanges = new MethodState(this); + } + else + { + ApplyChanges = (MethodState)replacement; + } + } + } + + instance = ApplyChanges; + break; + } + + case Opc.Ua.BrowseNames.CreateSigningRequest: + { + if (createOrReplace) + { + if (CreateSigningRequest == null) + { + if (replacement == null) + { + CreateSigningRequest = new CreateSigningRequestMethodState(this); + } + else + { + CreateSigningRequest = (CreateSigningRequestMethodState)replacement; + } + } + } + + instance = CreateSigningRequest; + break; + } + + case Opc.Ua.BrowseNames.GetRejectedList: + { + if (createOrReplace) + { + if (GetRejectedList == null) + { + if (replacement == null) + { + GetRejectedList = new GetRejectedListMethodState(this); + } + else + { + GetRejectedList = (GetRejectedListMethodState)replacement; + } + } + } + + instance = GetRejectedList; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private CertificateGroupFolderState m_certificateGroups; + private PropertyState m_serverCapabilities; + private PropertyState m_supportedPrivateKeyFormats; + private PropertyState m_maxTrustListSize; + private PropertyState m_multicastDnsEnabled; + private UpdateCertificateMethodState m_updateCertificateMethod; + private MethodState m_applyChangesMethod; + private CreateSigningRequestMethodState m_createSigningRequestMethod; + private GetRejectedListMethodState m_getRejectedListMethod; + #endregion + } + #endif + #endregion + + #region CertificateUpdatedAuditEventState Class + #if (!OPCUA_EXCLUDE_CertificateUpdatedAuditEventState) + /// + /// Stores an instance of the CertificateUpdatedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CertificateUpdatedAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CertificateUpdatedAuditEventState(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(Opc.Ua.ObjectTypes.CertificateUpdatedAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAENlcnRpZmljYXRlVXBkYXRlZEF1ZGl0RXZlbnRUeXBlSW5zdGFu" + + "Y2UBAEwxAQBMMUwxAAD/////EQAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEATTEALgBETTEAAAAP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEATjEALgBETjEAAAAR/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAE8xAC4ARE8xAAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAoAAABTb3VyY2VOYW1lAQBQMQAuAERQMQAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAEAAAA" + + "VGltZQEAUTEALgBEUTEAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRpbWUB" + + "AFIxAC4ARFIxAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBAFQxAC4ARFQx" + + "AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEAVTEALgBEVTEAAAAF/////wEB" + + "/////wAAAAAVYIkKAgAAAAAADwAAAEFjdGlvblRpbWVTdGFtcAEAVjEALgBEVjEAAAEAJgH/////AQH/" + + "////AAAAABVgiQoCAAAAAAAGAAAAU3RhdHVzAQBXMQAuAERXMQAAAAH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAIAAAAU2VydmVySWQBAFgxAC4ARFgxAAAADP////8BAf////8AAAAAFWCJCgIAAAAAABIAAABD" + + "bGllbnRBdWRpdEVudHJ5SWQBAFkxAC4ARFkxAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABD" + + "bGllbnRVc2VySWQBAFoxAC4ARFoxAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABNZXRob2RJ" + + "ZAEAWzEALgBEWzEAAAAR/////wEB/////wAAAAAXYIkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBc" + + "MQAuAERcMQAAABgBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAABAAAABDZXJ0aWZpY2F0ZUdy" + + "b3VwAQCnNQAuAESnNQAAABH/////AQH/////AAAAABVgiQoCAAAAAAAPAAAAQ2VydGlmaWNhdGVUeXBl" + + "AQCoNQAuAESoNQAAABH/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState CertificateGroup + { + get + { + return m_certificateGroup; + } + + set + { + if (!Object.ReferenceEquals(m_certificateGroup, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateGroup = value; + } + } + + /// + public PropertyState CertificateType + { + get + { + return m_certificateType; + } + + set + { + if (!Object.ReferenceEquals(m_certificateType, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_certificateType = 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_certificateGroup != null) + { + children.Add(m_certificateGroup); + } + + if (m_certificateType != null) + { + children.Add(m_certificateType); + } + + 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 Opc.Ua.BrowseNames.CertificateGroup: + { + if (createOrReplace) + { + if (CertificateGroup == null) + { + if (replacement == null) + { + CertificateGroup = new PropertyState(this); + } + else + { + CertificateGroup = (PropertyState)replacement; + } + } + } + + instance = CertificateGroup; + break; + } + + case Opc.Ua.BrowseNames.CertificateType: + { + if (createOrReplace) + { + if (CertificateType == null) + { + if (replacement == null) + { + CertificateType = new PropertyState(this); + } + else + { + CertificateType = (PropertyState)replacement; + } + } + } + + instance = CertificateType; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_certificateGroup; + private PropertyState m_certificateType; + #endregion + } + #endif + #endregion + + #region CreateCredentialMethodState Class + #if (!OPCUA_EXCLUDE_CreateCredentialMethodState) + /// + /// Stores an instance of the CreateCredentialMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class CreateCredentialMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public CreateCredentialMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new CreateCredentialMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGgAAAENyZWF0ZUNyZWRlbnRpYWxNZXRob2RUeXBlAQCQOwAvAQCQO5A7" + + "AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAlTsALgBElTsAAJYDAAAAAQAq" + + "AQEaAAAACwAAAFJlc291cmNlVXJpAAz/////AAAAAAABACoBARkAAAAKAAAAUHJvZmlsZVVyaQAM////" + + "/wAAAAAAAQAqAQEfAAAADAAAAEVuZHBvaW50VXJscwAMAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAFdEAC4ARFdEAACWAQAAAAEA" + + "KgEBHwAAABAAAABDcmVkZW50aWFsTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public CreateCredentialMethodStateMethodCallHandler 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; + + string resourceUri = (string)_inputArguments[0]; + string profileUri = (string)_inputArguments[1]; + string[] endpointUrls = (string[])_inputArguments[2]; + + NodeId credentialNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + resourceUri, + profileUri, + endpointUrls, + ref credentialNodeId); + } + + _outputArguments[0] = credentialNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult CreateCredentialMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string resourceUri, + string profileUri, + string[] endpointUrls, + ref NodeId credentialNodeId); + #endif + #endregion + + #region KeyCredentialConfigurationFolderState Class + #if (!OPCUA_EXCLUDE_KeyCredentialConfigurationFolderState) + /// + /// Stores an instance of the KeyCredentialConfigurationFolderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialConfigurationFolderState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialConfigurationFolderState(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(Opc.Ua.ObjectTypes.KeyCredentialConfigurationFolderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (CreateCredential != null) + { + CreateCredential.Initialize(context, CreateCredential_InitializationString); + } + } + + #region Initialization String + private const string CreateCredential_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAENyZWF0ZUNyZWRlbnRpYWwBAHJEAC8BAHJEckQAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBzRAAuAERzRAAAlgMAAAABACoBARoAAAALAAAA" + + "UmVzb3VyY2VVcmkADP////8AAAAAAAEAKgEBGQAAAAoAAABQcm9maWxlVXJpAAz/////AAAAAAABACoB" + + "AR8AAAAMAAAARW5kcG9pbnRVcmxzAAwBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAdEQALgBEdEQAAJYBAAAAAQAqAQEfAAAAEAAA" + + "AENyZWRlbnRpYWxOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAALAAAAEtleUNyZWRlbnRpYWxDb25maWd1cmF0aW9uRm9sZGVyVHlwZUlu" + + "c3RhbmNlAQBYRAEAWERYRAAA/////wEAAAAEYYIKBAAAAAAAEAAAAENyZWF0ZUNyZWRlbnRpYWwBAHJE" + + "AC8BAHJEckQAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBzRAAuAERzRAAA" + + "lgMAAAABACoBARoAAAALAAAAUmVzb3VyY2VVcmkADP////8AAAAAAAEAKgEBGQAAAAoAAABQcm9maWxl" + + "VXJpAAz/////AAAAAAABACoBAR8AAAAMAAAARW5kcG9pbnRVcmxzAAwBAAAAAQAAAAAAAAAAAQAoAQEA" + + "AAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAdEQALgBEdEQA" + + "AJYBAAAAAQAqAQEfAAAAEAAAAENyZWRlbnRpYWxOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public CreateCredentialMethodState CreateCredential + { + get + { + return m_createCredentialMethod; + } + + set + { + if (!Object.ReferenceEquals(m_createCredentialMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createCredentialMethod = 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_createCredentialMethod != null) + { + children.Add(m_createCredentialMethod); + } + + 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 Opc.Ua.BrowseNames.CreateCredential: + { + if (createOrReplace) + { + if (CreateCredential == null) + { + if (replacement == null) + { + CreateCredential = new CreateCredentialMethodState(this); + } + else + { + CreateCredential = (CreateCredentialMethodState)replacement; + } + } + } + + instance = CreateCredential; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private CreateCredentialMethodState m_createCredentialMethod; + #endregion + } + #endif + #endregion + + #region KeyCredentialConfigurationState Class + #if (!OPCUA_EXCLUDE_KeyCredentialConfigurationState) + /// + /// Stores an instance of the KeyCredentialConfigurationType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialConfigurationState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialConfigurationState(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(Opc.Ua.ObjectTypes.KeyCredentialConfigurationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (EndpointUrls != null) + { + EndpointUrls.Initialize(context, EndpointUrls_InitializationString); + } + + if (ServiceStatus != null) + { + ServiceStatus.Initialize(context, ServiceStatus_InitializationString); + } + + if (UpdateCredential != null) + { + UpdateCredential.Initialize(context, UpdateCredential_InitializationString); + } + + if (DeleteCredential != null) + { + DeleteCredential.Initialize(context, DeleteCredential_InitializationString); + } + } + + #region Initialization String + private const string EndpointUrls_InitializationString = + "//////////8XYIkKAgAAAAAADAAAAEVuZHBvaW50VXJscwEAVEYALgBEVEYAAAAMAQAAAAEAAAAAAAAA" + + "AQH/////AAAAAA=="; + + private const string ServiceStatus_InitializationString = + "//////////8VYIkKAgAAAAAADQAAAFNlcnZpY2VTdGF0dXMBAFVGAC4ARFVGAAAAE/////8BAf////8A" + + "AAAA"; + + private const string GetEncryptingKey_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAEdldEVuY3J5cHRpbmdLZXkBAH5EAC8BAH5EfkQAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQB/RAAuAER/RAAAlgIAAAABACoBARsAAAAMAAAA" + + "Q3JlZGVudGlhbElkAAz/////AAAAAAABACoBASkAAAAaAAAAUmVxdWVzdGVkU2VjdXJpdHlQb2xpY3lV" + + "cmkADP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRB" + + "cmd1bWVudHMBAIBEAC4ARIBEAACWAgAAAAEAKgEBGAAAAAkAAABQdWJsaWNLZXkAD/////8AAAAAAAEA" + + "KgEBJwAAABgAAABSZXZpc2VkU2VjdXJpdHlQb2xpY3lVcmkAEf////8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAA"; + + private const string UpdateCredential_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAFVwZGF0ZUNyZWRlbnRpYWwBAFZGAC8BAFZGVkYAAAEB/////wEA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBXRgAuAERXRgAAlgQAAAABACoBARsAAAAMAAAA" + + "Q3JlZGVudGlhbElkAAz/////AAAAAAABACoBAR8AAAAQAAAAQ3JlZGVudGlhbFNlY3JldAAP/////wAA" + + "AAAAAQAqAQEkAAAAFQAAAENlcnRpZmljYXRlVGh1bWJwcmludAAM/////wAAAAAAAQAqAQEgAAAAEQAA" + + "AFNlY3VyaXR5UG9saWN5VXJpAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string DeleteCredential_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAERlbGV0ZUNyZWRlbnRpYWwBAFhGAC8BAFhGWEYAAAEB/////wAA" + + "AAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAJgAAAEtleUNyZWRlbnRpYWxDb25maWd1cmF0aW9uVHlwZUluc3RhbmNl" + + "AQBRRgEAUUZRRgAA/////wcAAAAVYIkKAgAAAAAACwAAAFJlc291cmNlVXJpAQCVRgAuAESVRgAAAAz/" + + "////AQH/////AAAAABVgiQoCAAAAAAAKAAAAUHJvZmlsZVVyaQEA9UYALgBE9UYAAAAM/////wEB////" + + "/wAAAAAXYIkKAgAAAAAADAAAAEVuZHBvaW50VXJscwEAVEYALgBEVEYAAAAMAQAAAAEAAAAAAAAAAQH/" + + "////AAAAABVgiQoCAAAAAAANAAAAU2VydmljZVN0YXR1cwEAVUYALgBEVUYAAAAT/////wEB/////wAA" + + "AAAEYYIKBAAAAAAAEAAAAEdldEVuY3J5cHRpbmdLZXkBAH5EAC8BAH5EfkQAAAEB/////wIAAAAXYKkK" + + "AgAAAAAADgAAAElucHV0QXJndW1lbnRzAQB/RAAuAER/RAAAlgIAAAABACoBARsAAAAMAAAAQ3JlZGVu" + + "dGlhbElkAAz/////AAAAAAABACoBASkAAAAaAAAAUmVxdWVzdGVkU2VjdXJpdHlQb2xpY3lVcmkADP//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVu" + + "dHMBAIBEAC4ARIBEAACWAgAAAAEAKgEBGAAAAAkAAABQdWJsaWNLZXkAD/////8AAAAAAAEAKgEBJwAA" + + "ABgAAABSZXZpc2VkU2VjdXJpdHlQb2xpY3lVcmkAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGGCCgQAAAAAABAAAABVcGRhdGVDcmVkZW50aWFsAQBWRgAvAQBWRlZGAAABAf////8BAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAV0YALgBEV0YAAJYEAAAAAQAqAQEbAAAADAAAAENy" + + "ZWRlbnRpYWxJZAAM/////wAAAAAAAQAqAQEfAAAAEAAAAENyZWRlbnRpYWxTZWNyZXQAD/////8AAAAA" + + "AAEAKgEBJAAAABUAAABDZXJ0aWZpY2F0ZVRodW1icHJpbnQADP////8AAAAAAAEAKgEBIAAAABEAAABT" + + "ZWN1cml0eVBvbGljeVVyaQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAA" + + "AAAAEAAAAERlbGV0ZUNyZWRlbnRpYWwBAFhGAC8BAFhGWEYAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = value; + } + } + + /// + public PropertyState ProfileUri + { + get + { + return m_profileUri; + } + + set + { + if (!Object.ReferenceEquals(m_profileUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_profileUri = value; + } + } + + /// + public PropertyState EndpointUrls + { + get + { + return m_endpointUrls; + } + + set + { + if (!Object.ReferenceEquals(m_endpointUrls, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_endpointUrls = value; + } + } + + /// + public PropertyState ServiceStatus + { + get + { + return m_serviceStatus; + } + + set + { + if (!Object.ReferenceEquals(m_serviceStatus, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serviceStatus = value; + } + } + + /// + public KeyCredentialUpdateMethodState UpdateCredential + { + get + { + return m_updateCredentialMethod; + } + + set + { + if (!Object.ReferenceEquals(m_updateCredentialMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_updateCredentialMethod = value; + } + } + + /// + public MethodState DeleteCredential + { + get + { + return m_deleteCredentialMethod; + } + + set + { + if (!Object.ReferenceEquals(m_deleteCredentialMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_deleteCredentialMethod = 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_resourceUri != null) + { + children.Add(m_resourceUri); + } + + if (m_profileUri != null) + { + children.Add(m_profileUri); + } + + if (m_endpointUrls != null) + { + children.Add(m_endpointUrls); + } + + if (m_serviceStatus != null) + { + children.Add(m_serviceStatus); + } + + if (m_updateCredentialMethod != null) + { + children.Add(m_updateCredentialMethod); + } + + if (m_deleteCredentialMethod != null) + { + children.Add(m_deleteCredentialMethod); + } + + 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 Opc.Ua.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + + case Opc.Ua.BrowseNames.ProfileUri: + { + if (createOrReplace) + { + if (ProfileUri == null) + { + if (replacement == null) + { + ProfileUri = new PropertyState(this); + } + else + { + ProfileUri = (PropertyState)replacement; + } + } + } + + instance = ProfileUri; + break; + } + + case Opc.Ua.BrowseNames.EndpointUrls: + { + if (createOrReplace) + { + if (EndpointUrls == null) + { + if (replacement == null) + { + EndpointUrls = new PropertyState(this); + } + else + { + EndpointUrls = (PropertyState)replacement; + } + } + } + + instance = EndpointUrls; + break; + } + + case Opc.Ua.BrowseNames.ServiceStatus: + { + if (createOrReplace) + { + if (ServiceStatus == null) + { + if (replacement == null) + { + ServiceStatus = new PropertyState(this); + } + else + { + ServiceStatus = (PropertyState)replacement; + } + } + } + + instance = ServiceStatus; + break; + } + + case Opc.Ua.BrowseNames.UpdateCredential: + { + if (createOrReplace) + { + if (UpdateCredential == null) + { + if (replacement == null) + { + UpdateCredential = new KeyCredentialUpdateMethodState(this); + } + else + { + UpdateCredential = (KeyCredentialUpdateMethodState)replacement; + } + } + } + + instance = UpdateCredential; + break; + } + + case Opc.Ua.BrowseNames.DeleteCredential: + { + if (createOrReplace) + { + if (DeleteCredential == null) + { + if (replacement == null) + { + DeleteCredential = new MethodState(this); + } + else + { + DeleteCredential = (MethodState)replacement; + } + } + } + + instance = DeleteCredential; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_resourceUri; + private PropertyState m_profileUri; + private PropertyState m_endpointUrls; + private PropertyState m_serviceStatus; + private KeyCredentialUpdateMethodState m_updateCredentialMethod; + private MethodState m_deleteCredentialMethod; + #endregion + } + #endif + #endregion + + #region KeyCredentialUpdateMethodState Class + #if (!OPCUA_EXCLUDE_KeyCredentialUpdateMethodState) + /// + /// Stores an instance of the KeyCredentialUpdateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialUpdateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialUpdateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new KeyCredentialUpdateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHQAAAEtleUNyZWRlbnRpYWxVcGRhdGVNZXRob2RUeXBlAQBZRgAvAQBZ" + + "RllGAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAWkYALgBEWkYAAJYEAAAA" + + "AQAqAQEbAAAADAAAAENyZWRlbnRpYWxJZAAM/////wAAAAAAAQAqAQEfAAAAEAAAAENyZWRlbnRpYWxT" + + "ZWNyZXQAD/////8AAAAAAAEAKgEBJAAAABUAAABDZXJ0aWZpY2F0ZVRodW1icHJpbnQADP////8AAAAA" + + "AAEAKgEBIAAAABEAAABTZWN1cml0eVBvbGljeVVyaQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public KeyCredentialUpdateMethodStateMethodCallHandler 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; + + string credentialId = (string)_inputArguments[0]; + byte[] credentialSecret = (byte[])_inputArguments[1]; + string certificateThumbprint = (string)_inputArguments[2]; + string securityPolicyUri = (string)_inputArguments[3]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + credentialId, + credentialSecret, + certificateThumbprint, + securityPolicyUri); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult KeyCredentialUpdateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string credentialId, + byte[] credentialSecret, + string certificateThumbprint, + string securityPolicyUri); + #endif + #endregion + + #region KeyCredentialAuditEventState Class + #if (!OPCUA_EXCLUDE_KeyCredentialAuditEventState) + /// + /// Stores an instance of the KeyCredentialAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialAuditEventState : AuditUpdateMethodEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialAuditEventState(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(Opc.Ua.ObjectTypes.KeyCredentialAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAEtleUNyZWRlbnRpYWxBdWRpdEV2ZW50VHlwZUluc3RhbmNlAQBb" + + "RgEAW0ZbRgAA/////xAAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAFxGAC4ARFxGAAAAD/////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAF1GAC4ARF1GAAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOb2RlAQBeRgAuAEReRgAAABH/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAU291cmNlTmFtZQEAX0YALgBEX0YAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUB" + + "AGBGAC4ARGBGAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQBhRgAu" + + "AERhRgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQBjRgAuAERjRgAAABX/" + + "////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAGRGAC4ARGRGAAAABf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA8AAABBY3Rpb25UaW1lU3RhbXABAGVGAC4ARGVGAAABACYB/////wEB/////wAA" + + "AAAVYIkKAgAAAAAABgAAAFN0YXR1cwEAZkYALgBEZkYAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "CAAAAFNlcnZlcklkAQBnRgAuAERnRgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAQ2xpZW50" + + "QXVkaXRFbnRyeUlkAQBoRgAuAERoRgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAQ2xpZW50" + + "VXNlcklkAQBpRgAuAERpRgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAIAAAATWV0aG9kSWQBAGpG" + + "AC4ARGpGAAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAa0YALgBE" + + "a0YAAAAYAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAUmVzb3VyY2VVcmkBAGxGAC4A" + + "RGxGAAAADP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = 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_resourceUri != null) + { + children.Add(m_resourceUri); + } + + 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 Opc.Ua.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_resourceUri; + #endregion + } + #endif + #endregion + + #region KeyCredentialUpdatedAuditEventState Class + #if (!OPCUA_EXCLUDE_KeyCredentialUpdatedAuditEventState) + /// + /// Stores an instance of the KeyCredentialUpdatedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialUpdatedAuditEventState : KeyCredentialAuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialUpdatedAuditEventState(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(Opc.Ua.ObjectTypes.KeyCredentialUpdatedAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAEtleUNyZWRlbnRpYWxVcGRhdGVkQXVkaXRFdmVudFR5cGVJbnN0" + + "YW5jZQEAbUYBAG1GbUYAAP////8QAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQBuRgAuAERuRgAAAA//" + + "////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQBvRgAuAERvRgAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAcEYALgBEcEYAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5hbWUBAHFGAC4ARHFGAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQA" + + "AABUaW1lAQByRgAuAERyRgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGlt" + + "ZQEAc0YALgBEc0YAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAdUYALgBE" + + "dUYAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQB2RgAuAER2RgAAAAX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQB3RgAuAER3RgAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAHhGAC4ARHhGAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAgAAABTZXJ2ZXJJZAEAeUYALgBEeUYAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENsaWVudEF1ZGl0RW50cnlJZAEAekYALgBEekYAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAA" + + "AENsaWVudFVzZXJJZAEAe0YALgBEe0YAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhv" + + "ZElkAQB8RgAuAER8RgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "AH1GAC4ARH1GAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlc291cmNlVXJp" + + "AQB+RgAuAER+RgAAAAz/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region KeyCredentialDeletedAuditEventState Class + #if (!OPCUA_EXCLUDE_KeyCredentialDeletedAuditEventState) + /// + /// Stores an instance of the KeyCredentialDeletedAuditEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class KeyCredentialDeletedAuditEventState : KeyCredentialAuditEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public KeyCredentialDeletedAuditEventState(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(Opc.Ua.ObjectTypes.KeyCredentialDeletedAuditEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAEtleUNyZWRlbnRpYWxEZWxldGVkQXVkaXRFdmVudFR5cGVJbnN0" + + "YW5jZQEAf0YBAH9Gf0YAAP////8QAAAAFWCJCgIAAAAAAAcAAABFdmVudElkAQCARgAuAESARgAAAA//" + + "////AQH/////AAAAABVgiQoCAAAAAAAJAAAARXZlbnRUeXBlAQCBRgAuAESBRgAAABH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAKAAAAU291cmNlTm9kZQEAgkYALgBEgkYAAAAR/////wEB/////wAAAAAVYIkK" + + "AgAAAAAACgAAAFNvdXJjZU5hbWUBAINGAC4ARINGAAAADP////8BAf////8AAAAAFWCJCgIAAAAAAAQA" + + "AABUaW1lAQCERgAuAESERgAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZWNlaXZlVGlt" + + "ZQEAhUYALgBEhUYAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAHAAAATWVzc2FnZQEAh0YALgBE" + + "h0YAAAAV/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAFNldmVyaXR5AQCIRgAuAESIRgAAAAX/////" + + "AQH/////AAAAABVgiQoCAAAAAAAPAAAAQWN0aW9uVGltZVN0YW1wAQCJRgAuAESJRgAAAQAmAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAYAAABTdGF0dXMBAIpGAC4ARIpGAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAgAAABTZXJ2ZXJJZAEAi0YALgBEi0YAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAAEgAA" + + "AENsaWVudEF1ZGl0RW50cnlJZAEAjEYALgBEjEYAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAADAAA" + + "AENsaWVudFVzZXJJZAEAjUYALgBEjUYAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAACAAAAE1ldGhv" + + "ZElkAQCORgAuAESORgAAABH/////AQH/////AAAAABdgiQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "AI9GAC4ARI9GAAAAGAEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlc291cmNlVXJp" + + "AQCQRgAuAESQRgAAAAz/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AuthorizationServiceConfigurationState Class + #if (!OPCUA_EXCLUDE_AuthorizationServiceConfigurationState) + /// + /// Stores an instance of the AuthorizationServiceConfigurationType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AuthorizationServiceConfigurationState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AuthorizationServiceConfigurationState(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(Opc.Ua.ObjectTypes.AuthorizationServiceConfigurationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALQAAAEF1dGhvcml6YXRpb25TZXJ2aWNlQ29uZmlndXJhdGlvblR5cGVJ" + + "bnN0YW5jZQEAvEUBALxFvEUAAP////8DAAAAFWCJCgIAAAAAAAoAAABTZXJ2aWNlVXJpAQCYRgAuAESY" + + "RgAAAAz/////AQH/////AAAAABVgiQoCAAAAAAASAAAAU2VydmljZUNlcnRpZmljYXRlAQDERQAuAETE" + + "RQAAAA//////AQH/////AAAAABVgiQoCAAAAAAARAAAASXNzdWVyRW5kcG9pbnRVcmwBAJlGAC4ARJlG" + + "AAAADP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ServiceUri + { + get + { + return m_serviceUri; + } + + set + { + if (!Object.ReferenceEquals(m_serviceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serviceUri = value; + } + } + + /// + public PropertyState ServiceCertificate + { + get + { + return m_serviceCertificate; + } + + set + { + if (!Object.ReferenceEquals(m_serviceCertificate, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_serviceCertificate = value; + } + } + + /// + public PropertyState IssuerEndpointUrl + { + get + { + return m_issuerEndpointUrl; + } + + set + { + if (!Object.ReferenceEquals(m_issuerEndpointUrl, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_issuerEndpointUrl = 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_serviceUri != null) + { + children.Add(m_serviceUri); + } + + if (m_serviceCertificate != null) + { + children.Add(m_serviceCertificate); + } + + if (m_issuerEndpointUrl != null) + { + children.Add(m_issuerEndpointUrl); + } + + 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 Opc.Ua.BrowseNames.ServiceUri: + { + if (createOrReplace) + { + if (ServiceUri == null) + { + if (replacement == null) + { + ServiceUri = new PropertyState(this); + } + else + { + ServiceUri = (PropertyState)replacement; + } + } + } + + instance = ServiceUri; + break; + } + + case Opc.Ua.BrowseNames.ServiceCertificate: + { + if (createOrReplace) + { + if (ServiceCertificate == null) + { + if (replacement == null) + { + ServiceCertificate = new PropertyState(this); + } + else + { + ServiceCertificate = (PropertyState)replacement; + } + } + } + + instance = ServiceCertificate; + break; + } + + case Opc.Ua.BrowseNames.IssuerEndpointUrl: + { + if (createOrReplace) + { + if (IssuerEndpointUrl == null) + { + if (replacement == null) + { + IssuerEndpointUrl = new PropertyState(this); + } + else + { + IssuerEndpointUrl = (PropertyState)replacement; + } + } + } + + instance = IssuerEndpointUrl; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_serviceUri; + private PropertyState m_serviceCertificate; + private PropertyState m_issuerEndpointUrl; + #endregion + } + #endif + #endregion + + #region AggregateConfigurationState Class + #if (!OPCUA_EXCLUDE_AggregateConfigurationState) + /// + /// Stores an instance of the AggregateConfigurationType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AggregateConfigurationState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AggregateConfigurationState(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(Opc.Ua.ObjectTypes.AggregateConfigurationType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAEFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb25UeXBlSW5zdGFuY2UBALMr" + + "AQCzK7MrAAD/////BAAAABVgiQoCAAAAAAATAAAAVHJlYXRVbmNlcnRhaW5Bc0JhZAEAtCsALgBEtCsA" + + "AAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFBlcmNlbnREYXRhQmFkAQC1KwAuAES1KwAAAAP/" + + "////AQH/////AAAAABVgiQoCAAAAAAAPAAAAUGVyY2VudERhdGFHb29kAQC2KwAuAES2KwAAAAP/////" + + "AQH/////AAAAABVgiQoCAAAAAAAWAAAAVXNlU2xvcGVkRXh0cmFwb2xhdGlvbgEAtysALgBEtysAAAAB" + + "/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState TreatUncertainAsBad + { + get + { + return m_treatUncertainAsBad; + } + + set + { + if (!Object.ReferenceEquals(m_treatUncertainAsBad, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_treatUncertainAsBad = value; + } + } + + /// + public PropertyState PercentDataBad + { + get + { + return m_percentDataBad; + } + + set + { + if (!Object.ReferenceEquals(m_percentDataBad, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_percentDataBad = value; + } + } + + /// + public PropertyState PercentDataGood + { + get + { + return m_percentDataGood; + } + + set + { + if (!Object.ReferenceEquals(m_percentDataGood, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_percentDataGood = value; + } + } + + /// + public PropertyState UseSlopedExtrapolation + { + get + { + return m_useSlopedExtrapolation; + } + + set + { + if (!Object.ReferenceEquals(m_useSlopedExtrapolation, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_useSlopedExtrapolation = 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_treatUncertainAsBad != null) + { + children.Add(m_treatUncertainAsBad); + } + + if (m_percentDataBad != null) + { + children.Add(m_percentDataBad); + } + + if (m_percentDataGood != null) + { + children.Add(m_percentDataGood); + } + + if (m_useSlopedExtrapolation != null) + { + children.Add(m_useSlopedExtrapolation); + } + + 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 Opc.Ua.BrowseNames.TreatUncertainAsBad: + { + if (createOrReplace) + { + if (TreatUncertainAsBad == null) + { + if (replacement == null) + { + TreatUncertainAsBad = new PropertyState(this); + } + else + { + TreatUncertainAsBad = (PropertyState)replacement; + } + } + } + + instance = TreatUncertainAsBad; + break; + } + + case Opc.Ua.BrowseNames.PercentDataBad: + { + if (createOrReplace) + { + if (PercentDataBad == null) + { + if (replacement == null) + { + PercentDataBad = new PropertyState(this); + } + else + { + PercentDataBad = (PropertyState)replacement; + } + } + } + + instance = PercentDataBad; + break; + } + + case Opc.Ua.BrowseNames.PercentDataGood: + { + if (createOrReplace) + { + if (PercentDataGood == null) + { + if (replacement == null) + { + PercentDataGood = new PropertyState(this); + } + else + { + PercentDataGood = (PropertyState)replacement; + } + } + } + + instance = PercentDataGood; + break; + } + + case Opc.Ua.BrowseNames.UseSlopedExtrapolation: + { + if (createOrReplace) + { + if (UseSlopedExtrapolation == null) + { + if (replacement == null) + { + UseSlopedExtrapolation = new PropertyState(this); + } + else + { + UseSlopedExtrapolation = (PropertyState)replacement; + } + } + } + + instance = UseSlopedExtrapolation; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_treatUncertainAsBad; + private PropertyState m_percentDataBad; + private PropertyState m_percentDataGood; + private PropertyState m_useSlopedExtrapolation; + #endregion + } + #endif + #endregion + + #region PubSubKeyServiceState Class + #if (!OPCUA_EXCLUDE_PubSubKeyServiceState) + /// + /// Stores an instance of the PubSubKeyServiceType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubKeyServiceState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubKeyServiceState(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(Opc.Ua.ObjectTypes.PubSubKeyServiceType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (GetSecurityKeys != null) + { + GetSecurityKeys.Initialize(context, GetSecurityKeys_InitializationString); + } + + if (GetSecurityGroup != null) + { + GetSecurityGroup.Initialize(context, GetSecurityGroup_InitializationString); + } + + if (SecurityGroups != null) + { + SecurityGroups.Initialize(context, SecurityGroups_InitializationString); + } + } + + #region Initialization String + private const string GetSecurityKeys_InitializationString = + "//////////8EYYIKBAAAAAAADwAAAEdldFNlY3VyaXR5S2V5cwEAIz4ALwEAIz4jPgAAAQH/////AgAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACQ+AC4ARCQ+AACWAwAAAAEAKgEBHgAAAA8AAABT" + + "ZWN1cml0eUdyb3VwSWQADP////8AAAAAAAEAKgEBIAAAAA8AAABTdGFydGluZ1Rva2VuSWQBACAB////" + + "/wAAAAAAAQAqAQEgAAAAEQAAAFJlcXVlc3RlZEtleUNvdW50AAf/////AAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAlPgAuAEQlPgAAlgUAAAAB" + + "ACoBASAAAAARAAAAU2VjdXJpdHlQb2xpY3lVcmkADP////8AAAAAAAEAKgEBHQAAAAwAAABGaXJzdFRv" + + "a2VuSWQBACAB/////wAAAAAAAQAqAQEXAAAABAAAAEtleXMADwEAAAABAAAAAAAAAAABACoBAR4AAAAN" + + "AAAAVGltZVRvTmV4dEtleQEAIgH/////AAAAAAABACoBARwAAAALAAAAS2V5TGlmZXRpbWUBACIB////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string GetSecurityGroup_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAEdldFNlY3VyaXR5R3JvdXABACY+AC8BACY+Jj4AAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAnPgAuAEQnPgAAlgEAAAABACoBAR4AAAAPAAAA" + + "U2VjdXJpdHlHcm91cElkAAz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAA" + + "AAAPAAAAT3V0cHV0QXJndW1lbnRzAQAoPgAuAEQoPgAAlgEAAAABACoBASIAAAATAAAAU2VjdXJpdHlH" + + "cm91cE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string SecurityGroups_InitializationString = + "//////////8EYIAKAQAAAAAADgAAAFNlY3VyaXR5R3JvdXBzAQApPgAvAQBcPCk+AAD/////AgAAAARh" + + "ggoEAAAAAAAQAAAAQWRkU2VjdXJpdHlHcm91cAEAKj4ALwEAZTwqPgAAAQH/////AgAAABdgqQoCAAAA" + + "AAAOAAAASW5wdXRBcmd1bWVudHMBACs+AC4ARCs+AACWBQAAAAEAKgEBIAAAABEAAABTZWN1cml0eUdy" + + "b3VwTmFtZQAM/////wAAAAAAAQAqAQEcAAAACwAAAEtleUxpZmV0aW1lAQAiAf////8AAAAAAAEAKgEB" + + "IAAAABEAAABTZWN1cml0eVBvbGljeVVyaQAM/////wAAAAAAAQAqAQEgAAAAEQAAAE1heEZ1dHVyZUtl" + + "eUNvdW50AAf/////AAAAAAABACoBAR4AAAAPAAAATWF4UGFzdEtleUNvdW50AAf/////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAsPgAuAEQs" + + "PgAAlgIAAAABACoBAR4AAAAPAAAAU2VjdXJpdHlHcm91cElkAAz/////AAAAAAABACoBASIAAAATAAAA" + + "U2VjdXJpdHlHcm91cE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIK" + + "BAAAAAAAEwAAAFJlbW92ZVNlY3VyaXR5R3JvdXABAC0+AC8BAGg8LT4AAAEB/////wEAAAAXYKkKAgAA" + + "AAAADgAAAElucHV0QXJndW1lbnRzAQAuPgAuAEQuPgAAlgEAAAABACoBASIAAAATAAAAU2VjdXJpdHlH" + + "cm91cE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAFB1YlN1YktleVNlcnZpY2VUeXBlSW5zdGFuY2UBACI+AQAiPiI+" + + "AAD/////AwAAAARhggoEAAAAAAAPAAAAR2V0U2VjdXJpdHlLZXlzAQAjPgAvAQAjPiM+AAABAf////8C" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAJD4ALgBEJD4AAJYDAAAAAQAqAQEeAAAADwAA" + + "AFNlY3VyaXR5R3JvdXBJZAAM/////wAAAAAAAQAqAQEgAAAADwAAAFN0YXJ0aW5nVG9rZW5JZAEAIAH/" + + "////AAAAAAABACoBASAAAAARAAAAUmVxdWVzdGVkS2V5Q291bnQAB/////8AAAAAAAEAKAEBAAAAAQAA" + + "AAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBACU+AC4ARCU+AACWBQAA" + + "AAEAKgEBIAAAABEAAABTZWN1cml0eVBvbGljeVVyaQAM/////wAAAAAAAQAqAQEdAAAADAAAAEZpcnN0" + + "VG9rZW5JZAEAIAH/////AAAAAAABACoBARcAAAAEAAAAS2V5cwAPAQAAAAEAAAAAAAAAAAEAKgEBHgAA" + + "AA0AAABUaW1lVG9OZXh0S2V5AQAiAf////8AAAAAAAEAKgEBHAAAAAsAAABLZXlMaWZldGltZQEAIgH/" + + "////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAQAAAAR2V0U2VjdXJpdHlH" + + "cm91cAEAJj4ALwEAJj4mPgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBACc+" + + "AC4ARCc+AACWAQAAAAEAKgEBHgAAAA8AAABTZWN1cml0eUdyb3VwSWQADP////8AAAAAAAEAKAEBAAAA" + + "AQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBACg+AC4ARCg+AACW" + + "AQAAAAEAKgEBIgAAABMAAABTZWN1cml0eUdyb3VwTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAARggAoBAAAAAAAOAAAAU2VjdXJpdHlHcm91cHMBACk+AC8BAFw8KT4AAP////8C" + + "AAAABGGCCgQAAAAAABAAAABBZGRTZWN1cml0eUdyb3VwAQAqPgAvAQBlPCo+AAABAf////8CAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAKz4ALgBEKz4AAJYFAAAAAQAqAQEgAAAAEQAAAFNlY3Vy" + + "aXR5R3JvdXBOYW1lAAz/////AAAAAAABACoBARwAAAALAAAAS2V5TGlmZXRpbWUBACIB/////wAAAAAA" + + "AQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAAz/////AAAAAAABACoBASAAAAARAAAATWF4RnV0" + + "dXJlS2V5Q291bnQAB/////8AAAAAAAEAKgEBHgAAAA8AAABNYXhQYXN0S2V5Q291bnQAB/////8AAAAA" + + "AAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBACw+" + + "AC4ARCw+AACWAgAAAAEAKgEBHgAAAA8AAABTZWN1cml0eUdyb3VwSWQADP////8AAAAAAAEAKgEBIgAA" + + "ABMAAABTZWN1cml0eUdyb3VwTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAA" + + "AARhggoEAAAAAAATAAAAUmVtb3ZlU2VjdXJpdHlHcm91cAEALT4ALwEAaDwtPgAAAQH/////AQAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAC4+AC4ARC4+AACWAQAAAAEAKgEBIgAAABMAAABTZWN1" + + "cml0eUdyb3VwTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public GetSecurityKeysMethodState GetSecurityKeys + { + get + { + return m_getSecurityKeysMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getSecurityKeysMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getSecurityKeysMethod = value; + } + } + + /// + public GetSecurityGroupMethodState GetSecurityGroup + { + get + { + return m_getSecurityGroupMethod; + } + + set + { + if (!Object.ReferenceEquals(m_getSecurityGroupMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_getSecurityGroupMethod = value; + } + } + + /// + public SecurityGroupFolderState SecurityGroups + { + get + { + return m_securityGroups; + } + + set + { + if (!Object.ReferenceEquals(m_securityGroups, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityGroups = 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_getSecurityKeysMethod != null) + { + children.Add(m_getSecurityKeysMethod); + } + + if (m_getSecurityGroupMethod != null) + { + children.Add(m_getSecurityGroupMethod); + } + + if (m_securityGroups != null) + { + children.Add(m_securityGroups); + } + + 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 Opc.Ua.BrowseNames.GetSecurityKeys: + { + if (createOrReplace) + { + if (GetSecurityKeys == null) + { + if (replacement == null) + { + GetSecurityKeys = new GetSecurityKeysMethodState(this); + } + else + { + GetSecurityKeys = (GetSecurityKeysMethodState)replacement; + } + } + } + + instance = GetSecurityKeys; + break; + } + + case Opc.Ua.BrowseNames.GetSecurityGroup: + { + if (createOrReplace) + { + if (GetSecurityGroup == null) + { + if (replacement == null) + { + GetSecurityGroup = new GetSecurityGroupMethodState(this); + } + else + { + GetSecurityGroup = (GetSecurityGroupMethodState)replacement; + } + } + } + + instance = GetSecurityGroup; + break; + } + + case Opc.Ua.BrowseNames.SecurityGroups: + { + if (createOrReplace) + { + if (SecurityGroups == null) + { + if (replacement == null) + { + SecurityGroups = new SecurityGroupFolderState(this); + } + else + { + SecurityGroups = (SecurityGroupFolderState)replacement; + } + } + } + + instance = SecurityGroups; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private GetSecurityKeysMethodState m_getSecurityKeysMethod; + private GetSecurityGroupMethodState m_getSecurityGroupMethod; + private SecurityGroupFolderState m_securityGroups; + #endregion + } + #endif + #endregion + + #region GetSecurityKeysMethodState Class + #if (!OPCUA_EXCLUDE_GetSecurityKeysMethodState) + /// + /// Stores an instance of the GetSecurityKeysMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetSecurityKeysMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetSecurityKeysMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetSecurityKeysMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGQAAAEdldFNlY3VyaXR5S2V5c01ldGhvZFR5cGUBAHI7AC8BAHI7cjsA" + + "AAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBzOwAuAERzOwAAlgMAAAABACoB" + + "AR4AAAAPAAAAU2VjdXJpdHlHcm91cElkAAz/////AAAAAAABACoBASAAAAAPAAAAU3RhcnRpbmdUb2tl" + + "bklkAQAgAf////8AAAAAAAEAKgEBIAAAABEAAABSZXF1ZXN0ZWRLZXlDb3VudAAH/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAdDsALgBE" + + "dDsAAJYFAAAAAQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAAz/////AAAAAAABACoBAR0AAAAM" + + "AAAARmlyc3RUb2tlbklkAQAgAf////8AAAAAAAEAKgEBFwAAAAQAAABLZXlzAA8BAAAAAQAAAAAAAAAA" + + "AQAqAQEeAAAADQAAAFRpbWVUb05leHRLZXkBACIB/////wAAAAAAAQAqAQEcAAAACwAAAEtleUxpZmV0" + + "aW1lAQAiAf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetSecurityKeysMethodStateMethodCallHandler 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; + + string securityGroupId = (string)_inputArguments[0]; + uint startingTokenId = (uint)_inputArguments[1]; + uint requestedKeyCount = (uint)_inputArguments[2]; + + string securityPolicyUri = (string)_outputArguments[0]; + uint firstTokenId = (uint)_outputArguments[1]; + byte[][] keys = (byte[][])_outputArguments[2]; + double timeToNextKey = (double)_outputArguments[3]; + double keyLifetime = (double)_outputArguments[4]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + securityGroupId, + startingTokenId, + requestedKeyCount, + ref securityPolicyUri, + ref firstTokenId, + ref keys, + ref timeToNextKey, + ref keyLifetime); + } + + _outputArguments[0] = securityPolicyUri; + _outputArguments[1] = firstTokenId; + _outputArguments[2] = keys; + _outputArguments[3] = timeToNextKey; + _outputArguments[4] = keyLifetime; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetSecurityKeysMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string securityGroupId, + uint startingTokenId, + uint requestedKeyCount, + ref string securityPolicyUri, + ref uint firstTokenId, + ref byte[][] keys, + ref double timeToNextKey, + ref double keyLifetime); + #endif + #endregion + + #region GetSecurityGroupMethodState Class + #if (!OPCUA_EXCLUDE_GetSecurityGroupMethodState) + /// + /// Stores an instance of the GetSecurityGroupMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class GetSecurityGroupMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public GetSecurityGroupMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new GetSecurityGroupMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGgAAAEdldFNlY3VyaXR5R3JvdXBNZXRob2RUeXBlAQBZPAAvAQBZPFk8" + + "AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAWjwALgBEWjwAAJYBAAAAAQAq" + + "AQEeAAAADwAAAFNlY3VyaXR5R3JvdXBJZAAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAWzwALgBEWzwAAJYBAAAAAQAqAQEiAAAAEwAA" + + "AFNlY3VyaXR5R3JvdXBOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public GetSecurityGroupMethodStateMethodCallHandler 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; + + string securityGroupId = (string)_inputArguments[0]; + + NodeId securityGroupNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + securityGroupId, + ref securityGroupNodeId); + } + + _outputArguments[0] = securityGroupNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult GetSecurityGroupMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string securityGroupId, + ref NodeId securityGroupNodeId); + #endif + #endregion + + #region AddSecurityGroupMethodState Class + #if (!OPCUA_EXCLUDE_AddSecurityGroupMethodState) + /// + /// Stores an instance of the AddSecurityGroupMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddSecurityGroupMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddSecurityGroupMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddSecurityGroupMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGgAAAEFkZFNlY3VyaXR5R3JvdXBNZXRob2RUeXBlAQBqPAAvAQBqPGo8" + + "AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAazwALgBEazwAAJYFAAAAAQAq" + + "AQEgAAAAEQAAAFNlY3VyaXR5R3JvdXBOYW1lAAz/////AAAAAAABACoBARwAAAALAAAAS2V5TGlmZXRp" + + "bWUBACIB/////wAAAAAAAQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAAz/////AAAAAAABACoB" + + "ASAAAAARAAAATWF4RnV0dXJlS2V5Q291bnQAB/////8AAAAAAAEAKgEBHgAAAA8AAABNYXhQYXN0S2V5" + + "Q291bnQAB/////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRw" + + "dXRBcmd1bWVudHMBAGw8AC4ARGw8AACWAgAAAAEAKgEBHgAAAA8AAABTZWN1cml0eUdyb3VwSWQADP//" + + "//8AAAAAAAEAKgEBIgAAABMAAABTZWN1cml0eUdyb3VwTm9kZUlkABH/////AAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddSecurityGroupMethodStateMethodCallHandler 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; + + string securityGroupName = (string)_inputArguments[0]; + double keyLifetime = (double)_inputArguments[1]; + string securityPolicyUri = (string)_inputArguments[2]; + uint maxFutureKeyCount = (uint)_inputArguments[3]; + uint maxPastKeyCount = (uint)_inputArguments[4]; + + string securityGroupId = (string)_outputArguments[0]; + NodeId securityGroupNodeId = (NodeId)_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + securityGroupName, + keyLifetime, + securityPolicyUri, + maxFutureKeyCount, + maxPastKeyCount, + ref securityGroupId, + ref securityGroupNodeId); + } + + _outputArguments[0] = securityGroupId; + _outputArguments[1] = securityGroupNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddSecurityGroupMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string securityGroupName, + double keyLifetime, + string securityPolicyUri, + uint maxFutureKeyCount, + uint maxPastKeyCount, + ref string securityGroupId, + ref NodeId securityGroupNodeId); + #endif + #endregion + + #region RemoveSecurityGroupMethodState Class + #if (!OPCUA_EXCLUDE_RemoveSecurityGroupMethodState) + /// + /// Stores an instance of the RemoveSecurityGroupMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveSecurityGroupMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveSecurityGroupMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveSecurityGroupMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHQAAAFJlbW92ZVNlY3VyaXR5R3JvdXBNZXRob2RUeXBlAQBtPAAvAQBt" + + "PG08AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAbjwALgBEbjwAAJYBAAAA" + + "AQAqAQEiAAAAEwAAAFNlY3VyaXR5R3JvdXBOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveSecurityGroupMethodStateMethodCallHandler 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; + + NodeId securityGroupNodeId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + securityGroupNodeId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveSecurityGroupMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId securityGroupNodeId); + #endif + #endregion + + #region SecurityGroupFolderState Class + #if (!OPCUA_EXCLUDE_SecurityGroupFolderState) + /// + /// Stores an instance of the SecurityGroupFolderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SecurityGroupFolderState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SecurityGroupFolderState(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(Opc.Ua.ObjectTypes.SecurityGroupFolderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAFNlY3VyaXR5R3JvdXBGb2xkZXJUeXBlSW5zdGFuY2UBAFw8AQBc" + + "PFw8AAD/////AgAAAARhggoEAAAAAAAQAAAAQWRkU2VjdXJpdHlHcm91cAEAZTwALwEAZTxlPAAAAQH/" + + "////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAGY8AC4ARGY8AACWBQAAAAEAKgEBIAAA" + + "ABEAAABTZWN1cml0eUdyb3VwTmFtZQAM/////wAAAAAAAQAqAQEcAAAACwAAAEtleUxpZmV0aW1lAQAi" + + "Af////8AAAAAAAEAKgEBIAAAABEAAABTZWN1cml0eVBvbGljeVVyaQAM/////wAAAAAAAQAqAQEgAAAA" + + "EQAAAE1heEZ1dHVyZUtleUNvdW50AAf/////AAAAAAABACoBAR4AAAAPAAAATWF4UGFzdEtleUNvdW50" + + "AAf/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJn" + + "dW1lbnRzAQBnPAAuAERnPAAAlgIAAAABACoBAR4AAAAPAAAAU2VjdXJpdHlHcm91cElkAAz/////AAAA" + + "AAABACoBASIAAAATAAAAU2VjdXJpdHlHcm91cE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAAEYYIKBAAAAAAAEwAAAFJlbW92ZVNlY3VyaXR5R3JvdXABAGg8AC8BAGg8aDwAAAEB" + + "/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBpPAAuAERpPAAAlgEAAAABACoBASIA" + + "AAATAAAAU2VjdXJpdHlHcm91cE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAA" + + "AAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public AddSecurityGroupMethodState AddSecurityGroup + { + get + { + return m_addSecurityGroupMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addSecurityGroupMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addSecurityGroupMethod = value; + } + } + + /// + public RemoveSecurityGroupMethodState RemoveSecurityGroup + { + get + { + return m_removeSecurityGroupMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeSecurityGroupMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeSecurityGroupMethod = 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_addSecurityGroupMethod != null) + { + children.Add(m_addSecurityGroupMethod); + } + + if (m_removeSecurityGroupMethod != null) + { + children.Add(m_removeSecurityGroupMethod); + } + + 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 Opc.Ua.BrowseNames.AddSecurityGroup: + { + if (createOrReplace) + { + if (AddSecurityGroup == null) + { + if (replacement == null) + { + AddSecurityGroup = new AddSecurityGroupMethodState(this); + } + else + { + AddSecurityGroup = (AddSecurityGroupMethodState)replacement; + } + } + } + + instance = AddSecurityGroup; + break; + } + + case Opc.Ua.BrowseNames.RemoveSecurityGroup: + { + if (createOrReplace) + { + if (RemoveSecurityGroup == null) + { + if (replacement == null) + { + RemoveSecurityGroup = new RemoveSecurityGroupMethodState(this); + } + else + { + RemoveSecurityGroup = (RemoveSecurityGroupMethodState)replacement; + } + } + } + + instance = RemoveSecurityGroup; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private AddSecurityGroupMethodState m_addSecurityGroupMethod; + private RemoveSecurityGroupMethodState m_removeSecurityGroupMethod; + #endregion + } + #endif + #endregion + + #region SecurityGroupState Class + #if (!OPCUA_EXCLUDE_SecurityGroupState) + /// + /// Stores an instance of the SecurityGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SecurityGroupState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SecurityGroupState(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(Opc.Ua.ObjectTypes.SecurityGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGQAAAFNlY3VyaXR5R3JvdXBUeXBlSW5zdGFuY2UBAG88AQBvPG88AAD/" + + "////BQAAABVgiQoCAAAAAAAPAAAAU2VjdXJpdHlHcm91cElkAQBwPAAuAERwPAAAAAz/////AQH/////" + + "AAAAABVgiQoCAAAAAAALAAAAS2V5TGlmZXRpbWUBAMY6AC4ARMY6AAABACIB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAQDHOgAuAETHOgAAAAz/////AQH/////AAAAABVg" + + "iQoCAAAAAAARAAAATWF4RnV0dXJlS2V5Q291bnQBAMg6AC4ARMg6AAAAB/////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA8AAABNYXhQYXN0S2V5Q291bnQBANA6AC4ARNA6AAAAB/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SecurityGroupId + { + get + { + return m_securityGroupId; + } + + set + { + if (!Object.ReferenceEquals(m_securityGroupId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityGroupId = value; + } + } + + /// + public PropertyState KeyLifetime + { + get + { + return m_keyLifetime; + } + + set + { + if (!Object.ReferenceEquals(m_keyLifetime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_keyLifetime = value; + } + } + + /// + public PropertyState SecurityPolicyUri + { + get + { + return m_securityPolicyUri; + } + + set + { + if (!Object.ReferenceEquals(m_securityPolicyUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityPolicyUri = value; + } + } + + /// + public PropertyState MaxFutureKeyCount + { + get + { + return m_maxFutureKeyCount; + } + + set + { + if (!Object.ReferenceEquals(m_maxFutureKeyCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxFutureKeyCount = value; + } + } + + /// + public PropertyState MaxPastKeyCount + { + get + { + return m_maxPastKeyCount; + } + + set + { + if (!Object.ReferenceEquals(m_maxPastKeyCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxPastKeyCount = 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_securityGroupId != null) + { + children.Add(m_securityGroupId); + } + + if (m_keyLifetime != null) + { + children.Add(m_keyLifetime); + } + + if (m_securityPolicyUri != null) + { + children.Add(m_securityPolicyUri); + } + + if (m_maxFutureKeyCount != null) + { + children.Add(m_maxFutureKeyCount); + } + + if (m_maxPastKeyCount != null) + { + children.Add(m_maxPastKeyCount); + } + + 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 Opc.Ua.BrowseNames.SecurityGroupId: + { + if (createOrReplace) + { + if (SecurityGroupId == null) + { + if (replacement == null) + { + SecurityGroupId = new PropertyState(this); + } + else + { + SecurityGroupId = (PropertyState)replacement; + } + } + } + + instance = SecurityGroupId; + break; + } + + case Opc.Ua.BrowseNames.KeyLifetime: + { + if (createOrReplace) + { + if (KeyLifetime == null) + { + if (replacement == null) + { + KeyLifetime = new PropertyState(this); + } + else + { + KeyLifetime = (PropertyState)replacement; + } + } + } + + instance = KeyLifetime; + break; + } + + case Opc.Ua.BrowseNames.SecurityPolicyUri: + { + if (createOrReplace) + { + if (SecurityPolicyUri == null) + { + if (replacement == null) + { + SecurityPolicyUri = new PropertyState(this); + } + else + { + SecurityPolicyUri = (PropertyState)replacement; + } + } + } + + instance = SecurityPolicyUri; + break; + } + + case Opc.Ua.BrowseNames.MaxFutureKeyCount: + { + if (createOrReplace) + { + if (MaxFutureKeyCount == null) + { + if (replacement == null) + { + MaxFutureKeyCount = new PropertyState(this); + } + else + { + MaxFutureKeyCount = (PropertyState)replacement; + } + } + } + + instance = MaxFutureKeyCount; + break; + } + + case Opc.Ua.BrowseNames.MaxPastKeyCount: + { + if (createOrReplace) + { + if (MaxPastKeyCount == null) + { + if (replacement == null) + { + MaxPastKeyCount = new PropertyState(this); + } + else + { + MaxPastKeyCount = (PropertyState)replacement; + } + } + } + + instance = MaxPastKeyCount; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_securityGroupId; + private PropertyState m_keyLifetime; + private PropertyState m_securityPolicyUri; + private PropertyState m_maxFutureKeyCount; + private PropertyState m_maxPastKeyCount; + #endregion + } + #endif + #endregion + + #region PublishSubscribeState Class + #if (!OPCUA_EXCLUDE_PublishSubscribeState) + /// + /// Stores an instance of the PublishSubscribeType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishSubscribeState : PubSubKeyServiceState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishSubscribeState(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(Opc.Ua.ObjectTypes.PublishSubscribeType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SetSecurityKeys != null) + { + SetSecurityKeys.Initialize(context, SetSecurityKeys_InitializationString); + } + + if (AddConnection != null) + { + AddConnection.Initialize(context, AddConnection_InitializationString); + } + + if (RemoveConnection != null) + { + RemoveConnection.Initialize(context, RemoveConnection_InitializationString); + } + + if (Diagnostics != null) + { + Diagnostics.Initialize(context, Diagnostics_InitializationString); + } + } + + #region Initialization String + private const string SetSecurityKeys_InitializationString = + "//////////8EYYIKBAAAAAAADwAAAFNldFNlY3VyaXR5S2V5cwEAkEMALwEAkEOQQwAAAQH/////AQAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAJFDAC4ARJFDAACWBwAAAAEAKgEBHgAAAA8AAABT" + + "ZWN1cml0eUdyb3VwSWQADP////8AAAAAAAEAKgEBIAAAABEAAABTZWN1cml0eVBvbGljeVVyaQAM////" + + "/wAAAAAAAQAqAQEfAAAADgAAAEN1cnJlbnRUb2tlbklkAQAgAf////8AAAAAAAEAKgEBGQAAAAoAAABD" + + "dXJyZW50S2V5AA//////AAAAAAABACoBAR0AAAAKAAAARnV0dXJlS2V5cwAPAQAAAAEAAAAAAAAAAAEA" + + "KgEBHgAAAA0AAABUaW1lVG9OZXh0S2V5AQAiAf////8AAAAAAAEAKgEBHAAAAAsAAABLZXlMaWZldGlt" + + "ZQEAIgH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string AddConnection_InitializationString = + "//////////8EYYIKBAAAAAAADQAAAEFkZENvbm5lY3Rpb24BANZAAC8BANZA1kAAAAEB/////wIAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDXQAAuAETXQAAAlgEAAAABACoBAR4AAAANAAAAQ29u" + + "ZmlndXJhdGlvbgEAAT3/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAP" + + "AAAAT3V0cHV0QXJndW1lbnRzAQDYQAAuAETYQAAAlgEAAAABACoBARsAAAAMAAAAQ29ubmVjdGlvbklk" + + "ABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string RemoveConnection_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAFJlbW92ZUNvbm5lY3Rpb24BAGA4AC8BAGA4YDgAAAEB/////wEA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBhOAAuAERhOAAAlgEAAAABACoBARsAAAAMAAAA" + + "Q29ubmVjdGlvbklkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string Diagnostics_InitializationString = + "//////////8EYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQAbSQAvAQAUTRtJAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAHEkALwA/HEkAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAHUkALwEADU0dSQAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQAeSQAuAEQeSQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAB9JAC4ARB9JAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBACBJAC4ARCBJAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBACJJAC8BAA1NIkkAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAI0kA" + + "LgBEI0kAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAkSQAuAEQk" + + "SQAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAlSQAuAEQl" + + "SQAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEAJ0kALwEA6UwnSQAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAChJAC8APyhJAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAKUkALwA6KUkAAP////8GAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQAqSQAvAQANTSpJAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBACtJAC4ARCtJ" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEALEkALgBELEkAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAtSQAuAEQt" + + "SQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEAL0kALwEADU0vSQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQAwSQAu" + + "AEQwSQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BADFJAC4ARDFJ" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAMkkA" + + "LgBEMkkAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBADRJAC8BAA1NNEkAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "NUkALgBENUkAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQA2SQAu" + + "AEQ2SQAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ADdJAC4ARDdJAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEAOUkALwEADU05SQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQA6SQAuAEQ6SQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "ADtJAC4ARDtJAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAPEkALgBEPEkAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQA+SQAvAQANTT5JAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBAD9JAC4ARD9JAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "QEkALgBEQEkAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQBBSQAuAERBSQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAQ0kALwEADU1DSQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQBESQAuAERESQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AEVJAC4AREVJAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEARkkALgBERkkAAAYAAAAAAQALTf////8BAf////8AAAAABGCACgEAAAAAAAoAAABMaXZlVmFs" + + "dWVzAQBISQAvADpISQAA/////wQAAAAVYIkKAgAAAAAAGAAAAENvbmZpZ3VyZWREYXRhU2V0V3JpdGVy" + + "cwEASUkALwA/SUkAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "AEpJAC4AREpJAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAYAAAAQ29uZmlndXJlZERh" + + "dGFTZXRSZWFkZXJzAQBLSQAvAD9LSQAAAAX/////AQH/////AQAAABVgqQoCAAAAAAAQAAAARGlhZ25v" + + "c3RpY3NMZXZlbAEATEkALgBETEkAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABkAAABP" + + "cGVyYXRpb25hbERhdGFTZXRXcml0ZXJzAQBNSQAvAD9NSQAAAAX/////AQH/////AQAAABVgqQoCAAAA" + + "AAAQAAAARGlhZ25vc3RpY3NMZXZlbAEATkkALgBETkkAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABkAAABPcGVyYXRpb25hbERhdGFTZXRSZWFkZXJzAQBPSQAvAD9PSQAAAAX/////AQH/////" + + "AQAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAUEkALgBEUEkAAAYAAAAAAQALTf////8B" + + "Af////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAFB1Ymxpc2hTdWJzY3JpYmVUeXBlSW5zdGFuY2UBAFA4AQBQOFA4" + + "AAD/////BwAAAARhggoEAAAAAAAPAAAAU2V0U2VjdXJpdHlLZXlzAQCQQwAvAQCQQ5BDAAABAf////8B" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAkUMALgBEkUMAAJYHAAAAAQAqAQEeAAAADwAA" + + "AFNlY3VyaXR5R3JvdXBJZAAM/////wAAAAAAAQAqAQEgAAAAEQAAAFNlY3VyaXR5UG9saWN5VXJpAAz/" + + "////AAAAAAABACoBAR8AAAAOAAAAQ3VycmVudFRva2VuSWQBACAB/////wAAAAAAAQAqAQEZAAAACgAA" + + "AEN1cnJlbnRLZXkAD/////8AAAAAAAEAKgEBHQAAAAoAAABGdXR1cmVLZXlzAA8BAAAAAQAAAAAAAAAA" + + "AQAqAQEeAAAADQAAAFRpbWVUb05leHRLZXkBACIB/////wAAAAAAAQAqAQEcAAAACwAAAEtleUxpZmV0" + + "aW1lAQAiAf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAA0AAABBZGRD" + + "b25uZWN0aW9uAQDWQAAvAQDWQNZAAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEA10AALgBE10AAAJYBAAAAAQAqAQEeAAAADQAAAENvbmZpZ3VyYXRpb24BAAE9/////wAAAAAAAQAo" + + "AQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA2EAALgBE" + + "2EAAAJYBAAAAAQAqAQEbAAAADAAAAENvbm5lY3Rpb25JZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAAEYYIKBAAAAAAAEAAAAFJlbW92ZUNvbm5lY3Rpb24BAGA4AC8BAGA4YDgAAAEB////" + + "/wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBhOAAuAERhOAAAlgEAAAABACoBARsAAAAM" + + "AAAAQ29ubmVjdGlvbklkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARggAoBAAAA" + + "AAARAAAAUHVibGlzaGVkRGF0YVNldHMBAGI4AC8BAI04YjgAAP////8AAAAABGCACgEAAAAAAAYAAABT" + + "dGF0dXMBAOQ9AC8BADM55D0AAP////8BAAAAFWCJCgIAAAAAAAUAAABTdGF0ZQEA5T0ALwA/5T0AAAEA" + + "Nzn/////AQH/////AAAAAARggAoBAAAAAAALAAAARGlhZ25vc3RpY3MBABtJAC8BABRNG0kAAP////8H" + + "AAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAcSQAvAD8cSQAAAQALTf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABAAAABUb3RhbEluZm9ybWF0aW9uAQAdSQAvAQANTR1JAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAB5JAC4ARB5JAAAAAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEAH0kALgBEH0kAAAEAEk3/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAIEkALgBEIEkAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAK" + + "AAAAVG90YWxFcnJvcgEAIkkALwEADU0iSQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQAjSQAuAEQjSQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "ACRJAC4ARCRJAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ACVJAC4ARCVJAAABAAtN/////wEB/////wAAAAAEYYIKBAAAAAAABQAAAFJlc2V0AQAnSQAvAQDpTCdJ" + + "AAABAf////8AAAAAFWCJCgIAAAAAAAgAAABTdWJFcnJvcgEAKEkALwA/KEkAAAAB/////wEB/////wAA" + + "AAAEYIAKAQAAAAAACAAAAENvdW50ZXJzAQApSQAvADopSQAA/////wYAAAAVYIkKAgAAAAAACgAAAFN0" + + "YXRlRXJyb3IBACpJAC8BAA1NKkkAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "K0kALgBEK0kAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAsSQAu" + + "AEQsSQAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "AC1JAC4ARC1JAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAYAAAAU3RhdGVPcGVyYXRp" + + "b25hbEJ5TWV0aG9kAQAvSQAvAQANTS9JAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBADBJAC4ARDBJAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "MUkALgBEMUkAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQAySQAuAEQySQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3Bl" + + "cmF0aW9uYWxCeVBhcmVudAEANEkALwEADU00SQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAA" + + "QWN0aXZlAQA1SQAuAEQ1SQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRp" + + "b24BADZJAC4ARDZJAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3Rp" + + "Y3NMZXZlbAEAN0kALgBEN0kAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABkAAABTdGF0" + + "ZU9wZXJhdGlvbmFsRnJvbUVycm9yAQA5SQAvAQANTTlJAAAAB/////8BAf////8DAAAAFWCJCgIAAAAA" + + "AAYAAABBY3RpdmUBADpJAC4ARDpJAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lm" + + "aWNhdGlvbgEAO0kALgBEO0kAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFn" + + "bm9zdGljc0xldmVsAQA8SQAuAEQ8SQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAEwAA" + + "AFN0YXRlUGF1c2VkQnlQYXJlbnQBAD5JAC8BAA1NPkkAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAA" + + "BgAAAEFjdGl2ZQEAP0kALgBEP0kAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZp" + + "Y2F0aW9uAQBASQAuAERASQAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAEFJAC4AREFJAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAVAAAA" + + "U3RhdGVEaXNhYmxlZEJ5TWV0aG9kAQBDSQAvAQANTUNJAAAAB/////8BAf////8DAAAAFWCJCgIAAAAA" + + "AAYAAABBY3RpdmUBAERJAC4ARERJAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lm" + + "aWNhdGlvbgEARUkALgBERUkAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFn" + + "bm9zdGljc0xldmVsAQBGSQAuAERGSQAABgAAAAABAAtN/////wEB/////wAAAAAEYIAKAQAAAAAACgAA" + + "AExpdmVWYWx1ZXMBAEhJAC8AOkhJAAD/////BAAAABVgiQoCAAAAAAAYAAAAQ29uZmlndXJlZERhdGFT" + + "ZXRXcml0ZXJzAQBJSQAvAD9JSQAAAAX/////AQH/////AQAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3Rp" + + "Y3NMZXZlbAEASkkALgBESkkAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABDb25m" + + "aWd1cmVkRGF0YVNldFJlYWRlcnMBAEtJAC8AP0tJAAAABf////8BAf////8BAAAAFWCpCgIAAAAAABAA" + + "AABEaWFnbm9zdGljc0xldmVsAQBMSQAuAERMSQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAGQAAAE9wZXJhdGlvbmFsRGF0YVNldFdyaXRlcnMBAE1JAC8AP01JAAAABf////8BAf////8BAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBOSQAuAEROSQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAGQAAAE9wZXJhdGlvbmFsRGF0YVNldFJlYWRlcnMBAE9JAC8AP09JAAAABf//" + + "//8BAf////8BAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBQSQAuAERQSQAABgAAAAAB" + + "AAtN/////wEB/////wAAAAAXYIkKAgAAAAAAGgAAAFN1cHBvcnRlZFRyYW5zcG9ydFByb2ZpbGVzAQBH" + + "RAAuAERHRAAAAAwBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public SetSecurityKeysMethodState SetSecurityKeys + { + get + { + return m_setSecurityKeysMethod; + } + + set + { + if (!Object.ReferenceEquals(m_setSecurityKeysMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_setSecurityKeysMethod = value; + } + } + + /// + public AddConnectionMethodState AddConnection + { + get + { + return m_addConnectionMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addConnectionMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addConnectionMethod = value; + } + } + + /// + public RemoveConnectionMethodState RemoveConnection + { + get + { + return m_removeConnectionMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeConnectionMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeConnectionMethod = value; + } + } + + /// + public DataSetFolderState PublishedDataSets + { + get + { + return m_publishedDataSets; + } + + set + { + if (!Object.ReferenceEquals(m_publishedDataSets, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishedDataSets = value; + } + } + + /// + public PubSubStatusState Status + { + get + { + return m_status; + } + + set + { + if (!Object.ReferenceEquals(m_status, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_status = value; + } + } + + /// + public PubSubDiagnosticsRootState Diagnostics + { + get + { + return m_diagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_diagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnostics = value; + } + } + + /// + public PropertyState SupportedTransportProfiles + { + get + { + return m_supportedTransportProfiles; + } + + set + { + if (!Object.ReferenceEquals(m_supportedTransportProfiles, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_supportedTransportProfiles = 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_setSecurityKeysMethod != null) + { + children.Add(m_setSecurityKeysMethod); + } + + if (m_addConnectionMethod != null) + { + children.Add(m_addConnectionMethod); + } + + if (m_removeConnectionMethod != null) + { + children.Add(m_removeConnectionMethod); + } + + if (m_publishedDataSets != null) + { + children.Add(m_publishedDataSets); + } + + if (m_status != null) + { + children.Add(m_status); + } + + if (m_diagnostics != null) + { + children.Add(m_diagnostics); + } + + if (m_supportedTransportProfiles != null) + { + children.Add(m_supportedTransportProfiles); + } + + 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 Opc.Ua.BrowseNames.SetSecurityKeys: + { + if (createOrReplace) + { + if (SetSecurityKeys == null) + { + if (replacement == null) + { + SetSecurityKeys = new SetSecurityKeysMethodState(this); + } + else + { + SetSecurityKeys = (SetSecurityKeysMethodState)replacement; + } + } + } + + instance = SetSecurityKeys; + break; + } + + case Opc.Ua.BrowseNames.AddConnection: + { + if (createOrReplace) + { + if (AddConnection == null) + { + if (replacement == null) + { + AddConnection = new AddConnectionMethodState(this); + } + else + { + AddConnection = (AddConnectionMethodState)replacement; + } + } + } + + instance = AddConnection; + break; + } + + case Opc.Ua.BrowseNames.RemoveConnection: + { + if (createOrReplace) + { + if (RemoveConnection == null) + { + if (replacement == null) + { + RemoveConnection = new RemoveConnectionMethodState(this); + } + else + { + RemoveConnection = (RemoveConnectionMethodState)replacement; + } + } + } + + instance = RemoveConnection; + break; + } + + case Opc.Ua.BrowseNames.PublishedDataSets: + { + if (createOrReplace) + { + if (PublishedDataSets == null) + { + if (replacement == null) + { + PublishedDataSets = new DataSetFolderState(this); + } + else + { + PublishedDataSets = (DataSetFolderState)replacement; + } + } + } + + instance = PublishedDataSets; + break; + } + + case Opc.Ua.BrowseNames.Status: + { + if (createOrReplace) + { + if (Status == null) + { + if (replacement == null) + { + Status = new PubSubStatusState(this); + } + else + { + Status = (PubSubStatusState)replacement; + } + } + } + + instance = Status; + break; + } + + case Opc.Ua.BrowseNames.Diagnostics: + { + if (createOrReplace) + { + if (Diagnostics == null) + { + if (replacement == null) + { + Diagnostics = new PubSubDiagnosticsRootState(this); + } + else + { + Diagnostics = (PubSubDiagnosticsRootState)replacement; + } + } + } + + instance = Diagnostics; + break; + } + + case Opc.Ua.BrowseNames.SupportedTransportProfiles: + { + if (createOrReplace) + { + if (SupportedTransportProfiles == null) + { + if (replacement == null) + { + SupportedTransportProfiles = new PropertyState(this); + } + else + { + SupportedTransportProfiles = (PropertyState)replacement; + } + } + } + + instance = SupportedTransportProfiles; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private SetSecurityKeysMethodState m_setSecurityKeysMethod; + private AddConnectionMethodState m_addConnectionMethod; + private RemoveConnectionMethodState m_removeConnectionMethod; + private DataSetFolderState m_publishedDataSets; + private PubSubStatusState m_status; + private PubSubDiagnosticsRootState m_diagnostics; + private PropertyState m_supportedTransportProfiles; + #endregion + } + #endif + #endregion + + #region SetSecurityKeysMethodState Class + #if (!OPCUA_EXCLUDE_SetSecurityKeysMethodState) + /// + /// Stores an instance of the SetSecurityKeysMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SetSecurityKeysMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SetSecurityKeysMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new SetSecurityKeysMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGQAAAFNldFNlY3VyaXR5S2V5c01ldGhvZFR5cGUBAJJDAC8BAJJDkkMA" + + "AAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCTQwAuAESTQwAAlgcAAAABACoB" + + "AR4AAAAPAAAAU2VjdXJpdHlHcm91cElkAAz/////AAAAAAABACoBASAAAAARAAAAU2VjdXJpdHlQb2xp" + + "Y3lVcmkADP////8AAAAAAAEAKgEBHwAAAA4AAABDdXJyZW50VG9rZW5JZAEAIAH/////AAAAAAABACoB" + + "ARkAAAAKAAAAQ3VycmVudEtleQAP/////wAAAAAAAQAqAQEdAAAACgAAAEZ1dHVyZUtleXMADwEAAAAB" + + "AAAAAAAAAAABACoBAR4AAAANAAAAVGltZVRvTmV4dEtleQEAIgH/////AAAAAAABACoBARwAAAALAAAA" + + "S2V5TGlmZXRpbWUBACIB/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public SetSecurityKeysMethodStateMethodCallHandler 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; + + string securityGroupId = (string)_inputArguments[0]; + string securityPolicyUri = (string)_inputArguments[1]; + uint currentTokenId = (uint)_inputArguments[2]; + byte[] currentKey = (byte[])_inputArguments[3]; + byte[][] futureKeys = (byte[][])_inputArguments[4]; + double timeToNextKey = (double)_inputArguments[5]; + double keyLifetime = (double)_inputArguments[6]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + securityGroupId, + securityPolicyUri, + currentTokenId, + currentKey, + futureKeys, + timeToNextKey, + keyLifetime); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult SetSecurityKeysMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string securityGroupId, + string securityPolicyUri, + uint currentTokenId, + byte[] currentKey, + byte[][] futureKeys, + double timeToNextKey, + double keyLifetime); + #endif + #endregion + + #region AddConnectionMethodState Class + #if (!OPCUA_EXCLUDE_AddConnectionMethodState) + /// + /// Stores an instance of the AddConnectionMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddConnectionMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddConnectionMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddConnectionMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAFwAAAEFkZENvbm5lY3Rpb25NZXRob2RUeXBlAQAzQQAvAQAzQTNBAAAB" + + "Af////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEATkEALgBETkEAAJYBAAAAAQAqAQEe" + + "AAAADQAAAENvbmZpZ3VyYXRpb24BAAE9/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAX" + + "YKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAT0EALgBET0EAAJYBAAAAAQAqAQEbAAAADAAAAENv" + + "bm5lY3Rpb25JZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddConnectionMethodStateMethodCallHandler 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; + + PubSubConnectionDataType configuration = (PubSubConnectionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + NodeId connectionId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configuration, + ref connectionId); + } + + _outputArguments[0] = connectionId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddConnectionMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + PubSubConnectionDataType configuration, + ref NodeId connectionId); + #endif + #endregion + + #region RemoveConnectionMethodState Class + #if (!OPCUA_EXCLUDE_RemoveConnectionMethodState) + /// + /// Stores an instance of the RemoveConnectionMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveConnectionMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveConnectionMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveConnectionMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGgAAAFJlbW92ZUNvbm5lY3Rpb25NZXRob2RUeXBlAQBnNwAvAQBnN2c3" + + "AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAaDcALgBEaDcAAJYBAAAAAQAq" + + "AQEbAAAADAAAAENvbm5lY3Rpb25JZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveConnectionMethodStateMethodCallHandler 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; + + NodeId connectionId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + connectionId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveConnectionMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId connectionId); + #endif + #endregion + + #region PublishedDataSetState Class + #if (!OPCUA_EXCLUDE_PublishedDataSetState) + /// + /// Stores an instance of the PublishedDataSetType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishedDataSetState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishedDataSetState(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(Opc.Ua.ObjectTypes.PublishedDataSetType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (DataSetClassId != null) + { + DataSetClassId.Initialize(context, DataSetClassId_InitializationString); + } + + if (ExtensionFields != null) + { + ExtensionFields.Initialize(context, ExtensionFields_InitializationString); + } + } + + #region Initialization String + private const string DataSetClassId_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAERhdGFTZXRDbGFzc0lkAQB3QQAuAER3QQAAAA7/////AQH/////" + + "AAAAAA=="; + + private const string ExtensionFields_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAEV4dGVuc2lvbkZpZWxkcwEAeTwALwEAgTx5PAAA/////wIAAAAE" + + "YYIKBAAAAAAAEQAAAEFkZEV4dGVuc2lvbkZpZWxkAQB6PAAvAQCDPHo8AAABAf////8CAAAAF2CpCgIA" + + "AAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAezwALgBEezwAAJYCAAAAAQAqAQEYAAAACQAAAEZpZWxkTmFt" + + "ZQAU/////wAAAAAAAQAqAQEZAAAACgAAAEZpZWxkVmFsdWUAGP7///8AAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAHw8AC4ARHw8AACWAQAAAAEA" + + "KgEBFgAAAAcAAABGaWVsZElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoE" + + "AAAAAAAUAAAAUmVtb3ZlRXh0ZW5zaW9uRmllbGQBAH08AC8BAIY8fTwAAAEB/////wEAAAAXYKkKAgAA" + + "AAAADgAAAElucHV0QXJndW1lbnRzAQB+PAAuAER+PAAAlgEAAAABACoBARYAAAAHAAAARmllbGRJZAAR" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAFB1Ymxpc2hlZERhdGFTZXRUeXBlSW5zdGFuY2UBAK04AQCtOK04" + + "AAD/////BAAAABVgiQoCAAAAAAAUAAAAQ29uZmlndXJhdGlvblZlcnNpb24BALc4AC4ARLc4AAABAAE5" + + "/////wEB/////wAAAAAVYIkKAgAAAAAADwAAAERhdGFTZXRNZXRhRGF0YQEAfTsALgBEfTsAAAEAuzj/" + + "////AQH/////AAAAABVgiQoCAAAAAAAOAAAARGF0YVNldENsYXNzSWQBAHdBAC4ARHdBAAAADv////8B" + + "Af////8AAAAABGCACgEAAAAAAA8AAABFeHRlbnNpb25GaWVsZHMBAHk8AC8BAIE8eTwAAP////8CAAAA" + + "BGGCCgQAAAAAABEAAABBZGRFeHRlbnNpb25GaWVsZAEAejwALwEAgzx6PAAAAQH/////AgAAABdgqQoC" + + "AAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAHs8AC4ARHs8AACWAgAAAAEAKgEBGAAAAAkAAABGaWVsZE5h" + + "bWUAFP////8AAAAAAAEAKgEBGQAAAAoAAABGaWVsZFZhbHVlABj+////AAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQB8PAAuAER8PAAAlgEAAAAB" + + "ACoBARYAAAAHAAAARmllbGRJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIK" + + "BAAAAAAAFAAAAFJlbW92ZUV4dGVuc2lvbkZpZWxkAQB9PAAvAQCGPH08AAABAf////8BAAAAF2CpCgIA" + + "AAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAfjwALgBEfjwAAJYBAAAAAQAqAQEWAAAABwAAAEZpZWxkSWQA" + + "Ef////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ConfigurationVersion + { + get + { + return m_configurationVersion; + } + + set + { + if (!Object.ReferenceEquals(m_configurationVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_configurationVersion = value; + } + } + + /// + public PropertyState DataSetMetaData + { + get + { + return m_dataSetMetaData; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetMetaData, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetMetaData = value; + } + } + + /// + public PropertyState DataSetClassId + { + get + { + return m_dataSetClassId; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetClassId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetClassId = value; + } + } + + /// + public ExtensionFieldsState ExtensionFields + { + get + { + return m_extensionFields; + } + + set + { + if (!Object.ReferenceEquals(m_extensionFields, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_extensionFields = 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_configurationVersion != null) + { + children.Add(m_configurationVersion); + } + + if (m_dataSetMetaData != null) + { + children.Add(m_dataSetMetaData); + } + + if (m_dataSetClassId != null) + { + children.Add(m_dataSetClassId); + } + + if (m_extensionFields != null) + { + children.Add(m_extensionFields); + } + + 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 Opc.Ua.BrowseNames.ConfigurationVersion: + { + if (createOrReplace) + { + if (ConfigurationVersion == null) + { + if (replacement == null) + { + ConfigurationVersion = new PropertyState(this); + } + else + { + ConfigurationVersion = (PropertyState)replacement; + } + } + } + + instance = ConfigurationVersion; + break; + } + + case Opc.Ua.BrowseNames.DataSetMetaData: + { + if (createOrReplace) + { + if (DataSetMetaData == null) + { + if (replacement == null) + { + DataSetMetaData = new PropertyState(this); + } + else + { + DataSetMetaData = (PropertyState)replacement; + } + } + } + + instance = DataSetMetaData; + break; + } + + case Opc.Ua.BrowseNames.DataSetClassId: + { + if (createOrReplace) + { + if (DataSetClassId == null) + { + if (replacement == null) + { + DataSetClassId = new PropertyState(this); + } + else + { + DataSetClassId = (PropertyState)replacement; + } + } + } + + instance = DataSetClassId; + break; + } + + case Opc.Ua.BrowseNames.ExtensionFields: + { + if (createOrReplace) + { + if (ExtensionFields == null) + { + if (replacement == null) + { + ExtensionFields = new ExtensionFieldsState(this); + } + else + { + ExtensionFields = (ExtensionFieldsState)replacement; + } + } + } + + instance = ExtensionFields; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_configurationVersion; + private PropertyState m_dataSetMetaData; + private PropertyState m_dataSetClassId; + private ExtensionFieldsState m_extensionFields; + #endregion + } + #endif + #endregion + + #region ExtensionFieldsState Class + #if (!OPCUA_EXCLUDE_ExtensionFieldsState) + /// + /// Stores an instance of the ExtensionFieldsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ExtensionFieldsState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ExtensionFieldsState(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(Opc.Ua.ObjectTypes.ExtensionFieldsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGwAAAEV4dGVuc2lvbkZpZWxkc1R5cGVJbnN0YW5jZQEAgTwBAIE8gTwA" + + "AP////8CAAAABGGCCgQAAAAAABEAAABBZGRFeHRlbnNpb25GaWVsZAEAgzwALwEAgzyDPAAAAQH/////" + + "AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIQ8AC4ARIQ8AACWAgAAAAEAKgEBGAAAAAkA" + + "AABGaWVsZE5hbWUAFP////8AAAAAAAEAKgEBGQAAAAoAAABGaWVsZFZhbHVlABj+////AAAAAAABACgB" + + "AQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCFPAAuAESF" + + "PAAAlgEAAAABACoBARYAAAAHAAAARmllbGRJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAEYYIKBAAAAAAAFAAAAFJlbW92ZUV4dGVuc2lvbkZpZWxkAQCGPAAvAQCGPIY8AAABAf////8B" + + "AAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAhzwALgBEhzwAAJYBAAAAAQAqAQEWAAAABwAA" + + "AEZpZWxkSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public AddExtensionFieldMethodState AddExtensionField + { + get + { + return m_addExtensionFieldMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addExtensionFieldMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addExtensionFieldMethod = value; + } + } + + /// + public RemoveExtensionFieldMethodState RemoveExtensionField + { + get + { + return m_removeExtensionFieldMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeExtensionFieldMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeExtensionFieldMethod = 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_addExtensionFieldMethod != null) + { + children.Add(m_addExtensionFieldMethod); + } + + if (m_removeExtensionFieldMethod != null) + { + children.Add(m_removeExtensionFieldMethod); + } + + 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 Opc.Ua.BrowseNames.AddExtensionField: + { + if (createOrReplace) + { + if (AddExtensionField == null) + { + if (replacement == null) + { + AddExtensionField = new AddExtensionFieldMethodState(this); + } + else + { + AddExtensionField = (AddExtensionFieldMethodState)replacement; + } + } + } + + instance = AddExtensionField; + break; + } + + case Opc.Ua.BrowseNames.RemoveExtensionField: + { + if (createOrReplace) + { + if (RemoveExtensionField == null) + { + if (replacement == null) + { + RemoveExtensionField = new RemoveExtensionFieldMethodState(this); + } + else + { + RemoveExtensionField = (RemoveExtensionFieldMethodState)replacement; + } + } + } + + instance = RemoveExtensionField; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private AddExtensionFieldMethodState m_addExtensionFieldMethod; + private RemoveExtensionFieldMethodState m_removeExtensionFieldMethod; + #endregion + } + #endif + #endregion + + #region AddExtensionFieldMethodState Class + #if (!OPCUA_EXCLUDE_AddExtensionFieldMethodState) + /// + /// Stores an instance of the AddExtensionFieldMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddExtensionFieldMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddExtensionFieldMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddExtensionFieldMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGwAAAEFkZEV4dGVuc2lvbkZpZWxkTWV0aG9kVHlwZQEAiDwALwEAiDyI" + + "PAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIk8AC4ARIk8AACWAgAAAAEA" + + "KgEBGAAAAAkAAABGaWVsZE5hbWUAFP////8AAAAAAAEAKgEBGQAAAAoAAABGaWVsZFZhbHVlABj+////" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRz" + + "AQCKPAAuAESKPAAAlgEAAAABACoBARYAAAAHAAAARmllbGRJZAAR/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddExtensionFieldMethodStateMethodCallHandler 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; + + QualifiedName fieldName = (QualifiedName)_inputArguments[0]; + object fieldValue = (object)_inputArguments[1]; + + NodeId fieldId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fieldName, + fieldValue, + ref fieldId); + } + + _outputArguments[0] = fieldId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddExtensionFieldMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + QualifiedName fieldName, + object fieldValue, + ref NodeId fieldId); + #endif + #endregion + + #region RemoveExtensionFieldMethodState Class + #if (!OPCUA_EXCLUDE_RemoveExtensionFieldMethodState) + /// + /// Stores an instance of the RemoveExtensionFieldMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveExtensionFieldMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveExtensionFieldMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveExtensionFieldMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHgAAAFJlbW92ZUV4dGVuc2lvbkZpZWxkTWV0aG9kVHlwZQEAizwALwEA" + + "izyLPAAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIw8AC4ARIw8AACWAQAA" + + "AAEAKgEBFgAAAAcAAABGaWVsZElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveExtensionFieldMethodStateMethodCallHandler 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; + + NodeId fieldId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + fieldId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveExtensionFieldMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId fieldId); + #endif + #endregion + + #region PublishedDataItemsState Class + #if (!OPCUA_EXCLUDE_PublishedDataItemsState) + /// + /// Stores an instance of the PublishedDataItemsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishedDataItemsState : PublishedDataSetState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishedDataItemsState(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(Opc.Ua.ObjectTypes.PublishedDataItemsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (AddVariables != null) + { + AddVariables.Initialize(context, AddVariables_InitializationString); + } + + if (RemoveVariables != null) + { + RemoveVariables.Initialize(context, RemoveVariables_InitializationString); + } + } + + #region Initialization String + private const string AddVariables_InitializationString = + "//////////8EYYIKBAAAAAAADAAAAEFkZFZhcmlhYmxlcwEA2zgALwEA2zjbOAAAAQH/////AgAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBANw4AC4ARNw4AACWBAAAAAEAKgEBJQAAABQAAABDb25m" + + "aWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBASMAAAAQAAAARmllbGROYW1lQWxpYXNlcwAM" + + "AQAAAAEAAAAAAAAAAAEAKgEBIQAAAA4AAABQcm9tb3RlZEZpZWxkcwABAQAAAAEAAAAAAAAAAAEAKgEB" + + "IwAAAA4AAABWYXJpYWJsZXNUb0FkZAEAwTcBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA3TgALgBE3TgAAJYCAAAAAQAqAQEoAAAA" + + "FwAAAE5ld0NvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8AAAAAAAEAKgEBHQAAAAoAAABBZGRSZXN1" + + "bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string RemoveVariables_InitializationString = + "//////////8EYYIKBAAAAAAADwAAAFJlbW92ZVZhcmlhYmxlcwEA3jgALwEA3jjeOAAAAQH/////AgAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAN84AC4ARN84AACWAgAAAAEAKgEBJQAAABQAAABD" + + "b25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBASQAAAARAAAAVmFyaWFibGVzVG9SZW1v" + + "dmUABwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0" + + "cHV0QXJndW1lbnRzAQDgOAAuAETgOAAAlgIAAAABACoBASgAAAAXAAAATmV3Q29uZmlndXJhdGlvblZl" + + "cnNpb24BAAE5/////wAAAAAAAQAqAQEgAAAADQAAAFJlbW92ZVJlc3VsdHMAEwEAAAABAAAAAAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHgAAAFB1Ymxpc2hlZERhdGFJdGVtc1R5cGVJbnN0YW5jZQEAxjgBAMY4" + + "xjgAAP////8FAAAAFWCJCgIAAAAAABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEA0DgALgBE0DgAAAEA" + + "ATn/////AQH/////AAAAABVgiQoCAAAAAAAPAAAARGF0YVNldE1ldGFEYXRhAQCFOwAuAESFOwAAAQC7" + + "OP////8BAf////8AAAAAF2CJCgIAAAAAAA0AAABQdWJsaXNoZWREYXRhAQDUOAAuAETUOAAAAQDBNwEA" + + "AAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAADAAAAEFkZFZhcmlhYmxlcwEA2zgALwEA2zjbOAAA" + + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBANw4AC4ARNw4AACWBAAAAAEAKgEB" + + "JQAAABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBASMAAAAQAAAARmllbGRO" + + "YW1lQWxpYXNlcwAMAQAAAAEAAAAAAAAAAAEAKgEBIQAAAA4AAABQcm9tb3RlZEZpZWxkcwABAQAAAAEA" + + "AAAAAAAAAAEAKgEBIwAAAA4AAABWYXJpYWJsZXNUb0FkZAEAwTcBAAAAAQAAAAAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA3TgALgBE3TgAAJYC" + + "AAAAAQAqAQEoAAAAFwAAAE5ld0NvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8AAAAAAAEAKgEBHQAA" + + "AAoAAABBZGRSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIK" + + "BAAAAAAADwAAAFJlbW92ZVZhcmlhYmxlcwEA3jgALwEA3jjeOAAAAQH/////AgAAABdgqQoCAAAAAAAO" + + "AAAASW5wdXRBcmd1bWVudHMBAN84AC4ARN84AACWAgAAAAEAKgEBJQAAABQAAABDb25maWd1cmF0aW9u" + + "VmVyc2lvbgEAATn/////AAAAAAABACoBASQAAAARAAAAVmFyaWFibGVzVG9SZW1vdmUABwEAAAABAAAA" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRz" + + "AQDgOAAuAETgOAAAlgIAAAABACoBASgAAAAXAAAATmV3Q29uZmlndXJhdGlvblZlcnNpb24BAAE5////" + + "/wAAAAAAAQAqAQEgAAAADQAAAFJlbW92ZVJlc3VsdHMAEwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState PublishedData + { + get + { + return m_publishedData; + } + + set + { + if (!Object.ReferenceEquals(m_publishedData, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishedData = value; + } + } + + /// + public PublishedDataItemsAddVariablesMethodState AddVariables + { + get + { + return m_addVariablesMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addVariablesMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addVariablesMethod = value; + } + } + + /// + public PublishedDataItemsRemoveVariablesMethodState RemoveVariables + { + get + { + return m_removeVariablesMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeVariablesMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeVariablesMethod = 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_publishedData != null) + { + children.Add(m_publishedData); + } + + if (m_addVariablesMethod != null) + { + children.Add(m_addVariablesMethod); + } + + if (m_removeVariablesMethod != null) + { + children.Add(m_removeVariablesMethod); + } + + 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 Opc.Ua.BrowseNames.PublishedData: + { + if (createOrReplace) + { + if (PublishedData == null) + { + if (replacement == null) + { + PublishedData = new PropertyState(this); + } + else + { + PublishedData = (PropertyState)replacement; + } + } + } + + instance = PublishedData; + break; + } + + case Opc.Ua.BrowseNames.AddVariables: + { + if (createOrReplace) + { + if (AddVariables == null) + { + if (replacement == null) + { + AddVariables = new PublishedDataItemsAddVariablesMethodState(this); + } + else + { + AddVariables = (PublishedDataItemsAddVariablesMethodState)replacement; + } + } + } + + instance = AddVariables; + break; + } + + case Opc.Ua.BrowseNames.RemoveVariables: + { + if (createOrReplace) + { + if (RemoveVariables == null) + { + if (replacement == null) + { + RemoveVariables = new PublishedDataItemsRemoveVariablesMethodState(this); + } + else + { + RemoveVariables = (PublishedDataItemsRemoveVariablesMethodState)replacement; + } + } + } + + instance = RemoveVariables; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_publishedData; + private PublishedDataItemsAddVariablesMethodState m_addVariablesMethod; + private PublishedDataItemsRemoveVariablesMethodState m_removeVariablesMethod; + #endregion + } + #endif + #endregion + + #region PublishedDataItemsAddVariablesMethodState Class + #if (!OPCUA_EXCLUDE_PublishedDataItemsAddVariablesMethodState) + /// + /// Stores an instance of the PublishedDataItemsAddVariablesMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishedDataItemsAddVariablesMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishedDataItemsAddVariablesMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PublishedDataItemsAddVariablesMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAKAAAAFB1Ymxpc2hlZERhdGFJdGVtc0FkZFZhcmlhYmxlc01ldGhvZFR5" + + "cGUBAOQ4AC8BAOQ45DgAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDlOAAu" + + "AETlOAAAlgQAAAABACoBASUAAAAUAAAAQ29uZmlndXJhdGlvblZlcnNpb24BAAE5/////wAAAAAAAQAq" + + "AQEjAAAAEAAAAEZpZWxkTmFtZUFsaWFzZXMADAEAAAABAAAAAAAAAAABACoBASEAAAAOAAAAUHJvbW90" + + "ZWRGaWVsZHMAAQEAAAABAAAAAAAAAAABACoBASMAAAAOAAAAVmFyaWFibGVzVG9BZGQBAME3AQAAAAEA" + + "AAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVu" + + "dHMBAOY4AC4AROY4AACWAgAAAAEAKgEBKAAAABcAAABOZXdDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/" + + "////AAAAAAABACoBAR0AAAAKAAAAQWRkUmVzdWx0cwATAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAA" + + "AAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PublishedDataItemsAddVariablesMethodStateMethodCallHandler 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; + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + string[] fieldNameAliases = (string[])_inputArguments[1]; + bool[] promotedFields = (bool[])_inputArguments[2]; + PublishedVariableDataType[] variablesToAdd = (PublishedVariableDataType[])ExtensionObject.ToArray(_inputArguments[3], typeof(PublishedVariableDataType)); + + ConfigurationVersionDataType newConfigurationVersion = (ConfigurationVersionDataType)_outputArguments[0]; + StatusCode[] addResults = (StatusCode[])_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configurationVersion, + fieldNameAliases, + promotedFields, + variablesToAdd, + ref newConfigurationVersion, + ref addResults); + } + + _outputArguments[0] = newConfigurationVersion; + _outputArguments[1] = addResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PublishedDataItemsAddVariablesMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ConfigurationVersionDataType configurationVersion, + string[] fieldNameAliases, + bool[] promotedFields, + PublishedVariableDataType[] variablesToAdd, + ref ConfigurationVersionDataType newConfigurationVersion, + ref StatusCode[] addResults); + #endif + #endregion + + #region PublishedDataItemsRemoveVariablesMethodState Class + #if (!OPCUA_EXCLUDE_PublishedDataItemsRemoveVariablesMethodState) + /// + /// Stores an instance of the PublishedDataItemsRemoveVariablesMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishedDataItemsRemoveVariablesMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishedDataItemsRemoveVariablesMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PublishedDataItemsRemoveVariablesMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAKwAAAFB1Ymxpc2hlZERhdGFJdGVtc1JlbW92ZVZhcmlhYmxlc01ldGhv" + + "ZFR5cGUBAOc4AC8BAOc45zgAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDo" + + "OAAuAEToOAAAlgIAAAABACoBASUAAAAUAAAAQ29uZmlndXJhdGlvblZlcnNpb24BAAE5/////wAAAAAA" + + "AQAqAQEkAAAAEQAAAFZhcmlhYmxlc1RvUmVtb3ZlAAcBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA6TgALgBE6TgAAJYCAAAAAQAq" + + "AQEoAAAAFwAAAE5ld0NvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8AAAAAAAEAKgEBIAAAAA0AAABS" + + "ZW1vdmVSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PublishedDataItemsRemoveVariablesMethodStateMethodCallHandler 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; + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + uint[] variablesToRemove = (uint[])_inputArguments[1]; + + ConfigurationVersionDataType newConfigurationVersion = (ConfigurationVersionDataType)_outputArguments[0]; + StatusCode[] removeResults = (StatusCode[])_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configurationVersion, + variablesToRemove, + ref newConfigurationVersion, + ref removeResults); + } + + _outputArguments[0] = newConfigurationVersion; + _outputArguments[1] = removeResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PublishedDataItemsRemoveVariablesMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ConfigurationVersionDataType configurationVersion, + uint[] variablesToRemove, + ref ConfigurationVersionDataType newConfigurationVersion, + ref StatusCode[] removeResults); + #endif + #endregion + + #region PublishedEventsState Class + #if (!OPCUA_EXCLUDE_PublishedEventsState) + /// + /// Stores an instance of the PublishedEventsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishedEventsState : PublishedDataSetState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishedEventsState(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(Opc.Ua.ObjectTypes.PublishedEventsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (ModifyFieldSelection != null) + { + ModifyFieldSelection.Initialize(context, ModifyFieldSelection_InitializationString); + } + } + + #region Initialization String + private const string ModifyFieldSelection_InitializationString = + "//////////8EYYIKBAAAAAAAFAAAAE1vZGlmeUZpZWxkU2VsZWN0aW9uAQDMOgAvAQDMOsw6AAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAzToALgBEzToAAJYEAAAAAQAqAQElAAAA" + + "FAAAAENvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8AAAAAAAEAKgEBIwAAABAAAABGaWVsZE5hbWVB" + + "bGlhc2VzAAwBAAAAAQAAAAAAAAAAAQAqAQEhAAAADgAAAFByb21vdGVkRmllbGRzAAEBAAAAAQAAAAAA" + + "AAAAAQAqAQEjAAAADgAAAFNlbGVjdGVkRmllbGRzAQBZAgEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAA" + + "AAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCdPAAuAESdPAAAlgEAAAAB" + + "ACoBASgAAAAXAAAATmV3Q29uZmlndXJhdGlvblZlcnNpb24BAAE5/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGwAAAFB1Ymxpc2hlZEV2ZW50c1R5cGVJbnN0YW5jZQEA7DgBAOw47DgA" + + "AP////8GAAAAFWCJCgIAAAAAABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEA9jgALgBE9jgAAAEAATn/" + + "////AQH/////AAAAABVgiQoCAAAAAAAPAAAARGF0YVNldE1ldGFEYXRhAQCNOwAuAESNOwAAAQC7OP//" + + "//8BAf////8AAAAAFWDJCgIAAAATAAAAUHViU3ViRXZlbnROb3RpZmllcgAADQAAAEV2ZW50Tm90aWZp" + + "ZXIBAPo4AC4ARPo4AAAAEf////8BAf////8AAAAAF2CJCgIAAAAAAA4AAABTZWxlY3RlZEZpZWxkcwEA" + + "+zgALgBE+zgAAAEAWQIBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAAYAAABGaWx0ZXIBAPw4" + + "AC4ARPw4AAABAEoC/////wEB/////wAAAAAEYYIKBAAAAAAAFAAAAE1vZGlmeUZpZWxkU2VsZWN0aW9u" + + "AQDMOgAvAQDMOsw6AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAzToALgBE" + + "zToAAJYEAAAAAQAqAQElAAAAFAAAAENvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8AAAAAAAEAKgEB" + + "IwAAABAAAABGaWVsZE5hbWVBbGlhc2VzAAwBAAAAAQAAAAAAAAAAAQAqAQEhAAAADgAAAFByb21vdGVk" + + "RmllbGRzAAEBAAAAAQAAAAAAAAAAAQAqAQEjAAAADgAAAFNlbGVjdGVkRmllbGRzAQBZAgEAAAABAAAA" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRz" + + "AQCdPAAuAESdPAAAlgEAAAABACoBASgAAAAXAAAATmV3Q29uZmlndXJhdGlvblZlcnNpb24BAAE5////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState PubSubEventNotifier + { + get + { + return m_pubSubEventNotifier; + } + + set + { + if (!Object.ReferenceEquals(m_pubSubEventNotifier, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_pubSubEventNotifier = value; + } + } + + /// + public PropertyState SelectedFields + { + get + { + return m_selectedFields; + } + + set + { + if (!Object.ReferenceEquals(m_selectedFields, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_selectedFields = value; + } + } + + /// + public PropertyState Filter + { + get + { + return m_filter; + } + + set + { + if (!Object.ReferenceEquals(m_filter, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_filter = value; + } + } + + /// + public PublishedEventsTypeModifyFieldSelectionMethodState ModifyFieldSelection + { + get + { + return m_modifyFieldSelectionMethod; + } + + set + { + if (!Object.ReferenceEquals(m_modifyFieldSelectionMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_modifyFieldSelectionMethod = 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_pubSubEventNotifier != null) + { + children.Add(m_pubSubEventNotifier); + } + + if (m_selectedFields != null) + { + children.Add(m_selectedFields); + } + + if (m_filter != null) + { + children.Add(m_filter); + } + + if (m_modifyFieldSelectionMethod != null) + { + children.Add(m_modifyFieldSelectionMethod); + } + + 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 Opc.Ua.BrowseNames.PubSubEventNotifier: + { + if (createOrReplace) + { + if (PubSubEventNotifier == null) + { + if (replacement == null) + { + PubSubEventNotifier = new PropertyState(this); + } + else + { + PubSubEventNotifier = (PropertyState)replacement; + } + } + } + + instance = PubSubEventNotifier; + break; + } + + case Opc.Ua.BrowseNames.SelectedFields: + { + if (createOrReplace) + { + if (SelectedFields == null) + { + if (replacement == null) + { + SelectedFields = new PropertyState(this); + } + else + { + SelectedFields = (PropertyState)replacement; + } + } + } + + instance = SelectedFields; + break; + } + + case Opc.Ua.BrowseNames.Filter: + { + if (createOrReplace) + { + if (Filter == null) + { + if (replacement == null) + { + Filter = new PropertyState(this); + } + else + { + Filter = (PropertyState)replacement; + } + } + } + + instance = Filter; + break; + } + + case Opc.Ua.BrowseNames.ModifyFieldSelection: + { + if (createOrReplace) + { + if (ModifyFieldSelection == null) + { + if (replacement == null) + { + ModifyFieldSelection = new PublishedEventsTypeModifyFieldSelectionMethodState(this); + } + else + { + ModifyFieldSelection = (PublishedEventsTypeModifyFieldSelectionMethodState)replacement; + } + } + } + + instance = ModifyFieldSelection; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_pubSubEventNotifier; + private PropertyState m_selectedFields; + private PropertyState m_filter; + private PublishedEventsTypeModifyFieldSelectionMethodState m_modifyFieldSelectionMethod; + #endregion + } + #endif + #endregion + + #region PublishedEventsTypeModifyFieldSelectionMethodState Class + #if (!OPCUA_EXCLUDE_PublishedEventsTypeModifyFieldSelectionMethodState) + /// + /// Stores an instance of the PublishedEventsTypeModifyFieldSelectionMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PublishedEventsTypeModifyFieldSelectionMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PublishedEventsTypeModifyFieldSelectionMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PublishedEventsTypeModifyFieldSelectionMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAMQAAAFB1Ymxpc2hlZEV2ZW50c1R5cGVNb2RpZnlGaWVsZFNlbGVjdGlv" + + "bk1ldGhvZFR5cGUBAM46AC8BAM46zjoAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1l" + + "bnRzAQDPOgAuAETPOgAAlgQAAAABACoBASUAAAAUAAAAQ29uZmlndXJhdGlvblZlcnNpb24BAAE5////" + + "/wAAAAAAAQAqAQEjAAAAEAAAAEZpZWxkTmFtZUFsaWFzZXMADAEAAAABAAAAAAAAAAABACoBASEAAAAO" + + "AAAAUHJvbW90ZWRGaWVsZHMAAQEAAAABAAAAAAAAAAABACoBASMAAAAOAAAAU2VsZWN0ZWRGaWVsZHMB" + + "AFkCAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRw" + + "dXRBcmd1bWVudHMBAJ48AC4ARJ48AACWAQAAAAEAKgEBKAAAABcAAABOZXdDb25maWd1cmF0aW9uVmVy" + + "c2lvbgEAATn/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PublishedEventsTypeModifyFieldSelectionMethodStateMethodCallHandler 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; + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + string[] fieldNameAliases = (string[])_inputArguments[1]; + bool[] promotedFields = (bool[])_inputArguments[2]; + SimpleAttributeOperand[] selectedFields = (SimpleAttributeOperand[])ExtensionObject.ToArray(_inputArguments[3], typeof(SimpleAttributeOperand)); + + ConfigurationVersionDataType newConfigurationVersion = (ConfigurationVersionDataType)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configurationVersion, + fieldNameAliases, + promotedFields, + selectedFields, + ref newConfigurationVersion); + } + + _outputArguments[0] = newConfigurationVersion; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PublishedEventsTypeModifyFieldSelectionMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ConfigurationVersionDataType configurationVersion, + string[] fieldNameAliases, + bool[] promotedFields, + SimpleAttributeOperand[] selectedFields, + ref ConfigurationVersionDataType newConfigurationVersion); + #endif + #endregion + + #region DataSetFolderState Class + #if (!OPCUA_EXCLUDE_DataSetFolderState) + /// + /// Stores an instance of the DataSetFolderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetFolderState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetFolderState(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(Opc.Ua.ObjectTypes.DataSetFolderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (AddPublishedDataItems != null) + { + AddPublishedDataItems.Initialize(context, AddPublishedDataItems_InitializationString); + } + + if (AddPublishedEvents != null) + { + AddPublishedEvents.Initialize(context, AddPublishedEvents_InitializationString); + } + + if (AddPublishedDataItemsTemplate != null) + { + AddPublishedDataItemsTemplate.Initialize(context, AddPublishedDataItemsTemplate_InitializationString); + } + + if (AddPublishedEventsTemplate != null) + { + AddPublishedEventsTemplate.Initialize(context, AddPublishedEventsTemplate_InitializationString); + } + + if (RemovePublishedDataSet != null) + { + RemovePublishedDataSet.Initialize(context, RemovePublishedDataSet_InitializationString); + } + + if (AddDataSetFolder != null) + { + AddDataSetFolder.Initialize(context, AddDataSetFolder_InitializationString); + } + + if (RemoveDataSetFolder != null) + { + RemoveDataSetFolder.Initialize(context, RemoveDataSetFolder_InitializationString); + } + } + + #region Initialization String + private const string AddPublishedDataItems_InitializationString = + "//////////8EYYIKBAAAAAAAFQAAAEFkZFB1Ymxpc2hlZERhdGFJdGVtcwEAnTgALwEAnTidOAAAAQH/" + + "////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAJ44AC4ARJ44AACWBAAAAAEAKgEBEwAA" + + "AAQAAABOYW1lAAz/////AAAAAAABACoBASMAAAAQAAAARmllbGROYW1lQWxpYXNlcwAMAQAAAAEAAAAA" + + "AAAAAAEAKgEBHwAAAAoAAABGaWVsZEZsYWdzAQAgPgEAAAABAAAAAAAAAAABACoBASMAAAAOAAAAVmFy" + + "aWFibGVzVG9BZGQBAME3AQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIA" + + "AAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAJ84AC4ARJ84AACWAwAAAAEAKgEBHAAAAA0AAABEYXRhU2V0" + + "Tm9kZUlkABH/////AAAAAAABACoBASUAAAAUAAAAQ29uZmlndXJhdGlvblZlcnNpb24BAAE5/////wAA" + + "AAAAAQAqAQEdAAAACgAAAEFkZFJlc3VsdHMAEwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/" + + "////AAAAAA=="; + + private const string AddPublishedEvents_InitializationString = + "//////////8EYYIKBAAAAAAAEgAAAEFkZFB1Ymxpc2hlZEV2ZW50cwEAoDgALwEAoDigOAAAAQH/////" + + "AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAKE4AC4ARKE4AACWBgAAAAEAKgEBEwAAAAQA" + + "AABOYW1lAAz/////AAAAAAABACoBARwAAAANAAAARXZlbnROb3RpZmllcgAR/////wAAAAAAAQAqAQEj" + + "AAAAEAAAAEZpZWxkTmFtZUFsaWFzZXMADAEAAAABAAAAAAAAAAABACoBAR8AAAAKAAAARmllbGRGbGFn" + + "cwEAID4BAAAAAQAAAAAAAAAAAQAqAQEjAAAADgAAAFNlbGVjdGVkRmllbGRzAQBZAgEAAAABAAAAAAAA" + + "AAABACoBARcAAAAGAAAARmlsdGVyAQBKAv////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA" + + "F2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAKI4AC4ARKI4AACWAgAAAAEAKgEBJQAAABQAAABD" + + "b25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBARwAAAANAAAARGF0YVNldE5vZGVJZAAR" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string AddPublishedDataItemsTemplate_InitializationString = + "//////////8EYYIKBAAAAAAAHQAAAEFkZFB1Ymxpc2hlZERhdGFJdGVtc1RlbXBsYXRlAQAnQgAvAQAn" + + "QidCAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAPkIALgBEPkIAAJYDAAAA" + + "AQAqAQETAAAABAAAAE5hbWUADP////8AAAAAAAEAKgEBIAAAAA8AAABEYXRhU2V0TWV0YURhdGEBALs4" + + "/////wAAAAAAAQAqAQEjAAAADgAAAFZhcmlhYmxlc1RvQWRkAQDBNwEAAAABAAAAAAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQA/QgAuAEQ/QgAA" + + "lgIAAAABACoBARwAAAANAAAARGF0YVNldE5vZGVJZAAR/////wAAAAAAAQAqAQEdAAAACgAAAEFkZFJl" + + "c3VsdHMAEwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string AddPublishedEventsTemplate_InitializationString = + "//////////8EYYIKBAAAAAAAGgAAAEFkZFB1Ymxpc2hlZEV2ZW50c1RlbXBsYXRlAQBAQgAvAQBAQkBC" + + "AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAQUIALgBEQUIAAJYFAAAAAQAq" + + "AQETAAAABAAAAE5hbWUADP////8AAAAAAAEAKgEBIAAAAA8AAABEYXRhU2V0TWV0YURhdGEBALs4////" + + "/wAAAAAAAQAqAQEcAAAADQAAAEV2ZW50Tm90aWZpZXIAEf////8AAAAAAAEAKgEBIwAAAA4AAABTZWxl" + + "Y3RlZEZpZWxkcwEAWQIBAAAAAQAAAAAAAAAAAQAqAQEXAAAABgAAAEZpbHRlcgEASgL/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQBLQgAu" + + "AERLQgAAlgEAAAABACoBARwAAAANAAAARGF0YVNldE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAA="; + + private const string RemovePublishedDataSet_InitializationString = + "//////////8EYYIKBAAAAAAAFgAAAFJlbW92ZVB1Ymxpc2hlZERhdGFTZXQBAKM4AC8BAKM4ozgAAAEB" + + "/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCkOAAuAESkOAAAlgEAAAABACoBARwA" + + "AAANAAAARGF0YVNldE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string AddDataSetFolder_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAEFkZERhdGFTZXRGb2xkZXIBAGJCAC8BAGJCYkIAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBjQgAuAERjQgAAlgEAAAABACoBARMAAAAEAAAA" + + "TmFtZQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1" + + "dEFyZ3VtZW50cwEAZEIALgBEZEIAAJYBAAAAAQAqAQEiAAAAEwAAAERhdGFTZXRGb2xkZXJOb2RlSWQA" + + "Ef////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string RemoveDataSetFolder_InitializationString = + "//////////8EYYIKBAAAAAAAEwAAAFJlbW92ZURhdGFTZXRGb2xkZXIBAGVCAC8BAGVCZUIAAAEB////" + + "/wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBvQgAuAERvQgAAlgEAAAABACoBASIAAAAT" + + "AAAARGF0YVNldEZvbGRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGQAAAERhdGFTZXRGb2xkZXJUeXBlSW5zdGFuY2UBAI04AQCNOI04AAD/" + + "////BwAAAARhggoEAAAAAAAVAAAAQWRkUHVibGlzaGVkRGF0YUl0ZW1zAQCdOAAvAQCdOJ04AAABAf//" + + "//8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAnjgALgBEnjgAAJYEAAAAAQAqAQETAAAA" + + "BAAAAE5hbWUADP////8AAAAAAAEAKgEBIwAAABAAAABGaWVsZE5hbWVBbGlhc2VzAAwBAAAAAQAAAAAA" + + "AAAAAQAqAQEfAAAACgAAAEZpZWxkRmxhZ3MBACA+AQAAAAEAAAAAAAAAAAEAKgEBIwAAAA4AAABWYXJp" + + "YWJsZXNUb0FkZAEAwTcBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAA" + + "AAAADwAAAE91dHB1dEFyZ3VtZW50cwEAnzgALgBEnzgAAJYDAAAAAQAqAQEcAAAADQAAAERhdGFTZXRO" + + "b2RlSWQAEf////8AAAAAAAEAKgEBJQAAABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAA" + + "AAABACoBAR0AAAAKAAAAQWRkUmVzdWx0cwATAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAABGGCCgQAAAAAABIAAABBZGRQdWJsaXNoZWRFdmVudHMBAKA4AC8BAKA4oDgAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQChOAAuAEShOAAAlgYAAAABACoBARMAAAAEAAAA" + + "TmFtZQAM/////wAAAAAAAQAqAQEcAAAADQAAAEV2ZW50Tm90aWZpZXIAEf////8AAAAAAAEAKgEBIwAA" + + "ABAAAABGaWVsZE5hbWVBbGlhc2VzAAwBAAAAAQAAAAAAAAAAAQAqAQEfAAAACgAAAEZpZWxkRmxhZ3MB" + + "ACA+AQAAAAEAAAAAAAAAAAEAKgEBIwAAAA4AAABTZWxlY3RlZEZpZWxkcwEAWQIBAAAAAQAAAAAAAAAA" + + "AQAqAQEXAAAABgAAAEZpbHRlcgEASgL/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdg" + + "qQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCiOAAuAESiOAAAlgIAAAABACoBASUAAAAUAAAAQ29u" + + "ZmlndXJhdGlvblZlcnNpb24BAAE5/////wAAAAAAAQAqAQEcAAAADQAAAERhdGFTZXROb2RlSWQAEf//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAAB0AAABBZGRQdWJsaXNoZWRE" + + "YXRhSXRlbXNUZW1wbGF0ZQEAJ0IALwEAJ0InQgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRB" + + "cmd1bWVudHMBAD5CAC4ARD5CAACWAwAAAAEAKgEBEwAAAAQAAABOYW1lAAz/////AAAAAAABACoBASAA" + + "AAAPAAAARGF0YVNldE1ldGFEYXRhAQC7OP////8AAAAAAAEAKgEBIwAAAA4AAABWYXJpYWJsZXNUb0Fk" + + "ZAEAwTcBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91" + + "dHB1dEFyZ3VtZW50cwEAP0IALgBEP0IAAJYCAAAAAQAqAQEcAAAADQAAAERhdGFTZXROb2RlSWQAEf//" + + "//8AAAAAAAEAKgEBHQAAAAoAAABBZGRSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAAEYYIKBAAAAAAAGgAAAEFkZFB1Ymxpc2hlZEV2ZW50c1RlbXBsYXRlAQBAQgAvAQBA" + + "QkBCAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAQUIALgBEQUIAAJYFAAAA" + + "AQAqAQETAAAABAAAAE5hbWUADP////8AAAAAAAEAKgEBIAAAAA8AAABEYXRhU2V0TWV0YURhdGEBALs4" + + "/////wAAAAAAAQAqAQEcAAAADQAAAEV2ZW50Tm90aWZpZXIAEf////8AAAAAAAEAKgEBIwAAAA4AAABT" + + "ZWxlY3RlZEZpZWxkcwEAWQIBAAAAAQAAAAAAAAAAAQAqAQEXAAAABgAAAEZpbHRlcgEASgL/////AAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQBL" + + "QgAuAERLQgAAlgEAAAABACoBARwAAAANAAAARGF0YVNldE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAAFgAAAFJlbW92ZVB1Ymxpc2hlZERhdGFTZXQBAKM4AC8B" + + "AKM4ozgAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCkOAAuAESkOAAAlgEA" + + "AAABACoBARwAAAANAAAARGF0YVNldE5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAAEYYIKBAAAAAAAEAAAAEFkZERhdGFTZXRGb2xkZXIBAGJCAC8BAGJCYkIAAAEB/////wIAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBjQgAuAERjQgAAlgEAAAABACoBARMAAAAEAAAATmFt" + + "ZQAM/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFy" + + "Z3VtZW50cwEAZEIALgBEZEIAAJYBAAAAAQAqAQEiAAAAEwAAAERhdGFTZXRGb2xkZXJOb2RlSWQAEf//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAABGGCCgQAAAAAABMAAABSZW1vdmVEYXRhU2V0" + + "Rm9sZGVyAQBlQgAvAQBlQmVCAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA" + + "b0IALgBEb0IAAJYBAAAAAQAqAQEiAAAAEwAAAERhdGFTZXRGb2xkZXJOb2RlSWQAEf////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public AddPublishedDataItemsMethodState AddPublishedDataItems + { + get + { + return m_addPublishedDataItemsMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addPublishedDataItemsMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addPublishedDataItemsMethod = value; + } + } + + /// + public AddPublishedEventsMethodState AddPublishedEvents + { + get + { + return m_addPublishedEventsMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addPublishedEventsMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addPublishedEventsMethod = value; + } + } + + /// + public AddPublishedDataItemsTemplateMethodState AddPublishedDataItemsTemplate + { + get + { + return m_addPublishedDataItemsTemplateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addPublishedDataItemsTemplateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addPublishedDataItemsTemplateMethod = value; + } + } + + /// + public AddPublishedEventsTemplateMethodState AddPublishedEventsTemplate + { + get + { + return m_addPublishedEventsTemplateMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addPublishedEventsTemplateMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addPublishedEventsTemplateMethod = value; + } + } + + /// + public RemovePublishedDataSetMethodState RemovePublishedDataSet + { + get + { + return m_removePublishedDataSetMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removePublishedDataSetMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removePublishedDataSetMethod = value; + } + } + + /// + public AddDataSetFolderMethodState AddDataSetFolder + { + get + { + return m_addDataSetFolderMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addDataSetFolderMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addDataSetFolderMethod = value; + } + } + + /// + public RemoveDataSetFolderMethodState RemoveDataSetFolder + { + get + { + return m_removeDataSetFolderMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeDataSetFolderMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeDataSetFolderMethod = 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_addPublishedDataItemsMethod != null) + { + children.Add(m_addPublishedDataItemsMethod); + } + + if (m_addPublishedEventsMethod != null) + { + children.Add(m_addPublishedEventsMethod); + } + + if (m_addPublishedDataItemsTemplateMethod != null) + { + children.Add(m_addPublishedDataItemsTemplateMethod); + } + + if (m_addPublishedEventsTemplateMethod != null) + { + children.Add(m_addPublishedEventsTemplateMethod); + } + + if (m_removePublishedDataSetMethod != null) + { + children.Add(m_removePublishedDataSetMethod); + } + + if (m_addDataSetFolderMethod != null) + { + children.Add(m_addDataSetFolderMethod); + } + + if (m_removeDataSetFolderMethod != null) + { + children.Add(m_removeDataSetFolderMethod); + } + + 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 Opc.Ua.BrowseNames.AddPublishedDataItems: + { + if (createOrReplace) + { + if (AddPublishedDataItems == null) + { + if (replacement == null) + { + AddPublishedDataItems = new AddPublishedDataItemsMethodState(this); + } + else + { + AddPublishedDataItems = (AddPublishedDataItemsMethodState)replacement; + } + } + } + + instance = AddPublishedDataItems; + break; + } + + case Opc.Ua.BrowseNames.AddPublishedEvents: + { + if (createOrReplace) + { + if (AddPublishedEvents == null) + { + if (replacement == null) + { + AddPublishedEvents = new AddPublishedEventsMethodState(this); + } + else + { + AddPublishedEvents = (AddPublishedEventsMethodState)replacement; + } + } + } + + instance = AddPublishedEvents; + break; + } + + case Opc.Ua.BrowseNames.AddPublishedDataItemsTemplate: + { + if (createOrReplace) + { + if (AddPublishedDataItemsTemplate == null) + { + if (replacement == null) + { + AddPublishedDataItemsTemplate = new AddPublishedDataItemsTemplateMethodState(this); + } + else + { + AddPublishedDataItemsTemplate = (AddPublishedDataItemsTemplateMethodState)replacement; + } + } + } + + instance = AddPublishedDataItemsTemplate; + break; + } + + case Opc.Ua.BrowseNames.AddPublishedEventsTemplate: + { + if (createOrReplace) + { + if (AddPublishedEventsTemplate == null) + { + if (replacement == null) + { + AddPublishedEventsTemplate = new AddPublishedEventsTemplateMethodState(this); + } + else + { + AddPublishedEventsTemplate = (AddPublishedEventsTemplateMethodState)replacement; + } + } + } + + instance = AddPublishedEventsTemplate; + break; + } + + case Opc.Ua.BrowseNames.RemovePublishedDataSet: + { + if (createOrReplace) + { + if (RemovePublishedDataSet == null) + { + if (replacement == null) + { + RemovePublishedDataSet = new RemovePublishedDataSetMethodState(this); + } + else + { + RemovePublishedDataSet = (RemovePublishedDataSetMethodState)replacement; + } + } + } + + instance = RemovePublishedDataSet; + break; + } + + case Opc.Ua.BrowseNames.AddDataSetFolder: + { + if (createOrReplace) + { + if (AddDataSetFolder == null) + { + if (replacement == null) + { + AddDataSetFolder = new AddDataSetFolderMethodState(this); + } + else + { + AddDataSetFolder = (AddDataSetFolderMethodState)replacement; + } + } + } + + instance = AddDataSetFolder; + break; + } + + case Opc.Ua.BrowseNames.RemoveDataSetFolder: + { + if (createOrReplace) + { + if (RemoveDataSetFolder == null) + { + if (replacement == null) + { + RemoveDataSetFolder = new RemoveDataSetFolderMethodState(this); + } + else + { + RemoveDataSetFolder = (RemoveDataSetFolderMethodState)replacement; + } + } + } + + instance = RemoveDataSetFolder; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private AddPublishedDataItemsMethodState m_addPublishedDataItemsMethod; + private AddPublishedEventsMethodState m_addPublishedEventsMethod; + private AddPublishedDataItemsTemplateMethodState m_addPublishedDataItemsTemplateMethod; + private AddPublishedEventsTemplateMethodState m_addPublishedEventsTemplateMethod; + private RemovePublishedDataSetMethodState m_removePublishedDataSetMethod; + private AddDataSetFolderMethodState m_addDataSetFolderMethod; + private RemoveDataSetFolderMethodState m_removeDataSetFolderMethod; + #endregion + } + #endif + #endregion + + #region AddPublishedDataItemsMethodState Class + #if (!OPCUA_EXCLUDE_AddPublishedDataItemsMethodState) + /// + /// Stores an instance of the AddPublishedDataItemsMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddPublishedDataItemsMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddPublishedDataItemsMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddPublishedDataItemsMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHwAAAEFkZFB1Ymxpc2hlZERhdGFJdGVtc01ldGhvZFR5cGUBAKU4AC8B" + + "AKU4pTgAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCmOAAuAESmOAAAlgQA" + + "AAABACoBARMAAAAEAAAATmFtZQAM/////wAAAAAAAQAqAQEjAAAAEAAAAEZpZWxkTmFtZUFsaWFzZXMA" + + "DAEAAAABAAAAAAAAAAABACoBAR8AAAAKAAAARmllbGRGbGFncwEAID4BAAAAAQAAAAAAAAAAAQAqAQEj" + + "AAAADgAAAFZhcmlhYmxlc1RvQWRkAQDBNwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCnOAAuAESnOAAAlgMAAAABACoBARwAAAAN" + + "AAAARGF0YVNldE5vZGVJZAAR/////wAAAAAAAQAqAQElAAAAFAAAAENvbmZpZ3VyYXRpb25WZXJzaW9u" + + "AQABOf////8AAAAAAAEAKgEBHQAAAAoAAABBZGRSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddPublishedDataItemsMethodStateMethodCallHandler 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; + + string name = (string)_inputArguments[0]; + string[] fieldNameAliases = (string[])_inputArguments[1]; + ushort[] fieldFlags = (ushort[])_inputArguments[2]; + PublishedVariableDataType[] variablesToAdd = (PublishedVariableDataType[])ExtensionObject.ToArray(_inputArguments[3], typeof(PublishedVariableDataType)); + + NodeId dataSetNodeId = (NodeId)_outputArguments[0]; + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)_outputArguments[1]; + StatusCode[] addResults = (StatusCode[])_outputArguments[2]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + name, + fieldNameAliases, + fieldFlags, + variablesToAdd, + ref dataSetNodeId, + ref configurationVersion, + ref addResults); + } + + _outputArguments[0] = dataSetNodeId; + _outputArguments[1] = configurationVersion; + _outputArguments[2] = addResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddPublishedDataItemsMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string name, + string[] fieldNameAliases, + ushort[] fieldFlags, + PublishedVariableDataType[] variablesToAdd, + ref NodeId dataSetNodeId, + ref ConfigurationVersionDataType configurationVersion, + ref StatusCode[] addResults); + #endif + #endregion + + #region AddPublishedEventsMethodState Class + #if (!OPCUA_EXCLUDE_AddPublishedEventsMethodState) + /// + /// Stores an instance of the AddPublishedEventsMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddPublishedEventsMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddPublishedEventsMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddPublishedEventsMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHAAAAEFkZFB1Ymxpc2hlZEV2ZW50c01ldGhvZFR5cGUBAKg4AC8BAKg4" + + "qDgAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCpOAAuAESpOAAAlgYAAAAB" + + "ACoBARMAAAAEAAAATmFtZQAM/////wAAAAAAAQAqAQEcAAAADQAAAEV2ZW50Tm90aWZpZXIAEf////8A" + + "AAAAAAEAKgEBIwAAABAAAABGaWVsZE5hbWVBbGlhc2VzAAwBAAAAAQAAAAAAAAAAAQAqAQEfAAAACgAA" + + "AEZpZWxkRmxhZ3MBACA+AQAAAAEAAAAAAAAAAAEAKgEBIwAAAA4AAABTZWxlY3RlZEZpZWxkcwEAWQIB" + + "AAAAAQAAAAAAAAAAAQAqAQEXAAAABgAAAEZpbHRlcgEASgL/////AAAAAAABACgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQCqOAAuAESqOAAAlgIAAAABACoB" + + "ASUAAAAUAAAAQ29uZmlndXJhdGlvblZlcnNpb24BAAE5/////wAAAAAAAQAqAQEcAAAADQAAAERhdGFT" + + "ZXROb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddPublishedEventsMethodStateMethodCallHandler 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; + + string name = (string)_inputArguments[0]; + NodeId eventNotifier = (NodeId)_inputArguments[1]; + string[] fieldNameAliases = (string[])_inputArguments[2]; + ushort[] fieldFlags = (ushort[])_inputArguments[3]; + SimpleAttributeOperand[] selectedFields = (SimpleAttributeOperand[])ExtensionObject.ToArray(_inputArguments[4], typeof(SimpleAttributeOperand)); + ContentFilter filter = (ContentFilter)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[5]); + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)_outputArguments[0]; + NodeId dataSetNodeId = (NodeId)_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + name, + eventNotifier, + fieldNameAliases, + fieldFlags, + selectedFields, + filter, + ref configurationVersion, + ref dataSetNodeId); + } + + _outputArguments[0] = configurationVersion; + _outputArguments[1] = dataSetNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddPublishedEventsMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string name, + NodeId eventNotifier, + string[] fieldNameAliases, + ushort[] fieldFlags, + SimpleAttributeOperand[] selectedFields, + ContentFilter filter, + ref ConfigurationVersionDataType configurationVersion, + ref NodeId dataSetNodeId); + #endif + #endregion + + #region AddPublishedDataItemsTemplateMethodState Class + #if (!OPCUA_EXCLUDE_AddPublishedDataItemsTemplateMethodState) + /// + /// Stores an instance of the AddPublishedDataItemsTemplateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddPublishedDataItemsTemplateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddPublishedDataItemsTemplateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddPublishedDataItemsTemplateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAJwAAAEFkZFB1Ymxpc2hlZERhdGFJdGVtc1RlbXBsYXRlTWV0aG9kVHlw" + + "ZQEAhkIALwEAhkKGQgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAIdCAC4A" + + "RIdCAACWAwAAAAEAKgEBEwAAAAQAAABOYW1lAAz/////AAAAAAABACoBASAAAAAPAAAARGF0YVNldE1l" + + "dGFEYXRhAQC7OP////8AAAAAAAEAKgEBIwAAAA4AAABWYXJpYWJsZXNUb0FkZAEAwTcBAAAAAQAAAAAA" + + "AAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEA" + + "iEIALgBEiEIAAJYCAAAAAQAqAQEcAAAADQAAAERhdGFTZXROb2RlSWQAEf////8AAAAAAAEAKgEBHQAA" + + "AAoAAABBZGRSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddPublishedDataItemsTemplateMethodStateMethodCallHandler 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; + + string name = (string)_inputArguments[0]; + DataSetMetaDataType dataSetMetaData = (DataSetMetaDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[1]); + PublishedVariableDataType[] variablesToAdd = (PublishedVariableDataType[])ExtensionObject.ToArray(_inputArguments[2], typeof(PublishedVariableDataType)); + + NodeId dataSetNodeId = (NodeId)_outputArguments[0]; + StatusCode[] addResults = (StatusCode[])_outputArguments[1]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + name, + dataSetMetaData, + variablesToAdd, + ref dataSetNodeId, + ref addResults); + } + + _outputArguments[0] = dataSetNodeId; + _outputArguments[1] = addResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddPublishedDataItemsTemplateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string name, + DataSetMetaDataType dataSetMetaData, + PublishedVariableDataType[] variablesToAdd, + ref NodeId dataSetNodeId, + ref StatusCode[] addResults); + #endif + #endregion + + #region AddPublishedEventsTemplateMethodState Class + #if (!OPCUA_EXCLUDE_AddPublishedEventsTemplateMethodState) + /// + /// Stores an instance of the AddPublishedEventsTemplateMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddPublishedEventsTemplateMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddPublishedEventsTemplateMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddPublishedEventsTemplateMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAJAAAAEFkZFB1Ymxpc2hlZEV2ZW50c1RlbXBsYXRlTWV0aG9kVHlwZQEA" + + "iUIALwEAiUKJQgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAJNCAC4ARJNC" + + "AACWBQAAAAEAKgEBEwAAAAQAAABOYW1lAAz/////AAAAAAABACoBASAAAAAPAAAARGF0YVNldE1ldGFE" + + "YXRhAQC7OP////8AAAAAAAEAKgEBHAAAAA0AAABFdmVudE5vdGlmaWVyABH/////AAAAAAABACoBASMA" + + "AAAOAAAAU2VsZWN0ZWRGaWVsZHMBAFkCAQAAAAEAAAAAAAAAAAEAKgEBFwAAAAYAAABGaWx0ZXIBAEoC" + + "/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3Vt" + + "ZW50cwEAqkIALgBEqkIAAJYBAAAAAQAqAQEcAAAADQAAAERhdGFTZXROb2RlSWQAEf////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddPublishedEventsTemplateMethodStateMethodCallHandler 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; + + string name = (string)_inputArguments[0]; + DataSetMetaDataType dataSetMetaData = (DataSetMetaDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[1]); + NodeId eventNotifier = (NodeId)_inputArguments[2]; + SimpleAttributeOperand[] selectedFields = (SimpleAttributeOperand[])ExtensionObject.ToArray(_inputArguments[3], typeof(SimpleAttributeOperand)); + ContentFilter filter = (ContentFilter)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[4]); + + NodeId dataSetNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + name, + dataSetMetaData, + eventNotifier, + selectedFields, + filter, + ref dataSetNodeId); + } + + _outputArguments[0] = dataSetNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddPublishedEventsTemplateMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string name, + DataSetMetaDataType dataSetMetaData, + NodeId eventNotifier, + SimpleAttributeOperand[] selectedFields, + ContentFilter filter, + ref NodeId dataSetNodeId); + #endif + #endregion + + #region RemovePublishedDataSetMethodState Class + #if (!OPCUA_EXCLUDE_RemovePublishedDataSetMethodState) + /// + /// Stores an instance of the RemovePublishedDataSetMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemovePublishedDataSetMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemovePublishedDataSetMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemovePublishedDataSetMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAIAAAAFJlbW92ZVB1Ymxpc2hlZERhdGFTZXRNZXRob2RUeXBlAQCrOAAv" + + "AQCrOKs4AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEArDgALgBErDgAAJYB" + + "AAAAAQAqAQEcAAAADQAAAERhdGFTZXROb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemovePublishedDataSetMethodStateMethodCallHandler 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; + + NodeId dataSetNodeId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + dataSetNodeId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemovePublishedDataSetMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId dataSetNodeId); + #endif + #endregion + + #region AddDataSetFolderMethodState Class + #if (!OPCUA_EXCLUDE_AddDataSetFolderMethodState) + /// + /// Stores an instance of the AddDataSetFolderMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AddDataSetFolderMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AddDataSetFolderMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new AddDataSetFolderMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAGgAAAEFkZERhdGFTZXRGb2xkZXJNZXRob2RUeXBlAQCrQgAvAQCrQqtC" + + "AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEArEIALgBErEIAAJYBAAAAAQAq" + + "AQETAAAABAAAAE5hbWUADP////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAA" + + "AA8AAABPdXRwdXRBcmd1bWVudHMBAK1CAC4ARK1CAACWAQAAAAEAKgEBIgAAABMAAABEYXRhU2V0Rm9s" + + "ZGVyTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public AddDataSetFolderMethodStateMethodCallHandler 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; + + string name = (string)_inputArguments[0]; + + NodeId dataSetFolderNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + name, + ref dataSetFolderNodeId); + } + + _outputArguments[0] = dataSetFolderNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult AddDataSetFolderMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string name, + ref NodeId dataSetFolderNodeId); + #endif + #endregion + + #region RemoveDataSetFolderMethodState Class + #if (!OPCUA_EXCLUDE_RemoveDataSetFolderMethodState) + /// + /// Stores an instance of the RemoveDataSetFolderMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RemoveDataSetFolderMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public RemoveDataSetFolderMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new RemoveDataSetFolderMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAHQAAAFJlbW92ZURhdGFTZXRGb2xkZXJNZXRob2RUeXBlAQC3QgAvAQC3" + + "QrdCAAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAMUMALgBEMUMAAJYBAAAA" + + "AQAqAQEiAAAAEwAAAERhdGFTZXRGb2xkZXJOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public RemoveDataSetFolderMethodStateMethodCallHandler 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; + + NodeId dataSetFolderNodeId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + dataSetFolderNodeId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult RemoveDataSetFolderMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId dataSetFolderNodeId); + #endif + #endregion + + #region PubSubConnectionState Class + #if (!OPCUA_EXCLUDE_PubSubConnectionState) + /// + /// Stores an instance of the PubSubConnectionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubConnectionState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubConnectionState(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(Opc.Ua.ObjectTypes.PubSubConnectionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (TransportSettings != null) + { + TransportSettings.Initialize(context, TransportSettings_InitializationString); + } + + if (Diagnostics != null) + { + Diagnostics.Initialize(context, Diagnostics_InitializationString); + } + + if (AddWriterGroup != null) + { + AddWriterGroup.Initialize(context, AddWriterGroup_InitializationString); + } + + if (AddReaderGroup != null) + { + AddReaderGroup.Initialize(context, AddReaderGroup_InitializationString); + } + + if (RemoveGroup != null) + { + RemoveGroup.Initialize(context, RemoveGroup_InitializationString); + } + } + + #region Initialization String + private const string TransportSettings_InitializationString = + "//////////8EYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQAzQwAvAQA5RTNDAAD/////AAAA" + + "AA=="; + + private const string Diagnostics_InitializationString = + "//////////8EYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQApSwAvAQBKTSlLAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAKksALwA/KksAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAK0sALwEADU0rSwAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQAsSwAuAEQsSwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAC1LAC4ARC1LAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAC5LAC4ARC5LAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBADBLAC8BAA1NMEsAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAMUsA" + + "LgBEMUsAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAySwAuAEQy" + + "SwAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAzSwAuAEQz" + + "SwAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEANUsALwEA6Uw1SwAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBADZLAC8APzZLAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAN0sALwA6N0sAAP////8GAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQA4SwAvAQANTThLAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBADlLAC4ARDlL" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAOksALgBEOksAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQA7SwAuAEQ7" + + "SwAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEAPUsALwEADU09SwAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQA+SwAu" + + "AEQ+SwAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAD9LAC4ARD9L" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAQEsA" + + "LgBEQEsAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBAEJLAC8BAA1NQksAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "Q0sALgBEQ0sAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBESwAu" + + "AERESwAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "AEVLAC4AREVLAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEAR0sALwEADU1HSwAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQBISwAuAERISwAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AElLAC4ARElLAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEASksALgBESksAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQBMSwAvAQANTUxLAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBAE1LAC4ARE1LAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "TksALgBETksAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQBPSwAuAERPSwAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAUUsALwEADU1RSwAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQBSSwAuAERSSwAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AFNLAC4ARFNLAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAVEsALgBEVEsAAAYAAAAAAQALTf////8BAf////8AAAAABGCACgEAAAAAAAoAAABMaXZlVmFs" + + "dWVzAQBWSwAvADpWSwAA/////wEAAAAVYIkKAgAAAAAADwAAAFJlc29sdmVkQWRkcmVzcwEAV0sALwA/" + + "V0sAAAAM/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAFhLAC4ARFhL" + + "AAAGAAAAAAEAC03/////AQH/////AAAAAA=="; + + private const string AddWriterGroup_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAEFkZFdyaXRlckdyb3VwAQATRAAvAQATRBNEAAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAFEQALgBEFEQAAJYBAAAAAQAqAQEeAAAADQAAAENv" + + "bmZpZ3VyYXRpb24BAHg8/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAA" + + "DwAAAE91dHB1dEFyZ3VtZW50cwEAMEQALgBEMEQAAJYBAAAAAQAqAQEWAAAABwAAAEdyb3VwSWQAEf//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string AddReaderGroup_InitializationString = + "//////////8EYYIKBAAAAAAADgAAAEFkZFJlYWRlckdyb3VwAQA5RAAvAQA5RDlEAAABAf////8CAAAA" + + "F2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAY0QALgBEY0QAAJYBAAAAAQAqAQEeAAAADQAAAENv" + + "bmZpZ3VyYXRpb24BAKA8/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAA" + + "DwAAAE91dHB1dEFyZ3VtZW50cwEAZEQALgBEZEQAAJYBAAAAAQAqAQEWAAAABwAAAEdyb3VwSWQAEf//" + + "//8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string RemoveGroup_InitializationString = + "//////////8EYYIKBAAAAAAACwAAAFJlbW92ZUdyb3VwAQCRNwAvAQCRN5E3AAABAf////8BAAAAF2Cp" + + "CgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAkjcALgBEkjcAAJYBAAAAAQAqAQEWAAAABwAAAEdyb3Vw" + + "SWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAHAAAAFB1YlN1YkNvbm5lY3Rpb25UeXBlSW5zdGFuY2UBAIE3AQCBN4E3" + + "AAD/////CgAAABVgiQoCAAAAAAALAAAAUHVibGlzaGVySWQBAAM5AC4ARAM5AAAAGP////8BAf////8A" + + "AAAAFWCJCgIAAAAAABMAAABUcmFuc3BvcnRQcm9maWxlVXJpAQCaQwAvAQC1P5pDAAAADP////8BAf//" + + "//8BAAAAF2CJCgIAAAAAAAoAAABTZWxlY3Rpb25zAQAuRQAuAEQuRQAAABgBAAAAAQAAAAAAAAABAf//" + + "//8AAAAAF2CJCgIAAAAAABQAAABDb25uZWN0aW9uUHJvcGVydGllcwEATUQALgBETUQAAAEAxTgBAAAA" + + "AQAAAAAAAAABAf////8AAAAABGCACgEAAAAAAAcAAABBZGRyZXNzAQCNNwAvAQCZUo03AAD/////AQAA" + + "ABVgiQoCAAAAAAAQAAAATmV0d29ya0ludGVyZmFjZQEAMkMALwEAtT8yQwAAAAz/////AQH/////AQAA" + + "ABdgiQoCAAAAAAAKAAAAU2VsZWN0aW9ucwEAqEQALgBEqEQAAAAYAQAAAAEAAAAAAAAAAQH/////AAAA" + + "AARggAoBAAAAAAARAAAAVHJhbnNwb3J0U2V0dGluZ3MBADNDAC8BADlFM0MAAP////8AAAAABGCACgEA" + + "AAAAAAYAAABTdGF0dXMBAAg5AC8BADM5CDkAAP////8BAAAAFWCJCgIAAAAAAAUAAABTdGF0ZQEACTkA" + + "LwA/CTkAAAEANzn/////AQH/////AAAAAARggAoBAAAAAAALAAAARGlhZ25vc3RpY3MBAClLAC8BAEpN" + + "KUsAAP////8HAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAqSwAvAD8qSwAAAQALTf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABAAAABUb3RhbEluZm9ybWF0aW9uAQArSwAvAQANTStLAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBACxLAC4ARCxLAAAAAf////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEALUsALgBELUsAAAEAEk3/////AQH/////AAAAABVg" + + "iQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEALksALgBELksAAAEAC03/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAVG90YWxFcnJvcgEAMEsALwEADU0wSwAAAAf/////AQH/////AwAAABVgiQoCAAAA" + + "AAAGAAAAQWN0aXZlAQAxSwAuAEQxSwAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xhc3Np" + + "ZmljYXRpb24BADJLAC4ARDJLAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0" + + "aWNzTGV2ZWwBADNLAC4ARDNLAAABAAtN/////wEB/////wAAAAAEYYIKBAAAAAAABQAAAFJlc2V0AQA1" + + "SwAvAQDpTDVLAAABAf////8AAAAAFWCJCgIAAAAAAAgAAABTdWJFcnJvcgEANksALwA/NksAAAAB////" + + "/wEB/////wAAAAAEYIAKAQAAAAAACAAAAENvdW50ZXJzAQA3SwAvADo3SwAA/////wYAAAAVYIkKAgAA" + + "AAAACgAAAFN0YXRlRXJyb3IBADhLAC8BAA1NOEsAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAA" + + "AEFjdGl2ZQEAOUsALgBEOUsAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0" + + "aW9uAQA6SwAuAEQ6SwAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0" + + "aWNzTGV2ZWwBADtLAC4ARDtLAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAYAAAAU3Rh" + + "dGVPcGVyYXRpb25hbEJ5TWV0aG9kAQA9SwAvAQANTT1LAAAAB/////8BAf////8DAAAAFWCJCgIAAAAA" + + "AAYAAABBY3RpdmUBAD5LAC4ARD5LAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lm" + + "aWNhdGlvbgEAP0sALgBEP0sAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFn" + + "bm9zdGljc0xldmVsAQBASwAuAERASwAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAA" + + "AFN0YXRlT3BlcmF0aW9uYWxCeVBhcmVudAEAQksALwEADU1CSwAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQBDSwAuAERDSwAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAERLAC4ARERLAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAA" + + "RGlhZ25vc3RpY3NMZXZlbAEARUsALgBERUsAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABkAAABTdGF0ZU9wZXJhdGlvbmFsRnJvbUVycm9yAQBHSwAvAQANTUdLAAAAB/////8BAf////8DAAAA" + + "FWCJCgIAAAAAAAYAAABBY3RpdmUBAEhLAC4AREhLAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4A" + + "AABDbGFzc2lmaWNhdGlvbgEASUsALgBESUsAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAA" + + "ABAAAABEaWFnbm9zdGljc0xldmVsAQBKSwAuAERKSwAABgAAAAABAAtN/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAEwAAAFN0YXRlUGF1c2VkQnlQYXJlbnQBAExLAC8BAA1NTEsAAAAH/////wEB/////wMAAAAV" + + "YIkKAgAAAAAABgAAAEFjdGl2ZQEATUsALgBETUsAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAA" + + "AENsYXNzaWZpY2F0aW9uAQBOSwAuAEROSwAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBAE9LAC4ARE9LAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAVAAAAU3RhdGVEaXNhYmxlZEJ5TWV0aG9kAQBRSwAvAQANTVFLAAAAB/////8BAf////8DAAAA" + + "FWCJCgIAAAAAAAYAAABBY3RpdmUBAFJLAC4ARFJLAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4A" + + "AABDbGFzc2lmaWNhdGlvbgEAU0sALgBEU0sAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAA" + + "ABAAAABEaWFnbm9zdGljc0xldmVsAQBUSwAuAERUSwAABgAAAAABAAtN/////wEB/////wAAAAAEYIAK" + + "AQAAAAAACgAAAExpdmVWYWx1ZXMBAFZLAC8AOlZLAAD/////AQAAABVgiQoCAAAAAAAPAAAAUmVzb2x2" + + "ZWRBZGRyZXNzAQBXSwAvAD9XSwAAAAz/////AQH/////AQAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3Rp" + + "Y3NMZXZlbAEAWEsALgBEWEsAAAYAAAAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAA4AAABBZGRX" + + "cml0ZXJHcm91cAEAE0QALwEAE0QTRAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBABREAC4ARBREAACWAQAAAAEAKgEBHgAAAA0AAABDb25maWd1cmF0aW9uAQB4PP////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBADBEAC4A" + + "RDBEAACWAQAAAAEAKgEBFgAAAAcAAABHcm91cElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/" + + "////AAAAAARhggoEAAAAAAAOAAAAQWRkUmVhZGVyR3JvdXABADlEAC8BADlEOUQAAAEB/////wIAAAAX" + + "YKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBjRAAuAERjRAAAlgEAAAABACoBAR4AAAANAAAAQ29u" + + "ZmlndXJhdGlvbgEAoDz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAP" + + "AAAAT3V0cHV0QXJndW1lbnRzAQBkRAAuAERkRAAAlgEAAAABACoBARYAAAAHAAAAR3JvdXBJZAAR////" + + "/wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAAACwAAAFJlbW92ZUdyb3VwAQCR" + + "NwAvAQCRN5E3AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAkjcALgBEkjcA" + + "AJYBAAAAAQAqAQEWAAAABwAAAEdyb3VwSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState PublisherId + { + get + { + return m_publisherId; + } + + set + { + if (!Object.ReferenceEquals(m_publisherId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publisherId = value; + } + } + + /// + public SelectionListState TransportProfileUri + { + get + { + return m_transportProfileUri; + } + + set + { + if (!Object.ReferenceEquals(m_transportProfileUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportProfileUri = value; + } + } + + /// + public PropertyState ConnectionProperties + { + get + { + return m_connectionProperties; + } + + set + { + if (!Object.ReferenceEquals(m_connectionProperties, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_connectionProperties = value; + } + } + + /// + public NetworkAddressState Address + { + get + { + return m_address; + } + + set + { + if (!Object.ReferenceEquals(m_address, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_address = value; + } + } + + /// + public ConnectionTransportState TransportSettings + { + get + { + return m_transportSettings; + } + + set + { + if (!Object.ReferenceEquals(m_transportSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportSettings = value; + } + } + + /// + public PubSubStatusState Status + { + get + { + return m_status; + } + + set + { + if (!Object.ReferenceEquals(m_status, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_status = value; + } + } + + /// + public PubSubDiagnosticsConnectionState Diagnostics + { + get + { + return m_diagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_diagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnostics = value; + } + } + + /// + public PubSubConnectionTypeAddWriterGroupMethodState AddWriterGroup + { + get + { + return m_addWriterGroupMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addWriterGroupMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addWriterGroupMethod = value; + } + } + + /// + public PubSubConnectionAddReaderGroupGroupMethodState AddReaderGroup + { + get + { + return m_addReaderGroupMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addReaderGroupMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addReaderGroupMethod = value; + } + } + + /// + public PubSubConnectionTypeRemoveGroupMethodState RemoveGroup + { + get + { + return m_removeGroupMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeGroupMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeGroupMethod = 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_publisherId != null) + { + children.Add(m_publisherId); + } + + if (m_transportProfileUri != null) + { + children.Add(m_transportProfileUri); + } + + if (m_connectionProperties != null) + { + children.Add(m_connectionProperties); + } + + if (m_address != null) + { + children.Add(m_address); + } + + if (m_transportSettings != null) + { + children.Add(m_transportSettings); + } + + if (m_status != null) + { + children.Add(m_status); + } + + if (m_diagnostics != null) + { + children.Add(m_diagnostics); + } + + if (m_addWriterGroupMethod != null) + { + children.Add(m_addWriterGroupMethod); + } + + if (m_addReaderGroupMethod != null) + { + children.Add(m_addReaderGroupMethod); + } + + if (m_removeGroupMethod != null) + { + children.Add(m_removeGroupMethod); + } + + 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 Opc.Ua.BrowseNames.PublisherId: + { + if (createOrReplace) + { + if (PublisherId == null) + { + if (replacement == null) + { + PublisherId = new PropertyState(this); + } + else + { + PublisherId = (PropertyState)replacement; + } + } + } + + instance = PublisherId; + break; + } + + case Opc.Ua.BrowseNames.TransportProfileUri: + { + if (createOrReplace) + { + if (TransportProfileUri == null) + { + if (replacement == null) + { + TransportProfileUri = new SelectionListState(this); + } + else + { + TransportProfileUri = (SelectionListState)replacement; + } + } + } + + instance = TransportProfileUri; + break; + } + + case Opc.Ua.BrowseNames.ConnectionProperties: + { + if (createOrReplace) + { + if (ConnectionProperties == null) + { + if (replacement == null) + { + ConnectionProperties = new PropertyState(this); + } + else + { + ConnectionProperties = (PropertyState)replacement; + } + } + } + + instance = ConnectionProperties; + break; + } + + case Opc.Ua.BrowseNames.Address: + { + if (createOrReplace) + { + if (Address == null) + { + if (replacement == null) + { + Address = new NetworkAddressState(this); + } + else + { + Address = (NetworkAddressState)replacement; + } + } + } + + instance = Address; + break; + } + + case Opc.Ua.BrowseNames.TransportSettings: + { + if (createOrReplace) + { + if (TransportSettings == null) + { + if (replacement == null) + { + TransportSettings = new ConnectionTransportState(this); + } + else + { + TransportSettings = (ConnectionTransportState)replacement; + } + } + } + + instance = TransportSettings; + break; + } + + case Opc.Ua.BrowseNames.Status: + { + if (createOrReplace) + { + if (Status == null) + { + if (replacement == null) + { + Status = new PubSubStatusState(this); + } + else + { + Status = (PubSubStatusState)replacement; + } + } + } + + instance = Status; + break; + } + + case Opc.Ua.BrowseNames.Diagnostics: + { + if (createOrReplace) + { + if (Diagnostics == null) + { + if (replacement == null) + { + Diagnostics = new PubSubDiagnosticsConnectionState(this); + } + else + { + Diagnostics = (PubSubDiagnosticsConnectionState)replacement; + } + } + } + + instance = Diagnostics; + break; + } + + case Opc.Ua.BrowseNames.AddWriterGroup: + { + if (createOrReplace) + { + if (AddWriterGroup == null) + { + if (replacement == null) + { + AddWriterGroup = new PubSubConnectionTypeAddWriterGroupMethodState(this); + } + else + { + AddWriterGroup = (PubSubConnectionTypeAddWriterGroupMethodState)replacement; + } + } + } + + instance = AddWriterGroup; + break; + } + + case Opc.Ua.BrowseNames.AddReaderGroup: + { + if (createOrReplace) + { + if (AddReaderGroup == null) + { + if (replacement == null) + { + AddReaderGroup = new PubSubConnectionAddReaderGroupGroupMethodState(this); + } + else + { + AddReaderGroup = (PubSubConnectionAddReaderGroupGroupMethodState)replacement; + } + } + } + + instance = AddReaderGroup; + break; + } + + case Opc.Ua.BrowseNames.RemoveGroup: + { + if (createOrReplace) + { + if (RemoveGroup == null) + { + if (replacement == null) + { + RemoveGroup = new PubSubConnectionTypeRemoveGroupMethodState(this); + } + else + { + RemoveGroup = (PubSubConnectionTypeRemoveGroupMethodState)replacement; + } + } + } + + instance = RemoveGroup; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_publisherId; + private SelectionListState m_transportProfileUri; + private PropertyState m_connectionProperties; + private NetworkAddressState m_address; + private ConnectionTransportState m_transportSettings; + private PubSubStatusState m_status; + private PubSubDiagnosticsConnectionState m_diagnostics; + private PubSubConnectionTypeAddWriterGroupMethodState m_addWriterGroupMethod; + private PubSubConnectionAddReaderGroupGroupMethodState m_addReaderGroupMethod; + private PubSubConnectionTypeRemoveGroupMethodState m_removeGroupMethod; + #endregion + } + #endif + #endregion + + #region PubSubConnectionTypeAddWriterGroupMethodState Class + #if (!OPCUA_EXCLUDE_PubSubConnectionTypeAddWriterGroupMethodState) + /// + /// Stores an instance of the PubSubConnectionTypeAddWriterGroupMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubConnectionTypeAddWriterGroupMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubConnectionTypeAddWriterGroupMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubConnectionTypeAddWriterGroupMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAALAAAAFB1YlN1YkNvbm5lY3Rpb25UeXBlQWRkV3JpdGVyR3JvdXBNZXRo" + + "b2RUeXBlAQCZRAAvAQCZRJlEAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEA" + + "zUQALgBEzUQAAJYBAAAAAQAqAQEeAAAADQAAAENvbmZpZ3VyYXRpb24BAHg8/////wAAAAAAAQAoAQEA" + + "AAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAzkQALgBEzkQA" + + "AJYBAAAAAQAqAQEWAAAABwAAAEdyb3VwSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8A" + + "AAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubConnectionTypeAddWriterGroupMethodStateMethodCallHandler 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; + + WriterGroupDataType configuration = (WriterGroupDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + NodeId groupId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configuration, + ref groupId); + } + + _outputArguments[0] = groupId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubConnectionTypeAddWriterGroupMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + WriterGroupDataType configuration, + ref NodeId groupId); + #endif + #endregion + + #region PubSubConnectionAddReaderGroupGroupMethodState Class + #if (!OPCUA_EXCLUDE_PubSubConnectionAddReaderGroupGroupMethodState) + /// + /// Stores an instance of the PubSubConnectionAddReaderGroupGroupMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubConnectionAddReaderGroupGroupMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubConnectionAddReaderGroupGroupMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubConnectionAddReaderGroupGroupMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAALQAAAFB1YlN1YkNvbm5lY3Rpb25BZGRSZWFkZXJHcm91cEdyb3VwTWV0" + + "aG9kVHlwZQEA3kQALwEA3kTeRAAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMB" + + "AN9EAC4ARN9EAACWAQAAAAEAKgEBHgAAAA0AAABDb25maWd1cmF0aW9uAQCgPP////8AAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBADhFAC4ARDhF" + + "AACWAQAAAAEAKgEBFgAAAAcAAABHcm91cElkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubConnectionAddReaderGroupGroupMethodStateMethodCallHandler 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; + + ReaderGroupDataType configuration = (ReaderGroupDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + NodeId groupId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configuration, + ref groupId); + } + + _outputArguments[0] = groupId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubConnectionAddReaderGroupGroupMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ReaderGroupDataType configuration, + ref NodeId groupId); + #endif + #endregion + + #region PubSubConnectionTypeRemoveGroupMethodState Class + #if (!OPCUA_EXCLUDE_PubSubConnectionTypeRemoveGroupMethodState) + /// + /// Stores an instance of the PubSubConnectionTypeRemoveGroupMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubConnectionTypeRemoveGroupMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubConnectionTypeRemoveGroupMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubConnectionTypeRemoveGroupMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAKQAAAFB1YlN1YkNvbm5lY3Rpb25UeXBlUmVtb3ZlR3JvdXBNZXRob2RU" + + "eXBlAQAMOQAvAQAMOQw5AAABAf////8BAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEADTkA" + + "LgBEDTkAAJYBAAAAAQAqAQEWAAAABwAAAEdyb3VwSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubConnectionTypeRemoveGroupMethodStateMethodCallHandler 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; + + NodeId groupId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + groupId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubConnectionTypeRemoveGroupMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId groupId); + #endif + #endregion + + #region ConnectionTransportState Class + #if (!OPCUA_EXCLUDE_ConnectionTransportState) + /// + /// Stores an instance of the ConnectionTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ConnectionTransportState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ConnectionTransportState(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(Opc.Ua.ObjectTypes.ConnectionTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHwAAAENvbm5lY3Rpb25UcmFuc3BvcnRUeXBlSW5zdGFuY2UBADlFAQA5" + + "RTlFAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubGroupState Class + #if (!OPCUA_EXCLUDE_PubSubGroupState) + /// + /// Stores an instance of the PubSubGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubGroupState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubGroupState(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(Opc.Ua.ObjectTypes.PubSubGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SecurityGroupId != null) + { + SecurityGroupId.Initialize(context, SecurityGroupId_InitializationString); + } + + if (SecurityKeyServices != null) + { + SecurityKeyServices.Initialize(context, SecurityKeyServices_InitializationString); + } + } + + #region Initialization String + private const string SecurityGroupId_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAFNlY3VyaXR5R3JvdXBJZAEANz4ALgBENz4AAAAM/////wEB////" + + "/wAAAAA="; + + private const string SecurityKeyServices_InitializationString = + "//////////8XYIkKAgAAAAAAEwAAAFNlY3VyaXR5S2V5U2VydmljZXMBADg+AC4ARDg+AAABADgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFwAAAFB1YlN1Ykdyb3VwVHlwZUluc3RhbmNlAQCYNwEAmDeYNwAA////" + + "/wYAAAAVYIkKAgAAAAAADAAAAFNlY3VyaXR5TW9kZQEANj4ALgBENj4AAAEALgH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAPAAAAU2VjdXJpdHlHcm91cElkAQA3PgAuAEQ3PgAAAAz/////AQH/////AAAAABdg" + + "iQoCAAAAAAATAAAAU2VjdXJpdHlLZXlTZXJ2aWNlcwEAOD4ALgBEOD4AAAEAOAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAAFWCJCgIAAAAAABUAAABNYXhOZXR3b3JrTWVzc2FnZVNpemUBADxFAC4ARDxFAAAAB///" + + "//8BAf////8AAAAAF2CJCgIAAAAAAA8AAABHcm91cFByb3BlcnRpZXMBAFBEAC4ARFBEAAABAMU4AQAA" + + "AAEAAAAAAAAAAQH/////AAAAAARggAoBAAAAAAAGAAAAU3RhdHVzAQChOwAvAQAzOaE7AAD/////AQAA" + + "ABVgiQoCAAAAAAAFAAAAU3RhdGUBAKI7AC8AP6I7AAABADc5/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState SecurityMode + { + get + { + return m_securityMode; + } + + set + { + if (!Object.ReferenceEquals(m_securityMode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityMode = value; + } + } + + /// + public PropertyState SecurityGroupId + { + get + { + return m_securityGroupId; + } + + set + { + if (!Object.ReferenceEquals(m_securityGroupId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityGroupId = value; + } + } + + /// + public PropertyState SecurityKeyServices + { + get + { + return m_securityKeyServices; + } + + set + { + if (!Object.ReferenceEquals(m_securityKeyServices, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityKeyServices = value; + } + } + + /// + public PropertyState MaxNetworkMessageSize + { + get + { + return m_maxNetworkMessageSize; + } + + set + { + if (!Object.ReferenceEquals(m_maxNetworkMessageSize, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maxNetworkMessageSize = value; + } + } + + /// + public PropertyState GroupProperties + { + get + { + return m_groupProperties; + } + + set + { + if (!Object.ReferenceEquals(m_groupProperties, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_groupProperties = value; + } + } + + /// + public PubSubStatusState Status + { + get + { + return m_status; + } + + set + { + if (!Object.ReferenceEquals(m_status, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_status = 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_securityMode != null) + { + children.Add(m_securityMode); + } + + if (m_securityGroupId != null) + { + children.Add(m_securityGroupId); + } + + if (m_securityKeyServices != null) + { + children.Add(m_securityKeyServices); + } + + if (m_maxNetworkMessageSize != null) + { + children.Add(m_maxNetworkMessageSize); + } + + if (m_groupProperties != null) + { + children.Add(m_groupProperties); + } + + if (m_status != null) + { + children.Add(m_status); + } + + 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 Opc.Ua.BrowseNames.SecurityMode: + { + if (createOrReplace) + { + if (SecurityMode == null) + { + if (replacement == null) + { + SecurityMode = new PropertyState(this); + } + else + { + SecurityMode = (PropertyState)replacement; + } + } + } + + instance = SecurityMode; + break; + } + + case Opc.Ua.BrowseNames.SecurityGroupId: + { + if (createOrReplace) + { + if (SecurityGroupId == null) + { + if (replacement == null) + { + SecurityGroupId = new PropertyState(this); + } + else + { + SecurityGroupId = (PropertyState)replacement; + } + } + } + + instance = SecurityGroupId; + break; + } + + case Opc.Ua.BrowseNames.SecurityKeyServices: + { + if (createOrReplace) + { + if (SecurityKeyServices == null) + { + if (replacement == null) + { + SecurityKeyServices = new PropertyState(this); + } + else + { + SecurityKeyServices = (PropertyState)replacement; + } + } + } + + instance = SecurityKeyServices; + break; + } + + case Opc.Ua.BrowseNames.MaxNetworkMessageSize: + { + if (createOrReplace) + { + if (MaxNetworkMessageSize == null) + { + if (replacement == null) + { + MaxNetworkMessageSize = new PropertyState(this); + } + else + { + MaxNetworkMessageSize = (PropertyState)replacement; + } + } + } + + instance = MaxNetworkMessageSize; + break; + } + + case Opc.Ua.BrowseNames.GroupProperties: + { + if (createOrReplace) + { + if (GroupProperties == null) + { + if (replacement == null) + { + GroupProperties = new PropertyState(this); + } + else + { + GroupProperties = (PropertyState)replacement; + } + } + } + + instance = GroupProperties; + break; + } + + case Opc.Ua.BrowseNames.Status: + { + if (createOrReplace) + { + if (Status == null) + { + if (replacement == null) + { + Status = new PubSubStatusState(this); + } + else + { + Status = (PubSubStatusState)replacement; + } + } + } + + instance = Status; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_securityMode; + private PropertyState m_securityGroupId; + private PropertyState m_securityKeyServices; + private PropertyState m_maxNetworkMessageSize; + private PropertyState m_groupProperties; + private PubSubStatusState m_status; + #endregion + } + #endif + #endregion + + #region WriterGroupState Class + #if (!OPCUA_EXCLUDE_WriterGroupState) + /// + /// Stores an instance of the WriterGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class WriterGroupState : PubSubGroupState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public WriterGroupState(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(Opc.Ua.ObjectTypes.WriterGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (TransportSettings != null) + { + TransportSettings.Initialize(context, TransportSettings_InitializationString); + } + + if (MessageSettings != null) + { + MessageSettings.Initialize(context, MessageSettings_InitializationString); + } + + if (Diagnostics != null) + { + Diagnostics.Initialize(context, Diagnostics_InitializationString); + } + + if (AddDataSetWriter != null) + { + AddDataSetWriter.Initialize(context, AddDataSetWriter_InitializationString); + } + + if (RemoveDataSetWriter != null) + { + RemoveDataSetWriter.Initialize(context, RemoveDataSetWriter_InitializationString); + } + } + + #region Initialization String + private const string TransportSettings_InitializationString = + "//////////8EYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQBNRQAvAQBNRk1FAAD/////AAAA" + + "AA=="; + + private const string MessageSettings_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAE1lc3NhZ2VTZXR0aW5ncwEATkUALwEATkZORQAA/////wAAAAA="; + + private const string Diagnostics_InitializationString = + "//////////8EYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQCURQAvAQB6TZRFAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAlUUALwA/lUUAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAlkUALwEADU2WRQAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQCXRQAuAESXRQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAJhFAC4ARJhFAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAJlFAC4ARJlFAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBAJtFAC8BAA1Nm0UAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAnEUA" + + "LgBEnEUAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCdRQAuAESd" + + "RQAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCeRQAuAESe" + + "RQAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEAoEUALwEA6UygRQAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAKFFAC8AP6FFAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAokUALwA6okUAAP////8JAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQCjRQAvAQANTaNFAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAKRFAC4ARKRF" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEApUUALgBEpUUAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCmRQAuAESm" + + "RQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEAqEUALwEADU2oRQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCpRQAu" + + "AESpRQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAKpFAC4ARKpF" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAq0UA" + + "LgBEq0UAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBAK1FAC8BAA1NrUUAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "rkUALgBErkUAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCvRQAu" + + "AESvRQAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ALBFAC4ARLBFAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEAskUALwEADU2yRQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQCzRQAuAESzRQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "ALRFAC4ARLRFAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAtUUALgBEtUUAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQC3RQAvAQANTbdFAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBALhFAC4ARLhFAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "uUUALgBEuUUAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQC6RQAuAES6RQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAvUUALwEADU29RQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQC+RQAuAES+RQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AL9FAC4ARL9FAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAwEUALgBEwEUAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTZW50TmV0" + + "d29ya01lc3NhZ2VzAQDDRQAvAQANTcNFAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBAMhFAC4ARMhFAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "z0UALgBEz0UAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQDQRQAuAETQRQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAEZhaWxlZFRy" + + "YW5zbWlzc2lvbnMBANJFAC8BAA1N0kUAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2" + + "ZQEA1kUALgBE1kUAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQDd" + + "RQAuAETdRQAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2" + + "ZWwBAORFAC4ARORFAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAQAAAARW5jcnlwdGlv" + + "bkVycm9ycwEA7EUALwEADU3sRQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDt" + + "RQAuAETtRQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAO5FAC4A" + + "RO5FAAAGAQAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA" + + "70UALgBE70UAAAYBAAAAAQALTf////8BAf////8AAAAABGCACgEAAAAAAAoAAABMaXZlVmFsdWVzAQDC" + + "RQAvADrCRQAA/////wIAAAAVYIkKAgAAAAAAGAAAAENvbmZpZ3VyZWREYXRhU2V0V3JpdGVycwEA+UUA" + + "LwA/+UUAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAABGAC4A" + + "RABGAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAT3BlcmF0aW9uYWxEYXRhU2V0" + + "V3JpdGVycwEAB0YALwA/B0YAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNz" + + "TGV2ZWwBAA5GAC4ARA5GAAAGAAAAAAEAC03/////AQH/////AAAAAA=="; + + private const string AddDataSetWriter_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAEFkZERhdGFTZXRXcml0ZXIBADFGAC8BADFGMUYAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQA4RgAuAEQ4RgAAlgEAAAABACoBAR4AAAANAAAA" + + "Q29uZmlndXJhdGlvbgEA7Tz/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAA" + + "AAAPAAAAT3V0cHV0QXJndW1lbnRzAQBDRgAuAERDRgAAlgEAAAABACoBASIAAAATAAAARGF0YVNldFdy" + + "aXRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string RemoveDataSetWriter_InitializationString = + "//////////8EYYIKBAAAAAAAEwAAAFJlbW92ZURhdGFTZXRXcml0ZXIBAEhGAC8BAEhGSEYAAAEB////" + + "/wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBJRgAuAERJRgAAlgEAAAABACoBASIAAAAT" + + "AAAARGF0YVNldFdyaXRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFwAAAFdyaXRlckdyb3VwVHlwZUluc3RhbmNlAQA9RQEAPUU9RQAA////" + + "/w8AAAAVYIkKAgAAAAAADAAAAFNlY3VyaXR5TW9kZQEAPkUALgBEPkUAAAEALgH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAVAAAATWF4TmV0d29ya01lc3NhZ2VTaXplAQBBRQAuAERBRQAAAAf/////AQH/////" + + "AAAAABdgiQoCAAAAAAAPAAAAR3JvdXBQcm9wZXJ0aWVzAQBRRAAuAERRRAAAAQDFOAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAEYIAKAQAAAAAABgAAAFN0YXR1cwEAQkUALwEAMzlCRQAA/////wEAAAAVYIkKAgAA" + + "AAAABQAAAFN0YXRlAQBDRQAvAD9DRQAAAQA3Of////8BAf////8AAAAAFWCJCgIAAAAAAA0AAABXcml0" + + "ZXJHcm91cElkAQBIRQAuAERIRQAAAAX/////AQH/////AAAAABVgiQoCAAAAAAASAAAAUHVibGlzaGlu" + + "Z0ludGVydmFsAQBJRQAuAERJRQAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAAA0AAABLZWVwQWxp" + + "dmVUaW1lAQBKRQAuAERKRQAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABQcmlvcml0eQEA" + + "S0UALgBES0UAAAAD/////wEB/////wAAAAAXYIkKAgAAAAAACQAAAExvY2FsZUlkcwEATEUALgBETEUA" + + "AAEAJwEBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAAAA8AAABIZWFkZXJMYXlvdXRVcmkBAJdE" + + "AC4ARJdEAAAADP////8BAf////8AAAAABGCACgEAAAAAABEAAABUcmFuc3BvcnRTZXR0aW5ncwEATUUA" + + "LwEATUZNRQAA/////wAAAAAEYIAKAQAAAAAADwAAAE1lc3NhZ2VTZXR0aW5ncwEATkUALwEATkZORQAA" + + "/////wAAAAAEYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQCURQAvAQB6TZRFAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAlUUALwA/lUUAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAlkUALwEADU2WRQAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQCXRQAuAESXRQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAJhFAC4ARJhFAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAJlFAC4ARJlFAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBAJtFAC8BAA1Nm0UAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAnEUA" + + "LgBEnEUAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCdRQAuAESd" + + "RQAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCeRQAuAESe" + + "RQAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEAoEUALwEA6UygRQAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAKFFAC8AP6FFAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAokUALwA6okUAAP////8JAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQCjRQAvAQANTaNFAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAKRFAC4ARKRF" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEApUUALgBEpUUAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCmRQAuAESm" + + "RQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEAqEUALwEADU2oRQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCpRQAu" + + "AESpRQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAKpFAC4ARKpF" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAq0UA" + + "LgBEq0UAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBAK1FAC8BAA1NrUUAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "rkUALgBErkUAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCvRQAu" + + "AESvRQAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ALBFAC4ARLBFAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEAskUALwEADU2yRQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQCzRQAuAESzRQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "ALRFAC4ARLRFAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAtUUALgBEtUUAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQC3RQAvAQANTbdFAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBALhFAC4ARLhFAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "uUUALgBEuUUAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQC6RQAuAES6RQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAvUUALwEADU29RQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQC+RQAuAES+RQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AL9FAC4ARL9FAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAwEUALgBEwEUAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTZW50TmV0" + + "d29ya01lc3NhZ2VzAQDDRQAvAQANTcNFAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBAMhFAC4ARMhFAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "z0UALgBEz0UAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQDQRQAuAETQRQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAEwAAAEZhaWxlZFRy" + + "YW5zbWlzc2lvbnMBANJFAC8BAA1N0kUAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2" + + "ZQEA1kUALgBE1kUAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQDd" + + "RQAuAETdRQAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2" + + "ZWwBAORFAC4ARORFAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAQAAAARW5jcnlwdGlv" + + "bkVycm9ycwEA7EUALwEADU3sRQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDt" + + "RQAuAETtRQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAO5FAC4A" + + "RO5FAAAGAQAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA" + + "70UALgBE70UAAAYBAAAAAQALTf////8BAf////8AAAAABGCACgEAAAAAAAoAAABMaXZlVmFsdWVzAQDC" + + "RQAvADrCRQAA/////wIAAAAVYIkKAgAAAAAAGAAAAENvbmZpZ3VyZWREYXRhU2V0V3JpdGVycwEA+UUA" + + "LwA/+UUAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAABGAC4A" + + "RABGAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAT3BlcmF0aW9uYWxEYXRhU2V0" + + "V3JpdGVycwEAB0YALwA/B0YAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNz" + + "TGV2ZWwBAA5GAC4ARA5GAAAGAAAAAAEAC03/////AQH/////AAAAAARhggoEAAAAAAAQAAAAQWRkRGF0" + + "YVNldFdyaXRlcgEAMUYALwEAMUYxRgAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBADhGAC4ARDhGAACWAQAAAAEAKgEBHgAAAA0AAABDb25maWd1cmF0aW9uAQDtPP////8AAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAENGAC4A" + + "RENGAACWAQAAAAEAKgEBIgAAABMAAABEYXRhU2V0V3JpdGVyTm9kZUlkABH/////AAAAAAABACgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAATAAAAUmVtb3ZlRGF0YVNldFdyaXRlcgEASEYALwEA" + + "SEZIRgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAElGAC4ARElGAACWAQAA" + + "AAEAKgEBIgAAABMAAABEYXRhU2V0V3JpdGVyTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState WriterGroupId + { + get + { + return m_writerGroupId; + } + + set + { + if (!Object.ReferenceEquals(m_writerGroupId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_writerGroupId = value; + } + } + + /// + public PropertyState PublishingInterval + { + get + { + return m_publishingInterval; + } + + set + { + if (!Object.ReferenceEquals(m_publishingInterval, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishingInterval = value; + } + } + + /// + public PropertyState KeepAliveTime + { + get + { + return m_keepAliveTime; + } + + set + { + if (!Object.ReferenceEquals(m_keepAliveTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_keepAliveTime = value; + } + } + + /// + public PropertyState Priority + { + get + { + return m_priority; + } + + set + { + if (!Object.ReferenceEquals(m_priority, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_priority = value; + } + } + + /// + public PropertyState LocaleIds + { + get + { + return m_localeIds; + } + + set + { + if (!Object.ReferenceEquals(m_localeIds, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_localeIds = value; + } + } + + /// + public PropertyState HeaderLayoutUri + { + get + { + return m_headerLayoutUri; + } + + set + { + if (!Object.ReferenceEquals(m_headerLayoutUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_headerLayoutUri = value; + } + } + + /// + public WriterGroupTransportState TransportSettings + { + get + { + return m_transportSettings; + } + + set + { + if (!Object.ReferenceEquals(m_transportSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportSettings = value; + } + } + + /// + public WriterGroupMessageState MessageSettings + { + get + { + return m_messageSettings; + } + + set + { + if (!Object.ReferenceEquals(m_messageSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageSettings = value; + } + } + + /// + public PubSubDiagnosticsWriterGroupState Diagnostics + { + get + { + return m_diagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_diagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnostics = value; + } + } + + /// + public PubSubGroupTypeAddWriterrMethodState AddDataSetWriter + { + get + { + return m_addDataSetWriterMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addDataSetWriterMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addDataSetWriterMethod = value; + } + } + + /// + public PubSubGroupTypeRemoveWriterMethodState RemoveDataSetWriter + { + get + { + return m_removeDataSetWriterMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeDataSetWriterMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeDataSetWriterMethod = 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_writerGroupId != null) + { + children.Add(m_writerGroupId); + } + + if (m_publishingInterval != null) + { + children.Add(m_publishingInterval); + } + + if (m_keepAliveTime != null) + { + children.Add(m_keepAliveTime); + } + + if (m_priority != null) + { + children.Add(m_priority); + } + + if (m_localeIds != null) + { + children.Add(m_localeIds); + } + + if (m_headerLayoutUri != null) + { + children.Add(m_headerLayoutUri); + } + + if (m_transportSettings != null) + { + children.Add(m_transportSettings); + } + + if (m_messageSettings != null) + { + children.Add(m_messageSettings); + } + + if (m_diagnostics != null) + { + children.Add(m_diagnostics); + } + + if (m_addDataSetWriterMethod != null) + { + children.Add(m_addDataSetWriterMethod); + } + + if (m_removeDataSetWriterMethod != null) + { + children.Add(m_removeDataSetWriterMethod); + } + + 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 Opc.Ua.BrowseNames.WriterGroupId: + { + if (createOrReplace) + { + if (WriterGroupId == null) + { + if (replacement == null) + { + WriterGroupId = new PropertyState(this); + } + else + { + WriterGroupId = (PropertyState)replacement; + } + } + } + + instance = WriterGroupId; + break; + } + + case Opc.Ua.BrowseNames.PublishingInterval: + { + if (createOrReplace) + { + if (PublishingInterval == null) + { + if (replacement == null) + { + PublishingInterval = new PropertyState(this); + } + else + { + PublishingInterval = (PropertyState)replacement; + } + } + } + + instance = PublishingInterval; + break; + } + + case Opc.Ua.BrowseNames.KeepAliveTime: + { + if (createOrReplace) + { + if (KeepAliveTime == null) + { + if (replacement == null) + { + KeepAliveTime = new PropertyState(this); + } + else + { + KeepAliveTime = (PropertyState)replacement; + } + } + } + + instance = KeepAliveTime; + break; + } + + case Opc.Ua.BrowseNames.Priority: + { + if (createOrReplace) + { + if (Priority == null) + { + if (replacement == null) + { + Priority = new PropertyState(this); + } + else + { + Priority = (PropertyState)replacement; + } + } + } + + instance = Priority; + break; + } + + case Opc.Ua.BrowseNames.LocaleIds: + { + if (createOrReplace) + { + if (LocaleIds == null) + { + if (replacement == null) + { + LocaleIds = new PropertyState(this); + } + else + { + LocaleIds = (PropertyState)replacement; + } + } + } + + instance = LocaleIds; + break; + } + + case Opc.Ua.BrowseNames.HeaderLayoutUri: + { + if (createOrReplace) + { + if (HeaderLayoutUri == null) + { + if (replacement == null) + { + HeaderLayoutUri = new PropertyState(this); + } + else + { + HeaderLayoutUri = (PropertyState)replacement; + } + } + } + + instance = HeaderLayoutUri; + break; + } + + case Opc.Ua.BrowseNames.TransportSettings: + { + if (createOrReplace) + { + if (TransportSettings == null) + { + if (replacement == null) + { + TransportSettings = new WriterGroupTransportState(this); + } + else + { + TransportSettings = (WriterGroupTransportState)replacement; + } + } + } + + instance = TransportSettings; + break; + } + + case Opc.Ua.BrowseNames.MessageSettings: + { + if (createOrReplace) + { + if (MessageSettings == null) + { + if (replacement == null) + { + MessageSettings = new WriterGroupMessageState(this); + } + else + { + MessageSettings = (WriterGroupMessageState)replacement; + } + } + } + + instance = MessageSettings; + break; + } + + case Opc.Ua.BrowseNames.Diagnostics: + { + if (createOrReplace) + { + if (Diagnostics == null) + { + if (replacement == null) + { + Diagnostics = new PubSubDiagnosticsWriterGroupState(this); + } + else + { + Diagnostics = (PubSubDiagnosticsWriterGroupState)replacement; + } + } + } + + instance = Diagnostics; + break; + } + + case Opc.Ua.BrowseNames.AddDataSetWriter: + { + if (createOrReplace) + { + if (AddDataSetWriter == null) + { + if (replacement == null) + { + AddDataSetWriter = new PubSubGroupTypeAddWriterrMethodState(this); + } + else + { + AddDataSetWriter = (PubSubGroupTypeAddWriterrMethodState)replacement; + } + } + } + + instance = AddDataSetWriter; + break; + } + + case Opc.Ua.BrowseNames.RemoveDataSetWriter: + { + if (createOrReplace) + { + if (RemoveDataSetWriter == null) + { + if (replacement == null) + { + RemoveDataSetWriter = new PubSubGroupTypeRemoveWriterMethodState(this); + } + else + { + RemoveDataSetWriter = (PubSubGroupTypeRemoveWriterMethodState)replacement; + } + } + } + + instance = RemoveDataSetWriter; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_writerGroupId; + private PropertyState m_publishingInterval; + private PropertyState m_keepAliveTime; + private PropertyState m_priority; + private PropertyState m_localeIds; + private PropertyState m_headerLayoutUri; + private WriterGroupTransportState m_transportSettings; + private WriterGroupMessageState m_messageSettings; + private PubSubDiagnosticsWriterGroupState m_diagnostics; + private PubSubGroupTypeAddWriterrMethodState m_addDataSetWriterMethod; + private PubSubGroupTypeRemoveWriterMethodState m_removeDataSetWriterMethod; + #endregion + } + #endif + #endregion + + #region PubSubGroupTypeAddWriterrMethodState Class + #if (!OPCUA_EXCLUDE_PubSubGroupTypeAddWriterrMethodState) + /// + /// Stores an instance of the PubSubGroupTypeAddWriterrMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubGroupTypeAddWriterrMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubGroupTypeAddWriterrMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubGroupTypeAddWriterrMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAIwAAAFB1YlN1Ykdyb3VwVHlwZUFkZFdyaXRlcnJNZXRob2RUeXBlAQBK" + + "RgAvAQBKRkpGAAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEAS0YALgBES0YA" + + "AJYBAAAAAQAqAQEeAAAADQAAAENvbmZpZ3VyYXRpb24BAO08/////wAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEATEYALgBETEYAAJYBAAAAAQAq" + + "AQEiAAAAEwAAAERhdGFTZXRXcml0ZXJOb2RlSWQAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf//" + + "//8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubGroupTypeAddWriterrMethodStateMethodCallHandler 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; + + DataSetWriterDataType configuration = (DataSetWriterDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + NodeId dataSetWriterNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configuration, + ref dataSetWriterNodeId); + } + + _outputArguments[0] = dataSetWriterNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubGroupTypeAddWriterrMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + DataSetWriterDataType configuration, + ref NodeId dataSetWriterNodeId); + #endif + #endregion + + #region PubSubGroupTypeRemoveWriterMethodState Class + #if (!OPCUA_EXCLUDE_PubSubGroupTypeRemoveWriterMethodState) + /// + /// Stores an instance of the PubSubGroupTypeRemoveWriterMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubGroupTypeRemoveWriterMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubGroupTypeRemoveWriterMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubGroupTypeRemoveWriterMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAJQAAAFB1YlN1Ykdyb3VwVHlwZVJlbW92ZVdyaXRlck1ldGhvZFR5cGUB" + + "AB85AC8BAB85HzkAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAgOQAuAEQg" + + "OQAAlgEAAAABACoBASIAAAATAAAARGF0YVNldFdyaXRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubGroupTypeRemoveWriterMethodStateMethodCallHandler 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; + + NodeId dataSetWriterNodeId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + dataSetWriterNodeId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubGroupTypeRemoveWriterMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId dataSetWriterNodeId); + #endif + #endregion + + #region WriterGroupTransportState Class + #if (!OPCUA_EXCLUDE_WriterGroupTransportState) + /// + /// Stores an instance of the WriterGroupTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class WriterGroupTransportState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public WriterGroupTransportState(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(Opc.Ua.ObjectTypes.WriterGroupTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAFdyaXRlckdyb3VwVHJhbnNwb3J0VHlwZUluc3RhbmNlAQBNRgEA" + + "TUZNRgAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region WriterGroupMessageState Class + #if (!OPCUA_EXCLUDE_WriterGroupMessageState) + /// + /// Stores an instance of the WriterGroupMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class WriterGroupMessageState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public WriterGroupMessageState(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(Opc.Ua.ObjectTypes.WriterGroupMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHgAAAFdyaXRlckdyb3VwTWVzc2FnZVR5cGVJbnN0YW5jZQEATkYBAE5G" + + "TkYAAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ReaderGroupState Class + #if (!OPCUA_EXCLUDE_ReaderGroupState) + /// + /// Stores an instance of the ReaderGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ReaderGroupState : PubSubGroupState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ReaderGroupState(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(Opc.Ua.ObjectTypes.ReaderGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (Diagnostics != null) + { + Diagnostics.Initialize(context, Diagnostics_InitializationString); + } + + if (TransportSettings != null) + { + TransportSettings.Initialize(context, TransportSettings_InitializationString); + } + + if (MessageSettings != null) + { + MessageSettings.Initialize(context, MessageSettings_InitializationString); + } + + if (AddDataSetReader != null) + { + AddDataSetReader.Initialize(context, AddDataSetReader_InitializationString); + } + + if (RemoveDataSetReader != null) + { + RemoveDataSetReader.Initialize(context, RemoveDataSetReader_InitializationString); + } + } + + #region Initialization String + private const string Diagnostics_InitializationString = + "//////////8EYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQAXUgAvAQC/TRdSAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAGFIALwA/GFIAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAGVIALwEADU0ZUgAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQAaUgAuAEQaUgAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BABtSAC4ARBtSAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBABxSAC4ARBxSAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBAB5SAC8BAA1NHlIAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAH1IA" + + "LgBEH1IAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAgUgAuAEQg" + + "UgAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAhUgAuAEQh" + + "UgAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEAI1IALwEA6UwjUgAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBACRSAC8APyRSAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAJVIALwA6JVIAAP////8HAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQAmUgAvAQANTSZSAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBACdSAC4ARCdS" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAKFIALgBEKFIAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQApUgAuAEQp" + + "UgAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEAK1IALwEADU0rUgAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQAsUgAu" + + "AEQsUgAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAC1SAC4ARC1S" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEALlIA" + + "LgBELlIAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBADBSAC8BAA1NMFIAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "MVIALgBEMVIAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAyUgAu" + + "AEQyUgAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ADNSAC4ARDNSAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEANVIALwEADU01UgAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQA2UgAuAEQ2UgAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "ADdSAC4ARDdSAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAOFIALgBEOFIAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQA6UgAvAQANTTpSAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBADtSAC4ARDtSAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "PFIALgBEPFIAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQA9UgAuAEQ9UgAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAP1IALwEADU0/UgAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQBAUgAuAERAUgAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AEFSAC4AREFSAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAQlIALgBEQlIAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABcAAABSZWNlaXZl" + + "ZE5ldHdvcmtNZXNzYWdlcwEARVIALwEADU1FUgAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAA" + + "QWN0aXZlAQBGUgAuAERGUgAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRp" + + "b24BAEdSAC4AREdSAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3Rp" + + "Y3NMZXZlbAEASFIALgBESFIAAAYAAAAAAQALTf////8BAf////8AAAAABGCACgEAAAAAAAoAAABMaXZl" + + "VmFsdWVzAQBEUgAvADpEUgAA/////wIAAAAVYIkKAgAAAAAAGAAAAENvbmZpZ3VyZWREYXRhU2V0UmVh" + + "ZGVycwEAVFIALwA/VFIAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2" + + "ZWwBAFVSAC4ARFVSAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAT3BlcmF0aW9u" + + "YWxEYXRhU2V0UmVhZGVycwEAVlIALwA/VlIAAAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERp" + + "YWdub3N0aWNzTGV2ZWwBAFdSAC4ARFdSAAAGAAAAAAEAC03/////AQH/////AAAAAA=="; + + private const string TransportSettings_InitializationString = + "//////////8EYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQBYUgAvAQBiUlhSAAD/////AAAA" + + "AA=="; + + private const string MessageSettings_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAE1lc3NhZ2VTZXR0aW5ncwEAWVIALwEAY1JZUgAA/////wAAAAA="; + + private const string AddDataSetReader_InitializationString = + "//////////8EYYIKBAAAAAAAEAAAAEFkZERhdGFTZXRSZWFkZXIBAFpSAC8BAFpSWlIAAAEB/////wIA" + + "AAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBbUgAuAERbUgAAlgEAAAABACoBAR4AAAANAAAA" + + "Q29uZmlndXJhdGlvbgEABz3/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAA" + + "AAAPAAAAT3V0cHV0QXJndW1lbnRzAQBcUgAuAERcUgAAlgEAAAABACoBASIAAAATAAAARGF0YVNldFJl" + + "YWRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string RemoveDataSetReader_InitializationString = + "//////////8EYYIKBAAAAAAAEwAAAFJlbW92ZURhdGFTZXRSZWFkZXIBAF1SAC8BAF1SXVIAAAEB////" + + "/wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBeUgAuAEReUgAAlgEAAAABACoBASIAAAAT" + + "AAAARGF0YVNldFJlYWRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAFwAAAFJlYWRlckdyb3VwVHlwZUluc3RhbmNlAQBPRgEAT0ZPRgAA////" + + "/wkAAAAVYIkKAgAAAAAADAAAAFNlY3VyaXR5TW9kZQEAUEYALgBEUEYAAAEALgH/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAVAAAATWF4TmV0d29ya01lc3NhZ2VTaXplAQCRRgAuAESRRgAAAAf/////AQH/////" + + "AAAAABdgiQoCAAAAAAAPAAAAR3JvdXBQcm9wZXJ0aWVzAQBTRAAuAERTRAAAAQDFOAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAEYIAKAQAAAAAABgAAAFN0YXR1cwEAk0YALwEAMzmTRgAA/////wEAAAAVYIkKAgAA" + + "AAAABQAAAFN0YXRlAQCURgAvAD+URgAAAQA3Of////8BAf////8AAAAABGCACgEAAAAAAAsAAABEaWFn" + + "bm9zdGljcwEAF1IALwEAv00XUgAA/////wcAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ABhSAC8APxhSAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAFRvdGFsSW5mb3JtYXRpb24B" + + "ABlSAC8BAA1NGVIAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAGlIALgBEGlIA" + + "AAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAbUgAuAEQbUgAAAQAS" + + "Tf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAcUgAuAEQcUgAAAQAL" + + "Tf////8BAf////8AAAAAFWCJCgIAAAAAAAoAAABUb3RhbEVycm9yAQAeUgAvAQANTR5SAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAB9SAC4ARB9SAAAAAf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAIFIALgBEIFIAAAEAEk3/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAIVIALgBEIVIAAAEAC03/////AQH/////AAAAAARhggoE" + + "AAAAAAAFAAAAUmVzZXQBACNSAC8BAOlMI1IAAAEB/////wAAAAAVYIkKAgAAAAAACAAAAFN1YkVycm9y" + + "AQAkUgAvAD8kUgAAAAH/////AQH/////AAAAAARggAoBAAAAAAAIAAAAQ291bnRlcnMBACVSAC8AOiVS" + + "AAD/////BwAAABVgiQoCAAAAAAAKAAAAU3RhdGVFcnJvcgEAJlIALwEADU0mUgAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQAnUgAuAEQnUgAAAAH/////AQH/////AAAAABVgqQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BAChSAC4ARChSAAAGAQAAAAEAEk3/////AQH/////AAAAABVgqQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAKVIALgBEKVIAAAYAAAAAAQALTf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFsQnlNZXRob2QBACtSAC8BAA1NK1IAAAAH/////wEB" + + "/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEALFIALgBELFIAAAAB/////wEB/////wAAAAAVYKkK" + + "AgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAtUgAuAEQtUgAABgAAAAABABJN/////wEB/////wAAAAAV" + + "YKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAC5SAC4ARC5SAAAGAAAAAAEAC03/////AQH/////" + + "AAAAABVgiQoCAAAAAAAYAAAAU3RhdGVPcGVyYXRpb25hbEJ5UGFyZW50AQAwUgAvAQANTTBSAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBADFSAC4ARDFSAAAAAf////8BAf////8AAAAA" + + "FWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAMlIALgBEMlIAAAYAAAAAAQASTf////8BAf////8A" + + "AAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAzUgAuAEQzUgAABgAAAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAGQAAAFN0YXRlT3BlcmF0aW9uYWxGcm9tRXJyb3IBADVSAC8BAA1NNVIA" + + "AAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEANlIALgBENlIAAAAB/////wEB////" + + "/wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQA3UgAuAEQ3UgAABgAAAAABABJN/////wEB" + + "/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBADhSAC4ARDhSAAAGAAAAAAEAC03/" + + "////AQH/////AAAAABVgiQoCAAAAAAATAAAAU3RhdGVQYXVzZWRCeVBhcmVudAEAOlIALwEADU06UgAA" + + "AAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQA7UgAuAEQ7UgAAAAH/////AQH/////" + + "AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BADxSAC4ARDxSAAAGAAAAAAEAEk3/////AQH/" + + "////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAPVIALgBEPVIAAAYAAAAAAQALTf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABUAAABTdGF0ZURpc2FibGVkQnlNZXRob2QBAD9SAC8BAA1NP1IA" + + "AAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAQFIALgBEQFIAAAAB/////wEB////" + + "/wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBBUgAuAERBUgAABgAAAAABABJN/////wEB" + + "/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAEJSAC4AREJSAAAGAAAAAAEAC03/" + + "////AQH/////AAAAABVgiQoCAAAAAAAXAAAAUmVjZWl2ZWROZXR3b3JrTWVzc2FnZXMBAEVSAC8BAA1N" + + "RVIAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEARlIALgBERlIAAAAB/////wEB" + + "/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBHUgAuAERHUgAABgAAAAABABJN////" + + "/wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAEhSAC4AREhSAAAGAAAAAAEA" + + "C03/////AQH/////AAAAAARggAoBAAAAAAAKAAAATGl2ZVZhbHVlcwEARFIALwA6RFIAAP////8CAAAA" + + "FWCJCgIAAAAAABgAAABDb25maWd1cmVkRGF0YVNldFJlYWRlcnMBAFRSAC8AP1RSAAAABf////8BAf//" + + "//8BAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBVUgAuAERVUgAABgAAAAABAAtN////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAGQAAAE9wZXJhdGlvbmFsRGF0YVNldFJlYWRlcnMBAFZSAC8AP1ZS" + + "AAAABf////8BAf////8BAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBXUgAuAERXUgAA" + + "BgAAAAABAAtN/////wEB/////wAAAAAEYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQBYUgAv" + + "AQBiUlhSAAD/////AAAAAARggAoBAAAAAAAPAAAATWVzc2FnZVNldHRpbmdzAQBZUgAvAQBjUllSAAD/" + + "////AAAAAARhggoEAAAAAAAQAAAAQWRkRGF0YVNldFJlYWRlcgEAWlIALwEAWlJaUgAAAQH/////AgAA" + + "ABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAFtSAC4ARFtSAACWAQAAAAEAKgEBHgAAAA0AAABD" + + "b25maWd1cmF0aW9uAQAHPf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAA" + + "AA8AAABPdXRwdXRBcmd1bWVudHMBAFxSAC4ARFxSAACWAQAAAAEAKgEBIgAAABMAAABEYXRhU2V0UmVh" + + "ZGVyTm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAATAAAA" + + "UmVtb3ZlRGF0YVNldFJlYWRlcgEAXVIALwEAXVJdUgAAAQH/////AQAAABdgqQoCAAAAAAAOAAAASW5w" + + "dXRBcmd1bWVudHMBAF5SAC4ARF5SAACWAQAAAAEAKgEBIgAAABMAAABEYXRhU2V0UmVhZGVyTm9kZUlk" + + "ABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PubSubDiagnosticsReaderGroupState Diagnostics + { + get + { + return m_diagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_diagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnostics = value; + } + } + + /// + public ReaderGroupTransportState TransportSettings + { + get + { + return m_transportSettings; + } + + set + { + if (!Object.ReferenceEquals(m_transportSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportSettings = value; + } + } + + /// + public ReaderGroupMessageState MessageSettings + { + get + { + return m_messageSettings; + } + + set + { + if (!Object.ReferenceEquals(m_messageSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageSettings = value; + } + } + + /// + public PubSubGroupTypeAddReaderMethodState AddDataSetReader + { + get + { + return m_addDataSetReaderMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addDataSetReaderMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addDataSetReaderMethod = value; + } + } + + /// + public PubSubGroupTypeRemoveReaderMethodState RemoveDataSetReader + { + get + { + return m_removeDataSetReaderMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeDataSetReaderMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeDataSetReaderMethod = 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_diagnostics != null) + { + children.Add(m_diagnostics); + } + + if (m_transportSettings != null) + { + children.Add(m_transportSettings); + } + + if (m_messageSettings != null) + { + children.Add(m_messageSettings); + } + + if (m_addDataSetReaderMethod != null) + { + children.Add(m_addDataSetReaderMethod); + } + + if (m_removeDataSetReaderMethod != null) + { + children.Add(m_removeDataSetReaderMethod); + } + + 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 Opc.Ua.BrowseNames.Diagnostics: + { + if (createOrReplace) + { + if (Diagnostics == null) + { + if (replacement == null) + { + Diagnostics = new PubSubDiagnosticsReaderGroupState(this); + } + else + { + Diagnostics = (PubSubDiagnosticsReaderGroupState)replacement; + } + } + } + + instance = Diagnostics; + break; + } + + case Opc.Ua.BrowseNames.TransportSettings: + { + if (createOrReplace) + { + if (TransportSettings == null) + { + if (replacement == null) + { + TransportSettings = new ReaderGroupTransportState(this); + } + else + { + TransportSettings = (ReaderGroupTransportState)replacement; + } + } + } + + instance = TransportSettings; + break; + } + + case Opc.Ua.BrowseNames.MessageSettings: + { + if (createOrReplace) + { + if (MessageSettings == null) + { + if (replacement == null) + { + MessageSettings = new ReaderGroupMessageState(this); + } + else + { + MessageSettings = (ReaderGroupMessageState)replacement; + } + } + } + + instance = MessageSettings; + break; + } + + case Opc.Ua.BrowseNames.AddDataSetReader: + { + if (createOrReplace) + { + if (AddDataSetReader == null) + { + if (replacement == null) + { + AddDataSetReader = new PubSubGroupTypeAddReaderMethodState(this); + } + else + { + AddDataSetReader = (PubSubGroupTypeAddReaderMethodState)replacement; + } + } + } + + instance = AddDataSetReader; + break; + } + + case Opc.Ua.BrowseNames.RemoveDataSetReader: + { + if (createOrReplace) + { + if (RemoveDataSetReader == null) + { + if (replacement == null) + { + RemoveDataSetReader = new PubSubGroupTypeRemoveReaderMethodState(this); + } + else + { + RemoveDataSetReader = (PubSubGroupTypeRemoveReaderMethodState)replacement; + } + } + } + + instance = RemoveDataSetReader; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PubSubDiagnosticsReaderGroupState m_diagnostics; + private ReaderGroupTransportState m_transportSettings; + private ReaderGroupMessageState m_messageSettings; + private PubSubGroupTypeAddReaderMethodState m_addDataSetReaderMethod; + private PubSubGroupTypeRemoveReaderMethodState m_removeDataSetReaderMethod; + #endregion + } + #endif + #endregion + + #region PubSubGroupTypeAddReaderMethodState Class + #if (!OPCUA_EXCLUDE_PubSubGroupTypeAddReaderMethodState) + /// + /// Stores an instance of the PubSubGroupTypeAddReaderMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubGroupTypeAddReaderMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubGroupTypeAddReaderMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubGroupTypeAddReaderMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAIgAAAFB1YlN1Ykdyb3VwVHlwZUFkZFJlYWRlck1ldGhvZFR5cGUBAF9S" + + "AC8BAF9SX1IAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQBgUgAuAERgUgAA" + + "lgEAAAABACoBAR4AAAANAAAAQ29uZmlndXJhdGlvbgEABz3/////AAAAAAABACgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQBhUgAuAERhUgAAlgEAAAABACoB" + + "ASIAAAATAAAARGF0YVNldFJlYWRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB////" + + "/wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubGroupTypeAddReaderMethodStateMethodCallHandler 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; + + DataSetReaderDataType configuration = (DataSetReaderDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + + NodeId dataSetReaderNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configuration, + ref dataSetReaderNodeId); + } + + _outputArguments[0] = dataSetReaderNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubGroupTypeAddReaderMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + DataSetReaderDataType configuration, + ref NodeId dataSetReaderNodeId); + #endif + #endregion + + #region PubSubGroupTypeRemoveReaderMethodState Class + #if (!OPCUA_EXCLUDE_PubSubGroupTypeRemoveReaderMethodState) + /// + /// Stores an instance of the PubSubGroupTypeRemoveReaderMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubGroupTypeRemoveReaderMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubGroupTypeRemoveReaderMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new PubSubGroupTypeRemoveReaderMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAJQAAAFB1YlN1Ykdyb3VwVHlwZVJlbW92ZVJlYWRlck1ldGhvZFR5cGUB" + + "ACE5AC8BACE5ITkAAAEB/////wEAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQAiOQAuAEQi" + + "OQAAlgEAAAABACoBASIAAAATAAAARGF0YVNldFJlYWRlck5vZGVJZAAR/////wAAAAAAAQAoAQEAAAAB" + + "AAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public PubSubGroupTypeRemoveReaderMethodStateMethodCallHandler 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; + + NodeId dataSetReaderNodeId = (NodeId)_inputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + dataSetReaderNodeId); + } + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult PubSubGroupTypeRemoveReaderMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + NodeId dataSetReaderNodeId); + #endif + #endregion + + #region ReaderGroupTransportState Class + #if (!OPCUA_EXCLUDE_ReaderGroupTransportState) + /// + /// Stores an instance of the ReaderGroupTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ReaderGroupTransportState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ReaderGroupTransportState(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(Opc.Ua.ObjectTypes.ReaderGroupTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAFJlYWRlckdyb3VwVHJhbnNwb3J0VHlwZUluc3RhbmNlAQBiUgEA" + + "YlJiUgAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ReaderGroupMessageState Class + #if (!OPCUA_EXCLUDE_ReaderGroupMessageState) + /// + /// Stores an instance of the ReaderGroupMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class ReaderGroupMessageState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public ReaderGroupMessageState(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(Opc.Ua.ObjectTypes.ReaderGroupMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHgAAAFJlYWRlckdyb3VwTWVzc2FnZVR5cGVJbnN0YW5jZQEAY1IBAGNS" + + "Y1IAAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataSetWriterState Class + #if (!OPCUA_EXCLUDE_DataSetWriterState) + /// + /// Stores an instance of the DataSetWriterType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetWriterState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetWriterState(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(Opc.Ua.ObjectTypes.DataSetWriterType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (KeyFrameCount != null) + { + KeyFrameCount.Initialize(context, KeyFrameCount_InitializationString); + } + + if (TransportSettings != null) + { + TransportSettings.Initialize(context, TransportSettings_InitializationString); + } + + if (MessageSettings != null) + { + MessageSettings.Initialize(context, MessageSettings_InitializationString); + } + + if (Diagnostics != null) + { + Diagnostics.Initialize(context, Diagnostics_InitializationString); + } + } + + #region Initialization String + private const string KeyFrameCount_InitializationString = + "//////////8VYIkKAgAAAAAADQAAAEtleUZyYW1lQ291bnQBAGZSAC4ARGZSAAAAB/////8BAf////8A" + + "AAAA"; + + private const string TransportSettings_InitializationString = + "//////////8EYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQDHOwAvAQDJO8c7AAD/////AAAA" + + "AA=="; + + private const string MessageSettings_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAE1lc3NhZ2VTZXR0aW5ncwEAZ1IALwEAaFJnUgAA/////wAAAAA="; + + private const string Diagnostics_InitializationString = + "//////////8EYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQBeTAAvAQAATl5MAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAX0wALwA/X0wAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAYEwALwEADU1gTAAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQBhTAAuAERhTAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAGJMAC4ARGJMAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAGNMAC4ARGNMAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBAGVMAC8BAA1NZUwAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAZkwA" + + "LgBEZkwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBnTAAuAERn" + + "TAAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBoTAAuAERo" + + "TAAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEAakwALwEA6UxqTAAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAGtMAC8AP2tMAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAbEwALwA6bEwAAP////8HAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQBtTAAvAQANTW1MAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAG5MAC4ARG5M" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAb0wALgBEb0wAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBwTAAuAERw" + + "TAAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEAckwALwEADU1yTAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQBzTAAu" + + "AERzTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAHRMAC4ARHRM" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAdUwA" + + "LgBEdUwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBAHdMAC8BAA1Nd0wAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "eEwALgBEeEwAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQB5TAAu" + + "AER5TAAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "AHpMAC4ARHpMAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEAfEwALwEADU18TAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQB9TAAuAER9TAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AH5MAC4ARH5MAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAf0wALgBEf0wAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQCBTAAvAQANTYFMAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBAIJMAC4ARIJMAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "g0wALgBEg0wAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQCETAAuAESETAAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAhkwALwEADU2GTAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQCHTAAuAESHTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AIhMAC4ARIhMAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAiUwALgBEiUwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABUAAABGYWlsZWRE" + + "YXRhU2V0TWVzc2FnZXMBAIxMAC8BAA1NjEwAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFj" + + "dGl2ZQEAjUwALgBEjUwAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9u" + + "AQCOTAAuAESOTAAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNz" + + "TGV2ZWwBAI9MAC4ARI9MAAAGAAAAAAEAC03/////AQH/////AAAAAARggAoBAAAAAAAKAAAATGl2ZVZh" + + "bHVlcwEAi0wALwA6i0wAAP////8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGQAAAERhdGFTZXRXcml0ZXJUeXBlSW5zdGFuY2UBAMI7AQDCO8I7AAD/" + + "////CAAAABVgiQoCAAAAAAAPAAAARGF0YVNldFdyaXRlcklkAQBkUgAuAERkUgAAAAX/////AQH/////" + + "AAAAABVgiQoCAAAAAAAXAAAARGF0YVNldEZpZWxkQ29udGVudE1hc2sBAGVSAC4ARGVSAAABAN88////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADQAAAEtleUZyYW1lQ291bnQBAGZSAC4ARGZSAAAAB/////8BAf//" + + "//8AAAAAF2CJCgIAAAAAABcAAABEYXRhU2V0V3JpdGVyUHJvcGVydGllcwEAVUQALgBEVUQAAAEAxTgB" + + "AAAAAQAAAAAAAAABAf////8AAAAABGCACgEAAAAAABEAAABUcmFuc3BvcnRTZXR0aW5ncwEAxzsALwEA" + + "yTvHOwAA/////wAAAAAEYIAKAQAAAAAADwAAAE1lc3NhZ2VTZXR0aW5ncwEAZ1IALwEAaFJnUgAA////" + + "/wAAAAAEYIAKAQAAAAAABgAAAFN0YXR1cwEAwzsALwEAMznDOwAA/////wEAAAAVYIkKAgAAAAAABQAA" + + "AFN0YXRlAQDEOwAvAD/EOwAAAQA3Of////8BAf////8AAAAABGCACgEAAAAAAAsAAABEaWFnbm9zdGlj" + + "cwEAXkwALwEAAE5eTAAA/////wcAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAF9MAC8A" + + "P19MAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAFRvdGFsSW5mb3JtYXRpb24BAGBMAC8B" + + "AA1NYEwAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAYUwALgBEYUwAAAAB////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBiTAAuAERiTAAAAQASTf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBjTAAuAERjTAAAAQALTf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAAoAAABUb3RhbEVycm9yAQBlTAAvAQANTWVMAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAGZMAC4ARGZMAAAAAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEAZ0wALgBEZ0wAAAEAEk3/////AQH/////AAAAABVgiQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAaEwALgBEaEwAAAEAC03/////AQH/////AAAAAARhggoEAAAAAAAF" + + "AAAAUmVzZXQBAGpMAC8BAOlMakwAAAEB/////wAAAAAVYIkKAgAAAAAACAAAAFN1YkVycm9yAQBrTAAv" + + "AD9rTAAAAAH/////AQH/////AAAAAARggAoBAAAAAAAIAAAAQ291bnRlcnMBAGxMAC8AOmxMAAD/////" + + "BwAAABVgiQoCAAAAAAAKAAAAU3RhdGVFcnJvcgEAbUwALwEADU1tTAAAAAf/////AQH/////AwAAABVg" + + "iQoCAAAAAAAGAAAAQWN0aXZlAQBuTAAuAERuTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAA" + + "Q2xhc3NpZmljYXRpb24BAG9MAC4ARG9MAAAGAQAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAcEwALgBEcEwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABgAAABTdGF0ZU9wZXJhdGlvbmFsQnlNZXRob2QBAHJMAC8BAA1NckwAAAAH/////wEB/////wMA" + + "AAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAc0wALgBEc0wAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "DgAAAENsYXNzaWZpY2F0aW9uAQB0TAAuAER0TAAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAA" + + "AAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAHVMAC4ARHVMAAAGAAAAAAEAC03/////AQH/////AAAAABVg" + + "iQoCAAAAAAAYAAAAU3RhdGVPcGVyYXRpb25hbEJ5UGFyZW50AQB3TAAvAQANTXdMAAAAB/////8BAf//" + + "//8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAHhMAC4ARHhMAAAAAf////8BAf////8AAAAAFWCpCgIA" + + "AAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAeUwALgBEeUwAAAYAAAAAAQASTf////8BAf////8AAAAAFWCp" + + "CgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQB6TAAuAER6TAAABgAAAAABAAtN/////wEB/////wAA" + + "AAAVYIkKAgAAAAAAGQAAAFN0YXRlT3BlcmF0aW9uYWxGcm9tRXJyb3IBAHxMAC8BAA1NfEwAAAAH////" + + "/wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAfUwALgBEfUwAAAAB/////wEB/////wAAAAAV" + + "YKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQB+TAAuAER+TAAABgAAAAABABJN/////wEB/////wAA" + + "AAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAH9MAC4ARH9MAAAGAAAAAAEAC03/////AQH/" + + "////AAAAABVgiQoCAAAAAAATAAAAU3RhdGVQYXVzZWRCeVBhcmVudAEAgUwALwEADU2BTAAAAAf/////" + + "AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCCTAAuAESCTAAAAAH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAINMAC4ARINMAAAGAAAAAAEAEk3/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAhEwALgBEhEwAAAYAAAAAAQALTf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABUAAABTdGF0ZURpc2FibGVkQnlNZXRob2QBAIZMAC8BAA1NhkwAAAAH////" + + "/wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAh0wALgBEh0wAAAAB/////wEB/////wAAAAAV" + + "YKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCITAAuAESITAAABgAAAAABABJN/////wEB/////wAA" + + "AAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAIlMAC4ARIlMAAAGAAAAAAEAC03/////AQH/" + + "////AAAAABVgiQoCAAAAAAAVAAAARmFpbGVkRGF0YVNldE1lc3NhZ2VzAQCMTAAvAQANTYxMAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAI1MAC4ARI1MAAAAAf////8BAf////8AAAAA" + + "FWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAjkwALgBEjkwAAAYBAAAAAQASTf////8BAf////8A" + + "AAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCPTAAuAESPTAAABgAAAAABAAtN/////wEB" + + "/////wAAAAAEYIAKAQAAAAAACgAAAExpdmVWYWx1ZXMBAItMAC8AOotMAAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState DataSetWriterId + { + get + { + return m_dataSetWriterId; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetWriterId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetWriterId = value; + } + } + + /// + public PropertyState DataSetFieldContentMask + { + get + { + return m_dataSetFieldContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetFieldContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetFieldContentMask = value; + } + } + + /// + public PropertyState KeyFrameCount + { + get + { + return m_keyFrameCount; + } + + set + { + if (!Object.ReferenceEquals(m_keyFrameCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_keyFrameCount = value; + } + } + + /// + public PropertyState DataSetWriterProperties + { + get + { + return m_dataSetWriterProperties; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetWriterProperties, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetWriterProperties = value; + } + } + + /// + public DataSetWriterTransportState TransportSettings + { + get + { + return m_transportSettings; + } + + set + { + if (!Object.ReferenceEquals(m_transportSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportSettings = value; + } + } + + /// + public DataSetWriterMessageState MessageSettings + { + get + { + return m_messageSettings; + } + + set + { + if (!Object.ReferenceEquals(m_messageSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageSettings = value; + } + } + + /// + public PubSubStatusState Status + { + get + { + return m_status; + } + + set + { + if (!Object.ReferenceEquals(m_status, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_status = value; + } + } + + /// + public PubSubDiagnosticsDataSetWriterState Diagnostics + { + get + { + return m_diagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_diagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnostics = 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_dataSetWriterId != null) + { + children.Add(m_dataSetWriterId); + } + + if (m_dataSetFieldContentMask != null) + { + children.Add(m_dataSetFieldContentMask); + } + + if (m_keyFrameCount != null) + { + children.Add(m_keyFrameCount); + } + + if (m_dataSetWriterProperties != null) + { + children.Add(m_dataSetWriterProperties); + } + + if (m_transportSettings != null) + { + children.Add(m_transportSettings); + } + + if (m_messageSettings != null) + { + children.Add(m_messageSettings); + } + + if (m_status != null) + { + children.Add(m_status); + } + + if (m_diagnostics != null) + { + children.Add(m_diagnostics); + } + + 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 Opc.Ua.BrowseNames.DataSetWriterId: + { + if (createOrReplace) + { + if (DataSetWriterId == null) + { + if (replacement == null) + { + DataSetWriterId = new PropertyState(this); + } + else + { + DataSetWriterId = (PropertyState)replacement; + } + } + } + + instance = DataSetWriterId; + break; + } + + case Opc.Ua.BrowseNames.DataSetFieldContentMask: + { + if (createOrReplace) + { + if (DataSetFieldContentMask == null) + { + if (replacement == null) + { + DataSetFieldContentMask = new PropertyState(this); + } + else + { + DataSetFieldContentMask = (PropertyState)replacement; + } + } + } + + instance = DataSetFieldContentMask; + break; + } + + case Opc.Ua.BrowseNames.KeyFrameCount: + { + if (createOrReplace) + { + if (KeyFrameCount == null) + { + if (replacement == null) + { + KeyFrameCount = new PropertyState(this); + } + else + { + KeyFrameCount = (PropertyState)replacement; + } + } + } + + instance = KeyFrameCount; + break; + } + + case Opc.Ua.BrowseNames.DataSetWriterProperties: + { + if (createOrReplace) + { + if (DataSetWriterProperties == null) + { + if (replacement == null) + { + DataSetWriterProperties = new PropertyState(this); + } + else + { + DataSetWriterProperties = (PropertyState)replacement; + } + } + } + + instance = DataSetWriterProperties; + break; + } + + case Opc.Ua.BrowseNames.TransportSettings: + { + if (createOrReplace) + { + if (TransportSettings == null) + { + if (replacement == null) + { + TransportSettings = new DataSetWriterTransportState(this); + } + else + { + TransportSettings = (DataSetWriterTransportState)replacement; + } + } + } + + instance = TransportSettings; + break; + } + + case Opc.Ua.BrowseNames.MessageSettings: + { + if (createOrReplace) + { + if (MessageSettings == null) + { + if (replacement == null) + { + MessageSettings = new DataSetWriterMessageState(this); + } + else + { + MessageSettings = (DataSetWriterMessageState)replacement; + } + } + } + + instance = MessageSettings; + break; + } + + case Opc.Ua.BrowseNames.Status: + { + if (createOrReplace) + { + if (Status == null) + { + if (replacement == null) + { + Status = new PubSubStatusState(this); + } + else + { + Status = (PubSubStatusState)replacement; + } + } + } + + instance = Status; + break; + } + + case Opc.Ua.BrowseNames.Diagnostics: + { + if (createOrReplace) + { + if (Diagnostics == null) + { + if (replacement == null) + { + Diagnostics = new PubSubDiagnosticsDataSetWriterState(this); + } + else + { + Diagnostics = (PubSubDiagnosticsDataSetWriterState)replacement; + } + } + } + + instance = Diagnostics; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_dataSetWriterId; + private PropertyState m_dataSetFieldContentMask; + private PropertyState m_keyFrameCount; + private PropertyState m_dataSetWriterProperties; + private DataSetWriterTransportState m_transportSettings; + private DataSetWriterMessageState m_messageSettings; + private PubSubStatusState m_status; + private PubSubDiagnosticsDataSetWriterState m_diagnostics; + #endregion + } + #endif + #endregion + + #region DataSetWriterTransportState Class + #if (!OPCUA_EXCLUDE_DataSetWriterTransportState) + /// + /// Stores an instance of the DataSetWriterTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetWriterTransportState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetWriterTransportState(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(Opc.Ua.ObjectTypes.DataSetWriterTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAERhdGFTZXRXcml0ZXJUcmFuc3BvcnRUeXBlSW5zdGFuY2UBAMk7" + + "AQDJO8k7AAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataSetWriterMessageState Class + #if (!OPCUA_EXCLUDE_DataSetWriterMessageState) + /// + /// Stores an instance of the DataSetWriterMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetWriterMessageState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetWriterMessageState(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(Opc.Ua.ObjectTypes.DataSetWriterMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAERhdGFTZXRXcml0ZXJNZXNzYWdlVHlwZUluc3RhbmNlAQBoUgEA" + + "aFJoUgAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataSetReaderState Class + #if (!OPCUA_EXCLUDE_DataSetReaderState) + /// + /// Stores an instance of the DataSetReaderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetReaderState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetReaderState(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(Opc.Ua.ObjectTypes.DataSetReaderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SecurityMode != null) + { + SecurityMode.Initialize(context, SecurityMode_InitializationString); + } + + if (SecurityGroupId != null) + { + SecurityGroupId.Initialize(context, SecurityGroupId_InitializationString); + } + + if (SecurityKeyServices != null) + { + SecurityKeyServices.Initialize(context, SecurityKeyServices_InitializationString); + } + + if (TransportSettings != null) + { + TransportSettings.Initialize(context, TransportSettings_InitializationString); + } + + if (MessageSettings != null) + { + MessageSettings.Initialize(context, MessageSettings_InitializationString); + } + + if (Diagnostics != null) + { + Diagnostics.Initialize(context, Diagnostics_InitializationString); + } + + if (CreateTargetVariables != null) + { + CreateTargetVariables.Initialize(context, CreateTargetVariables_InitializationString); + } + + if (CreateDataSetMirror != null) + { + CreateDataSetMirror.Initialize(context, CreateDataSetMirror_InitializationString); + } + } + + #region Initialization String + private const string SecurityMode_InitializationString = + "//////////8VYIkKAgAAAAAADAAAAFNlY3VyaXR5TW9kZQEAPD4ALgBEPD4AAAEALgH/////AQH/////" + + "AAAAAA=="; + + private const string SecurityGroupId_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAFNlY3VyaXR5R3JvdXBJZAEAPT4ALgBEPT4AAAAM/////wEB////" + + "/wAAAAA="; + + private const string SecurityKeyServices_InitializationString = + "//////////8XYIkKAgAAAAAAEwAAAFNlY3VyaXR5S2V5U2VydmljZXMBAD4+AC4ARD4+AAABADgBAQAA" + + "AAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string TransportSettings_InitializationString = + "//////////8EYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQDPOwAvAQDXO887AAD/////AAAA" + + "AA=="; + + private const string MessageSettings_InitializationString = + "//////////8EYIAKAQAAAAAADwAAAE1lc3NhZ2VTZXR0aW5ncwEAb1IALwEAcFJvUgAA/////wAAAAA="; + + private const string Diagnostics_InitializationString = + "//////////8EYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQCZTAAvAQA7TplMAAD/////BwAAABVgiQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAmkwALwA/mkwAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAm0wALwEADU2bTAAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQCcTAAuAEScTAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAJ1MAC4ARJ1MAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAJ5MAC4ARJ5MAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFs" + + "RXJyb3IBAKBMAC8BAA1NoEwAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAoUwA" + + "LgBEoUwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCiTAAuAESi" + + "TAAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCjTAAuAESj" + + "TAAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNldAEApUwALwEA6UylTAAAAQH/////" + + "AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAKZMAC8AP6ZMAAAAAf////8BAf////8AAAAABGCACgEA" + + "AAAAAAgAAABDb3VudGVycwEAp0wALwA6p0wAAP////8HAAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9y" + + "AQCoTAAvAQANTahMAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAKlMAC4ARKlM" + + "AAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAqkwALgBEqkwAAAYB" + + "AAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCrTAAuAESr" + + "TAAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1l" + + "dGhvZAEArUwALwEADU2tTAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCuTAAu" + + "AESuTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAK9MAC4ARK9M" + + "AAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAsEwA" + + "LgBEsEwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFs" + + "QnlQYXJlbnQBALJMAC8BAA1NskwAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA" + + "s0wALgBEs0wAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQC0TAAu" + + "AES0TAAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwB" + + "ALVMAC4ARLVMAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRp" + + "b25hbEZyb21FcnJvcgEAt0wALwEADU23TAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQC4TAAuAES4TAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "ALlMAC4ARLlMAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAukwALgBEukwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBh" + + "dXNlZEJ5UGFyZW50AQC8TAAvAQANTbxMAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3Rp" + + "dmUBAL1MAC4ARL1MAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA" + + "vkwALgBEvkwAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xl" + + "dmVsAQC/TAAuAES/TAAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlz" + + "YWJsZWRCeU1ldGhvZAEAwUwALwEADU3BTAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0" + + "aXZlAQDCTAAuAETCTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24B" + + "AMNMAC4ARMNMAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NM" + + "ZXZlbAEAxEwALgBExEwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABUAAABGYWlsZWRE" + + "YXRhU2V0TWVzc2FnZXMBAMdMAC8BAA1Nx0wAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFj" + + "dGl2ZQEAyEwALgBEyEwAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9u" + + "AQDJTAAuAETJTAAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNz" + + "TGV2ZWwBAMpMAC4ARMpMAAAGAAAAAAEAC03/////AQH/////AAAAAARggAoBAAAAAAAKAAAATGl2ZVZh" + + "bHVlcwEAxkwALwA6xkwAAP////8AAAAA"; + + private const string CreateTargetVariables_InitializationString = + "//////////8EYYIKBAAAAAAAFQAAAENyZWF0ZVRhcmdldFZhcmlhYmxlcwEA6kMALwEA6kPqQwAAAQH/" + + "////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAOtDAC4AROtDAACWAgAAAAEAKgEBJQAA" + + "ABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBASkAAAAUAAAAVGFyZ2V0VmFy" + + "aWFibGVzVG9BZGQBAJg5AQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIA" + + "AAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAOxDAC4AROxDAACWAQAAAAEAKgEBHQAAAAoAAABBZGRSZXN1" + + "bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string CreateDataSetMirror_InitializationString = + "//////////8EYYIKBAAAAAAAEwAAAENyZWF0ZURhdGFTZXRNaXJyb3IBAO1DAC8BAO1D7UMAAAEB////" + + "/wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDuQwAuAETuQwAAlgIAAAABACoBAR0AAAAO" + + "AAAAUGFyZW50Tm9kZU5hbWUADP////8AAAAAAAEAKgEBIgAAAA8AAABSb2xlUGVybWlzc2lvbnMAYAEA" + + "AAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJn" + + "dW1lbnRzAQDvQwAuAETvQwAAlgEAAAABACoBARsAAAAMAAAAUGFyZW50Tm9kZUlkABH/////AAAAAAAB" + + "ACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGQAAAERhdGFTZXRSZWFkZXJUeXBlSW5zdGFuY2UBAMo7AQDKO8o7AAD/" + + "////EwAAABVgiQoCAAAAAAALAAAAUHVibGlzaGVySWQBAGlSAC4ARGlSAAAAGP////8BAf////8AAAAA" + + "FWCJCgIAAAAAAA0AAABXcml0ZXJHcm91cElkAQBqUgAuAERqUgAAAAX/////AQH/////AAAAABVgiQoC" + + "AAAAAAAPAAAARGF0YVNldFdyaXRlcklkAQBrUgAuAERrUgAAAAX/////AQH/////AAAAABVgiQoCAAAA" + + "AAAPAAAARGF0YVNldE1ldGFEYXRhAQBsUgAuAERsUgAAAQC7OP////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABcAAABEYXRhU2V0RmllbGRDb250ZW50TWFzawEAbVIALgBEbVIAAAEA3zz/////AQH/////AAAAABVg" + + "iQoCAAAAAAAVAAAATWVzc2FnZVJlY2VpdmVUaW1lb3V0AQBuUgAuAERuUgAAAQAiAf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA0AAABLZXlGcmFtZUNvdW50AQCbRAAuAESbRAAAAAf/////AQH/////AAAAABVg" + + "iQoCAAAAAAAPAAAASGVhZGVyTGF5b3V0VXJpAQCcRAAuAEScRAAAAAz/////AQH/////AAAAABVgiQoC" + + "AAAAAAAMAAAAU2VjdXJpdHlNb2RlAQA8PgAuAEQ8PgAAAQAuAf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AA8AAABTZWN1cml0eUdyb3VwSWQBAD0+AC4ARD0+AAAADP////8BAf////8AAAAAF2CJCgIAAAAAABMA" + + "AABTZWN1cml0eUtleVNlcnZpY2VzAQA+PgAuAEQ+PgAAAQA4AQEAAAABAAAAAAAAAAEB/////wAAAAAX" + + "YIkKAgAAAAAAFwAAAERhdGFTZXRSZWFkZXJQcm9wZXJ0aWVzAQBWRAAuAERWRAAAAQDFOAEAAAABAAAA" + + "AAAAAAEB/////wAAAAAEYIAKAQAAAAAAEQAAAFRyYW5zcG9ydFNldHRpbmdzAQDPOwAvAQDXO887AAD/" + + "////AAAAAARggAoBAAAAAAAPAAAATWVzc2FnZVNldHRpbmdzAQBvUgAvAQBwUm9SAAD/////AAAAAARg" + + "gAoBAAAAAAAGAAAAU3RhdHVzAQDLOwAvAQAzOcs7AAD/////AQAAABVgiQoCAAAAAAAFAAAAU3RhdGUB" + + "AMw7AC8AP8w7AAABADc5/////wEB/////wAAAAAEYIAKAQAAAAAACwAAAERpYWdub3N0aWNzAQCZTAAv" + + "AQA7TplMAAD/////BwAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAmkwALwA/mkwAAAEA" + + "C03/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAm0wALwEADU2bTAAA" + + "AAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCcTAAuAEScTAAAAAH/////AQH/////" + + "AAAAABVgiQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAJ1MAC4ARJ1MAAABABJN/////wEB/////wAA" + + "AAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAJ5MAC4ARJ5MAAABAAtN/////wEB/////wAA" + + "AAAVYIkKAgAAAAAACgAAAFRvdGFsRXJyb3IBAKBMAC8BAA1NoEwAAAAH/////wEB/////wMAAAAVYIkK" + + "AgAAAAAABgAAAEFjdGl2ZQEAoUwALgBEoUwAAAAB/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENs" + + "YXNzaWZpY2F0aW9uAQCiTAAuAESiTAAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFn" + + "bm9zdGljc0xldmVsAQCjTAAuAESjTAAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUAAABSZXNl" + + "dAEApUwALwEA6UylTAAAAQH/////AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAKZMAC8AP6ZMAAAA" + + "Af////8BAf////8AAAAABGCACgEAAAAAAAgAAABDb3VudGVycwEAp0wALwA6p0wAAP////8HAAAAFWCJ" + + "CgIAAAAAAAoAAABTdGF0ZUVycm9yAQCoTAAvAQANTahMAAAAB/////8BAf////8DAAAAFWCJCgIAAAAA" + + "AAYAAABBY3RpdmUBAKlMAC4ARKlMAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFzc2lm" + + "aWNhdGlvbgEAqkwALgBEqkwAAAYBAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABEaWFn" + + "bm9zdGljc0xldmVsAQCrTAAuAESrTAAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGAAA" + + "AFN0YXRlT3BlcmF0aW9uYWxCeU1ldGhvZAEArUwALwEADU2tTAAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQCuTAAuAESuTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAK9MAC4ARK9MAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAA" + + "RGlhZ25vc3RpY3NMZXZlbAEAsEwALgBEsEwAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAA" + + "ABgAAABTdGF0ZU9wZXJhdGlvbmFsQnlQYXJlbnQBALJMAC8BAA1NskwAAAAH/////wEB/////wMAAAAV" + + "YIkKAgAAAAAABgAAAEFjdGl2ZQEAs0wALgBEs0wAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAA" + + "AENsYXNzaWZpY2F0aW9uAQC0TAAuAES0TAAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBALVMAC4ARLVMAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAZAAAAU3RhdGVPcGVyYXRpb25hbEZyb21FcnJvcgEAt0wALwEADU23TAAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQC4TAAuAES4TAAAAAH/////AQH/////AAAAABVgqQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BALlMAC4ARLlMAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAukwALgBEukwAAAYAAAAAAQALTf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABMAAABTdGF0ZVBhdXNlZEJ5UGFyZW50AQC8TAAvAQANTbxMAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAL1MAC4ARL1MAAAAAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEAvkwALgBEvkwAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIA" + + "AAAAABAAAABEaWFnbm9zdGljc0xldmVsAQC/TAAuAES/TAAABgAAAAABAAtN/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAFQAAAFN0YXRlRGlzYWJsZWRCeU1ldGhvZAEAwUwALwEADU3BTAAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDCTAAuAETCTAAAAAH/////AQH/////AAAAABVgqQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BAMNMAC4ARMNMAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAxEwALgBExEwAAAYAAAAAAQALTf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABUAAABGYWlsZWREYXRhU2V0TWVzc2FnZXMBAMdMAC8BAA1Nx0wAAAAH/////wEB////" + + "/wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAyEwALgBEyEwAAAAB/////wEB/////wAAAAAVYKkKAgAA" + + "AAAADgAAAENsYXNzaWZpY2F0aW9uAQDJTAAuAETJTAAABgEAAAABABJN/////wEB/////wAAAAAVYKkK" + + "AgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAMpMAC4ARMpMAAAGAAAAAAEAC03/////AQH/////AAAA" + + "AARggAoBAAAAAAAKAAAATGl2ZVZhbHVlcwEAxkwALwA6xkwAAP////8AAAAABGCACgEAAAAAABEAAABT" + + "dWJzY3JpYmVkRGF0YVNldAEA1DsALwEABDvUOwAA/////wAAAAAEYYIKBAAAAAAAFQAAAENyZWF0ZVRh" + + "cmdldFZhcmlhYmxlcwEA6kMALwEA6kPqQwAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1" + + "bWVudHMBAOtDAC4AROtDAACWAgAAAAEAKgEBJQAAABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/" + + "////AAAAAAABACoBASkAAAAUAAAAVGFyZ2V0VmFyaWFibGVzVG9BZGQBAJg5AQAAAAEAAAAAAAAAAAEA" + + "KAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAOxDAC4A" + + "ROxDAACWAQAAAAEAKgEBHQAAAAoAAABBZGRSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAA" + + "AAAAAAEB/////wAAAAAEYYIKBAAAAAAAEwAAAENyZWF0ZURhdGFTZXRNaXJyb3IBAO1DAC8BAO1D7UMA" + + "AAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQDuQwAuAETuQwAAlgIAAAABACoB" + + "AR0AAAAOAAAAUGFyZW50Tm9kZU5hbWUADP////8AAAAAAAEAKgEBIgAAAA8AAABSb2xlUGVybWlzc2lv" + + "bnMAYAEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0" + + "cHV0QXJndW1lbnRzAQDvQwAuAETvQwAAlgEAAAABACoBARsAAAAMAAAAUGFyZW50Tm9kZUlkABH/////" + + "AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState PublisherId + { + get + { + return m_publisherId; + } + + set + { + if (!Object.ReferenceEquals(m_publisherId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publisherId = value; + } + } + + /// + public PropertyState WriterGroupId + { + get + { + return m_writerGroupId; + } + + set + { + if (!Object.ReferenceEquals(m_writerGroupId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_writerGroupId = value; + } + } + + /// + public PropertyState DataSetWriterId + { + get + { + return m_dataSetWriterId; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetWriterId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetWriterId = value; + } + } + + /// + public PropertyState DataSetMetaData + { + get + { + return m_dataSetMetaData; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetMetaData, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetMetaData = value; + } + } + + /// + public PropertyState DataSetFieldContentMask + { + get + { + return m_dataSetFieldContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetFieldContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetFieldContentMask = value; + } + } + + /// + public PropertyState MessageReceiveTimeout + { + get + { + return m_messageReceiveTimeout; + } + + set + { + if (!Object.ReferenceEquals(m_messageReceiveTimeout, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageReceiveTimeout = value; + } + } + + /// + public PropertyState KeyFrameCount + { + get + { + return m_keyFrameCount; + } + + set + { + if (!Object.ReferenceEquals(m_keyFrameCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_keyFrameCount = value; + } + } + + /// + public PropertyState HeaderLayoutUri + { + get + { + return m_headerLayoutUri; + } + + set + { + if (!Object.ReferenceEquals(m_headerLayoutUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_headerLayoutUri = value; + } + } + + /// + public PropertyState SecurityMode + { + get + { + return m_securityMode; + } + + set + { + if (!Object.ReferenceEquals(m_securityMode, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityMode = value; + } + } + + /// + public PropertyState SecurityGroupId + { + get + { + return m_securityGroupId; + } + + set + { + if (!Object.ReferenceEquals(m_securityGroupId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityGroupId = value; + } + } + + /// + public PropertyState SecurityKeyServices + { + get + { + return m_securityKeyServices; + } + + set + { + if (!Object.ReferenceEquals(m_securityKeyServices, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_securityKeyServices = value; + } + } + + /// + public PropertyState DataSetReaderProperties + { + get + { + return m_dataSetReaderProperties; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetReaderProperties, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetReaderProperties = value; + } + } + + /// + public DataSetReaderTransportState TransportSettings + { + get + { + return m_transportSettings; + } + + set + { + if (!Object.ReferenceEquals(m_transportSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_transportSettings = value; + } + } + + /// + public DataSetReaderMessageState MessageSettings + { + get + { + return m_messageSettings; + } + + set + { + if (!Object.ReferenceEquals(m_messageSettings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageSettings = value; + } + } + + /// + public PubSubStatusState Status + { + get + { + return m_status; + } + + set + { + if (!Object.ReferenceEquals(m_status, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_status = value; + } + } + + /// + public PubSubDiagnosticsDataSetReaderState Diagnostics + { + get + { + return m_diagnostics; + } + + set + { + if (!Object.ReferenceEquals(m_diagnostics, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnostics = value; + } + } + + /// + public SubscribedDataSetState SubscribedDataSet + { + get + { + return m_subscribedDataSet; + } + + set + { + if (!Object.ReferenceEquals(m_subscribedDataSet, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_subscribedDataSet = value; + } + } + + /// + public DataSetReaderTypeCreateTargetVariablesMethodState CreateTargetVariables + { + get + { + return m_createTargetVariablesMethod; + } + + set + { + if (!Object.ReferenceEquals(m_createTargetVariablesMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createTargetVariablesMethod = value; + } + } + + /// + public DataSetReaderTypeCreateDataSetMirrorMethodState CreateDataSetMirror + { + get + { + return m_createDataSetMirrorMethod; + } + + set + { + if (!Object.ReferenceEquals(m_createDataSetMirrorMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_createDataSetMirrorMethod = 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_publisherId != null) + { + children.Add(m_publisherId); + } + + if (m_writerGroupId != null) + { + children.Add(m_writerGroupId); + } + + if (m_dataSetWriterId != null) + { + children.Add(m_dataSetWriterId); + } + + if (m_dataSetMetaData != null) + { + children.Add(m_dataSetMetaData); + } + + if (m_dataSetFieldContentMask != null) + { + children.Add(m_dataSetFieldContentMask); + } + + if (m_messageReceiveTimeout != null) + { + children.Add(m_messageReceiveTimeout); + } + + if (m_keyFrameCount != null) + { + children.Add(m_keyFrameCount); + } + + if (m_headerLayoutUri != null) + { + children.Add(m_headerLayoutUri); + } + + if (m_securityMode != null) + { + children.Add(m_securityMode); + } + + if (m_securityGroupId != null) + { + children.Add(m_securityGroupId); + } + + if (m_securityKeyServices != null) + { + children.Add(m_securityKeyServices); + } + + if (m_dataSetReaderProperties != null) + { + children.Add(m_dataSetReaderProperties); + } + + if (m_transportSettings != null) + { + children.Add(m_transportSettings); + } + + if (m_messageSettings != null) + { + children.Add(m_messageSettings); + } + + if (m_status != null) + { + children.Add(m_status); + } + + if (m_diagnostics != null) + { + children.Add(m_diagnostics); + } + + if (m_subscribedDataSet != null) + { + children.Add(m_subscribedDataSet); + } + + if (m_createTargetVariablesMethod != null) + { + children.Add(m_createTargetVariablesMethod); + } + + if (m_createDataSetMirrorMethod != null) + { + children.Add(m_createDataSetMirrorMethod); + } + + 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 Opc.Ua.BrowseNames.PublisherId: + { + if (createOrReplace) + { + if (PublisherId == null) + { + if (replacement == null) + { + PublisherId = new PropertyState(this); + } + else + { + PublisherId = (PropertyState)replacement; + } + } + } + + instance = PublisherId; + break; + } + + case Opc.Ua.BrowseNames.WriterGroupId: + { + if (createOrReplace) + { + if (WriterGroupId == null) + { + if (replacement == null) + { + WriterGroupId = new PropertyState(this); + } + else + { + WriterGroupId = (PropertyState)replacement; + } + } + } + + instance = WriterGroupId; + break; + } + + case Opc.Ua.BrowseNames.DataSetWriterId: + { + if (createOrReplace) + { + if (DataSetWriterId == null) + { + if (replacement == null) + { + DataSetWriterId = new PropertyState(this); + } + else + { + DataSetWriterId = (PropertyState)replacement; + } + } + } + + instance = DataSetWriterId; + break; + } + + case Opc.Ua.BrowseNames.DataSetMetaData: + { + if (createOrReplace) + { + if (DataSetMetaData == null) + { + if (replacement == null) + { + DataSetMetaData = new PropertyState(this); + } + else + { + DataSetMetaData = (PropertyState)replacement; + } + } + } + + instance = DataSetMetaData; + break; + } + + case Opc.Ua.BrowseNames.DataSetFieldContentMask: + { + if (createOrReplace) + { + if (DataSetFieldContentMask == null) + { + if (replacement == null) + { + DataSetFieldContentMask = new PropertyState(this); + } + else + { + DataSetFieldContentMask = (PropertyState)replacement; + } + } + } + + instance = DataSetFieldContentMask; + break; + } + + case Opc.Ua.BrowseNames.MessageReceiveTimeout: + { + if (createOrReplace) + { + if (MessageReceiveTimeout == null) + { + if (replacement == null) + { + MessageReceiveTimeout = new PropertyState(this); + } + else + { + MessageReceiveTimeout = (PropertyState)replacement; + } + } + } + + instance = MessageReceiveTimeout; + break; + } + + case Opc.Ua.BrowseNames.KeyFrameCount: + { + if (createOrReplace) + { + if (KeyFrameCount == null) + { + if (replacement == null) + { + KeyFrameCount = new PropertyState(this); + } + else + { + KeyFrameCount = (PropertyState)replacement; + } + } + } + + instance = KeyFrameCount; + break; + } + + case Opc.Ua.BrowseNames.HeaderLayoutUri: + { + if (createOrReplace) + { + if (HeaderLayoutUri == null) + { + if (replacement == null) + { + HeaderLayoutUri = new PropertyState(this); + } + else + { + HeaderLayoutUri = (PropertyState)replacement; + } + } + } + + instance = HeaderLayoutUri; + break; + } + + case Opc.Ua.BrowseNames.SecurityMode: + { + if (createOrReplace) + { + if (SecurityMode == null) + { + if (replacement == null) + { + SecurityMode = new PropertyState(this); + } + else + { + SecurityMode = (PropertyState)replacement; + } + } + } + + instance = SecurityMode; + break; + } + + case Opc.Ua.BrowseNames.SecurityGroupId: + { + if (createOrReplace) + { + if (SecurityGroupId == null) + { + if (replacement == null) + { + SecurityGroupId = new PropertyState(this); + } + else + { + SecurityGroupId = (PropertyState)replacement; + } + } + } + + instance = SecurityGroupId; + break; + } + + case Opc.Ua.BrowseNames.SecurityKeyServices: + { + if (createOrReplace) + { + if (SecurityKeyServices == null) + { + if (replacement == null) + { + SecurityKeyServices = new PropertyState(this); + } + else + { + SecurityKeyServices = (PropertyState)replacement; + } + } + } + + instance = SecurityKeyServices; + break; + } + + case Opc.Ua.BrowseNames.DataSetReaderProperties: + { + if (createOrReplace) + { + if (DataSetReaderProperties == null) + { + if (replacement == null) + { + DataSetReaderProperties = new PropertyState(this); + } + else + { + DataSetReaderProperties = (PropertyState)replacement; + } + } + } + + instance = DataSetReaderProperties; + break; + } + + case Opc.Ua.BrowseNames.TransportSettings: + { + if (createOrReplace) + { + if (TransportSettings == null) + { + if (replacement == null) + { + TransportSettings = new DataSetReaderTransportState(this); + } + else + { + TransportSettings = (DataSetReaderTransportState)replacement; + } + } + } + + instance = TransportSettings; + break; + } + + case Opc.Ua.BrowseNames.MessageSettings: + { + if (createOrReplace) + { + if (MessageSettings == null) + { + if (replacement == null) + { + MessageSettings = new DataSetReaderMessageState(this); + } + else + { + MessageSettings = (DataSetReaderMessageState)replacement; + } + } + } + + instance = MessageSettings; + break; + } + + case Opc.Ua.BrowseNames.Status: + { + if (createOrReplace) + { + if (Status == null) + { + if (replacement == null) + { + Status = new PubSubStatusState(this); + } + else + { + Status = (PubSubStatusState)replacement; + } + } + } + + instance = Status; + break; + } + + case Opc.Ua.BrowseNames.Diagnostics: + { + if (createOrReplace) + { + if (Diagnostics == null) + { + if (replacement == null) + { + Diagnostics = new PubSubDiagnosticsDataSetReaderState(this); + } + else + { + Diagnostics = (PubSubDiagnosticsDataSetReaderState)replacement; + } + } + } + + instance = Diagnostics; + break; + } + + case Opc.Ua.BrowseNames.SubscribedDataSet: + { + if (createOrReplace) + { + if (SubscribedDataSet == null) + { + if (replacement == null) + { + SubscribedDataSet = new SubscribedDataSetState(this); + } + else + { + SubscribedDataSet = (SubscribedDataSetState)replacement; + } + } + } + + instance = SubscribedDataSet; + break; + } + + case Opc.Ua.BrowseNames.CreateTargetVariables: + { + if (createOrReplace) + { + if (CreateTargetVariables == null) + { + if (replacement == null) + { + CreateTargetVariables = new DataSetReaderTypeCreateTargetVariablesMethodState(this); + } + else + { + CreateTargetVariables = (DataSetReaderTypeCreateTargetVariablesMethodState)replacement; + } + } + } + + instance = CreateTargetVariables; + break; + } + + case Opc.Ua.BrowseNames.CreateDataSetMirror: + { + if (createOrReplace) + { + if (CreateDataSetMirror == null) + { + if (replacement == null) + { + CreateDataSetMirror = new DataSetReaderTypeCreateDataSetMirrorMethodState(this); + } + else + { + CreateDataSetMirror = (DataSetReaderTypeCreateDataSetMirrorMethodState)replacement; + } + } + } + + instance = CreateDataSetMirror; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_publisherId; + private PropertyState m_writerGroupId; + private PropertyState m_dataSetWriterId; + private PropertyState m_dataSetMetaData; + private PropertyState m_dataSetFieldContentMask; + private PropertyState m_messageReceiveTimeout; + private PropertyState m_keyFrameCount; + private PropertyState m_headerLayoutUri; + private PropertyState m_securityMode; + private PropertyState m_securityGroupId; + private PropertyState m_securityKeyServices; + private PropertyState m_dataSetReaderProperties; + private DataSetReaderTransportState m_transportSettings; + private DataSetReaderMessageState m_messageSettings; + private PubSubStatusState m_status; + private PubSubDiagnosticsDataSetReaderState m_diagnostics; + private SubscribedDataSetState m_subscribedDataSet; + private DataSetReaderTypeCreateTargetVariablesMethodState m_createTargetVariablesMethod; + private DataSetReaderTypeCreateDataSetMirrorMethodState m_createDataSetMirrorMethod; + #endregion + } + #endif + #endregion + + #region DataSetReaderTransportState Class + #if (!OPCUA_EXCLUDE_DataSetReaderTransportState) + /// + /// Stores an instance of the DataSetReaderTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetReaderTransportState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetReaderTransportState(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(Opc.Ua.ObjectTypes.DataSetReaderTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAERhdGFTZXRSZWFkZXJUcmFuc3BvcnRUeXBlSW5zdGFuY2UBANc7" + + "AQDXO9c7AAD/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataSetReaderMessageState Class + #if (!OPCUA_EXCLUDE_DataSetReaderMessageState) + /// + /// Stores an instance of the DataSetReaderMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetReaderMessageState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetReaderMessageState(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(Opc.Ua.ObjectTypes.DataSetReaderMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIAAAAERhdGFTZXRSZWFkZXJNZXNzYWdlVHlwZUluc3RhbmNlAQBwUgEA" + + "cFJwUgAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataSetReaderTypeCreateTargetVariablesMethodState Class + #if (!OPCUA_EXCLUDE_DataSetReaderTypeCreateTargetVariablesMethodState) + /// + /// Stores an instance of the DataSetReaderTypeCreateTargetVariablesMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetReaderTypeCreateTargetVariablesMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetReaderTypeCreateTargetVariablesMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new DataSetReaderTypeCreateTargetVariablesMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAMAAAAERhdGFTZXRSZWFkZXJUeXBlQ3JlYXRlVGFyZ2V0VmFyaWFibGVz" + + "TWV0aG9kVHlwZQEA8EMALwEA8EPwQwAAAQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVu" + + "dHMBAPFDAC4ARPFDAACWAgAAAAEAKgEBJQAAABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/////" + + "AAAAAAABACoBASkAAAAUAAAAVGFyZ2V0VmFyaWFibGVzVG9BZGQBAJg5AQAAAAEAAAAAAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAPJDAC4ARPJD" + + "AACWAQAAAAEAKgEBHQAAAAoAAABBZGRSZXN1bHRzABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAA" + + "AAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public DataSetReaderTypeCreateTargetVariablesMethodStateMethodCallHandler 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; + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + FieldTargetDataType[] targetVariablesToAdd = (FieldTargetDataType[])ExtensionObject.ToArray(_inputArguments[1], typeof(FieldTargetDataType)); + + StatusCode[] addResults = (StatusCode[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configurationVersion, + targetVariablesToAdd, + ref addResults); + } + + _outputArguments[0] = addResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult DataSetReaderTypeCreateTargetVariablesMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ConfigurationVersionDataType configurationVersion, + FieldTargetDataType[] targetVariablesToAdd, + ref StatusCode[] addResults); + #endif + #endregion + + #region DataSetReaderTypeCreateDataSetMirrorMethodState Class + #if (!OPCUA_EXCLUDE_DataSetReaderTypeCreateDataSetMirrorMethodState) + /// + /// Stores an instance of the DataSetReaderTypeCreateDataSetMirrorMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DataSetReaderTypeCreateDataSetMirrorMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DataSetReaderTypeCreateDataSetMirrorMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new DataSetReaderTypeCreateDataSetMirrorMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAALgAAAERhdGFTZXRSZWFkZXJUeXBlQ3JlYXRlRGF0YVNldE1pcnJvck1l" + + "dGhvZFR5cGUBAPNDAC8BAPND80MAAAEB/////wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRz" + + "AQD0QwAuAET0QwAAlgIAAAABACoBAR0AAAAOAAAAUGFyZW50Tm9kZU5hbWUADP////8AAAAAAAEAKgEB" + + "IgAAAA8AAABSb2xlUGVybWlzc2lvbnMAYAEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + + "AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQD1QwAuAET1QwAAlgEAAAABACoBARsAAAAM" + + "AAAAUGFyZW50Tm9kZUlkABH/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public DataSetReaderTypeCreateDataSetMirrorMethodStateMethodCallHandler 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; + + string parentNodeName = (string)_inputArguments[0]; + RolePermissionType[] rolePermissions = (RolePermissionType[])ExtensionObject.ToArray(_inputArguments[1], typeof(RolePermissionType)); + + NodeId parentNodeId = (NodeId)_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + parentNodeName, + rolePermissions, + ref parentNodeId); + } + + _outputArguments[0] = parentNodeId; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult DataSetReaderTypeCreateDataSetMirrorMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string parentNodeName, + RolePermissionType[] rolePermissions, + ref NodeId parentNodeId); + #endif + #endregion + + #region SubscribedDataSetState Class + #if (!OPCUA_EXCLUDE_SubscribedDataSetState) + /// + /// Stores an instance of the SubscribedDataSetType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SubscribedDataSetState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SubscribedDataSetState(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(Opc.Ua.ObjectTypes.SubscribedDataSetType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAFN1YnNjcmliZWREYXRhU2V0VHlwZUluc3RhbmNlAQAEOwEABDsE" + + "OwAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region TargetVariablesState Class + #if (!OPCUA_EXCLUDE_TargetVariablesState) + /// + /// Stores an instance of the TargetVariablesType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TargetVariablesState : SubscribedDataSetState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TargetVariablesState(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(Opc.Ua.ObjectTypes.TargetVariablesType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (AddTargetVariables != null) + { + AddTargetVariables.Initialize(context, AddTargetVariables_InitializationString); + } + + if (RemoveTargetVariables != null) + { + RemoveTargetVariables.Initialize(context, RemoveTargetVariables_InitializationString); + } + } + + #region Initialization String + private const string AddTargetVariables_InitializationString = + "//////////8EYYIKBAAAAAAAEgAAAEFkZFRhcmdldFZhcmlhYmxlcwEACzsALwEACzsLOwAAAQH/////" + + "AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAAw7AC4ARAw7AACWAgAAAAEAKgEBJQAAABQA" + + "AABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBASkAAAAUAAAAVGFyZ2V0VmFyaWFi" + + "bGVzVG9BZGQBAJg5AQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAA" + + "AA8AAABPdXRwdXRBcmd1bWVudHMBAA07AC4ARA07AACWAQAAAAEAKgEBHQAAAAoAAABBZGRSZXN1bHRz" + + "ABMBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + + private const string RemoveTargetVariables_InitializationString = + "//////////8EYYIKBAAAAAAAFQAAAFJlbW92ZVRhcmdldFZhcmlhYmxlcwEADjsALwEADjsOOwAAAQH/" + + "////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAA87AC4ARA87AACWAgAAAAEAKgEBJQAA" + + "ABQAAABDb25maWd1cmF0aW9uVmVyc2lvbgEAATn/////AAAAAAABACoBASIAAAAPAAAAVGFyZ2V0c1Rv" + + "UmVtb3ZlAAcBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAA" + + "AE91dHB1dEFyZ3VtZW50cwEAEDsALgBEEDsAAJYBAAAAAQAqAQEgAAAADQAAAFJlbW92ZVJlc3VsdHMA" + + "EwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGwAAAFRhcmdldFZhcmlhYmxlc1R5cGVJbnN0YW5jZQEABzsBAAc7BzsA" + + "AP////8DAAAAF2CJCgIAAAAAAA8AAABUYXJnZXRWYXJpYWJsZXMBAAo7AC4ARAo7AAABAJg5AQAAAAEA" + + "AAAAAAAAAQH/////AAAAAARhggoEAAAAAAASAAAAQWRkVGFyZ2V0VmFyaWFibGVzAQALOwAvAQALOws7" + + "AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50cwEADDsALgBEDDsAAJYCAAAAAQAq" + + "AQElAAAAFAAAAENvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8AAAAAAAEAKgEBKQAAABQAAABUYXJn" + + "ZXRWYXJpYWJsZXNUb0FkZAEAmDkBAAAAAQAAAAAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAX" + + "YKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEADTsALgBEDTsAAJYBAAAAAQAqAQEdAAAACgAAAEFk" + + "ZFJlc3VsdHMAEwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARhggoEAAAAAAAV" + + "AAAAUmVtb3ZlVGFyZ2V0VmFyaWFibGVzAQAOOwAvAQAOOw47AAABAf////8CAAAAF2CpCgIAAAAAAA4A" + + "AABJbnB1dEFyZ3VtZW50cwEADzsALgBEDzsAAJYCAAAAAQAqAQElAAAAFAAAAENvbmZpZ3VyYXRpb25W" + + "ZXJzaW9uAQABOf////8AAAAAAAEAKgEBIgAAAA8AAABUYXJnZXRzVG9SZW1vdmUABwEAAAABAAAAAAAA" + + "AAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAQ" + + "OwAuAEQQOwAAlgEAAAABACoBASAAAAANAAAAUmVtb3ZlUmVzdWx0cwATAQAAAAEAAAAAAAAAAAEAKAEB" + + "AAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState TargetVariables + { + get + { + return m_targetVariables; + } + + set + { + if (!Object.ReferenceEquals(m_targetVariables, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_targetVariables = value; + } + } + + /// + public TargetVariablesTypeAddTargetVariablesMethodState AddTargetVariables + { + get + { + return m_addTargetVariablesMethod; + } + + set + { + if (!Object.ReferenceEquals(m_addTargetVariablesMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_addTargetVariablesMethod = value; + } + } + + /// + public TargetVariablesTypeRemoveTargetVariablesMethodState RemoveTargetVariables + { + get + { + return m_removeTargetVariablesMethod; + } + + set + { + if (!Object.ReferenceEquals(m_removeTargetVariablesMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_removeTargetVariablesMethod = 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_targetVariables != null) + { + children.Add(m_targetVariables); + } + + if (m_addTargetVariablesMethod != null) + { + children.Add(m_addTargetVariablesMethod); + } + + if (m_removeTargetVariablesMethod != null) + { + children.Add(m_removeTargetVariablesMethod); + } + + 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 Opc.Ua.BrowseNames.TargetVariables: + { + if (createOrReplace) + { + if (TargetVariables == null) + { + if (replacement == null) + { + TargetVariables = new PropertyState(this); + } + else + { + TargetVariables = (PropertyState)replacement; + } + } + } + + instance = TargetVariables; + break; + } + + case Opc.Ua.BrowseNames.AddTargetVariables: + { + if (createOrReplace) + { + if (AddTargetVariables == null) + { + if (replacement == null) + { + AddTargetVariables = new TargetVariablesTypeAddTargetVariablesMethodState(this); + } + else + { + AddTargetVariables = (TargetVariablesTypeAddTargetVariablesMethodState)replacement; + } + } + } + + instance = AddTargetVariables; + break; + } + + case Opc.Ua.BrowseNames.RemoveTargetVariables: + { + if (createOrReplace) + { + if (RemoveTargetVariables == null) + { + if (replacement == null) + { + RemoveTargetVariables = new TargetVariablesTypeRemoveTargetVariablesMethodState(this); + } + else + { + RemoveTargetVariables = (TargetVariablesTypeRemoveTargetVariablesMethodState)replacement; + } + } + } + + instance = RemoveTargetVariables; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_targetVariables; + private TargetVariablesTypeAddTargetVariablesMethodState m_addTargetVariablesMethod; + private TargetVariablesTypeRemoveTargetVariablesMethodState m_removeTargetVariablesMethod; + #endregion + } + #endif + #endregion + + #region TargetVariablesTypeAddTargetVariablesMethodState Class + #if (!OPCUA_EXCLUDE_TargetVariablesTypeAddTargetVariablesMethodState) + /// + /// Stores an instance of the TargetVariablesTypeAddTargetVariablesMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TargetVariablesTypeAddTargetVariablesMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TargetVariablesTypeAddTargetVariablesMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new TargetVariablesTypeAddTargetVariablesMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAALwAAAFRhcmdldFZhcmlhYmxlc1R5cGVBZGRUYXJnZXRWYXJpYWJsZXNN" + + "ZXRob2RUeXBlAQAROwAvAQAROxE7AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3VtZW50" + + "cwEAEjsALgBEEjsAAJYCAAAAAQAqAQElAAAAFAAAAENvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf////8A" + + "AAAAAAEAKgEBKQAAABQAAABUYXJnZXRWYXJpYWJsZXNUb0FkZAEAmDkBAAAAAQAAAAAAAAAAAQAoAQEA" + + "AAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFyZ3VtZW50cwEAEzsALgBEEzsA" + + "AJYBAAAAAQAqAQEdAAAACgAAAEFkZFJlc3VsdHMAEwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAA" + + "AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public TargetVariablesTypeAddTargetVariablesMethodStateMethodCallHandler 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; + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + FieldTargetDataType[] targetVariablesToAdd = (FieldTargetDataType[])ExtensionObject.ToArray(_inputArguments[1], typeof(FieldTargetDataType)); + + StatusCode[] addResults = (StatusCode[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configurationVersion, + targetVariablesToAdd, + ref addResults); + } + + _outputArguments[0] = addResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult TargetVariablesTypeAddTargetVariablesMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ConfigurationVersionDataType configurationVersion, + FieldTargetDataType[] targetVariablesToAdd, + ref StatusCode[] addResults); + #endif + #endregion + + #region TargetVariablesTypeRemoveTargetVariablesMethodState Class + #if (!OPCUA_EXCLUDE_TargetVariablesTypeRemoveTargetVariablesMethodState) + /// + /// Stores an instance of the TargetVariablesTypeRemoveTargetVariablesMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class TargetVariablesTypeRemoveTargetVariablesMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public TargetVariablesTypeRemoveTargetVariablesMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new TargetVariablesTypeRemoveTargetVariablesMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAMgAAAFRhcmdldFZhcmlhYmxlc1R5cGVSZW1vdmVUYXJnZXRWYXJpYWJs" + + "ZXNNZXRob2RUeXBlAQAUOwAvAQAUOxQ7AAABAf////8CAAAAF2CpCgIAAAAAAA4AAABJbnB1dEFyZ3Vt" + + "ZW50cwEAFTsALgBEFTsAAJYCAAAAAQAqAQElAAAAFAAAAENvbmZpZ3VyYXRpb25WZXJzaW9uAQABOf//" + + "//8AAAAAAAEAKgEBIgAAAA8AAABUYXJnZXRzVG9SZW1vdmUABwEAAAABAAAAAAAAAAABACgBAQAAAAEA" + + "AAAAAAAAAQH/////AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQAWOwAuAEQWOwAAlgEA" + + "AAABACoBASAAAAANAAAAUmVtb3ZlUmVzdWx0cwATAQAAAAEAAAAAAAAAAAEAKAEBAAAAAQAAAAAAAAAB" + + "Af////8AAAAA"; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public TargetVariablesTypeRemoveTargetVariablesMethodStateMethodCallHandler 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; + + ConfigurationVersionDataType configurationVersion = (ConfigurationVersionDataType)ExtensionObject.ToEncodeable((ExtensionObject)_inputArguments[0]); + uint[] targetsToRemove = (uint[])_inputArguments[1]; + + StatusCode[] removeResults = (StatusCode[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + configurationVersion, + targetsToRemove, + ref removeResults); + } + + _outputArguments[0] = removeResults; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult TargetVariablesTypeRemoveTargetVariablesMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + ConfigurationVersionDataType configurationVersion, + uint[] targetsToRemove, + ref StatusCode[] removeResults); + #endif + #endregion + + #region SubscribedDataSetMirrorState Class + #if (!OPCUA_EXCLUDE_SubscribedDataSetMirrorState) + /// + /// Stores an instance of the SubscribedDataSetMirrorType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SubscribedDataSetMirrorState : SubscribedDataSetState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public SubscribedDataSetMirrorState(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(Opc.Ua.ObjectTypes.SubscribedDataSetMirrorType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIwAAAFN1YnNjcmliZWREYXRhU2V0TWlycm9yVHlwZUluc3RhbmNlAQAX" + + "OwEAFzsXOwAA/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubStatusState Class + #if (!OPCUA_EXCLUDE_PubSubStatusState) + /// + /// Stores an instance of the PubSubStatusType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubStatusState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubStatusState(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(Opc.Ua.ObjectTypes.PubSubStatusType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (Enable != null) + { + Enable.Initialize(context, Enable_InitializationString); + } + + if (Disable != null) + { + Disable.Initialize(context, Disable_InitializationString); + } + } + + #region Initialization String + private const string Enable_InitializationString = + "//////////8EYYIKBAAAAAAABgAAAEVuYWJsZQEANTkALwEANTk1OQAAAQH/////AAAAAA=="; + + private const string Disable_InitializationString = + "//////////8EYYIKBAAAAAAABwAAAERpc2FibGUBADY5AC8BADY5NjkAAAEB/////wAAAAA="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAGAAAAFB1YlN1YlN0YXR1c1R5cGVJbnN0YW5jZQEAMzkBADM5MzkAAP//" + + "//8DAAAAFWCJCgIAAAAAAAUAAABTdGF0ZQEANDkALwA/NDkAAAEANzn/////AQH/////AAAAAARhggoE" + + "AAAAAAAGAAAARW5hYmxlAQA1OQAvAQA1OTU5AAABAf////8AAAAABGGCCgQAAAAAAAcAAABEaXNhYmxl" + + "AQA2OQAvAQA2OTY5AAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState State + { + get + { + return m_state; + } + + set + { + if (!Object.ReferenceEquals(m_state, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_state = value; + } + } + + /// + public MethodState Enable + { + get + { + return m_enableMethod; + } + + set + { + if (!Object.ReferenceEquals(m_enableMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enableMethod = value; + } + } + + /// + public MethodState Disable + { + get + { + return m_disableMethod; + } + + set + { + if (!Object.ReferenceEquals(m_disableMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_disableMethod = 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_state != null) + { + children.Add(m_state); + } + + if (m_enableMethod != null) + { + children.Add(m_enableMethod); + } + + if (m_disableMethod != null) + { + children.Add(m_disableMethod); + } + + 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 Opc.Ua.BrowseNames.State: + { + if (createOrReplace) + { + if (State == null) + { + if (replacement == null) + { + State = new BaseDataVariableState(this); + } + else + { + State = (BaseDataVariableState)replacement; + } + } + } + + instance = State; + break; + } + + case Opc.Ua.BrowseNames.Enable: + { + if (createOrReplace) + { + if (Enable == null) + { + if (replacement == null) + { + Enable = new MethodState(this); + } + else + { + Enable = (MethodState)replacement; + } + } + } + + instance = Enable; + break; + } + + case Opc.Ua.BrowseNames.Disable: + { + if (createOrReplace) + { + if (Disable == null) + { + if (replacement == null) + { + Disable = new MethodState(this); + } + else + { + Disable = (MethodState)replacement; + } + } + } + + instance = Disable; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_state; + private MethodState m_enableMethod; + private MethodState m_disableMethod; + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsState) + /// + /// Stores an instance of the PubSubDiagnosticsType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAFB1YlN1YkRpYWdub3N0aWNzVHlwZUluc3RhbmNlAQDdTAEA3Uzd" + + "TAAA/////wcAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAN5MAC8AP95MAAABAAtN////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAEAAAAFRvdGFsSW5mb3JtYXRpb24BAN9MAC8BAA1N30wAAAAH////" + + "/wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA4EwALgBE4EwAAAAB/////wEB/////wAAAAAV" + + "YIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQDhTAAuAEThTAAAAQASTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQDiTAAuAETiTAAAAQALTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABUb3RhbEVycm9yAQDkTAAvAQANTeRMAAAAB/////8BAf////8DAAAAFWCJCgIAAAAA" + + "AAYAAABBY3RpdmUBAOVMAC4AROVMAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABDbGFzc2lm" + + "aWNhdGlvbgEA5kwALgBE5kwAAAEAEk3/////AQH/////AAAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3Rp" + + "Y3NMZXZlbAEA50wALgBE50wAAAEAC03/////AQH/////AAAAAARhggoEAAAAAAAFAAAAUmVzZXQBAOlM" + + "AC8BAOlM6UwAAAEB/////wAAAAAVYIkKAgAAAAAACAAAAFN1YkVycm9yAQDqTAAvAD/qTAAAAAH/////" + + "AQH/////AAAAAARggAoBAAAAAAAIAAAAQ291bnRlcnMBAOtMAC8AOutMAAD/////BgAAABVgiQoCAAAA" + + "AAAKAAAAU3RhdGVFcnJvcgEA7EwALwEADU3sTAAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAA" + + "QWN0aXZlAQDtTAAuAETtTAAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRp" + + "b24BAO5MAC4ARO5MAAAGAQAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3Rp" + + "Y3NMZXZlbAEA70wALgBE70wAAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABgAAABTdGF0" + + "ZU9wZXJhdGlvbmFsQnlNZXRob2QBAPFMAC8BAA1N8UwAAAAH/////wEB/////wMAAAAVYIkKAgAAAAAA" + + "BgAAAEFjdGl2ZQEA8kwALgBE8kwAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZp" + + "Y2F0aW9uAQDzTAAuAETzTAAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAPRMAC4ARPRMAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAYAAAA" + + "U3RhdGVPcGVyYXRpb25hbEJ5UGFyZW50AQD2TAAvAQANTfZMAAAAB/////8BAf////8DAAAAFWCJCgIA" + + "AAAAAAYAAABBY3RpdmUBAPdMAC4ARPdMAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFz" + + "c2lmaWNhdGlvbgEA+EwALgBE+EwAAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABE" + + "aWFnbm9zdGljc0xldmVsAQD5TAAuAET5TAAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "GQAAAFN0YXRlT3BlcmF0aW9uYWxGcm9tRXJyb3IBAPtMAC8BAA1N+0wAAAAH/////wEB/////wMAAAAV" + + "YIkKAgAAAAAABgAAAEFjdGl2ZQEA/EwALgBE/EwAAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAA" + + "AENsYXNzaWZpY2F0aW9uAQD9TAAuAET9TAAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBAP5MAC4ARP5MAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAATAAAAU3RhdGVQYXVzZWRCeVBhcmVudAEAAE0ALwEADU0ATQAAAAf/////AQH/////AwAAABVg" + + "iQoCAAAAAAAGAAAAQWN0aXZlAQABTQAuAEQBTQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAA" + + "Q2xhc3NpZmljYXRpb24BAAJNAC4ARAJNAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAA00ALgBEA00AAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABUAAABTdGF0ZURpc2FibGVkQnlNZXRob2QBAAVNAC8BAA1NBU0AAAAH/////wEB/////wMAAAAV" + + "YIkKAgAAAAAABgAAAEFjdGl2ZQEABk0ALgBEBk0AAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAA" + + "AENsYXNzaWZpY2F0aW9uAQAHTQAuAEQHTQAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBAAhNAC4ARAhNAAAGAAAAAAEAC03/////AQH/////AAAAAARggAoB" + + "AAAAAAAKAAAATGl2ZVZhbHVlcwEACk0ALwA6Ck0AAP////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState DiagnosticsLevel + { + get + { + return m_diagnosticsLevel; + } + + set + { + if (!Object.ReferenceEquals(m_diagnosticsLevel, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnosticsLevel = value; + } + } + + /// + public PubSubDiagnosticsCounterState TotalInformation + { + get + { + return m_totalInformation; + } + + set + { + if (!Object.ReferenceEquals(m_totalInformation, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_totalInformation = value; + } + } + + /// + public PubSubDiagnosticsCounterState TotalError + { + get + { + return m_totalError; + } + + set + { + if (!Object.ReferenceEquals(m_totalError, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_totalError = value; + } + } + + /// + public MethodState Reset + { + get + { + return m_resetMethod; + } + + set + { + if (!Object.ReferenceEquals(m_resetMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resetMethod = value; + } + } + + /// + public BaseDataVariableState SubError + { + get + { + return m_subError; + } + + set + { + if (!Object.ReferenceEquals(m_subError, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_subError = value; + } + } + + /// + public BaseObjectState Counters + { + get + { + return m_counters; + } + + set + { + if (!Object.ReferenceEquals(m_counters, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_counters = value; + } + } + + /// + public BaseObjectState LiveValues + { + get + { + return m_liveValues; + } + + set + { + if (!Object.ReferenceEquals(m_liveValues, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_liveValues = 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_diagnosticsLevel != null) + { + children.Add(m_diagnosticsLevel); + } + + if (m_totalInformation != null) + { + children.Add(m_totalInformation); + } + + if (m_totalError != null) + { + children.Add(m_totalError); + } + + if (m_resetMethod != null) + { + children.Add(m_resetMethod); + } + + if (m_subError != null) + { + children.Add(m_subError); + } + + if (m_counters != null) + { + children.Add(m_counters); + } + + if (m_liveValues != null) + { + children.Add(m_liveValues); + } + + 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 Opc.Ua.BrowseNames.DiagnosticsLevel: + { + if (createOrReplace) + { + if (DiagnosticsLevel == null) + { + if (replacement == null) + { + DiagnosticsLevel = new BaseDataVariableState(this); + } + else + { + DiagnosticsLevel = (BaseDataVariableState)replacement; + } + } + } + + instance = DiagnosticsLevel; + break; + } + + case Opc.Ua.BrowseNames.TotalInformation: + { + if (createOrReplace) + { + if (TotalInformation == null) + { + if (replacement == null) + { + TotalInformation = new PubSubDiagnosticsCounterState(this); + } + else + { + TotalInformation = (PubSubDiagnosticsCounterState)replacement; + } + } + } + + instance = TotalInformation; + break; + } + + case Opc.Ua.BrowseNames.TotalError: + { + if (createOrReplace) + { + if (TotalError == null) + { + if (replacement == null) + { + TotalError = new PubSubDiagnosticsCounterState(this); + } + else + { + TotalError = (PubSubDiagnosticsCounterState)replacement; + } + } + } + + instance = TotalError; + break; + } + + case Opc.Ua.BrowseNames.Reset: + { + if (createOrReplace) + { + if (Reset == null) + { + if (replacement == null) + { + Reset = new MethodState(this); + } + else + { + Reset = (MethodState)replacement; + } + } + } + + instance = Reset; + break; + } + + case Opc.Ua.BrowseNames.SubError: + { + if (createOrReplace) + { + if (SubError == null) + { + if (replacement == null) + { + SubError = new BaseDataVariableState(this); + } + else + { + SubError = (BaseDataVariableState)replacement; + } + } + } + + instance = SubError; + break; + } + + case Opc.Ua.BrowseNames.Counters: + { + if (createOrReplace) + { + if (Counters == null) + { + if (replacement == null) + { + Counters = new BaseObjectState(this); + } + else + { + Counters = (BaseObjectState)replacement; + } + } + } + + instance = Counters; + break; + } + + case Opc.Ua.BrowseNames.LiveValues: + { + if (createOrReplace) + { + if (LiveValues == null) + { + if (replacement == null) + { + LiveValues = new BaseObjectState(this); + } + else + { + LiveValues = (BaseObjectState)replacement; + } + } + } + + instance = LiveValues; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_diagnosticsLevel; + private PubSubDiagnosticsCounterState m_totalInformation; + private PubSubDiagnosticsCounterState m_totalError; + private MethodState m_resetMethod; + private BaseDataVariableState m_subError; + private BaseObjectState m_counters; + private BaseObjectState m_liveValues; + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsCounterState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsCounterState) + /// + /// Stores an instance of the PubSubDiagnosticsCounterType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsCounterState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsCounterState(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(Opc.Ua.VariableTypes.PubSubDiagnosticsCounterType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.UInt32, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (TimeFirstChange != null) + { + TimeFirstChange.Initialize(context, TimeFirstChange_InitializationString); + } + } + + #region Initialization String + private const string TimeFirstChange_InitializationString = + "//////////8VYIkKAgAAAAAADwAAAFRpbWVGaXJzdENoYW5nZQEAEU0ALgBEEU0AAAAN/////wEB////" + + "/wAAAAA="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAJAAAAFB1YlN1YkRpYWdub3N0aWNzQ291bnRlclR5cGVJbnN0YW5jZQEA" + + "DU0BAA1NDU0AAAAH/////wEB/////wQAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEADk0ALgBEDk0AAAAB" + + "/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAPTQAuAEQPTQAAAQASTf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAQTQAuAEQQTQAAAQALTf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAA8AAABUaW1lRmlyc3RDaGFuZ2UBABFNAC4ARBFNAAAADf////8B" + + "Af////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Active + { + get + { + return m_active; + } + + set + { + if (!Object.ReferenceEquals(m_active, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_active = value; + } + } + + /// + public PropertyState Classification + { + get + { + return m_classification; + } + + set + { + if (!Object.ReferenceEquals(m_classification, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_classification = value; + } + } + + /// + public PropertyState DiagnosticsLevel + { + get + { + return m_diagnosticsLevel; + } + + set + { + if (!Object.ReferenceEquals(m_diagnosticsLevel, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_diagnosticsLevel = value; + } + } + + /// + public PropertyState TimeFirstChange + { + get + { + return m_timeFirstChange; + } + + set + { + if (!Object.ReferenceEquals(m_timeFirstChange, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_timeFirstChange = 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_active != null) + { + children.Add(m_active); + } + + if (m_classification != null) + { + children.Add(m_classification); + } + + if (m_diagnosticsLevel != null) + { + children.Add(m_diagnosticsLevel); + } + + if (m_timeFirstChange != null) + { + children.Add(m_timeFirstChange); + } + + 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 Opc.Ua.BrowseNames.Active: + { + if (createOrReplace) + { + if (Active == null) + { + if (replacement == null) + { + Active = new PropertyState(this); + } + else + { + Active = (PropertyState)replacement; + } + } + } + + instance = Active; + break; + } + + case Opc.Ua.BrowseNames.Classification: + { + if (createOrReplace) + { + if (Classification == null) + { + if (replacement == null) + { + Classification = new PropertyState(this); + } + else + { + Classification = (PropertyState)replacement; + } + } + } + + instance = Classification; + break; + } + + case Opc.Ua.BrowseNames.DiagnosticsLevel: + { + if (createOrReplace) + { + if (DiagnosticsLevel == null) + { + if (replacement == null) + { + DiagnosticsLevel = new PropertyState(this); + } + else + { + DiagnosticsLevel = (PropertyState)replacement; + } + } + } + + instance = DiagnosticsLevel; + break; + } + + case Opc.Ua.BrowseNames.TimeFirstChange: + { + if (createOrReplace) + { + if (TimeFirstChange == null) + { + if (replacement == null) + { + TimeFirstChange = new PropertyState(this); + } + else + { + TimeFirstChange = (PropertyState)replacement; + } + } + } + + instance = TimeFirstChange; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_active; + private PropertyState m_classification; + private PropertyState m_diagnosticsLevel; + private PropertyState m_timeFirstChange; + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsRootState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsRootState) + /// + /// Stores an instance of the PubSubDiagnosticsRootType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsRootState : PubSubDiagnosticsState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsRootState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsRootType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIQAAAFB1YlN1YkRpYWdub3N0aWNzUm9vdFR5cGVJbnN0YW5jZQEAFE0B" + + "ABRNFE0AAP////8HAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAVTQAvAD8VTQAAAQAL" + + "Tf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABUb3RhbEluZm9ybWF0aW9uAQAWTQAvAQANTRZNAAAA" + + "B/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBABdNAC4ARBdNAAAAAf////8BAf////8A" + + "AAAAFWCJCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAGE0ALgBEGE0AAAEAEk3/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAGU0ALgBEGU0AAAEAC03/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAKAAAAVG90YWxFcnJvcgEAG00ALwEADU0bTQAAAAf/////AQH/////AwAAABVgiQoC" + + "AAAAAAAGAAAAQWN0aXZlAQAcTQAuAEQcTQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xh" + + "c3NpZmljYXRpb24BAB1NAC4ARB1NAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBAB5NAC4ARB5NAAABAAtN/////wEB/////wAAAAAEYYIKBAAAAAAABQAAAFJlc2V0" + + "AQAgTQAvAQDpTCBNAAABAf////8AAAAAFWCJCgIAAAAAAAgAAABTdWJFcnJvcgEAIU0ALwA/IU0AAAAB" + + "/////wEB/////wAAAAAEYIAKAQAAAAAACAAAAENvdW50ZXJzAQAiTQAvADoiTQAA/////wYAAAAVYIkK" + + "AgAAAAAACgAAAFN0YXRlRXJyb3IBACNNAC8BAA1NI00AAAAH/////wEB/////wMAAAAVYIkKAgAAAAAA" + + "BgAAAEFjdGl2ZQEAJE0ALgBEJE0AAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZp" + + "Y2F0aW9uAQAlTQAuAEQlTQAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdu" + + "b3N0aWNzTGV2ZWwBACZNAC4ARCZNAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAYAAAA" + + "U3RhdGVPcGVyYXRpb25hbEJ5TWV0aG9kAQAoTQAvAQANTShNAAAAB/////8BAf////8DAAAAFWCJCgIA" + + "AAAAAAYAAABBY3RpdmUBAClNAC4ARClNAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABDbGFz" + + "c2lmaWNhdGlvbgEAKk0ALgBEKk0AAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAAAABE" + + "aWFnbm9zdGljc0xldmVsAQArTQAuAEQrTQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "GAAAAFN0YXRlT3BlcmF0aW9uYWxCeVBhcmVudAEALU0ALwEADU0tTQAAAAf/////AQH/////AwAAABVg" + + "iQoCAAAAAAAGAAAAQWN0aXZlAQAuTQAuAEQuTQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAOAAAA" + + "Q2xhc3NpZmljYXRpb24BAC9NAC4ARC9NAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAME0ALgBEME0AAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABkAAABTdGF0ZU9wZXJhdGlvbmFsRnJvbUVycm9yAQAyTQAvAQANTTJNAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBADNNAC4ARDNNAAAAAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEANE0ALgBENE0AAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIA" + + "AAAAABAAAABEaWFnbm9zdGljc0xldmVsAQA1TQAuAEQ1TQAABgAAAAABAAtN/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAEwAAAFN0YXRlUGF1c2VkQnlQYXJlbnQBADdNAC8BAA1NN00AAAAH/////wEB/////wMA" + + "AAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAOE0ALgBEOE0AAAAB/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "DgAAAENsYXNzaWZpY2F0aW9uAQA5TQAuAEQ5TQAABgAAAAABABJN/////wEB/////wAAAAAVYKkKAgAA" + + "AAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBADpNAC4ARDpNAAAGAAAAAAEAC03/////AQH/////AAAAABVg" + + "iQoCAAAAAAAVAAAAU3RhdGVEaXNhYmxlZEJ5TWV0aG9kAQA8TQAvAQANTTxNAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAD1NAC4ARD1NAAAAAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEAPk0ALgBEPk0AAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIA" + + "AAAAABAAAABEaWFnbm9zdGljc0xldmVsAQA/TQAuAEQ/TQAABgAAAAABAAtN/////wEB/////wAAAAAE" + + "YIAKAQAAAAAACgAAAExpdmVWYWx1ZXMBAEFNAC8AOkFNAAD/////BAAAABVgiQoCAAAAAAAYAAAAQ29u" + + "ZmlndXJlZERhdGFTZXRXcml0ZXJzAQBCTQAvAD9CTQAAAAX/////AQH/////AQAAABVgqQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAQ00ALgBEQ00AAAYAAAAAAQALTf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABgAAABDb25maWd1cmVkRGF0YVNldFJlYWRlcnMBAERNAC8AP0RNAAAABf////8BAf////8BAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBFTQAuAERFTQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAGQAAAE9wZXJhdGlvbmFsRGF0YVNldFdyaXRlcnMBAEZNAC8AP0ZNAAAABf//" + + "//8BAf////8BAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBHTQAuAERHTQAABgAAAAAB" + + "AAtN/////wEB/////wAAAAAVYIkKAgAAAAAAGQAAAE9wZXJhdGlvbmFsRGF0YVNldFJlYWRlcnMBAEhN" + + "AC8AP0hNAAAABf////8BAf////8BAAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBJTQAu" + + "AERJTQAABgAAAAABAAtN/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsConnectionState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsConnectionState) + /// + /// Stores an instance of the PubSubDiagnosticsConnectionType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsConnectionState : PubSubDiagnosticsState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsConnectionState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsConnectionType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJwAAAFB1YlN1YkRpYWdub3N0aWNzQ29ubmVjdGlvblR5cGVJbnN0YW5j" + + "ZQEASk0BAEpNSk0AAP////8HAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBLTQAvAD9L" + + "TQAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABUb3RhbEluZm9ybWF0aW9uAQBMTQAvAQAN" + + "TUxNAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAE1NAC4ARE1NAAAAAf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEATk0ALgBETk0AAAEAEk3/////AQH/" + + "////AAAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAT00ALgBET00AAAEAC03/////AQH/" + + "////AAAAABVgiQoCAAAAAAAKAAAAVG90YWxFcnJvcgEAUU0ALwEADU1RTQAAAAf/////AQH/////AwAA" + + "ABVgiQoCAAAAAAAGAAAAQWN0aXZlAQBSTQAuAERSTQAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAO" + + "AAAAQ2xhc3NpZmljYXRpb24BAFNNAC4ARFNNAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAAEAAA" + + "AERpYWdub3N0aWNzTGV2ZWwBAFRNAC4ARFRNAAABAAtN/////wEB/////wAAAAAEYYIKBAAAAAAABQAA" + + "AFJlc2V0AQBWTQAvAQDpTFZNAAABAf////8AAAAAFWCJCgIAAAAAAAgAAABTdWJFcnJvcgEAV00ALwA/" + + "V00AAAAB/////wEB/////wAAAAAEYIAKAQAAAAAACAAAAENvdW50ZXJzAQBYTQAvADpYTQAA/////wYA" + + "AAAVYIkKAgAAAAAACgAAAFN0YXRlRXJyb3IBAFlNAC8BAA1NWU0AAAAH/////wEB/////wMAAAAVYIkK" + + "AgAAAAAABgAAAEFjdGl2ZQEAWk0ALgBEWk0AAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAAAENs" + + "YXNzaWZpY2F0aW9uAQBbTQAuAERbTQAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAAEAAA" + + "AERpYWdub3N0aWNzTGV2ZWwBAFxNAC4ARFxNAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoCAAAA" + + "AAAYAAAAU3RhdGVPcGVyYXRpb25hbEJ5TWV0aG9kAQBeTQAvAQANTV5NAAAAB/////8BAf////8DAAAA" + + "FWCJCgIAAAAAAAYAAABBY3RpdmUBAF9NAC4ARF9NAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4A" + + "AABDbGFzc2lmaWNhdGlvbgEAYE0ALgBEYE0AAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAA" + + "ABAAAABEaWFnbm9zdGljc0xldmVsAQBhTQAuAERhTQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkK" + + "AgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeVBhcmVudAEAY00ALwEADU1jTQAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQBkTQAuAERkTQAAAAH/////AQH/////AAAAABVgqQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BAGVNAC4ARGVNAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAZk0ALgBEZk0AAAYAAAAAAQALTf////8BAf////8AAAAA" + + "FWCJCgIAAAAAABkAAABTdGF0ZU9wZXJhdGlvbmFsRnJvbUVycm9yAQBoTQAvAQANTWhNAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAGlNAC4ARGlNAAAAAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAak0ALgBEak0AAAYAAAAAAQASTf////8BAf////8AAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBrTQAuAERrTQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAEwAAAFN0YXRlUGF1c2VkQnlQYXJlbnQBAG1NAC8BAA1NbU0AAAAH/////wEB" + + "/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAbk0ALgBEbk0AAAAB/////wEB/////wAAAAAVYKkK" + + "AgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBvTQAuAERvTQAABgAAAAABABJN/////wEB/////wAAAAAV" + + "YKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAHBNAC4ARHBNAAAGAAAAAAEAC03/////AQH/////" + + "AAAAABVgiQoCAAAAAAAVAAAAU3RhdGVEaXNhYmxlZEJ5TWV0aG9kAQByTQAvAQANTXJNAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAHNNAC4ARHNNAAAAAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAdE0ALgBEdE0AAAYAAAAAAQASTf////8BAf////8AAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQB1TQAuAER1TQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAEYIAKAQAAAAAACgAAAExpdmVWYWx1ZXMBAHdNAC8AOndNAAD/////AQAAABVgiQoCAAAAAAAP" + + "AAAAUmVzb2x2ZWRBZGRyZXNzAQB4TQAvAD94TQAAAAz/////AQH/////AQAAABVgqQoCAAAAAAAQAAAA" + + "RGlhZ25vc3RpY3NMZXZlbAEAeU0ALgBEeU0AAAYAAAAAAQALTf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsWriterGroupState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsWriterGroupState) + /// + /// Stores an instance of the PubSubDiagnosticsWriterGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsWriterGroupState : PubSubDiagnosticsState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsWriterGroupState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsWriterGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAFB1YlN1YkRpYWdub3N0aWNzV3JpdGVyR3JvdXBUeXBlSW5zdGFu" + + "Y2UBAHpNAQB6TXpNAAD/////BwAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAe00ALwA/" + + "e00AAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAfE0ALwEA" + + "DU18TQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQB9TQAuAER9TQAAAAH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAH5NAC4ARH5NAAABABJN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAH9NAC4ARH9NAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFsRXJyb3IBAIFNAC8BAA1NgU0AAAAH/////wEB/////wMA" + + "AAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAgk0ALgBEgk0AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DgAAAENsYXNzaWZpY2F0aW9uAQCDTQAuAESDTQAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAA" + + "AABEaWFnbm9zdGljc0xldmVsAQCETQAuAESETQAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUA" + + "AABSZXNldAEAhk0ALwEA6UyGTQAAAQH/////AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAIdNAC8A" + + "P4dNAAAAAf////8BAf////8AAAAABGCACgEAAAAAAAgAAABDb3VudGVycwEAiE0ALwA6iE0AAP////8J" + + "AAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9yAQCJTQAvAQANTYlNAAAAB/////8BAf////8DAAAAFWCJ" + + "CgIAAAAAAAYAAABBY3RpdmUBAIpNAC4ARIpNAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABD" + + "bGFzc2lmaWNhdGlvbgEAi00ALgBEi00AAAYBAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAA" + + "AABEaWFnbm9zdGljc0xldmVsAQCMTQAuAESMTQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1ldGhvZAEAjk0ALwEADU2OTQAAAAf/////AQH/////AwAA" + + "ABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCPTQAuAESPTQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAO" + + "AAAAQ2xhc3NpZmljYXRpb24BAJBNAC4ARJBNAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAA" + + "AAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAkU0ALgBEkU0AAAYAAAAAAQALTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFsQnlQYXJlbnQBAJNNAC8BAA1Nk00AAAAH/////wEB////" + + "/wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAlE0ALgBElE0AAAAB/////wEB/////wAAAAAVYKkKAgAA" + + "AAAADgAAAENsYXNzaWZpY2F0aW9uAQCVTQAuAESVTQAABgAAAAABABJN/////wEB/////wAAAAAVYKkK" + + "AgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAJZNAC4ARJZNAAAGAAAAAAEAC03/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRpb25hbEZyb21FcnJvcgEAmE0ALwEADU2YTQAAAAf/////" + + "AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCZTQAuAESZTQAAAAH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAJpNAC4ARJpNAAAGAAAAAAEAEk3/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAm00ALgBEm00AAAYAAAAAAQALTf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBhdXNlZEJ5UGFyZW50AQCdTQAvAQANTZ1NAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAJ5NAC4ARJ5NAAAAAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAn00ALgBEn00AAAYAAAAAAQASTf////8BAf////8AAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCgTQAuAESgTQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlzYWJsZWRCeU1ldGhvZAEAok0ALwEADU2iTQAAAAf/////" + + "AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCjTQAuAESjTQAAAAH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAKRNAC4ARKRNAAAGAAAAAAEAEk3/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEApU0ALgBEpU0AAAYAAAAAAQALTf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABMAAABTZW50TmV0d29ya01lc3NhZ2VzAQCoTQAvAQANTahNAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAKlNAC4ARKlNAAAAAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAqk0ALgBEqk0AAAYAAAAAAQASTf////8BAf////8AAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQCrTQAuAESrTQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAEwAAAEZhaWxlZFRyYW5zbWlzc2lvbnMBAK1NAC8BAA1NrU0AAAAH/////wEB" + + "/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEArk0ALgBErk0AAAAB/////wEB/////wAAAAAVYKkK" + + "AgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQCvTQAuAESvTQAABgEAAAABABJN/////wEB/////wAAAAAV" + + "YKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBALBNAC4ARLBNAAAGAAAAAAEAC03/////AQH/////" + + "AAAAABVgiQoCAAAAAAAQAAAARW5jcnlwdGlvbkVycm9ycwEAsk0ALwEADU2yTQAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQCzTQAuAESzTQAAAAH/////AQH/////AAAAABVgqQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BALRNAC4ARLRNAAAGAQAAAAEAEk3/////AQH/////AAAAABVgqQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAtU0ALgBEtU0AAAYBAAAAAQALTf////8BAf////8AAAAA" + + "BGCACgEAAAAAAAoAAABMaXZlVmFsdWVzAQCnTQAvADqnTQAA/////wQAAAAVYIkKAgAAAAAAGAAAAENv" + + "bmZpZ3VyZWREYXRhU2V0V3JpdGVycwEAt00ALwA/t00AAAAF/////wEB/////wEAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBALhNAC4ARLhNAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAZAAAAT3BlcmF0aW9uYWxEYXRhU2V0V3JpdGVycwEAuU0ALwA/uU0AAAAF/////wEB/////wEA" + + "AAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBALpNAC4ARLpNAAAGAAAAAAEAC03/////AQH/" + + "////AAAAABVgiQoCAAAAAAAPAAAAU2VjdXJpdHlUb2tlbklEAQC7TQAvAD+7TQAAAAf/////AQH/////" + + "AQAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAvE0ALgBEvE0AAAYCAAAAAQALTf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABEAAABUaW1lVG9OZXh0VG9rZW5JRAEAvU0ALwA/vU0AAAEAIgH/////" + + "AQH/////AQAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAvk0ALgBEvk0AAAYCAAAAAQAL" + + "Tf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsReaderGroupState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsReaderGroupState) + /// + /// Stores an instance of the PubSubDiagnosticsReaderGroupType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsReaderGroupState : PubSubDiagnosticsState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsReaderGroupState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsReaderGroupType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAFB1YlN1YkRpYWdub3N0aWNzUmVhZGVyR3JvdXBUeXBlSW5zdGFu" + + "Y2UBAL9NAQC/Tb9NAAD/////BwAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAwE0ALwA/" + + "wE0AAAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAQAAAAVG90YWxJbmZvcm1hdGlvbgEAwU0ALwEA" + + "DU3BTQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDCTQAuAETCTQAAAAH/////" + + "AQH/////AAAAABVgiQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAMNNAC4ARMNNAAABABJN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAMRNAC4ARMRNAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAACgAAAFRvdGFsRXJyb3IBAMZNAC8BAA1Nxk0AAAAH/////wEB/////wMA" + + "AAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAx00ALgBEx00AAAAB/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "DgAAAENsYXNzaWZpY2F0aW9uAQDITQAuAETITQAAAQASTf////8BAf////8AAAAAFWCJCgIAAAAAABAA" + + "AABEaWFnbm9zdGljc0xldmVsAQDJTQAuAETJTQAAAQALTf////8BAf////8AAAAABGGCCgQAAAAAAAUA" + + "AABSZXNldAEAy00ALwEA6UzLTQAAAQH/////AAAAABVgiQoCAAAAAAAIAAAAU3ViRXJyb3IBAMxNAC8A" + + "P8xNAAAAAf////8BAf////8AAAAABGCACgEAAAAAAAgAAABDb3VudGVycwEAzU0ALwA6zU0AAP////8J" + + "AAAAFWCJCgIAAAAAAAoAAABTdGF0ZUVycm9yAQDOTQAvAQANTc5NAAAAB/////8BAf////8DAAAAFWCJ" + + "CgIAAAAAAAYAAABBY3RpdmUBAM9NAC4ARM9NAAAAAf////8BAf////8AAAAAFWCpCgIAAAAAAA4AAABD" + + "bGFzc2lmaWNhdGlvbgEA0E0ALgBE0E0AAAYBAAAAAQASTf////8BAf////8AAAAAFWCpCgIAAAAAABAA" + + "AABEaWFnbm9zdGljc0xldmVsAQDRTQAuAETRTQAABgAAAAABAAtN/////wEB/////wAAAAAVYIkKAgAA" + + "AAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeU1ldGhvZAEA000ALwEADU3TTQAAAAf/////AQH/////AwAA" + + "ABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDUTQAuAETUTQAAAAH/////AQH/////AAAAABVgqQoCAAAAAAAO" + + "AAAAQ2xhc3NpZmljYXRpb24BANVNAC4ARNVNAAAGAAAAAAEAEk3/////AQH/////AAAAABVgqQoCAAAA" + + "AAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA1k0ALgBE1k0AAAYAAAAAAQALTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAABgAAABTdGF0ZU9wZXJhdGlvbmFsQnlQYXJlbnQBANhNAC8BAA1N2E0AAAAH/////wEB////" + + "/wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA2U0ALgBE2U0AAAAB/////wEB/////wAAAAAVYKkKAgAA" + + "AAAADgAAAENsYXNzaWZpY2F0aW9uAQDaTQAuAETaTQAABgAAAAABABJN/////wEB/////wAAAAAVYKkK" + + "AgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBANtNAC4ARNtNAAAGAAAAAAEAC03/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAZAAAAU3RhdGVPcGVyYXRpb25hbEZyb21FcnJvcgEA3U0ALwEADU3dTQAAAAf/////" + + "AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDeTQAuAETeTQAAAAH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAN9NAC4ARN9NAAAGAAAAAAEAEk3/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA4E0ALgBE4E0AAAYAAAAAAQALTf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABMAAABTdGF0ZVBhdXNlZEJ5UGFyZW50AQDiTQAvAQANTeJNAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAONNAC4ARONNAAAAAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEA5E0ALgBE5E0AAAYAAAAAAQASTf////8BAf////8AAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQDlTQAuAETlTQAABgAAAAABAAtN/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAFQAAAFN0YXRlRGlzYWJsZWRCeU1ldGhvZAEA500ALwEADU3nTQAAAAf/////" + + "AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDoTQAuAEToTQAAAAH/////AQH/////AAAAABVg" + + "qQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAOlNAC4AROlNAAAGAAAAAAEAEk3/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA6k0ALgBE6k0AAAYAAAAAAQALTf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABcAAABSZWNlaXZlZE5ldHdvcmtNZXNzYWdlcwEA7U0ALwEADU3tTQAAAAf/" + + "////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQDuTQAuAETuTQAAAAH/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAO9NAC4ARO9NAAAGAAAAAAEAEk3/////AQH/////" + + "AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA8E0ALgBE8E0AAAYAAAAAAQALTf////8B" + + "Af////8AAAAAFWCJCgIAAAAAAB4AAABSZWNlaXZlZEludmFsaWROZXR3b3JrTWVzc2FnZXMBAPJNAC8B" + + "AA1N8k0AAAAH/////wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEA800ALgBE800AAAAB////" + + "/wEB/////wAAAAAVYKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQD0TQAuAET0TQAABgEAAAABABJN" + + "/////wEB/////wAAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAPVNAC4ARPVNAAAGAQAA" + + "AAEAC03/////AQH/////AAAAABVgiQoCAAAAAAAQAAAARGVjcnlwdGlvbkVycm9ycwEA900ALwEADU33" + + "TQAAAAf/////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQD4TQAuAET4TQAAAAH/////AQH/" + + "////AAAAABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAPlNAC4ARPlNAAAGAQAAAAEAEk3/////" + + "AQH/////AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEA+k0ALgBE+k0AAAYBAAAAAQAL" + + "Tf////8BAf////8AAAAABGCACgEAAAAAAAoAAABMaXZlVmFsdWVzAQDsTQAvADrsTQAA/////wIAAAAV" + + "YIkKAgAAAAAAGAAAAENvbmZpZ3VyZWREYXRhU2V0UmVhZGVycwEA/E0ALwA//E0AAAAF/////wEB////" + + "/wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAP1NAC4ARP1NAAAGAAAAAAEAC03/////" + + "AQH/////AAAAABVgiQoCAAAAAAAZAAAAT3BlcmF0aW9uYWxEYXRhU2V0UmVhZGVycwEA/k0ALwA//k0A" + + "AAAF/////wEB/////wEAAAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAP9NAC4ARP9NAAAG" + + "AAAAAAEAC03/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsDataSetWriterState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsDataSetWriterState) + /// + /// Stores an instance of the PubSubDiagnosticsDataSetWriterType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsDataSetWriterState : PubSubDiagnosticsState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsDataSetWriterState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsDataSetWriterType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAFB1YlN1YkRpYWdub3N0aWNzRGF0YVNldFdyaXRlclR5cGVJbnN0" + + "YW5jZQEAAE4BAABOAE4AAP////8HAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQABTgAv" + + "AD8BTgAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABUb3RhbEluZm9ybWF0aW9uAQACTgAv" + + "AQANTQJOAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAANOAC4ARANOAAAAAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEABE4ALgBEBE4AAAEAEk3/////" + + "AQH/////AAAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEABU4ALgBEBU4AAAEAC03/////" + + "AQH/////AAAAABVgiQoCAAAAAAAKAAAAVG90YWxFcnJvcgEAB04ALwEADU0HTgAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQAITgAuAEQITgAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BAAlOAC4ARAlOAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBAApOAC4ARApOAAABAAtN/////wEB/////wAAAAAEYYIKBAAAAAAA" + + "BQAAAFJlc2V0AQAMTgAvAQDpTAxOAAABAf////8AAAAAFWCJCgIAAAAAAAgAAABTdWJFcnJvcgEADU4A" + + "LwA/DU4AAAAB/////wEB/////wAAAAAEYIAKAQAAAAAACAAAAENvdW50ZXJzAQAOTgAvADoOTgAA////" + + "/wcAAAAVYIkKAgAAAAAACgAAAFN0YXRlRXJyb3IBAA9OAC8BAA1ND04AAAAH/////wEB/////wMAAAAV" + + "YIkKAgAAAAAABgAAAEFjdGl2ZQEAEE4ALgBEEE4AAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAA" + + "AENsYXNzaWZpY2F0aW9uAQARTgAuAEQRTgAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBABJOAC4ARBJOAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAYAAAAU3RhdGVPcGVyYXRpb25hbEJ5TWV0aG9kAQAUTgAvAQANTRROAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBABVOAC4ARBVOAAAAAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEAFk4ALgBEFk4AAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIA" + + "AAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAXTgAuAEQXTgAABgAAAAABAAtN/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeVBhcmVudAEAGU4ALwEADU0ZTgAAAAf/////AQH/" + + "////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQAaTgAuAEQaTgAAAAH/////AQH/////AAAAABVgqQoC" + + "AAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BABtOAC4ARBtOAAAGAAAAAAEAEk3/////AQH/////AAAAABVg" + + "qQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAHE4ALgBEHE4AAAYAAAAAAQALTf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABkAAABTdGF0ZU9wZXJhdGlvbmFsRnJvbUVycm9yAQAeTgAvAQANTR5OAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAB9OAC4ARB9OAAAAAf////8BAf////8AAAAA" + + "FWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAIE4ALgBEIE4AAAYAAAAAAQASTf////8BAf////8A" + + "AAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQAhTgAuAEQhTgAABgAAAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEwAAAFN0YXRlUGF1c2VkQnlQYXJlbnQBACNOAC8BAA1NI04AAAAH////" + + "/wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAJE4ALgBEJE4AAAAB/////wEB/////wAAAAAV" + + "YKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQAlTgAuAEQlTgAABgAAAAABABJN/////wEB/////wAA" + + "AAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBACZOAC4ARCZOAAAGAAAAAAEAC03/////AQH/" + + "////AAAAABVgiQoCAAAAAAAVAAAAU3RhdGVEaXNhYmxlZEJ5TWV0aG9kAQAoTgAvAQANTShOAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAClOAC4ARClOAAAAAf////8BAf////8AAAAA" + + "FWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAKk4ALgBEKk4AAAYAAAAAAQASTf////8BAf////8A" + + "AAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQArTgAuAEQrTgAABgAAAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAFQAAAEZhaWxlZERhdGFTZXRNZXNzYWdlcwEALk4ALwEADU0uTgAAAAf/" + + "////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQAvTgAuAEQvTgAAAAH/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BADBOAC4ARDBOAAAGAQAAAAEAEk3/////AQH/////" + + "AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAMU4ALgBEMU4AAAYAAAAAAQALTf////8B" + + "Af////8AAAAABGCACgEAAAAAAAoAAABMaXZlVmFsdWVzAQAtTgAvADotTgAA/////wQAAAAVYIkKAgAA" + + "AAAAFQAAAE1lc3NhZ2VTZXF1ZW5jZU51bWJlcgEAM04ALwA/M04AAAAF/////wEB/////wEAAAAVYKkK" + + "AgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBADROAC4ARDROAAAGAgAAAAEAC03/////AQH/////AAAA" + + "ABVgiQoCAAAAAAAKAAAAU3RhdHVzQ29kZQEANU4ALwA/NU4AAAAT/////wEB/////wEAAAAVYKkKAgAA" + + "AAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBADZOAC4ARDZOAAAGAgAAAAEAC03/////AQH/////AAAAABVg" + + "iQoCAAAAAAAMAAAATWFqb3JWZXJzaW9uAQA3TgAvAD83TgAAAAf/////AQH/////AQAAABVgqQoCAAAA" + + "AAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAOE4ALgBEOE4AAAYCAAAAAQALTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAwAAABNaW5vclZlcnNpb24BADlOAC8APzlOAAAAB/////8BAf////8BAAAAFWCpCgIAAAAA" + + "ABAAAABEaWFnbm9zdGljc0xldmVsAQA6TgAuAEQ6TgAABgIAAAABAAtN/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubDiagnosticsDataSetReaderState Class + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsDataSetReaderState) + /// + /// Stores an instance of the PubSubDiagnosticsDataSetReaderType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubDiagnosticsDataSetReaderState : PubSubDiagnosticsState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubDiagnosticsDataSetReaderState(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(Opc.Ua.ObjectTypes.PubSubDiagnosticsDataSetReaderType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKgAAAFB1YlN1YkRpYWdub3N0aWNzRGF0YVNldFJlYWRlclR5cGVJbnN0" + + "YW5jZQEAO04BADtOO04AAP////8HAAAAFWCJCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQA8TgAv" + + "AD88TgAAAQALTf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABUb3RhbEluZm9ybWF0aW9uAQA9TgAv" + + "AQANTT1OAAAAB/////8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAD5OAC4ARD5OAAAAAf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAP04ALgBEP04AAAEAEk3/////" + + "AQH/////AAAAABVgiQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAQE4ALgBEQE4AAAEAC03/////" + + "AQH/////AAAAABVgiQoCAAAAAAAKAAAAVG90YWxFcnJvcgEAQk4ALwEADU1CTgAAAAf/////AQH/////" + + "AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQBDTgAuAERDTgAAAAH/////AQH/////AAAAABVgiQoCAAAA" + + "AAAOAAAAQ2xhc3NpZmljYXRpb24BAEROAC4AREROAAABABJN/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBAEVOAC4AREVOAAABAAtN/////wEB/////wAAAAAEYYIKBAAAAAAA" + + "BQAAAFJlc2V0AQBHTgAvAQDpTEdOAAABAf////8AAAAAFWCJCgIAAAAAAAgAAABTdWJFcnJvcgEASE4A" + + "LwA/SE4AAAAB/////wEB/////wAAAAAEYIAKAQAAAAAACAAAAENvdW50ZXJzAQBJTgAvADpJTgAA////" + + "/wgAAAAVYIkKAgAAAAAACgAAAFN0YXRlRXJyb3IBAEpOAC8BAA1NSk4AAAAH/////wEB/////wMAAAAV" + + "YIkKAgAAAAAABgAAAEFjdGl2ZQEAS04ALgBES04AAAAB/////wEB/////wAAAAAVYKkKAgAAAAAADgAA" + + "AENsYXNzaWZpY2F0aW9uAQBMTgAuAERMTgAABgEAAAABABJN/////wEB/////wAAAAAVYKkKAgAAAAAA" + + "EAAAAERpYWdub3N0aWNzTGV2ZWwBAE1OAC4ARE1OAAAGAAAAAAEAC03/////AQH/////AAAAABVgiQoC" + + "AAAAAAAYAAAAU3RhdGVPcGVyYXRpb25hbEJ5TWV0aG9kAQBPTgAvAQANTU9OAAAAB/////8BAf////8D" + + "AAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAFBOAC4ARFBOAAAAAf////8BAf////8AAAAAFWCpCgIAAAAA" + + "AA4AAABDbGFzc2lmaWNhdGlvbgEAUU4ALgBEUU4AAAYAAAAAAQASTf////8BAf////8AAAAAFWCpCgIA" + + "AAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBSTgAuAERSTgAABgAAAAABAAtN/////wEB/////wAAAAAV" + + "YIkKAgAAAAAAGAAAAFN0YXRlT3BlcmF0aW9uYWxCeVBhcmVudAEAVE4ALwEADU1UTgAAAAf/////AQH/" + + "////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQBVTgAuAERVTgAAAAH/////AQH/////AAAAABVgqQoC" + + "AAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAFZOAC4ARFZOAAAGAAAAAAEAEk3/////AQH/////AAAAABVg" + + "qQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAV04ALgBEV04AAAYAAAAAAQALTf////8BAf////8A" + + "AAAAFWCJCgIAAAAAABkAAABTdGF0ZU9wZXJhdGlvbmFsRnJvbUVycm9yAQBZTgAvAQANTVlOAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAFpOAC4ARFpOAAAAAf////8BAf////8AAAAA" + + "FWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAW04ALgBEW04AAAYAAAAAAQASTf////8BAf////8A" + + "AAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBcTgAuAERcTgAABgAAAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAEwAAAFN0YXRlUGF1c2VkQnlQYXJlbnQBAF5OAC8BAA1NXk4AAAAH////" + + "/wEB/////wMAAAAVYIkKAgAAAAAABgAAAEFjdGl2ZQEAX04ALgBEX04AAAAB/////wEB/////wAAAAAV" + + "YKkKAgAAAAAADgAAAENsYXNzaWZpY2F0aW9uAQBgTgAuAERgTgAABgAAAAABABJN/////wEB/////wAA" + + "AAAVYKkKAgAAAAAAEAAAAERpYWdub3N0aWNzTGV2ZWwBAGFOAC4ARGFOAAAGAAAAAAEAC03/////AQH/" + + "////AAAAABVgiQoCAAAAAAAVAAAAU3RhdGVEaXNhYmxlZEJ5TWV0aG9kAQBjTgAvAQANTWNOAAAAB///" + + "//8BAf////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAGROAC4ARGROAAAAAf////8BAf////8AAAAA" + + "FWCpCgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAZU4ALgBEZU4AAAYAAAAAAQASTf////8BAf////8A" + + "AAAAFWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBmTgAuAERmTgAABgAAAAABAAtN/////wEB" + + "/////wAAAAAVYIkKAgAAAAAAFQAAAEZhaWxlZERhdGFTZXRNZXNzYWdlcwEAaU4ALwEADU1pTgAAAAf/" + + "////AQH/////AwAAABVgiQoCAAAAAAAGAAAAQWN0aXZlAQBqTgAuAERqTgAAAAH/////AQH/////AAAA" + + "ABVgqQoCAAAAAAAOAAAAQ2xhc3NpZmljYXRpb24BAGtOAC4ARGtOAAAGAQAAAAEAEk3/////AQH/////" + + "AAAAABVgqQoCAAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAbE4ALgBEbE4AAAYAAAAAAQALTf////8B" + + "Af////8AAAAAFWCJCgIAAAAAABAAAABEZWNyeXB0aW9uRXJyb3JzAQBuTgAvAQANTW5OAAAAB/////8B" + + "Af////8DAAAAFWCJCgIAAAAAAAYAAABBY3RpdmUBAG9OAC4ARG9OAAAAAf////8BAf////8AAAAAFWCp" + + "CgIAAAAAAA4AAABDbGFzc2lmaWNhdGlvbgEAcE4ALgBEcE4AAAYBAAAAAQASTf////8BAf////8AAAAA" + + "FWCpCgIAAAAAABAAAABEaWFnbm9zdGljc0xldmVsAQBxTgAuAERxTgAABgEAAAABAAtN/////wEB////" + + "/wAAAAAEYIAKAQAAAAAACgAAAExpdmVWYWx1ZXMBAGhOAC8AOmhOAAD/////BgAAABVgiQoCAAAAAAAV" + + "AAAATWVzc2FnZVNlcXVlbmNlTnVtYmVyAQBzTgAvAD9zTgAAAAX/////AQH/////AQAAABVgqQoCAAAA" + + "AAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAdE4ALgBEdE4AAAYCAAAAAQALTf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTdGF0dXNDb2RlAQB1TgAvAD91TgAAABP/////AQH/////AQAAABVgqQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAdk4ALgBEdk4AAAYCAAAAAQALTf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAwAAABNYWpvclZlcnNpb24BAHdOAC8AP3dOAAAAB/////8BAf////8BAAAAFWCpCgIAAAAAABAA" + + "AABEaWFnbm9zdGljc0xldmVsAQB4TgAuAER4TgAABgIAAAABAAtN/////wEB/////wAAAAAVYIkKAgAA" + + "AAAADAAAAE1pbm9yVmVyc2lvbgEAeU4ALwA/eU4AAAAH/////wEB/////wEAAAAVYKkKAgAAAAAAEAAA" + + "AERpYWdub3N0aWNzTGV2ZWwBAHpOAC4ARHpOAAAGAgAAAAEAC03/////AQH/////AAAAABVgiQoCAAAA" + + "AAAPAAAAU2VjdXJpdHlUb2tlbklEAQB7TgAvAD97TgAAAAf/////AQH/////AQAAABVgqQoCAAAAAAAQ" + + "AAAARGlhZ25vc3RpY3NMZXZlbAEAfE4ALgBEfE4AAAYCAAAAAQALTf////8BAf////8AAAAAFWCJCgIA" + + "AAAAABEAAABUaW1lVG9OZXh0VG9rZW5JRAEAfU4ALwA/fU4AAAEAIgH/////AQH/////AQAAABVgqQoC" + + "AAAAAAAQAAAARGlhZ25vc3RpY3NMZXZlbAEAfk4ALgBEfk4AAAYCAAAAAQALTf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region PubSubStatusEventState Class + #if (!OPCUA_EXCLUDE_PubSubStatusEventState) + /// + /// Stores an instance of the PubSubStatusEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubStatusEventState : SystemEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubStatusEventState(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(Opc.Ua.ObjectTypes.PubSubStatusEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAFB1YlN1YlN0YXR1c0V2ZW50VHlwZUluc3RhbmNlAQCvPAEArzyv" + + "PAAA/////wsAAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBALA8AC4ARLA8AAAAD/////8BAf////8AAAAA" + + "FWCJCgIAAAAAAAkAAABFdmVudFR5cGUBALE8AC4ARLE8AAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAoAAABTb3VyY2VOb2RlAQCyPAAuAESyPAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAKAAAAU291" + + "cmNlTmFtZQEAszwALgBEszwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABAAAAFRpbWUBALQ8AC4A" + + "RLQ8AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVUaW1lAQC1PAAuAES1PAAA" + + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQC3PAAuAES3PAAAABX/////AQH/" + + "////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBALg8AC4ARLg8AAAABf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAwAAABDb25uZWN0aW9uSWQBALk8AC4ARLk8AAAAEf////8BAf////8AAAAAFWCJCgIAAAAA" + + "AAcAAABHcm91cElkAQC6PAAuAES6PAAAABH/////AQH/////AAAAABVgiQoCAAAAAAAFAAAAU3RhdGUB" + + "ALs8AC4ARLs8AAABADc5/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ConnectionId + { + get + { + return m_connectionId; + } + + set + { + if (!Object.ReferenceEquals(m_connectionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_connectionId = value; + } + } + + /// + public PropertyState GroupId + { + get + { + return m_groupId; + } + + set + { + if (!Object.ReferenceEquals(m_groupId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_groupId = value; + } + } + + /// + public PropertyState State + { + get + { + return m_state; + } + + set + { + if (!Object.ReferenceEquals(m_state, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_state = 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_connectionId != null) + { + children.Add(m_connectionId); + } + + if (m_groupId != null) + { + children.Add(m_groupId); + } + + if (m_state != null) + { + children.Add(m_state); + } + + 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 Opc.Ua.BrowseNames.ConnectionId: + { + if (createOrReplace) + { + if (ConnectionId == null) + { + if (replacement == null) + { + ConnectionId = new PropertyState(this); + } + else + { + ConnectionId = (PropertyState)replacement; + } + } + } + + instance = ConnectionId; + break; + } + + case Opc.Ua.BrowseNames.GroupId: + { + if (createOrReplace) + { + if (GroupId == null) + { + if (replacement == null) + { + GroupId = new PropertyState(this); + } + else + { + GroupId = (PropertyState)replacement; + } + } + } + + instance = GroupId; + break; + } + + case Opc.Ua.BrowseNames.State: + { + if (createOrReplace) + { + if (State == null) + { + if (replacement == null) + { + State = new PropertyState(this); + } + else + { + State = (PropertyState)replacement; + } + } + } + + instance = State; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_connectionId; + private PropertyState m_groupId; + private PropertyState m_state; + #endregion + } + #endif + #endregion + + #region PubSubTransportLimitsExceedEventState Class + #if (!OPCUA_EXCLUDE_PubSubTransportLimitsExceedEventState) + /// + /// Stores an instance of the PubSubTransportLimitsExceedEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubTransportLimitsExceedEventState : PubSubStatusEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubTransportLimitsExceedEventState(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(Opc.Ua.ObjectTypes.PubSubTransportLimitsExceedEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAALAAAAFB1YlN1YlRyYW5zcG9ydExpbWl0c0V4Y2VlZEV2ZW50VHlwZUlu" + + "c3RhbmNlAQC8PAEAvDy8PAAA/////w0AAAAVYIkKAgAAAAAABwAAAEV2ZW50SWQBAL08AC4ARL08AAAA" + + "D/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABFdmVudFR5cGUBAL48AC4ARL48AAAAEf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAoAAABTb3VyY2VOb2RlAQC/PAAuAES/PAAAABH/////AQH/////AAAAABVg" + + "iQoCAAAAAAAKAAAAU291cmNlTmFtZQEAwDwALgBEwDwAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAA" + + "BAAAAFRpbWUBAME8AC4ARME8AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlY2VpdmVU" + + "aW1lAQDCPAAuAETCPAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAcAAABNZXNzYWdlAQDEPAAu" + + "AETEPAAAABX/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAU2V2ZXJpdHkBAMU8AC4ARMU8AAAABf//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAwAAABDb25uZWN0aW9uSWQBAMY8AC4ARMY8AAAAEf////8BAf//" + + "//8AAAAAFWCJCgIAAAAAAAcAAABHcm91cElkAQDHPAAuAETHPAAAABH/////AQH/////AAAAABVgiQoC" + + "AAAAAAAFAAAAU3RhdGUBAMg8AC4ARMg8AAABADc5/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAEFj" + + "dHVhbAEAyTwALgBEyTwAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1heGltdW0BAMo8AC4A" + + "RMo8AAAAB/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Actual + { + get + { + return m_actual; + } + + set + { + if (!Object.ReferenceEquals(m_actual, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_actual = value; + } + } + + /// + public PropertyState Maximum + { + get + { + return m_maximum; + } + + set + { + if (!Object.ReferenceEquals(m_maximum, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_maximum = 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_actual != null) + { + children.Add(m_actual); + } + + if (m_maximum != null) + { + children.Add(m_maximum); + } + + 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 Opc.Ua.BrowseNames.Actual: + { + if (createOrReplace) + { + if (Actual == null) + { + if (replacement == null) + { + Actual = new PropertyState(this); + } + else + { + Actual = (PropertyState)replacement; + } + } + } + + instance = Actual; + break; + } + + case Opc.Ua.BrowseNames.Maximum: + { + if (createOrReplace) + { + if (Maximum == null) + { + if (replacement == null) + { + Maximum = new PropertyState(this); + } + else + { + Maximum = (PropertyState)replacement; + } + } + } + + instance = Maximum; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_actual; + private PropertyState m_maximum; + #endregion + } + #endif + #endregion + + #region PubSubCommunicationFailureEventState Class + #if (!OPCUA_EXCLUDE_PubSubCommunicationFailureEventState) + /// + /// Stores an instance of the PubSubCommunicationFailureEventType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class PubSubCommunicationFailureEventState : PubSubStatusEventState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public PubSubCommunicationFailureEventState(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(Opc.Ua.ObjectTypes.PubSubCommunicationFailureEventType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKwAAAFB1YlN1YkNvbW11bmljYXRpb25GYWlsdXJlRXZlbnRUeXBlSW5z" + + "dGFuY2UBAMs8AQDLPMs8AAD/////DAAAABVgiQoCAAAAAAAHAAAARXZlbnRJZAEAzDwALgBEzDwAAAAP" + + "/////wEB/////wAAAAAVYIkKAgAAAAAACQAAAEV2ZW50VHlwZQEAzTwALgBEzTwAAAAR/////wEB////" + + "/wAAAAAVYIkKAgAAAAAACgAAAFNvdXJjZU5vZGUBAM48AC4ARM48AAAAEf////8BAf////8AAAAAFWCJ" + + "CgIAAAAAAAoAAABTb3VyY2VOYW1lAQDPPAAuAETPPAAAAAz/////AQH/////AAAAABVgiQoCAAAAAAAE" + + "AAAAVGltZQEA0DwALgBE0DwAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVjZWl2ZVRp" + + "bWUBANE8AC4ARNE8AAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABwAAAE1lc3NhZ2UBANM8AC4A" + + "RNM8AAAAFf////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABTZXZlcml0eQEA1DwALgBE1DwAAAAF////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADAAAAENvbm5lY3Rpb25JZAEA1TwALgBE1TwAAAAR/////wEB////" + + "/wAAAAAVYIkKAgAAAAAABwAAAEdyb3VwSWQBANY8AC4ARNY8AAAAEf////8BAf////8AAAAAFWCJCgIA" + + "AAAAAAUAAABTdGF0ZQEA1zwALgBE1zwAAAEANzn/////AQH/////AAAAABVgiQoCAAAAAAAFAAAARXJy" + + "b3IBANg8AC4ARNg8AAAAE/////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState Error + { + get + { + return m_error; + } + + set + { + if (!Object.ReferenceEquals(m_error, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_error = 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_error != null) + { + children.Add(m_error); + } + + 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 Opc.Ua.BrowseNames.Error: + { + if (createOrReplace) + { + if (Error == null) + { + if (replacement == null) + { + Error = new PropertyState(this); + } + else + { + Error = (PropertyState)replacement; + } + } + } + + instance = Error; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_error; + #endregion + } + #endif + #endregion + + #region UadpWriterGroupMessageState Class + #if (!OPCUA_EXCLUDE_UadpWriterGroupMessageState) + /// + /// Stores an instance of the UadpWriterGroupMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UadpWriterGroupMessageState : WriterGroupMessageState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UadpWriterGroupMessageState(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(Opc.Ua.ObjectTypes.UadpWriterGroupMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (SamplingOffset != null) + { + SamplingOffset.Initialize(context, SamplingOffset_InitializationString); + } + } + + #region Initialization String + private const string SamplingOffset_InitializationString = + "//////////8VYIkKAgAAAAAADgAAAFNhbXBsaW5nT2Zmc2V0AQB1UgAuAER1UgAAAQAiAf////8BAf//" + + "//8AAAAA"; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAIgAAAFVhZHBXcml0ZXJHcm91cE1lc3NhZ2VUeXBlSW5zdGFuY2UBAHFS" + + "AQBxUnFSAAD/////BQAAABVgiQoCAAAAAAAMAAAAR3JvdXBWZXJzaW9uAQByUgAuAERyUgAAAQAGUv//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAA8AAABEYXRhU2V0T3JkZXJpbmcBAHNSAC4ARHNSAAABALhP////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAGQAAAE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2sBAHRSAC4ARHRS" + + "AAABABo9/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFNhbXBsaW5nT2Zmc2V0AQB1UgAuAER1UgAA" + + "AQAiAf////8BAf////8AAAAAF2CJCgIAAAAAABAAAABQdWJsaXNoaW5nT2Zmc2V0AQB2UgAuAER2UgAA" + + "AQAiAQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState GroupVersion + { + get + { + return m_groupVersion; + } + + set + { + if (!Object.ReferenceEquals(m_groupVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_groupVersion = value; + } + } + + /// + public PropertyState DataSetOrdering + { + get + { + return m_dataSetOrdering; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetOrdering, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetOrdering = value; + } + } + + /// + public PropertyState NetworkMessageContentMask + { + get + { + return m_networkMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_networkMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkMessageContentMask = value; + } + } + + /// + public PropertyState SamplingOffset + { + get + { + return m_samplingOffset; + } + + set + { + if (!Object.ReferenceEquals(m_samplingOffset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_samplingOffset = value; + } + } + + /// + public PropertyState PublishingOffset + { + get + { + return m_publishingOffset; + } + + set + { + if (!Object.ReferenceEquals(m_publishingOffset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishingOffset = 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_groupVersion != null) + { + children.Add(m_groupVersion); + } + + if (m_dataSetOrdering != null) + { + children.Add(m_dataSetOrdering); + } + + if (m_networkMessageContentMask != null) + { + children.Add(m_networkMessageContentMask); + } + + if (m_samplingOffset != null) + { + children.Add(m_samplingOffset); + } + + if (m_publishingOffset != null) + { + children.Add(m_publishingOffset); + } + + 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 Opc.Ua.BrowseNames.GroupVersion: + { + if (createOrReplace) + { + if (GroupVersion == null) + { + if (replacement == null) + { + GroupVersion = new PropertyState(this); + } + else + { + GroupVersion = (PropertyState)replacement; + } + } + } + + instance = GroupVersion; + break; + } + + case Opc.Ua.BrowseNames.DataSetOrdering: + { + if (createOrReplace) + { + if (DataSetOrdering == null) + { + if (replacement == null) + { + DataSetOrdering = new PropertyState(this); + } + else + { + DataSetOrdering = (PropertyState)replacement; + } + } + } + + instance = DataSetOrdering; + break; + } + + case Opc.Ua.BrowseNames.NetworkMessageContentMask: + { + if (createOrReplace) + { + if (NetworkMessageContentMask == null) + { + if (replacement == null) + { + NetworkMessageContentMask = new PropertyState(this); + } + else + { + NetworkMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = NetworkMessageContentMask; + break; + } + + case Opc.Ua.BrowseNames.SamplingOffset: + { + if (createOrReplace) + { + if (SamplingOffset == null) + { + if (replacement == null) + { + SamplingOffset = new PropertyState(this); + } + else + { + SamplingOffset = (PropertyState)replacement; + } + } + } + + instance = SamplingOffset; + break; + } + + case Opc.Ua.BrowseNames.PublishingOffset: + { + if (createOrReplace) + { + if (PublishingOffset == null) + { + if (replacement == null) + { + PublishingOffset = new PropertyState(this); + } + else + { + PublishingOffset = (PropertyState)replacement; + } + } + } + + instance = PublishingOffset; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_groupVersion; + private PropertyState m_dataSetOrdering; + private PropertyState m_networkMessageContentMask; + private PropertyState m_samplingOffset; + private PropertyState m_publishingOffset; + #endregion + } + #endif + #endregion + + #region UadpDataSetWriterMessageState Class + #if (!OPCUA_EXCLUDE_UadpDataSetWriterMessageState) + /// + /// Stores an instance of the UadpDataSetWriterMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UadpDataSetWriterMessageState : DataSetWriterMessageState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UadpDataSetWriterMessageState(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(Opc.Ua.ObjectTypes.UadpDataSetWriterMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAFVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZVR5cGVJbnN0YW5jZQEA" + + "d1IBAHdSd1IAAP////8EAAAAFWCJCgIAAAAAABkAAABEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrAQB4" + + "UgAuAER4UgAAAQAePf////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABDb25maWd1cmVkU2l6ZQEAeVIA" + + "LgBEeVIAAAAF/////wEB/////wAAAAAVYIkKAgAAAAAAFAAAAE5ldHdvcmtNZXNzYWdlTnVtYmVyAQB6" + + "UgAuAER6UgAAAAX/////AQH/////AAAAABVgiQoCAAAAAAANAAAARGF0YVNldE9mZnNldAEAe1IALgBE" + + "e1IAAAAF/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState DataSetMessageContentMask + { + get + { + return m_dataSetMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetMessageContentMask = value; + } + } + + /// + public PropertyState ConfiguredSize + { + get + { + return m_configuredSize; + } + + set + { + if (!Object.ReferenceEquals(m_configuredSize, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_configuredSize = value; + } + } + + /// + public PropertyState NetworkMessageNumber + { + get + { + return m_networkMessageNumber; + } + + set + { + if (!Object.ReferenceEquals(m_networkMessageNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkMessageNumber = value; + } + } + + /// + public PropertyState DataSetOffset + { + get + { + return m_dataSetOffset; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetOffset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetOffset = 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_dataSetMessageContentMask != null) + { + children.Add(m_dataSetMessageContentMask); + } + + if (m_configuredSize != null) + { + children.Add(m_configuredSize); + } + + if (m_networkMessageNumber != null) + { + children.Add(m_networkMessageNumber); + } + + if (m_dataSetOffset != null) + { + children.Add(m_dataSetOffset); + } + + 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 Opc.Ua.BrowseNames.DataSetMessageContentMask: + { + if (createOrReplace) + { + if (DataSetMessageContentMask == null) + { + if (replacement == null) + { + DataSetMessageContentMask = new PropertyState(this); + } + else + { + DataSetMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = DataSetMessageContentMask; + break; + } + + case Opc.Ua.BrowseNames.ConfiguredSize: + { + if (createOrReplace) + { + if (ConfiguredSize == null) + { + if (replacement == null) + { + ConfiguredSize = new PropertyState(this); + } + else + { + ConfiguredSize = (PropertyState)replacement; + } + } + } + + instance = ConfiguredSize; + break; + } + + case Opc.Ua.BrowseNames.NetworkMessageNumber: + { + if (createOrReplace) + { + if (NetworkMessageNumber == null) + { + if (replacement == null) + { + NetworkMessageNumber = new PropertyState(this); + } + else + { + NetworkMessageNumber = (PropertyState)replacement; + } + } + } + + instance = NetworkMessageNumber; + break; + } + + case Opc.Ua.BrowseNames.DataSetOffset: + { + if (createOrReplace) + { + if (DataSetOffset == null) + { + if (replacement == null) + { + DataSetOffset = new PropertyState(this); + } + else + { + DataSetOffset = (PropertyState)replacement; + } + } + } + + instance = DataSetOffset; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_dataSetMessageContentMask; + private PropertyState m_configuredSize; + private PropertyState m_networkMessageNumber; + private PropertyState m_dataSetOffset; + #endregion + } + #endif + #endregion + + #region UadpDataSetReaderMessageState Class + #if (!OPCUA_EXCLUDE_UadpDataSetReaderMessageState) + /// + /// Stores an instance of the UadpDataSetReaderMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class UadpDataSetReaderMessageState : DataSetReaderMessageState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public UadpDataSetReaderMessageState(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(Opc.Ua.ObjectTypes.UadpDataSetReaderMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAFVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZVR5cGVJbnN0YW5jZQEA" + + "fFIBAHxSfFIAAP////8JAAAAFWCJCgIAAAAAAAwAAABHcm91cFZlcnNpb24BAH1SAC4ARH1SAAABAAZS" + + "/////wEB/////wAAAAAVYIkKAgAAAAAAFAAAAE5ldHdvcmtNZXNzYWdlTnVtYmVyAQB/UgAuAER/UgAA" + + "AAX/////AQH/////AAAAABVgiQoCAAAAAAANAAAARGF0YVNldE9mZnNldAEARUQALgBERUQAAAAF////" + + "/wEB/////wAAAAAVYIkKAgAAAAAADgAAAERhdGFTZXRDbGFzc0lkAQCAUgAuAESAUgAAAA7/////AQH/" + + "////AAAAABVgiQoCAAAAAAAZAAAATmV0d29ya01lc3NhZ2VDb250ZW50TWFzawEAgVIALgBEgVIAAAEA" + + "Gj3/////AQH/////AAAAABVgiQoCAAAAAAAZAAAARGF0YVNldE1lc3NhZ2VDb250ZW50TWFzawEAglIA" + + "LgBEglIAAAEAHj3/////AQH/////AAAAABVgiQoCAAAAAAASAAAAUHVibGlzaGluZ0ludGVydmFsAQCD" + + "UgAuAESDUgAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAABAAAABQcm9jZXNzaW5nT2Zmc2V0AQCE" + + "UgAuAESEUgAAAQAiAf////8BAf////8AAAAAFWCJCgIAAAAAAA0AAABSZWNlaXZlT2Zmc2V0AQCFUgAu" + + "AESFUgAAAQAiAf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState GroupVersion + { + get + { + return m_groupVersion; + } + + set + { + if (!Object.ReferenceEquals(m_groupVersion, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_groupVersion = value; + } + } + + /// + public PropertyState NetworkMessageNumber + { + get + { + return m_networkMessageNumber; + } + + set + { + if (!Object.ReferenceEquals(m_networkMessageNumber, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkMessageNumber = value; + } + } + + /// + public PropertyState DataSetOffset + { + get + { + return m_dataSetOffset; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetOffset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetOffset = value; + } + } + + /// + public PropertyState DataSetClassId + { + get + { + return m_dataSetClassId; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetClassId, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetClassId = value; + } + } + + /// + public PropertyState NetworkMessageContentMask + { + get + { + return m_networkMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_networkMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkMessageContentMask = value; + } + } + + /// + public PropertyState DataSetMessageContentMask + { + get + { + return m_dataSetMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetMessageContentMask = value; + } + } + + /// + public PropertyState PublishingInterval + { + get + { + return m_publishingInterval; + } + + set + { + if (!Object.ReferenceEquals(m_publishingInterval, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_publishingInterval = value; + } + } + + /// + public PropertyState ProcessingOffset + { + get + { + return m_processingOffset; + } + + set + { + if (!Object.ReferenceEquals(m_processingOffset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_processingOffset = value; + } + } + + /// + public PropertyState ReceiveOffset + { + get + { + return m_receiveOffset; + } + + set + { + if (!Object.ReferenceEquals(m_receiveOffset, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_receiveOffset = 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_groupVersion != null) + { + children.Add(m_groupVersion); + } + + if (m_networkMessageNumber != null) + { + children.Add(m_networkMessageNumber); + } + + if (m_dataSetOffset != null) + { + children.Add(m_dataSetOffset); + } + + if (m_dataSetClassId != null) + { + children.Add(m_dataSetClassId); + } + + if (m_networkMessageContentMask != null) + { + children.Add(m_networkMessageContentMask); + } + + if (m_dataSetMessageContentMask != null) + { + children.Add(m_dataSetMessageContentMask); + } + + if (m_publishingInterval != null) + { + children.Add(m_publishingInterval); + } + + if (m_processingOffset != null) + { + children.Add(m_processingOffset); + } + + if (m_receiveOffset != null) + { + children.Add(m_receiveOffset); + } + + 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 Opc.Ua.BrowseNames.GroupVersion: + { + if (createOrReplace) + { + if (GroupVersion == null) + { + if (replacement == null) + { + GroupVersion = new PropertyState(this); + } + else + { + GroupVersion = (PropertyState)replacement; + } + } + } + + instance = GroupVersion; + break; + } + + case Opc.Ua.BrowseNames.NetworkMessageNumber: + { + if (createOrReplace) + { + if (NetworkMessageNumber == null) + { + if (replacement == null) + { + NetworkMessageNumber = new PropertyState(this); + } + else + { + NetworkMessageNumber = (PropertyState)replacement; + } + } + } + + instance = NetworkMessageNumber; + break; + } + + case Opc.Ua.BrowseNames.DataSetOffset: + { + if (createOrReplace) + { + if (DataSetOffset == null) + { + if (replacement == null) + { + DataSetOffset = new PropertyState(this); + } + else + { + DataSetOffset = (PropertyState)replacement; + } + } + } + + instance = DataSetOffset; + break; + } + + case Opc.Ua.BrowseNames.DataSetClassId: + { + if (createOrReplace) + { + if (DataSetClassId == null) + { + if (replacement == null) + { + DataSetClassId = new PropertyState(this); + } + else + { + DataSetClassId = (PropertyState)replacement; + } + } + } + + instance = DataSetClassId; + break; + } + + case Opc.Ua.BrowseNames.NetworkMessageContentMask: + { + if (createOrReplace) + { + if (NetworkMessageContentMask == null) + { + if (replacement == null) + { + NetworkMessageContentMask = new PropertyState(this); + } + else + { + NetworkMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = NetworkMessageContentMask; + break; + } + + case Opc.Ua.BrowseNames.DataSetMessageContentMask: + { + if (createOrReplace) + { + if (DataSetMessageContentMask == null) + { + if (replacement == null) + { + DataSetMessageContentMask = new PropertyState(this); + } + else + { + DataSetMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = DataSetMessageContentMask; + break; + } + + case Opc.Ua.BrowseNames.PublishingInterval: + { + if (createOrReplace) + { + if (PublishingInterval == null) + { + if (replacement == null) + { + PublishingInterval = new PropertyState(this); + } + else + { + PublishingInterval = (PropertyState)replacement; + } + } + } + + instance = PublishingInterval; + break; + } + + case Opc.Ua.BrowseNames.ProcessingOffset: + { + if (createOrReplace) + { + if (ProcessingOffset == null) + { + if (replacement == null) + { + ProcessingOffset = new PropertyState(this); + } + else + { + ProcessingOffset = (PropertyState)replacement; + } + } + } + + instance = ProcessingOffset; + break; + } + + case Opc.Ua.BrowseNames.ReceiveOffset: + { + if (createOrReplace) + { + if (ReceiveOffset == null) + { + if (replacement == null) + { + ReceiveOffset = new PropertyState(this); + } + else + { + ReceiveOffset = (PropertyState)replacement; + } + } + } + + instance = ReceiveOffset; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_groupVersion; + private PropertyState m_networkMessageNumber; + private PropertyState m_dataSetOffset; + private PropertyState m_dataSetClassId; + private PropertyState m_networkMessageContentMask; + private PropertyState m_dataSetMessageContentMask; + private PropertyState m_publishingInterval; + private PropertyState m_processingOffset; + private PropertyState m_receiveOffset; + #endregion + } + #endif + #endregion + + #region JsonWriterGroupMessageState Class + #if (!OPCUA_EXCLUDE_JsonWriterGroupMessageState) + /// + /// Stores an instance of the JsonWriterGroupMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class JsonWriterGroupMessageState : WriterGroupMessageState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public JsonWriterGroupMessageState(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(Opc.Ua.ObjectTypes.JsonWriterGroupMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAIgAAAEpzb25Xcml0ZXJHcm91cE1lc3NhZ2VUeXBlSW5zdGFuY2UBAIZS" + + "AQCGUoZSAAD/////AQAAABVgiQoCAAAAAAAZAAAATmV0d29ya01lc3NhZ2VDb250ZW50TWFzawEAh1IA" + + "LgBEh1IAAAEAJj3/////AQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NetworkMessageContentMask + { + get + { + return m_networkMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_networkMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkMessageContentMask = 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_networkMessageContentMask != null) + { + children.Add(m_networkMessageContentMask); + } + + 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 Opc.Ua.BrowseNames.NetworkMessageContentMask: + { + if (createOrReplace) + { + if (NetworkMessageContentMask == null) + { + if (replacement == null) + { + NetworkMessageContentMask = new PropertyState(this); + } + else + { + NetworkMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = NetworkMessageContentMask; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_networkMessageContentMask; + #endregion + } + #endif + #endregion + + #region JsonDataSetWriterMessageState Class + #if (!OPCUA_EXCLUDE_JsonDataSetWriterMessageState) + /// + /// Stores an instance of the JsonDataSetWriterMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class JsonDataSetWriterMessageState : DataSetWriterMessageState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public JsonDataSetWriterMessageState(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(Opc.Ua.ObjectTypes.JsonDataSetWriterMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAEpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZVR5cGVJbnN0YW5jZQEA" + + "iFIBAIhSiFIAAP////8BAAAAFWCJCgIAAAAAABkAAABEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrAQCJ" + + "UgAuAESJUgAAAQAqPf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState DataSetMessageContentMask + { + get + { + return m_dataSetMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetMessageContentMask = 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_dataSetMessageContentMask != null) + { + children.Add(m_dataSetMessageContentMask); + } + + 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 Opc.Ua.BrowseNames.DataSetMessageContentMask: + { + if (createOrReplace) + { + if (DataSetMessageContentMask == null) + { + if (replacement == null) + { + DataSetMessageContentMask = new PropertyState(this); + } + else + { + DataSetMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = DataSetMessageContentMask; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_dataSetMessageContentMask; + #endregion + } + #endif + #endregion + + #region JsonDataSetReaderMessageState Class + #if (!OPCUA_EXCLUDE_JsonDataSetReaderMessageState) + /// + /// Stores an instance of the JsonDataSetReaderMessageType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class JsonDataSetReaderMessageState : DataSetReaderMessageState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public JsonDataSetReaderMessageState(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(Opc.Ua.ObjectTypes.JsonDataSetReaderMessageType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJAAAAEpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZVR5cGVJbnN0YW5jZQEA" + + "ilIBAIpSilIAAP////8CAAAAFWCJCgIAAAAAABkAAABOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrAQCL" + + "UgAuAESLUgAAAQAmPf////8BAf////8AAAAAFWCJCgIAAAAAABkAAABEYXRhU2V0TWVzc2FnZUNvbnRl" + + "bnRNYXNrAQCMUgAuAESMUgAAAQAqPf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState NetworkMessageContentMask + { + get + { + return m_networkMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_networkMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkMessageContentMask = value; + } + } + + /// + public PropertyState DataSetMessageContentMask + { + get + { + return m_dataSetMessageContentMask; + } + + set + { + if (!Object.ReferenceEquals(m_dataSetMessageContentMask, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_dataSetMessageContentMask = 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_networkMessageContentMask != null) + { + children.Add(m_networkMessageContentMask); + } + + if (m_dataSetMessageContentMask != null) + { + children.Add(m_dataSetMessageContentMask); + } + + 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 Opc.Ua.BrowseNames.NetworkMessageContentMask: + { + if (createOrReplace) + { + if (NetworkMessageContentMask == null) + { + if (replacement == null) + { + NetworkMessageContentMask = new PropertyState(this); + } + else + { + NetworkMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = NetworkMessageContentMask; + break; + } + + case Opc.Ua.BrowseNames.DataSetMessageContentMask: + { + if (createOrReplace) + { + if (DataSetMessageContentMask == null) + { + if (replacement == null) + { + DataSetMessageContentMask = new PropertyState(this); + } + else + { + DataSetMessageContentMask = (PropertyState)replacement; + } + } + } + + instance = DataSetMessageContentMask; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_networkMessageContentMask; + private PropertyState m_dataSetMessageContentMask; + #endregion + } + #endif + #endregion + + #region DatagramConnectionTransportState Class + #if (!OPCUA_EXCLUDE_DatagramConnectionTransportState) + /// + /// Stores an instance of the DatagramConnectionTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DatagramConnectionTransportState : ConnectionTransportState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DatagramConnectionTransportState(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(Opc.Ua.ObjectTypes.DatagramConnectionTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJwAAAERhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydFR5cGVJbnN0YW5j" + + "ZQEA2DoBANg62DoAAP////8BAAAABGCACgEAAAAAABAAAABEaXNjb3ZlcnlBZGRyZXNzAQDgOgAvAQCZ" + + "UuA6AAD/////AQAAABVgiQoCAAAAAAAQAAAATmV0d29ya0ludGVyZmFjZQEAMjsALwEAtT8yOwAAAAz/" + + "////AQH/////AQAAABdgiQoCAAAAAAAKAAAAU2VsZWN0aW9ucwEAq0QALgBEq0QAAAAYAQAAAAEAAAAA" + + "AAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public NetworkAddressState DiscoveryAddress + { + get + { + return m_discoveryAddress; + } + + set + { + if (!Object.ReferenceEquals(m_discoveryAddress, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_discoveryAddress = 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_discoveryAddress != null) + { + children.Add(m_discoveryAddress); + } + + 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 Opc.Ua.BrowseNames.DiscoveryAddress: + { + if (createOrReplace) + { + if (DiscoveryAddress == null) + { + if (replacement == null) + { + DiscoveryAddress = new NetworkAddressState(this); + } + else + { + DiscoveryAddress = (NetworkAddressState)replacement; + } + } + } + + instance = DiscoveryAddress; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private NetworkAddressState m_discoveryAddress; + #endregion + } + #endif + #endregion + + #region DatagramWriterGroupTransportState Class + #if (!OPCUA_EXCLUDE_DatagramWriterGroupTransportState) + /// + /// Stores an instance of the DatagramWriterGroupTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DatagramWriterGroupTransportState : WriterGroupTransportState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public DatagramWriterGroupTransportState(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(Opc.Ua.ObjectTypes.DatagramWriterGroupTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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); + + if (MessageRepeatCount != null) + { + MessageRepeatCount.Initialize(context, MessageRepeatCount_InitializationString); + } + + if (MessageRepeatDelay != null) + { + MessageRepeatDelay.Initialize(context, MessageRepeatDelay_InitializationString); + } + } + + #region Initialization String + private const string MessageRepeatCount_InitializationString = + "//////////8VYIkKAgAAAAAAEgAAAE1lc3NhZ2VSZXBlYXRDb3VudAEAjlIALgBEjlIAAAAD/////wEB" + + "/////wAAAAA="; + + private const string MessageRepeatDelay_InitializationString = + "//////////8VYIkKAgAAAAAAEgAAAE1lc3NhZ2VSZXBlYXREZWxheQEAj1IALgBEj1IAAAEAIgH/////" + + "AQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8EYIACAQAAAAAAKAAAAERhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnRUeXBlSW5zdGFu" + + "Y2UBAI1SAQCNUo1SAAD/////AgAAABVgiQoCAAAAAAASAAAATWVzc2FnZVJlcGVhdENvdW50AQCOUgAu" + + "AESOUgAAAAP/////AQH/////AAAAABVgiQoCAAAAAAASAAAATWVzc2FnZVJlcGVhdERlbGF5AQCPUgAu" + + "AESPUgAAAQAiAf////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState MessageRepeatCount + { + get + { + return m_messageRepeatCount; + } + + set + { + if (!Object.ReferenceEquals(m_messageRepeatCount, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageRepeatCount = value; + } + } + + /// + public PropertyState MessageRepeatDelay + { + get + { + return m_messageRepeatDelay; + } + + set + { + if (!Object.ReferenceEquals(m_messageRepeatDelay, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_messageRepeatDelay = 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_messageRepeatCount != null) + { + children.Add(m_messageRepeatCount); + } + + if (m_messageRepeatDelay != null) + { + children.Add(m_messageRepeatDelay); + } + + 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 Opc.Ua.BrowseNames.MessageRepeatCount: + { + if (createOrReplace) + { + if (MessageRepeatCount == null) + { + if (replacement == null) + { + MessageRepeatCount = new PropertyState(this); + } + else + { + MessageRepeatCount = (PropertyState)replacement; + } + } + } + + instance = MessageRepeatCount; + break; + } + + case Opc.Ua.BrowseNames.MessageRepeatDelay: + { + if (createOrReplace) + { + if (MessageRepeatDelay == null) + { + if (replacement == null) + { + MessageRepeatDelay = new PropertyState(this); + } + else + { + MessageRepeatDelay = (PropertyState)replacement; + } + } + } + + instance = MessageRepeatDelay; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_messageRepeatCount; + private PropertyState m_messageRepeatDelay; + #endregion + } + #endif + #endregion + + #region BrokerConnectionTransportState Class + #if (!OPCUA_EXCLUDE_BrokerConnectionTransportState) + /// + /// Stores an instance of the BrokerConnectionTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BrokerConnectionTransportState : ConnectionTransportState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BrokerConnectionTransportState(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(Opc.Ua.ObjectTypes.BrokerConnectionTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJQAAAEJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnRUeXBlSW5zdGFuY2UB" + + "ADM7AQAzOzM7AAD/////AgAAABVgiQoCAAAAAAALAAAAUmVzb3VyY2VVcmkBADQ7AC4ARDQ7AAAADP//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABgAAABBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkBAEo7AC4AREo7" + + "AAAADP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = value; + } + } + + /// + public PropertyState AuthenticationProfileUri + { + get + { + return m_authenticationProfileUri; + } + + set + { + if (!Object.ReferenceEquals(m_authenticationProfileUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_authenticationProfileUri = 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_resourceUri != null) + { + children.Add(m_resourceUri); + } + + if (m_authenticationProfileUri != null) + { + children.Add(m_authenticationProfileUri); + } + + 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 Opc.Ua.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + + case Opc.Ua.BrowseNames.AuthenticationProfileUri: + { + if (createOrReplace) + { + if (AuthenticationProfileUri == null) + { + if (replacement == null) + { + AuthenticationProfileUri = new PropertyState(this); + } + else + { + AuthenticationProfileUri = (PropertyState)replacement; + } + } + } + + instance = AuthenticationProfileUri; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_resourceUri; + private PropertyState m_authenticationProfileUri; + #endregion + } + #endif + #endregion + + #region BrokerWriterGroupTransportState Class + #if (!OPCUA_EXCLUDE_BrokerWriterGroupTransportState) + /// + /// Stores an instance of the BrokerWriterGroupTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BrokerWriterGroupTransportState : WriterGroupTransportState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BrokerWriterGroupTransportState(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(Opc.Ua.ObjectTypes.BrokerWriterGroupTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAJgAAAEJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0VHlwZUluc3RhbmNl" + + "AQCQUgEAkFKQUgAA/////wQAAAAVYIkKAgAAAAAACQAAAFF1ZXVlTmFtZQEAkVIALgBEkVIAAAAM////" + + "/wEB/////wAAAAAVYIkKAgAAAAAACwAAAFJlc291cmNlVXJpAQCOOwAuAESOOwAAAAz/////AQH/////" + + "AAAAABVgiQoCAAAAAAAYAAAAQXV0aGVudGljYXRpb25Qcm9maWxlVXJpAQCPOwAuAESPOwAAAAz/////" + + "AQH/////AAAAABVgiQoCAAAAAAAaAAAAUmVxdWVzdGVkRGVsaXZlcnlHdWFyYW50ZWUBAJE7AC4ARJE7" + + "AAABAKA6/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState QueueName + { + get + { + return m_queueName; + } + + set + { + if (!Object.ReferenceEquals(m_queueName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queueName = value; + } + } + + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = value; + } + } + + /// + public PropertyState AuthenticationProfileUri + { + get + { + return m_authenticationProfileUri; + } + + set + { + if (!Object.ReferenceEquals(m_authenticationProfileUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_authenticationProfileUri = value; + } + } + + /// + public PropertyState RequestedDeliveryGuarantee + { + get + { + return m_requestedDeliveryGuarantee; + } + + set + { + if (!Object.ReferenceEquals(m_requestedDeliveryGuarantee, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestedDeliveryGuarantee = 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_queueName != null) + { + children.Add(m_queueName); + } + + if (m_resourceUri != null) + { + children.Add(m_resourceUri); + } + + if (m_authenticationProfileUri != null) + { + children.Add(m_authenticationProfileUri); + } + + if (m_requestedDeliveryGuarantee != null) + { + children.Add(m_requestedDeliveryGuarantee); + } + + 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 Opc.Ua.BrowseNames.QueueName: + { + if (createOrReplace) + { + if (QueueName == null) + { + if (replacement == null) + { + QueueName = new PropertyState(this); + } + else + { + QueueName = (PropertyState)replacement; + } + } + } + + instance = QueueName; + break; + } + + case Opc.Ua.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + + case Opc.Ua.BrowseNames.AuthenticationProfileUri: + { + if (createOrReplace) + { + if (AuthenticationProfileUri == null) + { + if (replacement == null) + { + AuthenticationProfileUri = new PropertyState(this); + } + else + { + AuthenticationProfileUri = (PropertyState)replacement; + } + } + } + + instance = AuthenticationProfileUri; + break; + } + + case Opc.Ua.BrowseNames.RequestedDeliveryGuarantee: + { + if (createOrReplace) + { + if (RequestedDeliveryGuarantee == null) + { + if (replacement == null) + { + RequestedDeliveryGuarantee = new PropertyState(this); + } + else + { + RequestedDeliveryGuarantee = (PropertyState)replacement; + } + } + } + + instance = RequestedDeliveryGuarantee; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_queueName; + private PropertyState m_resourceUri; + private PropertyState m_authenticationProfileUri; + private PropertyState m_requestedDeliveryGuarantee; + #endregion + } + #endif + #endregion + + #region BrokerDataSetWriterTransportState Class + #if (!OPCUA_EXCLUDE_BrokerDataSetWriterTransportState) + /// + /// Stores an instance of the BrokerDataSetWriterTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BrokerDataSetWriterTransportState : DataSetWriterTransportState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BrokerDataSetWriterTransportState(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(Opc.Ua.ObjectTypes.BrokerDataSetWriterTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnRUeXBlSW5zdGFu" + + "Y2UBAJJSAQCSUpJSAAD/////BgAAABVgiQoCAAAAAAAJAAAAUXVldWVOYW1lAQCTUgAuAESTUgAAAAz/" + + "////AQH/////AAAAABVgiQoCAAAAAAARAAAATWV0YURhdGFRdWV1ZU5hbWUBAJRSAC4ARJRSAAAADP//" + + "//8BAf////8AAAAAFWCJCgIAAAAAAAsAAABSZXNvdXJjZVVyaQEAkjsALgBEkjsAAAAM/////wEB////" + + "/wAAAAAVYIkKAgAAAAAAGAAAAEF1dGhlbnRpY2F0aW9uUHJvZmlsZVVyaQEAkzsALgBEkzsAAAAM////" + + "/wEB/////wAAAAAVYIkKAgAAAAAAGgAAAFJlcXVlc3RlZERlbGl2ZXJ5R3VhcmFudGVlAQDiOwAuAETi" + + "OwAAAQCgOv////8BAf////8AAAAAFWCJCgIAAAAAABIAAABNZXRhRGF0YVVwZGF0ZVRpbWUBAJVSAC4A" + + "RJVSAAABACIB/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState QueueName + { + get + { + return m_queueName; + } + + set + { + if (!Object.ReferenceEquals(m_queueName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queueName = value; + } + } + + /// + public PropertyState MetaDataQueueName + { + get + { + return m_metaDataQueueName; + } + + set + { + if (!Object.ReferenceEquals(m_metaDataQueueName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_metaDataQueueName = value; + } + } + + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = value; + } + } + + /// + public PropertyState AuthenticationProfileUri + { + get + { + return m_authenticationProfileUri; + } + + set + { + if (!Object.ReferenceEquals(m_authenticationProfileUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_authenticationProfileUri = value; + } + } + + /// + public PropertyState RequestedDeliveryGuarantee + { + get + { + return m_requestedDeliveryGuarantee; + } + + set + { + if (!Object.ReferenceEquals(m_requestedDeliveryGuarantee, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestedDeliveryGuarantee = value; + } + } + + /// + public PropertyState MetaDataUpdateTime + { + get + { + return m_metaDataUpdateTime; + } + + set + { + if (!Object.ReferenceEquals(m_metaDataUpdateTime, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_metaDataUpdateTime = 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_queueName != null) + { + children.Add(m_queueName); + } + + if (m_metaDataQueueName != null) + { + children.Add(m_metaDataQueueName); + } + + if (m_resourceUri != null) + { + children.Add(m_resourceUri); + } + + if (m_authenticationProfileUri != null) + { + children.Add(m_authenticationProfileUri); + } + + if (m_requestedDeliveryGuarantee != null) + { + children.Add(m_requestedDeliveryGuarantee); + } + + if (m_metaDataUpdateTime != null) + { + children.Add(m_metaDataUpdateTime); + } + + 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 Opc.Ua.BrowseNames.QueueName: + { + if (createOrReplace) + { + if (QueueName == null) + { + if (replacement == null) + { + QueueName = new PropertyState(this); + } + else + { + QueueName = (PropertyState)replacement; + } + } + } + + instance = QueueName; + break; + } + + case Opc.Ua.BrowseNames.MetaDataQueueName: + { + if (createOrReplace) + { + if (MetaDataQueueName == null) + { + if (replacement == null) + { + MetaDataQueueName = new PropertyState(this); + } + else + { + MetaDataQueueName = (PropertyState)replacement; + } + } + } + + instance = MetaDataQueueName; + break; + } + + case Opc.Ua.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + + case Opc.Ua.BrowseNames.AuthenticationProfileUri: + { + if (createOrReplace) + { + if (AuthenticationProfileUri == null) + { + if (replacement == null) + { + AuthenticationProfileUri = new PropertyState(this); + } + else + { + AuthenticationProfileUri = (PropertyState)replacement; + } + } + } + + instance = AuthenticationProfileUri; + break; + } + + case Opc.Ua.BrowseNames.RequestedDeliveryGuarantee: + { + if (createOrReplace) + { + if (RequestedDeliveryGuarantee == null) + { + if (replacement == null) + { + RequestedDeliveryGuarantee = new PropertyState(this); + } + else + { + RequestedDeliveryGuarantee = (PropertyState)replacement; + } + } + } + + instance = RequestedDeliveryGuarantee; + break; + } + + case Opc.Ua.BrowseNames.MetaDataUpdateTime: + { + if (createOrReplace) + { + if (MetaDataUpdateTime == null) + { + if (replacement == null) + { + MetaDataUpdateTime = new PropertyState(this); + } + else + { + MetaDataUpdateTime = (PropertyState)replacement; + } + } + } + + instance = MetaDataUpdateTime; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_queueName; + private PropertyState m_metaDataQueueName; + private PropertyState m_resourceUri; + private PropertyState m_authenticationProfileUri; + private PropertyState m_requestedDeliveryGuarantee; + private PropertyState m_metaDataUpdateTime; + #endregion + } + #endif + #endregion + + #region BrokerDataSetReaderTransportState Class + #if (!OPCUA_EXCLUDE_BrokerDataSetReaderTransportState) + /// + /// Stores an instance of the BrokerDataSetReaderTransportType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class BrokerDataSetReaderTransportState : DataSetReaderTransportState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public BrokerDataSetReaderTransportState(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(Opc.Ua.ObjectTypes.BrokerDataSetReaderTransportType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAKAAAAEJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnRUeXBlSW5zdGFu" + + "Y2UBAJZSAQCWUpZSAAD/////BQAAABVgiQoCAAAAAAAJAAAAUXVldWVOYW1lAQCXUgAuAESXUgAAAAz/" + + "////AQH/////AAAAABVgiQoCAAAAAAALAAAAUmVzb3VyY2VVcmkBAOY7AC4AROY7AAAADP////8BAf//" + + "//8AAAAAFWCJCgIAAAAAABgAAABBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkBADs8AC4ARDs8AAAADP//" + + "//8BAf////8AAAAAFWCJCgIAAAAAABoAAABSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZQEAPDwALgBE" + + "PDwAAAEAoDr/////AQH/////AAAAABVgiQoCAAAAAAARAAAATWV0YURhdGFRdWV1ZU5hbWUBAJhSAC4A" + + "RJhSAAAADP////8BAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState QueueName + { + get + { + return m_queueName; + } + + set + { + if (!Object.ReferenceEquals(m_queueName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_queueName = value; + } + } + + /// + public PropertyState ResourceUri + { + get + { + return m_resourceUri; + } + + set + { + if (!Object.ReferenceEquals(m_resourceUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_resourceUri = value; + } + } + + /// + public PropertyState AuthenticationProfileUri + { + get + { + return m_authenticationProfileUri; + } + + set + { + if (!Object.ReferenceEquals(m_authenticationProfileUri, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_authenticationProfileUri = value; + } + } + + /// + public PropertyState RequestedDeliveryGuarantee + { + get + { + return m_requestedDeliveryGuarantee; + } + + set + { + if (!Object.ReferenceEquals(m_requestedDeliveryGuarantee, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_requestedDeliveryGuarantee = value; + } + } + + /// + public PropertyState MetaDataQueueName + { + get + { + return m_metaDataQueueName; + } + + set + { + if (!Object.ReferenceEquals(m_metaDataQueueName, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_metaDataQueueName = 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_queueName != null) + { + children.Add(m_queueName); + } + + if (m_resourceUri != null) + { + children.Add(m_resourceUri); + } + + if (m_authenticationProfileUri != null) + { + children.Add(m_authenticationProfileUri); + } + + if (m_requestedDeliveryGuarantee != null) + { + children.Add(m_requestedDeliveryGuarantee); + } + + if (m_metaDataQueueName != null) + { + children.Add(m_metaDataQueueName); + } + + 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 Opc.Ua.BrowseNames.QueueName: + { + if (createOrReplace) + { + if (QueueName == null) + { + if (replacement == null) + { + QueueName = new PropertyState(this); + } + else + { + QueueName = (PropertyState)replacement; + } + } + } + + instance = QueueName; + break; + } + + case Opc.Ua.BrowseNames.ResourceUri: + { + if (createOrReplace) + { + if (ResourceUri == null) + { + if (replacement == null) + { + ResourceUri = new PropertyState(this); + } + else + { + ResourceUri = (PropertyState)replacement; + } + } + } + + instance = ResourceUri; + break; + } + + case Opc.Ua.BrowseNames.AuthenticationProfileUri: + { + if (createOrReplace) + { + if (AuthenticationProfileUri == null) + { + if (replacement == null) + { + AuthenticationProfileUri = new PropertyState(this); + } + else + { + AuthenticationProfileUri = (PropertyState)replacement; + } + } + } + + instance = AuthenticationProfileUri; + break; + } + + case Opc.Ua.BrowseNames.RequestedDeliveryGuarantee: + { + if (createOrReplace) + { + if (RequestedDeliveryGuarantee == null) + { + if (replacement == null) + { + RequestedDeliveryGuarantee = new PropertyState(this); + } + else + { + RequestedDeliveryGuarantee = (PropertyState)replacement; + } + } + } + + instance = RequestedDeliveryGuarantee; + break; + } + + case Opc.Ua.BrowseNames.MetaDataQueueName: + { + if (createOrReplace) + { + if (MetaDataQueueName == null) + { + if (replacement == null) + { + MetaDataQueueName = new PropertyState(this); + } + else + { + MetaDataQueueName = (PropertyState)replacement; + } + } + } + + instance = MetaDataQueueName; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_queueName; + private PropertyState m_resourceUri; + private PropertyState m_authenticationProfileUri; + private PropertyState m_requestedDeliveryGuarantee; + private PropertyState m_metaDataQueueName; + #endregion + } + #endif + #endregion + + #region NetworkAddressState Class + #if (!OPCUA_EXCLUDE_NetworkAddressState) + /// + /// Stores an instance of the NetworkAddressType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NetworkAddressState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NetworkAddressState(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(Opc.Ua.ObjectTypes.NetworkAddressType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAGgAAAE5ldHdvcmtBZGRyZXNzVHlwZUluc3RhbmNlAQCZUgEAmVKZUgAA" + + "/////wEAAAAVYIkKAgAAAAAAEAAAAE5ldHdvcmtJbnRlcmZhY2UBAJpSAC8BALU/mlIAAAAM/////wEB" + + "/////wEAAAAXYIkKAgAAAAAACgAAAFNlbGVjdGlvbnMBAK5EAC4ARK5EAAAAGAEAAAABAAAAAAAAAAEB" + + "/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public SelectionListState NetworkInterface + { + get + { + return m_networkInterface; + } + + set + { + if (!Object.ReferenceEquals(m_networkInterface, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_networkInterface = 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_networkInterface != null) + { + children.Add(m_networkInterface); + } + + 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 Opc.Ua.BrowseNames.NetworkInterface: + { + if (createOrReplace) + { + if (NetworkInterface == null) + { + if (replacement == null) + { + NetworkInterface = new SelectionListState(this); + } + else + { + NetworkInterface = (SelectionListState)replacement; + } + } + } + + instance = NetworkInterface; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private SelectionListState m_networkInterface; + #endregion + } + #endif + #endregion + + #region NetworkAddressUrlState Class + #if (!OPCUA_EXCLUDE_NetworkAddressUrlState) + /// + /// Stores an instance of the NetworkAddressUrlType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class NetworkAddressUrlState : NetworkAddressState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public NetworkAddressUrlState(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(Opc.Ua.ObjectTypes.NetworkAddressUrlType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAE5ldHdvcmtBZGRyZXNzVXJsVHlwZUluc3RhbmNlAQCbUgEAm1Kb" + + "UgAA/////wIAAAAVYIkKAgAAAAAAEAAAAE5ldHdvcmtJbnRlcmZhY2UBAJxSAC8BALU/nFIAAAAM////" + + "/wEB/////wEAAAAXYIkKAgAAAAAACgAAAFNlbGVjdGlvbnMBALFEAC4ARLFEAAAAGAEAAAABAAAAAAAA" + + "AAEB/////wAAAAAVYIkKAgAAAAAAAwAAAFVybAEAnVIALwA/nVIAAAAM/////wEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + /// + public BaseDataVariableState Url + { + get + { + return m_url; + } + + set + { + if (!Object.ReferenceEquals(m_url, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_url = 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_url != null) + { + children.Add(m_url); + } + + 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 Opc.Ua.BrowseNames.Url: + { + if (createOrReplace) + { + if (Url == null) + { + if (replacement == null) + { + Url = new BaseDataVariableState(this); + } + else + { + Url = (BaseDataVariableState)replacement; + } + } + } + + instance = Url; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private BaseDataVariableState m_url; + #endregion + } + #endif + #endregion + + #region AliasNameState Class + #if (!OPCUA_EXCLUDE_AliasNameState) + /// + /// Stores an instance of the AliasNameType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AliasNameState : BaseObjectState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AliasNameState(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(Opc.Ua.ObjectTypes.AliasNameType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAFQAAAEFsaWFzTmFtZVR5cGVJbnN0YW5jZQEAn1sBAJ9bn1sAAP////8A" + + "AAAA"; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region AliasNameCategoryState Class + #if (!OPCUA_EXCLUDE_AliasNameCategoryState) + /// + /// Stores an instance of the AliasNameCategoryType ObjectType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class AliasNameCategoryState : FolderState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public AliasNameCategoryState(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(Opc.Ua.ObjectTypes.AliasNameCategoryType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + #if (!OPCUA_EXCLUDE_InitializationStrings) + /// + /// Initializes the instance. + /// + protected override void Initialize(ISystemContext 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 = + "//////////8EYIACAQAAAAAAHQAAAEFsaWFzTmFtZUNhdGVnb3J5VHlwZUluc3RhbmNlAQCgWwEAoFug" + + "WwAA/////wEAAAAEYYIKBAAAAAAACQAAAEZpbmRBbGlhcwEAplsALwEAplumWwAAAQH/////AgAAABdg" + + "qQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAKdbAC4ARKdbAACWAgAAAAEAKgEBJQAAABYAAABBbGlh" + + "c05hbWVTZWFyY2hQYXR0ZXJuAAz/////AAAAAAABACoBASIAAAATAAAAUmVmZXJlbmNlVHlwZUZpbHRl" + + "cgAR/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAXYKkKAgAAAAAADwAAAE91dHB1dEFy" + + "Z3VtZW50cwEAqFsALgBEqFsAAJYBAAAAAQAqAQEiAAAADQAAAEFsaWFzTm9kZUxpc3QBAKxbAQAAAAEA" + + "AAAAAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public FindAliasMethodState FindAlias + { + get + { + return m_findAliasMethod; + } + + set + { + if (!Object.ReferenceEquals(m_findAliasMethod, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_findAliasMethod = 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_findAliasMethod != null) + { + children.Add(m_findAliasMethod); + } + + 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 Opc.Ua.BrowseNames.FindAlias: + { + if (createOrReplace) + { + if (FindAlias == null) + { + if (replacement == null) + { + FindAlias = new FindAliasMethodState(this); + } + else + { + FindAlias = (FindAliasMethodState)replacement; + } + } + } + + instance = FindAlias; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private FindAliasMethodState m_findAliasMethod; + #endregion + } + #endif + #endregion + + #region FindAliasMethodState Class + #if (!OPCUA_EXCLUDE_FindAliasMethodState) + /// + /// Stores an instance of the FindAliasMethodType Method. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class FindAliasMethodState : MethodState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public FindAliasMethodState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public new static NodeState Construct(NodeState parent) + { + return new FindAliasMethodState(parent); + } + + #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 = + "//////////8EYYIKBAAAAAAAEwAAAEZpbmRBbGlhc01ldGhvZFR5cGUBAKlbAC8BAKlbqVsAAAEB////" + + "/wIAAAAXYKkKAgAAAAAADgAAAElucHV0QXJndW1lbnRzAQCqWwAuAESqWwAAlgIAAAABACoBASUAAAAW" + + "AAAAQWxpYXNOYW1lU2VhcmNoUGF0dGVybgAM/////wAAAAAAAQAqAQEiAAAAEwAAAFJlZmVyZW5jZVR5" + + "cGVGaWx0ZXIAEf////8AAAAAAAEAKAEBAAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABP" + + "dXRwdXRBcmd1bWVudHMBAKtbAC4ARKtbAACWAQAAAAEAKgEBIgAAAA0AAABBbGlhc05vZGVMaXN0AQCs" + + "WwEAAAABAAAAAAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + #endregion + #endif + #endregion + + #region Event Callbacks + /// + /// Raised when the the method is called. + /// + public FindAliasMethodStateMethodCallHandler 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; + + string aliasNameSearchPattern = (string)_inputArguments[0]; + NodeId referenceTypeFilter = (NodeId)_inputArguments[1]; + + AliasNameDataType[] aliasNodeList = (AliasNameDataType[])_outputArguments[0]; + + if (OnCall != null) + { + result = OnCall( + _context, + this, + _objectId, + aliasNameSearchPattern, + referenceTypeFilter, + ref aliasNodeList); + } + + _outputArguments[0] = aliasNodeList; + + return result; + } + #endregion + + #region Private Fields + #endregion + } + + /// + /// Used to receive notifications when the method is called. + /// + /// + public delegate ServiceResult FindAliasMethodStateMethodCallHandler( + ISystemContext context, + MethodState method, + NodeId objectId, + string aliasNameSearchPattern, + NodeId referenceTypeFilter, + ref AliasNameDataType[] aliasNodeList); + #endif + #endregion + + #region MultiStateDictionaryEntryDiscreteBaseState Class + #if (!OPCUA_EXCLUDE_MultiStateDictionaryEntryDiscreteBaseState) + /// + /// Stores an instance of the MultiStateDictionaryEntryDiscreteBaseType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class MultiStateDictionaryEntryDiscreteBaseState : MultiStateValueDiscreteState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public MultiStateDictionaryEntryDiscreteBaseState(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(Opc.Ua.VariableTypes.MultiStateDictionaryEntryDiscreteBaseType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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); + + if (ValueAsDictionaryEntries != null) + { + ValueAsDictionaryEntries.Initialize(context, ValueAsDictionaryEntries_InitializationString); + } + } + + #region Initialization String + private const string ValueAsDictionaryEntries_InitializationString = + "//////////8XYIkKAgAAAAAAGAAAAFZhbHVlQXNEaWN0aW9uYXJ5RW50cmllcwEAi0oALgBEi0oAAAAR" + + "AQAAAAEAAAAAAAAAAQH/////AAAAAA=="; + + private const string InitializationString = + "//////////8VYIkCAgAAAAAAMQAAAE11bHRpU3RhdGVEaWN0aW9uYXJ5RW50cnlEaXNjcmV0ZUJhc2VU" + + "eXBlSW5zdGFuY2UBAIVKAQCFSoVKAAAAGv////8BAf////8EAAAAF2CJCgIAAAAAAAoAAABFbnVtVmFs" + + "dWVzAQCISgAuAESISgAAAQCqHQEAAAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAACwAAAFZhbHVl" + + "QXNUZXh0AQCJSgAuAESJSgAAABX/////AQH/////AAAAABdgiQoCAAAAAAAVAAAARW51bURpY3Rpb25h" + + "cnlFbnRyaWVzAQCKSgAuAESKSgAAABECAAAAAgAAAAAAAAAAAAAAAQH/////AAAAABdgiQoCAAAAAAAY" + + "AAAAVmFsdWVBc0RpY3Rpb25hcnlFbnRyaWVzAQCLSgAuAESLSgAAABEBAAAAAQAAAAAAAAABAf////8A" + + "AAAA"; + #endregion + #endif + #endregion + + #region Public Properties + /// + public PropertyState EnumDictionaryEntries + { + get + { + return m_enumDictionaryEntries; + } + + set + { + if (!Object.ReferenceEquals(m_enumDictionaryEntries, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enumDictionaryEntries = value; + } + } + + /// + public PropertyState ValueAsDictionaryEntries + { + get + { + return m_valueAsDictionaryEntries; + } + + set + { + if (!Object.ReferenceEquals(m_valueAsDictionaryEntries, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_valueAsDictionaryEntries = 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_enumDictionaryEntries != null) + { + children.Add(m_enumDictionaryEntries); + } + + if (m_valueAsDictionaryEntries != null) + { + children.Add(m_valueAsDictionaryEntries); + } + + 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 Opc.Ua.BrowseNames.EnumDictionaryEntries: + { + if (createOrReplace) + { + if (EnumDictionaryEntries == null) + { + if (replacement == null) + { + EnumDictionaryEntries = new PropertyState(this); + } + else + { + EnumDictionaryEntries = (PropertyState)replacement; + } + } + } + + instance = EnumDictionaryEntries; + break; + } + + case Opc.Ua.BrowseNames.ValueAsDictionaryEntries: + { + if (createOrReplace) + { + if (ValueAsDictionaryEntries == null) + { + if (replacement == null) + { + ValueAsDictionaryEntries = new PropertyState(this); + } + else + { + ValueAsDictionaryEntries = (PropertyState)replacement; + } + } + } + + instance = ValueAsDictionaryEntries; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_enumDictionaryEntries; + private PropertyState m_valueAsDictionaryEntries; + #endregion + } + + #region MultiStateDictionaryEntryDiscreteBaseState Class + /// + /// A typed version of the MultiStateDictionaryEntryDiscreteBaseType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class MultiStateDictionaryEntryDiscreteBaseState : MultiStateDictionaryEntryDiscreteBaseState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public MultiStateDictionaryEntryDiscreteBaseState(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 MultiStateDictionaryEntryDiscreteState Class + #if (!OPCUA_EXCLUDE_MultiStateDictionaryEntryDiscreteState) + /// + /// Stores an instance of the MultiStateDictionaryEntryDiscreteType VariableType. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class MultiStateDictionaryEntryDiscreteState : MultiStateDictionaryEntryDiscreteBaseState + { + #region Constructors + /// + /// Initializes the type with its default attribute values. + /// + public MultiStateDictionaryEntryDiscreteState(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(Opc.Ua.VariableTypes.MultiStateDictionaryEntryDiscreteType, Opc.Ua.Namespaces.OpcUa, namespaceUris); + } + + /// + /// Returns the id of the default data type node for the instance. + /// + protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.Number, Opc.Ua.Namespaces.OpcUa, 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); + } + + /// + /// 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 = + "//////////8VYIkCAgAAAAAALQAAAE11bHRpU3RhdGVEaWN0aW9uYXJ5RW50cnlEaXNjcmV0ZVR5cGVJ" + + "bnN0YW5jZQEAjEoBAIxKjEoAAAAa/////wEB/////wQAAAAXYIkKAgAAAAAACgAAAEVudW1WYWx1ZXMB" + + "AI9KAC4ARI9KAAABAKodAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAALAAAAVmFsdWVBc1Rl" + + "eHQBAJBKAC4ARJBKAAAAFf////8BAf////8AAAAAF2CJCgIAAAAAABUAAABFbnVtRGljdGlvbmFyeUVu" + + "dHJpZXMBAJFKAC4ARJFKAAAAEQIAAAACAAAAAAAAAAAAAAABAf////8AAAAAF2CJCgIAAAAAABgAAABW" + + "YWx1ZUFzRGljdGlvbmFyeUVudHJpZXMBAJJKAC4ARJJKAAAAEQEAAAABAAAAAAAAAAEB/////wAAAAA="; + #endregion + #endif + #endregion + + #region Public Properties + #endregion + + #region Overridden Methods + #endregion + + #region Private Fields + #endregion + } + + #region MultiStateDictionaryEntryDiscreteState Class + /// + /// A typed version of the MultiStateDictionaryEntryDiscreteType variable. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public class MultiStateDictionaryEntryDiscreteState : MultiStateDictionaryEntryDiscreteState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public MultiStateDictionaryEntryDiscreteState(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 +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Client.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Client.cs new file mode 100644 index 00000000..7022646c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Client.cs @@ -0,0 +1,5226 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua +{ + /// + /// The client side interface for a UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionClient : ClientBase + { + #region Constructors + /// + /// Intializes the object with a channel and a message context. + /// + public SessionClient(ITransportChannel channel) + : + base(channel) + { + } + #endregion + + #region Public Properties + /// + /// The component contains classes object use to communicate with the server. + /// + public new ISessionChannel InnerChannel + { + get { return (ISessionChannel)base.InnerChannel; } + } + #endregion + + #region Client API + #region CreateSession Methods + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// Invokes the CreateSession service. + /// + public virtual ResponseHeader CreateSession( + RequestHeader requestHeader, + ApplicationDescription clientDescription, + string serverUri, + string endpointUrl, + string sessionName, + byte[] clientNonce, + byte[] clientCertificate, + double requestedSessionTimeout, + uint maxResponseMessageSize, + out NodeId sessionId, + out NodeId authenticationToken, + out double revisedSessionTimeout, + out byte[] serverNonce, + out byte[] serverCertificate, + out EndpointDescriptionCollection serverEndpoints, + out SignedSoftwareCertificateCollection serverSoftwareCertificates, + out SignatureData serverSignature, + out uint maxRequestMessageSize) + { + CreateSessionRequest request = new CreateSessionRequest(); + CreateSessionResponse response = null; + + request.RequestHeader = requestHeader; + request.ClientDescription = clientDescription; + request.ServerUri = serverUri; + request.EndpointUrl = endpointUrl; + request.SessionName = sessionName; + request.ClientNonce = clientNonce; + request.ClientCertificate = clientCertificate; + request.RequestedSessionTimeout = requestedSessionTimeout; + request.MaxResponseMessageSize = maxResponseMessageSize; + + UpdateRequestHeader(request, requestHeader == null, "CreateSession"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CreateSessionResponse)genericResponse; + } + else + { + CreateSessionResponseMessage responseMessage = InnerChannel.CreateSession(new CreateSessionMessage(request)); + + if (responseMessage == null || responseMessage.CreateSessionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CreateSessionResponse; + ValidateResponse(response.ResponseHeader); + } + + sessionId = response.SessionId; + authenticationToken = response.AuthenticationToken; + revisedSessionTimeout = response.RevisedSessionTimeout; + serverNonce = response.ServerNonce; + serverCertificate = response.ServerCertificate; + serverEndpoints = response.ServerEndpoints; + serverSoftwareCertificates = response.ServerSoftwareCertificates; + serverSignature = response.ServerSignature; + maxRequestMessageSize = response.MaxRequestMessageSize; + } + finally + { + RequestCompleted(request, response, "CreateSession"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the CreateSession service. + /// + public IAsyncResult BeginCreateSession( + RequestHeader requestHeader, + ApplicationDescription clientDescription, + string serverUri, + string endpointUrl, + string sessionName, + byte[] clientNonce, + byte[] clientCertificate, + double requestedSessionTimeout, + uint maxResponseMessageSize, + AsyncCallback callback, + object asyncState) + { + CreateSessionRequest request = new CreateSessionRequest(); + + request.RequestHeader = requestHeader; + request.ClientDescription = clientDescription; + request.ServerUri = serverUri; + request.EndpointUrl = endpointUrl; + request.SessionName = sessionName; + request.ClientNonce = clientNonce; + request.ClientCertificate = clientCertificate; + request.RequestedSessionTimeout = requestedSessionTimeout; + request.MaxResponseMessageSize = maxResponseMessageSize; + + UpdateRequestHeader(request, requestHeader == null, "CreateSession"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginCreateSession(new CreateSessionMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the CreateSession service. + /// + public ResponseHeader EndCreateSession( + IAsyncResult result, + out NodeId sessionId, + out NodeId authenticationToken, + out double revisedSessionTimeout, + out byte[] serverNonce, + out byte[] serverCertificate, + out EndpointDescriptionCollection serverEndpoints, + out SignedSoftwareCertificateCollection serverSoftwareCertificates, + out SignatureData serverSignature, + out uint maxRequestMessageSize) + { + CreateSessionResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CreateSessionResponse)genericResponse; + } + else + { + CreateSessionResponseMessage responseMessage = InnerChannel.EndCreateSession(result); + + if (responseMessage == null || responseMessage.CreateSessionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CreateSessionResponse; + ValidateResponse(response.ResponseHeader); + } + + sessionId = response.SessionId; + authenticationToken = response.AuthenticationToken; + revisedSessionTimeout = response.RevisedSessionTimeout; + serverNonce = response.ServerNonce; + serverCertificate = response.ServerCertificate; + serverEndpoints = response.ServerEndpoints; + serverSoftwareCertificates = response.ServerSoftwareCertificates; + serverSignature = response.ServerSignature; + maxRequestMessageSize = response.MaxRequestMessageSize; + } + finally + { + RequestCompleted(null, response, "CreateSession"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region ActivateSession Methods + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// Invokes the ActivateSession service. + /// + public virtual ResponseHeader ActivateSession( + RequestHeader requestHeader, + SignatureData clientSignature, + SignedSoftwareCertificateCollection clientSoftwareCertificates, + StringCollection localeIds, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + out byte[] serverNonce, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + ActivateSessionRequest request = new ActivateSessionRequest(); + ActivateSessionResponse response = null; + + request.RequestHeader = requestHeader; + request.ClientSignature = clientSignature; + request.ClientSoftwareCertificates = clientSoftwareCertificates; + request.LocaleIds = localeIds; + request.UserIdentityToken = userIdentityToken; + request.UserTokenSignature = userTokenSignature; + + UpdateRequestHeader(request, requestHeader == null, "ActivateSession"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ActivateSessionResponse)genericResponse; + } + else + { + ActivateSessionResponseMessage responseMessage = InnerChannel.ActivateSession(new ActivateSessionMessage(request)); + + if (responseMessage == null || responseMessage.ActivateSessionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ActivateSessionResponse; + ValidateResponse(response.ResponseHeader); + } + + serverNonce = response.ServerNonce; + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "ActivateSession"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the ActivateSession service. + /// + public IAsyncResult BeginActivateSession( + RequestHeader requestHeader, + SignatureData clientSignature, + SignedSoftwareCertificateCollection clientSoftwareCertificates, + StringCollection localeIds, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + AsyncCallback callback, + object asyncState) + { + ActivateSessionRequest request = new ActivateSessionRequest(); + + request.RequestHeader = requestHeader; + request.ClientSignature = clientSignature; + request.ClientSoftwareCertificates = clientSoftwareCertificates; + request.LocaleIds = localeIds; + request.UserIdentityToken = userIdentityToken; + request.UserTokenSignature = userTokenSignature; + + UpdateRequestHeader(request, requestHeader == null, "ActivateSession"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginActivateSession(new ActivateSessionMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the ActivateSession service. + /// + public ResponseHeader EndActivateSession( + IAsyncResult result, + out byte[] serverNonce, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + ActivateSessionResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ActivateSessionResponse)genericResponse; + } + else + { + ActivateSessionResponseMessage responseMessage = InnerChannel.EndActivateSession(result); + + if (responseMessage == null || responseMessage.ActivateSessionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ActivateSessionResponse; + ValidateResponse(response.ResponseHeader); + } + + serverNonce = response.ServerNonce; + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "ActivateSession"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region CloseSession Methods + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// Invokes the CloseSession service. + /// + public virtual ResponseHeader CloseSession( + RequestHeader requestHeader, + bool deleteSubscriptions) + { + CloseSessionRequest request = new CloseSessionRequest(); + CloseSessionResponse response = null; + + request.RequestHeader = requestHeader; + request.DeleteSubscriptions = deleteSubscriptions; + + UpdateRequestHeader(request, requestHeader == null, "CloseSession"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CloseSessionResponse)genericResponse; + } + else + { + CloseSessionResponseMessage responseMessage = InnerChannel.CloseSession(new CloseSessionMessage(request)); + + if (responseMessage == null || responseMessage.CloseSessionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CloseSessionResponse; + ValidateResponse(response.ResponseHeader); + } + + } + finally + { + RequestCompleted(request, response, "CloseSession"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the CloseSession service. + /// + public IAsyncResult BeginCloseSession( + RequestHeader requestHeader, + bool deleteSubscriptions, + AsyncCallback callback, + object asyncState) + { + CloseSessionRequest request = new CloseSessionRequest(); + + request.RequestHeader = requestHeader; + request.DeleteSubscriptions = deleteSubscriptions; + + UpdateRequestHeader(request, requestHeader == null, "CloseSession"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginCloseSession(new CloseSessionMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the CloseSession service. + /// + public ResponseHeader EndCloseSession( + IAsyncResult result) + { + CloseSessionResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CloseSessionResponse)genericResponse; + } + else + { + CloseSessionResponseMessage responseMessage = InnerChannel.EndCloseSession(result); + + if (responseMessage == null || responseMessage.CloseSessionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CloseSessionResponse; + ValidateResponse(response.ResponseHeader); + } + + } + finally + { + RequestCompleted(null, response, "CloseSession"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Cancel Methods + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// Invokes the Cancel service. + /// + public virtual ResponseHeader Cancel( + RequestHeader requestHeader, + uint requestHandle, + out uint cancelCount) + { + CancelRequest request = new CancelRequest(); + CancelResponse response = null; + + request.RequestHeader = requestHeader; + request.RequestHandle = requestHandle; + + UpdateRequestHeader(request, requestHeader == null, "Cancel"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CancelResponse)genericResponse; + } + else + { + CancelResponseMessage responseMessage = InnerChannel.Cancel(new CancelMessage(request)); + + if (responseMessage == null || responseMessage.CancelResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CancelResponse; + ValidateResponse(response.ResponseHeader); + } + + cancelCount = response.CancelCount; + } + finally + { + RequestCompleted(request, response, "Cancel"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Cancel service. + /// + public IAsyncResult BeginCancel( + RequestHeader requestHeader, + uint requestHandle, + AsyncCallback callback, + object asyncState) + { + CancelRequest request = new CancelRequest(); + + request.RequestHeader = requestHeader; + request.RequestHandle = requestHandle; + + UpdateRequestHeader(request, requestHeader == null, "Cancel"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginCancel(new CancelMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Cancel service. + /// + public ResponseHeader EndCancel( + IAsyncResult result, + out uint cancelCount) + { + CancelResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CancelResponse)genericResponse; + } + else + { + CancelResponseMessage responseMessage = InnerChannel.EndCancel(result); + + if (responseMessage == null || responseMessage.CancelResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CancelResponse; + ValidateResponse(response.ResponseHeader); + } + + cancelCount = response.CancelCount; + } + finally + { + RequestCompleted(null, response, "Cancel"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region AddNodes Methods + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// Invokes the AddNodes service. + /// + public virtual ResponseHeader AddNodes( + RequestHeader requestHeader, + AddNodesItemCollection nodesToAdd, + out AddNodesResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + AddNodesRequest request = new AddNodesRequest(); + AddNodesResponse response = null; + + request.RequestHeader = requestHeader; + request.NodesToAdd = nodesToAdd; + + UpdateRequestHeader(request, requestHeader == null, "AddNodes"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (AddNodesResponse)genericResponse; + } + else + { + AddNodesResponseMessage responseMessage = InnerChannel.AddNodes(new AddNodesMessage(request)); + + if (responseMessage == null || responseMessage.AddNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.AddNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "AddNodes"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the AddNodes service. + /// + public IAsyncResult BeginAddNodes( + RequestHeader requestHeader, + AddNodesItemCollection nodesToAdd, + AsyncCallback callback, + object asyncState) + { + AddNodesRequest request = new AddNodesRequest(); + + request.RequestHeader = requestHeader; + request.NodesToAdd = nodesToAdd; + + UpdateRequestHeader(request, requestHeader == null, "AddNodes"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginAddNodes(new AddNodesMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the AddNodes service. + /// + public ResponseHeader EndAddNodes( + IAsyncResult result, + out AddNodesResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + AddNodesResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (AddNodesResponse)genericResponse; + } + else + { + AddNodesResponseMessage responseMessage = InnerChannel.EndAddNodes(result); + + if (responseMessage == null || responseMessage.AddNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.AddNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "AddNodes"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region AddReferences Methods + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// Invokes the AddReferences service. + /// + public virtual ResponseHeader AddReferences( + RequestHeader requestHeader, + AddReferencesItemCollection referencesToAdd, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + AddReferencesRequest request = new AddReferencesRequest(); + AddReferencesResponse response = null; + + request.RequestHeader = requestHeader; + request.ReferencesToAdd = referencesToAdd; + + UpdateRequestHeader(request, requestHeader == null, "AddReferences"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (AddReferencesResponse)genericResponse; + } + else + { + AddReferencesResponseMessage responseMessage = InnerChannel.AddReferences(new AddReferencesMessage(request)); + + if (responseMessage == null || responseMessage.AddReferencesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.AddReferencesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "AddReferences"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the AddReferences service. + /// + public IAsyncResult BeginAddReferences( + RequestHeader requestHeader, + AddReferencesItemCollection referencesToAdd, + AsyncCallback callback, + object asyncState) + { + AddReferencesRequest request = new AddReferencesRequest(); + + request.RequestHeader = requestHeader; + request.ReferencesToAdd = referencesToAdd; + + UpdateRequestHeader(request, requestHeader == null, "AddReferences"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginAddReferences(new AddReferencesMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the AddReferences service. + /// + public ResponseHeader EndAddReferences( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + AddReferencesResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (AddReferencesResponse)genericResponse; + } + else + { + AddReferencesResponseMessage responseMessage = InnerChannel.EndAddReferences(result); + + if (responseMessage == null || responseMessage.AddReferencesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.AddReferencesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "AddReferences"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region DeleteNodes Methods + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// Invokes the DeleteNodes service. + /// + public virtual ResponseHeader DeleteNodes( + RequestHeader requestHeader, + DeleteNodesItemCollection nodesToDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteNodesRequest request = new DeleteNodesRequest(); + DeleteNodesResponse response = null; + + request.RequestHeader = requestHeader; + request.NodesToDelete = nodesToDelete; + + UpdateRequestHeader(request, requestHeader == null, "DeleteNodes"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteNodesResponse)genericResponse; + } + else + { + DeleteNodesResponseMessage responseMessage = InnerChannel.DeleteNodes(new DeleteNodesMessage(request)); + + if (responseMessage == null || responseMessage.DeleteNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "DeleteNodes"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the DeleteNodes service. + /// + public IAsyncResult BeginDeleteNodes( + RequestHeader requestHeader, + DeleteNodesItemCollection nodesToDelete, + AsyncCallback callback, + object asyncState) + { + DeleteNodesRequest request = new DeleteNodesRequest(); + + request.RequestHeader = requestHeader; + request.NodesToDelete = nodesToDelete; + + UpdateRequestHeader(request, requestHeader == null, "DeleteNodes"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginDeleteNodes(new DeleteNodesMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the DeleteNodes service. + /// + public ResponseHeader EndDeleteNodes( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteNodesResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteNodesResponse)genericResponse; + } + else + { + DeleteNodesResponseMessage responseMessage = InnerChannel.EndDeleteNodes(result); + + if (responseMessage == null || responseMessage.DeleteNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "DeleteNodes"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region DeleteReferences Methods + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// Invokes the DeleteReferences service. + /// + public virtual ResponseHeader DeleteReferences( + RequestHeader requestHeader, + DeleteReferencesItemCollection referencesToDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteReferencesRequest request = new DeleteReferencesRequest(); + DeleteReferencesResponse response = null; + + request.RequestHeader = requestHeader; + request.ReferencesToDelete = referencesToDelete; + + UpdateRequestHeader(request, requestHeader == null, "DeleteReferences"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteReferencesResponse)genericResponse; + } + else + { + DeleteReferencesResponseMessage responseMessage = InnerChannel.DeleteReferences(new DeleteReferencesMessage(request)); + + if (responseMessage == null || responseMessage.DeleteReferencesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteReferencesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "DeleteReferences"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the DeleteReferences service. + /// + public IAsyncResult BeginDeleteReferences( + RequestHeader requestHeader, + DeleteReferencesItemCollection referencesToDelete, + AsyncCallback callback, + object asyncState) + { + DeleteReferencesRequest request = new DeleteReferencesRequest(); + + request.RequestHeader = requestHeader; + request.ReferencesToDelete = referencesToDelete; + + UpdateRequestHeader(request, requestHeader == null, "DeleteReferences"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginDeleteReferences(new DeleteReferencesMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the DeleteReferences service. + /// + public ResponseHeader EndDeleteReferences( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteReferencesResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteReferencesResponse)genericResponse; + } + else + { + DeleteReferencesResponseMessage responseMessage = InnerChannel.EndDeleteReferences(result); + + if (responseMessage == null || responseMessage.DeleteReferencesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteReferencesResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "DeleteReferences"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Browse Methods + #if (!OPCUA_EXCLUDE_Browse) + /// + /// Invokes the Browse service. + /// + public virtual ResponseHeader Browse( + RequestHeader requestHeader, + ViewDescription view, + uint requestedMaxReferencesPerNode, + BrowseDescriptionCollection nodesToBrowse, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + BrowseRequest request = new BrowseRequest(); + BrowseResponse response = null; + + request.RequestHeader = requestHeader; + request.View = view; + request.RequestedMaxReferencesPerNode = requestedMaxReferencesPerNode; + request.NodesToBrowse = nodesToBrowse; + + UpdateRequestHeader(request, requestHeader == null, "Browse"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (BrowseResponse)genericResponse; + } + else + { + BrowseResponseMessage responseMessage = InnerChannel.Browse(new BrowseMessage(request)); + + if (responseMessage == null || responseMessage.BrowseResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.BrowseResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "Browse"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Browse service. + /// + public IAsyncResult BeginBrowse( + RequestHeader requestHeader, + ViewDescription view, + uint requestedMaxReferencesPerNode, + BrowseDescriptionCollection nodesToBrowse, + AsyncCallback callback, + object asyncState) + { + BrowseRequest request = new BrowseRequest(); + + request.RequestHeader = requestHeader; + request.View = view; + request.RequestedMaxReferencesPerNode = requestedMaxReferencesPerNode; + request.NodesToBrowse = nodesToBrowse; + + UpdateRequestHeader(request, requestHeader == null, "Browse"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginBrowse(new BrowseMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Browse service. + /// + public ResponseHeader EndBrowse( + IAsyncResult result, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + BrowseResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (BrowseResponse)genericResponse; + } + else + { + BrowseResponseMessage responseMessage = InnerChannel.EndBrowse(result); + + if (responseMessage == null || responseMessage.BrowseResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.BrowseResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "Browse"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region BrowseNext Methods + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// Invokes the BrowseNext service. + /// + public virtual ResponseHeader BrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoints, + ByteStringCollection continuationPoints, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + BrowseNextRequest request = new BrowseNextRequest(); + BrowseNextResponse response = null; + + request.RequestHeader = requestHeader; + request.ReleaseContinuationPoints = releaseContinuationPoints; + request.ContinuationPoints = continuationPoints; + + UpdateRequestHeader(request, requestHeader == null, "BrowseNext"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (BrowseNextResponse)genericResponse; + } + else + { + BrowseNextResponseMessage responseMessage = InnerChannel.BrowseNext(new BrowseNextMessage(request)); + + if (responseMessage == null || responseMessage.BrowseNextResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.BrowseNextResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "BrowseNext"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the BrowseNext service. + /// + public IAsyncResult BeginBrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoints, + ByteStringCollection continuationPoints, + AsyncCallback callback, + object asyncState) + { + BrowseNextRequest request = new BrowseNextRequest(); + + request.RequestHeader = requestHeader; + request.ReleaseContinuationPoints = releaseContinuationPoints; + request.ContinuationPoints = continuationPoints; + + UpdateRequestHeader(request, requestHeader == null, "BrowseNext"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginBrowseNext(new BrowseNextMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the BrowseNext service. + /// + public ResponseHeader EndBrowseNext( + IAsyncResult result, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + BrowseNextResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (BrowseNextResponse)genericResponse; + } + else + { + BrowseNextResponseMessage responseMessage = InnerChannel.EndBrowseNext(result); + + if (responseMessage == null || responseMessage.BrowseNextResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.BrowseNextResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "BrowseNext"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region TranslateBrowsePathsToNodeIds Methods + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// Invokes the TranslateBrowsePathsToNodeIds service. + /// + public virtual ResponseHeader TranslateBrowsePathsToNodeIds( + RequestHeader requestHeader, + BrowsePathCollection browsePaths, + out BrowsePathResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + TranslateBrowsePathsToNodeIdsRequest request = new TranslateBrowsePathsToNodeIdsRequest(); + TranslateBrowsePathsToNodeIdsResponse response = null; + + request.RequestHeader = requestHeader; + request.BrowsePaths = browsePaths; + + UpdateRequestHeader(request, requestHeader == null, "TranslateBrowsePathsToNodeIds"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (TranslateBrowsePathsToNodeIdsResponse)genericResponse; + } + else + { + TranslateBrowsePathsToNodeIdsResponseMessage responseMessage = InnerChannel.TranslateBrowsePathsToNodeIds(new TranslateBrowsePathsToNodeIdsMessage(request)); + + if (responseMessage == null || responseMessage.TranslateBrowsePathsToNodeIdsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.TranslateBrowsePathsToNodeIdsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "TranslateBrowsePathsToNodeIds"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the TranslateBrowsePathsToNodeIds service. + /// + public IAsyncResult BeginTranslateBrowsePathsToNodeIds( + RequestHeader requestHeader, + BrowsePathCollection browsePaths, + AsyncCallback callback, + object asyncState) + { + TranslateBrowsePathsToNodeIdsRequest request = new TranslateBrowsePathsToNodeIdsRequest(); + + request.RequestHeader = requestHeader; + request.BrowsePaths = browsePaths; + + UpdateRequestHeader(request, requestHeader == null, "TranslateBrowsePathsToNodeIds"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginTranslateBrowsePathsToNodeIds(new TranslateBrowsePathsToNodeIdsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the TranslateBrowsePathsToNodeIds service. + /// + public ResponseHeader EndTranslateBrowsePathsToNodeIds( + IAsyncResult result, + out BrowsePathResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + TranslateBrowsePathsToNodeIdsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (TranslateBrowsePathsToNodeIdsResponse)genericResponse; + } + else + { + TranslateBrowsePathsToNodeIdsResponseMessage responseMessage = InnerChannel.EndTranslateBrowsePathsToNodeIds(result); + + if (responseMessage == null || responseMessage.TranslateBrowsePathsToNodeIdsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.TranslateBrowsePathsToNodeIdsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "TranslateBrowsePathsToNodeIds"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region RegisterNodes Methods + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// Invokes the RegisterNodes service. + /// + public virtual ResponseHeader RegisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToRegister, + out NodeIdCollection registeredNodeIds) + { + RegisterNodesRequest request = new RegisterNodesRequest(); + RegisterNodesResponse response = null; + + request.RequestHeader = requestHeader; + request.NodesToRegister = nodesToRegister; + + UpdateRequestHeader(request, requestHeader == null, "RegisterNodes"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RegisterNodesResponse)genericResponse; + } + else + { + RegisterNodesResponseMessage responseMessage = InnerChannel.RegisterNodes(new RegisterNodesMessage(request)); + + if (responseMessage == null || responseMessage.RegisterNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RegisterNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + registeredNodeIds = response.RegisteredNodeIds; + } + finally + { + RequestCompleted(request, response, "RegisterNodes"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the RegisterNodes service. + /// + public IAsyncResult BeginRegisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToRegister, + AsyncCallback callback, + object asyncState) + { + RegisterNodesRequest request = new RegisterNodesRequest(); + + request.RequestHeader = requestHeader; + request.NodesToRegister = nodesToRegister; + + UpdateRequestHeader(request, requestHeader == null, "RegisterNodes"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginRegisterNodes(new RegisterNodesMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the RegisterNodes service. + /// + public ResponseHeader EndRegisterNodes( + IAsyncResult result, + out NodeIdCollection registeredNodeIds) + { + RegisterNodesResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RegisterNodesResponse)genericResponse; + } + else + { + RegisterNodesResponseMessage responseMessage = InnerChannel.EndRegisterNodes(result); + + if (responseMessage == null || responseMessage.RegisterNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RegisterNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + registeredNodeIds = response.RegisteredNodeIds; + } + finally + { + RequestCompleted(null, response, "RegisterNodes"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region UnregisterNodes Methods + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// Invokes the UnregisterNodes service. + /// + public virtual ResponseHeader UnregisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToUnregister) + { + UnregisterNodesRequest request = new UnregisterNodesRequest(); + UnregisterNodesResponse response = null; + + request.RequestHeader = requestHeader; + request.NodesToUnregister = nodesToUnregister; + + UpdateRequestHeader(request, requestHeader == null, "UnregisterNodes"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (UnregisterNodesResponse)genericResponse; + } + else + { + UnregisterNodesResponseMessage responseMessage = InnerChannel.UnregisterNodes(new UnregisterNodesMessage(request)); + + if (responseMessage == null || responseMessage.UnregisterNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.UnregisterNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + } + finally + { + RequestCompleted(request, response, "UnregisterNodes"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the UnregisterNodes service. + /// + public IAsyncResult BeginUnregisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToUnregister, + AsyncCallback callback, + object asyncState) + { + UnregisterNodesRequest request = new UnregisterNodesRequest(); + + request.RequestHeader = requestHeader; + request.NodesToUnregister = nodesToUnregister; + + UpdateRequestHeader(request, requestHeader == null, "UnregisterNodes"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginUnregisterNodes(new UnregisterNodesMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the UnregisterNodes service. + /// + public ResponseHeader EndUnregisterNodes( + IAsyncResult result) + { + UnregisterNodesResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (UnregisterNodesResponse)genericResponse; + } + else + { + UnregisterNodesResponseMessage responseMessage = InnerChannel.EndUnregisterNodes(result); + + if (responseMessage == null || responseMessage.UnregisterNodesResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.UnregisterNodesResponse; + ValidateResponse(response.ResponseHeader); + } + + } + finally + { + RequestCompleted(null, response, "UnregisterNodes"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region QueryFirst Methods + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// Invokes the QueryFirst service. + /// + public virtual ResponseHeader QueryFirst( + RequestHeader requestHeader, + ViewDescription view, + NodeTypeDescriptionCollection nodeTypes, + ContentFilter filter, + uint maxDataSetsToReturn, + uint maxReferencesToReturn, + out QueryDataSetCollection queryDataSets, + out byte[] continuationPoint, + out ParsingResultCollection parsingResults, + out DiagnosticInfoCollection diagnosticInfos, + out ContentFilterResult filterResult) + { + QueryFirstRequest request = new QueryFirstRequest(); + QueryFirstResponse response = null; + + request.RequestHeader = requestHeader; + request.View = view; + request.NodeTypes = nodeTypes; + request.Filter = filter; + request.MaxDataSetsToReturn = maxDataSetsToReturn; + request.MaxReferencesToReturn = maxReferencesToReturn; + + UpdateRequestHeader(request, requestHeader == null, "QueryFirst"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (QueryFirstResponse)genericResponse; + } + else + { + QueryFirstResponseMessage responseMessage = InnerChannel.QueryFirst(new QueryFirstMessage(request)); + + if (responseMessage == null || responseMessage.QueryFirstResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.QueryFirstResponse; + ValidateResponse(response.ResponseHeader); + } + + queryDataSets = response.QueryDataSets; + continuationPoint = response.ContinuationPoint; + parsingResults = response.ParsingResults; + diagnosticInfos = response.DiagnosticInfos; + filterResult = response.FilterResult; + } + finally + { + RequestCompleted(request, response, "QueryFirst"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the QueryFirst service. + /// + public IAsyncResult BeginQueryFirst( + RequestHeader requestHeader, + ViewDescription view, + NodeTypeDescriptionCollection nodeTypes, + ContentFilter filter, + uint maxDataSetsToReturn, + uint maxReferencesToReturn, + AsyncCallback callback, + object asyncState) + { + QueryFirstRequest request = new QueryFirstRequest(); + + request.RequestHeader = requestHeader; + request.View = view; + request.NodeTypes = nodeTypes; + request.Filter = filter; + request.MaxDataSetsToReturn = maxDataSetsToReturn; + request.MaxReferencesToReturn = maxReferencesToReturn; + + UpdateRequestHeader(request, requestHeader == null, "QueryFirst"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginQueryFirst(new QueryFirstMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the QueryFirst service. + /// + public ResponseHeader EndQueryFirst( + IAsyncResult result, + out QueryDataSetCollection queryDataSets, + out byte[] continuationPoint, + out ParsingResultCollection parsingResults, + out DiagnosticInfoCollection diagnosticInfos, + out ContentFilterResult filterResult) + { + QueryFirstResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (QueryFirstResponse)genericResponse; + } + else + { + QueryFirstResponseMessage responseMessage = InnerChannel.EndQueryFirst(result); + + if (responseMessage == null || responseMessage.QueryFirstResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.QueryFirstResponse; + ValidateResponse(response.ResponseHeader); + } + + queryDataSets = response.QueryDataSets; + continuationPoint = response.ContinuationPoint; + parsingResults = response.ParsingResults; + diagnosticInfos = response.DiagnosticInfos; + filterResult = response.FilterResult; + } + finally + { + RequestCompleted(null, response, "QueryFirst"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region QueryNext Methods + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// Invokes the QueryNext service. + /// + public virtual ResponseHeader QueryNext( + RequestHeader requestHeader, + bool releaseContinuationPoint, + byte[] continuationPoint, + out QueryDataSetCollection queryDataSets, + out byte[] revisedContinuationPoint) + { + QueryNextRequest request = new QueryNextRequest(); + QueryNextResponse response = null; + + request.RequestHeader = requestHeader; + request.ReleaseContinuationPoint = releaseContinuationPoint; + request.ContinuationPoint = continuationPoint; + + UpdateRequestHeader(request, requestHeader == null, "QueryNext"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (QueryNextResponse)genericResponse; + } + else + { + QueryNextResponseMessage responseMessage = InnerChannel.QueryNext(new QueryNextMessage(request)); + + if (responseMessage == null || responseMessage.QueryNextResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.QueryNextResponse; + ValidateResponse(response.ResponseHeader); + } + + queryDataSets = response.QueryDataSets; + revisedContinuationPoint = response.RevisedContinuationPoint; + } + finally + { + RequestCompleted(request, response, "QueryNext"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the QueryNext service. + /// + public IAsyncResult BeginQueryNext( + RequestHeader requestHeader, + bool releaseContinuationPoint, + byte[] continuationPoint, + AsyncCallback callback, + object asyncState) + { + QueryNextRequest request = new QueryNextRequest(); + + request.RequestHeader = requestHeader; + request.ReleaseContinuationPoint = releaseContinuationPoint; + request.ContinuationPoint = continuationPoint; + + UpdateRequestHeader(request, requestHeader == null, "QueryNext"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginQueryNext(new QueryNextMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the QueryNext service. + /// + public ResponseHeader EndQueryNext( + IAsyncResult result, + out QueryDataSetCollection queryDataSets, + out byte[] revisedContinuationPoint) + { + QueryNextResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (QueryNextResponse)genericResponse; + } + else + { + QueryNextResponseMessage responseMessage = InnerChannel.EndQueryNext(result); + + if (responseMessage == null || responseMessage.QueryNextResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.QueryNextResponse; + ValidateResponse(response.ResponseHeader); + } + + queryDataSets = response.QueryDataSets; + revisedContinuationPoint = response.RevisedContinuationPoint; + } + finally + { + RequestCompleted(null, response, "QueryNext"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Read Methods + #if (!OPCUA_EXCLUDE_Read) + /// + /// Invokes the Read service. + /// + public virtual ResponseHeader Read( + RequestHeader requestHeader, + double maxAge, + TimestampsToReturn timestampsToReturn, + ReadValueIdCollection nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + ReadRequest request = new ReadRequest(); + ReadResponse response = null; + + request.RequestHeader = requestHeader; + request.MaxAge = maxAge; + request.TimestampsToReturn = timestampsToReturn; + request.NodesToRead = nodesToRead; + + UpdateRequestHeader(request, requestHeader == null, "Read"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ReadResponse)genericResponse; + } + else + { + ReadResponseMessage responseMessage = InnerChannel.Read(new ReadMessage(request)); + + if (responseMessage == null || responseMessage.ReadResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ReadResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "Read"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Read service. + /// + public IAsyncResult BeginRead( + RequestHeader requestHeader, + double maxAge, + TimestampsToReturn timestampsToReturn, + ReadValueIdCollection nodesToRead, + AsyncCallback callback, + object asyncState) + { + ReadRequest request = new ReadRequest(); + + request.RequestHeader = requestHeader; + request.MaxAge = maxAge; + request.TimestampsToReturn = timestampsToReturn; + request.NodesToRead = nodesToRead; + + UpdateRequestHeader(request, requestHeader == null, "Read"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginRead(new ReadMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Read service. + /// + public ResponseHeader EndRead( + IAsyncResult result, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + ReadResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ReadResponse)genericResponse; + } + else + { + ReadResponseMessage responseMessage = InnerChannel.EndRead(result); + + if (responseMessage == null || responseMessage.ReadResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ReadResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "Read"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region HistoryRead Methods + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// Invokes the HistoryRead service. + /// + public virtual ResponseHeader HistoryRead( + RequestHeader requestHeader, + ExtensionObject historyReadDetails, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueIdCollection nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + HistoryReadRequest request = new HistoryReadRequest(); + HistoryReadResponse response = null; + + request.RequestHeader = requestHeader; + request.HistoryReadDetails = historyReadDetails; + request.TimestampsToReturn = timestampsToReturn; + request.ReleaseContinuationPoints = releaseContinuationPoints; + request.NodesToRead = nodesToRead; + + UpdateRequestHeader(request, requestHeader == null, "HistoryRead"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (HistoryReadResponse)genericResponse; + } + else + { + HistoryReadResponseMessage responseMessage = InnerChannel.HistoryRead(new HistoryReadMessage(request)); + + if (responseMessage == null || responseMessage.HistoryReadResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.HistoryReadResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "HistoryRead"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the HistoryRead service. + /// + public IAsyncResult BeginHistoryRead( + RequestHeader requestHeader, + ExtensionObject historyReadDetails, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueIdCollection nodesToRead, + AsyncCallback callback, + object asyncState) + { + HistoryReadRequest request = new HistoryReadRequest(); + + request.RequestHeader = requestHeader; + request.HistoryReadDetails = historyReadDetails; + request.TimestampsToReturn = timestampsToReturn; + request.ReleaseContinuationPoints = releaseContinuationPoints; + request.NodesToRead = nodesToRead; + + UpdateRequestHeader(request, requestHeader == null, "HistoryRead"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginHistoryRead(new HistoryReadMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the HistoryRead service. + /// + public ResponseHeader EndHistoryRead( + IAsyncResult result, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + HistoryReadResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (HistoryReadResponse)genericResponse; + } + else + { + HistoryReadResponseMessage responseMessage = InnerChannel.EndHistoryRead(result); + + if (responseMessage == null || responseMessage.HistoryReadResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.HistoryReadResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "HistoryRead"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Write Methods + #if (!OPCUA_EXCLUDE_Write) + /// + /// Invokes the Write service. + /// + public virtual ResponseHeader Write( + RequestHeader requestHeader, + WriteValueCollection nodesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + WriteRequest request = new WriteRequest(); + WriteResponse response = null; + + request.RequestHeader = requestHeader; + request.NodesToWrite = nodesToWrite; + + UpdateRequestHeader(request, requestHeader == null, "Write"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (WriteResponse)genericResponse; + } + else + { + WriteResponseMessage responseMessage = InnerChannel.Write(new WriteMessage(request)); + + if (responseMessage == null || responseMessage.WriteResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.WriteResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "Write"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Write service. + /// + public IAsyncResult BeginWrite( + RequestHeader requestHeader, + WriteValueCollection nodesToWrite, + AsyncCallback callback, + object asyncState) + { + WriteRequest request = new WriteRequest(); + + request.RequestHeader = requestHeader; + request.NodesToWrite = nodesToWrite; + + UpdateRequestHeader(request, requestHeader == null, "Write"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginWrite(new WriteMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Write service. + /// + public ResponseHeader EndWrite( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + WriteResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (WriteResponse)genericResponse; + } + else + { + WriteResponseMessage responseMessage = InnerChannel.EndWrite(result); + + if (responseMessage == null || responseMessage.WriteResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.WriteResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "Write"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region HistoryUpdate Methods + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// Invokes the HistoryUpdate service. + /// + public virtual ResponseHeader HistoryUpdate( + RequestHeader requestHeader, + ExtensionObjectCollection historyUpdateDetails, + out HistoryUpdateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + HistoryUpdateRequest request = new HistoryUpdateRequest(); + HistoryUpdateResponse response = null; + + request.RequestHeader = requestHeader; + request.HistoryUpdateDetails = historyUpdateDetails; + + UpdateRequestHeader(request, requestHeader == null, "HistoryUpdate"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (HistoryUpdateResponse)genericResponse; + } + else + { + HistoryUpdateResponseMessage responseMessage = InnerChannel.HistoryUpdate(new HistoryUpdateMessage(request)); + + if (responseMessage == null || responseMessage.HistoryUpdateResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.HistoryUpdateResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "HistoryUpdate"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the HistoryUpdate service. + /// + public IAsyncResult BeginHistoryUpdate( + RequestHeader requestHeader, + ExtensionObjectCollection historyUpdateDetails, + AsyncCallback callback, + object asyncState) + { + HistoryUpdateRequest request = new HistoryUpdateRequest(); + + request.RequestHeader = requestHeader; + request.HistoryUpdateDetails = historyUpdateDetails; + + UpdateRequestHeader(request, requestHeader == null, "HistoryUpdate"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginHistoryUpdate(new HistoryUpdateMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the HistoryUpdate service. + /// + public ResponseHeader EndHistoryUpdate( + IAsyncResult result, + out HistoryUpdateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + HistoryUpdateResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (HistoryUpdateResponse)genericResponse; + } + else + { + HistoryUpdateResponseMessage responseMessage = InnerChannel.EndHistoryUpdate(result); + + if (responseMessage == null || responseMessage.HistoryUpdateResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.HistoryUpdateResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "HistoryUpdate"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Call Methods + #if (!OPCUA_EXCLUDE_Call) + /// + /// Invokes the Call service. + /// + public virtual ResponseHeader Call( + RequestHeader requestHeader, + CallMethodRequestCollection methodsToCall, + out CallMethodResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + CallRequest request = new CallRequest(); + CallResponse response = null; + + request.RequestHeader = requestHeader; + request.MethodsToCall = methodsToCall; + + UpdateRequestHeader(request, requestHeader == null, "Call"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CallResponse)genericResponse; + } + else + { + CallResponseMessage responseMessage = InnerChannel.Call(new CallMessage(request)); + + if (responseMessage == null || responseMessage.CallResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CallResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "Call"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Call service. + /// + public IAsyncResult BeginCall( + RequestHeader requestHeader, + CallMethodRequestCollection methodsToCall, + AsyncCallback callback, + object asyncState) + { + CallRequest request = new CallRequest(); + + request.RequestHeader = requestHeader; + request.MethodsToCall = methodsToCall; + + UpdateRequestHeader(request, requestHeader == null, "Call"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginCall(new CallMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Call service. + /// + public ResponseHeader EndCall( + IAsyncResult result, + out CallMethodResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + CallResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CallResponse)genericResponse; + } + else + { + CallResponseMessage responseMessage = InnerChannel.EndCall(result); + + if (responseMessage == null || responseMessage.CallResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CallResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "Call"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region CreateMonitoredItems Methods + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// Invokes the CreateMonitoredItems service. + /// + public virtual ResponseHeader CreateMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + CreateMonitoredItemsRequest request = new CreateMonitoredItemsRequest(); + CreateMonitoredItemsResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.TimestampsToReturn = timestampsToReturn; + request.ItemsToCreate = itemsToCreate; + + UpdateRequestHeader(request, requestHeader == null, "CreateMonitoredItems"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CreateMonitoredItemsResponse)genericResponse; + } + else + { + CreateMonitoredItemsResponseMessage responseMessage = InnerChannel.CreateMonitoredItems(new CreateMonitoredItemsMessage(request)); + + if (responseMessage == null || responseMessage.CreateMonitoredItemsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CreateMonitoredItemsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "CreateMonitoredItems"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the CreateMonitoredItems service. + /// + public IAsyncResult BeginCreateMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + AsyncCallback callback, + object asyncState) + { + CreateMonitoredItemsRequest request = new CreateMonitoredItemsRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.TimestampsToReturn = timestampsToReturn; + request.ItemsToCreate = itemsToCreate; + + UpdateRequestHeader(request, requestHeader == null, "CreateMonitoredItems"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginCreateMonitoredItems(new CreateMonitoredItemsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the CreateMonitoredItems service. + /// + public ResponseHeader EndCreateMonitoredItems( + IAsyncResult result, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + CreateMonitoredItemsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CreateMonitoredItemsResponse)genericResponse; + } + else + { + CreateMonitoredItemsResponseMessage responseMessage = InnerChannel.EndCreateMonitoredItems(result); + + if (responseMessage == null || responseMessage.CreateMonitoredItemsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CreateMonitoredItemsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "CreateMonitoredItems"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region ModifyMonitoredItems Methods + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// Invokes the ModifyMonitoredItems service. + /// + public virtual ResponseHeader ModifyMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + ModifyMonitoredItemsRequest request = new ModifyMonitoredItemsRequest(); + ModifyMonitoredItemsResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.TimestampsToReturn = timestampsToReturn; + request.ItemsToModify = itemsToModify; + + UpdateRequestHeader(request, requestHeader == null, "ModifyMonitoredItems"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ModifyMonitoredItemsResponse)genericResponse; + } + else + { + ModifyMonitoredItemsResponseMessage responseMessage = InnerChannel.ModifyMonitoredItems(new ModifyMonitoredItemsMessage(request)); + + if (responseMessage == null || responseMessage.ModifyMonitoredItemsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ModifyMonitoredItemsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "ModifyMonitoredItems"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the ModifyMonitoredItems service. + /// + public IAsyncResult BeginModifyMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + AsyncCallback callback, + object asyncState) + { + ModifyMonitoredItemsRequest request = new ModifyMonitoredItemsRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.TimestampsToReturn = timestampsToReturn; + request.ItemsToModify = itemsToModify; + + UpdateRequestHeader(request, requestHeader == null, "ModifyMonitoredItems"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginModifyMonitoredItems(new ModifyMonitoredItemsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the ModifyMonitoredItems service. + /// + public ResponseHeader EndModifyMonitoredItems( + IAsyncResult result, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + ModifyMonitoredItemsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ModifyMonitoredItemsResponse)genericResponse; + } + else + { + ModifyMonitoredItemsResponseMessage responseMessage = InnerChannel.EndModifyMonitoredItems(result); + + if (responseMessage == null || responseMessage.ModifyMonitoredItemsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ModifyMonitoredItemsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "ModifyMonitoredItems"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region SetMonitoringMode Methods + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// Invokes the SetMonitoringMode service. + /// + public virtual ResponseHeader SetMonitoringMode( + RequestHeader requestHeader, + uint subscriptionId, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + SetMonitoringModeRequest request = new SetMonitoringModeRequest(); + SetMonitoringModeResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.MonitoringMode = monitoringMode; + request.MonitoredItemIds = monitoredItemIds; + + UpdateRequestHeader(request, requestHeader == null, "SetMonitoringMode"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (SetMonitoringModeResponse)genericResponse; + } + else + { + SetMonitoringModeResponseMessage responseMessage = InnerChannel.SetMonitoringMode(new SetMonitoringModeMessage(request)); + + if (responseMessage == null || responseMessage.SetMonitoringModeResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.SetMonitoringModeResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "SetMonitoringMode"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the SetMonitoringMode service. + /// + public IAsyncResult BeginSetMonitoringMode( + RequestHeader requestHeader, + uint subscriptionId, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + AsyncCallback callback, + object asyncState) + { + SetMonitoringModeRequest request = new SetMonitoringModeRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.MonitoringMode = monitoringMode; + request.MonitoredItemIds = monitoredItemIds; + + UpdateRequestHeader(request, requestHeader == null, "SetMonitoringMode"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginSetMonitoringMode(new SetMonitoringModeMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the SetMonitoringMode service. + /// + public ResponseHeader EndSetMonitoringMode( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + SetMonitoringModeResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (SetMonitoringModeResponse)genericResponse; + } + else + { + SetMonitoringModeResponseMessage responseMessage = InnerChannel.EndSetMonitoringMode(result); + + if (responseMessage == null || responseMessage.SetMonitoringModeResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.SetMonitoringModeResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "SetMonitoringMode"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region SetTriggering Methods + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// Invokes the SetTriggering service. + /// + public virtual ResponseHeader SetTriggering( + RequestHeader requestHeader, + uint subscriptionId, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos) + { + SetTriggeringRequest request = new SetTriggeringRequest(); + SetTriggeringResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.TriggeringItemId = triggeringItemId; + request.LinksToAdd = linksToAdd; + request.LinksToRemove = linksToRemove; + + UpdateRequestHeader(request, requestHeader == null, "SetTriggering"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (SetTriggeringResponse)genericResponse; + } + else + { + SetTriggeringResponseMessage responseMessage = InnerChannel.SetTriggering(new SetTriggeringMessage(request)); + + if (responseMessage == null || responseMessage.SetTriggeringResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.SetTriggeringResponse; + ValidateResponse(response.ResponseHeader); + } + + addResults = response.AddResults; + addDiagnosticInfos = response.AddDiagnosticInfos; + removeResults = response.RemoveResults; + removeDiagnosticInfos = response.RemoveDiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "SetTriggering"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the SetTriggering service. + /// + public IAsyncResult BeginSetTriggering( + RequestHeader requestHeader, + uint subscriptionId, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + AsyncCallback callback, + object asyncState) + { + SetTriggeringRequest request = new SetTriggeringRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.TriggeringItemId = triggeringItemId; + request.LinksToAdd = linksToAdd; + request.LinksToRemove = linksToRemove; + + UpdateRequestHeader(request, requestHeader == null, "SetTriggering"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginSetTriggering(new SetTriggeringMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the SetTriggering service. + /// + public ResponseHeader EndSetTriggering( + IAsyncResult result, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos) + { + SetTriggeringResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (SetTriggeringResponse)genericResponse; + } + else + { + SetTriggeringResponseMessage responseMessage = InnerChannel.EndSetTriggering(result); + + if (responseMessage == null || responseMessage.SetTriggeringResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.SetTriggeringResponse; + ValidateResponse(response.ResponseHeader); + } + + addResults = response.AddResults; + addDiagnosticInfos = response.AddDiagnosticInfos; + removeResults = response.RemoveResults; + removeDiagnosticInfos = response.RemoveDiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "SetTriggering"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region DeleteMonitoredItems Methods + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// Invokes the DeleteMonitoredItems service. + /// + public virtual ResponseHeader DeleteMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteMonitoredItemsRequest request = new DeleteMonitoredItemsRequest(); + DeleteMonitoredItemsResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.MonitoredItemIds = monitoredItemIds; + + UpdateRequestHeader(request, requestHeader == null, "DeleteMonitoredItems"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteMonitoredItemsResponse)genericResponse; + } + else + { + DeleteMonitoredItemsResponseMessage responseMessage = InnerChannel.DeleteMonitoredItems(new DeleteMonitoredItemsMessage(request)); + + if (responseMessage == null || responseMessage.DeleteMonitoredItemsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteMonitoredItemsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "DeleteMonitoredItems"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the DeleteMonitoredItems service. + /// + public IAsyncResult BeginDeleteMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + UInt32Collection monitoredItemIds, + AsyncCallback callback, + object asyncState) + { + DeleteMonitoredItemsRequest request = new DeleteMonitoredItemsRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.MonitoredItemIds = monitoredItemIds; + + UpdateRequestHeader(request, requestHeader == null, "DeleteMonitoredItems"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginDeleteMonitoredItems(new DeleteMonitoredItemsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the DeleteMonitoredItems service. + /// + public ResponseHeader EndDeleteMonitoredItems( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteMonitoredItemsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteMonitoredItemsResponse)genericResponse; + } + else + { + DeleteMonitoredItemsResponseMessage responseMessage = InnerChannel.EndDeleteMonitoredItems(result); + + if (responseMessage == null || responseMessage.DeleteMonitoredItemsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteMonitoredItemsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "DeleteMonitoredItems"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region CreateSubscription Methods + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// Invokes the CreateSubscription service. + /// + public virtual ResponseHeader CreateSubscription( + RequestHeader requestHeader, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + bool publishingEnabled, + byte priority, + out uint subscriptionId, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + CreateSubscriptionRequest request = new CreateSubscriptionRequest(); + CreateSubscriptionResponse response = null; + + request.RequestHeader = requestHeader; + request.RequestedPublishingInterval = requestedPublishingInterval; + request.RequestedLifetimeCount = requestedLifetimeCount; + request.RequestedMaxKeepAliveCount = requestedMaxKeepAliveCount; + request.MaxNotificationsPerPublish = maxNotificationsPerPublish; + request.PublishingEnabled = publishingEnabled; + request.Priority = priority; + + UpdateRequestHeader(request, requestHeader == null, "CreateSubscription"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CreateSubscriptionResponse)genericResponse; + } + else + { + CreateSubscriptionResponseMessage responseMessage = InnerChannel.CreateSubscription(new CreateSubscriptionMessage(request)); + + if (responseMessage == null || responseMessage.CreateSubscriptionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CreateSubscriptionResponse; + ValidateResponse(response.ResponseHeader); + } + + subscriptionId = response.SubscriptionId; + revisedPublishingInterval = response.RevisedPublishingInterval; + revisedLifetimeCount = response.RevisedLifetimeCount; + revisedMaxKeepAliveCount = response.RevisedMaxKeepAliveCount; + } + finally + { + RequestCompleted(request, response, "CreateSubscription"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the CreateSubscription service. + /// + public IAsyncResult BeginCreateSubscription( + RequestHeader requestHeader, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + bool publishingEnabled, + byte priority, + AsyncCallback callback, + object asyncState) + { + CreateSubscriptionRequest request = new CreateSubscriptionRequest(); + + request.RequestHeader = requestHeader; + request.RequestedPublishingInterval = requestedPublishingInterval; + request.RequestedLifetimeCount = requestedLifetimeCount; + request.RequestedMaxKeepAliveCount = requestedMaxKeepAliveCount; + request.MaxNotificationsPerPublish = maxNotificationsPerPublish; + request.PublishingEnabled = publishingEnabled; + request.Priority = priority; + + UpdateRequestHeader(request, requestHeader == null, "CreateSubscription"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginCreateSubscription(new CreateSubscriptionMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the CreateSubscription service. + /// + public ResponseHeader EndCreateSubscription( + IAsyncResult result, + out uint subscriptionId, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + CreateSubscriptionResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (CreateSubscriptionResponse)genericResponse; + } + else + { + CreateSubscriptionResponseMessage responseMessage = InnerChannel.EndCreateSubscription(result); + + if (responseMessage == null || responseMessage.CreateSubscriptionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.CreateSubscriptionResponse; + ValidateResponse(response.ResponseHeader); + } + + subscriptionId = response.SubscriptionId; + revisedPublishingInterval = response.RevisedPublishingInterval; + revisedLifetimeCount = response.RevisedLifetimeCount; + revisedMaxKeepAliveCount = response.RevisedMaxKeepAliveCount; + } + finally + { + RequestCompleted(null, response, "CreateSubscription"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region ModifySubscription Methods + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// Invokes the ModifySubscription service. + /// + public virtual ResponseHeader ModifySubscription( + RequestHeader requestHeader, + uint subscriptionId, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + ModifySubscriptionRequest request = new ModifySubscriptionRequest(); + ModifySubscriptionResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.RequestedPublishingInterval = requestedPublishingInterval; + request.RequestedLifetimeCount = requestedLifetimeCount; + request.RequestedMaxKeepAliveCount = requestedMaxKeepAliveCount; + request.MaxNotificationsPerPublish = maxNotificationsPerPublish; + request.Priority = priority; + + UpdateRequestHeader(request, requestHeader == null, "ModifySubscription"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ModifySubscriptionResponse)genericResponse; + } + else + { + ModifySubscriptionResponseMessage responseMessage = InnerChannel.ModifySubscription(new ModifySubscriptionMessage(request)); + + if (responseMessage == null || responseMessage.ModifySubscriptionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ModifySubscriptionResponse; + ValidateResponse(response.ResponseHeader); + } + + revisedPublishingInterval = response.RevisedPublishingInterval; + revisedLifetimeCount = response.RevisedLifetimeCount; + revisedMaxKeepAliveCount = response.RevisedMaxKeepAliveCount; + } + finally + { + RequestCompleted(request, response, "ModifySubscription"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the ModifySubscription service. + /// + public IAsyncResult BeginModifySubscription( + RequestHeader requestHeader, + uint subscriptionId, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + AsyncCallback callback, + object asyncState) + { + ModifySubscriptionRequest request = new ModifySubscriptionRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.RequestedPublishingInterval = requestedPublishingInterval; + request.RequestedLifetimeCount = requestedLifetimeCount; + request.RequestedMaxKeepAliveCount = requestedMaxKeepAliveCount; + request.MaxNotificationsPerPublish = maxNotificationsPerPublish; + request.Priority = priority; + + UpdateRequestHeader(request, requestHeader == null, "ModifySubscription"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginModifySubscription(new ModifySubscriptionMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the ModifySubscription service. + /// + public ResponseHeader EndModifySubscription( + IAsyncResult result, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + ModifySubscriptionResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (ModifySubscriptionResponse)genericResponse; + } + else + { + ModifySubscriptionResponseMessage responseMessage = InnerChannel.EndModifySubscription(result); + + if (responseMessage == null || responseMessage.ModifySubscriptionResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.ModifySubscriptionResponse; + ValidateResponse(response.ResponseHeader); + } + + revisedPublishingInterval = response.RevisedPublishingInterval; + revisedLifetimeCount = response.RevisedLifetimeCount; + revisedMaxKeepAliveCount = response.RevisedMaxKeepAliveCount; + } + finally + { + RequestCompleted(null, response, "ModifySubscription"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region SetPublishingMode Methods + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// Invokes the SetPublishingMode service. + /// + public virtual ResponseHeader SetPublishingMode( + RequestHeader requestHeader, + bool publishingEnabled, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + SetPublishingModeRequest request = new SetPublishingModeRequest(); + SetPublishingModeResponse response = null; + + request.RequestHeader = requestHeader; + request.PublishingEnabled = publishingEnabled; + request.SubscriptionIds = subscriptionIds; + + UpdateRequestHeader(request, requestHeader == null, "SetPublishingMode"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (SetPublishingModeResponse)genericResponse; + } + else + { + SetPublishingModeResponseMessage responseMessage = InnerChannel.SetPublishingMode(new SetPublishingModeMessage(request)); + + if (responseMessage == null || responseMessage.SetPublishingModeResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.SetPublishingModeResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "SetPublishingMode"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the SetPublishingMode service. + /// + public IAsyncResult BeginSetPublishingMode( + RequestHeader requestHeader, + bool publishingEnabled, + UInt32Collection subscriptionIds, + AsyncCallback callback, + object asyncState) + { + SetPublishingModeRequest request = new SetPublishingModeRequest(); + + request.RequestHeader = requestHeader; + request.PublishingEnabled = publishingEnabled; + request.SubscriptionIds = subscriptionIds; + + UpdateRequestHeader(request, requestHeader == null, "SetPublishingMode"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginSetPublishingMode(new SetPublishingModeMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the SetPublishingMode service. + /// + public ResponseHeader EndSetPublishingMode( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + SetPublishingModeResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (SetPublishingModeResponse)genericResponse; + } + else + { + SetPublishingModeResponseMessage responseMessage = InnerChannel.EndSetPublishingMode(result); + + if (responseMessage == null || responseMessage.SetPublishingModeResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.SetPublishingModeResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "SetPublishingMode"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Publish Methods + #if (!OPCUA_EXCLUDE_Publish) + /// + /// Invokes the Publish service. + /// + public virtual ResponseHeader Publish( + RequestHeader requestHeader, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications, + out NotificationMessage notificationMessage, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + PublishRequest request = new PublishRequest(); + PublishResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionAcknowledgements = subscriptionAcknowledgements; + + UpdateRequestHeader(request, requestHeader == null, "Publish"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (PublishResponse)genericResponse; + } + else + { + PublishResponseMessage responseMessage = InnerChannel.Publish(new PublishMessage(request)); + + if (responseMessage == null || responseMessage.PublishResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.PublishResponse; + ValidateResponse(response.ResponseHeader); + } + + subscriptionId = response.SubscriptionId; + availableSequenceNumbers = response.AvailableSequenceNumbers; + moreNotifications = response.MoreNotifications; + notificationMessage = response.NotificationMessage; + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "Publish"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Publish service. + /// + public IAsyncResult BeginPublish( + RequestHeader requestHeader, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + AsyncCallback callback, + object asyncState) + { + PublishRequest request = new PublishRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionAcknowledgements = subscriptionAcknowledgements; + + UpdateRequestHeader(request, requestHeader == null, "Publish"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginPublish(new PublishMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Publish service. + /// + public ResponseHeader EndPublish( + IAsyncResult result, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications, + out NotificationMessage notificationMessage, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + PublishResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (PublishResponse)genericResponse; + } + else + { + PublishResponseMessage responseMessage = InnerChannel.EndPublish(result); + + if (responseMessage == null || responseMessage.PublishResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.PublishResponse; + ValidateResponse(response.ResponseHeader); + } + + subscriptionId = response.SubscriptionId; + availableSequenceNumbers = response.AvailableSequenceNumbers; + moreNotifications = response.MoreNotifications; + notificationMessage = response.NotificationMessage; + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "Publish"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region Republish Methods + #if (!OPCUA_EXCLUDE_Republish) + /// + /// Invokes the Republish service. + /// + public virtual ResponseHeader Republish( + RequestHeader requestHeader, + uint subscriptionId, + uint retransmitSequenceNumber, + out NotificationMessage notificationMessage) + { + RepublishRequest request = new RepublishRequest(); + RepublishResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.RetransmitSequenceNumber = retransmitSequenceNumber; + + UpdateRequestHeader(request, requestHeader == null, "Republish"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RepublishResponse)genericResponse; + } + else + { + RepublishResponseMessage responseMessage = InnerChannel.Republish(new RepublishMessage(request)); + + if (responseMessage == null || responseMessage.RepublishResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RepublishResponse; + ValidateResponse(response.ResponseHeader); + } + + notificationMessage = response.NotificationMessage; + } + finally + { + RequestCompleted(request, response, "Republish"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the Republish service. + /// + public IAsyncResult BeginRepublish( + RequestHeader requestHeader, + uint subscriptionId, + uint retransmitSequenceNumber, + AsyncCallback callback, + object asyncState) + { + RepublishRequest request = new RepublishRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionId = subscriptionId; + request.RetransmitSequenceNumber = retransmitSequenceNumber; + + UpdateRequestHeader(request, requestHeader == null, "Republish"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginRepublish(new RepublishMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the Republish service. + /// + public ResponseHeader EndRepublish( + IAsyncResult result, + out NotificationMessage notificationMessage) + { + RepublishResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RepublishResponse)genericResponse; + } + else + { + RepublishResponseMessage responseMessage = InnerChannel.EndRepublish(result); + + if (responseMessage == null || responseMessage.RepublishResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RepublishResponse; + ValidateResponse(response.ResponseHeader); + } + + notificationMessage = response.NotificationMessage; + } + finally + { + RequestCompleted(null, response, "Republish"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region TransferSubscriptions Methods + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// Invokes the TransferSubscriptions service. + /// + public virtual ResponseHeader TransferSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + bool sendInitialValues, + out TransferResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + TransferSubscriptionsRequest request = new TransferSubscriptionsRequest(); + TransferSubscriptionsResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionIds = subscriptionIds; + request.SendInitialValues = sendInitialValues; + + UpdateRequestHeader(request, requestHeader == null, "TransferSubscriptions"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (TransferSubscriptionsResponse)genericResponse; + } + else + { + TransferSubscriptionsResponseMessage responseMessage = InnerChannel.TransferSubscriptions(new TransferSubscriptionsMessage(request)); + + if (responseMessage == null || responseMessage.TransferSubscriptionsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.TransferSubscriptionsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "TransferSubscriptions"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the TransferSubscriptions service. + /// + public IAsyncResult BeginTransferSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + bool sendInitialValues, + AsyncCallback callback, + object asyncState) + { + TransferSubscriptionsRequest request = new TransferSubscriptionsRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionIds = subscriptionIds; + request.SendInitialValues = sendInitialValues; + + UpdateRequestHeader(request, requestHeader == null, "TransferSubscriptions"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginTransferSubscriptions(new TransferSubscriptionsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the TransferSubscriptions service. + /// + public ResponseHeader EndTransferSubscriptions( + IAsyncResult result, + out TransferResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + TransferSubscriptionsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (TransferSubscriptionsResponse)genericResponse; + } + else + { + TransferSubscriptionsResponseMessage responseMessage = InnerChannel.EndTransferSubscriptions(result); + + if (responseMessage == null || responseMessage.TransferSubscriptionsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.TransferSubscriptionsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "TransferSubscriptions"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region DeleteSubscriptions Methods + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// Invokes the DeleteSubscriptions service. + /// + public virtual ResponseHeader DeleteSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteSubscriptionsRequest request = new DeleteSubscriptionsRequest(); + DeleteSubscriptionsResponse response = null; + + request.RequestHeader = requestHeader; + request.SubscriptionIds = subscriptionIds; + + UpdateRequestHeader(request, requestHeader == null, "DeleteSubscriptions"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteSubscriptionsResponse)genericResponse; + } + else + { + DeleteSubscriptionsResponseMessage responseMessage = InnerChannel.DeleteSubscriptions(new DeleteSubscriptionsMessage(request)); + + if (responseMessage == null || responseMessage.DeleteSubscriptionsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteSubscriptionsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "DeleteSubscriptions"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the DeleteSubscriptions service. + /// + public IAsyncResult BeginDeleteSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + AsyncCallback callback, + object asyncState) + { + DeleteSubscriptionsRequest request = new DeleteSubscriptionsRequest(); + + request.RequestHeader = requestHeader; + request.SubscriptionIds = subscriptionIds; + + UpdateRequestHeader(request, requestHeader == null, "DeleteSubscriptions"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginDeleteSubscriptions(new DeleteSubscriptionsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the DeleteSubscriptions service. + /// + public ResponseHeader EndDeleteSubscriptions( + IAsyncResult result, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + DeleteSubscriptionsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (DeleteSubscriptionsResponse)genericResponse; + } + else + { + DeleteSubscriptionsResponseMessage responseMessage = InnerChannel.EndDeleteSubscriptions(result); + + if (responseMessage == null || responseMessage.DeleteSubscriptionsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.DeleteSubscriptionsResponse; + ValidateResponse(response.ResponseHeader); + } + + results = response.Results; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "DeleteSubscriptions"); + } + + return response.ResponseHeader; + } + #endif + #endregion + #endregion + } + + /// + /// The client side interface for a UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DiscoveryClient : ClientBase + { + #region Constructors + /// + /// Intializes the object with a channel and a message context. + /// + public DiscoveryClient(ITransportChannel channel) + : + base(channel) + { + } + #endregion + + #region Public Properties + /// + /// The component contains classes object use to communicate with the server. + /// + public new IDiscoveryChannel InnerChannel + { + get { return (IDiscoveryChannel)base.InnerChannel; } + } + #endregion + + #region Client API + #region FindServers Methods + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + public virtual ResponseHeader FindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + out ApplicationDescriptionCollection servers) + { + FindServersRequest request = new FindServersRequest(); + FindServersResponse response = null; + + request.RequestHeader = requestHeader; + request.EndpointUrl = endpointUrl; + request.LocaleIds = localeIds; + request.ServerUris = serverUris; + + UpdateRequestHeader(request, requestHeader == null, "FindServers"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (FindServersResponse)genericResponse; + } + else + { + FindServersResponseMessage responseMessage = InnerChannel.FindServers(new FindServersMessage(request)); + + if (responseMessage == null || responseMessage.FindServersResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.FindServersResponse; + ValidateResponse(response.ResponseHeader); + } + + servers = response.Servers; + } + finally + { + RequestCompleted(request, response, "FindServers"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the FindServers service. + /// + public IAsyncResult BeginFindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + AsyncCallback callback, + object asyncState) + { + FindServersRequest request = new FindServersRequest(); + + request.RequestHeader = requestHeader; + request.EndpointUrl = endpointUrl; + request.LocaleIds = localeIds; + request.ServerUris = serverUris; + + UpdateRequestHeader(request, requestHeader == null, "FindServers"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginFindServers(new FindServersMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the FindServers service. + /// + public ResponseHeader EndFindServers( + IAsyncResult result, + out ApplicationDescriptionCollection servers) + { + FindServersResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (FindServersResponse)genericResponse; + } + else + { + FindServersResponseMessage responseMessage = InnerChannel.EndFindServers(result); + + if (responseMessage == null || responseMessage.FindServersResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.FindServersResponse; + ValidateResponse(response.ResponseHeader); + } + + servers = response.Servers; + } + finally + { + RequestCompleted(null, response, "FindServers"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region FindServersOnNetwork Methods + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + public virtual ResponseHeader FindServersOnNetwork( + RequestHeader requestHeader, + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + out DateTime lastCounterResetTime, + out ServerOnNetworkCollection servers) + { + FindServersOnNetworkRequest request = new FindServersOnNetworkRequest(); + FindServersOnNetworkResponse response = null; + + request.RequestHeader = requestHeader; + request.StartingRecordId = startingRecordId; + request.MaxRecordsToReturn = maxRecordsToReturn; + request.ServerCapabilityFilter = serverCapabilityFilter; + + UpdateRequestHeader(request, requestHeader == null, "FindServersOnNetwork"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (FindServersOnNetworkResponse)genericResponse; + } + else + { + FindServersOnNetworkResponseMessage responseMessage = InnerChannel.FindServersOnNetwork(new FindServersOnNetworkMessage(request)); + + if (responseMessage == null || responseMessage.FindServersOnNetworkResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.FindServersOnNetworkResponse; + ValidateResponse(response.ResponseHeader); + } + + lastCounterResetTime = response.LastCounterResetTime; + servers = response.Servers; + } + finally + { + RequestCompleted(request, response, "FindServersOnNetwork"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the FindServersOnNetwork service. + /// + public IAsyncResult BeginFindServersOnNetwork( + RequestHeader requestHeader, + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + AsyncCallback callback, + object asyncState) + { + FindServersOnNetworkRequest request = new FindServersOnNetworkRequest(); + + request.RequestHeader = requestHeader; + request.StartingRecordId = startingRecordId; + request.MaxRecordsToReturn = maxRecordsToReturn; + request.ServerCapabilityFilter = serverCapabilityFilter; + + UpdateRequestHeader(request, requestHeader == null, "FindServersOnNetwork"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginFindServersOnNetwork(new FindServersOnNetworkMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the FindServersOnNetwork service. + /// + public ResponseHeader EndFindServersOnNetwork( + IAsyncResult result, + out DateTime lastCounterResetTime, + out ServerOnNetworkCollection servers) + { + FindServersOnNetworkResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (FindServersOnNetworkResponse)genericResponse; + } + else + { + FindServersOnNetworkResponseMessage responseMessage = InnerChannel.EndFindServersOnNetwork(result); + + if (responseMessage == null || responseMessage.FindServersOnNetworkResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.FindServersOnNetworkResponse; + ValidateResponse(response.ResponseHeader); + } + + lastCounterResetTime = response.LastCounterResetTime; + servers = response.Servers; + } + finally + { + RequestCompleted(null, response, "FindServersOnNetwork"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region GetEndpoints Methods + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + public virtual ResponseHeader GetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + out EndpointDescriptionCollection endpoints) + { + GetEndpointsRequest request = new GetEndpointsRequest(); + GetEndpointsResponse response = null; + + request.RequestHeader = requestHeader; + request.EndpointUrl = endpointUrl; + request.LocaleIds = localeIds; + request.ProfileUris = profileUris; + + UpdateRequestHeader(request, requestHeader == null, "GetEndpoints"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (GetEndpointsResponse)genericResponse; + } + else + { + GetEndpointsResponseMessage responseMessage = InnerChannel.GetEndpoints(new GetEndpointsMessage(request)); + + if (responseMessage == null || responseMessage.GetEndpointsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.GetEndpointsResponse; + ValidateResponse(response.ResponseHeader); + } + + endpoints = response.Endpoints; + } + finally + { + RequestCompleted(request, response, "GetEndpoints"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the GetEndpoints service. + /// + public IAsyncResult BeginGetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + AsyncCallback callback, + object asyncState) + { + GetEndpointsRequest request = new GetEndpointsRequest(); + + request.RequestHeader = requestHeader; + request.EndpointUrl = endpointUrl; + request.LocaleIds = localeIds; + request.ProfileUris = profileUris; + + UpdateRequestHeader(request, requestHeader == null, "GetEndpoints"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginGetEndpoints(new GetEndpointsMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the GetEndpoints service. + /// + public ResponseHeader EndGetEndpoints( + IAsyncResult result, + out EndpointDescriptionCollection endpoints) + { + GetEndpointsResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (GetEndpointsResponse)genericResponse; + } + else + { + GetEndpointsResponseMessage responseMessage = InnerChannel.EndGetEndpoints(result); + + if (responseMessage == null || responseMessage.GetEndpointsResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.GetEndpointsResponse; + ValidateResponse(response.ResponseHeader); + } + + endpoints = response.Endpoints; + } + finally + { + RequestCompleted(null, response, "GetEndpoints"); + } + + return response.ResponseHeader; + } + #endif + #endregion + #endregion + } + + /// + /// The client side interface for a UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class RegistrationClient : ClientBase + { + #region Constructors + /// + /// Intializes the object with a channel and a message context. + /// + public RegistrationClient(ITransportChannel channel) + : + base(channel) + { + } + #endregion + + #region Public Properties + /// + /// The component contains classes object use to communicate with the server. + /// + public new IRegistrationChannel InnerChannel + { + get { return (IRegistrationChannel)base.InnerChannel; } + } + #endregion + + #region Client API + #region RegisterServer Methods + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// Invokes the RegisterServer service. + /// + public virtual ResponseHeader RegisterServer( + RequestHeader requestHeader, + RegisteredServer server) + { + RegisterServerRequest request = new RegisterServerRequest(); + RegisterServerResponse response = null; + + request.RequestHeader = requestHeader; + request.Server = server; + + UpdateRequestHeader(request, requestHeader == null, "RegisterServer"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RegisterServerResponse)genericResponse; + } + else + { + RegisterServerResponseMessage responseMessage = InnerChannel.RegisterServer(new RegisterServerMessage(request)); + + if (responseMessage == null || responseMessage.RegisterServerResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RegisterServerResponse; + ValidateResponse(response.ResponseHeader); + } + + } + finally + { + RequestCompleted(request, response, "RegisterServer"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the RegisterServer service. + /// + public IAsyncResult BeginRegisterServer( + RequestHeader requestHeader, + RegisteredServer server, + AsyncCallback callback, + object asyncState) + { + RegisterServerRequest request = new RegisterServerRequest(); + + request.RequestHeader = requestHeader; + request.Server = server; + + UpdateRequestHeader(request, requestHeader == null, "RegisterServer"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginRegisterServer(new RegisterServerMessage(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the RegisterServer service. + /// + public ResponseHeader EndRegisterServer( + IAsyncResult result) + { + RegisterServerResponse response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RegisterServerResponse)genericResponse; + } + else + { + RegisterServerResponseMessage responseMessage = InnerChannel.EndRegisterServer(result); + + if (responseMessage == null || responseMessage.RegisterServerResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RegisterServerResponse; + ValidateResponse(response.ResponseHeader); + } + + } + finally + { + RequestCompleted(null, response, "RegisterServer"); + } + + return response.ResponseHeader; + } + #endif + #endregion + + #region RegisterServer2 Methods + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// Invokes the RegisterServer2 service. + /// + public virtual ResponseHeader RegisterServer2( + RequestHeader requestHeader, + RegisteredServer server, + ExtensionObjectCollection discoveryConfiguration, + out StatusCodeCollection configurationResults, + out DiagnosticInfoCollection diagnosticInfos) + { + RegisterServer2Request request = new RegisterServer2Request(); + RegisterServer2Response response = null; + + request.RequestHeader = requestHeader; + request.Server = server; + request.DiscoveryConfiguration = discoveryConfiguration; + + UpdateRequestHeader(request, requestHeader == null, "RegisterServer2"); + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.SendRequest(request); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RegisterServer2Response)genericResponse; + } + else + { + RegisterServer2ResponseMessage responseMessage = InnerChannel.RegisterServer2(new RegisterServer2Message(request)); + + if (responseMessage == null || responseMessage.RegisterServer2Response == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RegisterServer2Response; + ValidateResponse(response.ResponseHeader); + } + + configurationResults = response.ConfigurationResults; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(request, response, "RegisterServer2"); + } + + return response.ResponseHeader; + } + + /// + /// Begins an asynchronous invocation of the RegisterServer2 service. + /// + public IAsyncResult BeginRegisterServer2( + RequestHeader requestHeader, + RegisteredServer server, + ExtensionObjectCollection discoveryConfiguration, + AsyncCallback callback, + object asyncState) + { + RegisterServer2Request request = new RegisterServer2Request(); + + request.RequestHeader = requestHeader; + request.Server = server; + request.DiscoveryConfiguration = discoveryConfiguration; + + UpdateRequestHeader(request, requestHeader == null, "RegisterServer2"); + + if (UseTransportChannel) + { + return TransportChannel.BeginSendRequest(request, callback, asyncState); + } + + return InnerChannel.BeginRegisterServer2(new RegisterServer2Message(request), callback, asyncState); + } + + /// + /// Finishes an asynchronous invocation of the RegisterServer2 service. + /// + public ResponseHeader EndRegisterServer2( + IAsyncResult result, + out StatusCodeCollection configurationResults, + out DiagnosticInfoCollection diagnosticInfos) + { + RegisterServer2Response response = null; + + try + { + if (UseTransportChannel) + { + IServiceResponse genericResponse = TransportChannel.EndSendRequest(result); + + if (genericResponse == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + ValidateResponse(genericResponse.ResponseHeader); + response = (RegisterServer2Response)genericResponse; + } + else + { + RegisterServer2ResponseMessage responseMessage = InnerChannel.EndRegisterServer2(result); + + if (responseMessage == null || responseMessage.RegisterServer2Response == null) + { + throw new ServiceResultException(StatusCodes.BadUnknownResponse); + } + + response = responseMessage.RegisterServer2Response; + ValidateResponse(response.ResponseHeader); + } + + configurationResults = response.ConfigurationResults; + diagnosticInfos = response.DiagnosticInfos; + } + finally + { + RequestCompleted(null, response, "RegisterServer2"); + } + + return response.ResponseHeader; + } + #endif + #endregion + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Constants.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Constants.cs new file mode 100644 index 00000000..ca2b7caa --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Constants.cs @@ -0,0 +1,78581 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua +{ + #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 Decimal DataType. + /// + public const uint Decimal = 50; + + /// + /// 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 AudioDataType DataType. + /// + public const uint AudioDataType = 16307; + + /// + /// The identifier for the BitFieldMaskDataType DataType. + /// + public const uint BitFieldMaskDataType = 11737; + + /// + /// The identifier for the KeyValuePair DataType. + /// + public const uint KeyValuePair = 14533; + + /// + /// The identifier for the EndpointType DataType. + /// + public const uint EndpointType = 15528; + + /// + /// The identifier for the RationalNumber DataType. + /// + public const uint RationalNumber = 18806; + + /// + /// The identifier for the Vector DataType. + /// + public const uint Vector = 18807; + + /// + /// The identifier for the ThreeDVector DataType. + /// + public const uint ThreeDVector = 18808; + + /// + /// The identifier for the CartesianCoordinates DataType. + /// + public const uint CartesianCoordinates = 18809; + + /// + /// The identifier for the ThreeDCartesianCoordinates DataType. + /// + public const uint ThreeDCartesianCoordinates = 18810; + + /// + /// The identifier for the Orientation DataType. + /// + public const uint Orientation = 18811; + + /// + /// The identifier for the ThreeDOrientation DataType. + /// + public const uint ThreeDOrientation = 18812; + + /// + /// The identifier for the Frame DataType. + /// + public const uint Frame = 18813; + + /// + /// The identifier for the ThreeDFrame DataType. + /// + public const uint ThreeDFrame = 18814; + + /// + /// The identifier for the OpenFileMode DataType. + /// + public const uint OpenFileMode = 11939; + + /// + /// The identifier for the IdentityCriteriaType DataType. + /// + public const uint IdentityCriteriaType = 15632; + + /// + /// The identifier for the IdentityMappingRuleType DataType. + /// + public const uint IdentityMappingRuleType = 15634; + + /// + /// The identifier for the CurrencyUnitType DataType. + /// + public const uint CurrencyUnitType = 23498; + + /// + /// The identifier for the TrustListMasks DataType. + /// + public const uint TrustListMasks = 12552; + + /// + /// The identifier for the TrustListDataType DataType. + /// + public const uint TrustListDataType = 12554; + + /// + /// The identifier for the DecimalDataType DataType. + /// + public const uint DecimalDataType = 17861; + + /// + /// The identifier for the DataTypeSchemaHeader DataType. + /// + public const uint DataTypeSchemaHeader = 15534; + + /// + /// The identifier for the DataTypeDescription DataType. + /// + public const uint DataTypeDescription = 14525; + + /// + /// The identifier for the StructureDescription DataType. + /// + public const uint StructureDescription = 15487; + + /// + /// The identifier for the EnumDescription DataType. + /// + public const uint EnumDescription = 15488; + + /// + /// The identifier for the SimpleTypeDescription DataType. + /// + public const uint SimpleTypeDescription = 15005; + + /// + /// The identifier for the UABinaryFileDataType DataType. + /// + public const uint UABinaryFileDataType = 15006; + + /// + /// The identifier for the PubSubState DataType. + /// + public const uint PubSubState = 14647; + + /// + /// The identifier for the DataSetMetaDataType DataType. + /// + public const uint DataSetMetaDataType = 14523; + + /// + /// The identifier for the FieldMetaData DataType. + /// + public const uint FieldMetaData = 14524; + + /// + /// The identifier for the DataSetFieldFlags DataType. + /// + public const uint DataSetFieldFlags = 15904; + + /// + /// The identifier for the ConfigurationVersionDataType DataType. + /// + public const uint ConfigurationVersionDataType = 14593; + + /// + /// The identifier for the PublishedDataSetDataType DataType. + /// + public const uint PublishedDataSetDataType = 15578; + + /// + /// The identifier for the PublishedDataSetSourceDataType DataType. + /// + public const uint PublishedDataSetSourceDataType = 15580; + + /// + /// The identifier for the PublishedVariableDataType DataType. + /// + public const uint PublishedVariableDataType = 14273; + + /// + /// The identifier for the PublishedDataItemsDataType DataType. + /// + public const uint PublishedDataItemsDataType = 15581; + + /// + /// The identifier for the PublishedEventsDataType DataType. + /// + public const uint PublishedEventsDataType = 15582; + + /// + /// The identifier for the DataSetFieldContentMask DataType. + /// + public const uint DataSetFieldContentMask = 15583; + + /// + /// The identifier for the DataSetWriterDataType DataType. + /// + public const uint DataSetWriterDataType = 15597; + + /// + /// The identifier for the DataSetWriterTransportDataType DataType. + /// + public const uint DataSetWriterTransportDataType = 15598; + + /// + /// The identifier for the DataSetWriterMessageDataType DataType. + /// + public const uint DataSetWriterMessageDataType = 15605; + + /// + /// The identifier for the PubSubGroupDataType DataType. + /// + public const uint PubSubGroupDataType = 15609; + + /// + /// The identifier for the WriterGroupDataType DataType. + /// + public const uint WriterGroupDataType = 15480; + + /// + /// The identifier for the WriterGroupTransportDataType DataType. + /// + public const uint WriterGroupTransportDataType = 15611; + + /// + /// The identifier for the WriterGroupMessageDataType DataType. + /// + public const uint WriterGroupMessageDataType = 15616; + + /// + /// The identifier for the PubSubConnectionDataType DataType. + /// + public const uint PubSubConnectionDataType = 15617; + + /// + /// The identifier for the ConnectionTransportDataType DataType. + /// + public const uint ConnectionTransportDataType = 15618; + + /// + /// The identifier for the NetworkAddressDataType DataType. + /// + public const uint NetworkAddressDataType = 15502; + + /// + /// The identifier for the NetworkAddressUrlDataType DataType. + /// + public const uint NetworkAddressUrlDataType = 15510; + + /// + /// The identifier for the ReaderGroupDataType DataType. + /// + public const uint ReaderGroupDataType = 15520; + + /// + /// The identifier for the ReaderGroupTransportDataType DataType. + /// + public const uint ReaderGroupTransportDataType = 15621; + + /// + /// The identifier for the ReaderGroupMessageDataType DataType. + /// + public const uint ReaderGroupMessageDataType = 15622; + + /// + /// The identifier for the DataSetReaderDataType DataType. + /// + public const uint DataSetReaderDataType = 15623; + + /// + /// The identifier for the DataSetReaderTransportDataType DataType. + /// + public const uint DataSetReaderTransportDataType = 15628; + + /// + /// The identifier for the DataSetReaderMessageDataType DataType. + /// + public const uint DataSetReaderMessageDataType = 15629; + + /// + /// The identifier for the SubscribedDataSetDataType DataType. + /// + public const uint SubscribedDataSetDataType = 15630; + + /// + /// The identifier for the TargetVariablesDataType DataType. + /// + public const uint TargetVariablesDataType = 15631; + + /// + /// The identifier for the FieldTargetDataType DataType. + /// + public const uint FieldTargetDataType = 14744; + + /// + /// The identifier for the OverrideValueHandling DataType. + /// + public const uint OverrideValueHandling = 15874; + + /// + /// The identifier for the SubscribedDataSetMirrorDataType DataType. + /// + public const uint SubscribedDataSetMirrorDataType = 15635; + + /// + /// The identifier for the PubSubConfigurationDataType DataType. + /// + public const uint PubSubConfigurationDataType = 15530; + + /// + /// The identifier for the DataSetOrderingType DataType. + /// + public const uint DataSetOrderingType = 20408; + + /// + /// The identifier for the UadpNetworkMessageContentMask DataType. + /// + public const uint UadpNetworkMessageContentMask = 15642; + + /// + /// The identifier for the UadpWriterGroupMessageDataType DataType. + /// + public const uint UadpWriterGroupMessageDataType = 15645; + + /// + /// The identifier for the UadpDataSetMessageContentMask DataType. + /// + public const uint UadpDataSetMessageContentMask = 15646; + + /// + /// The identifier for the UadpDataSetWriterMessageDataType DataType. + /// + public const uint UadpDataSetWriterMessageDataType = 15652; + + /// + /// The identifier for the UadpDataSetReaderMessageDataType DataType. + /// + public const uint UadpDataSetReaderMessageDataType = 15653; + + /// + /// The identifier for the JsonNetworkMessageContentMask DataType. + /// + public const uint JsonNetworkMessageContentMask = 15654; + + /// + /// The identifier for the JsonWriterGroupMessageDataType DataType. + /// + public const uint JsonWriterGroupMessageDataType = 15657; + + /// + /// The identifier for the JsonDataSetMessageContentMask DataType. + /// + public const uint JsonDataSetMessageContentMask = 15658; + + /// + /// The identifier for the JsonDataSetWriterMessageDataType DataType. + /// + public const uint JsonDataSetWriterMessageDataType = 15664; + + /// + /// The identifier for the JsonDataSetReaderMessageDataType DataType. + /// + public const uint JsonDataSetReaderMessageDataType = 15665; + + /// + /// The identifier for the DatagramConnectionTransportDataType DataType. + /// + public const uint DatagramConnectionTransportDataType = 17467; + + /// + /// The identifier for the DatagramWriterGroupTransportDataType DataType. + /// + public const uint DatagramWriterGroupTransportDataType = 15532; + + /// + /// The identifier for the BrokerConnectionTransportDataType DataType. + /// + public const uint BrokerConnectionTransportDataType = 15007; + + /// + /// The identifier for the BrokerTransportQualityOfService DataType. + /// + public const uint BrokerTransportQualityOfService = 15008; + + /// + /// The identifier for the BrokerWriterGroupTransportDataType DataType. + /// + public const uint BrokerWriterGroupTransportDataType = 15667; + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType DataType. + /// + public const uint BrokerDataSetWriterTransportDataType = 15669; + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType DataType. + /// + public const uint BrokerDataSetReaderTransportDataType = 15670; + + /// + /// The identifier for the DiagnosticsLevel DataType. + /// + public const uint DiagnosticsLevel = 19723; + + /// + /// The identifier for the PubSubDiagnosticsCounterClassification DataType. + /// + public const uint PubSubDiagnosticsCounterClassification = 19730; + + /// + /// The identifier for the AliasNameDataType DataType. + /// + public const uint AliasNameDataType = 23468; + + /// + /// 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 PermissionType DataType. + /// + public const uint PermissionType = 94; + + /// + /// The identifier for the AccessLevelType DataType. + /// + public const uint AccessLevelType = 15031; + + /// + /// The identifier for the AccessLevelExType DataType. + /// + public const uint AccessLevelExType = 15406; + + /// + /// The identifier for the EventNotifierType DataType. + /// + public const uint EventNotifierType = 15033; + + /// + /// The identifier for the AccessRestrictionType DataType. + /// + public const uint AccessRestrictionType = 95; + + /// + /// The identifier for the RolePermissionType DataType. + /// + public const uint RolePermissionType = 96; + + /// + /// The identifier for the DataTypeDefinition DataType. + /// + public const uint DataTypeDefinition = 97; + + /// + /// The identifier for the StructureType DataType. + /// + public const uint StructureType = 98; + + /// + /// The identifier for the StructureField DataType. + /// + public const uint StructureField = 101; + + /// + /// The identifier for the StructureDefinition DataType. + /// + public const uint StructureDefinition = 99; + + /// + /// The identifier for the EnumDefinition DataType. + /// + public const uint EnumDefinition = 100; + + /// + /// 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 EnumField DataType. + /// + public const uint EnumField = 102; + + /// + /// The identifier for the OptionSet DataType. + /// + public const uint OptionSet = 12755; + + /// + /// The identifier for the Union DataType. + /// + public const uint Union = 12756; + + /// + /// The identifier for the NormalizedString DataType. + /// + public const uint NormalizedString = 12877; + + /// + /// The identifier for the DecimalString DataType. + /// + public const uint DecimalString = 12878; + + /// + /// The identifier for the DurationString DataType. + /// + public const uint DurationString = 12879; + + /// + /// The identifier for the TimeString DataType. + /// + public const uint TimeString = 12880; + + /// + /// The identifier for the DateString DataType. + /// + public const uint DateString = 12881; + + /// + /// 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 Index DataType. + /// + public const uint Index = 17588; + + /// + /// 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 VersionTime DataType. + /// + public const uint VersionTime = 20998; + + /// + /// The identifier for the ServiceFault DataType. + /// + public const uint ServiceFault = 395; + + /// + /// The identifier for the SessionlessInvokeRequestType DataType. + /// + public const uint SessionlessInvokeRequestType = 15901; + + /// + /// The identifier for the SessionlessInvokeResponseType DataType. + /// + public const uint SessionlessInvokeResponseType = 20999; + + /// + /// 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 ServerOnNetwork DataType. + /// + public const uint ServerOnNetwork = 12189; + + /// + /// The identifier for the FindServersOnNetworkRequest DataType. + /// + public const uint FindServersOnNetworkRequest = 12190; + + /// + /// The identifier for the FindServersOnNetworkResponse DataType. + /// + public const uint FindServersOnNetworkResponse = 12191; + + /// + /// 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 DiscoveryConfiguration DataType. + /// + public const uint DiscoveryConfiguration = 12890; + + /// + /// The identifier for the MdnsDiscoveryConfiguration DataType. + /// + public const uint MdnsDiscoveryConfiguration = 12891; + + /// + /// The identifier for the RegisterServer2Request DataType. + /// + public const uint RegisterServer2Request = 12193; + + /// + /// The identifier for the RegisterServer2Response DataType. + /// + public const uint RegisterServer2Response = 12194; + + /// + /// 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 RsaEncryptedSecret DataType. + /// + public const uint RsaEncryptedSecret = 17545; + + /// + /// 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 GenericAttributeValue DataType. + /// + public const uint GenericAttributeValue = 17606; + + /// + /// The identifier for the GenericAttributes DataType. + /// + public const uint GenericAttributes = 17607; + + /// + /// 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 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 ReadAnnotationDataDetails DataType. + /// + public const uint ReadAnnotationDataDetails = 23497; + + /// + /// 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 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 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 ProgramDiagnostic2DataType DataType. + /// + public const uint ProgramDiagnostic2DataType = 15396; + + /// + /// 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 OPCUANamespaceMetadata_NamespaceFile_Open Method. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Open = 15971; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Close Method. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Close = 15974; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Read Method. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Read = 15976; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Write Method. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Write = 15979; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_GetPosition Method. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_GetPosition = 15981; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_SetPosition Method. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_SetPosition = 15984; + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_AddRole Method. + /// + public const uint ServerType_ServerCapabilities_RoleSet_AddRole = 16290; + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_RemoveRole Method. + /// + public const uint ServerType_ServerCapabilities_RoleSet_RemoveRole = 16293; + + /// + /// The identifier for the ServerType_GetMonitoredItems Method. + /// + public const uint ServerType_GetMonitoredItems = 11489; + + /// + /// The identifier for the ServerType_ResendData Method. + /// + public const uint ServerType_ResendData = 12871; + + /// + /// The identifier for the ServerType_SetSubscriptionDurable Method. + /// + public const uint ServerType_SetSubscriptionDurable = 12746; + + /// + /// The identifier for the ServerType_RequestServerStateChange Method. + /// + public const uint ServerType_RequestServerStateChange = 12883; + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_AddRole Method. + /// + public const uint ServerCapabilitiesType_RoleSet_AddRole = 16296; + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_RemoveRole Method. + /// + public const uint ServerCapabilitiesType_RoleSet_RemoveRole = 16299; + + /// + /// 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 NamespaceMetadataType_NamespaceFile_Open Method. + /// + public const uint NamespaceMetadataType_NamespaceFile_Open = 11629; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Close Method. + /// + public const uint NamespaceMetadataType_NamespaceFile_Close = 11632; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Read Method. + /// + public const uint NamespaceMetadataType_NamespaceFile_Read = 11634; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Write Method. + /// + public const uint NamespaceMetadataType_NamespaceFile_Write = 11637; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_GetPosition Method. + /// + public const uint NamespaceMetadataType_NamespaceFile_GetPosition = 11639; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_SetPosition Method. + /// + public const uint NamespaceMetadataType_NamespaceFile_SetPosition = 11642; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open Method. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open = 11659; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close Method. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close = 11662; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read Method. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read = 11664; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write Method. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write = 11667; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition Method. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition = 11669; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition Method. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition = 11672; + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_AddRole Method. + /// + public const uint Server_ServerCapabilities_RoleSet_AddRole = 16301; + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_RemoveRole Method. + /// + public const uint Server_ServerCapabilities_RoleSet_RemoveRole = 16304; + + /// + /// The identifier for the Server_GetMonitoredItems Method. + /// + public const uint Server_GetMonitoredItems = 11492; + + /// + /// The identifier for the Server_ResendData Method. + /// + public const uint Server_ResendData = 12873; + + /// + /// The identifier for the Server_SetSubscriptionDurable Method. + /// + public const uint Server_SetSubscriptionDurable = 12749; + + /// + /// The identifier for the Server_RequestServerStateChange Method. + /// + public const uint Server_RequestServerStateChange = 12886; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory Method. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory = 13355; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateFile Method. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_CreateFile = 13358; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject Method. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject = 17718; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy Method. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy = 13363; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Open Method. + /// + public const uint FileDirectoryType_FileName_Placeholder_Open = 13372; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Close Method. + /// + public const uint FileDirectoryType_FileName_Placeholder_Close = 13375; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Read Method. + /// + public const uint FileDirectoryType_FileName_Placeholder_Read = 13377; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Write Method. + /// + public const uint FileDirectoryType_FileName_Placeholder_Write = 13380; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_GetPosition Method. + /// + public const uint FileDirectoryType_FileName_Placeholder_GetPosition = 13382; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_SetPosition Method. + /// + public const uint FileDirectoryType_FileName_Placeholder_SetPosition = 13385; + + /// + /// The identifier for the FileDirectoryType_CreateDirectory Method. + /// + public const uint FileDirectoryType_CreateDirectory = 13387; + + /// + /// The identifier for the FileDirectoryType_CreateFile Method. + /// + public const uint FileDirectoryType_CreateFile = 13390; + + /// + /// The identifier for the FileDirectoryType_DeleteFileSystemObject Method. + /// + public const uint FileDirectoryType_DeleteFileSystemObject = 13393; + + /// + /// The identifier for the FileDirectoryType_MoveOrCopy Method. + /// + public const uint FileDirectoryType_MoveOrCopy = 13395; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateDirectory Method. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_CreateDirectory = 16316; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateFile Method. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_CreateFile = 16319; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject Method. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject = 17722; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_MoveOrCopy Method. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_MoveOrCopy = 16324; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Open Method. + /// + public const uint FileSystem_FileName_Placeholder_Open = 16333; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Close Method. + /// + public const uint FileSystem_FileName_Placeholder_Close = 16336; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Read Method. + /// + public const uint FileSystem_FileName_Placeholder_Read = 16338; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Write Method. + /// + public const uint FileSystem_FileName_Placeholder_Write = 16341; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_GetPosition Method. + /// + public const uint FileSystem_FileName_Placeholder_GetPosition = 16343; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_SetPosition Method. + /// + public const uint FileSystem_FileName_Placeholder_SetPosition = 16346; + + /// + /// The identifier for the FileSystem_CreateDirectory Method. + /// + public const uint FileSystem_CreateDirectory = 16348; + + /// + /// The identifier for the FileSystem_CreateFile Method. + /// + public const uint FileSystem_CreateFile = 16351; + + /// + /// The identifier for the FileSystem_DeleteFileSystemObject Method. + /// + public const uint FileSystem_DeleteFileSystemObject = 16354; + + /// + /// The identifier for the FileSystem_MoveOrCopy Method. + /// + public const uint FileSystem_MoveOrCopy = 16356; + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForRead Method. + /// + public const uint TemporaryFileTransferType_GenerateFileForRead = 15746; + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForWrite Method. + /// + public const uint TemporaryFileTransferType_GenerateFileForWrite = 15749; + + /// + /// The identifier for the TemporaryFileTransferType_CloseAndCommit Method. + /// + public const uint TemporaryFileTransferType_CloseAndCommit = 15751; + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_Reset Method. + /// + public const uint TemporaryFileTransferType_TransferState_Placeholder_Reset = 15794; + + /// + /// The identifier for the FileTransferStateMachineType_Reset Method. + /// + public const uint FileTransferStateMachineType_Reset = 15843; + + /// + /// The identifier for the RoleSetType_AddRole Method. + /// + public const uint RoleSetType_AddRole = 15997; + + /// + /// The identifier for the RoleSetType_RemoveRole Method. + /// + public const uint RoleSetType_RemoveRole = 16000; + + /// + /// The identifier for the RoleType_AddIdentity Method. + /// + public const uint RoleType_AddIdentity = 15624; + + /// + /// The identifier for the RoleType_RemoveIdentity Method. + /// + public const uint RoleType_RemoveIdentity = 15626; + + /// + /// The identifier for the RoleType_AddApplication Method. + /// + public const uint RoleType_AddApplication = 16176; + + /// + /// The identifier for the RoleType_RemoveApplication Method. + /// + public const uint RoleType_RemoveApplication = 16178; + + /// + /// The identifier for the RoleType_AddEndpoint Method. + /// + public const uint RoleType_AddEndpoint = 16180; + + /// + /// The identifier for the RoleType_RemoveEndpoint Method. + /// + public const uint RoleType_RemoveEndpoint = 16182; + + /// + /// The identifier for the WellKnownRole_Anonymous_AddIdentity Method. + /// + public const uint WellKnownRole_Anonymous_AddIdentity = 15648; + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveIdentity Method. + /// + public const uint WellKnownRole_Anonymous_RemoveIdentity = 15650; + + /// + /// The identifier for the WellKnownRole_Anonymous_AddApplication Method. + /// + public const uint WellKnownRole_Anonymous_AddApplication = 16195; + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveApplication Method. + /// + public const uint WellKnownRole_Anonymous_RemoveApplication = 16197; + + /// + /// The identifier for the WellKnownRole_Anonymous_AddEndpoint Method. + /// + public const uint WellKnownRole_Anonymous_AddEndpoint = 16199; + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveEndpoint Method. + /// + public const uint WellKnownRole_Anonymous_RemoveEndpoint = 16201; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddIdentity Method. + /// + public const uint WellKnownRole_AuthenticatedUser_AddIdentity = 15660; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveIdentity Method. + /// + public const uint WellKnownRole_AuthenticatedUser_RemoveIdentity = 15662; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddApplication Method. + /// + public const uint WellKnownRole_AuthenticatedUser_AddApplication = 16206; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveApplication Method. + /// + public const uint WellKnownRole_AuthenticatedUser_RemoveApplication = 16208; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddEndpoint Method. + /// + public const uint WellKnownRole_AuthenticatedUser_AddEndpoint = 16210; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveEndpoint Method. + /// + public const uint WellKnownRole_AuthenticatedUser_RemoveEndpoint = 16212; + + /// + /// The identifier for the WellKnownRole_Observer_AddIdentity Method. + /// + public const uint WellKnownRole_Observer_AddIdentity = 15672; + + /// + /// The identifier for the WellKnownRole_Observer_RemoveIdentity Method. + /// + public const uint WellKnownRole_Observer_RemoveIdentity = 15674; + + /// + /// The identifier for the WellKnownRole_Observer_AddApplication Method. + /// + public const uint WellKnownRole_Observer_AddApplication = 16217; + + /// + /// The identifier for the WellKnownRole_Observer_RemoveApplication Method. + /// + public const uint WellKnownRole_Observer_RemoveApplication = 16219; + + /// + /// The identifier for the WellKnownRole_Observer_AddEndpoint Method. + /// + public const uint WellKnownRole_Observer_AddEndpoint = 16221; + + /// + /// The identifier for the WellKnownRole_Observer_RemoveEndpoint Method. + /// + public const uint WellKnownRole_Observer_RemoveEndpoint = 16223; + + /// + /// The identifier for the WellKnownRole_Operator_AddIdentity Method. + /// + public const uint WellKnownRole_Operator_AddIdentity = 15684; + + /// + /// The identifier for the WellKnownRole_Operator_RemoveIdentity Method. + /// + public const uint WellKnownRole_Operator_RemoveIdentity = 15686; + + /// + /// The identifier for the WellKnownRole_Operator_AddApplication Method. + /// + public const uint WellKnownRole_Operator_AddApplication = 16228; + + /// + /// The identifier for the WellKnownRole_Operator_RemoveApplication Method. + /// + public const uint WellKnownRole_Operator_RemoveApplication = 16230; + + /// + /// The identifier for the WellKnownRole_Operator_AddEndpoint Method. + /// + public const uint WellKnownRole_Operator_AddEndpoint = 16232; + + /// + /// The identifier for the WellKnownRole_Operator_RemoveEndpoint Method. + /// + public const uint WellKnownRole_Operator_RemoveEndpoint = 16234; + + /// + /// The identifier for the WellKnownRole_Engineer_AddIdentity Method. + /// + public const uint WellKnownRole_Engineer_AddIdentity = 16041; + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveIdentity Method. + /// + public const uint WellKnownRole_Engineer_RemoveIdentity = 16043; + + /// + /// The identifier for the WellKnownRole_Engineer_AddApplication Method. + /// + public const uint WellKnownRole_Engineer_AddApplication = 16239; + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveApplication Method. + /// + public const uint WellKnownRole_Engineer_RemoveApplication = 16241; + + /// + /// The identifier for the WellKnownRole_Engineer_AddEndpoint Method. + /// + public const uint WellKnownRole_Engineer_AddEndpoint = 16243; + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveEndpoint Method. + /// + public const uint WellKnownRole_Engineer_RemoveEndpoint = 16245; + + /// + /// The identifier for the WellKnownRole_Supervisor_AddIdentity Method. + /// + public const uint WellKnownRole_Supervisor_AddIdentity = 15696; + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveIdentity Method. + /// + public const uint WellKnownRole_Supervisor_RemoveIdentity = 15698; + + /// + /// The identifier for the WellKnownRole_Supervisor_AddApplication Method. + /// + public const uint WellKnownRole_Supervisor_AddApplication = 16250; + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveApplication Method. + /// + public const uint WellKnownRole_Supervisor_RemoveApplication = 16252; + + /// + /// The identifier for the WellKnownRole_Supervisor_AddEndpoint Method. + /// + public const uint WellKnownRole_Supervisor_AddEndpoint = 16254; + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveEndpoint Method. + /// + public const uint WellKnownRole_Supervisor_RemoveEndpoint = 16256; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddIdentity Method. + /// + public const uint WellKnownRole_ConfigureAdmin_AddIdentity = 15720; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveIdentity Method. + /// + public const uint WellKnownRole_ConfigureAdmin_RemoveIdentity = 15722; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddApplication Method. + /// + public const uint WellKnownRole_ConfigureAdmin_AddApplication = 16272; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveApplication Method. + /// + public const uint WellKnownRole_ConfigureAdmin_RemoveApplication = 16274; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddEndpoint Method. + /// + public const uint WellKnownRole_ConfigureAdmin_AddEndpoint = 16276; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveEndpoint Method. + /// + public const uint WellKnownRole_ConfigureAdmin_RemoveEndpoint = 16278; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddIdentity Method. + /// + public const uint WellKnownRole_SecurityAdmin_AddIdentity = 15708; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveIdentity Method. + /// + public const uint WellKnownRole_SecurityAdmin_RemoveIdentity = 15710; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddApplication Method. + /// + public const uint WellKnownRole_SecurityAdmin_AddApplication = 16261; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveApplication Method. + /// + public const uint WellKnownRole_SecurityAdmin_RemoveApplication = 16263; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddEndpoint Method. + /// + public const uint WellKnownRole_SecurityAdmin_AddEndpoint = 16265; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveEndpoint Method. + /// + public const uint WellKnownRole_SecurityAdmin_RemoveEndpoint = 16267; + + /// + /// 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 ConditionType_ConditionRefresh2 Method. + /// + public const uint ConditionType_ConditionRefresh2 = 12912; + + /// + /// The identifier for the DialogConditionType_Respond Method. + /// + public const uint DialogConditionType_Respond = 9069; + + /// + /// 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_TimedShelve Method. + /// + public const uint AlarmConditionType_ShelvingState_TimedShelve = 9213; + + /// + /// 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_Silence Method. + /// + public const uint AlarmConditionType_Silence = 16402; + + /// + /// The identifier for the AlarmConditionType_Suppress Method. + /// + public const uint AlarmConditionType_Suppress = 16403; + + /// + /// The identifier for the AlarmConditionType_Unsuppress Method. + /// + public const uint AlarmConditionType_Unsuppress = 17868; + + /// + /// The identifier for the AlarmConditionType_RemoveFromService Method. + /// + public const uint AlarmConditionType_RemoveFromService = 17869; + + /// + /// The identifier for the AlarmConditionType_PlaceInService Method. + /// + public const uint AlarmConditionType_PlaceInService = 17870; + + /// + /// The identifier for the AlarmConditionType_Reset Method. + /// + public const uint AlarmConditionType_Reset = 18199; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Disable Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Disable = 16439; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Enable Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Enable = 16440; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment = 16441; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge = 16461; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve = 16517; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve = 16515; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve Method. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve = 16516; + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelve Method. + /// + public const uint ShelvedStateMachineType_TimedShelve = 2949; + + /// + /// 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 LimitAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint LimitAlarmType_ShelvingState_TimedShelve = 9314; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_Unshelve Method. + /// + public const uint LimitAlarmType_ShelvingState_Unshelve = 9312; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint LimitAlarmType_ShelvingState_OneShotShelve = 9313; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_TimedShelve = 9451; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_Unshelve Method. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_Unshelve = 9449; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_OneShotShelve = 9450; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_TimedShelve = 10016; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_Unshelve Method. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_Unshelve = 10014; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve = 10015; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_TimedShelve = 10170; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_Unshelve Method. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_Unshelve = 10168; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve = 10169; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_TimedShelve = 9592; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_Unshelve Method. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_Unshelve = 9590; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_OneShotShelve = 9591; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve = 10478; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_Unshelve Method. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_Unshelve = 10476; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve = 10477; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve = 10324; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve Method. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve = 10322; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve = 10323; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_TimedShelve = 9874; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_Unshelve Method. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_Unshelve = 9872; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve = 9873; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve = 9733; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve Method. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve = 9731; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve = 9732; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint DiscreteAlarmType_ShelvingState_TimedShelve = 10633; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_Unshelve Method. + /// + public const uint DiscreteAlarmType_ShelvingState_Unshelve = 10631; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint DiscreteAlarmType_ShelvingState_OneShotShelve = 10632; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint OffNormalAlarmType_ShelvingState_TimedShelve = 10747; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_Unshelve Method. + /// + public const uint OffNormalAlarmType_ShelvingState_Unshelve = 10745; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint OffNormalAlarmType_ShelvingState_OneShotShelve = 10746; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_TimedShelve = 11846; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_Unshelve Method. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_Unshelve = 11844; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_OneShotShelve = 11845; + + /// + /// The identifier for the TripAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint TripAlarmType_ShelvingState_TimedShelve = 10861; + + /// + /// The identifier for the TripAlarmType_ShelvingState_Unshelve Method. + /// + public const uint TripAlarmType_ShelvingState_Unshelve = 10859; + + /// + /// The identifier for the TripAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint TripAlarmType_ShelvingState_OneShotShelve = 10860; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve = 18453; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_Unshelve Method. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_Unshelve = 18455; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve = 18456; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_TimedShelve = 18602; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_Unshelve Method. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_Unshelve = 18604; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_OneShotShelve = 18605; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_TimedShelve = 13320; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_Unshelve Method. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_Unshelve = 13318; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_OneShotShelve = 13319; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint DiscrepancyAlarmType_ShelvingState_TimedShelve = 17195; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_Unshelve Method. + /// + public const uint DiscrepancyAlarmType_ShelvingState_Unshelve = 17193; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint DiscrepancyAlarmType_ShelvingState_OneShotShelve = 17194; + + /// + /// The identifier for the AlarmMetricsType_Reset Method. + /// + public const uint AlarmMetricsType_Reset = 18666; + + /// + /// 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 TrustListType_OpenWithMasks Method. + /// + public const uint TrustListType_OpenWithMasks = 12543; + + /// + /// The identifier for the TrustListType_CloseAndUpdate Method. + /// + public const uint TrustListType_CloseAndUpdate = 12546; + + /// + /// The identifier for the TrustListType_AddCertificate Method. + /// + public const uint TrustListType_AddCertificate = 12548; + + /// + /// The identifier for the TrustListType_RemoveCertificate Method. + /// + public const uint TrustListType_RemoveCertificate = 12550; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_TimedShelve Method. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_TimedShelve = 19403; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_Unshelve Method. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_Unshelve = 19405; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_OneShotShelve Method. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_OneShotShelve = 19406; + + /// + /// The identifier for the CertificateGroupType_TrustList_Open Method. + /// + public const uint CertificateGroupType_TrustList_Open = 13605; + + /// + /// The identifier for the CertificateGroupType_TrustList_Close Method. + /// + public const uint CertificateGroupType_TrustList_Close = 13608; + + /// + /// The identifier for the CertificateGroupType_TrustList_Read Method. + /// + public const uint CertificateGroupType_TrustList_Read = 13610; + + /// + /// The identifier for the CertificateGroupType_TrustList_Write Method. + /// + public const uint CertificateGroupType_TrustList_Write = 13613; + + /// + /// The identifier for the CertificateGroupType_TrustList_GetPosition Method. + /// + public const uint CertificateGroupType_TrustList_GetPosition = 13615; + + /// + /// The identifier for the CertificateGroupType_TrustList_SetPosition Method. + /// + public const uint CertificateGroupType_TrustList_SetPosition = 13618; + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenWithMasks Method. + /// + public const uint CertificateGroupType_TrustList_OpenWithMasks = 13621; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Disable Method. + /// + public const uint CertificateGroupType_CertificateExpired_Disable = 19483; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Enable Method. + /// + public const uint CertificateGroupType_CertificateExpired_Enable = 19484; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AddComment Method. + /// + public const uint CertificateGroupType_CertificateExpired_AddComment = 19485; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateGroupType_CertificateExpired_Acknowledge = 19505; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve = 20097; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_Unshelve = 20099; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_OneShotShelve = 20100; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Disable = 20176; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Enable = 20177; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_AddComment = 20178; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Acknowledge = 20198; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve = 20245; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_Unshelve = 20247; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_OneShotShelve = 20248; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open = 13821; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close = 13824; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read = 13826; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write = 13829; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition = 13831; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition = 13834; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks = 13837; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Disable = 20324; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Enable = 20325; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment = 20326; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge = 20346; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = 20393; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = 20395; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = 20396; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Disable = 20474; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Enable = 20475; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment = 20476; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = 20496; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 20543; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = 20545; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 20546; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open = 13855; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close = 13858; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read = 13860; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write = 13863; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition = 13865; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition = 13868; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks = 13871; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Disable = 20622; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Enable = 20623; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment = 20624; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge = 20644; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = 20691; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = 20693; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = 20694; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Disable = 20770; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Enable = 20771; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment = 20772; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = 20792; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 20839; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = 20841; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 20842; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open = 13889; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close = 13892; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read = 13894; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write = 13897; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition = 13899; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition = 13902; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks = 13905; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Disable = 20918; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Enable = 20919; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment = 20920; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge = 20940; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = 20987; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = 20989; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = 20990; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Disable = 21269; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Enable = 21270; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = 21271; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = 21291; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 21338; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = 21340; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 21341; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open = 13923; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close = 13926; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read = 13928; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write = 13931; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition = 13933; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition = 13936; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks = 13939; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Disable Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Disable = 21417; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Enable Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Enable = 21418; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment = 21419; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge = 21439; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve = 21486; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_Unshelve = 21488; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_OneShotShelve = 21489; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Disable = 21565; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Enable = 21566; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment = 21567; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge = 21587; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve = 21634; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_Unshelve = 21636; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_OneShotShelve = 21637; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open = 13958; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close = 13961; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read = 13963; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write = 13966; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = 13968; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = 13971; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = 13974; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = 21713; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = 21714; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = 21715; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = 21735; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = 21782; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = 21784; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = 21785; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = 21861; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = 21862; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = 21863; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = 21883; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 21930; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = 21932; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 21933; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open = 13992; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close = 13995; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read = 13997; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write = 14000; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = 14002; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = 14005; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = 14008; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = 22009; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = 22010; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = 22011; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = 22031; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = 22078; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = 22080; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = 22081; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = 22157; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = 22158; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = 22159; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = 22179; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 22226; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = 22228; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 22229; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = 14026; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = 14029; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = 14031; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = 14034; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = 14036; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = 14039; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = 14042; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = 22305; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = 22306; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = 22307; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = 22327; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = 22374; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = 22376; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = 22377; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = 22453; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = 22454; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = 22455; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = 22475; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 22522; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = 22524; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 22525; + + /// + /// The identifier for the ServerConfigurationType_UpdateCertificate Method. + /// + public const uint ServerConfigurationType_UpdateCertificate = 12616; + + /// + /// The identifier for the ServerConfigurationType_ApplyChanges Method. + /// + public const uint ServerConfigurationType_ApplyChanges = 12734; + + /// + /// The identifier for the ServerConfigurationType_CreateSigningRequest Method. + /// + public const uint ServerConfigurationType_CreateSigningRequest = 12731; + + /// + /// The identifier for the ServerConfigurationType_GetRejectedList Method. + /// + public const uint ServerConfigurationType_GetRejectedList = 12775; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open = 12647; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close = 12650; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read = 12652; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write = 12655; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = 12657; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = 12660; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = 12663; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate = 12666; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate = 12668; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate = 12670; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = 22601; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = 22602; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = 22603; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = 22623; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = 22670; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = 22672; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = 22673; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = 22749; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = 22750; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = 22751; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = 22771; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 22818; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = 22820; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 22821; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open = 14095; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close = 14098; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read = 14100; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write = 14103; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = 14105; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = 14108; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = 14111; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate = 14114; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate = 14117; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate = 14119; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = 22897; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = 22898; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = 22899; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = 22919; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = 22966; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = 22968; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = 22969; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = 23045; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = 23046; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = 23047; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = 23067; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 23114; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = 23116; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 23117; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = 14129; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = 14132; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = 14134; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = 14137; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = 14139; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = 14142; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = 14145; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate = 14148; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate = 14151; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate = 14153; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = 23193; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = 23194; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = 23195; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = 23215; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = 23262; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = 23264; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = 23265; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = 23341; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = 23342; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = 23343; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = 23363; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 23410; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = 23412; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 23413; + + /// + /// The identifier for the ServerConfiguration_UpdateCertificate Method. + /// + public const uint ServerConfiguration_UpdateCertificate = 13737; + + /// + /// The identifier for the ServerConfiguration_ApplyChanges Method. + /// + public const uint ServerConfiguration_ApplyChanges = 12740; + + /// + /// The identifier for the ServerConfiguration_CreateSigningRequest Method. + /// + public const uint ServerConfiguration_CreateSigningRequest = 12737; + + /// + /// The identifier for the ServerConfiguration_GetRejectedList Method. + /// + public const uint ServerConfiguration_GetRejectedList = 12777; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_CreateCredential Method. + /// + public const uint KeyCredentialConfigurationFolderType_CreateCredential = 17522; + + /// + /// The identifier for the KeyCredentialConfigurationType_UpdateCredential Method. + /// + public const uint KeyCredentialConfigurationType_UpdateCredential = 18006; + + /// + /// The identifier for the KeyCredentialConfigurationType_DeleteCredential Method. + /// + public const uint KeyCredentialConfigurationType_DeleteCredential = 18008; + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityKeys Method. + /// + public const uint PubSubKeyServiceType_GetSecurityKeys = 15907; + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityGroup Method. + /// + public const uint PubSubKeyServiceType_GetSecurityGroup = 15910; + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_AddSecurityGroup Method. + /// + public const uint PubSubKeyServiceType_SecurityGroups_AddSecurityGroup = 15914; + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup Method. + /// + public const uint PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup = 15917; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup Method. + /// + public const uint SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup = 15454; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup Method. + /// + public const uint SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup = 15457; + + /// + /// The identifier for the SecurityGroupFolderType_AddSecurityGroup Method. + /// + public const uint SecurityGroupFolderType_AddSecurityGroup = 15461; + + /// + /// The identifier for the SecurityGroupFolderType_RemoveSecurityGroup Method. + /// + public const uint SecurityGroupFolderType_RemoveSecurityGroup = 15464; + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_AddSecurityGroup Method. + /// + public const uint PublishSubscribeType_SecurityGroups_AddSecurityGroup = 15435; + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_RemoveSecurityGroup Method. + /// + public const uint PublishSubscribeType_SecurityGroups_RemoveSecurityGroup = 15438; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset = 18679; + + /// + /// The identifier for the PublishSubscribeType_SetSecurityKeys Method. + /// + public const uint PublishSubscribeType_SetSecurityKeys = 17296; + + /// + /// The identifier for the PublishSubscribeType_AddConnection Method. + /// + public const uint PublishSubscribeType_AddConnection = 16598; + + /// + /// The identifier for the PublishSubscribeType_RemoveConnection Method. + /// + public const uint PublishSubscribeType_RemoveConnection = 14432; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Reset Method. + /// + public const uint PublishSubscribeType_Diagnostics_Reset = 18727; + + /// + /// The identifier for the PublishSubscribe_GetSecurityKeys Method. + /// + public const uint PublishSubscribe_GetSecurityKeys = 15215; + + /// + /// The identifier for the PublishSubscribe_GetSecurityGroup Method. + /// + public const uint PublishSubscribe_GetSecurityGroup = 15440; + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_AddSecurityGroup Method. + /// + public const uint PublishSubscribe_SecurityGroups_AddSecurityGroup = 15444; + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_RemoveSecurityGroup Method. + /// + public const uint PublishSubscribe_SecurityGroups_RemoveSecurityGroup = 15447; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset = 16076; + + /// + /// The identifier for the PublishSubscribe_AddConnection Method. + /// + public const uint PublishSubscribe_AddConnection = 17366; + + /// + /// The identifier for the PublishSubscribe_RemoveConnection Method. + /// + public const uint PublishSubscribe_RemoveConnection = 17369; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Reset Method. + /// + public const uint PublishSubscribe_Diagnostics_Reset = 17421; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset = 18883; + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_AddExtensionField Method. + /// + public const uint PublishedDataSetType_ExtensionFields_AddExtensionField = 15482; + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_RemoveExtensionField Method. + /// + public const uint PublishedDataSetType_ExtensionFields_RemoveExtensionField = 15485; + + /// + /// The identifier for the ExtensionFieldsType_AddExtensionField Method. + /// + public const uint ExtensionFieldsType_AddExtensionField = 15491; + + /// + /// The identifier for the ExtensionFieldsType_RemoveExtensionField Method. + /// + public const uint ExtensionFieldsType_RemoveExtensionField = 15494; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset = 18942; + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_AddExtensionField Method. + /// + public const uint PublishedDataItemsType_ExtensionFields_AddExtensionField = 15504; + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_RemoveExtensionField Method. + /// + public const uint PublishedDataItemsType_ExtensionFields_RemoveExtensionField = 15507; + + /// + /// The identifier for the PublishedDataItemsType_AddVariables Method. + /// + public const uint PublishedDataItemsType_AddVariables = 14555; + + /// + /// The identifier for the PublishedDataItemsType_RemoveVariables Method. + /// + public const uint PublishedDataItemsType_RemoveVariables = 14558; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset = 19001; + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_AddExtensionField Method. + /// + public const uint PublishedEventsType_ExtensionFields_AddExtensionField = 15512; + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_RemoveExtensionField Method. + /// + public const uint PublishedEventsType_ExtensionFields_RemoveExtensionField = 15515; + + /// + /// The identifier for the PublishedEventsType_ModifyFieldSelection Method. + /// + public const uint PublishedEventsType_ModifyFieldSelection = 15052; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems = 14479; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents = 14482; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate = 16842; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate = 16881; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet = 14485; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder = 16884; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder Method. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder = 16923; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField Method. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField = 15474; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField Method. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField = 15477; + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItems Method. + /// + public const uint DataSetFolderType_AddPublishedDataItems = 14493; + + /// + /// The identifier for the DataSetFolderType_AddPublishedEvents Method. + /// + public const uint DataSetFolderType_AddPublishedEvents = 14496; + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItemsTemplate Method. + /// + public const uint DataSetFolderType_AddPublishedDataItemsTemplate = 16935; + + /// + /// The identifier for the DataSetFolderType_AddPublishedEventsTemplate Method. + /// + public const uint DataSetFolderType_AddPublishedEventsTemplate = 16960; + + /// + /// The identifier for the DataSetFolderType_RemovePublishedDataSet Method. + /// + public const uint DataSetFolderType_RemovePublishedDataSet = 14499; + + /// + /// The identifier for the DataSetFolderType_AddDataSetFolder Method. + /// + public const uint DataSetFolderType_AddDataSetFolder = 16994; + + /// + /// The identifier for the DataSetFolderType_RemoveDataSetFolder Method. + /// + public const uint DataSetFolderType_RemoveDataSetFolder = 16997; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset = 19119; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset Method. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset = 19188; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Reset Method. + /// + public const uint PubSubConnectionType_Diagnostics_Reset = 19253; + + /// + /// The identifier for the PubSubConnectionType_AddWriterGroup Method. + /// + public const uint PubSubConnectionType_AddWriterGroup = 17427; + + /// + /// The identifier for the PubSubConnectionType_AddReaderGroup Method. + /// + public const uint PubSubConnectionType_AddReaderGroup = 17465; + + /// + /// The identifier for the PubSubConnectionType_RemoveGroup Method. + /// + public const uint PubSubConnectionType_RemoveGroup = 14225; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset = 17765; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Reset Method. + /// + public const uint WriterGroupType_Diagnostics_Reset = 17824; + + /// + /// The identifier for the WriterGroupType_AddDataSetWriter Method. + /// + public const uint WriterGroupType_AddDataSetWriter = 17969; + + /// + /// The identifier for the WriterGroupType_RemoveDataSetWriter Method. + /// + public const uint WriterGroupType_RemoveDataSetWriter = 17992; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset Method. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset = 18104; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Reset Method. + /// + public const uint ReaderGroupType_Diagnostics_Reset = 21027; + + /// + /// The identifier for the ReaderGroupType_AddDataSetReader Method. + /// + public const uint ReaderGroupType_AddDataSetReader = 21082; + + /// + /// The identifier for the ReaderGroupType_RemoveDataSetReader Method. + /// + public const uint ReaderGroupType_RemoveDataSetReader = 21085; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Reset Method. + /// + public const uint DataSetWriterType_Diagnostics_Reset = 19562; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Reset Method. + /// + public const uint DataSetReaderType_Diagnostics_Reset = 19621; + + /// + /// The identifier for the DataSetReaderType_CreateTargetVariables Method. + /// + public const uint DataSetReaderType_CreateTargetVariables = 17386; + + /// + /// The identifier for the DataSetReaderType_CreateDataSetMirror Method. + /// + public const uint DataSetReaderType_CreateDataSetMirror = 17389; + + /// + /// The identifier for the TargetVariablesType_AddTargetVariables Method. + /// + public const uint TargetVariablesType_AddTargetVariables = 15115; + + /// + /// The identifier for the TargetVariablesType_RemoveTargetVariables Method. + /// + public const uint TargetVariablesType_RemoveTargetVariables = 15118; + + /// + /// The identifier for the PubSubStatusType_Enable Method. + /// + public const uint PubSubStatusType_Enable = 14645; + + /// + /// The identifier for the PubSubStatusType_Disable Method. + /// + public const uint PubSubStatusType_Disable = 14646; + + /// + /// The identifier for the PubSubDiagnosticsType_Reset Method. + /// + public const uint PubSubDiagnosticsType_Reset = 19689; + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public const uint AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias = 23459; + + /// + /// The identifier for the AliasNameCategoryType_FindAlias Method. + /// + public const uint AliasNameCategoryType_FindAlias = 23462; + + /// + /// The identifier for the Aliases_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public const uint Aliases_SubAliasNameCategories_Placeholder_FindAlias = 23473; + + /// + /// The identifier for the Aliases_FindAlias Method. + /// + public const uint Aliases_FindAlias = 23476; + + /// + /// The identifier for the TagVariables_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public const uint TagVariables_SubAliasNameCategories_Placeholder_FindAlias = 23482; + + /// + /// The identifier for the TagVariables_FindAlias Method. + /// + public const uint TagVariables_FindAlias = 23485; + + /// + /// The identifier for the Topics_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public const uint Topics_SubAliasNameCategories_Placeholder_FindAlias = 23491; + + /// + /// The identifier for the Topics_FindAlias Method. + /// + public const uint Topics_FindAlias = 23494; + } + #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_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 OPCUANamespaceMetadata Object. + /// + public const uint OPCUANamespaceMetadata = 15957; + + /// + /// 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 ServerCapabilitiesType_RoleSet Object. + /// + public const uint ServerCapabilitiesType_RoleSet = 16295; + + /// + /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary Object. + /// + public const uint ServerDiagnosticsType_SessionsDiagnosticsSummary = 2744; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder Object. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder = 12097; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile Object. + /// + public const uint NamespaceMetadataType_NamespaceFile = 11624; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder Object. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder = 11646; + + /// + /// 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_OperationLimits Object. + /// + public const uint Server_ServerCapabilities_OperationLimits = 11704; + + /// + /// 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_ServerCapabilities_RoleSet Object. + /// + public const uint Server_ServerCapabilities_RoleSet = 15606; + + /// + /// 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 FileDirectoryType_FileDirectoryName_Placeholder Object. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder = 13354; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder Object. + /// + public const uint FileDirectoryType_FileName_Placeholder = 13366; + + /// + /// The identifier for the FileSystem Object. + /// + public const uint FileSystem = 16314; + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder Object. + /// + public const uint TemporaryFileTransferType_TransferState_Placeholder = 15754; + + /// + /// The identifier for the FileTransferStateMachineType_Idle Object. + /// + public const uint FileTransferStateMachineType_Idle = 15815; + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepare Object. + /// + public const uint FileTransferStateMachineType_ReadPrepare = 15817; + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransfer Object. + /// + public const uint FileTransferStateMachineType_ReadTransfer = 15819; + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWrite Object. + /// + public const uint FileTransferStateMachineType_ApplyWrite = 15821; + + /// + /// The identifier for the FileTransferStateMachineType_Error Object. + /// + public const uint FileTransferStateMachineType_Error = 15823; + + /// + /// The identifier for the FileTransferStateMachineType_IdleToReadPrepare Object. + /// + public const uint FileTransferStateMachineType_IdleToReadPrepare = 15825; + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToReadTransfer Object. + /// + public const uint FileTransferStateMachineType_ReadPrepareToReadTransfer = 15827; + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToIdle Object. + /// + public const uint FileTransferStateMachineType_ReadTransferToIdle = 15829; + + /// + /// The identifier for the FileTransferStateMachineType_IdleToApplyWrite Object. + /// + public const uint FileTransferStateMachineType_IdleToApplyWrite = 15831; + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToIdle Object. + /// + public const uint FileTransferStateMachineType_ApplyWriteToIdle = 15833; + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToError Object. + /// + public const uint FileTransferStateMachineType_ReadPrepareToError = 15835; + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToError Object. + /// + public const uint FileTransferStateMachineType_ReadTransferToError = 15837; + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToError Object. + /// + public const uint FileTransferStateMachineType_ApplyWriteToError = 15839; + + /// + /// The identifier for the FileTransferStateMachineType_ErrorToIdle Object. + /// + public const uint FileTransferStateMachineType_ErrorToIdle = 15841; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder Object. + /// + public const uint RoleSetType_RoleName_Placeholder = 15608; + + /// + /// The identifier for the WellKnownRole_Anonymous Object. + /// + public const uint WellKnownRole_Anonymous = 15644; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser Object. + /// + public const uint WellKnownRole_AuthenticatedUser = 15656; + + /// + /// The identifier for the WellKnownRole_Observer Object. + /// + public const uint WellKnownRole_Observer = 15668; + + /// + /// The identifier for the WellKnownRole_Operator Object. + /// + public const uint WellKnownRole_Operator = 15680; + + /// + /// The identifier for the WellKnownRole_Engineer Object. + /// + public const uint WellKnownRole_Engineer = 16036; + + /// + /// The identifier for the WellKnownRole_Supervisor Object. + /// + public const uint WellKnownRole_Supervisor = 15692; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin Object. + /// + public const uint WellKnownRole_ConfigureAdmin = 15716; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin Object. + /// + public const uint WellKnownRole_SecurityAdmin = 15704; + + /// + /// The identifier for the DictionaryEntryType_DictionaryEntryName_Placeholder Object. + /// + public const uint DictionaryEntryType_DictionaryEntryName_Placeholder = 17590; + + /// + /// The identifier for the DictionaryFolderType_DictionaryFolderName_Placeholder Object. + /// + public const uint DictionaryFolderType_DictionaryFolderName_Placeholder = 17592; + + /// + /// The identifier for the DictionaryFolderType_DictionaryEntryName_Placeholder Object. + /// + public const uint DictionaryFolderType_DictionaryEntryName_Placeholder = 17593; + + /// + /// The identifier for the Dictionaries Object. + /// + public const uint Dictionaries = 17594; + + /// + /// The identifier for the InterfaceTypes Object. + /// + public const uint InterfaceTypes = 17708; + + /// + /// The identifier for the OrderedListType_OrderedObject_Placeholder Object. + /// + public const uint OrderedListType_OrderedObject_Placeholder = 23519; + + /// + /// The identifier for the AlarmConditionType_ShelvingState Object. + /// + public const uint AlarmConditionType_ShelvingState = 9178; + + /// + /// The identifier for the AlarmConditionType_FirstInGroup Object. + /// + public const uint AlarmConditionType_FirstInGroup = 16398; + + /// + /// The identifier for the AlarmConditionType_AlarmGroup_Placeholder Object. + /// + public const uint AlarmConditionType_AlarmGroup_Placeholder = 16399; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder Object. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder = 16406; + + /// + /// 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_Halted Object. + /// + public const uint ProgramStateMachineType_Halted = 2406; + + /// + /// 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_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 CertificateGroupType_TrustList Object. + /// + public const uint CertificateGroupType_TrustList = 13599; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired Object. + /// + public const uint CertificateGroupType_CertificateExpired = 19450; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate Object. + /// + public const uint CertificateGroupType_TrustListOutOfDate = 20143; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup Object. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup = 13814; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList Object. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList = 13815; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup Object. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup = 13848; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList Object. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList = 13849; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup Object. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup = 13882; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList Object. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList = 13883; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder Object. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder = 13916; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList Object. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList = 13917; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups Object. + /// + public const uint ServerConfigurationType_CertificateGroups = 13950; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup Object. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup = 13951; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList = 13952; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList = 13986; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList = 14020; + + /// + /// The identifier for the ServerConfiguration Object. + /// + public const uint ServerConfiguration = 12637; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups Object. + /// + public const uint ServerConfiguration_CertificateGroups = 14053; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup Object. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup = 14156; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList = 12642; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup Object. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup = 14088; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList = 14089; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup Object. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup = 14122; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList = 14123; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder Object. + /// + public const uint KeyCredentialConfigurationFolderType_ServiceName_Placeholder = 17511; + + /// + /// The identifier for the KeyCredentialConfiguration Object. + /// + public const uint KeyCredentialConfiguration = 18155; + + /// + /// The identifier for the AuthorizationServices Object. + /// + public const uint AuthorizationServices = 17732; + + /// + /// 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 PubSubKeyServiceType_SecurityGroups Object. + /// + public const uint PubSubKeyServiceType_SecurityGroups = 15913; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder Object. + /// + public const uint SecurityGroupFolderType_SecurityGroupFolderName_Placeholder = 15453; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder Object. + /// + public const uint SecurityGroupFolderType_SecurityGroupName_Placeholder = 15459; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder Object. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder = 14417; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Address Object. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Address = 14423; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Status Object. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Status = 14419; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters = 18681; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues = 18712; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets Object. + /// + public const uint PublishSubscribeType_PublishedDataSets = 14434; + + /// + /// The identifier for the PublishSubscribeType_Status Object. + /// + public const uint PublishSubscribeType_Status = 15844; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics Object. + /// + public const uint PublishSubscribeType_Diagnostics = 18715; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters Object. + /// + public const uint PublishSubscribeType_Diagnostics_Counters = 18729; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues Object. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues = 18760; + + /// + /// The identifier for the PublishSubscribe Object. + /// + public const uint PublishSubscribe = 14443; + + /// + /// The identifier for the PublishSubscribe_SecurityGroups Object. + /// + public const uint PublishSubscribe_SecurityGroups = 15443; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Address Object. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Address = 15851; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Status Object. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Status = 15865; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters = 16102; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues = 17352; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets Object. + /// + public const uint PublishSubscribe_PublishedDataSets = 17371; + + /// + /// The identifier for the PublishSubscribe_Status Object. + /// + public const uint PublishSubscribe_Status = 17405; + + /// + /// The identifier for the PublishSubscribe_Diagnostics Object. + /// + public const uint PublishSubscribe_Diagnostics = 17409; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters Object. + /// + public const uint PublishSubscribe_Diagnostics_Counters = 17423; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues Object. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues = 17457; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder Object. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder = 15222; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Status Object. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Status = 15223; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters = 18885; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = 18916; + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields Object. + /// + public const uint PublishedDataSetType_ExtensionFields = 15481; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Status Object. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Status = 15231; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters = 18944; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = 18975; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Status Object. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Status = 15239; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters = 19003; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = 19034; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder Object. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder = 14478; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder Object. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder = 14487; + + /// + /// The identifier for the PubSubConnectionType_Address Object. + /// + public const uint PubSubConnectionType_Address = 14221; + + /// + /// The identifier for the PubSubConnectionType_TransportSettings Object. + /// + public const uint PubSubConnectionType_TransportSettings = 17203; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder Object. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder = 17310; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Status Object. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Status = 17314; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters = 19121; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues = 19152; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder Object. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder = 17325; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Status Object. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Status = 17329; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters Object. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters = 19190; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues = 19221; + + /// + /// The identifier for the PubSubConnectionType_Status Object. + /// + public const uint PubSubConnectionType_Status = 14600; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics Object. + /// + public const uint PubSubConnectionType_Diagnostics = 19241; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters Object. + /// + public const uint PubSubConnectionType_Diagnostics_Counters = 19255; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_LiveValues Object. + /// + public const uint PubSubConnectionType_Diagnostics_LiveValues = 19286; + + /// + /// The identifier for the PubSubGroupType_Status Object. + /// + public const uint PubSubGroupType_Status = 15265; + + /// + /// The identifier for the WriterGroupType_TransportSettings Object. + /// + public const uint WriterGroupType_TransportSettings = 17741; + + /// + /// The identifier for the WriterGroupType_MessageSettings Object. + /// + public const uint WriterGroupType_MessageSettings = 17742; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder Object. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder = 17743; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Status Object. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Status = 17749; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters = 17767; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = 17798; + + /// + /// The identifier for the WriterGroupType_Diagnostics Object. + /// + public const uint WriterGroupType_Diagnostics = 17812; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters Object. + /// + public const uint WriterGroupType_Diagnostics_Counters = 17826; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues Object. + /// + public const uint WriterGroupType_Diagnostics_LiveValues = 17858; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder Object. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder = 18076; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Status Object. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Status = 18088; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters Object. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters = 18106; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues Object. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues = 18137; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet Object. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet = 21006; + + /// + /// The identifier for the ReaderGroupType_Diagnostics Object. + /// + public const uint ReaderGroupType_Diagnostics = 21015; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters Object. + /// + public const uint ReaderGroupType_Diagnostics_Counters = 21029; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues Object. + /// + public const uint ReaderGroupType_Diagnostics_LiveValues = 21060; + + /// + /// The identifier for the ReaderGroupType_TransportSettings Object. + /// + public const uint ReaderGroupType_TransportSettings = 21080; + + /// + /// The identifier for the ReaderGroupType_MessageSettings Object. + /// + public const uint ReaderGroupType_MessageSettings = 21081; + + /// + /// The identifier for the DataSetWriterType_TransportSettings Object. + /// + public const uint DataSetWriterType_TransportSettings = 15303; + + /// + /// The identifier for the DataSetWriterType_MessageSettings Object. + /// + public const uint DataSetWriterType_MessageSettings = 21095; + + /// + /// The identifier for the DataSetWriterType_Status Object. + /// + public const uint DataSetWriterType_Status = 15299; + + /// + /// The identifier for the DataSetWriterType_Diagnostics Object. + /// + public const uint DataSetWriterType_Diagnostics = 19550; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters Object. + /// + public const uint DataSetWriterType_Diagnostics_Counters = 19564; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues Object. + /// + public const uint DataSetWriterType_Diagnostics_LiveValues = 19595; + + /// + /// The identifier for the DataSetReaderType_TransportSettings Object. + /// + public const uint DataSetReaderType_TransportSettings = 15311; + + /// + /// The identifier for the DataSetReaderType_MessageSettings Object. + /// + public const uint DataSetReaderType_MessageSettings = 21103; + + /// + /// The identifier for the DataSetReaderType_Status Object. + /// + public const uint DataSetReaderType_Status = 15307; + + /// + /// The identifier for the DataSetReaderType_Diagnostics Object. + /// + public const uint DataSetReaderType_Diagnostics = 19609; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters Object. + /// + public const uint DataSetReaderType_Diagnostics_Counters = 19623; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues Object. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues = 19654; + + /// + /// The identifier for the DataSetReaderType_SubscribedDataSet Object. + /// + public const uint DataSetReaderType_SubscribedDataSet = 15316; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters Object. + /// + public const uint PubSubDiagnosticsType_Counters = 19691; + + /// + /// The identifier for the PubSubDiagnosticsType_LiveValues Object. + /// + public const uint PubSubDiagnosticsType_LiveValues = 19722; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues Object. + /// + public const uint PubSubDiagnosticsRootType_LiveValues = 19777; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_LiveValues Object. + /// + public const uint PubSubDiagnosticsConnectionType_LiveValues = 19831; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters Object. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters = 19848; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues Object. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues = 19879; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters Object. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters = 19917; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues Object. + /// + public const uint PubSubDiagnosticsReaderGroupType_LiveValues = 19948; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters Object. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters = 19982; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues Object. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues = 20013; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters Object. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters = 20041; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues Object. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues = 20072; + + /// + /// The identifier for the DatagramConnectionTransportType_DiscoveryAddress Object. + /// + public const uint DatagramConnectionTransportType_DiscoveryAddress = 15072; + + /// + /// The identifier for the AliasNameCategoryType_Alias_Placeholder Object. + /// + public const uint AliasNameCategoryType_Alias_Placeholder = 23457; + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder Object. + /// + public const uint AliasNameCategoryType_SubAliasNameCategories_Placeholder = 23458; + + /// + /// The identifier for the Aliases Object. + /// + public const uint Aliases = 23470; + + /// + /// The identifier for the TagVariables Object. + /// + public const uint TagVariables = 23479; + + /// + /// The identifier for the Topics Object. + /// + public const uint Topics = 23488; + + /// + /// The identifier for the KeyValuePair_Encoding_DefaultBinary Object. + /// + public const uint KeyValuePair_Encoding_DefaultBinary = 14846; + + /// + /// The identifier for the EndpointType_Encoding_DefaultBinary Object. + /// + public const uint EndpointType_Encoding_DefaultBinary = 15671; + + /// + /// The identifier for the RationalNumber_Encoding_DefaultBinary Object. + /// + public const uint RationalNumber_Encoding_DefaultBinary = 18815; + + /// + /// The identifier for the Vector_Encoding_DefaultBinary Object. + /// + public const uint Vector_Encoding_DefaultBinary = 18816; + + /// + /// The identifier for the ThreeDVector_Encoding_DefaultBinary Object. + /// + public const uint ThreeDVector_Encoding_DefaultBinary = 18817; + + /// + /// The identifier for the CartesianCoordinates_Encoding_DefaultBinary Object. + /// + public const uint CartesianCoordinates_Encoding_DefaultBinary = 18818; + + /// + /// The identifier for the ThreeDCartesianCoordinates_Encoding_DefaultBinary Object. + /// + public const uint ThreeDCartesianCoordinates_Encoding_DefaultBinary = 18819; + + /// + /// The identifier for the Orientation_Encoding_DefaultBinary Object. + /// + public const uint Orientation_Encoding_DefaultBinary = 18820; + + /// + /// The identifier for the ThreeDOrientation_Encoding_DefaultBinary Object. + /// + public const uint ThreeDOrientation_Encoding_DefaultBinary = 18821; + + /// + /// The identifier for the Frame_Encoding_DefaultBinary Object. + /// + public const uint Frame_Encoding_DefaultBinary = 18822; + + /// + /// The identifier for the ThreeDFrame_Encoding_DefaultBinary Object. + /// + public const uint ThreeDFrame_Encoding_DefaultBinary = 18823; + + /// + /// The identifier for the IdentityMappingRuleType_Encoding_DefaultBinary Object. + /// + public const uint IdentityMappingRuleType_Encoding_DefaultBinary = 15736; + + /// + /// The identifier for the CurrencyUnitType_Encoding_DefaultBinary Object. + /// + public const uint CurrencyUnitType_Encoding_DefaultBinary = 23507; + + /// + /// The identifier for the TrustListDataType_Encoding_DefaultBinary Object. + /// + public const uint TrustListDataType_Encoding_DefaultBinary = 12680; + + /// + /// The identifier for the DecimalDataType_Encoding_DefaultBinary Object. + /// + public const uint DecimalDataType_Encoding_DefaultBinary = 17863; + + /// + /// The identifier for the DataTypeSchemaHeader_Encoding_DefaultBinary Object. + /// + public const uint DataTypeSchemaHeader_Encoding_DefaultBinary = 15676; + + /// + /// The identifier for the DataTypeDescription_Encoding_DefaultBinary Object. + /// + public const uint DataTypeDescription_Encoding_DefaultBinary = 125; + + /// + /// The identifier for the StructureDescription_Encoding_DefaultBinary Object. + /// + public const uint StructureDescription_Encoding_DefaultBinary = 126; + + /// + /// The identifier for the EnumDescription_Encoding_DefaultBinary Object. + /// + public const uint EnumDescription_Encoding_DefaultBinary = 127; + + /// + /// The identifier for the SimpleTypeDescription_Encoding_DefaultBinary Object. + /// + public const uint SimpleTypeDescription_Encoding_DefaultBinary = 15421; + + /// + /// The identifier for the UABinaryFileDataType_Encoding_DefaultBinary Object. + /// + public const uint UABinaryFileDataType_Encoding_DefaultBinary = 15422; + + /// + /// The identifier for the DataSetMetaDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetMetaDataType_Encoding_DefaultBinary = 124; + + /// + /// The identifier for the FieldMetaData_Encoding_DefaultBinary Object. + /// + public const uint FieldMetaData_Encoding_DefaultBinary = 14839; + + /// + /// The identifier for the ConfigurationVersionDataType_Encoding_DefaultBinary Object. + /// + public const uint ConfigurationVersionDataType_Encoding_DefaultBinary = 14847; + + /// + /// The identifier for the PublishedDataSetDataType_Encoding_DefaultBinary Object. + /// + public const uint PublishedDataSetDataType_Encoding_DefaultBinary = 15677; + + /// + /// The identifier for the PublishedDataSetSourceDataType_Encoding_DefaultBinary Object. + /// + public const uint PublishedDataSetSourceDataType_Encoding_DefaultBinary = 15678; + + /// + /// The identifier for the PublishedVariableDataType_Encoding_DefaultBinary Object. + /// + public const uint PublishedVariableDataType_Encoding_DefaultBinary = 14323; + + /// + /// The identifier for the PublishedDataItemsDataType_Encoding_DefaultBinary Object. + /// + public const uint PublishedDataItemsDataType_Encoding_DefaultBinary = 15679; + + /// + /// The identifier for the PublishedEventsDataType_Encoding_DefaultBinary Object. + /// + public const uint PublishedEventsDataType_Encoding_DefaultBinary = 15681; + + /// + /// The identifier for the DataSetWriterDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetWriterDataType_Encoding_DefaultBinary = 15682; + + /// + /// The identifier for the DataSetWriterTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetWriterTransportDataType_Encoding_DefaultBinary = 15683; + + /// + /// The identifier for the DataSetWriterMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetWriterMessageDataType_Encoding_DefaultBinary = 15688; + + /// + /// The identifier for the PubSubGroupDataType_Encoding_DefaultBinary Object. + /// + public const uint PubSubGroupDataType_Encoding_DefaultBinary = 15689; + + /// + /// The identifier for the WriterGroupDataType_Encoding_DefaultBinary Object. + /// + public const uint WriterGroupDataType_Encoding_DefaultBinary = 21150; + + /// + /// The identifier for the WriterGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint WriterGroupTransportDataType_Encoding_DefaultBinary = 15691; + + /// + /// The identifier for the WriterGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint WriterGroupMessageDataType_Encoding_DefaultBinary = 15693; + + /// + /// The identifier for the PubSubConnectionDataType_Encoding_DefaultBinary Object. + /// + public const uint PubSubConnectionDataType_Encoding_DefaultBinary = 15694; + + /// + /// The identifier for the ConnectionTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint ConnectionTransportDataType_Encoding_DefaultBinary = 15695; + + /// + /// The identifier for the NetworkAddressDataType_Encoding_DefaultBinary Object. + /// + public const uint NetworkAddressDataType_Encoding_DefaultBinary = 21151; + + /// + /// The identifier for the NetworkAddressUrlDataType_Encoding_DefaultBinary Object. + /// + public const uint NetworkAddressUrlDataType_Encoding_DefaultBinary = 21152; + + /// + /// The identifier for the ReaderGroupDataType_Encoding_DefaultBinary Object. + /// + public const uint ReaderGroupDataType_Encoding_DefaultBinary = 21153; + + /// + /// The identifier for the ReaderGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint ReaderGroupTransportDataType_Encoding_DefaultBinary = 15701; + + /// + /// The identifier for the ReaderGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint ReaderGroupMessageDataType_Encoding_DefaultBinary = 15702; + + /// + /// The identifier for the DataSetReaderDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetReaderDataType_Encoding_DefaultBinary = 15703; + + /// + /// The identifier for the DataSetReaderTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetReaderTransportDataType_Encoding_DefaultBinary = 15705; + + /// + /// The identifier for the DataSetReaderMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint DataSetReaderMessageDataType_Encoding_DefaultBinary = 15706; + + /// + /// The identifier for the SubscribedDataSetDataType_Encoding_DefaultBinary Object. + /// + public const uint SubscribedDataSetDataType_Encoding_DefaultBinary = 15707; + + /// + /// The identifier for the TargetVariablesDataType_Encoding_DefaultBinary Object. + /// + public const uint TargetVariablesDataType_Encoding_DefaultBinary = 15712; + + /// + /// The identifier for the FieldTargetDataType_Encoding_DefaultBinary Object. + /// + public const uint FieldTargetDataType_Encoding_DefaultBinary = 14848; + + /// + /// The identifier for the SubscribedDataSetMirrorDataType_Encoding_DefaultBinary Object. + /// + public const uint SubscribedDataSetMirrorDataType_Encoding_DefaultBinary = 15713; + + /// + /// The identifier for the PubSubConfigurationDataType_Encoding_DefaultBinary Object. + /// + public const uint PubSubConfigurationDataType_Encoding_DefaultBinary = 21154; + + /// + /// The identifier for the UadpWriterGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint UadpWriterGroupMessageDataType_Encoding_DefaultBinary = 15715; + + /// + /// The identifier for the UadpDataSetWriterMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint UadpDataSetWriterMessageDataType_Encoding_DefaultBinary = 15717; + + /// + /// The identifier for the UadpDataSetReaderMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint UadpDataSetReaderMessageDataType_Encoding_DefaultBinary = 15718; + + /// + /// The identifier for the JsonWriterGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint JsonWriterGroupMessageDataType_Encoding_DefaultBinary = 15719; + + /// + /// The identifier for the JsonDataSetWriterMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint JsonDataSetWriterMessageDataType_Encoding_DefaultBinary = 15724; + + /// + /// The identifier for the JsonDataSetReaderMessageDataType_Encoding_DefaultBinary Object. + /// + public const uint JsonDataSetReaderMessageDataType_Encoding_DefaultBinary = 15725; + + /// + /// The identifier for the DatagramConnectionTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint DatagramConnectionTransportDataType_Encoding_DefaultBinary = 17468; + + /// + /// The identifier for the DatagramWriterGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint DatagramWriterGroupTransportDataType_Encoding_DefaultBinary = 21155; + + /// + /// The identifier for the BrokerConnectionTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint BrokerConnectionTransportDataType_Encoding_DefaultBinary = 15479; + + /// + /// The identifier for the BrokerWriterGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint BrokerWriterGroupTransportDataType_Encoding_DefaultBinary = 15727; + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary = 15729; + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary Object. + /// + public const uint BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary = 15733; + + /// + /// The identifier for the AliasNameDataType_Encoding_DefaultBinary Object. + /// + public const uint AliasNameDataType_Encoding_DefaultBinary = 23499; + + /// + /// The identifier for the RolePermissionType_Encoding_DefaultBinary Object. + /// + public const uint RolePermissionType_Encoding_DefaultBinary = 128; + + /// + /// The identifier for the DataTypeDefinition_Encoding_DefaultBinary Object. + /// + public const uint DataTypeDefinition_Encoding_DefaultBinary = 121; + + /// + /// The identifier for the StructureField_Encoding_DefaultBinary Object. + /// + public const uint StructureField_Encoding_DefaultBinary = 14844; + + /// + /// The identifier for the StructureDefinition_Encoding_DefaultBinary Object. + /// + public const uint StructureDefinition_Encoding_DefaultBinary = 122; + + /// + /// The identifier for the EnumDefinition_Encoding_DefaultBinary Object. + /// + public const uint EnumDefinition_Encoding_DefaultBinary = 123; + + /// + /// 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 EnumField_Encoding_DefaultBinary Object. + /// + public const uint EnumField_Encoding_DefaultBinary = 14845; + + /// + /// The identifier for the OptionSet_Encoding_DefaultBinary Object. + /// + public const uint OptionSet_Encoding_DefaultBinary = 12765; + + /// + /// The identifier for the Union_Encoding_DefaultBinary Object. + /// + public const uint Union_Encoding_DefaultBinary = 12766; + + /// + /// 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 SessionlessInvokeRequestType_Encoding_DefaultBinary Object. + /// + public const uint SessionlessInvokeRequestType_Encoding_DefaultBinary = 15903; + + /// + /// The identifier for the SessionlessInvokeResponseType_Encoding_DefaultBinary Object. + /// + public const uint SessionlessInvokeResponseType_Encoding_DefaultBinary = 21001; + + /// + /// 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 ServerOnNetwork_Encoding_DefaultBinary Object. + /// + public const uint ServerOnNetwork_Encoding_DefaultBinary = 12207; + + /// + /// The identifier for the FindServersOnNetworkRequest_Encoding_DefaultBinary Object. + /// + public const uint FindServersOnNetworkRequest_Encoding_DefaultBinary = 12208; + + /// + /// The identifier for the FindServersOnNetworkResponse_Encoding_DefaultBinary Object. + /// + public const uint FindServersOnNetworkResponse_Encoding_DefaultBinary = 12209; + + /// + /// 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 DiscoveryConfiguration_Encoding_DefaultBinary Object. + /// + public const uint DiscoveryConfiguration_Encoding_DefaultBinary = 12900; + + /// + /// The identifier for the MdnsDiscoveryConfiguration_Encoding_DefaultBinary Object. + /// + public const uint MdnsDiscoveryConfiguration_Encoding_DefaultBinary = 12901; + + /// + /// The identifier for the RegisterServer2Request_Encoding_DefaultBinary Object. + /// + public const uint RegisterServer2Request_Encoding_DefaultBinary = 12211; + + /// + /// The identifier for the RegisterServer2Response_Encoding_DefaultBinary Object. + /// + public const uint RegisterServer2Response_Encoding_DefaultBinary = 12212; + + /// + /// 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 GenericAttributeValue_Encoding_DefaultBinary Object. + /// + public const uint GenericAttributeValue_Encoding_DefaultBinary = 17610; + + /// + /// The identifier for the GenericAttributes_Encoding_DefaultBinary Object. + /// + public const uint GenericAttributes_Encoding_DefaultBinary = 17611; + + /// + /// 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 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 ReadAnnotationDataDetails_Encoding_DefaultBinary Object. + /// + public const uint ReadAnnotationDataDetails_Encoding_DefaultBinary = 23500; + + /// + /// 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 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 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 ProgramDiagnostic2DataType_Encoding_DefaultBinary Object. + /// + public const uint ProgramDiagnostic2DataType_Encoding_DefaultBinary = 15397; + + /// + /// The identifier for the Annotation_Encoding_DefaultBinary Object. + /// + public const uint Annotation_Encoding_DefaultBinary = 893; + + /// + /// The identifier for the KeyValuePair_Encoding_DefaultXml Object. + /// + public const uint KeyValuePair_Encoding_DefaultXml = 14802; + + /// + /// The identifier for the EndpointType_Encoding_DefaultXml Object. + /// + public const uint EndpointType_Encoding_DefaultXml = 15949; + + /// + /// The identifier for the RationalNumber_Encoding_DefaultXml Object. + /// + public const uint RationalNumber_Encoding_DefaultXml = 18851; + + /// + /// The identifier for the Vector_Encoding_DefaultXml Object. + /// + public const uint Vector_Encoding_DefaultXml = 18852; + + /// + /// The identifier for the ThreeDVector_Encoding_DefaultXml Object. + /// + public const uint ThreeDVector_Encoding_DefaultXml = 18853; + + /// + /// The identifier for the CartesianCoordinates_Encoding_DefaultXml Object. + /// + public const uint CartesianCoordinates_Encoding_DefaultXml = 18854; + + /// + /// The identifier for the ThreeDCartesianCoordinates_Encoding_DefaultXml Object. + /// + public const uint ThreeDCartesianCoordinates_Encoding_DefaultXml = 18855; + + /// + /// The identifier for the Orientation_Encoding_DefaultXml Object. + /// + public const uint Orientation_Encoding_DefaultXml = 18856; + + /// + /// The identifier for the ThreeDOrientation_Encoding_DefaultXml Object. + /// + public const uint ThreeDOrientation_Encoding_DefaultXml = 18857; + + /// + /// The identifier for the Frame_Encoding_DefaultXml Object. + /// + public const uint Frame_Encoding_DefaultXml = 18858; + + /// + /// The identifier for the ThreeDFrame_Encoding_DefaultXml Object. + /// + public const uint ThreeDFrame_Encoding_DefaultXml = 18859; + + /// + /// The identifier for the IdentityMappingRuleType_Encoding_DefaultXml Object. + /// + public const uint IdentityMappingRuleType_Encoding_DefaultXml = 15728; + + /// + /// The identifier for the CurrencyUnitType_Encoding_DefaultXml Object. + /// + public const uint CurrencyUnitType_Encoding_DefaultXml = 23520; + + /// + /// The identifier for the TrustListDataType_Encoding_DefaultXml Object. + /// + public const uint TrustListDataType_Encoding_DefaultXml = 12676; + + /// + /// The identifier for the DecimalDataType_Encoding_DefaultXml Object. + /// + public const uint DecimalDataType_Encoding_DefaultXml = 17862; + + /// + /// The identifier for the DataTypeSchemaHeader_Encoding_DefaultXml Object. + /// + public const uint DataTypeSchemaHeader_Encoding_DefaultXml = 15950; + + /// + /// The identifier for the DataTypeDescription_Encoding_DefaultXml Object. + /// + public const uint DataTypeDescription_Encoding_DefaultXml = 14796; + + /// + /// The identifier for the StructureDescription_Encoding_DefaultXml Object. + /// + public const uint StructureDescription_Encoding_DefaultXml = 15589; + + /// + /// The identifier for the EnumDescription_Encoding_DefaultXml Object. + /// + public const uint EnumDescription_Encoding_DefaultXml = 15590; + + /// + /// The identifier for the SimpleTypeDescription_Encoding_DefaultXml Object. + /// + public const uint SimpleTypeDescription_Encoding_DefaultXml = 15529; + + /// + /// The identifier for the UABinaryFileDataType_Encoding_DefaultXml Object. + /// + public const uint UABinaryFileDataType_Encoding_DefaultXml = 15531; + + /// + /// The identifier for the DataSetMetaDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetMetaDataType_Encoding_DefaultXml = 14794; + + /// + /// The identifier for the FieldMetaData_Encoding_DefaultXml Object. + /// + public const uint FieldMetaData_Encoding_DefaultXml = 14795; + + /// + /// The identifier for the ConfigurationVersionDataType_Encoding_DefaultXml Object. + /// + public const uint ConfigurationVersionDataType_Encoding_DefaultXml = 14803; + + /// + /// The identifier for the PublishedDataSetDataType_Encoding_DefaultXml Object. + /// + public const uint PublishedDataSetDataType_Encoding_DefaultXml = 15951; + + /// + /// The identifier for the PublishedDataSetSourceDataType_Encoding_DefaultXml Object. + /// + public const uint PublishedDataSetSourceDataType_Encoding_DefaultXml = 15952; + + /// + /// The identifier for the PublishedVariableDataType_Encoding_DefaultXml Object. + /// + public const uint PublishedVariableDataType_Encoding_DefaultXml = 14319; + + /// + /// The identifier for the PublishedDataItemsDataType_Encoding_DefaultXml Object. + /// + public const uint PublishedDataItemsDataType_Encoding_DefaultXml = 15953; + + /// + /// The identifier for the PublishedEventsDataType_Encoding_DefaultXml Object. + /// + public const uint PublishedEventsDataType_Encoding_DefaultXml = 15954; + + /// + /// The identifier for the DataSetWriterDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetWriterDataType_Encoding_DefaultXml = 15955; + + /// + /// The identifier for the DataSetWriterTransportDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetWriterTransportDataType_Encoding_DefaultXml = 15956; + + /// + /// The identifier for the DataSetWriterMessageDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetWriterMessageDataType_Encoding_DefaultXml = 15987; + + /// + /// The identifier for the PubSubGroupDataType_Encoding_DefaultXml Object. + /// + public const uint PubSubGroupDataType_Encoding_DefaultXml = 15988; + + /// + /// The identifier for the WriterGroupDataType_Encoding_DefaultXml Object. + /// + public const uint WriterGroupDataType_Encoding_DefaultXml = 21174; + + /// + /// The identifier for the WriterGroupTransportDataType_Encoding_DefaultXml Object. + /// + public const uint WriterGroupTransportDataType_Encoding_DefaultXml = 15990; + + /// + /// The identifier for the WriterGroupMessageDataType_Encoding_DefaultXml Object. + /// + public const uint WriterGroupMessageDataType_Encoding_DefaultXml = 15991; + + /// + /// The identifier for the PubSubConnectionDataType_Encoding_DefaultXml Object. + /// + public const uint PubSubConnectionDataType_Encoding_DefaultXml = 15992; + + /// + /// The identifier for the ConnectionTransportDataType_Encoding_DefaultXml Object. + /// + public const uint ConnectionTransportDataType_Encoding_DefaultXml = 15993; + + /// + /// The identifier for the NetworkAddressDataType_Encoding_DefaultXml Object. + /// + public const uint NetworkAddressDataType_Encoding_DefaultXml = 21175; + + /// + /// The identifier for the NetworkAddressUrlDataType_Encoding_DefaultXml Object. + /// + public const uint NetworkAddressUrlDataType_Encoding_DefaultXml = 21176; + + /// + /// The identifier for the ReaderGroupDataType_Encoding_DefaultXml Object. + /// + public const uint ReaderGroupDataType_Encoding_DefaultXml = 21177; + + /// + /// The identifier for the ReaderGroupTransportDataType_Encoding_DefaultXml Object. + /// + public const uint ReaderGroupTransportDataType_Encoding_DefaultXml = 15995; + + /// + /// The identifier for the ReaderGroupMessageDataType_Encoding_DefaultXml Object. + /// + public const uint ReaderGroupMessageDataType_Encoding_DefaultXml = 15996; + + /// + /// The identifier for the DataSetReaderDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetReaderDataType_Encoding_DefaultXml = 16007; + + /// + /// The identifier for the DataSetReaderTransportDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetReaderTransportDataType_Encoding_DefaultXml = 16008; + + /// + /// The identifier for the DataSetReaderMessageDataType_Encoding_DefaultXml Object. + /// + public const uint DataSetReaderMessageDataType_Encoding_DefaultXml = 16009; + + /// + /// The identifier for the SubscribedDataSetDataType_Encoding_DefaultXml Object. + /// + public const uint SubscribedDataSetDataType_Encoding_DefaultXml = 16010; + + /// + /// The identifier for the TargetVariablesDataType_Encoding_DefaultXml Object. + /// + public const uint TargetVariablesDataType_Encoding_DefaultXml = 16011; + + /// + /// The identifier for the FieldTargetDataType_Encoding_DefaultXml Object. + /// + public const uint FieldTargetDataType_Encoding_DefaultXml = 14804; + + /// + /// The identifier for the SubscribedDataSetMirrorDataType_Encoding_DefaultXml Object. + /// + public const uint SubscribedDataSetMirrorDataType_Encoding_DefaultXml = 16012; + + /// + /// The identifier for the PubSubConfigurationDataType_Encoding_DefaultXml Object. + /// + public const uint PubSubConfigurationDataType_Encoding_DefaultXml = 21178; + + /// + /// The identifier for the UadpWriterGroupMessageDataType_Encoding_DefaultXml Object. + /// + public const uint UadpWriterGroupMessageDataType_Encoding_DefaultXml = 16014; + + /// + /// The identifier for the UadpDataSetWriterMessageDataType_Encoding_DefaultXml Object. + /// + public const uint UadpDataSetWriterMessageDataType_Encoding_DefaultXml = 16015; + + /// + /// The identifier for the UadpDataSetReaderMessageDataType_Encoding_DefaultXml Object. + /// + public const uint UadpDataSetReaderMessageDataType_Encoding_DefaultXml = 16016; + + /// + /// The identifier for the JsonWriterGroupMessageDataType_Encoding_DefaultXml Object. + /// + public const uint JsonWriterGroupMessageDataType_Encoding_DefaultXml = 16017; + + /// + /// The identifier for the JsonDataSetWriterMessageDataType_Encoding_DefaultXml Object. + /// + public const uint JsonDataSetWriterMessageDataType_Encoding_DefaultXml = 16018; + + /// + /// The identifier for the JsonDataSetReaderMessageDataType_Encoding_DefaultXml Object. + /// + public const uint JsonDataSetReaderMessageDataType_Encoding_DefaultXml = 16019; + + /// + /// The identifier for the DatagramConnectionTransportDataType_Encoding_DefaultXml Object. + /// + public const uint DatagramConnectionTransportDataType_Encoding_DefaultXml = 17472; + + /// + /// The identifier for the DatagramWriterGroupTransportDataType_Encoding_DefaultXml Object. + /// + public const uint DatagramWriterGroupTransportDataType_Encoding_DefaultXml = 21179; + + /// + /// The identifier for the BrokerConnectionTransportDataType_Encoding_DefaultXml Object. + /// + public const uint BrokerConnectionTransportDataType_Encoding_DefaultXml = 15579; + + /// + /// The identifier for the BrokerWriterGroupTransportDataType_Encoding_DefaultXml Object. + /// + public const uint BrokerWriterGroupTransportDataType_Encoding_DefaultXml = 16021; + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType_Encoding_DefaultXml Object. + /// + public const uint BrokerDataSetWriterTransportDataType_Encoding_DefaultXml = 16022; + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType_Encoding_DefaultXml Object. + /// + public const uint BrokerDataSetReaderTransportDataType_Encoding_DefaultXml = 16023; + + /// + /// The identifier for the AliasNameDataType_Encoding_DefaultXml Object. + /// + public const uint AliasNameDataType_Encoding_DefaultXml = 23505; + + /// + /// The identifier for the RolePermissionType_Encoding_DefaultXml Object. + /// + public const uint RolePermissionType_Encoding_DefaultXml = 16126; + + /// + /// The identifier for the DataTypeDefinition_Encoding_DefaultXml Object. + /// + public const uint DataTypeDefinition_Encoding_DefaultXml = 14797; + + /// + /// The identifier for the StructureField_Encoding_DefaultXml Object. + /// + public const uint StructureField_Encoding_DefaultXml = 14800; + + /// + /// The identifier for the StructureDefinition_Encoding_DefaultXml Object. + /// + public const uint StructureDefinition_Encoding_DefaultXml = 14798; + + /// + /// The identifier for the EnumDefinition_Encoding_DefaultXml Object. + /// + public const uint EnumDefinition_Encoding_DefaultXml = 14799; + + /// + /// 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 EnumField_Encoding_DefaultXml Object. + /// + public const uint EnumField_Encoding_DefaultXml = 14801; + + /// + /// The identifier for the OptionSet_Encoding_DefaultXml Object. + /// + public const uint OptionSet_Encoding_DefaultXml = 12757; + + /// + /// The identifier for the Union_Encoding_DefaultXml Object. + /// + public const uint Union_Encoding_DefaultXml = 12758; + + /// + /// 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 SessionlessInvokeRequestType_Encoding_DefaultXml Object. + /// + public const uint SessionlessInvokeRequestType_Encoding_DefaultXml = 15902; + + /// + /// The identifier for the SessionlessInvokeResponseType_Encoding_DefaultXml Object. + /// + public const uint SessionlessInvokeResponseType_Encoding_DefaultXml = 21000; + + /// + /// 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 ServerOnNetwork_Encoding_DefaultXml Object. + /// + public const uint ServerOnNetwork_Encoding_DefaultXml = 12195; + + /// + /// The identifier for the FindServersOnNetworkRequest_Encoding_DefaultXml Object. + /// + public const uint FindServersOnNetworkRequest_Encoding_DefaultXml = 12196; + + /// + /// The identifier for the FindServersOnNetworkResponse_Encoding_DefaultXml Object. + /// + public const uint FindServersOnNetworkResponse_Encoding_DefaultXml = 12197; + + /// + /// 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 DiscoveryConfiguration_Encoding_DefaultXml Object. + /// + public const uint DiscoveryConfiguration_Encoding_DefaultXml = 12892; + + /// + /// The identifier for the MdnsDiscoveryConfiguration_Encoding_DefaultXml Object. + /// + public const uint MdnsDiscoveryConfiguration_Encoding_DefaultXml = 12893; + + /// + /// The identifier for the RegisterServer2Request_Encoding_DefaultXml Object. + /// + public const uint RegisterServer2Request_Encoding_DefaultXml = 12199; + + /// + /// The identifier for the RegisterServer2Response_Encoding_DefaultXml Object. + /// + public const uint RegisterServer2Response_Encoding_DefaultXml = 12200; + + /// + /// 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 GenericAttributeValue_Encoding_DefaultXml Object. + /// + public const uint GenericAttributeValue_Encoding_DefaultXml = 17608; + + /// + /// The identifier for the GenericAttributes_Encoding_DefaultXml Object. + /// + public const uint GenericAttributes_Encoding_DefaultXml = 17609; + + /// + /// 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 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 ReadAnnotationDataDetails_Encoding_DefaultXml Object. + /// + public const uint ReadAnnotationDataDetails_Encoding_DefaultXml = 23506; + + /// + /// 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 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 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 ProgramDiagnostic2DataType_Encoding_DefaultXml Object. + /// + public const uint ProgramDiagnostic2DataType_Encoding_DefaultXml = 15401; + + /// + /// The identifier for the Annotation_Encoding_DefaultXml Object. + /// + public const uint Annotation_Encoding_DefaultXml = 892; + + /// + /// The identifier for the KeyValuePair_Encoding_DefaultJson Object. + /// + public const uint KeyValuePair_Encoding_DefaultJson = 15041; + + /// + /// The identifier for the EndpointType_Encoding_DefaultJson Object. + /// + public const uint EndpointType_Encoding_DefaultJson = 16150; + + /// + /// The identifier for the RationalNumber_Encoding_DefaultJson Object. + /// + public const uint RationalNumber_Encoding_DefaultJson = 19064; + + /// + /// The identifier for the Vector_Encoding_DefaultJson Object. + /// + public const uint Vector_Encoding_DefaultJson = 19065; + + /// + /// The identifier for the ThreeDVector_Encoding_DefaultJson Object. + /// + public const uint ThreeDVector_Encoding_DefaultJson = 19066; + + /// + /// The identifier for the CartesianCoordinates_Encoding_DefaultJson Object. + /// + public const uint CartesianCoordinates_Encoding_DefaultJson = 19067; + + /// + /// The identifier for the ThreeDCartesianCoordinates_Encoding_DefaultJson Object. + /// + public const uint ThreeDCartesianCoordinates_Encoding_DefaultJson = 19068; + + /// + /// The identifier for the Orientation_Encoding_DefaultJson Object. + /// + public const uint Orientation_Encoding_DefaultJson = 19069; + + /// + /// The identifier for the ThreeDOrientation_Encoding_DefaultJson Object. + /// + public const uint ThreeDOrientation_Encoding_DefaultJson = 19070; + + /// + /// The identifier for the Frame_Encoding_DefaultJson Object. + /// + public const uint Frame_Encoding_DefaultJson = 19071; + + /// + /// The identifier for the ThreeDFrame_Encoding_DefaultJson Object. + /// + public const uint ThreeDFrame_Encoding_DefaultJson = 19072; + + /// + /// The identifier for the IdentityMappingRuleType_Encoding_DefaultJson Object. + /// + public const uint IdentityMappingRuleType_Encoding_DefaultJson = 15042; + + /// + /// The identifier for the CurrencyUnitType_Encoding_DefaultJson Object. + /// + public const uint CurrencyUnitType_Encoding_DefaultJson = 23528; + + /// + /// The identifier for the TrustListDataType_Encoding_DefaultJson Object. + /// + public const uint TrustListDataType_Encoding_DefaultJson = 15044; + + /// + /// The identifier for the DecimalDataType_Encoding_DefaultJson Object. + /// + public const uint DecimalDataType_Encoding_DefaultJson = 15045; + + /// + /// The identifier for the DataTypeSchemaHeader_Encoding_DefaultJson Object. + /// + public const uint DataTypeSchemaHeader_Encoding_DefaultJson = 16151; + + /// + /// The identifier for the DataTypeDescription_Encoding_DefaultJson Object. + /// + public const uint DataTypeDescription_Encoding_DefaultJson = 15057; + + /// + /// The identifier for the StructureDescription_Encoding_DefaultJson Object. + /// + public const uint StructureDescription_Encoding_DefaultJson = 15058; + + /// + /// The identifier for the EnumDescription_Encoding_DefaultJson Object. + /// + public const uint EnumDescription_Encoding_DefaultJson = 15059; + + /// + /// The identifier for the SimpleTypeDescription_Encoding_DefaultJson Object. + /// + public const uint SimpleTypeDescription_Encoding_DefaultJson = 15700; + + /// + /// The identifier for the UABinaryFileDataType_Encoding_DefaultJson Object. + /// + public const uint UABinaryFileDataType_Encoding_DefaultJson = 15714; + + /// + /// The identifier for the DataSetMetaDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetMetaDataType_Encoding_DefaultJson = 15050; + + /// + /// The identifier for the FieldMetaData_Encoding_DefaultJson Object. + /// + public const uint FieldMetaData_Encoding_DefaultJson = 15051; + + /// + /// The identifier for the ConfigurationVersionDataType_Encoding_DefaultJson Object. + /// + public const uint ConfigurationVersionDataType_Encoding_DefaultJson = 15049; + + /// + /// The identifier for the PublishedDataSetDataType_Encoding_DefaultJson Object. + /// + public const uint PublishedDataSetDataType_Encoding_DefaultJson = 16152; + + /// + /// The identifier for the PublishedDataSetSourceDataType_Encoding_DefaultJson Object. + /// + public const uint PublishedDataSetSourceDataType_Encoding_DefaultJson = 16153; + + /// + /// The identifier for the PublishedVariableDataType_Encoding_DefaultJson Object. + /// + public const uint PublishedVariableDataType_Encoding_DefaultJson = 15060; + + /// + /// The identifier for the PublishedDataItemsDataType_Encoding_DefaultJson Object. + /// + public const uint PublishedDataItemsDataType_Encoding_DefaultJson = 16154; + + /// + /// The identifier for the PublishedEventsDataType_Encoding_DefaultJson Object. + /// + public const uint PublishedEventsDataType_Encoding_DefaultJson = 16155; + + /// + /// The identifier for the DataSetWriterDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetWriterDataType_Encoding_DefaultJson = 16156; + + /// + /// The identifier for the DataSetWriterTransportDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetWriterTransportDataType_Encoding_DefaultJson = 16157; + + /// + /// The identifier for the DataSetWriterMessageDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetWriterMessageDataType_Encoding_DefaultJson = 16158; + + /// + /// The identifier for the PubSubGroupDataType_Encoding_DefaultJson Object. + /// + public const uint PubSubGroupDataType_Encoding_DefaultJson = 16159; + + /// + /// The identifier for the WriterGroupDataType_Encoding_DefaultJson Object. + /// + public const uint WriterGroupDataType_Encoding_DefaultJson = 21198; + + /// + /// The identifier for the WriterGroupTransportDataType_Encoding_DefaultJson Object. + /// + public const uint WriterGroupTransportDataType_Encoding_DefaultJson = 16161; + + /// + /// The identifier for the WriterGroupMessageDataType_Encoding_DefaultJson Object. + /// + public const uint WriterGroupMessageDataType_Encoding_DefaultJson = 16280; + + /// + /// The identifier for the PubSubConnectionDataType_Encoding_DefaultJson Object. + /// + public const uint PubSubConnectionDataType_Encoding_DefaultJson = 16281; + + /// + /// The identifier for the ConnectionTransportDataType_Encoding_DefaultJson Object. + /// + public const uint ConnectionTransportDataType_Encoding_DefaultJson = 16282; + + /// + /// The identifier for the NetworkAddressDataType_Encoding_DefaultJson Object. + /// + public const uint NetworkAddressDataType_Encoding_DefaultJson = 21199; + + /// + /// The identifier for the NetworkAddressUrlDataType_Encoding_DefaultJson Object. + /// + public const uint NetworkAddressUrlDataType_Encoding_DefaultJson = 21200; + + /// + /// The identifier for the ReaderGroupDataType_Encoding_DefaultJson Object. + /// + public const uint ReaderGroupDataType_Encoding_DefaultJson = 21201; + + /// + /// The identifier for the ReaderGroupTransportDataType_Encoding_DefaultJson Object. + /// + public const uint ReaderGroupTransportDataType_Encoding_DefaultJson = 16284; + + /// + /// The identifier for the ReaderGroupMessageDataType_Encoding_DefaultJson Object. + /// + public const uint ReaderGroupMessageDataType_Encoding_DefaultJson = 16285; + + /// + /// The identifier for the DataSetReaderDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetReaderDataType_Encoding_DefaultJson = 16286; + + /// + /// The identifier for the DataSetReaderTransportDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetReaderTransportDataType_Encoding_DefaultJson = 16287; + + /// + /// The identifier for the DataSetReaderMessageDataType_Encoding_DefaultJson Object. + /// + public const uint DataSetReaderMessageDataType_Encoding_DefaultJson = 16288; + + /// + /// The identifier for the SubscribedDataSetDataType_Encoding_DefaultJson Object. + /// + public const uint SubscribedDataSetDataType_Encoding_DefaultJson = 16308; + + /// + /// The identifier for the TargetVariablesDataType_Encoding_DefaultJson Object. + /// + public const uint TargetVariablesDataType_Encoding_DefaultJson = 16310; + + /// + /// The identifier for the FieldTargetDataType_Encoding_DefaultJson Object. + /// + public const uint FieldTargetDataType_Encoding_DefaultJson = 15061; + + /// + /// The identifier for the SubscribedDataSetMirrorDataType_Encoding_DefaultJson Object. + /// + public const uint SubscribedDataSetMirrorDataType_Encoding_DefaultJson = 16311; + + /// + /// The identifier for the PubSubConfigurationDataType_Encoding_DefaultJson Object. + /// + public const uint PubSubConfigurationDataType_Encoding_DefaultJson = 21202; + + /// + /// The identifier for the UadpWriterGroupMessageDataType_Encoding_DefaultJson Object. + /// + public const uint UadpWriterGroupMessageDataType_Encoding_DefaultJson = 16323; + + /// + /// The identifier for the UadpDataSetWriterMessageDataType_Encoding_DefaultJson Object. + /// + public const uint UadpDataSetWriterMessageDataType_Encoding_DefaultJson = 16391; + + /// + /// The identifier for the UadpDataSetReaderMessageDataType_Encoding_DefaultJson Object. + /// + public const uint UadpDataSetReaderMessageDataType_Encoding_DefaultJson = 16392; + + /// + /// The identifier for the JsonWriterGroupMessageDataType_Encoding_DefaultJson Object. + /// + public const uint JsonWriterGroupMessageDataType_Encoding_DefaultJson = 16393; + + /// + /// The identifier for the JsonDataSetWriterMessageDataType_Encoding_DefaultJson Object. + /// + public const uint JsonDataSetWriterMessageDataType_Encoding_DefaultJson = 16394; + + /// + /// The identifier for the JsonDataSetReaderMessageDataType_Encoding_DefaultJson Object. + /// + public const uint JsonDataSetReaderMessageDataType_Encoding_DefaultJson = 16404; + + /// + /// The identifier for the DatagramConnectionTransportDataType_Encoding_DefaultJson Object. + /// + public const uint DatagramConnectionTransportDataType_Encoding_DefaultJson = 17476; + + /// + /// The identifier for the DatagramWriterGroupTransportDataType_Encoding_DefaultJson Object. + /// + public const uint DatagramWriterGroupTransportDataType_Encoding_DefaultJson = 21203; + + /// + /// The identifier for the BrokerConnectionTransportDataType_Encoding_DefaultJson Object. + /// + public const uint BrokerConnectionTransportDataType_Encoding_DefaultJson = 15726; + + /// + /// The identifier for the BrokerWriterGroupTransportDataType_Encoding_DefaultJson Object. + /// + public const uint BrokerWriterGroupTransportDataType_Encoding_DefaultJson = 16524; + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType_Encoding_DefaultJson Object. + /// + public const uint BrokerDataSetWriterTransportDataType_Encoding_DefaultJson = 16525; + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType_Encoding_DefaultJson Object. + /// + public const uint BrokerDataSetReaderTransportDataType_Encoding_DefaultJson = 16526; + + /// + /// The identifier for the AliasNameDataType_Encoding_DefaultJson Object. + /// + public const uint AliasNameDataType_Encoding_DefaultJson = 23511; + + /// + /// The identifier for the RolePermissionType_Encoding_DefaultJson Object. + /// + public const uint RolePermissionType_Encoding_DefaultJson = 15062; + + /// + /// The identifier for the DataTypeDefinition_Encoding_DefaultJson Object. + /// + public const uint DataTypeDefinition_Encoding_DefaultJson = 15063; + + /// + /// The identifier for the StructureField_Encoding_DefaultJson Object. + /// + public const uint StructureField_Encoding_DefaultJson = 15065; + + /// + /// The identifier for the StructureDefinition_Encoding_DefaultJson Object. + /// + public const uint StructureDefinition_Encoding_DefaultJson = 15066; + + /// + /// The identifier for the EnumDefinition_Encoding_DefaultJson Object. + /// + public const uint EnumDefinition_Encoding_DefaultJson = 15067; + + /// + /// The identifier for the Node_Encoding_DefaultJson Object. + /// + public const uint Node_Encoding_DefaultJson = 15068; + + /// + /// The identifier for the InstanceNode_Encoding_DefaultJson Object. + /// + public const uint InstanceNode_Encoding_DefaultJson = 15069; + + /// + /// The identifier for the TypeNode_Encoding_DefaultJson Object. + /// + public const uint TypeNode_Encoding_DefaultJson = 15070; + + /// + /// The identifier for the ObjectNode_Encoding_DefaultJson Object. + /// + public const uint ObjectNode_Encoding_DefaultJson = 15071; + + /// + /// The identifier for the ObjectTypeNode_Encoding_DefaultJson Object. + /// + public const uint ObjectTypeNode_Encoding_DefaultJson = 15073; + + /// + /// The identifier for the VariableNode_Encoding_DefaultJson Object. + /// + public const uint VariableNode_Encoding_DefaultJson = 15074; + + /// + /// The identifier for the VariableTypeNode_Encoding_DefaultJson Object. + /// + public const uint VariableTypeNode_Encoding_DefaultJson = 15075; + + /// + /// The identifier for the ReferenceTypeNode_Encoding_DefaultJson Object. + /// + public const uint ReferenceTypeNode_Encoding_DefaultJson = 15076; + + /// + /// The identifier for the MethodNode_Encoding_DefaultJson Object. + /// + public const uint MethodNode_Encoding_DefaultJson = 15077; + + /// + /// The identifier for the ViewNode_Encoding_DefaultJson Object. + /// + public const uint ViewNode_Encoding_DefaultJson = 15078; + + /// + /// The identifier for the DataTypeNode_Encoding_DefaultJson Object. + /// + public const uint DataTypeNode_Encoding_DefaultJson = 15079; + + /// + /// The identifier for the ReferenceNode_Encoding_DefaultJson Object. + /// + public const uint ReferenceNode_Encoding_DefaultJson = 15080; + + /// + /// The identifier for the Argument_Encoding_DefaultJson Object. + /// + public const uint Argument_Encoding_DefaultJson = 15081; + + /// + /// The identifier for the EnumValueType_Encoding_DefaultJson Object. + /// + public const uint EnumValueType_Encoding_DefaultJson = 15082; + + /// + /// The identifier for the EnumField_Encoding_DefaultJson Object. + /// + public const uint EnumField_Encoding_DefaultJson = 15083; + + /// + /// The identifier for the OptionSet_Encoding_DefaultJson Object. + /// + public const uint OptionSet_Encoding_DefaultJson = 15084; + + /// + /// The identifier for the Union_Encoding_DefaultJson Object. + /// + public const uint Union_Encoding_DefaultJson = 15085; + + /// + /// The identifier for the TimeZoneDataType_Encoding_DefaultJson Object. + /// + public const uint TimeZoneDataType_Encoding_DefaultJson = 15086; + + /// + /// The identifier for the ApplicationDescription_Encoding_DefaultJson Object. + /// + public const uint ApplicationDescription_Encoding_DefaultJson = 15087; + + /// + /// The identifier for the RequestHeader_Encoding_DefaultJson Object. + /// + public const uint RequestHeader_Encoding_DefaultJson = 15088; + + /// + /// The identifier for the ResponseHeader_Encoding_DefaultJson Object. + /// + public const uint ResponseHeader_Encoding_DefaultJson = 15089; + + /// + /// The identifier for the ServiceFault_Encoding_DefaultJson Object. + /// + public const uint ServiceFault_Encoding_DefaultJson = 15090; + + /// + /// The identifier for the SessionlessInvokeRequestType_Encoding_DefaultJson Object. + /// + public const uint SessionlessInvokeRequestType_Encoding_DefaultJson = 15091; + + /// + /// The identifier for the SessionlessInvokeResponseType_Encoding_DefaultJson Object. + /// + public const uint SessionlessInvokeResponseType_Encoding_DefaultJson = 15092; + + /// + /// The identifier for the FindServersRequest_Encoding_DefaultJson Object. + /// + public const uint FindServersRequest_Encoding_DefaultJson = 15093; + + /// + /// The identifier for the FindServersResponse_Encoding_DefaultJson Object. + /// + public const uint FindServersResponse_Encoding_DefaultJson = 15094; + + /// + /// The identifier for the ServerOnNetwork_Encoding_DefaultJson Object. + /// + public const uint ServerOnNetwork_Encoding_DefaultJson = 15095; + + /// + /// The identifier for the FindServersOnNetworkRequest_Encoding_DefaultJson Object. + /// + public const uint FindServersOnNetworkRequest_Encoding_DefaultJson = 15096; + + /// + /// The identifier for the FindServersOnNetworkResponse_Encoding_DefaultJson Object. + /// + public const uint FindServersOnNetworkResponse_Encoding_DefaultJson = 15097; + + /// + /// The identifier for the UserTokenPolicy_Encoding_DefaultJson Object. + /// + public const uint UserTokenPolicy_Encoding_DefaultJson = 15098; + + /// + /// The identifier for the EndpointDescription_Encoding_DefaultJson Object. + /// + public const uint EndpointDescription_Encoding_DefaultJson = 15099; + + /// + /// The identifier for the GetEndpointsRequest_Encoding_DefaultJson Object. + /// + public const uint GetEndpointsRequest_Encoding_DefaultJson = 15100; + + /// + /// The identifier for the GetEndpointsResponse_Encoding_DefaultJson Object. + /// + public const uint GetEndpointsResponse_Encoding_DefaultJson = 15101; + + /// + /// The identifier for the RegisteredServer_Encoding_DefaultJson Object. + /// + public const uint RegisteredServer_Encoding_DefaultJson = 15102; + + /// + /// The identifier for the RegisterServerRequest_Encoding_DefaultJson Object. + /// + public const uint RegisterServerRequest_Encoding_DefaultJson = 15103; + + /// + /// The identifier for the RegisterServerResponse_Encoding_DefaultJson Object. + /// + public const uint RegisterServerResponse_Encoding_DefaultJson = 15104; + + /// + /// The identifier for the DiscoveryConfiguration_Encoding_DefaultJson Object. + /// + public const uint DiscoveryConfiguration_Encoding_DefaultJson = 15105; + + /// + /// The identifier for the MdnsDiscoveryConfiguration_Encoding_DefaultJson Object. + /// + public const uint MdnsDiscoveryConfiguration_Encoding_DefaultJson = 15106; + + /// + /// The identifier for the RegisterServer2Request_Encoding_DefaultJson Object. + /// + public const uint RegisterServer2Request_Encoding_DefaultJson = 15107; + + /// + /// The identifier for the RegisterServer2Response_Encoding_DefaultJson Object. + /// + public const uint RegisterServer2Response_Encoding_DefaultJson = 15130; + + /// + /// The identifier for the ChannelSecurityToken_Encoding_DefaultJson Object. + /// + public const uint ChannelSecurityToken_Encoding_DefaultJson = 15131; + + /// + /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultJson Object. + /// + public const uint OpenSecureChannelRequest_Encoding_DefaultJson = 15132; + + /// + /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultJson Object. + /// + public const uint OpenSecureChannelResponse_Encoding_DefaultJson = 15133; + + /// + /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultJson Object. + /// + public const uint CloseSecureChannelRequest_Encoding_DefaultJson = 15134; + + /// + /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultJson Object. + /// + public const uint CloseSecureChannelResponse_Encoding_DefaultJson = 15135; + + /// + /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultJson Object. + /// + public const uint SignedSoftwareCertificate_Encoding_DefaultJson = 15136; + + /// + /// The identifier for the SignatureData_Encoding_DefaultJson Object. + /// + public const uint SignatureData_Encoding_DefaultJson = 15137; + + /// + /// The identifier for the CreateSessionRequest_Encoding_DefaultJson Object. + /// + public const uint CreateSessionRequest_Encoding_DefaultJson = 15138; + + /// + /// The identifier for the CreateSessionResponse_Encoding_DefaultJson Object. + /// + public const uint CreateSessionResponse_Encoding_DefaultJson = 15139; + + /// + /// The identifier for the UserIdentityToken_Encoding_DefaultJson Object. + /// + public const uint UserIdentityToken_Encoding_DefaultJson = 15140; + + /// + /// The identifier for the AnonymousIdentityToken_Encoding_DefaultJson Object. + /// + public const uint AnonymousIdentityToken_Encoding_DefaultJson = 15141; + + /// + /// The identifier for the UserNameIdentityToken_Encoding_DefaultJson Object. + /// + public const uint UserNameIdentityToken_Encoding_DefaultJson = 15142; + + /// + /// The identifier for the X509IdentityToken_Encoding_DefaultJson Object. + /// + public const uint X509IdentityToken_Encoding_DefaultJson = 15143; + + /// + /// The identifier for the IssuedIdentityToken_Encoding_DefaultJson Object. + /// + public const uint IssuedIdentityToken_Encoding_DefaultJson = 15144; + + /// + /// The identifier for the ActivateSessionRequest_Encoding_DefaultJson Object. + /// + public const uint ActivateSessionRequest_Encoding_DefaultJson = 15145; + + /// + /// The identifier for the ActivateSessionResponse_Encoding_DefaultJson Object. + /// + public const uint ActivateSessionResponse_Encoding_DefaultJson = 15146; + + /// + /// The identifier for the CloseSessionRequest_Encoding_DefaultJson Object. + /// + public const uint CloseSessionRequest_Encoding_DefaultJson = 15147; + + /// + /// The identifier for the CloseSessionResponse_Encoding_DefaultJson Object. + /// + public const uint CloseSessionResponse_Encoding_DefaultJson = 15148; + + /// + /// The identifier for the CancelRequest_Encoding_DefaultJson Object. + /// + public const uint CancelRequest_Encoding_DefaultJson = 15149; + + /// + /// The identifier for the CancelResponse_Encoding_DefaultJson Object. + /// + public const uint CancelResponse_Encoding_DefaultJson = 15150; + + /// + /// The identifier for the NodeAttributes_Encoding_DefaultJson Object. + /// + public const uint NodeAttributes_Encoding_DefaultJson = 15151; + + /// + /// The identifier for the ObjectAttributes_Encoding_DefaultJson Object. + /// + public const uint ObjectAttributes_Encoding_DefaultJson = 15152; + + /// + /// The identifier for the VariableAttributes_Encoding_DefaultJson Object. + /// + public const uint VariableAttributes_Encoding_DefaultJson = 15153; + + /// + /// The identifier for the MethodAttributes_Encoding_DefaultJson Object. + /// + public const uint MethodAttributes_Encoding_DefaultJson = 15157; + + /// + /// The identifier for the ObjectTypeAttributes_Encoding_DefaultJson Object. + /// + public const uint ObjectTypeAttributes_Encoding_DefaultJson = 15158; + + /// + /// The identifier for the VariableTypeAttributes_Encoding_DefaultJson Object. + /// + public const uint VariableTypeAttributes_Encoding_DefaultJson = 15159; + + /// + /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultJson Object. + /// + public const uint ReferenceTypeAttributes_Encoding_DefaultJson = 15160; + + /// + /// The identifier for the DataTypeAttributes_Encoding_DefaultJson Object. + /// + public const uint DataTypeAttributes_Encoding_DefaultJson = 15161; + + /// + /// The identifier for the ViewAttributes_Encoding_DefaultJson Object. + /// + public const uint ViewAttributes_Encoding_DefaultJson = 15162; + + /// + /// The identifier for the GenericAttributeValue_Encoding_DefaultJson Object. + /// + public const uint GenericAttributeValue_Encoding_DefaultJson = 15163; + + /// + /// The identifier for the GenericAttributes_Encoding_DefaultJson Object. + /// + public const uint GenericAttributes_Encoding_DefaultJson = 15164; + + /// + /// The identifier for the AddNodesItem_Encoding_DefaultJson Object. + /// + public const uint AddNodesItem_Encoding_DefaultJson = 15165; + + /// + /// The identifier for the AddNodesResult_Encoding_DefaultJson Object. + /// + public const uint AddNodesResult_Encoding_DefaultJson = 15166; + + /// + /// The identifier for the AddNodesRequest_Encoding_DefaultJson Object. + /// + public const uint AddNodesRequest_Encoding_DefaultJson = 15167; + + /// + /// The identifier for the AddNodesResponse_Encoding_DefaultJson Object. + /// + public const uint AddNodesResponse_Encoding_DefaultJson = 15168; + + /// + /// The identifier for the AddReferencesItem_Encoding_DefaultJson Object. + /// + public const uint AddReferencesItem_Encoding_DefaultJson = 15169; + + /// + /// The identifier for the AddReferencesRequest_Encoding_DefaultJson Object. + /// + public const uint AddReferencesRequest_Encoding_DefaultJson = 15170; + + /// + /// The identifier for the AddReferencesResponse_Encoding_DefaultJson Object. + /// + public const uint AddReferencesResponse_Encoding_DefaultJson = 15171; + + /// + /// The identifier for the DeleteNodesItem_Encoding_DefaultJson Object. + /// + public const uint DeleteNodesItem_Encoding_DefaultJson = 15172; + + /// + /// The identifier for the DeleteNodesRequest_Encoding_DefaultJson Object. + /// + public const uint DeleteNodesRequest_Encoding_DefaultJson = 15173; + + /// + /// The identifier for the DeleteNodesResponse_Encoding_DefaultJson Object. + /// + public const uint DeleteNodesResponse_Encoding_DefaultJson = 15174; + + /// + /// The identifier for the DeleteReferencesItem_Encoding_DefaultJson Object. + /// + public const uint DeleteReferencesItem_Encoding_DefaultJson = 15175; + + /// + /// The identifier for the DeleteReferencesRequest_Encoding_DefaultJson Object. + /// + public const uint DeleteReferencesRequest_Encoding_DefaultJson = 15176; + + /// + /// The identifier for the DeleteReferencesResponse_Encoding_DefaultJson Object. + /// + public const uint DeleteReferencesResponse_Encoding_DefaultJson = 15177; + + /// + /// The identifier for the ViewDescription_Encoding_DefaultJson Object. + /// + public const uint ViewDescription_Encoding_DefaultJson = 15179; + + /// + /// The identifier for the BrowseDescription_Encoding_DefaultJson Object. + /// + public const uint BrowseDescription_Encoding_DefaultJson = 15180; + + /// + /// The identifier for the ReferenceDescription_Encoding_DefaultJson Object. + /// + public const uint ReferenceDescription_Encoding_DefaultJson = 15182; + + /// + /// The identifier for the BrowseResult_Encoding_DefaultJson Object. + /// + public const uint BrowseResult_Encoding_DefaultJson = 15183; + + /// + /// The identifier for the BrowseRequest_Encoding_DefaultJson Object. + /// + public const uint BrowseRequest_Encoding_DefaultJson = 15184; + + /// + /// The identifier for the BrowseResponse_Encoding_DefaultJson Object. + /// + public const uint BrowseResponse_Encoding_DefaultJson = 15185; + + /// + /// The identifier for the BrowseNextRequest_Encoding_DefaultJson Object. + /// + public const uint BrowseNextRequest_Encoding_DefaultJson = 15186; + + /// + /// The identifier for the BrowseNextResponse_Encoding_DefaultJson Object. + /// + public const uint BrowseNextResponse_Encoding_DefaultJson = 15187; + + /// + /// The identifier for the RelativePathElement_Encoding_DefaultJson Object. + /// + public const uint RelativePathElement_Encoding_DefaultJson = 15188; + + /// + /// The identifier for the RelativePath_Encoding_DefaultJson Object. + /// + public const uint RelativePath_Encoding_DefaultJson = 15189; + + /// + /// The identifier for the BrowsePath_Encoding_DefaultJson Object. + /// + public const uint BrowsePath_Encoding_DefaultJson = 15190; + + /// + /// The identifier for the BrowsePathTarget_Encoding_DefaultJson Object. + /// + public const uint BrowsePathTarget_Encoding_DefaultJson = 15191; + + /// + /// The identifier for the BrowsePathResult_Encoding_DefaultJson Object. + /// + public const uint BrowsePathResult_Encoding_DefaultJson = 15192; + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson Object. + /// + public const uint TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson = 15193; + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson Object. + /// + public const uint TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson = 15194; + + /// + /// The identifier for the RegisterNodesRequest_Encoding_DefaultJson Object. + /// + public const uint RegisterNodesRequest_Encoding_DefaultJson = 15195; + + /// + /// The identifier for the RegisterNodesResponse_Encoding_DefaultJson Object. + /// + public const uint RegisterNodesResponse_Encoding_DefaultJson = 15196; + + /// + /// The identifier for the UnregisterNodesRequest_Encoding_DefaultJson Object. + /// + public const uint UnregisterNodesRequest_Encoding_DefaultJson = 15197; + + /// + /// The identifier for the UnregisterNodesResponse_Encoding_DefaultJson Object. + /// + public const uint UnregisterNodesResponse_Encoding_DefaultJson = 15198; + + /// + /// The identifier for the EndpointConfiguration_Encoding_DefaultJson Object. + /// + public const uint EndpointConfiguration_Encoding_DefaultJson = 15199; + + /// + /// The identifier for the QueryDataDescription_Encoding_DefaultJson Object. + /// + public const uint QueryDataDescription_Encoding_DefaultJson = 15200; + + /// + /// The identifier for the NodeTypeDescription_Encoding_DefaultJson Object. + /// + public const uint NodeTypeDescription_Encoding_DefaultJson = 15201; + + /// + /// The identifier for the QueryDataSet_Encoding_DefaultJson Object. + /// + public const uint QueryDataSet_Encoding_DefaultJson = 15202; + + /// + /// The identifier for the NodeReference_Encoding_DefaultJson Object. + /// + public const uint NodeReference_Encoding_DefaultJson = 15203; + + /// + /// The identifier for the ContentFilterElement_Encoding_DefaultJson Object. + /// + public const uint ContentFilterElement_Encoding_DefaultJson = 15204; + + /// + /// The identifier for the ContentFilter_Encoding_DefaultJson Object. + /// + public const uint ContentFilter_Encoding_DefaultJson = 15205; + + /// + /// The identifier for the FilterOperand_Encoding_DefaultJson Object. + /// + public const uint FilterOperand_Encoding_DefaultJson = 15206; + + /// + /// The identifier for the ElementOperand_Encoding_DefaultJson Object. + /// + public const uint ElementOperand_Encoding_DefaultJson = 15207; + + /// + /// The identifier for the LiteralOperand_Encoding_DefaultJson Object. + /// + public const uint LiteralOperand_Encoding_DefaultJson = 15208; + + /// + /// The identifier for the AttributeOperand_Encoding_DefaultJson Object. + /// + public const uint AttributeOperand_Encoding_DefaultJson = 15209; + + /// + /// The identifier for the SimpleAttributeOperand_Encoding_DefaultJson Object. + /// + public const uint SimpleAttributeOperand_Encoding_DefaultJson = 15210; + + /// + /// The identifier for the ContentFilterElementResult_Encoding_DefaultJson Object. + /// + public const uint ContentFilterElementResult_Encoding_DefaultJson = 15211; + + /// + /// The identifier for the ContentFilterResult_Encoding_DefaultJson Object. + /// + public const uint ContentFilterResult_Encoding_DefaultJson = 15228; + + /// + /// The identifier for the ParsingResult_Encoding_DefaultJson Object. + /// + public const uint ParsingResult_Encoding_DefaultJson = 15236; + + /// + /// The identifier for the QueryFirstRequest_Encoding_DefaultJson Object. + /// + public const uint QueryFirstRequest_Encoding_DefaultJson = 15244; + + /// + /// The identifier for the QueryFirstResponse_Encoding_DefaultJson Object. + /// + public const uint QueryFirstResponse_Encoding_DefaultJson = 15252; + + /// + /// The identifier for the QueryNextRequest_Encoding_DefaultJson Object. + /// + public const uint QueryNextRequest_Encoding_DefaultJson = 15254; + + /// + /// The identifier for the QueryNextResponse_Encoding_DefaultJson Object. + /// + public const uint QueryNextResponse_Encoding_DefaultJson = 15255; + + /// + /// The identifier for the ReadValueId_Encoding_DefaultJson Object. + /// + public const uint ReadValueId_Encoding_DefaultJson = 15256; + + /// + /// The identifier for the ReadRequest_Encoding_DefaultJson Object. + /// + public const uint ReadRequest_Encoding_DefaultJson = 15257; + + /// + /// The identifier for the ReadResponse_Encoding_DefaultJson Object. + /// + public const uint ReadResponse_Encoding_DefaultJson = 15258; + + /// + /// The identifier for the HistoryReadValueId_Encoding_DefaultJson Object. + /// + public const uint HistoryReadValueId_Encoding_DefaultJson = 15259; + + /// + /// The identifier for the HistoryReadResult_Encoding_DefaultJson Object. + /// + public const uint HistoryReadResult_Encoding_DefaultJson = 15260; + + /// + /// The identifier for the HistoryReadDetails_Encoding_DefaultJson Object. + /// + public const uint HistoryReadDetails_Encoding_DefaultJson = 15261; + + /// + /// The identifier for the ReadEventDetails_Encoding_DefaultJson Object. + /// + public const uint ReadEventDetails_Encoding_DefaultJson = 15262; + + /// + /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultJson Object. + /// + public const uint ReadRawModifiedDetails_Encoding_DefaultJson = 15263; + + /// + /// The identifier for the ReadProcessedDetails_Encoding_DefaultJson Object. + /// + public const uint ReadProcessedDetails_Encoding_DefaultJson = 15264; + + /// + /// The identifier for the ReadAtTimeDetails_Encoding_DefaultJson Object. + /// + public const uint ReadAtTimeDetails_Encoding_DefaultJson = 15269; + + /// + /// The identifier for the ReadAnnotationDataDetails_Encoding_DefaultJson Object. + /// + public const uint ReadAnnotationDataDetails_Encoding_DefaultJson = 23512; + + /// + /// The identifier for the HistoryData_Encoding_DefaultJson Object. + /// + public const uint HistoryData_Encoding_DefaultJson = 15270; + + /// + /// The identifier for the ModificationInfo_Encoding_DefaultJson Object. + /// + public const uint ModificationInfo_Encoding_DefaultJson = 15271; + + /// + /// The identifier for the HistoryModifiedData_Encoding_DefaultJson Object. + /// + public const uint HistoryModifiedData_Encoding_DefaultJson = 15272; + + /// + /// The identifier for the HistoryEvent_Encoding_DefaultJson Object. + /// + public const uint HistoryEvent_Encoding_DefaultJson = 15273; + + /// + /// The identifier for the HistoryReadRequest_Encoding_DefaultJson Object. + /// + public const uint HistoryReadRequest_Encoding_DefaultJson = 15274; + + /// + /// The identifier for the HistoryReadResponse_Encoding_DefaultJson Object. + /// + public const uint HistoryReadResponse_Encoding_DefaultJson = 15275; + + /// + /// The identifier for the WriteValue_Encoding_DefaultJson Object. + /// + public const uint WriteValue_Encoding_DefaultJson = 15276; + + /// + /// The identifier for the WriteRequest_Encoding_DefaultJson Object. + /// + public const uint WriteRequest_Encoding_DefaultJson = 15277; + + /// + /// The identifier for the WriteResponse_Encoding_DefaultJson Object. + /// + public const uint WriteResponse_Encoding_DefaultJson = 15278; + + /// + /// The identifier for the HistoryUpdateDetails_Encoding_DefaultJson Object. + /// + public const uint HistoryUpdateDetails_Encoding_DefaultJson = 15279; + + /// + /// The identifier for the UpdateDataDetails_Encoding_DefaultJson Object. + /// + public const uint UpdateDataDetails_Encoding_DefaultJson = 15280; + + /// + /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultJson Object. + /// + public const uint UpdateStructureDataDetails_Encoding_DefaultJson = 15281; + + /// + /// The identifier for the UpdateEventDetails_Encoding_DefaultJson Object. + /// + public const uint UpdateEventDetails_Encoding_DefaultJson = 15282; + + /// + /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultJson Object. + /// + public const uint DeleteRawModifiedDetails_Encoding_DefaultJson = 15283; + + /// + /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultJson Object. + /// + public const uint DeleteAtTimeDetails_Encoding_DefaultJson = 15284; + + /// + /// The identifier for the DeleteEventDetails_Encoding_DefaultJson Object. + /// + public const uint DeleteEventDetails_Encoding_DefaultJson = 15285; + + /// + /// The identifier for the HistoryUpdateResult_Encoding_DefaultJson Object. + /// + public const uint HistoryUpdateResult_Encoding_DefaultJson = 15286; + + /// + /// The identifier for the HistoryUpdateRequest_Encoding_DefaultJson Object. + /// + public const uint HistoryUpdateRequest_Encoding_DefaultJson = 15287; + + /// + /// The identifier for the HistoryUpdateResponse_Encoding_DefaultJson Object. + /// + public const uint HistoryUpdateResponse_Encoding_DefaultJson = 15288; + + /// + /// The identifier for the CallMethodRequest_Encoding_DefaultJson Object. + /// + public const uint CallMethodRequest_Encoding_DefaultJson = 15289; + + /// + /// The identifier for the CallMethodResult_Encoding_DefaultJson Object. + /// + public const uint CallMethodResult_Encoding_DefaultJson = 15290; + + /// + /// The identifier for the CallRequest_Encoding_DefaultJson Object. + /// + public const uint CallRequest_Encoding_DefaultJson = 15291; + + /// + /// The identifier for the CallResponse_Encoding_DefaultJson Object. + /// + public const uint CallResponse_Encoding_DefaultJson = 15292; + + /// + /// The identifier for the MonitoringFilter_Encoding_DefaultJson Object. + /// + public const uint MonitoringFilter_Encoding_DefaultJson = 15293; + + /// + /// The identifier for the DataChangeFilter_Encoding_DefaultJson Object. + /// + public const uint DataChangeFilter_Encoding_DefaultJson = 15294; + + /// + /// The identifier for the EventFilter_Encoding_DefaultJson Object. + /// + public const uint EventFilter_Encoding_DefaultJson = 15295; + + /// + /// The identifier for the AggregateConfiguration_Encoding_DefaultJson Object. + /// + public const uint AggregateConfiguration_Encoding_DefaultJson = 15304; + + /// + /// The identifier for the AggregateFilter_Encoding_DefaultJson Object. + /// + public const uint AggregateFilter_Encoding_DefaultJson = 15312; + + /// + /// The identifier for the MonitoringFilterResult_Encoding_DefaultJson Object. + /// + public const uint MonitoringFilterResult_Encoding_DefaultJson = 15313; + + /// + /// The identifier for the EventFilterResult_Encoding_DefaultJson Object. + /// + public const uint EventFilterResult_Encoding_DefaultJson = 15314; + + /// + /// The identifier for the AggregateFilterResult_Encoding_DefaultJson Object. + /// + public const uint AggregateFilterResult_Encoding_DefaultJson = 15315; + + /// + /// The identifier for the MonitoringParameters_Encoding_DefaultJson Object. + /// + public const uint MonitoringParameters_Encoding_DefaultJson = 15320; + + /// + /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultJson Object. + /// + public const uint MonitoredItemCreateRequest_Encoding_DefaultJson = 15321; + + /// + /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultJson Object. + /// + public const uint MonitoredItemCreateResult_Encoding_DefaultJson = 15322; + + /// + /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultJson Object. + /// + public const uint CreateMonitoredItemsRequest_Encoding_DefaultJson = 15323; + + /// + /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultJson Object. + /// + public const uint CreateMonitoredItemsResponse_Encoding_DefaultJson = 15324; + + /// + /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultJson Object. + /// + public const uint MonitoredItemModifyRequest_Encoding_DefaultJson = 15325; + + /// + /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultJson Object. + /// + public const uint MonitoredItemModifyResult_Encoding_DefaultJson = 15326; + + /// + /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultJson Object. + /// + public const uint ModifyMonitoredItemsRequest_Encoding_DefaultJson = 15327; + + /// + /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultJson Object. + /// + public const uint ModifyMonitoredItemsResponse_Encoding_DefaultJson = 15328; + + /// + /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultJson Object. + /// + public const uint SetMonitoringModeRequest_Encoding_DefaultJson = 15329; + + /// + /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultJson Object. + /// + public const uint SetMonitoringModeResponse_Encoding_DefaultJson = 15331; + + /// + /// The identifier for the SetTriggeringRequest_Encoding_DefaultJson Object. + /// + public const uint SetTriggeringRequest_Encoding_DefaultJson = 15332; + + /// + /// The identifier for the SetTriggeringResponse_Encoding_DefaultJson Object. + /// + public const uint SetTriggeringResponse_Encoding_DefaultJson = 15333; + + /// + /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultJson Object. + /// + public const uint DeleteMonitoredItemsRequest_Encoding_DefaultJson = 15335; + + /// + /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultJson Object. + /// + public const uint DeleteMonitoredItemsResponse_Encoding_DefaultJson = 15336; + + /// + /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultJson Object. + /// + public const uint CreateSubscriptionRequest_Encoding_DefaultJson = 15337; + + /// + /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultJson Object. + /// + public const uint CreateSubscriptionResponse_Encoding_DefaultJson = 15338; + + /// + /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultJson Object. + /// + public const uint ModifySubscriptionRequest_Encoding_DefaultJson = 15339; + + /// + /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultJson Object. + /// + public const uint ModifySubscriptionResponse_Encoding_DefaultJson = 15340; + + /// + /// The identifier for the SetPublishingModeRequest_Encoding_DefaultJson Object. + /// + public const uint SetPublishingModeRequest_Encoding_DefaultJson = 15341; + + /// + /// The identifier for the SetPublishingModeResponse_Encoding_DefaultJson Object. + /// + public const uint SetPublishingModeResponse_Encoding_DefaultJson = 15342; + + /// + /// The identifier for the NotificationMessage_Encoding_DefaultJson Object. + /// + public const uint NotificationMessage_Encoding_DefaultJson = 15343; + + /// + /// The identifier for the NotificationData_Encoding_DefaultJson Object. + /// + public const uint NotificationData_Encoding_DefaultJson = 15344; + + /// + /// The identifier for the DataChangeNotification_Encoding_DefaultJson Object. + /// + public const uint DataChangeNotification_Encoding_DefaultJson = 15345; + + /// + /// The identifier for the MonitoredItemNotification_Encoding_DefaultJson Object. + /// + public const uint MonitoredItemNotification_Encoding_DefaultJson = 15346; + + /// + /// The identifier for the EventNotificationList_Encoding_DefaultJson Object. + /// + public const uint EventNotificationList_Encoding_DefaultJson = 15347; + + /// + /// The identifier for the EventFieldList_Encoding_DefaultJson Object. + /// + public const uint EventFieldList_Encoding_DefaultJson = 15348; + + /// + /// The identifier for the HistoryEventFieldList_Encoding_DefaultJson Object. + /// + public const uint HistoryEventFieldList_Encoding_DefaultJson = 15349; + + /// + /// The identifier for the StatusChangeNotification_Encoding_DefaultJson Object. + /// + public const uint StatusChangeNotification_Encoding_DefaultJson = 15350; + + /// + /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultJson Object. + /// + public const uint SubscriptionAcknowledgement_Encoding_DefaultJson = 15351; + + /// + /// The identifier for the PublishRequest_Encoding_DefaultJson Object. + /// + public const uint PublishRequest_Encoding_DefaultJson = 15352; + + /// + /// The identifier for the PublishResponse_Encoding_DefaultJson Object. + /// + public const uint PublishResponse_Encoding_DefaultJson = 15353; + + /// + /// The identifier for the RepublishRequest_Encoding_DefaultJson Object. + /// + public const uint RepublishRequest_Encoding_DefaultJson = 15354; + + /// + /// The identifier for the RepublishResponse_Encoding_DefaultJson Object. + /// + public const uint RepublishResponse_Encoding_DefaultJson = 15355; + + /// + /// The identifier for the TransferResult_Encoding_DefaultJson Object. + /// + public const uint TransferResult_Encoding_DefaultJson = 15356; + + /// + /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultJson Object. + /// + public const uint TransferSubscriptionsRequest_Encoding_DefaultJson = 15357; + + /// + /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultJson Object. + /// + public const uint TransferSubscriptionsResponse_Encoding_DefaultJson = 15358; + + /// + /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultJson Object. + /// + public const uint DeleteSubscriptionsRequest_Encoding_DefaultJson = 15359; + + /// + /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultJson Object. + /// + public const uint DeleteSubscriptionsResponse_Encoding_DefaultJson = 15360; + + /// + /// The identifier for the BuildInfo_Encoding_DefaultJson Object. + /// + public const uint BuildInfo_Encoding_DefaultJson = 15361; + + /// + /// The identifier for the RedundantServerDataType_Encoding_DefaultJson Object. + /// + public const uint RedundantServerDataType_Encoding_DefaultJson = 15362; + + /// + /// The identifier for the EndpointUrlListDataType_Encoding_DefaultJson Object. + /// + public const uint EndpointUrlListDataType_Encoding_DefaultJson = 15363; + + /// + /// The identifier for the NetworkGroupDataType_Encoding_DefaultJson Object. + /// + public const uint NetworkGroupDataType_Encoding_DefaultJson = 15364; + + /// + /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public const uint SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson = 15365; + + /// + /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultJson Object. + /// + public const uint ServerDiagnosticsSummaryDataType_Encoding_DefaultJson = 15366; + + /// + /// The identifier for the ServerStatusDataType_Encoding_DefaultJson Object. + /// + public const uint ServerStatusDataType_Encoding_DefaultJson = 15367; + + /// + /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public const uint SessionDiagnosticsDataType_Encoding_DefaultJson = 15368; + + /// + /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public const uint SessionSecurityDiagnosticsDataType_Encoding_DefaultJson = 15369; + + /// + /// The identifier for the ServiceCounterDataType_Encoding_DefaultJson Object. + /// + public const uint ServiceCounterDataType_Encoding_DefaultJson = 15370; + + /// + /// The identifier for the StatusResult_Encoding_DefaultJson Object. + /// + public const uint StatusResult_Encoding_DefaultJson = 15371; + + /// + /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public const uint SubscriptionDiagnosticsDataType_Encoding_DefaultJson = 15372; + + /// + /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultJson Object. + /// + public const uint ModelChangeStructureDataType_Encoding_DefaultJson = 15373; + + /// + /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultJson Object. + /// + public const uint SemanticChangeStructureDataType_Encoding_DefaultJson = 15374; + + /// + /// The identifier for the Range_Encoding_DefaultJson Object. + /// + public const uint Range_Encoding_DefaultJson = 15375; + + /// + /// The identifier for the EUInformation_Encoding_DefaultJson Object. + /// + public const uint EUInformation_Encoding_DefaultJson = 15376; + + /// + /// The identifier for the ComplexNumberType_Encoding_DefaultJson Object. + /// + public const uint ComplexNumberType_Encoding_DefaultJson = 15377; + + /// + /// The identifier for the DoubleComplexNumberType_Encoding_DefaultJson Object. + /// + public const uint DoubleComplexNumberType_Encoding_DefaultJson = 15378; + + /// + /// The identifier for the AxisInformation_Encoding_DefaultJson Object. + /// + public const uint AxisInformation_Encoding_DefaultJson = 15379; + + /// + /// The identifier for the XVType_Encoding_DefaultJson Object. + /// + public const uint XVType_Encoding_DefaultJson = 15380; + + /// + /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultJson Object. + /// + public const uint ProgramDiagnosticDataType_Encoding_DefaultJson = 15381; + + /// + /// The identifier for the ProgramDiagnostic2DataType_Encoding_DefaultJson Object. + /// + public const uint ProgramDiagnostic2DataType_Encoding_DefaultJson = 15405; + + /// + /// The identifier for the Annotation_Encoding_DefaultJson Object. + /// + public const uint Annotation_Encoding_DefaultJson = 15382; + } + #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 ChoiceStateType ObjectType. + /// + public const uint ChoiceStateType = 15109; + + /// + /// 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 FileDirectoryType ObjectType. + /// + public const uint FileDirectoryType = 13353; + + /// + /// The identifier for the TemporaryFileTransferType ObjectType. + /// + public const uint TemporaryFileTransferType = 15744; + + /// + /// The identifier for the FileTransferStateMachineType ObjectType. + /// + public const uint FileTransferStateMachineType = 15803; + + /// + /// The identifier for the RoleSetType ObjectType. + /// + public const uint RoleSetType = 15607; + + /// + /// The identifier for the RoleType ObjectType. + /// + public const uint RoleType = 15620; + + /// + /// The identifier for the RoleMappingRuleChangedAuditEventType ObjectType. + /// + public const uint RoleMappingRuleChangedAuditEventType = 17641; + + /// + /// The identifier for the DictionaryEntryType ObjectType. + /// + public const uint DictionaryEntryType = 17589; + + /// + /// The identifier for the DictionaryFolderType ObjectType. + /// + public const uint DictionaryFolderType = 17591; + + /// + /// The identifier for the IrdiDictionaryEntryType ObjectType. + /// + public const uint IrdiDictionaryEntryType = 17598; + + /// + /// The identifier for the UriDictionaryEntryType ObjectType. + /// + public const uint UriDictionaryEntryType = 17600; + + /// + /// The identifier for the BaseInterfaceType ObjectType. + /// + public const uint BaseInterfaceType = 17602; + + /// + /// The identifier for the IOrderedObjectType ObjectType. + /// + public const uint IOrderedObjectType = 23513; + + /// + /// The identifier for the OrderedListType ObjectType. + /// + public const uint OrderedListType = 23518; + + /// + /// 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 AlarmGroupType ObjectType. + /// + public const uint AlarmGroupType = 16405; + + /// + /// 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 NonExclusiveRateOfChangeAlarmType ObjectType. + /// + public const uint NonExclusiveRateOfChangeAlarmType = 10214; + + /// + /// The identifier for the ExclusiveDeviationAlarmType ObjectType. + /// + public const uint ExclusiveDeviationAlarmType = 9764; + + /// + /// 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 InstrumentDiagnosticAlarmType ObjectType. + /// + public const uint InstrumentDiagnosticAlarmType = 18347; + + /// + /// The identifier for the SystemDiagnosticAlarmType ObjectType. + /// + public const uint SystemDiagnosticAlarmType = 18496; + + /// + /// The identifier for the CertificateExpirationAlarmType ObjectType. + /// + public const uint CertificateExpirationAlarmType = 13225; + + /// + /// The identifier for the DiscrepancyAlarmType ObjectType. + /// + public const uint DiscrepancyAlarmType = 17080; + + /// + /// 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 SafetyConditionClassType ObjectType. + /// + public const uint SafetyConditionClassType = 17218; + + /// + /// The identifier for the HighlyManagedAlarmConditionClassType ObjectType. + /// + public const uint HighlyManagedAlarmConditionClassType = 17219; + + /// + /// The identifier for the TrainingConditionClassType ObjectType. + /// + public const uint TrainingConditionClassType = 17220; + + /// + /// The identifier for the StatisticalConditionClassType ObjectType. + /// + public const uint StatisticalConditionClassType = 18665; + + /// + /// The identifier for the TestingConditionSubClassType ObjectType. + /// + public const uint TestingConditionSubClassType = 17221; + + /// + /// 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 AuditConditionSuppressionEventType ObjectType. + /// + public const uint AuditConditionSuppressionEventType = 17225; + + /// + /// The identifier for the AuditConditionSilenceEventType ObjectType. + /// + public const uint AuditConditionSilenceEventType = 17242; + + /// + /// The identifier for the AuditConditionResetEventType ObjectType. + /// + public const uint AuditConditionResetEventType = 15013; + + /// + /// The identifier for the AuditConditionOutOfServiceEventType ObjectType. + /// + public const uint AuditConditionOutOfServiceEventType = 17259; + + /// + /// 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 AlarmMetricsType ObjectType. + /// + public const uint AlarmMetricsType = 17279; + + /// + /// 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 AuditHistoryAnnotationUpdateEventType ObjectType. + /// + public const uint AuditHistoryAnnotationUpdateEventType = 19095; + + /// + /// 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 TrustListType ObjectType. + /// + public const uint TrustListType = 12522; + + /// + /// The identifier for the TrustListOutOfDateAlarmType ObjectType. + /// + public const uint TrustListOutOfDateAlarmType = 19297; + + /// + /// The identifier for the CertificateGroupType ObjectType. + /// + public const uint CertificateGroupType = 12555; + + /// + /// The identifier for the CertificateGroupFolderType ObjectType. + /// + public const uint CertificateGroupFolderType = 13813; + + /// + /// The identifier for the CertificateType ObjectType. + /// + public const uint CertificateType = 12556; + + /// + /// The identifier for the ApplicationCertificateType ObjectType. + /// + public const uint ApplicationCertificateType = 12557; + + /// + /// The identifier for the HttpsCertificateType ObjectType. + /// + public const uint HttpsCertificateType = 12558; + + /// + /// The identifier for the UserCredentialCertificateType ObjectType. + /// + public const uint UserCredentialCertificateType = 15181; + + /// + /// The identifier for the RsaMinApplicationCertificateType ObjectType. + /// + public const uint RsaMinApplicationCertificateType = 12559; + + /// + /// The identifier for the RsaSha256ApplicationCertificateType ObjectType. + /// + public const uint RsaSha256ApplicationCertificateType = 12560; + + /// + /// The identifier for the TrustListUpdatedAuditEventType ObjectType. + /// + public const uint TrustListUpdatedAuditEventType = 12561; + + /// + /// The identifier for the ServerConfigurationType ObjectType. + /// + public const uint ServerConfigurationType = 12581; + + /// + /// The identifier for the CertificateUpdatedAuditEventType ObjectType. + /// + public const uint CertificateUpdatedAuditEventType = 12620; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType ObjectType. + /// + public const uint KeyCredentialConfigurationFolderType = 17496; + + /// + /// The identifier for the KeyCredentialConfigurationType ObjectType. + /// + public const uint KeyCredentialConfigurationType = 18001; + + /// + /// The identifier for the KeyCredentialAuditEventType ObjectType. + /// + public const uint KeyCredentialAuditEventType = 18011; + + /// + /// The identifier for the KeyCredentialUpdatedAuditEventType ObjectType. + /// + public const uint KeyCredentialUpdatedAuditEventType = 18029; + + /// + /// The identifier for the KeyCredentialDeletedAuditEventType ObjectType. + /// + public const uint KeyCredentialDeletedAuditEventType = 18047; + + /// + /// The identifier for the AuthorizationServiceConfigurationType ObjectType. + /// + public const uint AuthorizationServiceConfigurationType = 17852; + + /// + /// The identifier for the AggregateConfigurationType ObjectType. + /// + public const uint AggregateConfigurationType = 11187; + + /// + /// The identifier for the PubSubKeyServiceType ObjectType. + /// + public const uint PubSubKeyServiceType = 15906; + + /// + /// The identifier for the SecurityGroupFolderType ObjectType. + /// + public const uint SecurityGroupFolderType = 15452; + + /// + /// The identifier for the SecurityGroupType ObjectType. + /// + public const uint SecurityGroupType = 15471; + + /// + /// The identifier for the PublishSubscribeType ObjectType. + /// + public const uint PublishSubscribeType = 14416; + + /// + /// The identifier for the PublishedDataSetType ObjectType. + /// + public const uint PublishedDataSetType = 14509; + + /// + /// The identifier for the ExtensionFieldsType ObjectType. + /// + public const uint ExtensionFieldsType = 15489; + + /// + /// The identifier for the PublishedDataItemsType ObjectType. + /// + public const uint PublishedDataItemsType = 14534; + + /// + /// The identifier for the PublishedEventsType ObjectType. + /// + public const uint PublishedEventsType = 14572; + + /// + /// The identifier for the DataSetFolderType ObjectType. + /// + public const uint DataSetFolderType = 14477; + + /// + /// The identifier for the PubSubConnectionType ObjectType. + /// + public const uint PubSubConnectionType = 14209; + + /// + /// The identifier for the ConnectionTransportType ObjectType. + /// + public const uint ConnectionTransportType = 17721; + + /// + /// The identifier for the PubSubGroupType ObjectType. + /// + public const uint PubSubGroupType = 14232; + + /// + /// The identifier for the WriterGroupType ObjectType. + /// + public const uint WriterGroupType = 17725; + + /// + /// The identifier for the WriterGroupTransportType ObjectType. + /// + public const uint WriterGroupTransportType = 17997; + + /// + /// The identifier for the WriterGroupMessageType ObjectType. + /// + public const uint WriterGroupMessageType = 17998; + + /// + /// The identifier for the ReaderGroupType ObjectType. + /// + public const uint ReaderGroupType = 17999; + + /// + /// The identifier for the ReaderGroupTransportType ObjectType. + /// + public const uint ReaderGroupTransportType = 21090; + + /// + /// The identifier for the ReaderGroupMessageType ObjectType. + /// + public const uint ReaderGroupMessageType = 21091; + + /// + /// The identifier for the DataSetWriterType ObjectType. + /// + public const uint DataSetWriterType = 15298; + + /// + /// The identifier for the DataSetWriterTransportType ObjectType. + /// + public const uint DataSetWriterTransportType = 15305; + + /// + /// The identifier for the DataSetWriterMessageType ObjectType. + /// + public const uint DataSetWriterMessageType = 21096; + + /// + /// The identifier for the DataSetReaderType ObjectType. + /// + public const uint DataSetReaderType = 15306; + + /// + /// The identifier for the DataSetReaderTransportType ObjectType. + /// + public const uint DataSetReaderTransportType = 15319; + + /// + /// The identifier for the DataSetReaderMessageType ObjectType. + /// + public const uint DataSetReaderMessageType = 21104; + + /// + /// The identifier for the SubscribedDataSetType ObjectType. + /// + public const uint SubscribedDataSetType = 15108; + + /// + /// The identifier for the TargetVariablesType ObjectType. + /// + public const uint TargetVariablesType = 15111; + + /// + /// The identifier for the SubscribedDataSetMirrorType ObjectType. + /// + public const uint SubscribedDataSetMirrorType = 15127; + + /// + /// The identifier for the PubSubStatusType ObjectType. + /// + public const uint PubSubStatusType = 14643; + + /// + /// The identifier for the PubSubDiagnosticsType ObjectType. + /// + public const uint PubSubDiagnosticsType = 19677; + + /// + /// The identifier for the PubSubDiagnosticsRootType ObjectType. + /// + public const uint PubSubDiagnosticsRootType = 19732; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType ObjectType. + /// + public const uint PubSubDiagnosticsConnectionType = 19786; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType ObjectType. + /// + public const uint PubSubDiagnosticsWriterGroupType = 19834; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType ObjectType. + /// + public const uint PubSubDiagnosticsReaderGroupType = 19903; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType ObjectType. + /// + public const uint PubSubDiagnosticsDataSetWriterType = 19968; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType ObjectType. + /// + public const uint PubSubDiagnosticsDataSetReaderType = 20027; + + /// + /// The identifier for the PubSubStatusEventType ObjectType. + /// + public const uint PubSubStatusEventType = 15535; + + /// + /// The identifier for the PubSubTransportLimitsExceedEventType ObjectType. + /// + public const uint PubSubTransportLimitsExceedEventType = 15548; + + /// + /// The identifier for the PubSubCommunicationFailureEventType ObjectType. + /// + public const uint PubSubCommunicationFailureEventType = 15563; + + /// + /// The identifier for the UadpWriterGroupMessageType ObjectType. + /// + public const uint UadpWriterGroupMessageType = 21105; + + /// + /// The identifier for the UadpDataSetWriterMessageType ObjectType. + /// + public const uint UadpDataSetWriterMessageType = 21111; + + /// + /// The identifier for the UadpDataSetReaderMessageType ObjectType. + /// + public const uint UadpDataSetReaderMessageType = 21116; + + /// + /// The identifier for the JsonWriterGroupMessageType ObjectType. + /// + public const uint JsonWriterGroupMessageType = 21126; + + /// + /// The identifier for the JsonDataSetWriterMessageType ObjectType. + /// + public const uint JsonDataSetWriterMessageType = 21128; + + /// + /// The identifier for the JsonDataSetReaderMessageType ObjectType. + /// + public const uint JsonDataSetReaderMessageType = 21130; + + /// + /// The identifier for the DatagramConnectionTransportType ObjectType. + /// + public const uint DatagramConnectionTransportType = 15064; + + /// + /// The identifier for the DatagramWriterGroupTransportType ObjectType. + /// + public const uint DatagramWriterGroupTransportType = 21133; + + /// + /// The identifier for the BrokerConnectionTransportType ObjectType. + /// + public const uint BrokerConnectionTransportType = 15155; + + /// + /// The identifier for the BrokerWriterGroupTransportType ObjectType. + /// + public const uint BrokerWriterGroupTransportType = 21136; + + /// + /// The identifier for the BrokerDataSetWriterTransportType ObjectType. + /// + public const uint BrokerDataSetWriterTransportType = 21138; + + /// + /// The identifier for the BrokerDataSetReaderTransportType ObjectType. + /// + public const uint BrokerDataSetReaderTransportType = 21142; + + /// + /// The identifier for the NetworkAddressType ObjectType. + /// + public const uint NetworkAddressType = 21145; + + /// + /// The identifier for the NetworkAddressUrlType ObjectType. + /// + public const uint NetworkAddressUrlType = 21147; + + /// + /// The identifier for the AliasNameType ObjectType. + /// + public const uint AliasNameType = 23455; + + /// + /// The identifier for the AliasNameCategoryType ObjectType. + /// + public const uint AliasNameCategoryType = 23456; + } + #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 HasArgumentDescription ReferenceType. + /// + public const uint HasArgumentDescription = 129; + + /// + /// The identifier for the HasOptionalInputArgumentDescription ReferenceType. + /// + public const uint HasOptionalInputArgumentDescription = 131; + + /// + /// The identifier for the HasGuard ReferenceType. + /// + public const uint HasGuard = 15112; + + /// + /// The identifier for the HasDictionaryEntry ReferenceType. + /// + public const uint HasDictionaryEntry = 17597; + + /// + /// The identifier for the HasInterface ReferenceType. + /// + public const uint HasInterface = 17603; + + /// + /// The identifier for the HasAddIn ReferenceType. + /// + public const uint HasAddIn = 17604; + + /// + /// 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 HasAlarmSuppressionGroup ReferenceType. + /// + public const uint HasAlarmSuppressionGroup = 16361; + + /// + /// The identifier for the AlarmGroupMember ReferenceType. + /// + public const uint AlarmGroupMember = 16362; + + /// + /// The identifier for the HasCondition ReferenceType. + /// + public const uint HasCondition = 9006; + + /// + /// The identifier for the HasEffectDisable ReferenceType. + /// + public const uint HasEffectDisable = 17276; + + /// + /// The identifier for the HasEffectEnable ReferenceType. + /// + public const uint HasEffectEnable = 17983; + + /// + /// The identifier for the HasEffectSuppressed ReferenceType. + /// + public const uint HasEffectSuppressed = 17984; + + /// + /// The identifier for the HasEffectUnsuppressed ReferenceType. + /// + public const uint HasEffectUnsuppressed = 17985; + + /// + /// The identifier for the HasPubSubConnection ReferenceType. + /// + public const uint HasPubSubConnection = 14476; + + /// + /// The identifier for the DataSetToWriter ReferenceType. + /// + public const uint DataSetToWriter = 14936; + + /// + /// The identifier for the HasDataSetWriter ReferenceType. + /// + public const uint HasDataSetWriter = 15296; + + /// + /// The identifier for the HasWriterGroup ReferenceType. + /// + public const uint HasWriterGroup = 18804; + + /// + /// The identifier for the HasDataSetReader ReferenceType. + /// + public const uint HasDataSetReader = 15297; + + /// + /// The identifier for the HasReaderGroup ReferenceType. + /// + public const uint HasReaderGroup = 18805; + + /// + /// The identifier for the AliasFor ReferenceType. + /// + public const uint AliasFor = 23469; + } + #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 DataTypeDictionaryType_Deprecated Variable. + /// + public const uint DataTypeDictionaryType_Deprecated = 15001; + + /// + /// 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_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 OPCUANamespaceMetadata_NamespaceUri Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceUri = 15958; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceVersion Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceVersion = 15959; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespacePublicationDate Variable. + /// + public const uint OPCUANamespaceMetadata_NamespacePublicationDate = 15960; + + /// + /// The identifier for the OPCUANamespaceMetadata_IsNamespaceSubset Variable. + /// + public const uint OPCUANamespaceMetadata_IsNamespaceSubset = 15961; + + /// + /// The identifier for the OPCUANamespaceMetadata_StaticNodeIdTypes Variable. + /// + public const uint OPCUANamespaceMetadata_StaticNodeIdTypes = 15962; + + /// + /// The identifier for the OPCUANamespaceMetadata_StaticNumericNodeIdRange Variable. + /// + public const uint OPCUANamespaceMetadata_StaticNumericNodeIdRange = 15963; + + /// + /// The identifier for the OPCUANamespaceMetadata_StaticStringNodeIdPattern Variable. + /// + public const uint OPCUANamespaceMetadata_StaticStringNodeIdPattern = 15964; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Size Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Size = 15966; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Writable Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Writable = 15967; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_UserWritable Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_UserWritable = 15968; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_OpenCount Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_OpenCount = 15969; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments = 15972; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments = 15973; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments = 15975; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments = 15977; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments = 15978; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments = 15980; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments = 15982; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments = 15983; + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments Variable. + /// + public const uint OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments = 15985; + + /// + /// The identifier for the OPCUANamespaceMetadata_DefaultRolePermissions Variable. + /// + public const uint OPCUANamespaceMetadata_DefaultRolePermissions = 16134; + + /// + /// The identifier for the OPCUANamespaceMetadata_DefaultUserRolePermissions Variable. + /// + public const uint OPCUANamespaceMetadata_DefaultUserRolePermissions = 16135; + + /// + /// The identifier for the OPCUANamespaceMetadata_DefaultAccessRestrictions Variable. + /// + public const uint OPCUANamespaceMetadata_DefaultAccessRestrictions = 16136; + + /// + /// 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 MaxCharacters Variable. + /// + public const uint MaxCharacters = 15002; + + /// + /// The identifier for the MaxByteStringLength Variable. + /// + public const uint MaxByteStringLength = 12908; + + /// + /// 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 OptionSetValues Variable. + /// + public const uint OptionSetValues = 12745; + + /// + /// 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 DefaultInputValues Variable. + /// + public const uint DefaultInputValues = 16306; + + /// + /// The identifier for the DefaultInstanceBrowseName Variable. + /// + public const uint DefaultInstanceBrowseName = 17605; + + /// + /// 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_UrisVersion Variable. + /// + public const uint ServerType_UrisVersion = 15003; + + /// + /// 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_EstimatedReturnTime Variable. + /// + public const uint ServerType_EstimatedReturnTime = 12882; + + /// + /// The identifier for the ServerType_LocalTime Variable. + /// + public const uint ServerType_LocalTime = 17612; + + /// + /// 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_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. + /// + public const uint ServerType_ServerCapabilities_RoleSet_AddRole_InputArguments = 16291; + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. + /// + public const uint ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments = 16292; + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. + /// + public const uint ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments = 16294; + + /// + /// 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 ServerType_ResendData_InputArguments Variable. + /// + public const uint ServerType_ResendData_InputArguments = 12872; + + /// + /// The identifier for the ServerType_SetSubscriptionDurable_InputArguments Variable. + /// + public const uint ServerType_SetSubscriptionDurable_InputArguments = 12747; + + /// + /// The identifier for the ServerType_SetSubscriptionDurable_OutputArguments Variable. + /// + public const uint ServerType_SetSubscriptionDurable_OutputArguments = 12748; + + /// + /// The identifier for the ServerType_RequestServerStateChange_InputArguments Variable. + /// + public const uint ServerType_RequestServerStateChange_InputArguments = 12884; + + /// + /// 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_MaxByteStringLength Variable. + /// + public const uint ServerCapabilitiesType_MaxByteStringLength = 12910; + + /// + /// The identifier for the ServerCapabilitiesType_VendorCapability_Placeholder Variable. + /// + public const uint ServerCapabilitiesType_VendorCapability_Placeholder = 11562; + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_AddRole_InputArguments Variable. + /// + public const uint ServerCapabilitiesType_RoleSet_AddRole_InputArguments = 16297; + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_AddRole_OutputArguments Variable. + /// + public const uint ServerCapabilitiesType_RoleSet_AddRole_OutputArguments = 16298; + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments Variable. + /// + public const uint ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments = 16300; + + /// + /// 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_ClientName_Placeholder_SessionDiagnostics Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics = 12098; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId = 12099; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName = 12100; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription = 12101; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri = 12102; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl = 12103; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds = 12104; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout = 12105; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize = 12106; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime = 12107; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime = 12108; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount = 12109; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount = 12110; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue = 12111; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount = 12112; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount = 12113; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount = 12114; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount = 12115; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount = 12116; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount = 12117; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount = 12118; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount = 12119; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount = 12120; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount = 12121; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount = 12122; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount = 12123; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount = 12124; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount = 12125; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount = 12126; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount = 12127; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount = 12128; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount = 12129; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount = 12130; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount = 12131; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount = 12132; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount = 12133; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount = 12134; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount = 12135; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount = 12136; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 12137; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount = 12138; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount = 12139; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount = 12140; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount = 12141; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics = 12142; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId = 12143; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession = 12144; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory = 12145; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism = 12146; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding = 12147; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol = 12148; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode = 12149; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri = 12150; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate = 12151; + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray Variable. + /// + public const uint SessionsDiagnosticsSummaryType_ClientName_Placeholder_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_Writable Variable. + /// + public const uint FileType_Writable = 12686; + + /// + /// The identifier for the FileType_UserWritable Variable. + /// + public const uint FileType_UserWritable = 12687; + + /// + /// The identifier for the FileType_OpenCount Variable. + /// + public const uint FileType_OpenCount = 11579; + + /// + /// The identifier for the FileType_MimeType Variable. + /// + public const uint FileType_MimeType = 13341; + + /// + /// 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 AddressSpaceFileType_Open_InputArguments Variable. + /// + public const uint AddressSpaceFileType_Open_InputArguments = 11601; + + /// + /// The identifier for the AddressSpaceFileType_Open_OutputArguments Variable. + /// + public const uint AddressSpaceFileType_Open_OutputArguments = 11602; + + /// + /// The identifier for the AddressSpaceFileType_Close_InputArguments Variable. + /// + public const uint AddressSpaceFileType_Close_InputArguments = 11604; + + /// + /// The identifier for the AddressSpaceFileType_Read_InputArguments Variable. + /// + public const uint AddressSpaceFileType_Read_InputArguments = 11606; + + /// + /// The identifier for the AddressSpaceFileType_Read_OutputArguments Variable. + /// + public const uint AddressSpaceFileType_Read_OutputArguments = 11607; + + /// + /// The identifier for the AddressSpaceFileType_Write_InputArguments Variable. + /// + public const uint AddressSpaceFileType_Write_InputArguments = 11609; + + /// + /// The identifier for the AddressSpaceFileType_GetPosition_InputArguments Variable. + /// + public const uint AddressSpaceFileType_GetPosition_InputArguments = 11611; + + /// + /// The identifier for the AddressSpaceFileType_GetPosition_OutputArguments Variable. + /// + public const uint AddressSpaceFileType_GetPosition_OutputArguments = 11612; + + /// + /// The identifier for the AddressSpaceFileType_SetPosition_InputArguments Variable. + /// + public const uint AddressSpaceFileType_SetPosition_InputArguments = 11614; + + /// + /// 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_StaticNodeIdTypes Variable. + /// + public const uint NamespaceMetadataType_StaticNodeIdTypes = 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 NamespaceMetadataType_NamespaceFile_Size Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Size = 11625; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Writable Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Writable = 12690; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_UserWritable Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_UserWritable = 12691; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_OpenCount Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_OpenCount = 11628; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Open_InputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Open_InputArguments = 11630; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Open_OutputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Open_OutputArguments = 11631; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Close_InputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Close_InputArguments = 11633; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Read_InputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Read_InputArguments = 11635; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Read_OutputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Read_OutputArguments = 11636; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Write_InputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_Write_InputArguments = 11638; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments = 11640; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments = 11641; + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments Variable. + /// + public const uint NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments = 11643; + + /// + /// The identifier for the NamespaceMetadataType_DefaultRolePermissions Variable. + /// + public const uint NamespaceMetadataType_DefaultRolePermissions = 16137; + + /// + /// The identifier for the NamespaceMetadataType_DefaultUserRolePermissions Variable. + /// + public const uint NamespaceMetadataType_DefaultUserRolePermissions = 16138; + + /// + /// The identifier for the NamespaceMetadataType_DefaultAccessRestrictions Variable. + /// + public const uint NamespaceMetadataType_DefaultAccessRestrictions = 16139; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri = 11647; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion = 11648; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate = 11649; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset = 11650; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes = 11651; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange = 11652; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern = 11653; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size = 11655; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable = 12692; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable = 12693; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount = 11658; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments = 11660; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments = 11661; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments = 11663; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments = 11665; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments = 11666; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments = 11668; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments = 11670; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments = 11671; + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments Variable. + /// + public const uint NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments = 11673; + + /// + /// 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 AuditSecurityEventType_StatusCodeId Variable. + /// + public const uint AuditSecurityEventType_StatusCodeId = 17615; + + /// + /// 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 ProgressEventType_Context Variable. + /// + public const uint ProgressEventType_Context = 12502; + + /// + /// The identifier for the ProgressEventType_Progress Variable. + /// + public const uint ProgressEventType_Progress = 12503; + + /// + /// 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 SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics Variable. + /// + public const uint SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics = 12779; + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval Variable. + /// + public const uint SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval = 12780; + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount Variable. + /// + public const uint SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount = 12781; + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount Variable. + /// + public const uint SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount = 12782; + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount Variable. + /// + public const uint SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount = 12783; + + /// + /// 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 SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics = 12784; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId = 12785; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId = 12786; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority = 12787; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval = 12788; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount = 12789; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount = 12790; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish = 12791; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled = 12792; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount = 12793; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount = 12794; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount = 12795; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount = 12796; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount = 12797; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount = 12798; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount = 12799; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount = 12800; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount = 12801; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount = 12802; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount = 12803; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount = 12804; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount = 12805; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount = 12806; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount = 12807; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount = 12808; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount = 12809; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount = 12810; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount = 12811; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount = 12812; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount = 12813; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber = 12814; + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount Variable. + /// + public const uint SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount = 12815; + + /// + /// 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 SessionDiagnosticsArrayType_SessionDiagnostics Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics = 12816; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SessionId Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_SessionId = 12817; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SessionName Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_SessionName = 12818; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription = 12819; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri = 12820; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl = 12821; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds = 12822; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout = 12823; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize = 12824; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime = 12825; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime = 12826; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount = 12827; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount = 12828; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue = 12829; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount = 12830; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount = 12831; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount = 12832; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount = 12833; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount = 12834; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount = 12835; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CallCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_CallCount = 12836; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount = 12837; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount = 12838; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount = 12839; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount = 12840; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount = 12841; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount = 12842; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount = 12843; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount = 12844; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount = 12845; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount = 12846; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount = 12847; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount = 12848; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount = 12849; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount = 12850; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount = 12851; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount = 12852; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount = 12853; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount = 12854; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 12855; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount = 12856; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount = 12857; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount = 12858; + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount Variable. + /// + public const uint SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount = 12859; + + /// + /// 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 SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics = 12860; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId = 12861; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession = 12862; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory = 12863; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism = 12864; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding = 12865; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol = 12866; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode = 12867; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri = 12868; + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate Variable. + /// + public const uint SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate = 12869; + + /// + /// 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 SelectionListType_Selections Variable. + /// + public const uint SelectionListType_Selections = 17632; + + /// + /// The identifier for the SelectionListType_SelectionDescriptions Variable. + /// + public const uint SelectionListType_SelectionDescriptions = 17633; + + /// + /// The identifier for the SelectionListType_RestrictToList Variable. + /// + public const uint SelectionListType_RestrictToList = 16312; + + /// + /// The identifier for the AudioVariableType_ListId Variable. + /// + public const uint AudioVariableType_ListId = 17988; + + /// + /// The identifier for the AudioVariableType_AgencyId Variable. + /// + public const uint AudioVariableType_AgencyId = 17989; + + /// + /// The identifier for the AudioVariableType_VersionId Variable. + /// + public const uint AudioVariableType_VersionId = 17990; + + /// + /// 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_EstimatedReturnTime Variable. + /// + public const uint Server_EstimatedReturnTime = 12885; + + /// + /// The identifier for the Server_LocalTime Variable. + /// + public const uint Server_LocalTime = 17634; + + /// + /// 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_MaxByteStringLength Variable. + /// + public const uint Server_ServerCapabilities_MaxByteStringLength = 12911; + + /// + /// 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_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. + /// + public const uint Server_ServerCapabilities_RoleSet_AddRole_InputArguments = 16302; + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. + /// + public const uint Server_ServerCapabilities_RoleSet_AddRole_OutputArguments = 16303; + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. + /// + public const uint Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments = 16305; + + /// + /// 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_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_ResendData_InputArguments Variable. + /// + public const uint Server_ResendData_InputArguments = 12874; + + /// + /// The identifier for the Server_SetSubscriptionDurable_InputArguments Variable. + /// + public const uint Server_SetSubscriptionDurable_InputArguments = 12750; + + /// + /// The identifier for the Server_SetSubscriptionDurable_OutputArguments Variable. + /// + public const uint Server_SetSubscriptionDurable_OutputArguments = 12751; + + /// + /// The identifier for the Server_RequestServerStateChange_InputArguments Variable. + /// + public const uint Server_RequestServerStateChange_InputArguments = 12887; + + /// + /// 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 Server_ServerRedundancy_ServerNetworkGroups Variable. + /// + public const uint Server_ServerRedundancy_ServerNetworkGroups = 14415; + + /// + /// 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 HistoryServerCapabilities_ServerTimestampSupported Variable. + /// + public const uint HistoryServerCapabilities_ServerTimestampSupported = 19091; + + /// + /// 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_CurrentState_Id Variable. + /// + public const uint FiniteStateMachineType_CurrentState_Id = 3728; + + /// + /// The identifier for the FiniteStateMachineType_LastTransition Variable. + /// + public const uint FiniteStateMachineType_LastTransition = 2773; + + /// + /// The identifier for the FiniteStateMachineType_LastTransition_Id Variable. + /// + public const uint FiniteStateMachineType_LastTransition_Id = 3732; + + /// + /// The identifier for the FiniteStateMachineType_AvailableStates Variable. + /// + public const uint FiniteStateMachineType_AvailableStates = 17635; + + /// + /// The identifier for the FiniteStateMachineType_AvailableTransitions Variable. + /// + public const uint FiniteStateMachineType_AvailableTransitions = 17636; + + /// + /// 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 ExpressionGuardVariableType_Expression Variable. + /// + public const uint ExpressionGuardVariableType_Expression = 15129; + + /// + /// The identifier for the RationalNumberType_Numerator Variable. + /// + public const uint RationalNumberType_Numerator = 17712; + + /// + /// The identifier for the RationalNumberType_Denominator Variable. + /// + public const uint RationalNumberType_Denominator = 17713; + + /// + /// The identifier for the VectorType_VectorUnit Variable. + /// + public const uint VectorType_VectorUnit = 17715; + + /// + /// The identifier for the ThreeDVectorType_X Variable. + /// + public const uint ThreeDVectorType_X = 18769; + + /// + /// The identifier for the ThreeDVectorType_Y Variable. + /// + public const uint ThreeDVectorType_Y = 18770; + + /// + /// The identifier for the ThreeDVectorType_Z Variable. + /// + public const uint ThreeDVectorType_Z = 18771; + + /// + /// The identifier for the CartesianCoordinatesType_LengthUnit Variable. + /// + public const uint CartesianCoordinatesType_LengthUnit = 18773; + + /// + /// The identifier for the ThreeDCartesianCoordinatesType_X Variable. + /// + public const uint ThreeDCartesianCoordinatesType_X = 18776; + + /// + /// The identifier for the ThreeDCartesianCoordinatesType_Y Variable. + /// + public const uint ThreeDCartesianCoordinatesType_Y = 18777; + + /// + /// The identifier for the ThreeDCartesianCoordinatesType_Z Variable. + /// + public const uint ThreeDCartesianCoordinatesType_Z = 18778; + + /// + /// The identifier for the OrientationType_AngleUnit Variable. + /// + public const uint OrientationType_AngleUnit = 18780; + + /// + /// The identifier for the ThreeDOrientationType_A Variable. + /// + public const uint ThreeDOrientationType_A = 18783; + + /// + /// The identifier for the ThreeDOrientationType_B Variable. + /// + public const uint ThreeDOrientationType_B = 18784; + + /// + /// The identifier for the ThreeDOrientationType_C Variable. + /// + public const uint ThreeDOrientationType_C = 18785; + + /// + /// The identifier for the FrameType_CartesianCoordinates Variable. + /// + public const uint FrameType_CartesianCoordinates = 18801; + + /// + /// The identifier for the FrameType_Orientation Variable. + /// + public const uint FrameType_Orientation = 18787; + + /// + /// The identifier for the FrameType_Constant Variable. + /// + public const uint FrameType_Constant = 18788; + + /// + /// The identifier for the FrameType_BaseFrame Variable. + /// + public const uint FrameType_BaseFrame = 18789; + + /// + /// The identifier for the FrameType_FixedBase Variable. + /// + public const uint FrameType_FixedBase = 18790; + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates Variable. + /// + public const uint ThreeDFrameType_CartesianCoordinates = 18796; + + /// + /// The identifier for the ThreeDFrameType_Orientation Variable. + /// + public const uint ThreeDFrameType_Orientation = 18792; + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates_X Variable. + /// + public const uint ThreeDFrameType_CartesianCoordinates_X = 18798; + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates_Y Variable. + /// + public const uint ThreeDFrameType_CartesianCoordinates_Y = 18799; + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates_Z Variable. + /// + public const uint ThreeDFrameType_CartesianCoordinates_Z = 18800; + + /// + /// The identifier for the ThreeDFrameType_Orientation_A Variable. + /// + public const uint ThreeDFrameType_Orientation_A = 19074; + + /// + /// The identifier for the ThreeDFrameType_Orientation_B Variable. + /// + public const uint ThreeDFrameType_Orientation_B = 19075; + + /// + /// The identifier for the ThreeDFrameType_Orientation_C Variable. + /// + public const uint ThreeDFrameType_Orientation_C = 19076; + + /// + /// 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 FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments = 13356; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments = 13357; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments = 13359; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments = 13360; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments = 17719; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments = 13364; + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments Variable. + /// + public const uint FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments = 13365; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Size Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Size = 13367; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Writable Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Writable = 13368; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_UserWritable Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_UserWritable = 13369; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_OpenCount Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_OpenCount = 13370; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Open_InputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Open_InputArguments = 13373; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Open_OutputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Open_OutputArguments = 13374; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Close_InputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Close_InputArguments = 13376; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Read_InputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Read_InputArguments = 13378; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Read_OutputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Read_OutputArguments = 13379; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Write_InputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_Write_InputArguments = 13381; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments = 13383; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments = 13384; + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments Variable. + /// + public const uint FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments = 13386; + + /// + /// The identifier for the FileDirectoryType_CreateDirectory_InputArguments Variable. + /// + public const uint FileDirectoryType_CreateDirectory_InputArguments = 13388; + + /// + /// The identifier for the FileDirectoryType_CreateDirectory_OutputArguments Variable. + /// + public const uint FileDirectoryType_CreateDirectory_OutputArguments = 13389; + + /// + /// The identifier for the FileDirectoryType_CreateFile_InputArguments Variable. + /// + public const uint FileDirectoryType_CreateFile_InputArguments = 13391; + + /// + /// The identifier for the FileDirectoryType_CreateFile_OutputArguments Variable. + /// + public const uint FileDirectoryType_CreateFile_OutputArguments = 13392; + + /// + /// The identifier for the FileDirectoryType_DeleteFileSystemObject_InputArguments Variable. + /// + public const uint FileDirectoryType_DeleteFileSystemObject_InputArguments = 13394; + + /// + /// The identifier for the FileDirectoryType_MoveOrCopy_InputArguments Variable. + /// + public const uint FileDirectoryType_MoveOrCopy_InputArguments = 13396; + + /// + /// The identifier for the FileDirectoryType_MoveOrCopy_OutputArguments Variable. + /// + public const uint FileDirectoryType_MoveOrCopy_OutputArguments = 13397; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments = 16317; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments = 16318; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments = 16320; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments = 16321; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments = 17723; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments = 16325; + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments Variable. + /// + public const uint FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments = 16326; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Size Variable. + /// + public const uint FileSystem_FileName_Placeholder_Size = 16328; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Writable Variable. + /// + public const uint FileSystem_FileName_Placeholder_Writable = 16329; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_UserWritable Variable. + /// + public const uint FileSystem_FileName_Placeholder_UserWritable = 16330; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_OpenCount Variable. + /// + public const uint FileSystem_FileName_Placeholder_OpenCount = 16331; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Open_InputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_Open_InputArguments = 16334; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Open_OutputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_Open_OutputArguments = 16335; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Close_InputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_Close_InputArguments = 16337; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Read_InputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_Read_InputArguments = 16339; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Read_OutputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_Read_OutputArguments = 16340; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Write_InputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_Write_InputArguments = 16342; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_GetPosition_InputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_GetPosition_InputArguments = 16344; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_GetPosition_OutputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_GetPosition_OutputArguments = 16345; + + /// + /// The identifier for the FileSystem_FileName_Placeholder_SetPosition_InputArguments Variable. + /// + public const uint FileSystem_FileName_Placeholder_SetPosition_InputArguments = 16347; + + /// + /// The identifier for the FileSystem_CreateDirectory_InputArguments Variable. + /// + public const uint FileSystem_CreateDirectory_InputArguments = 16349; + + /// + /// The identifier for the FileSystem_CreateDirectory_OutputArguments Variable. + /// + public const uint FileSystem_CreateDirectory_OutputArguments = 16350; + + /// + /// The identifier for the FileSystem_CreateFile_InputArguments Variable. + /// + public const uint FileSystem_CreateFile_InputArguments = 16352; + + /// + /// The identifier for the FileSystem_CreateFile_OutputArguments Variable. + /// + public const uint FileSystem_CreateFile_OutputArguments = 16353; + + /// + /// The identifier for the FileSystem_DeleteFileSystemObject_InputArguments Variable. + /// + public const uint FileSystem_DeleteFileSystemObject_InputArguments = 16355; + + /// + /// The identifier for the FileSystem_MoveOrCopy_InputArguments Variable. + /// + public const uint FileSystem_MoveOrCopy_InputArguments = 16357; + + /// + /// The identifier for the FileSystem_MoveOrCopy_OutputArguments Variable. + /// + public const uint FileSystem_MoveOrCopy_OutputArguments = 16358; + + /// + /// The identifier for the TemporaryFileTransferType_ClientProcessingTimeout Variable. + /// + public const uint TemporaryFileTransferType_ClientProcessingTimeout = 15745; + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForRead_InputArguments Variable. + /// + public const uint TemporaryFileTransferType_GenerateFileForRead_InputArguments = 15747; + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForRead_OutputArguments Variable. + /// + public const uint TemporaryFileTransferType_GenerateFileForRead_OutputArguments = 15748; + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForWrite_InputArguments Variable. + /// + public const uint TemporaryFileTransferType_GenerateFileForWrite_InputArguments = 16359; + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForWrite_OutputArguments Variable. + /// + public const uint TemporaryFileTransferType_GenerateFileForWrite_OutputArguments = 15750; + + /// + /// The identifier for the TemporaryFileTransferType_CloseAndCommit_InputArguments Variable. + /// + public const uint TemporaryFileTransferType_CloseAndCommit_InputArguments = 15752; + + /// + /// The identifier for the TemporaryFileTransferType_CloseAndCommit_OutputArguments Variable. + /// + public const uint TemporaryFileTransferType_CloseAndCommit_OutputArguments = 15753; + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_CurrentState Variable. + /// + public const uint TemporaryFileTransferType_TransferState_Placeholder_CurrentState = 15755; + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id Variable. + /// + public const uint TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id = 15756; + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id Variable. + /// + public const uint TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id = 15761; + + /// + /// The identifier for the FileTransferStateMachineType_CurrentState_Id Variable. + /// + public const uint FileTransferStateMachineType_CurrentState_Id = 15805; + + /// + /// The identifier for the FileTransferStateMachineType_LastTransition_Id Variable. + /// + public const uint FileTransferStateMachineType_LastTransition_Id = 15810; + + /// + /// The identifier for the FileTransferStateMachineType_Idle_StateNumber Variable. + /// + public const uint FileTransferStateMachineType_Idle_StateNumber = 15816; + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepare_StateNumber Variable. + /// + public const uint FileTransferStateMachineType_ReadPrepare_StateNumber = 15818; + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransfer_StateNumber Variable. + /// + public const uint FileTransferStateMachineType_ReadTransfer_StateNumber = 15820; + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWrite_StateNumber Variable. + /// + public const uint FileTransferStateMachineType_ApplyWrite_StateNumber = 15822; + + /// + /// The identifier for the FileTransferStateMachineType_Error_StateNumber Variable. + /// + public const uint FileTransferStateMachineType_Error_StateNumber = 15824; + + /// + /// The identifier for the FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber = 15826; + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber = 15828; + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber = 15830; + + /// + /// The identifier for the FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber = 15832; + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber = 15834; + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToError_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ReadPrepareToError_TransitionNumber = 15836; + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToError_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ReadTransferToError_TransitionNumber = 15838; + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToError_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ApplyWriteToError_TransitionNumber = 15840; + + /// + /// The identifier for the FileTransferStateMachineType_ErrorToIdle_TransitionNumber Variable. + /// + public const uint FileTransferStateMachineType_ErrorToIdle_TransitionNumber = 15842; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_Identities Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_Identities = 16162; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments = 15613; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments = 15615; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_AddApplication_InputArguments Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_AddApplication_InputArguments = 16166; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments = 16168; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments = 16170; + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments Variable. + /// + public const uint RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments = 16172; + + /// + /// The identifier for the RoleSetType_AddRole_InputArguments Variable. + /// + public const uint RoleSetType_AddRole_InputArguments = 15998; + + /// + /// The identifier for the RoleSetType_AddRole_OutputArguments Variable. + /// + public const uint RoleSetType_AddRole_OutputArguments = 15999; + + /// + /// The identifier for the RoleSetType_RemoveRole_InputArguments Variable. + /// + public const uint RoleSetType_RemoveRole_InputArguments = 16001; + + /// + /// The identifier for the RoleType_Identities Variable. + /// + public const uint RoleType_Identities = 16173; + + /// + /// The identifier for the RoleType_Applications Variable. + /// + public const uint RoleType_Applications = 16174; + + /// + /// The identifier for the RoleType_ApplicationsExclude Variable. + /// + public const uint RoleType_ApplicationsExclude = 15410; + + /// + /// The identifier for the RoleType_Endpoints Variable. + /// + public const uint RoleType_Endpoints = 16175; + + /// + /// The identifier for the RoleType_EndpointsExclude Variable. + /// + public const uint RoleType_EndpointsExclude = 15411; + + /// + /// The identifier for the RoleType_AddIdentity_InputArguments Variable. + /// + public const uint RoleType_AddIdentity_InputArguments = 15625; + + /// + /// The identifier for the RoleType_RemoveIdentity_InputArguments Variable. + /// + public const uint RoleType_RemoveIdentity_InputArguments = 15627; + + /// + /// The identifier for the RoleType_AddApplication_InputArguments Variable. + /// + public const uint RoleType_AddApplication_InputArguments = 16177; + + /// + /// The identifier for the RoleType_RemoveApplication_InputArguments Variable. + /// + public const uint RoleType_RemoveApplication_InputArguments = 16179; + + /// + /// The identifier for the RoleType_AddEndpoint_InputArguments Variable. + /// + public const uint RoleType_AddEndpoint_InputArguments = 16181; + + /// + /// The identifier for the RoleType_RemoveEndpoint_InputArguments Variable. + /// + public const uint RoleType_RemoveEndpoint_InputArguments = 16183; + + /// + /// The identifier for the IdentityCriteriaType_EnumValues Variable. + /// + public const uint IdentityCriteriaType_EnumValues = 15633; + + /// + /// The identifier for the WellKnownRole_Anonymous_Identities Variable. + /// + public const uint WellKnownRole_Anonymous_Identities = 16192; + + /// + /// The identifier for the WellKnownRole_Anonymous_Applications Variable. + /// + public const uint WellKnownRole_Anonymous_Applications = 16193; + + /// + /// The identifier for the WellKnownRole_Anonymous_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_Anonymous_ApplicationsExclude = 15412; + + /// + /// The identifier for the WellKnownRole_Anonymous_Endpoints Variable. + /// + public const uint WellKnownRole_Anonymous_Endpoints = 16194; + + /// + /// The identifier for the WellKnownRole_Anonymous_EndpointsExclude Variable. + /// + public const uint WellKnownRole_Anonymous_EndpointsExclude = 15413; + + /// + /// The identifier for the WellKnownRole_Anonymous_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Anonymous_AddIdentity_InputArguments = 15649; + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Anonymous_RemoveIdentity_InputArguments = 15651; + + /// + /// The identifier for the WellKnownRole_Anonymous_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Anonymous_AddApplication_InputArguments = 16196; + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Anonymous_RemoveApplication_InputArguments = 16198; + + /// + /// The identifier for the WellKnownRole_Anonymous_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Anonymous_AddEndpoint_InputArguments = 16200; + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Anonymous_RemoveEndpoint_InputArguments = 16202; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_Identities Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_Identities = 16203; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_Applications Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_Applications = 16204; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_ApplicationsExclude = 15414; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_Endpoints Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_Endpoints = 16205; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_EndpointsExclude Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_EndpointsExclude = 15415; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments = 15661; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments = 15663; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_AddApplication_InputArguments = 16207; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments = 16209; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments = 16211; + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments = 16213; + + /// + /// The identifier for the WellKnownRole_Observer_Identities Variable. + /// + public const uint WellKnownRole_Observer_Identities = 16214; + + /// + /// The identifier for the WellKnownRole_Observer_Applications Variable. + /// + public const uint WellKnownRole_Observer_Applications = 16215; + + /// + /// The identifier for the WellKnownRole_Observer_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_Observer_ApplicationsExclude = 15416; + + /// + /// The identifier for the WellKnownRole_Observer_Endpoints Variable. + /// + public const uint WellKnownRole_Observer_Endpoints = 16216; + + /// + /// The identifier for the WellKnownRole_Observer_EndpointsExclude Variable. + /// + public const uint WellKnownRole_Observer_EndpointsExclude = 15417; + + /// + /// The identifier for the WellKnownRole_Observer_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Observer_AddIdentity_InputArguments = 15673; + + /// + /// The identifier for the WellKnownRole_Observer_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Observer_RemoveIdentity_InputArguments = 15675; + + /// + /// The identifier for the WellKnownRole_Observer_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Observer_AddApplication_InputArguments = 16218; + + /// + /// The identifier for the WellKnownRole_Observer_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Observer_RemoveApplication_InputArguments = 16220; + + /// + /// The identifier for the WellKnownRole_Observer_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Observer_AddEndpoint_InputArguments = 16222; + + /// + /// The identifier for the WellKnownRole_Observer_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Observer_RemoveEndpoint_InputArguments = 16224; + + /// + /// The identifier for the WellKnownRole_Operator_Identities Variable. + /// + public const uint WellKnownRole_Operator_Identities = 16225; + + /// + /// The identifier for the WellKnownRole_Operator_Applications Variable. + /// + public const uint WellKnownRole_Operator_Applications = 16226; + + /// + /// The identifier for the WellKnownRole_Operator_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_Operator_ApplicationsExclude = 15418; + + /// + /// The identifier for the WellKnownRole_Operator_Endpoints Variable. + /// + public const uint WellKnownRole_Operator_Endpoints = 16227; + + /// + /// The identifier for the WellKnownRole_Operator_EndpointsExclude Variable. + /// + public const uint WellKnownRole_Operator_EndpointsExclude = 15423; + + /// + /// The identifier for the WellKnownRole_Operator_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Operator_AddIdentity_InputArguments = 15685; + + /// + /// The identifier for the WellKnownRole_Operator_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Operator_RemoveIdentity_InputArguments = 15687; + + /// + /// The identifier for the WellKnownRole_Operator_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Operator_AddApplication_InputArguments = 16229; + + /// + /// The identifier for the WellKnownRole_Operator_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Operator_RemoveApplication_InputArguments = 16231; + + /// + /// The identifier for the WellKnownRole_Operator_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Operator_AddEndpoint_InputArguments = 16233; + + /// + /// The identifier for the WellKnownRole_Operator_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Operator_RemoveEndpoint_InputArguments = 16235; + + /// + /// The identifier for the WellKnownRole_Engineer_Identities Variable. + /// + public const uint WellKnownRole_Engineer_Identities = 16236; + + /// + /// The identifier for the WellKnownRole_Engineer_Applications Variable. + /// + public const uint WellKnownRole_Engineer_Applications = 16237; + + /// + /// The identifier for the WellKnownRole_Engineer_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_Engineer_ApplicationsExclude = 15424; + + /// + /// The identifier for the WellKnownRole_Engineer_Endpoints Variable. + /// + public const uint WellKnownRole_Engineer_Endpoints = 16238; + + /// + /// The identifier for the WellKnownRole_Engineer_EndpointsExclude Variable. + /// + public const uint WellKnownRole_Engineer_EndpointsExclude = 15425; + + /// + /// The identifier for the WellKnownRole_Engineer_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Engineer_AddIdentity_InputArguments = 16042; + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Engineer_RemoveIdentity_InputArguments = 16044; + + /// + /// The identifier for the WellKnownRole_Engineer_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Engineer_AddApplication_InputArguments = 16240; + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Engineer_RemoveApplication_InputArguments = 16242; + + /// + /// The identifier for the WellKnownRole_Engineer_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Engineer_AddEndpoint_InputArguments = 16244; + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Engineer_RemoveEndpoint_InputArguments = 16246; + + /// + /// The identifier for the WellKnownRole_Supervisor_Identities Variable. + /// + public const uint WellKnownRole_Supervisor_Identities = 16247; + + /// + /// The identifier for the WellKnownRole_Supervisor_Applications Variable. + /// + public const uint WellKnownRole_Supervisor_Applications = 16248; + + /// + /// The identifier for the WellKnownRole_Supervisor_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_Supervisor_ApplicationsExclude = 15426; + + /// + /// The identifier for the WellKnownRole_Supervisor_Endpoints Variable. + /// + public const uint WellKnownRole_Supervisor_Endpoints = 16249; + + /// + /// The identifier for the WellKnownRole_Supervisor_EndpointsExclude Variable. + /// + public const uint WellKnownRole_Supervisor_EndpointsExclude = 15427; + + /// + /// The identifier for the WellKnownRole_Supervisor_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Supervisor_AddIdentity_InputArguments = 15697; + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_Supervisor_RemoveIdentity_InputArguments = 15699; + + /// + /// The identifier for the WellKnownRole_Supervisor_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Supervisor_AddApplication_InputArguments = 16251; + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_Supervisor_RemoveApplication_InputArguments = 16253; + + /// + /// The identifier for the WellKnownRole_Supervisor_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Supervisor_AddEndpoint_InputArguments = 16255; + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_Supervisor_RemoveEndpoint_InputArguments = 16257; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_Identities Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_Identities = 16269; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_Applications Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_Applications = 16270; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_ApplicationsExclude = 15428; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_Endpoints Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_Endpoints = 16271; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_EndpointsExclude Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_EndpointsExclude = 15429; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments = 15721; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments = 15723; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_AddApplication_InputArguments = 16273; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments = 16275; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments = 16277; + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments = 16279; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_Identities Variable. + /// + public const uint WellKnownRole_SecurityAdmin_Identities = 16258; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_Applications Variable. + /// + public const uint WellKnownRole_SecurityAdmin_Applications = 16259; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_ApplicationsExclude Variable. + /// + public const uint WellKnownRole_SecurityAdmin_ApplicationsExclude = 15430; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_Endpoints Variable. + /// + public const uint WellKnownRole_SecurityAdmin_Endpoints = 16260; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_EndpointsExclude Variable. + /// + public const uint WellKnownRole_SecurityAdmin_EndpointsExclude = 15527; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_SecurityAdmin_AddIdentity_InputArguments = 15709; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments Variable. + /// + public const uint WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments = 15711; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddApplication_InputArguments Variable. + /// + public const uint WellKnownRole_SecurityAdmin_AddApplication_InputArguments = 16262; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments Variable. + /// + public const uint WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments = 16264; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments = 16266; + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments Variable. + /// + public const uint WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments = 16268; + + /// + /// The identifier for the CurrencyUnit Variable. + /// + public const uint CurrencyUnit = 23501; + + /// + /// The identifier for the IOrderedObjectType_NumberInList Variable. + /// + public const uint IOrderedObjectType_NumberInList = 23517; + + /// + /// The identifier for the OrderedListType_OrderedObject_Placeholder_NumberInList Variable. + /// + public const uint OrderedListType_OrderedObject_Placeholder_NumberInList = 23521; + + /// + /// The identifier for the OrderedListType_NodeVersion Variable. + /// + public const uint OrderedListType_NodeVersion = 23525; + + /// + /// 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 BaseAnalogType_InstrumentRange Variable. + /// + public const uint BaseAnalogType_InstrumentRange = 17567; + + /// + /// The identifier for the BaseAnalogType_EURange Variable. + /// + public const uint BaseAnalogType_EURange = 17568; + + /// + /// The identifier for the BaseAnalogType_EngineeringUnits Variable. + /// + public const uint BaseAnalogType_EngineeringUnits = 17569; + + /// + /// The identifier for the AnalogItemType_EURange Variable. + /// + public const uint AnalogItemType_EURange = 2369; + + /// + /// The identifier for the AnalogUnitType_EngineeringUnits Variable. + /// + public const uint AnalogUnitType_EngineeringUnits = 17502; + + /// + /// The identifier for the AnalogUnitRangeType_EngineeringUnits Variable. + /// + public const uint AnalogUnitRangeType_EngineeringUnits = 17575; + + /// + /// 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_ConditionSubClassId Variable. + /// + public const uint ConditionType_ConditionSubClassId = 16363; + + /// + /// The identifier for the ConditionType_ConditionSubClassName Variable. + /// + public const uint ConditionType_ConditionSubClassName = 16364; + + /// + /// 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 ConditionType_ConditionRefresh2_InputArguments Variable. + /// + public const uint ConditionType_ConditionRefresh2_InputArguments = 12913; + + /// + /// The identifier for the DialogConditionType_EnabledState Variable. + /// + public const uint DialogConditionType_EnabledState = 9035; + + /// + /// The identifier for the DialogConditionType_EnabledState_Id Variable. + /// + public const uint DialogConditionType_EnabledState_Id = 9036; + + /// + /// The identifier for the DialogConditionType_Quality_SourceTimestamp Variable. + /// + public const uint DialogConditionType_Quality_SourceTimestamp = 9045; + + /// + /// The identifier for the DialogConditionType_LastSeverity_SourceTimestamp Variable. + /// + public const uint DialogConditionType_LastSeverity_SourceTimestamp = 9047; + + /// + /// The identifier for the DialogConditionType_Comment_SourceTimestamp Variable. + /// + public const uint DialogConditionType_Comment_SourceTimestamp = 9049; + + /// + /// The identifier for the DialogConditionType_AddComment_InputArguments Variable. + /// + public const uint DialogConditionType_AddComment_InputArguments = 9054; + + /// + /// The identifier for the DialogConditionType_ConditionRefresh_InputArguments Variable. + /// + public const uint DialogConditionType_ConditionRefresh_InputArguments = 4199; + + /// + /// The identifier for the DialogConditionType_ConditionRefresh2_InputArguments Variable. + /// + public const uint DialogConditionType_ConditionRefresh2_InputArguments = 12917; + + /// + /// 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 AcknowledgeableConditionType_EnabledState Variable. + /// + public const uint AcknowledgeableConditionType_EnabledState = 9073; + + /// + /// The identifier for the AcknowledgeableConditionType_EnabledState_Id Variable. + /// + public const uint AcknowledgeableConditionType_EnabledState_Id = 9074; + + /// + /// The identifier for the AcknowledgeableConditionType_Quality_SourceTimestamp Variable. + /// + public const uint AcknowledgeableConditionType_Quality_SourceTimestamp = 9083; + + /// + /// The identifier for the AcknowledgeableConditionType_LastSeverity_SourceTimestamp Variable. + /// + public const uint AcknowledgeableConditionType_LastSeverity_SourceTimestamp = 9085; + + /// + /// The identifier for the AcknowledgeableConditionType_Comment_SourceTimestamp Variable. + /// + public const uint AcknowledgeableConditionType_Comment_SourceTimestamp = 9087; + + /// + /// The identifier for the AcknowledgeableConditionType_AddComment_InputArguments Variable. + /// + public const uint AcknowledgeableConditionType_AddComment_InputArguments = 9092; + + /// + /// The identifier for the AcknowledgeableConditionType_ConditionRefresh_InputArguments Variable. + /// + public const uint AcknowledgeableConditionType_ConditionRefresh_InputArguments = 5124; + + /// + /// The identifier for the AcknowledgeableConditionType_ConditionRefresh2_InputArguments Variable. + /// + public const uint AcknowledgeableConditionType_ConditionRefresh2_InputArguments = 12919; + + /// + /// 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_EnabledState_Id Variable. + /// + public const uint AlarmConditionType_EnabledState_Id = 9119; + + /// + /// The identifier for the AlarmConditionType_Quality_SourceTimestamp Variable. + /// + public const uint AlarmConditionType_Quality_SourceTimestamp = 9128; + + /// + /// The identifier for the AlarmConditionType_LastSeverity_SourceTimestamp Variable. + /// + public const uint AlarmConditionType_LastSeverity_SourceTimestamp = 9130; + + /// + /// The identifier for the AlarmConditionType_Comment_SourceTimestamp Variable. + /// + public const uint AlarmConditionType_Comment_SourceTimestamp = 9132; + + /// + /// The identifier for the AlarmConditionType_AddComment_InputArguments Variable. + /// + public const uint AlarmConditionType_AddComment_InputArguments = 9137; + + /// + /// The identifier for the AlarmConditionType_ConditionRefresh_InputArguments Variable. + /// + public const uint AlarmConditionType_ConditionRefresh_InputArguments = 5551; + + /// + /// The identifier for the AlarmConditionType_ConditionRefresh2_InputArguments Variable. + /// + public const uint AlarmConditionType_ConditionRefresh2_InputArguments = 12985; + + /// + /// The identifier for the AlarmConditionType_AckedState_Id Variable. + /// + public const uint AlarmConditionType_AckedState_Id = 9139; + + /// + /// The identifier for the AlarmConditionType_ConfirmedState_Id Variable. + /// + public const uint AlarmConditionType_ConfirmedState_Id = 9148; + + /// + /// The identifier for the AlarmConditionType_Acknowledge_InputArguments Variable. + /// + public const uint AlarmConditionType_Acknowledge_InputArguments = 9157; + + /// + /// The identifier for the AlarmConditionType_Confirm_InputArguments Variable. + /// + public const uint AlarmConditionType_Confirm_InputArguments = 9159; + + /// + /// 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_Id Variable. + /// + public const uint AlarmConditionType_SuppressedState_Id = 9170; + + /// + /// 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_OutOfServiceState Variable. + /// + public const uint AlarmConditionType_OutOfServiceState = 16371; + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_Id Variable. + /// + public const uint AlarmConditionType_OutOfServiceState_Id = 16372; + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_TransitionTime Variable. + /// + public const uint AlarmConditionType_OutOfServiceState_TransitionTime = 16376; + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_TrueState Variable. + /// + public const uint AlarmConditionType_OutOfServiceState_TrueState = 16378; + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_FalseState Variable. + /// + public const uint AlarmConditionType_OutOfServiceState_FalseState = 16379; + + /// + /// The identifier for the AlarmConditionType_ShelvingState_CurrentState Variable. + /// + public const uint AlarmConditionType_ShelvingState_CurrentState = 9179; + + /// + /// The identifier for the AlarmConditionType_ShelvingState_CurrentState_Id Variable. + /// + public const uint AlarmConditionType_ShelvingState_CurrentState_Id = 9180; + + /// + /// The identifier for the AlarmConditionType_ShelvingState_LastTransition Variable. + /// + public const uint AlarmConditionType_ShelvingState_LastTransition = 9184; + + /// + /// The identifier for the AlarmConditionType_ShelvingState_LastTransition_Id Variable. + /// + public const uint AlarmConditionType_ShelvingState_LastTransition_Id = 9185; + + /// + /// 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 AlarmConditionType_AudibleEnabled Variable. + /// + public const uint AlarmConditionType_AudibleEnabled = 16389; + + /// + /// The identifier for the AlarmConditionType_AudibleSound Variable. + /// + public const uint AlarmConditionType_AudibleSound = 16390; + + /// + /// The identifier for the AlarmConditionType_SilenceState Variable. + /// + public const uint AlarmConditionType_SilenceState = 16380; + + /// + /// The identifier for the AlarmConditionType_SilenceState_Id Variable. + /// + public const uint AlarmConditionType_SilenceState_Id = 16381; + + /// + /// The identifier for the AlarmConditionType_SilenceState_TransitionTime Variable. + /// + public const uint AlarmConditionType_SilenceState_TransitionTime = 16385; + + /// + /// The identifier for the AlarmConditionType_SilenceState_TrueState Variable. + /// + public const uint AlarmConditionType_SilenceState_TrueState = 16387; + + /// + /// The identifier for the AlarmConditionType_SilenceState_FalseState Variable. + /// + public const uint AlarmConditionType_SilenceState_FalseState = 16388; + + /// + /// The identifier for the AlarmConditionType_OnDelay Variable. + /// + public const uint AlarmConditionType_OnDelay = 16395; + + /// + /// The identifier for the AlarmConditionType_OffDelay Variable. + /// + public const uint AlarmConditionType_OffDelay = 16396; + + /// + /// The identifier for the AlarmConditionType_FirstInGroupFlag Variable. + /// + public const uint AlarmConditionType_FirstInGroupFlag = 16397; + + /// + /// The identifier for the AlarmConditionType_LatchedState Variable. + /// + public const uint AlarmConditionType_LatchedState = 18190; + + /// + /// The identifier for the AlarmConditionType_LatchedState_Id Variable. + /// + public const uint AlarmConditionType_LatchedState_Id = 18191; + + /// + /// The identifier for the AlarmConditionType_LatchedState_TransitionTime Variable. + /// + public const uint AlarmConditionType_LatchedState_TransitionTime = 18195; + + /// + /// The identifier for the AlarmConditionType_LatchedState_TrueState Variable. + /// + public const uint AlarmConditionType_LatchedState_TrueState = 18197; + + /// + /// The identifier for the AlarmConditionType_LatchedState_FalseState Variable. + /// + public const uint AlarmConditionType_LatchedState_FalseState = 18198; + + /// + /// The identifier for the AlarmConditionType_ReAlarmTime Variable. + /// + public const uint AlarmConditionType_ReAlarmTime = 16400; + + /// + /// The identifier for the AlarmConditionType_ReAlarmRepeatCount Variable. + /// + public const uint AlarmConditionType_ReAlarmRepeatCount = 16401; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EventId Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_EventId = 16407; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EventType Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_EventType = 16408; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode = 16409; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName = 16410; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Time Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Time = 16411; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime = 16412; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Message Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Message = 16414; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Severity Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Severity = 16415; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId = 16416; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName = 16417; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName = 16420; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId = 16421; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Retain Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Retain = 16422; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState = 16423; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id = 16424; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Quality Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Quality = 16432; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp = 16433; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity = 16434; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp = 16435; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Comment Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Comment = 16436; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp = 16437; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId = 16438; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments = 16442; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState = 16443; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id = 16444; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id = 16453; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments = 16462; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments = 16464; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState = 16465; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id = 16466; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode = 16474; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id = 16476; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id = 16485; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState = 16503; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id = 16504; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id = 16509; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime = 16514; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments = 16518; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved = 16519; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id = 16494; + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id Variable. + /// + public const uint AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id = 18204; + + /// + /// The identifier for the ShelvedStateMachineType_CurrentState_Id Variable. + /// + public const uint ShelvedStateMachineType_CurrentState_Id = 6089; + + /// + /// The identifier for the ShelvedStateMachineType_LastTransition_Id Variable. + /// + public const uint ShelvedStateMachineType_LastTransition_Id = 6094; + + /// + /// 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 LimitAlarmType_EnabledState_Id Variable. + /// + public const uint LimitAlarmType_EnabledState_Id = 9220; + + /// + /// The identifier for the LimitAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint LimitAlarmType_Quality_SourceTimestamp = 9229; + + /// + /// The identifier for the LimitAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint LimitAlarmType_LastSeverity_SourceTimestamp = 9231; + + /// + /// The identifier for the LimitAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint LimitAlarmType_Comment_SourceTimestamp = 9233; + + /// + /// The identifier for the LimitAlarmType_AddComment_InputArguments Variable. + /// + public const uint LimitAlarmType_AddComment_InputArguments = 9238; + + /// + /// The identifier for the LimitAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint LimitAlarmType_ConditionRefresh_InputArguments = 6127; + + /// + /// The identifier for the LimitAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint LimitAlarmType_ConditionRefresh2_InputArguments = 12987; + + /// + /// The identifier for the LimitAlarmType_AckedState_Id Variable. + /// + public const uint LimitAlarmType_AckedState_Id = 9240; + + /// + /// The identifier for the LimitAlarmType_ConfirmedState_Id Variable. + /// + public const uint LimitAlarmType_ConfirmedState_Id = 9249; + + /// + /// The identifier for the LimitAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint LimitAlarmType_Acknowledge_InputArguments = 9258; + + /// + /// The identifier for the LimitAlarmType_Confirm_InputArguments Variable. + /// + public const uint LimitAlarmType_Confirm_InputArguments = 9260; + + /// + /// The identifier for the LimitAlarmType_ActiveState_Id Variable. + /// + public const uint LimitAlarmType_ActiveState_Id = 9262; + + /// + /// The identifier for the LimitAlarmType_SuppressedState_Id Variable. + /// + public const uint LimitAlarmType_SuppressedState_Id = 9271; + + /// + /// The identifier for the LimitAlarmType_OutOfServiceState_Id Variable. + /// + public const uint LimitAlarmType_OutOfServiceState_Id = 16539; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint LimitAlarmType_ShelvingState_CurrentState = 9280; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint LimitAlarmType_ShelvingState_CurrentState_Id = 9281; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint LimitAlarmType_ShelvingState_LastTransition_Id = 9286; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint LimitAlarmType_ShelvingState_UnshelveTime = 9290; + + /// + /// The identifier for the LimitAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint LimitAlarmType_ShelvingState_TimedShelve_InputArguments = 9315; + + /// + /// The identifier for the LimitAlarmType_SilenceState_Id Variable. + /// + public const uint LimitAlarmType_SilenceState_Id = 16548; + + /// + /// The identifier for the LimitAlarmType_LatchedState_Id Variable. + /// + public const uint LimitAlarmType_LatchedState_Id = 18214; + + /// + /// 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 LimitAlarmType_BaseHighHighLimit Variable. + /// + public const uint LimitAlarmType_BaseHighHighLimit = 16572; + + /// + /// The identifier for the LimitAlarmType_BaseHighLimit Variable. + /// + public const uint LimitAlarmType_BaseHighLimit = 16573; + + /// + /// The identifier for the LimitAlarmType_BaseLowLimit Variable. + /// + public const uint LimitAlarmType_BaseLowLimit = 16574; + + /// + /// The identifier for the LimitAlarmType_BaseLowLowLimit Variable. + /// + public const uint LimitAlarmType_BaseLowLowLimit = 16575; + + /// + /// The identifier for the ExclusiveLimitStateMachineType_CurrentState_Id Variable. + /// + public const uint ExclusiveLimitStateMachineType_CurrentState_Id = 9320; + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LastTransition_Id Variable. + /// + public const uint ExclusiveLimitStateMachineType_LastTransition_Id = 9325; + + /// + /// 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_EnabledState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_EnabledState_Id = 9355; + + /// + /// The identifier for the ExclusiveLimitAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint ExclusiveLimitAlarmType_Quality_SourceTimestamp = 9364; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp = 9366; + + /// + /// The identifier for the ExclusiveLimitAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint ExclusiveLimitAlarmType_Comment_SourceTimestamp = 9368; + + /// + /// The identifier for the ExclusiveLimitAlarmType_AddComment_InputArguments Variable. + /// + public const uint ExclusiveLimitAlarmType_AddComment_InputArguments = 9373; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint ExclusiveLimitAlarmType_ConditionRefresh_InputArguments = 9375; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments = 12989; + + /// + /// The identifier for the ExclusiveLimitAlarmType_AckedState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_AckedState_Id = 9377; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ConfirmedState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_ConfirmedState_Id = 9386; + + /// + /// The identifier for the ExclusiveLimitAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint ExclusiveLimitAlarmType_Acknowledge_InputArguments = 9395; + + /// + /// The identifier for the ExclusiveLimitAlarmType_Confirm_InputArguments Variable. + /// + public const uint ExclusiveLimitAlarmType_Confirm_InputArguments = 9397; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ActiveState Variable. + /// + public const uint ExclusiveLimitAlarmType_ActiveState = 9398; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ActiveState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_ActiveState_Id = 9399; + + /// + /// The identifier for the ExclusiveLimitAlarmType_SuppressedState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_SuppressedState_Id = 9408; + + /// + /// The identifier for the ExclusiveLimitAlarmType_OutOfServiceState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_OutOfServiceState_Id = 16579; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_CurrentState = 9417; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id = 9418; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id = 9423; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_UnshelveTime = 9427; + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments = 9452; + + /// + /// The identifier for the ExclusiveLimitAlarmType_SilenceState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_SilenceState_Id = 16588; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LatchedState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_LatchedState_Id = 18224; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_CurrentState Variable. + /// + public const uint ExclusiveLimitAlarmType_LimitState_CurrentState = 9456; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_CurrentState_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_LimitState_CurrentState_Id = 9457; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition Variable. + /// + public const uint ExclusiveLimitAlarmType_LimitState_LastTransition = 9461; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition_Id Variable. + /// + public const uint ExclusiveLimitAlarmType_LimitState_LastTransition_Id = 9462; + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime Variable. + /// + public const uint ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime = 9465; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_EnabledState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_EnabledState_Id = 9920; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint NonExclusiveLimitAlarmType_Quality_SourceTimestamp = 9929; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp = 9931; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint NonExclusiveLimitAlarmType_Comment_SourceTimestamp = 9933; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_AddComment_InputArguments Variable. + /// + public const uint NonExclusiveLimitAlarmType_AddComment_InputArguments = 9938; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments = 9940; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments = 12991; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_AckedState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_AckedState_Id = 9942; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ConfirmedState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_ConfirmedState_Id = 9951; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint NonExclusiveLimitAlarmType_Acknowledge_InputArguments = 9960; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Confirm_InputArguments Variable. + /// + public const uint NonExclusiveLimitAlarmType_Confirm_InputArguments = 9962; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ActiveState Variable. + /// + public const uint NonExclusiveLimitAlarmType_ActiveState = 9963; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ActiveState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_ActiveState_Id = 9964; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_SuppressedState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_SuppressedState_Id = 9973; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_OutOfServiceState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_OutOfServiceState_Id = 16619; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_CurrentState = 9982; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id = 9983; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id = 9988; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime = 9992; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments = 10017; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_SilenceState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_SilenceState_Id = 16628; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LatchedState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_LatchedState_Id = 18234; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState Variable. + /// + public const uint NonExclusiveLimitAlarmType_HighHighState = 10020; + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_HighHighState_Id = 10021; + + /// + /// 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_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_HighState_Id = 10030; + + /// + /// 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_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_LowState_Id = 10039; + + /// + /// 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_Id Variable. + /// + public const uint NonExclusiveLimitAlarmType_LowLowState_Id = 10048; + + /// + /// 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 NonExclusiveLevelAlarmType_EnabledState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_EnabledState_Id = 10074; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint NonExclusiveLevelAlarmType_Quality_SourceTimestamp = 10083; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp = 10085; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint NonExclusiveLevelAlarmType_Comment_SourceTimestamp = 10087; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_AddComment_InputArguments Variable. + /// + public const uint NonExclusiveLevelAlarmType_AddComment_InputArguments = 10092; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments = 10094; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments = 12993; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_AckedState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_AckedState_Id = 10096; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ConfirmedState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_ConfirmedState_Id = 10105; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint NonExclusiveLevelAlarmType_Acknowledge_InputArguments = 10114; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Confirm_InputArguments Variable. + /// + public const uint NonExclusiveLevelAlarmType_Confirm_InputArguments = 10116; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ActiveState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_ActiveState_Id = 10118; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_SuppressedState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_SuppressedState_Id = 10127; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_OutOfServiceState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_OutOfServiceState_Id = 16659; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_CurrentState = 10136; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id = 10137; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id = 10142; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime = 10146; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments = 10171; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_SilenceState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_SilenceState_Id = 16668; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LatchedState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_LatchedState_Id = 18247; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_HighHighState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_HighHighState_Id = 10175; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_HighState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_HighState_Id = 10184; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LowState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_LowState_Id = 10193; + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LowLowState_Id Variable. + /// + public const uint NonExclusiveLevelAlarmType_LowLowState_Id = 10202; + + /// + /// The identifier for the ExclusiveLevelAlarmType_EnabledState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_EnabledState_Id = 9496; + + /// + /// The identifier for the ExclusiveLevelAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint ExclusiveLevelAlarmType_Quality_SourceTimestamp = 9505; + + /// + /// The identifier for the ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp = 9507; + + /// + /// The identifier for the ExclusiveLevelAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint ExclusiveLevelAlarmType_Comment_SourceTimestamp = 9509; + + /// + /// The identifier for the ExclusiveLevelAlarmType_AddComment_InputArguments Variable. + /// + public const uint ExclusiveLevelAlarmType_AddComment_InputArguments = 9514; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint ExclusiveLevelAlarmType_ConditionRefresh_InputArguments = 9516; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments = 12995; + + /// + /// The identifier for the ExclusiveLevelAlarmType_AckedState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_AckedState_Id = 9518; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ConfirmedState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_ConfirmedState_Id = 9527; + + /// + /// The identifier for the ExclusiveLevelAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint ExclusiveLevelAlarmType_Acknowledge_InputArguments = 9536; + + /// + /// The identifier for the ExclusiveLevelAlarmType_Confirm_InputArguments Variable. + /// + public const uint ExclusiveLevelAlarmType_Confirm_InputArguments = 9538; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ActiveState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_ActiveState_Id = 9540; + + /// + /// The identifier for the ExclusiveLevelAlarmType_SuppressedState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_SuppressedState_Id = 9549; + + /// + /// The identifier for the ExclusiveLevelAlarmType_OutOfServiceState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_OutOfServiceState_Id = 16699; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_CurrentState = 9558; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id = 9559; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id = 9564; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_UnshelveTime = 9568; + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments = 9593; + + /// + /// The identifier for the ExclusiveLevelAlarmType_SilenceState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_SilenceState_Id = 16708; + + /// + /// The identifier for the ExclusiveLevelAlarmType_LatchedState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_LatchedState_Id = 18258; + + /// + /// The identifier for the ExclusiveLevelAlarmType_LimitState_CurrentState Variable. + /// + public const uint ExclusiveLevelAlarmType_LimitState_CurrentState = 9597; + + /// + /// The identifier for the ExclusiveLevelAlarmType_LimitState_CurrentState_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_LimitState_CurrentState_Id = 9598; + + /// + /// The identifier for the ExclusiveLevelAlarmType_LimitState_LastTransition_Id Variable. + /// + public const uint ExclusiveLevelAlarmType_LimitState_LastTransition_Id = 9603; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_EnabledState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_EnabledState_Id = 10382; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint NonExclusiveDeviationAlarmType_Quality_SourceTimestamp = 10391; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp = 10393; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint NonExclusiveDeviationAlarmType_Comment_SourceTimestamp = 10395; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_AddComment_InputArguments Variable. + /// + public const uint NonExclusiveDeviationAlarmType_AddComment_InputArguments = 10400; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments = 10402; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments = 12997; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_AckedState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_AckedState_Id = 10404; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ConfirmedState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ConfirmedState_Id = 10413; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint NonExclusiveDeviationAlarmType_Acknowledge_InputArguments = 10422; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Confirm_InputArguments Variable. + /// + public const uint NonExclusiveDeviationAlarmType_Confirm_InputArguments = 10424; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ActiveState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ActiveState_Id = 10426; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_SuppressedState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_SuppressedState_Id = 10435; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_OutOfServiceState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_OutOfServiceState_Id = 16739; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_CurrentState = 10444; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id = 10445; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id = 10450; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime = 10454; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments = 10479; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_SilenceState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_SilenceState_Id = 16748; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LatchedState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_LatchedState_Id = 18268; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_HighHighState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_HighHighState_Id = 10483; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_HighState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_HighState_Id = 10492; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LowState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_LowState_Id = 10501; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LowLowState_Id Variable. + /// + public const uint NonExclusiveDeviationAlarmType_LowLowState_Id = 10510; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_SetpointNode Variable. + /// + public const uint NonExclusiveDeviationAlarmType_SetpointNode = 10522; + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_BaseSetpointNode Variable. + /// + public const uint NonExclusiveDeviationAlarmType_BaseSetpointNode = 16776; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_EnabledState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_EnabledState_Id = 10228; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp = 10237; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp = 10239; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp = 10241; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments = 10246; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments = 10248; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments = 13001; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_AckedState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_AckedState_Id = 10250; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id = 10259; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments = 10268; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments = 10270; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ActiveState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ActiveState_Id = 10272; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_SuppressedState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_SuppressedState_Id = 10281; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id = 16821; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState = 10290; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id = 10291; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id = 10296; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime = 10300; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments = 10325; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_SilenceState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_SilenceState_Id = 16830; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LatchedState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_LatchedState_Id = 18278; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_HighHighState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_HighHighState_Id = 10329; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_HighState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_HighState_Id = 10338; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LowState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_LowState_Id = 10347; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LowLowState_Id Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_LowLowState_Id = 10356; + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_EngineeringUnits Variable. + /// + public const uint NonExclusiveRateOfChangeAlarmType_EngineeringUnits = 16858; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_EnabledState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_EnabledState_Id = 9778; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint ExclusiveDeviationAlarmType_Quality_SourceTimestamp = 9787; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp = 9789; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint ExclusiveDeviationAlarmType_Comment_SourceTimestamp = 9791; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_AddComment_InputArguments Variable. + /// + public const uint ExclusiveDeviationAlarmType_AddComment_InputArguments = 9796; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments = 9798; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments = 12999; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_AckedState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_AckedState_Id = 9800; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ConfirmedState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_ConfirmedState_Id = 9809; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint ExclusiveDeviationAlarmType_Acknowledge_InputArguments = 9818; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Confirm_InputArguments Variable. + /// + public const uint ExclusiveDeviationAlarmType_Confirm_InputArguments = 9820; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ActiveState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_ActiveState_Id = 9822; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_SuppressedState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_SuppressedState_Id = 9831; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_OutOfServiceState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_OutOfServiceState_Id = 16780; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_CurrentState = 9840; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id = 9841; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id = 9846; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime = 9850; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments = 9875; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_SilenceState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_SilenceState_Id = 16789; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LatchedState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_LatchedState_Id = 18288; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LimitState_CurrentState Variable. + /// + public const uint ExclusiveDeviationAlarmType_LimitState_CurrentState = 9879; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LimitState_CurrentState_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_LimitState_CurrentState_Id = 9880; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LimitState_LastTransition_Id Variable. + /// + public const uint ExclusiveDeviationAlarmType_LimitState_LastTransition_Id = 9885; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_SetpointNode Variable. + /// + public const uint ExclusiveDeviationAlarmType_SetpointNode = 9905; + + /// + /// The identifier for the ExclusiveDeviationAlarmType_BaseSetpointNode Variable. + /// + public const uint ExclusiveDeviationAlarmType_BaseSetpointNode = 16817; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_EnabledState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_EnabledState_Id = 9637; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp = 9646; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp = 9648; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp = 9650; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_AddComment_InputArguments Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_AddComment_InputArguments = 9655; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments = 9657; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments = 13003; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_AckedState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_AckedState_Id = 9659; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ConfirmedState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ConfirmedState_Id = 9668; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments = 9677; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Confirm_InputArguments Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_Confirm_InputArguments = 9679; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ActiveState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ActiveState_Id = 9681; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_SuppressedState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_SuppressedState_Id = 9690; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id = 16862; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState = 9699; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id = 9700; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id = 9705; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime = 9709; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments = 9734; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_SilenceState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_SilenceState_Id = 16871; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LatchedState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_LatchedState_Id = 18298; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LimitState_CurrentState Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_LimitState_CurrentState = 9738; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id = 9739; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id = 9744; + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_EngineeringUnits Variable. + /// + public const uint ExclusiveRateOfChangeAlarmType_EngineeringUnits = 16899; + + /// + /// The identifier for the DiscreteAlarmType_EnabledState_Id Variable. + /// + public const uint DiscreteAlarmType_EnabledState_Id = 10537; + + /// + /// The identifier for the DiscreteAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint DiscreteAlarmType_Quality_SourceTimestamp = 10546; + + /// + /// The identifier for the DiscreteAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint DiscreteAlarmType_LastSeverity_SourceTimestamp = 10548; + + /// + /// The identifier for the DiscreteAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint DiscreteAlarmType_Comment_SourceTimestamp = 10550; + + /// + /// The identifier for the DiscreteAlarmType_AddComment_InputArguments Variable. + /// + public const uint DiscreteAlarmType_AddComment_InputArguments = 10555; + + /// + /// The identifier for the DiscreteAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint DiscreteAlarmType_ConditionRefresh_InputArguments = 10557; + + /// + /// The identifier for the DiscreteAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint DiscreteAlarmType_ConditionRefresh2_InputArguments = 13005; + + /// + /// The identifier for the DiscreteAlarmType_AckedState_Id Variable. + /// + public const uint DiscreteAlarmType_AckedState_Id = 10559; + + /// + /// The identifier for the DiscreteAlarmType_ConfirmedState_Id Variable. + /// + public const uint DiscreteAlarmType_ConfirmedState_Id = 10568; + + /// + /// The identifier for the DiscreteAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint DiscreteAlarmType_Acknowledge_InputArguments = 10577; + + /// + /// The identifier for the DiscreteAlarmType_Confirm_InputArguments Variable. + /// + public const uint DiscreteAlarmType_Confirm_InputArguments = 10579; + + /// + /// The identifier for the DiscreteAlarmType_ActiveState_Id Variable. + /// + public const uint DiscreteAlarmType_ActiveState_Id = 10581; + + /// + /// The identifier for the DiscreteAlarmType_SuppressedState_Id Variable. + /// + public const uint DiscreteAlarmType_SuppressedState_Id = 10590; + + /// + /// The identifier for the DiscreteAlarmType_OutOfServiceState_Id Variable. + /// + public const uint DiscreteAlarmType_OutOfServiceState_Id = 16903; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint DiscreteAlarmType_ShelvingState_CurrentState = 10599; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint DiscreteAlarmType_ShelvingState_CurrentState_Id = 10600; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint DiscreteAlarmType_ShelvingState_LastTransition_Id = 10605; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint DiscreteAlarmType_ShelvingState_UnshelveTime = 10609; + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments = 10634; + + /// + /// The identifier for the DiscreteAlarmType_SilenceState_Id Variable. + /// + public const uint DiscreteAlarmType_SilenceState_Id = 16912; + + /// + /// The identifier for the DiscreteAlarmType_LatchedState_Id Variable. + /// + public const uint DiscreteAlarmType_LatchedState_Id = 18308; + + /// + /// The identifier for the OffNormalAlarmType_EnabledState_Id Variable. + /// + public const uint OffNormalAlarmType_EnabledState_Id = 10651; + + /// + /// The identifier for the OffNormalAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint OffNormalAlarmType_Quality_SourceTimestamp = 10660; + + /// + /// The identifier for the OffNormalAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint OffNormalAlarmType_LastSeverity_SourceTimestamp = 10662; + + /// + /// The identifier for the OffNormalAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint OffNormalAlarmType_Comment_SourceTimestamp = 10664; + + /// + /// The identifier for the OffNormalAlarmType_AddComment_InputArguments Variable. + /// + public const uint OffNormalAlarmType_AddComment_InputArguments = 10669; + + /// + /// The identifier for the OffNormalAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint OffNormalAlarmType_ConditionRefresh_InputArguments = 10671; + + /// + /// The identifier for the OffNormalAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint OffNormalAlarmType_ConditionRefresh2_InputArguments = 13007; + + /// + /// The identifier for the OffNormalAlarmType_AckedState_Id Variable. + /// + public const uint OffNormalAlarmType_AckedState_Id = 10673; + + /// + /// The identifier for the OffNormalAlarmType_ConfirmedState_Id Variable. + /// + public const uint OffNormalAlarmType_ConfirmedState_Id = 10682; + + /// + /// The identifier for the OffNormalAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint OffNormalAlarmType_Acknowledge_InputArguments = 10691; + + /// + /// The identifier for the OffNormalAlarmType_Confirm_InputArguments Variable. + /// + public const uint OffNormalAlarmType_Confirm_InputArguments = 10693; + + /// + /// The identifier for the OffNormalAlarmType_ActiveState_Id Variable. + /// + public const uint OffNormalAlarmType_ActiveState_Id = 10695; + + /// + /// The identifier for the OffNormalAlarmType_SuppressedState_Id Variable. + /// + public const uint OffNormalAlarmType_SuppressedState_Id = 10704; + + /// + /// The identifier for the OffNormalAlarmType_OutOfServiceState_Id Variable. + /// + public const uint OffNormalAlarmType_OutOfServiceState_Id = 16939; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint OffNormalAlarmType_ShelvingState_CurrentState = 10713; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint OffNormalAlarmType_ShelvingState_CurrentState_Id = 10714; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint OffNormalAlarmType_ShelvingState_LastTransition_Id = 10719; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint OffNormalAlarmType_ShelvingState_UnshelveTime = 10723; + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments = 10748; + + /// + /// The identifier for the OffNormalAlarmType_SilenceState_Id Variable. + /// + public const uint OffNormalAlarmType_SilenceState_Id = 16948; + + /// + /// The identifier for the OffNormalAlarmType_LatchedState_Id Variable. + /// + public const uint OffNormalAlarmType_LatchedState_Id = 18318; + + /// + /// The identifier for the OffNormalAlarmType_NormalState Variable. + /// + public const uint OffNormalAlarmType_NormalState = 11158; + + /// + /// The identifier for the SystemOffNormalAlarmType_EnabledState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_EnabledState_Id = 11769; + + /// + /// The identifier for the SystemOffNormalAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint SystemOffNormalAlarmType_Quality_SourceTimestamp = 11778; + + /// + /// The identifier for the SystemOffNormalAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint SystemOffNormalAlarmType_LastSeverity_SourceTimestamp = 11780; + + /// + /// The identifier for the SystemOffNormalAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint SystemOffNormalAlarmType_Comment_SourceTimestamp = 11782; + + /// + /// The identifier for the SystemOffNormalAlarmType_AddComment_InputArguments Variable. + /// + public const uint SystemOffNormalAlarmType_AddComment_InputArguments = 11787; + + /// + /// The identifier for the SystemOffNormalAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint SystemOffNormalAlarmType_ConditionRefresh_InputArguments = 11789; + + /// + /// The identifier for the SystemOffNormalAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint SystemOffNormalAlarmType_ConditionRefresh2_InputArguments = 13009; + + /// + /// The identifier for the SystemOffNormalAlarmType_AckedState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_AckedState_Id = 11791; + + /// + /// The identifier for the SystemOffNormalAlarmType_ConfirmedState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_ConfirmedState_Id = 11800; + + /// + /// The identifier for the SystemOffNormalAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint SystemOffNormalAlarmType_Acknowledge_InputArguments = 11809; + + /// + /// The identifier for the SystemOffNormalAlarmType_Confirm_InputArguments Variable. + /// + public const uint SystemOffNormalAlarmType_Confirm_InputArguments = 11811; + + /// + /// The identifier for the SystemOffNormalAlarmType_ActiveState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_ActiveState_Id = 11813; + + /// + /// The identifier for the SystemOffNormalAlarmType_SuppressedState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_SuppressedState_Id = 11823; + + /// + /// The identifier for the SystemOffNormalAlarmType_OutOfServiceState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_OutOfServiceState_Id = 16975; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_CurrentState = 11832; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_CurrentState_Id = 11833; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_LastTransition_Id = 11838; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_UnshelveTime = 11843; + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments = 11847; + + /// + /// The identifier for the SystemOffNormalAlarmType_SilenceState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_SilenceState_Id = 16984; + + /// + /// The identifier for the SystemOffNormalAlarmType_LatchedState_Id Variable. + /// + public const uint SystemOffNormalAlarmType_LatchedState_Id = 18328; + + /// + /// The identifier for the TripAlarmType_EnabledState_Id Variable. + /// + public const uint TripAlarmType_EnabledState_Id = 10765; + + /// + /// The identifier for the TripAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint TripAlarmType_Quality_SourceTimestamp = 10774; + + /// + /// The identifier for the TripAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint TripAlarmType_LastSeverity_SourceTimestamp = 10776; + + /// + /// The identifier for the TripAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint TripAlarmType_Comment_SourceTimestamp = 10778; + + /// + /// The identifier for the TripAlarmType_AddComment_InputArguments Variable. + /// + public const uint TripAlarmType_AddComment_InputArguments = 10783; + + /// + /// The identifier for the TripAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint TripAlarmType_ConditionRefresh_InputArguments = 10785; + + /// + /// The identifier for the TripAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint TripAlarmType_ConditionRefresh2_InputArguments = 13011; + + /// + /// The identifier for the TripAlarmType_AckedState_Id Variable. + /// + public const uint TripAlarmType_AckedState_Id = 10787; + + /// + /// The identifier for the TripAlarmType_ConfirmedState_Id Variable. + /// + public const uint TripAlarmType_ConfirmedState_Id = 10796; + + /// + /// The identifier for the TripAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint TripAlarmType_Acknowledge_InputArguments = 10805; + + /// + /// The identifier for the TripAlarmType_Confirm_InputArguments Variable. + /// + public const uint TripAlarmType_Confirm_InputArguments = 10807; + + /// + /// The identifier for the TripAlarmType_ActiveState_Id Variable. + /// + public const uint TripAlarmType_ActiveState_Id = 10809; + + /// + /// The identifier for the TripAlarmType_SuppressedState_Id Variable. + /// + public const uint TripAlarmType_SuppressedState_Id = 10818; + + /// + /// The identifier for the TripAlarmType_OutOfServiceState_Id Variable. + /// + public const uint TripAlarmType_OutOfServiceState_Id = 17011; + + /// + /// The identifier for the TripAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint TripAlarmType_ShelvingState_CurrentState = 10827; + + /// + /// The identifier for the TripAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint TripAlarmType_ShelvingState_CurrentState_Id = 10828; + + /// + /// The identifier for the TripAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint TripAlarmType_ShelvingState_LastTransition_Id = 10833; + + /// + /// The identifier for the TripAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint TripAlarmType_ShelvingState_UnshelveTime = 10837; + + /// + /// The identifier for the TripAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint TripAlarmType_ShelvingState_TimedShelve_InputArguments = 10862; + + /// + /// The identifier for the TripAlarmType_SilenceState_Id Variable. + /// + public const uint TripAlarmType_SilenceState_Id = 17020; + + /// + /// The identifier for the TripAlarmType_LatchedState_Id Variable. + /// + public const uint TripAlarmType_LatchedState_Id = 18338; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_EnabledState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_EnabledState_Id = 18365; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint InstrumentDiagnosticAlarmType_Quality_SourceTimestamp = 18374; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp = 18376; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint InstrumentDiagnosticAlarmType_Comment_SourceTimestamp = 18378; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_AddComment_InputArguments Variable. + /// + public const uint InstrumentDiagnosticAlarmType_AddComment_InputArguments = 18383; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments = 18385; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments = 18387; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_AckedState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_AckedState_Id = 18389; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ConfirmedState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ConfirmedState_Id = 18398; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint InstrumentDiagnosticAlarmType_Acknowledge_InputArguments = 18407; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Confirm_InputArguments Variable. + /// + public const uint InstrumentDiagnosticAlarmType_Confirm_InputArguments = 18409; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ActiveState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ActiveState_Id = 18411; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_SuppressedState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_SuppressedState_Id = 18421; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_OutOfServiceState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_OutOfServiceState_Id = 18430; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_CurrentState = 18439; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id = 18440; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id = 18445; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime = 18452; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments = 18454; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_SilenceState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_SilenceState_Id = 18465; + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_LatchedState_Id Variable. + /// + public const uint InstrumentDiagnosticAlarmType_LatchedState_Id = 18478; + + /// + /// The identifier for the SystemDiagnosticAlarmType_EnabledState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_EnabledState_Id = 18514; + + /// + /// The identifier for the SystemDiagnosticAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint SystemDiagnosticAlarmType_Quality_SourceTimestamp = 18523; + + /// + /// The identifier for the SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp = 18525; + + /// + /// The identifier for the SystemDiagnosticAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint SystemDiagnosticAlarmType_Comment_SourceTimestamp = 18527; + + /// + /// The identifier for the SystemDiagnosticAlarmType_AddComment_InputArguments Variable. + /// + public const uint SystemDiagnosticAlarmType_AddComment_InputArguments = 18532; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint SystemDiagnosticAlarmType_ConditionRefresh_InputArguments = 18534; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments = 18536; + + /// + /// The identifier for the SystemDiagnosticAlarmType_AckedState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_AckedState_Id = 18538; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ConfirmedState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_ConfirmedState_Id = 18547; + + /// + /// The identifier for the SystemDiagnosticAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint SystemDiagnosticAlarmType_Acknowledge_InputArguments = 18556; + + /// + /// The identifier for the SystemDiagnosticAlarmType_Confirm_InputArguments Variable. + /// + public const uint SystemDiagnosticAlarmType_Confirm_InputArguments = 18558; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ActiveState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_ActiveState_Id = 18560; + + /// + /// The identifier for the SystemDiagnosticAlarmType_SuppressedState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_SuppressedState_Id = 18570; + + /// + /// The identifier for the SystemDiagnosticAlarmType_OutOfServiceState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_OutOfServiceState_Id = 18579; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_CurrentState = 18588; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id = 18589; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id = 18594; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_UnshelveTime = 18601; + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments = 18603; + + /// + /// The identifier for the SystemDiagnosticAlarmType_SilenceState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_SilenceState_Id = 18614; + + /// + /// The identifier for the SystemDiagnosticAlarmType_LatchedState_Id Variable. + /// + public const uint SystemDiagnosticAlarmType_LatchedState_Id = 18627; + + /// + /// The identifier for the CertificateExpirationAlarmType_EnabledState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_EnabledState_Id = 13241; + + /// + /// The identifier for the CertificateExpirationAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint CertificateExpirationAlarmType_Quality_SourceTimestamp = 13250; + + /// + /// The identifier for the CertificateExpirationAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateExpirationAlarmType_LastSeverity_SourceTimestamp = 13252; + + /// + /// The identifier for the CertificateExpirationAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint CertificateExpirationAlarmType_Comment_SourceTimestamp = 13254; + + /// + /// The identifier for the CertificateExpirationAlarmType_AddComment_InputArguments Variable. + /// + public const uint CertificateExpirationAlarmType_AddComment_InputArguments = 13259; + + /// + /// The identifier for the CertificateExpirationAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint CertificateExpirationAlarmType_ConditionRefresh_InputArguments = 13261; + + /// + /// The identifier for the CertificateExpirationAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint CertificateExpirationAlarmType_ConditionRefresh2_InputArguments = 13263; + + /// + /// The identifier for the CertificateExpirationAlarmType_AckedState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_AckedState_Id = 13265; + + /// + /// The identifier for the CertificateExpirationAlarmType_ConfirmedState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_ConfirmedState_Id = 13274; + + /// + /// The identifier for the CertificateExpirationAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint CertificateExpirationAlarmType_Acknowledge_InputArguments = 13283; + + /// + /// The identifier for the CertificateExpirationAlarmType_Confirm_InputArguments Variable. + /// + public const uint CertificateExpirationAlarmType_Confirm_InputArguments = 13285; + + /// + /// The identifier for the CertificateExpirationAlarmType_ActiveState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_ActiveState_Id = 13287; + + /// + /// The identifier for the CertificateExpirationAlarmType_SuppressedState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_SuppressedState_Id = 13297; + + /// + /// The identifier for the CertificateExpirationAlarmType_OutOfServiceState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_OutOfServiceState_Id = 17047; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_CurrentState = 13306; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_CurrentState_Id = 13307; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_LastTransition_Id = 13312; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_UnshelveTime = 13317; + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments = 13321; + + /// + /// The identifier for the CertificateExpirationAlarmType_SilenceState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_SilenceState_Id = 17056; + + /// + /// The identifier for the CertificateExpirationAlarmType_LatchedState_Id Variable. + /// + public const uint CertificateExpirationAlarmType_LatchedState_Id = 18646; + + /// + /// The identifier for the CertificateExpirationAlarmType_ExpirationDate Variable. + /// + public const uint CertificateExpirationAlarmType_ExpirationDate = 13325; + + /// + /// The identifier for the CertificateExpirationAlarmType_ExpirationLimit Variable. + /// + public const uint CertificateExpirationAlarmType_ExpirationLimit = 14900; + + /// + /// The identifier for the CertificateExpirationAlarmType_CertificateType Variable. + /// + public const uint CertificateExpirationAlarmType_CertificateType = 13326; + + /// + /// The identifier for the CertificateExpirationAlarmType_Certificate Variable. + /// + public const uint CertificateExpirationAlarmType_Certificate = 13327; + + /// + /// The identifier for the DiscrepancyAlarmType_EnabledState_Id Variable. + /// + public const uint DiscrepancyAlarmType_EnabledState_Id = 17098; + + /// + /// The identifier for the DiscrepancyAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint DiscrepancyAlarmType_Quality_SourceTimestamp = 17107; + + /// + /// The identifier for the DiscrepancyAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint DiscrepancyAlarmType_LastSeverity_SourceTimestamp = 17109; + + /// + /// The identifier for the DiscrepancyAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint DiscrepancyAlarmType_Comment_SourceTimestamp = 17111; + + /// + /// The identifier for the DiscrepancyAlarmType_AddComment_InputArguments Variable. + /// + public const uint DiscrepancyAlarmType_AddComment_InputArguments = 17116; + + /// + /// The identifier for the DiscrepancyAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint DiscrepancyAlarmType_ConditionRefresh_InputArguments = 17118; + + /// + /// The identifier for the DiscrepancyAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint DiscrepancyAlarmType_ConditionRefresh2_InputArguments = 17120; + + /// + /// The identifier for the DiscrepancyAlarmType_AckedState_Id Variable. + /// + public const uint DiscrepancyAlarmType_AckedState_Id = 17122; + + /// + /// The identifier for the DiscrepancyAlarmType_ConfirmedState_Id Variable. + /// + public const uint DiscrepancyAlarmType_ConfirmedState_Id = 17131; + + /// + /// The identifier for the DiscrepancyAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint DiscrepancyAlarmType_Acknowledge_InputArguments = 17140; + + /// + /// The identifier for the DiscrepancyAlarmType_Confirm_InputArguments Variable. + /// + public const uint DiscrepancyAlarmType_Confirm_InputArguments = 17142; + + /// + /// The identifier for the DiscrepancyAlarmType_ActiveState_Id Variable. + /// + public const uint DiscrepancyAlarmType_ActiveState_Id = 17144; + + /// + /// The identifier for the DiscrepancyAlarmType_SuppressedState_Id Variable. + /// + public const uint DiscrepancyAlarmType_SuppressedState_Id = 17154; + + /// + /// The identifier for the DiscrepancyAlarmType_OutOfServiceState_Id Variable. + /// + public const uint DiscrepancyAlarmType_OutOfServiceState_Id = 17163; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint DiscrepancyAlarmType_ShelvingState_CurrentState = 17181; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint DiscrepancyAlarmType_ShelvingState_CurrentState_Id = 17182; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint DiscrepancyAlarmType_ShelvingState_LastTransition_Id = 17187; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint DiscrepancyAlarmType_ShelvingState_UnshelveTime = 17192; + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments = 17196; + + /// + /// The identifier for the DiscrepancyAlarmType_SilenceState_Id Variable. + /// + public const uint DiscrepancyAlarmType_SilenceState_Id = 17172; + + /// + /// The identifier for the DiscrepancyAlarmType_LatchedState_Id Variable. + /// + public const uint DiscrepancyAlarmType_LatchedState_Id = 18656; + + /// + /// The identifier for the DiscrepancyAlarmType_TargetValueNode Variable. + /// + public const uint DiscrepancyAlarmType_TargetValueNode = 17215; + + /// + /// The identifier for the DiscrepancyAlarmType_ExpectedTime Variable. + /// + public const uint DiscrepancyAlarmType_ExpectedTime = 17216; + + /// + /// The identifier for the DiscrepancyAlarmType_Tolerance Variable. + /// + public const uint DiscrepancyAlarmType_Tolerance = 17217; + + /// + /// The identifier for the AuditConditionCommentEventType_ConditionEventId Variable. + /// + public const uint AuditConditionCommentEventType_ConditionEventId = 17222; + + /// + /// 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_ConditionEventId Variable. + /// + public const uint AuditConditionAcknowledgeEventType_ConditionEventId = 17223; + + /// + /// The identifier for the AuditConditionAcknowledgeEventType_Comment Variable. + /// + public const uint AuditConditionAcknowledgeEventType_Comment = 11853; + + /// + /// The identifier for the AuditConditionConfirmEventType_ConditionEventId Variable. + /// + public const uint AuditConditionConfirmEventType_ConditionEventId = 17224; + + /// + /// 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 AlarmMetricsType_AlarmCount Variable. + /// + public const uint AlarmMetricsType_AlarmCount = 17280; + + /// + /// The identifier for the AlarmMetricsType_StartTime Variable. + /// + public const uint AlarmMetricsType_StartTime = 17991; + + /// + /// The identifier for the AlarmMetricsType_MaximumActiveState Variable. + /// + public const uint AlarmMetricsType_MaximumActiveState = 17281; + + /// + /// The identifier for the AlarmMetricsType_MaximumUnAck Variable. + /// + public const uint AlarmMetricsType_MaximumUnAck = 17282; + + /// + /// The identifier for the AlarmMetricsType_CurrentAlarmRate Variable. + /// + public const uint AlarmMetricsType_CurrentAlarmRate = 17284; + + /// + /// The identifier for the AlarmMetricsType_CurrentAlarmRate_Rate Variable. + /// + public const uint AlarmMetricsType_CurrentAlarmRate_Rate = 17285; + + /// + /// The identifier for the AlarmMetricsType_MaximumAlarmRate Variable. + /// + public const uint AlarmMetricsType_MaximumAlarmRate = 17286; + + /// + /// The identifier for the AlarmMetricsType_MaximumAlarmRate_Rate Variable. + /// + public const uint AlarmMetricsType_MaximumAlarmRate_Rate = 17287; + + /// + /// The identifier for the AlarmMetricsType_MaximumReAlarmCount Variable. + /// + public const uint AlarmMetricsType_MaximumReAlarmCount = 17283; + + /// + /// The identifier for the AlarmMetricsType_AverageAlarmRate Variable. + /// + public const uint AlarmMetricsType_AverageAlarmRate = 17288; + + /// + /// The identifier for the AlarmMetricsType_AverageAlarmRate_Rate Variable. + /// + public const uint AlarmMetricsType_AverageAlarmRate_Rate = 17289; + + /// + /// The identifier for the AlarmRateVariableType_Rate Variable. + /// + public const uint AlarmRateVariableType_Rate = 17278; + + /// + /// The identifier for the ProgramStateMachineType_CurrentState Variable. + /// + public const uint ProgramStateMachineType_CurrentState = 3830; + + /// + /// The identifier for the ProgramStateMachineType_CurrentState_Id Variable. + /// + public const uint ProgramStateMachineType_CurrentState_Id = 3831; + + /// + /// 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_Id Variable. + /// + public const uint ProgramStateMachineType_LastTransition_Id = 3836; + + /// + /// 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_ProgramDiagnostic Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic = 2399; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_CreateSessionId Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_CreateSessionId = 3840; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_CreateClientName Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_CreateClientName = 3841; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime = 3842; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime = 3843; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodCall Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodCall = 3844; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId = 3845; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments = 3846; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments = 3847; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues = 15038; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues = 15040; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime = 3848; + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus Variable. + /// + public const uint ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus = 3849; + + /// + /// The identifier for the ProgramStateMachineType_Halted_StateNumber Variable. + /// + public const uint ProgramStateMachineType_Halted_StateNumber = 2407; + + /// + /// 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_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_Transition_Id Variable. + /// + public const uint ProgramTransitionEventType_Transition_Id = 3802; + + /// + /// The identifier for the ProgramTransitionEventType_FromState_Id Variable. + /// + public const uint ProgramTransitionEventType_FromState_Id = 3792; + + /// + /// The identifier for the ProgramTransitionEventType_ToState_Id Variable. + /// + public const uint ProgramTransitionEventType_ToState_Id = 3797; + + /// + /// 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 ProgramTransitionAuditEventType_Transition_Id Variable. + /// + public const uint ProgramTransitionAuditEventType_Transition_Id = 3826; + + /// + /// 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 ProgramDiagnostic2Type_CreateSessionId Variable. + /// + public const uint ProgramDiagnostic2Type_CreateSessionId = 15384; + + /// + /// The identifier for the ProgramDiagnostic2Type_CreateClientName Variable. + /// + public const uint ProgramDiagnostic2Type_CreateClientName = 15385; + + /// + /// The identifier for the ProgramDiagnostic2Type_InvocationCreationTime Variable. + /// + public const uint ProgramDiagnostic2Type_InvocationCreationTime = 15386; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastTransitionTime Variable. + /// + public const uint ProgramDiagnostic2Type_LastTransitionTime = 15387; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodCall Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodCall = 15388; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodSessionId Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodSessionId = 15389; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodInputArguments Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodInputArguments = 15390; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodOutputArguments Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodOutputArguments = 15391; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodInputValues Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodInputValues = 15392; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodOutputValues Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodOutputValues = 15393; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodCallTime Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodCallTime = 15394; + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodReturnStatus Variable. + /// + public const uint ProgramDiagnostic2Type_LastMethodReturnStatus = 15395; + + /// + /// 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 HistoricalDataConfigurationType_ServerTimestampSupported Variable. + /// + public const uint HistoricalDataConfigurationType_ServerTimestampSupported = 19092; + + /// + /// 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 HistoryServerCapabilitiesType_ServerTimestampSupported Variable. + /// + public const uint HistoryServerCapabilitiesType_ServerTimestampSupported = 19094; + + /// + /// 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 AuditHistoryAnnotationUpdateEventType_PerformInsertReplace Variable. + /// + public const uint AuditHistoryAnnotationUpdateEventType_PerformInsertReplace = 19293; + + /// + /// The identifier for the AuditHistoryAnnotationUpdateEventType_NewValues Variable. + /// + public const uint AuditHistoryAnnotationUpdateEventType_NewValues = 19294; + + /// + /// The identifier for the AuditHistoryAnnotationUpdateEventType_OldValues Variable. + /// + public const uint AuditHistoryAnnotationUpdateEventType_OldValues = 19295; + + /// + /// 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 TrustListType_Open_InputArguments Variable. + /// + public const uint TrustListType_Open_InputArguments = 12528; + + /// + /// The identifier for the TrustListType_Open_OutputArguments Variable. + /// + public const uint TrustListType_Open_OutputArguments = 12529; + + /// + /// The identifier for the TrustListType_Close_InputArguments Variable. + /// + public const uint TrustListType_Close_InputArguments = 12531; + + /// + /// The identifier for the TrustListType_Read_InputArguments Variable. + /// + public const uint TrustListType_Read_InputArguments = 12533; + + /// + /// The identifier for the TrustListType_Read_OutputArguments Variable. + /// + public const uint TrustListType_Read_OutputArguments = 12534; + + /// + /// The identifier for the TrustListType_Write_InputArguments Variable. + /// + public const uint TrustListType_Write_InputArguments = 12536; + + /// + /// The identifier for the TrustListType_GetPosition_InputArguments Variable. + /// + public const uint TrustListType_GetPosition_InputArguments = 12538; + + /// + /// The identifier for the TrustListType_GetPosition_OutputArguments Variable. + /// + public const uint TrustListType_GetPosition_OutputArguments = 12539; + + /// + /// The identifier for the TrustListType_SetPosition_InputArguments Variable. + /// + public const uint TrustListType_SetPosition_InputArguments = 12541; + + /// + /// The identifier for the TrustListType_LastUpdateTime Variable. + /// + public const uint TrustListType_LastUpdateTime = 12542; + + /// + /// The identifier for the TrustListType_UpdateFrequency Variable. + /// + public const uint TrustListType_UpdateFrequency = 19296; + + /// + /// The identifier for the TrustListType_OpenWithMasks_InputArguments Variable. + /// + public const uint TrustListType_OpenWithMasks_InputArguments = 12544; + + /// + /// The identifier for the TrustListType_OpenWithMasks_OutputArguments Variable. + /// + public const uint TrustListType_OpenWithMasks_OutputArguments = 12545; + + /// + /// The identifier for the TrustListType_CloseAndUpdate_InputArguments Variable. + /// + public const uint TrustListType_CloseAndUpdate_InputArguments = 12705; + + /// + /// The identifier for the TrustListType_CloseAndUpdate_OutputArguments Variable. + /// + public const uint TrustListType_CloseAndUpdate_OutputArguments = 12547; + + /// + /// The identifier for the TrustListType_AddCertificate_InputArguments Variable. + /// + public const uint TrustListType_AddCertificate_InputArguments = 12549; + + /// + /// The identifier for the TrustListType_RemoveCertificate_InputArguments Variable. + /// + public const uint TrustListType_RemoveCertificate_InputArguments = 12551; + + /// + /// The identifier for the TrustListMasks_EnumValues Variable. + /// + public const uint TrustListMasks_EnumValues = 12553; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_EnabledState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_EnabledState_Id = 19315; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Quality_SourceTimestamp Variable. + /// + public const uint TrustListOutOfDateAlarmType_Quality_SourceTimestamp = 19324; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public const uint TrustListOutOfDateAlarmType_LastSeverity_SourceTimestamp = 19326; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Comment_SourceTimestamp Variable. + /// + public const uint TrustListOutOfDateAlarmType_Comment_SourceTimestamp = 19328; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_AddComment_InputArguments Variable. + /// + public const uint TrustListOutOfDateAlarmType_AddComment_InputArguments = 19333; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ConditionRefresh_InputArguments Variable. + /// + public const uint TrustListOutOfDateAlarmType_ConditionRefresh_InputArguments = 19335; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public const uint TrustListOutOfDateAlarmType_ConditionRefresh2_InputArguments = 19337; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_AckedState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_AckedState_Id = 19339; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ConfirmedState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_ConfirmedState_Id = 19348; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Acknowledge_InputArguments Variable. + /// + public const uint TrustListOutOfDateAlarmType_Acknowledge_InputArguments = 19357; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Confirm_InputArguments Variable. + /// + public const uint TrustListOutOfDateAlarmType_Confirm_InputArguments = 19359; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ActiveState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_ActiveState_Id = 19361; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_SuppressedState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_SuppressedState_Id = 19371; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_OutOfServiceState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_OutOfServiceState_Id = 19380; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_CurrentState Variable. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_CurrentState = 19389; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Id = 19390; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Id = 19395; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_UnshelveTime Variable. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_UnshelveTime = 19402; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint TrustListOutOfDateAlarmType_ShelvingState_TimedShelve_InputArguments = 19404; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_SilenceState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_SilenceState_Id = 19415; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_LatchedState_Id Variable. + /// + public const uint TrustListOutOfDateAlarmType_LatchedState_Id = 19428; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_TrustListId Variable. + /// + public const uint TrustListOutOfDateAlarmType_TrustListId = 19446; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_LastUpdateTime Variable. + /// + public const uint TrustListOutOfDateAlarmType_LastUpdateTime = 19447; + + /// + /// The identifier for the TrustListOutOfDateAlarmType_UpdateFrequency Variable. + /// + public const uint TrustListOutOfDateAlarmType_UpdateFrequency = 19448; + + /// + /// The identifier for the CertificateGroupType_TrustList_Size Variable. + /// + public const uint CertificateGroupType_TrustList_Size = 13600; + + /// + /// The identifier for the CertificateGroupType_TrustList_Writable Variable. + /// + public const uint CertificateGroupType_TrustList_Writable = 13601; + + /// + /// The identifier for the CertificateGroupType_TrustList_UserWritable Variable. + /// + public const uint CertificateGroupType_TrustList_UserWritable = 13602; + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenCount Variable. + /// + public const uint CertificateGroupType_TrustList_OpenCount = 13603; + + /// + /// The identifier for the CertificateGroupType_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_Open_InputArguments = 13606; + + /// + /// The identifier for the CertificateGroupType_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_Open_OutputArguments = 13607; + + /// + /// The identifier for the CertificateGroupType_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_Close_InputArguments = 13609; + + /// + /// The identifier for the CertificateGroupType_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_Read_InputArguments = 13611; + + /// + /// The identifier for the CertificateGroupType_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_Read_OutputArguments = 13612; + + /// + /// The identifier for the CertificateGroupType_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_Write_InputArguments = 13614; + + /// + /// The identifier for the CertificateGroupType_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_GetPosition_InputArguments = 13616; + + /// + /// The identifier for the CertificateGroupType_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_GetPosition_OutputArguments = 13617; + + /// + /// The identifier for the CertificateGroupType_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_SetPosition_InputArguments = 13619; + + /// + /// The identifier for the CertificateGroupType_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateGroupType_TrustList_LastUpdateTime = 13620; + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_OpenWithMasks_InputArguments = 13622; + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_OpenWithMasks_OutputArguments = 13623; + + /// + /// The identifier for the CertificateGroupType_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_CloseAndUpdate_InputArguments = 13625; + + /// + /// The identifier for the CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments = 13626; + + /// + /// The identifier for the CertificateGroupType_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_AddCertificate_InputArguments = 13628; + + /// + /// The identifier for the CertificateGroupType_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustList_RemoveCertificate_InputArguments = 13630; + + /// + /// The identifier for the CertificateGroupType_CertificateTypes Variable. + /// + public const uint CertificateGroupType_CertificateTypes = 13631; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EventId Variable. + /// + public const uint CertificateGroupType_CertificateExpired_EventId = 19451; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EventType Variable. + /// + public const uint CertificateGroupType_CertificateExpired_EventType = 19452; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateGroupType_CertificateExpired_SourceNode = 19453; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SourceName Variable. + /// + public const uint CertificateGroupType_CertificateExpired_SourceName = 19454; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Time Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Time = 19455; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ReceiveTime = 19456; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Message Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Message = 19458; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Severity Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Severity = 19459; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ConditionClassId = 19460; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ConditionClassName = 19461; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ConditionName = 19464; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_BranchId Variable. + /// + public const uint CertificateGroupType_CertificateExpired_BranchId = 19465; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Retain Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Retain = 19466; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateGroupType_CertificateExpired_EnabledState = 19467; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_EnabledState_Id = 19468; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Quality Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Quality = 19476; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Quality_SourceTimestamp = 19477; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateGroupType_CertificateExpired_LastSeverity = 19478; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupType_CertificateExpired_LastSeverity_SourceTimestamp = 19479; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Comment Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Comment = 19480; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Comment_SourceTimestamp = 19481; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ClientUserId = 19482; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupType_CertificateExpired_AddComment_InputArguments = 19486; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AckedState Variable. + /// + public const uint CertificateGroupType_CertificateExpired_AckedState = 19487; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_AckedState_Id = 19488; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ConfirmedState_Id = 19497; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Acknowledge_InputArguments = 19506; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Confirm_InputArguments = 19508; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ActiveState = 19509; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ActiveState_Id = 19510; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_InputNode Variable. + /// + public const uint CertificateGroupType_CertificateExpired_InputNode = 19518; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_SuppressedState_Id = 19520; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_OutOfServiceState_Id = 19529; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_CurrentState = 19538; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Id = 19539; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Id = 19544; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_UnshelveTime = 20096; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 20098; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupType_CertificateExpired_SuppressedOrShelved = 20101; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_SilenceState_Id = 20109; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateGroupType_CertificateExpired_LatchedState_Id = 20122; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_NormalState Variable. + /// + public const uint CertificateGroupType_CertificateExpired_NormalState = 20138; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateGroupType_CertificateExpired_ExpirationDate = 20139; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateGroupType_CertificateExpired_CertificateType = 20141; + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Certificate Variable. + /// + public const uint CertificateGroupType_CertificateExpired_Certificate = 20142; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_EventId = 20144; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_EventType = 20145; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_SourceNode = 20146; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_SourceName = 20147; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Time = 20148; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ReceiveTime = 20149; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Message = 20151; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Severity = 20152; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ConditionClassId = 20153; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ConditionClassName = 20154; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ConditionName = 20157; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_BranchId = 20158; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Retain = 20159; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_EnabledState = 20160; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_EnabledState_Id = 20161; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Quality = 20169; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Quality_SourceTimestamp = 20170; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_LastSeverity = 20171; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_LastSeverity_SourceTimestamp = 20172; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Comment = 20173; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Comment_SourceTimestamp = 20174; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ClientUserId = 20175; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_AddComment_InputArguments = 20179; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_AckedState = 20180; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_AckedState_Id = 20181; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ConfirmedState_Id = 20190; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Acknowledge_InputArguments = 20199; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_Confirm_InputArguments = 20201; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ActiveState = 20202; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ActiveState_Id = 20203; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_InputNode = 20211; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_SuppressedState_Id = 20213; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Id = 20222; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState = 20231; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Id = 20232; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Id = 20237; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_UnshelveTime = 20244; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 20246; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_SuppressedOrShelved = 20249; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_SilenceState_Id = 20257; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_LatchedState_Id = 20270; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_NormalState = 20286; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_TrustListId = 20287; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_LastUpdateTime = 20288; + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateGroupType_TrustListOutOfDate_UpdateFrequency = 20289; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size = 13816; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable = 13817; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable = 13818; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount = 13819; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments = 13822; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments = 13823; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments = 13825; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments = 13827; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments = 13828; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments = 13830; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 13832; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 13833; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 13835; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime = 13836; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 13838; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 13839; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 13841; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 13842; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 13844; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 13846; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes = 13847; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventId = 20292; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventType = 20293; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceNode = 20294; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceName = 20295; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Time = 20296; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReceiveTime = 20297; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Message = 20299; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Severity = 20300; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassId = 20301; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassName = 20302; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionName = 20305; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_BranchId = 20306; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Retain = 20307; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState = 20308; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = 20309; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality = 20317; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = 20318; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity = 20319; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = 20320; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment = 20321; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = 20322; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ClientUserId = 20323; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = 20327; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState = 20328; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Id = 20329; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = 20338; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = 20347; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = 20349; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState = 20350; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = 20351; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_InputNode = 20359; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = 20361; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = 20370; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = 20379; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = 20380; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = 20385; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = 20392; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 20394; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = 20397; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = 20405; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = 20420; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_NormalState = 20436; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationDate = 20437; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_CertificateType = 20439; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Certificate = 20440; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventId = 20442; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventType = 20443; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = 20444; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceName = 20445; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Time = 20446; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = 20447; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Message = 20449; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Severity = 20450; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = 20451; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = 20452; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = 20455; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_BranchId = 20456; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Retain = 20457; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = 20458; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = 20459; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality = 20467; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = 20468; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = 20469; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 20470; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment = 20471; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = 20472; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = 20473; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = 20477; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState = 20478; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = 20479; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = 20488; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = 20497; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = 20499; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = 20500; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = 20501; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_InputNode = 20509; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = 20511; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = 20520; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = 20529; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 20530; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 20535; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 20542; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 20544; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = 20547; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = 20555; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = 20568; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_NormalState = 20584; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = 20585; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = 20586; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = 20587; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size = 13850; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable = 13851; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable = 13852; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount = 13853; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments = 13856; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments = 13857; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments = 13859; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments = 13861; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments = 13862; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments = 13864; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 13866; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 13867; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 13869; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime = 13870; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 13872; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 13873; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 13875; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 13876; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 13878; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 13880; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes = 13881; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventId = 20590; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventType = 20591; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceNode = 20592; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceName = 20593; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Time = 20594; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReceiveTime = 20595; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Message = 20597; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Severity = 20598; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassId = 20599; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassName = 20600; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionName = 20603; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_BranchId = 20604; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Retain = 20605; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState = 20606; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = 20607; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality = 20615; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = 20616; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity = 20617; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = 20618; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment = 20619; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = 20620; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ClientUserId = 20621; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = 20625; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState = 20626; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Id = 20627; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = 20636; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = 20645; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = 20647; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState = 20648; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = 20649; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_InputNode = 20657; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = 20659; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = 20668; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = 20677; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = 20678; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = 20683; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = 20690; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 20692; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = 20695; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = 20703; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = 20716; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_NormalState = 20732; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationDate = 20733; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_CertificateType = 20735; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Certificate = 20736; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventId = 20738; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventType = 20739; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = 20740; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceName = 20741; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Time = 20742; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = 20743; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Message = 20745; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Severity = 20746; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = 20747; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = 20748; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = 20751; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_BranchId = 20752; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Retain = 20753; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = 20754; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = 20755; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality = 20763; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = 20764; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = 20765; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 20766; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment = 20767; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = 20768; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = 20769; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = 20773; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState = 20774; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = 20775; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = 20784; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = 20793; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = 20795; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = 20796; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = 20797; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_InputNode = 20805; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = 20807; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = 20816; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = 20825; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 20826; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 20831; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 20838; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 20840; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = 20843; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = 20851; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = 20864; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_NormalState = 20880; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = 20881; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = 20882; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = 20883; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size = 13884; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable = 13885; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable = 13886; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount = 13887; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments = 13890; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 13891; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments = 13893; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments = 13895; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 13896; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments = 13898; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 13900; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 13901; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 13903; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime = 13904; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 13906; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 13907; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 13909; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 13910; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 13912; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 13914; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes = 13915; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventId = 20886; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventType = 20887; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceNode = 20888; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceName = 20889; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Time = 20890; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = 20891; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Message = 20893; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Severity = 20894; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = 20895; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = 20896; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionName = 20899; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_BranchId = 20900; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Retain = 20901; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState = 20902; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = 20903; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality = 20911; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = 20912; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity = 20913; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = 20914; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment = 20915; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = 20916; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ClientUserId = 20917; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = 20921; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState = 20922; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = 20923; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = 20932; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = 20941; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = 20943; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState = 20944; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = 20945; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_InputNode = 20953; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = 20955; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = 20964; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = 20973; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = 20974; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = 20979; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = 20986; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 20988; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = 20991; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = 21008; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = 21215; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_NormalState = 21231; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = 21232; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_CertificateType = 21234; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Certificate = 21235; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventId = 21237; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventType = 21238; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = 21239; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = 21240; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Time = 21241; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = 21242; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Message = 21244; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Severity = 21245; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = 21246; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = 21247; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = 21250; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = 21251; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Retain = 21252; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = 21253; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = 21254; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality = 21262; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = 21263; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = 21264; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 21265; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment = 21266; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = 21267; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = 21268; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = 21272; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = 21273; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = 21274; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = 21283; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = 21292; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = 21294; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = 21295; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = 21296; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = 21304; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = 21306; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = 21315; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = 21324; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 21325; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 21330; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 21337; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 21339; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = 21342; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = 21350; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = 21363; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = 21379; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = 21380; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = 21381; + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = 21382; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size = 13918; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable = 13919; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable = 13920; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount = 13921; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments = 13924; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments = 13925; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments = 13927; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments = 13929; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments = 13930; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments = 13932; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments = 13934; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments = 13935; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments = 13937; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime = 13938; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments = 13940; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments = 13941; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments = 13943; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments = 13944; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments = 13946; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments = 13948; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes = 13949; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventId = 21385; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventType Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventType = 21386; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceNode = 21387; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceName Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceName = 21388; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Time Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Time = 21389; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReceiveTime = 21390; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Message Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Message = 21392; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Severity Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Severity = 21393; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassId = 21394; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassName = 21395; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionName = 21398; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_BranchId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_BranchId = 21399; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Retain Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Retain = 21400; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState = 21401; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Id = 21402; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality = 21410; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality_SourceTimestamp = 21411; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity = 21412; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity_SourceTimestamp = 21413; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment = 21414; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment_SourceTimestamp = 21415; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ClientUserId = 21416; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment_InputArguments = 21420; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState = 21421; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Id = 21422; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Id = 21431; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge_InputArguments = 21440; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm_InputArguments = 21442; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState = 21443; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Id = 21444; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_InputNode Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_InputNode = 21452; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Id = 21454; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Id = 21463; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState = 21472; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Id = 21473; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Id = 21478; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_UnshelveTime = 21485; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 21487; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedOrShelved = 21490; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Id = 21498; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Id = 21511; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_NormalState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_NormalState = 21527; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationDate = 21528; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_CertificateType = 21530; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Certificate Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Certificate = 21531; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventId = 21533; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventType = 21534; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceNode = 21535; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceName = 21536; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Time = 21537; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReceiveTime = 21538; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Message = 21540; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Severity = 21541; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassId = 21542; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassName = 21543; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionName = 21546; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_BranchId = 21547; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Retain = 21548; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState = 21549; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Id = 21550; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality = 21558; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality_SourceTimestamp = 21559; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity = 21560; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity_SourceTimestamp = 21561; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment = 21562; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment_SourceTimestamp = 21563; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ClientUserId = 21564; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment_InputArguments = 21568; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState = 21569; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Id = 21570; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Id = 21579; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge_InputArguments = 21588; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm_InputArguments = 21590; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState = 21591; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Id = 21592; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_InputNode = 21600; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Id = 21602; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Id = 21611; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState = 21620; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Id = 21621; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Id = 21626; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_UnshelveTime = 21633; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 21635; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedOrShelved = 21638; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Id = 21646; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Id = 21659; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_NormalState = 21675; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_TrustListId = 21676; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastUpdateTime = 21677; + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_UpdateFrequency = 21678; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size = 13953; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = 13954; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = 13955; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = 13956; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = 13959; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = 13960; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = 13962; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = 13964; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = 13965; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = 13967; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 13969; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 13970; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 13972; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = 13973; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 13975; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 13976; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 13978; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 13979; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 13981; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 13983; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes = 13984; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = 21681; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = 21682; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = 21683; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = 21684; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = 21685; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = 21686; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = 21688; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = 21689; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = 21690; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = 21691; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = 21694; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = 21695; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = 21696; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = 21697; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = 21698; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = 21706; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = 21707; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = 21708; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = 21709; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = 21710; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = 21711; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = 21712; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = 21716; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = 21717; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = 21718; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = 21727; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = 21736; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = 21738; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = 21739; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = 21740; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = 21748; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = 21750; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = 21759; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = 21768; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = 21769; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = 21774; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = 21781; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 21783; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = 21786; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = 21794; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = 21807; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = 21823; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = 21824; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = 21826; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = 21827; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = 21829; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = 21830; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = 21831; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = 21832; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = 21833; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = 21834; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = 21836; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = 21837; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = 21838; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = 21839; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = 21842; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = 21843; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = 21844; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = 21845; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = 21846; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = 21854; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = 21855; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = 21856; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 21857; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = 21858; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = 21859; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = 21860; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = 21864; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = 21865; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = 21866; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = 21875; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = 21884; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = 21886; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = 21887; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = 21888; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = 21896; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = 21898; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = 21907; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = 21916; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 21917; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 21922; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 21929; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 21931; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = 21934; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = 21942; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = 21955; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = 21971; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = 21972; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = 21973; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = 21974; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size = 13987; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = 13988; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = 13989; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = 13990; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = 13993; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = 13994; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = 13996; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = 13998; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = 13999; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = 14001; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 14003; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 14004; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 14006; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = 14007; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 14009; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 14010; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 14012; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 14013; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 14015; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 14017; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes = 14018; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = 21977; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = 21978; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = 21979; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = 21980; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = 21981; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = 21982; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = 21984; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = 21985; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = 21986; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = 21987; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = 21990; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = 21991; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = 21992; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = 21993; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = 21994; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = 22002; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = 22003; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = 22004; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = 22005; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = 22006; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = 22007; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = 22008; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = 22012; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = 22013; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = 22014; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = 22023; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = 22032; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = 22034; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = 22035; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = 22036; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = 22044; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = 22046; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = 22055; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = 22064; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = 22065; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = 22070; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = 22077; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 22079; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = 22082; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = 22090; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = 22103; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = 22119; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = 22120; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = 22122; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = 22123; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = 22125; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = 22126; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = 22127; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = 22128; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = 22129; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = 22130; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = 22132; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = 22133; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = 22134; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = 22135; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = 22138; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = 22139; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = 22140; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = 22141; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = 22142; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = 22150; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = 22151; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = 22152; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 22153; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = 22154; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = 22155; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = 22156; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = 22160; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = 22161; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = 22162; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = 22171; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = 22180; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = 22182; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = 22183; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = 22184; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = 22192; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = 22194; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = 22203; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = 22212; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 22213; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 22218; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 22225; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 22227; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = 22230; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = 22238; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = 22251; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = 22267; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = 22268; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = 22269; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = 22270; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = 14021; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = 14022; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = 14023; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = 14024; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = 14027; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 14028; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = 14030; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = 14032; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 14033; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = 14035; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 14037; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 14038; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 14040; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = 14041; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 14043; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 14044; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 14046; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 14047; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 14049; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 14051; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = 14052; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = 22273; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = 22274; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = 22275; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = 22276; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = 22277; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = 22278; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = 22280; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = 22281; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = 22282; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = 22283; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = 22286; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = 22287; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = 22288; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = 22289; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = 22290; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = 22298; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = 22299; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = 22300; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = 22301; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = 22302; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = 22303; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = 22304; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = 22308; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = 22309; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = 22310; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = 22319; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = 22328; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = 22330; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = 22331; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = 22332; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = 22340; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = 22342; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = 22351; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = 22360; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = 22361; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = 22366; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = 22373; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 22375; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = 22378; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = 22386; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = 22399; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = 22415; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = 22416; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = 22418; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = 22419; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = 22421; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = 22422; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = 22423; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = 22424; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = 22425; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = 22426; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = 22428; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = 22429; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = 22430; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = 22431; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = 22434; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = 22435; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = 22436; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = 22437; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = 22438; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = 22446; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = 22447; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = 22448; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 22449; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = 22450; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = 22451; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = 22452; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = 22456; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = 22457; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = 22458; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = 22467; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = 22476; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = 22478; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = 22479; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = 22480; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = 22488; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = 22490; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = 22499; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = 22508; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 22509; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 22514; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 22521; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 22523; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = 22526; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = 22534; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = 22547; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = 22563; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = 22564; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = 22565; + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = 22566; + + /// + /// The identifier for the ServerConfigurationType_ServerCapabilities Variable. + /// + public const uint ServerConfigurationType_ServerCapabilities = 12708; + + /// + /// The identifier for the ServerConfigurationType_SupportedPrivateKeyFormats Variable. + /// + public const uint ServerConfigurationType_SupportedPrivateKeyFormats = 12583; + + /// + /// The identifier for the ServerConfigurationType_MaxTrustListSize Variable. + /// + public const uint ServerConfigurationType_MaxTrustListSize = 12584; + + /// + /// The identifier for the ServerConfigurationType_MulticastDnsEnabled Variable. + /// + public const uint ServerConfigurationType_MulticastDnsEnabled = 12585; + + /// + /// The identifier for the ServerConfigurationType_UpdateCertificate_InputArguments Variable. + /// + public const uint ServerConfigurationType_UpdateCertificate_InputArguments = 12617; + + /// + /// The identifier for the ServerConfigurationType_UpdateCertificate_OutputArguments Variable. + /// + public const uint ServerConfigurationType_UpdateCertificate_OutputArguments = 12618; + + /// + /// The identifier for the ServerConfigurationType_CreateSigningRequest_InputArguments Variable. + /// + public const uint ServerConfigurationType_CreateSigningRequest_InputArguments = 12732; + + /// + /// The identifier for the ServerConfigurationType_CreateSigningRequest_OutputArguments Variable. + /// + public const uint ServerConfigurationType_CreateSigningRequest_OutputArguments = 12733; + + /// + /// The identifier for the ServerConfigurationType_GetRejectedList_OutputArguments Variable. + /// + public const uint ServerConfigurationType_GetRejectedList_OutputArguments = 12776; + + /// + /// The identifier for the CertificateUpdatedAuditEventType_CertificateGroup Variable. + /// + public const uint CertificateUpdatedAuditEventType_CertificateGroup = 13735; + + /// + /// The identifier for the CertificateUpdatedAuditEventType_CertificateType Variable. + /// + public const uint CertificateUpdatedAuditEventType_CertificateType = 13736; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size = 12643; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = 14157; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = 14158; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = 12646; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = 12648; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = 12649; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = 12651; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = 12653; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = 12654; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = 12656; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 12658; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 12659; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 12661; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = 12662; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 12664; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 12665; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 14160; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 12667; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 12669; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 12671; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes = 14161; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = 22569; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = 22570; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = 22571; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = 22572; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = 22573; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = 22574; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = 22576; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = 22577; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = 22578; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = 22579; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = 22582; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = 22583; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = 22584; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = 22585; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = 22586; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = 22594; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = 22595; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = 22596; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = 22597; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = 22598; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = 22599; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = 22600; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = 22604; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = 22605; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = 22606; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = 22615; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = 22624; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = 22626; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = 22627; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = 22628; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = 22636; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = 22638; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = 22647; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = 22656; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = 22657; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = 22662; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = 22669; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 22671; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = 22674; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = 22682; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = 22695; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = 22711; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = 22712; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = 22714; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = 22715; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = 22717; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = 22718; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = 22719; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = 22720; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = 22721; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = 22722; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = 22724; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = 22725; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = 22726; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = 22727; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = 22730; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = 22731; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = 22732; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = 22733; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = 22734; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = 22742; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = 22743; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = 22744; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 22745; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = 22746; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = 22747; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = 22748; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = 22752; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = 22753; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = 22754; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = 22763; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = 22772; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = 22774; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = 22775; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = 22776; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = 22784; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = 22786; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = 22795; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = 22804; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 22805; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 22810; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 22817; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 22819; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = 22822; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = 22830; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = 22843; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = 22859; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = 22860; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = 22861; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = 22862; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size = 14090; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = 14091; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = 14092; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = 14093; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = 14096; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = 14097; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = 14099; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = 14101; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = 14102; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = 14104; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 14106; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 14107; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 14109; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = 14110; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 14112; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 14113; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 14115; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 14116; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 14118; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 14120; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes = 14121; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = 22865; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = 22866; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = 22867; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = 22868; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = 22869; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = 22870; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = 22872; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = 22873; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = 22874; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = 22875; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = 22878; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = 22879; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = 22880; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = 22881; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = 22882; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = 22890; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = 22891; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = 22892; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = 22893; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = 22894; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = 22895; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = 22896; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = 22900; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = 22901; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = 22902; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = 22911; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = 22920; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = 22922; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = 22923; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = 22924; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = 22932; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = 22934; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = 22943; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = 22952; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = 22953; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = 22958; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = 22965; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 22967; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = 22970; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = 22978; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = 22991; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = 23007; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = 23008; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = 23010; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = 23011; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = 23013; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = 23014; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = 23015; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = 23016; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = 23017; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = 23018; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = 23020; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = 23021; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = 23022; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = 23023; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = 23026; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = 23027; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = 23028; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = 23029; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = 23030; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = 23038; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = 23039; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = 23040; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 23041; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = 23042; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = 23043; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = 23044; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = 23048; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = 23049; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = 23050; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = 23059; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = 23068; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = 23070; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = 23071; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = 23072; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = 23080; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = 23082; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = 23091; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = 23100; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 23101; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 23106; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 23113; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 23115; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = 23118; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = 23126; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = 23139; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = 23155; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = 23156; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = 23157; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = 23158; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = 14124; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = 14125; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = 14126; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = 14127; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = 14130; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 14131; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = 14133; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = 14135; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 14136; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = 14138; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 14140; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 14141; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 14143; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = 14144; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 14146; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 14147; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 14149; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 14150; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 14152; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 14154; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = 14155; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = 23161; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = 23162; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = 23163; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = 23164; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = 23165; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = 23166; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = 23168; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = 23169; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = 23170; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = 23171; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = 23174; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = 23175; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = 23176; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = 23177; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = 23178; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = 23186; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = 23187; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = 23188; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = 23189; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = 23190; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = 23191; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = 23192; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = 23196; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = 23197; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = 23198; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = 23207; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = 23216; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = 23218; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = 23219; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = 23220; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = 23228; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = 23230; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = 23239; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = 23248; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = 23249; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = 23254; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = 23261; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 23263; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = 23266; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = 23274; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = 23287; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = 23303; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = 23304; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = 23306; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = 23307; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = 23309; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = 23310; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = 23311; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = 23312; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = 23313; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = 23314; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = 23316; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = 23317; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = 23318; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = 23319; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = 23322; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = 23323; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = 23324; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = 23325; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = 23326; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = 23334; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = 23335; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = 23336; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 23337; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = 23338; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = 23339; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = 23340; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = 23344; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = 23345; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = 23346; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = 23355; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = 23364; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = 23366; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = 23367; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = 23368; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = 23376; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = 23378; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = 23387; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = 23396; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 23397; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 23402; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 23409; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 23411; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = 23414; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = 23422; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = 23435; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = 23451; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = 23452; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = 23453; + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = 23454; + + /// + /// The identifier for the ServerConfiguration_ServerCapabilities Variable. + /// + public const uint ServerConfiguration_ServerCapabilities = 12710; + + /// + /// The identifier for the ServerConfiguration_SupportedPrivateKeyFormats Variable. + /// + public const uint ServerConfiguration_SupportedPrivateKeyFormats = 12639; + + /// + /// The identifier for the ServerConfiguration_MaxTrustListSize Variable. + /// + public const uint ServerConfiguration_MaxTrustListSize = 12640; + + /// + /// The identifier for the ServerConfiguration_MulticastDnsEnabled Variable. + /// + public const uint ServerConfiguration_MulticastDnsEnabled = 12641; + + /// + /// The identifier for the ServerConfiguration_UpdateCertificate_InputArguments Variable. + /// + public const uint ServerConfiguration_UpdateCertificate_InputArguments = 13738; + + /// + /// The identifier for the ServerConfiguration_UpdateCertificate_OutputArguments Variable. + /// + public const uint ServerConfiguration_UpdateCertificate_OutputArguments = 13739; + + /// + /// The identifier for the ServerConfiguration_CreateSigningRequest_InputArguments Variable. + /// + public const uint ServerConfiguration_CreateSigningRequest_InputArguments = 12738; + + /// + /// The identifier for the ServerConfiguration_CreateSigningRequest_OutputArguments Variable. + /// + public const uint ServerConfiguration_CreateSigningRequest_OutputArguments = 12739; + + /// + /// The identifier for the ServerConfiguration_GetRejectedList_OutputArguments Variable. + /// + public const uint ServerConfiguration_GetRejectedList_OutputArguments = 12778; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri Variable. + /// + public const uint KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri = 17512; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri Variable. + /// + public const uint KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri = 17513; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments Variable. + /// + public const uint KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments = 17520; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_CreateCredential_InputArguments Variable. + /// + public const uint KeyCredentialConfigurationFolderType_CreateCredential_InputArguments = 17523; + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments Variable. + /// + public const uint KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments = 17524; + + /// + /// The identifier for the KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri Variable. + /// + public const uint KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri = 18157; + + /// + /// The identifier for the KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri Variable. + /// + public const uint KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri = 18164; + + /// + /// The identifier for the KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments Variable. + /// + public const uint KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments = 18162; + + /// + /// The identifier for the KeyCredentialConfiguration_CreateCredential_InputArguments Variable. + /// + public const uint KeyCredentialConfiguration_CreateCredential_InputArguments = 17529; + + /// + /// The identifier for the KeyCredentialConfiguration_CreateCredential_OutputArguments Variable. + /// + public const uint KeyCredentialConfiguration_CreateCredential_OutputArguments = 17530; + + /// + /// The identifier for the KeyCredentialConfigurationType_ResourceUri Variable. + /// + public const uint KeyCredentialConfigurationType_ResourceUri = 18069; + + /// + /// The identifier for the KeyCredentialConfigurationType_ProfileUri Variable. + /// + public const uint KeyCredentialConfigurationType_ProfileUri = 18165; + + /// + /// The identifier for the KeyCredentialConfigurationType_EndpointUrls Variable. + /// + public const uint KeyCredentialConfigurationType_EndpointUrls = 18004; + + /// + /// The identifier for the KeyCredentialConfigurationType_ServiceStatus Variable. + /// + public const uint KeyCredentialConfigurationType_ServiceStatus = 18005; + + /// + /// The identifier for the KeyCredentialConfigurationType_UpdateCredential_InputArguments Variable. + /// + public const uint KeyCredentialConfigurationType_UpdateCredential_InputArguments = 18007; + + /// + /// The identifier for the KeyCredentialAuditEventType_ResourceUri Variable. + /// + public const uint KeyCredentialAuditEventType_ResourceUri = 18028; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceUri Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_ServiceUri = 18070; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceCertificate Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_ServiceCertificate = 18066; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl = 18071; + + /// + /// The identifier for the AuthorizationServiceConfigurationType_ServiceUri Variable. + /// + public const uint AuthorizationServiceConfigurationType_ServiceUri = 18072; + + /// + /// The identifier for the AuthorizationServiceConfigurationType_ServiceCertificate Variable. + /// + public const uint AuthorizationServiceConfigurationType_ServiceCertificate = 17860; + + /// + /// The identifier for the AuthorizationServiceConfigurationType_IssuerEndpointUrl Variable. + /// + public const uint AuthorizationServiceConfigurationType_IssuerEndpointUrl = 18073; + + /// + /// 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 PubSubState_EnumStrings Variable. + /// + public const uint PubSubState_EnumStrings = 14648; + + /// + /// The identifier for the DataSetFieldFlags_OptionSetValues Variable. + /// + public const uint DataSetFieldFlags_OptionSetValues = 15577; + + /// + /// The identifier for the DataSetFieldContentMask_OptionSetValues Variable. + /// + public const uint DataSetFieldContentMask_OptionSetValues = 15584; + + /// + /// The identifier for the OverrideValueHandling_EnumStrings Variable. + /// + public const uint OverrideValueHandling_EnumStrings = 15875; + + /// + /// The identifier for the DataSetOrderingType_EnumStrings Variable. + /// + public const uint DataSetOrderingType_EnumStrings = 15641; + + /// + /// The identifier for the UadpNetworkMessageContentMask_OptionSetValues Variable. + /// + public const uint UadpNetworkMessageContentMask_OptionSetValues = 15643; + + /// + /// The identifier for the UadpDataSetMessageContentMask_OptionSetValues Variable. + /// + public const uint UadpDataSetMessageContentMask_OptionSetValues = 15647; + + /// + /// The identifier for the JsonNetworkMessageContentMask_OptionSetValues Variable. + /// + public const uint JsonNetworkMessageContentMask_OptionSetValues = 15655; + + /// + /// The identifier for the JsonDataSetMessageContentMask_OptionSetValues Variable. + /// + public const uint JsonDataSetMessageContentMask_OptionSetValues = 15659; + + /// + /// The identifier for the BrokerTransportQualityOfService_EnumStrings Variable. + /// + public const uint BrokerTransportQualityOfService_EnumStrings = 15009; + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityKeys_InputArguments Variable. + /// + public const uint PubSubKeyServiceType_GetSecurityKeys_InputArguments = 15908; + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityKeys_OutputArguments Variable. + /// + public const uint PubSubKeyServiceType_GetSecurityKeys_OutputArguments = 15909; + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityGroup_InputArguments Variable. + /// + public const uint PubSubKeyServiceType_GetSecurityGroup_InputArguments = 15911; + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityGroup_OutputArguments Variable. + /// + public const uint PubSubKeyServiceType_GetSecurityGroup_OutputArguments = 15912; + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments Variable. + /// + public const uint PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments = 15915; + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments Variable. + /// + public const uint PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments = 15916; + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments Variable. + /// + public const uint PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments = 15918; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments = 15455; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments = 15456; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments = 15458; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId = 15460; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime = 15010; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri = 15011; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount = 15012; + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount Variable. + /// + public const uint SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount = 15043; + + /// + /// The identifier for the SecurityGroupFolderType_AddSecurityGroup_InputArguments Variable. + /// + public const uint SecurityGroupFolderType_AddSecurityGroup_InputArguments = 15462; + + /// + /// The identifier for the SecurityGroupFolderType_AddSecurityGroup_OutputArguments Variable. + /// + public const uint SecurityGroupFolderType_AddSecurityGroup_OutputArguments = 15463; + + /// + /// The identifier for the SecurityGroupFolderType_RemoveSecurityGroup_InputArguments Variable. + /// + public const uint SecurityGroupFolderType_RemoveSecurityGroup_InputArguments = 15465; + + /// + /// The identifier for the SecurityGroupType_SecurityGroupId Variable. + /// + public const uint SecurityGroupType_SecurityGroupId = 15472; + + /// + /// The identifier for the SecurityGroupType_KeyLifetime Variable. + /// + public const uint SecurityGroupType_KeyLifetime = 15046; + + /// + /// The identifier for the SecurityGroupType_SecurityPolicyUri Variable. + /// + public const uint SecurityGroupType_SecurityPolicyUri = 15047; + + /// + /// The identifier for the SecurityGroupType_MaxFutureKeyCount Variable. + /// + public const uint SecurityGroupType_MaxFutureKeyCount = 15048; + + /// + /// The identifier for the SecurityGroupType_MaxPastKeyCount Variable. + /// + public const uint SecurityGroupType_MaxPastKeyCount = 15056; + + /// + /// The identifier for the PublishSubscribeType_GetSecurityKeys_InputArguments Variable. + /// + public const uint PublishSubscribeType_GetSecurityKeys_InputArguments = 15213; + + /// + /// The identifier for the PublishSubscribeType_GetSecurityKeys_OutputArguments Variable. + /// + public const uint PublishSubscribeType_GetSecurityKeys_OutputArguments = 15214; + + /// + /// The identifier for the PublishSubscribeType_GetSecurityGroup_InputArguments Variable. + /// + public const uint PublishSubscribeType_GetSecurityGroup_InputArguments = 15432; + + /// + /// The identifier for the PublishSubscribeType_GetSecurityGroup_OutputArguments Variable. + /// + public const uint PublishSubscribeType_GetSecurityGroup_OutputArguments = 15433; + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments Variable. + /// + public const uint PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments = 15436; + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments Variable. + /// + public const uint PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments = 15437; + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments Variable. + /// + public const uint PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments = 15439; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_PublisherId Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_PublisherId = 14418; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri = 17292; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections = 17706; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties = 17478; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface = 15533; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections = 17503; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Status_State Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Status_State = 14420; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel = 18668; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation = 18669; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active = 18670; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification = 18671; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 18672; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError = 18674; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active = 18675; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification = 18676; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 18677; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError = 18680; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError = 18682; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active = 18683; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification = 18684; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 18685; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 18687; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 18688; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 18689; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 18690; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 18692; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 18693; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 18694; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 18695; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 18697; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 18698; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 18699; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 18700; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent = 18702; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 18703; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 18704; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 18705; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 18707; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 18708; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 18709; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 18710; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress = 18713; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel = 18714; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments = 16558; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments = 16559; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments = 16561; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments = 16571; + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments Variable. + /// + public const uint PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments = 14425; + + /// + /// The identifier for the PublishSubscribeType_SetSecurityKeys_InputArguments Variable. + /// + public const uint PublishSubscribeType_SetSecurityKeys_InputArguments = 17297; + + /// + /// The identifier for the PublishSubscribeType_AddConnection_InputArguments Variable. + /// + public const uint PublishSubscribeType_AddConnection_InputArguments = 16599; + + /// + /// The identifier for the PublishSubscribeType_AddConnection_OutputArguments Variable. + /// + public const uint PublishSubscribeType_AddConnection_OutputArguments = 16600; + + /// + /// The identifier for the PublishSubscribeType_RemoveConnection_InputArguments Variable. + /// + public const uint PublishSubscribeType_RemoveConnection_InputArguments = 14433; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments = 14436; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments = 14437; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments = 14439; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments = 14440; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments = 16611; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments = 16638; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments = 16640; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments = 16641; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments = 14442; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments = 16678; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments = 16679; + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments Variable. + /// + public const uint PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments = 16681; + + /// + /// The identifier for the PublishSubscribeType_Status_State Variable. + /// + public const uint PublishSubscribeType_Status_State = 15845; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_DiagnosticsLevel = 18716; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalInformation = 18717; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalInformation_Active = 18718; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalInformation_Classification = 18719; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel = 18720; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalError = 18722; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalError_Active = 18723; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalError_Classification = 18724; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel = 18725; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_SubError Variable. + /// + public const uint PublishSubscribeType_Diagnostics_SubError = 18728; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateError = 18730; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateError_Active = 18731; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateError_Classification = 18732; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel = 18733; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod = 18735; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active = 18736; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification = 18737; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 18738; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent = 18740; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active = 18741; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification = 18742; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 18743; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError = 18745; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active = 18746; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification = 18747; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 18748; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StatePausedByParent = 18750; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active = 18751; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification = 18752; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 18753; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod = 18755; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active = 18756; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification = 18757; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 18758; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters = 18761; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = 18762; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders = 18763; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = 18764; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters = 18765; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = 18766; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders = 18767; + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = 18768; + + /// + /// The identifier for the PublishSubscribeType_SupportedTransportProfiles Variable. + /// + public const uint PublishSubscribeType_SupportedTransportProfiles = 17479; + + /// + /// The identifier for the PublishSubscribe_GetSecurityKeys_InputArguments Variable. + /// + public const uint PublishSubscribe_GetSecurityKeys_InputArguments = 15216; + + /// + /// The identifier for the PublishSubscribe_GetSecurityKeys_OutputArguments Variable. + /// + public const uint PublishSubscribe_GetSecurityKeys_OutputArguments = 15217; + + /// + /// The identifier for the PublishSubscribe_GetSecurityGroup_InputArguments Variable. + /// + public const uint PublishSubscribe_GetSecurityGroup_InputArguments = 15441; + + /// + /// The identifier for the PublishSubscribe_GetSecurityGroup_OutputArguments Variable. + /// + public const uint PublishSubscribe_GetSecurityGroup_OutputArguments = 15442; + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments Variable. + /// + public const uint PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments = 15445; + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments Variable. + /// + public const uint PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments = 15446; + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments Variable. + /// + public const uint PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments = 15448; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_PublisherId Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_PublisherId = 15791; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri = 15792; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections = 15848; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties = 17480; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface = 15863; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections = 17506; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Status_State Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Status_State = 15892; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel = 15938; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation = 15939; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active = 15989; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification = 15994; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 16013; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError = 16059; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active = 16060; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification = 16061; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 16074; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError = 16101; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError = 16103; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active = 16122; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification = 16123; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 16124; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 16283; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 16322; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 16523; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 17300; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 17304; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 17305; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 17320; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 17335; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 17337; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 17338; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 17339; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 17340; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent = 17342; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 17343; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 17344; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 17345; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 17347; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 17348; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 17349; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 17350; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress = 17353; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel = 17354; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments = 17357; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments = 17358; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments = 17360; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments = 17361; + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments Variable. + /// + public const uint PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments = 17363; + + /// + /// The identifier for the PublishSubscribe_SetSecurityKeys_InputArguments Variable. + /// + public const uint PublishSubscribe_SetSecurityKeys_InputArguments = 17365; + + /// + /// The identifier for the PublishSubscribe_AddConnection_InputArguments Variable. + /// + public const uint PublishSubscribe_AddConnection_InputArguments = 17367; + + /// + /// The identifier for the PublishSubscribe_AddConnection_OutputArguments Variable. + /// + public const uint PublishSubscribe_AddConnection_OutputArguments = 17368; + + /// + /// The identifier for the PublishSubscribe_RemoveConnection_InputArguments Variable. + /// + public const uint PublishSubscribe_RemoveConnection_InputArguments = 17370; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments = 17373; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments = 17374; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments = 17376; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments = 17377; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments = 17379; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments = 17380; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments = 17382; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments = 17383; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments = 17385; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments = 17401; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments = 17402; + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments Variable. + /// + public const uint PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments = 17404; + + /// + /// The identifier for the PublishSubscribe_Status_State Variable. + /// + public const uint PublishSubscribe_Status_State = 17406; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_DiagnosticsLevel = 17410; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalInformation = 17411; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalInformation_Active = 17412; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalInformation_Classification = 17413; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel = 17414; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalError = 17416; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalError_Active = 17417; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalError_Classification = 17418; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel = 17419; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_SubError Variable. + /// + public const uint PublishSubscribe_Diagnostics_SubError = 17422; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateError = 17424; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateError_Active = 17425; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateError_Classification = 17426; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel = 17429; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod = 17431; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active = 17432; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification = 17433; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 17434; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByParent = 17436; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active = 17437; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification = 17438; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 17439; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalFromError = 17441; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active = 17442; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification = 17443; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 17444; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StatePausedByParent = 17446; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active = 17447; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification = 17448; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 17449; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod = 17451; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active = 17452; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification = 17453; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 17454; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters = 17458; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = 17459; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders = 17460; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = 17461; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters = 17462; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = 17463; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders = 17464; + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = 17466; + + /// + /// The identifier for the PublishSubscribe_SupportedTransportProfiles Variable. + /// + public const uint PublishSubscribe_SupportedTransportProfiles = 17481; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId = 16720; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask = 16721; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties = 17482; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Status_State = 15224; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = 18872; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = 18873; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = 18874; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = 18875; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 18876; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError = 18878; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = 18879; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = 18880; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 18881; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError = 18884; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = 18886; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = 18887; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = 18888; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 18889; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 18891; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 18892; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 18893; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 18894; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 18896; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 18897; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 18898; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 18899; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 18901; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 18902; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 18903; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 18904; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = 18906; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 18907; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 18908; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 18909; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 18911; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 18912; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 18913; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 18914; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = 18917; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = 18918; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = 18919; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 18920; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 18923; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 18925; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 18927; + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 18929; + + /// + /// The identifier for the PublishedDataSetType_ConfigurationVersion Variable. + /// + public const uint PublishedDataSetType_ConfigurationVersion = 14519; + + /// + /// The identifier for the PublishedDataSetType_DataSetMetaData Variable. + /// + public const uint PublishedDataSetType_DataSetMetaData = 15229; + + /// + /// The identifier for the PublishedDataSetType_DataSetClassId Variable. + /// + public const uint PublishedDataSetType_DataSetClassId = 16759; + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public const uint PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments = 15483; + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public const uint PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments = 15484; + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public const uint PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments = 15486; + + /// + /// The identifier for the ExtensionFieldsType_ExtensionFieldName_Placeholder Variable. + /// + public const uint ExtensionFieldsType_ExtensionFieldName_Placeholder = 15490; + + /// + /// The identifier for the ExtensionFieldsType_AddExtensionField_InputArguments Variable. + /// + public const uint ExtensionFieldsType_AddExtensionField_InputArguments = 15492; + + /// + /// The identifier for the ExtensionFieldsType_AddExtensionField_OutputArguments Variable. + /// + public const uint ExtensionFieldsType_AddExtensionField_OutputArguments = 15493; + + /// + /// The identifier for the ExtensionFieldsType_RemoveExtensionField_InputArguments Variable. + /// + public const uint ExtensionFieldsType_RemoveExtensionField_InputArguments = 15495; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId = 16760; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask = 16761; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties = 17483; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State = 15232; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = 18931; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = 18932; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = 18933; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = 18934; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 18935; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError = 18937; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = 18938; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = 18939; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 18940; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError = 18943; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = 18945; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = 18946; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = 18947; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 18948; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 18950; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 18951; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 18952; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 18953; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 18955; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 18956; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 18957; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 18958; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 18960; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 18961; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 18962; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 18963; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = 18965; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 18966; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 18967; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 18968; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 18970; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 18971; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 18972; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 18973; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = 18976; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = 18977; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = 18978; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 18979; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 18982; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 18984; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 18986; + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 18988; + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public const uint PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments = 15505; + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public const uint PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments = 15506; + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public const uint PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments = 15508; + + /// + /// The identifier for the PublishedDataItemsType_PublishedData Variable. + /// + public const uint PublishedDataItemsType_PublishedData = 14548; + + /// + /// The identifier for the PublishedDataItemsType_AddVariables_InputArguments Variable. + /// + public const uint PublishedDataItemsType_AddVariables_InputArguments = 14556; + + /// + /// The identifier for the PublishedDataItemsType_AddVariables_OutputArguments Variable. + /// + public const uint PublishedDataItemsType_AddVariables_OutputArguments = 14557; + + /// + /// The identifier for the PublishedDataItemsType_RemoveVariables_InputArguments Variable. + /// + public const uint PublishedDataItemsType_RemoveVariables_InputArguments = 14559; + + /// + /// The identifier for the PublishedDataItemsType_RemoveVariables_OutputArguments Variable. + /// + public const uint PublishedDataItemsType_RemoveVariables_OutputArguments = 14560; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId = 16801; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask = 16802; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties = 17484; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Status_State = 15240; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = 18990; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = 18991; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = 18992; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = 18993; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 18994; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError = 18996; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = 18997; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = 18998; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 18999; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError = 19002; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = 19004; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = 19005; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = 19006; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 19007; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 19009; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 19010; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 19011; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 19012; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 19014; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 19015; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 19016; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 19017; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 19019; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 19020; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 19021; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 19022; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = 19024; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 19025; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 19026; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 19027; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 19029; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 19030; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 19031; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 19032; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = 19035; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = 19036; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = 19037; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 19038; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 19041; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 19043; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 19045; + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 19047; + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public const uint PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments = 15513; + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public const uint PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments = 15514; + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public const uint PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments = 15516; + + /// + /// The identifier for the PublishedEventsType_PubSubEventNotifier Variable. + /// + public const uint PublishedEventsType_PubSubEventNotifier = 14586; + + /// + /// The identifier for the PublishedEventsType_SelectedFields Variable. + /// + public const uint PublishedEventsType_SelectedFields = 14587; + + /// + /// The identifier for the PublishedEventsType_Filter Variable. + /// + public const uint PublishedEventsType_Filter = 14588; + + /// + /// The identifier for the PublishedEventsType_ModifyFieldSelection_InputArguments Variable. + /// + public const uint PublishedEventsType_ModifyFieldSelection_InputArguments = 15053; + + /// + /// The identifier for the PublishedEventsType_ModifyFieldSelection_OutputArguments Variable. + /// + public const uint PublishedEventsType_ModifyFieldSelection_OutputArguments = 15517; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments = 14480; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments = 14481; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments = 14483; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments = 14484; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments = 16843; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments = 16853; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments = 16882; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments = 16883; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments = 14486; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments = 16894; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments = 16922; + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments Variable. + /// + public const uint DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments = 16924; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion Variable. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion = 14489; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData Variable. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData = 15221; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments = 15475; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments = 15476; + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public const uint DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments = 15478; + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItems_InputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedDataItems_InputArguments = 14494; + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItems_OutputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedDataItems_OutputArguments = 14495; + + /// + /// The identifier for the DataSetFolderType_AddPublishedEvents_InputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedEvents_InputArguments = 14497; + + /// + /// The identifier for the DataSetFolderType_AddPublishedEvents_OutputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedEvents_OutputArguments = 14498; + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments = 16958; + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments = 16959; + + /// + /// The identifier for the DataSetFolderType_AddPublishedEventsTemplate_InputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedEventsTemplate_InputArguments = 16961; + + /// + /// The identifier for the DataSetFolderType_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public const uint DataSetFolderType_AddPublishedEventsTemplate_OutputArguments = 16971; + + /// + /// The identifier for the DataSetFolderType_RemovePublishedDataSet_InputArguments Variable. + /// + public const uint DataSetFolderType_RemovePublishedDataSet_InputArguments = 14500; + + /// + /// The identifier for the DataSetFolderType_AddDataSetFolder_InputArguments Variable. + /// + public const uint DataSetFolderType_AddDataSetFolder_InputArguments = 16995; + + /// + /// The identifier for the DataSetFolderType_AddDataSetFolder_OutputArguments Variable. + /// + public const uint DataSetFolderType_AddDataSetFolder_OutputArguments = 16996; + + /// + /// The identifier for the DataSetFolderType_RemoveDataSetFolder_InputArguments Variable. + /// + public const uint DataSetFolderType_RemoveDataSetFolder_InputArguments = 17007; + + /// + /// The identifier for the PubSubConnectionType_PublisherId Variable. + /// + public const uint PubSubConnectionType_PublisherId = 14595; + + /// + /// The identifier for the PubSubConnectionType_TransportProfileUri Variable. + /// + public const uint PubSubConnectionType_TransportProfileUri = 17306; + + /// + /// The identifier for the PubSubConnectionType_TransportProfileUri_Selections Variable. + /// + public const uint PubSubConnectionType_TransportProfileUri_Selections = 17710; + + /// + /// The identifier for the PubSubConnectionType_ConnectionProperties Variable. + /// + public const uint PubSubConnectionType_ConnectionProperties = 17485; + + /// + /// The identifier for the PubSubConnectionType_Address_NetworkInterface Variable. + /// + public const uint PubSubConnectionType_Address_NetworkInterface = 17202; + + /// + /// The identifier for the PubSubConnectionType_Address_NetworkInterface_Selections Variable. + /// + public const uint PubSubConnectionType_Address_NetworkInterface_Selections = 17576; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode = 17311; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize = 17204; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties = 17486; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Status_State Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Status_State = 17315; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId = 17214; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval = 17318; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime = 17319; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Priority Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Priority = 17321; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds = 17322; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri = 17558; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel = 19108; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation = 19109; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active = 19110; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification = 19111; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 19112; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError = 19114; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active = 19115; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification = 19116; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 19117; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError = 19120; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError = 19122; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active = 19123; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification = 19124; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 19125; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 19127; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 19128; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 19129; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 19130; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 19132; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 19133; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 19134; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 19135; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 19137; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 19138; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 19139; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 19140; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent = 19142; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 19143; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 19144; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 19145; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 19147; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 19148; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 19149; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 19150; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages = 19153; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active = 19154; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification = 19155; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel = 19156; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions = 19158; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active = 19159; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification = 19160; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel = 19161; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors = 19163; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active = 19164; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification = 19165; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel = 19166; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters = 19168; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = 19169; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters = 19170; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = 19171; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = 19173; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = 19175; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments = 17294; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments = 17301; + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments Variable. + /// + public const uint PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments = 17324; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode = 17326; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize = 17302; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties = 17487; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Status_State Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Status_State = 17330; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel = 19177; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation = 19178; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active = 19179; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification = 19180; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 19181; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError = 19183; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active = 19184; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification = 19185; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 19186; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError = 19189; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError = 19191; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active = 19192; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification = 19193; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 19194; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 19196; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 19197; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 19198; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 19199; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 19201; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 19202; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 19203; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 19204; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 19206; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 19207; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 19208; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 19209; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent = 19211; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 19212; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 19213; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 19214; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 19216; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 19217; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 19218; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 19219; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages = 19222; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active = 19223; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification = 19224; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel = 19225; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active = 19228; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification = 19229; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel = 19230; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active = 19233; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification = 19234; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = 19235; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders = 19237; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = 19238; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders = 19239; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = 19240; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments = 17399; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments = 17400; + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments Variable. + /// + public const uint PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments = 17334; + + /// + /// The identifier for the PubSubConnectionType_Status_State Variable. + /// + public const uint PubSubConnectionType_Status_State = 14601; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_DiagnosticsLevel = 19242; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalInformation = 19243; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalInformation_Active = 19244; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalInformation_Classification = 19245; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel = 19246; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalError = 19248; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalError_Active = 19249; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalError_Classification = 19250; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel = 19251; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_SubError Variable. + /// + public const uint PubSubConnectionType_Diagnostics_SubError = 19254; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateError = 19256; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateError_Active = 19257; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateError_Classification = 19258; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel = 19259; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod = 19261; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active = 19262; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification = 19263; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 19264; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent = 19266; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active = 19267; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification = 19268; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 19269; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError = 19271; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active = 19272; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification = 19273; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 19274; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StatePausedByParent = 19276; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active = 19277; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification = 19278; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 19279; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod = 19281; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active = 19282; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification = 19283; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 19284; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress Variable. + /// + public const uint PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress = 19287; + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public const uint PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel = 19288; + + /// + /// The identifier for the PubSubConnectionType_AddWriterGroup_InputArguments Variable. + /// + public const uint PubSubConnectionType_AddWriterGroup_InputArguments = 17428; + + /// + /// The identifier for the PubSubConnectionType_AddWriterGroup_OutputArguments Variable. + /// + public const uint PubSubConnectionType_AddWriterGroup_OutputArguments = 17456; + + /// + /// The identifier for the PubSubConnectionType_AddReaderGroup_InputArguments Variable. + /// + public const uint PubSubConnectionType_AddReaderGroup_InputArguments = 17507; + + /// + /// The identifier for the PubSubConnectionType_AddReaderGroup_OutputArguments Variable. + /// + public const uint PubSubConnectionType_AddReaderGroup_OutputArguments = 17508; + + /// + /// The identifier for the PubSubConnectionType_RemoveGroup_InputArguments Variable. + /// + public const uint PubSubConnectionType_RemoveGroup_InputArguments = 14226; + + /// + /// The identifier for the PubSubGroupType_SecurityMode Variable. + /// + public const uint PubSubGroupType_SecurityMode = 15926; + + /// + /// The identifier for the PubSubGroupType_SecurityGroupId Variable. + /// + public const uint PubSubGroupType_SecurityGroupId = 15927; + + /// + /// The identifier for the PubSubGroupType_SecurityKeyServices Variable. + /// + public const uint PubSubGroupType_SecurityKeyServices = 15928; + + /// + /// The identifier for the PubSubGroupType_MaxNetworkMessageSize Variable. + /// + public const uint PubSubGroupType_MaxNetworkMessageSize = 17724; + + /// + /// The identifier for the PubSubGroupType_GroupProperties Variable. + /// + public const uint PubSubGroupType_GroupProperties = 17488; + + /// + /// The identifier for the PubSubGroupType_Status_State Variable. + /// + public const uint PubSubGroupType_Status_State = 15266; + + /// + /// The identifier for the WriterGroupType_Status_State Variable. + /// + public const uint WriterGroupType_Status_State = 17731; + + /// + /// The identifier for the WriterGroupType_WriterGroupId Variable. + /// + public const uint WriterGroupType_WriterGroupId = 17736; + + /// + /// The identifier for the WriterGroupType_PublishingInterval Variable. + /// + public const uint WriterGroupType_PublishingInterval = 17737; + + /// + /// The identifier for the WriterGroupType_KeepAliveTime Variable. + /// + public const uint WriterGroupType_KeepAliveTime = 17738; + + /// + /// The identifier for the WriterGroupType_Priority Variable. + /// + public const uint WriterGroupType_Priority = 17739; + + /// + /// The identifier for the WriterGroupType_LocaleIds Variable. + /// + public const uint WriterGroupType_LocaleIds = 17740; + + /// + /// The identifier for the WriterGroupType_HeaderLayoutUri Variable. + /// + public const uint WriterGroupType_HeaderLayoutUri = 17559; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId = 17744; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask = 17745; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties = 17490; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Status_State = 17750; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = 17754; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = 17755; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = 17756; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = 17757; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 17758; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError = 17760; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = 17761; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = 17762; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 17763; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError = 17766; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = 17768; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = 17769; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = 17770; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 17771; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 17773; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 17774; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 17775; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 17776; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 17778; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 17779; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 17780; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 17781; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 17783; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 17784; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 17785; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 17786; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = 17788; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 17789; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 17790; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 17791; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 17793; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 17794; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 17795; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 17796; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = 17799; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = 17800; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = 17801; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 17802; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 17805; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 17807; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 17809; + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 17811; + + /// + /// The identifier for the WriterGroupType_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_DiagnosticsLevel = 17813; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalInformation = 17814; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalInformation_Active = 17815; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalInformation_Classification = 17816; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel = 17817; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalError = 17819; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalError_Active = 17820; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalError_Classification = 17821; + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel = 17822; + + /// + /// The identifier for the WriterGroupType_Diagnostics_SubError Variable. + /// + public const uint WriterGroupType_Diagnostics_SubError = 17825; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateError = 17827; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateError_Active = 17828; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateError_Classification = 17829; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel = 17830; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByMethod = 17832; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active = 17833; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification = 17834; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 17835; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByParent = 17837; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active = 17838; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification = 17839; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 17840; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalFromError = 17842; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active = 17843; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification = 17844; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 17845; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StatePausedByParent = 17847; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active = 17848; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification = 17849; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 17850; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateDisabledByMethod = 17853; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active = 17854; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification = 17855; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 17856; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_SentNetworkMessages = 17859; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active = 17864; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification = 17871; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel = 17872; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_FailedTransmissions = 17874; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active = 17878; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification = 17885; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel = 17892; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_EncryptionErrors = 17900; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active = 17901; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification = 17902; + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel = 17903; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public const uint WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters = 17913; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = 17920; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public const uint WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters = 17927; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = 17934; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = 17948; + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public const uint WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = 17962; + + /// + /// The identifier for the WriterGroupType_AddDataSetWriter_InputArguments Variable. + /// + public const uint WriterGroupType_AddDataSetWriter_InputArguments = 17976; + + /// + /// The identifier for the WriterGroupType_AddDataSetWriter_OutputArguments Variable. + /// + public const uint WriterGroupType_AddDataSetWriter_OutputArguments = 17987; + + /// + /// The identifier for the WriterGroupType_RemoveDataSetWriter_InputArguments Variable. + /// + public const uint WriterGroupType_RemoveDataSetWriter_InputArguments = 17993; + + /// + /// The identifier for the ReaderGroupType_Status_State Variable. + /// + public const uint ReaderGroupType_Status_State = 18068; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_PublisherId Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_PublisherId = 18077; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId = 18078; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId = 18079; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData = 18080; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask = 18081; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout = 18082; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount = 17560; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri = 17562; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties = 17492; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Status_State Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Status_State = 18089; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel = 18093; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation = 18094; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active = 18095; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification = 18096; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = 18097; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError = 18099; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active = 18100; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification = 18101; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = 18102; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError = 18105; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError = 18107; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active = 18108; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification = 18109; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = 18110; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = 18112; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = 18113; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = 18114; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 18115; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent = 18117; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = 18118; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = 18119; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 18120; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError = 18122; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = 18123; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = 18124; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 18125; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent = 18127; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = 18128; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = 18129; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 18130; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = 18132; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = 18133; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = 18134; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 18135; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = 18138; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = 18139; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = 18140; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 18141; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active = 18144; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification = 18145; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = 18146; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 18149; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 18151; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 18153; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 18158; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = 21003; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = 21005; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments = 21010; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments = 21011; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments = 21013; + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments Variable. + /// + public const uint ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments = 21014; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_DiagnosticsLevel = 21016; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalInformation = 21017; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalInformation_Active = 21018; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalInformation_Classification = 21019; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel = 21020; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalError = 21022; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalError_Active = 21023; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalError_Classification = 21024; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel = 21025; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_SubError Variable. + /// + public const uint ReaderGroupType_Diagnostics_SubError = 21028; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateError = 21030; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateError_Active = 21031; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateError_Classification = 21032; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel = 21033; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod = 21035; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active = 21036; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification = 21037; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 21038; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByParent = 21040; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active = 21041; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification = 21042; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 21043; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalFromError = 21045; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active = 21046; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification = 21047; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 21048; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StatePausedByParent = 21050; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active = 21051; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification = 21052; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 21053; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod = 21055; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active = 21056; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification = 21057; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 21058; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages = 21061; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active = 21062; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification = 21063; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel = 21064; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active = 21067; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification = 21068; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel = 21069; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active = 21072; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification = 21073; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = 21074; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public const uint ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders = 21076; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = 21077; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public const uint ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders = 21078; + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = 21079; + + /// + /// The identifier for the ReaderGroupType_AddDataSetReader_InputArguments Variable. + /// + public const uint ReaderGroupType_AddDataSetReader_InputArguments = 21083; + + /// + /// The identifier for the ReaderGroupType_AddDataSetReader_OutputArguments Variable. + /// + public const uint ReaderGroupType_AddDataSetReader_OutputArguments = 21084; + + /// + /// The identifier for the ReaderGroupType_RemoveDataSetReader_InputArguments Variable. + /// + public const uint ReaderGroupType_RemoveDataSetReader_InputArguments = 21086; + + /// + /// The identifier for the DataSetWriterType_DataSetWriterId Variable. + /// + public const uint DataSetWriterType_DataSetWriterId = 21092; + + /// + /// The identifier for the DataSetWriterType_DataSetFieldContentMask Variable. + /// + public const uint DataSetWriterType_DataSetFieldContentMask = 21093; + + /// + /// The identifier for the DataSetWriterType_KeyFrameCount Variable. + /// + public const uint DataSetWriterType_KeyFrameCount = 21094; + + /// + /// The identifier for the DataSetWriterType_DataSetWriterProperties Variable. + /// + public const uint DataSetWriterType_DataSetWriterProperties = 17493; + + /// + /// The identifier for the DataSetWriterType_Status_State Variable. + /// + public const uint DataSetWriterType_Status_State = 15300; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_DiagnosticsLevel = 19551; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalInformation = 19552; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalInformation_Active = 19553; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalInformation_Classification = 19554; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel = 19555; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalError = 19557; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalError_Active = 19558; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalError_Classification = 19559; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel = 19560; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_SubError Variable. + /// + public const uint DataSetWriterType_Diagnostics_SubError = 19563; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateError = 19565; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateError_Active = 19566; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateError_Classification = 19567; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel = 19568; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod = 19570; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active = 19571; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification = 19572; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 19573; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByParent = 19575; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active = 19576; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification = 19577; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 19578; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalFromError = 19580; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active = 19581; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification = 19582; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 19583; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StatePausedByParent = 19585; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active = 19586; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification = 19587; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 19588; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod = 19590; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active = 19591; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification = 19592; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 19593; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages = 19596; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active = 19597; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification = 19598; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 19599; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 19602; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 19604; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 19606; + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 19608; + + /// + /// The identifier for the DataSetReaderType_PublisherId Variable. + /// + public const uint DataSetReaderType_PublisherId = 21097; + + /// + /// The identifier for the DataSetReaderType_WriterGroupId Variable. + /// + public const uint DataSetReaderType_WriterGroupId = 21098; + + /// + /// The identifier for the DataSetReaderType_DataSetWriterId Variable. + /// + public const uint DataSetReaderType_DataSetWriterId = 21099; + + /// + /// The identifier for the DataSetReaderType_DataSetMetaData Variable. + /// + public const uint DataSetReaderType_DataSetMetaData = 21100; + + /// + /// The identifier for the DataSetReaderType_DataSetFieldContentMask Variable. + /// + public const uint DataSetReaderType_DataSetFieldContentMask = 21101; + + /// + /// The identifier for the DataSetReaderType_MessageReceiveTimeout Variable. + /// + public const uint DataSetReaderType_MessageReceiveTimeout = 21102; + + /// + /// The identifier for the DataSetReaderType_KeyFrameCount Variable. + /// + public const uint DataSetReaderType_KeyFrameCount = 17563; + + /// + /// The identifier for the DataSetReaderType_HeaderLayoutUri Variable. + /// + public const uint DataSetReaderType_HeaderLayoutUri = 17564; + + /// + /// The identifier for the DataSetReaderType_SecurityMode Variable. + /// + public const uint DataSetReaderType_SecurityMode = 15932; + + /// + /// The identifier for the DataSetReaderType_SecurityGroupId Variable. + /// + public const uint DataSetReaderType_SecurityGroupId = 15933; + + /// + /// The identifier for the DataSetReaderType_SecurityKeyServices Variable. + /// + public const uint DataSetReaderType_SecurityKeyServices = 15934; + + /// + /// The identifier for the DataSetReaderType_DataSetReaderProperties Variable. + /// + public const uint DataSetReaderType_DataSetReaderProperties = 17494; + + /// + /// The identifier for the DataSetReaderType_Status_State Variable. + /// + public const uint DataSetReaderType_Status_State = 15308; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_DiagnosticsLevel = 19610; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalInformation = 19611; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalInformation_Active = 19612; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalInformation_Classification = 19613; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel = 19614; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalError = 19616; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalError_Active = 19617; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalError_Classification = 19618; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel = 19619; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_SubError Variable. + /// + public const uint DataSetReaderType_Diagnostics_SubError = 19622; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateError = 19624; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateError_Active = 19625; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateError_Classification = 19626; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel = 19627; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod = 19629; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active = 19630; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification = 19631; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = 19632; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByParent = 19634; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active = 19635; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification = 19636; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = 19637; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalFromError = 19639; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active = 19640; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification = 19641; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = 19642; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StatePausedByParent = 19644; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active = 19645; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification = 19646; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = 19647; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod = 19649; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active = 19650; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification = 19651; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = 19652; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages = 19655; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active = 19656; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification = 19657; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = 19658; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active = 19661; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification = 19662; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = 19663; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 19666; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = 19668; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = 19670; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = 19672; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = 19674; + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public const uint DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = 19676; + + /// + /// The identifier for the DataSetReaderType_CreateTargetVariables_InputArguments Variable. + /// + public const uint DataSetReaderType_CreateTargetVariables_InputArguments = 17387; + + /// + /// The identifier for the DataSetReaderType_CreateTargetVariables_OutputArguments Variable. + /// + public const uint DataSetReaderType_CreateTargetVariables_OutputArguments = 17388; + + /// + /// The identifier for the DataSetReaderType_CreateDataSetMirror_InputArguments Variable. + /// + public const uint DataSetReaderType_CreateDataSetMirror_InputArguments = 17390; + + /// + /// The identifier for the DataSetReaderType_CreateDataSetMirror_OutputArguments Variable. + /// + public const uint DataSetReaderType_CreateDataSetMirror_OutputArguments = 17391; + + /// + /// The identifier for the TargetVariablesType_TargetVariables Variable. + /// + public const uint TargetVariablesType_TargetVariables = 15114; + + /// + /// The identifier for the TargetVariablesType_AddTargetVariables_InputArguments Variable. + /// + public const uint TargetVariablesType_AddTargetVariables_InputArguments = 15116; + + /// + /// The identifier for the TargetVariablesType_AddTargetVariables_OutputArguments Variable. + /// + public const uint TargetVariablesType_AddTargetVariables_OutputArguments = 15117; + + /// + /// The identifier for the TargetVariablesType_RemoveTargetVariables_InputArguments Variable. + /// + public const uint TargetVariablesType_RemoveTargetVariables_InputArguments = 15119; + + /// + /// The identifier for the TargetVariablesType_RemoveTargetVariables_OutputArguments Variable. + /// + public const uint TargetVariablesType_RemoveTargetVariables_OutputArguments = 15120; + + /// + /// The identifier for the PubSubStatusType_State Variable. + /// + public const uint PubSubStatusType_State = 14644; + + /// + /// The identifier for the PubSubDiagnosticsType_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_DiagnosticsLevel = 19678; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation Variable. + /// + public const uint PubSubDiagnosticsType_TotalInformation = 19679; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsType_TotalInformation_Active = 19680; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsType_TotalInformation_Classification = 19681; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel = 19682; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError Variable. + /// + public const uint PubSubDiagnosticsType_TotalError = 19684; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsType_TotalError_Active = 19685; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsType_TotalError_Classification = 19686; + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_TotalError_DiagnosticsLevel = 19687; + + /// + /// The identifier for the PubSubDiagnosticsType_SubError Variable. + /// + public const uint PubSubDiagnosticsType_SubError = 19690; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateError = 19692; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateError_Active = 19693; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateError_Classification = 19694; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel = 19695; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByMethod = 19697; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active = 19698; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification = 19699; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel = 19700; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByParent = 19702; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByParent_Active = 19703; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification = 19704; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel = 19705; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalFromError = 19707; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalFromError_Active = 19708; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification = 19709; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel = 19710; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StatePausedByParent = 19712; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StatePausedByParent_Active = 19713; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StatePausedByParent_Classification = 19714; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel = 19715; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateDisabledByMethod = 19717; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active = 19718; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification = 19719; + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel = 19720; + + /// + /// The identifier for the DiagnosticsLevel_EnumStrings Variable. + /// + public const uint DiagnosticsLevel_EnumStrings = 19724; + + /// + /// The identifier for the PubSubDiagnosticsCounterType_Active Variable. + /// + public const uint PubSubDiagnosticsCounterType_Active = 19726; + + /// + /// The identifier for the PubSubDiagnosticsCounterType_Classification Variable. + /// + public const uint PubSubDiagnosticsCounterType_Classification = 19727; + + /// + /// The identifier for the PubSubDiagnosticsCounterType_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsCounterType_DiagnosticsLevel = 19728; + + /// + /// The identifier for the PubSubDiagnosticsCounterType_TimeFirstChange Variable. + /// + public const uint PubSubDiagnosticsCounterType_TimeFirstChange = 19729; + + /// + /// The identifier for the PubSubDiagnosticsCounterClassification_EnumStrings Variable. + /// + public const uint PubSubDiagnosticsCounterClassification_EnumStrings = 19731; + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_TotalInformation_Active = 19735; + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_TotalInformation_Classification = 19736; + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel = 19737; + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_TotalError_Active = 19740; + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_TotalError_Classification = 19741; + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel = 19742; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateError = 19747; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateError_Active = 19748; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateError_Classification = 19749; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel = 19750; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByMethod = 19752; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active = 19753; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification = 19754; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel = 19755; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByParent = 19757; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active = 19758; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification = 19759; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel = 19760; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalFromError = 19762; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active = 19763; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification = 19764; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel = 19765; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StatePausedByParent = 19767; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active = 19768; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification = 19769; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel = 19770; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateDisabledByMethod = 19772; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active = 19773; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification = 19774; + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel = 19775; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters = 19778; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = 19779; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders = 19780; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = 19781; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters = 19782; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = 19783; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders = 19784; + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = 19785; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_TotalInformation_Active = 19789; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_TotalInformation_Classification = 19790; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel = 19791; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_TotalError_Active = 19794; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_TotalError_Classification = 19795; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel = 19796; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateError = 19801; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateError_Active = 19802; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateError_Classification = 19803; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel = 19804; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod = 19806; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active = 19807; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification = 19808; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel = 19809; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent = 19811; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active = 19812; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification = 19813; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel = 19814; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError = 19816; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active = 19817; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification = 19818; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel = 19819; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StatePausedByParent = 19821; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active = 19822; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification = 19823; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel = 19824; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod = 19826; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active = 19827; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification = 19828; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel = 19829; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress Variable. + /// + public const uint PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress = 19832; + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel = 19833; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_TotalInformation_Active = 19837; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_TotalInformation_Classification = 19838; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel = 19839; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_TotalError_Active = 19842; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_TotalError_Classification = 19843; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel = 19844; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateError = 19849; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateError_Active = 19850; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification = 19851; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel = 19852; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod = 19854; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active = 19855; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification = 19856; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel = 19857; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent = 19859; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active = 19860; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification = 19861; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel = 19862; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError = 19864; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active = 19865; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification = 19866; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel = 19867; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent = 19869; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active = 19870; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification = 19871; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel = 19872; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod = 19874; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active = 19875; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification = 19876; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel = 19877; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages = 19880; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active = 19881; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification = 19882; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel = 19883; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions = 19885; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active = 19886; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification = 19887; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel = 19888; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors = 19890; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active = 19891; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification = 19892; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel = 19893; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters = 19895; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = 19896; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters = 19897; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = 19898; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID = 19899; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel = 19900; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID = 19901; + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel = 19902; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_TotalInformation_Active = 19906; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_TotalInformation_Classification = 19907; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel = 19908; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_TotalError_Active = 19911; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_TotalError_Classification = 19912; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel = 19913; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateError = 19918; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateError_Active = 19919; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification = 19920; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel = 19921; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod = 19923; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active = 19924; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification = 19925; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel = 19926; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent = 19928; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active = 19929; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification = 19930; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel = 19931; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError = 19933; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active = 19934; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification = 19935; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel = 19936; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent = 19938; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active = 19939; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification = 19940; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel = 19941; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod = 19943; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active = 19944; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification = 19945; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel = 19946; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages = 19949; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active = 19950; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification = 19951; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel = 19952; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages = 19954; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active = 19955; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification = 19956; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel = 19957; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors = 19959; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active = 19960; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification = 19961; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel = 19962; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders = 19964; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = 19965; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders = 19966; + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = 19967; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_TotalInformation_Active = 19971; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification = 19972; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel = 19973; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_TotalError_Active = 19976; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_TotalError_Classification = 19977; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel = 19978; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateError = 19983; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active = 19984; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification = 19985; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel = 19986; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod = 19988; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active = 19989; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification = 19990; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel = 19991; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent = 19993; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active = 19994; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification = 19995; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel = 19996; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError = 19998; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active = 19999; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification = 20000; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel = 20001; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent = 20003; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active = 20004; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification = 20005; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel = 20006; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod = 20008; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active = 20009; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification = 20010; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel = 20011; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages = 20014; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active = 20015; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification = 20016; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel = 20017; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber = 20019; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 20020; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode = 20021; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel = 20022; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion = 20023; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel = 20024; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion = 20025; + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel = 20026; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalInformation_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_TotalInformation_Active = 20030; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification = 20031; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel = 20032; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalError_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_TotalError_Active = 20035; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalError_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_TotalError_Classification = 20036; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel = 20037; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateError = 20042; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active = 20043; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification = 20044; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel = 20045; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod = 20047; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active = 20048; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification = 20049; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel = 20050; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent = 20052; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active = 20053; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification = 20054; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel = 20055; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError = 20057; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active = 20058; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification = 20059; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel = 20060; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent = 20062; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active = 20063; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification = 20064; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel = 20065; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod = 20067; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active = 20068; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification = 20069; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel = 20070; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages = 20073; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active = 20074; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification = 20075; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel = 20076; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors = 20078; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active = 20079; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification = 20080; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel = 20081; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber = 20083; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel = 20084; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode = 20085; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel = 20086; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion = 20087; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel = 20088; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion = 20089; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel = 20090; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID = 20091; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel = 20092; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID = 20093; + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public const uint PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel = 20094; + + /// + /// The identifier for the PubSubStatusEventType_ConnectionId Variable. + /// + public const uint PubSubStatusEventType_ConnectionId = 15545; + + /// + /// The identifier for the PubSubStatusEventType_GroupId Variable. + /// + public const uint PubSubStatusEventType_GroupId = 15546; + + /// + /// The identifier for the PubSubStatusEventType_State Variable. + /// + public const uint PubSubStatusEventType_State = 15547; + + /// + /// The identifier for the PubSubTransportLimitsExceedEventType_Actual Variable. + /// + public const uint PubSubTransportLimitsExceedEventType_Actual = 15561; + + /// + /// The identifier for the PubSubTransportLimitsExceedEventType_Maximum Variable. + /// + public const uint PubSubTransportLimitsExceedEventType_Maximum = 15562; + + /// + /// The identifier for the PubSubCommunicationFailureEventType_Error Variable. + /// + public const uint PubSubCommunicationFailureEventType_Error = 15576; + + /// + /// The identifier for the UadpWriterGroupMessageType_GroupVersion Variable. + /// + public const uint UadpWriterGroupMessageType_GroupVersion = 21106; + + /// + /// The identifier for the UadpWriterGroupMessageType_DataSetOrdering Variable. + /// + public const uint UadpWriterGroupMessageType_DataSetOrdering = 21107; + + /// + /// The identifier for the UadpWriterGroupMessageType_NetworkMessageContentMask Variable. + /// + public const uint UadpWriterGroupMessageType_NetworkMessageContentMask = 21108; + + /// + /// The identifier for the UadpWriterGroupMessageType_SamplingOffset Variable. + /// + public const uint UadpWriterGroupMessageType_SamplingOffset = 21109; + + /// + /// The identifier for the UadpWriterGroupMessageType_PublishingOffset Variable. + /// + public const uint UadpWriterGroupMessageType_PublishingOffset = 21110; + + /// + /// The identifier for the UadpDataSetWriterMessageType_DataSetMessageContentMask Variable. + /// + public const uint UadpDataSetWriterMessageType_DataSetMessageContentMask = 21112; + + /// + /// The identifier for the UadpDataSetWriterMessageType_ConfiguredSize Variable. + /// + public const uint UadpDataSetWriterMessageType_ConfiguredSize = 21113; + + /// + /// The identifier for the UadpDataSetWriterMessageType_NetworkMessageNumber Variable. + /// + public const uint UadpDataSetWriterMessageType_NetworkMessageNumber = 21114; + + /// + /// The identifier for the UadpDataSetWriterMessageType_DataSetOffset Variable. + /// + public const uint UadpDataSetWriterMessageType_DataSetOffset = 21115; + + /// + /// The identifier for the UadpDataSetReaderMessageType_GroupVersion Variable. + /// + public const uint UadpDataSetReaderMessageType_GroupVersion = 21117; + + /// + /// The identifier for the UadpDataSetReaderMessageType_NetworkMessageNumber Variable. + /// + public const uint UadpDataSetReaderMessageType_NetworkMessageNumber = 21119; + + /// + /// The identifier for the UadpDataSetReaderMessageType_DataSetOffset Variable. + /// + public const uint UadpDataSetReaderMessageType_DataSetOffset = 17477; + + /// + /// The identifier for the UadpDataSetReaderMessageType_DataSetClassId Variable. + /// + public const uint UadpDataSetReaderMessageType_DataSetClassId = 21120; + + /// + /// The identifier for the UadpDataSetReaderMessageType_NetworkMessageContentMask Variable. + /// + public const uint UadpDataSetReaderMessageType_NetworkMessageContentMask = 21121; + + /// + /// The identifier for the UadpDataSetReaderMessageType_DataSetMessageContentMask Variable. + /// + public const uint UadpDataSetReaderMessageType_DataSetMessageContentMask = 21122; + + /// + /// The identifier for the UadpDataSetReaderMessageType_PublishingInterval Variable. + /// + public const uint UadpDataSetReaderMessageType_PublishingInterval = 21123; + + /// + /// The identifier for the UadpDataSetReaderMessageType_ProcessingOffset Variable. + /// + public const uint UadpDataSetReaderMessageType_ProcessingOffset = 21124; + + /// + /// The identifier for the UadpDataSetReaderMessageType_ReceiveOffset Variable. + /// + public const uint UadpDataSetReaderMessageType_ReceiveOffset = 21125; + + /// + /// The identifier for the JsonWriterGroupMessageType_NetworkMessageContentMask Variable. + /// + public const uint JsonWriterGroupMessageType_NetworkMessageContentMask = 21127; + + /// + /// The identifier for the JsonDataSetWriterMessageType_DataSetMessageContentMask Variable. + /// + public const uint JsonDataSetWriterMessageType_DataSetMessageContentMask = 21129; + + /// + /// The identifier for the JsonDataSetReaderMessageType_NetworkMessageContentMask Variable. + /// + public const uint JsonDataSetReaderMessageType_NetworkMessageContentMask = 21131; + + /// + /// The identifier for the JsonDataSetReaderMessageType_DataSetMessageContentMask Variable. + /// + public const uint JsonDataSetReaderMessageType_DataSetMessageContentMask = 21132; + + /// + /// The identifier for the DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface Variable. + /// + public const uint DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface = 15154; + + /// + /// The identifier for the DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections Variable. + /// + public const uint DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections = 17579; + + /// + /// The identifier for the DatagramWriterGroupTransportType_MessageRepeatCount Variable. + /// + public const uint DatagramWriterGroupTransportType_MessageRepeatCount = 21134; + + /// + /// The identifier for the DatagramWriterGroupTransportType_MessageRepeatDelay Variable. + /// + public const uint DatagramWriterGroupTransportType_MessageRepeatDelay = 21135; + + /// + /// The identifier for the BrokerConnectionTransportType_ResourceUri Variable. + /// + public const uint BrokerConnectionTransportType_ResourceUri = 15156; + + /// + /// The identifier for the BrokerConnectionTransportType_AuthenticationProfileUri Variable. + /// + public const uint BrokerConnectionTransportType_AuthenticationProfileUri = 15178; + + /// + /// The identifier for the BrokerWriterGroupTransportType_QueueName Variable. + /// + public const uint BrokerWriterGroupTransportType_QueueName = 21137; + + /// + /// The identifier for the BrokerWriterGroupTransportType_ResourceUri Variable. + /// + public const uint BrokerWriterGroupTransportType_ResourceUri = 15246; + + /// + /// The identifier for the BrokerWriterGroupTransportType_AuthenticationProfileUri Variable. + /// + public const uint BrokerWriterGroupTransportType_AuthenticationProfileUri = 15247; + + /// + /// The identifier for the BrokerWriterGroupTransportType_RequestedDeliveryGuarantee Variable. + /// + public const uint BrokerWriterGroupTransportType_RequestedDeliveryGuarantee = 15249; + + /// + /// The identifier for the BrokerDataSetWriterTransportType_QueueName Variable. + /// + public const uint BrokerDataSetWriterTransportType_QueueName = 21139; + + /// + /// The identifier for the BrokerDataSetWriterTransportType_MetaDataQueueName Variable. + /// + public const uint BrokerDataSetWriterTransportType_MetaDataQueueName = 21140; + + /// + /// The identifier for the BrokerDataSetWriterTransportType_ResourceUri Variable. + /// + public const uint BrokerDataSetWriterTransportType_ResourceUri = 15250; + + /// + /// The identifier for the BrokerDataSetWriterTransportType_AuthenticationProfileUri Variable. + /// + public const uint BrokerDataSetWriterTransportType_AuthenticationProfileUri = 15251; + + /// + /// The identifier for the BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee Variable. + /// + public const uint BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee = 15330; + + /// + /// The identifier for the BrokerDataSetWriterTransportType_MetaDataUpdateTime Variable. + /// + public const uint BrokerDataSetWriterTransportType_MetaDataUpdateTime = 21141; + + /// + /// The identifier for the BrokerDataSetReaderTransportType_QueueName Variable. + /// + public const uint BrokerDataSetReaderTransportType_QueueName = 21143; + + /// + /// The identifier for the BrokerDataSetReaderTransportType_ResourceUri Variable. + /// + public const uint BrokerDataSetReaderTransportType_ResourceUri = 15334; + + /// + /// The identifier for the BrokerDataSetReaderTransportType_AuthenticationProfileUri Variable. + /// + public const uint BrokerDataSetReaderTransportType_AuthenticationProfileUri = 15419; + + /// + /// The identifier for the BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee Variable. + /// + public const uint BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee = 15420; + + /// + /// The identifier for the BrokerDataSetReaderTransportType_MetaDataQueueName Variable. + /// + public const uint BrokerDataSetReaderTransportType_MetaDataQueueName = 21144; + + /// + /// The identifier for the NetworkAddressType_NetworkInterface Variable. + /// + public const uint NetworkAddressType_NetworkInterface = 21146; + + /// + /// The identifier for the NetworkAddressType_NetworkInterface_Selections Variable. + /// + public const uint NetworkAddressType_NetworkInterface_Selections = 17582; + + /// + /// The identifier for the NetworkAddressUrlType_NetworkInterface_Selections Variable. + /// + public const uint NetworkAddressUrlType_NetworkInterface_Selections = 17585; + + /// + /// The identifier for the NetworkAddressUrlType_Url Variable. + /// + public const uint NetworkAddressUrlType_Url = 21149; + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public const uint AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = 23460; + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public const uint AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = 23461; + + /// + /// The identifier for the AliasNameCategoryType_FindAlias_InputArguments Variable. + /// + public const uint AliasNameCategoryType_FindAlias_InputArguments = 23463; + + /// + /// The identifier for the AliasNameCategoryType_FindAlias_OutputArguments Variable. + /// + public const uint AliasNameCategoryType_FindAlias_OutputArguments = 23464; + + /// + /// The identifier for the Aliases_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public const uint Aliases_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = 23474; + + /// + /// The identifier for the Aliases_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public const uint Aliases_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = 23475; + + /// + /// The identifier for the Aliases_FindAlias_InputArguments Variable. + /// + public const uint Aliases_FindAlias_InputArguments = 23477; + + /// + /// The identifier for the Aliases_FindAlias_OutputArguments Variable. + /// + public const uint Aliases_FindAlias_OutputArguments = 23478; + + /// + /// The identifier for the TagVariables_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public const uint TagVariables_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = 23483; + + /// + /// The identifier for the TagVariables_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public const uint TagVariables_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = 23484; + + /// + /// The identifier for the TagVariables_FindAlias_InputArguments Variable. + /// + public const uint TagVariables_FindAlias_InputArguments = 23486; + + /// + /// The identifier for the TagVariables_FindAlias_OutputArguments Variable. + /// + public const uint TagVariables_FindAlias_OutputArguments = 23487; + + /// + /// The identifier for the Topics_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public const uint Topics_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = 23492; + + /// + /// The identifier for the Topics_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public const uint Topics_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = 23493; + + /// + /// The identifier for the Topics_FindAlias_InputArguments Variable. + /// + public const uint Topics_FindAlias_InputArguments = 23495; + + /// + /// The identifier for the Topics_FindAlias_OutputArguments Variable. + /// + public const uint Topics_FindAlias_OutputArguments = 23496; + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteBaseType_EnumDictionaryEntries Variable. + /// + public const uint MultiStateDictionaryEntryDiscreteBaseType_EnumDictionaryEntries = 19082; + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteBaseType_ValueAsDictionaryEntries Variable. + /// + public const uint MultiStateDictionaryEntryDiscreteBaseType_ValueAsDictionaryEntries = 19083; + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteType_ValueAsDictionaryEntries Variable. + /// + public const uint MultiStateDictionaryEntryDiscreteType_ValueAsDictionaryEntries = 19090; + + /// + /// 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 PermissionType_OptionSetValues Variable. + /// + public const uint PermissionType_OptionSetValues = 15030; + + /// + /// The identifier for the AccessLevelType_OptionSetValues Variable. + /// + public const uint AccessLevelType_OptionSetValues = 15032; + + /// + /// The identifier for the AccessLevelExType_OptionSetValues Variable. + /// + public const uint AccessLevelExType_OptionSetValues = 15407; + + /// + /// The identifier for the EventNotifierType_OptionSetValues Variable. + /// + public const uint EventNotifierType_OptionSetValues = 15034; + + /// + /// The identifier for the AccessRestrictionType_OptionSetValues Variable. + /// + public const uint AccessRestrictionType_OptionSetValues = 15035; + + /// + /// The identifier for the StructureType_EnumStrings Variable. + /// + public const uint StructureType_EnumStrings = 14528; + + /// + /// 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_OptionSetValues Variable. + /// + public const uint AttributeWriteMask_OptionSetValues = 15036; + + /// + /// 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 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 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_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_Deprecated Variable. + /// + public const uint OpcUa_BinarySchema_Deprecated = 15037; + + /// + /// The identifier for the OpcUa_BinarySchema_KeyValuePair Variable. + /// + public const uint OpcUa_BinarySchema_KeyValuePair = 14873; + + /// + /// The identifier for the OpcUa_BinarySchema_EndpointType Variable. + /// + public const uint OpcUa_BinarySchema_EndpointType = 15734; + + /// + /// The identifier for the OpcUa_BinarySchema_RationalNumber Variable. + /// + public const uint OpcUa_BinarySchema_RationalNumber = 18824; + + /// + /// The identifier for the OpcUa_BinarySchema_Vector Variable. + /// + public const uint OpcUa_BinarySchema_Vector = 18827; + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDVector Variable. + /// + public const uint OpcUa_BinarySchema_ThreeDVector = 18830; + + /// + /// The identifier for the OpcUa_BinarySchema_CartesianCoordinates Variable. + /// + public const uint OpcUa_BinarySchema_CartesianCoordinates = 18833; + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDCartesianCoordinates Variable. + /// + public const uint OpcUa_BinarySchema_ThreeDCartesianCoordinates = 18836; + + /// + /// The identifier for the OpcUa_BinarySchema_Orientation Variable. + /// + public const uint OpcUa_BinarySchema_Orientation = 18839; + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDOrientation Variable. + /// + public const uint OpcUa_BinarySchema_ThreeDOrientation = 18842; + + /// + /// The identifier for the OpcUa_BinarySchema_Frame Variable. + /// + public const uint OpcUa_BinarySchema_Frame = 18845; + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDFrame Variable. + /// + public const uint OpcUa_BinarySchema_ThreeDFrame = 18848; + + /// + /// The identifier for the OpcUa_BinarySchema_IdentityMappingRuleType Variable. + /// + public const uint OpcUa_BinarySchema_IdentityMappingRuleType = 15738; + + /// + /// The identifier for the OpcUa_BinarySchema_CurrencyUnitType Variable. + /// + public const uint OpcUa_BinarySchema_CurrencyUnitType = 23514; + + /// + /// The identifier for the OpcUa_BinarySchema_TrustListDataType Variable. + /// + public const uint OpcUa_BinarySchema_TrustListDataType = 12681; + + /// + /// The identifier for the OpcUa_BinarySchema_DataTypeSchemaHeader Variable. + /// + public const uint OpcUa_BinarySchema_DataTypeSchemaHeader = 15741; + + /// + /// The identifier for the OpcUa_BinarySchema_DataTypeDescription Variable. + /// + public const uint OpcUa_BinarySchema_DataTypeDescription = 14855; + + /// + /// The identifier for the OpcUa_BinarySchema_StructureDescription Variable. + /// + public const uint OpcUa_BinarySchema_StructureDescription = 15599; + + /// + /// The identifier for the OpcUa_BinarySchema_EnumDescription Variable. + /// + public const uint OpcUa_BinarySchema_EnumDescription = 15602; + + /// + /// The identifier for the OpcUa_BinarySchema_SimpleTypeDescription Variable. + /// + public const uint OpcUa_BinarySchema_SimpleTypeDescription = 15501; + + /// + /// The identifier for the OpcUa_BinarySchema_UABinaryFileDataType Variable. + /// + public const uint OpcUa_BinarySchema_UABinaryFileDataType = 15521; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetMetaDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetMetaDataType = 14849; + + /// + /// The identifier for the OpcUa_BinarySchema_FieldMetaData Variable. + /// + public const uint OpcUa_BinarySchema_FieldMetaData = 14852; + + /// + /// The identifier for the OpcUa_BinarySchema_ConfigurationVersionDataType Variable. + /// + public const uint OpcUa_BinarySchema_ConfigurationVersionDataType = 14876; + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedDataSetDataType Variable. + /// + public const uint OpcUa_BinarySchema_PublishedDataSetDataType = 15766; + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedDataSetSourceDataType Variable. + /// + public const uint OpcUa_BinarySchema_PublishedDataSetSourceDataType = 15769; + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedVariableDataType Variable. + /// + public const uint OpcUa_BinarySchema_PublishedVariableDataType = 14324; + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedDataItemsDataType Variable. + /// + public const uint OpcUa_BinarySchema_PublishedDataItemsDataType = 15772; + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedEventsDataType Variable. + /// + public const uint OpcUa_BinarySchema_PublishedEventsDataType = 15775; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetWriterDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetWriterDataType = 15778; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetWriterTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetWriterTransportDataType = 15781; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetWriterMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetWriterMessageDataType = 15784; + + /// + /// The identifier for the OpcUa_BinarySchema_PubSubGroupDataType Variable. + /// + public const uint OpcUa_BinarySchema_PubSubGroupDataType = 15787; + + /// + /// The identifier for the OpcUa_BinarySchema_WriterGroupDataType Variable. + /// + public const uint OpcUa_BinarySchema_WriterGroupDataType = 21156; + + /// + /// The identifier for the OpcUa_BinarySchema_WriterGroupTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_WriterGroupTransportDataType = 15793; + + /// + /// The identifier for the OpcUa_BinarySchema_WriterGroupMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_WriterGroupMessageDataType = 15854; + + /// + /// The identifier for the OpcUa_BinarySchema_PubSubConnectionDataType Variable. + /// + public const uint OpcUa_BinarySchema_PubSubConnectionDataType = 15857; + + /// + /// The identifier for the OpcUa_BinarySchema_ConnectionTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_ConnectionTransportDataType = 15860; + + /// + /// The identifier for the OpcUa_BinarySchema_NetworkAddressDataType Variable. + /// + public const uint OpcUa_BinarySchema_NetworkAddressDataType = 21159; + + /// + /// The identifier for the OpcUa_BinarySchema_NetworkAddressUrlDataType Variable. + /// + public const uint OpcUa_BinarySchema_NetworkAddressUrlDataType = 21162; + + /// + /// The identifier for the OpcUa_BinarySchema_ReaderGroupDataType Variable. + /// + public const uint OpcUa_BinarySchema_ReaderGroupDataType = 21165; + + /// + /// The identifier for the OpcUa_BinarySchema_ReaderGroupTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_ReaderGroupTransportDataType = 15866; + + /// + /// The identifier for the OpcUa_BinarySchema_ReaderGroupMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_ReaderGroupMessageDataType = 15869; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetReaderDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetReaderDataType = 15872; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetReaderTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetReaderTransportDataType = 15877; + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetReaderMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_DataSetReaderMessageDataType = 15880; + + /// + /// The identifier for the OpcUa_BinarySchema_SubscribedDataSetDataType Variable. + /// + public const uint OpcUa_BinarySchema_SubscribedDataSetDataType = 15883; + + /// + /// The identifier for the OpcUa_BinarySchema_TargetVariablesDataType Variable. + /// + public const uint OpcUa_BinarySchema_TargetVariablesDataType = 15886; + + /// + /// The identifier for the OpcUa_BinarySchema_FieldTargetDataType Variable. + /// + public const uint OpcUa_BinarySchema_FieldTargetDataType = 21002; + + /// + /// The identifier for the OpcUa_BinarySchema_SubscribedDataSetMirrorDataType Variable. + /// + public const uint OpcUa_BinarySchema_SubscribedDataSetMirrorDataType = 15889; + + /// + /// The identifier for the OpcUa_BinarySchema_PubSubConfigurationDataType Variable. + /// + public const uint OpcUa_BinarySchema_PubSubConfigurationDataType = 21168; + + /// + /// The identifier for the OpcUa_BinarySchema_UadpWriterGroupMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_UadpWriterGroupMessageDataType = 15895; + + /// + /// The identifier for the OpcUa_BinarySchema_UadpDataSetWriterMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_UadpDataSetWriterMessageDataType = 15898; + + /// + /// The identifier for the OpcUa_BinarySchema_UadpDataSetReaderMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_UadpDataSetReaderMessageDataType = 15919; + + /// + /// The identifier for the OpcUa_BinarySchema_JsonWriterGroupMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_JsonWriterGroupMessageDataType = 15922; + + /// + /// The identifier for the OpcUa_BinarySchema_JsonDataSetWriterMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_JsonDataSetWriterMessageDataType = 15925; + + /// + /// The identifier for the OpcUa_BinarySchema_JsonDataSetReaderMessageDataType Variable. + /// + public const uint OpcUa_BinarySchema_JsonDataSetReaderMessageDataType = 15931; + + /// + /// The identifier for the OpcUa_BinarySchema_DatagramConnectionTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_DatagramConnectionTransportDataType = 17469; + + /// + /// The identifier for the OpcUa_BinarySchema_DatagramWriterGroupTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_DatagramWriterGroupTransportDataType = 21171; + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerConnectionTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_BrokerConnectionTransportDataType = 15524; + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerWriterGroupTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_BrokerWriterGroupTransportDataType = 15940; + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType = 15943; + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType Variable. + /// + public const uint OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType = 15946; + + /// + /// The identifier for the OpcUa_BinarySchema_AliasNameDataType Variable. + /// + public const uint OpcUa_BinarySchema_AliasNameDataType = 23502; + + /// + /// The identifier for the OpcUa_BinarySchema_RolePermissionType Variable. + /// + public const uint OpcUa_BinarySchema_RolePermissionType = 16131; + + /// + /// The identifier for the OpcUa_BinarySchema_DataTypeDefinition Variable. + /// + public const uint OpcUa_BinarySchema_DataTypeDefinition = 18178; + + /// + /// The identifier for the OpcUa_BinarySchema_StructureField Variable. + /// + public const uint OpcUa_BinarySchema_StructureField = 18181; + + /// + /// The identifier for the OpcUa_BinarySchema_StructureDefinition Variable. + /// + public const uint OpcUa_BinarySchema_StructureDefinition = 18184; + + /// + /// The identifier for the OpcUa_BinarySchema_EnumDefinition Variable. + /// + public const uint OpcUa_BinarySchema_EnumDefinition = 18187; + + /// + /// 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_EnumField Variable. + /// + public const uint OpcUa_BinarySchema_EnumField = 14870; + + /// + /// The identifier for the OpcUa_BinarySchema_OptionSet Variable. + /// + public const uint OpcUa_BinarySchema_OptionSet = 12767; + + /// + /// The identifier for the OpcUa_BinarySchema_Union Variable. + /// + public const uint OpcUa_BinarySchema_Union = 12770; + + /// + /// 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_ServerOnNetwork Variable. + /// + public const uint OpcUa_BinarySchema_ServerOnNetwork = 12213; + + /// + /// 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_DiscoveryConfiguration Variable. + /// + public const uint OpcUa_BinarySchema_DiscoveryConfiguration = 12902; + + /// + /// The identifier for the OpcUa_BinarySchema_MdnsDiscoveryConfiguration Variable. + /// + public const uint OpcUa_BinarySchema_MdnsDiscoveryConfiguration = 12905; + + /// + /// 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_RelativePathElement Variable. + /// + public const uint OpcUa_BinarySchema_RelativePathElement = 12718; + + /// + /// The identifier for the OpcUa_BinarySchema_RelativePath Variable. + /// + public const uint OpcUa_BinarySchema_RelativePath = 12721; + + /// + /// The identifier for the OpcUa_BinarySchema_EndpointConfiguration Variable. + /// + public const uint OpcUa_BinarySchema_EndpointConfiguration = 7686; + + /// + /// 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_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_ProgramDiagnostic2DataType Variable. + /// + public const uint OpcUa_BinarySchema_ProgramDiagnostic2DataType = 15398; + + /// + /// The identifier for the OpcUa_BinarySchema_Annotation Variable. + /// + public const uint OpcUa_BinarySchema_Annotation = 8244; + + /// + /// 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_Deprecated Variable. + /// + public const uint OpcUa_XmlSchema_Deprecated = 15039; + + /// + /// The identifier for the OpcUa_XmlSchema_KeyValuePair Variable. + /// + public const uint OpcUa_XmlSchema_KeyValuePair = 14829; + + /// + /// The identifier for the OpcUa_XmlSchema_EndpointType Variable. + /// + public const uint OpcUa_XmlSchema_EndpointType = 16024; + + /// + /// The identifier for the OpcUa_XmlSchema_RationalNumber Variable. + /// + public const uint OpcUa_XmlSchema_RationalNumber = 18860; + + /// + /// The identifier for the OpcUa_XmlSchema_Vector Variable. + /// + public const uint OpcUa_XmlSchema_Vector = 18863; + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDVector Variable. + /// + public const uint OpcUa_XmlSchema_ThreeDVector = 18866; + + /// + /// The identifier for the OpcUa_XmlSchema_CartesianCoordinates Variable. + /// + public const uint OpcUa_XmlSchema_CartesianCoordinates = 18869; + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDCartesianCoordinates Variable. + /// + public const uint OpcUa_XmlSchema_ThreeDCartesianCoordinates = 19049; + + /// + /// The identifier for the OpcUa_XmlSchema_Orientation Variable. + /// + public const uint OpcUa_XmlSchema_Orientation = 19052; + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDOrientation Variable. + /// + public const uint OpcUa_XmlSchema_ThreeDOrientation = 19055; + + /// + /// The identifier for the OpcUa_XmlSchema_Frame Variable. + /// + public const uint OpcUa_XmlSchema_Frame = 19058; + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDFrame Variable. + /// + public const uint OpcUa_XmlSchema_ThreeDFrame = 19061; + + /// + /// The identifier for the OpcUa_XmlSchema_IdentityMappingRuleType Variable. + /// + public const uint OpcUa_XmlSchema_IdentityMappingRuleType = 15730; + + /// + /// The identifier for the OpcUa_XmlSchema_CurrencyUnitType Variable. + /// + public const uint OpcUa_XmlSchema_CurrencyUnitType = 23522; + + /// + /// The identifier for the OpcUa_XmlSchema_TrustListDataType Variable. + /// + public const uint OpcUa_XmlSchema_TrustListDataType = 12677; + + /// + /// The identifier for the OpcUa_XmlSchema_DataTypeSchemaHeader Variable. + /// + public const uint OpcUa_XmlSchema_DataTypeSchemaHeader = 16027; + + /// + /// The identifier for the OpcUa_XmlSchema_DataTypeDescription Variable. + /// + public const uint OpcUa_XmlSchema_DataTypeDescription = 14811; + + /// + /// The identifier for the OpcUa_XmlSchema_StructureDescription Variable. + /// + public const uint OpcUa_XmlSchema_StructureDescription = 15591; + + /// + /// The identifier for the OpcUa_XmlSchema_EnumDescription Variable. + /// + public const uint OpcUa_XmlSchema_EnumDescription = 15594; + + /// + /// The identifier for the OpcUa_XmlSchema_SimpleTypeDescription Variable. + /// + public const uint OpcUa_XmlSchema_SimpleTypeDescription = 15585; + + /// + /// The identifier for the OpcUa_XmlSchema_UABinaryFileDataType Variable. + /// + public const uint OpcUa_XmlSchema_UABinaryFileDataType = 15588; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetMetaDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetMetaDataType = 14805; + + /// + /// The identifier for the OpcUa_XmlSchema_FieldMetaData Variable. + /// + public const uint OpcUa_XmlSchema_FieldMetaData = 14808; + + /// + /// The identifier for the OpcUa_XmlSchema_ConfigurationVersionDataType Variable. + /// + public const uint OpcUa_XmlSchema_ConfigurationVersionDataType = 14832; + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedDataSetDataType Variable. + /// + public const uint OpcUa_XmlSchema_PublishedDataSetDataType = 16030; + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedDataSetSourceDataType Variable. + /// + public const uint OpcUa_XmlSchema_PublishedDataSetSourceDataType = 16033; + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedVariableDataType Variable. + /// + public const uint OpcUa_XmlSchema_PublishedVariableDataType = 14320; + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedDataItemsDataType Variable. + /// + public const uint OpcUa_XmlSchema_PublishedDataItemsDataType = 16037; + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedEventsDataType Variable. + /// + public const uint OpcUa_XmlSchema_PublishedEventsDataType = 16040; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetWriterDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetWriterDataType = 16047; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetWriterTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetWriterTransportDataType = 16050; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetWriterMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetWriterMessageDataType = 16053; + + /// + /// The identifier for the OpcUa_XmlSchema_PubSubGroupDataType Variable. + /// + public const uint OpcUa_XmlSchema_PubSubGroupDataType = 16056; + + /// + /// The identifier for the OpcUa_XmlSchema_WriterGroupDataType Variable. + /// + public const uint OpcUa_XmlSchema_WriterGroupDataType = 21180; + + /// + /// The identifier for the OpcUa_XmlSchema_WriterGroupTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_WriterGroupTransportDataType = 16062; + + /// + /// The identifier for the OpcUa_XmlSchema_WriterGroupMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_WriterGroupMessageDataType = 16065; + + /// + /// The identifier for the OpcUa_XmlSchema_PubSubConnectionDataType Variable. + /// + public const uint OpcUa_XmlSchema_PubSubConnectionDataType = 16068; + + /// + /// The identifier for the OpcUa_XmlSchema_ConnectionTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_ConnectionTransportDataType = 16071; + + /// + /// The identifier for the OpcUa_XmlSchema_NetworkAddressDataType Variable. + /// + public const uint OpcUa_XmlSchema_NetworkAddressDataType = 21183; + + /// + /// The identifier for the OpcUa_XmlSchema_NetworkAddressUrlDataType Variable. + /// + public const uint OpcUa_XmlSchema_NetworkAddressUrlDataType = 21186; + + /// + /// The identifier for the OpcUa_XmlSchema_ReaderGroupDataType Variable. + /// + public const uint OpcUa_XmlSchema_ReaderGroupDataType = 21189; + + /// + /// The identifier for the OpcUa_XmlSchema_ReaderGroupTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_ReaderGroupTransportDataType = 16077; + + /// + /// The identifier for the OpcUa_XmlSchema_ReaderGroupMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_ReaderGroupMessageDataType = 16080; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetReaderDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetReaderDataType = 16083; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetReaderTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetReaderTransportDataType = 16086; + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetReaderMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_DataSetReaderMessageDataType = 16089; + + /// + /// The identifier for the OpcUa_XmlSchema_SubscribedDataSetDataType Variable. + /// + public const uint OpcUa_XmlSchema_SubscribedDataSetDataType = 16092; + + /// + /// The identifier for the OpcUa_XmlSchema_TargetVariablesDataType Variable. + /// + public const uint OpcUa_XmlSchema_TargetVariablesDataType = 16095; + + /// + /// The identifier for the OpcUa_XmlSchema_FieldTargetDataType Variable. + /// + public const uint OpcUa_XmlSchema_FieldTargetDataType = 14835; + + /// + /// The identifier for the OpcUa_XmlSchema_SubscribedDataSetMirrorDataType Variable. + /// + public const uint OpcUa_XmlSchema_SubscribedDataSetMirrorDataType = 16098; + + /// + /// The identifier for the OpcUa_XmlSchema_PubSubConfigurationDataType Variable. + /// + public const uint OpcUa_XmlSchema_PubSubConfigurationDataType = 21192; + + /// + /// The identifier for the OpcUa_XmlSchema_UadpWriterGroupMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_UadpWriterGroupMessageDataType = 16104; + + /// + /// The identifier for the OpcUa_XmlSchema_UadpDataSetWriterMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_UadpDataSetWriterMessageDataType = 16107; + + /// + /// The identifier for the OpcUa_XmlSchema_UadpDataSetReaderMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_UadpDataSetReaderMessageDataType = 16110; + + /// + /// The identifier for the OpcUa_XmlSchema_JsonWriterGroupMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_JsonWriterGroupMessageDataType = 16113; + + /// + /// The identifier for the OpcUa_XmlSchema_JsonDataSetWriterMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_JsonDataSetWriterMessageDataType = 16116; + + /// + /// The identifier for the OpcUa_XmlSchema_JsonDataSetReaderMessageDataType Variable. + /// + public const uint OpcUa_XmlSchema_JsonDataSetReaderMessageDataType = 16119; + + /// + /// The identifier for the OpcUa_XmlSchema_DatagramConnectionTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_DatagramConnectionTransportDataType = 17473; + + /// + /// The identifier for the OpcUa_XmlSchema_DatagramWriterGroupTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_DatagramWriterGroupTransportDataType = 21195; + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerConnectionTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_BrokerConnectionTransportDataType = 15640; + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerWriterGroupTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_BrokerWriterGroupTransportDataType = 16125; + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType = 16144; + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType Variable. + /// + public const uint OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType = 16147; + + /// + /// The identifier for the OpcUa_XmlSchema_AliasNameDataType Variable. + /// + public const uint OpcUa_XmlSchema_AliasNameDataType = 23508; + + /// + /// The identifier for the OpcUa_XmlSchema_RolePermissionType Variable. + /// + public const uint OpcUa_XmlSchema_RolePermissionType = 16127; + + /// + /// The identifier for the OpcUa_XmlSchema_DataTypeDefinition Variable. + /// + public const uint OpcUa_XmlSchema_DataTypeDefinition = 18166; + + /// + /// The identifier for the OpcUa_XmlSchema_StructureField Variable. + /// + public const uint OpcUa_XmlSchema_StructureField = 18169; + + /// + /// The identifier for the OpcUa_XmlSchema_StructureDefinition Variable. + /// + public const uint OpcUa_XmlSchema_StructureDefinition = 18172; + + /// + /// The identifier for the OpcUa_XmlSchema_EnumDefinition Variable. + /// + public const uint OpcUa_XmlSchema_EnumDefinition = 18175; + + /// + /// 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_EnumField Variable. + /// + public const uint OpcUa_XmlSchema_EnumField = 14826; + + /// + /// The identifier for the OpcUa_XmlSchema_OptionSet Variable. + /// + public const uint OpcUa_XmlSchema_OptionSet = 12759; + + /// + /// The identifier for the OpcUa_XmlSchema_Union Variable. + /// + public const uint OpcUa_XmlSchema_Union = 12762; + + /// + /// 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_ServerOnNetwork Variable. + /// + public const uint OpcUa_XmlSchema_ServerOnNetwork = 12201; + + /// + /// 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_DiscoveryConfiguration Variable. + /// + public const uint OpcUa_XmlSchema_DiscoveryConfiguration = 12894; + + /// + /// The identifier for the OpcUa_XmlSchema_MdnsDiscoveryConfiguration Variable. + /// + public const uint OpcUa_XmlSchema_MdnsDiscoveryConfiguration = 12897; + + /// + /// 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_RelativePathElement Variable. + /// + public const uint OpcUa_XmlSchema_RelativePathElement = 12712; + + /// + /// The identifier for the OpcUa_XmlSchema_RelativePath Variable. + /// + public const uint OpcUa_XmlSchema_RelativePath = 12715; + + /// + /// The identifier for the OpcUa_XmlSchema_EndpointConfiguration Variable. + /// + public const uint OpcUa_XmlSchema_EndpointConfiguration = 8321; + + /// + /// 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_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_ProgramDiagnostic2DataType Variable. + /// + public const uint OpcUa_XmlSchema_ProgramDiagnostic2DataType = 15402; + + /// + /// The identifier for the OpcUa_XmlSchema_Annotation Variable. + /// + public const uint OpcUa_XmlSchema_Annotation = 8879; + } + #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 SelectionListType VariableType. + /// + public const uint SelectionListType = 16309; + + /// + /// The identifier for the AudioVariableType VariableType. + /// + public const uint AudioVariableType = 17986; + + /// + /// 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 GuardVariableType VariableType. + /// + public const uint GuardVariableType = 15113; + + /// + /// The identifier for the ExpressionGuardVariableType VariableType. + /// + public const uint ExpressionGuardVariableType = 15128; + + /// + /// The identifier for the ElseGuardVariableType VariableType. + /// + public const uint ElseGuardVariableType = 15317; + + /// + /// The identifier for the RationalNumberType VariableType. + /// + public const uint RationalNumberType = 17709; + + /// + /// The identifier for the VectorType VariableType. + /// + public const uint VectorType = 17714; + + /// + /// The identifier for the ThreeDVectorType VariableType. + /// + public const uint ThreeDVectorType = 17716; + + /// + /// The identifier for the CartesianCoordinatesType VariableType. + /// + public const uint CartesianCoordinatesType = 18772; + + /// + /// The identifier for the ThreeDCartesianCoordinatesType VariableType. + /// + public const uint ThreeDCartesianCoordinatesType = 18774; + + /// + /// The identifier for the OrientationType VariableType. + /// + public const uint OrientationType = 18779; + + /// + /// The identifier for the ThreeDOrientationType VariableType. + /// + public const uint ThreeDOrientationType = 18781; + + /// + /// The identifier for the FrameType VariableType. + /// + public const uint FrameType = 18786; + + /// + /// The identifier for the ThreeDFrameType VariableType. + /// + public const uint ThreeDFrameType = 18791; + + /// + /// The identifier for the DataItemType VariableType. + /// + public const uint DataItemType = 2365; + + /// + /// The identifier for the BaseAnalogType VariableType. + /// + public const uint BaseAnalogType = 15318; + + /// + /// The identifier for the AnalogItemType VariableType. + /// + public const uint AnalogItemType = 2368; + + /// + /// The identifier for the AnalogUnitType VariableType. + /// + public const uint AnalogUnitType = 17497; + + /// + /// The identifier for the AnalogUnitRangeType VariableType. + /// + public const uint AnalogUnitRangeType = 17570; + + /// + /// 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 AlarmRateVariableType VariableType. + /// + public const uint AlarmRateVariableType = 17277; + + /// + /// The identifier for the ProgramDiagnosticType VariableType. + /// + public const uint ProgramDiagnosticType = 2380; + + /// + /// The identifier for the ProgramDiagnostic2Type VariableType. + /// + public const uint ProgramDiagnostic2Type = 15383; + + /// + /// The identifier for the PubSubDiagnosticsCounterType VariableType. + /// + public const uint PubSubDiagnosticsCounterType = 19725; + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteBaseType VariableType. + /// + public const uint MultiStateDictionaryEntryDiscreteBaseType = 19077; + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteType VariableType. + /// + public const uint MultiStateDictionaryEntryDiscreteType = 19084; + } + #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(Opc.Ua.DataTypes.BaseDataType); + + /// + /// The identifier for the Number DataType. + /// + public static readonly NodeId Number = new NodeId(Opc.Ua.DataTypes.Number); + + /// + /// The identifier for the Integer DataType. + /// + public static readonly NodeId Integer = new NodeId(Opc.Ua.DataTypes.Integer); + + /// + /// The identifier for the UInteger DataType. + /// + public static readonly NodeId UInteger = new NodeId(Opc.Ua.DataTypes.UInteger); + + /// + /// The identifier for the Enumeration DataType. + /// + public static readonly NodeId Enumeration = new NodeId(Opc.Ua.DataTypes.Enumeration); + + /// + /// The identifier for the Boolean DataType. + /// + public static readonly NodeId Boolean = new NodeId(Opc.Ua.DataTypes.Boolean); + + /// + /// The identifier for the SByte DataType. + /// + public static readonly NodeId SByte = new NodeId(Opc.Ua.DataTypes.SByte); + + /// + /// The identifier for the Byte DataType. + /// + public static readonly NodeId Byte = new NodeId(Opc.Ua.DataTypes.Byte); + + /// + /// The identifier for the Int16 DataType. + /// + public static readonly NodeId Int16 = new NodeId(Opc.Ua.DataTypes.Int16); + + /// + /// The identifier for the UInt16 DataType. + /// + public static readonly NodeId UInt16 = new NodeId(Opc.Ua.DataTypes.UInt16); + + /// + /// The identifier for the Int32 DataType. + /// + public static readonly NodeId Int32 = new NodeId(Opc.Ua.DataTypes.Int32); + + /// + /// The identifier for the UInt32 DataType. + /// + public static readonly NodeId UInt32 = new NodeId(Opc.Ua.DataTypes.UInt32); + + /// + /// The identifier for the Int64 DataType. + /// + public static readonly NodeId Int64 = new NodeId(Opc.Ua.DataTypes.Int64); + + /// + /// The identifier for the UInt64 DataType. + /// + public static readonly NodeId UInt64 = new NodeId(Opc.Ua.DataTypes.UInt64); + + /// + /// The identifier for the Float DataType. + /// + public static readonly NodeId Float = new NodeId(Opc.Ua.DataTypes.Float); + + /// + /// The identifier for the Double DataType. + /// + public static readonly NodeId Double = new NodeId(Opc.Ua.DataTypes.Double); + + /// + /// The identifier for the String DataType. + /// + public static readonly NodeId String = new NodeId(Opc.Ua.DataTypes.String); + + /// + /// The identifier for the DateTime DataType. + /// + public static readonly NodeId DateTime = new NodeId(Opc.Ua.DataTypes.DateTime); + + /// + /// The identifier for the Guid DataType. + /// + public static readonly NodeId Guid = new NodeId(Opc.Ua.DataTypes.Guid); + + /// + /// The identifier for the ByteString DataType. + /// + public static readonly NodeId ByteString = new NodeId(Opc.Ua.DataTypes.ByteString); + + /// + /// The identifier for the XmlElement DataType. + /// + public static readonly NodeId XmlElement = new NodeId(Opc.Ua.DataTypes.XmlElement); + + /// + /// The identifier for the NodeId DataType. + /// + public static readonly NodeId NodeId = new NodeId(Opc.Ua.DataTypes.NodeId); + + /// + /// The identifier for the ExpandedNodeId DataType. + /// + public static readonly NodeId ExpandedNodeId = new NodeId(Opc.Ua.DataTypes.ExpandedNodeId); + + /// + /// The identifier for the StatusCode DataType. + /// + public static readonly NodeId StatusCode = new NodeId(Opc.Ua.DataTypes.StatusCode); + + /// + /// The identifier for the QualifiedName DataType. + /// + public static readonly NodeId QualifiedName = new NodeId(Opc.Ua.DataTypes.QualifiedName); + + /// + /// The identifier for the LocalizedText DataType. + /// + public static readonly NodeId LocalizedText = new NodeId(Opc.Ua.DataTypes.LocalizedText); + + /// + /// The identifier for the Structure DataType. + /// + public static readonly NodeId Structure = new NodeId(Opc.Ua.DataTypes.Structure); + + /// + /// The identifier for the DataValue DataType. + /// + public static readonly NodeId DataValue = new NodeId(Opc.Ua.DataTypes.DataValue); + + /// + /// The identifier for the DiagnosticInfo DataType. + /// + public static readonly NodeId DiagnosticInfo = new NodeId(Opc.Ua.DataTypes.DiagnosticInfo); + + /// + /// The identifier for the Image DataType. + /// + public static readonly NodeId Image = new NodeId(Opc.Ua.DataTypes.Image); + + /// + /// The identifier for the Decimal DataType. + /// + public static readonly NodeId Decimal = new NodeId(Opc.Ua.DataTypes.Decimal); + + /// + /// The identifier for the NamingRuleType DataType. + /// + public static readonly NodeId NamingRuleType = new NodeId(Opc.Ua.DataTypes.NamingRuleType); + + /// + /// The identifier for the ImageBMP DataType. + /// + public static readonly NodeId ImageBMP = new NodeId(Opc.Ua.DataTypes.ImageBMP); + + /// + /// The identifier for the ImageGIF DataType. + /// + public static readonly NodeId ImageGIF = new NodeId(Opc.Ua.DataTypes.ImageGIF); + + /// + /// The identifier for the ImageJPG DataType. + /// + public static readonly NodeId ImageJPG = new NodeId(Opc.Ua.DataTypes.ImageJPG); + + /// + /// The identifier for the ImagePNG DataType. + /// + public static readonly NodeId ImagePNG = new NodeId(Opc.Ua.DataTypes.ImagePNG); + + /// + /// The identifier for the AudioDataType DataType. + /// + public static readonly NodeId AudioDataType = new NodeId(Opc.Ua.DataTypes.AudioDataType); + + /// + /// The identifier for the BitFieldMaskDataType DataType. + /// + public static readonly NodeId BitFieldMaskDataType = new NodeId(Opc.Ua.DataTypes.BitFieldMaskDataType); + + /// + /// The identifier for the KeyValuePair DataType. + /// + public static readonly NodeId KeyValuePair = new NodeId(Opc.Ua.DataTypes.KeyValuePair); + + /// + /// The identifier for the EndpointType DataType. + /// + public static readonly NodeId EndpointType = new NodeId(Opc.Ua.DataTypes.EndpointType); + + /// + /// The identifier for the RationalNumber DataType. + /// + public static readonly NodeId RationalNumber = new NodeId(Opc.Ua.DataTypes.RationalNumber); + + /// + /// The identifier for the Vector DataType. + /// + public static readonly NodeId Vector = new NodeId(Opc.Ua.DataTypes.Vector); + + /// + /// The identifier for the ThreeDVector DataType. + /// + public static readonly NodeId ThreeDVector = new NodeId(Opc.Ua.DataTypes.ThreeDVector); + + /// + /// The identifier for the CartesianCoordinates DataType. + /// + public static readonly NodeId CartesianCoordinates = new NodeId(Opc.Ua.DataTypes.CartesianCoordinates); + + /// + /// The identifier for the ThreeDCartesianCoordinates DataType. + /// + public static readonly NodeId ThreeDCartesianCoordinates = new NodeId(Opc.Ua.DataTypes.ThreeDCartesianCoordinates); + + /// + /// The identifier for the Orientation DataType. + /// + public static readonly NodeId Orientation = new NodeId(Opc.Ua.DataTypes.Orientation); + + /// + /// The identifier for the ThreeDOrientation DataType. + /// + public static readonly NodeId ThreeDOrientation = new NodeId(Opc.Ua.DataTypes.ThreeDOrientation); + + /// + /// The identifier for the Frame DataType. + /// + public static readonly NodeId Frame = new NodeId(Opc.Ua.DataTypes.Frame); + + /// + /// The identifier for the ThreeDFrame DataType. + /// + public static readonly NodeId ThreeDFrame = new NodeId(Opc.Ua.DataTypes.ThreeDFrame); + + /// + /// The identifier for the OpenFileMode DataType. + /// + public static readonly NodeId OpenFileMode = new NodeId(Opc.Ua.DataTypes.OpenFileMode); + + /// + /// The identifier for the IdentityCriteriaType DataType. + /// + public static readonly NodeId IdentityCriteriaType = new NodeId(Opc.Ua.DataTypes.IdentityCriteriaType); + + /// + /// The identifier for the IdentityMappingRuleType DataType. + /// + public static readonly NodeId IdentityMappingRuleType = new NodeId(Opc.Ua.DataTypes.IdentityMappingRuleType); + + /// + /// The identifier for the CurrencyUnitType DataType. + /// + public static readonly NodeId CurrencyUnitType = new NodeId(Opc.Ua.DataTypes.CurrencyUnitType); + + /// + /// The identifier for the TrustListMasks DataType. + /// + public static readonly NodeId TrustListMasks = new NodeId(Opc.Ua.DataTypes.TrustListMasks); + + /// + /// The identifier for the TrustListDataType DataType. + /// + public static readonly NodeId TrustListDataType = new NodeId(Opc.Ua.DataTypes.TrustListDataType); + + /// + /// The identifier for the DecimalDataType DataType. + /// + public static readonly NodeId DecimalDataType = new NodeId(Opc.Ua.DataTypes.DecimalDataType); + + /// + /// The identifier for the DataTypeSchemaHeader DataType. + /// + public static readonly NodeId DataTypeSchemaHeader = new NodeId(Opc.Ua.DataTypes.DataTypeSchemaHeader); + + /// + /// The identifier for the DataTypeDescription DataType. + /// + public static readonly NodeId DataTypeDescription = new NodeId(Opc.Ua.DataTypes.DataTypeDescription); + + /// + /// The identifier for the StructureDescription DataType. + /// + public static readonly NodeId StructureDescription = new NodeId(Opc.Ua.DataTypes.StructureDescription); + + /// + /// The identifier for the EnumDescription DataType. + /// + public static readonly NodeId EnumDescription = new NodeId(Opc.Ua.DataTypes.EnumDescription); + + /// + /// The identifier for the SimpleTypeDescription DataType. + /// + public static readonly NodeId SimpleTypeDescription = new NodeId(Opc.Ua.DataTypes.SimpleTypeDescription); + + /// + /// The identifier for the UABinaryFileDataType DataType. + /// + public static readonly NodeId UABinaryFileDataType = new NodeId(Opc.Ua.DataTypes.UABinaryFileDataType); + + /// + /// The identifier for the PubSubState DataType. + /// + public static readonly NodeId PubSubState = new NodeId(Opc.Ua.DataTypes.PubSubState); + + /// + /// The identifier for the DataSetMetaDataType DataType. + /// + public static readonly NodeId DataSetMetaDataType = new NodeId(Opc.Ua.DataTypes.DataSetMetaDataType); + + /// + /// The identifier for the FieldMetaData DataType. + /// + public static readonly NodeId FieldMetaData = new NodeId(Opc.Ua.DataTypes.FieldMetaData); + + /// + /// The identifier for the DataSetFieldFlags DataType. + /// + public static readonly NodeId DataSetFieldFlags = new NodeId(Opc.Ua.DataTypes.DataSetFieldFlags); + + /// + /// The identifier for the ConfigurationVersionDataType DataType. + /// + public static readonly NodeId ConfigurationVersionDataType = new NodeId(Opc.Ua.DataTypes.ConfigurationVersionDataType); + + /// + /// The identifier for the PublishedDataSetDataType DataType. + /// + public static readonly NodeId PublishedDataSetDataType = new NodeId(Opc.Ua.DataTypes.PublishedDataSetDataType); + + /// + /// The identifier for the PublishedDataSetSourceDataType DataType. + /// + public static readonly NodeId PublishedDataSetSourceDataType = new NodeId(Opc.Ua.DataTypes.PublishedDataSetSourceDataType); + + /// + /// The identifier for the PublishedVariableDataType DataType. + /// + public static readonly NodeId PublishedVariableDataType = new NodeId(Opc.Ua.DataTypes.PublishedVariableDataType); + + /// + /// The identifier for the PublishedDataItemsDataType DataType. + /// + public static readonly NodeId PublishedDataItemsDataType = new NodeId(Opc.Ua.DataTypes.PublishedDataItemsDataType); + + /// + /// The identifier for the PublishedEventsDataType DataType. + /// + public static readonly NodeId PublishedEventsDataType = new NodeId(Opc.Ua.DataTypes.PublishedEventsDataType); + + /// + /// The identifier for the DataSetFieldContentMask DataType. + /// + public static readonly NodeId DataSetFieldContentMask = new NodeId(Opc.Ua.DataTypes.DataSetFieldContentMask); + + /// + /// The identifier for the DataSetWriterDataType DataType. + /// + public static readonly NodeId DataSetWriterDataType = new NodeId(Opc.Ua.DataTypes.DataSetWriterDataType); + + /// + /// The identifier for the DataSetWriterTransportDataType DataType. + /// + public static readonly NodeId DataSetWriterTransportDataType = new NodeId(Opc.Ua.DataTypes.DataSetWriterTransportDataType); + + /// + /// The identifier for the DataSetWriterMessageDataType DataType. + /// + public static readonly NodeId DataSetWriterMessageDataType = new NodeId(Opc.Ua.DataTypes.DataSetWriterMessageDataType); + + /// + /// The identifier for the PubSubGroupDataType DataType. + /// + public static readonly NodeId PubSubGroupDataType = new NodeId(Opc.Ua.DataTypes.PubSubGroupDataType); + + /// + /// The identifier for the WriterGroupDataType DataType. + /// + public static readonly NodeId WriterGroupDataType = new NodeId(Opc.Ua.DataTypes.WriterGroupDataType); + + /// + /// The identifier for the WriterGroupTransportDataType DataType. + /// + public static readonly NodeId WriterGroupTransportDataType = new NodeId(Opc.Ua.DataTypes.WriterGroupTransportDataType); + + /// + /// The identifier for the WriterGroupMessageDataType DataType. + /// + public static readonly NodeId WriterGroupMessageDataType = new NodeId(Opc.Ua.DataTypes.WriterGroupMessageDataType); + + /// + /// The identifier for the PubSubConnectionDataType DataType. + /// + public static readonly NodeId PubSubConnectionDataType = new NodeId(Opc.Ua.DataTypes.PubSubConnectionDataType); + + /// + /// The identifier for the ConnectionTransportDataType DataType. + /// + public static readonly NodeId ConnectionTransportDataType = new NodeId(Opc.Ua.DataTypes.ConnectionTransportDataType); + + /// + /// The identifier for the NetworkAddressDataType DataType. + /// + public static readonly NodeId NetworkAddressDataType = new NodeId(Opc.Ua.DataTypes.NetworkAddressDataType); + + /// + /// The identifier for the NetworkAddressUrlDataType DataType. + /// + public static readonly NodeId NetworkAddressUrlDataType = new NodeId(Opc.Ua.DataTypes.NetworkAddressUrlDataType); + + /// + /// The identifier for the ReaderGroupDataType DataType. + /// + public static readonly NodeId ReaderGroupDataType = new NodeId(Opc.Ua.DataTypes.ReaderGroupDataType); + + /// + /// The identifier for the ReaderGroupTransportDataType DataType. + /// + public static readonly NodeId ReaderGroupTransportDataType = new NodeId(Opc.Ua.DataTypes.ReaderGroupTransportDataType); + + /// + /// The identifier for the ReaderGroupMessageDataType DataType. + /// + public static readonly NodeId ReaderGroupMessageDataType = new NodeId(Opc.Ua.DataTypes.ReaderGroupMessageDataType); + + /// + /// The identifier for the DataSetReaderDataType DataType. + /// + public static readonly NodeId DataSetReaderDataType = new NodeId(Opc.Ua.DataTypes.DataSetReaderDataType); + + /// + /// The identifier for the DataSetReaderTransportDataType DataType. + /// + public static readonly NodeId DataSetReaderTransportDataType = new NodeId(Opc.Ua.DataTypes.DataSetReaderTransportDataType); + + /// + /// The identifier for the DataSetReaderMessageDataType DataType. + /// + public static readonly NodeId DataSetReaderMessageDataType = new NodeId(Opc.Ua.DataTypes.DataSetReaderMessageDataType); + + /// + /// The identifier for the SubscribedDataSetDataType DataType. + /// + public static readonly NodeId SubscribedDataSetDataType = new NodeId(Opc.Ua.DataTypes.SubscribedDataSetDataType); + + /// + /// The identifier for the TargetVariablesDataType DataType. + /// + public static readonly NodeId TargetVariablesDataType = new NodeId(Opc.Ua.DataTypes.TargetVariablesDataType); + + /// + /// The identifier for the FieldTargetDataType DataType. + /// + public static readonly NodeId FieldTargetDataType = new NodeId(Opc.Ua.DataTypes.FieldTargetDataType); + + /// + /// The identifier for the OverrideValueHandling DataType. + /// + public static readonly NodeId OverrideValueHandling = new NodeId(Opc.Ua.DataTypes.OverrideValueHandling); + + /// + /// The identifier for the SubscribedDataSetMirrorDataType DataType. + /// + public static readonly NodeId SubscribedDataSetMirrorDataType = new NodeId(Opc.Ua.DataTypes.SubscribedDataSetMirrorDataType); + + /// + /// The identifier for the PubSubConfigurationDataType DataType. + /// + public static readonly NodeId PubSubConfigurationDataType = new NodeId(Opc.Ua.DataTypes.PubSubConfigurationDataType); + + /// + /// The identifier for the DataSetOrderingType DataType. + /// + public static readonly NodeId DataSetOrderingType = new NodeId(Opc.Ua.DataTypes.DataSetOrderingType); + + /// + /// The identifier for the UadpNetworkMessageContentMask DataType. + /// + public static readonly NodeId UadpNetworkMessageContentMask = new NodeId(Opc.Ua.DataTypes.UadpNetworkMessageContentMask); + + /// + /// The identifier for the UadpWriterGroupMessageDataType DataType. + /// + public static readonly NodeId UadpWriterGroupMessageDataType = new NodeId(Opc.Ua.DataTypes.UadpWriterGroupMessageDataType); + + /// + /// The identifier for the UadpDataSetMessageContentMask DataType. + /// + public static readonly NodeId UadpDataSetMessageContentMask = new NodeId(Opc.Ua.DataTypes.UadpDataSetMessageContentMask); + + /// + /// The identifier for the UadpDataSetWriterMessageDataType DataType. + /// + public static readonly NodeId UadpDataSetWriterMessageDataType = new NodeId(Opc.Ua.DataTypes.UadpDataSetWriterMessageDataType); + + /// + /// The identifier for the UadpDataSetReaderMessageDataType DataType. + /// + public static readonly NodeId UadpDataSetReaderMessageDataType = new NodeId(Opc.Ua.DataTypes.UadpDataSetReaderMessageDataType); + + /// + /// The identifier for the JsonNetworkMessageContentMask DataType. + /// + public static readonly NodeId JsonNetworkMessageContentMask = new NodeId(Opc.Ua.DataTypes.JsonNetworkMessageContentMask); + + /// + /// The identifier for the JsonWriterGroupMessageDataType DataType. + /// + public static readonly NodeId JsonWriterGroupMessageDataType = new NodeId(Opc.Ua.DataTypes.JsonWriterGroupMessageDataType); + + /// + /// The identifier for the JsonDataSetMessageContentMask DataType. + /// + public static readonly NodeId JsonDataSetMessageContentMask = new NodeId(Opc.Ua.DataTypes.JsonDataSetMessageContentMask); + + /// + /// The identifier for the JsonDataSetWriterMessageDataType DataType. + /// + public static readonly NodeId JsonDataSetWriterMessageDataType = new NodeId(Opc.Ua.DataTypes.JsonDataSetWriterMessageDataType); + + /// + /// The identifier for the JsonDataSetReaderMessageDataType DataType. + /// + public static readonly NodeId JsonDataSetReaderMessageDataType = new NodeId(Opc.Ua.DataTypes.JsonDataSetReaderMessageDataType); + + /// + /// The identifier for the DatagramConnectionTransportDataType DataType. + /// + public static readonly NodeId DatagramConnectionTransportDataType = new NodeId(Opc.Ua.DataTypes.DatagramConnectionTransportDataType); + + /// + /// The identifier for the DatagramWriterGroupTransportDataType DataType. + /// + public static readonly NodeId DatagramWriterGroupTransportDataType = new NodeId(Opc.Ua.DataTypes.DatagramWriterGroupTransportDataType); + + /// + /// The identifier for the BrokerConnectionTransportDataType DataType. + /// + public static readonly NodeId BrokerConnectionTransportDataType = new NodeId(Opc.Ua.DataTypes.BrokerConnectionTransportDataType); + + /// + /// The identifier for the BrokerTransportQualityOfService DataType. + /// + public static readonly NodeId BrokerTransportQualityOfService = new NodeId(Opc.Ua.DataTypes.BrokerTransportQualityOfService); + + /// + /// The identifier for the BrokerWriterGroupTransportDataType DataType. + /// + public static readonly NodeId BrokerWriterGroupTransportDataType = new NodeId(Opc.Ua.DataTypes.BrokerWriterGroupTransportDataType); + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType DataType. + /// + public static readonly NodeId BrokerDataSetWriterTransportDataType = new NodeId(Opc.Ua.DataTypes.BrokerDataSetWriterTransportDataType); + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType DataType. + /// + public static readonly NodeId BrokerDataSetReaderTransportDataType = new NodeId(Opc.Ua.DataTypes.BrokerDataSetReaderTransportDataType); + + /// + /// The identifier for the DiagnosticsLevel DataType. + /// + public static readonly NodeId DiagnosticsLevel = new NodeId(Opc.Ua.DataTypes.DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsCounterClassification DataType. + /// + public static readonly NodeId PubSubDiagnosticsCounterClassification = new NodeId(Opc.Ua.DataTypes.PubSubDiagnosticsCounterClassification); + + /// + /// The identifier for the AliasNameDataType DataType. + /// + public static readonly NodeId AliasNameDataType = new NodeId(Opc.Ua.DataTypes.AliasNameDataType); + + /// + /// The identifier for the IdType DataType. + /// + public static readonly NodeId IdType = new NodeId(Opc.Ua.DataTypes.IdType); + + /// + /// The identifier for the NodeClass DataType. + /// + public static readonly NodeId NodeClass = new NodeId(Opc.Ua.DataTypes.NodeClass); + + /// + /// The identifier for the PermissionType DataType. + /// + public static readonly NodeId PermissionType = new NodeId(Opc.Ua.DataTypes.PermissionType); + + /// + /// The identifier for the AccessLevelType DataType. + /// + public static readonly NodeId AccessLevelType = new NodeId(Opc.Ua.DataTypes.AccessLevelType); + + /// + /// The identifier for the AccessLevelExType DataType. + /// + public static readonly NodeId AccessLevelExType = new NodeId(Opc.Ua.DataTypes.AccessLevelExType); + + /// + /// The identifier for the EventNotifierType DataType. + /// + public static readonly NodeId EventNotifierType = new NodeId(Opc.Ua.DataTypes.EventNotifierType); + + /// + /// The identifier for the AccessRestrictionType DataType. + /// + public static readonly NodeId AccessRestrictionType = new NodeId(Opc.Ua.DataTypes.AccessRestrictionType); + + /// + /// The identifier for the RolePermissionType DataType. + /// + public static readonly NodeId RolePermissionType = new NodeId(Opc.Ua.DataTypes.RolePermissionType); + + /// + /// The identifier for the DataTypeDefinition DataType. + /// + public static readonly NodeId DataTypeDefinition = new NodeId(Opc.Ua.DataTypes.DataTypeDefinition); + + /// + /// The identifier for the StructureType DataType. + /// + public static readonly NodeId StructureType = new NodeId(Opc.Ua.DataTypes.StructureType); + + /// + /// The identifier for the StructureField DataType. + /// + public static readonly NodeId StructureField = new NodeId(Opc.Ua.DataTypes.StructureField); + + /// + /// The identifier for the StructureDefinition DataType. + /// + public static readonly NodeId StructureDefinition = new NodeId(Opc.Ua.DataTypes.StructureDefinition); + + /// + /// The identifier for the EnumDefinition DataType. + /// + public static readonly NodeId EnumDefinition = new NodeId(Opc.Ua.DataTypes.EnumDefinition); + + /// + /// The identifier for the Node DataType. + /// + public static readonly NodeId Node = new NodeId(Opc.Ua.DataTypes.Node); + + /// + /// The identifier for the InstanceNode DataType. + /// + public static readonly NodeId InstanceNode = new NodeId(Opc.Ua.DataTypes.InstanceNode); + + /// + /// The identifier for the TypeNode DataType. + /// + public static readonly NodeId TypeNode = new NodeId(Opc.Ua.DataTypes.TypeNode); + + /// + /// The identifier for the ObjectNode DataType. + /// + public static readonly NodeId ObjectNode = new NodeId(Opc.Ua.DataTypes.ObjectNode); + + /// + /// The identifier for the ObjectTypeNode DataType. + /// + public static readonly NodeId ObjectTypeNode = new NodeId(Opc.Ua.DataTypes.ObjectTypeNode); + + /// + /// The identifier for the VariableNode DataType. + /// + public static readonly NodeId VariableNode = new NodeId(Opc.Ua.DataTypes.VariableNode); + + /// + /// The identifier for the VariableTypeNode DataType. + /// + public static readonly NodeId VariableTypeNode = new NodeId(Opc.Ua.DataTypes.VariableTypeNode); + + /// + /// The identifier for the ReferenceTypeNode DataType. + /// + public static readonly NodeId ReferenceTypeNode = new NodeId(Opc.Ua.DataTypes.ReferenceTypeNode); + + /// + /// The identifier for the MethodNode DataType. + /// + public static readonly NodeId MethodNode = new NodeId(Opc.Ua.DataTypes.MethodNode); + + /// + /// The identifier for the ViewNode DataType. + /// + public static readonly NodeId ViewNode = new NodeId(Opc.Ua.DataTypes.ViewNode); + + /// + /// The identifier for the DataTypeNode DataType. + /// + public static readonly NodeId DataTypeNode = new NodeId(Opc.Ua.DataTypes.DataTypeNode); + + /// + /// The identifier for the ReferenceNode DataType. + /// + public static readonly NodeId ReferenceNode = new NodeId(Opc.Ua.DataTypes.ReferenceNode); + + /// + /// The identifier for the Argument DataType. + /// + public static readonly NodeId Argument = new NodeId(Opc.Ua.DataTypes.Argument); + + /// + /// The identifier for the EnumValueType DataType. + /// + public static readonly NodeId EnumValueType = new NodeId(Opc.Ua.DataTypes.EnumValueType); + + /// + /// The identifier for the EnumField DataType. + /// + public static readonly NodeId EnumField = new NodeId(Opc.Ua.DataTypes.EnumField); + + /// + /// The identifier for the OptionSet DataType. + /// + public static readonly NodeId OptionSet = new NodeId(Opc.Ua.DataTypes.OptionSet); + + /// + /// The identifier for the Union DataType. + /// + public static readonly NodeId Union = new NodeId(Opc.Ua.DataTypes.Union); + + /// + /// The identifier for the NormalizedString DataType. + /// + public static readonly NodeId NormalizedString = new NodeId(Opc.Ua.DataTypes.NormalizedString); + + /// + /// The identifier for the DecimalString DataType. + /// + public static readonly NodeId DecimalString = new NodeId(Opc.Ua.DataTypes.DecimalString); + + /// + /// The identifier for the DurationString DataType. + /// + public static readonly NodeId DurationString = new NodeId(Opc.Ua.DataTypes.DurationString); + + /// + /// The identifier for the TimeString DataType. + /// + public static readonly NodeId TimeString = new NodeId(Opc.Ua.DataTypes.TimeString); + + /// + /// The identifier for the DateString DataType. + /// + public static readonly NodeId DateString = new NodeId(Opc.Ua.DataTypes.DateString); + + /// + /// The identifier for the Duration DataType. + /// + public static readonly NodeId Duration = new NodeId(Opc.Ua.DataTypes.Duration); + + /// + /// The identifier for the UtcTime DataType. + /// + public static readonly NodeId UtcTime = new NodeId(Opc.Ua.DataTypes.UtcTime); + + /// + /// The identifier for the LocaleId DataType. + /// + public static readonly NodeId LocaleId = new NodeId(Opc.Ua.DataTypes.LocaleId); + + /// + /// The identifier for the TimeZoneDataType DataType. + /// + public static readonly NodeId TimeZoneDataType = new NodeId(Opc.Ua.DataTypes.TimeZoneDataType); + + /// + /// The identifier for the Index DataType. + /// + public static readonly NodeId Index = new NodeId(Opc.Ua.DataTypes.Index); + + /// + /// The identifier for the IntegerId DataType. + /// + public static readonly NodeId IntegerId = new NodeId(Opc.Ua.DataTypes.IntegerId); + + /// + /// The identifier for the ApplicationType DataType. + /// + public static readonly NodeId ApplicationType = new NodeId(Opc.Ua.DataTypes.ApplicationType); + + /// + /// The identifier for the ApplicationDescription DataType. + /// + public static readonly NodeId ApplicationDescription = new NodeId(Opc.Ua.DataTypes.ApplicationDescription); + + /// + /// The identifier for the RequestHeader DataType. + /// + public static readonly NodeId RequestHeader = new NodeId(Opc.Ua.DataTypes.RequestHeader); + + /// + /// The identifier for the ResponseHeader DataType. + /// + public static readonly NodeId ResponseHeader = new NodeId(Opc.Ua.DataTypes.ResponseHeader); + + /// + /// The identifier for the VersionTime DataType. + /// + public static readonly NodeId VersionTime = new NodeId(Opc.Ua.DataTypes.VersionTime); + + /// + /// The identifier for the ServiceFault DataType. + /// + public static readonly NodeId ServiceFault = new NodeId(Opc.Ua.DataTypes.ServiceFault); + + /// + /// The identifier for the SessionlessInvokeRequestType DataType. + /// + public static readonly NodeId SessionlessInvokeRequestType = new NodeId(Opc.Ua.DataTypes.SessionlessInvokeRequestType); + + /// + /// The identifier for the SessionlessInvokeResponseType DataType. + /// + public static readonly NodeId SessionlessInvokeResponseType = new NodeId(Opc.Ua.DataTypes.SessionlessInvokeResponseType); + + /// + /// The identifier for the FindServersRequest DataType. + /// + public static readonly NodeId FindServersRequest = new NodeId(Opc.Ua.DataTypes.FindServersRequest); + + /// + /// The identifier for the FindServersResponse DataType. + /// + public static readonly NodeId FindServersResponse = new NodeId(Opc.Ua.DataTypes.FindServersResponse); + + /// + /// The identifier for the ServerOnNetwork DataType. + /// + public static readonly NodeId ServerOnNetwork = new NodeId(Opc.Ua.DataTypes.ServerOnNetwork); + + /// + /// The identifier for the FindServersOnNetworkRequest DataType. + /// + public static readonly NodeId FindServersOnNetworkRequest = new NodeId(Opc.Ua.DataTypes.FindServersOnNetworkRequest); + + /// + /// The identifier for the FindServersOnNetworkResponse DataType. + /// + public static readonly NodeId FindServersOnNetworkResponse = new NodeId(Opc.Ua.DataTypes.FindServersOnNetworkResponse); + + /// + /// The identifier for the ApplicationInstanceCertificate DataType. + /// + public static readonly NodeId ApplicationInstanceCertificate = new NodeId(Opc.Ua.DataTypes.ApplicationInstanceCertificate); + + /// + /// The identifier for the MessageSecurityMode DataType. + /// + public static readonly NodeId MessageSecurityMode = new NodeId(Opc.Ua.DataTypes.MessageSecurityMode); + + /// + /// The identifier for the UserTokenType DataType. + /// + public static readonly NodeId UserTokenType = new NodeId(Opc.Ua.DataTypes.UserTokenType); + + /// + /// The identifier for the UserTokenPolicy DataType. + /// + public static readonly NodeId UserTokenPolicy = new NodeId(Opc.Ua.DataTypes.UserTokenPolicy); + + /// + /// The identifier for the EndpointDescription DataType. + /// + public static readonly NodeId EndpointDescription = new NodeId(Opc.Ua.DataTypes.EndpointDescription); + + /// + /// The identifier for the GetEndpointsRequest DataType. + /// + public static readonly NodeId GetEndpointsRequest = new NodeId(Opc.Ua.DataTypes.GetEndpointsRequest); + + /// + /// The identifier for the GetEndpointsResponse DataType. + /// + public static readonly NodeId GetEndpointsResponse = new NodeId(Opc.Ua.DataTypes.GetEndpointsResponse); + + /// + /// The identifier for the RegisteredServer DataType. + /// + public static readonly NodeId RegisteredServer = new NodeId(Opc.Ua.DataTypes.RegisteredServer); + + /// + /// The identifier for the RegisterServerRequest DataType. + /// + public static readonly NodeId RegisterServerRequest = new NodeId(Opc.Ua.DataTypes.RegisterServerRequest); + + /// + /// The identifier for the RegisterServerResponse DataType. + /// + public static readonly NodeId RegisterServerResponse = new NodeId(Opc.Ua.DataTypes.RegisterServerResponse); + + /// + /// The identifier for the DiscoveryConfiguration DataType. + /// + public static readonly NodeId DiscoveryConfiguration = new NodeId(Opc.Ua.DataTypes.DiscoveryConfiguration); + + /// + /// The identifier for the MdnsDiscoveryConfiguration DataType. + /// + public static readonly NodeId MdnsDiscoveryConfiguration = new NodeId(Opc.Ua.DataTypes.MdnsDiscoveryConfiguration); + + /// + /// The identifier for the RegisterServer2Request DataType. + /// + public static readonly NodeId RegisterServer2Request = new NodeId(Opc.Ua.DataTypes.RegisterServer2Request); + + /// + /// The identifier for the RegisterServer2Response DataType. + /// + public static readonly NodeId RegisterServer2Response = new NodeId(Opc.Ua.DataTypes.RegisterServer2Response); + + /// + /// The identifier for the SecurityTokenRequestType DataType. + /// + public static readonly NodeId SecurityTokenRequestType = new NodeId(Opc.Ua.DataTypes.SecurityTokenRequestType); + + /// + /// The identifier for the ChannelSecurityToken DataType. + /// + public static readonly NodeId ChannelSecurityToken = new NodeId(Opc.Ua.DataTypes.ChannelSecurityToken); + + /// + /// The identifier for the OpenSecureChannelRequest DataType. + /// + public static readonly NodeId OpenSecureChannelRequest = new NodeId(Opc.Ua.DataTypes.OpenSecureChannelRequest); + + /// + /// The identifier for the OpenSecureChannelResponse DataType. + /// + public static readonly NodeId OpenSecureChannelResponse = new NodeId(Opc.Ua.DataTypes.OpenSecureChannelResponse); + + /// + /// The identifier for the CloseSecureChannelRequest DataType. + /// + public static readonly NodeId CloseSecureChannelRequest = new NodeId(Opc.Ua.DataTypes.CloseSecureChannelRequest); + + /// + /// The identifier for the CloseSecureChannelResponse DataType. + /// + public static readonly NodeId CloseSecureChannelResponse = new NodeId(Opc.Ua.DataTypes.CloseSecureChannelResponse); + + /// + /// The identifier for the SignedSoftwareCertificate DataType. + /// + public static readonly NodeId SignedSoftwareCertificate = new NodeId(Opc.Ua.DataTypes.SignedSoftwareCertificate); + + /// + /// The identifier for the SessionAuthenticationToken DataType. + /// + public static readonly NodeId SessionAuthenticationToken = new NodeId(Opc.Ua.DataTypes.SessionAuthenticationToken); + + /// + /// The identifier for the SignatureData DataType. + /// + public static readonly NodeId SignatureData = new NodeId(Opc.Ua.DataTypes.SignatureData); + + /// + /// The identifier for the CreateSessionRequest DataType. + /// + public static readonly NodeId CreateSessionRequest = new NodeId(Opc.Ua.DataTypes.CreateSessionRequest); + + /// + /// The identifier for the CreateSessionResponse DataType. + /// + public static readonly NodeId CreateSessionResponse = new NodeId(Opc.Ua.DataTypes.CreateSessionResponse); + + /// + /// The identifier for the UserIdentityToken DataType. + /// + public static readonly NodeId UserIdentityToken = new NodeId(Opc.Ua.DataTypes.UserIdentityToken); + + /// + /// The identifier for the AnonymousIdentityToken DataType. + /// + public static readonly NodeId AnonymousIdentityToken = new NodeId(Opc.Ua.DataTypes.AnonymousIdentityToken); + + /// + /// The identifier for the UserNameIdentityToken DataType. + /// + public static readonly NodeId UserNameIdentityToken = new NodeId(Opc.Ua.DataTypes.UserNameIdentityToken); + + /// + /// The identifier for the X509IdentityToken DataType. + /// + public static readonly NodeId X509IdentityToken = new NodeId(Opc.Ua.DataTypes.X509IdentityToken); + + /// + /// The identifier for the IssuedIdentityToken DataType. + /// + public static readonly NodeId IssuedIdentityToken = new NodeId(Opc.Ua.DataTypes.IssuedIdentityToken); + + /// + /// The identifier for the RsaEncryptedSecret DataType. + /// + public static readonly NodeId RsaEncryptedSecret = new NodeId(Opc.Ua.DataTypes.RsaEncryptedSecret); + + /// + /// The identifier for the ActivateSessionRequest DataType. + /// + public static readonly NodeId ActivateSessionRequest = new NodeId(Opc.Ua.DataTypes.ActivateSessionRequest); + + /// + /// The identifier for the ActivateSessionResponse DataType. + /// + public static readonly NodeId ActivateSessionResponse = new NodeId(Opc.Ua.DataTypes.ActivateSessionResponse); + + /// + /// The identifier for the CloseSessionRequest DataType. + /// + public static readonly NodeId CloseSessionRequest = new NodeId(Opc.Ua.DataTypes.CloseSessionRequest); + + /// + /// The identifier for the CloseSessionResponse DataType. + /// + public static readonly NodeId CloseSessionResponse = new NodeId(Opc.Ua.DataTypes.CloseSessionResponse); + + /// + /// The identifier for the CancelRequest DataType. + /// + public static readonly NodeId CancelRequest = new NodeId(Opc.Ua.DataTypes.CancelRequest); + + /// + /// The identifier for the CancelResponse DataType. + /// + public static readonly NodeId CancelResponse = new NodeId(Opc.Ua.DataTypes.CancelResponse); + + /// + /// The identifier for the NodeAttributesMask DataType. + /// + public static readonly NodeId NodeAttributesMask = new NodeId(Opc.Ua.DataTypes.NodeAttributesMask); + + /// + /// The identifier for the NodeAttributes DataType. + /// + public static readonly NodeId NodeAttributes = new NodeId(Opc.Ua.DataTypes.NodeAttributes); + + /// + /// The identifier for the ObjectAttributes DataType. + /// + public static readonly NodeId ObjectAttributes = new NodeId(Opc.Ua.DataTypes.ObjectAttributes); + + /// + /// The identifier for the VariableAttributes DataType. + /// + public static readonly NodeId VariableAttributes = new NodeId(Opc.Ua.DataTypes.VariableAttributes); + + /// + /// The identifier for the MethodAttributes DataType. + /// + public static readonly NodeId MethodAttributes = new NodeId(Opc.Ua.DataTypes.MethodAttributes); + + /// + /// The identifier for the ObjectTypeAttributes DataType. + /// + public static readonly NodeId ObjectTypeAttributes = new NodeId(Opc.Ua.DataTypes.ObjectTypeAttributes); + + /// + /// The identifier for the VariableTypeAttributes DataType. + /// + public static readonly NodeId VariableTypeAttributes = new NodeId(Opc.Ua.DataTypes.VariableTypeAttributes); + + /// + /// The identifier for the ReferenceTypeAttributes DataType. + /// + public static readonly NodeId ReferenceTypeAttributes = new NodeId(Opc.Ua.DataTypes.ReferenceTypeAttributes); + + /// + /// The identifier for the DataTypeAttributes DataType. + /// + public static readonly NodeId DataTypeAttributes = new NodeId(Opc.Ua.DataTypes.DataTypeAttributes); + + /// + /// The identifier for the ViewAttributes DataType. + /// + public static readonly NodeId ViewAttributes = new NodeId(Opc.Ua.DataTypes.ViewAttributes); + + /// + /// The identifier for the GenericAttributeValue DataType. + /// + public static readonly NodeId GenericAttributeValue = new NodeId(Opc.Ua.DataTypes.GenericAttributeValue); + + /// + /// The identifier for the GenericAttributes DataType. + /// + public static readonly NodeId GenericAttributes = new NodeId(Opc.Ua.DataTypes.GenericAttributes); + + /// + /// The identifier for the AddNodesItem DataType. + /// + public static readonly NodeId AddNodesItem = new NodeId(Opc.Ua.DataTypes.AddNodesItem); + + /// + /// The identifier for the AddNodesResult DataType. + /// + public static readonly NodeId AddNodesResult = new NodeId(Opc.Ua.DataTypes.AddNodesResult); + + /// + /// The identifier for the AddNodesRequest DataType. + /// + public static readonly NodeId AddNodesRequest = new NodeId(Opc.Ua.DataTypes.AddNodesRequest); + + /// + /// The identifier for the AddNodesResponse DataType. + /// + public static readonly NodeId AddNodesResponse = new NodeId(Opc.Ua.DataTypes.AddNodesResponse); + + /// + /// The identifier for the AddReferencesItem DataType. + /// + public static readonly NodeId AddReferencesItem = new NodeId(Opc.Ua.DataTypes.AddReferencesItem); + + /// + /// The identifier for the AddReferencesRequest DataType. + /// + public static readonly NodeId AddReferencesRequest = new NodeId(Opc.Ua.DataTypes.AddReferencesRequest); + + /// + /// The identifier for the AddReferencesResponse DataType. + /// + public static readonly NodeId AddReferencesResponse = new NodeId(Opc.Ua.DataTypes.AddReferencesResponse); + + /// + /// The identifier for the DeleteNodesItem DataType. + /// + public static readonly NodeId DeleteNodesItem = new NodeId(Opc.Ua.DataTypes.DeleteNodesItem); + + /// + /// The identifier for the DeleteNodesRequest DataType. + /// + public static readonly NodeId DeleteNodesRequest = new NodeId(Opc.Ua.DataTypes.DeleteNodesRequest); + + /// + /// The identifier for the DeleteNodesResponse DataType. + /// + public static readonly NodeId DeleteNodesResponse = new NodeId(Opc.Ua.DataTypes.DeleteNodesResponse); + + /// + /// The identifier for the DeleteReferencesItem DataType. + /// + public static readonly NodeId DeleteReferencesItem = new NodeId(Opc.Ua.DataTypes.DeleteReferencesItem); + + /// + /// The identifier for the DeleteReferencesRequest DataType. + /// + public static readonly NodeId DeleteReferencesRequest = new NodeId(Opc.Ua.DataTypes.DeleteReferencesRequest); + + /// + /// The identifier for the DeleteReferencesResponse DataType. + /// + public static readonly NodeId DeleteReferencesResponse = new NodeId(Opc.Ua.DataTypes.DeleteReferencesResponse); + + /// + /// The identifier for the AttributeWriteMask DataType. + /// + public static readonly NodeId AttributeWriteMask = new NodeId(Opc.Ua.DataTypes.AttributeWriteMask); + + /// + /// The identifier for the BrowseDirection DataType. + /// + public static readonly NodeId BrowseDirection = new NodeId(Opc.Ua.DataTypes.BrowseDirection); + + /// + /// The identifier for the ViewDescription DataType. + /// + public static readonly NodeId ViewDescription = new NodeId(Opc.Ua.DataTypes.ViewDescription); + + /// + /// The identifier for the BrowseDescription DataType. + /// + public static readonly NodeId BrowseDescription = new NodeId(Opc.Ua.DataTypes.BrowseDescription); + + /// + /// The identifier for the BrowseResultMask DataType. + /// + public static readonly NodeId BrowseResultMask = new NodeId(Opc.Ua.DataTypes.BrowseResultMask); + + /// + /// The identifier for the ReferenceDescription DataType. + /// + public static readonly NodeId ReferenceDescription = new NodeId(Opc.Ua.DataTypes.ReferenceDescription); + + /// + /// The identifier for the ContinuationPoint DataType. + /// + public static readonly NodeId ContinuationPoint = new NodeId(Opc.Ua.DataTypes.ContinuationPoint); + + /// + /// The identifier for the BrowseResult DataType. + /// + public static readonly NodeId BrowseResult = new NodeId(Opc.Ua.DataTypes.BrowseResult); + + /// + /// The identifier for the BrowseRequest DataType. + /// + public static readonly NodeId BrowseRequest = new NodeId(Opc.Ua.DataTypes.BrowseRequest); + + /// + /// The identifier for the BrowseResponse DataType. + /// + public static readonly NodeId BrowseResponse = new NodeId(Opc.Ua.DataTypes.BrowseResponse); + + /// + /// The identifier for the BrowseNextRequest DataType. + /// + public static readonly NodeId BrowseNextRequest = new NodeId(Opc.Ua.DataTypes.BrowseNextRequest); + + /// + /// The identifier for the BrowseNextResponse DataType. + /// + public static readonly NodeId BrowseNextResponse = new NodeId(Opc.Ua.DataTypes.BrowseNextResponse); + + /// + /// The identifier for the RelativePathElement DataType. + /// + public static readonly NodeId RelativePathElement = new NodeId(Opc.Ua.DataTypes.RelativePathElement); + + /// + /// The identifier for the RelativePath DataType. + /// + public static readonly NodeId RelativePath = new NodeId(Opc.Ua.DataTypes.RelativePath); + + /// + /// The identifier for the BrowsePath DataType. + /// + public static readonly NodeId BrowsePath = new NodeId(Opc.Ua.DataTypes.BrowsePath); + + /// + /// The identifier for the BrowsePathTarget DataType. + /// + public static readonly NodeId BrowsePathTarget = new NodeId(Opc.Ua.DataTypes.BrowsePathTarget); + + /// + /// The identifier for the BrowsePathResult DataType. + /// + public static readonly NodeId BrowsePathResult = new NodeId(Opc.Ua.DataTypes.BrowsePathResult); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsRequest DataType. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest = new NodeId(Opc.Ua.DataTypes.TranslateBrowsePathsToNodeIdsRequest); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsResponse DataType. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse = new NodeId(Opc.Ua.DataTypes.TranslateBrowsePathsToNodeIdsResponse); + + /// + /// The identifier for the RegisterNodesRequest DataType. + /// + public static readonly NodeId RegisterNodesRequest = new NodeId(Opc.Ua.DataTypes.RegisterNodesRequest); + + /// + /// The identifier for the RegisterNodesResponse DataType. + /// + public static readonly NodeId RegisterNodesResponse = new NodeId(Opc.Ua.DataTypes.RegisterNodesResponse); + + /// + /// The identifier for the UnregisterNodesRequest DataType. + /// + public static readonly NodeId UnregisterNodesRequest = new NodeId(Opc.Ua.DataTypes.UnregisterNodesRequest); + + /// + /// The identifier for the UnregisterNodesResponse DataType. + /// + public static readonly NodeId UnregisterNodesResponse = new NodeId(Opc.Ua.DataTypes.UnregisterNodesResponse); + + /// + /// The identifier for the Counter DataType. + /// + public static readonly NodeId Counter = new NodeId(Opc.Ua.DataTypes.Counter); + + /// + /// The identifier for the NumericRange DataType. + /// + public static readonly NodeId NumericRange = new NodeId(Opc.Ua.DataTypes.NumericRange); + + /// + /// The identifier for the Time DataType. + /// + public static readonly NodeId Time = new NodeId(Opc.Ua.DataTypes.Time); + + /// + /// The identifier for the Date DataType. + /// + public static readonly NodeId Date = new NodeId(Opc.Ua.DataTypes.Date); + + /// + /// The identifier for the EndpointConfiguration DataType. + /// + public static readonly NodeId EndpointConfiguration = new NodeId(Opc.Ua.DataTypes.EndpointConfiguration); + + /// + /// The identifier for the QueryDataDescription DataType. + /// + public static readonly NodeId QueryDataDescription = new NodeId(Opc.Ua.DataTypes.QueryDataDescription); + + /// + /// The identifier for the NodeTypeDescription DataType. + /// + public static readonly NodeId NodeTypeDescription = new NodeId(Opc.Ua.DataTypes.NodeTypeDescription); + + /// + /// The identifier for the FilterOperator DataType. + /// + public static readonly NodeId FilterOperator = new NodeId(Opc.Ua.DataTypes.FilterOperator); + + /// + /// The identifier for the QueryDataSet DataType. + /// + public static readonly NodeId QueryDataSet = new NodeId(Opc.Ua.DataTypes.QueryDataSet); + + /// + /// The identifier for the NodeReference DataType. + /// + public static readonly NodeId NodeReference = new NodeId(Opc.Ua.DataTypes.NodeReference); + + /// + /// The identifier for the ContentFilterElement DataType. + /// + public static readonly NodeId ContentFilterElement = new NodeId(Opc.Ua.DataTypes.ContentFilterElement); + + /// + /// The identifier for the ContentFilter DataType. + /// + public static readonly NodeId ContentFilter = new NodeId(Opc.Ua.DataTypes.ContentFilter); + + /// + /// The identifier for the FilterOperand DataType. + /// + public static readonly NodeId FilterOperand = new NodeId(Opc.Ua.DataTypes.FilterOperand); + + /// + /// The identifier for the ElementOperand DataType. + /// + public static readonly NodeId ElementOperand = new NodeId(Opc.Ua.DataTypes.ElementOperand); + + /// + /// The identifier for the LiteralOperand DataType. + /// + public static readonly NodeId LiteralOperand = new NodeId(Opc.Ua.DataTypes.LiteralOperand); + + /// + /// The identifier for the AttributeOperand DataType. + /// + public static readonly NodeId AttributeOperand = new NodeId(Opc.Ua.DataTypes.AttributeOperand); + + /// + /// The identifier for the SimpleAttributeOperand DataType. + /// + public static readonly NodeId SimpleAttributeOperand = new NodeId(Opc.Ua.DataTypes.SimpleAttributeOperand); + + /// + /// The identifier for the ContentFilterElementResult DataType. + /// + public static readonly NodeId ContentFilterElementResult = new NodeId(Opc.Ua.DataTypes.ContentFilterElementResult); + + /// + /// The identifier for the ContentFilterResult DataType. + /// + public static readonly NodeId ContentFilterResult = new NodeId(Opc.Ua.DataTypes.ContentFilterResult); + + /// + /// The identifier for the ParsingResult DataType. + /// + public static readonly NodeId ParsingResult = new NodeId(Opc.Ua.DataTypes.ParsingResult); + + /// + /// The identifier for the QueryFirstRequest DataType. + /// + public static readonly NodeId QueryFirstRequest = new NodeId(Opc.Ua.DataTypes.QueryFirstRequest); + + /// + /// The identifier for the QueryFirstResponse DataType. + /// + public static readonly NodeId QueryFirstResponse = new NodeId(Opc.Ua.DataTypes.QueryFirstResponse); + + /// + /// The identifier for the QueryNextRequest DataType. + /// + public static readonly NodeId QueryNextRequest = new NodeId(Opc.Ua.DataTypes.QueryNextRequest); + + /// + /// The identifier for the QueryNextResponse DataType. + /// + public static readonly NodeId QueryNextResponse = new NodeId(Opc.Ua.DataTypes.QueryNextResponse); + + /// + /// The identifier for the TimestampsToReturn DataType. + /// + public static readonly NodeId TimestampsToReturn = new NodeId(Opc.Ua.DataTypes.TimestampsToReturn); + + /// + /// The identifier for the ReadValueId DataType. + /// + public static readonly NodeId ReadValueId = new NodeId(Opc.Ua.DataTypes.ReadValueId); + + /// + /// The identifier for the ReadRequest DataType. + /// + public static readonly NodeId ReadRequest = new NodeId(Opc.Ua.DataTypes.ReadRequest); + + /// + /// The identifier for the ReadResponse DataType. + /// + public static readonly NodeId ReadResponse = new NodeId(Opc.Ua.DataTypes.ReadResponse); + + /// + /// The identifier for the HistoryReadValueId DataType. + /// + public static readonly NodeId HistoryReadValueId = new NodeId(Opc.Ua.DataTypes.HistoryReadValueId); + + /// + /// The identifier for the HistoryReadResult DataType. + /// + public static readonly NodeId HistoryReadResult = new NodeId(Opc.Ua.DataTypes.HistoryReadResult); + + /// + /// The identifier for the HistoryReadDetails DataType. + /// + public static readonly NodeId HistoryReadDetails = new NodeId(Opc.Ua.DataTypes.HistoryReadDetails); + + /// + /// The identifier for the ReadEventDetails DataType. + /// + public static readonly NodeId ReadEventDetails = new NodeId(Opc.Ua.DataTypes.ReadEventDetails); + + /// + /// The identifier for the ReadRawModifiedDetails DataType. + /// + public static readonly NodeId ReadRawModifiedDetails = new NodeId(Opc.Ua.DataTypes.ReadRawModifiedDetails); + + /// + /// The identifier for the ReadProcessedDetails DataType. + /// + public static readonly NodeId ReadProcessedDetails = new NodeId(Opc.Ua.DataTypes.ReadProcessedDetails); + + /// + /// The identifier for the ReadAtTimeDetails DataType. + /// + public static readonly NodeId ReadAtTimeDetails = new NodeId(Opc.Ua.DataTypes.ReadAtTimeDetails); + + /// + /// The identifier for the ReadAnnotationDataDetails DataType. + /// + public static readonly NodeId ReadAnnotationDataDetails = new NodeId(Opc.Ua.DataTypes.ReadAnnotationDataDetails); + + /// + /// The identifier for the HistoryData DataType. + /// + public static readonly NodeId HistoryData = new NodeId(Opc.Ua.DataTypes.HistoryData); + + /// + /// The identifier for the ModificationInfo DataType. + /// + public static readonly NodeId ModificationInfo = new NodeId(Opc.Ua.DataTypes.ModificationInfo); + + /// + /// The identifier for the HistoryModifiedData DataType. + /// + public static readonly NodeId HistoryModifiedData = new NodeId(Opc.Ua.DataTypes.HistoryModifiedData); + + /// + /// The identifier for the HistoryEvent DataType. + /// + public static readonly NodeId HistoryEvent = new NodeId(Opc.Ua.DataTypes.HistoryEvent); + + /// + /// The identifier for the HistoryReadRequest DataType. + /// + public static readonly NodeId HistoryReadRequest = new NodeId(Opc.Ua.DataTypes.HistoryReadRequest); + + /// + /// The identifier for the HistoryReadResponse DataType. + /// + public static readonly NodeId HistoryReadResponse = new NodeId(Opc.Ua.DataTypes.HistoryReadResponse); + + /// + /// The identifier for the WriteValue DataType. + /// + public static readonly NodeId WriteValue = new NodeId(Opc.Ua.DataTypes.WriteValue); + + /// + /// The identifier for the WriteRequest DataType. + /// + public static readonly NodeId WriteRequest = new NodeId(Opc.Ua.DataTypes.WriteRequest); + + /// + /// The identifier for the WriteResponse DataType. + /// + public static readonly NodeId WriteResponse = new NodeId(Opc.Ua.DataTypes.WriteResponse); + + /// + /// The identifier for the HistoryUpdateDetails DataType. + /// + public static readonly NodeId HistoryUpdateDetails = new NodeId(Opc.Ua.DataTypes.HistoryUpdateDetails); + + /// + /// The identifier for the HistoryUpdateType DataType. + /// + public static readonly NodeId HistoryUpdateType = new NodeId(Opc.Ua.DataTypes.HistoryUpdateType); + + /// + /// The identifier for the PerformUpdateType DataType. + /// + public static readonly NodeId PerformUpdateType = new NodeId(Opc.Ua.DataTypes.PerformUpdateType); + + /// + /// The identifier for the UpdateDataDetails DataType. + /// + public static readonly NodeId UpdateDataDetails = new NodeId(Opc.Ua.DataTypes.UpdateDataDetails); + + /// + /// The identifier for the UpdateStructureDataDetails DataType. + /// + public static readonly NodeId UpdateStructureDataDetails = new NodeId(Opc.Ua.DataTypes.UpdateStructureDataDetails); + + /// + /// The identifier for the UpdateEventDetails DataType. + /// + public static readonly NodeId UpdateEventDetails = new NodeId(Opc.Ua.DataTypes.UpdateEventDetails); + + /// + /// The identifier for the DeleteRawModifiedDetails DataType. + /// + public static readonly NodeId DeleteRawModifiedDetails = new NodeId(Opc.Ua.DataTypes.DeleteRawModifiedDetails); + + /// + /// The identifier for the DeleteAtTimeDetails DataType. + /// + public static readonly NodeId DeleteAtTimeDetails = new NodeId(Opc.Ua.DataTypes.DeleteAtTimeDetails); + + /// + /// The identifier for the DeleteEventDetails DataType. + /// + public static readonly NodeId DeleteEventDetails = new NodeId(Opc.Ua.DataTypes.DeleteEventDetails); + + /// + /// The identifier for the HistoryUpdateResult DataType. + /// + public static readonly NodeId HistoryUpdateResult = new NodeId(Opc.Ua.DataTypes.HistoryUpdateResult); + + /// + /// The identifier for the HistoryUpdateRequest DataType. + /// + public static readonly NodeId HistoryUpdateRequest = new NodeId(Opc.Ua.DataTypes.HistoryUpdateRequest); + + /// + /// The identifier for the HistoryUpdateResponse DataType. + /// + public static readonly NodeId HistoryUpdateResponse = new NodeId(Opc.Ua.DataTypes.HistoryUpdateResponse); + + /// + /// The identifier for the CallMethodRequest DataType. + /// + public static readonly NodeId CallMethodRequest = new NodeId(Opc.Ua.DataTypes.CallMethodRequest); + + /// + /// The identifier for the CallMethodResult DataType. + /// + public static readonly NodeId CallMethodResult = new NodeId(Opc.Ua.DataTypes.CallMethodResult); + + /// + /// The identifier for the CallRequest DataType. + /// + public static readonly NodeId CallRequest = new NodeId(Opc.Ua.DataTypes.CallRequest); + + /// + /// The identifier for the CallResponse DataType. + /// + public static readonly NodeId CallResponse = new NodeId(Opc.Ua.DataTypes.CallResponse); + + /// + /// The identifier for the MonitoringMode DataType. + /// + public static readonly NodeId MonitoringMode = new NodeId(Opc.Ua.DataTypes.MonitoringMode); + + /// + /// The identifier for the DataChangeTrigger DataType. + /// + public static readonly NodeId DataChangeTrigger = new NodeId(Opc.Ua.DataTypes.DataChangeTrigger); + + /// + /// The identifier for the DeadbandType DataType. + /// + public static readonly NodeId DeadbandType = new NodeId(Opc.Ua.DataTypes.DeadbandType); + + /// + /// The identifier for the MonitoringFilter DataType. + /// + public static readonly NodeId MonitoringFilter = new NodeId(Opc.Ua.DataTypes.MonitoringFilter); + + /// + /// The identifier for the DataChangeFilter DataType. + /// + public static readonly NodeId DataChangeFilter = new NodeId(Opc.Ua.DataTypes.DataChangeFilter); + + /// + /// The identifier for the EventFilter DataType. + /// + public static readonly NodeId EventFilter = new NodeId(Opc.Ua.DataTypes.EventFilter); + + /// + /// The identifier for the AggregateConfiguration DataType. + /// + public static readonly NodeId AggregateConfiguration = new NodeId(Opc.Ua.DataTypes.AggregateConfiguration); + + /// + /// The identifier for the AggregateFilter DataType. + /// + public static readonly NodeId AggregateFilter = new NodeId(Opc.Ua.DataTypes.AggregateFilter); + + /// + /// The identifier for the MonitoringFilterResult DataType. + /// + public static readonly NodeId MonitoringFilterResult = new NodeId(Opc.Ua.DataTypes.MonitoringFilterResult); + + /// + /// The identifier for the EventFilterResult DataType. + /// + public static readonly NodeId EventFilterResult = new NodeId(Opc.Ua.DataTypes.EventFilterResult); + + /// + /// The identifier for the AggregateFilterResult DataType. + /// + public static readonly NodeId AggregateFilterResult = new NodeId(Opc.Ua.DataTypes.AggregateFilterResult); + + /// + /// The identifier for the MonitoringParameters DataType. + /// + public static readonly NodeId MonitoringParameters = new NodeId(Opc.Ua.DataTypes.MonitoringParameters); + + /// + /// The identifier for the MonitoredItemCreateRequest DataType. + /// + public static readonly NodeId MonitoredItemCreateRequest = new NodeId(Opc.Ua.DataTypes.MonitoredItemCreateRequest); + + /// + /// The identifier for the MonitoredItemCreateResult DataType. + /// + public static readonly NodeId MonitoredItemCreateResult = new NodeId(Opc.Ua.DataTypes.MonitoredItemCreateResult); + + /// + /// The identifier for the CreateMonitoredItemsRequest DataType. + /// + public static readonly NodeId CreateMonitoredItemsRequest = new NodeId(Opc.Ua.DataTypes.CreateMonitoredItemsRequest); + + /// + /// The identifier for the CreateMonitoredItemsResponse DataType. + /// + public static readonly NodeId CreateMonitoredItemsResponse = new NodeId(Opc.Ua.DataTypes.CreateMonitoredItemsResponse); + + /// + /// The identifier for the MonitoredItemModifyRequest DataType. + /// + public static readonly NodeId MonitoredItemModifyRequest = new NodeId(Opc.Ua.DataTypes.MonitoredItemModifyRequest); + + /// + /// The identifier for the MonitoredItemModifyResult DataType. + /// + public static readonly NodeId MonitoredItemModifyResult = new NodeId(Opc.Ua.DataTypes.MonitoredItemModifyResult); + + /// + /// The identifier for the ModifyMonitoredItemsRequest DataType. + /// + public static readonly NodeId ModifyMonitoredItemsRequest = new NodeId(Opc.Ua.DataTypes.ModifyMonitoredItemsRequest); + + /// + /// The identifier for the ModifyMonitoredItemsResponse DataType. + /// + public static readonly NodeId ModifyMonitoredItemsResponse = new NodeId(Opc.Ua.DataTypes.ModifyMonitoredItemsResponse); + + /// + /// The identifier for the SetMonitoringModeRequest DataType. + /// + public static readonly NodeId SetMonitoringModeRequest = new NodeId(Opc.Ua.DataTypes.SetMonitoringModeRequest); + + /// + /// The identifier for the SetMonitoringModeResponse DataType. + /// + public static readonly NodeId SetMonitoringModeResponse = new NodeId(Opc.Ua.DataTypes.SetMonitoringModeResponse); + + /// + /// The identifier for the SetTriggeringRequest DataType. + /// + public static readonly NodeId SetTriggeringRequest = new NodeId(Opc.Ua.DataTypes.SetTriggeringRequest); + + /// + /// The identifier for the SetTriggeringResponse DataType. + /// + public static readonly NodeId SetTriggeringResponse = new NodeId(Opc.Ua.DataTypes.SetTriggeringResponse); + + /// + /// The identifier for the DeleteMonitoredItemsRequest DataType. + /// + public static readonly NodeId DeleteMonitoredItemsRequest = new NodeId(Opc.Ua.DataTypes.DeleteMonitoredItemsRequest); + + /// + /// The identifier for the DeleteMonitoredItemsResponse DataType. + /// + public static readonly NodeId DeleteMonitoredItemsResponse = new NodeId(Opc.Ua.DataTypes.DeleteMonitoredItemsResponse); + + /// + /// The identifier for the CreateSubscriptionRequest DataType. + /// + public static readonly NodeId CreateSubscriptionRequest = new NodeId(Opc.Ua.DataTypes.CreateSubscriptionRequest); + + /// + /// The identifier for the CreateSubscriptionResponse DataType. + /// + public static readonly NodeId CreateSubscriptionResponse = new NodeId(Opc.Ua.DataTypes.CreateSubscriptionResponse); + + /// + /// The identifier for the ModifySubscriptionRequest DataType. + /// + public static readonly NodeId ModifySubscriptionRequest = new NodeId(Opc.Ua.DataTypes.ModifySubscriptionRequest); + + /// + /// The identifier for the ModifySubscriptionResponse DataType. + /// + public static readonly NodeId ModifySubscriptionResponse = new NodeId(Opc.Ua.DataTypes.ModifySubscriptionResponse); + + /// + /// The identifier for the SetPublishingModeRequest DataType. + /// + public static readonly NodeId SetPublishingModeRequest = new NodeId(Opc.Ua.DataTypes.SetPublishingModeRequest); + + /// + /// The identifier for the SetPublishingModeResponse DataType. + /// + public static readonly NodeId SetPublishingModeResponse = new NodeId(Opc.Ua.DataTypes.SetPublishingModeResponse); + + /// + /// The identifier for the NotificationMessage DataType. + /// + public static readonly NodeId NotificationMessage = new NodeId(Opc.Ua.DataTypes.NotificationMessage); + + /// + /// The identifier for the NotificationData DataType. + /// + public static readonly NodeId NotificationData = new NodeId(Opc.Ua.DataTypes.NotificationData); + + /// + /// The identifier for the DataChangeNotification DataType. + /// + public static readonly NodeId DataChangeNotification = new NodeId(Opc.Ua.DataTypes.DataChangeNotification); + + /// + /// The identifier for the MonitoredItemNotification DataType. + /// + public static readonly NodeId MonitoredItemNotification = new NodeId(Opc.Ua.DataTypes.MonitoredItemNotification); + + /// + /// The identifier for the EventNotificationList DataType. + /// + public static readonly NodeId EventNotificationList = new NodeId(Opc.Ua.DataTypes.EventNotificationList); + + /// + /// The identifier for the EventFieldList DataType. + /// + public static readonly NodeId EventFieldList = new NodeId(Opc.Ua.DataTypes.EventFieldList); + + /// + /// The identifier for the HistoryEventFieldList DataType. + /// + public static readonly NodeId HistoryEventFieldList = new NodeId(Opc.Ua.DataTypes.HistoryEventFieldList); + + /// + /// The identifier for the StatusChangeNotification DataType. + /// + public static readonly NodeId StatusChangeNotification = new NodeId(Opc.Ua.DataTypes.StatusChangeNotification); + + /// + /// The identifier for the SubscriptionAcknowledgement DataType. + /// + public static readonly NodeId SubscriptionAcknowledgement = new NodeId(Opc.Ua.DataTypes.SubscriptionAcknowledgement); + + /// + /// The identifier for the PublishRequest DataType. + /// + public static readonly NodeId PublishRequest = new NodeId(Opc.Ua.DataTypes.PublishRequest); + + /// + /// The identifier for the PublishResponse DataType. + /// + public static readonly NodeId PublishResponse = new NodeId(Opc.Ua.DataTypes.PublishResponse); + + /// + /// The identifier for the RepublishRequest DataType. + /// + public static readonly NodeId RepublishRequest = new NodeId(Opc.Ua.DataTypes.RepublishRequest); + + /// + /// The identifier for the RepublishResponse DataType. + /// + public static readonly NodeId RepublishResponse = new NodeId(Opc.Ua.DataTypes.RepublishResponse); + + /// + /// The identifier for the TransferResult DataType. + /// + public static readonly NodeId TransferResult = new NodeId(Opc.Ua.DataTypes.TransferResult); + + /// + /// The identifier for the TransferSubscriptionsRequest DataType. + /// + public static readonly NodeId TransferSubscriptionsRequest = new NodeId(Opc.Ua.DataTypes.TransferSubscriptionsRequest); + + /// + /// The identifier for the TransferSubscriptionsResponse DataType. + /// + public static readonly NodeId TransferSubscriptionsResponse = new NodeId(Opc.Ua.DataTypes.TransferSubscriptionsResponse); + + /// + /// The identifier for the DeleteSubscriptionsRequest DataType. + /// + public static readonly NodeId DeleteSubscriptionsRequest = new NodeId(Opc.Ua.DataTypes.DeleteSubscriptionsRequest); + + /// + /// The identifier for the DeleteSubscriptionsResponse DataType. + /// + public static readonly NodeId DeleteSubscriptionsResponse = new NodeId(Opc.Ua.DataTypes.DeleteSubscriptionsResponse); + + /// + /// The identifier for the BuildInfo DataType. + /// + public static readonly NodeId BuildInfo = new NodeId(Opc.Ua.DataTypes.BuildInfo); + + /// + /// The identifier for the RedundancySupport DataType. + /// + public static readonly NodeId RedundancySupport = new NodeId(Opc.Ua.DataTypes.RedundancySupport); + + /// + /// The identifier for the ServerState DataType. + /// + public static readonly NodeId ServerState = new NodeId(Opc.Ua.DataTypes.ServerState); + + /// + /// The identifier for the RedundantServerDataType DataType. + /// + public static readonly NodeId RedundantServerDataType = new NodeId(Opc.Ua.DataTypes.RedundantServerDataType); + + /// + /// The identifier for the EndpointUrlListDataType DataType. + /// + public static readonly NodeId EndpointUrlListDataType = new NodeId(Opc.Ua.DataTypes.EndpointUrlListDataType); + + /// + /// The identifier for the NetworkGroupDataType DataType. + /// + public static readonly NodeId NetworkGroupDataType = new NodeId(Opc.Ua.DataTypes.NetworkGroupDataType); + + /// + /// The identifier for the SamplingIntervalDiagnosticsDataType DataType. + /// + public static readonly NodeId SamplingIntervalDiagnosticsDataType = new NodeId(Opc.Ua.DataTypes.SamplingIntervalDiagnosticsDataType); + + /// + /// The identifier for the ServerDiagnosticsSummaryDataType DataType. + /// + public static readonly NodeId ServerDiagnosticsSummaryDataType = new NodeId(Opc.Ua.DataTypes.ServerDiagnosticsSummaryDataType); + + /// + /// The identifier for the ServerStatusDataType DataType. + /// + public static readonly NodeId ServerStatusDataType = new NodeId(Opc.Ua.DataTypes.ServerStatusDataType); + + /// + /// The identifier for the SessionDiagnosticsDataType DataType. + /// + public static readonly NodeId SessionDiagnosticsDataType = new NodeId(Opc.Ua.DataTypes.SessionDiagnosticsDataType); + + /// + /// The identifier for the SessionSecurityDiagnosticsDataType DataType. + /// + public static readonly NodeId SessionSecurityDiagnosticsDataType = new NodeId(Opc.Ua.DataTypes.SessionSecurityDiagnosticsDataType); + + /// + /// The identifier for the ServiceCounterDataType DataType. + /// + public static readonly NodeId ServiceCounterDataType = new NodeId(Opc.Ua.DataTypes.ServiceCounterDataType); + + /// + /// The identifier for the StatusResult DataType. + /// + public static readonly NodeId StatusResult = new NodeId(Opc.Ua.DataTypes.StatusResult); + + /// + /// The identifier for the SubscriptionDiagnosticsDataType DataType. + /// + public static readonly NodeId SubscriptionDiagnosticsDataType = new NodeId(Opc.Ua.DataTypes.SubscriptionDiagnosticsDataType); + + /// + /// The identifier for the ModelChangeStructureVerbMask DataType. + /// + public static readonly NodeId ModelChangeStructureVerbMask = new NodeId(Opc.Ua.DataTypes.ModelChangeStructureVerbMask); + + /// + /// The identifier for the ModelChangeStructureDataType DataType. + /// + public static readonly NodeId ModelChangeStructureDataType = new NodeId(Opc.Ua.DataTypes.ModelChangeStructureDataType); + + /// + /// The identifier for the SemanticChangeStructureDataType DataType. + /// + public static readonly NodeId SemanticChangeStructureDataType = new NodeId(Opc.Ua.DataTypes.SemanticChangeStructureDataType); + + /// + /// The identifier for the Range DataType. + /// + public static readonly NodeId Range = new NodeId(Opc.Ua.DataTypes.Range); + + /// + /// The identifier for the EUInformation DataType. + /// + public static readonly NodeId EUInformation = new NodeId(Opc.Ua.DataTypes.EUInformation); + + /// + /// The identifier for the AxisScaleEnumeration DataType. + /// + public static readonly NodeId AxisScaleEnumeration = new NodeId(Opc.Ua.DataTypes.AxisScaleEnumeration); + + /// + /// The identifier for the ComplexNumberType DataType. + /// + public static readonly NodeId ComplexNumberType = new NodeId(Opc.Ua.DataTypes.ComplexNumberType); + + /// + /// The identifier for the DoubleComplexNumberType DataType. + /// + public static readonly NodeId DoubleComplexNumberType = new NodeId(Opc.Ua.DataTypes.DoubleComplexNumberType); + + /// + /// The identifier for the AxisInformation DataType. + /// + public static readonly NodeId AxisInformation = new NodeId(Opc.Ua.DataTypes.AxisInformation); + + /// + /// The identifier for the XVType DataType. + /// + public static readonly NodeId XVType = new NodeId(Opc.Ua.DataTypes.XVType); + + /// + /// The identifier for the ProgramDiagnosticDataType DataType. + /// + public static readonly NodeId ProgramDiagnosticDataType = new NodeId(Opc.Ua.DataTypes.ProgramDiagnosticDataType); + + /// + /// The identifier for the ProgramDiagnostic2DataType DataType. + /// + public static readonly NodeId ProgramDiagnostic2DataType = new NodeId(Opc.Ua.DataTypes.ProgramDiagnostic2DataType); + + /// + /// The identifier for the Annotation DataType. + /// + public static readonly NodeId Annotation = new NodeId(Opc.Ua.DataTypes.Annotation); + + /// + /// The identifier for the ExceptionDeviationFormat DataType. + /// + public static readonly NodeId ExceptionDeviationFormat = new NodeId(Opc.Ua.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 OPCUANamespaceMetadata_NamespaceFile_Open Method. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Open = new NodeId(Opc.Ua.Methods.OPCUANamespaceMetadata_NamespaceFile_Open); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Close Method. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Close = new NodeId(Opc.Ua.Methods.OPCUANamespaceMetadata_NamespaceFile_Close); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Read Method. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Read = new NodeId(Opc.Ua.Methods.OPCUANamespaceMetadata_NamespaceFile_Read); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Write Method. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Write = new NodeId(Opc.Ua.Methods.OPCUANamespaceMetadata_NamespaceFile_Write); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_GetPosition Method. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_GetPosition = new NodeId(Opc.Ua.Methods.OPCUANamespaceMetadata_NamespaceFile_GetPosition); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_SetPosition Method. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_SetPosition = new NodeId(Opc.Ua.Methods.OPCUANamespaceMetadata_NamespaceFile_SetPosition); + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_AddRole Method. + /// + public static readonly NodeId ServerType_ServerCapabilities_RoleSet_AddRole = new NodeId(Opc.Ua.Methods.ServerType_ServerCapabilities_RoleSet_AddRole); + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_RemoveRole Method. + /// + public static readonly NodeId ServerType_ServerCapabilities_RoleSet_RemoveRole = new NodeId(Opc.Ua.Methods.ServerType_ServerCapabilities_RoleSet_RemoveRole); + + /// + /// The identifier for the ServerType_GetMonitoredItems Method. + /// + public static readonly NodeId ServerType_GetMonitoredItems = new NodeId(Opc.Ua.Methods.ServerType_GetMonitoredItems); + + /// + /// The identifier for the ServerType_ResendData Method. + /// + public static readonly NodeId ServerType_ResendData = new NodeId(Opc.Ua.Methods.ServerType_ResendData); + + /// + /// The identifier for the ServerType_SetSubscriptionDurable Method. + /// + public static readonly NodeId ServerType_SetSubscriptionDurable = new NodeId(Opc.Ua.Methods.ServerType_SetSubscriptionDurable); + + /// + /// The identifier for the ServerType_RequestServerStateChange Method. + /// + public static readonly NodeId ServerType_RequestServerStateChange = new NodeId(Opc.Ua.Methods.ServerType_RequestServerStateChange); + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_AddRole Method. + /// + public static readonly NodeId ServerCapabilitiesType_RoleSet_AddRole = new NodeId(Opc.Ua.Methods.ServerCapabilitiesType_RoleSet_AddRole); + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_RemoveRole Method. + /// + public static readonly NodeId ServerCapabilitiesType_RoleSet_RemoveRole = new NodeId(Opc.Ua.Methods.ServerCapabilitiesType_RoleSet_RemoveRole); + + /// + /// The identifier for the FileType_Open Method. + /// + public static readonly NodeId FileType_Open = new NodeId(Opc.Ua.Methods.FileType_Open); + + /// + /// The identifier for the FileType_Close Method. + /// + public static readonly NodeId FileType_Close = new NodeId(Opc.Ua.Methods.FileType_Close); + + /// + /// The identifier for the FileType_Read Method. + /// + public static readonly NodeId FileType_Read = new NodeId(Opc.Ua.Methods.FileType_Read); + + /// + /// The identifier for the FileType_Write Method. + /// + public static readonly NodeId FileType_Write = new NodeId(Opc.Ua.Methods.FileType_Write); + + /// + /// The identifier for the FileType_GetPosition Method. + /// + public static readonly NodeId FileType_GetPosition = new NodeId(Opc.Ua.Methods.FileType_GetPosition); + + /// + /// The identifier for the FileType_SetPosition Method. + /// + public static readonly NodeId FileType_SetPosition = new NodeId(Opc.Ua.Methods.FileType_SetPosition); + + /// + /// The identifier for the AddressSpaceFileType_ExportNamespace Method. + /// + public static readonly NodeId AddressSpaceFileType_ExportNamespace = new NodeId(Opc.Ua.Methods.AddressSpaceFileType_ExportNamespace); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Open Method. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Open = new NodeId(Opc.Ua.Methods.NamespaceMetadataType_NamespaceFile_Open); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Close Method. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Close = new NodeId(Opc.Ua.Methods.NamespaceMetadataType_NamespaceFile_Close); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Read Method. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Read = new NodeId(Opc.Ua.Methods.NamespaceMetadataType_NamespaceFile_Read); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Write Method. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Write = new NodeId(Opc.Ua.Methods.NamespaceMetadataType_NamespaceFile_Write); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_GetPosition Method. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_GetPosition = new NodeId(Opc.Ua.Methods.NamespaceMetadataType_NamespaceFile_GetPosition); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_SetPosition Method. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_SetPosition = new NodeId(Opc.Ua.Methods.NamespaceMetadataType_NamespaceFile_SetPosition); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open Method. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open = new NodeId(Opc.Ua.Methods.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close Method. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close = new NodeId(Opc.Ua.Methods.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read Method. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read = new NodeId(Opc.Ua.Methods.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write Method. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write = new NodeId(Opc.Ua.Methods.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition Method. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition = new NodeId(Opc.Ua.Methods.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition Method. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition = new NodeId(Opc.Ua.Methods.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition); + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_AddRole Method. + /// + public static readonly NodeId Server_ServerCapabilities_RoleSet_AddRole = new NodeId(Opc.Ua.Methods.Server_ServerCapabilities_RoleSet_AddRole); + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_RemoveRole Method. + /// + public static readonly NodeId Server_ServerCapabilities_RoleSet_RemoveRole = new NodeId(Opc.Ua.Methods.Server_ServerCapabilities_RoleSet_RemoveRole); + + /// + /// The identifier for the Server_GetMonitoredItems Method. + /// + public static readonly NodeId Server_GetMonitoredItems = new NodeId(Opc.Ua.Methods.Server_GetMonitoredItems); + + /// + /// The identifier for the Server_ResendData Method. + /// + public static readonly NodeId Server_ResendData = new NodeId(Opc.Ua.Methods.Server_ResendData); + + /// + /// The identifier for the Server_SetSubscriptionDurable Method. + /// + public static readonly NodeId Server_SetSubscriptionDurable = new NodeId(Opc.Ua.Methods.Server_SetSubscriptionDurable); + + /// + /// The identifier for the Server_RequestServerStateChange Method. + /// + public static readonly NodeId Server_RequestServerStateChange = new NodeId(Opc.Ua.Methods.Server_RequestServerStateChange); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory Method. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateFile Method. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_CreateFile = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileDirectoryName_Placeholder_CreateFile); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject Method. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy Method. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Open Method. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Open = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileName_Placeholder_Open); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Close Method. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Close = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileName_Placeholder_Close); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Read Method. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Read = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileName_Placeholder_Read); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Write Method. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Write = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileName_Placeholder_Write); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_GetPosition Method. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_GetPosition = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileName_Placeholder_GetPosition); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_SetPosition Method. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_SetPosition = new NodeId(Opc.Ua.Methods.FileDirectoryType_FileName_Placeholder_SetPosition); + + /// + /// The identifier for the FileDirectoryType_CreateDirectory Method. + /// + public static readonly NodeId FileDirectoryType_CreateDirectory = new NodeId(Opc.Ua.Methods.FileDirectoryType_CreateDirectory); + + /// + /// The identifier for the FileDirectoryType_CreateFile Method. + /// + public static readonly NodeId FileDirectoryType_CreateFile = new NodeId(Opc.Ua.Methods.FileDirectoryType_CreateFile); + + /// + /// The identifier for the FileDirectoryType_DeleteFileSystemObject Method. + /// + public static readonly NodeId FileDirectoryType_DeleteFileSystemObject = new NodeId(Opc.Ua.Methods.FileDirectoryType_DeleteFileSystemObject); + + /// + /// The identifier for the FileDirectoryType_MoveOrCopy Method. + /// + public static readonly NodeId FileDirectoryType_MoveOrCopy = new NodeId(Opc.Ua.Methods.FileDirectoryType_MoveOrCopy); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateDirectory Method. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_CreateDirectory = new NodeId(Opc.Ua.Methods.FileSystem_FileDirectoryName_Placeholder_CreateDirectory); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateFile Method. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_CreateFile = new NodeId(Opc.Ua.Methods.FileSystem_FileDirectoryName_Placeholder_CreateFile); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject Method. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject = new NodeId(Opc.Ua.Methods.FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_MoveOrCopy Method. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_MoveOrCopy = new NodeId(Opc.Ua.Methods.FileSystem_FileDirectoryName_Placeholder_MoveOrCopy); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Open Method. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Open = new NodeId(Opc.Ua.Methods.FileSystem_FileName_Placeholder_Open); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Close Method. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Close = new NodeId(Opc.Ua.Methods.FileSystem_FileName_Placeholder_Close); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Read Method. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Read = new NodeId(Opc.Ua.Methods.FileSystem_FileName_Placeholder_Read); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Write Method. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Write = new NodeId(Opc.Ua.Methods.FileSystem_FileName_Placeholder_Write); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_GetPosition Method. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_GetPosition = new NodeId(Opc.Ua.Methods.FileSystem_FileName_Placeholder_GetPosition); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_SetPosition Method. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_SetPosition = new NodeId(Opc.Ua.Methods.FileSystem_FileName_Placeholder_SetPosition); + + /// + /// The identifier for the FileSystem_CreateDirectory Method. + /// + public static readonly NodeId FileSystem_CreateDirectory = new NodeId(Opc.Ua.Methods.FileSystem_CreateDirectory); + + /// + /// The identifier for the FileSystem_CreateFile Method. + /// + public static readonly NodeId FileSystem_CreateFile = new NodeId(Opc.Ua.Methods.FileSystem_CreateFile); + + /// + /// The identifier for the FileSystem_DeleteFileSystemObject Method. + /// + public static readonly NodeId FileSystem_DeleteFileSystemObject = new NodeId(Opc.Ua.Methods.FileSystem_DeleteFileSystemObject); + + /// + /// The identifier for the FileSystem_MoveOrCopy Method. + /// + public static readonly NodeId FileSystem_MoveOrCopy = new NodeId(Opc.Ua.Methods.FileSystem_MoveOrCopy); + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForRead Method. + /// + public static readonly NodeId TemporaryFileTransferType_GenerateFileForRead = new NodeId(Opc.Ua.Methods.TemporaryFileTransferType_GenerateFileForRead); + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForWrite Method. + /// + public static readonly NodeId TemporaryFileTransferType_GenerateFileForWrite = new NodeId(Opc.Ua.Methods.TemporaryFileTransferType_GenerateFileForWrite); + + /// + /// The identifier for the TemporaryFileTransferType_CloseAndCommit Method. + /// + public static readonly NodeId TemporaryFileTransferType_CloseAndCommit = new NodeId(Opc.Ua.Methods.TemporaryFileTransferType_CloseAndCommit); + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_Reset Method. + /// + public static readonly NodeId TemporaryFileTransferType_TransferState_Placeholder_Reset = new NodeId(Opc.Ua.Methods.TemporaryFileTransferType_TransferState_Placeholder_Reset); + + /// + /// The identifier for the FileTransferStateMachineType_Reset Method. + /// + public static readonly NodeId FileTransferStateMachineType_Reset = new NodeId(Opc.Ua.Methods.FileTransferStateMachineType_Reset); + + /// + /// The identifier for the RoleSetType_AddRole Method. + /// + public static readonly NodeId RoleSetType_AddRole = new NodeId(Opc.Ua.Methods.RoleSetType_AddRole); + + /// + /// The identifier for the RoleSetType_RemoveRole Method. + /// + public static readonly NodeId RoleSetType_RemoveRole = new NodeId(Opc.Ua.Methods.RoleSetType_RemoveRole); + + /// + /// The identifier for the RoleType_AddIdentity Method. + /// + public static readonly NodeId RoleType_AddIdentity = new NodeId(Opc.Ua.Methods.RoleType_AddIdentity); + + /// + /// The identifier for the RoleType_RemoveIdentity Method. + /// + public static readonly NodeId RoleType_RemoveIdentity = new NodeId(Opc.Ua.Methods.RoleType_RemoveIdentity); + + /// + /// The identifier for the RoleType_AddApplication Method. + /// + public static readonly NodeId RoleType_AddApplication = new NodeId(Opc.Ua.Methods.RoleType_AddApplication); + + /// + /// The identifier for the RoleType_RemoveApplication Method. + /// + public static readonly NodeId RoleType_RemoveApplication = new NodeId(Opc.Ua.Methods.RoleType_RemoveApplication); + + /// + /// The identifier for the RoleType_AddEndpoint Method. + /// + public static readonly NodeId RoleType_AddEndpoint = new NodeId(Opc.Ua.Methods.RoleType_AddEndpoint); + + /// + /// The identifier for the RoleType_RemoveEndpoint Method. + /// + public static readonly NodeId RoleType_RemoveEndpoint = new NodeId(Opc.Ua.Methods.RoleType_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_Anonymous_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_Anonymous_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Anonymous_AddIdentity); + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_Anonymous_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Anonymous_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_Anonymous_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_Anonymous_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Anonymous_AddApplication); + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_Anonymous_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Anonymous_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_Anonymous_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Anonymous_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Anonymous_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Anonymous_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Anonymous_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_AuthenticatedUser_AddIdentity); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_AuthenticatedUser_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_AuthenticatedUser_AddApplication); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_AuthenticatedUser_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_AuthenticatedUser_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_AuthenticatedUser_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_Observer_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_Observer_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Observer_AddIdentity); + + /// + /// The identifier for the WellKnownRole_Observer_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_Observer_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Observer_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_Observer_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_Observer_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Observer_AddApplication); + + /// + /// The identifier for the WellKnownRole_Observer_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_Observer_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Observer_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_Observer_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Observer_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Observer_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_Observer_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Observer_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Observer_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_Operator_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_Operator_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Operator_AddIdentity); + + /// + /// The identifier for the WellKnownRole_Operator_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_Operator_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Operator_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_Operator_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_Operator_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Operator_AddApplication); + + /// + /// The identifier for the WellKnownRole_Operator_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_Operator_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Operator_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_Operator_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Operator_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Operator_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_Operator_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Operator_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Operator_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_Engineer_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_Engineer_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Engineer_AddIdentity); + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_Engineer_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Engineer_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_Engineer_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_Engineer_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Engineer_AddApplication); + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_Engineer_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Engineer_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_Engineer_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Engineer_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Engineer_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Engineer_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Engineer_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_Supervisor_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_Supervisor_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Supervisor_AddIdentity); + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_Supervisor_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_Supervisor_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_Supervisor_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_Supervisor_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Supervisor_AddApplication); + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_Supervisor_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_Supervisor_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_Supervisor_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Supervisor_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Supervisor_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_Supervisor_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_Supervisor_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_ConfigureAdmin_AddIdentity); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_ConfigureAdmin_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_ConfigureAdmin_AddApplication); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_ConfigureAdmin_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_ConfigureAdmin_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_ConfigureAdmin_RemoveEndpoint); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddIdentity Method. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_AddIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_SecurityAdmin_AddIdentity); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveIdentity Method. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_RemoveIdentity = new NodeId(Opc.Ua.Methods.WellKnownRole_SecurityAdmin_RemoveIdentity); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddApplication Method. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_AddApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_SecurityAdmin_AddApplication); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveApplication Method. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_RemoveApplication = new NodeId(Opc.Ua.Methods.WellKnownRole_SecurityAdmin_RemoveApplication); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddEndpoint Method. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_AddEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_SecurityAdmin_AddEndpoint); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveEndpoint Method. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_RemoveEndpoint = new NodeId(Opc.Ua.Methods.WellKnownRole_SecurityAdmin_RemoveEndpoint); + + /// + /// The identifier for the ConditionType_Disable Method. + /// + public static readonly NodeId ConditionType_Disable = new NodeId(Opc.Ua.Methods.ConditionType_Disable); + + /// + /// The identifier for the ConditionType_Enable Method. + /// + public static readonly NodeId ConditionType_Enable = new NodeId(Opc.Ua.Methods.ConditionType_Enable); + + /// + /// The identifier for the ConditionType_AddComment Method. + /// + public static readonly NodeId ConditionType_AddComment = new NodeId(Opc.Ua.Methods.ConditionType_AddComment); + + /// + /// The identifier for the ConditionType_ConditionRefresh Method. + /// + public static readonly NodeId ConditionType_ConditionRefresh = new NodeId(Opc.Ua.Methods.ConditionType_ConditionRefresh); + + /// + /// The identifier for the ConditionType_ConditionRefresh2 Method. + /// + public static readonly NodeId ConditionType_ConditionRefresh2 = new NodeId(Opc.Ua.Methods.ConditionType_ConditionRefresh2); + + /// + /// The identifier for the DialogConditionType_Respond Method. + /// + public static readonly NodeId DialogConditionType_Respond = new NodeId(Opc.Ua.Methods.DialogConditionType_Respond); + + /// + /// The identifier for the AcknowledgeableConditionType_Acknowledge Method. + /// + public static readonly NodeId AcknowledgeableConditionType_Acknowledge = new NodeId(Opc.Ua.Methods.AcknowledgeableConditionType_Acknowledge); + + /// + /// The identifier for the AcknowledgeableConditionType_Confirm Method. + /// + public static readonly NodeId AcknowledgeableConditionType_Confirm = new NodeId(Opc.Ua.Methods.AcknowledgeableConditionType_Confirm); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.AlarmConditionType_ShelvingState_TimedShelve); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.AlarmConditionType_ShelvingState_Unshelve); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.AlarmConditionType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the AlarmConditionType_Silence Method. + /// + public static readonly NodeId AlarmConditionType_Silence = new NodeId(Opc.Ua.Methods.AlarmConditionType_Silence); + + /// + /// The identifier for the AlarmConditionType_Suppress Method. + /// + public static readonly NodeId AlarmConditionType_Suppress = new NodeId(Opc.Ua.Methods.AlarmConditionType_Suppress); + + /// + /// The identifier for the AlarmConditionType_Unsuppress Method. + /// + public static readonly NodeId AlarmConditionType_Unsuppress = new NodeId(Opc.Ua.Methods.AlarmConditionType_Unsuppress); + + /// + /// The identifier for the AlarmConditionType_RemoveFromService Method. + /// + public static readonly NodeId AlarmConditionType_RemoveFromService = new NodeId(Opc.Ua.Methods.AlarmConditionType_RemoveFromService); + + /// + /// The identifier for the AlarmConditionType_PlaceInService Method. + /// + public static readonly NodeId AlarmConditionType_PlaceInService = new NodeId(Opc.Ua.Methods.AlarmConditionType_PlaceInService); + + /// + /// The identifier for the AlarmConditionType_Reset Method. + /// + public static readonly NodeId AlarmConditionType_Reset = new NodeId(Opc.Ua.Methods.AlarmConditionType_Reset); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Disable Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Disable = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_Disable); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Enable Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Enable = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_Enable); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelve Method. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelve = new NodeId(Opc.Ua.Methods.ShelvedStateMachineType_TimedShelve); + + /// + /// The identifier for the ShelvedStateMachineType_Unshelve Method. + /// + public static readonly NodeId ShelvedStateMachineType_Unshelve = new NodeId(Opc.Ua.Methods.ShelvedStateMachineType_Unshelve); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelve Method. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelve = new NodeId(Opc.Ua.Methods.ShelvedStateMachineType_OneShotShelve); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.LimitAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.LimitAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.LimitAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ExclusiveLimitAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ExclusiveLimitAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ExclusiveLimitAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.NonExclusiveLimitAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.NonExclusiveLimitAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.NonExclusiveLevelAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.NonExclusiveLevelAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ExclusiveLevelAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ExclusiveLevelAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ExclusiveLevelAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.NonExclusiveDeviationAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ExclusiveDeviationAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ExclusiveDeviationAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.DiscreteAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.DiscreteAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.DiscreteAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.OffNormalAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.OffNormalAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.OffNormalAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.SystemOffNormalAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.SystemOffNormalAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.SystemOffNormalAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the TripAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId TripAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.TripAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the TripAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId TripAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.TripAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the TripAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId TripAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.TripAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.InstrumentDiagnosticAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.SystemDiagnosticAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.SystemDiagnosticAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.SystemDiagnosticAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateExpirationAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateExpirationAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateExpirationAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.DiscrepancyAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.DiscrepancyAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.DiscrepancyAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the AlarmMetricsType_Reset Method. + /// + public static readonly NodeId AlarmMetricsType_Reset = new NodeId(Opc.Ua.Methods.AlarmMetricsType_Reset); + + /// + /// The identifier for the ProgramStateMachineType_Start Method. + /// + public static readonly NodeId ProgramStateMachineType_Start = new NodeId(Opc.Ua.Methods.ProgramStateMachineType_Start); + + /// + /// The identifier for the ProgramStateMachineType_Suspend Method. + /// + public static readonly NodeId ProgramStateMachineType_Suspend = new NodeId(Opc.Ua.Methods.ProgramStateMachineType_Suspend); + + /// + /// The identifier for the ProgramStateMachineType_Resume Method. + /// + public static readonly NodeId ProgramStateMachineType_Resume = new NodeId(Opc.Ua.Methods.ProgramStateMachineType_Resume); + + /// + /// The identifier for the ProgramStateMachineType_Halt Method. + /// + public static readonly NodeId ProgramStateMachineType_Halt = new NodeId(Opc.Ua.Methods.ProgramStateMachineType_Halt); + + /// + /// The identifier for the ProgramStateMachineType_Reset Method. + /// + public static readonly NodeId ProgramStateMachineType_Reset = new NodeId(Opc.Ua.Methods.ProgramStateMachineType_Reset); + + /// + /// The identifier for the TrustListType_OpenWithMasks Method. + /// + public static readonly NodeId TrustListType_OpenWithMasks = new NodeId(Opc.Ua.Methods.TrustListType_OpenWithMasks); + + /// + /// The identifier for the TrustListType_CloseAndUpdate Method. + /// + public static readonly NodeId TrustListType_CloseAndUpdate = new NodeId(Opc.Ua.Methods.TrustListType_CloseAndUpdate); + + /// + /// The identifier for the TrustListType_AddCertificate Method. + /// + public static readonly NodeId TrustListType_AddCertificate = new NodeId(Opc.Ua.Methods.TrustListType_AddCertificate); + + /// + /// The identifier for the TrustListType_RemoveCertificate Method. + /// + public static readonly NodeId TrustListType_RemoveCertificate = new NodeId(Opc.Ua.Methods.TrustListType_RemoveCertificate); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.TrustListOutOfDateAlarmType_ShelvingState_TimedShelve); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_Unshelve Method. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.TrustListOutOfDateAlarmType_ShelvingState_Unshelve); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.TrustListOutOfDateAlarmType_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupType_TrustList_Open Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_Open = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_Open); + + /// + /// The identifier for the CertificateGroupType_TrustList_Close Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_Close = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_Close); + + /// + /// The identifier for the CertificateGroupType_TrustList_Read Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_Read = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_Read); + + /// + /// The identifier for the CertificateGroupType_TrustList_Write Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_Write = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_Write); + + /// + /// The identifier for the CertificateGroupType_TrustList_GetPosition Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_GetPosition); + + /// + /// The identifier for the CertificateGroupType_TrustList_SetPosition Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_SetPosition); + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId CertificateGroupType_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustList_OpenWithMasks); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Disable Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_Disable); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Enable Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_Enable); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AddComment Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_AddComment); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_Acknowledge); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupType_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_Disable); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_Enable); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupType_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Disable); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Enable); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfigurationType_UpdateCertificate Method. + /// + public static readonly NodeId ServerConfigurationType_UpdateCertificate = new NodeId(Opc.Ua.Methods.ServerConfigurationType_UpdateCertificate); + + /// + /// The identifier for the ServerConfigurationType_ApplyChanges Method. + /// + public static readonly NodeId ServerConfigurationType_ApplyChanges = new NodeId(Opc.Ua.Methods.ServerConfigurationType_ApplyChanges); + + /// + /// The identifier for the ServerConfigurationType_CreateSigningRequest Method. + /// + public static readonly NodeId ServerConfigurationType_CreateSigningRequest = new NodeId(Opc.Ua.Methods.ServerConfigurationType_CreateSigningRequest); + + /// + /// The identifier for the ServerConfigurationType_GetRejectedList Method. + /// + public static readonly NodeId ServerConfigurationType_GetRejectedList = new NodeId(Opc.Ua.Methods.ServerConfigurationType_GetRejectedList); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new NodeId(Opc.Ua.Methods.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve); + + /// + /// The identifier for the ServerConfiguration_UpdateCertificate Method. + /// + public static readonly NodeId ServerConfiguration_UpdateCertificate = new NodeId(Opc.Ua.Methods.ServerConfiguration_UpdateCertificate); + + /// + /// The identifier for the ServerConfiguration_ApplyChanges Method. + /// + public static readonly NodeId ServerConfiguration_ApplyChanges = new NodeId(Opc.Ua.Methods.ServerConfiguration_ApplyChanges); + + /// + /// The identifier for the ServerConfiguration_CreateSigningRequest Method. + /// + public static readonly NodeId ServerConfiguration_CreateSigningRequest = new NodeId(Opc.Ua.Methods.ServerConfiguration_CreateSigningRequest); + + /// + /// The identifier for the ServerConfiguration_GetRejectedList Method. + /// + public static readonly NodeId ServerConfiguration_GetRejectedList = new NodeId(Opc.Ua.Methods.ServerConfiguration_GetRejectedList); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_CreateCredential Method. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_CreateCredential = new NodeId(Opc.Ua.Methods.KeyCredentialConfigurationFolderType_CreateCredential); + + /// + /// The identifier for the KeyCredentialConfigurationType_UpdateCredential Method. + /// + public static readonly NodeId KeyCredentialConfigurationType_UpdateCredential = new NodeId(Opc.Ua.Methods.KeyCredentialConfigurationType_UpdateCredential); + + /// + /// The identifier for the KeyCredentialConfigurationType_DeleteCredential Method. + /// + public static readonly NodeId KeyCredentialConfigurationType_DeleteCredential = new NodeId(Opc.Ua.Methods.KeyCredentialConfigurationType_DeleteCredential); + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityKeys Method. + /// + public static readonly NodeId PubSubKeyServiceType_GetSecurityKeys = new NodeId(Opc.Ua.Methods.PubSubKeyServiceType_GetSecurityKeys); + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityGroup Method. + /// + public static readonly NodeId PubSubKeyServiceType_GetSecurityGroup = new NodeId(Opc.Ua.Methods.PubSubKeyServiceType_GetSecurityGroup); + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_AddSecurityGroup Method. + /// + public static readonly NodeId PubSubKeyServiceType_SecurityGroups_AddSecurityGroup = new NodeId(Opc.Ua.Methods.PubSubKeyServiceType_SecurityGroups_AddSecurityGroup); + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup Method. + /// + public static readonly NodeId PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup = new NodeId(Opc.Ua.Methods.PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup Method. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup = new NodeId(Opc.Ua.Methods.SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup Method. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup = new NodeId(Opc.Ua.Methods.SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup); + + /// + /// The identifier for the SecurityGroupFolderType_AddSecurityGroup Method. + /// + public static readonly NodeId SecurityGroupFolderType_AddSecurityGroup = new NodeId(Opc.Ua.Methods.SecurityGroupFolderType_AddSecurityGroup); + + /// + /// The identifier for the SecurityGroupFolderType_RemoveSecurityGroup Method. + /// + public static readonly NodeId SecurityGroupFolderType_RemoveSecurityGroup = new NodeId(Opc.Ua.Methods.SecurityGroupFolderType_RemoveSecurityGroup); + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_AddSecurityGroup Method. + /// + public static readonly NodeId PublishSubscribeType_SecurityGroups_AddSecurityGroup = new NodeId(Opc.Ua.Methods.PublishSubscribeType_SecurityGroups_AddSecurityGroup); + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_RemoveSecurityGroup Method. + /// + public static readonly NodeId PublishSubscribeType_SecurityGroups_RemoveSecurityGroup = new NodeId(Opc.Ua.Methods.PublishSubscribeType_SecurityGroups_RemoveSecurityGroup); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PublishSubscribeType_SetSecurityKeys Method. + /// + public static readonly NodeId PublishSubscribeType_SetSecurityKeys = new NodeId(Opc.Ua.Methods.PublishSubscribeType_SetSecurityKeys); + + /// + /// The identifier for the PublishSubscribeType_AddConnection Method. + /// + public static readonly NodeId PublishSubscribeType_AddConnection = new NodeId(Opc.Ua.Methods.PublishSubscribeType_AddConnection); + + /// + /// The identifier for the PublishSubscribeType_RemoveConnection Method. + /// + public static readonly NodeId PublishSubscribeType_RemoveConnection = new NodeId(Opc.Ua.Methods.PublishSubscribeType_RemoveConnection); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishSubscribeType_Diagnostics_Reset); + + /// + /// The identifier for the PublishSubscribe_GetSecurityKeys Method. + /// + public static readonly NodeId PublishSubscribe_GetSecurityKeys = new NodeId(Opc.Ua.Methods.PublishSubscribe_GetSecurityKeys); + + /// + /// The identifier for the PublishSubscribe_GetSecurityGroup Method. + /// + public static readonly NodeId PublishSubscribe_GetSecurityGroup = new NodeId(Opc.Ua.Methods.PublishSubscribe_GetSecurityGroup); + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_AddSecurityGroup Method. + /// + public static readonly NodeId PublishSubscribe_SecurityGroups_AddSecurityGroup = new NodeId(Opc.Ua.Methods.PublishSubscribe_SecurityGroups_AddSecurityGroup); + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_RemoveSecurityGroup Method. + /// + public static readonly NodeId PublishSubscribe_SecurityGroups_RemoveSecurityGroup = new NodeId(Opc.Ua.Methods.PublishSubscribe_SecurityGroups_RemoveSecurityGroup); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PublishSubscribe_AddConnection Method. + /// + public static readonly NodeId PublishSubscribe_AddConnection = new NodeId(Opc.Ua.Methods.PublishSubscribe_AddConnection); + + /// + /// The identifier for the PublishSubscribe_RemoveConnection Method. + /// + public static readonly NodeId PublishSubscribe_RemoveConnection = new NodeId(Opc.Ua.Methods.PublishSubscribe_RemoveConnection); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishSubscribe_Diagnostics_Reset); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_AddExtensionField Method. + /// + public static readonly NodeId PublishedDataSetType_ExtensionFields_AddExtensionField = new NodeId(Opc.Ua.Methods.PublishedDataSetType_ExtensionFields_AddExtensionField); + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_RemoveExtensionField Method. + /// + public static readonly NodeId PublishedDataSetType_ExtensionFields_RemoveExtensionField = new NodeId(Opc.Ua.Methods.PublishedDataSetType_ExtensionFields_RemoveExtensionField); + + /// + /// The identifier for the ExtensionFieldsType_AddExtensionField Method. + /// + public static readonly NodeId ExtensionFieldsType_AddExtensionField = new NodeId(Opc.Ua.Methods.ExtensionFieldsType_AddExtensionField); + + /// + /// The identifier for the ExtensionFieldsType_RemoveExtensionField Method. + /// + public static readonly NodeId ExtensionFieldsType_RemoveExtensionField = new NodeId(Opc.Ua.Methods.ExtensionFieldsType_RemoveExtensionField); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_AddExtensionField Method. + /// + public static readonly NodeId PublishedDataItemsType_ExtensionFields_AddExtensionField = new NodeId(Opc.Ua.Methods.PublishedDataItemsType_ExtensionFields_AddExtensionField); + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_RemoveExtensionField Method. + /// + public static readonly NodeId PublishedDataItemsType_ExtensionFields_RemoveExtensionField = new NodeId(Opc.Ua.Methods.PublishedDataItemsType_ExtensionFields_RemoveExtensionField); + + /// + /// The identifier for the PublishedDataItemsType_AddVariables Method. + /// + public static readonly NodeId PublishedDataItemsType_AddVariables = new NodeId(Opc.Ua.Methods.PublishedDataItemsType_AddVariables); + + /// + /// The identifier for the PublishedDataItemsType_RemoveVariables Method. + /// + public static readonly NodeId PublishedDataItemsType_RemoveVariables = new NodeId(Opc.Ua.Methods.PublishedDataItemsType_RemoveVariables); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_AddExtensionField Method. + /// + public static readonly NodeId PublishedEventsType_ExtensionFields_AddExtensionField = new NodeId(Opc.Ua.Methods.PublishedEventsType_ExtensionFields_AddExtensionField); + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_RemoveExtensionField Method. + /// + public static readonly NodeId PublishedEventsType_ExtensionFields_RemoveExtensionField = new NodeId(Opc.Ua.Methods.PublishedEventsType_ExtensionFields_RemoveExtensionField); + + /// + /// The identifier for the PublishedEventsType_ModifyFieldSelection Method. + /// + public static readonly NodeId PublishedEventsType_ModifyFieldSelection = new NodeId(Opc.Ua.Methods.PublishedEventsType_ModifyFieldSelection); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder Method. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder = new NodeId(Opc.Ua.Methods.DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField Method. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField = new NodeId(Opc.Ua.Methods.DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField Method. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField = new NodeId(Opc.Ua.Methods.DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField); + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItems Method. + /// + public static readonly NodeId DataSetFolderType_AddPublishedDataItems = new NodeId(Opc.Ua.Methods.DataSetFolderType_AddPublishedDataItems); + + /// + /// The identifier for the DataSetFolderType_AddPublishedEvents Method. + /// + public static readonly NodeId DataSetFolderType_AddPublishedEvents = new NodeId(Opc.Ua.Methods.DataSetFolderType_AddPublishedEvents); + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItemsTemplate Method. + /// + public static readonly NodeId DataSetFolderType_AddPublishedDataItemsTemplate = new NodeId(Opc.Ua.Methods.DataSetFolderType_AddPublishedDataItemsTemplate); + + /// + /// The identifier for the DataSetFolderType_AddPublishedEventsTemplate Method. + /// + public static readonly NodeId DataSetFolderType_AddPublishedEventsTemplate = new NodeId(Opc.Ua.Methods.DataSetFolderType_AddPublishedEventsTemplate); + + /// + /// The identifier for the DataSetFolderType_RemovePublishedDataSet Method. + /// + public static readonly NodeId DataSetFolderType_RemovePublishedDataSet = new NodeId(Opc.Ua.Methods.DataSetFolderType_RemovePublishedDataSet); + + /// + /// The identifier for the DataSetFolderType_AddDataSetFolder Method. + /// + public static readonly NodeId DataSetFolderType_AddDataSetFolder = new NodeId(Opc.Ua.Methods.DataSetFolderType_AddDataSetFolder); + + /// + /// The identifier for the DataSetFolderType_RemoveDataSetFolder Method. + /// + public static readonly NodeId DataSetFolderType_RemoveDataSetFolder = new NodeId(Opc.Ua.Methods.DataSetFolderType_RemoveDataSetFolder); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Reset Method. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.PubSubConnectionType_Diagnostics_Reset); + + /// + /// The identifier for the PubSubConnectionType_AddWriterGroup Method. + /// + public static readonly NodeId PubSubConnectionType_AddWriterGroup = new NodeId(Opc.Ua.Methods.PubSubConnectionType_AddWriterGroup); + + /// + /// The identifier for the PubSubConnectionType_AddReaderGroup Method. + /// + public static readonly NodeId PubSubConnectionType_AddReaderGroup = new NodeId(Opc.Ua.Methods.PubSubConnectionType_AddReaderGroup); + + /// + /// The identifier for the PubSubConnectionType_RemoveGroup Method. + /// + public static readonly NodeId PubSubConnectionType_RemoveGroup = new NodeId(Opc.Ua.Methods.PubSubConnectionType_RemoveGroup); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Reset Method. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.WriterGroupType_Diagnostics_Reset); + + /// + /// The identifier for the WriterGroupType_AddDataSetWriter Method. + /// + public static readonly NodeId WriterGroupType_AddDataSetWriter = new NodeId(Opc.Ua.Methods.WriterGroupType_AddDataSetWriter); + + /// + /// The identifier for the WriterGroupType_RemoveDataSetWriter Method. + /// + public static readonly NodeId WriterGroupType_RemoveDataSetWriter = new NodeId(Opc.Ua.Methods.WriterGroupType_RemoveDataSetWriter); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset Method. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Reset Method. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.ReaderGroupType_Diagnostics_Reset); + + /// + /// The identifier for the ReaderGroupType_AddDataSetReader Method. + /// + public static readonly NodeId ReaderGroupType_AddDataSetReader = new NodeId(Opc.Ua.Methods.ReaderGroupType_AddDataSetReader); + + /// + /// The identifier for the ReaderGroupType_RemoveDataSetReader Method. + /// + public static readonly NodeId ReaderGroupType_RemoveDataSetReader = new NodeId(Opc.Ua.Methods.ReaderGroupType_RemoveDataSetReader); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Reset Method. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.DataSetWriterType_Diagnostics_Reset); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Reset Method. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Reset = new NodeId(Opc.Ua.Methods.DataSetReaderType_Diagnostics_Reset); + + /// + /// The identifier for the DataSetReaderType_CreateTargetVariables Method. + /// + public static readonly NodeId DataSetReaderType_CreateTargetVariables = new NodeId(Opc.Ua.Methods.DataSetReaderType_CreateTargetVariables); + + /// + /// The identifier for the DataSetReaderType_CreateDataSetMirror Method. + /// + public static readonly NodeId DataSetReaderType_CreateDataSetMirror = new NodeId(Opc.Ua.Methods.DataSetReaderType_CreateDataSetMirror); + + /// + /// The identifier for the TargetVariablesType_AddTargetVariables Method. + /// + public static readonly NodeId TargetVariablesType_AddTargetVariables = new NodeId(Opc.Ua.Methods.TargetVariablesType_AddTargetVariables); + + /// + /// The identifier for the TargetVariablesType_RemoveTargetVariables Method. + /// + public static readonly NodeId TargetVariablesType_RemoveTargetVariables = new NodeId(Opc.Ua.Methods.TargetVariablesType_RemoveTargetVariables); + + /// + /// The identifier for the PubSubStatusType_Enable Method. + /// + public static readonly NodeId PubSubStatusType_Enable = new NodeId(Opc.Ua.Methods.PubSubStatusType_Enable); + + /// + /// The identifier for the PubSubStatusType_Disable Method. + /// + public static readonly NodeId PubSubStatusType_Disable = new NodeId(Opc.Ua.Methods.PubSubStatusType_Disable); + + /// + /// The identifier for the PubSubDiagnosticsType_Reset Method. + /// + public static readonly NodeId PubSubDiagnosticsType_Reset = new NodeId(Opc.Ua.Methods.PubSubDiagnosticsType_Reset); + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public static readonly NodeId AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias = new NodeId(Opc.Ua.Methods.AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias); + + /// + /// The identifier for the AliasNameCategoryType_FindAlias Method. + /// + public static readonly NodeId AliasNameCategoryType_FindAlias = new NodeId(Opc.Ua.Methods.AliasNameCategoryType_FindAlias); + + /// + /// The identifier for the Aliases_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public static readonly NodeId Aliases_SubAliasNameCategories_Placeholder_FindAlias = new NodeId(Opc.Ua.Methods.Aliases_SubAliasNameCategories_Placeholder_FindAlias); + + /// + /// The identifier for the Aliases_FindAlias Method. + /// + public static readonly NodeId Aliases_FindAlias = new NodeId(Opc.Ua.Methods.Aliases_FindAlias); + + /// + /// The identifier for the TagVariables_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public static readonly NodeId TagVariables_SubAliasNameCategories_Placeholder_FindAlias = new NodeId(Opc.Ua.Methods.TagVariables_SubAliasNameCategories_Placeholder_FindAlias); + + /// + /// The identifier for the TagVariables_FindAlias Method. + /// + public static readonly NodeId TagVariables_FindAlias = new NodeId(Opc.Ua.Methods.TagVariables_FindAlias); + + /// + /// The identifier for the Topics_SubAliasNameCategories_Placeholder_FindAlias Method. + /// + public static readonly NodeId Topics_SubAliasNameCategories_Placeholder_FindAlias = new NodeId(Opc.Ua.Methods.Topics_SubAliasNameCategories_Placeholder_FindAlias); + + /// + /// The identifier for the Topics_FindAlias Method. + /// + public static readonly NodeId Topics_FindAlias = new NodeId(Opc.Ua.Methods.Topics_FindAlias); + } + #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(Opc.Ua.Objects.DefaultBinary); + + /// + /// The identifier for the DefaultXml Object. + /// + public static readonly NodeId DefaultXml = new NodeId(Opc.Ua.Objects.DefaultXml); + + /// + /// The identifier for the ModellingRule_Mandatory Object. + /// + public static readonly NodeId ModellingRule_Mandatory = new NodeId(Opc.Ua.Objects.ModellingRule_Mandatory); + + /// + /// The identifier for the ModellingRule_Optional Object. + /// + public static readonly NodeId ModellingRule_Optional = new NodeId(Opc.Ua.Objects.ModellingRule_Optional); + + /// + /// The identifier for the ModellingRule_ExposesItsArray Object. + /// + public static readonly NodeId ModellingRule_ExposesItsArray = new NodeId(Opc.Ua.Objects.ModellingRule_ExposesItsArray); + + /// + /// The identifier for the ModellingRule_OptionalPlaceholder Object. + /// + public static readonly NodeId ModellingRule_OptionalPlaceholder = new NodeId(Opc.Ua.Objects.ModellingRule_OptionalPlaceholder); + + /// + /// The identifier for the ModellingRule_MandatoryPlaceholder Object. + /// + public static readonly NodeId ModellingRule_MandatoryPlaceholder = new NodeId(Opc.Ua.Objects.ModellingRule_MandatoryPlaceholder); + + /// + /// The identifier for the RootFolder Object. + /// + public static readonly NodeId RootFolder = new NodeId(Opc.Ua.Objects.RootFolder); + + /// + /// The identifier for the ObjectsFolder Object. + /// + public static readonly NodeId ObjectsFolder = new NodeId(Opc.Ua.Objects.ObjectsFolder); + + /// + /// The identifier for the TypesFolder Object. + /// + public static readonly NodeId TypesFolder = new NodeId(Opc.Ua.Objects.TypesFolder); + + /// + /// The identifier for the ViewsFolder Object. + /// + public static readonly NodeId ViewsFolder = new NodeId(Opc.Ua.Objects.ViewsFolder); + + /// + /// The identifier for the ObjectTypesFolder Object. + /// + public static readonly NodeId ObjectTypesFolder = new NodeId(Opc.Ua.Objects.ObjectTypesFolder); + + /// + /// The identifier for the VariableTypesFolder Object. + /// + public static readonly NodeId VariableTypesFolder = new NodeId(Opc.Ua.Objects.VariableTypesFolder); + + /// + /// The identifier for the DataTypesFolder Object. + /// + public static readonly NodeId DataTypesFolder = new NodeId(Opc.Ua.Objects.DataTypesFolder); + + /// + /// The identifier for the ReferenceTypesFolder Object. + /// + public static readonly NodeId ReferenceTypesFolder = new NodeId(Opc.Ua.Objects.ReferenceTypesFolder); + + /// + /// The identifier for the XmlSchema_TypeSystem Object. + /// + public static readonly NodeId XmlSchema_TypeSystem = new NodeId(Opc.Ua.Objects.XmlSchema_TypeSystem); + + /// + /// The identifier for the OPCBinarySchema_TypeSystem Object. + /// + public static readonly NodeId OPCBinarySchema_TypeSystem = new NodeId(Opc.Ua.Objects.OPCBinarySchema_TypeSystem); + + /// + /// The identifier for the OPCUANamespaceMetadata Object. + /// + public static readonly NodeId OPCUANamespaceMetadata = new NodeId(Opc.Ua.Objects.OPCUANamespaceMetadata); + + /// + /// The identifier for the ServerType_ServerCapabilities Object. + /// + public static readonly NodeId ServerType_ServerCapabilities = new NodeId(Opc.Ua.Objects.ServerType_ServerCapabilities); + + /// + /// The identifier for the ServerType_ServerCapabilities_ModellingRules Object. + /// + public static readonly NodeId ServerType_ServerCapabilities_ModellingRules = new NodeId(Opc.Ua.Objects.ServerType_ServerCapabilities_ModellingRules); + + /// + /// The identifier for the ServerType_ServerCapabilities_AggregateFunctions Object. + /// + public static readonly NodeId ServerType_ServerCapabilities_AggregateFunctions = new NodeId(Opc.Ua.Objects.ServerType_ServerCapabilities_AggregateFunctions); + + /// + /// The identifier for the ServerType_ServerDiagnostics Object. + /// + public static readonly NodeId ServerType_ServerDiagnostics = new NodeId(Opc.Ua.Objects.ServerType_ServerDiagnostics); + + /// + /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary Object. + /// + public static readonly NodeId ServerType_ServerDiagnostics_SessionsDiagnosticsSummary = new NodeId(Opc.Ua.Objects.ServerType_ServerDiagnostics_SessionsDiagnosticsSummary); + + /// + /// The identifier for the ServerType_VendorServerInfo Object. + /// + public static readonly NodeId ServerType_VendorServerInfo = new NodeId(Opc.Ua.Objects.ServerType_VendorServerInfo); + + /// + /// The identifier for the ServerType_ServerRedundancy Object. + /// + public static readonly NodeId ServerType_ServerRedundancy = new NodeId(Opc.Ua.Objects.ServerType_ServerRedundancy); + + /// + /// The identifier for the ServerType_Namespaces Object. + /// + public static readonly NodeId ServerType_Namespaces = new NodeId(Opc.Ua.Objects.ServerType_Namespaces); + + /// + /// The identifier for the ServerCapabilitiesType_OperationLimits Object. + /// + public static readonly NodeId ServerCapabilitiesType_OperationLimits = new NodeId(Opc.Ua.Objects.ServerCapabilitiesType_OperationLimits); + + /// + /// The identifier for the ServerCapabilitiesType_ModellingRules Object. + /// + public static readonly NodeId ServerCapabilitiesType_ModellingRules = new NodeId(Opc.Ua.Objects.ServerCapabilitiesType_ModellingRules); + + /// + /// The identifier for the ServerCapabilitiesType_AggregateFunctions Object. + /// + public static readonly NodeId ServerCapabilitiesType_AggregateFunctions = new NodeId(Opc.Ua.Objects.ServerCapabilitiesType_AggregateFunctions); + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet Object. + /// + public static readonly NodeId ServerCapabilitiesType_RoleSet = new NodeId(Opc.Ua.Objects.ServerCapabilitiesType_RoleSet); + + /// + /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary Object. + /// + public static readonly NodeId ServerDiagnosticsType_SessionsDiagnosticsSummary = new NodeId(Opc.Ua.Objects.ServerDiagnosticsType_SessionsDiagnosticsSummary); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder Object. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder = new NodeId(Opc.Ua.Objects.SessionsDiagnosticsSummaryType_ClientName_Placeholder); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile Object. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile = new NodeId(Opc.Ua.Objects.NamespaceMetadataType_NamespaceFile); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder Object. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder = new NodeId(Opc.Ua.Objects.NamespacesType_NamespaceIdentifier_Placeholder); + + /// + /// The identifier for the EventTypesFolder Object. + /// + public static readonly NodeId EventTypesFolder = new NodeId(Opc.Ua.Objects.EventTypesFolder); + + /// + /// The identifier for the Server Object. + /// + public static readonly NodeId Server = new NodeId(Opc.Ua.Objects.Server); + + /// + /// The identifier for the Server_ServerCapabilities Object. + /// + public static readonly NodeId Server_ServerCapabilities = new NodeId(Opc.Ua.Objects.Server_ServerCapabilities); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits Object. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits = new NodeId(Opc.Ua.Objects.Server_ServerCapabilities_OperationLimits); + + /// + /// The identifier for the Server_ServerCapabilities_ModellingRules Object. + /// + public static readonly NodeId Server_ServerCapabilities_ModellingRules = new NodeId(Opc.Ua.Objects.Server_ServerCapabilities_ModellingRules); + + /// + /// The identifier for the Server_ServerCapabilities_AggregateFunctions Object. + /// + public static readonly NodeId Server_ServerCapabilities_AggregateFunctions = new NodeId(Opc.Ua.Objects.Server_ServerCapabilities_AggregateFunctions); + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet Object. + /// + public static readonly NodeId Server_ServerCapabilities_RoleSet = new NodeId(Opc.Ua.Objects.Server_ServerCapabilities_RoleSet); + + /// + /// The identifier for the Server_ServerDiagnostics Object. + /// + public static readonly NodeId Server_ServerDiagnostics = new NodeId(Opc.Ua.Objects.Server_ServerDiagnostics); + + /// + /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary Object. + /// + public static readonly NodeId Server_ServerDiagnostics_SessionsDiagnosticsSummary = new NodeId(Opc.Ua.Objects.Server_ServerDiagnostics_SessionsDiagnosticsSummary); + + /// + /// The identifier for the Server_VendorServerInfo Object. + /// + public static readonly NodeId Server_VendorServerInfo = new NodeId(Opc.Ua.Objects.Server_VendorServerInfo); + + /// + /// The identifier for the Server_ServerRedundancy Object. + /// + public static readonly NodeId Server_ServerRedundancy = new NodeId(Opc.Ua.Objects.Server_ServerRedundancy); + + /// + /// The identifier for the Server_Namespaces Object. + /// + public static readonly NodeId Server_Namespaces = new NodeId(Opc.Ua.Objects.Server_Namespaces); + + /// + /// The identifier for the HistoryServerCapabilities Object. + /// + public static readonly NodeId HistoryServerCapabilities = new NodeId(Opc.Ua.Objects.HistoryServerCapabilities); + + /// + /// The identifier for the HistoryServerCapabilities_AggregateFunctions Object. + /// + public static readonly NodeId HistoryServerCapabilities_AggregateFunctions = new NodeId(Opc.Ua.Objects.HistoryServerCapabilities_AggregateFunctions); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder Object. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder = new NodeId(Opc.Ua.Objects.FileDirectoryType_FileDirectoryName_Placeholder); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder Object. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder = new NodeId(Opc.Ua.Objects.FileDirectoryType_FileName_Placeholder); + + /// + /// The identifier for the FileSystem Object. + /// + public static readonly NodeId FileSystem = new NodeId(Opc.Ua.Objects.FileSystem); + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder Object. + /// + public static readonly NodeId TemporaryFileTransferType_TransferState_Placeholder = new NodeId(Opc.Ua.Objects.TemporaryFileTransferType_TransferState_Placeholder); + + /// + /// The identifier for the FileTransferStateMachineType_Idle Object. + /// + public static readonly NodeId FileTransferStateMachineType_Idle = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_Idle); + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepare Object. + /// + public static readonly NodeId FileTransferStateMachineType_ReadPrepare = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ReadPrepare); + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransfer Object. + /// + public static readonly NodeId FileTransferStateMachineType_ReadTransfer = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ReadTransfer); + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWrite Object. + /// + public static readonly NodeId FileTransferStateMachineType_ApplyWrite = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ApplyWrite); + + /// + /// The identifier for the FileTransferStateMachineType_Error Object. + /// + public static readonly NodeId FileTransferStateMachineType_Error = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_Error); + + /// + /// The identifier for the FileTransferStateMachineType_IdleToReadPrepare Object. + /// + public static readonly NodeId FileTransferStateMachineType_IdleToReadPrepare = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_IdleToReadPrepare); + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToReadTransfer Object. + /// + public static readonly NodeId FileTransferStateMachineType_ReadPrepareToReadTransfer = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ReadPrepareToReadTransfer); + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToIdle Object. + /// + public static readonly NodeId FileTransferStateMachineType_ReadTransferToIdle = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ReadTransferToIdle); + + /// + /// The identifier for the FileTransferStateMachineType_IdleToApplyWrite Object. + /// + public static readonly NodeId FileTransferStateMachineType_IdleToApplyWrite = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_IdleToApplyWrite); + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToIdle Object. + /// + public static readonly NodeId FileTransferStateMachineType_ApplyWriteToIdle = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ApplyWriteToIdle); + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToError Object. + /// + public static readonly NodeId FileTransferStateMachineType_ReadPrepareToError = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ReadPrepareToError); + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToError Object. + /// + public static readonly NodeId FileTransferStateMachineType_ReadTransferToError = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ReadTransferToError); + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToError Object. + /// + public static readonly NodeId FileTransferStateMachineType_ApplyWriteToError = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ApplyWriteToError); + + /// + /// The identifier for the FileTransferStateMachineType_ErrorToIdle Object. + /// + public static readonly NodeId FileTransferStateMachineType_ErrorToIdle = new NodeId(Opc.Ua.Objects.FileTransferStateMachineType_ErrorToIdle); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder Object. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder = new NodeId(Opc.Ua.Objects.RoleSetType_RoleName_Placeholder); + + /// + /// The identifier for the WellKnownRole_Anonymous Object. + /// + public static readonly NodeId WellKnownRole_Anonymous = new NodeId(Opc.Ua.Objects.WellKnownRole_Anonymous); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser Object. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser = new NodeId(Opc.Ua.Objects.WellKnownRole_AuthenticatedUser); + + /// + /// The identifier for the WellKnownRole_Observer Object. + /// + public static readonly NodeId WellKnownRole_Observer = new NodeId(Opc.Ua.Objects.WellKnownRole_Observer); + + /// + /// The identifier for the WellKnownRole_Operator Object. + /// + public static readonly NodeId WellKnownRole_Operator = new NodeId(Opc.Ua.Objects.WellKnownRole_Operator); + + /// + /// The identifier for the WellKnownRole_Engineer Object. + /// + public static readonly NodeId WellKnownRole_Engineer = new NodeId(Opc.Ua.Objects.WellKnownRole_Engineer); + + /// + /// The identifier for the WellKnownRole_Supervisor Object. + /// + public static readonly NodeId WellKnownRole_Supervisor = new NodeId(Opc.Ua.Objects.WellKnownRole_Supervisor); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin Object. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin = new NodeId(Opc.Ua.Objects.WellKnownRole_ConfigureAdmin); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin Object. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin = new NodeId(Opc.Ua.Objects.WellKnownRole_SecurityAdmin); + + /// + /// The identifier for the DictionaryEntryType_DictionaryEntryName_Placeholder Object. + /// + public static readonly NodeId DictionaryEntryType_DictionaryEntryName_Placeholder = new NodeId(Opc.Ua.Objects.DictionaryEntryType_DictionaryEntryName_Placeholder); + + /// + /// The identifier for the DictionaryFolderType_DictionaryFolderName_Placeholder Object. + /// + public static readonly NodeId DictionaryFolderType_DictionaryFolderName_Placeholder = new NodeId(Opc.Ua.Objects.DictionaryFolderType_DictionaryFolderName_Placeholder); + + /// + /// The identifier for the DictionaryFolderType_DictionaryEntryName_Placeholder Object. + /// + public static readonly NodeId DictionaryFolderType_DictionaryEntryName_Placeholder = new NodeId(Opc.Ua.Objects.DictionaryFolderType_DictionaryEntryName_Placeholder); + + /// + /// The identifier for the Dictionaries Object. + /// + public static readonly NodeId Dictionaries = new NodeId(Opc.Ua.Objects.Dictionaries); + + /// + /// The identifier for the InterfaceTypes Object. + /// + public static readonly NodeId InterfaceTypes = new NodeId(Opc.Ua.Objects.InterfaceTypes); + + /// + /// The identifier for the OrderedListType_OrderedObject_Placeholder Object. + /// + public static readonly NodeId OrderedListType_OrderedObject_Placeholder = new NodeId(Opc.Ua.Objects.OrderedListType_OrderedObject_Placeholder); + + /// + /// The identifier for the AlarmConditionType_ShelvingState Object. + /// + public static readonly NodeId AlarmConditionType_ShelvingState = new NodeId(Opc.Ua.Objects.AlarmConditionType_ShelvingState); + + /// + /// The identifier for the AlarmConditionType_FirstInGroup Object. + /// + public static readonly NodeId AlarmConditionType_FirstInGroup = new NodeId(Opc.Ua.Objects.AlarmConditionType_FirstInGroup); + + /// + /// The identifier for the AlarmConditionType_AlarmGroup_Placeholder Object. + /// + public static readonly NodeId AlarmConditionType_AlarmGroup_Placeholder = new NodeId(Opc.Ua.Objects.AlarmConditionType_AlarmGroup_Placeholder); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder Object. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder = new NodeId(Opc.Ua.Objects.AlarmGroupType_AlarmConditionInstance_Placeholder); + + /// + /// The identifier for the ShelvedStateMachineType_Unshelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_Unshelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_Unshelved); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_TimedShelved); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_OneShotShelved); + + /// + /// The identifier for the ShelvedStateMachineType_UnshelvedToTimedShelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_UnshelvedToTimedShelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_UnshelvedToTimedShelved); + + /// + /// The identifier for the ShelvedStateMachineType_UnshelvedToOneShotShelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_UnshelvedToOneShotShelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_UnshelvedToOneShotShelved); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelvedToUnshelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelvedToUnshelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_TimedShelvedToUnshelved); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelvedToOneShotShelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelvedToOneShotShelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_TimedShelvedToOneShotShelved); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelvedToUnshelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToUnshelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_OneShotShelvedToUnshelved); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelvedToTimedShelved Object. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToTimedShelved = new NodeId(Opc.Ua.Objects.ShelvedStateMachineType_OneShotShelvedToTimedShelved); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_HighHigh Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_HighHigh = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_HighHigh); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_High Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_High = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_High); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_Low Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_Low = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_Low); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LowLow Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LowLow = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_LowLow); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LowLowToLow Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LowLowToLow = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_LowLowToLow); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LowToLowLow Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LowToLowLow = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_LowToLowLow); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_HighHighToHigh Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_HighHighToHigh = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_HighHighToHigh); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_HighToHighHigh Object. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_HighToHighHigh = new NodeId(Opc.Ua.Objects.ExclusiveLimitStateMachineType_HighToHighHigh); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState Object. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LimitState = new NodeId(Opc.Ua.Objects.ExclusiveLimitAlarmType_LimitState); + + /// + /// The identifier for the ProgramStateMachineType_FinalResultData Object. + /// + public static readonly NodeId ProgramStateMachineType_FinalResultData = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_FinalResultData); + + /// + /// The identifier for the ProgramStateMachineType_Halted Object. + /// + public static readonly NodeId ProgramStateMachineType_Halted = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_Halted); + + /// + /// The identifier for the ProgramStateMachineType_Ready Object. + /// + public static readonly NodeId ProgramStateMachineType_Ready = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_Ready); + + /// + /// The identifier for the ProgramStateMachineType_Running Object. + /// + public static readonly NodeId ProgramStateMachineType_Running = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_Running); + + /// + /// The identifier for the ProgramStateMachineType_Suspended Object. + /// + public static readonly NodeId ProgramStateMachineType_Suspended = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_Suspended); + + /// + /// The identifier for the ProgramStateMachineType_HaltedToReady Object. + /// + public static readonly NodeId ProgramStateMachineType_HaltedToReady = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_HaltedToReady); + + /// + /// The identifier for the ProgramStateMachineType_ReadyToRunning Object. + /// + public static readonly NodeId ProgramStateMachineType_ReadyToRunning = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_ReadyToRunning); + + /// + /// The identifier for the ProgramStateMachineType_RunningToHalted Object. + /// + public static readonly NodeId ProgramStateMachineType_RunningToHalted = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_RunningToHalted); + + /// + /// The identifier for the ProgramStateMachineType_RunningToReady Object. + /// + public static readonly NodeId ProgramStateMachineType_RunningToReady = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_RunningToReady); + + /// + /// The identifier for the ProgramStateMachineType_RunningToSuspended Object. + /// + public static readonly NodeId ProgramStateMachineType_RunningToSuspended = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_RunningToSuspended); + + /// + /// The identifier for the ProgramStateMachineType_SuspendedToRunning Object. + /// + public static readonly NodeId ProgramStateMachineType_SuspendedToRunning = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_SuspendedToRunning); + + /// + /// The identifier for the ProgramStateMachineType_SuspendedToHalted Object. + /// + public static readonly NodeId ProgramStateMachineType_SuspendedToHalted = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_SuspendedToHalted); + + /// + /// The identifier for the ProgramStateMachineType_SuspendedToReady Object. + /// + public static readonly NodeId ProgramStateMachineType_SuspendedToReady = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_SuspendedToReady); + + /// + /// The identifier for the ProgramStateMachineType_ReadyToHalted Object. + /// + public static readonly NodeId ProgramStateMachineType_ReadyToHalted = new NodeId(Opc.Ua.Objects.ProgramStateMachineType_ReadyToHalted); + + /// + /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration Object. + /// + public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration = new NodeId(Opc.Ua.Objects.HistoricalDataConfigurationType_AggregateConfiguration); + + /// + /// The identifier for the HistoricalDataConfigurationType_AggregateFunctions Object. + /// + public static readonly NodeId HistoricalDataConfigurationType_AggregateFunctions = new NodeId(Opc.Ua.Objects.HistoricalDataConfigurationType_AggregateFunctions); + + /// + /// The identifier for the HAConfiguration Object. + /// + public static readonly NodeId HAConfiguration = new NodeId(Opc.Ua.Objects.HAConfiguration); + + /// + /// The identifier for the HAConfiguration_AggregateConfiguration Object. + /// + public static readonly NodeId HAConfiguration_AggregateConfiguration = new NodeId(Opc.Ua.Objects.HAConfiguration_AggregateConfiguration); + + /// + /// The identifier for the HistoryServerCapabilitiesType_AggregateFunctions Object. + /// + public static readonly NodeId HistoryServerCapabilitiesType_AggregateFunctions = new NodeId(Opc.Ua.Objects.HistoryServerCapabilitiesType_AggregateFunctions); + + /// + /// The identifier for the CertificateGroupType_TrustList Object. + /// + public static readonly NodeId CertificateGroupType_TrustList = new NodeId(Opc.Ua.Objects.CertificateGroupType_TrustList); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired Object. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired = new NodeId(Opc.Ua.Objects.CertificateGroupType_CertificateExpired); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate Object. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate = new NodeId(Opc.Ua.Objects.CertificateGroupType_TrustListOutOfDate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup Object. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_DefaultApplicationGroup); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList Object. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_DefaultApplicationGroup_TrustList); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup Object. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_DefaultHttpsGroup); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList Object. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_DefaultHttpsGroup_TrustList); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup Object. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_DefaultUserTokenGroup); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList Object. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder Object. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_AdditionalGroup_Placeholder); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList Object. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList = new NodeId(Opc.Ua.Objects.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups Object. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups = new NodeId(Opc.Ua.Objects.ServerConfigurationType_CertificateGroups); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup Object. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup = new NodeId(Opc.Ua.Objects.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList = new NodeId(Opc.Ua.Objects.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList = new NodeId(Opc.Ua.Objects.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList = new NodeId(Opc.Ua.Objects.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList); + + /// + /// The identifier for the ServerConfiguration Object. + /// + public static readonly NodeId ServerConfiguration = new NodeId(Opc.Ua.Objects.ServerConfiguration); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups_DefaultApplicationGroup); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups_DefaultHttpsGroup); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList = new NodeId(Opc.Ua.Objects.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder Object. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_ServiceName_Placeholder = new NodeId(Opc.Ua.Objects.KeyCredentialConfigurationFolderType_ServiceName_Placeholder); + + /// + /// The identifier for the KeyCredentialConfiguration Object. + /// + public static readonly NodeId KeyCredentialConfiguration = new NodeId(Opc.Ua.Objects.KeyCredentialConfiguration); + + /// + /// The identifier for the AuthorizationServices Object. + /// + public static readonly NodeId AuthorizationServices = new NodeId(Opc.Ua.Objects.AuthorizationServices); + + /// + /// The identifier for the AggregateFunction_Interpolative Object. + /// + public static readonly NodeId AggregateFunction_Interpolative = new NodeId(Opc.Ua.Objects.AggregateFunction_Interpolative); + + /// + /// The identifier for the AggregateFunction_Average Object. + /// + public static readonly NodeId AggregateFunction_Average = new NodeId(Opc.Ua.Objects.AggregateFunction_Average); + + /// + /// The identifier for the AggregateFunction_TimeAverage Object. + /// + public static readonly NodeId AggregateFunction_TimeAverage = new NodeId(Opc.Ua.Objects.AggregateFunction_TimeAverage); + + /// + /// The identifier for the AggregateFunction_TimeAverage2 Object. + /// + public static readonly NodeId AggregateFunction_TimeAverage2 = new NodeId(Opc.Ua.Objects.AggregateFunction_TimeAverage2); + + /// + /// The identifier for the AggregateFunction_Total Object. + /// + public static readonly NodeId AggregateFunction_Total = new NodeId(Opc.Ua.Objects.AggregateFunction_Total); + + /// + /// The identifier for the AggregateFunction_Total2 Object. + /// + public static readonly NodeId AggregateFunction_Total2 = new NodeId(Opc.Ua.Objects.AggregateFunction_Total2); + + /// + /// The identifier for the AggregateFunction_Minimum Object. + /// + public static readonly NodeId AggregateFunction_Minimum = new NodeId(Opc.Ua.Objects.AggregateFunction_Minimum); + + /// + /// The identifier for the AggregateFunction_Maximum Object. + /// + public static readonly NodeId AggregateFunction_Maximum = new NodeId(Opc.Ua.Objects.AggregateFunction_Maximum); + + /// + /// The identifier for the AggregateFunction_MinimumActualTime Object. + /// + public static readonly NodeId AggregateFunction_MinimumActualTime = new NodeId(Opc.Ua.Objects.AggregateFunction_MinimumActualTime); + + /// + /// The identifier for the AggregateFunction_MaximumActualTime Object. + /// + public static readonly NodeId AggregateFunction_MaximumActualTime = new NodeId(Opc.Ua.Objects.AggregateFunction_MaximumActualTime); + + /// + /// The identifier for the AggregateFunction_Range Object. + /// + public static readonly NodeId AggregateFunction_Range = new NodeId(Opc.Ua.Objects.AggregateFunction_Range); + + /// + /// The identifier for the AggregateFunction_Minimum2 Object. + /// + public static readonly NodeId AggregateFunction_Minimum2 = new NodeId(Opc.Ua.Objects.AggregateFunction_Minimum2); + + /// + /// The identifier for the AggregateFunction_Maximum2 Object. + /// + public static readonly NodeId AggregateFunction_Maximum2 = new NodeId(Opc.Ua.Objects.AggregateFunction_Maximum2); + + /// + /// The identifier for the AggregateFunction_MinimumActualTime2 Object. + /// + public static readonly NodeId AggregateFunction_MinimumActualTime2 = new NodeId(Opc.Ua.Objects.AggregateFunction_MinimumActualTime2); + + /// + /// The identifier for the AggregateFunction_MaximumActualTime2 Object. + /// + public static readonly NodeId AggregateFunction_MaximumActualTime2 = new NodeId(Opc.Ua.Objects.AggregateFunction_MaximumActualTime2); + + /// + /// The identifier for the AggregateFunction_Range2 Object. + /// + public static readonly NodeId AggregateFunction_Range2 = new NodeId(Opc.Ua.Objects.AggregateFunction_Range2); + + /// + /// The identifier for the AggregateFunction_AnnotationCount Object. + /// + public static readonly NodeId AggregateFunction_AnnotationCount = new NodeId(Opc.Ua.Objects.AggregateFunction_AnnotationCount); + + /// + /// The identifier for the AggregateFunction_Count Object. + /// + public static readonly NodeId AggregateFunction_Count = new NodeId(Opc.Ua.Objects.AggregateFunction_Count); + + /// + /// The identifier for the AggregateFunction_DurationInStateZero Object. + /// + public static readonly NodeId AggregateFunction_DurationInStateZero = new NodeId(Opc.Ua.Objects.AggregateFunction_DurationInStateZero); + + /// + /// The identifier for the AggregateFunction_DurationInStateNonZero Object. + /// + public static readonly NodeId AggregateFunction_DurationInStateNonZero = new NodeId(Opc.Ua.Objects.AggregateFunction_DurationInStateNonZero); + + /// + /// The identifier for the AggregateFunction_NumberOfTransitions Object. + /// + public static readonly NodeId AggregateFunction_NumberOfTransitions = new NodeId(Opc.Ua.Objects.AggregateFunction_NumberOfTransitions); + + /// + /// The identifier for the AggregateFunction_Start Object. + /// + public static readonly NodeId AggregateFunction_Start = new NodeId(Opc.Ua.Objects.AggregateFunction_Start); + + /// + /// The identifier for the AggregateFunction_End Object. + /// + public static readonly NodeId AggregateFunction_End = new NodeId(Opc.Ua.Objects.AggregateFunction_End); + + /// + /// The identifier for the AggregateFunction_Delta Object. + /// + public static readonly NodeId AggregateFunction_Delta = new NodeId(Opc.Ua.Objects.AggregateFunction_Delta); + + /// + /// The identifier for the AggregateFunction_StartBound Object. + /// + public static readonly NodeId AggregateFunction_StartBound = new NodeId(Opc.Ua.Objects.AggregateFunction_StartBound); + + /// + /// The identifier for the AggregateFunction_EndBound Object. + /// + public static readonly NodeId AggregateFunction_EndBound = new NodeId(Opc.Ua.Objects.AggregateFunction_EndBound); + + /// + /// The identifier for the AggregateFunction_DeltaBounds Object. + /// + public static readonly NodeId AggregateFunction_DeltaBounds = new NodeId(Opc.Ua.Objects.AggregateFunction_DeltaBounds); + + /// + /// The identifier for the AggregateFunction_DurationGood Object. + /// + public static readonly NodeId AggregateFunction_DurationGood = new NodeId(Opc.Ua.Objects.AggregateFunction_DurationGood); + + /// + /// The identifier for the AggregateFunction_DurationBad Object. + /// + public static readonly NodeId AggregateFunction_DurationBad = new NodeId(Opc.Ua.Objects.AggregateFunction_DurationBad); + + /// + /// The identifier for the AggregateFunction_PercentGood Object. + /// + public static readonly NodeId AggregateFunction_PercentGood = new NodeId(Opc.Ua.Objects.AggregateFunction_PercentGood); + + /// + /// The identifier for the AggregateFunction_PercentBad Object. + /// + public static readonly NodeId AggregateFunction_PercentBad = new NodeId(Opc.Ua.Objects.AggregateFunction_PercentBad); + + /// + /// The identifier for the AggregateFunction_WorstQuality Object. + /// + public static readonly NodeId AggregateFunction_WorstQuality = new NodeId(Opc.Ua.Objects.AggregateFunction_WorstQuality); + + /// + /// The identifier for the AggregateFunction_WorstQuality2 Object. + /// + public static readonly NodeId AggregateFunction_WorstQuality2 = new NodeId(Opc.Ua.Objects.AggregateFunction_WorstQuality2); + + /// + /// The identifier for the AggregateFunction_StandardDeviationSample Object. + /// + public static readonly NodeId AggregateFunction_StandardDeviationSample = new NodeId(Opc.Ua.Objects.AggregateFunction_StandardDeviationSample); + + /// + /// The identifier for the AggregateFunction_StandardDeviationPopulation Object. + /// + public static readonly NodeId AggregateFunction_StandardDeviationPopulation = new NodeId(Opc.Ua.Objects.AggregateFunction_StandardDeviationPopulation); + + /// + /// The identifier for the AggregateFunction_VarianceSample Object. + /// + public static readonly NodeId AggregateFunction_VarianceSample = new NodeId(Opc.Ua.Objects.AggregateFunction_VarianceSample); + + /// + /// The identifier for the AggregateFunction_VariancePopulation Object. + /// + public static readonly NodeId AggregateFunction_VariancePopulation = new NodeId(Opc.Ua.Objects.AggregateFunction_VariancePopulation); + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups Object. + /// + public static readonly NodeId PubSubKeyServiceType_SecurityGroups = new NodeId(Opc.Ua.Objects.PubSubKeyServiceType_SecurityGroups); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder Object. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupFolderName_Placeholder = new NodeId(Opc.Ua.Objects.SecurityGroupFolderType_SecurityGroupFolderName_Placeholder); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder Object. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupName_Placeholder = new NodeId(Opc.Ua.Objects.SecurityGroupFolderType_SecurityGroupName_Placeholder); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder Object. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder = new NodeId(Opc.Ua.Objects.PublishSubscribeType_ConnectionName_Placeholder); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Address Object. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Address = new NodeId(Opc.Ua.Objects.PublishSubscribeType_ConnectionName_Placeholder_Address); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Status Object. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PublishSubscribeType_ConnectionName_Placeholder_Status); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets Object. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets = new NodeId(Opc.Ua.Objects.PublishSubscribeType_PublishedDataSets); + + /// + /// The identifier for the PublishSubscribeType_Status Object. + /// + public static readonly NodeId PublishSubscribeType_Status = new NodeId(Opc.Ua.Objects.PublishSubscribeType_Status); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics Object. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics = new NodeId(Opc.Ua.Objects.PublishSubscribeType_Diagnostics); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishSubscribeType_Diagnostics_Counters); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishSubscribeType_Diagnostics_LiveValues); + + /// + /// The identifier for the PublishSubscribe Object. + /// + public static readonly NodeId PublishSubscribe = new NodeId(Opc.Ua.Objects.PublishSubscribe); + + /// + /// The identifier for the PublishSubscribe_SecurityGroups Object. + /// + public static readonly NodeId PublishSubscribe_SecurityGroups = new NodeId(Opc.Ua.Objects.PublishSubscribe_SecurityGroups); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Address Object. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Address = new NodeId(Opc.Ua.Objects.PublishSubscribe_ConnectionName_Placeholder_Address); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Status Object. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PublishSubscribe_ConnectionName_Placeholder_Status); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets Object. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets = new NodeId(Opc.Ua.Objects.PublishSubscribe_PublishedDataSets); + + /// + /// The identifier for the PublishSubscribe_Status Object. + /// + public static readonly NodeId PublishSubscribe_Status = new NodeId(Opc.Ua.Objects.PublishSubscribe_Status); + + /// + /// The identifier for the PublishSubscribe_Diagnostics Object. + /// + public static readonly NodeId PublishSubscribe_Diagnostics = new NodeId(Opc.Ua.Objects.PublishSubscribe_Diagnostics); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishSubscribe_Diagnostics_Counters); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishSubscribe_Diagnostics_LiveValues); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder Object. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder = new NodeId(Opc.Ua.Objects.PublishedDataSetType_DataSetWriterName_Placeholder); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Status Object. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PublishedDataSetType_DataSetWriterName_Placeholder_Status); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields Object. + /// + public static readonly NodeId PublishedDataSetType_ExtensionFields = new NodeId(Opc.Ua.Objects.PublishedDataSetType_ExtensionFields); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Status Object. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PublishedDataItemsType_DataSetWriterName_Placeholder_Status); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Status Object. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PublishedEventsType_DataSetWriterName_Placeholder_Status); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder Object. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder = new NodeId(Opc.Ua.Objects.DataSetFolderType_DataSetFolderName_Placeholder); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder Object. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder = new NodeId(Opc.Ua.Objects.DataSetFolderType_PublishedDataSetName_Placeholder); + + /// + /// The identifier for the PubSubConnectionType_Address Object. + /// + public static readonly NodeId PubSubConnectionType_Address = new NodeId(Opc.Ua.Objects.PubSubConnectionType_Address); + + /// + /// The identifier for the PubSubConnectionType_TransportSettings Object. + /// + public static readonly NodeId PubSubConnectionType_TransportSettings = new NodeId(Opc.Ua.Objects.PubSubConnectionType_TransportSettings); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder Object. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder = new NodeId(Opc.Ua.Objects.PubSubConnectionType_WriterGroupName_Placeholder); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Status Object. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PubSubConnectionType_WriterGroupName_Placeholder_Status); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder Object. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder = new NodeId(Opc.Ua.Objects.PubSubConnectionType_ReaderGroupName_Placeholder); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Status Object. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Status = new NodeId(Opc.Ua.Objects.PubSubConnectionType_ReaderGroupName_Placeholder_Status); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the PubSubConnectionType_Status Object. + /// + public static readonly NodeId PubSubConnectionType_Status = new NodeId(Opc.Ua.Objects.PubSubConnectionType_Status); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics Object. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics = new NodeId(Opc.Ua.Objects.PubSubConnectionType_Diagnostics); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters Object. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.PubSubConnectionType_Diagnostics_Counters); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_LiveValues Object. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.PubSubConnectionType_Diagnostics_LiveValues); + + /// + /// The identifier for the PubSubGroupType_Status Object. + /// + public static readonly NodeId PubSubGroupType_Status = new NodeId(Opc.Ua.Objects.PubSubGroupType_Status); + + /// + /// The identifier for the WriterGroupType_TransportSettings Object. + /// + public static readonly NodeId WriterGroupType_TransportSettings = new NodeId(Opc.Ua.Objects.WriterGroupType_TransportSettings); + + /// + /// The identifier for the WriterGroupType_MessageSettings Object. + /// + public static readonly NodeId WriterGroupType_MessageSettings = new NodeId(Opc.Ua.Objects.WriterGroupType_MessageSettings); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder Object. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder = new NodeId(Opc.Ua.Objects.WriterGroupType_DataSetWriterName_Placeholder); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Status Object. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Status = new NodeId(Opc.Ua.Objects.WriterGroupType_DataSetWriterName_Placeholder_Status); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the WriterGroupType_Diagnostics Object. + /// + public static readonly NodeId WriterGroupType_Diagnostics = new NodeId(Opc.Ua.Objects.WriterGroupType_Diagnostics); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters Object. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.WriterGroupType_Diagnostics_Counters); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues Object. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.WriterGroupType_Diagnostics_LiveValues); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder Object. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder = new NodeId(Opc.Ua.Objects.ReaderGroupType_DataSetReaderName_Placeholder); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Status Object. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Status = new NodeId(Opc.Ua.Objects.ReaderGroupType_DataSetReaderName_Placeholder_Status); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters Object. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues Object. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet Object. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet = new NodeId(Opc.Ua.Objects.ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet); + + /// + /// The identifier for the ReaderGroupType_Diagnostics Object. + /// + public static readonly NodeId ReaderGroupType_Diagnostics = new NodeId(Opc.Ua.Objects.ReaderGroupType_Diagnostics); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters Object. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.ReaderGroupType_Diagnostics_Counters); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues Object. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.ReaderGroupType_Diagnostics_LiveValues); + + /// + /// The identifier for the ReaderGroupType_TransportSettings Object. + /// + public static readonly NodeId ReaderGroupType_TransportSettings = new NodeId(Opc.Ua.Objects.ReaderGroupType_TransportSettings); + + /// + /// The identifier for the ReaderGroupType_MessageSettings Object. + /// + public static readonly NodeId ReaderGroupType_MessageSettings = new NodeId(Opc.Ua.Objects.ReaderGroupType_MessageSettings); + + /// + /// The identifier for the DataSetWriterType_TransportSettings Object. + /// + public static readonly NodeId DataSetWriterType_TransportSettings = new NodeId(Opc.Ua.Objects.DataSetWriterType_TransportSettings); + + /// + /// The identifier for the DataSetWriterType_MessageSettings Object. + /// + public static readonly NodeId DataSetWriterType_MessageSettings = new NodeId(Opc.Ua.Objects.DataSetWriterType_MessageSettings); + + /// + /// The identifier for the DataSetWriterType_Status Object. + /// + public static readonly NodeId DataSetWriterType_Status = new NodeId(Opc.Ua.Objects.DataSetWriterType_Status); + + /// + /// The identifier for the DataSetWriterType_Diagnostics Object. + /// + public static readonly NodeId DataSetWriterType_Diagnostics = new NodeId(Opc.Ua.Objects.DataSetWriterType_Diagnostics); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters Object. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.DataSetWriterType_Diagnostics_Counters); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues Object. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.DataSetWriterType_Diagnostics_LiveValues); + + /// + /// The identifier for the DataSetReaderType_TransportSettings Object. + /// + public static readonly NodeId DataSetReaderType_TransportSettings = new NodeId(Opc.Ua.Objects.DataSetReaderType_TransportSettings); + + /// + /// The identifier for the DataSetReaderType_MessageSettings Object. + /// + public static readonly NodeId DataSetReaderType_MessageSettings = new NodeId(Opc.Ua.Objects.DataSetReaderType_MessageSettings); + + /// + /// The identifier for the DataSetReaderType_Status Object. + /// + public static readonly NodeId DataSetReaderType_Status = new NodeId(Opc.Ua.Objects.DataSetReaderType_Status); + + /// + /// The identifier for the DataSetReaderType_Diagnostics Object. + /// + public static readonly NodeId DataSetReaderType_Diagnostics = new NodeId(Opc.Ua.Objects.DataSetReaderType_Diagnostics); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters Object. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters = new NodeId(Opc.Ua.Objects.DataSetReaderType_Diagnostics_Counters); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues Object. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues = new NodeId(Opc.Ua.Objects.DataSetReaderType_Diagnostics_LiveValues); + + /// + /// The identifier for the DataSetReaderType_SubscribedDataSet Object. + /// + public static readonly NodeId DataSetReaderType_SubscribedDataSet = new NodeId(Opc.Ua.Objects.DataSetReaderType_SubscribedDataSet); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters Object. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsType_Counters); + + /// + /// The identifier for the PubSubDiagnosticsType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsType_LiveValues); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsRootType_LiveValues); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsConnectionType_LiveValues); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters Object. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsWriterGroupType_Counters); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsWriterGroupType_LiveValues); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters Object. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsReaderGroupType_Counters); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsReaderGroupType_LiveValues); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters Object. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsDataSetWriterType_Counters); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsDataSetWriterType_LiveValues); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters Object. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsDataSetReaderType_Counters); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues Object. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues = new NodeId(Opc.Ua.Objects.PubSubDiagnosticsDataSetReaderType_LiveValues); + + /// + /// The identifier for the DatagramConnectionTransportType_DiscoveryAddress Object. + /// + public static readonly NodeId DatagramConnectionTransportType_DiscoveryAddress = new NodeId(Opc.Ua.Objects.DatagramConnectionTransportType_DiscoveryAddress); + + /// + /// The identifier for the AliasNameCategoryType_Alias_Placeholder Object. + /// + public static readonly NodeId AliasNameCategoryType_Alias_Placeholder = new NodeId(Opc.Ua.Objects.AliasNameCategoryType_Alias_Placeholder); + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder Object. + /// + public static readonly NodeId AliasNameCategoryType_SubAliasNameCategories_Placeholder = new NodeId(Opc.Ua.Objects.AliasNameCategoryType_SubAliasNameCategories_Placeholder); + + /// + /// The identifier for the Aliases Object. + /// + public static readonly NodeId Aliases = new NodeId(Opc.Ua.Objects.Aliases); + + /// + /// The identifier for the TagVariables Object. + /// + public static readonly NodeId TagVariables = new NodeId(Opc.Ua.Objects.TagVariables); + + /// + /// The identifier for the Topics Object. + /// + public static readonly NodeId Topics = new NodeId(Opc.Ua.Objects.Topics); + + /// + /// The identifier for the KeyValuePair_Encoding_DefaultBinary Object. + /// + public static readonly NodeId KeyValuePair_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.KeyValuePair_Encoding_DefaultBinary); + + /// + /// The identifier for the EndpointType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EndpointType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EndpointType_Encoding_DefaultBinary); + + /// + /// The identifier for the RationalNumber_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RationalNumber_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RationalNumber_Encoding_DefaultBinary); + + /// + /// The identifier for the Vector_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Vector_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Vector_Encoding_DefaultBinary); + + /// + /// The identifier for the ThreeDVector_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ThreeDVector_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ThreeDVector_Encoding_DefaultBinary); + + /// + /// The identifier for the CartesianCoordinates_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CartesianCoordinates_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CartesianCoordinates_Encoding_DefaultBinary); + + /// + /// The identifier for the ThreeDCartesianCoordinates_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ThreeDCartesianCoordinates_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ThreeDCartesianCoordinates_Encoding_DefaultBinary); + + /// + /// The identifier for the Orientation_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Orientation_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Orientation_Encoding_DefaultBinary); + + /// + /// The identifier for the ThreeDOrientation_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ThreeDOrientation_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ThreeDOrientation_Encoding_DefaultBinary); + + /// + /// The identifier for the Frame_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Frame_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Frame_Encoding_DefaultBinary); + + /// + /// The identifier for the ThreeDFrame_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ThreeDFrame_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ThreeDFrame_Encoding_DefaultBinary); + + /// + /// The identifier for the IdentityMappingRuleType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId IdentityMappingRuleType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.IdentityMappingRuleType_Encoding_DefaultBinary); + + /// + /// The identifier for the CurrencyUnitType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CurrencyUnitType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CurrencyUnitType_Encoding_DefaultBinary); + + /// + /// The identifier for the TrustListDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TrustListDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TrustListDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DecimalDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DecimalDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DecimalDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataTypeSchemaHeader_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataTypeSchemaHeader_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataTypeSchemaHeader_Encoding_DefaultBinary); + + /// + /// The identifier for the DataTypeDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataTypeDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataTypeDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the StructureDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId StructureDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.StructureDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the EnumDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EnumDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EnumDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the SimpleTypeDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SimpleTypeDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SimpleTypeDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the UABinaryFileDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UABinaryFileDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UABinaryFileDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetMetaDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetMetaDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetMetaDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the FieldMetaData_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FieldMetaData_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FieldMetaData_Encoding_DefaultBinary); + + /// + /// The identifier for the ConfigurationVersionDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ConfigurationVersionDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ConfigurationVersionDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishedDataSetDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishedDataSetDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishedDataSetDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishedDataSetSourceDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishedDataSetSourceDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishedDataSetSourceDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishedVariableDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishedVariableDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishedVariableDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishedDataItemsDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishedDataItemsDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishedDataItemsDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishedEventsDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishedEventsDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishedEventsDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetWriterDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetWriterDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetWriterDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetWriterTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetWriterTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetWriterTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetWriterMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetWriterMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetWriterMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PubSubGroupDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PubSubGroupDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PubSubGroupDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the WriterGroupDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId WriterGroupDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.WriterGroupDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the WriterGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId WriterGroupTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.WriterGroupTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the WriterGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId WriterGroupMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.WriterGroupMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PubSubConnectionDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PubSubConnectionDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PubSubConnectionDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ConnectionTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ConnectionTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ConnectionTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the NetworkAddressDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NetworkAddressDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NetworkAddressDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the NetworkAddressUrlDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NetworkAddressUrlDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NetworkAddressUrlDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ReaderGroupDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReaderGroupDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReaderGroupDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ReaderGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReaderGroupTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReaderGroupTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ReaderGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReaderGroupMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReaderGroupMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetReaderDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetReaderDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetReaderDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetReaderTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetReaderTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetReaderTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataSetReaderMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataSetReaderMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataSetReaderMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the SubscribedDataSetDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SubscribedDataSetDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SubscribedDataSetDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the TargetVariablesDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TargetVariablesDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TargetVariablesDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the FieldTargetDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FieldTargetDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FieldTargetDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the SubscribedDataSetMirrorDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SubscribedDataSetMirrorDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SubscribedDataSetMirrorDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the PubSubConfigurationDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PubSubConfigurationDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PubSubConfigurationDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the UadpWriterGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UadpWriterGroupMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UadpWriterGroupMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the UadpDataSetWriterMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UadpDataSetWriterMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UadpDataSetWriterMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the UadpDataSetReaderMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UadpDataSetReaderMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UadpDataSetReaderMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the JsonWriterGroupMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId JsonWriterGroupMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.JsonWriterGroupMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the JsonDataSetWriterMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId JsonDataSetWriterMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.JsonDataSetWriterMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the JsonDataSetReaderMessageDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId JsonDataSetReaderMessageDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.JsonDataSetReaderMessageDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DatagramConnectionTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DatagramConnectionTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DatagramConnectionTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the DatagramWriterGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DatagramWriterGroupTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DatagramWriterGroupTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the BrokerConnectionTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrokerConnectionTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrokerConnectionTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the BrokerWriterGroupTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrokerWriterGroupTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrokerWriterGroupTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the AliasNameDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AliasNameDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AliasNameDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the RolePermissionType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RolePermissionType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RolePermissionType_Encoding_DefaultBinary); + + /// + /// The identifier for the DataTypeDefinition_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataTypeDefinition_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataTypeDefinition_Encoding_DefaultBinary); + + /// + /// The identifier for the StructureField_Encoding_DefaultBinary Object. + /// + public static readonly NodeId StructureField_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.StructureField_Encoding_DefaultBinary); + + /// + /// The identifier for the StructureDefinition_Encoding_DefaultBinary Object. + /// + public static readonly NodeId StructureDefinition_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.StructureDefinition_Encoding_DefaultBinary); + + /// + /// The identifier for the EnumDefinition_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EnumDefinition_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EnumDefinition_Encoding_DefaultBinary); + + /// + /// The identifier for the Node_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Node_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Node_Encoding_DefaultBinary); + + /// + /// The identifier for the InstanceNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId InstanceNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.InstanceNode_Encoding_DefaultBinary); + + /// + /// The identifier for the TypeNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TypeNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TypeNode_Encoding_DefaultBinary); + + /// + /// The identifier for the ObjectNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ObjectNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ObjectNode_Encoding_DefaultBinary); + + /// + /// The identifier for the ObjectTypeNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ObjectTypeNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ObjectTypeNode_Encoding_DefaultBinary); + + /// + /// The identifier for the VariableNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId VariableNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.VariableNode_Encoding_DefaultBinary); + + /// + /// The identifier for the VariableTypeNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId VariableTypeNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.VariableTypeNode_Encoding_DefaultBinary); + + /// + /// The identifier for the ReferenceTypeNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReferenceTypeNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReferenceTypeNode_Encoding_DefaultBinary); + + /// + /// The identifier for the MethodNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MethodNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MethodNode_Encoding_DefaultBinary); + + /// + /// The identifier for the ViewNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ViewNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ViewNode_Encoding_DefaultBinary); + + /// + /// The identifier for the DataTypeNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataTypeNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataTypeNode_Encoding_DefaultBinary); + + /// + /// The identifier for the ReferenceNode_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReferenceNode_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReferenceNode_Encoding_DefaultBinary); + + /// + /// The identifier for the Argument_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Argument_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Argument_Encoding_DefaultBinary); + + /// + /// The identifier for the EnumValueType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EnumValueType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EnumValueType_Encoding_DefaultBinary); + + /// + /// The identifier for the EnumField_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EnumField_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EnumField_Encoding_DefaultBinary); + + /// + /// The identifier for the OptionSet_Encoding_DefaultBinary Object. + /// + public static readonly NodeId OptionSet_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.OptionSet_Encoding_DefaultBinary); + + /// + /// The identifier for the Union_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Union_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Union_Encoding_DefaultBinary); + + /// + /// The identifier for the TimeZoneDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TimeZoneDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TimeZoneDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ApplicationDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ApplicationDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ApplicationDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the RequestHeader_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RequestHeader_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RequestHeader_Encoding_DefaultBinary); + + /// + /// The identifier for the ResponseHeader_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ResponseHeader_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ResponseHeader_Encoding_DefaultBinary); + + /// + /// The identifier for the ServiceFault_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ServiceFault_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ServiceFault_Encoding_DefaultBinary); + + /// + /// The identifier for the SessionlessInvokeRequestType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SessionlessInvokeRequestType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SessionlessInvokeRequestType_Encoding_DefaultBinary); + + /// + /// The identifier for the SessionlessInvokeResponseType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SessionlessInvokeResponseType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SessionlessInvokeResponseType_Encoding_DefaultBinary); + + /// + /// The identifier for the FindServersRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FindServersRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FindServersRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the FindServersResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FindServersResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FindServersResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the ServerOnNetwork_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ServerOnNetwork_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ServerOnNetwork_Encoding_DefaultBinary); + + /// + /// The identifier for the FindServersOnNetworkRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FindServersOnNetworkRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FindServersOnNetworkRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the FindServersOnNetworkResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FindServersOnNetworkResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FindServersOnNetworkResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the UserTokenPolicy_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UserTokenPolicy_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UserTokenPolicy_Encoding_DefaultBinary); + + /// + /// The identifier for the EndpointDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EndpointDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EndpointDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the GetEndpointsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId GetEndpointsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.GetEndpointsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the GetEndpointsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId GetEndpointsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.GetEndpointsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisteredServer_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisteredServer_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisteredServer_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisterServerRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisterServerRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisterServerRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisterServerResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisterServerResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisterServerResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the DiscoveryConfiguration_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DiscoveryConfiguration_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DiscoveryConfiguration_Encoding_DefaultBinary); + + /// + /// The identifier for the MdnsDiscoveryConfiguration_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MdnsDiscoveryConfiguration_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MdnsDiscoveryConfiguration_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisterServer2Request_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisterServer2Request_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisterServer2Request_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisterServer2Response_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisterServer2Response_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisterServer2Response_Encoding_DefaultBinary); + + /// + /// The identifier for the ChannelSecurityToken_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ChannelSecurityToken_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ChannelSecurityToken_Encoding_DefaultBinary); + + /// + /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId OpenSecureChannelRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.OpenSecureChannelRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId OpenSecureChannelResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.OpenSecureChannelResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CloseSecureChannelRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CloseSecureChannelRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CloseSecureChannelResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CloseSecureChannelResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SignedSoftwareCertificate_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SignedSoftwareCertificate_Encoding_DefaultBinary); + + /// + /// The identifier for the SignatureData_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SignatureData_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SignatureData_Encoding_DefaultBinary); + + /// + /// The identifier for the CreateSessionRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CreateSessionRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CreateSessionRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CreateSessionResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CreateSessionResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CreateSessionResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the UserIdentityToken_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UserIdentityToken_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UserIdentityToken_Encoding_DefaultBinary); + + /// + /// The identifier for the AnonymousIdentityToken_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AnonymousIdentityToken_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AnonymousIdentityToken_Encoding_DefaultBinary); + + /// + /// The identifier for the UserNameIdentityToken_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UserNameIdentityToken_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UserNameIdentityToken_Encoding_DefaultBinary); + + /// + /// The identifier for the X509IdentityToken_Encoding_DefaultBinary Object. + /// + public static readonly NodeId X509IdentityToken_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.X509IdentityToken_Encoding_DefaultBinary); + + /// + /// The identifier for the IssuedIdentityToken_Encoding_DefaultBinary Object. + /// + public static readonly NodeId IssuedIdentityToken_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.IssuedIdentityToken_Encoding_DefaultBinary); + + /// + /// The identifier for the ActivateSessionRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ActivateSessionRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ActivateSessionRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the ActivateSessionResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ActivateSessionResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ActivateSessionResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the CloseSessionRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CloseSessionRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CloseSessionRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CloseSessionResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CloseSessionResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CloseSessionResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the CancelRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CancelRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CancelRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CancelResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CancelResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CancelResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the NodeAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NodeAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NodeAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the ObjectAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ObjectAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ObjectAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the VariableAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId VariableAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.VariableAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the MethodAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MethodAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MethodAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the ObjectTypeAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ObjectTypeAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ObjectTypeAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the VariableTypeAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId VariableTypeAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.VariableTypeAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReferenceTypeAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReferenceTypeAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the DataTypeAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataTypeAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataTypeAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the ViewAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ViewAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ViewAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the GenericAttributeValue_Encoding_DefaultBinary Object. + /// + public static readonly NodeId GenericAttributeValue_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.GenericAttributeValue_Encoding_DefaultBinary); + + /// + /// The identifier for the GenericAttributes_Encoding_DefaultBinary Object. + /// + public static readonly NodeId GenericAttributes_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.GenericAttributes_Encoding_DefaultBinary); + + /// + /// The identifier for the AddNodesItem_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddNodesItem_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddNodesItem_Encoding_DefaultBinary); + + /// + /// The identifier for the AddNodesResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddNodesResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddNodesResult_Encoding_DefaultBinary); + + /// + /// The identifier for the AddNodesRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddNodesRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddNodesRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the AddNodesResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddNodesResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddNodesResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the AddReferencesItem_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddReferencesItem_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddReferencesItem_Encoding_DefaultBinary); + + /// + /// The identifier for the AddReferencesRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddReferencesRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddReferencesRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the AddReferencesResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AddReferencesResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AddReferencesResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteNodesItem_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteNodesItem_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteNodesItem_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteNodesRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteNodesRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteNodesRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteNodesResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteNodesResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteNodesResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteReferencesItem_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteReferencesItem_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteReferencesItem_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteReferencesRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteReferencesRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteReferencesRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteReferencesResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteReferencesResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteReferencesResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the ViewDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ViewDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ViewDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowseDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowseDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowseDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the ReferenceDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReferenceDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReferenceDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowseResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowseResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowseResult_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowseRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowseRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowseRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowseResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowseResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowseResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowseNextRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowseNextRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowseNextRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowseNextResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowseNextResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowseNextResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the RelativePathElement_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RelativePathElement_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RelativePathElement_Encoding_DefaultBinary); + + /// + /// The identifier for the RelativePath_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RelativePath_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RelativePath_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowsePath_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowsePath_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowsePath_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowsePathTarget_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowsePathTarget_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowsePathTarget_Encoding_DefaultBinary); + + /// + /// The identifier for the BrowsePathResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BrowsePathResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BrowsePathResult_Encoding_DefaultBinary); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisterNodesRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisterNodesRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisterNodesRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the RegisterNodesResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RegisterNodesResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RegisterNodesResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the UnregisterNodesRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UnregisterNodesRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UnregisterNodesRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the UnregisterNodesResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UnregisterNodesResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UnregisterNodesResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the EndpointConfiguration_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EndpointConfiguration_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EndpointConfiguration_Encoding_DefaultBinary); + + /// + /// The identifier for the QueryDataDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId QueryDataDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.QueryDataDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the NodeTypeDescription_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NodeTypeDescription_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NodeTypeDescription_Encoding_DefaultBinary); + + /// + /// The identifier for the QueryDataSet_Encoding_DefaultBinary Object. + /// + public static readonly NodeId QueryDataSet_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.QueryDataSet_Encoding_DefaultBinary); + + /// + /// The identifier for the NodeReference_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NodeReference_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NodeReference_Encoding_DefaultBinary); + + /// + /// The identifier for the ContentFilterElement_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ContentFilterElement_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ContentFilterElement_Encoding_DefaultBinary); + + /// + /// The identifier for the ContentFilter_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ContentFilter_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ContentFilter_Encoding_DefaultBinary); + + /// + /// The identifier for the FilterOperand_Encoding_DefaultBinary Object. + /// + public static readonly NodeId FilterOperand_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.FilterOperand_Encoding_DefaultBinary); + + /// + /// The identifier for the ElementOperand_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ElementOperand_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ElementOperand_Encoding_DefaultBinary); + + /// + /// The identifier for the LiteralOperand_Encoding_DefaultBinary Object. + /// + public static readonly NodeId LiteralOperand_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.LiteralOperand_Encoding_DefaultBinary); + + /// + /// The identifier for the AttributeOperand_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AttributeOperand_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AttributeOperand_Encoding_DefaultBinary); + + /// + /// The identifier for the SimpleAttributeOperand_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SimpleAttributeOperand_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SimpleAttributeOperand_Encoding_DefaultBinary); + + /// + /// The identifier for the ContentFilterElementResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ContentFilterElementResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ContentFilterElementResult_Encoding_DefaultBinary); + + /// + /// The identifier for the ContentFilterResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ContentFilterResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ContentFilterResult_Encoding_DefaultBinary); + + /// + /// The identifier for the ParsingResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ParsingResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ParsingResult_Encoding_DefaultBinary); + + /// + /// The identifier for the QueryFirstRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId QueryFirstRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.QueryFirstRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the QueryFirstResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId QueryFirstResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.QueryFirstResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the QueryNextRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId QueryNextRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.QueryNextRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the QueryNextResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId QueryNextResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.QueryNextResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadValueId_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadValueId_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadValueId_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryReadValueId_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryReadValueId_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryReadValueId_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryReadResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryReadResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryReadResult_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryReadDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryReadDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryReadDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadEventDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadEventDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadEventDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadRawModifiedDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadRawModifiedDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadProcessedDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadProcessedDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadProcessedDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadAtTimeDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadAtTimeDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadAtTimeDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the ReadAnnotationDataDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ReadAnnotationDataDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ReadAnnotationDataDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryData_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryData_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryData_Encoding_DefaultBinary); + + /// + /// The identifier for the ModificationInfo_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ModificationInfo_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ModificationInfo_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryModifiedData_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryModifiedData_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryModifiedData_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryEvent_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryEvent_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryEvent_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryReadRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryReadRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryReadRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryReadResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryReadResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryReadResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the WriteValue_Encoding_DefaultBinary Object. + /// + public static readonly NodeId WriteValue_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.WriteValue_Encoding_DefaultBinary); + + /// + /// The identifier for the WriteRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId WriteRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.WriteRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the WriteResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId WriteResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.WriteResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryUpdateDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryUpdateDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryUpdateDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the UpdateDataDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UpdateDataDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UpdateDataDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UpdateStructureDataDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UpdateStructureDataDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the UpdateEventDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId UpdateEventDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.UpdateEventDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteRawModifiedDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteRawModifiedDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteAtTimeDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteAtTimeDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteEventDetails_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteEventDetails_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteEventDetails_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryUpdateResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryUpdateResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryUpdateResult_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryUpdateRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryUpdateRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryUpdateRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryUpdateResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryUpdateResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryUpdateResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the CallMethodRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CallMethodRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CallMethodRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CallMethodResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CallMethodResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CallMethodResult_Encoding_DefaultBinary); + + /// + /// The identifier for the CallRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CallRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CallRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CallResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CallResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CallResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoringFilter_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoringFilter_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoringFilter_Encoding_DefaultBinary); + + /// + /// The identifier for the DataChangeFilter_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataChangeFilter_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataChangeFilter_Encoding_DefaultBinary); + + /// + /// The identifier for the EventFilter_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EventFilter_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EventFilter_Encoding_DefaultBinary); + + /// + /// The identifier for the AggregateConfiguration_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AggregateConfiguration_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AggregateConfiguration_Encoding_DefaultBinary); + + /// + /// The identifier for the AggregateFilter_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AggregateFilter_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AggregateFilter_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoringFilterResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoringFilterResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoringFilterResult_Encoding_DefaultBinary); + + /// + /// The identifier for the EventFilterResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EventFilterResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EventFilterResult_Encoding_DefaultBinary); + + /// + /// The identifier for the AggregateFilterResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AggregateFilterResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AggregateFilterResult_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoringParameters_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoringParameters_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoringParameters_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoredItemCreateRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoredItemCreateRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoredItemCreateResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoredItemCreateResult_Encoding_DefaultBinary); + + /// + /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CreateMonitoredItemsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CreateMonitoredItemsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CreateMonitoredItemsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CreateMonitoredItemsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoredItemModifyRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoredItemModifyRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoredItemModifyResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoredItemModifyResult_Encoding_DefaultBinary); + + /// + /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ModifyMonitoredItemsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ModifyMonitoredItemsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ModifyMonitoredItemsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ModifyMonitoredItemsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SetMonitoringModeRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SetMonitoringModeRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SetMonitoringModeResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SetMonitoringModeResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the SetTriggeringRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SetTriggeringRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SetTriggeringRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the SetTriggeringResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SetTriggeringResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SetTriggeringResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteMonitoredItemsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteMonitoredItemsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteMonitoredItemsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteMonitoredItemsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CreateSubscriptionRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CreateSubscriptionRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId CreateSubscriptionResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.CreateSubscriptionResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ModifySubscriptionRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ModifySubscriptionRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ModifySubscriptionResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ModifySubscriptionResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the SetPublishingModeRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SetPublishingModeRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SetPublishingModeRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the SetPublishingModeResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SetPublishingModeResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SetPublishingModeResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the NotificationMessage_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NotificationMessage_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NotificationMessage_Encoding_DefaultBinary); + + /// + /// The identifier for the NotificationData_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NotificationData_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NotificationData_Encoding_DefaultBinary); + + /// + /// The identifier for the DataChangeNotification_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DataChangeNotification_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DataChangeNotification_Encoding_DefaultBinary); + + /// + /// The identifier for the MonitoredItemNotification_Encoding_DefaultBinary Object. + /// + public static readonly NodeId MonitoredItemNotification_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.MonitoredItemNotification_Encoding_DefaultBinary); + + /// + /// The identifier for the EventNotificationList_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EventNotificationList_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EventNotificationList_Encoding_DefaultBinary); + + /// + /// The identifier for the EventFieldList_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EventFieldList_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EventFieldList_Encoding_DefaultBinary); + + /// + /// The identifier for the HistoryEventFieldList_Encoding_DefaultBinary Object. + /// + public static readonly NodeId HistoryEventFieldList_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.HistoryEventFieldList_Encoding_DefaultBinary); + + /// + /// The identifier for the StatusChangeNotification_Encoding_DefaultBinary Object. + /// + public static readonly NodeId StatusChangeNotification_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.StatusChangeNotification_Encoding_DefaultBinary); + + /// + /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SubscriptionAcknowledgement_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SubscriptionAcknowledgement_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the PublishResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId PublishResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.PublishResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the RepublishRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RepublishRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RepublishRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the RepublishResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RepublishResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RepublishResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the TransferResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TransferResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TransferResult_Encoding_DefaultBinary); + + /// + /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TransferSubscriptionsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TransferSubscriptionsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId TransferSubscriptionsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.TransferSubscriptionsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteSubscriptionsRequest_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteSubscriptionsRequest_Encoding_DefaultBinary); + + /// + /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DeleteSubscriptionsResponse_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DeleteSubscriptionsResponse_Encoding_DefaultBinary); + + /// + /// The identifier for the BuildInfo_Encoding_DefaultBinary Object. + /// + public static readonly NodeId BuildInfo_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.BuildInfo_Encoding_DefaultBinary); + + /// + /// The identifier for the RedundantServerDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId RedundantServerDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.RedundantServerDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the EndpointUrlListDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EndpointUrlListDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EndpointUrlListDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the NetworkGroupDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId NetworkGroupDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.NetworkGroupDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ServerStatusDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ServerStatusDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ServerStatusDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SessionDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SessionDiagnosticsDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ServiceCounterDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ServiceCounterDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ServiceCounterDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the StatusResult_Encoding_DefaultBinary Object. + /// + public static readonly NodeId StatusResult_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.StatusResult_Encoding_DefaultBinary); + + /// + /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SubscriptionDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SubscriptionDiagnosticsDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ModelChangeStructureDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ModelChangeStructureDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId SemanticChangeStructureDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.SemanticChangeStructureDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the Range_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Range_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Range_Encoding_DefaultBinary); + + /// + /// The identifier for the EUInformation_Encoding_DefaultBinary Object. + /// + public static readonly NodeId EUInformation_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.EUInformation_Encoding_DefaultBinary); + + /// + /// The identifier for the ComplexNumberType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ComplexNumberType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ComplexNumberType_Encoding_DefaultBinary); + + /// + /// The identifier for the DoubleComplexNumberType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId DoubleComplexNumberType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.DoubleComplexNumberType_Encoding_DefaultBinary); + + /// + /// The identifier for the AxisInformation_Encoding_DefaultBinary Object. + /// + public static readonly NodeId AxisInformation_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.AxisInformation_Encoding_DefaultBinary); + + /// + /// The identifier for the XVType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId XVType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.XVType_Encoding_DefaultBinary); + + /// + /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ProgramDiagnosticDataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ProgramDiagnosticDataType_Encoding_DefaultBinary); + + /// + /// The identifier for the ProgramDiagnostic2DataType_Encoding_DefaultBinary Object. + /// + public static readonly NodeId ProgramDiagnostic2DataType_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.ProgramDiagnostic2DataType_Encoding_DefaultBinary); + + /// + /// The identifier for the Annotation_Encoding_DefaultBinary Object. + /// + public static readonly NodeId Annotation_Encoding_DefaultBinary = new NodeId(Opc.Ua.Objects.Annotation_Encoding_DefaultBinary); + + /// + /// The identifier for the KeyValuePair_Encoding_DefaultXml Object. + /// + public static readonly NodeId KeyValuePair_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.KeyValuePair_Encoding_DefaultXml); + + /// + /// The identifier for the EndpointType_Encoding_DefaultXml Object. + /// + public static readonly NodeId EndpointType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EndpointType_Encoding_DefaultXml); + + /// + /// The identifier for the RationalNumber_Encoding_DefaultXml Object. + /// + public static readonly NodeId RationalNumber_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RationalNumber_Encoding_DefaultXml); + + /// + /// The identifier for the Vector_Encoding_DefaultXml Object. + /// + public static readonly NodeId Vector_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Vector_Encoding_DefaultXml); + + /// + /// The identifier for the ThreeDVector_Encoding_DefaultXml Object. + /// + public static readonly NodeId ThreeDVector_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ThreeDVector_Encoding_DefaultXml); + + /// + /// The identifier for the CartesianCoordinates_Encoding_DefaultXml Object. + /// + public static readonly NodeId CartesianCoordinates_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CartesianCoordinates_Encoding_DefaultXml); + + /// + /// The identifier for the ThreeDCartesianCoordinates_Encoding_DefaultXml Object. + /// + public static readonly NodeId ThreeDCartesianCoordinates_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ThreeDCartesianCoordinates_Encoding_DefaultXml); + + /// + /// The identifier for the Orientation_Encoding_DefaultXml Object. + /// + public static readonly NodeId Orientation_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Orientation_Encoding_DefaultXml); + + /// + /// The identifier for the ThreeDOrientation_Encoding_DefaultXml Object. + /// + public static readonly NodeId ThreeDOrientation_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ThreeDOrientation_Encoding_DefaultXml); + + /// + /// The identifier for the Frame_Encoding_DefaultXml Object. + /// + public static readonly NodeId Frame_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Frame_Encoding_DefaultXml); + + /// + /// The identifier for the ThreeDFrame_Encoding_DefaultXml Object. + /// + public static readonly NodeId ThreeDFrame_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ThreeDFrame_Encoding_DefaultXml); + + /// + /// The identifier for the IdentityMappingRuleType_Encoding_DefaultXml Object. + /// + public static readonly NodeId IdentityMappingRuleType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.IdentityMappingRuleType_Encoding_DefaultXml); + + /// + /// The identifier for the CurrencyUnitType_Encoding_DefaultXml Object. + /// + public static readonly NodeId CurrencyUnitType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CurrencyUnitType_Encoding_DefaultXml); + + /// + /// The identifier for the TrustListDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId TrustListDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TrustListDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DecimalDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DecimalDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DecimalDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataTypeSchemaHeader_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataTypeSchemaHeader_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataTypeSchemaHeader_Encoding_DefaultXml); + + /// + /// The identifier for the DataTypeDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataTypeDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataTypeDescription_Encoding_DefaultXml); + + /// + /// The identifier for the StructureDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId StructureDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.StructureDescription_Encoding_DefaultXml); + + /// + /// The identifier for the EnumDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId EnumDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EnumDescription_Encoding_DefaultXml); + + /// + /// The identifier for the SimpleTypeDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId SimpleTypeDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SimpleTypeDescription_Encoding_DefaultXml); + + /// + /// The identifier for the UABinaryFileDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId UABinaryFileDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UABinaryFileDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetMetaDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetMetaDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetMetaDataType_Encoding_DefaultXml); + + /// + /// The identifier for the FieldMetaData_Encoding_DefaultXml Object. + /// + public static readonly NodeId FieldMetaData_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FieldMetaData_Encoding_DefaultXml); + + /// + /// The identifier for the ConfigurationVersionDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ConfigurationVersionDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ConfigurationVersionDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PublishedDataSetDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishedDataSetDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishedDataSetDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PublishedDataSetSourceDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishedDataSetSourceDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishedDataSetSourceDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PublishedVariableDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishedVariableDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishedVariableDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PublishedDataItemsDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishedDataItemsDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishedDataItemsDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PublishedEventsDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishedEventsDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishedEventsDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetWriterDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetWriterDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetWriterDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetWriterTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetWriterTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetWriterTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetWriterMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetWriterMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetWriterMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PubSubGroupDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PubSubGroupDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PubSubGroupDataType_Encoding_DefaultXml); + + /// + /// The identifier for the WriterGroupDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId WriterGroupDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.WriterGroupDataType_Encoding_DefaultXml); + + /// + /// The identifier for the WriterGroupTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId WriterGroupTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.WriterGroupTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the WriterGroupMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId WriterGroupMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.WriterGroupMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PubSubConnectionDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PubSubConnectionDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PubSubConnectionDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ConnectionTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ConnectionTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ConnectionTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the NetworkAddressDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId NetworkAddressDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NetworkAddressDataType_Encoding_DefaultXml); + + /// + /// The identifier for the NetworkAddressUrlDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId NetworkAddressUrlDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NetworkAddressUrlDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ReaderGroupDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReaderGroupDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReaderGroupDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ReaderGroupTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReaderGroupTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReaderGroupTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ReaderGroupMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReaderGroupMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReaderGroupMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetReaderDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetReaderDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetReaderDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetReaderTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetReaderTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetReaderTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DataSetReaderMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataSetReaderMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataSetReaderMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the SubscribedDataSetDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SubscribedDataSetDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SubscribedDataSetDataType_Encoding_DefaultXml); + + /// + /// The identifier for the TargetVariablesDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId TargetVariablesDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TargetVariablesDataType_Encoding_DefaultXml); + + /// + /// The identifier for the FieldTargetDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId FieldTargetDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FieldTargetDataType_Encoding_DefaultXml); + + /// + /// The identifier for the SubscribedDataSetMirrorDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SubscribedDataSetMirrorDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SubscribedDataSetMirrorDataType_Encoding_DefaultXml); + + /// + /// The identifier for the PubSubConfigurationDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId PubSubConfigurationDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PubSubConfigurationDataType_Encoding_DefaultXml); + + /// + /// The identifier for the UadpWriterGroupMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId UadpWriterGroupMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UadpWriterGroupMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the UadpDataSetWriterMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId UadpDataSetWriterMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UadpDataSetWriterMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the UadpDataSetReaderMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId UadpDataSetReaderMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UadpDataSetReaderMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the JsonWriterGroupMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId JsonWriterGroupMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.JsonWriterGroupMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the JsonDataSetWriterMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId JsonDataSetWriterMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.JsonDataSetWriterMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the JsonDataSetReaderMessageDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId JsonDataSetReaderMessageDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.JsonDataSetReaderMessageDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DatagramConnectionTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DatagramConnectionTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DatagramConnectionTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the DatagramWriterGroupTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DatagramWriterGroupTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DatagramWriterGroupTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the BrokerConnectionTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrokerConnectionTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrokerConnectionTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the BrokerWriterGroupTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrokerWriterGroupTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrokerWriterGroupTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrokerDataSetWriterTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrokerDataSetWriterTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrokerDataSetReaderTransportDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrokerDataSetReaderTransportDataType_Encoding_DefaultXml); + + /// + /// The identifier for the AliasNameDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId AliasNameDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AliasNameDataType_Encoding_DefaultXml); + + /// + /// The identifier for the RolePermissionType_Encoding_DefaultXml Object. + /// + public static readonly NodeId RolePermissionType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RolePermissionType_Encoding_DefaultXml); + + /// + /// The identifier for the DataTypeDefinition_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataTypeDefinition_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataTypeDefinition_Encoding_DefaultXml); + + /// + /// The identifier for the StructureField_Encoding_DefaultXml Object. + /// + public static readonly NodeId StructureField_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.StructureField_Encoding_DefaultXml); + + /// + /// The identifier for the StructureDefinition_Encoding_DefaultXml Object. + /// + public static readonly NodeId StructureDefinition_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.StructureDefinition_Encoding_DefaultXml); + + /// + /// The identifier for the EnumDefinition_Encoding_DefaultXml Object. + /// + public static readonly NodeId EnumDefinition_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EnumDefinition_Encoding_DefaultXml); + + /// + /// The identifier for the Node_Encoding_DefaultXml Object. + /// + public static readonly NodeId Node_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Node_Encoding_DefaultXml); + + /// + /// The identifier for the InstanceNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId InstanceNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.InstanceNode_Encoding_DefaultXml); + + /// + /// The identifier for the TypeNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId TypeNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TypeNode_Encoding_DefaultXml); + + /// + /// The identifier for the ObjectNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId ObjectNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ObjectNode_Encoding_DefaultXml); + + /// + /// The identifier for the ObjectTypeNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId ObjectTypeNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ObjectTypeNode_Encoding_DefaultXml); + + /// + /// The identifier for the VariableNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId VariableNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.VariableNode_Encoding_DefaultXml); + + /// + /// The identifier for the VariableTypeNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId VariableTypeNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.VariableTypeNode_Encoding_DefaultXml); + + /// + /// The identifier for the ReferenceTypeNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReferenceTypeNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReferenceTypeNode_Encoding_DefaultXml); + + /// + /// The identifier for the MethodNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId MethodNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MethodNode_Encoding_DefaultXml); + + /// + /// The identifier for the ViewNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId ViewNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ViewNode_Encoding_DefaultXml); + + /// + /// The identifier for the DataTypeNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataTypeNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataTypeNode_Encoding_DefaultXml); + + /// + /// The identifier for the ReferenceNode_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReferenceNode_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReferenceNode_Encoding_DefaultXml); + + /// + /// The identifier for the Argument_Encoding_DefaultXml Object. + /// + public static readonly NodeId Argument_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Argument_Encoding_DefaultXml); + + /// + /// The identifier for the EnumValueType_Encoding_DefaultXml Object. + /// + public static readonly NodeId EnumValueType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EnumValueType_Encoding_DefaultXml); + + /// + /// The identifier for the EnumField_Encoding_DefaultXml Object. + /// + public static readonly NodeId EnumField_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EnumField_Encoding_DefaultXml); + + /// + /// The identifier for the OptionSet_Encoding_DefaultXml Object. + /// + public static readonly NodeId OptionSet_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.OptionSet_Encoding_DefaultXml); + + /// + /// The identifier for the Union_Encoding_DefaultXml Object. + /// + public static readonly NodeId Union_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Union_Encoding_DefaultXml); + + /// + /// The identifier for the TimeZoneDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId TimeZoneDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TimeZoneDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ApplicationDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId ApplicationDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ApplicationDescription_Encoding_DefaultXml); + + /// + /// The identifier for the RequestHeader_Encoding_DefaultXml Object. + /// + public static readonly NodeId RequestHeader_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RequestHeader_Encoding_DefaultXml); + + /// + /// The identifier for the ResponseHeader_Encoding_DefaultXml Object. + /// + public static readonly NodeId ResponseHeader_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ResponseHeader_Encoding_DefaultXml); + + /// + /// The identifier for the ServiceFault_Encoding_DefaultXml Object. + /// + public static readonly NodeId ServiceFault_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ServiceFault_Encoding_DefaultXml); + + /// + /// The identifier for the SessionlessInvokeRequestType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SessionlessInvokeRequestType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SessionlessInvokeRequestType_Encoding_DefaultXml); + + /// + /// The identifier for the SessionlessInvokeResponseType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SessionlessInvokeResponseType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SessionlessInvokeResponseType_Encoding_DefaultXml); + + /// + /// The identifier for the FindServersRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId FindServersRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FindServersRequest_Encoding_DefaultXml); + + /// + /// The identifier for the FindServersResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId FindServersResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FindServersResponse_Encoding_DefaultXml); + + /// + /// The identifier for the ServerOnNetwork_Encoding_DefaultXml Object. + /// + public static readonly NodeId ServerOnNetwork_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ServerOnNetwork_Encoding_DefaultXml); + + /// + /// The identifier for the FindServersOnNetworkRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId FindServersOnNetworkRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FindServersOnNetworkRequest_Encoding_DefaultXml); + + /// + /// The identifier for the FindServersOnNetworkResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId FindServersOnNetworkResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FindServersOnNetworkResponse_Encoding_DefaultXml); + + /// + /// The identifier for the UserTokenPolicy_Encoding_DefaultXml Object. + /// + public static readonly NodeId UserTokenPolicy_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UserTokenPolicy_Encoding_DefaultXml); + + /// + /// The identifier for the EndpointDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId EndpointDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EndpointDescription_Encoding_DefaultXml); + + /// + /// The identifier for the GetEndpointsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId GetEndpointsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.GetEndpointsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the GetEndpointsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId GetEndpointsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.GetEndpointsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the RegisteredServer_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisteredServer_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisteredServer_Encoding_DefaultXml); + + /// + /// The identifier for the RegisterServerRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisterServerRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisterServerRequest_Encoding_DefaultXml); + + /// + /// The identifier for the RegisterServerResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisterServerResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisterServerResponse_Encoding_DefaultXml); + + /// + /// The identifier for the DiscoveryConfiguration_Encoding_DefaultXml Object. + /// + public static readonly NodeId DiscoveryConfiguration_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DiscoveryConfiguration_Encoding_DefaultXml); + + /// + /// The identifier for the MdnsDiscoveryConfiguration_Encoding_DefaultXml Object. + /// + public static readonly NodeId MdnsDiscoveryConfiguration_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MdnsDiscoveryConfiguration_Encoding_DefaultXml); + + /// + /// The identifier for the RegisterServer2Request_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisterServer2Request_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisterServer2Request_Encoding_DefaultXml); + + /// + /// The identifier for the RegisterServer2Response_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisterServer2Response_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisterServer2Response_Encoding_DefaultXml); + + /// + /// The identifier for the ChannelSecurityToken_Encoding_DefaultXml Object. + /// + public static readonly NodeId ChannelSecurityToken_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ChannelSecurityToken_Encoding_DefaultXml); + + /// + /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId OpenSecureChannelRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.OpenSecureChannelRequest_Encoding_DefaultXml); + + /// + /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId OpenSecureChannelResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.OpenSecureChannelResponse_Encoding_DefaultXml); + + /// + /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CloseSecureChannelRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CloseSecureChannelRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CloseSecureChannelResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CloseSecureChannelResponse_Encoding_DefaultXml); + + /// + /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultXml Object. + /// + public static readonly NodeId SignedSoftwareCertificate_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SignedSoftwareCertificate_Encoding_DefaultXml); + + /// + /// The identifier for the SignatureData_Encoding_DefaultXml Object. + /// + public static readonly NodeId SignatureData_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SignatureData_Encoding_DefaultXml); + + /// + /// The identifier for the CreateSessionRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CreateSessionRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CreateSessionRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CreateSessionResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CreateSessionResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CreateSessionResponse_Encoding_DefaultXml); + + /// + /// The identifier for the UserIdentityToken_Encoding_DefaultXml Object. + /// + public static readonly NodeId UserIdentityToken_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UserIdentityToken_Encoding_DefaultXml); + + /// + /// The identifier for the AnonymousIdentityToken_Encoding_DefaultXml Object. + /// + public static readonly NodeId AnonymousIdentityToken_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AnonymousIdentityToken_Encoding_DefaultXml); + + /// + /// The identifier for the UserNameIdentityToken_Encoding_DefaultXml Object. + /// + public static readonly NodeId UserNameIdentityToken_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UserNameIdentityToken_Encoding_DefaultXml); + + /// + /// The identifier for the X509IdentityToken_Encoding_DefaultXml Object. + /// + public static readonly NodeId X509IdentityToken_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.X509IdentityToken_Encoding_DefaultXml); + + /// + /// The identifier for the IssuedIdentityToken_Encoding_DefaultXml Object. + /// + public static readonly NodeId IssuedIdentityToken_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.IssuedIdentityToken_Encoding_DefaultXml); + + /// + /// The identifier for the ActivateSessionRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId ActivateSessionRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ActivateSessionRequest_Encoding_DefaultXml); + + /// + /// The identifier for the ActivateSessionResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId ActivateSessionResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ActivateSessionResponse_Encoding_DefaultXml); + + /// + /// The identifier for the CloseSessionRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CloseSessionRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CloseSessionRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CloseSessionResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CloseSessionResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CloseSessionResponse_Encoding_DefaultXml); + + /// + /// The identifier for the CancelRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CancelRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CancelRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CancelResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CancelResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CancelResponse_Encoding_DefaultXml); + + /// + /// The identifier for the NodeAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId NodeAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NodeAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the ObjectAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId ObjectAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ObjectAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the VariableAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId VariableAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.VariableAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the MethodAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId MethodAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MethodAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the ObjectTypeAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId ObjectTypeAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ObjectTypeAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the VariableTypeAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId VariableTypeAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.VariableTypeAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReferenceTypeAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReferenceTypeAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the DataTypeAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataTypeAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataTypeAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the ViewAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId ViewAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ViewAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the GenericAttributeValue_Encoding_DefaultXml Object. + /// + public static readonly NodeId GenericAttributeValue_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.GenericAttributeValue_Encoding_DefaultXml); + + /// + /// The identifier for the GenericAttributes_Encoding_DefaultXml Object. + /// + public static readonly NodeId GenericAttributes_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.GenericAttributes_Encoding_DefaultXml); + + /// + /// The identifier for the AddNodesItem_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddNodesItem_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddNodesItem_Encoding_DefaultXml); + + /// + /// The identifier for the AddNodesResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddNodesResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddNodesResult_Encoding_DefaultXml); + + /// + /// The identifier for the AddNodesRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddNodesRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddNodesRequest_Encoding_DefaultXml); + + /// + /// The identifier for the AddNodesResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddNodesResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddNodesResponse_Encoding_DefaultXml); + + /// + /// The identifier for the AddReferencesItem_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddReferencesItem_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddReferencesItem_Encoding_DefaultXml); + + /// + /// The identifier for the AddReferencesRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddReferencesRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddReferencesRequest_Encoding_DefaultXml); + + /// + /// The identifier for the AddReferencesResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId AddReferencesResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AddReferencesResponse_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteNodesItem_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteNodesItem_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteNodesItem_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteNodesRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteNodesRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteNodesRequest_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteNodesResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteNodesResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteNodesResponse_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteReferencesItem_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteReferencesItem_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteReferencesItem_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteReferencesRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteReferencesRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteReferencesRequest_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteReferencesResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteReferencesResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteReferencesResponse_Encoding_DefaultXml); + + /// + /// The identifier for the ViewDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId ViewDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ViewDescription_Encoding_DefaultXml); + + /// + /// The identifier for the BrowseDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowseDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowseDescription_Encoding_DefaultXml); + + /// + /// The identifier for the ReferenceDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReferenceDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReferenceDescription_Encoding_DefaultXml); + + /// + /// The identifier for the BrowseResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowseResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowseResult_Encoding_DefaultXml); + + /// + /// The identifier for the BrowseRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowseRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowseRequest_Encoding_DefaultXml); + + /// + /// The identifier for the BrowseResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowseResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowseResponse_Encoding_DefaultXml); + + /// + /// The identifier for the BrowseNextRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowseNextRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowseNextRequest_Encoding_DefaultXml); + + /// + /// The identifier for the BrowseNextResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowseNextResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowseNextResponse_Encoding_DefaultXml); + + /// + /// The identifier for the RelativePathElement_Encoding_DefaultXml Object. + /// + public static readonly NodeId RelativePathElement_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RelativePathElement_Encoding_DefaultXml); + + /// + /// The identifier for the RelativePath_Encoding_DefaultXml Object. + /// + public static readonly NodeId RelativePath_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RelativePath_Encoding_DefaultXml); + + /// + /// The identifier for the BrowsePath_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowsePath_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowsePath_Encoding_DefaultXml); + + /// + /// The identifier for the BrowsePathTarget_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowsePathTarget_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowsePathTarget_Encoding_DefaultXml); + + /// + /// The identifier for the BrowsePathResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId BrowsePathResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BrowsePathResult_Encoding_DefaultXml); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the RegisterNodesRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisterNodesRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisterNodesRequest_Encoding_DefaultXml); + + /// + /// The identifier for the RegisterNodesResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId RegisterNodesResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RegisterNodesResponse_Encoding_DefaultXml); + + /// + /// The identifier for the UnregisterNodesRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId UnregisterNodesRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UnregisterNodesRequest_Encoding_DefaultXml); + + /// + /// The identifier for the UnregisterNodesResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId UnregisterNodesResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UnregisterNodesResponse_Encoding_DefaultXml); + + /// + /// The identifier for the EndpointConfiguration_Encoding_DefaultXml Object. + /// + public static readonly NodeId EndpointConfiguration_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EndpointConfiguration_Encoding_DefaultXml); + + /// + /// The identifier for the QueryDataDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId QueryDataDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.QueryDataDescription_Encoding_DefaultXml); + + /// + /// The identifier for the NodeTypeDescription_Encoding_DefaultXml Object. + /// + public static readonly NodeId NodeTypeDescription_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NodeTypeDescription_Encoding_DefaultXml); + + /// + /// The identifier for the QueryDataSet_Encoding_DefaultXml Object. + /// + public static readonly NodeId QueryDataSet_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.QueryDataSet_Encoding_DefaultXml); + + /// + /// The identifier for the NodeReference_Encoding_DefaultXml Object. + /// + public static readonly NodeId NodeReference_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NodeReference_Encoding_DefaultXml); + + /// + /// The identifier for the ContentFilterElement_Encoding_DefaultXml Object. + /// + public static readonly NodeId ContentFilterElement_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ContentFilterElement_Encoding_DefaultXml); + + /// + /// The identifier for the ContentFilter_Encoding_DefaultXml Object. + /// + public static readonly NodeId ContentFilter_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ContentFilter_Encoding_DefaultXml); + + /// + /// The identifier for the FilterOperand_Encoding_DefaultXml Object. + /// + public static readonly NodeId FilterOperand_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.FilterOperand_Encoding_DefaultXml); + + /// + /// The identifier for the ElementOperand_Encoding_DefaultXml Object. + /// + public static readonly NodeId ElementOperand_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ElementOperand_Encoding_DefaultXml); + + /// + /// The identifier for the LiteralOperand_Encoding_DefaultXml Object. + /// + public static readonly NodeId LiteralOperand_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.LiteralOperand_Encoding_DefaultXml); + + /// + /// The identifier for the AttributeOperand_Encoding_DefaultXml Object. + /// + public static readonly NodeId AttributeOperand_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AttributeOperand_Encoding_DefaultXml); + + /// + /// The identifier for the SimpleAttributeOperand_Encoding_DefaultXml Object. + /// + public static readonly NodeId SimpleAttributeOperand_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SimpleAttributeOperand_Encoding_DefaultXml); + + /// + /// The identifier for the ContentFilterElementResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId ContentFilterElementResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ContentFilterElementResult_Encoding_DefaultXml); + + /// + /// The identifier for the ContentFilterResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId ContentFilterResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ContentFilterResult_Encoding_DefaultXml); + + /// + /// The identifier for the ParsingResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId ParsingResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ParsingResult_Encoding_DefaultXml); + + /// + /// The identifier for the QueryFirstRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId QueryFirstRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.QueryFirstRequest_Encoding_DefaultXml); + + /// + /// The identifier for the QueryFirstResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId QueryFirstResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.QueryFirstResponse_Encoding_DefaultXml); + + /// + /// The identifier for the QueryNextRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId QueryNextRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.QueryNextRequest_Encoding_DefaultXml); + + /// + /// The identifier for the QueryNextResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId QueryNextResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.QueryNextResponse_Encoding_DefaultXml); + + /// + /// The identifier for the ReadValueId_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadValueId_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadValueId_Encoding_DefaultXml); + + /// + /// The identifier for the ReadRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadRequest_Encoding_DefaultXml); + + /// + /// The identifier for the ReadResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadResponse_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryReadValueId_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryReadValueId_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryReadValueId_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryReadResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryReadResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryReadResult_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryReadDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryReadDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryReadDetails_Encoding_DefaultXml); + + /// + /// The identifier for the ReadEventDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadEventDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadEventDetails_Encoding_DefaultXml); + + /// + /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadRawModifiedDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadRawModifiedDetails_Encoding_DefaultXml); + + /// + /// The identifier for the ReadProcessedDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadProcessedDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadProcessedDetails_Encoding_DefaultXml); + + /// + /// The identifier for the ReadAtTimeDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadAtTimeDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadAtTimeDetails_Encoding_DefaultXml); + + /// + /// The identifier for the ReadAnnotationDataDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId ReadAnnotationDataDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ReadAnnotationDataDetails_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryData_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryData_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryData_Encoding_DefaultXml); + + /// + /// The identifier for the ModificationInfo_Encoding_DefaultXml Object. + /// + public static readonly NodeId ModificationInfo_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ModificationInfo_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryModifiedData_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryModifiedData_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryModifiedData_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryEvent_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryEvent_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryEvent_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryReadRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryReadRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryReadRequest_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryReadResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryReadResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryReadResponse_Encoding_DefaultXml); + + /// + /// The identifier for the WriteValue_Encoding_DefaultXml Object. + /// + public static readonly NodeId WriteValue_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.WriteValue_Encoding_DefaultXml); + + /// + /// The identifier for the WriteRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId WriteRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.WriteRequest_Encoding_DefaultXml); + + /// + /// The identifier for the WriteResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId WriteResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.WriteResponse_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryUpdateDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryUpdateDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryUpdateDetails_Encoding_DefaultXml); + + /// + /// The identifier for the UpdateDataDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId UpdateDataDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UpdateDataDetails_Encoding_DefaultXml); + + /// + /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId UpdateStructureDataDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UpdateStructureDataDetails_Encoding_DefaultXml); + + /// + /// The identifier for the UpdateEventDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId UpdateEventDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.UpdateEventDetails_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteRawModifiedDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteRawModifiedDetails_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteAtTimeDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteAtTimeDetails_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteEventDetails_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteEventDetails_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteEventDetails_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryUpdateResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryUpdateResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryUpdateResult_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryUpdateRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryUpdateRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryUpdateRequest_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryUpdateResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryUpdateResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryUpdateResponse_Encoding_DefaultXml); + + /// + /// The identifier for the CallMethodRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CallMethodRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CallMethodRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CallMethodResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId CallMethodResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CallMethodResult_Encoding_DefaultXml); + + /// + /// The identifier for the CallRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CallRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CallRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CallResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CallResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CallResponse_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoringFilter_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoringFilter_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoringFilter_Encoding_DefaultXml); + + /// + /// The identifier for the DataChangeFilter_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataChangeFilter_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataChangeFilter_Encoding_DefaultXml); + + /// + /// The identifier for the EventFilter_Encoding_DefaultXml Object. + /// + public static readonly NodeId EventFilter_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EventFilter_Encoding_DefaultXml); + + /// + /// The identifier for the AggregateConfiguration_Encoding_DefaultXml Object. + /// + public static readonly NodeId AggregateConfiguration_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AggregateConfiguration_Encoding_DefaultXml); + + /// + /// The identifier for the AggregateFilter_Encoding_DefaultXml Object. + /// + public static readonly NodeId AggregateFilter_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AggregateFilter_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoringFilterResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoringFilterResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoringFilterResult_Encoding_DefaultXml); + + /// + /// The identifier for the EventFilterResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId EventFilterResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EventFilterResult_Encoding_DefaultXml); + + /// + /// The identifier for the AggregateFilterResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId AggregateFilterResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AggregateFilterResult_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoringParameters_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoringParameters_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoringParameters_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoredItemCreateRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoredItemCreateRequest_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoredItemCreateResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoredItemCreateResult_Encoding_DefaultXml); + + /// + /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CreateMonitoredItemsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CreateMonitoredItemsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CreateMonitoredItemsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CreateMonitoredItemsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoredItemModifyRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoredItemModifyRequest_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoredItemModifyResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoredItemModifyResult_Encoding_DefaultXml); + + /// + /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId ModifyMonitoredItemsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ModifyMonitoredItemsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId ModifyMonitoredItemsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ModifyMonitoredItemsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId SetMonitoringModeRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SetMonitoringModeRequest_Encoding_DefaultXml); + + /// + /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId SetMonitoringModeResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SetMonitoringModeResponse_Encoding_DefaultXml); + + /// + /// The identifier for the SetTriggeringRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId SetTriggeringRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SetTriggeringRequest_Encoding_DefaultXml); + + /// + /// The identifier for the SetTriggeringResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId SetTriggeringResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SetTriggeringResponse_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteMonitoredItemsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteMonitoredItemsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteMonitoredItemsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteMonitoredItemsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId CreateSubscriptionRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CreateSubscriptionRequest_Encoding_DefaultXml); + + /// + /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId CreateSubscriptionResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.CreateSubscriptionResponse_Encoding_DefaultXml); + + /// + /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId ModifySubscriptionRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ModifySubscriptionRequest_Encoding_DefaultXml); + + /// + /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId ModifySubscriptionResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ModifySubscriptionResponse_Encoding_DefaultXml); + + /// + /// The identifier for the SetPublishingModeRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId SetPublishingModeRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SetPublishingModeRequest_Encoding_DefaultXml); + + /// + /// The identifier for the SetPublishingModeResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId SetPublishingModeResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SetPublishingModeResponse_Encoding_DefaultXml); + + /// + /// The identifier for the NotificationMessage_Encoding_DefaultXml Object. + /// + public static readonly NodeId NotificationMessage_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NotificationMessage_Encoding_DefaultXml); + + /// + /// The identifier for the NotificationData_Encoding_DefaultXml Object. + /// + public static readonly NodeId NotificationData_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NotificationData_Encoding_DefaultXml); + + /// + /// The identifier for the DataChangeNotification_Encoding_DefaultXml Object. + /// + public static readonly NodeId DataChangeNotification_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DataChangeNotification_Encoding_DefaultXml); + + /// + /// The identifier for the MonitoredItemNotification_Encoding_DefaultXml Object. + /// + public static readonly NodeId MonitoredItemNotification_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.MonitoredItemNotification_Encoding_DefaultXml); + + /// + /// The identifier for the EventNotificationList_Encoding_DefaultXml Object. + /// + public static readonly NodeId EventNotificationList_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EventNotificationList_Encoding_DefaultXml); + + /// + /// The identifier for the EventFieldList_Encoding_DefaultXml Object. + /// + public static readonly NodeId EventFieldList_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EventFieldList_Encoding_DefaultXml); + + /// + /// The identifier for the HistoryEventFieldList_Encoding_DefaultXml Object. + /// + public static readonly NodeId HistoryEventFieldList_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.HistoryEventFieldList_Encoding_DefaultXml); + + /// + /// The identifier for the StatusChangeNotification_Encoding_DefaultXml Object. + /// + public static readonly NodeId StatusChangeNotification_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.StatusChangeNotification_Encoding_DefaultXml); + + /// + /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultXml Object. + /// + public static readonly NodeId SubscriptionAcknowledgement_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SubscriptionAcknowledgement_Encoding_DefaultXml); + + /// + /// The identifier for the PublishRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishRequest_Encoding_DefaultXml); + + /// + /// The identifier for the PublishResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId PublishResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.PublishResponse_Encoding_DefaultXml); + + /// + /// The identifier for the RepublishRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId RepublishRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RepublishRequest_Encoding_DefaultXml); + + /// + /// The identifier for the RepublishResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId RepublishResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RepublishResponse_Encoding_DefaultXml); + + /// + /// The identifier for the TransferResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId TransferResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TransferResult_Encoding_DefaultXml); + + /// + /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId TransferSubscriptionsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TransferSubscriptionsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId TransferSubscriptionsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.TransferSubscriptionsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteSubscriptionsRequest_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteSubscriptionsRequest_Encoding_DefaultXml); + + /// + /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultXml Object. + /// + public static readonly NodeId DeleteSubscriptionsResponse_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DeleteSubscriptionsResponse_Encoding_DefaultXml); + + /// + /// The identifier for the BuildInfo_Encoding_DefaultXml Object. + /// + public static readonly NodeId BuildInfo_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.BuildInfo_Encoding_DefaultXml); + + /// + /// The identifier for the RedundantServerDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId RedundantServerDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.RedundantServerDataType_Encoding_DefaultXml); + + /// + /// The identifier for the EndpointUrlListDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId EndpointUrlListDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EndpointUrlListDataType_Encoding_DefaultXml); + + /// + /// The identifier for the NetworkGroupDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId NetworkGroupDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.NetworkGroupDataType_Encoding_DefaultXml); + + /// + /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ServerDiagnosticsSummaryDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ServerDiagnosticsSummaryDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ServerStatusDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ServerStatusDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ServerStatusDataType_Encoding_DefaultXml); + + /// + /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SessionDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SessionDiagnosticsDataType_Encoding_DefaultXml); + + /// + /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SessionSecurityDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SessionSecurityDiagnosticsDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ServiceCounterDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ServiceCounterDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ServiceCounterDataType_Encoding_DefaultXml); + + /// + /// The identifier for the StatusResult_Encoding_DefaultXml Object. + /// + public static readonly NodeId StatusResult_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.StatusResult_Encoding_DefaultXml); + + /// + /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SubscriptionDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SubscriptionDiagnosticsDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ModelChangeStructureDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ModelChangeStructureDataType_Encoding_DefaultXml); + + /// + /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId SemanticChangeStructureDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.SemanticChangeStructureDataType_Encoding_DefaultXml); + + /// + /// The identifier for the Range_Encoding_DefaultXml Object. + /// + public static readonly NodeId Range_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Range_Encoding_DefaultXml); + + /// + /// The identifier for the EUInformation_Encoding_DefaultXml Object. + /// + public static readonly NodeId EUInformation_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.EUInformation_Encoding_DefaultXml); + + /// + /// The identifier for the ComplexNumberType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ComplexNumberType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ComplexNumberType_Encoding_DefaultXml); + + /// + /// The identifier for the DoubleComplexNumberType_Encoding_DefaultXml Object. + /// + public static readonly NodeId DoubleComplexNumberType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.DoubleComplexNumberType_Encoding_DefaultXml); + + /// + /// The identifier for the AxisInformation_Encoding_DefaultXml Object. + /// + public static readonly NodeId AxisInformation_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.AxisInformation_Encoding_DefaultXml); + + /// + /// The identifier for the XVType_Encoding_DefaultXml Object. + /// + public static readonly NodeId XVType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.XVType_Encoding_DefaultXml); + + /// + /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ProgramDiagnosticDataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ProgramDiagnosticDataType_Encoding_DefaultXml); + + /// + /// The identifier for the ProgramDiagnostic2DataType_Encoding_DefaultXml Object. + /// + public static readonly NodeId ProgramDiagnostic2DataType_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.ProgramDiagnostic2DataType_Encoding_DefaultXml); + + /// + /// The identifier for the Annotation_Encoding_DefaultXml Object. + /// + public static readonly NodeId Annotation_Encoding_DefaultXml = new NodeId(Opc.Ua.Objects.Annotation_Encoding_DefaultXml); + + /// + /// The identifier for the KeyValuePair_Encoding_DefaultJson Object. + /// + public static readonly NodeId KeyValuePair_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.KeyValuePair_Encoding_DefaultJson); + + /// + /// The identifier for the EndpointType_Encoding_DefaultJson Object. + /// + public static readonly NodeId EndpointType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EndpointType_Encoding_DefaultJson); + + /// + /// The identifier for the RationalNumber_Encoding_DefaultJson Object. + /// + public static readonly NodeId RationalNumber_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RationalNumber_Encoding_DefaultJson); + + /// + /// The identifier for the Vector_Encoding_DefaultJson Object. + /// + public static readonly NodeId Vector_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Vector_Encoding_DefaultJson); + + /// + /// The identifier for the ThreeDVector_Encoding_DefaultJson Object. + /// + public static readonly NodeId ThreeDVector_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ThreeDVector_Encoding_DefaultJson); + + /// + /// The identifier for the CartesianCoordinates_Encoding_DefaultJson Object. + /// + public static readonly NodeId CartesianCoordinates_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CartesianCoordinates_Encoding_DefaultJson); + + /// + /// The identifier for the ThreeDCartesianCoordinates_Encoding_DefaultJson Object. + /// + public static readonly NodeId ThreeDCartesianCoordinates_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ThreeDCartesianCoordinates_Encoding_DefaultJson); + + /// + /// The identifier for the Orientation_Encoding_DefaultJson Object. + /// + public static readonly NodeId Orientation_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Orientation_Encoding_DefaultJson); + + /// + /// The identifier for the ThreeDOrientation_Encoding_DefaultJson Object. + /// + public static readonly NodeId ThreeDOrientation_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ThreeDOrientation_Encoding_DefaultJson); + + /// + /// The identifier for the Frame_Encoding_DefaultJson Object. + /// + public static readonly NodeId Frame_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Frame_Encoding_DefaultJson); + + /// + /// The identifier for the ThreeDFrame_Encoding_DefaultJson Object. + /// + public static readonly NodeId ThreeDFrame_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ThreeDFrame_Encoding_DefaultJson); + + /// + /// The identifier for the IdentityMappingRuleType_Encoding_DefaultJson Object. + /// + public static readonly NodeId IdentityMappingRuleType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.IdentityMappingRuleType_Encoding_DefaultJson); + + /// + /// The identifier for the CurrencyUnitType_Encoding_DefaultJson Object. + /// + public static readonly NodeId CurrencyUnitType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CurrencyUnitType_Encoding_DefaultJson); + + /// + /// The identifier for the TrustListDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId TrustListDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TrustListDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DecimalDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DecimalDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DecimalDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataTypeSchemaHeader_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataTypeSchemaHeader_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataTypeSchemaHeader_Encoding_DefaultJson); + + /// + /// The identifier for the DataTypeDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataTypeDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataTypeDescription_Encoding_DefaultJson); + + /// + /// The identifier for the StructureDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId StructureDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.StructureDescription_Encoding_DefaultJson); + + /// + /// The identifier for the EnumDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId EnumDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EnumDescription_Encoding_DefaultJson); + + /// + /// The identifier for the SimpleTypeDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId SimpleTypeDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SimpleTypeDescription_Encoding_DefaultJson); + + /// + /// The identifier for the UABinaryFileDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId UABinaryFileDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UABinaryFileDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetMetaDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetMetaDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetMetaDataType_Encoding_DefaultJson); + + /// + /// The identifier for the FieldMetaData_Encoding_DefaultJson Object. + /// + public static readonly NodeId FieldMetaData_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FieldMetaData_Encoding_DefaultJson); + + /// + /// The identifier for the ConfigurationVersionDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ConfigurationVersionDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ConfigurationVersionDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PublishedDataSetDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishedDataSetDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishedDataSetDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PublishedDataSetSourceDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishedDataSetSourceDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishedDataSetSourceDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PublishedVariableDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishedVariableDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishedVariableDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PublishedDataItemsDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishedDataItemsDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishedDataItemsDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PublishedEventsDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishedEventsDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishedEventsDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetWriterDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetWriterDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetWriterDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetWriterTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetWriterTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetWriterTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetWriterMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetWriterMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetWriterMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PubSubGroupDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PubSubGroupDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PubSubGroupDataType_Encoding_DefaultJson); + + /// + /// The identifier for the WriterGroupDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId WriterGroupDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.WriterGroupDataType_Encoding_DefaultJson); + + /// + /// The identifier for the WriterGroupTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId WriterGroupTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.WriterGroupTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the WriterGroupMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId WriterGroupMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.WriterGroupMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PubSubConnectionDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PubSubConnectionDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PubSubConnectionDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ConnectionTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ConnectionTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ConnectionTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the NetworkAddressDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId NetworkAddressDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NetworkAddressDataType_Encoding_DefaultJson); + + /// + /// The identifier for the NetworkAddressUrlDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId NetworkAddressUrlDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NetworkAddressUrlDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ReaderGroupDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReaderGroupDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReaderGroupDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ReaderGroupTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReaderGroupTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReaderGroupTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ReaderGroupMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReaderGroupMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReaderGroupMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetReaderDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetReaderDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetReaderDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetReaderTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetReaderTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetReaderTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DataSetReaderMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataSetReaderMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataSetReaderMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the SubscribedDataSetDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SubscribedDataSetDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SubscribedDataSetDataType_Encoding_DefaultJson); + + /// + /// The identifier for the TargetVariablesDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId TargetVariablesDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TargetVariablesDataType_Encoding_DefaultJson); + + /// + /// The identifier for the FieldTargetDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId FieldTargetDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FieldTargetDataType_Encoding_DefaultJson); + + /// + /// The identifier for the SubscribedDataSetMirrorDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SubscribedDataSetMirrorDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SubscribedDataSetMirrorDataType_Encoding_DefaultJson); + + /// + /// The identifier for the PubSubConfigurationDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId PubSubConfigurationDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PubSubConfigurationDataType_Encoding_DefaultJson); + + /// + /// The identifier for the UadpWriterGroupMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId UadpWriterGroupMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UadpWriterGroupMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the UadpDataSetWriterMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId UadpDataSetWriterMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UadpDataSetWriterMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the UadpDataSetReaderMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId UadpDataSetReaderMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UadpDataSetReaderMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the JsonWriterGroupMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId JsonWriterGroupMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.JsonWriterGroupMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the JsonDataSetWriterMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId JsonDataSetWriterMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.JsonDataSetWriterMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the JsonDataSetReaderMessageDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId JsonDataSetReaderMessageDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.JsonDataSetReaderMessageDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DatagramConnectionTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DatagramConnectionTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DatagramConnectionTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the DatagramWriterGroupTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DatagramWriterGroupTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DatagramWriterGroupTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the BrokerConnectionTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrokerConnectionTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrokerConnectionTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the BrokerWriterGroupTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrokerWriterGroupTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrokerWriterGroupTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the BrokerDataSetWriterTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrokerDataSetWriterTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrokerDataSetWriterTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the BrokerDataSetReaderTransportDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrokerDataSetReaderTransportDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrokerDataSetReaderTransportDataType_Encoding_DefaultJson); + + /// + /// The identifier for the AliasNameDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId AliasNameDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AliasNameDataType_Encoding_DefaultJson); + + /// + /// The identifier for the RolePermissionType_Encoding_DefaultJson Object. + /// + public static readonly NodeId RolePermissionType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RolePermissionType_Encoding_DefaultJson); + + /// + /// The identifier for the DataTypeDefinition_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataTypeDefinition_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataTypeDefinition_Encoding_DefaultJson); + + /// + /// The identifier for the StructureField_Encoding_DefaultJson Object. + /// + public static readonly NodeId StructureField_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.StructureField_Encoding_DefaultJson); + + /// + /// The identifier for the StructureDefinition_Encoding_DefaultJson Object. + /// + public static readonly NodeId StructureDefinition_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.StructureDefinition_Encoding_DefaultJson); + + /// + /// The identifier for the EnumDefinition_Encoding_DefaultJson Object. + /// + public static readonly NodeId EnumDefinition_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EnumDefinition_Encoding_DefaultJson); + + /// + /// The identifier for the Node_Encoding_DefaultJson Object. + /// + public static readonly NodeId Node_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Node_Encoding_DefaultJson); + + /// + /// The identifier for the InstanceNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId InstanceNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.InstanceNode_Encoding_DefaultJson); + + /// + /// The identifier for the TypeNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId TypeNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TypeNode_Encoding_DefaultJson); + + /// + /// The identifier for the ObjectNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId ObjectNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ObjectNode_Encoding_DefaultJson); + + /// + /// The identifier for the ObjectTypeNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId ObjectTypeNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ObjectTypeNode_Encoding_DefaultJson); + + /// + /// The identifier for the VariableNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId VariableNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.VariableNode_Encoding_DefaultJson); + + /// + /// The identifier for the VariableTypeNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId VariableTypeNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.VariableTypeNode_Encoding_DefaultJson); + + /// + /// The identifier for the ReferenceTypeNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReferenceTypeNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReferenceTypeNode_Encoding_DefaultJson); + + /// + /// The identifier for the MethodNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId MethodNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MethodNode_Encoding_DefaultJson); + + /// + /// The identifier for the ViewNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId ViewNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ViewNode_Encoding_DefaultJson); + + /// + /// The identifier for the DataTypeNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataTypeNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataTypeNode_Encoding_DefaultJson); + + /// + /// The identifier for the ReferenceNode_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReferenceNode_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReferenceNode_Encoding_DefaultJson); + + /// + /// The identifier for the Argument_Encoding_DefaultJson Object. + /// + public static readonly NodeId Argument_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Argument_Encoding_DefaultJson); + + /// + /// The identifier for the EnumValueType_Encoding_DefaultJson Object. + /// + public static readonly NodeId EnumValueType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EnumValueType_Encoding_DefaultJson); + + /// + /// The identifier for the EnumField_Encoding_DefaultJson Object. + /// + public static readonly NodeId EnumField_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EnumField_Encoding_DefaultJson); + + /// + /// The identifier for the OptionSet_Encoding_DefaultJson Object. + /// + public static readonly NodeId OptionSet_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.OptionSet_Encoding_DefaultJson); + + /// + /// The identifier for the Union_Encoding_DefaultJson Object. + /// + public static readonly NodeId Union_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Union_Encoding_DefaultJson); + + /// + /// The identifier for the TimeZoneDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId TimeZoneDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TimeZoneDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ApplicationDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId ApplicationDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ApplicationDescription_Encoding_DefaultJson); + + /// + /// The identifier for the RequestHeader_Encoding_DefaultJson Object. + /// + public static readonly NodeId RequestHeader_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RequestHeader_Encoding_DefaultJson); + + /// + /// The identifier for the ResponseHeader_Encoding_DefaultJson Object. + /// + public static readonly NodeId ResponseHeader_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ResponseHeader_Encoding_DefaultJson); + + /// + /// The identifier for the ServiceFault_Encoding_DefaultJson Object. + /// + public static readonly NodeId ServiceFault_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ServiceFault_Encoding_DefaultJson); + + /// + /// The identifier for the SessionlessInvokeRequestType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SessionlessInvokeRequestType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SessionlessInvokeRequestType_Encoding_DefaultJson); + + /// + /// The identifier for the SessionlessInvokeResponseType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SessionlessInvokeResponseType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SessionlessInvokeResponseType_Encoding_DefaultJson); + + /// + /// The identifier for the FindServersRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId FindServersRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FindServersRequest_Encoding_DefaultJson); + + /// + /// The identifier for the FindServersResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId FindServersResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FindServersResponse_Encoding_DefaultJson); + + /// + /// The identifier for the ServerOnNetwork_Encoding_DefaultJson Object. + /// + public static readonly NodeId ServerOnNetwork_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ServerOnNetwork_Encoding_DefaultJson); + + /// + /// The identifier for the FindServersOnNetworkRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId FindServersOnNetworkRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FindServersOnNetworkRequest_Encoding_DefaultJson); + + /// + /// The identifier for the FindServersOnNetworkResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId FindServersOnNetworkResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FindServersOnNetworkResponse_Encoding_DefaultJson); + + /// + /// The identifier for the UserTokenPolicy_Encoding_DefaultJson Object. + /// + public static readonly NodeId UserTokenPolicy_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UserTokenPolicy_Encoding_DefaultJson); + + /// + /// The identifier for the EndpointDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId EndpointDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EndpointDescription_Encoding_DefaultJson); + + /// + /// The identifier for the GetEndpointsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId GetEndpointsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.GetEndpointsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the GetEndpointsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId GetEndpointsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.GetEndpointsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the RegisteredServer_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisteredServer_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisteredServer_Encoding_DefaultJson); + + /// + /// The identifier for the RegisterServerRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisterServerRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisterServerRequest_Encoding_DefaultJson); + + /// + /// The identifier for the RegisterServerResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisterServerResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisterServerResponse_Encoding_DefaultJson); + + /// + /// The identifier for the DiscoveryConfiguration_Encoding_DefaultJson Object. + /// + public static readonly NodeId DiscoveryConfiguration_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DiscoveryConfiguration_Encoding_DefaultJson); + + /// + /// The identifier for the MdnsDiscoveryConfiguration_Encoding_DefaultJson Object. + /// + public static readonly NodeId MdnsDiscoveryConfiguration_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MdnsDiscoveryConfiguration_Encoding_DefaultJson); + + /// + /// The identifier for the RegisterServer2Request_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisterServer2Request_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisterServer2Request_Encoding_DefaultJson); + + /// + /// The identifier for the RegisterServer2Response_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisterServer2Response_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisterServer2Response_Encoding_DefaultJson); + + /// + /// The identifier for the ChannelSecurityToken_Encoding_DefaultJson Object. + /// + public static readonly NodeId ChannelSecurityToken_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ChannelSecurityToken_Encoding_DefaultJson); + + /// + /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId OpenSecureChannelRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.OpenSecureChannelRequest_Encoding_DefaultJson); + + /// + /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId OpenSecureChannelResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.OpenSecureChannelResponse_Encoding_DefaultJson); + + /// + /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CloseSecureChannelRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CloseSecureChannelRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CloseSecureChannelResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CloseSecureChannelResponse_Encoding_DefaultJson); + + /// + /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultJson Object. + /// + public static readonly NodeId SignedSoftwareCertificate_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SignedSoftwareCertificate_Encoding_DefaultJson); + + /// + /// The identifier for the SignatureData_Encoding_DefaultJson Object. + /// + public static readonly NodeId SignatureData_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SignatureData_Encoding_DefaultJson); + + /// + /// The identifier for the CreateSessionRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CreateSessionRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CreateSessionRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CreateSessionResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CreateSessionResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CreateSessionResponse_Encoding_DefaultJson); + + /// + /// The identifier for the UserIdentityToken_Encoding_DefaultJson Object. + /// + public static readonly NodeId UserIdentityToken_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UserIdentityToken_Encoding_DefaultJson); + + /// + /// The identifier for the AnonymousIdentityToken_Encoding_DefaultJson Object. + /// + public static readonly NodeId AnonymousIdentityToken_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AnonymousIdentityToken_Encoding_DefaultJson); + + /// + /// The identifier for the UserNameIdentityToken_Encoding_DefaultJson Object. + /// + public static readonly NodeId UserNameIdentityToken_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UserNameIdentityToken_Encoding_DefaultJson); + + /// + /// The identifier for the X509IdentityToken_Encoding_DefaultJson Object. + /// + public static readonly NodeId X509IdentityToken_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.X509IdentityToken_Encoding_DefaultJson); + + /// + /// The identifier for the IssuedIdentityToken_Encoding_DefaultJson Object. + /// + public static readonly NodeId IssuedIdentityToken_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.IssuedIdentityToken_Encoding_DefaultJson); + + /// + /// The identifier for the ActivateSessionRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId ActivateSessionRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ActivateSessionRequest_Encoding_DefaultJson); + + /// + /// The identifier for the ActivateSessionResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId ActivateSessionResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ActivateSessionResponse_Encoding_DefaultJson); + + /// + /// The identifier for the CloseSessionRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CloseSessionRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CloseSessionRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CloseSessionResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CloseSessionResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CloseSessionResponse_Encoding_DefaultJson); + + /// + /// The identifier for the CancelRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CancelRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CancelRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CancelResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CancelResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CancelResponse_Encoding_DefaultJson); + + /// + /// The identifier for the NodeAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId NodeAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NodeAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the ObjectAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId ObjectAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ObjectAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the VariableAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId VariableAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.VariableAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the MethodAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId MethodAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MethodAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the ObjectTypeAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId ObjectTypeAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ObjectTypeAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the VariableTypeAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId VariableTypeAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.VariableTypeAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReferenceTypeAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReferenceTypeAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the DataTypeAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataTypeAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataTypeAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the ViewAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId ViewAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ViewAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the GenericAttributeValue_Encoding_DefaultJson Object. + /// + public static readonly NodeId GenericAttributeValue_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.GenericAttributeValue_Encoding_DefaultJson); + + /// + /// The identifier for the GenericAttributes_Encoding_DefaultJson Object. + /// + public static readonly NodeId GenericAttributes_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.GenericAttributes_Encoding_DefaultJson); + + /// + /// The identifier for the AddNodesItem_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddNodesItem_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddNodesItem_Encoding_DefaultJson); + + /// + /// The identifier for the AddNodesResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddNodesResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddNodesResult_Encoding_DefaultJson); + + /// + /// The identifier for the AddNodesRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddNodesRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddNodesRequest_Encoding_DefaultJson); + + /// + /// The identifier for the AddNodesResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddNodesResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddNodesResponse_Encoding_DefaultJson); + + /// + /// The identifier for the AddReferencesItem_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddReferencesItem_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddReferencesItem_Encoding_DefaultJson); + + /// + /// The identifier for the AddReferencesRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddReferencesRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddReferencesRequest_Encoding_DefaultJson); + + /// + /// The identifier for the AddReferencesResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId AddReferencesResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AddReferencesResponse_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteNodesItem_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteNodesItem_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteNodesItem_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteNodesRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteNodesRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteNodesRequest_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteNodesResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteNodesResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteNodesResponse_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteReferencesItem_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteReferencesItem_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteReferencesItem_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteReferencesRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteReferencesRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteReferencesRequest_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteReferencesResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteReferencesResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteReferencesResponse_Encoding_DefaultJson); + + /// + /// The identifier for the ViewDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId ViewDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ViewDescription_Encoding_DefaultJson); + + /// + /// The identifier for the BrowseDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowseDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowseDescription_Encoding_DefaultJson); + + /// + /// The identifier for the ReferenceDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReferenceDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReferenceDescription_Encoding_DefaultJson); + + /// + /// The identifier for the BrowseResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowseResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowseResult_Encoding_DefaultJson); + + /// + /// The identifier for the BrowseRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowseRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowseRequest_Encoding_DefaultJson); + + /// + /// The identifier for the BrowseResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowseResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowseResponse_Encoding_DefaultJson); + + /// + /// The identifier for the BrowseNextRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowseNextRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowseNextRequest_Encoding_DefaultJson); + + /// + /// The identifier for the BrowseNextResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowseNextResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowseNextResponse_Encoding_DefaultJson); + + /// + /// The identifier for the RelativePathElement_Encoding_DefaultJson Object. + /// + public static readonly NodeId RelativePathElement_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RelativePathElement_Encoding_DefaultJson); + + /// + /// The identifier for the RelativePath_Encoding_DefaultJson Object. + /// + public static readonly NodeId RelativePath_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RelativePath_Encoding_DefaultJson); + + /// + /// The identifier for the BrowsePath_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowsePath_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowsePath_Encoding_DefaultJson); + + /// + /// The identifier for the BrowsePathTarget_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowsePathTarget_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowsePathTarget_Encoding_DefaultJson); + + /// + /// The identifier for the BrowsePathResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId BrowsePathResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BrowsePathResult_Encoding_DefaultJson); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the RegisterNodesRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisterNodesRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisterNodesRequest_Encoding_DefaultJson); + + /// + /// The identifier for the RegisterNodesResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId RegisterNodesResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RegisterNodesResponse_Encoding_DefaultJson); + + /// + /// The identifier for the UnregisterNodesRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId UnregisterNodesRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UnregisterNodesRequest_Encoding_DefaultJson); + + /// + /// The identifier for the UnregisterNodesResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId UnregisterNodesResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UnregisterNodesResponse_Encoding_DefaultJson); + + /// + /// The identifier for the EndpointConfiguration_Encoding_DefaultJson Object. + /// + public static readonly NodeId EndpointConfiguration_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EndpointConfiguration_Encoding_DefaultJson); + + /// + /// The identifier for the QueryDataDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId QueryDataDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.QueryDataDescription_Encoding_DefaultJson); + + /// + /// The identifier for the NodeTypeDescription_Encoding_DefaultJson Object. + /// + public static readonly NodeId NodeTypeDescription_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NodeTypeDescription_Encoding_DefaultJson); + + /// + /// The identifier for the QueryDataSet_Encoding_DefaultJson Object. + /// + public static readonly NodeId QueryDataSet_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.QueryDataSet_Encoding_DefaultJson); + + /// + /// The identifier for the NodeReference_Encoding_DefaultJson Object. + /// + public static readonly NodeId NodeReference_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NodeReference_Encoding_DefaultJson); + + /// + /// The identifier for the ContentFilterElement_Encoding_DefaultJson Object. + /// + public static readonly NodeId ContentFilterElement_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ContentFilterElement_Encoding_DefaultJson); + + /// + /// The identifier for the ContentFilter_Encoding_DefaultJson Object. + /// + public static readonly NodeId ContentFilter_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ContentFilter_Encoding_DefaultJson); + + /// + /// The identifier for the FilterOperand_Encoding_DefaultJson Object. + /// + public static readonly NodeId FilterOperand_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.FilterOperand_Encoding_DefaultJson); + + /// + /// The identifier for the ElementOperand_Encoding_DefaultJson Object. + /// + public static readonly NodeId ElementOperand_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ElementOperand_Encoding_DefaultJson); + + /// + /// The identifier for the LiteralOperand_Encoding_DefaultJson Object. + /// + public static readonly NodeId LiteralOperand_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.LiteralOperand_Encoding_DefaultJson); + + /// + /// The identifier for the AttributeOperand_Encoding_DefaultJson Object. + /// + public static readonly NodeId AttributeOperand_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AttributeOperand_Encoding_DefaultJson); + + /// + /// The identifier for the SimpleAttributeOperand_Encoding_DefaultJson Object. + /// + public static readonly NodeId SimpleAttributeOperand_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SimpleAttributeOperand_Encoding_DefaultJson); + + /// + /// The identifier for the ContentFilterElementResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId ContentFilterElementResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ContentFilterElementResult_Encoding_DefaultJson); + + /// + /// The identifier for the ContentFilterResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId ContentFilterResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ContentFilterResult_Encoding_DefaultJson); + + /// + /// The identifier for the ParsingResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId ParsingResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ParsingResult_Encoding_DefaultJson); + + /// + /// The identifier for the QueryFirstRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId QueryFirstRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.QueryFirstRequest_Encoding_DefaultJson); + + /// + /// The identifier for the QueryFirstResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId QueryFirstResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.QueryFirstResponse_Encoding_DefaultJson); + + /// + /// The identifier for the QueryNextRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId QueryNextRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.QueryNextRequest_Encoding_DefaultJson); + + /// + /// The identifier for the QueryNextResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId QueryNextResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.QueryNextResponse_Encoding_DefaultJson); + + /// + /// The identifier for the ReadValueId_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadValueId_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadValueId_Encoding_DefaultJson); + + /// + /// The identifier for the ReadRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadRequest_Encoding_DefaultJson); + + /// + /// The identifier for the ReadResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadResponse_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryReadValueId_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryReadValueId_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryReadValueId_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryReadResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryReadResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryReadResult_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryReadDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryReadDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryReadDetails_Encoding_DefaultJson); + + /// + /// The identifier for the ReadEventDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadEventDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadEventDetails_Encoding_DefaultJson); + + /// + /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadRawModifiedDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadRawModifiedDetails_Encoding_DefaultJson); + + /// + /// The identifier for the ReadProcessedDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadProcessedDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadProcessedDetails_Encoding_DefaultJson); + + /// + /// The identifier for the ReadAtTimeDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadAtTimeDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadAtTimeDetails_Encoding_DefaultJson); + + /// + /// The identifier for the ReadAnnotationDataDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId ReadAnnotationDataDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ReadAnnotationDataDetails_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryData_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryData_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryData_Encoding_DefaultJson); + + /// + /// The identifier for the ModificationInfo_Encoding_DefaultJson Object. + /// + public static readonly NodeId ModificationInfo_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ModificationInfo_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryModifiedData_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryModifiedData_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryModifiedData_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryEvent_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryEvent_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryEvent_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryReadRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryReadRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryReadRequest_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryReadResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryReadResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryReadResponse_Encoding_DefaultJson); + + /// + /// The identifier for the WriteValue_Encoding_DefaultJson Object. + /// + public static readonly NodeId WriteValue_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.WriteValue_Encoding_DefaultJson); + + /// + /// The identifier for the WriteRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId WriteRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.WriteRequest_Encoding_DefaultJson); + + /// + /// The identifier for the WriteResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId WriteResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.WriteResponse_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryUpdateDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryUpdateDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryUpdateDetails_Encoding_DefaultJson); + + /// + /// The identifier for the UpdateDataDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId UpdateDataDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UpdateDataDetails_Encoding_DefaultJson); + + /// + /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId UpdateStructureDataDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UpdateStructureDataDetails_Encoding_DefaultJson); + + /// + /// The identifier for the UpdateEventDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId UpdateEventDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.UpdateEventDetails_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteRawModifiedDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteRawModifiedDetails_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteAtTimeDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteAtTimeDetails_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteEventDetails_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteEventDetails_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteEventDetails_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryUpdateResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryUpdateResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryUpdateResult_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryUpdateRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryUpdateRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryUpdateRequest_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryUpdateResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryUpdateResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryUpdateResponse_Encoding_DefaultJson); + + /// + /// The identifier for the CallMethodRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CallMethodRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CallMethodRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CallMethodResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId CallMethodResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CallMethodResult_Encoding_DefaultJson); + + /// + /// The identifier for the CallRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CallRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CallRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CallResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CallResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CallResponse_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoringFilter_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoringFilter_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoringFilter_Encoding_DefaultJson); + + /// + /// The identifier for the DataChangeFilter_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataChangeFilter_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataChangeFilter_Encoding_DefaultJson); + + /// + /// The identifier for the EventFilter_Encoding_DefaultJson Object. + /// + public static readonly NodeId EventFilter_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EventFilter_Encoding_DefaultJson); + + /// + /// The identifier for the AggregateConfiguration_Encoding_DefaultJson Object. + /// + public static readonly NodeId AggregateConfiguration_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AggregateConfiguration_Encoding_DefaultJson); + + /// + /// The identifier for the AggregateFilter_Encoding_DefaultJson Object. + /// + public static readonly NodeId AggregateFilter_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AggregateFilter_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoringFilterResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoringFilterResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoringFilterResult_Encoding_DefaultJson); + + /// + /// The identifier for the EventFilterResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId EventFilterResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EventFilterResult_Encoding_DefaultJson); + + /// + /// The identifier for the AggregateFilterResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId AggregateFilterResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AggregateFilterResult_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoringParameters_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoringParameters_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoringParameters_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoredItemCreateRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoredItemCreateRequest_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoredItemCreateResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoredItemCreateResult_Encoding_DefaultJson); + + /// + /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CreateMonitoredItemsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CreateMonitoredItemsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CreateMonitoredItemsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CreateMonitoredItemsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoredItemModifyRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoredItemModifyRequest_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoredItemModifyResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoredItemModifyResult_Encoding_DefaultJson); + + /// + /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId ModifyMonitoredItemsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ModifyMonitoredItemsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId ModifyMonitoredItemsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ModifyMonitoredItemsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId SetMonitoringModeRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SetMonitoringModeRequest_Encoding_DefaultJson); + + /// + /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId SetMonitoringModeResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SetMonitoringModeResponse_Encoding_DefaultJson); + + /// + /// The identifier for the SetTriggeringRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId SetTriggeringRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SetTriggeringRequest_Encoding_DefaultJson); + + /// + /// The identifier for the SetTriggeringResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId SetTriggeringResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SetTriggeringResponse_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteMonitoredItemsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteMonitoredItemsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteMonitoredItemsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteMonitoredItemsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId CreateSubscriptionRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CreateSubscriptionRequest_Encoding_DefaultJson); + + /// + /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId CreateSubscriptionResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.CreateSubscriptionResponse_Encoding_DefaultJson); + + /// + /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId ModifySubscriptionRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ModifySubscriptionRequest_Encoding_DefaultJson); + + /// + /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId ModifySubscriptionResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ModifySubscriptionResponse_Encoding_DefaultJson); + + /// + /// The identifier for the SetPublishingModeRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId SetPublishingModeRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SetPublishingModeRequest_Encoding_DefaultJson); + + /// + /// The identifier for the SetPublishingModeResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId SetPublishingModeResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SetPublishingModeResponse_Encoding_DefaultJson); + + /// + /// The identifier for the NotificationMessage_Encoding_DefaultJson Object. + /// + public static readonly NodeId NotificationMessage_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NotificationMessage_Encoding_DefaultJson); + + /// + /// The identifier for the NotificationData_Encoding_DefaultJson Object. + /// + public static readonly NodeId NotificationData_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NotificationData_Encoding_DefaultJson); + + /// + /// The identifier for the DataChangeNotification_Encoding_DefaultJson Object. + /// + public static readonly NodeId DataChangeNotification_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DataChangeNotification_Encoding_DefaultJson); + + /// + /// The identifier for the MonitoredItemNotification_Encoding_DefaultJson Object. + /// + public static readonly NodeId MonitoredItemNotification_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.MonitoredItemNotification_Encoding_DefaultJson); + + /// + /// The identifier for the EventNotificationList_Encoding_DefaultJson Object. + /// + public static readonly NodeId EventNotificationList_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EventNotificationList_Encoding_DefaultJson); + + /// + /// The identifier for the EventFieldList_Encoding_DefaultJson Object. + /// + public static readonly NodeId EventFieldList_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EventFieldList_Encoding_DefaultJson); + + /// + /// The identifier for the HistoryEventFieldList_Encoding_DefaultJson Object. + /// + public static readonly NodeId HistoryEventFieldList_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.HistoryEventFieldList_Encoding_DefaultJson); + + /// + /// The identifier for the StatusChangeNotification_Encoding_DefaultJson Object. + /// + public static readonly NodeId StatusChangeNotification_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.StatusChangeNotification_Encoding_DefaultJson); + + /// + /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultJson Object. + /// + public static readonly NodeId SubscriptionAcknowledgement_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SubscriptionAcknowledgement_Encoding_DefaultJson); + + /// + /// The identifier for the PublishRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishRequest_Encoding_DefaultJson); + + /// + /// The identifier for the PublishResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId PublishResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.PublishResponse_Encoding_DefaultJson); + + /// + /// The identifier for the RepublishRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId RepublishRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RepublishRequest_Encoding_DefaultJson); + + /// + /// The identifier for the RepublishResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId RepublishResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RepublishResponse_Encoding_DefaultJson); + + /// + /// The identifier for the TransferResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId TransferResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TransferResult_Encoding_DefaultJson); + + /// + /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId TransferSubscriptionsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TransferSubscriptionsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId TransferSubscriptionsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.TransferSubscriptionsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteSubscriptionsRequest_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteSubscriptionsRequest_Encoding_DefaultJson); + + /// + /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultJson Object. + /// + public static readonly NodeId DeleteSubscriptionsResponse_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DeleteSubscriptionsResponse_Encoding_DefaultJson); + + /// + /// The identifier for the BuildInfo_Encoding_DefaultJson Object. + /// + public static readonly NodeId BuildInfo_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.BuildInfo_Encoding_DefaultJson); + + /// + /// The identifier for the RedundantServerDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId RedundantServerDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.RedundantServerDataType_Encoding_DefaultJson); + + /// + /// The identifier for the EndpointUrlListDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId EndpointUrlListDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EndpointUrlListDataType_Encoding_DefaultJson); + + /// + /// The identifier for the NetworkGroupDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId NetworkGroupDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.NetworkGroupDataType_Encoding_DefaultJson); + + /// + /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ServerDiagnosticsSummaryDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ServerDiagnosticsSummaryDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ServerStatusDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ServerStatusDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ServerStatusDataType_Encoding_DefaultJson); + + /// + /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SessionDiagnosticsDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SessionDiagnosticsDataType_Encoding_DefaultJson); + + /// + /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SessionSecurityDiagnosticsDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SessionSecurityDiagnosticsDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ServiceCounterDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ServiceCounterDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ServiceCounterDataType_Encoding_DefaultJson); + + /// + /// The identifier for the StatusResult_Encoding_DefaultJson Object. + /// + public static readonly NodeId StatusResult_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.StatusResult_Encoding_DefaultJson); + + /// + /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SubscriptionDiagnosticsDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SubscriptionDiagnosticsDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ModelChangeStructureDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ModelChangeStructureDataType_Encoding_DefaultJson); + + /// + /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId SemanticChangeStructureDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.SemanticChangeStructureDataType_Encoding_DefaultJson); + + /// + /// The identifier for the Range_Encoding_DefaultJson Object. + /// + public static readonly NodeId Range_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Range_Encoding_DefaultJson); + + /// + /// The identifier for the EUInformation_Encoding_DefaultJson Object. + /// + public static readonly NodeId EUInformation_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.EUInformation_Encoding_DefaultJson); + + /// + /// The identifier for the ComplexNumberType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ComplexNumberType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ComplexNumberType_Encoding_DefaultJson); + + /// + /// The identifier for the DoubleComplexNumberType_Encoding_DefaultJson Object. + /// + public static readonly NodeId DoubleComplexNumberType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.DoubleComplexNumberType_Encoding_DefaultJson); + + /// + /// The identifier for the AxisInformation_Encoding_DefaultJson Object. + /// + public static readonly NodeId AxisInformation_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.AxisInformation_Encoding_DefaultJson); + + /// + /// The identifier for the XVType_Encoding_DefaultJson Object. + /// + public static readonly NodeId XVType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.XVType_Encoding_DefaultJson); + + /// + /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ProgramDiagnosticDataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ProgramDiagnosticDataType_Encoding_DefaultJson); + + /// + /// The identifier for the ProgramDiagnostic2DataType_Encoding_DefaultJson Object. + /// + public static readonly NodeId ProgramDiagnostic2DataType_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.ProgramDiagnostic2DataType_Encoding_DefaultJson); + + /// + /// The identifier for the Annotation_Encoding_DefaultJson Object. + /// + public static readonly NodeId Annotation_Encoding_DefaultJson = new NodeId(Opc.Ua.Objects.Annotation_Encoding_DefaultJson); + } + #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(Opc.Ua.ObjectTypes.BaseObjectType); + + /// + /// The identifier for the FolderType ObjectType. + /// + public static readonly NodeId FolderType = new NodeId(Opc.Ua.ObjectTypes.FolderType); + + /// + /// The identifier for the DataTypeSystemType ObjectType. + /// + public static readonly NodeId DataTypeSystemType = new NodeId(Opc.Ua.ObjectTypes.DataTypeSystemType); + + /// + /// The identifier for the DataTypeEncodingType ObjectType. + /// + public static readonly NodeId DataTypeEncodingType = new NodeId(Opc.Ua.ObjectTypes.DataTypeEncodingType); + + /// + /// The identifier for the ModellingRuleType ObjectType. + /// + public static readonly NodeId ModellingRuleType = new NodeId(Opc.Ua.ObjectTypes.ModellingRuleType); + + /// + /// The identifier for the ServerType ObjectType. + /// + public static readonly NodeId ServerType = new NodeId(Opc.Ua.ObjectTypes.ServerType); + + /// + /// The identifier for the ServerCapabilitiesType ObjectType. + /// + public static readonly NodeId ServerCapabilitiesType = new NodeId(Opc.Ua.ObjectTypes.ServerCapabilitiesType); + + /// + /// The identifier for the ServerDiagnosticsType ObjectType. + /// + public static readonly NodeId ServerDiagnosticsType = new NodeId(Opc.Ua.ObjectTypes.ServerDiagnosticsType); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType ObjectType. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType = new NodeId(Opc.Ua.ObjectTypes.SessionsDiagnosticsSummaryType); + + /// + /// The identifier for the SessionDiagnosticsObjectType ObjectType. + /// + public static readonly NodeId SessionDiagnosticsObjectType = new NodeId(Opc.Ua.ObjectTypes.SessionDiagnosticsObjectType); + + /// + /// The identifier for the VendorServerInfoType ObjectType. + /// + public static readonly NodeId VendorServerInfoType = new NodeId(Opc.Ua.ObjectTypes.VendorServerInfoType); + + /// + /// The identifier for the ServerRedundancyType ObjectType. + /// + public static readonly NodeId ServerRedundancyType = new NodeId(Opc.Ua.ObjectTypes.ServerRedundancyType); + + /// + /// The identifier for the TransparentRedundancyType ObjectType. + /// + public static readonly NodeId TransparentRedundancyType = new NodeId(Opc.Ua.ObjectTypes.TransparentRedundancyType); + + /// + /// The identifier for the NonTransparentRedundancyType ObjectType. + /// + public static readonly NodeId NonTransparentRedundancyType = new NodeId(Opc.Ua.ObjectTypes.NonTransparentRedundancyType); + + /// + /// The identifier for the NonTransparentNetworkRedundancyType ObjectType. + /// + public static readonly NodeId NonTransparentNetworkRedundancyType = new NodeId(Opc.Ua.ObjectTypes.NonTransparentNetworkRedundancyType); + + /// + /// The identifier for the OperationLimitsType ObjectType. + /// + public static readonly NodeId OperationLimitsType = new NodeId(Opc.Ua.ObjectTypes.OperationLimitsType); + + /// + /// The identifier for the FileType ObjectType. + /// + public static readonly NodeId FileType = new NodeId(Opc.Ua.ObjectTypes.FileType); + + /// + /// The identifier for the AddressSpaceFileType ObjectType. + /// + public static readonly NodeId AddressSpaceFileType = new NodeId(Opc.Ua.ObjectTypes.AddressSpaceFileType); + + /// + /// The identifier for the NamespaceMetadataType ObjectType. + /// + public static readonly NodeId NamespaceMetadataType = new NodeId(Opc.Ua.ObjectTypes.NamespaceMetadataType); + + /// + /// The identifier for the NamespacesType ObjectType. + /// + public static readonly NodeId NamespacesType = new NodeId(Opc.Ua.ObjectTypes.NamespacesType); + + /// + /// The identifier for the BaseEventType ObjectType. + /// + public static readonly NodeId BaseEventType = new NodeId(Opc.Ua.ObjectTypes.BaseEventType); + + /// + /// The identifier for the AuditEventType ObjectType. + /// + public static readonly NodeId AuditEventType = new NodeId(Opc.Ua.ObjectTypes.AuditEventType); + + /// + /// The identifier for the AuditSecurityEventType ObjectType. + /// + public static readonly NodeId AuditSecurityEventType = new NodeId(Opc.Ua.ObjectTypes.AuditSecurityEventType); + + /// + /// The identifier for the AuditChannelEventType ObjectType. + /// + public static readonly NodeId AuditChannelEventType = new NodeId(Opc.Ua.ObjectTypes.AuditChannelEventType); + + /// + /// The identifier for the AuditOpenSecureChannelEventType ObjectType. + /// + public static readonly NodeId AuditOpenSecureChannelEventType = new NodeId(Opc.Ua.ObjectTypes.AuditOpenSecureChannelEventType); + + /// + /// The identifier for the AuditSessionEventType ObjectType. + /// + public static readonly NodeId AuditSessionEventType = new NodeId(Opc.Ua.ObjectTypes.AuditSessionEventType); + + /// + /// The identifier for the AuditCreateSessionEventType ObjectType. + /// + public static readonly NodeId AuditCreateSessionEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCreateSessionEventType); + + /// + /// The identifier for the AuditUrlMismatchEventType ObjectType. + /// + public static readonly NodeId AuditUrlMismatchEventType = new NodeId(Opc.Ua.ObjectTypes.AuditUrlMismatchEventType); + + /// + /// The identifier for the AuditActivateSessionEventType ObjectType. + /// + public static readonly NodeId AuditActivateSessionEventType = new NodeId(Opc.Ua.ObjectTypes.AuditActivateSessionEventType); + + /// + /// The identifier for the AuditCancelEventType ObjectType. + /// + public static readonly NodeId AuditCancelEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCancelEventType); + + /// + /// The identifier for the AuditCertificateEventType ObjectType. + /// + public static readonly NodeId AuditCertificateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateEventType); + + /// + /// The identifier for the AuditCertificateDataMismatchEventType ObjectType. + /// + public static readonly NodeId AuditCertificateDataMismatchEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateDataMismatchEventType); + + /// + /// The identifier for the AuditCertificateExpiredEventType ObjectType. + /// + public static readonly NodeId AuditCertificateExpiredEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateExpiredEventType); + + /// + /// The identifier for the AuditCertificateInvalidEventType ObjectType. + /// + public static readonly NodeId AuditCertificateInvalidEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateInvalidEventType); + + /// + /// The identifier for the AuditCertificateUntrustedEventType ObjectType. + /// + public static readonly NodeId AuditCertificateUntrustedEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateUntrustedEventType); + + /// + /// The identifier for the AuditCertificateRevokedEventType ObjectType. + /// + public static readonly NodeId AuditCertificateRevokedEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateRevokedEventType); + + /// + /// The identifier for the AuditCertificateMismatchEventType ObjectType. + /// + public static readonly NodeId AuditCertificateMismatchEventType = new NodeId(Opc.Ua.ObjectTypes.AuditCertificateMismatchEventType); + + /// + /// The identifier for the AuditNodeManagementEventType ObjectType. + /// + public static readonly NodeId AuditNodeManagementEventType = new NodeId(Opc.Ua.ObjectTypes.AuditNodeManagementEventType); + + /// + /// The identifier for the AuditAddNodesEventType ObjectType. + /// + public static readonly NodeId AuditAddNodesEventType = new NodeId(Opc.Ua.ObjectTypes.AuditAddNodesEventType); + + /// + /// The identifier for the AuditDeleteNodesEventType ObjectType. + /// + public static readonly NodeId AuditDeleteNodesEventType = new NodeId(Opc.Ua.ObjectTypes.AuditDeleteNodesEventType); + + /// + /// The identifier for the AuditAddReferencesEventType ObjectType. + /// + public static readonly NodeId AuditAddReferencesEventType = new NodeId(Opc.Ua.ObjectTypes.AuditAddReferencesEventType); + + /// + /// The identifier for the AuditDeleteReferencesEventType ObjectType. + /// + public static readonly NodeId AuditDeleteReferencesEventType = new NodeId(Opc.Ua.ObjectTypes.AuditDeleteReferencesEventType); + + /// + /// The identifier for the AuditUpdateEventType ObjectType. + /// + public static readonly NodeId AuditUpdateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditUpdateEventType); + + /// + /// The identifier for the AuditWriteUpdateEventType ObjectType. + /// + public static readonly NodeId AuditWriteUpdateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditWriteUpdateEventType); + + /// + /// The identifier for the AuditHistoryUpdateEventType ObjectType. + /// + public static readonly NodeId AuditHistoryUpdateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryUpdateEventType); + + /// + /// The identifier for the AuditUpdateMethodEventType ObjectType. + /// + public static readonly NodeId AuditUpdateMethodEventType = new NodeId(Opc.Ua.ObjectTypes.AuditUpdateMethodEventType); + + /// + /// The identifier for the SystemEventType ObjectType. + /// + public static readonly NodeId SystemEventType = new NodeId(Opc.Ua.ObjectTypes.SystemEventType); + + /// + /// The identifier for the DeviceFailureEventType ObjectType. + /// + public static readonly NodeId DeviceFailureEventType = new NodeId(Opc.Ua.ObjectTypes.DeviceFailureEventType); + + /// + /// The identifier for the SystemStatusChangeEventType ObjectType. + /// + public static readonly NodeId SystemStatusChangeEventType = new NodeId(Opc.Ua.ObjectTypes.SystemStatusChangeEventType); + + /// + /// The identifier for the BaseModelChangeEventType ObjectType. + /// + public static readonly NodeId BaseModelChangeEventType = new NodeId(Opc.Ua.ObjectTypes.BaseModelChangeEventType); + + /// + /// The identifier for the GeneralModelChangeEventType ObjectType. + /// + public static readonly NodeId GeneralModelChangeEventType = new NodeId(Opc.Ua.ObjectTypes.GeneralModelChangeEventType); + + /// + /// The identifier for the SemanticChangeEventType ObjectType. + /// + public static readonly NodeId SemanticChangeEventType = new NodeId(Opc.Ua.ObjectTypes.SemanticChangeEventType); + + /// + /// The identifier for the EventQueueOverflowEventType ObjectType. + /// + public static readonly NodeId EventQueueOverflowEventType = new NodeId(Opc.Ua.ObjectTypes.EventQueueOverflowEventType); + + /// + /// The identifier for the ProgressEventType ObjectType. + /// + public static readonly NodeId ProgressEventType = new NodeId(Opc.Ua.ObjectTypes.ProgressEventType); + + /// + /// The identifier for the AggregateFunctionType ObjectType. + /// + public static readonly NodeId AggregateFunctionType = new NodeId(Opc.Ua.ObjectTypes.AggregateFunctionType); + + /// + /// The identifier for the StateMachineType ObjectType. + /// + public static readonly NodeId StateMachineType = new NodeId(Opc.Ua.ObjectTypes.StateMachineType); + + /// + /// The identifier for the FiniteStateMachineType ObjectType. + /// + public static readonly NodeId FiniteStateMachineType = new NodeId(Opc.Ua.ObjectTypes.FiniteStateMachineType); + + /// + /// The identifier for the StateType ObjectType. + /// + public static readonly NodeId StateType = new NodeId(Opc.Ua.ObjectTypes.StateType); + + /// + /// The identifier for the InitialStateType ObjectType. + /// + public static readonly NodeId InitialStateType = new NodeId(Opc.Ua.ObjectTypes.InitialStateType); + + /// + /// The identifier for the TransitionType ObjectType. + /// + public static readonly NodeId TransitionType = new NodeId(Opc.Ua.ObjectTypes.TransitionType); + + /// + /// The identifier for the ChoiceStateType ObjectType. + /// + public static readonly NodeId ChoiceStateType = new NodeId(Opc.Ua.ObjectTypes.ChoiceStateType); + + /// + /// The identifier for the TransitionEventType ObjectType. + /// + public static readonly NodeId TransitionEventType = new NodeId(Opc.Ua.ObjectTypes.TransitionEventType); + + /// + /// The identifier for the AuditUpdateStateEventType ObjectType. + /// + public static readonly NodeId AuditUpdateStateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditUpdateStateEventType); + + /// + /// The identifier for the FileDirectoryType ObjectType. + /// + public static readonly NodeId FileDirectoryType = new NodeId(Opc.Ua.ObjectTypes.FileDirectoryType); + + /// + /// The identifier for the TemporaryFileTransferType ObjectType. + /// + public static readonly NodeId TemporaryFileTransferType = new NodeId(Opc.Ua.ObjectTypes.TemporaryFileTransferType); + + /// + /// The identifier for the FileTransferStateMachineType ObjectType. + /// + public static readonly NodeId FileTransferStateMachineType = new NodeId(Opc.Ua.ObjectTypes.FileTransferStateMachineType); + + /// + /// The identifier for the RoleSetType ObjectType. + /// + public static readonly NodeId RoleSetType = new NodeId(Opc.Ua.ObjectTypes.RoleSetType); + + /// + /// The identifier for the RoleType ObjectType. + /// + public static readonly NodeId RoleType = new NodeId(Opc.Ua.ObjectTypes.RoleType); + + /// + /// The identifier for the RoleMappingRuleChangedAuditEventType ObjectType. + /// + public static readonly NodeId RoleMappingRuleChangedAuditEventType = new NodeId(Opc.Ua.ObjectTypes.RoleMappingRuleChangedAuditEventType); + + /// + /// The identifier for the DictionaryEntryType ObjectType. + /// + public static readonly NodeId DictionaryEntryType = new NodeId(Opc.Ua.ObjectTypes.DictionaryEntryType); + + /// + /// The identifier for the DictionaryFolderType ObjectType. + /// + public static readonly NodeId DictionaryFolderType = new NodeId(Opc.Ua.ObjectTypes.DictionaryFolderType); + + /// + /// The identifier for the IrdiDictionaryEntryType ObjectType. + /// + public static readonly NodeId IrdiDictionaryEntryType = new NodeId(Opc.Ua.ObjectTypes.IrdiDictionaryEntryType); + + /// + /// The identifier for the UriDictionaryEntryType ObjectType. + /// + public static readonly NodeId UriDictionaryEntryType = new NodeId(Opc.Ua.ObjectTypes.UriDictionaryEntryType); + + /// + /// The identifier for the BaseInterfaceType ObjectType. + /// + public static readonly NodeId BaseInterfaceType = new NodeId(Opc.Ua.ObjectTypes.BaseInterfaceType); + + /// + /// The identifier for the IOrderedObjectType ObjectType. + /// + public static readonly NodeId IOrderedObjectType = new NodeId(Opc.Ua.ObjectTypes.IOrderedObjectType); + + /// + /// The identifier for the OrderedListType ObjectType. + /// + public static readonly NodeId OrderedListType = new NodeId(Opc.Ua.ObjectTypes.OrderedListType); + + /// + /// The identifier for the ConditionType ObjectType. + /// + public static readonly NodeId ConditionType = new NodeId(Opc.Ua.ObjectTypes.ConditionType); + + /// + /// The identifier for the DialogConditionType ObjectType. + /// + public static readonly NodeId DialogConditionType = new NodeId(Opc.Ua.ObjectTypes.DialogConditionType); + + /// + /// The identifier for the AcknowledgeableConditionType ObjectType. + /// + public static readonly NodeId AcknowledgeableConditionType = new NodeId(Opc.Ua.ObjectTypes.AcknowledgeableConditionType); + + /// + /// The identifier for the AlarmConditionType ObjectType. + /// + public static readonly NodeId AlarmConditionType = new NodeId(Opc.Ua.ObjectTypes.AlarmConditionType); + + /// + /// The identifier for the AlarmGroupType ObjectType. + /// + public static readonly NodeId AlarmGroupType = new NodeId(Opc.Ua.ObjectTypes.AlarmGroupType); + + /// + /// The identifier for the ShelvedStateMachineType ObjectType. + /// + public static readonly NodeId ShelvedStateMachineType = new NodeId(Opc.Ua.ObjectTypes.ShelvedStateMachineType); + + /// + /// The identifier for the LimitAlarmType ObjectType. + /// + public static readonly NodeId LimitAlarmType = new NodeId(Opc.Ua.ObjectTypes.LimitAlarmType); + + /// + /// The identifier for the ExclusiveLimitStateMachineType ObjectType. + /// + public static readonly NodeId ExclusiveLimitStateMachineType = new NodeId(Opc.Ua.ObjectTypes.ExclusiveLimitStateMachineType); + + /// + /// The identifier for the ExclusiveLimitAlarmType ObjectType. + /// + public static readonly NodeId ExclusiveLimitAlarmType = new NodeId(Opc.Ua.ObjectTypes.ExclusiveLimitAlarmType); + + /// + /// The identifier for the NonExclusiveLimitAlarmType ObjectType. + /// + public static readonly NodeId NonExclusiveLimitAlarmType = new NodeId(Opc.Ua.ObjectTypes.NonExclusiveLimitAlarmType); + + /// + /// The identifier for the NonExclusiveLevelAlarmType ObjectType. + /// + public static readonly NodeId NonExclusiveLevelAlarmType = new NodeId(Opc.Ua.ObjectTypes.NonExclusiveLevelAlarmType); + + /// + /// The identifier for the ExclusiveLevelAlarmType ObjectType. + /// + public static readonly NodeId ExclusiveLevelAlarmType = new NodeId(Opc.Ua.ObjectTypes.ExclusiveLevelAlarmType); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType ObjectType. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType = new NodeId(Opc.Ua.ObjectTypes.NonExclusiveDeviationAlarmType); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType ObjectType. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType = new NodeId(Opc.Ua.ObjectTypes.NonExclusiveRateOfChangeAlarmType); + + /// + /// The identifier for the ExclusiveDeviationAlarmType ObjectType. + /// + public static readonly NodeId ExclusiveDeviationAlarmType = new NodeId(Opc.Ua.ObjectTypes.ExclusiveDeviationAlarmType); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType ObjectType. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType = new NodeId(Opc.Ua.ObjectTypes.ExclusiveRateOfChangeAlarmType); + + /// + /// The identifier for the DiscreteAlarmType ObjectType. + /// + public static readonly NodeId DiscreteAlarmType = new NodeId(Opc.Ua.ObjectTypes.DiscreteAlarmType); + + /// + /// The identifier for the OffNormalAlarmType ObjectType. + /// + public static readonly NodeId OffNormalAlarmType = new NodeId(Opc.Ua.ObjectTypes.OffNormalAlarmType); + + /// + /// The identifier for the SystemOffNormalAlarmType ObjectType. + /// + public static readonly NodeId SystemOffNormalAlarmType = new NodeId(Opc.Ua.ObjectTypes.SystemOffNormalAlarmType); + + /// + /// The identifier for the TripAlarmType ObjectType. + /// + public static readonly NodeId TripAlarmType = new NodeId(Opc.Ua.ObjectTypes.TripAlarmType); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType ObjectType. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType = new NodeId(Opc.Ua.ObjectTypes.InstrumentDiagnosticAlarmType); + + /// + /// The identifier for the SystemDiagnosticAlarmType ObjectType. + /// + public static readonly NodeId SystemDiagnosticAlarmType = new NodeId(Opc.Ua.ObjectTypes.SystemDiagnosticAlarmType); + + /// + /// The identifier for the CertificateExpirationAlarmType ObjectType. + /// + public static readonly NodeId CertificateExpirationAlarmType = new NodeId(Opc.Ua.ObjectTypes.CertificateExpirationAlarmType); + + /// + /// The identifier for the DiscrepancyAlarmType ObjectType. + /// + public static readonly NodeId DiscrepancyAlarmType = new NodeId(Opc.Ua.ObjectTypes.DiscrepancyAlarmType); + + /// + /// The identifier for the BaseConditionClassType ObjectType. + /// + public static readonly NodeId BaseConditionClassType = new NodeId(Opc.Ua.ObjectTypes.BaseConditionClassType); + + /// + /// The identifier for the ProcessConditionClassType ObjectType. + /// + public static readonly NodeId ProcessConditionClassType = new NodeId(Opc.Ua.ObjectTypes.ProcessConditionClassType); + + /// + /// The identifier for the MaintenanceConditionClassType ObjectType. + /// + public static readonly NodeId MaintenanceConditionClassType = new NodeId(Opc.Ua.ObjectTypes.MaintenanceConditionClassType); + + /// + /// The identifier for the SystemConditionClassType ObjectType. + /// + public static readonly NodeId SystemConditionClassType = new NodeId(Opc.Ua.ObjectTypes.SystemConditionClassType); + + /// + /// The identifier for the SafetyConditionClassType ObjectType. + /// + public static readonly NodeId SafetyConditionClassType = new NodeId(Opc.Ua.ObjectTypes.SafetyConditionClassType); + + /// + /// The identifier for the HighlyManagedAlarmConditionClassType ObjectType. + /// + public static readonly NodeId HighlyManagedAlarmConditionClassType = new NodeId(Opc.Ua.ObjectTypes.HighlyManagedAlarmConditionClassType); + + /// + /// The identifier for the TrainingConditionClassType ObjectType. + /// + public static readonly NodeId TrainingConditionClassType = new NodeId(Opc.Ua.ObjectTypes.TrainingConditionClassType); + + /// + /// The identifier for the StatisticalConditionClassType ObjectType. + /// + public static readonly NodeId StatisticalConditionClassType = new NodeId(Opc.Ua.ObjectTypes.StatisticalConditionClassType); + + /// + /// The identifier for the TestingConditionSubClassType ObjectType. + /// + public static readonly NodeId TestingConditionSubClassType = new NodeId(Opc.Ua.ObjectTypes.TestingConditionSubClassType); + + /// + /// The identifier for the AuditConditionEventType ObjectType. + /// + public static readonly NodeId AuditConditionEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionEventType); + + /// + /// The identifier for the AuditConditionEnableEventType ObjectType. + /// + public static readonly NodeId AuditConditionEnableEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionEnableEventType); + + /// + /// The identifier for the AuditConditionCommentEventType ObjectType. + /// + public static readonly NodeId AuditConditionCommentEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionCommentEventType); + + /// + /// The identifier for the AuditConditionRespondEventType ObjectType. + /// + public static readonly NodeId AuditConditionRespondEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionRespondEventType); + + /// + /// The identifier for the AuditConditionAcknowledgeEventType ObjectType. + /// + public static readonly NodeId AuditConditionAcknowledgeEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionAcknowledgeEventType); + + /// + /// The identifier for the AuditConditionConfirmEventType ObjectType. + /// + public static readonly NodeId AuditConditionConfirmEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionConfirmEventType); + + /// + /// The identifier for the AuditConditionShelvingEventType ObjectType. + /// + public static readonly NodeId AuditConditionShelvingEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionShelvingEventType); + + /// + /// The identifier for the AuditConditionSuppressionEventType ObjectType. + /// + public static readonly NodeId AuditConditionSuppressionEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionSuppressionEventType); + + /// + /// The identifier for the AuditConditionSilenceEventType ObjectType. + /// + public static readonly NodeId AuditConditionSilenceEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionSilenceEventType); + + /// + /// The identifier for the AuditConditionResetEventType ObjectType. + /// + public static readonly NodeId AuditConditionResetEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionResetEventType); + + /// + /// The identifier for the AuditConditionOutOfServiceEventType ObjectType. + /// + public static readonly NodeId AuditConditionOutOfServiceEventType = new NodeId(Opc.Ua.ObjectTypes.AuditConditionOutOfServiceEventType); + + /// + /// The identifier for the RefreshStartEventType ObjectType. + /// + public static readonly NodeId RefreshStartEventType = new NodeId(Opc.Ua.ObjectTypes.RefreshStartEventType); + + /// + /// The identifier for the RefreshEndEventType ObjectType. + /// + public static readonly NodeId RefreshEndEventType = new NodeId(Opc.Ua.ObjectTypes.RefreshEndEventType); + + /// + /// The identifier for the RefreshRequiredEventType ObjectType. + /// + public static readonly NodeId RefreshRequiredEventType = new NodeId(Opc.Ua.ObjectTypes.RefreshRequiredEventType); + + /// + /// The identifier for the AlarmMetricsType ObjectType. + /// + public static readonly NodeId AlarmMetricsType = new NodeId(Opc.Ua.ObjectTypes.AlarmMetricsType); + + /// + /// The identifier for the ProgramStateMachineType ObjectType. + /// + public static readonly NodeId ProgramStateMachineType = new NodeId(Opc.Ua.ObjectTypes.ProgramStateMachineType); + + /// + /// The identifier for the ProgramTransitionEventType ObjectType. + /// + public static readonly NodeId ProgramTransitionEventType = new NodeId(Opc.Ua.ObjectTypes.ProgramTransitionEventType); + + /// + /// The identifier for the AuditProgramTransitionEventType ObjectType. + /// + public static readonly NodeId AuditProgramTransitionEventType = new NodeId(Opc.Ua.ObjectTypes.AuditProgramTransitionEventType); + + /// + /// The identifier for the ProgramTransitionAuditEventType ObjectType. + /// + public static readonly NodeId ProgramTransitionAuditEventType = new NodeId(Opc.Ua.ObjectTypes.ProgramTransitionAuditEventType); + + /// + /// The identifier for the HistoricalDataConfigurationType ObjectType. + /// + public static readonly NodeId HistoricalDataConfigurationType = new NodeId(Opc.Ua.ObjectTypes.HistoricalDataConfigurationType); + + /// + /// The identifier for the HistoryServerCapabilitiesType ObjectType. + /// + public static readonly NodeId HistoryServerCapabilitiesType = new NodeId(Opc.Ua.ObjectTypes.HistoryServerCapabilitiesType); + + /// + /// The identifier for the AuditHistoryEventUpdateEventType ObjectType. + /// + public static readonly NodeId AuditHistoryEventUpdateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryEventUpdateEventType); + + /// + /// The identifier for the AuditHistoryValueUpdateEventType ObjectType. + /// + public static readonly NodeId AuditHistoryValueUpdateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryValueUpdateEventType); + + /// + /// The identifier for the AuditHistoryAnnotationUpdateEventType ObjectType. + /// + public static readonly NodeId AuditHistoryAnnotationUpdateEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryAnnotationUpdateEventType); + + /// + /// The identifier for the AuditHistoryDeleteEventType ObjectType. + /// + public static readonly NodeId AuditHistoryDeleteEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryDeleteEventType); + + /// + /// The identifier for the AuditHistoryRawModifyDeleteEventType ObjectType. + /// + public static readonly NodeId AuditHistoryRawModifyDeleteEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryRawModifyDeleteEventType); + + /// + /// The identifier for the AuditHistoryAtTimeDeleteEventType ObjectType. + /// + public static readonly NodeId AuditHistoryAtTimeDeleteEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryAtTimeDeleteEventType); + + /// + /// The identifier for the AuditHistoryEventDeleteEventType ObjectType. + /// + public static readonly NodeId AuditHistoryEventDeleteEventType = new NodeId(Opc.Ua.ObjectTypes.AuditHistoryEventDeleteEventType); + + /// + /// The identifier for the TrustListType ObjectType. + /// + public static readonly NodeId TrustListType = new NodeId(Opc.Ua.ObjectTypes.TrustListType); + + /// + /// The identifier for the TrustListOutOfDateAlarmType ObjectType. + /// + public static readonly NodeId TrustListOutOfDateAlarmType = new NodeId(Opc.Ua.ObjectTypes.TrustListOutOfDateAlarmType); + + /// + /// The identifier for the CertificateGroupType ObjectType. + /// + public static readonly NodeId CertificateGroupType = new NodeId(Opc.Ua.ObjectTypes.CertificateGroupType); + + /// + /// The identifier for the CertificateGroupFolderType ObjectType. + /// + public static readonly NodeId CertificateGroupFolderType = new NodeId(Opc.Ua.ObjectTypes.CertificateGroupFolderType); + + /// + /// The identifier for the CertificateType ObjectType. + /// + public static readonly NodeId CertificateType = new NodeId(Opc.Ua.ObjectTypes.CertificateType); + + /// + /// The identifier for the ApplicationCertificateType ObjectType. + /// + public static readonly NodeId ApplicationCertificateType = new NodeId(Opc.Ua.ObjectTypes.ApplicationCertificateType); + + /// + /// The identifier for the HttpsCertificateType ObjectType. + /// + public static readonly NodeId HttpsCertificateType = new NodeId(Opc.Ua.ObjectTypes.HttpsCertificateType); + + /// + /// The identifier for the UserCredentialCertificateType ObjectType. + /// + public static readonly NodeId UserCredentialCertificateType = new NodeId(Opc.Ua.ObjectTypes.UserCredentialCertificateType); + + /// + /// The identifier for the RsaMinApplicationCertificateType ObjectType. + /// + public static readonly NodeId RsaMinApplicationCertificateType = new NodeId(Opc.Ua.ObjectTypes.RsaMinApplicationCertificateType); + + /// + /// The identifier for the RsaSha256ApplicationCertificateType ObjectType. + /// + public static readonly NodeId RsaSha256ApplicationCertificateType = new NodeId(Opc.Ua.ObjectTypes.RsaSha256ApplicationCertificateType); + + /// + /// The identifier for the TrustListUpdatedAuditEventType ObjectType. + /// + public static readonly NodeId TrustListUpdatedAuditEventType = new NodeId(Opc.Ua.ObjectTypes.TrustListUpdatedAuditEventType); + + /// + /// The identifier for the ServerConfigurationType ObjectType. + /// + public static readonly NodeId ServerConfigurationType = new NodeId(Opc.Ua.ObjectTypes.ServerConfigurationType); + + /// + /// The identifier for the CertificateUpdatedAuditEventType ObjectType. + /// + public static readonly NodeId CertificateUpdatedAuditEventType = new NodeId(Opc.Ua.ObjectTypes.CertificateUpdatedAuditEventType); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType ObjectType. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType = new NodeId(Opc.Ua.ObjectTypes.KeyCredentialConfigurationFolderType); + + /// + /// The identifier for the KeyCredentialConfigurationType ObjectType. + /// + public static readonly NodeId KeyCredentialConfigurationType = new NodeId(Opc.Ua.ObjectTypes.KeyCredentialConfigurationType); + + /// + /// The identifier for the KeyCredentialAuditEventType ObjectType. + /// + public static readonly NodeId KeyCredentialAuditEventType = new NodeId(Opc.Ua.ObjectTypes.KeyCredentialAuditEventType); + + /// + /// The identifier for the KeyCredentialUpdatedAuditEventType ObjectType. + /// + public static readonly NodeId KeyCredentialUpdatedAuditEventType = new NodeId(Opc.Ua.ObjectTypes.KeyCredentialUpdatedAuditEventType); + + /// + /// The identifier for the KeyCredentialDeletedAuditEventType ObjectType. + /// + public static readonly NodeId KeyCredentialDeletedAuditEventType = new NodeId(Opc.Ua.ObjectTypes.KeyCredentialDeletedAuditEventType); + + /// + /// The identifier for the AuthorizationServiceConfigurationType ObjectType. + /// + public static readonly NodeId AuthorizationServiceConfigurationType = new NodeId(Opc.Ua.ObjectTypes.AuthorizationServiceConfigurationType); + + /// + /// The identifier for the AggregateConfigurationType ObjectType. + /// + public static readonly NodeId AggregateConfigurationType = new NodeId(Opc.Ua.ObjectTypes.AggregateConfigurationType); + + /// + /// The identifier for the PubSubKeyServiceType ObjectType. + /// + public static readonly NodeId PubSubKeyServiceType = new NodeId(Opc.Ua.ObjectTypes.PubSubKeyServiceType); + + /// + /// The identifier for the SecurityGroupFolderType ObjectType. + /// + public static readonly NodeId SecurityGroupFolderType = new NodeId(Opc.Ua.ObjectTypes.SecurityGroupFolderType); + + /// + /// The identifier for the SecurityGroupType ObjectType. + /// + public static readonly NodeId SecurityGroupType = new NodeId(Opc.Ua.ObjectTypes.SecurityGroupType); + + /// + /// The identifier for the PublishSubscribeType ObjectType. + /// + public static readonly NodeId PublishSubscribeType = new NodeId(Opc.Ua.ObjectTypes.PublishSubscribeType); + + /// + /// The identifier for the PublishedDataSetType ObjectType. + /// + public static readonly NodeId PublishedDataSetType = new NodeId(Opc.Ua.ObjectTypes.PublishedDataSetType); + + /// + /// The identifier for the ExtensionFieldsType ObjectType. + /// + public static readonly NodeId ExtensionFieldsType = new NodeId(Opc.Ua.ObjectTypes.ExtensionFieldsType); + + /// + /// The identifier for the PublishedDataItemsType ObjectType. + /// + public static readonly NodeId PublishedDataItemsType = new NodeId(Opc.Ua.ObjectTypes.PublishedDataItemsType); + + /// + /// The identifier for the PublishedEventsType ObjectType. + /// + public static readonly NodeId PublishedEventsType = new NodeId(Opc.Ua.ObjectTypes.PublishedEventsType); + + /// + /// The identifier for the DataSetFolderType ObjectType. + /// + public static readonly NodeId DataSetFolderType = new NodeId(Opc.Ua.ObjectTypes.DataSetFolderType); + + /// + /// The identifier for the PubSubConnectionType ObjectType. + /// + public static readonly NodeId PubSubConnectionType = new NodeId(Opc.Ua.ObjectTypes.PubSubConnectionType); + + /// + /// The identifier for the ConnectionTransportType ObjectType. + /// + public static readonly NodeId ConnectionTransportType = new NodeId(Opc.Ua.ObjectTypes.ConnectionTransportType); + + /// + /// The identifier for the PubSubGroupType ObjectType. + /// + public static readonly NodeId PubSubGroupType = new NodeId(Opc.Ua.ObjectTypes.PubSubGroupType); + + /// + /// The identifier for the WriterGroupType ObjectType. + /// + public static readonly NodeId WriterGroupType = new NodeId(Opc.Ua.ObjectTypes.WriterGroupType); + + /// + /// The identifier for the WriterGroupTransportType ObjectType. + /// + public static readonly NodeId WriterGroupTransportType = new NodeId(Opc.Ua.ObjectTypes.WriterGroupTransportType); + + /// + /// The identifier for the WriterGroupMessageType ObjectType. + /// + public static readonly NodeId WriterGroupMessageType = new NodeId(Opc.Ua.ObjectTypes.WriterGroupMessageType); + + /// + /// The identifier for the ReaderGroupType ObjectType. + /// + public static readonly NodeId ReaderGroupType = new NodeId(Opc.Ua.ObjectTypes.ReaderGroupType); + + /// + /// The identifier for the ReaderGroupTransportType ObjectType. + /// + public static readonly NodeId ReaderGroupTransportType = new NodeId(Opc.Ua.ObjectTypes.ReaderGroupTransportType); + + /// + /// The identifier for the ReaderGroupMessageType ObjectType. + /// + public static readonly NodeId ReaderGroupMessageType = new NodeId(Opc.Ua.ObjectTypes.ReaderGroupMessageType); + + /// + /// The identifier for the DataSetWriterType ObjectType. + /// + public static readonly NodeId DataSetWriterType = new NodeId(Opc.Ua.ObjectTypes.DataSetWriterType); + + /// + /// The identifier for the DataSetWriterTransportType ObjectType. + /// + public static readonly NodeId DataSetWriterTransportType = new NodeId(Opc.Ua.ObjectTypes.DataSetWriterTransportType); + + /// + /// The identifier for the DataSetWriterMessageType ObjectType. + /// + public static readonly NodeId DataSetWriterMessageType = new NodeId(Opc.Ua.ObjectTypes.DataSetWriterMessageType); + + /// + /// The identifier for the DataSetReaderType ObjectType. + /// + public static readonly NodeId DataSetReaderType = new NodeId(Opc.Ua.ObjectTypes.DataSetReaderType); + + /// + /// The identifier for the DataSetReaderTransportType ObjectType. + /// + public static readonly NodeId DataSetReaderTransportType = new NodeId(Opc.Ua.ObjectTypes.DataSetReaderTransportType); + + /// + /// The identifier for the DataSetReaderMessageType ObjectType. + /// + public static readonly NodeId DataSetReaderMessageType = new NodeId(Opc.Ua.ObjectTypes.DataSetReaderMessageType); + + /// + /// The identifier for the SubscribedDataSetType ObjectType. + /// + public static readonly NodeId SubscribedDataSetType = new NodeId(Opc.Ua.ObjectTypes.SubscribedDataSetType); + + /// + /// The identifier for the TargetVariablesType ObjectType. + /// + public static readonly NodeId TargetVariablesType = new NodeId(Opc.Ua.ObjectTypes.TargetVariablesType); + + /// + /// The identifier for the SubscribedDataSetMirrorType ObjectType. + /// + public static readonly NodeId SubscribedDataSetMirrorType = new NodeId(Opc.Ua.ObjectTypes.SubscribedDataSetMirrorType); + + /// + /// The identifier for the PubSubStatusType ObjectType. + /// + public static readonly NodeId PubSubStatusType = new NodeId(Opc.Ua.ObjectTypes.PubSubStatusType); + + /// + /// The identifier for the PubSubDiagnosticsType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsType); + + /// + /// The identifier for the PubSubDiagnosticsRootType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsRootType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsRootType); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsConnectionType); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsWriterGroupType); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsReaderGroupType); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsDataSetWriterType); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType ObjectType. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType = new NodeId(Opc.Ua.ObjectTypes.PubSubDiagnosticsDataSetReaderType); + + /// + /// The identifier for the PubSubStatusEventType ObjectType. + /// + public static readonly NodeId PubSubStatusEventType = new NodeId(Opc.Ua.ObjectTypes.PubSubStatusEventType); + + /// + /// The identifier for the PubSubTransportLimitsExceedEventType ObjectType. + /// + public static readonly NodeId PubSubTransportLimitsExceedEventType = new NodeId(Opc.Ua.ObjectTypes.PubSubTransportLimitsExceedEventType); + + /// + /// The identifier for the PubSubCommunicationFailureEventType ObjectType. + /// + public static readonly NodeId PubSubCommunicationFailureEventType = new NodeId(Opc.Ua.ObjectTypes.PubSubCommunicationFailureEventType); + + /// + /// The identifier for the UadpWriterGroupMessageType ObjectType. + /// + public static readonly NodeId UadpWriterGroupMessageType = new NodeId(Opc.Ua.ObjectTypes.UadpWriterGroupMessageType); + + /// + /// The identifier for the UadpDataSetWriterMessageType ObjectType. + /// + public static readonly NodeId UadpDataSetWriterMessageType = new NodeId(Opc.Ua.ObjectTypes.UadpDataSetWriterMessageType); + + /// + /// The identifier for the UadpDataSetReaderMessageType ObjectType. + /// + public static readonly NodeId UadpDataSetReaderMessageType = new NodeId(Opc.Ua.ObjectTypes.UadpDataSetReaderMessageType); + + /// + /// The identifier for the JsonWriterGroupMessageType ObjectType. + /// + public static readonly NodeId JsonWriterGroupMessageType = new NodeId(Opc.Ua.ObjectTypes.JsonWriterGroupMessageType); + + /// + /// The identifier for the JsonDataSetWriterMessageType ObjectType. + /// + public static readonly NodeId JsonDataSetWriterMessageType = new NodeId(Opc.Ua.ObjectTypes.JsonDataSetWriterMessageType); + + /// + /// The identifier for the JsonDataSetReaderMessageType ObjectType. + /// + public static readonly NodeId JsonDataSetReaderMessageType = new NodeId(Opc.Ua.ObjectTypes.JsonDataSetReaderMessageType); + + /// + /// The identifier for the DatagramConnectionTransportType ObjectType. + /// + public static readonly NodeId DatagramConnectionTransportType = new NodeId(Opc.Ua.ObjectTypes.DatagramConnectionTransportType); + + /// + /// The identifier for the DatagramWriterGroupTransportType ObjectType. + /// + public static readonly NodeId DatagramWriterGroupTransportType = new NodeId(Opc.Ua.ObjectTypes.DatagramWriterGroupTransportType); + + /// + /// The identifier for the BrokerConnectionTransportType ObjectType. + /// + public static readonly NodeId BrokerConnectionTransportType = new NodeId(Opc.Ua.ObjectTypes.BrokerConnectionTransportType); + + /// + /// The identifier for the BrokerWriterGroupTransportType ObjectType. + /// + public static readonly NodeId BrokerWriterGroupTransportType = new NodeId(Opc.Ua.ObjectTypes.BrokerWriterGroupTransportType); + + /// + /// The identifier for the BrokerDataSetWriterTransportType ObjectType. + /// + public static readonly NodeId BrokerDataSetWriterTransportType = new NodeId(Opc.Ua.ObjectTypes.BrokerDataSetWriterTransportType); + + /// + /// The identifier for the BrokerDataSetReaderTransportType ObjectType. + /// + public static readonly NodeId BrokerDataSetReaderTransportType = new NodeId(Opc.Ua.ObjectTypes.BrokerDataSetReaderTransportType); + + /// + /// The identifier for the NetworkAddressType ObjectType. + /// + public static readonly NodeId NetworkAddressType = new NodeId(Opc.Ua.ObjectTypes.NetworkAddressType); + + /// + /// The identifier for the NetworkAddressUrlType ObjectType. + /// + public static readonly NodeId NetworkAddressUrlType = new NodeId(Opc.Ua.ObjectTypes.NetworkAddressUrlType); + + /// + /// The identifier for the AliasNameType ObjectType. + /// + public static readonly NodeId AliasNameType = new NodeId(Opc.Ua.ObjectTypes.AliasNameType); + + /// + /// The identifier for the AliasNameCategoryType ObjectType. + /// + public static readonly NodeId AliasNameCategoryType = new NodeId(Opc.Ua.ObjectTypes.AliasNameCategoryType); + } + #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(Opc.Ua.ReferenceTypes.References); + + /// + /// The identifier for the NonHierarchicalReferences ReferenceType. + /// + public static readonly NodeId NonHierarchicalReferences = new NodeId(Opc.Ua.ReferenceTypes.NonHierarchicalReferences); + + /// + /// The identifier for the HierarchicalReferences ReferenceType. + /// + public static readonly NodeId HierarchicalReferences = new NodeId(Opc.Ua.ReferenceTypes.HierarchicalReferences); + + /// + /// The identifier for the HasChild ReferenceType. + /// + public static readonly NodeId HasChild = new NodeId(Opc.Ua.ReferenceTypes.HasChild); + + /// + /// The identifier for the Organizes ReferenceType. + /// + public static readonly NodeId Organizes = new NodeId(Opc.Ua.ReferenceTypes.Organizes); + + /// + /// The identifier for the HasEventSource ReferenceType. + /// + public static readonly NodeId HasEventSource = new NodeId(Opc.Ua.ReferenceTypes.HasEventSource); + + /// + /// The identifier for the HasModellingRule ReferenceType. + /// + public static readonly NodeId HasModellingRule = new NodeId(Opc.Ua.ReferenceTypes.HasModellingRule); + + /// + /// The identifier for the HasEncoding ReferenceType. + /// + public static readonly NodeId HasEncoding = new NodeId(Opc.Ua.ReferenceTypes.HasEncoding); + + /// + /// The identifier for the HasDescription ReferenceType. + /// + public static readonly NodeId HasDescription = new NodeId(Opc.Ua.ReferenceTypes.HasDescription); + + /// + /// The identifier for the HasTypeDefinition ReferenceType. + /// + public static readonly NodeId HasTypeDefinition = new NodeId(Opc.Ua.ReferenceTypes.HasTypeDefinition); + + /// + /// The identifier for the GeneratesEvent ReferenceType. + /// + public static readonly NodeId GeneratesEvent = new NodeId(Opc.Ua.ReferenceTypes.GeneratesEvent); + + /// + /// The identifier for the AlwaysGeneratesEvent ReferenceType. + /// + public static readonly NodeId AlwaysGeneratesEvent = new NodeId(Opc.Ua.ReferenceTypes.AlwaysGeneratesEvent); + + /// + /// The identifier for the Aggregates ReferenceType. + /// + public static readonly NodeId Aggregates = new NodeId(Opc.Ua.ReferenceTypes.Aggregates); + + /// + /// The identifier for the HasSubtype ReferenceType. + /// + public static readonly NodeId HasSubtype = new NodeId(Opc.Ua.ReferenceTypes.HasSubtype); + + /// + /// The identifier for the HasProperty ReferenceType. + /// + public static readonly NodeId HasProperty = new NodeId(Opc.Ua.ReferenceTypes.HasProperty); + + /// + /// The identifier for the HasComponent ReferenceType. + /// + public static readonly NodeId HasComponent = new NodeId(Opc.Ua.ReferenceTypes.HasComponent); + + /// + /// The identifier for the HasNotifier ReferenceType. + /// + public static readonly NodeId HasNotifier = new NodeId(Opc.Ua.ReferenceTypes.HasNotifier); + + /// + /// The identifier for the HasOrderedComponent ReferenceType. + /// + public static readonly NodeId HasOrderedComponent = new NodeId(Opc.Ua.ReferenceTypes.HasOrderedComponent); + + /// + /// The identifier for the FromState ReferenceType. + /// + public static readonly NodeId FromState = new NodeId(Opc.Ua.ReferenceTypes.FromState); + + /// + /// The identifier for the ToState ReferenceType. + /// + public static readonly NodeId ToState = new NodeId(Opc.Ua.ReferenceTypes.ToState); + + /// + /// The identifier for the HasCause ReferenceType. + /// + public static readonly NodeId HasCause = new NodeId(Opc.Ua.ReferenceTypes.HasCause); + + /// + /// The identifier for the HasEffect ReferenceType. + /// + public static readonly NodeId HasEffect = new NodeId(Opc.Ua.ReferenceTypes.HasEffect); + + /// + /// The identifier for the HasSubStateMachine ReferenceType. + /// + public static readonly NodeId HasSubStateMachine = new NodeId(Opc.Ua.ReferenceTypes.HasSubStateMachine); + + /// + /// The identifier for the HasHistoricalConfiguration ReferenceType. + /// + public static readonly NodeId HasHistoricalConfiguration = new NodeId(Opc.Ua.ReferenceTypes.HasHistoricalConfiguration); + + /// + /// The identifier for the HasArgumentDescription ReferenceType. + /// + public static readonly NodeId HasArgumentDescription = new NodeId(Opc.Ua.ReferenceTypes.HasArgumentDescription); + + /// + /// The identifier for the HasOptionalInputArgumentDescription ReferenceType. + /// + public static readonly NodeId HasOptionalInputArgumentDescription = new NodeId(Opc.Ua.ReferenceTypes.HasOptionalInputArgumentDescription); + + /// + /// The identifier for the HasGuard ReferenceType. + /// + public static readonly NodeId HasGuard = new NodeId(Opc.Ua.ReferenceTypes.HasGuard); + + /// + /// The identifier for the HasDictionaryEntry ReferenceType. + /// + public static readonly NodeId HasDictionaryEntry = new NodeId(Opc.Ua.ReferenceTypes.HasDictionaryEntry); + + /// + /// The identifier for the HasInterface ReferenceType. + /// + public static readonly NodeId HasInterface = new NodeId(Opc.Ua.ReferenceTypes.HasInterface); + + /// + /// The identifier for the HasAddIn ReferenceType. + /// + public static readonly NodeId HasAddIn = new NodeId(Opc.Ua.ReferenceTypes.HasAddIn); + + /// + /// The identifier for the HasTrueSubState ReferenceType. + /// + public static readonly NodeId HasTrueSubState = new NodeId(Opc.Ua.ReferenceTypes.HasTrueSubState); + + /// + /// The identifier for the HasFalseSubState ReferenceType. + /// + public static readonly NodeId HasFalseSubState = new NodeId(Opc.Ua.ReferenceTypes.HasFalseSubState); + + /// + /// The identifier for the HasAlarmSuppressionGroup ReferenceType. + /// + public static readonly NodeId HasAlarmSuppressionGroup = new NodeId(Opc.Ua.ReferenceTypes.HasAlarmSuppressionGroup); + + /// + /// The identifier for the AlarmGroupMember ReferenceType. + /// + public static readonly NodeId AlarmGroupMember = new NodeId(Opc.Ua.ReferenceTypes.AlarmGroupMember); + + /// + /// The identifier for the HasCondition ReferenceType. + /// + public static readonly NodeId HasCondition = new NodeId(Opc.Ua.ReferenceTypes.HasCondition); + + /// + /// The identifier for the HasEffectDisable ReferenceType. + /// + public static readonly NodeId HasEffectDisable = new NodeId(Opc.Ua.ReferenceTypes.HasEffectDisable); + + /// + /// The identifier for the HasEffectEnable ReferenceType. + /// + public static readonly NodeId HasEffectEnable = new NodeId(Opc.Ua.ReferenceTypes.HasEffectEnable); + + /// + /// The identifier for the HasEffectSuppressed ReferenceType. + /// + public static readonly NodeId HasEffectSuppressed = new NodeId(Opc.Ua.ReferenceTypes.HasEffectSuppressed); + + /// + /// The identifier for the HasEffectUnsuppressed ReferenceType. + /// + public static readonly NodeId HasEffectUnsuppressed = new NodeId(Opc.Ua.ReferenceTypes.HasEffectUnsuppressed); + + /// + /// The identifier for the HasPubSubConnection ReferenceType. + /// + public static readonly NodeId HasPubSubConnection = new NodeId(Opc.Ua.ReferenceTypes.HasPubSubConnection); + + /// + /// The identifier for the DataSetToWriter ReferenceType. + /// + public static readonly NodeId DataSetToWriter = new NodeId(Opc.Ua.ReferenceTypes.DataSetToWriter); + + /// + /// The identifier for the HasDataSetWriter ReferenceType. + /// + public static readonly NodeId HasDataSetWriter = new NodeId(Opc.Ua.ReferenceTypes.HasDataSetWriter); + + /// + /// The identifier for the HasWriterGroup ReferenceType. + /// + public static readonly NodeId HasWriterGroup = new NodeId(Opc.Ua.ReferenceTypes.HasWriterGroup); + + /// + /// The identifier for the HasDataSetReader ReferenceType. + /// + public static readonly NodeId HasDataSetReader = new NodeId(Opc.Ua.ReferenceTypes.HasDataSetReader); + + /// + /// The identifier for the HasReaderGroup ReferenceType. + /// + public static readonly NodeId HasReaderGroup = new NodeId(Opc.Ua.ReferenceTypes.HasReaderGroup); + + /// + /// The identifier for the AliasFor ReferenceType. + /// + public static readonly NodeId AliasFor = new NodeId(Opc.Ua.ReferenceTypes.AliasFor); + } + #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(Opc.Ua.Variables.DataTypeDescriptionType_DataTypeVersion); + + /// + /// The identifier for the DataTypeDescriptionType_DictionaryFragment Variable. + /// + public static readonly NodeId DataTypeDescriptionType_DictionaryFragment = new NodeId(Opc.Ua.Variables.DataTypeDescriptionType_DictionaryFragment); + + /// + /// The identifier for the DataTypeDictionaryType_DataTypeVersion Variable. + /// + public static readonly NodeId DataTypeDictionaryType_DataTypeVersion = new NodeId(Opc.Ua.Variables.DataTypeDictionaryType_DataTypeVersion); + + /// + /// The identifier for the DataTypeDictionaryType_NamespaceUri Variable. + /// + public static readonly NodeId DataTypeDictionaryType_NamespaceUri = new NodeId(Opc.Ua.Variables.DataTypeDictionaryType_NamespaceUri); + + /// + /// The identifier for the DataTypeDictionaryType_Deprecated Variable. + /// + public static readonly NodeId DataTypeDictionaryType_Deprecated = new NodeId(Opc.Ua.Variables.DataTypeDictionaryType_Deprecated); + + /// + /// The identifier for the NamingRuleType_EnumValues Variable. + /// + public static readonly NodeId NamingRuleType_EnumValues = new NodeId(Opc.Ua.Variables.NamingRuleType_EnumValues); + + /// + /// The identifier for the ModellingRuleType_NamingRule Variable. + /// + public static readonly NodeId ModellingRuleType_NamingRule = new NodeId(Opc.Ua.Variables.ModellingRuleType_NamingRule); + + /// + /// The identifier for the ModellingRule_Mandatory_NamingRule Variable. + /// + public static readonly NodeId ModellingRule_Mandatory_NamingRule = new NodeId(Opc.Ua.Variables.ModellingRule_Mandatory_NamingRule); + + /// + /// The identifier for the ModellingRule_Optional_NamingRule Variable. + /// + public static readonly NodeId ModellingRule_Optional_NamingRule = new NodeId(Opc.Ua.Variables.ModellingRule_Optional_NamingRule); + + /// + /// The identifier for the ModellingRule_ExposesItsArray_NamingRule Variable. + /// + public static readonly NodeId ModellingRule_ExposesItsArray_NamingRule = new NodeId(Opc.Ua.Variables.ModellingRule_ExposesItsArray_NamingRule); + + /// + /// The identifier for the ModellingRule_OptionalPlaceholder_NamingRule Variable. + /// + public static readonly NodeId ModellingRule_OptionalPlaceholder_NamingRule = new NodeId(Opc.Ua.Variables.ModellingRule_OptionalPlaceholder_NamingRule); + + /// + /// The identifier for the ModellingRule_MandatoryPlaceholder_NamingRule Variable. + /// + public static readonly NodeId ModellingRule_MandatoryPlaceholder_NamingRule = new NodeId(Opc.Ua.Variables.ModellingRule_MandatoryPlaceholder_NamingRule); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceUri Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceUri = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceUri); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceVersion Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceVersion = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceVersion); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespacePublicationDate Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespacePublicationDate = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespacePublicationDate); + + /// + /// The identifier for the OPCUANamespaceMetadata_IsNamespaceSubset Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_IsNamespaceSubset = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_IsNamespaceSubset); + + /// + /// The identifier for the OPCUANamespaceMetadata_StaticNodeIdTypes Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_StaticNodeIdTypes = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_StaticNodeIdTypes); + + /// + /// The identifier for the OPCUANamespaceMetadata_StaticNumericNodeIdRange Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_StaticNumericNodeIdRange = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_StaticNumericNodeIdRange); + + /// + /// The identifier for the OPCUANamespaceMetadata_StaticStringNodeIdPattern Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_StaticStringNodeIdPattern = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_StaticStringNodeIdPattern); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Size Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Size = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Size); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Writable Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Writable = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Writable); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_UserWritable Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_UserWritable = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_UserWritable); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_OpenCount Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_OpenCount = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_OpenCount); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments); + + /// + /// The identifier for the OPCUANamespaceMetadata_DefaultRolePermissions Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_DefaultRolePermissions = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_DefaultRolePermissions); + + /// + /// The identifier for the OPCUANamespaceMetadata_DefaultUserRolePermissions Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_DefaultUserRolePermissions = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_DefaultUserRolePermissions); + + /// + /// The identifier for the OPCUANamespaceMetadata_DefaultAccessRestrictions Variable. + /// + public static readonly NodeId OPCUANamespaceMetadata_DefaultAccessRestrictions = new NodeId(Opc.Ua.Variables.OPCUANamespaceMetadata_DefaultAccessRestrictions); + + /// + /// The identifier for the NodeVersion Variable. + /// + public static readonly NodeId NodeVersion = new NodeId(Opc.Ua.Variables.NodeVersion); + + /// + /// The identifier for the ViewVersion Variable. + /// + public static readonly NodeId ViewVersion = new NodeId(Opc.Ua.Variables.ViewVersion); + + /// + /// The identifier for the Icon Variable. + /// + public static readonly NodeId Icon = new NodeId(Opc.Ua.Variables.Icon); + + /// + /// The identifier for the LocalTime Variable. + /// + public static readonly NodeId LocalTime = new NodeId(Opc.Ua.Variables.LocalTime); + + /// + /// The identifier for the AllowNulls Variable. + /// + public static readonly NodeId AllowNulls = new NodeId(Opc.Ua.Variables.AllowNulls); + + /// + /// The identifier for the ValueAsText Variable. + /// + public static readonly NodeId ValueAsText = new NodeId(Opc.Ua.Variables.ValueAsText); + + /// + /// The identifier for the MaxStringLength Variable. + /// + public static readonly NodeId MaxStringLength = new NodeId(Opc.Ua.Variables.MaxStringLength); + + /// + /// The identifier for the MaxCharacters Variable. + /// + public static readonly NodeId MaxCharacters = new NodeId(Opc.Ua.Variables.MaxCharacters); + + /// + /// The identifier for the MaxByteStringLength Variable. + /// + public static readonly NodeId MaxByteStringLength = new NodeId(Opc.Ua.Variables.MaxByteStringLength); + + /// + /// The identifier for the MaxArrayLength Variable. + /// + public static readonly NodeId MaxArrayLength = new NodeId(Opc.Ua.Variables.MaxArrayLength); + + /// + /// The identifier for the EngineeringUnits Variable. + /// + public static readonly NodeId EngineeringUnits = new NodeId(Opc.Ua.Variables.EngineeringUnits); + + /// + /// The identifier for the EnumStrings Variable. + /// + public static readonly NodeId EnumStrings = new NodeId(Opc.Ua.Variables.EnumStrings); + + /// + /// The identifier for the EnumValues Variable. + /// + public static readonly NodeId EnumValues = new NodeId(Opc.Ua.Variables.EnumValues); + + /// + /// The identifier for the OptionSetValues Variable. + /// + public static readonly NodeId OptionSetValues = new NodeId(Opc.Ua.Variables.OptionSetValues); + + /// + /// The identifier for the InputArguments Variable. + /// + public static readonly NodeId InputArguments = new NodeId(Opc.Ua.Variables.InputArguments); + + /// + /// The identifier for the OutputArguments Variable. + /// + public static readonly NodeId OutputArguments = new NodeId(Opc.Ua.Variables.OutputArguments); + + /// + /// The identifier for the DefaultInputValues Variable. + /// + public static readonly NodeId DefaultInputValues = new NodeId(Opc.Ua.Variables.DefaultInputValues); + + /// + /// The identifier for the DefaultInstanceBrowseName Variable. + /// + public static readonly NodeId DefaultInstanceBrowseName = new NodeId(Opc.Ua.Variables.DefaultInstanceBrowseName); + + /// + /// The identifier for the ServerType_ServerArray Variable. + /// + public static readonly NodeId ServerType_ServerArray = new NodeId(Opc.Ua.Variables.ServerType_ServerArray); + + /// + /// The identifier for the ServerType_NamespaceArray Variable. + /// + public static readonly NodeId ServerType_NamespaceArray = new NodeId(Opc.Ua.Variables.ServerType_NamespaceArray); + + /// + /// The identifier for the ServerType_UrisVersion Variable. + /// + public static readonly NodeId ServerType_UrisVersion = new NodeId(Opc.Ua.Variables.ServerType_UrisVersion); + + /// + /// The identifier for the ServerType_ServerStatus Variable. + /// + public static readonly NodeId ServerType_ServerStatus = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus); + + /// + /// The identifier for the ServerType_ServerStatus_StartTime Variable. + /// + public static readonly NodeId ServerType_ServerStatus_StartTime = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_StartTime); + + /// + /// The identifier for the ServerType_ServerStatus_CurrentTime Variable. + /// + public static readonly NodeId ServerType_ServerStatus_CurrentTime = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_CurrentTime); + + /// + /// The identifier for the ServerType_ServerStatus_State Variable. + /// + public static readonly NodeId ServerType_ServerStatus_State = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_State); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo_ProductUri Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo_ProductUri = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo_ProductUri); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo_ManufacturerName Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo_ManufacturerName = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo_ManufacturerName); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo_ProductName Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo_ProductName = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo_ProductName); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo_SoftwareVersion Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo_SoftwareVersion = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo_SoftwareVersion); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo_BuildNumber Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo_BuildNumber = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo_BuildNumber); + + /// + /// The identifier for the ServerType_ServerStatus_BuildInfo_BuildDate Variable. + /// + public static readonly NodeId ServerType_ServerStatus_BuildInfo_BuildDate = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_BuildInfo_BuildDate); + + /// + /// The identifier for the ServerType_ServerStatus_SecondsTillShutdown Variable. + /// + public static readonly NodeId ServerType_ServerStatus_SecondsTillShutdown = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_SecondsTillShutdown); + + /// + /// The identifier for the ServerType_ServerStatus_ShutdownReason Variable. + /// + public static readonly NodeId ServerType_ServerStatus_ShutdownReason = new NodeId(Opc.Ua.Variables.ServerType_ServerStatus_ShutdownReason); + + /// + /// The identifier for the ServerType_ServiceLevel Variable. + /// + public static readonly NodeId ServerType_ServiceLevel = new NodeId(Opc.Ua.Variables.ServerType_ServiceLevel); + + /// + /// The identifier for the ServerType_Auditing Variable. + /// + public static readonly NodeId ServerType_Auditing = new NodeId(Opc.Ua.Variables.ServerType_Auditing); + + /// + /// The identifier for the ServerType_EstimatedReturnTime Variable. + /// + public static readonly NodeId ServerType_EstimatedReturnTime = new NodeId(Opc.Ua.Variables.ServerType_EstimatedReturnTime); + + /// + /// The identifier for the ServerType_LocalTime Variable. + /// + public static readonly NodeId ServerType_LocalTime = new NodeId(Opc.Ua.Variables.ServerType_LocalTime); + + /// + /// The identifier for the ServerType_ServerCapabilities_ServerProfileArray Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_ServerProfileArray = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_ServerProfileArray); + + /// + /// The identifier for the ServerType_ServerCapabilities_LocaleIdArray Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_LocaleIdArray = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_LocaleIdArray); + + /// + /// The identifier for the ServerType_ServerCapabilities_MinSupportedSampleRate Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_MinSupportedSampleRate = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_MinSupportedSampleRate); + + /// + /// The identifier for the ServerType_ServerCapabilities_MaxBrowseContinuationPoints Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_MaxBrowseContinuationPoints = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_MaxBrowseContinuationPoints); + + /// + /// The identifier for the ServerType_ServerCapabilities_MaxQueryContinuationPoints Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_MaxQueryContinuationPoints = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_MaxQueryContinuationPoints); + + /// + /// The identifier for the ServerType_ServerCapabilities_MaxHistoryContinuationPoints Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_MaxHistoryContinuationPoints = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_MaxHistoryContinuationPoints); + + /// + /// The identifier for the ServerType_ServerCapabilities_SoftwareCertificates Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_SoftwareCertificates = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_SoftwareCertificates); + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_RoleSet_AddRole_InputArguments = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_RoleSet_AddRole_InputArguments); + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments); + + /// + /// The identifier for the ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. + /// + public static readonly NodeId ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments = new NodeId(Opc.Ua.Variables.ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount); + + /// + /// The identifier for the ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray); + + /// + /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray); + + /// + /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray); + + /// + /// The identifier for the ServerType_ServerDiagnostics_EnabledFlag Variable. + /// + public static readonly NodeId ServerType_ServerDiagnostics_EnabledFlag = new NodeId(Opc.Ua.Variables.ServerType_ServerDiagnostics_EnabledFlag); + + /// + /// The identifier for the ServerType_ServerRedundancy_RedundancySupport Variable. + /// + public static readonly NodeId ServerType_ServerRedundancy_RedundancySupport = new NodeId(Opc.Ua.Variables.ServerType_ServerRedundancy_RedundancySupport); + + /// + /// The identifier for the ServerType_GetMonitoredItems_InputArguments Variable. + /// + public static readonly NodeId ServerType_GetMonitoredItems_InputArguments = new NodeId(Opc.Ua.Variables.ServerType_GetMonitoredItems_InputArguments); + + /// + /// The identifier for the ServerType_GetMonitoredItems_OutputArguments Variable. + /// + public static readonly NodeId ServerType_GetMonitoredItems_OutputArguments = new NodeId(Opc.Ua.Variables.ServerType_GetMonitoredItems_OutputArguments); + + /// + /// The identifier for the ServerType_ResendData_InputArguments Variable. + /// + public static readonly NodeId ServerType_ResendData_InputArguments = new NodeId(Opc.Ua.Variables.ServerType_ResendData_InputArguments); + + /// + /// The identifier for the ServerType_SetSubscriptionDurable_InputArguments Variable. + /// + public static readonly NodeId ServerType_SetSubscriptionDurable_InputArguments = new NodeId(Opc.Ua.Variables.ServerType_SetSubscriptionDurable_InputArguments); + + /// + /// The identifier for the ServerType_SetSubscriptionDurable_OutputArguments Variable. + /// + public static readonly NodeId ServerType_SetSubscriptionDurable_OutputArguments = new NodeId(Opc.Ua.Variables.ServerType_SetSubscriptionDurable_OutputArguments); + + /// + /// The identifier for the ServerType_RequestServerStateChange_InputArguments Variable. + /// + public static readonly NodeId ServerType_RequestServerStateChange_InputArguments = new NodeId(Opc.Ua.Variables.ServerType_RequestServerStateChange_InputArguments); + + /// + /// The identifier for the ServerCapabilitiesType_ServerProfileArray Variable. + /// + public static readonly NodeId ServerCapabilitiesType_ServerProfileArray = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_ServerProfileArray); + + /// + /// The identifier for the ServerCapabilitiesType_LocaleIdArray Variable. + /// + public static readonly NodeId ServerCapabilitiesType_LocaleIdArray = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_LocaleIdArray); + + /// + /// The identifier for the ServerCapabilitiesType_MinSupportedSampleRate Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MinSupportedSampleRate = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MinSupportedSampleRate); + + /// + /// The identifier for the ServerCapabilitiesType_MaxBrowseContinuationPoints Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MaxBrowseContinuationPoints = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MaxBrowseContinuationPoints); + + /// + /// The identifier for the ServerCapabilitiesType_MaxQueryContinuationPoints Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MaxQueryContinuationPoints = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MaxQueryContinuationPoints); + + /// + /// The identifier for the ServerCapabilitiesType_MaxHistoryContinuationPoints Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MaxHistoryContinuationPoints = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MaxHistoryContinuationPoints); + + /// + /// The identifier for the ServerCapabilitiesType_SoftwareCertificates Variable. + /// + public static readonly NodeId ServerCapabilitiesType_SoftwareCertificates = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_SoftwareCertificates); + + /// + /// The identifier for the ServerCapabilitiesType_MaxArrayLength Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MaxArrayLength = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MaxArrayLength); + + /// + /// The identifier for the ServerCapabilitiesType_MaxStringLength Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MaxStringLength = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MaxStringLength); + + /// + /// The identifier for the ServerCapabilitiesType_MaxByteStringLength Variable. + /// + public static readonly NodeId ServerCapabilitiesType_MaxByteStringLength = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_MaxByteStringLength); + + /// + /// The identifier for the ServerCapabilitiesType_VendorCapability_Placeholder Variable. + /// + public static readonly NodeId ServerCapabilitiesType_VendorCapability_Placeholder = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_VendorCapability_Placeholder); + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_AddRole_InputArguments Variable. + /// + public static readonly NodeId ServerCapabilitiesType_RoleSet_AddRole_InputArguments = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_RoleSet_AddRole_InputArguments); + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_AddRole_OutputArguments Variable. + /// + public static readonly NodeId ServerCapabilitiesType_RoleSet_AddRole_OutputArguments = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_RoleSet_AddRole_OutputArguments); + + /// + /// The identifier for the ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments Variable. + /// + public static readonly NodeId ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments = new NodeId(Opc.Ua.Variables.ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount); + + /// + /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount Variable. + /// + public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount); + + /// + /// The identifier for the ServerDiagnosticsType_SamplingIntervalDiagnosticsArray Variable. + /// + public static readonly NodeId ServerDiagnosticsType_SamplingIntervalDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_SamplingIntervalDiagnosticsArray); + + /// + /// The identifier for the ServerDiagnosticsType_SubscriptionDiagnosticsArray Variable. + /// + public static readonly NodeId ServerDiagnosticsType_SubscriptionDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_SubscriptionDiagnosticsArray); + + /// + /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. + /// + public static readonly NodeId ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray); + + /// + /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. + /// + public static readonly NodeId ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray); + + /// + /// The identifier for the ServerDiagnosticsType_EnabledFlag Variable. + /// + public static readonly NodeId ServerDiagnosticsType_EnabledFlag = new NodeId(Opc.Ua.Variables.ServerDiagnosticsType_EnabledFlag); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_SessionDiagnosticsArray Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_SessionDiagnosticsArray = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_SessionDiagnosticsArray); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate); + + /// + /// The identifier for the SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray Variable. + /// + public static readonly NodeId SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray = new NodeId(Opc.Ua.Variables.SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SessionId Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SessionId); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SessionName Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SessionName = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SessionName); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CallCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CallCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CallCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate); + + /// + /// The identifier for the SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray Variable. + /// + public static readonly NodeId SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray = new NodeId(Opc.Ua.Variables.SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray); + + /// + /// The identifier for the ServerRedundancyType_RedundancySupport Variable. + /// + public static readonly NodeId ServerRedundancyType_RedundancySupport = new NodeId(Opc.Ua.Variables.ServerRedundancyType_RedundancySupport); + + /// + /// The identifier for the TransparentRedundancyType_CurrentServerId Variable. + /// + public static readonly NodeId TransparentRedundancyType_CurrentServerId = new NodeId(Opc.Ua.Variables.TransparentRedundancyType_CurrentServerId); + + /// + /// The identifier for the TransparentRedundancyType_RedundantServerArray Variable. + /// + public static readonly NodeId TransparentRedundancyType_RedundantServerArray = new NodeId(Opc.Ua.Variables.TransparentRedundancyType_RedundantServerArray); + + /// + /// The identifier for the NonTransparentRedundancyType_ServerUriArray Variable. + /// + public static readonly NodeId NonTransparentRedundancyType_ServerUriArray = new NodeId(Opc.Ua.Variables.NonTransparentRedundancyType_ServerUriArray); + + /// + /// The identifier for the NonTransparentNetworkRedundancyType_ServerNetworkGroups Variable. + /// + public static readonly NodeId NonTransparentNetworkRedundancyType_ServerNetworkGroups = new NodeId(Opc.Ua.Variables.NonTransparentNetworkRedundancyType_ServerNetworkGroups); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerRead Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerRead = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerRead); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerHistoryReadData Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryReadData = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerHistoryReadData); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerHistoryReadEvents Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryReadEvents = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerHistoryReadEvents); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerWrite Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerWrite = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerWrite); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerHistoryUpdateData Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryUpdateData = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerHistoryUpdateData); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerHistoryUpdateEvents Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryUpdateEvents = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerHistoryUpdateEvents); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerMethodCall Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerMethodCall = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerMethodCall); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerBrowse Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerBrowse = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerBrowse); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerRegisterNodes Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerRegisterNodes = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerRegisterNodes); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds); + + /// + /// The identifier for the OperationLimitsType_MaxNodesPerNodeManagement Variable. + /// + public static readonly NodeId OperationLimitsType_MaxNodesPerNodeManagement = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxNodesPerNodeManagement); + + /// + /// The identifier for the OperationLimitsType_MaxMonitoredItemsPerCall Variable. + /// + public static readonly NodeId OperationLimitsType_MaxMonitoredItemsPerCall = new NodeId(Opc.Ua.Variables.OperationLimitsType_MaxMonitoredItemsPerCall); + + /// + /// The identifier for the FileType_Size Variable. + /// + public static readonly NodeId FileType_Size = new NodeId(Opc.Ua.Variables.FileType_Size); + + /// + /// The identifier for the FileType_Writable Variable. + /// + public static readonly NodeId FileType_Writable = new NodeId(Opc.Ua.Variables.FileType_Writable); + + /// + /// The identifier for the FileType_UserWritable Variable. + /// + public static readonly NodeId FileType_UserWritable = new NodeId(Opc.Ua.Variables.FileType_UserWritable); + + /// + /// The identifier for the FileType_OpenCount Variable. + /// + public static readonly NodeId FileType_OpenCount = new NodeId(Opc.Ua.Variables.FileType_OpenCount); + + /// + /// The identifier for the FileType_MimeType Variable. + /// + public static readonly NodeId FileType_MimeType = new NodeId(Opc.Ua.Variables.FileType_MimeType); + + /// + /// The identifier for the FileType_Open_InputArguments Variable. + /// + public static readonly NodeId FileType_Open_InputArguments = new NodeId(Opc.Ua.Variables.FileType_Open_InputArguments); + + /// + /// The identifier for the FileType_Open_OutputArguments Variable. + /// + public static readonly NodeId FileType_Open_OutputArguments = new NodeId(Opc.Ua.Variables.FileType_Open_OutputArguments); + + /// + /// The identifier for the FileType_Close_InputArguments Variable. + /// + public static readonly NodeId FileType_Close_InputArguments = new NodeId(Opc.Ua.Variables.FileType_Close_InputArguments); + + /// + /// The identifier for the FileType_Read_InputArguments Variable. + /// + public static readonly NodeId FileType_Read_InputArguments = new NodeId(Opc.Ua.Variables.FileType_Read_InputArguments); + + /// + /// The identifier for the FileType_Read_OutputArguments Variable. + /// + public static readonly NodeId FileType_Read_OutputArguments = new NodeId(Opc.Ua.Variables.FileType_Read_OutputArguments); + + /// + /// The identifier for the FileType_Write_InputArguments Variable. + /// + public static readonly NodeId FileType_Write_InputArguments = new NodeId(Opc.Ua.Variables.FileType_Write_InputArguments); + + /// + /// The identifier for the FileType_GetPosition_InputArguments Variable. + /// + public static readonly NodeId FileType_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.FileType_GetPosition_InputArguments); + + /// + /// The identifier for the FileType_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId FileType_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.FileType_GetPosition_OutputArguments); + + /// + /// The identifier for the FileType_SetPosition_InputArguments Variable. + /// + public static readonly NodeId FileType_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.FileType_SetPosition_InputArguments); + + /// + /// The identifier for the AddressSpaceFileType_Open_InputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_Open_InputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_Open_InputArguments); + + /// + /// The identifier for the AddressSpaceFileType_Open_OutputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_Open_OutputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_Open_OutputArguments); + + /// + /// The identifier for the AddressSpaceFileType_Close_InputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_Close_InputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_Close_InputArguments); + + /// + /// The identifier for the AddressSpaceFileType_Read_InputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_Read_InputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_Read_InputArguments); + + /// + /// The identifier for the AddressSpaceFileType_Read_OutputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_Read_OutputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_Read_OutputArguments); + + /// + /// The identifier for the AddressSpaceFileType_Write_InputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_Write_InputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_Write_InputArguments); + + /// + /// The identifier for the AddressSpaceFileType_GetPosition_InputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_GetPosition_InputArguments); + + /// + /// The identifier for the AddressSpaceFileType_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_GetPosition_OutputArguments); + + /// + /// The identifier for the AddressSpaceFileType_SetPosition_InputArguments Variable. + /// + public static readonly NodeId AddressSpaceFileType_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.AddressSpaceFileType_SetPosition_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceUri Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceUri = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceUri); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceVersion Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceVersion = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceVersion); + + /// + /// The identifier for the NamespaceMetadataType_NamespacePublicationDate Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespacePublicationDate = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespacePublicationDate); + + /// + /// The identifier for the NamespaceMetadataType_IsNamespaceSubset Variable. + /// + public static readonly NodeId NamespaceMetadataType_IsNamespaceSubset = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_IsNamespaceSubset); + + /// + /// The identifier for the NamespaceMetadataType_StaticNodeIdTypes Variable. + /// + public static readonly NodeId NamespaceMetadataType_StaticNodeIdTypes = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_StaticNodeIdTypes); + + /// + /// The identifier for the NamespaceMetadataType_StaticNumericNodeIdRange Variable. + /// + public static readonly NodeId NamespaceMetadataType_StaticNumericNodeIdRange = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_StaticNumericNodeIdRange); + + /// + /// The identifier for the NamespaceMetadataType_StaticStringNodeIdPattern Variable. + /// + public static readonly NodeId NamespaceMetadataType_StaticStringNodeIdPattern = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_StaticStringNodeIdPattern); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Size Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Size = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Size); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Writable Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Writable = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Writable); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_UserWritable Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_UserWritable = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_UserWritable); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_OpenCount Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_OpenCount = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_OpenCount); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Open_InputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Open_InputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Open_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Open_OutputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Open_OutputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Open_OutputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Close_InputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Close_InputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Close_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Read_InputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Read_InputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Read_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Read_OutputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Read_OutputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Read_OutputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_Write_InputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_Write_InputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_Write_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments); + + /// + /// The identifier for the NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments Variable. + /// + public static readonly NodeId NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments); + + /// + /// The identifier for the NamespaceMetadataType_DefaultRolePermissions Variable. + /// + public static readonly NodeId NamespaceMetadataType_DefaultRolePermissions = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_DefaultRolePermissions); + + /// + /// The identifier for the NamespaceMetadataType_DefaultUserRolePermissions Variable. + /// + public static readonly NodeId NamespaceMetadataType_DefaultUserRolePermissions = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_DefaultUserRolePermissions); + + /// + /// The identifier for the NamespaceMetadataType_DefaultAccessRestrictions Variable. + /// + public static readonly NodeId NamespaceMetadataType_DefaultAccessRestrictions = new NodeId(Opc.Ua.Variables.NamespaceMetadataType_DefaultAccessRestrictions); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments); + + /// + /// The identifier for the NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments Variable. + /// + public static readonly NodeId NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments); + + /// + /// The identifier for the BaseEventType_EventId Variable. + /// + public static readonly NodeId BaseEventType_EventId = new NodeId(Opc.Ua.Variables.BaseEventType_EventId); + + /// + /// The identifier for the BaseEventType_EventType Variable. + /// + public static readonly NodeId BaseEventType_EventType = new NodeId(Opc.Ua.Variables.BaseEventType_EventType); + + /// + /// The identifier for the BaseEventType_SourceNode Variable. + /// + public static readonly NodeId BaseEventType_SourceNode = new NodeId(Opc.Ua.Variables.BaseEventType_SourceNode); + + /// + /// The identifier for the BaseEventType_SourceName Variable. + /// + public static readonly NodeId BaseEventType_SourceName = new NodeId(Opc.Ua.Variables.BaseEventType_SourceName); + + /// + /// The identifier for the BaseEventType_Time Variable. + /// + public static readonly NodeId BaseEventType_Time = new NodeId(Opc.Ua.Variables.BaseEventType_Time); + + /// + /// The identifier for the BaseEventType_ReceiveTime Variable. + /// + public static readonly NodeId BaseEventType_ReceiveTime = new NodeId(Opc.Ua.Variables.BaseEventType_ReceiveTime); + + /// + /// The identifier for the BaseEventType_LocalTime Variable. + /// + public static readonly NodeId BaseEventType_LocalTime = new NodeId(Opc.Ua.Variables.BaseEventType_LocalTime); + + /// + /// The identifier for the BaseEventType_Message Variable. + /// + public static readonly NodeId BaseEventType_Message = new NodeId(Opc.Ua.Variables.BaseEventType_Message); + + /// + /// The identifier for the BaseEventType_Severity Variable. + /// + public static readonly NodeId BaseEventType_Severity = new NodeId(Opc.Ua.Variables.BaseEventType_Severity); + + /// + /// The identifier for the AuditEventType_ActionTimeStamp Variable. + /// + public static readonly NodeId AuditEventType_ActionTimeStamp = new NodeId(Opc.Ua.Variables.AuditEventType_ActionTimeStamp); + + /// + /// The identifier for the AuditEventType_Status Variable. + /// + public static readonly NodeId AuditEventType_Status = new NodeId(Opc.Ua.Variables.AuditEventType_Status); + + /// + /// The identifier for the AuditEventType_ServerId Variable. + /// + public static readonly NodeId AuditEventType_ServerId = new NodeId(Opc.Ua.Variables.AuditEventType_ServerId); + + /// + /// The identifier for the AuditEventType_ClientAuditEntryId Variable. + /// + public static readonly NodeId AuditEventType_ClientAuditEntryId = new NodeId(Opc.Ua.Variables.AuditEventType_ClientAuditEntryId); + + /// + /// The identifier for the AuditEventType_ClientUserId Variable. + /// + public static readonly NodeId AuditEventType_ClientUserId = new NodeId(Opc.Ua.Variables.AuditEventType_ClientUserId); + + /// + /// The identifier for the AuditSecurityEventType_StatusCodeId Variable. + /// + public static readonly NodeId AuditSecurityEventType_StatusCodeId = new NodeId(Opc.Ua.Variables.AuditSecurityEventType_StatusCodeId); + + /// + /// The identifier for the AuditChannelEventType_SecureChannelId Variable. + /// + public static readonly NodeId AuditChannelEventType_SecureChannelId = new NodeId(Opc.Ua.Variables.AuditChannelEventType_SecureChannelId); + + /// + /// The identifier for the AuditOpenSecureChannelEventType_ClientCertificate Variable. + /// + public static readonly NodeId AuditOpenSecureChannelEventType_ClientCertificate = new NodeId(Opc.Ua.Variables.AuditOpenSecureChannelEventType_ClientCertificate); + + /// + /// The identifier for the AuditOpenSecureChannelEventType_ClientCertificateThumbprint Variable. + /// + public static readonly NodeId AuditOpenSecureChannelEventType_ClientCertificateThumbprint = new NodeId(Opc.Ua.Variables.AuditOpenSecureChannelEventType_ClientCertificateThumbprint); + + /// + /// The identifier for the AuditOpenSecureChannelEventType_RequestType Variable. + /// + public static readonly NodeId AuditOpenSecureChannelEventType_RequestType = new NodeId(Opc.Ua.Variables.AuditOpenSecureChannelEventType_RequestType); + + /// + /// The identifier for the AuditOpenSecureChannelEventType_SecurityPolicyUri Variable. + /// + public static readonly NodeId AuditOpenSecureChannelEventType_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.AuditOpenSecureChannelEventType_SecurityPolicyUri); + + /// + /// The identifier for the AuditOpenSecureChannelEventType_SecurityMode Variable. + /// + public static readonly NodeId AuditOpenSecureChannelEventType_SecurityMode = new NodeId(Opc.Ua.Variables.AuditOpenSecureChannelEventType_SecurityMode); + + /// + /// The identifier for the AuditOpenSecureChannelEventType_RequestedLifetime Variable. + /// + public static readonly NodeId AuditOpenSecureChannelEventType_RequestedLifetime = new NodeId(Opc.Ua.Variables.AuditOpenSecureChannelEventType_RequestedLifetime); + + /// + /// The identifier for the AuditSessionEventType_SessionId Variable. + /// + public static readonly NodeId AuditSessionEventType_SessionId = new NodeId(Opc.Ua.Variables.AuditSessionEventType_SessionId); + + /// + /// The identifier for the AuditCreateSessionEventType_SecureChannelId Variable. + /// + public static readonly NodeId AuditCreateSessionEventType_SecureChannelId = new NodeId(Opc.Ua.Variables.AuditCreateSessionEventType_SecureChannelId); + + /// + /// The identifier for the AuditCreateSessionEventType_ClientCertificate Variable. + /// + public static readonly NodeId AuditCreateSessionEventType_ClientCertificate = new NodeId(Opc.Ua.Variables.AuditCreateSessionEventType_ClientCertificate); + + /// + /// The identifier for the AuditCreateSessionEventType_ClientCertificateThumbprint Variable. + /// + public static readonly NodeId AuditCreateSessionEventType_ClientCertificateThumbprint = new NodeId(Opc.Ua.Variables.AuditCreateSessionEventType_ClientCertificateThumbprint); + + /// + /// The identifier for the AuditCreateSessionEventType_RevisedSessionTimeout Variable. + /// + public static readonly NodeId AuditCreateSessionEventType_RevisedSessionTimeout = new NodeId(Opc.Ua.Variables.AuditCreateSessionEventType_RevisedSessionTimeout); + + /// + /// The identifier for the AuditUrlMismatchEventType_EndpointUrl Variable. + /// + public static readonly NodeId AuditUrlMismatchEventType_EndpointUrl = new NodeId(Opc.Ua.Variables.AuditUrlMismatchEventType_EndpointUrl); + + /// + /// The identifier for the AuditActivateSessionEventType_ClientSoftwareCertificates Variable. + /// + public static readonly NodeId AuditActivateSessionEventType_ClientSoftwareCertificates = new NodeId(Opc.Ua.Variables.AuditActivateSessionEventType_ClientSoftwareCertificates); + + /// + /// The identifier for the AuditActivateSessionEventType_UserIdentityToken Variable. + /// + public static readonly NodeId AuditActivateSessionEventType_UserIdentityToken = new NodeId(Opc.Ua.Variables.AuditActivateSessionEventType_UserIdentityToken); + + /// + /// The identifier for the AuditActivateSessionEventType_SecureChannelId Variable. + /// + public static readonly NodeId AuditActivateSessionEventType_SecureChannelId = new NodeId(Opc.Ua.Variables.AuditActivateSessionEventType_SecureChannelId); + + /// + /// The identifier for the AuditCancelEventType_RequestHandle Variable. + /// + public static readonly NodeId AuditCancelEventType_RequestHandle = new NodeId(Opc.Ua.Variables.AuditCancelEventType_RequestHandle); + + /// + /// The identifier for the AuditCertificateEventType_Certificate Variable. + /// + public static readonly NodeId AuditCertificateEventType_Certificate = new NodeId(Opc.Ua.Variables.AuditCertificateEventType_Certificate); + + /// + /// The identifier for the AuditCertificateDataMismatchEventType_InvalidHostname Variable. + /// + public static readonly NodeId AuditCertificateDataMismatchEventType_InvalidHostname = new NodeId(Opc.Ua.Variables.AuditCertificateDataMismatchEventType_InvalidHostname); + + /// + /// The identifier for the AuditCertificateDataMismatchEventType_InvalidUri Variable. + /// + public static readonly NodeId AuditCertificateDataMismatchEventType_InvalidUri = new NodeId(Opc.Ua.Variables.AuditCertificateDataMismatchEventType_InvalidUri); + + /// + /// The identifier for the AuditAddNodesEventType_NodesToAdd Variable. + /// + public static readonly NodeId AuditAddNodesEventType_NodesToAdd = new NodeId(Opc.Ua.Variables.AuditAddNodesEventType_NodesToAdd); + + /// + /// The identifier for the AuditDeleteNodesEventType_NodesToDelete Variable. + /// + public static readonly NodeId AuditDeleteNodesEventType_NodesToDelete = new NodeId(Opc.Ua.Variables.AuditDeleteNodesEventType_NodesToDelete); + + /// + /// The identifier for the AuditAddReferencesEventType_ReferencesToAdd Variable. + /// + public static readonly NodeId AuditAddReferencesEventType_ReferencesToAdd = new NodeId(Opc.Ua.Variables.AuditAddReferencesEventType_ReferencesToAdd); + + /// + /// The identifier for the AuditDeleteReferencesEventType_ReferencesToDelete Variable. + /// + public static readonly NodeId AuditDeleteReferencesEventType_ReferencesToDelete = new NodeId(Opc.Ua.Variables.AuditDeleteReferencesEventType_ReferencesToDelete); + + /// + /// The identifier for the AuditWriteUpdateEventType_AttributeId Variable. + /// + public static readonly NodeId AuditWriteUpdateEventType_AttributeId = new NodeId(Opc.Ua.Variables.AuditWriteUpdateEventType_AttributeId); + + /// + /// The identifier for the AuditWriteUpdateEventType_IndexRange Variable. + /// + public static readonly NodeId AuditWriteUpdateEventType_IndexRange = new NodeId(Opc.Ua.Variables.AuditWriteUpdateEventType_IndexRange); + + /// + /// The identifier for the AuditWriteUpdateEventType_OldValue Variable. + /// + public static readonly NodeId AuditWriteUpdateEventType_OldValue = new NodeId(Opc.Ua.Variables.AuditWriteUpdateEventType_OldValue); + + /// + /// The identifier for the AuditWriteUpdateEventType_NewValue Variable. + /// + public static readonly NodeId AuditWriteUpdateEventType_NewValue = new NodeId(Opc.Ua.Variables.AuditWriteUpdateEventType_NewValue); + + /// + /// The identifier for the AuditHistoryUpdateEventType_ParameterDataTypeId Variable. + /// + public static readonly NodeId AuditHistoryUpdateEventType_ParameterDataTypeId = new NodeId(Opc.Ua.Variables.AuditHistoryUpdateEventType_ParameterDataTypeId); + + /// + /// The identifier for the AuditUpdateMethodEventType_MethodId Variable. + /// + public static readonly NodeId AuditUpdateMethodEventType_MethodId = new NodeId(Opc.Ua.Variables.AuditUpdateMethodEventType_MethodId); + + /// + /// The identifier for the AuditUpdateMethodEventType_InputArguments Variable. + /// + public static readonly NodeId AuditUpdateMethodEventType_InputArguments = new NodeId(Opc.Ua.Variables.AuditUpdateMethodEventType_InputArguments); + + /// + /// The identifier for the SystemStatusChangeEventType_SystemState Variable. + /// + public static readonly NodeId SystemStatusChangeEventType_SystemState = new NodeId(Opc.Ua.Variables.SystemStatusChangeEventType_SystemState); + + /// + /// The identifier for the GeneralModelChangeEventType_Changes Variable. + /// + public static readonly NodeId GeneralModelChangeEventType_Changes = new NodeId(Opc.Ua.Variables.GeneralModelChangeEventType_Changes); + + /// + /// The identifier for the SemanticChangeEventType_Changes Variable. + /// + public static readonly NodeId SemanticChangeEventType_Changes = new NodeId(Opc.Ua.Variables.SemanticChangeEventType_Changes); + + /// + /// The identifier for the ProgressEventType_Context Variable. + /// + public static readonly NodeId ProgressEventType_Context = new NodeId(Opc.Ua.Variables.ProgressEventType_Context); + + /// + /// The identifier for the ProgressEventType_Progress Variable. + /// + public static readonly NodeId ProgressEventType_Progress = new NodeId(Opc.Ua.Variables.ProgressEventType_Progress); + + /// + /// The identifier for the ServerStatusType_StartTime Variable. + /// + public static readonly NodeId ServerStatusType_StartTime = new NodeId(Opc.Ua.Variables.ServerStatusType_StartTime); + + /// + /// The identifier for the ServerStatusType_CurrentTime Variable. + /// + public static readonly NodeId ServerStatusType_CurrentTime = new NodeId(Opc.Ua.Variables.ServerStatusType_CurrentTime); + + /// + /// The identifier for the ServerStatusType_State Variable. + /// + public static readonly NodeId ServerStatusType_State = new NodeId(Opc.Ua.Variables.ServerStatusType_State); + + /// + /// The identifier for the ServerStatusType_BuildInfo Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo); + + /// + /// The identifier for the ServerStatusType_BuildInfo_ProductUri Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo_ProductUri = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo_ProductUri); + + /// + /// The identifier for the ServerStatusType_BuildInfo_ManufacturerName Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo_ManufacturerName = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo_ManufacturerName); + + /// + /// The identifier for the ServerStatusType_BuildInfo_ProductName Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo_ProductName = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo_ProductName); + + /// + /// The identifier for the ServerStatusType_BuildInfo_SoftwareVersion Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo_SoftwareVersion = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo_SoftwareVersion); + + /// + /// The identifier for the ServerStatusType_BuildInfo_BuildNumber Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo_BuildNumber = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo_BuildNumber); + + /// + /// The identifier for the ServerStatusType_BuildInfo_BuildDate Variable. + /// + public static readonly NodeId ServerStatusType_BuildInfo_BuildDate = new NodeId(Opc.Ua.Variables.ServerStatusType_BuildInfo_BuildDate); + + /// + /// The identifier for the ServerStatusType_SecondsTillShutdown Variable. + /// + public static readonly NodeId ServerStatusType_SecondsTillShutdown = new NodeId(Opc.Ua.Variables.ServerStatusType_SecondsTillShutdown); + + /// + /// The identifier for the ServerStatusType_ShutdownReason Variable. + /// + public static readonly NodeId ServerStatusType_ShutdownReason = new NodeId(Opc.Ua.Variables.ServerStatusType_ShutdownReason); + + /// + /// The identifier for the BuildInfoType_ProductUri Variable. + /// + public static readonly NodeId BuildInfoType_ProductUri = new NodeId(Opc.Ua.Variables.BuildInfoType_ProductUri); + + /// + /// The identifier for the BuildInfoType_ManufacturerName Variable. + /// + public static readonly NodeId BuildInfoType_ManufacturerName = new NodeId(Opc.Ua.Variables.BuildInfoType_ManufacturerName); + + /// + /// The identifier for the BuildInfoType_ProductName Variable. + /// + public static readonly NodeId BuildInfoType_ProductName = new NodeId(Opc.Ua.Variables.BuildInfoType_ProductName); + + /// + /// The identifier for the BuildInfoType_SoftwareVersion Variable. + /// + public static readonly NodeId BuildInfoType_SoftwareVersion = new NodeId(Opc.Ua.Variables.BuildInfoType_SoftwareVersion); + + /// + /// The identifier for the BuildInfoType_BuildNumber Variable. + /// + public static readonly NodeId BuildInfoType_BuildNumber = new NodeId(Opc.Ua.Variables.BuildInfoType_BuildNumber); + + /// + /// The identifier for the BuildInfoType_BuildDate Variable. + /// + public static readonly NodeId BuildInfoType_BuildDate = new NodeId(Opc.Ua.Variables.BuildInfoType_BuildDate); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_ServerViewCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_ServerViewCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_ServerViewCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_CurrentSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_CurrentSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_CurrentSessionCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_CumulatedSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_CumulatedSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_CumulatedSessionCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_SecurityRejectedSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_SecurityRejectedSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_SecurityRejectedSessionCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_RejectedSessionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_RejectedSessionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_RejectedSessionCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_SessionTimeoutCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_SessionTimeoutCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_SessionTimeoutCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_SessionAbortCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_SessionAbortCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_SessionAbortCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_PublishingIntervalCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_PublishingIntervalCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_PublishingIntervalCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_CurrentSubscriptionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_CurrentSubscriptionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_CurrentSubscriptionCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_CumulatedSubscriptionCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_CumulatedSubscriptionCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_CumulatedSubscriptionCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount); + + /// + /// The identifier for the ServerDiagnosticsSummaryType_RejectedRequestsCount Variable. + /// + public static readonly NodeId ServerDiagnosticsSummaryType_RejectedRequestsCount = new NodeId(Opc.Ua.Variables.ServerDiagnosticsSummaryType_RejectedRequestsCount); + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics); + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval); + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount); + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount); + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount); + + /// + /// The identifier for the SamplingIntervalDiagnosticsType_SamplingInterval Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsType_SamplingInterval = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsType_SamplingInterval); + + /// + /// The identifier for the SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount); + + /// + /// The identifier for the SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount); + + /// + /// The identifier for the SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount Variable. + /// + public static readonly NodeId SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount = new NodeId(Opc.Ua.Variables.SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_SessionId Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_SessionId = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_SessionId); + + /// + /// The identifier for the SubscriptionDiagnosticsType_SubscriptionId Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_SubscriptionId = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_SubscriptionId); + + /// + /// The identifier for the SubscriptionDiagnosticsType_Priority Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_Priority = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_Priority); + + /// + /// The identifier for the SubscriptionDiagnosticsType_PublishingInterval Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_PublishingInterval = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_PublishingInterval); + + /// + /// The identifier for the SubscriptionDiagnosticsType_MaxKeepAliveCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_MaxKeepAliveCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_MaxKeepAliveCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_MaxLifetimeCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_MaxLifetimeCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_MaxLifetimeCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_MaxNotificationsPerPublish Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_MaxNotificationsPerPublish = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_MaxNotificationsPerPublish); + + /// + /// The identifier for the SubscriptionDiagnosticsType_PublishingEnabled Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_PublishingEnabled = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_PublishingEnabled); + + /// + /// The identifier for the SubscriptionDiagnosticsType_ModifyCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_ModifyCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_ModifyCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_EnableCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_EnableCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_EnableCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_DisableCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_DisableCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_DisableCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_RepublishRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_RepublishRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_RepublishRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_RepublishMessageRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_RepublishMessageRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_RepublishMessageRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_RepublishMessageCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_RepublishMessageCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_RepublishMessageCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_TransferRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_TransferRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_TransferRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_TransferredToAltClientCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_TransferredToAltClientCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_TransferredToAltClientCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_TransferredToSameClientCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_TransferredToSameClientCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_TransferredToSameClientCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_PublishRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_PublishRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_PublishRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_DataChangeNotificationsCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_DataChangeNotificationsCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_DataChangeNotificationsCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_EventNotificationsCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_EventNotificationsCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_EventNotificationsCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_NotificationsCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_NotificationsCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_NotificationsCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_LatePublishRequestCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_LatePublishRequestCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_LatePublishRequestCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_CurrentKeepAliveCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_CurrentKeepAliveCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_CurrentKeepAliveCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_CurrentLifetimeCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_CurrentLifetimeCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_CurrentLifetimeCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_UnacknowledgedMessageCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_UnacknowledgedMessageCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_UnacknowledgedMessageCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_DiscardedMessageCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_DiscardedMessageCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_DiscardedMessageCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_MonitoredItemCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_MonitoredItemCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_MonitoredItemCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_DisabledMonitoredItemCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_DisabledMonitoredItemCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_DisabledMonitoredItemCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_MonitoringQueueOverflowCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_MonitoringQueueOverflowCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_MonitoringQueueOverflowCount); + + /// + /// The identifier for the SubscriptionDiagnosticsType_NextSequenceNumber Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_NextSequenceNumber = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_NextSequenceNumber); + + /// + /// The identifier for the SubscriptionDiagnosticsType_EventQueueOverflowCount Variable. + /// + public static readonly NodeId SubscriptionDiagnosticsType_EventQueueOverflowCount = new NodeId(Opc.Ua.Variables.SubscriptionDiagnosticsType_EventQueueOverflowCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SessionId Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_SessionId); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SessionName Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_SessionName = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_SessionName); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CallCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_CallCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_CallCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount); + + /// + /// The identifier for the SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_SessionId Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_SessionId = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_SessionId); + + /// + /// The identifier for the SessionDiagnosticsVariableType_SessionName Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_SessionName = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_SessionName); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ClientDescription Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ClientDescription = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ClientDescription); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ServerUri Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ServerUri = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ServerUri); + + /// + /// The identifier for the SessionDiagnosticsVariableType_EndpointUrl Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_EndpointUrl = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_EndpointUrl); + + /// + /// The identifier for the SessionDiagnosticsVariableType_LocaleIds Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_LocaleIds = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_LocaleIds); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ActualSessionTimeout Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ActualSessionTimeout = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ActualSessionTimeout); + + /// + /// The identifier for the SessionDiagnosticsVariableType_MaxResponseMessageSize Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_MaxResponseMessageSize = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_MaxResponseMessageSize); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ClientConnectionTime Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ClientConnectionTime = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ClientConnectionTime); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ClientLastContactTime Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ClientLastContactTime = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ClientLastContactTime); + + /// + /// The identifier for the SessionDiagnosticsVariableType_CurrentSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_CurrentSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_CurrentSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_CurrentMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_CurrentMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_CurrentMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue); + + /// + /// The identifier for the SessionDiagnosticsVariableType_TotalRequestCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_TotalRequestCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_TotalRequestCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_UnauthorizedRequestCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_UnauthorizedRequestCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_UnauthorizedRequestCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ReadCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ReadCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ReadCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_HistoryReadCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_HistoryReadCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_HistoryReadCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_WriteCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_WriteCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_WriteCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_HistoryUpdateCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_HistoryUpdateCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_HistoryUpdateCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_CallCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_CallCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_CallCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_CreateMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_CreateMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_CreateMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ModifyMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ModifyMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ModifyMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_SetMonitoringModeCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_SetMonitoringModeCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_SetMonitoringModeCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_SetTriggeringCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_SetTriggeringCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_SetTriggeringCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_DeleteMonitoredItemsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_DeleteMonitoredItemsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_DeleteMonitoredItemsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_CreateSubscriptionCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_CreateSubscriptionCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_CreateSubscriptionCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_ModifySubscriptionCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_ModifySubscriptionCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_ModifySubscriptionCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_SetPublishingModeCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_SetPublishingModeCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_SetPublishingModeCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_PublishCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_PublishCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_PublishCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_RepublishCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_RepublishCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_RepublishCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_TransferSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_TransferSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_TransferSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_DeleteSubscriptionsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_DeleteSubscriptionsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_DeleteSubscriptionsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_AddNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_AddNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_AddNodesCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_AddReferencesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_AddReferencesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_AddReferencesCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_DeleteNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_DeleteNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_DeleteNodesCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_DeleteReferencesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_DeleteReferencesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_DeleteReferencesCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_BrowseCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_BrowseCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_BrowseCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_BrowseNextCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_BrowseNextCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_BrowseNextCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_QueryFirstCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_QueryFirstCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_QueryFirstCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_QueryNextCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_QueryNextCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_QueryNextCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_RegisterNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_RegisterNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_RegisterNodesCount); + + /// + /// The identifier for the SessionDiagnosticsVariableType_UnregisterNodesCount Variable. + /// + public static readonly NodeId SessionDiagnosticsVariableType_UnregisterNodesCount = new NodeId(Opc.Ua.Variables.SessionDiagnosticsVariableType_UnregisterNodesCount); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_SessionId Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_SessionId = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_SessionId); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_ClientUserIdOfSession Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_ClientUserIdOfSession = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_ClientUserIdOfSession); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_ClientUserIdHistory Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_ClientUserIdHistory = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_ClientUserIdHistory); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_AuthenticationMechanism Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_AuthenticationMechanism = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_AuthenticationMechanism); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_Encoding Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_Encoding = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_Encoding); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_TransportProtocol Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_TransportProtocol = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_TransportProtocol); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_SecurityMode Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_SecurityMode = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_SecurityMode); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_SecurityPolicyUri Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_SecurityPolicyUri); + + /// + /// The identifier for the SessionSecurityDiagnosticsType_ClientCertificate Variable. + /// + public static readonly NodeId SessionSecurityDiagnosticsType_ClientCertificate = new NodeId(Opc.Ua.Variables.SessionSecurityDiagnosticsType_ClientCertificate); + + /// + /// The identifier for the OptionSetType_OptionSetValues Variable. + /// + public static readonly NodeId OptionSetType_OptionSetValues = new NodeId(Opc.Ua.Variables.OptionSetType_OptionSetValues); + + /// + /// The identifier for the OptionSetType_BitMask Variable. + /// + public static readonly NodeId OptionSetType_BitMask = new NodeId(Opc.Ua.Variables.OptionSetType_BitMask); + + /// + /// The identifier for the SelectionListType_Selections Variable. + /// + public static readonly NodeId SelectionListType_Selections = new NodeId(Opc.Ua.Variables.SelectionListType_Selections); + + /// + /// The identifier for the SelectionListType_SelectionDescriptions Variable. + /// + public static readonly NodeId SelectionListType_SelectionDescriptions = new NodeId(Opc.Ua.Variables.SelectionListType_SelectionDescriptions); + + /// + /// The identifier for the SelectionListType_RestrictToList Variable. + /// + public static readonly NodeId SelectionListType_RestrictToList = new NodeId(Opc.Ua.Variables.SelectionListType_RestrictToList); + + /// + /// The identifier for the AudioVariableType_ListId Variable. + /// + public static readonly NodeId AudioVariableType_ListId = new NodeId(Opc.Ua.Variables.AudioVariableType_ListId); + + /// + /// The identifier for the AudioVariableType_AgencyId Variable. + /// + public static readonly NodeId AudioVariableType_AgencyId = new NodeId(Opc.Ua.Variables.AudioVariableType_AgencyId); + + /// + /// The identifier for the AudioVariableType_VersionId Variable. + /// + public static readonly NodeId AudioVariableType_VersionId = new NodeId(Opc.Ua.Variables.AudioVariableType_VersionId); + + /// + /// The identifier for the Server_ServerArray Variable. + /// + public static readonly NodeId Server_ServerArray = new NodeId(Opc.Ua.Variables.Server_ServerArray); + + /// + /// The identifier for the Server_NamespaceArray Variable. + /// + public static readonly NodeId Server_NamespaceArray = new NodeId(Opc.Ua.Variables.Server_NamespaceArray); + + /// + /// The identifier for the Server_ServerStatus Variable. + /// + public static readonly NodeId Server_ServerStatus = new NodeId(Opc.Ua.Variables.Server_ServerStatus); + + /// + /// The identifier for the Server_ServerStatus_StartTime Variable. + /// + public static readonly NodeId Server_ServerStatus_StartTime = new NodeId(Opc.Ua.Variables.Server_ServerStatus_StartTime); + + /// + /// The identifier for the Server_ServerStatus_CurrentTime Variable. + /// + public static readonly NodeId Server_ServerStatus_CurrentTime = new NodeId(Opc.Ua.Variables.Server_ServerStatus_CurrentTime); + + /// + /// The identifier for the Server_ServerStatus_State Variable. + /// + public static readonly NodeId Server_ServerStatus_State = new NodeId(Opc.Ua.Variables.Server_ServerStatus_State); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo_ProductUri Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo_ProductUri = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo_ProductUri); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo_ManufacturerName Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo_ManufacturerName = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo_ManufacturerName); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo_ProductName Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo_ProductName = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo_ProductName); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo_SoftwareVersion Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo_SoftwareVersion = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo_SoftwareVersion); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo_BuildNumber Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo_BuildNumber = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo_BuildNumber); + + /// + /// The identifier for the Server_ServerStatus_BuildInfo_BuildDate Variable. + /// + public static readonly NodeId Server_ServerStatus_BuildInfo_BuildDate = new NodeId(Opc.Ua.Variables.Server_ServerStatus_BuildInfo_BuildDate); + + /// + /// The identifier for the Server_ServerStatus_SecondsTillShutdown Variable. + /// + public static readonly NodeId Server_ServerStatus_SecondsTillShutdown = new NodeId(Opc.Ua.Variables.Server_ServerStatus_SecondsTillShutdown); + + /// + /// The identifier for the Server_ServerStatus_ShutdownReason Variable. + /// + public static readonly NodeId Server_ServerStatus_ShutdownReason = new NodeId(Opc.Ua.Variables.Server_ServerStatus_ShutdownReason); + + /// + /// The identifier for the Server_ServiceLevel Variable. + /// + public static readonly NodeId Server_ServiceLevel = new NodeId(Opc.Ua.Variables.Server_ServiceLevel); + + /// + /// The identifier for the Server_Auditing Variable. + /// + public static readonly NodeId Server_Auditing = new NodeId(Opc.Ua.Variables.Server_Auditing); + + /// + /// The identifier for the Server_EstimatedReturnTime Variable. + /// + public static readonly NodeId Server_EstimatedReturnTime = new NodeId(Opc.Ua.Variables.Server_EstimatedReturnTime); + + /// + /// The identifier for the Server_LocalTime Variable. + /// + public static readonly NodeId Server_LocalTime = new NodeId(Opc.Ua.Variables.Server_LocalTime); + + /// + /// The identifier for the Server_ServerCapabilities_ServerProfileArray Variable. + /// + public static readonly NodeId Server_ServerCapabilities_ServerProfileArray = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_ServerProfileArray); + + /// + /// The identifier for the Server_ServerCapabilities_LocaleIdArray Variable. + /// + public static readonly NodeId Server_ServerCapabilities_LocaleIdArray = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_LocaleIdArray); + + /// + /// The identifier for the Server_ServerCapabilities_MinSupportedSampleRate Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MinSupportedSampleRate = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MinSupportedSampleRate); + + /// + /// The identifier for the Server_ServerCapabilities_MaxBrowseContinuationPoints Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MaxBrowseContinuationPoints = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MaxBrowseContinuationPoints); + + /// + /// The identifier for the Server_ServerCapabilities_MaxQueryContinuationPoints Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MaxQueryContinuationPoints = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MaxQueryContinuationPoints); + + /// + /// The identifier for the Server_ServerCapabilities_MaxHistoryContinuationPoints Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MaxHistoryContinuationPoints = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MaxHistoryContinuationPoints); + + /// + /// The identifier for the Server_ServerCapabilities_SoftwareCertificates Variable. + /// + public static readonly NodeId Server_ServerCapabilities_SoftwareCertificates = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_SoftwareCertificates); + + /// + /// The identifier for the Server_ServerCapabilities_MaxArrayLength Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MaxArrayLength = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MaxArrayLength); + + /// + /// The identifier for the Server_ServerCapabilities_MaxStringLength Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MaxStringLength = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MaxStringLength); + + /// + /// The identifier for the Server_ServerCapabilities_MaxByteStringLength Variable. + /// + public static readonly NodeId Server_ServerCapabilities_MaxByteStringLength = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_MaxByteStringLength); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerRead Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerRead = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerRead); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement); + + /// + /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall Variable. + /// + public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall); + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. + /// + public static readonly NodeId Server_ServerCapabilities_RoleSet_AddRole_InputArguments = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_RoleSet_AddRole_InputArguments); + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. + /// + public static readonly NodeId Server_ServerCapabilities_RoleSet_AddRole_OutputArguments = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_RoleSet_AddRole_OutputArguments); + + /// + /// The identifier for the Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. + /// + public static readonly NodeId Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments = new NodeId(Opc.Ua.Variables.Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount); + + /// + /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount); + + /// + /// The identifier for the Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray); + + /// + /// The identifier for the Server_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_SubscriptionDiagnosticsArray = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_SubscriptionDiagnosticsArray); + + /// + /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray); + + /// + /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray); + + /// + /// The identifier for the Server_ServerDiagnostics_EnabledFlag Variable. + /// + public static readonly NodeId Server_ServerDiagnostics_EnabledFlag = new NodeId(Opc.Ua.Variables.Server_ServerDiagnostics_EnabledFlag); + + /// + /// The identifier for the Server_ServerRedundancy_RedundancySupport Variable. + /// + public static readonly NodeId Server_ServerRedundancy_RedundancySupport = new NodeId(Opc.Ua.Variables.Server_ServerRedundancy_RedundancySupport); + + /// + /// The identifier for the Server_GetMonitoredItems_InputArguments Variable. + /// + public static readonly NodeId Server_GetMonitoredItems_InputArguments = new NodeId(Opc.Ua.Variables.Server_GetMonitoredItems_InputArguments); + + /// + /// The identifier for the Server_GetMonitoredItems_OutputArguments Variable. + /// + public static readonly NodeId Server_GetMonitoredItems_OutputArguments = new NodeId(Opc.Ua.Variables.Server_GetMonitoredItems_OutputArguments); + + /// + /// The identifier for the Server_ResendData_InputArguments Variable. + /// + public static readonly NodeId Server_ResendData_InputArguments = new NodeId(Opc.Ua.Variables.Server_ResendData_InputArguments); + + /// + /// The identifier for the Server_SetSubscriptionDurable_InputArguments Variable. + /// + public static readonly NodeId Server_SetSubscriptionDurable_InputArguments = new NodeId(Opc.Ua.Variables.Server_SetSubscriptionDurable_InputArguments); + + /// + /// The identifier for the Server_SetSubscriptionDurable_OutputArguments Variable. + /// + public static readonly NodeId Server_SetSubscriptionDurable_OutputArguments = new NodeId(Opc.Ua.Variables.Server_SetSubscriptionDurable_OutputArguments); + + /// + /// The identifier for the Server_RequestServerStateChange_InputArguments Variable. + /// + public static readonly NodeId Server_RequestServerStateChange_InputArguments = new NodeId(Opc.Ua.Variables.Server_RequestServerStateChange_InputArguments); + + /// + /// The identifier for the Server_ServerRedundancy_CurrentServerId Variable. + /// + public static readonly NodeId Server_ServerRedundancy_CurrentServerId = new NodeId(Opc.Ua.Variables.Server_ServerRedundancy_CurrentServerId); + + /// + /// The identifier for the Server_ServerRedundancy_RedundantServerArray Variable. + /// + public static readonly NodeId Server_ServerRedundancy_RedundantServerArray = new NodeId(Opc.Ua.Variables.Server_ServerRedundancy_RedundantServerArray); + + /// + /// The identifier for the Server_ServerRedundancy_ServerUriArray Variable. + /// + public static readonly NodeId Server_ServerRedundancy_ServerUriArray = new NodeId(Opc.Ua.Variables.Server_ServerRedundancy_ServerUriArray); + + /// + /// The identifier for the Server_ServerRedundancy_ServerNetworkGroups Variable. + /// + public static readonly NodeId Server_ServerRedundancy_ServerNetworkGroups = new NodeId(Opc.Ua.Variables.Server_ServerRedundancy_ServerNetworkGroups); + + /// + /// The identifier for the HistoryServerCapabilities_AccessHistoryDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_AccessHistoryDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_AccessHistoryDataCapability); + + /// + /// The identifier for the HistoryServerCapabilities_AccessHistoryEventsCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_AccessHistoryEventsCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_AccessHistoryEventsCapability); + + /// + /// The identifier for the HistoryServerCapabilities_MaxReturnDataValues Variable. + /// + public static readonly NodeId HistoryServerCapabilities_MaxReturnDataValues = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_MaxReturnDataValues); + + /// + /// The identifier for the HistoryServerCapabilities_MaxReturnEventValues Variable. + /// + public static readonly NodeId HistoryServerCapabilities_MaxReturnEventValues = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_MaxReturnEventValues); + + /// + /// The identifier for the HistoryServerCapabilities_InsertDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_InsertDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_InsertDataCapability); + + /// + /// The identifier for the HistoryServerCapabilities_ReplaceDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_ReplaceDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_ReplaceDataCapability); + + /// + /// The identifier for the HistoryServerCapabilities_UpdateDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_UpdateDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_UpdateDataCapability); + + /// + /// The identifier for the HistoryServerCapabilities_DeleteRawCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_DeleteRawCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_DeleteRawCapability); + + /// + /// The identifier for the HistoryServerCapabilities_DeleteAtTimeCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_DeleteAtTimeCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_DeleteAtTimeCapability); + + /// + /// The identifier for the HistoryServerCapabilities_InsertEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_InsertEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_InsertEventCapability); + + /// + /// The identifier for the HistoryServerCapabilities_ReplaceEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_ReplaceEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_ReplaceEventCapability); + + /// + /// The identifier for the HistoryServerCapabilities_UpdateEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_UpdateEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_UpdateEventCapability); + + /// + /// The identifier for the HistoryServerCapabilities_DeleteEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_DeleteEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_DeleteEventCapability); + + /// + /// The identifier for the HistoryServerCapabilities_InsertAnnotationCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilities_InsertAnnotationCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_InsertAnnotationCapability); + + /// + /// The identifier for the HistoryServerCapabilities_ServerTimestampSupported Variable. + /// + public static readonly NodeId HistoryServerCapabilities_ServerTimestampSupported = new NodeId(Opc.Ua.Variables.HistoryServerCapabilities_ServerTimestampSupported); + + /// + /// The identifier for the StateMachineType_CurrentState Variable. + /// + public static readonly NodeId StateMachineType_CurrentState = new NodeId(Opc.Ua.Variables.StateMachineType_CurrentState); + + /// + /// The identifier for the StateMachineType_CurrentState_Id Variable. + /// + public static readonly NodeId StateMachineType_CurrentState_Id = new NodeId(Opc.Ua.Variables.StateMachineType_CurrentState_Id); + + /// + /// The identifier for the StateMachineType_LastTransition Variable. + /// + public static readonly NodeId StateMachineType_LastTransition = new NodeId(Opc.Ua.Variables.StateMachineType_LastTransition); + + /// + /// The identifier for the StateMachineType_LastTransition_Id Variable. + /// + public static readonly NodeId StateMachineType_LastTransition_Id = new NodeId(Opc.Ua.Variables.StateMachineType_LastTransition_Id); + + /// + /// The identifier for the StateVariableType_Id Variable. + /// + public static readonly NodeId StateVariableType_Id = new NodeId(Opc.Ua.Variables.StateVariableType_Id); + + /// + /// The identifier for the StateVariableType_Name Variable. + /// + public static readonly NodeId StateVariableType_Name = new NodeId(Opc.Ua.Variables.StateVariableType_Name); + + /// + /// The identifier for the StateVariableType_Number Variable. + /// + public static readonly NodeId StateVariableType_Number = new NodeId(Opc.Ua.Variables.StateVariableType_Number); + + /// + /// The identifier for the StateVariableType_EffectiveDisplayName Variable. + /// + public static readonly NodeId StateVariableType_EffectiveDisplayName = new NodeId(Opc.Ua.Variables.StateVariableType_EffectiveDisplayName); + + /// + /// The identifier for the TransitionVariableType_Id Variable. + /// + public static readonly NodeId TransitionVariableType_Id = new NodeId(Opc.Ua.Variables.TransitionVariableType_Id); + + /// + /// The identifier for the TransitionVariableType_Name Variable. + /// + public static readonly NodeId TransitionVariableType_Name = new NodeId(Opc.Ua.Variables.TransitionVariableType_Name); + + /// + /// The identifier for the TransitionVariableType_Number Variable. + /// + public static readonly NodeId TransitionVariableType_Number = new NodeId(Opc.Ua.Variables.TransitionVariableType_Number); + + /// + /// The identifier for the TransitionVariableType_TransitionTime Variable. + /// + public static readonly NodeId TransitionVariableType_TransitionTime = new NodeId(Opc.Ua.Variables.TransitionVariableType_TransitionTime); + + /// + /// The identifier for the TransitionVariableType_EffectiveTransitionTime Variable. + /// + public static readonly NodeId TransitionVariableType_EffectiveTransitionTime = new NodeId(Opc.Ua.Variables.TransitionVariableType_EffectiveTransitionTime); + + /// + /// The identifier for the FiniteStateMachineType_CurrentState Variable. + /// + public static readonly NodeId FiniteStateMachineType_CurrentState = new NodeId(Opc.Ua.Variables.FiniteStateMachineType_CurrentState); + + /// + /// The identifier for the FiniteStateMachineType_CurrentState_Id Variable. + /// + public static readonly NodeId FiniteStateMachineType_CurrentState_Id = new NodeId(Opc.Ua.Variables.FiniteStateMachineType_CurrentState_Id); + + /// + /// The identifier for the FiniteStateMachineType_LastTransition Variable. + /// + public static readonly NodeId FiniteStateMachineType_LastTransition = new NodeId(Opc.Ua.Variables.FiniteStateMachineType_LastTransition); + + /// + /// The identifier for the FiniteStateMachineType_LastTransition_Id Variable. + /// + public static readonly NodeId FiniteStateMachineType_LastTransition_Id = new NodeId(Opc.Ua.Variables.FiniteStateMachineType_LastTransition_Id); + + /// + /// The identifier for the FiniteStateMachineType_AvailableStates Variable. + /// + public static readonly NodeId FiniteStateMachineType_AvailableStates = new NodeId(Opc.Ua.Variables.FiniteStateMachineType_AvailableStates); + + /// + /// The identifier for the FiniteStateMachineType_AvailableTransitions Variable. + /// + public static readonly NodeId FiniteStateMachineType_AvailableTransitions = new NodeId(Opc.Ua.Variables.FiniteStateMachineType_AvailableTransitions); + + /// + /// The identifier for the FiniteStateVariableType_Id Variable. + /// + public static readonly NodeId FiniteStateVariableType_Id = new NodeId(Opc.Ua.Variables.FiniteStateVariableType_Id); + + /// + /// The identifier for the FiniteTransitionVariableType_Id Variable. + /// + public static readonly NodeId FiniteTransitionVariableType_Id = new NodeId(Opc.Ua.Variables.FiniteTransitionVariableType_Id); + + /// + /// The identifier for the StateType_StateNumber Variable. + /// + public static readonly NodeId StateType_StateNumber = new NodeId(Opc.Ua.Variables.StateType_StateNumber); + + /// + /// The identifier for the TransitionType_TransitionNumber Variable. + /// + public static readonly NodeId TransitionType_TransitionNumber = new NodeId(Opc.Ua.Variables.TransitionType_TransitionNumber); + + /// + /// The identifier for the ExpressionGuardVariableType_Expression Variable. + /// + public static readonly NodeId ExpressionGuardVariableType_Expression = new NodeId(Opc.Ua.Variables.ExpressionGuardVariableType_Expression); + + /// + /// The identifier for the RationalNumberType_Numerator Variable. + /// + public static readonly NodeId RationalNumberType_Numerator = new NodeId(Opc.Ua.Variables.RationalNumberType_Numerator); + + /// + /// The identifier for the RationalNumberType_Denominator Variable. + /// + public static readonly NodeId RationalNumberType_Denominator = new NodeId(Opc.Ua.Variables.RationalNumberType_Denominator); + + /// + /// The identifier for the VectorType_VectorUnit Variable. + /// + public static readonly NodeId VectorType_VectorUnit = new NodeId(Opc.Ua.Variables.VectorType_VectorUnit); + + /// + /// The identifier for the ThreeDVectorType_X Variable. + /// + public static readonly NodeId ThreeDVectorType_X = new NodeId(Opc.Ua.Variables.ThreeDVectorType_X); + + /// + /// The identifier for the ThreeDVectorType_Y Variable. + /// + public static readonly NodeId ThreeDVectorType_Y = new NodeId(Opc.Ua.Variables.ThreeDVectorType_Y); + + /// + /// The identifier for the ThreeDVectorType_Z Variable. + /// + public static readonly NodeId ThreeDVectorType_Z = new NodeId(Opc.Ua.Variables.ThreeDVectorType_Z); + + /// + /// The identifier for the CartesianCoordinatesType_LengthUnit Variable. + /// + public static readonly NodeId CartesianCoordinatesType_LengthUnit = new NodeId(Opc.Ua.Variables.CartesianCoordinatesType_LengthUnit); + + /// + /// The identifier for the ThreeDCartesianCoordinatesType_X Variable. + /// + public static readonly NodeId ThreeDCartesianCoordinatesType_X = new NodeId(Opc.Ua.Variables.ThreeDCartesianCoordinatesType_X); + + /// + /// The identifier for the ThreeDCartesianCoordinatesType_Y Variable. + /// + public static readonly NodeId ThreeDCartesianCoordinatesType_Y = new NodeId(Opc.Ua.Variables.ThreeDCartesianCoordinatesType_Y); + + /// + /// The identifier for the ThreeDCartesianCoordinatesType_Z Variable. + /// + public static readonly NodeId ThreeDCartesianCoordinatesType_Z = new NodeId(Opc.Ua.Variables.ThreeDCartesianCoordinatesType_Z); + + /// + /// The identifier for the OrientationType_AngleUnit Variable. + /// + public static readonly NodeId OrientationType_AngleUnit = new NodeId(Opc.Ua.Variables.OrientationType_AngleUnit); + + /// + /// The identifier for the ThreeDOrientationType_A Variable. + /// + public static readonly NodeId ThreeDOrientationType_A = new NodeId(Opc.Ua.Variables.ThreeDOrientationType_A); + + /// + /// The identifier for the ThreeDOrientationType_B Variable. + /// + public static readonly NodeId ThreeDOrientationType_B = new NodeId(Opc.Ua.Variables.ThreeDOrientationType_B); + + /// + /// The identifier for the ThreeDOrientationType_C Variable. + /// + public static readonly NodeId ThreeDOrientationType_C = new NodeId(Opc.Ua.Variables.ThreeDOrientationType_C); + + /// + /// The identifier for the FrameType_CartesianCoordinates Variable. + /// + public static readonly NodeId FrameType_CartesianCoordinates = new NodeId(Opc.Ua.Variables.FrameType_CartesianCoordinates); + + /// + /// The identifier for the FrameType_Orientation Variable. + /// + public static readonly NodeId FrameType_Orientation = new NodeId(Opc.Ua.Variables.FrameType_Orientation); + + /// + /// The identifier for the FrameType_Constant Variable. + /// + public static readonly NodeId FrameType_Constant = new NodeId(Opc.Ua.Variables.FrameType_Constant); + + /// + /// The identifier for the FrameType_BaseFrame Variable. + /// + public static readonly NodeId FrameType_BaseFrame = new NodeId(Opc.Ua.Variables.FrameType_BaseFrame); + + /// + /// The identifier for the FrameType_FixedBase Variable. + /// + public static readonly NodeId FrameType_FixedBase = new NodeId(Opc.Ua.Variables.FrameType_FixedBase); + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates Variable. + /// + public static readonly NodeId ThreeDFrameType_CartesianCoordinates = new NodeId(Opc.Ua.Variables.ThreeDFrameType_CartesianCoordinates); + + /// + /// The identifier for the ThreeDFrameType_Orientation Variable. + /// + public static readonly NodeId ThreeDFrameType_Orientation = new NodeId(Opc.Ua.Variables.ThreeDFrameType_Orientation); + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates_X Variable. + /// + public static readonly NodeId ThreeDFrameType_CartesianCoordinates_X = new NodeId(Opc.Ua.Variables.ThreeDFrameType_CartesianCoordinates_X); + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates_Y Variable. + /// + public static readonly NodeId ThreeDFrameType_CartesianCoordinates_Y = new NodeId(Opc.Ua.Variables.ThreeDFrameType_CartesianCoordinates_Y); + + /// + /// The identifier for the ThreeDFrameType_CartesianCoordinates_Z Variable. + /// + public static readonly NodeId ThreeDFrameType_CartesianCoordinates_Z = new NodeId(Opc.Ua.Variables.ThreeDFrameType_CartesianCoordinates_Z); + + /// + /// The identifier for the ThreeDFrameType_Orientation_A Variable. + /// + public static readonly NodeId ThreeDFrameType_Orientation_A = new NodeId(Opc.Ua.Variables.ThreeDFrameType_Orientation_A); + + /// + /// The identifier for the ThreeDFrameType_Orientation_B Variable. + /// + public static readonly NodeId ThreeDFrameType_Orientation_B = new NodeId(Opc.Ua.Variables.ThreeDFrameType_Orientation_B); + + /// + /// The identifier for the ThreeDFrameType_Orientation_C Variable. + /// + public static readonly NodeId ThreeDFrameType_Orientation_C = new NodeId(Opc.Ua.Variables.ThreeDFrameType_Orientation_C); + + /// + /// The identifier for the TransitionEventType_Transition Variable. + /// + public static readonly NodeId TransitionEventType_Transition = new NodeId(Opc.Ua.Variables.TransitionEventType_Transition); + + /// + /// The identifier for the TransitionEventType_Transition_Id Variable. + /// + public static readonly NodeId TransitionEventType_Transition_Id = new NodeId(Opc.Ua.Variables.TransitionEventType_Transition_Id); + + /// + /// The identifier for the TransitionEventType_FromState Variable. + /// + public static readonly NodeId TransitionEventType_FromState = new NodeId(Opc.Ua.Variables.TransitionEventType_FromState); + + /// + /// The identifier for the TransitionEventType_FromState_Id Variable. + /// + public static readonly NodeId TransitionEventType_FromState_Id = new NodeId(Opc.Ua.Variables.TransitionEventType_FromState_Id); + + /// + /// The identifier for the TransitionEventType_ToState Variable. + /// + public static readonly NodeId TransitionEventType_ToState = new NodeId(Opc.Ua.Variables.TransitionEventType_ToState); + + /// + /// The identifier for the TransitionEventType_ToState_Id Variable. + /// + public static readonly NodeId TransitionEventType_ToState_Id = new NodeId(Opc.Ua.Variables.TransitionEventType_ToState_Id); + + /// + /// The identifier for the AuditUpdateStateEventType_OldStateId Variable. + /// + public static readonly NodeId AuditUpdateStateEventType_OldStateId = new NodeId(Opc.Ua.Variables.AuditUpdateStateEventType_OldStateId); + + /// + /// The identifier for the AuditUpdateStateEventType_NewStateId Variable. + /// + public static readonly NodeId AuditUpdateStateEventType_NewStateId = new NodeId(Opc.Ua.Variables.AuditUpdateStateEventType_NewStateId); + + /// + /// The identifier for the OpenFileMode_EnumValues Variable. + /// + public static readonly NodeId OpenFileMode_EnumValues = new NodeId(Opc.Ua.Variables.OpenFileMode_EnumValues); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Size Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Size = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Size); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Writable Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Writable = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Writable); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_UserWritable Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_UserWritable = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_UserWritable); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_OpenCount Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_OpenCount = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_OpenCount); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Open_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Open_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Open_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Open_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Open_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Open_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Close_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Close_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Close_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Read_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Read_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Read_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Read_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Read_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Read_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_Write_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_Write_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_Write_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments); + + /// + /// The identifier for the FileDirectoryType_CreateDirectory_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_CreateDirectory_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_CreateDirectory_InputArguments); + + /// + /// The identifier for the FileDirectoryType_CreateDirectory_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_CreateDirectory_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_CreateDirectory_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_CreateFile_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_CreateFile_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_CreateFile_InputArguments); + + /// + /// The identifier for the FileDirectoryType_CreateFile_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_CreateFile_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_CreateFile_OutputArguments); + + /// + /// The identifier for the FileDirectoryType_DeleteFileSystemObject_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_DeleteFileSystemObject_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_DeleteFileSystemObject_InputArguments); + + /// + /// The identifier for the FileDirectoryType_MoveOrCopy_InputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_MoveOrCopy_InputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_MoveOrCopy_InputArguments); + + /// + /// The identifier for the FileDirectoryType_MoveOrCopy_OutputArguments Variable. + /// + public static readonly NodeId FileDirectoryType_MoveOrCopy_OutputArguments = new NodeId(Opc.Ua.Variables.FileDirectoryType_MoveOrCopy_OutputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments); + + /// + /// The identifier for the FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Size Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Size = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Size); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Writable Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Writable = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Writable); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_UserWritable Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_UserWritable = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_UserWritable); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_OpenCount Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_OpenCount = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_OpenCount); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Open_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Open_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Open_InputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Open_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Open_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Open_OutputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Close_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Close_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Close_InputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Read_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Read_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Read_InputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Read_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Read_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Read_OutputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_Write_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_Write_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_Write_InputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_GetPosition_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_GetPosition_InputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_GetPosition_OutputArguments); + + /// + /// The identifier for the FileSystem_FileName_Placeholder_SetPosition_InputArguments Variable. + /// + public static readonly NodeId FileSystem_FileName_Placeholder_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_FileName_Placeholder_SetPosition_InputArguments); + + /// + /// The identifier for the FileSystem_CreateDirectory_InputArguments Variable. + /// + public static readonly NodeId FileSystem_CreateDirectory_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_CreateDirectory_InputArguments); + + /// + /// The identifier for the FileSystem_CreateDirectory_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_CreateDirectory_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_CreateDirectory_OutputArguments); + + /// + /// The identifier for the FileSystem_CreateFile_InputArguments Variable. + /// + public static readonly NodeId FileSystem_CreateFile_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_CreateFile_InputArguments); + + /// + /// The identifier for the FileSystem_CreateFile_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_CreateFile_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_CreateFile_OutputArguments); + + /// + /// The identifier for the FileSystem_DeleteFileSystemObject_InputArguments Variable. + /// + public static readonly NodeId FileSystem_DeleteFileSystemObject_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_DeleteFileSystemObject_InputArguments); + + /// + /// The identifier for the FileSystem_MoveOrCopy_InputArguments Variable. + /// + public static readonly NodeId FileSystem_MoveOrCopy_InputArguments = new NodeId(Opc.Ua.Variables.FileSystem_MoveOrCopy_InputArguments); + + /// + /// The identifier for the FileSystem_MoveOrCopy_OutputArguments Variable. + /// + public static readonly NodeId FileSystem_MoveOrCopy_OutputArguments = new NodeId(Opc.Ua.Variables.FileSystem_MoveOrCopy_OutputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_ClientProcessingTimeout Variable. + /// + public static readonly NodeId TemporaryFileTransferType_ClientProcessingTimeout = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_ClientProcessingTimeout); + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForRead_InputArguments Variable. + /// + public static readonly NodeId TemporaryFileTransferType_GenerateFileForRead_InputArguments = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_GenerateFileForRead_InputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForRead_OutputArguments Variable. + /// + public static readonly NodeId TemporaryFileTransferType_GenerateFileForRead_OutputArguments = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_GenerateFileForRead_OutputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForWrite_InputArguments Variable. + /// + public static readonly NodeId TemporaryFileTransferType_GenerateFileForWrite_InputArguments = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_GenerateFileForWrite_InputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_GenerateFileForWrite_OutputArguments Variable. + /// + public static readonly NodeId TemporaryFileTransferType_GenerateFileForWrite_OutputArguments = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_GenerateFileForWrite_OutputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_CloseAndCommit_InputArguments Variable. + /// + public static readonly NodeId TemporaryFileTransferType_CloseAndCommit_InputArguments = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_CloseAndCommit_InputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_CloseAndCommit_OutputArguments Variable. + /// + public static readonly NodeId TemporaryFileTransferType_CloseAndCommit_OutputArguments = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_CloseAndCommit_OutputArguments); + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_CurrentState Variable. + /// + public static readonly NodeId TemporaryFileTransferType_TransferState_Placeholder_CurrentState = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_TransferState_Placeholder_CurrentState); + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id Variable. + /// + public static readonly NodeId TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id); + + /// + /// The identifier for the TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id Variable. + /// + public static readonly NodeId TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id = new NodeId(Opc.Ua.Variables.TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id); + + /// + /// The identifier for the FileTransferStateMachineType_CurrentState_Id Variable. + /// + public static readonly NodeId FileTransferStateMachineType_CurrentState_Id = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_CurrentState_Id); + + /// + /// The identifier for the FileTransferStateMachineType_LastTransition_Id Variable. + /// + public static readonly NodeId FileTransferStateMachineType_LastTransition_Id = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_LastTransition_Id); + + /// + /// The identifier for the FileTransferStateMachineType_Idle_StateNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_Idle_StateNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_Idle_StateNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepare_StateNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ReadPrepare_StateNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ReadPrepare_StateNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransfer_StateNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ReadTransfer_StateNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ReadTransfer_StateNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWrite_StateNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ApplyWrite_StateNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ApplyWrite_StateNumber); + + /// + /// The identifier for the FileTransferStateMachineType_Error_StateNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_Error_StateNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_Error_StateNumber); + + /// + /// The identifier for the FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ReadPrepareToError_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ReadPrepareToError_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ReadPrepareToError_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ReadTransferToError_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ReadTransferToError_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ReadTransferToError_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ApplyWriteToError_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ApplyWriteToError_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ApplyWriteToError_TransitionNumber); + + /// + /// The identifier for the FileTransferStateMachineType_ErrorToIdle_TransitionNumber Variable. + /// + public static readonly NodeId FileTransferStateMachineType_ErrorToIdle_TransitionNumber = new NodeId(Opc.Ua.Variables.FileTransferStateMachineType_ErrorToIdle_TransitionNumber); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_Identities Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_Identities = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_Identities); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_AddApplication_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_AddApplication_InputArguments); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments); + + /// + /// The identifier for the RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the RoleSetType_AddRole_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_AddRole_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_AddRole_InputArguments); + + /// + /// The identifier for the RoleSetType_AddRole_OutputArguments Variable. + /// + public static readonly NodeId RoleSetType_AddRole_OutputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_AddRole_OutputArguments); + + /// + /// The identifier for the RoleSetType_RemoveRole_InputArguments Variable. + /// + public static readonly NodeId RoleSetType_RemoveRole_InputArguments = new NodeId(Opc.Ua.Variables.RoleSetType_RemoveRole_InputArguments); + + /// + /// The identifier for the RoleType_Identities Variable. + /// + public static readonly NodeId RoleType_Identities = new NodeId(Opc.Ua.Variables.RoleType_Identities); + + /// + /// The identifier for the RoleType_Applications Variable. + /// + public static readonly NodeId RoleType_Applications = new NodeId(Opc.Ua.Variables.RoleType_Applications); + + /// + /// The identifier for the RoleType_ApplicationsExclude Variable. + /// + public static readonly NodeId RoleType_ApplicationsExclude = new NodeId(Opc.Ua.Variables.RoleType_ApplicationsExclude); + + /// + /// The identifier for the RoleType_Endpoints Variable. + /// + public static readonly NodeId RoleType_Endpoints = new NodeId(Opc.Ua.Variables.RoleType_Endpoints); + + /// + /// The identifier for the RoleType_EndpointsExclude Variable. + /// + public static readonly NodeId RoleType_EndpointsExclude = new NodeId(Opc.Ua.Variables.RoleType_EndpointsExclude); + + /// + /// The identifier for the RoleType_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId RoleType_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.RoleType_AddIdentity_InputArguments); + + /// + /// The identifier for the RoleType_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId RoleType_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.RoleType_RemoveIdentity_InputArguments); + + /// + /// The identifier for the RoleType_AddApplication_InputArguments Variable. + /// + public static readonly NodeId RoleType_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.RoleType_AddApplication_InputArguments); + + /// + /// The identifier for the RoleType_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId RoleType_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.RoleType_RemoveApplication_InputArguments); + + /// + /// The identifier for the RoleType_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId RoleType_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.RoleType_AddEndpoint_InputArguments); + + /// + /// The identifier for the RoleType_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId RoleType_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.RoleType_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the IdentityCriteriaType_EnumValues Variable. + /// + public static readonly NodeId IdentityCriteriaType_EnumValues = new NodeId(Opc.Ua.Variables.IdentityCriteriaType_EnumValues); + + /// + /// The identifier for the WellKnownRole_Anonymous_Identities Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_Identities); + + /// + /// The identifier for the WellKnownRole_Anonymous_Applications Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_Applications); + + /// + /// The identifier for the WellKnownRole_Anonymous_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_Anonymous_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_Endpoints); + + /// + /// The identifier for the WellKnownRole_Anonymous_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_Anonymous_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Anonymous_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Anonymous_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Anonymous_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Anonymous_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Anonymous_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_Identities Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_Identities); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_Applications Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_Applications); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_Endpoints); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Observer_Identities Variable. + /// + public static readonly NodeId WellKnownRole_Observer_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_Identities); + + /// + /// The identifier for the WellKnownRole_Observer_Applications Variable. + /// + public static readonly NodeId WellKnownRole_Observer_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_Applications); + + /// + /// The identifier for the WellKnownRole_Observer_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Observer_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_Observer_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_Observer_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_Endpoints); + + /// + /// The identifier for the WellKnownRole_Observer_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Observer_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_Observer_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Observer_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Observer_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Observer_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Observer_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Observer_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Observer_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Observer_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Observer_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Observer_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Observer_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Observer_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Observer_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Operator_Identities Variable. + /// + public static readonly NodeId WellKnownRole_Operator_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_Identities); + + /// + /// The identifier for the WellKnownRole_Operator_Applications Variable. + /// + public static readonly NodeId WellKnownRole_Operator_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_Applications); + + /// + /// The identifier for the WellKnownRole_Operator_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Operator_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_Operator_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_Operator_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_Endpoints); + + /// + /// The identifier for the WellKnownRole_Operator_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Operator_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_Operator_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Operator_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Operator_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Operator_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Operator_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Operator_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Operator_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Operator_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Operator_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Operator_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Operator_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Operator_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Operator_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Engineer_Identities Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_Identities); + + /// + /// The identifier for the WellKnownRole_Engineer_Applications Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_Applications); + + /// + /// The identifier for the WellKnownRole_Engineer_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_Engineer_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_Endpoints); + + /// + /// The identifier for the WellKnownRole_Engineer_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_Engineer_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Engineer_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Engineer_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Engineer_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Engineer_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Engineer_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Supervisor_Identities Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_Identities); + + /// + /// The identifier for the WellKnownRole_Supervisor_Applications Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_Applications); + + /// + /// The identifier for the WellKnownRole_Supervisor_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_Supervisor_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_Endpoints); + + /// + /// The identifier for the WellKnownRole_Supervisor_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_Supervisor_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_Supervisor_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_Supervisor_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_Supervisor_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_Supervisor_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_Supervisor_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_Identities Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_Identities); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_Applications Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_Applications); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_Endpoints); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_Identities Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_Identities = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_Identities); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_Applications Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_Applications = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_Applications); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_ApplicationsExclude Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_ApplicationsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_ApplicationsExclude); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_Endpoints Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_Endpoints = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_Endpoints); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_EndpointsExclude Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_EndpointsExclude = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_EndpointsExclude); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_AddIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_AddIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_AddApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_AddApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments); + + /// + /// The identifier for the WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments Variable. + /// + public static readonly NodeId WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments = new NodeId(Opc.Ua.Variables.WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments); + + /// + /// The identifier for the CurrencyUnit Variable. + /// + public static readonly NodeId CurrencyUnit = new NodeId(Opc.Ua.Variables.CurrencyUnit); + + /// + /// The identifier for the IOrderedObjectType_NumberInList Variable. + /// + public static readonly NodeId IOrderedObjectType_NumberInList = new NodeId(Opc.Ua.Variables.IOrderedObjectType_NumberInList); + + /// + /// The identifier for the OrderedListType_OrderedObject_Placeholder_NumberInList Variable. + /// + public static readonly NodeId OrderedListType_OrderedObject_Placeholder_NumberInList = new NodeId(Opc.Ua.Variables.OrderedListType_OrderedObject_Placeholder_NumberInList); + + /// + /// The identifier for the OrderedListType_NodeVersion Variable. + /// + public static readonly NodeId OrderedListType_NodeVersion = new NodeId(Opc.Ua.Variables.OrderedListType_NodeVersion); + + /// + /// The identifier for the DataItemType_Definition Variable. + /// + public static readonly NodeId DataItemType_Definition = new NodeId(Opc.Ua.Variables.DataItemType_Definition); + + /// + /// The identifier for the DataItemType_ValuePrecision Variable. + /// + public static readonly NodeId DataItemType_ValuePrecision = new NodeId(Opc.Ua.Variables.DataItemType_ValuePrecision); + + /// + /// The identifier for the BaseAnalogType_InstrumentRange Variable. + /// + public static readonly NodeId BaseAnalogType_InstrumentRange = new NodeId(Opc.Ua.Variables.BaseAnalogType_InstrumentRange); + + /// + /// The identifier for the BaseAnalogType_EURange Variable. + /// + public static readonly NodeId BaseAnalogType_EURange = new NodeId(Opc.Ua.Variables.BaseAnalogType_EURange); + + /// + /// The identifier for the BaseAnalogType_EngineeringUnits Variable. + /// + public static readonly NodeId BaseAnalogType_EngineeringUnits = new NodeId(Opc.Ua.Variables.BaseAnalogType_EngineeringUnits); + + /// + /// The identifier for the AnalogItemType_EURange Variable. + /// + public static readonly NodeId AnalogItemType_EURange = new NodeId(Opc.Ua.Variables.AnalogItemType_EURange); + + /// + /// The identifier for the AnalogUnitType_EngineeringUnits Variable. + /// + public static readonly NodeId AnalogUnitType_EngineeringUnits = new NodeId(Opc.Ua.Variables.AnalogUnitType_EngineeringUnits); + + /// + /// The identifier for the AnalogUnitRangeType_EngineeringUnits Variable. + /// + public static readonly NodeId AnalogUnitRangeType_EngineeringUnits = new NodeId(Opc.Ua.Variables.AnalogUnitRangeType_EngineeringUnits); + + /// + /// The identifier for the TwoStateDiscreteType_FalseState Variable. + /// + public static readonly NodeId TwoStateDiscreteType_FalseState = new NodeId(Opc.Ua.Variables.TwoStateDiscreteType_FalseState); + + /// + /// The identifier for the TwoStateDiscreteType_TrueState Variable. + /// + public static readonly NodeId TwoStateDiscreteType_TrueState = new NodeId(Opc.Ua.Variables.TwoStateDiscreteType_TrueState); + + /// + /// The identifier for the MultiStateDiscreteType_EnumStrings Variable. + /// + public static readonly NodeId MultiStateDiscreteType_EnumStrings = new NodeId(Opc.Ua.Variables.MultiStateDiscreteType_EnumStrings); + + /// + /// The identifier for the MultiStateValueDiscreteType_EnumValues Variable. + /// + public static readonly NodeId MultiStateValueDiscreteType_EnumValues = new NodeId(Opc.Ua.Variables.MultiStateValueDiscreteType_EnumValues); + + /// + /// The identifier for the MultiStateValueDiscreteType_ValueAsText Variable. + /// + public static readonly NodeId MultiStateValueDiscreteType_ValueAsText = new NodeId(Opc.Ua.Variables.MultiStateValueDiscreteType_ValueAsText); + + /// + /// The identifier for the ArrayItemType_InstrumentRange Variable. + /// + public static readonly NodeId ArrayItemType_InstrumentRange = new NodeId(Opc.Ua.Variables.ArrayItemType_InstrumentRange); + + /// + /// The identifier for the ArrayItemType_EURange Variable. + /// + public static readonly NodeId ArrayItemType_EURange = new NodeId(Opc.Ua.Variables.ArrayItemType_EURange); + + /// + /// The identifier for the ArrayItemType_EngineeringUnits Variable. + /// + public static readonly NodeId ArrayItemType_EngineeringUnits = new NodeId(Opc.Ua.Variables.ArrayItemType_EngineeringUnits); + + /// + /// The identifier for the ArrayItemType_Title Variable. + /// + public static readonly NodeId ArrayItemType_Title = new NodeId(Opc.Ua.Variables.ArrayItemType_Title); + + /// + /// The identifier for the ArrayItemType_AxisScaleType Variable. + /// + public static readonly NodeId ArrayItemType_AxisScaleType = new NodeId(Opc.Ua.Variables.ArrayItemType_AxisScaleType); + + /// + /// The identifier for the YArrayItemType_XAxisDefinition Variable. + /// + public static readonly NodeId YArrayItemType_XAxisDefinition = new NodeId(Opc.Ua.Variables.YArrayItemType_XAxisDefinition); + + /// + /// The identifier for the XYArrayItemType_XAxisDefinition Variable. + /// + public static readonly NodeId XYArrayItemType_XAxisDefinition = new NodeId(Opc.Ua.Variables.XYArrayItemType_XAxisDefinition); + + /// + /// The identifier for the ImageItemType_XAxisDefinition Variable. + /// + public static readonly NodeId ImageItemType_XAxisDefinition = new NodeId(Opc.Ua.Variables.ImageItemType_XAxisDefinition); + + /// + /// The identifier for the ImageItemType_YAxisDefinition Variable. + /// + public static readonly NodeId ImageItemType_YAxisDefinition = new NodeId(Opc.Ua.Variables.ImageItemType_YAxisDefinition); + + /// + /// The identifier for the CubeItemType_XAxisDefinition Variable. + /// + public static readonly NodeId CubeItemType_XAxisDefinition = new NodeId(Opc.Ua.Variables.CubeItemType_XAxisDefinition); + + /// + /// The identifier for the CubeItemType_YAxisDefinition Variable. + /// + public static readonly NodeId CubeItemType_YAxisDefinition = new NodeId(Opc.Ua.Variables.CubeItemType_YAxisDefinition); + + /// + /// The identifier for the CubeItemType_ZAxisDefinition Variable. + /// + public static readonly NodeId CubeItemType_ZAxisDefinition = new NodeId(Opc.Ua.Variables.CubeItemType_ZAxisDefinition); + + /// + /// The identifier for the NDimensionArrayItemType_AxisDefinition Variable. + /// + public static readonly NodeId NDimensionArrayItemType_AxisDefinition = new NodeId(Opc.Ua.Variables.NDimensionArrayItemType_AxisDefinition); + + /// + /// The identifier for the TwoStateVariableType_Id Variable. + /// + public static readonly NodeId TwoStateVariableType_Id = new NodeId(Opc.Ua.Variables.TwoStateVariableType_Id); + + /// + /// The identifier for the TwoStateVariableType_TransitionTime Variable. + /// + public static readonly NodeId TwoStateVariableType_TransitionTime = new NodeId(Opc.Ua.Variables.TwoStateVariableType_TransitionTime); + + /// + /// The identifier for the TwoStateVariableType_EffectiveTransitionTime Variable. + /// + public static readonly NodeId TwoStateVariableType_EffectiveTransitionTime = new NodeId(Opc.Ua.Variables.TwoStateVariableType_EffectiveTransitionTime); + + /// + /// The identifier for the TwoStateVariableType_TrueState Variable. + /// + public static readonly NodeId TwoStateVariableType_TrueState = new NodeId(Opc.Ua.Variables.TwoStateVariableType_TrueState); + + /// + /// The identifier for the TwoStateVariableType_FalseState Variable. + /// + public static readonly NodeId TwoStateVariableType_FalseState = new NodeId(Opc.Ua.Variables.TwoStateVariableType_FalseState); + + /// + /// The identifier for the ConditionVariableType_SourceTimestamp Variable. + /// + public static readonly NodeId ConditionVariableType_SourceTimestamp = new NodeId(Opc.Ua.Variables.ConditionVariableType_SourceTimestamp); + + /// + /// The identifier for the ConditionType_ConditionClassId Variable. + /// + public static readonly NodeId ConditionType_ConditionClassId = new NodeId(Opc.Ua.Variables.ConditionType_ConditionClassId); + + /// + /// The identifier for the ConditionType_ConditionClassName Variable. + /// + public static readonly NodeId ConditionType_ConditionClassName = new NodeId(Opc.Ua.Variables.ConditionType_ConditionClassName); + + /// + /// The identifier for the ConditionType_ConditionSubClassId Variable. + /// + public static readonly NodeId ConditionType_ConditionSubClassId = new NodeId(Opc.Ua.Variables.ConditionType_ConditionSubClassId); + + /// + /// The identifier for the ConditionType_ConditionSubClassName Variable. + /// + public static readonly NodeId ConditionType_ConditionSubClassName = new NodeId(Opc.Ua.Variables.ConditionType_ConditionSubClassName); + + /// + /// The identifier for the ConditionType_ConditionName Variable. + /// + public static readonly NodeId ConditionType_ConditionName = new NodeId(Opc.Ua.Variables.ConditionType_ConditionName); + + /// + /// The identifier for the ConditionType_BranchId Variable. + /// + public static readonly NodeId ConditionType_BranchId = new NodeId(Opc.Ua.Variables.ConditionType_BranchId); + + /// + /// The identifier for the ConditionType_Retain Variable. + /// + public static readonly NodeId ConditionType_Retain = new NodeId(Opc.Ua.Variables.ConditionType_Retain); + + /// + /// The identifier for the ConditionType_EnabledState Variable. + /// + public static readonly NodeId ConditionType_EnabledState = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState); + + /// + /// The identifier for the ConditionType_EnabledState_Id Variable. + /// + public static readonly NodeId ConditionType_EnabledState_Id = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState_Id); + + /// + /// The identifier for the ConditionType_EnabledState_EffectiveDisplayName Variable. + /// + public static readonly NodeId ConditionType_EnabledState_EffectiveDisplayName = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState_EffectiveDisplayName); + + /// + /// The identifier for the ConditionType_EnabledState_TransitionTime Variable. + /// + public static readonly NodeId ConditionType_EnabledState_TransitionTime = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState_TransitionTime); + + /// + /// The identifier for the ConditionType_EnabledState_EffectiveTransitionTime Variable. + /// + public static readonly NodeId ConditionType_EnabledState_EffectiveTransitionTime = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState_EffectiveTransitionTime); + + /// + /// The identifier for the ConditionType_EnabledState_TrueState Variable. + /// + public static readonly NodeId ConditionType_EnabledState_TrueState = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState_TrueState); + + /// + /// The identifier for the ConditionType_EnabledState_FalseState Variable. + /// + public static readonly NodeId ConditionType_EnabledState_FalseState = new NodeId(Opc.Ua.Variables.ConditionType_EnabledState_FalseState); + + /// + /// The identifier for the ConditionType_Quality Variable. + /// + public static readonly NodeId ConditionType_Quality = new NodeId(Opc.Ua.Variables.ConditionType_Quality); + + /// + /// The identifier for the ConditionType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ConditionType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ConditionType_Quality_SourceTimestamp); + + /// + /// The identifier for the ConditionType_LastSeverity Variable. + /// + public static readonly NodeId ConditionType_LastSeverity = new NodeId(Opc.Ua.Variables.ConditionType_LastSeverity); + + /// + /// The identifier for the ConditionType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ConditionType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ConditionType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ConditionType_Comment Variable. + /// + public static readonly NodeId ConditionType_Comment = new NodeId(Opc.Ua.Variables.ConditionType_Comment); + + /// + /// The identifier for the ConditionType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ConditionType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ConditionType_Comment_SourceTimestamp); + + /// + /// The identifier for the ConditionType_ClientUserId Variable. + /// + public static readonly NodeId ConditionType_ClientUserId = new NodeId(Opc.Ua.Variables.ConditionType_ClientUserId); + + /// + /// The identifier for the ConditionType_AddComment_InputArguments Variable. + /// + public static readonly NodeId ConditionType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ConditionType_AddComment_InputArguments); + + /// + /// The identifier for the ConditionType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId ConditionType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.ConditionType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the ConditionType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId ConditionType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.ConditionType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the DialogConditionType_EnabledState Variable. + /// + public static readonly NodeId DialogConditionType_EnabledState = new NodeId(Opc.Ua.Variables.DialogConditionType_EnabledState); + + /// + /// The identifier for the DialogConditionType_EnabledState_Id Variable. + /// + public static readonly NodeId DialogConditionType_EnabledState_Id = new NodeId(Opc.Ua.Variables.DialogConditionType_EnabledState_Id); + + /// + /// The identifier for the DialogConditionType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId DialogConditionType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.DialogConditionType_Quality_SourceTimestamp); + + /// + /// The identifier for the DialogConditionType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId DialogConditionType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.DialogConditionType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the DialogConditionType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId DialogConditionType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.DialogConditionType_Comment_SourceTimestamp); + + /// + /// The identifier for the DialogConditionType_AddComment_InputArguments Variable. + /// + public static readonly NodeId DialogConditionType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.DialogConditionType_AddComment_InputArguments); + + /// + /// The identifier for the DialogConditionType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId DialogConditionType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.DialogConditionType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the DialogConditionType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId DialogConditionType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.DialogConditionType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the DialogConditionType_DialogState Variable. + /// + public static readonly NodeId DialogConditionType_DialogState = new NodeId(Opc.Ua.Variables.DialogConditionType_DialogState); + + /// + /// The identifier for the DialogConditionType_DialogState_Id Variable. + /// + public static readonly NodeId DialogConditionType_DialogState_Id = new NodeId(Opc.Ua.Variables.DialogConditionType_DialogState_Id); + + /// + /// The identifier for the DialogConditionType_DialogState_TransitionTime Variable. + /// + public static readonly NodeId DialogConditionType_DialogState_TransitionTime = new NodeId(Opc.Ua.Variables.DialogConditionType_DialogState_TransitionTime); + + /// + /// The identifier for the DialogConditionType_DialogState_TrueState Variable. + /// + public static readonly NodeId DialogConditionType_DialogState_TrueState = new NodeId(Opc.Ua.Variables.DialogConditionType_DialogState_TrueState); + + /// + /// The identifier for the DialogConditionType_DialogState_FalseState Variable. + /// + public static readonly NodeId DialogConditionType_DialogState_FalseState = new NodeId(Opc.Ua.Variables.DialogConditionType_DialogState_FalseState); + + /// + /// The identifier for the DialogConditionType_Prompt Variable. + /// + public static readonly NodeId DialogConditionType_Prompt = new NodeId(Opc.Ua.Variables.DialogConditionType_Prompt); + + /// + /// The identifier for the DialogConditionType_ResponseOptionSet Variable. + /// + public static readonly NodeId DialogConditionType_ResponseOptionSet = new NodeId(Opc.Ua.Variables.DialogConditionType_ResponseOptionSet); + + /// + /// The identifier for the DialogConditionType_DefaultResponse Variable. + /// + public static readonly NodeId DialogConditionType_DefaultResponse = new NodeId(Opc.Ua.Variables.DialogConditionType_DefaultResponse); + + /// + /// The identifier for the DialogConditionType_OkResponse Variable. + /// + public static readonly NodeId DialogConditionType_OkResponse = new NodeId(Opc.Ua.Variables.DialogConditionType_OkResponse); + + /// + /// The identifier for the DialogConditionType_CancelResponse Variable. + /// + public static readonly NodeId DialogConditionType_CancelResponse = new NodeId(Opc.Ua.Variables.DialogConditionType_CancelResponse); + + /// + /// The identifier for the DialogConditionType_LastResponse Variable. + /// + public static readonly NodeId DialogConditionType_LastResponse = new NodeId(Opc.Ua.Variables.DialogConditionType_LastResponse); + + /// + /// The identifier for the DialogConditionType_Respond_InputArguments Variable. + /// + public static readonly NodeId DialogConditionType_Respond_InputArguments = new NodeId(Opc.Ua.Variables.DialogConditionType_Respond_InputArguments); + + /// + /// The identifier for the AcknowledgeableConditionType_EnabledState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_EnabledState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_EnabledState); + + /// + /// The identifier for the AcknowledgeableConditionType_EnabledState_Id Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_EnabledState_Id = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_EnabledState_Id); + + /// + /// The identifier for the AcknowledgeableConditionType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_Quality_SourceTimestamp); + + /// + /// The identifier for the AcknowledgeableConditionType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the AcknowledgeableConditionType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_Comment_SourceTimestamp); + + /// + /// The identifier for the AcknowledgeableConditionType_AddComment_InputArguments Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_AddComment_InputArguments); + + /// + /// The identifier for the AcknowledgeableConditionType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the AcknowledgeableConditionType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the AcknowledgeableConditionType_AckedState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_AckedState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_AckedState); + + /// + /// The identifier for the AcknowledgeableConditionType_AckedState_Id Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_AckedState_Id = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_AckedState_Id); + + /// + /// The identifier for the AcknowledgeableConditionType_AckedState_TransitionTime Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_AckedState_TransitionTime = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_AckedState_TransitionTime); + + /// + /// The identifier for the AcknowledgeableConditionType_AckedState_TrueState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_AckedState_TrueState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_AckedState_TrueState); + + /// + /// The identifier for the AcknowledgeableConditionType_AckedState_FalseState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_AckedState_FalseState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_AckedState_FalseState); + + /// + /// The identifier for the AcknowledgeableConditionType_ConfirmedState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConfirmedState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConfirmedState); + + /// + /// The identifier for the AcknowledgeableConditionType_ConfirmedState_Id Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConfirmedState_Id); + + /// + /// The identifier for the AcknowledgeableConditionType_ConfirmedState_TransitionTime Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_TransitionTime = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConfirmedState_TransitionTime); + + /// + /// The identifier for the AcknowledgeableConditionType_ConfirmedState_TrueState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_TrueState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConfirmedState_TrueState); + + /// + /// The identifier for the AcknowledgeableConditionType_ConfirmedState_FalseState Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_FalseState = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_ConfirmedState_FalseState); + + /// + /// The identifier for the AcknowledgeableConditionType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_Acknowledge_InputArguments); + + /// + /// The identifier for the AcknowledgeableConditionType_Confirm_InputArguments Variable. + /// + public static readonly NodeId AcknowledgeableConditionType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.AcknowledgeableConditionType_Confirm_InputArguments); + + /// + /// The identifier for the AlarmConditionType_EnabledState Variable. + /// + public static readonly NodeId AlarmConditionType_EnabledState = new NodeId(Opc.Ua.Variables.AlarmConditionType_EnabledState); + + /// + /// The identifier for the AlarmConditionType_EnabledState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_EnabledState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_EnabledState_Id); + + /// + /// The identifier for the AlarmConditionType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId AlarmConditionType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.AlarmConditionType_Quality_SourceTimestamp); + + /// + /// The identifier for the AlarmConditionType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId AlarmConditionType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.AlarmConditionType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the AlarmConditionType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId AlarmConditionType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.AlarmConditionType_Comment_SourceTimestamp); + + /// + /// The identifier for the AlarmConditionType_AddComment_InputArguments Variable. + /// + public static readonly NodeId AlarmConditionType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.AlarmConditionType_AddComment_InputArguments); + + /// + /// The identifier for the AlarmConditionType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId AlarmConditionType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.AlarmConditionType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the AlarmConditionType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId AlarmConditionType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.AlarmConditionType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the AlarmConditionType_AckedState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_AckedState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_AckedState_Id); + + /// + /// The identifier for the AlarmConditionType_ConfirmedState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_ConfirmedState_Id); + + /// + /// The identifier for the AlarmConditionType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId AlarmConditionType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.AlarmConditionType_Acknowledge_InputArguments); + + /// + /// The identifier for the AlarmConditionType_Confirm_InputArguments Variable. + /// + public static readonly NodeId AlarmConditionType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.AlarmConditionType_Confirm_InputArguments); + + /// + /// The identifier for the AlarmConditionType_ActiveState Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState); + + /// + /// The identifier for the AlarmConditionType_ActiveState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState_Id); + + /// + /// The identifier for the AlarmConditionType_ActiveState_EffectiveDisplayName Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState_EffectiveDisplayName = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState_EffectiveDisplayName); + + /// + /// The identifier for the AlarmConditionType_ActiveState_TransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState_TransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState_TransitionTime); + + /// + /// The identifier for the AlarmConditionType_ActiveState_EffectiveTransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState_EffectiveTransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState_EffectiveTransitionTime); + + /// + /// The identifier for the AlarmConditionType_ActiveState_TrueState Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState_TrueState = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState_TrueState); + + /// + /// The identifier for the AlarmConditionType_ActiveState_FalseState Variable. + /// + public static readonly NodeId AlarmConditionType_ActiveState_FalseState = new NodeId(Opc.Ua.Variables.AlarmConditionType_ActiveState_FalseState); + + /// + /// The identifier for the AlarmConditionType_InputNode Variable. + /// + public static readonly NodeId AlarmConditionType_InputNode = new NodeId(Opc.Ua.Variables.AlarmConditionType_InputNode); + + /// + /// The identifier for the AlarmConditionType_SuppressedState Variable. + /// + public static readonly NodeId AlarmConditionType_SuppressedState = new NodeId(Opc.Ua.Variables.AlarmConditionType_SuppressedState); + + /// + /// The identifier for the AlarmConditionType_SuppressedState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_SuppressedState_Id); + + /// + /// The identifier for the AlarmConditionType_SuppressedState_TransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_SuppressedState_TransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_SuppressedState_TransitionTime); + + /// + /// The identifier for the AlarmConditionType_SuppressedState_TrueState Variable. + /// + public static readonly NodeId AlarmConditionType_SuppressedState_TrueState = new NodeId(Opc.Ua.Variables.AlarmConditionType_SuppressedState_TrueState); + + /// + /// The identifier for the AlarmConditionType_SuppressedState_FalseState Variable. + /// + public static readonly NodeId AlarmConditionType_SuppressedState_FalseState = new NodeId(Opc.Ua.Variables.AlarmConditionType_SuppressedState_FalseState); + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState Variable. + /// + public static readonly NodeId AlarmConditionType_OutOfServiceState = new NodeId(Opc.Ua.Variables.AlarmConditionType_OutOfServiceState); + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_OutOfServiceState_Id); + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_TransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_OutOfServiceState_TransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_OutOfServiceState_TransitionTime); + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_TrueState Variable. + /// + public static readonly NodeId AlarmConditionType_OutOfServiceState_TrueState = new NodeId(Opc.Ua.Variables.AlarmConditionType_OutOfServiceState_TrueState); + + /// + /// The identifier for the AlarmConditionType_OutOfServiceState_FalseState Variable. + /// + public static readonly NodeId AlarmConditionType_OutOfServiceState_FalseState = new NodeId(Opc.Ua.Variables.AlarmConditionType_OutOfServiceState_FalseState); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_CurrentState); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_LastTransition Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_LastTransition = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_LastTransition); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_LastTransition_TransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_LastTransition_TransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_LastTransition_TransitionTime); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the AlarmConditionType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId AlarmConditionType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.AlarmConditionType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the AlarmConditionType_SuppressedOrShelved Variable. + /// + public static readonly NodeId AlarmConditionType_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.AlarmConditionType_SuppressedOrShelved); + + /// + /// The identifier for the AlarmConditionType_MaxTimeShelved Variable. + /// + public static readonly NodeId AlarmConditionType_MaxTimeShelved = new NodeId(Opc.Ua.Variables.AlarmConditionType_MaxTimeShelved); + + /// + /// The identifier for the AlarmConditionType_AudibleEnabled Variable. + /// + public static readonly NodeId AlarmConditionType_AudibleEnabled = new NodeId(Opc.Ua.Variables.AlarmConditionType_AudibleEnabled); + + /// + /// The identifier for the AlarmConditionType_AudibleSound Variable. + /// + public static readonly NodeId AlarmConditionType_AudibleSound = new NodeId(Opc.Ua.Variables.AlarmConditionType_AudibleSound); + + /// + /// The identifier for the AlarmConditionType_SilenceState Variable. + /// + public static readonly NodeId AlarmConditionType_SilenceState = new NodeId(Opc.Ua.Variables.AlarmConditionType_SilenceState); + + /// + /// The identifier for the AlarmConditionType_SilenceState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_SilenceState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_SilenceState_Id); + + /// + /// The identifier for the AlarmConditionType_SilenceState_TransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_SilenceState_TransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_SilenceState_TransitionTime); + + /// + /// The identifier for the AlarmConditionType_SilenceState_TrueState Variable. + /// + public static readonly NodeId AlarmConditionType_SilenceState_TrueState = new NodeId(Opc.Ua.Variables.AlarmConditionType_SilenceState_TrueState); + + /// + /// The identifier for the AlarmConditionType_SilenceState_FalseState Variable. + /// + public static readonly NodeId AlarmConditionType_SilenceState_FalseState = new NodeId(Opc.Ua.Variables.AlarmConditionType_SilenceState_FalseState); + + /// + /// The identifier for the AlarmConditionType_OnDelay Variable. + /// + public static readonly NodeId AlarmConditionType_OnDelay = new NodeId(Opc.Ua.Variables.AlarmConditionType_OnDelay); + + /// + /// The identifier for the AlarmConditionType_OffDelay Variable. + /// + public static readonly NodeId AlarmConditionType_OffDelay = new NodeId(Opc.Ua.Variables.AlarmConditionType_OffDelay); + + /// + /// The identifier for the AlarmConditionType_FirstInGroupFlag Variable. + /// + public static readonly NodeId AlarmConditionType_FirstInGroupFlag = new NodeId(Opc.Ua.Variables.AlarmConditionType_FirstInGroupFlag); + + /// + /// The identifier for the AlarmConditionType_LatchedState Variable. + /// + public static readonly NodeId AlarmConditionType_LatchedState = new NodeId(Opc.Ua.Variables.AlarmConditionType_LatchedState); + + /// + /// The identifier for the AlarmConditionType_LatchedState_Id Variable. + /// + public static readonly NodeId AlarmConditionType_LatchedState_Id = new NodeId(Opc.Ua.Variables.AlarmConditionType_LatchedState_Id); + + /// + /// The identifier for the AlarmConditionType_LatchedState_TransitionTime Variable. + /// + public static readonly NodeId AlarmConditionType_LatchedState_TransitionTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_LatchedState_TransitionTime); + + /// + /// The identifier for the AlarmConditionType_LatchedState_TrueState Variable. + /// + public static readonly NodeId AlarmConditionType_LatchedState_TrueState = new NodeId(Opc.Ua.Variables.AlarmConditionType_LatchedState_TrueState); + + /// + /// The identifier for the AlarmConditionType_LatchedState_FalseState Variable. + /// + public static readonly NodeId AlarmConditionType_LatchedState_FalseState = new NodeId(Opc.Ua.Variables.AlarmConditionType_LatchedState_FalseState); + + /// + /// The identifier for the AlarmConditionType_ReAlarmTime Variable. + /// + public static readonly NodeId AlarmConditionType_ReAlarmTime = new NodeId(Opc.Ua.Variables.AlarmConditionType_ReAlarmTime); + + /// + /// The identifier for the AlarmConditionType_ReAlarmRepeatCount Variable. + /// + public static readonly NodeId AlarmConditionType_ReAlarmRepeatCount = new NodeId(Opc.Ua.Variables.AlarmConditionType_ReAlarmRepeatCount); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EventId Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_EventId = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_EventId); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EventType Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_EventType = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_EventType); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Time Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Time = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Time); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Message Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Message = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Message); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Severity Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Severity = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Severity); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Retain Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Retain = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Retain); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Quality Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Quality = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Quality); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Comment Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Comment = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Comment); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id); + + /// + /// The identifier for the AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id Variable. + /// + public static readonly NodeId AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id = new NodeId(Opc.Ua.Variables.AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id); + + /// + /// The identifier for the ShelvedStateMachineType_CurrentState_Id Variable. + /// + public static readonly NodeId ShelvedStateMachineType_CurrentState_Id = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_CurrentState_Id); + + /// + /// The identifier for the ShelvedStateMachineType_LastTransition_Id Variable. + /// + public static readonly NodeId ShelvedStateMachineType_LastTransition_Id = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_LastTransition_Id); + + /// + /// The identifier for the ShelvedStateMachineType_UnshelveTime Variable. + /// + public static readonly NodeId ShelvedStateMachineType_UnshelveTime = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_UnshelveTime); + + /// + /// The identifier for the ShelvedStateMachineType_Unshelved_StateNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_Unshelved_StateNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_Unshelved_StateNumber); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelved_StateNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelved_StateNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_TimedShelved_StateNumber); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelved_StateNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelved_StateNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_OneShotShelved_StateNumber); + + /// + /// The identifier for the ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber); + + /// + /// The identifier for the ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber); + + /// + /// The identifier for the ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber Variable. + /// + public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber); + + /// + /// The identifier for the ShelvedStateMachineType_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ShelvedStateMachineType_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ShelvedStateMachineType_TimedShelve_InputArguments); + + /// + /// The identifier for the LimitAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_EnabledState_Id); + + /// + /// The identifier for the LimitAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId LimitAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.LimitAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the LimitAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId LimitAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.LimitAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the LimitAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId LimitAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.LimitAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the LimitAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId LimitAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.LimitAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the LimitAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId LimitAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.LimitAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the LimitAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId LimitAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.LimitAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the LimitAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_AckedState_Id); + + /// + /// The identifier for the LimitAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the LimitAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId LimitAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.LimitAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the LimitAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId LimitAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.LimitAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the LimitAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_ActiveState_Id); + + /// + /// The identifier for the LimitAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_SuppressedState_Id); + + /// + /// The identifier for the LimitAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.LimitAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.LimitAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the LimitAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId LimitAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.LimitAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the LimitAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_SilenceState_Id); + + /// + /// The identifier for the LimitAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId LimitAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.LimitAlarmType_LatchedState_Id); + + /// + /// The identifier for the LimitAlarmType_HighHighLimit Variable. + /// + public static readonly NodeId LimitAlarmType_HighHighLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_HighHighLimit); + + /// + /// The identifier for the LimitAlarmType_HighLimit Variable. + /// + public static readonly NodeId LimitAlarmType_HighLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_HighLimit); + + /// + /// The identifier for the LimitAlarmType_LowLimit Variable. + /// + public static readonly NodeId LimitAlarmType_LowLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_LowLimit); + + /// + /// The identifier for the LimitAlarmType_LowLowLimit Variable. + /// + public static readonly NodeId LimitAlarmType_LowLowLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_LowLowLimit); + + /// + /// The identifier for the LimitAlarmType_BaseHighHighLimit Variable. + /// + public static readonly NodeId LimitAlarmType_BaseHighHighLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_BaseHighHighLimit); + + /// + /// The identifier for the LimitAlarmType_BaseHighLimit Variable. + /// + public static readonly NodeId LimitAlarmType_BaseHighLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_BaseHighLimit); + + /// + /// The identifier for the LimitAlarmType_BaseLowLimit Variable. + /// + public static readonly NodeId LimitAlarmType_BaseLowLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_BaseLowLimit); + + /// + /// The identifier for the LimitAlarmType_BaseLowLowLimit Variable. + /// + public static readonly NodeId LimitAlarmType_BaseLowLowLimit = new NodeId(Opc.Ua.Variables.LimitAlarmType_BaseLowLowLimit); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_CurrentState_Id); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_LastTransition_Id); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_HighHigh_StateNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_HighHigh_StateNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_HighHigh_StateNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_High_StateNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_High_StateNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_High_StateNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_Low_StateNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_Low_StateNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_Low_StateNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LowLow_StateNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LowLow_StateNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_LowLow_StateNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber); + + /// + /// The identifier for the ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber Variable. + /// + public static readonly NodeId ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber = new NodeId(Opc.Ua.Variables.ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber); + + /// + /// The identifier for the ExclusiveLimitAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_EnabledState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ExclusiveLimitAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the ExclusiveLimitAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the ExclusiveLimitAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_AckedState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the ExclusiveLimitAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ActiveState Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ActiveState = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ActiveState); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ActiveState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_SuppressedState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ExclusiveLimitAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_SilenceState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LatchedState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LimitState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LimitState_CurrentState); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LimitState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LimitState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LimitState_LastTransition = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LimitState_LastTransition); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LimitState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LimitState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime Variable. + /// + public static readonly NodeId ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime = new NodeId(Opc.Ua.Variables.ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_EnabledState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_AckedState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ActiveState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ActiveState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ActiveState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ActiveState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_SuppressedState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_SilenceState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LatchedState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighHighState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighHighState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_TransitionTime Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_TransitionTime = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighHighState_TransitionTime); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_TrueState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_TrueState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighHighState_TrueState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_FalseState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_FalseState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighHighState_FalseState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighState_TransitionTime Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighState_TransitionTime = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighState_TransitionTime); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighState_TrueState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighState_TrueState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighState_TrueState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_HighState_FalseState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_HighState_FalseState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_HighState_FalseState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowState_TransitionTime Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowState_TransitionTime = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowState_TransitionTime); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowState_TrueState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowState_TrueState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowState_TrueState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowState_FalseState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowState_FalseState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowState_FalseState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowLowState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowLowState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_Id Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowLowState_Id); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_TransitionTime Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_TransitionTime = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowLowState_TransitionTime); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_TrueState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_TrueState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowLowState_TrueState); + + /// + /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_FalseState Variable. + /// + public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_FalseState = new NodeId(Opc.Ua.Variables.NonExclusiveLimitAlarmType_LowLowState_FalseState); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_EnabledState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_AckedState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ActiveState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_SuppressedState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_SilenceState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_LatchedState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_HighHighState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_HighHighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_HighHighState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_HighState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_HighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_HighState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LowState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_LowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_LowState_Id); + + /// + /// The identifier for the NonExclusiveLevelAlarmType_LowLowState_Id Variable. + /// + public static readonly NodeId NonExclusiveLevelAlarmType_LowLowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveLevelAlarmType_LowLowState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_EnabledState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ExclusiveLevelAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the ExclusiveLevelAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the ExclusiveLevelAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_AckedState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the ExclusiveLevelAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ActiveState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_SuppressedState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ExclusiveLevelAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_SilenceState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_LatchedState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_LimitState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_LimitState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_LimitState_CurrentState); + + /// + /// The identifier for the ExclusiveLevelAlarmType_LimitState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_LimitState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_LimitState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveLevelAlarmType_LimitState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveLevelAlarmType_LimitState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveLevelAlarmType_LimitState_LastTransition_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_EnabledState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_AckedState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ActiveState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_SuppressedState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_SilenceState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_LatchedState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_HighHighState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_HighHighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_HighHighState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_HighState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_HighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_HighState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LowState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_LowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_LowState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_LowLowState_Id Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_LowLowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_LowLowState_Id); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_SetpointNode Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_SetpointNode = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_SetpointNode); + + /// + /// The identifier for the NonExclusiveDeviationAlarmType_BaseSetpointNode Variable. + /// + public static readonly NodeId NonExclusiveDeviationAlarmType_BaseSetpointNode = new NodeId(Opc.Ua.Variables.NonExclusiveDeviationAlarmType_BaseSetpointNode); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_EnabledState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_AckedState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ActiveState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_SuppressedState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_SilenceState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_LatchedState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_HighHighState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_HighHighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_HighHighState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_HighState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_HighState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_HighState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LowState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_LowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_LowState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_LowLowState_Id Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_LowLowState_Id = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_LowLowState_Id); + + /// + /// The identifier for the NonExclusiveRateOfChangeAlarmType_EngineeringUnits Variable. + /// + public static readonly NodeId NonExclusiveRateOfChangeAlarmType_EngineeringUnits = new NodeId(Opc.Ua.Variables.NonExclusiveRateOfChangeAlarmType_EngineeringUnits); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_EnabledState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_AckedState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ActiveState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_SuppressedState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_SilenceState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_LatchedState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LimitState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_LimitState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_LimitState_CurrentState); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LimitState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_LimitState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_LimitState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_LimitState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_LimitState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_LimitState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_SetpointNode Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_SetpointNode = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_SetpointNode); + + /// + /// The identifier for the ExclusiveDeviationAlarmType_BaseSetpointNode Variable. + /// + public static readonly NodeId ExclusiveDeviationAlarmType_BaseSetpointNode = new NodeId(Opc.Ua.Variables.ExclusiveDeviationAlarmType_BaseSetpointNode); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_EnabledState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_AckedState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ActiveState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_SuppressedState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_SilenceState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_LatchedState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LimitState_CurrentState Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_LimitState_CurrentState = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_LimitState_CurrentState); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id); + + /// + /// The identifier for the ExclusiveRateOfChangeAlarmType_EngineeringUnits Variable. + /// + public static readonly NodeId ExclusiveRateOfChangeAlarmType_EngineeringUnits = new NodeId(Opc.Ua.Variables.ExclusiveRateOfChangeAlarmType_EngineeringUnits); + + /// + /// The identifier for the DiscreteAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_EnabledState_Id); + + /// + /// The identifier for the DiscreteAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId DiscreteAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the DiscreteAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId DiscreteAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the DiscreteAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId DiscreteAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the DiscreteAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId DiscreteAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the DiscreteAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId DiscreteAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the DiscreteAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId DiscreteAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the DiscreteAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_AckedState_Id); + + /// + /// The identifier for the DiscreteAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the DiscreteAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId DiscreteAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the DiscreteAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId DiscreteAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the DiscreteAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ActiveState_Id); + + /// + /// The identifier for the DiscreteAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_SuppressedState_Id); + + /// + /// The identifier for the DiscreteAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the DiscreteAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_SilenceState_Id); + + /// + /// The identifier for the DiscreteAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId DiscreteAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.DiscreteAlarmType_LatchedState_Id); + + /// + /// The identifier for the OffNormalAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_EnabledState_Id); + + /// + /// The identifier for the OffNormalAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId OffNormalAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the OffNormalAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId OffNormalAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the OffNormalAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId OffNormalAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the OffNormalAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId OffNormalAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the OffNormalAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId OffNormalAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the OffNormalAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId OffNormalAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the OffNormalAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_AckedState_Id); + + /// + /// The identifier for the OffNormalAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the OffNormalAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId OffNormalAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the OffNormalAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId OffNormalAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the OffNormalAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ActiveState_Id); + + /// + /// The identifier for the OffNormalAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_SuppressedState_Id); + + /// + /// The identifier for the OffNormalAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the OffNormalAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_SilenceState_Id); + + /// + /// The identifier for the OffNormalAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId OffNormalAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_LatchedState_Id); + + /// + /// The identifier for the OffNormalAlarmType_NormalState Variable. + /// + public static readonly NodeId OffNormalAlarmType_NormalState = new NodeId(Opc.Ua.Variables.OffNormalAlarmType_NormalState); + + /// + /// The identifier for the SystemOffNormalAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_EnabledState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the SystemOffNormalAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the SystemOffNormalAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the SystemOffNormalAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the SystemOffNormalAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the SystemOffNormalAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the SystemOffNormalAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_AckedState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the SystemOffNormalAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the SystemOffNormalAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ActiveState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_SuppressedState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the SystemOffNormalAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_SilenceState_Id); + + /// + /// The identifier for the SystemOffNormalAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId SystemOffNormalAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.SystemOffNormalAlarmType_LatchedState_Id); + + /// + /// The identifier for the TripAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId TripAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_EnabledState_Id); + + /// + /// The identifier for the TripAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId TripAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.TripAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the TripAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId TripAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.TripAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the TripAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId TripAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.TripAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the TripAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId TripAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.TripAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the TripAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId TripAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.TripAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the TripAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId TripAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.TripAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the TripAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId TripAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_AckedState_Id); + + /// + /// The identifier for the TripAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId TripAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the TripAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId TripAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.TripAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the TripAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId TripAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.TripAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the TripAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId TripAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_ActiveState_Id); + + /// + /// The identifier for the TripAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId TripAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_SuppressedState_Id); + + /// + /// The identifier for the TripAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId TripAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the TripAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId TripAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.TripAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the TripAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId TripAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the TripAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId TripAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the TripAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId TripAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.TripAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the TripAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId TripAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.TripAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the TripAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId TripAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_SilenceState_Id); + + /// + /// The identifier for the TripAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId TripAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.TripAlarmType_LatchedState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_EnabledState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_AckedState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ActiveState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_SuppressedState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_SilenceState_Id); + + /// + /// The identifier for the InstrumentDiagnosticAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId InstrumentDiagnosticAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.InstrumentDiagnosticAlarmType_LatchedState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_EnabledState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the SystemDiagnosticAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the SystemDiagnosticAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the SystemDiagnosticAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_AckedState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the SystemDiagnosticAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ActiveState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_SuppressedState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the SystemDiagnosticAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_SilenceState_Id); + + /// + /// The identifier for the SystemDiagnosticAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId SystemDiagnosticAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.SystemDiagnosticAlarmType_LatchedState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_EnabledState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateExpirationAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateExpirationAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateExpirationAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the CertificateExpirationAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the CertificateExpirationAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the CertificateExpirationAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_AckedState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateExpirationAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the CertificateExpirationAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ActiveState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_SuppressedState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateExpirationAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_SilenceState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_LatchedState_Id); + + /// + /// The identifier for the CertificateExpirationAlarmType_ExpirationDate Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ExpirationDate = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ExpirationDate); + + /// + /// The identifier for the CertificateExpirationAlarmType_ExpirationLimit Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_ExpirationLimit = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_ExpirationLimit); + + /// + /// The identifier for the CertificateExpirationAlarmType_CertificateType Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_CertificateType = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_CertificateType); + + /// + /// The identifier for the CertificateExpirationAlarmType_Certificate Variable. + /// + public static readonly NodeId CertificateExpirationAlarmType_Certificate = new NodeId(Opc.Ua.Variables.CertificateExpirationAlarmType_Certificate); + + /// + /// The identifier for the DiscrepancyAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_EnabledState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the DiscrepancyAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the DiscrepancyAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the DiscrepancyAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the DiscrepancyAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the DiscrepancyAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the DiscrepancyAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_AckedState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the DiscrepancyAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the DiscrepancyAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ActiveState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_SuppressedState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the DiscrepancyAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_SilenceState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_LatchedState_Id); + + /// + /// The identifier for the DiscrepancyAlarmType_TargetValueNode Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_TargetValueNode = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_TargetValueNode); + + /// + /// The identifier for the DiscrepancyAlarmType_ExpectedTime Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_ExpectedTime = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_ExpectedTime); + + /// + /// The identifier for the DiscrepancyAlarmType_Tolerance Variable. + /// + public static readonly NodeId DiscrepancyAlarmType_Tolerance = new NodeId(Opc.Ua.Variables.DiscrepancyAlarmType_Tolerance); + + /// + /// The identifier for the AuditConditionCommentEventType_ConditionEventId Variable. + /// + public static readonly NodeId AuditConditionCommentEventType_ConditionEventId = new NodeId(Opc.Ua.Variables.AuditConditionCommentEventType_ConditionEventId); + + /// + /// The identifier for the AuditConditionCommentEventType_Comment Variable. + /// + public static readonly NodeId AuditConditionCommentEventType_Comment = new NodeId(Opc.Ua.Variables.AuditConditionCommentEventType_Comment); + + /// + /// The identifier for the AuditConditionRespondEventType_SelectedResponse Variable. + /// + public static readonly NodeId AuditConditionRespondEventType_SelectedResponse = new NodeId(Opc.Ua.Variables.AuditConditionRespondEventType_SelectedResponse); + + /// + /// The identifier for the AuditConditionAcknowledgeEventType_ConditionEventId Variable. + /// + public static readonly NodeId AuditConditionAcknowledgeEventType_ConditionEventId = new NodeId(Opc.Ua.Variables.AuditConditionAcknowledgeEventType_ConditionEventId); + + /// + /// The identifier for the AuditConditionAcknowledgeEventType_Comment Variable. + /// + public static readonly NodeId AuditConditionAcknowledgeEventType_Comment = new NodeId(Opc.Ua.Variables.AuditConditionAcknowledgeEventType_Comment); + + /// + /// The identifier for the AuditConditionConfirmEventType_ConditionEventId Variable. + /// + public static readonly NodeId AuditConditionConfirmEventType_ConditionEventId = new NodeId(Opc.Ua.Variables.AuditConditionConfirmEventType_ConditionEventId); + + /// + /// The identifier for the AuditConditionConfirmEventType_Comment Variable. + /// + public static readonly NodeId AuditConditionConfirmEventType_Comment = new NodeId(Opc.Ua.Variables.AuditConditionConfirmEventType_Comment); + + /// + /// The identifier for the AuditConditionShelvingEventType_ShelvingTime Variable. + /// + public static readonly NodeId AuditConditionShelvingEventType_ShelvingTime = new NodeId(Opc.Ua.Variables.AuditConditionShelvingEventType_ShelvingTime); + + /// + /// The identifier for the AlarmMetricsType_AlarmCount Variable. + /// + public static readonly NodeId AlarmMetricsType_AlarmCount = new NodeId(Opc.Ua.Variables.AlarmMetricsType_AlarmCount); + + /// + /// The identifier for the AlarmMetricsType_StartTime Variable. + /// + public static readonly NodeId AlarmMetricsType_StartTime = new NodeId(Opc.Ua.Variables.AlarmMetricsType_StartTime); + + /// + /// The identifier for the AlarmMetricsType_MaximumActiveState Variable. + /// + public static readonly NodeId AlarmMetricsType_MaximumActiveState = new NodeId(Opc.Ua.Variables.AlarmMetricsType_MaximumActiveState); + + /// + /// The identifier for the AlarmMetricsType_MaximumUnAck Variable. + /// + public static readonly NodeId AlarmMetricsType_MaximumUnAck = new NodeId(Opc.Ua.Variables.AlarmMetricsType_MaximumUnAck); + + /// + /// The identifier for the AlarmMetricsType_CurrentAlarmRate Variable. + /// + public static readonly NodeId AlarmMetricsType_CurrentAlarmRate = new NodeId(Opc.Ua.Variables.AlarmMetricsType_CurrentAlarmRate); + + /// + /// The identifier for the AlarmMetricsType_CurrentAlarmRate_Rate Variable. + /// + public static readonly NodeId AlarmMetricsType_CurrentAlarmRate_Rate = new NodeId(Opc.Ua.Variables.AlarmMetricsType_CurrentAlarmRate_Rate); + + /// + /// The identifier for the AlarmMetricsType_MaximumAlarmRate Variable. + /// + public static readonly NodeId AlarmMetricsType_MaximumAlarmRate = new NodeId(Opc.Ua.Variables.AlarmMetricsType_MaximumAlarmRate); + + /// + /// The identifier for the AlarmMetricsType_MaximumAlarmRate_Rate Variable. + /// + public static readonly NodeId AlarmMetricsType_MaximumAlarmRate_Rate = new NodeId(Opc.Ua.Variables.AlarmMetricsType_MaximumAlarmRate_Rate); + + /// + /// The identifier for the AlarmMetricsType_MaximumReAlarmCount Variable. + /// + public static readonly NodeId AlarmMetricsType_MaximumReAlarmCount = new NodeId(Opc.Ua.Variables.AlarmMetricsType_MaximumReAlarmCount); + + /// + /// The identifier for the AlarmMetricsType_AverageAlarmRate Variable. + /// + public static readonly NodeId AlarmMetricsType_AverageAlarmRate = new NodeId(Opc.Ua.Variables.AlarmMetricsType_AverageAlarmRate); + + /// + /// The identifier for the AlarmMetricsType_AverageAlarmRate_Rate Variable. + /// + public static readonly NodeId AlarmMetricsType_AverageAlarmRate_Rate = new NodeId(Opc.Ua.Variables.AlarmMetricsType_AverageAlarmRate_Rate); + + /// + /// The identifier for the AlarmRateVariableType_Rate Variable. + /// + public static readonly NodeId AlarmRateVariableType_Rate = new NodeId(Opc.Ua.Variables.AlarmRateVariableType_Rate); + + /// + /// The identifier for the ProgramStateMachineType_CurrentState Variable. + /// + public static readonly NodeId ProgramStateMachineType_CurrentState = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_CurrentState); + + /// + /// The identifier for the ProgramStateMachineType_CurrentState_Id Variable. + /// + public static readonly NodeId ProgramStateMachineType_CurrentState_Id = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_CurrentState_Id); + + /// + /// The identifier for the ProgramStateMachineType_CurrentState_Number Variable. + /// + public static readonly NodeId ProgramStateMachineType_CurrentState_Number = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_CurrentState_Number); + + /// + /// The identifier for the ProgramStateMachineType_LastTransition Variable. + /// + public static readonly NodeId ProgramStateMachineType_LastTransition = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_LastTransition); + + /// + /// The identifier for the ProgramStateMachineType_LastTransition_Id Variable. + /// + public static readonly NodeId ProgramStateMachineType_LastTransition_Id = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_LastTransition_Id); + + /// + /// The identifier for the ProgramStateMachineType_LastTransition_Number Variable. + /// + public static readonly NodeId ProgramStateMachineType_LastTransition_Number = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_LastTransition_Number); + + /// + /// The identifier for the ProgramStateMachineType_LastTransition_TransitionTime Variable. + /// + public static readonly NodeId ProgramStateMachineType_LastTransition_TransitionTime = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_LastTransition_TransitionTime); + + /// + /// The identifier for the ProgramStateMachineType_Creatable Variable. + /// + public static readonly NodeId ProgramStateMachineType_Creatable = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_Creatable); + + /// + /// The identifier for the ProgramStateMachineType_Deletable Variable. + /// + public static readonly NodeId ProgramStateMachineType_Deletable = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_Deletable); + + /// + /// The identifier for the ProgramStateMachineType_AutoDelete Variable. + /// + public static readonly NodeId ProgramStateMachineType_AutoDelete = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_AutoDelete); + + /// + /// The identifier for the ProgramStateMachineType_RecycleCount Variable. + /// + public static readonly NodeId ProgramStateMachineType_RecycleCount = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_RecycleCount); + + /// + /// The identifier for the ProgramStateMachineType_InstanceCount Variable. + /// + public static readonly NodeId ProgramStateMachineType_InstanceCount = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_InstanceCount); + + /// + /// The identifier for the ProgramStateMachineType_MaxInstanceCount Variable. + /// + public static readonly NodeId ProgramStateMachineType_MaxInstanceCount = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_MaxInstanceCount); + + /// + /// The identifier for the ProgramStateMachineType_MaxRecycleCount Variable. + /// + public static readonly NodeId ProgramStateMachineType_MaxRecycleCount = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_MaxRecycleCount); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_CreateSessionId Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_CreateSessionId = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_CreateSessionId); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_CreateClientName Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_CreateClientName = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_CreateClientName); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodCall Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodCall = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodCall); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime); + + /// + /// The identifier for the ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus Variable. + /// + public static readonly NodeId ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus); + + /// + /// The identifier for the ProgramStateMachineType_Halted_StateNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_Halted_StateNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_Halted_StateNumber); + + /// + /// The identifier for the ProgramStateMachineType_Ready_StateNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_Ready_StateNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_Ready_StateNumber); + + /// + /// The identifier for the ProgramStateMachineType_Running_StateNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_Running_StateNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_Running_StateNumber); + + /// + /// The identifier for the ProgramStateMachineType_Suspended_StateNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_Suspended_StateNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_Suspended_StateNumber); + + /// + /// The identifier for the ProgramStateMachineType_HaltedToReady_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_HaltedToReady_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_HaltedToReady_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_ReadyToRunning_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_ReadyToRunning_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ReadyToRunning_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_RunningToHalted_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_RunningToHalted_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_RunningToHalted_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_RunningToReady_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_RunningToReady_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_RunningToReady_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_RunningToSuspended_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_RunningToSuspended_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_RunningToSuspended_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_SuspendedToRunning_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_SuspendedToRunning_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_SuspendedToRunning_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_SuspendedToHalted_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_SuspendedToHalted_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_SuspendedToHalted_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_SuspendedToReady_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_SuspendedToReady_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_SuspendedToReady_TransitionNumber); + + /// + /// The identifier for the ProgramStateMachineType_ReadyToHalted_TransitionNumber Variable. + /// + public static readonly NodeId ProgramStateMachineType_ReadyToHalted_TransitionNumber = new NodeId(Opc.Ua.Variables.ProgramStateMachineType_ReadyToHalted_TransitionNumber); + + /// + /// The identifier for the ProgramTransitionEventType_Transition_Id Variable. + /// + public static readonly NodeId ProgramTransitionEventType_Transition_Id = new NodeId(Opc.Ua.Variables.ProgramTransitionEventType_Transition_Id); + + /// + /// The identifier for the ProgramTransitionEventType_FromState_Id Variable. + /// + public static readonly NodeId ProgramTransitionEventType_FromState_Id = new NodeId(Opc.Ua.Variables.ProgramTransitionEventType_FromState_Id); + + /// + /// The identifier for the ProgramTransitionEventType_ToState_Id Variable. + /// + public static readonly NodeId ProgramTransitionEventType_ToState_Id = new NodeId(Opc.Ua.Variables.ProgramTransitionEventType_ToState_Id); + + /// + /// The identifier for the ProgramTransitionEventType_IntermediateResult Variable. + /// + public static readonly NodeId ProgramTransitionEventType_IntermediateResult = new NodeId(Opc.Ua.Variables.ProgramTransitionEventType_IntermediateResult); + + /// + /// The identifier for the AuditProgramTransitionEventType_TransitionNumber Variable. + /// + public static readonly NodeId AuditProgramTransitionEventType_TransitionNumber = new NodeId(Opc.Ua.Variables.AuditProgramTransitionEventType_TransitionNumber); + + /// + /// The identifier for the ProgramTransitionAuditEventType_Transition Variable. + /// + public static readonly NodeId ProgramTransitionAuditEventType_Transition = new NodeId(Opc.Ua.Variables.ProgramTransitionAuditEventType_Transition); + + /// + /// The identifier for the ProgramTransitionAuditEventType_Transition_Id Variable. + /// + public static readonly NodeId ProgramTransitionAuditEventType_Transition_Id = new NodeId(Opc.Ua.Variables.ProgramTransitionAuditEventType_Transition_Id); + + /// + /// The identifier for the ProgramDiagnosticType_CreateSessionId Variable. + /// + public static readonly NodeId ProgramDiagnosticType_CreateSessionId = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_CreateSessionId); + + /// + /// The identifier for the ProgramDiagnosticType_CreateClientName Variable. + /// + public static readonly NodeId ProgramDiagnosticType_CreateClientName = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_CreateClientName); + + /// + /// The identifier for the ProgramDiagnosticType_InvocationCreationTime Variable. + /// + public static readonly NodeId ProgramDiagnosticType_InvocationCreationTime = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_InvocationCreationTime); + + /// + /// The identifier for the ProgramDiagnosticType_LastTransitionTime Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastTransitionTime = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastTransitionTime); + + /// + /// The identifier for the ProgramDiagnosticType_LastMethodCall Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastMethodCall = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastMethodCall); + + /// + /// The identifier for the ProgramDiagnosticType_LastMethodSessionId Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastMethodSessionId = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastMethodSessionId); + + /// + /// The identifier for the ProgramDiagnosticType_LastMethodInputArguments Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastMethodInputArguments = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastMethodInputArguments); + + /// + /// The identifier for the ProgramDiagnosticType_LastMethodOutputArguments Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastMethodOutputArguments = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastMethodOutputArguments); + + /// + /// The identifier for the ProgramDiagnosticType_LastMethodCallTime Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastMethodCallTime = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastMethodCallTime); + + /// + /// The identifier for the ProgramDiagnosticType_LastMethodReturnStatus Variable. + /// + public static readonly NodeId ProgramDiagnosticType_LastMethodReturnStatus = new NodeId(Opc.Ua.Variables.ProgramDiagnosticType_LastMethodReturnStatus); + + /// + /// The identifier for the ProgramDiagnostic2Type_CreateSessionId Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_CreateSessionId = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_CreateSessionId); + + /// + /// The identifier for the ProgramDiagnostic2Type_CreateClientName Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_CreateClientName = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_CreateClientName); + + /// + /// The identifier for the ProgramDiagnostic2Type_InvocationCreationTime Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_InvocationCreationTime = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_InvocationCreationTime); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastTransitionTime Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastTransitionTime = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastTransitionTime); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodCall Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodCall = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodCall); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodSessionId Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodSessionId = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodSessionId); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodInputArguments Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodInputArguments = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodInputArguments); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodOutputArguments Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodOutputArguments = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodOutputArguments); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodInputValues Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodInputValues = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodInputValues); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodOutputValues Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodOutputValues = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodOutputValues); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodCallTime Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodCallTime = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodCallTime); + + /// + /// The identifier for the ProgramDiagnostic2Type_LastMethodReturnStatus Variable. + /// + public static readonly NodeId ProgramDiagnostic2Type_LastMethodReturnStatus = new NodeId(Opc.Ua.Variables.ProgramDiagnostic2Type_LastMethodReturnStatus); + + /// + /// The identifier for the Annotations Variable. + /// + public static readonly NodeId Annotations = new NodeId(Opc.Ua.Variables.Annotations); + + /// + /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad); + + /// + /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad); + + /// + /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood); + + /// + /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation); + + /// + /// The identifier for the HistoricalDataConfigurationType_Stepped Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_Stepped = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_Stepped); + + /// + /// The identifier for the HistoricalDataConfigurationType_Definition Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_Definition = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_Definition); + + /// + /// The identifier for the HistoricalDataConfigurationType_MaxTimeInterval Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_MaxTimeInterval = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_MaxTimeInterval); + + /// + /// The identifier for the HistoricalDataConfigurationType_MinTimeInterval Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_MinTimeInterval = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_MinTimeInterval); + + /// + /// The identifier for the HistoricalDataConfigurationType_ExceptionDeviation Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_ExceptionDeviation = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_ExceptionDeviation); + + /// + /// The identifier for the HistoricalDataConfigurationType_ExceptionDeviationFormat Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_ExceptionDeviationFormat = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_ExceptionDeviationFormat); + + /// + /// The identifier for the HistoricalDataConfigurationType_StartOfArchive Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_StartOfArchive = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_StartOfArchive); + + /// + /// The identifier for the HistoricalDataConfigurationType_StartOfOnlineArchive Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_StartOfOnlineArchive = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_StartOfOnlineArchive); + + /// + /// The identifier for the HistoricalDataConfigurationType_ServerTimestampSupported Variable. + /// + public static readonly NodeId HistoricalDataConfigurationType_ServerTimestampSupported = new NodeId(Opc.Ua.Variables.HistoricalDataConfigurationType_ServerTimestampSupported); + + /// + /// The identifier for the HAConfiguration_AggregateConfiguration_TreatUncertainAsBad Variable. + /// + public static readonly NodeId HAConfiguration_AggregateConfiguration_TreatUncertainAsBad = new NodeId(Opc.Ua.Variables.HAConfiguration_AggregateConfiguration_TreatUncertainAsBad); + + /// + /// The identifier for the HAConfiguration_AggregateConfiguration_PercentDataBad Variable. + /// + public static readonly NodeId HAConfiguration_AggregateConfiguration_PercentDataBad = new NodeId(Opc.Ua.Variables.HAConfiguration_AggregateConfiguration_PercentDataBad); + + /// + /// The identifier for the HAConfiguration_AggregateConfiguration_PercentDataGood Variable. + /// + public static readonly NodeId HAConfiguration_AggregateConfiguration_PercentDataGood = new NodeId(Opc.Ua.Variables.HAConfiguration_AggregateConfiguration_PercentDataGood); + + /// + /// The identifier for the HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation Variable. + /// + public static readonly NodeId HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation = new NodeId(Opc.Ua.Variables.HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation); + + /// + /// The identifier for the HAConfiguration_Stepped Variable. + /// + public static readonly NodeId HAConfiguration_Stepped = new NodeId(Opc.Ua.Variables.HAConfiguration_Stepped); + + /// + /// The identifier for the HistoricalEventFilter Variable. + /// + public static readonly NodeId HistoricalEventFilter = new NodeId(Opc.Ua.Variables.HistoricalEventFilter); + + /// + /// The identifier for the HistoryServerCapabilitiesType_AccessHistoryDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_AccessHistoryDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_AccessHistoryDataCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_AccessHistoryEventsCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_AccessHistoryEventsCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_AccessHistoryEventsCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_MaxReturnDataValues Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_MaxReturnDataValues = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_MaxReturnDataValues); + + /// + /// The identifier for the HistoryServerCapabilitiesType_MaxReturnEventValues Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_MaxReturnEventValues = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_MaxReturnEventValues); + + /// + /// The identifier for the HistoryServerCapabilitiesType_InsertDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_InsertDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_InsertDataCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_ReplaceDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_ReplaceDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_ReplaceDataCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_UpdateDataCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_UpdateDataCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_UpdateDataCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_DeleteRawCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_DeleteRawCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_DeleteRawCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_DeleteAtTimeCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_DeleteAtTimeCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_DeleteAtTimeCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_InsertEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_InsertEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_InsertEventCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_ReplaceEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_ReplaceEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_ReplaceEventCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_UpdateEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_UpdateEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_UpdateEventCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_DeleteEventCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_DeleteEventCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_DeleteEventCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_InsertAnnotationCapability Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_InsertAnnotationCapability = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_InsertAnnotationCapability); + + /// + /// The identifier for the HistoryServerCapabilitiesType_ServerTimestampSupported Variable. + /// + public static readonly NodeId HistoryServerCapabilitiesType_ServerTimestampSupported = new NodeId(Opc.Ua.Variables.HistoryServerCapabilitiesType_ServerTimestampSupported); + + /// + /// The identifier for the AuditHistoryEventUpdateEventType_UpdatedNode Variable. + /// + public static readonly NodeId AuditHistoryEventUpdateEventType_UpdatedNode = new NodeId(Opc.Ua.Variables.AuditHistoryEventUpdateEventType_UpdatedNode); + + /// + /// The identifier for the AuditHistoryEventUpdateEventType_PerformInsertReplace Variable. + /// + public static readonly NodeId AuditHistoryEventUpdateEventType_PerformInsertReplace = new NodeId(Opc.Ua.Variables.AuditHistoryEventUpdateEventType_PerformInsertReplace); + + /// + /// The identifier for the AuditHistoryEventUpdateEventType_Filter Variable. + /// + public static readonly NodeId AuditHistoryEventUpdateEventType_Filter = new NodeId(Opc.Ua.Variables.AuditHistoryEventUpdateEventType_Filter); + + /// + /// The identifier for the AuditHistoryEventUpdateEventType_NewValues Variable. + /// + public static readonly NodeId AuditHistoryEventUpdateEventType_NewValues = new NodeId(Opc.Ua.Variables.AuditHistoryEventUpdateEventType_NewValues); + + /// + /// The identifier for the AuditHistoryEventUpdateEventType_OldValues Variable. + /// + public static readonly NodeId AuditHistoryEventUpdateEventType_OldValues = new NodeId(Opc.Ua.Variables.AuditHistoryEventUpdateEventType_OldValues); + + /// + /// The identifier for the AuditHistoryValueUpdateEventType_UpdatedNode Variable. + /// + public static readonly NodeId AuditHistoryValueUpdateEventType_UpdatedNode = new NodeId(Opc.Ua.Variables.AuditHistoryValueUpdateEventType_UpdatedNode); + + /// + /// The identifier for the AuditHistoryValueUpdateEventType_PerformInsertReplace Variable. + /// + public static readonly NodeId AuditHistoryValueUpdateEventType_PerformInsertReplace = new NodeId(Opc.Ua.Variables.AuditHistoryValueUpdateEventType_PerformInsertReplace); + + /// + /// The identifier for the AuditHistoryValueUpdateEventType_NewValues Variable. + /// + public static readonly NodeId AuditHistoryValueUpdateEventType_NewValues = new NodeId(Opc.Ua.Variables.AuditHistoryValueUpdateEventType_NewValues); + + /// + /// The identifier for the AuditHistoryValueUpdateEventType_OldValues Variable. + /// + public static readonly NodeId AuditHistoryValueUpdateEventType_OldValues = new NodeId(Opc.Ua.Variables.AuditHistoryValueUpdateEventType_OldValues); + + /// + /// The identifier for the AuditHistoryAnnotationUpdateEventType_PerformInsertReplace Variable. + /// + public static readonly NodeId AuditHistoryAnnotationUpdateEventType_PerformInsertReplace = new NodeId(Opc.Ua.Variables.AuditHistoryAnnotationUpdateEventType_PerformInsertReplace); + + /// + /// The identifier for the AuditHistoryAnnotationUpdateEventType_NewValues Variable. + /// + public static readonly NodeId AuditHistoryAnnotationUpdateEventType_NewValues = new NodeId(Opc.Ua.Variables.AuditHistoryAnnotationUpdateEventType_NewValues); + + /// + /// The identifier for the AuditHistoryAnnotationUpdateEventType_OldValues Variable. + /// + public static readonly NodeId AuditHistoryAnnotationUpdateEventType_OldValues = new NodeId(Opc.Ua.Variables.AuditHistoryAnnotationUpdateEventType_OldValues); + + /// + /// The identifier for the AuditHistoryDeleteEventType_UpdatedNode Variable. + /// + public static readonly NodeId AuditHistoryDeleteEventType_UpdatedNode = new NodeId(Opc.Ua.Variables.AuditHistoryDeleteEventType_UpdatedNode); + + /// + /// The identifier for the AuditHistoryRawModifyDeleteEventType_IsDeleteModified Variable. + /// + public static readonly NodeId AuditHistoryRawModifyDeleteEventType_IsDeleteModified = new NodeId(Opc.Ua.Variables.AuditHistoryRawModifyDeleteEventType_IsDeleteModified); + + /// + /// The identifier for the AuditHistoryRawModifyDeleteEventType_StartTime Variable. + /// + public static readonly NodeId AuditHistoryRawModifyDeleteEventType_StartTime = new NodeId(Opc.Ua.Variables.AuditHistoryRawModifyDeleteEventType_StartTime); + + /// + /// The identifier for the AuditHistoryRawModifyDeleteEventType_EndTime Variable. + /// + public static readonly NodeId AuditHistoryRawModifyDeleteEventType_EndTime = new NodeId(Opc.Ua.Variables.AuditHistoryRawModifyDeleteEventType_EndTime); + + /// + /// The identifier for the AuditHistoryRawModifyDeleteEventType_OldValues Variable. + /// + public static readonly NodeId AuditHistoryRawModifyDeleteEventType_OldValues = new NodeId(Opc.Ua.Variables.AuditHistoryRawModifyDeleteEventType_OldValues); + + /// + /// The identifier for the AuditHistoryAtTimeDeleteEventType_ReqTimes Variable. + /// + public static readonly NodeId AuditHistoryAtTimeDeleteEventType_ReqTimes = new NodeId(Opc.Ua.Variables.AuditHistoryAtTimeDeleteEventType_ReqTimes); + + /// + /// The identifier for the AuditHistoryAtTimeDeleteEventType_OldValues Variable. + /// + public static readonly NodeId AuditHistoryAtTimeDeleteEventType_OldValues = new NodeId(Opc.Ua.Variables.AuditHistoryAtTimeDeleteEventType_OldValues); + + /// + /// The identifier for the AuditHistoryEventDeleteEventType_EventIds Variable. + /// + public static readonly NodeId AuditHistoryEventDeleteEventType_EventIds = new NodeId(Opc.Ua.Variables.AuditHistoryEventDeleteEventType_EventIds); + + /// + /// The identifier for the AuditHistoryEventDeleteEventType_OldValues Variable. + /// + public static readonly NodeId AuditHistoryEventDeleteEventType_OldValues = new NodeId(Opc.Ua.Variables.AuditHistoryEventDeleteEventType_OldValues); + + /// + /// The identifier for the TrustListType_Open_InputArguments Variable. + /// + public static readonly NodeId TrustListType_Open_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_Open_InputArguments); + + /// + /// The identifier for the TrustListType_Open_OutputArguments Variable. + /// + public static readonly NodeId TrustListType_Open_OutputArguments = new NodeId(Opc.Ua.Variables.TrustListType_Open_OutputArguments); + + /// + /// The identifier for the TrustListType_Close_InputArguments Variable. + /// + public static readonly NodeId TrustListType_Close_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_Close_InputArguments); + + /// + /// The identifier for the TrustListType_Read_InputArguments Variable. + /// + public static readonly NodeId TrustListType_Read_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_Read_InputArguments); + + /// + /// The identifier for the TrustListType_Read_OutputArguments Variable. + /// + public static readonly NodeId TrustListType_Read_OutputArguments = new NodeId(Opc.Ua.Variables.TrustListType_Read_OutputArguments); + + /// + /// The identifier for the TrustListType_Write_InputArguments Variable. + /// + public static readonly NodeId TrustListType_Write_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_Write_InputArguments); + + /// + /// The identifier for the TrustListType_GetPosition_InputArguments Variable. + /// + public static readonly NodeId TrustListType_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_GetPosition_InputArguments); + + /// + /// The identifier for the TrustListType_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId TrustListType_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.TrustListType_GetPosition_OutputArguments); + + /// + /// The identifier for the TrustListType_SetPosition_InputArguments Variable. + /// + public static readonly NodeId TrustListType_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_SetPosition_InputArguments); + + /// + /// The identifier for the TrustListType_LastUpdateTime Variable. + /// + public static readonly NodeId TrustListType_LastUpdateTime = new NodeId(Opc.Ua.Variables.TrustListType_LastUpdateTime); + + /// + /// The identifier for the TrustListType_UpdateFrequency Variable. + /// + public static readonly NodeId TrustListType_UpdateFrequency = new NodeId(Opc.Ua.Variables.TrustListType_UpdateFrequency); + + /// + /// The identifier for the TrustListType_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId TrustListType_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_OpenWithMasks_InputArguments); + + /// + /// The identifier for the TrustListType_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId TrustListType_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.TrustListType_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the TrustListType_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId TrustListType_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the TrustListType_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId TrustListType_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.TrustListType_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the TrustListType_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId TrustListType_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_AddCertificate_InputArguments); + + /// + /// The identifier for the TrustListType_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId TrustListType_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.TrustListType_RemoveCertificate_InputArguments); + + /// + /// The identifier for the TrustListMasks_EnumValues Variable. + /// + public static readonly NodeId TrustListMasks_EnumValues = new NodeId(Opc.Ua.Variables.TrustListMasks_EnumValues); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_EnabledState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_EnabledState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_EnabledState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_Quality_SourceTimestamp); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_Comment_SourceTimestamp); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_AddComment_InputArguments Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_AddComment_InputArguments); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ConditionRefresh_InputArguments Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ConditionRefresh_InputArguments = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ConditionRefresh_InputArguments); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ConditionRefresh2_InputArguments Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ConditionRefresh2_InputArguments = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ConditionRefresh2_InputArguments); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_AckedState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_AckedState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_AckedState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ConfirmedState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ConfirmedState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_Acknowledge_InputArguments); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_Confirm_InputArguments Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_Confirm_InputArguments); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ActiveState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ActiveState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ActiveState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_SuppressedState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_SuppressedState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_SuppressedState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_OutOfServiceState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_OutOfServiceState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ShelvingState_CurrentState); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ShelvingState_UnshelveTime); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_SilenceState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_SilenceState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_SilenceState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_LatchedState_Id Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_LatchedState_Id = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_LatchedState_Id); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_TrustListId Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_TrustListId = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_TrustListId); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_LastUpdateTime Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_LastUpdateTime = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_LastUpdateTime); + + /// + /// The identifier for the TrustListOutOfDateAlarmType_UpdateFrequency Variable. + /// + public static readonly NodeId TrustListOutOfDateAlarmType_UpdateFrequency = new NodeId(Opc.Ua.Variables.TrustListOutOfDateAlarmType_UpdateFrequency); + + /// + /// The identifier for the CertificateGroupType_TrustList_Size Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Size = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Size); + + /// + /// The identifier for the CertificateGroupType_TrustList_Writable Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Writable = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Writable); + + /// + /// The identifier for the CertificateGroupType_TrustList_UserWritable Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_UserWritable); + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenCount Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_OpenCount); + + /// + /// The identifier for the CertificateGroupType_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Open_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Open_OutputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Close_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Read_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Read_OutputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_Write_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupType_CertificateTypes Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateTypes = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateTypes); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EventId Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_EventId); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EventType Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_EventType); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_SourceNode); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_SourceName); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Time Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Time); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Message Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Message); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Severity Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Severity); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ConditionName); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_BranchId); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Retain Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Retain); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_EnabledState); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Quality Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Quality); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_LastSeverity); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Comment Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Comment); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ClientUserId); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_AckedState); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ActiveState); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_InputNode); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_NormalState); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_CertificateType); + + /// + /// The identifier for the CertificateGroupType_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId CertificateGroupType_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.CertificateGroupType_CertificateExpired_Certificate); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_EventId); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_EventType); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Time); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Message); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Severity); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Retain); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Quality); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Comment); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupType_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId CertificateGroupType_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.CertificateGroupType_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Time); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Message); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Time); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Message); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Time); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Message); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Time); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Message); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_CertificateType); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateExpired_Certificate); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EventType); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Time); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Message); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Severity); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Retain); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfigurationType_ServerCapabilities Variable. + /// + public static readonly NodeId ServerConfigurationType_ServerCapabilities = new NodeId(Opc.Ua.Variables.ServerConfigurationType_ServerCapabilities); + + /// + /// The identifier for the ServerConfigurationType_SupportedPrivateKeyFormats Variable. + /// + public static readonly NodeId ServerConfigurationType_SupportedPrivateKeyFormats = new NodeId(Opc.Ua.Variables.ServerConfigurationType_SupportedPrivateKeyFormats); + + /// + /// The identifier for the ServerConfigurationType_MaxTrustListSize Variable. + /// + public static readonly NodeId ServerConfigurationType_MaxTrustListSize = new NodeId(Opc.Ua.Variables.ServerConfigurationType_MaxTrustListSize); + + /// + /// The identifier for the ServerConfigurationType_MulticastDnsEnabled Variable. + /// + public static readonly NodeId ServerConfigurationType_MulticastDnsEnabled = new NodeId(Opc.Ua.Variables.ServerConfigurationType_MulticastDnsEnabled); + + /// + /// The identifier for the ServerConfigurationType_UpdateCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_UpdateCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_UpdateCertificate_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_UpdateCertificate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_UpdateCertificate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_UpdateCertificate_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_CreateSigningRequest_InputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CreateSigningRequest_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CreateSigningRequest_InputArguments); + + /// + /// The identifier for the ServerConfigurationType_CreateSigningRequest_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_CreateSigningRequest_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_CreateSigningRequest_OutputArguments); + + /// + /// The identifier for the ServerConfigurationType_GetRejectedList_OutputArguments Variable. + /// + public static readonly NodeId ServerConfigurationType_GetRejectedList_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfigurationType_GetRejectedList_OutputArguments); + + /// + /// The identifier for the CertificateUpdatedAuditEventType_CertificateGroup Variable. + /// + public static readonly NodeId CertificateUpdatedAuditEventType_CertificateGroup = new NodeId(Opc.Ua.Variables.CertificateUpdatedAuditEventType_CertificateGroup); + + /// + /// The identifier for the CertificateUpdatedAuditEventType_CertificateType Variable. + /// + public static readonly NodeId CertificateUpdatedAuditEventType_CertificateType = new NodeId(Opc.Ua.Variables.CertificateUpdatedAuditEventType_CertificateType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime); + + /// + /// The identifier for the ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly NodeId ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = new NodeId(Opc.Ua.Variables.ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency); + + /// + /// The identifier for the ServerConfiguration_ServerCapabilities Variable. + /// + public static readonly NodeId ServerConfiguration_ServerCapabilities = new NodeId(Opc.Ua.Variables.ServerConfiguration_ServerCapabilities); + + /// + /// The identifier for the ServerConfiguration_SupportedPrivateKeyFormats Variable. + /// + public static readonly NodeId ServerConfiguration_SupportedPrivateKeyFormats = new NodeId(Opc.Ua.Variables.ServerConfiguration_SupportedPrivateKeyFormats); + + /// + /// The identifier for the ServerConfiguration_MaxTrustListSize Variable. + /// + public static readonly NodeId ServerConfiguration_MaxTrustListSize = new NodeId(Opc.Ua.Variables.ServerConfiguration_MaxTrustListSize); + + /// + /// The identifier for the ServerConfiguration_MulticastDnsEnabled Variable. + /// + public static readonly NodeId ServerConfiguration_MulticastDnsEnabled = new NodeId(Opc.Ua.Variables.ServerConfiguration_MulticastDnsEnabled); + + /// + /// The identifier for the ServerConfiguration_UpdateCertificate_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_UpdateCertificate_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_UpdateCertificate_InputArguments); + + /// + /// The identifier for the ServerConfiguration_UpdateCertificate_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_UpdateCertificate_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_UpdateCertificate_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_CreateSigningRequest_InputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CreateSigningRequest_InputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CreateSigningRequest_InputArguments); + + /// + /// The identifier for the ServerConfiguration_CreateSigningRequest_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_CreateSigningRequest_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_CreateSigningRequest_OutputArguments); + + /// + /// The identifier for the ServerConfiguration_GetRejectedList_OutputArguments Variable. + /// + public static readonly NodeId ServerConfiguration_GetRejectedList_OutputArguments = new NodeId(Opc.Ua.Variables.ServerConfiguration_GetRejectedList_OutputArguments); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri Variable. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri Variable. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_CreateCredential_InputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_CreateCredential_InputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationFolderType_CreateCredential_InputArguments); + + /// + /// The identifier for the KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments); + + /// + /// The identifier for the KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri Variable. + /// + public static readonly NodeId KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri = new NodeId(Opc.Ua.Variables.KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri); + + /// + /// The identifier for the KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri Variable. + /// + public static readonly NodeId KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri = new NodeId(Opc.Ua.Variables.KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri); + + /// + /// The identifier for the KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments); + + /// + /// The identifier for the KeyCredentialConfiguration_CreateCredential_InputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfiguration_CreateCredential_InputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfiguration_CreateCredential_InputArguments); + + /// + /// The identifier for the KeyCredentialConfiguration_CreateCredential_OutputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfiguration_CreateCredential_OutputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfiguration_CreateCredential_OutputArguments); + + /// + /// The identifier for the KeyCredentialConfigurationType_ResourceUri Variable. + /// + public static readonly NodeId KeyCredentialConfigurationType_ResourceUri = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationType_ResourceUri); + + /// + /// The identifier for the KeyCredentialConfigurationType_ProfileUri Variable. + /// + public static readonly NodeId KeyCredentialConfigurationType_ProfileUri = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationType_ProfileUri); + + /// + /// The identifier for the KeyCredentialConfigurationType_EndpointUrls Variable. + /// + public static readonly NodeId KeyCredentialConfigurationType_EndpointUrls = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationType_EndpointUrls); + + /// + /// The identifier for the KeyCredentialConfigurationType_ServiceStatus Variable. + /// + public static readonly NodeId KeyCredentialConfigurationType_ServiceStatus = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationType_ServiceStatus); + + /// + /// The identifier for the KeyCredentialConfigurationType_UpdateCredential_InputArguments Variable. + /// + public static readonly NodeId KeyCredentialConfigurationType_UpdateCredential_InputArguments = new NodeId(Opc.Ua.Variables.KeyCredentialConfigurationType_UpdateCredential_InputArguments); + + /// + /// The identifier for the KeyCredentialAuditEventType_ResourceUri Variable. + /// + public static readonly NodeId KeyCredentialAuditEventType_ResourceUri = new NodeId(Opc.Ua.Variables.KeyCredentialAuditEventType_ResourceUri); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceUri Variable. + /// + public static readonly NodeId AuthorizationServices_ServiceName_Placeholder_ServiceUri = new NodeId(Opc.Ua.Variables.AuthorizationServices_ServiceName_Placeholder_ServiceUri); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceCertificate Variable. + /// + public static readonly NodeId AuthorizationServices_ServiceName_Placeholder_ServiceCertificate = new NodeId(Opc.Ua.Variables.AuthorizationServices_ServiceName_Placeholder_ServiceCertificate); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl Variable. + /// + public static readonly NodeId AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl = new NodeId(Opc.Ua.Variables.AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl); + + /// + /// The identifier for the AuthorizationServiceConfigurationType_ServiceUri Variable. + /// + public static readonly NodeId AuthorizationServiceConfigurationType_ServiceUri = new NodeId(Opc.Ua.Variables.AuthorizationServiceConfigurationType_ServiceUri); + + /// + /// The identifier for the AuthorizationServiceConfigurationType_ServiceCertificate Variable. + /// + public static readonly NodeId AuthorizationServiceConfigurationType_ServiceCertificate = new NodeId(Opc.Ua.Variables.AuthorizationServiceConfigurationType_ServiceCertificate); + + /// + /// The identifier for the AuthorizationServiceConfigurationType_IssuerEndpointUrl Variable. + /// + public static readonly NodeId AuthorizationServiceConfigurationType_IssuerEndpointUrl = new NodeId(Opc.Ua.Variables.AuthorizationServiceConfigurationType_IssuerEndpointUrl); + + /// + /// The identifier for the AggregateConfigurationType_TreatUncertainAsBad Variable. + /// + public static readonly NodeId AggregateConfigurationType_TreatUncertainAsBad = new NodeId(Opc.Ua.Variables.AggregateConfigurationType_TreatUncertainAsBad); + + /// + /// The identifier for the AggregateConfigurationType_PercentDataBad Variable. + /// + public static readonly NodeId AggregateConfigurationType_PercentDataBad = new NodeId(Opc.Ua.Variables.AggregateConfigurationType_PercentDataBad); + + /// + /// The identifier for the AggregateConfigurationType_PercentDataGood Variable. + /// + public static readonly NodeId AggregateConfigurationType_PercentDataGood = new NodeId(Opc.Ua.Variables.AggregateConfigurationType_PercentDataGood); + + /// + /// The identifier for the AggregateConfigurationType_UseSlopedExtrapolation Variable. + /// + public static readonly NodeId AggregateConfigurationType_UseSlopedExtrapolation = new NodeId(Opc.Ua.Variables.AggregateConfigurationType_UseSlopedExtrapolation); + + /// + /// The identifier for the PubSubState_EnumStrings Variable. + /// + public static readonly NodeId PubSubState_EnumStrings = new NodeId(Opc.Ua.Variables.PubSubState_EnumStrings); + + /// + /// The identifier for the DataSetFieldFlags_OptionSetValues Variable. + /// + public static readonly NodeId DataSetFieldFlags_OptionSetValues = new NodeId(Opc.Ua.Variables.DataSetFieldFlags_OptionSetValues); + + /// + /// The identifier for the DataSetFieldContentMask_OptionSetValues Variable. + /// + public static readonly NodeId DataSetFieldContentMask_OptionSetValues = new NodeId(Opc.Ua.Variables.DataSetFieldContentMask_OptionSetValues); + + /// + /// The identifier for the OverrideValueHandling_EnumStrings Variable. + /// + public static readonly NodeId OverrideValueHandling_EnumStrings = new NodeId(Opc.Ua.Variables.OverrideValueHandling_EnumStrings); + + /// + /// The identifier for the DataSetOrderingType_EnumStrings Variable. + /// + public static readonly NodeId DataSetOrderingType_EnumStrings = new NodeId(Opc.Ua.Variables.DataSetOrderingType_EnumStrings); + + /// + /// The identifier for the UadpNetworkMessageContentMask_OptionSetValues Variable. + /// + public static readonly NodeId UadpNetworkMessageContentMask_OptionSetValues = new NodeId(Opc.Ua.Variables.UadpNetworkMessageContentMask_OptionSetValues); + + /// + /// The identifier for the UadpDataSetMessageContentMask_OptionSetValues Variable. + /// + public static readonly NodeId UadpDataSetMessageContentMask_OptionSetValues = new NodeId(Opc.Ua.Variables.UadpDataSetMessageContentMask_OptionSetValues); + + /// + /// The identifier for the JsonNetworkMessageContentMask_OptionSetValues Variable. + /// + public static readonly NodeId JsonNetworkMessageContentMask_OptionSetValues = new NodeId(Opc.Ua.Variables.JsonNetworkMessageContentMask_OptionSetValues); + + /// + /// The identifier for the JsonDataSetMessageContentMask_OptionSetValues Variable. + /// + public static readonly NodeId JsonDataSetMessageContentMask_OptionSetValues = new NodeId(Opc.Ua.Variables.JsonDataSetMessageContentMask_OptionSetValues); + + /// + /// The identifier for the BrokerTransportQualityOfService_EnumStrings Variable. + /// + public static readonly NodeId BrokerTransportQualityOfService_EnumStrings = new NodeId(Opc.Ua.Variables.BrokerTransportQualityOfService_EnumStrings); + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityKeys_InputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_GetSecurityKeys_InputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_GetSecurityKeys_InputArguments); + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityKeys_OutputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_GetSecurityKeys_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_GetSecurityKeys_OutputArguments); + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_GetSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_GetSecurityGroup_InputArguments); + + /// + /// The identifier for the PubSubKeyServiceType_GetSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_GetSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_GetSecurityGroup_OutputArguments); + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments); + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments); + + /// + /// The identifier for the PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount); + + /// + /// The identifier for the SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount Variable. + /// + public static readonly NodeId SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount); + + /// + /// The identifier for the SecurityGroupFolderType_AddSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId SecurityGroupFolderType_AddSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_AddSecurityGroup_InputArguments); + + /// + /// The identifier for the SecurityGroupFolderType_AddSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId SecurityGroupFolderType_AddSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_AddSecurityGroup_OutputArguments); + + /// + /// The identifier for the SecurityGroupFolderType_RemoveSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId SecurityGroupFolderType_RemoveSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.SecurityGroupFolderType_RemoveSecurityGroup_InputArguments); + + /// + /// The identifier for the SecurityGroupType_SecurityGroupId Variable. + /// + public static readonly NodeId SecurityGroupType_SecurityGroupId = new NodeId(Opc.Ua.Variables.SecurityGroupType_SecurityGroupId); + + /// + /// The identifier for the SecurityGroupType_KeyLifetime Variable. + /// + public static readonly NodeId SecurityGroupType_KeyLifetime = new NodeId(Opc.Ua.Variables.SecurityGroupType_KeyLifetime); + + /// + /// The identifier for the SecurityGroupType_SecurityPolicyUri Variable. + /// + public static readonly NodeId SecurityGroupType_SecurityPolicyUri = new NodeId(Opc.Ua.Variables.SecurityGroupType_SecurityPolicyUri); + + /// + /// The identifier for the SecurityGroupType_MaxFutureKeyCount Variable. + /// + public static readonly NodeId SecurityGroupType_MaxFutureKeyCount = new NodeId(Opc.Ua.Variables.SecurityGroupType_MaxFutureKeyCount); + + /// + /// The identifier for the SecurityGroupType_MaxPastKeyCount Variable. + /// + public static readonly NodeId SecurityGroupType_MaxPastKeyCount = new NodeId(Opc.Ua.Variables.SecurityGroupType_MaxPastKeyCount); + + /// + /// The identifier for the PublishSubscribeType_GetSecurityKeys_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_GetSecurityKeys_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_GetSecurityKeys_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_GetSecurityKeys_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_GetSecurityKeys_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_GetSecurityKeys_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_GetSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_GetSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_GetSecurityGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_GetSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_GetSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_GetSecurityGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_PublisherId Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_PublisherId = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_PublisherId); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Status_State); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_SetSecurityKeys_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_SetSecurityKeys_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_SetSecurityKeys_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_AddConnection_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_AddConnection_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_AddConnection_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_AddConnection_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_AddConnection_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_AddConnection_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_RemoveConnection_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_RemoveConnection_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_RemoveConnection_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments); + + /// + /// The identifier for the PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments); + + /// + /// The identifier for the PublishSubscribeType_Status_State Variable. + /// + public static readonly NodeId PublishSubscribeType_Status_State = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Status_State); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalError); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_SubError); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders); + + /// + /// The identifier for the PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribeType_SupportedTransportProfiles Variable. + /// + public static readonly NodeId PublishSubscribeType_SupportedTransportProfiles = new NodeId(Opc.Ua.Variables.PublishSubscribeType_SupportedTransportProfiles); + + /// + /// The identifier for the PublishSubscribe_GetSecurityKeys_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_GetSecurityKeys_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_GetSecurityKeys_InputArguments); + + /// + /// The identifier for the PublishSubscribe_GetSecurityKeys_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_GetSecurityKeys_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_GetSecurityKeys_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_GetSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_GetSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_GetSecurityGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribe_GetSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_GetSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_GetSecurityGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_PublisherId Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_PublisherId = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_PublisherId); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Status_State); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments); + + /// + /// The identifier for the PublishSubscribe_SetSecurityKeys_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_SetSecurityKeys_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_SetSecurityKeys_InputArguments); + + /// + /// The identifier for the PublishSubscribe_AddConnection_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_AddConnection_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_AddConnection_InputArguments); + + /// + /// The identifier for the PublishSubscribe_AddConnection_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_AddConnection_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_AddConnection_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_RemoveConnection_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_RemoveConnection_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_RemoveConnection_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments); + + /// + /// The identifier for the PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments); + + /// + /// The identifier for the PublishSubscribe_Status_State Variable. + /// + public static readonly NodeId PublishSubscribe_Status_State = new NodeId(Opc.Ua.Variables.PublishSubscribe_Status_State); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalError); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_SubError); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders); + + /// + /// The identifier for the PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PublishSubscribe_SupportedTransportProfiles Variable. + /// + public static readonly NodeId PublishSubscribe_SupportedTransportProfiles = new NodeId(Opc.Ua.Variables.PublishSubscribe_SupportedTransportProfiles); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Status_State); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataSetType_ConfigurationVersion Variable. + /// + public static readonly NodeId PublishedDataSetType_ConfigurationVersion = new NodeId(Opc.Ua.Variables.PublishedDataSetType_ConfigurationVersion); + + /// + /// The identifier for the PublishedDataSetType_DataSetMetaData Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetMetaData = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetMetaData); + + /// + /// The identifier for the PublishedDataSetType_DataSetClassId Variable. + /// + public static readonly NodeId PublishedDataSetType_DataSetClassId = new NodeId(Opc.Ua.Variables.PublishedDataSetType_DataSetClassId); + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public static readonly NodeId PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments); + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public static readonly NodeId PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments = new NodeId(Opc.Ua.Variables.PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments); + + /// + /// The identifier for the PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public static readonly NodeId PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments); + + /// + /// The identifier for the ExtensionFieldsType_ExtensionFieldName_Placeholder Variable. + /// + public static readonly NodeId ExtensionFieldsType_ExtensionFieldName_Placeholder = new NodeId(Opc.Ua.Variables.ExtensionFieldsType_ExtensionFieldName_Placeholder); + + /// + /// The identifier for the ExtensionFieldsType_AddExtensionField_InputArguments Variable. + /// + public static readonly NodeId ExtensionFieldsType_AddExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.ExtensionFieldsType_AddExtensionField_InputArguments); + + /// + /// The identifier for the ExtensionFieldsType_AddExtensionField_OutputArguments Variable. + /// + public static readonly NodeId ExtensionFieldsType_AddExtensionField_OutputArguments = new NodeId(Opc.Ua.Variables.ExtensionFieldsType_AddExtensionField_OutputArguments); + + /// + /// The identifier for the ExtensionFieldsType_RemoveExtensionField_InputArguments Variable. + /// + public static readonly NodeId ExtensionFieldsType_RemoveExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.ExtensionFieldsType_RemoveExtensionField_InputArguments); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments); + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments); + + /// + /// The identifier for the PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments); + + /// + /// The identifier for the PublishedDataItemsType_PublishedData Variable. + /// + public static readonly NodeId PublishedDataItemsType_PublishedData = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_PublishedData); + + /// + /// The identifier for the PublishedDataItemsType_AddVariables_InputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_AddVariables_InputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_AddVariables_InputArguments); + + /// + /// The identifier for the PublishedDataItemsType_AddVariables_OutputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_AddVariables_OutputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_AddVariables_OutputArguments); + + /// + /// The identifier for the PublishedDataItemsType_RemoveVariables_InputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_RemoveVariables_InputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_RemoveVariables_InputArguments); + + /// + /// The identifier for the PublishedDataItemsType_RemoveVariables_OutputArguments Variable. + /// + public static readonly NodeId PublishedDataItemsType_RemoveVariables_OutputArguments = new NodeId(Opc.Ua.Variables.PublishedDataItemsType_RemoveVariables_OutputArguments); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Status_State); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public static readonly NodeId PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments); + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public static readonly NodeId PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments = new NodeId(Opc.Ua.Variables.PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments); + + /// + /// The identifier for the PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public static readonly NodeId PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments); + + /// + /// The identifier for the PublishedEventsType_PubSubEventNotifier Variable. + /// + public static readonly NodeId PublishedEventsType_PubSubEventNotifier = new NodeId(Opc.Ua.Variables.PublishedEventsType_PubSubEventNotifier); + + /// + /// The identifier for the PublishedEventsType_SelectedFields Variable. + /// + public static readonly NodeId PublishedEventsType_SelectedFields = new NodeId(Opc.Ua.Variables.PublishedEventsType_SelectedFields); + + /// + /// The identifier for the PublishedEventsType_Filter Variable. + /// + public static readonly NodeId PublishedEventsType_Filter = new NodeId(Opc.Ua.Variables.PublishedEventsType_Filter); + + /// + /// The identifier for the PublishedEventsType_ModifyFieldSelection_InputArguments Variable. + /// + public static readonly NodeId PublishedEventsType_ModifyFieldSelection_InputArguments = new NodeId(Opc.Ua.Variables.PublishedEventsType_ModifyFieldSelection_InputArguments); + + /// + /// The identifier for the PublishedEventsType_ModifyFieldSelection_OutputArguments Variable. + /// + public static readonly NodeId PublishedEventsType_ModifyFieldSelection_OutputArguments = new NodeId(Opc.Ua.Variables.PublishedEventsType_ModifyFieldSelection_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion Variable. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion = new NodeId(Opc.Ua.Variables.DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData Variable. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData = new NodeId(Opc.Ua.Variables.DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItems_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedDataItems_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedDataItems_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItems_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedDataItems_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedDataItems_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedEvents_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedEvents_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedEvents_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedEvents_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedEvents_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedEvents_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedEventsTemplate_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedEventsTemplate_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedEventsTemplate_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddPublishedEventsTemplate_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddPublishedEventsTemplate_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddPublishedEventsTemplate_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_RemovePublishedDataSet_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_RemovePublishedDataSet_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_RemovePublishedDataSet_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddDataSetFolder_InputArguments); + + /// + /// The identifier for the DataSetFolderType_AddDataSetFolder_OutputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_AddDataSetFolder_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_AddDataSetFolder_OutputArguments); + + /// + /// The identifier for the DataSetFolderType_RemoveDataSetFolder_InputArguments Variable. + /// + public static readonly NodeId DataSetFolderType_RemoveDataSetFolder_InputArguments = new NodeId(Opc.Ua.Variables.DataSetFolderType_RemoveDataSetFolder_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_PublisherId Variable. + /// + public static readonly NodeId PubSubConnectionType_PublisherId = new NodeId(Opc.Ua.Variables.PubSubConnectionType_PublisherId); + + /// + /// The identifier for the PubSubConnectionType_TransportProfileUri Variable. + /// + public static readonly NodeId PubSubConnectionType_TransportProfileUri = new NodeId(Opc.Ua.Variables.PubSubConnectionType_TransportProfileUri); + + /// + /// The identifier for the PubSubConnectionType_TransportProfileUri_Selections Variable. + /// + public static readonly NodeId PubSubConnectionType_TransportProfileUri_Selections = new NodeId(Opc.Ua.Variables.PubSubConnectionType_TransportProfileUri_Selections); + + /// + /// The identifier for the PubSubConnectionType_ConnectionProperties Variable. + /// + public static readonly NodeId PubSubConnectionType_ConnectionProperties = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ConnectionProperties); + + /// + /// The identifier for the PubSubConnectionType_Address_NetworkInterface Variable. + /// + public static readonly NodeId PubSubConnectionType_Address_NetworkInterface = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Address_NetworkInterface); + + /// + /// The identifier for the PubSubConnectionType_Address_NetworkInterface_Selections Variable. + /// + public static readonly NodeId PubSubConnectionType_Address_NetworkInterface_Selections = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Address_NetworkInterface_Selections); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Status_State); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Priority Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Priority = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Priority); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments); + + /// + /// The identifier for the PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Status_State Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Status_State); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments); + + /// + /// The identifier for the PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_Status_State Variable. + /// + public static readonly NodeId PubSubConnectionType_Status_State = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Status_State); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalInformation); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalError); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalError_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_SubError Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_SubError); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateError); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress); + + /// + /// The identifier for the PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel); + + /// + /// The identifier for the PubSubConnectionType_AddWriterGroup_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_AddWriterGroup_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_AddWriterGroup_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_AddWriterGroup_OutputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_AddWriterGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_AddWriterGroup_OutputArguments); + + /// + /// The identifier for the PubSubConnectionType_AddReaderGroup_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_AddReaderGroup_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_AddReaderGroup_InputArguments); + + /// + /// The identifier for the PubSubConnectionType_AddReaderGroup_OutputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_AddReaderGroup_OutputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_AddReaderGroup_OutputArguments); + + /// + /// The identifier for the PubSubConnectionType_RemoveGroup_InputArguments Variable. + /// + public static readonly NodeId PubSubConnectionType_RemoveGroup_InputArguments = new NodeId(Opc.Ua.Variables.PubSubConnectionType_RemoveGroup_InputArguments); + + /// + /// The identifier for the PubSubGroupType_SecurityMode Variable. + /// + public static readonly NodeId PubSubGroupType_SecurityMode = new NodeId(Opc.Ua.Variables.PubSubGroupType_SecurityMode); + + /// + /// The identifier for the PubSubGroupType_SecurityGroupId Variable. + /// + public static readonly NodeId PubSubGroupType_SecurityGroupId = new NodeId(Opc.Ua.Variables.PubSubGroupType_SecurityGroupId); + + /// + /// The identifier for the PubSubGroupType_SecurityKeyServices Variable. + /// + public static readonly NodeId PubSubGroupType_SecurityKeyServices = new NodeId(Opc.Ua.Variables.PubSubGroupType_SecurityKeyServices); + + /// + /// The identifier for the PubSubGroupType_MaxNetworkMessageSize Variable. + /// + public static readonly NodeId PubSubGroupType_MaxNetworkMessageSize = new NodeId(Opc.Ua.Variables.PubSubGroupType_MaxNetworkMessageSize); + + /// + /// The identifier for the PubSubGroupType_GroupProperties Variable. + /// + public static readonly NodeId PubSubGroupType_GroupProperties = new NodeId(Opc.Ua.Variables.PubSubGroupType_GroupProperties); + + /// + /// The identifier for the PubSubGroupType_Status_State Variable. + /// + public static readonly NodeId PubSubGroupType_Status_State = new NodeId(Opc.Ua.Variables.PubSubGroupType_Status_State); + + /// + /// The identifier for the WriterGroupType_Status_State Variable. + /// + public static readonly NodeId WriterGroupType_Status_State = new NodeId(Opc.Ua.Variables.WriterGroupType_Status_State); + + /// + /// The identifier for the WriterGroupType_WriterGroupId Variable. + /// + public static readonly NodeId WriterGroupType_WriterGroupId = new NodeId(Opc.Ua.Variables.WriterGroupType_WriterGroupId); + + /// + /// The identifier for the WriterGroupType_PublishingInterval Variable. + /// + public static readonly NodeId WriterGroupType_PublishingInterval = new NodeId(Opc.Ua.Variables.WriterGroupType_PublishingInterval); + + /// + /// The identifier for the WriterGroupType_KeepAliveTime Variable. + /// + public static readonly NodeId WriterGroupType_KeepAliveTime = new NodeId(Opc.Ua.Variables.WriterGroupType_KeepAliveTime); + + /// + /// The identifier for the WriterGroupType_Priority Variable. + /// + public static readonly NodeId WriterGroupType_Priority = new NodeId(Opc.Ua.Variables.WriterGroupType_Priority); + + /// + /// The identifier for the WriterGroupType_LocaleIds Variable. + /// + public static readonly NodeId WriterGroupType_LocaleIds = new NodeId(Opc.Ua.Variables.WriterGroupType_LocaleIds); + + /// + /// The identifier for the WriterGroupType_HeaderLayoutUri Variable. + /// + public static readonly NodeId WriterGroupType_HeaderLayoutUri = new NodeId(Opc.Ua.Variables.WriterGroupType_HeaderLayoutUri); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Status_State Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Status_State); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalInformation); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalError); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalError_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_SubError Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_SubError); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateError); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_SentNetworkMessages = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_SentNetworkMessages); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_FailedTransmissions = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_FailedTransmissions); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_EncryptionErrors = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_EncryptionErrors); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification); + + /// + /// The identifier for the WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel); + + /// + /// The identifier for the WriterGroupType_AddDataSetWriter_InputArguments Variable. + /// + public static readonly NodeId WriterGroupType_AddDataSetWriter_InputArguments = new NodeId(Opc.Ua.Variables.WriterGroupType_AddDataSetWriter_InputArguments); + + /// + /// The identifier for the WriterGroupType_AddDataSetWriter_OutputArguments Variable. + /// + public static readonly NodeId WriterGroupType_AddDataSetWriter_OutputArguments = new NodeId(Opc.Ua.Variables.WriterGroupType_AddDataSetWriter_OutputArguments); + + /// + /// The identifier for the WriterGroupType_RemoveDataSetWriter_InputArguments Variable. + /// + public static readonly NodeId WriterGroupType_RemoveDataSetWriter_InputArguments = new NodeId(Opc.Ua.Variables.WriterGroupType_RemoveDataSetWriter_InputArguments); + + /// + /// The identifier for the ReaderGroupType_Status_State Variable. + /// + public static readonly NodeId ReaderGroupType_Status_State = new NodeId(Opc.Ua.Variables.ReaderGroupType_Status_State); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_PublisherId Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_PublisherId = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_PublisherId); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Status_State Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Status_State = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Status_State); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments); + + /// + /// The identifier for the ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalInformation); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalError); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalError_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_SubError Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_SubError); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateError); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders); + + /// + /// The identifier for the ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the ReaderGroupType_AddDataSetReader_InputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_AddDataSetReader_InputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_AddDataSetReader_InputArguments); + + /// + /// The identifier for the ReaderGroupType_AddDataSetReader_OutputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_AddDataSetReader_OutputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_AddDataSetReader_OutputArguments); + + /// + /// The identifier for the ReaderGroupType_RemoveDataSetReader_InputArguments Variable. + /// + public static readonly NodeId ReaderGroupType_RemoveDataSetReader_InputArguments = new NodeId(Opc.Ua.Variables.ReaderGroupType_RemoveDataSetReader_InputArguments); + + /// + /// The identifier for the DataSetWriterType_DataSetWriterId Variable. + /// + public static readonly NodeId DataSetWriterType_DataSetWriterId = new NodeId(Opc.Ua.Variables.DataSetWriterType_DataSetWriterId); + + /// + /// The identifier for the DataSetWriterType_DataSetFieldContentMask Variable. + /// + public static readonly NodeId DataSetWriterType_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.DataSetWriterType_DataSetFieldContentMask); + + /// + /// The identifier for the DataSetWriterType_KeyFrameCount Variable. + /// + public static readonly NodeId DataSetWriterType_KeyFrameCount = new NodeId(Opc.Ua.Variables.DataSetWriterType_KeyFrameCount); + + /// + /// The identifier for the DataSetWriterType_DataSetWriterProperties Variable. + /// + public static readonly NodeId DataSetWriterType_DataSetWriterProperties = new NodeId(Opc.Ua.Variables.DataSetWriterType_DataSetWriterProperties); + + /// + /// The identifier for the DataSetWriterType_Status_State Variable. + /// + public static readonly NodeId DataSetWriterType_Status_State = new NodeId(Opc.Ua.Variables.DataSetWriterType_Status_State); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalInformation); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalError); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalError_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_SubError Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_SubError); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateError); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_PublisherId Variable. + /// + public static readonly NodeId DataSetReaderType_PublisherId = new NodeId(Opc.Ua.Variables.DataSetReaderType_PublisherId); + + /// + /// The identifier for the DataSetReaderType_WriterGroupId Variable. + /// + public static readonly NodeId DataSetReaderType_WriterGroupId = new NodeId(Opc.Ua.Variables.DataSetReaderType_WriterGroupId); + + /// + /// The identifier for the DataSetReaderType_DataSetWriterId Variable. + /// + public static readonly NodeId DataSetReaderType_DataSetWriterId = new NodeId(Opc.Ua.Variables.DataSetReaderType_DataSetWriterId); + + /// + /// The identifier for the DataSetReaderType_DataSetMetaData Variable. + /// + public static readonly NodeId DataSetReaderType_DataSetMetaData = new NodeId(Opc.Ua.Variables.DataSetReaderType_DataSetMetaData); + + /// + /// The identifier for the DataSetReaderType_DataSetFieldContentMask Variable. + /// + public static readonly NodeId DataSetReaderType_DataSetFieldContentMask = new NodeId(Opc.Ua.Variables.DataSetReaderType_DataSetFieldContentMask); + + /// + /// The identifier for the DataSetReaderType_MessageReceiveTimeout Variable. + /// + public static readonly NodeId DataSetReaderType_MessageReceiveTimeout = new NodeId(Opc.Ua.Variables.DataSetReaderType_MessageReceiveTimeout); + + /// + /// The identifier for the DataSetReaderType_KeyFrameCount Variable. + /// + public static readonly NodeId DataSetReaderType_KeyFrameCount = new NodeId(Opc.Ua.Variables.DataSetReaderType_KeyFrameCount); + + /// + /// The identifier for the DataSetReaderType_HeaderLayoutUri Variable. + /// + public static readonly NodeId DataSetReaderType_HeaderLayoutUri = new NodeId(Opc.Ua.Variables.DataSetReaderType_HeaderLayoutUri); + + /// + /// The identifier for the DataSetReaderType_SecurityMode Variable. + /// + public static readonly NodeId DataSetReaderType_SecurityMode = new NodeId(Opc.Ua.Variables.DataSetReaderType_SecurityMode); + + /// + /// The identifier for the DataSetReaderType_SecurityGroupId Variable. + /// + public static readonly NodeId DataSetReaderType_SecurityGroupId = new NodeId(Opc.Ua.Variables.DataSetReaderType_SecurityGroupId); + + /// + /// The identifier for the DataSetReaderType_SecurityKeyServices Variable. + /// + public static readonly NodeId DataSetReaderType_SecurityKeyServices = new NodeId(Opc.Ua.Variables.DataSetReaderType_SecurityKeyServices); + + /// + /// The identifier for the DataSetReaderType_DataSetReaderProperties Variable. + /// + public static readonly NodeId DataSetReaderType_DataSetReaderProperties = new NodeId(Opc.Ua.Variables.DataSetReaderType_DataSetReaderProperties); + + /// + /// The identifier for the DataSetReaderType_Status_State Variable. + /// + public static readonly NodeId DataSetReaderType_Status_State = new NodeId(Opc.Ua.Variables.DataSetReaderType_Status_State); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalInformation = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalInformation); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalInformation_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalInformation_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalInformation_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalError = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalError); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalError_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalError_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalError_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalError_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_SubError Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_SubError = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_SubError); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateError = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateError); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateError_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateError_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByParent); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalFromError); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StatePausedByParent); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel); + + /// + /// The identifier for the DataSetReaderType_CreateTargetVariables_InputArguments Variable. + /// + public static readonly NodeId DataSetReaderType_CreateTargetVariables_InputArguments = new NodeId(Opc.Ua.Variables.DataSetReaderType_CreateTargetVariables_InputArguments); + + /// + /// The identifier for the DataSetReaderType_CreateTargetVariables_OutputArguments Variable. + /// + public static readonly NodeId DataSetReaderType_CreateTargetVariables_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetReaderType_CreateTargetVariables_OutputArguments); + + /// + /// The identifier for the DataSetReaderType_CreateDataSetMirror_InputArguments Variable. + /// + public static readonly NodeId DataSetReaderType_CreateDataSetMirror_InputArguments = new NodeId(Opc.Ua.Variables.DataSetReaderType_CreateDataSetMirror_InputArguments); + + /// + /// The identifier for the DataSetReaderType_CreateDataSetMirror_OutputArguments Variable. + /// + public static readonly NodeId DataSetReaderType_CreateDataSetMirror_OutputArguments = new NodeId(Opc.Ua.Variables.DataSetReaderType_CreateDataSetMirror_OutputArguments); + + /// + /// The identifier for the TargetVariablesType_TargetVariables Variable. + /// + public static readonly NodeId TargetVariablesType_TargetVariables = new NodeId(Opc.Ua.Variables.TargetVariablesType_TargetVariables); + + /// + /// The identifier for the TargetVariablesType_AddTargetVariables_InputArguments Variable. + /// + public static readonly NodeId TargetVariablesType_AddTargetVariables_InputArguments = new NodeId(Opc.Ua.Variables.TargetVariablesType_AddTargetVariables_InputArguments); + + /// + /// The identifier for the TargetVariablesType_AddTargetVariables_OutputArguments Variable. + /// + public static readonly NodeId TargetVariablesType_AddTargetVariables_OutputArguments = new NodeId(Opc.Ua.Variables.TargetVariablesType_AddTargetVariables_OutputArguments); + + /// + /// The identifier for the TargetVariablesType_RemoveTargetVariables_InputArguments Variable. + /// + public static readonly NodeId TargetVariablesType_RemoveTargetVariables_InputArguments = new NodeId(Opc.Ua.Variables.TargetVariablesType_RemoveTargetVariables_InputArguments); + + /// + /// The identifier for the TargetVariablesType_RemoveTargetVariables_OutputArguments Variable. + /// + public static readonly NodeId TargetVariablesType_RemoveTargetVariables_OutputArguments = new NodeId(Opc.Ua.Variables.TargetVariablesType_RemoveTargetVariables_OutputArguments); + + /// + /// The identifier for the PubSubStatusType_State Variable. + /// + public static readonly NodeId PubSubStatusType_State = new NodeId(Opc.Ua.Variables.PubSubStatusType_State); + + /// + /// The identifier for the PubSubDiagnosticsType_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalInformation = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalInformation); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalError); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_SubError Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_SubError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_SubError); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the DiagnosticsLevel_EnumStrings Variable. + /// + public static readonly NodeId DiagnosticsLevel_EnumStrings = new NodeId(Opc.Ua.Variables.DiagnosticsLevel_EnumStrings); + + /// + /// The identifier for the PubSubDiagnosticsCounterType_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsCounterType_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsCounterType_Active); + + /// + /// The identifier for the PubSubDiagnosticsCounterType_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsCounterType_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsCounterType_Classification); + + /// + /// The identifier for the PubSubDiagnosticsCounterType_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsCounterType_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsCounterType_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsCounterType_TimeFirstChange Variable. + /// + public static readonly NodeId PubSubDiagnosticsCounterType_TimeFirstChange = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsCounterType_TimeFirstChange); + + /// + /// The identifier for the PubSubDiagnosticsCounterClassification_EnumStrings Variable. + /// + public static readonly NodeId PubSubDiagnosticsCounterClassification_EnumStrings = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsCounterClassification_EnumStrings); + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders); + + /// + /// The identifier for the PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress); + + /// + /// The identifier for the PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID); + + /// + /// The identifier for the PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders); + + /// + /// The identifier for the PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion); + + /// + /// The identifier for the PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalInformation_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_TotalInformation_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_TotalInformation_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_TotalError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_TotalError_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_TotalError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_TotalError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateError); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID); + + /// + /// The identifier for the PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel Variable. + /// + public static readonly NodeId PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel = new NodeId(Opc.Ua.Variables.PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel); + + /// + /// The identifier for the PubSubStatusEventType_ConnectionId Variable. + /// + public static readonly NodeId PubSubStatusEventType_ConnectionId = new NodeId(Opc.Ua.Variables.PubSubStatusEventType_ConnectionId); + + /// + /// The identifier for the PubSubStatusEventType_GroupId Variable. + /// + public static readonly NodeId PubSubStatusEventType_GroupId = new NodeId(Opc.Ua.Variables.PubSubStatusEventType_GroupId); + + /// + /// The identifier for the PubSubStatusEventType_State Variable. + /// + public static readonly NodeId PubSubStatusEventType_State = new NodeId(Opc.Ua.Variables.PubSubStatusEventType_State); + + /// + /// The identifier for the PubSubTransportLimitsExceedEventType_Actual Variable. + /// + public static readonly NodeId PubSubTransportLimitsExceedEventType_Actual = new NodeId(Opc.Ua.Variables.PubSubTransportLimitsExceedEventType_Actual); + + /// + /// The identifier for the PubSubTransportLimitsExceedEventType_Maximum Variable. + /// + public static readonly NodeId PubSubTransportLimitsExceedEventType_Maximum = new NodeId(Opc.Ua.Variables.PubSubTransportLimitsExceedEventType_Maximum); + + /// + /// The identifier for the PubSubCommunicationFailureEventType_Error Variable. + /// + public static readonly NodeId PubSubCommunicationFailureEventType_Error = new NodeId(Opc.Ua.Variables.PubSubCommunicationFailureEventType_Error); + + /// + /// The identifier for the UadpWriterGroupMessageType_GroupVersion Variable. + /// + public static readonly NodeId UadpWriterGroupMessageType_GroupVersion = new NodeId(Opc.Ua.Variables.UadpWriterGroupMessageType_GroupVersion); + + /// + /// The identifier for the UadpWriterGroupMessageType_DataSetOrdering Variable. + /// + public static readonly NodeId UadpWriterGroupMessageType_DataSetOrdering = new NodeId(Opc.Ua.Variables.UadpWriterGroupMessageType_DataSetOrdering); + + /// + /// The identifier for the UadpWriterGroupMessageType_NetworkMessageContentMask Variable. + /// + public static readonly NodeId UadpWriterGroupMessageType_NetworkMessageContentMask = new NodeId(Opc.Ua.Variables.UadpWriterGroupMessageType_NetworkMessageContentMask); + + /// + /// The identifier for the UadpWriterGroupMessageType_SamplingOffset Variable. + /// + public static readonly NodeId UadpWriterGroupMessageType_SamplingOffset = new NodeId(Opc.Ua.Variables.UadpWriterGroupMessageType_SamplingOffset); + + /// + /// The identifier for the UadpWriterGroupMessageType_PublishingOffset Variable. + /// + public static readonly NodeId UadpWriterGroupMessageType_PublishingOffset = new NodeId(Opc.Ua.Variables.UadpWriterGroupMessageType_PublishingOffset); + + /// + /// The identifier for the UadpDataSetWriterMessageType_DataSetMessageContentMask Variable. + /// + public static readonly NodeId UadpDataSetWriterMessageType_DataSetMessageContentMask = new NodeId(Opc.Ua.Variables.UadpDataSetWriterMessageType_DataSetMessageContentMask); + + /// + /// The identifier for the UadpDataSetWriterMessageType_ConfiguredSize Variable. + /// + public static readonly NodeId UadpDataSetWriterMessageType_ConfiguredSize = new NodeId(Opc.Ua.Variables.UadpDataSetWriterMessageType_ConfiguredSize); + + /// + /// The identifier for the UadpDataSetWriterMessageType_NetworkMessageNumber Variable. + /// + public static readonly NodeId UadpDataSetWriterMessageType_NetworkMessageNumber = new NodeId(Opc.Ua.Variables.UadpDataSetWriterMessageType_NetworkMessageNumber); + + /// + /// The identifier for the UadpDataSetWriterMessageType_DataSetOffset Variable. + /// + public static readonly NodeId UadpDataSetWriterMessageType_DataSetOffset = new NodeId(Opc.Ua.Variables.UadpDataSetWriterMessageType_DataSetOffset); + + /// + /// The identifier for the UadpDataSetReaderMessageType_GroupVersion Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_GroupVersion = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_GroupVersion); + + /// + /// The identifier for the UadpDataSetReaderMessageType_NetworkMessageNumber Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_NetworkMessageNumber = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_NetworkMessageNumber); + + /// + /// The identifier for the UadpDataSetReaderMessageType_DataSetOffset Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_DataSetOffset = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_DataSetOffset); + + /// + /// The identifier for the UadpDataSetReaderMessageType_DataSetClassId Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_DataSetClassId = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_DataSetClassId); + + /// + /// The identifier for the UadpDataSetReaderMessageType_NetworkMessageContentMask Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_NetworkMessageContentMask = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_NetworkMessageContentMask); + + /// + /// The identifier for the UadpDataSetReaderMessageType_DataSetMessageContentMask Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_DataSetMessageContentMask = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_DataSetMessageContentMask); + + /// + /// The identifier for the UadpDataSetReaderMessageType_PublishingInterval Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_PublishingInterval = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_PublishingInterval); + + /// + /// The identifier for the UadpDataSetReaderMessageType_ProcessingOffset Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_ProcessingOffset = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_ProcessingOffset); + + /// + /// The identifier for the UadpDataSetReaderMessageType_ReceiveOffset Variable. + /// + public static readonly NodeId UadpDataSetReaderMessageType_ReceiveOffset = new NodeId(Opc.Ua.Variables.UadpDataSetReaderMessageType_ReceiveOffset); + + /// + /// The identifier for the JsonWriterGroupMessageType_NetworkMessageContentMask Variable. + /// + public static readonly NodeId JsonWriterGroupMessageType_NetworkMessageContentMask = new NodeId(Opc.Ua.Variables.JsonWriterGroupMessageType_NetworkMessageContentMask); + + /// + /// The identifier for the JsonDataSetWriterMessageType_DataSetMessageContentMask Variable. + /// + public static readonly NodeId JsonDataSetWriterMessageType_DataSetMessageContentMask = new NodeId(Opc.Ua.Variables.JsonDataSetWriterMessageType_DataSetMessageContentMask); + + /// + /// The identifier for the JsonDataSetReaderMessageType_NetworkMessageContentMask Variable. + /// + public static readonly NodeId JsonDataSetReaderMessageType_NetworkMessageContentMask = new NodeId(Opc.Ua.Variables.JsonDataSetReaderMessageType_NetworkMessageContentMask); + + /// + /// The identifier for the JsonDataSetReaderMessageType_DataSetMessageContentMask Variable. + /// + public static readonly NodeId JsonDataSetReaderMessageType_DataSetMessageContentMask = new NodeId(Opc.Ua.Variables.JsonDataSetReaderMessageType_DataSetMessageContentMask); + + /// + /// The identifier for the DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface Variable. + /// + public static readonly NodeId DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface = new NodeId(Opc.Ua.Variables.DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface); + + /// + /// The identifier for the DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections Variable. + /// + public static readonly NodeId DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections = new NodeId(Opc.Ua.Variables.DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections); + + /// + /// The identifier for the DatagramWriterGroupTransportType_MessageRepeatCount Variable. + /// + public static readonly NodeId DatagramWriterGroupTransportType_MessageRepeatCount = new NodeId(Opc.Ua.Variables.DatagramWriterGroupTransportType_MessageRepeatCount); + + /// + /// The identifier for the DatagramWriterGroupTransportType_MessageRepeatDelay Variable. + /// + public static readonly NodeId DatagramWriterGroupTransportType_MessageRepeatDelay = new NodeId(Opc.Ua.Variables.DatagramWriterGroupTransportType_MessageRepeatDelay); + + /// + /// The identifier for the BrokerConnectionTransportType_ResourceUri Variable. + /// + public static readonly NodeId BrokerConnectionTransportType_ResourceUri = new NodeId(Opc.Ua.Variables.BrokerConnectionTransportType_ResourceUri); + + /// + /// The identifier for the BrokerConnectionTransportType_AuthenticationProfileUri Variable. + /// + public static readonly NodeId BrokerConnectionTransportType_AuthenticationProfileUri = new NodeId(Opc.Ua.Variables.BrokerConnectionTransportType_AuthenticationProfileUri); + + /// + /// The identifier for the BrokerWriterGroupTransportType_QueueName Variable. + /// + public static readonly NodeId BrokerWriterGroupTransportType_QueueName = new NodeId(Opc.Ua.Variables.BrokerWriterGroupTransportType_QueueName); + + /// + /// The identifier for the BrokerWriterGroupTransportType_ResourceUri Variable. + /// + public static readonly NodeId BrokerWriterGroupTransportType_ResourceUri = new NodeId(Opc.Ua.Variables.BrokerWriterGroupTransportType_ResourceUri); + + /// + /// The identifier for the BrokerWriterGroupTransportType_AuthenticationProfileUri Variable. + /// + public static readonly NodeId BrokerWriterGroupTransportType_AuthenticationProfileUri = new NodeId(Opc.Ua.Variables.BrokerWriterGroupTransportType_AuthenticationProfileUri); + + /// + /// The identifier for the BrokerWriterGroupTransportType_RequestedDeliveryGuarantee Variable. + /// + public static readonly NodeId BrokerWriterGroupTransportType_RequestedDeliveryGuarantee = new NodeId(Opc.Ua.Variables.BrokerWriterGroupTransportType_RequestedDeliveryGuarantee); + + /// + /// The identifier for the BrokerDataSetWriterTransportType_QueueName Variable. + /// + public static readonly NodeId BrokerDataSetWriterTransportType_QueueName = new NodeId(Opc.Ua.Variables.BrokerDataSetWriterTransportType_QueueName); + + /// + /// The identifier for the BrokerDataSetWriterTransportType_MetaDataQueueName Variable. + /// + public static readonly NodeId BrokerDataSetWriterTransportType_MetaDataQueueName = new NodeId(Opc.Ua.Variables.BrokerDataSetWriterTransportType_MetaDataQueueName); + + /// + /// The identifier for the BrokerDataSetWriterTransportType_ResourceUri Variable. + /// + public static readonly NodeId BrokerDataSetWriterTransportType_ResourceUri = new NodeId(Opc.Ua.Variables.BrokerDataSetWriterTransportType_ResourceUri); + + /// + /// The identifier for the BrokerDataSetWriterTransportType_AuthenticationProfileUri Variable. + /// + public static readonly NodeId BrokerDataSetWriterTransportType_AuthenticationProfileUri = new NodeId(Opc.Ua.Variables.BrokerDataSetWriterTransportType_AuthenticationProfileUri); + + /// + /// The identifier for the BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee Variable. + /// + public static readonly NodeId BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee = new NodeId(Opc.Ua.Variables.BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee); + + /// + /// The identifier for the BrokerDataSetWriterTransportType_MetaDataUpdateTime Variable. + /// + public static readonly NodeId BrokerDataSetWriterTransportType_MetaDataUpdateTime = new NodeId(Opc.Ua.Variables.BrokerDataSetWriterTransportType_MetaDataUpdateTime); + + /// + /// The identifier for the BrokerDataSetReaderTransportType_QueueName Variable. + /// + public static readonly NodeId BrokerDataSetReaderTransportType_QueueName = new NodeId(Opc.Ua.Variables.BrokerDataSetReaderTransportType_QueueName); + + /// + /// The identifier for the BrokerDataSetReaderTransportType_ResourceUri Variable. + /// + public static readonly NodeId BrokerDataSetReaderTransportType_ResourceUri = new NodeId(Opc.Ua.Variables.BrokerDataSetReaderTransportType_ResourceUri); + + /// + /// The identifier for the BrokerDataSetReaderTransportType_AuthenticationProfileUri Variable. + /// + public static readonly NodeId BrokerDataSetReaderTransportType_AuthenticationProfileUri = new NodeId(Opc.Ua.Variables.BrokerDataSetReaderTransportType_AuthenticationProfileUri); + + /// + /// The identifier for the BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee Variable. + /// + public static readonly NodeId BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee = new NodeId(Opc.Ua.Variables.BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee); + + /// + /// The identifier for the BrokerDataSetReaderTransportType_MetaDataQueueName Variable. + /// + public static readonly NodeId BrokerDataSetReaderTransportType_MetaDataQueueName = new NodeId(Opc.Ua.Variables.BrokerDataSetReaderTransportType_MetaDataQueueName); + + /// + /// The identifier for the NetworkAddressType_NetworkInterface Variable. + /// + public static readonly NodeId NetworkAddressType_NetworkInterface = new NodeId(Opc.Ua.Variables.NetworkAddressType_NetworkInterface); + + /// + /// The identifier for the NetworkAddressType_NetworkInterface_Selections Variable. + /// + public static readonly NodeId NetworkAddressType_NetworkInterface_Selections = new NodeId(Opc.Ua.Variables.NetworkAddressType_NetworkInterface_Selections); + + /// + /// The identifier for the NetworkAddressUrlType_NetworkInterface_Selections Variable. + /// + public static readonly NodeId NetworkAddressUrlType_NetworkInterface_Selections = new NodeId(Opc.Ua.Variables.NetworkAddressUrlType_NetworkInterface_Selections); + + /// + /// The identifier for the NetworkAddressUrlType_Url Variable. + /// + public static readonly NodeId NetworkAddressUrlType_Url = new NodeId(Opc.Ua.Variables.NetworkAddressUrlType_Url); + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public static readonly NodeId AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_InputArguments); + + /// + /// The identifier for the AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.AliasNameCategoryType_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments); + + /// + /// The identifier for the AliasNameCategoryType_FindAlias_InputArguments Variable. + /// + public static readonly NodeId AliasNameCategoryType_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.AliasNameCategoryType_FindAlias_InputArguments); + + /// + /// The identifier for the AliasNameCategoryType_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId AliasNameCategoryType_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.AliasNameCategoryType_FindAlias_OutputArguments); + + /// + /// The identifier for the Aliases_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public static readonly NodeId Aliases_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.Aliases_SubAliasNameCategories_Placeholder_FindAlias_InputArguments); + + /// + /// The identifier for the Aliases_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId Aliases_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.Aliases_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments); + + /// + /// The identifier for the Aliases_FindAlias_InputArguments Variable. + /// + public static readonly NodeId Aliases_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.Aliases_FindAlias_InputArguments); + + /// + /// The identifier for the Aliases_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId Aliases_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.Aliases_FindAlias_OutputArguments); + + /// + /// The identifier for the TagVariables_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public static readonly NodeId TagVariables_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.TagVariables_SubAliasNameCategories_Placeholder_FindAlias_InputArguments); + + /// + /// The identifier for the TagVariables_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId TagVariables_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.TagVariables_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments); + + /// + /// The identifier for the TagVariables_FindAlias_InputArguments Variable. + /// + public static readonly NodeId TagVariables_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.TagVariables_FindAlias_InputArguments); + + /// + /// The identifier for the TagVariables_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId TagVariables_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.TagVariables_FindAlias_OutputArguments); + + /// + /// The identifier for the Topics_SubAliasNameCategories_Placeholder_FindAlias_InputArguments Variable. + /// + public static readonly NodeId Topics_SubAliasNameCategories_Placeholder_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.Topics_SubAliasNameCategories_Placeholder_FindAlias_InputArguments); + + /// + /// The identifier for the Topics_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId Topics_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.Topics_SubAliasNameCategories_Placeholder_FindAlias_OutputArguments); + + /// + /// The identifier for the Topics_FindAlias_InputArguments Variable. + /// + public static readonly NodeId Topics_FindAlias_InputArguments = new NodeId(Opc.Ua.Variables.Topics_FindAlias_InputArguments); + + /// + /// The identifier for the Topics_FindAlias_OutputArguments Variable. + /// + public static readonly NodeId Topics_FindAlias_OutputArguments = new NodeId(Opc.Ua.Variables.Topics_FindAlias_OutputArguments); + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteBaseType_EnumDictionaryEntries Variable. + /// + public static readonly NodeId MultiStateDictionaryEntryDiscreteBaseType_EnumDictionaryEntries = new NodeId(Opc.Ua.Variables.MultiStateDictionaryEntryDiscreteBaseType_EnumDictionaryEntries); + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteBaseType_ValueAsDictionaryEntries Variable. + /// + public static readonly NodeId MultiStateDictionaryEntryDiscreteBaseType_ValueAsDictionaryEntries = new NodeId(Opc.Ua.Variables.MultiStateDictionaryEntryDiscreteBaseType_ValueAsDictionaryEntries); + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteType_ValueAsDictionaryEntries Variable. + /// + public static readonly NodeId MultiStateDictionaryEntryDiscreteType_ValueAsDictionaryEntries = new NodeId(Opc.Ua.Variables.MultiStateDictionaryEntryDiscreteType_ValueAsDictionaryEntries); + + /// + /// The identifier for the IdType_EnumStrings Variable. + /// + public static readonly NodeId IdType_EnumStrings = new NodeId(Opc.Ua.Variables.IdType_EnumStrings); + + /// + /// The identifier for the NodeClass_EnumValues Variable. + /// + public static readonly NodeId NodeClass_EnumValues = new NodeId(Opc.Ua.Variables.NodeClass_EnumValues); + + /// + /// The identifier for the PermissionType_OptionSetValues Variable. + /// + public static readonly NodeId PermissionType_OptionSetValues = new NodeId(Opc.Ua.Variables.PermissionType_OptionSetValues); + + /// + /// The identifier for the AccessLevelType_OptionSetValues Variable. + /// + public static readonly NodeId AccessLevelType_OptionSetValues = new NodeId(Opc.Ua.Variables.AccessLevelType_OptionSetValues); + + /// + /// The identifier for the AccessLevelExType_OptionSetValues Variable. + /// + public static readonly NodeId AccessLevelExType_OptionSetValues = new NodeId(Opc.Ua.Variables.AccessLevelExType_OptionSetValues); + + /// + /// The identifier for the EventNotifierType_OptionSetValues Variable. + /// + public static readonly NodeId EventNotifierType_OptionSetValues = new NodeId(Opc.Ua.Variables.EventNotifierType_OptionSetValues); + + /// + /// The identifier for the AccessRestrictionType_OptionSetValues Variable. + /// + public static readonly NodeId AccessRestrictionType_OptionSetValues = new NodeId(Opc.Ua.Variables.AccessRestrictionType_OptionSetValues); + + /// + /// The identifier for the StructureType_EnumStrings Variable. + /// + public static readonly NodeId StructureType_EnumStrings = new NodeId(Opc.Ua.Variables.StructureType_EnumStrings); + + /// + /// The identifier for the ApplicationType_EnumStrings Variable. + /// + public static readonly NodeId ApplicationType_EnumStrings = new NodeId(Opc.Ua.Variables.ApplicationType_EnumStrings); + + /// + /// The identifier for the MessageSecurityMode_EnumStrings Variable. + /// + public static readonly NodeId MessageSecurityMode_EnumStrings = new NodeId(Opc.Ua.Variables.MessageSecurityMode_EnumStrings); + + /// + /// The identifier for the UserTokenType_EnumStrings Variable. + /// + public static readonly NodeId UserTokenType_EnumStrings = new NodeId(Opc.Ua.Variables.UserTokenType_EnumStrings); + + /// + /// The identifier for the SecurityTokenRequestType_EnumStrings Variable. + /// + public static readonly NodeId SecurityTokenRequestType_EnumStrings = new NodeId(Opc.Ua.Variables.SecurityTokenRequestType_EnumStrings); + + /// + /// The identifier for the NodeAttributesMask_EnumValues Variable. + /// + public static readonly NodeId NodeAttributesMask_EnumValues = new NodeId(Opc.Ua.Variables.NodeAttributesMask_EnumValues); + + /// + /// The identifier for the AttributeWriteMask_OptionSetValues Variable. + /// + public static readonly NodeId AttributeWriteMask_OptionSetValues = new NodeId(Opc.Ua.Variables.AttributeWriteMask_OptionSetValues); + + /// + /// The identifier for the BrowseDirection_EnumStrings Variable. + /// + public static readonly NodeId BrowseDirection_EnumStrings = new NodeId(Opc.Ua.Variables.BrowseDirection_EnumStrings); + + /// + /// The identifier for the BrowseResultMask_EnumValues Variable. + /// + public static readonly NodeId BrowseResultMask_EnumValues = new NodeId(Opc.Ua.Variables.BrowseResultMask_EnumValues); + + /// + /// The identifier for the FilterOperator_EnumStrings Variable. + /// + public static readonly NodeId FilterOperator_EnumStrings = new NodeId(Opc.Ua.Variables.FilterOperator_EnumStrings); + + /// + /// The identifier for the TimestampsToReturn_EnumStrings Variable. + /// + public static readonly NodeId TimestampsToReturn_EnumStrings = new NodeId(Opc.Ua.Variables.TimestampsToReturn_EnumStrings); + + /// + /// The identifier for the HistoryUpdateType_EnumValues Variable. + /// + public static readonly NodeId HistoryUpdateType_EnumValues = new NodeId(Opc.Ua.Variables.HistoryUpdateType_EnumValues); + + /// + /// The identifier for the PerformUpdateType_EnumValues Variable. + /// + public static readonly NodeId PerformUpdateType_EnumValues = new NodeId(Opc.Ua.Variables.PerformUpdateType_EnumValues); + + /// + /// The identifier for the MonitoringMode_EnumStrings Variable. + /// + public static readonly NodeId MonitoringMode_EnumStrings = new NodeId(Opc.Ua.Variables.MonitoringMode_EnumStrings); + + /// + /// The identifier for the DataChangeTrigger_EnumStrings Variable. + /// + public static readonly NodeId DataChangeTrigger_EnumStrings = new NodeId(Opc.Ua.Variables.DataChangeTrigger_EnumStrings); + + /// + /// The identifier for the DeadbandType_EnumStrings Variable. + /// + public static readonly NodeId DeadbandType_EnumStrings = new NodeId(Opc.Ua.Variables.DeadbandType_EnumStrings); + + /// + /// The identifier for the RedundancySupport_EnumStrings Variable. + /// + public static readonly NodeId RedundancySupport_EnumStrings = new NodeId(Opc.Ua.Variables.RedundancySupport_EnumStrings); + + /// + /// The identifier for the ServerState_EnumStrings Variable. + /// + public static readonly NodeId ServerState_EnumStrings = new NodeId(Opc.Ua.Variables.ServerState_EnumStrings); + + /// + /// The identifier for the ModelChangeStructureVerbMask_EnumValues Variable. + /// + public static readonly NodeId ModelChangeStructureVerbMask_EnumValues = new NodeId(Opc.Ua.Variables.ModelChangeStructureVerbMask_EnumValues); + + /// + /// The identifier for the AxisScaleEnumeration_EnumStrings Variable. + /// + public static readonly NodeId AxisScaleEnumeration_EnumStrings = new NodeId(Opc.Ua.Variables.AxisScaleEnumeration_EnumStrings); + + /// + /// The identifier for the ExceptionDeviationFormat_EnumStrings Variable. + /// + public static readonly NodeId ExceptionDeviationFormat_EnumStrings = new NodeId(Opc.Ua.Variables.ExceptionDeviationFormat_EnumStrings); + + /// + /// The identifier for the OpcUa_BinarySchema Variable. + /// + public static readonly NodeId OpcUa_BinarySchema = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema); + + /// + /// The identifier for the OpcUa_BinarySchema_NamespaceUri Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_NamespaceUri = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_NamespaceUri); + + /// + /// The identifier for the OpcUa_BinarySchema_Deprecated Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Deprecated = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Deprecated); + + /// + /// The identifier for the OpcUa_BinarySchema_KeyValuePair Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_KeyValuePair = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_KeyValuePair); + + /// + /// The identifier for the OpcUa_BinarySchema_EndpointType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EndpointType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EndpointType); + + /// + /// The identifier for the OpcUa_BinarySchema_RationalNumber Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_RationalNumber = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_RationalNumber); + + /// + /// The identifier for the OpcUa_BinarySchema_Vector Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Vector = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Vector); + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDVector Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ThreeDVector = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ThreeDVector); + + /// + /// The identifier for the OpcUa_BinarySchema_CartesianCoordinates Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_CartesianCoordinates = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_CartesianCoordinates); + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDCartesianCoordinates Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ThreeDCartesianCoordinates = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ThreeDCartesianCoordinates); + + /// + /// The identifier for the OpcUa_BinarySchema_Orientation Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Orientation = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Orientation); + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDOrientation Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ThreeDOrientation = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ThreeDOrientation); + + /// + /// The identifier for the OpcUa_BinarySchema_Frame Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Frame = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Frame); + + /// + /// The identifier for the OpcUa_BinarySchema_ThreeDFrame Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ThreeDFrame = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ThreeDFrame); + + /// + /// The identifier for the OpcUa_BinarySchema_IdentityMappingRuleType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_IdentityMappingRuleType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_IdentityMappingRuleType); + + /// + /// The identifier for the OpcUa_BinarySchema_CurrencyUnitType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_CurrencyUnitType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_CurrencyUnitType); + + /// + /// The identifier for the OpcUa_BinarySchema_TrustListDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_TrustListDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_TrustListDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataTypeSchemaHeader Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataTypeSchemaHeader = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataTypeSchemaHeader); + + /// + /// The identifier for the OpcUa_BinarySchema_DataTypeDescription Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataTypeDescription = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataTypeDescription); + + /// + /// The identifier for the OpcUa_BinarySchema_StructureDescription Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_StructureDescription = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_StructureDescription); + + /// + /// The identifier for the OpcUa_BinarySchema_EnumDescription Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EnumDescription = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EnumDescription); + + /// + /// The identifier for the OpcUa_BinarySchema_SimpleTypeDescription Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SimpleTypeDescription = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SimpleTypeDescription); + + /// + /// The identifier for the OpcUa_BinarySchema_UABinaryFileDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UABinaryFileDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UABinaryFileDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetMetaDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetMetaDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetMetaDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_FieldMetaData Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_FieldMetaData = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_FieldMetaData); + + /// + /// The identifier for the OpcUa_BinarySchema_ConfigurationVersionDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ConfigurationVersionDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ConfigurationVersionDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedDataSetDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PublishedDataSetDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PublishedDataSetDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedDataSetSourceDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PublishedDataSetSourceDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PublishedDataSetSourceDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedVariableDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PublishedVariableDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PublishedVariableDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedDataItemsDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PublishedDataItemsDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PublishedDataItemsDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PublishedEventsDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PublishedEventsDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PublishedEventsDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetWriterDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetWriterDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetWriterDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetWriterTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetWriterTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetWriterTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetWriterMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetWriterMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetWriterMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PubSubGroupDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PubSubGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PubSubGroupDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_WriterGroupDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_WriterGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_WriterGroupDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_WriterGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_WriterGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_WriterGroupTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_WriterGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_WriterGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_WriterGroupMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PubSubConnectionDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PubSubConnectionDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PubSubConnectionDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ConnectionTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ConnectionTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ConnectionTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_NetworkAddressDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_NetworkAddressDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_NetworkAddressDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_NetworkAddressUrlDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_NetworkAddressUrlDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_NetworkAddressUrlDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ReaderGroupDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ReaderGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ReaderGroupDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ReaderGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ReaderGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ReaderGroupTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ReaderGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ReaderGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ReaderGroupMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetReaderDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetReaderDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetReaderDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetReaderTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetReaderTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetReaderTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataSetReaderMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataSetReaderMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataSetReaderMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_SubscribedDataSetDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SubscribedDataSetDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SubscribedDataSetDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_TargetVariablesDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_TargetVariablesDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_TargetVariablesDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_FieldTargetDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_FieldTargetDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_FieldTargetDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_SubscribedDataSetMirrorDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SubscribedDataSetMirrorDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SubscribedDataSetMirrorDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_PubSubConfigurationDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_PubSubConfigurationDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_PubSubConfigurationDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_UadpWriterGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UadpWriterGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UadpWriterGroupMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_UadpDataSetWriterMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UadpDataSetWriterMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UadpDataSetWriterMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_UadpDataSetReaderMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UadpDataSetReaderMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UadpDataSetReaderMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_JsonWriterGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_JsonWriterGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_JsonWriterGroupMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_JsonDataSetWriterMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_JsonDataSetWriterMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_JsonDataSetWriterMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_JsonDataSetReaderMessageDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_JsonDataSetReaderMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_JsonDataSetReaderMessageDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DatagramConnectionTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DatagramConnectionTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DatagramConnectionTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_DatagramWriterGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DatagramWriterGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DatagramWriterGroupTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerConnectionTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_BrokerConnectionTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_BrokerConnectionTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerWriterGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_BrokerWriterGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_BrokerWriterGroupTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_AliasNameDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AliasNameDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AliasNameDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_RolePermissionType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_RolePermissionType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_RolePermissionType); + + /// + /// The identifier for the OpcUa_BinarySchema_DataTypeDefinition Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DataTypeDefinition = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DataTypeDefinition); + + /// + /// The identifier for the OpcUa_BinarySchema_StructureField Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_StructureField = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_StructureField); + + /// + /// The identifier for the OpcUa_BinarySchema_StructureDefinition Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_StructureDefinition = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_StructureDefinition); + + /// + /// The identifier for the OpcUa_BinarySchema_EnumDefinition Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EnumDefinition = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EnumDefinition); + + /// + /// The identifier for the OpcUa_BinarySchema_Argument Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Argument = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Argument); + + /// + /// The identifier for the OpcUa_BinarySchema_EnumValueType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EnumValueType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EnumValueType); + + /// + /// The identifier for the OpcUa_BinarySchema_EnumField Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EnumField = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EnumField); + + /// + /// The identifier for the OpcUa_BinarySchema_OptionSet Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_OptionSet = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_OptionSet); + + /// + /// The identifier for the OpcUa_BinarySchema_Union Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Union = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Union); + + /// + /// The identifier for the OpcUa_BinarySchema_TimeZoneDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_TimeZoneDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_TimeZoneDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ApplicationDescription Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ApplicationDescription = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ApplicationDescription); + + /// + /// The identifier for the OpcUa_BinarySchema_ServerOnNetwork Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ServerOnNetwork = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ServerOnNetwork); + + /// + /// The identifier for the OpcUa_BinarySchema_UserTokenPolicy Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UserTokenPolicy = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UserTokenPolicy); + + /// + /// The identifier for the OpcUa_BinarySchema_EndpointDescription Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EndpointDescription = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EndpointDescription); + + /// + /// The identifier for the OpcUa_BinarySchema_RegisteredServer Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_RegisteredServer = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_RegisteredServer); + + /// + /// The identifier for the OpcUa_BinarySchema_DiscoveryConfiguration Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DiscoveryConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DiscoveryConfiguration); + + /// + /// The identifier for the OpcUa_BinarySchema_MdnsDiscoveryConfiguration Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_MdnsDiscoveryConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_MdnsDiscoveryConfiguration); + + /// + /// The identifier for the OpcUa_BinarySchema_SignedSoftwareCertificate Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SignedSoftwareCertificate = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SignedSoftwareCertificate); + + /// + /// The identifier for the OpcUa_BinarySchema_UserIdentityToken Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UserIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UserIdentityToken); + + /// + /// The identifier for the OpcUa_BinarySchema_AnonymousIdentityToken Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AnonymousIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AnonymousIdentityToken); + + /// + /// The identifier for the OpcUa_BinarySchema_UserNameIdentityToken Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_UserNameIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_UserNameIdentityToken); + + /// + /// The identifier for the OpcUa_BinarySchema_X509IdentityToken Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_X509IdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_X509IdentityToken); + + /// + /// The identifier for the OpcUa_BinarySchema_IssuedIdentityToken Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_IssuedIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_IssuedIdentityToken); + + /// + /// The identifier for the OpcUa_BinarySchema_AddNodesItem Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AddNodesItem = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AddNodesItem); + + /// + /// The identifier for the OpcUa_BinarySchema_AddReferencesItem Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AddReferencesItem = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AddReferencesItem); + + /// + /// The identifier for the OpcUa_BinarySchema_DeleteNodesItem Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DeleteNodesItem = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DeleteNodesItem); + + /// + /// The identifier for the OpcUa_BinarySchema_DeleteReferencesItem Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DeleteReferencesItem = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DeleteReferencesItem); + + /// + /// The identifier for the OpcUa_BinarySchema_RelativePathElement Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_RelativePathElement = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_RelativePathElement); + + /// + /// The identifier for the OpcUa_BinarySchema_RelativePath Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_RelativePath = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_RelativePath); + + /// + /// The identifier for the OpcUa_BinarySchema_EndpointConfiguration Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EndpointConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EndpointConfiguration); + + /// + /// The identifier for the OpcUa_BinarySchema_ContentFilterElement Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ContentFilterElement = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ContentFilterElement); + + /// + /// The identifier for the OpcUa_BinarySchema_ContentFilter Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ContentFilter = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ContentFilter); + + /// + /// The identifier for the OpcUa_BinarySchema_FilterOperand Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_FilterOperand = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_FilterOperand); + + /// + /// The identifier for the OpcUa_BinarySchema_ElementOperand Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ElementOperand = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ElementOperand); + + /// + /// The identifier for the OpcUa_BinarySchema_LiteralOperand Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_LiteralOperand = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_LiteralOperand); + + /// + /// The identifier for the OpcUa_BinarySchema_AttributeOperand Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AttributeOperand = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AttributeOperand); + + /// + /// The identifier for the OpcUa_BinarySchema_SimpleAttributeOperand Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SimpleAttributeOperand = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SimpleAttributeOperand); + + /// + /// The identifier for the OpcUa_BinarySchema_HistoryEvent Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_HistoryEvent = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_HistoryEvent); + + /// + /// The identifier for the OpcUa_BinarySchema_MonitoringFilter Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_MonitoringFilter = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_MonitoringFilter); + + /// + /// The identifier for the OpcUa_BinarySchema_EventFilter Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EventFilter = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EventFilter); + + /// + /// The identifier for the OpcUa_BinarySchema_AggregateConfiguration Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AggregateConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AggregateConfiguration); + + /// + /// The identifier for the OpcUa_BinarySchema_HistoryEventFieldList Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_HistoryEventFieldList = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_HistoryEventFieldList); + + /// + /// The identifier for the OpcUa_BinarySchema_BuildInfo Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_BuildInfo = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_BuildInfo); + + /// + /// The identifier for the OpcUa_BinarySchema_RedundantServerDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_RedundantServerDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_RedundantServerDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_EndpointUrlListDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EndpointUrlListDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EndpointUrlListDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_NetworkGroupDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_NetworkGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_NetworkGroupDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ServerStatusDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ServerStatusDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ServerStatusDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_SessionDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SessionDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SessionDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ServiceCounterDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ServiceCounterDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ServiceCounterDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_StatusResult Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_StatusResult = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_StatusResult); + + /// + /// The identifier for the OpcUa_BinarySchema_SubscriptionDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SubscriptionDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SubscriptionDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ModelChangeStructureDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ModelChangeStructureDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ModelChangeStructureDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_SemanticChangeStructureDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_SemanticChangeStructureDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_SemanticChangeStructureDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_Range Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Range = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Range); + + /// + /// The identifier for the OpcUa_BinarySchema_EUInformation Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_EUInformation = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_EUInformation); + + /// + /// The identifier for the OpcUa_BinarySchema_ComplexNumberType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ComplexNumberType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ComplexNumberType); + + /// + /// The identifier for the OpcUa_BinarySchema_DoubleComplexNumberType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_DoubleComplexNumberType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_DoubleComplexNumberType); + + /// + /// The identifier for the OpcUa_BinarySchema_AxisInformation Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_AxisInformation = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_AxisInformation); + + /// + /// The identifier for the OpcUa_BinarySchema_XVType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_XVType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_XVType); + + /// + /// The identifier for the OpcUa_BinarySchema_ProgramDiagnosticDataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ProgramDiagnosticDataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ProgramDiagnosticDataType); + + /// + /// The identifier for the OpcUa_BinarySchema_ProgramDiagnostic2DataType Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_ProgramDiagnostic2DataType = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_ProgramDiagnostic2DataType); + + /// + /// The identifier for the OpcUa_BinarySchema_Annotation Variable. + /// + public static readonly NodeId OpcUa_BinarySchema_Annotation = new NodeId(Opc.Ua.Variables.OpcUa_BinarySchema_Annotation); + + /// + /// The identifier for the OpcUa_XmlSchema Variable. + /// + public static readonly NodeId OpcUa_XmlSchema = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema); + + /// + /// The identifier for the OpcUa_XmlSchema_NamespaceUri Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_NamespaceUri = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_NamespaceUri); + + /// + /// The identifier for the OpcUa_XmlSchema_Deprecated Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Deprecated = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Deprecated); + + /// + /// The identifier for the OpcUa_XmlSchema_KeyValuePair Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_KeyValuePair = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_KeyValuePair); + + /// + /// The identifier for the OpcUa_XmlSchema_EndpointType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EndpointType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EndpointType); + + /// + /// The identifier for the OpcUa_XmlSchema_RationalNumber Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_RationalNumber = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_RationalNumber); + + /// + /// The identifier for the OpcUa_XmlSchema_Vector Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Vector = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Vector); + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDVector Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ThreeDVector = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ThreeDVector); + + /// + /// The identifier for the OpcUa_XmlSchema_CartesianCoordinates Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_CartesianCoordinates = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_CartesianCoordinates); + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDCartesianCoordinates Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ThreeDCartesianCoordinates = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ThreeDCartesianCoordinates); + + /// + /// The identifier for the OpcUa_XmlSchema_Orientation Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Orientation = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Orientation); + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDOrientation Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ThreeDOrientation = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ThreeDOrientation); + + /// + /// The identifier for the OpcUa_XmlSchema_Frame Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Frame = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Frame); + + /// + /// The identifier for the OpcUa_XmlSchema_ThreeDFrame Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ThreeDFrame = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ThreeDFrame); + + /// + /// The identifier for the OpcUa_XmlSchema_IdentityMappingRuleType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_IdentityMappingRuleType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_IdentityMappingRuleType); + + /// + /// The identifier for the OpcUa_XmlSchema_CurrencyUnitType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_CurrencyUnitType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_CurrencyUnitType); + + /// + /// The identifier for the OpcUa_XmlSchema_TrustListDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_TrustListDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_TrustListDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataTypeSchemaHeader Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataTypeSchemaHeader = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataTypeSchemaHeader); + + /// + /// The identifier for the OpcUa_XmlSchema_DataTypeDescription Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataTypeDescription = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataTypeDescription); + + /// + /// The identifier for the OpcUa_XmlSchema_StructureDescription Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_StructureDescription = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_StructureDescription); + + /// + /// The identifier for the OpcUa_XmlSchema_EnumDescription Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EnumDescription = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EnumDescription); + + /// + /// The identifier for the OpcUa_XmlSchema_SimpleTypeDescription Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SimpleTypeDescription = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SimpleTypeDescription); + + /// + /// The identifier for the OpcUa_XmlSchema_UABinaryFileDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UABinaryFileDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UABinaryFileDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetMetaDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetMetaDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetMetaDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_FieldMetaData Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_FieldMetaData = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_FieldMetaData); + + /// + /// The identifier for the OpcUa_XmlSchema_ConfigurationVersionDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ConfigurationVersionDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ConfigurationVersionDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedDataSetDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PublishedDataSetDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PublishedDataSetDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedDataSetSourceDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PublishedDataSetSourceDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PublishedDataSetSourceDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedVariableDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PublishedVariableDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PublishedVariableDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedDataItemsDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PublishedDataItemsDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PublishedDataItemsDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PublishedEventsDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PublishedEventsDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PublishedEventsDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetWriterDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetWriterDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetWriterDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetWriterTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetWriterTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetWriterTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetWriterMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetWriterMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetWriterMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PubSubGroupDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PubSubGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PubSubGroupDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_WriterGroupDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_WriterGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_WriterGroupDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_WriterGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_WriterGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_WriterGroupTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_WriterGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_WriterGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_WriterGroupMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PubSubConnectionDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PubSubConnectionDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PubSubConnectionDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ConnectionTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ConnectionTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ConnectionTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_NetworkAddressDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_NetworkAddressDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_NetworkAddressDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_NetworkAddressUrlDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_NetworkAddressUrlDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_NetworkAddressUrlDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ReaderGroupDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ReaderGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ReaderGroupDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ReaderGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ReaderGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ReaderGroupTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ReaderGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ReaderGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ReaderGroupMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetReaderDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetReaderDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetReaderDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetReaderTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetReaderTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetReaderTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataSetReaderMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataSetReaderMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataSetReaderMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_SubscribedDataSetDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SubscribedDataSetDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SubscribedDataSetDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_TargetVariablesDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_TargetVariablesDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_TargetVariablesDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_FieldTargetDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_FieldTargetDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_FieldTargetDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_SubscribedDataSetMirrorDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SubscribedDataSetMirrorDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SubscribedDataSetMirrorDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_PubSubConfigurationDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_PubSubConfigurationDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_PubSubConfigurationDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_UadpWriterGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UadpWriterGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UadpWriterGroupMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_UadpDataSetWriterMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UadpDataSetWriterMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UadpDataSetWriterMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_UadpDataSetReaderMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UadpDataSetReaderMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UadpDataSetReaderMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_JsonWriterGroupMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_JsonWriterGroupMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_JsonWriterGroupMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_JsonDataSetWriterMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_JsonDataSetWriterMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_JsonDataSetWriterMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_JsonDataSetReaderMessageDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_JsonDataSetReaderMessageDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_JsonDataSetReaderMessageDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DatagramConnectionTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DatagramConnectionTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DatagramConnectionTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_DatagramWriterGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DatagramWriterGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DatagramWriterGroupTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerConnectionTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_BrokerConnectionTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_BrokerConnectionTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerWriterGroupTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_BrokerWriterGroupTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_BrokerWriterGroupTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_AliasNameDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AliasNameDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AliasNameDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_RolePermissionType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_RolePermissionType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_RolePermissionType); + + /// + /// The identifier for the OpcUa_XmlSchema_DataTypeDefinition Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DataTypeDefinition = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DataTypeDefinition); + + /// + /// The identifier for the OpcUa_XmlSchema_StructureField Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_StructureField = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_StructureField); + + /// + /// The identifier for the OpcUa_XmlSchema_StructureDefinition Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_StructureDefinition = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_StructureDefinition); + + /// + /// The identifier for the OpcUa_XmlSchema_EnumDefinition Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EnumDefinition = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EnumDefinition); + + /// + /// The identifier for the OpcUa_XmlSchema_Argument Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Argument = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Argument); + + /// + /// The identifier for the OpcUa_XmlSchema_EnumValueType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EnumValueType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EnumValueType); + + /// + /// The identifier for the OpcUa_XmlSchema_EnumField Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EnumField = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EnumField); + + /// + /// The identifier for the OpcUa_XmlSchema_OptionSet Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_OptionSet = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_OptionSet); + + /// + /// The identifier for the OpcUa_XmlSchema_Union Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Union = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Union); + + /// + /// The identifier for the OpcUa_XmlSchema_TimeZoneDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_TimeZoneDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_TimeZoneDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ApplicationDescription Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ApplicationDescription = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ApplicationDescription); + + /// + /// The identifier for the OpcUa_XmlSchema_ServerOnNetwork Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ServerOnNetwork = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ServerOnNetwork); + + /// + /// The identifier for the OpcUa_XmlSchema_UserTokenPolicy Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UserTokenPolicy = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UserTokenPolicy); + + /// + /// The identifier for the OpcUa_XmlSchema_EndpointDescription Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EndpointDescription = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EndpointDescription); + + /// + /// The identifier for the OpcUa_XmlSchema_RegisteredServer Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_RegisteredServer = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_RegisteredServer); + + /// + /// The identifier for the OpcUa_XmlSchema_DiscoveryConfiguration Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DiscoveryConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DiscoveryConfiguration); + + /// + /// The identifier for the OpcUa_XmlSchema_MdnsDiscoveryConfiguration Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_MdnsDiscoveryConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_MdnsDiscoveryConfiguration); + + /// + /// The identifier for the OpcUa_XmlSchema_SignedSoftwareCertificate Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SignedSoftwareCertificate = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SignedSoftwareCertificate); + + /// + /// The identifier for the OpcUa_XmlSchema_UserIdentityToken Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UserIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UserIdentityToken); + + /// + /// The identifier for the OpcUa_XmlSchema_AnonymousIdentityToken Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AnonymousIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AnonymousIdentityToken); + + /// + /// The identifier for the OpcUa_XmlSchema_UserNameIdentityToken Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_UserNameIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_UserNameIdentityToken); + + /// + /// The identifier for the OpcUa_XmlSchema_X509IdentityToken Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_X509IdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_X509IdentityToken); + + /// + /// The identifier for the OpcUa_XmlSchema_IssuedIdentityToken Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_IssuedIdentityToken = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_IssuedIdentityToken); + + /// + /// The identifier for the OpcUa_XmlSchema_AddNodesItem Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AddNodesItem = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AddNodesItem); + + /// + /// The identifier for the OpcUa_XmlSchema_AddReferencesItem Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AddReferencesItem = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AddReferencesItem); + + /// + /// The identifier for the OpcUa_XmlSchema_DeleteNodesItem Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DeleteNodesItem = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DeleteNodesItem); + + /// + /// The identifier for the OpcUa_XmlSchema_DeleteReferencesItem Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DeleteReferencesItem = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DeleteReferencesItem); + + /// + /// The identifier for the OpcUa_XmlSchema_RelativePathElement Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_RelativePathElement = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_RelativePathElement); + + /// + /// The identifier for the OpcUa_XmlSchema_RelativePath Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_RelativePath = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_RelativePath); + + /// + /// The identifier for the OpcUa_XmlSchema_EndpointConfiguration Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EndpointConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EndpointConfiguration); + + /// + /// The identifier for the OpcUa_XmlSchema_ContentFilterElement Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ContentFilterElement = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ContentFilterElement); + + /// + /// The identifier for the OpcUa_XmlSchema_ContentFilter Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ContentFilter = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ContentFilter); + + /// + /// The identifier for the OpcUa_XmlSchema_FilterOperand Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_FilterOperand = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_FilterOperand); + + /// + /// The identifier for the OpcUa_XmlSchema_ElementOperand Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ElementOperand = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ElementOperand); + + /// + /// The identifier for the OpcUa_XmlSchema_LiteralOperand Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_LiteralOperand = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_LiteralOperand); + + /// + /// The identifier for the OpcUa_XmlSchema_AttributeOperand Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AttributeOperand = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AttributeOperand); + + /// + /// The identifier for the OpcUa_XmlSchema_SimpleAttributeOperand Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SimpleAttributeOperand = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SimpleAttributeOperand); + + /// + /// The identifier for the OpcUa_XmlSchema_HistoryEvent Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_HistoryEvent = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_HistoryEvent); + + /// + /// The identifier for the OpcUa_XmlSchema_MonitoringFilter Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_MonitoringFilter = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_MonitoringFilter); + + /// + /// The identifier for the OpcUa_XmlSchema_EventFilter Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EventFilter = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EventFilter); + + /// + /// The identifier for the OpcUa_XmlSchema_AggregateConfiguration Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AggregateConfiguration = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AggregateConfiguration); + + /// + /// The identifier for the OpcUa_XmlSchema_HistoryEventFieldList Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_HistoryEventFieldList = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_HistoryEventFieldList); + + /// + /// The identifier for the OpcUa_XmlSchema_BuildInfo Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_BuildInfo = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_BuildInfo); + + /// + /// The identifier for the OpcUa_XmlSchema_RedundantServerDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_RedundantServerDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_RedundantServerDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_EndpointUrlListDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EndpointUrlListDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EndpointUrlListDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_NetworkGroupDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_NetworkGroupDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_NetworkGroupDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ServerStatusDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ServerStatusDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ServerStatusDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_SessionDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SessionDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SessionDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ServiceCounterDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ServiceCounterDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ServiceCounterDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_StatusResult Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_StatusResult = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_StatusResult); + + /// + /// The identifier for the OpcUa_XmlSchema_SubscriptionDiagnosticsDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SubscriptionDiagnosticsDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SubscriptionDiagnosticsDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ModelChangeStructureDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ModelChangeStructureDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ModelChangeStructureDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_SemanticChangeStructureDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_SemanticChangeStructureDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_SemanticChangeStructureDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_Range Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Range = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_Range); + + /// + /// The identifier for the OpcUa_XmlSchema_EUInformation Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_EUInformation = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_EUInformation); + + /// + /// The identifier for the OpcUa_XmlSchema_ComplexNumberType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ComplexNumberType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ComplexNumberType); + + /// + /// The identifier for the OpcUa_XmlSchema_DoubleComplexNumberType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_DoubleComplexNumberType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_DoubleComplexNumberType); + + /// + /// The identifier for the OpcUa_XmlSchema_AxisInformation Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_AxisInformation = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_AxisInformation); + + /// + /// The identifier for the OpcUa_XmlSchema_XVType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_XVType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_XVType); + + /// + /// The identifier for the OpcUa_XmlSchema_ProgramDiagnosticDataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ProgramDiagnosticDataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ProgramDiagnosticDataType); + + /// + /// The identifier for the OpcUa_XmlSchema_ProgramDiagnostic2DataType Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_ProgramDiagnostic2DataType = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_ProgramDiagnostic2DataType); + + /// + /// The identifier for the OpcUa_XmlSchema_Annotation Variable. + /// + public static readonly NodeId OpcUa_XmlSchema_Annotation = new NodeId(Opc.Ua.Variables.OpcUa_XmlSchema_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(Opc.Ua.VariableTypes.BaseVariableType); + + /// + /// The identifier for the BaseDataVariableType VariableType. + /// + public static readonly NodeId BaseDataVariableType = new NodeId(Opc.Ua.VariableTypes.BaseDataVariableType); + + /// + /// The identifier for the PropertyType VariableType. + /// + public static readonly NodeId PropertyType = new NodeId(Opc.Ua.VariableTypes.PropertyType); + + /// + /// The identifier for the DataTypeDescriptionType VariableType. + /// + public static readonly NodeId DataTypeDescriptionType = new NodeId(Opc.Ua.VariableTypes.DataTypeDescriptionType); + + /// + /// The identifier for the DataTypeDictionaryType VariableType. + /// + public static readonly NodeId DataTypeDictionaryType = new NodeId(Opc.Ua.VariableTypes.DataTypeDictionaryType); + + /// + /// The identifier for the ServerVendorCapabilityType VariableType. + /// + public static readonly NodeId ServerVendorCapabilityType = new NodeId(Opc.Ua.VariableTypes.ServerVendorCapabilityType); + + /// + /// The identifier for the ServerStatusType VariableType. + /// + public static readonly NodeId ServerStatusType = new NodeId(Opc.Ua.VariableTypes.ServerStatusType); + + /// + /// The identifier for the BuildInfoType VariableType. + /// + public static readonly NodeId BuildInfoType = new NodeId(Opc.Ua.VariableTypes.BuildInfoType); + + /// + /// The identifier for the ServerDiagnosticsSummaryType VariableType. + /// + public static readonly NodeId ServerDiagnosticsSummaryType = new NodeId(Opc.Ua.VariableTypes.ServerDiagnosticsSummaryType); + + /// + /// The identifier for the SamplingIntervalDiagnosticsArrayType VariableType. + /// + public static readonly NodeId SamplingIntervalDiagnosticsArrayType = new NodeId(Opc.Ua.VariableTypes.SamplingIntervalDiagnosticsArrayType); + + /// + /// The identifier for the SamplingIntervalDiagnosticsType VariableType. + /// + public static readonly NodeId SamplingIntervalDiagnosticsType = new NodeId(Opc.Ua.VariableTypes.SamplingIntervalDiagnosticsType); + + /// + /// The identifier for the SubscriptionDiagnosticsArrayType VariableType. + /// + public static readonly NodeId SubscriptionDiagnosticsArrayType = new NodeId(Opc.Ua.VariableTypes.SubscriptionDiagnosticsArrayType); + + /// + /// The identifier for the SubscriptionDiagnosticsType VariableType. + /// + public static readonly NodeId SubscriptionDiagnosticsType = new NodeId(Opc.Ua.VariableTypes.SubscriptionDiagnosticsType); + + /// + /// The identifier for the SessionDiagnosticsArrayType VariableType. + /// + public static readonly NodeId SessionDiagnosticsArrayType = new NodeId(Opc.Ua.VariableTypes.SessionDiagnosticsArrayType); + + /// + /// The identifier for the SessionDiagnosticsVariableType VariableType. + /// + public static readonly NodeId SessionDiagnosticsVariableType = new NodeId(Opc.Ua.VariableTypes.SessionDiagnosticsVariableType); + + /// + /// The identifier for the SessionSecurityDiagnosticsArrayType VariableType. + /// + public static readonly NodeId SessionSecurityDiagnosticsArrayType = new NodeId(Opc.Ua.VariableTypes.SessionSecurityDiagnosticsArrayType); + + /// + /// The identifier for the SessionSecurityDiagnosticsType VariableType. + /// + public static readonly NodeId SessionSecurityDiagnosticsType = new NodeId(Opc.Ua.VariableTypes.SessionSecurityDiagnosticsType); + + /// + /// The identifier for the OptionSetType VariableType. + /// + public static readonly NodeId OptionSetType = new NodeId(Opc.Ua.VariableTypes.OptionSetType); + + /// + /// The identifier for the SelectionListType VariableType. + /// + public static readonly NodeId SelectionListType = new NodeId(Opc.Ua.VariableTypes.SelectionListType); + + /// + /// The identifier for the AudioVariableType VariableType. + /// + public static readonly NodeId AudioVariableType = new NodeId(Opc.Ua.VariableTypes.AudioVariableType); + + /// + /// The identifier for the StateVariableType VariableType. + /// + public static readonly NodeId StateVariableType = new NodeId(Opc.Ua.VariableTypes.StateVariableType); + + /// + /// The identifier for the TransitionVariableType VariableType. + /// + public static readonly NodeId TransitionVariableType = new NodeId(Opc.Ua.VariableTypes.TransitionVariableType); + + /// + /// The identifier for the FiniteStateVariableType VariableType. + /// + public static readonly NodeId FiniteStateVariableType = new NodeId(Opc.Ua.VariableTypes.FiniteStateVariableType); + + /// + /// The identifier for the FiniteTransitionVariableType VariableType. + /// + public static readonly NodeId FiniteTransitionVariableType = new NodeId(Opc.Ua.VariableTypes.FiniteTransitionVariableType); + + /// + /// The identifier for the GuardVariableType VariableType. + /// + public static readonly NodeId GuardVariableType = new NodeId(Opc.Ua.VariableTypes.GuardVariableType); + + /// + /// The identifier for the ExpressionGuardVariableType VariableType. + /// + public static readonly NodeId ExpressionGuardVariableType = new NodeId(Opc.Ua.VariableTypes.ExpressionGuardVariableType); + + /// + /// The identifier for the ElseGuardVariableType VariableType. + /// + public static readonly NodeId ElseGuardVariableType = new NodeId(Opc.Ua.VariableTypes.ElseGuardVariableType); + + /// + /// The identifier for the RationalNumberType VariableType. + /// + public static readonly NodeId RationalNumberType = new NodeId(Opc.Ua.VariableTypes.RationalNumberType); + + /// + /// The identifier for the VectorType VariableType. + /// + public static readonly NodeId VectorType = new NodeId(Opc.Ua.VariableTypes.VectorType); + + /// + /// The identifier for the ThreeDVectorType VariableType. + /// + public static readonly NodeId ThreeDVectorType = new NodeId(Opc.Ua.VariableTypes.ThreeDVectorType); + + /// + /// The identifier for the CartesianCoordinatesType VariableType. + /// + public static readonly NodeId CartesianCoordinatesType = new NodeId(Opc.Ua.VariableTypes.CartesianCoordinatesType); + + /// + /// The identifier for the ThreeDCartesianCoordinatesType VariableType. + /// + public static readonly NodeId ThreeDCartesianCoordinatesType = new NodeId(Opc.Ua.VariableTypes.ThreeDCartesianCoordinatesType); + + /// + /// The identifier for the OrientationType VariableType. + /// + public static readonly NodeId OrientationType = new NodeId(Opc.Ua.VariableTypes.OrientationType); + + /// + /// The identifier for the ThreeDOrientationType VariableType. + /// + public static readonly NodeId ThreeDOrientationType = new NodeId(Opc.Ua.VariableTypes.ThreeDOrientationType); + + /// + /// The identifier for the FrameType VariableType. + /// + public static readonly NodeId FrameType = new NodeId(Opc.Ua.VariableTypes.FrameType); + + /// + /// The identifier for the ThreeDFrameType VariableType. + /// + public static readonly NodeId ThreeDFrameType = new NodeId(Opc.Ua.VariableTypes.ThreeDFrameType); + + /// + /// The identifier for the DataItemType VariableType. + /// + public static readonly NodeId DataItemType = new NodeId(Opc.Ua.VariableTypes.DataItemType); + + /// + /// The identifier for the BaseAnalogType VariableType. + /// + public static readonly NodeId BaseAnalogType = new NodeId(Opc.Ua.VariableTypes.BaseAnalogType); + + /// + /// The identifier for the AnalogItemType VariableType. + /// + public static readonly NodeId AnalogItemType = new NodeId(Opc.Ua.VariableTypes.AnalogItemType); + + /// + /// The identifier for the AnalogUnitType VariableType. + /// + public static readonly NodeId AnalogUnitType = new NodeId(Opc.Ua.VariableTypes.AnalogUnitType); + + /// + /// The identifier for the AnalogUnitRangeType VariableType. + /// + public static readonly NodeId AnalogUnitRangeType = new NodeId(Opc.Ua.VariableTypes.AnalogUnitRangeType); + + /// + /// The identifier for the DiscreteItemType VariableType. + /// + public static readonly NodeId DiscreteItemType = new NodeId(Opc.Ua.VariableTypes.DiscreteItemType); + + /// + /// The identifier for the TwoStateDiscreteType VariableType. + /// + public static readonly NodeId TwoStateDiscreteType = new NodeId(Opc.Ua.VariableTypes.TwoStateDiscreteType); + + /// + /// The identifier for the MultiStateDiscreteType VariableType. + /// + public static readonly NodeId MultiStateDiscreteType = new NodeId(Opc.Ua.VariableTypes.MultiStateDiscreteType); + + /// + /// The identifier for the MultiStateValueDiscreteType VariableType. + /// + public static readonly NodeId MultiStateValueDiscreteType = new NodeId(Opc.Ua.VariableTypes.MultiStateValueDiscreteType); + + /// + /// The identifier for the ArrayItemType VariableType. + /// + public static readonly NodeId ArrayItemType = new NodeId(Opc.Ua.VariableTypes.ArrayItemType); + + /// + /// The identifier for the YArrayItemType VariableType. + /// + public static readonly NodeId YArrayItemType = new NodeId(Opc.Ua.VariableTypes.YArrayItemType); + + /// + /// The identifier for the XYArrayItemType VariableType. + /// + public static readonly NodeId XYArrayItemType = new NodeId(Opc.Ua.VariableTypes.XYArrayItemType); + + /// + /// The identifier for the ImageItemType VariableType. + /// + public static readonly NodeId ImageItemType = new NodeId(Opc.Ua.VariableTypes.ImageItemType); + + /// + /// The identifier for the CubeItemType VariableType. + /// + public static readonly NodeId CubeItemType = new NodeId(Opc.Ua.VariableTypes.CubeItemType); + + /// + /// The identifier for the NDimensionArrayItemType VariableType. + /// + public static readonly NodeId NDimensionArrayItemType = new NodeId(Opc.Ua.VariableTypes.NDimensionArrayItemType); + + /// + /// The identifier for the TwoStateVariableType VariableType. + /// + public static readonly NodeId TwoStateVariableType = new NodeId(Opc.Ua.VariableTypes.TwoStateVariableType); + + /// + /// The identifier for the ConditionVariableType VariableType. + /// + public static readonly NodeId ConditionVariableType = new NodeId(Opc.Ua.VariableTypes.ConditionVariableType); + + /// + /// The identifier for the AlarmRateVariableType VariableType. + /// + public static readonly NodeId AlarmRateVariableType = new NodeId(Opc.Ua.VariableTypes.AlarmRateVariableType); + + /// + /// The identifier for the ProgramDiagnosticType VariableType. + /// + public static readonly NodeId ProgramDiagnosticType = new NodeId(Opc.Ua.VariableTypes.ProgramDiagnosticType); + + /// + /// The identifier for the ProgramDiagnostic2Type VariableType. + /// + public static readonly NodeId ProgramDiagnostic2Type = new NodeId(Opc.Ua.VariableTypes.ProgramDiagnostic2Type); + + /// + /// The identifier for the PubSubDiagnosticsCounterType VariableType. + /// + public static readonly NodeId PubSubDiagnosticsCounterType = new NodeId(Opc.Ua.VariableTypes.PubSubDiagnosticsCounterType); + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteBaseType VariableType. + /// + public static readonly NodeId MultiStateDictionaryEntryDiscreteBaseType = new NodeId(Opc.Ua.VariableTypes.MultiStateDictionaryEntryDiscreteBaseType); + + /// + /// The identifier for the MultiStateDictionaryEntryDiscreteType VariableType. + /// + public static readonly NodeId MultiStateDictionaryEntryDiscreteType = new NodeId(Opc.Ua.VariableTypes.MultiStateDictionaryEntryDiscreteType); + } + #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 A component. + /// + public const string A = "A"; + + /// + /// 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 AccessLevelExType component. + /// + public const string AccessLevelExType = "AccessLevelExType"; + + /// + /// The BrowseName for the AccessLevelType component. + /// + public const string AccessLevelType = "AccessLevelType"; + + /// + /// The BrowseName for the AccessRestrictionType component. + /// + public const string AccessRestrictionType = "AccessRestrictionType"; + + /// + /// 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 Active component. + /// + public const string Active = "Active"; + + /// + /// The BrowseName for the ActiveState component. + /// + public const string ActiveState = "ActiveState"; + + /// + /// The BrowseName for the Actual component. + /// + public const string Actual = "Actual"; + + /// + /// The BrowseName for the ActualSessionTimeout component. + /// + public const string ActualSessionTimeout = "ActualSessionTimeout"; + + /// + /// The BrowseName for the AddApplication component. + /// + public const string AddApplication = "AddApplication"; + + /// + /// The BrowseName for the AddCertificate component. + /// + public const string AddCertificate = "AddCertificate"; + + /// + /// The BrowseName for the AddComment component. + /// + public const string AddComment = "AddComment"; + + /// + /// The BrowseName for the AddConnection component. + /// + public const string AddConnection = "AddConnection"; + + /// + /// The BrowseName for the AddDataSetFolder component. + /// + public const string AddDataSetFolder = "AddDataSetFolder"; + + /// + /// The BrowseName for the AddDataSetReader component. + /// + public const string AddDataSetReader = "AddDataSetReader"; + + /// + /// The BrowseName for the AddDataSetWriter component. + /// + public const string AddDataSetWriter = "AddDataSetWriter"; + + /// + /// The BrowseName for the AddEndpoint component. + /// + public const string AddEndpoint = "AddEndpoint"; + + /// + /// The BrowseName for the AddExtensionField component. + /// + public const string AddExtensionField = "AddExtensionField"; + + /// + /// The BrowseName for the AddIdentity component. + /// + public const string AddIdentity = "AddIdentity"; + + /// + /// The BrowseName for the AdditionalGroup_Placeholder component. + /// + public const string AdditionalGroup_Placeholder = ""; + + /// + /// 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 AddPublishedDataItems component. + /// + public const string AddPublishedDataItems = "AddPublishedDataItems"; + + /// + /// The BrowseName for the AddPublishedDataItemsTemplate component. + /// + public const string AddPublishedDataItemsTemplate = "AddPublishedDataItemsTemplate"; + + /// + /// The BrowseName for the AddPublishedEvents component. + /// + public const string AddPublishedEvents = "AddPublishedEvents"; + + /// + /// The BrowseName for the AddPublishedEventsTemplate component. + /// + public const string AddPublishedEventsTemplate = "AddPublishedEventsTemplate"; + + /// + /// The BrowseName for the AddReaderGroup component. + /// + public const string AddReaderGroup = "AddReaderGroup"; + + /// + /// 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 Address component. + /// + public const string Address = "Address"; + + /// + /// The BrowseName for the AddressSpaceFileType component. + /// + public const string AddressSpaceFileType = "AddressSpaceFileType"; + + /// + /// The BrowseName for the AddRole component. + /// + public const string AddRole = "AddRole"; + + /// + /// The BrowseName for the AddSecurityGroup component. + /// + public const string AddSecurityGroup = "AddSecurityGroup"; + + /// + /// The BrowseName for the AddTargetVariables component. + /// + public const string AddTargetVariables = "AddTargetVariables"; + + /// + /// The BrowseName for the AddVariables component. + /// + public const string AddVariables = "AddVariables"; + + /// + /// The BrowseName for the AddWriterGroup component. + /// + public const string AddWriterGroup = "AddWriterGroup"; + + /// + /// The BrowseName for the AgencyId component. + /// + public const string AgencyId = "AgencyId"; + + /// + /// 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 AlarmConditionInstance_Placeholder component. + /// + public const string AlarmConditionInstance_Placeholder = ""; + + /// + /// The BrowseName for the AlarmConditionType component. + /// + public const string AlarmConditionType = "AlarmConditionType"; + + /// + /// The BrowseName for the AlarmCount component. + /// + public const string AlarmCount = "AlarmCount"; + + /// + /// The BrowseName for the AlarmGroup_Placeholder component. + /// + public const string AlarmGroup_Placeholder = ""; + + /// + /// The BrowseName for the AlarmGroupMember component. + /// + public const string AlarmGroupMember = "AlarmGroupMember"; + + /// + /// The BrowseName for the AlarmGroupType component. + /// + public const string AlarmGroupType = "AlarmGroupType"; + + /// + /// The BrowseName for the AlarmMetricsType component. + /// + public const string AlarmMetricsType = "AlarmMetricsType"; + + /// + /// The BrowseName for the AlarmRateVariableType component. + /// + public const string AlarmRateVariableType = "AlarmRateVariableType"; + + /// + /// The BrowseName for the Alias_Placeholder component. + /// + public const string Alias_Placeholder = ""; + + /// + /// The BrowseName for the Aliases component. + /// + public const string Aliases = "Aliases"; + + /// + /// The BrowseName for the AliasFor component. + /// + public const string AliasFor = "AliasFor"; + + /// + /// The BrowseName for the AliasNameCategoryType component. + /// + public const string AliasNameCategoryType = "AliasNameCategoryType"; + + /// + /// The BrowseName for the AliasNameDataType component. + /// + public const string AliasNameDataType = "AliasNameDataType"; + + /// + /// The BrowseName for the AliasNameType component. + /// + public const string AliasNameType = "AliasNameType"; + + /// + /// 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 AnalogUnitRangeType component. + /// + public const string AnalogUnitRangeType = "AnalogUnitRangeType"; + + /// + /// The BrowseName for the AnalogUnitType component. + /// + public const string AnalogUnitType = "AnalogUnitType"; + + /// + /// The BrowseName for the AngleUnit component. + /// + public const string AngleUnit = "AngleUnit"; + + /// + /// 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 ApplicationCertificateType component. + /// + public const string ApplicationCertificateType = "ApplicationCertificateType"; + + /// + /// 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 Applications component. + /// + public const string Applications = "Applications"; + + /// + /// The BrowseName for the ApplicationsExclude component. + /// + public const string ApplicationsExclude = "ApplicationsExclude"; + + /// + /// The BrowseName for the ApplicationType component. + /// + public const string ApplicationType = "ApplicationType"; + + /// + /// The BrowseName for the ApplyChanges component. + /// + public const string ApplyChanges = "ApplyChanges"; + + /// + /// The BrowseName for the ApplyWrite component. + /// + public const string ApplyWrite = "ApplyWrite"; + + /// + /// The BrowseName for the ApplyWriteToError component. + /// + public const string ApplyWriteToError = "ApplyWriteToError"; + + /// + /// The BrowseName for the ApplyWriteToIdle component. + /// + public const string ApplyWriteToIdle = "ApplyWriteToIdle"; + + /// + /// 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 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 AudibleEnabled component. + /// + public const string AudibleEnabled = "AudibleEnabled"; + + /// + /// The BrowseName for the AudibleSound component. + /// + public const string AudibleSound = "AudibleSound"; + + /// + /// The BrowseName for the AudioDataType component. + /// + public const string AudioDataType = "AudioDataType"; + + /// + /// The BrowseName for the AudioVariableType component. + /// + public const string AudioVariableType = "AudioVariableType"; + + /// + /// 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 AuditConditionOutOfServiceEventType component. + /// + public const string AuditConditionOutOfServiceEventType = "AuditConditionOutOfServiceEventType"; + + /// + /// The BrowseName for the AuditConditionResetEventType component. + /// + public const string AuditConditionResetEventType = "AuditConditionResetEventType"; + + /// + /// 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 AuditConditionSilenceEventType component. + /// + public const string AuditConditionSilenceEventType = "AuditConditionSilenceEventType"; + + /// + /// The BrowseName for the AuditConditionSuppressionEventType component. + /// + public const string AuditConditionSuppressionEventType = "AuditConditionSuppressionEventType"; + + /// + /// 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 AuditHistoryAnnotationUpdateEventType component. + /// + public const string AuditHistoryAnnotationUpdateEventType = "AuditHistoryAnnotationUpdateEventType"; + + /// + /// 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 AuthenticationProfileUri component. + /// + public const string AuthenticationProfileUri = "AuthenticationProfileUri"; + + /// + /// The BrowseName for the AuthorizationServiceConfigurationType component. + /// + public const string AuthorizationServiceConfigurationType = "AuthorizationServiceConfigurationType"; + + /// + /// The BrowseName for the AuthorizationServices component. + /// + public const string AuthorizationServices = "AuthorizationServices"; + + /// + /// The BrowseName for the AutoDelete component. + /// + public const string AutoDelete = "AutoDelete"; + + /// + /// The BrowseName for the AvailableStates component. + /// + public const string AvailableStates = "AvailableStates"; + + /// + /// The BrowseName for the AvailableTransitions component. + /// + public const string AvailableTransitions = "AvailableTransitions"; + + /// + /// The BrowseName for the AverageAlarmRate component. + /// + public const string AverageAlarmRate = "AverageAlarmRate"; + + /// + /// 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 B component. + /// + public const string B = "B"; + + /// + /// The BrowseName for the BaseAnalogType component. + /// + public const string BaseAnalogType = "BaseAnalogType"; + + /// + /// 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 BaseFrame component. + /// + public const string BaseFrame = "BaseFrame"; + + /// + /// The BrowseName for the BaseHighHighLimit component. + /// + public const string BaseHighHighLimit = "BaseHighHighLimit"; + + /// + /// The BrowseName for the BaseHighLimit component. + /// + public const string BaseHighLimit = "BaseHighLimit"; + + /// + /// The BrowseName for the BaseInterfaceType component. + /// + public const string BaseInterfaceType = "BaseInterfaceType"; + + /// + /// The BrowseName for the BaseLowLimit component. + /// + public const string BaseLowLimit = "BaseLowLimit"; + + /// + /// The BrowseName for the BaseLowLowLimit component. + /// + public const string BaseLowLowLimit = "BaseLowLowLimit"; + + /// + /// 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 BaseSetpointNode component. + /// + public const string BaseSetpointNode = "BaseSetpointNode"; + + /// + /// 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 BrokerConnectionTransportDataType component. + /// + public const string BrokerConnectionTransportDataType = "BrokerConnectionTransportDataType"; + + /// + /// The BrowseName for the BrokerConnectionTransportType component. + /// + public const string BrokerConnectionTransportType = "BrokerConnectionTransportType"; + + /// + /// The BrowseName for the BrokerDataSetReaderTransportDataType component. + /// + public const string BrokerDataSetReaderTransportDataType = "BrokerDataSetReaderTransportDataType"; + + /// + /// The BrowseName for the BrokerDataSetReaderTransportType component. + /// + public const string BrokerDataSetReaderTransportType = "BrokerDataSetReaderTransportType"; + + /// + /// The BrowseName for the BrokerDataSetWriterTransportDataType component. + /// + public const string BrokerDataSetWriterTransportDataType = "BrokerDataSetWriterTransportDataType"; + + /// + /// The BrowseName for the BrokerDataSetWriterTransportType component. + /// + public const string BrokerDataSetWriterTransportType = "BrokerDataSetWriterTransportType"; + + /// + /// The BrowseName for the BrokerTransportQualityOfService component. + /// + public const string BrokerTransportQualityOfService = "BrokerTransportQualityOfService"; + + /// + /// The BrowseName for the BrokerWriterGroupTransportDataType component. + /// + public const string BrokerWriterGroupTransportDataType = "BrokerWriterGroupTransportDataType"; + + /// + /// The BrowseName for the BrokerWriterGroupTransportType component. + /// + public const string BrokerWriterGroupTransportType = "BrokerWriterGroupTransportType"; + + /// + /// 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 C component. + /// + public const string C = "C"; + + /// + /// 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 CartesianCoordinates component. + /// + public const string CartesianCoordinates = "CartesianCoordinates"; + + /// + /// The BrowseName for the CartesianCoordinatesType component. + /// + public const string CartesianCoordinatesType = "CartesianCoordinatesType"; + + /// + /// The BrowseName for the Certificate component. + /// + public const string Certificate = "Certificate"; + + /// + /// The BrowseName for the CertificateExpirationAlarmType component. + /// + public const string CertificateExpirationAlarmType = "CertificateExpirationAlarmType"; + + /// + /// The BrowseName for the CertificateExpired component. + /// + public const string CertificateExpired = "CertificateExpired"; + + /// + /// The BrowseName for the CertificateGroup component. + /// + public const string CertificateGroup = "CertificateGroup"; + + /// + /// The BrowseName for the CertificateGroupFolderType component. + /// + public const string CertificateGroupFolderType = "CertificateGroupFolderType"; + + /// + /// The BrowseName for the CertificateGroups component. + /// + public const string CertificateGroups = "CertificateGroups"; + + /// + /// The BrowseName for the CertificateGroupType component. + /// + public const string CertificateGroupType = "CertificateGroupType"; + + /// + /// The BrowseName for the CertificateType component. + /// + public const string CertificateType = "CertificateType"; + + /// + /// The BrowseName for the CertificateTypes component. + /// + public const string CertificateTypes = "CertificateTypes"; + + /// + /// The BrowseName for the CertificateUpdatedAuditEventType component. + /// + public const string CertificateUpdatedAuditEventType = "CertificateUpdatedAuditEventType"; + + /// + /// 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 ChoiceStateType component. + /// + public const string ChoiceStateType = "ChoiceStateType"; + + /// + /// The BrowseName for the Classification component. + /// + public const string Classification = "Classification"; + + /// + /// 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 ClientName_Placeholder component. + /// + public const string ClientName_Placeholder = ""; + + /// + /// The BrowseName for the ClientProcessingTimeout component. + /// + public const string ClientProcessingTimeout = "ClientProcessingTimeout"; + + /// + /// 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 CloseAndCommit component. + /// + public const string CloseAndCommit = "CloseAndCommit"; + + /// + /// The BrowseName for the CloseAndUpdate component. + /// + public const string CloseAndUpdate = "CloseAndUpdate"; + + /// + /// 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 ConditionClassId component. + /// + public const string ConditionClassId = "ConditionClassId"; + + /// + /// The BrowseName for the ConditionClassName component. + /// + public const string ConditionClassName = "ConditionClassName"; + + /// + /// The BrowseName for the ConditionEventId component. + /// + public const string ConditionEventId = "ConditionEventId"; + + /// + /// 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 ConditionRefresh2 component. + /// + public const string ConditionRefresh2 = "ConditionRefresh2"; + + /// + /// The BrowseName for the ConditionSubClassId component. + /// + public const string ConditionSubClassId = "ConditionSubClassId"; + + /// + /// The BrowseName for the ConditionSubClassName component. + /// + public const string ConditionSubClassName = "ConditionSubClassName"; + + /// + /// 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 ConfigurationVersion component. + /// + public const string ConfigurationVersion = "ConfigurationVersion"; + + /// + /// The BrowseName for the ConfigurationVersionDataType component. + /// + public const string ConfigurationVersionDataType = "ConfigurationVersionDataType"; + + /// + /// The BrowseName for the ConfiguredSize component. + /// + public const string ConfiguredSize = "ConfiguredSize"; + + /// + /// 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 ConnectionId component. + /// + public const string ConnectionId = "ConnectionId"; + + /// + /// The BrowseName for the ConnectionName_Placeholder component. + /// + public const string ConnectionName_Placeholder = ""; + + /// + /// The BrowseName for the ConnectionProperties component. + /// + public const string ConnectionProperties = "ConnectionProperties"; + + /// + /// The BrowseName for the ConnectionTransportDataType component. + /// + public const string ConnectionTransportDataType = "ConnectionTransportDataType"; + + /// + /// The BrowseName for the ConnectionTransportType component. + /// + public const string ConnectionTransportType = "ConnectionTransportType"; + + /// + /// The BrowseName for the Constant component. + /// + public const string Constant = "Constant"; + + /// + /// 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 Context component. + /// + public const string Context = "Context"; + + /// + /// 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 Counters component. + /// + public const string Counters = "Counters"; + + /// + /// 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 CreateCredential component. + /// + public const string CreateCredential = "CreateCredential"; + + /// + /// The BrowseName for the CreateDataSetMirror component. + /// + public const string CreateDataSetMirror = "CreateDataSetMirror"; + + /// + /// The BrowseName for the CreateDirectory component. + /// + public const string CreateDirectory = "CreateDirectory"; + + /// + /// The BrowseName for the CreateFile component. + /// + public const string CreateFile = "CreateFile"; + + /// + /// 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 CreateSigningRequest component. + /// + public const string CreateSigningRequest = "CreateSigningRequest"; + + /// + /// 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 CreateTargetVariables component. + /// + public const string CreateTargetVariables = "CreateTargetVariables"; + + /// + /// 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 CurrencyUnit component. + /// + public const string CurrencyUnit = "CurrencyUnit"; + + /// + /// The BrowseName for the CurrencyUnitType component. + /// + public const string CurrencyUnitType = "CurrencyUnitType"; + + /// + /// The BrowseName for the CurrentAlarmRate component. + /// + public const string CurrentAlarmRate = "CurrentAlarmRate"; + + /// + /// 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 DatagramConnectionTransportDataType component. + /// + public const string DatagramConnectionTransportDataType = "DatagramConnectionTransportDataType"; + + /// + /// The BrowseName for the DatagramConnectionTransportType component. + /// + public const string DatagramConnectionTransportType = "DatagramConnectionTransportType"; + + /// + /// The BrowseName for the DatagramWriterGroupTransportDataType component. + /// + public const string DatagramWriterGroupTransportDataType = "DatagramWriterGroupTransportDataType"; + + /// + /// The BrowseName for the DatagramWriterGroupTransportType component. + /// + public const string DatagramWriterGroupTransportType = "DatagramWriterGroupTransportType"; + + /// + /// The BrowseName for the DataItemType component. + /// + public const string DataItemType = "DataItemType"; + + /// + /// The BrowseName for the DataSetClassId component. + /// + public const string DataSetClassId = "DataSetClassId"; + + /// + /// The BrowseName for the DataSetFieldContentMask component. + /// + public const string DataSetFieldContentMask = "DataSetFieldContentMask"; + + /// + /// The BrowseName for the DataSetFieldFlags component. + /// + public const string DataSetFieldFlags = "DataSetFieldFlags"; + + /// + /// The BrowseName for the DataSetFolderName_Placeholder component. + /// + public const string DataSetFolderName_Placeholder = ""; + + /// + /// The BrowseName for the DataSetFolderType component. + /// + public const string DataSetFolderType = "DataSetFolderType"; + + /// + /// The BrowseName for the DataSetMessageContentMask component. + /// + public const string DataSetMessageContentMask = "DataSetMessageContentMask"; + + /// + /// The BrowseName for the DataSetMetaData component. + /// + public const string DataSetMetaData = "DataSetMetaData"; + + /// + /// The BrowseName for the DataSetMetaDataType component. + /// + public const string DataSetMetaDataType = "DataSetMetaDataType"; + + /// + /// The BrowseName for the DataSetOffset component. + /// + public const string DataSetOffset = "DataSetOffset"; + + /// + /// The BrowseName for the DataSetOrdering component. + /// + public const string DataSetOrdering = "DataSetOrdering"; + + /// + /// The BrowseName for the DataSetOrderingType component. + /// + public const string DataSetOrderingType = "DataSetOrderingType"; + + /// + /// The BrowseName for the DataSetReaderDataType component. + /// + public const string DataSetReaderDataType = "DataSetReaderDataType"; + + /// + /// The BrowseName for the DataSetReaderMessageDataType component. + /// + public const string DataSetReaderMessageDataType = "DataSetReaderMessageDataType"; + + /// + /// The BrowseName for the DataSetReaderMessageType component. + /// + public const string DataSetReaderMessageType = "DataSetReaderMessageType"; + + /// + /// The BrowseName for the DataSetReaderName_Placeholder component. + /// + public const string DataSetReaderName_Placeholder = ""; + + /// + /// The BrowseName for the DataSetReaderProperties component. + /// + public const string DataSetReaderProperties = "DataSetReaderProperties"; + + /// + /// The BrowseName for the DataSetReaderTransportDataType component. + /// + public const string DataSetReaderTransportDataType = "DataSetReaderTransportDataType"; + + /// + /// The BrowseName for the DataSetReaderTransportType component. + /// + public const string DataSetReaderTransportType = "DataSetReaderTransportType"; + + /// + /// The BrowseName for the DataSetReaderType component. + /// + public const string DataSetReaderType = "DataSetReaderType"; + + /// + /// The BrowseName for the DataSetToWriter component. + /// + public const string DataSetToWriter = "DataSetToWriter"; + + /// + /// The BrowseName for the DataSetWriterDataType component. + /// + public const string DataSetWriterDataType = "DataSetWriterDataType"; + + /// + /// The BrowseName for the DataSetWriterId component. + /// + public const string DataSetWriterId = "DataSetWriterId"; + + /// + /// The BrowseName for the DataSetWriterMessageDataType component. + /// + public const string DataSetWriterMessageDataType = "DataSetWriterMessageDataType"; + + /// + /// The BrowseName for the DataSetWriterMessageType component. + /// + public const string DataSetWriterMessageType = "DataSetWriterMessageType"; + + /// + /// The BrowseName for the DataSetWriterName_Placeholder component. + /// + public const string DataSetWriterName_Placeholder = ""; + + /// + /// The BrowseName for the DataSetWriterProperties component. + /// + public const string DataSetWriterProperties = "DataSetWriterProperties"; + + /// + /// The BrowseName for the DataSetWriterTransportDataType component. + /// + public const string DataSetWriterTransportDataType = "DataSetWriterTransportDataType"; + + /// + /// The BrowseName for the DataSetWriterTransportType component. + /// + public const string DataSetWriterTransportType = "DataSetWriterTransportType"; + + /// + /// The BrowseName for the DataSetWriterType component. + /// + public const string DataSetWriterType = "DataSetWriterType"; + + /// + /// The BrowseName for the DataTypeAttributes component. + /// + public const string DataTypeAttributes = "DataTypeAttributes"; + + /// + /// The BrowseName for the DataTypeDefinition component. + /// + public const string DataTypeDefinition = "DataTypeDefinition"; + + /// + /// The BrowseName for the DataTypeDescription component. + /// + public const string DataTypeDescription = "DataTypeDescription"; + + /// + /// 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 DataTypeSchemaHeader component. + /// + public const string DataTypeSchemaHeader = "DataTypeSchemaHeader"; + + /// + /// 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 DateString component. + /// + public const string DateString = "DateString"; + + /// + /// 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 Decimal component. + /// + public const string Decimal = "Decimal"; + + /// + /// The BrowseName for the DecimalDataType component. + /// + public const string DecimalDataType = "DecimalDataType"; + + /// + /// The BrowseName for the DecimalString component. + /// + public const string DecimalString = "DecimalString"; + + /// + /// The BrowseName for the DefaultAccessRestrictions component. + /// + public const string DefaultAccessRestrictions = "DefaultAccessRestrictions"; + + /// + /// The BrowseName for the DefaultApplicationGroup component. + /// + public const string DefaultApplicationGroup = "DefaultApplicationGroup"; + + /// + /// The BrowseName for the DefaultBinary component. + /// + public const string DefaultBinary = "Default Binary"; + + /// + /// The BrowseName for the DefaultHttpsGroup component. + /// + public const string DefaultHttpsGroup = "DefaultHttpsGroup"; + + /// + /// The BrowseName for the DefaultInputValues component. + /// + public const string DefaultInputValues = "DefaultInputValues"; + + /// + /// The BrowseName for the DefaultInstanceBrowseName component. + /// + public const string DefaultInstanceBrowseName = "DefaultInstanceBrowseName"; + + /// + /// The BrowseName for the DefaultJson component. + /// + public const string DefaultJson = "Default JSON"; + + /// + /// The BrowseName for the DefaultResponse component. + /// + public const string DefaultResponse = "DefaultResponse"; + + /// + /// The BrowseName for the DefaultRolePermissions component. + /// + public const string DefaultRolePermissions = "DefaultRolePermissions"; + + /// + /// The BrowseName for the DefaultUserRolePermissions component. + /// + public const string DefaultUserRolePermissions = "DefaultUserRolePermissions"; + + /// + /// The BrowseName for the DefaultUserTokenGroup component. + /// + public const string DefaultUserTokenGroup = "DefaultUserTokenGroup"; + + /// + /// 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 DeleteCredential component. + /// + public const string DeleteCredential = "DeleteCredential"; + + /// + /// 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 DeleteFileSystemObject component. + /// + public const string DeleteFileSystemObject = "Delete"; + + /// + /// 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 Denominator component. + /// + public const string Denominator = "Denominator"; + + /// + /// The BrowseName for the Deprecated component. + /// + public const string Deprecated = "Deprecated"; + + /// + /// 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 Diagnostics component. + /// + public const string Diagnostics = "Diagnostics"; + + /// + /// The BrowseName for the DiagnosticsLevel component. + /// + public const string DiagnosticsLevel = "DiagnosticsLevel"; + + /// + /// The BrowseName for the DialogConditionType component. + /// + public const string DialogConditionType = "DialogConditionType"; + + /// + /// The BrowseName for the DialogState component. + /// + public const string DialogState = "DialogState"; + + /// + /// The BrowseName for the Dictionaries component. + /// + public const string Dictionaries = "Dictionaries"; + + /// + /// The BrowseName for the DictionaryEntryName_Placeholder component. + /// + public const string DictionaryEntryName_Placeholder = ""; + + /// + /// The BrowseName for the DictionaryEntryType component. + /// + public const string DictionaryEntryType = "DictionaryEntryType"; + + /// + /// The BrowseName for the DictionaryFolderName_Placeholder component. + /// + public const string DictionaryFolderName_Placeholder = ""; + + /// + /// The BrowseName for the DictionaryFolderType component. + /// + public const string DictionaryFolderType = "DictionaryFolderType"; + + /// + /// 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 DiscoveryAddress component. + /// + public const string DiscoveryAddress = "DiscoveryAddress"; + + /// + /// The BrowseName for the DiscoveryConfiguration component. + /// + public const string DiscoveryConfiguration = "DiscoveryConfiguration"; + + /// + /// The BrowseName for the DiscrepancyAlarmType component. + /// + public const string DiscrepancyAlarmType = "DiscrepancyAlarmType"; + + /// + /// 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 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 DurationString component. + /// + public const string DurationString = "DurationString"; + + /// + /// 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 ElseGuardVariableType component. + /// + public const string ElseGuardVariableType = "ElseGuardVariableType"; + + /// + /// 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 Endpoints component. + /// + public const string Endpoints = "Endpoints"; + + /// + /// The BrowseName for the EndpointsExclude component. + /// + public const string EndpointsExclude = "EndpointsExclude"; + + /// + /// The BrowseName for the EndpointType component. + /// + public const string EndpointType = "EndpointType"; + + /// + /// 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 EndpointUrls component. + /// + public const string EndpointUrls = "EndpointUrls"; + + /// + /// 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 EnumDefinition component. + /// + public const string EnumDefinition = "EnumDefinition"; + + /// + /// The BrowseName for the EnumDescription component. + /// + public const string EnumDescription = "EnumDescription"; + + /// + /// The BrowseName for the EnumDictionaryEntries component. + /// + public const string EnumDictionaryEntries = "EnumDictionaryEntries"; + + /// + /// The BrowseName for the Enumeration component. + /// + public const string Enumeration = "Enumeration"; + + /// + /// The BrowseName for the EnumField component. + /// + public const string EnumField = "EnumField"; + + /// + /// 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 Error component. + /// + public const string Error = "Error"; + + /// + /// The BrowseName for the ErrorToIdle component. + /// + public const string ErrorToIdle = "ErrorToIdle"; + + /// + /// The BrowseName for the EstimatedReturnTime component. + /// + public const string EstimatedReturnTime = "EstimatedReturnTime"; + + /// + /// 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 EventNotifierType component. + /// + public const string EventNotifierType = "EventNotifierType"; + + /// + /// 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 ExpectedTime component. + /// + public const string ExpectedTime = "ExpectedTime"; + + /// + /// The BrowseName for the ExpirationDate component. + /// + public const string ExpirationDate = "ExpirationDate"; + + /// + /// The BrowseName for the ExpirationLimit component. + /// + public const string ExpirationLimit = "ExpirationLimit"; + + /// + /// The BrowseName for the ExportNamespace component. + /// + public const string ExportNamespace = "ExportNamespace"; + + /// + /// The BrowseName for the Expression component. + /// + public const string Expression = "Expression"; + + /// + /// The BrowseName for the ExpressionGuardVariableType component. + /// + public const string ExpressionGuardVariableType = "ExpressionGuardVariableType"; + + /// + /// The BrowseName for the ExtensionFieldName_Placeholder component. + /// + public const string ExtensionFieldName_Placeholder = ""; + + /// + /// The BrowseName for the ExtensionFields component. + /// + public const string ExtensionFields = "ExtensionFields"; + + /// + /// The BrowseName for the ExtensionFieldsType component. + /// + public const string ExtensionFieldsType = "ExtensionFieldsType"; + + /// + /// The BrowseName for the FalseState component. + /// + public const string FalseState = "FalseState"; + + /// + /// The BrowseName for the FieldMetaData component. + /// + public const string FieldMetaData = "FieldMetaData"; + + /// + /// The BrowseName for the FieldTargetDataType component. + /// + public const string FieldTargetDataType = "FieldTargetDataType"; + + /// + /// The BrowseName for the FileDirectoryName_Placeholder component. + /// + public const string FileDirectoryName_Placeholder = ""; + + /// + /// The BrowseName for the FileDirectoryType component. + /// + public const string FileDirectoryType = "FileDirectoryType"; + + /// + /// The BrowseName for the FileName_Placeholder component. + /// + public const string FileName_Placeholder = ""; + + /// + /// The BrowseName for the FileSystem component. + /// + public const string FileSystem = "FileSystem"; + + /// + /// The BrowseName for the FileTransferStateMachineType component. + /// + public const string FileTransferStateMachineType = "FileTransferStateMachineType"; + + /// + /// 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 FindAlias component. + /// + public const string FindAlias = "FindAlias"; + + /// + /// The BrowseName for the FindServersOnNetworkRequest component. + /// + public const string FindServersOnNetworkRequest = "FindServersOnNetworkRequest"; + + /// + /// The BrowseName for the FindServersOnNetworkResponse component. + /// + public const string FindServersOnNetworkResponse = "FindServersOnNetworkResponse"; + + /// + /// 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 FirstInGroup component. + /// + public const string FirstInGroup = "FirstInGroup"; + + /// + /// The BrowseName for the FirstInGroupFlag component. + /// + public const string FirstInGroupFlag = "FirstInGroupFlag"; + + /// + /// The BrowseName for the FixedBase component. + /// + public const string FixedBase = "FixedBase"; + + /// + /// 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 Frame component. + /// + public const string Frame = "Frame"; + + /// + /// The BrowseName for the FrameType component. + /// + public const string FrameType = "FrameType"; + + /// + /// 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 GenerateFileForRead component. + /// + public const string GenerateFileForRead = "GenerateFileForRead"; + + /// + /// The BrowseName for the GenerateFileForWrite component. + /// + public const string GenerateFileForWrite = "GenerateFileForWrite"; + + /// + /// The BrowseName for the GeneratesEvent component. + /// + public const string GeneratesEvent = "GeneratesEvent"; + + /// + /// The BrowseName for the GenericAttributes component. + /// + public const string GenericAttributes = "GenericAttributes"; + + /// + /// The BrowseName for the GenericAttributeValue component. + /// + public const string GenericAttributeValue = "GenericAttributeValue"; + + /// + /// The BrowseName for the GetEncryptingKey component. + /// + public const string GetEncryptingKey = "GetEncryptingKey"; + + /// + /// 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 GetPosition component. + /// + public const string GetPosition = "GetPosition"; + + /// + /// The BrowseName for the GetRejectedList component. + /// + public const string GetRejectedList = "GetRejectedList"; + + /// + /// The BrowseName for the GetSecurityGroup component. + /// + public const string GetSecurityGroup = "GetSecurityGroup"; + + /// + /// The BrowseName for the GetSecurityKeys component. + /// + public const string GetSecurityKeys = "GetSecurityKeys"; + + /// + /// The BrowseName for the GroupId component. + /// + public const string GroupId = "GroupId"; + + /// + /// The BrowseName for the GroupProperties component. + /// + public const string GroupProperties = "GroupProperties"; + + /// + /// The BrowseName for the GroupVersion component. + /// + public const string GroupVersion = "GroupVersion"; + + /// + /// The BrowseName for the GuardVariableType component. + /// + public const string GuardVariableType = "GuardVariableType"; + + /// + /// 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 HasAddIn component. + /// + public const string HasAddIn = "HasAddIn"; + + /// + /// The BrowseName for the HasAlarmSuppressionGroup component. + /// + public const string HasAlarmSuppressionGroup = "HasAlarmSuppressionGroup"; + + /// + /// The BrowseName for the HasArgumentDescription component. + /// + public const string HasArgumentDescription = "HasArgumentDescription"; + + /// + /// 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 HasDataSetReader component. + /// + public const string HasDataSetReader = "HasDataSetReader"; + + /// + /// The BrowseName for the HasDataSetWriter component. + /// + public const string HasDataSetWriter = "HasDataSetWriter"; + + /// + /// The BrowseName for the HasDescription component. + /// + public const string HasDescription = "HasDescription"; + + /// + /// The BrowseName for the HasDictionaryEntry component. + /// + public const string HasDictionaryEntry = "HasDictionaryEntry"; + + /// + /// The BrowseName for the HasEffect component. + /// + public const string HasEffect = "HasEffect"; + + /// + /// The BrowseName for the HasEffectDisable component. + /// + public const string HasEffectDisable = "HasEffectDisable"; + + /// + /// The BrowseName for the HasEffectEnable component. + /// + public const string HasEffectEnable = "HasEffectEnable"; + + /// + /// The BrowseName for the HasEffectSuppressed component. + /// + public const string HasEffectSuppressed = "HasEffectSuppressed"; + + /// + /// The BrowseName for the HasEffectUnsuppressed component. + /// + public const string HasEffectUnsuppressed = "HasEffectUnsuppressed"; + + /// + /// 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 HasGuard component. + /// + public const string HasGuard = "HasGuard"; + + /// + /// The BrowseName for the HasHistoricalConfiguration component. + /// + public const string HasHistoricalConfiguration = "HasHistoricalConfiguration"; + + /// + /// The BrowseName for the HasInterface component. + /// + public const string HasInterface = "HasInterface"; + + /// + /// 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 HasOptionalInputArgumentDescription component. + /// + public const string HasOptionalInputArgumentDescription = "HasOptionalInputArgumentDescription"; + + /// + /// 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 HasPubSubConnection component. + /// + public const string HasPubSubConnection = "HasPubSubConnection"; + + /// + /// The BrowseName for the HasReaderGroup component. + /// + public const string HasReaderGroup = "HasReaderGroup"; + + /// + /// 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 HasWriterGroup component. + /// + public const string HasWriterGroup = "HasWriterGroup"; + + /// + /// The BrowseName for the HeaderLayoutUri component. + /// + public const string HeaderLayoutUri = "HeaderLayoutUri"; + + /// + /// 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 HighlyManagedAlarmConditionClassType component. + /// + public const string HighlyManagedAlarmConditionClassType = "HighlyManagedAlarmConditionClassType"; + + /// + /// 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 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 HttpsCertificateType component. + /// + public const string HttpsCertificateType = "HttpsCertificateType"; + + /// + /// 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 Identities component. + /// + public const string Identities = "Identities"; + + /// + /// The BrowseName for the IdentityCriteriaType component. + /// + public const string IdentityCriteriaType = "IdentityCriteriaType"; + + /// + /// The BrowseName for the IdentityMappingRuleType component. + /// + public const string IdentityMappingRuleType = "IdentityMappingRuleType"; + + /// + /// The BrowseName for the Idle component. + /// + public const string Idle = "Idle"; + + /// + /// The BrowseName for the IdleToApplyWrite component. + /// + public const string IdleToApplyWrite = "IdleToApplyWrite"; + + /// + /// The BrowseName for the IdleToReadPrepare component. + /// + public const string IdleToReadPrepare = "IdleToReadPrepare"; + + /// + /// 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 Index component. + /// + public const string Index = "Index"; + + /// + /// 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 InstrumentDiagnosticAlarmType component. + /// + public const string InstrumentDiagnosticAlarmType = "InstrumentDiagnosticAlarmType"; + + /// + /// 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 InterfaceTypes component. + /// + public const string InterfaceTypes = "InterfaceTypes"; + + /// + /// 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 IOrderedObjectType component. + /// + public const string IOrderedObjectType = "IOrderedObjectType"; + + /// + /// The BrowseName for the IrdiDictionaryEntryType component. + /// + public const string IrdiDictionaryEntryType = "IrdiDictionaryEntryType"; + + /// + /// 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 IssuerEndpointUrl component. + /// + public const string IssuerEndpointUrl = "IssuerEndpointUrl"; + + /// + /// The BrowseName for the JsonDataSetMessageContentMask component. + /// + public const string JsonDataSetMessageContentMask = "JsonDataSetMessageContentMask"; + + /// + /// The BrowseName for the JsonDataSetReaderMessageDataType component. + /// + public const string JsonDataSetReaderMessageDataType = "JsonDataSetReaderMessageDataType"; + + /// + /// The BrowseName for the JsonDataSetReaderMessageType component. + /// + public const string JsonDataSetReaderMessageType = "JsonDataSetReaderMessageType"; + + /// + /// The BrowseName for the JsonDataSetWriterMessageDataType component. + /// + public const string JsonDataSetWriterMessageDataType = "JsonDataSetWriterMessageDataType"; + + /// + /// The BrowseName for the JsonDataSetWriterMessageType component. + /// + public const string JsonDataSetWriterMessageType = "JsonDataSetWriterMessageType"; + + /// + /// The BrowseName for the JsonNetworkMessageContentMask component. + /// + public const string JsonNetworkMessageContentMask = "JsonNetworkMessageContentMask"; + + /// + /// The BrowseName for the JsonWriterGroupMessageDataType component. + /// + public const string JsonWriterGroupMessageDataType = "JsonWriterGroupMessageDataType"; + + /// + /// The BrowseName for the JsonWriterGroupMessageType component. + /// + public const string JsonWriterGroupMessageType = "JsonWriterGroupMessageType"; + + /// + /// The BrowseName for the KeepAliveTime component. + /// + public const string KeepAliveTime = "KeepAliveTime"; + + /// + /// The BrowseName for the KeyCredentialAuditEventType component. + /// + public const string KeyCredentialAuditEventType = "KeyCredentialAuditEventType"; + + /// + /// The BrowseName for the KeyCredentialConfiguration component. + /// + public const string KeyCredentialConfiguration = "KeyCredentialConfiguration"; + + /// + /// The BrowseName for the KeyCredentialConfigurationFolderType component. + /// + public const string KeyCredentialConfigurationFolderType = "KeyCredentialConfigurationFolderType"; + + /// + /// The BrowseName for the KeyCredentialConfigurationType component. + /// + public const string KeyCredentialConfigurationType = "KeyCredentialConfigurationType"; + + /// + /// The BrowseName for the KeyCredentialDeletedAuditEventType component. + /// + public const string KeyCredentialDeletedAuditEventType = "KeyCredentialDeletedAuditEventType"; + + /// + /// The BrowseName for the KeyCredentialUpdatedAuditEventType component. + /// + public const string KeyCredentialUpdatedAuditEventType = "KeyCredentialUpdatedAuditEventType"; + + /// + /// The BrowseName for the KeyFrameCount component. + /// + public const string KeyFrameCount = "KeyFrameCount"; + + /// + /// The BrowseName for the KeyLifetime component. + /// + public const string KeyLifetime = "KeyLifetime"; + + /// + /// The BrowseName for the KeyValuePair component. + /// + public const string KeyValuePair = "KeyValuePair"; + + /// + /// 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 LastMethodInputValues component. + /// + public const string LastMethodInputValues = "LastMethodInputValues"; + + /// + /// The BrowseName for the LastMethodOutputArguments component. + /// + public const string LastMethodOutputArguments = "LastMethodOutputArguments"; + + /// + /// The BrowseName for the LastMethodOutputValues component. + /// + public const string LastMethodOutputValues = "LastMethodOutputValues"; + + /// + /// 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 LastUpdateTime component. + /// + public const string LastUpdateTime = "LastUpdateTime"; + + /// + /// The BrowseName for the LatchedState component. + /// + public const string LatchedState = "LatchedState"; + + /// + /// The BrowseName for the LatePublishRequestCount component. + /// + public const string LatePublishRequestCount = "LatePublishRequestCount"; + + /// + /// The BrowseName for the LengthUnit component. + /// + public const string LengthUnit = "LengthUnit"; + + /// + /// 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 ListId component. + /// + public const string ListId = "ListId"; + + /// + /// The BrowseName for the LiteralOperand component. + /// + public const string LiteralOperand = "LiteralOperand"; + + /// + /// The BrowseName for the LiveValues component. + /// + public const string LiveValues = "LiveValues"; + + /// + /// 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 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 MaxByteStringLength component. + /// + public const string MaxByteStringLength = "MaxByteStringLength"; + + /// + /// The BrowseName for the MaxCharacters component. + /// + public const string MaxCharacters = "MaxCharacters"; + + /// + /// The BrowseName for the MaxFutureKeyCount component. + /// + public const string MaxFutureKeyCount = "MaxFutureKeyCount"; + + /// + /// The BrowseName for the MaxHistoryContinuationPoints component. + /// + public const string MaxHistoryContinuationPoints = "MaxHistoryContinuationPoints"; + + /// + /// The BrowseName for the Maximum component. + /// + public const string Maximum = "Maximum"; + + /// + /// The BrowseName for the MaximumActiveState component. + /// + public const string MaximumActiveState = "MaximumActiveState"; + + /// + /// The BrowseName for the MaximumAlarmRate component. + /// + public const string MaximumAlarmRate = "MaximumAlarmRate"; + + /// + /// The BrowseName for the MaximumReAlarmCount component. + /// + public const string MaximumReAlarmCount = "MaximumReAlarmCount"; + + /// + /// The BrowseName for the MaximumUnAck component. + /// + public const string MaximumUnAck = "MaximumUnAck"; + + /// + /// 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 MaxNetworkMessageSize component. + /// + public const string MaxNetworkMessageSize = "MaxNetworkMessageSize"; + + /// + /// 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 MaxPastKeyCount component. + /// + public const string MaxPastKeyCount = "MaxPastKeyCount"; + + /// + /// 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 MaxTrustListSize component. + /// + public const string MaxTrustListSize = "MaxTrustListSize"; + + /// + /// The BrowseName for the MdnsDiscoveryConfiguration component. + /// + public const string MdnsDiscoveryConfiguration = "MdnsDiscoveryConfiguration"; + + /// + /// The BrowseName for the Message component. + /// + public const string Message = "Message"; + + /// + /// The BrowseName for the MessageReceiveTimeout component. + /// + public const string MessageReceiveTimeout = "MessageReceiveTimeout"; + + /// + /// The BrowseName for the MessageRepeatCount component. + /// + public const string MessageRepeatCount = "MessageRepeatCount"; + + /// + /// The BrowseName for the MessageRepeatDelay component. + /// + public const string MessageRepeatDelay = "MessageRepeatDelay"; + + /// + /// The BrowseName for the MessageSecurityMode component. + /// + public const string MessageSecurityMode = "MessageSecurityMode"; + + /// + /// The BrowseName for the MessageSettings component. + /// + public const string MessageSettings = "MessageSettings"; + + /// + /// The BrowseName for the MetaDataQueueName component. + /// + public const string MetaDataQueueName = "MetaDataQueueName"; + + /// + /// The BrowseName for the MetaDataUpdateTime component. + /// + public const string MetaDataUpdateTime = "MetaDataUpdateTime"; + + /// + /// 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 MimeType component. + /// + public const string MimeType = "MimeType"; + + /// + /// 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_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 ModifyFieldSelection component. + /// + public const string ModifyFieldSelection = "ModifyFieldSelection"; + + /// + /// 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 MoveOrCopy component. + /// + public const string MoveOrCopy = "MoveOrCopy"; + + /// + /// The BrowseName for the MulticastDnsEnabled component. + /// + public const string MulticastDnsEnabled = "MulticastDnsEnabled"; + + /// + /// The BrowseName for the MultiStateDictionaryEntryDiscreteBaseType component. + /// + public const string MultiStateDictionaryEntryDiscreteBaseType = "MultiStateDictionaryEntryDiscreteBaseType"; + + /// + /// The BrowseName for the MultiStateDictionaryEntryDiscreteType component. + /// + public const string MultiStateDictionaryEntryDiscreteType = "MultiStateDictionaryEntryDiscreteType"; + + /// + /// 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_Placeholder component. + /// + public const string NamespaceIdentifier_Placeholder = ""; + + /// + /// 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 NetworkAddressDataType component. + /// + public const string NetworkAddressDataType = "NetworkAddressDataType"; + + /// + /// The BrowseName for the NetworkAddressType component. + /// + public const string NetworkAddressType = "NetworkAddressType"; + + /// + /// The BrowseName for the NetworkAddressUrlDataType component. + /// + public const string NetworkAddressUrlDataType = "NetworkAddressUrlDataType"; + + /// + /// The BrowseName for the NetworkAddressUrlType component. + /// + public const string NetworkAddressUrlType = "NetworkAddressUrlType"; + + /// + /// The BrowseName for the NetworkGroupDataType component. + /// + public const string NetworkGroupDataType = "NetworkGroupDataType"; + + /// + /// The BrowseName for the NetworkInterface component. + /// + public const string NetworkInterface = "NetworkInterface"; + + /// + /// The BrowseName for the NetworkMessageContentMask component. + /// + public const string NetworkMessageContentMask = "NetworkMessageContentMask"; + + /// + /// The BrowseName for the NetworkMessageNumber component. + /// + public const string NetworkMessageNumber = "NetworkMessageNumber"; + + /// + /// 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 NormalizedString component. + /// + public const string NormalizedString = "NormalizedString"; + + /// + /// 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 NumberInList component. + /// + public const string NumberInList = "NumberInList"; + + /// + /// The BrowseName for the Numerator component. + /// + public const string Numerator = "Numerator"; + + /// + /// 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 OffDelay component. + /// + public const string OffDelay = "OffDelay"; + + /// + /// 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 OnDelay component. + /// + public const string OnDelay = "OnDelay"; + + /// + /// 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 OPCUANamespaceMetadata component. + /// + public const string OPCUANamespaceMetadata = "http://opcfoundation.org/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 OpenSecureChannelRequest component. + /// + public const string OpenSecureChannelRequest = "OpenSecureChannelRequest"; + + /// + /// The BrowseName for the OpenSecureChannelResponse component. + /// + public const string OpenSecureChannelResponse = "OpenSecureChannelResponse"; + + /// + /// The BrowseName for the OpenWithMasks component. + /// + public const string OpenWithMasks = "OpenWithMasks"; + + /// + /// 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 OptionSet component. + /// + public const string OptionSet = "OptionSet"; + + /// + /// 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 OrderedListType component. + /// + public const string OrderedListType = "OrderedListType"; + + /// + /// The BrowseName for the OrderedObject_Placeholder component. + /// + public const string OrderedObject_Placeholder = ""; + + /// + /// The BrowseName for the Organizes component. + /// + public const string Organizes = "Organizes"; + + /// + /// The BrowseName for the Orientation component. + /// + public const string Orientation = "Orientation"; + + /// + /// The BrowseName for the OrientationType component. + /// + public const string OrientationType = "OrientationType"; + + /// + /// The BrowseName for the OutOfServiceState component. + /// + public const string OutOfServiceState = "OutOfServiceState"; + + /// + /// The BrowseName for the OutputArguments component. + /// + public const string OutputArguments = "OutputArguments"; + + /// + /// The BrowseName for the OverrideValueHandling component. + /// + public const string OverrideValueHandling = "OverrideValueHandling"; + + /// + /// 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 PermissionType component. + /// + public const string PermissionType = "PermissionType"; + + /// + /// The BrowseName for the PlaceInService component. + /// + public const string PlaceInService = "PlaceInService"; + + /// + /// 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 ProcessingOffset component. + /// + public const string ProcessingOffset = "ProcessingOffset"; + + /// + /// 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 ProfileUri component. + /// + public const string ProfileUri = "ProfileUri"; + + /// + /// The BrowseName for the ProgramDiagnostic component. + /// + public const string ProgramDiagnostic = "ProgramDiagnostic"; + + /// + /// The BrowseName for the ProgramDiagnostic2DataType component. + /// + public const string ProgramDiagnostic2DataType = "ProgramDiagnostic2DataType"; + + /// + /// The BrowseName for the ProgramDiagnostic2Type component. + /// + public const string ProgramDiagnostic2Type = "ProgramDiagnostic2Type"; + + /// + /// The BrowseName for the ProgramDiagnosticDataType component. + /// + public const string ProgramDiagnosticDataType = "ProgramDiagnosticDataType"; + + /// + /// 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 Progress component. + /// + public const string Progress = "Progress"; + + /// + /// 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 PublishedData component. + /// + public const string PublishedData = "PublishedData"; + + /// + /// The BrowseName for the PublishedDataItemsDataType component. + /// + public const string PublishedDataItemsDataType = "PublishedDataItemsDataType"; + + /// + /// The BrowseName for the PublishedDataItemsType component. + /// + public const string PublishedDataItemsType = "PublishedDataItemsType"; + + /// + /// The BrowseName for the PublishedDataSetDataType component. + /// + public const string PublishedDataSetDataType = "PublishedDataSetDataType"; + + /// + /// The BrowseName for the PublishedDataSetName_Placeholder component. + /// + public const string PublishedDataSetName_Placeholder = ""; + + /// + /// The BrowseName for the PublishedDataSets component. + /// + public const string PublishedDataSets = "PublishedDataSets"; + + /// + /// The BrowseName for the PublishedDataSetSourceDataType component. + /// + public const string PublishedDataSetSourceDataType = "PublishedDataSetSourceDataType"; + + /// + /// The BrowseName for the PublishedDataSetType component. + /// + public const string PublishedDataSetType = "PublishedDataSetType"; + + /// + /// The BrowseName for the PublishedEventsDataType component. + /// + public const string PublishedEventsDataType = "PublishedEventsDataType"; + + /// + /// The BrowseName for the PublishedEventsType component. + /// + public const string PublishedEventsType = "PublishedEventsType"; + + /// + /// The BrowseName for the PublishedVariableDataType component. + /// + public const string PublishedVariableDataType = "PublishedVariableDataType"; + + /// + /// The BrowseName for the PublisherId component. + /// + public const string PublisherId = "PublisherId"; + + /// + /// 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 PublishingOffset component. + /// + public const string PublishingOffset = "PublishingOffset"; + + /// + /// 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 PublishSubscribe component. + /// + public const string PublishSubscribe = "PublishSubscribe"; + + /// + /// The BrowseName for the PublishSubscribeType component. + /// + public const string PublishSubscribeType = "PublishSubscribeType"; + + /// + /// The BrowseName for the PubSubCommunicationFailureEventType component. + /// + public const string PubSubCommunicationFailureEventType = "PubSubCommunicationFailureEventType"; + + /// + /// The BrowseName for the PubSubConfigurationDataType component. + /// + public const string PubSubConfigurationDataType = "PubSubConfigurationDataType"; + + /// + /// The BrowseName for the PubSubConnectionDataType component. + /// + public const string PubSubConnectionDataType = "PubSubConnectionDataType"; + + /// + /// The BrowseName for the PubSubConnectionType component. + /// + public const string PubSubConnectionType = "PubSubConnectionType"; + + /// + /// The BrowseName for the PubSubDiagnosticsConnectionType component. + /// + public const string PubSubDiagnosticsConnectionType = "PubSubDiagnosticsConnectionType"; + + /// + /// The BrowseName for the PubSubDiagnosticsCounterClassification component. + /// + public const string PubSubDiagnosticsCounterClassification = "PubSubDiagnosticsCounterClassification"; + + /// + /// The BrowseName for the PubSubDiagnosticsCounterType component. + /// + public const string PubSubDiagnosticsCounterType = "PubSubDiagnosticsCounterType"; + + /// + /// The BrowseName for the PubSubDiagnosticsDataSetReaderType component. + /// + public const string PubSubDiagnosticsDataSetReaderType = "PubSubDiagnosticsDataSetReaderType"; + + /// + /// The BrowseName for the PubSubDiagnosticsDataSetWriterType component. + /// + public const string PubSubDiagnosticsDataSetWriterType = "PubSubDiagnosticsDataSetWriterType"; + + /// + /// The BrowseName for the PubSubDiagnosticsReaderGroupType component. + /// + public const string PubSubDiagnosticsReaderGroupType = "PubSubDiagnosticsReaderGroupType"; + + /// + /// The BrowseName for the PubSubDiagnosticsRootType component. + /// + public const string PubSubDiagnosticsRootType = "PubSubDiagnosticsRootType"; + + /// + /// The BrowseName for the PubSubDiagnosticsType component. + /// + public const string PubSubDiagnosticsType = "PubSubDiagnosticsType"; + + /// + /// The BrowseName for the PubSubDiagnosticsWriterGroupType component. + /// + public const string PubSubDiagnosticsWriterGroupType = "PubSubDiagnosticsWriterGroupType"; + + /// + /// The BrowseName for the PubSubEventNotifier component. + /// + public const string PubSubEventNotifier = "EventNotifier"; + + /// + /// The BrowseName for the PubSubGroupDataType component. + /// + public const string PubSubGroupDataType = "PubSubGroupDataType"; + + /// + /// The BrowseName for the PubSubGroupType component. + /// + public const string PubSubGroupType = "PubSubGroupType"; + + /// + /// The BrowseName for the PubSubKeyServiceType component. + /// + public const string PubSubKeyServiceType = "PubSubKeyServiceType"; + + /// + /// The BrowseName for the PubSubState component. + /// + public const string PubSubState = "PubSubState"; + + /// + /// The BrowseName for the PubSubStatusEventType component. + /// + public const string PubSubStatusEventType = "PubSubStatusEventType"; + + /// + /// The BrowseName for the PubSubStatusType component. + /// + public const string PubSubStatusType = "PubSubStatusType"; + + /// + /// The BrowseName for the PubSubTransportLimitsExceedEventType component. + /// + public const string PubSubTransportLimitsExceedEventType = "PubSubTransportLimitsExceedEventType"; + + /// + /// 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 QueueName component. + /// + public const string QueueName = "QueueName"; + + /// + /// The BrowseName for the Range component. + /// + public const string Range = "Range"; + + /// + /// The BrowseName for the Rate component. + /// + public const string Rate = "Rate"; + + /// + /// The BrowseName for the RationalNumber component. + /// + public const string RationalNumber = "RationalNumber"; + + /// + /// The BrowseName for the RationalNumberType component. + /// + public const string RationalNumberType = "RationalNumberType"; + + /// + /// The BrowseName for the Read component. + /// + public const string Read = "Read"; + + /// + /// The BrowseName for the ReadAnnotationDataDetails component. + /// + public const string ReadAnnotationDataDetails = "ReadAnnotationDataDetails"; + + /// + /// 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 ReaderGroupDataType component. + /// + public const string ReaderGroupDataType = "ReaderGroupDataType"; + + /// + /// The BrowseName for the ReaderGroupMessageDataType component. + /// + public const string ReaderGroupMessageDataType = "ReaderGroupMessageDataType"; + + /// + /// The BrowseName for the ReaderGroupMessageType component. + /// + public const string ReaderGroupMessageType = "ReaderGroupMessageType"; + + /// + /// The BrowseName for the ReaderGroupName_Placeholder component. + /// + public const string ReaderGroupName_Placeholder = ""; + + /// + /// The BrowseName for the ReaderGroupTransportDataType component. + /// + public const string ReaderGroupTransportDataType = "ReaderGroupTransportDataType"; + + /// + /// The BrowseName for the ReaderGroupTransportType component. + /// + public const string ReaderGroupTransportType = "ReaderGroupTransportType"; + + /// + /// The BrowseName for the ReaderGroupType component. + /// + public const string ReaderGroupType = "ReaderGroupType"; + + /// + /// The BrowseName for the ReadEventDetails component. + /// + public const string ReadEventDetails = "ReadEventDetails"; + + /// + /// The BrowseName for the ReadPrepare component. + /// + public const string ReadPrepare = "ReadPrepare"; + + /// + /// The BrowseName for the ReadPrepareToError component. + /// + public const string ReadPrepareToError = "ReadPrepareToError"; + + /// + /// The BrowseName for the ReadPrepareToReadTransfer component. + /// + public const string ReadPrepareToReadTransfer = "ReadPrepareToReadTransfer"; + + /// + /// 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 ReadTransfer component. + /// + public const string ReadTransfer = "ReadTransfer"; + + /// + /// The BrowseName for the ReadTransferToError component. + /// + public const string ReadTransferToError = "ReadTransferToError"; + + /// + /// The BrowseName for the ReadTransferToIdle component. + /// + public const string ReadTransferToIdle = "ReadTransferToIdle"; + + /// + /// 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 ReAlarmRepeatCount component. + /// + public const string ReAlarmRepeatCount = "ReAlarmRepeatCount"; + + /// + /// The BrowseName for the ReAlarmTime component. + /// + public const string ReAlarmTime = "ReAlarmTime"; + + /// + /// The BrowseName for the ReceiveOffset component. + /// + public const string ReceiveOffset = "ReceiveOffset"; + + /// + /// 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 RegisterServer2Request component. + /// + public const string RegisterServer2Request = "RegisterServer2Request"; + + /// + /// The BrowseName for the RegisterServer2Response component. + /// + public const string RegisterServer2Response = "RegisterServer2Response"; + + /// + /// 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 RemoveApplication component. + /// + public const string RemoveApplication = "RemoveApplication"; + + /// + /// The BrowseName for the RemoveCertificate component. + /// + public const string RemoveCertificate = "RemoveCertificate"; + + /// + /// The BrowseName for the RemoveConnection component. + /// + public const string RemoveConnection = "RemoveConnection"; + + /// + /// The BrowseName for the RemoveDataSetFolder component. + /// + public const string RemoveDataSetFolder = "RemoveDataSetFolder"; + + /// + /// The BrowseName for the RemoveDataSetReader component. + /// + public const string RemoveDataSetReader = "RemoveDataSetReader"; + + /// + /// The BrowseName for the RemoveDataSetWriter component. + /// + public const string RemoveDataSetWriter = "RemoveDataSetWriter"; + + /// + /// The BrowseName for the RemoveEndpoint component. + /// + public const string RemoveEndpoint = "RemoveEndpoint"; + + /// + /// The BrowseName for the RemoveExtensionField component. + /// + public const string RemoveExtensionField = "RemoveExtensionField"; + + /// + /// The BrowseName for the RemoveFromService component. + /// + public const string RemoveFromService = "RemoveFromService"; + + /// + /// The BrowseName for the RemoveGroup component. + /// + public const string RemoveGroup = "RemoveGroup"; + + /// + /// The BrowseName for the RemoveIdentity component. + /// + public const string RemoveIdentity = "RemoveIdentity"; + + /// + /// The BrowseName for the RemovePublishedDataSet component. + /// + public const string RemovePublishedDataSet = "RemovePublishedDataSet"; + + /// + /// The BrowseName for the RemoveRole component. + /// + public const string RemoveRole = "RemoveRole"; + + /// + /// The BrowseName for the RemoveSecurityGroup component. + /// + public const string RemoveSecurityGroup = "RemoveSecurityGroup"; + + /// + /// The BrowseName for the RemoveTargetVariables component. + /// + public const string RemoveTargetVariables = "RemoveTargetVariables"; + + /// + /// The BrowseName for the RemoveVariables component. + /// + public const string RemoveVariables = "RemoveVariables"; + + /// + /// 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 RequestedDeliveryGuarantee component. + /// + public const string RequestedDeliveryGuarantee = "RequestedDeliveryGuarantee"; + + /// + /// 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 RequestServerStateChange component. + /// + public const string RequestServerStateChange = "RequestServerStateChange"; + + /// + /// The BrowseName for the RequestType component. + /// + public const string RequestType = "RequestType"; + + /// + /// The BrowseName for the ResendData component. + /// + public const string ResendData = "ResendData"; + + /// + /// The BrowseName for the Reset component. + /// + public const string Reset = "Reset"; + + /// + /// The BrowseName for the ResourceUri component. + /// + public const string ResourceUri = "ResourceUri"; + + /// + /// 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 RestrictToList component. + /// + public const string RestrictToList = "RestrictToList"; + + /// + /// 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 RoleMappingRuleChangedAuditEventType component. + /// + public const string RoleMappingRuleChangedAuditEventType = "RoleMappingRuleChangedAuditEventType"; + + /// + /// The BrowseName for the RoleName_Placeholder component. + /// + public const string RoleName_Placeholder = ""; + + /// + /// The BrowseName for the RolePermissionType component. + /// + public const string RolePermissionType = "RolePermissionType"; + + /// + /// The BrowseName for the RoleSet component. + /// + public const string RoleSet = "RoleSet"; + + /// + /// The BrowseName for the RoleSetType component. + /// + public const string RoleSetType = "RoleSetType"; + + /// + /// The BrowseName for the RoleType component. + /// + public const string RoleType = "RoleType"; + + /// + /// The BrowseName for the RootFolder component. + /// + public const string RootFolder = "Root"; + + /// + /// The BrowseName for the RsaEncryptedSecret component. + /// + public const string RsaEncryptedSecret = "RsaEncryptedSecret"; + + /// + /// The BrowseName for the RsaMinApplicationCertificateType component. + /// + public const string RsaMinApplicationCertificateType = "RsaMinApplicationCertificateType"; + + /// + /// The BrowseName for the RsaSha256ApplicationCertificateType component. + /// + public const string RsaSha256ApplicationCertificateType = "RsaSha256ApplicationCertificateType"; + + /// + /// 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 SafetyConditionClassType component. + /// + public const string SafetyConditionClassType = "SafetyConditionClassType"; + + /// + /// 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 SamplingIntervalDiagnostics component. + /// + public const string SamplingIntervalDiagnostics = "SamplingIntervalDiagnostics"; + + /// + /// 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 SamplingOffset component. + /// + public const string SamplingOffset = "SamplingOffset"; + + /// + /// The BrowseName for the SByte component. + /// + public const string SByte = "SByte"; + + /// + /// 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 SecurityGroupFolderName_Placeholder component. + /// + public const string SecurityGroupFolderName_Placeholder = ""; + + /// + /// The BrowseName for the SecurityGroupFolderType component. + /// + public const string SecurityGroupFolderType = "SecurityGroupFolderType"; + + /// + /// The BrowseName for the SecurityGroupId component. + /// + public const string SecurityGroupId = "SecurityGroupId"; + + /// + /// The BrowseName for the SecurityGroupName_Placeholder component. + /// + public const string SecurityGroupName_Placeholder = ""; + + /// + /// The BrowseName for the SecurityGroups component. + /// + public const string SecurityGroups = "SecurityGroups"; + + /// + /// The BrowseName for the SecurityGroupType component. + /// + public const string SecurityGroupType = "SecurityGroupType"; + + /// + /// The BrowseName for the SecurityKeyServices component. + /// + public const string SecurityKeyServices = "SecurityKeyServices"; + + /// + /// 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 SelectedFields component. + /// + public const string SelectedFields = "SelectedFields"; + + /// + /// The BrowseName for the SelectedResponse component. + /// + public const string SelectedResponse = "SelectedResponse"; + + /// + /// The BrowseName for the SelectionDescriptions component. + /// + public const string SelectionDescriptions = "SelectionDescriptions"; + + /// + /// The BrowseName for the SelectionListType component. + /// + public const string SelectionListType = "SelectionListType"; + + /// + /// The BrowseName for the Selections component. + /// + public const string Selections = "Selections"; + + /// + /// 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 ServerConfiguration component. + /// + public const string ServerConfiguration = "ServerConfiguration"; + + /// + /// The BrowseName for the ServerConfigurationType component. + /// + public const string ServerConfigurationType = "ServerConfigurationType"; + + /// + /// 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 ServerNetworkGroups component. + /// + public const string ServerNetworkGroups = "ServerNetworkGroups"; + + /// + /// The BrowseName for the ServerOnNetwork component. + /// + public const string ServerOnNetwork = "ServerOnNetwork"; + + /// + /// 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 ServerTimestampSupported component. + /// + public const string ServerTimestampSupported = "ServerTimestampSupported"; + + /// + /// 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 ServiceCertificate component. + /// + public const string ServiceCertificate = "ServiceCertificate"; + + /// + /// 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 ServiceName_Placeholder component. + /// + public const string ServiceName_Placeholder = ""; + + /// + /// The BrowseName for the ServiceStatus component. + /// + public const string ServiceStatus = "ServiceStatus"; + + /// + /// The BrowseName for the ServiceUri component. + /// + public const string ServiceUri = "ServiceUri"; + + /// + /// 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 SessionlessInvokeRequestType component. + /// + public const string SessionlessInvokeRequestType = "SessionlessInvokeRequestType"; + + /// + /// The BrowseName for the SessionlessInvokeResponseType component. + /// + public const string SessionlessInvokeResponseType = "SessionlessInvokeResponseType"; + + /// + /// The BrowseName for the SessionName component. + /// + public const string SessionName = "SessionName"; + + /// + /// 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 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 SetSecurityKeys component. + /// + public const string SetSecurityKeys = "SetSecurityKeys"; + + /// + /// The BrowseName for the SetSubscriptionDurable component. + /// + public const string SetSubscriptionDurable = "SetSubscriptionDurable"; + + /// + /// 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 Silence component. + /// + public const string Silence = "Silence"; + + /// + /// The BrowseName for the SilenceState component. + /// + public const string SilenceState = "SilenceState"; + + /// + /// The BrowseName for the SimpleAttributeOperand component. + /// + public const string SimpleAttributeOperand = "SimpleAttributeOperand"; + + /// + /// The BrowseName for the SimpleTypeDescription component. + /// + public const string SimpleTypeDescription = "SimpleTypeDescription"; + + /// + /// The BrowseName for the Size component. + /// + public const string Size = "Size"; + + /// + /// 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 StaticNodeIdTypes component. + /// + public const string StaticNodeIdTypes = "StaticNodeIdTypes"; + + /// + /// 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 StatisticalConditionClassType component. + /// + public const string StatisticalConditionClassType = "StatisticalConditionClassType"; + + /// + /// 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 StatusCodeId component. + /// + public const string StatusCodeId = "StatusCodeId"; + + /// + /// 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 StructureDefinition component. + /// + public const string StructureDefinition = "StructureDefinition"; + + /// + /// The BrowseName for the StructureDescription component. + /// + public const string StructureDescription = "StructureDescription"; + + /// + /// The BrowseName for the StructureField component. + /// + public const string StructureField = "StructureField"; + + /// + /// The BrowseName for the StructureType component. + /// + public const string StructureType = "StructureType"; + + /// + /// The BrowseName for the SubAliasNameCategories_Placeholder component. + /// + public const string SubAliasNameCategories_Placeholder = ""; + + /// + /// The BrowseName for the SubError component. + /// + public const string SubError = "SubError"; + + /// + /// The BrowseName for the SubscribedDataSet component. + /// + public const string SubscribedDataSet = "SubscribedDataSet"; + + /// + /// The BrowseName for the SubscribedDataSetDataType component. + /// + public const string SubscribedDataSetDataType = "SubscribedDataSetDataType"; + + /// + /// The BrowseName for the SubscribedDataSetMirrorDataType component. + /// + public const string SubscribedDataSetMirrorDataType = "SubscribedDataSetMirrorDataType"; + + /// + /// The BrowseName for the SubscribedDataSetMirrorType component. + /// + public const string SubscribedDataSetMirrorType = "SubscribedDataSetMirrorType"; + + /// + /// The BrowseName for the SubscribedDataSetType component. + /// + public const string SubscribedDataSetType = "SubscribedDataSetType"; + + /// + /// The BrowseName for the SubscriptionAcknowledgement component. + /// + public const string SubscriptionAcknowledgement = "SubscriptionAcknowledgement"; + + /// + /// The BrowseName for the SubscriptionDiagnostics component. + /// + public const string SubscriptionDiagnostics = "SubscriptionDiagnostics"; + + /// + /// 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 SupportedPrivateKeyFormats component. + /// + public const string SupportedPrivateKeyFormats = "SupportedPrivateKeyFormats"; + + /// + /// The BrowseName for the SupportedTransportProfiles component. + /// + public const string SupportedTransportProfiles = "SupportedTransportProfiles"; + + /// + /// The BrowseName for the Suppress component. + /// + public const string Suppress = "Suppress"; + + /// + /// 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 SystemDiagnosticAlarmType component. + /// + public const string SystemDiagnosticAlarmType = "SystemDiagnosticAlarmType"; + + /// + /// 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 TagVariables component. + /// + public const string TagVariables = "TagVariables"; + + /// + /// The BrowseName for the TargetValueNode component. + /// + public const string TargetValueNode = "TargetValueNode"; + + /// + /// The BrowseName for the TargetVariables component. + /// + public const string TargetVariables = "TargetVariables"; + + /// + /// The BrowseName for the TargetVariablesDataType component. + /// + public const string TargetVariablesDataType = "TargetVariablesDataType"; + + /// + /// The BrowseName for the TargetVariablesType component. + /// + public const string TargetVariablesType = "TargetVariablesType"; + + /// + /// The BrowseName for the TemporaryFileTransferType component. + /// + public const string TemporaryFileTransferType = "TemporaryFileTransferType"; + + /// + /// The BrowseName for the TestingConditionSubClassType component. + /// + public const string TestingConditionSubClassType = "TestingConditionSubClassType"; + + /// + /// The BrowseName for the ThreeDCartesianCoordinates component. + /// + public const string ThreeDCartesianCoordinates = "3DCartesianCoordinates"; + + /// + /// The BrowseName for the ThreeDCartesianCoordinatesType component. + /// + public const string ThreeDCartesianCoordinatesType = "3DCartesianCoordinatesType"; + + /// + /// The BrowseName for the ThreeDFrame component. + /// + public const string ThreeDFrame = "3DFrame"; + + /// + /// The BrowseName for the ThreeDFrameType component. + /// + public const string ThreeDFrameType = "3DFrameType"; + + /// + /// The BrowseName for the ThreeDOrientation component. + /// + public const string ThreeDOrientation = "3DOrientation"; + + /// + /// The BrowseName for the ThreeDOrientationType component. + /// + public const string ThreeDOrientationType = "3DOrientationType"; + + /// + /// The BrowseName for the ThreeDVector component. + /// + public const string ThreeDVector = "3DVector"; + + /// + /// The BrowseName for the ThreeDVectorType component. + /// + public const string ThreeDVectorType = "3DVectorType"; + + /// + /// 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 TimeFirstChange component. + /// + public const string TimeFirstChange = "TimeFirstChange"; + + /// + /// The BrowseName for the TimestampsToReturn component. + /// + public const string TimestampsToReturn = "TimestampsToReturn"; + + /// + /// The BrowseName for the TimeString component. + /// + public const string TimeString = "TimeString"; + + /// + /// 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 Tolerance component. + /// + public const string Tolerance = "Tolerance"; + + /// + /// The BrowseName for the Topics component. + /// + public const string Topics = "Topics"; + + /// + /// The BrowseName for the ToState component. + /// + public const string ToState = "ToState"; + + /// + /// The BrowseName for the TotalError component. + /// + public const string TotalError = "TotalError"; + + /// + /// The BrowseName for the TotalInformation component. + /// + public const string TotalInformation = "TotalInformation"; + + /// + /// The BrowseName for the TotalRequestCount component. + /// + public const string TotalRequestCount = "TotalRequestCount"; + + /// + /// The BrowseName for the TrainingConditionClassType component. + /// + public const string TrainingConditionClassType = "TrainingConditionClassType"; + + /// + /// 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 TransferState_Placeholder component. + /// + public const string TransferState_Placeholder = ""; + + /// + /// 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 TransportProfileUri component. + /// + public const string TransportProfileUri = "TransportProfileUri"; + + /// + /// The BrowseName for the TransportProtocol component. + /// + public const string TransportProtocol = "TransportProtocol"; + + /// + /// The BrowseName for the TransportSettings component. + /// + public const string TransportSettings = "TransportSettings"; + + /// + /// 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 TrustList component. + /// + public const string TrustList = "TrustList"; + + /// + /// The BrowseName for the TrustListDataType component. + /// + public const string TrustListDataType = "TrustListDataType"; + + /// + /// The BrowseName for the TrustListId component. + /// + public const string TrustListId = "TrustListId"; + + /// + /// The BrowseName for the TrustListMasks component. + /// + public const string TrustListMasks = "TrustListMasks"; + + /// + /// The BrowseName for the TrustListOutOfDate component. + /// + public const string TrustListOutOfDate = "TrustListOutOfDate"; + + /// + /// The BrowseName for the TrustListOutOfDateAlarmType component. + /// + public const string TrustListOutOfDateAlarmType = "TrustListOutOfDateAlarmType"; + + /// + /// The BrowseName for the TrustListType component. + /// + public const string TrustListType = "TrustListType"; + + /// + /// The BrowseName for the TrustListUpdatedAuditEventType component. + /// + public const string TrustListUpdatedAuditEventType = "TrustListUpdatedAuditEventType"; + + /// + /// 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 UABinaryFileDataType component. + /// + public const string UABinaryFileDataType = "UABinaryFileDataType"; + + /// + /// The BrowseName for the UadpDataSetMessageContentMask component. + /// + public const string UadpDataSetMessageContentMask = "UadpDataSetMessageContentMask"; + + /// + /// The BrowseName for the UadpDataSetReaderMessageDataType component. + /// + public const string UadpDataSetReaderMessageDataType = "UadpDataSetReaderMessageDataType"; + + /// + /// The BrowseName for the UadpDataSetReaderMessageType component. + /// + public const string UadpDataSetReaderMessageType = "UadpDataSetReaderMessageType"; + + /// + /// The BrowseName for the UadpDataSetWriterMessageDataType component. + /// + public const string UadpDataSetWriterMessageDataType = "UadpDataSetWriterMessageDataType"; + + /// + /// The BrowseName for the UadpDataSetWriterMessageType component. + /// + public const string UadpDataSetWriterMessageType = "UadpDataSetWriterMessageType"; + + /// + /// The BrowseName for the UadpNetworkMessageContentMask component. + /// + public const string UadpNetworkMessageContentMask = "UadpNetworkMessageContentMask"; + + /// + /// The BrowseName for the UadpWriterGroupMessageDataType component. + /// + public const string UadpWriterGroupMessageDataType = "UadpWriterGroupMessageDataType"; + + /// + /// The BrowseName for the UadpWriterGroupMessageType component. + /// + public const string UadpWriterGroupMessageType = "UadpWriterGroupMessageType"; + + /// + /// 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 Union component. + /// + public const string Union = "Union"; + + /// + /// 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 Unsuppress component. + /// + public const string Unsuppress = "Unsuppress"; + + /// + /// The BrowseName for the UpdateCertificate component. + /// + public const string UpdateCertificate = "UpdateCertificate"; + + /// + /// The BrowseName for the UpdateCredential component. + /// + public const string UpdateCredential = "UpdateCredential"; + + /// + /// 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 UpdateFrequency component. + /// + public const string UpdateFrequency = "UpdateFrequency"; + + /// + /// The BrowseName for the UpdateStructureDataDetails component. + /// + public const string UpdateStructureDataDetails = "UpdateStructureDataDetails"; + + /// + /// The BrowseName for the UriDictionaryEntryType component. + /// + public const string UriDictionaryEntryType = "UriDictionaryEntryType"; + + /// + /// The BrowseName for the UrisVersion component. + /// + public const string UrisVersion = "UrisVersion"; + + /// + /// The BrowseName for the Url component. + /// + public const string Url = "Url"; + + /// + /// The BrowseName for the UserCredentialCertificateType component. + /// + public const string UserCredentialCertificateType = "UserCredentialCertificateType"; + + /// + /// 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 UserWritable component. + /// + public const string UserWritable = "UserWritable"; + + /// + /// 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 ValueAsDictionaryEntries component. + /// + public const string ValueAsDictionaryEntries = "ValueAsDictionaryEntries"; + + /// + /// 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 Vector component. + /// + public const string Vector = "Vector"; + + /// + /// The BrowseName for the VectorType component. + /// + public const string VectorType = "VectorType"; + + /// + /// The BrowseName for the VectorUnit component. + /// + public const string VectorUnit = "VectorUnit"; + + /// + /// The BrowseName for the VendorCapability_Placeholder component. + /// + public const string VendorCapability_Placeholder = ""; + + /// + /// 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 VersionId component. + /// + public const string VersionId = "VersionId"; + + /// + /// The BrowseName for the VersionTime component. + /// + public const string VersionTime = "VersionTime"; + + /// + /// 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 WellKnownRole_Anonymous component. + /// + public const string WellKnownRole_Anonymous = "Anonymous"; + + /// + /// The BrowseName for the WellKnownRole_AuthenticatedUser component. + /// + public const string WellKnownRole_AuthenticatedUser = "AuthenticatedUser"; + + /// + /// The BrowseName for the WellKnownRole_ConfigureAdmin component. + /// + public const string WellKnownRole_ConfigureAdmin = "ConfigureAdmin"; + + /// + /// The BrowseName for the WellKnownRole_Engineer component. + /// + public const string WellKnownRole_Engineer = "Engineer"; + + /// + /// The BrowseName for the WellKnownRole_Observer component. + /// + public const string WellKnownRole_Observer = "Observer"; + + /// + /// The BrowseName for the WellKnownRole_Operator component. + /// + public const string WellKnownRole_Operator = "Operator"; + + /// + /// The BrowseName for the WellKnownRole_SecurityAdmin component. + /// + public const string WellKnownRole_SecurityAdmin = "SecurityAdmin"; + + /// + /// The BrowseName for the WellKnownRole_Supervisor component. + /// + public const string WellKnownRole_Supervisor = "Supervisor"; + + /// + /// The BrowseName for the Writable component. + /// + public const string Writable = "Writable"; + + /// + /// The BrowseName for the Write component. + /// + public const string Write = "Write"; + + /// + /// The BrowseName for the WriteCount component. + /// + public const string WriteCount = "WriteCount"; + + /// + /// 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 WriterGroupDataType component. + /// + public const string WriterGroupDataType = "WriterGroupDataType"; + + /// + /// The BrowseName for the WriterGroupId component. + /// + public const string WriterGroupId = "WriterGroupId"; + + /// + /// The BrowseName for the WriterGroupMessageDataType component. + /// + public const string WriterGroupMessageDataType = "WriterGroupMessageDataType"; + + /// + /// The BrowseName for the WriterGroupMessageType component. + /// + public const string WriterGroupMessageType = "WriterGroupMessageType"; + + /// + /// The BrowseName for the WriterGroupName_Placeholder component. + /// + public const string WriterGroupName_Placeholder = ""; + + /// + /// The BrowseName for the WriterGroupTransportDataType component. + /// + public const string WriterGroupTransportDataType = "WriterGroupTransportDataType"; + + /// + /// The BrowseName for the WriterGroupTransportType component. + /// + public const string WriterGroupTransportType = "WriterGroupTransportType"; + + /// + /// The BrowseName for the WriterGroupType component. + /// + public const string WriterGroupType = "WriterGroupType"; + + /// + /// The BrowseName for the WriteValue component. + /// + public const string WriteValue = "WriteValue"; + + /// + /// The BrowseName for the X component. + /// + public const string X = "X"; + + /// + /// 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 Y component. + /// + public const string Y = "Y"; + + /// + /// 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 Z component. + /// + public const string Z = "Z"; + + /// + /// 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. + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + 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 +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.DataTypes.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.DataTypes.cs new file mode 100644 index 00000000..08ef489c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.DataTypes.cs @@ -0,0 +1,68601 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua +{ + #region Enumeration Enumeration + #if (!OPCUA_EXCLUDE_Enumeration) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum Enumeration + { + } + + #region EnumerationCollection Class + /// + /// A collection of Enumeration objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEnumeration", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Enumeration")] + #if !NET_STANDARD + public partial class EnumerationCollection : List, ICloneable + #else + public partial class EnumerationCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EnumerationCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EnumerationCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EnumerationCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EnumerationCollection(Enumeration[] values) + { + if (values != null) + { + return new EnumerationCollection(values); + } + + return new EnumerationCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Enumeration[](EnumerationCollection 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 (EnumerationCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EnumerationCollection clone = new EnumerationCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Enumeration)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NamingRuleType Enumeration + #if (!OPCUA_EXCLUDE_NamingRuleType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum NamingRuleType + { + /// + [EnumMember(Value = "Mandatory_1")] + Mandatory = 1, + + /// + [EnumMember(Value = "Optional_2")] + Optional = 2, + + /// + [EnumMember(Value = "Constraint_3")] + Constraint = 3, + } + + #region NamingRuleTypeCollection Class + /// + /// A collection of NamingRuleType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNamingRuleType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "NamingRuleType")] + #if !NET_STANDARD + public partial class NamingRuleTypeCollection : List, ICloneable + #else + public partial class NamingRuleTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NamingRuleTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NamingRuleTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NamingRuleTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NamingRuleTypeCollection(NamingRuleType[] values) + { + if (values != null) + { + return new NamingRuleTypeCollection(values); + } + + return new NamingRuleTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator NamingRuleType[](NamingRuleTypeCollection 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 (NamingRuleTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NamingRuleTypeCollection clone = new NamingRuleTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((NamingRuleType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region KeyValuePair Class + #if (!OPCUA_EXCLUDE_KeyValuePair) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class KeyValuePair : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public KeyValuePair() + { + 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_key = null; + m_value = Variant.Null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Key", IsRequired = false, Order = 1)] + public QualifiedName Key + { + get { return m_key; } + set { m_key = value; } + } + + /// + [DataMember(Name = "Value", IsRequired = false, Order = 2)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.KeyValuePair; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.KeyValuePair_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.KeyValuePair_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteQualifiedName("Key", Key); + encoder.WriteVariant("Value", Value); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Key = decoder.ReadQualifiedName("Key"); + Value = decoder.ReadVariant("Value"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + KeyValuePair value = encodeable as KeyValuePair; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_key, value.m_key)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (KeyValuePair)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + KeyValuePair clone = (KeyValuePair)base.MemberwiseClone(); + + clone.m_key = (QualifiedName)Utils.Clone(this.m_key); + clone.m_value = (Variant)Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private QualifiedName m_key; + private Variant m_value; + #endregion + } + + #region KeyValuePairCollection Class + /// + /// A collection of KeyValuePair objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfKeyValuePair", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "KeyValuePair")] + #if !NET_STANDARD + public partial class KeyValuePairCollection : List, ICloneable + #else + public partial class KeyValuePairCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public KeyValuePairCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public KeyValuePairCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public KeyValuePairCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator KeyValuePairCollection(KeyValuePair[] values) + { + if (values != null) + { + return new KeyValuePairCollection(values); + } + + return new KeyValuePairCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator KeyValuePair[](KeyValuePairCollection 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 (KeyValuePairCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + KeyValuePairCollection clone = new KeyValuePairCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((KeyValuePair)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EndpointType Class + #if (!OPCUA_EXCLUDE_EndpointType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EndpointType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EndpointType() + { + 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_endpointUrl = null; + m_securityMode = MessageSecurityMode.Invalid; + m_securityPolicyUri = null; + m_transportProfileUri = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "EndpointUrl", IsRequired = false, Order = 1)] + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + [DataMember(Name = "SecurityMode", IsRequired = false, Order = 2)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + [DataMember(Name = "SecurityPolicyUri", IsRequired = false, Order = 3)] + public string SecurityPolicyUri + { + get { return m_securityPolicyUri; } + set { m_securityPolicyUri = value; } + } + + /// + [DataMember(Name = "TransportProfileUri", IsRequired = false, Order = 4)] + public string TransportProfileUri + { + get { return m_transportProfileUri; } + set { m_transportProfileUri = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EndpointType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EndpointType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EndpointType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("EndpointUrl", EndpointUrl); + encoder.WriteEnumerated("SecurityMode", SecurityMode); + encoder.WriteString("SecurityPolicyUri", SecurityPolicyUri); + encoder.WriteString("TransportProfileUri", TransportProfileUri); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EndpointUrl = decoder.ReadString("EndpointUrl"); + SecurityMode = (MessageSecurityMode)decoder.ReadEnumerated("SecurityMode", typeof(MessageSecurityMode)); + SecurityPolicyUri = decoder.ReadString("SecurityPolicyUri"); + TransportProfileUri = decoder.ReadString("TransportProfileUri"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EndpointType value = encodeable as EndpointType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_endpointUrl, value.m_endpointUrl)) return false; + if (!Utils.IsEqual(m_securityMode, value.m_securityMode)) return false; + if (!Utils.IsEqual(m_securityPolicyUri, value.m_securityPolicyUri)) return false; + if (!Utils.IsEqual(m_transportProfileUri, value.m_transportProfileUri)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EndpointType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EndpointType clone = (EndpointType)base.MemberwiseClone(); + + clone.m_endpointUrl = (string)Utils.Clone(this.m_endpointUrl); + clone.m_securityMode = (MessageSecurityMode)Utils.Clone(this.m_securityMode); + clone.m_securityPolicyUri = (string)Utils.Clone(this.m_securityPolicyUri); + clone.m_transportProfileUri = (string)Utils.Clone(this.m_transportProfileUri); + + return clone; + } + #endregion + + #region Private Fields + private string m_endpointUrl; + private MessageSecurityMode m_securityMode; + private string m_securityPolicyUri; + private string m_transportProfileUri; + #endregion + } + + #region EndpointTypeCollection Class + /// + /// A collection of EndpointType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEndpointType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EndpointType")] + #if !NET_STANDARD + public partial class EndpointTypeCollection : List, ICloneable + #else + public partial class EndpointTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EndpointTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EndpointTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EndpointTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EndpointTypeCollection(EndpointType[] values) + { + if (values != null) + { + return new EndpointTypeCollection(values); + } + + return new EndpointTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EndpointType[](EndpointTypeCollection 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 (EndpointTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EndpointTypeCollection clone = new EndpointTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EndpointType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region RationalNumber Class + #if (!OPCUA_EXCLUDE_RationalNumber) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RationalNumber : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RationalNumber() + { + 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_numerator = (int)0; + m_denominator = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Numerator", IsRequired = false, Order = 1)] + public int Numerator + { + get { return m_numerator; } + set { m_numerator = value; } + } + + /// + [DataMember(Name = "Denominator", IsRequired = false, Order = 2)] + public uint Denominator + { + get { return m_denominator; } + set { m_denominator = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RationalNumber; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RationalNumber_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RationalNumber_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteInt32("Numerator", Numerator); + encoder.WriteUInt32("Denominator", Denominator); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Numerator = decoder.ReadInt32("Numerator"); + Denominator = decoder.ReadUInt32("Denominator"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RationalNumber value = encodeable as RationalNumber; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_numerator, value.m_numerator)) return false; + if (!Utils.IsEqual(m_denominator, value.m_denominator)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RationalNumber)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RationalNumber clone = (RationalNumber)base.MemberwiseClone(); + + clone.m_numerator = (int)Utils.Clone(this.m_numerator); + clone.m_denominator = (uint)Utils.Clone(this.m_denominator); + + return clone; + } + #endregion + + #region Private Fields + private int m_numerator; + private uint m_denominator; + #endregion + } + + #region RationalNumberCollection Class + /// + /// A collection of RationalNumber objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfRationalNumber", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "RationalNumber")] + #if !NET_STANDARD + public partial class RationalNumberCollection : List, ICloneable + #else + public partial class RationalNumberCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public RationalNumberCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public RationalNumberCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public RationalNumberCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator RationalNumberCollection(RationalNumber[] values) + { + if (values != null) + { + return new RationalNumberCollection(values); + } + + return new RationalNumberCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator RationalNumber[](RationalNumberCollection 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 (RationalNumberCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + RationalNumberCollection clone = new RationalNumberCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((RationalNumber)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Vector Class + #if (!OPCUA_EXCLUDE_Vector) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Vector : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Vector() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Vector; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Vector_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Vector_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Vector value = encodeable as Vector; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Vector)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Vector clone = (Vector)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region VectorCollection Class + /// + /// A collection of Vector objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfVector", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Vector")] + #if !NET_STANDARD + public partial class VectorCollection : List, ICloneable + #else + public partial class VectorCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public VectorCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public VectorCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public VectorCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator VectorCollection(Vector[] values) + { + if (values != null) + { + return new VectorCollection(values); + } + + return new VectorCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Vector[](VectorCollection 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 (VectorCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + VectorCollection clone = new VectorCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Vector)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ThreeDVector Class + #if (!OPCUA_EXCLUDE_ThreeDVector) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ThreeDVector : Vector + { + #region Constructors + /// + /// The default constructor. + /// + public ThreeDVector() + { + 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_x = (double)0; + m_y = (double)0; + m_z = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "X", IsRequired = false, Order = 1)] + public double X + { + get { return m_x; } + set { m_x = value; } + } + + /// + [DataMember(Name = "Y", IsRequired = false, Order = 2)] + public double Y + { + get { return m_y; } + set { m_y = value; } + } + + /// + [DataMember(Name = "Z", IsRequired = false, Order = 3)] + public double Z + { + get { return m_z; } + set { m_z = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ThreeDVector; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ThreeDVector_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ThreeDVector_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("X", X); + encoder.WriteDouble("Y", Y); + encoder.WriteDouble("Z", Z); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + X = decoder.ReadDouble("X"); + Y = decoder.ReadDouble("Y"); + Z = decoder.ReadDouble("Z"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ThreeDVector value = encodeable as ThreeDVector; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_x, value.m_x)) return false; + if (!Utils.IsEqual(m_y, value.m_y)) return false; + if (!Utils.IsEqual(m_z, value.m_z)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ThreeDVector)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ThreeDVector clone = (ThreeDVector)base.MemberwiseClone(); + + clone.m_x = (double)Utils.Clone(this.m_x); + clone.m_y = (double)Utils.Clone(this.m_y); + clone.m_z = (double)Utils.Clone(this.m_z); + + return clone; + } + #endregion + + #region Private Fields + private double m_x; + private double m_y; + private double m_z; + #endregion + } + + #region ThreeDVectorCollection Class + /// + /// A collection of ThreeDVector objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfThreeDVector", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ThreeDVector")] + #if !NET_STANDARD + public partial class ThreeDVectorCollection : List, ICloneable + #else + public partial class ThreeDVectorCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ThreeDVectorCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ThreeDVectorCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ThreeDVectorCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ThreeDVectorCollection(ThreeDVector[] values) + { + if (values != null) + { + return new ThreeDVectorCollection(values); + } + + return new ThreeDVectorCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ThreeDVector[](ThreeDVectorCollection 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 (ThreeDVectorCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ThreeDVectorCollection clone = new ThreeDVectorCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ThreeDVector)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region CartesianCoordinates Class + #if (!OPCUA_EXCLUDE_CartesianCoordinates) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CartesianCoordinates : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CartesianCoordinates() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CartesianCoordinates; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CartesianCoordinates_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CartesianCoordinates_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CartesianCoordinates value = encodeable as CartesianCoordinates; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CartesianCoordinates)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CartesianCoordinates clone = (CartesianCoordinates)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region CartesianCoordinatesCollection Class + /// + /// A collection of CartesianCoordinates objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfCartesianCoordinates", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "CartesianCoordinates")] + #if !NET_STANDARD + public partial class CartesianCoordinatesCollection : List, ICloneable + #else + public partial class CartesianCoordinatesCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public CartesianCoordinatesCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public CartesianCoordinatesCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public CartesianCoordinatesCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator CartesianCoordinatesCollection(CartesianCoordinates[] values) + { + if (values != null) + { + return new CartesianCoordinatesCollection(values); + } + + return new CartesianCoordinatesCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator CartesianCoordinates[](CartesianCoordinatesCollection 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 (CartesianCoordinatesCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + CartesianCoordinatesCollection clone = new CartesianCoordinatesCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((CartesianCoordinates)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ThreeDCartesianCoordinates Class + #if (!OPCUA_EXCLUDE_ThreeDCartesianCoordinates) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ThreeDCartesianCoordinates : CartesianCoordinates + { + #region Constructors + /// + /// The default constructor. + /// + public ThreeDCartesianCoordinates() + { + 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_x = (double)0; + m_y = (double)0; + m_z = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "X", IsRequired = false, Order = 1)] + public double X + { + get { return m_x; } + set { m_x = value; } + } + + /// + [DataMember(Name = "Y", IsRequired = false, Order = 2)] + public double Y + { + get { return m_y; } + set { m_y = value; } + } + + /// + [DataMember(Name = "Z", IsRequired = false, Order = 3)] + public double Z + { + get { return m_z; } + set { m_z = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ThreeDCartesianCoordinates; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ThreeDCartesianCoordinates_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ThreeDCartesianCoordinates_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("X", X); + encoder.WriteDouble("Y", Y); + encoder.WriteDouble("Z", Z); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + X = decoder.ReadDouble("X"); + Y = decoder.ReadDouble("Y"); + Z = decoder.ReadDouble("Z"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ThreeDCartesianCoordinates value = encodeable as ThreeDCartesianCoordinates; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_x, value.m_x)) return false; + if (!Utils.IsEqual(m_y, value.m_y)) return false; + if (!Utils.IsEqual(m_z, value.m_z)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ThreeDCartesianCoordinates)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ThreeDCartesianCoordinates clone = (ThreeDCartesianCoordinates)base.MemberwiseClone(); + + clone.m_x = (double)Utils.Clone(this.m_x); + clone.m_y = (double)Utils.Clone(this.m_y); + clone.m_z = (double)Utils.Clone(this.m_z); + + return clone; + } + #endregion + + #region Private Fields + private double m_x; + private double m_y; + private double m_z; + #endregion + } + + #region ThreeDCartesianCoordinatesCollection Class + /// + /// A collection of ThreeDCartesianCoordinates objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfThreeDCartesianCoordinates", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ThreeDCartesianCoordinates")] + #if !NET_STANDARD + public partial class ThreeDCartesianCoordinatesCollection : List, ICloneable + #else + public partial class ThreeDCartesianCoordinatesCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ThreeDCartesianCoordinatesCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ThreeDCartesianCoordinatesCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ThreeDCartesianCoordinatesCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ThreeDCartesianCoordinatesCollection(ThreeDCartesianCoordinates[] values) + { + if (values != null) + { + return new ThreeDCartesianCoordinatesCollection(values); + } + + return new ThreeDCartesianCoordinatesCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ThreeDCartesianCoordinates[](ThreeDCartesianCoordinatesCollection 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 (ThreeDCartesianCoordinatesCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ThreeDCartesianCoordinatesCollection clone = new ThreeDCartesianCoordinatesCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ThreeDCartesianCoordinates)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Orientation Class + #if (!OPCUA_EXCLUDE_Orientation) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Orientation : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Orientation() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Orientation; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Orientation_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Orientation_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Orientation value = encodeable as Orientation; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Orientation)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Orientation clone = (Orientation)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region OrientationCollection Class + /// + /// A collection of Orientation objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfOrientation", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Orientation")] + #if !NET_STANDARD + public partial class OrientationCollection : List, ICloneable + #else + public partial class OrientationCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public OrientationCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public OrientationCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public OrientationCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator OrientationCollection(Orientation[] values) + { + if (values != null) + { + return new OrientationCollection(values); + } + + return new OrientationCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Orientation[](OrientationCollection 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 (OrientationCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + OrientationCollection clone = new OrientationCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Orientation)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ThreeDOrientation Class + #if (!OPCUA_EXCLUDE_ThreeDOrientation) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ThreeDOrientation : Orientation + { + #region Constructors + /// + /// The default constructor. + /// + public ThreeDOrientation() + { + 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_a = (double)0; + m_b = (double)0; + m_c = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "A", IsRequired = false, Order = 1)] + public double A + { + get { return m_a; } + set { m_a = value; } + } + + /// + [DataMember(Name = "B", IsRequired = false, Order = 2)] + public double B + { + get { return m_b; } + set { m_b = value; } + } + + /// + [DataMember(Name = "C", IsRequired = false, Order = 3)] + public double C + { + get { return m_c; } + set { m_c = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ThreeDOrientation; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ThreeDOrientation_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ThreeDOrientation_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("A", A); + encoder.WriteDouble("B", B); + encoder.WriteDouble("C", C); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + A = decoder.ReadDouble("A"); + B = decoder.ReadDouble("B"); + C = decoder.ReadDouble("C"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ThreeDOrientation value = encodeable as ThreeDOrientation; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_a, value.m_a)) return false; + if (!Utils.IsEqual(m_b, value.m_b)) return false; + if (!Utils.IsEqual(m_c, value.m_c)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ThreeDOrientation)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ThreeDOrientation clone = (ThreeDOrientation)base.MemberwiseClone(); + + clone.m_a = (double)Utils.Clone(this.m_a); + clone.m_b = (double)Utils.Clone(this.m_b); + clone.m_c = (double)Utils.Clone(this.m_c); + + return clone; + } + #endregion + + #region Private Fields + private double m_a; + private double m_b; + private double m_c; + #endregion + } + + #region ThreeDOrientationCollection Class + /// + /// A collection of ThreeDOrientation objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfThreeDOrientation", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ThreeDOrientation")] + #if !NET_STANDARD + public partial class ThreeDOrientationCollection : List, ICloneable + #else + public partial class ThreeDOrientationCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ThreeDOrientationCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ThreeDOrientationCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ThreeDOrientationCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ThreeDOrientationCollection(ThreeDOrientation[] values) + { + if (values != null) + { + return new ThreeDOrientationCollection(values); + } + + return new ThreeDOrientationCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ThreeDOrientation[](ThreeDOrientationCollection 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 (ThreeDOrientationCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ThreeDOrientationCollection clone = new ThreeDOrientationCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ThreeDOrientation)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Frame Class + #if (!OPCUA_EXCLUDE_Frame) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Frame : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Frame() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Frame; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Frame_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Frame_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Frame value = encodeable as Frame; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Frame)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Frame clone = (Frame)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region FrameCollection Class + /// + /// A collection of Frame objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfFrame", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Frame")] + #if !NET_STANDARD + public partial class FrameCollection : List, ICloneable + #else + public partial class FrameCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public FrameCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public FrameCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public FrameCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator FrameCollection(Frame[] values) + { + if (values != null) + { + return new FrameCollection(values); + } + + return new FrameCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Frame[](FrameCollection 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 (FrameCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + FrameCollection clone = new FrameCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Frame)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ThreeDFrame Class + #if (!OPCUA_EXCLUDE_ThreeDFrame) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ThreeDFrame : Frame + { + #region Constructors + /// + /// The default constructor. + /// + public ThreeDFrame() + { + 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_cartesianCoordinates = new ThreeDCartesianCoordinates(); + m_orientation = new ThreeDOrientation(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "CartesianCoordinates", IsRequired = false, Order = 1)] + public ThreeDCartesianCoordinates CartesianCoordinates + { + get + { + return m_cartesianCoordinates; + } + + set + { + m_cartesianCoordinates = value; + + if (value == null) + { + m_cartesianCoordinates = new ThreeDCartesianCoordinates(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Orientation", IsRequired = false, Order = 2)] + public ThreeDOrientation Orientation + { + get + { + return m_orientation; + } + + set + { + m_orientation = value; + + if (value == null) + { + m_orientation = new ThreeDOrientation(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ThreeDFrame; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ThreeDFrame_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ThreeDFrame_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("CartesianCoordinates", CartesianCoordinates, typeof(ThreeDCartesianCoordinates)); + encoder.WriteEncodeable("Orientation", Orientation, typeof(ThreeDOrientation)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + CartesianCoordinates = (ThreeDCartesianCoordinates)decoder.ReadEncodeable("CartesianCoordinates", typeof(ThreeDCartesianCoordinates)); + Orientation = (ThreeDOrientation)decoder.ReadEncodeable("Orientation", typeof(ThreeDOrientation)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ThreeDFrame value = encodeable as ThreeDFrame; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_cartesianCoordinates, value.m_cartesianCoordinates)) return false; + if (!Utils.IsEqual(m_orientation, value.m_orientation)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ThreeDFrame)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ThreeDFrame clone = (ThreeDFrame)base.MemberwiseClone(); + + clone.m_cartesianCoordinates = (ThreeDCartesianCoordinates)Utils.Clone(this.m_cartesianCoordinates); + clone.m_orientation = (ThreeDOrientation)Utils.Clone(this.m_orientation); + + return clone; + } + #endregion + + #region Private Fields + private ThreeDCartesianCoordinates m_cartesianCoordinates; + private ThreeDOrientation m_orientation; + #endregion + } + + #region ThreeDFrameCollection Class + /// + /// A collection of ThreeDFrame objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfThreeDFrame", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ThreeDFrame")] + #if !NET_STANDARD + public partial class ThreeDFrameCollection : List, ICloneable + #else + public partial class ThreeDFrameCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ThreeDFrameCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ThreeDFrameCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ThreeDFrameCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ThreeDFrameCollection(ThreeDFrame[] values) + { + if (values != null) + { + return new ThreeDFrameCollection(values); + } + + return new ThreeDFrameCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ThreeDFrame[](ThreeDFrameCollection 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 (ThreeDFrameCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ThreeDFrameCollection clone = new ThreeDFrameCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ThreeDFrame)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region OpenFileMode Enumeration + #if (!OPCUA_EXCLUDE_OpenFileMode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum OpenFileMode + { + /// + [EnumMember(Value = "Read_1")] + Read = 1, + + /// + [EnumMember(Value = "Write_2")] + Write = 2, + + /// + [EnumMember(Value = "EraseExisting_4")] + EraseExisting = 4, + + /// + [EnumMember(Value = "Append_8")] + Append = 8, + } + + #region OpenFileModeCollection Class + /// + /// A collection of OpenFileMode objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfOpenFileMode", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "OpenFileMode")] + #if !NET_STANDARD + public partial class OpenFileModeCollection : List, ICloneable + #else + public partial class OpenFileModeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public OpenFileModeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public OpenFileModeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public OpenFileModeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator OpenFileModeCollection(OpenFileMode[] values) + { + if (values != null) + { + return new OpenFileModeCollection(values); + } + + return new OpenFileModeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator OpenFileMode[](OpenFileModeCollection 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 (OpenFileModeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + OpenFileModeCollection clone = new OpenFileModeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((OpenFileMode)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region IdentityCriteriaType Enumeration + #if (!OPCUA_EXCLUDE_IdentityCriteriaType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum IdentityCriteriaType + { + /// + [EnumMember(Value = "UserName_1")] + UserName = 1, + + /// + [EnumMember(Value = "Thumbprint_2")] + Thumbprint = 2, + + /// + [EnumMember(Value = "Role_3")] + Role = 3, + + /// + [EnumMember(Value = "GroupId_4")] + GroupId = 4, + + /// + [EnumMember(Value = "Anonymous_5")] + Anonymous = 5, + + /// + [EnumMember(Value = "AuthenticatedUser_6")] + AuthenticatedUser = 6, + } + + #region IdentityCriteriaTypeCollection Class + /// + /// A collection of IdentityCriteriaType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfIdentityCriteriaType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "IdentityCriteriaType")] + #if !NET_STANDARD + public partial class IdentityCriteriaTypeCollection : List, ICloneable + #else + public partial class IdentityCriteriaTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public IdentityCriteriaTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public IdentityCriteriaTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public IdentityCriteriaTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator IdentityCriteriaTypeCollection(IdentityCriteriaType[] values) + { + if (values != null) + { + return new IdentityCriteriaTypeCollection(values); + } + + return new IdentityCriteriaTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator IdentityCriteriaType[](IdentityCriteriaTypeCollection 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 (IdentityCriteriaTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + IdentityCriteriaTypeCollection clone = new IdentityCriteriaTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((IdentityCriteriaType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region IdentityMappingRuleType Class + #if (!OPCUA_EXCLUDE_IdentityMappingRuleType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class IdentityMappingRuleType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public IdentityMappingRuleType() + { + 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_criteriaType = IdentityCriteriaType.UserName; + m_criteria = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "CriteriaType", IsRequired = false, Order = 1)] + public IdentityCriteriaType CriteriaType + { + get { return m_criteriaType; } + set { m_criteriaType = value; } + } + + /// + [DataMember(Name = "Criteria", IsRequired = false, Order = 2)] + public string Criteria + { + get { return m_criteria; } + set { m_criteria = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.IdentityMappingRuleType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.IdentityMappingRuleType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.IdentityMappingRuleType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("CriteriaType", CriteriaType); + encoder.WriteString("Criteria", Criteria); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + CriteriaType = (IdentityCriteriaType)decoder.ReadEnumerated("CriteriaType", typeof(IdentityCriteriaType)); + Criteria = decoder.ReadString("Criteria"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + IdentityMappingRuleType value = encodeable as IdentityMappingRuleType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_criteriaType, value.m_criteriaType)) return false; + if (!Utils.IsEqual(m_criteria, value.m_criteria)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (IdentityMappingRuleType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + IdentityMappingRuleType clone = (IdentityMappingRuleType)base.MemberwiseClone(); + + clone.m_criteriaType = (IdentityCriteriaType)Utils.Clone(this.m_criteriaType); + clone.m_criteria = (string)Utils.Clone(this.m_criteria); + + return clone; + } + #endregion + + #region Private Fields + private IdentityCriteriaType m_criteriaType; + private string m_criteria; + #endregion + } + + #region IdentityMappingRuleTypeCollection Class + /// + /// A collection of IdentityMappingRuleType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfIdentityMappingRuleType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "IdentityMappingRuleType")] + #if !NET_STANDARD + public partial class IdentityMappingRuleTypeCollection : List, ICloneable + #else + public partial class IdentityMappingRuleTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public IdentityMappingRuleTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public IdentityMappingRuleTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public IdentityMappingRuleTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator IdentityMappingRuleTypeCollection(IdentityMappingRuleType[] values) + { + if (values != null) + { + return new IdentityMappingRuleTypeCollection(values); + } + + return new IdentityMappingRuleTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator IdentityMappingRuleType[](IdentityMappingRuleTypeCollection 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 (IdentityMappingRuleTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + IdentityMappingRuleTypeCollection clone = new IdentityMappingRuleTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((IdentityMappingRuleType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region CurrencyUnitType Class + #if (!OPCUA_EXCLUDE_CurrencyUnitType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CurrencyUnitType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CurrencyUnitType() + { + 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_numericCode = (short)0; + m_exponent = (sbyte)0; + m_alphabeticCode = null; + m_currency = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NumericCode", IsRequired = false, Order = 1)] + public short NumericCode + { + get { return m_numericCode; } + set { m_numericCode = value; } + } + + /// + [DataMember(Name = "Exponent", IsRequired = false, Order = 2)] + public sbyte Exponent + { + get { return m_exponent; } + set { m_exponent = value; } + } + + /// + [DataMember(Name = "AlphabeticCode", IsRequired = false, Order = 3)] + public string AlphabeticCode + { + get { return m_alphabeticCode; } + set { m_alphabeticCode = value; } + } + + /// + [DataMember(Name = "Currency", IsRequired = false, Order = 4)] + public LocalizedText Currency + { + get { return m_currency; } + set { m_currency = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CurrencyUnitType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CurrencyUnitType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CurrencyUnitType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteInt16("NumericCode", NumericCode); + encoder.WriteSByte("Exponent", Exponent); + encoder.WriteString("AlphabeticCode", AlphabeticCode); + encoder.WriteLocalizedText("Currency", Currency); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NumericCode = decoder.ReadInt16("NumericCode"); + Exponent = decoder.ReadSByte("Exponent"); + AlphabeticCode = decoder.ReadString("AlphabeticCode"); + Currency = decoder.ReadLocalizedText("Currency"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CurrencyUnitType value = encodeable as CurrencyUnitType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_numericCode, value.m_numericCode)) return false; + if (!Utils.IsEqual(m_exponent, value.m_exponent)) return false; + if (!Utils.IsEqual(m_alphabeticCode, value.m_alphabeticCode)) return false; + if (!Utils.IsEqual(m_currency, value.m_currency)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CurrencyUnitType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CurrencyUnitType clone = (CurrencyUnitType)base.MemberwiseClone(); + + clone.m_numericCode = (short)Utils.Clone(this.m_numericCode); + clone.m_exponent = (sbyte)Utils.Clone(this.m_exponent); + clone.m_alphabeticCode = (string)Utils.Clone(this.m_alphabeticCode); + clone.m_currency = (LocalizedText)Utils.Clone(this.m_currency); + + return clone; + } + #endregion + + #region Private Fields + private short m_numericCode; + private sbyte m_exponent; + private string m_alphabeticCode; + private LocalizedText m_currency; + #endregion + } + + #region CurrencyUnitTypeCollection Class + /// + /// A collection of CurrencyUnitType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfCurrencyUnitType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "CurrencyUnitType")] + #if !NET_STANDARD + public partial class CurrencyUnitTypeCollection : List, ICloneable + #else + public partial class CurrencyUnitTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public CurrencyUnitTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public CurrencyUnitTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public CurrencyUnitTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator CurrencyUnitTypeCollection(CurrencyUnitType[] values) + { + if (values != null) + { + return new CurrencyUnitTypeCollection(values); + } + + return new CurrencyUnitTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator CurrencyUnitType[](CurrencyUnitTypeCollection 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 (CurrencyUnitTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + CurrencyUnitTypeCollection clone = new CurrencyUnitTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((CurrencyUnitType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region TrustListMasks Enumeration + #if (!OPCUA_EXCLUDE_TrustListMasks) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum TrustListMasks + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "TrustedCertificates_1")] + TrustedCertificates = 1, + + /// + [EnumMember(Value = "TrustedCrls_2")] + TrustedCrls = 2, + + /// + [EnumMember(Value = "IssuerCertificates_4")] + IssuerCertificates = 4, + + /// + [EnumMember(Value = "IssuerCrls_8")] + IssuerCrls = 8, + + /// + [EnumMember(Value = "All_15")] + All = 15, + } + #endif + #endregion + + #region TrustListDataType Class + #if (!OPCUA_EXCLUDE_TrustListDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TrustListDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TrustListDataType() + { + 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_specifiedLists = (uint)0; + m_trustedCertificates = new ByteStringCollection(); + m_trustedCrls = new ByteStringCollection(); + m_issuerCertificates = new ByteStringCollection(); + m_issuerCrls = new ByteStringCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SpecifiedLists", IsRequired = false, Order = 1)] + public uint SpecifiedLists + { + get { return m_specifiedLists; } + set { m_specifiedLists = value; } + } + + /// + /// + /// + [DataMember(Name = "TrustedCertificates", IsRequired = false, Order = 2)] + public ByteStringCollection TrustedCertificates + { + get + { + return m_trustedCertificates; + } + + set + { + m_trustedCertificates = value; + + if (value == null) + { + m_trustedCertificates = new ByteStringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "TrustedCrls", IsRequired = false, Order = 3)] + public ByteStringCollection TrustedCrls + { + get + { + return m_trustedCrls; + } + + set + { + m_trustedCrls = value; + + if (value == null) + { + m_trustedCrls = new ByteStringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "IssuerCertificates", IsRequired = false, Order = 4)] + public ByteStringCollection IssuerCertificates + { + get + { + return m_issuerCertificates; + } + + set + { + m_issuerCertificates = value; + + if (value == null) + { + m_issuerCertificates = new ByteStringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "IssuerCrls", IsRequired = false, Order = 5)] + public ByteStringCollection IssuerCrls + { + get + { + return m_issuerCrls; + } + + set + { + m_issuerCrls = value; + + if (value == null) + { + m_issuerCrls = new ByteStringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TrustListDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TrustListDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TrustListDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("SpecifiedLists", SpecifiedLists); + encoder.WriteByteStringArray("TrustedCertificates", TrustedCertificates); + encoder.WriteByteStringArray("TrustedCrls", TrustedCrls); + encoder.WriteByteStringArray("IssuerCertificates", IssuerCertificates); + encoder.WriteByteStringArray("IssuerCrls", IssuerCrls); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SpecifiedLists = decoder.ReadUInt32("SpecifiedLists"); + TrustedCertificates = decoder.ReadByteStringArray("TrustedCertificates"); + TrustedCrls = decoder.ReadByteStringArray("TrustedCrls"); + IssuerCertificates = decoder.ReadByteStringArray("IssuerCertificates"); + IssuerCrls = decoder.ReadByteStringArray("IssuerCrls"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TrustListDataType value = encodeable as TrustListDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_specifiedLists, value.m_specifiedLists)) return false; + if (!Utils.IsEqual(m_trustedCertificates, value.m_trustedCertificates)) return false; + if (!Utils.IsEqual(m_trustedCrls, value.m_trustedCrls)) return false; + if (!Utils.IsEqual(m_issuerCertificates, value.m_issuerCertificates)) return false; + if (!Utils.IsEqual(m_issuerCrls, value.m_issuerCrls)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TrustListDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TrustListDataType clone = (TrustListDataType)base.MemberwiseClone(); + + clone.m_specifiedLists = (uint)Utils.Clone(this.m_specifiedLists); + clone.m_trustedCertificates = (ByteStringCollection)Utils.Clone(this.m_trustedCertificates); + clone.m_trustedCrls = (ByteStringCollection)Utils.Clone(this.m_trustedCrls); + clone.m_issuerCertificates = (ByteStringCollection)Utils.Clone(this.m_issuerCertificates); + clone.m_issuerCrls = (ByteStringCollection)Utils.Clone(this.m_issuerCrls); + + return clone; + } + #endregion + + #region Private Fields + private uint m_specifiedLists; + private ByteStringCollection m_trustedCertificates; + private ByteStringCollection m_trustedCrls; + private ByteStringCollection m_issuerCertificates; + private ByteStringCollection m_issuerCrls; + #endregion + } + + #region TrustListDataTypeCollection Class + /// + /// A collection of TrustListDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfTrustListDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "TrustListDataType")] + #if !NET_STANDARD + public partial class TrustListDataTypeCollection : List, ICloneable + #else + public partial class TrustListDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public TrustListDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public TrustListDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public TrustListDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator TrustListDataTypeCollection(TrustListDataType[] values) + { + if (values != null) + { + return new TrustListDataTypeCollection(values); + } + + return new TrustListDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator TrustListDataType[](TrustListDataTypeCollection 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 (TrustListDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + TrustListDataTypeCollection clone = new TrustListDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((TrustListDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DecimalDataType Class + #if (!OPCUA_EXCLUDE_DecimalDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DecimalDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DecimalDataType() + { + 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_scale = (short)0; + m_value = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Scale", IsRequired = false, Order = 1)] + public short Scale + { + get { return m_scale; } + set { m_scale = value; } + } + + /// + [DataMember(Name = "Value", IsRequired = false, Order = 2)] + public byte[] Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DecimalDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DecimalDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DecimalDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteInt16("Scale", Scale); + encoder.WriteByteString("Value", Value); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Scale = decoder.ReadInt16("Scale"); + Value = decoder.ReadByteString("Value"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DecimalDataType value = encodeable as DecimalDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_scale, value.m_scale)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DecimalDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DecimalDataType clone = (DecimalDataType)base.MemberwiseClone(); + + clone.m_scale = (short)Utils.Clone(this.m_scale); + clone.m_value = (byte[])Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private short m_scale; + private byte[] m_value; + #endregion + } + #endif + #endregion + + #region DataTypeSchemaHeader Class + #if (!OPCUA_EXCLUDE_DataTypeSchemaHeader) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataTypeSchemaHeader : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataTypeSchemaHeader() + { + 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_namespaces = new StringCollection(); + m_structureDataTypes = new StructureDescriptionCollection(); + m_enumDataTypes = new EnumDescriptionCollection(); + m_simpleDataTypes = new SimpleTypeDescriptionCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "Namespaces", IsRequired = false, Order = 1)] + public StringCollection Namespaces + { + get + { + return m_namespaces; + } + + set + { + m_namespaces = value; + + if (value == null) + { + m_namespaces = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "StructureDataTypes", IsRequired = false, Order = 2)] + public StructureDescriptionCollection StructureDataTypes + { + get + { + return m_structureDataTypes; + } + + set + { + m_structureDataTypes = value; + + if (value == null) + { + m_structureDataTypes = new StructureDescriptionCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "EnumDataTypes", IsRequired = false, Order = 3)] + public EnumDescriptionCollection EnumDataTypes + { + get + { + return m_enumDataTypes; + } + + set + { + m_enumDataTypes = value; + + if (value == null) + { + m_enumDataTypes = new EnumDescriptionCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SimpleDataTypes", IsRequired = false, Order = 4)] + public SimpleTypeDescriptionCollection SimpleDataTypes + { + get + { + return m_simpleDataTypes; + } + + set + { + m_simpleDataTypes = value; + + if (value == null) + { + m_simpleDataTypes = new SimpleTypeDescriptionCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataTypeSchemaHeader; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataTypeSchemaHeader_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataTypeSchemaHeader_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStringArray("Namespaces", Namespaces); + encoder.WriteEncodeableArray("StructureDataTypes", StructureDataTypes.ToArray(), typeof(StructureDescription)); + encoder.WriteEncodeableArray("EnumDataTypes", EnumDataTypes.ToArray(), typeof(EnumDescription)); + encoder.WriteEncodeableArray("SimpleDataTypes", SimpleDataTypes.ToArray(), typeof(SimpleTypeDescription)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Namespaces = decoder.ReadStringArray("Namespaces"); + StructureDataTypes = (StructureDescriptionCollection)decoder.ReadEncodeableArray("StructureDataTypes", typeof(StructureDescription)); + EnumDataTypes = (EnumDescriptionCollection)decoder.ReadEncodeableArray("EnumDataTypes", typeof(EnumDescription)); + SimpleDataTypes = (SimpleTypeDescriptionCollection)decoder.ReadEncodeableArray("SimpleDataTypes", typeof(SimpleTypeDescription)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataTypeSchemaHeader value = encodeable as DataTypeSchemaHeader; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_namespaces, value.m_namespaces)) return false; + if (!Utils.IsEqual(m_structureDataTypes, value.m_structureDataTypes)) return false; + if (!Utils.IsEqual(m_enumDataTypes, value.m_enumDataTypes)) return false; + if (!Utils.IsEqual(m_simpleDataTypes, value.m_simpleDataTypes)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataTypeSchemaHeader)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataTypeSchemaHeader clone = (DataTypeSchemaHeader)base.MemberwiseClone(); + + clone.m_namespaces = (StringCollection)Utils.Clone(this.m_namespaces); + clone.m_structureDataTypes = (StructureDescriptionCollection)Utils.Clone(this.m_structureDataTypes); + clone.m_enumDataTypes = (EnumDescriptionCollection)Utils.Clone(this.m_enumDataTypes); + clone.m_simpleDataTypes = (SimpleTypeDescriptionCollection)Utils.Clone(this.m_simpleDataTypes); + + return clone; + } + #endregion + + #region Private Fields + private StringCollection m_namespaces; + private StructureDescriptionCollection m_structureDataTypes; + private EnumDescriptionCollection m_enumDataTypes; + private SimpleTypeDescriptionCollection m_simpleDataTypes; + #endregion + } + + #region DataTypeSchemaHeaderCollection Class + /// + /// A collection of DataTypeSchemaHeader objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataTypeSchemaHeader", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataTypeSchemaHeader")] + #if !NET_STANDARD + public partial class DataTypeSchemaHeaderCollection : List, ICloneable + #else + public partial class DataTypeSchemaHeaderCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataTypeSchemaHeaderCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataTypeSchemaHeaderCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataTypeSchemaHeaderCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataTypeSchemaHeaderCollection(DataTypeSchemaHeader[] values) + { + if (values != null) + { + return new DataTypeSchemaHeaderCollection(values); + } + + return new DataTypeSchemaHeaderCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataTypeSchemaHeader[](DataTypeSchemaHeaderCollection 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 (DataTypeSchemaHeaderCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataTypeSchemaHeaderCollection clone = new DataTypeSchemaHeaderCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataTypeSchemaHeader)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataTypeDescription Class + #if (!OPCUA_EXCLUDE_DataTypeDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataTypeDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataTypeDescription() + { + 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_dataTypeId = null; + m_name = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "DataTypeId", IsRequired = false, Order = 1)] + public NodeId DataTypeId + { + get { return m_dataTypeId; } + set { m_dataTypeId = value; } + } + + /// + [DataMember(Name = "Name", IsRequired = false, Order = 2)] + public QualifiedName Name + { + get { return m_name; } + set { m_name = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataTypeDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataTypeDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataTypeDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("DataTypeId", DataTypeId); + encoder.WriteQualifiedName("Name", Name); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DataTypeId = decoder.ReadNodeId("DataTypeId"); + Name = decoder.ReadQualifiedName("Name"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataTypeDescription value = encodeable as DataTypeDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_dataTypeId, value.m_dataTypeId)) return false; + if (!Utils.IsEqual(m_name, value.m_name)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataTypeDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataTypeDescription clone = (DataTypeDescription)base.MemberwiseClone(); + + clone.m_dataTypeId = (NodeId)Utils.Clone(this.m_dataTypeId); + clone.m_name = (QualifiedName)Utils.Clone(this.m_name); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_dataTypeId; + private QualifiedName m_name; + #endregion + } + + #region DataTypeDescriptionCollection Class + /// + /// A collection of DataTypeDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataTypeDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataTypeDescription")] + #if !NET_STANDARD + public partial class DataTypeDescriptionCollection : List, ICloneable + #else + public partial class DataTypeDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataTypeDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataTypeDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataTypeDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataTypeDescriptionCollection(DataTypeDescription[] values) + { + if (values != null) + { + return new DataTypeDescriptionCollection(values); + } + + return new DataTypeDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataTypeDescription[](DataTypeDescriptionCollection 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 (DataTypeDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataTypeDescriptionCollection clone = new DataTypeDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataTypeDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region StructureDescription Class + #if (!OPCUA_EXCLUDE_StructureDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class StructureDescription : DataTypeDescription + { + #region Constructors + /// + /// The default constructor. + /// + public StructureDescription() + { + 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_structureDefinition = new StructureDefinition(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "StructureDefinition", IsRequired = false, Order = 1)] + public StructureDefinition StructureDefinition + { + get + { + return m_structureDefinition; + } + + set + { + m_structureDefinition = value; + + if (value == null) + { + m_structureDefinition = new StructureDefinition(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.StructureDescription; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.StructureDescription_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.StructureDescription_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("StructureDefinition", StructureDefinition, typeof(StructureDefinition)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StructureDefinition = (StructureDefinition)decoder.ReadEncodeable("StructureDefinition", typeof(StructureDefinition)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + StructureDescription value = encodeable as StructureDescription; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_structureDefinition, value.m_structureDefinition)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (StructureDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + StructureDescription clone = (StructureDescription)base.MemberwiseClone(); + + clone.m_structureDefinition = (StructureDefinition)Utils.Clone(this.m_structureDefinition); + + return clone; + } + #endregion + + #region Private Fields + private StructureDefinition m_structureDefinition; + #endregion + } + + #region StructureDescriptionCollection Class + /// + /// A collection of StructureDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfStructureDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "StructureDescription")] + #if !NET_STANDARD + public partial class StructureDescriptionCollection : List, ICloneable + #else + public partial class StructureDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public StructureDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public StructureDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public StructureDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator StructureDescriptionCollection(StructureDescription[] values) + { + if (values != null) + { + return new StructureDescriptionCollection(values); + } + + return new StructureDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator StructureDescription[](StructureDescriptionCollection 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 (StructureDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + StructureDescriptionCollection clone = new StructureDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((StructureDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EnumDescription Class + #if (!OPCUA_EXCLUDE_EnumDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EnumDescription : DataTypeDescription + { + #region Constructors + /// + /// The default constructor. + /// + public EnumDescription() + { + 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_enumDefinition = new EnumDefinition(); + m_builtInType = (byte)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "EnumDefinition", IsRequired = false, Order = 1)] + public EnumDefinition EnumDefinition + { + get + { + return m_enumDefinition; + } + + set + { + m_enumDefinition = value; + + if (value == null) + { + m_enumDefinition = new EnumDefinition(); + } + } + } + + /// + [DataMember(Name = "BuiltInType", IsRequired = false, Order = 2)] + public byte BuiltInType + { + get { return m_builtInType; } + set { m_builtInType = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.EnumDescription; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EnumDescription_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EnumDescription_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("EnumDefinition", EnumDefinition, typeof(EnumDefinition)); + encoder.WriteByte("BuiltInType", BuiltInType); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EnumDefinition = (EnumDefinition)decoder.ReadEncodeable("EnumDefinition", typeof(EnumDefinition)); + BuiltInType = decoder.ReadByte("BuiltInType"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EnumDescription value = encodeable as EnumDescription; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_enumDefinition, value.m_enumDefinition)) return false; + if (!Utils.IsEqual(m_builtInType, value.m_builtInType)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (EnumDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EnumDescription clone = (EnumDescription)base.MemberwiseClone(); + + clone.m_enumDefinition = (EnumDefinition)Utils.Clone(this.m_enumDefinition); + clone.m_builtInType = (byte)Utils.Clone(this.m_builtInType); + + return clone; + } + #endregion + + #region Private Fields + private EnumDefinition m_enumDefinition; + private byte m_builtInType; + #endregion + } + + #region EnumDescriptionCollection Class + /// + /// A collection of EnumDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEnumDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EnumDescription")] + #if !NET_STANDARD + public partial class EnumDescriptionCollection : List, ICloneable + #else + public partial class EnumDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EnumDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EnumDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EnumDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EnumDescriptionCollection(EnumDescription[] values) + { + if (values != null) + { + return new EnumDescriptionCollection(values); + } + + return new EnumDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EnumDescription[](EnumDescriptionCollection 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 (EnumDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EnumDescriptionCollection clone = new EnumDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EnumDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SimpleTypeDescription Class + #if (!OPCUA_EXCLUDE_SimpleTypeDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SimpleTypeDescription : DataTypeDescription + { + #region Constructors + /// + /// The default constructor. + /// + public SimpleTypeDescription() + { + 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_baseDataType = null; + m_builtInType = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "BaseDataType", IsRequired = false, Order = 1)] + public NodeId BaseDataType + { + get { return m_baseDataType; } + set { m_baseDataType = value; } + } + + /// + [DataMember(Name = "BuiltInType", IsRequired = false, Order = 2)] + public byte BuiltInType + { + get { return m_builtInType; } + set { m_builtInType = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.SimpleTypeDescription; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SimpleTypeDescription_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SimpleTypeDescription_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("BaseDataType", BaseDataType); + encoder.WriteByte("BuiltInType", BuiltInType); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + BaseDataType = decoder.ReadNodeId("BaseDataType"); + BuiltInType = decoder.ReadByte("BuiltInType"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SimpleTypeDescription value = encodeable as SimpleTypeDescription; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_baseDataType, value.m_baseDataType)) return false; + if (!Utils.IsEqual(m_builtInType, value.m_builtInType)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (SimpleTypeDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SimpleTypeDescription clone = (SimpleTypeDescription)base.MemberwiseClone(); + + clone.m_baseDataType = (NodeId)Utils.Clone(this.m_baseDataType); + clone.m_builtInType = (byte)Utils.Clone(this.m_builtInType); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_baseDataType; + private byte m_builtInType; + #endregion + } + + #region SimpleTypeDescriptionCollection Class + /// + /// A collection of SimpleTypeDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSimpleTypeDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SimpleTypeDescription")] + #if !NET_STANDARD + public partial class SimpleTypeDescriptionCollection : List, ICloneable + #else + public partial class SimpleTypeDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SimpleTypeDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SimpleTypeDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SimpleTypeDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SimpleTypeDescriptionCollection(SimpleTypeDescription[] values) + { + if (values != null) + { + return new SimpleTypeDescriptionCollection(values); + } + + return new SimpleTypeDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SimpleTypeDescription[](SimpleTypeDescriptionCollection 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 (SimpleTypeDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SimpleTypeDescriptionCollection clone = new SimpleTypeDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SimpleTypeDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region UABinaryFileDataType Class + #if (!OPCUA_EXCLUDE_UABinaryFileDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UABinaryFileDataType : DataTypeSchemaHeader + { + #region Constructors + /// + /// The default constructor. + /// + public UABinaryFileDataType() + { + 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_schemaLocation = null; + m_fileHeader = new KeyValuePairCollection(); + m_body = Variant.Null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SchemaLocation", IsRequired = false, Order = 1)] + public string SchemaLocation + { + get { return m_schemaLocation; } + set { m_schemaLocation = value; } + } + + /// + /// + /// + [DataMember(Name = "FileHeader", IsRequired = false, Order = 2)] + public KeyValuePairCollection FileHeader + { + get + { + return m_fileHeader; + } + + set + { + m_fileHeader = value; + + if (value == null) + { + m_fileHeader = new KeyValuePairCollection(); + } + } + } + + /// + [DataMember(Name = "Body", IsRequired = false, Order = 3)] + public Variant Body + { + get { return m_body; } + set { m_body = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UABinaryFileDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UABinaryFileDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UABinaryFileDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("SchemaLocation", SchemaLocation); + encoder.WriteEncodeableArray("FileHeader", FileHeader.ToArray(), typeof(KeyValuePair)); + encoder.WriteVariant("Body", Body); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SchemaLocation = decoder.ReadString("SchemaLocation"); + FileHeader = (KeyValuePairCollection)decoder.ReadEncodeableArray("FileHeader", typeof(KeyValuePair)); + Body = decoder.ReadVariant("Body"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UABinaryFileDataType value = encodeable as UABinaryFileDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_schemaLocation, value.m_schemaLocation)) return false; + if (!Utils.IsEqual(m_fileHeader, value.m_fileHeader)) return false; + if (!Utils.IsEqual(m_body, value.m_body)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UABinaryFileDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UABinaryFileDataType clone = (UABinaryFileDataType)base.MemberwiseClone(); + + clone.m_schemaLocation = (string)Utils.Clone(this.m_schemaLocation); + clone.m_fileHeader = (KeyValuePairCollection)Utils.Clone(this.m_fileHeader); + clone.m_body = (Variant)Utils.Clone(this.m_body); + + return clone; + } + #endregion + + #region Private Fields + private string m_schemaLocation; + private KeyValuePairCollection m_fileHeader; + private Variant m_body; + #endregion + } + + #region UABinaryFileDataTypeCollection Class + /// + /// A collection of UABinaryFileDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUABinaryFileDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UABinaryFileDataType")] + #if !NET_STANDARD + public partial class UABinaryFileDataTypeCollection : List, ICloneable + #else + public partial class UABinaryFileDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UABinaryFileDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UABinaryFileDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UABinaryFileDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UABinaryFileDataTypeCollection(UABinaryFileDataType[] values) + { + if (values != null) + { + return new UABinaryFileDataTypeCollection(values); + } + + return new UABinaryFileDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UABinaryFileDataType[](UABinaryFileDataTypeCollection 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 (UABinaryFileDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UABinaryFileDataTypeCollection clone = new UABinaryFileDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UABinaryFileDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PubSubState Enumeration + #if (!OPCUA_EXCLUDE_PubSubState) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum PubSubState + { + /// + [EnumMember(Value = "Disabled_0")] + Disabled = 0, + + /// + [EnumMember(Value = "Paused_1")] + Paused = 1, + + /// + [EnumMember(Value = "Operational_2")] + Operational = 2, + + /// + [EnumMember(Value = "Error_3")] + Error = 3, + } + + #region PubSubStateCollection Class + /// + /// A collection of PubSubState objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPubSubState", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PubSubState")] + #if !NET_STANDARD + public partial class PubSubStateCollection : List, ICloneable + #else + public partial class PubSubStateCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PubSubStateCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PubSubStateCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PubSubStateCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PubSubStateCollection(PubSubState[] values) + { + if (values != null) + { + return new PubSubStateCollection(values); + } + + return new PubSubStateCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PubSubState[](PubSubStateCollection 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 (PubSubStateCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PubSubStateCollection clone = new PubSubStateCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PubSubState)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetMetaDataType Class + #if (!OPCUA_EXCLUDE_DataSetMetaDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetMetaDataType : DataTypeSchemaHeader + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetMetaDataType() + { + 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_name = null; + m_description = null; + m_fields = new FieldMetaDataCollection(); + m_dataSetClassId = Uuid.Empty; + m_configurationVersion = new ConfigurationVersionDataType(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 2)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + + /// + /// + /// + [DataMember(Name = "Fields", IsRequired = false, Order = 3)] + public FieldMetaDataCollection Fields + { + get + { + return m_fields; + } + + set + { + m_fields = value; + + if (value == null) + { + m_fields = new FieldMetaDataCollection(); + } + } + } + + /// + [DataMember(Name = "DataSetClassId", IsRequired = false, Order = 4)] + public Uuid DataSetClassId + { + get { return m_dataSetClassId; } + set { m_dataSetClassId = value; } + } + + /// + /// + /// + [DataMember(Name = "ConfigurationVersion", IsRequired = false, Order = 5)] + public ConfigurationVersionDataType ConfigurationVersion + { + get + { + return m_configurationVersion; + } + + set + { + m_configurationVersion = value; + + if (value == null) + { + m_configurationVersion = new ConfigurationVersionDataType(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetMetaDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetMetaDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetMetaDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteLocalizedText("Description", Description); + encoder.WriteEncodeableArray("Fields", Fields.ToArray(), typeof(FieldMetaData)); + encoder.WriteGuid("DataSetClassId", DataSetClassId); + encoder.WriteEncodeable("ConfigurationVersion", ConfigurationVersion, typeof(ConfigurationVersionDataType)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Description = decoder.ReadLocalizedText("Description"); + Fields = (FieldMetaDataCollection)decoder.ReadEncodeableArray("Fields", typeof(FieldMetaData)); + DataSetClassId = decoder.ReadGuid("DataSetClassId"); + ConfigurationVersion = (ConfigurationVersionDataType)decoder.ReadEncodeable("ConfigurationVersion", typeof(ConfigurationVersionDataType)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetMetaDataType value = encodeable as DataSetMetaDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + if (!Utils.IsEqual(m_fields, value.m_fields)) return false; + if (!Utils.IsEqual(m_dataSetClassId, value.m_dataSetClassId)) return false; + if (!Utils.IsEqual(m_configurationVersion, value.m_configurationVersion)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DataSetMetaDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetMetaDataType clone = (DataSetMetaDataType)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + clone.m_fields = (FieldMetaDataCollection)Utils.Clone(this.m_fields); + clone.m_dataSetClassId = (Uuid)Utils.Clone(this.m_dataSetClassId); + clone.m_configurationVersion = (ConfigurationVersionDataType)Utils.Clone(this.m_configurationVersion); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private LocalizedText m_description; + private FieldMetaDataCollection m_fields; + private Uuid m_dataSetClassId; + private ConfigurationVersionDataType m_configurationVersion; + #endregion + } + + #region DataSetMetaDataTypeCollection Class + /// + /// A collection of DataSetMetaDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetMetaDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetMetaDataType")] + #if !NET_STANDARD + public partial class DataSetMetaDataTypeCollection : List, ICloneable + #else + public partial class DataSetMetaDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetMetaDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetMetaDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetMetaDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetMetaDataTypeCollection(DataSetMetaDataType[] values) + { + if (values != null) + { + return new DataSetMetaDataTypeCollection(values); + } + + return new DataSetMetaDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetMetaDataType[](DataSetMetaDataTypeCollection 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 (DataSetMetaDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetMetaDataTypeCollection clone = new DataSetMetaDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetMetaDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region FieldMetaData Class + #if (!OPCUA_EXCLUDE_FieldMetaData) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FieldMetaData : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FieldMetaData() + { + 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_name = null; + m_description = null; + m_fieldFlags = 0; + m_builtInType = (byte)0; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_maxStringLength = (uint)0; + m_dataSetFieldId = Uuid.Empty; + m_properties = new KeyValuePairCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 2)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + + /// + [DataMember(Name = "FieldFlags", IsRequired = false, Order = 3)] + public ushort FieldFlags + { + get { return m_fieldFlags; } + set { m_fieldFlags = value; } + } + + /// + [DataMember(Name = "BuiltInType", IsRequired = false, Order = 4)] + public byte BuiltInType + { + get { return m_builtInType; } + set { m_builtInType = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 5)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 6)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 7)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "MaxStringLength", IsRequired = false, Order = 8)] + public uint MaxStringLength + { + get { return m_maxStringLength; } + set { m_maxStringLength = value; } + } + + /// + [DataMember(Name = "DataSetFieldId", IsRequired = false, Order = 9)] + public Uuid DataSetFieldId + { + get { return m_dataSetFieldId; } + set { m_dataSetFieldId = value; } + } + + /// + /// + /// + [DataMember(Name = "Properties", IsRequired = false, Order = 10)] + public KeyValuePairCollection Properties + { + get + { + return m_properties; + } + + set + { + m_properties = value; + + if (value == null) + { + m_properties = new KeyValuePairCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FieldMetaData; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FieldMetaData_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FieldMetaData_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteLocalizedText("Description", Description); + encoder.WriteUInt16("FieldFlags", FieldFlags); + encoder.WriteByte("BuiltInType", BuiltInType); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteUInt32("MaxStringLength", MaxStringLength); + encoder.WriteGuid("DataSetFieldId", DataSetFieldId); + encoder.WriteEncodeableArray("Properties", Properties.ToArray(), typeof(KeyValuePair)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Description = decoder.ReadLocalizedText("Description"); + FieldFlags = decoder.ReadUInt16("FieldFlags"); + BuiltInType = decoder.ReadByte("BuiltInType"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + MaxStringLength = decoder.ReadUInt32("MaxStringLength"); + DataSetFieldId = decoder.ReadGuid("DataSetFieldId"); + Properties = (KeyValuePairCollection)decoder.ReadEncodeableArray("Properties", typeof(KeyValuePair)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FieldMetaData value = encodeable as FieldMetaData; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + if (!Utils.IsEqual(m_fieldFlags, value.m_fieldFlags)) return false; + if (!Utils.IsEqual(m_builtInType, value.m_builtInType)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_maxStringLength, value.m_maxStringLength)) return false; + if (!Utils.IsEqual(m_dataSetFieldId, value.m_dataSetFieldId)) return false; + if (!Utils.IsEqual(m_properties, value.m_properties)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FieldMetaData)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FieldMetaData clone = (FieldMetaData)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + clone.m_fieldFlags = (ushort)Utils.Clone(this.m_fieldFlags); + clone.m_builtInType = (byte)Utils.Clone(this.m_builtInType); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_maxStringLength = (uint)Utils.Clone(this.m_maxStringLength); + clone.m_dataSetFieldId = (Uuid)Utils.Clone(this.m_dataSetFieldId); + clone.m_properties = (KeyValuePairCollection)Utils.Clone(this.m_properties); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private LocalizedText m_description; + private ushort m_fieldFlags; + private byte m_builtInType; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private uint m_maxStringLength; + private Uuid m_dataSetFieldId; + private KeyValuePairCollection m_properties; + #endregion + } + + #region FieldMetaDataCollection Class + /// + /// A collection of FieldMetaData objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfFieldMetaData", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "FieldMetaData")] + #if !NET_STANDARD + public partial class FieldMetaDataCollection : List, ICloneable + #else + public partial class FieldMetaDataCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public FieldMetaDataCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public FieldMetaDataCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public FieldMetaDataCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator FieldMetaDataCollection(FieldMetaData[] values) + { + if (values != null) + { + return new FieldMetaDataCollection(values); + } + + return new FieldMetaDataCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator FieldMetaData[](FieldMetaDataCollection 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 (FieldMetaDataCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + FieldMetaDataCollection clone = new FieldMetaDataCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((FieldMetaData)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetFieldFlags Enumeration + #if (!OPCUA_EXCLUDE_DataSetFieldFlags) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum DataSetFieldFlags : UInt16 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "PromotedField_1")] + PromotedField = 1, + } + #endif + #endregion + + #region ConfigurationVersionDataType Class + #if (!OPCUA_EXCLUDE_ConfigurationVersionDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ConfigurationVersionDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ConfigurationVersionDataType() + { + 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_majorVersion = (uint)0; + m_minorVersion = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "MajorVersion", IsRequired = false, Order = 1)] + public uint MajorVersion + { + get { return m_majorVersion; } + set { m_majorVersion = value; } + } + + /// + [DataMember(Name = "MinorVersion", IsRequired = false, Order = 2)] + public uint MinorVersion + { + get { return m_minorVersion; } + set { m_minorVersion = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ConfigurationVersionDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ConfigurationVersionDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ConfigurationVersionDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("MajorVersion", MajorVersion); + encoder.WriteUInt32("MinorVersion", MinorVersion); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + MajorVersion = decoder.ReadUInt32("MajorVersion"); + MinorVersion = decoder.ReadUInt32("MinorVersion"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ConfigurationVersionDataType value = encodeable as ConfigurationVersionDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_majorVersion, value.m_majorVersion)) return false; + if (!Utils.IsEqual(m_minorVersion, value.m_minorVersion)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ConfigurationVersionDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ConfigurationVersionDataType clone = (ConfigurationVersionDataType)base.MemberwiseClone(); + + clone.m_majorVersion = (uint)Utils.Clone(this.m_majorVersion); + clone.m_minorVersion = (uint)Utils.Clone(this.m_minorVersion); + + return clone; + } + #endregion + + #region Private Fields + private uint m_majorVersion; + private uint m_minorVersion; + #endregion + } + + #region ConfigurationVersionDataTypeCollection Class + /// + /// A collection of ConfigurationVersionDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfConfigurationVersionDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ConfigurationVersionDataType")] + #if !NET_STANDARD + public partial class ConfigurationVersionDataTypeCollection : List, ICloneable + #else + public partial class ConfigurationVersionDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ConfigurationVersionDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ConfigurationVersionDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ConfigurationVersionDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ConfigurationVersionDataTypeCollection(ConfigurationVersionDataType[] values) + { + if (values != null) + { + return new ConfigurationVersionDataTypeCollection(values); + } + + return new ConfigurationVersionDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ConfigurationVersionDataType[](ConfigurationVersionDataTypeCollection 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 (ConfigurationVersionDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ConfigurationVersionDataTypeCollection clone = new ConfigurationVersionDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ConfigurationVersionDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PublishedDataSetDataType Class + #if (!OPCUA_EXCLUDE_PublishedDataSetDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishedDataSetDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PublishedDataSetDataType() + { + 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_name = null; + m_dataSetFolder = new StringCollection(); + m_dataSetMetaData = new DataSetMetaDataType(); + m_extensionFields = new KeyValuePairCollection(); + m_dataSetSource = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + /// + /// + [DataMember(Name = "DataSetFolder", IsRequired = false, Order = 2)] + public StringCollection DataSetFolder + { + get + { + return m_dataSetFolder; + } + + set + { + m_dataSetFolder = value; + + if (value == null) + { + m_dataSetFolder = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DataSetMetaData", IsRequired = false, Order = 3)] + public DataSetMetaDataType DataSetMetaData + { + get + { + return m_dataSetMetaData; + } + + set + { + m_dataSetMetaData = value; + + if (value == null) + { + m_dataSetMetaData = new DataSetMetaDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ExtensionFields", IsRequired = false, Order = 4)] + public KeyValuePairCollection ExtensionFields + { + get + { + return m_extensionFields; + } + + set + { + m_extensionFields = value; + + if (value == null) + { + m_extensionFields = new KeyValuePairCollection(); + } + } + } + + /// + [DataMember(Name = "DataSetSource", IsRequired = false, Order = 5)] + public ExtensionObject DataSetSource + { + get { return m_dataSetSource; } + set { m_dataSetSource = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishedDataSetDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishedDataSetDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishedDataSetDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteStringArray("DataSetFolder", DataSetFolder); + encoder.WriteEncodeable("DataSetMetaData", DataSetMetaData, typeof(DataSetMetaDataType)); + encoder.WriteEncodeableArray("ExtensionFields", ExtensionFields.ToArray(), typeof(KeyValuePair)); + encoder.WriteExtensionObject("DataSetSource", DataSetSource); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + DataSetFolder = decoder.ReadStringArray("DataSetFolder"); + DataSetMetaData = (DataSetMetaDataType)decoder.ReadEncodeable("DataSetMetaData", typeof(DataSetMetaDataType)); + ExtensionFields = (KeyValuePairCollection)decoder.ReadEncodeableArray("ExtensionFields", typeof(KeyValuePair)); + DataSetSource = decoder.ReadExtensionObject("DataSetSource"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishedDataSetDataType value = encodeable as PublishedDataSetDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_dataSetFolder, value.m_dataSetFolder)) return false; + if (!Utils.IsEqual(m_dataSetMetaData, value.m_dataSetMetaData)) return false; + if (!Utils.IsEqual(m_extensionFields, value.m_extensionFields)) return false; + if (!Utils.IsEqual(m_dataSetSource, value.m_dataSetSource)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PublishedDataSetDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishedDataSetDataType clone = (PublishedDataSetDataType)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_dataSetFolder = (StringCollection)Utils.Clone(this.m_dataSetFolder); + clone.m_dataSetMetaData = (DataSetMetaDataType)Utils.Clone(this.m_dataSetMetaData); + clone.m_extensionFields = (KeyValuePairCollection)Utils.Clone(this.m_extensionFields); + clone.m_dataSetSource = (ExtensionObject)Utils.Clone(this.m_dataSetSource); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private StringCollection m_dataSetFolder; + private DataSetMetaDataType m_dataSetMetaData; + private KeyValuePairCollection m_extensionFields; + private ExtensionObject m_dataSetSource; + #endregion + } + + #region PublishedDataSetDataTypeCollection Class + /// + /// A collection of PublishedDataSetDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPublishedDataSetDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PublishedDataSetDataType")] + #if !NET_STANDARD + public partial class PublishedDataSetDataTypeCollection : List, ICloneable + #else + public partial class PublishedDataSetDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PublishedDataSetDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PublishedDataSetDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PublishedDataSetDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PublishedDataSetDataTypeCollection(PublishedDataSetDataType[] values) + { + if (values != null) + { + return new PublishedDataSetDataTypeCollection(values); + } + + return new PublishedDataSetDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PublishedDataSetDataType[](PublishedDataSetDataTypeCollection 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 (PublishedDataSetDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PublishedDataSetDataTypeCollection clone = new PublishedDataSetDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PublishedDataSetDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PublishedDataSetSourceDataType Class + #if (!OPCUA_EXCLUDE_PublishedDataSetSourceDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishedDataSetSourceDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PublishedDataSetSourceDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishedDataSetSourceDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishedDataSetSourceDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishedDataSetSourceDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishedDataSetSourceDataType value = encodeable as PublishedDataSetSourceDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PublishedDataSetSourceDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishedDataSetSourceDataType clone = (PublishedDataSetSourceDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region PublishedDataSetSourceDataTypeCollection Class + /// + /// A collection of PublishedDataSetSourceDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPublishedDataSetSourceDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PublishedDataSetSourceDataType")] + #if !NET_STANDARD + public partial class PublishedDataSetSourceDataTypeCollection : List, ICloneable + #else + public partial class PublishedDataSetSourceDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PublishedDataSetSourceDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PublishedDataSetSourceDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PublishedDataSetSourceDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PublishedDataSetSourceDataTypeCollection(PublishedDataSetSourceDataType[] values) + { + if (values != null) + { + return new PublishedDataSetSourceDataTypeCollection(values); + } + + return new PublishedDataSetSourceDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PublishedDataSetSourceDataType[](PublishedDataSetSourceDataTypeCollection 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 (PublishedDataSetSourceDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PublishedDataSetSourceDataTypeCollection clone = new PublishedDataSetSourceDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PublishedDataSetSourceDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PublishedVariableDataType Class + #if (!OPCUA_EXCLUDE_PublishedVariableDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishedVariableDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PublishedVariableDataType() + { + 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_publishedVariable = null; + m_attributeId = (uint)0; + m_samplingIntervalHint = (double)0; + m_deadbandType = (uint)0; + m_deadbandValue = (double)0; + m_indexRange = null; + m_substituteValue = Variant.Null; + m_metaDataProperties = new QualifiedNameCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "PublishedVariable", IsRequired = false, Order = 1)] + public NodeId PublishedVariable + { + get { return m_publishedVariable; } + set { m_publishedVariable = value; } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 2)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "SamplingIntervalHint", IsRequired = false, Order = 3)] + public double SamplingIntervalHint + { + get { return m_samplingIntervalHint; } + set { m_samplingIntervalHint = value; } + } + + /// + [DataMember(Name = "DeadbandType", IsRequired = false, Order = 4)] + public uint DeadbandType + { + get { return m_deadbandType; } + set { m_deadbandType = value; } + } + + /// + [DataMember(Name = "DeadbandValue", IsRequired = false, Order = 5)] + public double DeadbandValue + { + get { return m_deadbandValue; } + set { m_deadbandValue = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 6)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + + /// + [DataMember(Name = "SubstituteValue", IsRequired = false, Order = 7)] + public Variant SubstituteValue + { + get { return m_substituteValue; } + set { m_substituteValue = value; } + } + + /// + /// + /// + [DataMember(Name = "MetaDataProperties", IsRequired = false, Order = 8)] + public QualifiedNameCollection MetaDataProperties + { + get + { + return m_metaDataProperties; + } + + set + { + m_metaDataProperties = value; + + if (value == null) + { + m_metaDataProperties = new QualifiedNameCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishedVariableDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishedVariableDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishedVariableDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("PublishedVariable", PublishedVariable); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteDouble("SamplingIntervalHint", SamplingIntervalHint); + encoder.WriteUInt32("DeadbandType", DeadbandType); + encoder.WriteDouble("DeadbandValue", DeadbandValue); + encoder.WriteString("IndexRange", IndexRange); + encoder.WriteVariant("SubstituteValue", SubstituteValue); + encoder.WriteQualifiedNameArray("MetaDataProperties", MetaDataProperties); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PublishedVariable = decoder.ReadNodeId("PublishedVariable"); + AttributeId = decoder.ReadUInt32("AttributeId"); + SamplingIntervalHint = decoder.ReadDouble("SamplingIntervalHint"); + DeadbandType = decoder.ReadUInt32("DeadbandType"); + DeadbandValue = decoder.ReadDouble("DeadbandValue"); + IndexRange = decoder.ReadString("IndexRange"); + SubstituteValue = decoder.ReadVariant("SubstituteValue"); + MetaDataProperties = decoder.ReadQualifiedNameArray("MetaDataProperties"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishedVariableDataType value = encodeable as PublishedVariableDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_publishedVariable, value.m_publishedVariable)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_samplingIntervalHint, value.m_samplingIntervalHint)) return false; + if (!Utils.IsEqual(m_deadbandType, value.m_deadbandType)) return false; + if (!Utils.IsEqual(m_deadbandValue, value.m_deadbandValue)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + if (!Utils.IsEqual(m_substituteValue, value.m_substituteValue)) return false; + if (!Utils.IsEqual(m_metaDataProperties, value.m_metaDataProperties)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PublishedVariableDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishedVariableDataType clone = (PublishedVariableDataType)base.MemberwiseClone(); + + clone.m_publishedVariable = (NodeId)Utils.Clone(this.m_publishedVariable); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_samplingIntervalHint = (double)Utils.Clone(this.m_samplingIntervalHint); + clone.m_deadbandType = (uint)Utils.Clone(this.m_deadbandType); + clone.m_deadbandValue = (double)Utils.Clone(this.m_deadbandValue); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + clone.m_substituteValue = (Variant)Utils.Clone(this.m_substituteValue); + clone.m_metaDataProperties = (QualifiedNameCollection)Utils.Clone(this.m_metaDataProperties); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_publishedVariable; + private uint m_attributeId; + private double m_samplingIntervalHint; + private uint m_deadbandType; + private double m_deadbandValue; + private string m_indexRange; + private Variant m_substituteValue; + private QualifiedNameCollection m_metaDataProperties; + #endregion + } + + #region PublishedVariableDataTypeCollection Class + /// + /// A collection of PublishedVariableDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPublishedVariableDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PublishedVariableDataType")] + #if !NET_STANDARD + public partial class PublishedVariableDataTypeCollection : List, ICloneable + #else + public partial class PublishedVariableDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PublishedVariableDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PublishedVariableDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PublishedVariableDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PublishedVariableDataTypeCollection(PublishedVariableDataType[] values) + { + if (values != null) + { + return new PublishedVariableDataTypeCollection(values); + } + + return new PublishedVariableDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PublishedVariableDataType[](PublishedVariableDataTypeCollection 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 (PublishedVariableDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PublishedVariableDataTypeCollection clone = new PublishedVariableDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PublishedVariableDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PublishedDataItemsDataType Class + #if (!OPCUA_EXCLUDE_PublishedDataItemsDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishedDataItemsDataType : PublishedDataSetSourceDataType + { + #region Constructors + /// + /// The default constructor. + /// + public PublishedDataItemsDataType() + { + 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_publishedData = new PublishedVariableDataTypeCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "PublishedData", IsRequired = false, Order = 1)] + public PublishedVariableDataTypeCollection PublishedData + { + get + { + return m_publishedData; + } + + set + { + m_publishedData = value; + + if (value == null) + { + m_publishedData = new PublishedVariableDataTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishedDataItemsDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishedDataItemsDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishedDataItemsDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("PublishedData", PublishedData.ToArray(), typeof(PublishedVariableDataType)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PublishedData = (PublishedVariableDataTypeCollection)decoder.ReadEncodeableArray("PublishedData", typeof(PublishedVariableDataType)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishedDataItemsDataType value = encodeable as PublishedDataItemsDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_publishedData, value.m_publishedData)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (PublishedDataItemsDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishedDataItemsDataType clone = (PublishedDataItemsDataType)base.MemberwiseClone(); + + clone.m_publishedData = (PublishedVariableDataTypeCollection)Utils.Clone(this.m_publishedData); + + return clone; + } + #endregion + + #region Private Fields + private PublishedVariableDataTypeCollection m_publishedData; + #endregion + } + + #region PublishedDataItemsDataTypeCollection Class + /// + /// A collection of PublishedDataItemsDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPublishedDataItemsDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PublishedDataItemsDataType")] + #if !NET_STANDARD + public partial class PublishedDataItemsDataTypeCollection : List, ICloneable + #else + public partial class PublishedDataItemsDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PublishedDataItemsDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PublishedDataItemsDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PublishedDataItemsDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PublishedDataItemsDataTypeCollection(PublishedDataItemsDataType[] values) + { + if (values != null) + { + return new PublishedDataItemsDataTypeCollection(values); + } + + return new PublishedDataItemsDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PublishedDataItemsDataType[](PublishedDataItemsDataTypeCollection 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 (PublishedDataItemsDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PublishedDataItemsDataTypeCollection clone = new PublishedDataItemsDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PublishedDataItemsDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PublishedEventsDataType Class + #if (!OPCUA_EXCLUDE_PublishedEventsDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishedEventsDataType : PublishedDataSetSourceDataType + { + #region Constructors + /// + /// The default constructor. + /// + public PublishedEventsDataType() + { + 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_eventNotifier = null; + m_selectedFields = new SimpleAttributeOperandCollection(); + m_filter = new ContentFilter(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "EventNotifier", IsRequired = false, Order = 1)] + public NodeId EventNotifier + { + get { return m_eventNotifier; } + set { m_eventNotifier = value; } + } + + /// + /// + /// + [DataMember(Name = "SelectedFields", IsRequired = false, Order = 2)] + public SimpleAttributeOperandCollection SelectedFields + { + get + { + return m_selectedFields; + } + + set + { + m_selectedFields = value; + + if (value == null) + { + m_selectedFields = new SimpleAttributeOperandCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Filter", IsRequired = false, Order = 3)] + public ContentFilter Filter + { + get + { + return m_filter; + } + + set + { + m_filter = value; + + if (value == null) + { + m_filter = new ContentFilter(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishedEventsDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishedEventsDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishedEventsDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("EventNotifier", EventNotifier); + encoder.WriteEncodeableArray("SelectedFields", SelectedFields.ToArray(), typeof(SimpleAttributeOperand)); + encoder.WriteEncodeable("Filter", Filter, typeof(ContentFilter)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EventNotifier = decoder.ReadNodeId("EventNotifier"); + SelectedFields = (SimpleAttributeOperandCollection)decoder.ReadEncodeableArray("SelectedFields", typeof(SimpleAttributeOperand)); + Filter = (ContentFilter)decoder.ReadEncodeable("Filter", typeof(ContentFilter)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishedEventsDataType value = encodeable as PublishedEventsDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_eventNotifier, value.m_eventNotifier)) return false; + if (!Utils.IsEqual(m_selectedFields, value.m_selectedFields)) return false; + if (!Utils.IsEqual(m_filter, value.m_filter)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (PublishedEventsDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishedEventsDataType clone = (PublishedEventsDataType)base.MemberwiseClone(); + + clone.m_eventNotifier = (NodeId)Utils.Clone(this.m_eventNotifier); + clone.m_selectedFields = (SimpleAttributeOperandCollection)Utils.Clone(this.m_selectedFields); + clone.m_filter = (ContentFilter)Utils.Clone(this.m_filter); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_eventNotifier; + private SimpleAttributeOperandCollection m_selectedFields; + private ContentFilter m_filter; + #endregion + } + + #region PublishedEventsDataTypeCollection Class + /// + /// A collection of PublishedEventsDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPublishedEventsDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PublishedEventsDataType")] + #if !NET_STANDARD + public partial class PublishedEventsDataTypeCollection : List, ICloneable + #else + public partial class PublishedEventsDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PublishedEventsDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PublishedEventsDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PublishedEventsDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PublishedEventsDataTypeCollection(PublishedEventsDataType[] values) + { + if (values != null) + { + return new PublishedEventsDataTypeCollection(values); + } + + return new PublishedEventsDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PublishedEventsDataType[](PublishedEventsDataTypeCollection 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 (PublishedEventsDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PublishedEventsDataTypeCollection clone = new PublishedEventsDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PublishedEventsDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetFieldContentMask Enumeration + #if (!OPCUA_EXCLUDE_DataSetFieldContentMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum DataSetFieldContentMask : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "StatusCode_1")] + StatusCode = 1, + + /// + [EnumMember(Value = "SourceTimestamp_2")] + SourceTimestamp = 2, + + /// + [EnumMember(Value = "ServerTimestamp_4")] + ServerTimestamp = 4, + + /// + [EnumMember(Value = "SourcePicoSeconds_8")] + SourcePicoSeconds = 8, + + /// + [EnumMember(Value = "ServerPicoSeconds_16")] + ServerPicoSeconds = 16, + + /// + [EnumMember(Value = "RawData_32")] + RawData = 32, + } + + #region DataSetFieldContentMaskCollection Class + /// + /// A collection of DataSetFieldContentMask objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetFieldContentMask", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetFieldContentMask")] + #if !NET_STANDARD + public partial class DataSetFieldContentMaskCollection : List, ICloneable + #else + public partial class DataSetFieldContentMaskCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetFieldContentMaskCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetFieldContentMaskCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetFieldContentMaskCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetFieldContentMaskCollection(DataSetFieldContentMask[] values) + { + if (values != null) + { + return new DataSetFieldContentMaskCollection(values); + } + + return new DataSetFieldContentMaskCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetFieldContentMask[](DataSetFieldContentMaskCollection 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 (DataSetFieldContentMaskCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetFieldContentMaskCollection clone = new DataSetFieldContentMaskCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetFieldContentMask)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetWriterDataType Class + #if (!OPCUA_EXCLUDE_DataSetWriterDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetWriterDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetWriterDataType() + { + 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_name = null; + m_enabled = true; + m_dataSetWriterId = (ushort)0; + m_dataSetFieldContentMask = 0; + m_keyFrameCount = (uint)0; + m_dataSetName = null; + m_dataSetWriterProperties = new KeyValuePairCollection(); + m_transportSettings = null; + m_messageSettings = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Enabled", IsRequired = false, Order = 2)] + public bool Enabled + { + get { return m_enabled; } + set { m_enabled = value; } + } + + /// + [DataMember(Name = "DataSetWriterId", IsRequired = false, Order = 3)] + public ushort DataSetWriterId + { + get { return m_dataSetWriterId; } + set { m_dataSetWriterId = value; } + } + + /// + [DataMember(Name = "DataSetFieldContentMask", IsRequired = false, Order = 4)] + public uint DataSetFieldContentMask + { + get { return m_dataSetFieldContentMask; } + set { m_dataSetFieldContentMask = value; } + } + + /// + [DataMember(Name = "KeyFrameCount", IsRequired = false, Order = 5)] + public uint KeyFrameCount + { + get { return m_keyFrameCount; } + set { m_keyFrameCount = value; } + } + + /// + [DataMember(Name = "DataSetName", IsRequired = false, Order = 6)] + public string DataSetName + { + get { return m_dataSetName; } + set { m_dataSetName = value; } + } + + /// + /// + /// + [DataMember(Name = "DataSetWriterProperties", IsRequired = false, Order = 7)] + public KeyValuePairCollection DataSetWriterProperties + { + get + { + return m_dataSetWriterProperties; + } + + set + { + m_dataSetWriterProperties = value; + + if (value == null) + { + m_dataSetWriterProperties = new KeyValuePairCollection(); + } + } + } + + /// + [DataMember(Name = "TransportSettings", IsRequired = false, Order = 8)] + public ExtensionObject TransportSettings + { + get { return m_transportSettings; } + set { m_transportSettings = value; } + } + + /// + [DataMember(Name = "MessageSettings", IsRequired = false, Order = 9)] + public ExtensionObject MessageSettings + { + get { return m_messageSettings; } + set { m_messageSettings = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetWriterDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetWriterDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetWriterDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteBoolean("Enabled", Enabled); + encoder.WriteUInt16("DataSetWriterId", DataSetWriterId); + encoder.WriteUInt32("DataSetFieldContentMask", DataSetFieldContentMask); + encoder.WriteUInt32("KeyFrameCount", KeyFrameCount); + encoder.WriteString("DataSetName", DataSetName); + encoder.WriteEncodeableArray("DataSetWriterProperties", DataSetWriterProperties.ToArray(), typeof(KeyValuePair)); + encoder.WriteExtensionObject("TransportSettings", TransportSettings); + encoder.WriteExtensionObject("MessageSettings", MessageSettings); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Enabled = decoder.ReadBoolean("Enabled"); + DataSetWriterId = decoder.ReadUInt16("DataSetWriterId"); + DataSetFieldContentMask = decoder.ReadUInt32("DataSetFieldContentMask"); + KeyFrameCount = decoder.ReadUInt32("KeyFrameCount"); + DataSetName = decoder.ReadString("DataSetName"); + DataSetWriterProperties = (KeyValuePairCollection)decoder.ReadEncodeableArray("DataSetWriterProperties", typeof(KeyValuePair)); + TransportSettings = decoder.ReadExtensionObject("TransportSettings"); + MessageSettings = decoder.ReadExtensionObject("MessageSettings"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetWriterDataType value = encodeable as DataSetWriterDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_enabled, value.m_enabled)) return false; + if (!Utils.IsEqual(m_dataSetWriterId, value.m_dataSetWriterId)) return false; + if (!Utils.IsEqual(m_dataSetFieldContentMask, value.m_dataSetFieldContentMask)) return false; + if (!Utils.IsEqual(m_keyFrameCount, value.m_keyFrameCount)) return false; + if (!Utils.IsEqual(m_dataSetName, value.m_dataSetName)) return false; + if (!Utils.IsEqual(m_dataSetWriterProperties, value.m_dataSetWriterProperties)) return false; + if (!Utils.IsEqual(m_transportSettings, value.m_transportSettings)) return false; + if (!Utils.IsEqual(m_messageSettings, value.m_messageSettings)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataSetWriterDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetWriterDataType clone = (DataSetWriterDataType)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_enabled = (bool)Utils.Clone(this.m_enabled); + clone.m_dataSetWriterId = (ushort)Utils.Clone(this.m_dataSetWriterId); + clone.m_dataSetFieldContentMask = (uint)Utils.Clone(this.m_dataSetFieldContentMask); + clone.m_keyFrameCount = (uint)Utils.Clone(this.m_keyFrameCount); + clone.m_dataSetName = (string)Utils.Clone(this.m_dataSetName); + clone.m_dataSetWriterProperties = (KeyValuePairCollection)Utils.Clone(this.m_dataSetWriterProperties); + clone.m_transportSettings = (ExtensionObject)Utils.Clone(this.m_transportSettings); + clone.m_messageSettings = (ExtensionObject)Utils.Clone(this.m_messageSettings); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private bool m_enabled; + private ushort m_dataSetWriterId; + private uint m_dataSetFieldContentMask; + private uint m_keyFrameCount; + private string m_dataSetName; + private KeyValuePairCollection m_dataSetWriterProperties; + private ExtensionObject m_transportSettings; + private ExtensionObject m_messageSettings; + #endregion + } + + #region DataSetWriterDataTypeCollection Class + /// + /// A collection of DataSetWriterDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetWriterDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetWriterDataType")] + #if !NET_STANDARD + public partial class DataSetWriterDataTypeCollection : List, ICloneable + #else + public partial class DataSetWriterDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetWriterDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetWriterDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetWriterDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetWriterDataTypeCollection(DataSetWriterDataType[] values) + { + if (values != null) + { + return new DataSetWriterDataTypeCollection(values); + } + + return new DataSetWriterDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetWriterDataType[](DataSetWriterDataTypeCollection 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 (DataSetWriterDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetWriterDataTypeCollection clone = new DataSetWriterDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetWriterDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetWriterTransportDataType Class + #if (!OPCUA_EXCLUDE_DataSetWriterTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetWriterTransportDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetWriterTransportDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetWriterTransportDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetWriterTransportDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetWriterTransportDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetWriterTransportDataType value = encodeable as DataSetWriterTransportDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataSetWriterTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetWriterTransportDataType clone = (DataSetWriterTransportDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region DataSetWriterTransportDataTypeCollection Class + /// + /// A collection of DataSetWriterTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetWriterTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetWriterTransportDataType")] + #if !NET_STANDARD + public partial class DataSetWriterTransportDataTypeCollection : List, ICloneable + #else + public partial class DataSetWriterTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetWriterTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetWriterTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetWriterTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetWriterTransportDataTypeCollection(DataSetWriterTransportDataType[] values) + { + if (values != null) + { + return new DataSetWriterTransportDataTypeCollection(values); + } + + return new DataSetWriterTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetWriterTransportDataType[](DataSetWriterTransportDataTypeCollection 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 (DataSetWriterTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetWriterTransportDataTypeCollection clone = new DataSetWriterTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetWriterTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetWriterMessageDataType Class + #if (!OPCUA_EXCLUDE_DataSetWriterMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetWriterMessageDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetWriterMessageDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetWriterMessageDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetWriterMessageDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetWriterMessageDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetWriterMessageDataType value = encodeable as DataSetWriterMessageDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataSetWriterMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetWriterMessageDataType clone = (DataSetWriterMessageDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region DataSetWriterMessageDataTypeCollection Class + /// + /// A collection of DataSetWriterMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetWriterMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetWriterMessageDataType")] + #if !NET_STANDARD + public partial class DataSetWriterMessageDataTypeCollection : List, ICloneable + #else + public partial class DataSetWriterMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetWriterMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetWriterMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetWriterMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetWriterMessageDataTypeCollection(DataSetWriterMessageDataType[] values) + { + if (values != null) + { + return new DataSetWriterMessageDataTypeCollection(values); + } + + return new DataSetWriterMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetWriterMessageDataType[](DataSetWriterMessageDataTypeCollection 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 (DataSetWriterMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetWriterMessageDataTypeCollection clone = new DataSetWriterMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetWriterMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PubSubGroupDataType Class + #if (!OPCUA_EXCLUDE_PubSubGroupDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PubSubGroupDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PubSubGroupDataType() + { + 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_name = null; + m_enabled = true; + m_securityMode = MessageSecurityMode.Invalid; + m_securityGroupId = null; + m_securityKeyServices = new EndpointDescriptionCollection(); + m_maxNetworkMessageSize = (uint)0; + m_groupProperties = new KeyValuePairCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Enabled", IsRequired = false, Order = 2)] + public bool Enabled + { + get { return m_enabled; } + set { m_enabled = value; } + } + + /// + [DataMember(Name = "SecurityMode", IsRequired = false, Order = 3)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + [DataMember(Name = "SecurityGroupId", IsRequired = false, Order = 4)] + public string SecurityGroupId + { + get { return m_securityGroupId; } + set { m_securityGroupId = value; } + } + + /// + /// + /// + [DataMember(Name = "SecurityKeyServices", IsRequired = false, Order = 5)] + public EndpointDescriptionCollection SecurityKeyServices + { + get + { + return m_securityKeyServices; + } + + set + { + m_securityKeyServices = value; + + if (value == null) + { + m_securityKeyServices = new EndpointDescriptionCollection(); + } + } + } + + /// + [DataMember(Name = "MaxNetworkMessageSize", IsRequired = false, Order = 6)] + public uint MaxNetworkMessageSize + { + get { return m_maxNetworkMessageSize; } + set { m_maxNetworkMessageSize = value; } + } + + /// + /// + /// + [DataMember(Name = "GroupProperties", IsRequired = false, Order = 7)] + public KeyValuePairCollection GroupProperties + { + get + { + return m_groupProperties; + } + + set + { + m_groupProperties = value; + + if (value == null) + { + m_groupProperties = new KeyValuePairCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PubSubGroupDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PubSubGroupDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PubSubGroupDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteBoolean("Enabled", Enabled); + encoder.WriteEnumerated("SecurityMode", SecurityMode); + encoder.WriteString("SecurityGroupId", SecurityGroupId); + encoder.WriteEncodeableArray("SecurityKeyServices", SecurityKeyServices.ToArray(), typeof(EndpointDescription)); + encoder.WriteUInt32("MaxNetworkMessageSize", MaxNetworkMessageSize); + encoder.WriteEncodeableArray("GroupProperties", GroupProperties.ToArray(), typeof(KeyValuePair)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Enabled = decoder.ReadBoolean("Enabled"); + SecurityMode = (MessageSecurityMode)decoder.ReadEnumerated("SecurityMode", typeof(MessageSecurityMode)); + SecurityGroupId = decoder.ReadString("SecurityGroupId"); + SecurityKeyServices = (EndpointDescriptionCollection)decoder.ReadEncodeableArray("SecurityKeyServices", typeof(EndpointDescription)); + MaxNetworkMessageSize = decoder.ReadUInt32("MaxNetworkMessageSize"); + GroupProperties = (KeyValuePairCollection)decoder.ReadEncodeableArray("GroupProperties", typeof(KeyValuePair)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PubSubGroupDataType value = encodeable as PubSubGroupDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_enabled, value.m_enabled)) return false; + if (!Utils.IsEqual(m_securityMode, value.m_securityMode)) return false; + if (!Utils.IsEqual(m_securityGroupId, value.m_securityGroupId)) return false; + if (!Utils.IsEqual(m_securityKeyServices, value.m_securityKeyServices)) return false; + if (!Utils.IsEqual(m_maxNetworkMessageSize, value.m_maxNetworkMessageSize)) return false; + if (!Utils.IsEqual(m_groupProperties, value.m_groupProperties)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PubSubGroupDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PubSubGroupDataType clone = (PubSubGroupDataType)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_enabled = (bool)Utils.Clone(this.m_enabled); + clone.m_securityMode = (MessageSecurityMode)Utils.Clone(this.m_securityMode); + clone.m_securityGroupId = (string)Utils.Clone(this.m_securityGroupId); + clone.m_securityKeyServices = (EndpointDescriptionCollection)Utils.Clone(this.m_securityKeyServices); + clone.m_maxNetworkMessageSize = (uint)Utils.Clone(this.m_maxNetworkMessageSize); + clone.m_groupProperties = (KeyValuePairCollection)Utils.Clone(this.m_groupProperties); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private bool m_enabled; + private MessageSecurityMode m_securityMode; + private string m_securityGroupId; + private EndpointDescriptionCollection m_securityKeyServices; + private uint m_maxNetworkMessageSize; + private KeyValuePairCollection m_groupProperties; + #endregion + } + + #region PubSubGroupDataTypeCollection Class + /// + /// A collection of PubSubGroupDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPubSubGroupDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PubSubGroupDataType")] + #if !NET_STANDARD + public partial class PubSubGroupDataTypeCollection : List, ICloneable + #else + public partial class PubSubGroupDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PubSubGroupDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PubSubGroupDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PubSubGroupDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PubSubGroupDataTypeCollection(PubSubGroupDataType[] values) + { + if (values != null) + { + return new PubSubGroupDataTypeCollection(values); + } + + return new PubSubGroupDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PubSubGroupDataType[](PubSubGroupDataTypeCollection 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 (PubSubGroupDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PubSubGroupDataTypeCollection clone = new PubSubGroupDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PubSubGroupDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region WriterGroupDataType Class + #if (!OPCUA_EXCLUDE_WriterGroupDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class WriterGroupDataType : PubSubGroupDataType + { + #region Constructors + /// + /// The default constructor. + /// + public WriterGroupDataType() + { + 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_writerGroupId = (ushort)0; + m_publishingInterval = (double)0; + m_keepAliveTime = (double)0; + m_priority = (byte)0; + m_localeIds = new StringCollection(); + m_headerLayoutUri = null; + m_transportSettings = null; + m_messageSettings = null; + m_dataSetWriters = new DataSetWriterDataTypeCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "WriterGroupId", IsRequired = false, Order = 1)] + public ushort WriterGroupId + { + get { return m_writerGroupId; } + set { m_writerGroupId = value; } + } + + /// + [DataMember(Name = "PublishingInterval", IsRequired = false, Order = 2)] + public double PublishingInterval + { + get { return m_publishingInterval; } + set { m_publishingInterval = value; } + } + + /// + [DataMember(Name = "KeepAliveTime", IsRequired = false, Order = 3)] + public double KeepAliveTime + { + get { return m_keepAliveTime; } + set { m_keepAliveTime = value; } + } + + /// + [DataMember(Name = "Priority", IsRequired = false, Order = 4)] + public byte Priority + { + get { return m_priority; } + set { m_priority = value; } + } + + /// + /// + /// + [DataMember(Name = "LocaleIds", IsRequired = false, Order = 5)] + public StringCollection LocaleIds + { + get + { + return m_localeIds; + } + + set + { + m_localeIds = value; + + if (value == null) + { + m_localeIds = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "HeaderLayoutUri", IsRequired = false, Order = 6)] + public string HeaderLayoutUri + { + get { return m_headerLayoutUri; } + set { m_headerLayoutUri = value; } + } + + /// + [DataMember(Name = "TransportSettings", IsRequired = false, Order = 7)] + public ExtensionObject TransportSettings + { + get { return m_transportSettings; } + set { m_transportSettings = value; } + } + + /// + [DataMember(Name = "MessageSettings", IsRequired = false, Order = 8)] + public ExtensionObject MessageSettings + { + get { return m_messageSettings; } + set { m_messageSettings = value; } + } + + /// + /// + /// + [DataMember(Name = "DataSetWriters", IsRequired = false, Order = 9)] + public DataSetWriterDataTypeCollection DataSetWriters + { + get + { + return m_dataSetWriters; + } + + set + { + m_dataSetWriters = value; + + if (value == null) + { + m_dataSetWriters = new DataSetWriterDataTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.WriterGroupDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.WriterGroupDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.WriterGroupDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt16("WriterGroupId", WriterGroupId); + encoder.WriteDouble("PublishingInterval", PublishingInterval); + encoder.WriteDouble("KeepAliveTime", KeepAliveTime); + encoder.WriteByte("Priority", Priority); + encoder.WriteStringArray("LocaleIds", LocaleIds); + encoder.WriteString("HeaderLayoutUri", HeaderLayoutUri); + encoder.WriteExtensionObject("TransportSettings", TransportSettings); + encoder.WriteExtensionObject("MessageSettings", MessageSettings); + encoder.WriteEncodeableArray("DataSetWriters", DataSetWriters.ToArray(), typeof(DataSetWriterDataType)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + WriterGroupId = decoder.ReadUInt16("WriterGroupId"); + PublishingInterval = decoder.ReadDouble("PublishingInterval"); + KeepAliveTime = decoder.ReadDouble("KeepAliveTime"); + Priority = decoder.ReadByte("Priority"); + LocaleIds = decoder.ReadStringArray("LocaleIds"); + HeaderLayoutUri = decoder.ReadString("HeaderLayoutUri"); + TransportSettings = decoder.ReadExtensionObject("TransportSettings"); + MessageSettings = decoder.ReadExtensionObject("MessageSettings"); + DataSetWriters = (DataSetWriterDataTypeCollection)decoder.ReadEncodeableArray("DataSetWriters", typeof(DataSetWriterDataType)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + WriterGroupDataType value = encodeable as WriterGroupDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_writerGroupId, value.m_writerGroupId)) return false; + if (!Utils.IsEqual(m_publishingInterval, value.m_publishingInterval)) return false; + if (!Utils.IsEqual(m_keepAliveTime, value.m_keepAliveTime)) return false; + if (!Utils.IsEqual(m_priority, value.m_priority)) return false; + if (!Utils.IsEqual(m_localeIds, value.m_localeIds)) return false; + if (!Utils.IsEqual(m_headerLayoutUri, value.m_headerLayoutUri)) return false; + if (!Utils.IsEqual(m_transportSettings, value.m_transportSettings)) return false; + if (!Utils.IsEqual(m_messageSettings, value.m_messageSettings)) return false; + if (!Utils.IsEqual(m_dataSetWriters, value.m_dataSetWriters)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (WriterGroupDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + WriterGroupDataType clone = (WriterGroupDataType)base.MemberwiseClone(); + + clone.m_writerGroupId = (ushort)Utils.Clone(this.m_writerGroupId); + clone.m_publishingInterval = (double)Utils.Clone(this.m_publishingInterval); + clone.m_keepAliveTime = (double)Utils.Clone(this.m_keepAliveTime); + clone.m_priority = (byte)Utils.Clone(this.m_priority); + clone.m_localeIds = (StringCollection)Utils.Clone(this.m_localeIds); + clone.m_headerLayoutUri = (string)Utils.Clone(this.m_headerLayoutUri); + clone.m_transportSettings = (ExtensionObject)Utils.Clone(this.m_transportSettings); + clone.m_messageSettings = (ExtensionObject)Utils.Clone(this.m_messageSettings); + clone.m_dataSetWriters = (DataSetWriterDataTypeCollection)Utils.Clone(this.m_dataSetWriters); + + return clone; + } + #endregion + + #region Private Fields + private ushort m_writerGroupId; + private double m_publishingInterval; + private double m_keepAliveTime; + private byte m_priority; + private StringCollection m_localeIds; + private string m_headerLayoutUri; + private ExtensionObject m_transportSettings; + private ExtensionObject m_messageSettings; + private DataSetWriterDataTypeCollection m_dataSetWriters; + #endregion + } + + #region WriterGroupDataTypeCollection Class + /// + /// A collection of WriterGroupDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfWriterGroupDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "WriterGroupDataType")] + #if !NET_STANDARD + public partial class WriterGroupDataTypeCollection : List, ICloneable + #else + public partial class WriterGroupDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public WriterGroupDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public WriterGroupDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public WriterGroupDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator WriterGroupDataTypeCollection(WriterGroupDataType[] values) + { + if (values != null) + { + return new WriterGroupDataTypeCollection(values); + } + + return new WriterGroupDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator WriterGroupDataType[](WriterGroupDataTypeCollection 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 (WriterGroupDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + WriterGroupDataTypeCollection clone = new WriterGroupDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((WriterGroupDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region WriterGroupTransportDataType Class + #if (!OPCUA_EXCLUDE_WriterGroupTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class WriterGroupTransportDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public WriterGroupTransportDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.WriterGroupTransportDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.WriterGroupTransportDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.WriterGroupTransportDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + WriterGroupTransportDataType value = encodeable as WriterGroupTransportDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (WriterGroupTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + WriterGroupTransportDataType clone = (WriterGroupTransportDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region WriterGroupTransportDataTypeCollection Class + /// + /// A collection of WriterGroupTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfWriterGroupTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "WriterGroupTransportDataType")] + #if !NET_STANDARD + public partial class WriterGroupTransportDataTypeCollection : List, ICloneable + #else + public partial class WriterGroupTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public WriterGroupTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public WriterGroupTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public WriterGroupTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator WriterGroupTransportDataTypeCollection(WriterGroupTransportDataType[] values) + { + if (values != null) + { + return new WriterGroupTransportDataTypeCollection(values); + } + + return new WriterGroupTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator WriterGroupTransportDataType[](WriterGroupTransportDataTypeCollection 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 (WriterGroupTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + WriterGroupTransportDataTypeCollection clone = new WriterGroupTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((WriterGroupTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region WriterGroupMessageDataType Class + #if (!OPCUA_EXCLUDE_WriterGroupMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class WriterGroupMessageDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public WriterGroupMessageDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.WriterGroupMessageDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.WriterGroupMessageDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.WriterGroupMessageDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + WriterGroupMessageDataType value = encodeable as WriterGroupMessageDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (WriterGroupMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + WriterGroupMessageDataType clone = (WriterGroupMessageDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region WriterGroupMessageDataTypeCollection Class + /// + /// A collection of WriterGroupMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfWriterGroupMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "WriterGroupMessageDataType")] + #if !NET_STANDARD + public partial class WriterGroupMessageDataTypeCollection : List, ICloneable + #else + public partial class WriterGroupMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public WriterGroupMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public WriterGroupMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public WriterGroupMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator WriterGroupMessageDataTypeCollection(WriterGroupMessageDataType[] values) + { + if (values != null) + { + return new WriterGroupMessageDataTypeCollection(values); + } + + return new WriterGroupMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator WriterGroupMessageDataType[](WriterGroupMessageDataTypeCollection 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 (WriterGroupMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + WriterGroupMessageDataTypeCollection clone = new WriterGroupMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((WriterGroupMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PubSubConnectionDataType Class + #if (!OPCUA_EXCLUDE_PubSubConnectionDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PubSubConnectionDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PubSubConnectionDataType() + { + 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_name = null; + m_enabled = true; + m_publisherId = Variant.Null; + m_transportProfileUri = null; + m_address = null; + m_connectionProperties = new KeyValuePairCollection(); + m_transportSettings = null; + m_writerGroups = new WriterGroupDataTypeCollection(); + m_readerGroups = new ReaderGroupDataTypeCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Enabled", IsRequired = false, Order = 2)] + public bool Enabled + { + get { return m_enabled; } + set { m_enabled = value; } + } + + /// + [DataMember(Name = "PublisherId", IsRequired = false, Order = 3)] + public Variant PublisherId + { + get { return m_publisherId; } + set { m_publisherId = value; } + } + + /// + [DataMember(Name = "TransportProfileUri", IsRequired = false, Order = 4)] + public string TransportProfileUri + { + get { return m_transportProfileUri; } + set { m_transportProfileUri = value; } + } + + /// + [DataMember(Name = "Address", IsRequired = false, Order = 5)] + public ExtensionObject Address + { + get { return m_address; } + set { m_address = value; } + } + + /// + /// + /// + [DataMember(Name = "ConnectionProperties", IsRequired = false, Order = 6)] + public KeyValuePairCollection ConnectionProperties + { + get + { + return m_connectionProperties; + } + + set + { + m_connectionProperties = value; + + if (value == null) + { + m_connectionProperties = new KeyValuePairCollection(); + } + } + } + + /// + [DataMember(Name = "TransportSettings", IsRequired = false, Order = 7)] + public ExtensionObject TransportSettings + { + get { return m_transportSettings; } + set { m_transportSettings = value; } + } + + /// + /// + /// + [DataMember(Name = "WriterGroups", IsRequired = false, Order = 8)] + public WriterGroupDataTypeCollection WriterGroups + { + get + { + return m_writerGroups; + } + + set + { + m_writerGroups = value; + + if (value == null) + { + m_writerGroups = new WriterGroupDataTypeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ReaderGroups", IsRequired = false, Order = 9)] + public ReaderGroupDataTypeCollection ReaderGroups + { + get + { + return m_readerGroups; + } + + set + { + m_readerGroups = value; + + if (value == null) + { + m_readerGroups = new ReaderGroupDataTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PubSubConnectionDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PubSubConnectionDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PubSubConnectionDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteBoolean("Enabled", Enabled); + encoder.WriteVariant("PublisherId", PublisherId); + encoder.WriteString("TransportProfileUri", TransportProfileUri); + encoder.WriteExtensionObject("Address", Address); + encoder.WriteEncodeableArray("ConnectionProperties", ConnectionProperties.ToArray(), typeof(KeyValuePair)); + encoder.WriteExtensionObject("TransportSettings", TransportSettings); + encoder.WriteEncodeableArray("WriterGroups", WriterGroups.ToArray(), typeof(WriterGroupDataType)); + encoder.WriteEncodeableArray("ReaderGroups", ReaderGroups.ToArray(), typeof(ReaderGroupDataType)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Enabled = decoder.ReadBoolean("Enabled"); + PublisherId = decoder.ReadVariant("PublisherId"); + TransportProfileUri = decoder.ReadString("TransportProfileUri"); + Address = decoder.ReadExtensionObject("Address"); + ConnectionProperties = (KeyValuePairCollection)decoder.ReadEncodeableArray("ConnectionProperties", typeof(KeyValuePair)); + TransportSettings = decoder.ReadExtensionObject("TransportSettings"); + WriterGroups = (WriterGroupDataTypeCollection)decoder.ReadEncodeableArray("WriterGroups", typeof(WriterGroupDataType)); + ReaderGroups = (ReaderGroupDataTypeCollection)decoder.ReadEncodeableArray("ReaderGroups", typeof(ReaderGroupDataType)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PubSubConnectionDataType value = encodeable as PubSubConnectionDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_enabled, value.m_enabled)) return false; + if (!Utils.IsEqual(m_publisherId, value.m_publisherId)) return false; + if (!Utils.IsEqual(m_transportProfileUri, value.m_transportProfileUri)) return false; + if (!Utils.IsEqual(m_address, value.m_address)) return false; + if (!Utils.IsEqual(m_connectionProperties, value.m_connectionProperties)) return false; + if (!Utils.IsEqual(m_transportSettings, value.m_transportSettings)) return false; + if (!Utils.IsEqual(m_writerGroups, value.m_writerGroups)) return false; + if (!Utils.IsEqual(m_readerGroups, value.m_readerGroups)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PubSubConnectionDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PubSubConnectionDataType clone = (PubSubConnectionDataType)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_enabled = (bool)Utils.Clone(this.m_enabled); + clone.m_publisherId = (Variant)Utils.Clone(this.m_publisherId); + clone.m_transportProfileUri = (string)Utils.Clone(this.m_transportProfileUri); + clone.m_address = (ExtensionObject)Utils.Clone(this.m_address); + clone.m_connectionProperties = (KeyValuePairCollection)Utils.Clone(this.m_connectionProperties); + clone.m_transportSettings = (ExtensionObject)Utils.Clone(this.m_transportSettings); + clone.m_writerGroups = (WriterGroupDataTypeCollection)Utils.Clone(this.m_writerGroups); + clone.m_readerGroups = (ReaderGroupDataTypeCollection)Utils.Clone(this.m_readerGroups); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private bool m_enabled; + private Variant m_publisherId; + private string m_transportProfileUri; + private ExtensionObject m_address; + private KeyValuePairCollection m_connectionProperties; + private ExtensionObject m_transportSettings; + private WriterGroupDataTypeCollection m_writerGroups; + private ReaderGroupDataTypeCollection m_readerGroups; + #endregion + } + + #region PubSubConnectionDataTypeCollection Class + /// + /// A collection of PubSubConnectionDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPubSubConnectionDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PubSubConnectionDataType")] + #if !NET_STANDARD + public partial class PubSubConnectionDataTypeCollection : List, ICloneable + #else + public partial class PubSubConnectionDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PubSubConnectionDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PubSubConnectionDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PubSubConnectionDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PubSubConnectionDataTypeCollection(PubSubConnectionDataType[] values) + { + if (values != null) + { + return new PubSubConnectionDataTypeCollection(values); + } + + return new PubSubConnectionDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PubSubConnectionDataType[](PubSubConnectionDataTypeCollection 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 (PubSubConnectionDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PubSubConnectionDataTypeCollection clone = new PubSubConnectionDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PubSubConnectionDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ConnectionTransportDataType Class + #if (!OPCUA_EXCLUDE_ConnectionTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ConnectionTransportDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ConnectionTransportDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ConnectionTransportDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ConnectionTransportDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ConnectionTransportDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ConnectionTransportDataType value = encodeable as ConnectionTransportDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ConnectionTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ConnectionTransportDataType clone = (ConnectionTransportDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region ConnectionTransportDataTypeCollection Class + /// + /// A collection of ConnectionTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfConnectionTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ConnectionTransportDataType")] + #if !NET_STANDARD + public partial class ConnectionTransportDataTypeCollection : List, ICloneable + #else + public partial class ConnectionTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ConnectionTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ConnectionTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ConnectionTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ConnectionTransportDataTypeCollection(ConnectionTransportDataType[] values) + { + if (values != null) + { + return new ConnectionTransportDataTypeCollection(values); + } + + return new ConnectionTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ConnectionTransportDataType[](ConnectionTransportDataTypeCollection 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 (ConnectionTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ConnectionTransportDataTypeCollection clone = new ConnectionTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ConnectionTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NetworkAddressDataType Class + #if (!OPCUA_EXCLUDE_NetworkAddressDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NetworkAddressDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NetworkAddressDataType() + { + 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_networkInterface = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NetworkInterface", IsRequired = false, Order = 1)] + public string NetworkInterface + { + get { return m_networkInterface; } + set { m_networkInterface = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NetworkAddressDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NetworkAddressDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NetworkAddressDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("NetworkInterface", NetworkInterface); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NetworkInterface = decoder.ReadString("NetworkInterface"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NetworkAddressDataType value = encodeable as NetworkAddressDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_networkInterface, value.m_networkInterface)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NetworkAddressDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NetworkAddressDataType clone = (NetworkAddressDataType)base.MemberwiseClone(); + + clone.m_networkInterface = (string)Utils.Clone(this.m_networkInterface); + + return clone; + } + #endregion + + #region Private Fields + private string m_networkInterface; + #endregion + } + + #region NetworkAddressDataTypeCollection Class + /// + /// A collection of NetworkAddressDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNetworkAddressDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "NetworkAddressDataType")] + #if !NET_STANDARD + public partial class NetworkAddressDataTypeCollection : List, ICloneable + #else + public partial class NetworkAddressDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NetworkAddressDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NetworkAddressDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NetworkAddressDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NetworkAddressDataTypeCollection(NetworkAddressDataType[] values) + { + if (values != null) + { + return new NetworkAddressDataTypeCollection(values); + } + + return new NetworkAddressDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator NetworkAddressDataType[](NetworkAddressDataTypeCollection 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 (NetworkAddressDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NetworkAddressDataTypeCollection clone = new NetworkAddressDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((NetworkAddressDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NetworkAddressUrlDataType Class + #if (!OPCUA_EXCLUDE_NetworkAddressUrlDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NetworkAddressUrlDataType : NetworkAddressDataType + { + #region Constructors + /// + /// The default constructor. + /// + public NetworkAddressUrlDataType() + { + 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_url = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Url", IsRequired = false, Order = 1)] + public string Url + { + get { return m_url; } + set { m_url = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.NetworkAddressUrlDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NetworkAddressUrlDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NetworkAddressUrlDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Url", Url); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Url = decoder.ReadString("Url"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NetworkAddressUrlDataType value = encodeable as NetworkAddressUrlDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_url, value.m_url)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (NetworkAddressUrlDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NetworkAddressUrlDataType clone = (NetworkAddressUrlDataType)base.MemberwiseClone(); + + clone.m_url = (string)Utils.Clone(this.m_url); + + return clone; + } + #endregion + + #region Private Fields + private string m_url; + #endregion + } + + #region NetworkAddressUrlDataTypeCollection Class + /// + /// A collection of NetworkAddressUrlDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNetworkAddressUrlDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "NetworkAddressUrlDataType")] + #if !NET_STANDARD + public partial class NetworkAddressUrlDataTypeCollection : List, ICloneable + #else + public partial class NetworkAddressUrlDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NetworkAddressUrlDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NetworkAddressUrlDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NetworkAddressUrlDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NetworkAddressUrlDataTypeCollection(NetworkAddressUrlDataType[] values) + { + if (values != null) + { + return new NetworkAddressUrlDataTypeCollection(values); + } + + return new NetworkAddressUrlDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator NetworkAddressUrlDataType[](NetworkAddressUrlDataTypeCollection 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 (NetworkAddressUrlDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NetworkAddressUrlDataTypeCollection clone = new NetworkAddressUrlDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((NetworkAddressUrlDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ReaderGroupDataType Class + #if (!OPCUA_EXCLUDE_ReaderGroupDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReaderGroupDataType : PubSubGroupDataType + { + #region Constructors + /// + /// The default constructor. + /// + public ReaderGroupDataType() + { + 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_transportSettings = null; + m_messageSettings = null; + m_dataSetReaders = new DataSetReaderDataTypeCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "TransportSettings", IsRequired = false, Order = 1)] + public ExtensionObject TransportSettings + { + get { return m_transportSettings; } + set { m_transportSettings = value; } + } + + /// + [DataMember(Name = "MessageSettings", IsRequired = false, Order = 2)] + public ExtensionObject MessageSettings + { + get { return m_messageSettings; } + set { m_messageSettings = value; } + } + + /// + /// + /// + [DataMember(Name = "DataSetReaders", IsRequired = false, Order = 3)] + public DataSetReaderDataTypeCollection DataSetReaders + { + get + { + return m_dataSetReaders; + } + + set + { + m_dataSetReaders = value; + + if (value == null) + { + m_dataSetReaders = new DataSetReaderDataTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReaderGroupDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReaderGroupDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReaderGroupDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteExtensionObject("TransportSettings", TransportSettings); + encoder.WriteExtensionObject("MessageSettings", MessageSettings); + encoder.WriteEncodeableArray("DataSetReaders", DataSetReaders.ToArray(), typeof(DataSetReaderDataType)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TransportSettings = decoder.ReadExtensionObject("TransportSettings"); + MessageSettings = decoder.ReadExtensionObject("MessageSettings"); + DataSetReaders = (DataSetReaderDataTypeCollection)decoder.ReadEncodeableArray("DataSetReaders", typeof(DataSetReaderDataType)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReaderGroupDataType value = encodeable as ReaderGroupDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_transportSettings, value.m_transportSettings)) return false; + if (!Utils.IsEqual(m_messageSettings, value.m_messageSettings)) return false; + if (!Utils.IsEqual(m_dataSetReaders, value.m_dataSetReaders)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReaderGroupDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReaderGroupDataType clone = (ReaderGroupDataType)base.MemberwiseClone(); + + clone.m_transportSettings = (ExtensionObject)Utils.Clone(this.m_transportSettings); + clone.m_messageSettings = (ExtensionObject)Utils.Clone(this.m_messageSettings); + clone.m_dataSetReaders = (DataSetReaderDataTypeCollection)Utils.Clone(this.m_dataSetReaders); + + return clone; + } + #endregion + + #region Private Fields + private ExtensionObject m_transportSettings; + private ExtensionObject m_messageSettings; + private DataSetReaderDataTypeCollection m_dataSetReaders; + #endregion + } + + #region ReaderGroupDataTypeCollection Class + /// + /// A collection of ReaderGroupDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfReaderGroupDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ReaderGroupDataType")] + #if !NET_STANDARD + public partial class ReaderGroupDataTypeCollection : List, ICloneable + #else + public partial class ReaderGroupDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ReaderGroupDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ReaderGroupDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ReaderGroupDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ReaderGroupDataTypeCollection(ReaderGroupDataType[] values) + { + if (values != null) + { + return new ReaderGroupDataTypeCollection(values); + } + + return new ReaderGroupDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ReaderGroupDataType[](ReaderGroupDataTypeCollection 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 (ReaderGroupDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ReaderGroupDataTypeCollection clone = new ReaderGroupDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ReaderGroupDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ReaderGroupTransportDataType Class + #if (!OPCUA_EXCLUDE_ReaderGroupTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReaderGroupTransportDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReaderGroupTransportDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReaderGroupTransportDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReaderGroupTransportDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReaderGroupTransportDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReaderGroupTransportDataType value = encodeable as ReaderGroupTransportDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReaderGroupTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReaderGroupTransportDataType clone = (ReaderGroupTransportDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region ReaderGroupTransportDataTypeCollection Class + /// + /// A collection of ReaderGroupTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfReaderGroupTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ReaderGroupTransportDataType")] + #if !NET_STANDARD + public partial class ReaderGroupTransportDataTypeCollection : List, ICloneable + #else + public partial class ReaderGroupTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ReaderGroupTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ReaderGroupTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ReaderGroupTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ReaderGroupTransportDataTypeCollection(ReaderGroupTransportDataType[] values) + { + if (values != null) + { + return new ReaderGroupTransportDataTypeCollection(values); + } + + return new ReaderGroupTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ReaderGroupTransportDataType[](ReaderGroupTransportDataTypeCollection 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 (ReaderGroupTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ReaderGroupTransportDataTypeCollection clone = new ReaderGroupTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ReaderGroupTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ReaderGroupMessageDataType Class + #if (!OPCUA_EXCLUDE_ReaderGroupMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReaderGroupMessageDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReaderGroupMessageDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReaderGroupMessageDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReaderGroupMessageDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReaderGroupMessageDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReaderGroupMessageDataType value = encodeable as ReaderGroupMessageDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReaderGroupMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReaderGroupMessageDataType clone = (ReaderGroupMessageDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region ReaderGroupMessageDataTypeCollection Class + /// + /// A collection of ReaderGroupMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfReaderGroupMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ReaderGroupMessageDataType")] + #if !NET_STANDARD + public partial class ReaderGroupMessageDataTypeCollection : List, ICloneable + #else + public partial class ReaderGroupMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ReaderGroupMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ReaderGroupMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ReaderGroupMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ReaderGroupMessageDataTypeCollection(ReaderGroupMessageDataType[] values) + { + if (values != null) + { + return new ReaderGroupMessageDataTypeCollection(values); + } + + return new ReaderGroupMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ReaderGroupMessageDataType[](ReaderGroupMessageDataTypeCollection 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 (ReaderGroupMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ReaderGroupMessageDataTypeCollection clone = new ReaderGroupMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ReaderGroupMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetReaderDataType Class + #if (!OPCUA_EXCLUDE_DataSetReaderDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetReaderDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetReaderDataType() + { + 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_name = null; + m_enabled = true; + m_publisherId = Variant.Null; + m_writerGroupId = (ushort)0; + m_dataSetWriterId = (ushort)0; + m_dataSetMetaData = new DataSetMetaDataType(); + m_dataSetFieldContentMask = 0; + m_messageReceiveTimeout = (double)0; + m_keyFrameCount = (uint)0; + m_headerLayoutUri = null; + m_securityMode = MessageSecurityMode.Invalid; + m_securityGroupId = null; + m_securityKeyServices = new EndpointDescriptionCollection(); + m_dataSetReaderProperties = new KeyValuePairCollection(); + m_transportSettings = null; + m_messageSettings = null; + m_subscribedDataSet = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Enabled", IsRequired = false, Order = 2)] + public bool Enabled + { + get { return m_enabled; } + set { m_enabled = value; } + } + + /// + [DataMember(Name = "PublisherId", IsRequired = false, Order = 3)] + public Variant PublisherId + { + get { return m_publisherId; } + set { m_publisherId = value; } + } + + /// + [DataMember(Name = "WriterGroupId", IsRequired = false, Order = 4)] + public ushort WriterGroupId + { + get { return m_writerGroupId; } + set { m_writerGroupId = value; } + } + + /// + [DataMember(Name = "DataSetWriterId", IsRequired = false, Order = 5)] + public ushort DataSetWriterId + { + get { return m_dataSetWriterId; } + set { m_dataSetWriterId = value; } + } + + /// + /// + /// + [DataMember(Name = "DataSetMetaData", IsRequired = false, Order = 6)] + public DataSetMetaDataType DataSetMetaData + { + get + { + return m_dataSetMetaData; + } + + set + { + m_dataSetMetaData = value; + + if (value == null) + { + m_dataSetMetaData = new DataSetMetaDataType(); + } + } + } + + /// + [DataMember(Name = "DataSetFieldContentMask", IsRequired = false, Order = 7)] + public uint DataSetFieldContentMask + { + get { return m_dataSetFieldContentMask; } + set { m_dataSetFieldContentMask = value; } + } + + /// + [DataMember(Name = "MessageReceiveTimeout", IsRequired = false, Order = 8)] + public double MessageReceiveTimeout + { + get { return m_messageReceiveTimeout; } + set { m_messageReceiveTimeout = value; } + } + + /// + [DataMember(Name = "KeyFrameCount", IsRequired = false, Order = 9)] + public uint KeyFrameCount + { + get { return m_keyFrameCount; } + set { m_keyFrameCount = value; } + } + + /// + [DataMember(Name = "HeaderLayoutUri", IsRequired = false, Order = 10)] + public string HeaderLayoutUri + { + get { return m_headerLayoutUri; } + set { m_headerLayoutUri = value; } + } + + /// + [DataMember(Name = "SecurityMode", IsRequired = false, Order = 11)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + [DataMember(Name = "SecurityGroupId", IsRequired = false, Order = 12)] + public string SecurityGroupId + { + get { return m_securityGroupId; } + set { m_securityGroupId = value; } + } + + /// + /// + /// + [DataMember(Name = "SecurityKeyServices", IsRequired = false, Order = 13)] + public EndpointDescriptionCollection SecurityKeyServices + { + get + { + return m_securityKeyServices; + } + + set + { + m_securityKeyServices = value; + + if (value == null) + { + m_securityKeyServices = new EndpointDescriptionCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DataSetReaderProperties", IsRequired = false, Order = 14)] + public KeyValuePairCollection DataSetReaderProperties + { + get + { + return m_dataSetReaderProperties; + } + + set + { + m_dataSetReaderProperties = value; + + if (value == null) + { + m_dataSetReaderProperties = new KeyValuePairCollection(); + } + } + } + + /// + [DataMember(Name = "TransportSettings", IsRequired = false, Order = 15)] + public ExtensionObject TransportSettings + { + get { return m_transportSettings; } + set { m_transportSettings = value; } + } + + /// + [DataMember(Name = "MessageSettings", IsRequired = false, Order = 16)] + public ExtensionObject MessageSettings + { + get { return m_messageSettings; } + set { m_messageSettings = value; } + } + + /// + [DataMember(Name = "SubscribedDataSet", IsRequired = false, Order = 17)] + public ExtensionObject SubscribedDataSet + { + get { return m_subscribedDataSet; } + set { m_subscribedDataSet = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetReaderDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetReaderDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetReaderDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteBoolean("Enabled", Enabled); + encoder.WriteVariant("PublisherId", PublisherId); + encoder.WriteUInt16("WriterGroupId", WriterGroupId); + encoder.WriteUInt16("DataSetWriterId", DataSetWriterId); + encoder.WriteEncodeable("DataSetMetaData", DataSetMetaData, typeof(DataSetMetaDataType)); + encoder.WriteUInt32("DataSetFieldContentMask", DataSetFieldContentMask); + encoder.WriteDouble("MessageReceiveTimeout", MessageReceiveTimeout); + encoder.WriteUInt32("KeyFrameCount", KeyFrameCount); + encoder.WriteString("HeaderLayoutUri", HeaderLayoutUri); + encoder.WriteEnumerated("SecurityMode", SecurityMode); + encoder.WriteString("SecurityGroupId", SecurityGroupId); + encoder.WriteEncodeableArray("SecurityKeyServices", SecurityKeyServices.ToArray(), typeof(EndpointDescription)); + encoder.WriteEncodeableArray("DataSetReaderProperties", DataSetReaderProperties.ToArray(), typeof(KeyValuePair)); + encoder.WriteExtensionObject("TransportSettings", TransportSettings); + encoder.WriteExtensionObject("MessageSettings", MessageSettings); + encoder.WriteExtensionObject("SubscribedDataSet", SubscribedDataSet); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Enabled = decoder.ReadBoolean("Enabled"); + PublisherId = decoder.ReadVariant("PublisherId"); + WriterGroupId = decoder.ReadUInt16("WriterGroupId"); + DataSetWriterId = decoder.ReadUInt16("DataSetWriterId"); + DataSetMetaData = (DataSetMetaDataType)decoder.ReadEncodeable("DataSetMetaData", typeof(DataSetMetaDataType)); + DataSetFieldContentMask = decoder.ReadUInt32("DataSetFieldContentMask"); + MessageReceiveTimeout = decoder.ReadDouble("MessageReceiveTimeout"); + KeyFrameCount = decoder.ReadUInt32("KeyFrameCount"); + HeaderLayoutUri = decoder.ReadString("HeaderLayoutUri"); + SecurityMode = (MessageSecurityMode)decoder.ReadEnumerated("SecurityMode", typeof(MessageSecurityMode)); + SecurityGroupId = decoder.ReadString("SecurityGroupId"); + SecurityKeyServices = (EndpointDescriptionCollection)decoder.ReadEncodeableArray("SecurityKeyServices", typeof(EndpointDescription)); + DataSetReaderProperties = (KeyValuePairCollection)decoder.ReadEncodeableArray("DataSetReaderProperties", typeof(KeyValuePair)); + TransportSettings = decoder.ReadExtensionObject("TransportSettings"); + MessageSettings = decoder.ReadExtensionObject("MessageSettings"); + SubscribedDataSet = decoder.ReadExtensionObject("SubscribedDataSet"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetReaderDataType value = encodeable as DataSetReaderDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_enabled, value.m_enabled)) return false; + if (!Utils.IsEqual(m_publisherId, value.m_publisherId)) return false; + if (!Utils.IsEqual(m_writerGroupId, value.m_writerGroupId)) return false; + if (!Utils.IsEqual(m_dataSetWriterId, value.m_dataSetWriterId)) return false; + if (!Utils.IsEqual(m_dataSetMetaData, value.m_dataSetMetaData)) return false; + if (!Utils.IsEqual(m_dataSetFieldContentMask, value.m_dataSetFieldContentMask)) return false; + if (!Utils.IsEqual(m_messageReceiveTimeout, value.m_messageReceiveTimeout)) return false; + if (!Utils.IsEqual(m_keyFrameCount, value.m_keyFrameCount)) return false; + if (!Utils.IsEqual(m_headerLayoutUri, value.m_headerLayoutUri)) return false; + if (!Utils.IsEqual(m_securityMode, value.m_securityMode)) return false; + if (!Utils.IsEqual(m_securityGroupId, value.m_securityGroupId)) return false; + if (!Utils.IsEqual(m_securityKeyServices, value.m_securityKeyServices)) return false; + if (!Utils.IsEqual(m_dataSetReaderProperties, value.m_dataSetReaderProperties)) return false; + if (!Utils.IsEqual(m_transportSettings, value.m_transportSettings)) return false; + if (!Utils.IsEqual(m_messageSettings, value.m_messageSettings)) return false; + if (!Utils.IsEqual(m_subscribedDataSet, value.m_subscribedDataSet)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataSetReaderDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetReaderDataType clone = (DataSetReaderDataType)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_enabled = (bool)Utils.Clone(this.m_enabled); + clone.m_publisherId = (Variant)Utils.Clone(this.m_publisherId); + clone.m_writerGroupId = (ushort)Utils.Clone(this.m_writerGroupId); + clone.m_dataSetWriterId = (ushort)Utils.Clone(this.m_dataSetWriterId); + clone.m_dataSetMetaData = (DataSetMetaDataType)Utils.Clone(this.m_dataSetMetaData); + clone.m_dataSetFieldContentMask = (uint)Utils.Clone(this.m_dataSetFieldContentMask); + clone.m_messageReceiveTimeout = (double)Utils.Clone(this.m_messageReceiveTimeout); + clone.m_keyFrameCount = (uint)Utils.Clone(this.m_keyFrameCount); + clone.m_headerLayoutUri = (string)Utils.Clone(this.m_headerLayoutUri); + clone.m_securityMode = (MessageSecurityMode)Utils.Clone(this.m_securityMode); + clone.m_securityGroupId = (string)Utils.Clone(this.m_securityGroupId); + clone.m_securityKeyServices = (EndpointDescriptionCollection)Utils.Clone(this.m_securityKeyServices); + clone.m_dataSetReaderProperties = (KeyValuePairCollection)Utils.Clone(this.m_dataSetReaderProperties); + clone.m_transportSettings = (ExtensionObject)Utils.Clone(this.m_transportSettings); + clone.m_messageSettings = (ExtensionObject)Utils.Clone(this.m_messageSettings); + clone.m_subscribedDataSet = (ExtensionObject)Utils.Clone(this.m_subscribedDataSet); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private bool m_enabled; + private Variant m_publisherId; + private ushort m_writerGroupId; + private ushort m_dataSetWriterId; + private DataSetMetaDataType m_dataSetMetaData; + private uint m_dataSetFieldContentMask; + private double m_messageReceiveTimeout; + private uint m_keyFrameCount; + private string m_headerLayoutUri; + private MessageSecurityMode m_securityMode; + private string m_securityGroupId; + private EndpointDescriptionCollection m_securityKeyServices; + private KeyValuePairCollection m_dataSetReaderProperties; + private ExtensionObject m_transportSettings; + private ExtensionObject m_messageSettings; + private ExtensionObject m_subscribedDataSet; + #endregion + } + + #region DataSetReaderDataTypeCollection Class + /// + /// A collection of DataSetReaderDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetReaderDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetReaderDataType")] + #if !NET_STANDARD + public partial class DataSetReaderDataTypeCollection : List, ICloneable + #else + public partial class DataSetReaderDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetReaderDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetReaderDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetReaderDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetReaderDataTypeCollection(DataSetReaderDataType[] values) + { + if (values != null) + { + return new DataSetReaderDataTypeCollection(values); + } + + return new DataSetReaderDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetReaderDataType[](DataSetReaderDataTypeCollection 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 (DataSetReaderDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetReaderDataTypeCollection clone = new DataSetReaderDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetReaderDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetReaderTransportDataType Class + #if (!OPCUA_EXCLUDE_DataSetReaderTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetReaderTransportDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetReaderTransportDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetReaderTransportDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetReaderTransportDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetReaderTransportDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetReaderTransportDataType value = encodeable as DataSetReaderTransportDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataSetReaderTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetReaderTransportDataType clone = (DataSetReaderTransportDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region DataSetReaderTransportDataTypeCollection Class + /// + /// A collection of DataSetReaderTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetReaderTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetReaderTransportDataType")] + #if !NET_STANDARD + public partial class DataSetReaderTransportDataTypeCollection : List, ICloneable + #else + public partial class DataSetReaderTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetReaderTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetReaderTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetReaderTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetReaderTransportDataTypeCollection(DataSetReaderTransportDataType[] values) + { + if (values != null) + { + return new DataSetReaderTransportDataTypeCollection(values); + } + + return new DataSetReaderTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetReaderTransportDataType[](DataSetReaderTransportDataTypeCollection 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 (DataSetReaderTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetReaderTransportDataTypeCollection clone = new DataSetReaderTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetReaderTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetReaderMessageDataType Class + #if (!OPCUA_EXCLUDE_DataSetReaderMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataSetReaderMessageDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataSetReaderMessageDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataSetReaderMessageDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataSetReaderMessageDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataSetReaderMessageDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataSetReaderMessageDataType value = encodeable as DataSetReaderMessageDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataSetReaderMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataSetReaderMessageDataType clone = (DataSetReaderMessageDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region DataSetReaderMessageDataTypeCollection Class + /// + /// A collection of DataSetReaderMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetReaderMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetReaderMessageDataType")] + #if !NET_STANDARD + public partial class DataSetReaderMessageDataTypeCollection : List, ICloneable + #else + public partial class DataSetReaderMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetReaderMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetReaderMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetReaderMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetReaderMessageDataTypeCollection(DataSetReaderMessageDataType[] values) + { + if (values != null) + { + return new DataSetReaderMessageDataTypeCollection(values); + } + + return new DataSetReaderMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetReaderMessageDataType[](DataSetReaderMessageDataTypeCollection 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 (DataSetReaderMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetReaderMessageDataTypeCollection clone = new DataSetReaderMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetReaderMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SubscribedDataSetDataType Class + #if (!OPCUA_EXCLUDE_SubscribedDataSetDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SubscribedDataSetDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SubscribedDataSetDataType() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SubscribedDataSetDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SubscribedDataSetDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SubscribedDataSetDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SubscribedDataSetDataType value = encodeable as SubscribedDataSetDataType; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SubscribedDataSetDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SubscribedDataSetDataType clone = (SubscribedDataSetDataType)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region SubscribedDataSetDataTypeCollection Class + /// + /// A collection of SubscribedDataSetDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSubscribedDataSetDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SubscribedDataSetDataType")] + #if !NET_STANDARD + public partial class SubscribedDataSetDataTypeCollection : List, ICloneable + #else + public partial class SubscribedDataSetDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SubscribedDataSetDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SubscribedDataSetDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SubscribedDataSetDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SubscribedDataSetDataTypeCollection(SubscribedDataSetDataType[] values) + { + if (values != null) + { + return new SubscribedDataSetDataTypeCollection(values); + } + + return new SubscribedDataSetDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SubscribedDataSetDataType[](SubscribedDataSetDataTypeCollection 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 (SubscribedDataSetDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SubscribedDataSetDataTypeCollection clone = new SubscribedDataSetDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SubscribedDataSetDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region TargetVariablesDataType Class + #if (!OPCUA_EXCLUDE_TargetVariablesDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TargetVariablesDataType : SubscribedDataSetDataType + { + #region Constructors + /// + /// The default constructor. + /// + public TargetVariablesDataType() + { + 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_targetVariables = new FieldTargetDataTypeCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "TargetVariables", IsRequired = false, Order = 1)] + public FieldTargetDataTypeCollection TargetVariables + { + get + { + return m_targetVariables; + } + + set + { + m_targetVariables = value; + + if (value == null) + { + m_targetVariables = new FieldTargetDataTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.TargetVariablesDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TargetVariablesDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TargetVariablesDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("TargetVariables", TargetVariables.ToArray(), typeof(FieldTargetDataType)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TargetVariables = (FieldTargetDataTypeCollection)decoder.ReadEncodeableArray("TargetVariables", typeof(FieldTargetDataType)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TargetVariablesDataType value = encodeable as TargetVariablesDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_targetVariables, value.m_targetVariables)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (TargetVariablesDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TargetVariablesDataType clone = (TargetVariablesDataType)base.MemberwiseClone(); + + clone.m_targetVariables = (FieldTargetDataTypeCollection)Utils.Clone(this.m_targetVariables); + + return clone; + } + #endregion + + #region Private Fields + private FieldTargetDataTypeCollection m_targetVariables; + #endregion + } + + #region TargetVariablesDataTypeCollection Class + /// + /// A collection of TargetVariablesDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfTargetVariablesDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "TargetVariablesDataType")] + #if !NET_STANDARD + public partial class TargetVariablesDataTypeCollection : List, ICloneable + #else + public partial class TargetVariablesDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public TargetVariablesDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public TargetVariablesDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public TargetVariablesDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator TargetVariablesDataTypeCollection(TargetVariablesDataType[] values) + { + if (values != null) + { + return new TargetVariablesDataTypeCollection(values); + } + + return new TargetVariablesDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator TargetVariablesDataType[](TargetVariablesDataTypeCollection 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 (TargetVariablesDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + TargetVariablesDataTypeCollection clone = new TargetVariablesDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((TargetVariablesDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region FieldTargetDataType Class + #if (!OPCUA_EXCLUDE_FieldTargetDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FieldTargetDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FieldTargetDataType() + { + 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_dataSetFieldId = Uuid.Empty; + m_receiverIndexRange = null; + m_targetNodeId = null; + m_attributeId = (uint)0; + m_writeIndexRange = null; + m_overrideValueHandling = OverrideValueHandling.Disabled; + m_overrideValue = Variant.Null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "DataSetFieldId", IsRequired = false, Order = 1)] + public Uuid DataSetFieldId + { + get { return m_dataSetFieldId; } + set { m_dataSetFieldId = value; } + } + + /// + [DataMember(Name = "ReceiverIndexRange", IsRequired = false, Order = 2)] + public string ReceiverIndexRange + { + get { return m_receiverIndexRange; } + set { m_receiverIndexRange = value; } + } + + /// + [DataMember(Name = "TargetNodeId", IsRequired = false, Order = 3)] + public NodeId TargetNodeId + { + get { return m_targetNodeId; } + set { m_targetNodeId = value; } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 4)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "WriteIndexRange", IsRequired = false, Order = 5)] + public string WriteIndexRange + { + get { return m_writeIndexRange; } + set { m_writeIndexRange = value; } + } + + /// + [DataMember(Name = "OverrideValueHandling", IsRequired = false, Order = 6)] + public OverrideValueHandling OverrideValueHandling + { + get { return m_overrideValueHandling; } + set { m_overrideValueHandling = value; } + } + + /// + [DataMember(Name = "OverrideValue", IsRequired = false, Order = 7)] + public Variant OverrideValue + { + get { return m_overrideValue; } + set { m_overrideValue = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FieldTargetDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FieldTargetDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FieldTargetDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteGuid("DataSetFieldId", DataSetFieldId); + encoder.WriteString("ReceiverIndexRange", ReceiverIndexRange); + encoder.WriteNodeId("TargetNodeId", TargetNodeId); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteString("WriteIndexRange", WriteIndexRange); + encoder.WriteEnumerated("OverrideValueHandling", OverrideValueHandling); + encoder.WriteVariant("OverrideValue", OverrideValue); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DataSetFieldId = decoder.ReadGuid("DataSetFieldId"); + ReceiverIndexRange = decoder.ReadString("ReceiverIndexRange"); + TargetNodeId = decoder.ReadNodeId("TargetNodeId"); + AttributeId = decoder.ReadUInt32("AttributeId"); + WriteIndexRange = decoder.ReadString("WriteIndexRange"); + OverrideValueHandling = (OverrideValueHandling)decoder.ReadEnumerated("OverrideValueHandling", typeof(OverrideValueHandling)); + OverrideValue = decoder.ReadVariant("OverrideValue"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FieldTargetDataType value = encodeable as FieldTargetDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_dataSetFieldId, value.m_dataSetFieldId)) return false; + if (!Utils.IsEqual(m_receiverIndexRange, value.m_receiverIndexRange)) return false; + if (!Utils.IsEqual(m_targetNodeId, value.m_targetNodeId)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_writeIndexRange, value.m_writeIndexRange)) return false; + if (!Utils.IsEqual(m_overrideValueHandling, value.m_overrideValueHandling)) return false; + if (!Utils.IsEqual(m_overrideValue, value.m_overrideValue)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FieldTargetDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FieldTargetDataType clone = (FieldTargetDataType)base.MemberwiseClone(); + + clone.m_dataSetFieldId = (Uuid)Utils.Clone(this.m_dataSetFieldId); + clone.m_receiverIndexRange = (string)Utils.Clone(this.m_receiverIndexRange); + clone.m_targetNodeId = (NodeId)Utils.Clone(this.m_targetNodeId); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_writeIndexRange = (string)Utils.Clone(this.m_writeIndexRange); + clone.m_overrideValueHandling = (OverrideValueHandling)Utils.Clone(this.m_overrideValueHandling); + clone.m_overrideValue = (Variant)Utils.Clone(this.m_overrideValue); + + return clone; + } + #endregion + + #region Private Fields + private Uuid m_dataSetFieldId; + private string m_receiverIndexRange; + private NodeId m_targetNodeId; + private uint m_attributeId; + private string m_writeIndexRange; + private OverrideValueHandling m_overrideValueHandling; + private Variant m_overrideValue; + #endregion + } + + #region FieldTargetDataTypeCollection Class + /// + /// A collection of FieldTargetDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfFieldTargetDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "FieldTargetDataType")] + #if !NET_STANDARD + public partial class FieldTargetDataTypeCollection : List, ICloneable + #else + public partial class FieldTargetDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public FieldTargetDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public FieldTargetDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public FieldTargetDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator FieldTargetDataTypeCollection(FieldTargetDataType[] values) + { + if (values != null) + { + return new FieldTargetDataTypeCollection(values); + } + + return new FieldTargetDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator FieldTargetDataType[](FieldTargetDataTypeCollection 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 (FieldTargetDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + FieldTargetDataTypeCollection clone = new FieldTargetDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((FieldTargetDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region OverrideValueHandling Enumeration + #if (!OPCUA_EXCLUDE_OverrideValueHandling) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum OverrideValueHandling + { + /// + [EnumMember(Value = "Disabled_0")] + Disabled = 0, + + /// + [EnumMember(Value = "LastUsableValue_1")] + LastUsableValue = 1, + + /// + [EnumMember(Value = "OverrideValue_2")] + OverrideValue = 2, + } + + #region OverrideValueHandlingCollection Class + /// + /// A collection of OverrideValueHandling objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfOverrideValueHandling", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "OverrideValueHandling")] + #if !NET_STANDARD + public partial class OverrideValueHandlingCollection : List, ICloneable + #else + public partial class OverrideValueHandlingCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public OverrideValueHandlingCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public OverrideValueHandlingCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public OverrideValueHandlingCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator OverrideValueHandlingCollection(OverrideValueHandling[] values) + { + if (values != null) + { + return new OverrideValueHandlingCollection(values); + } + + return new OverrideValueHandlingCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator OverrideValueHandling[](OverrideValueHandlingCollection 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 (OverrideValueHandlingCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + OverrideValueHandlingCollection clone = new OverrideValueHandlingCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((OverrideValueHandling)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SubscribedDataSetMirrorDataType Class + #if (!OPCUA_EXCLUDE_SubscribedDataSetMirrorDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SubscribedDataSetMirrorDataType : SubscribedDataSetDataType + { + #region Constructors + /// + /// The default constructor. + /// + public SubscribedDataSetMirrorDataType() + { + 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_parentNodeName = null; + m_rolePermissions = new RolePermissionTypeCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ParentNodeName", IsRequired = false, Order = 1)] + public string ParentNodeName + { + get { return m_parentNodeName; } + set { m_parentNodeName = value; } + } + + /// + /// + /// + [DataMember(Name = "RolePermissions", IsRequired = false, Order = 2)] + public RolePermissionTypeCollection RolePermissions + { + get + { + return m_rolePermissions; + } + + set + { + m_rolePermissions = value; + + if (value == null) + { + m_rolePermissions = new RolePermissionTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.SubscribedDataSetMirrorDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SubscribedDataSetMirrorDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SubscribedDataSetMirrorDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ParentNodeName", ParentNodeName); + encoder.WriteEncodeableArray("RolePermissions", RolePermissions.ToArray(), typeof(RolePermissionType)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ParentNodeName = decoder.ReadString("ParentNodeName"); + RolePermissions = (RolePermissionTypeCollection)decoder.ReadEncodeableArray("RolePermissions", typeof(RolePermissionType)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SubscribedDataSetMirrorDataType value = encodeable as SubscribedDataSetMirrorDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_parentNodeName, value.m_parentNodeName)) return false; + if (!Utils.IsEqual(m_rolePermissions, value.m_rolePermissions)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (SubscribedDataSetMirrorDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SubscribedDataSetMirrorDataType clone = (SubscribedDataSetMirrorDataType)base.MemberwiseClone(); + + clone.m_parentNodeName = (string)Utils.Clone(this.m_parentNodeName); + clone.m_rolePermissions = (RolePermissionTypeCollection)Utils.Clone(this.m_rolePermissions); + + return clone; + } + #endregion + + #region Private Fields + private string m_parentNodeName; + private RolePermissionTypeCollection m_rolePermissions; + #endregion + } + + #region SubscribedDataSetMirrorDataTypeCollection Class + /// + /// A collection of SubscribedDataSetMirrorDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSubscribedDataSetMirrorDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SubscribedDataSetMirrorDataType")] + #if !NET_STANDARD + public partial class SubscribedDataSetMirrorDataTypeCollection : List, ICloneable + #else + public partial class SubscribedDataSetMirrorDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SubscribedDataSetMirrorDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SubscribedDataSetMirrorDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SubscribedDataSetMirrorDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SubscribedDataSetMirrorDataTypeCollection(SubscribedDataSetMirrorDataType[] values) + { + if (values != null) + { + return new SubscribedDataSetMirrorDataTypeCollection(values); + } + + return new SubscribedDataSetMirrorDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SubscribedDataSetMirrorDataType[](SubscribedDataSetMirrorDataTypeCollection 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 (SubscribedDataSetMirrorDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SubscribedDataSetMirrorDataTypeCollection clone = new SubscribedDataSetMirrorDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SubscribedDataSetMirrorDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PubSubConfigurationDataType Class + #if (!OPCUA_EXCLUDE_PubSubConfigurationDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PubSubConfigurationDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PubSubConfigurationDataType() + { + 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_publishedDataSets = new PublishedDataSetDataTypeCollection(); + m_connections = new PubSubConnectionDataTypeCollection(); + m_enabled = true; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "PublishedDataSets", IsRequired = false, Order = 1)] + public PublishedDataSetDataTypeCollection PublishedDataSets + { + get + { + return m_publishedDataSets; + } + + set + { + m_publishedDataSets = value; + + if (value == null) + { + m_publishedDataSets = new PublishedDataSetDataTypeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Connections", IsRequired = false, Order = 2)] + public PubSubConnectionDataTypeCollection Connections + { + get + { + return m_connections; + } + + set + { + m_connections = value; + + if (value == null) + { + m_connections = new PubSubConnectionDataTypeCollection(); + } + } + } + + /// + [DataMember(Name = "Enabled", IsRequired = false, Order = 3)] + public bool Enabled + { + get { return m_enabled; } + set { m_enabled = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PubSubConfigurationDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PubSubConfigurationDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PubSubConfigurationDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("PublishedDataSets", PublishedDataSets.ToArray(), typeof(PublishedDataSetDataType)); + encoder.WriteEncodeableArray("Connections", Connections.ToArray(), typeof(PubSubConnectionDataType)); + encoder.WriteBoolean("Enabled", Enabled); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PublishedDataSets = (PublishedDataSetDataTypeCollection)decoder.ReadEncodeableArray("PublishedDataSets", typeof(PublishedDataSetDataType)); + Connections = (PubSubConnectionDataTypeCollection)decoder.ReadEncodeableArray("Connections", typeof(PubSubConnectionDataType)); + Enabled = decoder.ReadBoolean("Enabled"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PubSubConfigurationDataType value = encodeable as PubSubConfigurationDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_publishedDataSets, value.m_publishedDataSets)) return false; + if (!Utils.IsEqual(m_connections, value.m_connections)) return false; + if (!Utils.IsEqual(m_enabled, value.m_enabled)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PubSubConfigurationDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PubSubConfigurationDataType clone = (PubSubConfigurationDataType)base.MemberwiseClone(); + + clone.m_publishedDataSets = (PublishedDataSetDataTypeCollection)Utils.Clone(this.m_publishedDataSets); + clone.m_connections = (PubSubConnectionDataTypeCollection)Utils.Clone(this.m_connections); + clone.m_enabled = (bool)Utils.Clone(this.m_enabled); + + return clone; + } + #endregion + + #region Private Fields + private PublishedDataSetDataTypeCollection m_publishedDataSets; + private PubSubConnectionDataTypeCollection m_connections; + private bool m_enabled; + #endregion + } + + #region PubSubConfigurationDataTypeCollection Class + /// + /// A collection of PubSubConfigurationDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPubSubConfigurationDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PubSubConfigurationDataType")] + #if !NET_STANDARD + public partial class PubSubConfigurationDataTypeCollection : List, ICloneable + #else + public partial class PubSubConfigurationDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PubSubConfigurationDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PubSubConfigurationDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PubSubConfigurationDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PubSubConfigurationDataTypeCollection(PubSubConfigurationDataType[] values) + { + if (values != null) + { + return new PubSubConfigurationDataTypeCollection(values); + } + + return new PubSubConfigurationDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PubSubConfigurationDataType[](PubSubConfigurationDataTypeCollection 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 (PubSubConfigurationDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PubSubConfigurationDataTypeCollection clone = new PubSubConfigurationDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PubSubConfigurationDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataSetOrderingType Enumeration + #if (!OPCUA_EXCLUDE_DataSetOrderingType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum DataSetOrderingType + { + /// + [EnumMember(Value = "Undefined_0")] + Undefined = 0, + + /// + [EnumMember(Value = "AscendingWriterId_1")] + AscendingWriterId = 1, + + /// + [EnumMember(Value = "AscendingWriterIdSingle_2")] + AscendingWriterIdSingle = 2, + } + + #region DataSetOrderingTypeCollection Class + /// + /// A collection of DataSetOrderingType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataSetOrderingType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataSetOrderingType")] + #if !NET_STANDARD + public partial class DataSetOrderingTypeCollection : List, ICloneable + #else + public partial class DataSetOrderingTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataSetOrderingTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataSetOrderingTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataSetOrderingTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataSetOrderingTypeCollection(DataSetOrderingType[] values) + { + if (values != null) + { + return new DataSetOrderingTypeCollection(values); + } + + return new DataSetOrderingTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataSetOrderingType[](DataSetOrderingTypeCollection 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 (DataSetOrderingTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataSetOrderingTypeCollection clone = new DataSetOrderingTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataSetOrderingType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region UadpNetworkMessageContentMask Enumeration + #if (!OPCUA_EXCLUDE_UadpNetworkMessageContentMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum UadpNetworkMessageContentMask : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "PublisherId_1")] + PublisherId = 1, + + /// + [EnumMember(Value = "GroupHeader_2")] + GroupHeader = 2, + + /// + [EnumMember(Value = "WriterGroupId_4")] + WriterGroupId = 4, + + /// + [EnumMember(Value = "GroupVersion_8")] + GroupVersion = 8, + + /// + [EnumMember(Value = "NetworkMessageNumber_16")] + NetworkMessageNumber = 16, + + /// + [EnumMember(Value = "SequenceNumber_32")] + SequenceNumber = 32, + + /// + [EnumMember(Value = "PayloadHeader_64")] + PayloadHeader = 64, + + /// + [EnumMember(Value = "Timestamp_128")] + Timestamp = 128, + + /// + [EnumMember(Value = "PicoSeconds_256")] + PicoSeconds = 256, + + /// + [EnumMember(Value = "DataSetClassId_512")] + DataSetClassId = 512, + + /// + [EnumMember(Value = "PromotedFields_1024")] + PromotedFields = 1024, + } + + #region UadpNetworkMessageContentMaskCollection Class + /// + /// A collection of UadpNetworkMessageContentMask objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUadpNetworkMessageContentMask", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UadpNetworkMessageContentMask")] + #if !NET_STANDARD + public partial class UadpNetworkMessageContentMaskCollection : List, ICloneable + #else + public partial class UadpNetworkMessageContentMaskCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UadpNetworkMessageContentMaskCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UadpNetworkMessageContentMaskCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UadpNetworkMessageContentMaskCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UadpNetworkMessageContentMaskCollection(UadpNetworkMessageContentMask[] values) + { + if (values != null) + { + return new UadpNetworkMessageContentMaskCollection(values); + } + + return new UadpNetworkMessageContentMaskCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UadpNetworkMessageContentMask[](UadpNetworkMessageContentMaskCollection 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 (UadpNetworkMessageContentMaskCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UadpNetworkMessageContentMaskCollection clone = new UadpNetworkMessageContentMaskCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UadpNetworkMessageContentMask)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region UadpWriterGroupMessageDataType Class + #if (!OPCUA_EXCLUDE_UadpWriterGroupMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UadpWriterGroupMessageDataType : WriterGroupMessageDataType + { + #region Constructors + /// + /// The default constructor. + /// + public UadpWriterGroupMessageDataType() + { + 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_groupVersion = (uint)0; + m_dataSetOrdering = DataSetOrderingType.Undefined; + m_networkMessageContentMask = 0; + m_samplingOffset = (double)0; + m_publishingOffset = new DoubleCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "GroupVersion", IsRequired = false, Order = 1)] + public uint GroupVersion + { + get { return m_groupVersion; } + set { m_groupVersion = value; } + } + + /// + [DataMember(Name = "DataSetOrdering", IsRequired = false, Order = 2)] + public DataSetOrderingType DataSetOrdering + { + get { return m_dataSetOrdering; } + set { m_dataSetOrdering = value; } + } + + /// + [DataMember(Name = "NetworkMessageContentMask", IsRequired = false, Order = 3)] + public uint NetworkMessageContentMask + { + get { return m_networkMessageContentMask; } + set { m_networkMessageContentMask = value; } + } + + /// + [DataMember(Name = "SamplingOffset", IsRequired = false, Order = 4)] + public double SamplingOffset + { + get { return m_samplingOffset; } + set { m_samplingOffset = value; } + } + + /// + /// + /// + [DataMember(Name = "PublishingOffset", IsRequired = false, Order = 5)] + public DoubleCollection PublishingOffset + { + get + { + return m_publishingOffset; + } + + set + { + m_publishingOffset = value; + + if (value == null) + { + m_publishingOffset = new DoubleCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UadpWriterGroupMessageDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UadpWriterGroupMessageDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UadpWriterGroupMessageDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("GroupVersion", GroupVersion); + encoder.WriteEnumerated("DataSetOrdering", DataSetOrdering); + encoder.WriteUInt32("NetworkMessageContentMask", NetworkMessageContentMask); + encoder.WriteDouble("SamplingOffset", SamplingOffset); + encoder.WriteDoubleArray("PublishingOffset", PublishingOffset); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + GroupVersion = decoder.ReadUInt32("GroupVersion"); + DataSetOrdering = (DataSetOrderingType)decoder.ReadEnumerated("DataSetOrdering", typeof(DataSetOrderingType)); + NetworkMessageContentMask = decoder.ReadUInt32("NetworkMessageContentMask"); + SamplingOffset = decoder.ReadDouble("SamplingOffset"); + PublishingOffset = decoder.ReadDoubleArray("PublishingOffset"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UadpWriterGroupMessageDataType value = encodeable as UadpWriterGroupMessageDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_groupVersion, value.m_groupVersion)) return false; + if (!Utils.IsEqual(m_dataSetOrdering, value.m_dataSetOrdering)) return false; + if (!Utils.IsEqual(m_networkMessageContentMask, value.m_networkMessageContentMask)) return false; + if (!Utils.IsEqual(m_samplingOffset, value.m_samplingOffset)) return false; + if (!Utils.IsEqual(m_publishingOffset, value.m_publishingOffset)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UadpWriterGroupMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UadpWriterGroupMessageDataType clone = (UadpWriterGroupMessageDataType)base.MemberwiseClone(); + + clone.m_groupVersion = (uint)Utils.Clone(this.m_groupVersion); + clone.m_dataSetOrdering = (DataSetOrderingType)Utils.Clone(this.m_dataSetOrdering); + clone.m_networkMessageContentMask = (uint)Utils.Clone(this.m_networkMessageContentMask); + clone.m_samplingOffset = (double)Utils.Clone(this.m_samplingOffset); + clone.m_publishingOffset = (DoubleCollection)Utils.Clone(this.m_publishingOffset); + + return clone; + } + #endregion + + #region Private Fields + private uint m_groupVersion; + private DataSetOrderingType m_dataSetOrdering; + private uint m_networkMessageContentMask; + private double m_samplingOffset; + private DoubleCollection m_publishingOffset; + #endregion + } + + #region UadpWriterGroupMessageDataTypeCollection Class + /// + /// A collection of UadpWriterGroupMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUadpWriterGroupMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UadpWriterGroupMessageDataType")] + #if !NET_STANDARD + public partial class UadpWriterGroupMessageDataTypeCollection : List, ICloneable + #else + public partial class UadpWriterGroupMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UadpWriterGroupMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UadpWriterGroupMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UadpWriterGroupMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UadpWriterGroupMessageDataTypeCollection(UadpWriterGroupMessageDataType[] values) + { + if (values != null) + { + return new UadpWriterGroupMessageDataTypeCollection(values); + } + + return new UadpWriterGroupMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UadpWriterGroupMessageDataType[](UadpWriterGroupMessageDataTypeCollection 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 (UadpWriterGroupMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UadpWriterGroupMessageDataTypeCollection clone = new UadpWriterGroupMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UadpWriterGroupMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region UadpDataSetMessageContentMask Enumeration + #if (!OPCUA_EXCLUDE_UadpDataSetMessageContentMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum UadpDataSetMessageContentMask : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "Timestamp_1")] + Timestamp = 1, + + /// + [EnumMember(Value = "PicoSeconds_2")] + PicoSeconds = 2, + + /// + [EnumMember(Value = "Status_4")] + Status = 4, + + /// + [EnumMember(Value = "MajorVersion_8")] + MajorVersion = 8, + + /// + [EnumMember(Value = "MinorVersion_16")] + MinorVersion = 16, + + /// + [EnumMember(Value = "SequenceNumber_32")] + SequenceNumber = 32, + } + + #region UadpDataSetMessageContentMaskCollection Class + /// + /// A collection of UadpDataSetMessageContentMask objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUadpDataSetMessageContentMask", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UadpDataSetMessageContentMask")] + #if !NET_STANDARD + public partial class UadpDataSetMessageContentMaskCollection : List, ICloneable + #else + public partial class UadpDataSetMessageContentMaskCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UadpDataSetMessageContentMaskCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UadpDataSetMessageContentMaskCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UadpDataSetMessageContentMaskCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UadpDataSetMessageContentMaskCollection(UadpDataSetMessageContentMask[] values) + { + if (values != null) + { + return new UadpDataSetMessageContentMaskCollection(values); + } + + return new UadpDataSetMessageContentMaskCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UadpDataSetMessageContentMask[](UadpDataSetMessageContentMaskCollection 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 (UadpDataSetMessageContentMaskCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UadpDataSetMessageContentMaskCollection clone = new UadpDataSetMessageContentMaskCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UadpDataSetMessageContentMask)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region UadpDataSetWriterMessageDataType Class + #if (!OPCUA_EXCLUDE_UadpDataSetWriterMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UadpDataSetWriterMessageDataType : DataSetWriterMessageDataType + { + #region Constructors + /// + /// The default constructor. + /// + public UadpDataSetWriterMessageDataType() + { + 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_dataSetMessageContentMask = 0; + m_configuredSize = (ushort)0; + m_networkMessageNumber = (ushort)0; + m_dataSetOffset = (ushort)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "DataSetMessageContentMask", IsRequired = false, Order = 1)] + public uint DataSetMessageContentMask + { + get { return m_dataSetMessageContentMask; } + set { m_dataSetMessageContentMask = value; } + } + + /// + [DataMember(Name = "ConfiguredSize", IsRequired = false, Order = 2)] + public ushort ConfiguredSize + { + get { return m_configuredSize; } + set { m_configuredSize = value; } + } + + /// + [DataMember(Name = "NetworkMessageNumber", IsRequired = false, Order = 3)] + public ushort NetworkMessageNumber + { + get { return m_networkMessageNumber; } + set { m_networkMessageNumber = value; } + } + + /// + [DataMember(Name = "DataSetOffset", IsRequired = false, Order = 4)] + public ushort DataSetOffset + { + get { return m_dataSetOffset; } + set { m_dataSetOffset = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UadpDataSetWriterMessageDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UadpDataSetWriterMessageDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UadpDataSetWriterMessageDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("DataSetMessageContentMask", DataSetMessageContentMask); + encoder.WriteUInt16("ConfiguredSize", ConfiguredSize); + encoder.WriteUInt16("NetworkMessageNumber", NetworkMessageNumber); + encoder.WriteUInt16("DataSetOffset", DataSetOffset); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DataSetMessageContentMask = decoder.ReadUInt32("DataSetMessageContentMask"); + ConfiguredSize = decoder.ReadUInt16("ConfiguredSize"); + NetworkMessageNumber = decoder.ReadUInt16("NetworkMessageNumber"); + DataSetOffset = decoder.ReadUInt16("DataSetOffset"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UadpDataSetWriterMessageDataType value = encodeable as UadpDataSetWriterMessageDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_dataSetMessageContentMask, value.m_dataSetMessageContentMask)) return false; + if (!Utils.IsEqual(m_configuredSize, value.m_configuredSize)) return false; + if (!Utils.IsEqual(m_networkMessageNumber, value.m_networkMessageNumber)) return false; + if (!Utils.IsEqual(m_dataSetOffset, value.m_dataSetOffset)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UadpDataSetWriterMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UadpDataSetWriterMessageDataType clone = (UadpDataSetWriterMessageDataType)base.MemberwiseClone(); + + clone.m_dataSetMessageContentMask = (uint)Utils.Clone(this.m_dataSetMessageContentMask); + clone.m_configuredSize = (ushort)Utils.Clone(this.m_configuredSize); + clone.m_networkMessageNumber = (ushort)Utils.Clone(this.m_networkMessageNumber); + clone.m_dataSetOffset = (ushort)Utils.Clone(this.m_dataSetOffset); + + return clone; + } + #endregion + + #region Private Fields + private uint m_dataSetMessageContentMask; + private ushort m_configuredSize; + private ushort m_networkMessageNumber; + private ushort m_dataSetOffset; + #endregion + } + + #region UadpDataSetWriterMessageDataTypeCollection Class + /// + /// A collection of UadpDataSetWriterMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUadpDataSetWriterMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UadpDataSetWriterMessageDataType")] + #if !NET_STANDARD + public partial class UadpDataSetWriterMessageDataTypeCollection : List, ICloneable + #else + public partial class UadpDataSetWriterMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UadpDataSetWriterMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UadpDataSetWriterMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UadpDataSetWriterMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UadpDataSetWriterMessageDataTypeCollection(UadpDataSetWriterMessageDataType[] values) + { + if (values != null) + { + return new UadpDataSetWriterMessageDataTypeCollection(values); + } + + return new UadpDataSetWriterMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UadpDataSetWriterMessageDataType[](UadpDataSetWriterMessageDataTypeCollection 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 (UadpDataSetWriterMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UadpDataSetWriterMessageDataTypeCollection clone = new UadpDataSetWriterMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UadpDataSetWriterMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region UadpDataSetReaderMessageDataType Class + #if (!OPCUA_EXCLUDE_UadpDataSetReaderMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UadpDataSetReaderMessageDataType : DataSetReaderMessageDataType + { + #region Constructors + /// + /// The default constructor. + /// + public UadpDataSetReaderMessageDataType() + { + 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_groupVersion = (uint)0; + m_networkMessageNumber = (ushort)0; + m_dataSetOffset = (ushort)0; + m_dataSetClassId = Uuid.Empty; + m_networkMessageContentMask = 0; + m_dataSetMessageContentMask = 0; + m_publishingInterval = (double)0; + m_receiveOffset = (double)0; + m_processingOffset = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "GroupVersion", IsRequired = false, Order = 1)] + public uint GroupVersion + { + get { return m_groupVersion; } + set { m_groupVersion = value; } + } + + /// + [DataMember(Name = "NetworkMessageNumber", IsRequired = false, Order = 2)] + public ushort NetworkMessageNumber + { + get { return m_networkMessageNumber; } + set { m_networkMessageNumber = value; } + } + + /// + [DataMember(Name = "DataSetOffset", IsRequired = false, Order = 3)] + public ushort DataSetOffset + { + get { return m_dataSetOffset; } + set { m_dataSetOffset = value; } + } + + /// + [DataMember(Name = "DataSetClassId", IsRequired = false, Order = 4)] + public Uuid DataSetClassId + { + get { return m_dataSetClassId; } + set { m_dataSetClassId = value; } + } + + /// + [DataMember(Name = "NetworkMessageContentMask", IsRequired = false, Order = 5)] + public uint NetworkMessageContentMask + { + get { return m_networkMessageContentMask; } + set { m_networkMessageContentMask = value; } + } + + /// + [DataMember(Name = "DataSetMessageContentMask", IsRequired = false, Order = 6)] + public uint DataSetMessageContentMask + { + get { return m_dataSetMessageContentMask; } + set { m_dataSetMessageContentMask = value; } + } + + /// + [DataMember(Name = "PublishingInterval", IsRequired = false, Order = 7)] + public double PublishingInterval + { + get { return m_publishingInterval; } + set { m_publishingInterval = value; } + } + + /// + [DataMember(Name = "ReceiveOffset", IsRequired = false, Order = 8)] + public double ReceiveOffset + { + get { return m_receiveOffset; } + set { m_receiveOffset = value; } + } + + /// + [DataMember(Name = "ProcessingOffset", IsRequired = false, Order = 9)] + public double ProcessingOffset + { + get { return m_processingOffset; } + set { m_processingOffset = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UadpDataSetReaderMessageDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UadpDataSetReaderMessageDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UadpDataSetReaderMessageDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("GroupVersion", GroupVersion); + encoder.WriteUInt16("NetworkMessageNumber", NetworkMessageNumber); + encoder.WriteUInt16("DataSetOffset", DataSetOffset); + encoder.WriteGuid("DataSetClassId", DataSetClassId); + encoder.WriteUInt32("NetworkMessageContentMask", NetworkMessageContentMask); + encoder.WriteUInt32("DataSetMessageContentMask", DataSetMessageContentMask); + encoder.WriteDouble("PublishingInterval", PublishingInterval); + encoder.WriteDouble("ReceiveOffset", ReceiveOffset); + encoder.WriteDouble("ProcessingOffset", ProcessingOffset); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + GroupVersion = decoder.ReadUInt32("GroupVersion"); + NetworkMessageNumber = decoder.ReadUInt16("NetworkMessageNumber"); + DataSetOffset = decoder.ReadUInt16("DataSetOffset"); + DataSetClassId = decoder.ReadGuid("DataSetClassId"); + NetworkMessageContentMask = decoder.ReadUInt32("NetworkMessageContentMask"); + DataSetMessageContentMask = decoder.ReadUInt32("DataSetMessageContentMask"); + PublishingInterval = decoder.ReadDouble("PublishingInterval"); + ReceiveOffset = decoder.ReadDouble("ReceiveOffset"); + ProcessingOffset = decoder.ReadDouble("ProcessingOffset"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UadpDataSetReaderMessageDataType value = encodeable as UadpDataSetReaderMessageDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_groupVersion, value.m_groupVersion)) return false; + if (!Utils.IsEqual(m_networkMessageNumber, value.m_networkMessageNumber)) return false; + if (!Utils.IsEqual(m_dataSetOffset, value.m_dataSetOffset)) return false; + if (!Utils.IsEqual(m_dataSetClassId, value.m_dataSetClassId)) return false; + if (!Utils.IsEqual(m_networkMessageContentMask, value.m_networkMessageContentMask)) return false; + if (!Utils.IsEqual(m_dataSetMessageContentMask, value.m_dataSetMessageContentMask)) return false; + if (!Utils.IsEqual(m_publishingInterval, value.m_publishingInterval)) return false; + if (!Utils.IsEqual(m_receiveOffset, value.m_receiveOffset)) return false; + if (!Utils.IsEqual(m_processingOffset, value.m_processingOffset)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UadpDataSetReaderMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UadpDataSetReaderMessageDataType clone = (UadpDataSetReaderMessageDataType)base.MemberwiseClone(); + + clone.m_groupVersion = (uint)Utils.Clone(this.m_groupVersion); + clone.m_networkMessageNumber = (ushort)Utils.Clone(this.m_networkMessageNumber); + clone.m_dataSetOffset = (ushort)Utils.Clone(this.m_dataSetOffset); + clone.m_dataSetClassId = (Uuid)Utils.Clone(this.m_dataSetClassId); + clone.m_networkMessageContentMask = (uint)Utils.Clone(this.m_networkMessageContentMask); + clone.m_dataSetMessageContentMask = (uint)Utils.Clone(this.m_dataSetMessageContentMask); + clone.m_publishingInterval = (double)Utils.Clone(this.m_publishingInterval); + clone.m_receiveOffset = (double)Utils.Clone(this.m_receiveOffset); + clone.m_processingOffset = (double)Utils.Clone(this.m_processingOffset); + + return clone; + } + #endregion + + #region Private Fields + private uint m_groupVersion; + private ushort m_networkMessageNumber; + private ushort m_dataSetOffset; + private Uuid m_dataSetClassId; + private uint m_networkMessageContentMask; + private uint m_dataSetMessageContentMask; + private double m_publishingInterval; + private double m_receiveOffset; + private double m_processingOffset; + #endregion + } + + #region UadpDataSetReaderMessageDataTypeCollection Class + /// + /// A collection of UadpDataSetReaderMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUadpDataSetReaderMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UadpDataSetReaderMessageDataType")] + #if !NET_STANDARD + public partial class UadpDataSetReaderMessageDataTypeCollection : List, ICloneable + #else + public partial class UadpDataSetReaderMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UadpDataSetReaderMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UadpDataSetReaderMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UadpDataSetReaderMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UadpDataSetReaderMessageDataTypeCollection(UadpDataSetReaderMessageDataType[] values) + { + if (values != null) + { + return new UadpDataSetReaderMessageDataTypeCollection(values); + } + + return new UadpDataSetReaderMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UadpDataSetReaderMessageDataType[](UadpDataSetReaderMessageDataTypeCollection 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 (UadpDataSetReaderMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UadpDataSetReaderMessageDataTypeCollection clone = new UadpDataSetReaderMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UadpDataSetReaderMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region JsonNetworkMessageContentMask Enumeration + #if (!OPCUA_EXCLUDE_JsonNetworkMessageContentMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum JsonNetworkMessageContentMask : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "NetworkMessageHeader_1")] + NetworkMessageHeader = 1, + + /// + [EnumMember(Value = "DataSetMessageHeader_2")] + DataSetMessageHeader = 2, + + /// + [EnumMember(Value = "SingleDataSetMessage_4")] + SingleDataSetMessage = 4, + + /// + [EnumMember(Value = "PublisherId_8")] + PublisherId = 8, + + /// + [EnumMember(Value = "DataSetClassId_16")] + DataSetClassId = 16, + + /// + [EnumMember(Value = "ReplyTo_32")] + ReplyTo = 32, + } + + #region JsonNetworkMessageContentMaskCollection Class + /// + /// A collection of JsonNetworkMessageContentMask objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfJsonNetworkMessageContentMask", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "JsonNetworkMessageContentMask")] + #if !NET_STANDARD + public partial class JsonNetworkMessageContentMaskCollection : List, ICloneable + #else + public partial class JsonNetworkMessageContentMaskCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public JsonNetworkMessageContentMaskCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public JsonNetworkMessageContentMaskCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public JsonNetworkMessageContentMaskCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator JsonNetworkMessageContentMaskCollection(JsonNetworkMessageContentMask[] values) + { + if (values != null) + { + return new JsonNetworkMessageContentMaskCollection(values); + } + + return new JsonNetworkMessageContentMaskCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator JsonNetworkMessageContentMask[](JsonNetworkMessageContentMaskCollection 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 (JsonNetworkMessageContentMaskCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + JsonNetworkMessageContentMaskCollection clone = new JsonNetworkMessageContentMaskCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((JsonNetworkMessageContentMask)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region JsonWriterGroupMessageDataType Class + #if (!OPCUA_EXCLUDE_JsonWriterGroupMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class JsonWriterGroupMessageDataType : WriterGroupMessageDataType + { + #region Constructors + /// + /// The default constructor. + /// + public JsonWriterGroupMessageDataType() + { + 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_networkMessageContentMask = 0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NetworkMessageContentMask", IsRequired = false, Order = 1)] + public uint NetworkMessageContentMask + { + get { return m_networkMessageContentMask; } + set { m_networkMessageContentMask = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.JsonWriterGroupMessageDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.JsonWriterGroupMessageDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.JsonWriterGroupMessageDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("NetworkMessageContentMask", NetworkMessageContentMask); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NetworkMessageContentMask = decoder.ReadUInt32("NetworkMessageContentMask"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + JsonWriterGroupMessageDataType value = encodeable as JsonWriterGroupMessageDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_networkMessageContentMask, value.m_networkMessageContentMask)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (JsonWriterGroupMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + JsonWriterGroupMessageDataType clone = (JsonWriterGroupMessageDataType)base.MemberwiseClone(); + + clone.m_networkMessageContentMask = (uint)Utils.Clone(this.m_networkMessageContentMask); + + return clone; + } + #endregion + + #region Private Fields + private uint m_networkMessageContentMask; + #endregion + } + + #region JsonWriterGroupMessageDataTypeCollection Class + /// + /// A collection of JsonWriterGroupMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfJsonWriterGroupMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "JsonWriterGroupMessageDataType")] + #if !NET_STANDARD + public partial class JsonWriterGroupMessageDataTypeCollection : List, ICloneable + #else + public partial class JsonWriterGroupMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public JsonWriterGroupMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public JsonWriterGroupMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public JsonWriterGroupMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator JsonWriterGroupMessageDataTypeCollection(JsonWriterGroupMessageDataType[] values) + { + if (values != null) + { + return new JsonWriterGroupMessageDataTypeCollection(values); + } + + return new JsonWriterGroupMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator JsonWriterGroupMessageDataType[](JsonWriterGroupMessageDataTypeCollection 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 (JsonWriterGroupMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + JsonWriterGroupMessageDataTypeCollection clone = new JsonWriterGroupMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((JsonWriterGroupMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region JsonDataSetMessageContentMask Enumeration + #if (!OPCUA_EXCLUDE_JsonDataSetMessageContentMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum JsonDataSetMessageContentMask : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "DataSetWriterId_1")] + DataSetWriterId = 1, + + /// + [EnumMember(Value = "MetaDataVersion_2")] + MetaDataVersion = 2, + + /// + [EnumMember(Value = "SequenceNumber_4")] + SequenceNumber = 4, + + /// + [EnumMember(Value = "Timestamp_8")] + Timestamp = 8, + + /// + [EnumMember(Value = "Status_16")] + Status = 16, + } + + #region JsonDataSetMessageContentMaskCollection Class + /// + /// A collection of JsonDataSetMessageContentMask objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfJsonDataSetMessageContentMask", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "JsonDataSetMessageContentMask")] + #if !NET_STANDARD + public partial class JsonDataSetMessageContentMaskCollection : List, ICloneable + #else + public partial class JsonDataSetMessageContentMaskCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public JsonDataSetMessageContentMaskCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public JsonDataSetMessageContentMaskCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public JsonDataSetMessageContentMaskCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator JsonDataSetMessageContentMaskCollection(JsonDataSetMessageContentMask[] values) + { + if (values != null) + { + return new JsonDataSetMessageContentMaskCollection(values); + } + + return new JsonDataSetMessageContentMaskCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator JsonDataSetMessageContentMask[](JsonDataSetMessageContentMaskCollection 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 (JsonDataSetMessageContentMaskCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + JsonDataSetMessageContentMaskCollection clone = new JsonDataSetMessageContentMaskCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((JsonDataSetMessageContentMask)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region JsonDataSetWriterMessageDataType Class + #if (!OPCUA_EXCLUDE_JsonDataSetWriterMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class JsonDataSetWriterMessageDataType : DataSetWriterMessageDataType + { + #region Constructors + /// + /// The default constructor. + /// + public JsonDataSetWriterMessageDataType() + { + 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_dataSetMessageContentMask = 0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "DataSetMessageContentMask", IsRequired = false, Order = 1)] + public uint DataSetMessageContentMask + { + get { return m_dataSetMessageContentMask; } + set { m_dataSetMessageContentMask = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.JsonDataSetWriterMessageDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.JsonDataSetWriterMessageDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.JsonDataSetWriterMessageDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("DataSetMessageContentMask", DataSetMessageContentMask); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DataSetMessageContentMask = decoder.ReadUInt32("DataSetMessageContentMask"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + JsonDataSetWriterMessageDataType value = encodeable as JsonDataSetWriterMessageDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_dataSetMessageContentMask, value.m_dataSetMessageContentMask)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (JsonDataSetWriterMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + JsonDataSetWriterMessageDataType clone = (JsonDataSetWriterMessageDataType)base.MemberwiseClone(); + + clone.m_dataSetMessageContentMask = (uint)Utils.Clone(this.m_dataSetMessageContentMask); + + return clone; + } + #endregion + + #region Private Fields + private uint m_dataSetMessageContentMask; + #endregion + } + + #region JsonDataSetWriterMessageDataTypeCollection Class + /// + /// A collection of JsonDataSetWriterMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfJsonDataSetWriterMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "JsonDataSetWriterMessageDataType")] + #if !NET_STANDARD + public partial class JsonDataSetWriterMessageDataTypeCollection : List, ICloneable + #else + public partial class JsonDataSetWriterMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public JsonDataSetWriterMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public JsonDataSetWriterMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public JsonDataSetWriterMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator JsonDataSetWriterMessageDataTypeCollection(JsonDataSetWriterMessageDataType[] values) + { + if (values != null) + { + return new JsonDataSetWriterMessageDataTypeCollection(values); + } + + return new JsonDataSetWriterMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator JsonDataSetWriterMessageDataType[](JsonDataSetWriterMessageDataTypeCollection 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 (JsonDataSetWriterMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + JsonDataSetWriterMessageDataTypeCollection clone = new JsonDataSetWriterMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((JsonDataSetWriterMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region JsonDataSetReaderMessageDataType Class + #if (!OPCUA_EXCLUDE_JsonDataSetReaderMessageDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class JsonDataSetReaderMessageDataType : DataSetReaderMessageDataType + { + #region Constructors + /// + /// The default constructor. + /// + public JsonDataSetReaderMessageDataType() + { + 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_networkMessageContentMask = 0; + m_dataSetMessageContentMask = 0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NetworkMessageContentMask", IsRequired = false, Order = 1)] + public uint NetworkMessageContentMask + { + get { return m_networkMessageContentMask; } + set { m_networkMessageContentMask = value; } + } + + /// + [DataMember(Name = "DataSetMessageContentMask", IsRequired = false, Order = 2)] + public uint DataSetMessageContentMask + { + get { return m_dataSetMessageContentMask; } + set { m_dataSetMessageContentMask = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.JsonDataSetReaderMessageDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.JsonDataSetReaderMessageDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.JsonDataSetReaderMessageDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("NetworkMessageContentMask", NetworkMessageContentMask); + encoder.WriteUInt32("DataSetMessageContentMask", DataSetMessageContentMask); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NetworkMessageContentMask = decoder.ReadUInt32("NetworkMessageContentMask"); + DataSetMessageContentMask = decoder.ReadUInt32("DataSetMessageContentMask"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + JsonDataSetReaderMessageDataType value = encodeable as JsonDataSetReaderMessageDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_networkMessageContentMask, value.m_networkMessageContentMask)) return false; + if (!Utils.IsEqual(m_dataSetMessageContentMask, value.m_dataSetMessageContentMask)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (JsonDataSetReaderMessageDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + JsonDataSetReaderMessageDataType clone = (JsonDataSetReaderMessageDataType)base.MemberwiseClone(); + + clone.m_networkMessageContentMask = (uint)Utils.Clone(this.m_networkMessageContentMask); + clone.m_dataSetMessageContentMask = (uint)Utils.Clone(this.m_dataSetMessageContentMask); + + return clone; + } + #endregion + + #region Private Fields + private uint m_networkMessageContentMask; + private uint m_dataSetMessageContentMask; + #endregion + } + + #region JsonDataSetReaderMessageDataTypeCollection Class + /// + /// A collection of JsonDataSetReaderMessageDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfJsonDataSetReaderMessageDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "JsonDataSetReaderMessageDataType")] + #if !NET_STANDARD + public partial class JsonDataSetReaderMessageDataTypeCollection : List, ICloneable + #else + public partial class JsonDataSetReaderMessageDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public JsonDataSetReaderMessageDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public JsonDataSetReaderMessageDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public JsonDataSetReaderMessageDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator JsonDataSetReaderMessageDataTypeCollection(JsonDataSetReaderMessageDataType[] values) + { + if (values != null) + { + return new JsonDataSetReaderMessageDataTypeCollection(values); + } + + return new JsonDataSetReaderMessageDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator JsonDataSetReaderMessageDataType[](JsonDataSetReaderMessageDataTypeCollection 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 (JsonDataSetReaderMessageDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + JsonDataSetReaderMessageDataTypeCollection clone = new JsonDataSetReaderMessageDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((JsonDataSetReaderMessageDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DatagramConnectionTransportDataType Class + #if (!OPCUA_EXCLUDE_DatagramConnectionTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DatagramConnectionTransportDataType : ConnectionTransportDataType + { + #region Constructors + /// + /// The default constructor. + /// + public DatagramConnectionTransportDataType() + { + 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_discoveryAddress = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "DiscoveryAddress", IsRequired = false, Order = 1)] + public ExtensionObject DiscoveryAddress + { + get { return m_discoveryAddress; } + set { m_discoveryAddress = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DatagramConnectionTransportDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DatagramConnectionTransportDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DatagramConnectionTransportDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteExtensionObject("DiscoveryAddress", DiscoveryAddress); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DiscoveryAddress = decoder.ReadExtensionObject("DiscoveryAddress"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DatagramConnectionTransportDataType value = encodeable as DatagramConnectionTransportDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_discoveryAddress, value.m_discoveryAddress)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DatagramConnectionTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DatagramConnectionTransportDataType clone = (DatagramConnectionTransportDataType)base.MemberwiseClone(); + + clone.m_discoveryAddress = (ExtensionObject)Utils.Clone(this.m_discoveryAddress); + + return clone; + } + #endregion + + #region Private Fields + private ExtensionObject m_discoveryAddress; + #endregion + } + + #region DatagramConnectionTransportDataTypeCollection Class + /// + /// A collection of DatagramConnectionTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDatagramConnectionTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DatagramConnectionTransportDataType")] + #if !NET_STANDARD + public partial class DatagramConnectionTransportDataTypeCollection : List, ICloneable + #else + public partial class DatagramConnectionTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DatagramConnectionTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DatagramConnectionTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DatagramConnectionTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DatagramConnectionTransportDataTypeCollection(DatagramConnectionTransportDataType[] values) + { + if (values != null) + { + return new DatagramConnectionTransportDataTypeCollection(values); + } + + return new DatagramConnectionTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DatagramConnectionTransportDataType[](DatagramConnectionTransportDataTypeCollection 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 (DatagramConnectionTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DatagramConnectionTransportDataTypeCollection clone = new DatagramConnectionTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DatagramConnectionTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DatagramWriterGroupTransportDataType Class + #if (!OPCUA_EXCLUDE_DatagramWriterGroupTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DatagramWriterGroupTransportDataType : WriterGroupTransportDataType + { + #region Constructors + /// + /// The default constructor. + /// + public DatagramWriterGroupTransportDataType() + { + 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_messageRepeatCount = (byte)0; + m_messageRepeatDelay = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "MessageRepeatCount", IsRequired = false, Order = 1)] + public byte MessageRepeatCount + { + get { return m_messageRepeatCount; } + set { m_messageRepeatCount = value; } + } + + /// + [DataMember(Name = "MessageRepeatDelay", IsRequired = false, Order = 2)] + public double MessageRepeatDelay + { + get { return m_messageRepeatDelay; } + set { m_messageRepeatDelay = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DatagramWriterGroupTransportDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DatagramWriterGroupTransportDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DatagramWriterGroupTransportDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByte("MessageRepeatCount", MessageRepeatCount); + encoder.WriteDouble("MessageRepeatDelay", MessageRepeatDelay); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + MessageRepeatCount = decoder.ReadByte("MessageRepeatCount"); + MessageRepeatDelay = decoder.ReadDouble("MessageRepeatDelay"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DatagramWriterGroupTransportDataType value = encodeable as DatagramWriterGroupTransportDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_messageRepeatCount, value.m_messageRepeatCount)) return false; + if (!Utils.IsEqual(m_messageRepeatDelay, value.m_messageRepeatDelay)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DatagramWriterGroupTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DatagramWriterGroupTransportDataType clone = (DatagramWriterGroupTransportDataType)base.MemberwiseClone(); + + clone.m_messageRepeatCount = (byte)Utils.Clone(this.m_messageRepeatCount); + clone.m_messageRepeatDelay = (double)Utils.Clone(this.m_messageRepeatDelay); + + return clone; + } + #endregion + + #region Private Fields + private byte m_messageRepeatCount; + private double m_messageRepeatDelay; + #endregion + } + + #region DatagramWriterGroupTransportDataTypeCollection Class + /// + /// A collection of DatagramWriterGroupTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDatagramWriterGroupTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DatagramWriterGroupTransportDataType")] + #if !NET_STANDARD + public partial class DatagramWriterGroupTransportDataTypeCollection : List, ICloneable + #else + public partial class DatagramWriterGroupTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DatagramWriterGroupTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DatagramWriterGroupTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DatagramWriterGroupTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DatagramWriterGroupTransportDataTypeCollection(DatagramWriterGroupTransportDataType[] values) + { + if (values != null) + { + return new DatagramWriterGroupTransportDataTypeCollection(values); + } + + return new DatagramWriterGroupTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DatagramWriterGroupTransportDataType[](DatagramWriterGroupTransportDataTypeCollection 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 (DatagramWriterGroupTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DatagramWriterGroupTransportDataTypeCollection clone = new DatagramWriterGroupTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DatagramWriterGroupTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrokerConnectionTransportDataType Class + #if (!OPCUA_EXCLUDE_BrokerConnectionTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrokerConnectionTransportDataType : ConnectionTransportDataType + { + #region Constructors + /// + /// The default constructor. + /// + public BrokerConnectionTransportDataType() + { + 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_resourceUri = null; + m_authenticationProfileUri = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ResourceUri", IsRequired = false, Order = 1)] + public string ResourceUri + { + get { return m_resourceUri; } + set { m_resourceUri = value; } + } + + /// + [DataMember(Name = "AuthenticationProfileUri", IsRequired = false, Order = 2)] + public string AuthenticationProfileUri + { + get { return m_authenticationProfileUri; } + set { m_authenticationProfileUri = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.BrokerConnectionTransportDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrokerConnectionTransportDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrokerConnectionTransportDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ResourceUri", ResourceUri); + encoder.WriteString("AuthenticationProfileUri", AuthenticationProfileUri); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResourceUri = decoder.ReadString("ResourceUri"); + AuthenticationProfileUri = decoder.ReadString("AuthenticationProfileUri"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrokerConnectionTransportDataType value = encodeable as BrokerConnectionTransportDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_resourceUri, value.m_resourceUri)) return false; + if (!Utils.IsEqual(m_authenticationProfileUri, value.m_authenticationProfileUri)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (BrokerConnectionTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrokerConnectionTransportDataType clone = (BrokerConnectionTransportDataType)base.MemberwiseClone(); + + clone.m_resourceUri = (string)Utils.Clone(this.m_resourceUri); + clone.m_authenticationProfileUri = (string)Utils.Clone(this.m_authenticationProfileUri); + + return clone; + } + #endregion + + #region Private Fields + private string m_resourceUri; + private string m_authenticationProfileUri; + #endregion + } + + #region BrokerConnectionTransportDataTypeCollection Class + /// + /// A collection of BrokerConnectionTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrokerConnectionTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrokerConnectionTransportDataType")] + #if !NET_STANDARD + public partial class BrokerConnectionTransportDataTypeCollection : List, ICloneable + #else + public partial class BrokerConnectionTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrokerConnectionTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrokerConnectionTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrokerConnectionTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrokerConnectionTransportDataTypeCollection(BrokerConnectionTransportDataType[] values) + { + if (values != null) + { + return new BrokerConnectionTransportDataTypeCollection(values); + } + + return new BrokerConnectionTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrokerConnectionTransportDataType[](BrokerConnectionTransportDataTypeCollection 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 (BrokerConnectionTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrokerConnectionTransportDataTypeCollection clone = new BrokerConnectionTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrokerConnectionTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrokerTransportQualityOfService Enumeration + #if (!OPCUA_EXCLUDE_BrokerTransportQualityOfService) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum BrokerTransportQualityOfService + { + /// + [EnumMember(Value = "NotSpecified_0")] + NotSpecified = 0, + + /// + [EnumMember(Value = "BestEffort_1")] + BestEffort = 1, + + /// + [EnumMember(Value = "AtLeastOnce_2")] + AtLeastOnce = 2, + + /// + [EnumMember(Value = "AtMostOnce_3")] + AtMostOnce = 3, + + /// + [EnumMember(Value = "ExactlyOnce_4")] + ExactlyOnce = 4, + } + + #region BrokerTransportQualityOfServiceCollection Class + /// + /// A collection of BrokerTransportQualityOfService objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrokerTransportQualityOfService", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrokerTransportQualityOfService")] + #if !NET_STANDARD + public partial class BrokerTransportQualityOfServiceCollection : List, ICloneable + #else + public partial class BrokerTransportQualityOfServiceCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrokerTransportQualityOfServiceCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrokerTransportQualityOfServiceCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrokerTransportQualityOfServiceCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrokerTransportQualityOfServiceCollection(BrokerTransportQualityOfService[] values) + { + if (values != null) + { + return new BrokerTransportQualityOfServiceCollection(values); + } + + return new BrokerTransportQualityOfServiceCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrokerTransportQualityOfService[](BrokerTransportQualityOfServiceCollection 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 (BrokerTransportQualityOfServiceCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrokerTransportQualityOfServiceCollection clone = new BrokerTransportQualityOfServiceCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrokerTransportQualityOfService)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrokerWriterGroupTransportDataType Class + #if (!OPCUA_EXCLUDE_BrokerWriterGroupTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrokerWriterGroupTransportDataType : WriterGroupTransportDataType + { + #region Constructors + /// + /// The default constructor. + /// + public BrokerWriterGroupTransportDataType() + { + 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_queueName = null; + m_resourceUri = null; + m_authenticationProfileUri = null; + m_requestedDeliveryGuarantee = BrokerTransportQualityOfService.NotSpecified; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "QueueName", IsRequired = false, Order = 1)] + public string QueueName + { + get { return m_queueName; } + set { m_queueName = value; } + } + + /// + [DataMember(Name = "ResourceUri", IsRequired = false, Order = 2)] + public string ResourceUri + { + get { return m_resourceUri; } + set { m_resourceUri = value; } + } + + /// + [DataMember(Name = "AuthenticationProfileUri", IsRequired = false, Order = 3)] + public string AuthenticationProfileUri + { + get { return m_authenticationProfileUri; } + set { m_authenticationProfileUri = value; } + } + + /// + [DataMember(Name = "RequestedDeliveryGuarantee", IsRequired = false, Order = 4)] + public BrokerTransportQualityOfService RequestedDeliveryGuarantee + { + get { return m_requestedDeliveryGuarantee; } + set { m_requestedDeliveryGuarantee = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.BrokerWriterGroupTransportDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrokerWriterGroupTransportDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrokerWriterGroupTransportDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("QueueName", QueueName); + encoder.WriteString("ResourceUri", ResourceUri); + encoder.WriteString("AuthenticationProfileUri", AuthenticationProfileUri); + encoder.WriteEnumerated("RequestedDeliveryGuarantee", RequestedDeliveryGuarantee); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + QueueName = decoder.ReadString("QueueName"); + ResourceUri = decoder.ReadString("ResourceUri"); + AuthenticationProfileUri = decoder.ReadString("AuthenticationProfileUri"); + RequestedDeliveryGuarantee = (BrokerTransportQualityOfService)decoder.ReadEnumerated("RequestedDeliveryGuarantee", typeof(BrokerTransportQualityOfService)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrokerWriterGroupTransportDataType value = encodeable as BrokerWriterGroupTransportDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_queueName, value.m_queueName)) return false; + if (!Utils.IsEqual(m_resourceUri, value.m_resourceUri)) return false; + if (!Utils.IsEqual(m_authenticationProfileUri, value.m_authenticationProfileUri)) return false; + if (!Utils.IsEqual(m_requestedDeliveryGuarantee, value.m_requestedDeliveryGuarantee)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (BrokerWriterGroupTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrokerWriterGroupTransportDataType clone = (BrokerWriterGroupTransportDataType)base.MemberwiseClone(); + + clone.m_queueName = (string)Utils.Clone(this.m_queueName); + clone.m_resourceUri = (string)Utils.Clone(this.m_resourceUri); + clone.m_authenticationProfileUri = (string)Utils.Clone(this.m_authenticationProfileUri); + clone.m_requestedDeliveryGuarantee = (BrokerTransportQualityOfService)Utils.Clone(this.m_requestedDeliveryGuarantee); + + return clone; + } + #endregion + + #region Private Fields + private string m_queueName; + private string m_resourceUri; + private string m_authenticationProfileUri; + private BrokerTransportQualityOfService m_requestedDeliveryGuarantee; + #endregion + } + + #region BrokerWriterGroupTransportDataTypeCollection Class + /// + /// A collection of BrokerWriterGroupTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrokerWriterGroupTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrokerWriterGroupTransportDataType")] + #if !NET_STANDARD + public partial class BrokerWriterGroupTransportDataTypeCollection : List, ICloneable + #else + public partial class BrokerWriterGroupTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrokerWriterGroupTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrokerWriterGroupTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrokerWriterGroupTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrokerWriterGroupTransportDataTypeCollection(BrokerWriterGroupTransportDataType[] values) + { + if (values != null) + { + return new BrokerWriterGroupTransportDataTypeCollection(values); + } + + return new BrokerWriterGroupTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrokerWriterGroupTransportDataType[](BrokerWriterGroupTransportDataTypeCollection 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 (BrokerWriterGroupTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrokerWriterGroupTransportDataTypeCollection clone = new BrokerWriterGroupTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrokerWriterGroupTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrokerDataSetWriterTransportDataType Class + #if (!OPCUA_EXCLUDE_BrokerDataSetWriterTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrokerDataSetWriterTransportDataType : DataSetWriterTransportDataType + { + #region Constructors + /// + /// The default constructor. + /// + public BrokerDataSetWriterTransportDataType() + { + 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_queueName = null; + m_resourceUri = null; + m_authenticationProfileUri = null; + m_requestedDeliveryGuarantee = BrokerTransportQualityOfService.NotSpecified; + m_metaDataQueueName = null; + m_metaDataUpdateTime = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "QueueName", IsRequired = false, Order = 1)] + public string QueueName + { + get { return m_queueName; } + set { m_queueName = value; } + } + + /// + [DataMember(Name = "ResourceUri", IsRequired = false, Order = 2)] + public string ResourceUri + { + get { return m_resourceUri; } + set { m_resourceUri = value; } + } + + /// + [DataMember(Name = "AuthenticationProfileUri", IsRequired = false, Order = 3)] + public string AuthenticationProfileUri + { + get { return m_authenticationProfileUri; } + set { m_authenticationProfileUri = value; } + } + + /// + [DataMember(Name = "RequestedDeliveryGuarantee", IsRequired = false, Order = 4)] + public BrokerTransportQualityOfService RequestedDeliveryGuarantee + { + get { return m_requestedDeliveryGuarantee; } + set { m_requestedDeliveryGuarantee = value; } + } + + /// + [DataMember(Name = "MetaDataQueueName", IsRequired = false, Order = 5)] + public string MetaDataQueueName + { + get { return m_metaDataQueueName; } + set { m_metaDataQueueName = value; } + } + + /// + [DataMember(Name = "MetaDataUpdateTime", IsRequired = false, Order = 6)] + public double MetaDataUpdateTime + { + get { return m_metaDataUpdateTime; } + set { m_metaDataUpdateTime = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.BrokerDataSetWriterTransportDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrokerDataSetWriterTransportDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("QueueName", QueueName); + encoder.WriteString("ResourceUri", ResourceUri); + encoder.WriteString("AuthenticationProfileUri", AuthenticationProfileUri); + encoder.WriteEnumerated("RequestedDeliveryGuarantee", RequestedDeliveryGuarantee); + encoder.WriteString("MetaDataQueueName", MetaDataQueueName); + encoder.WriteDouble("MetaDataUpdateTime", MetaDataUpdateTime); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + QueueName = decoder.ReadString("QueueName"); + ResourceUri = decoder.ReadString("ResourceUri"); + AuthenticationProfileUri = decoder.ReadString("AuthenticationProfileUri"); + RequestedDeliveryGuarantee = (BrokerTransportQualityOfService)decoder.ReadEnumerated("RequestedDeliveryGuarantee", typeof(BrokerTransportQualityOfService)); + MetaDataQueueName = decoder.ReadString("MetaDataQueueName"); + MetaDataUpdateTime = decoder.ReadDouble("MetaDataUpdateTime"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrokerDataSetWriterTransportDataType value = encodeable as BrokerDataSetWriterTransportDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_queueName, value.m_queueName)) return false; + if (!Utils.IsEqual(m_resourceUri, value.m_resourceUri)) return false; + if (!Utils.IsEqual(m_authenticationProfileUri, value.m_authenticationProfileUri)) return false; + if (!Utils.IsEqual(m_requestedDeliveryGuarantee, value.m_requestedDeliveryGuarantee)) return false; + if (!Utils.IsEqual(m_metaDataQueueName, value.m_metaDataQueueName)) return false; + if (!Utils.IsEqual(m_metaDataUpdateTime, value.m_metaDataUpdateTime)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (BrokerDataSetWriterTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrokerDataSetWriterTransportDataType clone = (BrokerDataSetWriterTransportDataType)base.MemberwiseClone(); + + clone.m_queueName = (string)Utils.Clone(this.m_queueName); + clone.m_resourceUri = (string)Utils.Clone(this.m_resourceUri); + clone.m_authenticationProfileUri = (string)Utils.Clone(this.m_authenticationProfileUri); + clone.m_requestedDeliveryGuarantee = (BrokerTransportQualityOfService)Utils.Clone(this.m_requestedDeliveryGuarantee); + clone.m_metaDataQueueName = (string)Utils.Clone(this.m_metaDataQueueName); + clone.m_metaDataUpdateTime = (double)Utils.Clone(this.m_metaDataUpdateTime); + + return clone; + } + #endregion + + #region Private Fields + private string m_queueName; + private string m_resourceUri; + private string m_authenticationProfileUri; + private BrokerTransportQualityOfService m_requestedDeliveryGuarantee; + private string m_metaDataQueueName; + private double m_metaDataUpdateTime; + #endregion + } + + #region BrokerDataSetWriterTransportDataTypeCollection Class + /// + /// A collection of BrokerDataSetWriterTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrokerDataSetWriterTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrokerDataSetWriterTransportDataType")] + #if !NET_STANDARD + public partial class BrokerDataSetWriterTransportDataTypeCollection : List, ICloneable + #else + public partial class BrokerDataSetWriterTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrokerDataSetWriterTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrokerDataSetWriterTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrokerDataSetWriterTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrokerDataSetWriterTransportDataTypeCollection(BrokerDataSetWriterTransportDataType[] values) + { + if (values != null) + { + return new BrokerDataSetWriterTransportDataTypeCollection(values); + } + + return new BrokerDataSetWriterTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrokerDataSetWriterTransportDataType[](BrokerDataSetWriterTransportDataTypeCollection 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 (BrokerDataSetWriterTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrokerDataSetWriterTransportDataTypeCollection clone = new BrokerDataSetWriterTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrokerDataSetWriterTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrokerDataSetReaderTransportDataType Class + #if (!OPCUA_EXCLUDE_BrokerDataSetReaderTransportDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrokerDataSetReaderTransportDataType : DataSetReaderTransportDataType + { + #region Constructors + /// + /// The default constructor. + /// + public BrokerDataSetReaderTransportDataType() + { + 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_queueName = null; + m_resourceUri = null; + m_authenticationProfileUri = null; + m_requestedDeliveryGuarantee = BrokerTransportQualityOfService.NotSpecified; + m_metaDataQueueName = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "QueueName", IsRequired = false, Order = 1)] + public string QueueName + { + get { return m_queueName; } + set { m_queueName = value; } + } + + /// + [DataMember(Name = "ResourceUri", IsRequired = false, Order = 2)] + public string ResourceUri + { + get { return m_resourceUri; } + set { m_resourceUri = value; } + } + + /// + [DataMember(Name = "AuthenticationProfileUri", IsRequired = false, Order = 3)] + public string AuthenticationProfileUri + { + get { return m_authenticationProfileUri; } + set { m_authenticationProfileUri = value; } + } + + /// + [DataMember(Name = "RequestedDeliveryGuarantee", IsRequired = false, Order = 4)] + public BrokerTransportQualityOfService RequestedDeliveryGuarantee + { + get { return m_requestedDeliveryGuarantee; } + set { m_requestedDeliveryGuarantee = value; } + } + + /// + [DataMember(Name = "MetaDataQueueName", IsRequired = false, Order = 5)] + public string MetaDataQueueName + { + get { return m_metaDataQueueName; } + set { m_metaDataQueueName = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.BrokerDataSetReaderTransportDataType; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrokerDataSetReaderTransportDataType_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("QueueName", QueueName); + encoder.WriteString("ResourceUri", ResourceUri); + encoder.WriteString("AuthenticationProfileUri", AuthenticationProfileUri); + encoder.WriteEnumerated("RequestedDeliveryGuarantee", RequestedDeliveryGuarantee); + encoder.WriteString("MetaDataQueueName", MetaDataQueueName); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + QueueName = decoder.ReadString("QueueName"); + ResourceUri = decoder.ReadString("ResourceUri"); + AuthenticationProfileUri = decoder.ReadString("AuthenticationProfileUri"); + RequestedDeliveryGuarantee = (BrokerTransportQualityOfService)decoder.ReadEnumerated("RequestedDeliveryGuarantee", typeof(BrokerTransportQualityOfService)); + MetaDataQueueName = decoder.ReadString("MetaDataQueueName"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrokerDataSetReaderTransportDataType value = encodeable as BrokerDataSetReaderTransportDataType; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_queueName, value.m_queueName)) return false; + if (!Utils.IsEqual(m_resourceUri, value.m_resourceUri)) return false; + if (!Utils.IsEqual(m_authenticationProfileUri, value.m_authenticationProfileUri)) return false; + if (!Utils.IsEqual(m_requestedDeliveryGuarantee, value.m_requestedDeliveryGuarantee)) return false; + if (!Utils.IsEqual(m_metaDataQueueName, value.m_metaDataQueueName)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (BrokerDataSetReaderTransportDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrokerDataSetReaderTransportDataType clone = (BrokerDataSetReaderTransportDataType)base.MemberwiseClone(); + + clone.m_queueName = (string)Utils.Clone(this.m_queueName); + clone.m_resourceUri = (string)Utils.Clone(this.m_resourceUri); + clone.m_authenticationProfileUri = (string)Utils.Clone(this.m_authenticationProfileUri); + clone.m_requestedDeliveryGuarantee = (BrokerTransportQualityOfService)Utils.Clone(this.m_requestedDeliveryGuarantee); + clone.m_metaDataQueueName = (string)Utils.Clone(this.m_metaDataQueueName); + + return clone; + } + #endregion + + #region Private Fields + private string m_queueName; + private string m_resourceUri; + private string m_authenticationProfileUri; + private BrokerTransportQualityOfService m_requestedDeliveryGuarantee; + private string m_metaDataQueueName; + #endregion + } + + #region BrokerDataSetReaderTransportDataTypeCollection Class + /// + /// A collection of BrokerDataSetReaderTransportDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrokerDataSetReaderTransportDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrokerDataSetReaderTransportDataType")] + #if !NET_STANDARD + public partial class BrokerDataSetReaderTransportDataTypeCollection : List, ICloneable + #else + public partial class BrokerDataSetReaderTransportDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrokerDataSetReaderTransportDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrokerDataSetReaderTransportDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrokerDataSetReaderTransportDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrokerDataSetReaderTransportDataTypeCollection(BrokerDataSetReaderTransportDataType[] values) + { + if (values != null) + { + return new BrokerDataSetReaderTransportDataTypeCollection(values); + } + + return new BrokerDataSetReaderTransportDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrokerDataSetReaderTransportDataType[](BrokerDataSetReaderTransportDataTypeCollection 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 (BrokerDataSetReaderTransportDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrokerDataSetReaderTransportDataTypeCollection clone = new BrokerDataSetReaderTransportDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrokerDataSetReaderTransportDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DiagnosticsLevel Enumeration + #if (!OPCUA_EXCLUDE_DiagnosticsLevel) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum DiagnosticsLevel + { + /// + [EnumMember(Value = "Basic_0")] + Basic = 0, + + /// + [EnumMember(Value = "Advanced_1")] + Advanced = 1, + + /// + [EnumMember(Value = "Info_2")] + Info = 2, + + /// + [EnumMember(Value = "Log_3")] + Log = 3, + + /// + [EnumMember(Value = "Debug_4")] + Debug = 4, + } + + #region DiagnosticsLevelCollection Class + /// + /// A collection of DiagnosticsLevel objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDiagnosticsLevel", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DiagnosticsLevel")] + #if !NET_STANDARD + public partial class DiagnosticsLevelCollection : List, ICloneable + #else + public partial class DiagnosticsLevelCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DiagnosticsLevelCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DiagnosticsLevelCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DiagnosticsLevelCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DiagnosticsLevelCollection(DiagnosticsLevel[] values) + { + if (values != null) + { + return new DiagnosticsLevelCollection(values); + } + + return new DiagnosticsLevelCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DiagnosticsLevel[](DiagnosticsLevelCollection 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 (DiagnosticsLevelCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DiagnosticsLevelCollection clone = new DiagnosticsLevelCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DiagnosticsLevel)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PubSubDiagnosticsCounterClassification Enumeration + #if (!OPCUA_EXCLUDE_PubSubDiagnosticsCounterClassification) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum PubSubDiagnosticsCounterClassification + { + /// + [EnumMember(Value = "Information_0")] + Information = 0, + + /// + [EnumMember(Value = "Error_1")] + Error = 1, + } + + #region PubSubDiagnosticsCounterClassificationCollection Class + /// + /// A collection of PubSubDiagnosticsCounterClassification objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfPubSubDiagnosticsCounterClassification", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "PubSubDiagnosticsCounterClassification")] + #if !NET_STANDARD + public partial class PubSubDiagnosticsCounterClassificationCollection : List, ICloneable + #else + public partial class PubSubDiagnosticsCounterClassificationCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public PubSubDiagnosticsCounterClassificationCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public PubSubDiagnosticsCounterClassificationCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public PubSubDiagnosticsCounterClassificationCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator PubSubDiagnosticsCounterClassificationCollection(PubSubDiagnosticsCounterClassification[] values) + { + if (values != null) + { + return new PubSubDiagnosticsCounterClassificationCollection(values); + } + + return new PubSubDiagnosticsCounterClassificationCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator PubSubDiagnosticsCounterClassification[](PubSubDiagnosticsCounterClassificationCollection 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 (PubSubDiagnosticsCounterClassificationCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + PubSubDiagnosticsCounterClassificationCollection clone = new PubSubDiagnosticsCounterClassificationCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((PubSubDiagnosticsCounterClassification)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region AliasNameDataType Class + #if (!OPCUA_EXCLUDE_AliasNameDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AliasNameDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AliasNameDataType() + { + 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_aliasName = null; + m_referencedNodes = new ExpandedNodeIdCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "AliasName", IsRequired = false, Order = 1)] + public QualifiedName AliasName + { + get { return m_aliasName; } + set { m_aliasName = value; } + } + + /// + /// + /// + [DataMember(Name = "ReferencedNodes", IsRequired = false, Order = 2)] + public ExpandedNodeIdCollection ReferencedNodes + { + get + { + return m_referencedNodes; + } + + set + { + m_referencedNodes = value; + + if (value == null) + { + m_referencedNodes = new ExpandedNodeIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AliasNameDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AliasNameDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AliasNameDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteQualifiedName("AliasName", AliasName); + encoder.WriteExpandedNodeIdArray("ReferencedNodes", ReferencedNodes); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + AliasName = decoder.ReadQualifiedName("AliasName"); + ReferencedNodes = decoder.ReadExpandedNodeIdArray("ReferencedNodes"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AliasNameDataType value = encodeable as AliasNameDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_aliasName, value.m_aliasName)) return false; + if (!Utils.IsEqual(m_referencedNodes, value.m_referencedNodes)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AliasNameDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AliasNameDataType clone = (AliasNameDataType)base.MemberwiseClone(); + + clone.m_aliasName = (QualifiedName)Utils.Clone(this.m_aliasName); + clone.m_referencedNodes = (ExpandedNodeIdCollection)Utils.Clone(this.m_referencedNodes); + + return clone; + } + #endregion + + #region Private Fields + private QualifiedName m_aliasName; + private ExpandedNodeIdCollection m_referencedNodes; + #endregion + } + + #region AliasNameDataTypeCollection Class + /// + /// A collection of AliasNameDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfAliasNameDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "AliasNameDataType")] + #if !NET_STANDARD + public partial class AliasNameDataTypeCollection : List, ICloneable + #else + public partial class AliasNameDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public AliasNameDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public AliasNameDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public AliasNameDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator AliasNameDataTypeCollection(AliasNameDataType[] values) + { + if (values != null) + { + return new AliasNameDataTypeCollection(values); + } + + return new AliasNameDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator AliasNameDataType[](AliasNameDataTypeCollection 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 (AliasNameDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + AliasNameDataTypeCollection clone = new AliasNameDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((AliasNameDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region IdType Enumeration + #if (!OPCUA_EXCLUDE_IdType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum IdType + { + /// + [EnumMember(Value = "Numeric_0")] + Numeric = 0, + + /// + [EnumMember(Value = "String_1")] + String = 1, + + /// + [EnumMember(Value = "Guid_2")] + Guid = 2, + + /// + [EnumMember(Value = "Opaque_3")] + Opaque = 3, + } + + #region IdTypeCollection Class + /// + /// A collection of IdType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfIdType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "IdType")] + #if !NET_STANDARD + public partial class IdTypeCollection : List, ICloneable + #else + public partial class IdTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public IdTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public IdTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public IdTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator IdTypeCollection(IdType[] values) + { + if (values != null) + { + return new IdTypeCollection(values); + } + + return new IdTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator IdType[](IdTypeCollection 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 (IdTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + IdTypeCollection clone = new IdTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((IdType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NodeClass Enumeration + #if (!OPCUA_EXCLUDE_NodeClass) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum NodeClass + { + /// + [EnumMember(Value = "Unspecified_0")] + Unspecified = 0, + + /// + [EnumMember(Value = "Object_1")] + Object = 1, + + /// + [EnumMember(Value = "Variable_2")] + Variable = 2, + + /// + [EnumMember(Value = "Method_4")] + Method = 4, + + /// + [EnumMember(Value = "ObjectType_8")] + ObjectType = 8, + + /// + [EnumMember(Value = "VariableType_16")] + VariableType = 16, + + /// + [EnumMember(Value = "ReferenceType_32")] + ReferenceType = 32, + + /// + [EnumMember(Value = "DataType_64")] + DataType = 64, + + /// + [EnumMember(Value = "View_128")] + View = 128, + } + #endif + #endregion + + #region PermissionType Enumeration + #if (!OPCUA_EXCLUDE_PermissionType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum PermissionType : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "Browse_1")] + Browse = 1, + + /// + [EnumMember(Value = "ReadRolePermissions_2")] + ReadRolePermissions = 2, + + /// + [EnumMember(Value = "WriteAttribute_4")] + WriteAttribute = 4, + + /// + [EnumMember(Value = "WriteRolePermissions_8")] + WriteRolePermissions = 8, + + /// + [EnumMember(Value = "WriteHistorizing_16")] + WriteHistorizing = 16, + + /// + [EnumMember(Value = "Read_32")] + Read = 32, + + /// + [EnumMember(Value = "Write_64")] + Write = 64, + + /// + [EnumMember(Value = "ReadHistory_128")] + ReadHistory = 128, + + /// + [EnumMember(Value = "InsertHistory_256")] + InsertHistory = 256, + + /// + [EnumMember(Value = "ModifyHistory_512")] + ModifyHistory = 512, + + /// + [EnumMember(Value = "DeleteHistory_1024")] + DeleteHistory = 1024, + + /// + [EnumMember(Value = "ReceiveEvents_2048")] + ReceiveEvents = 2048, + + /// + [EnumMember(Value = "Call_4096")] + Call = 4096, + + /// + [EnumMember(Value = "AddReference_8192")] + AddReference = 8192, + + /// + [EnumMember(Value = "RemoveReference_16384")] + RemoveReference = 16384, + + /// + [EnumMember(Value = "DeleteNode_32768")] + DeleteNode = 32768, + + /// + [EnumMember(Value = "AddNode_65536")] + AddNode = 65536, + } + #endif + #endregion + + #region AccessLevelType Enumeration + #if (!OPCUA_EXCLUDE_AccessLevelType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum AccessLevelType : Byte + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "CurrentRead_1")] + CurrentRead = 1, + + /// + [EnumMember(Value = "CurrentWrite_2")] + CurrentWrite = 2, + + /// + [EnumMember(Value = "HistoryRead_4")] + HistoryRead = 4, + + /// + [EnumMember(Value = "HistoryWrite_8")] + HistoryWrite = 8, + + /// + [EnumMember(Value = "SemanticChange_16")] + SemanticChange = 16, + + /// + [EnumMember(Value = "StatusWrite_32")] + StatusWrite = 32, + + /// + [EnumMember(Value = "TimestampWrite_64")] + TimestampWrite = 64, + } + #endif + #endregion + + #region AccessLevelExType Enumeration + #if (!OPCUA_EXCLUDE_AccessLevelExType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum AccessLevelExType : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "CurrentRead_1")] + CurrentRead = 1, + + /// + [EnumMember(Value = "CurrentWrite_2")] + CurrentWrite = 2, + + /// + [EnumMember(Value = "HistoryRead_4")] + HistoryRead = 4, + + /// + [EnumMember(Value = "HistoryWrite_8")] + HistoryWrite = 8, + + /// + [EnumMember(Value = "SemanticChange_16")] + SemanticChange = 16, + + /// + [EnumMember(Value = "StatusWrite_32")] + StatusWrite = 32, + + /// + [EnumMember(Value = "TimestampWrite_64")] + TimestampWrite = 64, + + /// + [EnumMember(Value = "NonatomicRead_256")] + NonatomicRead = 256, + + /// + [EnumMember(Value = "NonatomicWrite_512")] + NonatomicWrite = 512, + + /// + [EnumMember(Value = "WriteFullArrayOnly_1024")] + WriteFullArrayOnly = 1024, + } + #endif + #endregion + + #region EventNotifierType Enumeration + #if (!OPCUA_EXCLUDE_EventNotifierType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum EventNotifierType : Byte + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "SubscribeToEvents_1")] + SubscribeToEvents = 1, + + /// + [EnumMember(Value = "HistoryRead_4")] + HistoryRead = 4, + + /// + [EnumMember(Value = "HistoryWrite_8")] + HistoryWrite = 8, + } + #endif + #endregion + + #region AccessRestrictionType Enumeration + #if (!OPCUA_EXCLUDE_AccessRestrictionType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + public enum AccessRestrictionType : UInt32 + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "SigningRequired_1")] + SigningRequired = 1, + + /// + [EnumMember(Value = "EncryptionRequired_2")] + EncryptionRequired = 2, + + /// + [EnumMember(Value = "SessionRequired_4")] + SessionRequired = 4, + } + #endif + #endregion + + #region RolePermissionType Class + #if (!OPCUA_EXCLUDE_RolePermissionType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RolePermissionType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RolePermissionType() + { + 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_roleId = null; + m_permissions = 0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "RoleId", IsRequired = false, Order = 1)] + public NodeId RoleId + { + get { return m_roleId; } + set { m_roleId = value; } + } + + /// + [DataMember(Name = "Permissions", IsRequired = false, Order = 2)] + public uint Permissions + { + get { return m_permissions; } + set { m_permissions = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RolePermissionType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RolePermissionType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RolePermissionType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("RoleId", RoleId); + encoder.WriteUInt32("Permissions", Permissions); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RoleId = decoder.ReadNodeId("RoleId"); + Permissions = decoder.ReadUInt32("Permissions"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RolePermissionType value = encodeable as RolePermissionType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_roleId, value.m_roleId)) return false; + if (!Utils.IsEqual(m_permissions, value.m_permissions)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RolePermissionType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RolePermissionType clone = (RolePermissionType)base.MemberwiseClone(); + + clone.m_roleId = (NodeId)Utils.Clone(this.m_roleId); + clone.m_permissions = (uint)Utils.Clone(this.m_permissions); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_roleId; + private uint m_permissions; + #endregion + } + + #region RolePermissionTypeCollection Class + /// + /// A collection of RolePermissionType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfRolePermissionType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "RolePermissionType")] + #if !NET_STANDARD + public partial class RolePermissionTypeCollection : List, ICloneable + #else + public partial class RolePermissionTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public RolePermissionTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public RolePermissionTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public RolePermissionTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator RolePermissionTypeCollection(RolePermissionType[] values) + { + if (values != null) + { + return new RolePermissionTypeCollection(values); + } + + return new RolePermissionTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator RolePermissionType[](RolePermissionTypeCollection 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 (RolePermissionTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + RolePermissionTypeCollection clone = new RolePermissionTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((RolePermissionType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DataTypeDefinition Class + #if (!OPCUA_EXCLUDE_DataTypeDefinition) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataTypeDefinition : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DataTypeDefinition() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DataTypeDefinition; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataTypeDefinition_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataTypeDefinition_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataTypeDefinition value = encodeable as DataTypeDefinition; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DataTypeDefinition)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataTypeDefinition clone = (DataTypeDefinition)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region DataTypeDefinitionCollection Class + /// + /// A collection of DataTypeDefinition objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDataTypeDefinition", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DataTypeDefinition")] + #if !NET_STANDARD + public partial class DataTypeDefinitionCollection : List, ICloneable + #else + public partial class DataTypeDefinitionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DataTypeDefinitionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DataTypeDefinitionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DataTypeDefinitionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DataTypeDefinitionCollection(DataTypeDefinition[] values) + { + if (values != null) + { + return new DataTypeDefinitionCollection(values); + } + + return new DataTypeDefinitionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DataTypeDefinition[](DataTypeDefinitionCollection 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 (DataTypeDefinitionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DataTypeDefinitionCollection clone = new DataTypeDefinitionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DataTypeDefinition)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region StructureType Enumeration + #if (!OPCUA_EXCLUDE_StructureType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum StructureType + { + /// + [EnumMember(Value = "Structure_0")] + Structure = 0, + + /// + [EnumMember(Value = "StructureWithOptionalFields_1")] + StructureWithOptionalFields = 1, + + /// + [EnumMember(Value = "Union_2")] + Union = 2, + } + #endif + #endregion + + #region StructureField Class + #if (!OPCUA_EXCLUDE_StructureField) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class StructureField : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public StructureField() + { + 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_name = null; + m_description = null; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_maxStringLength = (uint)0; + m_isOptional = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 2)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 3)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 4)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 5)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "MaxStringLength", IsRequired = false, Order = 6)] + public uint MaxStringLength + { + get { return m_maxStringLength; } + set { m_maxStringLength = value; } + } + + /// + [DataMember(Name = "IsOptional", IsRequired = false, Order = 7)] + public bool IsOptional + { + get { return m_isOptional; } + set { m_isOptional = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.StructureField; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.StructureField_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.StructureField_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteLocalizedText("Description", Description); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteUInt32("MaxStringLength", MaxStringLength); + encoder.WriteBoolean("IsOptional", IsOptional); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + Description = decoder.ReadLocalizedText("Description"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + MaxStringLength = decoder.ReadUInt32("MaxStringLength"); + IsOptional = decoder.ReadBoolean("IsOptional"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + StructureField value = encodeable as StructureField; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_maxStringLength, value.m_maxStringLength)) return false; + if (!Utils.IsEqual(m_isOptional, value.m_isOptional)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (StructureField)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + StructureField clone = (StructureField)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_maxStringLength = (uint)Utils.Clone(this.m_maxStringLength); + clone.m_isOptional = (bool)Utils.Clone(this.m_isOptional); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private LocalizedText m_description; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private uint m_maxStringLength; + private bool m_isOptional; + #endregion + } + + #region StructureFieldCollection Class + /// + /// A collection of StructureField objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfStructureField", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "StructureField")] + #if !NET_STANDARD + public partial class StructureFieldCollection : List, ICloneable + #else + public partial class StructureFieldCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public StructureFieldCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public StructureFieldCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public StructureFieldCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator StructureFieldCollection(StructureField[] values) + { + if (values != null) + { + return new StructureFieldCollection(values); + } + + return new StructureFieldCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator StructureField[](StructureFieldCollection 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 (StructureFieldCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + StructureFieldCollection clone = new StructureFieldCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((StructureField)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region StructureDefinition Class + #if (!OPCUA_EXCLUDE_StructureDefinition) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class StructureDefinition : DataTypeDefinition + { + #region Constructors + /// + /// The default constructor. + /// + public StructureDefinition() + { + 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_defaultEncodingId = null; + m_baseDataType = null; + m_structureType = StructureType.Structure; + m_fields = new StructureFieldCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "DefaultEncodingId", IsRequired = false, Order = 1)] + public NodeId DefaultEncodingId + { + get { return m_defaultEncodingId; } + set { m_defaultEncodingId = value; } + } + + /// + [DataMember(Name = "BaseDataType", IsRequired = false, Order = 2)] + public NodeId BaseDataType + { + get { return m_baseDataType; } + set { m_baseDataType = value; } + } + + /// + [DataMember(Name = "StructureType", IsRequired = false, Order = 3)] + public StructureType StructureType + { + get { return m_structureType; } + set { m_structureType = value; } + } + + /// + /// + /// + [DataMember(Name = "Fields", IsRequired = false, Order = 4)] + public StructureFieldCollection Fields + { + get + { + return m_fields; + } + + set + { + m_fields = value; + + if (value == null) + { + m_fields = new StructureFieldCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.StructureDefinition; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.StructureDefinition_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.StructureDefinition_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("DefaultEncodingId", DefaultEncodingId); + encoder.WriteNodeId("BaseDataType", BaseDataType); + encoder.WriteEnumerated("StructureType", StructureType); + encoder.WriteEncodeableArray("Fields", Fields.ToArray(), typeof(StructureField)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DefaultEncodingId = decoder.ReadNodeId("DefaultEncodingId"); + BaseDataType = decoder.ReadNodeId("BaseDataType"); + StructureType = (StructureType)decoder.ReadEnumerated("StructureType", typeof(StructureType)); + Fields = (StructureFieldCollection)decoder.ReadEncodeableArray("Fields", typeof(StructureField)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + StructureDefinition value = encodeable as StructureDefinition; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_defaultEncodingId, value.m_defaultEncodingId)) return false; + if (!Utils.IsEqual(m_baseDataType, value.m_baseDataType)) return false; + if (!Utils.IsEqual(m_structureType, value.m_structureType)) return false; + if (!Utils.IsEqual(m_fields, value.m_fields)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (StructureDefinition)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + StructureDefinition clone = (StructureDefinition)base.MemberwiseClone(); + + clone.m_defaultEncodingId = (NodeId)Utils.Clone(this.m_defaultEncodingId); + clone.m_baseDataType = (NodeId)Utils.Clone(this.m_baseDataType); + clone.m_structureType = (StructureType)Utils.Clone(this.m_structureType); + clone.m_fields = (StructureFieldCollection)Utils.Clone(this.m_fields); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_defaultEncodingId; + private NodeId m_baseDataType; + private StructureType m_structureType; + private StructureFieldCollection m_fields; + #endregion + } + + #region StructureDefinitionCollection Class + /// + /// A collection of StructureDefinition objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfStructureDefinition", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "StructureDefinition")] + #if !NET_STANDARD + public partial class StructureDefinitionCollection : List, ICloneable + #else + public partial class StructureDefinitionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public StructureDefinitionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public StructureDefinitionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public StructureDefinitionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator StructureDefinitionCollection(StructureDefinition[] values) + { + if (values != null) + { + return new StructureDefinitionCollection(values); + } + + return new StructureDefinitionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator StructureDefinition[](StructureDefinitionCollection 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 (StructureDefinitionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + StructureDefinitionCollection clone = new StructureDefinitionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((StructureDefinition)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EnumDefinition Class + #if (!OPCUA_EXCLUDE_EnumDefinition) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EnumDefinition : DataTypeDefinition + { + #region Constructors + /// + /// The default constructor. + /// + public EnumDefinition() + { + 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_fields = new EnumFieldCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "Fields", IsRequired = false, Order = 1)] + public EnumFieldCollection Fields + { + get + { + return m_fields; + } + + set + { + m_fields = value; + + if (value == null) + { + m_fields = new EnumFieldCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.EnumDefinition; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EnumDefinition_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EnumDefinition_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("Fields", Fields.ToArray(), typeof(EnumField)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Fields = (EnumFieldCollection)decoder.ReadEncodeableArray("Fields", typeof(EnumField)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EnumDefinition value = encodeable as EnumDefinition; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_fields, value.m_fields)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (EnumDefinition)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EnumDefinition clone = (EnumDefinition)base.MemberwiseClone(); + + clone.m_fields = (EnumFieldCollection)Utils.Clone(this.m_fields); + + return clone; + } + #endregion + + #region Private Fields + private EnumFieldCollection m_fields; + #endregion + } + + #region EnumDefinitionCollection Class + /// + /// A collection of EnumDefinition objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEnumDefinition", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EnumDefinition")] + #if !NET_STANDARD + public partial class EnumDefinitionCollection : List, ICloneable + #else + public partial class EnumDefinitionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EnumDefinitionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EnumDefinitionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EnumDefinitionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EnumDefinitionCollection(EnumDefinition[] values) + { + if (values != null) + { + return new EnumDefinitionCollection(values); + } + + return new EnumDefinitionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EnumDefinition[](EnumDefinitionCollection 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 (EnumDefinitionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EnumDefinitionCollection clone = new EnumDefinitionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EnumDefinition)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Node Class + #if (!OPCUA_EXCLUDE_Node) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Node : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Node() + { + 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_nodeId = null; + m_nodeClass = NodeClass.Unspecified; + m_browseName = null; + m_displayName = null; + m_description = null; + m_writeMask = (uint)0; + m_userWriteMask = (uint)0; + m_rolePermissions = new RolePermissionTypeCollection(); + m_userRolePermissions = new RolePermissionTypeCollection(); + m_accessRestrictions = (ushort)0; + m_references = new ReferenceNodeCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "NodeClass", IsRequired = false, Order = 2)] + public NodeClass NodeClass + { + get { return m_nodeClass; } + set { m_nodeClass = value; } + } + + /// + [DataMember(Name = "BrowseName", IsRequired = false, Order = 3)] + public QualifiedName BrowseName + { + get { return m_browseName; } + set { m_browseName = value; } + } + + /// + [DataMember(Name = "DisplayName", IsRequired = false, Order = 4)] + public LocalizedText DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 5)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + + /// + [DataMember(Name = "WriteMask", IsRequired = false, Order = 6)] + public uint WriteMask + { + get { return m_writeMask; } + set { m_writeMask = value; } + } + + /// + [DataMember(Name = "UserWriteMask", IsRequired = false, Order = 7)] + public uint UserWriteMask + { + get { return m_userWriteMask; } + set { m_userWriteMask = value; } + } + + /// + /// + /// + [DataMember(Name = "RolePermissions", IsRequired = false, Order = 8)] + public RolePermissionTypeCollection RolePermissions + { + get + { + return m_rolePermissions; + } + + set + { + m_rolePermissions = value; + + if (value == null) + { + m_rolePermissions = new RolePermissionTypeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "UserRolePermissions", IsRequired = false, Order = 9)] + public RolePermissionTypeCollection UserRolePermissions + { + get + { + return m_userRolePermissions; + } + + set + { + m_userRolePermissions = value; + + if (value == null) + { + m_userRolePermissions = new RolePermissionTypeCollection(); + } + } + } + + /// + [DataMember(Name = "AccessRestrictions", IsRequired = false, Order = 10)] + public ushort AccessRestrictions + { + get { return m_accessRestrictions; } + set { m_accessRestrictions = value; } + } + + /// + /// + /// + [DataMember(Name = "References", IsRequired = false, Order = 11)] + public ReferenceNodeCollection References + { + get + { + return m_references; + } + + set + { + m_references = value; + + if (value == null) + { + m_references = new ReferenceNodeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Node; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Node_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Node_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteEnumerated("NodeClass", NodeClass); + encoder.WriteQualifiedName("BrowseName", BrowseName); + encoder.WriteLocalizedText("DisplayName", DisplayName); + encoder.WriteLocalizedText("Description", Description); + encoder.WriteUInt32("WriteMask", WriteMask); + encoder.WriteUInt32("UserWriteMask", UserWriteMask); + encoder.WriteEncodeableArray("RolePermissions", RolePermissions.ToArray(), typeof(RolePermissionType)); + encoder.WriteEncodeableArray("UserRolePermissions", UserRolePermissions.ToArray(), typeof(RolePermissionType)); + encoder.WriteUInt16("AccessRestrictions", AccessRestrictions); + encoder.WriteEncodeableArray("References", References.ToArray(), typeof(ReferenceNode)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + NodeClass = (NodeClass)decoder.ReadEnumerated("NodeClass", typeof(NodeClass)); + BrowseName = decoder.ReadQualifiedName("BrowseName"); + DisplayName = decoder.ReadLocalizedText("DisplayName"); + Description = decoder.ReadLocalizedText("Description"); + WriteMask = decoder.ReadUInt32("WriteMask"); + UserWriteMask = decoder.ReadUInt32("UserWriteMask"); + RolePermissions = (RolePermissionTypeCollection)decoder.ReadEncodeableArray("RolePermissions", typeof(RolePermissionType)); + UserRolePermissions = (RolePermissionTypeCollection)decoder.ReadEncodeableArray("UserRolePermissions", typeof(RolePermissionType)); + AccessRestrictions = decoder.ReadUInt16("AccessRestrictions"); + References = (ReferenceNodeCollection)decoder.ReadEncodeableArray("References", typeof(ReferenceNode)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Node value = encodeable as Node; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_nodeClass, value.m_nodeClass)) return false; + if (!Utils.IsEqual(m_browseName, value.m_browseName)) return false; + if (!Utils.IsEqual(m_displayName, value.m_displayName)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + if (!Utils.IsEqual(m_writeMask, value.m_writeMask)) return false; + if (!Utils.IsEqual(m_userWriteMask, value.m_userWriteMask)) return false; + if (!Utils.IsEqual(m_rolePermissions, value.m_rolePermissions)) return false; + if (!Utils.IsEqual(m_userRolePermissions, value.m_userRolePermissions)) return false; + if (!Utils.IsEqual(m_accessRestrictions, value.m_accessRestrictions)) return false; + if (!Utils.IsEqual(m_references, value.m_references)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Node)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Node clone = (Node)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_nodeClass = (NodeClass)Utils.Clone(this.m_nodeClass); + clone.m_browseName = (QualifiedName)Utils.Clone(this.m_browseName); + clone.m_displayName = (LocalizedText)Utils.Clone(this.m_displayName); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + clone.m_writeMask = (uint)Utils.Clone(this.m_writeMask); + clone.m_userWriteMask = (uint)Utils.Clone(this.m_userWriteMask); + clone.m_rolePermissions = (RolePermissionTypeCollection)Utils.Clone(this.m_rolePermissions); + clone.m_userRolePermissions = (RolePermissionTypeCollection)Utils.Clone(this.m_userRolePermissions); + clone.m_accessRestrictions = (ushort)Utils.Clone(this.m_accessRestrictions); + clone.m_references = (ReferenceNodeCollection)Utils.Clone(this.m_references); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private NodeClass m_nodeClass; + private QualifiedName m_browseName; + private LocalizedText m_displayName; + private LocalizedText m_description; + private uint m_writeMask; + private uint m_userWriteMask; + private RolePermissionTypeCollection m_rolePermissions; + private RolePermissionTypeCollection m_userRolePermissions; + private ushort m_accessRestrictions; + private ReferenceNodeCollection m_references; + #endregion + } + + #region NodeCollection Class + /// + /// A collection of Node objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNode", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Node")] + #if !NET_STANDARD + public partial class NodeCollection : List, ICloneable + #else + public partial class NodeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NodeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NodeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NodeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NodeCollection(Node[] values) + { + if (values != null) + { + return new NodeCollection(values); + } + + return new NodeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Node[](NodeCollection 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 (NodeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NodeCollection clone = new NodeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Node)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region InstanceNode Class + #if (!OPCUA_EXCLUDE_InstanceNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class InstanceNode : Node + { + #region Constructors + /// + /// The default constructor. + /// + public InstanceNode() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.InstanceNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.InstanceNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.InstanceNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + InstanceNode value = encodeable as InstanceNode; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (InstanceNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + InstanceNode clone = (InstanceNode)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region TypeNode Class + #if (!OPCUA_EXCLUDE_TypeNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TypeNode : Node + { + #region Constructors + /// + /// The default constructor. + /// + public TypeNode() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.TypeNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TypeNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TypeNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TypeNode value = encodeable as TypeNode; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (TypeNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TypeNode clone = (TypeNode)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ObjectNode Class + #if (!OPCUA_EXCLUDE_ObjectNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ObjectNode : InstanceNode + { + #region Constructors + /// + /// The default constructor. + /// + public ObjectNode() + { + 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_eventNotifier = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "EventNotifier", IsRequired = false, Order = 1)] + public byte EventNotifier + { + get { return m_eventNotifier; } + set { m_eventNotifier = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ObjectNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ObjectNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ObjectNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByte("EventNotifier", EventNotifier); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EventNotifier = decoder.ReadByte("EventNotifier"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ObjectNode value = encodeable as ObjectNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_eventNotifier, value.m_eventNotifier)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ObjectNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ObjectNode clone = (ObjectNode)base.MemberwiseClone(); + + clone.m_eventNotifier = (byte)Utils.Clone(this.m_eventNotifier); + + return clone; + } + #endregion + + #region Private Fields + private byte m_eventNotifier; + #endregion + } + #endif + #endregion + + #region ObjectTypeNode Class + #if (!OPCUA_EXCLUDE_ObjectTypeNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ObjectTypeNode : TypeNode + { + #region Constructors + /// + /// The default constructor. + /// + public ObjectTypeNode() + { + 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_isAbstract = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 1)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ObjectTypeNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ObjectTypeNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ObjectTypeNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsAbstract", IsAbstract); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsAbstract = decoder.ReadBoolean("IsAbstract"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ObjectTypeNode value = encodeable as ObjectTypeNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ObjectTypeNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ObjectTypeNode clone = (ObjectTypeNode)base.MemberwiseClone(); + + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isAbstract; + #endregion + } + #endif + #endregion + + #region VariableNode Class + #if (!OPCUA_EXCLUDE_VariableNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class VariableNode : InstanceNode + { + #region Constructors + /// + /// The default constructor. + /// + public VariableNode() + { + 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_value = Variant.Null; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_accessLevel = (byte)0; + m_userAccessLevel = (byte)0; + m_minimumSamplingInterval = (double)0; + m_historizing = true; + m_accessLevelEx = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 2)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 3)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 4)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "AccessLevel", IsRequired = false, Order = 5)] + public byte AccessLevel + { + get { return m_accessLevel; } + set { m_accessLevel = value; } + } + + /// + [DataMember(Name = "UserAccessLevel", IsRequired = false, Order = 6)] + public byte UserAccessLevel + { + get { return m_userAccessLevel; } + set { m_userAccessLevel = value; } + } + + /// + [DataMember(Name = "MinimumSamplingInterval", IsRequired = false, Order = 7)] + public double MinimumSamplingInterval + { + get { return m_minimumSamplingInterval; } + set { m_minimumSamplingInterval = value; } + } + + /// + [DataMember(Name = "Historizing", IsRequired = false, Order = 8)] + public bool Historizing + { + get { return m_historizing; } + set { m_historizing = value; } + } + + /// + [DataMember(Name = "AccessLevelEx", IsRequired = false, Order = 9)] + public uint AccessLevelEx + { + get { return m_accessLevelEx; } + set { m_accessLevelEx = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.VariableNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.VariableNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.VariableNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteVariant("Value", Value); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteByte("AccessLevel", AccessLevel); + encoder.WriteByte("UserAccessLevel", UserAccessLevel); + encoder.WriteDouble("MinimumSamplingInterval", MinimumSamplingInterval); + encoder.WriteBoolean("Historizing", Historizing); + encoder.WriteUInt32("AccessLevelEx", AccessLevelEx); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadVariant("Value"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + AccessLevel = decoder.ReadByte("AccessLevel"); + UserAccessLevel = decoder.ReadByte("UserAccessLevel"); + MinimumSamplingInterval = decoder.ReadDouble("MinimumSamplingInterval"); + Historizing = decoder.ReadBoolean("Historizing"); + AccessLevelEx = decoder.ReadUInt32("AccessLevelEx"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + VariableNode value = encodeable as VariableNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_accessLevel, value.m_accessLevel)) return false; + if (!Utils.IsEqual(m_userAccessLevel, value.m_userAccessLevel)) return false; + if (!Utils.IsEqual(m_minimumSamplingInterval, value.m_minimumSamplingInterval)) return false; + if (!Utils.IsEqual(m_historizing, value.m_historizing)) return false; + if (!Utils.IsEqual(m_accessLevelEx, value.m_accessLevelEx)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (VariableNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + VariableNode clone = (VariableNode)base.MemberwiseClone(); + + clone.m_value = (Variant)Utils.Clone(this.m_value); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_accessLevel = (byte)Utils.Clone(this.m_accessLevel); + clone.m_userAccessLevel = (byte)Utils.Clone(this.m_userAccessLevel); + clone.m_minimumSamplingInterval = (double)Utils.Clone(this.m_minimumSamplingInterval); + clone.m_historizing = (bool)Utils.Clone(this.m_historizing); + clone.m_accessLevelEx = (uint)Utils.Clone(this.m_accessLevelEx); + + return clone; + } + #endregion + + #region Private Fields + private Variant m_value; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private byte m_accessLevel; + private byte m_userAccessLevel; + private double m_minimumSamplingInterval; + private bool m_historizing; + private uint m_accessLevelEx; + #endregion + } + #endif + #endregion + + #region VariableTypeNode Class + #if (!OPCUA_EXCLUDE_VariableTypeNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class VariableTypeNode : TypeNode + { + #region Constructors + /// + /// The default constructor. + /// + public VariableTypeNode() + { + 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_value = Variant.Null; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_isAbstract = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 2)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 3)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 4)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 5)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.VariableTypeNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.VariableTypeNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.VariableTypeNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteVariant("Value", Value); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteBoolean("IsAbstract", IsAbstract); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadVariant("Value"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + IsAbstract = decoder.ReadBoolean("IsAbstract"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + VariableTypeNode value = encodeable as VariableTypeNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (VariableTypeNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + VariableTypeNode clone = (VariableTypeNode)base.MemberwiseClone(); + + clone.m_value = (Variant)Utils.Clone(this.m_value); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + + return clone; + } + #endregion + + #region Private Fields + private Variant m_value; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private bool m_isAbstract; + #endregion + } + #endif + #endregion + + #region ReferenceTypeNode Class + #if (!OPCUA_EXCLUDE_ReferenceTypeNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReferenceTypeNode : TypeNode + { + #region Constructors + /// + /// The default constructor. + /// + public ReferenceTypeNode() + { + 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_isAbstract = true; + m_symmetric = true; + m_inverseName = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 1)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + + /// + [DataMember(Name = "Symmetric", IsRequired = false, Order = 2)] + public bool Symmetric + { + get { return m_symmetric; } + set { m_symmetric = value; } + } + + /// + [DataMember(Name = "InverseName", IsRequired = false, Order = 3)] + public LocalizedText InverseName + { + get { return m_inverseName; } + set { m_inverseName = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReferenceTypeNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReferenceTypeNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReferenceTypeNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsAbstract", IsAbstract); + encoder.WriteBoolean("Symmetric", Symmetric); + encoder.WriteLocalizedText("InverseName", InverseName); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsAbstract = decoder.ReadBoolean("IsAbstract"); + Symmetric = decoder.ReadBoolean("Symmetric"); + InverseName = decoder.ReadLocalizedText("InverseName"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReferenceTypeNode value = encodeable as ReferenceTypeNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + if (!Utils.IsEqual(m_symmetric, value.m_symmetric)) return false; + if (!Utils.IsEqual(m_inverseName, value.m_inverseName)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReferenceTypeNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReferenceTypeNode clone = (ReferenceTypeNode)base.MemberwiseClone(); + + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + clone.m_symmetric = (bool)Utils.Clone(this.m_symmetric); + clone.m_inverseName = (LocalizedText)Utils.Clone(this.m_inverseName); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isAbstract; + private bool m_symmetric; + private LocalizedText m_inverseName; + #endregion + } + #endif + #endregion + + #region MethodNode Class + #if (!OPCUA_EXCLUDE_MethodNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MethodNode : InstanceNode + { + #region Constructors + /// + /// The default constructor. + /// + public MethodNode() + { + 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_executable = true; + m_userExecutable = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Executable", IsRequired = false, Order = 1)] + public bool Executable + { + get { return m_executable; } + set { m_executable = value; } + } + + /// + [DataMember(Name = "UserExecutable", IsRequired = false, Order = 2)] + public bool UserExecutable + { + get { return m_userExecutable; } + set { m_userExecutable = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.MethodNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MethodNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MethodNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("Executable", Executable); + encoder.WriteBoolean("UserExecutable", UserExecutable); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Executable = decoder.ReadBoolean("Executable"); + UserExecutable = decoder.ReadBoolean("UserExecutable"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MethodNode value = encodeable as MethodNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_executable, value.m_executable)) return false; + if (!Utils.IsEqual(m_userExecutable, value.m_userExecutable)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (MethodNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MethodNode clone = (MethodNode)base.MemberwiseClone(); + + clone.m_executable = (bool)Utils.Clone(this.m_executable); + clone.m_userExecutable = (bool)Utils.Clone(this.m_userExecutable); + + return clone; + } + #endregion + + #region Private Fields + private bool m_executable; + private bool m_userExecutable; + #endregion + } + #endif + #endregion + + #region ViewNode Class + #if (!OPCUA_EXCLUDE_ViewNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ViewNode : InstanceNode + { + #region Constructors + /// + /// The default constructor. + /// + public ViewNode() + { + 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_containsNoLoops = true; + m_eventNotifier = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ContainsNoLoops", IsRequired = false, Order = 1)] + public bool ContainsNoLoops + { + get { return m_containsNoLoops; } + set { m_containsNoLoops = value; } + } + + /// + [DataMember(Name = "EventNotifier", IsRequired = false, Order = 2)] + public byte EventNotifier + { + get { return m_eventNotifier; } + set { m_eventNotifier = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ViewNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ViewNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ViewNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("ContainsNoLoops", ContainsNoLoops); + encoder.WriteByte("EventNotifier", EventNotifier); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ContainsNoLoops = decoder.ReadBoolean("ContainsNoLoops"); + EventNotifier = decoder.ReadByte("EventNotifier"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ViewNode value = encodeable as ViewNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_containsNoLoops, value.m_containsNoLoops)) return false; + if (!Utils.IsEqual(m_eventNotifier, value.m_eventNotifier)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ViewNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ViewNode clone = (ViewNode)base.MemberwiseClone(); + + clone.m_containsNoLoops = (bool)Utils.Clone(this.m_containsNoLoops); + clone.m_eventNotifier = (byte)Utils.Clone(this.m_eventNotifier); + + return clone; + } + #endregion + + #region Private Fields + private bool m_containsNoLoops; + private byte m_eventNotifier; + #endregion + } + #endif + #endregion + + #region DataTypeNode Class + #if (!OPCUA_EXCLUDE_DataTypeNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataTypeNode : TypeNode + { + #region Constructors + /// + /// The default constructor. + /// + public DataTypeNode() + { + 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_isAbstract = true; + m_dataTypeDefinition = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 1)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + + /// + [DataMember(Name = "DataTypeDefinition", IsRequired = false, Order = 2)] + public ExtensionObject DataTypeDefinition + { + get { return m_dataTypeDefinition; } + set { m_dataTypeDefinition = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DataTypeNode; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataTypeNode_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataTypeNode_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsAbstract", IsAbstract); + encoder.WriteExtensionObject("DataTypeDefinition", DataTypeDefinition); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsAbstract = decoder.ReadBoolean("IsAbstract"); + DataTypeDefinition = decoder.ReadExtensionObject("DataTypeDefinition"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataTypeNode value = encodeable as DataTypeNode; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + if (!Utils.IsEqual(m_dataTypeDefinition, value.m_dataTypeDefinition)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DataTypeNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataTypeNode clone = (DataTypeNode)base.MemberwiseClone(); + + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + clone.m_dataTypeDefinition = (ExtensionObject)Utils.Clone(this.m_dataTypeDefinition); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isAbstract; + private ExtensionObject m_dataTypeDefinition; + #endregion + } + #endif + #endregion + + #region ReferenceNode Class + #if (!OPCUA_EXCLUDE_ReferenceNode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReferenceNode : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReferenceNode() + { + 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_referenceTypeId = null; + m_isInverse = true; + m_targetId = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 1)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IsInverse", IsRequired = false, Order = 2)] + public bool IsInverse + { + get { return m_isInverse; } + set { m_isInverse = value; } + } + + /// + [DataMember(Name = "TargetId", IsRequired = false, Order = 3)] + public ExpandedNodeId TargetId + { + get { return m_targetId; } + set { m_targetId = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReferenceNode; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReferenceNode_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReferenceNode_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IsInverse", IsInverse); + encoder.WriteExpandedNodeId("TargetId", TargetId); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IsInverse = decoder.ReadBoolean("IsInverse"); + TargetId = decoder.ReadExpandedNodeId("TargetId"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReferenceNode value = encodeable as ReferenceNode; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_isInverse, value.m_isInverse)) return false; + if (!Utils.IsEqual(m_targetId, value.m_targetId)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReferenceNode)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReferenceNode clone = (ReferenceNode)base.MemberwiseClone(); + + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_isInverse = (bool)Utils.Clone(this.m_isInverse); + clone.m_targetId = (ExpandedNodeId)Utils.Clone(this.m_targetId); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_referenceTypeId; + private bool m_isInverse; + private ExpandedNodeId m_targetId; + #endregion + } + + #region ReferenceNodeCollection Class + /// + /// A collection of ReferenceNode objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfReferenceNode", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ReferenceNode")] + #if !NET_STANDARD + public partial class ReferenceNodeCollection : List, ICloneable + #else + public partial class ReferenceNodeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ReferenceNodeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ReferenceNodeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ReferenceNodeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ReferenceNodeCollection(ReferenceNode[] values) + { + if (values != null) + { + return new ReferenceNodeCollection(values); + } + + return new ReferenceNodeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ReferenceNode[](ReferenceNodeCollection 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 (ReferenceNodeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ReferenceNodeCollection clone = new ReferenceNodeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ReferenceNode)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Argument Class + #if (!OPCUA_EXCLUDE_Argument) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Argument : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Argument() + { + 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_name = null; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_description = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 2)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 3)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 4)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 5)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Argument; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Argument_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Argument_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteLocalizedText("Description", Description); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + Description = decoder.ReadLocalizedText("Description"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Argument value = encodeable as Argument; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_name, value.m_name)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Argument)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Argument clone = (Argument)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private LocalizedText m_description; + #endregion + } + + #region ArgumentCollection Class + /// + /// A collection of Argument objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfArgument", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Argument")] + #if !NET_STANDARD + public partial class ArgumentCollection : List, ICloneable + #else + public partial class ArgumentCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ArgumentCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ArgumentCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ArgumentCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ArgumentCollection(Argument[] values) + { + if (values != null) + { + return new ArgumentCollection(values); + } + + return new ArgumentCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Argument[](ArgumentCollection 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 (ArgumentCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ArgumentCollection clone = new ArgumentCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Argument)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EnumValueType Class + #if (!OPCUA_EXCLUDE_EnumValueType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EnumValueType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EnumValueType() + { + 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_value = (long)0; + m_displayName = null; + m_description = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public long Value + { + get { return m_value; } + set { m_value = value; } + } + + /// + [DataMember(Name = "DisplayName", IsRequired = false, Order = 2)] + public LocalizedText DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 3)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EnumValueType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EnumValueType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EnumValueType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteInt64("Value", Value); + encoder.WriteLocalizedText("DisplayName", DisplayName); + encoder.WriteLocalizedText("Description", Description); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadInt64("Value"); + DisplayName = decoder.ReadLocalizedText("DisplayName"); + Description = decoder.ReadLocalizedText("Description"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EnumValueType value = encodeable as EnumValueType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_value, value.m_value)) return false; + if (!Utils.IsEqual(m_displayName, value.m_displayName)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EnumValueType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EnumValueType clone = (EnumValueType)base.MemberwiseClone(); + + clone.m_value = (long)Utils.Clone(this.m_value); + clone.m_displayName = (LocalizedText)Utils.Clone(this.m_displayName); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + + return clone; + } + #endregion + + #region Private Fields + private long m_value; + private LocalizedText m_displayName; + private LocalizedText m_description; + #endregion + } + + #region EnumValueTypeCollection Class + /// + /// A collection of EnumValueType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEnumValueType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EnumValueType")] + #if !NET_STANDARD + public partial class EnumValueTypeCollection : List, ICloneable + #else + public partial class EnumValueTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EnumValueTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EnumValueTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EnumValueTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EnumValueTypeCollection(EnumValueType[] values) + { + if (values != null) + { + return new EnumValueTypeCollection(values); + } + + return new EnumValueTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EnumValueType[](EnumValueTypeCollection 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 (EnumValueTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EnumValueTypeCollection clone = new EnumValueTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EnumValueType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EnumField Class + #if (!OPCUA_EXCLUDE_EnumField) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EnumField : EnumValueType + { + #region Constructors + /// + /// The default constructor. + /// + public EnumField() + { + 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_name = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Name", IsRequired = false, Order = 1)] + public string Name + { + get { return m_name; } + set { m_name = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.EnumField; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EnumField_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EnumField_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Name", Name); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Name = decoder.ReadString("Name"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EnumField value = encodeable as EnumField; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_name, value.m_name)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (EnumField)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EnumField clone = (EnumField)base.MemberwiseClone(); + + clone.m_name = (string)Utils.Clone(this.m_name); + + return clone; + } + #endregion + + #region Private Fields + private string m_name; + #endregion + } + + #region EnumFieldCollection Class + /// + /// A collection of EnumField objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEnumField", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EnumField")] + #if !NET_STANDARD + public partial class EnumFieldCollection : List, ICloneable + #else + public partial class EnumFieldCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EnumFieldCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EnumFieldCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EnumFieldCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EnumFieldCollection(EnumField[] values) + { + if (values != null) + { + return new EnumFieldCollection(values); + } + + return new EnumFieldCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EnumField[](EnumFieldCollection 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 (EnumFieldCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EnumFieldCollection clone = new EnumFieldCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EnumField)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region OptionSet Class + #if (!OPCUA_EXCLUDE_OptionSet) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class OptionSet : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public OptionSet() + { + 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_value = null; + m_validBits = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public byte[] Value + { + get { return m_value; } + set { m_value = value; } + } + + /// + [DataMember(Name = "ValidBits", IsRequired = false, Order = 2)] + public byte[] ValidBits + { + get { return m_validBits; } + set { m_validBits = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.OptionSet; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.OptionSet_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.OptionSet_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByteString("Value", Value); + encoder.WriteByteString("ValidBits", ValidBits); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadByteString("Value"); + ValidBits = decoder.ReadByteString("ValidBits"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + OptionSet value = encodeable as OptionSet; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_value, value.m_value)) return false; + if (!Utils.IsEqual(m_validBits, value.m_validBits)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (OptionSet)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + OptionSet clone = (OptionSet)base.MemberwiseClone(); + + clone.m_value = (byte[])Utils.Clone(this.m_value); + clone.m_validBits = (byte[])Utils.Clone(this.m_validBits); + + return clone; + } + #endregion + + #region Private Fields + private byte[] m_value; + private byte[] m_validBits; + #endregion + } + + #region OptionSetCollection Class + /// + /// A collection of OptionSet objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfOptionSet", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "OptionSet")] + #if !NET_STANDARD + public partial class OptionSetCollection : List, ICloneable + #else + public partial class OptionSetCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public OptionSetCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public OptionSetCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public OptionSetCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator OptionSetCollection(OptionSet[] values) + { + if (values != null) + { + return new OptionSetCollection(values); + } + + return new OptionSetCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator OptionSet[](OptionSetCollection 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 (OptionSetCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + OptionSetCollection clone = new OptionSetCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((OptionSet)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Union Class + #if (!OPCUA_EXCLUDE_Union) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Union : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Union() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Union; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Union_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Union_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Union value = encodeable as Union; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Union)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Union clone = (Union)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + + #region UnionCollection Class + /// + /// A collection of Union objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUnion", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "Union")] + #if !NET_STANDARD + public partial class UnionCollection : List, ICloneable + #else + public partial class UnionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UnionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UnionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UnionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UnionCollection(Union[] values) + { + if (values != null) + { + return new UnionCollection(values); + } + + return new UnionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator Union[](UnionCollection 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 (UnionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UnionCollection clone = new UnionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((Union)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region TimeZoneDataType Class + #if (!OPCUA_EXCLUDE_TimeZoneDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TimeZoneDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TimeZoneDataType() + { + 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_offset = (short)0; + m_daylightSavingInOffset = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Offset", IsRequired = false, Order = 1)] + public short Offset + { + get { return m_offset; } + set { m_offset = value; } + } + + /// + [DataMember(Name = "DaylightSavingInOffset", IsRequired = false, Order = 2)] + public bool DaylightSavingInOffset + { + get { return m_daylightSavingInOffset; } + set { m_daylightSavingInOffset = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TimeZoneDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TimeZoneDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TimeZoneDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteInt16("Offset", Offset); + encoder.WriteBoolean("DaylightSavingInOffset", DaylightSavingInOffset); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Offset = decoder.ReadInt16("Offset"); + DaylightSavingInOffset = decoder.ReadBoolean("DaylightSavingInOffset"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TimeZoneDataType value = encodeable as TimeZoneDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_offset, value.m_offset)) return false; + if (!Utils.IsEqual(m_daylightSavingInOffset, value.m_daylightSavingInOffset)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TimeZoneDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TimeZoneDataType clone = (TimeZoneDataType)base.MemberwiseClone(); + + clone.m_offset = (short)Utils.Clone(this.m_offset); + clone.m_daylightSavingInOffset = (bool)Utils.Clone(this.m_daylightSavingInOffset); + + return clone; + } + #endregion + + #region Private Fields + private short m_offset; + private bool m_daylightSavingInOffset; + #endregion + } + + #region TimeZoneDataTypeCollection Class + /// + /// A collection of TimeZoneDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfTimeZoneDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "TimeZoneDataType")] + #if !NET_STANDARD + public partial class TimeZoneDataTypeCollection : List, ICloneable + #else + public partial class TimeZoneDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public TimeZoneDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public TimeZoneDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public TimeZoneDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator TimeZoneDataTypeCollection(TimeZoneDataType[] values) + { + if (values != null) + { + return new TimeZoneDataTypeCollection(values); + } + + return new TimeZoneDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator TimeZoneDataType[](TimeZoneDataTypeCollection 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 (TimeZoneDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + TimeZoneDataTypeCollection clone = new TimeZoneDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((TimeZoneDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ApplicationType Enumeration + #if (!OPCUA_EXCLUDE_ApplicationType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum ApplicationType + { + /// + [EnumMember(Value = "Server_0")] + Server = 0, + + /// + [EnumMember(Value = "Client_1")] + Client = 1, + + /// + [EnumMember(Value = "ClientAndServer_2")] + ClientAndServer = 2, + + /// + [EnumMember(Value = "DiscoveryServer_3")] + DiscoveryServer = 3, + } + #endif + #endregion + + #region ApplicationDescription Class + #if (!OPCUA_EXCLUDE_ApplicationDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ApplicationDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ApplicationDescription() + { + 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_applicationUri = null; + m_productUri = null; + m_applicationName = null; + m_applicationType = ApplicationType.Server; + m_gatewayServerUri = null; + m_discoveryProfileUri = null; + m_discoveryUrls = new StringCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ApplicationUri", IsRequired = false, Order = 1)] + public string ApplicationUri + { + get { return m_applicationUri; } + set { m_applicationUri = value; } + } + + /// + [DataMember(Name = "ProductUri", IsRequired = false, Order = 2)] + public string ProductUri + { + get { return m_productUri; } + set { m_productUri = value; } + } + + /// + [DataMember(Name = "ApplicationName", IsRequired = false, Order = 3)] + public LocalizedText ApplicationName + { + get { return m_applicationName; } + set { m_applicationName = value; } + } + + /// + [DataMember(Name = "ApplicationType", IsRequired = false, Order = 4)] + public ApplicationType ApplicationType + { + get { return m_applicationType; } + set { m_applicationType = value; } + } + + /// + [DataMember(Name = "GatewayServerUri", IsRequired = false, Order = 5)] + public string GatewayServerUri + { + get { return m_gatewayServerUri; } + set { m_gatewayServerUri = value; } + } + + /// + [DataMember(Name = "DiscoveryProfileUri", IsRequired = false, Order = 6)] + public string DiscoveryProfileUri + { + get { return m_discoveryProfileUri; } + set { m_discoveryProfileUri = value; } + } + + /// + /// + /// + [DataMember(Name = "DiscoveryUrls", IsRequired = false, Order = 7)] + public StringCollection DiscoveryUrls + { + get + { + return m_discoveryUrls; + } + + set + { + m_discoveryUrls = value; + + if (value == null) + { + m_discoveryUrls = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ApplicationDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ApplicationDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ApplicationDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ApplicationUri", ApplicationUri); + encoder.WriteString("ProductUri", ProductUri); + encoder.WriteLocalizedText("ApplicationName", ApplicationName); + encoder.WriteEnumerated("ApplicationType", ApplicationType); + encoder.WriteString("GatewayServerUri", GatewayServerUri); + encoder.WriteString("DiscoveryProfileUri", DiscoveryProfileUri); + encoder.WriteStringArray("DiscoveryUrls", DiscoveryUrls); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ApplicationUri = decoder.ReadString("ApplicationUri"); + ProductUri = decoder.ReadString("ProductUri"); + ApplicationName = decoder.ReadLocalizedText("ApplicationName"); + ApplicationType = (ApplicationType)decoder.ReadEnumerated("ApplicationType", typeof(ApplicationType)); + GatewayServerUri = decoder.ReadString("GatewayServerUri"); + DiscoveryProfileUri = decoder.ReadString("DiscoveryProfileUri"); + DiscoveryUrls = decoder.ReadStringArray("DiscoveryUrls"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ApplicationDescription value = encodeable as ApplicationDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_applicationUri, value.m_applicationUri)) return false; + if (!Utils.IsEqual(m_productUri, value.m_productUri)) return false; + if (!Utils.IsEqual(m_applicationName, value.m_applicationName)) return false; + if (!Utils.IsEqual(m_applicationType, value.m_applicationType)) return false; + if (!Utils.IsEqual(m_gatewayServerUri, value.m_gatewayServerUri)) return false; + if (!Utils.IsEqual(m_discoveryProfileUri, value.m_discoveryProfileUri)) return false; + if (!Utils.IsEqual(m_discoveryUrls, value.m_discoveryUrls)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ApplicationDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ApplicationDescription clone = (ApplicationDescription)base.MemberwiseClone(); + + clone.m_applicationUri = (string)Utils.Clone(this.m_applicationUri); + clone.m_productUri = (string)Utils.Clone(this.m_productUri); + clone.m_applicationName = (LocalizedText)Utils.Clone(this.m_applicationName); + clone.m_applicationType = (ApplicationType)Utils.Clone(this.m_applicationType); + clone.m_gatewayServerUri = (string)Utils.Clone(this.m_gatewayServerUri); + clone.m_discoveryProfileUri = (string)Utils.Clone(this.m_discoveryProfileUri); + clone.m_discoveryUrls = (StringCollection)Utils.Clone(this.m_discoveryUrls); + + return clone; + } + #endregion + + #region Private Fields + private string m_applicationUri; + private string m_productUri; + private LocalizedText m_applicationName; + private ApplicationType m_applicationType; + private string m_gatewayServerUri; + private string m_discoveryProfileUri; + private StringCollection m_discoveryUrls; + #endregion + } + + #region ApplicationDescriptionCollection Class + /// + /// A collection of ApplicationDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfApplicationDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ApplicationDescription")] + #if !NET_STANDARD + public partial class ApplicationDescriptionCollection : List, ICloneable + #else + public partial class ApplicationDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ApplicationDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ApplicationDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ApplicationDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ApplicationDescriptionCollection(ApplicationDescription[] values) + { + if (values != null) + { + return new ApplicationDescriptionCollection(values); + } + + return new ApplicationDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ApplicationDescription[](ApplicationDescriptionCollection 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 (ApplicationDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ApplicationDescriptionCollection clone = new ApplicationDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ApplicationDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region RequestHeader Class + #if (!OPCUA_EXCLUDE_RequestHeader) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RequestHeader : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RequestHeader() + { + 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_authenticationToken = null; + m_timestamp = DateTime.MinValue; + m_requestHandle = (uint)0; + m_returnDiagnostics = (uint)0; + m_auditEntryId = null; + m_timeoutHint = (uint)0; + m_additionalHeader = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "AuthenticationToken", IsRequired = false, Order = 1)] + public NodeId AuthenticationToken + { + get { return m_authenticationToken; } + set { m_authenticationToken = value; } + } + + /// + [DataMember(Name = "Timestamp", IsRequired = false, Order = 2)] + public DateTime Timestamp + { + get { return m_timestamp; } + set { m_timestamp = value; } + } + + /// + [DataMember(Name = "RequestHandle", IsRequired = false, Order = 3)] + public uint RequestHandle + { + get { return m_requestHandle; } + set { m_requestHandle = value; } + } + + /// + [DataMember(Name = "ReturnDiagnostics", IsRequired = false, Order = 4)] + public uint ReturnDiagnostics + { + get { return m_returnDiagnostics; } + set { m_returnDiagnostics = value; } + } + + /// + [DataMember(Name = "AuditEntryId", IsRequired = false, Order = 5)] + public string AuditEntryId + { + get { return m_auditEntryId; } + set { m_auditEntryId = value; } + } + + /// + [DataMember(Name = "TimeoutHint", IsRequired = false, Order = 6)] + public uint TimeoutHint + { + get { return m_timeoutHint; } + set { m_timeoutHint = value; } + } + + /// + [DataMember(Name = "AdditionalHeader", IsRequired = false, Order = 7)] + public ExtensionObject AdditionalHeader + { + get { return m_additionalHeader; } + set { m_additionalHeader = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RequestHeader; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RequestHeader_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RequestHeader_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("AuthenticationToken", AuthenticationToken); + encoder.WriteDateTime("Timestamp", Timestamp); + encoder.WriteUInt32("RequestHandle", RequestHandle); + encoder.WriteUInt32("ReturnDiagnostics", ReturnDiagnostics); + encoder.WriteString("AuditEntryId", AuditEntryId); + encoder.WriteUInt32("TimeoutHint", TimeoutHint); + encoder.WriteExtensionObject("AdditionalHeader", AdditionalHeader); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + AuthenticationToken = decoder.ReadNodeId("AuthenticationToken"); + Timestamp = decoder.ReadDateTime("Timestamp"); + RequestHandle = decoder.ReadUInt32("RequestHandle"); + ReturnDiagnostics = decoder.ReadUInt32("ReturnDiagnostics"); + AuditEntryId = decoder.ReadString("AuditEntryId"); + TimeoutHint = decoder.ReadUInt32("TimeoutHint"); + AdditionalHeader = decoder.ReadExtensionObject("AdditionalHeader"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RequestHeader value = encodeable as RequestHeader; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_authenticationToken, value.m_authenticationToken)) return false; + if (!Utils.IsEqual(m_timestamp, value.m_timestamp)) return false; + if (!Utils.IsEqual(m_requestHandle, value.m_requestHandle)) return false; + if (!Utils.IsEqual(m_returnDiagnostics, value.m_returnDiagnostics)) return false; + if (!Utils.IsEqual(m_auditEntryId, value.m_auditEntryId)) return false; + if (!Utils.IsEqual(m_timeoutHint, value.m_timeoutHint)) return false; + if (!Utils.IsEqual(m_additionalHeader, value.m_additionalHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RequestHeader)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RequestHeader clone = (RequestHeader)base.MemberwiseClone(); + + clone.m_authenticationToken = (NodeId)Utils.Clone(this.m_authenticationToken); + clone.m_timestamp = (DateTime)Utils.Clone(this.m_timestamp); + clone.m_requestHandle = (uint)Utils.Clone(this.m_requestHandle); + clone.m_returnDiagnostics = (uint)Utils.Clone(this.m_returnDiagnostics); + clone.m_auditEntryId = (string)Utils.Clone(this.m_auditEntryId); + clone.m_timeoutHint = (uint)Utils.Clone(this.m_timeoutHint); + clone.m_additionalHeader = (ExtensionObject)Utils.Clone(this.m_additionalHeader); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_authenticationToken; + private DateTime m_timestamp; + private uint m_requestHandle; + private uint m_returnDiagnostics; + private string m_auditEntryId; + private uint m_timeoutHint; + private ExtensionObject m_additionalHeader; + #endregion + } + #endif + #endregion + + #region ResponseHeader Class + #if (!OPCUA_EXCLUDE_ResponseHeader) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ResponseHeader : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ResponseHeader() + { + 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_timestamp = DateTime.MinValue; + m_requestHandle = (uint)0; + m_serviceResult = StatusCodes.Good; + m_serviceDiagnostics = null; + m_stringTable = new StringCollection(); + m_additionalHeader = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Timestamp", IsRequired = false, Order = 1)] + public DateTime Timestamp + { + get { return m_timestamp; } + set { m_timestamp = value; } + } + + /// + [DataMember(Name = "RequestHandle", IsRequired = false, Order = 2)] + public uint RequestHandle + { + get { return m_requestHandle; } + set { m_requestHandle = value; } + } + + /// + [DataMember(Name = "ServiceResult", IsRequired = false, Order = 3)] + public StatusCode ServiceResult + { + get { return m_serviceResult; } + set { m_serviceResult = value; } + } + + /// + [DataMember(Name = "ServiceDiagnostics", IsRequired = false, Order = 4)] + public DiagnosticInfo ServiceDiagnostics + { + get { return m_serviceDiagnostics; } + set { m_serviceDiagnostics = value; } + } + + /// + /// + /// + [DataMember(Name = "StringTable", IsRequired = false, Order = 5)] + public StringCollection StringTable + { + get + { + return m_stringTable; + } + + set + { + m_stringTable = value; + + if (value == null) + { + m_stringTable = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "AdditionalHeader", IsRequired = false, Order = 6)] + public ExtensionObject AdditionalHeader + { + get { return m_additionalHeader; } + set { m_additionalHeader = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ResponseHeader; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ResponseHeader_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ResponseHeader_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTime("Timestamp", Timestamp); + encoder.WriteUInt32("RequestHandle", RequestHandle); + encoder.WriteStatusCode("ServiceResult", ServiceResult); + encoder.WriteDiagnosticInfo("ServiceDiagnostics", ServiceDiagnostics); + encoder.WriteStringArray("StringTable", StringTable); + encoder.WriteExtensionObject("AdditionalHeader", AdditionalHeader); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Timestamp = decoder.ReadDateTime("Timestamp"); + RequestHandle = decoder.ReadUInt32("RequestHandle"); + ServiceResult = decoder.ReadStatusCode("ServiceResult"); + ServiceDiagnostics = decoder.ReadDiagnosticInfo("ServiceDiagnostics"); + StringTable = decoder.ReadStringArray("StringTable"); + AdditionalHeader = decoder.ReadExtensionObject("AdditionalHeader"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ResponseHeader value = encodeable as ResponseHeader; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_timestamp, value.m_timestamp)) return false; + if (!Utils.IsEqual(m_requestHandle, value.m_requestHandle)) return false; + if (!Utils.IsEqual(m_serviceResult, value.m_serviceResult)) return false; + if (!Utils.IsEqual(m_serviceDiagnostics, value.m_serviceDiagnostics)) return false; + if (!Utils.IsEqual(m_stringTable, value.m_stringTable)) return false; + if (!Utils.IsEqual(m_additionalHeader, value.m_additionalHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ResponseHeader)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ResponseHeader clone = (ResponseHeader)base.MemberwiseClone(); + + clone.m_timestamp = (DateTime)Utils.Clone(this.m_timestamp); + clone.m_requestHandle = (uint)Utils.Clone(this.m_requestHandle); + clone.m_serviceResult = (StatusCode)Utils.Clone(this.m_serviceResult); + clone.m_serviceDiagnostics = (DiagnosticInfo)Utils.Clone(this.m_serviceDiagnostics); + clone.m_stringTable = (StringCollection)Utils.Clone(this.m_stringTable); + clone.m_additionalHeader = (ExtensionObject)Utils.Clone(this.m_additionalHeader); + + return clone; + } + #endregion + + #region Private Fields + private DateTime m_timestamp; + private uint m_requestHandle; + private StatusCode m_serviceResult; + private DiagnosticInfo m_serviceDiagnostics; + private StringCollection m_stringTable; + private ExtensionObject m_additionalHeader; + #endregion + } + #endif + #endregion + + #region ServiceFault Class + #if (!OPCUA_EXCLUDE_ServiceFault) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ServiceFault : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ServiceFault() + { + 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_responseHeader = new ResponseHeader(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ServiceFault; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ServiceFault_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ServiceFault_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ServiceFault value = encodeable as ServiceFault; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ServiceFault)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ServiceFault clone = (ServiceFault)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + #endregion + } + #endif + #endregion + + #region SessionlessInvokeRequestType Class + #if (!OPCUA_EXCLUDE_SessionlessInvokeRequestType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SessionlessInvokeRequestType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SessionlessInvokeRequestType() + { + 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_urisVersion = new UInt32Collection(); + m_namespaceUris = new StringCollection(); + m_serverUris = new StringCollection(); + m_localeIds = new StringCollection(); + m_serviceId = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "UrisVersion", IsRequired = false, Order = 1)] + public UInt32Collection UrisVersion + { + get + { + return m_urisVersion; + } + + set + { + m_urisVersion = value; + + if (value == null) + { + m_urisVersion = new UInt32Collection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NamespaceUris", IsRequired = false, Order = 2)] + public StringCollection NamespaceUris + { + get + { + return m_namespaceUris; + } + + set + { + m_namespaceUris = value; + + if (value == null) + { + m_namespaceUris = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ServerUris", IsRequired = false, Order = 3)] + public StringCollection ServerUris + { + get + { + return m_serverUris; + } + + set + { + m_serverUris = value; + + if (value == null) + { + m_serverUris = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LocaleIds", IsRequired = false, Order = 4)] + public StringCollection LocaleIds + { + get + { + return m_localeIds; + } + + set + { + m_localeIds = value; + + if (value == null) + { + m_localeIds = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "ServiceId", IsRequired = false, Order = 5)] + public uint ServiceId + { + get { return m_serviceId; } + set { m_serviceId = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SessionlessInvokeRequestType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SessionlessInvokeRequestType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SessionlessInvokeRequestType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32Array("UrisVersion", UrisVersion); + encoder.WriteStringArray("NamespaceUris", NamespaceUris); + encoder.WriteStringArray("ServerUris", ServerUris); + encoder.WriteStringArray("LocaleIds", LocaleIds); + encoder.WriteUInt32("ServiceId", ServiceId); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + UrisVersion = decoder.ReadUInt32Array("UrisVersion"); + NamespaceUris = decoder.ReadStringArray("NamespaceUris"); + ServerUris = decoder.ReadStringArray("ServerUris"); + LocaleIds = decoder.ReadStringArray("LocaleIds"); + ServiceId = decoder.ReadUInt32("ServiceId"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SessionlessInvokeRequestType value = encodeable as SessionlessInvokeRequestType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_urisVersion, value.m_urisVersion)) return false; + if (!Utils.IsEqual(m_namespaceUris, value.m_namespaceUris)) return false; + if (!Utils.IsEqual(m_serverUris, value.m_serverUris)) return false; + if (!Utils.IsEqual(m_localeIds, value.m_localeIds)) return false; + if (!Utils.IsEqual(m_serviceId, value.m_serviceId)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SessionlessInvokeRequestType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SessionlessInvokeRequestType clone = (SessionlessInvokeRequestType)base.MemberwiseClone(); + + clone.m_urisVersion = (UInt32Collection)Utils.Clone(this.m_urisVersion); + clone.m_namespaceUris = (StringCollection)Utils.Clone(this.m_namespaceUris); + clone.m_serverUris = (StringCollection)Utils.Clone(this.m_serverUris); + clone.m_localeIds = (StringCollection)Utils.Clone(this.m_localeIds); + clone.m_serviceId = (uint)Utils.Clone(this.m_serviceId); + + return clone; + } + #endregion + + #region Private Fields + private UInt32Collection m_urisVersion; + private StringCollection m_namespaceUris; + private StringCollection m_serverUris; + private StringCollection m_localeIds; + private uint m_serviceId; + #endregion + } + #endif + #endregion + + #region SessionlessInvokeResponseType Class + #if (!OPCUA_EXCLUDE_SessionlessInvokeResponseType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SessionlessInvokeResponseType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SessionlessInvokeResponseType() + { + 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_namespaceUris = new StringCollection(); + m_serverUris = new StringCollection(); + m_serviceId = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "NamespaceUris", IsRequired = false, Order = 1)] + public StringCollection NamespaceUris + { + get + { + return m_namespaceUris; + } + + set + { + m_namespaceUris = value; + + if (value == null) + { + m_namespaceUris = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ServerUris", IsRequired = false, Order = 2)] + public StringCollection ServerUris + { + get + { + return m_serverUris; + } + + set + { + m_serverUris = value; + + if (value == null) + { + m_serverUris = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "ServiceId", IsRequired = false, Order = 3)] + public uint ServiceId + { + get { return m_serviceId; } + set { m_serviceId = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SessionlessInvokeResponseType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SessionlessInvokeResponseType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SessionlessInvokeResponseType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStringArray("NamespaceUris", NamespaceUris); + encoder.WriteStringArray("ServerUris", ServerUris); + encoder.WriteUInt32("ServiceId", ServiceId); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NamespaceUris = decoder.ReadStringArray("NamespaceUris"); + ServerUris = decoder.ReadStringArray("ServerUris"); + ServiceId = decoder.ReadUInt32("ServiceId"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SessionlessInvokeResponseType value = encodeable as SessionlessInvokeResponseType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_namespaceUris, value.m_namespaceUris)) return false; + if (!Utils.IsEqual(m_serverUris, value.m_serverUris)) return false; + if (!Utils.IsEqual(m_serviceId, value.m_serviceId)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SessionlessInvokeResponseType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SessionlessInvokeResponseType clone = (SessionlessInvokeResponseType)base.MemberwiseClone(); + + clone.m_namespaceUris = (StringCollection)Utils.Clone(this.m_namespaceUris); + clone.m_serverUris = (StringCollection)Utils.Clone(this.m_serverUris); + clone.m_serviceId = (uint)Utils.Clone(this.m_serviceId); + + return clone; + } + #endregion + + #region Private Fields + private StringCollection m_namespaceUris; + private StringCollection m_serverUris; + private uint m_serviceId; + #endregion + } + #endif + #endregion + + #region FindServersRequest Class + #if (!OPCUA_EXCLUDE_FindServersRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FindServersRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FindServersRequest() + { + 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_requestHeader = new RequestHeader(); + m_endpointUrl = null; + m_localeIds = new StringCollection(); + m_serverUris = new StringCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "EndpointUrl", IsRequired = false, Order = 2)] + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + /// + /// + [DataMember(Name = "LocaleIds", IsRequired = false, Order = 3)] + public StringCollection LocaleIds + { + get + { + return m_localeIds; + } + + set + { + m_localeIds = value; + + if (value == null) + { + m_localeIds = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ServerUris", IsRequired = false, Order = 4)] + public StringCollection ServerUris + { + get + { + return m_serverUris; + } + + set + { + m_serverUris = value; + + if (value == null) + { + m_serverUris = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FindServersRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FindServersRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FindServersRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteString("EndpointUrl", EndpointUrl); + encoder.WriteStringArray("LocaleIds", LocaleIds); + encoder.WriteStringArray("ServerUris", ServerUris); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + EndpointUrl = decoder.ReadString("EndpointUrl"); + LocaleIds = decoder.ReadStringArray("LocaleIds"); + ServerUris = decoder.ReadStringArray("ServerUris"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FindServersRequest value = encodeable as FindServersRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_endpointUrl, value.m_endpointUrl)) return false; + if (!Utils.IsEqual(m_localeIds, value.m_localeIds)) return false; + if (!Utils.IsEqual(m_serverUris, value.m_serverUris)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FindServersRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FindServersRequest clone = (FindServersRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_endpointUrl = (string)Utils.Clone(this.m_endpointUrl); + clone.m_localeIds = (StringCollection)Utils.Clone(this.m_localeIds); + clone.m_serverUris = (StringCollection)Utils.Clone(this.m_serverUris); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private string m_endpointUrl; + private StringCollection m_localeIds; + private StringCollection m_serverUris; + #endregion + } + #endif + #endregion + + #region FindServersResponse Class + #if (!OPCUA_EXCLUDE_FindServersResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FindServersResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FindServersResponse() + { + 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_responseHeader = new ResponseHeader(); + m_servers = new ApplicationDescriptionCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Servers", IsRequired = false, Order = 2)] + public ApplicationDescriptionCollection Servers + { + get + { + return m_servers; + } + + set + { + m_servers = value; + + if (value == null) + { + m_servers = new ApplicationDescriptionCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FindServersResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FindServersResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FindServersResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Servers", Servers.ToArray(), typeof(ApplicationDescription)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Servers = (ApplicationDescriptionCollection)decoder.ReadEncodeableArray("Servers", typeof(ApplicationDescription)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FindServersResponse value = encodeable as FindServersResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_servers, value.m_servers)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FindServersResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FindServersResponse clone = (FindServersResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_servers = (ApplicationDescriptionCollection)Utils.Clone(this.m_servers); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private ApplicationDescriptionCollection m_servers; + #endregion + } + #endif + #endregion + + #region ServerOnNetwork Class + #if (!OPCUA_EXCLUDE_ServerOnNetwork) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ServerOnNetwork : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ServerOnNetwork() + { + 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_recordId = (uint)0; + m_serverName = null; + m_discoveryUrl = null; + m_serverCapabilities = new StringCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "RecordId", IsRequired = false, Order = 1)] + public uint RecordId + { + get { return m_recordId; } + set { m_recordId = value; } + } + + /// + [DataMember(Name = "ServerName", IsRequired = false, Order = 2)] + public string ServerName + { + get { return m_serverName; } + set { m_serverName = value; } + } + + /// + [DataMember(Name = "DiscoveryUrl", IsRequired = false, Order = 3)] + public string DiscoveryUrl + { + get { return m_discoveryUrl; } + set { m_discoveryUrl = value; } + } + + /// + /// + /// + [DataMember(Name = "ServerCapabilities", IsRequired = false, Order = 4)] + public StringCollection ServerCapabilities + { + get + { + return m_serverCapabilities; + } + + set + { + m_serverCapabilities = value; + + if (value == null) + { + m_serverCapabilities = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ServerOnNetwork; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ServerOnNetwork_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ServerOnNetwork_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("RecordId", RecordId); + encoder.WriteString("ServerName", ServerName); + encoder.WriteString("DiscoveryUrl", DiscoveryUrl); + encoder.WriteStringArray("ServerCapabilities", ServerCapabilities); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RecordId = decoder.ReadUInt32("RecordId"); + ServerName = decoder.ReadString("ServerName"); + DiscoveryUrl = decoder.ReadString("DiscoveryUrl"); + ServerCapabilities = decoder.ReadStringArray("ServerCapabilities"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ServerOnNetwork value = encodeable as ServerOnNetwork; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_recordId, value.m_recordId)) return false; + if (!Utils.IsEqual(m_serverName, value.m_serverName)) return false; + if (!Utils.IsEqual(m_discoveryUrl, value.m_discoveryUrl)) return false; + if (!Utils.IsEqual(m_serverCapabilities, value.m_serverCapabilities)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ServerOnNetwork)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ServerOnNetwork clone = (ServerOnNetwork)base.MemberwiseClone(); + + clone.m_recordId = (uint)Utils.Clone(this.m_recordId); + clone.m_serverName = (string)Utils.Clone(this.m_serverName); + clone.m_discoveryUrl = (string)Utils.Clone(this.m_discoveryUrl); + clone.m_serverCapabilities = (StringCollection)Utils.Clone(this.m_serverCapabilities); + + return clone; + } + #endregion + + #region Private Fields + private uint m_recordId; + private string m_serverName; + private string m_discoveryUrl; + private StringCollection m_serverCapabilities; + #endregion + } + + #region ServerOnNetworkCollection Class + /// + /// A collection of ServerOnNetwork objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfServerOnNetwork", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ServerOnNetwork")] + #if !NET_STANDARD + public partial class ServerOnNetworkCollection : List, ICloneable + #else + public partial class ServerOnNetworkCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ServerOnNetworkCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ServerOnNetworkCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ServerOnNetworkCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ServerOnNetworkCollection(ServerOnNetwork[] values) + { + if (values != null) + { + return new ServerOnNetworkCollection(values); + } + + return new ServerOnNetworkCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ServerOnNetwork[](ServerOnNetworkCollection 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 (ServerOnNetworkCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ServerOnNetworkCollection clone = new ServerOnNetworkCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ServerOnNetwork)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region FindServersOnNetworkRequest Class + #if (!OPCUA_EXCLUDE_FindServersOnNetworkRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FindServersOnNetworkRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FindServersOnNetworkRequest() + { + 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_requestHeader = new RequestHeader(); + m_startingRecordId = (uint)0; + m_maxRecordsToReturn = (uint)0; + m_serverCapabilityFilter = new StringCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "StartingRecordId", IsRequired = false, Order = 2)] + public uint StartingRecordId + { + get { return m_startingRecordId; } + set { m_startingRecordId = value; } + } + + /// + [DataMember(Name = "MaxRecordsToReturn", IsRequired = false, Order = 3)] + public uint MaxRecordsToReturn + { + get { return m_maxRecordsToReturn; } + set { m_maxRecordsToReturn = value; } + } + + /// + /// + /// + [DataMember(Name = "ServerCapabilityFilter", IsRequired = false, Order = 4)] + public StringCollection ServerCapabilityFilter + { + get + { + return m_serverCapabilityFilter; + } + + set + { + m_serverCapabilityFilter = value; + + if (value == null) + { + m_serverCapabilityFilter = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FindServersOnNetworkRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FindServersOnNetworkRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FindServersOnNetworkRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("StartingRecordId", StartingRecordId); + encoder.WriteUInt32("MaxRecordsToReturn", MaxRecordsToReturn); + encoder.WriteStringArray("ServerCapabilityFilter", ServerCapabilityFilter); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + StartingRecordId = decoder.ReadUInt32("StartingRecordId"); + MaxRecordsToReturn = decoder.ReadUInt32("MaxRecordsToReturn"); + ServerCapabilityFilter = decoder.ReadStringArray("ServerCapabilityFilter"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FindServersOnNetworkRequest value = encodeable as FindServersOnNetworkRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_startingRecordId, value.m_startingRecordId)) return false; + if (!Utils.IsEqual(m_maxRecordsToReturn, value.m_maxRecordsToReturn)) return false; + if (!Utils.IsEqual(m_serverCapabilityFilter, value.m_serverCapabilityFilter)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FindServersOnNetworkRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FindServersOnNetworkRequest clone = (FindServersOnNetworkRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_startingRecordId = (uint)Utils.Clone(this.m_startingRecordId); + clone.m_maxRecordsToReturn = (uint)Utils.Clone(this.m_maxRecordsToReturn); + clone.m_serverCapabilityFilter = (StringCollection)Utils.Clone(this.m_serverCapabilityFilter); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_startingRecordId; + private uint m_maxRecordsToReturn; + private StringCollection m_serverCapabilityFilter; + #endregion + } + #endif + #endregion + + #region FindServersOnNetworkResponse Class + #if (!OPCUA_EXCLUDE_FindServersOnNetworkResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FindServersOnNetworkResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FindServersOnNetworkResponse() + { + 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_responseHeader = new ResponseHeader(); + m_lastCounterResetTime = DateTime.MinValue; + m_servers = new ServerOnNetworkCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "LastCounterResetTime", IsRequired = false, Order = 2)] + public DateTime LastCounterResetTime + { + get { return m_lastCounterResetTime; } + set { m_lastCounterResetTime = value; } + } + + /// + /// + /// + [DataMember(Name = "Servers", IsRequired = false, Order = 3)] + public ServerOnNetworkCollection Servers + { + get + { + return m_servers; + } + + set + { + m_servers = value; + + if (value == null) + { + m_servers = new ServerOnNetworkCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FindServersOnNetworkResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FindServersOnNetworkResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FindServersOnNetworkResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteDateTime("LastCounterResetTime", LastCounterResetTime); + encoder.WriteEncodeableArray("Servers", Servers.ToArray(), typeof(ServerOnNetwork)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + LastCounterResetTime = decoder.ReadDateTime("LastCounterResetTime"); + Servers = (ServerOnNetworkCollection)decoder.ReadEncodeableArray("Servers", typeof(ServerOnNetwork)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FindServersOnNetworkResponse value = encodeable as FindServersOnNetworkResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_lastCounterResetTime, value.m_lastCounterResetTime)) return false; + if (!Utils.IsEqual(m_servers, value.m_servers)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FindServersOnNetworkResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FindServersOnNetworkResponse clone = (FindServersOnNetworkResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_lastCounterResetTime = (DateTime)Utils.Clone(this.m_lastCounterResetTime); + clone.m_servers = (ServerOnNetworkCollection)Utils.Clone(this.m_servers); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private DateTime m_lastCounterResetTime; + private ServerOnNetworkCollection m_servers; + #endregion + } + #endif + #endregion + + #region MessageSecurityMode Enumeration + #if (!OPCUA_EXCLUDE_MessageSecurityMode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum MessageSecurityMode + { + /// + [EnumMember(Value = "Invalid_0")] + Invalid = 0, + + /// + [EnumMember(Value = "None_1")] + None = 1, + + /// + [EnumMember(Value = "Sign_2")] + Sign = 2, + + /// + [EnumMember(Value = "SignAndEncrypt_3")] + SignAndEncrypt = 3, + } + #endif + #endregion + + #region UserTokenType Enumeration + #if (!OPCUA_EXCLUDE_UserTokenType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum UserTokenType + { + /// + [EnumMember(Value = "Anonymous_0")] + Anonymous = 0, + + /// + [EnumMember(Value = "UserName_1")] + UserName = 1, + + /// + [EnumMember(Value = "Certificate_2")] + Certificate = 2, + + /// + [EnumMember(Value = "IssuedToken_3")] + IssuedToken = 3, + } + #endif + #endregion + + #region UserTokenPolicy Class + #if (!OPCUA_EXCLUDE_UserTokenPolicy) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UserTokenPolicy : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public UserTokenPolicy() + { + 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_policyId = null; + m_tokenType = UserTokenType.Anonymous; + m_issuedTokenType = null; + m_issuerEndpointUrl = null; + m_securityPolicyUri = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "PolicyId", IsRequired = false, Order = 1)] + public string PolicyId + { + get { return m_policyId; } + set { m_policyId = value; } + } + + /// + [DataMember(Name = "TokenType", IsRequired = false, Order = 2)] + public UserTokenType TokenType + { + get { return m_tokenType; } + set { m_tokenType = value; } + } + + /// + [DataMember(Name = "IssuedTokenType", IsRequired = false, Order = 3)] + public string IssuedTokenType + { + get { return m_issuedTokenType; } + set { m_issuedTokenType = value; } + } + + /// + [DataMember(Name = "IssuerEndpointUrl", IsRequired = false, Order = 4)] + public string IssuerEndpointUrl + { + get { return m_issuerEndpointUrl; } + set { m_issuerEndpointUrl = value; } + } + + /// + [DataMember(Name = "SecurityPolicyUri", IsRequired = false, Order = 5)] + public string SecurityPolicyUri + { + get { return m_securityPolicyUri; } + set { m_securityPolicyUri = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.UserTokenPolicy; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UserTokenPolicy_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UserTokenPolicy_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("PolicyId", PolicyId); + encoder.WriteEnumerated("TokenType", TokenType); + encoder.WriteString("IssuedTokenType", IssuedTokenType); + encoder.WriteString("IssuerEndpointUrl", IssuerEndpointUrl); + encoder.WriteString("SecurityPolicyUri", SecurityPolicyUri); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PolicyId = decoder.ReadString("PolicyId"); + TokenType = (UserTokenType)decoder.ReadEnumerated("TokenType", typeof(UserTokenType)); + IssuedTokenType = decoder.ReadString("IssuedTokenType"); + IssuerEndpointUrl = decoder.ReadString("IssuerEndpointUrl"); + SecurityPolicyUri = decoder.ReadString("SecurityPolicyUri"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UserTokenPolicy value = encodeable as UserTokenPolicy; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_policyId, value.m_policyId)) return false; + if (!Utils.IsEqual(m_tokenType, value.m_tokenType)) return false; + if (!Utils.IsEqual(m_issuedTokenType, value.m_issuedTokenType)) return false; + if (!Utils.IsEqual(m_issuerEndpointUrl, value.m_issuerEndpointUrl)) return false; + if (!Utils.IsEqual(m_securityPolicyUri, value.m_securityPolicyUri)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (UserTokenPolicy)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UserTokenPolicy clone = (UserTokenPolicy)base.MemberwiseClone(); + + clone.m_policyId = (string)Utils.Clone(this.m_policyId); + clone.m_tokenType = (UserTokenType)Utils.Clone(this.m_tokenType); + clone.m_issuedTokenType = (string)Utils.Clone(this.m_issuedTokenType); + clone.m_issuerEndpointUrl = (string)Utils.Clone(this.m_issuerEndpointUrl); + clone.m_securityPolicyUri = (string)Utils.Clone(this.m_securityPolicyUri); + + return clone; + } + #endregion + + #region Private Fields + private string m_policyId; + private UserTokenType m_tokenType; + private string m_issuedTokenType; + private string m_issuerEndpointUrl; + private string m_securityPolicyUri; + #endregion + } + + #region UserTokenPolicyCollection Class + /// + /// A collection of UserTokenPolicy objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfUserTokenPolicy", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "UserTokenPolicy")] + #if !NET_STANDARD + public partial class UserTokenPolicyCollection : List, ICloneable + #else + public partial class UserTokenPolicyCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public UserTokenPolicyCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public UserTokenPolicyCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public UserTokenPolicyCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator UserTokenPolicyCollection(UserTokenPolicy[] values) + { + if (values != null) + { + return new UserTokenPolicyCollection(values); + } + + return new UserTokenPolicyCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator UserTokenPolicy[](UserTokenPolicyCollection 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 (UserTokenPolicyCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + UserTokenPolicyCollection clone = new UserTokenPolicyCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((UserTokenPolicy)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EndpointDescription Class + #if (!OPCUA_EXCLUDE_EndpointDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EndpointDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EndpointDescription() + { + 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_endpointUrl = null; + m_server = new ApplicationDescription(); + m_serverCertificate = null; + m_securityMode = MessageSecurityMode.Invalid; + m_securityPolicyUri = null; + m_userIdentityTokens = new UserTokenPolicyCollection(); + m_transportProfileUri = null; + m_securityLevel = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "EndpointUrl", IsRequired = false, Order = 1)] + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + /// + /// + [DataMember(Name = "Server", IsRequired = false, Order = 2)] + public ApplicationDescription Server + { + get + { + return m_server; + } + + set + { + m_server = value; + + if (value == null) + { + m_server = new ApplicationDescription(); + } + } + } + + /// + [DataMember(Name = "ServerCertificate", IsRequired = false, Order = 3)] + public byte[] ServerCertificate + { + get { return m_serverCertificate; } + set { m_serverCertificate = value; } + } + + /// + [DataMember(Name = "SecurityMode", IsRequired = false, Order = 4)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + [DataMember(Name = "SecurityPolicyUri", IsRequired = false, Order = 5)] + public string SecurityPolicyUri + { + get { return m_securityPolicyUri; } + set { m_securityPolicyUri = value; } + } + + /// + /// + /// + [DataMember(Name = "UserIdentityTokens", IsRequired = false, Order = 6)] + public UserTokenPolicyCollection UserIdentityTokens + { + get + { + return m_userIdentityTokens; + } + + set + { + m_userIdentityTokens = value; + + if (value == null) + { + m_userIdentityTokens = new UserTokenPolicyCollection(); + } + } + } + + /// + [DataMember(Name = "TransportProfileUri", IsRequired = false, Order = 7)] + public string TransportProfileUri + { + get { return m_transportProfileUri; } + set { m_transportProfileUri = value; } + } + + /// + [DataMember(Name = "SecurityLevel", IsRequired = false, Order = 8)] + public byte SecurityLevel + { + get { return m_securityLevel; } + set { m_securityLevel = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EndpointDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EndpointDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EndpointDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("EndpointUrl", EndpointUrl); + encoder.WriteEncodeable("Server", Server, typeof(ApplicationDescription)); + encoder.WriteByteString("ServerCertificate", ServerCertificate); + encoder.WriteEnumerated("SecurityMode", SecurityMode); + encoder.WriteString("SecurityPolicyUri", SecurityPolicyUri); + encoder.WriteEncodeableArray("UserIdentityTokens", UserIdentityTokens.ToArray(), typeof(UserTokenPolicy)); + encoder.WriteString("TransportProfileUri", TransportProfileUri); + encoder.WriteByte("SecurityLevel", SecurityLevel); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EndpointUrl = decoder.ReadString("EndpointUrl"); + Server = (ApplicationDescription)decoder.ReadEncodeable("Server", typeof(ApplicationDescription)); + ServerCertificate = decoder.ReadByteString("ServerCertificate"); + SecurityMode = (MessageSecurityMode)decoder.ReadEnumerated("SecurityMode", typeof(MessageSecurityMode)); + SecurityPolicyUri = decoder.ReadString("SecurityPolicyUri"); + UserIdentityTokens = (UserTokenPolicyCollection)decoder.ReadEncodeableArray("UserIdentityTokens", typeof(UserTokenPolicy)); + TransportProfileUri = decoder.ReadString("TransportProfileUri"); + SecurityLevel = decoder.ReadByte("SecurityLevel"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EndpointDescription value = encodeable as EndpointDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_endpointUrl, value.m_endpointUrl)) return false; + if (!Utils.IsEqual(m_server, value.m_server)) return false; + if (!Utils.IsEqual(m_serverCertificate, value.m_serverCertificate)) return false; + if (!Utils.IsEqual(m_securityMode, value.m_securityMode)) return false; + if (!Utils.IsEqual(m_securityPolicyUri, value.m_securityPolicyUri)) return false; + if (!Utils.IsEqual(m_userIdentityTokens, value.m_userIdentityTokens)) return false; + if (!Utils.IsEqual(m_transportProfileUri, value.m_transportProfileUri)) return false; + if (!Utils.IsEqual(m_securityLevel, value.m_securityLevel)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EndpointDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EndpointDescription clone = (EndpointDescription)base.MemberwiseClone(); + + clone.m_endpointUrl = (string)Utils.Clone(this.m_endpointUrl); + clone.m_server = (ApplicationDescription)Utils.Clone(this.m_server); + clone.m_serverCertificate = (byte[])Utils.Clone(this.m_serverCertificate); + clone.m_securityMode = (MessageSecurityMode)Utils.Clone(this.m_securityMode); + clone.m_securityPolicyUri = (string)Utils.Clone(this.m_securityPolicyUri); + clone.m_userIdentityTokens = (UserTokenPolicyCollection)Utils.Clone(this.m_userIdentityTokens); + clone.m_transportProfileUri = (string)Utils.Clone(this.m_transportProfileUri); + clone.m_securityLevel = (byte)Utils.Clone(this.m_securityLevel); + + return clone; + } + #endregion + + #region Private Fields + private string m_endpointUrl; + private ApplicationDescription m_server; + private byte[] m_serverCertificate; + private MessageSecurityMode m_securityMode; + private string m_securityPolicyUri; + private UserTokenPolicyCollection m_userIdentityTokens; + private string m_transportProfileUri; + private byte m_securityLevel; + #endregion + } + + #region EndpointDescriptionCollection Class + /// + /// A collection of EndpointDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEndpointDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EndpointDescription")] + #if !NET_STANDARD + public partial class EndpointDescriptionCollection : List, ICloneable + #else + public partial class EndpointDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EndpointDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EndpointDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EndpointDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EndpointDescriptionCollection(EndpointDescription[] values) + { + if (values != null) + { + return new EndpointDescriptionCollection(values); + } + + return new EndpointDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EndpointDescription[](EndpointDescriptionCollection 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 (EndpointDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EndpointDescriptionCollection clone = new EndpointDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EndpointDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region GetEndpointsRequest Class + #if (!OPCUA_EXCLUDE_GetEndpointsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class GetEndpointsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public GetEndpointsRequest() + { + 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_requestHeader = new RequestHeader(); + m_endpointUrl = null; + m_localeIds = new StringCollection(); + m_profileUris = new StringCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "EndpointUrl", IsRequired = false, Order = 2)] + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + /// + /// + [DataMember(Name = "LocaleIds", IsRequired = false, Order = 3)] + public StringCollection LocaleIds + { + get + { + return m_localeIds; + } + + set + { + m_localeIds = value; + + if (value == null) + { + m_localeIds = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ProfileUris", IsRequired = false, Order = 4)] + public StringCollection ProfileUris + { + get + { + return m_profileUris; + } + + set + { + m_profileUris = value; + + if (value == null) + { + m_profileUris = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.GetEndpointsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.GetEndpointsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.GetEndpointsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteString("EndpointUrl", EndpointUrl); + encoder.WriteStringArray("LocaleIds", LocaleIds); + encoder.WriteStringArray("ProfileUris", ProfileUris); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + EndpointUrl = decoder.ReadString("EndpointUrl"); + LocaleIds = decoder.ReadStringArray("LocaleIds"); + ProfileUris = decoder.ReadStringArray("ProfileUris"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + GetEndpointsRequest value = encodeable as GetEndpointsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_endpointUrl, value.m_endpointUrl)) return false; + if (!Utils.IsEqual(m_localeIds, value.m_localeIds)) return false; + if (!Utils.IsEqual(m_profileUris, value.m_profileUris)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (GetEndpointsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + GetEndpointsRequest clone = (GetEndpointsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_endpointUrl = (string)Utils.Clone(this.m_endpointUrl); + clone.m_localeIds = (StringCollection)Utils.Clone(this.m_localeIds); + clone.m_profileUris = (StringCollection)Utils.Clone(this.m_profileUris); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private string m_endpointUrl; + private StringCollection m_localeIds; + private StringCollection m_profileUris; + #endregion + } + #endif + #endregion + + #region GetEndpointsResponse Class + #if (!OPCUA_EXCLUDE_GetEndpointsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class GetEndpointsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public GetEndpointsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_endpoints = new EndpointDescriptionCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Endpoints", IsRequired = false, Order = 2)] + public EndpointDescriptionCollection Endpoints + { + get + { + return m_endpoints; + } + + set + { + m_endpoints = value; + + if (value == null) + { + m_endpoints = new EndpointDescriptionCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.GetEndpointsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.GetEndpointsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.GetEndpointsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Endpoints", Endpoints.ToArray(), typeof(EndpointDescription)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Endpoints = (EndpointDescriptionCollection)decoder.ReadEncodeableArray("Endpoints", typeof(EndpointDescription)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + GetEndpointsResponse value = encodeable as GetEndpointsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_endpoints, value.m_endpoints)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (GetEndpointsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + GetEndpointsResponse clone = (GetEndpointsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_endpoints = (EndpointDescriptionCollection)Utils.Clone(this.m_endpoints); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private EndpointDescriptionCollection m_endpoints; + #endregion + } + #endif + #endregion + + #region RegisteredServer Class + #if (!OPCUA_EXCLUDE_RegisteredServer) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisteredServer : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisteredServer() + { + 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_serverUri = null; + m_productUri = null; + m_serverNames = new LocalizedTextCollection(); + m_serverType = ApplicationType.Server; + m_gatewayServerUri = null; + m_discoveryUrls = new StringCollection(); + m_semaphoreFilePath = null; + m_isOnline = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ServerUri", IsRequired = false, Order = 1)] + public string ServerUri + { + get { return m_serverUri; } + set { m_serverUri = value; } + } + + /// + [DataMember(Name = "ProductUri", IsRequired = false, Order = 2)] + public string ProductUri + { + get { return m_productUri; } + set { m_productUri = value; } + } + + /// + /// + /// + [DataMember(Name = "ServerNames", IsRequired = false, Order = 3)] + public LocalizedTextCollection ServerNames + { + get + { + return m_serverNames; + } + + set + { + m_serverNames = value; + + if (value == null) + { + m_serverNames = new LocalizedTextCollection(); + } + } + } + + /// + [DataMember(Name = "ServerType", IsRequired = false, Order = 4)] + public ApplicationType ServerType + { + get { return m_serverType; } + set { m_serverType = value; } + } + + /// + [DataMember(Name = "GatewayServerUri", IsRequired = false, Order = 5)] + public string GatewayServerUri + { + get { return m_gatewayServerUri; } + set { m_gatewayServerUri = value; } + } + + /// + /// + /// + [DataMember(Name = "DiscoveryUrls", IsRequired = false, Order = 6)] + public StringCollection DiscoveryUrls + { + get + { + return m_discoveryUrls; + } + + set + { + m_discoveryUrls = value; + + if (value == null) + { + m_discoveryUrls = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "SemaphoreFilePath", IsRequired = false, Order = 7)] + public string SemaphoreFilePath + { + get { return m_semaphoreFilePath; } + set { m_semaphoreFilePath = value; } + } + + /// + [DataMember(Name = "IsOnline", IsRequired = false, Order = 8)] + public bool IsOnline + { + get { return m_isOnline; } + set { m_isOnline = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisteredServer; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisteredServer_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisteredServer_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ServerUri", ServerUri); + encoder.WriteString("ProductUri", ProductUri); + encoder.WriteLocalizedTextArray("ServerNames", ServerNames); + encoder.WriteEnumerated("ServerType", ServerType); + encoder.WriteString("GatewayServerUri", GatewayServerUri); + encoder.WriteStringArray("DiscoveryUrls", DiscoveryUrls); + encoder.WriteString("SemaphoreFilePath", SemaphoreFilePath); + encoder.WriteBoolean("IsOnline", IsOnline); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ServerUri = decoder.ReadString("ServerUri"); + ProductUri = decoder.ReadString("ProductUri"); + ServerNames = decoder.ReadLocalizedTextArray("ServerNames"); + ServerType = (ApplicationType)decoder.ReadEnumerated("ServerType", typeof(ApplicationType)); + GatewayServerUri = decoder.ReadString("GatewayServerUri"); + DiscoveryUrls = decoder.ReadStringArray("DiscoveryUrls"); + SemaphoreFilePath = decoder.ReadString("SemaphoreFilePath"); + IsOnline = decoder.ReadBoolean("IsOnline"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisteredServer value = encodeable as RegisteredServer; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_serverUri, value.m_serverUri)) return false; + if (!Utils.IsEqual(m_productUri, value.m_productUri)) return false; + if (!Utils.IsEqual(m_serverNames, value.m_serverNames)) return false; + if (!Utils.IsEqual(m_serverType, value.m_serverType)) return false; + if (!Utils.IsEqual(m_gatewayServerUri, value.m_gatewayServerUri)) return false; + if (!Utils.IsEqual(m_discoveryUrls, value.m_discoveryUrls)) return false; + if (!Utils.IsEqual(m_semaphoreFilePath, value.m_semaphoreFilePath)) return false; + if (!Utils.IsEqual(m_isOnline, value.m_isOnline)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisteredServer)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisteredServer clone = (RegisteredServer)base.MemberwiseClone(); + + clone.m_serverUri = (string)Utils.Clone(this.m_serverUri); + clone.m_productUri = (string)Utils.Clone(this.m_productUri); + clone.m_serverNames = (LocalizedTextCollection)Utils.Clone(this.m_serverNames); + clone.m_serverType = (ApplicationType)Utils.Clone(this.m_serverType); + clone.m_gatewayServerUri = (string)Utils.Clone(this.m_gatewayServerUri); + clone.m_discoveryUrls = (StringCollection)Utils.Clone(this.m_discoveryUrls); + clone.m_semaphoreFilePath = (string)Utils.Clone(this.m_semaphoreFilePath); + clone.m_isOnline = (bool)Utils.Clone(this.m_isOnline); + + return clone; + } + #endregion + + #region Private Fields + private string m_serverUri; + private string m_productUri; + private LocalizedTextCollection m_serverNames; + private ApplicationType m_serverType; + private string m_gatewayServerUri; + private StringCollection m_discoveryUrls; + private string m_semaphoreFilePath; + private bool m_isOnline; + #endregion + } + + #region RegisteredServerCollection Class + /// + /// A collection of RegisteredServer objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfRegisteredServer", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "RegisteredServer")] + #if !NET_STANDARD + public partial class RegisteredServerCollection : List, ICloneable + #else + public partial class RegisteredServerCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public RegisteredServerCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public RegisteredServerCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public RegisteredServerCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator RegisteredServerCollection(RegisteredServer[] values) + { + if (values != null) + { + return new RegisteredServerCollection(values); + } + + return new RegisteredServerCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator RegisteredServer[](RegisteredServerCollection 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 (RegisteredServerCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + RegisteredServerCollection clone = new RegisteredServerCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((RegisteredServer)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region RegisterServerRequest Class + #if (!OPCUA_EXCLUDE_RegisterServerRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisterServerRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisterServerRequest() + { + 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_requestHeader = new RequestHeader(); + m_server = new RegisteredServer(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Server", IsRequired = false, Order = 2)] + public RegisteredServer Server + { + get + { + return m_server; + } + + set + { + m_server = value; + + if (value == null) + { + m_server = new RegisteredServer(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisterServerRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisterServerRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisterServerRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeable("Server", Server, typeof(RegisteredServer)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + Server = (RegisteredServer)decoder.ReadEncodeable("Server", typeof(RegisteredServer)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisterServerRequest value = encodeable as RegisterServerRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_server, value.m_server)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisterServerRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisterServerRequest clone = (RegisterServerRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_server = (RegisteredServer)Utils.Clone(this.m_server); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private RegisteredServer m_server; + #endregion + } + #endif + #endregion + + #region RegisterServerResponse Class + #if (!OPCUA_EXCLUDE_RegisterServerResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisterServerResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisterServerResponse() + { + 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_responseHeader = new ResponseHeader(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisterServerResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisterServerResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisterServerResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisterServerResponse value = encodeable as RegisterServerResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisterServerResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisterServerResponse clone = (RegisterServerResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + #endregion + } + #endif + #endregion + + #region DiscoveryConfiguration Class + #if (!OPCUA_EXCLUDE_DiscoveryConfiguration) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DiscoveryConfiguration : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DiscoveryConfiguration() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DiscoveryConfiguration; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DiscoveryConfiguration_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DiscoveryConfiguration_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DiscoveryConfiguration value = encodeable as DiscoveryConfiguration; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DiscoveryConfiguration)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DiscoveryConfiguration clone = (DiscoveryConfiguration)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region MdnsDiscoveryConfiguration Class + #if (!OPCUA_EXCLUDE_MdnsDiscoveryConfiguration) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MdnsDiscoveryConfiguration : DiscoveryConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public MdnsDiscoveryConfiguration() + { + 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_mdnsServerName = null; + m_serverCapabilities = new StringCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "MdnsServerName", IsRequired = false, Order = 1)] + public string MdnsServerName + { + get { return m_mdnsServerName; } + set { m_mdnsServerName = value; } + } + + /// + /// + /// + [DataMember(Name = "ServerCapabilities", IsRequired = false, Order = 2)] + public StringCollection ServerCapabilities + { + get + { + return m_serverCapabilities; + } + + set + { + m_serverCapabilities = value; + + if (value == null) + { + m_serverCapabilities = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.MdnsDiscoveryConfiguration; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MdnsDiscoveryConfiguration_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MdnsDiscoveryConfiguration_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("MdnsServerName", MdnsServerName); + encoder.WriteStringArray("ServerCapabilities", ServerCapabilities); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + MdnsServerName = decoder.ReadString("MdnsServerName"); + ServerCapabilities = decoder.ReadStringArray("ServerCapabilities"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MdnsDiscoveryConfiguration value = encodeable as MdnsDiscoveryConfiguration; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_mdnsServerName, value.m_mdnsServerName)) return false; + if (!Utils.IsEqual(m_serverCapabilities, value.m_serverCapabilities)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (MdnsDiscoveryConfiguration)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MdnsDiscoveryConfiguration clone = (MdnsDiscoveryConfiguration)base.MemberwiseClone(); + + clone.m_mdnsServerName = (string)Utils.Clone(this.m_mdnsServerName); + clone.m_serverCapabilities = (StringCollection)Utils.Clone(this.m_serverCapabilities); + + return clone; + } + #endregion + + #region Private Fields + private string m_mdnsServerName; + private StringCollection m_serverCapabilities; + #endregion + } + #endif + #endregion + + #region RegisterServer2Request Class + #if (!OPCUA_EXCLUDE_RegisterServer2Request) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisterServer2Request : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisterServer2Request() + { + 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_requestHeader = new RequestHeader(); + m_server = new RegisteredServer(); + m_discoveryConfiguration = new ExtensionObjectCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Server", IsRequired = false, Order = 2)] + public RegisteredServer Server + { + get + { + return m_server; + } + + set + { + m_server = value; + + if (value == null) + { + m_server = new RegisteredServer(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiscoveryConfiguration", IsRequired = false, Order = 3)] + public ExtensionObjectCollection DiscoveryConfiguration + { + get + { + return m_discoveryConfiguration; + } + + set + { + m_discoveryConfiguration = value; + + if (value == null) + { + m_discoveryConfiguration = new ExtensionObjectCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisterServer2Request; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisterServer2Request_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisterServer2Request_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeable("Server", Server, typeof(RegisteredServer)); + encoder.WriteExtensionObjectArray("DiscoveryConfiguration", DiscoveryConfiguration); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + Server = (RegisteredServer)decoder.ReadEncodeable("Server", typeof(RegisteredServer)); + DiscoveryConfiguration = decoder.ReadExtensionObjectArray("DiscoveryConfiguration"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisterServer2Request value = encodeable as RegisterServer2Request; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_server, value.m_server)) return false; + if (!Utils.IsEqual(m_discoveryConfiguration, value.m_discoveryConfiguration)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisterServer2Request)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisterServer2Request clone = (RegisterServer2Request)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_server = (RegisteredServer)Utils.Clone(this.m_server); + clone.m_discoveryConfiguration = (ExtensionObjectCollection)Utils.Clone(this.m_discoveryConfiguration); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private RegisteredServer m_server; + private ExtensionObjectCollection m_discoveryConfiguration; + #endregion + } + #endif + #endregion + + #region RegisterServer2Response Class + #if (!OPCUA_EXCLUDE_RegisterServer2Response) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisterServer2Response : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisterServer2Response() + { + 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_responseHeader = new ResponseHeader(); + m_configurationResults = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ConfigurationResults", IsRequired = false, Order = 2)] + public StatusCodeCollection ConfigurationResults + { + get + { + return m_configurationResults; + } + + set + { + m_configurationResults = value; + + if (value == null) + { + m_configurationResults = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisterServer2Response; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisterServer2Response_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisterServer2Response_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("ConfigurationResults", ConfigurationResults); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + ConfigurationResults = decoder.ReadStatusCodeArray("ConfigurationResults"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisterServer2Response value = encodeable as RegisterServer2Response; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_configurationResults, value.m_configurationResults)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisterServer2Response)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisterServer2Response clone = (RegisterServer2Response)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_configurationResults = (StatusCodeCollection)Utils.Clone(this.m_configurationResults); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_configurationResults; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region SecurityTokenRequestType Enumeration + #if (!OPCUA_EXCLUDE_SecurityTokenRequestType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum SecurityTokenRequestType + { + /// + [EnumMember(Value = "Issue_0")] + Issue = 0, + + /// + [EnumMember(Value = "Renew_1")] + Renew = 1, + } + #endif + #endregion + + #region ChannelSecurityToken Class + #if (!OPCUA_EXCLUDE_ChannelSecurityToken) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ChannelSecurityToken : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ChannelSecurityToken() + { + 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_channelId = (uint)0; + m_tokenId = (uint)0; + m_createdAt = DateTime.MinValue; + m_revisedLifetime = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ChannelId", IsRequired = false, Order = 1)] + public uint ChannelId + { + get { return m_channelId; } + set { m_channelId = value; } + } + + /// + [DataMember(Name = "TokenId", IsRequired = false, Order = 2)] + public uint TokenId + { + get { return m_tokenId; } + set { m_tokenId = value; } + } + + /// + [DataMember(Name = "CreatedAt", IsRequired = false, Order = 3)] + public DateTime CreatedAt + { + get { return m_createdAt; } + set { m_createdAt = value; } + } + + /// + [DataMember(Name = "RevisedLifetime", IsRequired = false, Order = 4)] + public uint RevisedLifetime + { + get { return m_revisedLifetime; } + set { m_revisedLifetime = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ChannelSecurityToken; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ChannelSecurityToken_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ChannelSecurityToken_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("ChannelId", ChannelId); + encoder.WriteUInt32("TokenId", TokenId); + encoder.WriteDateTime("CreatedAt", CreatedAt); + encoder.WriteUInt32("RevisedLifetime", RevisedLifetime); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ChannelId = decoder.ReadUInt32("ChannelId"); + TokenId = decoder.ReadUInt32("TokenId"); + CreatedAt = decoder.ReadDateTime("CreatedAt"); + RevisedLifetime = decoder.ReadUInt32("RevisedLifetime"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ChannelSecurityToken value = encodeable as ChannelSecurityToken; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_channelId, value.m_channelId)) return false; + if (!Utils.IsEqual(m_tokenId, value.m_tokenId)) return false; + if (!Utils.IsEqual(m_createdAt, value.m_createdAt)) return false; + if (!Utils.IsEqual(m_revisedLifetime, value.m_revisedLifetime)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ChannelSecurityToken)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ChannelSecurityToken clone = (ChannelSecurityToken)base.MemberwiseClone(); + + clone.m_channelId = (uint)Utils.Clone(this.m_channelId); + clone.m_tokenId = (uint)Utils.Clone(this.m_tokenId); + clone.m_createdAt = (DateTime)Utils.Clone(this.m_createdAt); + clone.m_revisedLifetime = (uint)Utils.Clone(this.m_revisedLifetime); + + return clone; + } + #endregion + + #region Private Fields + private uint m_channelId; + private uint m_tokenId; + private DateTime m_createdAt; + private uint m_revisedLifetime; + #endregion + } + #endif + #endregion + + #region OpenSecureChannelRequest Class + #if (!OPCUA_EXCLUDE_OpenSecureChannelRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class OpenSecureChannelRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public OpenSecureChannelRequest() + { + 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_requestHeader = new RequestHeader(); + m_clientProtocolVersion = (uint)0; + m_requestType = SecurityTokenRequestType.Issue; + m_securityMode = MessageSecurityMode.Invalid; + m_clientNonce = null; + m_requestedLifetime = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "ClientProtocolVersion", IsRequired = false, Order = 2)] + public uint ClientProtocolVersion + { + get { return m_clientProtocolVersion; } + set { m_clientProtocolVersion = value; } + } + + /// + [DataMember(Name = "RequestType", IsRequired = false, Order = 3)] + public SecurityTokenRequestType RequestType + { + get { return m_requestType; } + set { m_requestType = value; } + } + + /// + [DataMember(Name = "SecurityMode", IsRequired = false, Order = 4)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + [DataMember(Name = "ClientNonce", IsRequired = false, Order = 5)] + public byte[] ClientNonce + { + get { return m_clientNonce; } + set { m_clientNonce = value; } + } + + /// + [DataMember(Name = "RequestedLifetime", IsRequired = false, Order = 6)] + public uint RequestedLifetime + { + get { return m_requestedLifetime; } + set { m_requestedLifetime = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.OpenSecureChannelRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.OpenSecureChannelRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.OpenSecureChannelRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("ClientProtocolVersion", ClientProtocolVersion); + encoder.WriteEnumerated("RequestType", RequestType); + encoder.WriteEnumerated("SecurityMode", SecurityMode); + encoder.WriteByteString("ClientNonce", ClientNonce); + encoder.WriteUInt32("RequestedLifetime", RequestedLifetime); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ClientProtocolVersion = decoder.ReadUInt32("ClientProtocolVersion"); + RequestType = (SecurityTokenRequestType)decoder.ReadEnumerated("RequestType", typeof(SecurityTokenRequestType)); + SecurityMode = (MessageSecurityMode)decoder.ReadEnumerated("SecurityMode", typeof(MessageSecurityMode)); + ClientNonce = decoder.ReadByteString("ClientNonce"); + RequestedLifetime = decoder.ReadUInt32("RequestedLifetime"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + OpenSecureChannelRequest value = encodeable as OpenSecureChannelRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_clientProtocolVersion, value.m_clientProtocolVersion)) return false; + if (!Utils.IsEqual(m_requestType, value.m_requestType)) return false; + if (!Utils.IsEqual(m_securityMode, value.m_securityMode)) return false; + if (!Utils.IsEqual(m_clientNonce, value.m_clientNonce)) return false; + if (!Utils.IsEqual(m_requestedLifetime, value.m_requestedLifetime)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (OpenSecureChannelRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + OpenSecureChannelRequest clone = (OpenSecureChannelRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_clientProtocolVersion = (uint)Utils.Clone(this.m_clientProtocolVersion); + clone.m_requestType = (SecurityTokenRequestType)Utils.Clone(this.m_requestType); + clone.m_securityMode = (MessageSecurityMode)Utils.Clone(this.m_securityMode); + clone.m_clientNonce = (byte[])Utils.Clone(this.m_clientNonce); + clone.m_requestedLifetime = (uint)Utils.Clone(this.m_requestedLifetime); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_clientProtocolVersion; + private SecurityTokenRequestType m_requestType; + private MessageSecurityMode m_securityMode; + private byte[] m_clientNonce; + private uint m_requestedLifetime; + #endregion + } + #endif + #endregion + + #region OpenSecureChannelResponse Class + #if (!OPCUA_EXCLUDE_OpenSecureChannelResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class OpenSecureChannelResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public OpenSecureChannelResponse() + { + 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_responseHeader = new ResponseHeader(); + m_serverProtocolVersion = (uint)0; + m_securityToken = new ChannelSecurityToken(); + m_serverNonce = null; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "ServerProtocolVersion", IsRequired = false, Order = 2)] + public uint ServerProtocolVersion + { + get { return m_serverProtocolVersion; } + set { m_serverProtocolVersion = value; } + } + + /// + /// + /// + [DataMember(Name = "SecurityToken", IsRequired = false, Order = 3)] + public ChannelSecurityToken SecurityToken + { + get + { + return m_securityToken; + } + + set + { + m_securityToken = value; + + if (value == null) + { + m_securityToken = new ChannelSecurityToken(); + } + } + } + + /// + [DataMember(Name = "ServerNonce", IsRequired = false, Order = 4)] + public byte[] ServerNonce + { + get { return m_serverNonce; } + set { m_serverNonce = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.OpenSecureChannelResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.OpenSecureChannelResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.OpenSecureChannelResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteUInt32("ServerProtocolVersion", ServerProtocolVersion); + encoder.WriteEncodeable("SecurityToken", SecurityToken, typeof(ChannelSecurityToken)); + encoder.WriteByteString("ServerNonce", ServerNonce); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + ServerProtocolVersion = decoder.ReadUInt32("ServerProtocolVersion"); + SecurityToken = (ChannelSecurityToken)decoder.ReadEncodeable("SecurityToken", typeof(ChannelSecurityToken)); + ServerNonce = decoder.ReadByteString("ServerNonce"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + OpenSecureChannelResponse value = encodeable as OpenSecureChannelResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_serverProtocolVersion, value.m_serverProtocolVersion)) return false; + if (!Utils.IsEqual(m_securityToken, value.m_securityToken)) return false; + if (!Utils.IsEqual(m_serverNonce, value.m_serverNonce)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (OpenSecureChannelResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + OpenSecureChannelResponse clone = (OpenSecureChannelResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_serverProtocolVersion = (uint)Utils.Clone(this.m_serverProtocolVersion); + clone.m_securityToken = (ChannelSecurityToken)Utils.Clone(this.m_securityToken); + clone.m_serverNonce = (byte[])Utils.Clone(this.m_serverNonce); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private uint m_serverProtocolVersion; + private ChannelSecurityToken m_securityToken; + private byte[] m_serverNonce; + #endregion + } + #endif + #endregion + + #region CloseSecureChannelRequest Class + #if (!OPCUA_EXCLUDE_CloseSecureChannelRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CloseSecureChannelRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CloseSecureChannelRequest() + { + 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_requestHeader = new RequestHeader(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CloseSecureChannelRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CloseSecureChannelRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CloseSecureChannelRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CloseSecureChannelRequest value = encodeable as CloseSecureChannelRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CloseSecureChannelRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CloseSecureChannelRequest clone = (CloseSecureChannelRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + #endregion + } + #endif + #endregion + + #region CloseSecureChannelResponse Class + #if (!OPCUA_EXCLUDE_CloseSecureChannelResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CloseSecureChannelResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CloseSecureChannelResponse() + { + 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_responseHeader = new ResponseHeader(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CloseSecureChannelResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CloseSecureChannelResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CloseSecureChannelResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CloseSecureChannelResponse value = encodeable as CloseSecureChannelResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CloseSecureChannelResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CloseSecureChannelResponse clone = (CloseSecureChannelResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + #endregion + } + #endif + #endregion + + #region SignedSoftwareCertificate Class + #if (!OPCUA_EXCLUDE_SignedSoftwareCertificate) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SignedSoftwareCertificate : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SignedSoftwareCertificate() + { + 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_certificateData = null; + m_signature = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "CertificateData", IsRequired = false, Order = 1)] + public byte[] CertificateData + { + get { return m_certificateData; } + set { m_certificateData = value; } + } + + /// + [DataMember(Name = "Signature", IsRequired = false, Order = 2)] + public byte[] Signature + { + get { return m_signature; } + set { m_signature = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SignedSoftwareCertificate; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SignedSoftwareCertificate_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SignedSoftwareCertificate_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByteString("CertificateData", CertificateData); + encoder.WriteByteString("Signature", Signature); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + CertificateData = decoder.ReadByteString("CertificateData"); + Signature = decoder.ReadByteString("Signature"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SignedSoftwareCertificate value = encodeable as SignedSoftwareCertificate; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_certificateData, value.m_certificateData)) return false; + if (!Utils.IsEqual(m_signature, value.m_signature)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SignedSoftwareCertificate)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SignedSoftwareCertificate clone = (SignedSoftwareCertificate)base.MemberwiseClone(); + + clone.m_certificateData = (byte[])Utils.Clone(this.m_certificateData); + clone.m_signature = (byte[])Utils.Clone(this.m_signature); + + return clone; + } + #endregion + + #region Private Fields + private byte[] m_certificateData; + private byte[] m_signature; + #endregion + } + + #region SignedSoftwareCertificateCollection Class + /// + /// A collection of SignedSoftwareCertificate objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSignedSoftwareCertificate", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SignedSoftwareCertificate")] + #if !NET_STANDARD + public partial class SignedSoftwareCertificateCollection : List, ICloneable + #else + public partial class SignedSoftwareCertificateCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SignedSoftwareCertificateCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SignedSoftwareCertificateCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SignedSoftwareCertificateCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SignedSoftwareCertificateCollection(SignedSoftwareCertificate[] values) + { + if (values != null) + { + return new SignedSoftwareCertificateCollection(values); + } + + return new SignedSoftwareCertificateCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SignedSoftwareCertificate[](SignedSoftwareCertificateCollection 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 (SignedSoftwareCertificateCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SignedSoftwareCertificateCollection clone = new SignedSoftwareCertificateCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SignedSoftwareCertificate)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SignatureData Class + #if (!OPCUA_EXCLUDE_SignatureData) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SignatureData : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SignatureData() + { + 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_algorithm = null; + m_signature = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Algorithm", IsRequired = false, Order = 1)] + public string Algorithm + { + get { return m_algorithm; } + set { m_algorithm = value; } + } + + /// + [DataMember(Name = "Signature", IsRequired = false, Order = 2)] + public byte[] Signature + { + get { return m_signature; } + set { m_signature = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SignatureData; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SignatureData_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SignatureData_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Algorithm", Algorithm); + encoder.WriteByteString("Signature", Signature); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Algorithm = decoder.ReadString("Algorithm"); + Signature = decoder.ReadByteString("Signature"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SignatureData value = encodeable as SignatureData; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_algorithm, value.m_algorithm)) return false; + if (!Utils.IsEqual(m_signature, value.m_signature)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SignatureData)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SignatureData clone = (SignatureData)base.MemberwiseClone(); + + clone.m_algorithm = (string)Utils.Clone(this.m_algorithm); + clone.m_signature = (byte[])Utils.Clone(this.m_signature); + + return clone; + } + #endregion + + #region Private Fields + private string m_algorithm; + private byte[] m_signature; + #endregion + } + #endif + #endregion + + #region CreateSessionRequest Class + #if (!OPCUA_EXCLUDE_CreateSessionRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CreateSessionRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CreateSessionRequest() + { + 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_requestHeader = new RequestHeader(); + m_clientDescription = new ApplicationDescription(); + m_serverUri = null; + m_endpointUrl = null; + m_sessionName = null; + m_clientNonce = null; + m_clientCertificate = null; + m_requestedSessionTimeout = (double)0; + m_maxResponseMessageSize = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ClientDescription", IsRequired = false, Order = 2)] + public ApplicationDescription ClientDescription + { + get + { + return m_clientDescription; + } + + set + { + m_clientDescription = value; + + if (value == null) + { + m_clientDescription = new ApplicationDescription(); + } + } + } + + /// + [DataMember(Name = "ServerUri", IsRequired = false, Order = 3)] + public string ServerUri + { + get { return m_serverUri; } + set { m_serverUri = value; } + } + + /// + [DataMember(Name = "EndpointUrl", IsRequired = false, Order = 4)] + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + [DataMember(Name = "SessionName", IsRequired = false, Order = 5)] + public string SessionName + { + get { return m_sessionName; } + set { m_sessionName = value; } + } + + /// + [DataMember(Name = "ClientNonce", IsRequired = false, Order = 6)] + public byte[] ClientNonce + { + get { return m_clientNonce; } + set { m_clientNonce = value; } + } + + /// + [DataMember(Name = "ClientCertificate", IsRequired = false, Order = 7)] + public byte[] ClientCertificate + { + get { return m_clientCertificate; } + set { m_clientCertificate = value; } + } + + /// + [DataMember(Name = "RequestedSessionTimeout", IsRequired = false, Order = 8)] + public double RequestedSessionTimeout + { + get { return m_requestedSessionTimeout; } + set { m_requestedSessionTimeout = value; } + } + + /// + [DataMember(Name = "MaxResponseMessageSize", IsRequired = false, Order = 9)] + public uint MaxResponseMessageSize + { + get { return m_maxResponseMessageSize; } + set { m_maxResponseMessageSize = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CreateSessionRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CreateSessionRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CreateSessionRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeable("ClientDescription", ClientDescription, typeof(ApplicationDescription)); + encoder.WriteString("ServerUri", ServerUri); + encoder.WriteString("EndpointUrl", EndpointUrl); + encoder.WriteString("SessionName", SessionName); + encoder.WriteByteString("ClientNonce", ClientNonce); + encoder.WriteByteString("ClientCertificate", ClientCertificate); + encoder.WriteDouble("RequestedSessionTimeout", RequestedSessionTimeout); + encoder.WriteUInt32("MaxResponseMessageSize", MaxResponseMessageSize); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ClientDescription = (ApplicationDescription)decoder.ReadEncodeable("ClientDescription", typeof(ApplicationDescription)); + ServerUri = decoder.ReadString("ServerUri"); + EndpointUrl = decoder.ReadString("EndpointUrl"); + SessionName = decoder.ReadString("SessionName"); + ClientNonce = decoder.ReadByteString("ClientNonce"); + ClientCertificate = decoder.ReadByteString("ClientCertificate"); + RequestedSessionTimeout = decoder.ReadDouble("RequestedSessionTimeout"); + MaxResponseMessageSize = decoder.ReadUInt32("MaxResponseMessageSize"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CreateSessionRequest value = encodeable as CreateSessionRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_clientDescription, value.m_clientDescription)) return false; + if (!Utils.IsEqual(m_serverUri, value.m_serverUri)) return false; + if (!Utils.IsEqual(m_endpointUrl, value.m_endpointUrl)) return false; + if (!Utils.IsEqual(m_sessionName, value.m_sessionName)) return false; + if (!Utils.IsEqual(m_clientNonce, value.m_clientNonce)) return false; + if (!Utils.IsEqual(m_clientCertificate, value.m_clientCertificate)) return false; + if (!Utils.IsEqual(m_requestedSessionTimeout, value.m_requestedSessionTimeout)) return false; + if (!Utils.IsEqual(m_maxResponseMessageSize, value.m_maxResponseMessageSize)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CreateSessionRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CreateSessionRequest clone = (CreateSessionRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_clientDescription = (ApplicationDescription)Utils.Clone(this.m_clientDescription); + clone.m_serverUri = (string)Utils.Clone(this.m_serverUri); + clone.m_endpointUrl = (string)Utils.Clone(this.m_endpointUrl); + clone.m_sessionName = (string)Utils.Clone(this.m_sessionName); + clone.m_clientNonce = (byte[])Utils.Clone(this.m_clientNonce); + clone.m_clientCertificate = (byte[])Utils.Clone(this.m_clientCertificate); + clone.m_requestedSessionTimeout = (double)Utils.Clone(this.m_requestedSessionTimeout); + clone.m_maxResponseMessageSize = (uint)Utils.Clone(this.m_maxResponseMessageSize); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private ApplicationDescription m_clientDescription; + private string m_serverUri; + private string m_endpointUrl; + private string m_sessionName; + private byte[] m_clientNonce; + private byte[] m_clientCertificate; + private double m_requestedSessionTimeout; + private uint m_maxResponseMessageSize; + #endregion + } + #endif + #endregion + + #region CreateSessionResponse Class + #if (!OPCUA_EXCLUDE_CreateSessionResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CreateSessionResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CreateSessionResponse() + { + 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_responseHeader = new ResponseHeader(); + m_sessionId = null; + m_authenticationToken = null; + m_revisedSessionTimeout = (double)0; + m_serverNonce = null; + m_serverCertificate = null; + m_serverEndpoints = new EndpointDescriptionCollection(); + m_serverSoftwareCertificates = new SignedSoftwareCertificateCollection(); + m_serverSignature = new SignatureData(); + m_maxRequestMessageSize = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "SessionId", IsRequired = false, Order = 2)] + public NodeId SessionId + { + get { return m_sessionId; } + set { m_sessionId = value; } + } + + /// + [DataMember(Name = "AuthenticationToken", IsRequired = false, Order = 3)] + public NodeId AuthenticationToken + { + get { return m_authenticationToken; } + set { m_authenticationToken = value; } + } + + /// + [DataMember(Name = "RevisedSessionTimeout", IsRequired = false, Order = 4)] + public double RevisedSessionTimeout + { + get { return m_revisedSessionTimeout; } + set { m_revisedSessionTimeout = value; } + } + + /// + [DataMember(Name = "ServerNonce", IsRequired = false, Order = 5)] + public byte[] ServerNonce + { + get { return m_serverNonce; } + set { m_serverNonce = value; } + } + + /// + [DataMember(Name = "ServerCertificate", IsRequired = false, Order = 6)] + public byte[] ServerCertificate + { + get { return m_serverCertificate; } + set { m_serverCertificate = value; } + } + + /// + /// + /// + [DataMember(Name = "ServerEndpoints", IsRequired = false, Order = 7)] + public EndpointDescriptionCollection ServerEndpoints + { + get + { + return m_serverEndpoints; + } + + set + { + m_serverEndpoints = value; + + if (value == null) + { + m_serverEndpoints = new EndpointDescriptionCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ServerSoftwareCertificates", IsRequired = false, Order = 8)] + public SignedSoftwareCertificateCollection ServerSoftwareCertificates + { + get + { + return m_serverSoftwareCertificates; + } + + set + { + m_serverSoftwareCertificates = value; + + if (value == null) + { + m_serverSoftwareCertificates = new SignedSoftwareCertificateCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ServerSignature", IsRequired = false, Order = 9)] + public SignatureData ServerSignature + { + get + { + return m_serverSignature; + } + + set + { + m_serverSignature = value; + + if (value == null) + { + m_serverSignature = new SignatureData(); + } + } + } + + /// + [DataMember(Name = "MaxRequestMessageSize", IsRequired = false, Order = 10)] + public uint MaxRequestMessageSize + { + get { return m_maxRequestMessageSize; } + set { m_maxRequestMessageSize = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CreateSessionResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CreateSessionResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CreateSessionResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteNodeId("SessionId", SessionId); + encoder.WriteNodeId("AuthenticationToken", AuthenticationToken); + encoder.WriteDouble("RevisedSessionTimeout", RevisedSessionTimeout); + encoder.WriteByteString("ServerNonce", ServerNonce); + encoder.WriteByteString("ServerCertificate", ServerCertificate); + encoder.WriteEncodeableArray("ServerEndpoints", ServerEndpoints.ToArray(), typeof(EndpointDescription)); + encoder.WriteEncodeableArray("ServerSoftwareCertificates", ServerSoftwareCertificates.ToArray(), typeof(SignedSoftwareCertificate)); + encoder.WriteEncodeable("ServerSignature", ServerSignature, typeof(SignatureData)); + encoder.WriteUInt32("MaxRequestMessageSize", MaxRequestMessageSize); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + SessionId = decoder.ReadNodeId("SessionId"); + AuthenticationToken = decoder.ReadNodeId("AuthenticationToken"); + RevisedSessionTimeout = decoder.ReadDouble("RevisedSessionTimeout"); + ServerNonce = decoder.ReadByteString("ServerNonce"); + ServerCertificate = decoder.ReadByteString("ServerCertificate"); + ServerEndpoints = (EndpointDescriptionCollection)decoder.ReadEncodeableArray("ServerEndpoints", typeof(EndpointDescription)); + ServerSoftwareCertificates = (SignedSoftwareCertificateCollection)decoder.ReadEncodeableArray("ServerSoftwareCertificates", typeof(SignedSoftwareCertificate)); + ServerSignature = (SignatureData)decoder.ReadEncodeable("ServerSignature", typeof(SignatureData)); + MaxRequestMessageSize = decoder.ReadUInt32("MaxRequestMessageSize"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CreateSessionResponse value = encodeable as CreateSessionResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_sessionId, value.m_sessionId)) return false; + if (!Utils.IsEqual(m_authenticationToken, value.m_authenticationToken)) return false; + if (!Utils.IsEqual(m_revisedSessionTimeout, value.m_revisedSessionTimeout)) return false; + if (!Utils.IsEqual(m_serverNonce, value.m_serverNonce)) return false; + if (!Utils.IsEqual(m_serverCertificate, value.m_serverCertificate)) return false; + if (!Utils.IsEqual(m_serverEndpoints, value.m_serverEndpoints)) return false; + if (!Utils.IsEqual(m_serverSoftwareCertificates, value.m_serverSoftwareCertificates)) return false; + if (!Utils.IsEqual(m_serverSignature, value.m_serverSignature)) return false; + if (!Utils.IsEqual(m_maxRequestMessageSize, value.m_maxRequestMessageSize)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CreateSessionResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CreateSessionResponse clone = (CreateSessionResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_sessionId = (NodeId)Utils.Clone(this.m_sessionId); + clone.m_authenticationToken = (NodeId)Utils.Clone(this.m_authenticationToken); + clone.m_revisedSessionTimeout = (double)Utils.Clone(this.m_revisedSessionTimeout); + clone.m_serverNonce = (byte[])Utils.Clone(this.m_serverNonce); + clone.m_serverCertificate = (byte[])Utils.Clone(this.m_serverCertificate); + clone.m_serverEndpoints = (EndpointDescriptionCollection)Utils.Clone(this.m_serverEndpoints); + clone.m_serverSoftwareCertificates = (SignedSoftwareCertificateCollection)Utils.Clone(this.m_serverSoftwareCertificates); + clone.m_serverSignature = (SignatureData)Utils.Clone(this.m_serverSignature); + clone.m_maxRequestMessageSize = (uint)Utils.Clone(this.m_maxRequestMessageSize); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private NodeId m_sessionId; + private NodeId m_authenticationToken; + private double m_revisedSessionTimeout; + private byte[] m_serverNonce; + private byte[] m_serverCertificate; + private EndpointDescriptionCollection m_serverEndpoints; + private SignedSoftwareCertificateCollection m_serverSoftwareCertificates; + private SignatureData m_serverSignature; + private uint m_maxRequestMessageSize; + #endregion + } + #endif + #endregion + + #region UserIdentityToken Class + #if (!OPCUA_EXCLUDE_UserIdentityToken) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UserIdentityToken : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public UserIdentityToken() + { + 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_policyId = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "PolicyId", IsRequired = false, Order = 1)] + public string PolicyId + { + get { return m_policyId; } + set { m_policyId = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.UserIdentityToken; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UserIdentityToken_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UserIdentityToken_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("PolicyId", PolicyId); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PolicyId = decoder.ReadString("PolicyId"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UserIdentityToken value = encodeable as UserIdentityToken; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_policyId, value.m_policyId)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (UserIdentityToken)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UserIdentityToken clone = (UserIdentityToken)base.MemberwiseClone(); + + clone.m_policyId = (string)Utils.Clone(this.m_policyId); + + return clone; + } + #endregion + + #region Private Fields + private string m_policyId; + #endregion + } + #endif + #endregion + + #region AnonymousIdentityToken Class + #if (!OPCUA_EXCLUDE_AnonymousIdentityToken) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AnonymousIdentityToken : UserIdentityToken + { + #region Constructors + /// + /// The default constructor. + /// + public AnonymousIdentityToken() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.AnonymousIdentityToken; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AnonymousIdentityToken_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AnonymousIdentityToken_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AnonymousIdentityToken value = encodeable as AnonymousIdentityToken; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (AnonymousIdentityToken)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AnonymousIdentityToken clone = (AnonymousIdentityToken)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region UserNameIdentityToken Class + #if (!OPCUA_EXCLUDE_UserNameIdentityToken) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UserNameIdentityToken : UserIdentityToken + { + #region Constructors + /// + /// The default constructor. + /// + public UserNameIdentityToken() + { + 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_userName = null; + m_password = null; + m_encryptionAlgorithm = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "UserName", IsRequired = false, Order = 1)] + public string UserName + { + get { return m_userName; } + set { m_userName = value; } + } + + /// + [DataMember(Name = "Password", IsRequired = false, Order = 2)] + public byte[] Password + { + get { return m_password; } + set { m_password = value; } + } + + /// + [DataMember(Name = "EncryptionAlgorithm", IsRequired = false, Order = 3)] + public string EncryptionAlgorithm + { + get { return m_encryptionAlgorithm; } + set { m_encryptionAlgorithm = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UserNameIdentityToken; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UserNameIdentityToken_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UserNameIdentityToken_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("UserName", UserName); + encoder.WriteByteString("Password", Password); + encoder.WriteString("EncryptionAlgorithm", EncryptionAlgorithm); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + UserName = decoder.ReadString("UserName"); + Password = decoder.ReadByteString("Password"); + EncryptionAlgorithm = decoder.ReadString("EncryptionAlgorithm"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UserNameIdentityToken value = encodeable as UserNameIdentityToken; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_userName, value.m_userName)) return false; + if (!Utils.IsEqual(m_password, value.m_password)) return false; + if (!Utils.IsEqual(m_encryptionAlgorithm, value.m_encryptionAlgorithm)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UserNameIdentityToken)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UserNameIdentityToken clone = (UserNameIdentityToken)base.MemberwiseClone(); + + clone.m_userName = (string)Utils.Clone(this.m_userName); + clone.m_password = (byte[])Utils.Clone(this.m_password); + clone.m_encryptionAlgorithm = (string)Utils.Clone(this.m_encryptionAlgorithm); + + return clone; + } + #endregion + + #region Private Fields + private string m_userName; + private byte[] m_password; + private string m_encryptionAlgorithm; + #endregion + } + #endif + #endregion + + #region X509IdentityToken Class + #if (!OPCUA_EXCLUDE_X509IdentityToken) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class X509IdentityToken : UserIdentityToken + { + #region Constructors + /// + /// The default constructor. + /// + public X509IdentityToken() + { + 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_certificateData = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "CertificateData", IsRequired = false, Order = 1)] + public byte[] CertificateData + { + get { return m_certificateData; } + set { m_certificateData = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.X509IdentityToken; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.X509IdentityToken_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.X509IdentityToken_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByteString("CertificateData", CertificateData); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + CertificateData = decoder.ReadByteString("CertificateData"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + X509IdentityToken value = encodeable as X509IdentityToken; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_certificateData, value.m_certificateData)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (X509IdentityToken)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + X509IdentityToken clone = (X509IdentityToken)base.MemberwiseClone(); + + clone.m_certificateData = (byte[])Utils.Clone(this.m_certificateData); + + return clone; + } + #endregion + + #region Private Fields + private byte[] m_certificateData; + #endregion + } + #endif + #endregion + + #region IssuedIdentityToken Class + #if (!OPCUA_EXCLUDE_IssuedIdentityToken) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class IssuedIdentityToken : UserIdentityToken + { + #region Constructors + /// + /// The default constructor. + /// + public IssuedIdentityToken() + { + 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_tokenData = null; + m_encryptionAlgorithm = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "TokenData", IsRequired = false, Order = 1)] + public byte[] TokenData + { + get { return m_tokenData; } + set { m_tokenData = value; } + } + + /// + [DataMember(Name = "EncryptionAlgorithm", IsRequired = false, Order = 2)] + public string EncryptionAlgorithm + { + get { return m_encryptionAlgorithm; } + set { m_encryptionAlgorithm = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.IssuedIdentityToken; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.IssuedIdentityToken_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.IssuedIdentityToken_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByteString("TokenData", TokenData); + encoder.WriteString("EncryptionAlgorithm", EncryptionAlgorithm); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TokenData = decoder.ReadByteString("TokenData"); + EncryptionAlgorithm = decoder.ReadString("EncryptionAlgorithm"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + IssuedIdentityToken value = encodeable as IssuedIdentityToken; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_tokenData, value.m_tokenData)) return false; + if (!Utils.IsEqual(m_encryptionAlgorithm, value.m_encryptionAlgorithm)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (IssuedIdentityToken)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + IssuedIdentityToken clone = (IssuedIdentityToken)base.MemberwiseClone(); + + clone.m_tokenData = (byte[])Utils.Clone(this.m_tokenData); + clone.m_encryptionAlgorithm = (string)Utils.Clone(this.m_encryptionAlgorithm); + + return clone; + } + #endregion + + #region Private Fields + private byte[] m_tokenData; + private string m_encryptionAlgorithm; + #endregion + } + #endif + #endregion + + #region ActivateSessionRequest Class + #if (!OPCUA_EXCLUDE_ActivateSessionRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ActivateSessionRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ActivateSessionRequest() + { + 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_requestHeader = new RequestHeader(); + m_clientSignature = new SignatureData(); + m_clientSoftwareCertificates = new SignedSoftwareCertificateCollection(); + m_localeIds = new StringCollection(); + m_userIdentityToken = null; + m_userTokenSignature = new SignatureData(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ClientSignature", IsRequired = false, Order = 2)] + public SignatureData ClientSignature + { + get + { + return m_clientSignature; + } + + set + { + m_clientSignature = value; + + if (value == null) + { + m_clientSignature = new SignatureData(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ClientSoftwareCertificates", IsRequired = false, Order = 3)] + public SignedSoftwareCertificateCollection ClientSoftwareCertificates + { + get + { + return m_clientSoftwareCertificates; + } + + set + { + m_clientSoftwareCertificates = value; + + if (value == null) + { + m_clientSoftwareCertificates = new SignedSoftwareCertificateCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LocaleIds", IsRequired = false, Order = 4)] + public StringCollection LocaleIds + { + get + { + return m_localeIds; + } + + set + { + m_localeIds = value; + + if (value == null) + { + m_localeIds = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "UserIdentityToken", IsRequired = false, Order = 5)] + public ExtensionObject UserIdentityToken + { + get { return m_userIdentityToken; } + set { m_userIdentityToken = value; } + } + + /// + /// + /// + [DataMember(Name = "UserTokenSignature", IsRequired = false, Order = 6)] + public SignatureData UserTokenSignature + { + get + { + return m_userTokenSignature; + } + + set + { + m_userTokenSignature = value; + + if (value == null) + { + m_userTokenSignature = new SignatureData(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ActivateSessionRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ActivateSessionRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ActivateSessionRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeable("ClientSignature", ClientSignature, typeof(SignatureData)); + encoder.WriteEncodeableArray("ClientSoftwareCertificates", ClientSoftwareCertificates.ToArray(), typeof(SignedSoftwareCertificate)); + encoder.WriteStringArray("LocaleIds", LocaleIds); + encoder.WriteExtensionObject("UserIdentityToken", UserIdentityToken); + encoder.WriteEncodeable("UserTokenSignature", UserTokenSignature, typeof(SignatureData)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ClientSignature = (SignatureData)decoder.ReadEncodeable("ClientSignature", typeof(SignatureData)); + ClientSoftwareCertificates = (SignedSoftwareCertificateCollection)decoder.ReadEncodeableArray("ClientSoftwareCertificates", typeof(SignedSoftwareCertificate)); + LocaleIds = decoder.ReadStringArray("LocaleIds"); + UserIdentityToken = decoder.ReadExtensionObject("UserIdentityToken"); + UserTokenSignature = (SignatureData)decoder.ReadEncodeable("UserTokenSignature", typeof(SignatureData)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ActivateSessionRequest value = encodeable as ActivateSessionRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_clientSignature, value.m_clientSignature)) return false; + if (!Utils.IsEqual(m_clientSoftwareCertificates, value.m_clientSoftwareCertificates)) return false; + if (!Utils.IsEqual(m_localeIds, value.m_localeIds)) return false; + if (!Utils.IsEqual(m_userIdentityToken, value.m_userIdentityToken)) return false; + if (!Utils.IsEqual(m_userTokenSignature, value.m_userTokenSignature)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ActivateSessionRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ActivateSessionRequest clone = (ActivateSessionRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_clientSignature = (SignatureData)Utils.Clone(this.m_clientSignature); + clone.m_clientSoftwareCertificates = (SignedSoftwareCertificateCollection)Utils.Clone(this.m_clientSoftwareCertificates); + clone.m_localeIds = (StringCollection)Utils.Clone(this.m_localeIds); + clone.m_userIdentityToken = (ExtensionObject)Utils.Clone(this.m_userIdentityToken); + clone.m_userTokenSignature = (SignatureData)Utils.Clone(this.m_userTokenSignature); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private SignatureData m_clientSignature; + private SignedSoftwareCertificateCollection m_clientSoftwareCertificates; + private StringCollection m_localeIds; + private ExtensionObject m_userIdentityToken; + private SignatureData m_userTokenSignature; + #endregion + } + #endif + #endregion + + #region ActivateSessionResponse Class + #if (!OPCUA_EXCLUDE_ActivateSessionResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ActivateSessionResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ActivateSessionResponse() + { + 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_responseHeader = new ResponseHeader(); + m_serverNonce = null; + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "ServerNonce", IsRequired = false, Order = 2)] + public byte[] ServerNonce + { + get { return m_serverNonce; } + set { m_serverNonce = value; } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 3)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 4)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ActivateSessionResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ActivateSessionResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ActivateSessionResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteByteString("ServerNonce", ServerNonce); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + ServerNonce = decoder.ReadByteString("ServerNonce"); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ActivateSessionResponse value = encodeable as ActivateSessionResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_serverNonce, value.m_serverNonce)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ActivateSessionResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ActivateSessionResponse clone = (ActivateSessionResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_serverNonce = (byte[])Utils.Clone(this.m_serverNonce); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private byte[] m_serverNonce; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region CloseSessionRequest Class + #if (!OPCUA_EXCLUDE_CloseSessionRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CloseSessionRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CloseSessionRequest() + { + 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_requestHeader = new RequestHeader(); + m_deleteSubscriptions = true; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "DeleteSubscriptions", IsRequired = false, Order = 2)] + public bool DeleteSubscriptions + { + get { return m_deleteSubscriptions; } + set { m_deleteSubscriptions = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CloseSessionRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CloseSessionRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CloseSessionRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteBoolean("DeleteSubscriptions", DeleteSubscriptions); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + DeleteSubscriptions = decoder.ReadBoolean("DeleteSubscriptions"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CloseSessionRequest value = encodeable as CloseSessionRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_deleteSubscriptions, value.m_deleteSubscriptions)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CloseSessionRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CloseSessionRequest clone = (CloseSessionRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_deleteSubscriptions = (bool)Utils.Clone(this.m_deleteSubscriptions); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private bool m_deleteSubscriptions; + #endregion + } + #endif + #endregion + + #region CloseSessionResponse Class + #if (!OPCUA_EXCLUDE_CloseSessionResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CloseSessionResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CloseSessionResponse() + { + 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_responseHeader = new ResponseHeader(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CloseSessionResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CloseSessionResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CloseSessionResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CloseSessionResponse value = encodeable as CloseSessionResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CloseSessionResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CloseSessionResponse clone = (CloseSessionResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + #endregion + } + #endif + #endregion + + #region CancelRequest Class + #if (!OPCUA_EXCLUDE_CancelRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CancelRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CancelRequest() + { + 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_requestHeader = new RequestHeader(); + m_requestHandle = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "RequestHandle", IsRequired = false, Order = 2)] + public uint RequestHandle + { + get { return m_requestHandle; } + set { m_requestHandle = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CancelRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CancelRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CancelRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("RequestHandle", RequestHandle); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + RequestHandle = decoder.ReadUInt32("RequestHandle"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CancelRequest value = encodeable as CancelRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_requestHandle, value.m_requestHandle)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CancelRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CancelRequest clone = (CancelRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_requestHandle = (uint)Utils.Clone(this.m_requestHandle); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_requestHandle; + #endregion + } + #endif + #endregion + + #region CancelResponse Class + #if (!OPCUA_EXCLUDE_CancelResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CancelResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CancelResponse() + { + 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_responseHeader = new ResponseHeader(); + m_cancelCount = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "CancelCount", IsRequired = false, Order = 2)] + public uint CancelCount + { + get { return m_cancelCount; } + set { m_cancelCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CancelResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CancelResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CancelResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteUInt32("CancelCount", CancelCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + CancelCount = decoder.ReadUInt32("CancelCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CancelResponse value = encodeable as CancelResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_cancelCount, value.m_cancelCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CancelResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CancelResponse clone = (CancelResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_cancelCount = (uint)Utils.Clone(this.m_cancelCount); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private uint m_cancelCount; + #endregion + } + #endif + #endregion + + #region NodeAttributesMask Enumeration + #if (!OPCUA_EXCLUDE_NodeAttributesMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum NodeAttributesMask + { + /// + [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 = "Value_2097152")] + Value = 2097152, + + /// + [EnumMember(Value = "DataTypeDefinition_4194304")] + DataTypeDefinition = 4194304, + + /// + [EnumMember(Value = "RolePermissions_8388608")] + RolePermissions = 8388608, + + /// + [EnumMember(Value = "AccessRestrictions_16777216")] + AccessRestrictions = 16777216, + + /// + [EnumMember(Value = "All_33554431")] + All = 33554431, + + /// + [EnumMember(Value = "BaseNode_26501220")] + BaseNode = 26501220, + + /// + [EnumMember(Value = "Object_26501348")] + Object = 26501348, + + /// + [EnumMember(Value = "ObjectType_26503268")] + ObjectType = 26503268, + + /// + [EnumMember(Value = "Variable_26571383")] + Variable = 26571383, + + /// + [EnumMember(Value = "VariableType_28600438")] + VariableType = 28600438, + + /// + [EnumMember(Value = "Method_26632548")] + Method = 26632548, + + /// + [EnumMember(Value = "ReferenceType_26537060")] + ReferenceType = 26537060, + + /// + [EnumMember(Value = "View_26501356")] + View = 26501356, + } + #endif + #endregion + + #region NodeAttributes Class + #if (!OPCUA_EXCLUDE_NodeAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NodeAttributes : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NodeAttributes() + { + 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_specifiedAttributes = (uint)0; + m_displayName = null; + m_description = null; + m_writeMask = (uint)0; + m_userWriteMask = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SpecifiedAttributes", IsRequired = false, Order = 1)] + public uint SpecifiedAttributes + { + get { return m_specifiedAttributes; } + set { m_specifiedAttributes = value; } + } + + /// + [DataMember(Name = "DisplayName", IsRequired = false, Order = 2)] + public LocalizedText DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 3)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + + /// + [DataMember(Name = "WriteMask", IsRequired = false, Order = 4)] + public uint WriteMask + { + get { return m_writeMask; } + set { m_writeMask = value; } + } + + /// + [DataMember(Name = "UserWriteMask", IsRequired = false, Order = 5)] + public uint UserWriteMask + { + get { return m_userWriteMask; } + set { m_userWriteMask = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NodeAttributes; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NodeAttributes_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NodeAttributes_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("SpecifiedAttributes", SpecifiedAttributes); + encoder.WriteLocalizedText("DisplayName", DisplayName); + encoder.WriteLocalizedText("Description", Description); + encoder.WriteUInt32("WriteMask", WriteMask); + encoder.WriteUInt32("UserWriteMask", UserWriteMask); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SpecifiedAttributes = decoder.ReadUInt32("SpecifiedAttributes"); + DisplayName = decoder.ReadLocalizedText("DisplayName"); + Description = decoder.ReadLocalizedText("Description"); + WriteMask = decoder.ReadUInt32("WriteMask"); + UserWriteMask = decoder.ReadUInt32("UserWriteMask"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NodeAttributes value = encodeable as NodeAttributes; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_specifiedAttributes, value.m_specifiedAttributes)) return false; + if (!Utils.IsEqual(m_displayName, value.m_displayName)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + if (!Utils.IsEqual(m_writeMask, value.m_writeMask)) return false; + if (!Utils.IsEqual(m_userWriteMask, value.m_userWriteMask)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NodeAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NodeAttributes clone = (NodeAttributes)base.MemberwiseClone(); + + clone.m_specifiedAttributes = (uint)Utils.Clone(this.m_specifiedAttributes); + clone.m_displayName = (LocalizedText)Utils.Clone(this.m_displayName); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + clone.m_writeMask = (uint)Utils.Clone(this.m_writeMask); + clone.m_userWriteMask = (uint)Utils.Clone(this.m_userWriteMask); + + return clone; + } + #endregion + + #region Private Fields + private uint m_specifiedAttributes; + private LocalizedText m_displayName; + private LocalizedText m_description; + private uint m_writeMask; + private uint m_userWriteMask; + #endregion + } + #endif + #endregion + + #region ObjectAttributes Class + #if (!OPCUA_EXCLUDE_ObjectAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ObjectAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public ObjectAttributes() + { + 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_eventNotifier = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "EventNotifier", IsRequired = false, Order = 1)] + public byte EventNotifier + { + get { return m_eventNotifier; } + set { m_eventNotifier = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ObjectAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ObjectAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ObjectAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByte("EventNotifier", EventNotifier); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EventNotifier = decoder.ReadByte("EventNotifier"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ObjectAttributes value = encodeable as ObjectAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_eventNotifier, value.m_eventNotifier)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ObjectAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ObjectAttributes clone = (ObjectAttributes)base.MemberwiseClone(); + + clone.m_eventNotifier = (byte)Utils.Clone(this.m_eventNotifier); + + return clone; + } + #endregion + + #region Private Fields + private byte m_eventNotifier; + #endregion + } + #endif + #endregion + + #region VariableAttributes Class + #if (!OPCUA_EXCLUDE_VariableAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class VariableAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public VariableAttributes() + { + 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_value = Variant.Null; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_accessLevel = (byte)0; + m_userAccessLevel = (byte)0; + m_minimumSamplingInterval = (double)0; + m_historizing = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 2)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 3)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 4)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "AccessLevel", IsRequired = false, Order = 5)] + public byte AccessLevel + { + get { return m_accessLevel; } + set { m_accessLevel = value; } + } + + /// + [DataMember(Name = "UserAccessLevel", IsRequired = false, Order = 6)] + public byte UserAccessLevel + { + get { return m_userAccessLevel; } + set { m_userAccessLevel = value; } + } + + /// + [DataMember(Name = "MinimumSamplingInterval", IsRequired = false, Order = 7)] + public double MinimumSamplingInterval + { + get { return m_minimumSamplingInterval; } + set { m_minimumSamplingInterval = value; } + } + + /// + [DataMember(Name = "Historizing", IsRequired = false, Order = 8)] + public bool Historizing + { + get { return m_historizing; } + set { m_historizing = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.VariableAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.VariableAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.VariableAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteVariant("Value", Value); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteByte("AccessLevel", AccessLevel); + encoder.WriteByte("UserAccessLevel", UserAccessLevel); + encoder.WriteDouble("MinimumSamplingInterval", MinimumSamplingInterval); + encoder.WriteBoolean("Historizing", Historizing); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadVariant("Value"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + AccessLevel = decoder.ReadByte("AccessLevel"); + UserAccessLevel = decoder.ReadByte("UserAccessLevel"); + MinimumSamplingInterval = decoder.ReadDouble("MinimumSamplingInterval"); + Historizing = decoder.ReadBoolean("Historizing"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + VariableAttributes value = encodeable as VariableAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_accessLevel, value.m_accessLevel)) return false; + if (!Utils.IsEqual(m_userAccessLevel, value.m_userAccessLevel)) return false; + if (!Utils.IsEqual(m_minimumSamplingInterval, value.m_minimumSamplingInterval)) return false; + if (!Utils.IsEqual(m_historizing, value.m_historizing)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (VariableAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + VariableAttributes clone = (VariableAttributes)base.MemberwiseClone(); + + clone.m_value = (Variant)Utils.Clone(this.m_value); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_accessLevel = (byte)Utils.Clone(this.m_accessLevel); + clone.m_userAccessLevel = (byte)Utils.Clone(this.m_userAccessLevel); + clone.m_minimumSamplingInterval = (double)Utils.Clone(this.m_minimumSamplingInterval); + clone.m_historizing = (bool)Utils.Clone(this.m_historizing); + + return clone; + } + #endregion + + #region Private Fields + private Variant m_value; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private byte m_accessLevel; + private byte m_userAccessLevel; + private double m_minimumSamplingInterval; + private bool m_historizing; + #endregion + } + #endif + #endregion + + #region MethodAttributes Class + #if (!OPCUA_EXCLUDE_MethodAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MethodAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public MethodAttributes() + { + 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_executable = true; + m_userExecutable = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Executable", IsRequired = false, Order = 1)] + public bool Executable + { + get { return m_executable; } + set { m_executable = value; } + } + + /// + [DataMember(Name = "UserExecutable", IsRequired = false, Order = 2)] + public bool UserExecutable + { + get { return m_userExecutable; } + set { m_userExecutable = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.MethodAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MethodAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MethodAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("Executable", Executable); + encoder.WriteBoolean("UserExecutable", UserExecutable); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Executable = decoder.ReadBoolean("Executable"); + UserExecutable = decoder.ReadBoolean("UserExecutable"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MethodAttributes value = encodeable as MethodAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_executable, value.m_executable)) return false; + if (!Utils.IsEqual(m_userExecutable, value.m_userExecutable)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (MethodAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MethodAttributes clone = (MethodAttributes)base.MemberwiseClone(); + + clone.m_executable = (bool)Utils.Clone(this.m_executable); + clone.m_userExecutable = (bool)Utils.Clone(this.m_userExecutable); + + return clone; + } + #endregion + + #region Private Fields + private bool m_executable; + private bool m_userExecutable; + #endregion + } + #endif + #endregion + + #region ObjectTypeAttributes Class + #if (!OPCUA_EXCLUDE_ObjectTypeAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ObjectTypeAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public ObjectTypeAttributes() + { + 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_isAbstract = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 1)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ObjectTypeAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ObjectTypeAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ObjectTypeAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsAbstract", IsAbstract); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsAbstract = decoder.ReadBoolean("IsAbstract"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ObjectTypeAttributes value = encodeable as ObjectTypeAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ObjectTypeAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ObjectTypeAttributes clone = (ObjectTypeAttributes)base.MemberwiseClone(); + + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isAbstract; + #endregion + } + #endif + #endregion + + #region VariableTypeAttributes Class + #if (!OPCUA_EXCLUDE_VariableTypeAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class VariableTypeAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public VariableTypeAttributes() + { + 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_value = Variant.Null; + m_dataType = null; + m_valueRank = (int)0; + m_arrayDimensions = new UInt32Collection(); + m_isAbstract = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + + /// + [DataMember(Name = "DataType", IsRequired = false, Order = 2)] + public NodeId DataType + { + get { return m_dataType; } + set { m_dataType = value; } + } + + /// + [DataMember(Name = "ValueRank", IsRequired = false, Order = 3)] + public int ValueRank + { + get { return m_valueRank; } + set { m_valueRank = value; } + } + + /// + /// + /// + [DataMember(Name = "ArrayDimensions", IsRequired = false, Order = 4)] + public UInt32Collection ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + m_arrayDimensions = value; + + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 5)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.VariableTypeAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.VariableTypeAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.VariableTypeAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteVariant("Value", Value); + encoder.WriteNodeId("DataType", DataType); + encoder.WriteInt32("ValueRank", ValueRank); + encoder.WriteUInt32Array("ArrayDimensions", ArrayDimensions); + encoder.WriteBoolean("IsAbstract", IsAbstract); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadVariant("Value"); + DataType = decoder.ReadNodeId("DataType"); + ValueRank = decoder.ReadInt32("ValueRank"); + ArrayDimensions = decoder.ReadUInt32Array("ArrayDimensions"); + IsAbstract = decoder.ReadBoolean("IsAbstract"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + VariableTypeAttributes value = encodeable as VariableTypeAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + if (!Utils.IsEqual(m_dataType, value.m_dataType)) return false; + if (!Utils.IsEqual(m_valueRank, value.m_valueRank)) return false; + if (!Utils.IsEqual(m_arrayDimensions, value.m_arrayDimensions)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (VariableTypeAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + VariableTypeAttributes clone = (VariableTypeAttributes)base.MemberwiseClone(); + + clone.m_value = (Variant)Utils.Clone(this.m_value); + clone.m_dataType = (NodeId)Utils.Clone(this.m_dataType); + clone.m_valueRank = (int)Utils.Clone(this.m_valueRank); + clone.m_arrayDimensions = (UInt32Collection)Utils.Clone(this.m_arrayDimensions); + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + + return clone; + } + #endregion + + #region Private Fields + private Variant m_value; + private NodeId m_dataType; + private int m_valueRank; + private UInt32Collection m_arrayDimensions; + private bool m_isAbstract; + #endregion + } + #endif + #endregion + + #region ReferenceTypeAttributes Class + #if (!OPCUA_EXCLUDE_ReferenceTypeAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReferenceTypeAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public ReferenceTypeAttributes() + { + 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_isAbstract = true; + m_symmetric = true; + m_inverseName = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 1)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + + /// + [DataMember(Name = "Symmetric", IsRequired = false, Order = 2)] + public bool Symmetric + { + get { return m_symmetric; } + set { m_symmetric = value; } + } + + /// + [DataMember(Name = "InverseName", IsRequired = false, Order = 3)] + public LocalizedText InverseName + { + get { return m_inverseName; } + set { m_inverseName = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReferenceTypeAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReferenceTypeAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReferenceTypeAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsAbstract", IsAbstract); + encoder.WriteBoolean("Symmetric", Symmetric); + encoder.WriteLocalizedText("InverseName", InverseName); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsAbstract = decoder.ReadBoolean("IsAbstract"); + Symmetric = decoder.ReadBoolean("Symmetric"); + InverseName = decoder.ReadLocalizedText("InverseName"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReferenceTypeAttributes value = encodeable as ReferenceTypeAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + if (!Utils.IsEqual(m_symmetric, value.m_symmetric)) return false; + if (!Utils.IsEqual(m_inverseName, value.m_inverseName)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReferenceTypeAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReferenceTypeAttributes clone = (ReferenceTypeAttributes)base.MemberwiseClone(); + + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + clone.m_symmetric = (bool)Utils.Clone(this.m_symmetric); + clone.m_inverseName = (LocalizedText)Utils.Clone(this.m_inverseName); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isAbstract; + private bool m_symmetric; + private LocalizedText m_inverseName; + #endregion + } + #endif + #endregion + + #region DataTypeAttributes Class + #if (!OPCUA_EXCLUDE_DataTypeAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataTypeAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public DataTypeAttributes() + { + 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_isAbstract = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsAbstract", IsRequired = false, Order = 1)] + public bool IsAbstract + { + get { return m_isAbstract; } + set { m_isAbstract = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DataTypeAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataTypeAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataTypeAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsAbstract", IsAbstract); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsAbstract = decoder.ReadBoolean("IsAbstract"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataTypeAttributes value = encodeable as DataTypeAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isAbstract, value.m_isAbstract)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DataTypeAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataTypeAttributes clone = (DataTypeAttributes)base.MemberwiseClone(); + + clone.m_isAbstract = (bool)Utils.Clone(this.m_isAbstract); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isAbstract; + #endregion + } + #endif + #endregion + + #region ViewAttributes Class + #if (!OPCUA_EXCLUDE_ViewAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ViewAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public ViewAttributes() + { + 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_containsNoLoops = true; + m_eventNotifier = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ContainsNoLoops", IsRequired = false, Order = 1)] + public bool ContainsNoLoops + { + get { return m_containsNoLoops; } + set { m_containsNoLoops = value; } + } + + /// + [DataMember(Name = "EventNotifier", IsRequired = false, Order = 2)] + public byte EventNotifier + { + get { return m_eventNotifier; } + set { m_eventNotifier = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ViewAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ViewAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ViewAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("ContainsNoLoops", ContainsNoLoops); + encoder.WriteByte("EventNotifier", EventNotifier); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ContainsNoLoops = decoder.ReadBoolean("ContainsNoLoops"); + EventNotifier = decoder.ReadByte("EventNotifier"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ViewAttributes value = encodeable as ViewAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_containsNoLoops, value.m_containsNoLoops)) return false; + if (!Utils.IsEqual(m_eventNotifier, value.m_eventNotifier)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ViewAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ViewAttributes clone = (ViewAttributes)base.MemberwiseClone(); + + clone.m_containsNoLoops = (bool)Utils.Clone(this.m_containsNoLoops); + clone.m_eventNotifier = (byte)Utils.Clone(this.m_eventNotifier); + + return clone; + } + #endregion + + #region Private Fields + private bool m_containsNoLoops; + private byte m_eventNotifier; + #endregion + } + #endif + #endregion + + #region GenericAttributeValue Class + #if (!OPCUA_EXCLUDE_GenericAttributeValue) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class GenericAttributeValue : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public GenericAttributeValue() + { + 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_attributeId = (uint)0; + m_value = Variant.Null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 1)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "Value", IsRequired = false, Order = 2)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.GenericAttributeValue; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.GenericAttributeValue_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.GenericAttributeValue_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteVariant("Value", Value); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + AttributeId = decoder.ReadUInt32("AttributeId"); + Value = decoder.ReadVariant("Value"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + GenericAttributeValue value = encodeable as GenericAttributeValue; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (GenericAttributeValue)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + GenericAttributeValue clone = (GenericAttributeValue)base.MemberwiseClone(); + + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_value = (Variant)Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private uint m_attributeId; + private Variant m_value; + #endregion + } + + #region GenericAttributeValueCollection Class + /// + /// A collection of GenericAttributeValue objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfGenericAttributeValue", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "GenericAttributeValue")] + #if !NET_STANDARD + public partial class GenericAttributeValueCollection : List, ICloneable + #else + public partial class GenericAttributeValueCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public GenericAttributeValueCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public GenericAttributeValueCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public GenericAttributeValueCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator GenericAttributeValueCollection(GenericAttributeValue[] values) + { + if (values != null) + { + return new GenericAttributeValueCollection(values); + } + + return new GenericAttributeValueCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator GenericAttributeValue[](GenericAttributeValueCollection 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 (GenericAttributeValueCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + GenericAttributeValueCollection clone = new GenericAttributeValueCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((GenericAttributeValue)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region GenericAttributes Class + #if (!OPCUA_EXCLUDE_GenericAttributes) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class GenericAttributes : NodeAttributes + { + #region Constructors + /// + /// The default constructor. + /// + public GenericAttributes() + { + 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_attributeValues = new GenericAttributeValueCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "AttributeValues", IsRequired = false, Order = 1)] + public GenericAttributeValueCollection AttributeValues + { + get + { + return m_attributeValues; + } + + set + { + m_attributeValues = value; + + if (value == null) + { + m_attributeValues = new GenericAttributeValueCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.GenericAttributes; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.GenericAttributes_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.GenericAttributes_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("AttributeValues", AttributeValues.ToArray(), typeof(GenericAttributeValue)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + AttributeValues = (GenericAttributeValueCollection)decoder.ReadEncodeableArray("AttributeValues", typeof(GenericAttributeValue)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + GenericAttributes value = encodeable as GenericAttributes; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_attributeValues, value.m_attributeValues)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (GenericAttributes)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + GenericAttributes clone = (GenericAttributes)base.MemberwiseClone(); + + clone.m_attributeValues = (GenericAttributeValueCollection)Utils.Clone(this.m_attributeValues); + + return clone; + } + #endregion + + #region Private Fields + private GenericAttributeValueCollection m_attributeValues; + #endregion + } + #endif + #endregion + + #region AddNodesItem Class + #if (!OPCUA_EXCLUDE_AddNodesItem) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddNodesItem : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddNodesItem() + { + 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_parentNodeId = null; + m_referenceTypeId = null; + m_requestedNewNodeId = null; + m_browseName = null; + m_nodeClass = NodeClass.Unspecified; + m_nodeAttributes = null; + m_typeDefinition = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ParentNodeId", IsRequired = false, Order = 1)] + public ExpandedNodeId ParentNodeId + { + get { return m_parentNodeId; } + set { m_parentNodeId = value; } + } + + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 2)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "RequestedNewNodeId", IsRequired = false, Order = 3)] + public ExpandedNodeId RequestedNewNodeId + { + get { return m_requestedNewNodeId; } + set { m_requestedNewNodeId = value; } + } + + /// + [DataMember(Name = "BrowseName", IsRequired = false, Order = 4)] + public QualifiedName BrowseName + { + get { return m_browseName; } + set { m_browseName = value; } + } + + /// + [DataMember(Name = "NodeClass", IsRequired = false, Order = 5)] + public NodeClass NodeClass + { + get { return m_nodeClass; } + set { m_nodeClass = value; } + } + + /// + [DataMember(Name = "NodeAttributes", IsRequired = false, Order = 6)] + public ExtensionObject NodeAttributes + { + get { return m_nodeAttributes; } + set { m_nodeAttributes = value; } + } + + /// + [DataMember(Name = "TypeDefinition", IsRequired = false, Order = 7)] + public ExpandedNodeId TypeDefinition + { + get { return m_typeDefinition; } + set { m_typeDefinition = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddNodesItem; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddNodesItem_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddNodesItem_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteExpandedNodeId("ParentNodeId", ParentNodeId); + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteExpandedNodeId("RequestedNewNodeId", RequestedNewNodeId); + encoder.WriteQualifiedName("BrowseName", BrowseName); + encoder.WriteEnumerated("NodeClass", NodeClass); + encoder.WriteExtensionObject("NodeAttributes", NodeAttributes); + encoder.WriteExpandedNodeId("TypeDefinition", TypeDefinition); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ParentNodeId = decoder.ReadExpandedNodeId("ParentNodeId"); + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + RequestedNewNodeId = decoder.ReadExpandedNodeId("RequestedNewNodeId"); + BrowseName = decoder.ReadQualifiedName("BrowseName"); + NodeClass = (NodeClass)decoder.ReadEnumerated("NodeClass", typeof(NodeClass)); + NodeAttributes = decoder.ReadExtensionObject("NodeAttributes"); + TypeDefinition = decoder.ReadExpandedNodeId("TypeDefinition"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddNodesItem value = encodeable as AddNodesItem; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_parentNodeId, value.m_parentNodeId)) return false; + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_requestedNewNodeId, value.m_requestedNewNodeId)) return false; + if (!Utils.IsEqual(m_browseName, value.m_browseName)) return false; + if (!Utils.IsEqual(m_nodeClass, value.m_nodeClass)) return false; + if (!Utils.IsEqual(m_nodeAttributes, value.m_nodeAttributes)) return false; + if (!Utils.IsEqual(m_typeDefinition, value.m_typeDefinition)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddNodesItem)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddNodesItem clone = (AddNodesItem)base.MemberwiseClone(); + + clone.m_parentNodeId = (ExpandedNodeId)Utils.Clone(this.m_parentNodeId); + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_requestedNewNodeId = (ExpandedNodeId)Utils.Clone(this.m_requestedNewNodeId); + clone.m_browseName = (QualifiedName)Utils.Clone(this.m_browseName); + clone.m_nodeClass = (NodeClass)Utils.Clone(this.m_nodeClass); + clone.m_nodeAttributes = (ExtensionObject)Utils.Clone(this.m_nodeAttributes); + clone.m_typeDefinition = (ExpandedNodeId)Utils.Clone(this.m_typeDefinition); + + return clone; + } + #endregion + + #region Private Fields + private ExpandedNodeId m_parentNodeId; + private NodeId m_referenceTypeId; + private ExpandedNodeId m_requestedNewNodeId; + private QualifiedName m_browseName; + private NodeClass m_nodeClass; + private ExtensionObject m_nodeAttributes; + private ExpandedNodeId m_typeDefinition; + #endregion + } + + #region AddNodesItemCollection Class + /// + /// A collection of AddNodesItem objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfAddNodesItem", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "AddNodesItem")] + #if !NET_STANDARD + public partial class AddNodesItemCollection : List, ICloneable + #else + public partial class AddNodesItemCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public AddNodesItemCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public AddNodesItemCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public AddNodesItemCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator AddNodesItemCollection(AddNodesItem[] values) + { + if (values != null) + { + return new AddNodesItemCollection(values); + } + + return new AddNodesItemCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator AddNodesItem[](AddNodesItemCollection 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 (AddNodesItemCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + AddNodesItemCollection clone = new AddNodesItemCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((AddNodesItem)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region AddNodesResult Class + #if (!OPCUA_EXCLUDE_AddNodesResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddNodesResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddNodesResult() + { + 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_statusCode = StatusCodes.Good; + m_addedNodeId = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + [DataMember(Name = "AddedNodeId", IsRequired = false, Order = 2)] + public NodeId AddedNodeId + { + get { return m_addedNodeId; } + set { m_addedNodeId = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddNodesResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddNodesResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddNodesResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteNodeId("AddedNodeId", AddedNodeId); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + AddedNodeId = decoder.ReadNodeId("AddedNodeId"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddNodesResult value = encodeable as AddNodesResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_addedNodeId, value.m_addedNodeId)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddNodesResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddNodesResult clone = (AddNodesResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_addedNodeId = (NodeId)Utils.Clone(this.m_addedNodeId); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private NodeId m_addedNodeId; + #endregion + } + + #region AddNodesResultCollection Class + /// + /// A collection of AddNodesResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfAddNodesResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "AddNodesResult")] + #if !NET_STANDARD + public partial class AddNodesResultCollection : List, ICloneable + #else + public partial class AddNodesResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public AddNodesResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public AddNodesResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public AddNodesResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator AddNodesResultCollection(AddNodesResult[] values) + { + if (values != null) + { + return new AddNodesResultCollection(values); + } + + return new AddNodesResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator AddNodesResult[](AddNodesResultCollection 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 (AddNodesResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + AddNodesResultCollection clone = new AddNodesResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((AddNodesResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region AddNodesRequest Class + #if (!OPCUA_EXCLUDE_AddNodesRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddNodesRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddNodesRequest() + { + 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_requestHeader = new RequestHeader(); + m_nodesToAdd = new AddNodesItemCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NodesToAdd", IsRequired = false, Order = 2)] + public AddNodesItemCollection NodesToAdd + { + get + { + return m_nodesToAdd; + } + + set + { + m_nodesToAdd = value; + + if (value == null) + { + m_nodesToAdd = new AddNodesItemCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddNodesRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddNodesRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddNodesRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("NodesToAdd", NodesToAdd.ToArray(), typeof(AddNodesItem)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + NodesToAdd = (AddNodesItemCollection)decoder.ReadEncodeableArray("NodesToAdd", typeof(AddNodesItem)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddNodesRequest value = encodeable as AddNodesRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_nodesToAdd, value.m_nodesToAdd)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddNodesRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddNodesRequest clone = (AddNodesRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_nodesToAdd = (AddNodesItemCollection)Utils.Clone(this.m_nodesToAdd); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private AddNodesItemCollection m_nodesToAdd; + #endregion + } + #endif + #endregion + + #region AddNodesResponse Class + #if (!OPCUA_EXCLUDE_AddNodesResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddNodesResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddNodesResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new AddNodesResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public AddNodesResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new AddNodesResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddNodesResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddNodesResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddNodesResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(AddNodesResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (AddNodesResultCollection)decoder.ReadEncodeableArray("Results", typeof(AddNodesResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddNodesResponse value = encodeable as AddNodesResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddNodesResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddNodesResponse clone = (AddNodesResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (AddNodesResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private AddNodesResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region AddReferencesItem Class + #if (!OPCUA_EXCLUDE_AddReferencesItem) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddReferencesItem : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddReferencesItem() + { + 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_sourceNodeId = null; + m_referenceTypeId = null; + m_isForward = true; + m_targetServerUri = null; + m_targetNodeId = null; + m_targetNodeClass = NodeClass.Unspecified; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SourceNodeId", IsRequired = false, Order = 1)] + public NodeId SourceNodeId + { + get { return m_sourceNodeId; } + set { m_sourceNodeId = value; } + } + + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 2)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IsForward", IsRequired = false, Order = 3)] + public bool IsForward + { + get { return m_isForward; } + set { m_isForward = value; } + } + + /// + [DataMember(Name = "TargetServerUri", IsRequired = false, Order = 4)] + public string TargetServerUri + { + get { return m_targetServerUri; } + set { m_targetServerUri = value; } + } + + /// + [DataMember(Name = "TargetNodeId", IsRequired = false, Order = 5)] + public ExpandedNodeId TargetNodeId + { + get { return m_targetNodeId; } + set { m_targetNodeId = value; } + } + + /// + [DataMember(Name = "TargetNodeClass", IsRequired = false, Order = 6)] + public NodeClass TargetNodeClass + { + get { return m_targetNodeClass; } + set { m_targetNodeClass = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddReferencesItem; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddReferencesItem_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddReferencesItem_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("SourceNodeId", SourceNodeId); + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IsForward", IsForward); + encoder.WriteString("TargetServerUri", TargetServerUri); + encoder.WriteExpandedNodeId("TargetNodeId", TargetNodeId); + encoder.WriteEnumerated("TargetNodeClass", TargetNodeClass); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SourceNodeId = decoder.ReadNodeId("SourceNodeId"); + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IsForward = decoder.ReadBoolean("IsForward"); + TargetServerUri = decoder.ReadString("TargetServerUri"); + TargetNodeId = decoder.ReadExpandedNodeId("TargetNodeId"); + TargetNodeClass = (NodeClass)decoder.ReadEnumerated("TargetNodeClass", typeof(NodeClass)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddReferencesItem value = encodeable as AddReferencesItem; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_sourceNodeId, value.m_sourceNodeId)) return false; + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_isForward, value.m_isForward)) return false; + if (!Utils.IsEqual(m_targetServerUri, value.m_targetServerUri)) return false; + if (!Utils.IsEqual(m_targetNodeId, value.m_targetNodeId)) return false; + if (!Utils.IsEqual(m_targetNodeClass, value.m_targetNodeClass)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddReferencesItem)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddReferencesItem clone = (AddReferencesItem)base.MemberwiseClone(); + + clone.m_sourceNodeId = (NodeId)Utils.Clone(this.m_sourceNodeId); + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_isForward = (bool)Utils.Clone(this.m_isForward); + clone.m_targetServerUri = (string)Utils.Clone(this.m_targetServerUri); + clone.m_targetNodeId = (ExpandedNodeId)Utils.Clone(this.m_targetNodeId); + clone.m_targetNodeClass = (NodeClass)Utils.Clone(this.m_targetNodeClass); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_sourceNodeId; + private NodeId m_referenceTypeId; + private bool m_isForward; + private string m_targetServerUri; + private ExpandedNodeId m_targetNodeId; + private NodeClass m_targetNodeClass; + #endregion + } + + #region AddReferencesItemCollection Class + /// + /// A collection of AddReferencesItem objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfAddReferencesItem", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "AddReferencesItem")] + #if !NET_STANDARD + public partial class AddReferencesItemCollection : List, ICloneable + #else + public partial class AddReferencesItemCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public AddReferencesItemCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public AddReferencesItemCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public AddReferencesItemCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator AddReferencesItemCollection(AddReferencesItem[] values) + { + if (values != null) + { + return new AddReferencesItemCollection(values); + } + + return new AddReferencesItemCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator AddReferencesItem[](AddReferencesItemCollection 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 (AddReferencesItemCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + AddReferencesItemCollection clone = new AddReferencesItemCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((AddReferencesItem)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region AddReferencesRequest Class + #if (!OPCUA_EXCLUDE_AddReferencesRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddReferencesRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddReferencesRequest() + { + 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_requestHeader = new RequestHeader(); + m_referencesToAdd = new AddReferencesItemCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ReferencesToAdd", IsRequired = false, Order = 2)] + public AddReferencesItemCollection ReferencesToAdd + { + get + { + return m_referencesToAdd; + } + + set + { + m_referencesToAdd = value; + + if (value == null) + { + m_referencesToAdd = new AddReferencesItemCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddReferencesRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddReferencesRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddReferencesRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("ReferencesToAdd", ReferencesToAdd.ToArray(), typeof(AddReferencesItem)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ReferencesToAdd = (AddReferencesItemCollection)decoder.ReadEncodeableArray("ReferencesToAdd", typeof(AddReferencesItem)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddReferencesRequest value = encodeable as AddReferencesRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_referencesToAdd, value.m_referencesToAdd)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddReferencesRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddReferencesRequest clone = (AddReferencesRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_referencesToAdd = (AddReferencesItemCollection)Utils.Clone(this.m_referencesToAdd); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private AddReferencesItemCollection m_referencesToAdd; + #endregion + } + #endif + #endregion + + #region AddReferencesResponse Class + #if (!OPCUA_EXCLUDE_AddReferencesResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AddReferencesResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AddReferencesResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AddReferencesResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AddReferencesResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AddReferencesResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AddReferencesResponse value = encodeable as AddReferencesResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AddReferencesResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AddReferencesResponse clone = (AddReferencesResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region DeleteNodesItem Class + #if (!OPCUA_EXCLUDE_DeleteNodesItem) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteNodesItem : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteNodesItem() + { + 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_nodeId = null; + m_deleteTargetReferences = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "DeleteTargetReferences", IsRequired = false, Order = 2)] + public bool DeleteTargetReferences + { + get { return m_deleteTargetReferences; } + set { m_deleteTargetReferences = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteNodesItem; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteNodesItem_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteNodesItem_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteBoolean("DeleteTargetReferences", DeleteTargetReferences); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + DeleteTargetReferences = decoder.ReadBoolean("DeleteTargetReferences"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteNodesItem value = encodeable as DeleteNodesItem; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_deleteTargetReferences, value.m_deleteTargetReferences)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteNodesItem)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteNodesItem clone = (DeleteNodesItem)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_deleteTargetReferences = (bool)Utils.Clone(this.m_deleteTargetReferences); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private bool m_deleteTargetReferences; + #endregion + } + + #region DeleteNodesItemCollection Class + /// + /// A collection of DeleteNodesItem objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDeleteNodesItem", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DeleteNodesItem")] + #if !NET_STANDARD + public partial class DeleteNodesItemCollection : List, ICloneable + #else + public partial class DeleteNodesItemCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DeleteNodesItemCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DeleteNodesItemCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DeleteNodesItemCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DeleteNodesItemCollection(DeleteNodesItem[] values) + { + if (values != null) + { + return new DeleteNodesItemCollection(values); + } + + return new DeleteNodesItemCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DeleteNodesItem[](DeleteNodesItemCollection 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 (DeleteNodesItemCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DeleteNodesItemCollection clone = new DeleteNodesItemCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DeleteNodesItem)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DeleteNodesRequest Class + #if (!OPCUA_EXCLUDE_DeleteNodesRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteNodesRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteNodesRequest() + { + 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_requestHeader = new RequestHeader(); + m_nodesToDelete = new DeleteNodesItemCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NodesToDelete", IsRequired = false, Order = 2)] + public DeleteNodesItemCollection NodesToDelete + { + get + { + return m_nodesToDelete; + } + + set + { + m_nodesToDelete = value; + + if (value == null) + { + m_nodesToDelete = new DeleteNodesItemCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteNodesRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteNodesRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteNodesRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("NodesToDelete", NodesToDelete.ToArray(), typeof(DeleteNodesItem)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + NodesToDelete = (DeleteNodesItemCollection)decoder.ReadEncodeableArray("NodesToDelete", typeof(DeleteNodesItem)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteNodesRequest value = encodeable as DeleteNodesRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_nodesToDelete, value.m_nodesToDelete)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteNodesRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteNodesRequest clone = (DeleteNodesRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_nodesToDelete = (DeleteNodesItemCollection)Utils.Clone(this.m_nodesToDelete); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private DeleteNodesItemCollection m_nodesToDelete; + #endregion + } + #endif + #endregion + + #region DeleteNodesResponse Class + #if (!OPCUA_EXCLUDE_DeleteNodesResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteNodesResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteNodesResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteNodesResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteNodesResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteNodesResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteNodesResponse value = encodeable as DeleteNodesResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteNodesResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteNodesResponse clone = (DeleteNodesResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region DeleteReferencesItem Class + #if (!OPCUA_EXCLUDE_DeleteReferencesItem) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteReferencesItem : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteReferencesItem() + { + 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_sourceNodeId = null; + m_referenceTypeId = null; + m_isForward = true; + m_targetNodeId = null; + m_deleteBidirectional = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SourceNodeId", IsRequired = false, Order = 1)] + public NodeId SourceNodeId + { + get { return m_sourceNodeId; } + set { m_sourceNodeId = value; } + } + + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 2)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IsForward", IsRequired = false, Order = 3)] + public bool IsForward + { + get { return m_isForward; } + set { m_isForward = value; } + } + + /// + [DataMember(Name = "TargetNodeId", IsRequired = false, Order = 4)] + public ExpandedNodeId TargetNodeId + { + get { return m_targetNodeId; } + set { m_targetNodeId = value; } + } + + /// + [DataMember(Name = "DeleteBidirectional", IsRequired = false, Order = 5)] + public bool DeleteBidirectional + { + get { return m_deleteBidirectional; } + set { m_deleteBidirectional = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteReferencesItem; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteReferencesItem_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteReferencesItem_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("SourceNodeId", SourceNodeId); + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IsForward", IsForward); + encoder.WriteExpandedNodeId("TargetNodeId", TargetNodeId); + encoder.WriteBoolean("DeleteBidirectional", DeleteBidirectional); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SourceNodeId = decoder.ReadNodeId("SourceNodeId"); + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IsForward = decoder.ReadBoolean("IsForward"); + TargetNodeId = decoder.ReadExpandedNodeId("TargetNodeId"); + DeleteBidirectional = decoder.ReadBoolean("DeleteBidirectional"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteReferencesItem value = encodeable as DeleteReferencesItem; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_sourceNodeId, value.m_sourceNodeId)) return false; + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_isForward, value.m_isForward)) return false; + if (!Utils.IsEqual(m_targetNodeId, value.m_targetNodeId)) return false; + if (!Utils.IsEqual(m_deleteBidirectional, value.m_deleteBidirectional)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteReferencesItem)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteReferencesItem clone = (DeleteReferencesItem)base.MemberwiseClone(); + + clone.m_sourceNodeId = (NodeId)Utils.Clone(this.m_sourceNodeId); + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_isForward = (bool)Utils.Clone(this.m_isForward); + clone.m_targetNodeId = (ExpandedNodeId)Utils.Clone(this.m_targetNodeId); + clone.m_deleteBidirectional = (bool)Utils.Clone(this.m_deleteBidirectional); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_sourceNodeId; + private NodeId m_referenceTypeId; + private bool m_isForward; + private ExpandedNodeId m_targetNodeId; + private bool m_deleteBidirectional; + #endregion + } + + #region DeleteReferencesItemCollection Class + /// + /// A collection of DeleteReferencesItem objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfDeleteReferencesItem", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "DeleteReferencesItem")] + #if !NET_STANDARD + public partial class DeleteReferencesItemCollection : List, ICloneable + #else + public partial class DeleteReferencesItemCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public DeleteReferencesItemCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public DeleteReferencesItemCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public DeleteReferencesItemCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator DeleteReferencesItemCollection(DeleteReferencesItem[] values) + { + if (values != null) + { + return new DeleteReferencesItemCollection(values); + } + + return new DeleteReferencesItemCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator DeleteReferencesItem[](DeleteReferencesItemCollection 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 (DeleteReferencesItemCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + DeleteReferencesItemCollection clone = new DeleteReferencesItemCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((DeleteReferencesItem)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region DeleteReferencesRequest Class + #if (!OPCUA_EXCLUDE_DeleteReferencesRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteReferencesRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteReferencesRequest() + { + 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_requestHeader = new RequestHeader(); + m_referencesToDelete = new DeleteReferencesItemCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ReferencesToDelete", IsRequired = false, Order = 2)] + public DeleteReferencesItemCollection ReferencesToDelete + { + get + { + return m_referencesToDelete; + } + + set + { + m_referencesToDelete = value; + + if (value == null) + { + m_referencesToDelete = new DeleteReferencesItemCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteReferencesRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteReferencesRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteReferencesRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("ReferencesToDelete", ReferencesToDelete.ToArray(), typeof(DeleteReferencesItem)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ReferencesToDelete = (DeleteReferencesItemCollection)decoder.ReadEncodeableArray("ReferencesToDelete", typeof(DeleteReferencesItem)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteReferencesRequest value = encodeable as DeleteReferencesRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_referencesToDelete, value.m_referencesToDelete)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteReferencesRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteReferencesRequest clone = (DeleteReferencesRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_referencesToDelete = (DeleteReferencesItemCollection)Utils.Clone(this.m_referencesToDelete); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private DeleteReferencesItemCollection m_referencesToDelete; + #endregion + } + #endif + #endregion + + #region DeleteReferencesResponse Class + #if (!OPCUA_EXCLUDE_DeleteReferencesResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteReferencesResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteReferencesResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteReferencesResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteReferencesResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteReferencesResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteReferencesResponse value = encodeable as DeleteReferencesResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteReferencesResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteReferencesResponse clone = (DeleteReferencesResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region AttributeWriteMask Enumeration + #if (!OPCUA_EXCLUDE_AttributeWriteMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags] + 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, + } + #endif + #endregion + + #region BrowseDirection Enumeration + #if (!OPCUA_EXCLUDE_BrowseDirection) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum BrowseDirection + { + /// + [EnumMember(Value = "Forward_0")] + Forward = 0, + + /// + [EnumMember(Value = "Inverse_1")] + Inverse = 1, + + /// + [EnumMember(Value = "Both_2")] + Both = 2, + + /// + [EnumMember(Value = "Invalid_3")] + Invalid = 3, + } + #endif + #endregion + + #region ViewDescription Class + #if (!OPCUA_EXCLUDE_ViewDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ViewDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ViewDescription() + { + 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_viewId = null; + m_timestamp = DateTime.MinValue; + m_viewVersion = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ViewId", IsRequired = false, Order = 1)] + public NodeId ViewId + { + get { return m_viewId; } + set { m_viewId = value; } + } + + /// + [DataMember(Name = "Timestamp", IsRequired = false, Order = 2)] + public DateTime Timestamp + { + get { return m_timestamp; } + set { m_timestamp = value; } + } + + /// + [DataMember(Name = "ViewVersion", IsRequired = false, Order = 3)] + public uint ViewVersion + { + get { return m_viewVersion; } + set { m_viewVersion = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ViewDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ViewDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ViewDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("ViewId", ViewId); + encoder.WriteDateTime("Timestamp", Timestamp); + encoder.WriteUInt32("ViewVersion", ViewVersion); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ViewId = decoder.ReadNodeId("ViewId"); + Timestamp = decoder.ReadDateTime("Timestamp"); + ViewVersion = decoder.ReadUInt32("ViewVersion"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ViewDescription value = encodeable as ViewDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_viewId, value.m_viewId)) return false; + if (!Utils.IsEqual(m_timestamp, value.m_timestamp)) return false; + if (!Utils.IsEqual(m_viewVersion, value.m_viewVersion)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ViewDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ViewDescription clone = (ViewDescription)base.MemberwiseClone(); + + clone.m_viewId = (NodeId)Utils.Clone(this.m_viewId); + clone.m_timestamp = (DateTime)Utils.Clone(this.m_timestamp); + clone.m_viewVersion = (uint)Utils.Clone(this.m_viewVersion); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_viewId; + private DateTime m_timestamp; + private uint m_viewVersion; + #endregion + } + #endif + #endregion + + #region BrowseDescription Class + #if (!OPCUA_EXCLUDE_BrowseDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowseDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowseDescription() + { + 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_nodeId = null; + m_browseDirection = BrowseDirection.Forward; + m_referenceTypeId = null; + m_includeSubtypes = true; + m_nodeClassMask = (uint)0; + m_resultMask = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "BrowseDirection", IsRequired = false, Order = 2)] + public BrowseDirection BrowseDirection + { + get { return m_browseDirection; } + set { m_browseDirection = value; } + } + + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 3)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IncludeSubtypes", IsRequired = false, Order = 4)] + public bool IncludeSubtypes + { + get { return m_includeSubtypes; } + set { m_includeSubtypes = value; } + } + + /// + [DataMember(Name = "NodeClassMask", IsRequired = false, Order = 5)] + public uint NodeClassMask + { + get { return m_nodeClassMask; } + set { m_nodeClassMask = value; } + } + + /// + [DataMember(Name = "ResultMask", IsRequired = false, Order = 6)] + public uint ResultMask + { + get { return m_resultMask; } + set { m_resultMask = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowseDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowseDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowseDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteEnumerated("BrowseDirection", BrowseDirection); + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IncludeSubtypes", IncludeSubtypes); + encoder.WriteUInt32("NodeClassMask", NodeClassMask); + encoder.WriteUInt32("ResultMask", ResultMask); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + BrowseDirection = (BrowseDirection)decoder.ReadEnumerated("BrowseDirection", typeof(BrowseDirection)); + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IncludeSubtypes = decoder.ReadBoolean("IncludeSubtypes"); + NodeClassMask = decoder.ReadUInt32("NodeClassMask"); + ResultMask = decoder.ReadUInt32("ResultMask"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowseDescription value = encodeable as BrowseDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_browseDirection, value.m_browseDirection)) return false; + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_includeSubtypes, value.m_includeSubtypes)) return false; + if (!Utils.IsEqual(m_nodeClassMask, value.m_nodeClassMask)) return false; + if (!Utils.IsEqual(m_resultMask, value.m_resultMask)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowseDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowseDescription clone = (BrowseDescription)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_browseDirection = (BrowseDirection)Utils.Clone(this.m_browseDirection); + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_includeSubtypes = (bool)Utils.Clone(this.m_includeSubtypes); + clone.m_nodeClassMask = (uint)Utils.Clone(this.m_nodeClassMask); + clone.m_resultMask = (uint)Utils.Clone(this.m_resultMask); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private BrowseDirection m_browseDirection; + private NodeId m_referenceTypeId; + private bool m_includeSubtypes; + private uint m_nodeClassMask; + private uint m_resultMask; + #endregion + } + + #region BrowseDescriptionCollection Class + /// + /// A collection of BrowseDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrowseDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrowseDescription")] + #if !NET_STANDARD + public partial class BrowseDescriptionCollection : List, ICloneable + #else + public partial class BrowseDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrowseDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrowseDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrowseDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrowseDescriptionCollection(BrowseDescription[] values) + { + if (values != null) + { + return new BrowseDescriptionCollection(values); + } + + return new BrowseDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrowseDescription[](BrowseDescriptionCollection 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 (BrowseDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrowseDescriptionCollection clone = new BrowseDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrowseDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrowseResultMask Enumeration + #if (!OPCUA_EXCLUDE_BrowseResultMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum BrowseResultMask + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "ReferenceTypeId_1")] + ReferenceTypeId = 1, + + /// + [EnumMember(Value = "IsForward_2")] + IsForward = 2, + + /// + [EnumMember(Value = "NodeClass_4")] + NodeClass = 4, + + /// + [EnumMember(Value = "BrowseName_8")] + BrowseName = 8, + + /// + [EnumMember(Value = "DisplayName_16")] + DisplayName = 16, + + /// + [EnumMember(Value = "TypeDefinition_32")] + TypeDefinition = 32, + + /// + [EnumMember(Value = "All_63")] + All = 63, + + /// + [EnumMember(Value = "ReferenceTypeInfo_3")] + ReferenceTypeInfo = 3, + + /// + [EnumMember(Value = "TargetInfo_60")] + TargetInfo = 60, + } + #endif + #endregion + + #region ReferenceDescription Class + #if (!OPCUA_EXCLUDE_ReferenceDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReferenceDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReferenceDescription() + { + 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_referenceTypeId = null; + m_isForward = true; + m_nodeId = null; + m_browseName = null; + m_displayName = null; + m_nodeClass = NodeClass.Unspecified; + m_typeDefinition = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 1)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IsForward", IsRequired = false, Order = 2)] + public bool IsForward + { + get { return m_isForward; } + set { m_isForward = value; } + } + + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 3)] + public ExpandedNodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "BrowseName", IsRequired = false, Order = 4)] + public QualifiedName BrowseName + { + get { return m_browseName; } + set { m_browseName = value; } + } + + /// + [DataMember(Name = "DisplayName", IsRequired = false, Order = 5)] + public LocalizedText DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + /// + [DataMember(Name = "NodeClass", IsRequired = false, Order = 6)] + public NodeClass NodeClass + { + get { return m_nodeClass; } + set { m_nodeClass = value; } + } + + /// + [DataMember(Name = "TypeDefinition", IsRequired = false, Order = 7)] + public ExpandedNodeId TypeDefinition + { + get { return m_typeDefinition; } + set { m_typeDefinition = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReferenceDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReferenceDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReferenceDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IsForward", IsForward); + encoder.WriteExpandedNodeId("NodeId", NodeId); + encoder.WriteQualifiedName("BrowseName", BrowseName); + encoder.WriteLocalizedText("DisplayName", DisplayName); + encoder.WriteEnumerated("NodeClass", NodeClass); + encoder.WriteExpandedNodeId("TypeDefinition", TypeDefinition); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IsForward = decoder.ReadBoolean("IsForward"); + NodeId = decoder.ReadExpandedNodeId("NodeId"); + BrowseName = decoder.ReadQualifiedName("BrowseName"); + DisplayName = decoder.ReadLocalizedText("DisplayName"); + NodeClass = (NodeClass)decoder.ReadEnumerated("NodeClass", typeof(NodeClass)); + TypeDefinition = decoder.ReadExpandedNodeId("TypeDefinition"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReferenceDescription value = encodeable as ReferenceDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_isForward, value.m_isForward)) return false; + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_browseName, value.m_browseName)) return false; + if (!Utils.IsEqual(m_displayName, value.m_displayName)) return false; + if (!Utils.IsEqual(m_nodeClass, value.m_nodeClass)) return false; + if (!Utils.IsEqual(m_typeDefinition, value.m_typeDefinition)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReferenceDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReferenceDescription clone = (ReferenceDescription)base.MemberwiseClone(); + + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_isForward = (bool)Utils.Clone(this.m_isForward); + clone.m_nodeId = (ExpandedNodeId)Utils.Clone(this.m_nodeId); + clone.m_browseName = (QualifiedName)Utils.Clone(this.m_browseName); + clone.m_displayName = (LocalizedText)Utils.Clone(this.m_displayName); + clone.m_nodeClass = (NodeClass)Utils.Clone(this.m_nodeClass); + clone.m_typeDefinition = (ExpandedNodeId)Utils.Clone(this.m_typeDefinition); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_referenceTypeId; + private bool m_isForward; + private ExpandedNodeId m_nodeId; + private QualifiedName m_browseName; + private LocalizedText m_displayName; + private NodeClass m_nodeClass; + private ExpandedNodeId m_typeDefinition; + #endregion + } + + #region ReferenceDescriptionCollection Class + /// + /// A collection of ReferenceDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfReferenceDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ReferenceDescription")] + #if !NET_STANDARD + public partial class ReferenceDescriptionCollection : List, ICloneable + #else + public partial class ReferenceDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ReferenceDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ReferenceDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ReferenceDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ReferenceDescriptionCollection(ReferenceDescription[] values) + { + if (values != null) + { + return new ReferenceDescriptionCollection(values); + } + + return new ReferenceDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ReferenceDescription[](ReferenceDescriptionCollection 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 (ReferenceDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ReferenceDescriptionCollection clone = new ReferenceDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ReferenceDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrowseResult Class + #if (!OPCUA_EXCLUDE_BrowseResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowseResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowseResult() + { + 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_statusCode = StatusCodes.Good; + m_continuationPoint = null; + m_references = new ReferenceDescriptionCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + [DataMember(Name = "ContinuationPoint", IsRequired = false, Order = 2)] + public byte[] ContinuationPoint + { + get { return m_continuationPoint; } + set { m_continuationPoint = value; } + } + + /// + /// + /// + [DataMember(Name = "References", IsRequired = false, Order = 3)] + public ReferenceDescriptionCollection References + { + get + { + return m_references; + } + + set + { + m_references = value; + + if (value == null) + { + m_references = new ReferenceDescriptionCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowseResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowseResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowseResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteByteString("ContinuationPoint", ContinuationPoint); + encoder.WriteEncodeableArray("References", References.ToArray(), typeof(ReferenceDescription)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + ContinuationPoint = decoder.ReadByteString("ContinuationPoint"); + References = (ReferenceDescriptionCollection)decoder.ReadEncodeableArray("References", typeof(ReferenceDescription)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowseResult value = encodeable as BrowseResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_continuationPoint, value.m_continuationPoint)) return false; + if (!Utils.IsEqual(m_references, value.m_references)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowseResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowseResult clone = (BrowseResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_continuationPoint = (byte[])Utils.Clone(this.m_continuationPoint); + clone.m_references = (ReferenceDescriptionCollection)Utils.Clone(this.m_references); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private byte[] m_continuationPoint; + private ReferenceDescriptionCollection m_references; + #endregion + } + + #region BrowseResultCollection Class + /// + /// A collection of BrowseResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrowseResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrowseResult")] + #if !NET_STANDARD + public partial class BrowseResultCollection : List, ICloneable + #else + public partial class BrowseResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrowseResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrowseResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrowseResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrowseResultCollection(BrowseResult[] values) + { + if (values != null) + { + return new BrowseResultCollection(values); + } + + return new BrowseResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrowseResult[](BrowseResultCollection 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 (BrowseResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrowseResultCollection clone = new BrowseResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrowseResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrowseRequest Class + #if (!OPCUA_EXCLUDE_BrowseRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowseRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowseRequest() + { + 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_requestHeader = new RequestHeader(); + m_view = new ViewDescription(); + m_requestedMaxReferencesPerNode = (uint)0; + m_nodesToBrowse = new BrowseDescriptionCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "View", IsRequired = false, Order = 2)] + public ViewDescription View + { + get + { + return m_view; + } + + set + { + m_view = value; + + if (value == null) + { + m_view = new ViewDescription(); + } + } + } + + /// + [DataMember(Name = "RequestedMaxReferencesPerNode", IsRequired = false, Order = 3)] + public uint RequestedMaxReferencesPerNode + { + get { return m_requestedMaxReferencesPerNode; } + set { m_requestedMaxReferencesPerNode = value; } + } + + /// + /// + /// + [DataMember(Name = "NodesToBrowse", IsRequired = false, Order = 4)] + public BrowseDescriptionCollection NodesToBrowse + { + get + { + return m_nodesToBrowse; + } + + set + { + m_nodesToBrowse = value; + + if (value == null) + { + m_nodesToBrowse = new BrowseDescriptionCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowseRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowseRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowseRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeable("View", View, typeof(ViewDescription)); + encoder.WriteUInt32("RequestedMaxReferencesPerNode", RequestedMaxReferencesPerNode); + encoder.WriteEncodeableArray("NodesToBrowse", NodesToBrowse.ToArray(), typeof(BrowseDescription)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + View = (ViewDescription)decoder.ReadEncodeable("View", typeof(ViewDescription)); + RequestedMaxReferencesPerNode = decoder.ReadUInt32("RequestedMaxReferencesPerNode"); + NodesToBrowse = (BrowseDescriptionCollection)decoder.ReadEncodeableArray("NodesToBrowse", typeof(BrowseDescription)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowseRequest value = encodeable as BrowseRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_view, value.m_view)) return false; + if (!Utils.IsEqual(m_requestedMaxReferencesPerNode, value.m_requestedMaxReferencesPerNode)) return false; + if (!Utils.IsEqual(m_nodesToBrowse, value.m_nodesToBrowse)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowseRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowseRequest clone = (BrowseRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_view = (ViewDescription)Utils.Clone(this.m_view); + clone.m_requestedMaxReferencesPerNode = (uint)Utils.Clone(this.m_requestedMaxReferencesPerNode); + clone.m_nodesToBrowse = (BrowseDescriptionCollection)Utils.Clone(this.m_nodesToBrowse); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private ViewDescription m_view; + private uint m_requestedMaxReferencesPerNode; + private BrowseDescriptionCollection m_nodesToBrowse; + #endregion + } + #endif + #endregion + + #region BrowseResponse Class + #if (!OPCUA_EXCLUDE_BrowseResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowseResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowseResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new BrowseResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public BrowseResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new BrowseResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowseResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowseResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowseResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(BrowseResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (BrowseResultCollection)decoder.ReadEncodeableArray("Results", typeof(BrowseResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowseResponse value = encodeable as BrowseResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowseResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowseResponse clone = (BrowseResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (BrowseResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private BrowseResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region BrowseNextRequest Class + #if (!OPCUA_EXCLUDE_BrowseNextRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowseNextRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowseNextRequest() + { + 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_requestHeader = new RequestHeader(); + m_releaseContinuationPoints = true; + m_continuationPoints = new ByteStringCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "ReleaseContinuationPoints", IsRequired = false, Order = 2)] + public bool ReleaseContinuationPoints + { + get { return m_releaseContinuationPoints; } + set { m_releaseContinuationPoints = value; } + } + + /// + /// + /// + [DataMember(Name = "ContinuationPoints", IsRequired = false, Order = 3)] + public ByteStringCollection ContinuationPoints + { + get + { + return m_continuationPoints; + } + + set + { + m_continuationPoints = value; + + if (value == null) + { + m_continuationPoints = new ByteStringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowseNextRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowseNextRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowseNextRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteBoolean("ReleaseContinuationPoints", ReleaseContinuationPoints); + encoder.WriteByteStringArray("ContinuationPoints", ContinuationPoints); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ReleaseContinuationPoints = decoder.ReadBoolean("ReleaseContinuationPoints"); + ContinuationPoints = decoder.ReadByteStringArray("ContinuationPoints"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowseNextRequest value = encodeable as BrowseNextRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_releaseContinuationPoints, value.m_releaseContinuationPoints)) return false; + if (!Utils.IsEqual(m_continuationPoints, value.m_continuationPoints)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowseNextRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowseNextRequest clone = (BrowseNextRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_releaseContinuationPoints = (bool)Utils.Clone(this.m_releaseContinuationPoints); + clone.m_continuationPoints = (ByteStringCollection)Utils.Clone(this.m_continuationPoints); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private bool m_releaseContinuationPoints; + private ByteStringCollection m_continuationPoints; + #endregion + } + #endif + #endregion + + #region BrowseNextResponse Class + #if (!OPCUA_EXCLUDE_BrowseNextResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowseNextResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowseNextResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new BrowseResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public BrowseResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new BrowseResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowseNextResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowseNextResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowseNextResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(BrowseResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (BrowseResultCollection)decoder.ReadEncodeableArray("Results", typeof(BrowseResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowseNextResponse value = encodeable as BrowseNextResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowseNextResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowseNextResponse clone = (BrowseNextResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (BrowseResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private BrowseResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region RelativePathElement Class + #if (!OPCUA_EXCLUDE_RelativePathElement) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RelativePathElement : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RelativePathElement() + { + 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_referenceTypeId = null; + m_isInverse = true; + m_includeSubtypes = true; + m_targetName = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 1)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IsInverse", IsRequired = false, Order = 2)] + public bool IsInverse + { + get { return m_isInverse; } + set { m_isInverse = value; } + } + + /// + [DataMember(Name = "IncludeSubtypes", IsRequired = false, Order = 3)] + public bool IncludeSubtypes + { + get { return m_includeSubtypes; } + set { m_includeSubtypes = value; } + } + + /// + [DataMember(Name = "TargetName", IsRequired = false, Order = 4)] + public QualifiedName TargetName + { + get { return m_targetName; } + set { m_targetName = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RelativePathElement; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RelativePathElement_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RelativePathElement_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IsInverse", IsInverse); + encoder.WriteBoolean("IncludeSubtypes", IncludeSubtypes); + encoder.WriteQualifiedName("TargetName", TargetName); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IsInverse = decoder.ReadBoolean("IsInverse"); + IncludeSubtypes = decoder.ReadBoolean("IncludeSubtypes"); + TargetName = decoder.ReadQualifiedName("TargetName"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RelativePathElement value = encodeable as RelativePathElement; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_isInverse, value.m_isInverse)) return false; + if (!Utils.IsEqual(m_includeSubtypes, value.m_includeSubtypes)) return false; + if (!Utils.IsEqual(m_targetName, value.m_targetName)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RelativePathElement)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RelativePathElement clone = (RelativePathElement)base.MemberwiseClone(); + + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_isInverse = (bool)Utils.Clone(this.m_isInverse); + clone.m_includeSubtypes = (bool)Utils.Clone(this.m_includeSubtypes); + clone.m_targetName = (QualifiedName)Utils.Clone(this.m_targetName); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_referenceTypeId; + private bool m_isInverse; + private bool m_includeSubtypes; + private QualifiedName m_targetName; + #endregion + } + + #region RelativePathElementCollection Class + /// + /// A collection of RelativePathElement objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfRelativePathElement", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "RelativePathElement")] + #if !NET_STANDARD + public partial class RelativePathElementCollection : List, ICloneable + #else + public partial class RelativePathElementCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public RelativePathElementCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public RelativePathElementCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public RelativePathElementCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator RelativePathElementCollection(RelativePathElement[] values) + { + if (values != null) + { + return new RelativePathElementCollection(values); + } + + return new RelativePathElementCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator RelativePathElement[](RelativePathElementCollection 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 (RelativePathElementCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + RelativePathElementCollection clone = new RelativePathElementCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((RelativePathElement)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region RelativePath Class + #if (!OPCUA_EXCLUDE_RelativePath) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RelativePath : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RelativePath() + { + 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_elements = new RelativePathElementCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "Elements", IsRequired = false, Order = 1)] + public RelativePathElementCollection Elements + { + get + { + return m_elements; + } + + set + { + m_elements = value; + + if (value == null) + { + m_elements = new RelativePathElementCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RelativePath; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RelativePath_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RelativePath_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("Elements", Elements.ToArray(), typeof(RelativePathElement)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Elements = (RelativePathElementCollection)decoder.ReadEncodeableArray("Elements", typeof(RelativePathElement)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RelativePath value = encodeable as RelativePath; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_elements, value.m_elements)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RelativePath)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RelativePath clone = (RelativePath)base.MemberwiseClone(); + + clone.m_elements = (RelativePathElementCollection)Utils.Clone(this.m_elements); + + return clone; + } + #endregion + + #region Private Fields + private RelativePathElementCollection m_elements; + #endregion + } + #endif + #endregion + + #region BrowsePath Class + #if (!OPCUA_EXCLUDE_BrowsePath) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowsePath : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowsePath() + { + 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_startingNode = null; + m_relativePath = new RelativePath(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StartingNode", IsRequired = false, Order = 1)] + public NodeId StartingNode + { + get { return m_startingNode; } + set { m_startingNode = value; } + } + + /// + /// + /// + [DataMember(Name = "RelativePath", IsRequired = false, Order = 2)] + public RelativePath RelativePath + { + get + { + return m_relativePath; + } + + set + { + m_relativePath = value; + + if (value == null) + { + m_relativePath = new RelativePath(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowsePath; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowsePath_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowsePath_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("StartingNode", StartingNode); + encoder.WriteEncodeable("RelativePath", RelativePath, typeof(RelativePath)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StartingNode = decoder.ReadNodeId("StartingNode"); + RelativePath = (RelativePath)decoder.ReadEncodeable("RelativePath", typeof(RelativePath)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowsePath value = encodeable as BrowsePath; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_startingNode, value.m_startingNode)) return false; + if (!Utils.IsEqual(m_relativePath, value.m_relativePath)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowsePath)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowsePath clone = (BrowsePath)base.MemberwiseClone(); + + clone.m_startingNode = (NodeId)Utils.Clone(this.m_startingNode); + clone.m_relativePath = (RelativePath)Utils.Clone(this.m_relativePath); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_startingNode; + private RelativePath m_relativePath; + #endregion + } + + #region BrowsePathCollection Class + /// + /// A collection of BrowsePath objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrowsePath", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrowsePath")] + #if !NET_STANDARD + public partial class BrowsePathCollection : List, ICloneable + #else + public partial class BrowsePathCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrowsePathCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrowsePathCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrowsePathCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrowsePathCollection(BrowsePath[] values) + { + if (values != null) + { + return new BrowsePathCollection(values); + } + + return new BrowsePathCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrowsePath[](BrowsePathCollection 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 (BrowsePathCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrowsePathCollection clone = new BrowsePathCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrowsePath)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrowsePathTarget Class + #if (!OPCUA_EXCLUDE_BrowsePathTarget) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowsePathTarget : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowsePathTarget() + { + 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_targetId = null; + m_remainingPathIndex = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "TargetId", IsRequired = false, Order = 1)] + public ExpandedNodeId TargetId + { + get { return m_targetId; } + set { m_targetId = value; } + } + + /// + [DataMember(Name = "RemainingPathIndex", IsRequired = false, Order = 2)] + public uint RemainingPathIndex + { + get { return m_remainingPathIndex; } + set { m_remainingPathIndex = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowsePathTarget; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowsePathTarget_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowsePathTarget_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteExpandedNodeId("TargetId", TargetId); + encoder.WriteUInt32("RemainingPathIndex", RemainingPathIndex); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TargetId = decoder.ReadExpandedNodeId("TargetId"); + RemainingPathIndex = decoder.ReadUInt32("RemainingPathIndex"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowsePathTarget value = encodeable as BrowsePathTarget; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_targetId, value.m_targetId)) return false; + if (!Utils.IsEqual(m_remainingPathIndex, value.m_remainingPathIndex)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowsePathTarget)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowsePathTarget clone = (BrowsePathTarget)base.MemberwiseClone(); + + clone.m_targetId = (ExpandedNodeId)Utils.Clone(this.m_targetId); + clone.m_remainingPathIndex = (uint)Utils.Clone(this.m_remainingPathIndex); + + return clone; + } + #endregion + + #region Private Fields + private ExpandedNodeId m_targetId; + private uint m_remainingPathIndex; + #endregion + } + + #region BrowsePathTargetCollection Class + /// + /// A collection of BrowsePathTarget objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrowsePathTarget", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrowsePathTarget")] + #if !NET_STANDARD + public partial class BrowsePathTargetCollection : List, ICloneable + #else + public partial class BrowsePathTargetCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrowsePathTargetCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrowsePathTargetCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrowsePathTargetCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrowsePathTargetCollection(BrowsePathTarget[] values) + { + if (values != null) + { + return new BrowsePathTargetCollection(values); + } + + return new BrowsePathTargetCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrowsePathTarget[](BrowsePathTargetCollection 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 (BrowsePathTargetCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrowsePathTargetCollection clone = new BrowsePathTargetCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrowsePathTarget)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region BrowsePathResult Class + #if (!OPCUA_EXCLUDE_BrowsePathResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BrowsePathResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BrowsePathResult() + { + 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_statusCode = StatusCodes.Good; + m_targets = new BrowsePathTargetCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// + /// + [DataMember(Name = "Targets", IsRequired = false, Order = 2)] + public BrowsePathTargetCollection Targets + { + get + { + return m_targets; + } + + set + { + m_targets = value; + + if (value == null) + { + m_targets = new BrowsePathTargetCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BrowsePathResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BrowsePathResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BrowsePathResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteEncodeableArray("Targets", Targets.ToArray(), typeof(BrowsePathTarget)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + Targets = (BrowsePathTargetCollection)decoder.ReadEncodeableArray("Targets", typeof(BrowsePathTarget)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BrowsePathResult value = encodeable as BrowsePathResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_targets, value.m_targets)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BrowsePathResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BrowsePathResult clone = (BrowsePathResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_targets = (BrowsePathTargetCollection)Utils.Clone(this.m_targets); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private BrowsePathTargetCollection m_targets; + #endregion + } + + #region BrowsePathResultCollection Class + /// + /// A collection of BrowsePathResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfBrowsePathResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "BrowsePathResult")] + #if !NET_STANDARD + public partial class BrowsePathResultCollection : List, ICloneable + #else + public partial class BrowsePathResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public BrowsePathResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public BrowsePathResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public BrowsePathResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator BrowsePathResultCollection(BrowsePathResult[] values) + { + if (values != null) + { + return new BrowsePathResultCollection(values); + } + + return new BrowsePathResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator BrowsePathResult[](BrowsePathResultCollection 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 (BrowsePathResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + BrowsePathResultCollection clone = new BrowsePathResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((BrowsePathResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region TranslateBrowsePathsToNodeIdsRequest Class + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIdsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TranslateBrowsePathsToNodeIdsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TranslateBrowsePathsToNodeIdsRequest() + { + 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_requestHeader = new RequestHeader(); + m_browsePaths = new BrowsePathCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "BrowsePaths", IsRequired = false, Order = 2)] + public BrowsePathCollection BrowsePaths + { + get + { + return m_browsePaths; + } + + set + { + m_browsePaths = value; + + if (value == null) + { + m_browsePaths = new BrowsePathCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TranslateBrowsePathsToNodeIdsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("BrowsePaths", BrowsePaths.ToArray(), typeof(BrowsePath)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + BrowsePaths = (BrowsePathCollection)decoder.ReadEncodeableArray("BrowsePaths", typeof(BrowsePath)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TranslateBrowsePathsToNodeIdsRequest value = encodeable as TranslateBrowsePathsToNodeIdsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_browsePaths, value.m_browsePaths)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TranslateBrowsePathsToNodeIdsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TranslateBrowsePathsToNodeIdsRequest clone = (TranslateBrowsePathsToNodeIdsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_browsePaths = (BrowsePathCollection)Utils.Clone(this.m_browsePaths); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private BrowsePathCollection m_browsePaths; + #endregion + } + #endif + #endregion + + #region TranslateBrowsePathsToNodeIdsResponse Class + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIdsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TranslateBrowsePathsToNodeIdsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TranslateBrowsePathsToNodeIdsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new BrowsePathResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public BrowsePathResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new BrowsePathResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TranslateBrowsePathsToNodeIdsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(BrowsePathResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (BrowsePathResultCollection)decoder.ReadEncodeableArray("Results", typeof(BrowsePathResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TranslateBrowsePathsToNodeIdsResponse value = encodeable as TranslateBrowsePathsToNodeIdsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TranslateBrowsePathsToNodeIdsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TranslateBrowsePathsToNodeIdsResponse clone = (TranslateBrowsePathsToNodeIdsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (BrowsePathResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private BrowsePathResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region RegisterNodesRequest Class + #if (!OPCUA_EXCLUDE_RegisterNodesRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisterNodesRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisterNodesRequest() + { + 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_requestHeader = new RequestHeader(); + m_nodesToRegister = new NodeIdCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NodesToRegister", IsRequired = false, Order = 2)] + public NodeIdCollection NodesToRegister + { + get + { + return m_nodesToRegister; + } + + set + { + m_nodesToRegister = value; + + if (value == null) + { + m_nodesToRegister = new NodeIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisterNodesRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisterNodesRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisterNodesRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteNodeIdArray("NodesToRegister", NodesToRegister); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + NodesToRegister = decoder.ReadNodeIdArray("NodesToRegister"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisterNodesRequest value = encodeable as RegisterNodesRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_nodesToRegister, value.m_nodesToRegister)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisterNodesRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisterNodesRequest clone = (RegisterNodesRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_nodesToRegister = (NodeIdCollection)Utils.Clone(this.m_nodesToRegister); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private NodeIdCollection m_nodesToRegister; + #endregion + } + #endif + #endregion + + #region RegisterNodesResponse Class + #if (!OPCUA_EXCLUDE_RegisterNodesResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RegisterNodesResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RegisterNodesResponse() + { + 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_responseHeader = new ResponseHeader(); + m_registeredNodeIds = new NodeIdCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "RegisteredNodeIds", IsRequired = false, Order = 2)] + public NodeIdCollection RegisteredNodeIds + { + get + { + return m_registeredNodeIds; + } + + set + { + m_registeredNodeIds = value; + + if (value == null) + { + m_registeredNodeIds = new NodeIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RegisterNodesResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RegisterNodesResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RegisterNodesResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteNodeIdArray("RegisteredNodeIds", RegisteredNodeIds); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + RegisteredNodeIds = decoder.ReadNodeIdArray("RegisteredNodeIds"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RegisterNodesResponse value = encodeable as RegisterNodesResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_registeredNodeIds, value.m_registeredNodeIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RegisterNodesResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RegisterNodesResponse clone = (RegisterNodesResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_registeredNodeIds = (NodeIdCollection)Utils.Clone(this.m_registeredNodeIds); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private NodeIdCollection m_registeredNodeIds; + #endregion + } + #endif + #endregion + + #region UnregisterNodesRequest Class + #if (!OPCUA_EXCLUDE_UnregisterNodesRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UnregisterNodesRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public UnregisterNodesRequest() + { + 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_requestHeader = new RequestHeader(); + m_nodesToUnregister = new NodeIdCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NodesToUnregister", IsRequired = false, Order = 2)] + public NodeIdCollection NodesToUnregister + { + get + { + return m_nodesToUnregister; + } + + set + { + m_nodesToUnregister = value; + + if (value == null) + { + m_nodesToUnregister = new NodeIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.UnregisterNodesRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UnregisterNodesRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UnregisterNodesRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteNodeIdArray("NodesToUnregister", NodesToUnregister); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + NodesToUnregister = decoder.ReadNodeIdArray("NodesToUnregister"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UnregisterNodesRequest value = encodeable as UnregisterNodesRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_nodesToUnregister, value.m_nodesToUnregister)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (UnregisterNodesRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UnregisterNodesRequest clone = (UnregisterNodesRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_nodesToUnregister = (NodeIdCollection)Utils.Clone(this.m_nodesToUnregister); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private NodeIdCollection m_nodesToUnregister; + #endregion + } + #endif + #endregion + + #region UnregisterNodesResponse Class + #if (!OPCUA_EXCLUDE_UnregisterNodesResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UnregisterNodesResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public UnregisterNodesResponse() + { + 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_responseHeader = new ResponseHeader(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.UnregisterNodesResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UnregisterNodesResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UnregisterNodesResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UnregisterNodesResponse value = encodeable as UnregisterNodesResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (UnregisterNodesResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UnregisterNodesResponse clone = (UnregisterNodesResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + #endregion + } + #endif + #endregion + + #region EndpointConfiguration Class + #if (!OPCUA_EXCLUDE_EndpointConfiguration) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EndpointConfiguration : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EndpointConfiguration() + { + 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_operationTimeout = (int)0; + m_useBinaryEncoding = true; + m_maxStringLength = (int)0; + m_maxByteStringLength = (int)0; + m_maxArrayLength = (int)0; + m_maxMessageSize = (int)0; + m_maxBufferSize = (int)0; + m_channelLifetime = (int)0; + m_securityTokenLifetime = (int)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "OperationTimeout", IsRequired = false, Order = 1)] + public int OperationTimeout + { + get { return m_operationTimeout; } + set { m_operationTimeout = value; } + } + + /// + [DataMember(Name = "UseBinaryEncoding", IsRequired = false, Order = 2)] + public bool UseBinaryEncoding + { + get { return m_useBinaryEncoding; } + set { m_useBinaryEncoding = value; } + } + + /// + [DataMember(Name = "MaxStringLength", IsRequired = false, Order = 3)] + public int MaxStringLength + { + get { return m_maxStringLength; } + set { m_maxStringLength = value; } + } + + /// + [DataMember(Name = "MaxByteStringLength", IsRequired = false, Order = 4)] + public int MaxByteStringLength + { + get { return m_maxByteStringLength; } + set { m_maxByteStringLength = value; } + } + + /// + [DataMember(Name = "MaxArrayLength", IsRequired = false, Order = 5)] + public int MaxArrayLength + { + get { return m_maxArrayLength; } + set { m_maxArrayLength = value; } + } + + /// + [DataMember(Name = "MaxMessageSize", IsRequired = false, Order = 6)] + public int MaxMessageSize + { + get { return m_maxMessageSize; } + set { m_maxMessageSize = value; } + } + + /// + [DataMember(Name = "MaxBufferSize", IsRequired = false, Order = 7)] + public int MaxBufferSize + { + get { return m_maxBufferSize; } + set { m_maxBufferSize = value; } + } + + /// + [DataMember(Name = "ChannelLifetime", IsRequired = false, Order = 8)] + public int ChannelLifetime + { + get { return m_channelLifetime; } + set { m_channelLifetime = value; } + } + + /// + [DataMember(Name = "SecurityTokenLifetime", IsRequired = false, Order = 9)] + public int SecurityTokenLifetime + { + get { return m_securityTokenLifetime; } + set { m_securityTokenLifetime = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EndpointConfiguration; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EndpointConfiguration_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EndpointConfiguration_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteInt32("OperationTimeout", OperationTimeout); + encoder.WriteBoolean("UseBinaryEncoding", UseBinaryEncoding); + encoder.WriteInt32("MaxStringLength", MaxStringLength); + encoder.WriteInt32("MaxByteStringLength", MaxByteStringLength); + encoder.WriteInt32("MaxArrayLength", MaxArrayLength); + encoder.WriteInt32("MaxMessageSize", MaxMessageSize); + encoder.WriteInt32("MaxBufferSize", MaxBufferSize); + encoder.WriteInt32("ChannelLifetime", ChannelLifetime); + encoder.WriteInt32("SecurityTokenLifetime", SecurityTokenLifetime); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + OperationTimeout = decoder.ReadInt32("OperationTimeout"); + UseBinaryEncoding = decoder.ReadBoolean("UseBinaryEncoding"); + MaxStringLength = decoder.ReadInt32("MaxStringLength"); + MaxByteStringLength = decoder.ReadInt32("MaxByteStringLength"); + MaxArrayLength = decoder.ReadInt32("MaxArrayLength"); + MaxMessageSize = decoder.ReadInt32("MaxMessageSize"); + MaxBufferSize = decoder.ReadInt32("MaxBufferSize"); + ChannelLifetime = decoder.ReadInt32("ChannelLifetime"); + SecurityTokenLifetime = decoder.ReadInt32("SecurityTokenLifetime"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EndpointConfiguration value = encodeable as EndpointConfiguration; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_operationTimeout, value.m_operationTimeout)) return false; + if (!Utils.IsEqual(m_useBinaryEncoding, value.m_useBinaryEncoding)) return false; + if (!Utils.IsEqual(m_maxStringLength, value.m_maxStringLength)) return false; + if (!Utils.IsEqual(m_maxByteStringLength, value.m_maxByteStringLength)) return false; + if (!Utils.IsEqual(m_maxArrayLength, value.m_maxArrayLength)) return false; + if (!Utils.IsEqual(m_maxMessageSize, value.m_maxMessageSize)) return false; + if (!Utils.IsEqual(m_maxBufferSize, value.m_maxBufferSize)) return false; + if (!Utils.IsEqual(m_channelLifetime, value.m_channelLifetime)) return false; + if (!Utils.IsEqual(m_securityTokenLifetime, value.m_securityTokenLifetime)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EndpointConfiguration)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EndpointConfiguration clone = (EndpointConfiguration)base.MemberwiseClone(); + + clone.m_operationTimeout = (int)Utils.Clone(this.m_operationTimeout); + clone.m_useBinaryEncoding = (bool)Utils.Clone(this.m_useBinaryEncoding); + clone.m_maxStringLength = (int)Utils.Clone(this.m_maxStringLength); + clone.m_maxByteStringLength = (int)Utils.Clone(this.m_maxByteStringLength); + clone.m_maxArrayLength = (int)Utils.Clone(this.m_maxArrayLength); + clone.m_maxMessageSize = (int)Utils.Clone(this.m_maxMessageSize); + clone.m_maxBufferSize = (int)Utils.Clone(this.m_maxBufferSize); + clone.m_channelLifetime = (int)Utils.Clone(this.m_channelLifetime); + clone.m_securityTokenLifetime = (int)Utils.Clone(this.m_securityTokenLifetime); + + return clone; + } + #endregion + + #region Private Fields + private int m_operationTimeout; + private bool m_useBinaryEncoding; + private int m_maxStringLength; + private int m_maxByteStringLength; + private int m_maxArrayLength; + private int m_maxMessageSize; + private int m_maxBufferSize; + private int m_channelLifetime; + private int m_securityTokenLifetime; + #endregion + } + + #region EndpointConfigurationCollection Class + /// + /// A collection of EndpointConfiguration objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEndpointConfiguration", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EndpointConfiguration")] + #if !NET_STANDARD + public partial class EndpointConfigurationCollection : List, ICloneable + #else + public partial class EndpointConfigurationCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EndpointConfigurationCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EndpointConfigurationCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EndpointConfigurationCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EndpointConfigurationCollection(EndpointConfiguration[] values) + { + if (values != null) + { + return new EndpointConfigurationCollection(values); + } + + return new EndpointConfigurationCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EndpointConfiguration[](EndpointConfigurationCollection 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 (EndpointConfigurationCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EndpointConfigurationCollection clone = new EndpointConfigurationCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EndpointConfiguration)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region QueryDataDescription Class + #if (!OPCUA_EXCLUDE_QueryDataDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class QueryDataDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public QueryDataDescription() + { + 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_relativePath = new RelativePath(); + m_attributeId = (uint)0; + m_indexRange = null; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RelativePath", IsRequired = false, Order = 1)] + public RelativePath RelativePath + { + get + { + return m_relativePath; + } + + set + { + m_relativePath = value; + + if (value == null) + { + m_relativePath = new RelativePath(); + } + } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 2)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 3)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.QueryDataDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.QueryDataDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.QueryDataDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RelativePath", RelativePath, typeof(RelativePath)); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteString("IndexRange", IndexRange); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RelativePath = (RelativePath)decoder.ReadEncodeable("RelativePath", typeof(RelativePath)); + AttributeId = decoder.ReadUInt32("AttributeId"); + IndexRange = decoder.ReadString("IndexRange"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + QueryDataDescription value = encodeable as QueryDataDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_relativePath, value.m_relativePath)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (QueryDataDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + QueryDataDescription clone = (QueryDataDescription)base.MemberwiseClone(); + + clone.m_relativePath = (RelativePath)Utils.Clone(this.m_relativePath); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + + return clone; + } + #endregion + + #region Private Fields + private RelativePath m_relativePath; + private uint m_attributeId; + private string m_indexRange; + #endregion + } + + #region QueryDataDescriptionCollection Class + /// + /// A collection of QueryDataDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfQueryDataDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "QueryDataDescription")] + #if !NET_STANDARD + public partial class QueryDataDescriptionCollection : List, ICloneable + #else + public partial class QueryDataDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public QueryDataDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public QueryDataDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public QueryDataDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator QueryDataDescriptionCollection(QueryDataDescription[] values) + { + if (values != null) + { + return new QueryDataDescriptionCollection(values); + } + + return new QueryDataDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator QueryDataDescription[](QueryDataDescriptionCollection 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 (QueryDataDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + QueryDataDescriptionCollection clone = new QueryDataDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((QueryDataDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NodeTypeDescription Class + #if (!OPCUA_EXCLUDE_NodeTypeDescription) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NodeTypeDescription : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NodeTypeDescription() + { + 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_typeDefinitionNode = null; + m_includeSubTypes = true; + m_dataToReturn = new QueryDataDescriptionCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "TypeDefinitionNode", IsRequired = false, Order = 1)] + public ExpandedNodeId TypeDefinitionNode + { + get { return m_typeDefinitionNode; } + set { m_typeDefinitionNode = value; } + } + + /// + [DataMember(Name = "IncludeSubTypes", IsRequired = false, Order = 2)] + public bool IncludeSubTypes + { + get { return m_includeSubTypes; } + set { m_includeSubTypes = value; } + } + + /// + /// + /// + [DataMember(Name = "DataToReturn", IsRequired = false, Order = 3)] + public QueryDataDescriptionCollection DataToReturn + { + get + { + return m_dataToReturn; + } + + set + { + m_dataToReturn = value; + + if (value == null) + { + m_dataToReturn = new QueryDataDescriptionCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NodeTypeDescription; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NodeTypeDescription_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NodeTypeDescription_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteExpandedNodeId("TypeDefinitionNode", TypeDefinitionNode); + encoder.WriteBoolean("IncludeSubTypes", IncludeSubTypes); + encoder.WriteEncodeableArray("DataToReturn", DataToReturn.ToArray(), typeof(QueryDataDescription)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TypeDefinitionNode = decoder.ReadExpandedNodeId("TypeDefinitionNode"); + IncludeSubTypes = decoder.ReadBoolean("IncludeSubTypes"); + DataToReturn = (QueryDataDescriptionCollection)decoder.ReadEncodeableArray("DataToReturn", typeof(QueryDataDescription)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NodeTypeDescription value = encodeable as NodeTypeDescription; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_typeDefinitionNode, value.m_typeDefinitionNode)) return false; + if (!Utils.IsEqual(m_includeSubTypes, value.m_includeSubTypes)) return false; + if (!Utils.IsEqual(m_dataToReturn, value.m_dataToReturn)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NodeTypeDescription)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NodeTypeDescription clone = (NodeTypeDescription)base.MemberwiseClone(); + + clone.m_typeDefinitionNode = (ExpandedNodeId)Utils.Clone(this.m_typeDefinitionNode); + clone.m_includeSubTypes = (bool)Utils.Clone(this.m_includeSubTypes); + clone.m_dataToReturn = (QueryDataDescriptionCollection)Utils.Clone(this.m_dataToReturn); + + return clone; + } + #endregion + + #region Private Fields + private ExpandedNodeId m_typeDefinitionNode; + private bool m_includeSubTypes; + private QueryDataDescriptionCollection m_dataToReturn; + #endregion + } + + #region NodeTypeDescriptionCollection Class + /// + /// A collection of NodeTypeDescription objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNodeTypeDescription", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "NodeTypeDescription")] + #if !NET_STANDARD + public partial class NodeTypeDescriptionCollection : List, ICloneable + #else + public partial class NodeTypeDescriptionCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NodeTypeDescriptionCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NodeTypeDescriptionCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NodeTypeDescriptionCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NodeTypeDescriptionCollection(NodeTypeDescription[] values) + { + if (values != null) + { + return new NodeTypeDescriptionCollection(values); + } + + return new NodeTypeDescriptionCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator NodeTypeDescription[](NodeTypeDescriptionCollection 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 (NodeTypeDescriptionCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NodeTypeDescriptionCollection clone = new NodeTypeDescriptionCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((NodeTypeDescription)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region FilterOperator Enumeration + #if (!OPCUA_EXCLUDE_FilterOperator) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum FilterOperator + { + /// + [EnumMember(Value = "Equals_0")] + Equals = 0, + + /// + [EnumMember(Value = "IsNull_1")] + IsNull = 1, + + /// + [EnumMember(Value = "GreaterThan_2")] + GreaterThan = 2, + + /// + [EnumMember(Value = "LessThan_3")] + LessThan = 3, + + /// + [EnumMember(Value = "GreaterThanOrEqual_4")] + GreaterThanOrEqual = 4, + + /// + [EnumMember(Value = "LessThanOrEqual_5")] + LessThanOrEqual = 5, + + /// + [EnumMember(Value = "Like_6")] + Like = 6, + + /// + [EnumMember(Value = "Not_7")] + Not = 7, + + /// + [EnumMember(Value = "Between_8")] + Between = 8, + + /// + [EnumMember(Value = "InList_9")] + InList = 9, + + /// + [EnumMember(Value = "And_10")] + And = 10, + + /// + [EnumMember(Value = "Or_11")] + Or = 11, + + /// + [EnumMember(Value = "Cast_12")] + Cast = 12, + + /// + [EnumMember(Value = "InView_13")] + InView = 13, + + /// + [EnumMember(Value = "OfType_14")] + OfType = 14, + + /// + [EnumMember(Value = "RelatedTo_15")] + RelatedTo = 15, + + /// + [EnumMember(Value = "BitwiseAnd_16")] + BitwiseAnd = 16, + + /// + [EnumMember(Value = "BitwiseOr_17")] + BitwiseOr = 17, + } + #endif + #endregion + + #region QueryDataSet Class + #if (!OPCUA_EXCLUDE_QueryDataSet) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class QueryDataSet : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public QueryDataSet() + { + 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_nodeId = null; + m_typeDefinitionNode = null; + m_values = new VariantCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public ExpandedNodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "TypeDefinitionNode", IsRequired = false, Order = 2)] + public ExpandedNodeId TypeDefinitionNode + { + get { return m_typeDefinitionNode; } + set { m_typeDefinitionNode = value; } + } + + /// + /// + /// + [DataMember(Name = "Values", IsRequired = false, Order = 3)] + public VariantCollection Values + { + get + { + return m_values; + } + + set + { + m_values = value; + + if (value == null) + { + m_values = new VariantCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.QueryDataSet; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.QueryDataSet_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.QueryDataSet_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteExpandedNodeId("NodeId", NodeId); + encoder.WriteExpandedNodeId("TypeDefinitionNode", TypeDefinitionNode); + encoder.WriteVariantArray("Values", Values); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadExpandedNodeId("NodeId"); + TypeDefinitionNode = decoder.ReadExpandedNodeId("TypeDefinitionNode"); + Values = decoder.ReadVariantArray("Values"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + QueryDataSet value = encodeable as QueryDataSet; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_typeDefinitionNode, value.m_typeDefinitionNode)) return false; + if (!Utils.IsEqual(m_values, value.m_values)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (QueryDataSet)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + QueryDataSet clone = (QueryDataSet)base.MemberwiseClone(); + + clone.m_nodeId = (ExpandedNodeId)Utils.Clone(this.m_nodeId); + clone.m_typeDefinitionNode = (ExpandedNodeId)Utils.Clone(this.m_typeDefinitionNode); + clone.m_values = (VariantCollection)Utils.Clone(this.m_values); + + return clone; + } + #endregion + + #region Private Fields + private ExpandedNodeId m_nodeId; + private ExpandedNodeId m_typeDefinitionNode; + private VariantCollection m_values; + #endregion + } + + #region QueryDataSetCollection Class + /// + /// A collection of QueryDataSet objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfQueryDataSet", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "QueryDataSet")] + #if !NET_STANDARD + public partial class QueryDataSetCollection : List, ICloneable + #else + public partial class QueryDataSetCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public QueryDataSetCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public QueryDataSetCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public QueryDataSetCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator QueryDataSetCollection(QueryDataSet[] values) + { + if (values != null) + { + return new QueryDataSetCollection(values); + } + + return new QueryDataSetCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator QueryDataSet[](QueryDataSetCollection 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 (QueryDataSetCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + QueryDataSetCollection clone = new QueryDataSetCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((QueryDataSet)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NodeReference Class + #if (!OPCUA_EXCLUDE_NodeReference) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NodeReference : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NodeReference() + { + 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_nodeId = null; + m_referenceTypeId = null; + m_isForward = true; + m_referencedNodeIds = new NodeIdCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "ReferenceTypeId", IsRequired = false, Order = 2)] + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + set { m_referenceTypeId = value; } + } + + /// + [DataMember(Name = "IsForward", IsRequired = false, Order = 3)] + public bool IsForward + { + get { return m_isForward; } + set { m_isForward = value; } + } + + /// + /// + /// + [DataMember(Name = "ReferencedNodeIds", IsRequired = false, Order = 4)] + public NodeIdCollection ReferencedNodeIds + { + get + { + return m_referencedNodeIds; + } + + set + { + m_referencedNodeIds = value; + + if (value == null) + { + m_referencedNodeIds = new NodeIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NodeReference; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NodeReference_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NodeReference_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteNodeId("ReferenceTypeId", ReferenceTypeId); + encoder.WriteBoolean("IsForward", IsForward); + encoder.WriteNodeIdArray("ReferencedNodeIds", ReferencedNodeIds); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + IsForward = decoder.ReadBoolean("IsForward"); + ReferencedNodeIds = decoder.ReadNodeIdArray("ReferencedNodeIds"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NodeReference value = encodeable as NodeReference; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_referenceTypeId, value.m_referenceTypeId)) return false; + if (!Utils.IsEqual(m_isForward, value.m_isForward)) return false; + if (!Utils.IsEqual(m_referencedNodeIds, value.m_referencedNodeIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NodeReference)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NodeReference clone = (NodeReference)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_referenceTypeId = (NodeId)Utils.Clone(this.m_referenceTypeId); + clone.m_isForward = (bool)Utils.Clone(this.m_isForward); + clone.m_referencedNodeIds = (NodeIdCollection)Utils.Clone(this.m_referencedNodeIds); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private NodeId m_referenceTypeId; + private bool m_isForward; + private NodeIdCollection m_referencedNodeIds; + #endregion + } + + #region NodeReferenceCollection Class + /// + /// A collection of NodeReference objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNodeReference", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "NodeReference")] + #if !NET_STANDARD + public partial class NodeReferenceCollection : List, ICloneable + #else + public partial class NodeReferenceCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NodeReferenceCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NodeReferenceCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NodeReferenceCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NodeReferenceCollection(NodeReference[] values) + { + if (values != null) + { + return new NodeReferenceCollection(values); + } + + return new NodeReferenceCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator NodeReference[](NodeReferenceCollection 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 (NodeReferenceCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NodeReferenceCollection clone = new NodeReferenceCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((NodeReference)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ContentFilterElement Class + #if (!OPCUA_EXCLUDE_ContentFilterElement) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ContentFilterElement : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ContentFilterElement() + { + 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_filterOperator = FilterOperator.Equals; + m_filterOperands = new ExtensionObjectCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "FilterOperator", IsRequired = false, Order = 1)] + public FilterOperator FilterOperator + { + get { return m_filterOperator; } + set { m_filterOperator = value; } + } + + /// + /// + /// + [DataMember(Name = "FilterOperands", IsRequired = false, Order = 2)] + public ExtensionObjectCollection FilterOperands + { + get + { + return m_filterOperands; + } + + set + { + m_filterOperands = value; + + if (value == null) + { + m_filterOperands = new ExtensionObjectCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ContentFilterElement; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ContentFilterElement_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ContentFilterElement_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("FilterOperator", FilterOperator); + encoder.WriteExtensionObjectArray("FilterOperands", FilterOperands); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + FilterOperator = (FilterOperator)decoder.ReadEnumerated("FilterOperator", typeof(FilterOperator)); + FilterOperands = decoder.ReadExtensionObjectArray("FilterOperands"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ContentFilterElement value = encodeable as ContentFilterElement; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_filterOperator, value.m_filterOperator)) return false; + if (!Utils.IsEqual(m_filterOperands, value.m_filterOperands)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ContentFilterElement)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ContentFilterElement clone = (ContentFilterElement)base.MemberwiseClone(); + + clone.m_filterOperator = (FilterOperator)Utils.Clone(this.m_filterOperator); + clone.m_filterOperands = (ExtensionObjectCollection)Utils.Clone(this.m_filterOperands); + + return clone; + } + #endregion + + #region Private Fields + private FilterOperator m_filterOperator; + private ExtensionObjectCollection m_filterOperands; + #endregion + } + + #region ContentFilterElementCollection Class + /// + /// A collection of ContentFilterElement objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfContentFilterElement", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ContentFilterElement")] + #if !NET_STANDARD + public partial class ContentFilterElementCollection : List, ICloneable + #else + public partial class ContentFilterElementCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ContentFilterElementCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ContentFilterElementCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ContentFilterElementCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ContentFilterElementCollection(ContentFilterElement[] values) + { + if (values != null) + { + return new ContentFilterElementCollection(values); + } + + return new ContentFilterElementCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ContentFilterElement[](ContentFilterElementCollection 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 (ContentFilterElementCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ContentFilterElementCollection clone = new ContentFilterElementCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ContentFilterElement)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ContentFilter Class + #if (!OPCUA_EXCLUDE_ContentFilter) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ContentFilter : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ContentFilter() + { + 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_elements = new ContentFilterElementCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "Elements", IsRequired = false, Order = 1)] + public ContentFilterElementCollection Elements + { + get + { + return m_elements; + } + + set + { + m_elements = value; + + if (value == null) + { + m_elements = new ContentFilterElementCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ContentFilter; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ContentFilter_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ContentFilter_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("Elements", Elements.ToArray(), typeof(ContentFilterElement)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Elements = (ContentFilterElementCollection)decoder.ReadEncodeableArray("Elements", typeof(ContentFilterElement)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ContentFilter value = encodeable as ContentFilter; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_elements, value.m_elements)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ContentFilter)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ContentFilter clone = (ContentFilter)base.MemberwiseClone(); + + clone.m_elements = (ContentFilterElementCollection)Utils.Clone(this.m_elements); + + return clone; + } + #endregion + + #region Private Fields + private ContentFilterElementCollection m_elements; + #endregion + } + + #region ContentFilterCollection Class + /// + /// A collection of ContentFilter objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfContentFilter", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ContentFilter")] + #if !NET_STANDARD + public partial class ContentFilterCollection : List, ICloneable + #else + public partial class ContentFilterCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ContentFilterCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ContentFilterCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ContentFilterCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ContentFilterCollection(ContentFilter[] values) + { + if (values != null) + { + return new ContentFilterCollection(values); + } + + return new ContentFilterCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ContentFilter[](ContentFilterCollection 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 (ContentFilterCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ContentFilterCollection clone = new ContentFilterCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ContentFilter)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region FilterOperand Class + #if (!OPCUA_EXCLUDE_FilterOperand) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class FilterOperand : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public FilterOperand() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.FilterOperand; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.FilterOperand_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.FilterOperand_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + FilterOperand value = encodeable as FilterOperand; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (FilterOperand)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + FilterOperand clone = (FilterOperand)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ElementOperand Class + #if (!OPCUA_EXCLUDE_ElementOperand) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ElementOperand : FilterOperand + { + #region Constructors + /// + /// The default constructor. + /// + public ElementOperand() + { + 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_index = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Index", IsRequired = false, Order = 1)] + public uint Index + { + get { return m_index; } + set { m_index = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ElementOperand; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ElementOperand_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ElementOperand_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("Index", Index); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Index = decoder.ReadUInt32("Index"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ElementOperand value = encodeable as ElementOperand; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_index, value.m_index)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ElementOperand)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ElementOperand clone = (ElementOperand)base.MemberwiseClone(); + + clone.m_index = (uint)Utils.Clone(this.m_index); + + return clone; + } + #endregion + + #region Private Fields + private uint m_index; + #endregion + } + #endif + #endregion + + #region LiteralOperand Class + #if (!OPCUA_EXCLUDE_LiteralOperand) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class LiteralOperand : FilterOperand + { + #region Constructors + /// + /// The default constructor. + /// + public LiteralOperand() + { + 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_value = Variant.Null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Value", IsRequired = false, Order = 1)] + public Variant Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.LiteralOperand; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.LiteralOperand_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.LiteralOperand_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteVariant("Value", Value); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Value = decoder.ReadVariant("Value"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + LiteralOperand value = encodeable as LiteralOperand; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (LiteralOperand)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + LiteralOperand clone = (LiteralOperand)base.MemberwiseClone(); + + clone.m_value = (Variant)Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private Variant m_value; + #endregion + } + #endif + #endregion + + #region AttributeOperand Class + #if (!OPCUA_EXCLUDE_AttributeOperand) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AttributeOperand : FilterOperand + { + #region Constructors + /// + /// The default constructor. + /// + public AttributeOperand() + { + 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_nodeId = null; + m_alias = null; + m_browsePath = new RelativePath(); + m_attributeId = (uint)0; + m_indexRange = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "Alias", IsRequired = false, Order = 2)] + public string Alias + { + get { return m_alias; } + set { m_alias = value; } + } + + /// + /// + /// + [DataMember(Name = "BrowsePath", IsRequired = false, Order = 3)] + public RelativePath BrowsePath + { + get + { + return m_browsePath; + } + + set + { + m_browsePath = value; + + if (value == null) + { + m_browsePath = new RelativePath(); + } + } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 4)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 5)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.AttributeOperand; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AttributeOperand_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AttributeOperand_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteString("Alias", Alias); + encoder.WriteEncodeable("BrowsePath", BrowsePath, typeof(RelativePath)); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteString("IndexRange", IndexRange); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + Alias = decoder.ReadString("Alias"); + BrowsePath = (RelativePath)decoder.ReadEncodeable("BrowsePath", typeof(RelativePath)); + AttributeId = decoder.ReadUInt32("AttributeId"); + IndexRange = decoder.ReadString("IndexRange"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AttributeOperand value = encodeable as AttributeOperand; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_alias, value.m_alias)) return false; + if (!Utils.IsEqual(m_browsePath, value.m_browsePath)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (AttributeOperand)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AttributeOperand clone = (AttributeOperand)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_alias = (string)Utils.Clone(this.m_alias); + clone.m_browsePath = (RelativePath)Utils.Clone(this.m_browsePath); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private string m_alias; + private RelativePath m_browsePath; + private uint m_attributeId; + private string m_indexRange; + #endregion + } + #endif + #endregion + + #region SimpleAttributeOperand Class + #if (!OPCUA_EXCLUDE_SimpleAttributeOperand) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SimpleAttributeOperand : FilterOperand + { + #region Constructors + /// + /// The default constructor. + /// + public SimpleAttributeOperand() + { + 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_typeDefinitionId = null; + m_browsePath = new QualifiedNameCollection(); + m_attributeId = (uint)0; + m_indexRange = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "TypeDefinitionId", IsRequired = false, Order = 1)] + public NodeId TypeDefinitionId + { + get { return m_typeDefinitionId; } + set { m_typeDefinitionId = value; } + } + + /// + /// + /// + [DataMember(Name = "BrowsePath", IsRequired = false, Order = 2)] + public QualifiedNameCollection BrowsePath + { + get + { + return m_browsePath; + } + + set + { + m_browsePath = value; + + if (value == null) + { + m_browsePath = new QualifiedNameCollection(); + } + } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 3)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 4)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.SimpleAttributeOperand; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SimpleAttributeOperand_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SimpleAttributeOperand_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("TypeDefinitionId", TypeDefinitionId); + encoder.WriteQualifiedNameArray("BrowsePath", BrowsePath); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteString("IndexRange", IndexRange); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TypeDefinitionId = decoder.ReadNodeId("TypeDefinitionId"); + BrowsePath = decoder.ReadQualifiedNameArray("BrowsePath"); + AttributeId = decoder.ReadUInt32("AttributeId"); + IndexRange = decoder.ReadString("IndexRange"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SimpleAttributeOperand value = encodeable as SimpleAttributeOperand; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_typeDefinitionId, value.m_typeDefinitionId)) return false; + if (!Utils.IsEqual(m_browsePath, value.m_browsePath)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (SimpleAttributeOperand)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SimpleAttributeOperand clone = (SimpleAttributeOperand)base.MemberwiseClone(); + + clone.m_typeDefinitionId = (NodeId)Utils.Clone(this.m_typeDefinitionId); + clone.m_browsePath = (QualifiedNameCollection)Utils.Clone(this.m_browsePath); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_typeDefinitionId; + private QualifiedNameCollection m_browsePath; + private uint m_attributeId; + private string m_indexRange; + #endregion + } + + #region SimpleAttributeOperandCollection Class + /// + /// A collection of SimpleAttributeOperand objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSimpleAttributeOperand", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SimpleAttributeOperand")] + #if !NET_STANDARD + public partial class SimpleAttributeOperandCollection : List, ICloneable + #else + public partial class SimpleAttributeOperandCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SimpleAttributeOperandCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SimpleAttributeOperandCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SimpleAttributeOperandCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SimpleAttributeOperandCollection(SimpleAttributeOperand[] values) + { + if (values != null) + { + return new SimpleAttributeOperandCollection(values); + } + + return new SimpleAttributeOperandCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SimpleAttributeOperand[](SimpleAttributeOperandCollection 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 (SimpleAttributeOperandCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SimpleAttributeOperandCollection clone = new SimpleAttributeOperandCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SimpleAttributeOperand)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ContentFilterElementResult Class + #if (!OPCUA_EXCLUDE_ContentFilterElementResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ContentFilterElementResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ContentFilterElementResult() + { + 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_statusCode = StatusCodes.Good; + m_operandStatusCodes = new StatusCodeCollection(); + m_operandDiagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// + /// + [DataMember(Name = "OperandStatusCodes", IsRequired = false, Order = 2)] + public StatusCodeCollection OperandStatusCodes + { + get + { + return m_operandStatusCodes; + } + + set + { + m_operandStatusCodes = value; + + if (value == null) + { + m_operandStatusCodes = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "OperandDiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection OperandDiagnosticInfos + { + get + { + return m_operandDiagnosticInfos; + } + + set + { + m_operandDiagnosticInfos = value; + + if (value == null) + { + m_operandDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ContentFilterElementResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ContentFilterElementResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ContentFilterElementResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteStatusCodeArray("OperandStatusCodes", OperandStatusCodes); + encoder.WriteDiagnosticInfoArray("OperandDiagnosticInfos", OperandDiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + OperandStatusCodes = decoder.ReadStatusCodeArray("OperandStatusCodes"); + OperandDiagnosticInfos = decoder.ReadDiagnosticInfoArray("OperandDiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ContentFilterElementResult value = encodeable as ContentFilterElementResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_operandStatusCodes, value.m_operandStatusCodes)) return false; + if (!Utils.IsEqual(m_operandDiagnosticInfos, value.m_operandDiagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ContentFilterElementResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ContentFilterElementResult clone = (ContentFilterElementResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_operandStatusCodes = (StatusCodeCollection)Utils.Clone(this.m_operandStatusCodes); + clone.m_operandDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_operandDiagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private StatusCodeCollection m_operandStatusCodes; + private DiagnosticInfoCollection m_operandDiagnosticInfos; + #endregion + } + + #region ContentFilterElementResultCollection Class + /// + /// A collection of ContentFilterElementResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfContentFilterElementResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ContentFilterElementResult")] + #if !NET_STANDARD + public partial class ContentFilterElementResultCollection : List, ICloneable + #else + public partial class ContentFilterElementResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ContentFilterElementResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ContentFilterElementResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ContentFilterElementResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ContentFilterElementResultCollection(ContentFilterElementResult[] values) + { + if (values != null) + { + return new ContentFilterElementResultCollection(values); + } + + return new ContentFilterElementResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ContentFilterElementResult[](ContentFilterElementResultCollection 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 (ContentFilterElementResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ContentFilterElementResultCollection clone = new ContentFilterElementResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ContentFilterElementResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ContentFilterResult Class + #if (!OPCUA_EXCLUDE_ContentFilterResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ContentFilterResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ContentFilterResult() + { + 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_elementResults = new ContentFilterElementResultCollection(); + m_elementDiagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ElementResults", IsRequired = false, Order = 1)] + public ContentFilterElementResultCollection ElementResults + { + get + { + return m_elementResults; + } + + set + { + m_elementResults = value; + + if (value == null) + { + m_elementResults = new ContentFilterElementResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ElementDiagnosticInfos", IsRequired = false, Order = 2)] + public DiagnosticInfoCollection ElementDiagnosticInfos + { + get + { + return m_elementDiagnosticInfos; + } + + set + { + m_elementDiagnosticInfos = value; + + if (value == null) + { + m_elementDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ContentFilterResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ContentFilterResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ContentFilterResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("ElementResults", ElementResults.ToArray(), typeof(ContentFilterElementResult)); + encoder.WriteDiagnosticInfoArray("ElementDiagnosticInfos", ElementDiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ElementResults = (ContentFilterElementResultCollection)decoder.ReadEncodeableArray("ElementResults", typeof(ContentFilterElementResult)); + ElementDiagnosticInfos = decoder.ReadDiagnosticInfoArray("ElementDiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ContentFilterResult value = encodeable as ContentFilterResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_elementResults, value.m_elementResults)) return false; + if (!Utils.IsEqual(m_elementDiagnosticInfos, value.m_elementDiagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ContentFilterResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ContentFilterResult clone = (ContentFilterResult)base.MemberwiseClone(); + + clone.m_elementResults = (ContentFilterElementResultCollection)Utils.Clone(this.m_elementResults); + clone.m_elementDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_elementDiagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ContentFilterElementResultCollection m_elementResults; + private DiagnosticInfoCollection m_elementDiagnosticInfos; + #endregion + } + #endif + #endregion + + #region ParsingResult Class + #if (!OPCUA_EXCLUDE_ParsingResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ParsingResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ParsingResult() + { + 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_statusCode = StatusCodes.Good; + m_dataStatusCodes = new StatusCodeCollection(); + m_dataDiagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// + /// + [DataMember(Name = "DataStatusCodes", IsRequired = false, Order = 2)] + public StatusCodeCollection DataStatusCodes + { + get + { + return m_dataStatusCodes; + } + + set + { + m_dataStatusCodes = value; + + if (value == null) + { + m_dataStatusCodes = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DataDiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DataDiagnosticInfos + { + get + { + return m_dataDiagnosticInfos; + } + + set + { + m_dataDiagnosticInfos = value; + + if (value == null) + { + m_dataDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ParsingResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ParsingResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ParsingResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteStatusCodeArray("DataStatusCodes", DataStatusCodes); + encoder.WriteDiagnosticInfoArray("DataDiagnosticInfos", DataDiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + DataStatusCodes = decoder.ReadStatusCodeArray("DataStatusCodes"); + DataDiagnosticInfos = decoder.ReadDiagnosticInfoArray("DataDiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ParsingResult value = encodeable as ParsingResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_dataStatusCodes, value.m_dataStatusCodes)) return false; + if (!Utils.IsEqual(m_dataDiagnosticInfos, value.m_dataDiagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ParsingResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ParsingResult clone = (ParsingResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_dataStatusCodes = (StatusCodeCollection)Utils.Clone(this.m_dataStatusCodes); + clone.m_dataDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_dataDiagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private StatusCodeCollection m_dataStatusCodes; + private DiagnosticInfoCollection m_dataDiagnosticInfos; + #endregion + } + + #region ParsingResultCollection Class + /// + /// A collection of ParsingResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfParsingResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ParsingResult")] + #if !NET_STANDARD + public partial class ParsingResultCollection : List, ICloneable + #else + public partial class ParsingResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ParsingResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ParsingResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ParsingResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ParsingResultCollection(ParsingResult[] values) + { + if (values != null) + { + return new ParsingResultCollection(values); + } + + return new ParsingResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ParsingResult[](ParsingResultCollection 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 (ParsingResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ParsingResultCollection clone = new ParsingResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ParsingResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region QueryFirstRequest Class + #if (!OPCUA_EXCLUDE_QueryFirstRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class QueryFirstRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public QueryFirstRequest() + { + 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_requestHeader = new RequestHeader(); + m_view = new ViewDescription(); + m_nodeTypes = new NodeTypeDescriptionCollection(); + m_filter = new ContentFilter(); + m_maxDataSetsToReturn = (uint)0; + m_maxReferencesToReturn = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "View", IsRequired = false, Order = 2)] + public ViewDescription View + { + get + { + return m_view; + } + + set + { + m_view = value; + + if (value == null) + { + m_view = new ViewDescription(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NodeTypes", IsRequired = false, Order = 3)] + public NodeTypeDescriptionCollection NodeTypes + { + get + { + return m_nodeTypes; + } + + set + { + m_nodeTypes = value; + + if (value == null) + { + m_nodeTypes = new NodeTypeDescriptionCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Filter", IsRequired = false, Order = 4)] + public ContentFilter Filter + { + get + { + return m_filter; + } + + set + { + m_filter = value; + + if (value == null) + { + m_filter = new ContentFilter(); + } + } + } + + /// + [DataMember(Name = "MaxDataSetsToReturn", IsRequired = false, Order = 5)] + public uint MaxDataSetsToReturn + { + get { return m_maxDataSetsToReturn; } + set { m_maxDataSetsToReturn = value; } + } + + /// + [DataMember(Name = "MaxReferencesToReturn", IsRequired = false, Order = 6)] + public uint MaxReferencesToReturn + { + get { return m_maxReferencesToReturn; } + set { m_maxReferencesToReturn = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.QueryFirstRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.QueryFirstRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.QueryFirstRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeable("View", View, typeof(ViewDescription)); + encoder.WriteEncodeableArray("NodeTypes", NodeTypes.ToArray(), typeof(NodeTypeDescription)); + encoder.WriteEncodeable("Filter", Filter, typeof(ContentFilter)); + encoder.WriteUInt32("MaxDataSetsToReturn", MaxDataSetsToReturn); + encoder.WriteUInt32("MaxReferencesToReturn", MaxReferencesToReturn); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + View = (ViewDescription)decoder.ReadEncodeable("View", typeof(ViewDescription)); + NodeTypes = (NodeTypeDescriptionCollection)decoder.ReadEncodeableArray("NodeTypes", typeof(NodeTypeDescription)); + Filter = (ContentFilter)decoder.ReadEncodeable("Filter", typeof(ContentFilter)); + MaxDataSetsToReturn = decoder.ReadUInt32("MaxDataSetsToReturn"); + MaxReferencesToReturn = decoder.ReadUInt32("MaxReferencesToReturn"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + QueryFirstRequest value = encodeable as QueryFirstRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_view, value.m_view)) return false; + if (!Utils.IsEqual(m_nodeTypes, value.m_nodeTypes)) return false; + if (!Utils.IsEqual(m_filter, value.m_filter)) return false; + if (!Utils.IsEqual(m_maxDataSetsToReturn, value.m_maxDataSetsToReturn)) return false; + if (!Utils.IsEqual(m_maxReferencesToReturn, value.m_maxReferencesToReturn)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (QueryFirstRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + QueryFirstRequest clone = (QueryFirstRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_view = (ViewDescription)Utils.Clone(this.m_view); + clone.m_nodeTypes = (NodeTypeDescriptionCollection)Utils.Clone(this.m_nodeTypes); + clone.m_filter = (ContentFilter)Utils.Clone(this.m_filter); + clone.m_maxDataSetsToReturn = (uint)Utils.Clone(this.m_maxDataSetsToReturn); + clone.m_maxReferencesToReturn = (uint)Utils.Clone(this.m_maxReferencesToReturn); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private ViewDescription m_view; + private NodeTypeDescriptionCollection m_nodeTypes; + private ContentFilter m_filter; + private uint m_maxDataSetsToReturn; + private uint m_maxReferencesToReturn; + #endregion + } + #endif + #endregion + + #region QueryFirstResponse Class + #if (!OPCUA_EXCLUDE_QueryFirstResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class QueryFirstResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public QueryFirstResponse() + { + 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_responseHeader = new ResponseHeader(); + m_queryDataSets = new QueryDataSetCollection(); + m_continuationPoint = null; + m_parsingResults = new ParsingResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + m_filterResult = new ContentFilterResult(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "QueryDataSets", IsRequired = false, Order = 2)] + public QueryDataSetCollection QueryDataSets + { + get + { + return m_queryDataSets; + } + + set + { + m_queryDataSets = value; + + if (value == null) + { + m_queryDataSets = new QueryDataSetCollection(); + } + } + } + + /// + [DataMember(Name = "ContinuationPoint", IsRequired = false, Order = 3)] + public byte[] ContinuationPoint + { + get { return m_continuationPoint; } + set { m_continuationPoint = value; } + } + + /// + /// + /// + [DataMember(Name = "ParsingResults", IsRequired = false, Order = 4)] + public ParsingResultCollection ParsingResults + { + get + { + return m_parsingResults; + } + + set + { + m_parsingResults = value; + + if (value == null) + { + m_parsingResults = new ParsingResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 5)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "FilterResult", IsRequired = false, Order = 6)] + public ContentFilterResult FilterResult + { + get + { + return m_filterResult; + } + + set + { + m_filterResult = value; + + if (value == null) + { + m_filterResult = new ContentFilterResult(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.QueryFirstResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.QueryFirstResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.QueryFirstResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("QueryDataSets", QueryDataSets.ToArray(), typeof(QueryDataSet)); + encoder.WriteByteString("ContinuationPoint", ContinuationPoint); + encoder.WriteEncodeableArray("ParsingResults", ParsingResults.ToArray(), typeof(ParsingResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + encoder.WriteEncodeable("FilterResult", FilterResult, typeof(ContentFilterResult)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + QueryDataSets = (QueryDataSetCollection)decoder.ReadEncodeableArray("QueryDataSets", typeof(QueryDataSet)); + ContinuationPoint = decoder.ReadByteString("ContinuationPoint"); + ParsingResults = (ParsingResultCollection)decoder.ReadEncodeableArray("ParsingResults", typeof(ParsingResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + FilterResult = (ContentFilterResult)decoder.ReadEncodeable("FilterResult", typeof(ContentFilterResult)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + QueryFirstResponse value = encodeable as QueryFirstResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_queryDataSets, value.m_queryDataSets)) return false; + if (!Utils.IsEqual(m_continuationPoint, value.m_continuationPoint)) return false; + if (!Utils.IsEqual(m_parsingResults, value.m_parsingResults)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + if (!Utils.IsEqual(m_filterResult, value.m_filterResult)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (QueryFirstResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + QueryFirstResponse clone = (QueryFirstResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_queryDataSets = (QueryDataSetCollection)Utils.Clone(this.m_queryDataSets); + clone.m_continuationPoint = (byte[])Utils.Clone(this.m_continuationPoint); + clone.m_parsingResults = (ParsingResultCollection)Utils.Clone(this.m_parsingResults); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + clone.m_filterResult = (ContentFilterResult)Utils.Clone(this.m_filterResult); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private QueryDataSetCollection m_queryDataSets; + private byte[] m_continuationPoint; + private ParsingResultCollection m_parsingResults; + private DiagnosticInfoCollection m_diagnosticInfos; + private ContentFilterResult m_filterResult; + #endregion + } + #endif + #endregion + + #region QueryNextRequest Class + #if (!OPCUA_EXCLUDE_QueryNextRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class QueryNextRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public QueryNextRequest() + { + 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_requestHeader = new RequestHeader(); + m_releaseContinuationPoint = true; + m_continuationPoint = null; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "ReleaseContinuationPoint", IsRequired = false, Order = 2)] + public bool ReleaseContinuationPoint + { + get { return m_releaseContinuationPoint; } + set { m_releaseContinuationPoint = value; } + } + + /// + [DataMember(Name = "ContinuationPoint", IsRequired = false, Order = 3)] + public byte[] ContinuationPoint + { + get { return m_continuationPoint; } + set { m_continuationPoint = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.QueryNextRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.QueryNextRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.QueryNextRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteBoolean("ReleaseContinuationPoint", ReleaseContinuationPoint); + encoder.WriteByteString("ContinuationPoint", ContinuationPoint); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + ReleaseContinuationPoint = decoder.ReadBoolean("ReleaseContinuationPoint"); + ContinuationPoint = decoder.ReadByteString("ContinuationPoint"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + QueryNextRequest value = encodeable as QueryNextRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_releaseContinuationPoint, value.m_releaseContinuationPoint)) return false; + if (!Utils.IsEqual(m_continuationPoint, value.m_continuationPoint)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (QueryNextRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + QueryNextRequest clone = (QueryNextRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_releaseContinuationPoint = (bool)Utils.Clone(this.m_releaseContinuationPoint); + clone.m_continuationPoint = (byte[])Utils.Clone(this.m_continuationPoint); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private bool m_releaseContinuationPoint; + private byte[] m_continuationPoint; + #endregion + } + #endif + #endregion + + #region QueryNextResponse Class + #if (!OPCUA_EXCLUDE_QueryNextResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class QueryNextResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public QueryNextResponse() + { + 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_responseHeader = new ResponseHeader(); + m_queryDataSets = new QueryDataSetCollection(); + m_revisedContinuationPoint = null; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "QueryDataSets", IsRequired = false, Order = 2)] + public QueryDataSetCollection QueryDataSets + { + get + { + return m_queryDataSets; + } + + set + { + m_queryDataSets = value; + + if (value == null) + { + m_queryDataSets = new QueryDataSetCollection(); + } + } + } + + /// + [DataMember(Name = "RevisedContinuationPoint", IsRequired = false, Order = 3)] + public byte[] RevisedContinuationPoint + { + get { return m_revisedContinuationPoint; } + set { m_revisedContinuationPoint = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.QueryNextResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.QueryNextResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.QueryNextResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("QueryDataSets", QueryDataSets.ToArray(), typeof(QueryDataSet)); + encoder.WriteByteString("RevisedContinuationPoint", RevisedContinuationPoint); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + QueryDataSets = (QueryDataSetCollection)decoder.ReadEncodeableArray("QueryDataSets", typeof(QueryDataSet)); + RevisedContinuationPoint = decoder.ReadByteString("RevisedContinuationPoint"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + QueryNextResponse value = encodeable as QueryNextResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_queryDataSets, value.m_queryDataSets)) return false; + if (!Utils.IsEqual(m_revisedContinuationPoint, value.m_revisedContinuationPoint)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (QueryNextResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + QueryNextResponse clone = (QueryNextResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_queryDataSets = (QueryDataSetCollection)Utils.Clone(this.m_queryDataSets); + clone.m_revisedContinuationPoint = (byte[])Utils.Clone(this.m_revisedContinuationPoint); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private QueryDataSetCollection m_queryDataSets; + private byte[] m_revisedContinuationPoint; + #endregion + } + #endif + #endregion + + #region TimestampsToReturn Enumeration + #if (!OPCUA_EXCLUDE_TimestampsToReturn) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum TimestampsToReturn + { + /// + [EnumMember(Value = "Source_0")] + Source = 0, + + /// + [EnumMember(Value = "Server_1")] + Server = 1, + + /// + [EnumMember(Value = "Both_2")] + Both = 2, + + /// + [EnumMember(Value = "Neither_3")] + Neither = 3, + + /// + [EnumMember(Value = "Invalid_4")] + Invalid = 4, + } + #endif + #endregion + + #region ReadValueId Class + #if (!OPCUA_EXCLUDE_ReadValueId) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadValueId : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReadValueId() + { + 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_nodeId = null; + m_attributeId = (uint)0; + m_indexRange = null; + m_dataEncoding = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 2)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 3)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + + /// + [DataMember(Name = "DataEncoding", IsRequired = false, Order = 4)] + public QualifiedName DataEncoding + { + get { return m_dataEncoding; } + set { m_dataEncoding = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadValueId; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadValueId_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadValueId_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteString("IndexRange", IndexRange); + encoder.WriteQualifiedName("DataEncoding", DataEncoding); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + AttributeId = decoder.ReadUInt32("AttributeId"); + IndexRange = decoder.ReadString("IndexRange"); + DataEncoding = decoder.ReadQualifiedName("DataEncoding"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadValueId value = encodeable as ReadValueId; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + if (!Utils.IsEqual(m_dataEncoding, value.m_dataEncoding)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReadValueId)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadValueId clone = (ReadValueId)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + clone.m_dataEncoding = (QualifiedName)Utils.Clone(this.m_dataEncoding); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private uint m_attributeId; + private string m_indexRange; + private QualifiedName m_dataEncoding; + #endregion + } + + #region ReadValueIdCollection Class + /// + /// A collection of ReadValueId objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfReadValueId", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ReadValueId")] + #if !NET_STANDARD + public partial class ReadValueIdCollection : List, ICloneable + #else + public partial class ReadValueIdCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ReadValueIdCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ReadValueIdCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ReadValueIdCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ReadValueIdCollection(ReadValueId[] values) + { + if (values != null) + { + return new ReadValueIdCollection(values); + } + + return new ReadValueIdCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ReadValueId[](ReadValueIdCollection 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 (ReadValueIdCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ReadValueIdCollection clone = new ReadValueIdCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ReadValueId)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ReadRequest Class + #if (!OPCUA_EXCLUDE_ReadRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReadRequest() + { + 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_requestHeader = new RequestHeader(); + m_maxAge = (double)0; + m_timestampsToReturn = TimestampsToReturn.Source; + m_nodesToRead = new ReadValueIdCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "MaxAge", IsRequired = false, Order = 2)] + public double MaxAge + { + get { return m_maxAge; } + set { m_maxAge = value; } + } + + /// + [DataMember(Name = "TimestampsToReturn", IsRequired = false, Order = 3)] + public TimestampsToReturn TimestampsToReturn + { + get { return m_timestampsToReturn; } + set { m_timestampsToReturn = value; } + } + + /// + /// + /// + [DataMember(Name = "NodesToRead", IsRequired = false, Order = 4)] + public ReadValueIdCollection NodesToRead + { + get + { + return m_nodesToRead; + } + + set + { + m_nodesToRead = value; + + if (value == null) + { + m_nodesToRead = new ReadValueIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteDouble("MaxAge", MaxAge); + encoder.WriteEnumerated("TimestampsToReturn", TimestampsToReturn); + encoder.WriteEncodeableArray("NodesToRead", NodesToRead.ToArray(), typeof(ReadValueId)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + MaxAge = decoder.ReadDouble("MaxAge"); + TimestampsToReturn = (TimestampsToReturn)decoder.ReadEnumerated("TimestampsToReturn", typeof(TimestampsToReturn)); + NodesToRead = (ReadValueIdCollection)decoder.ReadEncodeableArray("NodesToRead", typeof(ReadValueId)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadRequest value = encodeable as ReadRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_maxAge, value.m_maxAge)) return false; + if (!Utils.IsEqual(m_timestampsToReturn, value.m_timestampsToReturn)) return false; + if (!Utils.IsEqual(m_nodesToRead, value.m_nodesToRead)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReadRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadRequest clone = (ReadRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_maxAge = (double)Utils.Clone(this.m_maxAge); + clone.m_timestampsToReturn = (TimestampsToReturn)Utils.Clone(this.m_timestampsToReturn); + clone.m_nodesToRead = (ReadValueIdCollection)Utils.Clone(this.m_nodesToRead); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private double m_maxAge; + private TimestampsToReturn m_timestampsToReturn; + private ReadValueIdCollection m_nodesToRead; + #endregion + } + #endif + #endregion + + #region ReadResponse Class + #if (!OPCUA_EXCLUDE_ReadResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ReadResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new DataValueCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public DataValueCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new DataValueCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteDataValueArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadDataValueArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadResponse value = encodeable as ReadResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ReadResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadResponse clone = (ReadResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (DataValueCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private DataValueCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region HistoryReadValueId Class + #if (!OPCUA_EXCLUDE_HistoryReadValueId) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryReadValueId : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryReadValueId() + { + 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_nodeId = null; + m_indexRange = null; + m_dataEncoding = null; + m_continuationPoint = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 2)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + + /// + [DataMember(Name = "DataEncoding", IsRequired = false, Order = 3)] + public QualifiedName DataEncoding + { + get { return m_dataEncoding; } + set { m_dataEncoding = value; } + } + + /// + [DataMember(Name = "ContinuationPoint", IsRequired = false, Order = 4)] + public byte[] ContinuationPoint + { + get { return m_continuationPoint; } + set { m_continuationPoint = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryReadValueId; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryReadValueId_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryReadValueId_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteString("IndexRange", IndexRange); + encoder.WriteQualifiedName("DataEncoding", DataEncoding); + encoder.WriteByteString("ContinuationPoint", ContinuationPoint); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + IndexRange = decoder.ReadString("IndexRange"); + DataEncoding = decoder.ReadQualifiedName("DataEncoding"); + ContinuationPoint = decoder.ReadByteString("ContinuationPoint"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryReadValueId value = encodeable as HistoryReadValueId; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + if (!Utils.IsEqual(m_dataEncoding, value.m_dataEncoding)) return false; + if (!Utils.IsEqual(m_continuationPoint, value.m_continuationPoint)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryReadValueId)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadValueId clone = (HistoryReadValueId)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + clone.m_dataEncoding = (QualifiedName)Utils.Clone(this.m_dataEncoding); + clone.m_continuationPoint = (byte[])Utils.Clone(this.m_continuationPoint); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private string m_indexRange; + private QualifiedName m_dataEncoding; + private byte[] m_continuationPoint; + #endregion + } + + #region HistoryReadValueIdCollection Class + /// + /// A collection of HistoryReadValueId objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfHistoryReadValueId", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "HistoryReadValueId")] + #if !NET_STANDARD + public partial class HistoryReadValueIdCollection : List, ICloneable + #else + public partial class HistoryReadValueIdCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public HistoryReadValueIdCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public HistoryReadValueIdCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public HistoryReadValueIdCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator HistoryReadValueIdCollection(HistoryReadValueId[] values) + { + if (values != null) + { + return new HistoryReadValueIdCollection(values); + } + + return new HistoryReadValueIdCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator HistoryReadValueId[](HistoryReadValueIdCollection 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 (HistoryReadValueIdCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadValueIdCollection clone = new HistoryReadValueIdCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((HistoryReadValueId)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region HistoryReadResult Class + #if (!OPCUA_EXCLUDE_HistoryReadResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryReadResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryReadResult() + { + 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_statusCode = StatusCodes.Good; + m_continuationPoint = null; + m_historyData = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + [DataMember(Name = "ContinuationPoint", IsRequired = false, Order = 2)] + public byte[] ContinuationPoint + { + get { return m_continuationPoint; } + set { m_continuationPoint = value; } + } + + /// + [DataMember(Name = "HistoryData", IsRequired = false, Order = 3)] + public ExtensionObject HistoryData + { + get { return m_historyData; } + set { m_historyData = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryReadResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryReadResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryReadResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteByteString("ContinuationPoint", ContinuationPoint); + encoder.WriteExtensionObject("HistoryData", HistoryData); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + ContinuationPoint = decoder.ReadByteString("ContinuationPoint"); + HistoryData = decoder.ReadExtensionObject("HistoryData"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryReadResult value = encodeable as HistoryReadResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_continuationPoint, value.m_continuationPoint)) return false; + if (!Utils.IsEqual(m_historyData, value.m_historyData)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryReadResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadResult clone = (HistoryReadResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_continuationPoint = (byte[])Utils.Clone(this.m_continuationPoint); + clone.m_historyData = (ExtensionObject)Utils.Clone(this.m_historyData); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private byte[] m_continuationPoint; + private ExtensionObject m_historyData; + #endregion + } + + #region HistoryReadResultCollection Class + /// + /// A collection of HistoryReadResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfHistoryReadResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "HistoryReadResult")] + #if !NET_STANDARD + public partial class HistoryReadResultCollection : List, ICloneable + #else + public partial class HistoryReadResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public HistoryReadResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public HistoryReadResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public HistoryReadResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator HistoryReadResultCollection(HistoryReadResult[] values) + { + if (values != null) + { + return new HistoryReadResultCollection(values); + } + + return new HistoryReadResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator HistoryReadResult[](HistoryReadResultCollection 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 (HistoryReadResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadResultCollection clone = new HistoryReadResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((HistoryReadResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region HistoryReadDetails Class + #if (!OPCUA_EXCLUDE_HistoryReadDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryReadDetails : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryReadDetails() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryReadDetails; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryReadDetails_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryReadDetails_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryReadDetails value = encodeable as HistoryReadDetails; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryReadDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadDetails clone = (HistoryReadDetails)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region ReadEventDetails Class + #if (!OPCUA_EXCLUDE_ReadEventDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadEventDetails : HistoryReadDetails + { + #region Constructors + /// + /// The default constructor. + /// + public ReadEventDetails() + { + 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_numValuesPerNode = (uint)0; + m_startTime = DateTime.MinValue; + m_endTime = DateTime.MinValue; + m_filter = new EventFilter(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NumValuesPerNode", IsRequired = false, Order = 1)] + public uint NumValuesPerNode + { + get { return m_numValuesPerNode; } + set { m_numValuesPerNode = value; } + } + + /// + [DataMember(Name = "StartTime", IsRequired = false, Order = 2)] + public DateTime StartTime + { + get { return m_startTime; } + set { m_startTime = value; } + } + + /// + [DataMember(Name = "EndTime", IsRequired = false, Order = 3)] + public DateTime EndTime + { + get { return m_endTime; } + set { m_endTime = value; } + } + + /// + /// + /// + [DataMember(Name = "Filter", IsRequired = false, Order = 4)] + public EventFilter Filter + { + get + { + return m_filter; + } + + set + { + m_filter = value; + + if (value == null) + { + m_filter = new EventFilter(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadEventDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadEventDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadEventDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("NumValuesPerNode", NumValuesPerNode); + encoder.WriteDateTime("StartTime", StartTime); + encoder.WriteDateTime("EndTime", EndTime); + encoder.WriteEncodeable("Filter", Filter, typeof(EventFilter)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NumValuesPerNode = decoder.ReadUInt32("NumValuesPerNode"); + StartTime = decoder.ReadDateTime("StartTime"); + EndTime = decoder.ReadDateTime("EndTime"); + Filter = (EventFilter)decoder.ReadEncodeable("Filter", typeof(EventFilter)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadEventDetails value = encodeable as ReadEventDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_numValuesPerNode, value.m_numValuesPerNode)) return false; + if (!Utils.IsEqual(m_startTime, value.m_startTime)) return false; + if (!Utils.IsEqual(m_endTime, value.m_endTime)) return false; + if (!Utils.IsEqual(m_filter, value.m_filter)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReadEventDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadEventDetails clone = (ReadEventDetails)base.MemberwiseClone(); + + clone.m_numValuesPerNode = (uint)Utils.Clone(this.m_numValuesPerNode); + clone.m_startTime = (DateTime)Utils.Clone(this.m_startTime); + clone.m_endTime = (DateTime)Utils.Clone(this.m_endTime); + clone.m_filter = (EventFilter)Utils.Clone(this.m_filter); + + return clone; + } + #endregion + + #region Private Fields + private uint m_numValuesPerNode; + private DateTime m_startTime; + private DateTime m_endTime; + private EventFilter m_filter; + #endregion + } + #endif + #endregion + + #region ReadRawModifiedDetails Class + #if (!OPCUA_EXCLUDE_ReadRawModifiedDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadRawModifiedDetails : HistoryReadDetails + { + #region Constructors + /// + /// The default constructor. + /// + public ReadRawModifiedDetails() + { + 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_isReadModified = true; + m_startTime = DateTime.MinValue; + m_endTime = DateTime.MinValue; + m_numValuesPerNode = (uint)0; + m_returnBounds = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsReadModified", IsRequired = false, Order = 1)] + public bool IsReadModified + { + get { return m_isReadModified; } + set { m_isReadModified = value; } + } + + /// + [DataMember(Name = "StartTime", IsRequired = false, Order = 2)] + public DateTime StartTime + { + get { return m_startTime; } + set { m_startTime = value; } + } + + /// + [DataMember(Name = "EndTime", IsRequired = false, Order = 3)] + public DateTime EndTime + { + get { return m_endTime; } + set { m_endTime = value; } + } + + /// + [DataMember(Name = "NumValuesPerNode", IsRequired = false, Order = 4)] + public uint NumValuesPerNode + { + get { return m_numValuesPerNode; } + set { m_numValuesPerNode = value; } + } + + /// + [DataMember(Name = "ReturnBounds", IsRequired = false, Order = 5)] + public bool ReturnBounds + { + get { return m_returnBounds; } + set { m_returnBounds = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadRawModifiedDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadRawModifiedDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadRawModifiedDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsReadModified", IsReadModified); + encoder.WriteDateTime("StartTime", StartTime); + encoder.WriteDateTime("EndTime", EndTime); + encoder.WriteUInt32("NumValuesPerNode", NumValuesPerNode); + encoder.WriteBoolean("ReturnBounds", ReturnBounds); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsReadModified = decoder.ReadBoolean("IsReadModified"); + StartTime = decoder.ReadDateTime("StartTime"); + EndTime = decoder.ReadDateTime("EndTime"); + NumValuesPerNode = decoder.ReadUInt32("NumValuesPerNode"); + ReturnBounds = decoder.ReadBoolean("ReturnBounds"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadRawModifiedDetails value = encodeable as ReadRawModifiedDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isReadModified, value.m_isReadModified)) return false; + if (!Utils.IsEqual(m_startTime, value.m_startTime)) return false; + if (!Utils.IsEqual(m_endTime, value.m_endTime)) return false; + if (!Utils.IsEqual(m_numValuesPerNode, value.m_numValuesPerNode)) return false; + if (!Utils.IsEqual(m_returnBounds, value.m_returnBounds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReadRawModifiedDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadRawModifiedDetails clone = (ReadRawModifiedDetails)base.MemberwiseClone(); + + clone.m_isReadModified = (bool)Utils.Clone(this.m_isReadModified); + clone.m_startTime = (DateTime)Utils.Clone(this.m_startTime); + clone.m_endTime = (DateTime)Utils.Clone(this.m_endTime); + clone.m_numValuesPerNode = (uint)Utils.Clone(this.m_numValuesPerNode); + clone.m_returnBounds = (bool)Utils.Clone(this.m_returnBounds); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isReadModified; + private DateTime m_startTime; + private DateTime m_endTime; + private uint m_numValuesPerNode; + private bool m_returnBounds; + #endregion + } + #endif + #endregion + + #region ReadProcessedDetails Class + #if (!OPCUA_EXCLUDE_ReadProcessedDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadProcessedDetails : HistoryReadDetails + { + #region Constructors + /// + /// The default constructor. + /// + public ReadProcessedDetails() + { + 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_startTime = DateTime.MinValue; + m_endTime = DateTime.MinValue; + m_processingInterval = (double)0; + m_aggregateType = new NodeIdCollection(); + m_aggregateConfiguration = new AggregateConfiguration(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StartTime", IsRequired = false, Order = 1)] + public DateTime StartTime + { + get { return m_startTime; } + set { m_startTime = value; } + } + + /// + [DataMember(Name = "EndTime", IsRequired = false, Order = 2)] + public DateTime EndTime + { + get { return m_endTime; } + set { m_endTime = value; } + } + + /// + [DataMember(Name = "ProcessingInterval", IsRequired = false, Order = 3)] + public double ProcessingInterval + { + get { return m_processingInterval; } + set { m_processingInterval = value; } + } + + /// + /// + /// + [DataMember(Name = "AggregateType", IsRequired = false, Order = 4)] + public NodeIdCollection AggregateType + { + get + { + return m_aggregateType; + } + + set + { + m_aggregateType = value; + + if (value == null) + { + m_aggregateType = new NodeIdCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "AggregateConfiguration", IsRequired = false, Order = 5)] + public AggregateConfiguration AggregateConfiguration + { + get + { + return m_aggregateConfiguration; + } + + set + { + m_aggregateConfiguration = value; + + if (value == null) + { + m_aggregateConfiguration = new AggregateConfiguration(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadProcessedDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadProcessedDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadProcessedDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTime("StartTime", StartTime); + encoder.WriteDateTime("EndTime", EndTime); + encoder.WriteDouble("ProcessingInterval", ProcessingInterval); + encoder.WriteNodeIdArray("AggregateType", AggregateType); + encoder.WriteEncodeable("AggregateConfiguration", AggregateConfiguration, typeof(AggregateConfiguration)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StartTime = decoder.ReadDateTime("StartTime"); + EndTime = decoder.ReadDateTime("EndTime"); + ProcessingInterval = decoder.ReadDouble("ProcessingInterval"); + AggregateType = decoder.ReadNodeIdArray("AggregateType"); + AggregateConfiguration = (AggregateConfiguration)decoder.ReadEncodeable("AggregateConfiguration", typeof(AggregateConfiguration)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadProcessedDetails value = encodeable as ReadProcessedDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_startTime, value.m_startTime)) return false; + if (!Utils.IsEqual(m_endTime, value.m_endTime)) return false; + if (!Utils.IsEqual(m_processingInterval, value.m_processingInterval)) return false; + if (!Utils.IsEqual(m_aggregateType, value.m_aggregateType)) return false; + if (!Utils.IsEqual(m_aggregateConfiguration, value.m_aggregateConfiguration)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReadProcessedDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadProcessedDetails clone = (ReadProcessedDetails)base.MemberwiseClone(); + + clone.m_startTime = (DateTime)Utils.Clone(this.m_startTime); + clone.m_endTime = (DateTime)Utils.Clone(this.m_endTime); + clone.m_processingInterval = (double)Utils.Clone(this.m_processingInterval); + clone.m_aggregateType = (NodeIdCollection)Utils.Clone(this.m_aggregateType); + clone.m_aggregateConfiguration = (AggregateConfiguration)Utils.Clone(this.m_aggregateConfiguration); + + return clone; + } + #endregion + + #region Private Fields + private DateTime m_startTime; + private DateTime m_endTime; + private double m_processingInterval; + private NodeIdCollection m_aggregateType; + private AggregateConfiguration m_aggregateConfiguration; + #endregion + } + #endif + #endregion + + #region ReadAtTimeDetails Class + #if (!OPCUA_EXCLUDE_ReadAtTimeDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadAtTimeDetails : HistoryReadDetails + { + #region Constructors + /// + /// The default constructor. + /// + public ReadAtTimeDetails() + { + 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_reqTimes = new DateTimeCollection(); + m_useSimpleBounds = true; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ReqTimes", IsRequired = false, Order = 1)] + public DateTimeCollection ReqTimes + { + get + { + return m_reqTimes; + } + + set + { + m_reqTimes = value; + + if (value == null) + { + m_reqTimes = new DateTimeCollection(); + } + } + } + + /// + [DataMember(Name = "UseSimpleBounds", IsRequired = false, Order = 2)] + public bool UseSimpleBounds + { + get { return m_useSimpleBounds; } + set { m_useSimpleBounds = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadAtTimeDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadAtTimeDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadAtTimeDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTimeArray("ReqTimes", ReqTimes); + encoder.WriteBoolean("UseSimpleBounds", UseSimpleBounds); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ReqTimes = decoder.ReadDateTimeArray("ReqTimes"); + UseSimpleBounds = decoder.ReadBoolean("UseSimpleBounds"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadAtTimeDetails value = encodeable as ReadAtTimeDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_reqTimes, value.m_reqTimes)) return false; + if (!Utils.IsEqual(m_useSimpleBounds, value.m_useSimpleBounds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReadAtTimeDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadAtTimeDetails clone = (ReadAtTimeDetails)base.MemberwiseClone(); + + clone.m_reqTimes = (DateTimeCollection)Utils.Clone(this.m_reqTimes); + clone.m_useSimpleBounds = (bool)Utils.Clone(this.m_useSimpleBounds); + + return clone; + } + #endregion + + #region Private Fields + private DateTimeCollection m_reqTimes; + private bool m_useSimpleBounds; + #endregion + } + #endif + #endregion + + #region ReadAnnotationDataDetails Class + #if (!OPCUA_EXCLUDE_ReadAnnotationDataDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ReadAnnotationDataDetails : HistoryReadDetails + { + #region Constructors + /// + /// The default constructor. + /// + public ReadAnnotationDataDetails() + { + 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_reqTimes = new DateTimeCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ReqTimes", IsRequired = false, Order = 1)] + public DateTimeCollection ReqTimes + { + get + { + return m_reqTimes; + } + + set + { + m_reqTimes = value; + + if (value == null) + { + m_reqTimes = new DateTimeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.ReadAnnotationDataDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ReadAnnotationDataDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ReadAnnotationDataDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTimeArray("ReqTimes", ReqTimes); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ReqTimes = decoder.ReadDateTimeArray("ReqTimes"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ReadAnnotationDataDetails value = encodeable as ReadAnnotationDataDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_reqTimes, value.m_reqTimes)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (ReadAnnotationDataDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ReadAnnotationDataDetails clone = (ReadAnnotationDataDetails)base.MemberwiseClone(); + + clone.m_reqTimes = (DateTimeCollection)Utils.Clone(this.m_reqTimes); + + return clone; + } + #endregion + + #region Private Fields + private DateTimeCollection m_reqTimes; + #endregion + } + #endif + #endregion + + #region HistoryData Class + #if (!OPCUA_EXCLUDE_HistoryData) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryData : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryData() + { + 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_dataValues = new DataValueCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "DataValues", IsRequired = false, Order = 1)] + public DataValueCollection DataValues + { + get + { + return m_dataValues; + } + + set + { + m_dataValues = value; + + if (value == null) + { + m_dataValues = new DataValueCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryData; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryData_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryData_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDataValueArray("DataValues", DataValues); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + DataValues = decoder.ReadDataValueArray("DataValues"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryData value = encodeable as HistoryData; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_dataValues, value.m_dataValues)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryData)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryData clone = (HistoryData)base.MemberwiseClone(); + + clone.m_dataValues = (DataValueCollection)Utils.Clone(this.m_dataValues); + + return clone; + } + #endregion + + #region Private Fields + private DataValueCollection m_dataValues; + #endregion + } + #endif + #endregion + + #region ModificationInfo Class + #if (!OPCUA_EXCLUDE_ModificationInfo) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ModificationInfo : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ModificationInfo() + { + 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_modificationTime = DateTime.MinValue; + m_updateType = HistoryUpdateType.Insert; + m_userName = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ModificationTime", IsRequired = false, Order = 1)] + public DateTime ModificationTime + { + get { return m_modificationTime; } + set { m_modificationTime = value; } + } + + /// + [DataMember(Name = "UpdateType", IsRequired = false, Order = 2)] + public HistoryUpdateType UpdateType + { + get { return m_updateType; } + set { m_updateType = value; } + } + + /// + [DataMember(Name = "UserName", IsRequired = false, Order = 3)] + public string UserName + { + get { return m_userName; } + set { m_userName = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ModificationInfo; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ModificationInfo_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ModificationInfo_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTime("ModificationTime", ModificationTime); + encoder.WriteEnumerated("UpdateType", UpdateType); + encoder.WriteString("UserName", UserName); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ModificationTime = decoder.ReadDateTime("ModificationTime"); + UpdateType = (HistoryUpdateType)decoder.ReadEnumerated("UpdateType", typeof(HistoryUpdateType)); + UserName = decoder.ReadString("UserName"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ModificationInfo value = encodeable as ModificationInfo; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_modificationTime, value.m_modificationTime)) return false; + if (!Utils.IsEqual(m_updateType, value.m_updateType)) return false; + if (!Utils.IsEqual(m_userName, value.m_userName)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ModificationInfo)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ModificationInfo clone = (ModificationInfo)base.MemberwiseClone(); + + clone.m_modificationTime = (DateTime)Utils.Clone(this.m_modificationTime); + clone.m_updateType = (HistoryUpdateType)Utils.Clone(this.m_updateType); + clone.m_userName = (string)Utils.Clone(this.m_userName); + + return clone; + } + #endregion + + #region Private Fields + private DateTime m_modificationTime; + private HistoryUpdateType m_updateType; + private string m_userName; + #endregion + } + + #region ModificationInfoCollection Class + /// + /// A collection of ModificationInfo objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfModificationInfo", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ModificationInfo")] + #if !NET_STANDARD + public partial class ModificationInfoCollection : List, ICloneable + #else + public partial class ModificationInfoCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ModificationInfoCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ModificationInfoCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ModificationInfoCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ModificationInfoCollection(ModificationInfo[] values) + { + if (values != null) + { + return new ModificationInfoCollection(values); + } + + return new ModificationInfoCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ModificationInfo[](ModificationInfoCollection 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 (ModificationInfoCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ModificationInfoCollection clone = new ModificationInfoCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ModificationInfo)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region HistoryModifiedData Class + #if (!OPCUA_EXCLUDE_HistoryModifiedData) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryModifiedData : HistoryData + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryModifiedData() + { + 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_modificationInfos = new ModificationInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ModificationInfos", IsRequired = false, Order = 1)] + public ModificationInfoCollection ModificationInfos + { + get + { + return m_modificationInfos; + } + + set + { + m_modificationInfos = value; + + if (value == null) + { + m_modificationInfos = new ModificationInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryModifiedData; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryModifiedData_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryModifiedData_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("ModificationInfos", ModificationInfos.ToArray(), typeof(ModificationInfo)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ModificationInfos = (ModificationInfoCollection)decoder.ReadEncodeableArray("ModificationInfos", typeof(ModificationInfo)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryModifiedData value = encodeable as HistoryModifiedData; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_modificationInfos, value.m_modificationInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (HistoryModifiedData)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryModifiedData clone = (HistoryModifiedData)base.MemberwiseClone(); + + clone.m_modificationInfos = (ModificationInfoCollection)Utils.Clone(this.m_modificationInfos); + + return clone; + } + #endregion + + #region Private Fields + private ModificationInfoCollection m_modificationInfos; + #endregion + } + #endif + #endregion + + #region HistoryEvent Class + #if (!OPCUA_EXCLUDE_HistoryEvent) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryEvent : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryEvent() + { + 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_events = new HistoryEventFieldListCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "Events", IsRequired = false, Order = 1)] + public HistoryEventFieldListCollection Events + { + get + { + return m_events; + } + + set + { + m_events = value; + + if (value == null) + { + m_events = new HistoryEventFieldListCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryEvent; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryEvent_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryEvent_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("Events", Events.ToArray(), typeof(HistoryEventFieldList)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Events = (HistoryEventFieldListCollection)decoder.ReadEncodeableArray("Events", typeof(HistoryEventFieldList)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryEvent value = encodeable as HistoryEvent; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_events, value.m_events)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryEvent)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryEvent clone = (HistoryEvent)base.MemberwiseClone(); + + clone.m_events = (HistoryEventFieldListCollection)Utils.Clone(this.m_events); + + return clone; + } + #endregion + + #region Private Fields + private HistoryEventFieldListCollection m_events; + #endregion + } + #endif + #endregion + + #region HistoryReadRequest Class + #if (!OPCUA_EXCLUDE_HistoryReadRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryReadRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryReadRequest() + { + 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_requestHeader = new RequestHeader(); + m_historyReadDetails = null; + m_timestampsToReturn = TimestampsToReturn.Source; + m_releaseContinuationPoints = true; + m_nodesToRead = new HistoryReadValueIdCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "HistoryReadDetails", IsRequired = false, Order = 2)] + public ExtensionObject HistoryReadDetails + { + get { return m_historyReadDetails; } + set { m_historyReadDetails = value; } + } + + /// + [DataMember(Name = "TimestampsToReturn", IsRequired = false, Order = 3)] + public TimestampsToReturn TimestampsToReturn + { + get { return m_timestampsToReturn; } + set { m_timestampsToReturn = value; } + } + + /// + [DataMember(Name = "ReleaseContinuationPoints", IsRequired = false, Order = 4)] + public bool ReleaseContinuationPoints + { + get { return m_releaseContinuationPoints; } + set { m_releaseContinuationPoints = value; } + } + + /// + /// + /// + [DataMember(Name = "NodesToRead", IsRequired = false, Order = 5)] + public HistoryReadValueIdCollection NodesToRead + { + get + { + return m_nodesToRead; + } + + set + { + m_nodesToRead = value; + + if (value == null) + { + m_nodesToRead = new HistoryReadValueIdCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryReadRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryReadRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryReadRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteExtensionObject("HistoryReadDetails", HistoryReadDetails); + encoder.WriteEnumerated("TimestampsToReturn", TimestampsToReturn); + encoder.WriteBoolean("ReleaseContinuationPoints", ReleaseContinuationPoints); + encoder.WriteEncodeableArray("NodesToRead", NodesToRead.ToArray(), typeof(HistoryReadValueId)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + HistoryReadDetails = decoder.ReadExtensionObject("HistoryReadDetails"); + TimestampsToReturn = (TimestampsToReturn)decoder.ReadEnumerated("TimestampsToReturn", typeof(TimestampsToReturn)); + ReleaseContinuationPoints = decoder.ReadBoolean("ReleaseContinuationPoints"); + NodesToRead = (HistoryReadValueIdCollection)decoder.ReadEncodeableArray("NodesToRead", typeof(HistoryReadValueId)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryReadRequest value = encodeable as HistoryReadRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_historyReadDetails, value.m_historyReadDetails)) return false; + if (!Utils.IsEqual(m_timestampsToReturn, value.m_timestampsToReturn)) return false; + if (!Utils.IsEqual(m_releaseContinuationPoints, value.m_releaseContinuationPoints)) return false; + if (!Utils.IsEqual(m_nodesToRead, value.m_nodesToRead)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryReadRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadRequest clone = (HistoryReadRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_historyReadDetails = (ExtensionObject)Utils.Clone(this.m_historyReadDetails); + clone.m_timestampsToReturn = (TimestampsToReturn)Utils.Clone(this.m_timestampsToReturn); + clone.m_releaseContinuationPoints = (bool)Utils.Clone(this.m_releaseContinuationPoints); + clone.m_nodesToRead = (HistoryReadValueIdCollection)Utils.Clone(this.m_nodesToRead); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private ExtensionObject m_historyReadDetails; + private TimestampsToReturn m_timestampsToReturn; + private bool m_releaseContinuationPoints; + private HistoryReadValueIdCollection m_nodesToRead; + #endregion + } + #endif + #endregion + + #region HistoryReadResponse Class + #if (!OPCUA_EXCLUDE_HistoryReadResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryReadResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryReadResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new HistoryReadResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public HistoryReadResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new HistoryReadResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryReadResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryReadResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryReadResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(HistoryReadResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (HistoryReadResultCollection)decoder.ReadEncodeableArray("Results", typeof(HistoryReadResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryReadResponse value = encodeable as HistoryReadResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryReadResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryReadResponse clone = (HistoryReadResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (HistoryReadResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private HistoryReadResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region WriteValue Class + #if (!OPCUA_EXCLUDE_WriteValue) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class WriteValue : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public WriteValue() + { + 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_nodeId = null; + m_attributeId = (uint)0; + m_indexRange = null; + m_value = new DataValue(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + [DataMember(Name = "AttributeId", IsRequired = false, Order = 2)] + public uint AttributeId + { + get { return m_attributeId; } + set { m_attributeId = value; } + } + + /// + [DataMember(Name = "IndexRange", IsRequired = false, Order = 3)] + public string IndexRange + { + get { return m_indexRange; } + set { m_indexRange = value; } + } + + /// + [DataMember(Name = "Value", IsRequired = false, Order = 4)] + public DataValue Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.WriteValue; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.WriteValue_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.WriteValue_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + encoder.WriteUInt32("AttributeId", AttributeId); + encoder.WriteString("IndexRange", IndexRange); + encoder.WriteDataValue("Value", Value); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + AttributeId = decoder.ReadUInt32("AttributeId"); + IndexRange = decoder.ReadString("IndexRange"); + Value = decoder.ReadDataValue("Value"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + WriteValue value = encodeable as WriteValue; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + if (!Utils.IsEqual(m_attributeId, value.m_attributeId)) return false; + if (!Utils.IsEqual(m_indexRange, value.m_indexRange)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (WriteValue)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + WriteValue clone = (WriteValue)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + clone.m_attributeId = (uint)Utils.Clone(this.m_attributeId); + clone.m_indexRange = (string)Utils.Clone(this.m_indexRange); + clone.m_value = (DataValue)Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + private uint m_attributeId; + private string m_indexRange; + private DataValue m_value; + #endregion + } + + #region WriteValueCollection Class + /// + /// A collection of WriteValue objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfWriteValue", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "WriteValue")] + #if !NET_STANDARD + public partial class WriteValueCollection : List, ICloneable + #else + public partial class WriteValueCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public WriteValueCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public WriteValueCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public WriteValueCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator WriteValueCollection(WriteValue[] values) + { + if (values != null) + { + return new WriteValueCollection(values); + } + + return new WriteValueCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator WriteValue[](WriteValueCollection 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 (WriteValueCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + WriteValueCollection clone = new WriteValueCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((WriteValue)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region WriteRequest Class + #if (!OPCUA_EXCLUDE_WriteRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class WriteRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public WriteRequest() + { + 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_requestHeader = new RequestHeader(); + m_nodesToWrite = new WriteValueCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NodesToWrite", IsRequired = false, Order = 2)] + public WriteValueCollection NodesToWrite + { + get + { + return m_nodesToWrite; + } + + set + { + m_nodesToWrite = value; + + if (value == null) + { + m_nodesToWrite = new WriteValueCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.WriteRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.WriteRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.WriteRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("NodesToWrite", NodesToWrite.ToArray(), typeof(WriteValue)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + NodesToWrite = (WriteValueCollection)decoder.ReadEncodeableArray("NodesToWrite", typeof(WriteValue)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + WriteRequest value = encodeable as WriteRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_nodesToWrite, value.m_nodesToWrite)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (WriteRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + WriteRequest clone = (WriteRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_nodesToWrite = (WriteValueCollection)Utils.Clone(this.m_nodesToWrite); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private WriteValueCollection m_nodesToWrite; + #endregion + } + #endif + #endregion + + #region WriteResponse Class + #if (!OPCUA_EXCLUDE_WriteResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class WriteResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public WriteResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.WriteResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.WriteResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.WriteResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + WriteResponse value = encodeable as WriteResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (WriteResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + WriteResponse clone = (WriteResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region HistoryUpdateDetails Class + #if (!OPCUA_EXCLUDE_HistoryUpdateDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryUpdateDetails : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryUpdateDetails() + { + 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_nodeId = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NodeId", IsRequired = false, Order = 1)] + public NodeId NodeId + { + get { return m_nodeId; } + set { m_nodeId = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryUpdateDetails; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryUpdateDetails_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryUpdateDetails_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("NodeId", NodeId); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NodeId = decoder.ReadNodeId("NodeId"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryUpdateDetails value = encodeable as HistoryUpdateDetails; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_nodeId, value.m_nodeId)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryUpdateDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryUpdateDetails clone = (HistoryUpdateDetails)base.MemberwiseClone(); + + clone.m_nodeId = (NodeId)Utils.Clone(this.m_nodeId); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_nodeId; + #endregion + } + #endif + #endregion + + #region HistoryUpdateType Enumeration + #if (!OPCUA_EXCLUDE_HistoryUpdateType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum HistoryUpdateType + { + /// + [EnumMember(Value = "Insert_1")] + Insert = 1, + + /// + [EnumMember(Value = "Replace_2")] + Replace = 2, + + /// + [EnumMember(Value = "Update_3")] + Update = 3, + + /// + [EnumMember(Value = "Delete_4")] + Delete = 4, + } + #endif + #endregion + + #region PerformUpdateType Enumeration + #if (!OPCUA_EXCLUDE_PerformUpdateType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum PerformUpdateType + { + /// + [EnumMember(Value = "Insert_1")] + Insert = 1, + + /// + [EnumMember(Value = "Replace_2")] + Replace = 2, + + /// + [EnumMember(Value = "Update_3")] + Update = 3, + + /// + [EnumMember(Value = "Remove_4")] + Remove = 4, + } + #endif + #endregion + + #region UpdateDataDetails Class + #if (!OPCUA_EXCLUDE_UpdateDataDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UpdateDataDetails : HistoryUpdateDetails + { + #region Constructors + /// + /// The default constructor. + /// + public UpdateDataDetails() + { + 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_performInsertReplace = PerformUpdateType.Insert; + m_updateValues = new DataValueCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "PerformInsertReplace", IsRequired = false, Order = 1)] + public PerformUpdateType PerformInsertReplace + { + get { return m_performInsertReplace; } + set { m_performInsertReplace = value; } + } + + /// + /// + /// + [DataMember(Name = "UpdateValues", IsRequired = false, Order = 2)] + public DataValueCollection UpdateValues + { + get + { + return m_updateValues; + } + + set + { + m_updateValues = value; + + if (value == null) + { + m_updateValues = new DataValueCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UpdateDataDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UpdateDataDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UpdateDataDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("PerformInsertReplace", PerformInsertReplace); + encoder.WriteDataValueArray("UpdateValues", UpdateValues); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PerformInsertReplace = (PerformUpdateType)decoder.ReadEnumerated("PerformInsertReplace", typeof(PerformUpdateType)); + UpdateValues = decoder.ReadDataValueArray("UpdateValues"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UpdateDataDetails value = encodeable as UpdateDataDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_performInsertReplace, value.m_performInsertReplace)) return false; + if (!Utils.IsEqual(m_updateValues, value.m_updateValues)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UpdateDataDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UpdateDataDetails clone = (UpdateDataDetails)base.MemberwiseClone(); + + clone.m_performInsertReplace = (PerformUpdateType)Utils.Clone(this.m_performInsertReplace); + clone.m_updateValues = (DataValueCollection)Utils.Clone(this.m_updateValues); + + return clone; + } + #endregion + + #region Private Fields + private PerformUpdateType m_performInsertReplace; + private DataValueCollection m_updateValues; + #endregion + } + #endif + #endregion + + #region UpdateStructureDataDetails Class + #if (!OPCUA_EXCLUDE_UpdateStructureDataDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UpdateStructureDataDetails : HistoryUpdateDetails + { + #region Constructors + /// + /// The default constructor. + /// + public UpdateStructureDataDetails() + { + 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_performInsertReplace = PerformUpdateType.Insert; + m_updateValues = new DataValueCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "PerformInsertReplace", IsRequired = false, Order = 1)] + public PerformUpdateType PerformInsertReplace + { + get { return m_performInsertReplace; } + set { m_performInsertReplace = value; } + } + + /// + /// + /// + [DataMember(Name = "UpdateValues", IsRequired = false, Order = 2)] + public DataValueCollection UpdateValues + { + get + { + return m_updateValues; + } + + set + { + m_updateValues = value; + + if (value == null) + { + m_updateValues = new DataValueCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UpdateStructureDataDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UpdateStructureDataDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UpdateStructureDataDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("PerformInsertReplace", PerformInsertReplace); + encoder.WriteDataValueArray("UpdateValues", UpdateValues); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PerformInsertReplace = (PerformUpdateType)decoder.ReadEnumerated("PerformInsertReplace", typeof(PerformUpdateType)); + UpdateValues = decoder.ReadDataValueArray("UpdateValues"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UpdateStructureDataDetails value = encodeable as UpdateStructureDataDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_performInsertReplace, value.m_performInsertReplace)) return false; + if (!Utils.IsEqual(m_updateValues, value.m_updateValues)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UpdateStructureDataDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UpdateStructureDataDetails clone = (UpdateStructureDataDetails)base.MemberwiseClone(); + + clone.m_performInsertReplace = (PerformUpdateType)Utils.Clone(this.m_performInsertReplace); + clone.m_updateValues = (DataValueCollection)Utils.Clone(this.m_updateValues); + + return clone; + } + #endregion + + #region Private Fields + private PerformUpdateType m_performInsertReplace; + private DataValueCollection m_updateValues; + #endregion + } + #endif + #endregion + + #region UpdateEventDetails Class + #if (!OPCUA_EXCLUDE_UpdateEventDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class UpdateEventDetails : HistoryUpdateDetails + { + #region Constructors + /// + /// The default constructor. + /// + public UpdateEventDetails() + { + 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_performInsertReplace = PerformUpdateType.Insert; + m_filter = new EventFilter(); + m_eventData = new HistoryEventFieldListCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "PerformInsertReplace", IsRequired = false, Order = 1)] + public PerformUpdateType PerformInsertReplace + { + get { return m_performInsertReplace; } + set { m_performInsertReplace = value; } + } + + /// + /// + /// + [DataMember(Name = "Filter", IsRequired = false, Order = 2)] + public EventFilter Filter + { + get + { + return m_filter; + } + + set + { + m_filter = value; + + if (value == null) + { + m_filter = new EventFilter(); + } + } + } + + /// + /// + /// + [DataMember(Name = "EventData", IsRequired = false, Order = 3)] + public HistoryEventFieldListCollection EventData + { + get + { + return m_eventData; + } + + set + { + m_eventData = value; + + if (value == null) + { + m_eventData = new HistoryEventFieldListCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.UpdateEventDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.UpdateEventDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.UpdateEventDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("PerformInsertReplace", PerformInsertReplace); + encoder.WriteEncodeable("Filter", Filter, typeof(EventFilter)); + encoder.WriteEncodeableArray("EventData", EventData.ToArray(), typeof(HistoryEventFieldList)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + PerformInsertReplace = (PerformUpdateType)decoder.ReadEnumerated("PerformInsertReplace", typeof(PerformUpdateType)); + Filter = (EventFilter)decoder.ReadEncodeable("Filter", typeof(EventFilter)); + EventData = (HistoryEventFieldListCollection)decoder.ReadEncodeableArray("EventData", typeof(HistoryEventFieldList)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + UpdateEventDetails value = encodeable as UpdateEventDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_performInsertReplace, value.m_performInsertReplace)) return false; + if (!Utils.IsEqual(m_filter, value.m_filter)) return false; + if (!Utils.IsEqual(m_eventData, value.m_eventData)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (UpdateEventDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + UpdateEventDetails clone = (UpdateEventDetails)base.MemberwiseClone(); + + clone.m_performInsertReplace = (PerformUpdateType)Utils.Clone(this.m_performInsertReplace); + clone.m_filter = (EventFilter)Utils.Clone(this.m_filter); + clone.m_eventData = (HistoryEventFieldListCollection)Utils.Clone(this.m_eventData); + + return clone; + } + #endregion + + #region Private Fields + private PerformUpdateType m_performInsertReplace; + private EventFilter m_filter; + private HistoryEventFieldListCollection m_eventData; + #endregion + } + #endif + #endregion + + #region DeleteRawModifiedDetails Class + #if (!OPCUA_EXCLUDE_DeleteRawModifiedDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteRawModifiedDetails : HistoryUpdateDetails + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteRawModifiedDetails() + { + 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_isDeleteModified = true; + m_startTime = DateTime.MinValue; + m_endTime = DateTime.MinValue; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "IsDeleteModified", IsRequired = false, Order = 1)] + public bool IsDeleteModified + { + get { return m_isDeleteModified; } + set { m_isDeleteModified = value; } + } + + /// + [DataMember(Name = "StartTime", IsRequired = false, Order = 2)] + public DateTime StartTime + { + get { return m_startTime; } + set { m_startTime = value; } + } + + /// + [DataMember(Name = "EndTime", IsRequired = false, Order = 3)] + public DateTime EndTime + { + get { return m_endTime; } + set { m_endTime = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteRawModifiedDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteRawModifiedDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteRawModifiedDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("IsDeleteModified", IsDeleteModified); + encoder.WriteDateTime("StartTime", StartTime); + encoder.WriteDateTime("EndTime", EndTime); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + IsDeleteModified = decoder.ReadBoolean("IsDeleteModified"); + StartTime = decoder.ReadDateTime("StartTime"); + EndTime = decoder.ReadDateTime("EndTime"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteRawModifiedDetails value = encodeable as DeleteRawModifiedDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_isDeleteModified, value.m_isDeleteModified)) return false; + if (!Utils.IsEqual(m_startTime, value.m_startTime)) return false; + if (!Utils.IsEqual(m_endTime, value.m_endTime)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DeleteRawModifiedDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteRawModifiedDetails clone = (DeleteRawModifiedDetails)base.MemberwiseClone(); + + clone.m_isDeleteModified = (bool)Utils.Clone(this.m_isDeleteModified); + clone.m_startTime = (DateTime)Utils.Clone(this.m_startTime); + clone.m_endTime = (DateTime)Utils.Clone(this.m_endTime); + + return clone; + } + #endregion + + #region Private Fields + private bool m_isDeleteModified; + private DateTime m_startTime; + private DateTime m_endTime; + #endregion + } + #endif + #endregion + + #region DeleteAtTimeDetails Class + #if (!OPCUA_EXCLUDE_DeleteAtTimeDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteAtTimeDetails : HistoryUpdateDetails + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteAtTimeDetails() + { + 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_reqTimes = new DateTimeCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ReqTimes", IsRequired = false, Order = 1)] + public DateTimeCollection ReqTimes + { + get + { + return m_reqTimes; + } + + set + { + m_reqTimes = value; + + if (value == null) + { + m_reqTimes = new DateTimeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteAtTimeDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteAtTimeDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteAtTimeDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTimeArray("ReqTimes", ReqTimes); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ReqTimes = decoder.ReadDateTimeArray("ReqTimes"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteAtTimeDetails value = encodeable as DeleteAtTimeDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_reqTimes, value.m_reqTimes)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DeleteAtTimeDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteAtTimeDetails clone = (DeleteAtTimeDetails)base.MemberwiseClone(); + + clone.m_reqTimes = (DateTimeCollection)Utils.Clone(this.m_reqTimes); + + return clone; + } + #endregion + + #region Private Fields + private DateTimeCollection m_reqTimes; + #endregion + } + #endif + #endregion + + #region DeleteEventDetails Class + #if (!OPCUA_EXCLUDE_DeleteEventDetails) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteEventDetails : HistoryUpdateDetails + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteEventDetails() + { + 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_eventIds = new ByteStringCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "EventIds", IsRequired = false, Order = 1)] + public ByteStringCollection EventIds + { + get + { + return m_eventIds; + } + + set + { + m_eventIds = value; + + if (value == null) + { + m_eventIds = new ByteStringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteEventDetails; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteEventDetails_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteEventDetails_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteByteStringArray("EventIds", EventIds); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EventIds = decoder.ReadByteStringArray("EventIds"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteEventDetails value = encodeable as DeleteEventDetails; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_eventIds, value.m_eventIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DeleteEventDetails)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteEventDetails clone = (DeleteEventDetails)base.MemberwiseClone(); + + clone.m_eventIds = (ByteStringCollection)Utils.Clone(this.m_eventIds); + + return clone; + } + #endregion + + #region Private Fields + private ByteStringCollection m_eventIds; + #endregion + } + #endif + #endregion + + #region HistoryUpdateResult Class + #if (!OPCUA_EXCLUDE_HistoryUpdateResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryUpdateResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryUpdateResult() + { + 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_statusCode = StatusCodes.Good; + m_operationResults = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// + /// + [DataMember(Name = "OperationResults", IsRequired = false, Order = 2)] + public StatusCodeCollection OperationResults + { + get + { + return m_operationResults; + } + + set + { + m_operationResults = value; + + if (value == null) + { + m_operationResults = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryUpdateResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryUpdateResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryUpdateResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteStatusCodeArray("OperationResults", OperationResults); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + OperationResults = decoder.ReadStatusCodeArray("OperationResults"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryUpdateResult value = encodeable as HistoryUpdateResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_operationResults, value.m_operationResults)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryUpdateResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryUpdateResult clone = (HistoryUpdateResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_operationResults = (StatusCodeCollection)Utils.Clone(this.m_operationResults); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private StatusCodeCollection m_operationResults; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + + #region HistoryUpdateResultCollection Class + /// + /// A collection of HistoryUpdateResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfHistoryUpdateResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "HistoryUpdateResult")] + #if !NET_STANDARD + public partial class HistoryUpdateResultCollection : List, ICloneable + #else + public partial class HistoryUpdateResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public HistoryUpdateResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public HistoryUpdateResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public HistoryUpdateResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator HistoryUpdateResultCollection(HistoryUpdateResult[] values) + { + if (values != null) + { + return new HistoryUpdateResultCollection(values); + } + + return new HistoryUpdateResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator HistoryUpdateResult[](HistoryUpdateResultCollection 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 (HistoryUpdateResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + HistoryUpdateResultCollection clone = new HistoryUpdateResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((HistoryUpdateResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region HistoryUpdateRequest Class + #if (!OPCUA_EXCLUDE_HistoryUpdateRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryUpdateRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryUpdateRequest() + { + 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_requestHeader = new RequestHeader(); + m_historyUpdateDetails = new ExtensionObjectCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "HistoryUpdateDetails", IsRequired = false, Order = 2)] + public ExtensionObjectCollection HistoryUpdateDetails + { + get + { + return m_historyUpdateDetails; + } + + set + { + m_historyUpdateDetails = value; + + if (value == null) + { + m_historyUpdateDetails = new ExtensionObjectCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryUpdateRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryUpdateRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryUpdateRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteExtensionObjectArray("HistoryUpdateDetails", HistoryUpdateDetails); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + HistoryUpdateDetails = decoder.ReadExtensionObjectArray("HistoryUpdateDetails"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryUpdateRequest value = encodeable as HistoryUpdateRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_historyUpdateDetails, value.m_historyUpdateDetails)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryUpdateRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryUpdateRequest clone = (HistoryUpdateRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_historyUpdateDetails = (ExtensionObjectCollection)Utils.Clone(this.m_historyUpdateDetails); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private ExtensionObjectCollection m_historyUpdateDetails; + #endregion + } + #endif + #endregion + + #region HistoryUpdateResponse Class + #if (!OPCUA_EXCLUDE_HistoryUpdateResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryUpdateResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryUpdateResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new HistoryUpdateResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public HistoryUpdateResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new HistoryUpdateResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryUpdateResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryUpdateResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryUpdateResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(HistoryUpdateResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (HistoryUpdateResultCollection)decoder.ReadEncodeableArray("Results", typeof(HistoryUpdateResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryUpdateResponse value = encodeable as HistoryUpdateResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryUpdateResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryUpdateResponse clone = (HistoryUpdateResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (HistoryUpdateResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private HistoryUpdateResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region CallMethodRequest Class + #if (!OPCUA_EXCLUDE_CallMethodRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CallMethodRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CallMethodRequest() + { + 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_objectId = null; + m_methodId = null; + m_inputArguments = new VariantCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ObjectId", IsRequired = false, Order = 1)] + public NodeId ObjectId + { + get { return m_objectId; } + set { m_objectId = value; } + } + + /// + [DataMember(Name = "MethodId", IsRequired = false, Order = 2)] + public NodeId MethodId + { + get { return m_methodId; } + set { m_methodId = value; } + } + + /// + /// + /// + [DataMember(Name = "InputArguments", IsRequired = false, Order = 3)] + public VariantCollection InputArguments + { + get + { + return m_inputArguments; + } + + set + { + m_inputArguments = value; + + if (value == null) + { + m_inputArguments = new VariantCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CallMethodRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CallMethodRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CallMethodRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("ObjectId", ObjectId); + encoder.WriteNodeId("MethodId", MethodId); + encoder.WriteVariantArray("InputArguments", InputArguments); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ObjectId = decoder.ReadNodeId("ObjectId"); + MethodId = decoder.ReadNodeId("MethodId"); + InputArguments = decoder.ReadVariantArray("InputArguments"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CallMethodRequest value = encodeable as CallMethodRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_objectId, value.m_objectId)) return false; + if (!Utils.IsEqual(m_methodId, value.m_methodId)) return false; + if (!Utils.IsEqual(m_inputArguments, value.m_inputArguments)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CallMethodRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CallMethodRequest clone = (CallMethodRequest)base.MemberwiseClone(); + + clone.m_objectId = (NodeId)Utils.Clone(this.m_objectId); + clone.m_methodId = (NodeId)Utils.Clone(this.m_methodId); + clone.m_inputArguments = (VariantCollection)Utils.Clone(this.m_inputArguments); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_objectId; + private NodeId m_methodId; + private VariantCollection m_inputArguments; + #endregion + } + + #region CallMethodRequestCollection Class + /// + /// A collection of CallMethodRequest objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfCallMethodRequest", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "CallMethodRequest")] + #if !NET_STANDARD + public partial class CallMethodRequestCollection : List, ICloneable + #else + public partial class CallMethodRequestCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public CallMethodRequestCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public CallMethodRequestCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public CallMethodRequestCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator CallMethodRequestCollection(CallMethodRequest[] values) + { + if (values != null) + { + return new CallMethodRequestCollection(values); + } + + return new CallMethodRequestCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator CallMethodRequest[](CallMethodRequestCollection 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 (CallMethodRequestCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + CallMethodRequestCollection clone = new CallMethodRequestCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((CallMethodRequest)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region CallMethodResult Class + #if (!OPCUA_EXCLUDE_CallMethodResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CallMethodResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CallMethodResult() + { + 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_statusCode = StatusCodes.Good; + m_inputArgumentResults = new StatusCodeCollection(); + m_inputArgumentDiagnosticInfos = new DiagnosticInfoCollection(); + m_outputArguments = new VariantCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// + /// + [DataMember(Name = "InputArgumentResults", IsRequired = false, Order = 2)] + public StatusCodeCollection InputArgumentResults + { + get + { + return m_inputArgumentResults; + } + + set + { + m_inputArgumentResults = value; + + if (value == null) + { + m_inputArgumentResults = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "InputArgumentDiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection InputArgumentDiagnosticInfos + { + get + { + return m_inputArgumentDiagnosticInfos; + } + + set + { + m_inputArgumentDiagnosticInfos = value; + + if (value == null) + { + m_inputArgumentDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "OutputArguments", IsRequired = false, Order = 4)] + public VariantCollection OutputArguments + { + get + { + return m_outputArguments; + } + + set + { + m_outputArguments = value; + + if (value == null) + { + m_outputArguments = new VariantCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CallMethodResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CallMethodResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CallMethodResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteStatusCodeArray("InputArgumentResults", InputArgumentResults); + encoder.WriteDiagnosticInfoArray("InputArgumentDiagnosticInfos", InputArgumentDiagnosticInfos); + encoder.WriteVariantArray("OutputArguments", OutputArguments); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + InputArgumentResults = decoder.ReadStatusCodeArray("InputArgumentResults"); + InputArgumentDiagnosticInfos = decoder.ReadDiagnosticInfoArray("InputArgumentDiagnosticInfos"); + OutputArguments = decoder.ReadVariantArray("OutputArguments"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CallMethodResult value = encodeable as CallMethodResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_inputArgumentResults, value.m_inputArgumentResults)) return false; + if (!Utils.IsEqual(m_inputArgumentDiagnosticInfos, value.m_inputArgumentDiagnosticInfos)) return false; + if (!Utils.IsEqual(m_outputArguments, value.m_outputArguments)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CallMethodResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CallMethodResult clone = (CallMethodResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_inputArgumentResults = (StatusCodeCollection)Utils.Clone(this.m_inputArgumentResults); + clone.m_inputArgumentDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_inputArgumentDiagnosticInfos); + clone.m_outputArguments = (VariantCollection)Utils.Clone(this.m_outputArguments); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private StatusCodeCollection m_inputArgumentResults; + private DiagnosticInfoCollection m_inputArgumentDiagnosticInfos; + private VariantCollection m_outputArguments; + #endregion + } + + #region CallMethodResultCollection Class + /// + /// A collection of CallMethodResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfCallMethodResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "CallMethodResult")] + #if !NET_STANDARD + public partial class CallMethodResultCollection : List, ICloneable + #else + public partial class CallMethodResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public CallMethodResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public CallMethodResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public CallMethodResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator CallMethodResultCollection(CallMethodResult[] values) + { + if (values != null) + { + return new CallMethodResultCollection(values); + } + + return new CallMethodResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator CallMethodResult[](CallMethodResultCollection 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 (CallMethodResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + CallMethodResultCollection clone = new CallMethodResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((CallMethodResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region CallRequest Class + #if (!OPCUA_EXCLUDE_CallRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CallRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CallRequest() + { + 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_requestHeader = new RequestHeader(); + m_methodsToCall = new CallMethodRequestCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "MethodsToCall", IsRequired = false, Order = 2)] + public CallMethodRequestCollection MethodsToCall + { + get + { + return m_methodsToCall; + } + + set + { + m_methodsToCall = value; + + if (value == null) + { + m_methodsToCall = new CallMethodRequestCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CallRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CallRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CallRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("MethodsToCall", MethodsToCall.ToArray(), typeof(CallMethodRequest)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + MethodsToCall = (CallMethodRequestCollection)decoder.ReadEncodeableArray("MethodsToCall", typeof(CallMethodRequest)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CallRequest value = encodeable as CallRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_methodsToCall, value.m_methodsToCall)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CallRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CallRequest clone = (CallRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_methodsToCall = (CallMethodRequestCollection)Utils.Clone(this.m_methodsToCall); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private CallMethodRequestCollection m_methodsToCall; + #endregion + } + #endif + #endregion + + #region CallResponse Class + #if (!OPCUA_EXCLUDE_CallResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CallResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CallResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new CallMethodResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public CallMethodResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new CallMethodResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CallResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CallResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CallResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(CallMethodResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (CallMethodResultCollection)decoder.ReadEncodeableArray("Results", typeof(CallMethodResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CallResponse value = encodeable as CallResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CallResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CallResponse clone = (CallResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (CallMethodResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private CallMethodResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region MonitoringMode Enumeration + #if (!OPCUA_EXCLUDE_MonitoringMode) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum MonitoringMode + { + /// + [EnumMember(Value = "Disabled_0")] + Disabled = 0, + + /// + [EnumMember(Value = "Sampling_1")] + Sampling = 1, + + /// + [EnumMember(Value = "Reporting_2")] + Reporting = 2, + } + #endif + #endregion + + #region DataChangeTrigger Enumeration + #if (!OPCUA_EXCLUDE_DataChangeTrigger) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum DataChangeTrigger + { + /// + [EnumMember(Value = "Status_0")] + Status = 0, + + /// + [EnumMember(Value = "StatusValue_1")] + StatusValue = 1, + + /// + [EnumMember(Value = "StatusValueTimestamp_2")] + StatusValueTimestamp = 2, + } + #endif + #endregion + + #region DeadbandType Enumeration + #if (!OPCUA_EXCLUDE_DeadbandType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum DeadbandType + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "Absolute_1")] + Absolute = 1, + + /// + [EnumMember(Value = "Percent_2")] + Percent = 2, + } + #endif + #endregion + + #region MonitoringFilter Class + #if (!OPCUA_EXCLUDE_MonitoringFilter) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoringFilter : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoringFilter() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoringFilter; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoringFilter_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoringFilter_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoringFilter value = encodeable as MonitoringFilter; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoringFilter)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoringFilter clone = (MonitoringFilter)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataChangeFilter Class + #if (!OPCUA_EXCLUDE_DataChangeFilter) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataChangeFilter : MonitoringFilter + { + #region Constructors + /// + /// The default constructor. + /// + public DataChangeFilter() + { + 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_trigger = DataChangeTrigger.Status; + m_deadbandType = (uint)0; + m_deadbandValue = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Trigger", IsRequired = false, Order = 1)] + public DataChangeTrigger Trigger + { + get { return m_trigger; } + set { m_trigger = value; } + } + + /// + [DataMember(Name = "DeadbandType", IsRequired = false, Order = 2)] + public uint DeadbandType + { + get { return m_deadbandType; } + set { m_deadbandType = value; } + } + + /// + [DataMember(Name = "DeadbandValue", IsRequired = false, Order = 3)] + public double DeadbandValue + { + get { return m_deadbandValue; } + set { m_deadbandValue = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DataChangeFilter; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataChangeFilter_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataChangeFilter_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("Trigger", Trigger); + encoder.WriteUInt32("DeadbandType", DeadbandType); + encoder.WriteDouble("DeadbandValue", DeadbandValue); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Trigger = (DataChangeTrigger)decoder.ReadEnumerated("Trigger", typeof(DataChangeTrigger)); + DeadbandType = decoder.ReadUInt32("DeadbandType"); + DeadbandValue = decoder.ReadDouble("DeadbandValue"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataChangeFilter value = encodeable as DataChangeFilter; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_trigger, value.m_trigger)) return false; + if (!Utils.IsEqual(m_deadbandType, value.m_deadbandType)) return false; + if (!Utils.IsEqual(m_deadbandValue, value.m_deadbandValue)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DataChangeFilter)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataChangeFilter clone = (DataChangeFilter)base.MemberwiseClone(); + + clone.m_trigger = (DataChangeTrigger)Utils.Clone(this.m_trigger); + clone.m_deadbandType = (uint)Utils.Clone(this.m_deadbandType); + clone.m_deadbandValue = (double)Utils.Clone(this.m_deadbandValue); + + return clone; + } + #endregion + + #region Private Fields + private DataChangeTrigger m_trigger; + private uint m_deadbandType; + private double m_deadbandValue; + #endregion + } + #endif + #endregion + + #region EventFilter Class + #if (!OPCUA_EXCLUDE_EventFilter) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EventFilter : MonitoringFilter + { + #region Constructors + /// + /// The default constructor. + /// + public EventFilter() + { + 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_selectClauses = new SimpleAttributeOperandCollection(); + m_whereClause = new ContentFilter(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "SelectClauses", IsRequired = false, Order = 1)] + public SimpleAttributeOperandCollection SelectClauses + { + get + { + return m_selectClauses; + } + + set + { + m_selectClauses = value; + + if (value == null) + { + m_selectClauses = new SimpleAttributeOperandCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "WhereClause", IsRequired = false, Order = 2)] + public ContentFilter WhereClause + { + get + { + return m_whereClause; + } + + set + { + m_whereClause = value; + + if (value == null) + { + m_whereClause = new ContentFilter(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.EventFilter; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EventFilter_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EventFilter_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("SelectClauses", SelectClauses.ToArray(), typeof(SimpleAttributeOperand)); + encoder.WriteEncodeable("WhereClause", WhereClause, typeof(ContentFilter)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SelectClauses = (SimpleAttributeOperandCollection)decoder.ReadEncodeableArray("SelectClauses", typeof(SimpleAttributeOperand)); + WhereClause = (ContentFilter)decoder.ReadEncodeable("WhereClause", typeof(ContentFilter)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EventFilter value = encodeable as EventFilter; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_selectClauses, value.m_selectClauses)) return false; + if (!Utils.IsEqual(m_whereClause, value.m_whereClause)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (EventFilter)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EventFilter clone = (EventFilter)base.MemberwiseClone(); + + clone.m_selectClauses = (SimpleAttributeOperandCollection)Utils.Clone(this.m_selectClauses); + clone.m_whereClause = (ContentFilter)Utils.Clone(this.m_whereClause); + + return clone; + } + #endregion + + #region Private Fields + private SimpleAttributeOperandCollection m_selectClauses; + private ContentFilter m_whereClause; + #endregion + } + #endif + #endregion + + #region AggregateConfiguration Class + #if (!OPCUA_EXCLUDE_AggregateConfiguration) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AggregateConfiguration : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AggregateConfiguration() + { + 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_useServerCapabilitiesDefaults = true; + m_treatUncertainAsBad = true; + m_percentDataBad = (byte)0; + m_percentDataGood = (byte)0; + m_useSlopedExtrapolation = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "UseServerCapabilitiesDefaults", IsRequired = false, Order = 1)] + public bool UseServerCapabilitiesDefaults + { + get { return m_useServerCapabilitiesDefaults; } + set { m_useServerCapabilitiesDefaults = value; } + } + + /// + [DataMember(Name = "TreatUncertainAsBad", IsRequired = false, Order = 2)] + public bool TreatUncertainAsBad + { + get { return m_treatUncertainAsBad; } + set { m_treatUncertainAsBad = value; } + } + + /// + [DataMember(Name = "PercentDataBad", IsRequired = false, Order = 3)] + public byte PercentDataBad + { + get { return m_percentDataBad; } + set { m_percentDataBad = value; } + } + + /// + [DataMember(Name = "PercentDataGood", IsRequired = false, Order = 4)] + public byte PercentDataGood + { + get { return m_percentDataGood; } + set { m_percentDataGood = value; } + } + + /// + [DataMember(Name = "UseSlopedExtrapolation", IsRequired = false, Order = 5)] + public bool UseSlopedExtrapolation + { + get { return m_useSlopedExtrapolation; } + set { m_useSlopedExtrapolation = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AggregateConfiguration; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AggregateConfiguration_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AggregateConfiguration_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteBoolean("UseServerCapabilitiesDefaults", UseServerCapabilitiesDefaults); + encoder.WriteBoolean("TreatUncertainAsBad", TreatUncertainAsBad); + encoder.WriteByte("PercentDataBad", PercentDataBad); + encoder.WriteByte("PercentDataGood", PercentDataGood); + encoder.WriteBoolean("UseSlopedExtrapolation", UseSlopedExtrapolation); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + UseServerCapabilitiesDefaults = decoder.ReadBoolean("UseServerCapabilitiesDefaults"); + TreatUncertainAsBad = decoder.ReadBoolean("TreatUncertainAsBad"); + PercentDataBad = decoder.ReadByte("PercentDataBad"); + PercentDataGood = decoder.ReadByte("PercentDataGood"); + UseSlopedExtrapolation = decoder.ReadBoolean("UseSlopedExtrapolation"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AggregateConfiguration value = encodeable as AggregateConfiguration; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_useServerCapabilitiesDefaults, value.m_useServerCapabilitiesDefaults)) return false; + if (!Utils.IsEqual(m_treatUncertainAsBad, value.m_treatUncertainAsBad)) return false; + if (!Utils.IsEqual(m_percentDataBad, value.m_percentDataBad)) return false; + if (!Utils.IsEqual(m_percentDataGood, value.m_percentDataGood)) return false; + if (!Utils.IsEqual(m_useSlopedExtrapolation, value.m_useSlopedExtrapolation)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AggregateConfiguration)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AggregateConfiguration clone = (AggregateConfiguration)base.MemberwiseClone(); + + clone.m_useServerCapabilitiesDefaults = (bool)Utils.Clone(this.m_useServerCapabilitiesDefaults); + clone.m_treatUncertainAsBad = (bool)Utils.Clone(this.m_treatUncertainAsBad); + clone.m_percentDataBad = (byte)Utils.Clone(this.m_percentDataBad); + clone.m_percentDataGood = (byte)Utils.Clone(this.m_percentDataGood); + clone.m_useSlopedExtrapolation = (bool)Utils.Clone(this.m_useSlopedExtrapolation); + + return clone; + } + #endregion + + #region Private Fields + private bool m_useServerCapabilitiesDefaults; + private bool m_treatUncertainAsBad; + private byte m_percentDataBad; + private byte m_percentDataGood; + private bool m_useSlopedExtrapolation; + #endregion + } + #endif + #endregion + + #region AggregateFilter Class + #if (!OPCUA_EXCLUDE_AggregateFilter) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AggregateFilter : MonitoringFilter + { + #region Constructors + /// + /// The default constructor. + /// + public AggregateFilter() + { + 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_startTime = DateTime.MinValue; + m_aggregateType = null; + m_processingInterval = (double)0; + m_aggregateConfiguration = new AggregateConfiguration(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StartTime", IsRequired = false, Order = 1)] + public DateTime StartTime + { + get { return m_startTime; } + set { m_startTime = value; } + } + + /// + [DataMember(Name = "AggregateType", IsRequired = false, Order = 2)] + public NodeId AggregateType + { + get { return m_aggregateType; } + set { m_aggregateType = value; } + } + + /// + [DataMember(Name = "ProcessingInterval", IsRequired = false, Order = 3)] + public double ProcessingInterval + { + get { return m_processingInterval; } + set { m_processingInterval = value; } + } + + /// + /// + /// + [DataMember(Name = "AggregateConfiguration", IsRequired = false, Order = 4)] + public AggregateConfiguration AggregateConfiguration + { + get + { + return m_aggregateConfiguration; + } + + set + { + m_aggregateConfiguration = value; + + if (value == null) + { + m_aggregateConfiguration = new AggregateConfiguration(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.AggregateFilter; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AggregateFilter_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AggregateFilter_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTime("StartTime", StartTime); + encoder.WriteNodeId("AggregateType", AggregateType); + encoder.WriteDouble("ProcessingInterval", ProcessingInterval); + encoder.WriteEncodeable("AggregateConfiguration", AggregateConfiguration, typeof(AggregateConfiguration)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StartTime = decoder.ReadDateTime("StartTime"); + AggregateType = decoder.ReadNodeId("AggregateType"); + ProcessingInterval = decoder.ReadDouble("ProcessingInterval"); + AggregateConfiguration = (AggregateConfiguration)decoder.ReadEncodeable("AggregateConfiguration", typeof(AggregateConfiguration)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AggregateFilter value = encodeable as AggregateFilter; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_startTime, value.m_startTime)) return false; + if (!Utils.IsEqual(m_aggregateType, value.m_aggregateType)) return false; + if (!Utils.IsEqual(m_processingInterval, value.m_processingInterval)) return false; + if (!Utils.IsEqual(m_aggregateConfiguration, value.m_aggregateConfiguration)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (AggregateFilter)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AggregateFilter clone = (AggregateFilter)base.MemberwiseClone(); + + clone.m_startTime = (DateTime)Utils.Clone(this.m_startTime); + clone.m_aggregateType = (NodeId)Utils.Clone(this.m_aggregateType); + clone.m_processingInterval = (double)Utils.Clone(this.m_processingInterval); + clone.m_aggregateConfiguration = (AggregateConfiguration)Utils.Clone(this.m_aggregateConfiguration); + + return clone; + } + #endregion + + #region Private Fields + private DateTime m_startTime; + private NodeId m_aggregateType; + private double m_processingInterval; + private AggregateConfiguration m_aggregateConfiguration; + #endregion + } + #endif + #endregion + + #region MonitoringFilterResult Class + #if (!OPCUA_EXCLUDE_MonitoringFilterResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoringFilterResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoringFilterResult() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoringFilterResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoringFilterResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoringFilterResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoringFilterResult value = encodeable as MonitoringFilterResult; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoringFilterResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoringFilterResult clone = (MonitoringFilterResult)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region EventFilterResult Class + #if (!OPCUA_EXCLUDE_EventFilterResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EventFilterResult : MonitoringFilterResult + { + #region Constructors + /// + /// The default constructor. + /// + public EventFilterResult() + { + 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_selectClauseResults = new StatusCodeCollection(); + m_selectClauseDiagnosticInfos = new DiagnosticInfoCollection(); + m_whereClauseResult = new ContentFilterResult(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "SelectClauseResults", IsRequired = false, Order = 1)] + public StatusCodeCollection SelectClauseResults + { + get + { + return m_selectClauseResults; + } + + set + { + m_selectClauseResults = value; + + if (value == null) + { + m_selectClauseResults = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SelectClauseDiagnosticInfos", IsRequired = false, Order = 2)] + public DiagnosticInfoCollection SelectClauseDiagnosticInfos + { + get + { + return m_selectClauseDiagnosticInfos; + } + + set + { + m_selectClauseDiagnosticInfos = value; + + if (value == null) + { + m_selectClauseDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "WhereClauseResult", IsRequired = false, Order = 3)] + public ContentFilterResult WhereClauseResult + { + get + { + return m_whereClauseResult; + } + + set + { + m_whereClauseResult = value; + + if (value == null) + { + m_whereClauseResult = new ContentFilterResult(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.EventFilterResult; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EventFilterResult_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EventFilterResult_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCodeArray("SelectClauseResults", SelectClauseResults); + encoder.WriteDiagnosticInfoArray("SelectClauseDiagnosticInfos", SelectClauseDiagnosticInfos); + encoder.WriteEncodeable("WhereClauseResult", WhereClauseResult, typeof(ContentFilterResult)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SelectClauseResults = decoder.ReadStatusCodeArray("SelectClauseResults"); + SelectClauseDiagnosticInfos = decoder.ReadDiagnosticInfoArray("SelectClauseDiagnosticInfos"); + WhereClauseResult = (ContentFilterResult)decoder.ReadEncodeable("WhereClauseResult", typeof(ContentFilterResult)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EventFilterResult value = encodeable as EventFilterResult; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_selectClauseResults, value.m_selectClauseResults)) return false; + if (!Utils.IsEqual(m_selectClauseDiagnosticInfos, value.m_selectClauseDiagnosticInfos)) return false; + if (!Utils.IsEqual(m_whereClauseResult, value.m_whereClauseResult)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (EventFilterResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EventFilterResult clone = (EventFilterResult)base.MemberwiseClone(); + + clone.m_selectClauseResults = (StatusCodeCollection)Utils.Clone(this.m_selectClauseResults); + clone.m_selectClauseDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_selectClauseDiagnosticInfos); + clone.m_whereClauseResult = (ContentFilterResult)Utils.Clone(this.m_whereClauseResult); + + return clone; + } + #endregion + + #region Private Fields + private StatusCodeCollection m_selectClauseResults; + private DiagnosticInfoCollection m_selectClauseDiagnosticInfos; + private ContentFilterResult m_whereClauseResult; + #endregion + } + #endif + #endregion + + #region AggregateFilterResult Class + #if (!OPCUA_EXCLUDE_AggregateFilterResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AggregateFilterResult : MonitoringFilterResult + { + #region Constructors + /// + /// The default constructor. + /// + public AggregateFilterResult() + { + 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_revisedStartTime = DateTime.MinValue; + m_revisedProcessingInterval = (double)0; + m_revisedAggregateConfiguration = new AggregateConfiguration(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "RevisedStartTime", IsRequired = false, Order = 1)] + public DateTime RevisedStartTime + { + get { return m_revisedStartTime; } + set { m_revisedStartTime = value; } + } + + /// + [DataMember(Name = "RevisedProcessingInterval", IsRequired = false, Order = 2)] + public double RevisedProcessingInterval + { + get { return m_revisedProcessingInterval; } + set { m_revisedProcessingInterval = value; } + } + + /// + /// + /// + [DataMember(Name = "RevisedAggregateConfiguration", IsRequired = false, Order = 3)] + public AggregateConfiguration RevisedAggregateConfiguration + { + get + { + return m_revisedAggregateConfiguration; + } + + set + { + m_revisedAggregateConfiguration = value; + + if (value == null) + { + m_revisedAggregateConfiguration = new AggregateConfiguration(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.AggregateFilterResult; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AggregateFilterResult_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AggregateFilterResult_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTime("RevisedStartTime", RevisedStartTime); + encoder.WriteDouble("RevisedProcessingInterval", RevisedProcessingInterval); + encoder.WriteEncodeable("RevisedAggregateConfiguration", RevisedAggregateConfiguration, typeof(AggregateConfiguration)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RevisedStartTime = decoder.ReadDateTime("RevisedStartTime"); + RevisedProcessingInterval = decoder.ReadDouble("RevisedProcessingInterval"); + RevisedAggregateConfiguration = (AggregateConfiguration)decoder.ReadEncodeable("RevisedAggregateConfiguration", typeof(AggregateConfiguration)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AggregateFilterResult value = encodeable as AggregateFilterResult; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_revisedStartTime, value.m_revisedStartTime)) return false; + if (!Utils.IsEqual(m_revisedProcessingInterval, value.m_revisedProcessingInterval)) return false; + if (!Utils.IsEqual(m_revisedAggregateConfiguration, value.m_revisedAggregateConfiguration)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (AggregateFilterResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AggregateFilterResult clone = (AggregateFilterResult)base.MemberwiseClone(); + + clone.m_revisedStartTime = (DateTime)Utils.Clone(this.m_revisedStartTime); + clone.m_revisedProcessingInterval = (double)Utils.Clone(this.m_revisedProcessingInterval); + clone.m_revisedAggregateConfiguration = (AggregateConfiguration)Utils.Clone(this.m_revisedAggregateConfiguration); + + return clone; + } + #endregion + + #region Private Fields + private DateTime m_revisedStartTime; + private double m_revisedProcessingInterval; + private AggregateConfiguration m_revisedAggregateConfiguration; + #endregion + } + #endif + #endregion + + #region MonitoringParameters Class + #if (!OPCUA_EXCLUDE_MonitoringParameters) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoringParameters : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoringParameters() + { + 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_clientHandle = (uint)0; + m_samplingInterval = (double)0; + m_filter = null; + m_queueSize = (uint)0; + m_discardOldest = true; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ClientHandle", IsRequired = false, Order = 1)] + public uint ClientHandle + { + get { return m_clientHandle; } + set { m_clientHandle = value; } + } + + /// + [DataMember(Name = "SamplingInterval", IsRequired = false, Order = 2)] + public double SamplingInterval + { + get { return m_samplingInterval; } + set { m_samplingInterval = value; } + } + + /// + [DataMember(Name = "Filter", IsRequired = false, Order = 3)] + public ExtensionObject Filter + { + get { return m_filter; } + set { m_filter = value; } + } + + /// + [DataMember(Name = "QueueSize", IsRequired = false, Order = 4)] + public uint QueueSize + { + get { return m_queueSize; } + set { m_queueSize = value; } + } + + /// + [DataMember(Name = "DiscardOldest", IsRequired = false, Order = 5)] + public bool DiscardOldest + { + get { return m_discardOldest; } + set { m_discardOldest = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoringParameters; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoringParameters_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoringParameters_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("ClientHandle", ClientHandle); + encoder.WriteDouble("SamplingInterval", SamplingInterval); + encoder.WriteExtensionObject("Filter", Filter); + encoder.WriteUInt32("QueueSize", QueueSize); + encoder.WriteBoolean("DiscardOldest", DiscardOldest); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ClientHandle = decoder.ReadUInt32("ClientHandle"); + SamplingInterval = decoder.ReadDouble("SamplingInterval"); + Filter = decoder.ReadExtensionObject("Filter"); + QueueSize = decoder.ReadUInt32("QueueSize"); + DiscardOldest = decoder.ReadBoolean("DiscardOldest"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoringParameters value = encodeable as MonitoringParameters; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_clientHandle, value.m_clientHandle)) return false; + if (!Utils.IsEqual(m_samplingInterval, value.m_samplingInterval)) return false; + if (!Utils.IsEqual(m_filter, value.m_filter)) return false; + if (!Utils.IsEqual(m_queueSize, value.m_queueSize)) return false; + if (!Utils.IsEqual(m_discardOldest, value.m_discardOldest)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoringParameters)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoringParameters clone = (MonitoringParameters)base.MemberwiseClone(); + + clone.m_clientHandle = (uint)Utils.Clone(this.m_clientHandle); + clone.m_samplingInterval = (double)Utils.Clone(this.m_samplingInterval); + clone.m_filter = (ExtensionObject)Utils.Clone(this.m_filter); + clone.m_queueSize = (uint)Utils.Clone(this.m_queueSize); + clone.m_discardOldest = (bool)Utils.Clone(this.m_discardOldest); + + return clone; + } + #endregion + + #region Private Fields + private uint m_clientHandle; + private double m_samplingInterval; + private ExtensionObject m_filter; + private uint m_queueSize; + private bool m_discardOldest; + #endregion + } + #endif + #endregion + + #region MonitoredItemCreateRequest Class + #if (!OPCUA_EXCLUDE_MonitoredItemCreateRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoredItemCreateRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoredItemCreateRequest() + { + 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_itemToMonitor = new ReadValueId(); + m_monitoringMode = MonitoringMode.Disabled; + m_requestedParameters = new MonitoringParameters(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ItemToMonitor", IsRequired = false, Order = 1)] + public ReadValueId ItemToMonitor + { + get + { + return m_itemToMonitor; + } + + set + { + m_itemToMonitor = value; + + if (value == null) + { + m_itemToMonitor = new ReadValueId(); + } + } + } + + /// + [DataMember(Name = "MonitoringMode", IsRequired = false, Order = 2)] + public MonitoringMode MonitoringMode + { + get { return m_monitoringMode; } + set { m_monitoringMode = value; } + } + + /// + /// + /// + [DataMember(Name = "RequestedParameters", IsRequired = false, Order = 3)] + public MonitoringParameters RequestedParameters + { + get + { + return m_requestedParameters; + } + + set + { + m_requestedParameters = value; + + if (value == null) + { + m_requestedParameters = new MonitoringParameters(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoredItemCreateRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoredItemCreateRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoredItemCreateRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ItemToMonitor", ItemToMonitor, typeof(ReadValueId)); + encoder.WriteEnumerated("MonitoringMode", MonitoringMode); + encoder.WriteEncodeable("RequestedParameters", RequestedParameters, typeof(MonitoringParameters)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ItemToMonitor = (ReadValueId)decoder.ReadEncodeable("ItemToMonitor", typeof(ReadValueId)); + MonitoringMode = (MonitoringMode)decoder.ReadEnumerated("MonitoringMode", typeof(MonitoringMode)); + RequestedParameters = (MonitoringParameters)decoder.ReadEncodeable("RequestedParameters", typeof(MonitoringParameters)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoredItemCreateRequest value = encodeable as MonitoredItemCreateRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_itemToMonitor, value.m_itemToMonitor)) return false; + if (!Utils.IsEqual(m_monitoringMode, value.m_monitoringMode)) return false; + if (!Utils.IsEqual(m_requestedParameters, value.m_requestedParameters)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoredItemCreateRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemCreateRequest clone = (MonitoredItemCreateRequest)base.MemberwiseClone(); + + clone.m_itemToMonitor = (ReadValueId)Utils.Clone(this.m_itemToMonitor); + clone.m_monitoringMode = (MonitoringMode)Utils.Clone(this.m_monitoringMode); + clone.m_requestedParameters = (MonitoringParameters)Utils.Clone(this.m_requestedParameters); + + return clone; + } + #endregion + + #region Private Fields + private ReadValueId m_itemToMonitor; + private MonitoringMode m_monitoringMode; + private MonitoringParameters m_requestedParameters; + #endregion + } + + #region MonitoredItemCreateRequestCollection Class + /// + /// A collection of MonitoredItemCreateRequest objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfMonitoredItemCreateRequest", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "MonitoredItemCreateRequest")] + #if !NET_STANDARD + public partial class MonitoredItemCreateRequestCollection : List, ICloneable + #else + public partial class MonitoredItemCreateRequestCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public MonitoredItemCreateRequestCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public MonitoredItemCreateRequestCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public MonitoredItemCreateRequestCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator MonitoredItemCreateRequestCollection(MonitoredItemCreateRequest[] values) + { + if (values != null) + { + return new MonitoredItemCreateRequestCollection(values); + } + + return new MonitoredItemCreateRequestCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator MonitoredItemCreateRequest[](MonitoredItemCreateRequestCollection 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 (MonitoredItemCreateRequestCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemCreateRequestCollection clone = new MonitoredItemCreateRequestCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((MonitoredItemCreateRequest)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region MonitoredItemCreateResult Class + #if (!OPCUA_EXCLUDE_MonitoredItemCreateResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoredItemCreateResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoredItemCreateResult() + { + 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_statusCode = StatusCodes.Good; + m_monitoredItemId = (uint)0; + m_revisedSamplingInterval = (double)0; + m_revisedQueueSize = (uint)0; + m_filterResult = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + [DataMember(Name = "MonitoredItemId", IsRequired = false, Order = 2)] + public uint MonitoredItemId + { + get { return m_monitoredItemId; } + set { m_monitoredItemId = value; } + } + + /// + [DataMember(Name = "RevisedSamplingInterval", IsRequired = false, Order = 3)] + public double RevisedSamplingInterval + { + get { return m_revisedSamplingInterval; } + set { m_revisedSamplingInterval = value; } + } + + /// + [DataMember(Name = "RevisedQueueSize", IsRequired = false, Order = 4)] + public uint RevisedQueueSize + { + get { return m_revisedQueueSize; } + set { m_revisedQueueSize = value; } + } + + /// + [DataMember(Name = "FilterResult", IsRequired = false, Order = 5)] + public ExtensionObject FilterResult + { + get { return m_filterResult; } + set { m_filterResult = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoredItemCreateResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoredItemCreateResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoredItemCreateResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteUInt32("MonitoredItemId", MonitoredItemId); + encoder.WriteDouble("RevisedSamplingInterval", RevisedSamplingInterval); + encoder.WriteUInt32("RevisedQueueSize", RevisedQueueSize); + encoder.WriteExtensionObject("FilterResult", FilterResult); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + MonitoredItemId = decoder.ReadUInt32("MonitoredItemId"); + RevisedSamplingInterval = decoder.ReadDouble("RevisedSamplingInterval"); + RevisedQueueSize = decoder.ReadUInt32("RevisedQueueSize"); + FilterResult = decoder.ReadExtensionObject("FilterResult"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoredItemCreateResult value = encodeable as MonitoredItemCreateResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_monitoredItemId, value.m_monitoredItemId)) return false; + if (!Utils.IsEqual(m_revisedSamplingInterval, value.m_revisedSamplingInterval)) return false; + if (!Utils.IsEqual(m_revisedQueueSize, value.m_revisedQueueSize)) return false; + if (!Utils.IsEqual(m_filterResult, value.m_filterResult)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoredItemCreateResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemCreateResult clone = (MonitoredItemCreateResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_monitoredItemId = (uint)Utils.Clone(this.m_monitoredItemId); + clone.m_revisedSamplingInterval = (double)Utils.Clone(this.m_revisedSamplingInterval); + clone.m_revisedQueueSize = (uint)Utils.Clone(this.m_revisedQueueSize); + clone.m_filterResult = (ExtensionObject)Utils.Clone(this.m_filterResult); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private uint m_monitoredItemId; + private double m_revisedSamplingInterval; + private uint m_revisedQueueSize; + private ExtensionObject m_filterResult; + #endregion + } + + #region MonitoredItemCreateResultCollection Class + /// + /// A collection of MonitoredItemCreateResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfMonitoredItemCreateResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "MonitoredItemCreateResult")] + #if !NET_STANDARD + public partial class MonitoredItemCreateResultCollection : List, ICloneable + #else + public partial class MonitoredItemCreateResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public MonitoredItemCreateResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public MonitoredItemCreateResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public MonitoredItemCreateResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator MonitoredItemCreateResultCollection(MonitoredItemCreateResult[] values) + { + if (values != null) + { + return new MonitoredItemCreateResultCollection(values); + } + + return new MonitoredItemCreateResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator MonitoredItemCreateResult[](MonitoredItemCreateResultCollection 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 (MonitoredItemCreateResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemCreateResultCollection clone = new MonitoredItemCreateResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((MonitoredItemCreateResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region CreateMonitoredItemsRequest Class + #if (!OPCUA_EXCLUDE_CreateMonitoredItemsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CreateMonitoredItemsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CreateMonitoredItemsRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_timestampsToReturn = TimestampsToReturn.Source; + m_itemsToCreate = new MonitoredItemCreateRequestCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "TimestampsToReturn", IsRequired = false, Order = 3)] + public TimestampsToReturn TimestampsToReturn + { + get { return m_timestampsToReturn; } + set { m_timestampsToReturn = value; } + } + + /// + /// + /// + [DataMember(Name = "ItemsToCreate", IsRequired = false, Order = 4)] + public MonitoredItemCreateRequestCollection ItemsToCreate + { + get + { + return m_itemsToCreate; + } + + set + { + m_itemsToCreate = value; + + if (value == null) + { + m_itemsToCreate = new MonitoredItemCreateRequestCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CreateMonitoredItemsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CreateMonitoredItemsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CreateMonitoredItemsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteEnumerated("TimestampsToReturn", TimestampsToReturn); + encoder.WriteEncodeableArray("ItemsToCreate", ItemsToCreate.ToArray(), typeof(MonitoredItemCreateRequest)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + TimestampsToReturn = (TimestampsToReturn)decoder.ReadEnumerated("TimestampsToReturn", typeof(TimestampsToReturn)); + ItemsToCreate = (MonitoredItemCreateRequestCollection)decoder.ReadEncodeableArray("ItemsToCreate", typeof(MonitoredItemCreateRequest)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CreateMonitoredItemsRequest value = encodeable as CreateMonitoredItemsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_timestampsToReturn, value.m_timestampsToReturn)) return false; + if (!Utils.IsEqual(m_itemsToCreate, value.m_itemsToCreate)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CreateMonitoredItemsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CreateMonitoredItemsRequest clone = (CreateMonitoredItemsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_timestampsToReturn = (TimestampsToReturn)Utils.Clone(this.m_timestampsToReturn); + clone.m_itemsToCreate = (MonitoredItemCreateRequestCollection)Utils.Clone(this.m_itemsToCreate); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private TimestampsToReturn m_timestampsToReturn; + private MonitoredItemCreateRequestCollection m_itemsToCreate; + #endregion + } + #endif + #endregion + + #region CreateMonitoredItemsResponse Class + #if (!OPCUA_EXCLUDE_CreateMonitoredItemsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CreateMonitoredItemsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CreateMonitoredItemsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new MonitoredItemCreateResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public MonitoredItemCreateResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new MonitoredItemCreateResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CreateMonitoredItemsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CreateMonitoredItemsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CreateMonitoredItemsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(MonitoredItemCreateResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (MonitoredItemCreateResultCollection)decoder.ReadEncodeableArray("Results", typeof(MonitoredItemCreateResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CreateMonitoredItemsResponse value = encodeable as CreateMonitoredItemsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CreateMonitoredItemsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CreateMonitoredItemsResponse clone = (CreateMonitoredItemsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (MonitoredItemCreateResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private MonitoredItemCreateResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region MonitoredItemModifyRequest Class + #if (!OPCUA_EXCLUDE_MonitoredItemModifyRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoredItemModifyRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoredItemModifyRequest() + { + 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_monitoredItemId = (uint)0; + m_requestedParameters = new MonitoringParameters(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "MonitoredItemId", IsRequired = false, Order = 1)] + public uint MonitoredItemId + { + get { return m_monitoredItemId; } + set { m_monitoredItemId = value; } + } + + /// + /// + /// + [DataMember(Name = "RequestedParameters", IsRequired = false, Order = 2)] + public MonitoringParameters RequestedParameters + { + get + { + return m_requestedParameters; + } + + set + { + m_requestedParameters = value; + + if (value == null) + { + m_requestedParameters = new MonitoringParameters(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoredItemModifyRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoredItemModifyRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoredItemModifyRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("MonitoredItemId", MonitoredItemId); + encoder.WriteEncodeable("RequestedParameters", RequestedParameters, typeof(MonitoringParameters)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + MonitoredItemId = decoder.ReadUInt32("MonitoredItemId"); + RequestedParameters = (MonitoringParameters)decoder.ReadEncodeable("RequestedParameters", typeof(MonitoringParameters)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoredItemModifyRequest value = encodeable as MonitoredItemModifyRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_monitoredItemId, value.m_monitoredItemId)) return false; + if (!Utils.IsEqual(m_requestedParameters, value.m_requestedParameters)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoredItemModifyRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemModifyRequest clone = (MonitoredItemModifyRequest)base.MemberwiseClone(); + + clone.m_monitoredItemId = (uint)Utils.Clone(this.m_monitoredItemId); + clone.m_requestedParameters = (MonitoringParameters)Utils.Clone(this.m_requestedParameters); + + return clone; + } + #endregion + + #region Private Fields + private uint m_monitoredItemId; + private MonitoringParameters m_requestedParameters; + #endregion + } + + #region MonitoredItemModifyRequestCollection Class + /// + /// A collection of MonitoredItemModifyRequest objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfMonitoredItemModifyRequest", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "MonitoredItemModifyRequest")] + #if !NET_STANDARD + public partial class MonitoredItemModifyRequestCollection : List, ICloneable + #else + public partial class MonitoredItemModifyRequestCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public MonitoredItemModifyRequestCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public MonitoredItemModifyRequestCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public MonitoredItemModifyRequestCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator MonitoredItemModifyRequestCollection(MonitoredItemModifyRequest[] values) + { + if (values != null) + { + return new MonitoredItemModifyRequestCollection(values); + } + + return new MonitoredItemModifyRequestCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator MonitoredItemModifyRequest[](MonitoredItemModifyRequestCollection 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 (MonitoredItemModifyRequestCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemModifyRequestCollection clone = new MonitoredItemModifyRequestCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((MonitoredItemModifyRequest)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region MonitoredItemModifyResult Class + #if (!OPCUA_EXCLUDE_MonitoredItemModifyResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoredItemModifyResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoredItemModifyResult() + { + 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_statusCode = StatusCodes.Good; + m_revisedSamplingInterval = (double)0; + m_revisedQueueSize = (uint)0; + m_filterResult = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + [DataMember(Name = "RevisedSamplingInterval", IsRequired = false, Order = 2)] + public double RevisedSamplingInterval + { + get { return m_revisedSamplingInterval; } + set { m_revisedSamplingInterval = value; } + } + + /// + [DataMember(Name = "RevisedQueueSize", IsRequired = false, Order = 3)] + public uint RevisedQueueSize + { + get { return m_revisedQueueSize; } + set { m_revisedQueueSize = value; } + } + + /// + [DataMember(Name = "FilterResult", IsRequired = false, Order = 4)] + public ExtensionObject FilterResult + { + get { return m_filterResult; } + set { m_filterResult = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoredItemModifyResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoredItemModifyResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoredItemModifyResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteDouble("RevisedSamplingInterval", RevisedSamplingInterval); + encoder.WriteUInt32("RevisedQueueSize", RevisedQueueSize); + encoder.WriteExtensionObject("FilterResult", FilterResult); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + RevisedSamplingInterval = decoder.ReadDouble("RevisedSamplingInterval"); + RevisedQueueSize = decoder.ReadUInt32("RevisedQueueSize"); + FilterResult = decoder.ReadExtensionObject("FilterResult"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoredItemModifyResult value = encodeable as MonitoredItemModifyResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_revisedSamplingInterval, value.m_revisedSamplingInterval)) return false; + if (!Utils.IsEqual(m_revisedQueueSize, value.m_revisedQueueSize)) return false; + if (!Utils.IsEqual(m_filterResult, value.m_filterResult)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoredItemModifyResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemModifyResult clone = (MonitoredItemModifyResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_revisedSamplingInterval = (double)Utils.Clone(this.m_revisedSamplingInterval); + clone.m_revisedQueueSize = (uint)Utils.Clone(this.m_revisedQueueSize); + clone.m_filterResult = (ExtensionObject)Utils.Clone(this.m_filterResult); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private double m_revisedSamplingInterval; + private uint m_revisedQueueSize; + private ExtensionObject m_filterResult; + #endregion + } + + #region MonitoredItemModifyResultCollection Class + /// + /// A collection of MonitoredItemModifyResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfMonitoredItemModifyResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "MonitoredItemModifyResult")] + #if !NET_STANDARD + public partial class MonitoredItemModifyResultCollection : List, ICloneable + #else + public partial class MonitoredItemModifyResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public MonitoredItemModifyResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public MonitoredItemModifyResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public MonitoredItemModifyResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator MonitoredItemModifyResultCollection(MonitoredItemModifyResult[] values) + { + if (values != null) + { + return new MonitoredItemModifyResultCollection(values); + } + + return new MonitoredItemModifyResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator MonitoredItemModifyResult[](MonitoredItemModifyResultCollection 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 (MonitoredItemModifyResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemModifyResultCollection clone = new MonitoredItemModifyResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((MonitoredItemModifyResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ModifyMonitoredItemsRequest Class + #if (!OPCUA_EXCLUDE_ModifyMonitoredItemsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ModifyMonitoredItemsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ModifyMonitoredItemsRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_timestampsToReturn = TimestampsToReturn.Source; + m_itemsToModify = new MonitoredItemModifyRequestCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "TimestampsToReturn", IsRequired = false, Order = 3)] + public TimestampsToReturn TimestampsToReturn + { + get { return m_timestampsToReturn; } + set { m_timestampsToReturn = value; } + } + + /// + /// + /// + [DataMember(Name = "ItemsToModify", IsRequired = false, Order = 4)] + public MonitoredItemModifyRequestCollection ItemsToModify + { + get + { + return m_itemsToModify; + } + + set + { + m_itemsToModify = value; + + if (value == null) + { + m_itemsToModify = new MonitoredItemModifyRequestCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ModifyMonitoredItemsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ModifyMonitoredItemsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ModifyMonitoredItemsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteEnumerated("TimestampsToReturn", TimestampsToReturn); + encoder.WriteEncodeableArray("ItemsToModify", ItemsToModify.ToArray(), typeof(MonitoredItemModifyRequest)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + TimestampsToReturn = (TimestampsToReturn)decoder.ReadEnumerated("TimestampsToReturn", typeof(TimestampsToReturn)); + ItemsToModify = (MonitoredItemModifyRequestCollection)decoder.ReadEncodeableArray("ItemsToModify", typeof(MonitoredItemModifyRequest)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ModifyMonitoredItemsRequest value = encodeable as ModifyMonitoredItemsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_timestampsToReturn, value.m_timestampsToReturn)) return false; + if (!Utils.IsEqual(m_itemsToModify, value.m_itemsToModify)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ModifyMonitoredItemsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ModifyMonitoredItemsRequest clone = (ModifyMonitoredItemsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_timestampsToReturn = (TimestampsToReturn)Utils.Clone(this.m_timestampsToReturn); + clone.m_itemsToModify = (MonitoredItemModifyRequestCollection)Utils.Clone(this.m_itemsToModify); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private TimestampsToReturn m_timestampsToReturn; + private MonitoredItemModifyRequestCollection m_itemsToModify; + #endregion + } + #endif + #endregion + + #region ModifyMonitoredItemsResponse Class + #if (!OPCUA_EXCLUDE_ModifyMonitoredItemsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ModifyMonitoredItemsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ModifyMonitoredItemsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new MonitoredItemModifyResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public MonitoredItemModifyResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new MonitoredItemModifyResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ModifyMonitoredItemsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ModifyMonitoredItemsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ModifyMonitoredItemsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(MonitoredItemModifyResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (MonitoredItemModifyResultCollection)decoder.ReadEncodeableArray("Results", typeof(MonitoredItemModifyResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ModifyMonitoredItemsResponse value = encodeable as ModifyMonitoredItemsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ModifyMonitoredItemsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ModifyMonitoredItemsResponse clone = (ModifyMonitoredItemsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (MonitoredItemModifyResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private MonitoredItemModifyResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region SetMonitoringModeRequest Class + #if (!OPCUA_EXCLUDE_SetMonitoringModeRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SetMonitoringModeRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SetMonitoringModeRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_monitoringMode = MonitoringMode.Disabled; + m_monitoredItemIds = new UInt32Collection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "MonitoringMode", IsRequired = false, Order = 3)] + public MonitoringMode MonitoringMode + { + get { return m_monitoringMode; } + set { m_monitoringMode = value; } + } + + /// + /// + /// + [DataMember(Name = "MonitoredItemIds", IsRequired = false, Order = 4)] + public UInt32Collection MonitoredItemIds + { + get + { + return m_monitoredItemIds; + } + + set + { + m_monitoredItemIds = value; + + if (value == null) + { + m_monitoredItemIds = new UInt32Collection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SetMonitoringModeRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SetMonitoringModeRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SetMonitoringModeRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteEnumerated("MonitoringMode", MonitoringMode); + encoder.WriteUInt32Array("MonitoredItemIds", MonitoredItemIds); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + MonitoringMode = (MonitoringMode)decoder.ReadEnumerated("MonitoringMode", typeof(MonitoringMode)); + MonitoredItemIds = decoder.ReadUInt32Array("MonitoredItemIds"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SetMonitoringModeRequest value = encodeable as SetMonitoringModeRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_monitoringMode, value.m_monitoringMode)) return false; + if (!Utils.IsEqual(m_monitoredItemIds, value.m_monitoredItemIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SetMonitoringModeRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SetMonitoringModeRequest clone = (SetMonitoringModeRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_monitoringMode = (MonitoringMode)Utils.Clone(this.m_monitoringMode); + clone.m_monitoredItemIds = (UInt32Collection)Utils.Clone(this.m_monitoredItemIds); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private MonitoringMode m_monitoringMode; + private UInt32Collection m_monitoredItemIds; + #endregion + } + #endif + #endregion + + #region SetMonitoringModeResponse Class + #if (!OPCUA_EXCLUDE_SetMonitoringModeResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SetMonitoringModeResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SetMonitoringModeResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SetMonitoringModeResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SetMonitoringModeResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SetMonitoringModeResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SetMonitoringModeResponse value = encodeable as SetMonitoringModeResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SetMonitoringModeResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SetMonitoringModeResponse clone = (SetMonitoringModeResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region SetTriggeringRequest Class + #if (!OPCUA_EXCLUDE_SetTriggeringRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SetTriggeringRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SetTriggeringRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_triggeringItemId = (uint)0; + m_linksToAdd = new UInt32Collection(); + m_linksToRemove = new UInt32Collection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "TriggeringItemId", IsRequired = false, Order = 3)] + public uint TriggeringItemId + { + get { return m_triggeringItemId; } + set { m_triggeringItemId = value; } + } + + /// + /// + /// + [DataMember(Name = "LinksToAdd", IsRequired = false, Order = 4)] + public UInt32Collection LinksToAdd + { + get + { + return m_linksToAdd; + } + + set + { + m_linksToAdd = value; + + if (value == null) + { + m_linksToAdd = new UInt32Collection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LinksToRemove", IsRequired = false, Order = 5)] + public UInt32Collection LinksToRemove + { + get + { + return m_linksToRemove; + } + + set + { + m_linksToRemove = value; + + if (value == null) + { + m_linksToRemove = new UInt32Collection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SetTriggeringRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SetTriggeringRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SetTriggeringRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteUInt32("TriggeringItemId", TriggeringItemId); + encoder.WriteUInt32Array("LinksToAdd", LinksToAdd); + encoder.WriteUInt32Array("LinksToRemove", LinksToRemove); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + TriggeringItemId = decoder.ReadUInt32("TriggeringItemId"); + LinksToAdd = decoder.ReadUInt32Array("LinksToAdd"); + LinksToRemove = decoder.ReadUInt32Array("LinksToRemove"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SetTriggeringRequest value = encodeable as SetTriggeringRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_triggeringItemId, value.m_triggeringItemId)) return false; + if (!Utils.IsEqual(m_linksToAdd, value.m_linksToAdd)) return false; + if (!Utils.IsEqual(m_linksToRemove, value.m_linksToRemove)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SetTriggeringRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SetTriggeringRequest clone = (SetTriggeringRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_triggeringItemId = (uint)Utils.Clone(this.m_triggeringItemId); + clone.m_linksToAdd = (UInt32Collection)Utils.Clone(this.m_linksToAdd); + clone.m_linksToRemove = (UInt32Collection)Utils.Clone(this.m_linksToRemove); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private uint m_triggeringItemId; + private UInt32Collection m_linksToAdd; + private UInt32Collection m_linksToRemove; + #endregion + } + #endif + #endregion + + #region SetTriggeringResponse Class + #if (!OPCUA_EXCLUDE_SetTriggeringResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SetTriggeringResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SetTriggeringResponse() + { + 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_responseHeader = new ResponseHeader(); + m_addResults = new StatusCodeCollection(); + m_addDiagnosticInfos = new DiagnosticInfoCollection(); + m_removeResults = new StatusCodeCollection(); + m_removeDiagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "AddResults", IsRequired = false, Order = 2)] + public StatusCodeCollection AddResults + { + get + { + return m_addResults; + } + + set + { + m_addResults = value; + + if (value == null) + { + m_addResults = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "AddDiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection AddDiagnosticInfos + { + get + { + return m_addDiagnosticInfos; + } + + set + { + m_addDiagnosticInfos = value; + + if (value == null) + { + m_addDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "RemoveResults", IsRequired = false, Order = 4)] + public StatusCodeCollection RemoveResults + { + get + { + return m_removeResults; + } + + set + { + m_removeResults = value; + + if (value == null) + { + m_removeResults = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "RemoveDiagnosticInfos", IsRequired = false, Order = 5)] + public DiagnosticInfoCollection RemoveDiagnosticInfos + { + get + { + return m_removeDiagnosticInfos; + } + + set + { + m_removeDiagnosticInfos = value; + + if (value == null) + { + m_removeDiagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SetTriggeringResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SetTriggeringResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SetTriggeringResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("AddResults", AddResults); + encoder.WriteDiagnosticInfoArray("AddDiagnosticInfos", AddDiagnosticInfos); + encoder.WriteStatusCodeArray("RemoveResults", RemoveResults); + encoder.WriteDiagnosticInfoArray("RemoveDiagnosticInfos", RemoveDiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + AddResults = decoder.ReadStatusCodeArray("AddResults"); + AddDiagnosticInfos = decoder.ReadDiagnosticInfoArray("AddDiagnosticInfos"); + RemoveResults = decoder.ReadStatusCodeArray("RemoveResults"); + RemoveDiagnosticInfos = decoder.ReadDiagnosticInfoArray("RemoveDiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SetTriggeringResponse value = encodeable as SetTriggeringResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_addResults, value.m_addResults)) return false; + if (!Utils.IsEqual(m_addDiagnosticInfos, value.m_addDiagnosticInfos)) return false; + if (!Utils.IsEqual(m_removeResults, value.m_removeResults)) return false; + if (!Utils.IsEqual(m_removeDiagnosticInfos, value.m_removeDiagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SetTriggeringResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SetTriggeringResponse clone = (SetTriggeringResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_addResults = (StatusCodeCollection)Utils.Clone(this.m_addResults); + clone.m_addDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_addDiagnosticInfos); + clone.m_removeResults = (StatusCodeCollection)Utils.Clone(this.m_removeResults); + clone.m_removeDiagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_removeDiagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_addResults; + private DiagnosticInfoCollection m_addDiagnosticInfos; + private StatusCodeCollection m_removeResults; + private DiagnosticInfoCollection m_removeDiagnosticInfos; + #endregion + } + #endif + #endregion + + #region DeleteMonitoredItemsRequest Class + #if (!OPCUA_EXCLUDE_DeleteMonitoredItemsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteMonitoredItemsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteMonitoredItemsRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_monitoredItemIds = new UInt32Collection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + /// + /// + [DataMember(Name = "MonitoredItemIds", IsRequired = false, Order = 3)] + public UInt32Collection MonitoredItemIds + { + get + { + return m_monitoredItemIds; + } + + set + { + m_monitoredItemIds = value; + + if (value == null) + { + m_monitoredItemIds = new UInt32Collection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteMonitoredItemsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteMonitoredItemsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteMonitoredItemsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteUInt32Array("MonitoredItemIds", MonitoredItemIds); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + MonitoredItemIds = decoder.ReadUInt32Array("MonitoredItemIds"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteMonitoredItemsRequest value = encodeable as DeleteMonitoredItemsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_monitoredItemIds, value.m_monitoredItemIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteMonitoredItemsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteMonitoredItemsRequest clone = (DeleteMonitoredItemsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_monitoredItemIds = (UInt32Collection)Utils.Clone(this.m_monitoredItemIds); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private UInt32Collection m_monitoredItemIds; + #endregion + } + #endif + #endregion + + #region DeleteMonitoredItemsResponse Class + #if (!OPCUA_EXCLUDE_DeleteMonitoredItemsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteMonitoredItemsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteMonitoredItemsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteMonitoredItemsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteMonitoredItemsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteMonitoredItemsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteMonitoredItemsResponse value = encodeable as DeleteMonitoredItemsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteMonitoredItemsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteMonitoredItemsResponse clone = (DeleteMonitoredItemsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region CreateSubscriptionRequest Class + #if (!OPCUA_EXCLUDE_CreateSubscriptionRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CreateSubscriptionRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CreateSubscriptionRequest() + { + 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_requestHeader = new RequestHeader(); + m_requestedPublishingInterval = (double)0; + m_requestedLifetimeCount = (uint)0; + m_requestedMaxKeepAliveCount = (uint)0; + m_maxNotificationsPerPublish = (uint)0; + m_publishingEnabled = true; + m_priority = (byte)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "RequestedPublishingInterval", IsRequired = false, Order = 2)] + public double RequestedPublishingInterval + { + get { return m_requestedPublishingInterval; } + set { m_requestedPublishingInterval = value; } + } + + /// + [DataMember(Name = "RequestedLifetimeCount", IsRequired = false, Order = 3)] + public uint RequestedLifetimeCount + { + get { return m_requestedLifetimeCount; } + set { m_requestedLifetimeCount = value; } + } + + /// + [DataMember(Name = "RequestedMaxKeepAliveCount", IsRequired = false, Order = 4)] + public uint RequestedMaxKeepAliveCount + { + get { return m_requestedMaxKeepAliveCount; } + set { m_requestedMaxKeepAliveCount = value; } + } + + /// + [DataMember(Name = "MaxNotificationsPerPublish", IsRequired = false, Order = 5)] + public uint MaxNotificationsPerPublish + { + get { return m_maxNotificationsPerPublish; } + set { m_maxNotificationsPerPublish = value; } + } + + /// + [DataMember(Name = "PublishingEnabled", IsRequired = false, Order = 6)] + public bool PublishingEnabled + { + get { return m_publishingEnabled; } + set { m_publishingEnabled = value; } + } + + /// + [DataMember(Name = "Priority", IsRequired = false, Order = 7)] + public byte Priority + { + get { return m_priority; } + set { m_priority = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CreateSubscriptionRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CreateSubscriptionRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CreateSubscriptionRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteDouble("RequestedPublishingInterval", RequestedPublishingInterval); + encoder.WriteUInt32("RequestedLifetimeCount", RequestedLifetimeCount); + encoder.WriteUInt32("RequestedMaxKeepAliveCount", RequestedMaxKeepAliveCount); + encoder.WriteUInt32("MaxNotificationsPerPublish", MaxNotificationsPerPublish); + encoder.WriteBoolean("PublishingEnabled", PublishingEnabled); + encoder.WriteByte("Priority", Priority); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + RequestedPublishingInterval = decoder.ReadDouble("RequestedPublishingInterval"); + RequestedLifetimeCount = decoder.ReadUInt32("RequestedLifetimeCount"); + RequestedMaxKeepAliveCount = decoder.ReadUInt32("RequestedMaxKeepAliveCount"); + MaxNotificationsPerPublish = decoder.ReadUInt32("MaxNotificationsPerPublish"); + PublishingEnabled = decoder.ReadBoolean("PublishingEnabled"); + Priority = decoder.ReadByte("Priority"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CreateSubscriptionRequest value = encodeable as CreateSubscriptionRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_requestedPublishingInterval, value.m_requestedPublishingInterval)) return false; + if (!Utils.IsEqual(m_requestedLifetimeCount, value.m_requestedLifetimeCount)) return false; + if (!Utils.IsEqual(m_requestedMaxKeepAliveCount, value.m_requestedMaxKeepAliveCount)) return false; + if (!Utils.IsEqual(m_maxNotificationsPerPublish, value.m_maxNotificationsPerPublish)) return false; + if (!Utils.IsEqual(m_publishingEnabled, value.m_publishingEnabled)) return false; + if (!Utils.IsEqual(m_priority, value.m_priority)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CreateSubscriptionRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CreateSubscriptionRequest clone = (CreateSubscriptionRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_requestedPublishingInterval = (double)Utils.Clone(this.m_requestedPublishingInterval); + clone.m_requestedLifetimeCount = (uint)Utils.Clone(this.m_requestedLifetimeCount); + clone.m_requestedMaxKeepAliveCount = (uint)Utils.Clone(this.m_requestedMaxKeepAliveCount); + clone.m_maxNotificationsPerPublish = (uint)Utils.Clone(this.m_maxNotificationsPerPublish); + clone.m_publishingEnabled = (bool)Utils.Clone(this.m_publishingEnabled); + clone.m_priority = (byte)Utils.Clone(this.m_priority); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private double m_requestedPublishingInterval; + private uint m_requestedLifetimeCount; + private uint m_requestedMaxKeepAliveCount; + private uint m_maxNotificationsPerPublish; + private bool m_publishingEnabled; + private byte m_priority; + #endregion + } + #endif + #endregion + + #region CreateSubscriptionResponse Class + #if (!OPCUA_EXCLUDE_CreateSubscriptionResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class CreateSubscriptionResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public CreateSubscriptionResponse() + { + 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_responseHeader = new ResponseHeader(); + m_subscriptionId = (uint)0; + m_revisedPublishingInterval = (double)0; + m_revisedLifetimeCount = (uint)0; + m_revisedMaxKeepAliveCount = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "RevisedPublishingInterval", IsRequired = false, Order = 3)] + public double RevisedPublishingInterval + { + get { return m_revisedPublishingInterval; } + set { m_revisedPublishingInterval = value; } + } + + /// + [DataMember(Name = "RevisedLifetimeCount", IsRequired = false, Order = 4)] + public uint RevisedLifetimeCount + { + get { return m_revisedLifetimeCount; } + set { m_revisedLifetimeCount = value; } + } + + /// + [DataMember(Name = "RevisedMaxKeepAliveCount", IsRequired = false, Order = 5)] + public uint RevisedMaxKeepAliveCount + { + get { return m_revisedMaxKeepAliveCount; } + set { m_revisedMaxKeepAliveCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.CreateSubscriptionResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.CreateSubscriptionResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.CreateSubscriptionResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteDouble("RevisedPublishingInterval", RevisedPublishingInterval); + encoder.WriteUInt32("RevisedLifetimeCount", RevisedLifetimeCount); + encoder.WriteUInt32("RevisedMaxKeepAliveCount", RevisedMaxKeepAliveCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + RevisedPublishingInterval = decoder.ReadDouble("RevisedPublishingInterval"); + RevisedLifetimeCount = decoder.ReadUInt32("RevisedLifetimeCount"); + RevisedMaxKeepAliveCount = decoder.ReadUInt32("RevisedMaxKeepAliveCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + CreateSubscriptionResponse value = encodeable as CreateSubscriptionResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_revisedPublishingInterval, value.m_revisedPublishingInterval)) return false; + if (!Utils.IsEqual(m_revisedLifetimeCount, value.m_revisedLifetimeCount)) return false; + if (!Utils.IsEqual(m_revisedMaxKeepAliveCount, value.m_revisedMaxKeepAliveCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (CreateSubscriptionResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + CreateSubscriptionResponse clone = (CreateSubscriptionResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_revisedPublishingInterval = (double)Utils.Clone(this.m_revisedPublishingInterval); + clone.m_revisedLifetimeCount = (uint)Utils.Clone(this.m_revisedLifetimeCount); + clone.m_revisedMaxKeepAliveCount = (uint)Utils.Clone(this.m_revisedMaxKeepAliveCount); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private uint m_subscriptionId; + private double m_revisedPublishingInterval; + private uint m_revisedLifetimeCount; + private uint m_revisedMaxKeepAliveCount; + #endregion + } + #endif + #endregion + + #region ModifySubscriptionRequest Class + #if (!OPCUA_EXCLUDE_ModifySubscriptionRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ModifySubscriptionRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ModifySubscriptionRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_requestedPublishingInterval = (double)0; + m_requestedLifetimeCount = (uint)0; + m_requestedMaxKeepAliveCount = (uint)0; + m_maxNotificationsPerPublish = (uint)0; + m_priority = (byte)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "RequestedPublishingInterval", IsRequired = false, Order = 3)] + public double RequestedPublishingInterval + { + get { return m_requestedPublishingInterval; } + set { m_requestedPublishingInterval = value; } + } + + /// + [DataMember(Name = "RequestedLifetimeCount", IsRequired = false, Order = 4)] + public uint RequestedLifetimeCount + { + get { return m_requestedLifetimeCount; } + set { m_requestedLifetimeCount = value; } + } + + /// + [DataMember(Name = "RequestedMaxKeepAliveCount", IsRequired = false, Order = 5)] + public uint RequestedMaxKeepAliveCount + { + get { return m_requestedMaxKeepAliveCount; } + set { m_requestedMaxKeepAliveCount = value; } + } + + /// + [DataMember(Name = "MaxNotificationsPerPublish", IsRequired = false, Order = 6)] + public uint MaxNotificationsPerPublish + { + get { return m_maxNotificationsPerPublish; } + set { m_maxNotificationsPerPublish = value; } + } + + /// + [DataMember(Name = "Priority", IsRequired = false, Order = 7)] + public byte Priority + { + get { return m_priority; } + set { m_priority = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ModifySubscriptionRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ModifySubscriptionRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ModifySubscriptionRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteDouble("RequestedPublishingInterval", RequestedPublishingInterval); + encoder.WriteUInt32("RequestedLifetimeCount", RequestedLifetimeCount); + encoder.WriteUInt32("RequestedMaxKeepAliveCount", RequestedMaxKeepAliveCount); + encoder.WriteUInt32("MaxNotificationsPerPublish", MaxNotificationsPerPublish); + encoder.WriteByte("Priority", Priority); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + RequestedPublishingInterval = decoder.ReadDouble("RequestedPublishingInterval"); + RequestedLifetimeCount = decoder.ReadUInt32("RequestedLifetimeCount"); + RequestedMaxKeepAliveCount = decoder.ReadUInt32("RequestedMaxKeepAliveCount"); + MaxNotificationsPerPublish = decoder.ReadUInt32("MaxNotificationsPerPublish"); + Priority = decoder.ReadByte("Priority"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ModifySubscriptionRequest value = encodeable as ModifySubscriptionRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_requestedPublishingInterval, value.m_requestedPublishingInterval)) return false; + if (!Utils.IsEqual(m_requestedLifetimeCount, value.m_requestedLifetimeCount)) return false; + if (!Utils.IsEqual(m_requestedMaxKeepAliveCount, value.m_requestedMaxKeepAliveCount)) return false; + if (!Utils.IsEqual(m_maxNotificationsPerPublish, value.m_maxNotificationsPerPublish)) return false; + if (!Utils.IsEqual(m_priority, value.m_priority)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ModifySubscriptionRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ModifySubscriptionRequest clone = (ModifySubscriptionRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_requestedPublishingInterval = (double)Utils.Clone(this.m_requestedPublishingInterval); + clone.m_requestedLifetimeCount = (uint)Utils.Clone(this.m_requestedLifetimeCount); + clone.m_requestedMaxKeepAliveCount = (uint)Utils.Clone(this.m_requestedMaxKeepAliveCount); + clone.m_maxNotificationsPerPublish = (uint)Utils.Clone(this.m_maxNotificationsPerPublish); + clone.m_priority = (byte)Utils.Clone(this.m_priority); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private double m_requestedPublishingInterval; + private uint m_requestedLifetimeCount; + private uint m_requestedMaxKeepAliveCount; + private uint m_maxNotificationsPerPublish; + private byte m_priority; + #endregion + } + #endif + #endregion + + #region ModifySubscriptionResponse Class + #if (!OPCUA_EXCLUDE_ModifySubscriptionResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ModifySubscriptionResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ModifySubscriptionResponse() + { + 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_responseHeader = new ResponseHeader(); + m_revisedPublishingInterval = (double)0; + m_revisedLifetimeCount = (uint)0; + m_revisedMaxKeepAliveCount = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "RevisedPublishingInterval", IsRequired = false, Order = 2)] + public double RevisedPublishingInterval + { + get { return m_revisedPublishingInterval; } + set { m_revisedPublishingInterval = value; } + } + + /// + [DataMember(Name = "RevisedLifetimeCount", IsRequired = false, Order = 3)] + public uint RevisedLifetimeCount + { + get { return m_revisedLifetimeCount; } + set { m_revisedLifetimeCount = value; } + } + + /// + [DataMember(Name = "RevisedMaxKeepAliveCount", IsRequired = false, Order = 4)] + public uint RevisedMaxKeepAliveCount + { + get { return m_revisedMaxKeepAliveCount; } + set { m_revisedMaxKeepAliveCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ModifySubscriptionResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ModifySubscriptionResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ModifySubscriptionResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteDouble("RevisedPublishingInterval", RevisedPublishingInterval); + encoder.WriteUInt32("RevisedLifetimeCount", RevisedLifetimeCount); + encoder.WriteUInt32("RevisedMaxKeepAliveCount", RevisedMaxKeepAliveCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + RevisedPublishingInterval = decoder.ReadDouble("RevisedPublishingInterval"); + RevisedLifetimeCount = decoder.ReadUInt32("RevisedLifetimeCount"); + RevisedMaxKeepAliveCount = decoder.ReadUInt32("RevisedMaxKeepAliveCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ModifySubscriptionResponse value = encodeable as ModifySubscriptionResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_revisedPublishingInterval, value.m_revisedPublishingInterval)) return false; + if (!Utils.IsEqual(m_revisedLifetimeCount, value.m_revisedLifetimeCount)) return false; + if (!Utils.IsEqual(m_revisedMaxKeepAliveCount, value.m_revisedMaxKeepAliveCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ModifySubscriptionResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ModifySubscriptionResponse clone = (ModifySubscriptionResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_revisedPublishingInterval = (double)Utils.Clone(this.m_revisedPublishingInterval); + clone.m_revisedLifetimeCount = (uint)Utils.Clone(this.m_revisedLifetimeCount); + clone.m_revisedMaxKeepAliveCount = (uint)Utils.Clone(this.m_revisedMaxKeepAliveCount); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private double m_revisedPublishingInterval; + private uint m_revisedLifetimeCount; + private uint m_revisedMaxKeepAliveCount; + #endregion + } + #endif + #endregion + + #region SetPublishingModeRequest Class + #if (!OPCUA_EXCLUDE_SetPublishingModeRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SetPublishingModeRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SetPublishingModeRequest() + { + 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_requestHeader = new RequestHeader(); + m_publishingEnabled = true; + m_subscriptionIds = new UInt32Collection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "PublishingEnabled", IsRequired = false, Order = 2)] + public bool PublishingEnabled + { + get { return m_publishingEnabled; } + set { m_publishingEnabled = value; } + } + + /// + /// + /// + [DataMember(Name = "SubscriptionIds", IsRequired = false, Order = 3)] + public UInt32Collection SubscriptionIds + { + get + { + return m_subscriptionIds; + } + + set + { + m_subscriptionIds = value; + + if (value == null) + { + m_subscriptionIds = new UInt32Collection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SetPublishingModeRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SetPublishingModeRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SetPublishingModeRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteBoolean("PublishingEnabled", PublishingEnabled); + encoder.WriteUInt32Array("SubscriptionIds", SubscriptionIds); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + PublishingEnabled = decoder.ReadBoolean("PublishingEnabled"); + SubscriptionIds = decoder.ReadUInt32Array("SubscriptionIds"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SetPublishingModeRequest value = encodeable as SetPublishingModeRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_publishingEnabled, value.m_publishingEnabled)) return false; + if (!Utils.IsEqual(m_subscriptionIds, value.m_subscriptionIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SetPublishingModeRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SetPublishingModeRequest clone = (SetPublishingModeRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_publishingEnabled = (bool)Utils.Clone(this.m_publishingEnabled); + clone.m_subscriptionIds = (UInt32Collection)Utils.Clone(this.m_subscriptionIds); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private bool m_publishingEnabled; + private UInt32Collection m_subscriptionIds; + #endregion + } + #endif + #endregion + + #region SetPublishingModeResponse Class + #if (!OPCUA_EXCLUDE_SetPublishingModeResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SetPublishingModeResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SetPublishingModeResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SetPublishingModeResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SetPublishingModeResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SetPublishingModeResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SetPublishingModeResponse value = encodeable as SetPublishingModeResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SetPublishingModeResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SetPublishingModeResponse clone = (SetPublishingModeResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region NotificationMessage Class + #if (!OPCUA_EXCLUDE_NotificationMessage) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NotificationMessage : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NotificationMessage() + { + 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_sequenceNumber = (uint)0; + m_publishTime = DateTime.MinValue; + m_notificationData = new ExtensionObjectCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SequenceNumber", IsRequired = false, Order = 1)] + public uint SequenceNumber + { + get { return m_sequenceNumber; } + set { m_sequenceNumber = value; } + } + + /// + [DataMember(Name = "PublishTime", IsRequired = false, Order = 2)] + public DateTime PublishTime + { + get { return m_publishTime; } + set { m_publishTime = value; } + } + + /// + /// + /// + [DataMember(Name = "NotificationData", IsRequired = false, Order = 3)] + public ExtensionObjectCollection NotificationData + { + get + { + return m_notificationData; + } + + set + { + m_notificationData = value; + + if (value == null) + { + m_notificationData = new ExtensionObjectCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NotificationMessage; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NotificationMessage_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NotificationMessage_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("SequenceNumber", SequenceNumber); + encoder.WriteDateTime("PublishTime", PublishTime); + encoder.WriteExtensionObjectArray("NotificationData", NotificationData); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SequenceNumber = decoder.ReadUInt32("SequenceNumber"); + PublishTime = decoder.ReadDateTime("PublishTime"); + NotificationData = decoder.ReadExtensionObjectArray("NotificationData"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NotificationMessage value = encodeable as NotificationMessage; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_sequenceNumber, value.m_sequenceNumber)) return false; + if (!Utils.IsEqual(m_publishTime, value.m_publishTime)) return false; + if (!Utils.IsEqual(m_notificationData, value.m_notificationData)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NotificationMessage)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NotificationMessage clone = (NotificationMessage)base.MemberwiseClone(); + + clone.m_sequenceNumber = (uint)Utils.Clone(this.m_sequenceNumber); + clone.m_publishTime = (DateTime)Utils.Clone(this.m_publishTime); + clone.m_notificationData = (ExtensionObjectCollection)Utils.Clone(this.m_notificationData); + + return clone; + } + #endregion + + #region Private Fields + private uint m_sequenceNumber; + private DateTime m_publishTime; + private ExtensionObjectCollection m_notificationData; + #endregion + } + #endif + #endregion + + #region NotificationData Class + #if (!OPCUA_EXCLUDE_NotificationData) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NotificationData : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NotificationData() + { + Initialize(); + } + + /// + /// Called by the .NET framework during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public Properties + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NotificationData; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NotificationData_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NotificationData_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NotificationData value = encodeable as NotificationData; + + if (value == null) + { + return false; + } + + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NotificationData)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NotificationData clone = (NotificationData)base.MemberwiseClone(); + + + return clone; + } + #endregion + + #region Private Fields + #endregion + } + #endif + #endregion + + #region DataChangeNotification Class + #if (!OPCUA_EXCLUDE_DataChangeNotification) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DataChangeNotification : NotificationData + { + #region Constructors + /// + /// The default constructor. + /// + public DataChangeNotification() + { + 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_monitoredItems = new MonitoredItemNotificationCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "MonitoredItems", IsRequired = false, Order = 1)] + public MonitoredItemNotificationCollection MonitoredItems + { + get + { + return m_monitoredItems; + } + + set + { + m_monitoredItems = value; + + if (value == null) + { + m_monitoredItems = new MonitoredItemNotificationCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 2)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.DataChangeNotification; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DataChangeNotification_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DataChangeNotification_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("MonitoredItems", MonitoredItems.ToArray(), typeof(MonitoredItemNotification)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + MonitoredItems = (MonitoredItemNotificationCollection)decoder.ReadEncodeableArray("MonitoredItems", typeof(MonitoredItemNotification)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DataChangeNotification value = encodeable as DataChangeNotification; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_monitoredItems, value.m_monitoredItems)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (DataChangeNotification)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DataChangeNotification clone = (DataChangeNotification)base.MemberwiseClone(); + + clone.m_monitoredItems = (MonitoredItemNotificationCollection)Utils.Clone(this.m_monitoredItems); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private MonitoredItemNotificationCollection m_monitoredItems; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region MonitoredItemNotification Class + #if (!OPCUA_EXCLUDE_MonitoredItemNotification) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class MonitoredItemNotification : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public MonitoredItemNotification() + { + 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_clientHandle = (uint)0; + m_value = new DataValue(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ClientHandle", IsRequired = false, Order = 1)] + public uint ClientHandle + { + get { return m_clientHandle; } + set { m_clientHandle = value; } + } + + /// + [DataMember(Name = "Value", IsRequired = false, Order = 2)] + public DataValue Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.MonitoredItemNotification; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.MonitoredItemNotification_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.MonitoredItemNotification_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("ClientHandle", ClientHandle); + encoder.WriteDataValue("Value", Value); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ClientHandle = decoder.ReadUInt32("ClientHandle"); + Value = decoder.ReadDataValue("Value"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + MonitoredItemNotification value = encodeable as MonitoredItemNotification; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_clientHandle, value.m_clientHandle)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (MonitoredItemNotification)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemNotification clone = (MonitoredItemNotification)base.MemberwiseClone(); + + clone.m_clientHandle = (uint)Utils.Clone(this.m_clientHandle); + clone.m_value = (DataValue)Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private uint m_clientHandle; + private DataValue m_value; + #endregion + } + + #region MonitoredItemNotificationCollection Class + /// + /// A collection of MonitoredItemNotification objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfMonitoredItemNotification", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "MonitoredItemNotification")] + #if !NET_STANDARD + public partial class MonitoredItemNotificationCollection : List, ICloneable + #else + public partial class MonitoredItemNotificationCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public MonitoredItemNotificationCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public MonitoredItemNotificationCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public MonitoredItemNotificationCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator MonitoredItemNotificationCollection(MonitoredItemNotification[] values) + { + if (values != null) + { + return new MonitoredItemNotificationCollection(values); + } + + return new MonitoredItemNotificationCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator MonitoredItemNotification[](MonitoredItemNotificationCollection 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 (MonitoredItemNotificationCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + MonitoredItemNotificationCollection clone = new MonitoredItemNotificationCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((MonitoredItemNotification)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EventNotificationList Class + #if (!OPCUA_EXCLUDE_EventNotificationList) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EventNotificationList : NotificationData + { + #region Constructors + /// + /// The default constructor. + /// + public EventNotificationList() + { + 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_events = new EventFieldListCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "Events", IsRequired = false, Order = 1)] + public EventFieldListCollection Events + { + get + { + return m_events; + } + + set + { + m_events = value; + + if (value == null) + { + m_events = new EventFieldListCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.EventNotificationList; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EventNotificationList_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EventNotificationList_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeableArray("Events", Events.ToArray(), typeof(EventFieldList)); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Events = (EventFieldListCollection)decoder.ReadEncodeableArray("Events", typeof(EventFieldList)); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EventNotificationList value = encodeable as EventNotificationList; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_events, value.m_events)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (EventNotificationList)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EventNotificationList clone = (EventNotificationList)base.MemberwiseClone(); + + clone.m_events = (EventFieldListCollection)Utils.Clone(this.m_events); + + return clone; + } + #endregion + + #region Private Fields + private EventFieldListCollection m_events; + #endregion + } + #endif + #endregion + + #region EventFieldList Class + #if (!OPCUA_EXCLUDE_EventFieldList) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EventFieldList : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EventFieldList() + { + 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_clientHandle = (uint)0; + m_eventFields = new VariantCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ClientHandle", IsRequired = false, Order = 1)] + public uint ClientHandle + { + get { return m_clientHandle; } + set { m_clientHandle = value; } + } + + /// + /// + /// + [DataMember(Name = "EventFields", IsRequired = false, Order = 2)] + public VariantCollection EventFields + { + get + { + return m_eventFields; + } + + set + { + m_eventFields = value; + + if (value == null) + { + m_eventFields = new VariantCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EventFieldList; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EventFieldList_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EventFieldList_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("ClientHandle", ClientHandle); + encoder.WriteVariantArray("EventFields", EventFields); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ClientHandle = decoder.ReadUInt32("ClientHandle"); + EventFields = decoder.ReadVariantArray("EventFields"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EventFieldList value = encodeable as EventFieldList; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_clientHandle, value.m_clientHandle)) return false; + if (!Utils.IsEqual(m_eventFields, value.m_eventFields)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EventFieldList)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EventFieldList clone = (EventFieldList)base.MemberwiseClone(); + + clone.m_clientHandle = (uint)Utils.Clone(this.m_clientHandle); + clone.m_eventFields = (VariantCollection)Utils.Clone(this.m_eventFields); + + return clone; + } + #endregion + + #region Private Fields + private uint m_clientHandle; + private VariantCollection m_eventFields; + #endregion + } + + #region EventFieldListCollection Class + /// + /// A collection of EventFieldList objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEventFieldList", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EventFieldList")] + #if !NET_STANDARD + public partial class EventFieldListCollection : List, ICloneable + #else + public partial class EventFieldListCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EventFieldListCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EventFieldListCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EventFieldListCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EventFieldListCollection(EventFieldList[] values) + { + if (values != null) + { + return new EventFieldListCollection(values); + } + + return new EventFieldListCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EventFieldList[](EventFieldListCollection 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 (EventFieldListCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EventFieldListCollection clone = new EventFieldListCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EventFieldList)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region HistoryEventFieldList Class + #if (!OPCUA_EXCLUDE_HistoryEventFieldList) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class HistoryEventFieldList : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public HistoryEventFieldList() + { + 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_eventFields = new VariantCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "EventFields", IsRequired = false, Order = 1)] + public VariantCollection EventFields + { + get + { + return m_eventFields; + } + + set + { + m_eventFields = value; + + if (value == null) + { + m_eventFields = new VariantCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.HistoryEventFieldList; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.HistoryEventFieldList_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.HistoryEventFieldList_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteVariantArray("EventFields", EventFields); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EventFields = decoder.ReadVariantArray("EventFields"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + HistoryEventFieldList value = encodeable as HistoryEventFieldList; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_eventFields, value.m_eventFields)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (HistoryEventFieldList)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + HistoryEventFieldList clone = (HistoryEventFieldList)base.MemberwiseClone(); + + clone.m_eventFields = (VariantCollection)Utils.Clone(this.m_eventFields); + + return clone; + } + #endregion + + #region Private Fields + private VariantCollection m_eventFields; + #endregion + } + + #region HistoryEventFieldListCollection Class + /// + /// A collection of HistoryEventFieldList objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfHistoryEventFieldList", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "HistoryEventFieldList")] + #if !NET_STANDARD + public partial class HistoryEventFieldListCollection : List, ICloneable + #else + public partial class HistoryEventFieldListCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public HistoryEventFieldListCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public HistoryEventFieldListCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public HistoryEventFieldListCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator HistoryEventFieldListCollection(HistoryEventFieldList[] values) + { + if (values != null) + { + return new HistoryEventFieldListCollection(values); + } + + return new HistoryEventFieldListCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator HistoryEventFieldList[](HistoryEventFieldListCollection 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 (HistoryEventFieldListCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + HistoryEventFieldListCollection clone = new HistoryEventFieldListCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((HistoryEventFieldList)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region StatusChangeNotification Class + #if (!OPCUA_EXCLUDE_StatusChangeNotification) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class StatusChangeNotification : NotificationData + { + #region Constructors + /// + /// The default constructor. + /// + public StatusChangeNotification() + { + 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_status = StatusCodes.Good; + m_diagnosticInfo = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Status", IsRequired = false, Order = 1)] + public StatusCode Status + { + get { return m_status; } + set { m_status = value; } + } + + /// + [DataMember(Name = "DiagnosticInfo", IsRequired = false, Order = 2)] + public DiagnosticInfo DiagnosticInfo + { + get { return m_diagnosticInfo; } + set { m_diagnosticInfo = value; } + } + #endregion + + #region IEncodeable Members + /// + public override ExpandedNodeId TypeId + { + get { return DataTypeIds.StatusChangeNotification; } + } + + /// + public override ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.StatusChangeNotification_Encoding_DefaultBinary; } + } + + /// + public override ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.StatusChangeNotification_Encoding_DefaultXml; } + } + + /// + public override void Encode(IEncoder encoder) + { + base.Encode(encoder); + + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("Status", Status); + encoder.WriteDiagnosticInfo("DiagnosticInfo", DiagnosticInfo); + + encoder.PopNamespace(); + } + + /// + public override void Decode(IDecoder decoder) + { + base.Decode(decoder); + + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Status = decoder.ReadStatusCode("Status"); + DiagnosticInfo = decoder.ReadDiagnosticInfo("DiagnosticInfo"); + + decoder.PopNamespace(); + } + + /// + public override bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + StatusChangeNotification value = encodeable as StatusChangeNotification; + + if (value == null) + { + return false; + } + + if (!base.IsEqual(encodeable)) return false; + if (!Utils.IsEqual(m_status, value.m_status)) return false; + if (!Utils.IsEqual(m_diagnosticInfo, value.m_diagnosticInfo)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public override object Clone() + { + return (StatusChangeNotification)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + StatusChangeNotification clone = (StatusChangeNotification)base.MemberwiseClone(); + + clone.m_status = (StatusCode)Utils.Clone(this.m_status); + clone.m_diagnosticInfo = (DiagnosticInfo)Utils.Clone(this.m_diagnosticInfo); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_status; + private DiagnosticInfo m_diagnosticInfo; + #endregion + } + #endif + #endregion + + #region SubscriptionAcknowledgement Class + #if (!OPCUA_EXCLUDE_SubscriptionAcknowledgement) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SubscriptionAcknowledgement : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SubscriptionAcknowledgement() + { + 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_subscriptionId = (uint)0; + m_sequenceNumber = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 1)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "SequenceNumber", IsRequired = false, Order = 2)] + public uint SequenceNumber + { + get { return m_sequenceNumber; } + set { m_sequenceNumber = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SubscriptionAcknowledgement; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SubscriptionAcknowledgement_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SubscriptionAcknowledgement_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteUInt32("SequenceNumber", SequenceNumber); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + SequenceNumber = decoder.ReadUInt32("SequenceNumber"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SubscriptionAcknowledgement value = encodeable as SubscriptionAcknowledgement; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_sequenceNumber, value.m_sequenceNumber)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SubscriptionAcknowledgement)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SubscriptionAcknowledgement clone = (SubscriptionAcknowledgement)base.MemberwiseClone(); + + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_sequenceNumber = (uint)Utils.Clone(this.m_sequenceNumber); + + return clone; + } + #endregion + + #region Private Fields + private uint m_subscriptionId; + private uint m_sequenceNumber; + #endregion + } + + #region SubscriptionAcknowledgementCollection Class + /// + /// A collection of SubscriptionAcknowledgement objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSubscriptionAcknowledgement", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SubscriptionAcknowledgement")] + #if !NET_STANDARD + public partial class SubscriptionAcknowledgementCollection : List, ICloneable + #else + public partial class SubscriptionAcknowledgementCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SubscriptionAcknowledgementCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SubscriptionAcknowledgementCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SubscriptionAcknowledgementCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SubscriptionAcknowledgementCollection(SubscriptionAcknowledgement[] values) + { + if (values != null) + { + return new SubscriptionAcknowledgementCollection(values); + } + + return new SubscriptionAcknowledgementCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SubscriptionAcknowledgement[](SubscriptionAcknowledgementCollection 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 (SubscriptionAcknowledgementCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SubscriptionAcknowledgementCollection clone = new SubscriptionAcknowledgementCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SubscriptionAcknowledgement)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region PublishRequest Class + #if (!OPCUA_EXCLUDE_PublishRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PublishRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionAcknowledgements = new SubscriptionAcknowledgementCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SubscriptionAcknowledgements", IsRequired = false, Order = 2)] + public SubscriptionAcknowledgementCollection SubscriptionAcknowledgements + { + get + { + return m_subscriptionAcknowledgements; + } + + set + { + m_subscriptionAcknowledgements = value; + + if (value == null) + { + m_subscriptionAcknowledgements = new SubscriptionAcknowledgementCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteEncodeableArray("SubscriptionAcknowledgements", SubscriptionAcknowledgements.ToArray(), typeof(SubscriptionAcknowledgement)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionAcknowledgements = (SubscriptionAcknowledgementCollection)decoder.ReadEncodeableArray("SubscriptionAcknowledgements", typeof(SubscriptionAcknowledgement)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishRequest value = encodeable as PublishRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionAcknowledgements, value.m_subscriptionAcknowledgements)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PublishRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishRequest clone = (PublishRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionAcknowledgements = (SubscriptionAcknowledgementCollection)Utils.Clone(this.m_subscriptionAcknowledgements); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private SubscriptionAcknowledgementCollection m_subscriptionAcknowledgements; + #endregion + } + #endif + #endregion + + #region PublishResponse Class + #if (!OPCUA_EXCLUDE_PublishResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class PublishResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public PublishResponse() + { + 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_responseHeader = new ResponseHeader(); + m_subscriptionId = (uint)0; + m_availableSequenceNumbers = new UInt32Collection(); + m_moreNotifications = true; + m_notificationMessage = new NotificationMessage(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + /// + /// + [DataMember(Name = "AvailableSequenceNumbers", IsRequired = false, Order = 3)] + public UInt32Collection AvailableSequenceNumbers + { + get + { + return m_availableSequenceNumbers; + } + + set + { + m_availableSequenceNumbers = value; + + if (value == null) + { + m_availableSequenceNumbers = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "MoreNotifications", IsRequired = false, Order = 4)] + public bool MoreNotifications + { + get { return m_moreNotifications; } + set { m_moreNotifications = value; } + } + + /// + /// + /// + [DataMember(Name = "NotificationMessage", IsRequired = false, Order = 5)] + public NotificationMessage NotificationMessage + { + get + { + return m_notificationMessage; + } + + set + { + m_notificationMessage = value; + + if (value == null) + { + m_notificationMessage = new NotificationMessage(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 6)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 7)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.PublishResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.PublishResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.PublishResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteUInt32Array("AvailableSequenceNumbers", AvailableSequenceNumbers); + encoder.WriteBoolean("MoreNotifications", MoreNotifications); + encoder.WriteEncodeable("NotificationMessage", NotificationMessage, typeof(NotificationMessage)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + AvailableSequenceNumbers = decoder.ReadUInt32Array("AvailableSequenceNumbers"); + MoreNotifications = decoder.ReadBoolean("MoreNotifications"); + NotificationMessage = (NotificationMessage)decoder.ReadEncodeable("NotificationMessage", typeof(NotificationMessage)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + PublishResponse value = encodeable as PublishResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_availableSequenceNumbers, value.m_availableSequenceNumbers)) return false; + if (!Utils.IsEqual(m_moreNotifications, value.m_moreNotifications)) return false; + if (!Utils.IsEqual(m_notificationMessage, value.m_notificationMessage)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (PublishResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + PublishResponse clone = (PublishResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_availableSequenceNumbers = (UInt32Collection)Utils.Clone(this.m_availableSequenceNumbers); + clone.m_moreNotifications = (bool)Utils.Clone(this.m_moreNotifications); + clone.m_notificationMessage = (NotificationMessage)Utils.Clone(this.m_notificationMessage); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private uint m_subscriptionId; + private UInt32Collection m_availableSequenceNumbers; + private bool m_moreNotifications; + private NotificationMessage m_notificationMessage; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region RepublishRequest Class + #if (!OPCUA_EXCLUDE_RepublishRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RepublishRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RepublishRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionId = (uint)0; + m_retransmitSequenceNumber = (uint)0; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "RetransmitSequenceNumber", IsRequired = false, Order = 3)] + public uint RetransmitSequenceNumber + { + get { return m_retransmitSequenceNumber; } + set { m_retransmitSequenceNumber = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RepublishRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RepublishRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RepublishRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteUInt32("RetransmitSequenceNumber", RetransmitSequenceNumber); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + RetransmitSequenceNumber = decoder.ReadUInt32("RetransmitSequenceNumber"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RepublishRequest value = encodeable as RepublishRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_retransmitSequenceNumber, value.m_retransmitSequenceNumber)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RepublishRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RepublishRequest clone = (RepublishRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_retransmitSequenceNumber = (uint)Utils.Clone(this.m_retransmitSequenceNumber); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private uint m_subscriptionId; + private uint m_retransmitSequenceNumber; + #endregion + } + #endif + #endregion + + #region RepublishResponse Class + #if (!OPCUA_EXCLUDE_RepublishResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RepublishResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RepublishResponse() + { + 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_responseHeader = new ResponseHeader(); + m_notificationMessage = new NotificationMessage(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "NotificationMessage", IsRequired = false, Order = 2)] + public NotificationMessage NotificationMessage + { + get + { + return m_notificationMessage; + } + + set + { + m_notificationMessage = value; + + if (value == null) + { + m_notificationMessage = new NotificationMessage(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RepublishResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RepublishResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RepublishResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeable("NotificationMessage", NotificationMessage, typeof(NotificationMessage)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + NotificationMessage = (NotificationMessage)decoder.ReadEncodeable("NotificationMessage", typeof(NotificationMessage)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RepublishResponse value = encodeable as RepublishResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_notificationMessage, value.m_notificationMessage)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RepublishResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RepublishResponse clone = (RepublishResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_notificationMessage = (NotificationMessage)Utils.Clone(this.m_notificationMessage); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private NotificationMessage m_notificationMessage; + #endregion + } + #endif + #endregion + + #region TransferResult Class + #if (!OPCUA_EXCLUDE_TransferResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TransferResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TransferResult() + { + 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_statusCode = StatusCodes.Good; + m_availableSequenceNumbers = new UInt32Collection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// + /// + [DataMember(Name = "AvailableSequenceNumbers", IsRequired = false, Order = 2)] + public UInt32Collection AvailableSequenceNumbers + { + get + { + return m_availableSequenceNumbers; + } + + set + { + m_availableSequenceNumbers = value; + + if (value == null) + { + m_availableSequenceNumbers = new UInt32Collection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TransferResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TransferResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TransferResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteUInt32Array("AvailableSequenceNumbers", AvailableSequenceNumbers); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + AvailableSequenceNumbers = decoder.ReadUInt32Array("AvailableSequenceNumbers"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TransferResult value = encodeable as TransferResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_availableSequenceNumbers, value.m_availableSequenceNumbers)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TransferResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TransferResult clone = (TransferResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_availableSequenceNumbers = (UInt32Collection)Utils.Clone(this.m_availableSequenceNumbers); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private UInt32Collection m_availableSequenceNumbers; + #endregion + } + + #region TransferResultCollection Class + /// + /// A collection of TransferResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfTransferResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "TransferResult")] + #if !NET_STANDARD + public partial class TransferResultCollection : List, ICloneable + #else + public partial class TransferResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public TransferResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public TransferResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public TransferResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator TransferResultCollection(TransferResult[] values) + { + if (values != null) + { + return new TransferResultCollection(values); + } + + return new TransferResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator TransferResult[](TransferResultCollection 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 (TransferResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + TransferResultCollection clone = new TransferResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((TransferResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region TransferSubscriptionsRequest Class + #if (!OPCUA_EXCLUDE_TransferSubscriptionsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TransferSubscriptionsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TransferSubscriptionsRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionIds = new UInt32Collection(); + m_sendInitialValues = true; + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SubscriptionIds", IsRequired = false, Order = 2)] + public UInt32Collection SubscriptionIds + { + get + { + return m_subscriptionIds; + } + + set + { + m_subscriptionIds = value; + + if (value == null) + { + m_subscriptionIds = new UInt32Collection(); + } + } + } + + /// + [DataMember(Name = "SendInitialValues", IsRequired = false, Order = 3)] + public bool SendInitialValues + { + get { return m_sendInitialValues; } + set { m_sendInitialValues = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TransferSubscriptionsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TransferSubscriptionsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TransferSubscriptionsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32Array("SubscriptionIds", SubscriptionIds); + encoder.WriteBoolean("SendInitialValues", SendInitialValues); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionIds = decoder.ReadUInt32Array("SubscriptionIds"); + SendInitialValues = decoder.ReadBoolean("SendInitialValues"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TransferSubscriptionsRequest value = encodeable as TransferSubscriptionsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionIds, value.m_subscriptionIds)) return false; + if (!Utils.IsEqual(m_sendInitialValues, value.m_sendInitialValues)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TransferSubscriptionsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TransferSubscriptionsRequest clone = (TransferSubscriptionsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionIds = (UInt32Collection)Utils.Clone(this.m_subscriptionIds); + clone.m_sendInitialValues = (bool)Utils.Clone(this.m_sendInitialValues); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private UInt32Collection m_subscriptionIds; + private bool m_sendInitialValues; + #endregion + } + #endif + #endregion + + #region TransferSubscriptionsResponse Class + #if (!OPCUA_EXCLUDE_TransferSubscriptionsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class TransferSubscriptionsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public TransferSubscriptionsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new TransferResultCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public TransferResultCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new TransferResultCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.TransferSubscriptionsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.TransferSubscriptionsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.TransferSubscriptionsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteEncodeableArray("Results", Results.ToArray(), typeof(TransferResult)); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = (TransferResultCollection)decoder.ReadEncodeableArray("Results", typeof(TransferResult)); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + TransferSubscriptionsResponse value = encodeable as TransferSubscriptionsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (TransferSubscriptionsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + TransferSubscriptionsResponse clone = (TransferSubscriptionsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (TransferResultCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private TransferResultCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region DeleteSubscriptionsRequest Class + #if (!OPCUA_EXCLUDE_DeleteSubscriptionsRequest) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteSubscriptionsRequest : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteSubscriptionsRequest() + { + 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_requestHeader = new RequestHeader(); + m_subscriptionIds = new UInt32Collection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "RequestHeader", IsRequired = false, Order = 1)] + public RequestHeader RequestHeader + { + get + { + return m_requestHeader; + } + + set + { + m_requestHeader = value; + + if (value == null) + { + m_requestHeader = new RequestHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SubscriptionIds", IsRequired = false, Order = 2)] + public UInt32Collection SubscriptionIds + { + get + { + return m_subscriptionIds; + } + + set + { + m_subscriptionIds = value; + + if (value == null) + { + m_subscriptionIds = new UInt32Collection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteSubscriptionsRequest; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteSubscriptionsRequest_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteSubscriptionsRequest_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("RequestHeader", RequestHeader, typeof(RequestHeader)); + encoder.WriteUInt32Array("SubscriptionIds", SubscriptionIds); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + RequestHeader = (RequestHeader)decoder.ReadEncodeable("RequestHeader", typeof(RequestHeader)); + SubscriptionIds = decoder.ReadUInt32Array("SubscriptionIds"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteSubscriptionsRequest value = encodeable as DeleteSubscriptionsRequest; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_requestHeader, value.m_requestHeader)) return false; + if (!Utils.IsEqual(m_subscriptionIds, value.m_subscriptionIds)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteSubscriptionsRequest)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteSubscriptionsRequest clone = (DeleteSubscriptionsRequest)base.MemberwiseClone(); + + clone.m_requestHeader = (RequestHeader)Utils.Clone(this.m_requestHeader); + clone.m_subscriptionIds = (UInt32Collection)Utils.Clone(this.m_subscriptionIds); + + return clone; + } + #endregion + + #region Private Fields + private RequestHeader m_requestHeader; + private UInt32Collection m_subscriptionIds; + #endregion + } + #endif + #endregion + + #region DeleteSubscriptionsResponse Class + #if (!OPCUA_EXCLUDE_DeleteSubscriptionsResponse) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DeleteSubscriptionsResponse : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DeleteSubscriptionsResponse() + { + 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_responseHeader = new ResponseHeader(); + m_results = new StatusCodeCollection(); + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "ResponseHeader", IsRequired = false, Order = 1)] + public ResponseHeader ResponseHeader + { + get + { + return m_responseHeader; + } + + set + { + m_responseHeader = value; + + if (value == null) + { + m_responseHeader = new ResponseHeader(); + } + } + } + + /// + /// + /// + [DataMember(Name = "Results", IsRequired = false, Order = 2)] + public StatusCodeCollection Results + { + get + { + return m_results; + } + + set + { + m_results = value; + + if (value == null) + { + m_results = new StatusCodeCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DiagnosticInfos", IsRequired = false, Order = 3)] + public DiagnosticInfoCollection DiagnosticInfos + { + get + { + return m_diagnosticInfos; + } + + set + { + m_diagnosticInfos = value; + + if (value == null) + { + m_diagnosticInfos = new DiagnosticInfoCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DeleteSubscriptionsResponse; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DeleteSubscriptionsResponse_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DeleteSubscriptionsResponse_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("ResponseHeader", ResponseHeader, typeof(ResponseHeader)); + encoder.WriteStatusCodeArray("Results", Results); + encoder.WriteDiagnosticInfoArray("DiagnosticInfos", DiagnosticInfos); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ResponseHeader = (ResponseHeader)decoder.ReadEncodeable("ResponseHeader", typeof(ResponseHeader)); + Results = decoder.ReadStatusCodeArray("Results"); + DiagnosticInfos = decoder.ReadDiagnosticInfoArray("DiagnosticInfos"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DeleteSubscriptionsResponse value = encodeable as DeleteSubscriptionsResponse; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_responseHeader, value.m_responseHeader)) return false; + if (!Utils.IsEqual(m_results, value.m_results)) return false; + if (!Utils.IsEqual(m_diagnosticInfos, value.m_diagnosticInfos)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DeleteSubscriptionsResponse)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DeleteSubscriptionsResponse clone = (DeleteSubscriptionsResponse)base.MemberwiseClone(); + + clone.m_responseHeader = (ResponseHeader)Utils.Clone(this.m_responseHeader); + clone.m_results = (StatusCodeCollection)Utils.Clone(this.m_results); + clone.m_diagnosticInfos = (DiagnosticInfoCollection)Utils.Clone(this.m_diagnosticInfos); + + return clone; + } + #endregion + + #region Private Fields + private ResponseHeader m_responseHeader; + private StatusCodeCollection m_results; + private DiagnosticInfoCollection m_diagnosticInfos; + #endregion + } + #endif + #endregion + + #region BuildInfo Class + #if (!OPCUA_EXCLUDE_BuildInfo) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class BuildInfo : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public BuildInfo() + { + 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_productUri = null; + m_manufacturerName = null; + m_productName = null; + m_softwareVersion = null; + m_buildNumber = null; + m_buildDate = DateTime.MinValue; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ProductUri", IsRequired = false, Order = 1)] + public string ProductUri + { + get { return m_productUri; } + set { m_productUri = value; } + } + + /// + [DataMember(Name = "ManufacturerName", IsRequired = false, Order = 2)] + public string ManufacturerName + { + get { return m_manufacturerName; } + set { m_manufacturerName = value; } + } + + /// + [DataMember(Name = "ProductName", IsRequired = false, Order = 3)] + public string ProductName + { + get { return m_productName; } + set { m_productName = value; } + } + + /// + [DataMember(Name = "SoftwareVersion", IsRequired = false, Order = 4)] + public string SoftwareVersion + { + get { return m_softwareVersion; } + set { m_softwareVersion = value; } + } + + /// + [DataMember(Name = "BuildNumber", IsRequired = false, Order = 5)] + public string BuildNumber + { + get { return m_buildNumber; } + set { m_buildNumber = value; } + } + + /// + [DataMember(Name = "BuildDate", IsRequired = false, Order = 6)] + public DateTime BuildDate + { + get { return m_buildDate; } + set { m_buildDate = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.BuildInfo; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.BuildInfo_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.BuildInfo_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ProductUri", ProductUri); + encoder.WriteString("ManufacturerName", ManufacturerName); + encoder.WriteString("ProductName", ProductName); + encoder.WriteString("SoftwareVersion", SoftwareVersion); + encoder.WriteString("BuildNumber", BuildNumber); + encoder.WriteDateTime("BuildDate", BuildDate); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ProductUri = decoder.ReadString("ProductUri"); + ManufacturerName = decoder.ReadString("ManufacturerName"); + ProductName = decoder.ReadString("ProductName"); + SoftwareVersion = decoder.ReadString("SoftwareVersion"); + BuildNumber = decoder.ReadString("BuildNumber"); + BuildDate = decoder.ReadDateTime("BuildDate"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + BuildInfo value = encodeable as BuildInfo; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_productUri, value.m_productUri)) return false; + if (!Utils.IsEqual(m_manufacturerName, value.m_manufacturerName)) return false; + if (!Utils.IsEqual(m_productName, value.m_productName)) return false; + if (!Utils.IsEqual(m_softwareVersion, value.m_softwareVersion)) return false; + if (!Utils.IsEqual(m_buildNumber, value.m_buildNumber)) return false; + if (!Utils.IsEqual(m_buildDate, value.m_buildDate)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (BuildInfo)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + BuildInfo clone = (BuildInfo)base.MemberwiseClone(); + + clone.m_productUri = (string)Utils.Clone(this.m_productUri); + clone.m_manufacturerName = (string)Utils.Clone(this.m_manufacturerName); + clone.m_productName = (string)Utils.Clone(this.m_productName); + clone.m_softwareVersion = (string)Utils.Clone(this.m_softwareVersion); + clone.m_buildNumber = (string)Utils.Clone(this.m_buildNumber); + clone.m_buildDate = (DateTime)Utils.Clone(this.m_buildDate); + + return clone; + } + #endregion + + #region Private Fields + private string m_productUri; + private string m_manufacturerName; + private string m_productName; + private string m_softwareVersion; + private string m_buildNumber; + private DateTime m_buildDate; + #endregion + } + #endif + #endregion + + #region RedundancySupport Enumeration + #if (!OPCUA_EXCLUDE_RedundancySupport) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum RedundancySupport + { + /// + [EnumMember(Value = "None_0")] + None = 0, + + /// + [EnumMember(Value = "Cold_1")] + Cold = 1, + + /// + [EnumMember(Value = "Warm_2")] + Warm = 2, + + /// + [EnumMember(Value = "Hot_3")] + Hot = 3, + + /// + [EnumMember(Value = "Transparent_4")] + Transparent = 4, + + /// + [EnumMember(Value = "HotAndMirrored_5")] + HotAndMirrored = 5, + } + #endif + #endregion + + #region ServerState Enumeration + #if (!OPCUA_EXCLUDE_ServerState) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum ServerState + { + /// + [EnumMember(Value = "Running_0")] + Running = 0, + + /// + [EnumMember(Value = "Failed_1")] + Failed = 1, + + /// + [EnumMember(Value = "NoConfiguration_2")] + NoConfiguration = 2, + + /// + [EnumMember(Value = "Suspended_3")] + Suspended = 3, + + /// + [EnumMember(Value = "Shutdown_4")] + Shutdown = 4, + + /// + [EnumMember(Value = "Test_5")] + Test = 5, + + /// + [EnumMember(Value = "CommunicationFault_6")] + CommunicationFault = 6, + + /// + [EnumMember(Value = "Unknown_7")] + Unknown = 7, + } + #endif + #endregion + + #region RedundantServerDataType Class + #if (!OPCUA_EXCLUDE_RedundantServerDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class RedundantServerDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public RedundantServerDataType() + { + 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_serverId = null; + m_serviceLevel = (byte)0; + m_serverState = ServerState.Running; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ServerId", IsRequired = false, Order = 1)] + public string ServerId + { + get { return m_serverId; } + set { m_serverId = value; } + } + + /// + [DataMember(Name = "ServiceLevel", IsRequired = false, Order = 2)] + public byte ServiceLevel + { + get { return m_serviceLevel; } + set { m_serviceLevel = value; } + } + + /// + [DataMember(Name = "ServerState", IsRequired = false, Order = 3)] + public ServerState ServerState + { + get { return m_serverState; } + set { m_serverState = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.RedundantServerDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.RedundantServerDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.RedundantServerDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ServerId", ServerId); + encoder.WriteByte("ServiceLevel", ServiceLevel); + encoder.WriteEnumerated("ServerState", ServerState); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ServerId = decoder.ReadString("ServerId"); + ServiceLevel = decoder.ReadByte("ServiceLevel"); + ServerState = (ServerState)decoder.ReadEnumerated("ServerState", typeof(ServerState)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + RedundantServerDataType value = encodeable as RedundantServerDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_serverId, value.m_serverId)) return false; + if (!Utils.IsEqual(m_serviceLevel, value.m_serviceLevel)) return false; + if (!Utils.IsEqual(m_serverState, value.m_serverState)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (RedundantServerDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + RedundantServerDataType clone = (RedundantServerDataType)base.MemberwiseClone(); + + clone.m_serverId = (string)Utils.Clone(this.m_serverId); + clone.m_serviceLevel = (byte)Utils.Clone(this.m_serviceLevel); + clone.m_serverState = (ServerState)Utils.Clone(this.m_serverState); + + return clone; + } + #endregion + + #region Private Fields + private string m_serverId; + private byte m_serviceLevel; + private ServerState m_serverState; + #endregion + } + + #region RedundantServerDataTypeCollection Class + /// + /// A collection of RedundantServerDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfRedundantServerDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "RedundantServerDataType")] + #if !NET_STANDARD + public partial class RedundantServerDataTypeCollection : List, ICloneable + #else + public partial class RedundantServerDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public RedundantServerDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public RedundantServerDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public RedundantServerDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator RedundantServerDataTypeCollection(RedundantServerDataType[] values) + { + if (values != null) + { + return new RedundantServerDataTypeCollection(values); + } + + return new RedundantServerDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator RedundantServerDataType[](RedundantServerDataTypeCollection 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 (RedundantServerDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + RedundantServerDataTypeCollection clone = new RedundantServerDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((RedundantServerDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region EndpointUrlListDataType Class + #if (!OPCUA_EXCLUDE_EndpointUrlListDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EndpointUrlListDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EndpointUrlListDataType() + { + 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_endpointUrlList = new StringCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "EndpointUrlList", IsRequired = false, Order = 1)] + public StringCollection EndpointUrlList + { + get + { + return m_endpointUrlList; + } + + set + { + m_endpointUrlList = value; + + if (value == null) + { + m_endpointUrlList = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EndpointUrlListDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EndpointUrlListDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EndpointUrlListDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStringArray("EndpointUrlList", EndpointUrlList); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EndpointUrlList = decoder.ReadStringArray("EndpointUrlList"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EndpointUrlListDataType value = encodeable as EndpointUrlListDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_endpointUrlList, value.m_endpointUrlList)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EndpointUrlListDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EndpointUrlListDataType clone = (EndpointUrlListDataType)base.MemberwiseClone(); + + clone.m_endpointUrlList = (StringCollection)Utils.Clone(this.m_endpointUrlList); + + return clone; + } + #endregion + + #region Private Fields + private StringCollection m_endpointUrlList; + #endregion + } + + #region EndpointUrlListDataTypeCollection Class + /// + /// A collection of EndpointUrlListDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfEndpointUrlListDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "EndpointUrlListDataType")] + #if !NET_STANDARD + public partial class EndpointUrlListDataTypeCollection : List, ICloneable + #else + public partial class EndpointUrlListDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public EndpointUrlListDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public EndpointUrlListDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public EndpointUrlListDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator EndpointUrlListDataTypeCollection(EndpointUrlListDataType[] values) + { + if (values != null) + { + return new EndpointUrlListDataTypeCollection(values); + } + + return new EndpointUrlListDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator EndpointUrlListDataType[](EndpointUrlListDataTypeCollection 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 (EndpointUrlListDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + EndpointUrlListDataTypeCollection clone = new EndpointUrlListDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((EndpointUrlListDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region NetworkGroupDataType Class + #if (!OPCUA_EXCLUDE_NetworkGroupDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class NetworkGroupDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public NetworkGroupDataType() + { + 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_serverUri = null; + m_networkPaths = new EndpointUrlListDataTypeCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ServerUri", IsRequired = false, Order = 1)] + public string ServerUri + { + get { return m_serverUri; } + set { m_serverUri = value; } + } + + /// + /// + /// + [DataMember(Name = "NetworkPaths", IsRequired = false, Order = 2)] + public EndpointUrlListDataTypeCollection NetworkPaths + { + get + { + return m_networkPaths; + } + + set + { + m_networkPaths = value; + + if (value == null) + { + m_networkPaths = new EndpointUrlListDataTypeCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.NetworkGroupDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.NetworkGroupDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.NetworkGroupDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("ServerUri", ServerUri); + encoder.WriteEncodeableArray("NetworkPaths", NetworkPaths.ToArray(), typeof(EndpointUrlListDataType)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ServerUri = decoder.ReadString("ServerUri"); + NetworkPaths = (EndpointUrlListDataTypeCollection)decoder.ReadEncodeableArray("NetworkPaths", typeof(EndpointUrlListDataType)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + NetworkGroupDataType value = encodeable as NetworkGroupDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_serverUri, value.m_serverUri)) return false; + if (!Utils.IsEqual(m_networkPaths, value.m_networkPaths)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (NetworkGroupDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + NetworkGroupDataType clone = (NetworkGroupDataType)base.MemberwiseClone(); + + clone.m_serverUri = (string)Utils.Clone(this.m_serverUri); + clone.m_networkPaths = (EndpointUrlListDataTypeCollection)Utils.Clone(this.m_networkPaths); + + return clone; + } + #endregion + + #region Private Fields + private string m_serverUri; + private EndpointUrlListDataTypeCollection m_networkPaths; + #endregion + } + + #region NetworkGroupDataTypeCollection Class + /// + /// A collection of NetworkGroupDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfNetworkGroupDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "NetworkGroupDataType")] + #if !NET_STANDARD + public partial class NetworkGroupDataTypeCollection : List, ICloneable + #else + public partial class NetworkGroupDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public NetworkGroupDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public NetworkGroupDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public NetworkGroupDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator NetworkGroupDataTypeCollection(NetworkGroupDataType[] values) + { + if (values != null) + { + return new NetworkGroupDataTypeCollection(values); + } + + return new NetworkGroupDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator NetworkGroupDataType[](NetworkGroupDataTypeCollection 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 (NetworkGroupDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + NetworkGroupDataTypeCollection clone = new NetworkGroupDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((NetworkGroupDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SamplingIntervalDiagnosticsDataType Class + #if (!OPCUA_EXCLUDE_SamplingIntervalDiagnosticsDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SamplingIntervalDiagnosticsDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SamplingIntervalDiagnosticsDataType() + { + 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_samplingInterval = (double)0; + m_monitoredItemCount = (uint)0; + m_maxMonitoredItemCount = (uint)0; + m_disabledMonitoredItemCount = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SamplingInterval", IsRequired = false, Order = 1)] + public double SamplingInterval + { + get { return m_samplingInterval; } + set { m_samplingInterval = value; } + } + + /// + [DataMember(Name = "MonitoredItemCount", IsRequired = false, Order = 2)] + public uint MonitoredItemCount + { + get { return m_monitoredItemCount; } + set { m_monitoredItemCount = value; } + } + + /// + [DataMember(Name = "MaxMonitoredItemCount", IsRequired = false, Order = 3)] + public uint MaxMonitoredItemCount + { + get { return m_maxMonitoredItemCount; } + set { m_maxMonitoredItemCount = value; } + } + + /// + [DataMember(Name = "DisabledMonitoredItemCount", IsRequired = false, Order = 4)] + public uint DisabledMonitoredItemCount + { + get { return m_disabledMonitoredItemCount; } + set { m_disabledMonitoredItemCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SamplingIntervalDiagnosticsDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("SamplingInterval", SamplingInterval); + encoder.WriteUInt32("MonitoredItemCount", MonitoredItemCount); + encoder.WriteUInt32("MaxMonitoredItemCount", MaxMonitoredItemCount); + encoder.WriteUInt32("DisabledMonitoredItemCount", DisabledMonitoredItemCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SamplingInterval = decoder.ReadDouble("SamplingInterval"); + MonitoredItemCount = decoder.ReadUInt32("MonitoredItemCount"); + MaxMonitoredItemCount = decoder.ReadUInt32("MaxMonitoredItemCount"); + DisabledMonitoredItemCount = decoder.ReadUInt32("DisabledMonitoredItemCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SamplingIntervalDiagnosticsDataType value = encodeable as SamplingIntervalDiagnosticsDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_samplingInterval, value.m_samplingInterval)) return false; + if (!Utils.IsEqual(m_monitoredItemCount, value.m_monitoredItemCount)) return false; + if (!Utils.IsEqual(m_maxMonitoredItemCount, value.m_maxMonitoredItemCount)) return false; + if (!Utils.IsEqual(m_disabledMonitoredItemCount, value.m_disabledMonitoredItemCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SamplingIntervalDiagnosticsDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SamplingIntervalDiagnosticsDataType clone = (SamplingIntervalDiagnosticsDataType)base.MemberwiseClone(); + + clone.m_samplingInterval = (double)Utils.Clone(this.m_samplingInterval); + clone.m_monitoredItemCount = (uint)Utils.Clone(this.m_monitoredItemCount); + clone.m_maxMonitoredItemCount = (uint)Utils.Clone(this.m_maxMonitoredItemCount); + clone.m_disabledMonitoredItemCount = (uint)Utils.Clone(this.m_disabledMonitoredItemCount); + + return clone; + } + #endregion + + #region Private Fields + private double m_samplingInterval; + private uint m_monitoredItemCount; + private uint m_maxMonitoredItemCount; + private uint m_disabledMonitoredItemCount; + #endregion + } + + #region SamplingIntervalDiagnosticsDataTypeCollection Class + /// + /// A collection of SamplingIntervalDiagnosticsDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSamplingIntervalDiagnosticsDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SamplingIntervalDiagnosticsDataType")] + #if !NET_STANDARD + public partial class SamplingIntervalDiagnosticsDataTypeCollection : List, ICloneable + #else + public partial class SamplingIntervalDiagnosticsDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SamplingIntervalDiagnosticsDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SamplingIntervalDiagnosticsDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SamplingIntervalDiagnosticsDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SamplingIntervalDiagnosticsDataTypeCollection(SamplingIntervalDiagnosticsDataType[] values) + { + if (values != null) + { + return new SamplingIntervalDiagnosticsDataTypeCollection(values); + } + + return new SamplingIntervalDiagnosticsDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SamplingIntervalDiagnosticsDataType[](SamplingIntervalDiagnosticsDataTypeCollection 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 (SamplingIntervalDiagnosticsDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SamplingIntervalDiagnosticsDataTypeCollection clone = new SamplingIntervalDiagnosticsDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SamplingIntervalDiagnosticsDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ServerDiagnosticsSummaryDataType Class + #if (!OPCUA_EXCLUDE_ServerDiagnosticsSummaryDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ServerDiagnosticsSummaryDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ServerDiagnosticsSummaryDataType() + { + 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_serverViewCount = (uint)0; + m_currentSessionCount = (uint)0; + m_cumulatedSessionCount = (uint)0; + m_securityRejectedSessionCount = (uint)0; + m_rejectedSessionCount = (uint)0; + m_sessionTimeoutCount = (uint)0; + m_sessionAbortCount = (uint)0; + m_currentSubscriptionCount = (uint)0; + m_cumulatedSubscriptionCount = (uint)0; + m_publishingIntervalCount = (uint)0; + m_securityRejectedRequestsCount = (uint)0; + m_rejectedRequestsCount = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ServerViewCount", IsRequired = false, Order = 1)] + public uint ServerViewCount + { + get { return m_serverViewCount; } + set { m_serverViewCount = value; } + } + + /// + [DataMember(Name = "CurrentSessionCount", IsRequired = false, Order = 2)] + public uint CurrentSessionCount + { + get { return m_currentSessionCount; } + set { m_currentSessionCount = value; } + } + + /// + [DataMember(Name = "CumulatedSessionCount", IsRequired = false, Order = 3)] + public uint CumulatedSessionCount + { + get { return m_cumulatedSessionCount; } + set { m_cumulatedSessionCount = value; } + } + + /// + [DataMember(Name = "SecurityRejectedSessionCount", IsRequired = false, Order = 4)] + public uint SecurityRejectedSessionCount + { + get { return m_securityRejectedSessionCount; } + set { m_securityRejectedSessionCount = value; } + } + + /// + [DataMember(Name = "RejectedSessionCount", IsRequired = false, Order = 5)] + public uint RejectedSessionCount + { + get { return m_rejectedSessionCount; } + set { m_rejectedSessionCount = value; } + } + + /// + [DataMember(Name = "SessionTimeoutCount", IsRequired = false, Order = 6)] + public uint SessionTimeoutCount + { + get { return m_sessionTimeoutCount; } + set { m_sessionTimeoutCount = value; } + } + + /// + [DataMember(Name = "SessionAbortCount", IsRequired = false, Order = 7)] + public uint SessionAbortCount + { + get { return m_sessionAbortCount; } + set { m_sessionAbortCount = value; } + } + + /// + [DataMember(Name = "CurrentSubscriptionCount", IsRequired = false, Order = 8)] + public uint CurrentSubscriptionCount + { + get { return m_currentSubscriptionCount; } + set { m_currentSubscriptionCount = value; } + } + + /// + [DataMember(Name = "CumulatedSubscriptionCount", IsRequired = false, Order = 9)] + public uint CumulatedSubscriptionCount + { + get { return m_cumulatedSubscriptionCount; } + set { m_cumulatedSubscriptionCount = value; } + } + + /// + [DataMember(Name = "PublishingIntervalCount", IsRequired = false, Order = 10)] + public uint PublishingIntervalCount + { + get { return m_publishingIntervalCount; } + set { m_publishingIntervalCount = value; } + } + + /// + [DataMember(Name = "SecurityRejectedRequestsCount", IsRequired = false, Order = 11)] + public uint SecurityRejectedRequestsCount + { + get { return m_securityRejectedRequestsCount; } + set { m_securityRejectedRequestsCount = value; } + } + + /// + [DataMember(Name = "RejectedRequestsCount", IsRequired = false, Order = 12)] + public uint RejectedRequestsCount + { + get { return m_rejectedRequestsCount; } + set { m_rejectedRequestsCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ServerDiagnosticsSummaryDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ServerDiagnosticsSummaryDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("ServerViewCount", ServerViewCount); + encoder.WriteUInt32("CurrentSessionCount", CurrentSessionCount); + encoder.WriteUInt32("CumulatedSessionCount", CumulatedSessionCount); + encoder.WriteUInt32("SecurityRejectedSessionCount", SecurityRejectedSessionCount); + encoder.WriteUInt32("RejectedSessionCount", RejectedSessionCount); + encoder.WriteUInt32("SessionTimeoutCount", SessionTimeoutCount); + encoder.WriteUInt32("SessionAbortCount", SessionAbortCount); + encoder.WriteUInt32("CurrentSubscriptionCount", CurrentSubscriptionCount); + encoder.WriteUInt32("CumulatedSubscriptionCount", CumulatedSubscriptionCount); + encoder.WriteUInt32("PublishingIntervalCount", PublishingIntervalCount); + encoder.WriteUInt32("SecurityRejectedRequestsCount", SecurityRejectedRequestsCount); + encoder.WriteUInt32("RejectedRequestsCount", RejectedRequestsCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + ServerViewCount = decoder.ReadUInt32("ServerViewCount"); + CurrentSessionCount = decoder.ReadUInt32("CurrentSessionCount"); + CumulatedSessionCount = decoder.ReadUInt32("CumulatedSessionCount"); + SecurityRejectedSessionCount = decoder.ReadUInt32("SecurityRejectedSessionCount"); + RejectedSessionCount = decoder.ReadUInt32("RejectedSessionCount"); + SessionTimeoutCount = decoder.ReadUInt32("SessionTimeoutCount"); + SessionAbortCount = decoder.ReadUInt32("SessionAbortCount"); + CurrentSubscriptionCount = decoder.ReadUInt32("CurrentSubscriptionCount"); + CumulatedSubscriptionCount = decoder.ReadUInt32("CumulatedSubscriptionCount"); + PublishingIntervalCount = decoder.ReadUInt32("PublishingIntervalCount"); + SecurityRejectedRequestsCount = decoder.ReadUInt32("SecurityRejectedRequestsCount"); + RejectedRequestsCount = decoder.ReadUInt32("RejectedRequestsCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ServerDiagnosticsSummaryDataType value = encodeable as ServerDiagnosticsSummaryDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_serverViewCount, value.m_serverViewCount)) return false; + if (!Utils.IsEqual(m_currentSessionCount, value.m_currentSessionCount)) return false; + if (!Utils.IsEqual(m_cumulatedSessionCount, value.m_cumulatedSessionCount)) return false; + if (!Utils.IsEqual(m_securityRejectedSessionCount, value.m_securityRejectedSessionCount)) return false; + if (!Utils.IsEqual(m_rejectedSessionCount, value.m_rejectedSessionCount)) return false; + if (!Utils.IsEqual(m_sessionTimeoutCount, value.m_sessionTimeoutCount)) return false; + if (!Utils.IsEqual(m_sessionAbortCount, value.m_sessionAbortCount)) return false; + if (!Utils.IsEqual(m_currentSubscriptionCount, value.m_currentSubscriptionCount)) return false; + if (!Utils.IsEqual(m_cumulatedSubscriptionCount, value.m_cumulatedSubscriptionCount)) return false; + if (!Utils.IsEqual(m_publishingIntervalCount, value.m_publishingIntervalCount)) return false; + if (!Utils.IsEqual(m_securityRejectedRequestsCount, value.m_securityRejectedRequestsCount)) return false; + if (!Utils.IsEqual(m_rejectedRequestsCount, value.m_rejectedRequestsCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ServerDiagnosticsSummaryDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ServerDiagnosticsSummaryDataType clone = (ServerDiagnosticsSummaryDataType)base.MemberwiseClone(); + + clone.m_serverViewCount = (uint)Utils.Clone(this.m_serverViewCount); + clone.m_currentSessionCount = (uint)Utils.Clone(this.m_currentSessionCount); + clone.m_cumulatedSessionCount = (uint)Utils.Clone(this.m_cumulatedSessionCount); + clone.m_securityRejectedSessionCount = (uint)Utils.Clone(this.m_securityRejectedSessionCount); + clone.m_rejectedSessionCount = (uint)Utils.Clone(this.m_rejectedSessionCount); + clone.m_sessionTimeoutCount = (uint)Utils.Clone(this.m_sessionTimeoutCount); + clone.m_sessionAbortCount = (uint)Utils.Clone(this.m_sessionAbortCount); + clone.m_currentSubscriptionCount = (uint)Utils.Clone(this.m_currentSubscriptionCount); + clone.m_cumulatedSubscriptionCount = (uint)Utils.Clone(this.m_cumulatedSubscriptionCount); + clone.m_publishingIntervalCount = (uint)Utils.Clone(this.m_publishingIntervalCount); + clone.m_securityRejectedRequestsCount = (uint)Utils.Clone(this.m_securityRejectedRequestsCount); + clone.m_rejectedRequestsCount = (uint)Utils.Clone(this.m_rejectedRequestsCount); + + return clone; + } + #endregion + + #region Private Fields + private uint m_serverViewCount; + private uint m_currentSessionCount; + private uint m_cumulatedSessionCount; + private uint m_securityRejectedSessionCount; + private uint m_rejectedSessionCount; + private uint m_sessionTimeoutCount; + private uint m_sessionAbortCount; + private uint m_currentSubscriptionCount; + private uint m_cumulatedSubscriptionCount; + private uint m_publishingIntervalCount; + private uint m_securityRejectedRequestsCount; + private uint m_rejectedRequestsCount; + #endregion + } + #endif + #endregion + + #region ServerStatusDataType Class + #if (!OPCUA_EXCLUDE_ServerStatusDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ServerStatusDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ServerStatusDataType() + { + 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_startTime = DateTime.MinValue; + m_currentTime = DateTime.MinValue; + m_state = ServerState.Running; + m_buildInfo = new BuildInfo(); + m_secondsTillShutdown = (uint)0; + m_shutdownReason = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StartTime", IsRequired = false, Order = 1)] + public DateTime StartTime + { + get { return m_startTime; } + set { m_startTime = value; } + } + + /// + [DataMember(Name = "CurrentTime", IsRequired = false, Order = 2)] + public DateTime CurrentTime + { + get { return m_currentTime; } + set { m_currentTime = value; } + } + + /// + [DataMember(Name = "State", IsRequired = false, Order = 3)] + public ServerState State + { + get { return m_state; } + set { m_state = value; } + } + + /// + /// + /// + [DataMember(Name = "BuildInfo", IsRequired = false, Order = 4)] + public BuildInfo BuildInfo + { + get + { + return m_buildInfo; + } + + set + { + m_buildInfo = value; + + if (value == null) + { + m_buildInfo = new BuildInfo(); + } + } + } + + /// + [DataMember(Name = "SecondsTillShutdown", IsRequired = false, Order = 5)] + public uint SecondsTillShutdown + { + get { return m_secondsTillShutdown; } + set { m_secondsTillShutdown = value; } + } + + /// + [DataMember(Name = "ShutdownReason", IsRequired = false, Order = 6)] + public LocalizedText ShutdownReason + { + get { return m_shutdownReason; } + set { m_shutdownReason = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ServerStatusDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ServerStatusDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ServerStatusDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDateTime("StartTime", StartTime); + encoder.WriteDateTime("CurrentTime", CurrentTime); + encoder.WriteEnumerated("State", State); + encoder.WriteEncodeable("BuildInfo", BuildInfo, typeof(BuildInfo)); + encoder.WriteUInt32("SecondsTillShutdown", SecondsTillShutdown); + encoder.WriteLocalizedText("ShutdownReason", ShutdownReason); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StartTime = decoder.ReadDateTime("StartTime"); + CurrentTime = decoder.ReadDateTime("CurrentTime"); + State = (ServerState)decoder.ReadEnumerated("State", typeof(ServerState)); + BuildInfo = (BuildInfo)decoder.ReadEncodeable("BuildInfo", typeof(BuildInfo)); + SecondsTillShutdown = decoder.ReadUInt32("SecondsTillShutdown"); + ShutdownReason = decoder.ReadLocalizedText("ShutdownReason"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ServerStatusDataType value = encodeable as ServerStatusDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_startTime, value.m_startTime)) return false; + if (!Utils.IsEqual(m_currentTime, value.m_currentTime)) return false; + if (!Utils.IsEqual(m_state, value.m_state)) return false; + if (!Utils.IsEqual(m_buildInfo, value.m_buildInfo)) return false; + if (!Utils.IsEqual(m_secondsTillShutdown, value.m_secondsTillShutdown)) return false; + if (!Utils.IsEqual(m_shutdownReason, value.m_shutdownReason)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ServerStatusDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ServerStatusDataType clone = (ServerStatusDataType)base.MemberwiseClone(); + + clone.m_startTime = (DateTime)Utils.Clone(this.m_startTime); + clone.m_currentTime = (DateTime)Utils.Clone(this.m_currentTime); + clone.m_state = (ServerState)Utils.Clone(this.m_state); + clone.m_buildInfo = (BuildInfo)Utils.Clone(this.m_buildInfo); + clone.m_secondsTillShutdown = (uint)Utils.Clone(this.m_secondsTillShutdown); + clone.m_shutdownReason = (LocalizedText)Utils.Clone(this.m_shutdownReason); + + return clone; + } + #endregion + + #region Private Fields + private DateTime m_startTime; + private DateTime m_currentTime; + private ServerState m_state; + private BuildInfo m_buildInfo; + private uint m_secondsTillShutdown; + private LocalizedText m_shutdownReason; + #endregion + } + #endif + #endregion + + #region SessionDiagnosticsDataType Class + #if (!OPCUA_EXCLUDE_SessionDiagnosticsDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SessionDiagnosticsDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SessionDiagnosticsDataType() + { + 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_sessionId = null; + m_sessionName = null; + m_clientDescription = new ApplicationDescription(); + m_serverUri = null; + m_endpointUrl = null; + m_localeIds = new StringCollection(); + m_actualSessionTimeout = (double)0; + m_maxResponseMessageSize = (uint)0; + m_clientConnectionTime = DateTime.MinValue; + m_clientLastContactTime = DateTime.MinValue; + m_currentSubscriptionsCount = (uint)0; + m_currentMonitoredItemsCount = (uint)0; + m_currentPublishRequestsInQueue = (uint)0; + m_totalRequestCount = new ServiceCounterDataType(); + m_unauthorizedRequestCount = (uint)0; + m_readCount = new ServiceCounterDataType(); + m_historyReadCount = new ServiceCounterDataType(); + m_writeCount = new ServiceCounterDataType(); + m_historyUpdateCount = new ServiceCounterDataType(); + m_callCount = new ServiceCounterDataType(); + m_createMonitoredItemsCount = new ServiceCounterDataType(); + m_modifyMonitoredItemsCount = new ServiceCounterDataType(); + m_setMonitoringModeCount = new ServiceCounterDataType(); + m_setTriggeringCount = new ServiceCounterDataType(); + m_deleteMonitoredItemsCount = new ServiceCounterDataType(); + m_createSubscriptionCount = new ServiceCounterDataType(); + m_modifySubscriptionCount = new ServiceCounterDataType(); + m_setPublishingModeCount = new ServiceCounterDataType(); + m_publishCount = new ServiceCounterDataType(); + m_republishCount = new ServiceCounterDataType(); + m_transferSubscriptionsCount = new ServiceCounterDataType(); + m_deleteSubscriptionsCount = new ServiceCounterDataType(); + m_addNodesCount = new ServiceCounterDataType(); + m_addReferencesCount = new ServiceCounterDataType(); + m_deleteNodesCount = new ServiceCounterDataType(); + m_deleteReferencesCount = new ServiceCounterDataType(); + m_browseCount = new ServiceCounterDataType(); + m_browseNextCount = new ServiceCounterDataType(); + m_translateBrowsePathsToNodeIdsCount = new ServiceCounterDataType(); + m_queryFirstCount = new ServiceCounterDataType(); + m_queryNextCount = new ServiceCounterDataType(); + m_registerNodesCount = new ServiceCounterDataType(); + m_unregisterNodesCount = new ServiceCounterDataType(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SessionId", IsRequired = false, Order = 1)] + public NodeId SessionId + { + get { return m_sessionId; } + set { m_sessionId = value; } + } + + /// + [DataMember(Name = "SessionName", IsRequired = false, Order = 2)] + public string SessionName + { + get { return m_sessionName; } + set { m_sessionName = value; } + } + + /// + /// + /// + [DataMember(Name = "ClientDescription", IsRequired = false, Order = 3)] + public ApplicationDescription ClientDescription + { + get + { + return m_clientDescription; + } + + set + { + m_clientDescription = value; + + if (value == null) + { + m_clientDescription = new ApplicationDescription(); + } + } + } + + /// + [DataMember(Name = "ServerUri", IsRequired = false, Order = 4)] + public string ServerUri + { + get { return m_serverUri; } + set { m_serverUri = value; } + } + + /// + [DataMember(Name = "EndpointUrl", IsRequired = false, Order = 5)] + public string EndpointUrl + { + get { return m_endpointUrl; } + set { m_endpointUrl = value; } + } + + /// + /// + /// + [DataMember(Name = "LocaleIds", IsRequired = false, Order = 6)] + public StringCollection LocaleIds + { + get + { + return m_localeIds; + } + + set + { + m_localeIds = value; + + if (value == null) + { + m_localeIds = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "ActualSessionTimeout", IsRequired = false, Order = 7)] + public double ActualSessionTimeout + { + get { return m_actualSessionTimeout; } + set { m_actualSessionTimeout = value; } + } + + /// + [DataMember(Name = "MaxResponseMessageSize", IsRequired = false, Order = 8)] + public uint MaxResponseMessageSize + { + get { return m_maxResponseMessageSize; } + set { m_maxResponseMessageSize = value; } + } + + /// + [DataMember(Name = "ClientConnectionTime", IsRequired = false, Order = 9)] + public DateTime ClientConnectionTime + { + get { return m_clientConnectionTime; } + set { m_clientConnectionTime = value; } + } + + /// + [DataMember(Name = "ClientLastContactTime", IsRequired = false, Order = 10)] + public DateTime ClientLastContactTime + { + get { return m_clientLastContactTime; } + set { m_clientLastContactTime = value; } + } + + /// + [DataMember(Name = "CurrentSubscriptionsCount", IsRequired = false, Order = 11)] + public uint CurrentSubscriptionsCount + { + get { return m_currentSubscriptionsCount; } + set { m_currentSubscriptionsCount = value; } + } + + /// + [DataMember(Name = "CurrentMonitoredItemsCount", IsRequired = false, Order = 12)] + public uint CurrentMonitoredItemsCount + { + get { return m_currentMonitoredItemsCount; } + set { m_currentMonitoredItemsCount = value; } + } + + /// + [DataMember(Name = "CurrentPublishRequestsInQueue", IsRequired = false, Order = 13)] + public uint CurrentPublishRequestsInQueue + { + get { return m_currentPublishRequestsInQueue; } + set { m_currentPublishRequestsInQueue = value; } + } + + /// + /// + /// + [DataMember(Name = "TotalRequestCount", IsRequired = false, Order = 14)] + public ServiceCounterDataType TotalRequestCount + { + get + { + return m_totalRequestCount; + } + + set + { + m_totalRequestCount = value; + + if (value == null) + { + m_totalRequestCount = new ServiceCounterDataType(); + } + } + } + + /// + [DataMember(Name = "UnauthorizedRequestCount", IsRequired = false, Order = 15)] + public uint UnauthorizedRequestCount + { + get { return m_unauthorizedRequestCount; } + set { m_unauthorizedRequestCount = value; } + } + + /// + /// + /// + [DataMember(Name = "ReadCount", IsRequired = false, Order = 16)] + public ServiceCounterDataType ReadCount + { + get + { + return m_readCount; + } + + set + { + m_readCount = value; + + if (value == null) + { + m_readCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "HistoryReadCount", IsRequired = false, Order = 17)] + public ServiceCounterDataType HistoryReadCount + { + get + { + return m_historyReadCount; + } + + set + { + m_historyReadCount = value; + + if (value == null) + { + m_historyReadCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "WriteCount", IsRequired = false, Order = 18)] + public ServiceCounterDataType WriteCount + { + get + { + return m_writeCount; + } + + set + { + m_writeCount = value; + + if (value == null) + { + m_writeCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "HistoryUpdateCount", IsRequired = false, Order = 19)] + public ServiceCounterDataType HistoryUpdateCount + { + get + { + return m_historyUpdateCount; + } + + set + { + m_historyUpdateCount = value; + + if (value == null) + { + m_historyUpdateCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "CallCount", IsRequired = false, Order = 20)] + public ServiceCounterDataType CallCount + { + get + { + return m_callCount; + } + + set + { + m_callCount = value; + + if (value == null) + { + m_callCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "CreateMonitoredItemsCount", IsRequired = false, Order = 21)] + public ServiceCounterDataType CreateMonitoredItemsCount + { + get + { + return m_createMonitoredItemsCount; + } + + set + { + m_createMonitoredItemsCount = value; + + if (value == null) + { + m_createMonitoredItemsCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ModifyMonitoredItemsCount", IsRequired = false, Order = 22)] + public ServiceCounterDataType ModifyMonitoredItemsCount + { + get + { + return m_modifyMonitoredItemsCount; + } + + set + { + m_modifyMonitoredItemsCount = value; + + if (value == null) + { + m_modifyMonitoredItemsCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SetMonitoringModeCount", IsRequired = false, Order = 23)] + public ServiceCounterDataType SetMonitoringModeCount + { + get + { + return m_setMonitoringModeCount; + } + + set + { + m_setMonitoringModeCount = value; + + if (value == null) + { + m_setMonitoringModeCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SetTriggeringCount", IsRequired = false, Order = 24)] + public ServiceCounterDataType SetTriggeringCount + { + get + { + return m_setTriggeringCount; + } + + set + { + m_setTriggeringCount = value; + + if (value == null) + { + m_setTriggeringCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DeleteMonitoredItemsCount", IsRequired = false, Order = 25)] + public ServiceCounterDataType DeleteMonitoredItemsCount + { + get + { + return m_deleteMonitoredItemsCount; + } + + set + { + m_deleteMonitoredItemsCount = value; + + if (value == null) + { + m_deleteMonitoredItemsCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "CreateSubscriptionCount", IsRequired = false, Order = 26)] + public ServiceCounterDataType CreateSubscriptionCount + { + get + { + return m_createSubscriptionCount; + } + + set + { + m_createSubscriptionCount = value; + + if (value == null) + { + m_createSubscriptionCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ModifySubscriptionCount", IsRequired = false, Order = 27)] + public ServiceCounterDataType ModifySubscriptionCount + { + get + { + return m_modifySubscriptionCount; + } + + set + { + m_modifySubscriptionCount = value; + + if (value == null) + { + m_modifySubscriptionCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "SetPublishingModeCount", IsRequired = false, Order = 28)] + public ServiceCounterDataType SetPublishingModeCount + { + get + { + return m_setPublishingModeCount; + } + + set + { + m_setPublishingModeCount = value; + + if (value == null) + { + m_setPublishingModeCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "PublishCount", IsRequired = false, Order = 29)] + public ServiceCounterDataType PublishCount + { + get + { + return m_publishCount; + } + + set + { + m_publishCount = value; + + if (value == null) + { + m_publishCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "RepublishCount", IsRequired = false, Order = 30)] + public ServiceCounterDataType RepublishCount + { + get + { + return m_republishCount; + } + + set + { + m_republishCount = value; + + if (value == null) + { + m_republishCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "TransferSubscriptionsCount", IsRequired = false, Order = 31)] + public ServiceCounterDataType TransferSubscriptionsCount + { + get + { + return m_transferSubscriptionsCount; + } + + set + { + m_transferSubscriptionsCount = value; + + if (value == null) + { + m_transferSubscriptionsCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DeleteSubscriptionsCount", IsRequired = false, Order = 32)] + public ServiceCounterDataType DeleteSubscriptionsCount + { + get + { + return m_deleteSubscriptionsCount; + } + + set + { + m_deleteSubscriptionsCount = value; + + if (value == null) + { + m_deleteSubscriptionsCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "AddNodesCount", IsRequired = false, Order = 33)] + public ServiceCounterDataType AddNodesCount + { + get + { + return m_addNodesCount; + } + + set + { + m_addNodesCount = value; + + if (value == null) + { + m_addNodesCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "AddReferencesCount", IsRequired = false, Order = 34)] + public ServiceCounterDataType AddReferencesCount + { + get + { + return m_addReferencesCount; + } + + set + { + m_addReferencesCount = value; + + if (value == null) + { + m_addReferencesCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DeleteNodesCount", IsRequired = false, Order = 35)] + public ServiceCounterDataType DeleteNodesCount + { + get + { + return m_deleteNodesCount; + } + + set + { + m_deleteNodesCount = value; + + if (value == null) + { + m_deleteNodesCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "DeleteReferencesCount", IsRequired = false, Order = 36)] + public ServiceCounterDataType DeleteReferencesCount + { + get + { + return m_deleteReferencesCount; + } + + set + { + m_deleteReferencesCount = value; + + if (value == null) + { + m_deleteReferencesCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "BrowseCount", IsRequired = false, Order = 37)] + public ServiceCounterDataType BrowseCount + { + get + { + return m_browseCount; + } + + set + { + m_browseCount = value; + + if (value == null) + { + m_browseCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "BrowseNextCount", IsRequired = false, Order = 38)] + public ServiceCounterDataType BrowseNextCount + { + get + { + return m_browseNextCount; + } + + set + { + m_browseNextCount = value; + + if (value == null) + { + m_browseNextCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "TranslateBrowsePathsToNodeIdsCount", IsRequired = false, Order = 39)] + public ServiceCounterDataType TranslateBrowsePathsToNodeIdsCount + { + get + { + return m_translateBrowsePathsToNodeIdsCount; + } + + set + { + m_translateBrowsePathsToNodeIdsCount = value; + + if (value == null) + { + m_translateBrowsePathsToNodeIdsCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "QueryFirstCount", IsRequired = false, Order = 40)] + public ServiceCounterDataType QueryFirstCount + { + get + { + return m_queryFirstCount; + } + + set + { + m_queryFirstCount = value; + + if (value == null) + { + m_queryFirstCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "QueryNextCount", IsRequired = false, Order = 41)] + public ServiceCounterDataType QueryNextCount + { + get + { + return m_queryNextCount; + } + + set + { + m_queryNextCount = value; + + if (value == null) + { + m_queryNextCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "RegisterNodesCount", IsRequired = false, Order = 42)] + public ServiceCounterDataType RegisterNodesCount + { + get + { + return m_registerNodesCount; + } + + set + { + m_registerNodesCount = value; + + if (value == null) + { + m_registerNodesCount = new ServiceCounterDataType(); + } + } + } + + /// + /// + /// + [DataMember(Name = "UnregisterNodesCount", IsRequired = false, Order = 43)] + public ServiceCounterDataType UnregisterNodesCount + { + get + { + return m_unregisterNodesCount; + } + + set + { + m_unregisterNodesCount = value; + + if (value == null) + { + m_unregisterNodesCount = new ServiceCounterDataType(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SessionDiagnosticsDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SessionDiagnosticsDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SessionDiagnosticsDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("SessionId", SessionId); + encoder.WriteString("SessionName", SessionName); + encoder.WriteEncodeable("ClientDescription", ClientDescription, typeof(ApplicationDescription)); + encoder.WriteString("ServerUri", ServerUri); + encoder.WriteString("EndpointUrl", EndpointUrl); + encoder.WriteStringArray("LocaleIds", LocaleIds); + encoder.WriteDouble("ActualSessionTimeout", ActualSessionTimeout); + encoder.WriteUInt32("MaxResponseMessageSize", MaxResponseMessageSize); + encoder.WriteDateTime("ClientConnectionTime", ClientConnectionTime); + encoder.WriteDateTime("ClientLastContactTime", ClientLastContactTime); + encoder.WriteUInt32("CurrentSubscriptionsCount", CurrentSubscriptionsCount); + encoder.WriteUInt32("CurrentMonitoredItemsCount", CurrentMonitoredItemsCount); + encoder.WriteUInt32("CurrentPublishRequestsInQueue", CurrentPublishRequestsInQueue); + encoder.WriteEncodeable("TotalRequestCount", TotalRequestCount, typeof(ServiceCounterDataType)); + encoder.WriteUInt32("UnauthorizedRequestCount", UnauthorizedRequestCount); + encoder.WriteEncodeable("ReadCount", ReadCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("HistoryReadCount", HistoryReadCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("WriteCount", WriteCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("HistoryUpdateCount", HistoryUpdateCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("CallCount", CallCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("CreateMonitoredItemsCount", CreateMonitoredItemsCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("ModifyMonitoredItemsCount", ModifyMonitoredItemsCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("SetMonitoringModeCount", SetMonitoringModeCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("SetTriggeringCount", SetTriggeringCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("DeleteMonitoredItemsCount", DeleteMonitoredItemsCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("CreateSubscriptionCount", CreateSubscriptionCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("ModifySubscriptionCount", ModifySubscriptionCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("SetPublishingModeCount", SetPublishingModeCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("PublishCount", PublishCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("RepublishCount", RepublishCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("TransferSubscriptionsCount", TransferSubscriptionsCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("DeleteSubscriptionsCount", DeleteSubscriptionsCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("AddNodesCount", AddNodesCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("AddReferencesCount", AddReferencesCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("DeleteNodesCount", DeleteNodesCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("DeleteReferencesCount", DeleteReferencesCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("BrowseCount", BrowseCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("BrowseNextCount", BrowseNextCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("TranslateBrowsePathsToNodeIdsCount", TranslateBrowsePathsToNodeIdsCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("QueryFirstCount", QueryFirstCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("QueryNextCount", QueryNextCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("RegisterNodesCount", RegisterNodesCount, typeof(ServiceCounterDataType)); + encoder.WriteEncodeable("UnregisterNodesCount", UnregisterNodesCount, typeof(ServiceCounterDataType)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SessionId = decoder.ReadNodeId("SessionId"); + SessionName = decoder.ReadString("SessionName"); + ClientDescription = (ApplicationDescription)decoder.ReadEncodeable("ClientDescription", typeof(ApplicationDescription)); + ServerUri = decoder.ReadString("ServerUri"); + EndpointUrl = decoder.ReadString("EndpointUrl"); + LocaleIds = decoder.ReadStringArray("LocaleIds"); + ActualSessionTimeout = decoder.ReadDouble("ActualSessionTimeout"); + MaxResponseMessageSize = decoder.ReadUInt32("MaxResponseMessageSize"); + ClientConnectionTime = decoder.ReadDateTime("ClientConnectionTime"); + ClientLastContactTime = decoder.ReadDateTime("ClientLastContactTime"); + CurrentSubscriptionsCount = decoder.ReadUInt32("CurrentSubscriptionsCount"); + CurrentMonitoredItemsCount = decoder.ReadUInt32("CurrentMonitoredItemsCount"); + CurrentPublishRequestsInQueue = decoder.ReadUInt32("CurrentPublishRequestsInQueue"); + TotalRequestCount = (ServiceCounterDataType)decoder.ReadEncodeable("TotalRequestCount", typeof(ServiceCounterDataType)); + UnauthorizedRequestCount = decoder.ReadUInt32("UnauthorizedRequestCount"); + ReadCount = (ServiceCounterDataType)decoder.ReadEncodeable("ReadCount", typeof(ServiceCounterDataType)); + HistoryReadCount = (ServiceCounterDataType)decoder.ReadEncodeable("HistoryReadCount", typeof(ServiceCounterDataType)); + WriteCount = (ServiceCounterDataType)decoder.ReadEncodeable("WriteCount", typeof(ServiceCounterDataType)); + HistoryUpdateCount = (ServiceCounterDataType)decoder.ReadEncodeable("HistoryUpdateCount", typeof(ServiceCounterDataType)); + CallCount = (ServiceCounterDataType)decoder.ReadEncodeable("CallCount", typeof(ServiceCounterDataType)); + CreateMonitoredItemsCount = (ServiceCounterDataType)decoder.ReadEncodeable("CreateMonitoredItemsCount", typeof(ServiceCounterDataType)); + ModifyMonitoredItemsCount = (ServiceCounterDataType)decoder.ReadEncodeable("ModifyMonitoredItemsCount", typeof(ServiceCounterDataType)); + SetMonitoringModeCount = (ServiceCounterDataType)decoder.ReadEncodeable("SetMonitoringModeCount", typeof(ServiceCounterDataType)); + SetTriggeringCount = (ServiceCounterDataType)decoder.ReadEncodeable("SetTriggeringCount", typeof(ServiceCounterDataType)); + DeleteMonitoredItemsCount = (ServiceCounterDataType)decoder.ReadEncodeable("DeleteMonitoredItemsCount", typeof(ServiceCounterDataType)); + CreateSubscriptionCount = (ServiceCounterDataType)decoder.ReadEncodeable("CreateSubscriptionCount", typeof(ServiceCounterDataType)); + ModifySubscriptionCount = (ServiceCounterDataType)decoder.ReadEncodeable("ModifySubscriptionCount", typeof(ServiceCounterDataType)); + SetPublishingModeCount = (ServiceCounterDataType)decoder.ReadEncodeable("SetPublishingModeCount", typeof(ServiceCounterDataType)); + PublishCount = (ServiceCounterDataType)decoder.ReadEncodeable("PublishCount", typeof(ServiceCounterDataType)); + RepublishCount = (ServiceCounterDataType)decoder.ReadEncodeable("RepublishCount", typeof(ServiceCounterDataType)); + TransferSubscriptionsCount = (ServiceCounterDataType)decoder.ReadEncodeable("TransferSubscriptionsCount", typeof(ServiceCounterDataType)); + DeleteSubscriptionsCount = (ServiceCounterDataType)decoder.ReadEncodeable("DeleteSubscriptionsCount", typeof(ServiceCounterDataType)); + AddNodesCount = (ServiceCounterDataType)decoder.ReadEncodeable("AddNodesCount", typeof(ServiceCounterDataType)); + AddReferencesCount = (ServiceCounterDataType)decoder.ReadEncodeable("AddReferencesCount", typeof(ServiceCounterDataType)); + DeleteNodesCount = (ServiceCounterDataType)decoder.ReadEncodeable("DeleteNodesCount", typeof(ServiceCounterDataType)); + DeleteReferencesCount = (ServiceCounterDataType)decoder.ReadEncodeable("DeleteReferencesCount", typeof(ServiceCounterDataType)); + BrowseCount = (ServiceCounterDataType)decoder.ReadEncodeable("BrowseCount", typeof(ServiceCounterDataType)); + BrowseNextCount = (ServiceCounterDataType)decoder.ReadEncodeable("BrowseNextCount", typeof(ServiceCounterDataType)); + TranslateBrowsePathsToNodeIdsCount = (ServiceCounterDataType)decoder.ReadEncodeable("TranslateBrowsePathsToNodeIdsCount", typeof(ServiceCounterDataType)); + QueryFirstCount = (ServiceCounterDataType)decoder.ReadEncodeable("QueryFirstCount", typeof(ServiceCounterDataType)); + QueryNextCount = (ServiceCounterDataType)decoder.ReadEncodeable("QueryNextCount", typeof(ServiceCounterDataType)); + RegisterNodesCount = (ServiceCounterDataType)decoder.ReadEncodeable("RegisterNodesCount", typeof(ServiceCounterDataType)); + UnregisterNodesCount = (ServiceCounterDataType)decoder.ReadEncodeable("UnregisterNodesCount", typeof(ServiceCounterDataType)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SessionDiagnosticsDataType value = encodeable as SessionDiagnosticsDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_sessionId, value.m_sessionId)) return false; + if (!Utils.IsEqual(m_sessionName, value.m_sessionName)) return false; + if (!Utils.IsEqual(m_clientDescription, value.m_clientDescription)) return false; + if (!Utils.IsEqual(m_serverUri, value.m_serverUri)) return false; + if (!Utils.IsEqual(m_endpointUrl, value.m_endpointUrl)) return false; + if (!Utils.IsEqual(m_localeIds, value.m_localeIds)) return false; + if (!Utils.IsEqual(m_actualSessionTimeout, value.m_actualSessionTimeout)) return false; + if (!Utils.IsEqual(m_maxResponseMessageSize, value.m_maxResponseMessageSize)) return false; + if (!Utils.IsEqual(m_clientConnectionTime, value.m_clientConnectionTime)) return false; + if (!Utils.IsEqual(m_clientLastContactTime, value.m_clientLastContactTime)) return false; + if (!Utils.IsEqual(m_currentSubscriptionsCount, value.m_currentSubscriptionsCount)) return false; + if (!Utils.IsEqual(m_currentMonitoredItemsCount, value.m_currentMonitoredItemsCount)) return false; + if (!Utils.IsEqual(m_currentPublishRequestsInQueue, value.m_currentPublishRequestsInQueue)) return false; + if (!Utils.IsEqual(m_totalRequestCount, value.m_totalRequestCount)) return false; + if (!Utils.IsEqual(m_unauthorizedRequestCount, value.m_unauthorizedRequestCount)) return false; + if (!Utils.IsEqual(m_readCount, value.m_readCount)) return false; + if (!Utils.IsEqual(m_historyReadCount, value.m_historyReadCount)) return false; + if (!Utils.IsEqual(m_writeCount, value.m_writeCount)) return false; + if (!Utils.IsEqual(m_historyUpdateCount, value.m_historyUpdateCount)) return false; + if (!Utils.IsEqual(m_callCount, value.m_callCount)) return false; + if (!Utils.IsEqual(m_createMonitoredItemsCount, value.m_createMonitoredItemsCount)) return false; + if (!Utils.IsEqual(m_modifyMonitoredItemsCount, value.m_modifyMonitoredItemsCount)) return false; + if (!Utils.IsEqual(m_setMonitoringModeCount, value.m_setMonitoringModeCount)) return false; + if (!Utils.IsEqual(m_setTriggeringCount, value.m_setTriggeringCount)) return false; + if (!Utils.IsEqual(m_deleteMonitoredItemsCount, value.m_deleteMonitoredItemsCount)) return false; + if (!Utils.IsEqual(m_createSubscriptionCount, value.m_createSubscriptionCount)) return false; + if (!Utils.IsEqual(m_modifySubscriptionCount, value.m_modifySubscriptionCount)) return false; + if (!Utils.IsEqual(m_setPublishingModeCount, value.m_setPublishingModeCount)) return false; + if (!Utils.IsEqual(m_publishCount, value.m_publishCount)) return false; + if (!Utils.IsEqual(m_republishCount, value.m_republishCount)) return false; + if (!Utils.IsEqual(m_transferSubscriptionsCount, value.m_transferSubscriptionsCount)) return false; + if (!Utils.IsEqual(m_deleteSubscriptionsCount, value.m_deleteSubscriptionsCount)) return false; + if (!Utils.IsEqual(m_addNodesCount, value.m_addNodesCount)) return false; + if (!Utils.IsEqual(m_addReferencesCount, value.m_addReferencesCount)) return false; + if (!Utils.IsEqual(m_deleteNodesCount, value.m_deleteNodesCount)) return false; + if (!Utils.IsEqual(m_deleteReferencesCount, value.m_deleteReferencesCount)) return false; + if (!Utils.IsEqual(m_browseCount, value.m_browseCount)) return false; + if (!Utils.IsEqual(m_browseNextCount, value.m_browseNextCount)) return false; + if (!Utils.IsEqual(m_translateBrowsePathsToNodeIdsCount, value.m_translateBrowsePathsToNodeIdsCount)) return false; + if (!Utils.IsEqual(m_queryFirstCount, value.m_queryFirstCount)) return false; + if (!Utils.IsEqual(m_queryNextCount, value.m_queryNextCount)) return false; + if (!Utils.IsEqual(m_registerNodesCount, value.m_registerNodesCount)) return false; + if (!Utils.IsEqual(m_unregisterNodesCount, value.m_unregisterNodesCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SessionDiagnosticsDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SessionDiagnosticsDataType clone = (SessionDiagnosticsDataType)base.MemberwiseClone(); + + clone.m_sessionId = (NodeId)Utils.Clone(this.m_sessionId); + clone.m_sessionName = (string)Utils.Clone(this.m_sessionName); + clone.m_clientDescription = (ApplicationDescription)Utils.Clone(this.m_clientDescription); + clone.m_serverUri = (string)Utils.Clone(this.m_serverUri); + clone.m_endpointUrl = (string)Utils.Clone(this.m_endpointUrl); + clone.m_localeIds = (StringCollection)Utils.Clone(this.m_localeIds); + clone.m_actualSessionTimeout = (double)Utils.Clone(this.m_actualSessionTimeout); + clone.m_maxResponseMessageSize = (uint)Utils.Clone(this.m_maxResponseMessageSize); + clone.m_clientConnectionTime = (DateTime)Utils.Clone(this.m_clientConnectionTime); + clone.m_clientLastContactTime = (DateTime)Utils.Clone(this.m_clientLastContactTime); + clone.m_currentSubscriptionsCount = (uint)Utils.Clone(this.m_currentSubscriptionsCount); + clone.m_currentMonitoredItemsCount = (uint)Utils.Clone(this.m_currentMonitoredItemsCount); + clone.m_currentPublishRequestsInQueue = (uint)Utils.Clone(this.m_currentPublishRequestsInQueue); + clone.m_totalRequestCount = (ServiceCounterDataType)Utils.Clone(this.m_totalRequestCount); + clone.m_unauthorizedRequestCount = (uint)Utils.Clone(this.m_unauthorizedRequestCount); + clone.m_readCount = (ServiceCounterDataType)Utils.Clone(this.m_readCount); + clone.m_historyReadCount = (ServiceCounterDataType)Utils.Clone(this.m_historyReadCount); + clone.m_writeCount = (ServiceCounterDataType)Utils.Clone(this.m_writeCount); + clone.m_historyUpdateCount = (ServiceCounterDataType)Utils.Clone(this.m_historyUpdateCount); + clone.m_callCount = (ServiceCounterDataType)Utils.Clone(this.m_callCount); + clone.m_createMonitoredItemsCount = (ServiceCounterDataType)Utils.Clone(this.m_createMonitoredItemsCount); + clone.m_modifyMonitoredItemsCount = (ServiceCounterDataType)Utils.Clone(this.m_modifyMonitoredItemsCount); + clone.m_setMonitoringModeCount = (ServiceCounterDataType)Utils.Clone(this.m_setMonitoringModeCount); + clone.m_setTriggeringCount = (ServiceCounterDataType)Utils.Clone(this.m_setTriggeringCount); + clone.m_deleteMonitoredItemsCount = (ServiceCounterDataType)Utils.Clone(this.m_deleteMonitoredItemsCount); + clone.m_createSubscriptionCount = (ServiceCounterDataType)Utils.Clone(this.m_createSubscriptionCount); + clone.m_modifySubscriptionCount = (ServiceCounterDataType)Utils.Clone(this.m_modifySubscriptionCount); + clone.m_setPublishingModeCount = (ServiceCounterDataType)Utils.Clone(this.m_setPublishingModeCount); + clone.m_publishCount = (ServiceCounterDataType)Utils.Clone(this.m_publishCount); + clone.m_republishCount = (ServiceCounterDataType)Utils.Clone(this.m_republishCount); + clone.m_transferSubscriptionsCount = (ServiceCounterDataType)Utils.Clone(this.m_transferSubscriptionsCount); + clone.m_deleteSubscriptionsCount = (ServiceCounterDataType)Utils.Clone(this.m_deleteSubscriptionsCount); + clone.m_addNodesCount = (ServiceCounterDataType)Utils.Clone(this.m_addNodesCount); + clone.m_addReferencesCount = (ServiceCounterDataType)Utils.Clone(this.m_addReferencesCount); + clone.m_deleteNodesCount = (ServiceCounterDataType)Utils.Clone(this.m_deleteNodesCount); + clone.m_deleteReferencesCount = (ServiceCounterDataType)Utils.Clone(this.m_deleteReferencesCount); + clone.m_browseCount = (ServiceCounterDataType)Utils.Clone(this.m_browseCount); + clone.m_browseNextCount = (ServiceCounterDataType)Utils.Clone(this.m_browseNextCount); + clone.m_translateBrowsePathsToNodeIdsCount = (ServiceCounterDataType)Utils.Clone(this.m_translateBrowsePathsToNodeIdsCount); + clone.m_queryFirstCount = (ServiceCounterDataType)Utils.Clone(this.m_queryFirstCount); + clone.m_queryNextCount = (ServiceCounterDataType)Utils.Clone(this.m_queryNextCount); + clone.m_registerNodesCount = (ServiceCounterDataType)Utils.Clone(this.m_registerNodesCount); + clone.m_unregisterNodesCount = (ServiceCounterDataType)Utils.Clone(this.m_unregisterNodesCount); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_sessionId; + private string m_sessionName; + private ApplicationDescription m_clientDescription; + private string m_serverUri; + private string m_endpointUrl; + private StringCollection m_localeIds; + private double m_actualSessionTimeout; + private uint m_maxResponseMessageSize; + private DateTime m_clientConnectionTime; + private DateTime m_clientLastContactTime; + private uint m_currentSubscriptionsCount; + private uint m_currentMonitoredItemsCount; + private uint m_currentPublishRequestsInQueue; + private ServiceCounterDataType m_totalRequestCount; + private uint m_unauthorizedRequestCount; + private ServiceCounterDataType m_readCount; + private ServiceCounterDataType m_historyReadCount; + private ServiceCounterDataType m_writeCount; + private ServiceCounterDataType m_historyUpdateCount; + private ServiceCounterDataType m_callCount; + private ServiceCounterDataType m_createMonitoredItemsCount; + private ServiceCounterDataType m_modifyMonitoredItemsCount; + private ServiceCounterDataType m_setMonitoringModeCount; + private ServiceCounterDataType m_setTriggeringCount; + private ServiceCounterDataType m_deleteMonitoredItemsCount; + private ServiceCounterDataType m_createSubscriptionCount; + private ServiceCounterDataType m_modifySubscriptionCount; + private ServiceCounterDataType m_setPublishingModeCount; + private ServiceCounterDataType m_publishCount; + private ServiceCounterDataType m_republishCount; + private ServiceCounterDataType m_transferSubscriptionsCount; + private ServiceCounterDataType m_deleteSubscriptionsCount; + private ServiceCounterDataType m_addNodesCount; + private ServiceCounterDataType m_addReferencesCount; + private ServiceCounterDataType m_deleteNodesCount; + private ServiceCounterDataType m_deleteReferencesCount; + private ServiceCounterDataType m_browseCount; + private ServiceCounterDataType m_browseNextCount; + private ServiceCounterDataType m_translateBrowsePathsToNodeIdsCount; + private ServiceCounterDataType m_queryFirstCount; + private ServiceCounterDataType m_queryNextCount; + private ServiceCounterDataType m_registerNodesCount; + private ServiceCounterDataType m_unregisterNodesCount; + #endregion + } + + #region SessionDiagnosticsDataTypeCollection Class + /// + /// A collection of SessionDiagnosticsDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSessionDiagnosticsDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SessionDiagnosticsDataType")] + #if !NET_STANDARD + public partial class SessionDiagnosticsDataTypeCollection : List, ICloneable + #else + public partial class SessionDiagnosticsDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SessionDiagnosticsDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SessionDiagnosticsDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SessionDiagnosticsDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SessionDiagnosticsDataTypeCollection(SessionDiagnosticsDataType[] values) + { + if (values != null) + { + return new SessionDiagnosticsDataTypeCollection(values); + } + + return new SessionDiagnosticsDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SessionDiagnosticsDataType[](SessionDiagnosticsDataTypeCollection 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 (SessionDiagnosticsDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SessionDiagnosticsDataTypeCollection clone = new SessionDiagnosticsDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SessionDiagnosticsDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SessionSecurityDiagnosticsDataType Class + #if (!OPCUA_EXCLUDE_SessionSecurityDiagnosticsDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SessionSecurityDiagnosticsDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SessionSecurityDiagnosticsDataType() + { + 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_sessionId = null; + m_clientUserIdOfSession = null; + m_clientUserIdHistory = new StringCollection(); + m_authenticationMechanism = null; + m_encoding = null; + m_transportProtocol = null; + m_securityMode = MessageSecurityMode.Invalid; + m_securityPolicyUri = null; + m_clientCertificate = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SessionId", IsRequired = false, Order = 1)] + public NodeId SessionId + { + get { return m_sessionId; } + set { m_sessionId = value; } + } + + /// + [DataMember(Name = "ClientUserIdOfSession", IsRequired = false, Order = 2)] + public string ClientUserIdOfSession + { + get { return m_clientUserIdOfSession; } + set { m_clientUserIdOfSession = value; } + } + + /// + /// + /// + [DataMember(Name = "ClientUserIdHistory", IsRequired = false, Order = 3)] + public StringCollection ClientUserIdHistory + { + get + { + return m_clientUserIdHistory; + } + + set + { + m_clientUserIdHistory = value; + + if (value == null) + { + m_clientUserIdHistory = new StringCollection(); + } + } + } + + /// + [DataMember(Name = "AuthenticationMechanism", IsRequired = false, Order = 4)] + public string AuthenticationMechanism + { + get { return m_authenticationMechanism; } + set { m_authenticationMechanism = value; } + } + + /// + [DataMember(Name = "Encoding", IsRequired = false, Order = 5)] + public string Encoding + { + get { return m_encoding; } + set { m_encoding = value; } + } + + /// + [DataMember(Name = "TransportProtocol", IsRequired = false, Order = 6)] + public string TransportProtocol + { + get { return m_transportProtocol; } + set { m_transportProtocol = value; } + } + + /// + [DataMember(Name = "SecurityMode", IsRequired = false, Order = 7)] + public MessageSecurityMode SecurityMode + { + get { return m_securityMode; } + set { m_securityMode = value; } + } + + /// + [DataMember(Name = "SecurityPolicyUri", IsRequired = false, Order = 8)] + public string SecurityPolicyUri + { + get { return m_securityPolicyUri; } + set { m_securityPolicyUri = value; } + } + + /// + [DataMember(Name = "ClientCertificate", IsRequired = false, Order = 9)] + public byte[] ClientCertificate + { + get { return m_clientCertificate; } + set { m_clientCertificate = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SessionSecurityDiagnosticsDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SessionSecurityDiagnosticsDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("SessionId", SessionId); + encoder.WriteString("ClientUserIdOfSession", ClientUserIdOfSession); + encoder.WriteStringArray("ClientUserIdHistory", ClientUserIdHistory); + encoder.WriteString("AuthenticationMechanism", AuthenticationMechanism); + encoder.WriteString("Encoding", Encoding); + encoder.WriteString("TransportProtocol", TransportProtocol); + encoder.WriteEnumerated("SecurityMode", SecurityMode); + encoder.WriteString("SecurityPolicyUri", SecurityPolicyUri); + encoder.WriteByteString("ClientCertificate", ClientCertificate); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SessionId = decoder.ReadNodeId("SessionId"); + ClientUserIdOfSession = decoder.ReadString("ClientUserIdOfSession"); + ClientUserIdHistory = decoder.ReadStringArray("ClientUserIdHistory"); + AuthenticationMechanism = decoder.ReadString("AuthenticationMechanism"); + Encoding = decoder.ReadString("Encoding"); + TransportProtocol = decoder.ReadString("TransportProtocol"); + SecurityMode = (MessageSecurityMode)decoder.ReadEnumerated("SecurityMode", typeof(MessageSecurityMode)); + SecurityPolicyUri = decoder.ReadString("SecurityPolicyUri"); + ClientCertificate = decoder.ReadByteString("ClientCertificate"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SessionSecurityDiagnosticsDataType value = encodeable as SessionSecurityDiagnosticsDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_sessionId, value.m_sessionId)) return false; + if (!Utils.IsEqual(m_clientUserIdOfSession, value.m_clientUserIdOfSession)) return false; + if (!Utils.IsEqual(m_clientUserIdHistory, value.m_clientUserIdHistory)) return false; + if (!Utils.IsEqual(m_authenticationMechanism, value.m_authenticationMechanism)) return false; + if (!Utils.IsEqual(m_encoding, value.m_encoding)) return false; + if (!Utils.IsEqual(m_transportProtocol, value.m_transportProtocol)) return false; + if (!Utils.IsEqual(m_securityMode, value.m_securityMode)) return false; + if (!Utils.IsEqual(m_securityPolicyUri, value.m_securityPolicyUri)) return false; + if (!Utils.IsEqual(m_clientCertificate, value.m_clientCertificate)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SessionSecurityDiagnosticsDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SessionSecurityDiagnosticsDataType clone = (SessionSecurityDiagnosticsDataType)base.MemberwiseClone(); + + clone.m_sessionId = (NodeId)Utils.Clone(this.m_sessionId); + clone.m_clientUserIdOfSession = (string)Utils.Clone(this.m_clientUserIdOfSession); + clone.m_clientUserIdHistory = (StringCollection)Utils.Clone(this.m_clientUserIdHistory); + clone.m_authenticationMechanism = (string)Utils.Clone(this.m_authenticationMechanism); + clone.m_encoding = (string)Utils.Clone(this.m_encoding); + clone.m_transportProtocol = (string)Utils.Clone(this.m_transportProtocol); + clone.m_securityMode = (MessageSecurityMode)Utils.Clone(this.m_securityMode); + clone.m_securityPolicyUri = (string)Utils.Clone(this.m_securityPolicyUri); + clone.m_clientCertificate = (byte[])Utils.Clone(this.m_clientCertificate); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_sessionId; + private string m_clientUserIdOfSession; + private StringCollection m_clientUserIdHistory; + private string m_authenticationMechanism; + private string m_encoding; + private string m_transportProtocol; + private MessageSecurityMode m_securityMode; + private string m_securityPolicyUri; + private byte[] m_clientCertificate; + #endregion + } + + #region SessionSecurityDiagnosticsDataTypeCollection Class + /// + /// A collection of SessionSecurityDiagnosticsDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSessionSecurityDiagnosticsDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SessionSecurityDiagnosticsDataType")] + #if !NET_STANDARD + public partial class SessionSecurityDiagnosticsDataTypeCollection : List, ICloneable + #else + public partial class SessionSecurityDiagnosticsDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SessionSecurityDiagnosticsDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SessionSecurityDiagnosticsDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SessionSecurityDiagnosticsDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SessionSecurityDiagnosticsDataTypeCollection(SessionSecurityDiagnosticsDataType[] values) + { + if (values != null) + { + return new SessionSecurityDiagnosticsDataTypeCollection(values); + } + + return new SessionSecurityDiagnosticsDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SessionSecurityDiagnosticsDataType[](SessionSecurityDiagnosticsDataTypeCollection 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 (SessionSecurityDiagnosticsDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SessionSecurityDiagnosticsDataTypeCollection clone = new SessionSecurityDiagnosticsDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SessionSecurityDiagnosticsDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ServiceCounterDataType Class + #if (!OPCUA_EXCLUDE_ServiceCounterDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ServiceCounterDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ServiceCounterDataType() + { + 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_totalCount = (uint)0; + m_errorCount = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "TotalCount", IsRequired = false, Order = 1)] + public uint TotalCount + { + get { return m_totalCount; } + set { m_totalCount = value; } + } + + /// + [DataMember(Name = "ErrorCount", IsRequired = false, Order = 2)] + public uint ErrorCount + { + get { return m_errorCount; } + set { m_errorCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ServiceCounterDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ServiceCounterDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ServiceCounterDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteUInt32("TotalCount", TotalCount); + encoder.WriteUInt32("ErrorCount", ErrorCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + TotalCount = decoder.ReadUInt32("TotalCount"); + ErrorCount = decoder.ReadUInt32("ErrorCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ServiceCounterDataType value = encodeable as ServiceCounterDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_totalCount, value.m_totalCount)) return false; + if (!Utils.IsEqual(m_errorCount, value.m_errorCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ServiceCounterDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ServiceCounterDataType clone = (ServiceCounterDataType)base.MemberwiseClone(); + + clone.m_totalCount = (uint)Utils.Clone(this.m_totalCount); + clone.m_errorCount = (uint)Utils.Clone(this.m_errorCount); + + return clone; + } + #endregion + + #region Private Fields + private uint m_totalCount; + private uint m_errorCount; + #endregion + } + #endif + #endregion + + #region StatusResult Class + #if (!OPCUA_EXCLUDE_StatusResult) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class StatusResult : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public StatusResult() + { + 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_statusCode = StatusCodes.Good; + m_diagnosticInfo = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "StatusCode", IsRequired = false, Order = 1)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + [DataMember(Name = "DiagnosticInfo", IsRequired = false, Order = 2)] + public DiagnosticInfo DiagnosticInfo + { + get { return m_diagnosticInfo; } + set { m_diagnosticInfo = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.StatusResult; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.StatusResult_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.StatusResult_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteStatusCode("StatusCode", StatusCode); + encoder.WriteDiagnosticInfo("DiagnosticInfo", DiagnosticInfo); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + StatusCode = decoder.ReadStatusCode("StatusCode"); + DiagnosticInfo = decoder.ReadDiagnosticInfo("DiagnosticInfo"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + StatusResult value = encodeable as StatusResult; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_statusCode, value.m_statusCode)) return false; + if (!Utils.IsEqual(m_diagnosticInfo, value.m_diagnosticInfo)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (StatusResult)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + StatusResult clone = (StatusResult)base.MemberwiseClone(); + + clone.m_statusCode = (StatusCode)Utils.Clone(this.m_statusCode); + clone.m_diagnosticInfo = (DiagnosticInfo)Utils.Clone(this.m_diagnosticInfo); + + return clone; + } + #endregion + + #region Private Fields + private StatusCode m_statusCode; + private DiagnosticInfo m_diagnosticInfo; + #endregion + } + + #region StatusResultCollection Class + /// + /// A collection of StatusResult objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfStatusResult", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "StatusResult")] + #if !NET_STANDARD + public partial class StatusResultCollection : List, ICloneable + #else + public partial class StatusResultCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public StatusResultCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public StatusResultCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public StatusResultCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator StatusResultCollection(StatusResult[] values) + { + if (values != null) + { + return new StatusResultCollection(values); + } + + return new StatusResultCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator StatusResult[](StatusResultCollection 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 (StatusResultCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + StatusResultCollection clone = new StatusResultCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((StatusResult)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SubscriptionDiagnosticsDataType Class + #if (!OPCUA_EXCLUDE_SubscriptionDiagnosticsDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SubscriptionDiagnosticsDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SubscriptionDiagnosticsDataType() + { + 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_sessionId = null; + m_subscriptionId = (uint)0; + m_priority = (byte)0; + m_publishingInterval = (double)0; + m_maxKeepAliveCount = (uint)0; + m_maxLifetimeCount = (uint)0; + m_maxNotificationsPerPublish = (uint)0; + m_publishingEnabled = true; + m_modifyCount = (uint)0; + m_enableCount = (uint)0; + m_disableCount = (uint)0; + m_republishRequestCount = (uint)0; + m_republishMessageRequestCount = (uint)0; + m_republishMessageCount = (uint)0; + m_transferRequestCount = (uint)0; + m_transferredToAltClientCount = (uint)0; + m_transferredToSameClientCount = (uint)0; + m_publishRequestCount = (uint)0; + m_dataChangeNotificationsCount = (uint)0; + m_eventNotificationsCount = (uint)0; + m_notificationsCount = (uint)0; + m_latePublishRequestCount = (uint)0; + m_currentKeepAliveCount = (uint)0; + m_currentLifetimeCount = (uint)0; + m_unacknowledgedMessageCount = (uint)0; + m_discardedMessageCount = (uint)0; + m_monitoredItemCount = (uint)0; + m_disabledMonitoredItemCount = (uint)0; + m_monitoringQueueOverflowCount = (uint)0; + m_nextSequenceNumber = (uint)0; + m_eventQueueOverFlowCount = (uint)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "SessionId", IsRequired = false, Order = 1)] + public NodeId SessionId + { + get { return m_sessionId; } + set { m_sessionId = value; } + } + + /// + [DataMember(Name = "SubscriptionId", IsRequired = false, Order = 2)] + public uint SubscriptionId + { + get { return m_subscriptionId; } + set { m_subscriptionId = value; } + } + + /// + [DataMember(Name = "Priority", IsRequired = false, Order = 3)] + public byte Priority + { + get { return m_priority; } + set { m_priority = value; } + } + + /// + [DataMember(Name = "PublishingInterval", IsRequired = false, Order = 4)] + public double PublishingInterval + { + get { return m_publishingInterval; } + set { m_publishingInterval = value; } + } + + /// + [DataMember(Name = "MaxKeepAliveCount", IsRequired = false, Order = 5)] + public uint MaxKeepAliveCount + { + get { return m_maxKeepAliveCount; } + set { m_maxKeepAliveCount = value; } + } + + /// + [DataMember(Name = "MaxLifetimeCount", IsRequired = false, Order = 6)] + public uint MaxLifetimeCount + { + get { return m_maxLifetimeCount; } + set { m_maxLifetimeCount = value; } + } + + /// + [DataMember(Name = "MaxNotificationsPerPublish", IsRequired = false, Order = 7)] + public uint MaxNotificationsPerPublish + { + get { return m_maxNotificationsPerPublish; } + set { m_maxNotificationsPerPublish = value; } + } + + /// + [DataMember(Name = "PublishingEnabled", IsRequired = false, Order = 8)] + public bool PublishingEnabled + { + get { return m_publishingEnabled; } + set { m_publishingEnabled = value; } + } + + /// + [DataMember(Name = "ModifyCount", IsRequired = false, Order = 9)] + public uint ModifyCount + { + get { return m_modifyCount; } + set { m_modifyCount = value; } + } + + /// + [DataMember(Name = "EnableCount", IsRequired = false, Order = 10)] + public uint EnableCount + { + get { return m_enableCount; } + set { m_enableCount = value; } + } + + /// + [DataMember(Name = "DisableCount", IsRequired = false, Order = 11)] + public uint DisableCount + { + get { return m_disableCount; } + set { m_disableCount = value; } + } + + /// + [DataMember(Name = "RepublishRequestCount", IsRequired = false, Order = 12)] + public uint RepublishRequestCount + { + get { return m_republishRequestCount; } + set { m_republishRequestCount = value; } + } + + /// + [DataMember(Name = "RepublishMessageRequestCount", IsRequired = false, Order = 13)] + public uint RepublishMessageRequestCount + { + get { return m_republishMessageRequestCount; } + set { m_republishMessageRequestCount = value; } + } + + /// + [DataMember(Name = "RepublishMessageCount", IsRequired = false, Order = 14)] + public uint RepublishMessageCount + { + get { return m_republishMessageCount; } + set { m_republishMessageCount = value; } + } + + /// + [DataMember(Name = "TransferRequestCount", IsRequired = false, Order = 15)] + public uint TransferRequestCount + { + get { return m_transferRequestCount; } + set { m_transferRequestCount = value; } + } + + /// + [DataMember(Name = "TransferredToAltClientCount", IsRequired = false, Order = 16)] + public uint TransferredToAltClientCount + { + get { return m_transferredToAltClientCount; } + set { m_transferredToAltClientCount = value; } + } + + /// + [DataMember(Name = "TransferredToSameClientCount", IsRequired = false, Order = 17)] + public uint TransferredToSameClientCount + { + get { return m_transferredToSameClientCount; } + set { m_transferredToSameClientCount = value; } + } + + /// + [DataMember(Name = "PublishRequestCount", IsRequired = false, Order = 18)] + public uint PublishRequestCount + { + get { return m_publishRequestCount; } + set { m_publishRequestCount = value; } + } + + /// + [DataMember(Name = "DataChangeNotificationsCount", IsRequired = false, Order = 19)] + public uint DataChangeNotificationsCount + { + get { return m_dataChangeNotificationsCount; } + set { m_dataChangeNotificationsCount = value; } + } + + /// + [DataMember(Name = "EventNotificationsCount", IsRequired = false, Order = 20)] + public uint EventNotificationsCount + { + get { return m_eventNotificationsCount; } + set { m_eventNotificationsCount = value; } + } + + /// + [DataMember(Name = "NotificationsCount", IsRequired = false, Order = 21)] + public uint NotificationsCount + { + get { return m_notificationsCount; } + set { m_notificationsCount = value; } + } + + /// + [DataMember(Name = "LatePublishRequestCount", IsRequired = false, Order = 22)] + public uint LatePublishRequestCount + { + get { return m_latePublishRequestCount; } + set { m_latePublishRequestCount = value; } + } + + /// + [DataMember(Name = "CurrentKeepAliveCount", IsRequired = false, Order = 23)] + public uint CurrentKeepAliveCount + { + get { return m_currentKeepAliveCount; } + set { m_currentKeepAliveCount = value; } + } + + /// + [DataMember(Name = "CurrentLifetimeCount", IsRequired = false, Order = 24)] + public uint CurrentLifetimeCount + { + get { return m_currentLifetimeCount; } + set { m_currentLifetimeCount = value; } + } + + /// + [DataMember(Name = "UnacknowledgedMessageCount", IsRequired = false, Order = 25)] + public uint UnacknowledgedMessageCount + { + get { return m_unacknowledgedMessageCount; } + set { m_unacknowledgedMessageCount = value; } + } + + /// + [DataMember(Name = "DiscardedMessageCount", IsRequired = false, Order = 26)] + public uint DiscardedMessageCount + { + get { return m_discardedMessageCount; } + set { m_discardedMessageCount = value; } + } + + /// + [DataMember(Name = "MonitoredItemCount", IsRequired = false, Order = 27)] + public uint MonitoredItemCount + { + get { return m_monitoredItemCount; } + set { m_monitoredItemCount = value; } + } + + /// + [DataMember(Name = "DisabledMonitoredItemCount", IsRequired = false, Order = 28)] + public uint DisabledMonitoredItemCount + { + get { return m_disabledMonitoredItemCount; } + set { m_disabledMonitoredItemCount = value; } + } + + /// + [DataMember(Name = "MonitoringQueueOverflowCount", IsRequired = false, Order = 29)] + public uint MonitoringQueueOverflowCount + { + get { return m_monitoringQueueOverflowCount; } + set { m_monitoringQueueOverflowCount = value; } + } + + /// + [DataMember(Name = "NextSequenceNumber", IsRequired = false, Order = 30)] + public uint NextSequenceNumber + { + get { return m_nextSequenceNumber; } + set { m_nextSequenceNumber = value; } + } + + /// + [DataMember(Name = "EventQueueOverFlowCount", IsRequired = false, Order = 31)] + public uint EventQueueOverFlowCount + { + get { return m_eventQueueOverFlowCount; } + set { m_eventQueueOverFlowCount = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SubscriptionDiagnosticsDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SubscriptionDiagnosticsDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SubscriptionDiagnosticsDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("SessionId", SessionId); + encoder.WriteUInt32("SubscriptionId", SubscriptionId); + encoder.WriteByte("Priority", Priority); + encoder.WriteDouble("PublishingInterval", PublishingInterval); + encoder.WriteUInt32("MaxKeepAliveCount", MaxKeepAliveCount); + encoder.WriteUInt32("MaxLifetimeCount", MaxLifetimeCount); + encoder.WriteUInt32("MaxNotificationsPerPublish", MaxNotificationsPerPublish); + encoder.WriteBoolean("PublishingEnabled", PublishingEnabled); + encoder.WriteUInt32("ModifyCount", ModifyCount); + encoder.WriteUInt32("EnableCount", EnableCount); + encoder.WriteUInt32("DisableCount", DisableCount); + encoder.WriteUInt32("RepublishRequestCount", RepublishRequestCount); + encoder.WriteUInt32("RepublishMessageRequestCount", RepublishMessageRequestCount); + encoder.WriteUInt32("RepublishMessageCount", RepublishMessageCount); + encoder.WriteUInt32("TransferRequestCount", TransferRequestCount); + encoder.WriteUInt32("TransferredToAltClientCount", TransferredToAltClientCount); + encoder.WriteUInt32("TransferredToSameClientCount", TransferredToSameClientCount); + encoder.WriteUInt32("PublishRequestCount", PublishRequestCount); + encoder.WriteUInt32("DataChangeNotificationsCount", DataChangeNotificationsCount); + encoder.WriteUInt32("EventNotificationsCount", EventNotificationsCount); + encoder.WriteUInt32("NotificationsCount", NotificationsCount); + encoder.WriteUInt32("LatePublishRequestCount", LatePublishRequestCount); + encoder.WriteUInt32("CurrentKeepAliveCount", CurrentKeepAliveCount); + encoder.WriteUInt32("CurrentLifetimeCount", CurrentLifetimeCount); + encoder.WriteUInt32("UnacknowledgedMessageCount", UnacknowledgedMessageCount); + encoder.WriteUInt32("DiscardedMessageCount", DiscardedMessageCount); + encoder.WriteUInt32("MonitoredItemCount", MonitoredItemCount); + encoder.WriteUInt32("DisabledMonitoredItemCount", DisabledMonitoredItemCount); + encoder.WriteUInt32("MonitoringQueueOverflowCount", MonitoringQueueOverflowCount); + encoder.WriteUInt32("NextSequenceNumber", NextSequenceNumber); + encoder.WriteUInt32("EventQueueOverFlowCount", EventQueueOverFlowCount); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + SessionId = decoder.ReadNodeId("SessionId"); + SubscriptionId = decoder.ReadUInt32("SubscriptionId"); + Priority = decoder.ReadByte("Priority"); + PublishingInterval = decoder.ReadDouble("PublishingInterval"); + MaxKeepAliveCount = decoder.ReadUInt32("MaxKeepAliveCount"); + MaxLifetimeCount = decoder.ReadUInt32("MaxLifetimeCount"); + MaxNotificationsPerPublish = decoder.ReadUInt32("MaxNotificationsPerPublish"); + PublishingEnabled = decoder.ReadBoolean("PublishingEnabled"); + ModifyCount = decoder.ReadUInt32("ModifyCount"); + EnableCount = decoder.ReadUInt32("EnableCount"); + DisableCount = decoder.ReadUInt32("DisableCount"); + RepublishRequestCount = decoder.ReadUInt32("RepublishRequestCount"); + RepublishMessageRequestCount = decoder.ReadUInt32("RepublishMessageRequestCount"); + RepublishMessageCount = decoder.ReadUInt32("RepublishMessageCount"); + TransferRequestCount = decoder.ReadUInt32("TransferRequestCount"); + TransferredToAltClientCount = decoder.ReadUInt32("TransferredToAltClientCount"); + TransferredToSameClientCount = decoder.ReadUInt32("TransferredToSameClientCount"); + PublishRequestCount = decoder.ReadUInt32("PublishRequestCount"); + DataChangeNotificationsCount = decoder.ReadUInt32("DataChangeNotificationsCount"); + EventNotificationsCount = decoder.ReadUInt32("EventNotificationsCount"); + NotificationsCount = decoder.ReadUInt32("NotificationsCount"); + LatePublishRequestCount = decoder.ReadUInt32("LatePublishRequestCount"); + CurrentKeepAliveCount = decoder.ReadUInt32("CurrentKeepAliveCount"); + CurrentLifetimeCount = decoder.ReadUInt32("CurrentLifetimeCount"); + UnacknowledgedMessageCount = decoder.ReadUInt32("UnacknowledgedMessageCount"); + DiscardedMessageCount = decoder.ReadUInt32("DiscardedMessageCount"); + MonitoredItemCount = decoder.ReadUInt32("MonitoredItemCount"); + DisabledMonitoredItemCount = decoder.ReadUInt32("DisabledMonitoredItemCount"); + MonitoringQueueOverflowCount = decoder.ReadUInt32("MonitoringQueueOverflowCount"); + NextSequenceNumber = decoder.ReadUInt32("NextSequenceNumber"); + EventQueueOverFlowCount = decoder.ReadUInt32("EventQueueOverFlowCount"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SubscriptionDiagnosticsDataType value = encodeable as SubscriptionDiagnosticsDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_sessionId, value.m_sessionId)) return false; + if (!Utils.IsEqual(m_subscriptionId, value.m_subscriptionId)) return false; + if (!Utils.IsEqual(m_priority, value.m_priority)) return false; + if (!Utils.IsEqual(m_publishingInterval, value.m_publishingInterval)) return false; + if (!Utils.IsEqual(m_maxKeepAliveCount, value.m_maxKeepAliveCount)) return false; + if (!Utils.IsEqual(m_maxLifetimeCount, value.m_maxLifetimeCount)) return false; + if (!Utils.IsEqual(m_maxNotificationsPerPublish, value.m_maxNotificationsPerPublish)) return false; + if (!Utils.IsEqual(m_publishingEnabled, value.m_publishingEnabled)) return false; + if (!Utils.IsEqual(m_modifyCount, value.m_modifyCount)) return false; + if (!Utils.IsEqual(m_enableCount, value.m_enableCount)) return false; + if (!Utils.IsEqual(m_disableCount, value.m_disableCount)) return false; + if (!Utils.IsEqual(m_republishRequestCount, value.m_republishRequestCount)) return false; + if (!Utils.IsEqual(m_republishMessageRequestCount, value.m_republishMessageRequestCount)) return false; + if (!Utils.IsEqual(m_republishMessageCount, value.m_republishMessageCount)) return false; + if (!Utils.IsEqual(m_transferRequestCount, value.m_transferRequestCount)) return false; + if (!Utils.IsEqual(m_transferredToAltClientCount, value.m_transferredToAltClientCount)) return false; + if (!Utils.IsEqual(m_transferredToSameClientCount, value.m_transferredToSameClientCount)) return false; + if (!Utils.IsEqual(m_publishRequestCount, value.m_publishRequestCount)) return false; + if (!Utils.IsEqual(m_dataChangeNotificationsCount, value.m_dataChangeNotificationsCount)) return false; + if (!Utils.IsEqual(m_eventNotificationsCount, value.m_eventNotificationsCount)) return false; + if (!Utils.IsEqual(m_notificationsCount, value.m_notificationsCount)) return false; + if (!Utils.IsEqual(m_latePublishRequestCount, value.m_latePublishRequestCount)) return false; + if (!Utils.IsEqual(m_currentKeepAliveCount, value.m_currentKeepAliveCount)) return false; + if (!Utils.IsEqual(m_currentLifetimeCount, value.m_currentLifetimeCount)) return false; + if (!Utils.IsEqual(m_unacknowledgedMessageCount, value.m_unacknowledgedMessageCount)) return false; + if (!Utils.IsEqual(m_discardedMessageCount, value.m_discardedMessageCount)) return false; + if (!Utils.IsEqual(m_monitoredItemCount, value.m_monitoredItemCount)) return false; + if (!Utils.IsEqual(m_disabledMonitoredItemCount, value.m_disabledMonitoredItemCount)) return false; + if (!Utils.IsEqual(m_monitoringQueueOverflowCount, value.m_monitoringQueueOverflowCount)) return false; + if (!Utils.IsEqual(m_nextSequenceNumber, value.m_nextSequenceNumber)) return false; + if (!Utils.IsEqual(m_eventQueueOverFlowCount, value.m_eventQueueOverFlowCount)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SubscriptionDiagnosticsDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SubscriptionDiagnosticsDataType clone = (SubscriptionDiagnosticsDataType)base.MemberwiseClone(); + + clone.m_sessionId = (NodeId)Utils.Clone(this.m_sessionId); + clone.m_subscriptionId = (uint)Utils.Clone(this.m_subscriptionId); + clone.m_priority = (byte)Utils.Clone(this.m_priority); + clone.m_publishingInterval = (double)Utils.Clone(this.m_publishingInterval); + clone.m_maxKeepAliveCount = (uint)Utils.Clone(this.m_maxKeepAliveCount); + clone.m_maxLifetimeCount = (uint)Utils.Clone(this.m_maxLifetimeCount); + clone.m_maxNotificationsPerPublish = (uint)Utils.Clone(this.m_maxNotificationsPerPublish); + clone.m_publishingEnabled = (bool)Utils.Clone(this.m_publishingEnabled); + clone.m_modifyCount = (uint)Utils.Clone(this.m_modifyCount); + clone.m_enableCount = (uint)Utils.Clone(this.m_enableCount); + clone.m_disableCount = (uint)Utils.Clone(this.m_disableCount); + clone.m_republishRequestCount = (uint)Utils.Clone(this.m_republishRequestCount); + clone.m_republishMessageRequestCount = (uint)Utils.Clone(this.m_republishMessageRequestCount); + clone.m_republishMessageCount = (uint)Utils.Clone(this.m_republishMessageCount); + clone.m_transferRequestCount = (uint)Utils.Clone(this.m_transferRequestCount); + clone.m_transferredToAltClientCount = (uint)Utils.Clone(this.m_transferredToAltClientCount); + clone.m_transferredToSameClientCount = (uint)Utils.Clone(this.m_transferredToSameClientCount); + clone.m_publishRequestCount = (uint)Utils.Clone(this.m_publishRequestCount); + clone.m_dataChangeNotificationsCount = (uint)Utils.Clone(this.m_dataChangeNotificationsCount); + clone.m_eventNotificationsCount = (uint)Utils.Clone(this.m_eventNotificationsCount); + clone.m_notificationsCount = (uint)Utils.Clone(this.m_notificationsCount); + clone.m_latePublishRequestCount = (uint)Utils.Clone(this.m_latePublishRequestCount); + clone.m_currentKeepAliveCount = (uint)Utils.Clone(this.m_currentKeepAliveCount); + clone.m_currentLifetimeCount = (uint)Utils.Clone(this.m_currentLifetimeCount); + clone.m_unacknowledgedMessageCount = (uint)Utils.Clone(this.m_unacknowledgedMessageCount); + clone.m_discardedMessageCount = (uint)Utils.Clone(this.m_discardedMessageCount); + clone.m_monitoredItemCount = (uint)Utils.Clone(this.m_monitoredItemCount); + clone.m_disabledMonitoredItemCount = (uint)Utils.Clone(this.m_disabledMonitoredItemCount); + clone.m_monitoringQueueOverflowCount = (uint)Utils.Clone(this.m_monitoringQueueOverflowCount); + clone.m_nextSequenceNumber = (uint)Utils.Clone(this.m_nextSequenceNumber); + clone.m_eventQueueOverFlowCount = (uint)Utils.Clone(this.m_eventQueueOverFlowCount); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_sessionId; + private uint m_subscriptionId; + private byte m_priority; + private double m_publishingInterval; + private uint m_maxKeepAliveCount; + private uint m_maxLifetimeCount; + private uint m_maxNotificationsPerPublish; + private bool m_publishingEnabled; + private uint m_modifyCount; + private uint m_enableCount; + private uint m_disableCount; + private uint m_republishRequestCount; + private uint m_republishMessageRequestCount; + private uint m_republishMessageCount; + private uint m_transferRequestCount; + private uint m_transferredToAltClientCount; + private uint m_transferredToSameClientCount; + private uint m_publishRequestCount; + private uint m_dataChangeNotificationsCount; + private uint m_eventNotificationsCount; + private uint m_notificationsCount; + private uint m_latePublishRequestCount; + private uint m_currentKeepAliveCount; + private uint m_currentLifetimeCount; + private uint m_unacknowledgedMessageCount; + private uint m_discardedMessageCount; + private uint m_monitoredItemCount; + private uint m_disabledMonitoredItemCount; + private uint m_monitoringQueueOverflowCount; + private uint m_nextSequenceNumber; + private uint m_eventQueueOverFlowCount; + #endregion + } + + #region SubscriptionDiagnosticsDataTypeCollection Class + /// + /// A collection of SubscriptionDiagnosticsDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSubscriptionDiagnosticsDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SubscriptionDiagnosticsDataType")] + #if !NET_STANDARD + public partial class SubscriptionDiagnosticsDataTypeCollection : List, ICloneable + #else + public partial class SubscriptionDiagnosticsDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SubscriptionDiagnosticsDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SubscriptionDiagnosticsDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SubscriptionDiagnosticsDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SubscriptionDiagnosticsDataTypeCollection(SubscriptionDiagnosticsDataType[] values) + { + if (values != null) + { + return new SubscriptionDiagnosticsDataTypeCollection(values); + } + + return new SubscriptionDiagnosticsDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SubscriptionDiagnosticsDataType[](SubscriptionDiagnosticsDataTypeCollection 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 (SubscriptionDiagnosticsDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SubscriptionDiagnosticsDataTypeCollection clone = new SubscriptionDiagnosticsDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SubscriptionDiagnosticsDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region ModelChangeStructureVerbMask Enumeration + #if (!OPCUA_EXCLUDE_ModelChangeStructureVerbMask) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum ModelChangeStructureVerbMask + { + /// + [EnumMember(Value = "NodeAdded_1")] + NodeAdded = 1, + + /// + [EnumMember(Value = "NodeDeleted_2")] + NodeDeleted = 2, + + /// + [EnumMember(Value = "ReferenceAdded_4")] + ReferenceAdded = 4, + + /// + [EnumMember(Value = "ReferenceDeleted_8")] + ReferenceDeleted = 8, + + /// + [EnumMember(Value = "DataTypeChanged_16")] + DataTypeChanged = 16, + } + #endif + #endregion + + #region ModelChangeStructureDataType Class + #if (!OPCUA_EXCLUDE_ModelChangeStructureDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ModelChangeStructureDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ModelChangeStructureDataType() + { + 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_affected = null; + m_affectedType = null; + m_verb = (byte)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Affected", IsRequired = false, Order = 1)] + public NodeId Affected + { + get { return m_affected; } + set { m_affected = value; } + } + + /// + [DataMember(Name = "AffectedType", IsRequired = false, Order = 2)] + public NodeId AffectedType + { + get { return m_affectedType; } + set { m_affectedType = value; } + } + + /// + [DataMember(Name = "Verb", IsRequired = false, Order = 3)] + public byte Verb + { + get { return m_verb; } + set { m_verb = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ModelChangeStructureDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ModelChangeStructureDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ModelChangeStructureDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("Affected", Affected); + encoder.WriteNodeId("AffectedType", AffectedType); + encoder.WriteByte("Verb", Verb); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Affected = decoder.ReadNodeId("Affected"); + AffectedType = decoder.ReadNodeId("AffectedType"); + Verb = decoder.ReadByte("Verb"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ModelChangeStructureDataType value = encodeable as ModelChangeStructureDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_affected, value.m_affected)) return false; + if (!Utils.IsEqual(m_affectedType, value.m_affectedType)) return false; + if (!Utils.IsEqual(m_verb, value.m_verb)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ModelChangeStructureDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ModelChangeStructureDataType clone = (ModelChangeStructureDataType)base.MemberwiseClone(); + + clone.m_affected = (NodeId)Utils.Clone(this.m_affected); + clone.m_affectedType = (NodeId)Utils.Clone(this.m_affectedType); + clone.m_verb = (byte)Utils.Clone(this.m_verb); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_affected; + private NodeId m_affectedType; + private byte m_verb; + #endregion + } + + #region ModelChangeStructureDataTypeCollection Class + /// + /// A collection of ModelChangeStructureDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfModelChangeStructureDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "ModelChangeStructureDataType")] + #if !NET_STANDARD + public partial class ModelChangeStructureDataTypeCollection : List, ICloneable + #else + public partial class ModelChangeStructureDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ModelChangeStructureDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ModelChangeStructureDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ModelChangeStructureDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ModelChangeStructureDataTypeCollection(ModelChangeStructureDataType[] values) + { + if (values != null) + { + return new ModelChangeStructureDataTypeCollection(values); + } + + return new ModelChangeStructureDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ModelChangeStructureDataType[](ModelChangeStructureDataTypeCollection 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 (ModelChangeStructureDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ModelChangeStructureDataTypeCollection clone = new ModelChangeStructureDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ModelChangeStructureDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region SemanticChangeStructureDataType Class + #if (!OPCUA_EXCLUDE_SemanticChangeStructureDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class SemanticChangeStructureDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public SemanticChangeStructureDataType() + { + 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_affected = null; + m_affectedType = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Affected", IsRequired = false, Order = 1)] + public NodeId Affected + { + get { return m_affected; } + set { m_affected = value; } + } + + /// + [DataMember(Name = "AffectedType", IsRequired = false, Order = 2)] + public NodeId AffectedType + { + get { return m_affectedType; } + set { m_affectedType = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.SemanticChangeStructureDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.SemanticChangeStructureDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.SemanticChangeStructureDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("Affected", Affected); + encoder.WriteNodeId("AffectedType", AffectedType); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Affected = decoder.ReadNodeId("Affected"); + AffectedType = decoder.ReadNodeId("AffectedType"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + SemanticChangeStructureDataType value = encodeable as SemanticChangeStructureDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_affected, value.m_affected)) return false; + if (!Utils.IsEqual(m_affectedType, value.m_affectedType)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (SemanticChangeStructureDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + SemanticChangeStructureDataType clone = (SemanticChangeStructureDataType)base.MemberwiseClone(); + + clone.m_affected = (NodeId)Utils.Clone(this.m_affected); + clone.m_affectedType = (NodeId)Utils.Clone(this.m_affectedType); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_affected; + private NodeId m_affectedType; + #endregion + } + + #region SemanticChangeStructureDataTypeCollection Class + /// + /// A collection of SemanticChangeStructureDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfSemanticChangeStructureDataType", Namespace = Opc.Ua.Namespaces.OpcUaXsd, ItemName = "SemanticChangeStructureDataType")] + #if !NET_STANDARD + public partial class SemanticChangeStructureDataTypeCollection : List, ICloneable + #else + public partial class SemanticChangeStructureDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public SemanticChangeStructureDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public SemanticChangeStructureDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public SemanticChangeStructureDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator SemanticChangeStructureDataTypeCollection(SemanticChangeStructureDataType[] values) + { + if (values != null) + { + return new SemanticChangeStructureDataTypeCollection(values); + } + + return new SemanticChangeStructureDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator SemanticChangeStructureDataType[](SemanticChangeStructureDataTypeCollection 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 (SemanticChangeStructureDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + SemanticChangeStructureDataTypeCollection clone = new SemanticChangeStructureDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((SemanticChangeStructureDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion + + #region Range Class + #if (!OPCUA_EXCLUDE_Range) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Range : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Range() + { + 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_low = (double)0; + m_high = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Low", IsRequired = false, Order = 1)] + public double Low + { + get { return m_low; } + set { m_low = value; } + } + + /// + [DataMember(Name = "High", IsRequired = false, Order = 2)] + public double High + { + get { return m_high; } + set { m_high = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Range; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Range_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Range_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("Low", Low); + encoder.WriteDouble("High", High); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Low = decoder.ReadDouble("Low"); + High = decoder.ReadDouble("High"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Range value = encodeable as Range; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_low, value.m_low)) return false; + if (!Utils.IsEqual(m_high, value.m_high)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Range)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Range clone = (Range)base.MemberwiseClone(); + + clone.m_low = (double)Utils.Clone(this.m_low); + clone.m_high = (double)Utils.Clone(this.m_high); + + return clone; + } + #endregion + + #region Private Fields + private double m_low; + private double m_high; + #endregion + } + #endif + #endregion + + #region EUInformation Class + #if (!OPCUA_EXCLUDE_EUInformation) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class EUInformation : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public EUInformation() + { + 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_namespaceUri = null; + m_unitId = (int)0; + m_displayName = null; + m_description = null; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "NamespaceUri", IsRequired = false, Order = 1)] + public string NamespaceUri + { + get { return m_namespaceUri; } + set { m_namespaceUri = value; } + } + + /// + [DataMember(Name = "UnitId", IsRequired = false, Order = 2)] + public int UnitId + { + get { return m_unitId; } + set { m_unitId = value; } + } + + /// + [DataMember(Name = "DisplayName", IsRequired = false, Order = 3)] + public LocalizedText DisplayName + { + get { return m_displayName; } + set { m_displayName = value; } + } + + /// + [DataMember(Name = "Description", IsRequired = false, Order = 4)] + public LocalizedText Description + { + get { return m_description; } + set { m_description = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.EUInformation; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.EUInformation_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.EUInformation_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("NamespaceUri", NamespaceUri); + encoder.WriteInt32("UnitId", UnitId); + encoder.WriteLocalizedText("DisplayName", DisplayName); + encoder.WriteLocalizedText("Description", Description); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + NamespaceUri = decoder.ReadString("NamespaceUri"); + UnitId = decoder.ReadInt32("UnitId"); + DisplayName = decoder.ReadLocalizedText("DisplayName"); + Description = decoder.ReadLocalizedText("Description"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + EUInformation value = encodeable as EUInformation; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_namespaceUri, value.m_namespaceUri)) return false; + if (!Utils.IsEqual(m_unitId, value.m_unitId)) return false; + if (!Utils.IsEqual(m_displayName, value.m_displayName)) return false; + if (!Utils.IsEqual(m_description, value.m_description)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (EUInformation)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + EUInformation clone = (EUInformation)base.MemberwiseClone(); + + clone.m_namespaceUri = (string)Utils.Clone(this.m_namespaceUri); + clone.m_unitId = (int)Utils.Clone(this.m_unitId); + clone.m_displayName = (LocalizedText)Utils.Clone(this.m_displayName); + clone.m_description = (LocalizedText)Utils.Clone(this.m_description); + + return clone; + } + #endregion + + #region Private Fields + private string m_namespaceUri; + private int m_unitId; + private LocalizedText m_displayName; + private LocalizedText m_description; + #endregion + } + #endif + #endregion + + #region AxisScaleEnumeration Enumeration + #if (!OPCUA_EXCLUDE_AxisScaleEnumeration) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum AxisScaleEnumeration + { + /// + [EnumMember(Value = "Linear_0")] + Linear = 0, + + /// + [EnumMember(Value = "Log_1")] + Log = 1, + + /// + [EnumMember(Value = "Ln_2")] + Ln = 2, + } + #endif + #endregion + + #region ComplexNumberType Class + #if (!OPCUA_EXCLUDE_ComplexNumberType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ComplexNumberType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ComplexNumberType() + { + 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_real = (float)0; + m_imaginary = (float)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Real", IsRequired = false, Order = 1)] + public float Real + { + get { return m_real; } + set { m_real = value; } + } + + /// + [DataMember(Name = "Imaginary", IsRequired = false, Order = 2)] + public float Imaginary + { + get { return m_imaginary; } + set { m_imaginary = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ComplexNumberType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ComplexNumberType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ComplexNumberType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteFloat("Real", Real); + encoder.WriteFloat("Imaginary", Imaginary); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Real = decoder.ReadFloat("Real"); + Imaginary = decoder.ReadFloat("Imaginary"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ComplexNumberType value = encodeable as ComplexNumberType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_real, value.m_real)) return false; + if (!Utils.IsEqual(m_imaginary, value.m_imaginary)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ComplexNumberType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ComplexNumberType clone = (ComplexNumberType)base.MemberwiseClone(); + + clone.m_real = (float)Utils.Clone(this.m_real); + clone.m_imaginary = (float)Utils.Clone(this.m_imaginary); + + return clone; + } + #endregion + + #region Private Fields + private float m_real; + private float m_imaginary; + #endregion + } + #endif + #endregion + + #region DoubleComplexNumberType Class + #if (!OPCUA_EXCLUDE_DoubleComplexNumberType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class DoubleComplexNumberType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public DoubleComplexNumberType() + { + 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_real = (double)0; + m_imaginary = (double)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Real", IsRequired = false, Order = 1)] + public double Real + { + get { return m_real; } + set { m_real = value; } + } + + /// + [DataMember(Name = "Imaginary", IsRequired = false, Order = 2)] + public double Imaginary + { + get { return m_imaginary; } + set { m_imaginary = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.DoubleComplexNumberType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.DoubleComplexNumberType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.DoubleComplexNumberType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("Real", Real); + encoder.WriteDouble("Imaginary", Imaginary); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Real = decoder.ReadDouble("Real"); + Imaginary = decoder.ReadDouble("Imaginary"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + DoubleComplexNumberType value = encodeable as DoubleComplexNumberType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_real, value.m_real)) return false; + if (!Utils.IsEqual(m_imaginary, value.m_imaginary)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (DoubleComplexNumberType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + DoubleComplexNumberType clone = (DoubleComplexNumberType)base.MemberwiseClone(); + + clone.m_real = (double)Utils.Clone(this.m_real); + clone.m_imaginary = (double)Utils.Clone(this.m_imaginary); + + return clone; + } + #endregion + + #region Private Fields + private double m_real; + private double m_imaginary; + #endregion + } + #endif + #endregion + + #region AxisInformation Class + #if (!OPCUA_EXCLUDE_AxisInformation) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class AxisInformation : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public AxisInformation() + { + 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_engineeringUnits = new EUInformation(); + m_eURange = new Range(); + m_title = null; + m_axisScaleType = AxisScaleEnumeration.Linear; + m_axisSteps = new DoubleCollection(); + } + #endregion + + #region Public Properties + /// + /// + /// + [DataMember(Name = "EngineeringUnits", IsRequired = false, Order = 1)] + public EUInformation EngineeringUnits + { + get + { + return m_engineeringUnits; + } + + set + { + m_engineeringUnits = value; + + if (value == null) + { + m_engineeringUnits = new EUInformation(); + } + } + } + + /// + /// + /// + [DataMember(Name = "EURange", IsRequired = false, Order = 2)] + public Range EURange + { + get + { + return m_eURange; + } + + set + { + m_eURange = value; + + if (value == null) + { + m_eURange = new Range(); + } + } + } + + /// + [DataMember(Name = "Title", IsRequired = false, Order = 3)] + public LocalizedText Title + { + get { return m_title; } + set { m_title = value; } + } + + /// + [DataMember(Name = "AxisScaleType", IsRequired = false, Order = 4)] + public AxisScaleEnumeration AxisScaleType + { + get { return m_axisScaleType; } + set { m_axisScaleType = value; } + } + + /// + /// + /// + [DataMember(Name = "AxisSteps", IsRequired = false, Order = 5)] + public DoubleCollection AxisSteps + { + get + { + return m_axisSteps; + } + + set + { + m_axisSteps = value; + + if (value == null) + { + m_axisSteps = new DoubleCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.AxisInformation; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.AxisInformation_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.AxisInformation_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteEncodeable("EngineeringUnits", EngineeringUnits, typeof(EUInformation)); + encoder.WriteEncodeable("EURange", EURange, typeof(Range)); + encoder.WriteLocalizedText("Title", Title); + encoder.WriteEnumerated("AxisScaleType", AxisScaleType); + encoder.WriteDoubleArray("AxisSteps", AxisSteps); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + EngineeringUnits = (EUInformation)decoder.ReadEncodeable("EngineeringUnits", typeof(EUInformation)); + EURange = (Range)decoder.ReadEncodeable("EURange", typeof(Range)); + Title = decoder.ReadLocalizedText("Title"); + AxisScaleType = (AxisScaleEnumeration)decoder.ReadEnumerated("AxisScaleType", typeof(AxisScaleEnumeration)); + AxisSteps = decoder.ReadDoubleArray("AxisSteps"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + AxisInformation value = encodeable as AxisInformation; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_engineeringUnits, value.m_engineeringUnits)) return false; + if (!Utils.IsEqual(m_eURange, value.m_eURange)) return false; + if (!Utils.IsEqual(m_title, value.m_title)) return false; + if (!Utils.IsEqual(m_axisScaleType, value.m_axisScaleType)) return false; + if (!Utils.IsEqual(m_axisSteps, value.m_axisSteps)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (AxisInformation)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + AxisInformation clone = (AxisInformation)base.MemberwiseClone(); + + clone.m_engineeringUnits = (EUInformation)Utils.Clone(this.m_engineeringUnits); + clone.m_eURange = (Range)Utils.Clone(this.m_eURange); + clone.m_title = (LocalizedText)Utils.Clone(this.m_title); + clone.m_axisScaleType = (AxisScaleEnumeration)Utils.Clone(this.m_axisScaleType); + clone.m_axisSteps = (DoubleCollection)Utils.Clone(this.m_axisSteps); + + return clone; + } + #endregion + + #region Private Fields + private EUInformation m_engineeringUnits; + private Range m_eURange; + private LocalizedText m_title; + private AxisScaleEnumeration m_axisScaleType; + private DoubleCollection m_axisSteps; + #endregion + } + #endif + #endregion + + #region XVType Class + #if (!OPCUA_EXCLUDE_XVType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class XVType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public XVType() + { + 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_x = (double)0; + m_value = (float)0; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "X", IsRequired = false, Order = 1)] + public double X + { + get { return m_x; } + set { m_x = value; } + } + + /// + [DataMember(Name = "Value", IsRequired = false, Order = 2)] + public float Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.XVType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.XVType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.XVType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteDouble("X", X); + encoder.WriteFloat("Value", Value); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + X = decoder.ReadDouble("X"); + Value = decoder.ReadFloat("Value"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + XVType value = encodeable as XVType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_x, value.m_x)) return false; + if (!Utils.IsEqual(m_value, value.m_value)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (XVType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + XVType clone = (XVType)base.MemberwiseClone(); + + clone.m_x = (double)Utils.Clone(this.m_x); + clone.m_value = (float)Utils.Clone(this.m_value); + + return clone; + } + #endregion + + #region Private Fields + private double m_x; + private float m_value; + #endregion + } + #endif + #endregion + + #region ProgramDiagnosticDataType Class + #if (!OPCUA_EXCLUDE_ProgramDiagnosticDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ProgramDiagnosticDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ProgramDiagnosticDataType() + { + 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_createSessionId = null; + m_createClientName = null; + m_invocationCreationTime = DateTime.MinValue; + m_lastTransitionTime = DateTime.MinValue; + m_lastMethodCall = null; + m_lastMethodSessionId = null; + m_lastMethodInputArguments = new ArgumentCollection(); + m_lastMethodOutputArguments = new ArgumentCollection(); + m_lastMethodCallTime = DateTime.MinValue; + m_lastMethodReturnStatus = new StatusResult(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "CreateSessionId", IsRequired = false, Order = 1)] + public NodeId CreateSessionId + { + get { return m_createSessionId; } + set { m_createSessionId = value; } + } + + /// + [DataMember(Name = "CreateClientName", IsRequired = false, Order = 2)] + public string CreateClientName + { + get { return m_createClientName; } + set { m_createClientName = value; } + } + + /// + [DataMember(Name = "InvocationCreationTime", IsRequired = false, Order = 3)] + public DateTime InvocationCreationTime + { + get { return m_invocationCreationTime; } + set { m_invocationCreationTime = value; } + } + + /// + [DataMember(Name = "LastTransitionTime", IsRequired = false, Order = 4)] + public DateTime LastTransitionTime + { + get { return m_lastTransitionTime; } + set { m_lastTransitionTime = value; } + } + + /// + [DataMember(Name = "LastMethodCall", IsRequired = false, Order = 5)] + public string LastMethodCall + { + get { return m_lastMethodCall; } + set { m_lastMethodCall = value; } + } + + /// + [DataMember(Name = "LastMethodSessionId", IsRequired = false, Order = 6)] + public NodeId LastMethodSessionId + { + get { return m_lastMethodSessionId; } + set { m_lastMethodSessionId = value; } + } + + /// + /// + /// + [DataMember(Name = "LastMethodInputArguments", IsRequired = false, Order = 7)] + public ArgumentCollection LastMethodInputArguments + { + get + { + return m_lastMethodInputArguments; + } + + set + { + m_lastMethodInputArguments = value; + + if (value == null) + { + m_lastMethodInputArguments = new ArgumentCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LastMethodOutputArguments", IsRequired = false, Order = 8)] + public ArgumentCollection LastMethodOutputArguments + { + get + { + return m_lastMethodOutputArguments; + } + + set + { + m_lastMethodOutputArguments = value; + + if (value == null) + { + m_lastMethodOutputArguments = new ArgumentCollection(); + } + } + } + + /// + [DataMember(Name = "LastMethodCallTime", IsRequired = false, Order = 9)] + public DateTime LastMethodCallTime + { + get { return m_lastMethodCallTime; } + set { m_lastMethodCallTime = value; } + } + + /// + /// + /// + [DataMember(Name = "LastMethodReturnStatus", IsRequired = false, Order = 10)] + public StatusResult LastMethodReturnStatus + { + get + { + return m_lastMethodReturnStatus; + } + + set + { + m_lastMethodReturnStatus = value; + + if (value == null) + { + m_lastMethodReturnStatus = new StatusResult(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ProgramDiagnosticDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ProgramDiagnosticDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ProgramDiagnosticDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("CreateSessionId", CreateSessionId); + encoder.WriteString("CreateClientName", CreateClientName); + encoder.WriteDateTime("InvocationCreationTime", InvocationCreationTime); + encoder.WriteDateTime("LastTransitionTime", LastTransitionTime); + encoder.WriteString("LastMethodCall", LastMethodCall); + encoder.WriteNodeId("LastMethodSessionId", LastMethodSessionId); + encoder.WriteEncodeableArray("LastMethodInputArguments", LastMethodInputArguments.ToArray(), typeof(Argument)); + encoder.WriteEncodeableArray("LastMethodOutputArguments", LastMethodOutputArguments.ToArray(), typeof(Argument)); + encoder.WriteDateTime("LastMethodCallTime", LastMethodCallTime); + encoder.WriteEncodeable("LastMethodReturnStatus", LastMethodReturnStatus, typeof(StatusResult)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + CreateSessionId = decoder.ReadNodeId("CreateSessionId"); + CreateClientName = decoder.ReadString("CreateClientName"); + InvocationCreationTime = decoder.ReadDateTime("InvocationCreationTime"); + LastTransitionTime = decoder.ReadDateTime("LastTransitionTime"); + LastMethodCall = decoder.ReadString("LastMethodCall"); + LastMethodSessionId = decoder.ReadNodeId("LastMethodSessionId"); + LastMethodInputArguments = (ArgumentCollection)decoder.ReadEncodeableArray("LastMethodInputArguments", typeof(Argument)); + LastMethodOutputArguments = (ArgumentCollection)decoder.ReadEncodeableArray("LastMethodOutputArguments", typeof(Argument)); + LastMethodCallTime = decoder.ReadDateTime("LastMethodCallTime"); + LastMethodReturnStatus = (StatusResult)decoder.ReadEncodeable("LastMethodReturnStatus", typeof(StatusResult)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ProgramDiagnosticDataType value = encodeable as ProgramDiagnosticDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_createSessionId, value.m_createSessionId)) return false; + if (!Utils.IsEqual(m_createClientName, value.m_createClientName)) return false; + if (!Utils.IsEqual(m_invocationCreationTime, value.m_invocationCreationTime)) return false; + if (!Utils.IsEqual(m_lastTransitionTime, value.m_lastTransitionTime)) return false; + if (!Utils.IsEqual(m_lastMethodCall, value.m_lastMethodCall)) return false; + if (!Utils.IsEqual(m_lastMethodSessionId, value.m_lastMethodSessionId)) return false; + if (!Utils.IsEqual(m_lastMethodInputArguments, value.m_lastMethodInputArguments)) return false; + if (!Utils.IsEqual(m_lastMethodOutputArguments, value.m_lastMethodOutputArguments)) return false; + if (!Utils.IsEqual(m_lastMethodCallTime, value.m_lastMethodCallTime)) return false; + if (!Utils.IsEqual(m_lastMethodReturnStatus, value.m_lastMethodReturnStatus)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ProgramDiagnosticDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ProgramDiagnosticDataType clone = (ProgramDiagnosticDataType)base.MemberwiseClone(); + + clone.m_createSessionId = (NodeId)Utils.Clone(this.m_createSessionId); + clone.m_createClientName = (string)Utils.Clone(this.m_createClientName); + clone.m_invocationCreationTime = (DateTime)Utils.Clone(this.m_invocationCreationTime); + clone.m_lastTransitionTime = (DateTime)Utils.Clone(this.m_lastTransitionTime); + clone.m_lastMethodCall = (string)Utils.Clone(this.m_lastMethodCall); + clone.m_lastMethodSessionId = (NodeId)Utils.Clone(this.m_lastMethodSessionId); + clone.m_lastMethodInputArguments = (ArgumentCollection)Utils.Clone(this.m_lastMethodInputArguments); + clone.m_lastMethodOutputArguments = (ArgumentCollection)Utils.Clone(this.m_lastMethodOutputArguments); + clone.m_lastMethodCallTime = (DateTime)Utils.Clone(this.m_lastMethodCallTime); + clone.m_lastMethodReturnStatus = (StatusResult)Utils.Clone(this.m_lastMethodReturnStatus); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_createSessionId; + private string m_createClientName; + private DateTime m_invocationCreationTime; + private DateTime m_lastTransitionTime; + private string m_lastMethodCall; + private NodeId m_lastMethodSessionId; + private ArgumentCollection m_lastMethodInputArguments; + private ArgumentCollection m_lastMethodOutputArguments; + private DateTime m_lastMethodCallTime; + private StatusResult m_lastMethodReturnStatus; + #endregion + } + #endif + #endregion + + #region ProgramDiagnostic2DataType Class + #if (!OPCUA_EXCLUDE_ProgramDiagnostic2DataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class ProgramDiagnostic2DataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ProgramDiagnostic2DataType() + { + 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_createSessionId = null; + m_createClientName = null; + m_invocationCreationTime = DateTime.MinValue; + m_lastTransitionTime = DateTime.MinValue; + m_lastMethodCall = null; + m_lastMethodSessionId = null; + m_lastMethodInputArguments = new ArgumentCollection(); + m_lastMethodOutputArguments = new ArgumentCollection(); + m_lastMethodInputValues = new VariantCollection(); + m_lastMethodOutputValues = new VariantCollection(); + m_lastMethodCallTime = DateTime.MinValue; + m_lastMethodReturnStatus = new StatusResult(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "CreateSessionId", IsRequired = false, Order = 1)] + public NodeId CreateSessionId + { + get { return m_createSessionId; } + set { m_createSessionId = value; } + } + + /// + [DataMember(Name = "CreateClientName", IsRequired = false, Order = 2)] + public string CreateClientName + { + get { return m_createClientName; } + set { m_createClientName = value; } + } + + /// + [DataMember(Name = "InvocationCreationTime", IsRequired = false, Order = 3)] + public DateTime InvocationCreationTime + { + get { return m_invocationCreationTime; } + set { m_invocationCreationTime = value; } + } + + /// + [DataMember(Name = "LastTransitionTime", IsRequired = false, Order = 4)] + public DateTime LastTransitionTime + { + get { return m_lastTransitionTime; } + set { m_lastTransitionTime = value; } + } + + /// + [DataMember(Name = "LastMethodCall", IsRequired = false, Order = 5)] + public string LastMethodCall + { + get { return m_lastMethodCall; } + set { m_lastMethodCall = value; } + } + + /// + [DataMember(Name = "LastMethodSessionId", IsRequired = false, Order = 6)] + public NodeId LastMethodSessionId + { + get { return m_lastMethodSessionId; } + set { m_lastMethodSessionId = value; } + } + + /// + /// + /// + [DataMember(Name = "LastMethodInputArguments", IsRequired = false, Order = 7)] + public ArgumentCollection LastMethodInputArguments + { + get + { + return m_lastMethodInputArguments; + } + + set + { + m_lastMethodInputArguments = value; + + if (value == null) + { + m_lastMethodInputArguments = new ArgumentCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LastMethodOutputArguments", IsRequired = false, Order = 8)] + public ArgumentCollection LastMethodOutputArguments + { + get + { + return m_lastMethodOutputArguments; + } + + set + { + m_lastMethodOutputArguments = value; + + if (value == null) + { + m_lastMethodOutputArguments = new ArgumentCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LastMethodInputValues", IsRequired = false, Order = 9)] + public VariantCollection LastMethodInputValues + { + get + { + return m_lastMethodInputValues; + } + + set + { + m_lastMethodInputValues = value; + + if (value == null) + { + m_lastMethodInputValues = new VariantCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "LastMethodOutputValues", IsRequired = false, Order = 10)] + public VariantCollection LastMethodOutputValues + { + get + { + return m_lastMethodOutputValues; + } + + set + { + m_lastMethodOutputValues = value; + + if (value == null) + { + m_lastMethodOutputValues = new VariantCollection(); + } + } + } + + /// + [DataMember(Name = "LastMethodCallTime", IsRequired = false, Order = 11)] + public DateTime LastMethodCallTime + { + get { return m_lastMethodCallTime; } + set { m_lastMethodCallTime = value; } + } + + /// + /// + /// + [DataMember(Name = "LastMethodReturnStatus", IsRequired = false, Order = 12)] + public StatusResult LastMethodReturnStatus + { + get + { + return m_lastMethodReturnStatus; + } + + set + { + m_lastMethodReturnStatus = value; + + if (value == null) + { + m_lastMethodReturnStatus = new StatusResult(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ProgramDiagnostic2DataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ProgramDiagnostic2DataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ProgramDiagnostic2DataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteNodeId("CreateSessionId", CreateSessionId); + encoder.WriteString("CreateClientName", CreateClientName); + encoder.WriteDateTime("InvocationCreationTime", InvocationCreationTime); + encoder.WriteDateTime("LastTransitionTime", LastTransitionTime); + encoder.WriteString("LastMethodCall", LastMethodCall); + encoder.WriteNodeId("LastMethodSessionId", LastMethodSessionId); + encoder.WriteEncodeableArray("LastMethodInputArguments", LastMethodInputArguments.ToArray(), typeof(Argument)); + encoder.WriteEncodeableArray("LastMethodOutputArguments", LastMethodOutputArguments.ToArray(), typeof(Argument)); + encoder.WriteVariantArray("LastMethodInputValues", LastMethodInputValues); + encoder.WriteVariantArray("LastMethodOutputValues", LastMethodOutputValues); + encoder.WriteDateTime("LastMethodCallTime", LastMethodCallTime); + encoder.WriteEncodeable("LastMethodReturnStatus", LastMethodReturnStatus, typeof(StatusResult)); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + CreateSessionId = decoder.ReadNodeId("CreateSessionId"); + CreateClientName = decoder.ReadString("CreateClientName"); + InvocationCreationTime = decoder.ReadDateTime("InvocationCreationTime"); + LastTransitionTime = decoder.ReadDateTime("LastTransitionTime"); + LastMethodCall = decoder.ReadString("LastMethodCall"); + LastMethodSessionId = decoder.ReadNodeId("LastMethodSessionId"); + LastMethodInputArguments = (ArgumentCollection)decoder.ReadEncodeableArray("LastMethodInputArguments", typeof(Argument)); + LastMethodOutputArguments = (ArgumentCollection)decoder.ReadEncodeableArray("LastMethodOutputArguments", typeof(Argument)); + LastMethodInputValues = decoder.ReadVariantArray("LastMethodInputValues"); + LastMethodOutputValues = decoder.ReadVariantArray("LastMethodOutputValues"); + LastMethodCallTime = decoder.ReadDateTime("LastMethodCallTime"); + LastMethodReturnStatus = (StatusResult)decoder.ReadEncodeable("LastMethodReturnStatus", typeof(StatusResult)); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ProgramDiagnostic2DataType value = encodeable as ProgramDiagnostic2DataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_createSessionId, value.m_createSessionId)) return false; + if (!Utils.IsEqual(m_createClientName, value.m_createClientName)) return false; + if (!Utils.IsEqual(m_invocationCreationTime, value.m_invocationCreationTime)) return false; + if (!Utils.IsEqual(m_lastTransitionTime, value.m_lastTransitionTime)) return false; + if (!Utils.IsEqual(m_lastMethodCall, value.m_lastMethodCall)) return false; + if (!Utils.IsEqual(m_lastMethodSessionId, value.m_lastMethodSessionId)) return false; + if (!Utils.IsEqual(m_lastMethodInputArguments, value.m_lastMethodInputArguments)) return false; + if (!Utils.IsEqual(m_lastMethodOutputArguments, value.m_lastMethodOutputArguments)) return false; + if (!Utils.IsEqual(m_lastMethodInputValues, value.m_lastMethodInputValues)) return false; + if (!Utils.IsEqual(m_lastMethodOutputValues, value.m_lastMethodOutputValues)) return false; + if (!Utils.IsEqual(m_lastMethodCallTime, value.m_lastMethodCallTime)) return false; + if (!Utils.IsEqual(m_lastMethodReturnStatus, value.m_lastMethodReturnStatus)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ProgramDiagnostic2DataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ProgramDiagnostic2DataType clone = (ProgramDiagnostic2DataType)base.MemberwiseClone(); + + clone.m_createSessionId = (NodeId)Utils.Clone(this.m_createSessionId); + clone.m_createClientName = (string)Utils.Clone(this.m_createClientName); + clone.m_invocationCreationTime = (DateTime)Utils.Clone(this.m_invocationCreationTime); + clone.m_lastTransitionTime = (DateTime)Utils.Clone(this.m_lastTransitionTime); + clone.m_lastMethodCall = (string)Utils.Clone(this.m_lastMethodCall); + clone.m_lastMethodSessionId = (NodeId)Utils.Clone(this.m_lastMethodSessionId); + clone.m_lastMethodInputArguments = (ArgumentCollection)Utils.Clone(this.m_lastMethodInputArguments); + clone.m_lastMethodOutputArguments = (ArgumentCollection)Utils.Clone(this.m_lastMethodOutputArguments); + clone.m_lastMethodInputValues = (VariantCollection)Utils.Clone(this.m_lastMethodInputValues); + clone.m_lastMethodOutputValues = (VariantCollection)Utils.Clone(this.m_lastMethodOutputValues); + clone.m_lastMethodCallTime = (DateTime)Utils.Clone(this.m_lastMethodCallTime); + clone.m_lastMethodReturnStatus = (StatusResult)Utils.Clone(this.m_lastMethodReturnStatus); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_createSessionId; + private string m_createClientName; + private DateTime m_invocationCreationTime; + private DateTime m_lastTransitionTime; + private string m_lastMethodCall; + private NodeId m_lastMethodSessionId; + private ArgumentCollection m_lastMethodInputArguments; + private ArgumentCollection m_lastMethodOutputArguments; + private VariantCollection m_lastMethodInputValues; + private VariantCollection m_lastMethodOutputValues; + private DateTime m_lastMethodCallTime; + private StatusResult m_lastMethodReturnStatus; + #endregion + } + #endif + #endregion + + #region Annotation Class + #if (!OPCUA_EXCLUDE_Annotation) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public partial class Annotation : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public Annotation() + { + 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_message = null; + m_userName = null; + m_annotationTime = DateTime.MinValue; + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "Message", IsRequired = false, Order = 1)] + public string Message + { + get { return m_message; } + set { m_message = value; } + } + + /// + [DataMember(Name = "UserName", IsRequired = false, Order = 2)] + public string UserName + { + get { return m_userName; } + set { m_userName = value; } + } + + /// + [DataMember(Name = "AnnotationTime", IsRequired = false, Order = 3)] + public DateTime AnnotationTime + { + get { return m_annotationTime; } + set { m_annotationTime = value; } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.Annotation; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.Annotation_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.Annotation_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + encoder.WriteString("Message", Message); + encoder.WriteString("UserName", UserName); + encoder.WriteDateTime("AnnotationTime", AnnotationTime); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Namespaces.OpcUaXsd); + + Message = decoder.ReadString("Message"); + UserName = decoder.ReadString("UserName"); + AnnotationTime = decoder.ReadDateTime("AnnotationTime"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + Annotation value = encodeable as Annotation; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_message, value.m_message)) return false; + if (!Utils.IsEqual(m_userName, value.m_userName)) return false; + if (!Utils.IsEqual(m_annotationTime, value.m_annotationTime)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (Annotation)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + Annotation clone = (Annotation)base.MemberwiseClone(); + + clone.m_message = (string)Utils.Clone(this.m_message); + clone.m_userName = (string)Utils.Clone(this.m_userName); + clone.m_annotationTime = (DateTime)Utils.Clone(this.m_annotationTime); + + return clone; + } + #endregion + + #region Private Fields + private string m_message; + private string m_userName; + private DateTime m_annotationTime; + #endregion + } + #endif + #endregion + + #region ExceptionDeviationFormat Enumeration + #if (!OPCUA_EXCLUDE_ExceptionDeviationFormat) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] + public enum ExceptionDeviationFormat + { + /// + [EnumMember(Value = "AbsoluteValue_0")] + AbsoluteValue = 0, + + /// + [EnumMember(Value = "PercentOfValue_1")] + PercentOfValue = 1, + + /// + [EnumMember(Value = "PercentOfRange_2")] + PercentOfRange = 2, + + /// + [EnumMember(Value = "PercentOfEURange_3")] + PercentOfEURange = 3, + + /// + [EnumMember(Value = "Unknown_4")] + Unknown = 4, + } + #endif + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Endpoints.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Endpoints.cs new file mode 100644 index 00000000..b01f2a99 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Endpoints.cs @@ -0,0 +1,4820 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Xml; +using System.Threading; +using System.Security.Principal; +using System.ServiceModel; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + #region SessionEndpoint Class + /// + /// A endpoint object used by clients to access a UA service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + #if !NET_STANDARD + [ServiceMessageContextBehavior()] + [ServiceBehavior(Namespace = Namespaces.OpcUaWsdl, InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)] + #endif + public partial class SessionEndpoint : EndpointBase, ISessionEndpoint, IDiscoveryEndpoint + { + #region Constructors + /// + /// Initializes the object when it is created by the WCF framework. + /// + public SessionEndpoint() + { + this.CreateKnownTypes(); + } + + /// + /// Initializes the when it is created directly. + /// + public SessionEndpoint(IServiceHostBase host) : base(host) + { + this.CreateKnownTypes(); + } + + /// + /// Initializes a new instance of the class. + /// + /// The server. + public SessionEndpoint(ServerBase server) : base(server) + { + this.CreateKnownTypes(); + } + #endregion + + #region Public Members + /// + /// The UA server instance that the endpoint is connected to. + /// + protected ISessionServer ServerInstance + { + get + { + if (ServiceResult.IsBad(ServerError)) + { + throw new ServiceResultException(ServerError); + } + + return ServerForContext as ISessionServer; + } + } + #endregion + + #region ISessionEndpoint Members + #region FindServers Service + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + public IServiceResponse FindServers(IServiceRequest incoming) + { + FindServersResponse response = null; + + try + { + OnRequestReceived(incoming); + + FindServersRequest request = (FindServersRequest)incoming; + + ApplicationDescriptionCollection servers = null; + + response = new FindServersResponse(); + + response.ResponseHeader = ServerInstance.FindServers( + request.RequestHeader, + request.EndpointUrl, + request.LocaleIds, + request.ServerUris, + out servers); + + response.Servers = servers; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the FindServers service. + /// + public virtual FindServersResponseMessage FindServers(FindServersMessage request) + { + FindServersResponse response = null; + + try + { + // OnRequestReceived(message.FindServersRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (FindServersResponse)FindServers(request.FindServersRequest); + // OnResponseSent(response); + return new FindServersResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.FindServersRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the FindServers service. + /// + public virtual IAsyncResult BeginFindServers(FindServersMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.FindServersRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.FindServersRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.FindServersRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the FindServers service to complete. + /// + public virtual FindServersResponseMessage EndFindServers(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new FindServersResponseMessage((FindServersResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region FindServersOnNetwork Service + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + public IServiceResponse FindServersOnNetwork(IServiceRequest incoming) + { + FindServersOnNetworkResponse response = null; + + try + { + OnRequestReceived(incoming); + + FindServersOnNetworkRequest request = (FindServersOnNetworkRequest)incoming; + + DateTime lastCounterResetTime = DateTime.MinValue; + ServerOnNetworkCollection servers = null; + + response = new FindServersOnNetworkResponse(); + + response.ResponseHeader = ServerInstance.FindServersOnNetwork( + request.RequestHeader, + request.StartingRecordId, + request.MaxRecordsToReturn, + request.ServerCapabilityFilter, + out lastCounterResetTime, + out servers); + + response.LastCounterResetTime = lastCounterResetTime; + response.Servers = servers; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the FindServersOnNetwork service. + /// + public virtual FindServersOnNetworkResponseMessage FindServersOnNetwork(FindServersOnNetworkMessage request) + { + FindServersOnNetworkResponse response = null; + + try + { + // OnRequestReceived(message.FindServersOnNetworkRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (FindServersOnNetworkResponse)FindServersOnNetwork(request.FindServersOnNetworkRequest); + // OnResponseSent(response); + return new FindServersOnNetworkResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.FindServersOnNetworkRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the FindServersOnNetwork service. + /// + public virtual IAsyncResult BeginFindServersOnNetwork(FindServersOnNetworkMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.FindServersOnNetworkRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.FindServersOnNetworkRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.FindServersOnNetworkRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the FindServersOnNetwork service to complete. + /// + public virtual FindServersOnNetworkResponseMessage EndFindServersOnNetwork(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new FindServersOnNetworkResponseMessage((FindServersOnNetworkResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region GetEndpoints Service + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + public IServiceResponse GetEndpoints(IServiceRequest incoming) + { + GetEndpointsResponse response = null; + + try + { + OnRequestReceived(incoming); + + GetEndpointsRequest request = (GetEndpointsRequest)incoming; + + EndpointDescriptionCollection endpoints = null; + + response = new GetEndpointsResponse(); + + response.ResponseHeader = ServerInstance.GetEndpoints( + request.RequestHeader, + request.EndpointUrl, + request.LocaleIds, + request.ProfileUris, + out endpoints); + + response.Endpoints = endpoints; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the GetEndpoints service. + /// + public virtual GetEndpointsResponseMessage GetEndpoints(GetEndpointsMessage request) + { + GetEndpointsResponse response = null; + + try + { + // OnRequestReceived(message.GetEndpointsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (GetEndpointsResponse)GetEndpoints(request.GetEndpointsRequest); + // OnResponseSent(response); + return new GetEndpointsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.GetEndpointsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the GetEndpoints service. + /// + public virtual IAsyncResult BeginGetEndpoints(GetEndpointsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.GetEndpointsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.GetEndpointsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.GetEndpointsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the GetEndpoints service to complete. + /// + public virtual GetEndpointsResponseMessage EndGetEndpoints(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new GetEndpointsResponseMessage((GetEndpointsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region CreateSession Service + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// Invokes the CreateSession service. + /// + public IServiceResponse CreateSession(IServiceRequest incoming) + { + CreateSessionResponse response = null; + + try + { + OnRequestReceived(incoming); + + CreateSessionRequest request = (CreateSessionRequest)incoming; + + NodeId sessionId = null; + NodeId authenticationToken = null; + double revisedSessionTimeout = 0; + byte[] serverNonce = null; + byte[] serverCertificate = null; + EndpointDescriptionCollection serverEndpoints = null; + SignedSoftwareCertificateCollection serverSoftwareCertificates = null; + SignatureData serverSignature = null; + uint maxRequestMessageSize = 0; + + response = new CreateSessionResponse(); + + response.ResponseHeader = ServerInstance.CreateSession( + request.RequestHeader, + request.ClientDescription, + request.ServerUri, + request.EndpointUrl, + request.SessionName, + request.ClientNonce, + request.ClientCertificate, + request.RequestedSessionTimeout, + request.MaxResponseMessageSize, + out sessionId, + out authenticationToken, + out revisedSessionTimeout, + out serverNonce, + out serverCertificate, + out serverEndpoints, + out serverSoftwareCertificates, + out serverSignature, + out maxRequestMessageSize); + + response.SessionId = sessionId; + response.AuthenticationToken = authenticationToken; + response.RevisedSessionTimeout = revisedSessionTimeout; + response.ServerNonce = serverNonce; + response.ServerCertificate = serverCertificate; + response.ServerEndpoints = serverEndpoints; + response.ServerSoftwareCertificates = serverSoftwareCertificates; + response.ServerSignature = serverSignature; + response.MaxRequestMessageSize = maxRequestMessageSize; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the CreateSession service. + /// + public virtual CreateSessionResponseMessage CreateSession(CreateSessionMessage request) + { + CreateSessionResponse response = null; + + try + { + // OnRequestReceived(message.CreateSessionRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (CreateSessionResponse)CreateSession(request.CreateSessionRequest); + // OnResponseSent(response); + return new CreateSessionResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.CreateSessionRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the CreateSession service. + /// + public virtual IAsyncResult BeginCreateSession(CreateSessionMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.CreateSessionRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.CreateSessionRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.CreateSessionRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the CreateSession service to complete. + /// + public virtual CreateSessionResponseMessage EndCreateSession(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new CreateSessionResponseMessage((CreateSessionResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region ActivateSession Service + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// Invokes the ActivateSession service. + /// + public IServiceResponse ActivateSession(IServiceRequest incoming) + { + ActivateSessionResponse response = null; + + try + { + OnRequestReceived(incoming); + + ActivateSessionRequest request = (ActivateSessionRequest)incoming; + + byte[] serverNonce = null; + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new ActivateSessionResponse(); + + response.ResponseHeader = ServerInstance.ActivateSession( + request.RequestHeader, + request.ClientSignature, + request.ClientSoftwareCertificates, + request.LocaleIds, + request.UserIdentityToken, + request.UserTokenSignature, + out serverNonce, + out results, + out diagnosticInfos); + + response.ServerNonce = serverNonce; + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the ActivateSession service. + /// + public virtual ActivateSessionResponseMessage ActivateSession(ActivateSessionMessage request) + { + ActivateSessionResponse response = null; + + try + { + // OnRequestReceived(message.ActivateSessionRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (ActivateSessionResponse)ActivateSession(request.ActivateSessionRequest); + // OnResponseSent(response); + return new ActivateSessionResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.ActivateSessionRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the ActivateSession service. + /// + public virtual IAsyncResult BeginActivateSession(ActivateSessionMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.ActivateSessionRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.ActivateSessionRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.ActivateSessionRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the ActivateSession service to complete. + /// + public virtual ActivateSessionResponseMessage EndActivateSession(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new ActivateSessionResponseMessage((ActivateSessionResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region CloseSession Service + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// Invokes the CloseSession service. + /// + public IServiceResponse CloseSession(IServiceRequest incoming) + { + CloseSessionResponse response = null; + + try + { + OnRequestReceived(incoming); + + CloseSessionRequest request = (CloseSessionRequest)incoming; + + + response = new CloseSessionResponse(); + + response.ResponseHeader = ServerInstance.CloseSession( + request.RequestHeader, + request.DeleteSubscriptions); + + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the CloseSession service. + /// + public virtual CloseSessionResponseMessage CloseSession(CloseSessionMessage request) + { + CloseSessionResponse response = null; + + try + { + // OnRequestReceived(message.CloseSessionRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (CloseSessionResponse)CloseSession(request.CloseSessionRequest); + // OnResponseSent(response); + return new CloseSessionResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.CloseSessionRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the CloseSession service. + /// + public virtual IAsyncResult BeginCloseSession(CloseSessionMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.CloseSessionRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.CloseSessionRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.CloseSessionRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the CloseSession service to complete. + /// + public virtual CloseSessionResponseMessage EndCloseSession(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new CloseSessionResponseMessage((CloseSessionResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Cancel Service + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// Invokes the Cancel service. + /// + public IServiceResponse Cancel(IServiceRequest incoming) + { + CancelResponse response = null; + + try + { + OnRequestReceived(incoming); + + CancelRequest request = (CancelRequest)incoming; + + uint cancelCount = 0; + + response = new CancelResponse(); + + response.ResponseHeader = ServerInstance.Cancel( + request.RequestHeader, + request.RequestHandle, + out cancelCount); + + response.CancelCount = cancelCount; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Cancel service. + /// + public virtual CancelResponseMessage Cancel(CancelMessage request) + { + CancelResponse response = null; + + try + { + // OnRequestReceived(message.CancelRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (CancelResponse)Cancel(request.CancelRequest); + // OnResponseSent(response); + return new CancelResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.CancelRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Cancel service. + /// + public virtual IAsyncResult BeginCancel(CancelMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.CancelRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.CancelRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.CancelRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Cancel service to complete. + /// + public virtual CancelResponseMessage EndCancel(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new CancelResponseMessage((CancelResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region AddNodes Service + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// Invokes the AddNodes service. + /// + public IServiceResponse AddNodes(IServiceRequest incoming) + { + AddNodesResponse response = null; + + try + { + OnRequestReceived(incoming); + + AddNodesRequest request = (AddNodesRequest)incoming; + + AddNodesResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new AddNodesResponse(); + + response.ResponseHeader = ServerInstance.AddNodes( + request.RequestHeader, + request.NodesToAdd, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the AddNodes service. + /// + public virtual AddNodesResponseMessage AddNodes(AddNodesMessage request) + { + AddNodesResponse response = null; + + try + { + // OnRequestReceived(message.AddNodesRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (AddNodesResponse)AddNodes(request.AddNodesRequest); + // OnResponseSent(response); + return new AddNodesResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.AddNodesRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the AddNodes service. + /// + public virtual IAsyncResult BeginAddNodes(AddNodesMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.AddNodesRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.AddNodesRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.AddNodesRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the AddNodes service to complete. + /// + public virtual AddNodesResponseMessage EndAddNodes(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new AddNodesResponseMessage((AddNodesResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region AddReferences Service + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// Invokes the AddReferences service. + /// + public IServiceResponse AddReferences(IServiceRequest incoming) + { + AddReferencesResponse response = null; + + try + { + OnRequestReceived(incoming); + + AddReferencesRequest request = (AddReferencesRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new AddReferencesResponse(); + + response.ResponseHeader = ServerInstance.AddReferences( + request.RequestHeader, + request.ReferencesToAdd, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the AddReferences service. + /// + public virtual AddReferencesResponseMessage AddReferences(AddReferencesMessage request) + { + AddReferencesResponse response = null; + + try + { + // OnRequestReceived(message.AddReferencesRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (AddReferencesResponse)AddReferences(request.AddReferencesRequest); + // OnResponseSent(response); + return new AddReferencesResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.AddReferencesRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the AddReferences service. + /// + public virtual IAsyncResult BeginAddReferences(AddReferencesMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.AddReferencesRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.AddReferencesRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.AddReferencesRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the AddReferences service to complete. + /// + public virtual AddReferencesResponseMessage EndAddReferences(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new AddReferencesResponseMessage((AddReferencesResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region DeleteNodes Service + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// Invokes the DeleteNodes service. + /// + public IServiceResponse DeleteNodes(IServiceRequest incoming) + { + DeleteNodesResponse response = null; + + try + { + OnRequestReceived(incoming); + + DeleteNodesRequest request = (DeleteNodesRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new DeleteNodesResponse(); + + response.ResponseHeader = ServerInstance.DeleteNodes( + request.RequestHeader, + request.NodesToDelete, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the DeleteNodes service. + /// + public virtual DeleteNodesResponseMessage DeleteNodes(DeleteNodesMessage request) + { + DeleteNodesResponse response = null; + + try + { + // OnRequestReceived(message.DeleteNodesRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (DeleteNodesResponse)DeleteNodes(request.DeleteNodesRequest); + // OnResponseSent(response); + return new DeleteNodesResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.DeleteNodesRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the DeleteNodes service. + /// + public virtual IAsyncResult BeginDeleteNodes(DeleteNodesMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.DeleteNodesRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.DeleteNodesRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.DeleteNodesRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the DeleteNodes service to complete. + /// + public virtual DeleteNodesResponseMessage EndDeleteNodes(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new DeleteNodesResponseMessage((DeleteNodesResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region DeleteReferences Service + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// Invokes the DeleteReferences service. + /// + public IServiceResponse DeleteReferences(IServiceRequest incoming) + { + DeleteReferencesResponse response = null; + + try + { + OnRequestReceived(incoming); + + DeleteReferencesRequest request = (DeleteReferencesRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new DeleteReferencesResponse(); + + response.ResponseHeader = ServerInstance.DeleteReferences( + request.RequestHeader, + request.ReferencesToDelete, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the DeleteReferences service. + /// + public virtual DeleteReferencesResponseMessage DeleteReferences(DeleteReferencesMessage request) + { + DeleteReferencesResponse response = null; + + try + { + // OnRequestReceived(message.DeleteReferencesRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (DeleteReferencesResponse)DeleteReferences(request.DeleteReferencesRequest); + // OnResponseSent(response); + return new DeleteReferencesResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.DeleteReferencesRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the DeleteReferences service. + /// + public virtual IAsyncResult BeginDeleteReferences(DeleteReferencesMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.DeleteReferencesRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.DeleteReferencesRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.DeleteReferencesRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the DeleteReferences service to complete. + /// + public virtual DeleteReferencesResponseMessage EndDeleteReferences(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new DeleteReferencesResponseMessage((DeleteReferencesResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Browse Service + #if (!OPCUA_EXCLUDE_Browse) + /// + /// Invokes the Browse service. + /// + public IServiceResponse Browse(IServiceRequest incoming) + { + BrowseResponse response = null; + + try + { + OnRequestReceived(incoming); + + BrowseRequest request = (BrowseRequest)incoming; + + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new BrowseResponse(); + + response.ResponseHeader = ServerInstance.Browse( + request.RequestHeader, + request.View, + request.RequestedMaxReferencesPerNode, + request.NodesToBrowse, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Browse service. + /// + public virtual BrowseResponseMessage Browse(BrowseMessage request) + { + BrowseResponse response = null; + + try + { + // OnRequestReceived(message.BrowseRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (BrowseResponse)Browse(request.BrowseRequest); + // OnResponseSent(response); + return new BrowseResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.BrowseRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Browse service. + /// + public virtual IAsyncResult BeginBrowse(BrowseMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.BrowseRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.BrowseRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.BrowseRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Browse service to complete. + /// + public virtual BrowseResponseMessage EndBrowse(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new BrowseResponseMessage((BrowseResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region BrowseNext Service + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// Invokes the BrowseNext service. + /// + public IServiceResponse BrowseNext(IServiceRequest incoming) + { + BrowseNextResponse response = null; + + try + { + OnRequestReceived(incoming); + + BrowseNextRequest request = (BrowseNextRequest)incoming; + + BrowseResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new BrowseNextResponse(); + + response.ResponseHeader = ServerInstance.BrowseNext( + request.RequestHeader, + request.ReleaseContinuationPoints, + request.ContinuationPoints, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the BrowseNext service. + /// + public virtual BrowseNextResponseMessage BrowseNext(BrowseNextMessage request) + { + BrowseNextResponse response = null; + + try + { + // OnRequestReceived(message.BrowseNextRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (BrowseNextResponse)BrowseNext(request.BrowseNextRequest); + // OnResponseSent(response); + return new BrowseNextResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.BrowseNextRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the BrowseNext service. + /// + public virtual IAsyncResult BeginBrowseNext(BrowseNextMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.BrowseNextRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.BrowseNextRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.BrowseNextRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the BrowseNext service to complete. + /// + public virtual BrowseNextResponseMessage EndBrowseNext(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new BrowseNextResponseMessage((BrowseNextResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region TranslateBrowsePathsToNodeIds Service + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// Invokes the TranslateBrowsePathsToNodeIds service. + /// + public IServiceResponse TranslateBrowsePathsToNodeIds(IServiceRequest incoming) + { + TranslateBrowsePathsToNodeIdsResponse response = null; + + try + { + OnRequestReceived(incoming); + + TranslateBrowsePathsToNodeIdsRequest request = (TranslateBrowsePathsToNodeIdsRequest)incoming; + + BrowsePathResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new TranslateBrowsePathsToNodeIdsResponse(); + + response.ResponseHeader = ServerInstance.TranslateBrowsePathsToNodeIds( + request.RequestHeader, + request.BrowsePaths, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the TranslateBrowsePathsToNodeIds service. + /// + public virtual TranslateBrowsePathsToNodeIdsResponseMessage TranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request) + { + TranslateBrowsePathsToNodeIdsResponse response = null; + + try + { + // OnRequestReceived(message.TranslateBrowsePathsToNodeIdsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (TranslateBrowsePathsToNodeIdsResponse)TranslateBrowsePathsToNodeIds(request.TranslateBrowsePathsToNodeIdsRequest); + // OnResponseSent(response); + return new TranslateBrowsePathsToNodeIdsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.TranslateBrowsePathsToNodeIdsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the TranslateBrowsePathsToNodeIds service. + /// + public virtual IAsyncResult BeginTranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.TranslateBrowsePathsToNodeIdsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.TranslateBrowsePathsToNodeIdsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.TranslateBrowsePathsToNodeIdsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the TranslateBrowsePathsToNodeIds service to complete. + /// + public virtual TranslateBrowsePathsToNodeIdsResponseMessage EndTranslateBrowsePathsToNodeIds(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new TranslateBrowsePathsToNodeIdsResponseMessage((TranslateBrowsePathsToNodeIdsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region RegisterNodes Service + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// Invokes the RegisterNodes service. + /// + public IServiceResponse RegisterNodes(IServiceRequest incoming) + { + RegisterNodesResponse response = null; + + try + { + OnRequestReceived(incoming); + + RegisterNodesRequest request = (RegisterNodesRequest)incoming; + + NodeIdCollection registeredNodeIds = null; + + response = new RegisterNodesResponse(); + + response.ResponseHeader = ServerInstance.RegisterNodes( + request.RequestHeader, + request.NodesToRegister, + out registeredNodeIds); + + response.RegisteredNodeIds = registeredNodeIds; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the RegisterNodes service. + /// + public virtual RegisterNodesResponseMessage RegisterNodes(RegisterNodesMessage request) + { + RegisterNodesResponse response = null; + + try + { + // OnRequestReceived(message.RegisterNodesRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (RegisterNodesResponse)RegisterNodes(request.RegisterNodesRequest); + // OnResponseSent(response); + return new RegisterNodesResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.RegisterNodesRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the RegisterNodes service. + /// + public virtual IAsyncResult BeginRegisterNodes(RegisterNodesMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.RegisterNodesRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.RegisterNodesRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.RegisterNodesRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the RegisterNodes service to complete. + /// + public virtual RegisterNodesResponseMessage EndRegisterNodes(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new RegisterNodesResponseMessage((RegisterNodesResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region UnregisterNodes Service + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// Invokes the UnregisterNodes service. + /// + public IServiceResponse UnregisterNodes(IServiceRequest incoming) + { + UnregisterNodesResponse response = null; + + try + { + OnRequestReceived(incoming); + + UnregisterNodesRequest request = (UnregisterNodesRequest)incoming; + + + response = new UnregisterNodesResponse(); + + response.ResponseHeader = ServerInstance.UnregisterNodes( + request.RequestHeader, + request.NodesToUnregister); + + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the UnregisterNodes service. + /// + public virtual UnregisterNodesResponseMessage UnregisterNodes(UnregisterNodesMessage request) + { + UnregisterNodesResponse response = null; + + try + { + // OnRequestReceived(message.UnregisterNodesRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (UnregisterNodesResponse)UnregisterNodes(request.UnregisterNodesRequest); + // OnResponseSent(response); + return new UnregisterNodesResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.UnregisterNodesRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the UnregisterNodes service. + /// + public virtual IAsyncResult BeginUnregisterNodes(UnregisterNodesMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.UnregisterNodesRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.UnregisterNodesRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.UnregisterNodesRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the UnregisterNodes service to complete. + /// + public virtual UnregisterNodesResponseMessage EndUnregisterNodes(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new UnregisterNodesResponseMessage((UnregisterNodesResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region QueryFirst Service + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// Invokes the QueryFirst service. + /// + public IServiceResponse QueryFirst(IServiceRequest incoming) + { + QueryFirstResponse response = null; + + try + { + OnRequestReceived(incoming); + + QueryFirstRequest request = (QueryFirstRequest)incoming; + + QueryDataSetCollection queryDataSets = null; + byte[] continuationPoint = null; + ParsingResultCollection parsingResults = null; + DiagnosticInfoCollection diagnosticInfos = null; + ContentFilterResult filterResult = null; + + response = new QueryFirstResponse(); + + response.ResponseHeader = ServerInstance.QueryFirst( + request.RequestHeader, + request.View, + request.NodeTypes, + request.Filter, + request.MaxDataSetsToReturn, + request.MaxReferencesToReturn, + out queryDataSets, + out continuationPoint, + out parsingResults, + out diagnosticInfos, + out filterResult); + + response.QueryDataSets = queryDataSets; + response.ContinuationPoint = continuationPoint; + response.ParsingResults = parsingResults; + response.DiagnosticInfos = diagnosticInfos; + response.FilterResult = filterResult; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the QueryFirst service. + /// + public virtual QueryFirstResponseMessage QueryFirst(QueryFirstMessage request) + { + QueryFirstResponse response = null; + + try + { + // OnRequestReceived(message.QueryFirstRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (QueryFirstResponse)QueryFirst(request.QueryFirstRequest); + // OnResponseSent(response); + return new QueryFirstResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.QueryFirstRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the QueryFirst service. + /// + public virtual IAsyncResult BeginQueryFirst(QueryFirstMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.QueryFirstRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.QueryFirstRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.QueryFirstRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the QueryFirst service to complete. + /// + public virtual QueryFirstResponseMessage EndQueryFirst(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new QueryFirstResponseMessage((QueryFirstResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region QueryNext Service + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// Invokes the QueryNext service. + /// + public IServiceResponse QueryNext(IServiceRequest incoming) + { + QueryNextResponse response = null; + + try + { + OnRequestReceived(incoming); + + QueryNextRequest request = (QueryNextRequest)incoming; + + QueryDataSetCollection queryDataSets = null; + byte[] revisedContinuationPoint = null; + + response = new QueryNextResponse(); + + response.ResponseHeader = ServerInstance.QueryNext( + request.RequestHeader, + request.ReleaseContinuationPoint, + request.ContinuationPoint, + out queryDataSets, + out revisedContinuationPoint); + + response.QueryDataSets = queryDataSets; + response.RevisedContinuationPoint = revisedContinuationPoint; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the QueryNext service. + /// + public virtual QueryNextResponseMessage QueryNext(QueryNextMessage request) + { + QueryNextResponse response = null; + + try + { + // OnRequestReceived(message.QueryNextRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (QueryNextResponse)QueryNext(request.QueryNextRequest); + // OnResponseSent(response); + return new QueryNextResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.QueryNextRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the QueryNext service. + /// + public virtual IAsyncResult BeginQueryNext(QueryNextMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.QueryNextRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.QueryNextRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.QueryNextRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the QueryNext service to complete. + /// + public virtual QueryNextResponseMessage EndQueryNext(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new QueryNextResponseMessage((QueryNextResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Read Service + #if (!OPCUA_EXCLUDE_Read) + /// + /// Invokes the Read service. + /// + public IServiceResponse Read(IServiceRequest incoming) + { + ReadResponse response = null; + + try + { + OnRequestReceived(incoming); + + ReadRequest request = (ReadRequest)incoming; + + DataValueCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new ReadResponse(); + + response.ResponseHeader = ServerInstance.Read( + request.RequestHeader, + request.MaxAge, + request.TimestampsToReturn, + request.NodesToRead, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Read service. + /// + public virtual ReadResponseMessage Read(ReadMessage request) + { + ReadResponse response = null; + + try + { + // OnRequestReceived(message.ReadRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (ReadResponse)Read(request.ReadRequest); + // OnResponseSent(response); + return new ReadResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.ReadRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Read service. + /// + public virtual IAsyncResult BeginRead(ReadMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.ReadRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.ReadRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.ReadRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Read service to complete. + /// + public virtual ReadResponseMessage EndRead(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new ReadResponseMessage((ReadResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region HistoryRead Service + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// Invokes the HistoryRead service. + /// + public IServiceResponse HistoryRead(IServiceRequest incoming) + { + HistoryReadResponse response = null; + + try + { + OnRequestReceived(incoming); + + HistoryReadRequest request = (HistoryReadRequest)incoming; + + HistoryReadResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new HistoryReadResponse(); + + response.ResponseHeader = ServerInstance.HistoryRead( + request.RequestHeader, + request.HistoryReadDetails, + request.TimestampsToReturn, + request.ReleaseContinuationPoints, + request.NodesToRead, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the HistoryRead service. + /// + public virtual HistoryReadResponseMessage HistoryRead(HistoryReadMessage request) + { + HistoryReadResponse response = null; + + try + { + // OnRequestReceived(message.HistoryReadRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (HistoryReadResponse)HistoryRead(request.HistoryReadRequest); + // OnResponseSent(response); + return new HistoryReadResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.HistoryReadRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the HistoryRead service. + /// + public virtual IAsyncResult BeginHistoryRead(HistoryReadMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.HistoryReadRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.HistoryReadRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.HistoryReadRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the HistoryRead service to complete. + /// + public virtual HistoryReadResponseMessage EndHistoryRead(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new HistoryReadResponseMessage((HistoryReadResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Write Service + #if (!OPCUA_EXCLUDE_Write) + /// + /// Invokes the Write service. + /// + public IServiceResponse Write(IServiceRequest incoming) + { + WriteResponse response = null; + + try + { + OnRequestReceived(incoming); + + WriteRequest request = (WriteRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new WriteResponse(); + + response.ResponseHeader = ServerInstance.Write( + request.RequestHeader, + request.NodesToWrite, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Write service. + /// + public virtual WriteResponseMessage Write(WriteMessage request) + { + WriteResponse response = null; + + try + { + // OnRequestReceived(message.WriteRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (WriteResponse)Write(request.WriteRequest); + // OnResponseSent(response); + return new WriteResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.WriteRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Write service. + /// + public virtual IAsyncResult BeginWrite(WriteMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.WriteRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.WriteRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.WriteRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Write service to complete. + /// + public virtual WriteResponseMessage EndWrite(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new WriteResponseMessage((WriteResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region HistoryUpdate Service + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// Invokes the HistoryUpdate service. + /// + public IServiceResponse HistoryUpdate(IServiceRequest incoming) + { + HistoryUpdateResponse response = null; + + try + { + OnRequestReceived(incoming); + + HistoryUpdateRequest request = (HistoryUpdateRequest)incoming; + + HistoryUpdateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new HistoryUpdateResponse(); + + response.ResponseHeader = ServerInstance.HistoryUpdate( + request.RequestHeader, + request.HistoryUpdateDetails, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the HistoryUpdate service. + /// + public virtual HistoryUpdateResponseMessage HistoryUpdate(HistoryUpdateMessage request) + { + HistoryUpdateResponse response = null; + + try + { + // OnRequestReceived(message.HistoryUpdateRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (HistoryUpdateResponse)HistoryUpdate(request.HistoryUpdateRequest); + // OnResponseSent(response); + return new HistoryUpdateResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.HistoryUpdateRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the HistoryUpdate service. + /// + public virtual IAsyncResult BeginHistoryUpdate(HistoryUpdateMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.HistoryUpdateRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.HistoryUpdateRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.HistoryUpdateRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the HistoryUpdate service to complete. + /// + public virtual HistoryUpdateResponseMessage EndHistoryUpdate(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new HistoryUpdateResponseMessage((HistoryUpdateResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Call Service + #if (!OPCUA_EXCLUDE_Call) + /// + /// Invokes the Call service. + /// + public IServiceResponse Call(IServiceRequest incoming) + { + CallResponse response = null; + + try + { + OnRequestReceived(incoming); + + CallRequest request = (CallRequest)incoming; + + CallMethodResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new CallResponse(); + + response.ResponseHeader = ServerInstance.Call( + request.RequestHeader, + request.MethodsToCall, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Call service. + /// + public virtual CallResponseMessage Call(CallMessage request) + { + CallResponse response = null; + + try + { + // OnRequestReceived(message.CallRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (CallResponse)Call(request.CallRequest); + // OnResponseSent(response); + return new CallResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.CallRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Call service. + /// + public virtual IAsyncResult BeginCall(CallMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.CallRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.CallRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.CallRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Call service to complete. + /// + public virtual CallResponseMessage EndCall(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new CallResponseMessage((CallResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region CreateMonitoredItems Service + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// Invokes the CreateMonitoredItems service. + /// + public IServiceResponse CreateMonitoredItems(IServiceRequest incoming) + { + CreateMonitoredItemsResponse response = null; + + try + { + OnRequestReceived(incoming); + + CreateMonitoredItemsRequest request = (CreateMonitoredItemsRequest)incoming; + + MonitoredItemCreateResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new CreateMonitoredItemsResponse(); + + response.ResponseHeader = ServerInstance.CreateMonitoredItems( + request.RequestHeader, + request.SubscriptionId, + request.TimestampsToReturn, + request.ItemsToCreate, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the CreateMonitoredItems service. + /// + public virtual CreateMonitoredItemsResponseMessage CreateMonitoredItems(CreateMonitoredItemsMessage request) + { + CreateMonitoredItemsResponse response = null; + + try + { + // OnRequestReceived(message.CreateMonitoredItemsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (CreateMonitoredItemsResponse)CreateMonitoredItems(request.CreateMonitoredItemsRequest); + // OnResponseSent(response); + return new CreateMonitoredItemsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.CreateMonitoredItemsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the CreateMonitoredItems service. + /// + public virtual IAsyncResult BeginCreateMonitoredItems(CreateMonitoredItemsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.CreateMonitoredItemsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.CreateMonitoredItemsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.CreateMonitoredItemsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the CreateMonitoredItems service to complete. + /// + public virtual CreateMonitoredItemsResponseMessage EndCreateMonitoredItems(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new CreateMonitoredItemsResponseMessage((CreateMonitoredItemsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region ModifyMonitoredItems Service + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// Invokes the ModifyMonitoredItems service. + /// + public IServiceResponse ModifyMonitoredItems(IServiceRequest incoming) + { + ModifyMonitoredItemsResponse response = null; + + try + { + OnRequestReceived(incoming); + + ModifyMonitoredItemsRequest request = (ModifyMonitoredItemsRequest)incoming; + + MonitoredItemModifyResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new ModifyMonitoredItemsResponse(); + + response.ResponseHeader = ServerInstance.ModifyMonitoredItems( + request.RequestHeader, + request.SubscriptionId, + request.TimestampsToReturn, + request.ItemsToModify, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the ModifyMonitoredItems service. + /// + public virtual ModifyMonitoredItemsResponseMessage ModifyMonitoredItems(ModifyMonitoredItemsMessage request) + { + ModifyMonitoredItemsResponse response = null; + + try + { + // OnRequestReceived(message.ModifyMonitoredItemsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (ModifyMonitoredItemsResponse)ModifyMonitoredItems(request.ModifyMonitoredItemsRequest); + // OnResponseSent(response); + return new ModifyMonitoredItemsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.ModifyMonitoredItemsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the ModifyMonitoredItems service. + /// + public virtual IAsyncResult BeginModifyMonitoredItems(ModifyMonitoredItemsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.ModifyMonitoredItemsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.ModifyMonitoredItemsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.ModifyMonitoredItemsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the ModifyMonitoredItems service to complete. + /// + public virtual ModifyMonitoredItemsResponseMessage EndModifyMonitoredItems(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new ModifyMonitoredItemsResponseMessage((ModifyMonitoredItemsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region SetMonitoringMode Service + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// Invokes the SetMonitoringMode service. + /// + public IServiceResponse SetMonitoringMode(IServiceRequest incoming) + { + SetMonitoringModeResponse response = null; + + try + { + OnRequestReceived(incoming); + + SetMonitoringModeRequest request = (SetMonitoringModeRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new SetMonitoringModeResponse(); + + response.ResponseHeader = ServerInstance.SetMonitoringMode( + request.RequestHeader, + request.SubscriptionId, + request.MonitoringMode, + request.MonitoredItemIds, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the SetMonitoringMode service. + /// + public virtual SetMonitoringModeResponseMessage SetMonitoringMode(SetMonitoringModeMessage request) + { + SetMonitoringModeResponse response = null; + + try + { + // OnRequestReceived(message.SetMonitoringModeRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (SetMonitoringModeResponse)SetMonitoringMode(request.SetMonitoringModeRequest); + // OnResponseSent(response); + return new SetMonitoringModeResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.SetMonitoringModeRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the SetMonitoringMode service. + /// + public virtual IAsyncResult BeginSetMonitoringMode(SetMonitoringModeMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.SetMonitoringModeRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.SetMonitoringModeRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.SetMonitoringModeRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the SetMonitoringMode service to complete. + /// + public virtual SetMonitoringModeResponseMessage EndSetMonitoringMode(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new SetMonitoringModeResponseMessage((SetMonitoringModeResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region SetTriggering Service + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// Invokes the SetTriggering service. + /// + public IServiceResponse SetTriggering(IServiceRequest incoming) + { + SetTriggeringResponse response = null; + + try + { + OnRequestReceived(incoming); + + SetTriggeringRequest request = (SetTriggeringRequest)incoming; + + StatusCodeCollection addResults = null; + DiagnosticInfoCollection addDiagnosticInfos = null; + StatusCodeCollection removeResults = null; + DiagnosticInfoCollection removeDiagnosticInfos = null; + + response = new SetTriggeringResponse(); + + response.ResponseHeader = ServerInstance.SetTriggering( + request.RequestHeader, + request.SubscriptionId, + request.TriggeringItemId, + request.LinksToAdd, + request.LinksToRemove, + out addResults, + out addDiagnosticInfos, + out removeResults, + out removeDiagnosticInfos); + + response.AddResults = addResults; + response.AddDiagnosticInfos = addDiagnosticInfos; + response.RemoveResults = removeResults; + response.RemoveDiagnosticInfos = removeDiagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the SetTriggering service. + /// + public virtual SetTriggeringResponseMessage SetTriggering(SetTriggeringMessage request) + { + SetTriggeringResponse response = null; + + try + { + // OnRequestReceived(message.SetTriggeringRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (SetTriggeringResponse)SetTriggering(request.SetTriggeringRequest); + // OnResponseSent(response); + return new SetTriggeringResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.SetTriggeringRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the SetTriggering service. + /// + public virtual IAsyncResult BeginSetTriggering(SetTriggeringMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.SetTriggeringRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.SetTriggeringRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.SetTriggeringRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the SetTriggering service to complete. + /// + public virtual SetTriggeringResponseMessage EndSetTriggering(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new SetTriggeringResponseMessage((SetTriggeringResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region DeleteMonitoredItems Service + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// Invokes the DeleteMonitoredItems service. + /// + public IServiceResponse DeleteMonitoredItems(IServiceRequest incoming) + { + DeleteMonitoredItemsResponse response = null; + + try + { + OnRequestReceived(incoming); + + DeleteMonitoredItemsRequest request = (DeleteMonitoredItemsRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new DeleteMonitoredItemsResponse(); + + response.ResponseHeader = ServerInstance.DeleteMonitoredItems( + request.RequestHeader, + request.SubscriptionId, + request.MonitoredItemIds, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the DeleteMonitoredItems service. + /// + public virtual DeleteMonitoredItemsResponseMessage DeleteMonitoredItems(DeleteMonitoredItemsMessage request) + { + DeleteMonitoredItemsResponse response = null; + + try + { + // OnRequestReceived(message.DeleteMonitoredItemsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (DeleteMonitoredItemsResponse)DeleteMonitoredItems(request.DeleteMonitoredItemsRequest); + // OnResponseSent(response); + return new DeleteMonitoredItemsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.DeleteMonitoredItemsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the DeleteMonitoredItems service. + /// + public virtual IAsyncResult BeginDeleteMonitoredItems(DeleteMonitoredItemsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.DeleteMonitoredItemsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.DeleteMonitoredItemsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.DeleteMonitoredItemsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the DeleteMonitoredItems service to complete. + /// + public virtual DeleteMonitoredItemsResponseMessage EndDeleteMonitoredItems(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new DeleteMonitoredItemsResponseMessage((DeleteMonitoredItemsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region CreateSubscription Service + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// Invokes the CreateSubscription service. + /// + public IServiceResponse CreateSubscription(IServiceRequest incoming) + { + CreateSubscriptionResponse response = null; + + try + { + OnRequestReceived(incoming); + + CreateSubscriptionRequest request = (CreateSubscriptionRequest)incoming; + + uint subscriptionId = 0; + double revisedPublishingInterval = 0; + uint revisedLifetimeCount = 0; + uint revisedMaxKeepAliveCount = 0; + + response = new CreateSubscriptionResponse(); + + response.ResponseHeader = ServerInstance.CreateSubscription( + request.RequestHeader, + request.RequestedPublishingInterval, + request.RequestedLifetimeCount, + request.RequestedMaxKeepAliveCount, + request.MaxNotificationsPerPublish, + request.PublishingEnabled, + request.Priority, + out subscriptionId, + out revisedPublishingInterval, + out revisedLifetimeCount, + out revisedMaxKeepAliveCount); + + response.SubscriptionId = subscriptionId; + response.RevisedPublishingInterval = revisedPublishingInterval; + response.RevisedLifetimeCount = revisedLifetimeCount; + response.RevisedMaxKeepAliveCount = revisedMaxKeepAliveCount; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the CreateSubscription service. + /// + public virtual CreateSubscriptionResponseMessage CreateSubscription(CreateSubscriptionMessage request) + { + CreateSubscriptionResponse response = null; + + try + { + // OnRequestReceived(message.CreateSubscriptionRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (CreateSubscriptionResponse)CreateSubscription(request.CreateSubscriptionRequest); + // OnResponseSent(response); + return new CreateSubscriptionResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.CreateSubscriptionRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the CreateSubscription service. + /// + public virtual IAsyncResult BeginCreateSubscription(CreateSubscriptionMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.CreateSubscriptionRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.CreateSubscriptionRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.CreateSubscriptionRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the CreateSubscription service to complete. + /// + public virtual CreateSubscriptionResponseMessage EndCreateSubscription(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new CreateSubscriptionResponseMessage((CreateSubscriptionResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region ModifySubscription Service + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// Invokes the ModifySubscription service. + /// + public IServiceResponse ModifySubscription(IServiceRequest incoming) + { + ModifySubscriptionResponse response = null; + + try + { + OnRequestReceived(incoming); + + ModifySubscriptionRequest request = (ModifySubscriptionRequest)incoming; + + double revisedPublishingInterval = 0; + uint revisedLifetimeCount = 0; + uint revisedMaxKeepAliveCount = 0; + + response = new ModifySubscriptionResponse(); + + response.ResponseHeader = ServerInstance.ModifySubscription( + request.RequestHeader, + request.SubscriptionId, + request.RequestedPublishingInterval, + request.RequestedLifetimeCount, + request.RequestedMaxKeepAliveCount, + request.MaxNotificationsPerPublish, + request.Priority, + out revisedPublishingInterval, + out revisedLifetimeCount, + out revisedMaxKeepAliveCount); + + response.RevisedPublishingInterval = revisedPublishingInterval; + response.RevisedLifetimeCount = revisedLifetimeCount; + response.RevisedMaxKeepAliveCount = revisedMaxKeepAliveCount; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the ModifySubscription service. + /// + public virtual ModifySubscriptionResponseMessage ModifySubscription(ModifySubscriptionMessage request) + { + ModifySubscriptionResponse response = null; + + try + { + // OnRequestReceived(message.ModifySubscriptionRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (ModifySubscriptionResponse)ModifySubscription(request.ModifySubscriptionRequest); + // OnResponseSent(response); + return new ModifySubscriptionResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.ModifySubscriptionRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the ModifySubscription service. + /// + public virtual IAsyncResult BeginModifySubscription(ModifySubscriptionMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.ModifySubscriptionRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.ModifySubscriptionRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.ModifySubscriptionRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the ModifySubscription service to complete. + /// + public virtual ModifySubscriptionResponseMessage EndModifySubscription(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new ModifySubscriptionResponseMessage((ModifySubscriptionResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region SetPublishingMode Service + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// Invokes the SetPublishingMode service. + /// + public IServiceResponse SetPublishingMode(IServiceRequest incoming) + { + SetPublishingModeResponse response = null; + + try + { + OnRequestReceived(incoming); + + SetPublishingModeRequest request = (SetPublishingModeRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new SetPublishingModeResponse(); + + response.ResponseHeader = ServerInstance.SetPublishingMode( + request.RequestHeader, + request.PublishingEnabled, + request.SubscriptionIds, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the SetPublishingMode service. + /// + public virtual SetPublishingModeResponseMessage SetPublishingMode(SetPublishingModeMessage request) + { + SetPublishingModeResponse response = null; + + try + { + // OnRequestReceived(message.SetPublishingModeRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (SetPublishingModeResponse)SetPublishingMode(request.SetPublishingModeRequest); + // OnResponseSent(response); + return new SetPublishingModeResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.SetPublishingModeRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the SetPublishingMode service. + /// + public virtual IAsyncResult BeginSetPublishingMode(SetPublishingModeMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.SetPublishingModeRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.SetPublishingModeRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.SetPublishingModeRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the SetPublishingMode service to complete. + /// + public virtual SetPublishingModeResponseMessage EndSetPublishingMode(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new SetPublishingModeResponseMessage((SetPublishingModeResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Publish Service + #if (!OPCUA_EXCLUDE_Publish) + /// + /// Invokes the Publish service. + /// + public IServiceResponse Publish(IServiceRequest incoming) + { + PublishResponse response = null; + + try + { + OnRequestReceived(incoming); + + PublishRequest request = (PublishRequest)incoming; + + uint subscriptionId = 0; + UInt32Collection availableSequenceNumbers = null; + bool moreNotifications = false; + NotificationMessage notificationMessage = null; + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new PublishResponse(); + + response.ResponseHeader = ServerInstance.Publish( + request.RequestHeader, + request.SubscriptionAcknowledgements, + out subscriptionId, + out availableSequenceNumbers, + out moreNotifications, + out notificationMessage, + out results, + out diagnosticInfos); + + response.SubscriptionId = subscriptionId; + response.AvailableSequenceNumbers = availableSequenceNumbers; + response.MoreNotifications = moreNotifications; + response.NotificationMessage = notificationMessage; + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Publish service. + /// + public virtual PublishResponseMessage Publish(PublishMessage request) + { + PublishResponse response = null; + + try + { + // OnRequestReceived(message.PublishRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (PublishResponse)Publish(request.PublishRequest); + // OnResponseSent(response); + return new PublishResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.PublishRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Publish service. + /// + public virtual IAsyncResult BeginPublish(PublishMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.PublishRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.PublishRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.PublishRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Publish service to complete. + /// + public virtual PublishResponseMessage EndPublish(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new PublishResponseMessage((PublishResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region Republish Service + #if (!OPCUA_EXCLUDE_Republish) + /// + /// Invokes the Republish service. + /// + public IServiceResponse Republish(IServiceRequest incoming) + { + RepublishResponse response = null; + + try + { + OnRequestReceived(incoming); + + RepublishRequest request = (RepublishRequest)incoming; + + NotificationMessage notificationMessage = null; + + response = new RepublishResponse(); + + response.ResponseHeader = ServerInstance.Republish( + request.RequestHeader, + request.SubscriptionId, + request.RetransmitSequenceNumber, + out notificationMessage); + + response.NotificationMessage = notificationMessage; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the Republish service. + /// + public virtual RepublishResponseMessage Republish(RepublishMessage request) + { + RepublishResponse response = null; + + try + { + // OnRequestReceived(message.RepublishRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (RepublishResponse)Republish(request.RepublishRequest); + // OnResponseSent(response); + return new RepublishResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.RepublishRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the Republish service. + /// + public virtual IAsyncResult BeginRepublish(RepublishMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.RepublishRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.RepublishRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.RepublishRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the Republish service to complete. + /// + public virtual RepublishResponseMessage EndRepublish(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new RepublishResponseMessage((RepublishResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region TransferSubscriptions Service + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// Invokes the TransferSubscriptions service. + /// + public IServiceResponse TransferSubscriptions(IServiceRequest incoming) + { + TransferSubscriptionsResponse response = null; + + try + { + OnRequestReceived(incoming); + + TransferSubscriptionsRequest request = (TransferSubscriptionsRequest)incoming; + + TransferResultCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new TransferSubscriptionsResponse(); + + response.ResponseHeader = ServerInstance.TransferSubscriptions( + request.RequestHeader, + request.SubscriptionIds, + request.SendInitialValues, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the TransferSubscriptions service. + /// + public virtual TransferSubscriptionsResponseMessage TransferSubscriptions(TransferSubscriptionsMessage request) + { + TransferSubscriptionsResponse response = null; + + try + { + // OnRequestReceived(message.TransferSubscriptionsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (TransferSubscriptionsResponse)TransferSubscriptions(request.TransferSubscriptionsRequest); + // OnResponseSent(response); + return new TransferSubscriptionsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.TransferSubscriptionsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the TransferSubscriptions service. + /// + public virtual IAsyncResult BeginTransferSubscriptions(TransferSubscriptionsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.TransferSubscriptionsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.TransferSubscriptionsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.TransferSubscriptionsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the TransferSubscriptions service to complete. + /// + public virtual TransferSubscriptionsResponseMessage EndTransferSubscriptions(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new TransferSubscriptionsResponseMessage((TransferSubscriptionsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region DeleteSubscriptions Service + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// Invokes the DeleteSubscriptions service. + /// + public IServiceResponse DeleteSubscriptions(IServiceRequest incoming) + { + DeleteSubscriptionsResponse response = null; + + try + { + OnRequestReceived(incoming); + + DeleteSubscriptionsRequest request = (DeleteSubscriptionsRequest)incoming; + + StatusCodeCollection results = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new DeleteSubscriptionsResponse(); + + response.ResponseHeader = ServerInstance.DeleteSubscriptions( + request.RequestHeader, + request.SubscriptionIds, + out results, + out diagnosticInfos); + + response.Results = results; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the DeleteSubscriptions service. + /// + public virtual DeleteSubscriptionsResponseMessage DeleteSubscriptions(DeleteSubscriptionsMessage request) + { + DeleteSubscriptionsResponse response = null; + + try + { + // OnRequestReceived(message.DeleteSubscriptionsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (DeleteSubscriptionsResponse)DeleteSubscriptions(request.DeleteSubscriptionsRequest); + // OnResponseSent(response); + return new DeleteSubscriptionsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.DeleteSubscriptionsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the DeleteSubscriptions service. + /// + public virtual IAsyncResult BeginDeleteSubscriptions(DeleteSubscriptionsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.DeleteSubscriptionsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.DeleteSubscriptionsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.DeleteSubscriptionsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the DeleteSubscriptions service to complete. + /// + public virtual DeleteSubscriptionsResponseMessage EndDeleteSubscriptions(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new DeleteSubscriptionsResponseMessage((DeleteSubscriptionsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + #endregion + + #region Protected Members + /// + /// Populates the known types table. + /// + protected virtual void CreateKnownTypes() + { + #if (!OPCUA_EXCLUDE_FindServers) + SupportedServices.Add(DataTypeIds.FindServersRequest, new ServiceDefinition(typeof(FindServersRequest), new InvokeServiceEventHandler(FindServers))); + #endif + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + SupportedServices.Add(DataTypeIds.FindServersOnNetworkRequest, new ServiceDefinition(typeof(FindServersOnNetworkRequest), new InvokeServiceEventHandler(FindServersOnNetwork))); + #endif + #if (!OPCUA_EXCLUDE_GetEndpoints) + SupportedServices.Add(DataTypeIds.GetEndpointsRequest, new ServiceDefinition(typeof(GetEndpointsRequest), new InvokeServiceEventHandler(GetEndpoints))); + #endif + #if (!OPCUA_EXCLUDE_CreateSession) + SupportedServices.Add(DataTypeIds.CreateSessionRequest, new ServiceDefinition(typeof(CreateSessionRequest), new InvokeServiceEventHandler(CreateSession))); + #endif + #if (!OPCUA_EXCLUDE_ActivateSession) + SupportedServices.Add(DataTypeIds.ActivateSessionRequest, new ServiceDefinition(typeof(ActivateSessionRequest), new InvokeServiceEventHandler(ActivateSession))); + #endif + #if (!OPCUA_EXCLUDE_CloseSession) + SupportedServices.Add(DataTypeIds.CloseSessionRequest, new ServiceDefinition(typeof(CloseSessionRequest), new InvokeServiceEventHandler(CloseSession))); + #endif + #if (!OPCUA_EXCLUDE_Cancel) + SupportedServices.Add(DataTypeIds.CancelRequest, new ServiceDefinition(typeof(CancelRequest), new InvokeServiceEventHandler(Cancel))); + #endif + #if (!OPCUA_EXCLUDE_AddNodes) + SupportedServices.Add(DataTypeIds.AddNodesRequest, new ServiceDefinition(typeof(AddNodesRequest), new InvokeServiceEventHandler(AddNodes))); + #endif + #if (!OPCUA_EXCLUDE_AddReferences) + SupportedServices.Add(DataTypeIds.AddReferencesRequest, new ServiceDefinition(typeof(AddReferencesRequest), new InvokeServiceEventHandler(AddReferences))); + #endif + #if (!OPCUA_EXCLUDE_DeleteNodes) + SupportedServices.Add(DataTypeIds.DeleteNodesRequest, new ServiceDefinition(typeof(DeleteNodesRequest), new InvokeServiceEventHandler(DeleteNodes))); + #endif + #if (!OPCUA_EXCLUDE_DeleteReferences) + SupportedServices.Add(DataTypeIds.DeleteReferencesRequest, new ServiceDefinition(typeof(DeleteReferencesRequest), new InvokeServiceEventHandler(DeleteReferences))); + #endif + #if (!OPCUA_EXCLUDE_Browse) + SupportedServices.Add(DataTypeIds.BrowseRequest, new ServiceDefinition(typeof(BrowseRequest), new InvokeServiceEventHandler(Browse))); + #endif + #if (!OPCUA_EXCLUDE_BrowseNext) + SupportedServices.Add(DataTypeIds.BrowseNextRequest, new ServiceDefinition(typeof(BrowseNextRequest), new InvokeServiceEventHandler(BrowseNext))); + #endif + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + SupportedServices.Add(DataTypeIds.TranslateBrowsePathsToNodeIdsRequest, new ServiceDefinition(typeof(TranslateBrowsePathsToNodeIdsRequest), new InvokeServiceEventHandler(TranslateBrowsePathsToNodeIds))); + #endif + #if (!OPCUA_EXCLUDE_RegisterNodes) + SupportedServices.Add(DataTypeIds.RegisterNodesRequest, new ServiceDefinition(typeof(RegisterNodesRequest), new InvokeServiceEventHandler(RegisterNodes))); + #endif + #if (!OPCUA_EXCLUDE_UnregisterNodes) + SupportedServices.Add(DataTypeIds.UnregisterNodesRequest, new ServiceDefinition(typeof(UnregisterNodesRequest), new InvokeServiceEventHandler(UnregisterNodes))); + #endif + #if (!OPCUA_EXCLUDE_QueryFirst) + SupportedServices.Add(DataTypeIds.QueryFirstRequest, new ServiceDefinition(typeof(QueryFirstRequest), new InvokeServiceEventHandler(QueryFirst))); + #endif + #if (!OPCUA_EXCLUDE_QueryNext) + SupportedServices.Add(DataTypeIds.QueryNextRequest, new ServiceDefinition(typeof(QueryNextRequest), new InvokeServiceEventHandler(QueryNext))); + #endif + #if (!OPCUA_EXCLUDE_Read) + SupportedServices.Add(DataTypeIds.ReadRequest, new ServiceDefinition(typeof(ReadRequest), new InvokeServiceEventHandler(Read))); + #endif + #if (!OPCUA_EXCLUDE_HistoryRead) + SupportedServices.Add(DataTypeIds.HistoryReadRequest, new ServiceDefinition(typeof(HistoryReadRequest), new InvokeServiceEventHandler(HistoryRead))); + #endif + #if (!OPCUA_EXCLUDE_Write) + SupportedServices.Add(DataTypeIds.WriteRequest, new ServiceDefinition(typeof(WriteRequest), new InvokeServiceEventHandler(Write))); + #endif + #if (!OPCUA_EXCLUDE_HistoryUpdate) + SupportedServices.Add(DataTypeIds.HistoryUpdateRequest, new ServiceDefinition(typeof(HistoryUpdateRequest), new InvokeServiceEventHandler(HistoryUpdate))); + #endif + #if (!OPCUA_EXCLUDE_Call) + SupportedServices.Add(DataTypeIds.CallRequest, new ServiceDefinition(typeof(CallRequest), new InvokeServiceEventHandler(Call))); + #endif + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + SupportedServices.Add(DataTypeIds.CreateMonitoredItemsRequest, new ServiceDefinition(typeof(CreateMonitoredItemsRequest), new InvokeServiceEventHandler(CreateMonitoredItems))); + #endif + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + SupportedServices.Add(DataTypeIds.ModifyMonitoredItemsRequest, new ServiceDefinition(typeof(ModifyMonitoredItemsRequest), new InvokeServiceEventHandler(ModifyMonitoredItems))); + #endif + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + SupportedServices.Add(DataTypeIds.SetMonitoringModeRequest, new ServiceDefinition(typeof(SetMonitoringModeRequest), new InvokeServiceEventHandler(SetMonitoringMode))); + #endif + #if (!OPCUA_EXCLUDE_SetTriggering) + SupportedServices.Add(DataTypeIds.SetTriggeringRequest, new ServiceDefinition(typeof(SetTriggeringRequest), new InvokeServiceEventHandler(SetTriggering))); + #endif + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + SupportedServices.Add(DataTypeIds.DeleteMonitoredItemsRequest, new ServiceDefinition(typeof(DeleteMonitoredItemsRequest), new InvokeServiceEventHandler(DeleteMonitoredItems))); + #endif + #if (!OPCUA_EXCLUDE_CreateSubscription) + SupportedServices.Add(DataTypeIds.CreateSubscriptionRequest, new ServiceDefinition(typeof(CreateSubscriptionRequest), new InvokeServiceEventHandler(CreateSubscription))); + #endif + #if (!OPCUA_EXCLUDE_ModifySubscription) + SupportedServices.Add(DataTypeIds.ModifySubscriptionRequest, new ServiceDefinition(typeof(ModifySubscriptionRequest), new InvokeServiceEventHandler(ModifySubscription))); + #endif + #if (!OPCUA_EXCLUDE_SetPublishingMode) + SupportedServices.Add(DataTypeIds.SetPublishingModeRequest, new ServiceDefinition(typeof(SetPublishingModeRequest), new InvokeServiceEventHandler(SetPublishingMode))); + #endif + #if (!OPCUA_EXCLUDE_Publish) + SupportedServices.Add(DataTypeIds.PublishRequest, new ServiceDefinition(typeof(PublishRequest), new InvokeServiceEventHandler(Publish))); + #endif + #if (!OPCUA_EXCLUDE_Republish) + SupportedServices.Add(DataTypeIds.RepublishRequest, new ServiceDefinition(typeof(RepublishRequest), new InvokeServiceEventHandler(Republish))); + #endif + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + SupportedServices.Add(DataTypeIds.TransferSubscriptionsRequest, new ServiceDefinition(typeof(TransferSubscriptionsRequest), new InvokeServiceEventHandler(TransferSubscriptions))); + #endif + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + SupportedServices.Add(DataTypeIds.DeleteSubscriptionsRequest, new ServiceDefinition(typeof(DeleteSubscriptionsRequest), new InvokeServiceEventHandler(DeleteSubscriptions))); + #endif + } + #endregion + } + #endregion + + #region DiscoveryEndpoint Class + /// + /// A endpoint object used by clients to access a UA service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + #if !NET_STANDARD + [ServiceMessageContextBehavior()] + [ServiceBehavior(Namespace = Namespaces.OpcUaWsdl, InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)] + #endif + public partial class DiscoveryEndpoint : EndpointBase, IDiscoveryEndpoint, IRegistrationEndpoint + { + #region Constructors + /// + /// Initializes the object when it is created by the WCF framework. + /// + public DiscoveryEndpoint() + { + this.CreateKnownTypes(); + } + + /// + /// Initializes the when it is created directly. + /// + public DiscoveryEndpoint(IServiceHostBase host) : base(host) + { + this.CreateKnownTypes(); + } + + /// + /// Initializes a new instance of the class. + /// + /// The server. + public DiscoveryEndpoint(ServerBase server) : base(server) + { + this.CreateKnownTypes(); + } + #endregion + + #region Public Members + /// + /// The UA server instance that the endpoint is connected to. + /// + protected IDiscoveryServer ServerInstance + { + get + { + if (ServiceResult.IsBad(ServerError)) + { + throw new ServiceResultException(ServerError); + } + + return ServerForContext as IDiscoveryServer; + } + } + #endregion + + #region IDiscoveryEndpoint Members + #region FindServers Service + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + public IServiceResponse FindServers(IServiceRequest incoming) + { + FindServersResponse response = null; + + try + { + OnRequestReceived(incoming); + + FindServersRequest request = (FindServersRequest)incoming; + + ApplicationDescriptionCollection servers = null; + + response = new FindServersResponse(); + + response.ResponseHeader = ServerInstance.FindServers( + request.RequestHeader, + request.EndpointUrl, + request.LocaleIds, + request.ServerUris, + out servers); + + response.Servers = servers; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the FindServers service. + /// + public virtual FindServersResponseMessage FindServers(FindServersMessage request) + { + FindServersResponse response = null; + + try + { + // OnRequestReceived(message.FindServersRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (FindServersResponse)FindServers(request.FindServersRequest); + // OnResponseSent(response); + return new FindServersResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.FindServersRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the FindServers service. + /// + public virtual IAsyncResult BeginFindServers(FindServersMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.FindServersRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.FindServersRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.FindServersRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the FindServers service to complete. + /// + public virtual FindServersResponseMessage EndFindServers(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new FindServersResponseMessage((FindServersResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region FindServersOnNetwork Service + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + public IServiceResponse FindServersOnNetwork(IServiceRequest incoming) + { + FindServersOnNetworkResponse response = null; + + try + { + OnRequestReceived(incoming); + + FindServersOnNetworkRequest request = (FindServersOnNetworkRequest)incoming; + + DateTime lastCounterResetTime = DateTime.MinValue; + ServerOnNetworkCollection servers = null; + + response = new FindServersOnNetworkResponse(); + + response.ResponseHeader = ServerInstance.FindServersOnNetwork( + request.RequestHeader, + request.StartingRecordId, + request.MaxRecordsToReturn, + request.ServerCapabilityFilter, + out lastCounterResetTime, + out servers); + + response.LastCounterResetTime = lastCounterResetTime; + response.Servers = servers; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the FindServersOnNetwork service. + /// + public virtual FindServersOnNetworkResponseMessage FindServersOnNetwork(FindServersOnNetworkMessage request) + { + FindServersOnNetworkResponse response = null; + + try + { + // OnRequestReceived(message.FindServersOnNetworkRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (FindServersOnNetworkResponse)FindServersOnNetwork(request.FindServersOnNetworkRequest); + // OnResponseSent(response); + return new FindServersOnNetworkResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.FindServersOnNetworkRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the FindServersOnNetwork service. + /// + public virtual IAsyncResult BeginFindServersOnNetwork(FindServersOnNetworkMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.FindServersOnNetworkRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.FindServersOnNetworkRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.FindServersOnNetworkRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the FindServersOnNetwork service to complete. + /// + public virtual FindServersOnNetworkResponseMessage EndFindServersOnNetwork(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new FindServersOnNetworkResponseMessage((FindServersOnNetworkResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region GetEndpoints Service + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + public IServiceResponse GetEndpoints(IServiceRequest incoming) + { + GetEndpointsResponse response = null; + + try + { + OnRequestReceived(incoming); + + GetEndpointsRequest request = (GetEndpointsRequest)incoming; + + EndpointDescriptionCollection endpoints = null; + + response = new GetEndpointsResponse(); + + response.ResponseHeader = ServerInstance.GetEndpoints( + request.RequestHeader, + request.EndpointUrl, + request.LocaleIds, + request.ProfileUris, + out endpoints); + + response.Endpoints = endpoints; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the GetEndpoints service. + /// + public virtual GetEndpointsResponseMessage GetEndpoints(GetEndpointsMessage request) + { + GetEndpointsResponse response = null; + + try + { + // OnRequestReceived(message.GetEndpointsRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (GetEndpointsResponse)GetEndpoints(request.GetEndpointsRequest); + // OnResponseSent(response); + return new GetEndpointsResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.GetEndpointsRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the GetEndpoints service. + /// + public virtual IAsyncResult BeginGetEndpoints(GetEndpointsMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.GetEndpointsRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.GetEndpointsRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.GetEndpointsRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the GetEndpoints service to complete. + /// + public virtual GetEndpointsResponseMessage EndGetEndpoints(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new GetEndpointsResponseMessage((GetEndpointsResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region RegisterServer Service + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// Invokes the RegisterServer service. + /// + public IServiceResponse RegisterServer(IServiceRequest incoming) + { + RegisterServerResponse response = null; + + try + { + OnRequestReceived(incoming); + + RegisterServerRequest request = (RegisterServerRequest)incoming; + + + response = new RegisterServerResponse(); + + response.ResponseHeader = ServerInstance.RegisterServer( + request.RequestHeader, + request.Server); + + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the RegisterServer service. + /// + public virtual RegisterServerResponseMessage RegisterServer(RegisterServerMessage request) + { + RegisterServerResponse response = null; + + try + { + // OnRequestReceived(message.RegisterServerRequest); + + SetRequestContext(RequestEncoding.Xml); + response = (RegisterServerResponse)RegisterServer(request.RegisterServerRequest); + // OnResponseSent(response); + return new RegisterServerResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.RegisterServerRequest, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the RegisterServer service. + /// + public virtual IAsyncResult BeginRegisterServer(RegisterServerMessage message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.RegisterServerRequest); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.RegisterServerRequest); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.RegisterServerRequest, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the RegisterServer service to complete. + /// + public virtual RegisterServerResponseMessage EndRegisterServer(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new RegisterServerResponseMessage((RegisterServerResponse)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + + #region RegisterServer2 Service + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// Invokes the RegisterServer2 service. + /// + public IServiceResponse RegisterServer2(IServiceRequest incoming) + { + RegisterServer2Response response = null; + + try + { + OnRequestReceived(incoming); + + RegisterServer2Request request = (RegisterServer2Request)incoming; + + StatusCodeCollection configurationResults = null; + DiagnosticInfoCollection diagnosticInfos = null; + + response = new RegisterServer2Response(); + + response.ResponseHeader = ServerInstance.RegisterServer2( + request.RequestHeader, + request.Server, + request.DiscoveryConfiguration, + out configurationResults, + out diagnosticInfos); + + response.ConfigurationResults = configurationResults; + response.DiagnosticInfos = diagnosticInfos; + } + finally + { + OnResponseSent(response); + } + + return response; + } + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The operation contract for the RegisterServer2 service. + /// + public virtual RegisterServer2ResponseMessage RegisterServer2(RegisterServer2Message request) + { + RegisterServer2Response response = null; + + try + { + // OnRequestReceived(message.RegisterServer2Request); + + SetRequestContext(RequestEncoding.Xml); + response = (RegisterServer2Response)RegisterServer2(request.RegisterServer2Request); + // OnResponseSent(response); + return new RegisterServer2ResponseMessage(response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(request.RegisterServer2Request, e); + // OnResponseFaultSent(fault); + throw fault; + } + } + #else + /// + /// Asynchronously calls the RegisterServer2 service. + /// + public virtual IAsyncResult BeginRegisterServer2(RegisterServer2Message message, AsyncCallback callback, object callbackData) + { + try + { + OnRequestReceived(message.RegisterServer2Request); + + // check for bad data. + if (message == null) throw new ArgumentNullException("message"); + + // set the request context. + SetRequestContext(RequestEncoding.Xml); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.RegisterServer2Request); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(message.RegisterServer2Request, e); + OnResponseFaultSent(fault); + throw fault; + } + } + + /// + /// Waits for an asynchronous call to the RegisterServer2 service to complete. + /// + public virtual RegisterServer2ResponseMessage EndRegisterServer2(IAsyncResult ar) + { + try + { + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, true); + OnResponseSent(response); + return new RegisterServer2ResponseMessage((RegisterServer2Response)response); + } + catch (Exception e) + { + Exception fault = CreateSoapFault(ProcessRequestAsyncResult.GetRequest(ar), e); + OnResponseFaultSent(fault); + throw fault; + } + } + #endif + #endif + #endregion + #endregion + + #region Protected Members + /// + /// Populates the known types table. + /// + protected virtual void CreateKnownTypes() + { + #if (!OPCUA_EXCLUDE_FindServers) + SupportedServices.Add(DataTypeIds.FindServersRequest, new ServiceDefinition(typeof(FindServersRequest), new InvokeServiceEventHandler(FindServers))); + #endif + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + SupportedServices.Add(DataTypeIds.FindServersOnNetworkRequest, new ServiceDefinition(typeof(FindServersOnNetworkRequest), new InvokeServiceEventHandler(FindServersOnNetwork))); + #endif + #if (!OPCUA_EXCLUDE_GetEndpoints) + SupportedServices.Add(DataTypeIds.GetEndpointsRequest, new ServiceDefinition(typeof(GetEndpointsRequest), new InvokeServiceEventHandler(GetEndpoints))); + #endif + #if (!OPCUA_EXCLUDE_RegisterServer) + SupportedServices.Add(DataTypeIds.RegisterServerRequest, new ServiceDefinition(typeof(RegisterServerRequest), new InvokeServiceEventHandler(RegisterServer))); + #endif + #if (!OPCUA_EXCLUDE_RegisterServer2) + SupportedServices.Add(DataTypeIds.RegisterServer2Request, new ServiceDefinition(typeof(RegisterServer2Request), new InvokeServiceEventHandler(RegisterServer2))); + #endif + } + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Gds.Constants.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Gds.Constants.cs new file mode 100644 index 00000000..fce71c42 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Gds.Constants.cs @@ -0,0 +1,10377 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua.Gds +{ + #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 ApplicationRecordDataType DataType. + /// + public const uint ApplicationRecordDataType = 1; + } + #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 OPCUAGDSNamespaceMetadata_NamespaceFile_Open Method. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Open = 735; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Close Method. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Close = 738; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Read Method. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Read = 740; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Write Method. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Write = 743; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition Method. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition = 745; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition Method. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition = 748; + + /// + /// The identifier for the DirectoryType_FindApplications Method. + /// + public const uint DirectoryType_FindApplications = 15; + + /// + /// The identifier for the DirectoryType_RegisterApplication Method. + /// + public const uint DirectoryType_RegisterApplication = 18; + + /// + /// The identifier for the DirectoryType_UpdateApplication Method. + /// + public const uint DirectoryType_UpdateApplication = 188; + + /// + /// The identifier for the DirectoryType_UnregisterApplication Method. + /// + public const uint DirectoryType_UnregisterApplication = 21; + + /// + /// The identifier for the DirectoryType_GetApplication Method. + /// + public const uint DirectoryType_GetApplication = 210; + + /// + /// The identifier for the DirectoryType_QueryApplications Method. + /// + public const uint DirectoryType_QueryApplications = 868; + + /// + /// The identifier for the DirectoryType_QueryServers Method. + /// + public const uint DirectoryType_QueryServers = 23; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open = 519; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close = 522; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read = 524; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write = 527; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = 529; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = 532; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = 535; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = 15041; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = 15042; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = 15043; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = 15063; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = 15110; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = 15112; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = 15113; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = 15189; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = 15190; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = 15191; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = 15211; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 15258; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = 15260; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 15261; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open = 553; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close = 556; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read = 558; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write = 561; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = 563; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = 566; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = 569; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = 15337; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = 15338; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = 15339; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = 15359; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = 15406; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = 15408; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = 15409; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = 15485; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = 15486; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = 15487; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = 15507; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 15554; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = 15556; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 15557; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = 587; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = 590; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = 592; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = 595; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = 597; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = 600; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = 603; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = 15633; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = 15634; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = 15635; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = 15655; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = 15702; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = 15704; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = 15705; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = 15781; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = 15782; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = 15783; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = 15803; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 15850; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = 15852; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 15853; + + /// + /// The identifier for the CertificateDirectoryType_StartSigningRequest Method. + /// + public const uint CertificateDirectoryType_StartSigningRequest = 79; + + /// + /// The identifier for the CertificateDirectoryType_StartNewKeyPairRequest Method. + /// + public const uint CertificateDirectoryType_StartNewKeyPairRequest = 76; + + /// + /// The identifier for the CertificateDirectoryType_FinishRequest Method. + /// + public const uint CertificateDirectoryType_FinishRequest = 85; + + /// + /// The identifier for the CertificateDirectoryType_RevokeCertificate Method. + /// + public const uint CertificateDirectoryType_RevokeCertificate = 15003; + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateGroups Method. + /// + public const uint CertificateDirectoryType_GetCertificateGroups = 369; + + /// + /// The identifier for the CertificateDirectoryType_GetTrustList Method. + /// + public const uint CertificateDirectoryType_GetTrustList = 197; + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateStatus Method. + /// + public const uint CertificateDirectoryType_GetCertificateStatus = 222; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_StartRequest Method. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_StartRequest = 1012; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_FinishRequest Method. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_FinishRequest = 1015; + + /// + /// The identifier for the KeyCredentialServiceType_StartRequest Method. + /// + public const uint KeyCredentialServiceType_StartRequest = 1023; + + /// + /// The identifier for the KeyCredentialServiceType_FinishRequest Method. + /// + public const uint KeyCredentialServiceType_FinishRequest = 1026; + + /// + /// The identifier for the KeyCredentialServiceType_Revoke Method. + /// + public const uint KeyCredentialServiceType_Revoke = 1029; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_GetServiceDescription Method. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_GetServiceDescription = 1001; + + /// + /// The identifier for the AuthorizationServiceType_GetServiceDescription Method. + /// + public const uint AuthorizationServiceType_GetServiceDescription = 1004; + + /// + /// The identifier for the AuthorizationServiceType_RequestAccessToken Method. + /// + public const uint AuthorizationServiceType_RequestAccessToken = 969; + + /// + /// The identifier for the Directory_FindApplications Method. + /// + public const uint Directory_FindApplications = 143; + + /// + /// The identifier for the Directory_RegisterApplication Method. + /// + public const uint Directory_RegisterApplication = 146; + + /// + /// The identifier for the Directory_UpdateApplication Method. + /// + public const uint Directory_UpdateApplication = 200; + + /// + /// The identifier for the Directory_UnregisterApplication Method. + /// + public const uint Directory_UnregisterApplication = 149; + + /// + /// The identifier for the Directory_GetApplication Method. + /// + public const uint Directory_GetApplication = 216; + + /// + /// The identifier for the Directory_QueryApplications Method. + /// + public const uint Directory_QueryApplications = 992; + + /// + /// The identifier for the Directory_QueryServers Method. + /// + public const uint Directory_QueryServers = 151; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open = 622; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close = 625; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read = 627; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write = 630; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = 632; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = 635; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = 638; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate = 641; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate = 644; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate = 646; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = 15946; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = 15947; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = 15948; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = 15968; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = 16015; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = 16017; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = 16018; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = 16094; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = 16095; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = 16096; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = 16116; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 16163; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = 16165; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 16166; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open = 656; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close = 659; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read = 661; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write = 664; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = 666; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = 669; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = 672; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate = 675; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate = 678; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate = 680; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = 16242; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = 16243; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = 16244; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = 16264; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = 16311; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = 16313; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = 16314; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = 16390; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = 16391; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = 16392; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = 16412; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 16459; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = 16461; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 16462; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = 690; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = 693; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = 695; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = 698; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = 700; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = 703; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = 706; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate = 709; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate = 712; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate = 714; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = 16538; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = 16539; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = 16540; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = 16560; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = 16607; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = 16609; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = 16610; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = 16686; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = 16687; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = 16688; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = 16708; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = 16755; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = 16757; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = 16758; + + /// + /// The identifier for the Directory_StartSigningRequest Method. + /// + public const uint Directory_StartSigningRequest = 157; + + /// + /// The identifier for the Directory_StartNewKeyPairRequest Method. + /// + public const uint Directory_StartNewKeyPairRequest = 154; + + /// + /// The identifier for the Directory_FinishRequest Method. + /// + public const uint Directory_FinishRequest = 163; + + /// + /// The identifier for the Directory_GetCertificateGroups Method. + /// + public const uint Directory_GetCertificateGroups = 508; + + /// + /// The identifier for the Directory_GetTrustList Method. + /// + public const uint Directory_GetTrustList = 204; + + /// + /// The identifier for the Directory_GetCertificateStatus Method. + /// + public const uint Directory_GetCertificateStatus = 225; + } + #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 OPCUAGDSNamespaceMetadata Object. + /// + public const uint OPCUAGDSNamespaceMetadata = 721; + + /// + /// The identifier for the DirectoryType_Applications Object. + /// + public const uint DirectoryType_Applications = 14; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups Object. + /// + public const uint CertificateDirectoryType_CertificateGroups = 511; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup Object. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup = 512; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList = 513; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList = 547; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList = 581; + + /// + /// The identifier for the KeyCredentialManagement Object. + /// + public const uint KeyCredentialManagement = 1008; + + /// + /// The identifier for the AuthorizationServices Object. + /// + public const uint AuthorizationServices = 959; + + /// + /// The identifier for the Directory Object. + /// + public const uint Directory = 141; + + /// + /// The identifier for the Directory_Applications Object. + /// + public const uint Directory_Applications = 142; + + /// + /// The identifier for the Directory_CertificateGroups Object. + /// + public const uint Directory_CertificateGroups = 614; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup Object. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup = 615; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList = 616; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup Object. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup = 649; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList = 650; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup Object. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup = 683; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList = 684; + + /// + /// The identifier for the ApplicationRecordDataType_Encoding_DefaultBinary Object. + /// + public const uint ApplicationRecordDataType_Encoding_DefaultBinary = 134; + + /// + /// The identifier for the ApplicationRecordDataType_Encoding_DefaultXml Object. + /// + public const uint ApplicationRecordDataType_Encoding_DefaultXml = 127; + + /// + /// The identifier for the ApplicationRecordDataType_Encoding_DefaultJson Object. + /// + public const uint ApplicationRecordDataType_Encoding_DefaultJson = 8001; + } + #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 DirectoryType ObjectType. + /// + public const uint DirectoryType = 13; + + /// + /// The identifier for the ApplicationRegistrationChangedAuditEventType ObjectType. + /// + public const uint ApplicationRegistrationChangedAuditEventType = 26; + + /// + /// The identifier for the CertificateDirectoryType ObjectType. + /// + public const uint CertificateDirectoryType = 63; + + /// + /// The identifier for the CertificateRequestedAuditEventType ObjectType. + /// + public const uint CertificateRequestedAuditEventType = 91; + + /// + /// The identifier for the CertificateDeliveredAuditEventType ObjectType. + /// + public const uint CertificateDeliveredAuditEventType = 109; + + /// + /// The identifier for the KeyCredentialServiceType ObjectType. + /// + public const uint KeyCredentialServiceType = 1020; + + /// + /// The identifier for the KeyCredentialRequestedAuditEventType ObjectType. + /// + public const uint KeyCredentialRequestedAuditEventType = 1039; + + /// + /// The identifier for the KeyCredentialDeliveredAuditEventType ObjectType. + /// + public const uint KeyCredentialDeliveredAuditEventType = 1057; + + /// + /// The identifier for the KeyCredentialRevokedAuditEventType ObjectType. + /// + public const uint KeyCredentialRevokedAuditEventType = 1075; + + /// + /// The identifier for the AuthorizationServiceType ObjectType. + /// + public const uint AuthorizationServiceType = 966; + + /// + /// The identifier for the AccessTokenIssuedAuditEventType ObjectType. + /// + public const uint AccessTokenIssuedAuditEventType = 975; + } + #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 OPCUAGDSNamespaceMetadata_NamespaceUri Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceUri = 722; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceVersion Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceVersion = 723; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespacePublicationDate Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespacePublicationDate = 724; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_IsNamespaceSubset Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_IsNamespaceSubset = 725; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_StaticNodeIdTypes Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_StaticNodeIdTypes = 726; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_StaticNumericNodeIdRange Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_StaticNumericNodeIdRange = 727; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_StaticStringNodeIdPattern Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_StaticStringNodeIdPattern = 728; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Size Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Size = 730; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Writable Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Writable = 731; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_UserWritable Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_UserWritable = 732; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_OpenCount Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_OpenCount = 733; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Open_InputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Open_InputArguments = 736; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Open_OutputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Open_OutputArguments = 737; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Close_InputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Close_InputArguments = 739; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Read_InputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Read_InputArguments = 741; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Read_OutputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Read_OutputArguments = 742; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Write_InputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_Write_InputArguments = 744; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_InputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_InputArguments = 746; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_OutputArguments = 747; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition_InputArguments Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition_InputArguments = 749; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_DefaultRolePermissions Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_DefaultRolePermissions = 862; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_DefaultUserRolePermissions Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_DefaultUserRolePermissions = 863; + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_DefaultAccessRestrictions Variable. + /// + public const uint OPCUAGDSNamespaceMetadata_DefaultAccessRestrictions = 864; + + /// + /// The identifier for the DirectoryType_FindApplications_InputArguments Variable. + /// + public const uint DirectoryType_FindApplications_InputArguments = 16; + + /// + /// The identifier for the DirectoryType_FindApplications_OutputArguments Variable. + /// + public const uint DirectoryType_FindApplications_OutputArguments = 17; + + /// + /// The identifier for the DirectoryType_RegisterApplication_InputArguments Variable. + /// + public const uint DirectoryType_RegisterApplication_InputArguments = 19; + + /// + /// The identifier for the DirectoryType_RegisterApplication_OutputArguments Variable. + /// + public const uint DirectoryType_RegisterApplication_OutputArguments = 20; + + /// + /// The identifier for the DirectoryType_UpdateApplication_InputArguments Variable. + /// + public const uint DirectoryType_UpdateApplication_InputArguments = 189; + + /// + /// The identifier for the DirectoryType_UnregisterApplication_InputArguments Variable. + /// + public const uint DirectoryType_UnregisterApplication_InputArguments = 22; + + /// + /// The identifier for the DirectoryType_GetApplication_InputArguments Variable. + /// + public const uint DirectoryType_GetApplication_InputArguments = 211; + + /// + /// The identifier for the DirectoryType_GetApplication_OutputArguments Variable. + /// + public const uint DirectoryType_GetApplication_OutputArguments = 212; + + /// + /// The identifier for the DirectoryType_QueryApplications_InputArguments Variable. + /// + public const uint DirectoryType_QueryApplications_InputArguments = 869; + + /// + /// The identifier for the DirectoryType_QueryApplications_OutputArguments Variable. + /// + public const uint DirectoryType_QueryApplications_OutputArguments = 870; + + /// + /// The identifier for the DirectoryType_QueryServers_InputArguments Variable. + /// + public const uint DirectoryType_QueryServers_InputArguments = 24; + + /// + /// The identifier for the DirectoryType_QueryServers_OutputArguments Variable. + /// + public const uint DirectoryType_QueryServers_OutputArguments = 25; + + /// + /// The identifier for the CertificateDirectoryType_FindApplications_InputArguments Variable. + /// + public const uint CertificateDirectoryType_FindApplications_InputArguments = 66; + + /// + /// The identifier for the CertificateDirectoryType_FindApplications_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_FindApplications_OutputArguments = 67; + + /// + /// The identifier for the CertificateDirectoryType_RegisterApplication_InputArguments Variable. + /// + public const uint CertificateDirectoryType_RegisterApplication_InputArguments = 69; + + /// + /// The identifier for the CertificateDirectoryType_RegisterApplication_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_RegisterApplication_OutputArguments = 70; + + /// + /// The identifier for the CertificateDirectoryType_UpdateApplication_InputArguments Variable. + /// + public const uint CertificateDirectoryType_UpdateApplication_InputArguments = 194; + + /// + /// The identifier for the CertificateDirectoryType_UnregisterApplication_InputArguments Variable. + /// + public const uint CertificateDirectoryType_UnregisterApplication_InputArguments = 72; + + /// + /// The identifier for the CertificateDirectoryType_GetApplication_InputArguments Variable. + /// + public const uint CertificateDirectoryType_GetApplication_InputArguments = 214; + + /// + /// The identifier for the CertificateDirectoryType_GetApplication_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_GetApplication_OutputArguments = 215; + + /// + /// The identifier for the CertificateDirectoryType_QueryApplications_InputArguments Variable. + /// + public const uint CertificateDirectoryType_QueryApplications_InputArguments = 872; + + /// + /// The identifier for the CertificateDirectoryType_QueryApplications_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_QueryApplications_OutputArguments = 873; + + /// + /// The identifier for the CertificateDirectoryType_QueryServers_InputArguments Variable. + /// + public const uint CertificateDirectoryType_QueryServers_InputArguments = 74; + + /// + /// The identifier for the CertificateDirectoryType_QueryServers_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_QueryServers_OutputArguments = 75; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Size = 514; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = 515; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = 516; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = 517; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = 520; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = 521; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = 523; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = 525; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = 526; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = 528; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 530; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 531; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 533; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = 534; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 536; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 537; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 539; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 540; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 542; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 544; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateTypes = 545; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = 15009; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = 15010; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = 15011; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = 15012; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = 15013; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = 15014; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = 15016; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = 15017; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = 15018; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = 15019; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = 15022; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = 15023; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = 15024; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = 15025; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = 15026; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = 15034; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = 15035; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = 15036; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = 15037; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = 15038; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = 15039; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = 15040; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = 15044; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = 15045; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = 15046; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = 15055; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = 15064; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = 15066; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = 15067; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = 15068; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = 15076; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = 15078; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = 15087; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = 15096; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = 15097; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = 15102; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = 15109; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 15111; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = 15114; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = 15122; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = 15135; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = 15151; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = 15152; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = 15154; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = 15155; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = 15157; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = 15158; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = 15159; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = 15160; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = 15161; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = 15162; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = 15164; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = 15165; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = 15166; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = 15167; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = 15170; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = 15171; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = 15172; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = 15173; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = 15174; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = 15182; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = 15183; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = 15184; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 15185; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = 15186; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = 15187; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = 15188; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = 15192; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = 15193; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = 15194; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = 15203; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = 15212; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = 15214; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = 15215; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = 15216; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = 15224; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = 15226; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = 15235; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = 15244; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 15245; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 15250; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 15257; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 15259; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = 15262; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = 15270; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = 15283; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = 15299; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = 15300; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = 15301; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = 15302; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Size = 548; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = 549; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = 550; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = 551; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = 554; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = 555; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = 557; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = 559; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = 560; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = 562; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 564; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 565; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 567; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = 568; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 570; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 571; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 573; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 574; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 576; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 578; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateTypes = 579; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = 15305; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = 15306; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = 15307; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = 15308; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = 15309; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = 15310; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = 15312; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = 15313; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = 15314; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = 15315; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = 15318; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = 15319; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = 15320; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = 15321; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = 15322; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = 15330; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = 15331; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = 15332; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = 15333; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = 15334; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = 15335; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = 15336; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = 15340; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = 15341; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = 15342; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = 15351; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = 15360; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = 15362; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = 15363; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = 15364; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = 15372; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = 15374; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = 15383; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = 15392; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = 15393; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = 15398; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = 15405; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 15407; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = 15410; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = 15418; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = 15431; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = 15447; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = 15448; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = 15450; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = 15451; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = 15453; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = 15454; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = 15455; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = 15456; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = 15457; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = 15458; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = 15460; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = 15461; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = 15462; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = 15463; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = 15466; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = 15467; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = 15468; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = 15469; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = 15470; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = 15478; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = 15479; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = 15480; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 15481; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = 15482; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = 15483; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = 15484; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = 15488; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = 15489; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = 15490; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = 15499; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = 15508; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = 15510; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = 15511; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = 15512; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = 15520; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = 15522; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = 15531; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = 15540; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 15541; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 15546; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 15553; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 15555; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = 15558; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = 15566; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = 15579; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = 15595; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = 15596; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = 15597; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = 15598; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = 582; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = 583; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = 584; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = 585; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = 588; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 589; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = 591; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = 593; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 594; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = 596; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 598; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 599; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 601; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = 602; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 604; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 605; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 607; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 608; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 610; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 612; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = 613; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = 15601; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = 15602; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = 15603; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = 15604; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = 15605; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = 15606; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = 15608; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = 15609; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = 15610; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = 15611; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = 15614; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = 15615; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = 15616; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = 15617; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = 15618; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = 15626; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = 15627; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = 15628; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = 15629; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = 15630; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = 15631; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = 15632; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = 15636; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = 15637; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = 15638; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = 15647; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = 15656; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = 15658; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = 15659; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = 15660; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = 15668; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = 15670; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = 15679; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = 15688; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = 15689; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = 15694; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = 15701; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 15703; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = 15706; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = 15714; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = 15727; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = 15743; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = 15744; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = 15746; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = 15747; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = 15749; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = 15750; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = 15751; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = 15752; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = 15753; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = 15754; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = 15756; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = 15757; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = 15758; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = 15759; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = 15762; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = 15763; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = 15764; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = 15765; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = 15766; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = 15774; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = 15775; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = 15776; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 15777; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = 15778; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = 15779; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = 15780; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = 15784; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = 15785; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = 15786; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = 15795; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = 15804; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = 15806; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = 15807; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = 15808; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = 15816; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = 15818; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = 15827; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = 15836; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 15837; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 15842; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 15849; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 15851; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = 15854; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = 15862; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = 15875; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = 15891; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = 15892; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = 15893; + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = 15894; + + /// + /// The identifier for the CertificateDirectoryType_StartSigningRequest_InputArguments Variable. + /// + public const uint CertificateDirectoryType_StartSigningRequest_InputArguments = 80; + + /// + /// The identifier for the CertificateDirectoryType_StartSigningRequest_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_StartSigningRequest_OutputArguments = 81; + + /// + /// The identifier for the CertificateDirectoryType_StartNewKeyPairRequest_InputArguments Variable. + /// + public const uint CertificateDirectoryType_StartNewKeyPairRequest_InputArguments = 77; + + /// + /// The identifier for the CertificateDirectoryType_StartNewKeyPairRequest_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_StartNewKeyPairRequest_OutputArguments = 78; + + /// + /// The identifier for the CertificateDirectoryType_FinishRequest_InputArguments Variable. + /// + public const uint CertificateDirectoryType_FinishRequest_InputArguments = 86; + + /// + /// The identifier for the CertificateDirectoryType_FinishRequest_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_FinishRequest_OutputArguments = 87; + + /// + /// The identifier for the CertificateDirectoryType_RevokeCertificate_InputArguments Variable. + /// + public const uint CertificateDirectoryType_RevokeCertificate_InputArguments = 15004; + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateGroups_InputArguments Variable. + /// + public const uint CertificateDirectoryType_GetCertificateGroups_InputArguments = 370; + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateGroups_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_GetCertificateGroups_OutputArguments = 371; + + /// + /// The identifier for the CertificateDirectoryType_GetTrustList_InputArguments Variable. + /// + public const uint CertificateDirectoryType_GetTrustList_InputArguments = 198; + + /// + /// The identifier for the CertificateDirectoryType_GetTrustList_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_GetTrustList_OutputArguments = 199; + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateStatus_InputArguments Variable. + /// + public const uint CertificateDirectoryType_GetCertificateStatus_InputArguments = 223; + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateStatus_OutputArguments Variable. + /// + public const uint CertificateDirectoryType_GetCertificateStatus_OutputArguments = 224; + + /// + /// The identifier for the CertificateRequestedAuditEventType_CertificateGroup Variable. + /// + public const uint CertificateRequestedAuditEventType_CertificateGroup = 717; + + /// + /// The identifier for the CertificateRequestedAuditEventType_CertificateType Variable. + /// + public const uint CertificateRequestedAuditEventType_CertificateType = 718; + + /// + /// The identifier for the CertificateDeliveredAuditEventType_CertificateGroup Variable. + /// + public const uint CertificateDeliveredAuditEventType_CertificateGroup = 719; + + /// + /// The identifier for the CertificateDeliveredAuditEventType_CertificateType Variable. + /// + public const uint CertificateDeliveredAuditEventType_CertificateType = 720; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_ResourceUri Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_ResourceUri = 1010; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_ProfileUris Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_ProfileUris = 1011; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_StartRequest_InputArguments Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_StartRequest_InputArguments = 1013; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_StartRequest_OutputArguments Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_StartRequest_OutputArguments = 1014; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_InputArguments Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_InputArguments = 1016; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_OutputArguments Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_OutputArguments = 1017; + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_Revoke_InputArguments Variable. + /// + public const uint KeyCredentialManagement_ServiceName_Placeholder_Revoke_InputArguments = 1019; + + /// + /// The identifier for the KeyCredentialServiceType_ResourceUri Variable. + /// + public const uint KeyCredentialServiceType_ResourceUri = 1021; + + /// + /// The identifier for the KeyCredentialServiceType_ProfileUris Variable. + /// + public const uint KeyCredentialServiceType_ProfileUris = 1022; + + /// + /// The identifier for the KeyCredentialServiceType_StartRequest_InputArguments Variable. + /// + public const uint KeyCredentialServiceType_StartRequest_InputArguments = 1024; + + /// + /// The identifier for the KeyCredentialServiceType_StartRequest_OutputArguments Variable. + /// + public const uint KeyCredentialServiceType_StartRequest_OutputArguments = 1025; + + /// + /// The identifier for the KeyCredentialServiceType_FinishRequest_InputArguments Variable. + /// + public const uint KeyCredentialServiceType_FinishRequest_InputArguments = 1027; + + /// + /// The identifier for the KeyCredentialServiceType_FinishRequest_OutputArguments Variable. + /// + public const uint KeyCredentialServiceType_FinishRequest_OutputArguments = 1028; + + /// + /// The identifier for the KeyCredentialServiceType_Revoke_InputArguments Variable. + /// + public const uint KeyCredentialServiceType_Revoke_InputArguments = 1030; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceUri Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_ServiceUri = 1000; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceCertificate Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_ServiceCertificate = 962; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_GetServiceDescription_OutputArguments Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_GetServiceDescription_OutputArguments = 1002; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_InputArguments Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_InputArguments = 964; + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_OutputArguments Variable. + /// + public const uint AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_OutputArguments = 965; + + /// + /// The identifier for the AuthorizationServiceType_ServiceUri Variable. + /// + public const uint AuthorizationServiceType_ServiceUri = 1003; + + /// + /// The identifier for the AuthorizationServiceType_ServiceCertificate Variable. + /// + public const uint AuthorizationServiceType_ServiceCertificate = 968; + + /// + /// The identifier for the AuthorizationServiceType_UserTokenPolicies Variable. + /// + public const uint AuthorizationServiceType_UserTokenPolicies = 967; + + /// + /// The identifier for the AuthorizationServiceType_GetServiceDescription_OutputArguments Variable. + /// + public const uint AuthorizationServiceType_GetServiceDescription_OutputArguments = 1005; + + /// + /// The identifier for the AuthorizationServiceType_RequestAccessToken_InputArguments Variable. + /// + public const uint AuthorizationServiceType_RequestAccessToken_InputArguments = 970; + + /// + /// The identifier for the AuthorizationServiceType_RequestAccessToken_OutputArguments Variable. + /// + public const uint AuthorizationServiceType_RequestAccessToken_OutputArguments = 971; + + /// + /// The identifier for the Directory_FindApplications_InputArguments Variable. + /// + public const uint Directory_FindApplications_InputArguments = 144; + + /// + /// The identifier for the Directory_FindApplications_OutputArguments Variable. + /// + public const uint Directory_FindApplications_OutputArguments = 145; + + /// + /// The identifier for the Directory_RegisterApplication_InputArguments Variable. + /// + public const uint Directory_RegisterApplication_InputArguments = 147; + + /// + /// The identifier for the Directory_RegisterApplication_OutputArguments Variable. + /// + public const uint Directory_RegisterApplication_OutputArguments = 148; + + /// + /// The identifier for the Directory_UpdateApplication_InputArguments Variable. + /// + public const uint Directory_UpdateApplication_InputArguments = 201; + + /// + /// The identifier for the Directory_UnregisterApplication_InputArguments Variable. + /// + public const uint Directory_UnregisterApplication_InputArguments = 150; + + /// + /// The identifier for the Directory_GetApplication_InputArguments Variable. + /// + public const uint Directory_GetApplication_InputArguments = 217; + + /// + /// The identifier for the Directory_GetApplication_OutputArguments Variable. + /// + public const uint Directory_GetApplication_OutputArguments = 218; + + /// + /// The identifier for the Directory_QueryApplications_InputArguments Variable. + /// + public const uint Directory_QueryApplications_InputArguments = 993; + + /// + /// The identifier for the Directory_QueryApplications_OutputArguments Variable. + /// + public const uint Directory_QueryApplications_OutputArguments = 994; + + /// + /// The identifier for the Directory_QueryServers_InputArguments Variable. + /// + public const uint Directory_QueryServers_InputArguments = 152; + + /// + /// The identifier for the Directory_QueryServers_OutputArguments Variable. + /// + public const uint Directory_QueryServers_OutputArguments = 153; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Size = 617; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = 618; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = 619; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = 620; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = 623; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = 624; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = 626; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = 628; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = 629; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = 631; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 633; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 634; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 636; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = 637; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 639; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 640; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 642; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 643; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 645; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 647; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateTypes = 648; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = 15914; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = 15915; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = 15916; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = 15917; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = 15918; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = 15919; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = 15921; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = 15922; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = 15923; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = 15924; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = 15927; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = 15928; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = 15929; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = 15930; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = 15931; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = 15939; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = 15940; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = 15941; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = 15942; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = 15943; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = 15944; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = 15945; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = 15949; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = 15950; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = 15951; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = 15960; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = 15969; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = 15971; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = 15972; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = 15973; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = 15981; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = 15983; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = 15992; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = 16001; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = 16002; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = 16007; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = 16014; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 16016; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = 16019; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = 16027; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = 16040; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = 16056; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = 16057; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = 16059; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = 16060; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = 16062; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = 16063; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = 16064; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = 16065; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = 16066; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = 16067; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = 16069; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = 16070; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = 16071; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = 16072; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = 16075; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = 16076; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = 16077; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = 16078; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = 16079; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = 16087; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = 16088; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = 16089; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 16090; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = 16091; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = 16092; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = 16093; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = 16097; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = 16098; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = 16099; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = 16108; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = 16117; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = 16119; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = 16120; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = 16121; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = 16129; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = 16131; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = 16140; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = 16149; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 16150; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 16155; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 16162; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 16164; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = 16167; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = 16175; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = 16188; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = 16204; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = 16205; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = 16206; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = 16207; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Size = 651; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = 652; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = 653; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = 654; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = 657; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = 658; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = 660; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = 662; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = 663; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = 665; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 667; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 668; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 670; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = 671; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 673; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 674; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 676; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 677; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 679; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 681; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateTypes = 682; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = 16210; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = 16211; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = 16212; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = 16213; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = 16214; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = 16215; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = 16217; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = 16218; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = 16219; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = 16220; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = 16223; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = 16224; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = 16225; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = 16226; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = 16227; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = 16235; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = 16236; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = 16237; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = 16238; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = 16239; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = 16240; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = 16241; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = 16245; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = 16246; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = 16247; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = 16256; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = 16265; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = 16267; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = 16268; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = 16269; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = 16277; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = 16279; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = 16288; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = 16297; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = 16298; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = 16303; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = 16310; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 16312; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = 16315; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = 16323; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = 16336; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = 16352; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = 16353; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = 16355; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = 16356; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = 16358; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = 16359; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = 16360; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = 16361; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = 16362; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = 16363; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = 16365; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = 16366; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = 16367; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = 16368; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = 16371; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = 16372; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = 16373; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = 16374; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = 16375; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = 16383; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = 16384; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = 16385; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 16386; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = 16387; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = 16388; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = 16389; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = 16393; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = 16394; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = 16395; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = 16404; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = 16413; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = 16415; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = 16416; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = 16417; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = 16425; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = 16427; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = 16436; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = 16445; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 16446; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 16451; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 16458; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 16460; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = 16463; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = 16471; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = 16484; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = 16500; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = 16501; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = 16502; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = 16503; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = 685; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = 686; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = 687; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = 688; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = 691; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 692; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = 694; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = 696; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 697; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = 699; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 701; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 702; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 704; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = 705; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 707; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 708; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 710; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 711; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 713; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 715; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = 716; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = 16506; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = 16507; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = 16508; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = 16509; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = 16510; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = 16511; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = 16513; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = 16514; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = 16515; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = 16516; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = 16519; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = 16520; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = 16521; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = 16522; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = 16523; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = 16531; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = 16532; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = 16533; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = 16534; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = 16535; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = 16536; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = 16537; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = 16541; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = 16542; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = 16543; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = 16552; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = 16561; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = 16563; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = 16564; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = 16565; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = 16573; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = 16575; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = 16584; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = 16593; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = 16594; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = 16599; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = 16606; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = 16608; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = 16611; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = 16619; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = 16632; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = 16648; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = 16649; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = 16651; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = 16652; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = 16654; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = 16655; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = 16656; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = 16657; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = 16658; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = 16659; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = 16661; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = 16662; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = 16663; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = 16664; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = 16667; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = 16668; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = 16669; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = 16670; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = 16671; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = 16679; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = 16680; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = 16681; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = 16682; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = 16683; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = 16684; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = 16685; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = 16689; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = 16690; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = 16691; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = 16700; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = 16709; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = 16711; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = 16712; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = 16713; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = 16721; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = 16723; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = 16732; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = 16741; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = 16742; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = 16747; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = 16754; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = 16756; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = 16759; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = 16767; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = 16780; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = 16796; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = 16797; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = 16798; + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public const uint Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = 16799; + + /// + /// The identifier for the Directory_StartSigningRequest_InputArguments Variable. + /// + public const uint Directory_StartSigningRequest_InputArguments = 158; + + /// + /// The identifier for the Directory_StartSigningRequest_OutputArguments Variable. + /// + public const uint Directory_StartSigningRequest_OutputArguments = 159; + + /// + /// The identifier for the Directory_StartNewKeyPairRequest_InputArguments Variable. + /// + public const uint Directory_StartNewKeyPairRequest_InputArguments = 155; + + /// + /// The identifier for the Directory_StartNewKeyPairRequest_OutputArguments Variable. + /// + public const uint Directory_StartNewKeyPairRequest_OutputArguments = 156; + + /// + /// The identifier for the Directory_FinishRequest_InputArguments Variable. + /// + public const uint Directory_FinishRequest_InputArguments = 164; + + /// + /// The identifier for the Directory_FinishRequest_OutputArguments Variable. + /// + public const uint Directory_FinishRequest_OutputArguments = 165; + + /// + /// The identifier for the Directory_RevokeCertificate_InputArguments Variable. + /// + public const uint Directory_RevokeCertificate_InputArguments = 15006; + + /// + /// The identifier for the Directory_GetCertificateGroups_InputArguments Variable. + /// + public const uint Directory_GetCertificateGroups_InputArguments = 509; + + /// + /// The identifier for the Directory_GetCertificateGroups_OutputArguments Variable. + /// + public const uint Directory_GetCertificateGroups_OutputArguments = 510; + + /// + /// The identifier for the Directory_GetTrustList_InputArguments Variable. + /// + public const uint Directory_GetTrustList_InputArguments = 205; + + /// + /// The identifier for the Directory_GetTrustList_OutputArguments Variable. + /// + public const uint Directory_GetTrustList_OutputArguments = 206; + + /// + /// The identifier for the Directory_GetCertificateStatus_InputArguments Variable. + /// + public const uint Directory_GetCertificateStatus_InputArguments = 226; + + /// + /// The identifier for the Directory_GetCertificateStatus_OutputArguments Variable. + /// + public const uint Directory_GetCertificateStatus_OutputArguments = 227; + + /// + /// The identifier for the OpcUaGds_BinarySchema Variable. + /// + public const uint OpcUaGds_BinarySchema = 135; + + /// + /// The identifier for the OpcUaGds_BinarySchema_NamespaceUri Variable. + /// + public const uint OpcUaGds_BinarySchema_NamespaceUri = 137; + + /// + /// The identifier for the OpcUaGds_BinarySchema_Deprecated Variable. + /// + public const uint OpcUaGds_BinarySchema_Deprecated = 8002; + + /// + /// The identifier for the OpcUaGds_BinarySchema_ApplicationRecordDataType Variable. + /// + public const uint OpcUaGds_BinarySchema_ApplicationRecordDataType = 138; + + /// + /// The identifier for the OpcUaGds_XmlSchema Variable. + /// + public const uint OpcUaGds_XmlSchema = 128; + + /// + /// The identifier for the OpcUaGds_XmlSchema_NamespaceUri Variable. + /// + public const uint OpcUaGds_XmlSchema_NamespaceUri = 130; + + /// + /// The identifier for the OpcUaGds_XmlSchema_Deprecated Variable. + /// + public const uint OpcUaGds_XmlSchema_Deprecated = 8004; + + /// + /// The identifier for the OpcUaGds_XmlSchema_ApplicationRecordDataType Variable. + /// + public const uint OpcUaGds_XmlSchema_ApplicationRecordDataType = 131; + } + #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 ApplicationRecordDataType DataType. + /// + public static readonly ExpandedNodeId ApplicationRecordDataType = new ExpandedNodeId(Opc.Ua.Gds.DataTypes.ApplicationRecordDataType, Opc.Ua.Gds.Namespaces.OpcUaGds); + } + #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 OPCUAGDSNamespaceMetadata_NamespaceFile_Open Method. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.OPCUAGDSNamespaceMetadata_NamespaceFile_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Close Method. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.OPCUAGDSNamespaceMetadata_NamespaceFile_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Read Method. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.OPCUAGDSNamespaceMetadata_NamespaceFile_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Write Method. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.OPCUAGDSNamespaceMetadata_NamespaceFile_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition Method. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition Method. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_FindApplications Method. + /// + public static readonly ExpandedNodeId DirectoryType_FindApplications = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_FindApplications, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_RegisterApplication Method. + /// + public static readonly ExpandedNodeId DirectoryType_RegisterApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_RegisterApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_UpdateApplication Method. + /// + public static readonly ExpandedNodeId DirectoryType_UpdateApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_UpdateApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_UnregisterApplication Method. + /// + public static readonly ExpandedNodeId DirectoryType_UnregisterApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_UnregisterApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_GetApplication Method. + /// + public static readonly ExpandedNodeId DirectoryType_GetApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_GetApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_QueryApplications Method. + /// + public static readonly ExpandedNodeId DirectoryType_QueryApplications = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_QueryApplications, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_QueryServers Method. + /// + public static readonly ExpandedNodeId DirectoryType_QueryServers = new ExpandedNodeId(Opc.Ua.Gds.Methods.DirectoryType_QueryServers, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_StartSigningRequest Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_StartSigningRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_StartSigningRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_StartNewKeyPairRequest Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_StartNewKeyPairRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_StartNewKeyPairRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_FinishRequest Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_FinishRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_FinishRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_RevokeCertificate Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_RevokeCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_RevokeCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateGroups Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetCertificateGroups = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_GetCertificateGroups, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetTrustList Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetTrustList = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_GetTrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateStatus Method. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetCertificateStatus = new ExpandedNodeId(Opc.Ua.Gds.Methods.CertificateDirectoryType_GetCertificateStatus, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_StartRequest Method. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_StartRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.KeyCredentialManagement_ServiceName_Placeholder_StartRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_FinishRequest Method. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_FinishRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.KeyCredentialManagement_ServiceName_Placeholder_FinishRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_StartRequest Method. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_StartRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.KeyCredentialServiceType_StartRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_FinishRequest Method. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_FinishRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.KeyCredentialServiceType_FinishRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_Revoke Method. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_Revoke = new ExpandedNodeId(Opc.Ua.Gds.Methods.KeyCredentialServiceType_Revoke, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_GetServiceDescription Method. + /// + public static readonly ExpandedNodeId AuthorizationServices_ServiceName_Placeholder_GetServiceDescription = new ExpandedNodeId(Opc.Ua.Gds.Methods.AuthorizationServices_ServiceName_Placeholder_GetServiceDescription, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_GetServiceDescription Method. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_GetServiceDescription = new ExpandedNodeId(Opc.Ua.Gds.Methods.AuthorizationServiceType_GetServiceDescription, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_RequestAccessToken Method. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_RequestAccessToken = new ExpandedNodeId(Opc.Ua.Gds.Methods.AuthorizationServiceType_RequestAccessToken, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_FindApplications Method. + /// + public static readonly ExpandedNodeId Directory_FindApplications = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_FindApplications, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_RegisterApplication Method. + /// + public static readonly ExpandedNodeId Directory_RegisterApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_RegisterApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_UpdateApplication Method. + /// + public static readonly ExpandedNodeId Directory_UpdateApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_UpdateApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_UnregisterApplication Method. + /// + public static readonly ExpandedNodeId Directory_UnregisterApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_UnregisterApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetApplication Method. + /// + public static readonly ExpandedNodeId Directory_GetApplication = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_GetApplication, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_QueryApplications Method. + /// + public static readonly ExpandedNodeId Directory_QueryApplications = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_QueryApplications, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_QueryServers Method. + /// + public static readonly ExpandedNodeId Directory_QueryServers = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_QueryServers, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Disable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Enable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_Unshelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve Method. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_OneShotShelve, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_StartSigningRequest Method. + /// + public static readonly ExpandedNodeId Directory_StartSigningRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_StartSigningRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_StartNewKeyPairRequest Method. + /// + public static readonly ExpandedNodeId Directory_StartNewKeyPairRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_StartNewKeyPairRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_FinishRequest Method. + /// + public static readonly ExpandedNodeId Directory_FinishRequest = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_FinishRequest, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetCertificateGroups Method. + /// + public static readonly ExpandedNodeId Directory_GetCertificateGroups = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_GetCertificateGroups, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetTrustList Method. + /// + public static readonly ExpandedNodeId Directory_GetTrustList = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_GetTrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetCertificateStatus Method. + /// + public static readonly ExpandedNodeId Directory_GetCertificateStatus = new ExpandedNodeId(Opc.Ua.Gds.Methods.Directory_GetCertificateStatus, Opc.Ua.Gds.Namespaces.OpcUaGds); + } + #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 OPCUAGDSNamespaceMetadata Object. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata = new ExpandedNodeId(Opc.Ua.Gds.Objects.OPCUAGDSNamespaceMetadata, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_Applications Object. + /// + public static readonly ExpandedNodeId DirectoryType_Applications = new ExpandedNodeId(Opc.Ua.Gds.Objects.DirectoryType_Applications, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups Object. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups = new ExpandedNodeId(Opc.Ua.Gds.Objects.CertificateDirectoryType_CertificateGroups, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup Object. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup = new ExpandedNodeId(Opc.Ua.Gds.Objects.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList = new ExpandedNodeId(Opc.Ua.Gds.Objects.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList = new ExpandedNodeId(Opc.Ua.Gds.Objects.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList = new ExpandedNodeId(Opc.Ua.Gds.Objects.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement Object. + /// + public static readonly ExpandedNodeId KeyCredentialManagement = new ExpandedNodeId(Opc.Ua.Gds.Objects.KeyCredentialManagement, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices Object. + /// + public static readonly ExpandedNodeId AuthorizationServices = new ExpandedNodeId(Opc.Ua.Gds.Objects.AuthorizationServices, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory Object. + /// + public static readonly ExpandedNodeId Directory = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_Applications Object. + /// + public static readonly ExpandedNodeId Directory_Applications = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_Applications, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups_DefaultApplicationGroup, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups_DefaultApplicationGroup_TrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups_DefaultHttpsGroup, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups_DefaultHttpsGroup_TrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups_DefaultUserTokenGroup, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList Object. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList = new ExpandedNodeId(Opc.Ua.Gds.Objects.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the ApplicationRecordDataType_Encoding_DefaultBinary Object. + /// + public static readonly ExpandedNodeId ApplicationRecordDataType_Encoding_DefaultBinary = new ExpandedNodeId(Opc.Ua.Gds.Objects.ApplicationRecordDataType_Encoding_DefaultBinary, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the ApplicationRecordDataType_Encoding_DefaultXml Object. + /// + public static readonly ExpandedNodeId ApplicationRecordDataType_Encoding_DefaultXml = new ExpandedNodeId(Opc.Ua.Gds.Objects.ApplicationRecordDataType_Encoding_DefaultXml, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the ApplicationRecordDataType_Encoding_DefaultJson Object. + /// + public static readonly ExpandedNodeId ApplicationRecordDataType_Encoding_DefaultJson = new ExpandedNodeId(Opc.Ua.Gds.Objects.ApplicationRecordDataType_Encoding_DefaultJson, Opc.Ua.Gds.Namespaces.OpcUaGds); + } + #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 DirectoryType ObjectType. + /// + public static readonly ExpandedNodeId DirectoryType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.DirectoryType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the ApplicationRegistrationChangedAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId ApplicationRegistrationChangedAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.ApplicationRegistrationChangedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType ObjectType. + /// + public static readonly ExpandedNodeId CertificateDirectoryType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.CertificateDirectoryType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateRequestedAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId CertificateRequestedAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.CertificateRequestedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDeliveredAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId CertificateDeliveredAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.CertificateDeliveredAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType ObjectType. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.KeyCredentialServiceType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialRequestedAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId KeyCredentialRequestedAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.KeyCredentialRequestedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialDeliveredAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId KeyCredentialDeliveredAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.KeyCredentialDeliveredAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialRevokedAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId KeyCredentialRevokedAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.KeyCredentialRevokedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType ObjectType. + /// + public static readonly ExpandedNodeId AuthorizationServiceType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.AuthorizationServiceType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AccessTokenIssuedAuditEventType ObjectType. + /// + public static readonly ExpandedNodeId AccessTokenIssuedAuditEventType = new ExpandedNodeId(Opc.Ua.Gds.ObjectTypes.AccessTokenIssuedAuditEventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + } + #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 OPCUAGDSNamespaceMetadata_NamespaceUri Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceVersion Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceVersion = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceVersion, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespacePublicationDate Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespacePublicationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespacePublicationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_IsNamespaceSubset Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_IsNamespaceSubset = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_IsNamespaceSubset, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_StaticNodeIdTypes Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_StaticNodeIdTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_StaticNodeIdTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_StaticNumericNodeIdRange Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_StaticNumericNodeIdRange = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_StaticNumericNodeIdRange, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_StaticStringNodeIdPattern Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_StaticStringNodeIdPattern = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_StaticStringNodeIdPattern, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Size Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Writable Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_UserWritable Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_OpenCount Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_NamespaceFile_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_DefaultRolePermissions Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_DefaultRolePermissions = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_DefaultRolePermissions, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_DefaultUserRolePermissions Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_DefaultUserRolePermissions = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_DefaultUserRolePermissions, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OPCUAGDSNamespaceMetadata_DefaultAccessRestrictions Variable. + /// + public static readonly ExpandedNodeId OPCUAGDSNamespaceMetadata_DefaultAccessRestrictions = new ExpandedNodeId(Opc.Ua.Gds.Variables.OPCUAGDSNamespaceMetadata_DefaultAccessRestrictions, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_FindApplications_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_FindApplications_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_FindApplications_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_FindApplications_OutputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_FindApplications_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_FindApplications_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_RegisterApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_RegisterApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_RegisterApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_RegisterApplication_OutputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_RegisterApplication_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_RegisterApplication_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_UpdateApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_UpdateApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_UpdateApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_UnregisterApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_UnregisterApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_UnregisterApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_GetApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_GetApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_GetApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_GetApplication_OutputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_GetApplication_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_GetApplication_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_QueryApplications_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_QueryApplications_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_QueryApplications_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_QueryApplications_OutputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_QueryApplications_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_QueryApplications_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_QueryServers_InputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_QueryServers_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_QueryServers_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the DirectoryType_QueryServers_OutputArguments Variable. + /// + public static readonly ExpandedNodeId DirectoryType_QueryServers_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.DirectoryType_QueryServers_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_FindApplications_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_FindApplications_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_FindApplications_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_FindApplications_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_FindApplications_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_FindApplications_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_RegisterApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_RegisterApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_RegisterApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_RegisterApplication_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_RegisterApplication_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_RegisterApplication_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_UpdateApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_UpdateApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_UpdateApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_UnregisterApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_UnregisterApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_UnregisterApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetApplication_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetApplication_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetApplication_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_QueryApplications_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_QueryApplications_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_QueryApplications_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_QueryApplications_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_QueryApplications_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_QueryApplications_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_QueryServers_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_QueryServers_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_QueryServers_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_QueryServers_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_QueryServers_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_QueryServers_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_StartSigningRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_StartSigningRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_StartSigningRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_StartSigningRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_StartSigningRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_StartSigningRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_StartNewKeyPairRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_StartNewKeyPairRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_StartNewKeyPairRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_StartNewKeyPairRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_StartNewKeyPairRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_StartNewKeyPairRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_FinishRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_FinishRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_FinishRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_FinishRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_FinishRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_FinishRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_RevokeCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_RevokeCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_RevokeCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateGroups_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetCertificateGroups_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetCertificateGroups_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateGroups_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetCertificateGroups_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetCertificateGroups_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetTrustList_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetTrustList_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetTrustList_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetTrustList_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetTrustList_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetTrustList_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateStatus_InputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetCertificateStatus_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetCertificateStatus_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDirectoryType_GetCertificateStatus_OutputArguments Variable. + /// + public static readonly ExpandedNodeId CertificateDirectoryType_GetCertificateStatus_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDirectoryType_GetCertificateStatus_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateRequestedAuditEventType_CertificateGroup Variable. + /// + public static readonly ExpandedNodeId CertificateRequestedAuditEventType_CertificateGroup = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateRequestedAuditEventType_CertificateGroup, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateRequestedAuditEventType_CertificateType Variable. + /// + public static readonly ExpandedNodeId CertificateRequestedAuditEventType_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateRequestedAuditEventType_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDeliveredAuditEventType_CertificateGroup Variable. + /// + public static readonly ExpandedNodeId CertificateDeliveredAuditEventType_CertificateGroup = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDeliveredAuditEventType_CertificateGroup, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the CertificateDeliveredAuditEventType_CertificateType Variable. + /// + public static readonly ExpandedNodeId CertificateDeliveredAuditEventType_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.CertificateDeliveredAuditEventType_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_ResourceUri Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_ResourceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_ResourceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_ProfileUris Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_ProfileUris = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_ProfileUris, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_StartRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_StartRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_StartRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_StartRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_StartRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_StartRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_FinishRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialManagement_ServiceName_Placeholder_Revoke_InputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialManagement_ServiceName_Placeholder_Revoke_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialManagement_ServiceName_Placeholder_Revoke_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_ResourceUri Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_ResourceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_ResourceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_ProfileUris Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_ProfileUris = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_ProfileUris, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_StartRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_StartRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_StartRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_StartRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_StartRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_StartRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_FinishRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_FinishRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_FinishRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_FinishRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_FinishRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_FinishRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the KeyCredentialServiceType_Revoke_InputArguments Variable. + /// + public static readonly ExpandedNodeId KeyCredentialServiceType_Revoke_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.KeyCredentialServiceType_Revoke_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceUri Variable. + /// + public static readonly ExpandedNodeId AuthorizationServices_ServiceName_Placeholder_ServiceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServices_ServiceName_Placeholder_ServiceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_ServiceCertificate Variable. + /// + public static readonly ExpandedNodeId AuthorizationServices_ServiceName_Placeholder_ServiceCertificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServices_ServiceName_Placeholder_ServiceCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_GetServiceDescription_OutputArguments Variable. + /// + public static readonly ExpandedNodeId AuthorizationServices_ServiceName_Placeholder_GetServiceDescription_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServices_ServiceName_Placeholder_GetServiceDescription_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_InputArguments Variable. + /// + public static readonly ExpandedNodeId AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_OutputArguments Variable. + /// + public static readonly ExpandedNodeId AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServices_ServiceName_Placeholder_RequestAccessToken_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_ServiceUri Variable. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_ServiceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServiceType_ServiceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_ServiceCertificate Variable. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_ServiceCertificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServiceType_ServiceCertificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_UserTokenPolicies Variable. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_UserTokenPolicies = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServiceType_UserTokenPolicies, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_GetServiceDescription_OutputArguments Variable. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_GetServiceDescription_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServiceType_GetServiceDescription_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_RequestAccessToken_InputArguments Variable. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_RequestAccessToken_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServiceType_RequestAccessToken_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the AuthorizationServiceType_RequestAccessToken_OutputArguments Variable. + /// + public static readonly ExpandedNodeId AuthorizationServiceType_RequestAccessToken_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.AuthorizationServiceType_RequestAccessToken_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_FindApplications_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_FindApplications_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_FindApplications_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_FindApplications_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_FindApplications_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_FindApplications_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_RegisterApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_RegisterApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_RegisterApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_RegisterApplication_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_RegisterApplication_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_RegisterApplication_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_UpdateApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_UpdateApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_UpdateApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_UnregisterApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_UnregisterApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_UnregisterApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetApplication_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetApplication_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetApplication_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetApplication_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetApplication_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetApplication_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_QueryApplications_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_QueryApplications_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_QueryApplications_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_QueryApplications_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_QueryApplications_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_QueryApplications_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_QueryServers_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_QueryServers_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_QueryServers_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_QueryServers_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_QueryServers_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_QueryServers_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Size Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Writable Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateTypes Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_ExpirationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_CertificateExpired_Certificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_TrustListId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultApplicationGroup_TrustListOutOfDate_UpdateFrequency, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Size Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Writable Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateTypes Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_ExpirationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_CertificateExpired_Certificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_TrustListId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultHttpsGroup_TrustListOutOfDate_UpdateFrequency, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Size Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Size, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateTypes Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateTypes, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_ExpirationDate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_CertificateType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_CertificateExpired_Certificate, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EventType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SourceName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Time, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ReceiveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Message, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Severity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionClassName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConditionName, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_BranchId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Retain, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_EnabledState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Quality_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastSeverity_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Comment_SourceTimestamp, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ClientUserId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AddComment_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_AckedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ConfirmedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Acknowledge_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_Confirm_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ActiveState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_InputNode, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_OutOfServiceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_CurrentState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_LastTransition_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_UnshelveTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_ShelvingState_TimedShelve_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SuppressedOrShelved, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_SilenceState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LatchedState_Id, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_NormalState, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_TrustListId, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_LastUpdateTime, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency Variable. + /// + public static readonly ExpandedNodeId Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_CertificateGroups_DefaultUserTokenGroup_TrustListOutOfDate_UpdateFrequency, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_StartSigningRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_StartSigningRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_StartSigningRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_StartSigningRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_StartSigningRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_StartSigningRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_StartNewKeyPairRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_StartNewKeyPairRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_StartNewKeyPairRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_StartNewKeyPairRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_StartNewKeyPairRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_StartNewKeyPairRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_FinishRequest_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_FinishRequest_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_FinishRequest_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_FinishRequest_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_FinishRequest_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_FinishRequest_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_RevokeCertificate_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_RevokeCertificate_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_RevokeCertificate_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetCertificateGroups_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetCertificateGroups_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetCertificateGroups_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetCertificateGroups_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetCertificateGroups_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetCertificateGroups_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetTrustList_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetTrustList_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetTrustList_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetTrustList_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetTrustList_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetTrustList_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetCertificateStatus_InputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetCertificateStatus_InputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetCertificateStatus_InputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the Directory_GetCertificateStatus_OutputArguments Variable. + /// + public static readonly ExpandedNodeId Directory_GetCertificateStatus_OutputArguments = new ExpandedNodeId(Opc.Ua.Gds.Variables.Directory_GetCertificateStatus_OutputArguments, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_BinarySchema Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_BinarySchema = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_BinarySchema, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_BinarySchema_NamespaceUri Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_BinarySchema_NamespaceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_BinarySchema_NamespaceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_BinarySchema_Deprecated Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_BinarySchema_Deprecated = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_BinarySchema_Deprecated, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_BinarySchema_ApplicationRecordDataType Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_BinarySchema_ApplicationRecordDataType = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_BinarySchema_ApplicationRecordDataType, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_XmlSchema Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_XmlSchema = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_XmlSchema, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_XmlSchema_NamespaceUri Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_XmlSchema_NamespaceUri = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_XmlSchema_NamespaceUri, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_XmlSchema_Deprecated Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_XmlSchema_Deprecated = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_XmlSchema_Deprecated, Opc.Ua.Gds.Namespaces.OpcUaGds); + + /// + /// The identifier for the OpcUaGds_XmlSchema_ApplicationRecordDataType Variable. + /// + public static readonly ExpandedNodeId OpcUaGds_XmlSchema_ApplicationRecordDataType = new ExpandedNodeId(Opc.Ua.Gds.Variables.OpcUaGds_XmlSchema_ApplicationRecordDataType, Opc.Ua.Gds.Namespaces.OpcUaGds); + } + #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 AccessTokenIssuedAuditEventType component. + /// + public const string AccessTokenIssuedAuditEventType = "AccessTokenIssuedAuditEventType"; + + /// + /// The BrowseName for the ApplicationRecordDataType component. + /// + public const string ApplicationRecordDataType = "ApplicationRecordDataType"; + + /// + /// The BrowseName for the ApplicationRegistrationChangedAuditEventType component. + /// + public const string ApplicationRegistrationChangedAuditEventType = "ApplicationRegistrationChangedAuditEventType"; + + /// + /// The BrowseName for the Applications component. + /// + public const string Applications = "Applications"; + + /// + /// The BrowseName for the AuthorizationServices component. + /// + public const string AuthorizationServices = "AuthorizationServices"; + + /// + /// The BrowseName for the AuthorizationServiceType component. + /// + public const string AuthorizationServiceType = "AuthorizationServiceType"; + + /// + /// The BrowseName for the CertificateDeliveredAuditEventType component. + /// + public const string CertificateDeliveredAuditEventType = "CertificateDeliveredAuditEventType"; + + /// + /// The BrowseName for the CertificateDirectoryType component. + /// + public const string CertificateDirectoryType = "CertificateDirectoryType"; + + /// + /// The BrowseName for the CertificateGroup component. + /// + public const string CertificateGroup = "CertificateGroup"; + + /// + /// The BrowseName for the CertificateGroups component. + /// + public const string CertificateGroups = "CertificateGroups"; + + /// + /// The BrowseName for the CertificateRequestedAuditEventType component. + /// + public const string CertificateRequestedAuditEventType = "CertificateRequestedAuditEventType"; + + /// + /// The BrowseName for the CertificateType component. + /// + public const string CertificateType = "CertificateType"; + + /// + /// The BrowseName for the Directory component. + /// + public const string Directory = "Directory"; + + /// + /// The BrowseName for the DirectoryType component. + /// + public const string DirectoryType = "DirectoryType"; + + /// + /// The BrowseName for the FindApplications component. + /// + public const string FindApplications = "FindApplications"; + + /// + /// The BrowseName for the FinishRequest component. + /// + public const string FinishRequest = "FinishRequest"; + + /// + /// The BrowseName for the GetApplication component. + /// + public const string GetApplication = "GetApplication"; + + /// + /// The BrowseName for the GetCertificateGroups component. + /// + public const string GetCertificateGroups = "GetCertificateGroups"; + + /// + /// The BrowseName for the GetCertificateStatus component. + /// + public const string GetCertificateStatus = "GetCertificateStatus"; + + /// + /// The BrowseName for the GetServiceDescription component. + /// + public const string GetServiceDescription = "GetServiceDescription"; + + /// + /// The BrowseName for the GetTrustList component. + /// + public const string GetTrustList = "GetTrustList"; + + /// + /// The BrowseName for the KeyCredentialDeliveredAuditEventType component. + /// + public const string KeyCredentialDeliveredAuditEventType = "KeyCredentialDeliveredAuditEventType"; + + /// + /// The BrowseName for the KeyCredentialManagement component. + /// + public const string KeyCredentialManagement = "KeyCredentialManagement"; + + /// + /// The BrowseName for the KeyCredentialRequestedAuditEventType component. + /// + public const string KeyCredentialRequestedAuditEventType = "KeyCredentialRequestedAuditEventType"; + + /// + /// The BrowseName for the KeyCredentialRevokedAuditEventType component. + /// + public const string KeyCredentialRevokedAuditEventType = "KeyCredentialRevokedAuditEventType"; + + /// + /// The BrowseName for the KeyCredentialServiceType component. + /// + public const string KeyCredentialServiceType = "KeyCredentialServiceType"; + + /// + /// The BrowseName for the OpcUaGds_BinarySchema component. + /// + public const string OpcUaGds_BinarySchema = "Opc.Ua.Gds"; + + /// + /// The BrowseName for the OpcUaGds_XmlSchema component. + /// + public const string OpcUaGds_XmlSchema = "Opc.Ua.Gds"; + + /// + /// The BrowseName for the OPCUAGDSNamespaceMetadata component. + /// + public const string OPCUAGDSNamespaceMetadata = "http://opcfoundation.org/UA/GDS/"; + + /// + /// The BrowseName for the ProfileUris component. + /// + public const string ProfileUris = "ProfileUris"; + + /// + /// The BrowseName for the QueryApplications component. + /// + public const string QueryApplications = "QueryApplications"; + + /// + /// The BrowseName for the QueryServers component. + /// + public const string QueryServers = "QueryServers"; + + /// + /// The BrowseName for the RegisterApplication component. + /// + public const string RegisterApplication = "RegisterApplication"; + + /// + /// The BrowseName for the RequestAccessToken component. + /// + public const string RequestAccessToken = "RequestAccessToken"; + + /// + /// The BrowseName for the ResourceUri component. + /// + public const string ResourceUri = "ResourceUri"; + + /// + /// The BrowseName for the Revoke component. + /// + public const string Revoke = "Revoke"; + + /// + /// The BrowseName for the RevokeCertificate component. + /// + public const string RevokeCertificate = "RevokeCertificate"; + + /// + /// The BrowseName for the ServiceCertificate component. + /// + public const string ServiceCertificate = "ServiceCertificate"; + + /// + /// The BrowseName for the ServiceName_Placeholder component. + /// + public const string ServiceName_Placeholder = ""; + + /// + /// The BrowseName for the ServiceUri component. + /// + public const string ServiceUri = "ServiceUri"; + + /// + /// The BrowseName for the StartNewKeyPairRequest component. + /// + public const string StartNewKeyPairRequest = "StartNewKeyPairRequest"; + + /// + /// The BrowseName for the StartRequest component. + /// + public const string StartRequest = "StartRequest"; + + /// + /// The BrowseName for the StartSigningRequest component. + /// + public const string StartSigningRequest = "StartSigningRequest"; + + /// + /// The BrowseName for the UnregisterApplication component. + /// + public const string UnregisterApplication = "UnregisterApplication"; + + /// + /// The BrowseName for the UpdateApplication component. + /// + public const string UpdateApplication = "UpdateApplication"; + + /// + /// The BrowseName for the UserTokenPolicies component. + /// + public const string UserTokenPolicies = "UserTokenPolicies"; + } + #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 OpcUaGds namespace (.NET code namespace is 'Opc.Ua.Gds'). + /// + public const string OpcUaGds = "http://opcfoundation.org/UA/GDS/"; + + /// + /// The URI for the OpcUaGdsXsd namespace (.NET code namespace is 'Opc.Ua.Gds'). + /// + public const string OpcUaGdsXsd = "http://opcfoundation.org/UA/GDS/Types.xsd"; + + /// + /// 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 +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Gds.DataTypes.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Gds.DataTypes.cs new file mode 100644 index 00000000..6f2f5ef0 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Gds.DataTypes.cs @@ -0,0 +1,381 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 Opc.Ua; + +namespace Opc.Ua.Gds +{ + #region ApplicationRecordDataType Class + #if (!OPCUA_EXCLUDE_ApplicationRecordDataType) + /// + /// + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [DataContract(Namespace = Opc.Ua.Gds.Namespaces.OpcUaGdsXsd)] + public partial class ApplicationRecordDataType : IEncodeable + { + #region Constructors + /// + /// The default constructor. + /// + public ApplicationRecordDataType() + { + 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_applicationId = null; + m_applicationUri = null; + m_applicationType = ApplicationType.Server; + m_applicationNames = new LocalizedTextCollection(); + m_productUri = null; + m_discoveryUrls = new StringCollection(); + m_serverCapabilities = new StringCollection(); + } + #endregion + + #region Public Properties + /// + [DataMember(Name = "ApplicationId", IsRequired = false, Order = 1)] + public NodeId ApplicationId + { + get { return m_applicationId; } + set { m_applicationId = value; } + } + + /// + [DataMember(Name = "ApplicationUri", IsRequired = false, Order = 2)] + public string ApplicationUri + { + get { return m_applicationUri; } + set { m_applicationUri = value; } + } + + /// + [DataMember(Name = "ApplicationType", IsRequired = false, Order = 3)] + public ApplicationType ApplicationType + { + get { return m_applicationType; } + set { m_applicationType = value; } + } + + /// + /// + /// + [DataMember(Name = "ApplicationNames", IsRequired = false, Order = 4)] + public LocalizedTextCollection ApplicationNames + { + get + { + return m_applicationNames; + } + + set + { + m_applicationNames = value; + + if (value == null) + { + m_applicationNames = new LocalizedTextCollection(); + } + } + } + + /// + [DataMember(Name = "ProductUri", IsRequired = false, Order = 5)] + public string ProductUri + { + get { return m_productUri; } + set { m_productUri = value; } + } + + /// + /// + /// + [DataMember(Name = "DiscoveryUrls", IsRequired = false, Order = 6)] + public StringCollection DiscoveryUrls + { + get + { + return m_discoveryUrls; + } + + set + { + m_discoveryUrls = value; + + if (value == null) + { + m_discoveryUrls = new StringCollection(); + } + } + } + + /// + /// + /// + [DataMember(Name = "ServerCapabilities", IsRequired = false, Order = 7)] + public StringCollection ServerCapabilities + { + get + { + return m_serverCapabilities; + } + + set + { + m_serverCapabilities = value; + + if (value == null) + { + m_serverCapabilities = new StringCollection(); + } + } + } + #endregion + + #region IEncodeable Members + /// + public virtual ExpandedNodeId TypeId + { + get { return DataTypeIds.ApplicationRecordDataType; } + } + + /// + public virtual ExpandedNodeId BinaryEncodingId + { + get { return ObjectIds.ApplicationRecordDataType_Encoding_DefaultBinary; } + } + + /// + public virtual ExpandedNodeId XmlEncodingId + { + get { return ObjectIds.ApplicationRecordDataType_Encoding_DefaultXml; } + } + + /// + public virtual void Encode(IEncoder encoder) + { + encoder.PushNamespace(Opc.Ua.Gds.Namespaces.OpcUaGdsXsd); + + encoder.WriteNodeId("ApplicationId", ApplicationId); + encoder.WriteString("ApplicationUri", ApplicationUri); + encoder.WriteEnumerated("ApplicationType", ApplicationType); + encoder.WriteLocalizedTextArray("ApplicationNames", ApplicationNames); + encoder.WriteString("ProductUri", ProductUri); + encoder.WriteStringArray("DiscoveryUrls", DiscoveryUrls); + encoder.WriteStringArray("ServerCapabilities", ServerCapabilities); + + encoder.PopNamespace(); + } + + /// + public virtual void Decode(IDecoder decoder) + { + decoder.PushNamespace(Opc.Ua.Gds.Namespaces.OpcUaGdsXsd); + + ApplicationId = decoder.ReadNodeId("ApplicationId"); + ApplicationUri = decoder.ReadString("ApplicationUri"); + ApplicationType = (ApplicationType)decoder.ReadEnumerated("ApplicationType", typeof(ApplicationType)); + ApplicationNames = decoder.ReadLocalizedTextArray("ApplicationNames"); + ProductUri = decoder.ReadString("ProductUri"); + DiscoveryUrls = decoder.ReadStringArray("DiscoveryUrls"); + ServerCapabilities = decoder.ReadStringArray("ServerCapabilities"); + + decoder.PopNamespace(); + } + + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + if (Object.ReferenceEquals(this, encodeable)) + { + return true; + } + + ApplicationRecordDataType value = encodeable as ApplicationRecordDataType; + + if (value == null) + { + return false; + } + + if (!Utils.IsEqual(m_applicationId, value.m_applicationId)) return false; + if (!Utils.IsEqual(m_applicationUri, value.m_applicationUri)) return false; + if (!Utils.IsEqual(m_applicationType, value.m_applicationType)) return false; + if (!Utils.IsEqual(m_applicationNames, value.m_applicationNames)) return false; + if (!Utils.IsEqual(m_productUri, value.m_productUri)) return false; + if (!Utils.IsEqual(m_discoveryUrls, value.m_discoveryUrls)) return false; + if (!Utils.IsEqual(m_serverCapabilities, value.m_serverCapabilities)) return false; + + return true; + } + + #if !NET_STANDARD + /// + public virtual object Clone() + { + return (ApplicationRecordDataType)this.MemberwiseClone(); + } + #endif + + /// + public new object MemberwiseClone() + { + ApplicationRecordDataType clone = (ApplicationRecordDataType)base.MemberwiseClone(); + + clone.m_applicationId = (NodeId)Utils.Clone(this.m_applicationId); + clone.m_applicationUri = (string)Utils.Clone(this.m_applicationUri); + clone.m_applicationType = (ApplicationType)Utils.Clone(this.m_applicationType); + clone.m_applicationNames = (LocalizedTextCollection)Utils.Clone(this.m_applicationNames); + clone.m_productUri = (string)Utils.Clone(this.m_productUri); + clone.m_discoveryUrls = (StringCollection)Utils.Clone(this.m_discoveryUrls); + clone.m_serverCapabilities = (StringCollection)Utils.Clone(this.m_serverCapabilities); + + return clone; + } + #endregion + + #region Private Fields + private NodeId m_applicationId; + private string m_applicationUri; + private ApplicationType m_applicationType; + private LocalizedTextCollection m_applicationNames; + private string m_productUri; + private StringCollection m_discoveryUrls; + private StringCollection m_serverCapabilities; + #endregion + } + + #region ApplicationRecordDataTypeCollection Class + /// + /// A collection of ApplicationRecordDataType objects. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [CollectionDataContract(Name = "ListOfApplicationRecordDataType", Namespace = Opc.Ua.Gds.Namespaces.OpcUaGdsXsd, ItemName = "ApplicationRecordDataType")] + #if !NET_STANDARD + public partial class ApplicationRecordDataTypeCollection : List, ICloneable + #else + public partial class ApplicationRecordDataTypeCollection : List + #endif + { + #region Constructors + /// + /// Initializes the collection with default values. + /// + public ApplicationRecordDataTypeCollection() {} + + /// + /// Initializes the collection with an initial capacity. + /// + public ApplicationRecordDataTypeCollection(int capacity) : base(capacity) {} + + /// + /// Initializes the collection with another collection. + /// + public ApplicationRecordDataTypeCollection(IEnumerable collection) : base(collection) {} + #endregion + + #region Static Operators + /// + /// Converts an array to a collection. + /// + public static implicit operator ApplicationRecordDataTypeCollection(ApplicationRecordDataType[] values) + { + if (values != null) + { + return new ApplicationRecordDataTypeCollection(values); + } + + return new ApplicationRecordDataTypeCollection(); + } + + /// + /// Converts a collection to an array. + /// + public static explicit operator ApplicationRecordDataType[](ApplicationRecordDataTypeCollection 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 (ApplicationRecordDataTypeCollection)this.MemberwiseClone(); + } + #endregion + #endif + + /// + public new object MemberwiseClone() + { + ApplicationRecordDataTypeCollection clone = new ApplicationRecordDataTypeCollection(this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + clone.Add((ApplicationRecordDataType)Utils.Clone(this[ii])); + } + + return clone; + } + } + #endregion + #endif + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Interfaces.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Interfaces.cs new file mode 100644 index 00000000..07bda0d0 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Interfaces.cs @@ -0,0 +1,1727 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Xml; +using System.ServiceModel; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + #region ISessionEndpoint Interface + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The service contract which must be implemented by all UA servers. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface ISessionEndpoint : IEndpointBase + { + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// The operation contract for the CreateSession service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CreateSession", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateSessionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CreateSessionResponseMessage CreateSession(CreateSessionMessage request); + #endif + + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// The operation contract for the ActivateSession service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/ActivateSession", ReplyAction = Namespaces.OpcUaWsdl + "/ActivateSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ActivateSessionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ActivateSessionResponseMessage ActivateSession(ActivateSessionMessage request); + #endif + + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// The operation contract for the CloseSession service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CloseSession", ReplyAction = Namespaces.OpcUaWsdl + "/CloseSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CloseSessionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CloseSessionResponseMessage CloseSession(CloseSessionMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// The operation contract for the Cancel service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Cancel", ReplyAction = Namespaces.OpcUaWsdl + "/CancelResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CancelFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CancelResponseMessage Cancel(CancelMessage request); + #endif + + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// The operation contract for the AddNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/AddNodes", ReplyAction = Namespaces.OpcUaWsdl + "/AddNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/AddNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + AddNodesResponseMessage AddNodes(AddNodesMessage request); + #endif + + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// The operation contract for the AddReferences service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/AddReferences", ReplyAction = Namespaces.OpcUaWsdl + "/AddReferencesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/AddReferencesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + AddReferencesResponseMessage AddReferences(AddReferencesMessage request); + #endif + + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// The operation contract for the DeleteNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteNodes", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteNodesResponseMessage DeleteNodes(DeleteNodesMessage request); + #endif + + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// The operation contract for the DeleteReferences service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteReferences", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteReferencesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteReferencesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteReferencesResponseMessage DeleteReferences(DeleteReferencesMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Browse) + /// + /// The operation contract for the Browse service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Browse", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/BrowseFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + BrowseResponseMessage Browse(BrowseMessage request); + #endif + + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// The operation contract for the BrowseNext service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/BrowseNext", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseNextResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/BrowseNextFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + BrowseNextResponseMessage BrowseNext(BrowseNextMessage request); + #endif + + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// The operation contract for the TranslateBrowsePathsToNodeIds service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIds", ReplyAction = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + TranslateBrowsePathsToNodeIdsResponseMessage TranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request); + #endif + + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// The operation contract for the RegisterNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/RegisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RegisterNodesResponseMessage RegisterNodes(RegisterNodesMessage request); + #endif + + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// The operation contract for the UnregisterNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/UnregisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/UnregisterNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/UnregisterNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + UnregisterNodesResponseMessage UnregisterNodes(UnregisterNodesMessage request); + #endif + + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// The operation contract for the QueryFirst service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/QueryFirst", ReplyAction = Namespaces.OpcUaWsdl + "/QueryFirstResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/QueryFirstFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + QueryFirstResponseMessage QueryFirst(QueryFirstMessage request); + #endif + + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// The operation contract for the QueryNext service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/QueryNext", ReplyAction = Namespaces.OpcUaWsdl + "/QueryNextResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/QueryNextFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + QueryNextResponseMessage QueryNext(QueryNextMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Read) + /// + /// The operation contract for the Read service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Read", ReplyAction = Namespaces.OpcUaWsdl + "/ReadResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ReadFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ReadResponseMessage Read(ReadMessage request); + #endif + + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// The operation contract for the HistoryRead service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/HistoryRead", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryReadResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/HistoryReadFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + HistoryReadResponseMessage HistoryRead(HistoryReadMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Write) + /// + /// The operation contract for the Write service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Write", ReplyAction = Namespaces.OpcUaWsdl + "/WriteResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/WriteFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + WriteResponseMessage Write(WriteMessage request); + #endif + + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// The operation contract for the HistoryUpdate service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/HistoryUpdate", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryUpdateResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/HistoryUpdateFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + HistoryUpdateResponseMessage HistoryUpdate(HistoryUpdateMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Call) + /// + /// The operation contract for the Call service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Call", ReplyAction = Namespaces.OpcUaWsdl + "/CallResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CallFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CallResponseMessage Call(CallMessage request); + #endif + + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// The operation contract for the CreateMonitoredItems service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CreateMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CreateMonitoredItemsResponseMessage CreateMonitoredItems(CreateMonitoredItemsMessage request); + #endif + + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// The operation contract for the ModifyMonitoredItems service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/ModifyMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ModifyMonitoredItemsResponseMessage ModifyMonitoredItems(ModifyMonitoredItemsMessage request); + #endif + + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// The operation contract for the SetMonitoringMode service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/SetMonitoringMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetMonitoringModeResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetMonitoringModeFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + SetMonitoringModeResponseMessage SetMonitoringMode(SetMonitoringModeMessage request); + #endif + + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// The operation contract for the SetTriggering service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/SetTriggering", ReplyAction = Namespaces.OpcUaWsdl + "/SetTriggeringResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetTriggeringFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + SetTriggeringResponseMessage SetTriggering(SetTriggeringMessage request); + #endif + + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// The operation contract for the DeleteMonitoredItems service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteMonitoredItemsResponseMessage DeleteMonitoredItems(DeleteMonitoredItemsMessage request); + #endif + + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// The operation contract for the CreateSubscription service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CreateSubscription", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSubscriptionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateSubscriptionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CreateSubscriptionResponseMessage CreateSubscription(CreateSubscriptionMessage request); + #endif + + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// The operation contract for the ModifySubscription service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/ModifySubscription", ReplyAction = Namespaces.OpcUaWsdl + "/ModifySubscriptionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ModifySubscriptionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ModifySubscriptionResponseMessage ModifySubscription(ModifySubscriptionMessage request); + #endif + + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// The operation contract for the SetPublishingMode service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/SetPublishingMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetPublishingModeResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetPublishingModeFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + SetPublishingModeResponseMessage SetPublishingMode(SetPublishingModeMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Publish) + /// + /// The operation contract for the Publish service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Publish", ReplyAction = Namespaces.OpcUaWsdl + "/PublishResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/PublishFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + PublishResponseMessage Publish(PublishMessage request); + #endif + + #if (!OPCUA_EXCLUDE_Republish) + /// + /// The operation contract for the Republish service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Republish", ReplyAction = Namespaces.OpcUaWsdl + "/RepublishResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RepublishFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RepublishResponseMessage Republish(RepublishMessage request); + #endif + + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// The operation contract for the TransferSubscriptions service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/TransferSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/TransferSubscriptionsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/TransferSubscriptionsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + TransferSubscriptionsResponseMessage TransferSubscriptions(TransferSubscriptionsMessage request); + #endif + + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// The operation contract for the DeleteSubscriptions service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteSubscriptionsResponseMessage DeleteSubscriptions(DeleteSubscriptionsMessage request); + #endif + } + #else + /// + /// The asynchronous service contract which must be implemented by UA servers. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface ISessionEndpoint : IEndpointBase + { + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// The operation contract for the CreateSession service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CreateSession", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateSessionFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginCreateSession(CreateSessionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CreateSession service request. + /// + CreateSessionResponseMessage EndCreateSession(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// The operation contract for the ActivateSession service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/ActivateSession", ReplyAction = Namespaces.OpcUaWsdl + "/ActivateSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ActivateSessionFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginActivateSession(ActivateSessionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a ActivateSession service request. + /// + ActivateSessionResponseMessage EndActivateSession(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// The operation contract for the CloseSession service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CloseSession", ReplyAction = Namespaces.OpcUaWsdl + "/CloseSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CloseSessionFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginCloseSession(CloseSessionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CloseSession service request. + /// + CloseSessionResponseMessage EndCloseSession(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// The operation contract for the Cancel service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Cancel", ReplyAction = Namespaces.OpcUaWsdl + "/CancelResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CancelFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginCancel(CancelMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Cancel service request. + /// + CancelResponseMessage EndCancel(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// The operation contract for the AddNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/AddNodes", ReplyAction = Namespaces.OpcUaWsdl + "/AddNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/AddNodesFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginAddNodes(AddNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a AddNodes service request. + /// + AddNodesResponseMessage EndAddNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// The operation contract for the AddReferences service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/AddReferences", ReplyAction = Namespaces.OpcUaWsdl + "/AddReferencesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/AddReferencesFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginAddReferences(AddReferencesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a AddReferences service request. + /// + AddReferencesResponseMessage EndAddReferences(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// The operation contract for the DeleteNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteNodes", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteNodesFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginDeleteNodes(DeleteNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteNodes service request. + /// + DeleteNodesResponseMessage EndDeleteNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// The operation contract for the DeleteReferences service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteReferences", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteReferencesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteReferencesFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginDeleteReferences(DeleteReferencesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteReferences service request. + /// + DeleteReferencesResponseMessage EndDeleteReferences(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Browse) + /// + /// The operation contract for the Browse service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Browse", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/BrowseFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginBrowse(BrowseMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Browse service request. + /// + BrowseResponseMessage EndBrowse(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// The operation contract for the BrowseNext service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/BrowseNext", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseNextResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/BrowseNextFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginBrowseNext(BrowseNextMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a BrowseNext service request. + /// + BrowseNextResponseMessage EndBrowseNext(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// The operation contract for the TranslateBrowsePathsToNodeIds service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIds", ReplyAction = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginTranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a TranslateBrowsePathsToNodeIds service request. + /// + TranslateBrowsePathsToNodeIdsResponseMessage EndTranslateBrowsePathsToNodeIds(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// The operation contract for the RegisterNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/RegisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterNodesFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginRegisterNodes(RegisterNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a RegisterNodes service request. + /// + RegisterNodesResponseMessage EndRegisterNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// The operation contract for the UnregisterNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/UnregisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/UnregisterNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/UnregisterNodesFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginUnregisterNodes(UnregisterNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a UnregisterNodes service request. + /// + UnregisterNodesResponseMessage EndUnregisterNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// The operation contract for the QueryFirst service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/QueryFirst", ReplyAction = Namespaces.OpcUaWsdl + "/QueryFirstResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/QueryFirstFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginQueryFirst(QueryFirstMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a QueryFirst service request. + /// + QueryFirstResponseMessage EndQueryFirst(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// The operation contract for the QueryNext service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/QueryNext", ReplyAction = Namespaces.OpcUaWsdl + "/QueryNextResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/QueryNextFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginQueryNext(QueryNextMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a QueryNext service request. + /// + QueryNextResponseMessage EndQueryNext(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Read) + /// + /// The operation contract for the Read service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Read", ReplyAction = Namespaces.OpcUaWsdl + "/ReadResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ReadFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginRead(ReadMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Read service request. + /// + ReadResponseMessage EndRead(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// The operation contract for the HistoryRead service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/HistoryRead", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryReadResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/HistoryReadFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginHistoryRead(HistoryReadMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a HistoryRead service request. + /// + HistoryReadResponseMessage EndHistoryRead(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Write) + /// + /// The operation contract for the Write service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Write", ReplyAction = Namespaces.OpcUaWsdl + "/WriteResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/WriteFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginWrite(WriteMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Write service request. + /// + WriteResponseMessage EndWrite(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// The operation contract for the HistoryUpdate service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/HistoryUpdate", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryUpdateResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/HistoryUpdateFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginHistoryUpdate(HistoryUpdateMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a HistoryUpdate service request. + /// + HistoryUpdateResponseMessage EndHistoryUpdate(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Call) + /// + /// The operation contract for the Call service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Call", ReplyAction = Namespaces.OpcUaWsdl + "/CallResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CallFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginCall(CallMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Call service request. + /// + CallResponseMessage EndCall(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// The operation contract for the CreateMonitoredItems service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CreateMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginCreateMonitoredItems(CreateMonitoredItemsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CreateMonitoredItems service request. + /// + CreateMonitoredItemsResponseMessage EndCreateMonitoredItems(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// The operation contract for the ModifyMonitoredItems service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/ModifyMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginModifyMonitoredItems(ModifyMonitoredItemsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a ModifyMonitoredItems service request. + /// + ModifyMonitoredItemsResponseMessage EndModifyMonitoredItems(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// The operation contract for the SetMonitoringMode service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/SetMonitoringMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetMonitoringModeResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetMonitoringModeFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginSetMonitoringMode(SetMonitoringModeMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a SetMonitoringMode service request. + /// + SetMonitoringModeResponseMessage EndSetMonitoringMode(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// The operation contract for the SetTriggering service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/SetTriggering", ReplyAction = Namespaces.OpcUaWsdl + "/SetTriggeringResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetTriggeringFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginSetTriggering(SetTriggeringMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a SetTriggering service request. + /// + SetTriggeringResponseMessage EndSetTriggering(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// The operation contract for the DeleteMonitoredItems service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginDeleteMonitoredItems(DeleteMonitoredItemsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteMonitoredItems service request. + /// + DeleteMonitoredItemsResponseMessage EndDeleteMonitoredItems(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// The operation contract for the CreateSubscription service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CreateSubscription", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSubscriptionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateSubscriptionFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginCreateSubscription(CreateSubscriptionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CreateSubscription service request. + /// + CreateSubscriptionResponseMessage EndCreateSubscription(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// The operation contract for the ModifySubscription service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/ModifySubscription", ReplyAction = Namespaces.OpcUaWsdl + "/ModifySubscriptionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ModifySubscriptionFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginModifySubscription(ModifySubscriptionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a ModifySubscription service request. + /// + ModifySubscriptionResponseMessage EndModifySubscription(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// The operation contract for the SetPublishingMode service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/SetPublishingMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetPublishingModeResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetPublishingModeFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginSetPublishingMode(SetPublishingModeMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a SetPublishingMode service request. + /// + SetPublishingModeResponseMessage EndSetPublishingMode(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Publish) + /// + /// The operation contract for the Publish service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Publish", ReplyAction = Namespaces.OpcUaWsdl + "/PublishResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/PublishFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginPublish(PublishMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Publish service request. + /// + PublishResponseMessage EndPublish(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Republish) + /// + /// The operation contract for the Republish service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Republish", ReplyAction = Namespaces.OpcUaWsdl + "/RepublishResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RepublishFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginRepublish(RepublishMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Republish service request. + /// + RepublishResponseMessage EndRepublish(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// The operation contract for the TransferSubscriptions service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/TransferSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/TransferSubscriptionsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/TransferSubscriptionsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginTransferSubscriptions(TransferSubscriptionsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a TransferSubscriptions service request. + /// + TransferSubscriptionsResponseMessage EndTransferSubscriptions(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// The operation contract for the DeleteSubscriptions service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginDeleteSubscriptions(DeleteSubscriptionsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteSubscriptions service request. + /// + DeleteSubscriptionsResponseMessage EndDeleteSubscriptions(IAsyncResult result); + #endif + } + #endif + #endregion + + #region ISessionChannel Interface + /// + /// An interface used by by clients to access a UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface ISessionChannel : IChannelBase + { + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// The operation contract for the CreateSession service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CreateSession", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateSessionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CreateSessionResponseMessage CreateSession(CreateSessionMessage request); + + /// + /// The operation contract for the CreateSession service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CreateSession", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSessionResponse")] + IAsyncResult BeginCreateSession(CreateSessionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CreateSession service request. + /// + CreateSessionResponseMessage EndCreateSession(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// The operation contract for the ActivateSession service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/ActivateSession", ReplyAction = Namespaces.OpcUaWsdl + "/ActivateSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ActivateSessionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ActivateSessionResponseMessage ActivateSession(ActivateSessionMessage request); + + /// + /// The operation contract for the ActivateSession service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/ActivateSession", ReplyAction = Namespaces.OpcUaWsdl + "/ActivateSessionResponse")] + IAsyncResult BeginActivateSession(ActivateSessionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a ActivateSession service request. + /// + ActivateSessionResponseMessage EndActivateSession(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// The operation contract for the CloseSession service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CloseSession", ReplyAction = Namespaces.OpcUaWsdl + "/CloseSessionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CloseSessionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CloseSessionResponseMessage CloseSession(CloseSessionMessage request); + + /// + /// The operation contract for the CloseSession service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CloseSession", ReplyAction = Namespaces.OpcUaWsdl + "/CloseSessionResponse")] + IAsyncResult BeginCloseSession(CloseSessionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CloseSession service request. + /// + CloseSessionResponseMessage EndCloseSession(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// The operation contract for the Cancel service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Cancel", ReplyAction = Namespaces.OpcUaWsdl + "/CancelResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CancelFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CancelResponseMessage Cancel(CancelMessage request); + + /// + /// The operation contract for the Cancel service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Cancel", ReplyAction = Namespaces.OpcUaWsdl + "/CancelResponse")] + IAsyncResult BeginCancel(CancelMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Cancel service request. + /// + CancelResponseMessage EndCancel(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// The operation contract for the AddNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/AddNodes", ReplyAction = Namespaces.OpcUaWsdl + "/AddNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/AddNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + AddNodesResponseMessage AddNodes(AddNodesMessage request); + + /// + /// The operation contract for the AddNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/AddNodes", ReplyAction = Namespaces.OpcUaWsdl + "/AddNodesResponse")] + IAsyncResult BeginAddNodes(AddNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a AddNodes service request. + /// + AddNodesResponseMessage EndAddNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// The operation contract for the AddReferences service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/AddReferences", ReplyAction = Namespaces.OpcUaWsdl + "/AddReferencesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/AddReferencesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + AddReferencesResponseMessage AddReferences(AddReferencesMessage request); + + /// + /// The operation contract for the AddReferences service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/AddReferences", ReplyAction = Namespaces.OpcUaWsdl + "/AddReferencesResponse")] + IAsyncResult BeginAddReferences(AddReferencesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a AddReferences service request. + /// + AddReferencesResponseMessage EndAddReferences(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// The operation contract for the DeleteNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteNodes", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteNodesResponseMessage DeleteNodes(DeleteNodesMessage request); + + /// + /// The operation contract for the DeleteNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteNodes", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteNodesResponse")] + IAsyncResult BeginDeleteNodes(DeleteNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteNodes service request. + /// + DeleteNodesResponseMessage EndDeleteNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// The operation contract for the DeleteReferences service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteReferences", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteReferencesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteReferencesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteReferencesResponseMessage DeleteReferences(DeleteReferencesMessage request); + + /// + /// The operation contract for the DeleteReferences service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteReferences", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteReferencesResponse")] + IAsyncResult BeginDeleteReferences(DeleteReferencesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteReferences service request. + /// + DeleteReferencesResponseMessage EndDeleteReferences(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Browse) + /// + /// The operation contract for the Browse service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Browse", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/BrowseFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + BrowseResponseMessage Browse(BrowseMessage request); + + /// + /// The operation contract for the Browse service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Browse", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseResponse")] + IAsyncResult BeginBrowse(BrowseMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Browse service request. + /// + BrowseResponseMessage EndBrowse(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// The operation contract for the BrowseNext service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/BrowseNext", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseNextResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/BrowseNextFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + BrowseNextResponseMessage BrowseNext(BrowseNextMessage request); + + /// + /// The operation contract for the BrowseNext service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/BrowseNext", ReplyAction = Namespaces.OpcUaWsdl + "/BrowseNextResponse")] + IAsyncResult BeginBrowseNext(BrowseNextMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a BrowseNext service request. + /// + BrowseNextResponseMessage EndBrowseNext(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// The operation contract for the TranslateBrowsePathsToNodeIds service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIds", ReplyAction = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + TranslateBrowsePathsToNodeIdsResponseMessage TranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request); + + /// + /// The operation contract for the TranslateBrowsePathsToNodeIds service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIds", ReplyAction = Namespaces.OpcUaWsdl + "/TranslateBrowsePathsToNodeIdsResponse")] + IAsyncResult BeginTranslateBrowsePathsToNodeIds(TranslateBrowsePathsToNodeIdsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a TranslateBrowsePathsToNodeIds service request. + /// + TranslateBrowsePathsToNodeIdsResponseMessage EndTranslateBrowsePathsToNodeIds(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// The operation contract for the RegisterNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/RegisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RegisterNodesResponseMessage RegisterNodes(RegisterNodesMessage request); + + /// + /// The operation contract for the RegisterNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/RegisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterNodesResponse")] + IAsyncResult BeginRegisterNodes(RegisterNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a RegisterNodes service request. + /// + RegisterNodesResponseMessage EndRegisterNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// The operation contract for the UnregisterNodes service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/UnregisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/UnregisterNodesResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/UnregisterNodesFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + UnregisterNodesResponseMessage UnregisterNodes(UnregisterNodesMessage request); + + /// + /// The operation contract for the UnregisterNodes service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/UnregisterNodes", ReplyAction = Namespaces.OpcUaWsdl + "/UnregisterNodesResponse")] + IAsyncResult BeginUnregisterNodes(UnregisterNodesMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a UnregisterNodes service request. + /// + UnregisterNodesResponseMessage EndUnregisterNodes(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// The operation contract for the QueryFirst service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/QueryFirst", ReplyAction = Namespaces.OpcUaWsdl + "/QueryFirstResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/QueryFirstFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + QueryFirstResponseMessage QueryFirst(QueryFirstMessage request); + + /// + /// The operation contract for the QueryFirst service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/QueryFirst", ReplyAction = Namespaces.OpcUaWsdl + "/QueryFirstResponse")] + IAsyncResult BeginQueryFirst(QueryFirstMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a QueryFirst service request. + /// + QueryFirstResponseMessage EndQueryFirst(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// The operation contract for the QueryNext service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/QueryNext", ReplyAction = Namespaces.OpcUaWsdl + "/QueryNextResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/QueryNextFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + QueryNextResponseMessage QueryNext(QueryNextMessage request); + + /// + /// The operation contract for the QueryNext service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/QueryNext", ReplyAction = Namespaces.OpcUaWsdl + "/QueryNextResponse")] + IAsyncResult BeginQueryNext(QueryNextMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a QueryNext service request. + /// + QueryNextResponseMessage EndQueryNext(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Read) + /// + /// The operation contract for the Read service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Read", ReplyAction = Namespaces.OpcUaWsdl + "/ReadResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ReadFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ReadResponseMessage Read(ReadMessage request); + + /// + /// The operation contract for the Read service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Read", ReplyAction = Namespaces.OpcUaWsdl + "/ReadResponse")] + IAsyncResult BeginRead(ReadMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Read service request. + /// + ReadResponseMessage EndRead(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// The operation contract for the HistoryRead service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/HistoryRead", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryReadResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/HistoryReadFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + HistoryReadResponseMessage HistoryRead(HistoryReadMessage request); + + /// + /// The operation contract for the HistoryRead service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/HistoryRead", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryReadResponse")] + IAsyncResult BeginHistoryRead(HistoryReadMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a HistoryRead service request. + /// + HistoryReadResponseMessage EndHistoryRead(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Write) + /// + /// The operation contract for the Write service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Write", ReplyAction = Namespaces.OpcUaWsdl + "/WriteResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/WriteFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + WriteResponseMessage Write(WriteMessage request); + + /// + /// The operation contract for the Write service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Write", ReplyAction = Namespaces.OpcUaWsdl + "/WriteResponse")] + IAsyncResult BeginWrite(WriteMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Write service request. + /// + WriteResponseMessage EndWrite(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// The operation contract for the HistoryUpdate service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/HistoryUpdate", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryUpdateResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/HistoryUpdateFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + HistoryUpdateResponseMessage HistoryUpdate(HistoryUpdateMessage request); + + /// + /// The operation contract for the HistoryUpdate service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/HistoryUpdate", ReplyAction = Namespaces.OpcUaWsdl + "/HistoryUpdateResponse")] + IAsyncResult BeginHistoryUpdate(HistoryUpdateMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a HistoryUpdate service request. + /// + HistoryUpdateResponseMessage EndHistoryUpdate(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Call) + /// + /// The operation contract for the Call service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Call", ReplyAction = Namespaces.OpcUaWsdl + "/CallResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CallFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CallResponseMessage Call(CallMessage request); + + /// + /// The operation contract for the Call service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Call", ReplyAction = Namespaces.OpcUaWsdl + "/CallResponse")] + IAsyncResult BeginCall(CallMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Call service request. + /// + CallResponseMessage EndCall(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// The operation contract for the CreateMonitoredItems service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CreateMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CreateMonitoredItemsResponseMessage CreateMonitoredItems(CreateMonitoredItemsMessage request); + + /// + /// The operation contract for the CreateMonitoredItems service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CreateMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/CreateMonitoredItemsResponse")] + IAsyncResult BeginCreateMonitoredItems(CreateMonitoredItemsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CreateMonitoredItems service request. + /// + CreateMonitoredItemsResponseMessage EndCreateMonitoredItems(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// The operation contract for the ModifyMonitoredItems service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/ModifyMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ModifyMonitoredItemsResponseMessage ModifyMonitoredItems(ModifyMonitoredItemsMessage request); + + /// + /// The operation contract for the ModifyMonitoredItems service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/ModifyMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/ModifyMonitoredItemsResponse")] + IAsyncResult BeginModifyMonitoredItems(ModifyMonitoredItemsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a ModifyMonitoredItems service request. + /// + ModifyMonitoredItemsResponseMessage EndModifyMonitoredItems(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// The operation contract for the SetMonitoringMode service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/SetMonitoringMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetMonitoringModeResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetMonitoringModeFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + SetMonitoringModeResponseMessage SetMonitoringMode(SetMonitoringModeMessage request); + + /// + /// The operation contract for the SetMonitoringMode service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/SetMonitoringMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetMonitoringModeResponse")] + IAsyncResult BeginSetMonitoringMode(SetMonitoringModeMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a SetMonitoringMode service request. + /// + SetMonitoringModeResponseMessage EndSetMonitoringMode(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// The operation contract for the SetTriggering service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/SetTriggering", ReplyAction = Namespaces.OpcUaWsdl + "/SetTriggeringResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetTriggeringFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + SetTriggeringResponseMessage SetTriggering(SetTriggeringMessage request); + + /// + /// The operation contract for the SetTriggering service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/SetTriggering", ReplyAction = Namespaces.OpcUaWsdl + "/SetTriggeringResponse")] + IAsyncResult BeginSetTriggering(SetTriggeringMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a SetTriggering service request. + /// + SetTriggeringResponseMessage EndSetTriggering(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// The operation contract for the DeleteMonitoredItems service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteMonitoredItemsResponseMessage DeleteMonitoredItems(DeleteMonitoredItemsMessage request); + + /// + /// The operation contract for the DeleteMonitoredItems service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteMonitoredItems", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteMonitoredItemsResponse")] + IAsyncResult BeginDeleteMonitoredItems(DeleteMonitoredItemsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteMonitoredItems service request. + /// + DeleteMonitoredItemsResponseMessage EndDeleteMonitoredItems(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// The operation contract for the CreateSubscription service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/CreateSubscription", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSubscriptionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/CreateSubscriptionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + CreateSubscriptionResponseMessage CreateSubscription(CreateSubscriptionMessage request); + + /// + /// The operation contract for the CreateSubscription service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/CreateSubscription", ReplyAction = Namespaces.OpcUaWsdl + "/CreateSubscriptionResponse")] + IAsyncResult BeginCreateSubscription(CreateSubscriptionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a CreateSubscription service request. + /// + CreateSubscriptionResponseMessage EndCreateSubscription(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// The operation contract for the ModifySubscription service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/ModifySubscription", ReplyAction = Namespaces.OpcUaWsdl + "/ModifySubscriptionResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/ModifySubscriptionFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + ModifySubscriptionResponseMessage ModifySubscription(ModifySubscriptionMessage request); + + /// + /// The operation contract for the ModifySubscription service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/ModifySubscription", ReplyAction = Namespaces.OpcUaWsdl + "/ModifySubscriptionResponse")] + IAsyncResult BeginModifySubscription(ModifySubscriptionMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a ModifySubscription service request. + /// + ModifySubscriptionResponseMessage EndModifySubscription(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// The operation contract for the SetPublishingMode service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/SetPublishingMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetPublishingModeResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/SetPublishingModeFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + SetPublishingModeResponseMessage SetPublishingMode(SetPublishingModeMessage request); + + /// + /// The operation contract for the SetPublishingMode service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/SetPublishingMode", ReplyAction = Namespaces.OpcUaWsdl + "/SetPublishingModeResponse")] + IAsyncResult BeginSetPublishingMode(SetPublishingModeMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a SetPublishingMode service request. + /// + SetPublishingModeResponseMessage EndSetPublishingMode(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Publish) + /// + /// The operation contract for the Publish service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Publish", ReplyAction = Namespaces.OpcUaWsdl + "/PublishResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/PublishFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + PublishResponseMessage Publish(PublishMessage request); + + /// + /// The operation contract for the Publish service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Publish", ReplyAction = Namespaces.OpcUaWsdl + "/PublishResponse")] + IAsyncResult BeginPublish(PublishMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Publish service request. + /// + PublishResponseMessage EndPublish(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_Republish) + /// + /// The operation contract for the Republish service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/Republish", ReplyAction = Namespaces.OpcUaWsdl + "/RepublishResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RepublishFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RepublishResponseMessage Republish(RepublishMessage request); + + /// + /// The operation contract for the Republish service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/Republish", ReplyAction = Namespaces.OpcUaWsdl + "/RepublishResponse")] + IAsyncResult BeginRepublish(RepublishMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a Republish service request. + /// + RepublishResponseMessage EndRepublish(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// The operation contract for the TransferSubscriptions service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/TransferSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/TransferSubscriptionsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/TransferSubscriptionsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + TransferSubscriptionsResponseMessage TransferSubscriptions(TransferSubscriptionsMessage request); + + /// + /// The operation contract for the TransferSubscriptions service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/TransferSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/TransferSubscriptionsResponse")] + IAsyncResult BeginTransferSubscriptions(TransferSubscriptionsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a TransferSubscriptions service request. + /// + TransferSubscriptionsResponseMessage EndTransferSubscriptions(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// The operation contract for the DeleteSubscriptions service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/DeleteSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + DeleteSubscriptionsResponseMessage DeleteSubscriptions(DeleteSubscriptionsMessage request); + + /// + /// The operation contract for the DeleteSubscriptions service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/DeleteSubscriptions", ReplyAction = Namespaces.OpcUaWsdl + "/DeleteSubscriptionsResponse")] + IAsyncResult BeginDeleteSubscriptions(DeleteSubscriptionsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a DeleteSubscriptions service request. + /// + DeleteSubscriptionsResponseMessage EndDeleteSubscriptions(IAsyncResult result); + #endif + } + #endregion + + #region IDiscoveryEndpoint Interface + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The service contract which must be implemented by all UA servers. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IDiscoveryEndpoint : IEndpointBase + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// The operation contract for the FindServers service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/FindServers", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/FindServersFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + FindServersResponseMessage FindServers(FindServersMessage request); + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// The operation contract for the FindServersOnNetwork service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/FindServersOnNetwork", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersOnNetworkResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/FindServersOnNetworkFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + FindServersOnNetworkResponseMessage FindServersOnNetwork(FindServersOnNetworkMessage request); + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// The operation contract for the GetEndpoints service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/GetEndpoints", ReplyAction = Namespaces.OpcUaWsdl + "/GetEndpointsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/GetEndpointsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + GetEndpointsResponseMessage GetEndpoints(GetEndpointsMessage request); + #endif + } + #else + /// + /// The asynchronous service contract which must be implemented by UA servers. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IDiscoveryEndpoint : IEndpointBase + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// The operation contract for the FindServers service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/FindServers", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/FindServersFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginFindServers(FindServersMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a FindServers service request. + /// + FindServersResponseMessage EndFindServers(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// The operation contract for the FindServersOnNetwork service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/FindServersOnNetwork", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersOnNetworkResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/FindServersOnNetworkFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginFindServersOnNetwork(FindServersOnNetworkMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a FindServersOnNetwork service request. + /// + FindServersOnNetworkResponseMessage EndFindServersOnNetwork(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// The operation contract for the GetEndpoints service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/GetEndpoints", ReplyAction = Namespaces.OpcUaWsdl + "/GetEndpointsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/GetEndpointsFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginGetEndpoints(GetEndpointsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a GetEndpoints service request. + /// + GetEndpointsResponseMessage EndGetEndpoints(IAsyncResult result); + #endif + } + #endif + #endregion + + #region IDiscoveryChannel Interface + /// + /// An interface used by by clients to access a UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IDiscoveryChannel : IChannelBase + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// The operation contract for the FindServers service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/FindServers", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/FindServersFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + FindServersResponseMessage FindServers(FindServersMessage request); + + /// + /// The operation contract for the FindServers service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/FindServers", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersResponse")] + IAsyncResult BeginFindServers(FindServersMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a FindServers service request. + /// + FindServersResponseMessage EndFindServers(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// The operation contract for the FindServersOnNetwork service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/FindServersOnNetwork", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersOnNetworkResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/FindServersOnNetworkFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + FindServersOnNetworkResponseMessage FindServersOnNetwork(FindServersOnNetworkMessage request); + + /// + /// The operation contract for the FindServersOnNetwork service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/FindServersOnNetwork", ReplyAction = Namespaces.OpcUaWsdl + "/FindServersOnNetworkResponse")] + IAsyncResult BeginFindServersOnNetwork(FindServersOnNetworkMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a FindServersOnNetwork service request. + /// + FindServersOnNetworkResponseMessage EndFindServersOnNetwork(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// The operation contract for the GetEndpoints service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/GetEndpoints", ReplyAction = Namespaces.OpcUaWsdl + "/GetEndpointsResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/GetEndpointsFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + GetEndpointsResponseMessage GetEndpoints(GetEndpointsMessage request); + + /// + /// The operation contract for the GetEndpoints service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/GetEndpoints", ReplyAction = Namespaces.OpcUaWsdl + "/GetEndpointsResponse")] + IAsyncResult BeginGetEndpoints(GetEndpointsMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a GetEndpoints service request. + /// + GetEndpointsResponseMessage EndGetEndpoints(IAsyncResult result); + #endif + } + #endregion + + #region IRegistrationEndpoint Interface + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The service contract which must be implemented by all UA servers. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IRegistrationEndpoint : IEndpointBase + { + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// The operation contract for the RegisterServer service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/RegisterServer", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServerResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterServerFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RegisterServerResponseMessage RegisterServer(RegisterServerMessage request); + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// The operation contract for the RegisterServer2 service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/RegisterServer2", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServer2Response")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterServer2Fault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RegisterServer2ResponseMessage RegisterServer2(RegisterServer2Message request); + #endif + } + #else + /// + /// The asynchronous service contract which must be implemented by UA servers. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IRegistrationEndpoint : IEndpointBase + { + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// The operation contract for the RegisterServer service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/RegisterServer", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServerResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterServerFault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginRegisterServer(RegisterServerMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a RegisterServer service request. + /// + RegisterServerResponseMessage EndRegisterServer(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// The operation contract for the RegisterServer2 service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/RegisterServer2", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServer2Response")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterServer2Fault", Name = "ServiceFault", Namespace = Namespaces.OpcUaXsd)] + IAsyncResult BeginRegisterServer2(RegisterServer2Message request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a RegisterServer2 service request. + /// + RegisterServer2ResponseMessage EndRegisterServer2(IAsyncResult result); + #endif + } + #endif + #endregion + + #region IRegistrationChannel Interface + /// + /// An interface used by by clients to access a UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IRegistrationChannel : IChannelBase + { + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// The operation contract for the RegisterServer service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/RegisterServer", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServerResponse")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterServerFault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RegisterServerResponseMessage RegisterServer(RegisterServerMessage request); + + /// + /// The operation contract for the RegisterServer service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/RegisterServer", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServerResponse")] + IAsyncResult BeginRegisterServer(RegisterServerMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a RegisterServer service request. + /// + RegisterServerResponseMessage EndRegisterServer(IAsyncResult result); + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// The operation contract for the RegisterServer2 service. + /// + [OperationContract(Action = Namespaces.OpcUaWsdl + "/RegisterServer2", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServer2Response")] + [FaultContract(typeof(ServiceFault), Action = Namespaces.OpcUaWsdl + "/RegisterServer2Fault", Name="ServiceFault", Namespace=Namespaces.OpcUaXsd)] + RegisterServer2ResponseMessage RegisterServer2(RegisterServer2Message request); + + /// + /// The operation contract for the RegisterServer2 service. + /// + [OperationContractAttribute(AsyncPattern=true, Action=Namespaces.OpcUaWsdl + "/RegisterServer2", ReplyAction = Namespaces.OpcUaWsdl + "/RegisterServer2Response")] + IAsyncResult BeginRegisterServer2(RegisterServer2Message request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a RegisterServer2 service request. + /// + RegisterServer2ResponseMessage EndRegisterServer2(IAsyncResult result); + #endif + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Messages.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Messages.cs new file mode 100644 index 00000000..1d897bb1 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.Messages.cs @@ -0,0 +1,4210 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Xml; +using System.ServiceModel; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + #region FindServers Service Messages + #if (!OPCUA_EXCLUDE_FindServers) + public partial class FindServersRequest : IServiceRequest + { + } + + public partial class FindServersResponse : IServiceResponse + { + } + + /// + /// The message contract for the FindServers service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class FindServersMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public FindServersRequest FindServersRequest; + + /// + /// Initializes an empty message. + /// + public FindServersMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public FindServersMessage(FindServersRequest FindServersRequest) + { + this.FindServersRequest = FindServersRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return FindServersRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + FindServersResponse body = response as FindServersResponse; + + if (body == null) + { + body = new FindServersResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new FindServersResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the FindServers service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class FindServersResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public FindServersResponse FindServersResponse; + + /// + /// Initializes an empty message. + /// + public FindServersResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public FindServersResponseMessage(FindServersResponse FindServersResponse) + { + this.FindServersResponse = FindServersResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public FindServersResponseMessage(ServiceFault ServiceFault) + { + this.FindServersResponse = new FindServersResponse(); + + if (ServiceFault != null) + { + this.FindServersResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region FindServersOnNetwork Service Messages + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + public partial class FindServersOnNetworkRequest : IServiceRequest + { + } + + public partial class FindServersOnNetworkResponse : IServiceResponse + { + } + + /// + /// The message contract for the FindServersOnNetwork service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class FindServersOnNetworkMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public FindServersOnNetworkRequest FindServersOnNetworkRequest; + + /// + /// Initializes an empty message. + /// + public FindServersOnNetworkMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public FindServersOnNetworkMessage(FindServersOnNetworkRequest FindServersOnNetworkRequest) + { + this.FindServersOnNetworkRequest = FindServersOnNetworkRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return FindServersOnNetworkRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + FindServersOnNetworkResponse body = response as FindServersOnNetworkResponse; + + if (body == null) + { + body = new FindServersOnNetworkResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new FindServersOnNetworkResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the FindServersOnNetwork service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class FindServersOnNetworkResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public FindServersOnNetworkResponse FindServersOnNetworkResponse; + + /// + /// Initializes an empty message. + /// + public FindServersOnNetworkResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public FindServersOnNetworkResponseMessage(FindServersOnNetworkResponse FindServersOnNetworkResponse) + { + this.FindServersOnNetworkResponse = FindServersOnNetworkResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public FindServersOnNetworkResponseMessage(ServiceFault ServiceFault) + { + this.FindServersOnNetworkResponse = new FindServersOnNetworkResponse(); + + if (ServiceFault != null) + { + this.FindServersOnNetworkResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region GetEndpoints Service Messages + #if (!OPCUA_EXCLUDE_GetEndpoints) + public partial class GetEndpointsRequest : IServiceRequest + { + } + + public partial class GetEndpointsResponse : IServiceResponse + { + } + + /// + /// The message contract for the GetEndpoints service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class GetEndpointsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public GetEndpointsRequest GetEndpointsRequest; + + /// + /// Initializes an empty message. + /// + public GetEndpointsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public GetEndpointsMessage(GetEndpointsRequest GetEndpointsRequest) + { + this.GetEndpointsRequest = GetEndpointsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return GetEndpointsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + GetEndpointsResponse body = response as GetEndpointsResponse; + + if (body == null) + { + body = new GetEndpointsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new GetEndpointsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the GetEndpoints service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class GetEndpointsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public GetEndpointsResponse GetEndpointsResponse; + + /// + /// Initializes an empty message. + /// + public GetEndpointsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public GetEndpointsResponseMessage(GetEndpointsResponse GetEndpointsResponse) + { + this.GetEndpointsResponse = GetEndpointsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public GetEndpointsResponseMessage(ServiceFault ServiceFault) + { + this.GetEndpointsResponse = new GetEndpointsResponse(); + + if (ServiceFault != null) + { + this.GetEndpointsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region RegisterServer Service Messages + #if (!OPCUA_EXCLUDE_RegisterServer) + public partial class RegisterServerRequest : IServiceRequest + { + } + + public partial class RegisterServerResponse : IServiceResponse + { + } + + /// + /// The message contract for the RegisterServer service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RegisterServerMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public RegisterServerRequest RegisterServerRequest; + + /// + /// Initializes an empty message. + /// + public RegisterServerMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RegisterServerMessage(RegisterServerRequest RegisterServerRequest) + { + this.RegisterServerRequest = RegisterServerRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return RegisterServerRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + RegisterServerResponse body = response as RegisterServerResponse; + + if (body == null) + { + body = new RegisterServerResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new RegisterServerResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the RegisterServer service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RegisterServerResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public RegisterServerResponse RegisterServerResponse; + + /// + /// Initializes an empty message. + /// + public RegisterServerResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RegisterServerResponseMessage(RegisterServerResponse RegisterServerResponse) + { + this.RegisterServerResponse = RegisterServerResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public RegisterServerResponseMessage(ServiceFault ServiceFault) + { + this.RegisterServerResponse = new RegisterServerResponse(); + + if (ServiceFault != null) + { + this.RegisterServerResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region RegisterServer2 Service Messages + #if (!OPCUA_EXCLUDE_RegisterServer2) + public partial class RegisterServer2Request : IServiceRequest + { + } + + public partial class RegisterServer2Response : IServiceResponse + { + } + + /// + /// The message contract for the RegisterServer2 service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RegisterServer2Message : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public RegisterServer2Request RegisterServer2Request; + + /// + /// Initializes an empty message. + /// + public RegisterServer2Message() + { + } + + /// + /// Initializes the message with the body. + /// + public RegisterServer2Message(RegisterServer2Request RegisterServer2Request) + { + this.RegisterServer2Request = RegisterServer2Request; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return RegisterServer2Request; + } + + /// + public object CreateResponse(IServiceResponse response) + { + RegisterServer2Response body = response as RegisterServer2Response; + + if (body == null) + { + body = new RegisterServer2Response(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new RegisterServer2ResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the RegisterServer2 service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RegisterServer2ResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public RegisterServer2Response RegisterServer2Response; + + /// + /// Initializes an empty message. + /// + public RegisterServer2ResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RegisterServer2ResponseMessage(RegisterServer2Response RegisterServer2Response) + { + this.RegisterServer2Response = RegisterServer2Response; + } + + /// + /// Initializes the message with a service fault. + /// + public RegisterServer2ResponseMessage(ServiceFault ServiceFault) + { + this.RegisterServer2Response = new RegisterServer2Response(); + + if (ServiceFault != null) + { + this.RegisterServer2Response.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region OpenSecureChannel Service Messages + #if (!OPCUA_EXCLUDE_OpenSecureChannel) + public partial class OpenSecureChannelRequest : IServiceRequest + { + } + + public partial class OpenSecureChannelResponse : IServiceResponse + { + } + + /// + /// The message contract for the OpenSecureChannel service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class OpenSecureChannelMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public OpenSecureChannelRequest OpenSecureChannelRequest; + + /// + /// Initializes an empty message. + /// + public OpenSecureChannelMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public OpenSecureChannelMessage(OpenSecureChannelRequest OpenSecureChannelRequest) + { + this.OpenSecureChannelRequest = OpenSecureChannelRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return OpenSecureChannelRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + OpenSecureChannelResponse body = response as OpenSecureChannelResponse; + + if (body == null) + { + body = new OpenSecureChannelResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new OpenSecureChannelResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the OpenSecureChannel service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class OpenSecureChannelResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public OpenSecureChannelResponse OpenSecureChannelResponse; + + /// + /// Initializes an empty message. + /// + public OpenSecureChannelResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public OpenSecureChannelResponseMessage(OpenSecureChannelResponse OpenSecureChannelResponse) + { + this.OpenSecureChannelResponse = OpenSecureChannelResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public OpenSecureChannelResponseMessage(ServiceFault ServiceFault) + { + this.OpenSecureChannelResponse = new OpenSecureChannelResponse(); + + if (ServiceFault != null) + { + this.OpenSecureChannelResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region CloseSecureChannel Service Messages + #if (!OPCUA_EXCLUDE_CloseSecureChannel) + public partial class CloseSecureChannelRequest : IServiceRequest + { + } + + public partial class CloseSecureChannelResponse : IServiceResponse + { + } + + /// + /// The message contract for the CloseSecureChannel service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CloseSecureChannelMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CloseSecureChannelRequest CloseSecureChannelRequest; + + /// + /// Initializes an empty message. + /// + public CloseSecureChannelMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CloseSecureChannelMessage(CloseSecureChannelRequest CloseSecureChannelRequest) + { + this.CloseSecureChannelRequest = CloseSecureChannelRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CloseSecureChannelRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CloseSecureChannelResponse body = response as CloseSecureChannelResponse; + + if (body == null) + { + body = new CloseSecureChannelResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CloseSecureChannelResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the CloseSecureChannel service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CloseSecureChannelResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CloseSecureChannelResponse CloseSecureChannelResponse; + + /// + /// Initializes an empty message. + /// + public CloseSecureChannelResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CloseSecureChannelResponseMessage(CloseSecureChannelResponse CloseSecureChannelResponse) + { + this.CloseSecureChannelResponse = CloseSecureChannelResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CloseSecureChannelResponseMessage(ServiceFault ServiceFault) + { + this.CloseSecureChannelResponse = new CloseSecureChannelResponse(); + + if (ServiceFault != null) + { + this.CloseSecureChannelResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region CreateSession Service Messages + #if (!OPCUA_EXCLUDE_CreateSession) + public partial class CreateSessionRequest : IServiceRequest + { + } + + public partial class CreateSessionResponse : IServiceResponse + { + } + + /// + /// The message contract for the CreateSession service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CreateSessionMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CreateSessionRequest CreateSessionRequest; + + /// + /// Initializes an empty message. + /// + public CreateSessionMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CreateSessionMessage(CreateSessionRequest CreateSessionRequest) + { + this.CreateSessionRequest = CreateSessionRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CreateSessionRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CreateSessionResponse body = response as CreateSessionResponse; + + if (body == null) + { + body = new CreateSessionResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CreateSessionResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the CreateSession service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CreateSessionResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CreateSessionResponse CreateSessionResponse; + + /// + /// Initializes an empty message. + /// + public CreateSessionResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CreateSessionResponseMessage(CreateSessionResponse CreateSessionResponse) + { + this.CreateSessionResponse = CreateSessionResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CreateSessionResponseMessage(ServiceFault ServiceFault) + { + this.CreateSessionResponse = new CreateSessionResponse(); + + if (ServiceFault != null) + { + this.CreateSessionResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region ActivateSession Service Messages + #if (!OPCUA_EXCLUDE_ActivateSession) + public partial class ActivateSessionRequest : IServiceRequest + { + } + + public partial class ActivateSessionResponse : IServiceResponse + { + } + + /// + /// The message contract for the ActivateSession service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ActivateSessionMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public ActivateSessionRequest ActivateSessionRequest; + + /// + /// Initializes an empty message. + /// + public ActivateSessionMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ActivateSessionMessage(ActivateSessionRequest ActivateSessionRequest) + { + this.ActivateSessionRequest = ActivateSessionRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return ActivateSessionRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + ActivateSessionResponse body = response as ActivateSessionResponse; + + if (body == null) + { + body = new ActivateSessionResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new ActivateSessionResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the ActivateSession service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ActivateSessionResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public ActivateSessionResponse ActivateSessionResponse; + + /// + /// Initializes an empty message. + /// + public ActivateSessionResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ActivateSessionResponseMessage(ActivateSessionResponse ActivateSessionResponse) + { + this.ActivateSessionResponse = ActivateSessionResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public ActivateSessionResponseMessage(ServiceFault ServiceFault) + { + this.ActivateSessionResponse = new ActivateSessionResponse(); + + if (ServiceFault != null) + { + this.ActivateSessionResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region CloseSession Service Messages + #if (!OPCUA_EXCLUDE_CloseSession) + public partial class CloseSessionRequest : IServiceRequest + { + } + + public partial class CloseSessionResponse : IServiceResponse + { + } + + /// + /// The message contract for the CloseSession service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CloseSessionMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CloseSessionRequest CloseSessionRequest; + + /// + /// Initializes an empty message. + /// + public CloseSessionMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CloseSessionMessage(CloseSessionRequest CloseSessionRequest) + { + this.CloseSessionRequest = CloseSessionRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CloseSessionRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CloseSessionResponse body = response as CloseSessionResponse; + + if (body == null) + { + body = new CloseSessionResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CloseSessionResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the CloseSession service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CloseSessionResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CloseSessionResponse CloseSessionResponse; + + /// + /// Initializes an empty message. + /// + public CloseSessionResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CloseSessionResponseMessage(CloseSessionResponse CloseSessionResponse) + { + this.CloseSessionResponse = CloseSessionResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CloseSessionResponseMessage(ServiceFault ServiceFault) + { + this.CloseSessionResponse = new CloseSessionResponse(); + + if (ServiceFault != null) + { + this.CloseSessionResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Cancel Service Messages + #if (!OPCUA_EXCLUDE_Cancel) + public partial class CancelRequest : IServiceRequest + { + } + + public partial class CancelResponse : IServiceResponse + { + } + + /// + /// The message contract for the Cancel service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CancelMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CancelRequest CancelRequest; + + /// + /// Initializes an empty message. + /// + public CancelMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CancelMessage(CancelRequest CancelRequest) + { + this.CancelRequest = CancelRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CancelRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CancelResponse body = response as CancelResponse; + + if (body == null) + { + body = new CancelResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CancelResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Cancel service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CancelResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CancelResponse CancelResponse; + + /// + /// Initializes an empty message. + /// + public CancelResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CancelResponseMessage(CancelResponse CancelResponse) + { + this.CancelResponse = CancelResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CancelResponseMessage(ServiceFault ServiceFault) + { + this.CancelResponse = new CancelResponse(); + + if (ServiceFault != null) + { + this.CancelResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region AddNodes Service Messages + #if (!OPCUA_EXCLUDE_AddNodes) + public partial class AddNodesRequest : IServiceRequest + { + } + + public partial class AddNodesResponse : IServiceResponse + { + } + + /// + /// The message contract for the AddNodes service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class AddNodesMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public AddNodesRequest AddNodesRequest; + + /// + /// Initializes an empty message. + /// + public AddNodesMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public AddNodesMessage(AddNodesRequest AddNodesRequest) + { + this.AddNodesRequest = AddNodesRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return AddNodesRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + AddNodesResponse body = response as AddNodesResponse; + + if (body == null) + { + body = new AddNodesResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new AddNodesResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the AddNodes service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class AddNodesResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public AddNodesResponse AddNodesResponse; + + /// + /// Initializes an empty message. + /// + public AddNodesResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public AddNodesResponseMessage(AddNodesResponse AddNodesResponse) + { + this.AddNodesResponse = AddNodesResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public AddNodesResponseMessage(ServiceFault ServiceFault) + { + this.AddNodesResponse = new AddNodesResponse(); + + if (ServiceFault != null) + { + this.AddNodesResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region AddReferences Service Messages + #if (!OPCUA_EXCLUDE_AddReferences) + public partial class AddReferencesRequest : IServiceRequest + { + } + + public partial class AddReferencesResponse : IServiceResponse + { + } + + /// + /// The message contract for the AddReferences service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class AddReferencesMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public AddReferencesRequest AddReferencesRequest; + + /// + /// Initializes an empty message. + /// + public AddReferencesMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public AddReferencesMessage(AddReferencesRequest AddReferencesRequest) + { + this.AddReferencesRequest = AddReferencesRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return AddReferencesRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + AddReferencesResponse body = response as AddReferencesResponse; + + if (body == null) + { + body = new AddReferencesResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new AddReferencesResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the AddReferences service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class AddReferencesResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public AddReferencesResponse AddReferencesResponse; + + /// + /// Initializes an empty message. + /// + public AddReferencesResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public AddReferencesResponseMessage(AddReferencesResponse AddReferencesResponse) + { + this.AddReferencesResponse = AddReferencesResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public AddReferencesResponseMessage(ServiceFault ServiceFault) + { + this.AddReferencesResponse = new AddReferencesResponse(); + + if (ServiceFault != null) + { + this.AddReferencesResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region DeleteNodes Service Messages + #if (!OPCUA_EXCLUDE_DeleteNodes) + public partial class DeleteNodesRequest : IServiceRequest + { + } + + public partial class DeleteNodesResponse : IServiceResponse + { + } + + /// + /// The message contract for the DeleteNodes service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteNodesMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public DeleteNodesRequest DeleteNodesRequest; + + /// + /// Initializes an empty message. + /// + public DeleteNodesMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteNodesMessage(DeleteNodesRequest DeleteNodesRequest) + { + this.DeleteNodesRequest = DeleteNodesRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return DeleteNodesRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + DeleteNodesResponse body = response as DeleteNodesResponse; + + if (body == null) + { + body = new DeleteNodesResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new DeleteNodesResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the DeleteNodes service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteNodesResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public DeleteNodesResponse DeleteNodesResponse; + + /// + /// Initializes an empty message. + /// + public DeleteNodesResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteNodesResponseMessage(DeleteNodesResponse DeleteNodesResponse) + { + this.DeleteNodesResponse = DeleteNodesResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public DeleteNodesResponseMessage(ServiceFault ServiceFault) + { + this.DeleteNodesResponse = new DeleteNodesResponse(); + + if (ServiceFault != null) + { + this.DeleteNodesResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region DeleteReferences Service Messages + #if (!OPCUA_EXCLUDE_DeleteReferences) + public partial class DeleteReferencesRequest : IServiceRequest + { + } + + public partial class DeleteReferencesResponse : IServiceResponse + { + } + + /// + /// The message contract for the DeleteReferences service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteReferencesMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public DeleteReferencesRequest DeleteReferencesRequest; + + /// + /// Initializes an empty message. + /// + public DeleteReferencesMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteReferencesMessage(DeleteReferencesRequest DeleteReferencesRequest) + { + this.DeleteReferencesRequest = DeleteReferencesRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return DeleteReferencesRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + DeleteReferencesResponse body = response as DeleteReferencesResponse; + + if (body == null) + { + body = new DeleteReferencesResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new DeleteReferencesResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the DeleteReferences service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteReferencesResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public DeleteReferencesResponse DeleteReferencesResponse; + + /// + /// Initializes an empty message. + /// + public DeleteReferencesResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteReferencesResponseMessage(DeleteReferencesResponse DeleteReferencesResponse) + { + this.DeleteReferencesResponse = DeleteReferencesResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public DeleteReferencesResponseMessage(ServiceFault ServiceFault) + { + this.DeleteReferencesResponse = new DeleteReferencesResponse(); + + if (ServiceFault != null) + { + this.DeleteReferencesResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Browse Service Messages + #if (!OPCUA_EXCLUDE_Browse) + public partial class BrowseRequest : IServiceRequest + { + } + + public partial class BrowseResponse : IServiceResponse + { + } + + /// + /// The message contract for the Browse service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class BrowseMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public BrowseRequest BrowseRequest; + + /// + /// Initializes an empty message. + /// + public BrowseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public BrowseMessage(BrowseRequest BrowseRequest) + { + this.BrowseRequest = BrowseRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return BrowseRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + BrowseResponse body = response as BrowseResponse; + + if (body == null) + { + body = new BrowseResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new BrowseResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Browse service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class BrowseResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public BrowseResponse BrowseResponse; + + /// + /// Initializes an empty message. + /// + public BrowseResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public BrowseResponseMessage(BrowseResponse BrowseResponse) + { + this.BrowseResponse = BrowseResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public BrowseResponseMessage(ServiceFault ServiceFault) + { + this.BrowseResponse = new BrowseResponse(); + + if (ServiceFault != null) + { + this.BrowseResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region BrowseNext Service Messages + #if (!OPCUA_EXCLUDE_BrowseNext) + public partial class BrowseNextRequest : IServiceRequest + { + } + + public partial class BrowseNextResponse : IServiceResponse + { + } + + /// + /// The message contract for the BrowseNext service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class BrowseNextMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public BrowseNextRequest BrowseNextRequest; + + /// + /// Initializes an empty message. + /// + public BrowseNextMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public BrowseNextMessage(BrowseNextRequest BrowseNextRequest) + { + this.BrowseNextRequest = BrowseNextRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return BrowseNextRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + BrowseNextResponse body = response as BrowseNextResponse; + + if (body == null) + { + body = new BrowseNextResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new BrowseNextResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the BrowseNext service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class BrowseNextResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public BrowseNextResponse BrowseNextResponse; + + /// + /// Initializes an empty message. + /// + public BrowseNextResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public BrowseNextResponseMessage(BrowseNextResponse BrowseNextResponse) + { + this.BrowseNextResponse = BrowseNextResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public BrowseNextResponseMessage(ServiceFault ServiceFault) + { + this.BrowseNextResponse = new BrowseNextResponse(); + + if (ServiceFault != null) + { + this.BrowseNextResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region TranslateBrowsePathsToNodeIds Service Messages + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + public partial class TranslateBrowsePathsToNodeIdsRequest : IServiceRequest + { + } + + public partial class TranslateBrowsePathsToNodeIdsResponse : IServiceResponse + { + } + + /// + /// The message contract for the TranslateBrowsePathsToNodeIds service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class TranslateBrowsePathsToNodeIdsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public TranslateBrowsePathsToNodeIdsRequest TranslateBrowsePathsToNodeIdsRequest; + + /// + /// Initializes an empty message. + /// + public TranslateBrowsePathsToNodeIdsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public TranslateBrowsePathsToNodeIdsMessage(TranslateBrowsePathsToNodeIdsRequest TranslateBrowsePathsToNodeIdsRequest) + { + this.TranslateBrowsePathsToNodeIdsRequest = TranslateBrowsePathsToNodeIdsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return TranslateBrowsePathsToNodeIdsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + TranslateBrowsePathsToNodeIdsResponse body = response as TranslateBrowsePathsToNodeIdsResponse; + + if (body == null) + { + body = new TranslateBrowsePathsToNodeIdsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new TranslateBrowsePathsToNodeIdsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the TranslateBrowsePathsToNodeIds service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class TranslateBrowsePathsToNodeIdsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public TranslateBrowsePathsToNodeIdsResponse TranslateBrowsePathsToNodeIdsResponse; + + /// + /// Initializes an empty message. + /// + public TranslateBrowsePathsToNodeIdsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public TranslateBrowsePathsToNodeIdsResponseMessage(TranslateBrowsePathsToNodeIdsResponse TranslateBrowsePathsToNodeIdsResponse) + { + this.TranslateBrowsePathsToNodeIdsResponse = TranslateBrowsePathsToNodeIdsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public TranslateBrowsePathsToNodeIdsResponseMessage(ServiceFault ServiceFault) + { + this.TranslateBrowsePathsToNodeIdsResponse = new TranslateBrowsePathsToNodeIdsResponse(); + + if (ServiceFault != null) + { + this.TranslateBrowsePathsToNodeIdsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region RegisterNodes Service Messages + #if (!OPCUA_EXCLUDE_RegisterNodes) + public partial class RegisterNodesRequest : IServiceRequest + { + } + + public partial class RegisterNodesResponse : IServiceResponse + { + } + + /// + /// The message contract for the RegisterNodes service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RegisterNodesMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public RegisterNodesRequest RegisterNodesRequest; + + /// + /// Initializes an empty message. + /// + public RegisterNodesMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RegisterNodesMessage(RegisterNodesRequest RegisterNodesRequest) + { + this.RegisterNodesRequest = RegisterNodesRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return RegisterNodesRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + RegisterNodesResponse body = response as RegisterNodesResponse; + + if (body == null) + { + body = new RegisterNodesResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new RegisterNodesResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the RegisterNodes service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RegisterNodesResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public RegisterNodesResponse RegisterNodesResponse; + + /// + /// Initializes an empty message. + /// + public RegisterNodesResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RegisterNodesResponseMessage(RegisterNodesResponse RegisterNodesResponse) + { + this.RegisterNodesResponse = RegisterNodesResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public RegisterNodesResponseMessage(ServiceFault ServiceFault) + { + this.RegisterNodesResponse = new RegisterNodesResponse(); + + if (ServiceFault != null) + { + this.RegisterNodesResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region UnregisterNodes Service Messages + #if (!OPCUA_EXCLUDE_UnregisterNodes) + public partial class UnregisterNodesRequest : IServiceRequest + { + } + + public partial class UnregisterNodesResponse : IServiceResponse + { + } + + /// + /// The message contract for the UnregisterNodes service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class UnregisterNodesMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public UnregisterNodesRequest UnregisterNodesRequest; + + /// + /// Initializes an empty message. + /// + public UnregisterNodesMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public UnregisterNodesMessage(UnregisterNodesRequest UnregisterNodesRequest) + { + this.UnregisterNodesRequest = UnregisterNodesRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return UnregisterNodesRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + UnregisterNodesResponse body = response as UnregisterNodesResponse; + + if (body == null) + { + body = new UnregisterNodesResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new UnregisterNodesResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the UnregisterNodes service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class UnregisterNodesResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public UnregisterNodesResponse UnregisterNodesResponse; + + /// + /// Initializes an empty message. + /// + public UnregisterNodesResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public UnregisterNodesResponseMessage(UnregisterNodesResponse UnregisterNodesResponse) + { + this.UnregisterNodesResponse = UnregisterNodesResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public UnregisterNodesResponseMessage(ServiceFault ServiceFault) + { + this.UnregisterNodesResponse = new UnregisterNodesResponse(); + + if (ServiceFault != null) + { + this.UnregisterNodesResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region QueryFirst Service Messages + #if (!OPCUA_EXCLUDE_QueryFirst) + public partial class QueryFirstRequest : IServiceRequest + { + } + + public partial class QueryFirstResponse : IServiceResponse + { + } + + /// + /// The message contract for the QueryFirst service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class QueryFirstMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public QueryFirstRequest QueryFirstRequest; + + /// + /// Initializes an empty message. + /// + public QueryFirstMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public QueryFirstMessage(QueryFirstRequest QueryFirstRequest) + { + this.QueryFirstRequest = QueryFirstRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return QueryFirstRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + QueryFirstResponse body = response as QueryFirstResponse; + + if (body == null) + { + body = new QueryFirstResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new QueryFirstResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the QueryFirst service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class QueryFirstResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public QueryFirstResponse QueryFirstResponse; + + /// + /// Initializes an empty message. + /// + public QueryFirstResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public QueryFirstResponseMessage(QueryFirstResponse QueryFirstResponse) + { + this.QueryFirstResponse = QueryFirstResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public QueryFirstResponseMessage(ServiceFault ServiceFault) + { + this.QueryFirstResponse = new QueryFirstResponse(); + + if (ServiceFault != null) + { + this.QueryFirstResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region QueryNext Service Messages + #if (!OPCUA_EXCLUDE_QueryNext) + public partial class QueryNextRequest : IServiceRequest + { + } + + public partial class QueryNextResponse : IServiceResponse + { + } + + /// + /// The message contract for the QueryNext service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class QueryNextMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public QueryNextRequest QueryNextRequest; + + /// + /// Initializes an empty message. + /// + public QueryNextMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public QueryNextMessage(QueryNextRequest QueryNextRequest) + { + this.QueryNextRequest = QueryNextRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return QueryNextRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + QueryNextResponse body = response as QueryNextResponse; + + if (body == null) + { + body = new QueryNextResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new QueryNextResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the QueryNext service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class QueryNextResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public QueryNextResponse QueryNextResponse; + + /// + /// Initializes an empty message. + /// + public QueryNextResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public QueryNextResponseMessage(QueryNextResponse QueryNextResponse) + { + this.QueryNextResponse = QueryNextResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public QueryNextResponseMessage(ServiceFault ServiceFault) + { + this.QueryNextResponse = new QueryNextResponse(); + + if (ServiceFault != null) + { + this.QueryNextResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Read Service Messages + #if (!OPCUA_EXCLUDE_Read) + public partial class ReadRequest : IServiceRequest + { + } + + public partial class ReadResponse : IServiceResponse + { + } + + /// + /// The message contract for the Read service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ReadMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public ReadRequest ReadRequest; + + /// + /// Initializes an empty message. + /// + public ReadMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ReadMessage(ReadRequest ReadRequest) + { + this.ReadRequest = ReadRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return ReadRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + ReadResponse body = response as ReadResponse; + + if (body == null) + { + body = new ReadResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new ReadResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Read service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ReadResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public ReadResponse ReadResponse; + + /// + /// Initializes an empty message. + /// + public ReadResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ReadResponseMessage(ReadResponse ReadResponse) + { + this.ReadResponse = ReadResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public ReadResponseMessage(ServiceFault ServiceFault) + { + this.ReadResponse = new ReadResponse(); + + if (ServiceFault != null) + { + this.ReadResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region HistoryRead Service Messages + #if (!OPCUA_EXCLUDE_HistoryRead) + public partial class HistoryReadRequest : IServiceRequest + { + } + + public partial class HistoryReadResponse : IServiceResponse + { + } + + /// + /// The message contract for the HistoryRead service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class HistoryReadMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public HistoryReadRequest HistoryReadRequest; + + /// + /// Initializes an empty message. + /// + public HistoryReadMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public HistoryReadMessage(HistoryReadRequest HistoryReadRequest) + { + this.HistoryReadRequest = HistoryReadRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return HistoryReadRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + HistoryReadResponse body = response as HistoryReadResponse; + + if (body == null) + { + body = new HistoryReadResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new HistoryReadResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the HistoryRead service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class HistoryReadResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public HistoryReadResponse HistoryReadResponse; + + /// + /// Initializes an empty message. + /// + public HistoryReadResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public HistoryReadResponseMessage(HistoryReadResponse HistoryReadResponse) + { + this.HistoryReadResponse = HistoryReadResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public HistoryReadResponseMessage(ServiceFault ServiceFault) + { + this.HistoryReadResponse = new HistoryReadResponse(); + + if (ServiceFault != null) + { + this.HistoryReadResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Write Service Messages + #if (!OPCUA_EXCLUDE_Write) + public partial class WriteRequest : IServiceRequest + { + } + + public partial class WriteResponse : IServiceResponse + { + } + + /// + /// The message contract for the Write service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class WriteMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public WriteRequest WriteRequest; + + /// + /// Initializes an empty message. + /// + public WriteMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public WriteMessage(WriteRequest WriteRequest) + { + this.WriteRequest = WriteRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return WriteRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + WriteResponse body = response as WriteResponse; + + if (body == null) + { + body = new WriteResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new WriteResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Write service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class WriteResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public WriteResponse WriteResponse; + + /// + /// Initializes an empty message. + /// + public WriteResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public WriteResponseMessage(WriteResponse WriteResponse) + { + this.WriteResponse = WriteResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public WriteResponseMessage(ServiceFault ServiceFault) + { + this.WriteResponse = new WriteResponse(); + + if (ServiceFault != null) + { + this.WriteResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region HistoryUpdate Service Messages + #if (!OPCUA_EXCLUDE_HistoryUpdate) + public partial class HistoryUpdateRequest : IServiceRequest + { + } + + public partial class HistoryUpdateResponse : IServiceResponse + { + } + + /// + /// The message contract for the HistoryUpdate service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class HistoryUpdateMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public HistoryUpdateRequest HistoryUpdateRequest; + + /// + /// Initializes an empty message. + /// + public HistoryUpdateMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public HistoryUpdateMessage(HistoryUpdateRequest HistoryUpdateRequest) + { + this.HistoryUpdateRequest = HistoryUpdateRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return HistoryUpdateRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + HistoryUpdateResponse body = response as HistoryUpdateResponse; + + if (body == null) + { + body = new HistoryUpdateResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new HistoryUpdateResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the HistoryUpdate service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class HistoryUpdateResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public HistoryUpdateResponse HistoryUpdateResponse; + + /// + /// Initializes an empty message. + /// + public HistoryUpdateResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public HistoryUpdateResponseMessage(HistoryUpdateResponse HistoryUpdateResponse) + { + this.HistoryUpdateResponse = HistoryUpdateResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public HistoryUpdateResponseMessage(ServiceFault ServiceFault) + { + this.HistoryUpdateResponse = new HistoryUpdateResponse(); + + if (ServiceFault != null) + { + this.HistoryUpdateResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Call Service Messages + #if (!OPCUA_EXCLUDE_Call) + public partial class CallRequest : IServiceRequest + { + } + + public partial class CallResponse : IServiceResponse + { + } + + /// + /// The message contract for the Call service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CallMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CallRequest CallRequest; + + /// + /// Initializes an empty message. + /// + public CallMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CallMessage(CallRequest CallRequest) + { + this.CallRequest = CallRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CallRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CallResponse body = response as CallResponse; + + if (body == null) + { + body = new CallResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CallResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Call service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CallResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CallResponse CallResponse; + + /// + /// Initializes an empty message. + /// + public CallResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CallResponseMessage(CallResponse CallResponse) + { + this.CallResponse = CallResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CallResponseMessage(ServiceFault ServiceFault) + { + this.CallResponse = new CallResponse(); + + if (ServiceFault != null) + { + this.CallResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region CreateMonitoredItems Service Messages + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + public partial class CreateMonitoredItemsRequest : IServiceRequest + { + } + + public partial class CreateMonitoredItemsResponse : IServiceResponse + { + } + + /// + /// The message contract for the CreateMonitoredItems service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CreateMonitoredItemsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CreateMonitoredItemsRequest CreateMonitoredItemsRequest; + + /// + /// Initializes an empty message. + /// + public CreateMonitoredItemsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CreateMonitoredItemsMessage(CreateMonitoredItemsRequest CreateMonitoredItemsRequest) + { + this.CreateMonitoredItemsRequest = CreateMonitoredItemsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CreateMonitoredItemsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CreateMonitoredItemsResponse body = response as CreateMonitoredItemsResponse; + + if (body == null) + { + body = new CreateMonitoredItemsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CreateMonitoredItemsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the CreateMonitoredItems service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CreateMonitoredItemsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CreateMonitoredItemsResponse CreateMonitoredItemsResponse; + + /// + /// Initializes an empty message. + /// + public CreateMonitoredItemsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CreateMonitoredItemsResponseMessage(CreateMonitoredItemsResponse CreateMonitoredItemsResponse) + { + this.CreateMonitoredItemsResponse = CreateMonitoredItemsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CreateMonitoredItemsResponseMessage(ServiceFault ServiceFault) + { + this.CreateMonitoredItemsResponse = new CreateMonitoredItemsResponse(); + + if (ServiceFault != null) + { + this.CreateMonitoredItemsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region ModifyMonitoredItems Service Messages + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + public partial class ModifyMonitoredItemsRequest : IServiceRequest + { + } + + public partial class ModifyMonitoredItemsResponse : IServiceResponse + { + } + + /// + /// The message contract for the ModifyMonitoredItems service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ModifyMonitoredItemsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public ModifyMonitoredItemsRequest ModifyMonitoredItemsRequest; + + /// + /// Initializes an empty message. + /// + public ModifyMonitoredItemsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ModifyMonitoredItemsMessage(ModifyMonitoredItemsRequest ModifyMonitoredItemsRequest) + { + this.ModifyMonitoredItemsRequest = ModifyMonitoredItemsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return ModifyMonitoredItemsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + ModifyMonitoredItemsResponse body = response as ModifyMonitoredItemsResponse; + + if (body == null) + { + body = new ModifyMonitoredItemsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new ModifyMonitoredItemsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the ModifyMonitoredItems service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ModifyMonitoredItemsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public ModifyMonitoredItemsResponse ModifyMonitoredItemsResponse; + + /// + /// Initializes an empty message. + /// + public ModifyMonitoredItemsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ModifyMonitoredItemsResponseMessage(ModifyMonitoredItemsResponse ModifyMonitoredItemsResponse) + { + this.ModifyMonitoredItemsResponse = ModifyMonitoredItemsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public ModifyMonitoredItemsResponseMessage(ServiceFault ServiceFault) + { + this.ModifyMonitoredItemsResponse = new ModifyMonitoredItemsResponse(); + + if (ServiceFault != null) + { + this.ModifyMonitoredItemsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region SetMonitoringMode Service Messages + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + public partial class SetMonitoringModeRequest : IServiceRequest + { + } + + public partial class SetMonitoringModeResponse : IServiceResponse + { + } + + /// + /// The message contract for the SetMonitoringMode service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class SetMonitoringModeMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public SetMonitoringModeRequest SetMonitoringModeRequest; + + /// + /// Initializes an empty message. + /// + public SetMonitoringModeMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public SetMonitoringModeMessage(SetMonitoringModeRequest SetMonitoringModeRequest) + { + this.SetMonitoringModeRequest = SetMonitoringModeRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return SetMonitoringModeRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + SetMonitoringModeResponse body = response as SetMonitoringModeResponse; + + if (body == null) + { + body = new SetMonitoringModeResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new SetMonitoringModeResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the SetMonitoringMode service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class SetMonitoringModeResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public SetMonitoringModeResponse SetMonitoringModeResponse; + + /// + /// Initializes an empty message. + /// + public SetMonitoringModeResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public SetMonitoringModeResponseMessage(SetMonitoringModeResponse SetMonitoringModeResponse) + { + this.SetMonitoringModeResponse = SetMonitoringModeResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public SetMonitoringModeResponseMessage(ServiceFault ServiceFault) + { + this.SetMonitoringModeResponse = new SetMonitoringModeResponse(); + + if (ServiceFault != null) + { + this.SetMonitoringModeResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region SetTriggering Service Messages + #if (!OPCUA_EXCLUDE_SetTriggering) + public partial class SetTriggeringRequest : IServiceRequest + { + } + + public partial class SetTriggeringResponse : IServiceResponse + { + } + + /// + /// The message contract for the SetTriggering service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class SetTriggeringMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public SetTriggeringRequest SetTriggeringRequest; + + /// + /// Initializes an empty message. + /// + public SetTriggeringMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public SetTriggeringMessage(SetTriggeringRequest SetTriggeringRequest) + { + this.SetTriggeringRequest = SetTriggeringRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return SetTriggeringRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + SetTriggeringResponse body = response as SetTriggeringResponse; + + if (body == null) + { + body = new SetTriggeringResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new SetTriggeringResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the SetTriggering service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class SetTriggeringResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public SetTriggeringResponse SetTriggeringResponse; + + /// + /// Initializes an empty message. + /// + public SetTriggeringResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public SetTriggeringResponseMessage(SetTriggeringResponse SetTriggeringResponse) + { + this.SetTriggeringResponse = SetTriggeringResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public SetTriggeringResponseMessage(ServiceFault ServiceFault) + { + this.SetTriggeringResponse = new SetTriggeringResponse(); + + if (ServiceFault != null) + { + this.SetTriggeringResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region DeleteMonitoredItems Service Messages + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + public partial class DeleteMonitoredItemsRequest : IServiceRequest + { + } + + public partial class DeleteMonitoredItemsResponse : IServiceResponse + { + } + + /// + /// The message contract for the DeleteMonitoredItems service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteMonitoredItemsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public DeleteMonitoredItemsRequest DeleteMonitoredItemsRequest; + + /// + /// Initializes an empty message. + /// + public DeleteMonitoredItemsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteMonitoredItemsMessage(DeleteMonitoredItemsRequest DeleteMonitoredItemsRequest) + { + this.DeleteMonitoredItemsRequest = DeleteMonitoredItemsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return DeleteMonitoredItemsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + DeleteMonitoredItemsResponse body = response as DeleteMonitoredItemsResponse; + + if (body == null) + { + body = new DeleteMonitoredItemsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new DeleteMonitoredItemsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the DeleteMonitoredItems service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteMonitoredItemsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public DeleteMonitoredItemsResponse DeleteMonitoredItemsResponse; + + /// + /// Initializes an empty message. + /// + public DeleteMonitoredItemsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteMonitoredItemsResponseMessage(DeleteMonitoredItemsResponse DeleteMonitoredItemsResponse) + { + this.DeleteMonitoredItemsResponse = DeleteMonitoredItemsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public DeleteMonitoredItemsResponseMessage(ServiceFault ServiceFault) + { + this.DeleteMonitoredItemsResponse = new DeleteMonitoredItemsResponse(); + + if (ServiceFault != null) + { + this.DeleteMonitoredItemsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region CreateSubscription Service Messages + #if (!OPCUA_EXCLUDE_CreateSubscription) + public partial class CreateSubscriptionRequest : IServiceRequest + { + } + + public partial class CreateSubscriptionResponse : IServiceResponse + { + } + + /// + /// The message contract for the CreateSubscription service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CreateSubscriptionMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public CreateSubscriptionRequest CreateSubscriptionRequest; + + /// + /// Initializes an empty message. + /// + public CreateSubscriptionMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CreateSubscriptionMessage(CreateSubscriptionRequest CreateSubscriptionRequest) + { + this.CreateSubscriptionRequest = CreateSubscriptionRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return CreateSubscriptionRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + CreateSubscriptionResponse body = response as CreateSubscriptionResponse; + + if (body == null) + { + body = new CreateSubscriptionResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new CreateSubscriptionResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the CreateSubscription service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class CreateSubscriptionResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public CreateSubscriptionResponse CreateSubscriptionResponse; + + /// + /// Initializes an empty message. + /// + public CreateSubscriptionResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public CreateSubscriptionResponseMessage(CreateSubscriptionResponse CreateSubscriptionResponse) + { + this.CreateSubscriptionResponse = CreateSubscriptionResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public CreateSubscriptionResponseMessage(ServiceFault ServiceFault) + { + this.CreateSubscriptionResponse = new CreateSubscriptionResponse(); + + if (ServiceFault != null) + { + this.CreateSubscriptionResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region ModifySubscription Service Messages + #if (!OPCUA_EXCLUDE_ModifySubscription) + public partial class ModifySubscriptionRequest : IServiceRequest + { + } + + public partial class ModifySubscriptionResponse : IServiceResponse + { + } + + /// + /// The message contract for the ModifySubscription service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ModifySubscriptionMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public ModifySubscriptionRequest ModifySubscriptionRequest; + + /// + /// Initializes an empty message. + /// + public ModifySubscriptionMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ModifySubscriptionMessage(ModifySubscriptionRequest ModifySubscriptionRequest) + { + this.ModifySubscriptionRequest = ModifySubscriptionRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return ModifySubscriptionRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + ModifySubscriptionResponse body = response as ModifySubscriptionResponse; + + if (body == null) + { + body = new ModifySubscriptionResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new ModifySubscriptionResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the ModifySubscription service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class ModifySubscriptionResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public ModifySubscriptionResponse ModifySubscriptionResponse; + + /// + /// Initializes an empty message. + /// + public ModifySubscriptionResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public ModifySubscriptionResponseMessage(ModifySubscriptionResponse ModifySubscriptionResponse) + { + this.ModifySubscriptionResponse = ModifySubscriptionResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public ModifySubscriptionResponseMessage(ServiceFault ServiceFault) + { + this.ModifySubscriptionResponse = new ModifySubscriptionResponse(); + + if (ServiceFault != null) + { + this.ModifySubscriptionResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region SetPublishingMode Service Messages + #if (!OPCUA_EXCLUDE_SetPublishingMode) + public partial class SetPublishingModeRequest : IServiceRequest + { + } + + public partial class SetPublishingModeResponse : IServiceResponse + { + } + + /// + /// The message contract for the SetPublishingMode service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class SetPublishingModeMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public SetPublishingModeRequest SetPublishingModeRequest; + + /// + /// Initializes an empty message. + /// + public SetPublishingModeMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public SetPublishingModeMessage(SetPublishingModeRequest SetPublishingModeRequest) + { + this.SetPublishingModeRequest = SetPublishingModeRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return SetPublishingModeRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + SetPublishingModeResponse body = response as SetPublishingModeResponse; + + if (body == null) + { + body = new SetPublishingModeResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new SetPublishingModeResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the SetPublishingMode service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class SetPublishingModeResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public SetPublishingModeResponse SetPublishingModeResponse; + + /// + /// Initializes an empty message. + /// + public SetPublishingModeResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public SetPublishingModeResponseMessage(SetPublishingModeResponse SetPublishingModeResponse) + { + this.SetPublishingModeResponse = SetPublishingModeResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public SetPublishingModeResponseMessage(ServiceFault ServiceFault) + { + this.SetPublishingModeResponse = new SetPublishingModeResponse(); + + if (ServiceFault != null) + { + this.SetPublishingModeResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Publish Service Messages + #if (!OPCUA_EXCLUDE_Publish) + public partial class PublishRequest : IServiceRequest + { + } + + public partial class PublishResponse : IServiceResponse + { + } + + /// + /// The message contract for the Publish service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class PublishMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public PublishRequest PublishRequest; + + /// + /// Initializes an empty message. + /// + public PublishMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public PublishMessage(PublishRequest PublishRequest) + { + this.PublishRequest = PublishRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return PublishRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + PublishResponse body = response as PublishResponse; + + if (body == null) + { + body = new PublishResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new PublishResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Publish service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class PublishResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public PublishResponse PublishResponse; + + /// + /// Initializes an empty message. + /// + public PublishResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public PublishResponseMessage(PublishResponse PublishResponse) + { + this.PublishResponse = PublishResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public PublishResponseMessage(ServiceFault ServiceFault) + { + this.PublishResponse = new PublishResponse(); + + if (ServiceFault != null) + { + this.PublishResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region Republish Service Messages + #if (!OPCUA_EXCLUDE_Republish) + public partial class RepublishRequest : IServiceRequest + { + } + + public partial class RepublishResponse : IServiceResponse + { + } + + /// + /// The message contract for the Republish service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RepublishMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public RepublishRequest RepublishRequest; + + /// + /// Initializes an empty message. + /// + public RepublishMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RepublishMessage(RepublishRequest RepublishRequest) + { + this.RepublishRequest = RepublishRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return RepublishRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + RepublishResponse body = response as RepublishResponse; + + if (body == null) + { + body = new RepublishResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new RepublishResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the Republish service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class RepublishResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public RepublishResponse RepublishResponse; + + /// + /// Initializes an empty message. + /// + public RepublishResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public RepublishResponseMessage(RepublishResponse RepublishResponse) + { + this.RepublishResponse = RepublishResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public RepublishResponseMessage(ServiceFault ServiceFault) + { + this.RepublishResponse = new RepublishResponse(); + + if (ServiceFault != null) + { + this.RepublishResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region TransferSubscriptions Service Messages + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + public partial class TransferSubscriptionsRequest : IServiceRequest + { + } + + public partial class TransferSubscriptionsResponse : IServiceResponse + { + } + + /// + /// The message contract for the TransferSubscriptions service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class TransferSubscriptionsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public TransferSubscriptionsRequest TransferSubscriptionsRequest; + + /// + /// Initializes an empty message. + /// + public TransferSubscriptionsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public TransferSubscriptionsMessage(TransferSubscriptionsRequest TransferSubscriptionsRequest) + { + this.TransferSubscriptionsRequest = TransferSubscriptionsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return TransferSubscriptionsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + TransferSubscriptionsResponse body = response as TransferSubscriptionsResponse; + + if (body == null) + { + body = new TransferSubscriptionsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new TransferSubscriptionsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the TransferSubscriptions service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class TransferSubscriptionsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public TransferSubscriptionsResponse TransferSubscriptionsResponse; + + /// + /// Initializes an empty message. + /// + public TransferSubscriptionsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public TransferSubscriptionsResponseMessage(TransferSubscriptionsResponse TransferSubscriptionsResponse) + { + this.TransferSubscriptionsResponse = TransferSubscriptionsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public TransferSubscriptionsResponseMessage(ServiceFault ServiceFault) + { + this.TransferSubscriptionsResponse = new TransferSubscriptionsResponse(); + + if (ServiceFault != null) + { + this.TransferSubscriptionsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion + + #region DeleteSubscriptions Service Messages + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + public partial class DeleteSubscriptionsRequest : IServiceRequest + { + } + + public partial class DeleteSubscriptionsResponse : IServiceResponse + { + } + + /// + /// The message contract for the DeleteSubscriptions service. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteSubscriptionsMessage : IServiceMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace = Namespaces.OpcUaXsd, Order = 0)] + public DeleteSubscriptionsRequest DeleteSubscriptionsRequest; + + /// + /// Initializes an empty message. + /// + public DeleteSubscriptionsMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteSubscriptionsMessage(DeleteSubscriptionsRequest DeleteSubscriptionsRequest) + { + this.DeleteSubscriptionsRequest = DeleteSubscriptionsRequest; + } + + #region IServiceMessage Members + /// + public IServiceRequest GetRequest() + { + return DeleteSubscriptionsRequest; + } + + /// + public object CreateResponse(IServiceResponse response) + { + DeleteSubscriptionsResponse body = response as DeleteSubscriptionsResponse; + + if (body == null) + { + body = new DeleteSubscriptionsResponse(); + body.ResponseHeader = ((ServiceFault)response).ResponseHeader; + } + + return new DeleteSubscriptionsResponseMessage(body); + } + #endregion + } + + /// + /// The message contract for the DeleteSubscriptions service response. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + [MessageContract(IsWrapped=false)] + public class DeleteSubscriptionsResponseMessage + { + /// + /// The body of the message. + /// + [MessageBodyMember(Namespace=Namespaces.OpcUaXsd, Order=0)] + public DeleteSubscriptionsResponse DeleteSubscriptionsResponse; + + /// + /// Initializes an empty message. + /// + public DeleteSubscriptionsResponseMessage() + { + } + + /// + /// Initializes the message with the body. + /// + public DeleteSubscriptionsResponseMessage(DeleteSubscriptionsResponse DeleteSubscriptionsResponse) + { + this.DeleteSubscriptionsResponse = DeleteSubscriptionsResponse; + } + + /// + /// Initializes the message with a service fault. + /// + public DeleteSubscriptionsResponseMessage(ServiceFault ServiceFault) + { + this.DeleteSubscriptionsResponse = new DeleteSubscriptionsResponse(); + + if (ServiceFault != null) + { + this.DeleteSubscriptionsResponse.ResponseHeader = ServiceFault.ResponseHeader; + } + } + } + #endif + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.NodeSet2.xml b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.NodeSet2.xml new file mode 100644 index 00000000..eb7b2828 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.NodeSet2.xml @@ -0,0 +1,55573 @@ + + + + + + + + + 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 + + + Default Binary + + i=58 + + + + Default XML + + i=58 + + + + BaseDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + + + Number + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + Integer + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=26 + + + + UInteger + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=26 + + + + Enumeration + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + Boolean + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.8 + + i=24 + + + + SByte + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.17 + + i=27 + + + + Byte + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.9 + + i=28 + + + + Int16 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.25 + + i=27 + + + + UInt16 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.35 + + i=28 + + + + Int32 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.26 + + i=27 + + + + UInt32 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.36 + + i=28 + + + + Int64 + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.27 + + i=27 + + + + UInt64 + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=28 + + + + Float + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.15 + + i=26 + + + + Double + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=26 + + + + String + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + DateTime + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + Guid + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.16 + + i=24 + + + + ByteString + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + XmlElement + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.39 + + i=24 + + + + NodeId + https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.2 + + i=24 + + + + ExpandedNodeId + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.11 + + i=24 + + + + StatusCode + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.34.1 + + i=24 + + + + QualifiedName + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.3 + + i=24 + + + + LocalizedText + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.5 + + i=24 + + + + Structure + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=24 + + + + DataValue + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.7.1 + + i=24 + + + + DiagnosticInfo + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.8 + + i=24 + + + + Image + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=15 + + + + Decimal + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.54 + + i=26 + + + + References + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.1 + + + + NonHierarchicalReferences + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.3 + + i=31 + + + + HierarchicalReferences + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.2 + + i=31 + + HierarchicalReferences + + + HasChild + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.4 + + i=33 + + ChildOf + + + Organizes + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.6 + + i=33 + + OrganizedBy + + + HasEventSource + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.14 + + i=33 + + EventSourceOf + + + HasModellingRule + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.11 + + i=32 + + ModellingRuleOf + + + HasEncoding + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.13 + + i=32 + + EncodingOf + + + HasDescription + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.1 + + i=32 + + DescriptionOf + + + HasTypeDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.12 + + i=32 + + TypeDefinitionOf + + + GeneratesEvent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.16 + + i=32 + + GeneratedBy + + + AlwaysGeneratesEvent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.17 + + i=41 + + AlwaysGeneratedBy + + + Aggregates + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.5 + + i=34 + + AggregatedBy + + + HasSubtype + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.10 + + i=34 + + SubtypeOf + + + HasProperty + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.9 + + i=44 + + PropertyOf + + + HasComponent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.7 + + i=44 + + ComponentOf + + + HasNotifier + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.15 + + i=36 + + NotifierOf + + + HasOrderedComponent + https://reference.opcfoundation.org/v104/Core/docs/Part5/11.8 + + i=47 + + OrderedComponentOf + + + FromState + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.11 + + i=32 + + ToTransition + + + ToState + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.12 + + i=32 + + FromTransition + + + HasCause + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.13 + + i=32 + + MayBeCausedBy + + + HasEffect + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.14 + + i=32 + + MayBeEffectedBy + + + HasSubStateMachine + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.15 + + i=32 + + SubStateMachineOf + + + HasHistoricalConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.3 + + i=44 + + HistoricalConfigurationOf + + + BaseObjectType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.2 + + + + FolderType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.6 + + i=58 + + + + BaseVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.2 + + + + BaseDataVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.4 + + i=62 + + + + PropertyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.3 + + i=62 + + + + DataTypeDescriptionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.3 + + i=104 + i=105 + i=63 + + + + DataTypeVersion + + i=68 + i=80 + i=69 + + + + DictionaryFragment + + i=68 + i=80 + i=69 + + + + DataTypeDictionaryType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.4 + + i=58 + + + + DataTypeEncodingType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.7 + + i=58 + + + + NamingRuleType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.29 + + 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=78 + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.5 + + i=111 + i=58 + + + + NamingRule + + i=68 + i=78 + i=77 + + + 1 + + + + Mandatory + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.2 + + i=112 + i=77 + + + + NamingRule + + i=68 + i=78 + + + 1 + + + + Optional + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.3 + + i=113 + i=77 + + + + NamingRule + + i=68 + i=80 + + + 2 + + + + ExposesItsArray + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.1 + + i=114 + i=77 + + + + NamingRule + + i=68 + i=83 + + + 3 + + + + OptionalPlaceholder + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.4 + + i=11509 + i=77 + + + + NamingRule + + i=68 + i=11508 + + + 2 + + + + MandatoryPlaceholder + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.5 + + i=11511 + i=77 + + + + NamingRule + + i=68 + i=11510 + + + 1 + + + + Root + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.2 + + i=61 + + + + Objects + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.4 + + i=84 + i=61 + + + + Types + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.5 + + i=84 + i=61 + + + + Views + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.3 + + i=84 + i=61 + + + + ObjectTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.6 + + i=86 + i=58 + i=61 + + + + VariableTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.7 + + i=86 + i=62 + i=61 + + + + DataTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.9 + + i=86 + i=24 + i=61 + + + + ReferenceTypes + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.8 + + i=86 + i=31 + i=61 + + + + XML Schema + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.6 + + i=90 + i=75 + + + + OPC Binary + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.5 + + i=90 + i=75 + + + + HasArgumentDescription + https://reference.opcfoundation.org/v104/Core/docs/Amendment3/11.18 + + i=47 + + ArgumentDescriptionOf + + + HasOptionalInputArgumentDescription + https://reference.opcfoundation.org/v104/Core/docs/Amendment3/11.19 + + 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 + + + 1.04.7 + + + + NamespacePublicationDate + + i=68 + i=15957 + + + 2020-07-15T00:00:00Z + + + + IsNamespaceSubset + + i=68 + i=15957 + + + false + + + + StaticNodeIdTypes + + i=68 + i=15957 + + + + 0 + + + + + StaticNumericNodeIdRange + + i=68 + i=15957 + + + + 1:65535 + + + + + 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 + + + + DefaultInputValues + + i=68 + + + + DefaultInstanceBrowseName + + i=68 + + + + ImageBMP + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.20 + + i=30 + + + + ImageGIF + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.21 + + i=30 + + + + ImageJPG + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.22 + + i=30 + + + + ImagePNG + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.23 + + i=30 + + + + AudioDataType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.53 + + i=15 + + + + ServerType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.6 + + i=58 + + + + ServerRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.7 + + i=2035 + i=58 + + + + RedundancySupport + + i=68 + i=78 + i=2034 + + + + TransparentRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.8 + + i=2037 + i=2038 + i=2034 + + + + CurrentServerId + + i=68 + i=78 + i=2036 + + + + RedundantServerArray + + i=68 + i=78 + i=2036 + + + + NonTransparentRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.9 + + i=2040 + i=2034 + + + + ServerUriArray + + i=68 + i=78 + i=2039 + + + + NonTransparentNetworkRedundancyType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.10 + + i=11948 + i=2039 + + + + ServerNetworkGroups + + i=68 + i=78 + i=11945 + + + + OperationLimitsType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.1 + + i=11576 + i=12686 + i=12687 + i=11579 + i=13341 + 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 + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.12 + + i=11615 + i=11575 + + + + ExportNamespace + + i=80 + i=11595 + + + + NamespaceMetadataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.13 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.14 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.4 + + i=17615 + i=2052 + + + + StatusCodeId + + i=68 + i=80 + i=2058 + + + + AuditChannelEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.5 + + i=2745 + i=2058 + + + + SecureChannelId + + i=68 + i=78 + i=2059 + + + + AuditOpenSecureChannelEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.7 + + i=2070 + i=2058 + + + + SessionId + + i=68 + i=78 + i=2069 + + + + AuditCreateSessionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.8 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.9 + + i=2749 + i=2071 + + + + EndpointUrl + + i=68 + i=78 + i=2748 + + + + AuditActivateSessionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.11 + + i=2079 + i=2069 + + + + RequestHandle + + i=68 + i=78 + i=2078 + + + + AuditCertificateEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.12 + + i=2081 + i=2058 + + + + Certificate + + i=68 + i=78 + i=2080 + + + + AuditCertificateDataMismatchEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.13 + + i=2083 + i=2084 + i=2080 + + + + InvalidHostname + + i=68 + i=78 + i=2082 + + + + InvalidUri + + i=68 + i=78 + i=2082 + + + + AuditCertificateExpiredEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.14 + + i=2080 + + + + AuditCertificateInvalidEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.15 + + i=2080 + + + + AuditCertificateUntrustedEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.16 + + i=2080 + + + + AuditCertificateRevokedEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.17 + + i=2080 + + + + AuditCertificateMismatchEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.18 + + i=2080 + + + + AuditNodeManagementEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.19 + + i=2052 + + + + AuditAddNodesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.20 + + i=2092 + i=2090 + + + + NodesToAdd + + i=68 + i=78 + i=2091 + + + + AuditDeleteNodesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.21 + + i=2094 + i=2090 + + + + NodesToDelete + + i=68 + i=78 + i=2093 + + + + AuditAddReferencesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.22 + + i=2096 + i=2090 + + + + ReferencesToAdd + + i=68 + i=78 + i=2095 + + + + AuditDeleteReferencesEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.23 + + i=2098 + i=2090 + + + + ReferencesToDelete + + i=68 + i=78 + i=2097 + + + + AuditUpdateEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.24 + + i=2052 + + + + AuditWriteUpdateEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.25 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.26 + + i=2751 + i=2099 + + + + ParameterDataTypeId + + i=68 + i=78 + i=2104 + + + + AuditUpdateMethodEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.27 + + i=2128 + i=2129 + i=2052 + + + + MethodId + + i=68 + i=78 + i=2127 + + + + InputArguments + + i=68 + i=78 + i=2127 + + + + SystemEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.28 + + i=2041 + + + + DeviceFailureEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.29 + + i=2130 + + + + SystemStatusChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.30 + + i=11696 + i=2130 + + + + SystemState + + i=68 + i=78 + i=11446 + + + + BaseModelChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.31 + + i=2041 + + + + GeneralModelChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.32 + + i=2134 + i=2132 + + + + Changes + + i=68 + i=78 + i=2133 + + + + SemanticChangeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.33 + + i=2739 + i=2041 + + + + Changes + + i=68 + i=78 + i=2738 + + + + EventQueueOverflowEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.34 + + i=2041 + + + + ProgressEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.4.35 + + i=12502 + i=12503 + i=2041 + + + + Context + + i=68 + i=78 + i=11436 + + + + Progress + + i=68 + i=78 + i=11436 + + + + AggregateFunctionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/6.8 + + i=58 + + + + ServerVendorCapabilityType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.5 + + i=63 + + + + ServerStatusType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.8 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.12 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.13 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.14 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.15 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.16 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.17 + + i=11488 + i=11701 + i=63 + + + + OptionSetValues + + i=68 + i=78 + i=11487 + + + + BitMask + + i=68 + i=80 + i=11487 + + + + SelectionListType + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.18 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/7.19 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.10 + + i=86 + i=2041 + i=61 + + + + Server + https://reference.opcfoundation.org/v104/Core/docs/Part5/8.3.2 + + 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=11312 + i=11313 + i=11314 + i=14415 + i=2034 + i=2253 + + + + RedundancySupport + + i=68 + i=2296 + + + + CurrentServerId + + i=68 + i=2296 + + + + RedundantServerArray + + i=68 + i=2296 + + + + ServerUriArray + + i=68 + i=2296 + + + + ServerNetworkGroups + + i=68 + i=2296 + + + + Namespaces + + i=11645 + i=2253 + + + + GetMonitoredItems + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.2 + + i=12874 + i=2253 + + + + InputArguments + + i=68 + i=12873 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + SetSubscriptionDurable + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/9.4 + + 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 + + + + + + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.18 + + i=9 + + + + KeyValuePair + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.21 + + i=22 + + + + + + + + EndpointType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.22 + + i=22 + + + + + + + + + + StateMachineType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.6 + + i=2761 + i=2755 + + + + Id + + i=68 + i=78 + i=2760 + + + + FiniteTransitionVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.7 + + i=2768 + i=2762 + + + + Id + + i=68 + i=78 + i=2767 + + + + StateType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.8 + + i=2308 + i=58 + + + + StateNumber + + i=68 + i=78 + i=2307 + + + + InitialStateType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.9 + + i=2307 + + + + TransitionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.10 + + i=2312 + i=58 + + + + TransitionNumber + + i=68 + i=78 + i=2310 + + + + ChoiceStateType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.2 + + i=2307 + + + + HasGuard + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.3 + + i=47 + + GuardOf + + + GuardVariableType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.4 + + i=63 + + + + ExpressionGuardVariableType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.5 + + i=15129 + i=15113 + + + + Expression + + i=68 + i=78 + i=15128 + + + + ElseGuardVariableType + https://reference.opcfoundation.org/v104/Core/docs/Amendment2/B.6.6 + + i=15113 + + + + RationalNumberType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.20 + + i=17712 + i=17713 + i=63 + + + + Numerator + + i=63 + i=78 + i=17709 + + + + Denominator + + i=63 + i=78 + i=17709 + + + + VectorType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.21 + + i=17715 + i=63 + + + + VectorUnit + + i=68 + i=80 + i=17714 + + + + 3DVectorType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.22 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.23 + + i=18773 + i=63 + + + + LengthUnit + + i=68 + i=80 + i=18772 + + + + 3DCartesianCoordinatesType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.24 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.25 + + i=18780 + i=63 + + + + AngleUnit + + i=68 + i=80 + i=18779 + + + + 3DOrientationType + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.26 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.27 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/7.28 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.23 + + i=22 + + + + + + + + Vector + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.24 + + i=22 + + + + 3DVector + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.25 + + i=18807 + + + + + + + + + CartesianCoordinates + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.26 + + i=22 + + + + 3DCartesianCoordinates + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.27 + + i=18809 + + + + + + + + + Orientation + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.28 + + i=22 + + + + 3DOrientation + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.29 + + i=18811 + + + + + + + + + Frame + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.30 + + i=22 + + + + 3DFrame + https://reference.opcfoundation.org/v104/Core/docs/Amendment11/12.31 + + i=18813 + + + + + + + + TransitionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.16 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.17 + + 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=78 + i=11939 + + + + + + i=7616 + + + + 1 + + + + Read + + + + + + + i=7616 + + + + 2 + + + + Write + + + + + + + i=7616 + + + + 4 + + + + EraseExisting + + + + + + + i=7616 + + + + 8 + + + + Append + + + + + + + + + FileDirectoryType + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.5 + + i=16355 + i=16314 + + + + InputArguments + + i=68 + i=16354 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + MoveOrCopy + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.3.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.1 + + i=15745 + i=15746 + i=15749 + i=15751 + i=15754 + i=58 + + + + ClientProcessingTimeout + + i=68 + i=78 + i=15744 + + + + GenerateFileForRead + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.4.6 + + 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 + + + + ReadPrepare + + i=15818 + i=15825 + i=15827 + i=15835 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15817 + + + + ReadTransfer + + i=15820 + i=15827 + i=15829 + i=15837 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15819 + + + + ApplyWrite + + i=15822 + i=15831 + i=15833 + i=15839 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15821 + + + + Error + + i=15824 + i=15835 + i=15837 + i=15839 + i=15841 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15823 + + + + IdleToReadPrepare + + i=15826 + i=15815 + i=15817 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15825 + + + + ReadPrepareToReadTransfer + + i=15828 + i=15817 + i=15819 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15827 + + + + ReadTransferToIdle + + i=15830 + i=15819 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15829 + + + + IdleToApplyWrite + + i=15832 + i=15815 + i=15821 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15831 + + + + ApplyWriteToIdle + + i=15834 + i=15821 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15833 + + + + ReadPrepareToError + + i=15836 + i=15817 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15835 + + + + ReadTransferToError + + i=15838 + i=15819 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15837 + + + + ApplyWriteToError + + i=15840 + i=15821 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15839 + + + + ErrorToIdle + + i=15842 + i=15823 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15841 + + + + Reset + + i=78 + i=15803 + + + + RoleSetType + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.3.2 + + i=15633 + i=29 + + + + + + + + + + + + EnumValues + + i=68 + i=78 + 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 + + + + + + + + + IdentityMappingRuleType + https://reference.opcfoundation.org/v104/Core/docs/Part5/F.3.2 + + i=22 + + + + + + + + RoleMappingRuleChangedAuditEventType + https://reference.opcfoundation.org/v104/Core/docs/Part5/1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.2.3 + + i=17590 + i=58 + + + + <DictionaryEntryName> + + i=17589 + i=11508 + i=17589 + + + + DictionaryFolderType + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.2.4 + + i=17592 + i=17593 + i=61 + + + + <DictionaryFolderName> + + i=17591 + i=11508 + i=17591 + + + + <DictionaryEntryName> + + i=17589 + i=11508 + i=17591 + + + + Dictionaries + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.2.2 + + i=2253 + i=17591 + + + + HasDictionaryEntry + https://reference.opcfoundation.org/v104/Core/docs/Part19/6.1 + + i=32 + + DictionaryEntryOf + + + IrdiDictionaryEntryType + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.3 + + i=17589 + + + + UriDictionaryEntryType + https://reference.opcfoundation.org/v104/Core/docs/Amendment5/G.4 + + i=17589 + + + + BaseInterfaceType + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/6.9 + + i=58 + + + + InterfaceTypes + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/8.2.11 + + i=17602 + i=86 + i=61 + + + + HasInterface + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/11.20 + + i=32 + + InterfaceOf + + + HasAddIn + https://reference.opcfoundation.org/v104/Core/docs/Amendment7/11.21 + + i=47 + + AddInOf + + + CurrencyUnitType + https://reference.opcfoundation.org/v104/Core/docs/Amendment10/8.61 + + i=22 + + + + + + + + + + CurrencyUnit + + i=68 + + + + IOrderedObjectType + https://reference.opcfoundation.org/v104/Core/docs/Amendment13/6.10 + + i=23517 + i=17602 + + + + NumberInList + + i=68 + i=78 + i=23513 + + + + OrderedListType + https://reference.opcfoundation.org/v104/Core/docs/Amendment13/6.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.1 + + i=2366 + i=2367 + i=63 + + + + Definition + + i=68 + i=80 + i=2365 + + + + ValuePrecision + + i=68 + i=80 + i=2365 + + + + BaseAnalogType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.3 + + i=2369 + i=15318 + + + + EURange + + i=68 + i=78 + i=2368 + + + + AnalogUnitType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.4 + + i=17502 + i=15318 + + + + EngineeringUnits + + i=68 + i=78 + i=17497 + + + + AnalogUnitRangeType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.5 + + i=17575 + i=2368 + + + + EngineeringUnits + + i=68 + i=78 + i=17570 + + + + DiscreteItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.1 + + i=2365 + + + + TwoStateDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.2 + + i=2374 + i=2375 + i=2372 + + + + FalseState + + i=68 + i=78 + i=2373 + + + + TrueState + + i=68 + i=78 + i=2373 + + + + MultiStateDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.3 + + i=2377 + i=2372 + + + + EnumStrings + + i=68 + i=78 + i=2376 + + + + MultiStateValueDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.3/#5.3.3.4 + + i=11241 + i=11461 + i=2372 + + + + EnumValues + + i=68 + i=78 + i=11238 + + + + ValueAsText + + i=68 + i=78 + i=11238 + + + + ArrayItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.2 + + i=12037 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12029 + + + + XYArrayItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.3 + + i=12046 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12038 + + + + ImageItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.4 + + i=12055 + i=12056 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12047 + + + + YAxisDefinition + + i=68 + i=78 + i=12047 + + + + CubeItemType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.4/#5.3.4.6 + + i=12076 + i=12021 + + + + AxisDefinition + + i=68 + i=78 + i=12068 + + + + TwoStateVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.3 + + i=9003 + i=63 + + + + SourceTimestamp + + i=68 + i=78 + i=9002 + + + + HasTrueSubState + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.2 + + i=32 + + IsTrueSubStateOf + + + HasFalseSubState + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.3 + + i=32 + + IsFalseSubStateOf + + + HasAlarmSuppressionGroup + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.4 + + i=47 + + IsAlarmSuppressionGroupOf + + + AlarmGroupMember + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.4.5 + + i=35 + + MemberOfAlarmGroup + + + ConditionType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.4 + + i=2803 + i=78 + i=2782 + + + + Enable + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.5 + + i=2803 + i=78 + i=2782 + + + + AddComment + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.7 + + 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 suscription to refresh. + + + + + + + + + ConditionRefresh2 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.5.8 + + 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 suscription to refresh. + + + + + + + i=297 + + + + MonitoredItemId + + i=288 + + -1 + + + + + The identifier for the monitored item to refresh. + + + + + + + + + DialogConditionType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.6.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.6.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.7.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.7.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.7.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.5 + + i=17242 + i=80 + i=2915 + + + + Suppress + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.6 + + i=17225 + i=80 + i=2915 + + + + Unsuppress + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.7 + + i=17225 + i=80 + i=2915 + + + + RemoveFromService + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.8 + + i=17259 + i=80 + i=2915 + + + + PlaceInService + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.9 + + i=17259 + i=80 + i=2915 + + + + Reset + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.4 + + i=15013 + i=80 + i=2915 + + + + AlarmGroupType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.1 + + 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 + + + + Timed Shelved + + i=6100 + i=2935 + i=2940 + i=2942 + i=2945 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2932 + + + + One Shot Shelved + + i=6101 + i=2936 + i=2942 + i=2943 + i=2945 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2933 + + + + UnshelvedToTimedShelved + + i=11322 + i=2930 + i=2932 + i=2915 + i=2949 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2935 + + + + UnshelvedToOneShotShelved + + i=11323 + i=2930 + i=2933 + i=2915 + i=2948 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2936 + + + + TimedShelvedToUnshelved + + i=11324 + i=2932 + i=2930 + i=2915 + i=2947 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2940 + + + + TimedShelvedToOneShotShelved + + i=11325 + i=2932 + i=2933 + i=2915 + i=2948 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2942 + + + + OneShotShelvedToUnshelved + + i=11326 + i=2933 + i=2930 + i=2915 + i=2947 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2943 + + + + OneShotShelvedToTimedShelved + + i=11327 + i=2933 + i=2932 + i=2915 + i=2949 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2945 + + + + TimedShelve + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.2 + + i=2940 + i=2943 + i=11093 + i=78 + i=2929 + + + + OneShotShelve + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.10/#5.8.10.4 + + i=2936 + i=2942 + i=11093 + i=78 + i=2929 + + + + LimitAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.12/#5.8.12.2 + + 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 + + + + High + + i=9332 + i=9339 + i=9340 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9331 + + + + Low + + i=9334 + i=9337 + i=9338 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9333 + + + + LowLow + + i=9336 + i=9337 + i=9338 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9335 + + + + LowLowToLow + + i=11340 + i=9335 + i=9333 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9337 + + + + LowToLowLow + + i=11341 + i=9333 + i=9335 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9338 + + + + HighHighToHigh + + i=11342 + i=9329 + i=9331 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9339 + + + + HighToHighHigh + + i=11343 + i=9331 + i=9329 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9340 + + + + ExclusiveLimitAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.12/#5.8.12.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.13 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.14/#5.8.14.2 + + i=9906 + + + + ExclusiveLevelAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.14/#5.8.14.3 + + i=9341 + + + + NonExclusiveDeviationAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.15/#5.8.15.2 + + i=10522 + i=16776 + i=9906 + + + + SetpointNode + + i=68 + i=78 + i=10368 + + + + BaseSetpointNode + + i=68 + i=80 + i=10368 + + + + NonExclusiveRateOfChangeAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.16/#5.8.16.2 + + i=16858 + i=9906 + + + + EngineeringUnits + + i=68 + i=80 + i=10214 + + + + ExclusiveDeviationAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.15/#5.8.15.3 + + i=9905 + i=16817 + i=9341 + + + + SetpointNode + + i=68 + i=78 + i=9764 + + + + BaseSetpointNode + + i=68 + i=80 + i=9764 + + + + ExclusiveRateOfChangeAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.16/#5.8.16.3 + + i=16899 + i=9341 + + + + EngineeringUnits + + i=68 + i=80 + i=9623 + + + + DiscreteAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.1 + + i=2915 + + + + OffNormalAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.2 + + i=11158 + i=10523 + + + + NormalState + + i=68 + i=78 + i=10637 + + + + SystemOffNormalAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.3 + + i=10637 + + + + TripAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.4 + + i=10637 + + + + InstrumentDiagnosticAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.5 + + i=10637 + + + + SystemDiagnosticAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.6 + + i=10637 + + + + CertificateExpirationAlarmType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.17/#5.8.17.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.8.18 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.2 + + i=58 + + + + ProcessConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.3 + + i=11163 + + + + MaintenanceConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.4 + + i=11163 + + + + SystemConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.5 + + i=11163 + + + + SafetyConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.6 + + i=11163 + + + + HighlyManagedAlarmConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.7 + + i=11163 + + + + TrainingConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.8 + + i=11163 + + + + StatisticalConditionClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.9 + + i=11163 + + + + TestingConditionSubClassType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.9.10 + + i=11163 + + + + AuditConditionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.2 + + i=2127 + + + + AuditConditionEnableEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.3 + + i=2790 + + + + AuditConditionCommentEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.4 + + i=17222 + i=11851 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=2829 + + + + Comment + + i=68 + i=78 + i=2829 + + + + AuditConditionRespondEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.5 + + i=11852 + i=2790 + + + + SelectedResponse + + i=68 + i=78 + i=8927 + + + + AuditConditionAcknowledgeEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.6 + + i=17223 + i=11853 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=8944 + + + + Comment + + i=68 + i=78 + i=8944 + + + + AuditConditionConfirmEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.7 + + i=17224 + i=11854 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=8961 + + + + Comment + + i=68 + i=78 + i=8961 + + + + AuditConditionShelvingEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.8 + + i=11855 + i=2790 + + + + ShelvingTime + + i=68 + i=80 + i=11093 + + + + AuditConditionSuppressionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.9 + + i=2790 + + + + AuditConditionSilenceEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.10 + + i=2790 + + + + AuditConditionResetEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.11 + + i=2790 + + + + AuditConditionOutOfServiceEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.10.12 + + i=2790 + + + + RefreshStartEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.11.2 + + i=2130 + + + + RefreshEndEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.11.3 + + i=2130 + + + + RefreshRequiredEventType + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.11.4 + + i=2130 + + + + HasCondition + https://reference.opcfoundation.org/v104/Core/docs/Part9/5.12 + + i=32 + + IsConditionOf + + + HasEffectDisable + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.2 + + i=54 + + MayBeDisabledBy + + + HasEffectEnable + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.3 + + i=54 + + MayBeEnabledBy + + + HasEffectSuppressed + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.4 + + i=54 + + MayBeSuppressedBy + + + HasEffectUnsuppressed + https://reference.opcfoundation.org/v104/Core/docs/Part9/7.5 + + i=54 + + MayBeUnsuppressedBy + + + AlarmMetricsType + https://reference.opcfoundation.org/v104/Core/docs/Part9/8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part9/8.4 + + i=2127 + i=78 + i=17279 + + + + AlarmRateVariableType + https://reference.opcfoundation.org/v104/Core/docs/Part9/8.3 + + i=17278 + i=63 + + + + Rate + + i=68 + i=78 + i=17277 + + + + ProgramStateMachineType + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.5/#5.2.5.2 + + i=2379 + i=2311 + + + + IntermediateResult + + i=63 + i=78 + i=2378 + + + + AuditProgramTransitionEventType + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.4.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.5 + + i=3027 + i=2104 + + + + UpdatedNode + + i=68 + i=78 + i=3012 + + + + AuditHistoryRawModifyDeleteEventType + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.7 + + i=3020 + i=3021 + i=3012 + + + + ReqTimes + + i=68 + i=78 + i=3019 + + + + OldValues + + i=68 + i=78 + i=3019 + + + + AuditHistoryEventDeleteEventType + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.6.8 + + 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=78 + 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=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 + + + + 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 + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.2 + + i=12651 + i=12642 + + + + InputArguments + + i=68 + i=12650 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.4 + + i=12656 + i=12642 + + + + InputArguments + + i=68 + i=12655 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part5/C.2.6 + + 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=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 + + + + 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 + + + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.1 + + i=22 + + + + + + + + + + DataTypeDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.2 + + i=22 + + + + + + + + StructureDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.3 + + i=14525 + + + + + + + EnumDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.4 + + i=14525 + + + + + + + + SimpleTypeDescription + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.1.5 + + i=14525 + + + + + + + + UABinaryFileDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.2 + + i=15534 + + + + + + + + + PubSubState + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.1 + + i=14648 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=14647 + + + + + + + Disabled + + + + + Paused + + + + + Operational + + + + + Error + + + + + + DataSetMetaDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.2 + + i=15534 + + + + + + + + + + + FieldMetaData + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.3 + + i=22 + + + + + + + + + + + + + + + + DataSetFieldFlags + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.4 + + i=15577 + i=5 + + + + + + + OptionSetValues + + i=68 + i=78 + i=15904 + + + + + + + PromotedField + + + + + + ConfigurationVersionDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.1.5 + + i=22 + + + + + + + + PublishedDataSetDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.4 + + i=22 + + + + + + + + + + + PublishedDataSetSourceDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.5 + + i=22 + + + + PublishedVariableDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.6.1 + + i=22 + + + + + + + + + + + + + + PublishedDataItemsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.6.2 + + i=15580 + + + + + + + PublishedEventsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.2/#6.2.2.7.4 + + i=15580 + + + + + + + + + DataSetFieldContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.2 + + i=15584 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15583 + + + + + + + StatusCode + + + + + SourceTimestamp + + + + + ServerTimestamp + + + + + SourcePicoSeconds + + + + + ServerPicoSeconds + + + + + RawData + + + + + + DataSetWriterDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.5.1 + + i=22 + + + + + + + + + + + + + + + DataSetWriterTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.5.2 + + i=22 + + + + DataSetWriterMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.3/#6.2.3.5.3 + + i=22 + + + + PubSubGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.4/#6.2.4.7 + + i=22 + + + + + + + + + + + + + WriterGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.5/#6.2.5.6.1 + + i=15609 + + + + + + + + + + + + + + + WriterGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.5/#6.2.5.6.2 + + i=22 + + + + WriterGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.5/#6.2.5.6.3 + + i=22 + + + + PubSubConnectionDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.1 + + i=22 + + + + + + + + + + + + + + + ConnectionTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.2 + + i=22 + + + + NetworkAddressDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.3 + + i=22 + + + + + + + NetworkAddressUrlDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.6/#6.2.6.5.4 + + i=15502 + + + + + + + ReaderGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.7/#6.2.7.2.1 + + i=15609 + + + + + + + + + ReaderGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.7/#6.2.7.2.2 + + i=22 + + + + ReaderGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.7/#6.2.7.2.3 + + i=22 + + + + DataSetReaderDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.8/#6.2.8.11.1 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + DataSetReaderTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.8/#6.2.8.11.2 + + i=22 + + + + DataSetReaderMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.8/#6.2.8.11.3 + + i=22 + + + + SubscribedDataSetDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.1 + + i=22 + + + + TargetVariablesDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.2.2 + + i=15630 + + + + + + + FieldTargetDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.2.3 + + i=22 + + + + + + + + + + + + + OverrideValueHandling + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.2.4 + + i=15875 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=15874 + + + + + + + Disabled + + + + + LastUsableValue + + + + + OverrideValue + + + + + + SubscribedDataSetMirrorDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.9/#6.2.9.3.3 + + i=15630 + + + + + + + + PubSubConfigurationDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.2.11 + + i=22 + + + + + + + + + DataSetOrderingType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.1.3 + + i=15641 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=20408 + + + + + + + Undefined + + + + + AscendingWriterId + + + + + AscendingWriterIdSingle + + + + + + UadpNetworkMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.1.4 + + i=15643 + i=7 + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15642 + + + + + + + PublisherId + + + + + GroupHeader + + + + + WriterGroupId + + + + + GroupVersion + + + + + NetworkMessageNumber + + + + + SequenceNumber + + + + + PayloadHeader + + + + + Timestamp + + + + + PicoSeconds + + + + + DataSetClassId + + + + + PromotedFields + + + + + + UadpWriterGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.1.7 + + i=15616 + + + + + + + + + + + UadpDataSetMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.2.2 + + i=15647 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15646 + + + + + + + Timestamp + + + + + PicoSeconds + + + + + Status + + + + + MajorVersion + + + + + MinorVersion + + + + + SequenceNumber + + + + + + UadpDataSetWriterMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.2.6 + + i=15605 + + + + + + + + + + UadpDataSetReaderMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.1/#6.3.1.3.10 + + i=15629 + + + + + + + + + + + + + + + JsonNetworkMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.1.1 + + i=15655 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15654 + + + + + + + NetworkMessageHeader + + + + + DataSetMessageHeader + + + + + SingleDataSetMessage + + + + + PublisherId + + + + + DataSetClassId + + + + + ReplyTo + + + + + + JsonWriterGroupMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.1.2 + + i=15616 + + + + + + + JsonDataSetMessageContentMask + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.2.1 + + i=15659 + i=7 + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15658 + + + + + + + DataSetWriterId + + + + + MetaDataVersion + + + + + SequenceNumber + + + + + Timestamp + + + + + Status + + + + + + JsonDataSetWriterMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.2.2 + + i=15605 + + + + + + + JsonDataSetReaderMessageDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.3.2/#6.3.2.3.3 + + i=15629 + + + + + + + + DatagramConnectionTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.1/#6.4.1.1.2 + + i=15618 + + + + + + + DatagramWriterGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.1/#6.4.1.2.3 + + i=15611 + + + + + + + + BrokerConnectionTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.1.3 + + i=15618 + + + + + + + + BrokerTransportQualityOfService + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.2.5 + + i=15009 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=15008 + + + + + + + NotSpecified + + + + + BestEffort + + + + + AtLeastOnce + + + + + AtMostOnce + + + + + ExactlyOnce + + + + + + BrokerWriterGroupTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.2.6 + + i=15611 + + + + + + + + + + BrokerDataSetWriterTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.3.7 + + i=15598 + + + + + + + + + + + + BrokerDataSetReaderTransportDataType + https://reference.opcfoundation.org/v104/Core/docs/Part14/6.4.2/#6.4.2.4.6 + + i=15628 + + + + + + + + + + + PubSubKeyServiceType + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.6 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.3/#9.1.3.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.10/#9.1.10.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.3/#9.1.3.6 + + i=47 + + PubSubConnectionOf + + + PublishedDataSetType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.2.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.2.5 + + i=33 + + WriterToDataSet + + + PublishedDataItemsType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.4.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.4/#9.1.4.5.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.5/#9.1.5.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.5/#9.1.5.6 + + i=58 + + + + PubSubGroupType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.6 + + i=47 + + IsWriterInGroup + + + HasWriterGroup + + i=47 + + IsWriterGroupOf + + + WriterGroupTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.7 + + i=58 + + + + WriterGroupMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.8 + + i=58 + + + + ReaderGroupType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.12 + + i=47 + + IsReaderInGroup + + + HasReaderGroup + + i=47 + + IsReaderGroupOf + + + ReaderGroupTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.13 + + i=58 + + + + ReaderGroupMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.6/#9.1.6.14 + + i=58 + + + + DataSetWriterType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.7/#9.1.7.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.7/#9.1.7.3 + + i=58 + + + + DataSetWriterMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.7/#9.1.7.4 + + i=58 + + + + DataSetReaderType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.8/#9.1.8.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.8/#9.1.8.3 + + i=58 + + + + DataSetReaderMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.8/#9.1.8.4 + + i=58 + + + + SubscribedDataSetType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.9/#9.1.9.1 + + i=58 + + + + TargetVariablesType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.9/#9.1.9.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.9/#9.1.9.5 + + i=15108 + + + + PubSubStatusType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.10/#9.1.10.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.4 + + i=19724 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=19723 + + + + + + + Basic + + + + + Advanced + + + + + Info + + + + + Log + + + + + Debug + + + + + + PubSubDiagnosticsCounterType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.5 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.6 + + i=19731 + i=29 + + + + + + + + EnumStrings + + i=68 + i=78 + i=19730 + + + + + + + Information + + + + + Error + + + + + + PubSubDiagnosticsRootType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.7 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.8 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.9 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.10 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.11 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.11/#9.1.11.12 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.12/#9.1.12.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.12/#9.1.12.2 + + i=15561 + i=15562 + i=15535 + + + + Actual + + i=68 + i=78 + i=15548 + + + + Maximum + + i=68 + i=78 + i=15548 + + + + PubSubCommunicationFailureEventType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.12/#9.1.12.3 + + i=15576 + i=15535 + + + + Error + + i=68 + i=78 + i=15563 + + + + UadpWriterGroupMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.1/#9.2.1.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.1/#9.2.1.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.1/#9.2.1.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.2/#9.2.2.1 + + i=21127 + i=17998 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21126 + + + + JsonDataSetWriterMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.2/#9.2.2.2 + + i=21129 + i=21096 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21128 + + + + JsonDataSetReaderMessageType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.2.2/#9.2.2.3 + + i=21131 + i=21132 + i=21104 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21130 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21130 + + + + DatagramConnectionTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.1/#9.3.1.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.1/#9.3.1.2 + + i=21134 + i=21135 + i=17997 + + + + MessageRepeatCount + + i=68 + i=80 + i=21133 + + + + MessageRepeatDelay + + i=68 + i=80 + i=21133 + + + + BrokerConnectionTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.1 + + i=15156 + i=15178 + i=17721 + + + + ResourceUri + + i=68 + i=78 + i=15155 + + + + AuthenticationProfileUri + + i=68 + i=78 + i=15155 + + + + BrokerWriterGroupTransportType + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.3.2/#9.3.2.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.3.1 + + i=21146 + i=58 + + + + NetworkInterface + + i=17582 + i=16309 + i=78 + i=21145 + + + + Selections + + i=68 + i=78 + i=21146 + + + + NetworkAddressUrlType + https://reference.opcfoundation.org/v104/Core/docs/Part14/A.3.2 + + i=21149 + i=21145 + + + + Url + + i=63 + i=78 + i=21147 + + + + AliasNameType + https://reference.opcfoundation.org/v104/Core/docs/Part17/6.2 + + i=58 + + + + AliasNameCategoryType + https://reference.opcfoundation.org/v104/Core/docs/Part17/6.3.1 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/6.3.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/7.2 + + i=22 + + + + + + + + AliasFor + https://reference.opcfoundation.org/v104/Core/docs/Part17/8.2 + + i=32 + + HasAlias + + + Aliases + https://reference.opcfoundation.org/v104/Core/docs/Part17/9.2 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/9.3 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part17/9.4 + + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part19/7.1 + + i=19082 + i=19083 + i=11238 + + + + EnumDictionaryEntries + + i=68 + i=78 + i=19077 + + + + ValueAsDictionaryEntries + + i=68 + i=80 + i=19077 + + + + MultiStateDictionaryEntryDiscreteType + https://reference.opcfoundation.org/v104/Core/docs/Part19/7.2 + + i=19090 + i=19077 + + + + ValueAsDictionaryEntries + + i=68 + i=78 + i=19084 + + + + IdType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.2.3 + + i=7591 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=256 + + + + + + + Numeric + + + + + String + + + + + Guid + + + + + Opaque + + + + + + NodeClass + https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.3 + + i=11878 + i=29 + + + + + + + + + + + + + + + EnumValues + + i=68 + i=78 + i=257 + + + + + + i=7616 + + + + 0 + + + + Unspecified + + + + + + + i=7616 + + + + 1 + + + + Object + + + + + + + i=7616 + + + + 2 + + + + Variable + + + + + + + i=7616 + + + + 4 + + + + Method + + + + + + + i=7616 + + + + 8 + + + + ObjectType + + + + + + + i=7616 + + + + 16 + + + + VariableType + + + + + + + i=7616 + + + + 32 + + + + ReferenceType + + + + + + + i=7616 + + + + 64 + + + + DataType + + + + + + + i=7616 + + + + 128 + + + + View + + + + + + + + + PermissionType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.55 + + i=15030 + i=7 + + + + + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=94 + + + + + + + Browse + + + + + ReadRolePermissions + + + + + WriteAttribute + + + + + WriteRolePermissions + + + + + WriteHistorizing + + + + + Read + + + + + Write + + + + + ReadHistory + + + + + InsertHistory + + + + + ModifyHistory + + + + + DeleteHistory + + + + + ReceiveEvents + + + + + Call + + + + + AddReference + + + + + RemoveReference + + + + + DeleteNode + + + + + AddNode + + + + + + AccessLevelType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.57 + + i=15032 + i=3 + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15031 + + + + + + + CurrentRead + + + + + CurrentWrite + + + + + HistoryRead + + + + + HistoryWrite + + + + + SemanticChange + + + + + StatusWrite + + + + + TimestampWrite + + + + + + AccessLevelExType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.58 + + i=15407 + i=7 + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15406 + + + + + + + CurrentRead + + + + + CurrentWrite + + + + + HistoryRead + + + + + HistoryWrite + + + + + SemanticChange + + + + + StatusWrite + + + + + TimestampWrite + + + + + Reserved + + + + + NonatomicRead + + + + + NonatomicWrite + + + + + WriteFullArrayOnly + + + + + + EventNotifierType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.59 + + i=15034 + i=3 + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=15033 + + + + + + + SubscribeToEvents + + + + + Reserved + + + + + HistoryRead + + + + + HistoryWrite + + + + + + AccessRestrictionType + + i=15035 + i=7 + + + + + + + + + OptionSetValues + + i=68 + i=78 + i=95 + + + + + + + SigningRequired + + + + + EncryptionRequired + + + + + SessionRequired + + + + + + RolePermissionType + https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.9 + + i=22 + + + + + + + + DataTypeDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=22 + + + + StructureType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.49 + + i=14528 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=98 + + + + + + + Structure + + + + + StructureWithOptionalFields + + + + + Union + + + + + + StructureField + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.51 + + i=22 + + + + + + + + + + + + + StructureDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.49 + + i=97 + + + + + + + + + + EnumDefinition + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.50 + + i=97 + + + + + + + Argument + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.6 + + i=22 + + + + + + + + + + + EnumValueType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2 + + i=22 + + + + + + + + + EnumField + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.52 + + i=7594 + + + + + + + OptionSet + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.41 + + i=22 + + + + + + + + Union + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.42 + + i=22 + + + + NormalizedString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.46 + + i=12 + + + + DecimalString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.44 + + i=12 + + + + DurationString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.45 + + i=12 + + + + TimeString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.47 + + i=12 + + + + DateString + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.43 + + i=12 + + + + Duration + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.13 + + i=11 + + + + UtcTime + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.38 + + i=13 + + + + LocaleId + https://reference.opcfoundation.org/v104/Core/docs/Part9/A.1.3 + + i=12 + + + + TimeZoneDataType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.28 + + i=22 + + + + + + + + Index + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.13 + + i=7 + + + + IntegerId + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.14 + + i=7 + + + + ApplicationType + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.1 + + i=7597 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=307 + + + + + + + Server + + + + + Client + + + + + ClientAndServer + + + + + DiscoveryServer + + + + + + ApplicationDescription + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.1 + + i=22 + + + + + + + + + + + + + VersionTime + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.38 + + i=7 + + + + ServerOnNetwork + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.4.3/#5.4.3.2 + + i=22 + + + + + + + + + + ApplicationInstanceCertificate + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.2 + + i=15 + + + + MessageSecurityMode + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.15 + + i=7595 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=302 + + + + + + + Invalid + + + + + None + + + + + Sign + + + + + SignAndEncrypt + + + + + + UserTokenType + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.37 + + i=7596 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=303 + + + + + + + Anonymous + + + + + UserName + + + + + Certificate + + + + + IssuedToken + + + + + + UserTokenPolicy + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.37 + + i=22 + + + + + + + + + + + EndpointDescription + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.10 + + i=22 + + + + + + + + + + + + + + RegisteredServer + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.27 + + i=22 + + + + + + + + + + + + + + DiscoveryConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.9.1 + + i=22 + + + + MdnsDiscoveryConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.9.2 + + i=12890 + + + + + + + + SecurityTokenRequestType + + i=7598 + i=29 + + + + + + + + EnumStrings + + i=68 + i=78 + i=315 + + + + + + + Issue + + + + + Renew + + + + + + SignedSoftwareCertificate + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.33 + + i=22 + + + + + + + + SessionAuthenticationToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.31 + + i=17 + + + + UserIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.3 + + i=22 + + + + + + + AnonymousIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.3 + + i=316 + + + + UserNameIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.4 + + i=316 + + + + + + + + + X509IdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.5 + + i=316 + + + + + + + IssuedIdentityToken + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.36.6 + + i=316 + + + + + + + + NodeAttributesMask + + i=11881 + i=29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EnumValues + + i=68 + i=78 + i=348 + + + + + + i=7616 + + + + 0 + + + + None + + + + + + + i=7616 + + + + 1 + + + + AccessLevel + + + + + + + i=7616 + + + + 2 + + + + ArrayDimensions + + + + + + + i=7616 + + + + 4 + + + + BrowseName + + + + + + + i=7616 + + + + 8 + + + + ContainsNoLoops + + + + + + + i=7616 + + + + 16 + + + + DataType + + + + + + + i=7616 + + + + 32 + + + + Description + + + + + + + i=7616 + + + + 64 + + + + DisplayName + + + + + + + i=7616 + + + + 128 + + + + EventNotifier + + + + + + + i=7616 + + + + 256 + + + + Executable + + + + + + + i=7616 + + + + 512 + + + + Historizing + + + + + + + i=7616 + + + + 1024 + + + + InverseName + + + + + + + i=7616 + + + + 2048 + + + + IsAbstract + + + + + + + i=7616 + + + + 4096 + + + + MinimumSamplingInterval + + + + + + + i=7616 + + + + 8192 + + + + NodeClass + + + + + + + i=7616 + + + + 16384 + + + + NodeId + + + + + + + i=7616 + + + + 32768 + + + + Symmetric + + + + + + + i=7616 + + + + 65536 + + + + UserAccessLevel + + + + + + + i=7616 + + + + 131072 + + + + UserExecutable + + + + + + + i=7616 + + + + 262144 + + + + UserWriteMask + + + + + + + i=7616 + + + + 524288 + + + + ValueRank + + + + + + + i=7616 + + + + 1048576 + + + + WriteMask + + + + + + + i=7616 + + + + 2097152 + + + + Value + + + + + + + i=7616 + + + + 4194304 + + + + DataTypeDefinition + + + + + + + i=7616 + + + + 8388608 + + + + RolePermissions + + + + + + + i=7616 + + + + 16777216 + + + + AccessRestrictions + + + + + + + i=7616 + + + + 33554431 + + + + All + + + + + + + i=7616 + + + + 26501220 + + + + BaseNode + + + + + + + i=7616 + + + + 26501348 + + + + Object + + + + + + + i=7616 + + + + 26503268 + + + + ObjectType + + + + + + + i=7616 + + + + 26571383 + + + + Variable + + + + + + + i=7616 + + + + 28600438 + + + + VariableType + + + + + + + i=7616 + + + + 26632548 + + + + Method + + + + + + + i=7616 + + + + 26537060 + + + + ReferenceType + + + + + + + i=7616 + + + + 26501356 + + + + View + + + + + + + + + AddNodesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.2/#5.7.2.2 + + i=22 + + + + + + + + + + + + + AddReferencesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.3/#5.7.3.2 + + i=22 + + + + + + + + + + + + DeleteNodesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.4/#5.7.4.2 + + i=22 + + + + + + + + DeleteReferencesItem + https://reference.opcfoundation.org/v104/Core/docs/Part4/5.7.5/#5.7.5.1 + + i=22 + + + + + + + + + + + AttributeWriteMask + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.60 + + i=15036 + i=7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=78 + 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 + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.6 + + i=15 + + + + RelativePathElement + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.26 + + i=22 + + + + + + + + + + RelativePath + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.26 + + i=22 + + + + + + + Counter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.5 + + i=7 + + + + NumericRange + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.22 + + i=12 + + + + Time + + i=12 + + + + Date + + i=13 + + + + EndpointConfiguration + + i=22 + + + + + + + + + + + + + + + FilterOperator + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.3 + + i=7605 + i=29 + + + + + + + + + + + + + + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=576 + + + + + + + Equals + + + + + IsNull + + + + + GreaterThan + + + + + LessThan + + + + + GreaterThanOrEqual + + + + + LessThanOrEqual + + + + + Like + + + + + Not + + + + + Between + + + + + InList + + + + + And + + + + + Or + + + + + Cast + + + + + InView + + + + + OfType + + + + + RelatedTo + + + + + BitwiseAnd + + + + + BitwiseOr + + + + + + ContentFilterElement + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.1 + + i=22 + + + + + + + + ContentFilter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.1 + + i=22 + + + + + + + FilterOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4 + + i=22 + + + + ElementOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.2 + + i=589 + + + + + + + LiteralOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.3 + + i=589 + + + + + + + AttributeOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.4 + + i=589 + + + + + + + + + + + SimpleAttributeOperand + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.4.4/#7.4.4.5 + + i=589 + + + + + + + + + + HistoryEvent + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.5.4 + + i=22 + + + + + + + HistoryUpdateType + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.6 + + i=11884 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=78 + i=11234 + + + + + + i=7616 + + + + 1 + + + + Insert + + + + + + + i=7616 + + + + 2 + + + + Replace + + + + + + + i=7616 + + + + 3 + + + + Update + + + + + + + i=7616 + + + + 4 + + + + Delete + + + + + + + + + PerformUpdateType + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.7 + + i=11885 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=78 + i=11293 + + + + + + i=7616 + + + + 1 + + + + Insert + + + + + + + i=7616 + + + + 2 + + + + Replace + + + + + + + i=7616 + + + + 3 + + + + Update + + + + + + + i=7616 + + + + 4 + + + + Remove + + + + + + + + + MonitoringFilter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.17.1 + + i=22 + + + + EventFilter + https://reference.opcfoundation.org/v104/Core/docs/Part4/7.17.3 + + i=719 + + + + + + + + AggregateConfiguration + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.4.4/#6.4.4.1 + + i=22 + + + + + + + + + + + HistoryEventFieldList + + i=22 + + + + + + + BuildInfo + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.4 + + i=22 + + + + + + + + + + + + RedundancySupport + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.5 + + i=7611 + i=29 + + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=851 + + + + + + + None + + + + + Cold + + + + + Warm + + + + + Hot + + + + + Transparent + + + + + HotAndMirrored + + + + + + ServerState + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.6 + + i=7612 + i=29 + + + + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=852 + + + + + + + Running + + + + + Failed + + + + + NoConfiguration + + + + + Suspended + + + + + Shutdown + + + + + Test + + + + + CommunicationFault + + + + + Unknown + + + + + + RedundantServerDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.7 + + i=22 + + + + + + + + + EndpointUrlListDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.20 + + i=22 + + + + + + + NetworkGroupDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.19 + + i=22 + + + + + + + + SamplingIntervalDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.8 + + i=22 + + + + + + + + + + ServerDiagnosticsSummaryDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.9 + + i=22 + + + + + + + + + + + + + + + + + + ServerStatusDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.10 + + i=22 + + + + + + + + + + + + SessionDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.11 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SessionSecurityDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.12 + + i=22 + + + + + + + + + + + + + + + ServiceCounterDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.13 + + i=22 + + + + + + + + StatusResult + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.14 + + i=22 + + + + + + + + SubscriptionDiagnosticsDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.15 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ModelChangeStructureDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.16 + + i=22 + + + + + + + + + SemanticChangeStructureDataType + https://reference.opcfoundation.org/v104/Core/docs/Part5/12.17 + + i=22 + + + + + + + + Range + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.2 + + i=22 + + + + + + + + EUInformation + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.3 + + i=22 + + + + + + + + + + AxisScaleEnumeration + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.7 + + i=12078 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=78 + i=12077 + + + + + + + Linear + + + + + Log + + + + + Ln + + + + + + ComplexNumberType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.4 + + i=22 + + + + + + + + DoubleComplexNumberType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.5 + + i=22 + + + + + + + + AxisInformation + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.6 + + i=22 + + + + + + + + + + + XVType + https://reference.opcfoundation.org/v104/Core/docs/Part8/5.6.8 + + i=22 + + + + + + + + ProgramDiagnosticDataType + + i=22 + + + + + + + + + + + + + + + + ProgramDiagnostic2DataType + https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.8 + + i=22 + + + + + + + + + + + + + + + + + + Annotation + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.5 + + i=22 + + + + + + + + + ExceptionDeviationFormat + https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.2 + + i=7614 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=78 + i=890 + + + + + + + AbsoluteValue + + + + + PercentOfValue + + + + + PercentOfRange + + + + + PercentOfEURange + + + + + Unknown + + + + + + Default Binary + + i=14533 + i=14873 + 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=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=12756 + i=12770 + 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=15396 + i=15398 + i=76 + + + + Default Binary + + i=891 + i=8244 + i=76 + + + + Opc.Ua + + i=7619 + i=15037 + i=14873 + 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=16131 + i=18178 + i=18181 + i=18184 + i=18187 + i=7650 + i=7656 + i=14870 + i=12767 + i=12770 + 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=15398 + 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 +ICAgDQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlQk1QIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW1hZ2VHSUYiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJJbWFnZUpQRyI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlUE5HIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iQXVkaW9EYXRhVHlwZSI+DQog +IDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkJpdEZpZWxkTWFz +a0RhdGFUeXBlIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IktleVZhbHVlUGFpciIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJLZXkiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVuZHBvaW50 +VHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFByb2ZpbGVVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IlJhdGlvbmFsTnVtYmVyIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVyYXRvciIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbm9taW5hdG9yIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJWZWN0b3IiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRFZl +Y3RvciIgQmFzZVR5cGU9InRuczpWZWN0b3IiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJZIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IloiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgQmFzZVR5cGU9InRuczpDYXJ0ZXNpYW5Db29y +ZGluYXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJYIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iWiIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3JpZW50YXRpb24i +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRE9yaWVudGF0aW9uIiBCYXNlVHlw +ZT0idG5zOk9yaWVudGF0aW9uIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkEiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQiIgVHlwZU5hbWU9Im9wYzpEb3Vi +bGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJG +cmFtZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVGhyZWVERnJhbWUiIEJhc2VUeXBl +PSJ0bnM6RnJhbWUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FydGVzaWFuQ29vcmRpbmF0ZXMi +IFR5cGVOYW1lPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJPcmllbnRhdGlvbiIgVHlwZU5hbWU9InRuczpUaHJlZURPcmllbnRhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJPcGVuRmlsZU1vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlJlYWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IldyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJF +cmFzZUV4aXN0aW5nIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJBcHBlbmQiIFZhbHVlPSI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBlIiBMZW5ndGhJbkJpdHM9 +IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyTmFtZSIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVGh1bWJwcmludCIgVmFsdWU9IjIi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUm9sZSIgVmFsdWU9IjMiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBJZCIgVmFsdWU9IjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQW5vbnltb3VzIiBWYWx1ZT0iNSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBdXRoZW50aWNhdGVkVXNlciIgVmFsdWU9IjYiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWFUeXBlIiBUeXBlTmFtZT0idG5zOklkZW50aXR5 +Q3JpdGVyaWFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWEiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpY0NvZGUiIFR5cGVOYW1lPSJvcGM6 +SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeHBvbmVudCIgVHlwZU5hbWU9Im9wYzpT +Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFscGhhYmV0aWNDb2RlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbmN5IiBUeXBlTmFtZT0i +dWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpF +bnVtZXJhdGVkVHlwZSBOYW1lPSJUcnVzdExpc3RNYXNrcyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENlcnRpZmljYXRlcyIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENybHMiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgVmFs +dWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSXNzdWVyQ3JscyIgVmFs +dWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMTUi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iVHJ1c3RMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkTGlzdHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVz +IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENlcnRp +ZmljYXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZUcnVzdGVkQ3JscyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRydXN0ZWRDcmxzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENybHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZklzc3VlckNybHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc3N1ZXJDcmxzIiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ3JscyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWNpbWFsRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2NhbGUiIFR5cGVOYW1lPSJvcGM6SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1l +c3BhY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFt +ZXNwYWNlcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlw +ZXMiIFR5cGVOYW1lPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +U3RydWN0dXJlRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRh +VHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVt +RGF0YVR5cGVzIiBUeXBlTmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbnVtRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFU +eXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBs +ZURhdGFUeXBlcyIgVHlwZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZp +ZWxkPSJOb09mU2ltcGxlRGF0YVR5cGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN0cnVjdHVyZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVk +TmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iRW51bURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3Jp +cHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGVm +aW5pdGlvbiIgVHlwZU5hbWU9InRuczpFbnVtRGVmaW5pdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkJ1aWx0SW5UeXBlIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2ltcGxlVHlwZURlc2Ny +aXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBl +TmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsdEluVHlwZSIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlVBQmluYXJ5RmlsZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlU2No +ZW1hSGVhZGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0 +bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3RydWN0dXJlRGF0YVR5 +cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlwZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0YVR5cGVzIiBUeXBl +TmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURhdGFUeXBlcyIgVHlw +ZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2ltcGxl +RGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2NoZW1hTG9jYXRpb24iIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpbGVIZWFkZXIi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWxlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWxlSGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQm9keSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +UHViU3ViU3RhdGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQYXVzZWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik9wZXJhdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJFcnJvciIgVmFsdWU9IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldE1ldGFEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpE +YXRhVHlwZVNjaGVtYUhlYWRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmFtZXNwYWNl +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFj +ZXMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZk5hbWVzcGFjZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RydWN0dXJlRGF0YVR5cGVzIiBU +eXBlTmFtZT0idG5zOlN0cnVjdHVyZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlN0cnVj +dHVyZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURhdGFU +eXBlcyIgVHlwZU5hbWU9InRuczpFbnVtRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW51 +bURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTaW1wbGVEYXRhVHlwZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaW1wbGVEYXRh +VHlwZXMiIFR5cGVOYW1lPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0i +Tm9PZlNpbXBsZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZp +ZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxk +cyIgVHlwZU5hbWU9InRuczpGaWVsZE1ldGFEYXRhIiBMZW5ndGhGaWVsZD0iTm9PZkZpZWxkcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1 +aWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbiIgVHlwZU5h +bWU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkTWV0YURhdGEiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlv +biIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJG +aWVsZEZsYWdzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRGaWVsZEZsYWdzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnVpbHRJblR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZElkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUHJvcGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQ +YWlyIiBMZW5ndGhGaWVsZD0iTm9PZlByb3BlcnRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIExl +bmd0aEluQml0cz0iMTYiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQcm9tb3RlZEZpZWxkIiBWYWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFU +eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNaW5vclZlcnNpb24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hlZERhdGFT +ZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0Rm9sZGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldEZvbGRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZp +ZWxkPSJOb09mRGF0YVNldEZvbGRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRN +ZXRhRGF0YSIgVHlwZU5hbWU9InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9InRuczpLZXlW +YWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRXh0ZW5zaW9uRmllbGRzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldFNvdXJjZSIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ0ludGVydmFs +SGludCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFk +YmFuZFR5cGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVhZGJhbmRWYWx1ZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnN0aXR1dGVWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZNZXRhRGF0YVByb3BlcnRpZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +UHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNl +dFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdWJsaXNoZWREYXRh +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVk +RGF0YSIgVHlwZU5hbWU9InRuczpQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlB1Ymxpc2hlZERhdGEiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIEJhc2VUeXBl +PSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkV2ZW50Tm90aWZpZXIiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mU2VsZWN0ZWRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RlZEZpZWxkcyIgVHlwZU5hbWU9InRuczpTaW1wbGVBdHRy +aWJ1dGVPcGVyYW5kIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdGVkRmllbGRzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0 +YVNldEZpZWxkQ29udGVudE1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVl +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNDb2RlIiBWYWx1ZT0iMSIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2VUaW1lc3RhbXAiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclRpbWVzdGFtcCIgVmFsdWU9 +IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU291cmNlUGljb1NlY29uZHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclBpY29T +ZWNvbmRzIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmF3 +RGF0YSIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0RmllbGRDb250 +ZW50TWFzayIgVHlwZU5hbWU9InRuczpEYXRhU2V0RmllbGRDb250ZW50TWFzayIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldFdyaXRlclBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkRh +dGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJNZXNzYWdlU2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlNb2RlIiBUeXBlTmFtZT0idG5zOk1lc3NhZ2VT +ZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlY3VyaXR5 +S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24i +IExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3Jp +dGVyR3JvdXBEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBl +PSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJs +ZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0 +YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5h +bWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5 +U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUi +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5 +cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGll +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlckdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6 +VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVydmFsIiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IktlZXBBbGl2ZVRpbWUi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHki +IFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkhlYWRlckxheW91dFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VTZXR0 +aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRXcml0ZXJE +YXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91 +cE1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHViU3ViQ29u +bmVjdGlvbkRhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUHVibGlzaGVySWQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25Qcm9wZXJ0aWVzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvblBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkNv +bm5lY3Rpb25Qcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0U2V0 +dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0idG5zOldyaXRlckdyb3VwRGF0YVR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mV3JpdGVyR3JvdXBzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9InRuczpSZWFkZXJHcm91cERhdGFUeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlJlYWRlckdyb3VwcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmV0d29ya0ludGVyZmFjZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTmV0d29ya0FkZHJlc3NV +cmxEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBT +b3VyY2VUeXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZGVyR3JvdXBEYXRhVHlwZSIg +QmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBE +YXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5 +TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VU +eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERl +c2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFs +dWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGllcyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRSZWFk +ZXJzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNl +dFJlYWRlcnMiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZkRhdGFTZXRSZWFkZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBl +TmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZXJJZCIg +VHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZXJHcm91 +cElkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFT +ZXRXcml0ZXJJZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEYXRhU2V0TWV0YURhdGEiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBlTmFtZT0i +dG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVz +c2FnZVJlY2VpdmVUaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdl +U2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlHcm91cElkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0 +eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mRGF0YVNldFJlYWRlclByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0UmVhZGVyUHJvcGVydGllcyIgVHlwZU5h +bWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFJlYWRlclByb3Bl +cnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5h +bWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnNjcmliZWREYXRhU2V0IiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6U3Vic2NyaWJl +ZERhdGFTZXREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVGFyZ2V0VmFyaWFi +bGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +VmFyaWFibGVzIiBUeXBlTmFtZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIExlbmd0aEZpZWxk +PSJOb09mVGFyZ2V0VmFyaWFibGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldEZpZWxkSWQi +IFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlY2VpdmVySW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJU +YXJnZXROb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBdHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJXcml0ZUluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBUeXBlTmFtZT0idG5zOk92ZXJyaWRl +VmFsdWVIYW5kbGluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik92ZXJyaWRlVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgTGVuZ3RoSW5CaXRz +PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzYWJsZWQiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxhc3RVc2FibGVWYWx1ZSIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3ZlcnJpZGVWYWx1ZSIg +VmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgQmFzZVR5cGU9InRu +czpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVu +dE5vZGVOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25U +eXBlIiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJTdWJDb25maWd1cmF0 +aW9uRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlB1Ymxpc2hlZERhdGFTZXRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1lPSJ0bnM6UHVi +bGlzaGVkRGF0YVNldERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlB1Ymxpc2hlZERhdGFTZXRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvbnMiIFR5cGVOYW1lPSJ0 +bnM6UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbm5lY3Rpb25z +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5h +bWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlVuZGVmaW5lZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iQXNjZW5kaW5nV3JpdGVySWQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIgSXNP +cHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZh +bHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlB1Ymxpc2hlcklkIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHcm91cEhlYWRlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBWZXJz +aW9uIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOZXR3b3Jr +TWVzc2FnZU51bWJlciIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iUGF5bG9hZEhlYWRlciIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlRpbWVzdGFtcCIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJQaWNvU2Vjb25kcyIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEYXRhU2V0Q2xhc3NJZCIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQcm9tb3RlZEZpZWxkcyIgVmFsdWU9IjEwMjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVWFk +cFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T3JkZXJpbmci +IFR5cGVOYW1lPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6VWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ09mZnNl +dCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHVi +bGlzaGluZ09mZnNldCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlB1Ymxpc2hpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiBMZW5ndGhGaWVsZD0i +Tm9PZlB1Ymxpc2hpbmdPZmZzZXQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIExl +bmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJUaW1lc3RhbXAiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlBpY29TZWNvbmRzIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJTdGF0dXMiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWlub3JWZXJzaW9uIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iU2VxdWVuY2VOdW1iZXIiIFZhbHVlPSIzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3Nh +Z2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1l +PSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDb25maWd1cmVkU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQx +NiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVy +c2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3 +b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5z +OlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpVYWRwRGF0YVNldE1lc3Nh +Z2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZh +bCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNlaXZl +T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTmV0d29ya01lc3NhZ2VIZWFkZXIiIFZhbHVlPSIxIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFTZXRNZXNzYWdlSGVhZGVyIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaW5nbGVEYXRhU2V0TWVz +c2FnZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHVibGlz +aGVySWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFT +ZXRDbGFzc0lkIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwbHlUbyIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgQmFz +ZVR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25OZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBMZW5n +dGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iRGF0YVNldFdyaXRlcklkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJNZXRhRGF0YVZlcnNpb24iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXAiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlN0YXR1cyIgVmFsdWU9IjE2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5h +bWU9InRuczpKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJKc29uRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5 +cGVOYW1lPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERh +dGFUeXBlIiBCYXNlVHlwZT0idG5zOkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9u +T2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9 +InRuczpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1lc3NhZ2VSZXBlYXRDb3VudCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTWVzc2FnZVJlcGVhdERlbGF5IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9r +ZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6Q29ubmVjdGlvblRy +YW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRpY2F0aW9u +UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0 +eU9mU2VydmljZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iTm90U3BlY2lmaWVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJCZXN0RWZmb3J0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBdExlYXN0T25jZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iQXRNb3N0T25jZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iRXhhY3RseU9uY2UiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNw +b3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2 +ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZp +Y2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5z +OkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJR +dWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0i +dG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNZXRhRGF0YVVwZGF0ZVRpbWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291 +cmNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1 +dGhlbnRpY2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgVHlwZU5hbWU9InRuczpC +cm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWV0YURhdGFRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkRpYWdub3N0aWNzTGV2 +ZWwiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJh +c2ljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBZHZhbmNl +ZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5mbyIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG9nIiBWYWx1ZT0iMyIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWJ1ZyIgVmFsdWU9IjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUHVi +U3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIExlbmd0aEluQml0cz0iMzIiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluZm9ybWF0aW9uIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcnJvciIgVmFsdWU9IjEiIC8+DQogIDwv +b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWxpYXNO +YW1lRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWxpYXNOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iSWRUeXBl +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOdW1l +cmljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJpbmci +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikd1aWQiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9wYXF1ZSIgVmFsdWU9IjMi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTm9kZUNsYXNzIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJVbnNwZWNpZmllZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iT2JqZWN0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWYXJpYWJsZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWV0aG9kIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJP +YmplY3RUeXBlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YXJpYWJsZVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJSZWZlcmVuY2VUeXBlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iRGF0YVR5cGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWaWV3IiBWYWx1ZT0iMTI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 +b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlBlcm1pc3Npb25UeXBlIiBMZW5ndGhJbkJpdHM9IjMy +IiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u +ZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQnJvd3NlIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWFkUm9sZVBlcm1p +c3Npb25zIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0 +ZUF0dHJpYnV0ZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +V3JpdGVSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IldyaXRlSGlzdG9yaXppbmciIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJSZWFkIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJSZWFkSGlzdG9yeSIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJJbnNlcnRIaXN0b3J5IiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik1vZGlmeUhpc3RvcnkiIFZhbHVlPSI1MTIiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVsZXRlSGlzdG9yeSIgVmFsdWU9IjEwMjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVjZWl2ZUV2ZW50cyIgVmFsdWU9IjIwNDgiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2FsbCIgVmFsdWU9IjQwOTYiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkUmVmZXJlbmNlIiBWYWx1ZT0iODE5MiIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW1vdmVSZWZlcmVuY2UiIFZhbHVl +PSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWxldGVOb2RlIiBW +YWx1ZT0iMzI3NjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkTm9kZSIg +VmFsdWU9IjY1NTM2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkFjY2Vzc0xldmVsVHlwZSIgTGVuZ3RoSW5CaXRzPSI4IiBJc09wdGlv +blNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVudFJlYWQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkN1cnJlbnRXcml0ZSIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVJlYWQiIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3RvcnlXcml0ZSIg +VmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VtYW50aWNDaGFu +Z2UiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNX +cml0ZSIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRpbWVz +dGFtcFdyaXRlIiBWYWx1ZT0iNjQiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUiIExlbmd0aEluQml0cz0i +MzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJyZW50 +UmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVu +dFdyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0 +b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlz +dG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +ZW1hbnRpY0NoYW5nZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlN0YXR1c1dyaXRlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVGltZXN0YW1wV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25hdG9taWNSZWFkIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik5vbmF0b21pY1dyaXRlIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlRnVsbEFycmF5T25seSIgVmFsdWU9IjEwMjQiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +RXZlbnROb3RpZmllclR5cGUiIExlbmd0aEluQml0cz0iOCIgSXNPcHRpb25TZXQ9InRydWUiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1YnNjcmliZVRvRXZlbnRzIiBWYWx1ZT0iMSIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5UmVhZCIgVmFsdWU9IjQiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVdyaXRlIiBWYWx1ZT0iOCIg +Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJBY2Nlc3NSZXN0cmljdGlvblR5cGUiIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0 +cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaWduaW5nUmVxdWlyZWQiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkVuY3J5cHRpb25SZXF1aXJlZCIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2Vzc2lvblJlcXVp +cmVkIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6 +UGVybWlzc2lvblR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51 +bWVyYXRlZFR5cGUgTmFtZT0iU3RydWN0dXJlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RydWN0dXJlIiBWYWx1ZT0iMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJ1Y3R1cmVXaXRoT3B0aW9uYWxGaWVsZHMiIFZh +bHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVuaW9uIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJTdHJ1Y3R1cmVGaWVsZCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT3B0aW9uYWwiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9InVh +Ok5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cnVjdHVyZVR5cGUiIFR5cGVOYW1l +PSJ0bnM6U3RydWN0dXJlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZGaWVsZHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWVsZHMiIFR5 +cGVOYW1lPSJ0bnM6U3RydWN0dXJlRmllbGQiIExlbmd0aEZpZWxkPSJOb09mRmllbGRzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVu +dW1EZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmllbGRzIiBUeXBlTmFtZT0idG5zOkVudW1GaWVsZCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5h +bWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxv +Y2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5h +bWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRl +TWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIg +TGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBl +cm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBUeXBlTmFtZT0i +dG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJJbnN0YW5j +ZU5vZGUiIEJhc2VUeXBlPSJ0bnM6Tm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQi +IFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlw +ZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFt +ZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFt +ZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1p +c3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBl +TmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOk5vZGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlw +ZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIg +U291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlzc2lv +bnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2VyUm9s +ZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUi +IExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBU +eXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJPYmplY3ROb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2Rl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVD +bGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93 +c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2Fs +aXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6 +Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl +cldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5h +bWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1p +c3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVm +ZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVO +b2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJ +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+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fi +c3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVOb2RlIiBCYXNlVHlwZT0i +dG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5v +ZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVh +bGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9w +YzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJv +bGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1lbnNpb25z +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJheURpbWVu +c2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NMZXZlbCIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBUeXBlTmFt +ZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0 +b3JpemluZyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzTGV2ZWxFeCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVUeXBlTm9kZSIg +QmFzZVR5cGU9InRuczpUeXBlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlz +c2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0i +dG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFt +ZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJy +YXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJh +eURpbWVuc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFt +ZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIEJhc2VUeXBlPSJ0bnM6VHlwZU5v +ZGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIg +VHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNv +dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4 +dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1h +c2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xl +UGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2Vz +IiBUeXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9v +bGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9Ik1ldGhvZE5vZGUiIEJhc2VUeXBlPSJ0bnM6SW5zdGFuY2VOb2Rl +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291 +cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5 +cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNr +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNl +VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Np +b25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBl +cm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJv +bGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIg +VHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9Im9w +YzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlZpZXdOb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0i +dG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9 +InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9u +cyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9s +ZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5z +Ok5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5 +dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZp +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 +aWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25P +YmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVmZXJlbmNlTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ludmVyc2UiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh +biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRhcmdldElkIiBUeXBlTmFtZT0idWE6RXhwYW5k +ZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQXJndW1lbnQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbnVtVmFs +dWVUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVudW1G +aWVsZCIgQmFzZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiBTb3VyY2VUeXBlPSJ0bnM6RW51bVZhbHVlVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3B0aW9uU2V0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWxpZEJpdHMiIFR5cGVOYW1lPSJvcGM6 +Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJVbmlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOb3JtYWxpemVk +U3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i +RGVjaW1hbFN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IkR1cmF0aW9uU3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9w +YXF1ZVR5cGUgTmFtZT0iVGltZVN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9w +YzpPcGFxdWVUeXBlIE5hbWU9IkRhdGVTdHJpbmciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQog +IDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEdXJhdGlvbiI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoN +CiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlV0Y1RpbWUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0K +DQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJMb2NhbGVJZCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaW1lWm9uZURhdGFUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9mZnNldCIgVHlw +ZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRheWxpZ2h0U2F2aW5n +SW5PZmZzZXQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkluZGV4Ij4NCiAgPC9vcGM6T3BhcXVlVHlw +ZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW50ZWdlcklkIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVyIiBW +YWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDbGllbnQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNsaWVudEFuZFNlcnZlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzY292ZXJ5U2Vy +dmVyIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXBwbGljYXRpb25O +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFwcGxpY2F0aW9uVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVByb2ZpbGVVcmkiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpc2NvdmVyeVVybHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlVcmxz +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuRGlhZ25vc3RpY3MiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXVkaXRFbnRyeUlkIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVvdXRIaW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZGl0aW9uYWxI +ZWFkZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0 +YW1wIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2aWNlUmVzdWx0IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZpY2VEaWFnbm9zdGljcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cmluZ1RhYmxlIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RyaW5nVGFibGUiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZlN0cmluZ1RhYmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWRkaXRpb25hbEhlYWRlciIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlZl +cnNpb25UaW1lIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNlcnZpY2VGYXVsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVcmlzVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVyaXNWZXJzaW9uIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZVcmlzVmVyc2lvbiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU2VydmVyVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJO +b09mU2VydmVyVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2Vzc2lv +bmxlc3NJbnZva2VSZXNwb25zZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5hbWVzcGFjZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZOYW1lc3BhY2VVcmlzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUlkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxl +SWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpbmRTZXJ2ZXJzUmVz +cG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6QXBwbGljYXRpb25EZXNj +cmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZlck9uTmV0d29yayIgQmFz +ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNvcmRJ +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Nv +dmVyeVVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtS +ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nUmVjb3JkSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVjb3Jkc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXR5Rmls +dGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVy +Q2FwYWJpbGl0eUZpbHRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +U2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTGFzdENvdW50ZXJSZXNldFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6U2VydmVyT25O +ZXR3b3JrIiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlcnMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlm +aWNhdGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iU2lnbiIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iU2lnbkFuZEVuY3J5cHQiIFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVzZXJUb2tlblR5cGUiIExlbmd0aEluQml0 +cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFub255bW91cyIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlck5hbWUiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNlcnRpZmljYXRlIiBWYWx1ZT0i +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc3N1ZWRUb2tlbiIgVmFsdWU9 +IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iVXNlclRva2VuUG9saWN5IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuVHlwZSIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5UeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVkVG9rZW5UeXBlIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklzc3VlckVuZHBvaW50VXJsIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5 +VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludERlc2NyaXB0aW9uIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJs +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIg +VHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2VydmVyQ2VydGlmaWNhdGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2Vj +dXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJJZGVu +dGl0eVRva2VucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5Qb2xpY3kiIExlbmd0 +aEZpZWxkPSJOb09mVXNlcklkZW50aXR5VG9rZW5zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUxldmVsIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9p +bnRzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUHJvZmlsZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQcm9maWxlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +UHJvZmlsZVVyaXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l +PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9p +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RW5kcG9pbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlck5hbWVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyTmFtZXMiIFR5cGVOYW1l +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlck5hbWVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5VXJs +cyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRGlzY292ZXJ5VXJscyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbWFwaG9yZUZpbGVQYXRoIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT25saW5lIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5h +bWU9InRuczpSZWdpc3RlcmVkU2VydmVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ0bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNZG5zU2VydmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFt +ZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVn +aXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXIiIFR5cGVOYW1lPSJ0bnM6UmVnaXN0 +ZXJlZFNlcnZlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1 +cmF0aW9uIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +Y292ZXJ5Q29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMiIFR5cGVO +YW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlw +ZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW5ldyIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2hhbm5lbFNlY3VyaXR5VG9r +ZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q2hhbm5lbElkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlRva2VuSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3JlYXRlZEF0IiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmV2aXNlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJlQ2hh +bm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50UHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RUeXBlIiBUeXBlTmFtZT0i +dG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl +Y3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0i +dG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyUHJvdG9j +b2xWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNlY3VyaXR5VG9rZW4iIFR5cGVOYW1lPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJOb25jZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2Vy +dGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTaWduYXR1cmUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlNlc3Npb25BdXRoZW50 +aWNhdGlvblRva2VuIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlNpZ25hdHVyZURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWxnb3JpdGhtIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpZ25hdHVyZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNyZWF0ZVNlc3Npb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBl +TmFtZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2Vzc2lvbk5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRTZXNzaW9uVGltZW91dCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhSZXNwb25zZU1l +c3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvblRva2VuIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3Bj +OkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlck5vbmNlIiBUeXBlTmFtZT0i +b3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlckVuZHBvaW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0idG5zOlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mU2Vy +dmVyU29mdHdhcmVDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJT +aWduYXR1cmUiIFR5cGVOYW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heFJlcXVlc3RNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNl +cklkZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFub255bW91c0lk +ZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0 +bnM6VXNlcklkZW50aXR5VG9rZW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlck5hbWVJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0i +dG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFzc3dvcmQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ilg1MDlJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SXNzdWVkSWRlbnRpdHlUb2tlbiIgQmFzZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQb2xpY3lJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJj +ZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRv +a2VuRGF0YSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5jcnlwdGlvbkFsZ29yaXRobSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJSc2FFbmNyeXB0ZWRT +ZWNyZXQiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVl +c3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRTaWduYXR1cmUiIFR5cGVO +YW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDbGll +bnRTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudFNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNp +Z25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mQ2xpZW50U29mdHdhcmVD +ZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9i +amVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJUb2tlblNpZ25hdHVyZSIgVHlwZU5h +bWU9InRuczpTaWduYXR1cmVEYXRhIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VydmVyTm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxk +PSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5m +b3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9z +dGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +aWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFt +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJz +Y3JpcHRpb25zIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FuY2VsUmVxdWVz +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXF1ZXN0SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYW5jZWxS +ZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNhbmNlbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJO +b2RlQXR0cmlidXRlc01hc2siIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkJyb3dzZU5hbWUiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEZXNjcmlwdGlvbiIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkRpc3BsYXlOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRXZlbnROb3RpZmllciIgVmFsdWU9IjEyOCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFeGVjdXRhYmxlIiBWYWx1ZT0iMjU2IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3Rvcml6aW5nIiBWYWx1ZT0iNTEyIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2VOYW1lIiBWYWx1ZT0iMTAyNCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc0Fic3RyYWN0IiBWYWx1ZT0iMjA0 +OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVmFsdWU9IjQwOTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9k +ZUNsYXNzIiBWYWx1ZT0iODE5MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b2RlSWQiIFZhbHVlPSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +eW1tZXRyaWMiIFZhbHVlPSIzMjc2OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJVc2VyQWNjZXNzTGV2ZWwiIFZhbHVlPSI2NTUzNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVmFsdWU9IjEzMTA3MiIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyV3JpdGVNYXNrIiBWYWx1ZT0iMjYyMTQ0IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlUmFuayIgVmFsdWU9IjUyNDI4OCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZU1hc2siIFZhbHVlPSIxMDQ4NTc2 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlIiBWYWx1ZT0iMjA5NzE1 +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24i +IFZhbHVlPSI0MTk0MzA0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJvbGVQ +ZXJtaXNzaW9ucyIgVmFsdWU9IjgzODg2MDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBWYWx1ZT0iMTY3NzcyMTYiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMzM1NTQ0MzEiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQmFzZU5vZGUiIFZhbHVlPSIyNjUwMTIyMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZhbHVlPSIyNjUwMTM0OCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3RUeXBlIiBWYWx1ZT0iMjY1MDMyNjgi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmFyaWFibGUiIFZhbHVlPSIyNjU3 +MTM4MyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYXJpYWJsZVR5cGUiIFZh +bHVlPSIyODYwMDQzOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2Qi +IFZhbHVlPSIyNjYzMjU0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZl +cmVuY2VUeXBlIiBWYWx1ZT0iMjY1MzcwNjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVmlldyIgVmFsdWU9IjI2NTAxMzU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJp +YnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +cGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9i +amVjdEF0dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNv +dXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRp +c3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5h +bWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlZhcmlhYmxlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0 +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJW +YWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +VHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVl +UmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZB +cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0i +Tm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVs +IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNz +TGV2ZWwiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmlt +dW1TYW1wbGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ikhpc3Rvcml6aW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kQXR0 +cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlw +ZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5h +bWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVh +OkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0 +ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0 +ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJv +b2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRl +eHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVBdHRyaWJ1 +dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0 +bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIg +VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFz +ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSXNBYnN0cmFjdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZmVy +ZW5jZVR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMy +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgQmFzZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRB +dHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1l +PSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmlld0F0 +dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlO +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3Jp +dGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1 +dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0i +b3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBl +TmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0i +dWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJHZW5lcmljQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +ZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +QXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZBdHRyaWJ1dGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVudE5v +ZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdGVkTmV3Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlm +aWVkTmFtZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRu +czpOb2RlQ2xhc3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQXR0cmlidXRlcyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVE +ZWZpbml0aW9uIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNSZXN1bHQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Rh +dHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBZGRlZE5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBZGROb2Rlc1JlcXVlc3QiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVz +dEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvQWRkIiBUeXBlTmFtZT0idG5zOkFkZE5vZGVzSXRlbSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvQWRkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QWRkTm9kZXNSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU291cmNlTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlk +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6 +Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNGb3J3YXJkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRTZXJ2ZXJVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBU +eXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJ0bnM6QWRk +UmVmZXJlbmNlc0l0ZW0iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlc1RvQWRkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJl +ZmVyZW5jZXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRl +ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1 +c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIg +TGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVRhcmdl +dFJlZmVyZW5jZXMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3Qi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZk5vZGVzVG9EZWxldGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvRGVsZXRlIiBUeXBlTmFtZT0idG5zOkRlbGV0ZU5vZGVz +SXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvRGVsZXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZU5vZGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2Fy +ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEZWxldGVCaWRpcmVjdGlvbmFsIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXNUb0RlbGV0 +ZSIgVHlwZU5hbWU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS +ZWZlcmVuY2VzVG9EZWxldGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1 +bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw +ZSBOYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0 +PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBY2Nlc3NMZXZlbCIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1 +ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb250YWluc05vTG9vcHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlIiBW +YWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVzY3JpcHRpb24i +IFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFt +ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkV2ZW50Tm90 +aWZpZXIiIFZhbHVlPSIxMjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXhl +Y3V0YWJsZSIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJI +aXN0b3JpemluZyIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJJbnZlcnNlTmFtZSIgVmFsdWU9IjEwMjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iSXNBYnN0cmFjdCIgVmFsdWU9IjIwNDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWwiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vZGVDbGFzcyIgVmFsdWU9IjgxOTIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUlkIiBWYWx1ZT0iMTYzODQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3ltbWV0cmljIiBWYWx1ZT0iMzI3NjgiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBWYWx1ZT0iNjU1 +MzYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckV4ZWN1dGFibGUiIFZh +bHVlPSIxMzEwNzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlcldyaXRl +TWFzayIgVmFsdWU9IjI2MjE0NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YWx1ZVJhbmsiIFZhbHVlPSI1MjQyODgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iV3JpdGVNYXNrIiBWYWx1ZT0iMTA0ODU3NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJWYWx1ZUZvclZhcmlhYmxlVHlwZSIgVmFsdWU9IjIwOTcxNTIiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iNDE5NDMw +NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFZh +bHVlPSI4Mzg4NjA4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc1Jl +c3RyaWN0aW9ucyIgVmFsdWU9IjE2Nzc3MjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsRXgiIFZhbHVlPSIzMzU1NDQzMiIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VEaXJlY3Rpb24i +IExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZvcndh +cmQiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2Ui +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSIz +IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlZpZXdEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJUaW1lc3RhbXAiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3VmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJv +d3NlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQnJvd3NlRGlyZWN0aW9uIiBUeXBlTmFtZT0idG5zOkJyb3dzZURpcmVjdGlvbiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VSZXN1bHRNYXNrIiBMZW5ndGhJbkJpdHM9IjMy +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFZhbHVlPSIxIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzRm9yd2FyZCIgVmFsdWU9IjIiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iNCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iOCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjE2IiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBWYWx1ZT0i +MzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iNjMiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVmZXJlbmNlVHlwZUluZm8iIFZhbHVl +PSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRhcmdldEluZm8iIFZhbHVl +PSI2MCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4 +cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFt +ZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvbnRpbnVhdGlv +blBvaW50Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkJyb3dzZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJCcm93c2VSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0 +aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4UmVmZXJlbmNlc1Blck5v +ZGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5v +ZGVzVG9Ccm93c2UiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb2Rlc1RvQnJvd3NlIiBUeXBlTmFtZT0idG5zOkJyb3dzZURlc2NyaXB0aW9uIiBMZW5ndGhG +aWVsZD0iTm9PZk5vZGVzVG9Ccm93c2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QnJvd3NlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0lu +Zm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2lu +dHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZD +b250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDb250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZDb250aW51YXRpb25Qb2ludHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVJlc3VsdCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9P +ZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YnR5 +cGVzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGgiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1l +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVu +dHMiIFR5cGVOYW1lPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZF +bGVtZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJCcm93c2VQYXRoIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nTm9kZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2 +ZVBhdGgiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VQYXRoUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpT +dGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRhcmdldHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRzIiBUeXBlTmFtZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIExlbmd0aEZpZWxkPSJOb09mVGFyZ2V0cyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xh +dGVCcm93c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkJyb3dzZVBhdGhzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aHMi +IFR5cGVOYW1lPSJ0bnM6QnJvd3NlUGF0aCIgTGVuZ3RoRmllbGQ9Ik5vT2ZCcm93c2VQYXRocyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJl +c3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1 +bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWdpc3Rl +ciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9S +ZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvUmVn +aXN0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZ2lzdGVyZWRO +b2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVn +aXN0ZXJlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVn +aXN0ZXJlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9k +ZXNUb1VucmVnaXN0ZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb2Rlc1RvVW5yZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZOb2Rlc1RvVW5yZWdpc3RlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvdW50ZXIiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOdW1lcmljUmFuZ2UiPg0KICA8L29w +YzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJUaW1lIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iRGF0ZSI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludENvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iT3BlcmF0aW9uVGltZW91dCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlVzZUJpbmFyeUVuY29kaW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhTdHJpbmdMZW5ndGgiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhCeXRlU3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4QXJyYXlMZW5ndGgiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhNZXNzYWdlU2l6ZSIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heEJ1ZmZlclNp +emUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDaGFubmVs +TGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZWN1cml0eVRva2VuTGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUXVlcnlEYXRhRGVz +Y3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVsYXRpdmVQYXRoIiBUeXBlTmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5v +ZGVUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiBUeXBlTmFtZT0idWE6RXhwYW5kZWRO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmNsdWRlU3ViVHlwZXMiIFR5cGVOYW1l +PSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRhVG9SZXR1cm4i +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVG9SZXR1 +cm4iIFR5cGVOYW1lPSJ0bnM6UXVlcnlEYXRhRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RGF0YVRvUmV0dXJuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhdG9yIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcXVhbHMiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzTnVsbCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iR3JlYXRlclRoYW4iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJHcmVhdGVyVGhhbk9yRXF1YWwiIFZhbHVlPSI0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuT3JFcXVhbCIgVmFsdWU9IjUiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGlrZSIgVmFsdWU9IjYiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm90IiBWYWx1ZT0iNyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJCZXR3ZWVuIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJJbkxpc3QiIFZhbHVlPSI5IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IkFuZCIgVmFsdWU9IjEwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik9yIiBWYWx1ZT0iMTEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2Fz +dCIgVmFsdWU9IjEyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluVmlldyIg +VmFsdWU9IjEzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9mVHlwZSIgVmFs +dWU9IjE0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlbGF0ZWRUbyIgVmFs +dWU9IjE1IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJpdHdpc2VBbmQiIFZh +bHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCaXR3aXNlT3IiIFZh +bHVlPSIxNyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJRdWVyeURhdGFTZXQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVmaW5pdGlvbk5vZGUiIFR5cGVOYW1lPSJ1 +YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZWYWx1ZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZXMiIFR5cGVO +YW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZlZhbHVlcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2RlUmVmZXJlbmNl +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVy +ZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzRm9yd2FyZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlZmVyZW5jZWROb2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExl +bmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmls +dGVyT3BlcmF0b3IiIFR5cGVOYW1lPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mRmlsdGVyT3BlcmFuZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJPcGVyYW5kcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lv +bk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWx0ZXJPcGVyYW5kcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb250ZW50RmlsdGVy +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZFbGVtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkVsZW1lbnRzIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkVsZW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhbmQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkVsZW1lbnRPcGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iSW5kZXgiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkxpdGVyYWxP +cGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF0dHJpYnV0ZU9wZXJhbmQiIEJhc2VU +eXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBbGlhcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VQYXRoIiBUeXBl +TmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0 +ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4 +UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIEJh +c2VUeXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVm +aW5pdGlvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkJyb3dzZVBhdGgiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VQYXRoIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZCcm93c2VQYXRoIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmlidXRlSWQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5kZXhSYW5nZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iT3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZPcGVyYW5kU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mT3BlcmFuZERpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik9wZXJhbmREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZPcGVyYW5kRGlhZ25vc3RpY0luZm9zIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVudFJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6 +Q29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mRWxlbWVudFJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRWxlbWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVsZW1lbnREaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbGVtZW50RGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBhcnNpbmdSZXN1bHQiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVN0YXR1 +c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +YXRhU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YURpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh +dGFEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZEYXRhRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5Rmlyc3RSZXF1ZXN0IiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFk +ZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVUeXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vZGVUeXBlcyIgVHlwZU5hbWU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBM +ZW5ndGhGaWVsZD0iTm9PZk5vZGVUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRl +ciIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWF4RGF0YVNldHNUb1JldHVybiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNYXhSZWZlcmVuY2VzVG9SZXR1cm4iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlF1ZXJ5Rmlyc3RSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZRdWVyeURhdGFTZXRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlEYXRhU2V0cyIgVHlw +ZU5hbWU9InRuczpRdWVyeURhdGFTZXQiIExlbmd0aEZpZWxkPSJOb09mUXVlcnlEYXRhU2V0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUGFyc2luZ1Jlc3VsdHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQYXJzaW5nUmVz +dWx0cyIgVHlwZU5hbWU9InRuczpQYXJzaW5nUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlBhcnNp +bmdSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJlc3VsdCIgVHlwZU5h +bWU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5TmV4dFJlcXVlc3QiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRl +ciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVsZWFzZUNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry +aW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlF1ZXJ5TmV4dFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlF1ZXJ5RGF0YVNldHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWVyeURhdGFTZXRz +IiBUeXBlTmFtZT0idG5zOlF1ZXJ5RGF0YVNldCIgTGVuZ3RoRmllbGQ9Ik5vT2ZRdWVyeURhdGFT +ZXRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiBU +eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBMZW5ndGhJbkJp +dHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2UiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlciIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQm90aCIgVmFsdWU9IjIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTmVpdGhlciIgVmFsdWU9IjMiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVu +dW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFZhbHVlSWQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9k +ZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmli +dXRlSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +YXRhRW5jb2RpbmciIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRSZXF1ZXN0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVl +c3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heEFnZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIFR5cGVOYW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJu +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWFkIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1JlYWQiIFR5cGVOYW1lPSJ0 +bnM6UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1JlYWQiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkVmFsdWVJZCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFFbmNvZGluZyIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRp +b25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkUmVzdWx0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1 +c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q29udGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikhpc3RvcnlEYXRhIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlSZWFkRGV0YWlscyIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZEV2 +ZW50RGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkV2ZW50RmlsdGVy +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlJlYWRSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRh +aWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzUmVhZE1vZGlmaWVkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJv +cGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXR1cm5Cb3Vu +ZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUHJvY2Vzc2VkRGV0YWlscyIgQmFzZVR5 +cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRU +aW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5k +VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mQWdncmVnYXRlVHlwZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkFnZ3JlZ2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0 +aEZpZWxkPSJOb09mQWdncmVnYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVOYW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSZWFkQXRUaW1lRGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUi +IExlbmd0aEZpZWxkPSJOb09mUmVxVGltZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VT +aW1wbGVCb3VuZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkQW5ub3RhdGlvbkRhdGFE +ZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RGF0YSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpE +YXRhVmFsdWUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZmljYXRpb25JbmZv +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1v +ZGlmaWNhdGlvblRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJVcGRhdGVUeXBlIiBUeXBlTmFtZT0idG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlNb2RpZmllZERhdGEiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeURhdGEiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEYXRhVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5n +dGhGaWVsZD0iTm9PZkRhdGFWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTW9k +aWZpY2F0aW9uSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb2RpZmljYXRpb25JbmZvcyIgVHlwZU5hbWU9InRuczpNb2RpZmljYXRpb25JbmZvIiBM +ZW5ndGhGaWVsZD0iTm9PZk1vZGlmaWNhdGlvbkluZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlFdmVudCIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBU +eXBlTmFtZT0idG5zOkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkRGV0YWlscyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVz +dGFtcHNUb1JldHVybiIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZWxlYXNlQ29udGludWF0aW9uUG9pbnRzIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1JlYWQiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvUmVhZCIgVHlw +ZU5hbWU9InRuczpIaXN0b3J5UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1Jl +YWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNw +b25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InRuczpIaXN0b3J5UmVhZFJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVh +OkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0 +ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJ0bnM6V3JpdGVWYWx1ZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvV3JpdGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZS +ZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +dWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iSGlzdG9yeVVwZGF0ZURldGFpbHMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikhpc3Rv +cnlVcGRhdGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJJbnNlcnQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlJlcGxhY2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IlVwZGF0ZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVs +ZXRlIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVt +ZXJhdGVkVHlwZSBOYW1lPSJQZXJmb3JtVXBkYXRlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5zZXJ0IiBWYWx1ZT0iMSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXBsYWNlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVcGRhdGUiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlJlbW92ZSIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXBkYXRlRGF0YURldGFpbHMi +IEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVw +ZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFj +ZSIgVHlwZU5hbWU9InRuczpQZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIExlbmd0aEZp +ZWxkPSJOb09mVXBkYXRlVmFsdWVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVwZGF0ZVN0cnVjdHVyZURhdGFEZXRhaWxzIiBCYXNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVE +ZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIFR5 +cGVOYW1lPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVsZD0i +Tm9PZlVwZGF0ZVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJVcGRhdGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgVHlwZU5hbWU9InRuczpQ +ZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlciIgVHlwZU5h +bWU9InRuczpFdmVudEZpbHRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFdmVudERh +dGEiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudERh +dGEiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBMZW5ndGhGaWVsZD0iTm9P +ZkV2ZW50RGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJJc0RlbGV0ZU1vZGlmaWVkIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRlbGV0ZUF0VGltZURldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0 +ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudElkcyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50SWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmF0aW9uUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZk9wZXJhdGlvblJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0 +aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZIaXN0b3J5VXBkYXRlRGV0YWlscyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiBUeXBlTmFtZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0IiBMZW5ndGhGaWVsZD0iTm9PZkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpI +aXN0b3J5VXBkYXRlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxNZXRo +b2RSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9iamVjdElkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWV0aG9kSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJbnB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExlbmd0 +aEZpZWxkPSJOb09mSW5wdXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBU +eXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJbnB1 +dEFyZ3VtZW50UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IklucHV0QXJndW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJbnB1dEFyZ3VtZW50UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZJbnB1dEFyZ3VtZW50RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZklucHV0QXJndW1l +bnREaWFnbm9zdGljSW5mb3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mT3V0cHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iT3V0 +cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZPdXRw +dXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iQ2FsbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1 +ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1ldGhvZHNUb0NhbGwiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXRob2RzVG9DYWxs +IiBUeXBlTmFtZT0idG5zOkNhbGxNZXRob2RSZXF1ZXN0IiBMZW5ndGhGaWVsZD0iTm9PZk1ldGhv +ZHNUb0NhbGwiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQ2FsbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0i +dG5zOkNhbGxNZXRob2RSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9uaXRv +cmluZ01vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJTYW1wbGluZyIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwb3J0aW5nIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlVHJpZ2dlciIgTGVuZ3RoSW5CaXRzPSIz +MiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNWYWx1ZSIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzVmFsdWVUaW1lc3RhbXAiIFZh +bHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRU +eXBlIE5hbWU9IkRlYWRiYW5kVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iQWJzb2x1dGUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlBlcmNlbnQiIFZhbHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIEJhc2VUeXBlPSJ0bnM6TW9u +aXRvcmluZ0ZpbHRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmlnZ2VyIiBUeXBlTmFtZT0i +dG5zOkRhdGFDaGFuZ2VUcmlnZ2VyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVhZGJhbmRU +eXBlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRi +YW5kVmFsdWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyIiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXIiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxl +Y3RDbGF1c2VzIiBUeXBlTmFtZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIExlbmd0aEZp +ZWxkPSJOb09mU2VsZWN0Q2xhdXNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xh +dXNlIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlv +biIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VTZXJ2ZXJDYXBhYmlsaXRpZXNEZWZhdWx0cyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHJlYXRVbmNlcnRhaW5Bc0JhZCIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyY2VudERhdGFCYWQiIFR5cGVOYW1l +PSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBlcmNlbnREYXRhR29vZCIgVHlw +ZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2xvcGVkRXh0cmFw +b2xhdGlvbiIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUZpbHRlciIgQmFzZVR5 +cGU9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0VGlt +ZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQ +cm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idG5zOk1vbml0b3JpbmdG +aWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENsYXVzZVJlc3Vs +dHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RD +bGF1c2VSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZT +ZWxlY3RDbGF1c2VSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdu +b3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xhdXNlUmVzdWx0IiBUeXBlTmFtZT0idG5z +OkNvbnRlbnRGaWx0ZXJSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlRmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNl +ZFN0YXJ0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJldmlzZWRQcm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZEFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVO +YW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yaW5nUGFyYW1ldGVycyIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGll +bnRIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJRdWV1ZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzY2FyZE9sZGVzdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ikl0ZW1Ub01vbml0b3IiIFR5cGVOYW1lPSJ0bnM6UmVhZFZh +bHVlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nTW9kZSIgVHlwZU5hbWU9 +InRuczpNb25pdG9yaW5nTW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFBh +cmFtZXRlcnMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVk +SXRlbUNyZWF0ZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkU2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5h +bWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUXVldWVTaXpl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJl +c3VsdCIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVt +c1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBUeXBlTmFtZT0idG5z +OlRpbWVzdGFtcHNUb1JldHVybiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJdGVtc1Rv +Q3JlYXRlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXRl +bXNUb0NyZWF0ZSIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJdGVtc1RvQ3JlYXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0 +ZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVxdWVzdGVkUGFyYW1ldGVycyIgVHlwZU5hbWU9InRuczpNb25pdG9yaW5n +UGFyYW1ldGVycyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNhbXBsaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZFF1ZXVlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9k +aWZ5TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcHNUb1JldHVy +biIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSXRlbXNUb01vZGlmeSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbU1v +ZGlmeVJlcXVlc3QiIExlbmd0aEZpZWxkPSJOb09mSXRlbXNUb01vZGlmeSIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOk1v +bml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1 +YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0 +TW9uaXRvcmluZ01vZGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JpbmdNb2RlIiBUeXBl +TmFtZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1v +bml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZNb25pdG9yZWRJdGVtSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9P +ZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0lu +Zm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklk +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyaWdnZXJp +bmdJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkxpbmtzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMaW5rc1RvQWRkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZM +aW5rc1RvQWRkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxpbmtzVG9SZW1vdmUiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMaW5rc1RvUmVtb3Zl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZMaW5rc1RvUmVtb3ZlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlNldFRyaWdnZXJpbmdSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGRSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVzdWx0cyIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mQWRkUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1l +PSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3Mi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlUmVzdWx0cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbW92ZVJlc3VsdHMiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlbW92ZVJlc3VsdHMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mUmVtb3ZlRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3Jp +cHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mTW9uaXRvcmVkSXRlbUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhG +aWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTW9uaXRvcmVkSXRlbXNSZXNwb25z +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZp +ZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0ZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTGlmZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOb3Rp +ZmljYXRpb25zUGVyUHVibGlzaCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHkiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVh +dGVTdWJzY3JpcHRpb25SZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRQdWJsaXNoaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJNb2RpZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6 +UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFB1 +Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQ +ZXJQdWJsaXNoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlByaW9yaXR5IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRv +dWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRNYXhLZWVw +QWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVi +bGlzaGluZ01vZGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0 +YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5m +byIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTm90aWZpY2F0aW9uTWVzc2Fn +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQdWJsaXNoVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uRGF0YSIgVHlwZU5hbWU9InVhOkV4dGVu +c2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vdGlmaWNh +dGlvbkRhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mTW9uaXRvcmVkSXRlbXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJdGVtcyIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVt +Tm90aWZpY2F0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRp +YWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9y +ZWRJdGVtTm90aWZpY2F0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVu +dE5vdGlmaWNhdGlvbkxpc3QiIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBUeXBlTmFtZT0idG5zOkV2ZW50RmllbGRMaXN0IiBM +ZW5ndGhGaWVsZD0iTm9PZkV2ZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRIYW5kbGUiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50RmllbGRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRGaWVs +ZHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50RmllbGRzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudEZpZWxkcyIgVHlwZU5hbWU9InVhOlZhcmlh +bnQiIExlbmd0aEZpZWxkPSJOb09mRXZlbnRGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RhdHVzQ2hhbmdlTm90aWZpY2F0 +aW9uIiBCYXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU3RhdHVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJsaXNoUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1 +YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudHMiIFR5cGVOYW1lPSJ0bnM6U3Vic2NyaXB0aW9uQWNr +bm93bGVkZ2VtZW50IiBMZW5ndGhGaWVsZD0iTm9PZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iUHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNl +SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkF2YWlsYWJsZVNlcXVl +bmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZp +ZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTW9yZU5vdGlmaWNhdGlvbnMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIFR5cGVOYW1lPSJ0bnM6Tm90aWZpY2F0 +aW9uTWVzc2FnZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9z +dGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVwdWJsaXNoUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXRyYW5zbWl0U2VxdWVuY2VOdW1iZXIiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlcHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uTWVz +c2FnZSIgVHlwZU5hbWU9InRuczpOb3RpZmljYXRpb25NZXNzYWdlIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zZmVyUmVzdWx0 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0 +YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbklk +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlw +dGlvbklkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mU3Vic2NyaXB0 +aW9uSWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VuZEluaXRpYWxWYWx1ZXMiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpUcmFuc2ZlclJlc3VsdCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRp +YWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +U3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNl +SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJCdWlsZEluZm8iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvZHVjdFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3ROYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvZnR3YXJlVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZE51bWJlciIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZERhdGUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUmVkdW5kYW5jeVN1cHBvcnQiIExlbmd0aEluQml0cz0i +MzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbGQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ildhcm0iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkhvdCIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iVHJhbnNwYXJlbnQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkhvdEFuZE1pcnJvcmVkIiBWYWx1ZT0iNSIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTZXJ2ZXJTdGF0ZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUnVubmluZyIg +VmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmFpbGVkIiBWYWx1 +ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb0NvbmZpZ3VyYXRpb24i +IFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1c3BlbmRlZCIg +VmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2h1dGRvd24iIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRlc3QiIFZhbHVlPSI1 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbW11bmljYXRpb25GYXVsdCIg +VmFsdWU9IjYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFs +dWU9IjciIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVySWQiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUxldmVsIiBUeXBlTmFtZT0ib3Bj +OkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJTdGF0ZSIgVHlwZU5hbWU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9pbnRVcmxMaXN0 +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRV +cmxMaXN0IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbmRwb2ludFVy +bExpc3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iTmV0d29ya0dyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOZXR3b3JrUGF0aHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrUGF0aHMiIFR5cGVOYW1l +PSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mTmV0d29ya1Bh +dGhzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWwi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVmlld0NvdW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTZXNz +aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3VtdWxhdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlY3VyaXR5UmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvblRpbWVv +dXRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXNzaW9uQWJvcnRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291bnQiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVy +dmFsQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VjdXJpdHlSZWplY3RlZFJlcXVlc3RzQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRSZXF1ZXN0c0NvdW50IiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJTZXJ2ZXJTdGF0dXNEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJyZW50VGltZSIgVHlwZU5hbWU9Im9w +YzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXRlIiBUeXBlTmFtZT0idG5z +OlNlcnZlclN0YXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGRJbmZvIiBUeXBlTmFt +ZT0idG5zOkJ1aWxkSW5mbyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY29uZHNUaWxsU2h1 +dGRvd24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2h1 +dGRvd25SZWFzb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlc3Npb25EaWFnbm9z +dGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25OYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBlTmFtZT0idG5zOkFwcGxpY2F0aW9u +RGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmkiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQWN0dWFsU2Vzc2lvblRpbWVvdXQiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVzcG9uc2VNZXNzYWdlU2l6ZSIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRDb25uZWN0 +aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkNsaWVudExhc3RDb250YWN0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudE1vbml0b3JlZEl0ZW1zQ291 +bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVu +dFB1Ymxpc2hSZXF1ZXN0c0luUXVldWUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVuYXV0aG9yaXplZFJlcXVl +c3RDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlQ291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ikhpc3RvcnlVcGRhdGVDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FsbENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0i +dG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRN +b25pdG9yaW5nTW9kZUNvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRUcmlnZ2VyaW5nQ291bnQiIFR5cGVOYW1lPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0 +ZU1vbml0b3JlZEl0ZW1zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiBUeXBl +TmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJNb2RpZnlTdWJzY3JpcHRpb25Db3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRh +dGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVDb3VudCIg +VHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUHVibGlzaENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hDb3VudCIgVHlwZU5hbWU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJT +dWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgVHlwZU5h +bWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWRkTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVmZXJlbmNlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNl +cnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVOb2Rl +c0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEZWxldGVSZWZlcmVuY2VzQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZUNvdW50IiBU +eXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOZXh0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRz +Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlF1ZXJ5Rmlyc3RDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlOZXh0Q291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlZ2lzdGVyTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5yZWdpc3Rlck5vZGVzQ291bnQiIFR5cGVOYW1l +PSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGlj +c0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkNsaWVudFVzZXJJZE9mU2Vzc2lvbiIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQ2xpZW50VXNlcklkSGlzdG9yeSIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudFVzZXJJZEhpc3RvcnkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkNsaWVudFVzZXJJZEhpc3Rvcnki +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmNvZGluZyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRQcm90b2Nv +bCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 +eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmljZUNvdW50ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUb3RhbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVycm9yQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlN0YXR1c1Jlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25J +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcmlvcml0 +eSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGlu +Z0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1heExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0VuYWJsZWQiIFR5 +cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vZGlmeUNvdW50 +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Fi +bGVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXB1Ymxpc2hSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVwdWJsaXNoTWVzc2FnZVJlcXVlc3RDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJSZXF1 +ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNmZXJyZWRUb0FsdENsaWVudENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaFJlcXVlc3RDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhQ2hh +bmdlTm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXRlUHVibGlzaFJlcXVlc3RD +b3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJy +ZW50S2VlcEFsaXZlQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3VycmVudExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVW5hY2tub3dsZWRnZWRNZXNzYWdlQ291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0 +b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5leHRTZXF1ZW5jZU51 +bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVu +dFF1ZXVlT3ZlckZsb3dDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9kZWxDaGFuZ2VT +dHJ1Y3R1cmVWZXJiTWFzayIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iTm9kZUFkZGVkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb2RlRGVsZXRlZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iUmVmZXJlbmNlQWRkZWQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZURlbGV0ZWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlQ2hhbmdlZCIgVmFsdWU9IjE2IiAvPg0KICA8 +L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGVs +Q2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWZmZWN0ZWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWZXJiIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2VtYW50 +aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFmZmVjdGVkVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSYW5nZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMb3ciIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +SGlnaCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRVVJbmZvcm1hdGlvbiIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5pdElkIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3Jp +cHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9u +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMaW5l +YXIiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxvZyIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG4iIFZhbHVlPSIyIiAv +Pg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbXBsZXhOdW1iZXJUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlYWwiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF4aXNJbmZvcm1hdGlvbiIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmdp +bmVlcmluZ1VuaXRzIiBUeXBlTmFtZT0idG5zOkVVSW5mb3JtYXRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJFVVJhbmdlIiBUeXBlTmFtZT0idG5zOlJhbmdlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iVGl0bGUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXhpc1NjYWxlVHlwZSIgVHlwZU5hbWU9InRuczpBeGlzU2NhbGVFbnVtZXJh +dGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiBMZW5ndGhGaWVsZD0iTm9PZkF4aXNTdGVwcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJYVlR5cGUiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlwZU5hbWU9 +Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9Im9w +YzpGbG9hdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJQcm9ncmFtRGlhZ25vc3RpY0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgVHlwZU5h +bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZUNsaWVudE5hbWUi +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52b2NhdGlv +bkNyZWF0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTGFzdE1ldGhvZElucHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFz +dE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9 +InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZFJldHVyblN0 +YXR1cyIgVHlwZU5hbWU9InRuczpTdGF0dXNSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHJvZ3JhbURpYWdub3N0aWMyRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQ3JlYXRlU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3JlYXRlQ2xpZW50TmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJJbnZvY2F0aW9uQ3JlYXRpb25UaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdFRyYW5zaXRpb25UaW1lIiBUeXBl +TmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENh +bGwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1l +dGhvZFNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1l +PSJ0bnM6QXJndW1lbnQiIExlbmd0aEZpZWxkPSJOb09mTGFzdE1ldGhvZElucHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9k +T3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVsZD0iTm9P +Zkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +TGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIg +TGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mTGFzdE1ldGhvZE91dHB1dFZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kQ2FsbFRpbWUiIFR5cGVOYW1lPSJvcGM6 +RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kUmV0dXJuU3RhdHVz +IiBUeXBlTmFtZT0idG5zOlN0YXR1c1Jlc3VsdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBbm5vdGF0aW9uIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2UiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQW5ub3RhdGlvblRpbWUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRXhjZXB0aW9uRGV2aWF0aW9uRm9ybWF0IiBMZW5ndGhJ +bkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBYnNvbHV0ZVZhbHVl +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50T2ZW +YWx1ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGVyY2Vu +dE9mUmFuZ2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlBl +cmNlbnRPZkVVUmFuZ2UiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlVua25vd24iIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KPC9v +cGM6VHlwZURpY3Rpb25hcnk+ + + + + NamespaceUri + + i=68 + i=7617 + + + http://opcfoundation.org/UA/ + + + + Deprecated + + i=68 + i=7617 + + + true + + + + KeyValuePair + + i=69 + i=7617 + + + KeyValuePair + + + + 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 + + + + 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 + + + + Union + + i=69 + i=7617 + + + Union + + + + 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=14533 + i=14829 + 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=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=12756 + i=12762 + 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=15396 + i=15402 + i=76 + + + + Default XML + + i=891 + i=8879 + i=76 + + + + Opc.Ua + + i=8254 + i=15039 + i=14829 + 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=16127 + i=18166 + i=18169 + i=18172 + i=18175 + i=8285 + i=8291 + i=14826 + i=12759 + i=12762 + 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=15402 + 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 +cGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCaXRG +aWVsZE1hc2tEYXRhVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRMb25nIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJLZXlWYWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IktleSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBl +PSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5VmFsdWVQYWlyIiB0eXBlPSJ0 +bnM6S2V5VmFsdWVQYWlyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZLZXlW +YWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iktl +eVZhbHVlUGFpciIgdHlwZT0idG5zOktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mS2V5VmFsdWVQYWly +IiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludFR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VHlwZSIgdHlwZT0i +dG5zOkVuZHBvaW50VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5k +cG9pbnRUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF +bmRwb2ludFR5cGUiIHR5cGU9InRuczpFbmRwb2ludFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBvaW50VHlw +ZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmF0aW9uYWxOdW1iZXIiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyYXRvciIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZW5vbWluYXRv +ciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSYXRpb25hbE51 +bWJlciIgdHlwZT0idG5zOlJhdGlvbmFsTnVtYmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSYXRpb25hbE51bWJlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpSYXRpb25hbE51bWJlciIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpMaXN0T2ZSYXRpb25hbE51bWJlciIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +VmVjdG9yIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmVjdG9yIiB0eXBlPSJ0bnM6VmVjdG9y +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZWZWN0b3IiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZlY3RvciIgdHlwZT0idG5zOlZlY3Rv +ciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9mVmVjdG9yIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURWZWN0b3Ii +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6VmVjdG9yIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlgiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlkiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IloiIHR5cGU9InhzOmRvdWJsZSIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl +bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6VGhyZWVEVmVjdG9yIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURWZWN0b3IiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRocmVlRFZlY3RvciIgdHlwZT0i +dG5zOlRocmVlRFZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9m +VGhyZWVEVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6Q2FydGVzaWFuQ29vcmRpbmF0ZXMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVz +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5D +b29yZGluYXRlcyIgdHlwZT0idG5zOkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYXJ0 +ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJU +aHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDYXJ0ZXNpYW5Db29yZGlu +YXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJYIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJZIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJaIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29v +cmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRENhcnRl +c2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOlRocmVlRENhcnRlc2lh +bkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0i +dG5zOkxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPcmllbnRhdGlvbiI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6T3JpZW50YXRpb24iIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk9yaWVudGF0aW9uIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcmllbnRhdGlvbiIgdHlwZT0idG5z +Ok9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxpc3RPZk9yaWVu +dGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpPcmllbnRhdGlvbiI+DQog +ICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJCIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRocmVlRE9y +aWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRE9yaWVudGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOlRo +cmVlRE9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxp +c3RPZlRocmVlRE9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZy +YW1lIiB0eXBlPSJ0bnM6RnJhbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkZyYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGcmFt +ZSIgdHlwZT0idG5zOkZyYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGcmFtZSIgdHlwZT0idG5zOkxpc3RPZkZyYW1l +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJUaHJlZURGcmFtZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGcmFtZSI+DQogICAgICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlw +ZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBl +PSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz +OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJUaHJlZURGcmFtZSIgdHlwZT0idG5zOlRocmVlREZyYW1lIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVERnJhbWUiIHR5cGU9InRuczpUaHJlZURGcmFtZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mVGhyZWVERnJhbWUiIHR5cGU9InRuczpMaXN0T2ZUaHJlZURGcmFtZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3BlbkZpbGVN +b2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVhZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJXcml0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcmFzZUV4aXN0aW5n +XzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVuZF84IiAvPg0KICAgIDwv +eHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +T3BlbkZpbGVNb2RlIiB0eXBlPSJ0bnM6T3BlbkZpbGVNb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik9wZW5GaWxlTW9kZSIgdHlwZT0idG5zOk9wZW5GaWxlTW9kZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcGVuRmls +ZU1vZGUiIHR5cGU9InRuczpMaXN0T2ZPcGVuRmlsZU1vZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBl +Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVXNlck5hbWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iVGh1bWJwcmludF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xlXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwSWRfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vbnltb3VzXzUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkF1dGhlbnRpY2F0ZWRVc2VyXzYiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eUNyaXRlcmlh +VHlwZSIgdHlwZT0idG5zOklkZW50aXR5Q3JpdGVyaWFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIHR5cGU9InRu +czpJZGVudGl0eUNyaXRlcmlhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSIgdHlwZT0idG5zOkxpc3RPZklk +ZW50aXR5Q3JpdGVyaWFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JpdGVyaWFUeXBlIiB0eXBlPSJ0bnM6 +SWRlbnRpdHlDcml0ZXJpYVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkNyaXRlcmlhIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIHR5cGU9InRuczpJZGVudGl0 +eU1hcHBpbmdSdWxlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSWRl +bnRpdHlNYXBwaW5nUnVsZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6SWRlbnRpdHlNYXBw +aW5nUnVsZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyaWNDb2RlIiB0eXBlPSJ4 +czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhwb25l +bnQiIHR5cGU9InhzOmJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFscGhhYmV0aWNDb2RlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW5jeSIgdHlwZT0idWE6 +TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJy +ZW5jeVVuaXRUeXBlIiB0eXBlPSJ0bnM6Q3VycmVuY3lVbml0VHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQ3VycmVuY3lVbml0VHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lVbml0VHlwZSIgdHlwZT0idG5zOkN1 +cnJlbmN5VW5pdFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkN1cnJlbmN5VW5pdFR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZDdXJyZW5jeVVuaXRUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpzaW1wbGVUeXBlICBuYW1lPSJUcnVzdExpc3RNYXNrcyI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZENlcnRpZmljYXRlc18xIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdGVkQ3Jsc18yIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJDZXJ0aWZpY2F0ZXNfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyQ3Jsc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJBbGxfMTUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3RNYXNrcyIgdHlwZT0idG5zOlRy +dXN0TGlzdE1hc2tzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcnVzdExpc3REYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3BlY2lm +aWVkTGlzdHMiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRl +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVHJ1c3RlZENybHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJD +ZXJ0aWZpY2F0ZXMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJDcmxzIiB0eXBl +PSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRydXN0TGlzdERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOlRydXN0TGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOkxpc3RPZlRydXN0TGlzdERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWNpbWFsRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNjYWxlIiB0eXBlPSJ4czpz +aG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5 +cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJEZWNpbWFsRGF0YVR5cGUiIHR5cGU9InRuczpEZWNpbWFsRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTdHJ1Y3R1cmVEZXNj +cmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkVudW1EYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTaW1wbGVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVTY2hlbWFIZWFk +ZXIiIHR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBlPSJ0bnM6 +RGF0YVR5cGVTY2hlbWFIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBl +PSJ0bnM6TGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs +ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0 +aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZEYXRhVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVR5 +cGVEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iU3RydWN0dXJlRGVzY3JpcHRpb24iPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5 +cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVmaW5p +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZURlc2NyaXB0 +aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OlN0cnVjdHVyZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVzY3JpcHRpb24iPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6RGF0YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVmaW5pdGlvbiIgdHlwZT0idG5zOkVudW1E +ZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkVudW1EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVudW1EZXNjcmlwdGlvbiIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVzY3JpcHRpb24i +IHR5cGU9InRuczpFbnVtRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJv +dW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZkVudW1EZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24g +YmFzZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQnVpbHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9u +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpbXBsZVR5 +cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +U2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlVHlwZURlc2NyaXB0 +aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJVQUJpbmFyeUZpbGVEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZVNjaGVtYUhl +YWRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTY2hlbWFMb2NhdGlvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbGVIZWFkZXIiIHR5cGU9 +InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQm9keSIgdHlwZT0idWE6VmFyaWFudCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp +b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVUFCaW5hcnlGaWxlRGF0YVR5cGUiIHR5cGU9InRuczpVQUJpbmFyeUZp +bGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVUFCaW5hcnlG +aWxlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VUFCaW5hcnlGaWxlRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVUFCaW5hcnlGaWxl +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IlB1YlN1YlN0YXRlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry +aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGF1c2VkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9Ik9wZXJhdGlvbmFsXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkVycm9yXzMiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOlB1YlN1YlN0YXRlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJTdGF0ZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViU3RhdGUiIHR5cGU9InRu +czpQdWJTdWJTdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YlN0YXRlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0 +TWV0YURhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJGaWVsZHMiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1ldGFEYXRhIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRDbGFz +c0lkIiB0eXBlPSJ1YTpHdWlkIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb24iIHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVy +c2lvbkRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1l +dGFEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRNZXRhRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRhRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mRGF0YVNldE1ldGFEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRNZXRhRGF0YSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZEZsYWdzIiB0 +eXBlPSJ0bnM6RGF0YVNldEZpZWxkRmxhZ3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2Rl +SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN +YXhTdHJpbmdMZW5ndGgiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRJZCIgdHlwZT0idWE6R3VpZCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWVsZE1ldGFEYXRhIiB0eXBlPSJ0bnM6RmllbGRNZXRhRGF0YSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRmllbGRNZXRhRGF0YSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRNZXRhRGF0YSIgdHlwZT0idG5zOkZpZWxk +TWV0YURhdGEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkZpZWxkTWV0YURhdGEiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1l +dGFEYXRhIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBl +ICBuYW1lPSJEYXRhU2V0RmllbGRGbGFncyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Inhz +OnVuc2lnbmVkU2hvcnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIHR5cGU9InRuczpEYXRh +U2V0RmllbGRGbGFncyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29uZmlndXJhdGlv +blZlcnNpb25EYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWFqb3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWlub3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUi +IHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lv +bkRhdGFUeXBlIiB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mQ29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3Vy +YXRpb25WZXJzaW9uRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVNldEZvbGRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFEYXRh +IiB0eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRTb3VyY2UiIHR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRE +YXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0 +YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRh +U2V0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZERh +dGFTZXRTb3VyY2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbEhpbnQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGVhZGJhbmRUeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVhZGJhbmRWYWx1ZSIgdHlwZT0ieHM6ZG91YmxlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzdGl0dXRlVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1ldGFEYXRhUHJvcGVydGllcyIgdHlw +ZT0idWE6TGlzdE9mUXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkVmFy +aWFibGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHVibGlz +aGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZFZh +cmlhYmxlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 +eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGVkRGF0YSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIg +dHlwZT0idG5zOlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHVibGlz +aGVkRGF0YUl0ZW1zRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6UHVibGlzaGVk +RGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZWxlY3RlZEZpZWxkcyIgdHlwZT0idG5zOkxpc3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmlsdGVyIiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVk +RXZlbnRzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxp +c2hlZEV2ZW50c0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZEV2ZW50 +c0RhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayI+DQog +ICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRG +aWVsZENvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6RGF0YVNldEZpZWxkQ29udGVudE1hc2siIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRD +b250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRl +bnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldEZpZWxkQ29udGVudE1hc2siIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRX +cml0ZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcklkIiB0 +eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENv +bnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlG +cmFtZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRX +cml0ZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgdHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRXcml0ZXJEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFdyaXRlckRhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +V3JpdGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRXcml0ZXJEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFT +ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0V3JpdGVy +TWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUHViU3ViR3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViR3JvdXBEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViR3JvdXBE +YXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1Ykdy +b3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJHcm91cERhdGFUeXBlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0ZXJH +cm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2VlcEFsaXZlVGltZSIg +dHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJpb3JpdHkiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zcG9y +dFNldHRpbmdzIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZVNldHRpbmdz +IiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcnMiIHR5cGU9InRu +czpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6V3JpdGVyR3JvdXBEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3Jv +dXBEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZldyaXRl +ckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJHcm91cERhdGFUeXBlIiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0 +ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVy +R3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZldyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZXJHcm91cE1lc3Nh +Z2VEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJH +cm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJQdWJsaXNoZXJJZCIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlv +blByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRTZXR0 +aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBzIiB0eXBlPSJ0bnM6 +TGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwcyIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29ubmVjdGlvbkRh +dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJDb25uZWN0 +aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNvbm5lY3Rpb25EYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9m +UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBl +IiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0 +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrQWRkcmVzc0RhdGFU +eXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgdHlw +ZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzRGF0 +YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOZXR3b3JrQWRk +cmVzc1VybERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXJsIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +QWRkcmVzc1VybERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NVcmxEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29y +a0FkZHJlc3NVcmxEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3 +b3JrQWRkcmVzc1VybERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNZXNzYWdlU2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0UmVhZGVycyIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N +CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwRGF0YVR5cGUiIHR5 +cGU9InRuczpSZWFkZXJHcm91cERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0 +bnM6UmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw +ZSIgdHlwZT0idG5zOlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlYWRl +ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZSZWFkZXJHcm91cFRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJl +YWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlJlYWRl +ckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlw +ZSIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0UmVh +ZGVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlcklkIiB0eXBlPSJ1 +YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0 +ZXJHcm91cElkIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0V3JpdGVySWQiIHR5cGU9InhzOnVuc2lnbmVkU2hv +cnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRh +RGF0YSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50 +TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVjZWl2ZVRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5RnJh +bWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRSZWFkZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWly +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXQiIHR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0UmVhZGVyRGF0YVR5 +cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRSZWFkZXJEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNl +dFJlYWRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0UmVhZGVyRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5 +cGU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJUcmFu +c3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBl +PSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRE +YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERh +dGFTZXREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0 +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldFZhcmlhYmxlcyIgdHlw +ZT0idG5zOkxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgdHlwZT0idG5zOlRhcmdldFZhcmlh +Ymxlc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUYXJnZXRW +YXJpYWJsZXNEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpUYXJnZXRWYXJpYWJsZXNE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRUYXJnZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkSWQiIHR5cGU9 +InVhOkd1aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlY2Vp +dmVySW5kZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlSW5kZXhSYW5nZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRs +aW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdmVycmlkZVZh +bHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRUYXJnZXRE +YXRhVHlwZSIgdHlwZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIHR5cGU9InRu +czpGaWVsZFRhcmdldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGaWVsZFRhcmdldERhdGFUeXBlIiB0eXBl +PSJ0bnM6TGlzdE9mRmllbGRUYXJnZXREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4N +CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +TGFzdFVzYWJsZVZhbHVlXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJy +aWRlVmFsdWVfMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgdHlwZT0idG5zOk92 +ZXJyaWRlVmFsdWVIYW5kbGluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIHR5cGU9InRuczpPdmVycmlkZVZhbHVl +SGFuZGxpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6TGlzdE9mT3ZlcnJpZGVWYWx1ZUhh +bmRsaW5nIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxl +eENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlN1 +YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyZW50Tm9kZU5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRh +dGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0TWly +cm9yRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiIHR5 +cGU9InRuczpMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJTdWJDb25m +aWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlzaGVkRGF0YVNl +dERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ29ubmVjdGlvbnMiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJDb25uZWN0aW9u +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJh +dGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJD +b25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNv +bmZpZ3VyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBl +IiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZWZpbmVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlXzIiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0i +dG5zOkRhdGFTZXRPcmRlcmluZ1R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRh +dGFTZXRPcmRlcmluZ1R5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8 +eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rp +b24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFz +ayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNz +YWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZV +YWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwVmVyc2lvbiIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEYXRhU2V0T3JkZXJpbmciIHR5cGU9InRuczpEYXRhU2V0T3JkZXJpbmdUeXBl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdP +ZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdPZmZzZXQiIHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAg +ICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRh +VHlwZSIgdHlwZT0idG5zOlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwV3JpdGVy +R3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkxpc3RPZlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVYWRwRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwRGF0YVNl +dE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbmZpZ3VyZWRTaXplIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1i +ZXIiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0i +dG5zOlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRXcml0ZXJN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K +ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlw +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJH +cm91cFZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1iZXIiIHR5cGU9InhzOnVu +c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldENsYXNzSWQiIHR5cGU9InVhOkd1 +aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo +aW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlY2VpdmVPZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdPZmZzZXQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRS +ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURh +dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9 +Ikpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFz +ZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2si +IHR5cGU9InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbk5ldHdv +cmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZKc29uTmV0d29ya01lc3NhZ2VD +b250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21w +bGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNv +bldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6SnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZKc29uV3Jp +dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpz +b25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp +bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRN +YXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldE1l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbkRhdGFTZXRNZXNz +YWdlQ29udGVudE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRh +U2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5 +cGUiIHR5cGU9InRuczpKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +SnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZKc29uRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5 +cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0TWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6SnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldFJlYWRlck1l +c3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25U +cmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5 +cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5QWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUi +IHR5cGU9InRuczpEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFn +cmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9y +dERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZXBlYXRDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTWVzc2FnZVJlcGVhdERlbGF5IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFncmFt +V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mRGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJva2Vy +Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4 +ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkNvbm5lY3Rpb25UcmFu +c3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXNvdXJjZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0 +aW9uUHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog +ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJv +a2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZCcm9rZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFuc3Bv +cnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlz +dE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkXzAiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkJlc3RFZmZvcnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iQXRMZWFzdE9uY2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QXRNb3N0T25jZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFjdGx5T25j +ZV80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIgdHlwZT0idG5z +OkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlP +ZlNlcnZpY2UiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5z +cG9ydFF1YWxpdHlPZlNlcnZpY2UiIHR5cGU9InRuczpMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVzb3VyY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlv +blByb2ZpbGVVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJh +bnRlZSIgdHlwZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpC +cm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mQnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0i +dG5zOkxpc3RPZkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRhdGFT +ZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VVcmki +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJyb2tl +clRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik1ldGFEYXRhVXBkYXRlVGltZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv +bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJEYXRh +U2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ikxpc3RPZkJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRh +dGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p +eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0UmVhZGVy +VHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VV +cmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJy +b2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFJlYWRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFU +eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0UmVh +ZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5z +OkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJva2VyRGF0 +YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQnJva2VyRGF0YVNl +dFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEaWFnbm9zdGljc0xldmVsIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QmFzaWNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZWRfMSIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb18yIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJMb2dfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVi +dWdfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzTGV2ZWwiIHR5cGU9InRuczpEaWFnbm9zdGljc0xl +dmVsIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVs +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +c0xldmVsIiB0eXBlPSJ0bnM6RGlhZ25vc3RpY3NMZXZlbCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVsIiB0eXBlPSJ0bnM6 +TGlzdE9mRGlhZ25vc3RpY3NMZXZlbCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmlj +YXRpb24iPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbl8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJFcnJvcl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2lt +cGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xh +c3NpZmljYXRpb24iIHR5cGU9InRuczpQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNh +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3Rp +Y3NDb3VudGVyQ2xhc3NpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiB0eXBl +PSJ0bnM6UHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3RpY3ND +b3VudGVyQ2xhc3NpZmljYXRpb24iIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJEaWFnbm9zdGljc0Nv +dW50ZXJDbGFzc2lmaWNhdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFsaWFzTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVk +TmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlZmVyZW5jZWROb2RlcyIgdHlwZT0idWE6TGlzdE9mRXhwYW5kZWROb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiIHR5 +cGU9InRuczpBbGlhc05hbWVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6QWxpYXNOYW1lRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQWxpYXNOYW1l +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IklkVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyaWNfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iU3RyaW5nXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ikd1aWRfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3BhcXVlXzMiIC8+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJJZFR5cGUiIHR5cGU9InRuczpJZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZklkVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iSWRUeXBlIiB0eXBlPSJ0bnM6SWRUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZklkVHlwZSIgdHlwZT0idG5zOkxpc3RPZklkVHlw +ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iTm9kZUNsYXNzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zcGVjaWZpZWRfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iT2JqZWN0XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhcmlhYmxlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF80 +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RUeXBlXzgiIC8+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlVHlwZV8xNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8zMiIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGF0YVR5cGVfNjQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlZpZXdfMTI4IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJtaXNzaW9uVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 +L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25UeXBlIiB0eXBl +PSJ0bnM6UGVybWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vz +c0xldmVsVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkQnl0ZSI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJBY2Nlc3NMZXZlbFR5cGUiIHR5cGU9InRuczpBY2Nlc3NMZXZlbFR5cGUiIC8+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vzc0xldmVsRXhUeXBlIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUi +IHR5cGU9InRuczpBY2Nlc3NMZXZlbEV4VHlwZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iRXZlbnROb3RpZmllclR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNp +Z25lZEJ5dGUiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllclR5cGUiIHR5cGU9InRuczpFdmVudE5vdGlm +aWVyVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUm9sZVBlcm1pc3Npb25UeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25zIiB0eXBlPSJ0bnM6UGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJvbGVQZXJt +aXNzaW9uVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Um9sZVBlcm1pc3Npb25UeXBlIiB0eXBlPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlRGVm +aW5pdGlvbiIgdHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVEZWZpbml0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9InRuczpE +YXRhVHlwZURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgdHlwZT0idG5z +Okxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iU3RydWN0dXJlVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0 +cnVjdHVyZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJ1Y3R1cmVXaXRo +T3B0aW9uYWxGaWVsZHNfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb25f +MiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUiIHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVGaWVsZCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVz +Y3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNPcHRpb25hbCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6U3RydWN0dXJlRmll +bGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZUZpZWxkIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVGaWVs +ZCIgdHlwZT0idG5zOlN0cnVjdHVyZUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVGaWVsZCIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZUZpZWxkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkJhc2VEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUi +IHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0dXJlRmllbGQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBl +PSJ0bnM6U3RydWN0dXJlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mU3RydWN0dXJlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlRGVmaW5pdGlvbiIgdHlwZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZT +dHJ1Y3R1cmVEZWZpbml0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVmaW5pdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250 +ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlw +ZURlZmluaXRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mRW51bUZpZWxkIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURlZmluaXRpb24iIHR5cGU9InRuczpFbnVtRGVmaW5p +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlZmluaXRpb24i +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVudW1EZWZpbml0 +aW9uIiB0eXBlPSJ0bnM6RW51bURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZWZpbml0aW9uIiB0 +eXBlPSJ0bnM6TGlzdE9mRW51bURlZmluaXRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNs +YXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJCcm93c2VOYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzcGxheU5h +bWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxp +emVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJXcml0ZU1hc2siIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyUm9sZVBl +cm1pc3Npb25zIiB0eXBlPSJ0bnM6TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNl +Tm9kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlIiB0eXBlPSJ0 +bnM6Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTm9kZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZSIgdHlwZT0idG5zOk5v +ZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZk5vZGUiIHR5cGU9InRuczpMaXN0T2ZOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJbnN0YW5jZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikluc3RhbmNlTm9kZSIg +dHlwZT0idG5zOkluc3RhbmNlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHlw +ZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhz +OmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl +eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlR5cGVO +b2RlIiB0eXBlPSJ0bnM6VHlwZU5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9i +amVjdE5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAg +PHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0Tm9kZSIgdHlwZT0idG5zOk9i +amVjdE5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9iamVjdFR5cGVOb2RlIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ik9iamVjdFR5cGVOb2RlIiB0eXBlPSJ0bnM6T2JqZWN0VHlwZU5vZGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0 +YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +UmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNj +ZXNzTGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWduZWRC +eXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWluaW11 +bVNhbXBsaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3Rvcml6aW5nIiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxF +eCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlTm9kZSIg +dHlwZT0idG5zOlZhcmlhYmxlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFy +aWFibGVUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpUeXBlTm9kZSI+DQogICAgICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBl +IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJWYXJpYWJsZVR5cGVOb2RlIiB0eXBlPSJ0bnM6VmFyaWFibGVUeXBl +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN5bW1ldHJpYyIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Iklu +dmVyc2VOYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIHR5cGU9InRuczpSZWZlcmVuY2VUeXBlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTWV0aG9kTm9kZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpJbnN0YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRXhlY3V0YWJsZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJFeGVjdXRhYmxlIiB0eXBlPSJ4czpi +b29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRob2ROb2RlIiB0eXBlPSJ0bnM6TWV0aG9kTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld05vZGUiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmlld05vZGUiIHR5cGU9InRuczpWaWV3 +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YVR5cGVOb2RlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRh +dGFUeXBlTm9kZSIgdHlwZT0idG5zOkRhdGFUeXBlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUmVmZXJlbmNlTm9kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0ludmVyc2Ui +IHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VOb2RlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlTm9kZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlTm9kZSIg +dHlwZT0idG5zOlJlZmVyZW5jZU5vZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZU5vZGUiIHR5cGU9InRu +czpMaXN0T2ZSZWZlcmVuY2VOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJBcmd1bWVudCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5cGU9InVhOkxpc3RP +ZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFyZ3VtZW50IiB0eXBlPSJ0bnM6QXJndW1lbnQi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFyZ3VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcmd1bWVudCIgdHlwZT0idG5zOkFy +Z3VtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZBcmd1bWVudCIgdHlwZT0idG5zOkxpc3RPZkFyZ3VtZW50IiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVt +VmFsdWVUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJW +YWx1ZSIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzcGxheU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIg +dHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJFbnVtVmFsdWVUeXBlIiB0eXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bVZhbHVlVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bVZhbHVlVHlwZSIgdHlwZT0idG5zOkVudW1W +YWx1ZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkVudW1WYWx1ZVR5cGUiIHR5cGU9InRuczpMaXN0T2ZFbnVtVmFs +dWVUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJFbnVtRmllbGQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2Ui +Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RW51bVZhbHVlVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRmllbGQiIHR5 +cGU9InRuczpFbnVtRmllbGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVu +dW1GaWVsZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51 +bUZpZWxkIiB0eXBlPSJ0bnM6RW51bUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtRmllbGQiIHR5cGU9InRu +czpMaXN0T2ZFbnVtRmllbGQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ik9wdGlvblNldCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbGlkQml0 +cyIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ik9wdGlvblNldCIgdHlwZT0idG5zOk9wdGlvblNldCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mT3B0aW9uU2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJPcHRpb25TZXQiIHR5cGU9InRuczpPcHRpb25TZXQiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +Zk9wdGlvblNldCIgdHlwZT0idG5zOkxpc3RPZk9wdGlvblNldCIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5pb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJVbmlvbiIgdHlwZT0idG5zOlVuaW9uIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVbmlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iVW5pb24iIHR5cGU9InRuczpVbmlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVW5pb24iIHR5cGU9 +InRuczpMaXN0T2ZVbmlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJOb3JtYWxpemVkU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRGVjaW1hbFN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkR1cmF0aW9uU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZVN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGVTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJEdXJhdGlvbiIgdHlwZT0ieHM6ZG91YmxlIiAvPg0KDQogIDx4czpl +bGVtZW50IG5hbWU9IlV0Y1RpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiAvPg0KDQogIDx4czplbGVt +ZW50IG5hbWU9IkxvY2FsZUlkIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlRpbWVab25lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik9mZnNldCIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRheWxpZ2h0U2F2aW5nSW5PZmZzZXQiIHR5cGU9Inhz +OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lWm9uZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6VGltZVpvbmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +VGltZVpvbmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGltZVpvbmVEYXRhVHlwZSIgdHlwZT0idG5zOlRpbWVab25lRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZlRpbWVab25lRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZUaW1lWm9uZURhdGFUeXBlIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkluZGV4 +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlZ2Vy +SWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJB +cHBsaWNhdGlvblR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2ZXJfMCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iQ2xpZW50XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkNsaWVudEFuZFNlcnZlcl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNj +b3ZlcnlTZXJ2ZXJfMyIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgdHlwZT0idG5zOkFwcGxp +Y2F0aW9uVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXBwbGljYXRpb25EZXNj +cmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBw +bGljYXRpb25VcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2R1Y3RVcmkiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFwcGxpY2F0aW9uTmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9u +VHlwZSIgdHlwZT0idG5zOkFwcGxpY2F0aW9uVHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iR2F0ZXdheVNlcnZlclVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlz +Y292ZXJ5UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5VXJscyIgdHlwZT0i +dWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFw +cGxpY2F0aW9uRGVzY3JpcHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlv +bkRlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkFwcGxpY2F0aW9uRGVzY3Jp +cHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlJlcXVlc3RIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFt +cCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXR1cm5EaWFnbm9zdGljcyIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1 +ZGl0RW50cnlJZCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZW91dEhpbnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlv +bmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlc3BvbnNlSGVhZGVyIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXAiIHR5cGU9InhzOmRh +dGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGFuZGxlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VydmljZVJlc3VsdCIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmljZURpYWdub3N0aWNzIiB0 +eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cmluZ1RhYmxlIiB0eXBlPSJ1YTpMaXN0T2ZTdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGRpdGlvbmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpS +ZXNwb25zZUhlYWRlciIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJzaW9uVGltZSIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VG +YXVsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9u +c2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlRmF1bHQiIHR5cGU9InRuczpTZXJ2aWNlRmF1bHQiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25sZXNzSW52b2tlUmVxdWVzdFR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVyaXNWZXJzaW9u +IiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiB0eXBlPSJ0 +bnM6U2Vzc2lvbmxlc3NJbnZva2VSZXF1ZXN0VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25zZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWVzcGFjZVVyaXMiIHR5cGU9InVhOkxpc3RPZlN0 +cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9r +ZVJlc3BvbnNlVHlwZSIgdHlwZT0idG5zOlNlc3Npb25sZXNzSW52b2tlUmVzcG9uc2VUeXBlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2Fs +ZUlkcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpcyIgdHlwZT0idWE6TGlzdE9m +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJz +UmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iRmluZFNlcnZlcnNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlcnMiIHR5cGU9InRuczpMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2Ui +IHR5cGU9InRuczpGaW5kU2VydmVyc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJTZXJ2ZXJPbk5ldHdvcmsiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJDYXBhYmlsaXRpZXMiIHR5cGU9 +InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpTZXJ2ZXJPbk5ldHdvcmsiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNlcnZlck9uTmV0d29yayI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyT25OZXR3b3JrIiB0eXBlPSJ0bnM6U2Vy +dmVyT25OZXR3b3JrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpMaXN0T2ZT +ZXJ2ZXJPbk5ldHdvcmsiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5z +OlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTdGFydGluZ1JlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVjb3Jkc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3 +b3JrUmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RDb3VudGVyUmVzZXRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vy +dmVycyIgdHlwZT0idG5zOkxpc3RPZlNlcnZlck9uTmV0d29yayIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiB0eXBlPSJ0 +bnM6RmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +Lz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSI+DQogICAg +PHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IkludmFsaWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduXzIiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25BbmRFbmNyeXB0XzMiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlU2Vj +dXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCg0KICA8eHM6c2lt +cGxlVHlwZSAgbmFtZT0iVXNlclRva2VuVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9 +InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFub255bW91c18wIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyTmFtZV8xIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJJc3N1ZWRUb2tlbl8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuVHlwZSIgdHlwZT0i +dG5zOlVzZXJUb2tlblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJUb2tl +blBvbGljeSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9s +aWN5SWQiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRva2VuVHlwZSIgdHlwZT0idG5zOlVzZXJUb2tlblR5 +cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlZFRva2Vu +VHlwZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNzdWVyRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuUG9saWN5IiB0eXBlPSJ0bnM6VXNlclRva2Vu +UG9saWN5IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVc2VyVG9rZW5Qb2xp +Y3kiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tl +blBvbGljeSIgdHlwZT0idG5zOlVzZXJUb2tlblBvbGljeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVXNlclRva2VuUG9s +aWN5IiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludERlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVy +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlw +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlckNlcnRpZmljYXRlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 +eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXNlcklkZW50aXR5VG9rZW5zIiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlMZXZlbCIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpF +bmRwb2ludERlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiB0eXBlPSJ0 +bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlw +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9j +YWxlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9maWxlVXJpcyIgdHlwZT0idWE6TGlz +dE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkdldEVuZHBv +aW50c1JlcXVlc3QiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXF1ZXN0IiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJHZXRFbmRwb2ludHNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50cyIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRp +b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2V0RW5kcG9pbnRzUmVz +cG9uc2UiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iUmVnaXN0ZXJlZFNlcnZlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9kdWN0VXJp +IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJOYW1lcyIgdHlwZT0idWE6TGlzdE9mTG9jYWxpemVk +VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclR5cGUiIHR5cGU9InRuczpBcHBsaWNhdGlvblR5cGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkdhdGV3YXlTZXJ2ZXJVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpc2NvdmVyeVVybHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFwaG9y +ZUZpbGVQYXRoIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc09ubGluZSIgdHlwZT0ieHM6Ym9vbGVhbiIg +bWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3Rl +cmVkU2VydmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWdpc3RlcmVk +U2VydmVyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdp +c3RlcmVkU2VydmVyIiB0eXBlPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVnaXN0 +ZXJlZFNlcnZlciIgdHlwZT0idG5zOkxpc3RPZlJlZ2lzdGVyZWRTZXJ2ZXIiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2Vy +dmVyUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXIiIHR5cGU9InRu +czpSZWdpc3RlcmVkU2VydmVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWdpc3RlclNlcnZlclJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXJS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIHR5 +cGU9InRuczpEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEaXNjb3ZlcnlD +b25maWd1cmF0aW9uIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1kbnNTZXJ2ZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2Fw +YWJpbGl0aWVzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOk1kbnNEaXNj +b3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3Rl +clNlcnZlcjJSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlciIgdHlw +ZT0idG5zOlJlZ2lzdGVyZWRTZXJ2ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyMlJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25z +ZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMi +IHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXIyUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlw +ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Iklzc3VlXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlJlbmV3XzEiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIHR5cGU9InRuczpT +ZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNo +YW5uZWxTZWN1cml0eVRva2VuIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDaGFubmVsSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb2tlbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlZEF0IiB0eXBl +PSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZExpZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNoYW5uZWxTZWN1cml0eVRva2VuIiB0eXBlPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4i +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRQcm90b2NvbFZlcnNpb24iIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXF1ZXN0VHlwZSIgdHlwZT0idG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ2xpZW50Tm9uY2UiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZExp +ZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9wZW5T +ZWN1cmVDaGFubmVsUmVxdWVzdCIgdHlwZT0idG5zOk9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclByb3RvY29sVmVyc2lvbiIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5VG9rZW4iIHR5cGU9InRuczpDaGFubmVsU2VjdXJpdHlUb2tlbiIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZl +ck5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOk9wZW5TZWN1 +cmVDaGFubmVsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vj +dXJlQ2hhbm5lbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIHR5 +cGU9InRuczpDbG9zZVNlY3VyZUNoYW5uZWxSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJDbG9zZVNlY3VyZUNoYW5uZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9zZVNlY3Vy +ZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDZXJ0aWZpY2F0ZURh +dGEiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNpZ25lZFNvZnR3YXJl +Q2VydGlmaWNhdGUiIHR5cGU9InRuczpTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduZWRTb2Z0d2Fy +ZUNlcnRpZmljYXRlIiB0eXBlPSJ0bnM6U2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mU2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3 +YXJlQ2VydGlmaWNhdGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2Vzc2lvbkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlRGF0YSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTaWduYXR1cmUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVEYXRhIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0 +YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRlU2Vzc2lvblJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpB +cHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbk5hbWUiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNsaWVudE5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIg +dHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkU2Vzc2lvblRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVz +cG9uc2VNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJDcmVhdGVTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVy +IiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRTZXNzaW9uVGlt +ZW91dCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2VydGlm +aWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckVuZHBvaW50cyIgdHlwZT0idG5z +Okxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIg +dHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTaWduYXR1 +cmUiIHR5cGU9InRuczpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVxdWVzdE1lc3NhZ2VTaXplIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25SZXNw +b25zZSIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlBvbGljeUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iIHR5cGU9InRuczpV +c2VySWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQW5vbnltb3Vz +SWRlbnRpdHlUb2tlbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iIHR5cGU9InRuczpBbm9ueW1v +dXNJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVc2VyTmFtZUlk +ZW50aXR5VG9rZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg +ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlck5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJQYXNzd29yZCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVu +Y3J5cHRpb25BbGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlVzZXJOYW1lSWRlbnRpdHlUb2tlbiIgdHlwZT0idG5zOlVzZXJOYW1lSWRl +bnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iWDUwOUlkZW50aXR5VG9r +ZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGVEYXRhIiB0eXBlPSJ4 +czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJYNTA5SWRl +bnRpdHlUb2tlbiIgdHlwZT0idG5zOlg1MDlJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJJc3N1ZWRJZGVudGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENvbnRl +bnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRva2VuRGF0YSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuY3J5cHRpb25B +bGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv +eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Iklzc3VlZElkZW50aXR5VG9rZW4iIHR5cGU9InRuczpJc3N1ZWRJZGVudGl0eVRva2VuIiAv +Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlJzYUVuY3J5cHRlZFNlY3JldCIgdHlwZT0idWE6VmFy +aWFudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRTaWduYXR1cmUiIHR5cGU9InRu +czpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50U29mdHdhcmVDZXJ0aWZpY2F0ZXMiIHR5cGU9InRuczpM +aXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VXNlclRva2VuU2lnbmF0dXJlIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXF1ZXN0IiB0eXBlPSJ0 +bnM6QWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWN0aXZhdGVTZXNzaW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlz +dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3Rp +Y0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWN0aXZhdGVTZXNz +aW9uUmVzcG9uc2UiIHR5cGU9InRuczpBY3RpdmF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNsb3NlU2Vz +c2lvblJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vzc2lvblJl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2Vzc2lvblJlc3BvbnNlIiB0eXBlPSJ0bnM6Q2xvc2VT +ZXNzaW9uUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNhbmNlbFJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhhbmRsZSIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXF1ZXN0IiB0eXBlPSJ0 +bnM6Q2FuY2VsUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FuY2VsUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxDb3VudCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXNwb25zZSIgdHlw +ZT0idG5zOkNhbmNlbFJlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJOb2Rl +QXR0cmlidXRlc01hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFjY2Vzc0xldmVsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IkFycmF5RGltZW5zaW9uc18yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +cm93c2VOYW1lXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5zTm9M +b29wc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhVHlwZV8xNiIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzY3JpcHRpb25fMzIiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BsYXlOYW1lXzY0IiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJFdmVudE5vdGlmaWVyXzEyOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iRXhlY3V0YWJsZV8yNTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ikhpc3Rvcml6aW5nXzUxMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXJz +ZU5hbWVfMTAyNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNBYnN0cmFjdF8y +MDQ4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbF80MDk2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb2RlQ2xhc3NfODE5 +MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUlkXzE2Mzg0IiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTeW1tZXRyaWNfMzI3NjgiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlVzZXJBY2Nlc3NMZXZlbF82NTUzNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iVXNlckV4ZWN1dGFibGVfMTMxMDcyIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJVc2VyV3JpdGVNYXNrXzI2MjE0NCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVmFsdWVSYW5rXzUyNDI4OCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iV3JpdGVNYXNrXzEwNDg1NzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhbHVlXzIwOTcxNTIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFU +eXBlRGVmaW5pdGlvbl80MTk0MzA0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJS +b2xlUGVybWlzc2lvbnNfODM4ODYwOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QWNjZXNzUmVzdHJpY3Rpb25zXzE2Nzc3MjE2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJBbGxfMzM1NTQ0MzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VO +b2RlXzI2NTAxMjIwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RfMjY1 +MDEzNDgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdFR5cGVfMjY1MDMy +NjgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlXzI2NTcxMzgzIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZVR5cGVfMjg2MDA0MzgiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF8yNjYzMjU0OCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8yNjUzNzA2MCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVmlld18yNjUwMTM1NiIgLz4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVBdHRy +aWJ1dGVzTWFzayIgdHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzTWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFt +ZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6 +ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV3JpdGVNYXNrIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQXR0cmlidXRlcyIgdHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RBdHRyaWJ1 +dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAg +ICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0QXR0cmlidXRlcyIgdHlwZT0idG5z +Ok9iamVjdEF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAg +ICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFy +aWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMi +IHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWdu +ZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +ckFjY2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0i +eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +SGlzdG9yaXppbmciIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyIgdHlwZT0idG5zOlZhcmlhYmxlQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTWV0aG9kQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFeGVjdXRhYmxlIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlckV4ZWN1dGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1ldGhvZEF0dHJpYnV0ZXMiIHR5cGU9InRuczpNZXRob2RBdHRyaWJ1 +dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyIgdHlwZT0idG5zOk9iamVjdFR5 +cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZVR5cGVB +dHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJp +YW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIg +dHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlVHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpWYXJp +YWJsZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVu +Y2VUeXBlQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0 +eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3ltbWV0cmljIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52ZXJzZU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRl +eHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVu +Y2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlQXR0cmli +dXRlcyIgdHlwZT0idG5zOlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhVHlwZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6RGF0YVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJWaWV3QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDb250YWluc05vTG9vcHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudE5vdGlmaWVyIiB0eXBlPSJ4czp1bnNpZ25l +ZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv +eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZpZXdBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6Vmlld0F0 +dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZh +bHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJHZW5lcmlj +QXR0cmlidXRlVmFsdWUiIHR5cGU9InRuczpHZW5lcmljQXR0cmlidXRlVmFsdWUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlVmFsdWVzIiB0eXBlPSJ0bnM6TGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAg +PC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiIHR5cGU9InRuczpH +ZW5lcmljQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNJ +dGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYXJlbnRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWROZXdOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +QnJvd3NlTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVDbGFzcyIgdHlwZT0idG5z +Ok5vZGVDbGFzcyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9k +ZUF0dHJpYnV0ZXMiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uIiB0 +eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpBZGROb2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFkZE5vZGVzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNJdGVtIiB0eXBlPSJ0bnM6QWRkTm9kZXNJ +dGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZBZGROb2Rlc0l0ZW0i +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkFkZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRlZE5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzdWx0IiB0eXBlPSJ0 +bnM6QWRkTm9kZXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFk +ZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJBZGROb2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkFkZE5vZGVzUmVzdWx0IiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBZGRO +b2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkxpc3RPZkFkZE5vZGVzUmVzdWx0IiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGROb2Rlc1JlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb0FkZCIgdHlwZT0idG5zOkxp +c3RPZkFkZE5vZGVzSXRlbSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJB +ZGROb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpBZGROb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQWRkTm9kZXNSZXN1bHQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpBZGROb2Rl +c1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRSZWZlcmVuY2VzSXRl +bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU291cmNlTm9k +ZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iVGFyZ2V0U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUNsYXNzIiB0eXBlPSJ0 +bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIHR5 +cGU9InRuczpBZGRSZWZlcmVuY2VzSXRlbSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWRkUmVmZXJlbmNlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc0l0 +ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6TGlzdE9mQWRkUmVmZXJl +bmNlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlZmVyZW5jZXNUb0FkZCIgdHlwZT0idG5zOkxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0 +IiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSIgdHlwZT0idG5zOkFkZFJlZmVyZW5j +ZXNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNJdGVt +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVRhcmdldFJlZmVyZW5jZXMiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVO +b2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRlbGV0ZU5vZGVz +SXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +Tm9kZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEZWxldGVOb2Rl +c0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVOb2Rlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGV0ZU5vZGVzUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6 +TGlzdE9mRGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRlbGV0ZU5vZGVzUmVxdWVzdCIgdHlwZT0idG5zOkRlbGV0ZU5vZGVzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNSZXNwb25zZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 +InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVOb2Rlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJE +ZWxldGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU291cmNlTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQi +IHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZUJpZGlyZWN0aW9uYWwiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkRlbGV0 +ZVJlZmVyZW5jZXNJdGVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEZWxl +dGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRl +bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVS +ZWZlcmVuY2VzSXRlbSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1 +ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6TGlzdE9mRGVsZXRlUmVm +ZXJlbmNlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVz +Q29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3Bv +bnNlIiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBi +YXNlPSJ4czp1bnNpZ25lZEludCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIHR5cGU9InRu +czpBdHRyaWJ1dGVXcml0ZU1hc2siIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dz +ZURpcmVjdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSW52ZXJzZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmFsaWRfMyIgLz4NCiAg +ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkJyb3dzZURpcmVjdGlvbiIgdHlwZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld0Rlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3SWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVz +dGFtcCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQnJvd3NlRGlyZWN0aW9uIiB0eXBlPSJ0bnM6QnJvd3NlRGlyZWN0aW9uIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzTWFzayIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Vs +dE1hc2siIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpCcm93c2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +QnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dzZVJlc3VsdE1hc2siPg0KICAgIDx4czpyZXN0 +cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO +b25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJZF8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc0ZvcndhcmRfMiIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUNsYXNzXzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkJyb3dzZU5hbWVfOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iRGlzcGxheU5hbWVfMTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVE +ZWZpbml0aW9uXzMyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxfNjMiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJbmZvXzMiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmdldEluZm9fNjAiIC8+DQogICAgPC94czpy +ZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93 +c2VSZXN1bHRNYXNrIiB0eXBlPSJ0bnM6QnJvd3NlUmVzdWx0TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNGb3J3YXJkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +TmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc3BsYXlOYW1lIiB0eXBlPSJ1YTpMb2Nh +bGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXhw +YW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJl +bmNlRGVzY3JpcHRpb24iIHR5cGU9InRuczpSZWZlcmVuY2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9u +IiB0eXBlPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZURlc2Ny +aXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9p +bnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QnJvd3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVmZXJlbmNlcyIgdHlwZT0idG5zOkxpc3RPZlJlZmVyZW5jZURlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJlc3VsdCIgdHlwZT0i +dG5zOkJyb3dzZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJv +d3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VSZXN1bHQiIHR5cGU9InRuczpCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVJlc3Vs +dCIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlUmVxdWVzdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0i +dG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVx +dWVzdGVkTWF4UmVmZXJlbmNlc1Blck5vZGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvQnJvd3NlIiB0eXBlPSJ0 +bnM6TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJvd3NlUmVxdWVzdCIgdHlwZT0idG5zOkJyb3dzZVJlcXVlc3QiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUmVzcG9uc2UiIHR5cGU9InRuczpCcm93c2VS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlTmV4dFJlcXVlc3Qi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFk +ZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsZWFzZUNvbnRpbnVhdGlvblBvaW50cyIg +dHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGludWF0aW9uUG9pbnRzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiB0eXBlPSJ0 +bnM6QnJvd3NlTmV4dFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dz +ZU5leHRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkJyb3dzZU5leHRSZXNwb25zZSIgdHlwZT0idG5zOkJyb3dzZU5leHRSZXNwb25zZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVsYXRpdmVQYXRoRWxlbWVudCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ludmVyc2UiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVh +biIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0TmFtZSIg +dHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsYXRpdmVQYXRo +RWxlbWVudCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlbGF0aXZl +UGF0aEVsZW1lbnQiIHR5cGU9InRuczpMaXN0T2ZSZWxhdGl2ZVBhdGhFbGVtZW50IiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWxhdGl2 +ZVBhdGgiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1l +bnRzIiB0eXBlPSJ0bnM6TGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBh +dGgiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVBhdGgiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0aW5nTm9kZSIgdHlwZT0idWE6 +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVsYXRpdmVQYXRoIiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGgiIHR5cGU9InRuczpCcm93c2VQ +YXRoIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoIiB0eXBl +PSJ0bnM6QnJvd3NlUGF0aCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aCIgdHlwZT0idG5zOkxpc3RPZkJy +b3dzZVBhdGgiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkJyb3dzZVBhdGhUYXJnZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbWFp +bmluZ1BhdGhJbmRleCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJCcm93c2VQYXRoVGFyZ2V0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFRhcmdldCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFRhcmdldCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgdHlwZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhUYXJnZXQiIHR5cGU9InRu +czpMaXN0T2ZCcm93c2VQYXRoVGFyZ2V0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VQYXRoUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRz +IiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0aFRhcmdldCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoUmVzdWx0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFJl +c3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFJlc3Vs +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aFJlc3VsdCIgdHlwZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhS +ZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2xhdGVCcm93c2VQ +YXRoc1RvTm9kZUlkc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +UGF0aHMiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgdHlw +ZT0idG5zOlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJZHNSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZC +cm93c2VQYXRoUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2xhdGVC +cm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6VHJhbnNsYXRlQnJvd3NlUGF0 +aHNUb05vZGVJZHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0 +ZXJOb2Rlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlZ2lz +dGVyIiB0eXBlPSJ1YTpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVx +dWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhl +YWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJlZE5vZGVJZHMiIHR5cGU9 +InVhOkxpc3RPZk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVzcG9uc2UiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVucmVnaXN0ZXJOb2Rlc1JlcXVlc3QiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5 +cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1VucmVnaXN0ZXIiIHR5cGU9InVhOkxpc3RP +Zk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbnJlZ2lzdGVy +Tm9kZXNSZXF1ZXN0IiB0eXBlPSJ0bnM6VW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0 +bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +VW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpVbnJlZ2lzdGVyTm9kZXNSZXNwb25z +ZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb3VudGVyIiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1lcmljUmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uVGltZW91dCIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VCaW5hcnlF +bmNvZGluZyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heEJ5dGVTdHJpbmdMZW5ndGgiIHR5cGU9Inhz +OmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QXJyYXlM +ZW5ndGgiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWF4TWVzc2FnZVNpemUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QnVmZmVyU2l6ZSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsTGlmZXRpbWUiIHR5cGU9 +InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlUb2tlbkxpZmV0aW1lIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpFbmRwb2ludENvbmZpZ3VyYXRpb24iIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRDb25maWd1 +cmF0aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnRDb25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2lu +dENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludENvbmZpZ3VyYXRpb24iIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlF1 +ZXJ5RGF0YURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVyeURhdGFEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlF1ZXJ5 +RGF0YURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZRdWVy +eURhdGFEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpRdWVyeURhdGFEZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZRdWVyeURh +dGFEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBh +bmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluY2x1ZGVTdWJUeXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVRvUmV0dXJuIiB0eXBlPSJ0bnM6 +TGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOk5vZGVUeXBlRGVzY3JpcHRp +b24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5vZGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVUeXBl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOb2Rl +VHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRmls +dGVyT3BlcmF0b3IiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbHNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSXNOdWxsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdy +ZWF0ZXJUaGFuXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbF80IiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbk9yRXF1YWxfNSIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTGlrZV82IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJOb3RfNyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQmV0d2Vl +bl84IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbkxpc3RfOSIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5kXzEwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJPcl8xMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdF8xMiIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5WaWV3XzEzIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJPZlR5cGVfMTQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IlJlbGF0ZWRUb18xNSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0 +d2lzZUFuZF8xNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0d2lzZU9yXzE3 +IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRmlsdGVyT3BlcmF0b3IiIHR5cGU9InRuczpGaWx0ZXJPcGVyYXRvciIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlEYXRhU2V0Ij4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +cyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeURhdGFTZXQiIHR5cGU9InRuczpRdWVyeURhdGFTZXQiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlF1ZXJ5RGF0YVNldCI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlEYXRhU2V0IiB0eXBlPSJ0bnM6UXVlcnlE +YXRhU2V0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZRdWVyeURhdGFTZXQiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFT +ZXQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZWROb2RlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVJlZmVy +ZW5jZSIgdHlwZT0idG5zOk5vZGVSZWZlcmVuY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5vZGVSZWZlcmVuY2UiIHR5cGU9InRuczpOb2RlUmVmZXJlbmNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZOb2RlUmVmZXJlbmNlIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVJlZmVyZW5jZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29udGVu +dEZpbHRlckVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkZpbHRlck9wZXJhdG9yIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmRzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGVudEZpbHRlckVsZW1lbnQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0 +ZXJFbGVtZW50IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRl +bnRGaWx0ZXJFbGVtZW50IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNv +bnRlbnRGaWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkVsZW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlciIgdHlwZT0idG5zOkNv +bnRlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRlbnRG +aWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRl +bnRGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVy +IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmlsdGVyT3BlcmFuZCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmQiIHR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbGVtZW50T3BlcmFuZCI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRWxlbWVudE9wZXJhbmQiIHR5cGU9InRuczpFbGVtZW50T3BlcmFuZCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGl0ZXJhbE9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3Bl +cmFuZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hz +OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu +dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGl0ZXJhbE9wZXJh +bmQiIHR5cGU9InRuczpMaXRlcmFsT3BlcmFuZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz +ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlw +ZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkFsaWFzIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ +bmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6QXR0cmlidXRlT3BlcmFuZCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VQYXRoIiB0eXBlPSJ1YTpMaXN0T2ZRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlk +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIHR5cGU9InRuczpTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZT +aW1wbGVBdHRyaWJ1dGVPcGVyYW5kIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6U2ltcGxlQXR0cmli +dXRlT3BlcmFuZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mU2ltcGxlQXR0cmlidXRlT3BlcmFuZCIgdHlwZT0idG5zOkxp +c3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0 +eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJPcGVyYW5kU3RhdHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVy +YW5kRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudFJlc3Vs +dCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRS +ZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29u +dGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZDb250ZW50RmlsdGVyRWxl +bWVudFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iQ29udGVudEZpbHRlclJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRWxlbWVudFJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZDb250 +ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVh +Okxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXJzaW5nUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU3Rh +dHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRGlhZ25vc3RpY0luZm9z +IiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJQYXJzaW5nUmVzdWx0IiB0eXBlPSJ0bnM6UGFyc2luZ1Jlc3VsdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFyc2luZ1Jlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdCIgdHlwZT0i +dG5zOlBhcnNpbmdSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlBhcnNpbmdSZXN1bHQiIHR5cGU9InRuczpMaXN0 +T2ZQYXJzaW5nUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVR5cGVzIiB0eXBl +PSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idG5zOkNvbnRl +bnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNYXhEYXRhU2V0c1RvUmV0dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVmZXJlbmNlc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5Rmly +c3RSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlF1ZXJ5Rmlyc3RSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlF1ZXJ5RGF0YVNldHMiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFTZXQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250 +aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZQYXJzaW5nUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlclJlc3VsdCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0 +ZXJSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlGaXJz +dFJlc3BvbnNlIiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJRdWVyeU5leHRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJR +dWVyeU5leHRSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlOZXh0UmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9u +c2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJRdWVyeURhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiIHR5cGU9InRu +czpRdWVyeU5leHRSZXNwb25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVGltZXN0 +YW1wc1RvUmV0dXJuIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IlNlcnZlcl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5laXRoZXJfMyIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52YWxpZF80IiAvPg0KICAgIDwveHM6cmVzdHJp +Y3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1w +c1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6 +UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOlJlYWRWYWx1ZUlkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVhZFZhbHVlSWQiIHR5cGU9InRuczpSZWFkVmFsdWVJZCIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +UmVhZFZhbHVlSWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIgbmlsbGFibGU9InRydWUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QWdlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIg +dHlwZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlYWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmVxdWVzdCIgdHlwZT0i +dG5zOlJlYWRSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0 +T2ZEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRSZXNwb25zZSIg +dHlwZT0idG5zOlJlYWRSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlz +dG9yeVJlYWRWYWx1ZUlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBv +aW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iSGlzdG9yeVJlYWRWYWx1ZUlkIiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRWYWx1ZUlk +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5UmVhZFZhbHVlSWQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkVmFsdWVJZCIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRWYWx1ZUlkIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVh +ZFJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Rh +dHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikhpc3RvcnlEYXRhIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5 +UmVhZFJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRSZXN1bHQiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRSZXN1bHQiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3Rv +cnlSZWFkRGV0YWlscyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkRGV0YWls +cyIgdHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUmVhZEV2ZW50RGV0YWlscyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5UmVhZERldGFpbHMi +Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTnVt +VmFsdWVzUGVyTm9kZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlw +ZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWx0ZXIiIHR5cGU9InRuczpFdmVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlYWRFdmVudERldGFpbHMiIHR5cGU9InRuczpSZWFkRXZlbnREZXRhaWxz +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmF3TW9kaWZpZWREZXRhaWxzIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc1JlYWRNb2RpZmllZCIgdHlwZT0ieHM6Ym9v +bGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0 +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmV0dXJuQm91bmRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs +ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +UmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZFJhd01vZGlmaWVkRGV0YWlscyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIgdHlwZT0idWE6TGlzdE9m +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFByb2Nl +c3NlZERldGFpbHMiIHR5cGU9InRuczpSZWFkUHJvY2Vzc2VkRGV0YWlscyIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUmVhZEF0VGltZURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VTaW1w +bGVCb3VuZHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBdFRpbWVE +ZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZEF0VGltZURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiIHR5cGU9InRu +czpSZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJIaXN0b3J5RGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVZhbHVlcyIgdHlwZT0idWE6TGlzdE9mRGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlEYXRhIiB0eXBlPSJ0bnM6SGlzdG9yeURhdGEi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmaWNhdGlvblRpbWUiIHR5 +cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVcGRhdGVUeXBlIiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIgdHlw +ZT0idG5zOk1vZGlmaWNhdGlvbkluZm8iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZk1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iIHR5cGU9InRuczpNb2RpZmljYXRpb25JbmZvIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZNb2RpZmljYXRpb25JbmZvIiB0eXBlPSJ0bnM6TGlzdE9mTW9kaWZpY2F0aW9uSW5m +byIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iSGlzdG9yeU1vZGlmaWVkRGF0YSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5RGF0YSI+DQogICAg +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZmljYXRp +b25JbmZvcyIgdHlwZT0idG5zOkxpc3RPZk1vZGlmaWNhdGlvbkluZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4 +dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5TW9kaWZpZWREYXRhIiB0eXBlPSJ0bnM6SGlzdG9y +eU1vZGlmaWVkRGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudHMiIHR5 +cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeUV2ZW50IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZFJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWREZXRhaWxzIiB0eXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpUaW1lc3RhbXBzVG9SZXR1 +cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGVhc2VDb250 +aW51YXRpb25Qb2ludHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik5vZGVzVG9SZWFkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlS +ZWFkUmVxdWVzdCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5UmVhZFJlc3VsdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgdHlwZT0idG5z +Okhpc3RvcnlSZWFkUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IldyaXRl +VmFsdWUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJ +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6RGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlVmFsdWUiIHR5cGU9InRuczpXcml0ZVZhbHVlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZVZhbHVlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZVZhbHVlIiB0eXBlPSJ0bnM6 +V3JpdGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZldyaXRlVmFs +dWUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IldyaXRlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvV3Jp +dGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IldyaXRlUmVxdWVzdCIgdHlwZT0idG5zOldyaXRlUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlUmVzcG9uc2UiIHR5cGU9InRuczpXcml0ZVJlc3Bv +bnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBl +PSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eVVwZGF0ZURldGFpbHMiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCg0KICA8 +eHM6c2ltcGxlVHlwZSAgbmFtZT0iSGlzdG9yeVVwZGF0ZVR5cGUiPg0KICAgIDx4czpyZXN0cmlj +dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNl +cnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZV8yIiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGVfMyIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGVsZXRlXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpz +aW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlVHlwZSIgdHlwZT0i +dG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJm +b3JtVXBkYXRlVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2VydF8xIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJSZXBsYWNlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlVwZGF0ZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmVfNCIgLz4N +CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlBlcmZvcm1VcGRhdGVUeXBlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6 +Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i +dG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVy +Zm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRl +RGF0YURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZVN0cnVjdHVy +ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNl +cnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RP +ZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZVN0cnVj +dHVyZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlU3RydWN0dXJlRGF0YURldGFpbHMiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZUV2ZW50RGV0YWlscyI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgdHlwZT0idG5zOlBl +cmZvcm1VcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRmlsdGVyIiB0eXBlPSJ0bnM6RXZlbnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnREYXRhIiB0eXBl +PSJ0bnM6TGlzdE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVXBkYXRlRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlRXZlbnREZXRh +aWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFp +bHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNEZWxldGVNb2RpZmllZCIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRlUmF3 +TW9kaWZpZWREZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVBdFRp +bWVEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBl +PSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRl +bGV0ZUF0VGltZURldGFpbHMiIHR5cGU9InRuczpEZWxldGVBdFRpbWVEZXRhaWxzIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRJZHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiIHR5cGU9 +InRuczpEZWxldGVFdmVudERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIHR5cGU9InVhOkxpc3RP +ZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVS +ZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5VXBkYXRlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiB0eXBlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVVwZGF0ZVJlc3VsdCIgdHlwZT0i +dG5zOkxpc3RPZkhpc3RvcnlVcGRhdGVSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0 +eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iSGlzdG9yeVVwZGF0ZVJlcXVlc3QiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVVwZGF0ZVJlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkhpc3Rv +cnlVcGRhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0 +aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRh +dGVSZXNwb25zZSIgdHlwZT0idG5zOkhpc3RvcnlVcGRhdGVSZXNwb25zZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9iamVjdElkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRo +b2RJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudHMiIHR5cGU9InVhOkxpc3RPZlZh +cmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FsbE1ldGhvZFJl +cXVlc3QiIHR5cGU9InRuczpDYWxsTWV0aG9kUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6Q2FsbE1l +dGhvZFJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9m +Q2FsbE1ldGhvZFJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklucHV0QXJndW1lbnRS +ZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0 +aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdXRwdXRBcmd1bWVudHMi +IHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgdHlwZT0idG5zOkNhbGxNZXRob2RSZXN1bHQiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIHR5 +cGU9InRuczpDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiB0eXBl +PSJ0bnM6TGlzdE9mQ2FsbE1ldGhvZFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FsbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpS +ZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTWV0aG9kc1RvQ2FsbCIgdHlwZT0idG5zOkxpc3RPZkNhbGxNZXRob2RS +ZXF1ZXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxSZXF1ZXN0 +IiB0eXBlPSJ0bnM6Q2FsbFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNh +bGxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9 +InRuczpMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJDYWxsUmVzcG9uc2UiIHR5cGU9InRuczpDYWxsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBs +ZVR5cGUgIG5hbWU9Ik1vbml0b3JpbmdNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i +eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxpbmdfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIg +dHlwZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJE +YXRhQ2hhbmdlVHJpZ2dlciI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c18wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNWYWx1ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJTdGF0dXNWYWx1ZVRpbWVzdGFtcF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZVRyaWdn +ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdlVHJpZ2dlciIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAg +bmFtZT0iRGVhZGJhbmRUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5n +Ij4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJBYnNvbHV0ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJQZXJjZW50XzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFR5cGUiIHR5cGU9InRuczpEZWFkYmFu +ZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyIiB0eXBlPSJ0bnM6TW9uaXRv +cmluZ0ZpbHRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZUZpbHRl +ciI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyaWdnZXIiIHR5cGU9InRuczpEYXRhQ2hh +bmdlVHJpZ2dlciIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRlYWRiYW5kVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFZhbHVlIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdl +RmlsdGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFdmVudEZpbHRlciI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlbGVjdENsYXVzZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IldoZXJlQ2xhdXNlIiB0eXBlPSJ0bnM6Q29udGVudEZp +bHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmlsdGVyIiB0eXBl +PSJ0bnM6RXZlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFnZ3JlZ2F0 +ZUNvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlVzZVNlcnZlckNhcGFiaWxpdGllc0RlZmF1bHRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmVhdFVuY2VydGFpbkFzQmFk +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQZXJjZW50RGF0YUJhZCIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJjZW50RGF0YUdvb2QiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +U2xvcGVkRXh0cmFwb2xhdGlvbiIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0 +aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIg +dHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91Ymxl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRl +Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIHR5cGU9InRuczpBZ2dy +ZWdhdGVGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0 +ZXJSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl +ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRl +clJlc3VsdCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZWxlY3RDbGF1c2VSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0lu +Zm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV2hlcmVDbGF1c2VSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0 +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiIHR5 +cGU9InRuczpFdmVudEZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWdncmVnYXRlRmlsdGVyUmVzdWx0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZh +bHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1 +bHQiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZFN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHJvY2Vzc2luZ0ludGVydmFsIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXZpc2VkQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZp +Z3VyYXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0 +ZXJSZXN1bHQiIHR5cGU9InRuczpBZ2dyZWdhdGVGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0lu +dGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVTaXplIiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzY2FyZE9sZGVzdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtVG9Nb25p +dG9yIiB0eXBlPSJ0bnM6UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIgdHlwZT0idG5zOk1v +bml0b3JpbmdNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVl +c3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVS +ZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNy +ZWF0ZVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0Nv +ZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0 +ZW1JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNpemUi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiB0 +eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIg +dHlwZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0 +ZW1DcmVhdGVSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0 +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpU +aW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ikl0ZW1zVG9DcmVhdGUiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVx +dWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9m +TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlz +dE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +Q3JlYXRlTW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkNyZWF0ZU1vbml0b3JlZEl0 +ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1N +b2RpZnlSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJNb25pdG9yZWRJdGVtSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6 +TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtTW9k +aWZ5UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVk +SXRlbU1vZGlmeVJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRl +bU1vZGlmeVJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBl +PSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2Rp +ZnlSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0 +YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNp +emUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3Vs +dCIgdHlwZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3Jl +ZEl0ZW1Nb2RpZnlSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVz +dWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRu +czpUaW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3Qi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmeU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlz +dE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOk1vZGlmeU1vbml0b3Jl +ZEl0ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3Jp +bmdNb2RlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25J +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vbml0b3JpbmdNb2RlIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ01vZGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTZXRNb25pdG9yaW5nTW9kZVJlcXVlc3QiIHR5cGU9InRuczpTZXRNb25pdG9yaW5nTW9kZVJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpM +aXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXRNb25pdG9y +aW5nTW9kZVJlc3BvbnNlIiB0eXBlPSJ0bnM6U2V0TW9uaXRvcmluZ01vZGVSZXNwb25zZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2V0VHJpZ2dlcmluZ1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlnZ2VyaW5nSXRl +bUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlua3NUb0FkZCIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlua3NUb1Jl +bW92ZSIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFRyaWdnZXJpbmdSZXNwb25z +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZFJlc3VsdHMiIHR5cGU9InVhOkxp +c3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdu +b3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVtb3ZlUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +bW92ZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiB0 +eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWRzIiB0eXBlPSJ1YTpM +aXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiB0eXBlPSJ0bnM6RGVsZXRlTW9uaXRvcmVkSXRlbXNSZXF1 +ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1Jl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6 +TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25v +c3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTW9u +aXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RlZExpZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxp +dmVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiB0eXBlPSJ4czp1bnNp +Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGluZ0VuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlByaW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6Q3JlYXRl +U3Vic2NyaXB0aW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRl +U3Vic2NyaXB0aW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJz +Y3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRv +dWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZExp +ZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9u +c2UiIHR5cGU9InRuczpDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZFB1Ymxpc2hpbmdJ +bnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkTWF4S2Vl +cEFsaXZlQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBy +aW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2Rp +ZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVz +dCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNv +dW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1 +YnNjcmlwdGlvblJlc3BvbnNlIiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9uc2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aXB0aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0UHVi +bGlzaGluZ01vZGVSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRQdWJs +aXNoaW5nTW9kZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0 +cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2V0UHVibGlzaGluZ01vZGVSZXNwb25zZSIgdHlwZT0idG5zOlNldFB1Ymxpc2hpbmdNb2Rl +UmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3Nh +Z2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcXVlbmNl +TnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHVibGlzaFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTm90aWZpY2F0aW9uTWVzc2FnZSIgdHlwZT0idG5zOk5vdGlmaWNhdGlvbk1lc3NhZ2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9u +RGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlv +biI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1zIiB0eXBlPSJ0bnM6 +TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5 +cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAg +PC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbiIgdHlwZT0idG5zOkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmlj +YXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVu +dEhhbmRsZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgdHlwZT0i +dG5zOk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIHR5cGU9 +InRuczpNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTm90 +aWZpY2F0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXZl +bnROb3RpZmljYXRpb25MaXN0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNl +Ij4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAg +ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRzIiB0 +eXBlPSJ0bnM6TGlzdE9mRXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJFdmVudE5vdGlmaWNhdGlvbkxpc3QiIHR5cGU9InRuczpFdmVudE5vdGlmaWNhdGlv +bkxpc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2ZW50RmllbGRMaXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJFdmVudEZpZWxkcyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkTGlzdCIgdHlwZT0idG5zOkV2ZW50Rmll +bGRMaXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFdmVudEZpZWxkTGlz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWVs +ZExpc3QiIHR5cGU9InRuczpFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXZlbnRGaWVsZExpc3Qi +IHR5cGU9InRuczpMaXN0T2ZFdmVudEZpZWxkTGlzdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50RmllbGRMaXN0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkcyIg +dHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpIaXN0b3J5RXZlbnRGaWVsZExp +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkhpc3RvcnlFdmVudEZpZWxk +TGlzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eUV2ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVs +ZExpc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRp +b25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXR1cyIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGlj +SW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlm +aWNhdGlvbiIgdHlwZT0idG5zOlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgdHlwZT0idG5zOlN1YnNjcmlwdGlvbkFj +a25vd2xlZGdlbWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRuczpTdWJzY3Jp +cHRpb25BY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dCIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaFJl +cXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVl +c3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoUmVxdWVzdCIgdHlwZT0i +dG5zOlB1Ymxpc2hSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNo +UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +c3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TW9yZU5vdGlmaWNhdGlvbnMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3Rp +ZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UHVi +bGlzaFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXF1 +ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV0cmFuc21pdFNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3QiIHR5cGU9InRuczpSZXB1Ymxpc2hSZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXNwb25zZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5 +cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpO +b3RpZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlcHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVwdWJsaXNoUmVzcG9uc2UiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZmVyUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2Rl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdmFpbGFibGVTZXF1 +ZW5jZU51bWJlcnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclJlc3VsdCIgdHlwZT0idG5zOlRyYW5zZmVyUmVzdWx0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUcmFuc2ZlclJlc3VsdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJSZXN1bHQi +IHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHQiIHR5cGU9 +InRuczpMaXN0T2ZUcmFuc2ZlclJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxp +c3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCIgdHlwZT0idG5zOlRy +YW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZlRyYW5zZmVyUmVzdWx0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3Rp +Y0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgdHlwZT0i +dG5zOlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIg +dHlwZT0idG5zOkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz +cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25v +c3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkJ1aWxkSW5mbyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlw +ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHJvZHVjdE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvZnR3YXJlVmVy +c2lvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGROdW1iZXIiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ1 +aWxkRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsZElu +Zm8iIHR5cGU9InRuczpCdWlsZEluZm8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlJl +ZHVuZGFuY3lTdXBwb3J0Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJDb2xkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ildh +cm1fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSG90XzMiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcGFyZW50XzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkhvdEFuZE1pcnJvcmVkXzUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbmN5U3VwcG9y +dCIgdHlwZT0idG5zOlJlZHVuZGFuY3lTdXBwb3J0IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJTZXJ2ZXJTdGF0ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bm5pbmdfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ik5vQ29uZmlndXJhdGlvbl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJT +dXNwZW5kZWRfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2h1dGRvd25fNCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdF81IiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pY2F0aW9uRmF1bHRfNiIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVW5rbm93bl83IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyU3RhdGUiIHR5cGU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVkdW5kYW50U2Vy +dmVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcnZlcklkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTGV2ZWwiIHR5cGU9InhzOnVuc2ln +bmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVy +U3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZHVu +ZGFudFNlcnZlckRhdGFUeXBlIiB0eXBlPSJ0bnM6UmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZHVuZGFudFNlcnZlckRhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbnRT +ZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlZHVuZGFudFNlcnZl +ckRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxMaXN0IiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxM +aXN0RGF0YVR5cGUiIHR5cGU9InRuczpFbmRwb2ludFVybExpc3REYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdERh +dGFUeXBlIiB0eXBlPSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBv +aW50VXJsTGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5 +cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtQYXRocyIg +dHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0 +d29ya0dyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5l +dHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtHcm91cERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZk5ldHdv +cmtHcm91cERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZh +bCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhNb25pdG9yZWRJdGVtQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIg +dHlwZT0idG5zOlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxp +bmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTYW1wbGluZ0ludGVydmFs +RGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclZpZXdDb3VudCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJl +bnRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1 +cml0eVJlamVjdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZXNzaW9uVGltZW91dENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkFib3J0Q291bnQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTdWJzY3JpcHRpb25D +b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlSZWpl +Y3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWplY3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1t +YXJ5RGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2ZXJEaWFnbm9zdGljc1N1bW1hcnlEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmVyU3RhdHVzRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0i +eHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1 +cnJlbnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGRJbmZvIiB0eXBlPSJ0bnM6QnVpbGRJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU2Vjb25kc1RpbGxTaHV0ZG93biIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNodXRkb3duUmVhc29uIiB0eXBlPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNl +cnZlclN0YXR1c0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2VydmVyU3RhdHVzRGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlc3Npb25OYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkFjdHVhbFNlc3Npb25UaW1lb3V0IiB0eXBlPSJ4czpkb3Vi +bGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heFJlc3BvbnNl +TWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDb25uZWN0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRp +bWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudExhc3RD +b250YWN0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50 +TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJlbnRQdWJsaXNoUmVxdWVzdHNJblF1ZXVl +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVW5hdXRob3JpemVkUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZENvdW50IiB0eXBlPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ2FsbENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNyZWF0ZU1vbml0b3JlZEl0ZW1zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNldFRyaWdnZXJpbmdDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vy +dmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlcHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgdHlwZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZGROb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJCcm93c2VDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNs +YXRlQnJvd3NlUGF0aHNUb05vZGVJZHNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeUZpcnN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUXVlcnlOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVucmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlw +ZSIgdHlwZT0idG5zOlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkRpYWdub3N0aWNzRGF0 +YVR5cGUiIHR5cGU9InRuczpTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2Vz +c2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTZXNzaW9uRGlhZ25vc3Rp +Y3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbklkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDbGllbnRVc2VySWRPZlNlc3Npb24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudFVz +ZXJJZEhpc3RvcnkiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uTWVjaGFu +aXNtIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNw +b3J0UHJvdG9jb2wiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1l +c3NhZ2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0 +ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTZXNz +aW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9z +dGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRv +dGFsQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJFcnJvckNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2aWNl +Q291bnRlckRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNSZXN1 +bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0Nv +ZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNSZXN1bHQiIHR5cGU9InRuczpT +dGF0dXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YXR1c1Jl +c3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVz +UmVzdWx0IiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNSZXN1bHQiIHR5 +cGU9InRuczpMaXN0T2ZTdGF0dXNSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5 +cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25J +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eSIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhM +aWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ +dWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRpc2FibGVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3RDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +cHVibGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJUcmFuc2ZlclJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9BbHRDbGll +bnRDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJs +aXNoUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbnNDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm90aWZpY2F0aW9uc0NvdW50IiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50S2VlcEFsaXZlQ291 +bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDdXJyZW50TGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuYWNrbm93bGVkZ2VkTWVz +c2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25p +dG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV4dFNlcXVlbmNlTnVtYmVyIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRXZlbnRRdWV1ZU92ZXJGbG93Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +OlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU3Vi +c2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVWZXJiTWFz +ayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Ik5vZGVBZGRlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJOb2RlRGVsZXRlZF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZl +cmVuY2VBZGRlZF80IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VE +ZWxldGVkXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlQ2hhbmdl +ZF8xNiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siIHR5cGU9InRuczpN +b2RlbENoYW5nZVN0cnVjdHVyZVZlcmJNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWZmZWN0ZWRU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJiIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6 +TW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIg +dHlwZT0idG5zOk1vZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vZGVsQ2hh +bmdlU3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZNb2RlbENoYW5nZVN0cnVjdHVy +ZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQWZmZWN0ZWRUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5z +OlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJl +RGF0YVR5cGUiIHR5cGU9InRuczpTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU2Vt +YW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmFuZ2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvdyIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaWdoIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSYW5nZSIgdHlwZT0idG5zOlJhbmdlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJFVUluZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXRJ +ZCIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBl +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkVVSW5mb3JtYXRpb24iIHR5cGU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVhcl8w +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMb2dfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iTG5fMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9uIiB0 +eXBlPSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IkNvbXBsZXhOdW1iZXJUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSW1hZ2luYXJ5IiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkNvbXBsZXhOdW1iZXJUeXBlIiB0eXBlPSJ0bnM6Q29tcGxleE51bWJlclR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4 +czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkltYWdp +bmFyeSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIHR5cGU9InRuczpEb3VibGVDb21wbGV4TnVtYmVyVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQXhpc0luZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmdpbmVlcmluZ1VuaXRzIiB0eXBlPSJ0bnM6RVVJ +bmZvcm1hdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVVUmFuZ2UiIHR5cGU9InRuczpSYW5nZSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpdGxlIiB0eXBlPSJ1YTpM +b2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXhpc1NjYWxlVHlwZSIgdHlwZT0idG5zOkF4aXNTY2FsZUVudW1lcmF0 +aW9uIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBeGlzU3RlcHMi +IHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBeGlzSW5mb3JtYXRpb24iIHR5cGU9InRuczpBeGlzSW5mb3JtYXRpb24iIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlhWVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iWCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJYVlR5cGUiIHR5cGU9InRuczpYVlR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ3JlYXRlQ2xpZW50TmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2NhdGlvbkNyZWF0aW9u +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0 +aG9kSW5wdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RP +dXRwdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxs +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0dXMiIHR5cGU9InRuczpTdGF0dXNSZXN1bHQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvZ3JhbURpYWdub3N0aWNE +YXRhVHlwZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkNyZWF0ZUNsaWVudE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikludm9jYXRp +b25DcmVhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0VHJhbnNpdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1l +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2Fs +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZFNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM +YXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0 +TWV0aG9kSW5wdXRWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kT3V0 +cHV0VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiB0 +eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZFJldHVyblN0YXR1cyIgdHlwZT0idG5zOlN0YXR1c1Jlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9ncmFtRGlhZ25vc3RpYzJEYXRhVHlw +ZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJBbm5vdGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJNZXNzYWdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvbiIgdHlwZT0idG5zOkFubm90YXRpb24iIC8+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCI+DQogICAgPHhzOnJl +c3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkFic29sdXRlVmFsdWVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2Vu +dE9mVmFsdWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mUmFu +Z2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mRVVSYW5nZV8z +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVbmtub3duXzQiIC8+DQogICAgPC94 +czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJF +eGNlcHRpb25EZXZpYXRpb25Gb3JtYXQiIHR5cGU9InRuczpFeGNlcHRpb25EZXZpYXRpb25Gb3Jt +YXQiIC8+DQoNCjwveHM6c2NoZW1hPg== + + + + NamespaceUri + + i=68 + i=8252 + + + http://opcfoundation.org/UA/2008/02/Types.xsd + + + + Deprecated + + i=68 + i=8252 + + + true + + + + KeyValuePair + + i=69 + i=8252 + + + //xs:element[@name='KeyValuePair'] + + + + 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'] + + + + 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'] + + + + Union + + i=69 + i=8252 + + + //xs:element[@name='Union'] + + + + 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=14533 + 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=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=12756 + 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=15396 + i=76 + + + + Default JSON + + i=891 + i=76 + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.PredefinedNodes.uanodes b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.PredefinedNodes.uanodes new file mode 100644 index 00000000..834af6fa Binary files /dev/null and b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.PredefinedNodes.uanodes differ diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.PredefinedNodes.xml b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.PredefinedNodes.xml new file mode 100644 index 00000000..5ec5cb62 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.PredefinedNodes.xml @@ -0,0 +1,127869 @@ + + + + + + Object_1 + + i=3062 + + + 0 + Default Binary + + + i=47 + + + i=58 + + 3062 + + + Object_1 + + i=3063 + + + 0 + Default XML + + + i=47 + + + i=58 + + 3063 + + + DataType_64 + + i=24 + + + 0 + BaseDataType + + true + + + DataType_64 + + i=26 + + + 0 + Number + + + i=24 + + true + + + DataType_64 + + i=27 + + + 0 + Integer + + + i=26 + + true + + + DataType_64 + + i=28 + + + 0 + UInteger + + + i=26 + + true + + + DataType_64 + + i=29 + + + 0 + Enumeration + + + i=24 + + true + + + DataType_64 + + i=1 + + + 0 + Boolean + + + i=24 + + + + DataType_64 + + i=2 + + + 0 + SByte + + + i=27 + + + + DataType_64 + + i=3 + + + 0 + Byte + + + i=28 + + + + DataType_64 + + i=4 + + + 0 + Int16 + + + i=27 + + + + DataType_64 + + i=5 + + + 0 + UInt16 + + + i=28 + + + + DataType_64 + + i=6 + + + 0 + Int32 + + + i=27 + + + + DataType_64 + + i=7 + + + 0 + UInt32 + + + i=28 + + + + DataType_64 + + i=8 + + + 0 + Int64 + + + i=27 + + + + DataType_64 + + i=9 + + + 0 + UInt64 + + + i=28 + + + + DataType_64 + + i=10 + + + 0 + Float + + + i=26 + + + + DataType_64 + + i=11 + + + 0 + Double + + + i=26 + + + + DataType_64 + + i=12 + + + 0 + String + + + i=24 + + + + DataType_64 + + i=13 + + + 0 + DateTime + + + i=24 + + + + DataType_64 + + i=14 + + + 0 + Guid + + + i=24 + + + + DataType_64 + + i=15 + + + 0 + ByteString + + + i=24 + + + + DataType_64 + + i=16 + + + 0 + XmlElement + + + i=24 + + + + DataType_64 + + i=17 + + + 0 + NodeId + + + i=24 + + + + DataType_64 + + i=18 + + + 0 + ExpandedNodeId + + + i=24 + + + + DataType_64 + + i=19 + + + 0 + StatusCode + + + i=24 + + + + DataType_64 + + i=20 + + + 0 + QualifiedName + + + i=24 + + + + DataType_64 + + i=21 + + + 0 + LocalizedText + + + i=24 + + + + DataType_64 + + i=22 + + + 0 + Structure + + + i=24 + + true + + + DataType_64 + + i=23 + + + 0 + DataValue + + + i=24 + + + + DataType_64 + + i=25 + + + 0 + DiagnosticInfo + + + i=24 + + + + DataType_64 + + i=30 + + + 0 + Image + + + i=15 + + true + + + DataType_64 + + i=50 + + + 0 + Decimal + + + i=26 + + + + ReferenceType_32 + + i=31 + + + 0 + References + + true + true + + + ReferenceType_32 + + i=32 + + + 0 + NonHierarchicalReferences + + + i=31 + + true + true + + + ReferenceType_32 + + i=33 + + + 0 + HierarchicalReferences + + + i=31 + + true + + + HierarchicalReferences + + + + ReferenceType_32 + + i=34 + + + 0 + HasChild + + + i=33 + + true + + + ChildOf + + + + ReferenceType_32 + + i=35 + + + 0 + Organizes + + + i=33 + + + + OrganizedBy + + + + ReferenceType_32 + + i=36 + + + 0 + HasEventSource + + + i=33 + + + + EventSourceOf + + + + ReferenceType_32 + + i=37 + + + 0 + HasModellingRule + + + i=32 + + + + ModellingRuleOf + + + + ReferenceType_32 + + i=38 + + + 0 + HasEncoding + + + i=32 + + + + EncodingOf + + + + ReferenceType_32 + + i=39 + + + 0 + HasDescription + + + i=32 + + + + DescriptionOf + + + + ReferenceType_32 + + i=40 + + + 0 + HasTypeDefinition + + + i=32 + + + + TypeDefinitionOf + + + + ReferenceType_32 + + i=41 + + + 0 + GeneratesEvent + + + i=32 + + + + GeneratedBy + + + + ReferenceType_32 + + i=3065 + + + 0 + AlwaysGeneratesEvent + + + i=41 + + + + AlwaysGeneratedBy + + + + ReferenceType_32 + + i=44 + + + 0 + Aggregates + + + i=34 + + true + + + AggregatedBy + + + + ReferenceType_32 + + i=45 + + + 0 + HasSubtype + + + i=34 + + + + SubtypeOf + + + + ReferenceType_32 + + i=46 + + + 0 + HasProperty + + + i=44 + + + + PropertyOf + + + + ReferenceType_32 + + i=47 + + + 0 + HasComponent + + + i=44 + + + + ComponentOf + + + + ReferenceType_32 + + i=48 + + + 0 + HasNotifier + + + i=36 + + + + NotifierOf + + + + ReferenceType_32 + + i=49 + + + 0 + HasOrderedComponent + + + i=47 + + + + OrderedComponentOf + + + + ReferenceType_32 + + i=51 + + + 0 + FromState + + + i=32 + + + + ToTransition + + + + ReferenceType_32 + + i=52 + + + 0 + ToState + + + i=32 + + + + FromTransition + + + + ReferenceType_32 + + i=53 + + + 0 + HasCause + + + i=32 + + + + MayBeCausedBy + + + + ReferenceType_32 + + i=54 + + + 0 + HasEffect + + + i=32 + + + + MayBeEffectedBy + + + + ReferenceType_32 + + i=117 + + + 0 + HasSubStateMachine + + + i=32 + + + + SubStateMachineOf + + + + ReferenceType_32 + + i=56 + + + 0 + HasHistoricalConfiguration + + + i=44 + + + + HistoricalConfigurationOf + + + + ObjectType_8 + + i=58 + + + 0 + BaseObjectType + + + + ObjectType_8 + + i=61 + + + 0 + FolderType + + + i=58 + + + + VariableType_16 + + i=62 + + + 0 + BaseVariableType + + true + + i=24 + + + + VariableType_16 + + i=63 + + + 0 + BaseDataVariableType + + + i=62 + + + i=24 + + + + VariableType_16 + + i=68 + + + 0 + PropertyType + + + i=62 + + + i=24 + + + + VariableType_16 + + i=69 + + + 0 + DataTypeDescriptionType + + + i=63 + + + i=12 + + -1 + + Variable_2 + + i=104 + + + 0 + DataTypeVersion + + + i=46 + + + i=68 + + + i=80 + + 104 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=105 + + + 0 + DictionaryFragment + + + i=46 + + + i=68 + + + i=80 + + 105 + + i=15 + + -1 + 1 + 1 + + + + VariableType_16 + + i=72 + + + 0 + DataTypeDictionaryType + + + i=63 + + + i=15 + + -1 + + Variable_2 + + i=106 + + + 0 + DataTypeVersion + + + i=46 + + + i=68 + + + i=80 + + 106 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=107 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + + i=80 + + 107 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15001 + + + 0 + Deprecated + + + i=46 + + + i=68 + + + i=80 + + 15001 + + i=1 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=75 + + + 0 + DataTypeSystemType + + + i=58 + + + + ObjectType_8 + + i=76 + + + 0 + DataTypeEncodingType + + + i=58 + + + + DataType_64 + + i=120 + + + 0 + NamingRuleType + + + i=29 + + + + i=14799 + + + + + + 1 + + Mandatory + + + The BrowseName must appear in all instances of the type. + + Mandatory + + + 2 + + Optional + + + The BrowseName may appear in an instance of the type. + + Optional + + + 3 + + Constraint + + + The modelling rule defines a constraint and the BrowseName is not used in an instance of the type. + + Constraint + + + + + + + Variable_2 + + i=12169 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 12169 + + + + + + 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. + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=77 + + + 0 + ModellingRuleType + + + i=58 + + + Variable_2 + + i=111 + + + 0 + NamingRule + + + i=46 + + + i=68 + + + i=78 + + 111 + + + 1 + + + + i=120 + + -1 + 1 + 1 + + + + Object_1 + + i=78 + + + 0 + Mandatory + + + i=47 + + + i=77 + + 78 + + Variable_2 + + i=112 + + + 0 + NamingRule + + + i=46 + + + i=68 + + 112 + + + 1 + + + + i=120 + + -1 + 1 + 1 + + + + Object_1 + + i=80 + + + 0 + Optional + + + i=47 + + + i=77 + + 80 + + Variable_2 + + i=113 + + + 0 + NamingRule + + + i=46 + + + i=68 + + 113 + + + 2 + + + + i=120 + + -1 + 1 + 1 + + + + Object_1 + + i=83 + + + 0 + ExposesItsArray + + + i=47 + + + i=77 + + 83 + + Variable_2 + + i=114 + + + 0 + NamingRule + + + i=46 + + + i=68 + + 114 + + + 3 + + + + i=120 + + -1 + 1 + 1 + + + + Object_1 + + i=11508 + + + 0 + OptionalPlaceholder + + + i=47 + + + i=77 + + 11508 + + Variable_2 + + i=11509 + + + 0 + NamingRule + + + i=46 + + + i=68 + + 11509 + + + 2 + + + + i=120 + + -1 + 1 + 1 + + + + Object_1 + + i=11510 + + + 0 + MandatoryPlaceholder + + + i=47 + + + i=77 + + 11510 + + Variable_2 + + i=11511 + + + 0 + NamingRule + + + i=46 + + + i=68 + + 11511 + + + 1 + + + + i=120 + + -1 + 1 + 1 + + + + Object_1 + + i=84 + + + 0 + Root + + + i=47 + + + i=61 + + 84 + + + Object_1 + + i=85 + + + 0 + Objects + + + i=47 + + + i=61 + + 85 + + + + i=35 + + true + + i=84 + + + + + + Object_1 + + i=86 + + + 0 + Types + + + i=47 + + + i=61 + + 86 + + + + i=35 + + true + + i=84 + + + + + + Object_1 + + i=87 + + + 0 + Views + + + i=47 + + + i=61 + + 87 + + + + i=35 + + true + + i=84 + + + + + + Object_1 + + i=88 + + + 0 + ObjectTypes + + + i=47 + + + i=61 + + 88 + + + + i=35 + + true + + i=86 + + + + + i=35 + + + i=58 + + + + + + Object_1 + + i=89 + + + 0 + VariableTypes + + + i=47 + + + i=61 + + 89 + + + + i=35 + + true + + i=86 + + + + + i=35 + + + i=62 + + + + + + Object_1 + + i=90 + + + 0 + DataTypes + + + i=47 + + + i=61 + + 90 + + + + i=35 + + true + + i=86 + + + + + i=35 + + + i=24 + + + + + + Object_1 + + i=91 + + + 0 + ReferenceTypes + + + i=47 + + + i=61 + + 91 + + + + i=35 + + true + + i=86 + + + + + i=35 + + + i=31 + + + + + + Object_1 + + i=92 + + + 0 + XML Schema + + + i=47 + + + i=75 + + 92 + + + + i=35 + + true + + i=90 + + + + + + Object_1 + + i=93 + + + 0 + OPC Binary + + + i=47 + + + i=75 + + 93 + + + + i=35 + + true + + i=90 + + + + + + ReferenceType_32 + + i=129 + + + 0 + HasArgumentDescription + + + i=47 + + + + ArgumentDescriptionOf + + + + ReferenceType_32 + + i=131 + + + 0 + HasOptionalInputArgumentDescription + + + i=129 + + + + OptionalInputArgumentDescriptionOf + + + + Object_1 + + i=15957 + + + 0 + http://opcfoundation.org/UA/ + + + i=47 + + + i=11616 + + 15957 + + + + i=47 + + true + + i=11715 + + + + + Variable_2 + + i=15958 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + 15958 + + + http://opcfoundation.org/UA/ + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15959 + + + 0 + NamespaceVersion + + + i=46 + + + i=68 + + 15959 + + + 1.04.7 + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15960 + + + 0 + NamespacePublicationDate + + + i=46 + + + i=68 + + 15960 + + + 2020-07-15T00:00:00Z + + + + i=13 + + -1 + 1 + 1 + + + Variable_2 + + i=15961 + + + 0 + IsNamespaceSubset + + + i=46 + + + i=68 + + 15961 + + + false + + + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=15962 + + + 0 + StaticNodeIdTypes + + + i=46 + + + i=68 + + 15962 + + + + 0 + + + + + i=256 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15963 + + + 0 + StaticNumericNodeIdRange + + + i=46 + + + i=68 + + 15963 + + + + 1:65535 + + + + + i=291 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15964 + + + 0 + StaticStringNodeIdPattern + + + i=46 + + + i=68 + + 15964 + + + + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16134 + + + 0 + DefaultRolePermissions + + + i=46 + + + i=68 + + 16134 + + i=96 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16135 + + + 0 + DefaultUserRolePermissions + + + i=46 + + + i=68 + + 16135 + + i=96 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16136 + + + 0 + DefaultAccessRestrictions + + + i=46 + + + i=68 + + 16136 + + i=95 + + -1 + 1 + 1 + + + + Variable_2 + + i=3068 + + + 0 + NodeVersion + + + i=46 + + + i=68 + + 3068 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12170 + + + 0 + ViewVersion + + + i=46 + + + i=68 + + 12170 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3067 + + + 0 + Icon + + + i=46 + + + i=68 + + 3067 + + i=30 + + -1 + 1 + 1 + + + Variable_2 + + i=3069 + + + 0 + LocalTime + + + i=46 + + + i=68 + + 3069 + + i=8912 + + -1 + 1 + 1 + + + Variable_2 + + i=3070 + + + 0 + AllowNulls + + + i=46 + + + i=68 + + 3070 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11433 + + + 0 + ValueAsText + + + i=46 + + + i=68 + + 11433 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=11498 + + + 0 + MaxStringLength + + + i=46 + + + i=68 + + 11498 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=15002 + + + 0 + MaxCharacters + + + i=46 + + + i=68 + + 15002 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12908 + + + 0 + MaxByteStringLength + + + i=46 + + + i=68 + + 12908 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11512 + + + 0 + MaxArrayLength + + + i=46 + + + i=68 + + 11512 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11513 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + 11513 + + i=887 + + -1 + 1 + 1 + + + Variable_2 + + i=11432 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + 11432 + + i=21 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3071 + + + 0 + EnumValues + + + i=46 + + + i=68 + + 3071 + + i=7594 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12745 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + 12745 + + i=21 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3072 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 3072 + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3073 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 3073 + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16306 + + + 0 + DefaultInputValues + + + i=46 + + + i=68 + + 16306 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17605 + + + 0 + DefaultInstanceBrowseName + + + i=46 + + + i=68 + + 17605 + + i=20 + + -1 + 1 + 1 + + + DataType_64 + + i=2000 + + + 0 + ImageBMP + + + i=30 + + + + DataType_64 + + i=2001 + + + 0 + ImageGIF + + + i=30 + + + + DataType_64 + + i=2002 + + + 0 + ImageJPG + + + i=30 + + + + DataType_64 + + i=2003 + + + 0 + ImagePNG + + + i=30 + + + + DataType_64 + + i=16307 + + + 0 + AudioDataType + + + i=15 + + + + ObjectType_8 + + i=2004 + + + 0 + ServerType + + + i=58 + + + Variable_2 + + i=2005 + + + 0 + ServerArray + + + i=46 + + + i=68 + + + i=78 + + 2005 + + i=12 + + 1 + 0 + 1 + 1 + 1000 + + + Variable_2 + + i=2006 + + + 0 + NamespaceArray + + + i=46 + + + i=68 + + + i=78 + + 2006 + + i=12 + + 1 + 0 + 1 + 1 + 1000 + + + Variable_2 + + i=15003 + + + 0 + UrisVersion + + + i=46 + + + i=68 + + + i=80 + + 15003 + + i=20998 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2007 + + + 0 + ServerStatus + + + i=47 + + + i=2138 + + + i=78 + + 2007 + + i=862 + + -1 + 1 + 1 + 1000 + + Variable_2 + + i=3074 + + + 0 + StartTime + + + i=47 + + + i=63 + + + i=78 + + 3074 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3075 + + + 0 + CurrentTime + + + i=47 + + + i=63 + + + i=78 + + 3075 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3076 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 3076 + + i=852 + + -1 + 1 + 1 + + + Variable_2 + + i=3077 + + + 0 + BuildInfo + + + i=47 + + + i=3051 + + + i=78 + + 3077 + + i=338 + + -1 + 1 + 1 + + Variable_2 + + i=3078 + + + 0 + ProductUri + + + i=47 + + + i=63 + + + i=78 + + 3078 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3079 + + + 0 + ManufacturerName + + + i=47 + + + i=63 + + + i=78 + + 3079 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3080 + + + 0 + ProductName + + + i=47 + + + i=63 + + + i=78 + + 3080 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3081 + + + 0 + SoftwareVersion + + + i=47 + + + i=63 + + + i=78 + + 3081 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3082 + + + 0 + BuildNumber + + + i=47 + + + i=63 + + + i=78 + + 3082 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3083 + + + 0 + BuildDate + + + i=47 + + + i=63 + + + i=78 + + 3083 + + i=294 + + -1 + 1 + 1 + 1000 + + + + Variable_2 + + i=3084 + + + 0 + SecondsTillShutdown + + + i=47 + + + i=63 + + + i=78 + + 3084 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3085 + + + 0 + ShutdownReason + + + i=47 + + + i=63 + + + i=78 + + 3085 + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=2008 + + + 0 + ServiceLevel + + + i=46 + + + i=68 + + + i=78 + + 2008 + + i=3 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2742 + + + 0 + Auditing + + + i=46 + + + i=68 + + + i=78 + + 2742 + + i=1 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=12882 + + + 0 + EstimatedReturnTime + + + i=46 + + + i=68 + + + i=80 + + 12882 + + i=13 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=17612 + + + 0 + LocalTime + + + i=46 + + + i=68 + + + i=80 + + 17612 + + i=8912 + + -1 + 1 + 1 + 1000 + + + Object_1 + + i=2009 + + + 0 + ServerCapabilities + + + i=47 + + + i=2013 + + + i=78 + + 2009 + + Variable_2 + + i=3086 + + + 0 + ServerProfileArray + + + i=46 + + + i=68 + + + i=78 + + 3086 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3087 + + + 0 + LocaleIdArray + + + i=46 + + + i=68 + + + i=78 + + 3087 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3088 + + + 0 + MinSupportedSampleRate + + + i=46 + + + i=68 + + + i=78 + + 3088 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=3089 + + + 0 + MaxBrowseContinuationPoints + + + i=46 + + + i=68 + + + i=78 + + 3089 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=3090 + + + 0 + MaxQueryContinuationPoints + + + i=46 + + + i=68 + + + i=78 + + 3090 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=3091 + + + 0 + MaxHistoryContinuationPoints + + + i=46 + + + i=68 + + + i=78 + + 3091 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=3092 + + + 0 + SoftwareCertificates + + + i=46 + + + i=68 + + + i=78 + + 3092 + + i=344 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=3093 + + + 0 + ModellingRules + + + i=47 + + + i=61 + + + i=78 + + 3093 + + + Object_1 + + i=3094 + + + 0 + AggregateFunctions + + + i=47 + + + i=61 + + + i=78 + + 3094 + + + + Object_1 + + i=2010 + + + 0 + ServerDiagnostics + + + i=47 + + + i=2020 + + + i=78 + + 2010 + + Variable_2 + + i=3095 + + + 0 + ServerDiagnosticsSummary + + + i=47 + + + i=2150 + + + i=78 + + 3095 + + i=859 + + -1 + 1 + 1 + + Variable_2 + + i=3096 + + + 0 + ServerViewCount + + + i=47 + + + i=63 + + + i=78 + + 3096 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3097 + + + 0 + CurrentSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3097 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3098 + + + 0 + CumulatedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3098 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3099 + + + 0 + SecurityRejectedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3099 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3100 + + + 0 + RejectedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3100 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3101 + + + 0 + SessionTimeoutCount + + + i=47 + + + i=63 + + + i=78 + + 3101 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3102 + + + 0 + SessionAbortCount + + + i=47 + + + i=63 + + + i=78 + + 3102 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3104 + + + 0 + PublishingIntervalCount + + + i=47 + + + i=63 + + + i=78 + + 3104 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3105 + + + 0 + CurrentSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 3105 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3106 + + + 0 + CumulatedSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 3106 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3107 + + + 0 + SecurityRejectedRequestsCount + + + i=47 + + + i=63 + + + i=78 + + 3107 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3108 + + + 0 + RejectedRequestsCount + + + i=47 + + + i=63 + + + i=78 + + 3108 + + i=7 + + -1 + 1 + 1 + + + + Variable_2 + + i=3110 + + + 0 + SubscriptionDiagnosticsArray + + + i=47 + + + i=2171 + + + i=78 + + 3110 + + i=874 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=3111 + + + 0 + SessionsDiagnosticsSummary + + + i=47 + + + i=2026 + + + i=78 + + 3111 + + Variable_2 + + i=3112 + + + 0 + SessionDiagnosticsArray + + + i=47 + + + i=2196 + + + i=78 + + 3112 + + i=865 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3113 + + + 0 + SessionSecurityDiagnosticsArray + + + i=47 + + + i=2243 + + + i=78 + + 3113 + + i=868 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=3114 + + + 0 + EnabledFlag + + + i=46 + + + i=68 + + + i=78 + + 3114 + + i=1 + + -1 + 3 + 3 + + + + Object_1 + + i=2011 + + + 0 + VendorServerInfo + + + i=47 + + + i=2033 + + + i=78 + + 2011 + + + Object_1 + + i=2012 + + + 0 + ServerRedundancy + + + i=47 + + + i=2034 + + + i=78 + + 2012 + + Variable_2 + + i=3115 + + + 0 + RedundancySupport + + + i=46 + + + i=68 + + + i=78 + + 3115 + + i=851 + + -1 + 1 + 1 + + + + Object_1 + + i=11527 + + + 0 + Namespaces + + + i=47 + + + i=11645 + + + i=80 + + 11527 + + + Method_4 + + i=11489 + + + 0 + GetMonitoredItems + + + i=47 + + + i=11489 + + + i=80 + + 11489 + true + true + + Variable_2 + + i=11490 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11490 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11491 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11491 + + + + + + i=297 + + + + ServerHandles + + i=7 + + 1 + + 0 + + + + + + + i=297 + + + + ClientHandles + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12871 + + + 0 + ResendData + + + i=47 + + + i=12871 + + + i=80 + + 12871 + true + true + + Variable_2 + + i=12872 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12872 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12746 + + + 0 + SetSubscriptionDurable + + + i=47 + + + i=12746 + + + i=80 + + 12746 + true + true + + Variable_2 + + i=12747 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12747 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + i=297 + + + + LifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12748 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 12748 + + + + + + i=297 + + + + RevisedLifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12883 + + + 0 + RequestServerStateChange + + + i=47 + + + i=12883 + + + i=80 + + 12883 + true + true + + Variable_2 + + i=12884 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12884 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=2013 + + + 0 + ServerCapabilitiesType + + + i=58 + + + Variable_2 + + i=2014 + + + 0 + ServerProfileArray + + + i=46 + + + i=68 + + + i=78 + + 2014 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2016 + + + 0 + LocaleIdArray + + + i=46 + + + i=68 + + + i=78 + + 2016 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2017 + + + 0 + MinSupportedSampleRate + + + i=46 + + + i=68 + + + i=78 + + 2017 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=2732 + + + 0 + MaxBrowseContinuationPoints + + + i=46 + + + i=68 + + + i=78 + + 2732 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=2733 + + + 0 + MaxQueryContinuationPoints + + + i=46 + + + i=68 + + + i=78 + + 2733 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=2734 + + + 0 + MaxHistoryContinuationPoints + + + i=46 + + + i=68 + + + i=78 + + 2734 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=3049 + + + 0 + SoftwareCertificates + + + i=46 + + + i=68 + + + i=78 + + 3049 + + i=344 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11549 + + + 0 + MaxArrayLength + + + i=46 + + + i=68 + + + i=80 + + 11549 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11550 + + + 0 + MaxStringLength + + + i=46 + + + i=68 + + + i=80 + + 11550 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12910 + + + 0 + MaxByteStringLength + + + i=46 + + + i=68 + + + i=80 + + 12910 + + i=7 + + -1 + 1 + 1 + + + Object_1 + + i=11551 + + + 0 + OperationLimits + + + i=47 + + + i=11564 + + + i=80 + + 11551 + + + Object_1 + + i=2019 + + + 0 + ModellingRules + + + i=47 + + + i=61 + + + i=78 + + 2019 + + + Object_1 + + i=2754 + + + 0 + AggregateFunctions + + + i=47 + + + i=61 + + + i=78 + + 2754 + + + Variable_2 + + i=11562 + + + 0 + <VendorCapability> + + + i=47 + + + i=2137 + + + i=11508 + + 11562 + + i=24 + + -1 + 1 + 1 + + + Object_1 + + i=16295 + + + 0 + RoleSet + + + i=47 + + + i=15607 + + + i=80 + + 16295 + + Method_4 + + i=16296 + + + 0 + AddRole + + + i=47 + + + i=15997 + + + i=78 + + 16296 + true + true + + Variable_2 + + i=16297 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16297 + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16298 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16298 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16299 + + + 0 + RemoveRole + + + i=47 + + + i=16000 + + + i=78 + + 16299 + true + true + + Variable_2 + + i=16300 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16300 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + + ObjectType_8 + + i=2020 + + + 0 + ServerDiagnosticsType + + + i=58 + + + Variable_2 + + i=2021 + + + 0 + ServerDiagnosticsSummary + + + i=47 + + + i=2150 + + + i=78 + + 2021 + + i=859 + + -1 + 1 + 1 + + Variable_2 + + i=3116 + + + 0 + ServerViewCount + + + i=47 + + + i=63 + + + i=78 + + 3116 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3117 + + + 0 + CurrentSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3117 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3118 + + + 0 + CumulatedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3118 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3119 + + + 0 + SecurityRejectedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3119 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3120 + + + 0 + RejectedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 3120 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3121 + + + 0 + SessionTimeoutCount + + + i=47 + + + i=63 + + + i=78 + + 3121 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3122 + + + 0 + SessionAbortCount + + + i=47 + + + i=63 + + + i=78 + + 3122 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3124 + + + 0 + PublishingIntervalCount + + + i=47 + + + i=63 + + + i=78 + + 3124 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3125 + + + 0 + CurrentSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 3125 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3126 + + + 0 + CumulatedSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 3126 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3127 + + + 0 + SecurityRejectedRequestsCount + + + i=47 + + + i=63 + + + i=78 + + 3127 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3128 + + + 0 + RejectedRequestsCount + + + i=47 + + + i=63 + + + i=78 + + 3128 + + i=7 + + -1 + 1 + 1 + + + + Variable_2 + + i=2022 + + + 0 + SamplingIntervalDiagnosticsArray + + + i=47 + + + i=2164 + + + i=80 + + 2022 + + i=856 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2023 + + + 0 + SubscriptionDiagnosticsArray + + + i=47 + + + i=2171 + + + i=78 + + 2023 + + i=874 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=2744 + + + 0 + SessionsDiagnosticsSummary + + + i=47 + + + i=2026 + + + i=78 + + 2744 + + Variable_2 + + i=3129 + + + 0 + SessionDiagnosticsArray + + + i=47 + + + i=2196 + + + i=78 + + 3129 + + i=865 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3130 + + + 0 + SessionSecurityDiagnosticsArray + + + i=47 + + + i=2243 + + + i=78 + + 3130 + + i=868 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=2025 + + + 0 + EnabledFlag + + + i=46 + + + i=68 + + + i=78 + + 2025 + + i=1 + + -1 + 3 + 3 + + + + ObjectType_8 + + i=2026 + + + 0 + SessionsDiagnosticsSummaryType + + + i=58 + + + Variable_2 + + i=2027 + + + 0 + SessionDiagnosticsArray + + + i=47 + + + i=2196 + + + i=78 + + 2027 + + i=865 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2028 + + + 0 + SessionSecurityDiagnosticsArray + + + i=47 + + + i=2243 + + + i=78 + + 2028 + + i=868 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=12097 + + + 0 + <ClientName> + + + i=47 + + + i=2029 + + + i=11508 + + 12097 + + Variable_2 + + i=12098 + + + 0 + SessionDiagnostics + + + i=47 + + + i=2197 + + + i=78 + + 12098 + + i=865 + + -1 + 1 + 1 + + Variable_2 + + i=12099 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 12099 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=12100 + + + 0 + SessionName + + + i=47 + + + i=63 + + + i=78 + + 12100 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12101 + + + 0 + ClientDescription + + + i=47 + + + i=63 + + + i=78 + + 12101 + + i=308 + + -1 + 1 + 1 + + + Variable_2 + + i=12102 + + + 0 + ServerUri + + + i=47 + + + i=63 + + + i=78 + + 12102 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12103 + + + 0 + EndpointUrl + + + i=47 + + + i=63 + + + i=78 + + 12103 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12104 + + + 0 + LocaleIds + + + i=47 + + + i=63 + + + i=78 + + 12104 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12105 + + + 0 + ActualSessionTimeout + + + i=47 + + + i=63 + + + i=78 + + 12105 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=12106 + + + 0 + MaxResponseMessageSize + + + i=47 + + + i=63 + + + i=78 + + 12106 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12107 + + + 0 + ClientConnectionTime + + + i=47 + + + i=63 + + + i=78 + + 12107 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=12108 + + + 0 + ClientLastContactTime + + + i=47 + + + i=63 + + + i=78 + + 12108 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=12109 + + + 0 + CurrentSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 12109 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12110 + + + 0 + CurrentMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12110 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12111 + + + 0 + CurrentPublishRequestsInQueue + + + i=47 + + + i=63 + + + i=78 + + 12111 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12112 + + + 0 + TotalRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12112 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12113 + + + 0 + UnauthorizedRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12113 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12114 + + + 0 + ReadCount + + + i=47 + + + i=63 + + + i=78 + + 12114 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12115 + + + 0 + HistoryReadCount + + + i=47 + + + i=63 + + + i=78 + + 12115 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12116 + + + 0 + WriteCount + + + i=47 + + + i=63 + + + i=78 + + 12116 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12117 + + + 0 + HistoryUpdateCount + + + i=47 + + + i=63 + + + i=78 + + 12117 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12118 + + + 0 + CallCount + + + i=47 + + + i=63 + + + i=78 + + 12118 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12119 + + + 0 + CreateMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12119 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12120 + + + 0 + ModifyMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12120 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12121 + + + 0 + SetMonitoringModeCount + + + i=47 + + + i=63 + + + i=78 + + 12121 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12122 + + + 0 + SetTriggeringCount + + + i=47 + + + i=63 + + + i=78 + + 12122 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12123 + + + 0 + DeleteMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12123 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12124 + + + 0 + CreateSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 12124 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12125 + + + 0 + ModifySubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 12125 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12126 + + + 0 + SetPublishingModeCount + + + i=47 + + + i=63 + + + i=78 + + 12126 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12127 + + + 0 + PublishCount + + + i=47 + + + i=63 + + + i=78 + + 12127 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12128 + + + 0 + RepublishCount + + + i=47 + + + i=63 + + + i=78 + + 12128 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12129 + + + 0 + TransferSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 12129 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12130 + + + 0 + DeleteSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 12130 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12131 + + + 0 + AddNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12131 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12132 + + + 0 + AddReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 12132 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12133 + + + 0 + DeleteNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12133 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12134 + + + 0 + DeleteReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 12134 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12135 + + + 0 + BrowseCount + + + i=47 + + + i=63 + + + i=78 + + 12135 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12136 + + + 0 + BrowseNextCount + + + i=47 + + + i=63 + + + i=78 + + 12136 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12137 + + + 0 + TranslateBrowsePathsToNodeIdsCount + + + i=47 + + + i=63 + + + i=78 + + 12137 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12138 + + + 0 + QueryFirstCount + + + i=47 + + + i=63 + + + i=78 + + 12138 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12139 + + + 0 + QueryNextCount + + + i=47 + + + i=63 + + + i=78 + + 12139 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12140 + + + 0 + RegisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12140 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12141 + + + 0 + UnregisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12141 + + i=871 + + -1 + 1 + 1 + + + + Variable_2 + + i=12142 + + + 0 + SessionSecurityDiagnostics + + + i=47 + + + i=2244 + + + i=78 + + 12142 + + i=868 + + -1 + 1 + 1 + + Variable_2 + + i=12143 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 12143 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=12144 + + + 0 + ClientUserIdOfSession + + + i=47 + + + i=63 + + + i=78 + + 12144 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12145 + + + 0 + ClientUserIdHistory + + + i=47 + + + i=63 + + + i=78 + + 12145 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12146 + + + 0 + AuthenticationMechanism + + + i=47 + + + i=63 + + + i=78 + + 12146 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12147 + + + 0 + Encoding + + + i=47 + + + i=63 + + + i=78 + + 12147 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12148 + + + 0 + TransportProtocol + + + i=47 + + + i=63 + + + i=78 + + 12148 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12149 + + + 0 + SecurityMode + + + i=47 + + + i=63 + + + i=78 + + 12149 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=12150 + + + 0 + SecurityPolicyUri + + + i=47 + + + i=63 + + + i=78 + + 12150 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12151 + + + 0 + ClientCertificate + + + i=47 + + + i=63 + + + i=78 + + 12151 + + i=15 + + -1 + 1 + 1 + + + + Variable_2 + + i=12152 + + + 0 + SubscriptionDiagnosticsArray + + + i=47 + + + i=2171 + + + i=78 + + 12152 + + i=874 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=2029 + + + 0 + SessionDiagnosticsObjectType + + + i=58 + + + Variable_2 + + i=2030 + + + 0 + SessionDiagnostics + + + i=47 + + + i=2197 + + + i=78 + + 2030 + + i=865 + + -1 + 1 + 1 + + Variable_2 + + i=3131 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 3131 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3132 + + + 0 + SessionName + + + i=47 + + + i=63 + + + i=78 + + 3132 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3133 + + + 0 + ClientDescription + + + i=47 + + + i=63 + + + i=78 + + 3133 + + i=308 + + -1 + 1 + 1 + + + Variable_2 + + i=3134 + + + 0 + ServerUri + + + i=47 + + + i=63 + + + i=78 + + 3134 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3135 + + + 0 + EndpointUrl + + + i=47 + + + i=63 + + + i=78 + + 3135 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3136 + + + 0 + LocaleIds + + + i=47 + + + i=63 + + + i=78 + + 3136 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3137 + + + 0 + ActualSessionTimeout + + + i=47 + + + i=63 + + + i=78 + + 3137 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=3138 + + + 0 + MaxResponseMessageSize + + + i=47 + + + i=63 + + + i=78 + + 3138 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3139 + + + 0 + ClientConnectionTime + + + i=47 + + + i=63 + + + i=78 + + 3139 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3140 + + + 0 + ClientLastContactTime + + + i=47 + + + i=63 + + + i=78 + + 3140 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3141 + + + 0 + CurrentSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 3141 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3142 + + + 0 + CurrentMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 3142 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3143 + + + 0 + CurrentPublishRequestsInQueue + + + i=47 + + + i=63 + + + i=78 + + 3143 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8898 + + + 0 + TotalRequestCount + + + i=47 + + + i=63 + + + i=78 + + 8898 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=11891 + + + 0 + UnauthorizedRequestCount + + + i=47 + + + i=63 + + + i=78 + + 11891 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3151 + + + 0 + ReadCount + + + i=47 + + + i=63 + + + i=78 + + 3151 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3152 + + + 0 + HistoryReadCount + + + i=47 + + + i=63 + + + i=78 + + 3152 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3153 + + + 0 + WriteCount + + + i=47 + + + i=63 + + + i=78 + + 3153 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3154 + + + 0 + HistoryUpdateCount + + + i=47 + + + i=63 + + + i=78 + + 3154 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3155 + + + 0 + CallCount + + + i=47 + + + i=63 + + + i=78 + + 3155 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3156 + + + 0 + CreateMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 3156 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3157 + + + 0 + ModifyMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 3157 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3158 + + + 0 + SetMonitoringModeCount + + + i=47 + + + i=63 + + + i=78 + + 3158 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3159 + + + 0 + SetTriggeringCount + + + i=47 + + + i=63 + + + i=78 + + 3159 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3160 + + + 0 + DeleteMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 3160 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3161 + + + 0 + CreateSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 3161 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3162 + + + 0 + ModifySubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 3162 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3163 + + + 0 + SetPublishingModeCount + + + i=47 + + + i=63 + + + i=78 + + 3163 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3164 + + + 0 + PublishCount + + + i=47 + + + i=63 + + + i=78 + + 3164 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3165 + + + 0 + RepublishCount + + + i=47 + + + i=63 + + + i=78 + + 3165 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3166 + + + 0 + TransferSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 3166 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3167 + + + 0 + DeleteSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 3167 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3168 + + + 0 + AddNodesCount + + + i=47 + + + i=63 + + + i=78 + + 3168 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3169 + + + 0 + AddReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 3169 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3170 + + + 0 + DeleteNodesCount + + + i=47 + + + i=63 + + + i=78 + + 3170 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3171 + + + 0 + DeleteReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 3171 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3172 + + + 0 + BrowseCount + + + i=47 + + + i=63 + + + i=78 + + 3172 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3173 + + + 0 + BrowseNextCount + + + i=47 + + + i=63 + + + i=78 + + 3173 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3174 + + + 0 + TranslateBrowsePathsToNodeIdsCount + + + i=47 + + + i=63 + + + i=78 + + 3174 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3175 + + + 0 + QueryFirstCount + + + i=47 + + + i=63 + + + i=78 + + 3175 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3176 + + + 0 + QueryNextCount + + + i=47 + + + i=63 + + + i=78 + + 3176 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3177 + + + 0 + RegisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 3177 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=3178 + + + 0 + UnregisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 3178 + + i=871 + + -1 + 1 + 1 + + + + Variable_2 + + i=2031 + + + 0 + SessionSecurityDiagnostics + + + i=47 + + + i=2244 + + + i=78 + + 2031 + + i=868 + + -1 + 1 + 1 + + Variable_2 + + i=3179 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 3179 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3180 + + + 0 + ClientUserIdOfSession + + + i=47 + + + i=63 + + + i=78 + + 3180 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3181 + + + 0 + ClientUserIdHistory + + + i=47 + + + i=63 + + + i=78 + + 3181 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3182 + + + 0 + AuthenticationMechanism + + + i=47 + + + i=63 + + + i=78 + + 3182 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3183 + + + 0 + Encoding + + + i=47 + + + i=63 + + + i=78 + + 3183 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3184 + + + 0 + TransportProtocol + + + i=47 + + + i=63 + + + i=78 + + 3184 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3185 + + + 0 + SecurityMode + + + i=47 + + + i=63 + + + i=78 + + 3185 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=3186 + + + 0 + SecurityPolicyUri + + + i=47 + + + i=63 + + + i=78 + + 3186 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3187 + + + 0 + ClientCertificate + + + i=47 + + + i=63 + + + i=78 + + 3187 + + i=15 + + -1 + 1 + 1 + + + + Variable_2 + + i=2032 + + + 0 + SubscriptionDiagnosticsArray + + + i=47 + + + i=2171 + + + i=78 + + 2032 + + i=874 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2033 + + + 0 + VendorServerInfoType + + + i=58 + + + + ObjectType_8 + + i=2034 + + + 0 + ServerRedundancyType + + + i=58 + + + Variable_2 + + i=2035 + + + 0 + RedundancySupport + + + i=46 + + + i=68 + + + i=78 + + 2035 + + i=851 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2036 + + + 0 + TransparentRedundancyType + + + i=2034 + + + Variable_2 + + i=2037 + + + 0 + CurrentServerId + + + i=46 + + + i=68 + + + i=78 + + 2037 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2038 + + + 0 + RedundantServerArray + + + i=46 + + + i=68 + + + i=78 + + 2038 + + i=853 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2039 + + + 0 + NonTransparentRedundancyType + + + i=2034 + + + Variable_2 + + i=2040 + + + 0 + ServerUriArray + + + i=46 + + + i=68 + + + i=78 + + 2040 + + i=12 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=11945 + + + 0 + NonTransparentNetworkRedundancyType + + + i=2039 + + + Variable_2 + + i=11948 + + + 0 + ServerNetworkGroups + + + i=46 + + + i=68 + + + i=78 + + 11948 + + i=11944 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=11564 + + + 0 + OperationLimitsType + + + i=61 + + + Variable_2 + + i=11565 + + + 0 + MaxNodesPerRead + + + i=46 + + + i=68 + + + i=80 + + 11565 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12161 + + + 0 + MaxNodesPerHistoryReadData + + + i=46 + + + i=68 + + + i=80 + + 12161 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12162 + + + 0 + MaxNodesPerHistoryReadEvents + + + i=46 + + + i=68 + + + i=80 + + 12162 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11567 + + + 0 + MaxNodesPerWrite + + + i=46 + + + i=68 + + + i=80 + + 11567 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12163 + + + 0 + MaxNodesPerHistoryUpdateData + + + i=46 + + + i=68 + + + i=80 + + 12163 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12164 + + + 0 + MaxNodesPerHistoryUpdateEvents + + + i=46 + + + i=68 + + + i=80 + + 12164 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11569 + + + 0 + MaxNodesPerMethodCall + + + i=46 + + + i=68 + + + i=80 + + 11569 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11570 + + + 0 + MaxNodesPerBrowse + + + i=46 + + + i=68 + + + i=80 + + 11570 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11571 + + + 0 + MaxNodesPerRegisterNodes + + + i=46 + + + i=68 + + + i=80 + + 11571 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11572 + + + 0 + MaxNodesPerTranslateBrowsePathsToNodeIds + + + i=46 + + + i=68 + + + i=80 + + 11572 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11573 + + + 0 + MaxNodesPerNodeManagement + + + i=46 + + + i=68 + + + i=80 + + 11573 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11574 + + + 0 + MaxMonitoredItemsPerCall + + + i=46 + + + i=68 + + + i=80 + + 11574 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11575 + + + 0 + FileType + + + i=58 + + + Variable_2 + + i=11576 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 11576 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=12686 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 12686 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=12687 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 12687 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11579 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 11579 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=13341 + + + 0 + MimeType + + + i=46 + + + i=68 + + + i=80 + + 13341 + + i=12 + + -1 + 1 + 1 + + + Method_4 + + i=11580 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 11580 + true + true + + Variable_2 + + i=11581 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11581 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11582 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11582 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11583 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 11583 + true + true + + Variable_2 + + i=11584 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11584 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11585 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 11585 + true + true + + Variable_2 + + i=11586 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11586 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11587 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11587 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11588 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 11588 + true + true + + Variable_2 + + i=11589 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11589 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11590 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 11590 + true + true + + Variable_2 + + i=11591 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11591 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11592 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11592 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11593 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 11593 + true + true + + Variable_2 + + i=11594 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11594 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=11595 + + + 0 + AddressSpaceFileType + + + i=11575 + + + Method_4 + + i=11615 + + + 0 + ExportNamespace + + + i=47 + + + i=11615 + + + i=80 + + 11615 + true + true + + + + ObjectType_8 + + i=11616 + + + 0 + NamespaceMetadataType + + + i=58 + + + Variable_2 + + i=11617 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + + i=78 + + 11617 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11618 + + + 0 + NamespaceVersion + + + i=46 + + + i=68 + + + i=78 + + 11618 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11619 + + + 0 + NamespacePublicationDate + + + i=46 + + + i=68 + + + i=78 + + 11619 + + i=13 + + -1 + 1 + 1 + + + Variable_2 + + i=11620 + + + 0 + IsNamespaceSubset + + + i=46 + + + i=68 + + + i=78 + + 11620 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11621 + + + 0 + StaticNodeIdTypes + + + i=46 + + + i=68 + + + i=78 + + 11621 + + i=256 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11622 + + + 0 + StaticNumericNodeIdRange + + + i=46 + + + i=68 + + + i=78 + + 11622 + + i=291 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11623 + + + 0 + StaticStringNodeIdPattern + + + i=46 + + + i=68 + + + i=78 + + 11623 + + i=12 + + -1 + 1 + 1 + + + Object_1 + + i=11624 + + + 0 + NamespaceFile + + + i=47 + + + i=11595 + + + i=80 + + 11624 + + Variable_2 + + i=11625 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 11625 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=12690 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 12690 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=12691 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 12691 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11628 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 11628 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=11629 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 11629 + true + true + + Variable_2 + + i=11630 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11630 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11631 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11631 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11632 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 11632 + true + true + + Variable_2 + + i=11633 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11633 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11634 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 11634 + true + true + + Variable_2 + + i=11635 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11635 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11636 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11636 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11637 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 11637 + true + true + + Variable_2 + + i=11638 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11638 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11639 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 11639 + true + true + + Variable_2 + + i=11640 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11640 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11641 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 11641 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=11642 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 11642 + true + true + + Variable_2 + + i=11643 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 11643 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=16137 + + + 0 + DefaultRolePermissions + + + i=46 + + + i=68 + + + i=80 + + 16137 + + i=96 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16138 + + + 0 + DefaultUserRolePermissions + + + i=46 + + + i=68 + + + i=80 + + 16138 + + i=96 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16139 + + + 0 + DefaultAccessRestrictions + + + i=46 + + + i=68 + + + i=80 + + 16139 + + i=95 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11645 + + + 0 + NamespacesType + + + i=58 + + + Object_1 + + i=11646 + + + 0 + <NamespaceIdentifier> + + + i=47 + + + i=11616 + + + i=11508 + + 11646 + + Variable_2 + + i=11647 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + + i=78 + + 11647 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11648 + + + 0 + NamespaceVersion + + + i=46 + + + i=68 + + + i=78 + + 11648 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11649 + + + 0 + NamespacePublicationDate + + + i=46 + + + i=68 + + + i=78 + + 11649 + + i=13 + + -1 + 1 + 1 + + + Variable_2 + + i=11650 + + + 0 + IsNamespaceSubset + + + i=46 + + + i=68 + + + i=78 + + 11650 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11651 + + + 0 + StaticNodeIdTypes + + + i=46 + + + i=68 + + + i=78 + + 11651 + + i=256 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11652 + + + 0 + StaticNumericNodeIdRange + + + i=46 + + + i=68 + + + i=78 + + 11652 + + i=291 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11653 + + + 0 + StaticStringNodeIdPattern + + + i=46 + + + i=68 + + + i=78 + + 11653 + + i=12 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=2041 + + + 0 + BaseEventType + + + i=58 + + true + + Variable_2 + + i=2042 + + + 0 + EventId + + + i=46 + + + i=68 + + + i=78 + + 2042 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=2043 + + + 0 + EventType + + + i=46 + + + i=68 + + + i=78 + + 2043 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2044 + + + 0 + SourceNode + + + i=46 + + + i=68 + + + i=78 + + 2044 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2045 + + + 0 + SourceName + + + i=46 + + + i=68 + + + i=78 + + 2045 + + i=12 + + -1 + 1 + 1 + + + + Variable_2 + + i=2047 + + + 0 + ReceiveTime + + + i=46 + + + i=68 + + + i=78 + + 2047 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3190 + + + 0 + LocalTime + + + i=46 + + + i=68 + + + i=80 + + 3190 + + i=8912 + + -1 + 1 + 1 + + + Variable_2 + + i=2050 + + + 0 + Message + + + i=46 + + + i=68 + + + i=78 + + 2050 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=2051 + + + 0 + Severity + + + i=46 + + + i=68 + + + i=78 + + 2051 + + i=5 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2052 + + + 0 + AuditEventType + + + i=2041 + + true + + Variable_2 + + i=2053 + + + 0 + ActionTimeStamp + + + i=46 + + + i=68 + + + i=78 + + 2053 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2054 + + + 0 + Status + + + i=46 + + + i=68 + + + i=78 + + 2054 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2055 + + + 0 + ServerId + + + i=46 + + + i=68 + + + i=78 + + 2055 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2056 + + + 0 + ClientAuditEntryId + + + i=46 + + + i=68 + + + i=78 + + 2056 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2057 + + + 0 + ClientUserId + + + i=46 + + + i=68 + + + i=78 + + 2057 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2058 + + + 0 + AuditSecurityEventType + + + i=2052 + + true + + Variable_2 + + i=17615 + + + 0 + StatusCodeId + + + i=46 + + + i=68 + + + i=80 + + 17615 + + i=19 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2059 + + + 0 + AuditChannelEventType + + + i=2058 + + true + + Variable_2 + + i=2745 + + + 0 + SecureChannelId + + + i=46 + + + i=68 + + + i=78 + + 2745 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2060 + + + 0 + AuditOpenSecureChannelEventType + + + i=2059 + + true + + Variable_2 + + i=2061 + + + 0 + ClientCertificate + + + i=46 + + + i=68 + + + i=78 + + 2061 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=2746 + + + 0 + ClientCertificateThumbprint + + + i=46 + + + i=68 + + + i=78 + + 2746 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2062 + + + 0 + RequestType + + + i=46 + + + i=68 + + + i=78 + + 2062 + + i=315 + + -1 + 1 + 1 + + + Variable_2 + + i=2063 + + + 0 + SecurityPolicyUri + + + i=46 + + + i=68 + + + i=78 + + 2063 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2065 + + + 0 + SecurityMode + + + i=46 + + + i=68 + + + i=78 + + 2065 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=2066 + + + 0 + RequestedLifetime + + + i=46 + + + i=68 + + + i=78 + + 2066 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2069 + + + 0 + AuditSessionEventType + + + i=2058 + + true + + Variable_2 + + i=2070 + + + 0 + SessionId + + + i=46 + + + i=68 + + + i=78 + + 2070 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2071 + + + 0 + AuditCreateSessionEventType + + + i=2069 + + true + + Variable_2 + + i=2072 + + + 0 + SecureChannelId + + + i=46 + + + i=68 + + + i=78 + + 2072 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2073 + + + 0 + ClientCertificate + + + i=46 + + + i=68 + + + i=78 + + 2073 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=2747 + + + 0 + ClientCertificateThumbprint + + + i=46 + + + i=68 + + + i=78 + + 2747 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2074 + + + 0 + RevisedSessionTimeout + + + i=46 + + + i=68 + + + i=78 + + 2074 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2748 + + + 0 + AuditUrlMismatchEventType + + + i=2071 + + true + + Variable_2 + + i=2749 + + + 0 + EndpointUrl + + + i=46 + + + i=68 + + + i=78 + + 2749 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2075 + + + 0 + AuditActivateSessionEventType + + + i=2069 + + true + + Variable_2 + + i=2076 + + + 0 + ClientSoftwareCertificates + + + i=46 + + + i=68 + + + i=78 + + 2076 + + i=344 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2077 + + + 0 + UserIdentityToken + + + i=46 + + + i=68 + + + i=78 + + 2077 + + i=316 + + -1 + 1 + 1 + + + Variable_2 + + i=11485 + + + 0 + SecureChannelId + + + i=46 + + + i=68 + + + i=78 + + 11485 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2078 + + + 0 + AuditCancelEventType + + + i=2069 + + true + + Variable_2 + + i=2079 + + + 0 + RequestHandle + + + i=46 + + + i=68 + + + i=78 + + 2079 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2080 + + + 0 + AuditCertificateEventType + + + i=2058 + + true + + Variable_2 + + i=2081 + + + 0 + Certificate + + + i=46 + + + i=68 + + + i=78 + + 2081 + + i=15 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2082 + + + 0 + AuditCertificateDataMismatchEventType + + + i=2080 + + true + + Variable_2 + + i=2083 + + + 0 + InvalidHostname + + + i=46 + + + i=68 + + + i=78 + + 2083 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2084 + + + 0 + InvalidUri + + + i=46 + + + i=68 + + + i=78 + + 2084 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2085 + + + 0 + AuditCertificateExpiredEventType + + + i=2080 + + true + + + ObjectType_8 + + i=2086 + + + 0 + AuditCertificateInvalidEventType + + + i=2080 + + true + + + ObjectType_8 + + i=2087 + + + 0 + AuditCertificateUntrustedEventType + + + i=2080 + + true + + + ObjectType_8 + + i=2088 + + + 0 + AuditCertificateRevokedEventType + + + i=2080 + + true + + + ObjectType_8 + + i=2089 + + + 0 + AuditCertificateMismatchEventType + + + i=2080 + + true + + + ObjectType_8 + + i=2090 + + + 0 + AuditNodeManagementEventType + + + i=2052 + + true + + + ObjectType_8 + + i=2091 + + + 0 + AuditAddNodesEventType + + + i=2090 + + true + + Variable_2 + + i=2092 + + + 0 + NodesToAdd + + + i=46 + + + i=68 + + + i=78 + + 2092 + + i=376 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2093 + + + 0 + AuditDeleteNodesEventType + + + i=2090 + + true + + Variable_2 + + i=2094 + + + 0 + NodesToDelete + + + i=46 + + + i=68 + + + i=78 + + 2094 + + i=382 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2095 + + + 0 + AuditAddReferencesEventType + + + i=2090 + + true + + Variable_2 + + i=2096 + + + 0 + ReferencesToAdd + + + i=46 + + + i=68 + + + i=78 + + 2096 + + i=379 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2097 + + + 0 + AuditDeleteReferencesEventType + + + i=2090 + + true + + Variable_2 + + i=2098 + + + 0 + ReferencesToDelete + + + i=46 + + + i=68 + + + i=78 + + 2098 + + i=385 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2099 + + + 0 + AuditUpdateEventType + + + i=2052 + + true + + + ObjectType_8 + + i=2100 + + + 0 + AuditWriteUpdateEventType + + + i=2099 + + true + + Variable_2 + + i=2750 + + + 0 + AttributeId + + + i=46 + + + i=68 + + + i=78 + + 2750 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2101 + + + 0 + IndexRange + + + i=46 + + + i=68 + + + i=78 + + 2101 + + i=291 + + -1 + 1 + 1 + + + Variable_2 + + i=2102 + + + 0 + OldValue + + + i=46 + + + i=68 + + + i=78 + + 2102 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=2103 + + + 0 + NewValue + + + i=46 + + + i=68 + + + i=78 + + 2103 + + i=24 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2104 + + + 0 + AuditHistoryUpdateEventType + + + i=2099 + + true + + Variable_2 + + i=2751 + + + 0 + ParameterDataTypeId + + + i=46 + + + i=68 + + + i=78 + + 2751 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2127 + + + 0 + AuditUpdateMethodEventType + + + i=2052 + + true + + Variable_2 + + i=2128 + + + 0 + MethodId + + + i=46 + + + i=68 + + + i=78 + + 2128 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2129 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 2129 + + i=24 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2130 + + + 0 + SystemEventType + + + i=2041 + + true + + + ObjectType_8 + + i=2131 + + + 0 + DeviceFailureEventType + + + i=2130 + + true + + + ObjectType_8 + + i=11446 + + + 0 + SystemStatusChangeEventType + + + i=2130 + + true + + Variable_2 + + i=11696 + + + 0 + SystemState + + + i=46 + + + i=68 + + + i=78 + + 11696 + + i=852 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2132 + + + 0 + BaseModelChangeEventType + + + i=2041 + + true + + + ObjectType_8 + + i=2133 + + + 0 + GeneralModelChangeEventType + + + i=2132 + + true + + Variable_2 + + i=2134 + + + 0 + Changes + + + i=46 + + + i=68 + + + i=78 + + 2134 + + i=877 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=2738 + + + 0 + SemanticChangeEventType + + + i=2041 + + true + + Variable_2 + + i=2739 + + + 0 + Changes + + + i=46 + + + i=68 + + + i=78 + + 2739 + + i=897 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=3035 + + + 0 + EventQueueOverflowEventType + + + i=2041 + + true + + + ObjectType_8 + + i=11436 + + + 0 + ProgressEventType + + + i=2041 + + true + + Variable_2 + + i=12502 + + + 0 + Context + + + i=46 + + + i=68 + + + i=78 + + 12502 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=12503 + + + 0 + Progress + + + i=46 + + + i=68 + + + i=78 + + 12503 + + i=5 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2340 + + + 0 + AggregateFunctionType + + + i=58 + + + + VariableType_16 + + i=2137 + + + 0 + ServerVendorCapabilityType + + + i=63 + + true + + i=24 + + -1 + + + VariableType_16 + + i=2138 + + + 0 + ServerStatusType + + + i=63 + + + i=862 + + -1 + + Variable_2 + + i=2139 + + + 0 + StartTime + + + i=47 + + + i=63 + + + i=78 + + 2139 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2140 + + + 0 + CurrentTime + + + i=47 + + + i=63 + + + i=78 + + 2140 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2141 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 2141 + + i=852 + + -1 + 1 + 1 + + + Variable_2 + + i=2142 + + + 0 + BuildInfo + + + i=47 + + + i=3051 + + + i=78 + + 2142 + + i=338 + + -1 + 1 + 1 + + Variable_2 + + i=3698 + + + 0 + ProductUri + + + i=47 + + + i=63 + + + i=78 + + 3698 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3699 + + + 0 + ManufacturerName + + + i=47 + + + i=63 + + + i=78 + + 3699 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3700 + + + 0 + ProductName + + + i=47 + + + i=63 + + + i=78 + + 3700 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3701 + + + 0 + SoftwareVersion + + + i=47 + + + i=63 + + + i=78 + + 3701 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3702 + + + 0 + BuildNumber + + + i=47 + + + i=63 + + + i=78 + + 3702 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3703 + + + 0 + BuildDate + + + i=47 + + + i=63 + + + i=78 + + 3703 + + i=294 + + -1 + 1 + 1 + 1000 + + + + Variable_2 + + i=2752 + + + 0 + SecondsTillShutdown + + + i=47 + + + i=63 + + + i=78 + + 2752 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2753 + + + 0 + ShutdownReason + + + i=47 + + + i=63 + + + i=78 + + 2753 + + i=21 + + -1 + 1 + 1 + + + + VariableType_16 + + i=3051 + + + 0 + BuildInfoType + + + i=63 + + + i=338 + + -1 + + Variable_2 + + i=3052 + + + 0 + ProductUri + + + i=47 + + + i=63 + + + i=78 + + 3052 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3053 + + + 0 + ManufacturerName + + + i=47 + + + i=63 + + + i=78 + + 3053 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3054 + + + 0 + ProductName + + + i=47 + + + i=63 + + + i=78 + + 3054 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3055 + + + 0 + SoftwareVersion + + + i=47 + + + i=63 + + + i=78 + + 3055 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3056 + + + 0 + BuildNumber + + + i=47 + + + i=63 + + + i=78 + + 3056 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=3057 + + + 0 + BuildDate + + + i=47 + + + i=63 + + + i=78 + + 3057 + + i=294 + + -1 + 1 + 1 + 1000 + + + + VariableType_16 + + i=2150 + + + 0 + ServerDiagnosticsSummaryType + + + i=63 + + + i=859 + + -1 + + Variable_2 + + i=2151 + + + 0 + ServerViewCount + + + i=47 + + + i=63 + + + i=78 + + 2151 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2152 + + + 0 + CurrentSessionCount + + + i=47 + + + i=63 + + + i=78 + + 2152 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2153 + + + 0 + CumulatedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 2153 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2154 + + + 0 + SecurityRejectedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 2154 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2155 + + + 0 + RejectedSessionCount + + + i=47 + + + i=63 + + + i=78 + + 2155 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2156 + + + 0 + SessionTimeoutCount + + + i=47 + + + i=63 + + + i=78 + + 2156 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2157 + + + 0 + SessionAbortCount + + + i=47 + + + i=63 + + + i=78 + + 2157 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2159 + + + 0 + PublishingIntervalCount + + + i=47 + + + i=63 + + + i=78 + + 2159 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2160 + + + 0 + CurrentSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 2160 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2161 + + + 0 + CumulatedSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 2161 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2162 + + + 0 + SecurityRejectedRequestsCount + + + i=47 + + + i=63 + + + i=78 + + 2162 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2163 + + + 0 + RejectedRequestsCount + + + i=47 + + + i=63 + + + i=78 + + 2163 + + i=7 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2164 + + + 0 + SamplingIntervalDiagnosticsArrayType + + + i=63 + + + i=856 + + 1 + 0 + + Variable_2 + + i=12779 + + + 0 + SamplingIntervalDiagnostics + + + i=47 + + + i=2165 + + + i=83 + + 12779 + + i=856 + + -1 + 1 + 1 + + Variable_2 + + i=12780 + + + 0 + SamplingInterval + + + i=47 + + + i=63 + + + i=78 + + 12780 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=12781 + + + 0 + SampledMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12781 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12782 + + + 0 + MaxSampledMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12782 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12783 + + + 0 + DisabledMonitoredItemsSamplingCount + + + i=47 + + + i=63 + + + i=78 + + 12783 + + i=7 + + -1 + 1 + 1 + + + + + VariableType_16 + + i=2165 + + + 0 + SamplingIntervalDiagnosticsType + + + i=63 + + + i=856 + + -1 + + Variable_2 + + i=2166 + + + 0 + SamplingInterval + + + i=47 + + + i=63 + + + i=78 + + 2166 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=11697 + + + 0 + SampledMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 11697 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11698 + + + 0 + MaxSampledMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 11698 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11699 + + + 0 + DisabledMonitoredItemsSamplingCount + + + i=47 + + + i=63 + + + i=78 + + 11699 + + i=7 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2171 + + + 0 + SubscriptionDiagnosticsArrayType + + + i=63 + + + i=874 + + 1 + 0 + + Variable_2 + + i=12784 + + + 0 + SubscriptionDiagnostics + + + i=47 + + + i=2172 + + + i=83 + + 12784 + + i=874 + + -1 + 1 + 1 + + Variable_2 + + i=12785 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 12785 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=12786 + + + 0 + SubscriptionId + + + i=47 + + + i=63 + + + i=78 + + 12786 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12787 + + + 0 + Priority + + + i=47 + + + i=63 + + + i=78 + + 12787 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=12788 + + + 0 + PublishingInterval + + + i=47 + + + i=63 + + + i=78 + + 12788 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=12789 + + + 0 + MaxKeepAliveCount + + + i=47 + + + i=63 + + + i=78 + + 12789 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12790 + + + 0 + MaxLifetimeCount + + + i=47 + + + i=63 + + + i=78 + + 12790 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12791 + + + 0 + MaxNotificationsPerPublish + + + i=47 + + + i=63 + + + i=78 + + 12791 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12792 + + + 0 + PublishingEnabled + + + i=47 + + + i=63 + + + i=78 + + 12792 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=12793 + + + 0 + ModifyCount + + + i=47 + + + i=63 + + + i=78 + + 12793 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12794 + + + 0 + EnableCount + + + i=47 + + + i=63 + + + i=78 + + 12794 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12795 + + + 0 + DisableCount + + + i=47 + + + i=63 + + + i=78 + + 12795 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12796 + + + 0 + RepublishRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12796 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12797 + + + 0 + RepublishMessageRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12797 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12798 + + + 0 + RepublishMessageCount + + + i=47 + + + i=63 + + + i=78 + + 12798 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12799 + + + 0 + TransferRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12799 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12800 + + + 0 + TransferredToAltClientCount + + + i=47 + + + i=63 + + + i=78 + + 12800 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12801 + + + 0 + TransferredToSameClientCount + + + i=47 + + + i=63 + + + i=78 + + 12801 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12802 + + + 0 + PublishRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12802 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12803 + + + 0 + DataChangeNotificationsCount + + + i=47 + + + i=63 + + + i=78 + + 12803 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12804 + + + 0 + EventNotificationsCount + + + i=47 + + + i=63 + + + i=78 + + 12804 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12805 + + + 0 + NotificationsCount + + + i=47 + + + i=63 + + + i=78 + + 12805 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12806 + + + 0 + LatePublishRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12806 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12807 + + + 0 + CurrentKeepAliveCount + + + i=47 + + + i=63 + + + i=78 + + 12807 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12808 + + + 0 + CurrentLifetimeCount + + + i=47 + + + i=63 + + + i=78 + + 12808 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12809 + + + 0 + UnacknowledgedMessageCount + + + i=47 + + + i=63 + + + i=78 + + 12809 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12810 + + + 0 + DiscardedMessageCount + + + i=47 + + + i=63 + + + i=78 + + 12810 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12811 + + + 0 + MonitoredItemCount + + + i=47 + + + i=63 + + + i=78 + + 12811 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12812 + + + 0 + DisabledMonitoredItemCount + + + i=47 + + + i=63 + + + i=78 + + 12812 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12813 + + + 0 + MonitoringQueueOverflowCount + + + i=47 + + + i=63 + + + i=78 + + 12813 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12814 + + + 0 + NextSequenceNumber + + + i=47 + + + i=63 + + + i=78 + + 12814 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12815 + + + 0 + EventQueueOverflowCount + + + i=47 + + + i=63 + + + i=78 + + 12815 + + i=7 + + -1 + 1 + 1 + + + + + VariableType_16 + + i=2172 + + + 0 + SubscriptionDiagnosticsType + + + i=63 + + + i=874 + + -1 + + Variable_2 + + i=2173 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 2173 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2174 + + + 0 + SubscriptionId + + + i=47 + + + i=63 + + + i=78 + + 2174 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2175 + + + 0 + Priority + + + i=47 + + + i=63 + + + i=78 + + 2175 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=2176 + + + 0 + PublishingInterval + + + i=47 + + + i=63 + + + i=78 + + 2176 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=2177 + + + 0 + MaxKeepAliveCount + + + i=47 + + + i=63 + + + i=78 + + 2177 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8888 + + + 0 + MaxLifetimeCount + + + i=47 + + + i=63 + + + i=78 + + 8888 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2179 + + + 0 + MaxNotificationsPerPublish + + + i=47 + + + i=63 + + + i=78 + + 2179 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2180 + + + 0 + PublishingEnabled + + + i=47 + + + i=63 + + + i=78 + + 2180 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2181 + + + 0 + ModifyCount + + + i=47 + + + i=63 + + + i=78 + + 2181 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2182 + + + 0 + EnableCount + + + i=47 + + + i=63 + + + i=78 + + 2182 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2183 + + + 0 + DisableCount + + + i=47 + + + i=63 + + + i=78 + + 2183 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2184 + + + 0 + RepublishRequestCount + + + i=47 + + + i=63 + + + i=78 + + 2184 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2185 + + + 0 + RepublishMessageRequestCount + + + i=47 + + + i=63 + + + i=78 + + 2185 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2186 + + + 0 + RepublishMessageCount + + + i=47 + + + i=63 + + + i=78 + + 2186 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2187 + + + 0 + TransferRequestCount + + + i=47 + + + i=63 + + + i=78 + + 2187 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2188 + + + 0 + TransferredToAltClientCount + + + i=47 + + + i=63 + + + i=78 + + 2188 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2189 + + + 0 + TransferredToSameClientCount + + + i=47 + + + i=63 + + + i=78 + + 2189 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2190 + + + 0 + PublishRequestCount + + + i=47 + + + i=63 + + + i=78 + + 2190 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2191 + + + 0 + DataChangeNotificationsCount + + + i=47 + + + i=63 + + + i=78 + + 2191 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2998 + + + 0 + EventNotificationsCount + + + i=47 + + + i=63 + + + i=78 + + 2998 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2193 + + + 0 + NotificationsCount + + + i=47 + + + i=63 + + + i=78 + + 2193 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8889 + + + 0 + LatePublishRequestCount + + + i=47 + + + i=63 + + + i=78 + + 8889 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8890 + + + 0 + CurrentKeepAliveCount + + + i=47 + + + i=63 + + + i=78 + + 8890 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8891 + + + 0 + CurrentLifetimeCount + + + i=47 + + + i=63 + + + i=78 + + 8891 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8892 + + + 0 + UnacknowledgedMessageCount + + + i=47 + + + i=63 + + + i=78 + + 8892 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8893 + + + 0 + DiscardedMessageCount + + + i=47 + + + i=63 + + + i=78 + + 8893 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8894 + + + 0 + MonitoredItemCount + + + i=47 + + + i=63 + + + i=78 + + 8894 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8895 + + + 0 + DisabledMonitoredItemCount + + + i=47 + + + i=63 + + + i=78 + + 8895 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8896 + + + 0 + MonitoringQueueOverflowCount + + + i=47 + + + i=63 + + + i=78 + + 8896 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8897 + + + 0 + NextSequenceNumber + + + i=47 + + + i=63 + + + i=78 + + 8897 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8902 + + + 0 + EventQueueOverflowCount + + + i=47 + + + i=63 + + + i=78 + + 8902 + + i=7 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2196 + + + 0 + SessionDiagnosticsArrayType + + + i=63 + + + i=865 + + 1 + 0 + + Variable_2 + + i=12816 + + + 0 + SessionDiagnostics + + + i=47 + + + i=2197 + + + i=83 + + 12816 + + i=865 + + -1 + 1 + 1 + + Variable_2 + + i=12817 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 12817 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=12818 + + + 0 + SessionName + + + i=47 + + + i=63 + + + i=78 + + 12818 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12819 + + + 0 + ClientDescription + + + i=47 + + + i=63 + + + i=78 + + 12819 + + i=308 + + -1 + 1 + 1 + + + Variable_2 + + i=12820 + + + 0 + ServerUri + + + i=47 + + + i=63 + + + i=78 + + 12820 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12821 + + + 0 + EndpointUrl + + + i=47 + + + i=63 + + + i=78 + + 12821 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12822 + + + 0 + LocaleIds + + + i=47 + + + i=63 + + + i=78 + + 12822 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12823 + + + 0 + ActualSessionTimeout + + + i=47 + + + i=63 + + + i=78 + + 12823 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=12824 + + + 0 + MaxResponseMessageSize + + + i=47 + + + i=63 + + + i=78 + + 12824 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12825 + + + 0 + ClientConnectionTime + + + i=47 + + + i=63 + + + i=78 + + 12825 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=12826 + + + 0 + ClientLastContactTime + + + i=47 + + + i=63 + + + i=78 + + 12826 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=12827 + + + 0 + CurrentSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 12827 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12828 + + + 0 + CurrentMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12828 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12829 + + + 0 + CurrentPublishRequestsInQueue + + + i=47 + + + i=63 + + + i=78 + + 12829 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12830 + + + 0 + TotalRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12830 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12831 + + + 0 + UnauthorizedRequestCount + + + i=47 + + + i=63 + + + i=78 + + 12831 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12832 + + + 0 + ReadCount + + + i=47 + + + i=63 + + + i=78 + + 12832 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12833 + + + 0 + HistoryReadCount + + + i=47 + + + i=63 + + + i=78 + + 12833 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12834 + + + 0 + WriteCount + + + i=47 + + + i=63 + + + i=78 + + 12834 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12835 + + + 0 + HistoryUpdateCount + + + i=47 + + + i=63 + + + i=78 + + 12835 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12836 + + + 0 + CallCount + + + i=47 + + + i=63 + + + i=78 + + 12836 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12837 + + + 0 + CreateMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12837 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12838 + + + 0 + ModifyMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12838 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12839 + + + 0 + SetMonitoringModeCount + + + i=47 + + + i=63 + + + i=78 + + 12839 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12840 + + + 0 + SetTriggeringCount + + + i=47 + + + i=63 + + + i=78 + + 12840 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12841 + + + 0 + DeleteMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 12841 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12842 + + + 0 + CreateSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 12842 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12843 + + + 0 + ModifySubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 12843 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12844 + + + 0 + SetPublishingModeCount + + + i=47 + + + i=63 + + + i=78 + + 12844 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12845 + + + 0 + PublishCount + + + i=47 + + + i=63 + + + i=78 + + 12845 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12846 + + + 0 + RepublishCount + + + i=47 + + + i=63 + + + i=78 + + 12846 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12847 + + + 0 + TransferSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 12847 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12848 + + + 0 + DeleteSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 12848 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12849 + + + 0 + AddNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12849 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12850 + + + 0 + AddReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 12850 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12851 + + + 0 + DeleteNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12851 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12852 + + + 0 + DeleteReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 12852 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12853 + + + 0 + BrowseCount + + + i=47 + + + i=63 + + + i=78 + + 12853 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12854 + + + 0 + BrowseNextCount + + + i=47 + + + i=63 + + + i=78 + + 12854 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12855 + + + 0 + TranslateBrowsePathsToNodeIdsCount + + + i=47 + + + i=63 + + + i=78 + + 12855 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12856 + + + 0 + QueryFirstCount + + + i=47 + + + i=63 + + + i=78 + + 12856 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12857 + + + 0 + QueryNextCount + + + i=47 + + + i=63 + + + i=78 + + 12857 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12858 + + + 0 + RegisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12858 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=12859 + + + 0 + UnregisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 12859 + + i=871 + + -1 + 1 + 1 + + + + + VariableType_16 + + i=2197 + + + 0 + SessionDiagnosticsVariableType + + + i=63 + + + i=865 + + -1 + + Variable_2 + + i=2198 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 2198 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2199 + + + 0 + SessionName + + + i=47 + + + i=63 + + + i=78 + + 2199 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2200 + + + 0 + ClientDescription + + + i=47 + + + i=63 + + + i=78 + + 2200 + + i=308 + + -1 + 1 + 1 + + + Variable_2 + + i=2201 + + + 0 + ServerUri + + + i=47 + + + i=63 + + + i=78 + + 2201 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2202 + + + 0 + EndpointUrl + + + i=47 + + + i=63 + + + i=78 + + 2202 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2203 + + + 0 + LocaleIds + + + i=47 + + + i=63 + + + i=78 + + 2203 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2204 + + + 0 + ActualSessionTimeout + + + i=47 + + + i=63 + + + i=78 + + 2204 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=3050 + + + 0 + MaxResponseMessageSize + + + i=47 + + + i=63 + + + i=78 + + 3050 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2205 + + + 0 + ClientConnectionTime + + + i=47 + + + i=63 + + + i=78 + + 2205 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2206 + + + 0 + ClientLastContactTime + + + i=47 + + + i=63 + + + i=78 + + 2206 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2207 + + + 0 + CurrentSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 2207 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2208 + + + 0 + CurrentMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 2208 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2209 + + + 0 + CurrentPublishRequestsInQueue + + + i=47 + + + i=63 + + + i=78 + + 2209 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=8900 + + + 0 + TotalRequestCount + + + i=47 + + + i=63 + + + i=78 + + 8900 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=11892 + + + 0 + UnauthorizedRequestCount + + + i=47 + + + i=63 + + + i=78 + + 11892 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2217 + + + 0 + ReadCount + + + i=47 + + + i=63 + + + i=78 + + 2217 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2218 + + + 0 + HistoryReadCount + + + i=47 + + + i=63 + + + i=78 + + 2218 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2219 + + + 0 + WriteCount + + + i=47 + + + i=63 + + + i=78 + + 2219 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2220 + + + 0 + HistoryUpdateCount + + + i=47 + + + i=63 + + + i=78 + + 2220 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2221 + + + 0 + CallCount + + + i=47 + + + i=63 + + + i=78 + + 2221 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2222 + + + 0 + CreateMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 2222 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2223 + + + 0 + ModifyMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 2223 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2224 + + + 0 + SetMonitoringModeCount + + + i=47 + + + i=63 + + + i=78 + + 2224 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2225 + + + 0 + SetTriggeringCount + + + i=47 + + + i=63 + + + i=78 + + 2225 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2226 + + + 0 + DeleteMonitoredItemsCount + + + i=47 + + + i=63 + + + i=78 + + 2226 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2227 + + + 0 + CreateSubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 2227 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2228 + + + 0 + ModifySubscriptionCount + + + i=47 + + + i=63 + + + i=78 + + 2228 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2229 + + + 0 + SetPublishingModeCount + + + i=47 + + + i=63 + + + i=78 + + 2229 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2230 + + + 0 + PublishCount + + + i=47 + + + i=63 + + + i=78 + + 2230 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2231 + + + 0 + RepublishCount + + + i=47 + + + i=63 + + + i=78 + + 2231 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2232 + + + 0 + TransferSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 2232 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2233 + + + 0 + DeleteSubscriptionsCount + + + i=47 + + + i=63 + + + i=78 + + 2233 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2234 + + + 0 + AddNodesCount + + + i=47 + + + i=63 + + + i=78 + + 2234 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2235 + + + 0 + AddReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 2235 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2236 + + + 0 + DeleteNodesCount + + + i=47 + + + i=63 + + + i=78 + + 2236 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2237 + + + 0 + DeleteReferencesCount + + + i=47 + + + i=63 + + + i=78 + + 2237 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2238 + + + 0 + BrowseCount + + + i=47 + + + i=63 + + + i=78 + + 2238 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2239 + + + 0 + BrowseNextCount + + + i=47 + + + i=63 + + + i=78 + + 2239 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2240 + + + 0 + TranslateBrowsePathsToNodeIdsCount + + + i=47 + + + i=63 + + + i=78 + + 2240 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2241 + + + 0 + QueryFirstCount + + + i=47 + + + i=63 + + + i=78 + + 2241 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2242 + + + 0 + QueryNextCount + + + i=47 + + + i=63 + + + i=78 + + 2242 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2730 + + + 0 + RegisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 2730 + + i=871 + + -1 + 1 + 1 + + + Variable_2 + + i=2731 + + + 0 + UnregisterNodesCount + + + i=47 + + + i=63 + + + i=78 + + 2731 + + i=871 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2243 + + + 0 + SessionSecurityDiagnosticsArrayType + + + i=63 + + + i=868 + + 1 + 0 + + Variable_2 + + i=12860 + + + 0 + SessionSecurityDiagnostics + + + i=47 + + + i=2244 + + + i=83 + + 12860 + + i=868 + + -1 + 1 + 1 + + Variable_2 + + i=12861 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 12861 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=12862 + + + 0 + ClientUserIdOfSession + + + i=47 + + + i=63 + + + i=78 + + 12862 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12863 + + + 0 + ClientUserIdHistory + + + i=47 + + + i=63 + + + i=78 + + 12863 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12864 + + + 0 + AuthenticationMechanism + + + i=47 + + + i=63 + + + i=78 + + 12864 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12865 + + + 0 + Encoding + + + i=47 + + + i=63 + + + i=78 + + 12865 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12866 + + + 0 + TransportProtocol + + + i=47 + + + i=63 + + + i=78 + + 12866 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12867 + + + 0 + SecurityMode + + + i=47 + + + i=63 + + + i=78 + + 12867 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=12868 + + + 0 + SecurityPolicyUri + + + i=47 + + + i=63 + + + i=78 + + 12868 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12869 + + + 0 + ClientCertificate + + + i=47 + + + i=63 + + + i=78 + + 12869 + + i=15 + + -1 + 1 + 1 + + + + + VariableType_16 + + i=2244 + + + 0 + SessionSecurityDiagnosticsType + + + i=63 + + + i=868 + + -1 + + Variable_2 + + i=2245 + + + 0 + SessionId + + + i=47 + + + i=63 + + + i=78 + + 2245 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2246 + + + 0 + ClientUserIdOfSession + + + i=47 + + + i=63 + + + i=78 + + 2246 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2247 + + + 0 + ClientUserIdHistory + + + i=47 + + + i=63 + + + i=78 + + 2247 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2248 + + + 0 + AuthenticationMechanism + + + i=47 + + + i=63 + + + i=78 + + 2248 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2249 + + + 0 + Encoding + + + i=47 + + + i=63 + + + i=78 + + 2249 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2250 + + + 0 + TransportProtocol + + + i=47 + + + i=63 + + + i=78 + + 2250 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2251 + + + 0 + SecurityMode + + + i=47 + + + i=63 + + + i=78 + + 2251 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=2252 + + + 0 + SecurityPolicyUri + + + i=47 + + + i=63 + + + i=78 + + 2252 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3058 + + + 0 + ClientCertificate + + + i=47 + + + i=63 + + + i=78 + + 3058 + + i=15 + + -1 + 1 + 1 + + + + VariableType_16 + + i=11487 + + + 0 + OptionSetType + + + i=63 + + + i=24 + + -1 + + Variable_2 + + i=11488 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 11488 + + i=21 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11701 + + + 0 + BitMask + + + i=46 + + + i=68 + + + i=80 + + 11701 + + i=1 + + 1 + 0 + 1 + 1 + + + + VariableType_16 + + i=16309 + + + 0 + SelectionListType + + + i=63 + + + i=24 + + + Variable_2 + + i=17632 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17632 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17633 + + + 0 + SelectionDescriptions + + + i=46 + + + i=68 + + + i=80 + + 17633 + + i=21 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16312 + + + 0 + RestrictToList + + + i=46 + + + i=68 + + + i=80 + + 16312 + + i=1 + + -1 + 1 + 1 + + + + VariableType_16 + + i=17986 + + + 0 + AudioVariableType + + + i=63 + + + i=16307 + + -1 + + Variable_2 + + i=17988 + + + 0 + ListId + + + i=46 + + + i=68 + + + i=80 + + 17988 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17989 + + + 0 + AgencyId + + + i=46 + + + i=68 + + + i=80 + + 17989 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17990 + + + 0 + VersionId + + + i=46 + + + i=68 + + + i=80 + + 17990 + + i=12 + + -1 + 1 + 1 + + + + Object_1 + + i=3048 + + + 0 + EventTypes + + + i=47 + + + i=61 + + 3048 + + + + i=35 + + true + + i=86 + + + + + i=35 + + + i=2041 + + + + + + Object_1 + + i=2253 + + + 0 + Server + + + i=47 + + + i=2004 + + 2253 + 1 + + + + i=35 + + true + + i=85 + + + + + Variable_2 + + i=2254 + + + 0 + ServerArray + + + i=46 + + + i=68 + + 2254 + + i=12 + + 1 + 0 + 1 + 1 + 1000 + + + Variable_2 + + i=2255 + + + 0 + NamespaceArray + + + i=46 + + + i=68 + + 2255 + + i=12 + + 1 + 0 + 1 + 1 + 1000 + + + Variable_2 + + i=2256 + + + 0 + ServerStatus + + + i=47 + + + i=2138 + + 2256 + + i=862 + + -1 + 1 + 1 + 1000 + + Variable_2 + + i=2257 + + + 0 + StartTime + + + i=47 + + + i=63 + + 2257 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2258 + + + 0 + CurrentTime + + + i=47 + + + i=63 + + 2258 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2259 + + + 0 + State + + + i=47 + + + i=63 + + 2259 + + i=852 + + -1 + 1 + 1 + + + Variable_2 + + i=2260 + + + 0 + BuildInfo + + + i=47 + + + i=3051 + + 2260 + + i=338 + + -1 + 1 + 1 + + Variable_2 + + i=2262 + + + 0 + ProductUri + + + i=47 + + + i=63 + + 2262 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2263 + + + 0 + ManufacturerName + + + i=47 + + + i=63 + + 2263 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2261 + + + 0 + ProductName + + + i=47 + + + i=63 + + 2261 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2264 + + + 0 + SoftwareVersion + + + i=47 + + + i=63 + + 2264 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2265 + + + 0 + BuildNumber + + + i=47 + + + i=63 + + 2265 + + i=12 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2266 + + + 0 + BuildDate + + + i=47 + + + i=63 + + 2266 + + i=294 + + -1 + 1 + 1 + 1000 + + + + Variable_2 + + i=2992 + + + 0 + SecondsTillShutdown + + + i=47 + + + i=63 + + 2992 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2993 + + + 0 + ShutdownReason + + + i=47 + + + i=63 + + 2993 + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=2267 + + + 0 + ServiceLevel + + + i=46 + + + i=68 + + 2267 + + i=3 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=2994 + + + 0 + Auditing + + + i=46 + + + i=68 + + 2994 + + i=1 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=12885 + + + 0 + EstimatedReturnTime + + + i=46 + + + i=68 + + 12885 + + i=13 + + -1 + 1 + 1 + 1000 + + + Variable_2 + + i=17634 + + + 0 + LocalTime + + + i=46 + + + i=68 + + 17634 + + i=8912 + + -1 + 1 + 1 + 1000 + + + Object_1 + + i=2268 + + + 0 + ServerCapabilities + + + i=47 + + + i=2013 + + 2268 + + Variable_2 + + i=2269 + + + 0 + ServerProfileArray + + + i=46 + + + i=68 + + 2269 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2271 + + + 0 + LocaleIdArray + + + i=46 + + + i=68 + + 2271 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2272 + + + 0 + MinSupportedSampleRate + + + i=46 + + + i=68 + + 2272 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=2735 + + + 0 + MaxBrowseContinuationPoints + + + i=46 + + + i=68 + + 2735 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=2736 + + + 0 + MaxQueryContinuationPoints + + + i=46 + + + i=68 + + 2736 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=2737 + + + 0 + MaxHistoryContinuationPoints + + + i=46 + + + i=68 + + 2737 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=3704 + + + 0 + SoftwareCertificates + + + i=46 + + + i=68 + + 3704 + + i=344 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11702 + + + 0 + MaxArrayLength + + + i=46 + + + i=68 + + 11702 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11703 + + + 0 + MaxStringLength + + + i=46 + + + i=68 + + 11703 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12911 + + + 0 + MaxByteStringLength + + + i=46 + + + i=68 + + 12911 + + i=7 + + -1 + 1 + 1 + + + Object_1 + + i=11704 + + + 0 + OperationLimits + + + i=47 + + + i=11564 + + 11704 + + Variable_2 + + i=11705 + + + 0 + MaxNodesPerRead + + + i=46 + + + i=68 + + 11705 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12165 + + + 0 + MaxNodesPerHistoryReadData + + + i=46 + + + i=68 + + 12165 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12166 + + + 0 + MaxNodesPerHistoryReadEvents + + + i=46 + + + i=68 + + 12166 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11707 + + + 0 + MaxNodesPerWrite + + + i=46 + + + i=68 + + 11707 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12167 + + + 0 + MaxNodesPerHistoryUpdateData + + + i=46 + + + i=68 + + 12167 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12168 + + + 0 + MaxNodesPerHistoryUpdateEvents + + + i=46 + + + i=68 + + 12168 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11709 + + + 0 + MaxNodesPerMethodCall + + + i=46 + + + i=68 + + 11709 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11710 + + + 0 + MaxNodesPerBrowse + + + i=46 + + + i=68 + + 11710 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11711 + + + 0 + MaxNodesPerRegisterNodes + + + i=46 + + + i=68 + + 11711 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11712 + + + 0 + MaxNodesPerTranslateBrowsePathsToNodeIds + + + i=46 + + + i=68 + + 11712 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11713 + + + 0 + MaxNodesPerNodeManagement + + + i=46 + + + i=68 + + 11713 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11714 + + + 0 + MaxMonitoredItemsPerCall + + + i=46 + + + i=68 + + 11714 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2996 + + + 0 + ModellingRules + + + i=47 + + + i=61 + + 2996 + + + Object_1 + + i=2997 + + + 0 + AggregateFunctions + + + i=47 + + + i=61 + + 2997 + + + Object_1 + + i=15606 + + + 0 + RoleSet + + + i=47 + + + i=15607 + + 15606 + + Method_4 + + i=16301 + + + 0 + AddRole + + + i=47 + + + i=15997 + + 16301 + true + true + + Variable_2 + + i=16302 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16302 + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16303 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 16303 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16304 + + + 0 + RemoveRole + + + i=47 + + + i=16000 + + 16304 + true + true + + Variable_2 + + i=16305 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16305 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + + Object_1 + + i=2274 + + + 0 + ServerDiagnostics + + + i=47 + + + i=2020 + + 2274 + + Variable_2 + + i=2275 + + + 0 + ServerDiagnosticsSummary + + + i=47 + + + i=2150 + + 2275 + + i=859 + + -1 + 1 + 1 + + Variable_2 + + i=2276 + + + 0 + ServerViewCount + + + i=47 + + + i=63 + + 2276 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2277 + + + 0 + CurrentSessionCount + + + i=47 + + + i=63 + + 2277 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2278 + + + 0 + CumulatedSessionCount + + + i=47 + + + i=63 + + 2278 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2279 + + + 0 + SecurityRejectedSessionCount + + + i=47 + + + i=63 + + 2279 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3705 + + + 0 + RejectedSessionCount + + + i=47 + + + i=63 + + 3705 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2281 + + + 0 + SessionTimeoutCount + + + i=47 + + + i=63 + + 2281 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2282 + + + 0 + SessionAbortCount + + + i=47 + + + i=63 + + 2282 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2284 + + + 0 + PublishingIntervalCount + + + i=47 + + + i=63 + + 2284 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2285 + + + 0 + CurrentSubscriptionCount + + + i=47 + + + i=63 + + 2285 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2286 + + + 0 + CumulatedSubscriptionCount + + + i=47 + + + i=63 + + 2286 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2287 + + + 0 + SecurityRejectedRequestsCount + + + i=47 + + + i=63 + + 2287 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2288 + + + 0 + RejectedRequestsCount + + + i=47 + + + i=63 + + 2288 + + i=7 + + -1 + 1 + 1 + + + + Variable_2 + + i=2289 + + + 0 + SamplingIntervalDiagnosticsArray + + + i=47 + + + i=2164 + + 2289 + + i=856 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2290 + + + 0 + SubscriptionDiagnosticsArray + + + i=47 + + + i=2171 + + 2290 + + i=874 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=3706 + + + 0 + SessionsDiagnosticsSummary + + + i=47 + + + i=2026 + + 3706 + + Variable_2 + + i=3707 + + + 0 + SessionDiagnosticsArray + + + i=47 + + + i=2196 + + 3707 + + i=865 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3708 + + + 0 + SessionSecurityDiagnosticsArray + + + i=47 + + + i=2243 + + 3708 + + i=868 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=2294 + + + 0 + EnabledFlag + + + i=46 + + + i=68 + + 2294 + + i=1 + + -1 + 3 + 3 + + + + Object_1 + + i=2295 + + + 0 + VendorServerInfo + + + i=47 + + + i=2033 + + 2295 + + + Object_1 + + i=2296 + + + 0 + ServerRedundancy + + + i=47 + + + i=2034 + + 2296 + + Variable_2 + + i=3709 + + + 0 + RedundancySupport + + + i=46 + + + i=68 + + 3709 + + i=851 + + -1 + 1 + 1 + + + Variable_2 + + i=11312 + + + 0 + CurrentServerId + + + i=46 + + + i=68 + + 11312 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11313 + + + 0 + RedundantServerArray + + + i=46 + + + i=68 + + 11313 + + i=853 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11314 + + + 0 + ServerUriArray + + + i=46 + + + i=68 + + 11314 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14415 + + + 0 + ServerNetworkGroups + + + i=46 + + + i=68 + + 14415 + + i=11944 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=11715 + + + 0 + Namespaces + + + i=47 + + + i=11645 + + 11715 + + + Method_4 + + i=11492 + + + 0 + GetMonitoredItems + + + i=47 + + + i=11489 + + 11492 + true + true + + Variable_2 + + i=11493 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 11493 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11494 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 11494 + + + + + + i=297 + + + + ServerHandles + + i=7 + + 1 + + 0 + + + + + + + i=297 + + + + ClientHandles + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12873 + + + 0 + ResendData + + + i=47 + + + i=12871 + + 12873 + true + true + + Variable_2 + + i=12874 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12874 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12749 + + + 0 + SetSubscriptionDurable + + + i=47 + + + i=12746 + + 12749 + true + true + + Variable_2 + + i=12750 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12750 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + i=297 + + + + LifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12751 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12751 + + + + + + i=297 + + + + RevisedLifetimeInHours + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12886 + + + 0 + RequestServerStateChange + + + i=47 + + + i=12883 + + 12886 + true + true + + Variable_2 + + i=12887 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12887 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=11192 + + + 0 + HistoryServerCapabilities + + + i=47 + + + i=2330 + + 11192 + + + + i=47 + + true + + i=2268 + + + + + Variable_2 + + i=11193 + + + 0 + AccessHistoryDataCapability + + + i=46 + + + i=68 + + 11193 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11242 + + + 0 + AccessHistoryEventsCapability + + + i=46 + + + i=68 + + 11242 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11273 + + + 0 + MaxReturnDataValues + + + i=46 + + + i=68 + + 11273 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11274 + + + 0 + MaxReturnEventValues + + + i=46 + + + i=68 + + 11274 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11196 + + + 0 + InsertDataCapability + + + i=46 + + + i=68 + + 11196 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11197 + + + 0 + ReplaceDataCapability + + + i=46 + + + i=68 + + 11197 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11198 + + + 0 + UpdateDataCapability + + + i=46 + + + i=68 + + 11198 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11199 + + + 0 + DeleteRawCapability + + + i=46 + + + i=68 + + 11199 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11200 + + + 0 + DeleteAtTimeCapability + + + i=46 + + + i=68 + + 11200 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11281 + + + 0 + InsertEventCapability + + + i=46 + + + i=68 + + 11281 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11282 + + + 0 + ReplaceEventCapability + + + i=46 + + + i=68 + + 11282 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11283 + + + 0 + UpdateEventCapability + + + i=46 + + + i=68 + + 11283 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11502 + + + 0 + DeleteEventCapability + + + i=46 + + + i=68 + + 11502 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11275 + + + 0 + InsertAnnotationCapability + + + i=46 + + + i=68 + + 11275 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=11201 + + + 0 + AggregateFunctions + + + i=47 + + + i=61 + + 11201 + + + Variable_2 + + i=19091 + + + 0 + ServerTimestampSupported + + + i=46 + + + i=68 + + 19091 + + i=1 + + -1 + 1 + 1 + + + + DataType_64 + + i=11737 + + + 0 + BitFieldMaskDataType + + + i=9 + + + + DataType_64 + + i=14533 + + + 0 + KeyValuePair + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Key + + i=20 + + -1 + + 0 + false + + + Value + + i=24 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15528 + + + 0 + EndpointType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + EndpointUrl + + i=12 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityPolicyUri + + i=12 + + -1 + + 0 + false + + + TransportProfileUri + + i=12 + + -1 + + 0 + false + + + + + + + + ObjectType_8 + + i=2299 + + + 0 + StateMachineType + + + i=58 + + + Variable_2 + + i=2769 + + + 0 + CurrentState + + + i=47 + + + i=2755 + + + i=78 + + 2769 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3720 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3720 + + i=24 + + -1 + 1 + 1 + + + + Variable_2 + + i=2770 + + + 0 + LastTransition + + + i=47 + + + i=2762 + + + i=80 + + 2770 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3724 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3724 + + i=24 + + -1 + 1 + 1 + + + + + VariableType_16 + + i=2755 + + + 0 + StateVariableType + + + i=63 + + + i=21 + + -1 + + Variable_2 + + i=2756 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 2756 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=2757 + + + 0 + Name + + + i=46 + + + i=68 + + + i=80 + + 2757 + + i=20 + + -1 + 1 + 1 + + + Variable_2 + + i=2758 + + + 0 + Number + + + i=46 + + + i=68 + + + i=80 + + 2758 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2759 + + + 0 + EffectiveDisplayName + + + i=46 + + + i=68 + + + i=80 + + 2759 + + i=21 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2762 + + + 0 + TransitionVariableType + + + i=63 + + + i=21 + + -1 + + Variable_2 + + i=2763 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 2763 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=2764 + + + 0 + Name + + + i=46 + + + i=68 + + + i=80 + + 2764 + + i=20 + + -1 + 1 + 1 + + + Variable_2 + + i=2765 + + + 0 + Number + + + i=46 + + + i=68 + + + i=80 + + 2765 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2766 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 2766 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=11456 + + + 0 + EffectiveTransitionTime + + + i=46 + + + i=68 + + + i=80 + + 11456 + + i=294 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2771 + + + 0 + FiniteStateMachineType + + + i=2299 + + true + + Variable_2 + + i=2772 + + + 0 + CurrentState + + + i=47 + + + i=2760 + + + i=78 + + 2772 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3728 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3728 + + i=17 + + -1 + 1 + 1 + + + + Variable_2 + + i=2773 + + + 0 + LastTransition + + + i=47 + + + i=2767 + + + i=80 + + 2773 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3732 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3732 + + i=17 + + -1 + 1 + 1 + + + + Variable_2 + + i=17635 + + + 0 + AvailableStates + + + i=47 + + + i=63 + + + i=80 + + 17635 + + i=17 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17636 + + + 0 + AvailableTransitions + + + i=47 + + + i=63 + + + i=80 + + 17636 + + i=17 + + 1 + 0 + 1 + 1 + + + + VariableType_16 + + i=2760 + + + 0 + FiniteStateVariableType + + + i=2755 + + + i=21 + + -1 + + Variable_2 + + i=2761 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 2761 + + i=17 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2767 + + + 0 + FiniteTransitionVariableType + + + i=2762 + + + i=21 + + -1 + + Variable_2 + + i=2768 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 2768 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2307 + + + 0 + StateType + + + i=58 + + + Variable_2 + + i=2308 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 2308 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2309 + + + 0 + InitialStateType + + + i=2307 + + + + ObjectType_8 + + i=2310 + + + 0 + TransitionType + + + i=58 + + + Variable_2 + + i=2312 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2312 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=15109 + + + 0 + ChoiceStateType + + + i=2307 + + + + ReferenceType_32 + + i=15112 + + + 0 + HasGuard + + + i=47 + + + + GuardOf + + + + VariableType_16 + + i=15113 + + + 0 + GuardVariableType + + + i=63 + + + i=21 + + -1 + + + VariableType_16 + + i=15128 + + + 0 + ExpressionGuardVariableType + + + i=15113 + + + i=21 + + -1 + + Variable_2 + + i=15129 + + + 0 + Expression + + + i=46 + + + i=68 + + + i=78 + + 15129 + + i=586 + + -1 + 1 + 1 + + + + VariableType_16 + + i=15317 + + + 0 + ElseGuardVariableType + + + i=15113 + + + i=21 + + -1 + + + VariableType_16 + + i=17709 + + + 0 + RationalNumberType + + + i=63 + + + i=18806 + + -1 + + Variable_2 + + i=17712 + + + 0 + Numerator + + + i=47 + + + i=63 + + + i=78 + + 17712 + + i=6 + + -1 + 1 + 1 + + + Variable_2 + + i=17713 + + + 0 + Denominator + + + i=47 + + + i=63 + + + i=78 + + 17713 + + i=7 + + -1 + 1 + 1 + + + + VariableType_16 + + i=17714 + + + 0 + VectorType + + + i=63 + + true + + i=18807 + + -1 + + Variable_2 + + i=17715 + + + 0 + VectorUnit + + + i=46 + + + i=68 + + + i=80 + + 17715 + + i=887 + + -1 + 1 + 1 + + + + VariableType_16 + + i=17716 + + + 0 + 3DVectorType + + + i=17714 + + + i=18808 + + -1 + + Variable_2 + + i=18769 + + + 0 + X + + + i=47 + + + i=63 + + + i=78 + + 18769 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18770 + + + 0 + Y + + + i=47 + + + i=63 + + + i=78 + + 18770 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18771 + + + 0 + Z + + + i=47 + + + i=63 + + + i=78 + + 18771 + + i=11 + + -1 + 1 + 1 + + + + VariableType_16 + + i=18772 + + + 0 + CartesianCoordinatesType + + + i=63 + + true + + i=18809 + + -1 + + Variable_2 + + i=18773 + + + 0 + LengthUnit + + + i=46 + + + i=68 + + + i=80 + + 18773 + + i=887 + + -1 + 1 + 1 + + + + VariableType_16 + + i=18774 + + + 0 + 3DCartesianCoordinatesType + + + i=18772 + + + i=18810 + + -1 + + Variable_2 + + i=18776 + + + 0 + X + + + i=47 + + + i=63 + + + i=78 + + 18776 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18777 + + + 0 + Y + + + i=47 + + + i=63 + + + i=78 + + 18777 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18778 + + + 0 + Z + + + i=47 + + + i=63 + + + i=78 + + 18778 + + i=11 + + -1 + 1 + 1 + + + + VariableType_16 + + i=18779 + + + 0 + OrientationType + + + i=63 + + true + + i=18811 + + -1 + + Variable_2 + + i=18780 + + + 0 + AngleUnit + + + i=46 + + + i=68 + + + i=80 + + 18780 + + i=887 + + -1 + 1 + 1 + + + + VariableType_16 + + i=18781 + + + 0 + 3DOrientationType + + + i=18779 + + + i=18812 + + -1 + + Variable_2 + + i=18783 + + + 0 + A + + + i=47 + + + i=63 + + + i=78 + + 18783 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18784 + + + 0 + B + + + i=47 + + + i=63 + + + i=78 + + 18784 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18785 + + + 0 + C + + + i=47 + + + i=63 + + + i=78 + + 18785 + + i=11 + + -1 + 1 + 1 + + + + VariableType_16 + + i=18786 + + + 0 + FrameType + + + i=63 + + true + + i=18813 + + -1 + + Variable_2 + + i=18801 + + + 0 + CartesianCoordinates + + + i=47 + + + i=18772 + + + i=78 + + 18801 + + i=18809 + + -1 + 1 + 1 + + + Variable_2 + + i=18787 + + + 0 + Orientation + + + i=47 + + + i=18779 + + + i=78 + + 18787 + + i=18811 + + -1 + 1 + 1 + + + Variable_2 + + i=18788 + + + 0 + Constant + + + i=46 + + + i=68 + + + i=80 + + 18788 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18789 + + + 0 + BaseFrame + + + i=47 + + + i=63 + + + i=80 + + 18789 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=18790 + + + 0 + FixedBase + + + i=46 + + + i=68 + + + i=80 + + 18790 + + i=1 + + -1 + 1 + 1 + + + + VariableType_16 + + i=18791 + + + 0 + 3DFrameType + + + i=18786 + + + i=18814 + + -1 + + Variable_2 + + i=18796 + + + 0 + CartesianCoordinates + + + i=47 + + + i=18774 + + + i=78 + + 18796 + + i=18810 + + -1 + 1 + 1 + + Variable_2 + + i=18798 + + + 0 + X + + + i=47 + + + i=63 + + + i=78 + + 18798 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18799 + + + 0 + Y + + + i=47 + + + i=63 + + + i=78 + + 18799 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=18800 + + + 0 + Z + + + i=47 + + + i=63 + + + i=78 + + 18800 + + i=11 + + -1 + 1 + 1 + + + + Variable_2 + + i=18792 + + + 0 + Orientation + + + i=47 + + + i=18781 + + + i=78 + + 18792 + + i=18812 + + -1 + 1 + 1 + + Variable_2 + + i=19074 + + + 0 + A + + + i=47 + + + i=63 + + + i=78 + + 19074 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=19075 + + + 0 + B + + + i=47 + + + i=63 + + + i=78 + + 19075 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=19076 + + + 0 + C + + + i=47 + + + i=63 + + + i=78 + + 19076 + + i=11 + + -1 + 1 + 1 + + + + + DataType_64 + + i=18806 + + + 0 + RationalNumber + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Numerator + + i=6 + + -1 + + 0 + false + + + Denominator + + i=7 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=18807 + + + 0 + Vector + + + i=22 + + true + + + DataType_64 + + i=18808 + + + 0 + 3DVector + + + i=18807 + + + + i=14798 + + + + + i=18807 + + Structure_0 + + + X + + i=11 + + -1 + + 0 + false + + + Y + + i=11 + + -1 + + 0 + false + + + Z + + i=11 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=18809 + + + 0 + CartesianCoordinates + + + i=22 + + true + + + DataType_64 + + i=18810 + + + 0 + 3DCartesianCoordinates + + + i=18809 + + + + i=14798 + + + + + i=18809 + + Structure_0 + + + X + + i=11 + + -1 + + 0 + false + + + Y + + i=11 + + -1 + + 0 + false + + + Z + + i=11 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=18811 + + + 0 + Orientation + + + i=22 + + true + + + DataType_64 + + i=18812 + + + 0 + 3DOrientation + + + i=18811 + + + + i=14798 + + + + + i=18811 + + Structure_0 + + + A + + i=11 + + -1 + + 0 + false + + + B + + i=11 + + -1 + + 0 + false + + + C + + i=11 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=18813 + + + 0 + Frame + + + i=22 + + true + + + DataType_64 + + i=18814 + + + 0 + 3DFrame + + + i=18813 + + + + i=14798 + + + + + i=18813 + + Structure_0 + + + CartesianCoordinates + + i=18810 + + -1 + + 0 + false + + + Orientation + + i=18812 + + -1 + + 0 + false + + + + + + + + ObjectType_8 + + i=2311 + + + 0 + TransitionEventType + + + i=2041 + + true + + Variable_2 + + i=2774 + + + 0 + Transition + + + i=47 + + + i=2762 + + + i=78 + + 2774 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3754 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3754 + + i=24 + + -1 + 1 + 1 + + + + Variable_2 + + i=2775 + + + 0 + FromState + + + i=47 + + + i=2755 + + + i=78 + + 2775 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3746 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3746 + + i=24 + + -1 + 1 + 1 + + + + Variable_2 + + i=2776 + + + 0 + ToState + + + i=47 + + + i=2755 + + + i=78 + + 2776 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3750 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3750 + + i=24 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=2315 + + + 0 + AuditUpdateStateEventType + + + i=2127 + + true + + Variable_2 + + i=2777 + + + 0 + OldStateId + + + i=46 + + + i=68 + + + i=78 + + 2777 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=2778 + + + 0 + NewStateId + + + i=46 + + + i=68 + + + i=78 + + 2778 + + i=24 + + -1 + 1 + 1 + + + + DataType_64 + + i=11939 + + + 0 + OpenFileMode + + + i=29 + + + + i=14799 + + + + + + 1 + + Read + + Read + + + 2 + + Write + + Write + + + 4 + + EraseExisting + + EraseExisting + + + 8 + + Append + + Append + + + + + + + Variable_2 + + i=11940 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 11940 + + + + + + i=7616 + + + + 1 + + + Read + + + + + + + i=7616 + + + + 2 + + + Write + + + + + + + i=7616 + + + + 4 + + + EraseExisting + + + + + + + i=7616 + + + + 8 + + + Append + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=13353 + + + 0 + FileDirectoryType + + + i=61 + + + Object_1 + + i=13354 + + + 0 + <FileDirectoryName> + + + i=35 + + + i=13353 + + + i=11508 + + 13354 + + Method_4 + + i=13355 + + + 0 + CreateDirectory + + + i=47 + + + i=13387 + + + i=78 + + 13355 + true + true + + Variable_2 + + i=13356 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13356 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13357 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13357 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13358 + + + 0 + CreateFile + + + i=47 + + + i=13390 + + + i=78 + + 13358 + true + true + + Variable_2 + + i=13359 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13359 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13360 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13360 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=17718 + + + 0 + Delete + + + i=47 + + + i=13393 + + + i=78 + + 17718 + true + true + + Variable_2 + + i=17719 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17719 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13363 + + + 0 + MoveOrCopy + + + i=47 + + + i=13395 + + + i=78 + + 13363 + true + true + + Variable_2 + + i=13364 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13364 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13365 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13365 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=13366 + + + 0 + <FileName> + + + i=35 + + + i=11575 + + + i=11508 + + 13366 + + Variable_2 + + i=13367 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13367 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13368 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13368 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13369 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13369 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13370 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13370 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13372 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13372 + true + true + + Variable_2 + + i=13373 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13373 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13374 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13374 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13375 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13375 + true + true + + Variable_2 + + i=13376 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13376 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13377 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13377 + true + true + + Variable_2 + + i=13378 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13378 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13379 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13379 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13380 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13380 + true + true + + Variable_2 + + i=13381 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13381 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13382 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13382 + true + true + + Variable_2 + + i=13383 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13383 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13384 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13384 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13385 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13385 + true + true + + Variable_2 + + i=13386 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13386 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Method_4 + + i=13387 + + + 0 + CreateDirectory + + + i=47 + + + i=13387 + + + i=78 + + 13387 + true + true + + Variable_2 + + i=13388 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13388 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13389 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13389 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13390 + + + 0 + CreateFile + + + i=47 + + + i=13390 + + + i=78 + + 13390 + true + true + + Variable_2 + + i=13391 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13391 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13392 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13392 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13393 + + + 0 + Delete + + + i=47 + + + i=13393 + + + i=78 + + 13393 + true + true + + Variable_2 + + i=13394 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13394 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13395 + + + 0 + MoveOrCopy + + + i=47 + + + i=13395 + + + i=78 + + 13395 + true + true + + Variable_2 + + i=13396 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13396 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13397 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13397 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=16314 + + + 0 + FileSystem + + + i=47 + + + i=13353 + + 16314 + + Method_4 + + i=16348 + + + 0 + CreateDirectory + + + i=47 + + + i=13387 + + 16348 + true + true + + Variable_2 + + i=16349 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16349 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16350 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 16350 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16351 + + + 0 + CreateFile + + + i=47 + + + i=13390 + + 16351 + true + true + + Variable_2 + + i=16352 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16352 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16353 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 16353 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16354 + + + 0 + Delete + + + i=47 + + + i=13393 + + 16354 + true + true + + Variable_2 + + i=16355 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16355 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16356 + + + 0 + MoveOrCopy + + + i=47 + + + i=13395 + + 16356 + true + true + + Variable_2 + + i=16357 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16357 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16358 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 16358 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=15744 + + + 0 + TemporaryFileTransferType + + + i=58 + + + Variable_2 + + i=15745 + + + 0 + ClientProcessingTimeout + + + i=46 + + + i=68 + + + i=78 + + 15745 + + i=290 + + -1 + 1 + 1 + + + Method_4 + + i=15746 + + + 0 + GenerateFileForRead + + + i=47 + + + i=15746 + + + i=78 + + 15746 + true + true + + Variable_2 + + i=15747 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15747 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15748 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15748 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15749 + + + 0 + GenerateFileForWrite + + + i=47 + + + i=15749 + + + i=78 + + 15749 + true + true + + Variable_2 + + i=16359 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16359 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15750 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15750 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15751 + + + 0 + CloseAndCommit + + + i=47 + + + i=15751 + + + i=78 + + 15751 + true + true + + Variable_2 + + i=15752 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15752 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15753 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15753 + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=15754 + + + 0 + <TransferState> + + + i=47 + + + i=15803 + + + i=11508 + + 15754 + + Variable_2 + + i=15755 + + + 0 + CurrentState + + + i=47 + + + i=2760 + + + i=78 + + 15755 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=15756 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 15756 + + i=17 + + -1 + 1 + 1 + + + + Method_4 + + i=15794 + + + 0 + Reset + + + i=47 + + + i=15843 + + + i=78 + + 15794 + true + true + + + + + ObjectType_8 + + i=15803 + + + 0 + FileTransferStateMachineType + + + i=2771 + + + Object_1 + + i=15815 + + + 0 + Idle + + + i=47 + + + i=2309 + + 15815 + + + + i=51 + + true + + i=15825 + + + + + i=52 + + true + + i=15829 + + + + + i=51 + + true + + i=15831 + + + + + i=52 + + true + + i=15833 + + + + + i=52 + + true + + i=15841 + + + + + Variable_2 + + i=15816 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 15816 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15817 + + + 0 + ReadPrepare + + + i=47 + + + i=2307 + + 15817 + + + + i=52 + + true + + i=15825 + + + + + i=51 + + true + + i=15827 + + + + + i=51 + + true + + i=15835 + + + + + Variable_2 + + i=15818 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 15818 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15819 + + + 0 + ReadTransfer + + + i=47 + + + i=2307 + + 15819 + + + + i=52 + + true + + i=15827 + + + + + i=51 + + true + + i=15829 + + + + + i=51 + + true + + i=15837 + + + + + Variable_2 + + i=15820 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 15820 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15821 + + + 0 + ApplyWrite + + + i=47 + + + i=2307 + + 15821 + + + + i=52 + + true + + i=15831 + + + + + i=51 + + true + + i=15833 + + + + + i=51 + + true + + i=15839 + + + + + Variable_2 + + i=15822 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 15822 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15823 + + + 0 + Error + + + i=47 + + + i=2307 + + 15823 + + + + i=52 + + true + + i=15835 + + + + + i=52 + + true + + i=15837 + + + + + i=52 + + true + + i=15839 + + + + + i=51 + + true + + i=15841 + + + + + Variable_2 + + i=15824 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 15824 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15825 + + + 0 + IdleToReadPrepare + + + i=47 + + + i=2310 + + 15825 + + + + i=51 + + + i=15815 + + + + + i=52 + + + i=15817 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15826 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15826 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15827 + + + 0 + ReadPrepareToReadTransfer + + + i=47 + + + i=2310 + + 15827 + + + + i=51 + + + i=15817 + + + + + i=52 + + + i=15819 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15828 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15828 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15829 + + + 0 + ReadTransferToIdle + + + i=47 + + + i=2310 + + 15829 + + + + i=51 + + + i=15819 + + + + + i=52 + + + i=15815 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15830 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15830 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15831 + + + 0 + IdleToApplyWrite + + + i=47 + + + i=2310 + + 15831 + + + + i=51 + + + i=15815 + + + + + i=52 + + + i=15821 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15832 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15832 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15833 + + + 0 + ApplyWriteToIdle + + + i=47 + + + i=2310 + + 15833 + + + + i=51 + + + i=15821 + + + + + i=52 + + + i=15815 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15834 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15834 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15835 + + + 0 + ReadPrepareToError + + + i=47 + + + i=2310 + + 15835 + + + + i=51 + + + i=15817 + + + + + i=52 + + + i=15823 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15836 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15836 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15837 + + + 0 + ReadTransferToError + + + i=47 + + + i=2310 + + 15837 + + + + i=51 + + + i=15819 + + + + + i=52 + + + i=15823 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15838 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15838 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15839 + + + 0 + ApplyWriteToError + + + i=47 + + + i=2310 + + 15839 + + + + i=51 + + + i=15821 + + + + + i=52 + + + i=15823 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15840 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15840 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=15841 + + + 0 + ErrorToIdle + + + i=47 + + + i=2310 + + 15841 + + + + i=51 + + + i=15823 + + + + + i=52 + + + i=15815 + + + + + i=54 + + + i=2311 + + + + + Variable_2 + + i=15842 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 15842 + + i=7 + + -1 + 1 + 1 + + + + Method_4 + + i=15843 + + + 0 + Reset + + + i=47 + + + i=15843 + + + i=78 + + 15843 + true + true + + + + ObjectType_8 + + i=15607 + + + 0 + RoleSetType + + + i=58 + + + Object_1 + + i=15608 + + + 0 + <RoleName> + + + i=47 + + + i=15620 + + + i=11508 + + 15608 + + Variable_2 + + i=16162 + + + 0 + Identities + + + i=46 + + + i=68 + + + i=78 + + 16162 + + i=15634 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15997 + + + 0 + AddRole + + + i=47 + + + i=15997 + + + i=78 + + 15997 + true + true + + Variable_2 + + i=15998 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15998 + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15999 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15999 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16000 + + + 0 + RemoveRole + + + i=47 + + + i=16000 + + + i=78 + + 16000 + true + true + + Variable_2 + + i=16001 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16001 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=15620 + + + 0 + RoleType + + + i=58 + + + Variable_2 + + i=16173 + + + 0 + Identities + + + i=46 + + + i=68 + + + i=78 + + 16173 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16174 + + + 0 + Applications + + + i=46 + + + i=68 + + + i=80 + + 16174 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15410 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + + i=80 + + 15410 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16175 + + + 0 + Endpoints + + + i=46 + + + i=68 + + + i=80 + + 16175 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15411 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + + i=80 + + 15411 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15624 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + + i=80 + + 15624 + true + true + + Variable_2 + + i=15625 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15625 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15626 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + + i=80 + + 15626 + true + true + + Variable_2 + + i=15627 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15627 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16176 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + + i=80 + + 16176 + true + true + + Variable_2 + + i=16177 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16177 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16178 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + + i=80 + + 16178 + true + true + + Variable_2 + + i=16179 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16179 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16180 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + + i=80 + + 16180 + true + true + + Variable_2 + + i=16181 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16181 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16182 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + + i=80 + + 16182 + true + true + + Variable_2 + + i=16183 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16183 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + DataType_64 + + i=15632 + + + 0 + IdentityCriteriaType + + + i=29 + + + + i=14799 + + + + + + 1 + + UserName + + UserName + + + 2 + + Thumbprint + + Thumbprint + + + 3 + + Role + + Role + + + 4 + + GroupId + + GroupId + + + 5 + + Anonymous + + Anonymous + + + 6 + + AuthenticatedUser + + AuthenticatedUser + + + + + + + Variable_2 + + i=15633 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 15633 + + + + + + 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=7594 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15634 + + + 0 + IdentityMappingRuleType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + CriteriaType + + i=15632 + + -1 + + 0 + false + + + Criteria + + i=12 + + -1 + + 0 + false + + + + + + + + ObjectType_8 + + i=17641 + + + 0 + RoleMappingRuleChangedAuditEventType + + + i=2127 + + true + + + Object_1 + + i=15644 + + + 0 + Anonymous + + + i=47 + + + i=15620 + + 15644 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16192 + + + 0 + Identities + + + i=46 + + + i=68 + + 16192 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16193 + + + 0 + Applications + + + i=46 + + + i=68 + + 16193 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15412 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15412 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16194 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16194 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15413 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15413 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15648 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15648 + true + true + + Variable_2 + + i=15649 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15649 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15650 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15650 + true + true + + Variable_2 + + i=15651 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15651 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16195 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16195 + true + true + + Variable_2 + + i=16196 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16196 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16197 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16197 + true + true + + Variable_2 + + i=16198 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16198 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16199 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16199 + true + true + + Variable_2 + + i=16200 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16200 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16201 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16201 + true + true + + Variable_2 + + i=16202 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16202 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15656 + + + 0 + AuthenticatedUser + + + i=47 + + + i=15620 + + 15656 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16203 + + + 0 + Identities + + + i=46 + + + i=68 + + 16203 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16204 + + + 0 + Applications + + + i=46 + + + i=68 + + 16204 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15414 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15414 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16205 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16205 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15415 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15415 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15660 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15660 + true + true + + Variable_2 + + i=15661 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15661 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15662 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15662 + true + true + + Variable_2 + + i=15663 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15663 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16206 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16206 + true + true + + Variable_2 + + i=16207 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16207 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16208 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16208 + true + true + + Variable_2 + + i=16209 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16209 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16210 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16210 + true + true + + Variable_2 + + i=16211 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16211 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16212 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16212 + true + true + + Variable_2 + + i=16213 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16213 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15668 + + + 0 + Observer + + + i=47 + + + i=15620 + + 15668 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16214 + + + 0 + Identities + + + i=46 + + + i=68 + + 16214 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16215 + + + 0 + Applications + + + i=46 + + + i=68 + + 16215 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15416 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15416 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16216 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16216 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15417 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15417 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15672 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15672 + true + true + + Variable_2 + + i=15673 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15673 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15674 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15674 + true + true + + Variable_2 + + i=15675 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15675 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16217 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16217 + true + true + + Variable_2 + + i=16218 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16218 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16219 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16219 + true + true + + Variable_2 + + i=16220 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16220 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16221 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16221 + true + true + + Variable_2 + + i=16222 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16222 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16223 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16223 + true + true + + Variable_2 + + i=16224 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16224 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15680 + + + 0 + Operator + + + i=47 + + + i=15620 + + 15680 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16225 + + + 0 + Identities + + + i=46 + + + i=68 + + 16225 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16226 + + + 0 + Applications + + + i=46 + + + i=68 + + 16226 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15418 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15418 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16227 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16227 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15423 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15423 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15684 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15684 + true + true + + Variable_2 + + i=15685 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15685 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15686 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15686 + true + true + + Variable_2 + + i=15687 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15687 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16228 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16228 + true + true + + Variable_2 + + i=16229 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16229 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16230 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16230 + true + true + + Variable_2 + + i=16231 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16231 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16232 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16232 + true + true + + Variable_2 + + i=16233 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16233 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16234 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16234 + true + true + + Variable_2 + + i=16235 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16235 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=16036 + + + 0 + Engineer + + + i=47 + + + i=15620 + + 16036 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16236 + + + 0 + Identities + + + i=46 + + + i=68 + + 16236 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16237 + + + 0 + Applications + + + i=46 + + + i=68 + + 16237 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15424 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15424 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16238 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16238 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15425 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15425 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=16041 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 16041 + true + true + + Variable_2 + + i=16042 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16042 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16043 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 16043 + true + true + + Variable_2 + + i=16044 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16044 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16239 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16239 + true + true + + Variable_2 + + i=16240 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16240 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16241 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16241 + true + true + + Variable_2 + + i=16242 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16242 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16243 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16243 + true + true + + Variable_2 + + i=16244 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16244 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16245 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16245 + true + true + + Variable_2 + + i=16246 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16246 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15692 + + + 0 + Supervisor + + + i=47 + + + i=15620 + + 15692 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16247 + + + 0 + Identities + + + i=46 + + + i=68 + + 16247 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16248 + + + 0 + Applications + + + i=46 + + + i=68 + + 16248 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15426 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15426 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16249 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16249 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15427 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15427 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15696 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15696 + true + true + + Variable_2 + + i=15697 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15697 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15698 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15698 + true + true + + Variable_2 + + i=15699 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15699 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16250 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16250 + true + true + + Variable_2 + + i=16251 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16251 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16252 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16252 + true + true + + Variable_2 + + i=16253 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16253 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16254 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16254 + true + true + + Variable_2 + + i=16255 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16255 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16256 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16256 + true + true + + Variable_2 + + i=16257 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16257 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15716 + + + 0 + ConfigureAdmin + + + i=47 + + + i=15620 + + 15716 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16269 + + + 0 + Identities + + + i=46 + + + i=68 + + 16269 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16270 + + + 0 + Applications + + + i=46 + + + i=68 + + 16270 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15428 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15428 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16271 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16271 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15429 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15429 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15720 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15720 + true + true + + Variable_2 + + i=15721 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15721 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15722 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15722 + true + true + + Variable_2 + + i=15723 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15723 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16272 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16272 + true + true + + Variable_2 + + i=16273 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16273 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16274 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16274 + true + true + + Variable_2 + + i=16275 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16275 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16276 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16276 + true + true + + Variable_2 + + i=16277 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16277 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16278 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16278 + true + true + + Variable_2 + + i=16279 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16279 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15704 + + + 0 + SecurityAdmin + + + i=47 + + + i=15620 + + 15704 + + + + i=47 + + true + + i=15606 + + + + + Variable_2 + + i=16258 + + + 0 + Identities + + + i=46 + + + i=68 + + 16258 + + i=15634 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16259 + + + 0 + Applications + + + i=46 + + + i=68 + + 16259 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15430 + + + 0 + ApplicationsExclude + + + i=46 + + + i=68 + + 15430 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16260 + + + 0 + Endpoints + + + i=46 + + + i=68 + + 16260 + + i=15528 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15527 + + + 0 + EndpointsExclude + + + i=46 + + + i=68 + + 15527 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=15708 + + + 0 + AddIdentity + + + i=47 + + + i=15624 + + 15708 + true + true + + Variable_2 + + i=15709 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15709 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15710 + + + 0 + RemoveIdentity + + + i=47 + + + i=15626 + + 15710 + true + true + + Variable_2 + + i=15711 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15711 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16261 + + + 0 + AddApplication + + + i=47 + + + i=16176 + + 16261 + true + true + + Variable_2 + + i=16262 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16262 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16263 + + + 0 + RemoveApplication + + + i=47 + + + i=16178 + + 16263 + true + true + + Variable_2 + + i=16264 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16264 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16265 + + + 0 + AddEndpoint + + + i=47 + + + i=16180 + + 16265 + true + true + + Variable_2 + + i=16266 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16266 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16267 + + + 0 + RemoveEndpoint + + + i=47 + + + i=16182 + + 16267 + true + true + + Variable_2 + + i=16268 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 16268 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=17589 + + + 0 + DictionaryEntryType + + + i=58 + + true + + Object_1 + + i=17590 + + + 0 + <DictionaryEntryName> + + + i=47 + + + i=17589 + + + i=11508 + + 17590 + + + + ObjectType_8 + + i=17591 + + + 0 + DictionaryFolderType + + + i=61 + + + Object_1 + + i=17592 + + + 0 + <DictionaryFolderName> + + + i=47 + + + i=17591 + + + i=11508 + + 17592 + + + Object_1 + + i=17593 + + + 0 + <DictionaryEntryName> + + + i=47 + + + i=17589 + + + i=11508 + + 17593 + + + + Object_1 + + i=17594 + + + 0 + Dictionaries + + + i=47 + + + i=17591 + + 17594 + + + + i=47 + + true + + i=2253 + + + + + + ReferenceType_32 + + i=17597 + + + 0 + HasDictionaryEntry + + + i=32 + + + + DictionaryEntryOf + + + + ObjectType_8 + + i=17598 + + + 0 + IrdiDictionaryEntryType + + + i=17589 + + + + ObjectType_8 + + i=17600 + + + 0 + UriDictionaryEntryType + + + i=17589 + + + + ObjectType_8 + + i=17602 + + + 0 + BaseInterfaceType + + + i=58 + + true + + + Object_1 + + i=17708 + + + 0 + InterfaceTypes + + + i=47 + + + i=61 + + 17708 + + + + i=35 + + + i=17602 + + + + + i=35 + + true + + i=86 + + + + + + ReferenceType_32 + + i=17603 + + + 0 + HasInterface + + + i=32 + + + + InterfaceOf + + + + ReferenceType_32 + + i=17604 + + + 0 + HasAddIn + + + i=47 + + + + AddInOf + + + + DataType_64 + + i=23498 + + + 0 + CurrencyUnitType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + NumericCode + + i=4 + + -1 + + 0 + false + + + Exponent + + i=2 + + -1 + + 0 + false + + + AlphabeticCode + + i=12 + + -1 + + 0 + false + + + Currency + + i=21 + + -1 + + 0 + false + + + + + + + + Variable_2 + + i=23501 + + + 0 + CurrencyUnit + + + i=46 + + + i=68 + + 23501 + + i=23498 + + 1 + 1 + + + ObjectType_8 + + i=23513 + + + 0 + IOrderedObjectType + + + i=17602 + + true + + Variable_2 + + i=23517 + + + 0 + NumberInList + + + i=46 + + + i=68 + + + i=78 + + 23517 + + i=26 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=23518 + + + 0 + OrderedListType + + + i=58 + + + + + i=41 + + + i=2133 + + + + + Object_1 + + i=23519 + + + 0 + <OrderedObject> + + + i=49 + + + i=58 + + + i=11508 + + 23519 + + + + i=17603 + + + i=23513 + + + + + Variable_2 + + i=23521 + + + 0 + NumberInList + + + i=46 + + + i=68 + + + i=78 + + 23521 + + i=26 + + -1 + 1 + 1 + + + + Variable_2 + + i=23525 + + + 0 + NodeVersion + + + i=46 + + + i=68 + + + i=80 + + 23525 + + i=12 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2365 + + + 0 + DataItemType + + + i=63 + + + i=24 + + + Variable_2 + + i=2366 + + + 0 + Definition + + + i=46 + + + i=68 + + + i=80 + + 2366 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2367 + + + 0 + ValuePrecision + + + i=46 + + + i=68 + + + i=80 + + 2367 + + i=11 + + -1 + 1 + 1 + + + + VariableType_16 + + i=15318 + + + 0 + BaseAnalogType + + + i=2365 + + + i=26 + + + Variable_2 + + i=17567 + + + 0 + InstrumentRange + + + i=46 + + + i=68 + + + i=80 + + 17567 + + i=884 + + -1 + 1 + 1 + + + Variable_2 + + i=17568 + + + 0 + EURange + + + i=46 + + + i=68 + + + i=80 + + 17568 + + i=884 + + -1 + 1 + 1 + + + Variable_2 + + i=17569 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + + i=80 + + 17569 + + i=887 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2368 + + + 0 + AnalogItemType + + + i=15318 + + + i=26 + + + Variable_2 + + i=2369 + + + 0 + EURange + + + i=46 + + + i=68 + + + i=78 + + 2369 + + i=884 + + -1 + 1 + 1 + + + + VariableType_16 + + i=17497 + + + 0 + AnalogUnitType + + + i=15318 + + + i=26 + + + Variable_2 + + i=17502 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + + i=78 + + 17502 + + i=887 + + -1 + 1 + 1 + + + + VariableType_16 + + i=17570 + + + 0 + AnalogUnitRangeType + + + i=2368 + + + i=26 + + + Variable_2 + + i=17575 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + + i=78 + + 17575 + + i=887 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2372 + + + 0 + DiscreteItemType + + + i=2365 + + true + + i=24 + + + + VariableType_16 + + i=2373 + + + 0 + TwoStateDiscreteType + + + i=2372 + + + i=1 + + + Variable_2 + + i=2374 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=78 + + 2374 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=2375 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=78 + + 2375 + + i=21 + + -1 + 1 + 1 + + + + VariableType_16 + + i=2376 + + + 0 + MultiStateDiscreteType + + + i=2372 + + + i=28 + + + Variable_2 + + i=2377 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 2377 + + i=21 + + 1 + 0 + 1 + 1 + + + + VariableType_16 + + i=11238 + + + 0 + MultiStateValueDiscreteType + + + i=2372 + + + i=26 + + + Variable_2 + + i=11241 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 11241 + + i=7594 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=11461 + + + 0 + ValueAsText + + + i=46 + + + i=68 + + + i=78 + + 11461 + + i=21 + + -1 + 1 + 1 + + + + VariableType_16 + + i=12021 + + + 0 + ArrayItemType + + + i=2365 + + true + + i=24 + + 0 + + Variable_2 + + i=12024 + + + 0 + InstrumentRange + + + i=46 + + + i=68 + + + i=80 + + 12024 + + i=884 + + -1 + 1 + 1 + + + Variable_2 + + i=12025 + + + 0 + EURange + + + i=46 + + + i=68 + + + i=78 + + 12025 + + i=884 + + -1 + 1 + 1 + + + Variable_2 + + i=12026 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + + i=78 + + 12026 + + i=887 + + -1 + 1 + 1 + + + <uax:NodeClass>Variable_2</uax:NodeClass> + <uax:NodeId> + <uax:Identifier>i=12027</uax:Identifier> + </uax:NodeId> + <uax:BrowseName> + <uax:NamespaceIndex>0</uax:NamespaceIndex> + <uax:Name>Title</uax:Name> + </uax:BrowseName> + <uax:ReferenceTypeId> + <uax:Identifier>i=46</uax:Identifier> + </uax:ReferenceTypeId> + <uax:TypeDefinitionId> + <uax:Identifier>i=68</uax:Identifier> + </uax:TypeDefinitionId> + <uax:ModellingRuleId> + <uax:Identifier>i=78</uax:Identifier> + </uax:ModellingRuleId> + <uax:NumericId>12027</uax:NumericId> + <uax:DataType> + <uax:Identifier>i=21</uax:Identifier> + </uax:DataType> + <uax:ValueRank>-1</uax:ValueRank> + <uax:AccessLevel>1</uax:AccessLevel> + <uax:UserAccessLevel>1</uax:UserAccessLevel> + + + Variable_2 + + i=12028 + + + 0 + AxisScaleType + + + i=46 + + + i=68 + + + i=78 + + 12028 + + i=12077 + + -1 + 1 + 1 + + + + VariableType_16 + + i=12029 + + + 0 + YArrayItemType + + + i=12021 + + + i=24 + + 1 + 0 + + Variable_2 + + i=12037 + + + 0 + XAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12037 + + i=12079 + + -1 + 1 + 1 + + + + VariableType_16 + + i=12038 + + + 0 + XYArrayItemType + + + i=12021 + + + i=12080 + + 1 + 0 + + Variable_2 + + i=12046 + + + 0 + XAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12046 + + i=12079 + + -1 + 1 + 1 + + + + VariableType_16 + + i=12047 + + + 0 + ImageItemType + + + i=12021 + + + i=24 + + 2 + 0,0 + + Variable_2 + + i=12055 + + + 0 + XAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12055 + + i=12079 + + -1 + 1 + 1 + + + Variable_2 + + i=12056 + + + 0 + YAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12056 + + i=12079 + + -1 + 1 + 1 + + + + VariableType_16 + + i=12057 + + + 0 + CubeItemType + + + i=12021 + + + i=24 + + 3 + 0,0,0 + + Variable_2 + + i=12065 + + + 0 + XAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12065 + + i=12079 + + -1 + 1 + 1 + + + Variable_2 + + i=12066 + + + 0 + YAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12066 + + i=12079 + + -1 + 1 + 1 + + + Variable_2 + + i=12067 + + + 0 + ZAxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12067 + + i=12079 + + -1 + 1 + 1 + + + + VariableType_16 + + i=12068 + + + 0 + NDimensionArrayItemType + + + i=12021 + + + i=24 + + 0 + + Variable_2 + + i=12076 + + + 0 + AxisDefinition + + + i=46 + + + i=68 + + + i=78 + + 12076 + + i=12079 + + 1 + 0 + 1 + 1 + + + + VariableType_16 + + i=8995 + + + 0 + TwoStateVariableType + + + i=2755 + + + i=21 + + -1 + + Variable_2 + + i=8996 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 8996 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9000 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9000 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9001 + + + 0 + EffectiveTransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9001 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=11110 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 11110 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=11111 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 11111 + + i=21 + + -1 + 1 + 1 + + + + VariableType_16 + + i=9002 + + + 0 + ConditionVariableType + + + i=63 + + + i=24 + + + Variable_2 + + i=9003 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 9003 + + i=294 + + -1 + 1 + 1 + + + + ReferenceType_32 + + i=9004 + + + 0 + HasTrueSubState + + + i=32 + + + + IsTrueSubStateOf + + + + ReferenceType_32 + + i=9005 + + + 0 + HasFalseSubState + + + i=32 + + + + IsFalseSubStateOf + + + + ReferenceType_32 + + i=16361 + + + 0 + HasAlarmSuppressionGroup + + + i=47 + + + + IsAlarmSuppressionGroupOf + + + + ReferenceType_32 + + i=16362 + + + 0 + AlarmGroupMember + + + i=35 + + + + MemberOfAlarmGroup + + + + ObjectType_8 + + i=2782 + + + 0 + ConditionType + + + i=2041 + + true + + Variable_2 + + i=11112 + + + 0 + ConditionClassId + + + i=46 + + + i=68 + + + i=78 + + 11112 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=11113 + + + 0 + ConditionClassName + + + i=46 + + + i=68 + + + i=78 + + 11113 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=16363 + + + 0 + ConditionSubClassId + + + i=46 + + + i=68 + + + i=80 + + 16363 + + i=17 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16364 + + + 0 + ConditionSubClassName + + + i=46 + + + i=68 + + + i=80 + + 16364 + + i=21 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=9009 + + + 0 + ConditionName + + + i=46 + + + i=68 + + + i=78 + + 9009 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=9010 + + + 0 + BranchId + + + i=46 + + + i=68 + + + i=78 + + 9010 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3874 + + + 0 + Retain + + + i=46 + + + i=68 + + + i=78 + + 3874 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9011 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 9011 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=9012 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9012 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9015 + + + 0 + EffectiveDisplayName + + + i=46 + + + i=68 + + + i=80 + + 9015 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9016 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9016 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9017 + + + 0 + EffectiveTransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9017 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9018 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 9018 + + + + en + Enabled + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9019 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 9019 + + + + en + Disabled + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=9020 + + + 0 + Quality + + + i=47 + + + i=9002 + + + i=78 + + 9020 + + i=19 + + -1 + 1 + 1 + + Variable_2 + + i=9021 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 9021 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=9022 + + + 0 + LastSeverity + + + i=47 + + + i=9002 + + + i=78 + + 9022 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=9023 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 9023 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=9024 + + + 0 + Comment + + + i=47 + + + i=9002 + + + i=78 + + 9024 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=9025 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 9025 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=9026 + + + 0 + ClientUserId + + + i=46 + + + i=68 + + + i=78 + + 9026 + + i=12 + + -1 + 1 + 1 + + + Method_4 + + i=9028 + + + 0 + Disable + + + i=47 + + + i=9028 + + + i=78 + + 9028 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=9027 + + + 0 + Enable + + + i=47 + + + i=9027 + + + i=78 + + 9027 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=9029 + + + 0 + AddComment + + + i=47 + + + i=9029 + + + i=78 + + 9029 + true + true + + + + i=3065 + + + i=2829 + + + + + Variable_2 + + i=9030 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 9030 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=3875 + + + 0 + ConditionRefresh + + + i=47 + + + i=3875 + + 3875 + true + true + + + + i=3065 + + + i=2787 + + + + + i=3065 + + + i=2788 + + + + + Variable_2 + + i=3876 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 3876 + + + + + + i=297 + + + + SubscriptionId + + i=288 + + -1 + + + + The identifier for the suscription to refresh. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12912 + + + 0 + ConditionRefresh2 + + + i=47 + + + i=12912 + + 12912 + true + true + + + + i=3065 + + + i=2787 + + + + + i=3065 + + + i=2788 + + + + + Variable_2 + + i=12913 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12913 + + + + + + i=297 + + + + SubscriptionId + + i=288 + + -1 + + + + The identifier for the suscription to refresh. + + + + + + + i=297 + + + + MonitoredItemId + + i=288 + + -1 + + + + The identifier for the monitored item to refresh. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=2830 + + + 0 + DialogConditionType + + + i=2782 + + + Variable_2 + + i=9035 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 9035 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + + i=9055 + + + + + Variable_2 + + i=9036 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9036 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=9055 + + + 0 + DialogState + + + i=47 + + + i=8995 + + + i=78 + + 9055 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9035 + + + + + Variable_2 + + i=9056 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9056 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9060 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9060 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9062 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 9062 + + + + en + Active + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9063 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 9063 + + + + en + Inactive + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=2831 + + + 0 + Prompt + + + i=46 + + + i=68 + + + i=78 + + 2831 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9064 + + + 0 + ResponseOptionSet + + + i=46 + + + i=68 + + + i=78 + + 9064 + + i=21 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=9065 + + + 0 + DefaultResponse + + + i=46 + + + i=68 + + + i=78 + + 9065 + + i=6 + + -1 + 1 + 1 + + + Variable_2 + + i=9066 + + + 0 + OkResponse + + + i=46 + + + i=68 + + + i=78 + + 9066 + + i=6 + + -1 + 1 + 1 + + + Variable_2 + + i=9067 + + + 0 + CancelResponse + + + i=46 + + + i=68 + + + i=78 + + 9067 + + i=6 + + -1 + 1 + 1 + + + Variable_2 + + i=9068 + + + 0 + LastResponse + + + i=46 + + + i=68 + + + i=78 + + 9068 + + i=6 + + -1 + 1 + 1 + + + Method_4 + + i=9069 + + + 0 + Respond + + + i=47 + + + i=9069 + + + i=78 + + 9069 + true + true + + + + i=3065 + + + i=8927 + + + + + Variable_2 + + i=9070 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 9070 + + + + + + i=297 + + + + SelectedResponse + + i=6 + + -1 + + + + The response to the dialog condition. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=2881 + + + 0 + AcknowledgeableConditionType + + + i=2782 + + + Variable_2 + + i=9073 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 9073 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + + i=9093 + + + + + i=9004 + + + i=9102 + + + + + Variable_2 + + i=9074 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9074 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=9093 + + + 0 + AckedState + + + i=47 + + + i=8995 + + + i=78 + + 9093 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9073 + + + + + Variable_2 + + i=9094 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9094 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9098 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9098 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9100 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 9100 + + + + en + Acknowledged + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9101 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 9101 + + + + en + Unacknowledged + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=9102 + + + 0 + ConfirmedState + + + i=47 + + + i=8995 + + + i=80 + + 9102 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9073 + + + + + Variable_2 + + i=9103 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9103 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9107 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9107 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9109 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 9109 + + + + en + Confirmed + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9110 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 9110 + + + + en + Unconfirmed + + + + + i=21 + + -1 + 1 + 1 + + + + Method_4 + + i=9111 + + + 0 + Acknowledge + + + i=47 + + + i=9111 + + + i=78 + + 9111 + true + true + + + + i=3065 + + + i=8944 + + + + + Variable_2 + + i=9112 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 9112 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=9113 + + + 0 + Confirm + + + i=47 + + + i=9113 + + + i=80 + + 9113 + true + true + + + + i=3065 + + + i=8961 + + + + + Variable_2 + + i=9114 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 9114 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=2915 + + + 0 + AlarmConditionType + + + i=2881 + + + Variable_2 + + i=9118 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 9118 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + + i=9160 + + + + + i=9004 + + + i=9169 + + + + + i=9004 + + + i=9178 + + + + + Variable_2 + + i=9119 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9119 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=9160 + + + 0 + ActiveState + + + i=47 + + + i=8995 + + + i=78 + + 9160 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9118 + + + + + Variable_2 + + i=9161 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9161 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9164 + + + 0 + EffectiveDisplayName + + + i=46 + + + i=68 + + + i=80 + + 9164 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9165 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9165 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9166 + + + 0 + EffectiveTransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9166 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9167 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 9167 + + + + en + Active + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9168 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 9168 + + + + en + Inactive + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=11120 + + + 0 + InputNode + + + i=46 + + + i=68 + + + i=78 + + 11120 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=9169 + + + 0 + SuppressedState + + + i=47 + + + i=8995 + + + i=80 + + 9169 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9118 + + + + + Variable_2 + + i=9170 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9170 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9174 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9174 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=9176 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 9176 + + + + en + Suppressed + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=9177 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 9177 + + + + en + Unsuppressed + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=16371 + + + 0 + OutOfServiceState + + + i=47 + + + i=8995 + + + i=80 + + 16371 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=16372 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 16372 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16376 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 16376 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=16378 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 16378 + + + + en + Out of Service + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=16379 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 16379 + + + + en + In Service + + + + + i=21 + + -1 + 1 + 1 + + + + Object_1 + + i=9178 + + + 0 + ShelvingState + + + i=47 + + + i=2929 + + + i=80 + + 9178 + + + + i=9004 + + true + + i=9118 + + + + + Variable_2 + + i=9179 + + + 0 + CurrentState + + + i=47 + + + i=2760 + + + i=78 + + 9179 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=9180 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9180 + + i=17 + + -1 + 1 + 1 + + + + Variable_2 + + i=9184 + + + 0 + LastTransition + + + i=47 + + + i=2767 + + + i=80 + + 9184 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=9185 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9185 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=9188 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9188 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=9189 + + + 0 + UnshelveTime + + + i=46 + + + i=68 + + + i=78 + + 9189 + + i=290 + + -1 + 1 + 1 + + + Method_4 + + i=9213 + + + 0 + TimedShelve + + + i=47 + + + i=2949 + + + i=78 + + 9213 + true + true + + + + i=3065 + + + i=11093 + + + + + Variable_2 + + i=9214 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 9214 + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=9211 + + + 0 + Unshelve + + + i=47 + + + i=2947 + + + i=78 + + 9211 + true + true + + + + i=3065 + + + i=11093 + + + + + + Method_4 + + i=9212 + + + 0 + OneShotShelve + + + i=47 + + + i=2948 + + + i=78 + + 9212 + true + true + + + + i=3065 + + + i=11093 + + + + + + + Variable_2 + + i=9215 + + + 0 + SuppressedOrShelved + + + i=46 + + + i=68 + + + i=78 + + 9215 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=9216 + + + 0 + MaxTimeShelved + + + i=46 + + + i=68 + + + i=80 + + 9216 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=16389 + + + 0 + AudibleEnabled + + + i=46 + + + i=68 + + + i=80 + + 16389 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16390 + + + 0 + AudibleSound + + + i=46 + + + i=17986 + + + i=80 + + 16390 + + i=16307 + + -1 + 1 + 1 + + + Variable_2 + + i=16380 + + + 0 + SilenceState + + + i=47 + + + i=8995 + + + i=80 + + 16380 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=16381 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 16381 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16385 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 16385 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=16387 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 16387 + + + + en + Silenced + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=16388 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 16388 + + + + en + Not Silenced + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=16395 + + + 0 + OnDelay + + + i=46 + + + i=68 + + + i=80 + + 16395 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=16396 + + + 0 + OffDelay + + + i=46 + + + i=68 + + + i=80 + + 16396 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=16397 + + + 0 + FirstInGroupFlag + + + i=47 + + + i=63 + + + i=80 + + 16397 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=16398 + + + 0 + FirstInGroup + + + i=47 + + + i=16405 + + + i=80 + + 16398 + + + Variable_2 + + i=18190 + + + 0 + LatchedState + + + i=47 + + + i=8995 + + + i=80 + + 18190 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=18191 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 18191 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18195 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 18195 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=18197 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 18197 + + + + en + Latched + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=18198 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 18198 + + + + en + Unlatched + + + + + i=21 + + -1 + 1 + 1 + + + + Object_1 + + i=16399 + + + 0 + <AlarmGroup> + + + i=16361 + + + i=16405 + + + i=11508 + + 16399 + + + Variable_2 + + i=16400 + + + 0 + ReAlarmTime + + + i=46 + + + i=68 + + + i=80 + + 16400 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=16401 + + + 0 + ReAlarmRepeatCount + + + i=47 + + + i=63 + + + i=80 + + 16401 + + i=4 + + -1 + 1 + 1 + + + Method_4 + + i=16402 + + + 0 + Silence + + + i=47 + + + i=16402 + + + i=80 + + 16402 + true + true + + + + i=3065 + + + i=17242 + + + + + + Method_4 + + i=16403 + + + 0 + Suppress + + + i=47 + + + i=16403 + + + i=80 + + 16403 + true + true + + + + i=3065 + + + i=17225 + + + + + + Method_4 + + i=17868 + + + 0 + Unsuppress + + + i=47 + + + i=17868 + + + i=80 + + 17868 + true + true + + + + i=3065 + + + i=17225 + + + + + + Method_4 + + i=17869 + + + 0 + RemoveFromService + + + i=47 + + + i=17869 + + + i=80 + + 17869 + true + true + + + + i=3065 + + + i=17259 + + + + + + Method_4 + + i=17870 + + + 0 + PlaceInService + + + i=47 + + + i=17870 + + + i=80 + + 17870 + true + true + + + + i=3065 + + + i=17259 + + + + + + Method_4 + + i=18199 + + + 0 + Reset + + + i=47 + + + i=18199 + + + i=80 + + 18199 + true + true + + + + i=3065 + + + i=15013 + + + + + + + ObjectType_8 + + i=16405 + + + 0 + AlarmGroupType + + + i=61 + + + Object_1 + + i=16406 + + + 0 + <AlarmConditionInstance> + + + i=16362 + + + i=2915 + + + i=11508 + + 16406 + + Variable_2 + + i=16407 + + + 0 + EventId + + + i=46 + + + i=68 + + + i=78 + + 16407 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=16408 + + + 0 + EventType + + + i=46 + + + i=68 + + + i=78 + + 16408 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16409 + + + 0 + SourceNode + + + i=46 + + + i=68 + + + i=78 + + 16409 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16410 + + + 0 + SourceName + + + i=46 + + + i=68 + + + i=78 + + 16410 + + i=12 + + -1 + 1 + 1 + + + + Variable_2 + + i=16412 + + + 0 + ReceiveTime + + + i=46 + + + i=68 + + + i=78 + + 16412 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=16414 + + + 0 + Message + + + i=46 + + + i=68 + + + i=78 + + 16414 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=16415 + + + 0 + Severity + + + i=46 + + + i=68 + + + i=78 + + 16415 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=16416 + + + 0 + ConditionClassId + + + i=46 + + + i=68 + + + i=78 + + 16416 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16417 + + + 0 + ConditionClassName + + + i=46 + + + i=68 + + + i=78 + + 16417 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=16420 + + + 0 + ConditionName + + + i=46 + + + i=68 + + + i=78 + + 16420 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16421 + + + 0 + BranchId + + + i=46 + + + i=68 + + + i=78 + + 16421 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16422 + + + 0 + Retain + + + i=46 + + + i=68 + + + i=78 + + 16422 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=16423 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 16423 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=16424 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 16424 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=16432 + + + 0 + Quality + + + i=47 + + + i=9002 + + + i=78 + + 16432 + + i=19 + + -1 + 1 + 1 + + Variable_2 + + i=16433 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 16433 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=16434 + + + 0 + LastSeverity + + + i=47 + + + i=9002 + + + i=78 + + 16434 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=16435 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 16435 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=16436 + + + 0 + Comment + + + i=47 + + + i=9002 + + + i=78 + + 16436 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=16437 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 16437 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=16438 + + + 0 + ClientUserId + + + i=46 + + + i=68 + + + i=78 + + 16438 + + i=12 + + -1 + 1 + 1 + + + Method_4 + + i=16439 + + + 0 + Disable + + + i=47 + + + i=9028 + + + i=78 + + 16439 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=16440 + + + 0 + Enable + + + i=47 + + + i=9027 + + + i=78 + + 16440 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=16441 + + + 0 + AddComment + + + i=47 + + + i=9029 + + + i=78 + + 16441 + true + true + + + + i=3065 + + + i=2829 + + + + + Variable_2 + + i=16442 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16442 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=16443 + + + 0 + AckedState + + + i=47 + + + i=8995 + + + i=78 + + 16443 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=16444 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 16444 + + i=1 + + -1 + 1 + 1 + + + + Method_4 + + i=16461 + + + 0 + Acknowledge + + + i=47 + + + i=9111 + + + i=78 + + 16461 + true + true + + + + i=3065 + + + i=8944 + + + + + Variable_2 + + i=16462 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16462 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=16465 + + + 0 + ActiveState + + + i=47 + + + i=8995 + + + i=78 + + 16465 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=16466 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 16466 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=16474 + + + 0 + InputNode + + + i=46 + + + i=68 + + + i=78 + + 16474 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16519 + + + 0 + SuppressedOrShelved + + + i=46 + + + i=68 + + + i=78 + + 16519 + + i=1 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=2929 + + + 0 + ShelvedStateMachineType + + + i=2771 + + + Variable_2 + + i=9115 + + + 0 + UnshelveTime + + + i=46 + + + i=68 + + + i=78 + + 9115 + + i=290 + + -1 + 1 + 1 + + + Object_1 + + i=2930 + + + 0 + Unshelved + + + i=47 + + + i=2307 + + 2930 + + + + i=51 + + true + + i=2935 + + + + + i=51 + + true + + i=2936 + + + + + i=52 + + true + + i=2940 + + + + + i=52 + + true + + i=2943 + + + + + Variable_2 + + i=6098 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 6098 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2932 + + + 0 + TimedShelved + + + + Timed Shelved + + + i=47 + + + i=2307 + + 2932 + + + + i=52 + + true + + i=2935 + + + + + i=51 + + true + + i=2940 + + + + + i=51 + + true + + i=2942 + + + + + i=52 + + true + + i=2945 + + + + + Variable_2 + + i=6100 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 6100 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2933 + + + 0 + OneShotShelved + + + + One Shot Shelved + + + i=47 + + + i=2307 + + 2933 + + + + i=52 + + true + + i=2936 + + + + + i=52 + + true + + i=2942 + + + + + i=51 + + true + + i=2943 + + + + + i=51 + + true + + i=2945 + + + + + Variable_2 + + i=6101 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 6101 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2935 + + + 0 + UnshelvedToTimedShelved + + + i=47 + + + i=2310 + + 2935 + + + + i=51 + + + i=2930 + + + + + i=52 + + + i=2932 + + + + + i=54 + + + i=2915 + + + + + i=53 + + + i=2949 + + + + + Variable_2 + + i=11322 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11322 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2936 + + + 0 + UnshelvedToOneShotShelved + + + i=47 + + + i=2310 + + 2936 + + + + i=51 + + + i=2930 + + + + + i=52 + + + i=2933 + + + + + i=54 + + + i=2915 + + + + + i=53 + + + i=2948 + + + + + Variable_2 + + i=11323 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11323 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2940 + + + 0 + TimedShelvedToUnshelved + + + i=47 + + + i=2310 + + 2940 + + + + i=51 + + + i=2932 + + + + + i=52 + + + i=2930 + + + + + i=54 + + + i=2915 + + + + + i=53 + + + i=2947 + + + + + Variable_2 + + i=11324 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11324 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2942 + + + 0 + TimedShelvedToOneShotShelved + + + i=47 + + + i=2310 + + 2942 + + + + i=51 + + + i=2932 + + + + + i=52 + + + i=2933 + + + + + i=54 + + + i=2915 + + + + + i=53 + + + i=2948 + + + + + Variable_2 + + i=11325 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11325 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2943 + + + 0 + OneShotShelvedToUnshelved + + + i=47 + + + i=2310 + + 2943 + + + + i=51 + + + i=2933 + + + + + i=52 + + + i=2930 + + + + + i=54 + + + i=2915 + + + + + i=53 + + + i=2947 + + + + + Variable_2 + + i=11326 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11326 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2945 + + + 0 + OneShotShelvedToTimedShelved + + + i=47 + + + i=2310 + + 2945 + + + + i=51 + + + i=2933 + + + + + i=52 + + + i=2932 + + + + + i=54 + + + i=2915 + + + + + i=53 + + + i=2949 + + + + + Variable_2 + + i=11327 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11327 + + i=7 + + -1 + 1 + 1 + + + + Method_4 + + i=2949 + + + 0 + TimedShelve + + + i=47 + + + i=2949 + + + i=78 + + 2949 + true + true + + + + i=53 + + true + + i=2935 + + + + + i=53 + + true + + i=2945 + + + + + i=3065 + + + i=11093 + + + + + Variable_2 + + i=2991 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 2991 + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=2947 + + + 0 + Unshelve + + + i=47 + + + i=2947 + + + i=78 + + 2947 + true + true + + + + i=53 + + true + + i=2940 + + + + + i=53 + + true + + i=2943 + + + + + i=3065 + + + i=11093 + + + + + + Method_4 + + i=2948 + + + 0 + OneShotShelve + + + i=47 + + + i=2948 + + + i=78 + + 2948 + true + true + + + + i=53 + + true + + i=2936 + + + + + i=53 + + true + + i=2942 + + + + + i=3065 + + + i=11093 + + + + + + + ObjectType_8 + + i=2955 + + + 0 + LimitAlarmType + + + i=2915 + + + Variable_2 + + i=11124 + + + 0 + HighHighLimit + + + i=46 + + + i=68 + + + i=80 + + 11124 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=11125 + + + 0 + HighLimit + + + i=46 + + + i=68 + + + i=80 + + 11125 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=11126 + + + 0 + LowLimit + + + i=46 + + + i=68 + + + i=80 + + 11126 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=11127 + + + 0 + LowLowLimit + + + i=46 + + + i=68 + + + i=80 + + 11127 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=16572 + + + 0 + BaseHighHighLimit + + + i=46 + + + i=68 + + + i=80 + + 16572 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=16573 + + + 0 + BaseHighLimit + + + i=46 + + + i=68 + + + i=80 + + 16573 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=16574 + + + 0 + BaseLowLimit + + + i=46 + + + i=68 + + + i=80 + + 16574 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=16575 + + + 0 + BaseLowLowLimit + + + i=46 + + + i=68 + + + i=80 + + 16575 + + i=11 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=9318 + + + 0 + ExclusiveLimitStateMachineType + + + i=2771 + + + Object_1 + + i=9329 + + + 0 + HighHigh + + + i=47 + + + i=2307 + + 9329 + + + + i=51 + + true + + i=9339 + + + + + i=52 + + true + + i=9340 + + + + + Variable_2 + + i=9330 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 9330 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9331 + + + 0 + High + + + i=47 + + + i=2307 + + 9331 + + + + i=52 + + true + + i=9339 + + + + + i=51 + + true + + i=9340 + + + + + Variable_2 + + i=9332 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 9332 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9333 + + + 0 + Low + + + i=47 + + + i=2307 + + 9333 + + + + i=52 + + true + + i=9337 + + + + + i=51 + + true + + i=9338 + + + + + Variable_2 + + i=9334 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 9334 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9335 + + + 0 + LowLow + + + i=47 + + + i=2307 + + 9335 + + + + i=51 + + true + + i=9337 + + + + + i=52 + + true + + i=9338 + + + + + Variable_2 + + i=9336 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 9336 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9337 + + + 0 + LowLowToLow + + + i=47 + + + i=2310 + + 9337 + + + + i=51 + + + i=9335 + + + + + i=52 + + + i=9333 + + + + + Variable_2 + + i=11340 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11340 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9338 + + + 0 + LowToLowLow + + + i=47 + + + i=2310 + + 9338 + + + + i=51 + + + i=9333 + + + + + i=52 + + + i=9335 + + + + + Variable_2 + + i=11341 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11341 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9339 + + + 0 + HighHighToHigh + + + i=47 + + + i=2310 + + 9339 + + + + i=51 + + + i=9329 + + + + + i=52 + + + i=9331 + + + + + Variable_2 + + i=11342 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11342 + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=9340 + + + 0 + HighToHighHigh + + + i=47 + + + i=2310 + + 9340 + + + + i=51 + + + i=9331 + + + + + i=52 + + + i=9329 + + + + + Variable_2 + + i=11343 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11343 + + i=7 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=9341 + + + 0 + ExclusiveLimitAlarmType + + + i=2955 + + + Variable_2 + + i=9398 + + + 0 + ActiveState + + + i=47 + + + i=8995 + + + i=78 + + 9398 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + + i=9455 + + + + + Variable_2 + + i=9399 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9399 + + i=1 + + -1 + 1 + 1 + + + + Object_1 + + i=9455 + + + 0 + LimitState + + + i=47 + + + i=9318 + + + i=78 + + 9455 + + + + i=9004 + + true + + i=9398 + + + + + Variable_2 + + i=9456 + + + 0 + CurrentState + + + i=47 + + + i=2760 + + + i=78 + + 9456 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=9457 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9457 + + i=17 + + -1 + 1 + 1 + + + + Variable_2 + + i=9461 + + + 0 + LastTransition + + + i=47 + + + i=2767 + + + i=80 + + 9461 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=9462 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9462 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=9465 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 9465 + + i=294 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=9906 + + + 0 + NonExclusiveLimitAlarmType + + + i=2955 + + + Variable_2 + + i=9963 + + + 0 + ActiveState + + + i=47 + + + i=8995 + + + i=78 + + 9963 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + + i=10020 + + + + + i=9004 + + + i=10029 + + + + + i=9004 + + + i=10038 + + + + + i=9004 + + + i=10047 + + + + + Variable_2 + + i=9964 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 9964 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=10020 + + + 0 + HighHighState + + + i=47 + + + i=8995 + + + i=80 + + 10020 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9963 + + + + + Variable_2 + + i=10021 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 10021 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=10025 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 10025 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=10027 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 10027 + + + + en + HighHigh active + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=10028 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 10028 + + + + en + HighHigh inactive + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=10029 + + + 0 + HighState + + + i=47 + + + i=8995 + + + i=80 + + 10029 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9963 + + + + + Variable_2 + + i=10030 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 10030 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=10034 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 10034 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=10036 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 10036 + + + + en + High active + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=10037 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 10037 + + + + en + High inactive + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=10038 + + + 0 + LowState + + + i=47 + + + i=8995 + + + i=80 + + 10038 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9963 + + + + + Variable_2 + + i=10039 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 10039 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=10043 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 10043 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=10045 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 10045 + + + + en + Low active + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=10046 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 10046 + + + + en + Low inactive + + + + + i=21 + + -1 + 1 + 1 + + + + Variable_2 + + i=10047 + + + 0 + LowLowState + + + i=47 + + + i=8995 + + + i=80 + + 10047 + + i=21 + + -1 + 1 + 1 + + + + i=9004 + + true + + i=9963 + + + + + Variable_2 + + i=10048 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 10048 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=10052 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=80 + + 10052 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=10054 + + + 0 + TrueState + + + i=46 + + + i=68 + + + i=80 + + 10054 + + + + en + LowLow active + + + + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=10055 + + + 0 + FalseState + + + i=46 + + + i=68 + + + i=80 + + 10055 + + + + en + LowLow inactive + + + + + i=21 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=10060 + + + 0 + NonExclusiveLevelAlarmType + + + i=9906 + + + + ObjectType_8 + + i=9482 + + + 0 + ExclusiveLevelAlarmType + + + i=9341 + + + + ObjectType_8 + + i=10368 + + + 0 + NonExclusiveDeviationAlarmType + + + i=9906 + + + Variable_2 + + i=10522 + + + 0 + SetpointNode + + + i=46 + + + i=68 + + + i=78 + + 10522 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16776 + + + 0 + BaseSetpointNode + + + i=46 + + + i=68 + + + i=80 + + 16776 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=10214 + + + 0 + NonExclusiveRateOfChangeAlarmType + + + i=9906 + + + Variable_2 + + i=16858 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + + i=80 + + 16858 + + i=887 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=9764 + + + 0 + ExclusiveDeviationAlarmType + + + i=9341 + + + Variable_2 + + i=9905 + + + 0 + SetpointNode + + + i=46 + + + i=68 + + + i=78 + + 9905 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=16817 + + + 0 + BaseSetpointNode + + + i=46 + + + i=68 + + + i=80 + + 16817 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=9623 + + + 0 + ExclusiveRateOfChangeAlarmType + + + i=9341 + + + Variable_2 + + i=16899 + + + 0 + EngineeringUnits + + + i=46 + + + i=68 + + + i=80 + + 16899 + + i=887 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=10523 + + + 0 + DiscreteAlarmType + + + i=2915 + + + + ObjectType_8 + + i=10637 + + + 0 + OffNormalAlarmType + + + i=10523 + + + Variable_2 + + i=11158 + + + 0 + NormalState + + + i=46 + + + i=68 + + + i=78 + + 11158 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11753 + + + 0 + SystemOffNormalAlarmType + + + i=10637 + + true + + + ObjectType_8 + + i=10751 + + + 0 + TripAlarmType + + + i=10637 + + + + ObjectType_8 + + i=18347 + + + 0 + InstrumentDiagnosticAlarmType + + + i=10637 + + + + ObjectType_8 + + i=18496 + + + 0 + SystemDiagnosticAlarmType + + + i=10637 + + + + ObjectType_8 + + i=13225 + + + 0 + CertificateExpirationAlarmType + + + i=11753 + + + Variable_2 + + i=13325 + + + 0 + ExpirationDate + + + i=46 + + + i=68 + + + i=78 + + 13325 + + i=13 + + -1 + 1 + 1 + + + Variable_2 + + i=14900 + + + 0 + ExpirationLimit + + + i=46 + + + i=68 + + + i=80 + + 14900 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=13326 + + + 0 + CertificateType + + + i=46 + + + i=68 + + + i=78 + + 13326 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=13327 + + + 0 + Certificate + + + i=46 + + + i=68 + + + i=78 + + 13327 + + i=15 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=17080 + + + 0 + DiscrepancyAlarmType + + + i=2915 + + + Variable_2 + + i=17215 + + + 0 + TargetValueNode + + + i=46 + + + i=68 + + + i=78 + + 17215 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=17216 + + + 0 + ExpectedTime + + + i=46 + + + i=68 + + + i=78 + + 17216 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17217 + + + 0 + Tolerance + + + i=46 + + + i=68 + + + i=80 + + 17217 + + i=11 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11163 + + + 0 + BaseConditionClassType + + + i=58 + + true + + + ObjectType_8 + + i=11164 + + + 0 + ProcessConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=11165 + + + 0 + MaintenanceConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=11166 + + + 0 + SystemConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=17218 + + + 0 + SafetyConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=17219 + + + 0 + HighlyManagedAlarmConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=17220 + + + 0 + TrainingConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=18665 + + + 0 + StatisticalConditionClassType + + + i=11163 + + true + + + ObjectType_8 + + i=17221 + + + 0 + TestingConditionSubClassType + + + i=11163 + + true + + + ObjectType_8 + + i=2790 + + + 0 + AuditConditionEventType + + + i=2127 + + + + ObjectType_8 + + i=2803 + + + 0 + AuditConditionEnableEventType + + + i=2790 + + + + ObjectType_8 + + i=2829 + + + 0 + AuditConditionCommentEventType + + + i=2790 + + + Variable_2 + + i=17222 + + + 0 + ConditionEventId + + + i=46 + + + i=68 + + + i=78 + + 17222 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=11851 + + + 0 + Comment + + + i=46 + + + i=68 + + + i=78 + + 11851 + + i=21 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=8927 + + + 0 + AuditConditionRespondEventType + + + i=2790 + + + Variable_2 + + i=11852 + + + 0 + SelectedResponse + + + i=46 + + + i=68 + + + i=78 + + 11852 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=8944 + + + 0 + AuditConditionAcknowledgeEventType + + + i=2790 + + + Variable_2 + + i=17223 + + + 0 + ConditionEventId + + + i=46 + + + i=68 + + + i=78 + + 17223 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=11853 + + + 0 + Comment + + + i=46 + + + i=68 + + + i=78 + + 11853 + + i=21 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=8961 + + + 0 + AuditConditionConfirmEventType + + + i=2790 + + + Variable_2 + + i=17224 + + + 0 + ConditionEventId + + + i=46 + + + i=68 + + + i=78 + + 17224 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=11854 + + + 0 + Comment + + + i=46 + + + i=68 + + + i=78 + + 11854 + + i=21 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11093 + + + 0 + AuditConditionShelvingEventType + + + i=2790 + + + Variable_2 + + i=11855 + + + 0 + ShelvingTime + + + i=46 + + + i=68 + + + i=80 + + 11855 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=17225 + + + 0 + AuditConditionSuppressionEventType + + + i=2790 + + + + ObjectType_8 + + i=17242 + + + 0 + AuditConditionSilenceEventType + + + i=2790 + + + + ObjectType_8 + + i=15013 + + + 0 + AuditConditionResetEventType + + + i=2790 + + + + ObjectType_8 + + i=17259 + + + 0 + AuditConditionOutOfServiceEventType + + + i=2790 + + + + ObjectType_8 + + i=2787 + + + 0 + RefreshStartEventType + + + i=2130 + + true + + + ObjectType_8 + + i=2788 + + + 0 + RefreshEndEventType + + + i=2130 + + true + + + ObjectType_8 + + i=2789 + + + 0 + RefreshRequiredEventType + + + i=2130 + + true + + + ReferenceType_32 + + i=9006 + + + 0 + HasCondition + + + i=32 + + + + IsConditionOf + + + + ReferenceType_32 + + i=17276 + + + 0 + HasEffectDisable + + + i=54 + + + + MayBeDisabledBy + + + + ReferenceType_32 + + i=17983 + + + 0 + HasEffectEnable + + + i=54 + + + + MayBeEnabledBy + + + + ReferenceType_32 + + i=17984 + + + 0 + HasEffectSuppressed + + + i=54 + + + + MayBeSuppressedBy + + + + ReferenceType_32 + + i=17985 + + + 0 + HasEffectUnsuppressed + + + i=54 + + + + MayBeUnsuppressedBy + + + + ObjectType_8 + + i=17279 + + + 0 + AlarmMetricsType + + + i=58 + + + Variable_2 + + i=17280 + + + 0 + AlarmCount + + + i=47 + + + i=63 + + + i=78 + + 17280 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17991 + + + 0 + StartTime + + + i=47 + + + i=63 + + + i=78 + + 17991 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=17281 + + + 0 + MaximumActiveState + + + i=47 + + + i=63 + + + i=78 + + 17281 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17282 + + + 0 + MaximumUnAck + + + i=47 + + + i=63 + + + i=78 + + 17282 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17284 + + + 0 + CurrentAlarmRate + + + i=47 + + + i=17277 + + + i=78 + + 17284 + + i=11 + + -1 + 1 + 1 + + Variable_2 + + i=17285 + + + 0 + Rate + + + i=46 + + + i=68 + + + i=78 + + 17285 + + i=5 + + -1 + 1 + 1 + + + + Variable_2 + + i=17286 + + + 0 + MaximumAlarmRate + + + i=47 + + + i=17277 + + + i=78 + + 17286 + + i=11 + + -1 + 1 + 1 + + Variable_2 + + i=17287 + + + 0 + Rate + + + i=46 + + + i=68 + + + i=78 + + 17287 + + i=5 + + -1 + 1 + 1 + + + + Variable_2 + + i=17283 + + + 0 + MaximumReAlarmCount + + + i=47 + + + i=63 + + + i=78 + + 17283 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17288 + + + 0 + AverageAlarmRate + + + i=47 + + + i=17277 + + + i=78 + + 17288 + + i=11 + + -1 + 1 + 1 + + Variable_2 + + i=17289 + + + 0 + Rate + + + i=46 + + + i=68 + + + i=78 + + 17289 + + i=5 + + -1 + 1 + 1 + + + + Method_4 + + i=18666 + + + 0 + Reset + + + i=47 + + + i=18666 + + + i=78 + + 18666 + true + true + + + + i=3065 + + + i=2127 + + + + + + + VariableType_16 + + i=17277 + + + 0 + AlarmRateVariableType + + + i=63 + + + i=11 + + -1 + + Variable_2 + + i=17278 + + + 0 + Rate + + + i=46 + + + i=68 + + + i=78 + + 17278 + + i=5 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2391 + + + 0 + ProgramStateMachineType + + + i=2771 + + + Variable_2 + + i=3830 + + + 0 + CurrentState + + + i=47 + + + i=2760 + + + i=78 + + 3830 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3831 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3831 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3833 + + + 0 + Number + + + i=46 + + + i=68 + + + i=78 + + 3833 + + i=7 + + -1 + 1 + 1 + + + + Variable_2 + + i=3835 + + + 0 + LastTransition + + + i=47 + + + i=2767 + + + i=78 + + 3835 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3836 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3836 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3838 + + + 0 + Number + + + i=46 + + + i=68 + + + i=78 + + 3838 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=3839 + + + 0 + TransitionTime + + + i=46 + + + i=68 + + + i=78 + + 3839 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=2392 + + + 0 + Creatable + + + i=46 + + + i=68 + + 2392 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2393 + + + 0 + Deletable + + + i=46 + + + i=68 + + + i=78 + + 2393 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2394 + + + 0 + AutoDelete + + + i=46 + + + i=68 + + + i=78 + + 2394 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2395 + + + 0 + RecycleCount + + + i=46 + + + i=68 + + + i=78 + + 2395 + + i=6 + + -1 + 1 + 1 + + + Variable_2 + + i=2396 + + + 0 + InstanceCount + + + i=46 + + + i=68 + + 2396 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2397 + + + 0 + MaxInstanceCount + + + i=46 + + + i=68 + + 2397 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2398 + + + 0 + MaxRecycleCount + + + i=46 + + + i=68 + + 2398 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2399 + + + 0 + ProgramDiagnostic + + + i=47 + + + i=15383 + + + i=80 + + 2399 + + i=15396 + + -1 + 1 + 1 + + Variable_2 + + i=3840 + + + 0 + CreateSessionId + + + i=47 + + + i=63 + + + i=78 + + 3840 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3841 + + + 0 + CreateClientName + + + i=47 + + + i=63 + + + i=78 + + 3841 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3842 + + + 0 + InvocationCreationTime + + + i=47 + + + i=63 + + + i=78 + + 3842 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3843 + + + 0 + LastTransitionTime + + + i=46 + + + i=68 + + + i=78 + + 3843 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3844 + + + 0 + LastMethodCall + + + i=47 + + + i=63 + + + i=78 + + 3844 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=3845 + + + 0 + LastMethodSessionId + + + i=47 + + + i=63 + + + i=78 + + 3845 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3846 + + + 0 + LastMethodInputArguments + + + i=47 + + + i=63 + + + i=78 + + 3846 + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3847 + + + 0 + LastMethodOutputArguments + + + i=47 + + + i=63 + + + i=78 + + 3847 + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15038 + + + 0 + LastMethodInputValues + + + i=47 + + + i=63 + + + i=78 + + 15038 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15040 + + + 0 + LastMethodOutputValues + + + i=47 + + + i=63 + + + i=78 + + 15040 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3848 + + + 0 + LastMethodCallTime + + + i=47 + + + i=63 + + + i=78 + + 3848 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3849 + + + 0 + LastMethodReturnStatus + + + i=47 + + + i=63 + + + i=78 + + 3849 + + i=19 + + -1 + 1 + 1 + + + + Object_1 + + i=3850 + + + 0 + FinalResultData + + + i=47 + + + i=58 + + + i=80 + + 3850 + + + Object_1 + + i=2406 + + + 0 + Halted + + + i=47 + + + i=2307 + + 2406 + + + + i=51 + + true + + i=2408 + + + + + i=52 + + true + + i=2412 + + + + + i=52 + + true + + i=2420 + + + + + i=52 + + true + + i=2424 + + + + + Variable_2 + + i=2407 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 2407 + + + 11 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2400 + + + 0 + Ready + + + i=47 + + + i=2307 + + 2400 + + + + i=52 + + true + + i=2408 + + + + + i=51 + + true + + i=2410 + + + + + i=52 + + true + + i=2414 + + + + + i=52 + + true + + i=2422 + + + + + i=51 + + true + + i=2424 + + + + + Variable_2 + + i=2401 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 2401 + + + 12 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2402 + + + 0 + Running + + + i=47 + + + i=2307 + + 2402 + + + + i=52 + + true + + i=2410 + + + + + i=51 + + true + + i=2412 + + + + + i=51 + + true + + i=2414 + + + + + i=51 + + true + + i=2416 + + + + + i=52 + + true + + i=2418 + + + + + Variable_2 + + i=2403 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 2403 + + + 13 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2404 + + + 0 + Suspended + + + i=47 + + + i=2307 + + 2404 + + + + i=52 + + true + + i=2416 + + + + + i=51 + + true + + i=2418 + + + + + i=51 + + true + + i=2420 + + + + + i=51 + + true + + i=2422 + + + + + Variable_2 + + i=2405 + + + 0 + StateNumber + + + i=46 + + + i=68 + + + i=78 + + 2405 + + + 14 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2408 + + + 0 + HaltedToReady + + + i=47 + + + i=2310 + + 2408 + + + + i=51 + + + i=2406 + + + + + i=52 + + + i=2400 + + + + + i=53 + + + i=2430 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2409 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2409 + + + 1 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2410 + + + 0 + ReadyToRunning + + + i=47 + + + i=2310 + + 2410 + + + + i=51 + + + i=2400 + + + + + i=52 + + + i=2402 + + + + + i=53 + + + i=2426 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2411 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2411 + + + 2 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2412 + + + 0 + RunningToHalted + + + i=47 + + + i=2310 + + 2412 + + + + i=51 + + + i=2402 + + + + + i=52 + + + i=2406 + + + + + i=53 + + + i=2429 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2413 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2413 + + + 3 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2414 + + + 0 + RunningToReady + + + i=47 + + + i=2310 + + 2414 + + + + i=51 + + + i=2402 + + + + + i=52 + + + i=2400 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2415 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2415 + + + 4 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2416 + + + 0 + RunningToSuspended + + + i=47 + + + i=2310 + + 2416 + + + + i=51 + + + i=2402 + + + + + i=52 + + + i=2404 + + + + + i=53 + + + i=2427 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2417 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2417 + + + 5 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2418 + + + 0 + SuspendedToRunning + + + i=47 + + + i=2310 + + 2418 + + + + i=51 + + + i=2404 + + + + + i=52 + + + i=2402 + + + + + i=53 + + + i=2428 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2419 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2419 + + + 6 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2420 + + + 0 + SuspendedToHalted + + + i=47 + + + i=2310 + + 2420 + + + + i=51 + + + i=2404 + + + + + i=52 + + + i=2406 + + + + + i=53 + + + i=2429 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2421 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2421 + + + 7 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2422 + + + 0 + SuspendedToReady + + + i=47 + + + i=2310 + + 2422 + + + + i=51 + + + i=2404 + + + + + i=52 + + + i=2400 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2423 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2423 + + + 8 + + + + i=7 + + -1 + 1 + 1 + + + + Object_1 + + i=2424 + + + 0 + ReadyToHalted + + + i=47 + + + i=2310 + + 2424 + + + + i=51 + + + i=2400 + + + + + i=52 + + + i=2406 + + + + + i=53 + + + i=2429 + + + + + i=54 + + + i=2378 + + + + + Variable_2 + + i=2425 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 2425 + + + 9 + + + + i=7 + + -1 + 1 + 1 + + + + Method_4 + + i=2426 + + + 0 + Start + + + i=47 + + + i=2426 + + + i=11508 + + 2426 + true + true + + + + i=53 + + true + + i=2410 + + + + + + Method_4 + + i=2427 + + + 0 + Suspend + + + i=47 + + + i=2427 + + + i=11508 + + 2427 + true + true + + + + i=53 + + true + + i=2416 + + + + + + Method_4 + + i=2428 + + + 0 + Resume + + + i=47 + + + i=2428 + + + i=11508 + + 2428 + true + true + + + + i=53 + + true + + i=2418 + + + + + + Method_4 + + i=2429 + + + 0 + Halt + + + i=47 + + + i=2429 + + + i=11508 + + 2429 + true + true + + + + i=53 + + true + + i=2412 + + + + + i=53 + + true + + i=2420 + + + + + i=53 + + true + + i=2424 + + + + + + Method_4 + + i=2430 + + + 0 + Reset + + + i=47 + + + i=2430 + + + i=11508 + + 2430 + true + true + + + + i=53 + + true + + i=2408 + + + + + + + ObjectType_8 + + i=2378 + + + 0 + ProgramTransitionEventType + + + i=2311 + + true + + Variable_2 + + i=2379 + + + 0 + IntermediateResult + + + i=47 + + + i=63 + + + i=78 + + 2379 + + i=24 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11856 + + + 0 + AuditProgramTransitionEventType + + + i=2315 + + true + + Variable_2 + + i=11875 + + + 0 + TransitionNumber + + + i=46 + + + i=68 + + + i=78 + + 11875 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=3806 + + + 0 + ProgramTransitionAuditEventType + + + i=2315 + + + Variable_2 + + i=3825 + + + 0 + Transition + + + i=47 + + + i=2767 + + + i=78 + + 3825 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=3826 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 3826 + + i=17 + + -1 + 1 + 1 + + + + + VariableType_16 + + i=2380 + + + 0 + ProgramDiagnosticType + + + i=63 + + + i=894 + + -1 + + Variable_2 + + i=2381 + + + 0 + CreateSessionId + + + i=46 + + + i=68 + + + i=78 + + 2381 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2382 + + + 0 + CreateClientName + + + i=46 + + + i=68 + + + i=78 + + 2382 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2383 + + + 0 + InvocationCreationTime + + + i=46 + + + i=68 + + + i=78 + + 2383 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2384 + + + 0 + LastTransitionTime + + + i=46 + + + i=68 + + + i=78 + + 2384 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2385 + + + 0 + LastMethodCall + + + i=46 + + + i=68 + + + i=78 + + 2385 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2386 + + + 0 + LastMethodSessionId + + + i=46 + + + i=68 + + + i=78 + + 2386 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=2387 + + + 0 + LastMethodInputArguments + + + i=46 + + + i=68 + + + i=78 + + 2387 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2388 + + + 0 + LastMethodOutputArguments + + + i=46 + + + i=68 + + + i=78 + + 2388 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=2389 + + + 0 + LastMethodCallTime + + + i=46 + + + i=68 + + + i=78 + + 2389 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=2390 + + + 0 + LastMethodReturnStatus + + + i=46 + + + i=68 + + + i=78 + + 2390 + + i=19 + + -1 + 1 + 1 + + + + VariableType_16 + + i=15383 + + + 0 + ProgramDiagnostic2Type + + + i=63 + + + i=15396 + + -1 + + Variable_2 + + i=15384 + + + 0 + CreateSessionId + + + i=47 + + + i=63 + + + i=78 + + 15384 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=15385 + + + 0 + CreateClientName + + + i=47 + + + i=63 + + + i=78 + + 15385 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15386 + + + 0 + InvocationCreationTime + + + i=47 + + + i=63 + + + i=78 + + 15386 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=15387 + + + 0 + LastTransitionTime + + + i=46 + + + i=68 + + + i=78 + + 15387 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=15388 + + + 0 + LastMethodCall + + + i=47 + + + i=63 + + + i=78 + + 15388 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15389 + + + 0 + LastMethodSessionId + + + i=47 + + + i=63 + + + i=78 + + 15389 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=15390 + + + 0 + LastMethodInputArguments + + + i=47 + + + i=63 + + + i=78 + + 15390 + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15391 + + + 0 + LastMethodOutputArguments + + + i=47 + + + i=63 + + + i=78 + + 15391 + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15392 + + + 0 + LastMethodInputValues + + + i=47 + + + i=63 + + + i=78 + + 15392 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15393 + + + 0 + LastMethodOutputValues + + + i=47 + + + i=63 + + + i=78 + + 15393 + + i=24 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15394 + + + 0 + LastMethodCallTime + + + i=47 + + + i=63 + + + i=78 + + 15394 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=15395 + + + 0 + LastMethodReturnStatus + + + i=47 + + + i=63 + + + i=78 + + 15395 + + i=19 + + -1 + 1 + 1 + + + + Variable_2 + + i=11214 + + + 0 + Annotations + + + i=47 + + + i=68 + + 11214 + + i=891 + + 1 + 1 + + + ObjectType_8 + + i=2318 + + + 0 + HistoricalDataConfigurationType + + + i=58 + + + Object_1 + + i=3059 + + + 0 + AggregateConfiguration + + + i=47 + + + i=11187 + + + i=78 + + 3059 + + Variable_2 + + i=11168 + + + 0 + TreatUncertainAsBad + + + i=46 + + + i=68 + + + i=78 + + 11168 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11169 + + + 0 + PercentDataBad + + + i=46 + + + i=68 + + + i=78 + + 11169 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=11170 + + + 0 + PercentDataGood + + + i=46 + + + i=68 + + + i=78 + + 11170 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=11171 + + + 0 + UseSlopedExtrapolation + + + i=46 + + + i=68 + + + i=78 + + 11171 + + i=1 + + -1 + 1 + 1 + + + + Object_1 + + i=11876 + + + 0 + AggregateFunctions + + + i=47 + + + i=61 + + + i=80 + + 11876 + + + Variable_2 + + i=2323 + + + 0 + Stepped + + + i=46 + + + i=68 + + + i=78 + + 2323 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2324 + + + 0 + Definition + + + i=46 + + + i=68 + + + i=80 + + 2324 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=2325 + + + 0 + MaxTimeInterval + + + i=46 + + + i=68 + + + i=80 + + 2325 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=2326 + + + 0 + MinTimeInterval + + + i=46 + + + i=68 + + + i=80 + + 2326 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=2327 + + + 0 + ExceptionDeviation + + + i=46 + + + i=68 + + + i=80 + + 2327 + + i=11 + + -1 + 1 + 1 + + + Variable_2 + + i=2328 + + + 0 + ExceptionDeviationFormat + + + i=46 + + + i=68 + + + i=80 + + 2328 + + i=890 + + -1 + 1 + 1 + + + Variable_2 + + i=11499 + + + 0 + StartOfArchive + + + i=46 + + + i=68 + + + i=80 + + 11499 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=11500 + + + 0 + StartOfOnlineArchive + + + i=46 + + + i=68 + + + i=80 + + 11500 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=19092 + + + 0 + ServerTimestampSupported + + + i=46 + + + i=68 + + + i=80 + + 19092 + + i=1 + + -1 + 1 + 1 + + + + Object_1 + + i=11202 + + + 0 + HA Configuration + + + i=47 + + + i=2318 + + 11202 + + Object_1 + + i=11203 + + + 0 + AggregateConfiguration + + + i=47 + + + i=11187 + + 11203 + + Variable_2 + + i=11204 + + + 0 + TreatUncertainAsBad + + + i=46 + + + i=68 + + 11204 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11205 + + + 0 + PercentDataBad + + + i=46 + + + i=68 + + 11205 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=11206 + + + 0 + PercentDataGood + + + i=46 + + + i=68 + + 11206 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=11207 + + + 0 + UseSlopedExtrapolation + + + i=46 + + + i=68 + + 11207 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=11208 + + + 0 + Stepped + + + i=46 + + + i=68 + + 11208 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=11215 + + + 0 + HistoricalEventFilter + + + i=47 + + + i=68 + + 11215 + + i=725 + + 1 + 1 + + + ObjectType_8 + + i=2330 + + + 0 + HistoryServerCapabilitiesType + + + i=58 + + + Variable_2 + + i=2331 + + + 0 + AccessHistoryDataCapability + + + i=46 + + + i=68 + + + i=78 + + 2331 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2332 + + + 0 + AccessHistoryEventsCapability + + + i=46 + + + i=68 + + + i=78 + + 2332 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11268 + + + 0 + MaxReturnDataValues + + + i=46 + + + i=68 + + + i=78 + + 11268 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=11269 + + + 0 + MaxReturnEventValues + + + i=46 + + + i=68 + + + i=78 + + 11269 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=2334 + + + 0 + InsertDataCapability + + + i=46 + + + i=68 + + + i=78 + + 2334 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2335 + + + 0 + ReplaceDataCapability + + + i=46 + + + i=68 + + + i=78 + + 2335 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2336 + + + 0 + UpdateDataCapability + + + i=46 + + + i=68 + + + i=78 + + 2336 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2337 + + + 0 + DeleteRawCapability + + + i=46 + + + i=68 + + + i=78 + + 2337 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=2338 + + + 0 + DeleteAtTimeCapability + + + i=46 + + + i=68 + + + i=78 + + 2338 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11278 + + + 0 + InsertEventCapability + + + i=46 + + + i=68 + + + i=78 + + 11278 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11279 + + + 0 + ReplaceEventCapability + + + i=46 + + + i=68 + + + i=78 + + 11279 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11280 + + + 0 + UpdateEventCapability + + + i=46 + + + i=68 + + + i=78 + + 11280 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11501 + + + 0 + DeleteEventCapability + + + i=46 + + + i=68 + + + i=78 + + 11501 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11270 + + + 0 + InsertAnnotationCapability + + + i=46 + + + i=68 + + + i=78 + + 11270 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=11172 + + + 0 + AggregateFunctions + + + i=47 + + + i=61 + + + i=78 + + 11172 + + + Variable_2 + + i=19094 + + + 0 + ServerTimestampSupported + + + i=46 + + + i=68 + + + i=78 + + 19094 + + i=1 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=2999 + + + 0 + AuditHistoryEventUpdateEventType + + + i=2104 + + true + + Variable_2 + + i=3025 + + + 0 + UpdatedNode + + + i=46 + + + i=68 + + + i=78 + + 3025 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3028 + + + 0 + PerformInsertReplace + + + i=46 + + + i=68 + + + i=78 + + 3028 + + i=11293 + + -1 + 1 + 1 + + + Variable_2 + + i=3003 + + + 0 + Filter + + + i=46 + + + i=68 + + + i=78 + + 3003 + + i=725 + + -1 + 1 + 1 + + + Variable_2 + + i=3029 + + + 0 + NewValues + + + i=46 + + + i=68 + + + i=78 + + 3029 + + i=920 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3030 + + + 0 + OldValues + + + i=46 + + + i=68 + + + i=78 + + 3030 + + i=920 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=3006 + + + 0 + AuditHistoryValueUpdateEventType + + + i=2104 + + true + + Variable_2 + + i=3026 + + + 0 + UpdatedNode + + + i=46 + + + i=68 + + + i=78 + + 3026 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=3031 + + + 0 + PerformInsertReplace + + + i=46 + + + i=68 + + + i=78 + + 3031 + + i=11293 + + -1 + 1 + 1 + + + Variable_2 + + i=3032 + + + 0 + NewValues + + + i=46 + + + i=68 + + + i=78 + + 3032 + + i=23 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3033 + + + 0 + OldValues + + + i=46 + + + i=68 + + + i=78 + + 3033 + + i=23 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=19095 + + + 0 + AuditHistoryAnnotationUpdateEventType + + + i=2104 + + true + + Variable_2 + + i=19293 + + + 0 + PerformInsertReplace + + + i=46 + + + i=68 + + + i=78 + + 19293 + + i=11293 + + -1 + 1 + 1 + + + Variable_2 + + i=19294 + + + 0 + NewValues + + + i=46 + + + i=68 + + + i=78 + + 19294 + + i=23 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=19295 + + + 0 + OldValues + + + i=46 + + + i=68 + + + i=78 + + 19295 + + i=23 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=3012 + + + 0 + AuditHistoryDeleteEventType + + + i=2104 + + true + + Variable_2 + + i=3027 + + + 0 + UpdatedNode + + + i=46 + + + i=68 + + + i=78 + + 3027 + + i=17 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=3014 + + + 0 + AuditHistoryRawModifyDeleteEventType + + + i=3012 + + true + + Variable_2 + + i=3015 + + + 0 + IsDeleteModified + + + i=46 + + + i=68 + + + i=78 + + 3015 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=3016 + + + 0 + StartTime + + + i=46 + + + i=68 + + + i=78 + + 3016 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3017 + + + 0 + EndTime + + + i=46 + + + i=68 + + + i=78 + + 3017 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=3034 + + + 0 + OldValues + + + i=46 + + + i=68 + + + i=78 + + 3034 + + i=23 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=3019 + + + 0 + AuditHistoryAtTimeDeleteEventType + + + i=3012 + + true + + Variable_2 + + i=3020 + + + 0 + ReqTimes + + + i=46 + + + i=68 + + + i=78 + + 3020 + + i=294 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3021 + + + 0 + OldValues + + + i=46 + + + i=68 + + + i=78 + + 3021 + + i=23 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=3022 + + + 0 + AuditHistoryEventDeleteEventType + + + i=3012 + + true + + Variable_2 + + i=3023 + + + 0 + EventIds + + + i=46 + + + i=68 + + + i=78 + + 3023 + + i=15 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=3024 + + + 0 + OldValues + + + i=46 + + + i=68 + + + i=78 + + 3024 + + i=920 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=12522 + + + 0 + TrustListType + + + i=11575 + + + Variable_2 + + i=12542 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 12542 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=19296 + + + 0 + UpdateFrequency + + + i=46 + + + i=68 + + + i=80 + + 19296 + + i=290 + + -1 + 1 + 1 + + + Method_4 + + i=12543 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 12543 + true + true + + Variable_2 + + i=12544 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12544 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12545 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 12545 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12546 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + + i=80 + + 12546 + true + true + + Variable_2 + + i=12705 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12705 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12547 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 12547 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12548 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + + i=80 + + 12548 + true + true + + Variable_2 + + i=12549 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12549 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12550 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + + i=80 + + 12550 + true + true + + Variable_2 + + i=12551 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12551 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + DataType_64 + + i=12552 + + + 0 + TrustListMasks + + + i=29 + + + + i=14799 + + + + + + 0 + + None + + None + + + 1 + + TrustedCertificates + + TrustedCertificates + + + 2 + + TrustedCrls + + TrustedCrls + + + 4 + + IssuerCertificates + + IssuerCertificates + + + 8 + + IssuerCrls + + IssuerCrls + + + 15 + + All + + All + + + + + + + Variable_2 + + i=12553 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 12553 + + + + + + i=7616 + + + + 0 + + + None + + + + + + + i=7616 + + + + 1 + + + TrustedCertificates + + + + + + + i=7616 + + + + 2 + + + TrustedCrls + + + + + + + i=7616 + + + + 4 + + + IssuerCertificates + + + + + + + i=7616 + + + + 8 + + + IssuerCrls + + + + + + + i=7616 + + + + 15 + + + All + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=12554 + + + 0 + TrustListDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SpecifiedLists + + i=7 + + -1 + + 0 + false + + + TrustedCertificates + + i=15 + + 1 + + 0 + false + + + TrustedCrls + + i=15 + + 1 + + 0 + false + + + IssuerCertificates + + i=15 + + 1 + + 0 + false + + + IssuerCrls + + i=15 + + 1 + + 0 + false + + + + + + + + ObjectType_8 + + i=19297 + + + 0 + TrustListOutOfDateAlarmType + + + i=11753 + + + Variable_2 + + i=19446 + + + 0 + TrustListId + + + i=46 + + + i=68 + + + i=78 + + 19446 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=19447 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 19447 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=19448 + + + 0 + UpdateFrequency + + + i=46 + + + i=68 + + + i=78 + + 19448 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=12555 + + + 0 + CertificateGroupType + + + i=58 + + + Object_1 + + i=13599 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 13599 + + Variable_2 + + i=13600 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13600 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13601 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13601 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13602 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13602 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13603 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13603 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13605 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13605 + true + true + + Variable_2 + + i=13606 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13606 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13607 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13607 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13608 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13608 + true + true + + Variable_2 + + i=13609 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13609 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13610 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13610 + true + true + + Variable_2 + + i=13611 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13611 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13612 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13612 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13613 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13613 + true + true + + Variable_2 + + i=13614 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13614 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13615 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13615 + true + true + + Variable_2 + + i=13616 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13616 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13617 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13617 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13618 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13618 + true + true + + Variable_2 + + i=13619 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13619 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=13620 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 13620 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=13621 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 13621 + true + true + + Variable_2 + + i=13622 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13622 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13623 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13623 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=13631 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 13631 + + i=17 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=19450 + + + 0 + CertificateExpired + + + i=47 + + + i=13225 + + + i=80 + + 19450 + + Variable_2 + + i=19451 + + + 0 + EventId + + + i=46 + + + i=68 + + + i=78 + + 19451 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=19452 + + + 0 + EventType + + + i=46 + + + i=68 + + + i=78 + + 19452 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=19453 + + + 0 + SourceNode + + + i=46 + + + i=68 + + + i=78 + + 19453 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=19454 + + + 0 + SourceName + + + i=46 + + + i=68 + + + i=78 + + 19454 + + i=12 + + -1 + 1 + 1 + + + + Variable_2 + + i=19456 + + + 0 + ReceiveTime + + + i=46 + + + i=68 + + + i=78 + + 19456 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=19458 + + + 0 + Message + + + i=46 + + + i=68 + + + i=78 + + 19458 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=19459 + + + 0 + Severity + + + i=46 + + + i=68 + + + i=78 + + 19459 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=19460 + + + 0 + ConditionClassId + + + i=46 + + + i=68 + + + i=78 + + 19460 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=19461 + + + 0 + ConditionClassName + + + i=46 + + + i=68 + + + i=78 + + 19461 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=19464 + + + 0 + ConditionName + + + i=46 + + + i=68 + + + i=78 + + 19464 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=19465 + + + 0 + BranchId + + + i=46 + + + i=68 + + + i=78 + + 19465 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=19466 + + + 0 + Retain + + + i=46 + + + i=68 + + + i=78 + + 19466 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19467 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 19467 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=19468 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 19468 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=19476 + + + 0 + Quality + + + i=47 + + + i=9002 + + + i=78 + + 19476 + + i=19 + + -1 + 1 + 1 + + Variable_2 + + i=19477 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 19477 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=19478 + + + 0 + LastSeverity + + + i=47 + + + i=9002 + + + i=78 + + 19478 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19479 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 19479 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=19480 + + + 0 + Comment + + + i=47 + + + i=9002 + + + i=78 + + 19480 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=19481 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 19481 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=19482 + + + 0 + ClientUserId + + + i=46 + + + i=68 + + + i=78 + + 19482 + + i=12 + + -1 + 1 + 1 + + + Method_4 + + i=19483 + + + 0 + Disable + + + i=47 + + + i=9028 + + + i=78 + + 19483 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=19484 + + + 0 + Enable + + + i=47 + + + i=9027 + + + i=78 + + 19484 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=19485 + + + 0 + AddComment + + + i=47 + + + i=9029 + + + i=78 + + 19485 + true + true + + + + i=3065 + + + i=2829 + + + + + Variable_2 + + i=19486 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 19486 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=19487 + + + 0 + AckedState + + + i=47 + + + i=8995 + + + i=78 + + 19487 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=19488 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 19488 + + i=1 + + -1 + 1 + 1 + + + + Method_4 + + i=19505 + + + 0 + Acknowledge + + + i=47 + + + i=9111 + + + i=78 + + 19505 + true + true + + + + i=3065 + + + i=8944 + + + + + Variable_2 + + i=19506 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 19506 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=19509 + + + 0 + ActiveState + + + i=47 + + + i=8995 + + + i=78 + + 19509 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=19510 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 19510 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=19518 + + + 0 + InputNode + + + i=46 + + + i=68 + + + i=78 + + 19518 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20101 + + + 0 + SuppressedOrShelved + + + i=46 + + + i=68 + + + i=78 + + 20101 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=20138 + + + 0 + NormalState + + + i=46 + + + i=68 + + + i=78 + + 20138 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20139 + + + 0 + ExpirationDate + + + i=46 + + + i=68 + + + i=78 + + 20139 + + i=13 + + -1 + 1 + 1 + + + Variable_2 + + i=20141 + + + 0 + CertificateType + + + i=46 + + + i=68 + + + i=78 + + 20141 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20142 + + + 0 + Certificate + + + i=46 + + + i=68 + + + i=78 + + 20142 + + i=15 + + -1 + 1 + 1 + + + + Object_1 + + i=20143 + + + 0 + TrustListOutOfDate + + + i=47 + + + i=19297 + + + i=80 + + 20143 + + Variable_2 + + i=20144 + + + 0 + EventId + + + i=46 + + + i=68 + + + i=78 + + 20144 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=20145 + + + 0 + EventType + + + i=46 + + + i=68 + + + i=78 + + 20145 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20146 + + + 0 + SourceNode + + + i=46 + + + i=68 + + + i=78 + + 20146 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20147 + + + 0 + SourceName + + + i=46 + + + i=68 + + + i=78 + + 20147 + + i=12 + + -1 + 1 + 1 + + + + Variable_2 + + i=20149 + + + 0 + ReceiveTime + + + i=46 + + + i=68 + + + i=78 + + 20149 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=20151 + + + 0 + Message + + + i=46 + + + i=68 + + + i=78 + + 20151 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=20152 + + + 0 + Severity + + + i=46 + + + i=68 + + + i=78 + + 20152 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=20153 + + + 0 + ConditionClassId + + + i=46 + + + i=68 + + + i=78 + + 20153 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20154 + + + 0 + ConditionClassName + + + i=46 + + + i=68 + + + i=78 + + 20154 + + i=21 + + -1 + 1 + 1 + + + Variable_2 + + i=20157 + + + 0 + ConditionName + + + i=46 + + + i=68 + + + i=78 + + 20157 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=20158 + + + 0 + BranchId + + + i=46 + + + i=68 + + + i=78 + + 20158 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20159 + + + 0 + Retain + + + i=46 + + + i=68 + + + i=78 + + 20159 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=20160 + + + 0 + EnabledState + + + i=47 + + + i=8995 + + + i=78 + + 20160 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=20161 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 20161 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=20169 + + + 0 + Quality + + + i=47 + + + i=9002 + + + i=78 + + 20169 + + i=19 + + -1 + 1 + 1 + + Variable_2 + + i=20170 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 20170 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=20171 + + + 0 + LastSeverity + + + i=47 + + + i=9002 + + + i=78 + + 20171 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=20172 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 20172 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=20173 + + + 0 + Comment + + + i=47 + + + i=9002 + + + i=78 + + 20173 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=20174 + + + 0 + SourceTimestamp + + + i=46 + + + i=68 + + + i=78 + + 20174 + + i=294 + + -1 + 1 + 1 + + + + Variable_2 + + i=20175 + + + 0 + ClientUserId + + + i=46 + + + i=68 + + + i=78 + + 20175 + + i=12 + + -1 + 1 + 1 + + + Method_4 + + i=20176 + + + 0 + Disable + + + i=47 + + + i=9028 + + + i=78 + + 20176 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=20177 + + + 0 + Enable + + + i=47 + + + i=9027 + + + i=78 + + 20177 + true + true + + + + i=3065 + + + i=2803 + + + + + + Method_4 + + i=20178 + + + 0 + AddComment + + + i=47 + + + i=9029 + + + i=78 + + 20178 + true + true + + + + i=3065 + + + i=2829 + + + + + Variable_2 + + i=20179 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 20179 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=20180 + + + 0 + AckedState + + + i=47 + + + i=8995 + + + i=78 + + 20180 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=20181 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 20181 + + i=1 + + -1 + 1 + 1 + + + + Method_4 + + i=20198 + + + 0 + Acknowledge + + + i=47 + + + i=9111 + + + i=78 + + 20198 + true + true + + + + i=3065 + + + i=8944 + + + + + Variable_2 + + i=20199 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 20199 + + + + + + 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. + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=20202 + + + 0 + ActiveState + + + i=47 + + + i=8995 + + + i=78 + + 20202 + + i=21 + + -1 + 1 + 1 + + Variable_2 + + i=20203 + + + 0 + Id + + + i=46 + + + i=68 + + + i=78 + + 20203 + + i=1 + + -1 + 1 + 1 + + + + Variable_2 + + i=20211 + + + 0 + InputNode + + + i=46 + + + i=68 + + + i=78 + + 20211 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20249 + + + 0 + SuppressedOrShelved + + + i=46 + + + i=68 + + + i=78 + + 20249 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=20286 + + + 0 + NormalState + + + i=46 + + + i=68 + + + i=78 + + 20286 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20287 + + + 0 + TrustListId + + + i=46 + + + i=68 + + + i=78 + + 20287 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=20288 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 20288 + + i=294 + + -1 + 1 + 1 + + + Variable_2 + + i=20289 + + + 0 + UpdateFrequency + + + i=46 + + + i=68 + + + i=78 + + 20289 + + i=290 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=13813 + + + 0 + CertificateGroupFolderType + + + i=61 + + + Object_1 + + i=13814 + + + 0 + DefaultApplicationGroup + + + i=47 + + + i=12555 + + + i=78 + + 13814 + + Object_1 + + i=13815 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 13815 + + Variable_2 + + i=13816 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13816 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13817 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13817 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13818 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13818 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13819 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13819 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13821 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13821 + true + true + + Variable_2 + + i=13822 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13822 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13823 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13823 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13824 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13824 + true + true + + Variable_2 + + i=13825 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13825 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13826 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13826 + true + true + + Variable_2 + + i=13827 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13827 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13828 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13828 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13829 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13829 + true + true + + Variable_2 + + i=13830 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13830 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13831 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13831 + true + true + + Variable_2 + + i=13832 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13832 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13833 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13833 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13834 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13834 + true + true + + Variable_2 + + i=13835 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13835 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=13836 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 13836 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=13837 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 13837 + true + true + + Variable_2 + + i=13838 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13838 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13839 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13839 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=13847 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 13847 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=13848 + + + 0 + DefaultHttpsGroup + + + i=47 + + + i=12555 + + + i=80 + + 13848 + + Object_1 + + i=13849 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 13849 + + Variable_2 + + i=13850 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13850 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13851 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13851 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13852 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13852 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13853 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13853 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13855 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13855 + true + true + + Variable_2 + + i=13856 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13856 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13857 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13857 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13858 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13858 + true + true + + Variable_2 + + i=13859 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13859 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13860 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13860 + true + true + + Variable_2 + + i=13861 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13861 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13862 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13862 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13863 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13863 + true + true + + Variable_2 + + i=13864 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13864 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13865 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13865 + true + true + + Variable_2 + + i=13866 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13866 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13867 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13867 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13868 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13868 + true + true + + Variable_2 + + i=13869 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13869 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=13870 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 13870 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=13871 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 13871 + true + true + + Variable_2 + + i=13872 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13872 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13873 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13873 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=13881 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 13881 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=13882 + + + 0 + DefaultUserTokenGroup + + + i=47 + + + i=12555 + + + i=80 + + 13882 + + Object_1 + + i=13883 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 13883 + + Variable_2 + + i=13884 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13884 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13885 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13885 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13886 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13886 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13887 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13887 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13889 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13889 + true + true + + Variable_2 + + i=13890 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13890 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13891 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13891 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13892 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13892 + true + true + + Variable_2 + + i=13893 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13893 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13894 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13894 + true + true + + Variable_2 + + i=13895 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13895 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13896 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13896 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13897 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13897 + true + true + + Variable_2 + + i=13898 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13898 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13899 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13899 + true + true + + Variable_2 + + i=13900 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13900 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13901 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13901 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13902 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13902 + true + true + + Variable_2 + + i=13903 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13903 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=13904 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 13904 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=13905 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 13905 + true + true + + Variable_2 + + i=13906 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13906 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13907 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13907 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=13915 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 13915 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=13916 + + + 0 + <AdditionalGroup> + + + i=35 + + + i=12555 + + + i=11508 + + 13916 + + Object_1 + + i=13917 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 13917 + + Variable_2 + + i=13918 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13918 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13919 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13919 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13920 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13920 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13921 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13921 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13923 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13923 + true + true + + Variable_2 + + i=13924 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13924 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13925 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13925 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13926 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13926 + true + true + + Variable_2 + + i=13927 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13927 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13928 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13928 + true + true + + Variable_2 + + i=13929 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13929 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13930 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13930 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13931 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13931 + true + true + + Variable_2 + + i=13932 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13932 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13933 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13933 + true + true + + Variable_2 + + i=13934 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13934 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13935 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13935 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13936 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13936 + true + true + + Variable_2 + + i=13937 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13937 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=13938 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 13938 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=13939 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 13939 + true + true + + Variable_2 + + i=13940 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13940 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13941 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13941 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=13949 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 13949 + + i=17 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=12556 + + + 0 + CertificateType + + + i=58 + + true + + + ObjectType_8 + + i=12557 + + + 0 + ApplicationCertificateType + + + i=12556 + + true + + + ObjectType_8 + + i=12558 + + + 0 + HttpsCertificateType + + + i=12556 + + + + ObjectType_8 + + i=15181 + + + 0 + UserCredentialCertificateType + + + i=12556 + + + + ObjectType_8 + + i=12559 + + + 0 + RsaMinApplicationCertificateType + + + i=12557 + + + + ObjectType_8 + + i=12560 + + + 0 + RsaSha256ApplicationCertificateType + + + i=12557 + + + + ObjectType_8 + + i=12561 + + + 0 + TrustListUpdatedAuditEventType + + + i=2127 + + true + + + ObjectType_8 + + i=12581 + + + 0 + ServerConfigurationType + + + i=58 + + + Object_1 + + i=13950 + + + 0 + CertificateGroups + + + i=47 + + + i=13813 + + + i=78 + + 13950 + + Object_1 + + i=13951 + + + 0 + DefaultApplicationGroup + + + i=47 + + + i=12555 + + + i=78 + + 13951 + + Object_1 + + i=13952 + + + 0 + TrustList + + + i=47 + + + i=12522 + + + i=78 + + 13952 + + Variable_2 + + i=13953 + + + 0 + Size + + + i=46 + + + i=68 + + + i=78 + + 13953 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=13954 + + + 0 + Writable + + + i=46 + + + i=68 + + + i=78 + + 13954 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13955 + + + 0 + UserWritable + + + i=46 + + + i=68 + + + i=78 + + 13955 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=13956 + + + 0 + OpenCount + + + i=46 + + + i=68 + + + i=78 + + 13956 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=13958 + + + 0 + Open + + + i=47 + + + i=11580 + + + i=78 + + 13958 + true + true + + Variable_2 + + i=13959 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13959 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13960 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13960 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13961 + + + 0 + Close + + + i=47 + + + i=11583 + + + i=78 + + 13961 + true + true + + Variable_2 + + i=13962 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13962 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13963 + + + 0 + Read + + + i=47 + + + i=11585 + + + i=78 + + 13963 + true + true + + Variable_2 + + i=13964 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13964 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13965 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13965 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13966 + + + 0 + Write + + + i=47 + + + i=11588 + + + i=78 + + 13966 + true + true + + Variable_2 + + i=13967 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13967 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13968 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + + i=78 + + 13968 + true + true + + Variable_2 + + i=13969 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13969 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13970 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13970 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=13971 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + + i=78 + + 13971 + true + true + + Variable_2 + + i=13972 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13972 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=13973 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 13973 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=13974 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + + i=78 + + 13974 + true + true + + Variable_2 + + i=13975 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 13975 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13976 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 13976 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=13984 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + + i=78 + + 13984 + + i=17 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=12708 + + + 0 + ServerCapabilities + + + i=46 + + + i=68 + + + i=78 + + 12708 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12583 + + + 0 + SupportedPrivateKeyFormats + + + i=46 + + + i=68 + + + i=78 + + 12583 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12584 + + + 0 + MaxTrustListSize + + + i=46 + + + i=68 + + + i=78 + + 12584 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12585 + + + 0 + MulticastDnsEnabled + + + i=46 + + + i=68 + + + i=78 + + 12585 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=12616 + + + 0 + UpdateCertificate + + + i=47 + + + i=12616 + + + i=78 + + 12616 + true + true + + Variable_2 + + i=12617 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12617 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12618 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 12618 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12734 + + + 0 + ApplyChanges + + + i=47 + + + i=12734 + + + i=78 + + 12734 + true + true + + + Method_4 + + i=12731 + + + 0 + CreateSigningRequest + + + i=47 + + + i=12731 + + + i=78 + + 12731 + true + true + + Variable_2 + + i=12732 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 12732 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12733 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 12733 + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12775 + + + 0 + GetRejectedList + + + i=47 + + + i=12775 + + + i=78 + + 12775 + true + true + + Variable_2 + + i=12776 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 12776 + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=12620 + + + 0 + CertificateUpdatedAuditEventType + + + i=2127 + + true + + Variable_2 + + i=13735 + + + 0 + CertificateGroup + + + i=46 + + + i=68 + + + i=78 + + 13735 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=13736 + + + 0 + CertificateType + + + i=46 + + + i=68 + + + i=78 + + 13736 + + i=17 + + -1 + 1 + 1 + + + + Object_1 + + i=12637 + + + 0 + ServerConfiguration + + + i=47 + + + i=12581 + + 12637 + + + + i=47 + + true + + i=2253 + + + + + Object_1 + + i=14053 + + + 0 + CertificateGroups + + + i=47 + + + i=13813 + + 14053 + + Object_1 + + i=14156 + + + 0 + DefaultApplicationGroup + + + i=47 + + + i=12555 + + 14156 + + Object_1 + + i=12642 + + + 0 + TrustList + + + i=47 + + + i=12522 + + 12642 + + Variable_2 + + i=12643 + + + 0 + Size + + + i=46 + + + i=68 + + 12643 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=14157 + + + 0 + Writable + + + i=46 + + + i=68 + + 14157 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14158 + + + 0 + UserWritable + + + i=46 + + + i=68 + + 14158 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=12646 + + + 0 + OpenCount + + + i=46 + + + i=68 + + 12646 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=12647 + + + 0 + Open + + + i=47 + + + i=11580 + + 12647 + true + true + + Variable_2 + + i=12648 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12648 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12649 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12649 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12650 + + + 0 + Close + + + i=47 + + + i=11583 + + 12650 + true + true + + Variable_2 + + i=12651 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12651 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12652 + + + 0 + Read + + + i=47 + + + i=11585 + + 12652 + true + true + + Variable_2 + + i=12653 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12653 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12654 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12654 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12655 + + + 0 + Write + + + i=47 + + + i=11588 + + 12655 + true + true + + Variable_2 + + i=12656 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12656 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12657 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + 12657 + true + true + + Variable_2 + + i=12658 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12658 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12659 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12659 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12660 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + 12660 + true + true + + Variable_2 + + i=12661 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12661 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=12662 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + 12662 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=12663 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + 12663 + true + true + + Variable_2 + + i=12664 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12664 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12665 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12665 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12666 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + 12666 + true + true + + Variable_2 + + i=14160 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14160 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12667 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12667 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12668 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + 12668 + true + true + + Variable_2 + + i=12669 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12669 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12670 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + 12670 + true + true + + Variable_2 + + i=12671 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12671 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=14161 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + 14161 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=14088 + + + 0 + DefaultHttpsGroup + + + i=47 + + + i=12555 + + 14088 + + Object_1 + + i=14089 + + + 0 + TrustList + + + i=47 + + + i=12522 + + 14089 + + Variable_2 + + i=14090 + + + 0 + Size + + + i=46 + + + i=68 + + 14090 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=14091 + + + 0 + Writable + + + i=46 + + + i=68 + + 14091 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14092 + + + 0 + UserWritable + + + i=46 + + + i=68 + + 14092 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14093 + + + 0 + OpenCount + + + i=46 + + + i=68 + + 14093 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=14095 + + + 0 + Open + + + i=47 + + + i=11580 + + 14095 + true + true + + Variable_2 + + i=14096 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14096 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14097 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14097 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14098 + + + 0 + Close + + + i=47 + + + i=11583 + + 14098 + true + true + + Variable_2 + + i=14099 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14099 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14100 + + + 0 + Read + + + i=47 + + + i=11585 + + 14100 + true + true + + Variable_2 + + i=14101 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14101 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14102 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14102 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14103 + + + 0 + Write + + + i=47 + + + i=11588 + + 14103 + true + true + + Variable_2 + + i=14104 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14104 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14105 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + 14105 + true + true + + Variable_2 + + i=14106 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14106 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14107 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14107 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14108 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + 14108 + true + true + + Variable_2 + + i=14109 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14109 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=14110 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + 14110 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=14111 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + 14111 + true + true + + Variable_2 + + i=14112 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14112 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14113 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14113 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14114 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + 14114 + true + true + + Variable_2 + + i=14115 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14115 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14116 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14116 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14117 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + 14117 + true + true + + Variable_2 + + i=14118 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14118 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14119 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + 14119 + true + true + + Variable_2 + + i=14120 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14120 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=14121 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + 14121 + + i=17 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=14122 + + + 0 + DefaultUserTokenGroup + + + i=47 + + + i=12555 + + 14122 + + Object_1 + + i=14123 + + + 0 + TrustList + + + i=47 + + + i=12522 + + 14123 + + Variable_2 + + i=14124 + + + 0 + Size + + + i=46 + + + i=68 + + 14124 + + i=9 + + -1 + 1 + 1 + + + Variable_2 + + i=14125 + + + 0 + Writable + + + i=46 + + + i=68 + + 14125 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14126 + + + 0 + UserWritable + + + i=46 + + + i=68 + + 14126 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14127 + + + 0 + OpenCount + + + i=46 + + + i=68 + + 14127 + + i=5 + + -1 + 1 + 1 + + + Method_4 + + i=14129 + + + 0 + Open + + + i=47 + + + i=11580 + + 14129 + true + true + + Variable_2 + + i=14130 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14130 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14131 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14131 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14132 + + + 0 + Close + + + i=47 + + + i=11583 + + 14132 + true + true + + Variable_2 + + i=14133 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14133 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14134 + + + 0 + Read + + + i=47 + + + i=11585 + + 14134 + true + true + + Variable_2 + + i=14135 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14135 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14136 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14136 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14137 + + + 0 + Write + + + i=47 + + + i=11588 + + 14137 + true + true + + Variable_2 + + i=14138 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14138 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14139 + + + 0 + GetPosition + + + i=47 + + + i=11590 + + 14139 + true + true + + Variable_2 + + i=14140 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14140 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14141 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14141 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14142 + + + 0 + SetPosition + + + i=47 + + + i=11593 + + 14142 + true + true + + Variable_2 + + i=14143 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14143 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=14144 + + + 0 + LastUpdateTime + + + i=46 + + + i=68 + + 14144 + + i=294 + + -1 + 1 + 1 + + + Method_4 + + i=14145 + + + 0 + OpenWithMasks + + + i=47 + + + i=12543 + + 14145 + true + true + + Variable_2 + + i=14146 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14146 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14147 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14147 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14148 + + + 0 + CloseAndUpdate + + + i=47 + + + i=12546 + + 14148 + true + true + + Variable_2 + + i=14149 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14149 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14150 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 14150 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14151 + + + 0 + AddCertificate + + + i=47 + + + i=12548 + + 14151 + true + true + + Variable_2 + + i=14152 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14152 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14153 + + + 0 + RemoveCertificate + + + i=47 + + + i=12550 + + 14153 + true + true + + Variable_2 + + i=14154 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 14154 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=14155 + + + 0 + CertificateTypes + + + i=46 + + + i=68 + + 14155 + + i=17 + + 1 + 0 + 1 + 1 + + + + + Variable_2 + + i=12710 + + + 0 + ServerCapabilities + + + i=46 + + + i=68 + + 12710 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12639 + + + 0 + SupportedPrivateKeyFormats + + + i=46 + + + i=68 + + 12639 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12640 + + + 0 + MaxTrustListSize + + + i=46 + + + i=68 + + 12640 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=12641 + + + 0 + MulticastDnsEnabled + + + i=46 + + + i=68 + + 12641 + + i=1 + + -1 + 1 + 1 + + + Method_4 + + i=13737 + + + 0 + UpdateCertificate + + + i=47 + + + i=12616 + + 13737 + true + true + + Variable_2 + + i=13738 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 13738 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=13739 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 13739 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12740 + + + 0 + ApplyChanges + + + i=47 + + + i=12734 + + 12740 + true + true + + + Method_4 + + i=12737 + + + 0 + CreateSigningRequest + + + i=47 + + + i=12731 + + 12737 + true + true + + Variable_2 + + i=12738 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 12738 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=12739 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12739 + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=12777 + + + 0 + GetRejectedList + + + i=47 + + + i=12775 + + 12777 + true + true + + Variable_2 + + i=12778 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 12778 + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=17496 + + + 0 + KeyCredentialConfigurationFolderType + + + i=61 + + + Object_1 + + i=17511 + + + 0 + <ServiceName> + + + i=47 + + + i=18001 + + + i=11508 + + 17511 + + Variable_2 + + i=17512 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 17512 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17513 + + + 0 + ProfileUri + + + i=46 + + + i=68 + + + i=78 + + 17513 + + i=12 + + -1 + 1 + 1 + + + + Method_4 + + i=17522 + + + 0 + CreateCredential + + + i=47 + + + i=17522 + + + i=80 + + 17522 + true + true + + Variable_2 + + i=17523 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17523 + + + + + + i=297 + + + + ResourceUri + + i=12 + + -1 + + + + + + + i=297 + + + + ProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrls + + i=12 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17524 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17524 + + + + + + i=297 + + + + CredentialNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=18155 + + + 0 + KeyCredentialConfiguration + + + i=47 + + + i=17496 + + 18155 + + + + i=47 + + true + + i=12637 + + + + + + ObjectType_8 + + i=18001 + + + 0 + KeyCredentialConfigurationType + + + i=58 + + + Variable_2 + + i=18069 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 18069 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18165 + + + 0 + ProfileUri + + + i=46 + + + i=68 + + + i=78 + + 18165 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18004 + + + 0 + EndpointUrls + + + i=46 + + + i=68 + + + i=80 + + 18004 + + i=12 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=18005 + + + 0 + ServiceStatus + + + i=46 + + + i=68 + + + i=80 + + 18005 + + i=19 + + -1 + 1 + 1 + + + Method_4 + + i=18006 + + + 0 + UpdateCredential + + + i=47 + + + i=18006 + + + i=80 + + 18006 + true + true + + Variable_2 + + i=18007 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 18007 + + + + + + i=297 + + + + CredentialId + + i=12 + + -1 + + + + + + + i=297 + + + + CredentialSecret + + i=15 + + -1 + + + + + + + i=297 + + + + CertificateThumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=18008 + + + 0 + DeleteCredential + + + i=47 + + + i=18008 + + + i=80 + + 18008 + true + true + + + + ObjectType_8 + + i=18011 + + + 0 + KeyCredentialAuditEventType + + + i=2127 + + true + + Variable_2 + + i=18028 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 18028 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=18029 + + + 0 + KeyCredentialUpdatedAuditEventType + + + i=18011 + + + + ObjectType_8 + + i=18047 + + + 0 + KeyCredentialDeletedAuditEventType + + + i=18011 + + + + Object_1 + + i=17732 + + + 0 + AuthorizationServices + + + i=47 + + + i=61 + + 17732 + + + + i=47 + + true + + i=12637 + + + + + + ObjectType_8 + + i=17852 + + + 0 + AuthorizationServiceConfigurationType + + + i=58 + + + Variable_2 + + i=18072 + + + 0 + ServiceUri + + + i=46 + + + i=68 + + + i=78 + + 18072 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17860 + + + 0 + ServiceCertificate + + + i=46 + + + i=68 + + + i=78 + + 17860 + + i=15 + + -1 + 1 + 1 + + + Variable_2 + + i=18073 + + + 0 + IssuerEndpointUrl + + + i=46 + + + i=68 + + + i=78 + + 18073 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=11187 + + + 0 + AggregateConfigurationType + + + i=58 + + + Variable_2 + + i=11188 + + + 0 + TreatUncertainAsBad + + + i=46 + + + i=68 + + + i=78 + + 11188 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=11189 + + + 0 + PercentDataBad + + + i=46 + + + i=68 + + + i=78 + + 11189 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=11190 + + + 0 + PercentDataGood + + + i=46 + + + i=68 + + + i=78 + + 11190 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=11191 + + + 0 + UseSlopedExtrapolation + + + i=46 + + + i=68 + + + i=78 + + 11191 + + i=1 + + -1 + 1 + 1 + + + + Object_1 + + i=2341 + + + 0 + Interpolative + + + i=47 + + + i=2340 + + 2341 + + + Object_1 + + i=2342 + + + 0 + Average + + + i=47 + + + i=2340 + + 2342 + + + Object_1 + + i=2343 + + + 0 + TimeAverage + + + i=47 + + + i=2340 + + 2343 + + + Object_1 + + i=11285 + + + 0 + TimeAverage2 + + + i=47 + + + i=2340 + + 11285 + + + Object_1 + + i=2344 + + + 0 + Total + + + i=47 + + + i=2340 + + 2344 + + + Object_1 + + i=11304 + + + 0 + Total2 + + + i=47 + + + i=2340 + + 11304 + + + Object_1 + + i=2346 + + + 0 + Minimum + + + i=47 + + + i=2340 + + 2346 + + + Object_1 + + i=2347 + + + 0 + Maximum + + + i=47 + + + i=2340 + + 2347 + + + Object_1 + + i=2348 + + + 0 + MinimumActualTime + + + i=47 + + + i=2340 + + 2348 + + + Object_1 + + i=2349 + + + 0 + MaximumActualTime + + + i=47 + + + i=2340 + + 2349 + + + Object_1 + + i=2350 + + + 0 + Range + + + i=47 + + + i=2340 + + 2350 + + + Object_1 + + i=11286 + + + 0 + Minimum2 + + + i=47 + + + i=2340 + + 11286 + + + Object_1 + + i=11287 + + + 0 + Maximum2 + + + i=47 + + + i=2340 + + 11287 + + + Object_1 + + i=11305 + + + 0 + MinimumActualTime2 + + + i=47 + + + i=2340 + + 11305 + + + Object_1 + + i=11306 + + + 0 + MaximumActualTime2 + + + i=47 + + + i=2340 + + 11306 + + + Object_1 + + i=11288 + + + 0 + Range2 + + + i=47 + + + i=2340 + + 11288 + + + Object_1 + + i=2351 + + + 0 + AnnotationCount + + + i=47 + + + i=2340 + + 2351 + + + Object_1 + + i=2352 + + + 0 + Count + + + i=47 + + + i=2340 + + 2352 + + + Object_1 + + i=11307 + + + 0 + DurationInStateZero + + + i=47 + + + i=2340 + + 11307 + + + Object_1 + + i=11308 + + + 0 + DurationInStateNonZero + + + i=47 + + + i=2340 + + 11308 + + + Object_1 + + i=2355 + + + 0 + NumberOfTransitions + + + i=47 + + + i=2340 + + 2355 + + + Object_1 + + i=2357 + + + 0 + Start + + + i=47 + + + i=2340 + + 2357 + + + Object_1 + + i=2358 + + + 0 + End + + + i=47 + + + i=2340 + + 2358 + + + Object_1 + + i=2359 + + + 0 + Delta + + + i=47 + + + i=2340 + + 2359 + + + Object_1 + + i=11505 + + + 0 + StartBound + + + i=47 + + + i=2340 + + 11505 + + + Object_1 + + i=11506 + + + 0 + EndBound + + + i=47 + + + i=2340 + + 11506 + + + Object_1 + + i=11507 + + + 0 + DeltaBounds + + + i=47 + + + i=2340 + + 11507 + + + Object_1 + + i=2360 + + + 0 + DurationGood + + + i=47 + + + i=2340 + + 2360 + + + Object_1 + + i=2361 + + + 0 + DurationBad + + + i=47 + + + i=2340 + + 2361 + + + Object_1 + + i=2362 + + + 0 + PercentGood + + + i=47 + + + i=2340 + + 2362 + + + Object_1 + + i=2363 + + + 0 + PercentBad + + + i=47 + + + i=2340 + + 2363 + + + Object_1 + + i=2364 + + + 0 + WorstQuality + + + i=47 + + + i=2340 + + 2364 + + + Object_1 + + i=11292 + + + 0 + WorstQuality2 + + + i=47 + + + i=2340 + + 11292 + + + Object_1 + + i=11426 + + + 0 + StandardDeviationSample + + + i=47 + + + i=2340 + + 11426 + + + Object_1 + + i=11427 + + + 0 + StandardDeviationPopulation + + + i=47 + + + i=2340 + + 11427 + + + Object_1 + + i=11428 + + + 0 + VarianceSample + + + i=47 + + + i=2340 + + 11428 + + + Object_1 + + i=11429 + + + 0 + VariancePopulation + + + i=47 + + + i=2340 + + 11429 + + + DataType_64 + + i=15534 + + + 0 + DataTypeSchemaHeader + + + i=22 + + true + + + i=14798 + + + + + i=22 + + Structure_0 + + + Namespaces + + i=12 + + 1 + + 0 + false + + + StructureDataTypes + + i=15487 + + 1 + + 0 + false + + + EnumDataTypes + + i=15488 + + 1 + + 0 + false + + + SimpleDataTypes + + i=15005 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=14525 + + + 0 + DataTypeDescription + + + i=22 + + true + + + i=14798 + + + + + i=22 + + Structure_0 + + + DataTypeId + + i=17 + + -1 + + 0 + false + + + Name + + i=20 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15487 + + + 0 + StructureDescription + + + i=14525 + + + + i=14798 + + + + + i=14525 + + Structure_0 + + + DataTypeId + + i=17 + + -1 + + 0 + false + + + Name + + i=20 + + -1 + + 0 + false + + + StructureDefinition + + i=99 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15488 + + + 0 + EnumDescription + + + i=14525 + + + + i=14798 + + + + + i=14525 + + Structure_0 + + + DataTypeId + + i=17 + + -1 + + 0 + false + + + Name + + i=20 + + -1 + + 0 + false + + + EnumDefinition + + i=100 + + -1 + + 0 + false + + + BuiltInType + + i=3 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15005 + + + 0 + SimpleTypeDescription + + + i=14525 + + + + i=14798 + + + + + i=14525 + + Structure_0 + + + DataTypeId + + i=17 + + -1 + + 0 + false + + + Name + + i=20 + + -1 + + 0 + false + + + BaseDataType + + i=17 + + -1 + + 0 + false + + + BuiltInType + + i=3 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15006 + + + 0 + UABinaryFileDataType + + + i=15534 + + + + i=14798 + + + + + i=15534 + + Structure_0 + + + Namespaces + + i=12 + + 1 + + 0 + false + + + StructureDataTypes + + i=15487 + + 1 + + 0 + false + + + EnumDataTypes + + i=15488 + + 1 + + 0 + false + + + SimpleDataTypes + + i=15005 + + 1 + + 0 + false + + + SchemaLocation + + i=12 + + -1 + + 0 + false + + + FileHeader + + i=14533 + + 1 + + 0 + false + + + Body + + i=24 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=14647 + + + 0 + PubSubState + + + i=29 + + + + i=14799 + + + + + + 0 + + Disabled + + Disabled + + + 1 + + Paused + + Paused + + + 2 + + Operational + + Operational + + + 3 + + Error + + Error + + + + + + + Variable_2 + + i=14648 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 14648 + + + + + + Disabled + + + + Paused + + + + Operational + + + + Error + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=14523 + + + 0 + DataSetMetaDataType + + + i=15534 + + + + i=14798 + + + + + i=15534 + + Structure_0 + + + Namespaces + + i=12 + + 1 + + 0 + false + + + StructureDataTypes + + i=15487 + + 1 + + 0 + false + + + EnumDataTypes + + i=15488 + + 1 + + 0 + false + + + SimpleDataTypes + + i=15005 + + 1 + + 0 + false + + + Name + + i=12 + + -1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + Fields + + i=14524 + + 1 + + 0 + false + + + DataSetClassId + + i=14 + + -1 + + 0 + false + + + ConfigurationVersion + + i=14593 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=14524 + + + 0 + FieldMetaData + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + FieldFlags + + i=15904 + + -1 + + 0 + false + + + BuiltInType + + i=3 + + -1 + + 0 + false + + + DataType + + i=17 + + -1 + + 0 + false + + + ValueRank + + i=6 + + -1 + + 0 + false + + + ArrayDimensions + + i=7 + + 1 + + 0 + false + + + MaxStringLength + + i=7 + + -1 + + 0 + false + + + DataSetFieldId + + i=14 + + -1 + + 0 + false + + + Properties + + i=14533 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15904 + + + 0 + DataSetFieldFlags + + + i=5 + + + + i=14799 + + + + + + 0 + + PromotedField + + PromotedField + + + + + + + Variable_2 + + i=15577 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15577 + + + + + + PromotedField + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=14593 + + + 0 + ConfigurationVersionDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + MajorVersion + + i=20998 + + -1 + + 0 + false + + + MinorVersion + + i=20998 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15578 + + + 0 + PublishedDataSetDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + DataSetFolder + + i=12 + + 1 + + 0 + false + + + DataSetMetaData + + i=14523 + + -1 + + 0 + false + + + ExtensionFields + + i=14533 + + 1 + + 0 + false + + + DataSetSource + + i=22 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15580 + + + 0 + PublishedDataSetSourceDataType + + + i=22 + + true + + + DataType_64 + + i=14273 + + + 0 + PublishedVariableDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + PublishedVariable + + i=17 + + -1 + + 0 + false + + + AttributeId + + i=288 + + -1 + + 0 + false + + + SamplingIntervalHint + + i=290 + + -1 + + 0 + false + + + DeadbandType + + i=7 + + -1 + + 0 + false + + + DeadbandValue + + i=11 + + -1 + + 0 + false + + + IndexRange + + i=291 + + -1 + + 0 + false + + + SubstituteValue + + i=24 + + -1 + + 0 + false + + + MetaDataProperties + + i=20 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15581 + + + 0 + PublishedDataItemsDataType + + + i=15580 + + + + i=14798 + + + + + i=15580 + + Structure_0 + + + PublishedData + + i=14273 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15582 + + + 0 + PublishedEventsDataType + + + i=15580 + + + + i=14798 + + + + + i=15580 + + Structure_0 + + + EventNotifier + + i=17 + + -1 + + 0 + false + + + SelectedFields + + i=601 + + 1 + + 0 + false + + + Filter + + i=586 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15583 + + + 0 + DataSetFieldContentMask + + + i=7 + + + + i=14799 + + + + + + 0 + + StatusCode + + StatusCode + + + 1 + + SourceTimestamp + + SourceTimestamp + + + 2 + + ServerTimestamp + + ServerTimestamp + + + 3 + + SourcePicoSeconds + + SourcePicoSeconds + + + 4 + + ServerPicoSeconds + + ServerPicoSeconds + + + 5 + + RawData + + RawData + + + + + + + Variable_2 + + i=15584 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15584 + + + + + + StatusCode + + + + SourceTimestamp + + + + ServerTimestamp + + + + SourcePicoSeconds + + + + ServerPicoSeconds + + + + RawData + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15597 + + + 0 + DataSetWriterDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + DataSetWriterId + + i=5 + + -1 + + 0 + false + + + DataSetFieldContentMask + + i=15583 + + -1 + + 0 + false + + + KeyFrameCount + + i=7 + + -1 + + 0 + false + + + DataSetName + + i=12 + + -1 + + 0 + false + + + DataSetWriterProperties + + i=14533 + + 1 + + 0 + false + + + TransportSettings + + i=22 + + -1 + + 0 + false + + + MessageSettings + + i=22 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15598 + + + 0 + DataSetWriterTransportDataType + + + i=22 + + true + + + DataType_64 + + i=15605 + + + 0 + DataSetWriterMessageDataType + + + i=22 + + true + + + DataType_64 + + i=15609 + + + 0 + PubSubGroupDataType + + + i=22 + + true + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityGroupId + + i=12 + + -1 + + 0 + false + + + SecurityKeyServices + + i=312 + + 1 + + 0 + false + + + MaxNetworkMessageSize + + i=7 + + -1 + + 0 + false + + + GroupProperties + + i=14533 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15480 + + + 0 + WriterGroupDataType + + + i=15609 + + + + i=14798 + + + + + i=15609 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityGroupId + + i=12 + + -1 + + 0 + false + + + SecurityKeyServices + + i=312 + + 1 + + 0 + false + + + MaxNetworkMessageSize + + i=7 + + -1 + + 0 + false + + + GroupProperties + + i=14533 + + 1 + + 0 + false + + + WriterGroupId + + i=5 + + -1 + + 0 + false + + + PublishingInterval + + i=290 + + -1 + + 0 + false + + + KeepAliveTime + + i=290 + + -1 + + 0 + false + + + Priority + + i=3 + + -1 + + 0 + false + + + LocaleIds + + i=295 + + 1 + + 0 + false + + + HeaderLayoutUri + + i=12 + + -1 + + 0 + false + + + TransportSettings + + i=22 + + -1 + + 0 + false + + + MessageSettings + + i=22 + + -1 + + 0 + false + + + DataSetWriters + + i=15597 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15611 + + + 0 + WriterGroupTransportDataType + + + i=22 + + true + + + DataType_64 + + i=15616 + + + 0 + WriterGroupMessageDataType + + + i=22 + + true + + + DataType_64 + + i=15617 + + + 0 + PubSubConnectionDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + PublisherId + + i=24 + + -1 + + 0 + false + + + TransportProfileUri + + i=12 + + -1 + + 0 + false + + + Address + + i=22 + + -1 + + 0 + false + + + ConnectionProperties + + i=14533 + + 1 + + 0 + false + + + TransportSettings + + i=22 + + -1 + + 0 + false + + + WriterGroups + + i=15480 + + 1 + + 0 + false + + + ReaderGroups + + i=15520 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15618 + + + 0 + ConnectionTransportDataType + + + i=22 + + true + + + DataType_64 + + i=15502 + + + 0 + NetworkAddressDataType + + + i=22 + + true + + + i=14798 + + + + + i=22 + + Structure_0 + + + NetworkInterface + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15510 + + + 0 + NetworkAddressUrlDataType + + + i=15502 + + + + i=14798 + + + + + i=15502 + + Structure_0 + + + NetworkInterface + + i=12 + + -1 + + 0 + false + + + Url + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15520 + + + 0 + ReaderGroupDataType + + + i=15609 + + + + i=14798 + + + + + i=15609 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityGroupId + + i=12 + + -1 + + 0 + false + + + SecurityKeyServices + + i=312 + + 1 + + 0 + false + + + MaxNetworkMessageSize + + i=7 + + -1 + + 0 + false + + + GroupProperties + + i=14533 + + 1 + + 0 + false + + + TransportSettings + + i=22 + + -1 + + 0 + false + + + MessageSettings + + i=22 + + -1 + + 0 + false + + + DataSetReaders + + i=15623 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15621 + + + 0 + ReaderGroupTransportDataType + + + i=22 + + true + + + DataType_64 + + i=15622 + + + 0 + ReaderGroupMessageDataType + + + i=22 + + true + + + DataType_64 + + i=15623 + + + 0 + DataSetReaderDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + PublisherId + + i=24 + + -1 + + 0 + false + + + WriterGroupId + + i=5 + + -1 + + 0 + false + + + DataSetWriterId + + i=5 + + -1 + + 0 + false + + + DataSetMetaData + + i=14523 + + -1 + + 0 + false + + + DataSetFieldContentMask + + i=15583 + + -1 + + 0 + false + + + MessageReceiveTimeout + + i=290 + + -1 + + 0 + false + + + KeyFrameCount + + i=7 + + -1 + + 0 + false + + + HeaderLayoutUri + + i=12 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityGroupId + + i=12 + + -1 + + 0 + false + + + SecurityKeyServices + + i=312 + + 1 + + 0 + false + + + DataSetReaderProperties + + i=14533 + + 1 + + 0 + false + + + TransportSettings + + i=22 + + -1 + + 0 + false + + + MessageSettings + + i=22 + + -1 + + 0 + false + + + SubscribedDataSet + + i=22 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15628 + + + 0 + DataSetReaderTransportDataType + + + i=22 + + true + + + DataType_64 + + i=15629 + + + 0 + DataSetReaderMessageDataType + + + i=22 + + true + + + DataType_64 + + i=15630 + + + 0 + SubscribedDataSetDataType + + + i=22 + + true + + + DataType_64 + + i=15631 + + + 0 + TargetVariablesDataType + + + i=15630 + + + + i=14798 + + + + + i=15630 + + Structure_0 + + + TargetVariables + + i=14744 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=14744 + + + 0 + FieldTargetDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + DataSetFieldId + + i=14 + + -1 + + 0 + false + + + ReceiverIndexRange + + i=291 + + -1 + + 0 + false + + + TargetNodeId + + i=17 + + -1 + + 0 + false + + + AttributeId + + i=288 + + -1 + + 0 + false + + + WriteIndexRange + + i=291 + + -1 + + 0 + false + + + OverrideValueHandling + + i=15874 + + -1 + + 0 + false + + + OverrideValue + + i=24 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15874 + + + 0 + OverrideValueHandling + + + i=29 + + + + i=14799 + + + + + + 0 + + Disabled + + Disabled + + + 1 + + LastUsableValue + + LastUsableValue + + + 2 + + OverrideValue + + OverrideValue + + + + + + + Variable_2 + + i=15875 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 15875 + + + + + + Disabled + + + + LastUsableValue + + + + OverrideValue + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15635 + + + 0 + SubscribedDataSetMirrorDataType + + + i=15630 + + + + i=14798 + + + + + i=15630 + + Structure_0 + + + ParentNodeName + + i=12 + + -1 + + 0 + false + + + RolePermissions + + i=96 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15530 + + + 0 + PubSubConfigurationDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + PublishedDataSets + + i=15578 + + 1 + + 0 + false + + + Connections + + i=15617 + + 1 + + 0 + false + + + Enabled + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=20408 + + + 0 + DataSetOrderingType + + + i=29 + + + + i=14799 + + + + + + 0 + + Undefined + + Undefined + + + 1 + + AscendingWriterId + + AscendingWriterId + + + 2 + + AscendingWriterIdSingle + + AscendingWriterIdSingle + + + + + + + Variable_2 + + i=15641 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 15641 + + + + + + Undefined + + + + AscendingWriterId + + + + AscendingWriterIdSingle + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15642 + + + 0 + UadpNetworkMessageContentMask + + + i=7 + + + + i=14799 + + + + + + 0 + + PublisherId + + PublisherId + + + 1 + + GroupHeader + + GroupHeader + + + 2 + + WriterGroupId + + WriterGroupId + + + 3 + + GroupVersion + + GroupVersion + + + 4 + + NetworkMessageNumber + + NetworkMessageNumber + + + 5 + + SequenceNumber + + SequenceNumber + + + 6 + + PayloadHeader + + PayloadHeader + + + 7 + + Timestamp + + Timestamp + + + 8 + + PicoSeconds + + PicoSeconds + + + 9 + + DataSetClassId + + DataSetClassId + + + 10 + + PromotedFields + + PromotedFields + + + + + + + Variable_2 + + i=15643 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15643 + + + + + + PublisherId + + + + GroupHeader + + + + WriterGroupId + + + + GroupVersion + + + + NetworkMessageNumber + + + + SequenceNumber + + + + PayloadHeader + + + + Timestamp + + + + PicoSeconds + + + + DataSetClassId + + + + PromotedFields + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15645 + + + 0 + UadpWriterGroupMessageDataType + + + i=15616 + + + + i=14798 + + + + + i=15616 + + Structure_0 + + + GroupVersion + + i=20998 + + -1 + + 0 + false + + + DataSetOrdering + + i=20408 + + -1 + + 0 + false + + + NetworkMessageContentMask + + i=15642 + + -1 + + 0 + false + + + SamplingOffset + + i=290 + + -1 + + 0 + false + + + PublishingOffset + + i=290 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=15646 + + + 0 + UadpDataSetMessageContentMask + + + i=7 + + + + i=14799 + + + + + + 0 + + Timestamp + + Timestamp + + + 1 + + PicoSeconds + + PicoSeconds + + + 2 + + Status + + Status + + + 3 + + MajorVersion + + MajorVersion + + + 4 + + MinorVersion + + MinorVersion + + + 5 + + SequenceNumber + + SequenceNumber + + + + + + + Variable_2 + + i=15647 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15647 + + + + + + Timestamp + + + + PicoSeconds + + + + Status + + + + MajorVersion + + + + MinorVersion + + + + SequenceNumber + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15652 + + + 0 + UadpDataSetWriterMessageDataType + + + i=15605 + + + + i=14798 + + + + + i=15605 + + Structure_0 + + + DataSetMessageContentMask + + i=15646 + + -1 + + 0 + false + + + ConfiguredSize + + i=5 + + -1 + + 0 + false + + + NetworkMessageNumber + + i=5 + + -1 + + 0 + false + + + DataSetOffset + + i=5 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15653 + + + 0 + UadpDataSetReaderMessageDataType + + + i=15629 + + + + i=14798 + + + + + i=15629 + + Structure_0 + + + GroupVersion + + i=20998 + + -1 + + 0 + false + + + NetworkMessageNumber + + i=5 + + -1 + + 0 + false + + + DataSetOffset + + i=5 + + -1 + + 0 + false + + + DataSetClassId + + i=14 + + -1 + + 0 + false + + + NetworkMessageContentMask + + i=15642 + + -1 + + 0 + false + + + DataSetMessageContentMask + + i=15646 + + -1 + + 0 + false + + + PublishingInterval + + i=290 + + -1 + + 0 + false + + + ReceiveOffset + + i=290 + + -1 + + 0 + false + + + ProcessingOffset + + i=290 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15654 + + + 0 + JsonNetworkMessageContentMask + + + i=7 + + + + i=14799 + + + + + + 0 + + NetworkMessageHeader + + NetworkMessageHeader + + + 1 + + DataSetMessageHeader + + DataSetMessageHeader + + + 2 + + SingleDataSetMessage + + SingleDataSetMessage + + + 3 + + PublisherId + + PublisherId + + + 4 + + DataSetClassId + + DataSetClassId + + + 5 + + ReplyTo + + ReplyTo + + + + + + + Variable_2 + + i=15655 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15655 + + + + + + NetworkMessageHeader + + + + DataSetMessageHeader + + + + SingleDataSetMessage + + + + PublisherId + + + + DataSetClassId + + + + ReplyTo + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15657 + + + 0 + JsonWriterGroupMessageDataType + + + i=15616 + + + + i=14798 + + + + + i=15616 + + Structure_0 + + + NetworkMessageContentMask + + i=15654 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15658 + + + 0 + JsonDataSetMessageContentMask + + + i=7 + + + + i=14799 + + + + + + 0 + + DataSetWriterId + + DataSetWriterId + + + 1 + + MetaDataVersion + + MetaDataVersion + + + 2 + + SequenceNumber + + SequenceNumber + + + 3 + + Timestamp + + Timestamp + + + 4 + + Status + + Status + + + + + + + Variable_2 + + i=15659 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15659 + + + + + + DataSetWriterId + + + + MetaDataVersion + + + + SequenceNumber + + + + Timestamp + + + + Status + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15664 + + + 0 + JsonDataSetWriterMessageDataType + + + i=15605 + + + + i=14798 + + + + + i=15605 + + Structure_0 + + + DataSetMessageContentMask + + i=15658 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15665 + + + 0 + JsonDataSetReaderMessageDataType + + + i=15629 + + + + i=14798 + + + + + i=15629 + + Structure_0 + + + NetworkMessageContentMask + + i=15654 + + -1 + + 0 + false + + + DataSetMessageContentMask + + i=15658 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=17467 + + + 0 + DatagramConnectionTransportDataType + + + i=15618 + + + + i=14798 + + + + + i=15618 + + Structure_0 + + + DiscoveryAddress + + i=22 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15532 + + + 0 + DatagramWriterGroupTransportDataType + + + i=15611 + + + + i=14798 + + + + + i=15611 + + Structure_0 + + + MessageRepeatCount + + i=3 + + -1 + + 0 + false + + + MessageRepeatDelay + + i=290 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15007 + + + 0 + BrokerConnectionTransportDataType + + + i=15618 + + + + i=14798 + + + + + i=15618 + + Structure_0 + + + ResourceUri + + i=12 + + -1 + + 0 + false + + + AuthenticationProfileUri + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15008 + + + 0 + BrokerTransportQualityOfService + + + i=29 + + + + i=14799 + + + + + + 0 + + NotSpecified + + NotSpecified + + + 1 + + BestEffort + + BestEffort + + + 2 + + AtLeastOnce + + AtLeastOnce + + + 3 + + AtMostOnce + + AtMostOnce + + + 4 + + ExactlyOnce + + ExactlyOnce + + + + + + + Variable_2 + + i=15009 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 15009 + + + + + + NotSpecified + + + + BestEffort + + + + AtLeastOnce + + + + AtMostOnce + + + + ExactlyOnce + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15667 + + + 0 + BrokerWriterGroupTransportDataType + + + i=15611 + + + + i=14798 + + + + + i=15611 + + Structure_0 + + + QueueName + + i=12 + + -1 + + 0 + false + + + ResourceUri + + i=12 + + -1 + + 0 + false + + + AuthenticationProfileUri + + i=12 + + -1 + + 0 + false + + + RequestedDeliveryGuarantee + + i=15008 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15669 + + + 0 + BrokerDataSetWriterTransportDataType + + + i=15598 + + + + i=14798 + + + + + i=15598 + + Structure_0 + + + QueueName + + i=12 + + -1 + + 0 + false + + + ResourceUri + + i=12 + + -1 + + 0 + false + + + AuthenticationProfileUri + + i=12 + + -1 + + 0 + false + + + RequestedDeliveryGuarantee + + i=15008 + + -1 + + 0 + false + + + MetaDataQueueName + + i=12 + + -1 + + 0 + false + + + MetaDataUpdateTime + + i=290 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15670 + + + 0 + BrokerDataSetReaderTransportDataType + + + i=15628 + + + + i=14798 + + + + + i=15628 + + Structure_0 + + + QueueName + + i=12 + + -1 + + 0 + false + + + ResourceUri + + i=12 + + -1 + + 0 + false + + + AuthenticationProfileUri + + i=12 + + -1 + + 0 + false + + + RequestedDeliveryGuarantee + + i=15008 + + -1 + + 0 + false + + + MetaDataQueueName + + i=12 + + -1 + + 0 + false + + + + + + + + ObjectType_8 + + i=15906 + + + 0 + PubSubKeyServiceType + + + i=58 + + + Method_4 + + i=15907 + + + 0 + GetSecurityKeys + + + i=47 + + + i=15907 + + + i=80 + + 15907 + true + true + + Variable_2 + + i=15908 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15908 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15909 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15909 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15910 + + + 0 + GetSecurityGroup + + + i=47 + + + i=15910 + + + i=80 + + 15910 + true + true + + Variable_2 + + i=15911 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15911 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15912 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15912 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=15913 + + + 0 + SecurityGroups + + + i=47 + + + i=15452 + + + i=80 + + 15913 + + Method_4 + + i=15914 + + + 0 + AddSecurityGroup + + + i=47 + + + i=15461 + + + i=78 + + 15914 + true + true + + Variable_2 + + i=15915 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15915 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15916 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15916 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15917 + + + 0 + RemoveSecurityGroup + + + i=47 + + + i=15464 + + + i=78 + + 15917 + true + true + + Variable_2 + + i=15918 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15918 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + + ObjectType_8 + + i=15452 + + + 0 + SecurityGroupFolderType + + + i=61 + + + Object_1 + + i=15453 + + + 0 + <SecurityGroupFolderName> + + + i=35 + + + i=15452 + + + i=11508 + + 15453 + + Method_4 + + i=15454 + + + 0 + AddSecurityGroup + + + i=47 + + + i=15461 + + + i=78 + + 15454 + true + true + + Variable_2 + + i=15455 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15455 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15456 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15456 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15457 + + + 0 + RemoveSecurityGroup + + + i=47 + + + i=15464 + + + i=78 + + 15457 + true + true + + Variable_2 + + i=15458 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15458 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=15459 + + + 0 + <SecurityGroupName> + + + i=47 + + + i=15471 + + + i=11508 + + 15459 + + Variable_2 + + i=15460 + + + 0 + SecurityGroupId + + + i=46 + + + i=68 + + + i=78 + + 15460 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15010 + + + 0 + KeyLifetime + + + i=46 + + + i=68 + + + i=78 + + 15010 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=15011 + + + 0 + SecurityPolicyUri + + + i=46 + + + i=68 + + + i=78 + + 15011 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15012 + + + 0 + MaxFutureKeyCount + + + i=46 + + + i=68 + + + i=78 + + 15012 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=15043 + + + 0 + MaxPastKeyCount + + + i=46 + + + i=68 + + + i=78 + + 15043 + + i=7 + + -1 + 1 + 1 + + + + Method_4 + + i=15461 + + + 0 + AddSecurityGroup + + + i=47 + + + i=15461 + + + i=78 + + 15461 + true + true + + Variable_2 + + i=15462 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15462 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15463 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15463 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15464 + + + 0 + RemoveSecurityGroup + + + i=47 + + + i=15464 + + + i=78 + + 15464 + true + true + + Variable_2 + + i=15465 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15465 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=15471 + + + 0 + SecurityGroupType + + + i=58 + + + Variable_2 + + i=15472 + + + 0 + SecurityGroupId + + + i=46 + + + i=68 + + + i=78 + + 15472 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15046 + + + 0 + KeyLifetime + + + i=46 + + + i=68 + + + i=78 + + 15046 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=15047 + + + 0 + SecurityPolicyUri + + + i=46 + + + i=68 + + + i=78 + + 15047 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15048 + + + 0 + MaxFutureKeyCount + + + i=46 + + + i=68 + + + i=78 + + 15048 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=15056 + + + 0 + MaxPastKeyCount + + + i=46 + + + i=68 + + + i=78 + + 15056 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=14416 + + + 0 + PublishSubscribeType + + + i=15906 + + + Object_1 + + i=14417 + + + 0 + <ConnectionName> + + + i=14476 + + + i=14209 + + + i=11508 + + 14417 + + Variable_2 + + i=14418 + + + 0 + PublisherId + + + i=46 + + + i=68 + + + i=78 + + 14418 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=17292 + + + 0 + TransportProfileUri + + + i=47 + + + i=16309 + + + i=78 + + 17292 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=17706 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17706 + + i=24 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=17478 + + + 0 + ConnectionProperties + + + i=46 + + + i=68 + + + i=78 + + 17478 + + i=14533 + + 1 + 0 + 1 + 1 + +
+ Object_1 + + i=14423 + + + 0 + Address + + + i=47 + + + i=21145 + + + i=78 + + 14423 + + Variable_2 + + i=15533 + + + 0 + NetworkInterface + + + i=47 + + + i=16309 + + + i=78 + + 15533 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=17503 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17503 + + i=24 + + 1 + 0 + 1 + 1 + + +
+ + Object_1 + + i=14419 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 14419 + + Variable_2 + + i=14420 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 14420 + + i=14647 + + -1 + 1 + 1 + + +
+ + Method_4 + + i=17296 + + + 0 + SetSecurityKeys + + + i=47 + + + i=17296 + + + i=80 + + 17296 + true + true + + Variable_2 + + i=17297 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17297 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16598 + + + 0 + AddConnection + + + i=47 + + + i=16598 + + + i=80 + + 16598 + true + true + + Variable_2 + + i=16599 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16599 + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16600 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16600 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14432 + + + 0 + RemoveConnection + + + i=47 + + + i=14432 + + + i=80 + + 14432 + true + true + + Variable_2 + + i=14433 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14433 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=14434 + + + 0 + PublishedDataSets + + + i=47 + + + i=14477 + + + i=78 + + 14434 + + + Object_1 + + i=15844 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 15844 + + Variable_2 + + i=15845 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 15845 + + i=14647 + + -1 + 1 + 1 + + + + Object_1 + + i=18715 + + + 0 + Diagnostics + + + i=47 + + + i=19732 + + + i=80 + + 18715 + + Variable_2 + + i=18716 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 18716 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=18717 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 18717 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18718 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18718 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18719 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18719 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18720 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18720 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18722 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 18722 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18723 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18723 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18724 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18724 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18725 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18725 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=18727 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 18727 + true + true + + + Variable_2 + + i=18728 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 18728 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=18729 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 18729 + + Variable_2 + + i=18730 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 18730 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18731 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18731 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18732 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18732 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18733 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18733 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18735 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 18735 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18736 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18736 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18737 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18737 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18738 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18738 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18740 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 18740 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18741 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18741 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18742 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18742 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18743 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18743 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18745 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 18745 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18746 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18746 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18747 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18747 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18748 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18748 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18750 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 18750 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18751 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18751 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18752 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18752 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18753 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18753 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18755 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 18755 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=18756 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 18756 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=18757 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 18757 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=18758 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18758 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=18760 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 18760 + + Variable_2 + + i=18761 + + + 0 + ConfiguredDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 18761 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=18762 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18762 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18763 + + + 0 + ConfiguredDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 18763 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=18764 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18764 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18765 + + + 0 + OperationalDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 18765 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=18766 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18766 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=18767 + + + 0 + OperationalDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 18767 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=18768 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 18768 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + Variable_2 + + i=17479 + + + 0 + SupportedTransportProfiles + + + i=46 + + + i=68 + + + i=78 + + 17479 + + i=12 + + 1 + 0 + 1 + 1 + +
+ + Object_1 + + i=14443 + + + 0 + PublishSubscribe + + + i=47 + + + i=14416 + + 14443 + + + + i=47 + + true + + i=2253 + + + + + Method_4 + + i=15215 + + + 0 + GetSecurityKeys + + + i=47 + + + i=15907 + + 15215 + true + true + + Variable_2 + + i=15216 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15216 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15217 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 15217 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15440 + + + 0 + GetSecurityGroup + + + i=47 + + + i=15910 + + 15440 + true + true + + Variable_2 + + i=15441 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15441 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15442 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 15442 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=15443 + + + 0 + SecurityGroups + + + i=47 + + + i=15452 + + 15443 + + Method_4 + + i=15444 + + + 0 + AddSecurityGroup + + + i=47 + + + i=15461 + + 15444 + true + true + + Variable_2 + + i=15445 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15445 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15446 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 15446 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15447 + + + 0 + RemoveSecurityGroup + + + i=47 + + + i=15464 + + 15447 + true + true + + Variable_2 + + i=15448 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 15448 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Method_4 + + i=17366 + + + 0 + AddConnection + + + i=47 + + + i=16598 + + 17366 + true + true + + Variable_2 + + i=17367 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 17367 + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17368 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 17368 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=17369 + + + 0 + RemoveConnection + + + i=47 + + + i=14432 + + 17369 + true + true + + Variable_2 + + i=17370 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 17370 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=17371 + + + 0 + PublishedDataSets + + + i=47 + + + i=14477 + + 17371 + + + Object_1 + + i=17405 + + + 0 + Status + + + i=47 + + + i=14643 + + 17405 + + Variable_2 + + i=17406 + + + 0 + State + + + i=47 + + + i=63 + + 17406 + + i=14647 + + -1 + 1 + 1 + + + + Object_1 + + i=17409 + + + 0 + Diagnostics + + + i=47 + + + i=19732 + + 17409 + + Variable_2 + + i=17410 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + 17410 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=17411 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + 17411 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17412 + + + 0 + Active + + + i=46 + + + i=68 + + 17412 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17413 + + + 0 + Classification + + + i=46 + + + i=68 + + 17413 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17414 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17414 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17416 + + + 0 + TotalError + + + i=47 + + + i=19725 + + 17416 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17417 + + + 0 + Active + + + i=46 + + + i=68 + + 17417 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17418 + + + 0 + Classification + + + i=46 + + + i=68 + + 17418 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17419 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17419 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=17421 + + + 0 + Reset + + + i=47 + + + i=19689 + + 17421 + true + true + + + Variable_2 + + i=17422 + + + 0 + SubError + + + i=47 + + + i=63 + + 17422 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=17423 + + + 0 + Counters + + + i=47 + + + i=58 + + 17423 + + Variable_2 + + i=17424 + + + 0 + StateError + + + i=47 + + + i=19725 + + 17424 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17425 + + + 0 + Active + + + i=46 + + + i=68 + + 17425 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17426 + + + 0 + Classification + + + i=46 + + + i=68 + + 17426 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17429 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17429 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17431 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + 17431 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17432 + + + 0 + Active + + + i=46 + + + i=68 + + 17432 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17433 + + + 0 + Classification + + + i=46 + + + i=68 + + 17433 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17434 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17434 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17436 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + 17436 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17437 + + + 0 + Active + + + i=46 + + + i=68 + + 17437 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17438 + + + 0 + Classification + + + i=46 + + + i=68 + + 17438 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17439 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17439 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17441 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + 17441 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17442 + + + 0 + Active + + + i=46 + + + i=68 + + 17442 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17443 + + + 0 + Classification + + + i=46 + + + i=68 + + 17443 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17444 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17444 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17446 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + 17446 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17447 + + + 0 + Active + + + i=46 + + + i=68 + + 17447 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17448 + + + 0 + Classification + + + i=46 + + + i=68 + + 17448 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17449 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17449 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17451 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + 17451 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17452 + + + 0 + Active + + + i=46 + + + i=68 + + 17452 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17453 + + + 0 + Classification + + + i=46 + + + i=68 + + 17453 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17454 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17454 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=17457 + + + 0 + LiveValues + + + i=47 + + + i=58 + + 17457 + + Variable_2 + + i=17458 + + + 0 + ConfiguredDataSetWriters + + + i=47 + + + i=63 + + 17458 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=17459 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17459 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17460 + + + 0 + ConfiguredDataSetReaders + + + i=47 + + + i=63 + + 17460 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=17461 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17461 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17462 + + + 0 + OperationalDataSetWriters + + + i=47 + + + i=63 + + 17462 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=17463 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17463 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17464 + + + 0 + OperationalDataSetReaders + + + i=47 + + + i=63 + + 17464 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=17466 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + 17466 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + Variable_2 + + i=17481 + + + 0 + SupportedTransportProfiles + + + i=46 + + + i=68 + + 17481 + + i=12 + + 1 + 0 + 1 + 1 + + + + ReferenceType_32 + + i=14476 + + + 0 + HasPubSubConnection + + + i=47 + + + + PubSubConnectionOf + + + + ObjectType_8 + + i=14509 + + + 0 + PublishedDataSetType + + + i=58 + + + Object_1 + + i=15222 + + + 0 + <DataSetWriterName> + + + i=14936 + + + i=15298 + + + i=11508 + + 15222 + + Variable_2 + + i=16720 + + + 0 + DataSetWriterId + + + i=46 + + + i=68 + + + i=78 + + 16720 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=16721 + + + 0 + DataSetFieldContentMask + + + i=46 + + + i=68 + + + i=78 + + 16721 + + i=15583 + + -1 + 1 + 1 + + + Variable_2 + + i=17482 + + + 0 + DataSetWriterProperties + + + i=46 + + + i=68 + + + i=78 + + 17482 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=15223 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 15223 + + Variable_2 + + i=15224 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 15224 + + i=14647 + + -1 + 1 + 1 + + + + + Variable_2 + + i=14519 + + + 0 + ConfigurationVersion + + + i=46 + + + i=68 + + + i=78 + + 14519 + + i=14593 + + -1 + 1 + 1 + + + Variable_2 + + i=15229 + + + 0 + DataSetMetaData + + + i=46 + + + i=68 + + + i=78 + + 15229 + + i=14523 + + -1 + 1 + 1 + + + Variable_2 + + i=16759 + + + 0 + DataSetClassId + + + i=46 + + + i=68 + + + i=80 + + 16759 + + i=14 + + -1 + 1 + 1 + + + Object_1 + + i=15481 + + + 0 + ExtensionFields + + + i=47 + + + i=15489 + + + i=80 + + 15481 + + Method_4 + + i=15482 + + + 0 + AddExtensionField + + + i=47 + + + i=15491 + + + i=78 + + 15482 + true + true + + Variable_2 + + i=15483 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15483 + + + + + + i=297 + + + + FieldName + + i=20 + + -1 + + + + + + + i=297 + + + + FieldValue + + i=24 + + -2 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15484 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15484 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15485 + + + 0 + RemoveExtensionField + + + i=47 + + + i=15494 + + + i=78 + + 15485 + true + true + + Variable_2 + + i=15486 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15486 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + + ObjectType_8 + + i=15489 + + + 0 + ExtensionFieldsType + + + i=58 + + + Variable_2 + + i=15490 + + + 0 + <ExtensionFieldName> + + + i=46 + + + i=68 + + + i=11508 + + 15490 + + i=24 + + -1 + 1 + 1 + + + Method_4 + + i=15491 + + + 0 + AddExtensionField + + + i=47 + + + i=15491 + + + i=78 + + 15491 + true + true + + Variable_2 + + i=15492 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15492 + + + + + + i=297 + + + + FieldName + + i=20 + + -1 + + + + + + + i=297 + + + + FieldValue + + i=24 + + -2 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15493 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15493 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15494 + + + 0 + RemoveExtensionField + + + i=47 + + + i=15494 + + + i=78 + + 15494 + true + true + + Variable_2 + + i=15495 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15495 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ReferenceType_32 + + i=14936 + + + 0 + DataSetToWriter + + + i=33 + + + + WriterToDataSet + + + + ObjectType_8 + + i=14534 + + + 0 + PublishedDataItemsType + + + i=14509 + + + Variable_2 + + i=14548 + + + 0 + PublishedData + + + i=46 + + + i=68 + + + i=78 + + 14548 + + i=14273 + + 1 + 0 + 1 + 1 + + + Method_4 + + i=14555 + + + 0 + AddVariables + + + i=47 + + + i=14555 + + + i=80 + + 14555 + true + true + + Variable_2 + + i=14556 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14556 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14557 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 14557 + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14558 + + + 0 + RemoveVariables + + + i=47 + + + i=14558 + + + i=80 + + 14558 + true + true + + Variable_2 + + i=14559 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14559 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + VariablesToRemove + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14560 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 14560 + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + RemoveResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=14572 + + + 0 + PublishedEventsType + + + i=14509 + + + Variable_2 + + i=14586 + + + 0 + EventNotifier + + + i=46 + + + i=68 + + + i=78 + + 14586 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=14587 + + + 0 + SelectedFields + + + i=46 + + + i=68 + + + i=78 + + 14587 + + i=601 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14588 + + + 0 + Filter + + + i=46 + + + i=68 + + + i=78 + + 14588 + + i=586 + + -1 + 1 + 1 + + + Method_4 + + i=15052 + + + 0 + ModifyFieldSelection + + + i=47 + + + i=15052 + + + i=80 + + 15052 + true + true + + Variable_2 + + i=15053 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15053 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15517 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15517 + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=14477 + + + 0 + DataSetFolderType + + + i=61 + + + Object_1 + + i=14478 + + + 0 + <DataSetFolderName> + + + i=35 + + + i=14477 + + + i=11508 + + 14478 + + Method_4 + + i=14479 + + + 0 + AddPublishedDataItems + + + i=47 + + + i=14493 + + + i=80 + + 14479 + true + true + + Variable_2 + + i=14480 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14480 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14481 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 14481 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14482 + + + 0 + AddPublishedEvents + + + i=47 + + + i=14496 + + + i=80 + + 14482 + true + true + + Variable_2 + + i=14483 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14483 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14484 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 14484 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16842 + + + 0 + AddPublishedDataItemsTemplate + + + i=47 + + + i=16935 + + + i=80 + + 16842 + true + true + + Variable_2 + + i=16843 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16843 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16853 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16853 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16881 + + + 0 + AddPublishedEventsTemplate + + + i=47 + + + i=16960 + + + i=80 + + 16881 + true + true + + Variable_2 + + i=16882 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16882 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16883 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16883 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14485 + + + 0 + RemovePublishedDataSet + + + i=47 + + + i=14499 + + + i=80 + + 14485 + true + true + + Variable_2 + + i=14486 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14486 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16884 + + + 0 + AddDataSetFolder + + + i=47 + + + i=16994 + + + i=80 + + 16884 + true + true + + Variable_2 + + i=16894 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16894 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16922 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16922 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16923 + + + 0 + RemoveDataSetFolder + + + i=47 + + + i=16997 + + + i=80 + + 16923 + true + true + + Variable_2 + + i=16924 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16924 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=14487 + + + 0 + <PublishedDataSetName> + + + i=47 + + + i=14509 + + + i=11508 + + 14487 + + Variable_2 + + i=14489 + + + 0 + ConfigurationVersion + + + i=46 + + + i=68 + + + i=78 + + 14489 + + i=14593 + + -1 + 1 + 1 + + + Variable_2 + + i=15221 + + + 0 + DataSetMetaData + + + i=46 + + + i=68 + + + i=78 + + 15221 + + i=14523 + + -1 + 1 + 1 + + + + Method_4 + + i=14493 + + + 0 + AddPublishedDataItems + + + i=47 + + + i=14493 + + + i=80 + + 14493 + true + true + + Variable_2 + + i=14494 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14494 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14495 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 14495 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14496 + + + 0 + AddPublishedEvents + + + i=47 + + + i=14496 + + + i=80 + + 14496 + true + true + + Variable_2 + + i=14497 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14497 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=14498 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 14498 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16935 + + + 0 + AddPublishedDataItemsTemplate + + + i=47 + + + i=16935 + + + i=80 + + 16935 + true + true + + Variable_2 + + i=16958 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16958 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16959 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16959 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16960 + + + 0 + AddPublishedEventsTemplate + + + i=47 + + + i=16960 + + + i=80 + + 16960 + true + true + + Variable_2 + + i=16961 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16961 + + + + + + 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 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16971 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16971 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14499 + + + 0 + RemovePublishedDataSet + + + i=47 + + + i=14499 + + + i=80 + + 14499 + true + true + + Variable_2 + + i=14500 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14500 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16994 + + + 0 + AddDataSetFolder + + + i=47 + + + i=16994 + + + i=80 + + 16994 + true + true + + Variable_2 + + i=16995 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 16995 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=16996 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 16996 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=16997 + + + 0 + RemoveDataSetFolder + + + i=47 + + + i=16997 + + + i=80 + + 16997 + true + true + + Variable_2 + + i=17007 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17007 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=14209 + + + 0 + PubSubConnectionType + + + i=58 + + + Variable_2 + + i=14595 + + + 0 + PublisherId + + + i=46 + + + i=68 + + + i=78 + + 14595 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=17306 + + + 0 + TransportProfileUri + + + i=47 + + + i=16309 + + + i=78 + + 17306 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=17710 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17710 + + i=24 + + 1 + 0 + 1 + 1 + + + + Variable_2 + + i=17485 + + + 0 + ConnectionProperties + + + i=46 + + + i=68 + + + i=78 + + 17485 + + i=14533 + + 1 + 0 + 1 + 1 + +
+ Object_1 + + i=14221 + + + 0 + Address + + + i=47 + + + i=21145 + + + i=78 + + 14221 + + Variable_2 + + i=17202 + + + 0 + NetworkInterface + + + i=47 + + + i=16309 + + + i=78 + + 17202 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=17576 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17576 + + i=24 + + 1 + 0 + 1 + 1 + + +
+ + Object_1 + + i=17203 + + + 0 + TransportSettings + + + i=47 + + + i=17721 + + + i=80 + + 17203 + + + Object_1 + + i=17310 + + + 0 + <WriterGroupName> + + + i=18804 + + + i=17725 + + + i=11508 + + 17310 + + Variable_2 + + i=17311 + + + 0 + SecurityMode + + + i=46 + + + i=68 + + + i=78 + + 17311 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=17204 + + + 0 + MaxNetworkMessageSize + + + i=46 + + + i=68 + + + i=78 + + 17204 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17486 + + + 0 + GroupProperties + + + i=46 + + + i=68 + + + i=78 + + 17486 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=17314 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 17314 + + Variable_2 + + i=17315 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 17315 + + i=14647 + + -1 + 1 + 1 + + + + Variable_2 + + i=17214 + + + 0 + WriterGroupId + + + i=46 + + + i=68 + + + i=78 + + 17214 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=17318 + + + 0 + PublishingInterval + + + i=46 + + + i=68 + + + i=78 + + 17318 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17319 + + + 0 + KeepAliveTime + + + i=46 + + + i=68 + + + i=78 + + 17319 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17321 + + + 0 + Priority + + + i=46 + + + i=68 + + + i=78 + + 17321 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=17322 + + + 0 + LocaleIds + + + i=46 + + + i=68 + + + i=78 + + 17322 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17558 + + + 0 + HeaderLayoutUri + + + i=46 + + + i=68 + + + i=78 + + 17558 + + i=12 + + -1 + 1 + 1 + + + + Object_1 + + i=17325 + + + 0 + <ReaderGroupName> + + + i=18805 + + + i=17999 + + + i=11508 + + 17325 + + Variable_2 + + i=17326 + + + 0 + SecurityMode + + + i=46 + + + i=68 + + + i=78 + + 17326 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=17302 + + + 0 + MaxNetworkMessageSize + + + i=46 + + + i=68 + + + i=78 + + 17302 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17487 + + + 0 + GroupProperties + + + i=46 + + + i=68 + + + i=78 + + 17487 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=17329 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 17329 + + Variable_2 + + i=17330 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 17330 + + i=14647 + + -1 + 1 + 1 + + + + + Object_1 + + i=14600 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 14600 + + Variable_2 + + i=14601 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 14601 + + i=14647 + + -1 + 1 + 1 + + + + Object_1 + + i=19241 + + + 0 + Diagnostics + + + i=47 + + + i=19786 + + + i=80 + + 19241 + + Variable_2 + + i=19242 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 19242 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=19243 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 19243 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19244 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19244 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19245 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19245 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19246 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19246 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19248 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 19248 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19249 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19249 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19250 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19250 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19251 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19251 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=19253 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 19253 + true + true + + + Variable_2 + + i=19254 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 19254 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=19255 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19255 + + Variable_2 + + i=19256 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 19256 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19257 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19257 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19258 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19258 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19259 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19259 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19261 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19261 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19262 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19262 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19263 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19263 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19264 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19264 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19266 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 19266 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19267 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19267 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19268 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19268 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19269 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19269 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19271 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 19271 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19272 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19272 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19273 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19273 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19274 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19274 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19276 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 19276 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19277 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19277 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19278 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19278 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19279 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19279 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19281 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19281 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19282 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19282 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19283 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19283 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19284 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19284 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=19286 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19286 + + Variable_2 + + i=19287 + + + 0 + ResolvedAddress + + + i=47 + + + i=63 + + + i=78 + + 19287 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=19288 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19288 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + Method_4 + + i=17427 + + + 0 + AddWriterGroup + + + i=47 + + + i=17427 + + + i=80 + + 17427 + true + true + + Variable_2 + + i=17428 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17428 + + + + + + i=297 + + + + Configuration + + i=15480 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17456 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17456 + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=17465 + + + 0 + AddReaderGroup + + + i=47 + + + i=17465 + + + i=80 + + 17465 + true + true + + Variable_2 + + i=17507 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17507 + + + + + + i=297 + + + + Configuration + + i=15520 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17508 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17508 + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=14225 + + + 0 + RemoveGroup + + + i=47 + + + i=14225 + + + i=80 + + 14225 + true + true + + Variable_2 + + i=14226 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 14226 + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + +
+ + ObjectType_8 + + i=17721 + + + 0 + ConnectionTransportType + + + i=58 + + true + + + ObjectType_8 + + i=14232 + + + 0 + PubSubGroupType + + + i=58 + + true + + Variable_2 + + i=15926 + + + 0 + SecurityMode + + + i=46 + + + i=68 + + + i=78 + + 15926 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=15927 + + + 0 + SecurityGroupId + + + i=46 + + + i=68 + + + i=80 + + 15927 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15928 + + + 0 + SecurityKeyServices + + + i=46 + + + i=68 + + + i=80 + + 15928 + + i=312 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17724 + + + 0 + MaxNetworkMessageSize + + + i=46 + + + i=68 + + + i=78 + + 17724 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17488 + + + 0 + GroupProperties + + + i=46 + + + i=68 + + + i=78 + + 17488 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=15265 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 15265 + + Variable_2 + + i=15266 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 15266 + + i=14647 + + -1 + 1 + 1 + + + + + ObjectType_8 + + i=17725 + + + 0 + WriterGroupType + + + i=14232 + + + Variable_2 + + i=17736 + + + 0 + WriterGroupId + + + i=46 + + + i=68 + + + i=78 + + 17736 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=17737 + + + 0 + PublishingInterval + + + i=46 + + + i=68 + + + i=78 + + 17737 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17738 + + + 0 + KeepAliveTime + + + i=46 + + + i=68 + + + i=78 + + 17738 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17739 + + + 0 + Priority + + + i=46 + + + i=68 + + + i=78 + + 17739 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=17740 + + + 0 + LocaleIds + + + i=46 + + + i=68 + + + i=78 + + 17740 + + i=295 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17559 + + + 0 + HeaderLayoutUri + + + i=46 + + + i=68 + + + i=78 + + 17559 + + i=12 + + -1 + 1 + 1 + + + Object_1 + + i=17741 + + + 0 + TransportSettings + + + i=47 + + + i=17997 + + + i=80 + + 17741 + + + Object_1 + + i=17742 + + + 0 + MessageSettings + + + i=47 + + + i=17998 + + + i=80 + + 17742 + + + Object_1 + + i=17743 + + + 0 + <DataSetWriterName> + + + i=15296 + + + i=15298 + + + i=11508 + + 17743 + + Variable_2 + + i=17744 + + + 0 + DataSetWriterId + + + i=46 + + + i=68 + + + i=78 + + 17744 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=17745 + + + 0 + DataSetFieldContentMask + + + i=46 + + + i=68 + + + i=78 + + 17745 + + i=15583 + + -1 + 1 + 1 + + + Variable_2 + + i=17490 + + + 0 + DataSetWriterProperties + + + i=46 + + + i=68 + + + i=78 + + 17490 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=17749 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 17749 + + Variable_2 + + i=17750 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 17750 + + i=14647 + + -1 + 1 + 1 + + + + + Object_1 + + i=17812 + + + 0 + Diagnostics + + + i=47 + + + i=19834 + + + i=80 + + 17812 + + Variable_2 + + i=17813 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 17813 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=17814 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 17814 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17815 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17815 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17816 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17816 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17817 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17817 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17819 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 17819 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17820 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17820 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17821 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17821 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17822 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17822 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=17824 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 17824 + true + true + + + Variable_2 + + i=17825 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 17825 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=17826 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 17826 + + Variable_2 + + i=17827 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 17827 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17828 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17828 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17829 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17829 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17830 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17830 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17832 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 17832 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17833 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17833 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17834 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17834 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17835 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17835 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17837 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 17837 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17838 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17838 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17839 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17839 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17840 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17840 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17842 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 17842 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17843 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17843 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17844 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17844 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17845 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17845 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17847 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 17847 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17848 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17848 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17849 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17849 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17850 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17850 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17853 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 17853 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17854 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17854 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17855 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17855 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17856 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17856 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17859 + + + 0 + SentNetworkMessages + + + i=47 + + + i=19725 + + + i=78 + + 17859 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17864 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17864 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17871 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17871 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17872 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17872 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17874 + + + 0 + FailedTransmissions + + + i=47 + + + i=19725 + + + i=78 + + 17874 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17878 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17878 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17885 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17885 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17892 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17892 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17900 + + + 0 + EncryptionErrors + + + i=47 + + + i=19725 + + + i=78 + + 17900 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=17901 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 17901 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=17902 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 17902 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=17903 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17903 + + + 1 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=17858 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 17858 + + Variable_2 + + i=17913 + + + 0 + ConfiguredDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 17913 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=17920 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17920 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=17927 + + + 0 + OperationalDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 17927 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=17934 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 17934 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + Method_4 + + i=17969 + + + 0 + AddDataSetWriter + + + i=47 + + + i=17969 + + + i=80 + + 17969 + true + true + + Variable_2 + + i=17976 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17976 + + + + + + i=297 + + + + Configuration + + i=15597 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17987 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17987 + + + + + + i=297 + + + + DataSetWriterNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=17992 + + + 0 + RemoveDataSetWriter + + + i=47 + + + i=17992 + + + i=80 + + 17992 + true + true + + Variable_2 + + i=17993 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17993 + + + + + + i=297 + + + + DataSetWriterNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ReferenceType_32 + + i=15296 + + + 0 + HasDataSetWriter + + + i=47 + + + + IsWriterInGroup + + + + ReferenceType_32 + + i=18804 + + + 0 + HasWriterGroup + + + i=47 + + + + IsWriterGroupOf + + + + ObjectType_8 + + i=17997 + + + 0 + WriterGroupTransportType + + + i=58 + + true + + + ObjectType_8 + + i=17998 + + + 0 + WriterGroupMessageType + + + i=58 + + true + + + ObjectType_8 + + i=17999 + + + 0 + ReaderGroupType + + + i=14232 + + + Object_1 + + i=18076 + + + 0 + <DataSetReaderName> + + + i=15297 + + + i=15306 + + + i=11508 + + 18076 + + Variable_2 + + i=18077 + + + 0 + PublisherId + + + i=46 + + + i=68 + + + i=78 + + 18077 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=18078 + + + 0 + WriterGroupId + + + i=46 + + + i=68 + + + i=78 + + 18078 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=18079 + + + 0 + DataSetWriterId + + + i=46 + + + i=68 + + + i=78 + + 18079 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=18080 + + + 0 + DataSetMetaData + + + i=46 + + + i=68 + + + i=78 + + 18080 + + i=14523 + + -1 + 1 + 1 + + + Variable_2 + + i=18081 + + + 0 + DataSetFieldContentMask + + + i=46 + + + i=68 + + + i=78 + + 18081 + + i=15583 + + -1 + 1 + 1 + + + Variable_2 + + i=18082 + + + 0 + MessageReceiveTimeout + + + i=46 + + + i=68 + + + i=78 + + 18082 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17560 + + + 0 + KeyFrameCount + + + i=46 + + + i=68 + + + i=78 + + 17560 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17562 + + + 0 + HeaderLayoutUri + + + i=46 + + + i=68 + + + i=78 + + 17562 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17492 + + + 0 + DataSetReaderProperties + + + i=46 + + + i=68 + + + i=78 + + 17492 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=18088 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 18088 + + Variable_2 + + i=18089 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 18089 + + i=14647 + + -1 + 1 + 1 + + + + Object_1 + + i=21006 + + + 0 + SubscribedDataSet + + + i=47 + + + i=15108 + + + i=78 + + 21006 + + + + Object_1 + + i=21015 + + + 0 + Diagnostics + + + i=47 + + + i=19903 + + + i=80 + + 21015 + + Variable_2 + + i=21016 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 21016 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=21017 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 21017 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21018 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21018 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21019 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21019 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21020 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21020 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21022 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 21022 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21023 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21023 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21024 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21024 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21025 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21025 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=21027 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 21027 + true + true + + + Variable_2 + + i=21028 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 21028 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=21029 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 21029 + + Variable_2 + + i=21030 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 21030 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21031 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21031 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21032 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21032 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21033 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21033 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21035 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 21035 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21036 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21036 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21037 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21037 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21038 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21038 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21040 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 21040 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21041 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21041 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21042 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21042 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21043 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21043 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21045 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 21045 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21046 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21046 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21047 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21047 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21048 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21048 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21050 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 21050 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21051 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21051 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21052 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21052 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21053 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21053 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21055 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 21055 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21056 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21056 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21057 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21057 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21058 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21058 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21061 + + + 0 + ReceivedNetworkMessages + + + i=47 + + + i=19725 + + + i=78 + + 21061 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=21062 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 21062 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=21063 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 21063 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=21064 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21064 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=21060 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 21060 + + Variable_2 + + i=21076 + + + 0 + ConfiguredDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 21076 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=21077 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21077 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=21078 + + + 0 + OperationalDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 21078 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=21079 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 21079 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + Object_1 + + i=21080 + + + 0 + TransportSettings + + + i=47 + + + i=21090 + + + i=80 + + 21080 + + + Object_1 + + i=21081 + + + 0 + MessageSettings + + + i=47 + + + i=21091 + + + i=80 + + 21081 + + + Method_4 + + i=21082 + + + 0 + AddDataSetReader + + + i=47 + + + i=21082 + + + i=80 + + 21082 + true + true + + Variable_2 + + i=21083 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 21083 + + + + + + i=297 + + + + Configuration + + i=15623 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=21084 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 21084 + + + + + + i=297 + + + + DataSetReaderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=21085 + + + 0 + RemoveDataSetReader + + + i=47 + + + i=21085 + + + i=80 + + 21085 + true + true + + Variable_2 + + i=21086 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 21086 + + + + + + i=297 + + + + DataSetReaderNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ReferenceType_32 + + i=15297 + + + 0 + HasDataSetReader + + + i=47 + + + + IsReaderInGroup + + + + ReferenceType_32 + + i=18805 + + + 0 + HasReaderGroup + + + i=47 + + + + IsReaderGroupOf + + + + ObjectType_8 + + i=21090 + + + 0 + ReaderGroupTransportType + + + i=58 + + true + + + ObjectType_8 + + i=21091 + + + 0 + ReaderGroupMessageType + + + i=58 + + true + + + ObjectType_8 + + i=15298 + + + 0 + DataSetWriterType + + + i=58 + + + Variable_2 + + i=21092 + + + 0 + DataSetWriterId + + + i=46 + + + i=68 + + + i=78 + + 21092 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=21093 + + + 0 + DataSetFieldContentMask + + + i=46 + + + i=68 + + + i=78 + + 21093 + + i=15583 + + -1 + 1 + 1 + + + Variable_2 + + i=21094 + + + 0 + KeyFrameCount + + + i=46 + + + i=68 + + + i=80 + + 21094 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17493 + + + 0 + DataSetWriterProperties + + + i=46 + + + i=68 + + + i=78 + + 17493 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=15303 + + + 0 + TransportSettings + + + i=47 + + + i=15305 + + + i=80 + + 15303 + + + Object_1 + + i=21095 + + + 0 + MessageSettings + + + i=47 + + + i=21096 + + + i=80 + + 21095 + + + Object_1 + + i=15299 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 15299 + + Variable_2 + + i=15300 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 15300 + + i=14647 + + -1 + 1 + 1 + + + + Object_1 + + i=19550 + + + 0 + Diagnostics + + + i=47 + + + i=19968 + + + i=80 + + 19550 + + Variable_2 + + i=19551 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 19551 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=19552 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 19552 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19553 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19553 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19554 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19554 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19555 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19555 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19557 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 19557 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19558 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19558 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19559 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19559 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19560 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19560 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=19562 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 19562 + true + true + + + Variable_2 + + i=19563 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 19563 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=19564 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19564 + + Variable_2 + + i=19565 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 19565 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19566 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19566 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19567 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19567 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19568 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19568 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19570 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19570 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19571 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19571 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19572 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19572 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19573 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19573 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19575 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 19575 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19576 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19576 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19577 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19577 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19578 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19578 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19580 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 19580 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19581 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19581 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19582 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19582 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19583 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19583 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19585 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 19585 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19586 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19586 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19587 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19587 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19588 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19588 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19590 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19590 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19591 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19591 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19592 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19592 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19593 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19593 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19596 + + + 0 + FailedDataSetMessages + + + i=47 + + + i=19725 + + + i=78 + + 19596 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19597 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19597 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19598 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19598 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19599 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19599 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=19595 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19595 + + + + + ObjectType_8 + + i=15305 + + + 0 + DataSetWriterTransportType + + + i=58 + + true + + + ObjectType_8 + + i=21096 + + + 0 + DataSetWriterMessageType + + + i=58 + + true + + + ObjectType_8 + + i=15306 + + + 0 + DataSetReaderType + + + i=58 + + + Variable_2 + + i=21097 + + + 0 + PublisherId + + + i=46 + + + i=68 + + + i=78 + + 21097 + + i=24 + + -1 + 1 + 1 + + + Variable_2 + + i=21098 + + + 0 + WriterGroupId + + + i=46 + + + i=68 + + + i=78 + + 21098 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=21099 + + + 0 + DataSetWriterId + + + i=46 + + + i=68 + + + i=78 + + 21099 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=21100 + + + 0 + DataSetMetaData + + + i=46 + + + i=68 + + + i=78 + + 21100 + + i=14523 + + -1 + 1 + 1 + + + Variable_2 + + i=21101 + + + 0 + DataSetFieldContentMask + + + i=46 + + + i=68 + + + i=78 + + 21101 + + i=15583 + + -1 + 1 + 1 + + + Variable_2 + + i=21102 + + + 0 + MessageReceiveTimeout + + + i=46 + + + i=68 + + + i=78 + + 21102 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=17563 + + + 0 + KeyFrameCount + + + i=46 + + + i=68 + + + i=78 + + 17563 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=17564 + + + 0 + HeaderLayoutUri + + + i=46 + + + i=68 + + + i=78 + + 17564 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15932 + + + 0 + SecurityMode + + + i=46 + + + i=68 + + + i=80 + + 15932 + + i=302 + + -1 + 1 + 1 + + + Variable_2 + + i=15933 + + + 0 + SecurityGroupId + + + i=46 + + + i=68 + + + i=80 + + 15933 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15934 + + + 0 + SecurityKeyServices + + + i=46 + + + i=68 + + + i=80 + + 15934 + + i=312 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17494 + + + 0 + DataSetReaderProperties + + + i=46 + + + i=68 + + + i=78 + + 17494 + + i=14533 + + 1 + 0 + 1 + 1 + + + Object_1 + + i=15311 + + + 0 + TransportSettings + + + i=47 + + + i=15319 + + + i=80 + + 15311 + + + Object_1 + + i=21103 + + + 0 + MessageSettings + + + i=47 + + + i=21104 + + + i=80 + + 21103 + + + Object_1 + + i=15307 + + + 0 + Status + + + i=47 + + + i=14643 + + + i=78 + + 15307 + + Variable_2 + + i=15308 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 15308 + + i=14647 + + -1 + 1 + 1 + + + + Object_1 + + i=19609 + + + 0 + Diagnostics + + + i=47 + + + i=20027 + + + i=80 + + 19609 + + Variable_2 + + i=19610 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 19610 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=19611 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 19611 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19612 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19612 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19613 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19613 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19614 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19614 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19616 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 19616 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19617 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19617 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19618 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19618 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19619 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19619 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=19621 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 19621 + true + true + + + Variable_2 + + i=19622 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 19622 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=19623 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19623 + + Variable_2 + + i=19624 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 19624 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19625 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19625 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19626 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19626 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19627 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19627 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19629 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19629 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19630 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19630 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19631 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19631 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19632 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19632 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19634 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 19634 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19635 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19635 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19636 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19636 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19637 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19637 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19639 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 19639 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19640 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19640 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19641 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19641 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19642 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19642 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19644 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 19644 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19645 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19645 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19646 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19646 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19647 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19647 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19649 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19649 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19650 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19650 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19651 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19651 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19652 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19652 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19655 + + + 0 + FailedDataSetMessages + + + i=47 + + + i=19725 + + + i=78 + + 19655 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19656 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19656 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19657 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19657 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19658 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19658 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=19654 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19654 + + + + Object_1 + + i=15316 + + + 0 + SubscribedDataSet + + + i=47 + + + i=15108 + + + i=78 + + 15316 + + + Method_4 + + i=17386 + + + 0 + CreateTargetVariables + + + i=47 + + + i=17386 + + + i=80 + + 17386 + true + true + + Variable_2 + + i=17387 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17387 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetVariablesToAdd + + i=14744 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17388 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17388 + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=17389 + + + 0 + CreateDataSetMirror + + + i=47 + + + i=17389 + + + i=80 + + 17389 + true + true + + Variable_2 + + i=17390 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 17390 + + + + + + i=297 + + + + ParentNodeName + + i=12 + + -1 + + + + + + + i=297 + + + + RolePermissions + + i=96 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=17391 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 17391 + + + + + + i=297 + + + + ParentNodeId + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=15319 + + + 0 + DataSetReaderTransportType + + + i=58 + + true + + + ObjectType_8 + + i=21104 + + + 0 + DataSetReaderMessageType + + + i=58 + + true + + + ObjectType_8 + + i=15108 + + + 0 + SubscribedDataSetType + + + i=58 + + + + ObjectType_8 + + i=15111 + + + 0 + TargetVariablesType + + + i=15108 + + + Variable_2 + + i=15114 + + + 0 + TargetVariables + + + i=46 + + + i=68 + + + i=78 + + 15114 + + i=14744 + + 1 + 0 + 1 + 1 + + + Method_4 + + i=15115 + + + 0 + AddTargetVariables + + + i=47 + + + i=15115 + + + i=80 + + 15115 + true + true + + Variable_2 + + i=15116 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15116 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetVariablesToAdd + + i=14744 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15117 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15117 + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + Method_4 + + i=15118 + + + 0 + RemoveTargetVariables + + + i=47 + + + i=15118 + + + i=80 + + 15118 + true + true + + Variable_2 + + i=15119 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 15119 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetsToRemove + + i=7 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=15120 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 15120 + + + + + + i=297 + + + + RemoveResults + + i=19 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=15127 + + + 0 + SubscribedDataSetMirrorType + + + i=15108 + + + + ObjectType_8 + + i=14643 + + + 0 + PubSubStatusType + + + i=58 + + + Variable_2 + + i=14644 + + + 0 + State + + + i=47 + + + i=63 + + + i=78 + + 14644 + + i=14647 + + -1 + 1 + 1 + + + Method_4 + + i=14645 + + + 0 + Enable + + + i=47 + + + i=14645 + + + i=80 + + 14645 + true + true + + + Method_4 + + i=14646 + + + 0 + Disable + + + i=47 + + + i=14646 + + + i=80 + + 14646 + true + true + + + + ObjectType_8 + + i=19677 + + + 0 + PubSubDiagnosticsType + + + i=58 + + true + + Variable_2 + + i=19678 + + + 0 + DiagnosticsLevel + + + i=47 + + + i=63 + + + i=78 + + 19678 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=19679 + + + 0 + TotalInformation + + + i=47 + + + i=19725 + + + i=78 + + 19679 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19680 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19680 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19681 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19681 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19682 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19682 + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19684 + + + 0 + TotalError + + + i=47 + + + i=19725 + + + i=78 + + 19684 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19685 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19685 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19686 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19686 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19687 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19687 + + i=19723 + + -1 + 1 + 1 + + + + Method_4 + + i=19689 + + + 0 + Reset + + + i=47 + + + i=19689 + + + i=78 + + 19689 + true + true + + + Variable_2 + + i=19690 + + + 0 + SubError + + + i=47 + + + i=63 + + + i=78 + + 19690 + + i=1 + + -1 + 1 + 1 + + + Object_1 + + i=19691 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19691 + + Variable_2 + + i=19692 + + + 0 + StateError + + + i=47 + + + i=19725 + + + i=78 + + 19692 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19693 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19693 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19694 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19694 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19695 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19695 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19697 + + + 0 + StateOperationalByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19697 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19698 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19698 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19699 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19699 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19700 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19700 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19702 + + + 0 + StateOperationalByParent + + + i=47 + + + i=19725 + + + i=78 + + 19702 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19703 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19703 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19704 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19704 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19705 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19705 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19707 + + + 0 + StateOperationalFromError + + + i=47 + + + i=19725 + + + i=78 + + 19707 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19708 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19708 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19709 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19709 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19710 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19710 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19712 + + + 0 + StatePausedByParent + + + i=47 + + + i=19725 + + + i=78 + + 19712 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19713 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19713 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19714 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19714 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19715 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19715 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19717 + + + 0 + StateDisabledByMethod + + + i=47 + + + i=19725 + + + i=78 + + 19717 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19718 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19718 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19719 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19719 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19720 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19720 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=19722 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19722 + + + + DataType_64 + + i=19723 + + + 0 + DiagnosticsLevel + + + i=29 + + + + i=14799 + + + + + + 0 + + Basic + + Basic + + + 1 + + Advanced + + Advanced + + + 2 + + Info + + Info + + + 3 + + Log + + Log + + + 4 + + Debug + + Debug + + + + + + + Variable_2 + + i=19724 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 19724 + + + + + + Basic + + + + Advanced + + + + Info + + + + Log + + + + Debug + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + VariableType_16 + + i=19725 + + + 0 + PubSubDiagnosticsCounterType + + + i=63 + + + i=7 + + -1 + + Variable_2 + + i=19726 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19726 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19727 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19727 + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19728 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19728 + + i=19723 + + -1 + 1 + 1 + + + Variable_2 + + i=19729 + + + 0 + TimeFirstChange + + + i=46 + + + i=68 + + + i=80 + + 19729 + + i=13 + + -1 + 1 + 1 + + + + DataType_64 + + i=19730 + + + 0 + PubSubDiagnosticsCounterClassification + + + i=29 + + + + i=14799 + + + + + + 0 + + Information + + Information + + + 1 + + Error + + Error + + + + + + + Variable_2 + + i=19731 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 19731 + + + + + + Information + + + + Error + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=19732 + + + 0 + PubSubDiagnosticsRootType + + + i=19677 + + + Object_1 + + i=19777 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19777 + + Variable_2 + + i=19778 + + + 0 + ConfiguredDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 19778 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19779 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19779 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19780 + + + 0 + ConfiguredDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 19780 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19781 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19781 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19782 + + + 0 + OperationalDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 19782 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19783 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19783 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19784 + + + 0 + OperationalDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 19784 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19785 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19785 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=19786 + + + 0 + PubSubDiagnosticsConnectionType + + + i=19677 + + + Object_1 + + i=19831 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19831 + + Variable_2 + + i=19832 + + + 0 + ResolvedAddress + + + i=47 + + + i=63 + + + i=78 + + 19832 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=19833 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19833 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=19834 + + + 0 + PubSubDiagnosticsWriterGroupType + + + i=19677 + + + Object_1 + + i=19848 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19848 + + Variable_2 + + i=19880 + + + 0 + SentNetworkMessages + + + i=47 + + + i=19725 + + + i=78 + + 19880 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19881 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19881 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19882 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19882 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19883 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19883 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19885 + + + 0 + FailedTransmissions + + + i=47 + + + i=19725 + + + i=78 + + 19885 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19886 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19886 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19887 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19887 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19888 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19888 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19890 + + + 0 + EncryptionErrors + + + i=47 + + + i=19725 + + + i=78 + + 19890 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19891 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19891 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19892 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19892 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19893 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19893 + + + 1 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=19879 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19879 + + Variable_2 + + i=19895 + + + 0 + ConfiguredDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 19895 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19896 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19896 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19897 + + + 0 + OperationalDataSetWriters + + + i=47 + + + i=63 + + + i=78 + + 19897 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19898 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19898 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19899 + + + 0 + SecurityTokenID + + + i=47 + + + i=63 + + + i=80 + + 19899 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19900 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19900 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19901 + + + 0 + TimeToNextTokenID + + + i=47 + + + i=63 + + + i=80 + + 19901 + + i=290 + + -1 + 1 + 1 + + Variable_2 + + i=19902 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19902 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=19903 + + + 0 + PubSubDiagnosticsReaderGroupType + + + i=19677 + + + Object_1 + + i=19917 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19917 + + Variable_2 + + i=19949 + + + 0 + ReceivedNetworkMessages + + + i=47 + + + i=19725 + + + i=78 + + 19949 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19950 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19950 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19951 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19951 + + + 0 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19952 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19952 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19954 + + + 0 + ReceivedInvalidNetworkMessages + + + i=47 + + + i=19725 + + + i=80 + + 19954 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19955 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19955 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19956 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19956 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19957 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19957 + + + 1 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19959 + + + 0 + DecryptionErrors + + + i=47 + + + i=19725 + + + i=80 + + 19959 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=19960 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 19960 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=19961 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 19961 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=19962 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19962 + + + 1 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=19948 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 19948 + + Variable_2 + + i=19964 + + + 0 + ConfiguredDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 19964 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19965 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19965 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=19966 + + + 0 + OperationalDataSetReaders + + + i=47 + + + i=63 + + + i=78 + + 19966 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=19967 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 19967 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=19968 + + + 0 + PubSubDiagnosticsDataSetWriterType + + + i=19677 + + + Object_1 + + i=19982 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 19982 + + Variable_2 + + i=20014 + + + 0 + FailedDataSetMessages + + + i=47 + + + i=19725 + + + i=78 + + 20014 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20015 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 20015 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=20016 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 20016 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=20017 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20017 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=20013 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 20013 + + Variable_2 + + i=20019 + + + 0 + MessageSequenceNumber + + + i=47 + + + i=63 + + + i=80 + + 20019 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=20020 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20020 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20021 + + + 0 + StatusCode + + + i=47 + + + i=63 + + + i=80 + + 20021 + + i=19 + + -1 + 1 + 1 + + Variable_2 + + i=20022 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20022 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20023 + + + 0 + MajorVersion + + + i=47 + + + i=63 + + + i=80 + + 20023 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20024 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20024 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20025 + + + 0 + MinorVersion + + + i=47 + + + i=63 + + + i=80 + + 20025 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20026 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20026 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=20027 + + + 0 + PubSubDiagnosticsDataSetReaderType + + + i=19677 + + + Object_1 + + i=20041 + + + 0 + Counters + + + i=47 + + + i=58 + + + i=78 + + 20041 + + Variable_2 + + i=20073 + + + 0 + FailedDataSetMessages + + + i=47 + + + i=19725 + + + i=78 + + 20073 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20074 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 20074 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=20075 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 20075 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=20076 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20076 + + + 0 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20078 + + + 0 + DecryptionErrors + + + i=47 + + + i=19725 + + + i=80 + + 20078 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20079 + + + 0 + Active + + + i=46 + + + i=68 + + + i=78 + + 20079 + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=20080 + + + 0 + Classification + + + i=46 + + + i=68 + + + i=78 + + 20080 + + + 1 + + + + i=19730 + + -1 + 1 + 1 + + + Variable_2 + + i=20081 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20081 + + + 1 + + + + i=19723 + + -1 + 1 + 1 + + + + + Object_1 + + i=20072 + + + 0 + LiveValues + + + i=47 + + + i=58 + + + i=78 + + 20072 + + Variable_2 + + i=20083 + + + 0 + MessageSequenceNumber + + + i=47 + + + i=63 + + + i=80 + + 20083 + + i=5 + + -1 + 1 + 1 + + Variable_2 + + i=20084 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20084 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20085 + + + 0 + StatusCode + + + i=47 + + + i=63 + + + i=80 + + 20085 + + i=19 + + -1 + 1 + 1 + + Variable_2 + + i=20086 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20086 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20087 + + + 0 + MajorVersion + + + i=47 + + + i=63 + + + i=80 + + 20087 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20088 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20088 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20089 + + + 0 + MinorVersion + + + i=47 + + + i=63 + + + i=80 + + 20089 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20090 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20090 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20091 + + + 0 + SecurityTokenID + + + i=47 + + + i=63 + + + i=80 + + 20091 + + i=7 + + -1 + 1 + 1 + + Variable_2 + + i=20092 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20092 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + Variable_2 + + i=20093 + + + 0 + TimeToNextTokenID + + + i=47 + + + i=63 + + + i=80 + + 20093 + + i=290 + + -1 + 1 + 1 + + Variable_2 + + i=20094 + + + 0 + DiagnosticsLevel + + + i=46 + + + i=68 + + + i=78 + + 20094 + + + 2 + + + + i=19723 + + -1 + 1 + 1 + + + + + + ObjectType_8 + + i=15535 + + + 0 + PubSubStatusEventType + + + i=2130 + + true + + Variable_2 + + i=15545 + + + 0 + ConnectionId + + + i=46 + + + i=68 + + + i=78 + + 15545 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=15546 + + + 0 + GroupId + + + i=46 + + + i=68 + + + i=78 + + 15546 + + i=17 + + -1 + 1 + 1 + + + Variable_2 + + i=15547 + + + 0 + State + + + i=46 + + + i=68 + + + i=78 + + 15547 + + i=14647 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=15548 + + + 0 + PubSubTransportLimitsExceedEventType + + + i=15535 + + true + + Variable_2 + + i=15561 + + + 0 + Actual + + + i=46 + + + i=68 + + + i=78 + + 15561 + + i=7 + + -1 + 1 + 1 + + + Variable_2 + + i=15562 + + + 0 + Maximum + + + i=46 + + + i=68 + + + i=78 + + 15562 + + i=7 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=15563 + + + 0 + PubSubCommunicationFailureEventType + + + i=15535 + + true + + Variable_2 + + i=15576 + + + 0 + Error + + + i=46 + + + i=68 + + + i=78 + + 15576 + + i=19 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21105 + + + 0 + UadpWriterGroupMessageType + + + i=17998 + + + Variable_2 + + i=21106 + + + 0 + GroupVersion + + + i=46 + + + i=68 + + + i=78 + + 21106 + + i=20998 + + -1 + 1 + 1 + + + Variable_2 + + i=21107 + + + 0 + DataSetOrdering + + + i=46 + + + i=68 + + + i=78 + + 21107 + + i=20408 + + -1 + 1 + 1 + + + Variable_2 + + i=21108 + + + 0 + NetworkMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21108 + + i=15642 + + -1 + 1 + 1 + + + Variable_2 + + i=21109 + + + 0 + SamplingOffset + + + i=46 + + + i=68 + + + i=80 + + 21109 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=21110 + + + 0 + PublishingOffset + + + i=46 + + + i=68 + + + i=78 + + 21110 + + i=290 + + 1 + 0 + 1 + 1 + + + + ObjectType_8 + + i=21111 + + + 0 + UadpDataSetWriterMessageType + + + i=21096 + + + Variable_2 + + i=21112 + + + 0 + DataSetMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21112 + + i=15646 + + -1 + 1 + 1 + + + Variable_2 + + i=21113 + + + 0 + ConfiguredSize + + + i=46 + + + i=68 + + + i=78 + + 21113 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=21114 + + + 0 + NetworkMessageNumber + + + i=46 + + + i=68 + + + i=78 + + 21114 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=21115 + + + 0 + DataSetOffset + + + i=46 + + + i=68 + + + i=78 + + 21115 + + i=5 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21116 + + + 0 + UadpDataSetReaderMessageType + + + i=21104 + + + Variable_2 + + i=21117 + + + 0 + GroupVersion + + + i=46 + + + i=68 + + + i=78 + + 21117 + + i=20998 + + -1 + 1 + 1 + + + Variable_2 + + i=21119 + + + 0 + NetworkMessageNumber + + + i=46 + + + i=68 + + + i=78 + + 21119 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=17477 + + + 0 + DataSetOffset + + + i=46 + + + i=68 + + + i=78 + + 17477 + + i=5 + + -1 + 1 + 1 + + + Variable_2 + + i=21120 + + + 0 + DataSetClassId + + + i=46 + + + i=68 + + + i=78 + + 21120 + + i=14 + + -1 + 1 + 1 + + + Variable_2 + + i=21121 + + + 0 + NetworkMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21121 + + i=15642 + + -1 + 1 + 1 + + + Variable_2 + + i=21122 + + + 0 + DataSetMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21122 + + i=15646 + + -1 + 1 + 1 + + + Variable_2 + + i=21123 + + + 0 + PublishingInterval + + + i=46 + + + i=68 + + + i=78 + + 21123 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=21124 + + + 0 + ProcessingOffset + + + i=46 + + + i=68 + + + i=78 + + 21124 + + i=290 + + -1 + 1 + 1 + + + Variable_2 + + i=21125 + + + 0 + ReceiveOffset + + + i=46 + + + i=68 + + + i=78 + + 21125 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21126 + + + 0 + JsonWriterGroupMessageType + + + i=17998 + + + Variable_2 + + i=21127 + + + 0 + NetworkMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21127 + + i=15654 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21128 + + + 0 + JsonDataSetWriterMessageType + + + i=21096 + + + Variable_2 + + i=21129 + + + 0 + DataSetMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21129 + + i=15658 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21130 + + + 0 + JsonDataSetReaderMessageType + + + i=21104 + + + Variable_2 + + i=21131 + + + 0 + NetworkMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21131 + + i=15654 + + -1 + 1 + 1 + + + Variable_2 + + i=21132 + + + 0 + DataSetMessageContentMask + + + i=46 + + + i=68 + + + i=78 + + 21132 + + i=15658 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=15064 + + + 0 + DatagramConnectionTransportType + + + i=17721 + + + Object_1 + + i=15072 + + + 0 + DiscoveryAddress + + + i=47 + + + i=21145 + + + i=78 + + 15072 + + Variable_2 + + i=15154 + + + 0 + NetworkInterface + + + i=47 + + + i=16309 + + + i=78 + + 15154 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=17579 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17579 + + i=24 + + 1 + 0 + 1 + 1 + + + + + + ObjectType_8 + + i=21133 + + + 0 + DatagramWriterGroupTransportType + + + i=17997 + + + Variable_2 + + i=21134 + + + 0 + MessageRepeatCount + + + i=46 + + + i=68 + + + i=80 + + 21134 + + i=3 + + -1 + 1 + 1 + + + Variable_2 + + i=21135 + + + 0 + MessageRepeatDelay + + + i=46 + + + i=68 + + + i=80 + + 21135 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=15155 + + + 0 + BrokerConnectionTransportType + + + i=17721 + + + Variable_2 + + i=15156 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 15156 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15178 + + + 0 + AuthenticationProfileUri + + + i=46 + + + i=68 + + + i=78 + + 15178 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21136 + + + 0 + BrokerWriterGroupTransportType + + + i=17997 + + + Variable_2 + + i=21137 + + + 0 + QueueName + + + i=46 + + + i=68 + + + i=78 + + 21137 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15246 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 15246 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15247 + + + 0 + AuthenticationProfileUri + + + i=46 + + + i=68 + + + i=78 + + 15247 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15249 + + + 0 + RequestedDeliveryGuarantee + + + i=46 + + + i=68 + + + i=78 + + 15249 + + i=15008 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21138 + + + 0 + BrokerDataSetWriterTransportType + + + i=15305 + + + Variable_2 + + i=21139 + + + 0 + QueueName + + + i=46 + + + i=68 + + + i=78 + + 21139 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21140 + + + 0 + MetaDataQueueName + + + i=46 + + + i=68 + + + i=78 + + 21140 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15250 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 15250 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15251 + + + 0 + AuthenticationProfileUri + + + i=46 + + + i=68 + + + i=78 + + 15251 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15330 + + + 0 + RequestedDeliveryGuarantee + + + i=46 + + + i=68 + + + i=78 + + 15330 + + i=15008 + + -1 + 1 + 1 + + + Variable_2 + + i=21141 + + + 0 + MetaDataUpdateTime + + + i=46 + + + i=68 + + + i=78 + + 21141 + + i=290 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21142 + + + 0 + BrokerDataSetReaderTransportType + + + i=15319 + + + Variable_2 + + i=21143 + + + 0 + QueueName + + + i=46 + + + i=68 + + + i=78 + + 21143 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15334 + + + 0 + ResourceUri + + + i=46 + + + i=68 + + + i=78 + + 15334 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15419 + + + 0 + AuthenticationProfileUri + + + i=46 + + + i=68 + + + i=78 + + 15419 + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15420 + + + 0 + RequestedDeliveryGuarantee + + + i=46 + + + i=68 + + + i=78 + + 15420 + + i=15008 + + -1 + 1 + 1 + + + Variable_2 + + i=21144 + + + 0 + MetaDataQueueName + + + i=46 + + + i=68 + + + i=78 + + 21144 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=21145 + + + 0 + NetworkAddressType + + + i=58 + + true + + Variable_2 + + i=21146 + + + 0 + NetworkInterface + + + i=47 + + + i=16309 + + + i=78 + + 21146 + + i=12 + + -1 + 1 + 1 + + Variable_2 + + i=17582 + + + 0 + Selections + + + i=46 + + + i=68 + + + i=78 + + 17582 + + i=24 + + 1 + 0 + 1 + 1 + + + + + ObjectType_8 + + i=21147 + + + 0 + NetworkAddressUrlType + + + i=21145 + + + Variable_2 + + i=21149 + + + 0 + Url + + + i=47 + + + i=63 + + + i=78 + + 21149 + + i=12 + + -1 + 1 + 1 + + + + ObjectType_8 + + i=23455 + + + 0 + AliasNameType + + + i=58 + + + + ObjectType_8 + + i=23456 + + + 0 + AliasNameCategoryType + + + i=61 + + + Object_1 + + i=23457 + + + 0 + <Alias> + + + i=47 + + + i=23455 + + + i=11508 + + 23457 + + + Object_1 + + i=23458 + + + 0 + <SubAliasNameCategories> + + + i=47 + + + i=23456 + + + i=11508 + + 23458 + + Method_4 + + i=23459 + + + 0 + FindAlias + + + i=47 + + + i=23462 + + + i=78 + + 23459 + true + true + + Variable_2 + + i=23460 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 23460 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=23461 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 23461 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Method_4 + + i=23462 + + + 0 + FindAlias + + + i=47 + + + i=23462 + + + i=78 + + 23462 + true + true + + Variable_2 + + i=23463 + + + 0 + InputArguments + + + i=46 + + + i=68 + + + i=78 + + 23463 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=23464 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + + i=78 + + 23464 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + DataType_64 + + i=23468 + + + 0 + AliasNameDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + AliasName + + i=20 + + -1 + + 0 + false + + + ReferencedNodes + + i=18 + + 1 + + 0 + false + + + + + + + + ReferenceType_32 + + i=23469 + + + 0 + AliasFor + + + i=32 + + + + HasAlias + + + + Object_1 + + i=23470 + + + 0 + Aliases + + + i=47 + + + i=23456 + + 23470 + + + + i=35 + + true + + i=85 + + + + + Method_4 + + i=23476 + + + 0 + FindAlias + + + i=47 + + + i=23462 + + 23476 + true + true + + Variable_2 + + i=23477 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 23477 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=23478 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 23478 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=23479 + + + 0 + TagVariables + + + i=47 + + + i=23456 + + 23479 + + + + i=35 + + true + + i=23470 + + + + + Method_4 + + i=23485 + + + 0 + FindAlias + + + i=47 + + + i=23462 + + 23485 + true + true + + Variable_2 + + i=23486 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 23486 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=23487 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 23487 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + Object_1 + + i=23488 + + + 0 + Topics + + + i=47 + + + i=23456 + + 23488 + + + + i=35 + + true + + i=23470 + + + + + Method_4 + + i=23494 + + + 0 + FindAlias + + + i=47 + + + i=23462 + + 23494 + true + true + + Variable_2 + + i=23495 + + + 0 + InputArguments + + + i=46 + + + i=68 + + 23495 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + Variable_2 + + i=23496 + + + 0 + OutputArguments + + + i=46 + + + i=68 + + 23496 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + i=296 + + 1 + 0 + 1 + 1 + + + + + VariableType_16 + + i=19077 + + + 0 + MultiStateDictionaryEntryDiscreteBaseType + + + i=11238 + + + i=26 + + -1 + + Variable_2 + + i=19082 + + + 0 + EnumDictionaryEntries + + + i=46 + + + i=68 + + + i=78 + + 19082 + + i=17 + + 2 + 0,0 + 1 + 1 + + + Variable_2 + + i=19083 + + + 0 + ValueAsDictionaryEntries + + + i=46 + + + i=68 + + + i=80 + + 19083 + + i=17 + + 1 + 0 + 1 + 1 + + + + VariableType_16 + + i=19084 + + + 0 + MultiStateDictionaryEntryDiscreteType + + + i=19077 + + + i=26 + + -1 + + Variable_2 + + i=19090 + + + 0 + ValueAsDictionaryEntries + + + i=46 + + + i=68 + + + i=78 + + 19090 + + i=17 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=256 + + + 0 + IdType + + + i=29 + + + + i=14799 + + + + + + 0 + + Numeric + + Numeric + + + 1 + + String + + String + + + 2 + + Guid + + Guid + + + 3 + + Opaque + + Opaque + + + + + + + Variable_2 + + i=7591 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7591 + + + + + + Numeric + + + + String + + + + Guid + + + + Opaque + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=257 + + + 0 + NodeClass + + + i=29 + + + + i=14799 + + + + + + 0 + + Unspecified + + Unspecified + + + 1 + + Object + + Object + + + 2 + + Variable + + Variable + + + 4 + + Method + + Method + + + 8 + + ObjectType + + ObjectType + + + 16 + + VariableType + + VariableType + + + 32 + + ReferenceType + + ReferenceType + + + 64 + + DataType + + DataType + + + 128 + + View + + View + + + + + + + Variable_2 + + i=11878 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 11878 + + + + + + i=7616 + + + + 0 + + + Unspecified + + + + + + + i=7616 + + + + 1 + + + Object + + + + + + + i=7616 + + + + 2 + + + Variable + + + + + + + i=7616 + + + + 4 + + + Method + + + + + + + i=7616 + + + + 8 + + + ObjectType + + + + + + + i=7616 + + + + 16 + + + VariableType + + + + + + + i=7616 + + + + 32 + + + ReferenceType + + + + + + + i=7616 + + + + 64 + + + DataType + + + + + + + i=7616 + + + + 128 + + + View + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=94 + + + 0 + PermissionType + + + i=7 + + + + i=14799 + + + + + + 0 + + Browse + + Browse + + + 1 + + ReadRolePermissions + + ReadRolePermissions + + + 2 + + WriteAttribute + + WriteAttribute + + + 3 + + WriteRolePermissions + + WriteRolePermissions + + + 4 + + WriteHistorizing + + WriteHistorizing + + + 5 + + Read + + Read + + + 6 + + Write + + Write + + + 7 + + ReadHistory + + ReadHistory + + + 8 + + InsertHistory + + InsertHistory + + + 9 + + ModifyHistory + + ModifyHistory + + + 10 + + DeleteHistory + + DeleteHistory + + + 11 + + ReceiveEvents + + ReceiveEvents + + + 12 + + Call + + Call + + + 13 + + AddReference + + AddReference + + + 14 + + RemoveReference + + RemoveReference + + + 15 + + DeleteNode + + DeleteNode + + + 16 + + AddNode + + AddNode + + + + + + + Variable_2 + + i=15030 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15030 + + + + + + Browse + + + + ReadRolePermissions + + + + WriteAttribute + + + + WriteRolePermissions + + + + WriteHistorizing + + + + Read + + + + Write + + + + ReadHistory + + + + InsertHistory + + + + ModifyHistory + + + + DeleteHistory + + + + ReceiveEvents + + + + Call + + + + AddReference + + + + RemoveReference + + + + DeleteNode + + + + AddNode + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15031 + + + 0 + AccessLevelType + + + i=3 + + + + i=14799 + + + + + + 0 + + CurrentRead + + CurrentRead + + + 1 + + CurrentWrite + + CurrentWrite + + + 2 + + HistoryRead + + HistoryRead + + + 3 + + HistoryWrite + + HistoryWrite + + + 4 + + SemanticChange + + SemanticChange + + + 5 + + StatusWrite + + StatusWrite + + + 6 + + TimestampWrite + + TimestampWrite + + + + + + + Variable_2 + + i=15032 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15032 + + + + + + CurrentRead + + + + CurrentWrite + + + + HistoryRead + + + + HistoryWrite + + + + SemanticChange + + + + StatusWrite + + + + TimestampWrite + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15406 + + + 0 + AccessLevelExType + + + i=7 + + + + i=14799 + + + + + + 0 + + CurrentRead + + CurrentRead + + + 1 + + CurrentWrite + + CurrentWrite + + + 2 + + HistoryRead + + HistoryRead + + + 3 + + HistoryWrite + + HistoryWrite + + + 4 + + SemanticChange + + SemanticChange + + + 5 + + StatusWrite + + StatusWrite + + + 6 + + TimestampWrite + + TimestampWrite + + + 8 + + NonatomicRead + + NonatomicRead + + + 9 + + NonatomicWrite + + NonatomicWrite + + + 10 + + WriteFullArrayOnly + + WriteFullArrayOnly + + + + + + + Variable_2 + + i=15407 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15407 + + + + + + CurrentRead + + + + CurrentWrite + + + + HistoryRead + + + + HistoryWrite + + + + SemanticChange + + + + StatusWrite + + + + TimestampWrite + + + + Reserved + + + + NonatomicRead + + + + NonatomicWrite + + + + WriteFullArrayOnly + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=15033 + + + 0 + EventNotifierType + + + i=3 + + + + i=14799 + + + + + + 0 + + SubscribeToEvents + + SubscribeToEvents + + + 2 + + HistoryRead + + HistoryRead + + + 3 + + HistoryWrite + + HistoryWrite + + + + + + + Variable_2 + + i=15034 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15034 + + + + + + SubscribeToEvents + + + + Reserved + + + + HistoryRead + + + + HistoryWrite + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=95 + + + 0 + AccessRestrictionType + + + i=7 + + + + i=14799 + + + + + + 0 + + SigningRequired + + SigningRequired + + + 1 + + EncryptionRequired + + EncryptionRequired + + + 2 + + SessionRequired + + SessionRequired + + + + + + + Variable_2 + + i=15035 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15035 + + + + + + SigningRequired + + + + EncryptionRequired + + + + SessionRequired + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=96 + + + 0 + RolePermissionType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + RoleId + + i=17 + + -1 + + 0 + false + + + Permissions + + i=94 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=97 + + + 0 + DataTypeDefinition + + + i=22 + + true + + + DataType_64 + + i=98 + + + 0 + StructureType + + + i=29 + + + + i=14799 + + + + + + 0 + + Structure + + Structure + + + 1 + + StructureWithOptionalFields + + StructureWithOptionalFields + + + 2 + + Union + + Union + + + + + + + Variable_2 + + i=14528 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 14528 + + + + + + Structure + + + + StructureWithOptionalFields + + + + Union + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=101 + + + 0 + StructureField + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + DataType + + i=17 + + -1 + + 0 + false + + + ValueRank + + i=6 + + -1 + + 0 + false + + + ArrayDimensions + + i=7 + + 1 + + 0 + false + + + MaxStringLength + + i=7 + + -1 + + 0 + false + + + IsOptional + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=99 + + + 0 + StructureDefinition + + + i=97 + + + + i=14798 + + + + + i=97 + + Structure_0 + + + DefaultEncodingId + + i=17 + + -1 + + 0 + false + + + BaseDataType + + i=17 + + -1 + + 0 + false + + + StructureType + + i=98 + + -1 + + 0 + false + + + Fields + + i=101 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=100 + + + 0 + EnumDefinition + + + i=97 + + + + i=14798 + + + + + i=97 + + Structure_0 + + + Fields + + i=102 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=296 + + + 0 + Argument + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Name + + i=12 + + -1 + + 0 + false + + + DataType + + i=17 + + -1 + + 0 + false + + + ValueRank + + i=6 + + -1 + + 0 + false + + + ArrayDimensions + + i=7 + + 1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=7594 + + + 0 + EnumValueType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Value + + i=8 + + -1 + + 0 + false + + + DisplayName + + i=21 + + -1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=102 + + + 0 + EnumField + + + i=7594 + + + + i=14798 + + + + + i=7594 + + Structure_0 + + + Value + + i=8 + + -1 + + 0 + false + + + DisplayName + + i=21 + + -1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + Name + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=12755 + + + 0 + OptionSet + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Value + + i=15 + + -1 + + 0 + false + + + ValidBits + + i=15 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=12756 + + + 0 + Union + + + i=22 + + true + + + DataType_64 + + i=12877 + + + 0 + NormalizedString + + + i=12 + + + + DataType_64 + + i=12878 + + + 0 + DecimalString + + + i=12 + + + + DataType_64 + + i=12879 + + + 0 + DurationString + + + i=12 + + + + DataType_64 + + i=12880 + + + 0 + TimeString + + + i=12 + + + + DataType_64 + + i=12881 + + + 0 + DateString + + + i=12 + + + + DataType_64 + + i=290 + + + 0 + Duration + + + i=11 + + + + DataType_64 + + i=294 + + + 0 + UtcTime + + + i=13 + + + + DataType_64 + + i=295 + + + 0 + LocaleId + + + i=12 + + + + DataType_64 + + i=8912 + + + 0 + TimeZoneDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Offset + + i=4 + + -1 + + 0 + false + + + DaylightSavingInOffset + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=17588 + + + 0 + Index + + + i=7 + + + + DataType_64 + + i=288 + + + 0 + IntegerId + + + i=7 + + + + DataType_64 + + i=307 + + + 0 + ApplicationType + + + i=29 + + + + i=14799 + + + + + + 0 + + Server + + Server + + + 1 + + Client + + Client + + + 2 + + ClientAndServer + + ClientAndServer + + + 3 + + DiscoveryServer + + DiscoveryServer + + + + + + + Variable_2 + + i=7597 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7597 + + + + + + Server + + + + Client + + + + ClientAndServer + + + + DiscoveryServer + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=308 + + + 0 + ApplicationDescription + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ApplicationUri + + i=12 + + -1 + + 0 + false + + + ProductUri + + i=12 + + -1 + + 0 + false + + + ApplicationName + + i=21 + + -1 + + 0 + false + + + ApplicationType + + i=307 + + -1 + + 0 + false + + + GatewayServerUri + + i=12 + + -1 + + 0 + false + + + DiscoveryProfileUri + + i=12 + + -1 + + 0 + false + + + DiscoveryUrls + + i=12 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=20998 + + + 0 + VersionTime + + + i=7 + + + + DataType_64 + + i=12189 + + + 0 + ServerOnNetwork + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + RecordId + + i=7 + + -1 + + 0 + false + + + ServerName + + i=12 + + -1 + + 0 + false + + + DiscoveryUrl + + i=12 + + -1 + + 0 + false + + + ServerCapabilities + + i=12 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=311 + + + 0 + ApplicationInstanceCertificate + + + i=15 + + + + DataType_64 + + i=302 + + + 0 + MessageSecurityMode + + + i=29 + + + + i=14799 + + + + + + 0 + + Invalid + + Invalid + + + 1 + + None + + None + + + 2 + + Sign + + Sign + + + 3 + + SignAndEncrypt + + SignAndEncrypt + + + + + + + Variable_2 + + i=7595 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7595 + + + + + + Invalid + + + + None + + + + Sign + + + + SignAndEncrypt + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=303 + + + 0 + UserTokenType + + + i=29 + + + + i=14799 + + + + + + 0 + + Anonymous + + Anonymous + + + 1 + + UserName + + UserName + + + 2 + + Certificate + + Certificate + + + 3 + + IssuedToken + + IssuedToken + + + + + + + Variable_2 + + i=7596 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7596 + + + + + + Anonymous + + + + UserName + + + + Certificate + + + + IssuedToken + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=304 + + + 0 + UserTokenPolicy + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + PolicyId + + i=12 + + -1 + + 0 + false + + + TokenType + + i=303 + + -1 + + 0 + false + + + IssuedTokenType + + i=12 + + -1 + + 0 + false + + + IssuerEndpointUrl + + i=12 + + -1 + + 0 + false + + + SecurityPolicyUri + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=312 + + + 0 + EndpointDescription + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + EndpointUrl + + i=12 + + -1 + + 0 + false + + + Server + + i=308 + + -1 + + 0 + false + + + ServerCertificate + + i=311 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityPolicyUri + + i=12 + + -1 + + 0 + false + + + UserIdentityTokens + + i=304 + + 1 + + 0 + false + + + TransportProfileUri + + i=12 + + -1 + + 0 + false + + + SecurityLevel + + i=3 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=432 + + + 0 + RegisteredServer + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ServerUri + + i=12 + + -1 + + 0 + false + + + ProductUri + + i=12 + + -1 + + 0 + false + + + ServerNames + + i=21 + + 1 + + 0 + false + + + ServerType + + i=307 + + -1 + + 0 + false + + + GatewayServerUri + + i=12 + + -1 + + 0 + false + + + DiscoveryUrls + + i=12 + + 1 + + 0 + false + + + SemaphoreFilePath + + i=12 + + -1 + + 0 + false + + + IsOnline + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=12890 + + + 0 + DiscoveryConfiguration + + + i=22 + + + + DataType_64 + + i=12891 + + + 0 + MdnsDiscoveryConfiguration + + + i=12890 + + + + i=14798 + + + + + i=12890 + + Structure_0 + + + MdnsServerName + + i=12 + + -1 + + 0 + false + + + ServerCapabilities + + i=12 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=315 + + + 0 + SecurityTokenRequestType + + + i=29 + + + + i=14799 + + + + + + 0 + + Issue + + Issue + + + 1 + + Renew + + Renew + + + + + + + Variable_2 + + i=7598 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7598 + + + + + + Issue + + + + Renew + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=344 + + + 0 + SignedSoftwareCertificate + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + CertificateData + + i=15 + + -1 + + 0 + false + + + Signature + + i=15 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=388 + + + 0 + SessionAuthenticationToken + + + i=17 + + + + DataType_64 + + i=316 + + + 0 + UserIdentityToken + + + i=22 + + true + + + i=14798 + + + + + i=22 + + Structure_0 + + + PolicyId + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=319 + + + 0 + AnonymousIdentityToken + + + i=316 + + + + DataType_64 + + i=322 + + + 0 + UserNameIdentityToken + + + i=316 + + + + i=14798 + + + + + i=316 + + Structure_0 + + + PolicyId + + i=12 + + -1 + + 0 + false + + + UserName + + i=12 + + -1 + + 0 + false + + + Password + + i=15 + + -1 + + 0 + false + + + EncryptionAlgorithm + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=325 + + + 0 + X509IdentityToken + + + i=316 + + + + i=14798 + + + + + i=316 + + Structure_0 + + + PolicyId + + i=12 + + -1 + + 0 + false + + + CertificateData + + i=15 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=938 + + + 0 + IssuedIdentityToken + + + i=316 + + + + i=14798 + + + + + i=316 + + Structure_0 + + + PolicyId + + i=12 + + -1 + + 0 + false + + + TokenData + + i=15 + + -1 + + 0 + false + + + EncryptionAlgorithm + + i=12 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=348 + + + 0 + NodeAttributesMask + + + i=29 + + + + i=14799 + + + + + + 0 + + None + + None + + + 1 + + AccessLevel + + AccessLevel + + + 2 + + ArrayDimensions + + ArrayDimensions + + + 4 + + BrowseName + + BrowseName + + + 8 + + ContainsNoLoops + + ContainsNoLoops + + + 16 + + DataType + + DataType + + + 32 + + Description + + Description + + + 64 + + DisplayName + + DisplayName + + + 128 + + EventNotifier + + EventNotifier + + + 256 + + Executable + + Executable + + + 512 + + Historizing + + Historizing + + + 1024 + + InverseName + + InverseName + + + 2048 + + IsAbstract + + IsAbstract + + + 4096 + + MinimumSamplingInterval + + MinimumSamplingInterval + + + 8192 + + NodeClass + + NodeClass + + + 16384 + + NodeId + + NodeId + + + 32768 + + Symmetric + + Symmetric + + + 65536 + + UserAccessLevel + + UserAccessLevel + + + 131072 + + UserExecutable + + UserExecutable + + + 262144 + + UserWriteMask + + UserWriteMask + + + 524288 + + ValueRank + + ValueRank + + + 1048576 + + WriteMask + + WriteMask + + + 2097152 + + Value + + Value + + + 4194304 + + DataTypeDefinition + + DataTypeDefinition + + + 8388608 + + RolePermissions + + RolePermissions + + + 16777216 + + AccessRestrictions + + AccessRestrictions + + + 33554431 + + All + + All + + + 26501220 + + BaseNode + + BaseNode + + + 26501348 + + Object + + Object + + + 26503268 + + ObjectType + + ObjectType + + + 26571383 + + Variable + + Variable + + + 28600438 + + VariableType + + VariableType + + + 26632548 + + Method + + Method + + + 26537060 + + ReferenceType + + ReferenceType + + + 26501356 + + View + + View + + + + + + + Variable_2 + + i=11881 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 11881 + + + + + + i=7616 + + + + 0 + + + None + + + + + + + i=7616 + + + + 1 + + + AccessLevel + + + + + + + i=7616 + + + + 2 + + + ArrayDimensions + + + + + + + i=7616 + + + + 4 + + + BrowseName + + + + + + + i=7616 + + + + 8 + + + ContainsNoLoops + + + + + + + i=7616 + + + + 16 + + + DataType + + + + + + + i=7616 + + + + 32 + + + Description + + + + + + + i=7616 + + + + 64 + + + DisplayName + + + + + + + i=7616 + + + + 128 + + + EventNotifier + + + + + + + i=7616 + + + + 256 + + + Executable + + + + + + + i=7616 + + + + 512 + + + Historizing + + + + + + + i=7616 + + + + 1024 + + + InverseName + + + + + + + i=7616 + + + + 2048 + + + IsAbstract + + + + + + + i=7616 + + + + 4096 + + + MinimumSamplingInterval + + + + + + + i=7616 + + + + 8192 + + + NodeClass + + + + + + + i=7616 + + + + 16384 + + + NodeId + + + + + + + i=7616 + + + + 32768 + + + Symmetric + + + + + + + i=7616 + + + + 65536 + + + UserAccessLevel + + + + + + + i=7616 + + + + 131072 + + + UserExecutable + + + + + + + i=7616 + + + + 262144 + + + UserWriteMask + + + + + + + i=7616 + + + + 524288 + + + ValueRank + + + + + + + i=7616 + + + + 1048576 + + + WriteMask + + + + + + + i=7616 + + + + 2097152 + + + Value + + + + + + + i=7616 + + + + 4194304 + + + DataTypeDefinition + + + + + + + i=7616 + + + + 8388608 + + + RolePermissions + + + + + + + i=7616 + + + + 16777216 + + + AccessRestrictions + + + + + + + i=7616 + + + + 33554431 + + + All + + + + + + + i=7616 + + + + 26501220 + + + BaseNode + + + + + + + i=7616 + + + + 26501348 + + + Object + + + + + + + i=7616 + + + + 26503268 + + + ObjectType + + + + + + + i=7616 + + + + 26571383 + + + Variable + + + + + + + i=7616 + + + + 28600438 + + + VariableType + + + + + + + i=7616 + + + + 26632548 + + + Method + + + + + + + i=7616 + + + + 26537060 + + + ReferenceType + + + + + + + i=7616 + + + + 26501356 + + + View + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=376 + + + 0 + AddNodesItem + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ParentNodeId + + i=18 + + -1 + + 0 + false + + + ReferenceTypeId + + i=17 + + -1 + + 0 + false + + + RequestedNewNodeId + + i=18 + + -1 + + 0 + false + + + BrowseName + + i=20 + + -1 + + 0 + false + + + NodeClass + + i=257 + + -1 + + 0 + false + + + NodeAttributes + + i=22 + + -1 + + 0 + false + + + TypeDefinition + + i=18 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=379 + + + 0 + AddReferencesItem + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SourceNodeId + + i=17 + + -1 + + 0 + false + + + ReferenceTypeId + + i=17 + + -1 + + 0 + false + + + IsForward + + i=1 + + -1 + + 0 + false + + + TargetServerUri + + i=12 + + -1 + + 0 + false + + + TargetNodeId + + i=18 + + -1 + + 0 + false + + + TargetNodeClass + + i=257 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=382 + + + 0 + DeleteNodesItem + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + NodeId + + i=17 + + -1 + + 0 + false + + + DeleteTargetReferences + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=385 + + + 0 + DeleteReferencesItem + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SourceNodeId + + i=17 + + -1 + + 0 + false + + + ReferenceTypeId + + i=17 + + -1 + + 0 + false + + + IsForward + + i=1 + + -1 + + 0 + false + + + TargetNodeId + + i=18 + + -1 + + 0 + false + + + DeleteBidirectional + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=347 + + + 0 + AttributeWriteMask + + + i=7 + + + + i=14799 + + + + + + 0 + + AccessLevel + + AccessLevel + + + 1 + + ArrayDimensions + + ArrayDimensions + + + 2 + + BrowseName + + BrowseName + + + 3 + + ContainsNoLoops + + ContainsNoLoops + + + 4 + + DataType + + DataType + + + 5 + + Description + + Description + + + 6 + + DisplayName + + DisplayName + + + 7 + + EventNotifier + + EventNotifier + + + 8 + + Executable + + Executable + + + 9 + + Historizing + + Historizing + + + 10 + + InverseName + + InverseName + + + 11 + + IsAbstract + + IsAbstract + + + 12 + + MinimumSamplingInterval + + MinimumSamplingInterval + + + 13 + + NodeClass + + NodeClass + + + 14 + + NodeId + + NodeId + + + 15 + + Symmetric + + Symmetric + + + 16 + + UserAccessLevel + + UserAccessLevel + + + 17 + + UserExecutable + + UserExecutable + + + 18 + + UserWriteMask + + UserWriteMask + + + 19 + + ValueRank + + ValueRank + + + 20 + + WriteMask + + WriteMask + + + 21 + + ValueForVariableType + + ValueForVariableType + + + 22 + + DataTypeDefinition + + DataTypeDefinition + + + 23 + + RolePermissions + + RolePermissions + + + 24 + + AccessRestrictions + + AccessRestrictions + + + 25 + + AccessLevelEx + + AccessLevelEx + + + + + + + Variable_2 + + i=15036 + + + 0 + OptionSetValues + + + i=46 + + + i=68 + + + i=78 + + 15036 + + + + + + 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 + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=521 + + + 0 + ContinuationPoint + + + i=15 + + + + DataType_64 + + i=537 + + + 0 + RelativePathElement + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ReferenceTypeId + + i=17 + + -1 + + 0 + false + + + IsInverse + + i=1 + + -1 + + 0 + false + + + IncludeSubtypes + + i=1 + + -1 + + 0 + false + + + TargetName + + i=20 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=540 + + + 0 + RelativePath + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Elements + + i=537 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=289 + + + 0 + Counter + + + i=7 + + + + DataType_64 + + i=291 + + + 0 + NumericRange + + + i=12 + + + + + DataType_64 + + i=293 + + + 0 + Date + + + i=13 + + + + DataType_64 + + i=331 + + + 0 + EndpointConfiguration + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + OperationTimeout + + i=6 + + -1 + + 0 + false + + + UseBinaryEncoding + + i=1 + + -1 + + 0 + false + + + MaxStringLength + + i=6 + + -1 + + 0 + false + + + MaxByteStringLength + + i=6 + + -1 + + 0 + false + + + MaxArrayLength + + i=6 + + -1 + + 0 + false + + + MaxMessageSize + + i=6 + + -1 + + 0 + false + + + MaxBufferSize + + i=6 + + -1 + + 0 + false + + + ChannelLifetime + + i=6 + + -1 + + 0 + false + + + SecurityTokenLifetime + + i=6 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=576 + + + 0 + FilterOperator + + + i=29 + + + + i=14799 + + + + + + 0 + + Equals + + Equals + + + 1 + + IsNull + + IsNull + + + 2 + + GreaterThan + + GreaterThan + + + 3 + + LessThan + + LessThan + + + 4 + + GreaterThanOrEqual + + GreaterThanOrEqual + + + 5 + + LessThanOrEqual + + LessThanOrEqual + + + 6 + + Like + + Like + + + 7 + + Not + + Not + + + 8 + + Between + + Between + + + 9 + + InList + + InList + + + 10 + + And + + And + + + 11 + + Or + + Or + + + 12 + + Cast + + Cast + + + 13 + + InView + + InView + + + 14 + + OfType + + OfType + + + 15 + + RelatedTo + + RelatedTo + + + 16 + + BitwiseAnd + + BitwiseAnd + + + 17 + + BitwiseOr + + BitwiseOr + + + + + + + Variable_2 + + i=7605 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7605 + + + + + + Equals + + + + IsNull + + + + GreaterThan + + + + LessThan + + + + GreaterThanOrEqual + + + + LessThanOrEqual + + + + Like + + + + Not + + + + Between + + + + InList + + + + And + + + + Or + + + + Cast + + + + InView + + + + OfType + + + + RelatedTo + + + + BitwiseAnd + + + + BitwiseOr + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=583 + + + 0 + ContentFilterElement + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + FilterOperator + + i=576 + + -1 + + 0 + false + + + FilterOperands + + i=22 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=586 + + + 0 + ContentFilter + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Elements + + i=583 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=589 + + + 0 + FilterOperand + + + i=22 + + + + DataType_64 + + i=592 + + + 0 + ElementOperand + + + i=589 + + + + i=14798 + + + + + i=589 + + Structure_0 + + + Index + + i=7 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=595 + + + 0 + LiteralOperand + + + i=589 + + + + i=14798 + + + + + i=589 + + Structure_0 + + + Value + + i=24 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=598 + + + 0 + AttributeOperand + + + i=589 + + + + i=14798 + + + + + i=589 + + Structure_0 + + + NodeId + + i=17 + + -1 + + 0 + false + + + Alias + + i=12 + + -1 + + 0 + false + + + BrowsePath + + i=540 + + -1 + + 0 + false + + + AttributeId + + i=288 + + -1 + + 0 + false + + + IndexRange + + i=291 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=601 + + + 0 + SimpleAttributeOperand + + + i=589 + + + + i=14798 + + + + + i=589 + + Structure_0 + + + TypeDefinitionId + + i=17 + + -1 + + 0 + false + + + BrowsePath + + i=20 + + 1 + + 0 + false + + + AttributeId + + i=288 + + -1 + + 0 + false + + + IndexRange + + i=291 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=659 + + + 0 + HistoryEvent + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Events + + i=920 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=11234 + + + 0 + HistoryUpdateType + + + i=29 + + + + i=14799 + + + + + + 1 + + Insert + + Insert + + + 2 + + Replace + + Replace + + + 3 + + Update + + Update + + + 4 + + Delete + + Delete + + + + + + + Variable_2 + + i=11884 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 11884 + + + + + + i=7616 + + + + 1 + + + Insert + + + + + + + i=7616 + + + + 2 + + + Replace + + + + + + + i=7616 + + + + 3 + + + Update + + + + + + + i=7616 + + + + 4 + + + Delete + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=11293 + + + 0 + PerformUpdateType + + + i=29 + + + + i=14799 + + + + + + 1 + + Insert + + Insert + + + 2 + + Replace + + Replace + + + 3 + + Update + + Update + + + 4 + + Remove + + Remove + + + + + + + Variable_2 + + i=11885 + + + 0 + EnumValues + + + i=46 + + + i=68 + + + i=78 + + 11885 + + + + + + i=7616 + + + + 1 + + + Insert + + + + + + + i=7616 + + + + 2 + + + Replace + + + + + + + i=7616 + + + + 3 + + + Update + + + + + + + i=7616 + + + + 4 + + + Remove + + + + + + + + + i=7594 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=719 + + + 0 + MonitoringFilter + + + i=22 + + + + DataType_64 + + i=725 + + + 0 + EventFilter + + + i=719 + + + + i=14798 + + + + + i=719 + + Structure_0 + + + SelectClauses + + i=601 + + 1 + + 0 + false + + + WhereClause + + i=586 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=948 + + + 0 + AggregateConfiguration + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + UseServerCapabilitiesDefaults + + i=1 + + -1 + + 0 + false + + + TreatUncertainAsBad + + i=1 + + -1 + + 0 + false + + + PercentDataBad + + i=3 + + -1 + + 0 + false + + + PercentDataGood + + i=3 + + -1 + + 0 + false + + + UseSlopedExtrapolation + + i=1 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=920 + + + 0 + HistoryEventFieldList + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + EventFields + + i=24 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=338 + + + 0 + BuildInfo + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ProductUri + + i=12 + + -1 + + 0 + false + + + ManufacturerName + + i=12 + + -1 + + 0 + false + + + ProductName + + i=12 + + -1 + + 0 + false + + + SoftwareVersion + + i=12 + + -1 + + 0 + false + + + BuildNumber + + i=12 + + -1 + + 0 + false + + + BuildDate + + i=294 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=851 + + + 0 + RedundancySupport + + + i=29 + + + + i=14799 + + + + + + 0 + + None + + None + + + 1 + + Cold + + Cold + + + 2 + + Warm + + Warm + + + 3 + + Hot + + Hot + + + 4 + + Transparent + + Transparent + + + 5 + + HotAndMirrored + + HotAndMirrored + + + + + + + Variable_2 + + i=7611 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7611 + + + + + + None + + + + Cold + + + + Warm + + + + Hot + + + + Transparent + + + + HotAndMirrored + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=852 + + + 0 + ServerState + + + i=29 + + + + i=14799 + + + + + + 0 + + Running + + Running + + + 1 + + Failed + + Failed + + + 2 + + NoConfiguration + + NoConfiguration + + + 3 + + Suspended + + Suspended + + + 4 + + Shutdown + + Shutdown + + + 5 + + Test + + Test + + + 6 + + CommunicationFault + + CommunicationFault + + + 7 + + Unknown + + Unknown + + + + + + + Variable_2 + + i=7612 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7612 + + + + + + Running + + + + Failed + + + + NoConfiguration + + + + Suspended + + + + Shutdown + + + + Test + + + + CommunicationFault + + + + Unknown + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=853 + + + 0 + RedundantServerDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ServerId + + i=12 + + -1 + + 0 + false + + + ServiceLevel + + i=3 + + -1 + + 0 + false + + + ServerState + + i=852 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=11943 + + + 0 + EndpointUrlListDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + EndpointUrlList + + i=12 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=11944 + + + 0 + NetworkGroupDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ServerUri + + i=12 + + -1 + + 0 + false + + + NetworkPaths + + i=11943 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=856 + + + 0 + SamplingIntervalDiagnosticsDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SamplingInterval + + i=290 + + -1 + + 0 + false + + + MonitoredItemCount + + i=7 + + -1 + + 0 + false + + + MaxMonitoredItemCount + + i=7 + + -1 + + 0 + false + + + DisabledMonitoredItemCount + + i=7 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=859 + + + 0 + ServerDiagnosticsSummaryDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + ServerViewCount + + i=7 + + -1 + + 0 + false + + + CurrentSessionCount + + i=7 + + -1 + + 0 + false + + + CumulatedSessionCount + + i=7 + + -1 + + 0 + false + + + SecurityRejectedSessionCount + + i=7 + + -1 + + 0 + false + + + RejectedSessionCount + + i=7 + + -1 + + 0 + false + + + SessionTimeoutCount + + i=7 + + -1 + + 0 + false + + + SessionAbortCount + + i=7 + + -1 + + 0 + false + + + CurrentSubscriptionCount + + i=7 + + -1 + + 0 + false + + + CumulatedSubscriptionCount + + i=7 + + -1 + + 0 + false + + + PublishingIntervalCount + + i=7 + + -1 + + 0 + false + + + SecurityRejectedRequestsCount + + i=7 + + -1 + + 0 + false + + + RejectedRequestsCount + + i=7 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=862 + + + 0 + ServerStatusDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + StartTime + + i=294 + + -1 + + 0 + false + + + CurrentTime + + i=294 + + -1 + + 0 + false + + + State + + i=852 + + -1 + + 0 + false + + + BuildInfo + + i=338 + + -1 + + 0 + false + + + SecondsTillShutdown + + i=7 + + -1 + + 0 + false + + + ShutdownReason + + i=21 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=865 + + + 0 + SessionDiagnosticsDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SessionId + + i=17 + + -1 + + 0 + false + + + SessionName + + i=12 + + -1 + + 0 + false + + + ClientDescription + + i=308 + + -1 + + 0 + false + + + ServerUri + + i=12 + + -1 + + 0 + false + + + EndpointUrl + + i=12 + + -1 + + 0 + false + + + LocaleIds + + i=295 + + 1 + + 0 + false + + + ActualSessionTimeout + + i=290 + + -1 + + 0 + false + + + MaxResponseMessageSize + + i=7 + + -1 + + 0 + false + + + ClientConnectionTime + + i=294 + + -1 + + 0 + false + + + ClientLastContactTime + + i=294 + + -1 + + 0 + false + + + CurrentSubscriptionsCount + + i=7 + + -1 + + 0 + false + + + CurrentMonitoredItemsCount + + i=7 + + -1 + + 0 + false + + + CurrentPublishRequestsInQueue + + i=7 + + -1 + + 0 + false + + + TotalRequestCount + + i=871 + + -1 + + 0 + false + + + UnauthorizedRequestCount + + i=7 + + -1 + + 0 + false + + + ReadCount + + i=871 + + -1 + + 0 + false + + + HistoryReadCount + + i=871 + + -1 + + 0 + false + + + WriteCount + + i=871 + + -1 + + 0 + false + + + HistoryUpdateCount + + i=871 + + -1 + + 0 + false + + + CallCount + + i=871 + + -1 + + 0 + false + + + CreateMonitoredItemsCount + + i=871 + + -1 + + 0 + false + + + ModifyMonitoredItemsCount + + i=871 + + -1 + + 0 + false + + + SetMonitoringModeCount + + i=871 + + -1 + + 0 + false + + + SetTriggeringCount + + i=871 + + -1 + + 0 + false + + + DeleteMonitoredItemsCount + + i=871 + + -1 + + 0 + false + + + CreateSubscriptionCount + + i=871 + + -1 + + 0 + false + + + ModifySubscriptionCount + + i=871 + + -1 + + 0 + false + + + SetPublishingModeCount + + i=871 + + -1 + + 0 + false + + + PublishCount + + i=871 + + -1 + + 0 + false + + + RepublishCount + + i=871 + + -1 + + 0 + false + + + TransferSubscriptionsCount + + i=871 + + -1 + + 0 + false + + + DeleteSubscriptionsCount + + i=871 + + -1 + + 0 + false + + + AddNodesCount + + i=871 + + -1 + + 0 + false + + + AddReferencesCount + + i=871 + + -1 + + 0 + false + + + DeleteNodesCount + + i=871 + + -1 + + 0 + false + + + DeleteReferencesCount + + i=871 + + -1 + + 0 + false + + + BrowseCount + + i=871 + + -1 + + 0 + false + + + BrowseNextCount + + i=871 + + -1 + + 0 + false + + + TranslateBrowsePathsToNodeIdsCount + + i=871 + + -1 + + 0 + false + + + QueryFirstCount + + i=871 + + -1 + + 0 + false + + + QueryNextCount + + i=871 + + -1 + + 0 + false + + + RegisterNodesCount + + i=871 + + -1 + + 0 + false + + + UnregisterNodesCount + + i=871 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=868 + + + 0 + SessionSecurityDiagnosticsDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SessionId + + i=17 + + -1 + + 0 + false + + + ClientUserIdOfSession + + i=12 + + -1 + + 0 + false + + + ClientUserIdHistory + + i=12 + + 1 + + 0 + false + + + AuthenticationMechanism + + i=12 + + -1 + + 0 + false + + + Encoding + + i=12 + + -1 + + 0 + false + + + TransportProtocol + + i=12 + + -1 + + 0 + false + + + SecurityMode + + i=302 + + -1 + + 0 + false + + + SecurityPolicyUri + + i=12 + + -1 + + 0 + false + + + ClientCertificate + + i=15 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=871 + + + 0 + ServiceCounterDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + TotalCount + + i=7 + + -1 + + 0 + false + + + ErrorCount + + i=7 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=299 + + + 0 + StatusResult + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + StatusCode + + i=19 + + -1 + + 0 + false + + + DiagnosticInfo + + i=25 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=874 + + + 0 + SubscriptionDiagnosticsDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + SessionId + + i=17 + + -1 + + 0 + false + + + SubscriptionId + + i=7 + + -1 + + 0 + false + + + Priority + + i=3 + + -1 + + 0 + false + + + PublishingInterval + + i=290 + + -1 + + 0 + false + + + MaxKeepAliveCount + + i=7 + + -1 + + 0 + false + + + MaxLifetimeCount + + i=7 + + -1 + + 0 + false + + + MaxNotificationsPerPublish + + i=7 + + -1 + + 0 + false + + + PublishingEnabled + + i=1 + + -1 + + 0 + false + + + ModifyCount + + i=7 + + -1 + + 0 + false + + + EnableCount + + i=7 + + -1 + + 0 + false + + + DisableCount + + i=7 + + -1 + + 0 + false + + + RepublishRequestCount + + i=7 + + -1 + + 0 + false + + + RepublishMessageRequestCount + + i=7 + + -1 + + 0 + false + + + RepublishMessageCount + + i=7 + + -1 + + 0 + false + + + TransferRequestCount + + i=7 + + -1 + + 0 + false + + + TransferredToAltClientCount + + i=7 + + -1 + + 0 + false + + + TransferredToSameClientCount + + i=7 + + -1 + + 0 + false + + + PublishRequestCount + + i=7 + + -1 + + 0 + false + + + DataChangeNotificationsCount + + i=7 + + -1 + + 0 + false + + + EventNotificationsCount + + i=7 + + -1 + + 0 + false + + + NotificationsCount + + i=7 + + -1 + + 0 + false + + + LatePublishRequestCount + + i=7 + + -1 + + 0 + false + + + CurrentKeepAliveCount + + i=7 + + -1 + + 0 + false + + + CurrentLifetimeCount + + i=7 + + -1 + + 0 + false + + + UnacknowledgedMessageCount + + i=7 + + -1 + + 0 + false + + + DiscardedMessageCount + + i=7 + + -1 + + 0 + false + + + MonitoredItemCount + + i=7 + + -1 + + 0 + false + + + DisabledMonitoredItemCount + + i=7 + + -1 + + 0 + false + + + MonitoringQueueOverflowCount + + i=7 + + -1 + + 0 + false + + + NextSequenceNumber + + i=7 + + -1 + + 0 + false + + + EventQueueOverFlowCount + + i=7 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=877 + + + 0 + ModelChangeStructureDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Affected + + i=17 + + -1 + + 0 + false + + + AffectedType + + i=17 + + -1 + + 0 + false + + + Verb + + i=3 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=897 + + + 0 + SemanticChangeStructureDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Affected + + i=17 + + -1 + + 0 + false + + + AffectedType + + i=17 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=884 + + + 0 + Range + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Low + + i=11 + + -1 + + 0 + false + + + High + + i=11 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=887 + + + 0 + EUInformation + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + NamespaceUri + + i=12 + + -1 + + 0 + false + + + UnitId + + i=6 + + -1 + + 0 + false + + + DisplayName + + i=21 + + -1 + + 0 + false + + + Description + + i=21 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=12077 + + + 0 + AxisScaleEnumeration + + + i=29 + + + + i=14799 + + + + + + 0 + + Linear + + Linear + + + 1 + + Log + + Log + + + 2 + + Ln + + Ln + + + + + + + Variable_2 + + i=12078 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 12078 + + + + + + Linear + + + + Log + + + + Ln + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + DataType_64 + + i=12171 + + + 0 + ComplexNumberType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Real + + i=10 + + -1 + + 0 + false + + + Imaginary + + i=10 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=12172 + + + 0 + DoubleComplexNumberType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Real + + i=11 + + -1 + + 0 + false + + + Imaginary + + i=11 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=12079 + + + 0 + AxisInformation + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + EngineeringUnits + + i=887 + + -1 + + 0 + false + + + EURange + + i=884 + + -1 + + 0 + false + + + Title + + i=21 + + -1 + + 0 + false + + + AxisScaleType + + i=12077 + + -1 + + 0 + false + + + AxisSteps + + i=11 + + 1 + + 0 + false + + + + + + + + DataType_64 + + i=12080 + + + 0 + XVType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + X + + i=11 + + -1 + + 0 + false + + + Value + + i=10 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=894 + + + 0 + ProgramDiagnosticDataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + CreateSessionId + + i=17 + + -1 + + 0 + false + + + CreateClientName + + i=12 + + -1 + + 0 + false + + + InvocationCreationTime + + i=294 + + -1 + + 0 + false + + + LastTransitionTime + + i=294 + + -1 + + 0 + false + + + LastMethodCall + + i=12 + + -1 + + 0 + false + + + LastMethodSessionId + + i=17 + + -1 + + 0 + false + + + LastMethodInputArguments + + i=296 + + 1 + + 0 + false + + + LastMethodOutputArguments + + i=296 + + 1 + + 0 + false + + + LastMethodCallTime + + i=294 + + -1 + + 0 + false + + + LastMethodReturnStatus + + i=299 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=15396 + + + 0 + ProgramDiagnostic2DataType + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + CreateSessionId + + i=17 + + -1 + + 0 + false + + + CreateClientName + + i=12 + + -1 + + 0 + false + + + InvocationCreationTime + + i=294 + + -1 + + 0 + false + + + LastTransitionTime + + i=294 + + -1 + + 0 + false + + + LastMethodCall + + i=12 + + -1 + + 0 + false + + + LastMethodSessionId + + i=17 + + -1 + + 0 + false + + + LastMethodInputArguments + + i=296 + + 1 + + 0 + false + + + LastMethodOutputArguments + + i=296 + + 1 + + 0 + false + + + LastMethodInputValues + + i=24 + + 1 + + 0 + false + + + LastMethodOutputValues + + i=24 + + 1 + + 0 + false + + + LastMethodCallTime + + i=294 + + -1 + + 0 + false + + + LastMethodReturnStatus + + i=299 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=891 + + + 0 + Annotation + + + i=22 + + + + i=14798 + + + + + i=22 + + Structure_0 + + + Message + + i=12 + + -1 + + 0 + false + + + UserName + + i=12 + + -1 + + 0 + false + + + AnnotationTime + + i=294 + + -1 + + 0 + false + + + + + + + + DataType_64 + + i=890 + + + 0 + ExceptionDeviationFormat + + + i=29 + + + + i=14799 + + + + + + 0 + + AbsoluteValue + + AbsoluteValue + + + 1 + + PercentOfValue + + PercentOfValue + + + 2 + + PercentOfRange + + PercentOfRange + + + 3 + + PercentOfEURange + + PercentOfEURange + + + 4 + + Unknown + + Unknown + + + + + + + Variable_2 + + i=7614 + + + 0 + EnumStrings + + + i=46 + + + i=68 + + + i=78 + + 7614 + + + + + + AbsoluteValue + + + + PercentOfValue + + + + PercentOfRange + + + + PercentOfEURange + + + + Unknown + + + + + + i=21 + + 1 + 0 + 1 + 1 + + + + Object_1 + + i=14846 + + + 0 + Default Binary + + + i=76 + + 14846 + + + + i=38 + + true + + i=14533 + + + + + i=39 + + + i=14873 + + + + + + Object_1 + + i=15671 + + + 0 + Default Binary + + + i=76 + + 15671 + + + + i=38 + + true + + i=15528 + + + + + i=39 + + + i=15734 + + + + + + Object_1 + + i=18815 + + + 0 + Default Binary + + + i=76 + + 18815 + + + + i=38 + + true + + i=18806 + + + + + i=39 + + + i=18824 + + + + + + Object_1 + + i=18816 + + + 0 + Default Binary + + + i=76 + + 18816 + + + + i=38 + + true + + i=18807 + + + + + i=39 + + + i=18827 + + + + + + Object_1 + + i=18817 + + + 0 + Default Binary + + + i=76 + + 18817 + + + + i=38 + + true + + i=18808 + + + + + i=39 + + + i=18830 + + + + + + Object_1 + + i=18818 + + + 0 + Default Binary + + + i=76 + + 18818 + + + + i=38 + + true + + i=18809 + + + + + i=39 + + + i=18833 + + + + + + Object_1 + + i=18819 + + + 0 + Default Binary + + + i=76 + + 18819 + + + + i=38 + + true + + i=18810 + + + + + i=39 + + + i=18836 + + + + + + Object_1 + + i=18820 + + + 0 + Default Binary + + + i=76 + + 18820 + + + + i=38 + + true + + i=18811 + + + + + i=39 + + + i=18839 + + + + + + Object_1 + + i=18821 + + + 0 + Default Binary + + + i=76 + + 18821 + + + + i=38 + + true + + i=18812 + + + + + i=39 + + + i=18842 + + + + + + Object_1 + + i=18822 + + + 0 + Default Binary + + + i=76 + + 18822 + + + + i=38 + + true + + i=18813 + + + + + i=39 + + + i=18845 + + + + + + Object_1 + + i=18823 + + + 0 + Default Binary + + + i=76 + + 18823 + + + + i=38 + + true + + i=18814 + + + + + i=39 + + + i=18848 + + + + + + Object_1 + + i=15736 + + + 0 + Default Binary + + + i=76 + + 15736 + + + + i=38 + + true + + i=15634 + + + + + i=39 + + + i=15738 + + + + + + Object_1 + + i=23507 + + + 0 + Default Binary + + + i=76 + + 23507 + + + + i=38 + + true + + i=23498 + + + + + i=39 + + + i=23514 + + + + + + Object_1 + + i=12680 + + + 0 + Default Binary + + + i=76 + + 12680 + + + + i=38 + + true + + i=12554 + + + + + i=39 + + + i=12681 + + + + + + Object_1 + + i=15676 + + + 0 + Default Binary + + + i=76 + + 15676 + + + + i=38 + + true + + i=15534 + + + + + i=39 + + + i=15741 + + + + + + Object_1 + + i=125 + + + 0 + Default Binary + + + i=76 + + 125 + + + + i=38 + + true + + i=14525 + + + + + i=39 + + + i=14855 + + + + + + Object_1 + + i=126 + + + 0 + Default Binary + + + i=76 + + 126 + + + + i=38 + + true + + i=15487 + + + + + i=39 + + + i=15599 + + + + + + Object_1 + + i=127 + + + 0 + Default Binary + + + i=76 + + 127 + + + + i=38 + + true + + i=15488 + + + + + i=39 + + + i=15602 + + + + + + Object_1 + + i=15421 + + + 0 + Default Binary + + + i=76 + + 15421 + + + + i=38 + + true + + i=15005 + + + + + i=39 + + + i=15501 + + + + + + Object_1 + + i=15422 + + + 0 + Default Binary + + + i=76 + + 15422 + + + + i=38 + + true + + i=15006 + + + + + i=39 + + + i=15521 + + + + + + Object_1 + + i=124 + + + 0 + Default Binary + + + i=76 + + 124 + + + + i=38 + + true + + i=14523 + + + + + i=39 + + + i=14849 + + + + + + Object_1 + + i=14839 + + + 0 + Default Binary + + + i=76 + + 14839 + + + + i=38 + + true + + i=14524 + + + + + i=39 + + + i=14852 + + + + + + Object_1 + + i=14847 + + + 0 + Default Binary + + + i=76 + + 14847 + + + + i=38 + + true + + i=14593 + + + + + i=39 + + + i=14876 + + + + + + Object_1 + + i=15677 + + + 0 + Default Binary + + + i=76 + + 15677 + + + + i=38 + + true + + i=15578 + + + + + i=39 + + + i=15766 + + + + + + Object_1 + + i=15678 + + + 0 + Default Binary + + + i=76 + + 15678 + + + + i=38 + + true + + i=15580 + + + + + i=39 + + + i=15769 + + + + + + Object_1 + + i=14323 + + + 0 + Default Binary + + + i=76 + + 14323 + + + + i=38 + + true + + i=14273 + + + + + i=39 + + + i=14324 + + + + + + Object_1 + + i=15679 + + + 0 + Default Binary + + + i=76 + + 15679 + + + + i=38 + + true + + i=15581 + + + + + i=39 + + + i=15772 + + + + + + Object_1 + + i=15681 + + + 0 + Default Binary + + + i=76 + + 15681 + + + + i=38 + + true + + i=15582 + + + + + i=39 + + + i=15775 + + + + + + Object_1 + + i=15682 + + + 0 + Default Binary + + + i=76 + + 15682 + + + + i=38 + + true + + i=15597 + + + + + i=39 + + + i=15778 + + + + + + Object_1 + + i=15683 + + + 0 + Default Binary + + + i=76 + + 15683 + + + + i=38 + + true + + i=15598 + + + + + i=39 + + + i=15781 + + + + + + Object_1 + + i=15688 + + + 0 + Default Binary + + + i=76 + + 15688 + + + + i=38 + + true + + i=15605 + + + + + i=39 + + + i=15784 + + + + + + Object_1 + + i=15689 + + + 0 + Default Binary + + + i=76 + + 15689 + + + + i=38 + + true + + i=15609 + + + + + i=39 + + + i=15787 + + + + + + Object_1 + + i=21150 + + + 0 + Default Binary + + + i=76 + + 21150 + + + + i=38 + + true + + i=15480 + + + + + i=39 + + + i=21156 + + + + + + Object_1 + + i=15691 + + + 0 + Default Binary + + + i=76 + + 15691 + + + + i=38 + + true + + i=15611 + + + + + i=39 + + + i=15793 + + + + + + Object_1 + + i=15693 + + + 0 + Default Binary + + + i=76 + + 15693 + + + + i=38 + + true + + i=15616 + + + + + i=39 + + + i=15854 + + + + + + Object_1 + + i=15694 + + + 0 + Default Binary + + + i=76 + + 15694 + + + + i=38 + + true + + i=15617 + + + + + i=39 + + + i=15857 + + + + + + Object_1 + + i=15695 + + + 0 + Default Binary + + + i=76 + + 15695 + + + + i=38 + + true + + i=15618 + + + + + i=39 + + + i=15860 + + + + + + Object_1 + + i=21151 + + + 0 + Default Binary + + + i=76 + + 21151 + + + + i=38 + + true + + i=15502 + + + + + i=39 + + + i=21159 + + + + + + Object_1 + + i=21152 + + + 0 + Default Binary + + + i=76 + + 21152 + + + + i=38 + + true + + i=15510 + + + + + i=39 + + + i=21162 + + + + + + Object_1 + + i=21153 + + + 0 + Default Binary + + + i=76 + + 21153 + + + + i=38 + + true + + i=15520 + + + + + i=39 + + + i=21165 + + + + + + Object_1 + + i=15701 + + + 0 + Default Binary + + + i=76 + + 15701 + + + + i=38 + + true + + i=15621 + + + + + i=39 + + + i=15866 + + + + + + Object_1 + + i=15702 + + + 0 + Default Binary + + + i=76 + + 15702 + + + + i=38 + + true + + i=15622 + + + + + i=39 + + + i=15869 + + + + + + Object_1 + + i=15703 + + + 0 + Default Binary + + + i=76 + + 15703 + + + + i=38 + + true + + i=15623 + + + + + i=39 + + + i=15872 + + + + + + Object_1 + + i=15705 + + + 0 + Default Binary + + + i=76 + + 15705 + + + + i=38 + + true + + i=15628 + + + + + i=39 + + + i=15877 + + + + + + Object_1 + + i=15706 + + + 0 + Default Binary + + + i=76 + + 15706 + + + + i=38 + + true + + i=15629 + + + + + i=39 + + + i=15880 + + + + + + Object_1 + + i=15707 + + + 0 + Default Binary + + + i=76 + + 15707 + + + + i=38 + + true + + i=15630 + + + + + i=39 + + + i=15883 + + + + + + Object_1 + + i=15712 + + + 0 + Default Binary + + + i=76 + + 15712 + + + + i=38 + + true + + i=15631 + + + + + i=39 + + + i=15886 + + + + + + Object_1 + + i=14848 + + + 0 + Default Binary + + + i=76 + + 14848 + + + + i=38 + + true + + i=14744 + + + + + i=39 + + + i=21002 + + + + + + Object_1 + + i=15713 + + + 0 + Default Binary + + + i=76 + + 15713 + + + + i=38 + + true + + i=15635 + + + + + i=39 + + + i=15889 + + + + + + Object_1 + + i=21154 + + + 0 + Default Binary + + + i=76 + + 21154 + + + + i=38 + + true + + i=15530 + + + + + i=39 + + + i=21168 + + + + + + Object_1 + + i=15715 + + + 0 + Default Binary + + + i=76 + + 15715 + + + + i=38 + + true + + i=15645 + + + + + i=39 + + + i=15895 + + + + + + Object_1 + + i=15717 + + + 0 + Default Binary + + + i=76 + + 15717 + + + + i=38 + + true + + i=15652 + + + + + i=39 + + + i=15898 + + + + + + Object_1 + + i=15718 + + + 0 + Default Binary + + + i=76 + + 15718 + + + + i=38 + + true + + i=15653 + + + + + i=39 + + + i=15919 + + + + + + Object_1 + + i=15719 + + + 0 + Default Binary + + + i=76 + + 15719 + + + + i=38 + + true + + i=15657 + + + + + i=39 + + + i=15922 + + + + + + Object_1 + + i=15724 + + + 0 + Default Binary + + + i=76 + + 15724 + + + + i=38 + + true + + i=15664 + + + + + i=39 + + + i=15925 + + + + + + Object_1 + + i=15725 + + + 0 + Default Binary + + + i=76 + + 15725 + + + + i=38 + + true + + i=15665 + + + + + i=39 + + + i=15931 + + + + + + Object_1 + + i=17468 + + + 0 + Default Binary + + + i=76 + + 17468 + + + + i=38 + + true + + i=17467 + + + + + i=39 + + + i=17469 + + + + + + Object_1 + + i=21155 + + + 0 + Default Binary + + + i=76 + + 21155 + + + + i=38 + + true + + i=15532 + + + + + i=39 + + + i=21171 + + + + + + Object_1 + + i=15479 + + + 0 + Default Binary + + + i=76 + + 15479 + + + + i=38 + + true + + i=15007 + + + + + i=39 + + + i=15524 + + + + + + Object_1 + + i=15727 + + + 0 + Default Binary + + + i=76 + + 15727 + + + + i=38 + + true + + i=15667 + + + + + i=39 + + + i=15940 + + + + + + Object_1 + + i=15729 + + + 0 + Default Binary + + + i=76 + + 15729 + + + + i=38 + + true + + i=15669 + + + + + i=39 + + + i=15943 + + + + + + Object_1 + + i=15733 + + + 0 + Default Binary + + + i=76 + + 15733 + + + + i=38 + + true + + i=15670 + + + + + i=39 + + + i=15946 + + + + + + Object_1 + + i=23499 + + + 0 + Default Binary + + + i=76 + + 23499 + + + + i=38 + + true + + i=23468 + + + + + i=39 + + + i=23502 + + + + + + Object_1 + + i=128 + + + 0 + Default Binary + + + i=76 + + 128 + + + + i=38 + + true + + i=96 + + + + + i=39 + + + i=16131 + + + + + + Object_1 + + i=121 + + + 0 + Default Binary + + + i=76 + + 121 + + + + i=38 + + true + + i=97 + + + + + i=39 + + + i=18178 + + + + + + Object_1 + + i=14844 + + + 0 + Default Binary + + + i=76 + + 14844 + + + + i=38 + + true + + i=101 + + + + + i=39 + + + i=18181 + + + + + + Object_1 + + i=122 + + + 0 + Default Binary + + + i=76 + + 122 + + + + i=38 + + true + + i=99 + + + + + i=39 + + + i=18184 + + + + + + Object_1 + + i=123 + + + 0 + Default Binary + + + i=76 + + 123 + + + + i=38 + + true + + i=100 + + + + + i=39 + + + i=18187 + + + + + + Object_1 + + i=298 + + + 0 + Default Binary + + + i=76 + + 298 + + + + i=38 + + true + + i=296 + + + + + i=39 + + + i=7650 + + + + + + Object_1 + + i=8251 + + + 0 + Default Binary + + + i=76 + + 8251 + + + + i=38 + + true + + i=7594 + + + + + i=39 + + + i=7656 + + + + + + Object_1 + + i=14845 + + + 0 + Default Binary + + + i=76 + + 14845 + + + + i=38 + + true + + i=102 + + + + + i=39 + + + i=14870 + + + + + + Object_1 + + i=12765 + + + 0 + Default Binary + + + i=76 + + 12765 + + + + i=38 + + true + + i=12755 + + + + + i=39 + + + i=12767 + + + + + + Object_1 + + i=12766 + + + 0 + Default Binary + + + i=76 + + 12766 + + + + i=38 + + true + + i=12756 + + + + + i=39 + + + i=12770 + + + + + + Object_1 + + i=8917 + + + 0 + Default Binary + + + i=76 + + 8917 + + + + i=38 + + true + + i=8912 + + + + + i=39 + + + i=8914 + + + + + + Object_1 + + i=310 + + + 0 + Default Binary + + + i=76 + + 310 + + + + i=38 + + true + + i=308 + + + + + i=39 + + + i=7665 + + + + + + Object_1 + + i=12207 + + + 0 + Default Binary + + + i=76 + + 12207 + + + + i=38 + + true + + i=12189 + + + + + i=39 + + + i=12213 + + + + + + Object_1 + + i=306 + + + 0 + Default Binary + + + i=76 + + 306 + + + + i=38 + + true + + i=304 + + + + + i=39 + + + i=7662 + + + + + + Object_1 + + i=314 + + + 0 + Default Binary + + + i=76 + + 314 + + + + i=38 + + true + + i=312 + + + + + i=39 + + + i=7668 + + + + + + Object_1 + + i=434 + + + 0 + Default Binary + + + i=76 + + 434 + + + + i=38 + + true + + i=432 + + + + + i=39 + + + i=7782 + + + + + + Object_1 + + i=12900 + + + 0 + Default Binary + + + i=76 + + 12900 + + + + i=38 + + true + + i=12890 + + + + + i=39 + + + i=12902 + + + + + + Object_1 + + i=12901 + + + 0 + Default Binary + + + i=76 + + 12901 + + + + i=38 + + true + + i=12891 + + + + + i=39 + + + i=12905 + + + + + + Object_1 + + i=346 + + + 0 + Default Binary + + + i=76 + + 346 + + + + i=38 + + true + + i=344 + + + + + i=39 + + + i=7698 + + + + + + Object_1 + + i=318 + + + 0 + Default Binary + + + i=76 + + 318 + + + + i=38 + + true + + i=316 + + + + + i=39 + + + i=7671 + + + + + + Object_1 + + i=321 + + + 0 + Default Binary + + + i=76 + + 321 + + + + i=38 + + true + + i=319 + + + + + i=39 + + + i=7674 + + + + + + Object_1 + + i=324 + + + 0 + Default Binary + + + i=76 + + 324 + + + + i=38 + + true + + i=322 + + + + + i=39 + + + i=7677 + + + + + + Object_1 + + i=327 + + + 0 + Default Binary + + + i=76 + + 327 + + + + i=38 + + true + + i=325 + + + + + i=39 + + + i=7680 + + + + + + Object_1 + + i=940 + + + 0 + Default Binary + + + i=76 + + 940 + + + + i=38 + + true + + i=938 + + + + + i=39 + + + i=7683 + + + + + + Object_1 + + i=378 + + + 0 + Default Binary + + + i=76 + + 378 + + + + i=38 + + true + + i=376 + + + + + i=39 + + + i=7728 + + + + + + Object_1 + + i=381 + + + 0 + Default Binary + + + i=76 + + 381 + + + + i=38 + + true + + i=379 + + + + + i=39 + + + i=7731 + + + + + + Object_1 + + i=384 + + + 0 + Default Binary + + + i=76 + + 384 + + + + i=38 + + true + + i=382 + + + + + i=39 + + + i=7734 + + + + + + Object_1 + + i=387 + + + 0 + Default Binary + + + i=76 + + 387 + + + + i=38 + + true + + i=385 + + + + + i=39 + + + i=7737 + + + + + + Object_1 + + i=539 + + + 0 + Default Binary + + + i=76 + + 539 + + + + i=38 + + true + + i=537 + + + + + i=39 + + + i=12718 + + + + + + Object_1 + + i=542 + + + 0 + Default Binary + + + i=76 + + 542 + + + + i=38 + + true + + i=540 + + + + + i=39 + + + i=12721 + + + + + + Object_1 + + i=333 + + + 0 + Default Binary + + + i=76 + + 333 + + + + i=38 + + true + + i=331 + + + + + i=39 + + + i=7686 + + + + + + Object_1 + + i=585 + + + 0 + Default Binary + + + i=76 + + 585 + + + + i=38 + + true + + i=583 + + + + + i=39 + + + i=7929 + + + + + + Object_1 + + i=588 + + + 0 + Default Binary + + + i=76 + + 588 + + + + i=38 + + true + + i=586 + + + + + i=39 + + + i=7932 + + + + + + Object_1 + + i=591 + + + 0 + Default Binary + + + i=76 + + 591 + + + + i=38 + + true + + i=589 + + + + + i=39 + + + i=7935 + + + + + + Object_1 + + i=594 + + + 0 + Default Binary + + + i=76 + + 594 + + + + i=38 + + true + + i=592 + + + + + i=39 + + + i=7938 + + + + + + Object_1 + + i=597 + + + 0 + Default Binary + + + i=76 + + 597 + + + + i=38 + + true + + i=595 + + + + + i=39 + + + i=7941 + + + + + + Object_1 + + i=600 + + + 0 + Default Binary + + + i=76 + + 600 + + + + i=38 + + true + + i=598 + + + + + i=39 + + + i=7944 + + + + + + Object_1 + + i=603 + + + 0 + Default Binary + + + i=76 + + 603 + + + + i=38 + + true + + i=601 + + + + + i=39 + + + i=7947 + + + + + + Object_1 + + i=661 + + + 0 + Default Binary + + + i=76 + + 661 + + + + i=38 + + true + + i=659 + + + + + i=39 + + + i=8004 + + + + + + Object_1 + + i=721 + + + 0 + Default Binary + + + i=76 + + 721 + + + + i=38 + + true + + i=719 + + + + + i=39 + + + i=8067 + + + + + + Object_1 + + i=727 + + + 0 + Default Binary + + + i=76 + + 727 + + + + i=38 + + true + + i=725 + + + + + i=39 + + + i=8073 + + + + + + Object_1 + + i=950 + + + 0 + Default Binary + + + i=76 + + 950 + + + + i=38 + + true + + i=948 + + + + + i=39 + + + i=8076 + + + + + + Object_1 + + i=922 + + + 0 + Default Binary + + + i=76 + + 922 + + + + i=38 + + true + + i=920 + + + + + i=39 + + + i=8172 + + + + + + Object_1 + + i=340 + + + 0 + Default Binary + + + i=76 + + 340 + + + + i=38 + + true + + i=338 + + + + + i=39 + + + i=7692 + + + + + + Object_1 + + i=855 + + + 0 + Default Binary + + + i=76 + + 855 + + + + i=38 + + true + + i=853 + + + + + i=39 + + + i=8208 + + + + + + Object_1 + + i=11957 + + + 0 + Default Binary + + + i=76 + + 11957 + + + + i=38 + + true + + i=11943 + + + + + i=39 + + + i=11959 + + + + + + Object_1 + + i=11958 + + + 0 + Default Binary + + + i=76 + + 11958 + + + + i=38 + + true + + i=11944 + + + + + i=39 + + + i=11962 + + + + + + Object_1 + + i=858 + + + 0 + Default Binary + + + i=76 + + 858 + + + + i=38 + + true + + i=856 + + + + + i=39 + + + i=8211 + + + + + + Object_1 + + i=861 + + + 0 + Default Binary + + + i=76 + + 861 + + + + i=38 + + true + + i=859 + + + + + i=39 + + + i=8214 + + + + + + Object_1 + + i=864 + + + 0 + Default Binary + + + i=76 + + 864 + + + + i=38 + + true + + i=862 + + + + + i=39 + + + i=8217 + + + + + + Object_1 + + i=867 + + + 0 + Default Binary + + + i=76 + + 867 + + + + i=38 + + true + + i=865 + + + + + i=39 + + + i=8220 + + + + + + Object_1 + + i=870 + + + 0 + Default Binary + + + i=76 + + 870 + + + + i=38 + + true + + i=868 + + + + + i=39 + + + i=8223 + + + + + + Object_1 + + i=873 + + + 0 + Default Binary + + + i=76 + + 873 + + + + i=38 + + true + + i=871 + + + + + i=39 + + + i=8226 + + + + + + Object_1 + + i=301 + + + 0 + Default Binary + + + i=76 + + 301 + + + + i=38 + + true + + i=299 + + + + + i=39 + + + i=7659 + + + + + + Object_1 + + i=876 + + + 0 + Default Binary + + + i=76 + + 876 + + + + i=38 + + true + + i=874 + + + + + i=39 + + + i=8229 + + + + + + Object_1 + + i=879 + + + 0 + Default Binary + + + i=76 + + 879 + + + + i=38 + + true + + i=877 + + + + + i=39 + + + i=8232 + + + + + + Object_1 + + i=899 + + + 0 + Default Binary + + + i=76 + + 899 + + + + i=38 + + true + + i=897 + + + + + i=39 + + + i=8235 + + + + + + Object_1 + + i=886 + + + 0 + Default Binary + + + i=76 + + 886 + + + + i=38 + + true + + i=884 + + + + + i=39 + + + i=8238 + + + + + + Object_1 + + i=889 + + + 0 + Default Binary + + + i=76 + + 889 + + + + i=38 + + true + + i=887 + + + + + i=39 + + + i=8241 + + + + + + Object_1 + + i=12181 + + + 0 + Default Binary + + + i=76 + + 12181 + + + + i=38 + + true + + i=12171 + + + + + i=39 + + + i=12183 + + + + + + Object_1 + + i=12182 + + + 0 + Default Binary + + + i=76 + + 12182 + + + + i=38 + + true + + i=12172 + + + + + i=39 + + + i=12186 + + + + + + Object_1 + + i=12089 + + + 0 + Default Binary + + + i=76 + + 12089 + + + + i=38 + + true + + i=12079 + + + + + i=39 + + + i=12091 + + + + + + Object_1 + + i=12090 + + + 0 + Default Binary + + + i=76 + + 12090 + + + + i=38 + + true + + i=12080 + + + + + i=39 + + + i=12094 + + + + + + Object_1 + + i=896 + + + 0 + Default Binary + + + i=76 + + 896 + + + + i=38 + + true + + i=894 + + + + + i=39 + + + i=8247 + + + + + + Object_1 + + i=15397 + + + 0 + Default Binary + + + i=76 + + 15397 + + + + i=38 + + true + + i=15396 + + + + + i=39 + + + i=15398 + + + + + + Object_1 + + i=893 + + + 0 + Default Binary + + + i=76 + + 893 + + + + i=38 + + true + + i=891 + + + + + i=39 + + + i=8244 + + + + + + Variable_2 + + i=7617 + + + 0 + Opc.Ua + + + i=72 + + 7617 + + + 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 +ICAgDQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlQk1QIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW1hZ2VHSUYiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJJbWFnZUpQRyI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkltYWdlUE5HIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iQXVkaW9EYXRhVHlwZSI+DQog +IDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkJpdEZpZWxkTWFz +a0RhdGFUeXBlIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IktleVZhbHVlUGFpciIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJLZXkiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVuZHBvaW50 +VHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFByb2ZpbGVVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IlJhdGlvbmFsTnVtYmVyIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVyYXRvciIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbm9taW5hdG9yIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJWZWN0b3IiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRFZl +Y3RvciIgQmFzZVR5cGU9InRuczpWZWN0b3IiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJZIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IloiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgQmFzZVR5cGU9InRuczpDYXJ0ZXNpYW5Db29y +ZGluYXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJYIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iWiIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3JpZW50YXRpb24i +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVlRE9yaWVudGF0aW9uIiBCYXNlVHlw +ZT0idG5zOk9yaWVudGF0aW9uIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkEiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQiIgVHlwZU5hbWU9Im9wYzpEb3Vi +bGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJG +cmFtZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVGhyZWVERnJhbWUiIEJhc2VUeXBl +PSJ0bnM6RnJhbWUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FydGVzaWFuQ29vcmRpbmF0ZXMi +IFR5cGVOYW1lPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJPcmllbnRhdGlvbiIgVHlwZU5hbWU9InRuczpUaHJlZURPcmllbnRhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJPcGVuRmlsZU1vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlJlYWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IldyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJF +cmFzZUV4aXN0aW5nIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJBcHBlbmQiIFZhbHVlPSI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBlIiBMZW5ndGhJbkJpdHM9 +IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyTmFtZSIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVGh1bWJwcmludCIgVmFsdWU9IjIi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUm9sZSIgVmFsdWU9IjMiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBJZCIgVmFsdWU9IjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQW5vbnltb3VzIiBWYWx1ZT0iNSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBdXRoZW50aWNhdGVkVXNlciIgVmFsdWU9IjYiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWFUeXBlIiBUeXBlTmFtZT0idG5zOklkZW50aXR5 +Q3JpdGVyaWFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWEiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpY0NvZGUiIFR5cGVOYW1lPSJvcGM6 +SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeHBvbmVudCIgVHlwZU5hbWU9Im9wYzpT +Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFscGhhYmV0aWNDb2RlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbmN5IiBUeXBlTmFtZT0i +dWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpF +bnVtZXJhdGVkVHlwZSBOYW1lPSJUcnVzdExpc3RNYXNrcyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENlcnRpZmljYXRlcyIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENybHMiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgVmFs +dWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSXNzdWVyQ3JscyIgVmFs +dWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMTUi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iVHJ1c3RMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkTGlzdHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVz +IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENlcnRp +ZmljYXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZUcnVzdGVkQ3JscyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRydXN0ZWRDcmxzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENybHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZklzc3VlckNybHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc3N1ZXJDcmxzIiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ3JscyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWNpbWFsRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2NhbGUiIFR5cGVOYW1lPSJvcGM6SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1l +c3BhY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFt +ZXNwYWNlcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlw +ZXMiIFR5cGVOYW1lPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +U3RydWN0dXJlRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRh +VHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVt +RGF0YVR5cGVzIiBUeXBlTmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbnVtRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFU +eXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBs +ZURhdGFUeXBlcyIgVHlwZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZp +ZWxkPSJOb09mU2ltcGxlRGF0YVR5cGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN0cnVjdHVyZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVk +TmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iRW51bURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3Jp +cHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGVm +aW5pdGlvbiIgVHlwZU5hbWU9InRuczpFbnVtRGVmaW5pdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkJ1aWx0SW5UeXBlIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2ltcGxlVHlwZURlc2Ny +aXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBl +TmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp +b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsdEluVHlwZSIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlVBQmluYXJ5RmlsZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlU2No +ZW1hSGVhZGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0 +bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3RydWN0dXJlRGF0YVR5 +cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlwZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0YVR5cGVzIiBUeXBl +TmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURhdGFUeXBlcyIgVHlw +ZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2ltcGxl +RGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2NoZW1hTG9jYXRpb24iIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpbGVIZWFkZXIi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWxlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWxlSGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQm9keSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +UHViU3ViU3RhdGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQYXVzZWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik9wZXJhdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJFcnJvciIgVmFsdWU9IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldE1ldGFEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpE +YXRhVHlwZVNjaGVtYUhlYWRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmFtZXNwYWNl +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFj +ZXMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZk5hbWVzcGFjZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RydWN0dXJlRGF0YVR5cGVzIiBU +eXBlTmFtZT0idG5zOlN0cnVjdHVyZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlN0cnVj +dHVyZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbnVtRGF0YVR5cGVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURhdGFU +eXBlcyIgVHlwZU5hbWU9InRuczpFbnVtRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW51 +bURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTaW1wbGVEYXRhVHlwZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaW1wbGVEYXRh +VHlwZXMiIFR5cGVOYW1lPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0i +Tm9PZlNpbXBsZURhdGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZp +ZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxk +cyIgVHlwZU5hbWU9InRuczpGaWVsZE1ldGFEYXRhIiBMZW5ndGhGaWVsZD0iTm9PZkZpZWxkcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1 +aWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbiIgVHlwZU5h +bWU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkTWV0YURhdGEiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlv +biIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJG +aWVsZEZsYWdzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRGaWVsZEZsYWdzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnVpbHRJblR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZElkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUHJvcGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQ +YWlyIiBMZW5ndGhGaWVsZD0iTm9PZlByb3BlcnRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIExl +bmd0aEluQml0cz0iMTYiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJQcm9tb3RlZEZpZWxkIiBWYWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFU +eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNaW5vclZlcnNpb24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hlZERhdGFT +ZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0Rm9sZGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldEZvbGRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZp +ZWxkPSJOb09mRGF0YVNldEZvbGRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRN +ZXRhRGF0YSIgVHlwZU5hbWU9InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgVHlwZU5hbWU9InRuczpLZXlW +YWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRXh0ZW5zaW9uRmllbGRzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldFNvdXJjZSIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ0ludGVydmFs +SGludCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFk +YmFuZFR5cGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVhZGJhbmRWYWx1ZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnN0aXR1dGVWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0YURhdGFQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZNZXRhRGF0YVByb3BlcnRpZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +UHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNl +dFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdWJsaXNoZWREYXRh +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVk +RGF0YSIgVHlwZU5hbWU9InRuczpQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlB1Ymxpc2hlZERhdGEiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIEJhc2VUeXBl +PSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkV2ZW50Tm90aWZpZXIiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mU2VsZWN0ZWRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RlZEZpZWxkcyIgVHlwZU5hbWU9InRuczpTaW1wbGVBdHRy +aWJ1dGVPcGVyYW5kIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdGVkRmllbGRzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0 +YVNldEZpZWxkQ29udGVudE1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVl +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNDb2RlIiBWYWx1ZT0iMSIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2VUaW1lc3RhbXAiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclRpbWVzdGFtcCIgVmFsdWU9 +IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU291cmNlUGljb1NlY29uZHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlclBpY29T +ZWNvbmRzIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmF3 +RGF0YSIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0RmllbGRDb250 +ZW50TWFzayIgVHlwZU5hbWU9InRuczpEYXRhU2V0RmllbGRDb250ZW50TWFzayIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldFdyaXRlclBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkRh +dGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJNZXNzYWdlU2V0dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlNb2RlIiBUeXBlTmFtZT0idG5zOk1lc3NhZ2VT +ZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlY3VyaXR5 +S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24i +IExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0i +dG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3Jp +dGVyR3JvdXBEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBl +PSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJs +ZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0 +YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5h +bWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5 +U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUi +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5 +cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGll +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlckdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6 +VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVydmFsIiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IktlZXBBbGl2ZVRpbWUi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHki +IFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJ +ZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkhlYWRlckxheW91dFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VTZXR0 +aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRXcml0ZXJzIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRXcml0ZXJE +YXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhU2V0V3JpdGVycyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91 +cE1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHViU3ViQ29u +bmVjdGlvbkRhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUHVibGlzaGVySWQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25Qcm9wZXJ0aWVzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvblBy +b3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkNv +bm5lY3Rpb25Qcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0U2V0 +dGluZ3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVyR3JvdXBzIiBUeXBlTmFtZT0idG5zOldyaXRlckdyb3VwRGF0YVR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mV3JpdGVyR3JvdXBzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlYWRlckdyb3VwcyIgVHlwZU5hbWU9InRuczpSZWFkZXJHcm91cERhdGFUeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlJlYWRlckdyb3VwcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmV0d29ya0ludGVyZmFjZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTmV0d29ya0FkZHJlc3NV +cmxEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBT +b3VyY2VUeXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZGVyR3JvdXBEYXRhVHlwZSIg +QmFzZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBE +YXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5 +TW9kZSIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VU +eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERl +c2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJNYXhOZXR3b3JrTWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFs +dWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGllcyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRSZWFk +ZXJzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNl +dFJlYWRlcnMiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZkRhdGFTZXRSZWFkZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBl +TmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZXJJZCIg +VHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZXJHcm91 +cElkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFT +ZXRXcml0ZXJJZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEYXRhU2V0TWV0YURhdGEiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBlTmFtZT0i +dG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVz +c2FnZVJlY2VpdmVUaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdl +U2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlHcm91cElkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0 +eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mRGF0YVNldFJlYWRlclByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0UmVhZGVyUHJvcGVydGllcyIgVHlwZU5h +bWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFJlYWRlclByb3Bl +cnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5h +bWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN1YnNjcmliZWREYXRhU2V0IiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6U3Vic2NyaWJl +ZERhdGFTZXREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVGFyZ2V0VmFyaWFi +bGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +VmFyaWFibGVzIiBUeXBlTmFtZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIExlbmd0aEZpZWxk +PSJOb09mVGFyZ2V0VmFyaWFibGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldEZpZWxkSWQi +IFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlY2VpdmVySW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJU +YXJnZXROb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBdHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJXcml0ZUluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBUeXBlTmFtZT0idG5zOk92ZXJyaWRl +VmFsdWVIYW5kbGluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik92ZXJyaWRlVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgTGVuZ3RoSW5CaXRz +PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzYWJsZWQiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxhc3RVc2FibGVWYWx1ZSIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3ZlcnJpZGVWYWx1ZSIg +VmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgQmFzZVR5cGU9InRu +czpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVu +dE5vZGVOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25U +eXBlIiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJTdWJDb25maWd1cmF0 +aW9uRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlB1Ymxpc2hlZERhdGFTZXRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1lPSJ0bnM6UHVi +bGlzaGVkRGF0YVNldERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlB1Ymxpc2hlZERhdGFTZXRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvbnMiIFR5cGVOYW1lPSJ0 +bnM6UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbm5lY3Rpb25z +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5h +bWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlVuZGVmaW5lZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iQXNjZW5kaW5nV3JpdGVySWQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIgSXNP +cHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZh +bHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlB1Ymxpc2hlcklkIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHcm91cEhlYWRlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBWZXJz +aW9uIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOZXR3b3Jr +TWVzc2FnZU51bWJlciIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iUGF5bG9hZEhlYWRlciIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlRpbWVzdGFtcCIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJQaWNvU2Vjb25kcyIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEYXRhU2V0Q2xhc3NJZCIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQcm9tb3RlZEZpZWxkcyIgVmFsdWU9IjEwMjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVWFk +cFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T3JkZXJpbmci +IFR5cGVOYW1lPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6VWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ09mZnNl +dCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHVi +bGlzaGluZ09mZnNldCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlB1Ymxpc2hpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiBMZW5ndGhGaWVsZD0i +Tm9PZlB1Ymxpc2hpbmdPZmZzZXQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIExl +bmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJUaW1lc3RhbXAiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlBpY29TZWNvbmRzIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJTdGF0dXMiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik1ham9yVmVyc2lvbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWlub3JWZXJzaW9uIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iU2VxdWVuY2VOdW1iZXIiIFZhbHVlPSIzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3Nh +Z2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1l +PSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDb25maWd1cmVkU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQx +NiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwVmVy +c2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3 +b3JrTWVzc2FnZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEYXRhU2V0T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5z +OlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpVYWRwRGF0YVNldE1lc3Nh +Z2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZh +bCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNlaXZl +T2Zmc2V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTmV0d29ya01lc3NhZ2VIZWFkZXIiIFZhbHVlPSIxIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFTZXRNZXNzYWdlSGVhZGVyIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaW5nbGVEYXRhU2V0TWVz +c2FnZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHVibGlz +aGVySWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFT +ZXRDbGFzc0lkIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwbHlUbyIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgQmFz +ZVR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25OZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBMZW5n +dGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iRGF0YVNldFdyaXRlcklkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJNZXRhRGF0YVZlcnNpb24iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXAiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlN0YXR1cyIgVmFsdWU9IjE2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5h +bWU9InRuczpKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJKc29uRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5 +cGVOYW1lPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERh +dGFUeXBlIiBCYXNlVHlwZT0idG5zOkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBZGRyZXNzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9u +T2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9 +InRuczpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1lc3NhZ2VSZXBlYXRDb3VudCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTWVzc2FnZVJlcGVhdERlbGF5IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9r +ZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6Q29ubmVjdGlvblRy +YW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRpY2F0aW9u +UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0 +eU9mU2VydmljZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iTm90U3BlY2lmaWVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJCZXN0RWZmb3J0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBdExlYXN0T25jZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iQXRNb3N0T25jZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iRXhhY3RseU9uY2UiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNw +b3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2 +ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZp +Y2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5z +OkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJR +dWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0i +dG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNZXRhRGF0YVVwZGF0ZVRpbWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRh +U2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291 +cmNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1 +dGhlbnRpY2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgVHlwZU5hbWU9InRuczpC +cm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWV0YURhdGFRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkRpYWdub3N0aWNzTGV2 +ZWwiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJh +c2ljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBZHZhbmNl +ZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5mbyIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG9nIiBWYWx1ZT0iMyIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWJ1ZyIgVmFsdWU9IjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUHVi +U3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIExlbmd0aEluQml0cz0iMzIiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluZm9ybWF0aW9uIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcnJvciIgVmFsdWU9IjEiIC8+DQogIDwv +b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWxpYXNO +YW1lRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWxpYXNOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VkTm9kZXMiIFR5cGVOYW1lPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VkTm9kZXMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iSWRUeXBl +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOdW1l +cmljIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJpbmci +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikd1aWQiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9wYXF1ZSIgVmFsdWU9IjMi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTm9kZUNsYXNzIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJVbnNwZWNpZmllZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iT2JqZWN0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWYXJpYWJsZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTWV0aG9kIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJP +YmplY3RUeXBlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YXJpYWJsZVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJSZWZlcmVuY2VUeXBlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iRGF0YVR5cGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJWaWV3IiBWYWx1ZT0iMTI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 +b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlBlcm1pc3Npb25UeXBlIiBMZW5ndGhJbkJpdHM9IjMy +IiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u +ZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQnJvd3NlIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWFkUm9sZVBlcm1p +c3Npb25zIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0 +ZUF0dHJpYnV0ZSIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +V3JpdGVSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IldyaXRlSGlzdG9yaXppbmciIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJSZWFkIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJSZWFkSGlzdG9yeSIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJJbnNlcnRIaXN0b3J5IiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik1vZGlmeUhpc3RvcnkiIFZhbHVlPSI1MTIiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVsZXRlSGlzdG9yeSIgVmFsdWU9IjEwMjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVjZWl2ZUV2ZW50cyIgVmFsdWU9IjIwNDgiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2FsbCIgVmFsdWU9IjQwOTYiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkUmVmZXJlbmNlIiBWYWx1ZT0iODE5MiIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW1vdmVSZWZlcmVuY2UiIFZhbHVl +PSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWxldGVOb2RlIiBW +YWx1ZT0iMzI3NjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWRkTm9kZSIg +VmFsdWU9IjY1NTM2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkFjY2Vzc0xldmVsVHlwZSIgTGVuZ3RoSW5CaXRzPSI4IiBJc09wdGlv +blNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVudFJlYWQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkN1cnJlbnRXcml0ZSIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVJlYWQiIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3RvcnlXcml0ZSIg +VmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VtYW50aWNDaGFu +Z2UiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNX +cml0ZSIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRpbWVz +dGFtcFdyaXRlIiBWYWx1ZT0iNjQiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUiIExlbmd0aEluQml0cz0i +MzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJyZW50 +UmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVu +dFdyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0 +b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlz +dG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +ZW1hbnRpY0NoYW5nZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlN0YXR1c1dyaXRlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVGltZXN0YW1wV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25hdG9taWNSZWFkIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9Ik5vbmF0b21pY1dyaXRlIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlRnVsbEFycmF5T25seSIgVmFsdWU9IjEwMjQiIC8+ +DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0i +RXZlbnROb3RpZmllclR5cGUiIExlbmd0aEluQml0cz0iOCIgSXNPcHRpb25TZXQ9InRydWUiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1YnNjcmliZVRvRXZlbnRzIiBWYWx1ZT0iMSIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5UmVhZCIgVmFsdWU9IjQiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVdyaXRlIiBWYWx1ZT0iOCIg +Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l +PSJBY2Nlc3NSZXN0cmljdGlvblR5cGUiIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0 +cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaWduaW5nUmVxdWlyZWQiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkVuY3J5cHRpb25SZXF1aXJlZCIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2Vzc2lvblJlcXVp +cmVkIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6 +UGVybWlzc2lvblR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51 +bWVyYXRlZFR5cGUgTmFtZT0iU3RydWN0dXJlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RydWN0dXJlIiBWYWx1ZT0iMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJ1Y3R1cmVXaXRoT3B0aW9uYWxGaWVsZHMiIFZh +bHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVuaW9uIiBWYWx1ZT0i +MiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJTdHJ1Y3R1cmVGaWVsZCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT3B0aW9uYWwiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9InVh +Ok5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cnVjdHVyZVR5cGUiIFR5cGVOYW1l +PSJ0bnM6U3RydWN0dXJlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZGaWVsZHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWVsZHMiIFR5 +cGVOYW1lPSJ0bnM6U3RydWN0dXJlRmllbGQiIExlbmd0aEZpZWxkPSJOb09mRmllbGRzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVu +dW1EZWZpbml0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRmllbGRzIiBUeXBlTmFtZT0idG5zOkVudW1GaWVsZCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5h +bWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxv +Y2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5h +bWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRl +TWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIg +TGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBl +cm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBUeXBlTmFtZT0i +dG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJJbnN0YW5j +ZU5vZGUiIEJhc2VUeXBlPSJ0bnM6Tm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQi +IFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlw +ZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFt +ZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFt +ZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1p +c3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBl +TmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOk5vZGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlw +ZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIg +U291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2si +IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlzc2lv +bnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2VyUm9s +ZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUi +IExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBU +eXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJPYmplY3ROb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2Rl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVD +bGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93 +c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2Fs +aXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6 +Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl +cldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5h +bWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1p +c3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVm +ZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVO +b2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJ +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+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fi +c3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVOb2RlIiBCYXNlVHlwZT0i +dG5zOkluc3RhbmNlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5v +ZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVh +bGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9w +YzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJv +bGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3Bj +OlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1lbnNpb25z +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJheURpbWVu +c2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NMZXZlbCIgVHlwZU5hbWU9Im9w +YzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBUeXBlTmFt +ZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0 +b3JpemluZyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzTGV2ZWxFeCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmFyaWFibGVUeXBlTm9kZSIg +QmFzZVR5cGU9InRuczpUeXBlTm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0i +dWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5 +cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlz +c2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0i +dG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Np +b25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFt +ZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5 +cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1l +bnNpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJy +YXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJh +eURpbWVuc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFt +ZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIEJhc2VUeXBlPSJ0bnM6VHlwZU5v +ZGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIg +VHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNv +dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4 +dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1h +c2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xl +UGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVs +ZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 +cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJj +ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2Vz +IiBUeXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9v +bGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9Ik1ldGhvZE5vZGUiIEJhc2VUeXBlPSJ0bnM6SW5zdGFuY2VOb2Rl +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291 +cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5 +cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNr +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNl +VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Np +b25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBl +cm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJv +bGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBl +IiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIg +VHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9Im9w +YzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlZpZXdOb2RlIiBCYXNlVHlwZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9 +InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBUeXBlTmFtZT0i +dG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0i +dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9 +InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRu +czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9u +cyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9s +ZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJSb2xlUGVybWlz +c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2Vy +Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNlVHlwZT0idG5z +Ok5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5 +dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRGF0YVR5cGVOb2RlIiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZp +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 +aWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25P +YmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVmZXJlbmNlTm9kZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ludmVyc2UiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh +biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRhcmdldElkIiBUeXBlTmFtZT0idWE6RXhwYW5k +ZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQXJndW1lbnQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbnVtVmFs +dWVUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVudW1G +aWVsZCIgQmFzZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkludDY0IiBTb3VyY2VUeXBlPSJ0bnM6RW51bVZhbHVlVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj +ZVR5cGU9InRuczpFbnVtVmFsdWVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT3B0aW9uU2V0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWxpZEJpdHMiIFR5cGVOYW1lPSJvcGM6 +Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJVbmlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOb3JtYWxpemVk +U3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i +RGVjaW1hbFN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IkR1cmF0aW9uU3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9w +YXF1ZVR5cGUgTmFtZT0iVGltZVN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9w +YzpPcGFxdWVUeXBlIE5hbWU9IkRhdGVTdHJpbmciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQog +IDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEdXJhdGlvbiI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoN +CiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlV0Y1RpbWUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0K +DQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJMb2NhbGVJZCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaW1lWm9uZURhdGFUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9mZnNldCIgVHlw +ZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRheWxpZ2h0U2F2aW5n +SW5PZmZzZXQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkluZGV4Ij4NCiAgPC9vcGM6T3BhcXVlVHlw +ZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW50ZWdlcklkIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVyIiBW +YWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDbGllbnQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNsaWVudEFuZFNlcnZlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzY292ZXJ5U2Vy +dmVyIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXBwbGljYXRpb25O +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFwcGxpY2F0aW9uVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVByb2ZpbGVVcmkiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpc2NvdmVyeVVybHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlVcmxz +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuRGlhZ25vc3RpY3MiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXVkaXRFbnRyeUlkIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVvdXRIaW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZGl0aW9uYWxI +ZWFkZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0 +YW1wIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2aWNlUmVzdWx0IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZpY2VEaWFnbm9zdGljcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cmluZ1RhYmxlIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RyaW5nVGFibGUiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZlN0cmluZ1RhYmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWRkaXRpb25hbEhlYWRlciIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlZl +cnNpb25UaW1lIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNlcnZpY2VGYXVsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVcmlzVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVyaXNWZXJzaW9uIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZVcmlzVmVyc2lvbiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU2VydmVyVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJO +b09mU2VydmVyVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2Vzc2lv +bmxlc3NJbnZva2VSZXNwb25zZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5hbWVzcGFjZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZOYW1lc3BhY2VVcmlzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUlkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxl +SWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpbmRTZXJ2ZXJzUmVz +cG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6QXBwbGljYXRpb25EZXNj +cmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZlck9uTmV0d29yayIgQmFz +ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNvcmRJ +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJO +YW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Nv +dmVyeVVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtS +ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nUmVjb3JkSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVjb3Jkc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXR5Rmls +dGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVy +Q2FwYWJpbGl0eUZpbHRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +U2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTGFzdENvdW50ZXJSZXNldFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6U2VydmVyT25O +ZXR3b3JrIiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlcnMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlm +aWNhdGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iU2lnbiIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iU2lnbkFuZEVuY3J5cHQiIFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVzZXJUb2tlblR5cGUiIExlbmd0aEluQml0 +cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFub255bW91cyIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlck5hbWUiIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNlcnRpZmljYXRlIiBWYWx1ZT0i +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc3N1ZWRUb2tlbiIgVmFsdWU9 +IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iVXNlclRva2VuUG9saWN5IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuVHlwZSIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5UeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVkVG9rZW5UeXBlIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklzc3VlckVuZHBvaW50VXJsIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5 +VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludERlc2NyaXB0aW9uIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJs +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIg +VHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2VydmVyQ2VydGlmaWNhdGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2Vj +dXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJJZGVu +dGl0eVRva2VucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5Qb2xpY3kiIExlbmd0 +aEZpZWxkPSJOb09mVXNlcklkZW50aXR5VG9rZW5zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZWN1cml0eUxldmVsIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9p +bnRzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mUHJvZmlsZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQcm9maWxlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +UHJvZmlsZVVyaXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l +PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9p +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9p +bnRzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RW5kcG9pbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlck5hbWVzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyTmFtZXMiIFR5cGVOYW1l +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlck5hbWVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5 +cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5VXJs +cyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRGlzY292ZXJ5VXJscyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbWFwaG9yZUZpbGVQYXRoIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzT25saW5lIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5h +bWU9InRuczpSZWdpc3RlcmVkU2VydmVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ0bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNZG5zU2VydmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFt +ZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVn +aXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXIiIFR5cGVOYW1lPSJ0bnM6UmVnaXN0 +ZXJlZFNlcnZlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1 +cmF0aW9uIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +Y292ZXJ5Q29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMiIFR5cGVO +YW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlw +ZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW5ldyIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2hhbm5lbFNlY3VyaXR5VG9r +ZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q2hhbm5lbElkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlRva2VuSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3JlYXRlZEF0IiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmV2aXNlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJlQ2hh +bm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50UHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RUeXBlIiBUeXBlTmFtZT0i +dG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl +Y3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0i +dG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyUHJvdG9j +b2xWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNlY3VyaXR5VG9rZW4iIFR5cGVOYW1lPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJOb25jZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2Vy +dGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTaWduYXR1cmUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlNlc3Npb25BdXRoZW50 +aWNhdGlvblRva2VuIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlNpZ25hdHVyZURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWxnb3JpdGhtIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpZ25hdHVyZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNyZWF0ZVNlc3Npb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBl +TmFtZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2Vzc2lvbk5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRTZXNzaW9uVGltZW91dCIgVHlw +ZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhSZXNwb25zZU1l +c3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvblRva2VuIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3Bj +OkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlck5vbmNlIiBUeXBlTmFtZT0i +b3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0 +ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9u +IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlckVuZHBvaW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBl +TmFtZT0idG5zOlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mU2Vy +dmVyU29mdHdhcmVDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJT +aWduYXR1cmUiIFR5cGVOYW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heFJlcXVlc3RNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNl +cklkZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFub255bW91c0lk +ZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0 +bnM6VXNlcklkZW50aXR5VG9rZW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlck5hbWVJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0i +dG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFzc3dvcmQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ilg1MDlJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +SXNzdWVkSWRlbnRpdHlUb2tlbiIgQmFzZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQb2xpY3lJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJj +ZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRv +a2VuRGF0YSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5jcnlwdGlvbkFsZ29yaXRobSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJSc2FFbmNyeXB0ZWRT +ZWNyZXQiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVl +c3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRTaWduYXR1cmUiIFR5cGVO +YW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDbGll +bnRTb2Z0d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudFNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNp +Z25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mQ2xpZW50U29mdHdhcmVD +ZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9i +amVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJUb2tlblNpZ25hdHVyZSIgVHlwZU5h +bWU9InRuczpTaWduYXR1cmVEYXRhIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU2VydmVyTm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxk +PSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5m +b3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9z +dGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +aWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFt +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJz +Y3JpcHRpb25zIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FuY2VsUmVxdWVz +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXF1ZXN0SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYW5jZWxS +ZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNhbmNlbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJO +b2RlQXR0cmlidXRlc01hc2siIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkJyb3dzZU5hbWUiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJEZXNjcmlwdGlvbiIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkRpc3BsYXlOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRXZlbnROb3RpZmllciIgVmFsdWU9IjEyOCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFeGVjdXRhYmxlIiBWYWx1ZT0iMjU2IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3Rvcml6aW5nIiBWYWx1ZT0iNTEyIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2VOYW1lIiBWYWx1ZT0iMTAyNCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc0Fic3RyYWN0IiBWYWx1ZT0iMjA0 +OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbCIgVmFsdWU9IjQwOTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9k +ZUNsYXNzIiBWYWx1ZT0iODE5MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b2RlSWQiIFZhbHVlPSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +eW1tZXRyaWMiIFZhbHVlPSIzMjc2OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJVc2VyQWNjZXNzTGV2ZWwiIFZhbHVlPSI2NTUzNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVmFsdWU9IjEzMTA3MiIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyV3JpdGVNYXNrIiBWYWx1ZT0iMjYyMTQ0IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlUmFuayIgVmFsdWU9IjUyNDI4OCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZU1hc2siIFZhbHVlPSIxMDQ4NTc2 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlIiBWYWx1ZT0iMjA5NzE1 +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24i +IFZhbHVlPSI0MTk0MzA0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJvbGVQ +ZXJtaXNzaW9ucyIgVmFsdWU9IjgzODg2MDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBWYWx1ZT0iMTY3NzcyMTYiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMzM1NTQ0MzEiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQmFzZU5vZGUiIFZhbHVlPSIyNjUwMTIyMCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZhbHVlPSIyNjUwMTM0OCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3RUeXBlIiBWYWx1ZT0iMjY1MDMyNjgi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmFyaWFibGUiIFZhbHVlPSIyNjU3 +MTM4MyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYXJpYWJsZVR5cGUiIFZh +bHVlPSIyODYwMDQzOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2Qi +IFZhbHVlPSIyNjYzMjU0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZl +cmVuY2VUeXBlIiBWYWx1ZT0iMjY1MzcwNjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVmlldyIgVmFsdWU9IjI2NTAxMzU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJp +YnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlz +cGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9i +amVjdEF0dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNv +dXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRp +c3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5h +bWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlZhcmlhYmxlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0 +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJW +YWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +VHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVl +UmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZB +cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0i +Tm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVs +IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNz +TGV2ZWwiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmlt +dW1TYW1wbGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ikhpc3Rvcml6aW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kQXR0 +cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlw +ZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5h +bWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVh +OkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0 +ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0 +ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJv +b2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRl +eHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVBdHRyaWJ1 +dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0 +bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIg +VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRl +cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9j +YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFz +ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSXNBYnN0cmFjdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZmVy +ZW5jZVR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMy +IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu +czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBU +eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUi +IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgQmFzZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRB +dHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1l +PSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmlld0F0 +dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlO +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy +aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3Jp +dGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1 +dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0i +b3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBl +TmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0i +dWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJHZW5lcmljQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +ZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +QXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZBdHRyaWJ1dGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVudE5v +ZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVxdWVzdGVkTmV3Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlm +aWVkTmFtZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRu +czpOb2RlQ2xhc3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQXR0cmlidXRlcyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVE +ZWZpbml0aW9uIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNSZXN1bHQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Rh +dHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBZGRlZE5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBZGROb2Rlc1JlcXVlc3QiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVz +dEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvQWRkIiBUeXBlTmFtZT0idG5zOkFkZE5vZGVzSXRlbSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvQWRkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QWRkTm9kZXNSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU291cmNlTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlk +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6 +Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNGb3J3YXJkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRTZXJ2ZXJVcmkiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBU +eXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJ0bnM6QWRk +UmVmZXJlbmNlc0l0ZW0iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlc1RvQWRkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJl +ZmVyZW5jZXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRl +ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1 +c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIg +TGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTm9kZXNJdGVtIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVRhcmdl +dFJlZmVyZW5jZXMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3Qi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZk5vZGVzVG9EZWxldGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvRGVsZXRlIiBUeXBlTmFtZT0idG5zOkRlbGV0ZU5vZGVz +SXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvRGVsZXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZU5vZGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJ +ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2Fy +ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0 +Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEZWxldGVCaWRpcmVjdGlvbmFsIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXNUb0RlbGV0 +ZSIgVHlwZU5hbWU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS +ZWZlcmVuY2VzVG9EZWxldGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1 +bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw +ZSBOYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0 +PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBY2Nlc3NMZXZlbCIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1 +ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb250YWluc05vTG9vcHMi +IFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlIiBW +YWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVzY3JpcHRpb24i +IFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFt +ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkV2ZW50Tm90 +aWZpZXIiIFZhbHVlPSIxMjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXhl +Y3V0YWJsZSIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJI +aXN0b3JpemluZyIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJJbnZlcnNlTmFtZSIgVmFsdWU9IjEwMjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iSXNBYnN0cmFjdCIgVmFsdWU9IjIwNDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWwiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vZGVDbGFzcyIgVmFsdWU9IjgxOTIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUlkIiBWYWx1ZT0iMTYzODQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3ltbWV0cmljIiBWYWx1ZT0iMzI3NjgiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBWYWx1ZT0iNjU1 +MzYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckV4ZWN1dGFibGUiIFZh +bHVlPSIxMzEwNzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlcldyaXRl +TWFzayIgVmFsdWU9IjI2MjE0NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJW +YWx1ZVJhbmsiIFZhbHVlPSI1MjQyODgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iV3JpdGVNYXNrIiBWYWx1ZT0iMTA0ODU3NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJWYWx1ZUZvclZhcmlhYmxlVHlwZSIgVmFsdWU9IjIwOTcxNTIiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iNDE5NDMw +NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFZh +bHVlPSI4Mzg4NjA4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc1Jl +c3RyaWN0aW9ucyIgVmFsdWU9IjE2Nzc3MjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkFjY2Vzc0xldmVsRXgiIFZhbHVlPSIzMzU1NDQzMiIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VEaXJlY3Rpb24i +IExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZvcndh +cmQiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2Ui +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVl +PSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSIz +IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlZpZXdEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJUaW1lc3RhbXAiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJWaWV3VmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJv +d3NlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQnJvd3NlRGlyZWN0aW9uIiBUeXBlTmFtZT0idG5zOkJyb3dzZURpcmVjdGlvbiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgVHlwZU5hbWU9 +Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzTWFzayIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VSZXN1bHRNYXNrIiBMZW5ndGhJbkJpdHM9IjMy +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFZhbHVlPSIxIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzRm9yd2FyZCIgVmFsdWU9IjIiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iNCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iOCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjE2IiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBWYWx1ZT0i +MzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iNjMiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVmZXJlbmNlVHlwZUluZm8iIFZhbHVl +PSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRhcmdldEluZm8iIFZhbHVl +PSI2MCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6 +Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4 +cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFt +ZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVHlwZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvbnRpbnVhdGlv +blBvaW50Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkJyb3dzZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l +PSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJCcm93c2VSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0 +aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4UmVmZXJlbmNlc1Blck5v +ZGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5v +ZGVzVG9Ccm93c2UiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb2Rlc1RvQnJvd3NlIiBUeXBlTmFtZT0idG5zOkJyb3dzZURlc2NyaXB0aW9uIiBMZW5ndGhG +aWVsZD0iTm9PZk5vZGVzVG9Ccm93c2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5 +cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +c3VsdHMiIFR5cGVOYW1lPSJ0bnM6QnJvd3NlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0lu +Zm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2lu +dHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZD +b250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDb250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZDb250aW51YXRpb25Qb2ludHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVJlc3VsdCIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9P +ZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlw +ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YnR5 +cGVzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJn +ZXROYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGgiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1l +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVu +dHMiIFR5cGVOYW1lPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZF +bGVtZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJCcm93c2VQYXRoIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nTm9kZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2 +ZVBhdGgiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9k +ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VQYXRoUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpT +dGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRhcmdldHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRzIiBUeXBlTmFtZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIExlbmd0aEZpZWxkPSJOb09mVGFyZ2V0cyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xh +dGVCcm93c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkJyb3dzZVBhdGhzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aHMi +IFR5cGVOYW1lPSJ0bnM6QnJvd3NlUGF0aCIgTGVuZ3RoRmllbGQ9Ik5vT2ZCcm93c2VQYXRocyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJl +c3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1 +bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVz +dWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWdpc3Rl +ciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9S +ZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvUmVn +aXN0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZ2lzdGVyZWRO +b2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVn +aXN0ZXJlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVn +aXN0ZXJlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9k +ZXNUb1VucmVnaXN0ZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb2Rlc1RvVW5yZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZOb2Rlc1RvVW5yZWdpc3RlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvdW50ZXIiPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOdW1lcmljUmFuZ2UiPg0KICA8L29w +YzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJUaW1lIj4NCiAgPC9vcGM6 +T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iRGF0ZSI+DQogIDwvb3BjOk9w +YXF1ZVR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludENvbmZpZ3Vy +YXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iT3BlcmF0aW9uVGltZW91dCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlVzZUJpbmFyeUVuY29kaW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhTdHJpbmdMZW5ndGgiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhCeXRlU3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4QXJyYXlMZW5ndGgiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhNZXNzYWdlU2l6ZSIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heEJ1ZmZlclNp +emUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDaGFubmVs +TGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZWN1cml0eVRva2VuTGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUXVlcnlEYXRhRGVz +Y3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVsYXRpdmVQYXRoIiBUeXBlTmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5v +ZGVUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiBUeXBlTmFtZT0idWE6RXhwYW5kZWRO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmNsdWRlU3ViVHlwZXMiIFR5cGVOYW1l +PSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRhVG9SZXR1cm4i +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVG9SZXR1 +cm4iIFR5cGVOYW1lPSJ0bnM6UXVlcnlEYXRhRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09m +RGF0YVRvUmV0dXJuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1l +cmF0ZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhdG9yIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcXVhbHMiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzTnVsbCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iR3JlYXRlclRoYW4iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJHcmVhdGVyVGhhbk9yRXF1YWwiIFZhbHVlPSI0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxlc3NUaGFuT3JFcXVhbCIgVmFsdWU9IjUiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGlrZSIgVmFsdWU9IjYiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm90IiBWYWx1ZT0iNyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJCZXR3ZWVuIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJJbkxpc3QiIFZhbHVlPSI5IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IkFuZCIgVmFsdWU9IjEwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik9yIiBWYWx1ZT0iMTEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2Fz +dCIgVmFsdWU9IjEyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluVmlldyIg +VmFsdWU9IjEzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9mVHlwZSIgVmFs +dWU9IjE0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlbGF0ZWRUbyIgVmFs +dWU9IjE1IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJpdHdpc2VBbmQiIFZh +bHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCaXR3aXNlT3IiIFZh +bHVlPSIxNyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJRdWVyeURhdGFTZXQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVmaW5pdGlvbk5vZGUiIFR5cGVOYW1lPSJ1 +YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZWYWx1ZXMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZXMiIFR5cGVO +YW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZlZhbHVlcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2RlUmVmZXJlbmNl +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVy +ZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklzRm9yd2FyZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlZmVyZW5jZWROb2RlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExl +bmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmls +dGVyT3BlcmF0b3IiIFR5cGVOYW1lPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mRmlsdGVyT3BlcmFuZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJPcGVyYW5kcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lv +bk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWx0ZXJPcGVyYW5kcyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb250ZW50RmlsdGVy +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZFbGVtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkVsZW1lbnRzIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkVsZW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IkZpbHRlck9wZXJhbmQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkVsZW1lbnRPcGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iSW5kZXgiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkxpdGVyYWxP +cGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF0dHJpYnV0ZU9wZXJhbmQiIEJhc2VU +eXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBbGlhcyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VQYXRoIiBUeXBl +TmFtZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0 +ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4 +UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIEJh +c2VUeXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUeXBlRGVm +aW5pdGlvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkJyb3dzZVBhdGgiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VQYXRoIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZCcm93c2VQYXRoIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmlidXRlSWQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5kZXhSYW5nZSIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iT3BlcmFuZFN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZPcGVyYW5kU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mT3BlcmFuZERpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik9wZXJhbmREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZPcGVyYW5kRGlhZ25vc3RpY0luZm9zIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVudFJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6 +Q29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mRWxlbWVudFJlc3Vs +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRWxlbWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVsZW1lbnREaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZFbGVtZW50RGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBhcnNpbmdSZXN1bHQiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVN0YXR1 +c0NvZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVN0YXR1c0NvZGVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +YXRhU3RhdHVzQ29kZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YURpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh +dGFEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZEYXRhRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5Rmlyc3RSZXF1ZXN0IiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFk +ZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZk5vZGVUeXBlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vZGVUeXBlcyIgVHlwZU5hbWU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBM +ZW5ndGhGaWVsZD0iTm9PZk5vZGVUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRl +ciIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWF4RGF0YVNldHNUb1JldHVybiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNYXhSZWZlcmVuY2VzVG9SZXR1cm4iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlF1ZXJ5Rmlyc3RSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZRdWVyeURhdGFTZXRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlEYXRhU2V0cyIgVHlw +ZU5hbWU9InRuczpRdWVyeURhdGFTZXQiIExlbmd0aEZpZWxkPSJOb09mUXVlcnlEYXRhU2V0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3Bj +OkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUGFyc2luZ1Jlc3VsdHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQYXJzaW5nUmVz +dWx0cyIgVHlwZU5hbWU9InRuczpQYXJzaW5nUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlBhcnNp +bmdSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJlc3VsdCIgVHlwZU5h +bWU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5TmV4dFJlcXVlc3QiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRl +ciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVsZWFzZUNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry +aW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlF1ZXJ5TmV4dFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlF1ZXJ5RGF0YVNldHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWVyeURhdGFTZXRz +IiBUeXBlTmFtZT0idG5zOlF1ZXJ5RGF0YVNldCIgTGVuZ3RoRmllbGQ9Ik5vT2ZRdWVyeURhdGFT +ZXRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiBU +eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBMZW5ndGhJbkJp +dHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTb3VyY2UiIFZhbHVlPSIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlcnZlciIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQm90aCIgVmFsdWU9IjIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTmVpdGhlciIgVmFsdWU9IjMiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVu +dW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFZhbHVlSWQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9k +ZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmli +dXRlSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5k +ZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE +YXRhRW5jb2RpbmciIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRSZXF1ZXN0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVl +c3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik1heEFnZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIFR5cGVOYW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJu +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWFkIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1JlYWQiIFR5cGVOYW1lPSJ0 +bnM6UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1JlYWQiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFJlc3Bv +bnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhG +aWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3Rp +Y0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlh +Z25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJO +b09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkVmFsdWVJZCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFFbmNvZGluZyIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRp +b25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkUmVzdWx0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1 +c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q29udGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikhpc3RvcnlEYXRhIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlSZWFkRGV0YWlscyIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZEV2 +ZW50RGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idG5zOkV2ZW50RmlsdGVy +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IlJlYWRSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRh +aWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzUmVhZE1vZGlmaWVkIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJv +cGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtVmFsdWVzUGVyTm9kZSIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXR1cm5Cb3Vu +ZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUHJvY2Vzc2VkRGV0YWlscyIgQmFzZVR5 +cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRU +aW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5k +VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +b2Nlc3NpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mQWdncmVnYXRlVHlwZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkFnZ3JlZ2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0 +aEZpZWxkPSJOb09mQWdncmVnYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVOYW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSZWFkQXRUaW1lRGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUi +IExlbmd0aEZpZWxkPSJOb09mUmVxVGltZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VT +aW1wbGVCb3VuZHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkQW5ub3RhdGlvbkRhdGFE +ZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RGF0YSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpE +YXRhVmFsdWUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZmljYXRpb25JbmZv +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1v +ZGlmaWNhdGlvblRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJVcGRhdGVUeXBlIiBUeXBlTmFtZT0idG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlNb2RpZmllZERhdGEiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeURhdGEiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEYXRhVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5n +dGhGaWVsZD0iTm9PZkRhdGFWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTW9k +aWZpY2F0aW9uSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb2RpZmljYXRpb25JbmZvcyIgVHlwZU5hbWU9InRuczpNb2RpZmljYXRpb25JbmZvIiBM +ZW5ndGhGaWVsZD0iTm9PZk1vZGlmaWNhdGlvbkluZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlFdmVudCIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBU +eXBlTmFtZT0idG5zOkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkRGV0YWlscyIgVHlw +ZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVz +dGFtcHNUb1JldHVybiIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZWxlYXNlQ29udGludWF0aW9uUG9pbnRzIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1JlYWQiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvUmVhZCIgVHlw +ZU5hbWU9InRuczpIaXN0b3J5UmVhZFZhbHVlSWQiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1Jl +YWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNw +b25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InRuczpIaXN0b3J5UmVhZFJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVh +OkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0 +ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb2Rlc1RvV3JpdGUiIFR5cGVOYW1lPSJ0bnM6V3JpdGVWYWx1ZSIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZOb2Rlc1RvV3JpdGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZS +ZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +dWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVO +YW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iSGlzdG9yeVVwZGF0ZURldGFpbHMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ikhpc3Rv +cnlVcGRhdGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJJbnNlcnQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlJlcGxhY2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IlVwZGF0ZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVs +ZXRlIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVt +ZXJhdGVkVHlwZSBOYW1lPSJQZXJmb3JtVXBkYXRlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5zZXJ0IiBWYWx1ZT0iMSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXBsYWNlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVcGRhdGUiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IlJlbW92ZSIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXBkYXRlRGF0YURldGFpbHMi +IEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVw +ZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFj +ZSIgVHlwZU5hbWU9InRuczpQZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJVcGRhdGVWYWx1ZXMiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIExlbmd0aEZp +ZWxkPSJOb09mVXBkYXRlVmFsdWVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVwZGF0ZVN0cnVjdHVyZURhdGFEZXRhaWxzIiBCYXNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +ZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVE +ZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIFR5 +cGVOYW1lPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVsZD0i +Tm9PZlVwZGF0ZVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJVcGRhdGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgVHlwZU5hbWU9InRuczpQ +ZXJmb3JtVXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlciIgVHlwZU5h +bWU9InRuczpFdmVudEZpbHRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFdmVudERh +dGEiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudERh +dGEiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBMZW5ndGhGaWVsZD0iTm9P +ZkV2ZW50RGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJJc0RlbGV0ZU1vZGlmaWVkIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRUaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRlbGV0ZUF0VGltZURldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0 +ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9k +ZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmll +bGQ9Ik5vT2ZSZXFUaW1lcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVFdmVudERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFt +ZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudElkcyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5n +IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50SWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXN1bHQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k +ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +T3BlcmF0aW9uUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhG +aWVsZD0iTm9PZk9wZXJhdGlvblJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0 +aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0IiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZIaXN0b3J5VXBkYXRlRGV0YWlscyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiBUeXBlTmFtZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0IiBMZW5ndGhGaWVsZD0iTm9PZkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpI +aXN0b3J5VXBkYXRlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxNZXRo +b2RSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik9iamVjdElkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWV0aG9kSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJbnB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExlbmd0 +aEZpZWxkPSJOb09mSW5wdXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBU +eXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJbnB1 +dEFyZ3VtZW50UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IklucHV0QXJndW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJbnB1dEFyZ3VtZW50UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZJbnB1dEFyZ3VtZW50RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZklucHV0QXJndW1l +bnREaWFnbm9zdGljSW5mb3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mT3V0cHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iT3V0 +cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZPdXRw +dXRBcmd1bWVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iQ2FsbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1 +ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1ldGhvZHNUb0NhbGwiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXRob2RzVG9DYWxs +IiBUeXBlTmFtZT0idG5zOkNhbGxNZXRob2RSZXF1ZXN0IiBMZW5ndGhGaWVsZD0iTm9PZk1ldGhv +ZHNUb0NhbGwiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQ2FsbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0i +dG5zOkNhbGxNZXRob2RSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9uaXRv +cmluZ01vZGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJTYW1wbGluZyIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +UmVwb3J0aW5nIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlVHJpZ2dlciIgTGVuZ3RoSW5CaXRzPSIz +MiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzIiBWYWx1ZT0iMCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXNWYWx1ZSIgVmFsdWU9IjEiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzVmFsdWVUaW1lc3RhbXAiIFZh +bHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRU +eXBlIE5hbWU9IkRlYWRiYW5kVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iQWJzb2x1dGUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlBlcmNlbnQiIFZhbHVlPSIyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIEJhc2VUeXBlPSJ0bnM6TW9u +aXRvcmluZ0ZpbHRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmlnZ2VyIiBUeXBlTmFtZT0i +dG5zOkRhdGFDaGFuZ2VUcmlnZ2VyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVhZGJhbmRU +eXBlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRi +YW5kVmFsdWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyIiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXIiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxl +Y3RDbGF1c2VzIiBUeXBlTmFtZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIExlbmd0aEZp +ZWxkPSJOb09mU2VsZWN0Q2xhdXNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xh +dXNlIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlv +biIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VTZXJ2ZXJDYXBhYmlsaXRpZXNEZWZhdWx0cyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHJlYXRVbmNlcnRhaW5Bc0JhZCIgVHlwZU5hbWU9Im9wYzpC +b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyY2VudERhdGFCYWQiIFR5cGVOYW1l +PSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBlcmNlbnREYXRhR29vZCIgVHlw +ZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2xvcGVkRXh0cmFw +b2xhdGlvbiIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUZpbHRlciIgQmFzZVR5 +cGU9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0VGlt +ZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3Jl +Z2F0ZVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQ +cm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkV2ZW50RmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idG5zOk1vbml0b3JpbmdG +aWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENsYXVzZVJlc3Vs +dHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RD +bGF1c2VSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZT +ZWxlY3RDbGF1c2VSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlbGVjdENs +YXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdu +b3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldoZXJlQ2xhdXNlUmVzdWx0IiBUeXBlTmFtZT0idG5z +OkNvbnRlbnRGaWx0ZXJSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWdncmVnYXRlRmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0i +dG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNl +ZFN0YXJ0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJldmlzZWRQcm9jZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZEFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVO +YW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yaW5nUGFyYW1ldGVycyIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGll +bnRIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJRdWV1ZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlzY2FyZE9sZGVzdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ikl0ZW1Ub01vbml0b3IiIFR5cGVOYW1lPSJ0bnM6UmVhZFZh +bHVlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nTW9kZSIgVHlwZU5hbWU9 +InRuczpNb25pdG9yaW5nTW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFBh +cmFtZXRlcnMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVk +SXRlbUNyZWF0ZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkU2FtcGxpbmdJbnRlcnZhbCIgVHlwZU5h +bWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUXVldWVTaXpl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlclJl +c3VsdCIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVt +c1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBUeXBlTmFtZT0idG5z +OlRpbWVzdGFtcHNUb1JldHVybiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZJdGVtc1Rv +Q3JlYXRlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXRl +bXNUb0NyZWF0ZSIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgTGVu +Z3RoRmllbGQ9Ik5vT2ZJdGVtc1RvQ3JlYXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0 +ZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVxdWVzdGVkUGFyYW1ldGVycyIgVHlwZU5hbWU9InRuczpNb25pdG9yaW5n +UGFyYW1ldGVycyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNhbXBsaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZFF1ZXVlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9k +aWZ5TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz +dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcHNUb1JldHVy +biIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mSXRlbXNUb01vZGlmeSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbU1v +ZGlmeVJlcXVlc3QiIExlbmd0aEZpZWxkPSJOb09mSXRlbXNUb01vZGlmeSIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOk1v +bml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1 +YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0 +TW9uaXRvcmluZ01vZGVSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JpbmdNb2RlIiBUeXBl +TmFtZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1v +bml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJNb25pdG9yZWRJdGVtSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZNb25pdG9yZWRJdGVtSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVzcG9uc2UiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9P +ZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0lu +Zm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklk +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyaWdnZXJp +bmdJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkxpbmtzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMaW5rc1RvQWRkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZM +aW5rc1RvQWRkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxpbmtzVG9SZW1vdmUiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMaW5rc1RvUmVtb3Zl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZMaW5rc1RvUmVtb3ZlIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlNldFRyaWdnZXJpbmdSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGRSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVzdWx0cyIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mQWRkUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1l +PSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZBZGREaWFnbm9zdGljSW5mb3Mi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlUmVzdWx0cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbW92ZVJlc3VsdHMiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlbW92ZVJlc3VsdHMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtb3ZlRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mUmVtb3ZlRGlhZ25v +c3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3Jp +cHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mTW9uaXRvcmVkSXRlbUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhG +aWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTW9uaXRvcmVkSXRlbXNSZXNwb25z +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZp +ZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGlj +SW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFn +bm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5v +T2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVy +IiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0ZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTGlmZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOb3Rp +ZmljYXRpb25zUGVyUHVibGlzaCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHkiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVh +dGVTdWJzY3JpcHRpb25SZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z +ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRQdWJsaXNoaW5n +SW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV2aXNlZExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJNb2RpZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6 +UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZFB1 +Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZE1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQ +ZXJQdWJsaXNoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlByaW9yaXR5IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRv +dWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRNYXhLZWVw +QWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1 +ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFt +ZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2V0UHVi +bGlzaGluZ01vZGVSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0 +YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5m +byIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTm90aWZpY2F0aW9uTWVzc2Fn +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJQdWJsaXNoVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uRGF0YSIgVHlwZU5hbWU9InVhOkV4dGVu +c2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb3RpZmljYXRpb25EYXRhIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vdGlmaWNh +dGlvbkRhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mTW9uaXRvcmVkSXRlbXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJdGVtcyIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVt +Tm90aWZpY2F0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZk1vbml0b3JlZEl0ZW1zIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRp +YWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9y +ZWRJdGVtTm90aWZpY2F0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkNsaWVudEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVu +dE5vdGlmaWNhdGlvbkxpc3QiIEJhc2VUeXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRXZlbnRzIiBUeXBlTmFtZT0idG5zOkV2ZW50RmllbGRMaXN0IiBM +ZW5ndGhGaWVsZD0iTm9PZkV2ZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRIYW5kbGUiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50RmllbGRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRGaWVs +ZHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50RmllbGRzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +Ikhpc3RvcnlFdmVudEZpZWxkTGlzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnRGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudEZpZWxkcyIgVHlwZU5hbWU9InVhOlZhcmlh +bnQiIExlbmd0aEZpZWxkPSJOb09mRXZlbnRGaWVsZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RhdHVzQ2hhbmdlTm90aWZpY2F0 +aW9uIiBCYXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iU3RhdHVzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJsaXNoUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1 +YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudHMiIFR5cGVOYW1lPSJ0bnM6U3Vic2NyaXB0aW9uQWNr +bm93bGVkZ2VtZW50IiBMZW5ndGhGaWVsZD0iTm9PZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iUHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNl +SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkF2YWlsYWJsZVNlcXVl +bmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZp +ZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTW9yZU5vdGlmaWNhdGlvbnMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIFR5cGVOYW1lPSJ0bnM6Tm90aWZpY2F0 +aW9uTWVzc2FnZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9 +InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9z +dGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVwdWJsaXNoUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXRyYW5zbWl0U2VxdWVuY2VOdW1iZXIiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlJlcHVibGlzaFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm90aWZpY2F0aW9uTWVz +c2FnZSIgVHlwZU5hbWU9InRuczpOb3RpZmljYXRpb25NZXNzYWdlIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zZmVyUmVzdWx0 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0 +YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbklk +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlw +dGlvbklkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mU3Vic2NyaXB0 +aW9uSWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VuZEluaXRpYWxWYWx1ZXMiIFR5cGVO +YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpUcmFuc2ZlclJlc3VsdCIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZv +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0 +aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRp +YWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBU +eXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +U3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU3Vic2NyaXB0aW9uSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNl +SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5v +T2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ +bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJCdWlsZEluZm8iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvZHVjdFVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3ROYW1lIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvZnR3YXJlVmVyc2lvbiIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZE51bWJlciIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsZERhdGUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUmVkdW5kYW5jeVN1cHBvcnQiIExlbmd0aEluQml0cz0i +MzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbGQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ildhcm0iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkhvdCIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iVHJhbnNwYXJlbnQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkhvdEFuZE1pcnJvcmVkIiBWYWx1ZT0iNSIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTZXJ2ZXJTdGF0ZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUnVubmluZyIg +VmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmFpbGVkIiBWYWx1 +ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb0NvbmZpZ3VyYXRpb24i +IFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1c3BlbmRlZCIg +VmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2h1dGRvd24iIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRlc3QiIFZhbHVlPSI1 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbW11bmljYXRpb25GYXVsdCIg +VmFsdWU9IjYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFs +dWU9IjciIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVySWQiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUxldmVsIiBUeXBlTmFtZT0ib3Bj +OkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJTdGF0ZSIgVHlwZU5hbWU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9pbnRVcmxMaXN0 +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRV +cmxMaXN0IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbmRwb2ludFVy +bExpc3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iTmV0d29ya0dyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOZXR3b3JrUGF0aHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrUGF0aHMiIFR5cGVOYW1l +PSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mTmV0d29ya1Bh +dGhzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWwi +IFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVmlld0NvdW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTZXNz +aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q3VtdWxhdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlY3VyaXR5UmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvblRpbWVv +dXRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXNzaW9uQWJvcnRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291bnQiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVy +dmFsQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VjdXJpdHlSZWplY3RlZFJlcXVlc3RzQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVqZWN0ZWRSZXF1ZXN0c0NvdW50IiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJTZXJ2ZXJTdGF0dXNEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJyZW50VGltZSIgVHlwZU5hbWU9Im9w +YzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXRlIiBUeXBlTmFtZT0idG5z +OlNlcnZlclN0YXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGRJbmZvIiBUeXBlTmFt +ZT0idG5zOkJ1aWxkSW5mbyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY29uZHNUaWxsU2h1 +dGRvd24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2h1 +dGRvd25SZWFzb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlc3Npb25EaWFnbm9z +dGljc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlc3Npb25OYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBlTmFtZT0idG5zOkFwcGxpY2F0aW9u +RGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmkiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVO +YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIg +VHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQWN0dWFsU2Vzc2lvblRpbWVvdXQiIFR5cGVOYW1lPSJvcGM6RG91 +YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVzcG9uc2VNZXNzYWdlU2l6ZSIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRDb25uZWN0 +aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkNsaWVudExhc3RDb250YWN0VGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudE1vbml0b3JlZEl0ZW1zQ291 +bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVu +dFB1Ymxpc2hSZXF1ZXN0c0luUXVldWUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVuYXV0aG9yaXplZFJlcXVl +c3RDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlQ291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ikhpc3RvcnlVcGRhdGVDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2FsbENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0i +dG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRN +b25pdG9yaW5nTW9kZUNvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXRUcmlnZ2VyaW5nQ291bnQiIFR5cGVOYW1lPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0 +ZU1vbml0b3JlZEl0ZW1zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiBUeXBl +TmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJNb2RpZnlTdWJzY3JpcHRpb25Db3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRh +dGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0UHVibGlzaGluZ01vZGVDb3VudCIg +VHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUHVibGlzaENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hDb3VudCIgVHlwZU5hbWU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJT +dWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgVHlwZU5h +bWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWRkTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkUmVmZXJlbmNlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNl +cnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVOb2Rl +c0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJEZWxldGVSZWZlcmVuY2VzQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZUNvdW50IiBU +eXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCcm93c2VOZXh0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRz +Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlF1ZXJ5Rmlyc3RDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlOZXh0Q291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlZ2lzdGVyTm9kZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5yZWdpc3Rlck5vZGVzQ291bnQiIFR5cGVOYW1l +PSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGlj +c0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkNsaWVudFVzZXJJZE9mU2Vzc2lvbiIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQ2xpZW50VXNlcklkSGlzdG9yeSIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudFVzZXJJZEhpc3RvcnkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkNsaWVudFVzZXJJZEhpc3Rvcnki +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmNvZGluZyIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRQcm90b2Nv +bCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 +eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iU2VydmljZUNvdW50ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUb3RhbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVycm9yQ291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IlN0YXR1c1Jlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvIiBUeXBlTmFtZT0idWE6RGlh +Z25vc3RpY0luZm8iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25J +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcmlvcml0 +eSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGlu +Z0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik1heEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1heExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0VuYWJsZWQiIFR5 +cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vZGlmeUNvdW50 +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Fi +bGVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXB1Ymxpc2hSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVwdWJsaXNoTWVzc2FnZVJlcXVlc3RDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNmZXJSZXF1 +ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VHJhbnNmZXJyZWRUb0FsdENsaWVudENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaFJlcXVlc3RDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhQ2hh +bmdlTm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXRlUHVibGlzaFJlcXVlc3RD +b3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJy +ZW50S2VlcEFsaXZlQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3VycmVudExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVW5hY2tub3dsZWRnZWRNZXNzYWdlQ291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNv +dW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0 +b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiBUeXBl +TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5leHRTZXF1ZW5jZU51 +bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVu +dFF1ZXVlT3ZlckZsb3dDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTW9kZWxDaGFuZ2VT +dHJ1Y3R1cmVWZXJiTWFzayIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iTm9kZUFkZGVkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb2RlRGVsZXRlZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iUmVmZXJlbmNlQWRkZWQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZURlbGV0ZWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlQ2hhbmdlZCIgVmFsdWU9IjE2IiAvPg0KICA8 +L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGVs +Q2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQWZmZWN0ZWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWZXJiIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2VtYW50 +aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFmZmVjdGVkVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJSYW5nZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMb3ciIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +SGlnaCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRVVJbmZvcm1hdGlvbiIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVW5pdElkIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 +cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3Jp +cHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9u +IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMaW5l +YXIiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxvZyIgVmFs +dWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG4iIFZhbHVlPSIyIiAv +Pg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNvbXBsZXhOdW1iZXJUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlYWwiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJJbWFnaW5hcnkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkF4aXNJbmZvcm1hdGlvbiIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmdp +bmVlcmluZ1VuaXRzIiBUeXBlTmFtZT0idG5zOkVVSW5mb3JtYXRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJFVVJhbmdlIiBUeXBlTmFtZT0idG5zOlJhbmdlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iVGl0bGUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXhpc1NjYWxlVHlwZSIgVHlwZU5hbWU9InRuczpBeGlzU2NhbGVFbnVtZXJh +dGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBeGlzU3RlcHMiIFR5cGVOYW1lPSJv +cGM6RG91YmxlIiBMZW5ndGhGaWVsZD0iTm9PZkF4aXNTdGVwcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJYVlR5cGUiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWCIgVHlwZU5hbWU9 +Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9Im9w +YzpGbG9hdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJQcm9ncmFtRGlhZ25vc3RpY0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgVHlwZU5h +bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZUNsaWVudE5hbWUi +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52b2NhdGlv +bkNyZWF0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTGFzdE1ldGhvZElucHV0QXJn +dW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFz +dE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVs +ZD0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9 +InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiBUeXBlTmFtZT0i +b3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZFJldHVyblN0 +YXR1cyIgVHlwZU5hbWU9InRuczpTdGF0dXNSZXN1bHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHJvZ3JhbURpYWdub3N0aWMyRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQ3JlYXRlU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ3JlYXRlQ2xpZW50TmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJJbnZvY2F0aW9uQ3JlYXRpb25UaW1lIiBUeXBlTmFtZT0ib3BjOkRh +dGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdFRyYW5zaXRpb25UaW1lIiBUeXBl +TmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENh +bGwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1l +dGhvZFNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1l +PSJ0bnM6QXJndW1lbnQiIExlbmd0aEZpZWxkPSJOb09mTGFzdE1ldGhvZElucHV0QXJndW1lbnRz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9k +T3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVsZD0iTm9P +Zkxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +TGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTGFzdE1ldGhvZElucHV0VmFsdWVzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIg +TGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kSW5wdXRWYWx1ZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mTGFzdE1ldGhvZE91dHB1dFZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIFR5cGVOYW1l +PSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZkxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kQ2FsbFRpbWUiIFR5cGVOYW1lPSJvcGM6 +RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kUmV0dXJuU3RhdHVz +IiBUeXBlTmFtZT0idG5zOlN0YXR1c1Jlc3VsdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBbm5vdGF0aW9uIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2UiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQW5ub3RhdGlvblRpbWUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRXhjZXB0aW9uRGV2aWF0aW9uRm9ybWF0IiBMZW5ndGhJ +bkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBYnNvbHV0ZVZhbHVl +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50T2ZW +YWx1ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGVyY2Vu +dE9mUmFuZ2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlBl +cmNlbnRPZkVVUmFuZ2UiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlVua25vd24iIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KPC9v +cGM6VHlwZURpY3Rpb25hcnk+ + + + + i=15 + + -1 + 1 + 1 + + + + i=47 + + true + + i=93 + + + + + Variable_2 + + i=7619 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + 7619 + + + http://opcfoundation.org/UA/ + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15037 + + + 0 + Deprecated + + + i=46 + + + i=68 + + 15037 + + + true + + + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14873 + + + 0 + KeyValuePair + + + i=47 + + + i=69 + + 14873 + + + KeyValuePair + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15734 + + + 0 + EndpointType + + + i=47 + + + i=69 + + 15734 + + + EndpointType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18824 + + + 0 + RationalNumber + + + i=47 + + + i=69 + + 18824 + + + RationalNumber + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18827 + + + 0 + Vector + + + i=47 + + + i=69 + + 18827 + + + Vector + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18830 + + + 0 + 3DVector + + + i=47 + + + i=69 + + 18830 + + + ThreeDVector + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18833 + + + 0 + CartesianCoordinates + + + i=47 + + + i=69 + + 18833 + + + CartesianCoordinates + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18836 + + + 0 + 3DCartesianCoordinates + + + i=47 + + + i=69 + + 18836 + + + ThreeDCartesianCoordinates + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18839 + + + 0 + Orientation + + + i=47 + + + i=69 + + 18839 + + + Orientation + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18842 + + + 0 + 3DOrientation + + + i=47 + + + i=69 + + 18842 + + + ThreeDOrientation + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18845 + + + 0 + Frame + + + i=47 + + + i=69 + + 18845 + + + Frame + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18848 + + + 0 + 3DFrame + + + i=47 + + + i=69 + + 18848 + + + ThreeDFrame + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15738 + + + 0 + IdentityMappingRuleType + + + i=47 + + + i=69 + + 15738 + + + IdentityMappingRuleType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=23514 + + + 0 + CurrencyUnitType + + + i=47 + + + i=69 + + 23514 + + + CurrencyUnitType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12681 + + + 0 + TrustListDataType + + + i=47 + + + i=69 + + 12681 + + + TrustListDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15741 + + + 0 + DataTypeSchemaHeader + + + i=47 + + + i=69 + + 15741 + + + DataTypeSchemaHeader + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14855 + + + 0 + DataTypeDescription + + + i=47 + + + i=69 + + 14855 + + + DataTypeDescription + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15599 + + + 0 + StructureDescription + + + i=47 + + + i=69 + + 15599 + + + StructureDescription + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15602 + + + 0 + EnumDescription + + + i=47 + + + i=69 + + 15602 + + + EnumDescription + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15501 + + + 0 + SimpleTypeDescription + + + i=47 + + + i=69 + + 15501 + + + SimpleTypeDescription + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15521 + + + 0 + UABinaryFileDataType + + + i=47 + + + i=69 + + 15521 + + + UABinaryFileDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14849 + + + 0 + DataSetMetaDataType + + + i=47 + + + i=69 + + 14849 + + + DataSetMetaDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14852 + + + 0 + FieldMetaData + + + i=47 + + + i=69 + + 14852 + + + FieldMetaData + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14876 + + + 0 + ConfigurationVersionDataType + + + i=47 + + + i=69 + + 14876 + + + ConfigurationVersionDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15766 + + + 0 + PublishedDataSetDataType + + + i=47 + + + i=69 + + 15766 + + + PublishedDataSetDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15769 + + + 0 + PublishedDataSetSourceDataType + + + i=47 + + + i=69 + + 15769 + + + PublishedDataSetSourceDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14324 + + + 0 + PublishedVariableDataType + + + i=47 + + + i=69 + + 14324 + + + PublishedVariableDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15772 + + + 0 + PublishedDataItemsDataType + + + i=47 + + + i=69 + + 15772 + + + PublishedDataItemsDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15775 + + + 0 + PublishedEventsDataType + + + i=47 + + + i=69 + + 15775 + + + PublishedEventsDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15778 + + + 0 + DataSetWriterDataType + + + i=47 + + + i=69 + + 15778 + + + DataSetWriterDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15781 + + + 0 + DataSetWriterTransportDataType + + + i=47 + + + i=69 + + 15781 + + + DataSetWriterTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15784 + + + 0 + DataSetWriterMessageDataType + + + i=47 + + + i=69 + + 15784 + + + DataSetWriterMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15787 + + + 0 + PubSubGroupDataType + + + i=47 + + + i=69 + + 15787 + + + PubSubGroupDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21156 + + + 0 + WriterGroupDataType + + + i=47 + + + i=69 + + 21156 + + + WriterGroupDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15793 + + + 0 + WriterGroupTransportDataType + + + i=47 + + + i=69 + + 15793 + + + WriterGroupTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15854 + + + 0 + WriterGroupMessageDataType + + + i=47 + + + i=69 + + 15854 + + + WriterGroupMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15857 + + + 0 + PubSubConnectionDataType + + + i=47 + + + i=69 + + 15857 + + + PubSubConnectionDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15860 + + + 0 + ConnectionTransportDataType + + + i=47 + + + i=69 + + 15860 + + + ConnectionTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21159 + + + 0 + NetworkAddressDataType + + + i=47 + + + i=69 + + 21159 + + + NetworkAddressDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21162 + + + 0 + NetworkAddressUrlDataType + + + i=47 + + + i=69 + + 21162 + + + NetworkAddressUrlDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21165 + + + 0 + ReaderGroupDataType + + + i=47 + + + i=69 + + 21165 + + + ReaderGroupDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15866 + + + 0 + ReaderGroupTransportDataType + + + i=47 + + + i=69 + + 15866 + + + ReaderGroupTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15869 + + + 0 + ReaderGroupMessageDataType + + + i=47 + + + i=69 + + 15869 + + + ReaderGroupMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15872 + + + 0 + DataSetReaderDataType + + + i=47 + + + i=69 + + 15872 + + + DataSetReaderDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15877 + + + 0 + DataSetReaderTransportDataType + + + i=47 + + + i=69 + + 15877 + + + DataSetReaderTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15880 + + + 0 + DataSetReaderMessageDataType + + + i=47 + + + i=69 + + 15880 + + + DataSetReaderMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15883 + + + 0 + SubscribedDataSetDataType + + + i=47 + + + i=69 + + 15883 + + + SubscribedDataSetDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15886 + + + 0 + TargetVariablesDataType + + + i=47 + + + i=69 + + 15886 + + + TargetVariablesDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21002 + + + 0 + FieldTargetDataType + + + i=47 + + + i=69 + + 21002 + + + FieldTargetDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15889 + + + 0 + SubscribedDataSetMirrorDataType + + + i=47 + + + i=69 + + 15889 + + + SubscribedDataSetMirrorDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21168 + + + 0 + PubSubConfigurationDataType + + + i=47 + + + i=69 + + 21168 + + + PubSubConfigurationDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15895 + + + 0 + UadpWriterGroupMessageDataType + + + i=47 + + + i=69 + + 15895 + + + UadpWriterGroupMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15898 + + + 0 + UadpDataSetWriterMessageDataType + + + i=47 + + + i=69 + + 15898 + + + UadpDataSetWriterMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15919 + + + 0 + UadpDataSetReaderMessageDataType + + + i=47 + + + i=69 + + 15919 + + + UadpDataSetReaderMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15922 + + + 0 + JsonWriterGroupMessageDataType + + + i=47 + + + i=69 + + 15922 + + + JsonWriterGroupMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15925 + + + 0 + JsonDataSetWriterMessageDataType + + + i=47 + + + i=69 + + 15925 + + + JsonDataSetWriterMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15931 + + + 0 + JsonDataSetReaderMessageDataType + + + i=47 + + + i=69 + + 15931 + + + JsonDataSetReaderMessageDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17469 + + + 0 + DatagramConnectionTransportDataType + + + i=47 + + + i=69 + + 17469 + + + DatagramConnectionTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21171 + + + 0 + DatagramWriterGroupTransportDataType + + + i=47 + + + i=69 + + 21171 + + + DatagramWriterGroupTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15524 + + + 0 + BrokerConnectionTransportDataType + + + i=47 + + + i=69 + + 15524 + + + BrokerConnectionTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15940 + + + 0 + BrokerWriterGroupTransportDataType + + + i=47 + + + i=69 + + 15940 + + + BrokerWriterGroupTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15943 + + + 0 + BrokerDataSetWriterTransportDataType + + + i=47 + + + i=69 + + 15943 + + + BrokerDataSetWriterTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15946 + + + 0 + BrokerDataSetReaderTransportDataType + + + i=47 + + + i=69 + + 15946 + + + BrokerDataSetReaderTransportDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=23502 + + + 0 + AliasNameDataType + + + i=47 + + + i=69 + + 23502 + + + AliasNameDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16131 + + + 0 + RolePermissionType + + + i=47 + + + i=69 + + 16131 + + + RolePermissionType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18178 + + + 0 + DataTypeDefinition + + + i=47 + + + i=69 + + 18178 + + + DataTypeDefinition + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18181 + + + 0 + StructureField + + + i=47 + + + i=69 + + 18181 + + + StructureField + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18184 + + + 0 + StructureDefinition + + + i=47 + + + i=69 + + 18184 + + + StructureDefinition + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18187 + + + 0 + EnumDefinition + + + i=47 + + + i=69 + + 18187 + + + EnumDefinition + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7650 + + + 0 + Argument + + + i=47 + + + i=69 + + 7650 + + + Argument + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7656 + + + 0 + EnumValueType + + + i=47 + + + i=69 + + 7656 + + + EnumValueType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14870 + + + 0 + EnumField + + + i=47 + + + i=69 + + 14870 + + + EnumField + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12767 + + + 0 + OptionSet + + + i=47 + + + i=69 + + 12767 + + + OptionSet + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12770 + + + 0 + Union + + + i=47 + + + i=69 + + 12770 + + + Union + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8914 + + + 0 + TimeZoneDataType + + + i=47 + + + i=69 + + 8914 + + + TimeZoneDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7665 + + + 0 + ApplicationDescription + + + i=47 + + + i=69 + + 7665 + + + ApplicationDescription + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12213 + + + 0 + ServerOnNetwork + + + i=47 + + + i=69 + + 12213 + + + ServerOnNetwork + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7662 + + + 0 + UserTokenPolicy + + + i=47 + + + i=69 + + 7662 + + + UserTokenPolicy + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7668 + + + 0 + EndpointDescription + + + i=47 + + + i=69 + + 7668 + + + EndpointDescription + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7782 + + + 0 + RegisteredServer + + + i=47 + + + i=69 + + 7782 + + + RegisteredServer + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12902 + + + 0 + DiscoveryConfiguration + + + i=47 + + + i=69 + + 12902 + + + DiscoveryConfiguration + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12905 + + + 0 + MdnsDiscoveryConfiguration + + + i=47 + + + i=69 + + 12905 + + + MdnsDiscoveryConfiguration + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7698 + + + 0 + SignedSoftwareCertificate + + + i=47 + + + i=69 + + 7698 + + + SignedSoftwareCertificate + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7671 + + + 0 + UserIdentityToken + + + i=47 + + + i=69 + + 7671 + + + UserIdentityToken + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7674 + + + 0 + AnonymousIdentityToken + + + i=47 + + + i=69 + + 7674 + + + AnonymousIdentityToken + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7677 + + + 0 + UserNameIdentityToken + + + i=47 + + + i=69 + + 7677 + + + UserNameIdentityToken + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7680 + + + 0 + X509IdentityToken + + + i=47 + + + i=69 + + 7680 + + + X509IdentityToken + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7683 + + + 0 + IssuedIdentityToken + + + i=47 + + + i=69 + + 7683 + + + IssuedIdentityToken + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7728 + + + 0 + AddNodesItem + + + i=47 + + + i=69 + + 7728 + + + AddNodesItem + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7731 + + + 0 + AddReferencesItem + + + i=47 + + + i=69 + + 7731 + + + AddReferencesItem + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7734 + + + 0 + DeleteNodesItem + + + i=47 + + + i=69 + + 7734 + + + DeleteNodesItem + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7737 + + + 0 + DeleteReferencesItem + + + i=47 + + + i=69 + + 7737 + + + DeleteReferencesItem + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12718 + + + 0 + RelativePathElement + + + i=47 + + + i=69 + + 12718 + + + RelativePathElement + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12721 + + + 0 + RelativePath + + + i=47 + + + i=69 + + 12721 + + + RelativePath + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7686 + + + 0 + EndpointConfiguration + + + i=47 + + + i=69 + + 7686 + + + EndpointConfiguration + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7929 + + + 0 + ContentFilterElement + + + i=47 + + + i=69 + + 7929 + + + ContentFilterElement + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7932 + + + 0 + ContentFilter + + + i=47 + + + i=69 + + 7932 + + + ContentFilter + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7935 + + + 0 + FilterOperand + + + i=47 + + + i=69 + + 7935 + + + FilterOperand + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7938 + + + 0 + ElementOperand + + + i=47 + + + i=69 + + 7938 + + + ElementOperand + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7941 + + + 0 + LiteralOperand + + + i=47 + + + i=69 + + 7941 + + + LiteralOperand + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7944 + + + 0 + AttributeOperand + + + i=47 + + + i=69 + + 7944 + + + AttributeOperand + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7947 + + + 0 + SimpleAttributeOperand + + + i=47 + + + i=69 + + 7947 + + + SimpleAttributeOperand + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8004 + + + 0 + HistoryEvent + + + i=47 + + + i=69 + + 8004 + + + HistoryEvent + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8067 + + + 0 + MonitoringFilter + + + i=47 + + + i=69 + + 8067 + + + MonitoringFilter + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8073 + + + 0 + EventFilter + + + i=47 + + + i=69 + + 8073 + + + EventFilter + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8076 + + + 0 + AggregateConfiguration + + + i=47 + + + i=69 + + 8076 + + + AggregateConfiguration + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8172 + + + 0 + HistoryEventFieldList + + + i=47 + + + i=69 + + 8172 + + + HistoryEventFieldList + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7692 + + + 0 + BuildInfo + + + i=47 + + + i=69 + + 7692 + + + BuildInfo + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8208 + + + 0 + RedundantServerDataType + + + i=47 + + + i=69 + + 8208 + + + RedundantServerDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11959 + + + 0 + EndpointUrlListDataType + + + i=47 + + + i=69 + + 11959 + + + EndpointUrlListDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11962 + + + 0 + NetworkGroupDataType + + + i=47 + + + i=69 + + 11962 + + + NetworkGroupDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8211 + + + 0 + SamplingIntervalDiagnosticsDataType + + + i=47 + + + i=69 + + 8211 + + + SamplingIntervalDiagnosticsDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8214 + + + 0 + ServerDiagnosticsSummaryDataType + + + i=47 + + + i=69 + + 8214 + + + ServerDiagnosticsSummaryDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8217 + + + 0 + ServerStatusDataType + + + i=47 + + + i=69 + + 8217 + + + ServerStatusDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8220 + + + 0 + SessionDiagnosticsDataType + + + i=47 + + + i=69 + + 8220 + + + SessionDiagnosticsDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8223 + + + 0 + SessionSecurityDiagnosticsDataType + + + i=47 + + + i=69 + + 8223 + + + SessionSecurityDiagnosticsDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8226 + + + 0 + ServiceCounterDataType + + + i=47 + + + i=69 + + 8226 + + + ServiceCounterDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=7659 + + + 0 + StatusResult + + + i=47 + + + i=69 + + 7659 + + + StatusResult + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8229 + + + 0 + SubscriptionDiagnosticsDataType + + + i=47 + + + i=69 + + 8229 + + + SubscriptionDiagnosticsDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8232 + + + 0 + ModelChangeStructureDataType + + + i=47 + + + i=69 + + 8232 + + + ModelChangeStructureDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8235 + + + 0 + SemanticChangeStructureDataType + + + i=47 + + + i=69 + + 8235 + + + SemanticChangeStructureDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8238 + + + 0 + Range + + + i=47 + + + i=69 + + 8238 + + + Range + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8241 + + + 0 + EUInformation + + + i=47 + + + i=69 + + 8241 + + + EUInformation + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12183 + + + 0 + ComplexNumberType + + + i=47 + + + i=69 + + 12183 + + + ComplexNumberType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12186 + + + 0 + DoubleComplexNumberType + + + i=47 + + + i=69 + + 12186 + + + DoubleComplexNumberType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12091 + + + 0 + AxisInformation + + + i=47 + + + i=69 + + 12091 + + + AxisInformation + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12094 + + + 0 + XVType + + + i=47 + + + i=69 + + 12094 + + + XVType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8247 + + + 0 + ProgramDiagnosticDataType + + + i=47 + + + i=69 + + 8247 + + + ProgramDiagnosticDataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15398 + + + 0 + ProgramDiagnostic2DataType + + + i=47 + + + i=69 + + 15398 + + + ProgramDiagnostic2DataType + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8244 + + + 0 + Annotation + + + i=47 + + + i=69 + + 8244 + + + Annotation + + + + i=12 + + -1 + 1 + 1 + + + + Object_1 + + i=14802 + + + 0 + Default XML + + + i=76 + + 14802 + + + + i=38 + + true + + i=14533 + + + + + i=39 + + + i=14829 + + + + + + Object_1 + + i=15949 + + + 0 + Default XML + + + i=76 + + 15949 + + + + i=38 + + true + + i=15528 + + + + + i=39 + + + i=16024 + + + + + + Object_1 + + i=18851 + + + 0 + Default XML + + + i=76 + + 18851 + + + + i=38 + + true + + i=18806 + + + + + i=39 + + + i=18860 + + + + + + Object_1 + + i=18852 + + + 0 + Default XML + + + i=76 + + 18852 + + + + i=38 + + true + + i=18807 + + + + + i=39 + + + i=18863 + + + + + + Object_1 + + i=18853 + + + 0 + Default XML + + + i=76 + + 18853 + + + + i=38 + + true + + i=18808 + + + + + i=39 + + + i=18866 + + + + + + Object_1 + + i=18854 + + + 0 + Default XML + + + i=76 + + 18854 + + + + i=38 + + true + + i=18809 + + + + + i=39 + + + i=18869 + + + + + + Object_1 + + i=18855 + + + 0 + Default XML + + + i=76 + + 18855 + + + + i=38 + + true + + i=18810 + + + + + i=39 + + + i=19049 + + + + + + Object_1 + + i=18856 + + + 0 + Default XML + + + i=76 + + 18856 + + + + i=38 + + true + + i=18811 + + + + + i=39 + + + i=19052 + + + + + + Object_1 + + i=18857 + + + 0 + Default XML + + + i=76 + + 18857 + + + + i=38 + + true + + i=18812 + + + + + i=39 + + + i=19055 + + + + + + Object_1 + + i=18858 + + + 0 + Default XML + + + i=76 + + 18858 + + + + i=38 + + true + + i=18813 + + + + + i=39 + + + i=19058 + + + + + + Object_1 + + i=18859 + + + 0 + Default XML + + + i=76 + + 18859 + + + + i=38 + + true + + i=18814 + + + + + i=39 + + + i=19061 + + + + + + Object_1 + + i=15728 + + + 0 + Default XML + + + i=76 + + 15728 + + + + i=38 + + true + + i=15634 + + + + + i=39 + + + i=15730 + + + + + + Object_1 + + i=23520 + + + 0 + Default XML + + + i=76 + + 23520 + + + + i=38 + + true + + i=23498 + + + + + i=39 + + + i=23522 + + + + + + Object_1 + + i=12676 + + + 0 + Default XML + + + i=76 + + 12676 + + + + i=38 + + true + + i=12554 + + + + + i=39 + + + i=12677 + + + + + + Object_1 + + i=15950 + + + 0 + Default XML + + + i=76 + + 15950 + + + + i=38 + + true + + i=15534 + + + + + i=39 + + + i=16027 + + + + + + Object_1 + + i=14796 + + + 0 + Default XML + + + i=76 + + 14796 + + + + i=38 + + true + + i=14525 + + + + + i=39 + + + i=14811 + + + + + + Object_1 + + i=15589 + + + 0 + Default XML + + + i=76 + + 15589 + + + + i=38 + + true + + i=15487 + + + + + i=39 + + + i=15591 + + + + + + Object_1 + + i=15590 + + + 0 + Default XML + + + i=76 + + 15590 + + + + i=38 + + true + + i=15488 + + + + + i=39 + + + i=15594 + + + + + + Object_1 + + i=15529 + + + 0 + Default XML + + + i=76 + + 15529 + + + + i=38 + + true + + i=15005 + + + + + i=39 + + + i=15585 + + + + + + Object_1 + + i=15531 + + + 0 + Default XML + + + i=76 + + 15531 + + + + i=38 + + true + + i=15006 + + + + + i=39 + + + i=15588 + + + + + + Object_1 + + i=14794 + + + 0 + Default XML + + + i=76 + + 14794 + + + + i=38 + + true + + i=14523 + + + + + i=39 + + + i=14805 + + + + + + Object_1 + + i=14795 + + + 0 + Default XML + + + i=76 + + 14795 + + + + i=38 + + true + + i=14524 + + + + + i=39 + + + i=14808 + + + + + + Object_1 + + i=14803 + + + 0 + Default XML + + + i=76 + + 14803 + + + + i=38 + + true + + i=14593 + + + + + i=39 + + + i=14832 + + + + + + Object_1 + + i=15951 + + + 0 + Default XML + + + i=76 + + 15951 + + + + i=38 + + true + + i=15578 + + + + + i=39 + + + i=16030 + + + + + + Object_1 + + i=15952 + + + 0 + Default XML + + + i=76 + + 15952 + + + + i=38 + + true + + i=15580 + + + + + i=39 + + + i=16033 + + + + + + Object_1 + + i=14319 + + + 0 + Default XML + + + i=76 + + 14319 + + + + i=38 + + true + + i=14273 + + + + + i=39 + + + i=14320 + + + + + + Object_1 + + i=15953 + + + 0 + Default XML + + + i=76 + + 15953 + + + + i=38 + + true + + i=15581 + + + + + i=39 + + + i=16037 + + + + + + Object_1 + + i=15954 + + + 0 + Default XML + + + i=76 + + 15954 + + + + i=38 + + true + + i=15582 + + + + + i=39 + + + i=16040 + + + + + + Object_1 + + i=15955 + + + 0 + Default XML + + + i=76 + + 15955 + + + + i=38 + + true + + i=15597 + + + + + i=39 + + + i=16047 + + + + + + Object_1 + + i=15956 + + + 0 + Default XML + + + i=76 + + 15956 + + + + i=38 + + true + + i=15598 + + + + + i=39 + + + i=16050 + + + + + + Object_1 + + i=15987 + + + 0 + Default XML + + + i=76 + + 15987 + + + + i=38 + + true + + i=15605 + + + + + i=39 + + + i=16053 + + + + + + Object_1 + + i=15988 + + + 0 + Default XML + + + i=76 + + 15988 + + + + i=38 + + true + + i=15609 + + + + + i=39 + + + i=16056 + + + + + + Object_1 + + i=21174 + + + 0 + Default XML + + + i=76 + + 21174 + + + + i=38 + + true + + i=15480 + + + + + i=39 + + + i=21180 + + + + + + Object_1 + + i=15990 + + + 0 + Default XML + + + i=76 + + 15990 + + + + i=38 + + true + + i=15611 + + + + + i=39 + + + i=16062 + + + + + + Object_1 + + i=15991 + + + 0 + Default XML + + + i=76 + + 15991 + + + + i=38 + + true + + i=15616 + + + + + i=39 + + + i=16065 + + + + + + Object_1 + + i=15992 + + + 0 + Default XML + + + i=76 + + 15992 + + + + i=38 + + true + + i=15617 + + + + + i=39 + + + i=16068 + + + + + + Object_1 + + i=15993 + + + 0 + Default XML + + + i=76 + + 15993 + + + + i=38 + + true + + i=15618 + + + + + i=39 + + + i=16071 + + + + + + Object_1 + + i=21175 + + + 0 + Default XML + + + i=76 + + 21175 + + + + i=38 + + true + + i=15502 + + + + + i=39 + + + i=21183 + + + + + + Object_1 + + i=21176 + + + 0 + Default XML + + + i=76 + + 21176 + + + + i=38 + + true + + i=15510 + + + + + i=39 + + + i=21186 + + + + + + Object_1 + + i=21177 + + + 0 + Default XML + + + i=76 + + 21177 + + + + i=38 + + true + + i=15520 + + + + + i=39 + + + i=21189 + + + + + + Object_1 + + i=15995 + + + 0 + Default XML + + + i=76 + + 15995 + + + + i=38 + + true + + i=15621 + + + + + i=39 + + + i=16077 + + + + + + Object_1 + + i=15996 + + + 0 + Default XML + + + i=76 + + 15996 + + + + i=38 + + true + + i=15622 + + + + + i=39 + + + i=16080 + + + + + + Object_1 + + i=16007 + + + 0 + Default XML + + + i=76 + + 16007 + + + + i=38 + + true + + i=15623 + + + + + i=39 + + + i=16083 + + + + + + Object_1 + + i=16008 + + + 0 + Default XML + + + i=76 + + 16008 + + + + i=38 + + true + + i=15628 + + + + + i=39 + + + i=16086 + + + + + + Object_1 + + i=16009 + + + 0 + Default XML + + + i=76 + + 16009 + + + + i=38 + + true + + i=15629 + + + + + i=39 + + + i=16089 + + + + + + Object_1 + + i=16010 + + + 0 + Default XML + + + i=76 + + 16010 + + + + i=38 + + true + + i=15630 + + + + + i=39 + + + i=16092 + + + + + + Object_1 + + i=16011 + + + 0 + Default XML + + + i=76 + + 16011 + + + + i=38 + + true + + i=15631 + + + + + i=39 + + + i=16095 + + + + + + Object_1 + + i=14804 + + + 0 + Default XML + + + i=76 + + 14804 + + + + i=38 + + true + + i=14744 + + + + + i=39 + + + i=14835 + + + + + + Object_1 + + i=16012 + + + 0 + Default XML + + + i=76 + + 16012 + + + + i=38 + + true + + i=15635 + + + + + i=39 + + + i=16098 + + + + + + Object_1 + + i=21178 + + + 0 + Default XML + + + i=76 + + 21178 + + + + i=38 + + true + + i=15530 + + + + + i=39 + + + i=21192 + + + + + + Object_1 + + i=16014 + + + 0 + Default XML + + + i=76 + + 16014 + + + + i=38 + + true + + i=15645 + + + + + i=39 + + + i=16104 + + + + + + Object_1 + + i=16015 + + + 0 + Default XML + + + i=76 + + 16015 + + + + i=38 + + true + + i=15652 + + + + + i=39 + + + i=16107 + + + + + + Object_1 + + i=16016 + + + 0 + Default XML + + + i=76 + + 16016 + + + + i=38 + + true + + i=15653 + + + + + i=39 + + + i=16110 + + + + + + Object_1 + + i=16017 + + + 0 + Default XML + + + i=76 + + 16017 + + + + i=38 + + true + + i=15657 + + + + + i=39 + + + i=16113 + + + + + + Object_1 + + i=16018 + + + 0 + Default XML + + + i=76 + + 16018 + + + + i=38 + + true + + i=15664 + + + + + i=39 + + + i=16116 + + + + + + Object_1 + + i=16019 + + + 0 + Default XML + + + i=76 + + 16019 + + + + i=38 + + true + + i=15665 + + + + + i=39 + + + i=16119 + + + + + + Object_1 + + i=17472 + + + 0 + Default XML + + + i=76 + + 17472 + + + + i=38 + + true + + i=17467 + + + + + i=39 + + + i=17473 + + + + + + Object_1 + + i=21179 + + + 0 + Default XML + + + i=76 + + 21179 + + + + i=38 + + true + + i=15532 + + + + + i=39 + + + i=21195 + + + + + + Object_1 + + i=15579 + + + 0 + Default XML + + + i=76 + + 15579 + + + + i=38 + + true + + i=15007 + + + + + i=39 + + + i=15640 + + + + + + Object_1 + + i=16021 + + + 0 + Default XML + + + i=76 + + 16021 + + + + i=38 + + true + + i=15667 + + + + + i=39 + + + i=16125 + + + + + + Object_1 + + i=16022 + + + 0 + Default XML + + + i=76 + + 16022 + + + + i=38 + + true + + i=15669 + + + + + i=39 + + + i=16144 + + + + + + Object_1 + + i=16023 + + + 0 + Default XML + + + i=76 + + 16023 + + + + i=38 + + true + + i=15670 + + + + + i=39 + + + i=16147 + + + + + + Object_1 + + i=23505 + + + 0 + Default XML + + + i=76 + + 23505 + + + + i=38 + + true + + i=23468 + + + + + i=39 + + + i=23508 + + + + + + Object_1 + + i=16126 + + + 0 + Default XML + + + i=76 + + 16126 + + + + i=38 + + true + + i=96 + + + + + i=39 + + + i=16127 + + + + + + Object_1 + + i=14797 + + + 0 + Default XML + + + i=76 + + 14797 + + + + i=38 + + true + + i=97 + + + + + i=39 + + + i=18166 + + + + + + Object_1 + + i=14800 + + + 0 + Default XML + + + i=76 + + 14800 + + + + i=38 + + true + + i=101 + + + + + i=39 + + + i=18169 + + + + + + Object_1 + + i=14798 + + + 0 + Default XML + + + i=76 + + 14798 + + + + i=38 + + true + + i=99 + + + + + i=39 + + + i=18172 + + + + + + Object_1 + + i=14799 + + + 0 + Default XML + + + i=76 + + 14799 + + + + i=38 + + true + + i=100 + + + + + i=39 + + + i=18175 + + + + + + Object_1 + + i=297 + + + 0 + Default XML + + + i=76 + + 297 + + + + i=38 + + true + + i=296 + + + + + i=39 + + + i=8285 + + + + + + Object_1 + + i=7616 + + + 0 + Default XML + + + i=76 + + 7616 + + + + i=38 + + true + + i=7594 + + + + + i=39 + + + i=8291 + + + + + + Object_1 + + i=14801 + + + 0 + Default XML + + + i=76 + + 14801 + + + + i=38 + + true + + i=102 + + + + + i=39 + + + i=14826 + + + + + + Object_1 + + i=12757 + + + 0 + Default XML + + + i=76 + + 12757 + + + + i=38 + + true + + i=12755 + + + + + i=39 + + + i=12759 + + + + + + Object_1 + + i=12758 + + + 0 + Default XML + + + i=76 + + 12758 + + + + i=38 + + true + + i=12756 + + + + + i=39 + + + i=12762 + + + + + + Object_1 + + i=8913 + + + 0 + Default XML + + + i=76 + + 8913 + + + + i=38 + + true + + i=8912 + + + + + i=39 + + + i=8918 + + + + + + Object_1 + + i=309 + + + 0 + Default XML + + + i=76 + + 309 + + + + i=38 + + true + + i=308 + + + + + i=39 + + + i=8300 + + + + + + Object_1 + + i=12195 + + + 0 + Default XML + + + i=76 + + 12195 + + + + i=38 + + true + + i=12189 + + + + + i=39 + + + i=12201 + + + + + + Object_1 + + i=305 + + + 0 + Default XML + + + i=76 + + 305 + + + + i=38 + + true + + i=304 + + + + + i=39 + + + i=8297 + + + + + + Object_1 + + i=313 + + + 0 + Default XML + + + i=76 + + 313 + + + + i=38 + + true + + i=312 + + + + + i=39 + + + i=8303 + + + + + + Object_1 + + i=433 + + + 0 + Default XML + + + i=76 + + 433 + + + + i=38 + + true + + i=432 + + + + + i=39 + + + i=8417 + + + + + + Object_1 + + i=12892 + + + 0 + Default XML + + + i=76 + + 12892 + + + + i=38 + + true + + i=12890 + + + + + i=39 + + + i=12894 + + + + + + Object_1 + + i=12893 + + + 0 + Default XML + + + i=76 + + 12893 + + + + i=38 + + true + + i=12891 + + + + + i=39 + + + i=12897 + + + + + + Object_1 + + i=345 + + + 0 + Default XML + + + i=76 + + 345 + + + + i=38 + + true + + i=344 + + + + + i=39 + + + i=8333 + + + + + + Object_1 + + i=317 + + + 0 + Default XML + + + i=76 + + 317 + + + + i=38 + + true + + i=316 + + + + + i=39 + + + i=8306 + + + + + + Object_1 + + i=320 + + + 0 + Default XML + + + i=76 + + 320 + + + + i=38 + + true + + i=319 + + + + + i=39 + + + i=8309 + + + + + + Object_1 + + i=323 + + + 0 + Default XML + + + i=76 + + 323 + + + + i=38 + + true + + i=322 + + + + + i=39 + + + i=8312 + + + + + + Object_1 + + i=326 + + + 0 + Default XML + + + i=76 + + 326 + + + + i=38 + + true + + i=325 + + + + + i=39 + + + i=8315 + + + + + + Object_1 + + i=939 + + + 0 + Default XML + + + i=76 + + 939 + + + + i=38 + + true + + i=938 + + + + + i=39 + + + i=8318 + + + + + + Object_1 + + i=377 + + + 0 + Default XML + + + i=76 + + 377 + + + + i=38 + + true + + i=376 + + + + + i=39 + + + i=8363 + + + + + + Object_1 + + i=380 + + + 0 + Default XML + + + i=76 + + 380 + + + + i=38 + + true + + i=379 + + + + + i=39 + + + i=8366 + + + + + + Object_1 + + i=383 + + + 0 + Default XML + + + i=76 + + 383 + + + + i=38 + + true + + i=382 + + + + + i=39 + + + i=8369 + + + + + + Object_1 + + i=386 + + + 0 + Default XML + + + i=76 + + 386 + + + + i=38 + + true + + i=385 + + + + + i=39 + + + i=8372 + + + + + + Object_1 + + i=538 + + + 0 + Default XML + + + i=76 + + 538 + + + + i=38 + + true + + i=537 + + + + + i=39 + + + i=12712 + + + + + + Object_1 + + i=541 + + + 0 + Default XML + + + i=76 + + 541 + + + + i=38 + + true + + i=540 + + + + + i=39 + + + i=12715 + + + + + + Object_1 + + i=332 + + + 0 + Default XML + + + i=76 + + 332 + + + + i=38 + + true + + i=331 + + + + + i=39 + + + i=8321 + + + + + + Object_1 + + i=584 + + + 0 + Default XML + + + i=76 + + 584 + + + + i=38 + + true + + i=583 + + + + + i=39 + + + i=8564 + + + + + + Object_1 + + i=587 + + + 0 + Default XML + + + i=76 + + 587 + + + + i=38 + + true + + i=586 + + + + + i=39 + + + i=8567 + + + + + + Object_1 + + i=590 + + + 0 + Default XML + + + i=76 + + 590 + + + + i=38 + + true + + i=589 + + + + + i=39 + + + i=8570 + + + + + + Object_1 + + i=593 + + + 0 + Default XML + + + i=76 + + 593 + + + + i=38 + + true + + i=592 + + + + + i=39 + + + i=8573 + + + + + + Object_1 + + i=596 + + + 0 + Default XML + + + i=76 + + 596 + + + + i=38 + + true + + i=595 + + + + + i=39 + + + i=8576 + + + + + + Object_1 + + i=599 + + + 0 + Default XML + + + i=76 + + 599 + + + + i=38 + + true + + i=598 + + + + + i=39 + + + i=8579 + + + + + + Object_1 + + i=602 + + + 0 + Default XML + + + i=76 + + 602 + + + + i=38 + + true + + i=601 + + + + + i=39 + + + i=8582 + + + + + + Object_1 + + i=660 + + + 0 + Default XML + + + i=76 + + 660 + + + + i=38 + + true + + i=659 + + + + + i=39 + + + i=8639 + + + + + + Object_1 + + i=720 + + + 0 + Default XML + + + i=76 + + 720 + + + + i=38 + + true + + i=719 + + + + + i=39 + + + i=8702 + + + + + + Object_1 + + i=726 + + + 0 + Default XML + + + i=76 + + 726 + + + + i=38 + + true + + i=725 + + + + + i=39 + + + i=8708 + + + + + + Object_1 + + i=949 + + + 0 + Default XML + + + i=76 + + 949 + + + + i=38 + + true + + i=948 + + + + + i=39 + + + i=8711 + + + + + + Object_1 + + i=921 + + + 0 + Default XML + + + i=76 + + 921 + + + + i=38 + + true + + i=920 + + + + + i=39 + + + i=8807 + + + + + + Object_1 + + i=339 + + + 0 + Default XML + + + i=76 + + 339 + + + + i=38 + + true + + i=338 + + + + + i=39 + + + i=8327 + + + + + + Object_1 + + i=854 + + + 0 + Default XML + + + i=76 + + 854 + + + + i=38 + + true + + i=853 + + + + + i=39 + + + i=8843 + + + + + + Object_1 + + i=11949 + + + 0 + Default XML + + + i=76 + + 11949 + + + + i=38 + + true + + i=11943 + + + + + i=39 + + + i=11951 + + + + + + Object_1 + + i=11950 + + + 0 + Default XML + + + i=76 + + 11950 + + + + i=38 + + true + + i=11944 + + + + + i=39 + + + i=11954 + + + + + + Object_1 + + i=857 + + + 0 + Default XML + + + i=76 + + 857 + + + + i=38 + + true + + i=856 + + + + + i=39 + + + i=8846 + + + + + + Object_1 + + i=860 + + + 0 + Default XML + + + i=76 + + 860 + + + + i=38 + + true + + i=859 + + + + + i=39 + + + i=8849 + + + + + + Object_1 + + i=863 + + + 0 + Default XML + + + i=76 + + 863 + + + + i=38 + + true + + i=862 + + + + + i=39 + + + i=8852 + + + + + + Object_1 + + i=866 + + + 0 + Default XML + + + i=76 + + 866 + + + + i=38 + + true + + i=865 + + + + + i=39 + + + i=8855 + + + + + + Object_1 + + i=869 + + + 0 + Default XML + + + i=76 + + 869 + + + + i=38 + + true + + i=868 + + + + + i=39 + + + i=8858 + + + + + + Object_1 + + i=872 + + + 0 + Default XML + + + i=76 + + 872 + + + + i=38 + + true + + i=871 + + + + + i=39 + + + i=8861 + + + + + + Object_1 + + i=300 + + + 0 + Default XML + + + i=76 + + 300 + + + + i=38 + + true + + i=299 + + + + + i=39 + + + i=8294 + + + + + + Object_1 + + i=875 + + + 0 + Default XML + + + i=76 + + 875 + + + + i=38 + + true + + i=874 + + + + + i=39 + + + i=8864 + + + + + + Object_1 + + i=878 + + + 0 + Default XML + + + i=76 + + 878 + + + + i=38 + + true + + i=877 + + + + + i=39 + + + i=8867 + + + + + + Object_1 + + i=898 + + + 0 + Default XML + + + i=76 + + 898 + + + + i=38 + + true + + i=897 + + + + + i=39 + + + i=8870 + + + + + + Object_1 + + i=885 + + + 0 + Default XML + + + i=76 + + 885 + + + + i=38 + + true + + i=884 + + + + + i=39 + + + i=8873 + + + + + + Object_1 + + i=888 + + + 0 + Default XML + + + i=76 + + 888 + + + + i=38 + + true + + i=887 + + + + + i=39 + + + i=8876 + + + + + + Object_1 + + i=12173 + + + 0 + Default XML + + + i=76 + + 12173 + + + + i=38 + + true + + i=12171 + + + + + i=39 + + + i=12175 + + + + + + Object_1 + + i=12174 + + + 0 + Default XML + + + i=76 + + 12174 + + + + i=38 + + true + + i=12172 + + + + + i=39 + + + i=12178 + + + + + + Object_1 + + i=12081 + + + 0 + Default XML + + + i=76 + + 12081 + + + + i=38 + + true + + i=12079 + + + + + i=39 + + + i=12083 + + + + + + Object_1 + + i=12082 + + + 0 + Default XML + + + i=76 + + 12082 + + + + i=38 + + true + + i=12080 + + + + + i=39 + + + i=12086 + + + + + + Object_1 + + i=895 + + + 0 + Default XML + + + i=76 + + 895 + + + + i=38 + + true + + i=894 + + + + + i=39 + + + i=8882 + + + + + + Object_1 + + i=15401 + + + 0 + Default XML + + + i=76 + + 15401 + + + + i=38 + + true + + i=15396 + + + + + i=39 + + + i=15402 + + + + + + Object_1 + + i=892 + + + 0 + Default XML + + + i=76 + + 892 + + + + i=38 + + true + + i=891 + + + + + i=39 + + + i=8879 + + + + + + Variable_2 + + i=8252 + + + 0 + Opc.Ua + + + i=72 + + 8252 + + + 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 +cGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCaXRG +aWVsZE1hc2tEYXRhVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRMb25nIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJLZXlWYWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IktleSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBl +PSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5VmFsdWVQYWlyIiB0eXBlPSJ0 +bnM6S2V5VmFsdWVQYWlyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZLZXlW +YWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iktl +eVZhbHVlUGFpciIgdHlwZT0idG5zOktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mS2V5VmFsdWVQYWly +IiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludFR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VHlwZSIgdHlwZT0i +dG5zOkVuZHBvaW50VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5k +cG9pbnRUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF +bmRwb2ludFR5cGUiIHR5cGU9InRuczpFbmRwb2ludFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBvaW50VHlw +ZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmF0aW9uYWxOdW1iZXIiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyYXRvciIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZW5vbWluYXRv +ciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSYXRpb25hbE51 +bWJlciIgdHlwZT0idG5zOlJhdGlvbmFsTnVtYmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSYXRpb25hbE51bWJlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpSYXRpb25hbE51bWJlciIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpMaXN0T2ZSYXRpb25hbE51bWJlciIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +VmVjdG9yIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmVjdG9yIiB0eXBlPSJ0bnM6VmVjdG9y +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZWZWN0b3IiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZlY3RvciIgdHlwZT0idG5zOlZlY3Rv +ciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9mVmVjdG9yIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURWZWN0b3Ii +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6VmVjdG9yIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlgiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlkiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IloiIHR5cGU9InhzOmRvdWJsZSIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl +bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6VGhyZWVEVmVjdG9yIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURWZWN0b3IiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRocmVlRFZlY3RvciIgdHlwZT0i +dG5zOlRocmVlRFZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9m +VGhyZWVEVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6Q2FydGVzaWFuQ29vcmRpbmF0ZXMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVz +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5D +b29yZGluYXRlcyIgdHlwZT0idG5zOkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYXJ0 +ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJU +aHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDYXJ0ZXNpYW5Db29yZGlu +YXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJYIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJZIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJaIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29v +cmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRENhcnRl +c2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOlRocmVlRENhcnRlc2lh +bkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0i +dG5zOkxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPcmllbnRhdGlvbiI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6T3JpZW50YXRpb24iIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk9yaWVudGF0aW9uIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcmllbnRhdGlvbiIgdHlwZT0idG5z +Ok9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxpc3RPZk9yaWVu +dGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpPcmllbnRhdGlvbiI+DQog +ICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJCIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRocmVlRE9y +aWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRE9yaWVudGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOlRo +cmVlRE9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURPcmllbnRhdGlvbiIgdHlwZT0idG5zOkxp +c3RPZlRocmVlRE9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZy +YW1lIiB0eXBlPSJ0bnM6RnJhbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkZyYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGcmFt +ZSIgdHlwZT0idG5zOkZyYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGcmFtZSIgdHlwZT0idG5zOkxpc3RPZkZyYW1l +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJUaHJlZURGcmFtZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGcmFtZSI+DQogICAgICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlw +ZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBl +PSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz +OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJUaHJlZURGcmFtZSIgdHlwZT0idG5zOlRocmVlREZyYW1lIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURGcmFtZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVERnJhbWUiIHR5cGU9InRuczpUaHJlZURGcmFtZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mVGhyZWVERnJhbWUiIHR5cGU9InRuczpMaXN0T2ZUaHJlZURGcmFtZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3BlbkZpbGVN +b2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVhZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJXcml0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcmFzZUV4aXN0aW5n +XzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVuZF84IiAvPg0KICAgIDwv +eHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +T3BlbkZpbGVNb2RlIiB0eXBlPSJ0bnM6T3BlbkZpbGVNb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik9wZW5GaWxlTW9kZSIgdHlwZT0idG5zOk9wZW5GaWxlTW9kZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcGVuRmls +ZU1vZGUiIHR5cGU9InRuczpMaXN0T2ZPcGVuRmlsZU1vZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IklkZW50aXR5Q3JpdGVyaWFUeXBl +Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVXNlck5hbWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iVGh1bWJwcmludF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xlXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwSWRfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vbnltb3VzXzUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkF1dGhlbnRpY2F0ZWRVc2VyXzYiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eUNyaXRlcmlh +VHlwZSIgdHlwZT0idG5zOklkZW50aXR5Q3JpdGVyaWFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIHR5cGU9InRu +czpJZGVudGl0eUNyaXRlcmlhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSIgdHlwZT0idG5zOkxpc3RPZklk +ZW50aXR5Q3JpdGVyaWFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JpdGVyaWFUeXBlIiB0eXBlPSJ0bnM6 +SWRlbnRpdHlDcml0ZXJpYVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkNyaXRlcmlhIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIHR5cGU9InRuczpJZGVudGl0 +eU1hcHBpbmdSdWxlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSWRl +bnRpdHlNYXBwaW5nUnVsZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6SWRlbnRpdHlNYXBw +aW5nUnVsZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyaWNDb2RlIiB0eXBlPSJ4 +czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhwb25l +bnQiIHR5cGU9InhzOmJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFscGhhYmV0aWNDb2RlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW5jeSIgdHlwZT0idWE6 +TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJy +ZW5jeVVuaXRUeXBlIiB0eXBlPSJ0bnM6Q3VycmVuY3lVbml0VHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQ3VycmVuY3lVbml0VHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lVbml0VHlwZSIgdHlwZT0idG5zOkN1 +cnJlbmN5VW5pdFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkN1cnJlbmN5VW5pdFR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZDdXJyZW5jeVVuaXRUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpzaW1wbGVUeXBlICBuYW1lPSJUcnVzdExpc3RNYXNrcyI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZENlcnRpZmljYXRlc18xIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdGVkQ3Jsc18yIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJDZXJ0aWZpY2F0ZXNfNCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyQ3Jsc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJBbGxfMTUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3RNYXNrcyIgdHlwZT0idG5zOlRy +dXN0TGlzdE1hc2tzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcnVzdExpc3REYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3BlY2lm +aWVkTGlzdHMiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRl +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVHJ1c3RlZENybHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJD +ZXJ0aWZpY2F0ZXMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJDcmxzIiB0eXBl +PSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRydXN0TGlzdERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOlRydXN0TGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUcnVzdExpc3REYXRhVHlwZSIg +dHlwZT0idG5zOkxpc3RPZlRydXN0TGlzdERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWNpbWFsRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNjYWxlIiB0eXBlPSJ4czpz +aG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5 +cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJEZWNpbWFsRGF0YVR5cGUiIHR5cGU9InRuczpEZWNpbWFsRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTdHJ1Y3R1cmVEZXNj +cmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkVudW1EYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTaW1wbGVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRpb24i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVTY2hlbWFIZWFk +ZXIiIHR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBlPSJ0bnM6 +RGF0YVR5cGVTY2hlbWFIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBl +PSJ0bnM6TGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs +ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0 +aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZEYXRhVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVR5 +cGVEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iU3RydWN0dXJlRGVzY3JpcHRpb24iPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5 +cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVmaW5p +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZURlc2NyaXB0 +aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlwZT0idG5z +OlN0cnVjdHVyZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl +bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVzY3JpcHRpb24iPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6RGF0YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVmaW5pdGlvbiIgdHlwZT0idG5zOkVudW1E +ZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkVudW1EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVudW1EZXNjcmlwdGlvbiIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVzY3JpcHRpb24i +IHR5cGU9InRuczpFbnVtRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJv +dW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZXNjcmlwdGlvbiIgdHlw +ZT0idG5zOkxpc3RPZkVudW1EZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIj4NCiAg +ICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24g +YmFzZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQnVpbHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9u +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpbXBsZVR5 +cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +U2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlVHlwZURlc2NyaXB0 +aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJVQUJpbmFyeUZpbGVEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZVNjaGVtYUhl +YWRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTY2hlbWFMb2NhdGlvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbGVIZWFkZXIiIHR5cGU9 +InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQm9keSIgdHlwZT0idWE6VmFyaWFudCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp +b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVUFCaW5hcnlGaWxlRGF0YVR5cGUiIHR5cGU9InRuczpVQUJpbmFyeUZp +bGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVUFCaW5hcnlG +aWxlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VUFCaW5hcnlGaWxlRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVUFCaW5hcnlGaWxl +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IlB1YlN1YlN0YXRlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry +aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGF1c2VkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9Ik9wZXJhdGlvbmFsXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkVycm9yXzMiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOlB1YlN1YlN0YXRlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJTdGF0ZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViU3RhdGUiIHR5cGU9InRu +czpQdWJTdWJTdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YlN0YXRlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0 +TWV0YURhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJGaWVsZHMiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1ldGFEYXRhIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRDbGFz +c0lkIiB0eXBlPSJ1YTpHdWlkIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb24iIHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVy +c2lvbkRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1l +dGFEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRNZXRhRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRhRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mRGF0YVNldE1ldGFEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRNZXRhRGF0YSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZEZsYWdzIiB0 +eXBlPSJ0bnM6RGF0YVNldEZpZWxkRmxhZ3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2Rl +SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN +YXhTdHJpbmdMZW5ndGgiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRJZCIgdHlwZT0idWE6R3VpZCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWVsZE1ldGFEYXRhIiB0eXBlPSJ0bnM6RmllbGRNZXRhRGF0YSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRmllbGRNZXRhRGF0YSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRNZXRhRGF0YSIgdHlwZT0idG5zOkZpZWxk +TWV0YURhdGEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkZpZWxkTWV0YURhdGEiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1l +dGFEYXRhIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBl +ICBuYW1lPSJEYXRhU2V0RmllbGRGbGFncyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Inhz +OnVuc2lnbmVkU2hvcnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIHR5cGU9InRuczpEYXRh +U2V0RmllbGRGbGFncyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29uZmlndXJhdGlv +blZlcnNpb25EYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWFqb3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWlub3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUi +IHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lv +bkRhdGFUeXBlIiB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mQ29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3Vy +YXRpb25WZXJzaW9uRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVNldEZvbGRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFEYXRh +IiB0eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRTb3VyY2UiIHR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRE +YXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0 +YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRh +U2V0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1 +Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZERh +dGFTZXRTb3VyY2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbEhpbnQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGVhZGJhbmRUeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVhZGJhbmRWYWx1ZSIgdHlwZT0ieHM6ZG91YmxlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzdGl0dXRlVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1ldGFEYXRhUHJvcGVydGllcyIgdHlw +ZT0idWE6TGlzdE9mUXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkVmFy +aWFibGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHVibGlz +aGVkVmFyaWFibGVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZFZh +cmlhYmxlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 +eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGVkRGF0YSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIg +dHlwZT0idG5zOlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5 +cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHVibGlz +aGVkRGF0YUl0ZW1zRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6UHVibGlzaGVk +RGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZWxlY3RlZEZpZWxkcyIgdHlwZT0idG5zOkxpc3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmlsdGVyIiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVk +RXZlbnRzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxp +c2hlZEV2ZW50c0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZEV2ZW50 +c0RhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayI+DQog +ICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRG +aWVsZENvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6RGF0YVNldEZpZWxkQ29udGVudE1hc2siIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRD +b250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVsZENvbnRl +bnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldEZpZWxkQ29udGVudE1hc2siIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRX +cml0ZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcklkIiB0 +eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENv +bnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlG +cmFtZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRX +cml0ZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0 +U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgdHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRXcml0ZXJEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFdyaXRlckRhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +V3JpdGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRXcml0ZXJEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFdy +aXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFT +ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0V3JpdGVy +TWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUHViU3ViR3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwUHJvcGVydGllcyIgdHlwZT0i +dG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViR3JvdXBEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViR3JvdXBE +YXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1Ykdy +b3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJHcm91cERhdGFUeXBlIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0ZXJH +cm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2VlcEFsaXZlVGltZSIg +dHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJpb3JpdHkiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zcG9y +dFNldHRpbmdzIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZVNldHRpbmdz +IiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlcnMiIHR5cGU9InRu +czpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6V3JpdGVyR3JvdXBEYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3Jv +dXBEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZldyaXRl +ckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJHcm91cERhdGFUeXBlIiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0 +ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVy +R3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZldyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZXJHcm91cE1lc3Nh +Z2VEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJH +cm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJQdWJsaXNoZXJJZCIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlv +blByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRTZXR0 +aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3JvdXBzIiB0eXBlPSJ0bnM6 +TGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwcyIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29ubmVjdGlvbkRh +dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJDb25uZWN0 +aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNvbm5lY3Rpb25EYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9m +UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBl +IiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0 +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrQWRkcmVzc0RhdGFU +eXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgdHlw +ZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzRGF0 +YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOZXR3b3JrQWRk +cmVzc1VybERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXJsIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +QWRkcmVzc1VybERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NVcmxEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29y +a0FkZHJlc3NVcmxEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3 +b3JrQWRkcmVzc1VybERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNZXNzYWdlU2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0UmVhZGVycyIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N +CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwRGF0YVR5cGUiIHR5 +cGU9InRuczpSZWFkZXJHcm91cERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RP +ZlJlYWRlckdyb3VwRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0 +bnM6UmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw +ZSIgdHlwZT0idG5zOlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlYWRl +ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZSZWFkZXJHcm91cFRyYW5z +cG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3Jv +dXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJl +YWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlJlYWRl +ckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlw +ZSIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0UmVh +ZGVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlcklkIiB0eXBlPSJ1 +YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0 +ZXJHcm91cElkIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0V3JpdGVySWQiIHR5cGU9InhzOnVuc2lnbmVkU2hv +cnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRh +RGF0YSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50 +TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVjZWl2ZVRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5RnJh +bWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRSZWFkZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWly +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VT +ZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXQiIHR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0UmVhZGVyRGF0YVR5 +cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRSZWFkZXJEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNl +dFJlYWRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0UmVhZGVyRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5 +cGU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJUcmFu +c3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpEYXRh +U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBl +PSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFJlYWRl +ck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRE +YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERh +dGFTZXREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0 +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldFZhcmlhYmxlcyIgdHlw +ZT0idG5zOkxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgdHlwZT0idG5zOlRhcmdldFZhcmlh +Ymxlc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUYXJnZXRW +YXJpYWJsZXNEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpUYXJnZXRWYXJpYWJsZXNE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRUYXJnZXREYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkSWQiIHR5cGU9 +InVhOkd1aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlY2Vp +dmVySW5kZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlSW5kZXhSYW5nZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRs +aW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdmVycmlkZVZh +bHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRUYXJnZXRE +YXRhVHlwZSIgdHlwZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIHR5cGU9InRu +czpGaWVsZFRhcmdldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGaWVsZFRhcmdldERhdGFUeXBlIiB0eXBl +PSJ0bnM6TGlzdE9mRmllbGRUYXJnZXREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4N +CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +TGFzdFVzYWJsZVZhbHVlXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJy +aWRlVmFsdWVfMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyIgdHlwZT0idG5zOk92 +ZXJyaWRlVmFsdWVIYW5kbGluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIHR5cGU9InRuczpPdmVycmlkZVZhbHVl +SGFuZGxpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6TGlzdE9mT3ZlcnJpZGVWYWx1ZUhh +bmRsaW5nIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxl +eENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlN1 +YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyZW50Tm9kZU5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRh +dGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0TWly +cm9yRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiIHR5 +cGU9InRuczpMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJTdWJDb25m +aWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlzaGVkRGF0YVNl +dERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ29ubmVjdGlvbnMiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJDb25uZWN0aW9u +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJh +dGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJD +b25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNv +bmZpZ3VyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBl +IiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZWZpbmVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkFzY2VuZGluZ1dyaXRlcklkU2luZ2xlXzIiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T3Jk +ZXJpbmdUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0i +dG5zOkRhdGFTZXRPcmRlcmluZ1R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRh +dGFTZXRPcmRlcmluZ1R5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8 +eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rp +b24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcE5ldHdvcmtN +ZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFz +ayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNz +YWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mVWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZV +YWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwVmVyc2lvbiIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEYXRhU2V0T3JkZXJpbmciIHR5cGU9InRuczpEYXRhU2V0T3JkZXJpbmdUeXBl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdP +ZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdPZmZzZXQiIHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAg +ICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRh +VHlwZSIgdHlwZT0idG5zOlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwV3JpdGVy +R3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkxpc3RPZlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVYWRwRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwRGF0YVNl +dE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbmZpZ3VyZWRTaXplIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1i +ZXIiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0i +dG5zOlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRXcml0ZXJN +ZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpM +aXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJN +ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K +ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlw +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJH +cm91cFZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VOdW1iZXIiIHR5cGU9InhzOnVu +c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0T2Zmc2V0IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldENsYXNzSWQiIHR5cGU9InVhOkd1 +aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3Jr +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1h +c2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo +aW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlY2VpdmVPZmZzZXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdPZmZzZXQi +IHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRS +ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURh +dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9 +Ikpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFz +ZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2si +IHR5cGU9InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikpzb25OZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbk5ldHdv +cmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpMaXN0T2ZKc29uTmV0d29ya01lc3NhZ2VD +b250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21w +bGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNv +bldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6SnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZKc29uV3Jp +dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ikpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpz +b25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNvbldyaXRlckdyb3VwTWVz +c2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp +bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRN +YXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldE1l +c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25E +YXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbkRhdGFTZXRNZXNz +YWdlQ29udGVudE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRh +U2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5 +cGUiIHR5cGU9InRuczpKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +SnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZKc29uRGF0 +YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5 +cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrTWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0TWVzc2Fn +ZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6SnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldFJlYWRlck1l +c3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25U +cmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5 +cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5QWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUi +IHR5cGU9InRuczpEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFn +cmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0 +aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9y +dERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZXBlYXRDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTWVzc2FnZVJlcGVhdERlbGF5IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 +Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFncmFt +V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mRGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJh +bnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJva2Vy +Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4 +ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkNvbm5lY3Rpb25UcmFu +c3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXNvdXJjZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0 +aW9uUHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog +ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJv +a2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZCcm9rZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFuc3Bv +cnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlz +dE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkXzAiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkJlc3RFZmZvcnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iQXRMZWFzdE9uY2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QXRNb3N0T25jZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFjdGx5T25j +ZV80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIgdHlwZT0idG5z +OkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlP +ZlNlcnZpY2UiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlclRyYW5z +cG9ydFF1YWxpdHlPZlNlcnZpY2UiIHR5cGU9InRuczpMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFs +aXR5T2ZTZXJ2aWNlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVzb3VyY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlv +blByb2ZpbGVVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJh +bnRlZSIgdHlwZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpC +cm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mQnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0i +dG5zOkxpc3RPZkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRhdGFT +ZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0V3JpdGVyVHJh +bnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VVcmki +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJyb2tl +clRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik1ldGFEYXRhVXBkYXRlVGltZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv +bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJEYXRh +U2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ikxpc3RPZkJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckRh +dGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p +eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0UmVhZGVy +VHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUXVldWVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VV +cmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgdHlwZT0idG5zOkJy +b2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFJlYWRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFU +eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0UmVh +ZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5z +OkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJva2VyRGF0 +YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQnJva2VyRGF0YVNl +dFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEaWFnbm9zdGljc0xldmVsIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QmFzaWNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZWRfMSIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb18yIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJMb2dfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVi +dWdfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzTGV2ZWwiIHR5cGU9InRuczpEaWFnbm9zdGljc0xl +dmVsIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVs +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +c0xldmVsIiB0eXBlPSJ0bnM6RGlhZ25vc3RpY3NMZXZlbCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljc0xldmVsIiB0eXBlPSJ0bnM6 +TGlzdE9mRGlhZ25vc3RpY3NMZXZlbCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmlj +YXRpb24iPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbl8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJFcnJvcl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2lt +cGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xh +c3NpZmljYXRpb24iIHR5cGU9InRuczpQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNh +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3Rp +Y3NDb3VudGVyQ2xhc3NpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiB0eXBl +PSJ0bnM6UHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViRGlhZ25vc3RpY3ND +b3VudGVyQ2xhc3NpZmljYXRpb24iIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJEaWFnbm9zdGljc0Nv +dW50ZXJDbGFzc2lmaWNhdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFsaWFzTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVk +TmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlZmVyZW5jZWROb2RlcyIgdHlwZT0idWE6TGlzdE9mRXhwYW5kZWROb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUiIHR5 +cGU9InRuczpBbGlhc05hbWVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWxpYXNOYW1lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6QWxpYXNOYW1lRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQWxpYXNOYW1l +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IklkVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyaWNfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iU3RyaW5nXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ikd1aWRfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3BhcXVlXzMiIC8+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJJZFR5cGUiIHR5cGU9InRuczpJZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZklkVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iSWRUeXBlIiB0eXBlPSJ0bnM6SWRUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZklkVHlwZSIgdHlwZT0idG5zOkxpc3RPZklkVHlw +ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iTm9kZUNsYXNzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zcGVjaWZpZWRfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iT2JqZWN0XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhcmlhYmxlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF80 +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RUeXBlXzgiIC8+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlVHlwZV8xNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8zMiIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGF0YVR5cGVfNjQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlZpZXdfMTI4IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiAvPg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJtaXNzaW9uVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 +L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25UeXBlIiB0eXBl +PSJ0bnM6UGVybWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vz +c0xldmVsVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkQnl0ZSI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJBY2Nlc3NMZXZlbFR5cGUiIHR5cGU9InRuczpBY2Nlc3NMZXZlbFR5cGUiIC8+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFjY2Vzc0xldmVsRXhUeXBlIj4NCiAgICA8eHM6cmVz +dHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxFeFR5cGUi +IHR5cGU9InRuczpBY2Nlc3NMZXZlbEV4VHlwZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iRXZlbnROb3RpZmllclR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNp +Z25lZEJ5dGUiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllclR5cGUiIHR5cGU9InRuczpFdmVudE5vdGlm +aWVyVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUm9sZVBlcm1pc3Npb25UeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlBlcm1pc3Npb25zIiB0eXBlPSJ0bnM6UGVybWlzc2lvblR5cGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpSb2xlUGVy +bWlzc2lvblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJvbGVQZXJt +aXNzaW9uVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Um9sZVBlcm1pc3Npb25UeXBlIiB0eXBlPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSb2xlUGVybWlzc2lvblR5cGUiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlRGVm +aW5pdGlvbiIgdHlwZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVEZWZpbml0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9InRuczpE +YXRhVHlwZURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgdHlwZT0idG5z +Okxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iU3RydWN0dXJlVHlwZSI+DQogICAgPHhzOnJlc3Ry +aWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0 +cnVjdHVyZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJ1Y3R1cmVXaXRo +T3B0aW9uYWxGaWVsZHNfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb25f +MiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUiIHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVGaWVsZCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVz +Y3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNPcHRpb25hbCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6U3RydWN0dXJlRmll +bGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZUZpZWxkIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVGaWVs +ZCIgdHlwZT0idG5zOlN0cnVjdHVyZUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVGaWVsZCIgdHlw +ZT0idG5zOkxpc3RPZlN0cnVjdHVyZUZpZWxkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0RW5jb2RpbmdJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkJhc2VEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZVR5cGUi +IHR5cGU9InRuczpTdHJ1Y3R1cmVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0dXJlRmllbGQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBl +PSJ0bnM6U3RydWN0dXJlRGVmaW5pdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mU3RydWN0dXJlRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlRGVmaW5pdGlvbiIgdHlwZT0idG5zOlN0cnVjdHVyZURl +ZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZT +dHJ1Y3R1cmVEZWZpbml0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVmaW5pdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250 +ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlw +ZURlZmluaXRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mRW51bUZpZWxkIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURlZmluaXRpb24iIHR5cGU9InRuczpFbnVtRGVmaW5p +dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlZmluaXRpb24i +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVudW1EZWZpbml0 +aW9uIiB0eXBlPSJ0bnM6RW51bURlZmluaXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZWZpbml0aW9uIiB0 +eXBlPSJ0bnM6TGlzdE9mRW51bURlZmluaXRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vZGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNs +YXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJCcm93c2VOYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzcGxheU5h +bWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxp +emVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJXcml0ZU1hc2siIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVy +bWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyUm9sZVBl +cm1pc3Npb25zIiB0eXBlPSJ0bnM6TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzUmVz +dHJpY3Rpb25zIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNl +Tm9kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlIiB0eXBlPSJ0 +bnM6Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTm9kZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZSIgdHlwZT0idG5zOk5v +ZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZk5vZGUiIHR5cGU9InRuczpMaXN0T2ZOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJbnN0YW5jZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikluc3RhbmNlTm9kZSIg +dHlwZT0idG5zOkluc3RhbmNlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHlw +ZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhz +OmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl +eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlR5cGVO +b2RlIiB0eXBlPSJ0bnM6VHlwZU5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9i +amVjdE5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAg +PHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0Tm9kZSIgdHlwZT0idG5zOk9i +amVjdE5vZGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9iamVjdFR5cGVOb2RlIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ik9iamVjdFR5cGVOb2RlIiB0eXBlPSJ0bnM6T2JqZWN0VHlwZU5vZGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0 +YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +UmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNj +ZXNzTGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWduZWRC +eXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWluaW11 +bVNhbXBsaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3Rvcml6aW5nIiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxF +eCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlTm9kZSIg +dHlwZT0idG5zOlZhcmlhYmxlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFy +aWFibGVUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpUeXBlTm9kZSI+DQogICAgICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBl +IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJWYXJpYWJsZVR5cGVOb2RlIiB0eXBlPSJ0bnM6VmFyaWFibGVUeXBl +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN5bW1ldHJpYyIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Iklu +dmVyc2VOYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZU5vZGUiIHR5cGU9InRuczpSZWZlcmVuY2VUeXBlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTWV0aG9kTm9kZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpJbnN0YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRXhlY3V0YWJsZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJFeGVjdXRhYmxlIiB0eXBlPSJ4czpi +b29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRob2ROb2RlIiB0eXBlPSJ0bnM6TWV0aG9kTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld05vZGUiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SW5zdGFuY2VOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9Inhz +OnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmlld05vZGUiIHR5cGU9InRuczpWaWV3 +Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YVR5cGVOb2RlIj4NCiAgICA8 +eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz +ZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRh +dGFUeXBlTm9kZSIgdHlwZT0idG5zOkRhdGFUeXBlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iUmVmZXJlbmNlTm9kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0ludmVyc2Ui +IHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VOb2RlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTm9k +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlTm9kZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlTm9kZSIg +dHlwZT0idG5zOlJlZmVyZW5jZU5vZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZU5vZGUiIHR5cGU9InRu +czpMaXN0T2ZSZWZlcmVuY2VOb2RlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJBcmd1bWVudCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5cGU9InVhOkxpc3RP +ZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFyZ3VtZW50IiB0eXBlPSJ0bnM6QXJndW1lbnQi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFyZ3VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcmd1bWVudCIgdHlwZT0idG5zOkFy +Z3VtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZBcmd1bWVudCIgdHlwZT0idG5zOkxpc3RPZkFyZ3VtZW50IiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVt +VmFsdWVUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJW +YWx1ZSIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzcGxheU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIg +dHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJFbnVtVmFsdWVUeXBlIiB0eXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bVZhbHVlVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bVZhbHVlVHlwZSIgdHlwZT0idG5zOkVudW1W +YWx1ZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkVudW1WYWx1ZVR5cGUiIHR5cGU9InRuczpMaXN0T2ZFbnVtVmFs +dWVUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJFbnVtRmllbGQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2Ui +Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RW51bVZhbHVlVHlwZSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRmllbGQiIHR5 +cGU9InRuczpFbnVtRmllbGQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVu +dW1GaWVsZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51 +bUZpZWxkIiB0eXBlPSJ0bnM6RW51bUZpZWxkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtRmllbGQiIHR5cGU9InRu +czpMaXN0T2ZFbnVtRmllbGQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ik9wdGlvblNldCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbGlkQml0 +cyIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ik9wdGlvblNldCIgdHlwZT0idG5zOk9wdGlvblNldCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mT3B0aW9uU2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJPcHRpb25TZXQiIHR5cGU9InRuczpPcHRpb25TZXQiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +Zk9wdGlvblNldCIgdHlwZT0idG5zOkxpc3RPZk9wdGlvblNldCIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5pb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJVbmlvbiIgdHlwZT0idG5zOlVuaW9uIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZVbmlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iVW5pb24iIHR5cGU9InRuczpVbmlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVW5pb24iIHR5cGU9 +InRuczpMaXN0T2ZVbmlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJOb3JtYWxpemVkU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRGVjaW1hbFN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkR1cmF0aW9uU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZVN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGVTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJEdXJhdGlvbiIgdHlwZT0ieHM6ZG91YmxlIiAvPg0KDQogIDx4czpl +bGVtZW50IG5hbWU9IlV0Y1RpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiAvPg0KDQogIDx4czplbGVt +ZW50IG5hbWU9IkxvY2FsZUlkIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlRpbWVab25lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik9mZnNldCIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRheWxpZ2h0U2F2aW5nSW5PZmZzZXQiIHR5cGU9Inhz +OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lWm9uZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6VGltZVpvbmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +VGltZVpvbmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVGltZVpvbmVEYXRhVHlwZSIgdHlwZT0idG5zOlRpbWVab25lRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZlRpbWVab25lRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZUaW1lWm9uZURhdGFUeXBlIiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkluZGV4 +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlZ2Vy +SWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJB +cHBsaWNhdGlvblR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2ZXJfMCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iQ2xpZW50XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkNsaWVudEFuZFNlcnZlcl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNj +b3ZlcnlTZXJ2ZXJfMyIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgdHlwZT0idG5zOkFwcGxp +Y2F0aW9uVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXBwbGljYXRpb25EZXNj +cmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBw +bGljYXRpb25VcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2R1Y3RVcmkiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkFwcGxpY2F0aW9uTmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9u +VHlwZSIgdHlwZT0idG5zOkFwcGxpY2F0aW9uVHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iR2F0ZXdheVNlcnZlclVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlz +Y292ZXJ5UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5VXJscyIgdHlwZT0i +dWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFw +cGxpY2F0aW9uRGVzY3JpcHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlv +bkRlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkFwcGxpY2F0aW9uRGVzY3Jp +cHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlJlcXVlc3RIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFt +cCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXR1cm5EaWFnbm9zdGljcyIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1 +ZGl0RW50cnlJZCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZW91dEhpbnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlv +bmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlc3BvbnNlSGVhZGVyIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXAiIHR5cGU9InhzOmRh +dGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGFuZGxlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VydmljZVJlc3VsdCIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmljZURpYWdub3N0aWNzIiB0 +eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cmluZ1RhYmxlIiB0eXBlPSJ1YTpMaXN0T2ZTdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGRpdGlvbmFsSGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpS +ZXNwb25zZUhlYWRlciIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJzaW9uVGltZSIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VG +YXVsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9u +c2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlRmF1bHQiIHR5cGU9InRuczpTZXJ2aWNlRmF1bHQiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25sZXNzSW52b2tlUmVxdWVzdFR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVyaXNWZXJzaW9u +IiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiB0eXBlPSJ0 +bnM6U2Vzc2lvbmxlc3NJbnZva2VSZXF1ZXN0VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25zZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWVzcGFjZVVyaXMiIHR5cGU9InVhOkxpc3RPZlN0 +cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9r +ZVJlc3BvbnNlVHlwZSIgdHlwZT0idG5zOlNlc3Npb25sZXNzSW52b2tlUmVzcG9uc2VUeXBlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2Fs +ZUlkcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpcyIgdHlwZT0idWE6TGlzdE9m +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJz +UmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iRmluZFNlcnZlcnNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlcnMiIHR5cGU9InRuczpMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2Ui +IHR5cGU9InRuczpGaW5kU2VydmVyc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJTZXJ2ZXJPbk5ldHdvcmsiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGlzY292ZXJ5VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJDYXBhYmlsaXRpZXMiIHR5cGU9 +InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpTZXJ2ZXJPbk5ldHdvcmsiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNlcnZlck9uTmV0d29yayI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyT25OZXR3b3JrIiB0eXBlPSJ0bnM6U2Vy +dmVyT25OZXR3b3JrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpMaXN0T2ZT +ZXJ2ZXJPbk5ldHdvcmsiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5z +OlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTdGFydGluZ1JlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVjb3Jkc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3 +b3JrUmVxdWVzdCIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RDb3VudGVyUmVzZXRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vy +dmVycyIgdHlwZT0idG5zOkxpc3RPZlNlcnZlck9uTmV0d29yayIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiB0eXBlPSJ0 +bnM6RmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +Lz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSI+DQogICAg +PHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IkludmFsaWRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduXzIiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25BbmRFbmNyeXB0XzMiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlU2Vj +dXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCg0KICA8eHM6c2lt +cGxlVHlwZSAgbmFtZT0iVXNlclRva2VuVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9 +InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFub255bW91c18wIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyTmFtZV8xIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJJc3N1ZWRUb2tlbl8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuVHlwZSIgdHlwZT0i +dG5zOlVzZXJUb2tlblR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJUb2tl +blBvbGljeSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9s +aWN5SWQiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRva2VuVHlwZSIgdHlwZT0idG5zOlVzZXJUb2tlblR5 +cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlZFRva2Vu +VHlwZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNzdWVyRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlclRva2VuUG9saWN5IiB0eXBlPSJ0bnM6VXNlclRva2Vu +UG9saWN5IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVc2VyVG9rZW5Qb2xp +Y3kiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tl +blBvbGljeSIgdHlwZT0idG5zOlVzZXJUb2tlblBvbGljeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVXNlclRva2VuUG9s +aWN5IiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludERlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVy +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlw +dGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlckNlcnRpZmljYXRlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 +eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXNlcklkZW50aXR5VG9rZW5zIiB0eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlMZXZlbCIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpF +bmRwb2ludERlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiB0eXBlPSJ0 +bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlw +ZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9j +YWxlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9maWxlVXJpcyIgdHlwZT0idWE6TGlz +dE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkdldEVuZHBv +aW50c1JlcXVlc3QiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXF1ZXN0IiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJHZXRFbmRwb2ludHNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50cyIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRp +b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2V0RW5kcG9pbnRzUmVz +cG9uc2UiIHR5cGU9InRuczpHZXRFbmRwb2ludHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iUmVnaXN0ZXJlZFNlcnZlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9kdWN0VXJp +IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJOYW1lcyIgdHlwZT0idWE6TGlzdE9mTG9jYWxpemVk +VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclR5cGUiIHR5cGU9InRuczpBcHBsaWNhdGlvblR5cGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkdhdGV3YXlTZXJ2ZXJVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpc2NvdmVyeVVybHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFwaG9y +ZUZpbGVQYXRoIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc09ubGluZSIgdHlwZT0ieHM6Ym9vbGVhbiIg +bWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3Rl +cmVkU2VydmVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWdpc3RlcmVk +U2VydmVyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdp +c3RlcmVkU2VydmVyIiB0eXBlPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVnaXN0 +ZXJlZFNlcnZlciIgdHlwZT0idG5zOkxpc3RPZlJlZ2lzdGVyZWRTZXJ2ZXIiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2Vy +dmVyUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXIiIHR5cGU9InRu +czpSZWdpc3RlcmVkU2VydmVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi +IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWdpc3RlclNlcnZlclJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXJS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGlzY292ZXJ5Q29uZmlndXJh +dGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIHR5 +cGU9InRuczpEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEaXNjb3ZlcnlD +b25maWd1cmF0aW9uIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1kbnNTZXJ2ZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2Fw +YWJpbGl0aWVzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N +CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOk1kbnNEaXNj +b3ZlcnlDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3Rl +clNlcnZlcjJSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlciIgdHlw +ZT0idG5zOlJlZ2lzdGVyZWRTZXJ2ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyMlJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3Bv +bnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25z +ZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMi +IHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXIyUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlw +ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Iklzc3VlXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlJlbmV3XzEiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIHR5cGU9InRuczpT +ZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNo +YW5uZWxTZWN1cml0eVRva2VuIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDaGFubmVsSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb2tlbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlZEF0IiB0eXBl +PSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZExpZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNoYW5uZWxTZWN1cml0eVRva2VuIiB0eXBlPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4i +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRQcm90b2NvbFZlcnNpb24iIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXF1ZXN0VHlwZSIgdHlwZT0idG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0 +bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ2xpZW50Tm9uY2UiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZExp +ZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9wZW5T +ZWN1cmVDaGFubmVsUmVxdWVzdCIgdHlwZT0idG5zOk9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclByb3RvY29sVmVyc2lvbiIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5VG9rZW4iIHR5cGU9InRuczpDaGFubmVsU2VjdXJpdHlUb2tlbiIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZl +ck5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOk9wZW5TZWN1 +cmVDaGFubmVsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vj +dXJlQ2hhbm5lbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIHR5 +cGU9InRuczpDbG9zZVNlY3VyZUNoYW5uZWxSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJDbG9zZVNlY3VyZUNoYW5uZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9zZVNlY3Vy +ZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDZXJ0aWZpY2F0ZURh +dGEiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNpZ25lZFNvZnR3YXJl +Q2VydGlmaWNhdGUiIHR5cGU9InRuczpTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduZWRTb2Z0d2Fy +ZUNlcnRpZmljYXRlIiB0eXBlPSJ0bnM6U2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mU2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3 +YXJlQ2VydGlmaWNhdGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2Vzc2lvbkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlRGF0YSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTaWduYXR1cmUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVEYXRhIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0 +YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRlU2Vzc2lvblJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpB +cHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbk5hbWUiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNsaWVudE5vbmNlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIg +dHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkU2Vzc2lvblRpbWVvdXQiIHR5cGU9Inhz +OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVz +cG9uc2VNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJDcmVhdGVTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVy +IiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRTZXNzaW9uVGlt +ZW91dCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2VydGlm +aWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckVuZHBvaW50cyIgdHlwZT0idG5z +Okxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIg +dHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTaWduYXR1 +cmUiIHR5cGU9InRuczpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVxdWVzdE1lc3NhZ2VTaXplIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25SZXNw +b25zZSIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlBvbGljeUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcklkZW50aXR5VG9rZW4iIHR5cGU9InRuczpV +c2VySWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQW5vbnltb3Vz +SWRlbnRpdHlUb2tlbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iIHR5cGU9InRuczpBbm9ueW1v +dXNJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVc2VyTmFtZUlk +ZW50aXR5VG9rZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg +ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlck5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJQYXNzd29yZCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVu +Y3J5cHRpb25BbGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlVzZXJOYW1lSWRlbnRpdHlUb2tlbiIgdHlwZT0idG5zOlVzZXJOYW1lSWRl +bnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iWDUwOUlkZW50aXR5VG9r +ZW4iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGVEYXRhIiB0eXBlPSJ4 +czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJYNTA5SWRl +bnRpdHlUb2tlbiIgdHlwZT0idG5zOlg1MDlJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJJc3N1ZWRJZGVudGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENvbnRl +bnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJZGVu +dGl0eVRva2VuIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRva2VuRGF0YSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuY3J5cHRpb25B +bGdvcml0aG0iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv +eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Iklzc3VlZElkZW50aXR5VG9rZW4iIHR5cGU9InRuczpJc3N1ZWRJZGVudGl0eVRva2VuIiAv +Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlJzYUVuY3J5cHRlZFNlY3JldCIgdHlwZT0idWE6VmFy +aWFudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRTaWduYXR1cmUiIHR5cGU9InRu +czpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50U29mdHdhcmVDZXJ0aWZpY2F0ZXMiIHR5cGU9InRuczpM +aXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VXNlclRva2VuU2lnbmF0dXJlIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXF1ZXN0IiB0eXBlPSJ0 +bnM6QWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWN0aXZhdGVTZXNzaW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlz +dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3Rp +Y0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWN0aXZhdGVTZXNz +aW9uUmVzcG9uc2UiIHR5cGU9InRuczpBY3RpdmF0ZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkNsb3NlU2Vz +c2lvblJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2Vzc2lvblJl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkNsb3NlU2Vzc2lvblJlc3BvbnNlIiB0eXBlPSJ0bnM6Q2xvc2VT +ZXNzaW9uUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNhbmNlbFJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhhbmRsZSIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXF1ZXN0IiB0eXBlPSJ0 +bnM6Q2FuY2VsUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FuY2VsUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxDb3VudCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYW5jZWxSZXNwb25zZSIgdHlw +ZT0idG5zOkNhbmNlbFJlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJOb2Rl +QXR0cmlidXRlc01hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkFjY2Vzc0xldmVsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IkFycmF5RGltZW5zaW9uc18yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +cm93c2VOYW1lXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5zTm9M +b29wc184IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhVHlwZV8xNiIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzY3JpcHRpb25fMzIiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BsYXlOYW1lXzY0IiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJFdmVudE5vdGlmaWVyXzEyOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iRXhlY3V0YWJsZV8yNTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ikhpc3Rvcml6aW5nXzUxMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXJz +ZU5hbWVfMTAyNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNBYnN0cmFjdF8y +MDQ4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtU2FtcGxpbmdJbnRl +cnZhbF80MDk2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb2RlQ2xhc3NfODE5 +MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUlkXzE2Mzg0IiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTeW1tZXRyaWNfMzI3NjgiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlVzZXJBY2Nlc3NMZXZlbF82NTUzNiIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iVXNlckV4ZWN1dGFibGVfMTMxMDcyIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJVc2VyV3JpdGVNYXNrXzI2MjE0NCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVmFsdWVSYW5rXzUyNDI4OCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iV3JpdGVNYXNrXzEwNDg1NzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlZhbHVlXzIwOTcxNTIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFU +eXBlRGVmaW5pdGlvbl80MTk0MzA0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJS +b2xlUGVybWlzc2lvbnNfODM4ODYwOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +QWNjZXNzUmVzdHJpY3Rpb25zXzE2Nzc3MjE2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJBbGxfMzM1NTQ0MzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VO +b2RlXzI2NTAxMjIwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RfMjY1 +MDEzNDgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdFR5cGVfMjY1MDMy +NjgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlXzI2NTcxMzgzIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZVR5cGVfMjg2MDA0MzgiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZF8yNjYzMjU0OCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZV8yNjUzNzA2MCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVmlld18yNjUwMTM1NiIgLz4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVBdHRy +aWJ1dGVzTWFzayIgdHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzTWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFt +ZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6 +ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV3JpdGVNYXNrIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQXR0cmlidXRlcyIgdHlwZT0idG5zOk5v +ZGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RBdHRyaWJ1 +dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpl +eHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXIiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAg +ICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0QXR0cmlidXRlcyIgdHlwZT0idG5z +Ok9iamVjdEF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAg +ICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFy +aWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMi +IHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWdu +ZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +ckFjY2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0i +eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +SGlzdG9yaXppbmciIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyIgdHlwZT0idG5zOlZhcmlhYmxlQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTWV0aG9kQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFeGVjdXRhYmxlIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlckV4ZWN1dGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1ldGhvZEF0dHJpYnV0ZXMiIHR5cGU9InRuczpNZXRob2RBdHRyaWJ1 +dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJPYmplY3RUeXBlQXR0cmlidXRlcyIgdHlwZT0idG5zOk9iamVjdFR5 +cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZVR5cGVB +dHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJp +YW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIg +dHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlVHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpWYXJp +YWJsZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVu +Y2VUeXBlQXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0 +eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3ltbWV0cmljIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52ZXJzZU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRl +eHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVu +Y2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlQXR0cmli +dXRlcyIgdHlwZT0idG5zOlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJEYXRhVHlwZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 +cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6RGF0YVR5cGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJWaWV3QXR0cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmli +dXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDb250YWluc05vTG9vcHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudE5vdGlmaWVyIiB0eXBlPSJ4czp1bnNpZ25l +ZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv +eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZpZXdBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6Vmlld0F0 +dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1 +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZh +bHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJHZW5lcmlj +QXR0cmlidXRlVmFsdWUiIHR5cGU9InRuczpHZW5lcmljQXR0cmlidXRlVmFsdWUiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP +ZkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZkdlbmVyaWNBdHRyaWJ1dGVW +YWx1ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli +dXRlVmFsdWVzIiB0eXBlPSJ0bnM6TGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAg +PC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZXMiIHR5cGU9InRuczpH +ZW5lcmljQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNJ +dGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYXJlbnRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWROZXdOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +QnJvd3NlTmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVDbGFzcyIgdHlwZT0idG5z +Ok5vZGVDbGFzcyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9k +ZUF0dHJpYnV0ZXMiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uIiB0 +eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpBZGROb2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFkZE5vZGVzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNJdGVtIiB0eXBlPSJ0bnM6QWRkTm9kZXNJ +dGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZBZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZBZGROb2Rlc0l0ZW0i +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkFkZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRlZE5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzdWx0IiB0eXBlPSJ0 +bnM6QWRkTm9kZXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFk +ZE5vZGVzUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJBZGROb2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkFkZE5vZGVzUmVzdWx0IiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBZGRO +b2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkxpc3RPZkFkZE5vZGVzUmVzdWx0IiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGROb2Rlc1JlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb0FkZCIgdHlwZT0idG5zOkxp +c3RPZkFkZE5vZGVzSXRlbSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJB +ZGROb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpBZGROb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQWRkTm9kZXNSZXN1bHQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpBZGROb2Rl +c1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRSZWZlcmVuY2VzSXRl +bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU291cmNlTm9k +ZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iVGFyZ2V0U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRO +b2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUNsYXNzIiB0eXBlPSJ0 +bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIHR5 +cGU9InRuczpBZGRSZWZlcmVuY2VzSXRlbSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mQWRkUmVmZXJlbmNlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc0l0 +ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6TGlzdE9mQWRkUmVmZXJl +bmNlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlZmVyZW5jZXNUb0FkZCIgdHlwZT0idG5zOkxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0 +IiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3Mi +IHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSIgdHlwZT0idG5zOkFkZFJlZmVyZW5j +ZXNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNJdGVt +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVRhcmdldFJlZmVyZW5jZXMiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVO +b2Rlc0l0ZW0iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRlbGV0ZU5vZGVz +SXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +Tm9kZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEZWxldGVOb2Rl +c0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVOb2Rlc0l0ZW0iIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGV0ZU5vZGVzUmVxdWVz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhl +YWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6 +TGlzdE9mRGVsZXRlTm9kZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkRlbGV0ZU5vZGVzUmVxdWVzdCIgdHlwZT0idG5zOkRlbGV0ZU5vZGVzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNSZXNwb25zZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 +InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVOb2Rlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJE +ZWxldGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU291cmNlTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQi +IHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzRm9yd2FyZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZUJpZGlyZWN0aW9uYWwiIHR5cGU9InhzOmJvb2xlYW4iIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkRlbGV0 +ZVJlZmVyZW5jZXNJdGVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEZWxl +dGVSZWZlcmVuY2VzSXRlbSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRl +bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZEZWxldGVS +ZWZlcmVuY2VzSXRlbSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1 +ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVmZXJlbmNlc1RvRGVsZXRlIiB0eXBlPSJ0bnM6TGlzdE9mRGVsZXRlUmVm +ZXJlbmNlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +UmVmZXJlbmNlc1JlcXVlc3QiIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVz +Q29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3Bv +bnNlIiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBi +YXNlPSJ4czp1bnNpZ25lZEludCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVXcml0ZU1hc2siIHR5cGU9InRu +czpBdHRyaWJ1dGVXcml0ZU1hc2siIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dz +ZURpcmVjdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSW52ZXJzZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmFsaWRfMyIgLz4NCiAg +ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkJyb3dzZURpcmVjdGlvbiIgdHlwZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld0Rlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3SWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVz +dGFtcCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlZpZXdEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQnJvd3NlRGlyZWN0aW9uIiB0eXBlPSJ0bnM6QnJvd3NlRGlyZWN0aW9uIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUNsYXNzTWFzayIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Vs +dE1hc2siIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpCcm93c2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +QnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6 +TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkJyb3dzZVJlc3VsdE1hc2siPg0KICAgIDx4czpyZXN0 +cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO +b25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJZF8x +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc0ZvcndhcmRfMiIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUNsYXNzXzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkJyb3dzZU5hbWVfOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 +ZT0iRGlzcGxheU5hbWVfMTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVE +ZWZpbml0aW9uXzMyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxfNjMiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVJbmZvXzMiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmdldEluZm9fNjAiIC8+DQogICAgPC94czpy +ZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93 +c2VSZXN1bHRNYXNrIiB0eXBlPSJ0bnM6QnJvd3NlUmVzdWx0TWFzayIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSXNGb3J3YXJkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +TmFtZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc3BsYXlOYW1lIiB0eXBlPSJ1YTpMb2Nh +bGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXhw +YW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJl +bmNlRGVzY3JpcHRpb24iIHR5cGU9InRuczpSZWZlcmVuY2VEZXNjcmlwdGlvbiIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9u +IiB0eXBlPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZURlc2Ny +aXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9p +bnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QnJvd3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0Qmlu +YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVmZXJlbmNlcyIgdHlwZT0idG5zOkxpc3RPZlJlZmVyZW5jZURlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJlc3VsdCIgdHlwZT0i +dG5zOkJyb3dzZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJv +d3NlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VSZXN1bHQiIHR5cGU9InRuczpCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVJlc3Vs +dCIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlUmVxdWVzdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0i +dG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVx +dWVzdGVkTWF4UmVmZXJlbmNlc1Blck5vZGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvQnJvd3NlIiB0eXBlPSJ0 +bnM6TGlzdE9mQnJvd3NlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQnJvd3NlUmVxdWVzdCIgdHlwZT0idG5zOkJyb3dzZVJlcXVlc3QiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUmVzcG9uc2UiIHR5cGU9InRuczpCcm93c2VS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlTmV4dFJlcXVlc3Qi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFk +ZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsZWFzZUNvbnRpbnVhdGlvblBvaW50cyIg +dHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGludWF0aW9uUG9pbnRzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0IiB0eXBlPSJ0 +bnM6QnJvd3NlTmV4dFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dz +ZU5leHRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkJyb3dzZU5leHRSZXNwb25zZSIgdHlwZT0idG5zOkJyb3dzZU5leHRSZXNwb25zZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVsYXRpdmVQYXRoRWxlbWVudCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ludmVyc2UiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgdHlwZT0ieHM6Ym9vbGVh +biIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0TmFtZSIg +dHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsYXRpdmVQYXRo +RWxlbWVudCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlbGF0aXZl +UGF0aEVsZW1lbnQiIHR5cGU9InRuczpMaXN0T2ZSZWxhdGl2ZVBhdGhFbGVtZW50IiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWxhdGl2 +ZVBhdGgiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1l +bnRzIiB0eXBlPSJ0bnM6TGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBh +dGgiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVBhdGgiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0aW5nTm9kZSIgdHlwZT0idWE6 +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVsYXRpdmVQYXRoIiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGgiIHR5cGU9InRuczpCcm93c2VQ +YXRoIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoIiB0eXBl +PSJ0bnM6QnJvd3NlUGF0aCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aCIgdHlwZT0idG5zOkxpc3RPZkJy +b3dzZVBhdGgiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkJyb3dzZVBhdGhUYXJnZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRhcmdldElkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbWFp +bmluZ1BhdGhJbmRleCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJCcm93c2VQYXRoVGFyZ2V0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFRhcmdldCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFRhcmdldCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aFRhcmdldCIgdHlwZT0i +dG5zOkJyb3dzZVBhdGhUYXJnZXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhUYXJnZXQiIHR5cGU9InRu +czpMaXN0T2ZCcm93c2VQYXRoVGFyZ2V0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VQYXRoUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRz +IiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0aFRhcmdldCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoUmVzdWx0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFJl +c3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFJlc3Vs +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aFJlc3VsdCIgdHlwZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhS +ZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2xhdGVCcm93c2VQ +YXRoc1RvTm9kZUlkc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3Nl +UGF0aHMiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgdHlw +ZT0idG5zOlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJZHNSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZC +cm93c2VQYXRoUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2xhdGVC +cm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6VHJhbnNsYXRlQnJvd3NlUGF0 +aHNUb05vZGVJZHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0 +ZXJOb2Rlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlZ2lz +dGVyIiB0eXBlPSJ1YTpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVx +dWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhl +YWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJlZE5vZGVJZHMiIHR5cGU9 +InVhOkxpc3RPZk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpSZWdpc3Rlck5vZGVzUmVzcG9uc2UiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVucmVnaXN0ZXJOb2Rlc1JlcXVlc3QiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5 +cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1VucmVnaXN0ZXIiIHR5cGU9InVhOkxpc3RP +Zk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbnJlZ2lzdGVy +Tm9kZXNSZXF1ZXN0IiB0eXBlPSJ0bnM6VW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0 +bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +VW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiIHR5cGU9InRuczpVbnJlZ2lzdGVyTm9kZXNSZXNwb25z +ZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb3VudGVyIiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1lcmljUmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoN +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uVGltZW91dCIgdHlwZT0ieHM6 +aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VCaW5hcnlF +bmNvZGluZyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heEJ5dGVTdHJpbmdMZW5ndGgiIHR5cGU9Inhz +OmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QXJyYXlM +ZW5ndGgiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWF4TWVzc2FnZVNpemUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QnVmZmVyU2l6ZSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsTGlmZXRpbWUiIHR5cGU9 +InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJp +dHlUb2tlbkxpZmV0aW1lIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRw +b2ludENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpFbmRwb2ludENvbmZpZ3VyYXRpb24iIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRDb25maWd1 +cmF0aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnRDb25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2lu +dENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludENvbmZpZ3VyYXRpb24iIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlF1 +ZXJ5RGF0YURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJ +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVyeURhdGFEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlF1ZXJ5 +RGF0YURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZRdWVy +eURhdGFEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpRdWVyeURhdGFEZXNjcmlwdGlv +biIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZRdWVyeURh +dGFEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBh +bmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluY2x1ZGVTdWJUeXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVRvUmV0dXJuIiB0eXBlPSJ0bnM6 +TGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOk5vZGVUeXBlRGVzY3JpcHRp +b24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5vZGVUeXBlRGVzY3JpcHRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVUeXBl +RGVzY3JpcHRpb24iIHR5cGU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOb2Rl +VHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRmls +dGVyT3BlcmF0b3IiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbHNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSXNOdWxsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdy +ZWF0ZXJUaGFuXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuXzMi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbF80IiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbk9yRXF1YWxfNSIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTGlrZV82IiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJOb3RfNyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQmV0d2Vl +bl84IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbkxpc3RfOSIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5kXzEwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJPcl8xMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdF8xMiIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5WaWV3XzEzIiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJPZlR5cGVfMTQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IlJlbGF0ZWRUb18xNSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0 +d2lzZUFuZF8xNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0d2lzZU9yXzE3 +IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRmlsdGVyT3BlcmF0b3IiIHR5cGU9InRuczpGaWx0ZXJPcGVyYXRvciIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlEYXRhU2V0Ij4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVl +cyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeURhdGFTZXQiIHR5cGU9InRuczpRdWVyeURhdGFTZXQiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlF1ZXJ5RGF0YVNldCI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlEYXRhU2V0IiB0eXBlPSJ0bnM6UXVlcnlE +YXRhU2V0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZRdWVyeURhdGFTZXQiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFT +ZXQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZWROb2RlSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVJlZmVy +ZW5jZSIgdHlwZT0idG5zOk5vZGVSZWZlcmVuY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5vZGVSZWZlcmVuY2UiIHR5cGU9InRuczpOb2RlUmVmZXJlbmNlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZOb2RlUmVmZXJlbmNlIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVJlZmVyZW5jZSIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29udGVu +dEZpbHRlckVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkZpbHRlck9wZXJhdG9yIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmRzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGVudEZpbHRlckVsZW1lbnQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0 +ZXJFbGVtZW50IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRl +bnRGaWx0ZXJFbGVtZW50IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNv +bnRlbnRGaWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkVsZW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlciIgdHlwZT0idG5zOkNv +bnRlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRlbnRG +aWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRl +bnRGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy +cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVy +IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmlsdGVyT3BlcmFuZCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmQiIHR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbGVtZW50T3BlcmFuZCI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRWxlbWVudE9wZXJhbmQiIHR5cGU9InRuczpFbGVtZW50T3BlcmFuZCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGl0ZXJhbE9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3Bl +cmFuZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hz +OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu +dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGl0ZXJhbE9wZXJh +bmQiIHR5cGU9InRuczpMaXRlcmFsT3BlcmFuZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz +ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlw +ZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkFsaWFzIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0 +aCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ +bmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6QXR0cmlidXRlT3BlcmFuZCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VQYXRoIiB0eXBlPSJ1YTpMaXN0T2ZRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlk +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIHR5cGU9InRuczpTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZT +aW1wbGVBdHRyaWJ1dGVPcGVyYW5kIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6U2ltcGxlQXR0cmli +dXRlT3BlcmFuZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mU2ltcGxlQXR0cmlidXRlT3BlcmFuZCIgdHlwZT0idG5zOkxp +c3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0 +eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJPcGVyYW5kU3RhdHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVy +YW5kRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudFJlc3Vs +dCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRS +ZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29u +dGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZDb250ZW50RmlsdGVyRWxl +bWVudFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iQ29udGVudEZpbHRlclJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRWxlbWVudFJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZDb250 +ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVh +Okxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXJzaW5nUmVzdWx0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0 +dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU3Rh +dHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRGlhZ25vc3RpY0luZm9z +IiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJQYXJzaW5nUmVzdWx0IiB0eXBlPSJ0bnM6UGFyc2luZ1Jlc3VsdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFyc2luZ1Jlc3VsdCI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdCIgdHlwZT0i +dG5zOlBhcnNpbmdSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlBhcnNpbmdSZXN1bHQiIHR5cGU9InRuczpMaXN0 +T2ZQYXJzaW5nUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVR5cGVzIiB0eXBl +PSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idG5zOkNvbnRl +bnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNYXhEYXRhU2V0c1RvUmV0dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVmZXJlbmNlc1RvUmV0 +dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5Rmly +c3RSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlF1ZXJ5Rmlyc3RSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlF1ZXJ5RGF0YVNldHMiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFTZXQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250 +aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdHMiIHR5 +cGU9InRuczpMaXN0T2ZQYXJzaW5nUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlclJlc3VsdCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0 +ZXJSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlGaXJz +dFJlc3BvbnNlIiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJRdWVyeU5leHRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJR +dWVyeU5leHRSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlOZXh0UmVxdWVzdCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9u +c2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJRdWVyeURhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZENvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiIHR5cGU9InRu +czpRdWVyeU5leHRSZXNwb25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVGltZXN0 +YW1wc1RvUmV0dXJuIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlXzAiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IlNlcnZlcl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJC +b3RoXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5laXRoZXJfMyIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52YWxpZF80IiAvPg0KICAgIDwveHM6cmVzdHJp +Y3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1w +c1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6 +UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOlJlYWRWYWx1ZUlkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVhZFZhbHVlSWQiIHR5cGU9InRuczpSZWFkVmFsdWVJZCIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +UmVhZFZhbHVlSWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIgbmlsbGFibGU9InRydWUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJlcXVlc3QiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIi +IHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QWdlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIg +dHlwZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZXNUb1JlYWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmVxdWVzdCIgdHlwZT0i +dG5zOlJlYWRSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0 +T2ZEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRSZXNwb25zZSIg +dHlwZT0idG5zOlJlYWRSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlz +dG9yeVJlYWRWYWx1ZUlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBv +aW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iSGlzdG9yeVJlYWRWYWx1ZUlkIiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRWYWx1ZUlk +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5UmVhZFZhbHVlSWQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFk +VmFsdWVJZCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkVmFsdWVJZCIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRWYWx1ZUlkIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVh +ZFJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Rh +dHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikhpc3RvcnlEYXRhIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5 +UmVhZFJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGlzdG9yeVJl +YWRSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRSZXN1bHQiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkhp +c3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRSZXN1bHQiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3Rv +cnlSZWFkRGV0YWlscyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkRGV0YWls +cyIgdHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUmVhZEV2ZW50RGV0YWlscyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5UmVhZERldGFpbHMi +Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTnVt +VmFsdWVzUGVyTm9kZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlw +ZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWx0ZXIiIHR5cGU9InRuczpFdmVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlYWRFdmVudERldGFpbHMiIHR5cGU9InRuczpSZWFkRXZlbnREZXRhaWxz +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmF3TW9kaWZpZWREZXRhaWxzIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc1JlYWRNb2RpZmllZCIgdHlwZT0ieHM6Ym9v +bGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0 +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmV0dXJuQm91bmRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs +ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFk +UmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZFJhd01vZGlmaWVkRGV0YWlscyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4 +czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIgdHlwZT0idWE6TGlzdE9m +Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVD +b25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8 +L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u +dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFByb2Nl +c3NlZERldGFpbHMiIHR5cGU9InRuczpSZWFkUHJvY2Vzc2VkRGV0YWlscyIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUmVhZEF0VGltZURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VTaW1w +bGVCb3VuZHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBdFRpbWVE +ZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZEF0VGltZURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y +eVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiIHR5cGU9InRu +czpSZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJIaXN0b3J5RGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YVZhbHVlcyIgdHlwZT0idWE6TGlzdE9mRGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlEYXRhIiB0eXBlPSJ0bnM6SGlzdG9yeURhdGEi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmaWNhdGlvblRpbWUiIHR5 +cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVcGRhdGVUeXBlIiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIgdHlw +ZT0idG5zOk1vZGlmaWNhdGlvbkluZm8iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZk1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iIHR5cGU9InRuczpNb2RpZmljYXRpb25JbmZvIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZNb2RpZmljYXRpb25JbmZvIiB0eXBlPSJ0bnM6TGlzdE9mTW9kaWZpY2F0aW9uSW5m +byIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iSGlzdG9yeU1vZGlmaWVkRGF0YSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5RGF0YSI+DQogICAg +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZmljYXRp +b25JbmZvcyIgdHlwZT0idG5zOkxpc3RPZk1vZGlmaWNhdGlvbkluZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4 +dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5TW9kaWZpZWREYXRhIiB0eXBlPSJ0bnM6SGlzdG9y +eU1vZGlmaWVkRGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudHMiIHR5 +cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeUV2ZW50IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZFJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWREZXRhaWxzIiB0eXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpUaW1lc3RhbXBzVG9SZXR1 +cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGVhc2VDb250 +aW51YXRpb25Qb2ludHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik5vZGVzVG9SZWFkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJl +YWRWYWx1ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlS +ZWFkUmVxdWVzdCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5UmVhZFJlc3VsdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgdHlwZT0idG5z +Okhpc3RvcnlSZWFkUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IldyaXRl +VmFsdWUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJ +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBl +PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6RGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlVmFsdWUiIHR5cGU9InRuczpXcml0ZVZhbHVlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZVZhbHVlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZVZhbHVlIiB0eXBlPSJ0bnM6 +V3JpdGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZldyaXRlVmFs +dWUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IldyaXRlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvV3Jp +dGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IldyaXRlUmVxdWVzdCIgdHlwZT0idG5zOldyaXRlUmVxdWVzdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw +b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z +dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IldyaXRlUmVzcG9uc2UiIHR5cGU9InRuczpXcml0ZVJlc3Bv +bnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBl +PSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eVVwZGF0ZURldGFpbHMiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCg0KICA8 +eHM6c2ltcGxlVHlwZSAgbmFtZT0iSGlzdG9yeVVwZGF0ZVR5cGUiPg0KICAgIDx4czpyZXN0cmlj +dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNl +cnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZV8yIiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGVfMyIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRGVsZXRlXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpz +aW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlVHlwZSIgdHlwZT0i +dG5zOkhpc3RvcnlVcGRhdGVUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJm +b3JtVXBkYXRlVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2VydF8xIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJSZXBsYWNlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlVwZGF0ZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmVfNCIgLz4N +CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlBlcmZvcm1VcGRhdGVUeXBlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6 +Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i +dG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVy +Zm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 +ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRl +RGF0YURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZVN0cnVjdHVy +ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAg +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNl +cnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RP +ZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZVN0cnVj +dHVyZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlU3RydWN0dXJlRGF0YURldGFpbHMiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZUV2ZW50RGV0YWlscyI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgdHlwZT0idG5zOlBl +cmZvcm1VcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRmlsdGVyIiB0eXBlPSJ0bnM6RXZlbnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnREYXRhIiB0eXBl +PSJ0bnM6TGlzdE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVXBkYXRlRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlRXZlbnREZXRh +aWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFp +bHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNEZWxldGVNb2RpZmllZCIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+ +DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRlUmF3 +TW9kaWZpZWREZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVBdFRp +bWVEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBl +PSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRl +bGV0ZUF0VGltZURldGFpbHMiIHR5cGU9InRuczpEZWxldGVBdFRpbWVEZXRhaWxzIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiPg0KICAgIDx4czpjb21w +bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRJZHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiIHR5cGU9 +InRuczpEZWxldGVFdmVudERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhp +c3RvcnlVcGRhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIHR5cGU9InVhOkxpc3RP +ZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVS +ZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5VXBkYXRlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiB0eXBlPSJ0bnM6 +SGlzdG9yeVVwZGF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVVwZGF0ZVJlc3VsdCIgdHlwZT0i +dG5zOkxpc3RPZkhpc3RvcnlVcGRhdGVSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0 +eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iSGlzdG9yeVVwZGF0ZVJlcXVlc3QiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVVwZGF0ZVJlc3BvbnNlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg +dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkhpc3Rv +cnlVcGRhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0 +aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRh +dGVSZXNwb25zZSIgdHlwZT0idG5zOkhpc3RvcnlVcGRhdGVSZXNwb25zZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9iamVjdElkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRo +b2RJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudHMiIHR5cGU9InVhOkxpc3RPZlZh +cmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FsbE1ldGhvZFJl +cXVlc3QiIHR5cGU9InRuczpDYWxsTWV0aG9kUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6Q2FsbE1l +dGhvZFJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9m +Q2FsbE1ldGhvZFJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklucHV0QXJndW1lbnRS +ZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0 +aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdXRwdXRBcmd1bWVudHMi +IHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iQ2FsbE1ldGhvZFJlc3VsdCIgdHlwZT0idG5zOkNhbGxNZXRob2RSZXN1bHQiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIHR5 +cGU9InRuczpDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiB0eXBl +PSJ0bnM6TGlzdE9mQ2FsbE1ldGhvZFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FsbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpS +ZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTWV0aG9kc1RvQ2FsbCIgdHlwZT0idG5zOkxpc3RPZkNhbGxNZXRob2RS +ZXF1ZXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxSZXF1ZXN0 +IiB0eXBlPSJ0bnM6Q2FsbFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNh +bGxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9 +InRuczpMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpM +aXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJDYWxsUmVzcG9uc2UiIHR5cGU9InRuczpDYWxsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBs +ZVR5cGUgIG5hbWU9Ik1vbml0b3JpbmdNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i +eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxpbmdfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIg +dHlwZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJE +YXRhQ2hhbmdlVHJpZ2dlciI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c18wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNWYWx1ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJTdGF0dXNWYWx1ZVRpbWVzdGFtcF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZVRyaWdn +ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdlVHJpZ2dlciIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAg +bmFtZT0iRGVhZGJhbmRUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5n +Ij4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJBYnNvbHV0ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJQZXJjZW50XzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFR5cGUiIHR5cGU9InRuczpEZWFkYmFu +ZFR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyIiB0eXBlPSJ0bnM6TW9uaXRv +cmluZ0ZpbHRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZUZpbHRl +ciI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyaWdnZXIiIHR5cGU9InRuczpEYXRhQ2hh +bmdlVHJpZ2dlciIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRlYWRiYW5kVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFZhbHVlIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdl +RmlsdGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFdmVudEZpbHRlciI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlbGVjdENsYXVzZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IldoZXJlQ2xhdXNlIiB0eXBlPSJ0bnM6Q29udGVudEZp +bHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmlsdGVyIiB0eXBl +PSJ0bnM6RXZlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFnZ3JlZ2F0 +ZUNvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlVzZVNlcnZlckNhcGFiaWxpdGllc0RlZmF1bHRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmVhdFVuY2VydGFpbkFzQmFk +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQZXJjZW50RGF0YUJhZCIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJjZW50RGF0YUdvb2QiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +U2xvcGVkRXh0cmFwb2xhdGlvbiIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0 +aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIg +dHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91Ymxl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRl +Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIHR5cGU9InRuczpBZ2dy +ZWdhdGVGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0 +ZXJSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl +ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRl +clJlc3VsdCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZWxlY3RDbGF1c2VSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlbGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0lu +Zm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iV2hlcmVDbGF1c2VSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0 +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiIHR5 +cGU9InRuczpFdmVudEZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QWdncmVnYXRlRmlsdGVyUmVzdWx0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZh +bHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1 +bHQiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV2aXNlZFN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHJvY2Vzc2luZ0ludGVydmFsIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJSZXZpc2VkQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZp +Z3VyYXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0 +ZXJSZXN1bHQiIHR5cGU9InRuczpBZ2dyZWdhdGVGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0lu +dGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVTaXplIiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGlzY2FyZE9sZGVzdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtVG9Nb25p +dG9yIiB0eXBlPSJ0bnM6UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIgdHlwZT0idG5zOk1v +bml0b3JpbmdNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVl +c3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVS +ZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1v +bml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNy +ZWF0ZVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0Nv +ZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0 +ZW1JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNpemUi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiB0 +eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIg +dHlwZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0 +ZW1DcmVhdGVSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0 +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpU +aW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ikl0ZW1zVG9DcmVhdGUiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVx +dWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVNb25pdG9y +ZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9m +TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlz +dE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +Q3JlYXRlTW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkNyZWF0ZU1vbml0b3JlZEl0 +ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1N +b2RpZnlSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJNb25pdG9yZWRJdGVtSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6 +TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtTW9k +aWZ5UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVk +SXRlbU1vZGlmeVJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRl +bU1vZGlmeVJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBl +PSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2Rp +ZnlSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0 +YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNp +emUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0 +IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3Vs +dCIgdHlwZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3Jl +ZEl0ZW1Nb2RpZnlSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVz +dWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRu +czpUaW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikl0ZW1zVG9Nb2RpZnkiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlNb25p +dG9yZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3Qi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmeU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlz +dE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOk1vZGlmeU1vbml0b3Jl +ZEl0ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3Jp +bmdNb2RlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25J +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik1vbml0b3JpbmdNb2RlIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ01vZGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJTZXRNb25pdG9yaW5nTW9kZVJlcXVlc3QiIHR5cGU9InRuczpTZXRNb25pdG9yaW5nTW9kZVJl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpM +aXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9z +dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXRNb25pdG9y +aW5nTW9kZVJlc3BvbnNlIiB0eXBlPSJ0bnM6U2V0TW9uaXRvcmluZ01vZGVSZXNwb25zZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2V0VHJpZ2dlcmluZ1JlcXVlc3QiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9 +InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlnZ2VyaW5nSXRl +bUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlua3NUb0FkZCIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlua3NUb1Jl +bW92ZSIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jl +cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFRyaWdnZXJpbmdSZXNwb25z +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VI +ZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZFJlc3VsdHMiIHR5cGU9InVhOkxp +c3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdu +b3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUmVtb3ZlUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +bW92ZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiB0 +eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWRzIiB0eXBlPSJ1YTpM +aXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRl +TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiB0eXBlPSJ0bnM6RGVsZXRlTW9uaXRvcmVkSXRlbXNSZXF1 +ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1Jl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6 +TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25v +c3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTW9u +aXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcXVlc3RlZExpZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxp +dmVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiB0eXBlPSJ4czp1bnNp +Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGluZ0VuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlByaW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6Q3JlYXRl +U3Vic2NyaXB0aW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRl +U3Vic2NyaXB0aW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJz +Y3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRv +dWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZExp +ZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9u +c2UiIHR5cGU9InRuczpDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl +cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZFB1Ymxpc2hpbmdJ +bnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkTWF4S2Vl +cEFsaXZlQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBy +aW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2Rp +ZnlTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVz +dCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNv +dW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1 +YnNjcmlwdGlvblJlc3BvbnNlIiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9uc2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6 +Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aXB0aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0UHVi +bGlzaGluZ01vZGVSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRQdWJs +aXNoaW5nTW9kZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0 +cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 +TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2V0UHVibGlzaGluZ01vZGVSZXNwb25zZSIgdHlwZT0idG5zOlNldFB1Ymxpc2hpbmdNb2Rl +UmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3Nh +Z2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcXVlbmNl +TnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHVibGlzaFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTm90aWZpY2F0aW9uTWVzc2FnZSIgdHlwZT0idG5zOk5vdGlmaWNhdGlvbk1lc3NhZ2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9u +RGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlv +biI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 +ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1zIiB0eXBlPSJ0bnM6 +TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5 +cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAg +PC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbiIgdHlwZT0idG5zOkRhdGFDaGFuZ2VOb3RpZmlj +YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmlj +YXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVu +dEhhbmRsZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgdHlwZT0i +dG5zOk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIHR5cGU9 +InRuczpNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTm90 +aWZpY2F0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXZl +bnROb3RpZmljYXRpb25MaXN0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNl +Ij4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAg +ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRzIiB0 +eXBlPSJ0bnM6TGlzdE9mRXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJFdmVudE5vdGlmaWNhdGlvbkxpc3QiIHR5cGU9InRuczpFdmVudE5vdGlmaWNhdGlv +bkxpc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2ZW50RmllbGRMaXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJFdmVudEZpZWxkcyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkTGlzdCIgdHlwZT0idG5zOkV2ZW50Rmll +bGRMaXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFdmVudEZpZWxkTGlz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWVs +ZExpc3QiIHR5cGU9InRuczpFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXZlbnRGaWVsZExpc3Qi +IHR5cGU9InRuczpMaXN0T2ZFdmVudEZpZWxkTGlzdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50RmllbGRMaXN0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkcyIg +dHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpIaXN0b3J5RXZlbnRGaWVsZExp +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkhpc3RvcnlFdmVudEZpZWxk +TGlzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y +eUV2ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVs +ZExpc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRp +b25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXR1cyIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGlj +SW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1 +ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlm +aWNhdGlvbiIgdHlwZT0idG5zOlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgdHlwZT0idG5zOlN1YnNjcmlwdGlvbkFj +a25vd2xlZGdlbWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2Ny +aXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRuczpTdWJzY3Jp +cHRpb25BY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dCIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaFJl +cXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVl +c3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVk +Z2VtZW50cyIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoUmVxdWVzdCIgdHlwZT0i +dG5zOlB1Ymxpc2hSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNo +UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +c3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TW9yZU5vdGlmaWNhdGlvbnMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3Rp +ZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRp +YWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UHVi +bGlzaFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXF1 +ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV0cmFuc21pdFNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3QiIHR5cGU9InRuczpSZXB1Ymxpc2hSZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXNwb25zZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5 +cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpO +b3RpZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlJlcHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVwdWJsaXNoUmVzcG9uc2UiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZmVyUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2Rl +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdmFpbGFibGVTZXF1 +ZW5jZU51bWJlcnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclJlc3VsdCIgdHlwZT0idG5zOlRyYW5zZmVyUmVzdWx0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUcmFuc2ZlclJlc3VsdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJSZXN1bHQi +IHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHQiIHR5cGU9 +InRuczpMaXN0T2ZUcmFuc2ZlclJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRl +ciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxp +c3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCIgdHlwZT0idG5zOlRy +YW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZlRyYW5zZmVyUmVzdWx0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3Rp +Y0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgdHlwZT0i +dG5zOlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIg +dHlwZT0idG5zOkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz +cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25v +c3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIHR5cGU9 +InRuczpEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkJ1aWxkSW5mbyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlw +ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHJvZHVjdE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvZnR3YXJlVmVy +c2lvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGROdW1iZXIiIHR5cGU9InhzOnN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ1 +aWxkRGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsZElu +Zm8iIHR5cGU9InRuczpCdWlsZEluZm8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlJl +ZHVuZGFuY3lTdXBwb3J0Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJDb2xkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ildh +cm1fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSG90XzMiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcGFyZW50XzQiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkhvdEFuZE1pcnJvcmVkXzUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4N +CiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbmN5U3VwcG9y +dCIgdHlwZT0idG5zOlJlZHVuZGFuY3lTdXBwb3J0IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBu +YW1lPSJTZXJ2ZXJTdGF0ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bm5pbmdfMCIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9Ik5vQ29uZmlndXJhdGlvbl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJT +dXNwZW5kZWRfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2h1dGRvd25fNCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdF81IiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pY2F0aW9uRmF1bHRfNiIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVW5rbm93bl83IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyU3RhdGUiIHR5cGU9InRu +czpTZXJ2ZXJTdGF0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVkdW5kYW50U2Vy +dmVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlcnZlcklkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTGV2ZWwiIHR5cGU9InhzOnVuc2ln +bmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVy +U3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZHVu +ZGFudFNlcnZlckRhdGFUeXBlIiB0eXBlPSJ0bnM6UmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZHVuZGFudFNlcnZlckRhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbnRT +ZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlZHVuZGFudFNlcnZl +ckRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxMaXN0IiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxM +aXN0RGF0YVR5cGUiIHR5cGU9InRuczpFbmRwb2ludFVybExpc3REYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdERh +dGFUeXBlIiB0eXBlPSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBv +aW50VXJsTGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5 +cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtQYXRocyIg +dHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0 +d29ya0dyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5l +dHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtHcm91cERhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZk5ldHdv +cmtHcm91cERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZh +bCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhNb25pdG9yZWRJdGVtQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIg +dHlwZT0idG5zOlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxp +bmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTYW1wbGluZ0ludGVydmFs +RGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRh +VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclZpZXdDb3VudCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJl +bnRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1 +cml0eVJlamVjdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZXNzaW9uVGltZW91dENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkFib3J0Q291bnQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTdWJzY3JpcHRpb25D +b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlSZWpl +Y3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWplY3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1t +YXJ5RGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2ZXJEaWFnbm9zdGljc1N1bW1hcnlEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmVyU3RhdHVzRGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0i +eHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1 +cnJlbnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGRJbmZvIiB0eXBlPSJ0bnM6QnVpbGRJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU2Vjb25kc1RpbGxTaHV0ZG93biIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNodXRkb3duUmVhc29uIiB0eXBlPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNl +cnZlclN0YXR1c0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2VydmVyU3RhdHVzRGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNlc3Npb25OYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnREZXNjcmlw +dGlvbiIgdHlwZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5 +cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkFjdHVhbFNlc3Npb25UaW1lb3V0IiB0eXBlPSJ4czpkb3Vi +bGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heFJlc3BvbnNl +TWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDb25uZWN0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRp +bWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudExhc3RD +b250YWN0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50 +TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJlbnRQdWJsaXNoUmVxdWVzdHNJblF1ZXVl +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVW5hdXRob3JpemVkUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZENvdW50IiB0eXBlPSJ0 +bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRl +ckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ2FsbENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNyZWF0ZU1vbml0b3JlZEl0ZW1zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlNldFRyaWdnZXJpbmdDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vy +dmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIHR5cGU9InRuczpT +ZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlcHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgdHlwZT0idG5zOlNlcnZp +Y2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZGROb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWxldGVOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJCcm93c2VDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC +cm93c2VOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNs +YXRlQnJvd3NlUGF0aHNUb05vZGVJZHNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeUZpcnN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUXVlcnlOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVucmVn +aXN0ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlw +ZSIgdHlwZT0idG5zOlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkRpYWdub3N0aWNzRGF0 +YVR5cGUiIHR5cGU9InRuczpTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2Vz +c2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTZXNzaW9uRGlhZ25vc3Rp +Y3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbklkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDbGllbnRVc2VySWRPZlNlc3Npb24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudFVz +ZXJJZEhpc3RvcnkiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uTWVjaGFu +aXNtIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNw +b3J0UHJvdG9jb2wiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1l +c3NhZ2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0 +ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTZXNz +aW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9z +dGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRv +dGFsQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJFcnJvckNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2aWNl +Q291bnRlckRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNSZXN1 +bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0Nv +ZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNSZXN1bHQiIHR5cGU9InRuczpT +dGF0dXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YXR1c1Jl +c3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVz +UmVzdWx0IiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNSZXN1bHQiIHR5 +cGU9InRuczpMaXN0T2ZTdGF0dXNSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5 +cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25J +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eSIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhM +aWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ +dWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRpc2FibGVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3RDb3VudCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl +cHVibGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJUcmFuc2ZlclJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9BbHRDbGll +bnRDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJs +aXNoUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbnNDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm90aWZpY2F0aW9uc0NvdW50IiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50S2VlcEFsaXZlQ291 +bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJDdXJyZW50TGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuYWNrbm93bGVkZ2VkTWVz +c2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVk +SXRlbUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25p +dG9yaW5nUXVldWVPdmVyZmxvd0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV4dFNlcXVlbmNlTnVtYmVyIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRXZlbnRRdWV1ZU92ZXJGbG93Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5z +OlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNz +RGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU3Vi +c2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVWZXJiTWFz +ayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Ik5vZGVBZGRlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJOb2RlRGVsZXRlZF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZl +cmVuY2VBZGRlZF80IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VE +ZWxldGVkXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlQ2hhbmdl +ZF8xNiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siIHR5cGU9InRuczpN +b2RlbENoYW5nZVN0cnVjdHVyZVZlcmJNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWZmZWN0ZWRU +eXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJiIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6 +TW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIg +dHlwZT0idG5zOk1vZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vZGVsQ2hh +bmdlU3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZNb2RlbENoYW5nZVN0cnVjdHVy +ZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQWZmZWN0ZWRUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5z +OlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJl +RGF0YVR5cGUiIHR5cGU9InRuczpTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU2Vt +YW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmFuZ2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvdyIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaWdoIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJSYW5nZSIgdHlwZT0idG5zOlJhbmdlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJFVUluZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXRJ +ZCIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBl +PSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkVVSW5mb3JtYXRpb24iIHR5cGU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVhcl8w +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMb2dfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iTG5fMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9uIiB0 +eXBlPSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IkNvbXBsZXhOdW1iZXJUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSW1hZ2luYXJ5IiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkNvbXBsZXhOdW1iZXJUeXBlIiB0eXBlPSJ0bnM6Q29tcGxleE51bWJlclR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4 +czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkltYWdp +bmFyeSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlQ29tcGxl +eE51bWJlclR5cGUiIHR5cGU9InRuczpEb3VibGVDb21wbGV4TnVtYmVyVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iQXhpc0luZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmdpbmVlcmluZ1VuaXRzIiB0eXBlPSJ0bnM6RVVJ +bmZvcm1hdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkVVUmFuZ2UiIHR5cGU9InRuczpSYW5nZSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpdGxlIiB0eXBlPSJ1YTpM +b2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQXhpc1NjYWxlVHlwZSIgdHlwZT0idG5zOkF4aXNTY2FsZUVudW1lcmF0 +aW9uIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBeGlzU3RlcHMi +IHR5cGU9InVhOkxpc3RPZkRvdWJsZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBeGlzSW5mb3JtYXRpb24iIHR5cGU9InRuczpBeGlzSW5mb3JtYXRpb24iIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlhWVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iWCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJYVlR5cGUiIHR5cGU9InRuczpYVlR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ3JlYXRlQ2xpZW50TmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2NhdGlvbkNyZWF0aW9u +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0 +aG9kSW5wdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RP +dXRwdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxs +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0dXMiIHR5cGU9InRuczpTdGF0dXNSZXN1bHQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvZ3JhbURpYWdub3N0aWNE +YXRhVHlwZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uSWQiIHR5cGU9 +InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkNyZWF0ZUNsaWVudE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikludm9jYXRp +b25DcmVhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0VHJhbnNpdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1l +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2Fs +bCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZFNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM +YXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0 +TWV0aG9kSW5wdXRWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kT3V0 +cHV0VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiB0 +eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGFzdE1ldGhvZFJldHVyblN0YXR1cyIgdHlwZT0idG5zOlN0YXR1c1Jlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9ncmFtRGlhZ25vc3RpYzJEYXRhVHlw +ZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJBbm5vdGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJNZXNzYWdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iQW5ub3RhdGlvbiIgdHlwZT0idG5zOkFubm90YXRpb24iIC8+DQoNCiAgPHhz +OnNpbXBsZVR5cGUgIG5hbWU9IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCI+DQogICAgPHhzOnJl +c3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkFic29sdXRlVmFsdWVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2Vu +dE9mVmFsdWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mUmFu +Z2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mRVVSYW5nZV8z +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVbmtub3duXzQiIC8+DQogICAgPC94 +czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJF +eGNlcHRpb25EZXZpYXRpb25Gb3JtYXQiIHR5cGU9InRuczpFeGNlcHRpb25EZXZpYXRpb25Gb3Jt +YXQiIC8+DQoNCjwveHM6c2NoZW1hPg== + + + + i=15 + + -1 + 1 + 1 + + + + i=47 + + true + + i=92 + + + + + Variable_2 + + i=8254 + + + 0 + NamespaceUri + + + i=46 + + + i=68 + + 8254 + + + http://opcfoundation.org/UA/2008/02/Types.xsd + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15039 + + + 0 + Deprecated + + + i=46 + + + i=68 + + 15039 + + + true + + + + i=1 + + -1 + 1 + 1 + + + Variable_2 + + i=14829 + + + 0 + KeyValuePair + + + i=47 + + + i=69 + + 14829 + + + //xs:element[@name='KeyValuePair'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16024 + + + 0 + EndpointType + + + i=47 + + + i=69 + + 16024 + + + //xs:element[@name='EndpointType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18860 + + + 0 + RationalNumber + + + i=47 + + + i=69 + + 18860 + + + //xs:element[@name='RationalNumber'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18863 + + + 0 + Vector + + + i=47 + + + i=69 + + 18863 + + + //xs:element[@name='Vector'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18866 + + + 0 + 3DVector + + + i=47 + + + i=69 + + 18866 + + + //xs:element[@name='ThreeDVector'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18869 + + + 0 + CartesianCoordinates + + + i=47 + + + i=69 + + 18869 + + + //xs:element[@name='CartesianCoordinates'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=19049 + + + 0 + 3DCartesianCoordinates + + + i=47 + + + i=69 + + 19049 + + + //xs:element[@name='ThreeDCartesianCoordinates'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=19052 + + + 0 + Orientation + + + i=47 + + + i=69 + + 19052 + + + //xs:element[@name='Orientation'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=19055 + + + 0 + 3DOrientation + + + i=47 + + + i=69 + + 19055 + + + //xs:element[@name='ThreeDOrientation'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=19058 + + + 0 + Frame + + + i=47 + + + i=69 + + 19058 + + + //xs:element[@name='Frame'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=19061 + + + 0 + 3DFrame + + + i=47 + + + i=69 + + 19061 + + + //xs:element[@name='ThreeDFrame'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15730 + + + 0 + IdentityMappingRuleType + + + i=47 + + + i=69 + + 15730 + + + //xs:element[@name='IdentityMappingRuleType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=23522 + + + 0 + CurrencyUnitType + + + i=47 + + + i=69 + + 23522 + + + //xs:element[@name='CurrencyUnitType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12677 + + + 0 + TrustListDataType + + + i=47 + + + i=69 + + 12677 + + + //xs:element[@name='TrustListDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16027 + + + 0 + DataTypeSchemaHeader + + + i=47 + + + i=69 + + 16027 + + + //xs:element[@name='DataTypeSchemaHeader'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14811 + + + 0 + DataTypeDescription + + + i=47 + + + i=69 + + 14811 + + + //xs:element[@name='DataTypeDescription'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15591 + + + 0 + StructureDescription + + + i=47 + + + i=69 + + 15591 + + + //xs:element[@name='StructureDescription'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15594 + + + 0 + EnumDescription + + + i=47 + + + i=69 + + 15594 + + + //xs:element[@name='EnumDescription'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15585 + + + 0 + SimpleTypeDescription + + + i=47 + + + i=69 + + 15585 + + + //xs:element[@name='SimpleTypeDescription'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15588 + + + 0 + UABinaryFileDataType + + + i=47 + + + i=69 + + 15588 + + + //xs:element[@name='UABinaryFileDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14805 + + + 0 + DataSetMetaDataType + + + i=47 + + + i=69 + + 14805 + + + //xs:element[@name='DataSetMetaDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14808 + + + 0 + FieldMetaData + + + i=47 + + + i=69 + + 14808 + + + //xs:element[@name='FieldMetaData'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14832 + + + 0 + ConfigurationVersionDataType + + + i=47 + + + i=69 + + 14832 + + + //xs:element[@name='ConfigurationVersionDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16030 + + + 0 + PublishedDataSetDataType + + + i=47 + + + i=69 + + 16030 + + + //xs:element[@name='PublishedDataSetDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16033 + + + 0 + PublishedDataSetSourceDataType + + + i=47 + + + i=69 + + 16033 + + + //xs:element[@name='PublishedDataSetSourceDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14320 + + + 0 + PublishedVariableDataType + + + i=47 + + + i=69 + + 14320 + + + //xs:element[@name='PublishedVariableDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16037 + + + 0 + PublishedDataItemsDataType + + + i=47 + + + i=69 + + 16037 + + + //xs:element[@name='PublishedDataItemsDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16040 + + + 0 + PublishedEventsDataType + + + i=47 + + + i=69 + + 16040 + + + //xs:element[@name='PublishedEventsDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16047 + + + 0 + DataSetWriterDataType + + + i=47 + + + i=69 + + 16047 + + + //xs:element[@name='DataSetWriterDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16050 + + + 0 + DataSetWriterTransportDataType + + + i=47 + + + i=69 + + 16050 + + + //xs:element[@name='DataSetWriterTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16053 + + + 0 + DataSetWriterMessageDataType + + + i=47 + + + i=69 + + 16053 + + + //xs:element[@name='DataSetWriterMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16056 + + + 0 + PubSubGroupDataType + + + i=47 + + + i=69 + + 16056 + + + //xs:element[@name='PubSubGroupDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21180 + + + 0 + WriterGroupDataType + + + i=47 + + + i=69 + + 21180 + + + //xs:element[@name='WriterGroupDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16062 + + + 0 + WriterGroupTransportDataType + + + i=47 + + + i=69 + + 16062 + + + //xs:element[@name='WriterGroupTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16065 + + + 0 + WriterGroupMessageDataType + + + i=47 + + + i=69 + + 16065 + + + //xs:element[@name='WriterGroupMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16068 + + + 0 + PubSubConnectionDataType + + + i=47 + + + i=69 + + 16068 + + + //xs:element[@name='PubSubConnectionDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16071 + + + 0 + ConnectionTransportDataType + + + i=47 + + + i=69 + + 16071 + + + //xs:element[@name='ConnectionTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21183 + + + 0 + NetworkAddressDataType + + + i=47 + + + i=69 + + 21183 + + + //xs:element[@name='NetworkAddressDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21186 + + + 0 + NetworkAddressUrlDataType + + + i=47 + + + i=69 + + 21186 + + + //xs:element[@name='NetworkAddressUrlDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21189 + + + 0 + ReaderGroupDataType + + + i=47 + + + i=69 + + 21189 + + + //xs:element[@name='ReaderGroupDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16077 + + + 0 + ReaderGroupTransportDataType + + + i=47 + + + i=69 + + 16077 + + + //xs:element[@name='ReaderGroupTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16080 + + + 0 + ReaderGroupMessageDataType + + + i=47 + + + i=69 + + 16080 + + + //xs:element[@name='ReaderGroupMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16083 + + + 0 + DataSetReaderDataType + + + i=47 + + + i=69 + + 16083 + + + //xs:element[@name='DataSetReaderDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16086 + + + 0 + DataSetReaderTransportDataType + + + i=47 + + + i=69 + + 16086 + + + //xs:element[@name='DataSetReaderTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16089 + + + 0 + DataSetReaderMessageDataType + + + i=47 + + + i=69 + + 16089 + + + //xs:element[@name='DataSetReaderMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16092 + + + 0 + SubscribedDataSetDataType + + + i=47 + + + i=69 + + 16092 + + + //xs:element[@name='SubscribedDataSetDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16095 + + + 0 + TargetVariablesDataType + + + i=47 + + + i=69 + + 16095 + + + //xs:element[@name='TargetVariablesDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14835 + + + 0 + FieldTargetDataType + + + i=47 + + + i=69 + + 14835 + + + //xs:element[@name='FieldTargetDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16098 + + + 0 + SubscribedDataSetMirrorDataType + + + i=47 + + + i=69 + + 16098 + + + //xs:element[@name='SubscribedDataSetMirrorDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21192 + + + 0 + PubSubConfigurationDataType + + + i=47 + + + i=69 + + 21192 + + + //xs:element[@name='PubSubConfigurationDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16104 + + + 0 + UadpWriterGroupMessageDataType + + + i=47 + + + i=69 + + 16104 + + + //xs:element[@name='UadpWriterGroupMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16107 + + + 0 + UadpDataSetWriterMessageDataType + + + i=47 + + + i=69 + + 16107 + + + //xs:element[@name='UadpDataSetWriterMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16110 + + + 0 + UadpDataSetReaderMessageDataType + + + i=47 + + + i=69 + + 16110 + + + //xs:element[@name='UadpDataSetReaderMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16113 + + + 0 + JsonWriterGroupMessageDataType + + + i=47 + + + i=69 + + 16113 + + + //xs:element[@name='JsonWriterGroupMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16116 + + + 0 + JsonDataSetWriterMessageDataType + + + i=47 + + + i=69 + + 16116 + + + //xs:element[@name='JsonDataSetWriterMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16119 + + + 0 + JsonDataSetReaderMessageDataType + + + i=47 + + + i=69 + + 16119 + + + //xs:element[@name='JsonDataSetReaderMessageDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=17473 + + + 0 + DatagramConnectionTransportDataType + + + i=47 + + + i=69 + + 17473 + + + //xs:element[@name='DatagramConnectionTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=21195 + + + 0 + DatagramWriterGroupTransportDataType + + + i=47 + + + i=69 + + 21195 + + + //xs:element[@name='DatagramWriterGroupTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15640 + + + 0 + BrokerConnectionTransportDataType + + + i=47 + + + i=69 + + 15640 + + + //xs:element[@name='BrokerConnectionTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16125 + + + 0 + BrokerWriterGroupTransportDataType + + + i=47 + + + i=69 + + 16125 + + + //xs:element[@name='BrokerWriterGroupTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16144 + + + 0 + BrokerDataSetWriterTransportDataType + + + i=47 + + + i=69 + + 16144 + + + //xs:element[@name='BrokerDataSetWriterTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16147 + + + 0 + BrokerDataSetReaderTransportDataType + + + i=47 + + + i=69 + + 16147 + + + //xs:element[@name='BrokerDataSetReaderTransportDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=23508 + + + 0 + AliasNameDataType + + + i=47 + + + i=69 + + 23508 + + + //xs:element[@name='AliasNameDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=16127 + + + 0 + RolePermissionType + + + i=47 + + + i=69 + + 16127 + + + //xs:element[@name='RolePermissionType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18166 + + + 0 + DataTypeDefinition + + + i=47 + + + i=69 + + 18166 + + + //xs:element[@name='DataTypeDefinition'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18169 + + + 0 + StructureField + + + i=47 + + + i=69 + + 18169 + + + //xs:element[@name='StructureField'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18172 + + + 0 + StructureDefinition + + + i=47 + + + i=69 + + 18172 + + + //xs:element[@name='StructureDefinition'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=18175 + + + 0 + EnumDefinition + + + i=47 + + + i=69 + + 18175 + + + //xs:element[@name='EnumDefinition'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8285 + + + 0 + Argument + + + i=47 + + + i=69 + + 8285 + + + //xs:element[@name='Argument'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8291 + + + 0 + EnumValueType + + + i=47 + + + i=69 + + 8291 + + + //xs:element[@name='EnumValueType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=14826 + + + 0 + EnumField + + + i=47 + + + i=69 + + 14826 + + + //xs:element[@name='EnumField'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12759 + + + 0 + OptionSet + + + i=47 + + + i=69 + + 12759 + + + //xs:element[@name='OptionSet'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12762 + + + 0 + Union + + + i=47 + + + i=69 + + 12762 + + + //xs:element[@name='Union'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8918 + + + 0 + TimeZoneDataType + + + i=47 + + + i=69 + + 8918 + + + //xs:element[@name='TimeZoneDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8300 + + + 0 + ApplicationDescription + + + i=47 + + + i=69 + + 8300 + + + //xs:element[@name='ApplicationDescription'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12201 + + + 0 + ServerOnNetwork + + + i=47 + + + i=69 + + 12201 + + + //xs:element[@name='ServerOnNetwork'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8297 + + + 0 + UserTokenPolicy + + + i=47 + + + i=69 + + 8297 + + + //xs:element[@name='UserTokenPolicy'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8303 + + + 0 + EndpointDescription + + + i=47 + + + i=69 + + 8303 + + + //xs:element[@name='EndpointDescription'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8417 + + + 0 + RegisteredServer + + + i=47 + + + i=69 + + 8417 + + + //xs:element[@name='RegisteredServer'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12894 + + + 0 + DiscoveryConfiguration + + + i=47 + + + i=69 + + 12894 + + + //xs:element[@name='DiscoveryConfiguration'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12897 + + + 0 + MdnsDiscoveryConfiguration + + + i=47 + + + i=69 + + 12897 + + + //xs:element[@name='MdnsDiscoveryConfiguration'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8333 + + + 0 + SignedSoftwareCertificate + + + i=47 + + + i=69 + + 8333 + + + //xs:element[@name='SignedSoftwareCertificate'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8306 + + + 0 + UserIdentityToken + + + i=47 + + + i=69 + + 8306 + + + //xs:element[@name='UserIdentityToken'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8309 + + + 0 + AnonymousIdentityToken + + + i=47 + + + i=69 + + 8309 + + + //xs:element[@name='AnonymousIdentityToken'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8312 + + + 0 + UserNameIdentityToken + + + i=47 + + + i=69 + + 8312 + + + //xs:element[@name='UserNameIdentityToken'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8315 + + + 0 + X509IdentityToken + + + i=47 + + + i=69 + + 8315 + + + //xs:element[@name='X509IdentityToken'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8318 + + + 0 + IssuedIdentityToken + + + i=47 + + + i=69 + + 8318 + + + //xs:element[@name='IssuedIdentityToken'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8363 + + + 0 + AddNodesItem + + + i=47 + + + i=69 + + 8363 + + + //xs:element[@name='AddNodesItem'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8366 + + + 0 + AddReferencesItem + + + i=47 + + + i=69 + + 8366 + + + //xs:element[@name='AddReferencesItem'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8369 + + + 0 + DeleteNodesItem + + + i=47 + + + i=69 + + 8369 + + + //xs:element[@name='DeleteNodesItem'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8372 + + + 0 + DeleteReferencesItem + + + i=47 + + + i=69 + + 8372 + + + //xs:element[@name='DeleteReferencesItem'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12712 + + + 0 + RelativePathElement + + + i=47 + + + i=69 + + 12712 + + + //xs:element[@name='RelativePathElement'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12715 + + + 0 + RelativePath + + + i=47 + + + i=69 + + 12715 + + + //xs:element[@name='RelativePath'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8321 + + + 0 + EndpointConfiguration + + + i=47 + + + i=69 + + 8321 + + + //xs:element[@name='EndpointConfiguration'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8564 + + + 0 + ContentFilterElement + + + i=47 + + + i=69 + + 8564 + + + //xs:element[@name='ContentFilterElement'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8567 + + + 0 + ContentFilter + + + i=47 + + + i=69 + + 8567 + + + //xs:element[@name='ContentFilter'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8570 + + + 0 + FilterOperand + + + i=47 + + + i=69 + + 8570 + + + //xs:element[@name='FilterOperand'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8573 + + + 0 + ElementOperand + + + i=47 + + + i=69 + + 8573 + + + //xs:element[@name='ElementOperand'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8576 + + + 0 + LiteralOperand + + + i=47 + + + i=69 + + 8576 + + + //xs:element[@name='LiteralOperand'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8579 + + + 0 + AttributeOperand + + + i=47 + + + i=69 + + 8579 + + + //xs:element[@name='AttributeOperand'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8582 + + + 0 + SimpleAttributeOperand + + + i=47 + + + i=69 + + 8582 + + + //xs:element[@name='SimpleAttributeOperand'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8639 + + + 0 + HistoryEvent + + + i=47 + + + i=69 + + 8639 + + + //xs:element[@name='HistoryEvent'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8702 + + + 0 + MonitoringFilter + + + i=47 + + + i=69 + + 8702 + + + //xs:element[@name='MonitoringFilter'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8708 + + + 0 + EventFilter + + + i=47 + + + i=69 + + 8708 + + + //xs:element[@name='EventFilter'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8711 + + + 0 + AggregateConfiguration + + + i=47 + + + i=69 + + 8711 + + + //xs:element[@name='AggregateConfiguration'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8807 + + + 0 + HistoryEventFieldList + + + i=47 + + + i=69 + + 8807 + + + //xs:element[@name='HistoryEventFieldList'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8327 + + + 0 + BuildInfo + + + i=47 + + + i=69 + + 8327 + + + //xs:element[@name='BuildInfo'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8843 + + + 0 + RedundantServerDataType + + + i=47 + + + i=69 + + 8843 + + + //xs:element[@name='RedundantServerDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11951 + + + 0 + EndpointUrlListDataType + + + i=47 + + + i=69 + + 11951 + + + //xs:element[@name='EndpointUrlListDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=11954 + + + 0 + NetworkGroupDataType + + + i=47 + + + i=69 + + 11954 + + + //xs:element[@name='NetworkGroupDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8846 + + + 0 + SamplingIntervalDiagnosticsDataType + + + i=47 + + + i=69 + + 8846 + + + //xs:element[@name='SamplingIntervalDiagnosticsDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8849 + + + 0 + ServerDiagnosticsSummaryDataType + + + i=47 + + + i=69 + + 8849 + + + //xs:element[@name='ServerDiagnosticsSummaryDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8852 + + + 0 + ServerStatusDataType + + + i=47 + + + i=69 + + 8852 + + + //xs:element[@name='ServerStatusDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8855 + + + 0 + SessionDiagnosticsDataType + + + i=47 + + + i=69 + + 8855 + + + //xs:element[@name='SessionDiagnosticsDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8858 + + + 0 + SessionSecurityDiagnosticsDataType + + + i=47 + + + i=69 + + 8858 + + + //xs:element[@name='SessionSecurityDiagnosticsDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8861 + + + 0 + ServiceCounterDataType + + + i=47 + + + i=69 + + 8861 + + + //xs:element[@name='ServiceCounterDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8294 + + + 0 + StatusResult + + + i=47 + + + i=69 + + 8294 + + + //xs:element[@name='StatusResult'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8864 + + + 0 + SubscriptionDiagnosticsDataType + + + i=47 + + + i=69 + + 8864 + + + //xs:element[@name='SubscriptionDiagnosticsDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8867 + + + 0 + ModelChangeStructureDataType + + + i=47 + + + i=69 + + 8867 + + + //xs:element[@name='ModelChangeStructureDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8870 + + + 0 + SemanticChangeStructureDataType + + + i=47 + + + i=69 + + 8870 + + + //xs:element[@name='SemanticChangeStructureDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8873 + + + 0 + Range + + + i=47 + + + i=69 + + 8873 + + + //xs:element[@name='Range'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8876 + + + 0 + EUInformation + + + i=47 + + + i=69 + + 8876 + + + //xs:element[@name='EUInformation'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12175 + + + 0 + ComplexNumberType + + + i=47 + + + i=69 + + 12175 + + + //xs:element[@name='ComplexNumberType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12178 + + + 0 + DoubleComplexNumberType + + + i=47 + + + i=69 + + 12178 + + + //xs:element[@name='DoubleComplexNumberType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12083 + + + 0 + AxisInformation + + + i=47 + + + i=69 + + 12083 + + + //xs:element[@name='AxisInformation'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=12086 + + + 0 + XVType + + + i=47 + + + i=69 + + 12086 + + + //xs:element[@name='XVType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8882 + + + 0 + ProgramDiagnosticDataType + + + i=47 + + + i=69 + + 8882 + + + //xs:element[@name='ProgramDiagnosticDataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=15402 + + + 0 + ProgramDiagnostic2DataType + + + i=47 + + + i=69 + + 15402 + + + //xs:element[@name='ProgramDiagnostic2DataType'] + + + + i=12 + + -1 + 1 + 1 + + + Variable_2 + + i=8879 + + + 0 + Annotation + + + i=47 + + + i=69 + + 8879 + + + //xs:element[@name='Annotation'] + + + + i=12 + + -1 + 1 + 1 + + + + Object_1 + + i=15041 + + + 0 + Default JSON + + + i=76 + + 15041 + + + + i=38 + + true + + i=14533 + + + + + + Object_1 + + i=16150 + + + 0 + Default JSON + + + i=76 + + 16150 + + + + i=38 + + true + + i=15528 + + + + + + Object_1 + + i=19064 + + + 0 + Default JSON + + + i=76 + + 19064 + + + + i=38 + + true + + i=18806 + + + + + + Object_1 + + i=19065 + + + 0 + Default JSON + + + i=76 + + 19065 + + + + i=38 + + true + + i=18807 + + + + + + Object_1 + + i=19066 + + + 0 + Default JSON + + + i=76 + + 19066 + + + + i=38 + + true + + i=18808 + + + + + + Object_1 + + i=19067 + + + 0 + Default JSON + + + i=76 + + 19067 + + + + i=38 + + true + + i=18809 + + + + + + Object_1 + + i=19068 + + + 0 + Default JSON + + + i=76 + + 19068 + + + + i=38 + + true + + i=18810 + + + + + + Object_1 + + i=19069 + + + 0 + Default JSON + + + i=76 + + 19069 + + + + i=38 + + true + + i=18811 + + + + + + Object_1 + + i=19070 + + + 0 + Default JSON + + + i=76 + + 19070 + + + + i=38 + + true + + i=18812 + + + + + + Object_1 + + i=19071 + + + 0 + Default JSON + + + i=76 + + 19071 + + + + i=38 + + true + + i=18813 + + + + + + Object_1 + + i=19072 + + + 0 + Default JSON + + + i=76 + + 19072 + + + + i=38 + + true + + i=18814 + + + + + + Object_1 + + i=15042 + + + 0 + Default JSON + + + i=76 + + 15042 + + + + i=38 + + true + + i=15634 + + + + + + Object_1 + + i=23528 + + + 0 + Default JSON + + + i=76 + + 23528 + + + + i=38 + + true + + i=23498 + + + + + + Object_1 + + i=15044 + + + 0 + Default JSON + + + i=76 + + 15044 + + + + i=38 + + true + + i=12554 + + + + + + Object_1 + + i=16151 + + + 0 + Default JSON + + + i=76 + + 16151 + + + + i=38 + + true + + i=15534 + + + + + + Object_1 + + i=15057 + + + 0 + Default JSON + + + i=76 + + 15057 + + + + i=38 + + true + + i=14525 + + + + + + Object_1 + + i=15058 + + + 0 + Default JSON + + + i=76 + + 15058 + + + + i=38 + + true + + i=15487 + + + + + + Object_1 + + i=15059 + + + 0 + Default JSON + + + i=76 + + 15059 + + + + i=38 + + true + + i=15488 + + + + + + Object_1 + + i=15700 + + + 0 + Default JSON + + + i=76 + + 15700 + + + + i=38 + + true + + i=15005 + + + + + + Object_1 + + i=15714 + + + 0 + Default JSON + + + i=76 + + 15714 + + + + i=38 + + true + + i=15006 + + + + + + Object_1 + + i=15050 + + + 0 + Default JSON + + + i=76 + + 15050 + + + + i=38 + + true + + i=14523 + + + + + + Object_1 + + i=15051 + + + 0 + Default JSON + + + i=76 + + 15051 + + + + i=38 + + true + + i=14524 + + + + + + Object_1 + + i=15049 + + + 0 + Default JSON + + + i=76 + + 15049 + + + + i=38 + + true + + i=14593 + + + + + + Object_1 + + i=16152 + + + 0 + Default JSON + + + i=76 + + 16152 + + + + i=38 + + true + + i=15578 + + + + + + Object_1 + + i=16153 + + + 0 + Default JSON + + + i=76 + + 16153 + + + + i=38 + + true + + i=15580 + + + + + + Object_1 + + i=15060 + + + 0 + Default JSON + + + i=76 + + 15060 + + + + i=38 + + true + + i=14273 + + + + + + Object_1 + + i=16154 + + + 0 + Default JSON + + + i=76 + + 16154 + + + + i=38 + + true + + i=15581 + + + + + + Object_1 + + i=16155 + + + 0 + Default JSON + + + i=76 + + 16155 + + + + i=38 + + true + + i=15582 + + + + + + Object_1 + + i=16156 + + + 0 + Default JSON + + + i=76 + + 16156 + + + + i=38 + + true + + i=15597 + + + + + + Object_1 + + i=16157 + + + 0 + Default JSON + + + i=76 + + 16157 + + + + i=38 + + true + + i=15598 + + + + + + Object_1 + + i=16158 + + + 0 + Default JSON + + + i=76 + + 16158 + + + + i=38 + + true + + i=15605 + + + + + + Object_1 + + i=16159 + + + 0 + Default JSON + + + i=76 + + 16159 + + + + i=38 + + true + + i=15609 + + + + + + Object_1 + + i=21198 + + + 0 + Default JSON + + + i=76 + + 21198 + + + + i=38 + + true + + i=15480 + + + + + + Object_1 + + i=16161 + + + 0 + Default JSON + + + i=76 + + 16161 + + + + i=38 + + true + + i=15611 + + + + + + Object_1 + + i=16280 + + + 0 + Default JSON + + + i=76 + + 16280 + + + + i=38 + + true + + i=15616 + + + + + + Object_1 + + i=16281 + + + 0 + Default JSON + + + i=76 + + 16281 + + + + i=38 + + true + + i=15617 + + + + + + Object_1 + + i=16282 + + + 0 + Default JSON + + + i=76 + + 16282 + + + + i=38 + + true + + i=15618 + + + + + + Object_1 + + i=21199 + + + 0 + Default JSON + + + i=76 + + 21199 + + + + i=38 + + true + + i=15502 + + + + + + Object_1 + + i=21200 + + + 0 + Default JSON + + + i=76 + + 21200 + + + + i=38 + + true + + i=15510 + + + + + + Object_1 + + i=21201 + + + 0 + Default JSON + + + i=76 + + 21201 + + + + i=38 + + true + + i=15520 + + + + + + Object_1 + + i=16284 + + + 0 + Default JSON + + + i=76 + + 16284 + + + + i=38 + + true + + i=15621 + + + + + + Object_1 + + i=16285 + + + 0 + Default JSON + + + i=76 + + 16285 + + + + i=38 + + true + + i=15622 + + + + + + Object_1 + + i=16286 + + + 0 + Default JSON + + + i=76 + + 16286 + + + + i=38 + + true + + i=15623 + + + + + + Object_1 + + i=16287 + + + 0 + Default JSON + + + i=76 + + 16287 + + + + i=38 + + true + + i=15628 + + + + + + Object_1 + + i=16288 + + + 0 + Default JSON + + + i=76 + + 16288 + + + + i=38 + + true + + i=15629 + + + + + + Object_1 + + i=16308 + + + 0 + Default JSON + + + i=76 + + 16308 + + + + i=38 + + true + + i=15630 + + + + + + Object_1 + + i=16310 + + + 0 + Default JSON + + + i=76 + + 16310 + + + + i=38 + + true + + i=15631 + + + + + + Object_1 + + i=15061 + + + 0 + Default JSON + + + i=76 + + 15061 + + + + i=38 + + true + + i=14744 + + + + + + Object_1 + + i=16311 + + + 0 + Default JSON + + + i=76 + + 16311 + + + + i=38 + + true + + i=15635 + + + + + + Object_1 + + i=21202 + + + 0 + Default JSON + + + i=76 + + 21202 + + + + i=38 + + true + + i=15530 + + + + + + Object_1 + + i=16323 + + + 0 + Default JSON + + + i=76 + + 16323 + + + + i=38 + + true + + i=15645 + + + + + + Object_1 + + i=16391 + + + 0 + Default JSON + + + i=76 + + 16391 + + + + i=38 + + true + + i=15652 + + + + + + Object_1 + + i=16392 + + + 0 + Default JSON + + + i=76 + + 16392 + + + + i=38 + + true + + i=15653 + + + + + + Object_1 + + i=16393 + + + 0 + Default JSON + + + i=76 + + 16393 + + + + i=38 + + true + + i=15657 + + + + + + Object_1 + + i=16394 + + + 0 + Default JSON + + + i=76 + + 16394 + + + + i=38 + + true + + i=15664 + + + + + + Object_1 + + i=16404 + + + 0 + Default JSON + + + i=76 + + 16404 + + + + i=38 + + true + + i=15665 + + + + + + Object_1 + + i=17476 + + + 0 + Default JSON + + + i=76 + + 17476 + + + + i=38 + + true + + i=17467 + + + + + + Object_1 + + i=21203 + + + 0 + Default JSON + + + i=76 + + 21203 + + + + i=38 + + true + + i=15532 + + + + + + Object_1 + + i=15726 + + + 0 + Default JSON + + + i=76 + + 15726 + + + + i=38 + + true + + i=15007 + + + + + + Object_1 + + i=16524 + + + 0 + Default JSON + + + i=76 + + 16524 + + + + i=38 + + true + + i=15667 + + + + + + Object_1 + + i=16525 + + + 0 + Default JSON + + + i=76 + + 16525 + + + + i=38 + + true + + i=15669 + + + + + + Object_1 + + i=16526 + + + 0 + Default JSON + + + i=76 + + 16526 + + + + i=38 + + true + + i=15670 + + + + + + Object_1 + + i=23511 + + + 0 + Default JSON + + + i=76 + + 23511 + + + + i=38 + + true + + i=23468 + + + + + + Object_1 + + i=15062 + + + 0 + Default JSON + + + i=76 + + 15062 + + + + i=38 + + true + + i=96 + + + + + + Object_1 + + i=15063 + + + 0 + Default JSON + + + i=76 + + 15063 + + + + i=38 + + true + + i=97 + + + + + + Object_1 + + i=15065 + + + 0 + Default JSON + + + i=76 + + 15065 + + + + i=38 + + true + + i=101 + + + + + + Object_1 + + i=15066 + + + 0 + Default JSON + + + i=76 + + 15066 + + + + i=38 + + true + + i=99 + + + + + + Object_1 + + i=15067 + + + 0 + Default JSON + + + i=76 + + 15067 + + + + i=38 + + true + + i=100 + + + + + + Object_1 + + i=15081 + + + 0 + Default JSON + + + i=76 + + 15081 + + + + i=38 + + true + + i=296 + + + + + + Object_1 + + i=15082 + + + 0 + Default JSON + + + i=76 + + 15082 + + + + i=38 + + true + + i=7594 + + + + + + Object_1 + + i=15083 + + + 0 + Default JSON + + + i=76 + + 15083 + + + + i=38 + + true + + i=102 + + + + + + Object_1 + + i=15084 + + + 0 + Default JSON + + + i=76 + + 15084 + + + + i=38 + + true + + i=12755 + + + + + + Object_1 + + i=15085 + + + 0 + Default JSON + + + i=76 + + 15085 + + + + i=38 + + true + + i=12756 + + + + + + Object_1 + + i=15086 + + + 0 + Default JSON + + + i=76 + + 15086 + + + + i=38 + + true + + i=8912 + + + + + + Object_1 + + i=15087 + + + 0 + Default JSON + + + i=76 + + 15087 + + + + i=38 + + true + + i=308 + + + + + + Object_1 + + i=15095 + + + 0 + Default JSON + + + i=76 + + 15095 + + + + i=38 + + true + + i=12189 + + + + + + Object_1 + + i=15098 + + + 0 + Default JSON + + + i=76 + + 15098 + + + + i=38 + + true + + i=304 + + + + + + Object_1 + + i=15099 + + + 0 + Default JSON + + + i=76 + + 15099 + + + + i=38 + + true + + i=312 + + + + + + Object_1 + + i=15102 + + + 0 + Default JSON + + + i=76 + + 15102 + + + + i=38 + + true + + i=432 + + + + + + Object_1 + + i=15105 + + + 0 + Default JSON + + + i=76 + + 15105 + + + + i=38 + + true + + i=12890 + + + + + + Object_1 + + i=15106 + + + 0 + Default JSON + + + i=76 + + 15106 + + + + i=38 + + true + + i=12891 + + + + + + Object_1 + + i=15136 + + + 0 + Default JSON + + + i=76 + + 15136 + + + + i=38 + + true + + i=344 + + + + + + Object_1 + + i=15140 + + + 0 + Default JSON + + + i=76 + + 15140 + + + + i=38 + + true + + i=316 + + + + + + Object_1 + + i=15141 + + + 0 + Default JSON + + + i=76 + + 15141 + + + + i=38 + + true + + i=319 + + + + + + Object_1 + + i=15142 + + + 0 + Default JSON + + + i=76 + + 15142 + + + + i=38 + + true + + i=322 + + + + + + Object_1 + + i=15143 + + + 0 + Default JSON + + + i=76 + + 15143 + + + + i=38 + + true + + i=325 + + + + + + Object_1 + + i=15144 + + + 0 + Default JSON + + + i=76 + + 15144 + + + + i=38 + + true + + i=938 + + + + + + Object_1 + + i=15165 + + + 0 + Default JSON + + + i=76 + + 15165 + + + + i=38 + + true + + i=376 + + + + + + Object_1 + + i=15169 + + + 0 + Default JSON + + + i=76 + + 15169 + + + + i=38 + + true + + i=379 + + + + + + Object_1 + + i=15172 + + + 0 + Default JSON + + + i=76 + + 15172 + + + + i=38 + + true + + i=382 + + + + + + Object_1 + + i=15175 + + + 0 + Default JSON + + + i=76 + + 15175 + + + + i=38 + + true + + i=385 + + + + + + Object_1 + + i=15188 + + + 0 + Default JSON + + + i=76 + + 15188 + + + + i=38 + + true + + i=537 + + + + + + Object_1 + + i=15189 + + + 0 + Default JSON + + + i=76 + + 15189 + + + + i=38 + + true + + i=540 + + + + + + Object_1 + + i=15199 + + + 0 + Default JSON + + + i=76 + + 15199 + + + + i=38 + + true + + i=331 + + + + + + Object_1 + + i=15204 + + + 0 + Default JSON + + + i=76 + + 15204 + + + + i=38 + + true + + i=583 + + + + + + Object_1 + + i=15205 + + + 0 + Default JSON + + + i=76 + + 15205 + + + + i=38 + + true + + i=586 + + + + + + Object_1 + + i=15206 + + + 0 + Default JSON + + + i=76 + + 15206 + + + + i=38 + + true + + i=589 + + + + + + Object_1 + + i=15207 + + + 0 + Default JSON + + + i=76 + + 15207 + + + + i=38 + + true + + i=592 + + + + + + Object_1 + + i=15208 + + + 0 + Default JSON + + + i=76 + + 15208 + + + + i=38 + + true + + i=595 + + + + + + Object_1 + + i=15209 + + + 0 + Default JSON + + + i=76 + + 15209 + + + + i=38 + + true + + i=598 + + + + + + Object_1 + + i=15210 + + + 0 + Default JSON + + + i=76 + + 15210 + + + + i=38 + + true + + i=601 + + + + + + Object_1 + + i=15273 + + + 0 + Default JSON + + + i=76 + + 15273 + + + + i=38 + + true + + i=659 + + + + + + Object_1 + + i=15293 + + + 0 + Default JSON + + + i=76 + + 15293 + + + + i=38 + + true + + i=719 + + + + + + Object_1 + + i=15295 + + + 0 + Default JSON + + + i=76 + + 15295 + + + + i=38 + + true + + i=725 + + + + + + Object_1 + + i=15304 + + + 0 + Default JSON + + + i=76 + + 15304 + + + + i=38 + + true + + i=948 + + + + + + Object_1 + + i=15349 + + + 0 + Default JSON + + + i=76 + + 15349 + + + + i=38 + + true + + i=920 + + + + + + Object_1 + + i=15361 + + + 0 + Default JSON + + + i=76 + + 15361 + + + + i=38 + + true + + i=338 + + + + + + Object_1 + + i=15362 + + + 0 + Default JSON + + + i=76 + + 15362 + + + + i=38 + + true + + i=853 + + + + + + Object_1 + + i=15363 + + + 0 + Default JSON + + + i=76 + + 15363 + + + + i=38 + + true + + i=11943 + + + + + + Object_1 + + i=15364 + + + 0 + Default JSON + + + i=76 + + 15364 + + + + i=38 + + true + + i=11944 + + + + + + Object_1 + + i=15365 + + + 0 + Default JSON + + + i=76 + + 15365 + + + + i=38 + + true + + i=856 + + + + + + Object_1 + + i=15366 + + + 0 + Default JSON + + + i=76 + + 15366 + + + + i=38 + + true + + i=859 + + + + + + Object_1 + + i=15367 + + + 0 + Default JSON + + + i=76 + + 15367 + + + + i=38 + + true + + i=862 + + + + + + Object_1 + + i=15368 + + + 0 + Default JSON + + + i=76 + + 15368 + + + + i=38 + + true + + i=865 + + + + + + Object_1 + + i=15369 + + + 0 + Default JSON + + + i=76 + + 15369 + + + + i=38 + + true + + i=868 + + + + + + Object_1 + + i=15370 + + + 0 + Default JSON + + + i=76 + + 15370 + + + + i=38 + + true + + i=871 + + + + + + Object_1 + + i=15371 + + + 0 + Default JSON + + + i=76 + + 15371 + + + + i=38 + + true + + i=299 + + + + + + Object_1 + + i=15372 + + + 0 + Default JSON + + + i=76 + + 15372 + + + + i=38 + + true + + i=874 + + + + + + Object_1 + + i=15373 + + + 0 + Default JSON + + + i=76 + + 15373 + + + + i=38 + + true + + i=877 + + + + + + Object_1 + + i=15374 + + + 0 + Default JSON + + + i=76 + + 15374 + + + + i=38 + + true + + i=897 + + + + + + Object_1 + + i=15375 + + + 0 + Default JSON + + + i=76 + + 15375 + + + + i=38 + + true + + i=884 + + + + + + Object_1 + + i=15376 + + + 0 + Default JSON + + + i=76 + + 15376 + + + + i=38 + + true + + i=887 + + + + + + Object_1 + + i=15377 + + + 0 + Default JSON + + + i=76 + + 15377 + + + + i=38 + + true + + i=12171 + + + + + + Object_1 + + i=15378 + + + 0 + Default JSON + + + i=76 + + 15378 + + + + i=38 + + true + + i=12172 + + + + + + Object_1 + + i=15379 + + + 0 + Default JSON + + + i=76 + + 15379 + + + + i=38 + + true + + i=12079 + + + + + + Object_1 + + i=15380 + + + 0 + Default JSON + + + i=76 + + 15380 + + + + i=38 + + true + + i=12080 + + + + + + Object_1 + + i=15381 + + + 0 + Default JSON + + + i=76 + + 15381 + + + + i=38 + + true + + i=894 + + + + + + Object_1 + + i=15405 + + + 0 + Default JSON + + + i=76 + + 15405 + + + + i=38 + + true + + i=15396 + + + + + + Object_1 + + i=15382 + + + 0 + Default JSON + + + i=76 + + 15382 + + + + i=38 + + true + + i=891 + + + + +
diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.ServerBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.ServerBase.cs new file mode 100644 index 00000000..39089b9a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Generated/Opc.Ua.ServerBase.cs @@ -0,0 +1,1495 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua +{ + #region ISessionServer Interface + /// + /// An interface to a UA server implementation. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public interface ISessionServer : IServerBase + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + ResponseHeader FindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + out ApplicationDescriptionCollection servers); + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + ResponseHeader FindServersOnNetwork( + RequestHeader requestHeader, + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + out DateTime lastCounterResetTime, + out ServerOnNetworkCollection servers); + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + ResponseHeader GetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + out EndpointDescriptionCollection endpoints); + #endif + + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// Invokes the CreateSession service. + /// + ResponseHeader CreateSession( + RequestHeader requestHeader, + ApplicationDescription clientDescription, + string serverUri, + string endpointUrl, + string sessionName, + byte[] clientNonce, + byte[] clientCertificate, + double requestedSessionTimeout, + uint maxResponseMessageSize, + out NodeId sessionId, + out NodeId authenticationToken, + out double revisedSessionTimeout, + out byte[] serverNonce, + out byte[] serverCertificate, + out EndpointDescriptionCollection serverEndpoints, + out SignedSoftwareCertificateCollection serverSoftwareCertificates, + out SignatureData serverSignature, + out uint maxRequestMessageSize); + #endif + + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// Invokes the ActivateSession service. + /// + ResponseHeader ActivateSession( + RequestHeader requestHeader, + SignatureData clientSignature, + SignedSoftwareCertificateCollection clientSoftwareCertificates, + StringCollection localeIds, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + out byte[] serverNonce, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// Invokes the CloseSession service. + /// + ResponseHeader CloseSession( + RequestHeader requestHeader, + bool deleteSubscriptions); + #endif + + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// Invokes the Cancel service. + /// + ResponseHeader Cancel( + RequestHeader requestHeader, + uint requestHandle, + out uint cancelCount); + #endif + + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// Invokes the AddNodes service. + /// + ResponseHeader AddNodes( + RequestHeader requestHeader, + AddNodesItemCollection nodesToAdd, + out AddNodesResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// Invokes the AddReferences service. + /// + ResponseHeader AddReferences( + RequestHeader requestHeader, + AddReferencesItemCollection referencesToAdd, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// Invokes the DeleteNodes service. + /// + ResponseHeader DeleteNodes( + RequestHeader requestHeader, + DeleteNodesItemCollection nodesToDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// Invokes the DeleteReferences service. + /// + ResponseHeader DeleteReferences( + RequestHeader requestHeader, + DeleteReferencesItemCollection referencesToDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_Browse) + /// + /// Invokes the Browse service. + /// + ResponseHeader Browse( + RequestHeader requestHeader, + ViewDescription view, + uint requestedMaxReferencesPerNode, + BrowseDescriptionCollection nodesToBrowse, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// Invokes the BrowseNext service. + /// + ResponseHeader BrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoints, + ByteStringCollection continuationPoints, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// Invokes the TranslateBrowsePathsToNodeIds service. + /// + ResponseHeader TranslateBrowsePathsToNodeIds( + RequestHeader requestHeader, + BrowsePathCollection browsePaths, + out BrowsePathResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// Invokes the RegisterNodes service. + /// + ResponseHeader RegisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToRegister, + out NodeIdCollection registeredNodeIds); + #endif + + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// Invokes the UnregisterNodes service. + /// + ResponseHeader UnregisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToUnregister); + #endif + + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// Invokes the QueryFirst service. + /// + ResponseHeader QueryFirst( + RequestHeader requestHeader, + ViewDescription view, + NodeTypeDescriptionCollection nodeTypes, + ContentFilter filter, + uint maxDataSetsToReturn, + uint maxReferencesToReturn, + out QueryDataSetCollection queryDataSets, + out byte[] continuationPoint, + out ParsingResultCollection parsingResults, + out DiagnosticInfoCollection diagnosticInfos, + out ContentFilterResult filterResult); + #endif + + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// Invokes the QueryNext service. + /// + ResponseHeader QueryNext( + RequestHeader requestHeader, + bool releaseContinuationPoint, + byte[] continuationPoint, + out QueryDataSetCollection queryDataSets, + out byte[] revisedContinuationPoint); + #endif + + #if (!OPCUA_EXCLUDE_Read) + /// + /// Invokes the Read service. + /// + ResponseHeader Read( + RequestHeader requestHeader, + double maxAge, + TimestampsToReturn timestampsToReturn, + ReadValueIdCollection nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// Invokes the HistoryRead service. + /// + ResponseHeader HistoryRead( + RequestHeader requestHeader, + ExtensionObject historyReadDetails, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueIdCollection nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_Write) + /// + /// Invokes the Write service. + /// + ResponseHeader Write( + RequestHeader requestHeader, + WriteValueCollection nodesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// Invokes the HistoryUpdate service. + /// + ResponseHeader HistoryUpdate( + RequestHeader requestHeader, + ExtensionObjectCollection historyUpdateDetails, + out HistoryUpdateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_Call) + /// + /// Invokes the Call service. + /// + ResponseHeader Call( + RequestHeader requestHeader, + CallMethodRequestCollection methodsToCall, + out CallMethodResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// Invokes the CreateMonitoredItems service. + /// + ResponseHeader CreateMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// Invokes the ModifyMonitoredItems service. + /// + ResponseHeader ModifyMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// Invokes the SetMonitoringMode service. + /// + ResponseHeader SetMonitoringMode( + RequestHeader requestHeader, + uint subscriptionId, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// Invokes the SetTriggering service. + /// + ResponseHeader SetTriggering( + RequestHeader requestHeader, + uint subscriptionId, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// Invokes the DeleteMonitoredItems service. + /// + ResponseHeader DeleteMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// Invokes the CreateSubscription service. + /// + ResponseHeader CreateSubscription( + RequestHeader requestHeader, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + bool publishingEnabled, + byte priority, + out uint subscriptionId, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount); + #endif + + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// Invokes the ModifySubscription service. + /// + ResponseHeader ModifySubscription( + RequestHeader requestHeader, + uint subscriptionId, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount); + #endif + + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// Invokes the SetPublishingMode service. + /// + ResponseHeader SetPublishingMode( + RequestHeader requestHeader, + bool publishingEnabled, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_Publish) + /// + /// Invokes the Publish service. + /// + ResponseHeader Publish( + RequestHeader requestHeader, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications, + out NotificationMessage notificationMessage, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_Republish) + /// + /// Invokes the Republish service. + /// + ResponseHeader Republish( + RequestHeader requestHeader, + uint subscriptionId, + uint retransmitSequenceNumber, + out NotificationMessage notificationMessage); + #endif + + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// Invokes the TransferSubscriptions service. + /// + ResponseHeader TransferSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + bool sendInitialValues, + out TransferResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// Invokes the DeleteSubscriptions service. + /// + ResponseHeader DeleteSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + #endif + } + #endregion + + #region SessionServerBase Class + /// + /// A basic implementation of the UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class SessionServerBase : ServerBase, ISessionServer + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + public virtual ResponseHeader FindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + out ApplicationDescriptionCollection servers) + { + servers = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + public virtual ResponseHeader FindServersOnNetwork( + RequestHeader requestHeader, + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + out DateTime lastCounterResetTime, + out ServerOnNetworkCollection servers) + { + lastCounterResetTime = DateTime.MinValue; + servers = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + public virtual ResponseHeader GetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + out EndpointDescriptionCollection endpoints) + { + endpoints = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_CreateSession) + /// + /// Invokes the CreateSession service. + /// + public virtual ResponseHeader CreateSession( + RequestHeader requestHeader, + ApplicationDescription clientDescription, + string serverUri, + string endpointUrl, + string sessionName, + byte[] clientNonce, + byte[] clientCertificate, + double requestedSessionTimeout, + uint maxResponseMessageSize, + out NodeId sessionId, + out NodeId authenticationToken, + out double revisedSessionTimeout, + out byte[] serverNonce, + out byte[] serverCertificate, + out EndpointDescriptionCollection serverEndpoints, + out SignedSoftwareCertificateCollection serverSoftwareCertificates, + out SignatureData serverSignature, + out uint maxRequestMessageSize) + { + sessionId = null; + authenticationToken = null; + revisedSessionTimeout = 0; + serverNonce = null; + serverCertificate = null; + serverEndpoints = null; + serverSoftwareCertificates = null; + serverSignature = null; + maxRequestMessageSize = 0; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_ActivateSession) + /// + /// Invokes the ActivateSession service. + /// + public virtual ResponseHeader ActivateSession( + RequestHeader requestHeader, + SignatureData clientSignature, + SignedSoftwareCertificateCollection clientSoftwareCertificates, + StringCollection localeIds, + ExtensionObject userIdentityToken, + SignatureData userTokenSignature, + out byte[] serverNonce, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + serverNonce = null; + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_CloseSession) + /// + /// Invokes the CloseSession service. + /// + public virtual ResponseHeader CloseSession( + RequestHeader requestHeader, + bool deleteSubscriptions) + { + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Cancel) + /// + /// Invokes the Cancel service. + /// + public virtual ResponseHeader Cancel( + RequestHeader requestHeader, + uint requestHandle, + out uint cancelCount) + { + cancelCount = 0; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_AddNodes) + /// + /// Invokes the AddNodes service. + /// + public virtual ResponseHeader AddNodes( + RequestHeader requestHeader, + AddNodesItemCollection nodesToAdd, + out AddNodesResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_AddReferences) + /// + /// Invokes the AddReferences service. + /// + public virtual ResponseHeader AddReferences( + RequestHeader requestHeader, + AddReferencesItemCollection referencesToAdd, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteNodes) + /// + /// Invokes the DeleteNodes service. + /// + public virtual ResponseHeader DeleteNodes( + RequestHeader requestHeader, + DeleteNodesItemCollection nodesToDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteReferences) + /// + /// Invokes the DeleteReferences service. + /// + public virtual ResponseHeader DeleteReferences( + RequestHeader requestHeader, + DeleteReferencesItemCollection referencesToDelete, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Browse) + /// + /// Invokes the Browse service. + /// + public virtual ResponseHeader Browse( + RequestHeader requestHeader, + ViewDescription view, + uint requestedMaxReferencesPerNode, + BrowseDescriptionCollection nodesToBrowse, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_BrowseNext) + /// + /// Invokes the BrowseNext service. + /// + public virtual ResponseHeader BrowseNext( + RequestHeader requestHeader, + bool releaseContinuationPoints, + ByteStringCollection continuationPoints, + out BrowseResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_TranslateBrowsePathsToNodeIds) + /// + /// Invokes the TranslateBrowsePathsToNodeIds service. + /// + public virtual ResponseHeader TranslateBrowsePathsToNodeIds( + RequestHeader requestHeader, + BrowsePathCollection browsePaths, + out BrowsePathResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_RegisterNodes) + /// + /// Invokes the RegisterNodes service. + /// + public virtual ResponseHeader RegisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToRegister, + out NodeIdCollection registeredNodeIds) + { + registeredNodeIds = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_UnregisterNodes) + /// + /// Invokes the UnregisterNodes service. + /// + public virtual ResponseHeader UnregisterNodes( + RequestHeader requestHeader, + NodeIdCollection nodesToUnregister) + { + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_QueryFirst) + /// + /// Invokes the QueryFirst service. + /// + public virtual ResponseHeader QueryFirst( + RequestHeader requestHeader, + ViewDescription view, + NodeTypeDescriptionCollection nodeTypes, + ContentFilter filter, + uint maxDataSetsToReturn, + uint maxReferencesToReturn, + out QueryDataSetCollection queryDataSets, + out byte[] continuationPoint, + out ParsingResultCollection parsingResults, + out DiagnosticInfoCollection diagnosticInfos, + out ContentFilterResult filterResult) + { + queryDataSets = null; + continuationPoint = null; + parsingResults = null; + diagnosticInfos = null; + filterResult = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_QueryNext) + /// + /// Invokes the QueryNext service. + /// + public virtual ResponseHeader QueryNext( + RequestHeader requestHeader, + bool releaseContinuationPoint, + byte[] continuationPoint, + out QueryDataSetCollection queryDataSets, + out byte[] revisedContinuationPoint) + { + queryDataSets = null; + revisedContinuationPoint = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Read) + /// + /// Invokes the Read service. + /// + public virtual ResponseHeader Read( + RequestHeader requestHeader, + double maxAge, + TimestampsToReturn timestampsToReturn, + ReadValueIdCollection nodesToRead, + out DataValueCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_HistoryRead) + /// + /// Invokes the HistoryRead service. + /// + public virtual ResponseHeader HistoryRead( + RequestHeader requestHeader, + ExtensionObject historyReadDetails, + TimestampsToReturn timestampsToReturn, + bool releaseContinuationPoints, + HistoryReadValueIdCollection nodesToRead, + out HistoryReadResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Write) + /// + /// Invokes the Write service. + /// + public virtual ResponseHeader Write( + RequestHeader requestHeader, + WriteValueCollection nodesToWrite, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_HistoryUpdate) + /// + /// Invokes the HistoryUpdate service. + /// + public virtual ResponseHeader HistoryUpdate( + RequestHeader requestHeader, + ExtensionObjectCollection historyUpdateDetails, + out HistoryUpdateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Call) + /// + /// Invokes the Call service. + /// + public virtual ResponseHeader Call( + RequestHeader requestHeader, + CallMethodRequestCollection methodsToCall, + out CallMethodResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_CreateMonitoredItems) + /// + /// Invokes the CreateMonitoredItems service. + /// + public virtual ResponseHeader CreateMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_ModifyMonitoredItems) + /// + /// Invokes the ModifyMonitoredItems service. + /// + public virtual ResponseHeader ModifyMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_SetMonitoringMode) + /// + /// Invokes the SetMonitoringMode service. + /// + public virtual ResponseHeader SetMonitoringMode( + RequestHeader requestHeader, + uint subscriptionId, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_SetTriggering) + /// + /// Invokes the SetTriggering service. + /// + public virtual ResponseHeader SetTriggering( + RequestHeader requestHeader, + uint subscriptionId, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos) + { + addResults = null; + addDiagnosticInfos = null; + removeResults = null; + removeDiagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteMonitoredItems) + /// + /// Invokes the DeleteMonitoredItems service. + /// + public virtual ResponseHeader DeleteMonitoredItems( + RequestHeader requestHeader, + uint subscriptionId, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_CreateSubscription) + /// + /// Invokes the CreateSubscription service. + /// + public virtual ResponseHeader CreateSubscription( + RequestHeader requestHeader, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + bool publishingEnabled, + byte priority, + out uint subscriptionId, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + subscriptionId = 0; + revisedPublishingInterval = 0; + revisedLifetimeCount = 0; + revisedMaxKeepAliveCount = 0; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_ModifySubscription) + /// + /// Invokes the ModifySubscription service. + /// + public virtual ResponseHeader ModifySubscription( + RequestHeader requestHeader, + uint subscriptionId, + double requestedPublishingInterval, + uint requestedLifetimeCount, + uint requestedMaxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority, + out double revisedPublishingInterval, + out uint revisedLifetimeCount, + out uint revisedMaxKeepAliveCount) + { + revisedPublishingInterval = 0; + revisedLifetimeCount = 0; + revisedMaxKeepAliveCount = 0; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_SetPublishingMode) + /// + /// Invokes the SetPublishingMode service. + /// + public virtual ResponseHeader SetPublishingMode( + RequestHeader requestHeader, + bool publishingEnabled, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Publish) + /// + /// Invokes the Publish service. + /// + public virtual ResponseHeader Publish( + RequestHeader requestHeader, + SubscriptionAcknowledgementCollection subscriptionAcknowledgements, + out uint subscriptionId, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications, + out NotificationMessage notificationMessage, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + subscriptionId = 0; + availableSequenceNumbers = null; + moreNotifications = false; + notificationMessage = null; + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_Republish) + /// + /// Invokes the Republish service. + /// + public virtual ResponseHeader Republish( + RequestHeader requestHeader, + uint subscriptionId, + uint retransmitSequenceNumber, + out NotificationMessage notificationMessage) + { + notificationMessage = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_TransferSubscriptions) + /// + /// Invokes the TransferSubscriptions service. + /// + public virtual ResponseHeader TransferSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + bool sendInitialValues, + out TransferResultCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_DeleteSubscriptions) + /// + /// Invokes the DeleteSubscriptions service. + /// + public virtual ResponseHeader DeleteSubscriptions( + RequestHeader requestHeader, + UInt32Collection subscriptionIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos) + { + results = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + } + #endregion + + #region IDiscoveryServer Interface + /// + /// An interface to a UA server implementation. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public interface IDiscoveryServer : IServerBase + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + ResponseHeader FindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + out ApplicationDescriptionCollection servers); + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + ResponseHeader FindServersOnNetwork( + RequestHeader requestHeader, + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + out DateTime lastCounterResetTime, + out ServerOnNetworkCollection servers); + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + ResponseHeader GetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + out EndpointDescriptionCollection endpoints); + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// Invokes the RegisterServer service. + /// + ResponseHeader RegisterServer( + RequestHeader requestHeader, + RegisteredServer server); + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// Invokes the RegisterServer2 service. + /// + ResponseHeader RegisterServer2( + RequestHeader requestHeader, + RegisteredServer server, + ExtensionObjectCollection discoveryConfiguration, + out StatusCodeCollection configurationResults, + out DiagnosticInfoCollection diagnosticInfos); + #endif + } + #endregion + + #region DiscoveryServerBase Class + /// + /// A basic implementation of the UA server. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public partial class DiscoveryServerBase : ServerBase, IDiscoveryServer + { + #if (!OPCUA_EXCLUDE_FindServers) + /// + /// Invokes the FindServers service. + /// + public virtual ResponseHeader FindServers( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection serverUris, + out ApplicationDescriptionCollection servers) + { + servers = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_FindServersOnNetwork) + /// + /// Invokes the FindServersOnNetwork service. + /// + public virtual ResponseHeader FindServersOnNetwork( + RequestHeader requestHeader, + uint startingRecordId, + uint maxRecordsToReturn, + StringCollection serverCapabilityFilter, + out DateTime lastCounterResetTime, + out ServerOnNetworkCollection servers) + { + lastCounterResetTime = DateTime.MinValue; + servers = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_GetEndpoints) + /// + /// Invokes the GetEndpoints service. + /// + public virtual ResponseHeader GetEndpoints( + RequestHeader requestHeader, + string endpointUrl, + StringCollection localeIds, + StringCollection profileUris, + out EndpointDescriptionCollection endpoints) + { + endpoints = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer) + /// + /// Invokes the RegisterServer service. + /// + public virtual ResponseHeader RegisterServer( + RequestHeader requestHeader, + RegisteredServer server) + { + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + + #if (!OPCUA_EXCLUDE_RegisterServer2) + /// + /// Invokes the RegisterServer2 service. + /// + public virtual ResponseHeader RegisterServer2( + RequestHeader requestHeader, + RegisteredServer server, + ExtensionObjectCollection discoveryConfiguration, + out StatusCodeCollection configurationResults, + out DiagnosticInfoCollection diagnosticInfos) + { + configurationResults = null; + diagnosticInfos = null; + + ValidateRequest(requestHeader); + + // Insert implementation. + + return CreateResponse(requestHeader, StatusCodes.BadServiceUnsupported); + } + #endif + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ContentFilter.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ContentFilter.cs new file mode 100644 index 00000000..e2b4c135 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ContentFilter.cs @@ -0,0 +1,1328 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + #region ContentFilter Class + public partial class ContentFilter: IFormattable + { + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < this.Elements.Count; ii++) + { + buffer.AppendFormat(formatProvider, "[{0}:{1}]", ii, this.Elements[ii]); + } + + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + /// + /// Validates the ContentFilter. + /// + /// The context. + /// The result of validation. + public Result Validate(FilterContext context) + { + Result result = new Result(null); + + // check for empty filter. + if (m_elements == null || m_elements.Count == 0) + { + return result; + } + + bool error = false; + + for (int ii = 0; ii < m_elements.Count; ii++) + { + ContentFilterElement element = m_elements[ii]; + + // check for null. + if (element == null) + { + ServiceResult nullResult = ServiceResult.Create( + StatusCodes.BadStructureMissing, + "ContentFilterElement is null (Index={0}).", + ii); + + result.ElementResults.Add(new ElementResult(nullResult)); + error = true; + continue; + } + + element.Parent = this; + + // validate element. + ElementResult elementResult = element.Validate(context, ii); + + if (ServiceResult.IsBad(elementResult.Status)) + { + result.ElementResults.Add(elementResult); + error = true; + continue; + } + + result.ElementResults.Add(null); + } + + // ensure the global error code. + if (error) + { + result.Status = StatusCodes.BadContentFilterInvalid; + } + else + { + result.ElementResults.Clear(); + } + + return result; + } + + /// + /// Pushes a new element onto the stack. + /// + /// The filter operator. + /// The operands. + /// + public ContentFilterElement Push(FilterOperator op, params object[] operands) + { + // check if nothing more to do. + if (operands == null || operands.Length == 0) + { + throw ServiceResultException.Create(StatusCodes.BadInvalidArgument, "ContentFilterElement does not have an operands."); + } + + // create the element and set the operator. + ContentFilterElement element = new ContentFilterElement(); + element.FilterOperator = op; + + for (int ii = 0; ii < operands.Length; ii++) + { + // check if a FilterOperand was provided. + FilterOperand filterOperand = operands[ii] as FilterOperand; + + if (filterOperand != null) + { + element.FilterOperands.Add(new ExtensionObject(filterOperand)); + continue; + } + + // check for reference to another ContentFilterElement. + ContentFilterElement existingElement = operands[ii] as ContentFilterElement; + + if (existingElement != null) + { + int index = FindElementIndex(existingElement); + + if (index == -1) + { + throw ServiceResultException.Create(StatusCodes.BadInvalidArgument, "ContentFilterElement is not part of the ContentFilter."); + } + + ElementOperand operand = new ElementOperand(); + operand.Index = (uint)index; + + element.FilterOperands.Add(new ExtensionObject(operand)); + continue; + } + + // assume a literal operand. + LiteralOperand literalOperand = new LiteralOperand(); + literalOperand.Value = new Variant(operands[ii]); + element.FilterOperands.Add(new ExtensionObject(literalOperand)); + } + + // insert the new element at the begining of the list. + m_elements.Insert(0, element); + + // re-number ElementOperands since all element were shifted up. + for (int ii = 0; ii < m_elements.Count; ii++) + { + foreach (ExtensionObject extension in m_elements[ii].FilterOperands) + { + if (extension != null) + { + ElementOperand operand = extension.Body as ElementOperand; + + if (operand != null) + { + operand.Index++; + } + } + } + } + + // return new element. + return element; + } + + /// + /// Finds the index of the specified element. + /// + /// The targetto be found. + /// The index of the specified element. + private int FindElementIndex(ContentFilterElement target) + { + for (int ii = 0; ii < m_elements.Count; ii++) + { + if (Object.ReferenceEquals(target, m_elements[ii])) + { + return ii; + } + } + + return -1; + } + + #region Result Class + /// + /// Stores the validation results for a ContentFilterElement. + /// + public class Result + { + #region Public Interface + /// + /// Initializes the object with a result code. + /// + /// The status. + public Result(ServiceResult status) + { + m_status = status; + } + + /// + /// Casts ServiceResult to an ElementResult. + /// + /// The status. + /// The result of the conversion. + public static implicit operator Result(ServiceResult status) + { + return new Result(status); + } + + /// + /// The result for the entire filter. + /// + /// The status. + public ServiceResult Status + { + get { return m_status; } + set { m_status = value; } + } + + /// + /// The result for each element. + /// + /// The element results. + public List ElementResults + { + get + { + if (m_elementResults == null) + { + m_elementResults = new List(); + } + + return m_elementResults; + } + } + + /// + /// Converts the object to an ContentFilterResult. + /// + /// The diagnostics masks. + /// The string table. + /// + public ContentFilterResult ToContextFilterResult(DiagnosticsMasks diagnosticsMasks, StringTable stringTable) + { + ContentFilterResult result = new ContentFilterResult(); + + if (m_elementResults == null || m_elementResults.Count == 0) + { + return result; + } + + bool error = false; + + foreach (ElementResult elementResult in m_elementResults) + { + ContentFilterElementResult elementResult2 = null; + + if (elementResult == null || ServiceResult.IsGood(elementResult.Status)) + { + elementResult2 = new ContentFilterElementResult(); + elementResult2.StatusCode = StatusCodes.Good; + + result.ElementResults.Add(elementResult2); + result.ElementDiagnosticInfos.Add(null); + continue; + } + + error = true; + + elementResult2 = elementResult.ToContentFilterElementResult(diagnosticsMasks, stringTable); + result.ElementResults.Add(elementResult2); + result.ElementDiagnosticInfos.Add(new DiagnosticInfo(elementResult.Status, diagnosticsMasks, false, stringTable)); + } + + if (!error) + { + result.ElementResults.Clear(); + result.ElementDiagnosticInfos.Clear(); + } + + return result; + } + #endregion + + #region Private Fields + private ServiceResult m_status; + private List m_elementResults; + #endregion + } + #endregion + + #region ElementResult Class + /// + /// Stores the validation results for a ContentFilterElement. + /// + public class ElementResult + { + #region Public Interface + /// + /// Initializes the object with a result code. + /// + /// The status. + public ElementResult(ServiceResult status) + { + m_status = status; + } + + /// + /// Casts ServiceResult to an ElementResult. + /// + /// The status. + /// The result of the conversion. + public static implicit operator ElementResult(ServiceResult status) + { + return new ElementResult(status); + } + + /// + /// The result for the entire element. + /// + /// The status. + public ServiceResult Status + { + get { return m_status; } + set { m_status = value; } + } + + /// + /// The result for each operand. + /// + /// The operand results. + public List OperandResults + { + get + { + if (m_operandResults == null) + { + m_operandResults = new List(); + } + + return m_operandResults; + } + } + + /// + /// Converts the object to an ContentFilterElementResult. + /// + /// The diagnostics masks. + /// The string table. + /// + public ContentFilterElementResult ToContentFilterElementResult(DiagnosticsMasks diagnosticsMasks, StringTable stringTable) + { + ContentFilterElementResult result = new ContentFilterElementResult(); + + if (ServiceResult.IsGood(m_status)) + { + result.StatusCode = StatusCodes.Good; + return result; + } + + result.StatusCode = m_status.StatusCode; + + if (m_operandResults.Count == 0) + { + return result; + } + + foreach (ServiceResult operandResult in m_operandResults) + { + if (ServiceResult.IsGood(operandResult)) + { + result.OperandStatusCodes.Add(StatusCodes.Good); + result.OperandDiagnosticInfos.Add(null); + } + else + { + result.OperandStatusCodes.Add(operandResult.StatusCode); + result.OperandDiagnosticInfos.Add(new DiagnosticInfo(operandResult, diagnosticsMasks, false, stringTable)); + + } + } + + return result; + } + #endregion + + #region Private Fields + private ServiceResult m_status; + private List m_operandResults; + #endregion + } + #endregion + } + #endregion + + #region ContentFilterElement Class + public partial class ContentFilterElement : IFormattable + { + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder buffer = new StringBuilder(); + + buffer.AppendFormat(formatProvider, "<{0}", this.FilterOperator); + + for (int ii = 0; ii < this.FilterOperands.Count; ii++) + { + if (this.FilterOperands[ii] != null) + { + buffer.AppendFormat(formatProvider, ", {0}", this.FilterOperands[ii].Body); + } + else + { + buffer.AppendFormat(formatProvider, ", (null)"); + } + } + + buffer.AppendFormat(formatProvider, ">"); + + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region Public Members + /// + /// The ContentFilter that this Element is part of. + /// + /// The parent. + public ContentFilter Parent + { + get { return m_parent; } + internal set { this.m_parent = value; } + } + + /// + /// Validates the content filter element. + /// + /// The context. + /// The index. + /// The results of the validation. + public virtual ContentFilter.ElementResult Validate(FilterContext context, int index) + { + ContentFilter.ElementResult result = new ContentFilter.ElementResult(null); + + // check the number of operands. + int operandCount = -1; + + switch (m_filterOperator) + { + case FilterOperator.Not: + case FilterOperator.IsNull: + case FilterOperator.InView: + case FilterOperator.OfType: + { + operandCount = 1; + break; + } + + case FilterOperator.And: + case FilterOperator.Or: + case FilterOperator.Equals: + case FilterOperator.GreaterThan: + case FilterOperator.GreaterThanOrEqual: + case FilterOperator.LessThan: + case FilterOperator.LessThanOrEqual: + case FilterOperator.Like: + case FilterOperator.Cast: + { + operandCount = 2; + break; + } + + case FilterOperator.Between: + { + operandCount = 3; + break; + } + + case FilterOperator.RelatedTo: + { + operandCount = 6; + break; + } + + case FilterOperator.InList: + { + operandCount = -1; + break; + } + + default: + { + break; + } + } + + if (operandCount != -1) + { + if (operandCount != m_filterOperands.Count) + { + result.Status = ServiceResult.Create( + StatusCodes.BadEventFilterInvalid, + "ContentFilterElement does not have the correct number of operands (Operator={0} OperandCount={1}).", + m_filterOperator, + operandCount); + + return result; + } + } + else + { + if (m_filterOperands.Count < 2) + { + result.Status = ServiceResult.Create( + StatusCodes.BadEventFilterInvalid, + "ContentFilterElement does not have the correct number of operands (Operator={0} OperandCount={1}).", + m_filterOperator, + m_filterOperands.Count); + + return result; + } + } + + // validate the operands. + bool error = false; + + for (int ii = 0; ii < m_filterOperands.Count; ii++) + { + ServiceResult operandResult = null; + + ExtensionObject operand = m_filterOperands[ii]; + + // check for null. + if (ExtensionObject.IsNull(operand)) + { + operandResult = ServiceResult.Create( + StatusCodes.BadEventFilterInvalid, + "The FilterOperand cannot be Null."); + + result.OperandResults.Add(operandResult); + error = true; + continue; + } + + // check that the extension object contains a filter operand. + FilterOperand filterOperand = operand.Body as FilterOperand; + + if (filterOperand == null) + { + operandResult = ServiceResult.Create( + StatusCodes.BadEventFilterInvalid, + "The FilterOperand is not a supported type ({0}).", + operand.Body.GetType()); + + result.OperandResults.Add(operandResult); + error = true; + continue; + } + + // validate the operand. + filterOperand.Parent = this; + operandResult = filterOperand.Validate(context, index); + + if (ServiceResult.IsBad(operandResult)) + { + result.OperandResults.Add(operandResult); + error = true; + continue; + } + + result.OperandResults.Add(null); + } + + // ensure the global error code. + if (error) + { + result.Status = StatusCodes.BadContentFilterInvalid; + } + else + { + result.OperandResults.Clear(); + } + + return result; + } + + /// + /// Returns the operands for the element. + /// + /// The list of operands for the element. + public List GetOperands() + { + List operands = new List(FilterOperands.Count); + + foreach (ExtensionObject extension in FilterOperands) + { + if (ExtensionObject.IsNull(extension)) + { + continue; + } + + FilterOperand operand = extension.Body as FilterOperand; + + if (operand == null) + { + continue; + } + + operands.Add(operand); + } + + return operands; + } + + /// + /// Sets the operands for the element. + /// + /// The list of the operands. + public void SetOperands(IEnumerable operands) + { + FilterOperands.Clear(); + + if (operands == null) + { + return; + } + + foreach (FilterOperand operand in operands) + { + if (operand == null) + { + continue; + } + + FilterOperands.Add(new ExtensionObject(operand)); + } + } + + /// + /// Converts an ContentFilterElement to a displayable string. + /// + /// The node table. + /// ContentFilterElement as a displayable string. + public virtual string ToString(INodeTable nodeTable) + { + List operands = GetOperands(); + + string operand1 = (operands.Count > 0)?operands[0].ToString(nodeTable):null; + string operand2 = (operands.Count > 1)?operands[1].ToString(nodeTable):null; + string operand3 = (operands.Count > 2)?operands[2].ToString(nodeTable):null; + + StringBuilder buffer = new StringBuilder(); + + switch (FilterOperator) + { + case FilterOperator.OfType: + case FilterOperator.InView: + case FilterOperator.IsNull: + case FilterOperator.Not: + { + buffer.AppendFormat("{0} '{1}'", FilterOperator, operand1); + break; + } + + case FilterOperator.And: + case FilterOperator.Equals: + case FilterOperator.GreaterThan: + case FilterOperator.GreaterThanOrEqual: + case FilterOperator.LessThan: + case FilterOperator.LessThanOrEqual: + case FilterOperator.Like: + case FilterOperator.Or: + { + buffer.AppendFormat("'{1}' {0} '{2}'", FilterOperator, operand1, operand2); + break; + } + + case FilterOperator.Between: + { + buffer.AppendFormat("'{1}' <= '{0}' <= '{2}'", operand1, operand2, operand3); + break; + } + + case FilterOperator.Cast: + { + buffer.AppendFormat("({1}){0}", operand1, operand2); + break; + } + + case FilterOperator.InList: + { + buffer.AppendFormat("'{0}' in {", operand1); + + for (int ii = 1; ii < operands.Count; ii++) + { + if (ii < operands.Count-1) + { + buffer.Append(", "); + } + + buffer.AppendFormat("'{0}'", operands[ii].ToString()); + } + + buffer.Append("}"); + break; + } + + case FilterOperator.RelatedTo: + { + buffer.AppendFormat("'{0}' ", operand1); + + string referenceType = operand2; + + if (operands.Count > 1) + { + LiteralOperand literalOperand = operands[1] as LiteralOperand; + + if (literalOperand != null) + { + INode node = nodeTable.Find(literalOperand.Value.Value as NodeId); + + if (node != null) + { + referenceType = Utils.Format("{0}", node); + } + } + } + + buffer.AppendFormat("{0} '{1}'", referenceType, operand2); + + if (operand3 != null) + { + buffer.AppendFormat("Hops='{0}'", operand3); + } + + break; + } + } + + return buffer.ToString(); + } + #endregion + + #region Private Fields + private ContentFilter m_parent; + #endregion + } + #endregion + + #region FilterOperand Class + public partial class FilterOperand + { + #region Public Interface + /// + /// The ContentFilterElement this FilterOperand is contained in. + /// The ContentFilterElement contains the operator and the operands + /// so it defines the expression to be evaluated. + /// + /// The parent element. + public ContentFilterElement Parent + { + get { return this.m_parent; } + internal set { this.m_parent = value; } + } + + /// + /// Validates the operand. + /// + /// The context. + /// The index. + /// the result of the validation + public virtual ServiceResult Validate(FilterContext context, int index) + { + return ServiceResult.Create(StatusCodes.BadEventFilterInvalid, "A sub-class of FilterOperand must be specified."); + } + + /// + /// Converts an FilterOperand to a displayable string. + /// + /// The node table. + /// ContentFilterElement as a displayable string. + public virtual string ToString(INodeTable nodeTable) + { + return Utils.Format("{0}", this); + } + #endregion + + #region Private Fields + private ContentFilterElement m_parent; + #endregion + } + #endregion + + #region AttributeOperand Class + public partial class AttributeOperand : IFormattable + { + #region Constructors + /// + /// Constructs an operand from a value. + /// + /// The node identifier. + /// The browse path. + public AttributeOperand( + NodeId nodeId, + QualifiedName browsePath) + { + m_nodeId = nodeId; + m_attributeId = Attributes.Value; + + m_browsePath = new RelativePath(); + + RelativePathElement element = new RelativePathElement(); + + element.ReferenceTypeId = ReferenceTypeIds.Aggregates; + element.IsInverse = false; + element.IncludeSubtypes = true; + element.TargetName = browsePath; + + m_browsePath.Elements.Add(element); + } + + /// + /// Constructs an operand from a value. + /// + /// The node identifier. + /// The browse paths. + public AttributeOperand( + NodeId nodeId, + IList browsePaths) + { + m_nodeId = nodeId; + m_attributeId = Attributes.Value; + m_browsePath = new RelativePath(); + + for (int ii = 0; ii < browsePaths.Count; ii++) + { + RelativePathElement element = new RelativePathElement(); + + element.ReferenceTypeId = ReferenceTypeIds.Aggregates; + element.IsInverse = false; + element.IncludeSubtypes = true; + element.TargetName = browsePaths[ii]; + + m_browsePath.Elements.Add(element); + } + } + + /// + /// Creates an operand that references a component/property of a type. + /// + /// The context. + /// The node identifier. + /// The relative path. + public AttributeOperand( + FilterContext context, + ExpandedNodeId nodeId, + RelativePath relativePath) + { + m_nodeId = ExpandedNodeId.ToNodeId(nodeId, context.NamespaceUris); + m_browsePath = relativePath; + m_attributeId = Attributes.Value; + m_indexRange = null; + m_alias = null; + } + + /// + /// Creates an operand that references a component/property of a type. + /// + /// The context. + /// The type definition identifier. + /// The browse path. + /// The attribute identifier. + /// The index range. + public AttributeOperand( + FilterContext context, + ExpandedNodeId typeDefinitionId, + string browsePath, + uint attributeId, + string indexRange) + { + m_nodeId = ExpandedNodeId.ToNodeId(typeDefinitionId, context.NamespaceUris); + m_browsePath = RelativePath.Parse(browsePath, context.TypeTree); + m_attributeId = attributeId; + m_indexRange = indexRange; + m_alias = null; + } + #endregion + + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < m_browsePath.Elements.Count; ii++) + { + buffer.AppendFormat(formatProvider, "/{0}", m_browsePath.Elements[ii].TargetName); + } + + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region Public Properties + /// + /// Whether the operand has been validated. + /// + /// true if validated; otherwise, false. + /// + /// Set when Validate() is called. + /// + public bool Validated + { + get { return m_validated; } + } + + /// + /// Stores the parsed form of the IndexRange parameter. + /// + /// The parsed index range. + /// + /// Set when Validate() is called. + /// + public NumericRange ParsedIndexRange + { + get { return m_parsedIndexRange; } + } + #endregion + + #region Overridden Methods + /// + /// Validates the operand (sets the ParsedBrowsePath and ParsedIndexRange properties). + /// + /// The context. + /// The index. + /// The result of the validation. + public override ServiceResult Validate(FilterContext context, int index) + { + m_validated = false; + + // verify that the operand refers to a node in the type model. + if (!context.TypeTree.IsKnown(m_nodeId)) + { + return ServiceResult.Create( + StatusCodes.BadTypeDefinitionInvalid, + "AttributeOperand does not have a known TypeDefinitionId ({0}).", + m_nodeId); + } + + // verify attribute id. + if (!Attributes.IsValid(m_attributeId)) + { + return ServiceResult.Create( + StatusCodes.BadAttributeIdInvalid, + "AttributeOperand does not specify a valid AttributeId ({0}).", + m_attributeId); + } + + // initialize as empty. + m_parsedIndexRange = NumericRange.Empty; + + // parse the index range. + if (!String.IsNullOrEmpty(m_indexRange)) + { + try + { + m_parsedIndexRange = NumericRange.Parse(m_indexRange); + } + catch (Exception e) + { + return ServiceResult.Create( + e, + StatusCodes.BadIndexRangeInvalid, + "AttributeOperand does not specify a valid BrowsePath ({0}).", + m_indexRange); + } + + if (m_attributeId != Attributes.Value) + { + return ServiceResult.Create( + StatusCodes.BadIndexRangeInvalid, + "AttributeOperand specifies an IndexRange for an Attribute other than Value ({0}).", + m_attributeId); + } + } + + m_validated = true; + + return ServiceResult.Good; + } + + /// + /// Converts an AttributeOperand to a displayable string. + /// + /// The node table. + /// AttributeOperand as a displayable string. + public override string ToString(INodeTable nodeTable) + { + StringBuilder buffer = new StringBuilder(); + + INode node = nodeTable.Find(m_nodeId); + + if (node != null) + { + buffer.AppendFormat("{0}", NodeId); + } + else + { + buffer.AppendFormat("{0}", NodeId); + } + + if (!RelativePath.IsEmpty(BrowsePath)) + { + buffer.AppendFormat("/{0}", BrowsePath.Format(nodeTable.TypeTree)); + } + + if (!String.IsNullOrEmpty(IndexRange)) + { + buffer.AppendFormat("[{0}]", NumericRange.Parse(IndexRange)); + } + + if (!String.IsNullOrEmpty(Alias)) + { + buffer.AppendFormat("- '{0}'", Alias); + } + + return buffer.ToString(); + } + #endregion + + #region Private Fields + private bool m_validated; + private NumericRange m_parsedIndexRange; + #endregion + } + #endregion + + #region ElementOperand Class + public partial class ElementOperand : IFormattable + { + /// + /// Constructs an operand from a value. + /// + /// The index. + public ElementOperand(uint index) + { + m_index = index; + } + + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return String.Format("[{0}]", m_index); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + /// + /// Validates the operand. + /// + /// The context. + /// The index. + /// The result of the validation + public override ServiceResult Validate(FilterContext context, int index) + { + if (m_index < 0) + { + return ServiceResult.Create( + StatusCodes.BadFilterOperandInvalid, + "ElementOperand specifies an Index that is less than zero ({0}).", + m_index); + } + + if (m_index <= index) + { + return ServiceResult.Create( + StatusCodes.BadFilterOperandInvalid, + "ElementOperand references an element that precedes it in the ContentFilter.", + m_index); + } + + if (m_index >= Parent.Parent.Elements.Count) + { + return ServiceResult.Create( + StatusCodes.BadFilterOperandInvalid, + "ElementOperand references an element that does not exist.", + m_index); + } + + return ServiceResult.Good; + } + + /// + /// Converts an ElementOperand to a displayable string. + /// + /// The table. + /// ElementOperand as a displayable string. + public override string ToString(INodeTable table) + { + return Utils.Format("Element[{0}]", Index); + } + } + #endregion + + #region LiteralOperand Class + public partial class LiteralOperand : IFormattable + { + /// + /// Constructs an operand from a value. + /// + /// The value. + public LiteralOperand(object value) + { + m_value = new Variant(value); + } + + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return String.Format("{0}", m_value); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + /// + /// Validates the operand. + /// + /// The context. + /// The index. + /// The result of the validation + public override ServiceResult Validate(FilterContext context, int index) + { + if (m_value.Value == null) + { + return ServiceResult.Create( + StatusCodes.BadEventFilterInvalid, + "LiteralOperand specifies a null Value."); + } + + return ServiceResult.Good; + } + + /// + /// Converts an LiteralOperand to a displayable string. + /// + /// The table. + /// LiteralOperand as a displayable string. + public override string ToString(INodeTable table) + { + ExpandedNodeId nodeId = Value.Value as ExpandedNodeId; + + if (nodeId == null) + { + nodeId = Value.Value as NodeId; + } + + if (nodeId != null) + { + INode node = table.Find(nodeId); + + if (node != null) + { + return Utils.Format("{0} ({1})", node, nodeId); + } + } + + return Utils.Format("{0}", Value); + } + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/IFilterTarget.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/IFilterTarget.cs new file mode 100644 index 00000000..9bc3884b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/IFilterTarget.cs @@ -0,0 +1,334 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// This interface is used by ContentFilterOperation to get values from the + /// NodeSet for use by the various filter operators. All NodeSets used in a + /// ContentFilter must implement this interface. + /// + public interface IFilterTarget + { + /// + /// Checks whether the target is an instance of the specified type. + /// + /// The context to use when checking the type definition. + /// The type of the instance. + /// + /// True if the object is an instance of the specified type. + /// + bool IsTypeOf( + FilterContext context, + NodeId typeDefinitionId); + + /// + /// Returns the value of an attribute identified by the operand. + /// + /// The context to use when evaluating the operand. + /// The type of the instance. + /// The path from the instance to the node which defines the attribute. + /// The attribute to return. + /// The sub-set of an array value to return. + /// + /// The attribute value. Returns null if the attribute does not exist. + /// + object GetAttributeValue( + FilterContext context, + NodeId typeDefinitionId, + IList relativePath, + uint attributeId, + NumericRange indexRange); + } + + /// + /// This interface is used by ContentFilterOperation to get values from the + /// NodeSet for use by the various filter operators. All NodeSets used in a + /// ContentFilter must implement this interface. + /// + public interface IAdvancedFilterTarget : IFilterTarget + { + /// + /// Checks whether the target is an instance is in the specified view. + /// + /// The context to use when checking the biew. + /// The identifier for the view. + /// True if the instance is in the view. + bool IsInView( + FilterContext context, + NodeId viewId); + + /// + /// Returns TRUE if the node is related to the current target. + /// + bool IsRelatedTo( + FilterContext context, + NodeId intermediateNodeId, + NodeId sourceTypeId, + NodeId targetTypeId, + NodeId referenceTypeId, + int hops, + bool includeTypeDefintionSubtypes, + bool includeReferenceSubtypes); + + /// + /// Returns the list of nodes related to the current target. + /// + IList GetRelatedNodes( + FilterContext context, + NodeId intermediateNodeId, + NodeId sourceTypeId, + NodeId targetTypeId, + NodeId referenceTypeId, + int hops, + bool includeTypeDefintionSubtypes, + bool includeReferenceSubtypes); + + /// + /// Returns the value of attributes for nodes which are related to the current node. + /// + /// The context to use when evaluating the operand. + /// The type of the instance. + /// The relative path to the attribute. + /// The attribute to return. + /// The sub-set of an array value to return. + /// + /// The attribute value. Returns null if the attribute does not exist. + /// + object GetRelatedAttributeValue( + FilterContext context, + NodeId typeDefinitionId, + RelativePath relativePath, + uint attributeId, + NumericRange indexRange); + } + + /// + /// Provides context information to used when searching the address space. + /// + public class FilterContext : IOperationContext + { + #region Contructors + /// + /// Initializes the context. + /// + /// The namespace URIs. + /// The type tree. + /// The context. + public FilterContext(NamespaceTable namespaceUris, ITypeTable typeTree, IOperationContext context) + { + if (namespaceUris == null) throw new ArgumentNullException(nameof(namespaceUris)); + if (typeTree == null) throw new ArgumentNullException(nameof(typeTree)); + + m_namespaceUris = namespaceUris; + m_typeTree = typeTree; + m_context = context; + } + + /// + /// Initializes the context. + /// + /// The namespace URIs. + /// The type tree. + public FilterContext(NamespaceTable namespaceUris, ITypeTable typeTree) + : + this(namespaceUris, typeTree, (IList)null) + { + } + + /// + /// Initializes the context. + /// + /// The namespace URIs. + /// The type tree. + /// The preferred locales. + public FilterContext(NamespaceTable namespaceUris, ITypeTable typeTree, IList preferredLocales) + { + if (namespaceUris == null) throw new ArgumentNullException(nameof(namespaceUris)); + if (typeTree == null) throw new ArgumentNullException(nameof(typeTree)); + + m_namespaceUris = namespaceUris; + m_typeTree = typeTree; + m_context = null; + m_preferredLocales = preferredLocales; + } + #endregion + + #region Public Properties + /// + /// The namespace table to use when evaluating filters. + /// + /// The namespace URIs. + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + } + + /// + /// The type tree to use when evaluating filters. + /// + /// The type tree. + public ITypeTable TypeTree + { + get { return m_typeTree; } + } + #endregion + + #region IOperationContext Members + /// + /// The identifier for the session (null if multiple sessions are associated with the operation). + /// + /// The session identifier. + public NodeId SessionId + { + get + { + if (m_context != null) + { + return m_context.SessionId; + } + + return null; + } + } + + /// + /// The identity of the user. + /// + /// The user identity. + public IUserIdentity UserIdentity + { + get + { + if (m_context != null) + { + return m_context.UserIdentity; + } + + return null; + } + } + + /// + /// The locales to use if available. + /// + /// The preferred locales. + public IList PreferredLocales + { + get + { + if (m_context != null) + { + return m_context.PreferredLocales; + } + + return m_preferredLocales; + } + } + + /// + /// The mask to use when collecting any diagnostic information. + /// + /// The diagnostics mask. + public DiagnosticsMasks DiagnosticsMask + { + get + { + if (m_context != null) + { + return m_context.DiagnosticsMask; + } + + return DiagnosticsMasks.SymbolicId; + } + } + + /// + /// The table of strings which is used to store diagnostic string data. + /// + /// The string table. + public StringTable StringTable + { + get + { + if (m_context != null) + { + return m_context.StringTable; + } + + return null; + } + } + + /// + /// When the operation times out. + /// + /// The operation deadline. + public DateTime OperationDeadline + { + get + { + if (m_context != null) + { + return m_context.OperationDeadline; + } + + return DateTime.MaxValue; + } + } + + /// + /// The current status of the the operation (bad if the operation has been aborted). + /// + /// The operation status. + public StatusCode OperationStatus + { + get + { + if (m_context != null) + { + return m_context.OperationStatus; + } + + return StatusCodes.Good; + } + } + + /// + /// The audit identifier associated with the operation. + /// + /// The audit entry identifier. + public string AuditEntryId + { + get + { + if (m_context != null) + { + return m_context.AuditEntryId; + } + + return null; + } + } + #endregion + + #region Private Fields + private NamespaceTable m_namespaceUris; + private ITypeTable m_typeTree; + private IOperationContext m_context; + private IList m_preferredLocales; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/INode.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/INode.cs new file mode 100644 index 00000000..c61cd9df --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/INode.cs @@ -0,0 +1,318 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// An interface to an object that describes a node. + /// + public interface INode + { + /// + /// The node identifier. + /// + /// The node identifier. + ExpandedNodeId NodeId { get; } + + /// + /// The node class. + /// + /// The node class. + NodeClass NodeClass { get; } + + /// + /// The locale independent browse name. + /// + /// The name of the browse. + QualifiedName BrowseName { get; } + + /// + /// The localized display name. + /// + /// The display name. + LocalizedText DisplayName { get; } + + /// + /// The identifier for the TypeDefinition node. + /// + /// The type definition identifier. + ExpandedNodeId TypeDefinitionId { get; } + } + + /// + /// An interface to an object that describes a node local to the server. + /// + public interface ILocalNode : INode + { + /// + /// A synchronization object that can be used to safely access the node. + /// + /// The data lock. + object DataLock { get; } + + /// + /// A handle assigned to the node. + /// + /// The handle. + object Handle { get; set; } + + /// + /// The node identifier. + /// + /// The node identifier. + new NodeId NodeId { get; } + + /// + /// The locale independent browse name. + /// + /// The name of the browse. + new QualifiedName BrowseName { get; set; } + + /// + /// The localized display name. + /// + /// The display name. + new LocalizedText DisplayName { get; set; } + + /// + /// The localized description + /// + /// The description. + LocalizedText Description { get; set; } + + /// + /// A mask indicating which attributes are writeable. + /// + /// The write mask. + AttributeWriteMask WriteMask { get; set; } + + /// + /// A mask indicating which attributes that are writeable for the current user. + /// + /// The user write mask. + AttributeWriteMask UserWriteMask { get; set; } + + /// + /// The identifier for the ModellingRule node. + /// + /// The modelling rule. + NodeId ModellingRule { get; } + + /// + /// The collection of references for the node. + /// + /// The references. + IReferenceCollection References { get; } + + /// + /// Creates a copy of the node. + /// + /// The node identifier. + /// Copy of the node. + ILocalNode CreateCopy(NodeId nodeId); + + /// + /// Returns true if the node supports the attribute. + /// + /// The attribute identifier. + /// True if the node supports the attribute. + bool SupportsAttribute(uint attributeId); + + /// + /// Reads the value of a attribute. + /// + /// The context. + /// The attribute identifier. + /// The value. + /// The result of read operation. + ServiceResult Read(IOperationContext context, uint attributeId, DataValue value); + + /// + /// Writes the value of an attribute. + /// + /// The attribute identifier. + /// The value. + /// The result of Write operation + ServiceResult Write(uint attributeId, DataValue value); + } + + /// + /// An interface to an object that describes an ObjectType node. + /// + public interface IObjectType : ILocalNode + { + /// + /// Whether the type is an abstract type. + /// + bool IsAbstract { get; set; } + } + + /// + /// An interface to an object that describes an Object node. + /// + public interface IObject : ILocalNode + { + /// + /// Whether the object supports events. + /// + byte EventNotifier { get; set; } + } + + /// + /// An interface to an object that describes either a Variable or a VariableType node. + /// + public interface IVariableBase : ILocalNode + { + /// + /// The value attribute. + /// + /// The value. + object Value { get; set; } + + /// + /// The data type for the value attribute. + /// + /// The type of the data. + NodeId DataType { get; set; } + + /// + /// Specifies whether the the value is an array or scalar. + /// + /// The value rank. + int ValueRank { get; set; } + + /// + /// The number in each dimension of an array value. + /// + /// The array dimensions. + IList ArrayDimensions { get; set; } + } + + /// + /// An interface to an object that describes a VariableType node. + /// + public interface IVariableType : IVariableBase + { + /// + /// Whether the type is an abstract type. + /// + bool IsAbstract { get; set; } + } + + /// + /// An interface to an object that describes a Variable node. + /// + public interface IVariable : IVariableBase + { + /// + /// The type of access supported by variable. + /// + /// The access level. + byte AccessLevel { get; set; } + + /// + /// The type of access supported by variable for the current user. + /// + /// The user access level. + byte UserAccessLevel { get; set; } + + /// + /// The minimum sampling interval supported by the variable. + /// + /// The minimum sampling interval. + double MinimumSamplingInterval { get; set; } + + /// + /// Whether historical data is being archived for the variable. + /// + /// true if historizing; otherwise, false. + bool Historizing { get; set; } + } + + /// + /// An interface to an object that describes a DataType node. + /// + public interface IMethod : ILocalNode + { + /// + /// Whether the method is currently executable. + /// + /// true if executable; otherwise, false. + bool Executable { get; set; } + + /// + /// Whether the method is currently executable by the current user. + /// + /// true if executable by user; otherwise, false. + bool UserExecutable { get; set; } + } + + /// + /// An interface to an object that describes a DataType node. + /// + public interface IDataType : ILocalNode + { + /// + /// Whether the type is an abstract type. + /// + /// + /// true if this instance is abstract; otherwise, false. + /// + bool IsAbstract { get; set; } + } + + /// + /// An interface to an object that describes a ReferenceType node. + /// + public interface IReferenceType : ILocalNode + { + /// + /// Whether the type is an abstract type. + /// + /// + /// true if this instance is abstract; otherwise, false. + /// + bool IsAbstract { get; set; } + + /// + /// Whether the reference type has the same meaning in both directions. + /// + /// true if symmetric; otherwise, false. + bool Symmetric { get; set; } + + /// + /// Whether the reference type has the same meaning in both directions. + /// + /// The name of the inverse. + LocalizedText InverseName { get; set; } + } + + /// + /// An interface to an object that describes a View node. + /// + public interface IView : ILocalNode + { + /// + /// Whether the view supports events. + /// + /// The event notifier. + byte EventNotifier { get; set; } + + /// + /// Whether the view contains no loops. + /// + /// true if contains no loops; otherwise, false. + bool ContainsNoLoops { get; set; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/IOperationContext.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/IOperationContext.cs new file mode 100644 index 00000000..cca2835f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/IOperationContext.cs @@ -0,0 +1,71 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// An interface to an object that describes a node local to the server. + /// + public interface IOperationContext + { + /// + /// The identifier for the session (null if multiple sessions are associated with the operation). + /// + /// The session identifier. + NodeId SessionId { get; } + + /// + /// The identity of the user. + /// + /// The user identity. + IUserIdentity UserIdentity { get; } + + /// + /// The locales to use if available. + /// + /// The preferred locales. + IList PreferredLocales { get; } + + /// + /// The mask to use when collecting any diagnostic information. + /// + /// The diagnostics mask. + DiagnosticsMasks DiagnosticsMask { get; } + + /// + /// The table of strings which is used to store diagnostic string data. + /// + /// The string table. + StringTable StringTable { get; } + + /// + /// When the operation times out. + /// + /// The operation deadline. + DateTime OperationDeadline { get; } + + /// + /// The current status of the the operation (bad if the operation has been aborted). + /// + /// The operation status. + StatusCode OperationStatus { get; } + + /// + /// The audit identifier associated with the operation. + /// + /// The audit entry identifier. + string AuditEntryId { get; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/Node.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/Node.cs new file mode 100644 index 00000000..a12e1a4e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/Node.cs @@ -0,0 +1,1625 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + #region Node Class + /// + /// A node in the server address space. + /// + public partial class Node : IFormattable, ILocalNode + { + #region Constructors + /// + /// Creates a node from a reference desciption. + /// + /// The reference. + public Node(ReferenceDescription reference) + { + Initialize(); + + m_nodeId = (NodeId)reference.NodeId; + m_nodeClass = reference.NodeClass; + m_browseName = reference.BrowseName; + m_displayName = reference.DisplayName; + } + + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public Node(ILocalNode source) + { + Initialize(); + + if (source != null) + { + this.NodeId = source.NodeId; + this.NodeClass = source.NodeClass; + this.BrowseName = source.BrowseName; + this.DisplayName = source.DisplayName; + this.Description = source.Description; + this.WriteMask = (uint)source.WriteMask; + this.UserWriteMask = (uint)source.UserWriteMask; + } + } + + /// + /// Returns a copy of the node + /// + /// The source. + /// A copy of the source node + public static Node Copy(ILocalNode source) + { + if (source == null) + { + return null; + } + + switch (source.NodeClass) + { + case NodeClass.Object: return new ObjectNode(source); + case NodeClass.Variable: return new VariableNode(source); + case NodeClass.ObjectType: return new ObjectTypeNode(source); + case NodeClass.VariableType: return new VariableTypeNode(source); + case NodeClass.DataType: return new DataTypeNode(source); + case NodeClass.ReferenceType: return new ReferenceTypeNode(source); + case NodeClass.Method: return new MethodNode(source); + case NodeClass.View: return new ViewNode(source); + } + + if (source is IObject) return new ObjectNode(source); + if (source is IVariable) return new VariableNode(source); + if (source is IObjectType) return new ObjectTypeNode(source); + if (source is IVariableType) return new VariableTypeNode(source); + if (source is IDataType) return new DataTypeNode(source); + if (source is IReferenceType) return new ReferenceTypeNode(source); + if (source is IMethod) return new MethodNode(source); + if (source is IView) return new ViewNode(source); + + return new Node(source); + } + #endregion + + #region Public Properties + /// + /// An opaque handle that can be assoociated with the node. + /// + /// The handle. + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// The format. + /// The provider. + /// String representation of the object. + public string ToString(string format, IFormatProvider provider) + { + if (format == null) + { + if (m_displayName != null && !String.IsNullOrEmpty(m_displayName.Text)) + { + return m_displayName.Text; + } + + if (!QualifiedName.IsNull(m_browseName)) + { + return m_browseName.Name; + } + + return Utils.Format("(unknown {0})", ((NodeClass)m_nodeClass).ToString().ToLower()); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + + /// + /// Returns the string representation of the object. + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region INode Methods + /// + /// The node identifier. + /// + /// The node identifier. + ExpandedNodeId Opc.Ua.INode.NodeId + { + get { return m_nodeId; } + } + + /// + /// The identifier for the TypeDefinition node. + /// + /// The type definition identifier. + public ExpandedNodeId TypeDefinitionId + { + get + { + if (m_referenceTable != null) + { + return m_referenceTable.FindTarget(ReferenceTypeIds.HasTypeDefinition, false, false, null, 0); + } + + return null; + } + } + #endregion + + #region ILocalNode Methods + /// + /// A synchronization object that can be used to safely access the node. + /// + /// The data lock. + public object DataLock + { + get { return this; } + } + + /// + /// A mask indicating which attributes are writeable. + /// + /// The write mask. + AttributeWriteMask Opc.Ua.ILocalNode.WriteMask + { + get { return (AttributeWriteMask)m_writeMask; } + set { m_writeMask = (uint)value; } + } + + /// + /// A mask indicating which attributes that are writeable for the current user. + /// + /// The user write mask. + AttributeWriteMask Opc.Ua.ILocalNode.UserWriteMask + { + get { return (AttributeWriteMask)m_userWriteMask; } + set { m_userWriteMask = (uint)value; } + } + + /// + /// The identifier for the ModellingRule node. + /// + /// The modelling rule. + public NodeId ModellingRule + { + get + { + return (NodeId)ReferenceTable.FindTarget(ReferenceTypeIds.HasModellingRule, false, false, null, 0); + } + } + + /// + /// The collection of references for the node. + /// + /// The references. + IReferenceCollection ILocalNode.References + { + get { return ReferenceTable; } + } + + /// + /// Creates a copy of the node. + /// + /// The node identifier. + /// Copy of the node + public ILocalNode CreateCopy(NodeId nodeId) + { + Node node = Node.Copy(this); + node.NodeId = nodeId; + return node; + } + + /// + /// Returns true if the node supports the attribute. + /// + /// The attribute id. + /// True if the node supports the attribute. + public virtual bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.NodeId: + case Attributes.NodeClass: + case Attributes.BrowseName: + case Attributes.DisplayName: + case Attributes.Description: + case Attributes.WriteMask: + case Attributes.UserWriteMask: + case Attributes.RolePermissions: + case Attributes.UserRolePermissions: + case Attributes.AccessRestrictions: + { + return true; + } + } + + return false; + } + + /// + /// Reads the value of a attribute. + /// + /// The context. + /// The attribute id. + /// The value. + /// The result of read operation. + public ServiceResult Read(IOperationContext context, uint attributeId, DataValue value) + { + if (!SupportsAttribute(attributeId)) + { + return StatusCodes.BadAttributeIdInvalid; + } + + value.Value = Read(attributeId); + value.StatusCode = StatusCodes.Good; + + if (attributeId == Attributes.Value) + { + value.SourceTimestamp = DateTime.UtcNow; + } + + return ServiceResult.Good; + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + public ServiceResult Write(uint attributeId, DataValue value) + { + if (!SupportsAttribute(attributeId)) + { + return StatusCodes.BadAttributeIdInvalid; + } + + // check for read only attributes. + switch (attributeId) + { + case Attributes.NodeId: + case Attributes.NodeClass: + { + return StatusCodes.BadNotWritable; + } + } + + // check data type. + if (attributeId != Attributes.Value) + { + if (Attributes.GetDataTypeId(attributeId) != TypeInfo.GetDataTypeId(value)) + { + return StatusCodes.BadTypeMismatch; + } + } + + return Write(attributeId, value.Value); + } + #endregion + + #region Public Members + /// + /// A searchable table of references for the node. + /// + /// The reference table. + public ReferenceCollection ReferenceTable + { + get + { + if (m_referenceTable == null) + { + m_referenceTable = new ReferenceCollection(); + } + + return m_referenceTable; + } + } + + /// + /// Returns true if the reference exist. + /// + /// The reference type id. + /// if set to true [is inverse]. + /// The target id. + /// True if the reference exist. + public bool ReferenceExists( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId) + { + return ReferenceTable.Exists(referenceTypeId, isInverse, targetId, false, null); + } + + /// + /// Returns all targets of the specified reference type. + /// + /// The reference type id. + /// if set to true [is inverse]. + /// All targets of the specified reference type. + public IList Find( + NodeId referenceTypeId, + bool isInverse) + { + return ReferenceTable.Find(referenceTypeId, isInverse, false, null); + } + + /// + /// Returns a target of the specified reference type. + /// + /// The reference type id. + /// if set to true [is inverse]. + /// The index. + /// A target of the specified reference type. + public ExpandedNodeId FindTarget( + NodeId referenceTypeId, + bool isInverse, + int index) + { + return ReferenceTable.FindTarget(referenceTypeId, isInverse, false, null, index); + } + + /// + /// Returns the supertype for the Node if one exists. + /// + /// The type tree. + /// The supertype for the Node if one exists. + /// + /// Includes subtypes of HasSubtype if typeTree != null. + /// + public ExpandedNodeId GetSuperType(ITypeTable typeTree) + { + if (m_referenceTable != null) + { + return m_referenceTable.FindTarget(ReferenceTypeIds.HasSubtype, true, typeTree != null, typeTree, 0); + } + + return null; + } + #endregion + + #region Protected Methods + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected virtual object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.NodeId: return m_nodeId; + case Attributes.NodeClass: return m_nodeClass; + case Attributes.BrowseName: return m_browseName; + case Attributes.DisplayName: return m_displayName; + case Attributes.Description: return m_description; + case Attributes.WriteMask: return m_writeMask; + case Attributes.UserWriteMask: return m_userWriteMask; + case Attributes.RolePermissions: return m_rolePermissions; + case Attributes.UserRolePermissions: return m_userRolePermissions; + case Attributes.AccessRestrictions: return m_accessRestrictions; + } + + return false; + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected virtual ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.BrowseName: { m_browseName = (QualifiedName)value; break; } + case Attributes.DisplayName: { m_displayName = (LocalizedText)value; break; } + case Attributes.Description: { m_description = (LocalizedText)value; break; } + case Attributes.WriteMask: { m_writeMask = (uint)value; break; } + case Attributes.UserWriteMask: { m_userWriteMask = (uint)value; break; } + case Attributes.RolePermissions: { m_rolePermissions = (RolePermissionTypeCollection)value; break; } + case Attributes.UserRolePermissions: { m_userRolePermissions = (RolePermissionTypeCollection)value; break; } + case Attributes.AccessRestrictions: { m_accessRestrictions = (ushort)value; break; } + + default: + { + return StatusCodes.BadAttributeIdInvalid; + } + } + + return ServiceResult.Good; + } + #endregion + + #region Private Fields + private object m_handle = null; + private ReferenceCollection m_referenceTable; + #endregion + } + #endregion + + #region ReferenceNode Class + /// + /// A node in the server address space. + /// + public partial class ReferenceNode : IReference, IComparable, IFormattable + { + #region Constructors + /// + /// Initializes the reference. + /// + /// The reference type id. + /// if set to true [is inverse]. + /// The target id. + public ReferenceNode(NodeId referenceTypeId, bool isInverse, ExpandedNodeId targetId) + { + m_referenceTypeId = referenceTypeId; + m_isInverse = isInverse; + m_targetId = targetId; + } + #endregion + + #region IFormattable Members + /// + /// Returns a string representation of the HierarchyBrowsePath. + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + + /// + /// Returns a string representation of the HierarchyBrowsePath. + /// + /// The format. + /// The provider. + /// A string representation of the HierarchyBrowsePath. + public string ToString(string format, IFormatProvider provider) + { + if (format != null) + { + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + + string referenceType = null; + + if (m_referenceTypeId != null && m_referenceTypeId.IdType == IdType.Numeric && m_referenceTypeId.NamespaceIndex == 0) + { + referenceType = ReferenceTypes.GetBrowseName((uint)m_referenceTypeId.Identifier); + } + + if (referenceType == null) + { + referenceType = Utils.Format("{0}", m_referenceTypeId); + } + + if (m_isInverse) + { + return Utils.Format("{1}", referenceType, m_targetId); + } + else + { + return Utils.Format("<{0}>{1}", referenceType, m_targetId); + } + } + #endregion + + #region Overridden Methods + /// + /// Determines whether the specified is equal to the current . + /// + /// The to compare with the current . + /// + /// true if the specified is equal to the current ; otherwise, false. + /// + /// + /// The parameter is null. + /// + public override bool Equals(object obj) + { + return CompareTo(obj) == 0; + } + + /// + /// Serves as a hash function for a particular type. + /// + /// + /// A hash code for the current . + /// + public override int GetHashCode() + { + return base.GetHashCode(); + } + + /// + /// Returns true if the objects are equal. + /// + /// ReferenceNode A. + /// The ReferenceNode B. + /// The result of the operator.Returns true if the objects are equal. + public static bool operator==(ReferenceNode a, object b) + { + if (Object.ReferenceEquals(a, null)) + { + return Object.ReferenceEquals(b, null); + } + + return a.CompareTo(b) == 0; + } + + /// + /// Returns true if the objects are not equal. + /// + /// ReferenceNode A. + /// The ReferenceNode B. + /// The result of the operator.Returns true if the objects are not equal. + public static bool operator!=(ReferenceNode a, object b) + { + if (Object.ReferenceEquals(a, null)) + { + return !Object.ReferenceEquals(b, null); + } + + return a.CompareTo(b) != 0; + } + #endregion + + #region IComparable Members + /// + /// 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 32-bit 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(object obj) + { + if (Object.ReferenceEquals(obj, null)) + { + return +1; + } + + if (Object.ReferenceEquals(obj, this)) + { + return 0; + } + + ReferenceNode reference = obj as ReferenceNode; + + if (reference == null) + { + return -1; + } + + if (Object.ReferenceEquals(m_referenceTypeId, null)) + { + return (Object.ReferenceEquals(reference.m_referenceTypeId, null))?0:-1; + } + + int result = m_referenceTypeId.CompareTo(reference.m_referenceTypeId); + + if (result != 0) + { + return result; + } + + if (reference.m_isInverse != this.m_isInverse) + { + return (this.m_isInverse)?+1:-1; + } + + if (Object.ReferenceEquals(m_targetId, null)) + { + return (Object.ReferenceEquals(reference.m_targetId, null))?0:-1; + } + + return m_targetId.CompareTo(reference.m_targetId); + } + #endregion + } + #endregion + + #region InstanceNode Class + /// + /// An instance node in the server address space. + /// + public partial class InstanceNode : Node + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public InstanceNode(ILocalNode source) : base(source) + { + } + #endregion + } + #endregion + + #region TypeNode Class + /// + /// An type node in the server address space. + /// + public partial class TypeNode : Node + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public TypeNode(ILocalNode source) : base(source) + { + } + #endregion + } + #endregion + + #region VariableNode Class + /// + /// A variable node in the server address space. + /// + public partial class VariableNode : IVariable + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public VariableNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.Variable; + + IVariable variable = source as IVariable; + + if (variable != null) + { + this.DataType = variable.DataType; + this.ValueRank = variable.ValueRank; + this.AccessLevel = variable.AccessLevel; + this.UserAccessLevel = variable.UserAccessLevel; + this.MinimumSamplingInterval = variable.MinimumSamplingInterval; + this.Historizing = variable.Historizing; + + object value = variable.Value; + + if (value == null) + { + value = TypeInfo.GetDefaultValue(variable.DataType, variable.ValueRank); + } + + this.Value = new Variant(value); + + if (variable.ArrayDimensions != null) + { + this.ArrayDimensions = new UInt32Collection(variable.ArrayDimensions); + } + } + } + #endregion + + #region IVariableBase Members + /// + /// The value attribute. + /// + /// The value. + object IVariableBase.Value + { + get + { + return m_value.Value; + } + + set + { + m_value.Value = value; + } + } + + /// + /// The number in each dimension of an array value. + /// + /// The array dimensions. + IList IVariableBase.ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + else + { + m_arrayDimensions = new UInt32Collection(value); + } + } + } + #endregion + + #region Protected Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute id. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.Value: + case Attributes.DataType: + case Attributes.ValueRank: + case Attributes.AccessLevel: + case Attributes.AccessLevelEx: + case Attributes.UserAccessLevel: + case Attributes.MinimumSamplingInterval: + case Attributes.Historizing: + { + return true; + } + + case Attributes.ArrayDimensions: + { + if (m_arrayDimensions == null || m_arrayDimensions.Count == 0) + { + return false; + } + + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.DataType: return m_dataType; + case Attributes.ValueRank: return m_valueRank; + case Attributes.AccessLevel: return m_accessLevel; + case Attributes.UserAccessLevel: return m_userAccessLevel; + case Attributes.MinimumSamplingInterval: return m_minimumSamplingInterval; + case Attributes.Historizing: return m_historizing; + case Attributes.AccessLevelEx: return m_accessLevelEx; + + // values are copied when the are written so then can be safely returned. + case Attributes.Value: + { + return m_value.Value; + } + + // array dimensions attribute is not support if it is empty. + case Attributes.ArrayDimensions: + { + if (m_arrayDimensions == null || m_arrayDimensions.Count == 0) + { + return StatusCodes.BadAttributeIdInvalid; + } + + return m_arrayDimensions.ToArray(); + } + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.AccessLevel: { m_accessLevel = (byte)value; return ServiceResult.Good; } + case Attributes.UserAccessLevel: { m_userAccessLevel = (byte)value; return ServiceResult.Good; } + case Attributes.AccessLevelEx: { m_accessLevelEx = (uint)value; return ServiceResult.Good; } + case Attributes.MinimumSamplingInterval: { m_minimumSamplingInterval = (int)value; return ServiceResult.Good; } + case Attributes.Historizing: { m_historizing = (bool)value; return ServiceResult.Good; } + + // values are copied when the are written so then can be safely returned on read. + case Attributes.Value: + { + m_value.Value = Utils.Clone(value); + return ServiceResult.Good; + } + + case Attributes.DataType: + { + NodeId dataType = (NodeId)value; + + // must ensure the value is of the correct datatype. + if (dataType != m_dataType) + { + m_value.Value = TypeInfo.GetDefaultValue(dataType, m_valueRank); + } + + m_dataType = dataType; + return ServiceResult.Good; + } + + case Attributes.ValueRank: + { + int valueRank = (int)value; + + if (valueRank != m_valueRank) + { + m_value.Value = TypeInfo.GetDefaultValue(m_dataType, valueRank); + } + + m_valueRank = valueRank; + + return ServiceResult.Good; + } + + case Attributes.ArrayDimensions: + { + m_arrayDimensions = new UInt32Collection((uint[])value); + + // ensure number of dimensions is correct. + if (m_arrayDimensions.Count > 0) + { + if (m_arrayDimensions.Count != m_valueRank) + { + m_valueRank = m_arrayDimensions.Count; + m_value.Value = TypeInfo.GetDefaultValue(m_dataType, m_valueRank); + } + } + + return ServiceResult.Good; + } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region ObjectNode Class + /// + /// An object node in the server address space. + /// + public partial class ObjectNode : IObject + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public ObjectNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.Object; + + IObject node = source as IObject; + + if (node != null) + { + this.EventNotifier = node.EventNotifier; + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute identifier. + /// True if the value of an attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.EventNotifier: + { + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.EventNotifier: return m_eventNotifier; + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// Result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.EventNotifier: { m_eventNotifier = (byte)value; return ServiceResult.Good; } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region ObjectTypeNode Class + /// + /// An object type node in the server address space. + /// + public partial class ObjectTypeNode : IObjectType + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public ObjectTypeNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.ObjectType; + + IObjectType node = source as IObjectType; + + if (node != null) + { + this.IsAbstract = node.IsAbstract; + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute id. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.IsAbstract: + { + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// Tthe node supports the specified attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.IsAbstract: return m_isAbstract; + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.IsAbstract: { m_isAbstract = (bool)value; return ServiceResult.Good; } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region VariableTypeNode Class + /// + /// A variable type node in the server address space. + /// + public partial class VariableTypeNode : IVariableType + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public VariableTypeNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.VariableType; + + IVariableType node = source as IVariableType; + + if (node != null) + { + this.IsAbstract = node.IsAbstract; + this.Value = new Variant(node.Value); + this.DataType = node.DataType; + this.ValueRank = node.ValueRank; + + if (node.ArrayDimensions != null) + { + this.ArrayDimensions = new UInt32Collection(node.ArrayDimensions); + } + } + } + #endregion + + #region IVariableBase Members + /// + /// The value attribute. + /// + /// The value. + object IVariableBase.Value + { + get + { + return m_value.Value; + } + + set + { + m_value.Value = value; + } + } + + /// + /// The number in each dimension of an array value. + /// + /// The number in each dimension of an array value. + IList IVariableBase.ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + if (value == null) + { + m_arrayDimensions = new UInt32Collection(); + } + else + { + m_arrayDimensions = new UInt32Collection(value); + } + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute id. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.Value: + { + return (m_value.Value != null); + } + + case Attributes.ValueRank: + case Attributes.DataType: + case Attributes.IsAbstract: + { + return true; + } + + case Attributes.ArrayDimensions: + { + if (m_arrayDimensions == null || m_arrayDimensions.Count == 0) + { + return false; + } + + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.DataType: return m_dataType; + case Attributes.ValueRank: return m_valueRank; + + // values are copied when the are written so then can be safely returned. + case Attributes.Value: + { + return m_value.Value; + } + + case Attributes.ArrayDimensions: + { + if (m_arrayDimensions == null || m_arrayDimensions.Count == 0) + { + return StatusCodes.BadAttributeIdInvalid; + } + + return m_arrayDimensions.ToArray(); + } + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + // values are copied when the are written so then can be safely returned on read. + case Attributes.Value: + { + m_value.Value = Utils.Clone(value); + return ServiceResult.Good; + } + + case Attributes.DataType: + { + NodeId dataType = (NodeId)value; + + // must ensure the value is of the correct datatype. + if (dataType != m_dataType) + { + m_value.Value = null; + } + + m_dataType = dataType; + return ServiceResult.Good; + } + + case Attributes.ValueRank: + { + int valueRank = (int)value; + + if (valueRank != m_valueRank) + { + m_value.Value = null; + } + + m_valueRank = valueRank; + + return ServiceResult.Good; + } + + case Attributes.ArrayDimensions: + { + m_arrayDimensions = new UInt32Collection((uint[])value); + + // ensure number of dimensions is correct. + if (m_arrayDimensions.Count > 0) + { + if (m_valueRank != m_arrayDimensions.Count) + { + m_valueRank = m_arrayDimensions.Count; + m_value.Value = null; + } + } + + return ServiceResult.Good; + } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region ReferenceTypeNode Class + /// + /// A reference type node in the server address space. + /// + public partial class ReferenceTypeNode :IReferenceType + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public ReferenceTypeNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.ReferenceType; + + IReferenceType node = source as IReferenceType; + + if (node != null) + { + this.IsAbstract = node.IsAbstract; + this.InverseName = node.InverseName; + this.Symmetric = node.Symmetric; + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute identifier. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.IsAbstract: + case Attributes.InverseName: + case Attributes.Symmetric: + { + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.IsAbstract: return m_isAbstract; + case Attributes.InverseName: return m_inverseName; + case Attributes.Symmetric: return m_symmetric; + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.IsAbstract: { m_isAbstract = (bool)value; return ServiceResult.Good; } + case Attributes.InverseName: { m_inverseName = (LocalizedText)value; return ServiceResult.Good; } + case Attributes.Symmetric: { m_symmetric = (bool)value; return ServiceResult.Good; } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region MethodNode Class + /// + /// A method node in the server address space. + /// + public partial class MethodNode : IMethod + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public MethodNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.Method; + + IMethod node = source as IMethod; + + if (node != null) + { + this.Executable = node.Executable; + this.UserExecutable = node.UserExecutable; + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute id. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.Executable: + case Attributes.UserExecutable: + { + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.Executable: return m_executable; + case Attributes.UserExecutable: return m_userExecutable; + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.Executable: { m_executable = (bool)value; return ServiceResult.Good; } + case Attributes.UserExecutable: { m_userExecutable = (bool)value; return ServiceResult.Good; } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region ViewNode Class + /// + /// A view node in the server address space. + /// + public partial class ViewNode : IView + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public ViewNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.View; + + IView node = source as IView; + + if (node != null) + { + this.EventNotifier = node.EventNotifier; + this.ContainsNoLoops = node.ContainsNoLoops; + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute identifier. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.EventNotifier: + case Attributes.ContainsNoLoops: + { + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute identifier. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.EventNotifier: return m_eventNotifier; + case Attributes.ContainsNoLoops: return m_containsNoLoops; + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute identifier. + /// The value. + /// The write operation result. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.EventNotifier: { m_eventNotifier = (byte)value; return ServiceResult.Good; } + case Attributes.ContainsNoLoops: { m_containsNoLoops = (bool)value; return ServiceResult.Good; } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion + + #region DataTypeNode Class + /// + /// A view node in the server address space. + /// + public partial class DataTypeNode : IDataType + { + #region Constructors + /// + /// Creates a node from another node (copies attributes - not references). + /// + /// The source. + public DataTypeNode(ILocalNode source) : base(source) + { + this.NodeClass = NodeClass.DataType; + + IDataType node = source as IDataType; + + if (node != null) + { + this.IsAbstract = node.IsAbstract; + } + } + #endregion + + #region Overridden Methods + /// + /// Whether the node supports the specified attribute. + /// + /// The attribute identifier. + /// True if the node supports the specified attribute. + public override bool SupportsAttribute(uint attributeId) + { + switch (attributeId) + { + case Attributes.IsAbstract: + case Attributes.DataTypeDefinition: + { + return true; + } + } + + return base.SupportsAttribute(attributeId); + } + + /// + /// Reads the value of an attribute. + /// + /// The attribute id. + /// The value of an attribute. + protected override object Read(uint attributeId) + { + switch (attributeId) + { + case Attributes.IsAbstract: return m_isAbstract; + case Attributes.DataTypeDefinition: return m_dataTypeDefinition; + } + + return base.Read(attributeId); + } + + /// + /// Writes the value of an attribute. + /// + /// The attribute id. + /// The value. + /// The result of write operation. + protected override ServiceResult Write(uint attributeId, object value) + { + switch (attributeId) + { + case Attributes.IsAbstract: { m_isAbstract = (bool)value; return ServiceResult.Good; } + case Attributes.DataTypeDefinition: { m_dataTypeDefinition = (ExtensionObject)value; return ServiceResult.Good; } + } + + return base.Write(attributeId, value); + } + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/NodeSet.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/NodeSet.cs new file mode 100644 index 00000000..2c756637 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/NodeSet.cs @@ -0,0 +1,824 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A set of nodes in an address space. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix"), DataContract(Namespace = Namespaces.OpcUaXsd)] + [KnownType(typeof(ObjectNode))] + [KnownType(typeof(ObjectTypeNode))] + [KnownType(typeof(VariableNode))] + [KnownType(typeof(VariableTypeNode))] + [KnownType(typeof(MethodNode))] + [KnownType(typeof(DataTypeNode))] + [KnownType(typeof(ReferenceTypeNode))] + [KnownType(typeof(ViewNode))] + public partial class NodeSet : IEnumerable + { + #region Constructors + /// + /// Creates an empty nodeset. + /// + public NodeSet() + { + m_namespaceUris = new NamespaceTable(); + m_serverUris = new StringTable(); + m_nodes = new Dictionary(); + } + + /// + /// Loads a nodeset from a stream. + /// + /// The input stream. + /// The set of nodes + public static NodeSet Read(Stream istrm) + { + XmlReader reader = XmlReader.Create(istrm); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(NodeSet)); + return serializer.ReadObject(reader) as NodeSet; + } + finally + { + reader.Dispose(); + } + } + + /// + /// Write a nodeset to a stream. + /// + /// The input stream. + public void Write(Stream istrm) + { + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Encoding = Encoding.UTF8; + settings.Indent = true; + XmlWriter writer = XmlWriter.Create(istrm, settings); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(NodeSet)); + serializer.WriteObject(writer, this); + } + finally + { + writer.Flush(); + writer.Dispose(); + } + } + #endregion + + #region IEnumerable Members + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + public IEnumerator GetEnumerator() + { + return new List(m_nodes.Values).GetEnumerator(); + } + #endregion + + #region IEnumerable Members + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + #endregion + + #region Public Methods + /// + /// Adds a node to the set. + /// + /// The node. + /// + /// The NodeId must reference the strings for the node set. + /// + public void Add(Node node) + { + if (node == null) throw new ArgumentNullException(nameof(node)); + + if (NodeId.IsNull(node.NodeId)) + { + throw new ArgumentException("A non-null NodeId must be specified."); + } + + if (m_nodes.ContainsKey(node.NodeId)) + { + throw new ArgumentException(Utils.Format("NodeID {0} already exists for node: {1}", node.NodeId, node)); + } + + m_nodes.Add(node.NodeId, node); + } + + /// + /// Translates all elements in an array value. + /// + /// The array. + /// Type of the element. + /// The namespace URIs. + /// The server URIs. + private void TranslateArrayValue(Array array, BuiltInType elementType, NamespaceTable namespaceUris, StringTable serverUris) + { + if (array == null) + { + return; + } + + int[] dimensions = new int[array.Rank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + dimensions[ii] = array.GetLength(ii); + } + + int length = array.Length; + int[] indexes = new int[dimensions.Length]; + + for (int ii = 0; ii < length; ii++) + { + int divisor = length; + + for (int jj = 0; jj < indexes.Length; jj++) + { + divisor /= dimensions[jj]; + indexes[jj] = (ii/divisor)%dimensions[jj]; + } + + object element = array.GetValue(indexes); + + if (element != null) + { + if (elementType == BuiltInType.Variant) + { + element = ((Variant)element).Value; + } + + element = TranslateValue(element, namespaceUris, serverUris); + + if (elementType == BuiltInType.Variant) + { + element = new Variant(element); + } + + array.SetValue(element, indexes); + } + } + } + + /// + /// Translates a value. + /// + /// The value. + /// The namespace URIs. + /// The server URIs. + /// Translated value. + private object TranslateValue(object value, NamespaceTable namespaceUris, StringTable serverUris) + { + TypeInfo typeInfo = TypeInfo.Construct(value); + + // do nothing for unknown types. + if (typeInfo == null) + { + return value; + } + + // recursively process array values. + if (typeInfo.ValueRank > 0) + { + TranslateArrayValue((Array)value, typeInfo.BuiltInType, namespaceUris, serverUris); + return value; + } + + // check for values containing namespace indexes. + switch (typeInfo.BuiltInType) + { + case BuiltInType.NodeId: + { + return Translate((NodeId)value, m_namespaceUris, namespaceUris); + } + + case BuiltInType.ExpandedNodeId: + { + return Translate((ExpandedNodeId)value, m_namespaceUris, m_serverUris, namespaceUris, serverUris); + } + + case BuiltInType.QualifiedName: + { + return Translate((QualifiedName)value, m_namespaceUris, namespaceUris); + } + + case BuiltInType.ExtensionObject: + { + Argument argument = ExtensionObject.ToEncodeable((ExtensionObject)value) as Argument; + + if (argument != null) + { + argument.DataType = Translate(argument.DataType, m_namespaceUris, namespaceUris); + } + + return value; + } + } + + return value; + } + + /// + /// Adds a node to the set after translating all namespace/server indexes in attributes or references. + /// + /// The node to export. + /// The namespace URIs. + /// The server URIs. + /// The node. + /// + /// Does not add references. + /// + public Node Add(ILocalNode nodeToExport, NamespaceTable namespaceUris, StringTable serverUris) + { + Node node = Node.Copy(nodeToExport); + + node.NodeId = Translate(nodeToExport.NodeId, m_namespaceUris, namespaceUris); + node.BrowseName = Translate(nodeToExport.BrowseName, m_namespaceUris, namespaceUris); + + VariableNode variableToExport = nodeToExport as VariableNode; + + if (variableToExport != null) + { + VariableNode variableNode = (VariableNode)node; + + object value = TranslateValue(variableNode.Value.Value, namespaceUris, serverUris); + variableNode.Value = new Variant(value); + + variableNode.DataType = Translate(variableToExport.DataType, m_namespaceUris, namespaceUris); + } + + VariableTypeNode variableTypeToExport = nodeToExport as VariableTypeNode; + + if (variableTypeToExport != null) + { + VariableTypeNode variableTypeNode = (VariableTypeNode)node; + + object value = TranslateValue(variableTypeNode.Value.Value, namespaceUris, serverUris); + variableTypeNode.Value = new Variant(value); + + variableTypeNode.DataType = Translate(variableTypeToExport.DataType, m_namespaceUris, namespaceUris); + } + + foreach (IReference referenceToExport in nodeToExport.References) + { + ReferenceNode reference = new ReferenceNode(); + + reference.ReferenceTypeId = Translate(referenceToExport.ReferenceTypeId, m_namespaceUris, namespaceUris); + reference.IsInverse = referenceToExport.IsInverse; + reference.TargetId = Translate(referenceToExport.TargetId, m_namespaceUris, m_serverUris, namespaceUris, serverUris); + + node.References.Add(reference); + } + + Add(node); + + return node; + } + + /// + /// Translates a reference and adds it to the specified node. + /// + /// The node. + /// The reference to export. + /// The namespace URIs. + /// The server URIs. + public void AddReference(Node node, ReferenceNode referenceToExport, NamespaceTable namespaceUris, StringTable serverUris) + { + ReferenceNode reference = new ReferenceNode(); + + reference.ReferenceTypeId = Translate(referenceToExport.ReferenceTypeId, m_namespaceUris, namespaceUris); + reference.IsInverse = referenceToExport.IsInverse; + reference.TargetId = Translate(referenceToExport.TargetId, m_namespaceUris, m_serverUris, namespaceUris, serverUris); + + node.References.Add(reference); + } + + /// + /// Removes a node from the set. + /// + /// The node identifier. + /// The result of the removal. + /// + /// The NodeId must reference the strings for the node set. + /// + public bool Remove(NodeId nodeId) + { + return m_nodes.Remove(nodeId); + } + + /// + /// Returns true if the node exists in the nodeset. + /// + /// The node identifier. + /// + /// true if the node exists in the nodeset; otherwise, false. + /// + /// + /// The NodeId must reference the strings for the node set. + /// + public bool Contains(NodeId nodeId) + { + return m_nodes.ContainsKey(nodeId); + } + + /// + /// Returns the node in the set. + /// + /// The node identifier. + /// The node in the set. + /// + /// The NodeId must reference the strings for the node set. + /// + public Node Find(NodeId nodeId) + { + Node node = null; + + if (m_nodes.TryGetValue(nodeId, out node)) + { + return node; + } + + return null; + } + + /// + /// Returns the node in the set. + /// + /// The node identifier. + /// The namespace URIs. + /// The node in the set. + /// + /// The NodeId namespace is translated before the node is looked up. + /// + public Node Find(NodeId nodeId, NamespaceTable namespaceUris) + { + if (nodeId == null) throw new ArgumentNullException(nameof(nodeId)); + if (namespaceUris == null) throw new ArgumentNullException(nameof(namespaceUris)); + + // check for unknown namespace index. + string ns = namespaceUris.GetString(nodeId.NamespaceIndex); + + if (ns == null) + { + return null; + } + + // check for unknown namespace uri. + int nsIndex = m_namespaceUris.GetIndex(ns); + + if (nsIndex < 0) + { + return null; + } + + // create translated node identifier. + NodeId localId = new NodeId(nodeId.Identifier, (ushort)nsIndex); + + // look up node. + Node node = null; + + if (m_nodes.TryGetValue(localId, out node)) + { + return node; + } + + return null; + } + + /// + /// Translates all namespace/server indexes in attributes or references and returns a copy of the node. + /// + /// The node to import. + /// The namespace URIs. + /// The server URIs. + /// Translated copy of the node. + /// + /// Only imports references stored in the References collection. + /// + public Node Copy(Node nodeToImport, NamespaceTable namespaceUris, StringTable serverUris) + { + Node node = Node.Copy(nodeToImport); + + node.NodeId = Translate(nodeToImport.NodeId, namespaceUris, m_namespaceUris); + node.BrowseName = Translate(nodeToImport.BrowseName, namespaceUris, m_namespaceUris); + + VariableNode variableToImport = nodeToImport as VariableNode; + + if (variableToImport != null) + { + VariableNode variable = (VariableNode)node; + + variable.DataType = Translate(variableToImport.DataType, namespaceUris, m_namespaceUris); + + if (variableToImport.Value.Value != null) + { + variable.Value = new Variant(ImportValue(variableToImport.Value.Value, namespaceUris, serverUris)); + } + } + + VariableTypeNode variableTypeToImport = nodeToImport as VariableTypeNode; + + if (variableTypeToImport != null) + { + VariableTypeNode variableType = (VariableTypeNode)node; + + variableType.DataType = Translate(variableTypeToImport.DataType, namespaceUris, m_namespaceUris); + + if (variableTypeToImport.Value.Value != null) + { + variableType.Value = new Variant(ImportValue(variableTypeToImport.Value.Value, namespaceUris, serverUris)); + } + } + + foreach (ReferenceNode referenceToImport in nodeToImport.References) + { + ReferenceNode reference = new ReferenceNode(); + + reference.ReferenceTypeId = Translate(referenceToImport.ReferenceTypeId, namespaceUris, m_namespaceUris); + reference.IsInverse = referenceToImport.IsInverse; + reference.TargetId = Translate(referenceToImport.TargetId, namespaceUris, serverUris, m_namespaceUris, m_serverUris); + + node.References.Add(reference); + } + + return node; + } + + /// + /// Recursively imports any NodeIds or ExpandedNodeIds contained in a value. + /// + /// The value. + /// The namespace URIs. + /// The server URIs. + /// + private object ImportValue(object value, NamespaceTable namespaceUris, StringTable serverUris) + { + Array array = value as Array; + + if (array != null) + { + Type elementType = array.GetType().GetElementType(); + + if (elementType != typeof(NodeId) && elementType != typeof(ExpandedNodeId) && elementType != typeof(object) && elementType != typeof(ExtensionObject)) + { + return array; + } + + Array copy = Array.CreateInstance(elementType, array.Length); + + for (int ii = 0; ii < array.Length; ii++) + { + copy.SetValue(ImportValue(array.GetValue(ii), namespaceUris, serverUris), ii); + } + + return copy; + } + + NodeId nodeId = value as NodeId; + + if (nodeId != null) + { + return Import(nodeId, namespaceUris); + } + + ExpandedNodeId expandedNodeId = value as ExpandedNodeId; + + if (expandedNodeId != null) + { + return Import(expandedNodeId, namespaceUris, serverUris); + } + + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + Argument argument = ExtensionObject.ToEncodeable(extension) as Argument; + + if (argument != null) + { + argument.DataType = Import(argument.DataType, namespaceUris); + } + } + + return value; + } + + /// + /// Updates the nodeset string tables and returns a NodeId that references those tables. + /// + /// The node identifier. + /// The namespace URIs. + /// A NodeId that references those tables. + public NodeId Export(NodeId nodeId, NamespaceTable namespaceUris) + { + return Translate(nodeId, m_namespaceUris, namespaceUris); + } + + /// + /// Updates the specified namespace tables and returns a NodeId that references those tables. + /// + /// The node identifier. + /// The namespace URIs. + /// A NodeId that references those tables. + public NodeId Import(NodeId nodeId, NamespaceTable namespaceUris) + { + return Translate(nodeId, namespaceUris, m_namespaceUris); + } + + /// + /// Updates the nodeset string tables and returns a NodeId that references those tables. + /// + /// The node identifier. + /// The namespace URIs. + /// The server URIs. + /// A NodeId that references those tables. + public ExpandedNodeId Export(ExpandedNodeId nodeId, NamespaceTable namespaceUris, StringTable serverUris) + { + return Translate(nodeId, m_namespaceUris, m_serverUris, namespaceUris, serverUris); + } + + /// + /// Updates the specified string tables and returns a NodeId that references those tables. + /// + /// The node identifier. + /// The namespace URIs. + /// The server URIs. + /// A NodeId that references those tables. + public ExpandedNodeId Import(ExpandedNodeId nodeId, NamespaceTable namespaceUris, StringTable serverUris) + { + return Translate(nodeId, namespaceUris, serverUris, m_namespaceUris, m_serverUris); + } + #endregion + + #region Private Members + /// + /// The table of namespaces. + /// + [DataMember(Name = "NamespaceUris", Order = 1)] + internal StringCollection NamespaceUris + { + get + { + return new StringCollection(m_namespaceUris.ToArray()); + } + + set + { + if (value == null) + { + m_namespaceUris = new NamespaceTable(); + } + else + { + m_namespaceUris = new NamespaceTable(value); + } + } + } + + /// + /// The table of servers. + /// + [DataMember(Name = "ServerUris", Order = 2)] + internal StringCollection ServerUris + { + get + { + return new StringCollection(m_serverUris.ToArray()); + } + + set + { + if (value == null) + { + m_serverUris = new StringTable(); + } + else + { + m_serverUris = new StringTable(value); + } + } + } + + /// + /// The table of nodes. + /// + [DataMember(Name = "Nodes", Order = 3)] + internal NodeCollection Nodes + { + get + { + return new NodeCollection(m_nodes.Values); + } + + set + { + m_nodes = new Dictionary(); + + if (value != null) + { + foreach (Node node in value) + { + m_nodes[node.NodeId] = node; + } + } + } + } + + /// + /// Updates the nodeset string tables and returns a NodeId that references those tables. + /// + /// The node identifier. + /// The target namespace URIs. + /// The source namespace URIs. + /// A NodeId that references those tables. + private static NodeId Translate( + NodeId nodeId, + NamespaceTable targetNamespaceUris, + NamespaceTable sourceNamespaceUris) + { + if (targetNamespaceUris == null) throw new ArgumentNullException(nameof(targetNamespaceUris)); + if (sourceNamespaceUris == null) throw new ArgumentNullException(nameof(sourceNamespaceUris)); + + if (NodeId.IsNull(nodeId)) + { + return nodeId; + } + + ushort namespaceIndex = 0; + + if (nodeId.NamespaceIndex > 0) + { + string uri = sourceNamespaceUris.GetString(nodeId.NamespaceIndex); + + int index = targetNamespaceUris.GetIndex(uri); + + if (index == -1) + { + index = targetNamespaceUris.Append(uri); + } + + namespaceIndex = (ushort)index; + } + + return new NodeId(nodeId.Identifier, namespaceIndex); + } + + /// + /// Updates the nodeset string tables and returns a NodeId that references those tables. + /// + /// The qualified name. + /// The target namespace URIs. + /// The source namespace URIs. + /// A NodeId that references those tables. + private static QualifiedName Translate( + QualifiedName qname, + NamespaceTable targetNamespaceUris, + NamespaceTable sourceNamespaceUris) + { + if (targetNamespaceUris == null) throw new ArgumentNullException(nameof(targetNamespaceUris)); + if (sourceNamespaceUris == null) throw new ArgumentNullException(nameof(sourceNamespaceUris)); + + if (QualifiedName.IsNull(qname)) + { + return qname; + } + + ushort namespaceIndex = 0; + + if (qname.NamespaceIndex > 0) + { + string uri = sourceNamespaceUris.GetString(qname.NamespaceIndex); + + if (uri == null) + { + return qname; + } + + int index = targetNamespaceUris.GetIndex(uri); + + if (index == -1) + { + index = targetNamespaceUris.Append(uri); + } + + namespaceIndex = (ushort)index; + } + + return new QualifiedName(qname.Name, namespaceIndex); + } + + /// + /// Updates the nodeset string tables and returns a NodeId that references those tables. + /// + /// The node identifier. + /// The target namespace URIs. + /// The target server URIs. + /// The source namespace URIs. + /// The source server URIs. + /// A NodeId that references those tables. + private static ExpandedNodeId Translate( + ExpandedNodeId nodeId, + NamespaceTable targetNamespaceUris, + StringTable targetServerUris, + NamespaceTable sourceNamespaceUris, + StringTable sourceServerUris) + { + if (targetNamespaceUris == null) throw new ArgumentNullException(nameof(targetNamespaceUris)); + if (sourceNamespaceUris == null) throw new ArgumentNullException(nameof(sourceNamespaceUris)); + + if (nodeId.ServerIndex > 0) + { + if (targetServerUris == null) throw new ArgumentNullException(nameof(targetServerUris)); + if (sourceServerUris == null) throw new ArgumentNullException(nameof(sourceServerUris)); + } + + if (NodeId.IsNull(nodeId)) + { + return nodeId; + } + + if (!nodeId.IsAbsolute) + { + return Translate((NodeId)nodeId, targetNamespaceUris, sourceNamespaceUris); + } + + string namespaceUri = nodeId.NamespaceUri; + + if (nodeId.ServerIndex > 0) + { + if (String.IsNullOrEmpty(namespaceUri)) + { + namespaceUri = sourceNamespaceUris.GetString(nodeId.NamespaceIndex); + } + + string serverUri = sourceServerUris.GetString(nodeId.ServerIndex); + + int index = targetServerUris.GetIndex(serverUri); + + if (index == -1) + { + index = targetServerUris.Append(serverUri); + } + + return new ExpandedNodeId(new NodeId(nodeId.Identifier, 0), namespaceUri, (uint)index); + } + + ushort namespaceIndex = 0; + + if (!String.IsNullOrEmpty(namespaceUri)) + { + int index = targetNamespaceUris.GetIndex(namespaceUri); + + if (index == -1) + { + index = targetNamespaceUris.Append(namespaceUri); + } + + namespaceIndex = (ushort)index; + } + + return new NodeId(nodeId.Identifier, namespaceIndex); + } + #endregion + + #region Private Fields + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private Dictionary m_nodes; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/NodeTable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/NodeTable.cs new file mode 100644 index 00000000..ef248ccd --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/NodeTable.cs @@ -0,0 +1,917 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// Provides context information to used when evaluating filters. + /// + public interface INodeTable + { + /// + /// The table of Namespace URIs used by the table. + /// + /// The namespace URIs. + NamespaceTable NamespaceUris { get; } + + /// + /// The table of Server URIs used by the table. + /// + /// The server URIs. + StringTable ServerUris { get; } + + /// + /// The type model that describes the nodes in the table. + /// + /// The type tree. + ITypeTable TypeTree { get; } + + /// + /// Returns true if the node is in the table. + /// + /// The node identifier. + /// True if the node is in the table. + bool Exists(ExpandedNodeId nodeId); + + /// + /// Finds a node in the node set. + /// + /// The node identifier. + /// Returns null if the node does not exist. + INode Find(ExpandedNodeId nodeId); + + /// + /// Follows the reference from the source and returns the first target with the specified browse name. + /// + /// The source identifier. + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// Name of the browse. + /// + /// Returns null if the source does not exist or if there is no matching target. + /// + INode Find( + ExpandedNodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName); + + /// + /// Follows the reference from the source and returns all target nodes. + /// + /// The source identifier. + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// + /// Returns an empty list if the source does not exist or if there are no matching targets. + /// + IList Find( + ExpandedNodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes); + } + + /// + /// A table of nodes. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] + public class NodeTable : INodeTable, IEnumerable + { + #region Constructors + /// + /// Initializes the object. + /// + /// The namespace URIs. + /// The server URIs. + /// The type tree. + public NodeTable( + NamespaceTable namespaceUris, + StringTable serverUris, + TypeTable typeTree) + { + m_namespaceUris = namespaceUris; + m_serverUris = serverUris; + m_typeTree = typeTree; + m_localNodes = new NodeIdDictionary(); + m_remoteNodes = new SortedDictionary(); + } + #endregion + + #region INodeTable Methods + /// + /// The table of Namespace URIs used by the table. + /// + /// The namespace URIs. + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + } + + /// + /// The table of Server URIs used by the table. + /// + /// The server URIs. + public StringTable ServerUris + { + get { return m_serverUris; } + } + + /// + /// The type model that describes the nodes in the table. + /// + /// The type tree. + public ITypeTable TypeTree + { + get { return m_typeTree; } + } + + /// + /// Returns true if the node is in the table. + /// + /// The node identifier. + /// + public bool Exists(ExpandedNodeId nodeId) + { + return InternalFind(nodeId) != null; + } + + /// + /// Finds a node in the node set. + /// + /// The node identifier. + /// Returns null if the node does not exist. + public INode Find(ExpandedNodeId nodeId) + { + return InternalFind(nodeId); + } + + /// + /// Follows the reference from the source and returns the first target with the specified browse name. + /// + /// The source identifier. + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// Name of the browse. + /// + /// Returns null if the source does not exist or if there is no matching target. + /// + public INode Find( + ExpandedNodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + QualifiedName browseName) + { + // find the source. + INode source = InternalFind(sourceId); + + if (source == null) + { + return null; + } + + ILocalNode sourceNode = source as ILocalNode; + + // can't follow references for remote nodes. + if (sourceNode == null) + { + return null; + } + + // find the references. + ICollection references = sourceNode.References.Find( + referenceTypeId, + isInverse, + includeSubtypes, + m_typeTree); + + // look for the target. + foreach (IReference reference in references) + { + INode target = InternalFind(reference.TargetId); + + if (target == null) + { + continue; + } + + if (browseName == null) + { + return target; + } + + if (browseName == target.BrowseName) + { + return target; + } + } + + // target not found. + return null; + } + + /// + /// Follows the reference from the source and returns all target nodes. + /// + /// The source identifier. + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// + /// Returns an empty list if the source does not exist or if there are no matching targets. + /// + public IList Find( + ExpandedNodeId sourceId, + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes) + { + // create an empty list. + IList nodes = new List(); + + // find the source. + INode source = InternalFind(sourceId); + + if (source == null) + { + return nodes; + } + + ILocalNode sourceNode = source as ILocalNode; + + // can't follow references for remote nodes. + if (sourceNode == null) + { + return nodes; + } + + // find the references. + ICollection references = sourceNode.References.Find( + referenceTypeId, + isInverse, + includeSubtypes, + m_typeTree); + + // look for the targets. + foreach (IReference reference in references) + { + INode target = InternalFind(reference.TargetId); + + if (target != null) + { + nodes.Add(target); + } + } + + // return list of nodes. + return nodes; + } + #endregion + + #region IEnumerable Members + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + public IEnumerator GetEnumerator() + { + List list = new List(Count); + + foreach (INode node in m_localNodes.Values) + { + list.Add(node); + } + + foreach (INode node in m_remoteNodes.Values) + { + list.Add(node); + } + + return list.GetEnumerator(); + } + #endregion + + #region IEnumerable Members + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + #endregion + + #region Public Methods + /// + /// The number of nodes in the table. + /// + /// The count. + public int Count + { + get + { + return m_localNodes.Count + m_remoteNodes.Count; + } + } + + /// + /// Adds a set of nodes to the table. + /// + /// The node set. + /// The external references. + /// + public List Import(NodeSet nodeSet, IDictionary> externalReferences) + { + List importedNodes = new List(); + + if (nodeSet == null) + { + return importedNodes; + } + + // add the nodes. + foreach (Node nodeToImport in nodeSet.Nodes) + { + // ignore empty nodes. + if (nodeToImport == null || NodeId.IsNull(nodeToImport.NodeId)) + { + continue; + } + + Node node = nodeSet.Copy(nodeToImport, m_namespaceUris, m_serverUris); + + // assign a browse name. + if (QualifiedName.IsNull(node.BrowseName)) + { + node.BrowseName = new QualifiedName(node.NodeId.ToString(), 1); + } + + // assign a display name. + if (LocalizedText.IsNullOrEmpty(node.DisplayName)) + { + node.DisplayName = new LocalizedText(node.BrowseName.Name); + } + + // index references (the node ids in the references were translated by the Copy() call above). + foreach (ReferenceNode reference in node.References) + { + // ignore invalid references. + if (NodeId.IsNull(reference.ReferenceTypeId) || NodeId.IsNull(reference.TargetId)) + { + continue; + } + + // ignore missing targets. + ExpandedNodeId targetId = reference.TargetId; + + if (NodeId.IsNull(targetId)) + { + continue; + } + + // index reference. + node.ReferenceTable.Add(reference.ReferenceTypeId, reference.IsInverse, targetId); + + // see if a remote node needs to be created. + if (targetId.ServerIndex != 0) + { + RemoteNode remoteNode = Find(targetId) as RemoteNode; + + if (remoteNode == null) + { + remoteNode = new RemoteNode(this, targetId); + InternalAdd(remoteNode); + } + + remoteNode.AddRef(); + } + } + + // clear imported references. + node.References.Clear(); + + // add the node. + InternalAdd(node); + importedNodes.Add(node); + } + + // import the nodes. + foreach (Node node in importedNodes) + { + // ignore invalid nodes. + if (node == null || NodeId.IsNull(node.NodeId)) + { + continue; + } + + // add reverse references. + foreach (IReference reference in node.ReferenceTable) + { + Node targetNode = Find(reference.TargetId) as Node; + + if (targetNode == null) + { + if (reference.TargetId.ServerIndex != 0) + { + continue; + } + + // return the reverse reference to a node outside the table. + if (externalReferences != null) + { + NodeId targetId = ExpandedNodeId.ToNodeId(reference.TargetId, m_namespaceUris); + + if (targetId == null) + { + continue; + } + + IList referenceList = null; + + if (!externalReferences.TryGetValue(targetId, out referenceList)) + { + externalReferences[targetId] = referenceList = new List(); + } + + ReferenceNode reverseReference = new ReferenceNode(); + + reverseReference.ReferenceTypeId = reference.ReferenceTypeId; + reverseReference.IsInverse = !reference.IsInverse; + reverseReference.TargetId = node.NodeId; + + referenceList.Add(reverseReference); + } + + continue; + } + + // type definition and modelling rule references are one way. + if (reference.ReferenceTypeId != ReferenceTypeIds.HasTypeDefinition && reference.ReferenceTypeId != ReferenceTypeIds.HasModellingRule) + { + targetNode.ReferenceTable.Add(reference.ReferenceTypeId, !reference.IsInverse, node.NodeId); + } + } + + // see if it is a type. + if (m_typeTree != null) + { + m_typeTree.Add(node); + } + } + + return importedNodes; + } + + /// + /// Creates/updates a node from a ReferenceDescription. + /// + /// The reference. + /// Node + public INode Import(ReferenceDescription reference) + { + // find any existing node. + INode target = Find(reference.NodeId); + + // create a new object. + if (target == null) + { + if (reference.NodeId.ServerIndex != 0) + { + RemoteNode node = new RemoteNode(this, reference.NodeId); + InternalAdd(node); + target = node; + } + else + { + Node node = new Node(); + + node.NodeId = ExpandedNodeId.ToNodeId(reference.NodeId, m_namespaceUris); + + InternalAdd(node); + target = node; + } + } + + // update local node attributes. + Node targetNode = target as Node; + + if (targetNode != null) + { + targetNode.NodeClass = reference.NodeClass; + targetNode.BrowseName = reference.BrowseName; + targetNode.DisplayName = reference.DisplayName; + + if (!NodeId.IsNull(reference.TypeDefinition)) + { + targetNode.ReferenceTable.Add(ReferenceTypeIds.HasTypeDefinition, false, reference.TypeDefinition); + } + + return targetNode; + } + + // update remote node attributes. + RemoteNode remoteNode = target as RemoteNode; + + if (remoteNode != null) + { + remoteNode.NodeClass = reference.NodeClass; + remoteNode.BrowseName = reference.BrowseName; + remoteNode.DisplayName = reference.DisplayName; + remoteNode.TypeDefinitionId = reference.TypeDefinition; + + return remoteNode; + } + + // should never get here. + return null; + } + + /// + /// Adds a node to the table (takes ownership of the object passed in). + /// + /// The node. + /// + /// Any existing node is removed. + /// + public void Attach(ILocalNode node) + { + // remove duplicates. + if (Exists(node.NodeId)) + { + Remove(node.NodeId); + } + + // check if importing a node from a XML source (must copy references from References array to ReferenceTable). + Node serializedNode = node as Node; + + if (serializedNode != null && serializedNode.References.Count > 0 && serializedNode.ReferenceTable.Count == 0) + { + // index references. + foreach (ReferenceNode reference in node.References) + { + // ignore invalid references. + if (NodeId.IsNull(reference.ReferenceTypeId) || NodeId.IsNull(reference.TargetId)) + { + continue; + } + + node.References.Add(reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + + // see if a remote node needs to be created. + if (reference.TargetId.ServerIndex != 0) + { + RemoteNode remoteNode = Find(reference.TargetId) as RemoteNode; + + if (remoteNode == null) + { + remoteNode = new RemoteNode(this, reference.TargetId); + InternalAdd(remoteNode); + } + + remoteNode.AddRef(); + } + } + + // clear unindexed reference list. + node.References.Clear(); + } + + // add the node to the table. + InternalAdd(node); + + // add reverse references. + foreach (IReference reference in node.References) + { + ILocalNode targetNode = Find(reference.TargetId) as ILocalNode; + + if (targetNode == null) + { + continue; + } + + // type definition and modelling rule references are one way. + if (reference.ReferenceTypeId != ReferenceTypeIds.HasTypeDefinition && reference.ReferenceTypeId != ReferenceTypeIds.HasModellingRule) + { + targetNode.References.Add(reference.ReferenceTypeId, !reference.IsInverse, node.NodeId); + } + } + + // see if it is a type. + if (m_typeTree != null) + { + m_typeTree.Add(node); + } + } + + /// + /// Removes node from the table. + /// + /// The node identifier. + /// The result of removal. + public bool Remove(ExpandedNodeId nodeId) + { + // find the target. + INode source = Find(nodeId); + + if (source == null) + { + return false; + } + + ILocalNode sourceNode = source as ILocalNode; + + // can only directly remove local nodes. + if (sourceNode == null) + { + return false; + } + + // remove references. + foreach (IReference reference in sourceNode.References) + { + INode target = InternalFind(reference.TargetId); + + if (target == null) + { + continue; + } + + // remove remote node if nothing else references it. + RemoteNode remoteNode = target as RemoteNode; + + if (remoteNode != null) + { + if (remoteNode.Release() == 0) + { + InternalRemove(remoteNode); + } + + continue; + } + + // remote inverse references. + ILocalNode targetNode = target as ILocalNode; + + if (targetNode != null) + { + targetNode.References.Remove(reference.ReferenceTypeId, reference.IsInverse, sourceNode.NodeId); + } + } + + InternalRemove(sourceNode); + + return true; + } + + /// + /// Removes all references from the table. + /// + public void Clear() + { + m_localNodes.Clear(); + m_remoteNodes.Clear(); + } + #endregion + + #region Private Methods + /// + /// Adds the node to the table. + /// + /// The node. + private void InternalAdd(ILocalNode node) + { + if (node == null || node.NodeId == null) + { + return; + } + + m_localNodes.Add(node.NodeId, node); + } + + /// + /// Removes the node from the table. + /// + /// The node. + private void InternalRemove(ILocalNode node) + { + if (node == null || node.NodeId == null) + { + return; + } + + m_localNodes.Remove(node.NodeId); + } + + /// + /// Adds the remote node to the table. + /// + /// The node. + private void InternalAdd(RemoteNode node) + { + if (node == null || node.NodeId == null) + { + return; + } + + m_remoteNodes[node.NodeId] = node; + } + + /// + /// Removes the remote node from the table. + /// + /// The node. + private void InternalRemove(RemoteNode node) + { + if (node == null || node.NodeId == null) + { + return; + } + + m_remoteNodes.Remove(node.NodeId); + } + + /// + /// Finds the specified node. Returns null if the node does node exist. + /// + /// The node identifier. + /// + private INode InternalFind(ExpandedNodeId nodeId) + { + if (nodeId == null) + { + return null; + } + + // check for remote node. + if (nodeId.ServerIndex != 0) + { + RemoteNode remoteNode = null; + + if (m_remoteNodes.TryGetValue(nodeId, out remoteNode)) + { + return remoteNode; + } + + return null; + } + + + // convert to locale node id. + NodeId localId = ExpandedNodeId.ToNodeId(nodeId, m_namespaceUris); + + if (localId == null) + { + return null; + } + + ILocalNode node = null; + + if (m_localNodes.TryGetValue(localId, out node)) + { + return node; + } + + // node not found. + return null; + } + #endregion + + #region RemoteNode Class + /// + /// Stores information for a node on a remote server. + /// + private class RemoteNode : INode + { + #region Public Interface + /// + /// Initializes the object. + /// + /// The owner. + /// The node identifier. + public RemoteNode(INodeTable owner, ExpandedNodeId nodeId) + { + m_nodeId = nodeId; + m_refs = 0; + m_nodeClass = NodeClass.Unspecified; + m_browseName = new QualifiedName("(Unknown)"); + m_displayName = new LocalizedText(m_browseName.Name); + m_typeDefinitionId = null; + } + + /// + /// Adds a reference to the node. + /// + /// The number of references. + public int AddRef() + { + return ++m_refs; + } + + /// + /// Removes a reference to the node. + /// + /// The number of references. + public int Release() + { + if (m_refs == 0) + { + throw new InvalidOperationException("Cannot decrement reference count below zero."); + } + + return --m_refs; + } + + /// + /// The cached type definition id for the remote node. + /// + /// The type definition identifier. + public ExpandedNodeId TypeDefinitionId + { + get { return m_typeDefinitionId; } + internal set { m_typeDefinitionId = value; } + } + #endregion + + #region INode Members + /// + /// The node identifier. + /// + /// The node identifier. + public ExpandedNodeId NodeId + { + get { return m_nodeId; } + } + + /// + /// The node class. + /// + /// The node class. + public NodeClass NodeClass + { + get { return m_nodeClass; } + internal set { m_nodeClass = value; } + } + + /// + /// The locale independent browse name. + /// + /// The name of the browse. + public QualifiedName BrowseName + { + get { return m_browseName; } + internal set { m_browseName = value; } + } + + /// + /// The localized display name. + /// + /// The display name. + public LocalizedText DisplayName + { + get { return m_displayName; } + internal set { m_displayName = value; } + } + #endregion + + #region Private Fields + private ExpandedNodeId m_nodeId; + private NodeClass m_nodeClass; + private QualifiedName m_browseName; + private LocalizedText m_displayName; + private ExpandedNodeId m_typeDefinitionId; + private int m_refs; + #endregion + } + #endregion + + #region Private Fields + private NodeIdDictionary m_localNodes; + private SortedDictionary m_remoteNodes; + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private TypeTable m_typeTree; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ReferenceTable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ReferenceTable.cs new file mode 100644 index 00000000..0b322851 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ReferenceTable.cs @@ -0,0 +1,1306 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// A reference to a node. + /// + public interface IReference + { + /// + /// The type of reference. + /// + /// The reference type identifier. + NodeId ReferenceTypeId { get; } + + /// + /// True if the reference is an inverse reference. + /// + /// + /// true if this instance is inverse; otherwise, false. + /// + bool IsInverse { get; } + + /// + /// The identifier for the target node. + /// + /// The target identifier. + ExpandedNodeId TargetId { get; } + } + + /// + /// A reference to a node. + /// + public interface IReferenceCollection : ICollection, IEnumerable + { + /// + /// Adds the reference to the node. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The target identifier. + void Add( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId); + + /// + /// Removes the reference from the node. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The target identifier. + /// The result of removal. + bool Remove( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId); + + /// + /// Removes all of the specified references. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The result of removal. + bool RemoveAll( + NodeId referenceTypeId, + bool isInverse); + + /// + /// Checks whether any references which meet the specified critia exist. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The target identifier. + /// if set to true subtypes are included. + /// The type tree. + /// True if reference exists. + bool Exists( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool includeSubtypes, + ITypeTable typeTree); + + /// + /// Returns a list of references which match the specified criteria. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// The type tree. + /// A list of references which match the specified criteria. + IList Find( + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + ITypeTable typeTree); + + /// + /// Returns a single target that meets the specifed criteria. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// The type tree. + /// The index. + /// A single target that meets the specifed criteria. + ExpandedNodeId FindTarget( + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + ITypeTable typeTree, + int index); + + /// + /// Returns a list of references to the specified target. + /// + /// The target identifier. + /// A list of references to the specified target. + IList FindReferencesToTarget(ExpandedNodeId targetId); + } + + /// + /// A table of references for a node. + /// + public class ReferenceCollection : IReferenceCollection, IFormattable + { + #region Constructors + /// + /// Initializes the object. + /// + public ReferenceCollection() + { + m_references = new IReferenceDictionary(); + } + #endregion + + #region IFormattable Members + /// + /// Returns a string representation of the ReferenceCollection. + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + + /// + /// Returns a string representation of the ReferenceCollection. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format != null) + { + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + + return Utils.Format("References {0}", m_references.Count); + } + #endregion + + #region IReferenceCollection Members + /// + /// Adds the reference to the node. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The target identifier. + public void Add(NodeId referenceTypeId, bool isInverse, ExpandedNodeId targetId) + { + m_references[new ReferenceNode(referenceTypeId, isInverse, targetId)] = null; + } + + /// + /// Removes the reference from the node. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The target identifier. + /// The result of removal. + public bool Remove(NodeId referenceTypeId, bool isInverse, ExpandedNodeId targetId) + { + return m_references.Remove(new ReferenceNode(referenceTypeId, isInverse, targetId)); + } + + /// + /// Removes all of the specified references. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The result of removal. + public bool RemoveAll(NodeId referenceTypeId, bool isInverse) + { + return m_references.RemoveAll(referenceTypeId, isInverse); + } + + /// + /// Checks whether any references which meet the specified critia exist. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The target identifier. + /// if set to true subtypes are included. + /// The type tree. + /// True if reference exists. + public bool Exists( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId, + bool includeSubtypes, + ITypeTable typeTree) + { + ReferenceNode reference = new ReferenceNode(referenceTypeId, isInverse, targetId); + + // check for trivial case. + if (m_references.ContainsKey(reference)) + { + return true; + } + + // can't search subtypes without a type tree. + if (!includeSubtypes || typeTree == null) + { + return false; + } + + // check for subtypes. + return m_references.ContainsKey(reference, typeTree); + } + + /// + /// Returns a list of references which match the specified criteria. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// The type tree. + /// A list of references which match the specified criteria. + public IList Find( + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + ITypeTable typeTree) + { + // can't search subtypes without a type tree. + if (!includeSubtypes || typeTree == null) + { + return m_references.Find(referenceTypeId, isInverse); + } + + // check for subtypes. + return m_references.Find(referenceTypeId, isInverse, typeTree); + } + + /// + /// Returns a single target that meets the specifed criteria. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// if set to true subtypes are included. + /// The type tree. + /// The index. + /// A single target that meets the specifed criteria. + public ExpandedNodeId FindTarget( + NodeId referenceTypeId, + bool isInverse, + bool includeSubtypes, + ITypeTable typeTree, + int index) + { + // get the list of matching references. + IList references = null; + + if (!includeSubtypes || typeTree == null) + { + references = m_references.Find(referenceTypeId, isInverse); + } + else + { + references = m_references.Find(referenceTypeId, isInverse, typeTree); + } + + // return the target id. + if (index >= 0 && index < references.Count) + { + return references[index].TargetId; + } + + // not found. + return null; + } + + /// + /// Returns a list of references to the specified target. + /// + /// The target identifier. + /// A list of references to the specified target. + public IList FindReferencesToTarget(ExpandedNodeId targetId) + { + return m_references.FindReferencesToTarget(targetId); + } + #endregion + + #region ICollection Members + /// + public int Count + { + get + { + return m_references.Count; + } + } + + /// + public bool IsReadOnly + { + get { return false; } + } + + /// + public void Add(IReference item) + { + m_references.Add(item, null); + } + + /// + public bool Remove(IReference item) + { + return m_references.Remove(item); + } + + /// + public void Clear() + { + m_references.Clear(); + } + + /// + public bool Contains(IReference item) + { + return m_references.ContainsKey(item); + } + + /// + public void CopyTo(IReference[] array, int arrayIndex) + { + if (array == null) + throw new ArgumentNullException(nameof(array)); + + if (arrayIndex < 0 || arrayIndex >= array.Length) + throw new ArgumentOutOfRangeException(nameof(arrayIndex), "arrayIndex < 0 || arrayIndex >= array.Length"); + + KeyValuePair[] elements = new KeyValuePair[array.Length-arrayIndex]; + m_references.CopyTo(elements, 0); + + for (int ii = 0; ii < elements.Length; ii++) + { + array[arrayIndex+ii] = elements[ii].Key; + } + } + #endregion + + #region IEnumerable Members + /// + public IEnumerator GetEnumerator() + { + return m_references.Keys.GetEnumerator(); + } + #endregion + + #region IEnumerable Members + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + #endregion + + #region Private Fields + private IReferenceDictionary m_references; + #endregion + } + + /// + /// A dictionary designed to provide efficient lookups for references. + /// + public class IReferenceDictionary : IDictionary + { + #region Constructors + /// + /// Creates an empty dictionary. + /// + public IReferenceDictionary() + { + m_version = 0; + m_references = new NodeIdDictionary(); + m_list = new LinkedList>(); + } + #endregion + + #region Public Methods + /// + /// Returns true if the dictionary contains a reference that matches any subtype of the reference type. + /// + /// The reference. + /// The type tree. + /// + /// true if the dictionary contains key; otherwise, false. + /// + public bool ContainsKey( + IReference reference, + ITypeTable typeTree) + { + if (typeTree == null) throw new ArgumentNullException(nameof(typeTree)); + + if (!ValidateReference(reference, false)) + { + return false; + } + + foreach (KeyValuePair entry in m_references) + { + if (typeTree.IsTypeOf(entry.Key, reference.ReferenceTypeId)) + { + if (ContainsKey(entry.Value, reference)) + { + return true; + } + } + } + + return false; + } + + /// + /// Returns a list of references that match the direction and reference type. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// A list of references that match the direction and reference type. + public IList Find( + NodeId referenceTypeId, + bool isInverse) + { + List hits = new List(); + + // check for null. + if (NodeId.IsNull(referenceTypeId)) + { + return hits; + } + + // look up the reference type. + ReferenceTypeEntry entry = null; + + if (!m_references.TryGetValue(referenceTypeId, out entry)) + { + return hits; + } + + // find the references. + Find(entry, isInverse, hits); + + return hits; + } + + /// + /// Returns a list of references that match the direction and are subtypes of the reference type. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The type tree. + /// A list of references that match the direction and are subtypes of the reference type. + public IList Find( + NodeId referenceTypeId, + bool isInverse, + ITypeTable typeTree) + { + if (typeTree == null) throw new ArgumentNullException(nameof(typeTree)); + + List hits = new List(); + + // check for null. + if (NodeId.IsNull(referenceTypeId)) + { + return hits; + } + + foreach (KeyValuePair entry in m_references) + { + if (typeTree.IsTypeOf(entry.Key, referenceTypeId)) + { + Find(entry.Value, isInverse, hits); + } + } + + return hits; + } + + /// + /// Returns a list of references to the specified target. + /// + /// The target identifier. + /// A list of references to the specified target. + public IList FindReferencesToTarget(ExpandedNodeId targetId) + { + List hits = new List(); + + // check for null. + if (NodeId.IsNull(targetId)) + { + return hits; + } + + // go throw list of references. + for (LinkedListNode> node = m_list.First; node != null; node = node.Next) + { + if (node.Value.Key.TargetId == targetId) + { + hits.Add(node.Value.Key); + } + } + + return hits; + } + + /// + /// Removes all of the references of the specified type and direction. + /// + /// The reference type identifier. + /// if set to true this is inverse reference. + /// The result of removal. + public bool RemoveAll(NodeId referenceTypeId, bool isInverse) + { + // check for null. + if (NodeId.IsNull(referenceTypeId)) + { + return false; + } + + // look up the reference type. + ReferenceTypeEntry entry = null; + + if (!m_references.TryGetValue(referenceTypeId, out entry)) + { + return false; + } + + if (isInverse) + { + if (entry.InverseTargets != null) + { + foreach (LinkedListNode> node in entry.InverseTargets.Values) + { + if (Object.ReferenceEquals(m_list, node.List)) + { + m_list.Remove(node); + } + + entry.InverseTargets = null; + } + } + + if (entry.InverseExternalTargets != null) + { + foreach (LinkedListNode> node in entry.InverseExternalTargets.Values) + { + if (Object.ReferenceEquals(m_list, node.List)) + { + m_list.Remove(node); + } + } + + entry.InverseExternalTargets = null; + } + } + else + { + if (entry.ForwardTargets != null) + { + foreach (LinkedListNode> node in entry.ForwardTargets.Values) + { + if (Object.ReferenceEquals(m_list, node.List)) + { + m_list.Remove(node); + } + } + + entry.ForwardTargets = null; + } + + if (entry.ForwardExternalTargets != null) + { + foreach (LinkedListNode> node in entry.ForwardExternalTargets.Values) + { + if (Object.ReferenceEquals(m_list, node.List)) + { + m_list.Remove(node); + } + } + + entry.ForwardExternalTargets = null; + } + } + + // check for empty set. + if (entry.IsEmpty) + { + m_references.Remove(referenceTypeId); + } + + return true; + } + #endregion + + #region IDictionary Members + /// + public void Add(IReference key, T value) + { + Add(key, value, false); + } + + /// + public bool ContainsKey(IReference key) + { + KeyValuePair target; + + if (!TryGetEntry(key, out target)) + { + return false; + } + + return true; + } + + /// + public ICollection Keys + { + get + { + List keys = new List(); + + for (LinkedListNode> node = m_list.First; node != null; node = node.Next) + { + keys.Add(node.Value.Key); + } + + return keys; + } + } + + /// + public bool Remove(IReference key) + { + // validate key. + if (!ValidateReference(key, false)) + { + return false; + } + + m_version++; + + // look up the reference type. + ReferenceTypeEntry entry = null; + + if (!m_references.TryGetValue(key.ReferenceTypeId, out entry)) + { + return false; + } + + // handle reference to external targets. + if (key.TargetId.IsAbsolute) + { + Dictionary>> targets = null; + + if (key.IsInverse) + { + targets = entry.InverseExternalTargets; + } + else + { + targets = entry.ForwardExternalTargets; + } + + if (targets == null) + { + return false; + } + + LinkedListNode> node; + + if (!targets.TryGetValue(key.TargetId, out node)) + { + return false; + } + + m_list.Remove(node); + targets.Remove(key.TargetId); + } + + // handle reference to internal target. + else + { + NodeIdDictionary>> targets = null; + + if (key.IsInverse) + { + targets = entry.InverseTargets; + } + else + { + targets = entry.ForwardTargets; + } + + if (targets == null) + { + return false; + } + + LinkedListNode> node; + + if (!targets.TryGetValue((NodeId)key.TargetId, out node)) + { + return false; + } + + m_list.Remove(node); + targets.Remove((NodeId)key.TargetId); + } + + // remove empty reference. + if (entry.IsEmpty) + { + m_references.Remove(key.ReferenceTypeId); + } + + return true; + } + + /// + public bool TryGetValue(IReference key, out T value) + { + value = default(T); + + KeyValuePair target; + + if (!TryGetEntry(key, out target)) + { + return false; + } + + value = target.Value; + return true; + } + + + /// + public ICollection Values + { + get + { + List values = new List(); + + for (LinkedListNode> node = m_list.First; node != null; node = node.Next) + { + values.Add(node.Value.Value); + } + + return values; + } + } + + /// + /// Gets or sets the value with the specified NodeId. + /// + /// The value with the specified NodeId. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] + public T this[IReference key] + { + get + { + ValidateReference(key, true); + + KeyValuePair target; + + if (!TryGetEntry(key, out target)) + { + throw new KeyNotFoundException(); + } + + return target.Value; + } + + set + { + Add(key, value, true); + } + } + #endregion + + #region ICollection> Members + /// + public void Add(KeyValuePair item) + { + Add(item.Key, item.Value); + } + + /// + public void Clear() + { + m_version++; + m_references.Clear(); + m_list.Clear(); + } + + /// + public bool Contains(KeyValuePair item) + { + KeyValuePair target; + + if (!TryGetEntry(item.Key, out target)) + { + return false; + } + + return Object.Equals(target.Value, item.Value); + } + + /// + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + m_list.CopyTo(array, arrayIndex); + } + + /// + public int Count + { + get + { + return m_list.Count; + } + } + + /// + public bool IsReadOnly + { + get { return false; } + } + + /// + public bool Remove(KeyValuePair item) + { + return Remove(item.Key); + } + #endregion + + #region IEnumerable> Members + /// + public IEnumerator> GetEnumerator() + { + return m_list.GetEnumerator(); + } + #endregion + + #region IEnumerable Members + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + #endregion + + #region Private Methods + #region ReferenceTypeEntry Class + /// + /// Stores the references for a particular reference type. + /// + private class ReferenceTypeEntry + { + public NodeIdDictionary>> ForwardTargets; + public Dictionary>> ForwardExternalTargets; + public NodeIdDictionary>> InverseTargets; + public Dictionary>> InverseExternalTargets; + + /// + /// Whether the entry is empty. + /// + /// true if this instance is empty; otherwise, false. + public bool IsEmpty + { + get + { + if (ForwardTargets != null && ForwardTargets.Count > 0) + { + return false; + } + + if (ForwardExternalTargets != null && ForwardExternalTargets.Count > 0) + { + return false; + } + + if (InverseTargets != null && InverseTargets.Count > 0) + { + return false; + } + + if (InverseExternalTargets != null && InverseExternalTargets.Count > 0) + { + return false; + } + + return true; + } + } + } + #endregion + + /// + /// Validates a reference passed as a parameter. + /// + /// The key. + /// if set to true [throw on error]. + /// The result of the validation. + private static bool ValidateReference(IReference key, bool throwOnError) + { + if (key == null) + { + if (throwOnError) + { + throw new ArgumentNullException(nameof(key), "IReference must not be null."); + } + + return false; + } + + if (NodeId.IsNull(key.ReferenceTypeId)) + { + if (throwOnError) + { + throw new ArgumentNullException(nameof(key), "IReference does not have a valid ReferenceTypeId."); + } + + return false; + } + + if (NodeId.IsNull(key.TargetId)) + { + if (throwOnError) + { + throw new ArgumentNullException(nameof(key), "IReference does not have a valid TargetId."); + } + + return false; + } + + return true; + } + + /// + /// Returns the target entry associated with the reference. + /// + /// The key. + /// The value. + /// The target entry associated with the reference. + private bool TryGetEntry(IReference key, out KeyValuePair value) + { + value = new KeyValuePair(); + + // validate key. + if (!ValidateReference(key, false)) + { + return false; + } + + // look up the reference type. + ReferenceTypeEntry entry = null; + + if (!m_references.TryGetValue(key.ReferenceTypeId, out entry)) + { + return false; + } + + // handle reference to external targets. + if (key.TargetId.IsAbsolute) + { + Dictionary>> targets = null; + + if (key.IsInverse) + { + targets = entry.InverseExternalTargets; + } + else + { + targets = entry.ForwardExternalTargets; + } + + if (targets == null) + { + return false; + } + + LinkedListNode> node; + + if (targets.TryGetValue(key.TargetId, out node)) + { + value = node.Value; + return true; + } + } + + // handle reference to internal target. + else + { + NodeIdDictionary>> targets = null; + + if (key.IsInverse) + { + targets = entry.InverseTargets; + } + else + { + targets = entry.ForwardTargets; + } + + if (targets == null) + { + return false; + } + + LinkedListNode> node; + + if (targets.TryGetValue((NodeId)key.TargetId, out node)) + { + value = node.Value; + return true; + } + } + + return false; + } + + /// + /// Adds or replaces a reference. + /// + /// The key. + /// The value. + /// if set to true reference is replaced. + private void Add(IReference key, T value, bool replace) + { + // validate key. + ValidateReference(key, true); + + m_version++; + + // look up the reference type. + ReferenceTypeEntry entry = null; + + if (!m_references.TryGetValue(key.ReferenceTypeId, out entry)) + { + entry = new ReferenceTypeEntry(); + m_references.Add(key.ReferenceTypeId, entry); + } + + // handle reference to external targets. + if (key.TargetId.IsAbsolute) + { + Dictionary>> targets = null; + + if (key.IsInverse) + { + if (entry.InverseExternalTargets == null) + { + entry.InverseExternalTargets = new Dictionary>>(); + } + + targets = entry.InverseExternalTargets; + } + else + { + if (entry.ForwardExternalTargets == null) + { + entry.ForwardExternalTargets = new Dictionary>>(); + } + + targets = entry.ForwardExternalTargets; + } + + // create a new target. + LinkedListNode> node = new LinkedListNode>(new KeyValuePair(key, value)); + + // check if target already exists. + LinkedListNode> existingNode = null; + + if (!targets.TryGetValue(key.TargetId, out existingNode)) + { + existingNode = node; + m_list.AddLast(node); + } + + // need to replace reference in linked linked as well as the target list. + else + { + if (!replace) + { + throw new ArgumentException("Key already exists in dictionary.", nameof(key)); + } + + m_list.AddAfter(existingNode, node); + m_list.Remove(existingNode); + } + + targets[key.TargetId] = node; + } + + // handle reference to internal target. + else + { + NodeIdDictionary>> targets = null; + + if (key.IsInverse) + { + if (entry.InverseTargets == null) + { + entry.InverseTargets = new NodeIdDictionary>>(); + } + + targets = entry.InverseTargets; + } + else + { + if (entry.ForwardTargets == null) + { + entry.ForwardTargets = new NodeIdDictionary>>(); + } + + targets = entry.ForwardTargets; + } + + NodeId targetId = (NodeId)key.TargetId; + + // create a new target. + LinkedListNode> node = new LinkedListNode>(new KeyValuePair(key, value)); + + // check if target already exists. + LinkedListNode> existingNode = null; + + if (!targets.TryGetValue(targetId, out existingNode)) + { + existingNode = node; + m_list.AddLast(node); + } + + // need to replace reference in linked linked as well as the target list. + else + { + if (!replace) + { + throw new ArgumentException("Key already exists in dictionary.", nameof(key)); + } + + m_list.AddAfter(existingNode, node); + m_list.Remove(existingNode); + } + + targets[targetId] = node; + } + } + + /// + /// Checks the isInverse flag are returns true if a specified target exists. + /// + /// The entry. + /// The reference. + /// + /// true if the specified entry contains key; otherwise, false. + /// + private static bool ContainsKey(ReferenceTypeEntry entry, IReference reference) + { + // handle reference to external targets. + if (reference.TargetId.IsAbsolute) + { + Dictionary>> targets = null; + + if (reference.IsInverse) + { + targets = entry.InverseExternalTargets; + } + else + { + targets = entry.ForwardExternalTargets; + } + + if (targets == null) + { + return false; + } + + return targets.ContainsKey(reference.TargetId); + } + + // handle reference to internal target. + else + { + NodeIdDictionary>> targets = null; + + if (reference.IsInverse) + { + targets = entry.InverseTargets; + } + else + { + targets = entry.ForwardTargets; + } + + if (targets == null) + { + return false; + } + + return targets.ContainsKey((NodeId)reference.TargetId); + } + } + + /// + /// Add references to a list that match the criteria. + /// + /// The entry. + /// if set to true this is inverse reference. + /// The hits. + private static void Find( + ReferenceTypeEntry entry, + bool isInverse, + List hits) + { + if (isInverse) + { + if (entry.InverseTargets != null) + { + foreach (LinkedListNode> target in entry.InverseTargets.Values) + { + hits.Add(target.Value.Key); + } + } + + if (entry.InverseExternalTargets != null) + { + foreach (LinkedListNode> target in entry.InverseExternalTargets.Values) + { + hits.Add(target.Value.Key); + } + } + } + else + { + if (entry.ForwardTargets != null) + { + foreach (LinkedListNode> target in entry.ForwardTargets.Values) + { + hits.Add(target.Value.Key); + } + } + + if (entry.ForwardExternalTargets != null) + { + foreach (LinkedListNode> target in entry.ForwardExternalTargets.Values) + { + hits.Add(target.Value.Key); + } + } + } + } + #endregion + + #region Private Fields + private NodeIdDictionary m_references; + private LinkedList> m_list; + private ulong m_version; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/TypeTable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/TypeTable.cs new file mode 100644 index 00000000..6e193632 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/TypeTable.cs @@ -0,0 +1,846 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// Stores the type tree for a server. + /// + public class TypeTable : ITypeTable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + /// The namespace URIs. + public TypeTable(NamespaceTable namespaceUris) + { + m_namespaceUris = namespaceUris; + m_referenceTypes = new SortedDictionary(); + m_nodes = new NodeIdDictionary(); + m_encodings = new NodeIdDictionary(); + } + #endregion + + #region ITypeTable Methods + /// + public bool IsKnown(ExpandedNodeId typeId) + { + if (NodeId.IsNull(typeId) || typeId.ServerIndex != 0) + { + return false; + } + + NodeId localId = ExpandedNodeId.ToNodeId(typeId, m_namespaceUris); + + if (localId == null) + { + return false; + } + + lock (m_lock) + { + return m_nodes.ContainsKey(localId); + } + } + + /// + public bool IsKnown(NodeId typeId) + { + if (NodeId.IsNull(typeId)) + { + return false; + } + + lock (m_lock) + { + return m_nodes.ContainsKey(typeId); + } + } + + /// + public NodeId FindSuperType(ExpandedNodeId typeId) + { + if (NodeId.IsNull(typeId) || typeId.ServerIndex != 0) + { + return NodeId.Null; + } + + NodeId localId = ExpandedNodeId.ToNodeId(typeId, m_namespaceUris); + + if (localId == null) + { + return NodeId.Null; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(localId, out typeInfo)) + { + return NodeId.Null; + } + + if (typeInfo.SuperType != null) + { + return typeInfo.SuperType.NodeId; + } + + return NodeId.Null; + } + } + + /// + public NodeId FindSuperType(NodeId typeId) + { + if (typeId == null) + { + return NodeId.Null; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(typeId, out typeInfo)) + { + return NodeId.Null; + } + + if (typeInfo.SuperType != null) + { + return typeInfo.SuperType.NodeId; + } + + return NodeId.Null; + } + } + + /// + public IList FindSubTypes(ExpandedNodeId typeId) + { + List subtypes = new List(); + + if (typeId == null) + { + return subtypes; + } + + NodeId localId = ExpandedNodeId.ToNodeId(typeId, m_namespaceUris); + + if (localId == null) + { + return subtypes; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (m_nodes.TryGetValue(localId, out typeInfo)) + { + typeInfo.GetSubtypes(subtypes); + } + + return subtypes; + } + } + + /// + public bool IsTypeOf(ExpandedNodeId subTypeId, ExpandedNodeId superTypeId) + { + if (NodeId.IsNull(subTypeId) || subTypeId.ServerIndex != 0) + { + return false; + } + + if (NodeId.IsNull(superTypeId) || superTypeId.ServerIndex != 0) + { + return false; + } + + // check for exact match. + if (subTypeId == superTypeId) + { + return true; + } + + NodeId startId = ExpandedNodeId.ToNodeId(subTypeId, m_namespaceUris); + + if (startId == null) + { + return false; + } + + NodeId targetId = ExpandedNodeId.ToNodeId(superTypeId, m_namespaceUris); + + if (targetId == null) + { + return false; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(startId, out typeInfo)) + { + return false; + } + + return typeInfo.IsTypeOf(targetId); + } + } + + /// + public bool IsTypeOf(NodeId subTypeId, NodeId superTypeId) + { + // check for null. + if (subTypeId == null || superTypeId == null) + { + return false; + } + + // check for exact match. + if (subTypeId == superTypeId) + { + return true; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(subTypeId, out typeInfo)) + { + return false; + } + + return typeInfo.IsTypeOf(superTypeId); + } + } + + + /// + public QualifiedName FindReferenceTypeName(NodeId referenceTypeId) + { + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(referenceTypeId, out typeInfo)) + { + return null; + } + + return typeInfo.BrowseName; + } + } + + /// + public NodeId FindReferenceType(QualifiedName browseName) + { + // check for empty name. + if (QualifiedName.IsNull(browseName)) + { + return null; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_referenceTypes.TryGetValue(browseName, out typeInfo)) + { + return null; + } + + return typeInfo.NodeId; + } + } + + /// + public bool IsEncodingOf(ExpandedNodeId encodingId, ExpandedNodeId datatypeId) + { + // check for invalid ids. + if (NodeId.IsNull(encodingId) || NodeId.IsNull(datatypeId)) + { + return false; + } + + NodeId localId = ExpandedNodeId.ToNodeId(encodingId, m_namespaceUris); + + if (localId == null) + { + return false; + } + + NodeId localTypeId = ExpandedNodeId.ToNodeId(datatypeId, m_namespaceUris); + + if (localTypeId == null) + { + return false; + } + + lock (m_lock) + { + // lookup the immediate basetype of the subtype. + TypeInfo typeInfo = null; + + if (!m_encodings.TryGetValue(localId, out typeInfo)) + { + return false; + } + + // the encoding is a representation of the expected datatype id. + if (localTypeId == typeInfo.NodeId) + { + return true; + } + + // check if the encoding is a representation of a subtype of the expected datatype id. + TypeInfo superTypeInfo = typeInfo.SuperType; + + while (superTypeInfo != null) + { + if (!superTypeInfo.Deleted && superTypeInfo.NodeId == localTypeId) + { + return true; + } + + superTypeInfo = superTypeInfo.SuperType; + } + + // no match. + return false; + } + } + + /// + public bool IsEncodingFor(NodeId expectedTypeId, ExtensionObject value) + { + // no match on null values. + if (value == null) + { + return false; + } + + // may still match if the extension type is an encoding for the expected type. + if (IsEncodingOf(value.TypeId, expectedTypeId)) + { + return true; + } + + // no match. + return false; + } + + /// + public bool IsEncodingFor(NodeId expectedTypeId, object value) + { + // null actual datatype matches nothing. + if (value == null) + { + return false; + } + + // null expected datatype matches everything. + if (NodeId.IsNull(expectedTypeId)) + { + return true; + } + + // get the actual datatype. + NodeId actualTypeId = Opc.Ua.TypeInfo.GetDataTypeId(value); + + // value is valid if the expected datatype is same as or a supertype of the actual datatype + // for example: expected datatype of 'Integer' matches an actual datatype of 'UInt32'. + if (IsTypeOf(actualTypeId, expectedTypeId)) + { + return true; + } + + // allow matches non-structure values where the actual datatype is a supertype of the expected datatype. + // for example: expected datatype of 'UtcTime' matches an actual datatype of 'DateTime'. + if (actualTypeId != DataTypeIds.Structure) + { + return IsTypeOf(expectedTypeId, actualTypeId); + } + + // for structure types must try to determine the subtype. + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + return IsEncodingFor(expectedTypeId, extension); + } + + // every element in an array must match. + ExtensionObject[] extensions = value as ExtensionObject[]; + + if (extensions != null) + { + for (int ii = 0; ii < extensions.Length; ii++) + { + if (!IsEncodingFor(expectedTypeId, extensions[ii])) + { + return false; + } + } + + return true; + } + + // can only get here if the value is an unrecognized data type. + return false; + } + + /// + public NodeId FindDataTypeId(ExpandedNodeId encodingId) + { + NodeId localId = ExpandedNodeId.ToNodeId(encodingId, m_namespaceUris); + + if (localId == null) + { + return NodeId.Null; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_encodings.TryGetValue(localId, out typeInfo)) + { + return NodeId.Null; + } + + return typeInfo.NodeId; + } + } + + /// + public NodeId FindDataTypeId(NodeId encodingId) + { + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_encodings.TryGetValue(encodingId, out typeInfo)) + { + return NodeId.Null; + } + + return typeInfo.NodeId; + } + } + #endregion + + #region Public Methods + /// + /// Removes all types from the tree. + /// + public void Clear() + { + lock (m_lock) + { + m_nodes.Clear(); + m_encodings.Clear(); + m_referenceTypes.Clear(); + } + } + + /// + /// Adds a node to the type table if it is a type and does not already exist. If it exists references are updated. + /// + /// The node. + public void Add(ILocalNode node) + { + // ignore null. + if (node == null || NodeId.IsNull(node.NodeId)) + { + return; + } + + // ignore non-types. + if ((node.NodeClass & (NodeClass.ObjectType | NodeClass.VariableType | NodeClass.ReferenceType | NodeClass.DataType)) == 0) + { + return; + } + + NodeId localsuperTypeId = null; + + // find the supertype. + ExpandedNodeId superTypeId = node.References.FindTarget(ReferenceTypeIds.HasSubtype, true, false, null, 0); + + if (superTypeId != null) + { + localsuperTypeId = ExpandedNodeId.ToNodeId(superTypeId, m_namespaceUris); + + if (localsuperTypeId == null) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "A valid supertype identifier is required."); + } + } + + lock (m_lock) + { + // lookup the supertype. + TypeInfo superTypeInfo = null; + + if (localsuperTypeId != null) + { + if (!m_nodes.TryGetValue(localsuperTypeId, out superTypeInfo)) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "A valid supertype identifier is required."); + } + } + + // create the type info. + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(node.NodeId, out typeInfo)) + { + typeInfo = new TypeInfo(); + m_nodes.Add(node.NodeId, typeInfo); + } + + // update the info. + typeInfo.NodeId = node.NodeId; + typeInfo.SuperType = superTypeInfo; + typeInfo.Deleted = false; + + // add to supertype. + if (superTypeInfo != null) + { + superTypeInfo.AddSubType(typeInfo); + } + + // remove the encodings. + if (typeInfo.Encodings != null) + { + foreach (NodeId encoding in typeInfo.Encodings) + { + m_encodings.Remove(encoding); + } + } + + // any new encodings. + IList encodings = node.References.Find(ReferenceTypeIds.HasEncoding, false, false, null); + + if (encodings.Count > 0) + { + typeInfo.Encodings = new NodeId[encodings.Count]; + + for (int ii = 0; ii < encodings.Count; ii++) + { + typeInfo.Encodings[ii] = ExpandedNodeId.ToNodeId(encodings[ii].TargetId, m_namespaceUris); + m_encodings[typeInfo.Encodings[ii]] = typeInfo; + } + } + + // add reference type. + if ((node.NodeClass & NodeClass.ReferenceType) != 0) + { + if (!QualifiedName.IsNull(typeInfo.BrowseName)) + { + m_referenceTypes.Remove(typeInfo.BrowseName); + } + + typeInfo.BrowseName = node.BrowseName; + + m_referenceTypes[node.BrowseName] = typeInfo; + } + } + } + + /// + /// Adds type to the table. A browse name is only required if it is a ReferenceType. + /// + /// The sub type identifier. + /// The super type identifier. + /// + /// Updates the any existing entry. + /// + public void AddSubtype(NodeId subTypeId, NodeId superTypeId) + { + AddSubtype(subTypeId, superTypeId, null); + } + + /// + /// Adds type to the table. A browse name is only required if it is a ReferenceType. + /// + /// The sub type identifier. + /// The super type identifier. + /// Name of the browse. + /// + /// Updates the any existing entry. + /// + public void AddReferenceSubtype(NodeId subTypeId, NodeId superTypeId, QualifiedName browseName) + { + AddSubtype(subTypeId, superTypeId, browseName); + } + + /// + /// Adds an encoding for an existing data type. + /// + public bool AddEncoding(NodeId dataTypeId, ExpandedNodeId encodingId) + { + NodeId localId = ExpandedNodeId.ToNodeId(encodingId, m_namespaceUris); + + if (localId == null) + { + return false; + } + + lock (m_lock) + { + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(dataTypeId, out typeInfo)) + { + return false; + } + + if (typeInfo.Encodings == null) + { + typeInfo.Encodings = new NodeId[] { localId }; + } + else + { + NodeId[] encodings = new NodeId[typeInfo.Encodings.Length + 1]; + System.Array.Copy(typeInfo.Encodings, encodings, typeInfo.Encodings.Length); + encodings[encodings.Length - 1] = localId; + typeInfo.Encodings = encodings; + } + + m_encodings[localId] = typeInfo; + return true; + } + } + + /// + /// Adds type to the table. A browse name is only required if it is a ReferenceType. + /// + /// The sub type identifier. + /// The super type identifier. + /// Name of the browse. + /// + /// Updates the any existing entry. + /// + private void AddSubtype(NodeId subTypeId, NodeId superTypeId, QualifiedName browseName) + { + lock (m_lock) + { + // lookup the supertype. + TypeInfo superTypeInfo = null; + + if (!NodeId.IsNull(superTypeId)) + { + if (!m_nodes.TryGetValue(superTypeId, out superTypeInfo)) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "A valid supertype identifier is required."); + } + } + + // create the type info. + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(subTypeId, out typeInfo)) + { + typeInfo = new TypeInfo(); + m_nodes.Add(subTypeId, typeInfo); + } + + // update the info. + typeInfo.NodeId = subTypeId; + typeInfo.SuperType = superTypeInfo; + typeInfo.Deleted = false; + + // add to supertype. + if (superTypeInfo != null) + { + superTypeInfo.AddSubType(typeInfo); + } + + // remove the encodings. + if (typeInfo.Encodings != null) + { + foreach (NodeId encoding in typeInfo.Encodings) + { + m_encodings.Remove(encoding); + } + } + + // add reference type. + if (!QualifiedName.IsNull(browseName)) + { + typeInfo.BrowseName = browseName; + m_referenceTypes[browseName] = typeInfo; + } + } + } + /// + /// Removes a subtype. + /// + /// The type identifier. + public void Remove(ExpandedNodeId typeId) + { + if (NodeId.IsNull(typeId) || typeId.ServerIndex != 0) + { + return; + } + + NodeId localId = ExpandedNodeId.ToNodeId(typeId, m_namespaceUris); + + if (localId == null) + { + return; + } + + lock (m_lock) + { + // remove type. + TypeInfo typeInfo = null; + + if (!m_nodes.TryGetValue(localId, out typeInfo)) + { + return; + } + + m_nodes.Remove(localId); + + // setting the flag to deleted ensures references from subtypes are not broken. + typeInfo.Deleted = true; + + // remove from subtype list. + if (typeInfo.SuperType != null) + { + typeInfo.SuperType.RemoveSubType(localId); + } + + // remove encodings. + if (typeInfo.Encodings != null) + { + for (int ii = 0; ii < typeInfo.Encodings.Length; ii++) + { + m_encodings.Remove(typeInfo.Encodings[ii]); + } + } + + // remove reference type. + if (!QualifiedName.IsNull(typeInfo.BrowseName)) + { + m_referenceTypes.Remove(typeInfo.BrowseName); + } + } + } + #endregion + + #region TypeInfo Class + /// + /// Stores the information about an indexed type. + /// + private class TypeInfo + { + public bool Deleted; + public NodeId NodeId; + public QualifiedName BrowseName; + public TypeInfo SuperType; + public NodeId[] Encodings; + public NodeIdDictionary SubTypes; + + /// + /// Checks if the type is a subtype of the specified node. + /// + /// The node identifier. + /// + /// true if this node is type of the specified NodeId otherwise, false. + /// + public bool IsTypeOf(NodeId nodeId) + { + TypeInfo typeInfo = SuperType; + + while (typeInfo != null) + { + if (!typeInfo.Deleted && typeInfo.NodeId == nodeId) + { + return true; + } + + typeInfo = typeInfo.SuperType; + } + + return false; + } + + /// + /// Adds a subtype to the object. + /// + /// The subtype + public void AddSubType(TypeInfo subType) + { + if (subType != null) + { + if (SubTypes == null) + { + SubTypes = new NodeIdDictionary(); + } + + SubTypes[subType.NodeId] = subType; + } + } + + /// + /// Remove subtype. + /// + /// The subtype identifier. + public void RemoveSubType(NodeId subtypeId) + { + if (subtypeId != null && SubTypes != null) + { + SubTypes.Remove(subtypeId); + + if (SubTypes.Count == 0) + { + SubTypes = null; + } + } + } + + /// + /// Adds the subtypes to the list. + /// + /// The node identifiers. + public void GetSubtypes(List nodeIds) + { + if (SubTypes == null) + { + return; + } + + nodeIds.AddRange(SubTypes.Keys); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private NamespaceTable m_namespaceUris; + private SortedDictionary m_referenceTypes; + private NodeIdDictionary m_nodes; + private NodeIdDictionary m_encodings; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ViewTable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ViewTable.cs new file mode 100644 index 00000000..6079d3e3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Nodes/ViewTable.cs @@ -0,0 +1,174 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// The table of all reference types known to the server. + /// + /// This class is thread safe. + public class ViewTable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public ViewTable() + { + m_views = new Dictionary(); + } + #endregion + + #region Public Methods + /// + /// Determines whether a node id is a valid view id. + /// + /// The description. + /// + /// true if the specified description is valid; otherwise, false. + /// + public bool IsValid(ViewDescription description) + { + if (ViewDescription.IsDefault(description)) + { + return true; + } + + lock (m_lock) + { + return m_views.ContainsKey(description.ViewId); + } + } + + /// + /// Determines whether a node is in a view. + /// + /// The description. + /// The node id. + /// + /// true whether a node is in a view; otherwise, false. + /// + public bool IsNodeInView(ViewDescription description, NodeId nodeId) + { + // everything is in the default view. + if (ViewDescription.IsDefault(description)) + { + return true; + } + + lock (m_lock) + { + ViewNode view = null; + + if (m_views.TryGetValue(description.ViewId, out view)) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + return false; + } + } + + /// + /// Determines whether a reference is in a view. + /// + /// The description. + /// The reference. + /// + /// true whether a reference is in a view; otherwise, false. + /// + public bool IsReferenceInView(ViewDescription description, ReferenceDescription reference) + { + // everything is in the default view. + if (ViewDescription.IsDefault(description)) + { + return true; + } + + lock (m_lock) + { + ViewNode view = null; + + if (m_views.TryGetValue(description.ViewId, out view)) + { + throw new ServiceResultException(StatusCodes.BadViewIdUnknown); + } + + return false; + } + } + + /// + /// Adds a view to the table. + /// + /// The view. + public void Add(ViewNode view) + { + if (view == null) throw new ArgumentNullException(nameof(view)); + + if (NodeId.IsNull(view.NodeId)) + { + throw new ServiceResultException( + StatusCodes.BadNodeIdInvalid, + Utils.Format("A view may not have a null node id.")); + } + + lock (m_lock) + { + // check for duplicate id. + if (m_views.ContainsKey(view.NodeId)) + { + throw new ServiceResultException( + StatusCodes.BadNodeIdExists, + Utils.Format("A view with the node id '{0}' already exists.", view.NodeId)); + } + + // save view. + m_views.Add(view.NodeId, view); + } + } + + /// + /// Removes a view from the table. + /// + /// The view identifier. + public void Remove(NodeId viewId) + { + if (NodeId.IsNull(viewId)) throw new ArgumentNullException(nameof(viewId)); + + lock (m_lock) + { + // find view. + ViewNode view = null; + + if (!m_views.TryGetValue(viewId, out view)) + { + throw new ServiceResultException( + StatusCodes.BadViewIdUnknown, + Utils.Format("A reference type with the node id '{0}' does not exist.", viewId)); + } + + // remove view node. + m_views.Remove(viewId); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private Dictionary m_views; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/ClientAccessPolicy.xml b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/ClientAccessPolicy.xml new file mode 100644 index 00000000..ed96fbde --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/ClientAccessPolicy.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/EndpointBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/EndpointBase.cs new file mode 100644 index 00000000..f97f6fe9 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/EndpointBase.cs @@ -0,0 +1,902 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.ServiceModel; +using System.ServiceModel.Channels; +using System.Threading; +using Opc.Ua.Bindings; + +namespace Opc.Ua +{ + /// + /// A base class for UA endpoints. + /// + public abstract class EndpointBase : IEndpointBase, ITransportListenerCallback + { + #region Constructors + /// + /// Initializes the object when it is created by the WCF framework. + /// + protected EndpointBase() + { + SupportedServices = new Dictionary(); + + try + { + m_host = GetHostForContext(); + m_server = GetServerForContext(); + + MessageContext = m_server.MessageContext; + + EndpointDescription = GetEndpointDescription(); + } + catch (Exception e) + { + ServerError = new ServiceResult(e); + EndpointDescription = null; + + m_host = null; + m_server = null; + } + } + + /// + /// Initializes the when it is created directly. + /// + /// The host. + protected EndpointBase(IServiceHostBase host) + { + if (host == null) throw new ArgumentNullException(nameof(host)); + + m_host = host; + m_server = host.Server; + + SupportedServices = new Dictionary(); + } + + /// + /// Initializes the endpoint with a server instead of a host. + /// + protected EndpointBase(ServerBase server) + { + if (server == null) throw new ArgumentNullException(nameof(server)); + + m_host = null; + m_server = server; + + SupportedServices = new Dictionary(); + } + #endregion + + #region ITransportListenerCallback Members + /// + /// Begins processing a request received via a binary encoded channel. + /// + /// A unique identifier for the secure channel which is the source of the request. + /// The description of the endpoint which the secure channel is using. + /// The incoming request. + /// The callback. + /// The callback data. + /// + /// The result which must be passed to the EndProcessRequest method. + /// + /// + /// + public IAsyncResult BeginProcessRequest( + string channeId, + EndpointDescription endpointDescription, + IServiceRequest request, + AsyncCallback callback, + object callbackData) + { + if (channeId == null) throw new ArgumentNullException(nameof(channeId)); + if (request == null) throw new ArgumentNullException(nameof(request)); + + // create operation. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callback, callbackData, 0); + + SecureChannelContext context = new SecureChannelContext( + channeId, + endpointDescription, + RequestEncoding.Binary); + + // begin invoke service. + return result.BeginProcessRequest(context, request); + } + + /// + /// Ends processing a request received via a binary encoded channel. + /// + /// The result returned by the BeginProcessRequest method. + /// + /// The response to return over the secure channel. + /// + /// + public IServiceResponse EndProcessRequest(IAsyncResult result) + { + return ProcessRequestAsyncResult.WaitForComplete(result, false); + } + #endregion + + #region Public Methods + /// + /// Dispatches an incoming binary encoded request. + /// + /// Incoming request. + public virtual IServiceResponse ProcessRequest(IServiceRequest incoming) + { + try + { + SetRequestContext(RequestEncoding.Binary); + + ServiceDefinition service = null; + + // find service. + if (!SupportedServices.TryGetValue(incoming.TypeId, out service)) + { + throw new ServiceResultException(StatusCodes.BadServiceUnsupported, Utils.Format("'{0}' is an unrecognized service identifier.", incoming.TypeId)); + } + + // invoke service. + return service.Invoke(incoming); + } + catch (Exception e) + { + // create fault. + return CreateFault(incoming, e); + } + } + #endregion + + #region IEndpointBase Members + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// Dispatches an incoming binary encoded request. + /// + /// Request. + /// Invoke service response message. + public virtual InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request) + { + IServiceRequest decodedRequest = null; + IServiceResponse response = null; + + // create context for request and reply. + ServiceMessageContext context = MessageContext; + + try + { + // check for null. + if (request == null || request.InvokeServiceRequest == null) + { + throw new ServiceResultException(StatusCodes.BadDecodingError, Utils.Format("Null message cannot be processed.")); + } + + // decoding incoming message. + decodedRequest = BinaryDecoder.DecodeMessage(request.InvokeServiceRequest, null, context) as IServiceRequest; + + // invoke service. + response = ProcessRequest(decodedRequest); + + // encode response. + InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); + outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(response, context); + return outgoing; + } + catch (Exception e) + { + // create fault. + ServiceFault fault = CreateFault(decodedRequest, e); + + // encode fault response. + if (context == null) + { + context = new ServiceMessageContext(); + } + + InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); + outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(fault, context); + return outgoing; + } + } + #else + /// + /// Dispatches an incoming binary encoded request. + /// + public virtual IAsyncResult BeginInvokeService(InvokeServiceMessage message, AsyncCallback callack, object callbackData) + { + try + { + // check for bad data. + if (message == null) + { + throw new ServiceResultException(StatusCodes.BadInvalidArgument); + } + + // set the request context. + SetRequestContext(RequestEncoding.Binary); + + // create handler. + ProcessRequestAsyncResult result = new ProcessRequestAsyncResult(this, callack, callbackData, 0); + return result.BeginProcessRequest(SecureChannelContext.Current, message.InvokeServiceRequest); + } + catch (Exception e) + { + throw CreateSoapFault(null, e); + } + } + + /// + /// Dispatches an incoming binary encoded request. + /// + /// The ar. + /// + public virtual InvokeServiceResponseMessage EndInvokeService(IAsyncResult ar) + { + try + { + // wait for the response. + IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, false); + + // encode the repsonse. + InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); + outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(response, MessageContext); + return outgoing; + } + catch (Exception e) + { + // create fault. + ServiceFault fault = CreateFault(ProcessRequestAsyncResult.GetRequest(ar), e); + + // encode the fault as a response. + InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); + outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(fault, MessageContext); + return outgoing; + } + } + #endif + + /// + /// Returns the host associated with the current context. + /// + /// The host associated with the current context. + protected IServiceHostBase HostForContext + { + get + { + if (m_host == null) + { + m_host = GetHostForContext(); + } + + return m_host; + } + } + + /// + /// Returns the host associated with the current context. + /// + /// The host associated with the current context. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + protected static IServiceHostBase GetHostForContext() + { + // fetch the current operation context. + OperationContext context = OperationContext.Current; + + if (context == null) + { + throw new ServiceResultException(StatusCodes.BadInternalError, "The current thread does not have a valid WCF operation context."); + } + + throw new ServiceResultException(StatusCodes.BadInternalError, "The endpoint is not associated with a host that supports IServerHostBase."); + } + + /// + /// Gets the server object from the operation context. + /// + /// The server object from the operation context. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")] + protected IServerBase ServerForContext + { + get + { + if (m_server == null) + { + m_server = GetServerForContext(); + } + + return m_server; + } + } + + /// + /// Gets the server object from the operation context. + /// + /// The server object from the operation context. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + protected IServerBase GetServerForContext() + { + // get the server associated with the host. + IServerBase server = HostForContext.Server; + + if (server == null) + { + throw new ServiceResultException(StatusCodes.BadInternalError, "The endpoint is not associated with a server instance."); + } + + // check the server status. + if (ServiceResult.IsBad(server.ServerError)) + { + throw new ServiceResultException(server.ServerError); + } + + return server; + } + #endregion + + #region Protected Methods + /// + /// Find the endpoint description for the endpoint. + /// + protected EndpointDescription GetEndpointDescription() + { + return null; + } + + /// + /// Finds the service identified by the request type. + /// + protected ServiceDefinition FindService(ExpandedNodeId requestTypeId) + { + ServiceDefinition service = null; + + if (!SupportedServices.TryGetValue(requestTypeId, out service)) + { + throw ServiceResultException.Create( + StatusCodes.BadServiceUnsupported, + "'{0}' is an unrecognized service identifier.", + requestTypeId); + } + + return service; + } + + /// + /// Creates a fault message. + /// + /// The request. + /// The exception. + /// A fault message. + protected static ServiceFault CreateFault(IServiceRequest request, Exception exception) + { + DiagnosticsMasks diagnosticsMask = DiagnosticsMasks.ServiceNoInnerStatus; + + ServiceFault fault = new ServiceFault(); + + if (request != null) + { + fault.ResponseHeader.Timestamp = DateTime.UtcNow; + fault.ResponseHeader.RequestHandle = request.RequestHeader.RequestHandle; + + if (request.RequestHeader != null) + { + diagnosticsMask = (DiagnosticsMasks)request.RequestHeader.ReturnDiagnostics; + } + } + + ServiceResult result = null; + + ServiceResultException sre = exception as ServiceResultException; + + if (sre != null) + { + result = new ServiceResult(sre); + + Utils.Trace( + Utils.TraceMasks.Service, + "Service Fault Occured. Reason={0}", + result); + } + else + { + result = new ServiceResult(exception, StatusCodes.BadUnexpectedError); + Utils.Trace(exception, "SERVER - Unexpected Service Fault: {0}", exception.Message); + } + + fault.ResponseHeader.ServiceResult = result.Code; + + StringTable stringTable = new StringTable(); + + fault.ResponseHeader.ServiceDiagnostics = new DiagnosticInfo( + result, + diagnosticsMask, + true, + stringTable); + + fault.ResponseHeader.StringTable = stringTable.ToArray(); + + return fault; + } + + /// + /// Creates a fault message. + /// + /// The request. + /// The exception. + /// A fault message. + protected static Exception CreateSoapFault(IServiceRequest request, Exception exception) + { + ServiceFault fault = CreateFault(request, exception); + + // get the error from the header. + ServiceResult error = fault.ResponseHeader.ServiceResult; + + if (error == null) + { + error = ServiceResult.Create(StatusCodes.BadUnexpectedError, "An unknown error occurred."); + } + + // construct the fault code and fault reason. + string codeName = StatusCodes.GetBrowseName(error.Code); + + FaultCode code = null; + FaultReason reason = null; + + if (!LocalizedText.IsNullOrEmpty(error.LocalizedText)) + { + reason = new FaultReason(new FaultReasonText(Utils.Format("{0}", error.LocalizedText))); + } + else + { + reason = new FaultReason(new FaultReasonText(codeName)); + } + + if (!String.IsNullOrEmpty(error.SymbolicId)) + { + FaultCode subcode = new FaultCode(error.SymbolicId, error.NamespaceUri); + code = new FaultCode(codeName, Namespaces.OpcUa, subcode); + } + else + { + code = new FaultCode(codeName, Namespaces.OpcUa); + } + + // throw the fault. + return new FaultException(fault, reason, code, string.Empty); + } + + /// + /// Returns the message context used by the server associated with the endpoint. + /// + /// The message context. + protected ServiceMessageContext MessageContext + { + get { return m_messageContext; } + set { m_messageContext = value; } + } + + /// + /// Returns the description for the endpoint + /// + /// The endpoint description. + protected EndpointDescription EndpointDescription + { + get { return m_endpointDescription; } + set { m_endpointDescription = value; } + } + + /// + /// The types known to the server. + /// + /// The server error. + protected ServiceResult ServerError + { + get { return m_serverError; } + set { m_serverError = value; } + } + + /// + /// The types known to the server. + /// + protected Dictionary SupportedServices + { + get { return m_supportedServices; } + set { m_supportedServices = value; } + } + + /// + /// Sets the request context for the thread. + /// + /// The encoding. + protected void SetRequestContext(RequestEncoding encoding) + { + // fetch the current operation context. + OperationContext context = OperationContext.Current; + } + + /// + /// Called when a new request is received by the endpoint. + /// + /// The request. + protected virtual void OnRequestReceived(IServiceRequest request) + { + } + + /// + /// Called when a response sent via the endpoint. + /// + /// The response. + protected virtual void OnResponseSent(IServiceResponse response) + { + } + + /// + /// Called when a response fault sent via the endpoint. + /// + /// The fault. + protected virtual void OnResponseFaultSent(Exception fault) + { + } + #endregion + + #region ServiceDefinition Classe + /// + /// Stores the definition of a service supported by the server. + /// + protected class ServiceDefinition + { + /// + /// Initializes the object with its request type and implementation. + /// + /// Type of the request. + /// The invoke method. + public ServiceDefinition( + Type requestType, + InvokeServiceEventHandler invokeMethod) + { + m_requestType = requestType; + m_InvokeService = invokeMethod; + } + + /// + /// The system type of the request object. + /// + /// The type of the request. + public Type RequestType + { + get { return m_requestType; } + } + + /// + /// The system type of the request object. + /// + /// The type of the response. + public Type ResponseType + { + get { return m_requestType; } + } + + /// + /// Processes the request. + /// + /// The request. + /// + public IServiceResponse Invoke(IServiceRequest request) + { + if (m_InvokeService != null) + { + return m_InvokeService(request); + } + + return null; + } + + #region Private Fields + private Type m_requestType; + private InvokeServiceEventHandler m_InvokeService; + #endregion + } + + /// + /// A delegate used to dispatch incoming service requests. + /// + protected delegate IServiceResponse InvokeServiceEventHandler(IServiceRequest request); + #endregion + + #region ProcessRequestAsyncResult Class + /// + /// An AsyncResult object when handling an asynchronous request. + /// + protected class ProcessRequestAsyncResult : AsyncResultBase, IEndpointIncomingRequest + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The endpoint being called. + /// The callback to use when the operation completes. + /// The callback data. + /// The timeout in milliseconds + public ProcessRequestAsyncResult( + EndpointBase endpoint, + AsyncCallback callback, + object callbackData, + int timeout) + : + base(callback, callbackData, timeout) + { + m_endpoint = endpoint; + } + #endregion + + #region IEndpointIncomingRequest Members + /// + /// Gets the request. + /// + /// The request. + public IServiceRequest Request + { + get { return m_request; } + } + + /// + /// Gets the secure channel context associated with the request. + /// + /// The secure channel context. + public SecureChannelContext SecureChannelContext + { + get { return m_context; } + } + + /// + /// Gets or sets the call data associated with the request. + /// + /// The call data. + public object Calldata + { + get { return m_calldata; } + set { m_calldata = value; } + } + + /// + /// Used to call the default synchronous handler. + /// + /// + /// This method may block the current thread so the caller must not call in the + /// thread that calls IServerBase.ScheduleIncomingRequest(). + /// This method always traps any exceptions and reports them to the client as a fault. + /// + public void CallSynchronously() + { + OnProcessRequest(null); + } + + /// + /// Used to indicate that the asynchronous operation has completed. + /// + /// The response. May be null if an error is provided. + /// + public void OperationCompleted(IServiceResponse response, ServiceResult error) + { + // save response and/or error. + m_error = null; + m_response = response; + + if (ServiceResult.IsBad(error)) + { + m_error = new ServiceResultException(error); + m_response = SaveExceptionAsResponse(m_error); + } + + // operation completed. + OperationCompleted(); + } + #endregion + + #region Public Members + /// + /// Begins processing an incoming request. + /// + /// The security context for the request + /// The request data. + /// + /// The result object that is used to call the EndProcessRequest method. + /// + public IAsyncResult BeginProcessRequest( + SecureChannelContext context, + byte[] requestData) + { + m_context = context; + + try + { + // decoding incoming message. + m_request = BinaryDecoder.DecodeMessage(requestData, null, m_endpoint.MessageContext) as IServiceRequest; + + // find service. + m_service = m_endpoint.FindService(m_request.TypeId); + + if (m_service == null) + { + throw ServiceResultException.Create(StatusCodes.BadServiceUnsupported, "'{0}' is an unrecognized service type.", m_request.TypeId); + } + + // queue request. + m_endpoint.ServerForContext.ScheduleIncomingRequest(this); + } + catch (Exception e) + { + m_error = e; + m_response = SaveExceptionAsResponse(e); + + // operation completed. + OperationCompleted(); + } + + return this; + } + + /// + /// Begins processing an incoming request. + /// + /// The security context for the request + /// The request. + /// The result object that is used to call the EndProcessRequest method. + public IAsyncResult BeginProcessRequest( + SecureChannelContext context, + IServiceRequest request) + { + m_context = context; + m_request = request; + + try + { + // find service. + m_service = m_endpoint.FindService(m_request.TypeId); + + if (m_service == null) + { + throw ServiceResultException.Create(StatusCodes.BadServiceUnsupported, "'{0}' is an unrecognized service type.", m_request.TypeId); + } + + // queue request. + m_endpoint.ServerForContext.ScheduleIncomingRequest(this); + } + catch (Exception e) + { + m_error = e; + m_response = SaveExceptionAsResponse(e); + + // operation completed. + OperationCompleted(); + } + + return this; + } + + /// + /// Checks for a valid IAsyncResult object and waits for the operation to complete. + /// + /// The IAsyncResult object for the operation. + /// if set to true an exception is thrown if an error occurred. + /// The response. + public static IServiceResponse WaitForComplete(IAsyncResult ar, bool throwOnError) + { + ProcessRequestAsyncResult result = ar as ProcessRequestAsyncResult; + + if (result == null) + { + throw new ArgumentException("End called with an invalid IAsyncResult object.", nameof(ar)); + } + + if (result.m_response == null) + { + if (!result.WaitForComplete()) + { + throw new TimeoutException(); + } + } + + if (throwOnError && result.m_error != null) + { + throw new ServiceResultException(result.m_error, StatusCodes.BadInternalError); + } + + return result.m_response; + } + + /// + /// Checks for a valid IAsyncResult object and returns the original request object. + /// + /// The IAsyncResult object for the operation. + /// The request object if available; otherwise null. + public static IServiceRequest GetRequest(IAsyncResult ar) + { + ProcessRequestAsyncResult result = ar as ProcessRequestAsyncResult; + + if (result != null) + { + return result.m_request; + } + + return null; + } + #endregion + + #region Private Members + /// + /// Saves an exception as response. + /// + /// The exception. + private IServiceResponse SaveExceptionAsResponse(Exception e) + { + try + { + return EndpointBase.CreateFault(m_request, e); + } + catch (Exception e2) + { + return EndpointBase.CreateFault(null, e2); + } + } + + /// + /// Processes the request. + /// + private void OnProcessRequest(object state) + { + try + { + // set the context. + SecureChannelContext.Current = m_context; + + // call the service. + m_response = m_service.Invoke(m_request); + + } + catch (Exception e) + { + // save any error. + m_error = e; + m_response = SaveExceptionAsResponse(e); + } + + // report completion. + OperationCompleted(); + } + #endregion + + #region Private Fields + private EndpointBase m_endpoint; + private SecureChannelContext m_context; + private IServiceRequest m_request; + private IServiceResponse m_response; + private ServiceDefinition m_service; + private Exception m_error; + private object m_calldata; + #endregion + } + #endregion + + #region Private Fields + private ServiceResult m_serverError; + private ServiceMessageContext m_messageContext; + private EndpointDescription m_endpointDescription; + private Dictionary m_supportedServices; + private IServiceHostBase m_host; + private IServerBase m_server; + private string g_ImplementationString = "Opc.Ua.EndpointBase WCF Service " + Utils.GetAssemblySoftwareVersion(); + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/IEndpointBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/IEndpointBase.cs new file mode 100644 index 00000000..ab47f3e9 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/IEndpointBase.cs @@ -0,0 +1,53 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.ServiceModel; + +namespace Opc.Ua +{ + + #if OPCUA_USE_SYNCHRONOUS_ENDPOINTS + /// + /// The base interface for all services exposed by UA servers. + /// + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IEndpointBase + { + /// + /// The operation contract for the InvokeService service. + /// + /// The request. + /// Response message. + [OperationContract(Action = Namespaces.OpcUaWsdl + "/InvokeService", ReplyAction = Namespaces.OpcUaWsdl + "/InvokeServiceResponse")] + InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request); + } + #else + /// + /// The base asynchronous interface for all services exposed by UA servers. + /// + [ServiceContract(Namespace = Namespaces.OpcUaWsdl)] + public interface IEndpointBase + { + /// + /// The operation contract for the InvokeService service. + /// + [OperationContractAttribute(AsyncPattern = true, Action = Namespaces.OpcUaWsdl + "/InvokeService", ReplyAction = Namespaces.OpcUaWsdl + "/InvokeServiceResponse")] + IAsyncResult BeginInvokeService(InvokeServiceMessage request, AsyncCallback callback, object asyncState); + + /// + /// The method used to retrieve the results of a InvokeService service request. + /// + InvokeServiceResponseMessage EndInvokeService(IAsyncResult result); + } + #endif +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/IServerBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/IServerBase.cs new file mode 100644 index 00000000..ce5e8f16 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/IServerBase.cs @@ -0,0 +1,105 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.ServiceModel; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// An interface to a service response message. + /// + public interface IServerBase + { + /// + /// The message context to use with the service. + /// + /// + /// The context information associated with a UA server that is used during message processing. + /// + ServiceMessageContext MessageContext { get; } + + /// + /// An error condition that describes why the server if not running (null if no error exists). + /// + /// The object that combines the status code and diagnostic info structures. + ServiceResult ServerError { get; } + + /// + /// Returns the endpoints supported by the server. + /// + /// Returns a collection of objects. + EndpointDescriptionCollection GetEndpoints(); + + /// + /// Schedules an incoming request. + /// + /// The request. + void ScheduleIncomingRequest(IEndpointIncomingRequest request); + } + + /// + /// An interface to an object that manages a request received from a client. + /// + public interface IEndpointIncomingRequest + { + /// + /// Gets the request. + /// + /// The request. + IServiceRequest Request { get; } + + /// + /// Gets the secure channel context associated with the request. + /// + /// The secure channel context. + SecureChannelContext SecureChannelContext { get; } + + /// + /// Gets or sets the call data associated with the request. + /// + /// The call data. + object Calldata { get; set; } + + /// + /// Used to call the default synchronous handler. + /// + /// + /// This method may block the current thread so the caller must not call in the + /// thread that calls IServerBase.ScheduleIncomingRequest(). + /// This method always traps any exceptions and reports them to the client as a fault. + /// + void CallSynchronously(); + + /// + /// Used to indicate that the asynchronous operation has completed. + /// + /// The response. May be null if an error is provided. + /// An error to result as a fault. + void OperationCompleted(IServiceResponse response, ServiceResult error); + } + + /// + /// An interface which the service host object. + /// + public interface IServiceHostBase + { + /// + /// The UA server instance associated with the service host. + /// + /// An object of interface to a service response message. + IServerBase Server { get; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/SecureChannelContext.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/SecureChannelContext.cs new file mode 100644 index 00000000..63d22466 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/SecureChannelContext.cs @@ -0,0 +1,126 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Threading; + +namespace Opc.Ua +{ + /// + /// Stores context information for the current secure channel. + /// + public class SecureChannelContext + { + #region Constructors + /// + /// Initializes a new instance with the specified property values. + /// + /// The secure channel identifier. + /// The endpoint description. + /// The message encoding. + public SecureChannelContext( + string secureChannelId, + EndpointDescription endpointDescription, + RequestEncoding messageEncoding) + { + m_secureChannelId = secureChannelId; + m_endpointDescription = endpointDescription; + m_messageEncoding = messageEncoding; + } + + /// + /// Initializes a new instance with the context for the current thread. + /// + protected SecureChannelContext() + { + SecureChannelContext context = SecureChannelContext.Current; + + if (context != null) + { + m_secureChannelId = context.SecureChannelId; + m_endpointDescription = context.EndpointDescription; + m_messageEncoding = context.MessageEncoding; + } + } + #endregion + + #region Public Properties + /// + /// TThe unique identifier for the secure channel. + /// + /// The secure channel identifier. + public string SecureChannelId + { + get { return m_secureChannelId; } + } + + /// + /// The description of the endpoint used with the channel. + /// + /// The endpoint description. + public EndpointDescription EndpointDescription + { + get { return m_endpointDescription; } + } + + /// + /// The encoding used with the channel. + /// + /// The message encoding. + public RequestEncoding MessageEncoding + { + get { return m_messageEncoding; } + } + #endregion + + #region Static Members + /// + /// The active secure channel for the thread. + /// + /// The current secure channel context. + public static SecureChannelContext Current + { + get + { + return s_Dataslot.Value; + } + + set + { + s_Dataslot.Value = value; + } + } + #endregion + + #region Private Fields + private string m_secureChannelId; + private EndpointDescription m_endpointDescription; + private RequestEncoding m_messageEncoding; + private static ThreadLocal s_Dataslot = new ThreadLocal(); + #endregion + } + + /// + /// The message encoding used with a request. + /// + public enum RequestEncoding + { + /// + /// The request used the UA binary encoding. + /// + Binary, + + /// + /// The request used the UA XML encoding. + /// + Xml + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/ServerBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/ServerBase.cs new file mode 100644 index 00000000..37ee0d13 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Server/ServerBase.cs @@ -0,0 +1,1367 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Net; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua +{ + /// + /// A base class for a UA server implementation. + /// + public partial class ServerBase : IServerBase, IDisposable + { + #region Constructors + /// + /// Initializes object with default values. + /// + public ServerBase() + { + m_messageContext = new ServiceMessageContext(); + m_serverError = new ServiceResult(StatusCodes.BadServerHalted); + m_hosts = new List(); + m_listeners = new List(); + m_endpoints = null; + m_requestQueue = new RequestQueue(this, 10, 100, 1000); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // dispose any listeners. + if (m_listeners != null) + { + for (int ii = 0; ii < m_listeners.Count; ii++) + { + Utils.SilentDispose(m_listeners[ii]); + } + + m_listeners.Clear(); + } + + // dispose any hosts. + if (m_hosts != null) + { + for (int ii = 0; ii < m_hosts.Count; ii++) + { + Utils.SilentDispose(m_hosts[ii]); + } + + m_hosts.Clear(); + } + + Utils.SilentDispose(m_requestQueue); + } + } + #endregion + + #region IServerBase Members + /// + /// The message context to use with the service. + /// + /// The message context that stores context information associated with a UA + /// server that is used during message processing. + /// + public ServiceMessageContext MessageContext + { + get + { + return (ServiceMessageContext)m_messageContext; + } + + set + { + Interlocked.Exchange(ref m_messageContext, value); + } + } + + /// + /// An error condition that describes why the server if not running (null if no error exists). + /// + /// The object that combines the status code and diagnostic info structures. + public ServiceResult ServerError + { + get + { + return (ServiceResult)m_serverError; + } + + set + { + Interlocked.Exchange(ref m_serverError, value); + } + } + + /// + /// Returns the endpoints supported by the server. + /// + /// Returns a collection of EndpointDescription. + public virtual EndpointDescriptionCollection GetEndpoints() + { + ReadOnlyList endpoints = m_endpoints; + + if (endpoints != null) + { + return new EndpointDescriptionCollection(endpoints); + } + + return new EndpointDescriptionCollection(); + } + + /// + /// Schedules an incoming request. + /// + /// The request. + public virtual void ScheduleIncomingRequest(IEndpointIncomingRequest request) + { + m_requestQueue.ScheduleIncomingRequest(request); + } + #endregion + + #region Public Methods + /// + /// Raised when the status of a monitored connection changes. + /// + public event EventHandler ConnectionStatusChanged; + + /// + /// Raised when a connection arrives and is waiting for a callback. + /// + protected virtual void OnConnectionStatusChanged(object sender, ConnectionStatusEventArgs e) + { + ConnectionStatusChanged?.Invoke(sender, e); + } + + /// + /// Creates a new connection with a client. + /// + public void CreateConnection(Uri url, int timeout) + { + ITransportListener listener = null; + + if (TransportListeners != null) + { + foreach (var ii in TransportListeners) + { + if (ii.UriScheme == url.Scheme) + { + listener = ii; + break; + } + } + } + + if (listener == null) + { + throw new ArgumentException(nameof(url), "No suitable listener found."); + } + + Utils.Trace((int)Utils.TraceMasks.Information, "Connecting to Client at {0}.", url); + listener.CreateReverseConnection(url, timeout); + } + + /// + /// Starts the server (called from a IIS host process). + /// + /// The object that stores the configurable configuration information + /// for a UA application + /// The array of Uri elements which contains base addresses. + /// Returns a host for a UA service. + public Task Start(ApplicationConfiguration configuration, params Uri[] baseAddresses) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + // do any pre-startup processing + OnServerStarting(configuration); + + // intialize the request queue from the configuration. + InitializeRequestQueue(configuration); + + // initialize the server capabilities + ServerCapabilities = configuration.ServerConfiguration.ServerCapabilities; + + // initialize the base addresses. + InitializeBaseAddresses(configuration); + + // initialize the hosts. + ApplicationDescription serverDescription = null; + EndpointDescriptionCollection endpoints = null; + + IList hosts = InitializeServiceHosts( + configuration, + out serverDescription, + out endpoints); + + // save discovery information. + ServerDescription = serverDescription; + m_endpoints = new ReadOnlyList(endpoints); + + // start the application. + StartApplication(configuration); + + // the configuration file may specify multiple security policies or non-HTTP protocols + // which will require multiple service hosts. the default host will be opened by WCF when + // it is returned from this function. The others must be opened here. + + if (hosts == null || hosts.Count == 0) + { + throw ServiceResultException.Create(StatusCodes.BadConfigurationError, "The UA server does not have a default host."); + } + + lock (m_hosts) + { + for (int ii = 1; ii < hosts.Count; ii++) + { + m_hosts.Add(hosts[ii]); + } + } + + return hosts[0]; + } + + /// + /// Starts the server (called from a dedicated host process). + /// + /// The object that stores the configurable configuration + /// information for a UA application. + /// + public void Start(ApplicationConfiguration configuration) + { + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + // do any pre-startup processing + OnServerStarting(configuration); + + // intialize the request queue from the configuration. + InitializeRequestQueue(configuration); + + // initialize the server capabilities + ServerCapabilities = configuration.ServerConfiguration.ServerCapabilities; + + // initialize the base addresses. + InitializeBaseAddresses(configuration); + + // initialize the hosts. + ApplicationDescription serverDescription = null; + EndpointDescriptionCollection endpoints = null; + + IList hosts = InitializeServiceHosts( + configuration, + out serverDescription, + out endpoints); + + // save discovery information. + ServerDescription = serverDescription; + m_endpoints = new ReadOnlyList(endpoints); + + // start the application. + StartApplication(configuration); + + // open the hosts. + lock (m_hosts) + { + foreach (Task serviceHost in hosts) + { + m_hosts.Add(serviceHost); + } + } + } + + /// + /// Initializes the list of base addresses. + /// + private void InitializeBaseAddresses(ApplicationConfiguration configuration) + { + BaseAddresses = new List(); + + StringCollection sourceBaseAddresses = null; + StringCollection sourceAlternateAddresses = null; + + if (configuration.ServerConfiguration != null) + { + sourceBaseAddresses = configuration.ServerConfiguration.BaseAddresses; + sourceAlternateAddresses = configuration.ServerConfiguration.AlternateBaseAddresses; + } + + if (configuration.DiscoveryServerConfiguration != null) + { + sourceBaseAddresses = configuration.DiscoveryServerConfiguration.BaseAddresses; + sourceAlternateAddresses = configuration.DiscoveryServerConfiguration.AlternateBaseAddresses; + } + + if (sourceBaseAddresses == null) + { + return; + } + + foreach (string baseAddress in sourceBaseAddresses) + { + BaseAddress address = new BaseAddress() { Url = new Uri(baseAddress) }; + + if (sourceAlternateAddresses != null) + { + foreach (string alternateAddress in sourceAlternateAddresses) + { + Uri alternateUrl = new Uri(alternateAddress); + + if (alternateUrl.Scheme == address.Url.Scheme) + { + if (address.AlternateUrls == null) + { + address.AlternateUrls = new List(); + } + + address.AlternateUrls.Add(alternateUrl); + } + } + } + + switch (address.Url.Scheme) + { + case Utils.UriSchemeHttps: + { + address.ProfileUri = Profiles.HttpsBinaryTransport; + address.DiscoveryUrl = address.Url; + break; + } + + case Utils.UriSchemeOpcTcp: + { + address.ProfileUri = Profiles.UaTcpTransport; + address.DiscoveryUrl = address.Url; + break; + } + } + + BaseAddresses.Add(address); + } + } + + /// + /// Returns the discovery URLs for the server. + /// + protected StringCollection GetDiscoveryUrls() + { + // build list of discovery uris. + StringCollection discoveryUrls = new StringCollection(); + string computerName = Utils.GetHostName(); + + foreach (BaseAddress baseAddress in BaseAddresses) + { + UriBuilder builder = new UriBuilder(baseAddress.DiscoveryUrl); + + int index = builder.Host.IndexOf("localhost", StringComparison.OrdinalIgnoreCase); + + if (index == -1) + { + index = builder.Host.IndexOf("{0}", StringComparison.OrdinalIgnoreCase); + } + + if (index != -1) + { + builder.Host = computerName; + } + + discoveryUrls.Add(builder.ToString()); + + if (baseAddress.AlternateUrls != null) + { + foreach (Uri alternateUrl in baseAddress.AlternateUrls) + { + builder = new UriBuilder(alternateUrl); + discoveryUrls.Add(builder.ToString()); + } + } + } + + return discoveryUrls; + } + + /// + /// Initializes the request queue. + /// + /// The configuration. + protected void InitializeRequestQueue(ApplicationConfiguration configuration) + { + // set suitable defaults. + int minRequestThreadCount = 10; + int maxRequestThreadCount = 1000; + int maxQueuedRequestCount = 2000; + + if (configuration.ServerConfiguration != null) + { + minRequestThreadCount = configuration.ServerConfiguration.MinRequestThreadCount; + maxRequestThreadCount = configuration.ServerConfiguration.MaxRequestThreadCount; + maxQueuedRequestCount = configuration.ServerConfiguration.MaxQueuedRequestCount; + } + + else if (configuration.DiscoveryServerConfiguration != null) + { + minRequestThreadCount = configuration.DiscoveryServerConfiguration.MinRequestThreadCount; + maxRequestThreadCount = configuration.DiscoveryServerConfiguration.MaxRequestThreadCount; + maxQueuedRequestCount = configuration.DiscoveryServerConfiguration.MaxQueuedRequestCount; + } + + // ensure configuration errors don't render the server inoperable. + if (maxRequestThreadCount < 100) + { + maxRequestThreadCount = 100; + } + + if (maxQueuedRequestCount < 100) + { + maxQueuedRequestCount = 100; + } + + if (m_requestQueue != null) + { + m_requestQueue.Dispose(); + } + + m_requestQueue = new RequestQueue(this, minRequestThreadCount, maxRequestThreadCount, maxQueuedRequestCount); + } + + /// + /// Stops the server and releases all resources. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Stop")] + public virtual void Stop() + { + // do any pre-stop processing. + try + { + OnServerStopping(); + } + catch (Exception e) + { + m_serverError = new ServiceResult(e); + } + + // close any listeners. + List listeners = m_listeners; + + if (listeners != null) + { + for (int ii = 0; ii < listeners.Count; ii++) + { + try + { + listeners[ii].Close(); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error closing a listener. {0}", listeners[ii].GetType().FullName); + } + } + + listeners.Clear(); + } + + // close the hosts. + lock (m_hosts) + { + m_hosts.Clear(); + } + } + #endregion + + #region BaseAddress Class + /// + /// Stores information about a base address. + /// + protected class BaseAddress + { + /// + /// The URL for the base address. + /// + public Uri Url { get; set; } + + /// + /// Alternate URLs for the base address. + /// + public List AlternateUrls { get; set; } + + /// + /// The profile URL for the address. + /// + public string ProfileUri { get; set; } + + /// + /// The discovery URL for the address. + /// + public Uri DiscoveryUrl { get; set; } + } + #endregion + + #region Protected Properties + /// + /// Gets the list of base addresses supported by the server. + /// + protected IList BaseAddresses { get; set; } + + /// + /// Gets the list of endpoints supported by the server. + /// + protected ReadOnlyList Endpoints => m_endpoints; + + /// + /// The object used to verify client certificates + /// + /// The identifier for an X509 certificate. + public CertificateValidator CertificateValidator + { + get + { + return (CertificateValidator)m_certificateValidator; + } + + private set + { + m_certificateValidator = value; + } + } + + /// + /// The server's application instance certificate. + /// + /// The instance X.509 certificate. + protected X509Certificate2 InstanceCertificate + { + get + { + return (X509Certificate2)m_instanceCertificate; + } + + private set + { + m_instanceCertificate = value; + } + } + + /// + /// Gets the instance certificate chain. + /// + protected X509Certificate2Collection InstanceCertificateChain + { + get + { + return m_instanceCertificateChain; + } + + private set + { + m_instanceCertificateChain = value; + } + } + + /// + /// The non-configurable properties for the server. + /// + /// The properties of the current server instance. + protected ServerProperties ServerProperties + { + get + { + return (ServerProperties)m_serverProperties; + } + + private set + { + m_serverProperties = value; + } + } + + /// + /// The configuration for the server. + /// + /// Object that stores the configurable configuration information for a UA application + protected ApplicationConfiguration Configuration + { + get + { + return (ApplicationConfiguration)m_configuration; + } + + private set + { + m_configuration = value; + } + } + + /// + /// The application description for the server. + /// + /// Object that contains a description for the ApplicationDescription DataType. + protected ApplicationDescription ServerDescription + { + get + { + return (ApplicationDescription)m_serverDescription; + } + + private set + { + m_serverDescription = value; + } + } + + /// + /// Gets or set the capabilities for the server. + /// + protected StringCollection ServerCapabilities { get; set; } + + /// + /// Gets the list of transport listeners used by the server instance. + /// + /// The transport listeners. + protected List TransportListeners => m_listeners; + #endregion + + #region Protected Methods + /// + /// Returns the service contract to use. + /// + protected virtual Type GetServiceContract() + { + return null; + } + + /// + /// Returns an instance of the endpoint to use. + /// + protected virtual EndpointBase GetEndpointInstance(ServerBase server) + { + return null; + } + + /// + /// Specifies if the server requires encryption; if so the server needs to send its certificate to the clients and validate the client certificates + /// + /// The description. + /// + public static bool RequireEncryption(EndpointDescription description) + { + bool requireEncryption = description.SecurityPolicyUri != SecurityPolicies.None; + + if (!requireEncryption) + { + foreach (UserTokenPolicy userTokenPolicy in description.UserIdentityTokens) + { + if (userTokenPolicy.SecurityPolicyUri != SecurityPolicies.None) + { + requireEncryption = true; + break; + } + } + } + return requireEncryption; + } + + /// + /// Called after the application certificate update. + /// + protected virtual void OnCertificateUpdate(object sender, CertificateUpdateEventArgs e) + { + // disconnect all sessions + InstanceCertificate = e.SecurityConfiguration.ApplicationCertificate.Certificate; + foreach (var listener in TransportListeners) + { + listener.CertificateUpdate(e.CertificateValidator, InstanceCertificate, null); + } + } + + /// + /// Create the transport listener for the service host endpoint. + /// + /// The endpoint Uri. + /// The description of the endpoints. + /// The configuration of the endpoints. + /// The transport listener. + /// The certificate validator for the transport. + public virtual void CreateServiceHostEndpoint( + Uri endpointUri, + EndpointDescriptionCollection endpoints, + EndpointConfiguration endpointConfiguration, + ITransportListener listener, + ICertificateValidator certificateValidator + ) + { + // create the stack listener. + try + { + TransportListenerSettings settings = new TransportListenerSettings(); + + settings.Descriptions = endpoints; + settings.Configuration = endpointConfiguration; + settings.ServerCertificate = InstanceCertificate; + settings.CertificateValidator = certificateValidator; + settings.NamespaceUris = MessageContext.NamespaceUris; + settings.Factory = MessageContext.Factory; + + listener.Open( + endpointUri, + settings, + GetEndpointInstance(this)); + + TransportListeners.Add(listener); + + listener.ConnectionStatusChanged += OnConnectionStatusChanged; + } + catch (Exception e) + { + string message = $"Could not load {endpointUri.Scheme} Stack Listener."; + if (e.InnerException != null) + { + message += (" " + e.InnerException.Message); + } + Utils.Trace(e, message); + throw; + } + } + + /// + /// Returns the UserTokenPolicies supported by the server. + /// + /// The configuration. + /// The description. + /// Returns a collection of UserTokenPolicy objects, the return type is . + public virtual UserTokenPolicyCollection GetUserTokenPolicies(ApplicationConfiguration configuration, EndpointDescription description) + { + UserTokenPolicyCollection policies = new UserTokenPolicyCollection(); + + if (configuration.ServerConfiguration == null || configuration.ServerConfiguration.UserTokenPolicies == null) + { + return policies; + } + + foreach (UserTokenPolicy policy in configuration.ServerConfiguration.UserTokenPolicies) + { + // ensure a security policy is specified for user tokens. + if (description.SecurityMode == MessageSecurityMode.None) + { + if (String.IsNullOrEmpty(policy.SecurityPolicyUri)) + { + UserTokenPolicy clone = (UserTokenPolicy)policy.MemberwiseClone(); + clone.SecurityPolicyUri = SecurityPolicies.Basic256; + policies.Add(clone); + continue; + } + } + + policies.Add(policy); + } + + // ensure each policy has a unique id. + for (int ii = 0; ii < policies.Count; ii++) + { + if (String.IsNullOrEmpty(policies[ii].PolicyId)) + { + policies[ii].PolicyId = Utils.Format("{0}", ii); + } + } + + return policies; + } + + /// + /// Checks for IP address or well known hostnames that map to the computer. + /// + /// The hostname. + /// The hostname to use for URL filtering. + protected string NormalizeHostname(string hostname) + { + string computerName = Utils.GetHostName(); + + // substitute the computer name for localhost if localhost used by client. + if (Utils.AreDomainsEqual(hostname, "localhost")) + { + return computerName.ToUpper(); + } + + + // check if client is using an ip address. + IPAddress address = null; + + if (System.Net.IPAddress.TryParse(hostname, out address)) + { + if (System.Net.IPAddress.IsLoopback(address)) + { + return computerName.ToUpper(); + } + + // substitute the computer name for any local IP if an IP is used by client. + IPAddress[] addresses = Utils.GetHostAddresses(Utils.GetHostName()); + + for (int ii = 0; ii < addresses.Length; ii++) + { + if (addresses[ii].Equals(address)) + { + return computerName.ToUpper(); + } + } + + // not a localhost IP address. + return hostname.ToUpper(); + } + + // return normalized hostname. + return hostname.ToUpper(); + } + + /// + /// Filters the list of addresses by profile. + /// + protected IList FilterByProfile(StringCollection profileUris, IList baseAddresses) + { + if (profileUris == null || profileUris.Count == 0) + { + return baseAddresses; + } + + List filteredAddresses = new List(); + + foreach (BaseAddress baseAddress in baseAddresses) + { + foreach (string profileUri in profileUris) + { + if (baseAddress.ProfileUri == Profiles.NormalizeUri(profileUri)) + { + filteredAddresses.Add(baseAddress); + break; + } + } + } + + return filteredAddresses; + } + + /// + /// Filters the list of addresses by the URL that the client provided. + /// + protected IList FilterByEndpointUrl(Uri endpointUrl, IList baseAddresses) + { + // client gets all of the endpoints if it using a known variant of the hostname. + if (NormalizeHostname(endpointUrl.DnsSafeHost) == NormalizeHostname("localhost")) + { + return baseAddresses; + } + + // client only gets alternate addresses that match the DNS name that it used. + List accessibleAddresses = new List(); + + foreach (BaseAddress baseAddress in baseAddresses) + { + if (baseAddress.Url.DnsSafeHost == endpointUrl.DnsSafeHost) + { + accessibleAddresses.Add(baseAddress); + continue; + } + + if (baseAddress.AlternateUrls != null) + { + foreach (Uri alternateUrl in baseAddress.AlternateUrls) + { + if (alternateUrl.DnsSafeHost == endpointUrl.DnsSafeHost) + { + accessibleAddresses.Add(baseAddress); + break; + } + } + } + } + + // no match on client DNS name. client gets only addresses that match the scheme. + if (accessibleAddresses.Count == 0) + { + foreach (BaseAddress baseAddress in baseAddresses) + { + if (baseAddress.Url.Scheme == endpointUrl.Scheme) + { + accessibleAddresses.Add(baseAddress); + continue; + } + } + } + + return accessibleAddresses; + } + + /// + /// Returns the best discovery URL for the base address based on the URL used by the client. + /// + private string GetBestDiscoveryUrl(Uri clientUrl, BaseAddress baseAddress) + { + string url = baseAddress.Url.ToString(); + + if ((baseAddress.ProfileUri == Profiles.HttpsBinaryTransport) && (!(url.EndsWith("discovery")))) + { + url += "/discovery"; + } + + return url; + } + + /// + /// Translates the discovery URLs based on the client url and returns an updated ApplicationDescription. + /// + /// The client URL. + /// The application description. + /// The base addresses. + /// The localized application name. + /// A copy of the application description + protected ApplicationDescription TranslateApplicationDescription( + Uri clientUrl, + ApplicationDescription description, + IList baseAddresses, + LocalizedText applicationName) + { + // get the discovery urls. + StringCollection discoveryUrls = new StringCollection(); + + foreach (BaseAddress baseAddress in baseAddresses) + { + discoveryUrls.Add(GetBestDiscoveryUrl(clientUrl, baseAddress)); + } + + // copy the description. + ApplicationDescription copy = new ApplicationDescription(); + + copy.ApplicationName = description.ApplicationName; + copy.ApplicationUri = description.ApplicationUri; + copy.ApplicationType = description.ApplicationType; + copy.ProductUri = description.ProductUri; + copy.GatewayServerUri = description.DiscoveryProfileUri; + copy.DiscoveryUrls = discoveryUrls; + + if (!LocalizedText.IsNullOrEmpty(applicationName)) + { + copy.ApplicationName = applicationName; + } + + // return the copy. + return copy; + } + + /// + /// Translates the endpoint descriptions based on the client url and profiles provided. + /// + /// The client URL. + /// The base addresses. + /// The endpoints. + /// The application to use with the endpoints. + /// The translated list of endpoints. + protected EndpointDescriptionCollection TranslateEndpointDescriptions( + Uri clientUrl, + IList baseAddresses, + IList endpoints, + ApplicationDescription application) + { + EndpointDescriptionCollection translations = new EndpointDescriptionCollection(); + + // process endpoints + foreach (EndpointDescription endpoint in endpoints) + { + UriBuilder endpointUrl = new UriBuilder(endpoint.EndpointUrl); + + // find matching base address. + foreach (BaseAddress baseAddress in baseAddresses) + { + bool translateHttpsEndpoint = false; + if (endpoint.TransportProfileUri == Profiles.HttpsBinaryTransport && baseAddress.ProfileUri == Profiles.HttpsBinaryTransport) + { + translateHttpsEndpoint = true; + } + + if (endpoint.TransportProfileUri != baseAddress.ProfileUri && !translateHttpsEndpoint) + { + continue; + } + + if (endpointUrl.Scheme != baseAddress.Url.Scheme) + { + continue; + } + + EndpointDescription translation = new EndpointDescription(); + + translation.EndpointUrl = baseAddress.Url.ToString(); + + if (endpointUrl.Path.StartsWith(baseAddress.Url.PathAndQuery) && endpointUrl.Path.Length > baseAddress.Url.PathAndQuery.Length) + { + string suffix = endpointUrl.Path.Substring(baseAddress.Url.PathAndQuery.Length); + translation.EndpointUrl += suffix; + } + + translation.ProxyUrl = endpoint.ProxyUrl; + translation.SecurityLevel = endpoint.SecurityLevel; + translation.SecurityMode = endpoint.SecurityMode; + translation.SecurityPolicyUri = endpoint.SecurityPolicyUri; + translation.ServerCertificate = endpoint.ServerCertificate; + translation.TransportProfileUri = endpoint.TransportProfileUri; + translation.UserIdentityTokens = endpoint.UserIdentityTokens; + translation.Server = application; + + // skip duplicates. + bool duplicateFound = false; + + foreach (EndpointDescription existingTranslation in translations) + { + if (existingTranslation.IsEqual(translation)) + { + duplicateFound = true; + break; + } + } + + if (!duplicateFound) + { + translations.Add(translation); + } + } + } + + return translations; + } + + /// + /// Verifies that the request header is valid. + /// + /// The object that contains description for the RequestHeader DataType. + protected virtual void ValidateRequest(RequestHeader requestHeader) + { + if (requestHeader == null) + { + throw new ServiceResultException(StatusCodes.BadRequestHeaderInvalid); + } + } + + /// + /// Creates the response header. + /// + /// The object that contains description for the RequestHeader DataType. + /// The status code. + /// If statusCode is bad. + /// Returns a description for the ResponseHeader DataType. + protected virtual ResponseHeader CreateResponse(RequestHeader requestHeader, uint statusCode) + { + if (StatusCode.IsBad(statusCode)) + { + throw new ServiceResultException(statusCode); + } + + ResponseHeader responseHeader = new ResponseHeader(); + + responseHeader.Timestamp = DateTime.UtcNow; + responseHeader.RequestHandle = requestHeader.RequestHandle; + + return responseHeader; + } + + /// + /// Creates the response header. + /// + /// The object that contains description for the RequestHeader DataType. + /// The exception used to create DiagnosticInfo assigned to the ServiceDiagnostics. + /// Returns a description for the ResponseHeader DataType. + protected virtual ResponseHeader CreateResponse(RequestHeader requestHeader, Exception exception) + { + ResponseHeader responseHeader = new ResponseHeader(); + + responseHeader.Timestamp = DateTime.UtcNow; + responseHeader.RequestHandle = requestHeader.RequestHandle; + + StringTable stringTable = new StringTable(); + responseHeader.ServiceDiagnostics = new DiagnosticInfo(exception, (DiagnosticsMasks)requestHeader.ReturnDiagnostics, true, stringTable); + responseHeader.StringTable = stringTable.ToArray(); + + return responseHeader; + } + + /// + /// Creates the response header. + /// + /// The object that contains description for the RequestHeader DataType. + /// The thread safe table of string constants. + /// Returns a description for the ResponseHeader DataType. + protected virtual ResponseHeader CreateResponse(RequestHeader requestHeader, StringTable stringTable) + { + ResponseHeader responseHeader = new ResponseHeader(); + + responseHeader.Timestamp = DateTime.UtcNow; + responseHeader.RequestHandle = requestHeader.RequestHandle; + + responseHeader.StringTable.AddRange(stringTable.ToArray()); + + return responseHeader; + } + + /// + /// Called when the server configuration is changed on disk. + /// + /// The object that stores the configurable configuration information for a UA application. + /// + /// Servers are free to ignore changes if it is difficult/impossible to apply them without a restart. + /// + protected virtual void OnUpdateConfiguration(ApplicationConfiguration configuration) + { + } + + /// + /// Called before the server starts. + /// + /// The object that stores the configurable configuration information for a UA application. + protected virtual void OnServerStarting(ApplicationConfiguration configuration) + { + // fetch properties and configuration. + Configuration = configuration; + ServerProperties = LoadServerProperties(); + + // ensure at least one security policy exists. + if (configuration.ServerConfiguration != null) + { + if (configuration.ServerConfiguration.SecurityPolicies.Count == 0) + { + configuration.ServerConfiguration.SecurityPolicies.Add(new ServerSecurityPolicy()); + } + + // ensure at least one user token policy exists. + if (configuration.ServerConfiguration.UserTokenPolicies.Count == 0) + { + UserTokenPolicy userTokenPolicy = new UserTokenPolicy(); + + userTokenPolicy.TokenType = UserTokenType.Anonymous; + userTokenPolicy.PolicyId = userTokenPolicy.TokenType.ToString(); + + configuration.ServerConfiguration.UserTokenPolicies.Add(userTokenPolicy); + } + } + + // load the instance certificate. + if (configuration.SecurityConfiguration.ApplicationCertificate != null) + { + InstanceCertificate = configuration.SecurityConfiguration.ApplicationCertificate.Find(true).Result; + } + + if (InstanceCertificate == null) + { + throw new ServiceResultException( + StatusCodes.BadConfigurationError, + "Server does not have an instance certificate assigned."); + } + + if (!InstanceCertificate.HasPrivateKey) + { + throw new ServiceResultException( + StatusCodes.BadConfigurationError, + "Server does not have access to the private key for the instance certificate."); + } + + // load certificate chain. + InstanceCertificateChain = new X509Certificate2Collection(InstanceCertificate); + List issuers = new List(); + configuration.CertificateValidator.GetIssuers(InstanceCertificateChain, issuers).Wait(); + + for (int i = 0; i < issuers.Count; i++) + { + InstanceCertificateChain.Add(issuers[i].Certificate); + } + + // use the message context from the configuration to ensure the channels are using the same one. + MessageContext = configuration.CreateMessageContext(); + + // assign a unique identifier if none specified. + if (String.IsNullOrEmpty(configuration.ApplicationUri)) + { + configuration.ApplicationUri = X509Utils.GetApplicationUriFromCertificate(InstanceCertificate); + + if (String.IsNullOrEmpty(configuration.ApplicationUri)) + { + configuration.ApplicationUri = Utils.Format( + "http://{0}/{1}/{2}", + Utils.GetHostName(), + configuration.ApplicationName, + Guid.NewGuid()); + } + } + + // initialize namespace table. + MessageContext.NamespaceUris = new NamespaceTable(); + MessageContext.NamespaceUris.Append(configuration.ApplicationUri); + + // assign an instance name. + if (String.IsNullOrEmpty(configuration.ApplicationName) && InstanceCertificate != null) + { + configuration.ApplicationName = InstanceCertificate.GetNameInfo(X509NameType.DnsName, false); + } + + // save the certificate validator. + CertificateValidator = configuration.CertificateValidator; + } + + /// + /// Creates the endpoints and creates the hosts. + /// + /// The object that stores the configurable configuration information for a UA application. + /// The object of the class that contains a description for the ApplicationDescription DataType. + /// The collection of objects. + /// Returns list of hosts for a UA service. + protected virtual IList InitializeServiceHosts( + ApplicationConfiguration configuration, + out ApplicationDescription serverDescription, + out EndpointDescriptionCollection endpoints) + { + serverDescription = null; + endpoints = null; + return new List(); + } + + /// + /// Starts the server application. + /// + /// The object that stores the configurable configuration information for a UA application. + protected virtual void StartApplication(ApplicationConfiguration configuration) + { + // must be defined by the subclass. + } + + /// + /// Called before the server stops + /// + protected virtual void OnServerStopping() + { + // may be overridden by the subclass. + } + + /// + /// Returns the properties for associated with the server instance. + /// + /// Returns the properties of the current server instance. + protected virtual ServerProperties LoadServerProperties() + { + return new ServerProperties(); + } + + /// + /// Processes the request. + /// + /// The request. + protected virtual void ProcessRequest(IEndpointIncomingRequest request) + { + request.CallSynchronously(); + } + #endregion + + #region RequestQueue Class + /// + /// Manages a queue of requests. + /// + protected class RequestQueue : IDisposable + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The server. + /// The minimum number of threads in the pool. + /// The maximum number of threads in the pool. + /// The maximum number of requests that will placed in the queue. + public RequestQueue(ServerBase server, int minThreadCount, int maxThreadCount, int maxRequestCount) + { + m_server = server; + m_stopped = false; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + m_stopped = true; + } + } + #endregion + + #region Public Members + /// + /// Schedules an incoming request. + /// + /// The request. + public void ScheduleIncomingRequest(IEndpointIncomingRequest request) + { + if (m_stopped) + { + request.OperationCompleted(null, StatusCodes.BadTooManyOperations); + } + else + { + Task.Run(() => { + m_server.ProcessRequest(request); + }); + } + } + #endregion + + #region Private Fields + private ServerBase m_server; + private bool m_stopped; + #endregion + + } + #endregion + + #region Private Fields + private object m_messageContext; + private object m_serverError; + private object m_certificateValidator; + private object m_instanceCertificate; + private X509Certificate2Collection m_instanceCertificateChain; + private object m_serverProperties; + private object m_configuration; + private object m_serverDescription; + private List m_hosts; + private List m_listeners; + private ReadOnlyList m_endpoints; + private RequestQueue m_requestQueue; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AcknowledgeableConditionState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AcknowledgeableConditionState.cs new file mode 100644 index 00000000..af002d53 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AcknowledgeableConditionState.cs @@ -0,0 +1,466 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class AcknowledgeableConditionState + { + #region Initialization + /// + /// Called after a node is created. + /// + protected override void OnAfterCreate(ISystemContext context, NodeState node) + { + base.OnAfterCreate(context, node); + + if (this.Acknowledge != null) + { + this.Acknowledge.OnCall = OnAcknowledgeCalled; + } + + if (this.Confirm != null) + { + this.Confirm.OnCall = OnConfirmCalled; + } + } + #endregion + + #region Public Methods + /// + /// Sets the acknowledged state of the condition. + /// + /// The system context. + /// if set to true the condition is acknowledged. + public virtual void SetAcknowledgedState( + ISystemContext context, + bool acknowledged) + { + if (acknowledged) + { + UpdateStateAfterAcknowledge(context); + } + else + { + UpdateStateAfterUnacknowledge(context); + } + } + + /// + /// Sets the confirmed state of the condition. + /// + /// The context. + /// if set to true the condition is confirmed. + public virtual void SetConfirmedState( + ISystemContext context, + bool confirmed) + { + if (confirmed) + { + UpdateStateAfterConfirm(context); + } + else + { + UpdateStateAfterUnconfirm(context); + } + } + #endregion + + #region Event Handlers + /// + /// Raised when a condition is acknowledged. + /// + /// + /// Return code can be used to cancel the operation. + /// + public ConditionAddCommentEventHandler OnAcknowledge; + + /// + /// Raised when a condition is confirmed. + /// + /// + /// Return code can be used to cancel the operation. + /// + public ConditionAddCommentEventHandler OnConfirm; + #endregion + + #region Protected Methods + /// + /// Updates the effective state for the condition. + /// + /// The context. + protected override void UpdateEffectiveState(ISystemContext context) + { + if (!this.EnabledState.Id.Value) + { + base.UpdateEffectiveState(context); + return; + } + + if (this.ConfirmedState != null) + { + if (!this.ConfirmedState.Id.Value) + { + SetEffectiveSubState(context, this.ConfirmedState.Value, DateTime.MinValue); + return; + } + } + + if (this.AckedState != null) + { + SetEffectiveSubState(context, this.AckedState.Value, DateTime.MinValue); + } + } + + /// + /// Called when the Acknowledge method is called. + /// + /// The system context. + /// The method being called. + /// The id of the object. + /// The identifier for the event which is the target for the comment. + /// The comment. + /// Any error. + protected virtual ServiceResult OnAcknowledgeCalled( + ISystemContext context, + MethodState method, + NodeId objectId, + byte[] eventId, + LocalizedText comment) + { + ServiceResult error = ProcessBeforeAcknowledge(context, eventId, comment); + + if (ServiceResult.IsGood(error)) + { + SetAcknowledgedState(context, true); + if (CanSetComment(comment)) + { + SetComment(context, comment, GetCurrentUserId(context)); + } + } + + if (this.AreEventsMonitored) + { + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + + // raise the audit event. + AuditConditionAcknowledgeEventState e = new AuditConditionAcknowledgeEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionAcknowledge", + "en-US", + "The Acknowledge method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + e.InputArguments = new PropertyState(e); + e.InputArguments.Value = new object[] { eventId, comment }; + + ReportEvent(context, e); + } + + return error; + } + + /// + /// Does any processing before adding a comment to a condition. + /// + /// The system context. + /// The identifier for the event which is the target for the comment. + /// The comment. + protected virtual ServiceResult ProcessBeforeAcknowledge( + ISystemContext context, + byte[] eventId, + LocalizedText comment) + { + if (eventId == null) + { + return StatusCodes.BadEventIdUnknown; + } + + if (!this.EnabledState.Id.Value) + { + return StatusCodes.BadConditionDisabled; + } + + if (OnAcknowledge != null) + { + try + { + return OnAcknowledge(context, this, eventId, comment); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error acknowledging a Condition."); + } + } + + return ServiceResult.Good; + } + + /// + /// Updates the condition state after enabling. + /// + /// The system context. + protected virtual void UpdateStateAfterAcknowledge(ISystemContext context) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateAcknowledged", + "en-US", + ConditionStateNames.Acknowledged); + + this.AckedState.Value = new LocalizedText(state); + this.AckedState.Id.Value = true; + + if (this.AckedState.TransitionTime != null) + { + this.AckedState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + + /// + /// Updates the condition state after disabling. + /// + /// The system context. + protected virtual void UpdateStateAfterUnacknowledge(ISystemContext context) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateUnacknowledged", + "en-US", + ConditionStateNames.Unacknowledged); + + this.AckedState.Value = new LocalizedText(state); + this.AckedState.Id.Value = false; + + if (this.AckedState.TransitionTime != null) + { + this.AckedState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + + /// + /// Called when the Confirm method is called. + /// + /// The system context. + /// The method being called. + /// The id of the object. + /// The identifier for the event which is the target for the comment. + /// The comment. + /// Any error. + protected virtual ServiceResult OnConfirmCalled( + ISystemContext context, + MethodState method, + NodeId objectId, + byte[] eventId, + LocalizedText comment) + { + ServiceResult error = ProcessBeforeConfirm(context, eventId, comment); + + if (ServiceResult.IsGood(error)) + { + SetConfirmedState(context, true); + if (CanSetComment(comment)) + { + SetComment(context, comment, GetCurrentUserId(context)); + } + } + + if (this.AreEventsMonitored) + { + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + + // raise the audit event. + AuditConditionConfirmEventState e = new AuditConditionConfirmEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionConfirm", + "en-US", + "The Confirm method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + e.InputArguments = new PropertyState(e); + e.InputArguments.Value = new object[] { eventId, comment }; + + ReportEvent(context, e); + } + + return error; + } + + /// + /// Does any processing before adding a comment to a condition. + /// + /// The system context. + /// The identifier for the event which is the target for the comment. + /// The comment. + protected virtual ServiceResult ProcessBeforeConfirm( + ISystemContext context, + byte[] eventId, + LocalizedText comment) + { + if (eventId == null) + { + return StatusCodes.BadEventIdUnknown; + } + + if (!this.EnabledState.Id.Value) + { + return StatusCodes.BadConditionDisabled; + } + + if (OnConfirm != null) + { + try + { + return OnConfirm(context, this, eventId, comment); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error confirming a Condition."); + } + } + + return ServiceResult.Good; + } + + /// + /// Updates the condition state after enabling. + /// + /// The system context. + protected virtual void UpdateStateAfterConfirm(ISystemContext context) + { + if (this.ConfirmedState != null) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateConfirmed", + "en-US", + ConditionStateNames.Confirmed); + + this.ConfirmedState.Value = new LocalizedText(state); + this.ConfirmedState.Id.Value = true; + + if (this.ConfirmedState.TransitionTime != null) + { + this.ConfirmedState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + } + + /// + /// Updates the condition state after disabling. + /// + /// The system context. + protected virtual void UpdateStateAfterUnconfirm(ISystemContext context) + { + if (this.ConfirmedState != null) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateUnconfirmed", + "en-US", + ConditionStateNames.Unconfirmed); + + this.ConfirmedState.Value = new LocalizedText(state); + this.ConfirmedState.Id.Value = false; + + if (this.ConfirmedState.TransitionTime != null) + { + this.ConfirmedState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + } + + /// + /// Determines if a comment should be added on Acknowledgement or Confirm. + /// + /// The client provided comment. + /// Boolean stating whether the comment should be set + /// + /// According to the specification for Alarms, the Acknowledgement states that + /// "If the comment field is NULL (both locale and text are empty) it will be + /// ignored and any existing comments will remain unchanged." + /// This also applies to the Confirm method, although the spec needs updating + /// (Mantis issue 6405) + /// + private bool CanSetComment(LocalizedText comment) + { + bool canSetComment = false; + + if (comment != null) + { + canSetComment = true; + + bool emptyComment = comment.Text == null || comment.Text.Length == 0; + bool emptyLocale = comment.Locale == null || comment.Locale.Length == 0; + + if (emptyComment && emptyLocale) + { + canSetComment = false; + } + } + + return canSetComment; + } + #endregion + + #region Public Interface + #endregion + + #region Private Fields + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AlarmConditionState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AlarmConditionState.cs new file mode 100644 index 00000000..648b7347 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AlarmConditionState.cs @@ -0,0 +1,786 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using System.Threading; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class AlarmConditionState + { + #region Initialization + /// + /// Called after a node is created. + /// + protected override void OnAfterCreate(ISystemContext context, NodeState node) + { + base.OnAfterCreate(context, node); + + if (this.ShelvingState != null) + { + if (this.ShelvingState.UnshelveTime != null) + { + this.ShelvingState.UnshelveTime.OnSimpleReadValue = OnReadUnshelveTime; + this.ShelvingState.UnshelveTime.MinimumSamplingInterval = 1000; + } + + this.ShelvingState.OneShotShelve.OnCallMethod = OnOneShotShelve; + this.ShelvingState.OneShotShelve.OnReadExecutable = IsOneShotShelveExecutable; + this.ShelvingState.OneShotShelve.OnReadUserExecutable = IsOneShotShelveExecutable; + + this.ShelvingState.TimedShelve.OnCall = OnTimedShelve; + this.ShelvingState.TimedShelve.OnReadExecutable = IsTimedShelveExecutable; + this.ShelvingState.TimedShelve.OnReadUserExecutable = IsTimedShelveExecutable; + + this.ShelvingState.Unshelve.OnCallMethod = OnUnshelve; + this.ShelvingState.Unshelve.OnReadExecutable = IsUnshelveExecutable; + this.ShelvingState.Unshelve.OnReadUserExecutable = IsUnshelveExecutable; + } + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (m_unshelveTimer != null) + { + m_unshelveTimer.Dispose(); + m_unshelveTimer = null; + } + if (m_updateUnshelveTimer != null) + { + m_updateUnshelveTimer.Dispose(); + m_updateUnshelveTimer = null; + } + } + + base.Dispose(disposing); + } + #endregion + + #region Public Properties - Operational + + /// + /// Defines how often to update the UnshelveTime when Shelving State is TimedShelve or OneShotShelved. + /// Defaults to 1000 ms + /// + public int UnshelveTimeUpdateRate + { + get + { + return m_unshelveTimeUpdateRate; + } + + set + { + m_unshelveTimeUpdateRate = value; + } + } + + #endregion + + #region Public Methods + /// + /// Called when one or more sub-states change state. + /// + /// The context. + /// The display name for the effective state. + /// The transition time. + public virtual void SetActiveEffectiveSubState(ISystemContext context, LocalizedText displayName, DateTime transitionTime) + { + if (this.ActiveState.EffectiveDisplayName != null) + { + this.ActiveState.EffectiveDisplayName.Value = displayName; + } + + if (this.ActiveState.EffectiveTransitionTime != null) + { + if (transitionTime != DateTime.MinValue) + { + this.ActiveState.EffectiveTransitionTime.Value = transitionTime; + } + else + { + this.ActiveState.EffectiveTransitionTime.Value = DateTime.UtcNow; + } + } + } + + /// + /// Gets when the alarm is scheduled to be unshelved. + /// + /// The unshelve time. + public DateTime UnshelveTime + { + get { return m_unshelveTime; } + } + + /// + /// Sets the active state of the condition. + /// + /// The system context. + /// if set to true the condition is active. + public virtual void SetActiveState( + ISystemContext context, + bool active) + { + TranslationInfo state = null; + + if (active) + { + state = new TranslationInfo( + "ConditionStateActive", + "en-US", + ConditionStateNames.Active); + } + else + { + // update shelving state if one shot mode. + if (this.ShelvingState != null) + { + if (m_oneShot) + { + SetShelvingState(context, false, false, 0); + } + } + + state = new TranslationInfo( + "ConditionStateInactive", + "en-US", + ConditionStateNames.Inactive); + } + + this.ActiveState.Value = new LocalizedText(state); + this.ActiveState.Id.Value = active; + + if (this.ActiveState.TransitionTime != null) + { + this.ActiveState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + + /// + /// Sets the suppressed state of the condition. + /// + /// The context. + /// if set to true the condition is suppressed. + public virtual void SetSuppressedState( + ISystemContext context, + bool suppressed) + { + if (this.SuppressedState == null) + { + return; + } + + TranslationInfo state = null; + + if (suppressed) + { + SuppressedOrShelved.Value = true; + + state = new TranslationInfo( + "ConditionStateSuppressed", + "en-US", + ConditionStateNames.Suppressed); + } + else + { + if (this.ShelvingState == null || this.ShelvingState.CurrentState.Id.Value == ObjectIds.ShelvedStateMachineType_Unshelved) + { + SuppressedOrShelved.Value = false; + } + + state = new TranslationInfo( + "ConditionStateUnsuppressed", + "en-US", + ConditionStateNames.Unsuppressed); + } + + this.SuppressedState.Value = new LocalizedText(state); + this.SuppressedState.Id.Value = suppressed; + + if (this.SuppressedState.TransitionTime != null) + { + this.SuppressedState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + + /// + /// Sets the shelving state of the condition. + /// + /// The shelving context. + /// if set to true shelved. + /// if set to true for a one shot shelve.. + /// The duration of a timed shelve. + public virtual void SetShelvingState( + ISystemContext context, + bool shelved, + bool oneShot, + double shelvingTime) + { + if (this.ShelvingState == null) + { + return; + } + + if (m_unshelveTimer != null) + { + m_unshelveTimer.Dispose(); + m_unshelveTimer = null; + } + + if (m_updateUnshelveTimer != null) + { + m_updateUnshelveTimer.Dispose(); + m_updateUnshelveTimer = null; + } + + m_unshelveTime = DateTime.MinValue; + + if (!shelved) + { + if (this.SuppressedState == null || !this.SuppressedState.Id.Value) + { + SuppressedOrShelved.Value = false; + } + + this.ShelvingState.UnshelveTime.Value = 0.0; + + this.ShelvingState.CauseProcessingCompleted(context, Methods.ShelvedStateMachineType_Unshelve); + } + else + { + SuppressedOrShelved.Value = true; + m_oneShot = oneShot; + + // Unshelve time is still valid even for OneShotShelved - See Mantis 6462 + + double maxTimeShelved = (double)int.MaxValue; + if ( this.MaxTimeShelved != null && this.MaxTimeShelved.Value > 0 ) + { + maxTimeShelved = this.MaxTimeShelved.Value; + } + + double shelveTime = maxTimeShelved; + + uint state = Methods.ShelvedStateMachineType_OneShotShelve; + if (!oneShot) + { + if (shelvingTime > 0 && shelvingTime < shelveTime) + { + shelveTime = shelvingTime; + } + state = Methods.ShelvedStateMachineType_TimedShelve; + } + + this.ShelvingState.UnshelveTime.Value = shelveTime; + m_unshelveTime = DateTime.UtcNow.AddMilliseconds((int)shelveTime); + + m_updateUnshelveTimer = new Timer(OnUnshelveTimeUpdate, context, m_unshelveTimeUpdateRate, m_unshelveTimeUpdateRate); + + m_unshelveTimer = new Timer(OnTimerExpired, context, (int)shelveTime, Timeout.Infinite); + this.ShelvingState.CauseProcessingCompleted(context, state); + } + + UpdateEffectiveState(context); + } + #endregion + + #region Event Handlers + /// + /// Raised when the alarm is shelved. + /// + /// + /// Return code can be used to cancel the operation. + /// + public AlarmConditionShelveEventHandler OnShelve; + + /// + /// Raised when the timed shelving period expires. + /// + public AlarmConditionTimedUnshelveEventHandler OnTimedUnshelve; + + /// + /// Raised periodically when the shelving state is not Unshelved to update the UnshelveTimeValue. + /// + public AlarmConditionUnshelveTimeValueEventHandler OnUpdateUnshelveTime; + + #endregion + + #region Protected Method + /// + /// Updates the effective state for the condition. + /// + /// The context. + protected override void UpdateEffectiveState(ISystemContext context) + { + if (!this.EnabledState.Id.Value) + { + base.UpdateEffectiveState(context); + return; + } + + StringBuilder builder = new StringBuilder(); + + string locale = null; + + if (this.ActiveState.Value != null) + { + locale = this.ActiveState.Value.Locale; + + if (this.ActiveState.Id.Value) + { + if (this.ActiveState.EffectiveDisplayName != null && !LocalizedText.IsNullOrEmpty(this.ActiveState.EffectiveDisplayName.Value)) + { + builder.Append(this.ActiveState.EffectiveDisplayName.Value); + } + else + { + builder.Append(this.ActiveState.Value); + } + } + else + { + builder.Append(this.ActiveState.Value); + } + } + + LocalizedText suppressedState = null; + + if (this.SuppressedState != null) + { + if (this.SuppressedState.Id.Value) + { + suppressedState = this.SuppressedState.Value; + } + } + + if (this.ShelvingState != null) + { + if (this.ShelvingState.CurrentState.Id.Value != ObjectIds.ShelvedStateMachineType_Unshelved) + { + suppressedState = this.ShelvingState.CurrentState.Value; + } + } + + if (suppressedState != null) + { + builder.Append(" | "); + builder.Append(suppressedState); + } + + LocalizedText ackState = null; + + if (ConfirmedState != null) + { + if (!this.ConfirmedState.Id.Value) + { + ackState = this.ConfirmedState.Value; + } + } + + if (AckedState != null) + { + if (!this.AckedState.Id.Value) + { + ackState = this.AckedState.Value; + } + } + + if (ackState != null) + { + builder.Append(" | "); + builder.Append(ackState); + } + + LocalizedText effectiveState = new LocalizedText(locale, builder.ToString()); + + SetEffectiveSubState(context, effectiveState, DateTime.MinValue); + } + + /// + /// Checks whether the OneShotShelve method is executable. + /// + protected ServiceResult OnReadUnshelveTime( + ISystemContext context, + NodeState node, + ref object value) + { + double delta = 0; + + if (m_unshelveTime != DateTime.MinValue) + { + delta = (m_unshelveTime - DateTime.UtcNow).TotalMilliseconds; + + if ( delta < 0 ) + { + m_unshelveTime = DateTime.MinValue; + } + } + + value = delta; + + return ServiceResult.Good; + } + + /// + /// Checks whether the OneShotShelve method is executable. + /// + protected ServiceResult IsOneShotShelveExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_OneShotShelve, false); + return ServiceResult.Good; + } + + /// + /// Handles the OneShotShelve method. + /// + protected virtual ServiceResult OnOneShotShelve( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + ServiceResult error = null; + + try + { + if (!this.EnabledState.Id.Value) + { + return error = StatusCodes.BadConditionDisabled; + } + + if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_OneShotShelve, false)) + { + return error = StatusCodes.BadConditionAlreadyShelved; + } + + if (OnShelve == null) + { + return error = StatusCodes.BadNotSupported; + } + + error = OnShelve(context, this, true, true, 0); + + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + } + finally + { + if (this.AreEventsMonitored) + { + AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionOneShotShelve", + "en-US", + "The OneShotShelve method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + ReportEvent(context, e); + } + } + + return error; + } + + /// + /// Checks whether the TimedShelve method is executable. + /// + protected ServiceResult IsTimedShelveExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_TimedShelve, false); + return ServiceResult.Good; + } + + /// + /// Handles the TimedShelve method. + /// + protected virtual ServiceResult OnTimedShelve( + ISystemContext context, + MethodState method, + NodeId objectId, + double shelvingTime) + { + ServiceResult error = null; + + try + { + if (!this.EnabledState.Id.Value) + { + return error = StatusCodes.BadConditionDisabled; + } + + if (shelvingTime <= 0 || (this.MaxTimeShelved != null && shelvingTime > this.MaxTimeShelved.Value)) + { + return error = StatusCodes.BadShelvingTimeOutOfRange; + } + + if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_TimedShelve, false)) + { + return error = StatusCodes.BadConditionAlreadyShelved; + } + + if (OnShelve == null) + { + return error = StatusCodes.BadNotSupported; + } + + error = OnShelve(context, this, true, false, shelvingTime); + + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + } + finally + { + if (this.AreEventsMonitored) + { + AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionTimedShelve", + "en-US", + "The TimedShelve method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + e.InputArguments = new PropertyState(e); + e.InputArguments.Value = new object[] { shelvingTime }; + + ReportEvent(context, e); + } + } + + return error; + } + + /// + /// Checks whether the Unshelve method is executable. + /// + protected ServiceResult IsUnshelveExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_Unshelve, false); + return ServiceResult.Good; + } + + /// + /// Handles the Unshelve method. + /// + protected virtual ServiceResult OnUnshelve( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + ServiceResult error = null; + + try + { + if (!this.EnabledState.Id.Value) + { + return error = StatusCodes.BadConditionDisabled; + } + + if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_Unshelve, false)) + { + return error = StatusCodes.BadConditionNotShelved; + } + + if (OnShelve == null) + { + return error = StatusCodes.BadNotSupported; + } + + error = OnShelve(context, this, false, false, 0); + + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + } + finally + { + // raise the audit event. + if (this.AreEventsMonitored) + { + AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionUnshelve", + "en-US", + "The Unshelve method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + ReportEvent(context, e); + } + } + + return error; + } + #endregion + + #region Private Methods + /// + /// Called when timed shelve period expires. + /// + private void OnTimerExpired(object state) + { + try + { + if (OnTimedUnshelve != null) + { + OnTimedUnshelve((ISystemContext)state, this); + } + this.OnUnshelveTimeUpdate(state); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error unshelving alarm."); + } + } + + /// + /// Called when shelved state is not Unshelved to update the UnshelveTime value. + /// + private void OnUnshelveTimeUpdate(object state) + { + try + { + ISystemContext context = (ISystemContext)state; + object unshelveTimeObject = new object(); + OnReadUnshelveTime(context, null, ref unshelveTimeObject); + double unshelveTime = (double)unshelveTimeObject; + if (unshelveTime != this.ShelvingState.UnshelveTime.Value) + { + this.ShelvingState.UnshelveTime.Value = unshelveTime; + this.ClearChangeMasks(context, true); + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error updating UnshelveTime."); + } + } + + #endregion + + #region Private Fields + private DateTime m_unshelveTime; + private bool m_oneShot; + private Timer m_unshelveTimer; + private Timer m_updateUnshelveTimer; + private int m_unshelveTimeUpdateRate = 1000; + #endregion + } + + /// + /// Used to recieve notifications when a alarm is shelved or unshelved. + /// + /// The current system context. + /// The alarm that raised the event. + /// True if the condition is being shelved. + /// True if the condition is being until it goes inactive (i.e. OneShotShelve). + /// How long to shelve the condition. + public delegate ServiceResult AlarmConditionShelveEventHandler( + ISystemContext context, + AlarmConditionState alarm, + bool shelving, + bool oneShot, + double shelvingTime); + + /// + /// Used to recieve notifications when the timed shelve period elapses for an alarm. + /// + /// The current system context. + /// The alarm that raised the event. + public delegate ServiceResult AlarmConditionTimedUnshelveEventHandler( + ISystemContext context, + AlarmConditionState alarm); + + /// + /// Used to receive notifications when the shelving state is either OneShotShelved or TimedShelved. + /// Updates the value of the UnshelveTime + /// + /// The current system context. + /// The alarm that raised the event. + public delegate ServiceResult AlarmConditionUnshelveTimeValueEventHandler( + ISystemContext context, + AlarmConditionState alarm); + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AuditEventState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AuditEventState.cs new file mode 100644 index 00000000..d4290379 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/AuditEventState.cs @@ -0,0 +1,73 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class AuditEventState + { + #region Initialization + /// + /// Initializes a new event. + /// + /// The current system context. + /// The source of the event. + /// The severity for the event. + /// The default message. + /// Whether the operation that caused the event succeeded. + /// When the operation started. + public virtual void Initialize( + ISystemContext context, + NodeState source, + EventSeverity severity, + LocalizedText message, + bool status, + DateTime actionTimestamp) + { + base.Initialize(context, source, severity, message); + + m_status = new PropertyState(this); + m_status.Value = status; + + if (actionTimestamp != DateTime.MinValue) + { + m_actionTimeStamp = new PropertyState(this); + m_actionTimeStamp.Value = actionTimestamp; + } + + if (context.NamespaceUris != null) + { + m_serverId = new PropertyState(this); + m_serverId.Value = context.NamespaceUris.GetString(1); + } + + if (context.AuditEntryId != null) + { + m_clientAuditEntryId = new PropertyState(this); + m_clientAuditEntryId.Value = context.AuditEntryId; + } + + if (context.UserIdentity != null) + { + m_clientUserId = new PropertyState(this); + m_clientUserId.Value = context.UserIdentity.DisplayName; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs new file mode 100644 index 00000000..c358cfe0 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs @@ -0,0 +1,119 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class BaseEventState + { + #region Initialization + /// + /// Initializes a new event. + /// + /// The current system context. + /// The source of the event. + /// The severity for the event. + /// The default message. + public virtual void Initialize( + ISystemContext context, + NodeState source, + EventSeverity severity, + LocalizedText message) + { + m_eventId = new PropertyState(this); + m_eventId.Value = Guid.NewGuid().ToByteArray(); + + m_eventType = new PropertyState(this); + m_eventType.Value = GetDefaultTypeDefinitionId(context.NamespaceUris); + + TypeDefinitionId = m_eventType.Value; + + if (source != null) + { + if (!NodeId.IsNull(source.NodeId)) + { + m_sourceNode = new PropertyState(this); + m_sourceNode.Value = source.NodeId; + } + + if (!QualifiedName.IsNull(source.BrowseName)) + { + m_sourceName = new PropertyState(this); + m_sourceName.Value = source.BrowseName.Name; + } + } + + m_time = new PropertyState(this); + m_time.Value = DateTime.UtcNow; + + m_receiveTime = new PropertyState(this); + m_receiveTime.Value = DateTime.UtcNow; + + m_severity = new PropertyState(this); + m_severity.Value = (ushort)severity; + + m_message = new PropertyState(this); + m_message.Value = message; + } + #endregion + } + + /// + /// The severity for an event. + /// + /// + /// Event severities can have any value between 1 and 1000. This enumeration provides default values. + /// + public enum EventSeverity : int + { + /// + /// The highest possible severity. + /// + Max = 1000, + + /// + /// The event has high severity. + /// + High = 900, + + /// + /// The event has medium high severity. + /// + MediumHigh = 700, + + /// + /// The event has medium severity. + /// + Medium = 500, + + /// + /// The event has medium-low severity. + /// + MediumLow = 300, + + /// + /// The event has low severity. + /// + Low = 100, + + /// + /// The lowest possible severity. + /// + Min = 1 + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseInstanceState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseInstanceState.cs new file mode 100644 index 00000000..c2dc6f57 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseInstanceState.cs @@ -0,0 +1,751 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Reflection; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// The base class for all instance nodes. + /// + public class BaseInstanceState : NodeState, IFilterTarget + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + protected BaseInstanceState(NodeClass nodeClass, NodeState parent) : base(nodeClass) + { + m_parent = parent; + } + #endregion + + #region Initialization + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + BaseInstanceState instance = source as BaseInstanceState; + + if (instance != null) + { + m_referenceTypeId = instance.m_referenceTypeId; + m_typeDefinitionId = instance.m_typeDefinitionId; + m_modellingRuleId = instance.m_modellingRuleId; + m_numericId = instance.m_numericId; + } + + base.Initialize(context, source); + } + + /// + /// Returns the id of the default type definition node for the instance. + /// + /// The namespace uris. + /// + protected virtual NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) + { + return null; + } + #endregion + + #region Public Members + /// + /// The parent node. + /// + public NodeState Parent + { + get { return m_parent; } + internal set { m_parent = value; } + } + + /// + /// Makes a copy of the node and all children. + /// + /// + /// A new object that is a copy of this instance. + /// + public new object MemberwiseClone() + { + BaseInstanceState clone = new BaseInstanceState(this.NodeClass, this.Parent); + + if (m_children != null) + { + clone.m_children = new List(m_children.Count); + + for (int ii = 0; ii < m_children.Count; ii++) + { + BaseInstanceState child = (BaseInstanceState)m_children[ii].MemberwiseClone(); + clone.m_children.Add(child); + } + } + + clone.m_changeMasks = NodeStateChangeMasks.None; + + return clone; + } + + /// + /// Returns the id of the default type definition node for the instance. + /// + /// The type definition id. + public virtual NodeId GetDefaultTypeDefinitionId(ISystemContext context) + { + return GetDefaultTypeDefinitionId(context.NamespaceUris); + } + + /// + /// Gets a display path for the node. + /// + public string GetDisplayPath() + { + return GetDisplayPath(0, '.'); + } + + /// + /// Gets a display text for the node. + /// + public string GetDisplayText() + { + return GetNonNullText(this); + } + + /// + /// Gets a display path for the node. + /// + public string GetDisplayPath(int maxLength, char seperator) + { + string name = GetNonNullText(this); + + if (m_parent == null) + { + return name; + } + + StringBuilder buffer = new StringBuilder(); + + if (maxLength > 2) + { + NodeState parent = m_parent; + List names = new List(); + + while (parent != null) + { + BaseInstanceState instance = parent as BaseInstanceState; + + if (instance == null) + { + break; + } + + parent = instance.Parent; + + string parentName = GetNonNullText(parent); + names.Add(parentName); + + if (names.Count == maxLength-2) + { + break; + } + } + + for (int ii = names.Count-1; ii >= 0; ii--) + { + buffer.Append(names[ii]); + buffer.Append(seperator); + } + } + + buffer.Append(GetNonNullText(m_parent)); + buffer.Append(seperator); + buffer.Append(name); + + return buffer.ToString(); + } + + /// + /// Returns non-null text for the node. + /// + private string GetNonNullText(NodeState node) + { + if (node == null) + { + return "(null)"; + } + + if (node.DisplayName == null) + { + if (node.BrowseName != null) + { + return node.BrowseName.Name; + } + else + { + return node.NodeClass.ToString(); + } + } + + return node.DisplayName.Text; + } + + /// + /// A numeric identifier for the instance that is unique within the parent. + /// + public uint NumericId + { + get { return m_numericId; } + set { m_numericId = value; } + } + + /// + /// The type of reference from the parent node to the instance. + /// + public NodeId ReferenceTypeId + { + get + { + return m_referenceTypeId; + } + + set + { + if (!Object.ReferenceEquals(m_referenceTypeId, value)) + { + ChangeMasks |= NodeStateChangeMasks.References; + } + + m_referenceTypeId = value; + } + } + + /// + /// The identifier for the type definition node. + /// + public NodeId TypeDefinitionId + { + get + { + return m_typeDefinitionId; + } + + set + { + if (!Object.ReferenceEquals(m_typeDefinitionId, value)) + { + ChangeMasks |= NodeStateChangeMasks.References; + } + + m_typeDefinitionId = value; + } + } + + /// + /// The modelling rule assigned to the instance. + /// + public NodeId ModellingRuleId + { + get + { + return m_modellingRuleId; + } + + set + { + if (!Object.ReferenceEquals(m_modellingRuleId, value)) + { + ChangeMasks |= NodeStateChangeMasks.References; + } + + m_modellingRuleId = value; + } + } + + /// + /// Sets the flag which indicates whether event are being monitored for the instance and its children. + /// + /// The system context. + /// The event to report. + public override void ReportEvent(ISystemContext context, IFilterTarget e) + { + base.ReportEvent(context, e); + + // recusively notify the parent. + if (m_parent != null) + { + m_parent.ReportEvent(context, e); + } + } + + /// + /// Initializes the instance from an event notification. + /// + /// The context. + /// The fields selected for the event notification. + /// The event notification. + /// + /// This method creates components based on the browse paths in the event field and sets + /// the NodeId or Value based on values in the event notification. + /// + public void Update( + ISystemContext context, + SimpleAttributeOperandCollection fields, + EventFieldList e) + { + for (int ii = 0; ii < fields.Count; ii++) + { + SimpleAttributeOperand field = fields[ii]; + object value = e.EventFields[ii].Value; + + // check if value provided. + if (value == null) + { + continue; + } + + // extract the NodeId for the event. + if (field.BrowsePath.Count == 0) + { + if (field.AttributeId == Attributes.NodeId) + { + this.NodeId = value as NodeId; + continue; + } + } + + // extract the type definition for the event. + if (field.BrowsePath.Count == 1) + { + if (field.AttributeId == Attributes.Value) + { + if (field.BrowsePath[0] == BrowseNames.EventType) + { + m_typeDefinitionId = value as NodeId; + continue; + } + } + } + + // save value for child node. + NodeState parent = this; + + for (int jj = 0; jj < field.BrowsePath.Count; jj++) + { + // find a predefined child identified by the browse name. + BaseInstanceState child = parent.CreateChild(context, field.BrowsePath[jj]); + + // create a placeholder for unknown children. + if (child == null) + { + if (field.AttributeId == Attributes.Value) + { + child = new BaseDataVariableState(parent); + } + else + { + child = new BaseObjectState(parent); + } + + parent.AddChild(child); + } + + // ensure the browse name is set. + if (QualifiedName.IsNull(child.BrowseName)) + { + child.BrowseName = field.BrowsePath[jj]; + } + + // ensure the display name is set. + if (LocalizedText.IsNullOrEmpty(child.DisplayName)) + { + child.DisplayName = child.BrowseName.Name; + } + + // process next element in path. + if (jj < field.BrowsePath.Count-1) + { + parent = child; + continue; + } + + // save the variable value. + if (field.AttributeId == Attributes.Value) + { + BaseVariableState variable = child as BaseVariableState; + + if (variable != null && field.AttributeId == Attributes.Value) + { + try + { + variable.WrappedValue = e.EventFields[ii]; + } + catch (Exception) + { + variable.Value = null; + } + } + + break; + } + + // save the node id. + child.NodeId = value as NodeId; + } + } + } + + /// + /// Sets the minimum sampling interval for the node an all of its child variables.. + /// + /// The context. + /// The minimum sampling interval. + public void SetMinimumSamplingInterval(ISystemContext context, double minimumSamplingInterval) + { + BaseVariableState variable = this as BaseVariableState; + + if (variable != null) + { + variable.MinimumSamplingInterval = minimumSamplingInterval; + } + + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + variable = children[ii] as BaseVariableState; + + if (variable != null) + { + variable.MinimumSamplingInterval = minimumSamplingInterval; + } + + children[ii].SetMinimumSamplingInterval(context, minimumSamplingInterval); + } + } + #endregion + + #region IFilterTarget Members + /// + public virtual bool IsTypeOf(FilterContext context, NodeId typeDefinitionId) + { + if (!NodeId.IsNull(typeDefinitionId)) + { + if (!context.TypeTree.IsTypeOf(TypeDefinitionId, typeDefinitionId)) + { + return false; + } + } + + return true; + } + + /// + public virtual object GetAttributeValue( + FilterContext context, + NodeId typeDefinitionId, + IList relativePath, + uint attributeId, + NumericRange indexRange) + { + // check the type definition. + if (!NodeId.IsNull(typeDefinitionId) && typeDefinitionId != ObjectTypes.BaseEventType) + { + if (!context.TypeTree.IsTypeOf(TypeDefinitionId, typeDefinitionId)) + { + return null; + } + } + + // read the child attribute. + DataValue dataValue = new DataValue(); + + ServiceResult result = ReadChildAttribute( + null, + relativePath, + 0, + attributeId, + dataValue); + + if (ServiceResult.IsBad(result)) + { + return null; + } + + // apply any index range. + object value = dataValue.Value; + + if (value != null) + { + result = indexRange.ApplyRange(ref value); + + if (ServiceResult.IsBad(result)) + { + return null; + } + } + + // return the result. + return value; + } + #endregion + + #region Overridden Methods + /// + /// Exports a copy of the node to a node table. + /// + /// The context. + /// The node to update with the values from the instance. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + if (this.Parent != null) + { + NodeId referenceTypeId = this.ReferenceTypeId; + + if (NodeId.IsNull(referenceTypeId)) + { + referenceTypeId = ReferenceTypeIds.HasComponent; + } + + node.ReferenceTable.Add(referenceTypeId, true, this.Parent.NodeId); + } + + if (!NodeId.IsNull(this.TypeDefinitionId)) + { + node.ReferenceTable.Add(ReferenceTypeIds.HasTypeDefinition, false, this.TypeDefinitionId); + } + + if (!NodeId.IsNull(this.ModellingRuleId)) + { + node.ReferenceTable.Add(ReferenceTypeIds.HasModellingRule, false, this.ModellingRuleId); + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (!NodeId.IsNull(m_referenceTypeId)) + { + encoder.WriteNodeId("ReferenceTypeId", m_referenceTypeId); + } + + if (!NodeId.IsNull(m_typeDefinitionId)) + { + encoder.WriteNodeId("TypeDefinitionId", m_typeDefinitionId); + } + + if (!NodeId.IsNull(m_modellingRuleId)) + { + encoder.WriteNodeId("ModellingRuleId", m_modellingRuleId); + } + + if (m_numericId != 0) + { + encoder.WriteUInt32("NumericId", m_numericId); + } + + encoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (!NodeId.IsNull(m_referenceTypeId)) + { + attributesToSave |= AttributesToSave.ReferenceTypeId; + } + + if (!NodeId.IsNull(m_typeDefinitionId)) + { + attributesToSave |= AttributesToSave.TypeDefinitionId; + } + + if (!NodeId.IsNull(m_modellingRuleId)) + { + attributesToSave |= AttributesToSave.ModellingRuleId; + } + + if (m_numericId != 0) + { + attributesToSave |= AttributesToSave.NumericId; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.ReferenceTypeId) != 0) + { + encoder.WriteNodeId(null, m_referenceTypeId); + } + + if ((attributesToSave & AttributesToSave.TypeDefinitionId) != 0) + { + encoder.WriteNodeId(null, m_typeDefinitionId); + } + + if ((attributesToSave & AttributesToSave.ModellingRuleId) != 0) + { + encoder.WriteNodeId(null, m_modellingRuleId); + } + + if ((attributesToSave & AttributesToSave.NumericId) != 0) + { + encoder.WriteUInt32(null, m_numericId); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.ReferenceTypeId) != 0) + { + m_referenceTypeId = decoder.ReadNodeId(null); + } + + if ((attibutesToLoad & AttributesToSave.TypeDefinitionId) != 0) + { + m_typeDefinitionId = decoder.ReadNodeId(null); + } + + if ((attibutesToLoad & AttributesToSave.ModellingRuleId) != 0) + { + m_modellingRuleId = decoder.ReadNodeId(null); + } + + if ((attibutesToLoad & AttributesToSave.NumericId) != 0) + { + m_numericId = decoder.ReadUInt32(null); + } + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("ReferenceTypeId")) + { + ReferenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + } + + if (decoder.Peek("TypeDefinitionId")) + { + TypeDefinitionId = decoder.ReadNodeId("TypeDefinitionId"); + } + + if (decoder.Peek("ModellingRuleId")) + { + ModellingRuleId = decoder.ReadNodeId("ModellingRuleId"); + } + + if (decoder.Peek("NumericId")) + { + NumericId = decoder.ReadUInt32("NumericId"); + } + + decoder.PopNamespace(); + } + + /// + /// Populates the browser with references that meet the criteria. + /// + /// The context for the system being accessed. + /// The browser to populate. + protected override void PopulateBrowser(ISystemContext context, NodeBrowser browser) + { + base.PopulateBrowser(context, browser); + + if (!NodeId.IsNull(m_typeDefinitionId)) + { + if (browser.IsRequired(ReferenceTypeIds.HasTypeDefinition, false)) + { + browser.Add(ReferenceTypeIds.HasTypeDefinition, false, m_typeDefinitionId); + } + } + + if (!NodeId.IsNull(m_modellingRuleId)) + { + if (browser.IsRequired(ReferenceTypeIds.HasModellingRule, false)) + { + browser.Add(ReferenceTypeIds.HasModellingRule, false, m_modellingRuleId); + } + } + + if (m_parent != null) + { + if (!NodeId.IsNull(m_referenceTypeId)) + { + if (browser.IsRequired(m_referenceTypeId, true)) + { + browser.Add(m_referenceTypeId, true, m_parent); + } + } + } + } + #endregion + + #region Private Fields + private NodeState m_parent; + private NodeId m_referenceTypeId; + private NodeId m_typeDefinitionId; + private NodeId m_modellingRuleId; + private uint m_numericId; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseInstanceStateSnapshot.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseInstanceStateSnapshot.cs new file mode 100644 index 00000000..a709e847 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseInstanceStateSnapshot.cs @@ -0,0 +1,310 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// A lightweight snapshot of an instance node. + /// + public class InstanceStateSnapshot : IFilterTarget + { + #region Public Interface + /// + /// Gets or sets a handled associated with the snapshot. + /// + /// The handle. + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Initializes the snapshot from an instance. + /// + /// The context. + /// The state. + public void Initialize( + ISystemContext context, + BaseInstanceState state) + { + m_typeDefinitionId = state.TypeDefinitionId; + m_snapshot = CreateChildNode(context, state); + } + + /// + /// Sets the value for a child. Adds it if it does not already exist. + /// + /// The BrowseName. + /// The node class. + /// The value. + public void SetChildValue( + QualifiedName browseName, + NodeClass nodeClass, + object value) + { + SetChildValue(m_snapshot, browseName, nodeClass, value); + } + #endregion + + #region IFilterTarget Members + /// + /// Returns true if the snapshort is an instance of the specified type. + /// + /// The context to use when checking the type definition. + /// The type of the instance. + /// + /// True if the object is an instance of the specified type. + /// + public bool IsTypeOf(FilterContext context, NodeId typeDefinitionId) + { + if (!NodeId.IsNull(typeDefinitionId)) + { + if (!context.TypeTree.IsTypeOf(m_typeDefinitionId, typeDefinitionId)) + { + return false; + } + } + + return true; + } + + /// + /// Returns the value of the attribute for the specified child. + /// + /// The context to use when evaluating the operand. + /// The type of the instance. + /// The path from the instance to the node which defines the attribute. + /// The attribute to return. + /// The sub-set of an array value to return. + /// + /// The attribute value. Returns null if the attribute does not exist. + /// + public object GetAttributeValue( + FilterContext context, + NodeId typeDefinitionId, + IList relativePath, + uint attributeId, + NumericRange indexRange) + { + if (!NodeId.IsNull(typeDefinitionId)) + { + if (!context.TypeTree.IsTypeOf(m_typeDefinitionId, typeDefinitionId)) + { + return null; + } + } + + object value = GetAttributeValue( + m_snapshot, + relativePath, + 0, + attributeId); + + if (indexRange != NumericRange.Empty) + { + StatusCode error = indexRange.ApplyRange(ref value); + + if (StatusCode.IsBad(error)) + { + value = null; + } + } + + return value; + } + #endregion + + #region ChildNode Class + /// + /// Stores the key attributes of a child node. + /// + private class ChildNode + { + public NodeClass NodeClass; + public QualifiedName BrowseName; + public object Value; + public List Children; + } + #endregion + + #region Private Methods + /// + /// Sets the value for a child. Adds it if it does not already exist. + /// + /// The node. + /// The BrowseName. + /// The node class. + /// The value. + private void SetChildValue( + ChildNode node, + QualifiedName browseName, + NodeClass nodeClass, + object value) + { + ChildNode child = null; + + if (node.Children != null) + { + for (int ii = 0; ii < node.Children.Count; ii++) + { + child = node.Children[ii]; + + if (child.BrowseName == browseName) + { + break; + } + + child = null; + } + } + else + { + node.Children = new List(); + } + + if (child == null) + { + child = new ChildNode(); + node.Children.Add(child); + } + + child.BrowseName = browseName; + child.NodeClass = nodeClass; + child.Value = value; + } + + /// + /// Creates a snapshot of a node. + /// + /// The context. + /// The state. + /// A snapshot of a node. + private ChildNode CreateChildNode(ISystemContext context, BaseInstanceState state) + { + ChildNode node = new ChildNode(); + + node.NodeClass = state.NodeClass; + node.BrowseName = state.BrowseName; + + BaseVariableState variable = state as BaseVariableState; + + if (variable != null) + { + if (!StatusCode.IsBad(variable.StatusCode)) + { + node.Value = Utils.Clone(variable.Value); + } + } + + BaseObjectState instance = state as BaseObjectState; + + if (instance != null) + { + node.Value = instance.NodeId; + } + + node.Children = CreateChildNodes(context, state); + + return node; + } + + /// + /// Recusively stores the the current value for Object and Variable child nodes. + /// + /// The context. + /// The state. + /// The list of the nodes. + private List CreateChildNodes(ISystemContext context, BaseInstanceState state) + { + List children = new List(); + state.GetChildren(context, children); + + List nodes = new List(); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + if (child == null || (child.NodeClass != NodeClass.Object && child.NodeClass != NodeClass.Variable)) + { + continue; + } + + ChildNode node = CreateChildNode(context, child); + nodes.Add(node); + } + + return nodes; + } + + /// + /// Returns the value of the attribute for the specified child. + /// + /// The node. + /// The relative path. + /// The index. + /// The attribute id. + /// The value of the attribute for the specified child. + private object GetAttributeValue( + ChildNode node, + IList relativePath, + int index, + uint attributeId) + { + if (index >= relativePath.Count) + { + if (attributeId == Attributes.NodeId) + { + return node.Value; + } + + if (node.NodeClass == NodeClass.Variable && attributeId == Attributes.Value) + { + return node.Value; + } + + if (attributeId == Attributes.NodeClass) + { + return node.NodeClass; + } + + if (attributeId == Attributes.BrowseName) + { + return node.BrowseName; + } + + return null; + } + + for (int ii = 0; ii < node.Children.Count; ii++) + { + if (node.Children[ii].BrowseName == relativePath[index]) + { + return GetAttributeValue(node.Children[ii], relativePath, index+1, attributeId); + } + } + + return null; + } + #endregion + + #region Private Fields + private NodeId m_typeDefinitionId; + private ChildNode m_snapshot; + private object m_handle; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseObjectState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseObjectState.cs new file mode 100644 index 00000000..3f456fea --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseObjectState.cs @@ -0,0 +1,366 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Reflection; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// The base class for all object nodes. + /// + public class BaseObjectState : BaseInstanceState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public BaseObjectState(NodeState parent) : base(NodeClass.Object, parent) + { + m_eventNotifier = EventNotifiers.None; + + if (parent != null) + { + ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasComponent; + } + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new BaseObjectState(parent); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SymbolicName = Utils.Format("{0}_Instance1", Opc.Ua.BrowseNames.BaseObjectType); + NodeId = null; + BrowseName = new QualifiedName(SymbolicName, 1); + DisplayName = SymbolicName; + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + TypeDefinitionId = GetDefaultTypeDefinitionId(context.NamespaceUris); + NumericId = Opc.Ua.ObjectTypes.BaseObjectType; + EventNotifier = EventNotifiers.None; + } + + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + BaseObjectState instance = source as BaseObjectState; + + if (instance != null) + { + m_eventNotifier = instance.m_eventNotifier; + } + + base.Initialize(context, source); + } + + /// + /// Returns the id of the default type definition node for the instance. + /// + protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) + { + return ObjectTypes.BaseObjectType; + } + #endregion + + #region Public Members + /// + /// The inverse name for the reference. + /// + public byte EventNotifier + { + get + { + return m_eventNotifier; + } + + set + { + if (m_eventNotifier != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_eventNotifier = value; + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the EventNotifier attribute is read. + /// + public NodeAttributeEventHandler OnReadEventNotifier; + + /// + /// Raised when the EventNotifier attribute is written. + /// + public NodeAttributeEventHandler OnWriteEventNotifier; + #endregion + + #region Serialization Functions + /// + /// Exports a copt of the node to a node table. + /// + /// The context. + /// The node. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + ObjectNode objectNode = node as ObjectNode; + + if (objectNode != null) + { + objectNode.EventNotifier = this.EventNotifier; + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (m_eventNotifier != 0) + { + encoder.WriteByte("EventNotifier", m_eventNotifier); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("EventNotifier")) + { + EventNotifier = decoder.ReadByte("EventNotifier"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (m_eventNotifier != EventNotifiers.None) + { + attributesToSave |= AttributesToSave.EventNotifier; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.EventNotifier) != 0) + { + encoder.WriteByte(null, m_eventNotifier); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.EventNotifier) != 0) + { + m_eventNotifier = decoder.ReadByte(null); + } + } + #endregion + + #region Read Support Functions + /// + /// Reads the value for any non-value attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.EventNotifier: + { + byte eventNotifier = m_eventNotifier; + + if (OnReadEventNotifier != null) + { + result = OnReadEventNotifier(context, this, ref eventNotifier); + } + + if (ServiceResult.IsGood(result)) + { + value = eventNotifier; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.EventNotifier: + { + byte? eventNotifierRef = value as byte?; + + if (eventNotifierRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.EventNotifier) == 0) + { + return StatusCodes.BadNotWritable; + } + + byte eventNotifier = eventNotifierRef.Value; + + if (OnWriteEventNotifier != null) + { + result = OnWriteEventNotifier(context, this, ref eventNotifier); + } + + if (ServiceResult.IsGood(result)) + { + EventNotifier = eventNotifier; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + #endregion + + #region Private Fields + private byte m_eventNotifier; + #endregion + } + + /// + /// The base class for all folder nodes. + /// + public class FolderState : BaseObjectState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public FolderState(NodeState parent) : base( parent) + { + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SymbolicName = Utils.Format("{0}_Instance1", Opc.Ua.BrowseNames.FolderType); + NodeId = null; + BrowseName = new QualifiedName(SymbolicName, 1); + DisplayName = SymbolicName; + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + TypeDefinitionId = GetDefaultTypeDefinitionId(context.NamespaceUris); + NumericId = Opc.Ua.ObjectTypes.FolderType; + EventNotifier = EventNotifiers.None; + } + + /// + /// Returns the id of the default type definition node for the instance. + /// + protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) + { + return ObjectTypes.FolderType; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseObjectTypeState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseObjectTypeState.cs new file mode 100644 index 00000000..302d8132 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseObjectTypeState.cs @@ -0,0 +1,96 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Reflection; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// The base class for all object type nodes. + /// + public class BaseObjectTypeState : BaseTypeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public BaseObjectTypeState() : base(NodeClass.ObjectType) + { + } + + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SuperTypeId = Opc.Ua.NodeId.Create(Opc.Ua.ObjectTypes.BaseObjectType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + NodeId = Opc.Ua.NodeId.Create(Opc.Ua.ObjectTypes.BaseObjectType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + BrowseName = Opc.Ua.QualifiedName.Create(Opc.Ua.BrowseNames.BaseObjectType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + DisplayName = new LocalizedText(Opc.Ua.BrowseNames.BaseObjectType, String.Empty, Opc.Ua.BrowseNames.BaseObjectType); + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + IsAbstract = false; + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new BaseObjectTypeState(); + } + #endregion + } + + /// + /// The base class for all object type nodes. + /// + public class FolderTypeState : BaseObjectTypeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public FolderTypeState() + { + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SuperTypeId = Opc.Ua.NodeId.Create(Opc.Ua.ObjectTypes.FolderType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + NodeId = Opc.Ua.NodeId.Create(Opc.Ua.ObjectTypes.FolderType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + BrowseName = Opc.Ua.QualifiedName.Create(Opc.Ua.BrowseNames.FolderType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + DisplayName = new LocalizedText(Opc.Ua.BrowseNames.FolderType, String.Empty, Opc.Ua.BrowseNames.FolderType); + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + IsAbstract = false; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseTypeState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseTypeState.cs new file mode 100644 index 00000000..518e161e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseTypeState.cs @@ -0,0 +1,417 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Reflection; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// The base class for all type nodes. + /// + public class BaseTypeState : NodeState + { + #region Constructors + /// + /// Initializes the type with its defalt attribute values. + /// + protected BaseTypeState(NodeClass nodeClass) : base(nodeClass) + { + m_isAbstract = false; + } + #endregion + + #region Initialization + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + BaseTypeState type = source as BaseTypeState; + + if (type != null) + { + m_superTypeId = type.m_superTypeId; + m_isAbstract = type.m_isAbstract; + } + + base.Initialize(context, source); + } + #endregion + + #region Public Members + /// + /// Makes a copy of the node and all children. + /// + /// + /// A new object that is a copy of this instance. + /// + public new object MemberwiseClone() + { + BaseTypeState clone = new BaseTypeState(this.NodeClass); + + if (m_children != null) + { + clone.m_children = new List(m_children.Count); + + for (int ii = 0; ii < m_children.Count; ii++) + { + BaseInstanceState child = (BaseInstanceState)m_children[ii].MemberwiseClone(); + clone.m_children.Add(child); + } + } + + clone.m_changeMasks = NodeStateChangeMasks.None; + + return clone; + } + + /// + /// The identifier for the supertype node. + /// + public NodeId SuperTypeId + { + get + { + return m_superTypeId; + } + + set + { + if (!Object.ReferenceEquals(m_superTypeId, value)) + { + ChangeMasks |= NodeStateChangeMasks.References; + } + + m_superTypeId = value; + } + } + + /// + /// Whether the type is an abstract type. + /// + public bool IsAbstract + { + get + { + return m_isAbstract; + } + + set + { + if (m_isAbstract != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_isAbstract = value; + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the IsAbstract attribute is read. + /// + public NodeAttributeEventHandler OnReadIsAbstract; + + /// + /// Raised when the IsAbstract attribute is written. + /// + public NodeAttributeEventHandler OnWriteIsAbstract; + #endregion + + #region Serialization Functions + /// + /// Exports a copt of the node to a node table. + /// + /// The context. + /// The node. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + if (!NodeId.IsNull(this.SuperTypeId)) + { + node.ReferenceTable.Add(ReferenceTypeIds.HasSubtype, true, this.SuperTypeId); + } + + switch (this.NodeClass) + { + case NodeClass.ObjectType: + { + ((ObjectTypeNode)node).IsAbstract = IsAbstract; + break; + } + + case NodeClass.VariableType: + { + ((VariableTypeNode)node).IsAbstract = IsAbstract; + break; + } + + case NodeClass.DataType: + { + ((DataTypeNode)node).IsAbstract = IsAbstract; + break; + } + + case NodeClass.ReferenceType: + { + ((ReferenceTypeNode)node).IsAbstract = IsAbstract; + break; + } + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (!NodeId.IsNull(m_superTypeId)) + { + encoder.WriteNodeId("SuperTypeId", m_superTypeId); + } + + if (m_isAbstract) + { + encoder.WriteBoolean("IsAbstract", m_isAbstract); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("SuperTypeId")) + { + SuperTypeId = decoder.ReadNodeId("SuperTypeId"); + } + + if (decoder.Peek("IsAbstract")) + { + IsAbstract = decoder.ReadBoolean("IsAbstract"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (!NodeId.IsNull(m_superTypeId)) + { + attributesToSave |= AttributesToSave.SuperTypeId; + } + + if (m_isAbstract) + { + attributesToSave |= AttributesToSave.IsAbstract; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.SuperTypeId) != 0) + { + encoder.WriteNodeId(null, m_superTypeId); + } + + if ((attributesToSave & AttributesToSave.IsAbstract) != 0) + { + encoder.WriteBoolean(null, m_isAbstract); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.SuperTypeId) != 0) + { + m_superTypeId = decoder.ReadNodeId(null); + } + + if ((attibutesToLoad & AttributesToSave.IsAbstract) != 0) + { + m_isAbstract = decoder.ReadBoolean(null); + } + } + #endregion + + #region Read Support Functions + /// + /// Reads the value for any non-value attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.IsAbstract: + { + bool isAbstract = m_isAbstract; + + if (OnReadIsAbstract != null) + { + result = OnReadIsAbstract(context, this, ref isAbstract); + } + + if (ServiceResult.IsGood(result)) + { + value = isAbstract; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.IsAbstract: + { + bool? isAbstractRef = value as bool?; + + if (isAbstractRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.IsAbstract) == 0) + { + return StatusCodes.BadNotWritable; + } + + bool isAbstract = isAbstractRef.Value; + + if (OnWriteIsAbstract != null) + { + result = OnWriteIsAbstract(context, this, ref isAbstract); + } + + if (ServiceResult.IsGood(result)) + { + IsAbstract = isAbstract; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + #endregion + + #region Overridden Methods + /// + /// Populates the browser with references that meet the criteria. + /// + /// The context for the current operation. + /// The browser to populate. + protected override void PopulateBrowser(ISystemContext context, NodeBrowser browser) + { + base.PopulateBrowser(context, browser); + + if (!NodeId.IsNull(m_superTypeId)) + { + if (browser.IsRequired(ReferenceTypeIds.HasSubtype, true)) + { + browser.Add(ReferenceTypeIds.HasSubtype, true, m_superTypeId); + } + } + + // use the type table to find the subtypes. + if (context.TypeTable != null && this.NodeId != null) + { + if (browser.IsRequired(ReferenceTypeIds.HasSubtype, false)) + { + IList subtypeIds = context.TypeTable.FindSubTypes(this.NodeId); + + for (int ii = 0; ii < subtypeIds.Count; ii++) + { + browser.Add(ReferenceTypeIds.HasSubtype, false, subtypeIds[ii]); + } + } + } + } + #endregion + + #region Private Fields + private NodeId m_superTypeId; + private bool m_isAbstract; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseVariableState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseVariableState.cs new file mode 100644 index 00000000..7459b577 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseVariableState.cs @@ -0,0 +1,2645 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Reflection; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// The base class for all variable nodes. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public abstract class BaseVariableState : BaseInstanceState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + /// The parent node. + public BaseVariableState(NodeState parent) : base(NodeClass.Variable, parent) + { + m_timestamp = DateTime.MinValue; + m_accessLevel = m_userAccessLevel = AccessLevels.CurrentRead; + m_copyPolicy = VariableCopyPolicy.CopyOnRead; + } + #endregion + + #region Initialization + /// + /// Initializes the instance from another instance. + /// + /// The description how access the system containing the data. + /// A source node to be copied to this instance. + protected override void Initialize(ISystemContext context, NodeState source) + { + BaseVariableState instance = source as BaseVariableState; + + if (instance != null) + { + m_value = ExtractValueFromVariant(context, instance.m_value, false); + m_timestamp = instance.m_timestamp; + m_statusCode = instance.m_statusCode; + m_dataType = instance.m_dataType; + m_valueRank = instance.m_valueRank; + m_arrayDimensions = null; + m_accessLevel = instance.m_accessLevel; + m_userAccessLevel = instance.m_userAccessLevel; + m_minimumSamplingInterval = instance.m_minimumSamplingInterval; + m_historizing = instance.m_historizing; + + if (instance.m_arrayDimensions != null) + { + m_arrayDimensions = new ReadOnlyList(instance.m_arrayDimensions, true); + } + + m_value = ExtractValueFromVariant(context, m_value, false); + } + + base.Initialize(context, source); + } + + /// + /// If overridden returns the id of the default type definition node for the instance. + /// + /// The namespace uris. + /// Returns the id of the default type definition or if not overridden + protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) + { + return VariableTypes.BaseVariableType; + } + + /// + /// If overridden returns the id of the default data type node for the instance. + /// + /// The namespace uris. + /// + /// The id of the default data type node for the instance or if not overridden. + /// + protected virtual NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) + { + return DataTypes.BaseDataType; + } + + /// + /// If overridden returns the id of the default value rank for the instance. + /// + /// + /// The id of the default value rank or if not overridden. + /// + protected virtual int GetDefaultValueRank() + { + return ValueRanks.Any; + } + + /// + /// Converts a values contained in a variant to the value defined for the variable. + /// + [Obsolete("Should use the version that takes a ISystemContext (pass null if ISystemContext is not available).")] + protected virtual object ExtractValueFromVariant(object value, bool throwOnError) + { + return ExtractValueFromVariant(null, value, throwOnError); + } + + /// + /// Converts a values contained in a variant to the value defined for the variable. + /// + /// The system context. + /// The value. + /// if set to true throw an exception on error. + /// If not overridden returns . + protected virtual object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + return value; + } + + /// + /// Returns the value after checking if the variable is null. + /// + /// The framework type of value contained in the . + /// The variable. + /// + /// The value contained by the or the default value for the datatype if the variable is null. + /// + public static T GetValue(BaseDataVariableState variable) + { + if (variable == null) + { + return default(T); + } + + return variable.Value; + } + + /// + /// Returns the value after checking if the property is null. + /// + /// The type of value contained in the property. + /// The property. + /// + /// The value. The default value for the datatype if the property is null. + /// + public static T GetValue(PropertyState property) + { + if (property == null) + { + return default(T); + } + + return property.Value; + } + + /// + /// Converts a values contained in a variant to the value defined for the variable. + /// + [Obsolete("Should use the version that takes a ISystemContext (pass null if ISystemContext is not available).")] + public static object ExtractValueFromVariant(object value, bool throwOnError) + { + return ExtractValueFromVariant(null, value, throwOnError); + } + + /// + /// Converts a values contained in a variant to the value defined for the variable. + /// + /// The framework type of value contained in this instance. + /// The context. + /// The value. + /// if set to true throws the on error, otherwise default value for is returned . + /// + /// The value of the type. + /// + /// + /// If throwOnError is false the default value for the type is returned if the value is not valid. + /// + /// If cannot convert . + public static object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + if (value == null) + { + return default(T); + } + + if (typeof(T).IsInstanceOfType(value)) + { + return value; + } + + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + if (typeof(T).IsInstanceOfType(extension.Body)) + { + return extension.Body; + } + + if (typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(typeof(T).GetTypeInfo())) + { + return DecodeExtensionObject(context, typeof(T), extension, throwOnError); + } + + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert {0} to {1}.", value.GetType().Name, typeof(T).Name); + } + + return default(T); + } + + Type elementType = typeof(T).GetElementType(); + + if (elementType != null) + { + // check for array of extensions. + IList extensions = value as IList; + + if (extensions != null && typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(elementType.GetTypeInfo())) + { + Array encodeables = Array.CreateInstance(elementType, extensions.Count); + + for (int ii = 0; ii < extensions.Count; ii++) + { + if (ExtensionObject.IsNull(extensions[ii])) + { + encodeables.SetValue(null, ii); + continue; + } + + if (elementType.IsInstanceOfType(extensions[ii].Body)) + { + encodeables.SetValue(extensions[ii].Body, ii); + continue; + } + + object element = DecodeExtensionObject(context, elementType, extensions[ii], throwOnError); + + if (element != null) + { + encodeables.SetValue(element, ii); + continue; + } + + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert ExtensionObject to {0}. Index = {1}", elementType.Name, ii); + } + } + + return encodeables; + } + + // check for array of variants. + IList variants = value as IList; + + if (variants != null) + { + // only support conversions to object[]. + if (elementType != typeof(object)) + { + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert {0} to {1}.", value.GetType().Name, typeof(T).Name); + } + } + + // allocate and copy. + object[] objects = new object[variants.Count]; + + for (int ii = 0; ii < variants.Count; ii++) + { + objects[ii] = variants[ii].Value; + } + + return objects; + } + + // check for array of uuids. + if (typeof(Guid).GetTypeInfo().IsAssignableFrom(elementType.GetTypeInfo())) + { + IList uuids = value as IList; + + if (uuids != null) + { + Guid[] guids = new Guid[uuids.Count]; + + for (int ii = 0; ii < uuids.Count; ii++) + { + guids[ii] = (Guid)uuids[ii]; + } + + return guids; + } + } + + // check for array of enumeration. + if (typeof(Enum).GetTypeInfo().IsAssignableFrom(elementType.GetTypeInfo())) + { + IList values = value as IList; + + if (values != null) + { + Array enums = Array.CreateInstance(elementType, values.Count); + + for (int ii = 0; ii < values.Count; ii++) + { + enums.SetValue(values[ii], ii); + } + + return enums; + } + } + } + + if (typeof(Guid).GetTypeInfo().IsAssignableFrom(typeof(T).GetTypeInfo())) + { + Uuid? uuid = value as Uuid?; + + if (uuid != null) + { + return (Guid)uuid.Value; + } + } + + if (typeof(Enum).GetTypeInfo().IsAssignableFrom(typeof(T).GetTypeInfo())) + { + int? number = value as int?; + + if (number != null) + { + return (T)(object)number.Value; + } + } + + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert {0} to {1}.", value.GetType().Name, typeof(T).Name); + } + + return default(T); + } + + /// + /// Decodes the contents of an extension object. + /// + /// The context (uses ServiceMessageContext.GlobalContext if null). + /// The type that the ExtensionObject must be converted to. + /// The ExtensionObject to convert. + /// Whether to throw an exception on error. + /// The decoded instance. Null on error. + public static object DecodeExtensionObject(ISystemContext context, Type targetType, ExtensionObject extension, bool throwOnError) + { + if (targetType.IsInstanceOfType(extension.Body)) + { + return extension.Body; + } + + IEncodeable instance = Activator.CreateInstance(targetType) as IEncodeable; + + if (instance != null) + { + IDecoder decoder = null; + + ServiceMessageContext messageContext = ServiceMessageContext.GlobalContext; + + if (context != null) + { + messageContext = new ServiceMessageContext(); + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + } + + if (extension.Encoding == ExtensionObjectEncoding.Binary) + { + decoder = new BinaryDecoder(extension.Body as byte[], messageContext); + } + + else if (extension.Encoding == ExtensionObjectEncoding.Xml) + { + decoder = new XmlDecoder(extension.Body as XmlElement, messageContext); + } + + if (decoder != null) + { + try + { + instance.Decode(decoder); + return instance; + } + catch (Exception e) + { + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert ExtensionObject to {0}. Error = {1}", targetType.Name, e.Message); + } + } + } + } + + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert ExtensionObject to {0}.", targetType.Name); + } + + return null; + } + + /// + /// Checks the data type of a value before casting it to the type . + /// + /// The framework type of value contained in the variable. + /// The value. + /// if set to true is thrown on error. + /// Returns or default for + /// if it is impossible to cast the value or the value is null and for the type returns true. + public static T CheckTypeBeforeCast(object value, bool throwOnError) + { + if ((value == null && typeof(T).GetTypeInfo().IsValueType) || (value != null && !typeof(T).IsInstanceOfType(value))) + { + if (throwOnError) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Cannot convert '{0}' to a {1}.", value, typeof(T).Name); + } + + return default(T); + } + + return (T)value; + } + #endregion + + #region Public Members + /// + /// The value of the variable. + /// + public object Value + { + get + { + return m_value; + } + + set + { + if (value == null && IsValueType) + { + value = ExtractValueFromVariant(null, value, false); + } + + if (!Object.ReferenceEquals(m_value, value)) + { + ChangeMasks |= NodeStateChangeMasks.Value; + } + + m_value = value; + } + } + + /// + /// Whether the value can be set to null. + /// + public bool IsValueType + { + get { return m_isValueType; } + set { m_isValueType = value; } + } + + /// + /// The value of the variable as a Variant. + /// + /// The wrapped value as a Variant. + [DataMember(Name = "Value", Order = 0, IsRequired = false, EmitDefaultValue = false)] + public Variant WrappedValue + { + get + { + return new Variant(m_value); + } + + set + { + Value = ExtractValueFromVariant(null, value.Value, false); + } + } + + /// + /// The timestamp associated with the variable value. + /// + /// The timestamp. + public DateTime Timestamp + { + get + { + return m_timestamp; + } + + set + { + if (m_timestamp != value) + { + ChangeMasks |= NodeStateChangeMasks.Value; + } + + m_timestamp = value; + } + } + + /// + /// The status code associated with the variable value. + /// + /// The status code. + public StatusCode StatusCode + { + get + { + return m_statusCode; + } + + set + { + if (m_statusCode != value) + { + ChangeMasks |= NodeStateChangeMasks.Value; + } + + m_statusCode = value; + } + } + + /// + /// The behavior to use when reading or writing all or part of the object. + /// + /// The copy policy that specifies the policies to use when handling reads and write to value. + /// + /// This value is ignored if the OnReadValue or OnWriteValue event handlers are provided. + /// + public VariableCopyPolicy CopyPolicy + { + get { return m_copyPolicy; } + set { m_copyPolicy = value; } + } + + /// + /// The data type for the variable value. + /// + /// The type of the data . + [DataMember(Name = "DataType", Order = 1, IsRequired = false, EmitDefaultValue = false)] + public NodeId DataType + { + get + { + return m_dataType; + } + + set + { + if (!Object.ReferenceEquals(m_dataType, value)) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_dataType = value; + } + } + + /// + /// The number of array dimensions permitted for the variable value. + /// + /// The value rank. + /// Indicates whether the DataType is an array and how many dimensions the array has. + [DataMember(Name = "ValueRank", Order = 2, IsRequired = false, EmitDefaultValue = false)] + public int ValueRank + { + get + { + return m_valueRank; + } + + set + { + if (m_valueRank != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_valueRank = value; + } + } + + /// + /// The number of dimensions for an array values with one or more fixed dimensions. + /// + /// The array dimensions. + /// + /// If the Value Rank does not identify an array of a specific dimension (i.e. ValueRank <= 0) + /// the Array Dimensions attribute can either be set to null or the attribute is missing. This behaviour is vendor-specific. + /// If the Value Rank attribute specifies an array of a specific dimension (i.e. ValueRank > 0) then the Array Dimensions + /// attribute shall be specified in the table defining the Variable. + /// + public ReadOnlyList ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + if (!Object.ReferenceEquals(m_arrayDimensions, value)) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_arrayDimensions = value; + } + } + + /// + /// The type of access available for the variable. + /// + /// The access level. + [DataMember(Name = "AccessLevel", Order = 4, IsRequired = false, EmitDefaultValue = false)] + public byte AccessLevel + { + get + { + return (byte)(m_accessLevel & 0xFF); + } + + set + { + if (AccessLevel != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + // set first 8 bits of AccessLevelEx + m_accessLevel = (m_accessLevel & 0xFFFFFF00) | value; + } + } + + /// + /// The type of access granted to the current user. + /// + /// The user access level. + [DataMember(Name = "UserAccessLevel", Order = 5, IsRequired = false, EmitDefaultValue = false)] + public byte UserAccessLevel + { + get + { + return m_userAccessLevel; + } + + set + { + if (m_userAccessLevel != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_userAccessLevel = value; + } + } + + /// + /// The minimum sampling interval supported by the variable. + /// + /// The minimum sampling interval. + [DataMember(Name = "MinimumSamplingInterval", Order = 6, IsRequired = false, EmitDefaultValue = false)] + public double MinimumSamplingInterval + { + get + { + return m_minimumSamplingInterval; + } + + set + { + if (m_minimumSamplingInterval != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_minimumSamplingInterval = value; + } + } + + /// + /// Whether the server is archiving the value of the variable. + /// + /// true if historizing; otherwise, false. + [DataMember(Name = "Historizing", Order = 7, IsRequired = false, EmitDefaultValue = false)] + public bool Historizing + { + get + { + return m_historizing; + } + + set + { + if (m_historizing != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_historizing = value; + } + } + + /// + /// A bit mask specifying how the value may be accessed. + /// + /// The extended access level. + [DataMember(Name = "AccessLevelEx", Order = 8, IsRequired = false, EmitDefaultValue = false)] + public uint AccessLevelEx + { + get + { + return m_accessLevel; + } + + set + { + if (m_accessLevel != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_accessLevel = value; + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the Value attribute is read. + /// + public NodeValueSimpleEventHandler OnSimpleReadValue; + + /// + /// Raised when the Value attribute is written. + /// + public NodeValueSimpleEventHandler OnSimpleWriteValue; + + /// + /// Raised when the Value attribute is read. + /// + public NodeValueEventHandler OnReadValue; + + /// + /// Raised when the Value attribute is written. + /// + public NodeValueEventHandler OnWriteValue; + + /// + /// Raised when the DataType attribute is read. + /// + public NodeAttributeEventHandler OnReadDataType; + + /// + /// Raised when the DataType attribute is written. + /// + public NodeAttributeEventHandler OnWriteDataType; + + /// + /// Raised when the ValueRank attribute is read. + /// + public NodeAttributeEventHandler OnReadValueRank; + + /// + /// Raised when the ValueRank attribute is written. + /// + public NodeAttributeEventHandler OnWriteValueRank; + + /// + /// Raised when the ArrayDimensions attribute is read. + /// + public NodeAttributeEventHandler> OnReadArrayDimensions; + + /// + /// Raised when the ArrayDimensions attribute is written. + /// + public NodeAttributeEventHandler> OnWriteArrayDimensions; + + /// + /// Raised when the AccessLevel attribute is read. + /// + public NodeAttributeEventHandler OnReadAccessLevel; + + /// + /// Raised when the AccessLevel attribute is written. + /// + public NodeAttributeEventHandler OnWriteAccessLevel; + + /// + /// Raised when the UserAccessLevel attribute is read. + /// + public NodeAttributeEventHandler OnReadUserAccessLevel; + + /// + /// Raised when the UserAccessLevel attribute is written. + /// + public NodeAttributeEventHandler OnWriteUserAccessLevel; + + /// + /// Raised when the MinimumSamplingInterval attribute is read. + /// + public NodeAttributeEventHandler OnReadMinimumSamplingInterval; + + /// + /// Raised when the MinimumSamplingInterval attribute is written. + /// + public NodeAttributeEventHandler OnWriteMinimumSamplingInterval; + + /// + /// Raised when the Historizing attribute is read. + /// + public NodeAttributeEventHandler OnReadHistorizing; + + /// + /// Raised when the Historizing attribute is written. + /// + public NodeAttributeEventHandler OnWriteHistorizing; + + /// + /// Raised when the AccessLevelEx attribute is read. + /// + public NodeAttributeEventHandler OnReadAccessLevelEx; + + /// + /// Raised when the AccessLevelEx attribute is written. + /// + public NodeAttributeEventHandler OnWriteAccessLevelEx; + #endregion + + #region Serialization Functions + /// + /// Exports a copy of the node to a node provided the type is compatible with . + /// + /// The context that describes how access the system containing the data. + /// The node to be a copy of this instance. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + VariableNode variableNode = node as VariableNode; + + if (variableNode != null) + { + try + { + variableNode.Value = new Variant(Utils.Clone(this.Value)); + + variableNode.DataType = this.DataType; + variableNode.ValueRank = this.ValueRank; + variableNode.ArrayDimensions = null; + + if (this.ArrayDimensions != null) + { + variableNode.ArrayDimensions = new UInt32Collection(this.ArrayDimensions); + } + + variableNode.AccessLevel = this.AccessLevel; + variableNode.UserAccessLevel = this.UserAccessLevel; + variableNode.MinimumSamplingInterval = this.MinimumSamplingInterval; + variableNode.Historizing = this.Historizing; + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error exporting node:" + e.Message); + } + } + } + + /// + /// Saves the attributes from this instance to the . + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (m_value != null) + { + encoder.WriteVariant("Value", WrappedValue); + } + + if (StatusCode != StatusCodes.Good) + { + encoder.WriteStatusCode("StatusCode", StatusCode); + } + + if (!NodeId.IsNull(DataType)) + { + encoder.WriteNodeId("DataType", DataType); + } + + if (ValueRank != ValueRanks.Any) + { + encoder.WriteInt32("ValueRank", ValueRank); + } + + if (ArrayDimensions != null) + { + encoder.WriteString("ArrayDimensions", ArrayDimensionsToXml(ArrayDimensions)); + } + + if (AccessLevel != 0) + { + encoder.WriteByte("AccessLevel", AccessLevel); + } + + if (UserAccessLevel != 0) + { + encoder.WriteByte("UserAccessLevel", UserAccessLevel); + } + + if (MinimumSamplingInterval != 0) + { + encoder.WriteDouble("MinimumSamplingInterval", MinimumSamplingInterval); + } + + if (Historizing) + { + encoder.WriteBoolean("Historizing", Historizing); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the . + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("Value")) + { + WrappedValue = decoder.ReadVariant("Value"); + } + + if (decoder.Peek("Timestamp")) + { + Timestamp = decoder.ReadDateTime("Timestamp"); + } + + if (decoder.Peek("StatusCode")) + { + StatusCode = decoder.ReadStatusCode("StatusCode"); + } + else + { + StatusCode = StatusCodes.Good; + } + + if (decoder.Peek("DataType")) + { + DataType = decoder.ReadNodeId("DataType"); + } + + if (decoder.Peek("ValueRank")) + { + ValueRank = decoder.ReadInt32("ValueRank"); + } + + // ensure the value has a suitable default value. + if (m_value == null && m_valueRank == ValueRanks.Scalar) + { + bool isValueType = IsValueType; + + if (!isValueType) + { + BuiltInType builtInType = DataTypes.GetBuiltInType(m_dataType, context.TypeTable); + + if (TypeInfo.IsValueType(builtInType)) + { + isValueType = true; + } + } + + if (isValueType) + { + m_value = TypeInfo.GetDefaultValue(m_dataType, m_valueRank, context.TypeTable); + } + } + + if (decoder.Peek("ArrayDimensions")) + { + ArrayDimensions = ArrayDimensionsFromXml(decoder.ReadString("ArrayDimensions")); + } + + if (decoder.Peek("AccessLevel")) + { + AccessLevel = decoder.ReadByte("AccessLevel"); + } + + if (decoder.Peek("UserAccessLevel")) + { + UserAccessLevel = decoder.ReadByte("UserAccessLevel"); + } + + if (decoder.Peek("MinimumSamplingInterval")) + { + MinimumSamplingInterval = decoder.ReadDouble("MinimumSamplingInterval"); + } + + if (decoder.Peek("Historizing")) + { + Historizing = decoder.ReadBoolean("Historizing"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// + /// A mask that specifies the available attributes. + /// + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (m_value != null) + { + attributesToSave |= AttributesToSave.Value; + } + + if (m_statusCode != StatusCodes.Good) + { + attributesToSave |= AttributesToSave.StatusCode; + } + + if (!NodeId.IsNull(m_dataType)) + { + attributesToSave |= AttributesToSave.DataType; + } + + if (m_valueRank != ValueRanks.Any) + { + attributesToSave |= AttributesToSave.ValueRank; + } + + if (m_arrayDimensions != null) + { + attributesToSave |= AttributesToSave.ArrayDimensions; + } + + if (m_accessLevel != 0) + { + attributesToSave |= AttributesToSave.AccessLevel; + } + + if (m_userAccessLevel != 0) + { + attributesToSave |= AttributesToSave.UserAccessLevel; + } + + if (m_minimumSamplingInterval != 0) + { + attributesToSave |= AttributesToSave.MinimumSamplingInterval; + } + + if (m_historizing) + { + attributesToSave |= AttributesToSave.Historizing; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context that describes how access the system containing the data.. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.Value) != 0) + { + encoder.WriteVariant(null, WrappedValue); + } + + if ((attributesToSave & AttributesToSave.StatusCode) != 0) + { + encoder.WriteStatusCode(null, m_statusCode); + } + + if ((attributesToSave & AttributesToSave.DataType) != 0) + { + encoder.WriteNodeId(null, m_dataType); + } + + if ((attributesToSave & AttributesToSave.ValueRank) != 0) + { + encoder.WriteInt32(null, m_valueRank); + } + + if ((attributesToSave & AttributesToSave.ArrayDimensions) != 0) + { + encoder.WriteUInt32Array(null, m_arrayDimensions); + } + + if ((attributesToSave & AttributesToSave.AccessLevel) != 0) + { + encoder.WriteByte(null, AccessLevel); + } + + if ((attributesToSave & AttributesToSave.UserAccessLevel) != 0) + { + encoder.WriteByte(null, m_userAccessLevel); + } + + if ((attributesToSave & AttributesToSave.MinimumSamplingInterval) != 0) + { + encoder.WriteDouble(null, m_minimumSamplingInterval); + } + + if ((attributesToSave & AttributesToSave.Historizing) != 0) + { + encoder.WriteBoolean(null, m_historizing); + } + } + + /// + /// Updates the attributes of this instance from the . + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.Value) != 0) + { + WrappedValue = decoder.ReadVariant(null); + } + + if ((attibutesToLoad & AttributesToSave.StatusCode) != 0) + { + m_statusCode = decoder.ReadStatusCode(null); + } + + if ((attibutesToLoad & AttributesToSave.DataType) != 0) + { + m_dataType = decoder.ReadNodeId(null); + } + + if ((attibutesToLoad & AttributesToSave.ValueRank) != 0) + { + m_valueRank = decoder.ReadInt32(null); + } + + if ((attibutesToLoad & AttributesToSave.ArrayDimensions) != 0) + { + UInt32Collection arrayDimensions = decoder.ReadUInt32Array(null); + + if (arrayDimensions != null && arrayDimensions.Count > 0) + { + m_arrayDimensions = new ReadOnlyList(arrayDimensions); + } + else + { + m_arrayDimensions = null; + } + } + + if ((attibutesToLoad & AttributesToSave.AccessLevel) != 0) + { + AccessLevel = decoder.ReadByte(null); + } + + if ((attibutesToLoad & AttributesToSave.UserAccessLevel) != 0) + { + m_userAccessLevel = decoder.ReadByte(null); + } + + if ((attibutesToLoad & AttributesToSave.MinimumSamplingInterval) != 0) + { + m_minimumSamplingInterval = decoder.ReadDouble(null); + } + + if ((attibutesToLoad & AttributesToSave.Historizing) != 0) + { + m_historizing = decoder.ReadBoolean(null); + } + } + + /// + /// Converts the array dimensions to an XML string. + /// + /// The array dimensions. + /// The XML string value. + internal static string ArrayDimensionsToXml(IList arrayDimensions) + { + if (arrayDimensions == null) + { + return null; + } + + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < arrayDimensions.Count; ii++) + { + if (buffer.Length > 0) + { + buffer.Append(','); + } + + buffer.Append(arrayDimensions[ii]); + } + + return buffer.ToString(); + } + + /// + /// Returns a list of the array dimensions. + /// + /// The XML string value. + /// The array dimensions list. + internal static ReadOnlyList ArrayDimensionsFromXml(string value) + { + if (String.IsNullOrEmpty(value)) + { + return null; + } + + string[] fields = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + if (fields == null || fields.Length == 0) + { + return null; + } + + uint[] arrayDimensions = new uint[fields.Length]; + + for (int ii = 0; ii < arrayDimensions.Length; ii++) + { + try + { + arrayDimensions[ii] = Convert.ToUInt32(fields[ii]); + } + catch + { + arrayDimensions[ii] = 0; + } + } + + return new ReadOnlyList(arrayDimensions); + } + #endregion + + #region Overrridden Methods + /// + /// Recusively sets the status code and timestamp for the node and all child variables. + /// + /// The context. + /// The status code. + /// The timestamp. Not updated if set to DateTime.Min + public override void SetStatusCode(ISystemContext context, StatusCode statusCode, DateTime timestamp) + { + base.SetStatusCode(context, statusCode, timestamp); + + StatusCode = statusCode; + + if (timestamp != DateTime.MinValue) + { + Timestamp = timestamp; + } + } + #endregion + + #region Read Support Functions + + /// + /// Reads the value for any non-value attribute. + /// + /// The context. + /// The attribute idetifier . + /// The returned value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.DataType: + { + NodeId dataType = m_dataType; + + if (OnReadDataType != null) + { + result = OnReadDataType(context, this, ref dataType); + } + + if (ServiceResult.IsGood(result)) + { + value = dataType; + } + + return result; + } + + case Attributes.ValueRank: + { + int valueRank = m_valueRank; + + if (OnReadValueRank != null) + { + result = OnReadValueRank(context, this, ref valueRank); + } + + if (ServiceResult.IsGood(result)) + { + value = valueRank; + } + + return result; + } + + case Attributes.ArrayDimensions: + { + IList arrayDimensions = m_arrayDimensions; + + if (OnReadArrayDimensions != null) + { + result = OnReadArrayDimensions(context, this, ref arrayDimensions); + } + + if (ServiceResult.IsGood(result)) + { + value = arrayDimensions; + } + + return result; + } + + case Attributes.AccessLevel: + { + byte accessLevel = AccessLevel; + + if (OnReadAccessLevel != null) + { + result = OnReadAccessLevel(context, this, ref accessLevel); + } + + if (ServiceResult.IsGood(result)) + { + value = accessLevel; + } + + return result; + } + + case Attributes.AccessLevelEx: + { + uint accessLevelEx = m_accessLevel; + + if (OnReadAccessLevelEx != null) + { + result = OnReadAccessLevelEx(context, this, ref accessLevelEx); + } + + if (ServiceResult.IsGood(result)) + { + value = accessLevelEx; + } + + return result; + } + + case Attributes.UserAccessLevel: + { + byte userAccessLevel = m_userAccessLevel; + + if (OnReadUserAccessLevel != null) + { + result = OnReadUserAccessLevel(context, this, ref userAccessLevel); + } + + if (ServiceResult.IsGood(result)) + { + value = userAccessLevel; + } + + return result; + } + + case Attributes.MinimumSamplingInterval: + { + double minimumSamplingInterval = m_minimumSamplingInterval; + + if (OnReadMinimumSamplingInterval != null) + { + result = OnReadMinimumSamplingInterval(context, this, ref minimumSamplingInterval); + } + + if (ServiceResult.IsGood(result)) + { + value = minimumSamplingInterval; + } + + return result; + } + + case Attributes.Historizing: + { + bool historizing = m_historizing; + + if (OnReadHistorizing != null) + { + result = OnReadHistorizing(context, this, ref historizing); + } + + if (ServiceResult.IsGood(result)) + { + value = historizing; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + + /// + /// Reads the value for the value attribute. + /// + /// The context. + /// The index range. + /// The data encoding. + /// The value to be returned. + /// The source timestamp. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected override ServiceResult ReadValueAttribute( + ISystemContext context, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref DateTime sourceTimestamp) + { + // check the access level for the variable. + if ((m_accessLevel & AccessLevels.CurrentRead) == 0) + { + return StatusCodes.BadNotReadable; + } + + if ((m_userAccessLevel & AccessLevels.CurrentRead) == 0) + { + return StatusCodes.BadUserAccessDenied; + } + + // ensure a value timestamp exists. + if (m_timestamp == DateTime.MinValue) + { + m_timestamp = DateTime.UtcNow; + } + + value = m_value; + sourceTimestamp = m_timestamp; + StatusCode statusCode = m_statusCode; + + ServiceResult result = null; + + // check if the read behavior has been overridden. + if (OnReadValue != null) + { + result = OnReadValue( + context, + this, + indexRange, + dataEncoding, + ref value, + ref statusCode, + ref sourceTimestamp); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // return the correct status code if no errors. + if (ServiceResult.IsGood(result) && statusCode != StatusCodes.Good) + { + result = statusCode; + } + + return result; + } + + // use default behavior. + if (OnSimpleReadValue != null) + { + result = OnSimpleReadValue( + context, + this, + ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + } + + // apply the index range and encoding. + result = ApplyIndexRangeAndDataEncoding(context, indexRange, dataEncoding, ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // copy returned value. + if (m_copyPolicy == VariableCopyPolicy.CopyOnRead || m_copyPolicy == VariableCopyPolicy.Always) + { + value = Utils.Clone(value); + } + + // return the correct status code if no errors. + if (ServiceResult.IsGood(result) && statusCode != StatusCodes.Good) + { + result = statusCode; + } + + return result; + } + + /// + /// Applys the index range and the data encoding to the value. + /// + /// The context. + /// The index range. + /// The data encoding. + /// The value. + /// + public static ServiceResult ApplyIndexRangeAndDataEncoding( + ISystemContext context, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value) + { + ServiceResult result = null; + + // apply index range. + if (indexRange != NumericRange.Empty) + { + result = indexRange.ApplyRange(ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + } + + // apply data encoding. + if (!QualifiedName.IsNull(dataEncoding)) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + result = EncodeableObject.ApplyDataEncoding(messageContext, dataEncoding, ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + } + + return ServiceResult.Good; + } + + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + /// The context. + /// The attribute id. + /// The value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.DataType: + { + NodeId dataType = value as NodeId; + + if (dataType == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.DataType) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteDataType != null) + { + result = OnWriteDataType(context, this, ref dataType); + } + + if (ServiceResult.IsGood(result)) + { + DataType = dataType; + } + + return result; + } + + case Attributes.ValueRank: + { + int? valueRankRef = value as int?; + + if (valueRankRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.ValueRank) == 0) + { + return StatusCodes.BadNotWritable; + } + + int valueRank = valueRankRef.Value; + + if (OnWriteValueRank != null) + { + result = OnWriteValueRank(context, this, ref valueRank); + } + + if (ServiceResult.IsGood(result)) + { + ValueRank = valueRank; + } + + return result; + } + + case Attributes.ArrayDimensions: + { + IList arrayDimensions = value as IList; + + if ((WriteMask & AttributeWriteMask.ArrayDimensions) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteArrayDimensions != null) + { + result = OnWriteArrayDimensions(context, this, ref arrayDimensions); + } + + if (ServiceResult.IsGood(result)) + { + if (arrayDimensions != null) + { + ArrayDimensions = new ReadOnlyList(arrayDimensions); + } + else + { + ArrayDimensions = null; + } + } + + return result; + } + + case Attributes.AccessLevel: + { + byte? accessLevelRef = value as byte?; + + if (accessLevelRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.AccessLevel) == 0) + { + return StatusCodes.BadNotWritable; + } + + byte accessLevel = accessLevelRef.Value; + + if (OnWriteAccessLevel != null) + { + result = OnWriteAccessLevel(context, this, ref accessLevel); + } + + if (ServiceResult.IsGood(result)) + { + AccessLevel = accessLevel; + } + + return result; + } + + case Attributes.UserAccessLevel: + { + byte? userAccessLevelRef = value as byte?; + + if (userAccessLevelRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.UserAccessLevel) == 0) + { + return StatusCodes.BadNotWritable; + } + + byte userAccessLevel = userAccessLevelRef.Value; + + if (OnWriteUserAccessLevel != null) + { + result = OnWriteUserAccessLevel(context, this, ref userAccessLevel); + } + + if (ServiceResult.IsGood(result)) + { + UserAccessLevel = userAccessLevel; + } + + return result; + } + + case Attributes.MinimumSamplingInterval: + { + double? minimumSamplingIntervalRef = value as double?; + + if (minimumSamplingIntervalRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.MinimumSamplingInterval) == 0) + { + return StatusCodes.BadNotWritable; + } + + double minimumSamplingInterval = minimumSamplingIntervalRef.Value; + + if (OnWriteMinimumSamplingInterval != null) + { + result = OnWriteMinimumSamplingInterval(context, this, ref minimumSamplingInterval); + } + + if (ServiceResult.IsGood(result)) + { + MinimumSamplingInterval = minimumSamplingInterval; + } + + return result; + } + + case Attributes.Historizing: + { + bool? historizingRef = value as bool?; + + if (historizingRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.Historizing) == 0) + { + return StatusCodes.BadNotWritable; + } + + bool historizing = historizingRef.Value; + + if (OnWriteHistorizing != null) + { + result = OnWriteHistorizing(context, this, ref historizing); + } + + if (ServiceResult.IsGood(result)) + { + Historizing = historizing; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + + /// + /// Write the value for the value attribute. + /// + /// The context. + /// The index range. + /// The value. + /// The status code. + /// The source timestamp. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected override ServiceResult WriteValueAttribute( + ISystemContext context, + NumericRange indexRange, + object value, + StatusCode statusCode, + DateTime sourceTimestamp) + { + ServiceResult result = null; + + // check the access level for the variable. + if ((m_accessLevel & AccessLevels.CurrentWrite) == 0) + { + return StatusCodes.BadNotWritable; + } + + if ((m_userAccessLevel & AccessLevels.CurrentWrite) == 0) + { + return StatusCodes.BadUserAccessDenied; + } + + // check if the write behavior has been overridden. + if (OnWriteValue != null) + { + result = OnWriteValue( + context, + this, + indexRange, + null, + ref value, + ref statusCode, + ref sourceTimestamp); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + m_value = value; + m_statusCode = statusCode; + m_timestamp = sourceTimestamp; + + // update timestamp if not set by function. + if (sourceTimestamp == DateTime.MinValue) + { + m_timestamp = DateTime.UtcNow; + } + + ChangeMasks |= NodeStateChangeMasks.Value; + + return result; + } + + // ensure the source timestamp has a valid value. + if (sourceTimestamp == DateTime.MinValue) + { + sourceTimestamp = DateTime.UtcNow; + } + + // verify data type. + TypeInfo typeInfo = TypeInfo.IsInstanceOfDataType( + value, + m_dataType, + m_valueRank, + context.NamespaceUris, + context.TypeTable); + + if (typeInfo == null || typeInfo == TypeInfo.Unknown) + { + //if xml element data decoding error appeared : a value of type status code is received with the error code + if (DataTypeIds.XmlElement == m_dataType) + { + TypeInfo statusCodeTypeInfo = TypeInfo.IsInstanceOfDataType(value,DataTypeIds.UInt32,-1,context.NamespaceUris,context.TypeTable); + if (statusCodeTypeInfo != null) + { + //the error code + return (StatusCode)(uint)value; + } + } + // test for special case Null type + if (!(m_dataType.IsNullNodeId && value == null)) + { + return StatusCodes.BadTypeMismatch; + } + } + + value = ExtractValueFromVariant(context, value, true); + + // copy passed in value. + if (m_copyPolicy == VariableCopyPolicy.CopyOnWrite || m_copyPolicy == VariableCopyPolicy.Always) + { + value = Utils.Clone(value); + } + + // check for simple write value handler. + if (OnSimpleWriteValue != null) + { + // index range writes not supported. + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + result = OnSimpleWriteValue( + context, + this, + ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + } + else + { + // apply the index range. + if (indexRange != NumericRange.Empty) + { + object target = m_value; + result = indexRange.UpdateRange(ref target, value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + value = target; + } + } + + // update cached values. + m_value = value; + m_statusCode = statusCode; + m_timestamp = sourceTimestamp; + + ChangeMasks |= NodeStateChangeMasks.Value; + + return ServiceResult.Good; + } + #endregion + + #region Private Fields + private object m_value; + private bool m_isValueType; + private DateTime m_timestamp; + private StatusCode m_statusCode; + private NodeId m_dataType; + private int m_valueRank; + private ReadOnlyList m_arrayDimensions; + private uint m_accessLevel; + private byte m_userAccessLevel; + private double m_minimumSamplingInterval; + private bool m_historizing; + private VariableCopyPolicy m_copyPolicy; + #endregion + } + + /// + /// A typed base class for all data variable nodes. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class PropertyState : BaseVariableState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public PropertyState(NodeState parent) : base(parent) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new PropertyState(parent); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SymbolicName = Utils.Format("{0}_Instance1", Opc.Ua.BrowseNames.PropertyType); + NodeId = null; + BrowseName = new QualifiedName(SymbolicName, 1); + DisplayName = SymbolicName; + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasProperty; + TypeDefinitionId = GetDefaultTypeDefinitionId(context.NamespaceUris); + NumericId = Opc.Ua.VariableTypes.PropertyType; + Value = null; + DataType = GetDefaultDataTypeId(context.NamespaceUris); + ValueRank = GetDefaultValueRank(); + ArrayDimensions = null; + AccessLevel = AccessLevels.CurrentReadOrWrite; + UserAccessLevel = AccessLevels.CurrentReadOrWrite; + MinimumSamplingInterval = MinimumSamplingIntervals.Continuous; + Historizing = false; + } + + /// + /// Returns the id of the default type definition node for the instance. + /// + protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) + { + return VariableTypes.PropertyType; + } + #endregion + } + + /// + /// A typed base class for all data variable nodes. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class PropertyState : PropertyState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public PropertyState(NodeState parent) : base(parent) + { + Value = default(T); + IsValueType = !typeof(T).GetTypeInfo().IsValueType; + } + #endregion + + #region Initialization + /// + /// 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)); + } + + /// + /// Sets the value to its default value if it is not valid. + /// + protected override object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + return ExtractValueFromVariant(context, value, throwOnError); + } + #endregion + + #region Public Members + /// + /// The value of the variable. + /// + public new T Value + { + get + { + return CheckTypeBeforeCast(base.Value, true); + } + + set + { + base.Value = value; + } + } + #endregion + } + + /// + /// A typed base class for all data variable nodes. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class BaseDataVariableState : BaseVariableState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public BaseDataVariableState(NodeState parent) : base(parent) + { + if (parent != null) + { + ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasComponent; + } + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new BaseDataVariableState(parent); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SymbolicName = Utils.Format("{0}_Instance1", Opc.Ua.BrowseNames.BaseDataVariableType); + NodeId = null; + BrowseName = new QualifiedName(SymbolicName, 1); + DisplayName = SymbolicName; + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HasComponent; + TypeDefinitionId = GetDefaultTypeDefinitionId(context.NamespaceUris); + NumericId = Opc.Ua.VariableTypes.BaseDataVariableType; + Value = null; + DataType = GetDefaultDataTypeId(context.NamespaceUris); + ValueRank = GetDefaultValueRank(); + ArrayDimensions = null; + AccessLevel = AccessLevels.CurrentReadOrWrite; + UserAccessLevel = AccessLevels.CurrentReadOrWrite; + MinimumSamplingInterval = MinimumSamplingIntervals.Continuous; + Historizing = false; + } + + /// + /// Returns the id of the default type definition node for the instance. + /// + protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) + { + return VariableTypes.BaseDataVariableType; + } + #endregion + + #region Public Properties + /// + /// The strings that describe the values for an enumeration. + /// + public PropertyState EnumStrings + { + get + { + return m_enumStrings; + } + + set + { + if (!Object.ReferenceEquals(m_enumStrings, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_enumStrings = 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_enumStrings != null) + { + children.Add(m_enumStrings); + } + + 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 BrowseNames.EnumStrings: + { + if (createOrReplace) + { + if (EnumStrings == null) + { + if (replacement == null) + { + EnumStrings = new PropertyState(this); + } + else + { + EnumStrings = (PropertyState)replacement; + } + } + } + + instance = EnumStrings; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Private Fields + private PropertyState m_enumStrings; + #endregion + } + + /// + /// A typed base class for all data variable nodes. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class BaseDataVariableState : BaseDataVariableState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public BaseDataVariableState(NodeState parent) : base(parent) + { + Value = default(T); + IsValueType = !typeof(T).GetTypeInfo().IsValueType; + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + /// An object that describes how access the system containing the data. + protected override void Initialize(ISystemContext context) + { + base.Initialize(context); + + Value = default(T); + DataType = TypeInfo.GetDataTypeId(typeof(T)); + ValueRank = TypeInfo.GetValueRank(typeof(T)); + } + + /// + /// Extracts a value of the specified type from a value stored in a variant. + /// + [Obsolete("Should use the version that takes a ISystemContext (pass null if ISystemContext is not available).")] + protected override object ExtractValueFromVariant(object value, bool throwOnError) + { + return ExtractValueFromVariant(null, value, throwOnError); + } + + /// + /// Extracts a value of the specified type from a value stored in a variant. + /// + /// The context. + /// The value. + /// if set to true throw an exception on error. + /// + /// If throwOnError is false the default value for the type is returned if the value is not valid. + /// + /// Returns value of the T type + protected override object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + return ExtractValueFromVariant(context, value, throwOnError); + } + #endregion + + #region Public Members + /// + /// The value of the variable. + /// + public new T Value + { + get + { + return CheckTypeBeforeCast(base.Value, true); + } + + set + { + base.Value = value; + } + } + #endregion + } + + #region BaseVariableValue Class + /// + /// A thread safe object that can be used to access the value of a structure variable. + /// + public class BaseVariableValue + { + #region Constructors + /// + /// Initializes the instance with a synchronization object. + /// + public BaseVariableValue(object dataLock) + { + m_lock = dataLock; + m_copyPolicy = VariableCopyPolicy.CopyOnRead; + + if (m_lock == null) + { + m_lock = new object(); + } + } + #endregion + + #region Public Members + /// + /// An object used to synchronize access to the value. + /// + public object Lock + { + get { return m_lock; } + } + + /// + /// The behavior to use when reading or writing all or part of the object. + /// + public VariableCopyPolicy CopyPolicy + { + get { return m_copyPolicy; } + set { m_copyPolicy = value; } + } + + /// + /// Gets or sets the current error state. + /// + public ServiceResult Error + { + get { return m_error; } + set { m_error = value; } + } + + /// + /// Gets or sets the timestamp associated with the value. + /// + public DateTime Timestamp + { + get { return m_timestamp; } + set { m_timestamp = value; } + } + + /// + /// Clears the change masks for all nodes in the update list. + /// + public void ChangesComplete(ISystemContext context) + { + lock (m_lock) + { + if (m_updateList != null) + { + for (int ii = 0; ii < m_updateList.Length; ii++) + { + BaseInstanceState instance = m_updateList[ii]; + + if (instance != null) + { + instance.UpdateChangeMasks(NodeStateChangeMasks.Value); + instance.ClearChangeMasks(context, false); + } + } + } + } + } + #endregion + + #region Event Callbacks + /// + /// Raised before the value is read. + /// + public VariableValueEventHandler OnBeforeRead; + + /// + /// Raised after the value is written. + /// + public VariableValueEventHandler OnAfterWrite; + #endregion + + #region Protected Methods + /// + /// Does any processing before a read operation takes place. + /// + /// The context. + /// The node. + protected void DoBeforeReadProcessing( + ISystemContext context, + NodeState node) + { + if (OnBeforeRead != null) + { + OnBeforeRead(context, this, node); + } + } + + /// + /// Reads the value or a component of the value. + /// + protected ServiceResult Read( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp) + { + lock (m_lock) + { + // ensure a value timestamp exists. + if (m_timestamp == DateTime.MinValue) + { + m_timestamp = DateTime.UtcNow; + } + + timestamp = m_timestamp; + + // check for errors. + if (ServiceResult.IsBad(m_error)) + { + value = null; + statusCode = m_error.StatusCode; + return m_error; + } + + // apply the index range and encoding. + ServiceResult result = BaseVariableState.ApplyIndexRangeAndDataEncoding( + context, + indexRange, + dataEncoding, + ref value); + + if (ServiceResult.IsBad(result)) + { + statusCode = result.StatusCode; + return result; + } + + // apply copy policy + if ((m_copyPolicy & VariableCopyPolicy.CopyOnRead) != 0) + { + value = Utils.Clone(value); + } + + statusCode = StatusCodes.Good; + + return ServiceResult.Good; + } + } + + /// + /// Reads the current value. + /// + protected ServiceResult Read(object currentValue, ref object valueToRead) + { + lock (m_lock) + { + if (ServiceResult.IsBad(m_error)) + { + valueToRead = null; + return m_error; + } + + if ((m_copyPolicy & VariableCopyPolicy.CopyOnRead) != 0) + { + valueToRead = Utils.Clone(currentValue); + } + else + { + valueToRead = currentValue; + } + + return ServiceResult.Good; + } + } + + /// + /// Writes the current value. + /// + protected object Write(object valueToWrite) + { + lock (m_lock) + { + if ((m_copyPolicy & VariableCopyPolicy.CopyOnWrite) != 0) + { + return Utils.Clone(valueToWrite); + } + + return valueToWrite; + } + } + + /// + /// Sets the list of nodes which are updated when ClearChangeMasks is called. + /// + protected void SetUpdateList(IList updateList) + { + lock (m_lock) + { + m_updateList = null; + + if (updateList != null && updateList.Count > 0) + { + m_updateList = new BaseInstanceState[updateList.Count]; + + for (int ii = 0; ii < m_updateList.Length; ii++) + { + m_updateList[ii] = updateList[ii]; + + // the copy copy is enforced by the value wrapper. + BaseVariableState variable = m_updateList[ii] as BaseVariableState; + + if (variable != null) + { + variable.CopyPolicy = VariableCopyPolicy.Never; + } + } + } + } + } + #endregion + + #region Private Fields + private object m_lock; + private VariableCopyPolicy m_copyPolicy; + private BaseInstanceState[] m_updateList; + private ServiceResult m_error; + private DateTime m_timestamp; + #endregion + } + #endregion + + /// + /// Used to receive notifications when the value attribute is read or written. + /// + public delegate void VariableValueEventHandler( + ISystemContext context, + BaseVariableValue variable, + NodeState component); + + /// + /// Specifies the policies to use when handling reads and write to value. + /// + [Flags] + public enum VariableCopyPolicy + { + /// + /// The value is copied when is is read. + /// + CopyOnRead = 0x1, + + /// + /// The value is copied before it is written. + /// + CopyOnWrite = 0x2, + + /// + /// The value is never copied (only useful for value types that do not contain reference types). + /// + Never = 0x0, + + /// + /// Data is copied when it is written and when it is read. + /// + Always = 0x3 + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseVariableTypeState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseVariableTypeState.cs new file mode 100644 index 00000000..7dc72331 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/BaseVariableTypeState.cs @@ -0,0 +1,910 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + /// + /// The base class for all variable type nodes. + /// + public abstract class BaseVariableTypeState : BaseTypeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + protected BaseVariableTypeState() : base(NodeClass.VariableType) + { + } + #endregion + + #region Initialization + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + BaseVariableTypeState type = source as BaseVariableTypeState; + + if (type != null) + { + m_value = Utils.Clone(type.m_value); + m_dataType = type.m_dataType; + m_valueRank = type.m_valueRank; + m_arrayDimensions = null; + + if (type.m_arrayDimensions != null) + { + m_arrayDimensions = new ReadOnlyList(type.m_arrayDimensions, true); + } + } + + m_value = ExtractValueFromVariant(context, m_value, false); + + base.Initialize(context, source); + } + + /// + /// Sets the value to its default value if it is not valid. + /// + protected virtual object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + return value; + } + #endregion + + #region Public Members + /// + /// The value of the variable. + /// + public object Value + { + get + { + return m_value; + } + + set + { + if (!Object.ReferenceEquals(m_value, value)) + { + ChangeMasks |= NodeStateChangeMasks.Value; + } + + m_value = value; + } + } + + /// + /// The value of the variable as a Variant. + /// + public Variant WrappedValue + { + get + { + return new Variant(m_value); + } + + set + { + Value = ExtractValueFromVariant(null, value.Value, false); + } + } + + /// + /// The data type for the variable value. + /// + public NodeId DataType + { + get + { + return m_dataType; + } + + set + { + if (!Object.ReferenceEquals(m_dataType, value)) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_dataType = value; + } + } + + /// + /// The number of array dimensions permitted for the variable value. + /// + public int ValueRank + { + get + { + return m_valueRank; + } + + set + { + if (m_valueRank != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_valueRank = value; + } + } + + /// + /// The number of dimensions for an array values with one or more fixed dimensions. + /// + public ReadOnlyList ArrayDimensions + { + get + { + return m_arrayDimensions; + } + + set + { + if (!Object.ReferenceEquals(m_arrayDimensions, value)) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_arrayDimensions = value; + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the Value attribute is read. + /// + public NodeValueSimpleEventHandler OnSimpleReadValue; + + /// + /// Raised when the Value attribute is written. + /// + public NodeValueSimpleEventHandler OnSimpleWriteValue; + + /// + /// Raised when the DataType attribute is read. + /// + public NodeAttributeEventHandler OnReadDataType; + + /// + /// Raised when the DataType attribute is written. + /// + public NodeAttributeEventHandler OnWriteDataType; + + /// + /// Raised when the ValueRank attribute is read. + /// + public NodeAttributeEventHandler OnReadValueRank; + + /// + /// Raised when the ValueRank attribute is written. + /// + public NodeAttributeEventHandler OnWriteValueRank; + + /// + /// Raised when the ArrayDimensions attribute is read. + /// + public NodeAttributeEventHandler> OnReadArrayDimensions; + + /// + /// Raised when the ArrayDimensions attribute is written. + /// + public NodeAttributeEventHandler> OnWriteArrayDimensions; + #endregion + + #region Serialization Functions + /// + /// Exports a copy of the node to a node table. + /// + /// The context. + /// The node. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + VariableTypeNode variableTypeNode = node as VariableTypeNode; + + if (variableTypeNode != null) + { + variableTypeNode.Value = new Variant(Utils.Clone(this.Value)); + variableTypeNode.DataType = this.DataType; + variableTypeNode.ValueRank = this.ValueRank; + variableTypeNode.ArrayDimensions = null; + + if (this.ArrayDimensions != null) + { + variableTypeNode.ArrayDimensions = new UInt32Collection(this.ArrayDimensions); + } + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (m_value != null) + { + encoder.WriteVariant("Value", WrappedValue); + } + + if (!NodeId.IsNull(DataType)) + { + encoder.WriteNodeId("DataType", DataType); + } + + if (ValueRank != ValueRanks.Any) + { + encoder.WriteInt32("ValueRank", ValueRank); + } + + if (ArrayDimensions != null) + { + encoder.WriteString("ArrayDimensions", BaseVariableState.ArrayDimensionsToXml(ArrayDimensions)); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("Value")) + { + WrappedValue = decoder.ReadVariant("Value"); + } + + if (decoder.Peek("DataType")) + { + DataType = decoder.ReadNodeId("DataType"); + } + + if (decoder.Peek("ValueRank")) + { + ValueRank = decoder.ReadInt32("ValueRank"); + } + + if (decoder.Peek("ArrayDimensions")) + { + ArrayDimensions = BaseVariableState.ArrayDimensionsFromXml(decoder.ReadString("ArrayDimensions")); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (WrappedValue != Variant.Null) + { + attributesToSave |= AttributesToSave.Value; + } + + if (!NodeId.IsNull(m_dataType)) + { + attributesToSave |= AttributesToSave.DataType; + } + + if (m_valueRank != ValueRanks.Any) + { + attributesToSave |= AttributesToSave.ValueRank; + } + + if (m_arrayDimensions != null) + { + attributesToSave |= AttributesToSave.ArrayDimensions; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.Value) != 0) + { + encoder.WriteVariant(null, WrappedValue); + } + + if ((attributesToSave & AttributesToSave.DataType) != 0) + { + encoder.WriteNodeId(null, m_dataType); + } + + if ((attributesToSave & AttributesToSave.ValueRank) != 0) + { + encoder.WriteInt32(null, m_valueRank); + } + + if ((attributesToSave & AttributesToSave.ArrayDimensions) != 0) + { + encoder.WriteUInt32Array(null, m_arrayDimensions); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.Value) != 0) + { + WrappedValue = decoder.ReadVariant(null); + } + + if ((attibutesToLoad & AttributesToSave.DataType) != 0) + { + m_dataType = decoder.ReadNodeId(null); + } + + if ((attibutesToLoad & AttributesToSave.ValueRank) != 0) + { + m_valueRank = decoder.ReadInt32(null); + } + + if ((attibutesToLoad & AttributesToSave.ArrayDimensions) != 0) + { + UInt32Collection arrayDimensions = decoder.ReadUInt32Array(null); + + if (arrayDimensions != null && arrayDimensions.Count > 0) + { + m_arrayDimensions = new ReadOnlyList(arrayDimensions); + } + else + { + m_arrayDimensions = null; + } + } + } + #endregion + + #region Read Support Functions + /// + /// Reads the value for any non-value attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.DataType: + { + NodeId dataType = m_dataType; + + if (OnReadDataType != null) + { + result = OnReadDataType(context, this, ref dataType); + } + + if (ServiceResult.IsGood(result)) + { + value = dataType; + } + + return result; + } + + case Attributes.ValueRank: + { + int valueRank = m_valueRank; + + if (OnReadValueRank != null) + { + result = OnReadValueRank(context, this, ref valueRank); + } + + if (ServiceResult.IsGood(result)) + { + value = valueRank; + } + + return result; + } + + case Attributes.ArrayDimensions: + { + IList arrayDimensions = m_arrayDimensions; + + if (OnReadArrayDimensions != null) + { + result = OnReadArrayDimensions(context, this, ref arrayDimensions); + } + + if (ServiceResult.IsGood(result)) + { + value = arrayDimensions; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + + /// + /// Reads the value for the value attribute. + /// + protected override ServiceResult ReadValueAttribute( + ISystemContext context, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref DateTime sourceTimestamp) + { + value = m_value; + + ServiceResult result = ServiceResult.Good; + + VariableCopyPolicy copyPolicy = VariableCopyPolicy.CopyOnRead; + + // use default behavior. + if (OnSimpleReadValue != null) + { + result = OnSimpleReadValue( + context, + this, + ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + copyPolicy = VariableCopyPolicy.Never; + } + else + { + // check if a valid value exists. + if (value == null) + { + return StatusCodes.BadAttributeIdInvalid; + } + } + + // apply the index range and encoding. + result = BaseVariableState.ApplyIndexRangeAndDataEncoding(context, indexRange, dataEncoding, ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // copy returned value. + if (copyPolicy == VariableCopyPolicy.CopyOnRead) + { + value = Utils.Clone(value); + } + + return result; + } + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.DataType: + { + NodeId dataType = value as NodeId; + + if (dataType == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.DataType) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteDataType != null) + { + result = OnWriteDataType(context, this, ref dataType); + } + + if (ServiceResult.IsGood(result)) + { + DataType = dataType; + } + + return result; + } + + case Attributes.ValueRank: + { + int? valueRankRef = value as int?; + + if (valueRankRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.ValueRank) == 0) + { + return StatusCodes.BadNotWritable; + } + + int valueRank = valueRankRef.Value; + + if (OnWriteValueRank != null) + { + result = OnWriteValueRank(context, this, ref valueRank); + } + + if (ServiceResult.IsGood(result)) + { + ValueRank = valueRank; + } + + return result; + } + + case Attributes.ArrayDimensions: + { + IList arrayDimensions = value as IList; + + if ((WriteMask & AttributeWriteMask.ArrayDimensions) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteArrayDimensions != null) + { + result = OnWriteArrayDimensions(context, this, ref arrayDimensions); + } + + if (ServiceResult.IsGood(result)) + { + if (arrayDimensions != null) + { + m_arrayDimensions = new ReadOnlyList(arrayDimensions); + } + else + { + ArrayDimensions = null; + } + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + + /// + /// Write the value for the value attribute. + /// + protected override ServiceResult WriteValueAttribute( + ISystemContext context, + NumericRange indexRange, + object value, + StatusCode statusCode, + DateTime sourceTimestamp) + { + ServiceResult result = null; + + if ((WriteMask & AttributeWriteMask.ValueForVariableType) == 0) + { + return StatusCodes.BadNotWritable; + } + + // ensure the source timestamp has a valid value. + if (sourceTimestamp == DateTime.MinValue) + { + sourceTimestamp = DateTime.UtcNow; + } + + // index range writes not supported. + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + // verify data type. + TypeInfo typeInfo = TypeInfo.IsInstanceOfDataType( + value, + m_dataType, + m_valueRank, + context.NamespaceUris, + context.TypeTable); + + if (typeInfo == null || typeInfo == TypeInfo.Unknown) + { + return StatusCodes.BadTypeMismatch; + } + + // check for simple write value handler. + if (OnSimpleWriteValue != null) + { + result = OnSimpleWriteValue( + context, + this, + ref value); + + if (ServiceResult.IsBad(result)) + { + return result; + } + } + + // update cached values. + Value = value; + + return ServiceResult.Good; + } + #endregion + + #region Private Fields + private object m_value; + private NodeId m_dataType; + private int m_valueRank; + private ReadOnlyList m_arrayDimensions; + #endregion + } + + /// + /// A base class for all data variable type nodes. + /// + public class BaseDataVariableTypeState : BaseVariableTypeState + { + #region Constructors + /// + /// Initializes the type with its defalt attribute values. + /// + public BaseDataVariableTypeState() + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new BaseDataVariableTypeState(); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SuperTypeId = Opc.Ua.NodeId.Create(Opc.Ua.VariableTypes.BaseVariableType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + NodeId = Opc.Ua.NodeId.Create(Opc.Ua.VariableTypes.BaseDataVariableType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + BrowseName = Opc.Ua.QualifiedName.Create(Opc.Ua.BrowseNames.BaseDataVariableType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + DisplayName = new LocalizedText(Opc.Ua.BrowseNames.BaseDataVariableType, String.Empty, Opc.Ua.BrowseNames.BaseDataVariableType); + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + IsAbstract = false; + Value = null; + DataType = Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + ValueRank = ValueRanks.Any; + ArrayDimensions = null; + } + #endregion + } + + /// + /// A typed base class for all data variable type nodes. + /// + public class BaseDataVariableTypeState : BaseDataVariableTypeState + { + #region Constructors + /// + /// Initializes the type with its defalt attribute values. + /// + public BaseDataVariableTypeState() + { + } + #endregion + + #region Initialization + /// + /// 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)); + } + + /// + /// Sets the value to its default value if it is not valid. + /// + protected override object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + return BaseVariableState.ExtractValueFromVariant(context, value, throwOnError); + } + #endregion + + #region Public Members + /// + /// The value of the variable. + /// + public new T Value + { + get + { + return BaseVariableState.CheckTypeBeforeCast(base.Value, true); + } + + set + { + base.Value = value; + } + } + #endregion + } + + /// + /// A base class for all property variable type nodes. + /// + public class PropertyTypeState : BaseVariableTypeState + { + #region Constructors + /// + /// Initializes the type with its defalt attribute values. + /// + public PropertyTypeState() + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new PropertyTypeState(); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SuperTypeId = Opc.Ua.NodeId.Create(Opc.Ua.VariableTypes.BaseVariableType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + NodeId = Opc.Ua.NodeId.Create(Opc.Ua.VariableTypes.PropertyType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + BrowseName = Opc.Ua.QualifiedName.Create(Opc.Ua.BrowseNames.PropertyType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + DisplayName = new LocalizedText(Opc.Ua.BrowseNames.PropertyType, String.Empty, Opc.Ua.BrowseNames.PropertyType); + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + IsAbstract = false; + Value = null; + DataType = Opc.Ua.NodeId.Create(Opc.Ua.DataTypes.BaseDataType, Opc.Ua.Namespaces.OpcUa, context.NamespaceUris); + ValueRank = ValueRanks.Any; + ArrayDimensions = null; + } + #endregion + } + + /// + /// A typed base class for all property variable type nodes. + /// + public class PropertyTypeState : PropertyTypeState + { + #region Constructors + /// + /// Initializes the type with its defalt attribute values. + /// + public PropertyTypeState() + { + } + #endregion + + #region Initialization + /// + /// 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)); + } + + /// + /// Sets the value to its default value if it is not valid. + /// + protected override object ExtractValueFromVariant(ISystemContext context, object value, bool throwOnError) + { + return BaseVariableState.ExtractValueFromVariant(context, value, throwOnError); + } + #endregion + + #region Public Members + /// + /// The value of the variable. + /// + public new T Value + { + get + { + return BaseVariableState.CheckTypeBeforeCast(base.Value, true); + } + + set + { + base.Value = value; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ConditionState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ConditionState.cs new file mode 100644 index 00000000..3a0774e1 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ConditionState.cs @@ -0,0 +1,544 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class ConditionState + { + #region Initialization + /// + /// Called after a node is created. + /// + protected override void OnAfterCreate(ISystemContext context, NodeState node) + { + base.OnAfterCreate(context, node); + + if (this.Enable != null) + { + this.Enable.OnCallMethod = OnEnableCalled; + } + + if (this.Disable != null) + { + this.Disable.OnCallMethod = OnDisableCalled; + } + + if (this.AddComment != null) + { + this.AddComment.OnCall = OnAddCommentCalled; + } + } + #endregion + + #region Public Methods + /// + /// Gets or sets a value indicating whether the condition will automatically report an event when a method call completes. + /// + /// + /// true if the condition automatically reports ecents; otherwise, false. + /// + public bool AutoReportStateChanges + { + get { return m_autoReportStateChanges; } + set { m_autoReportStateChanges = value; } + } + + /// + /// Called when one or more sub-states change state. + /// + /// The context. + /// The display name for the effective state. + /// The transition time. + public virtual void SetEffectiveSubState(ISystemContext context, LocalizedText displayName, DateTime transitionTime) + { + if (this.EnabledState.EffectiveDisplayName != null) + { + this.EnabledState.EffectiveDisplayName.Value = displayName; + } + + if (this.EnabledState.EffectiveTransitionTime != null) + { + if (transitionTime != DateTime.MinValue) + { + this.EnabledState.EffectiveTransitionTime.Value = transitionTime; + } + else + { + this.EnabledState.EffectiveTransitionTime.Value = DateTime.UtcNow; + } + } + } + + /// + /// Sets the enable state for the condition without raising events. + /// + /// The system context. + /// If true the condition is put into the Enabled state. + /// This method ensures all related variables are set correctly. + public virtual void SetEnableState(ISystemContext context, bool enabled) + { + if (enabled) + { + UpdateStateAfterEnable(context); + } + else + { + UpdateStateAfterDisable(context); + } + } + + /// + /// Sets the severity for the condition without raising events. + /// + /// The system context. + /// The event severity. + /// This method ensures all related variables are set correctly. + public virtual void SetSeverity(ISystemContext context, EventSeverity severity) + { + this.LastSeverity.Value = this.Severity.Value; + this.Severity.Value = (ushort)severity; + + if (this.LastSeverity.SourceTimestamp != null) + { + this.LastSeverity.SourceTimestamp.Value = DateTime.UtcNow; + } + } + + /// + /// Updates the condition after adding a comment. + /// + /// The system context. + /// The comment. + /// The user that added the comment. + public virtual void SetComment( + ISystemContext context, + LocalizedText comment, + string clientUserId) + { + if (this.Comment != null) + { + this.Comment.Value = comment; + this.Comment.SourceTimestamp.Value = DateTime.UtcNow; + + if (this.ClientUserId != null) + { + this.ClientUserId.Value = clientUserId; + } + } + } + #endregion + + #region Event Handlers + /// + /// Raised when the condition is enabled or disabled. + /// + /// + /// Return code can be used to cancel the operation. + /// + public ConditionEnableEventHandler OnEnableDisable; + + /// + /// Raised when a comment is added to the condition. + /// + /// + /// Return code can be used to cancel the operation. + /// + public ConditionAddCommentEventHandler OnAddComment; + #endregion + + #region Protected Methods + /// + /// Handles a condition refresh. + /// + public override void ConditionRefresh(ISystemContext context, List events, bool includeChildren) + { + if (this.Retain.Value) + { + events.Add(this); + } + } + + /// + /// Reports the state change for the condition. + /// + /// The context. + /// if set to true the event is reported event if the condition is in the disabled state. + protected void ReportStateChange(ISystemContext context, bool ignoreDisabledState) + { + // check the disabled state. + if (!ignoreDisabledState && !this.EnabledState.Id.Value) + { + return; + } + + if (AutoReportStateChanges) + { + // create a new event instance. + this.EventId.Value = Guid.NewGuid().ToByteArray(); + this.Time.Value = DateTime.UtcNow; + this.ReceiveTime.Value = this.Time.Value; + + ClearChangeMasks(context, includeChildren: true); + + // report a state change event. + if (this.AreEventsMonitored) + { + InstanceStateSnapshot snapshot = new InstanceStateSnapshot(); + snapshot.Initialize(context, this); + ReportEvent(context, snapshot); + } + } + } + + /// + /// Updates the effective state for the condition. + /// + /// The context. + protected virtual void UpdateEffectiveState(ISystemContext context) + { + SetEffectiveSubState(context, this.EnabledState.Value, DateTime.MinValue); + } + + /// + /// Called when the add comment method is called. + /// + /// The system context. + /// The method being called. + /// The id of the object. + /// The identifier for the event which is the target for the comment. + /// The comment. + /// Any error. + protected virtual ServiceResult OnAddCommentCalled( + ISystemContext context, + MethodState method, + NodeId objectId, + byte[] eventId, + LocalizedText comment) + { + ServiceResult error = ProcessBeforeAddComment(context, eventId, comment); + + if (ServiceResult.IsGood(error)) + { + SetComment(context, comment, GetCurrentUserId(context)); + } + + if (this.AreEventsMonitored) + { + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + + // raise the audit event. + AuditConditionCommentEventState e = new AuditConditionCommentEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionComment", + "en-US", + "The AddComment method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + e.InputArguments = new PropertyState(e); + e.InputArguments.Value = new object[] { eventId, comment }; + + ReportEvent(context, e); + } + + return error; + } + + /// + /// Gets the current user id from the system context. + /// + /// The system context. + /// The display name for the current user. + protected string GetCurrentUserId(ISystemContext context) + { + IOperationContext operationContext = context as IOperationContext; + + if (operationContext != null && operationContext.UserIdentity != null) + { + return operationContext.UserIdentity.DisplayName; + } + + return null; + } + + /// + /// Does any processing before adding a comment to a condition. + /// + /// The system context. + /// The identifier for the event which is the target for the comment. + /// The comment. + protected virtual ServiceResult ProcessBeforeAddComment( + ISystemContext context, + byte[] eventId, + LocalizedText comment) + { + if (eventId == null) + { + return StatusCodes.BadEventIdUnknown; + } + + if (!this.EnabledState.Id.Value) + { + return StatusCodes.BadConditionDisabled; + } + + if (OnAddComment != null) + { + try + { + return OnAddComment(context, this, eventId, comment); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error adding a comment to a Condition."); + } + } + + return ServiceResult.Good; + } + + /// + /// Handles the Enable method. + /// + protected virtual ServiceResult OnEnableCalled( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + ServiceResult error = ProcessBeforeEnableDisable(context, true); + + if (ServiceResult.IsGood(error)) + { + UpdateStateAfterEnable(context); + } + + if (this.AreEventsMonitored) + { + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + + // raise the audit event. + AuditConditionCommentEventState e = new AuditConditionCommentEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionEnable", + "en-US", + "The Enable method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + ReportEvent(context, e); + } + + return error; + } + + /// + /// Handles the Disable method. + /// + protected virtual ServiceResult OnDisableCalled( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + // check that method can be called. + ServiceResult error = ProcessBeforeEnableDisable(context, false); + + if (ServiceResult.IsGood(error)) + { + UpdateStateAfterDisable(context); + } + + // raise the audit event. + if (this.AreEventsMonitored) + { + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, true); + } + + // raise the audit event. + AuditConditionEnableEventState e = new AuditConditionEnableEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionEnable", + "en-US", + "The Disable method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + ReportEvent(context, e); + } + + return error; + } + + /// + /// Does any processing before a condition is enabled or disabled. + /// + /// The system context. + /// True is the condition is being enabled. + protected virtual ServiceResult ProcessBeforeEnableDisable(ISystemContext context, bool enabling) + { + if (enabling && this.EnabledState.Id.Value) + { + return StatusCodes.BadConditionAlreadyEnabled; + } + + if (!enabling && !this.EnabledState.Id.Value) + { + return StatusCodes.BadConditionAlreadyDisabled; + } + + if (OnEnableDisable != null) + { + try + { + return OnEnableDisable(context, this, enabling); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error enabling or disabling a Condition."); + } + } + + return ServiceResult.Good; + } + + /// + /// Updates the condition state after enabling. + /// + /// The system context. + protected virtual void UpdateStateAfterEnable(ISystemContext context) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateEnabled", + "en-US", + ConditionStateNames.Enabled); + + this.Retain.Value = true; + this.EnabledState.Value = new LocalizedText(state); + this.EnabledState.Id.Value = true; + + if (this.EnabledState.TransitionTime != null) + { + this.EnabledState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + + /// + /// Updates the condition state after disabling. + /// + /// The system context. + protected virtual void UpdateStateAfterDisable(ISystemContext context) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateDisabled", + "en-US", + ConditionStateNames.Disabled); + + this.Retain.Value = false; + this.EnabledState.Value = new LocalizedText(state); + this.EnabledState.Id.Value = false; + + if (this.EnabledState.TransitionTime != null) + { + this.EnabledState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + #endregion + + #region Private Fields + private bool m_autoReportStateChanges; + #endregion + } + + /// + /// Used to recieve notifications when a condition is enabled or disabled. + /// + /// The current system context. + /// The condition that raised the event. + /// True if the condition is moving/has moved to the Enabled state. + public delegate ServiceResult ConditionEnableEventHandler( + ISystemContext context, + ConditionState condition, + bool enabling); + + /// + /// Used to recieve notifications when a comment is added. + /// + /// The current system context. + /// The condition that raised the event. + /// The identifier for the event which is the target for the comment. + /// The comment. + public delegate ServiceResult ConditionAddCommentEventHandler( + ISystemContext context, + ConditionState condition, + byte[] eventId, + LocalizedText comment); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/DataTypeState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/DataTypeState.cs new file mode 100644 index 00000000..91f4fb9d --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/DataTypeState.cs @@ -0,0 +1,265 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// The base class for all reference type nodes. + /// + public class DataTypeState : BaseTypeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public DataTypeState() : base(NodeClass.DataType) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new DataTypeState(); + } + #endregion + + /// + /// The abstract definition of the data type. + /// + public ExtensionObject DataTypeDefinition + { + get + { + return m_dataTypeDefinition; + } + + set + { + if (m_dataTypeDefinition != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_dataTypeDefinition = value; + } + } + + /// + /// A modifier applied to the datatype. + /// + public DataTypeModifier DataTypeModifier { get; set; } + + /// + /// The purpose of the data type. + /// + public Opc.Ua.Export.DataTypePurpose Purpose { get; set; } + #region Serialization Functions + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (m_dataTypeDefinition != null) + { + encoder.WriteExtensionObject("DataTypeDefinition", m_dataTypeDefinition); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("DataTypeDefinition")) + { + DataTypeDefinition = decoder.ReadExtensionObject("DataTypeDefinition"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (m_dataTypeDefinition != null) + { + attributesToSave |= AttributesToSave.DataTypeDefinition; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context for the system being accessed. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.DataTypeDefinition) != 0) + { + encoder.WriteExtensionObject(null, DataTypeDefinition); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attributesToLoad) + { + base.Update(context, decoder, attributesToLoad); + + if ((attributesToLoad & AttributesToSave.DataTypeDefinition) != 0) + { + DataTypeDefinition = decoder.ReadExtensionObject(null); + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the DataTypeDefinition attribute is read. + /// + public NodeAttributeEventHandler OnReadDataTypeDefinition; + + /// + /// Raised when the DataTypeDefinition attribute is written. + /// + public NodeAttributeEventHandler OnWriteDataTypeDefinition; + #endregion + + #region Read Support Functions + /// + /// Reads the value for DataTypeDefinition attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.DataTypeDefinition: + { + ExtensionObject dataTypeDefinition = m_dataTypeDefinition; + + if (OnReadDataTypeDefinition != null) + { + result = OnReadDataTypeDefinition(context, this, ref dataTypeDefinition); + } + + if (ServiceResult.IsGood(result)) + { + value = dataTypeDefinition; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + #endregion + + #region Write Support Functions + /// + /// Write the value for DataTypeDefinition attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.DataTypeDefinition: + { + ExtensionObject dataTypeDefinition = value as ExtensionObject; + + if ((WriteMask & AttributeWriteMask.DataTypeDefinition) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteDataTypeDefinition != null) + { + result = OnWriteDataTypeDefinition(context, this, ref dataTypeDefinition); + } + + if (ServiceResult.IsGood(result)) + { + m_dataTypeDefinition = dataTypeDefinition; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + #endregion + + #region Private Fields + private ExtensionObject m_dataTypeDefinition; + #endregion + } + + /// + public enum DataTypeModifier + { + /// + None = 0, + + /// + Union = 1, + + /// + OptionSet = 2 + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/DialogConditionState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/DialogConditionState.cs new file mode 100644 index 00000000..bdfd5c24 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/DialogConditionState.cs @@ -0,0 +1,216 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class DialogConditionState + { + #region Initialization + /// + /// Called after a node is created. + /// + protected override void OnAfterCreate(ISystemContext context, NodeState node) + { + base.OnAfterCreate(context, node); + + if (this.Respond != null) + { + this.Respond.OnCall = OnRespondCalled; + } + } + #endregion + + #region Public Methods + /// + /// Activates the dialog. + /// + /// The system context. + public void Activate(ISystemContext context) + { + TranslationInfo state = new TranslationInfo( + "ConditionStateDialogActive", + "en-US", + ConditionStateNames.Active); + + this.DialogState.Value = new LocalizedText(state); + this.DialogState.Id.Value = true; + + if (this.DialogState.TransitionTime != null) + { + this.DialogState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + + /// + /// Sets the response to the dialog. + /// + /// The system context. + /// The selected response. + public virtual void SetResponse(ISystemContext context, int response) + { + this.LastResponse.Value = response; + + TranslationInfo state = new TranslationInfo( + "ConditionStateDialogInactive", + "en-US", + ConditionStateNames.Inactive); + + this.DialogState.Value = new LocalizedText(state); + this.DialogState.Id.Value = false; + + if (this.DialogState.TransitionTime != null) + { + this.DialogState.TransitionTime.Value = DateTime.UtcNow; + } + + UpdateEffectiveState(context); + } + #endregion + + #region Event Handlers + /// + /// Raised when a dialog receives a Response. + /// + /// + /// Return code can be used to cancel the operation. + /// + public DialogResponseEventHandler OnRespond; + #endregion + + #region Protected Methods + /// + /// Updates the effective state for the condition. + /// + /// The context. + protected override void UpdateEffectiveState(ISystemContext context) + { + if (!this.EnabledState.Id.Value) + { + base.UpdateEffectiveState(context); + return; + } + + StringBuilder builder = new StringBuilder(); + + string locale = null; + + if (this.DialogState.Value != null) + { + locale = this.DialogState.Value.Locale; + builder.Append(this.DialogState.Value); + } + + LocalizedText effectiveState = new LocalizedText(locale, builder.ToString()); + + SetEffectiveSubState(context, effectiveState, DateTime.MinValue); + } + + /// + /// Called when the Respond method is called. + /// + /// The system context. + /// The method being called. + /// The id of the object. + /// The selected response. + /// Any error. + protected virtual ServiceResult OnRespondCalled( + ISystemContext context, + MethodState method, + NodeId objectId, + int selectedResponse) + { + ServiceResult error = null; + + try + { + if (!this.EnabledState.Id.Value) + { + return error = StatusCodes.BadConditionDisabled; + } + + if (!this.DialogState.Id.Value) + { + return error = StatusCodes.BadDialogNotActive; + } + + if (selectedResponse < 0 || selectedResponse >= this.ResponseOptionSet.Value.Length) + { + return error = StatusCodes.BadDialogResponseInvalid; + } + + if (OnRespond == null) + { + return error = StatusCodes.BadNotSupported; + } + + error = OnRespond(context, this, selectedResponse); + + // report a state change event. + if (ServiceResult.IsGood(error)) + { + ReportStateChange(context, false); + } + } + finally + { + if (this.AreEventsMonitored) + { + AuditConditionRespondEventState e = new AuditConditionRespondEventState(null); + + TranslationInfo info = new TranslationInfo( + "AuditConditionDialogResponse", + "en-US", + "The Respond method was called."); + + e.Initialize( + context, + this, + EventSeverity.Low, + new LocalizedText(info), + ServiceResult.IsGood(error), + DateTime.UtcNow); + + e.SourceName.Value = "Attribute/Call"; + + e.MethodId = new PropertyState(e); + e.MethodId.Value = method.NodeId; + + e.InputArguments = new PropertyState(e); + e.InputArguments.Value = new object[] { selectedResponse }; + + ReportEvent(context, e); + } + } + + return error; + } + #endregion + } + + /// + /// Used to receive notifications when the dialog receives a response. + /// + public delegate ServiceResult DialogResponseEventHandler( + ISystemContext context, + DialogConditionState dialog, + int selectedResponse); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ExclusiveLimitAlarmState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ExclusiveLimitAlarmState.cs new file mode 100644 index 00000000..02502fd6 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ExclusiveLimitAlarmState.cs @@ -0,0 +1,108 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using System.Threading; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class ExclusiveLimitAlarmState + { + #region Public Methods + /// + /// Sets the active state of the condition. + /// + /// The system context. + /// if set to true the condition is active. + public override void SetActiveState( + ISystemContext context, + bool active) + { + // set it inactive. + if (!active) + { + SetLimitState(context, LimitAlarmStates.Inactive); + return; + } + + // check if the level state machine needs an initial state. + if (this.LimitState.CurrentState.Id.Value != null) + { + base.SetActiveState(context, true); + return; + } + + // assume a high if the high limit is specified. + if (this.HighLimit != null) + { + SetLimitState(context, LimitAlarmStates.High); + } + else + { + SetLimitState(context, LimitAlarmStates.Low); + } + } + + /// + /// Sets the limit state of the condition. + /// + /// The system context. + /// The bit masks specifying the current state. + public virtual void SetLimitState( + ISystemContext context, + LimitAlarmStates limit) + { + switch (limit) + { + case LimitAlarmStates.HighHigh: + { + this.LimitState.SetState(context, Objects.ExclusiveLimitStateMachineType_HighHigh); + break; + } + + case LimitAlarmStates.High: + { + this.LimitState.SetState(context, Objects.ExclusiveLimitStateMachineType_High); + break; + } + + case LimitAlarmStates.Low: + { + this.LimitState.SetState(context, Objects.ExclusiveLimitStateMachineType_Low); + break; + } + + case LimitAlarmStates.LowLow: + { + this.LimitState.SetState(context, Objects.ExclusiveLimitStateMachineType_LowLow); + break; + } + + default: + { + this.LimitState.SetState(context, 0); + break; + } + } + + SetActiveEffectiveSubState(context, this.LimitState.CurrentState.Value, DateTime.UtcNow); + base.SetActiveState(context, limit != LimitAlarmStates.Inactive); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ExclusiveLimitStateMachineState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ExclusiveLimitStateMachineState.cs new file mode 100644 index 00000000..9c7318b2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ExclusiveLimitStateMachineState.cs @@ -0,0 +1,93 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + partial class ExclusiveLimitStateMachineState + { + #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); + + UpdateStateVariable(context, Objects.ExclusiveLimitStateMachineType_High, CurrentState); + UpdateTransitionVariable(context, 0, LastTransition); + } + #endregion + + #region Overriden Members + /// + /// The table of states belonging to the state machine. + /// + protected override ElementInfo[] StateTable + { + get { return s_StateTable; } + } + + /// + /// A table of valid states. + /// + private ElementInfo[] s_StateTable = new ElementInfo[] + { + new ElementInfo(Objects.ExclusiveLimitStateMachineType_HighHigh, BrowseNames.HighHigh, 1), + new ElementInfo(Objects.ExclusiveLimitStateMachineType_High, BrowseNames.High, 2), + new ElementInfo(Objects.ExclusiveLimitStateMachineType_Low, BrowseNames.Low, 3), + new ElementInfo(Objects.ExclusiveLimitStateMachineType_LowLow, BrowseNames.LowLow, 4) + }; + + /// + /// The table of transitions belonging to the state machine. + /// + protected override ElementInfo[] TransitionTable + { + get { return s_TransitionTable; } + } + + /// + /// A table of valid transitions. + /// + private ElementInfo[] s_TransitionTable = new ElementInfo[] + { + new ElementInfo(Objects.ExclusiveLimitStateMachineType_HighHighToHigh, BrowseNames.HighHighToHigh, 1), + new ElementInfo(Objects.ExclusiveLimitStateMachineType_HighToHighHigh, BrowseNames.HighToHighHigh, 2), + new ElementInfo(Objects.ExclusiveLimitStateMachineType_LowLowToLow, BrowseNames.LowLowToLow, 3), + new ElementInfo(Objects.ExclusiveLimitStateMachineType_LowToLowLow, BrowseNames.LowToLowLow, 4) + }; + + /// + /// The mapping between transitions and their from and to states. + /// + protected override uint[,] TransitionMappings + { + get { return s_TransitionMappings; } + } + + /// + /// A table of the to and from states for the transitions. + /// + private uint[,] s_TransitionMappings = new uint[,] + { + { Objects.ExclusiveLimitStateMachineType_HighHighToHigh, Objects.ExclusiveLimitStateMachineType_HighHigh, Objects.ExclusiveLimitStateMachineType_High, 0 }, + { Objects.ExclusiveLimitStateMachineType_HighToHighHigh, Objects.ExclusiveLimitStateMachineType_High, Objects.ExclusiveLimitStateMachineType_HighHigh, 0 }, + { Objects.ExclusiveLimitStateMachineType_LowLowToLow, Objects.ExclusiveLimitStateMachineType_LowLow, Objects.ExclusiveLimitStateMachineType_Low, 0 }, + { Objects.ExclusiveLimitStateMachineType_LowToLowLow, Objects.ExclusiveLimitStateMachineType_Low, Objects.ExclusiveLimitStateMachineType_LowLow, 0 } + }; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/FiniteStateMachineState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/FiniteStateMachineState.cs new file mode 100644 index 00000000..2ec037b3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/FiniteStateMachineState.cs @@ -0,0 +1,776 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class FiniteStateMachineState + { + #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); + + // cache the namespace index used to qualify the element browse names and node ids. + int index = context.NamespaceUris.GetIndex(ElementNamespaceUri); + + if (index >= 0) + { + ElementNamespaceIndex = (ushort)index; + } + } + #endregion + + #region ElementInfo Class + /// + /// Stores information about a statemachine element. + /// + protected sealed class ElementInfo + { + /// + /// Creates a new instance of the object. + /// + public ElementInfo(uint id, string name, uint number) + { + m_id = id; + m_name = name; + m_number = number; + } + + /// + /// The node id for the element. + /// + public uint Id + { + get { return m_id; } + } + + /// + /// The browse name of the element. + /// + public string Name + { + get { return m_name; } + } + + /// + /// A number assigned to the element. + /// + public uint Number + { + get { return m_number; } + } + + private uint m_id; + private string m_name; + private uint m_number; + } + #endregion + + #region Protected Members + /// + /// The namespace index used to qualify the element browse names and node ids. + /// + protected ushort ElementNamespaceIndex + { + get { return m_elementNamespaceIndex; } + set { m_elementNamespaceIndex = value; } + } + + /// + /// The table of states belonging to the state machine. + /// + protected virtual string ElementNamespaceUri + { + get { return Namespaces.OpcUa; } + } + + /// + /// The table of states belonging to the state machine. + /// + protected virtual ElementInfo[] StateTable + { + get { return null; } + } + + /// + /// The table of transitions belonging to the state machine. + /// + protected virtual ElementInfo[] TransitionTable + { + get { return null; } + } + + /// + /// The mapping between transitions and their from and to states. + /// + protected virtual uint[,] TransitionMappings + { + get { return null; } + } + + /// + /// The mapping between causes, the current state and a transition. + /// + protected virtual uint[,] CauseMappings + { + get { return null; } + } + + /// + /// The last state that the machine was in. + /// + protected FiniteStateVariableState LastState + { + get { return m_lastState; } + set { m_lastState = value; } + } + + /// + /// Returns the current state of for the state machine. + /// + protected uint GetCurrentStateId() + { + if (CurrentState == null || CurrentState.Id == null || CurrentState.Value == null) + { + return 0; + } + + NodeId value = CurrentState.Id.Value; + + if (ElementNamespaceIndex != value.NamespaceIndex || value.IdType != IdType.Numeric) + { + return 0; + } + + return (uint)value.Identifier; + } + + /// + /// Returns the new state for the specified transition. Returns 0 if the transition is not allowed. + /// + protected virtual uint GetNewStateForTransition(ISystemContext context, uint transitionId) + { + uint currentState = GetCurrentStateId(); + + if (currentState == 0) + { + return 0; + } + + uint[,] transitionMappings = TransitionMappings; + + if (transitionMappings == null) + { + return 0; + } + + int length = transitionMappings.GetLength(0); + + for (int ii = 0; ii < length; ii++) + { + if (transitionMappings[ii,0] == transitionId && transitionMappings[ii,1] == currentState) + { + return transitionMappings[ii,2]; + } + } + + return 0; + } + + /// + /// Checks if the transition has an effect. + /// + protected virtual bool TransitionHasEffect(ISystemContext context, uint transitionId) + { + uint[,] transitionMappings = TransitionMappings; + + if (transitionMappings == null) + { + return false; + } + + int length = transitionMappings.GetLength(0); + + for (int ii = 0; ii < length; ii++) + { + if (transitionMappings[ii,0] == transitionId) + { + return transitionMappings[ii,3] != 0; + } + } + + return false; + } + + /// + /// Returns the transition for the cause given the current state. + /// + protected virtual uint GetTransitionForCause(ISystemContext context, uint causeId) + { + uint currentState = GetCurrentStateId(); + + if (currentState == 0) + { + return 0; + } + + uint[,] causeMappings = CauseMappings; + + if (causeMappings == null) + { + return 0; + } + + int length = causeMappings.GetLength(0); + + for (int ii = 0; ii < length; ii++) + { + if (causeMappings[ii,0] == causeId && causeMappings[ii,1] == currentState) + { + return causeMappings[ii,2]; + } + } + + return 0; + } + + /// + /// Returns the transition from the current state to the target state. + /// + protected virtual uint GetTransitionToState(ISystemContext context, uint targetStateId) + { + uint currentState = GetCurrentStateId(); + + if (currentState == 0) + { + return 0; + } + + uint[,] transitionMappings = TransitionMappings; + + if (transitionMappings == null) + { + return 0; + } + + int length = transitionMappings.GetLength(0); + + for (int ii = 0; ii < length; ii++) + { + if (transitionMappings[ii, 1] == currentState && transitionMappings[ii, 2] == targetStateId) + { + return transitionMappings[ii, 0]; + } + } + + return 0; + } + + /// + /// Updates the current state variable. + /// + protected void UpdateStateVariable(ISystemContext context, uint stateId, FiniteStateVariableState variable) + { + if (variable == null) + { + return; + } + + if (stateId == 0) + { + variable.Value = null; + variable.Id.Value = null; + + if (variable.Number != null) + { + variable.Number.Value = 0; + } + + return; + } + + ElementInfo[] stateTable = StateTable; + + if (stateTable == null) + { + return; + } + + for (int ii = 0; ii < stateTable.Length; ii++) + { + ElementInfo state = stateTable[ii]; + + if (state.Id == stateId) + { + variable.Value = state.Name; + variable.Id.Value = new NodeId(state.Id, ElementNamespaceIndex); + + if (variable.Number != null) + { + variable.Number.Value = state.Number; + } + + return; + } + } + } + + /// + /// Updates the last transition variable. + /// + protected void UpdateTransitionVariable(ISystemContext context, uint transitionId, FiniteTransitionVariableState variable) + { + if (variable == null) + { + return; + } + + if (transitionId == 0) + { + variable.Value = null; + variable.Id.Value = null; + + if (variable.TransitionTime != null) + { + variable.TransitionTime.Value = DateTime.MinValue; + } + + if (variable.Number != null) + { + variable.Number.Value = 0; + } + + return; + } + + ElementInfo[] transitionTable = TransitionTable; + + if (transitionTable == null) + { + return; + } + + for (int ii = 0; ii < transitionTable.Length; ii++) + { + ElementInfo transition = transitionTable[ii]; + + if (transition.Id == transitionId) + { + variable.Value = transition.Name; + variable.Id.Value = new NodeId(transition.Id, ElementNamespaceIndex); + + if (variable.TransitionTime != null) + { + variable.TransitionTime.Value = DateTime.UtcNow; + } + + if (variable.Number != null) + { + variable.Number.Value = transition.Number; + } + + return; + } + } + } + #endregion + + #region Event Callbacks + /// + /// Raised to check whether the current user is allowed to execute the command. + /// + public StateMachineTransitionHandler OnCheckUserPermission; + + /// + /// Raised before a transition occurs. + /// + public StateMachineTransitionHandler OnBeforeTransition; + + /// + /// Raises after a transition occurs. Errors are ignored. + /// + public StateMachineTransitionHandler OnAfterTransition; + #endregion + + #region Public Interface + /// + /// If true transition events will not be produced by the state machine. + /// + public bool SuppressTransitionEvents + { + get { return m_suppressTransitionEvents; } + set { m_suppressTransitionEvents = value; } + } + + /// + /// Invokes the callback function if it has been specified. + /// + protected ServiceResult InvokeCallback( + StateMachineTransitionHandler callback, + ISystemContext context, + StateMachineState machine, + uint transitionId, + uint causeId, + IList inputArguments, + IList outputArguments) + { + if (callback != null) + { + try + { + return callback(context, this, transitionId, causeId, inputArguments, outputArguments); + } + catch (Exception e) + { + return new ServiceResult(e); + } + } + + return ServiceResult.Good; + } + + /// + /// Checks if the cause is permitted given the current state and returns the associated transition. + /// + public virtual bool IsCausePermitted(ISystemContext context, uint causeId, bool checkUserAccessRights) + { + uint transitionId = GetTransitionForCause(context, causeId); + + if (transitionId == 0) + { + return false; + } + + if (checkUserAccessRights) + { + ServiceResult result = InvokeCallback( + OnCheckUserPermission, + context, + this, + transitionId, + causeId, + null, + null); + + if (ServiceResult.IsBad(result)) + { + return false; + } + } + + return true; + } + + /// + /// Forces the machine into the specified state. + /// + public virtual void SetState(ISystemContext context, uint newState) + { + uint transitionId = GetTransitionToState(context, newState); + + UpdateStateVariable(context, newState, CurrentState); + UpdateTransitionVariable(context, transitionId, LastTransition); + } + + /// + /// Invokes the specified cause. + /// + public virtual ServiceResult DoCause( + ISystemContext context, + MethodState causeMethod, + uint causeId, + IList inputArguments, + IList outputArguments) + { + ServiceResult result = null; + + try + { + // get the transition. + uint transitionId = GetTransitionForCause(context, causeId); + + if (transitionId == 0) + { + return StatusCodes.BadNotSupported; + } + + // check access rights. + result = InvokeCallback( + OnCheckUserPermission, + context, + this, + transitionId, + causeId, + inputArguments, + outputArguments); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // do the transition. + result = DoTransition(context, transitionId, causeId, inputArguments, outputArguments); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // report any changes to state machine. + ClearChangeMasks(context, true); + } + finally + { + // report the event. + if (this.AreEventsMonitored) + { + AuditUpdateStateEventState e = CreateAuditEvent(context, causeMethod, causeId); + UpdateAuditEvent(context, causeMethod, causeId, e, result); + ReportEvent(context, e); + } + } + + return result; + } + + /// + /// Creates an instance of an audit event. + /// + protected virtual AuditUpdateStateEventState CreateAuditEvent( + ISystemContext context, + MethodState causeMethod, + uint causeId) + { + return new AuditUpdateStateEventState(null); + } + + /// + /// Updates an audit event after the method is invoked. + /// + protected virtual void UpdateAuditEvent( + ISystemContext context, + MethodState causeMethod, + uint causeId, + AuditUpdateStateEventState e, + ServiceResult result) + { + TranslationInfo info = new TranslationInfo( + "StateTransition", + "en-US", + "The {1} method called was on the {0} state machine.", + this.GetDisplayPath(3, '.'), + causeMethod.DisplayName); + + e.Initialize( + context, + this, + EventSeverity.Medium, + new LocalizedText(info), + ServiceResult.IsGood(result), + DateTime.UtcNow); + + e.MethodId = new PropertyState(e); + e.MethodId.Value = causeMethod.NodeId; + + e.SetChildValue(context, BrowseNames.OldStateId, LastState, false); + e.SetChildValue(context, BrowseNames.NewStateId, CurrentState, false); + } + + /// + /// Updates the state machine to reflect the successful processing of a method. + /// + /// The context. + /// The cause id. + /// + public void CauseProcessingCompleted(ISystemContext context, uint causeId) + { + // get the transition. + uint transitionId = GetTransitionForCause(context, causeId); + + if (transitionId == 0) + { + return; + } + + // get the new state. + uint newState = GetNewStateForTransition(context, transitionId); + + if (newState == 0) + { + return; + } + + // save the last state. + if (m_lastState == null) + { + m_lastState = new FiniteStateVariableState(this); + } + + m_lastState.SetChildValue(context, null, CurrentState, false); + + // update state and transition variables. + UpdateStateVariable(context, newState, CurrentState); + UpdateTransitionVariable(context, transitionId, LastTransition); + } + + /// + /// Causes the specified transition to occur. + /// + public ServiceResult DoTransition( + ISystemContext context, + uint transitionId, + uint causeId, + IList inputArguments, + IList outputArguments) + { + // check for valid transition. + uint newState = GetNewStateForTransition(context, transitionId); + + if (newState == 0) + { + return StatusCodes.BadNotSupported; + } + + // check the cause permissions. + if (causeId != 0) + { + if (!IsCausePermitted(context, causeId, true)) + { + return StatusCodes.BadUserAccessDenied; + } + } + + // do any pre-transition processing. + ServiceResult result = InvokeCallback( + OnBeforeTransition, + context, + this, + transitionId, + causeId, + inputArguments, + outputArguments); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // save the last state. + if (m_lastState == null) + { + m_lastState = new FiniteStateVariableState(this); + } + + m_lastState.SetChildValue(context, null, CurrentState, false); + + // update state and transition variables. + UpdateStateVariable(context, newState, CurrentState); + UpdateTransitionVariable(context, transitionId, LastTransition); + + // do any post-transition processing. + InvokeCallback( + OnAfterTransition, + context, + this, + transitionId, + causeId, + inputArguments, + outputArguments); + + // report the event. + if (this.AreEventsMonitored && !m_suppressTransitionEvents) + { + TransitionEventState e = CreateTransitionEvent(context, transitionId, causeId); + + if (e != null) + { + UpdateTransitionEvent(context, transitionId, causeId, e); + ReportEvent(context, e); + } + } + + return ServiceResult.Good; + } + + /// + /// Creates an instance of an transition event. + /// + protected virtual TransitionEventState CreateTransitionEvent( + ISystemContext context, + uint transitionId, + uint causeId) + { + if (TransitionHasEffect(context, transitionId)) + { + return new TransitionEventState(null); + } + + return null; + } + + /// + /// Updates a transition event after the transition is complete. + /// + protected virtual void UpdateTransitionEvent( + ISystemContext context, + uint transitionId, + uint causeId, + TransitionEventState e) + { + TranslationInfo info = new TranslationInfo( + "StateTransition", + "en-US", + "The {0} state machine moved to the {1} state.", + this.GetDisplayPath(3, '.'), + CurrentState.Value); + + e.Initialize( + context, + this, + EventSeverity.Medium, + new LocalizedText(info)); + + e.SetChildValue(context, BrowseNames.FromState, LastState, false); + e.SetChildValue(context, BrowseNames.ToState, CurrentState, false); + e.SetChildValue(context, BrowseNames.Transition, LastTransition, false); + } + #endregion + + #region Private Fields + private ushort m_elementNamespaceIndex; + private FiniteStateVariableState m_lastState; + private bool m_suppressTransitionEvents; + #endregion + } + + /// + /// A delegate used to recieve notifications when a state machine transition occurs. + /// + public delegate ServiceResult StateMachineTransitionHandler( + ISystemContext context, + StateMachineState machine, + uint transitionId, + uint causeId, + IList inputArguments, + IList outputArguments); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ISystemContext.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ISystemContext.cs new file mode 100644 index 00000000..459a60e5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ISystemContext.cs @@ -0,0 +1,406 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + /// + /// An interface to an object that describes how access the system containing the data. + /// + public interface ISystemContext + { + /// + /// An application defined handle for the system. + /// + /// The system handle. + object SystemHandle { get; } + + /// + /// The identifier for the session (null if multiple sessions are associated with the operation). + /// + /// The session identifier. + NodeId SessionId { get; } + + /// + /// The identity of the user (null if not available). + /// + /// The user identity. + IUserIdentity UserIdentity { get; } + + /// + /// The locales to use if available. + /// + /// The preferred locales. + IList PreferredLocales { get; } + + /// + /// The audit log entry associated with the operation (null if not available). + /// + /// The audit entry identifier. + string AuditEntryId { get; } + + /// + /// The table of namespace uris to use when accessing the system. + /// + /// The namespace URIs. + NamespaceTable NamespaceUris { get; } + + /// + /// The table of server uris to use when accessing the system. + /// + /// The server URIs. + StringTable ServerUris { get; } + + /// + /// A table containing the types that are to be used when accessing the system. + /// + /// The type table. + ITypeTable TypeTable { get; } + + /// + /// A factory that can be used to create encodeable types. + /// + /// The encodeable factory. + EncodeableFactory EncodeableFactory { get; } + + /// + /// A factory that can be used to create node ids. + /// + /// The node identifiers factory. + INodeIdFactory NodeIdFactory { get; } + + /// + /// A factory that can be used to create encodeable types. + /// + /// The encodeable factory. + NodeStateFactory NodeStateFactory { get; } + } + + /// + /// An interface that can be used to create new node ids. + /// + public interface INodeIdFactory + { + /// + /// Creates the NodeId for the specified node. + /// + /// The context. + /// The node. + /// The new NodeId. + NodeId New(ISystemContext context, NodeState node); + } + + /// + /// A generic implementation for ISystemContext interface. + /// + public class SystemContext : ISystemContext, IOperationContext + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public SystemContext() + { + m_nodeStateFactory = new NodeStateFactory(); + } + + /// + /// Initializes a new instance of the class. + /// + /// The context. + public SystemContext(IOperationContext context) + { + m_nodeStateFactory = new NodeStateFactory(); + m_operationContext = context; + } + #endregion + + #region ISystemContext Members + /// + /// An application defined handle for the system. + /// + /// The system handle. + public object SystemHandle + { + get { return m_systemHandle; } + set { m_systemHandle = value; } + } + + /// + /// The identifier for the session (null if multiple sessions are associated with the operation). + /// + /// The session identifier. + public NodeId SessionId + { + get + { + if (m_operationContext != null) + { + return m_operationContext.SessionId; + } + + return m_sessionId; + } + + set + { + m_sessionId = value; + } + } + + /// + /// The identity of the user. + /// + /// The user identity. + public IUserIdentity UserIdentity + { + get + { + if (m_operationContext != null) + { + return m_operationContext.UserIdentity; + } + + return m_userIdentity; + } + + set + { + m_userIdentity = value; + } + } + + /// + /// The locales to use if available. + /// + /// The preferred locales. + public IList PreferredLocales + { + get + { + if (m_operationContext != null) + { + return m_operationContext.PreferredLocales; + } + + return m_preferredLocales; + } + + set + { + m_preferredLocales = value; + } + } + + /// + /// The audit log entry associated with the operation (null if not available). + /// + /// The audit entry identifier. + public string AuditEntryId + { + get + { + if (m_operationContext != null) + { + return m_operationContext.AuditEntryId; + } + + return m_auditEntryId; + } + + set + { + m_auditEntryId = value; + } + } + + /// + /// The table of namespace uris to use when accessing the system. + /// + /// The namespace URIs. + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + set { m_namespaceUris = value; } + } + + /// + /// The table of server uris to use when accessing the system. + /// + /// The server URIs. + public StringTable ServerUris + { + get { return m_serverUris; } + set { m_serverUris = value; } + } + + /// + /// A table containing the types that are to be used when accessing the system. + /// + /// The type table. + public ITypeTable TypeTable + { + get { return m_typeTable; } + set { m_typeTable = value; } + } + + /// + /// A factory that can be used to create encodeable types. + /// + /// The encodeable factory. + public EncodeableFactory EncodeableFactory + { + get { return m_encodeableFactory; } + set { m_encodeableFactory = value; } + } + + /// + /// A factory that can be used to create node instances. + /// + /// The node state factory. + public NodeStateFactory NodeStateFactory + { + get { return m_nodeStateFactory; } + set { m_nodeStateFactory = value; } + } + + /// + /// A factory that can be used to create node ids. + /// + /// The node idetifiers factory. + public INodeIdFactory NodeIdFactory + { + get { return m_nodeIdFactory; } + set { m_nodeIdFactory = value; } + } + #endregion + + #region Public Members + /// + /// The operation context associated with the system context. + /// + /// The operation context. + public IOperationContext OperationContext + { + get { return m_operationContext; } + protected set { m_operationContext = value; } + } + + /// + /// Creates a copy of the context that can be used with the specified operation context. + /// + /// The operation context to use. + /// + /// A copy of the system context that references the new operation context. + /// + public ISystemContext Copy(IOperationContext context) + { + SystemContext copy = (SystemContext)MemberwiseClone(); + + if (context != null) + { + copy.m_operationContext = context; + } + + return copy; + } + #endregion + + #region IOperationContext Members + /// + /// The diagnostics mask associated with the operation. + /// + /// The diagnostics mask. + public DiagnosticsMasks DiagnosticsMask + { + get + { + if (m_operationContext != null) + { + return m_operationContext.DiagnosticsMask; + } + + return DiagnosticsMasks.None; + } + } + + /// + /// The table of strings associated with the operation. + /// + /// The string table. + public StringTable StringTable + { + get + { + if (m_operationContext != null) + { + return m_operationContext.StringTable; + } + + return null; + } + } + + /// + /// When the operation will be abandoned if it has not completed. + /// + /// The operation deadline. + public DateTime OperationDeadline + { + get + { + if (m_operationContext != null) + { + return m_operationContext.OperationDeadline; + } + + return DateTime.MaxValue; + } + } + + /// + /// The current status of the operation. + /// + /// The operation status. + public StatusCode OperationStatus + { + get + { + if (m_operationContext != null) + { + return m_operationContext.OperationStatus; + } + + return StatusCodes.Good; + } + } + #endregion + + #region Private Fields + private object m_systemHandle; + private NodeId m_sessionId; + private IList m_preferredLocales; + private string m_auditEntryId; + private IUserIdentity m_userIdentity; + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private ITypeTable m_typeTable; + private EncodeableFactory m_encodeableFactory; + private INodeIdFactory m_nodeIdFactory; + private IOperationContext m_operationContext; + private NodeStateFactory m_nodeStateFactory; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/LimitAlarmState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/LimitAlarmState.cs new file mode 100644 index 00000000..d2bcdd7a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/LimitAlarmState.cs @@ -0,0 +1,50 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + /// + /// The possible states for a limit alarm. + /// + [Flags] + public enum LimitAlarmStates + { + /// + /// The alarm ia inactive. + /// + Inactive = 0x0, + + /// + /// The alarm is in the HighHigh state. + /// + HighHigh = 0x1, + + /// + /// The alarm is in the High state. + /// + High = 0x2, + + /// + /// The alarm is in the Low state. + /// + Low = 0x4, + + /// + /// The alarm is in the LowLow state. + /// + LowLow =0x8 + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/MethodState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/MethodState.cs new file mode 100644 index 00000000..3755891c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/MethodState.cs @@ -0,0 +1,806 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Runtime.Serialization; +using System.Reflection; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// The base class for all method nodes. + /// + public class MethodState : BaseInstanceState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public MethodState(NodeState parent) : base(NodeClass.Method, parent) + { + m_executable = true; + m_userExecutable = true; + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new MethodState(parent); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + base.Initialize(context); + + Executable = true; + UserExecutable = true; + } + + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + MethodState method = source as MethodState; + + if (method != null) + { + m_executable = method.m_executable; + m_userExecutable = method.m_userExecutable; + } + + base.Initialize(context, source); + } + #endregion + + #region Public Members + /// + /// The identifier for the declaration of the method in the type model. + /// + public NodeId MethodDeclarationId + { + get + { + return base.TypeDefinitionId; + } + + set + { + base.TypeDefinitionId = value; + } + } + + /// + /// Whether the method can be called. + /// + public bool Executable + { + get + { + return m_executable; + } + + set + { + if (m_executable != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_executable = value; + } + } + + /// + /// Whether the method can be called by the current user. + /// + public bool UserExecutable + { + get + { + return m_userExecutable; + } + + set + { + if (m_userExecutable != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_userExecutable = value; + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the Executable attribute is read. + /// + public NodeAttributeEventHandler OnReadExecutable; + + /// + /// Raised when the Executable attribute is written. + /// + public NodeAttributeEventHandler OnWriteExecutable; + + /// + /// Raised when the UserExecutable attribute is read. + /// + public NodeAttributeEventHandler OnReadUserExecutable; + + /// + /// Raised when the UserExecutable attribute is written. + /// + public NodeAttributeEventHandler OnWriteUserExecutable; + + /// + /// Raised when the method is called. + /// + public GenericMethodCalledEventHandler OnCallMethod; + + /// + /// Raised when the method is called. + /// + public GenericMethodCalledEventHandler2 OnCallMethod2; + #endregion + + #region Serialization Functions + /// + /// Exports a copt of the node to a node table. + /// + /// The context. + /// The node. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + MethodNode methodNode = node as MethodNode; + + if (methodNode != null) + { + methodNode.Executable = this.Executable; + methodNode.UserExecutable = this.UserExecutable; + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (m_executable) + { + encoder.WriteBoolean("Executable", m_executable); + } + + if (m_userExecutable) + { + encoder.WriteBoolean("UserExecutable", m_executable); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("Executable")) + { + Executable = decoder.ReadBoolean("Executable"); + } + + if (decoder.Peek("UserExecutable")) + { + UserExecutable = decoder.ReadBoolean("UserExecutable"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (m_executable) + { + attributesToSave |= AttributesToSave.Executable; + } + + if (m_userExecutable) + { + attributesToSave |= AttributesToSave.UserExecutable; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.Executable) != 0) + { + encoder.WriteBoolean(null, m_executable); + } + + if ((attributesToSave & AttributesToSave.UserExecutable) != 0) + { + encoder.WriteBoolean(null, m_userExecutable); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.Executable) != 0) + { + m_executable = decoder.ReadBoolean(null); + } + + if ((attibutesToLoad & AttributesToSave.UserExecutable) != 0) + { + m_userExecutable = decoder.ReadBoolean(null); + } + } + #endregion + + #region Read Support Functions + /// + /// Reads the value for any non-value attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.Executable: + { + bool executable = m_executable; + + if (OnReadExecutable != null) + { + result = OnReadExecutable(context, this, ref executable); + } + + if (ServiceResult.IsGood(result)) + { + value = executable; + } + + return result; + } + + case Attributes.UserExecutable: + { + bool userExecutable = m_userExecutable; + + if (OnReadUserExecutable != null) + { + result = OnReadUserExecutable(context, this, ref userExecutable); + } + + if (ServiceResult.IsGood(result)) + { + value = userExecutable; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.Executable: + { + bool? executableRef = value as bool?; + + if (executableRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.Executable) == 0) + { + return StatusCodes.BadNotWritable; + } + + bool executable = executableRef.Value; + + if (OnWriteExecutable != null) + { + result = OnWriteExecutable(context, this, ref executable); + } + + if (ServiceResult.IsGood(result)) + { + Executable = executable; + } + + return result; + } + + case Attributes.UserExecutable: + { + bool? userExecutableRef = value as bool?; + + if (userExecutableRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.UserExecutable) == 0) + { + return StatusCodes.BadNotWritable; + } + + bool userExecutable = userExecutableRef.Value; + + if (OnWriteUserExecutable != null) + { + result = OnWriteUserExecutable(context, this, ref userExecutable); + } + + if (ServiceResult.IsGood(result)) + { + UserExecutable = userExecutable; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + #endregion + + #region Public Properties + /// + /// The input arguments for the method. + /// + public PropertyState InputArguments + { + get + { + return m_inputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_inputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_inputArguments = value; + } + } + + /// + /// The output arguments for the method. + /// + public PropertyState OutputArguments + { + get + { + return m_outputArguments; + } + + set + { + if (!Object.ReferenceEquals(m_outputArguments, value)) + { + ChangeMasks |= NodeStateChangeMasks.Children; + } + + m_outputArguments = 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_inputArguments != null) + { + children.Add(m_inputArguments); + } + + if (m_outputArguments != null) + { + children.Add(m_outputArguments); + } + + 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 BrowseNames.InputArguments: + { + if (createOrReplace) + { + if (InputArguments == null) + { + if (replacement == null) + { + InputArguments = new PropertyState(this); + } + else + { + InputArguments = (PropertyState)replacement; + } + } + } + + instance = InputArguments; + break; + } + + case BrowseNames.OutputArguments: + { + if (createOrReplace) + { + if (OutputArguments == null) + { + if (replacement == null) + { + OutputArguments = new PropertyState(this); + } + else + { + OutputArguments = (PropertyState)replacement; + } + } + } + + instance = OutputArguments; + break; + } + } + + if (instance != null) + { + return instance; + } + + return base.FindChild(context, browseName, createOrReplace, replacement); + } + #endregion + + #region Method Invocation + /// + /// Invokes the methods and returns the output parameters. + /// + /// The context to use. + /// The object being called. + /// The input arguments. + /// Any errors for the input arguments. + /// The output arguments. + /// The result of the method call. + public virtual ServiceResult Call( + ISystemContext context, + NodeId objectId, + IList inputArguments, + IList argumentErrors, + IList outputArguments) + { + // check if executable. + object executable = null; + ReadNonValueAttribute(context, Attributes.Executable, ref executable); + + if (executable is bool && (bool)executable == false) + { + return StatusCodes.BadNotExecutable; + } + + // check if user executable. + object userExecutable = null; + ReadNonValueAttribute(context, Attributes.UserExecutable, ref userExecutable); + + if (userExecutable is bool && (bool)userExecutable == false) + { + return StatusCodes.BadUserAccessDenied; + } + + // validate input arguments. + List inputs = new List(); + + // check for too few or too many arguments. + int expectedCount = 0; + + if (InputArguments != null && InputArguments.Value != null) + { + expectedCount = InputArguments.Value.Length; + } + + if (expectedCount != inputArguments.Count) + { + return StatusCodes.BadArgumentsMissing; + } + + // validate individual arguements. + bool error = false; + + for (int ii = 0; ii < inputArguments.Count; ii++) + { + ServiceResult argumentError = ValidateInputArgument(context, inputArguments[ii], ii); + + if (ServiceResult.IsBad(argumentError)) + { + error = true; + } + + inputs.Add(inputArguments[ii].Value); + argumentErrors.Add(argumentError); + } + + // return good - caller must check argument errors. + if (error) + { + return ServiceResult.Good; + } + + // set output arguments to default values. + List outputs = new List(); + + if (OutputArguments != null) + { + IList arguments = OutputArguments.Value; + + if (arguments != null && arguments.Count > 0) + { + for (int ii = 0; ii < arguments.Count; ii++) + { + outputs.Add(GetArgumentDefaultValue(context, arguments[ii])); + } + } + } + + // invoke method. + ServiceResult result = null; + + try + { + result = Call(context, objectId, inputs, outputs); + } + catch (Exception e) + { + result = new ServiceResult(e); + } + + // copy out arguments. + if (ServiceResult.IsGood(result)) + { + for (int ii = 0; ii < outputs.Count; ii++) + { + outputArguments.Add(new Variant(outputs[ii])); + } + } + + return result; + } + + /// + /// Invokes the method, returns the result and output argument. + /// + protected virtual ServiceResult Call( + ISystemContext context, + IList inputArguments, + IList outputArguments) + { + return Call(context, null, inputArguments, outputArguments); + } + + /// + /// Invokes the method, returns the result and output argument. + /// + /// The current context. + /// The id of the object. + /// The input arguments which have been already validated. + /// The output arguments which have initialized with thier default values. + /// + protected virtual ServiceResult Call( + ISystemContext context, + NodeId objectId, + IList inputArguments, + IList outputArguments) + { + if (OnCallMethod2 != null) + { + return OnCallMethod2(context, this, objectId, inputArguments, outputArguments); + } + + if (OnCallMethod != null) + { + return OnCallMethod(context, this, inputArguments, outputArguments); + } + + if (Executable && UserExecutable) + { + return StatusCodes.BadNotImplemented; + } + + return StatusCodes.BadUserAccessDenied; + } + + /// + /// Validates the input argument. + /// + /// The context to use. + /// The input argument. + /// The index in the the list of input argument. + /// Any error. + protected ServiceResult ValidateInputArgument( + ISystemContext context, + Variant inputArgument, + int index) + { + if (InputArguments == null) + { + return StatusCodes.BadInvalidArgument; + } + + IList arguments = InputArguments.Value; + + if (arguments == null || index < 0 || index >= arguments.Count) + { + return StatusCodes.BadInvalidArgument; + } + + Argument expectedArgument = arguments[index]; + + TypeInfo typeInfo = TypeInfo.IsInstanceOfDataType( + inputArgument.Value, + expectedArgument.DataType, + expectedArgument.ValueRank, + context.NamespaceUris, + context.TypeTable); + + if (typeInfo == null) + { + return StatusCodes.BadTypeMismatch; + } + + return ServiceResult.Good; + } + + /// + /// Returns the default value for the output argument. + /// + /// The context to use. + /// The output argument description. + /// The default value. + protected object GetArgumentDefaultValue( + ISystemContext context, + Argument outputArgument) + { + return TypeInfo.GetDefaultValue(outputArgument.DataType, outputArgument.ValueRank, context.TypeTable); + } + #endregion + + #region Private Fields + private bool m_executable; + private bool m_userExecutable; + private PropertyState m_inputArguments; + private PropertyState m_outputArguments; + #endregion + } + + /// + /// Used to process a method call. + /// + public delegate ServiceResult GenericMethodCalledEventHandler( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments); + + /// + /// Used to process a method call. + /// + public delegate ServiceResult GenericMethodCalledEventHandler2( + ISystemContext context, + MethodState method, + NodeId objectId, + IList inputArguments, + IList outputArguments); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ModelCompilerExtension.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ModelCompilerExtension.cs new file mode 100644 index 00000000..b5eaa622 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ModelCompilerExtension.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Threading.Tasks; + +namespace Opc.Ua +{ + public partial class NodeState + { + /// + /// The specification that defines the node. + /// + public string Specification { get; set; } + + /// + /// The documentation for the node that is saved in the NodeSet. + /// + public string NodeSetDocumentation { get; set; } + } + + public partial class StructureDefinition + { + /// + /// The first non-inherited field in the structure definition. + /// + public int FirstExplicitFieldIndex { get; set; } + } + + public partial class NodeStateCollection + { + /// + /// Writes the collection to a stream using the Opc.Ua.Schema.UANodeSet schema. + /// + public void SaveAsNodeSet2( + ISystemContext context, + Stream ostrm, + Export.ModelTableEntry model, + DateTime lastModified, + bool outputRedundantNames) + { + Opc.Ua.Export.UANodeSet nodeSet = new Opc.Ua.Export.UANodeSet(); + + if (lastModified != DateTime.MinValue) + { + nodeSet.LastModified = lastModified; + nodeSet.LastModifiedSpecified = true; + } + + if (model != null) + { + nodeSet.Models = new Export.ModelTableEntry[] { model }; + } + + for (int ii = 0; ii < s_AliasesToUse.Length; ii++) + { + nodeSet.AddAlias(context, s_AliasesToUse[ii].Alias, s_AliasesToUse[ii].NodeId); + } + + for (int ii = 0; ii < this.Count; ii++) + { + nodeSet.Export(context, this[ii], outputRedundantNames); + } + + nodeSet.Write(ostrm); + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeBrowser.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeBrowser.cs new file mode 100644 index 00000000..d9434a2f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeBrowser.cs @@ -0,0 +1,385 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + /// + /// An interface to an object that browses the references of an node. + /// + public interface INodeBrowser : IDisposable + { + /// + /// Returns the next reference. + /// + IReference Next(); + + /// + /// Pushes a previously returned reference back into the browser. + /// + void Push(IReference reference); + } + + #region NodeBrowser Class + /// + /// A thread safe object which browses the references for an node. + /// + public class NodeBrowser : INodeBrowser + { + #region Constructors + /// + /// Creates a new browser object with a set of filters. + /// + public NodeBrowser( + ISystemContext context, + ViewDescription view, + NodeId referenceType, + bool includeSubtypes, + BrowseDirection browseDirection, + QualifiedName browseName, + IEnumerable additionalReferences, + bool internalOnly) + { + m_context = context; + m_view = view; + m_referenceType = referenceType; + m_includeSubtypes = includeSubtypes; + m_browseDirection = browseDirection; + m_browseName = browseName; + m_internalOnly = internalOnly; + m_references = new List(); + m_index = 0; + + // add any additional references if they meet the criteria. + if (additionalReferences != null) + { + foreach (IReference reference in additionalReferences) + { + if (IsRequired(reference.ReferenceTypeId, reference.IsInverse)) + { + m_references.Add(reference); + } + } + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + // nothing to do. + } + #endregion + + #region INodeBrowser Methods + /// + /// Returns the next reference. Null if no more references. + /// + public virtual IReference Next() + { + lock (DataLock) + { + IReference reference = null; + + // always return the previous pushed reference first. + if (m_pushBack != null) + { + reference = m_pushBack; + m_pushBack = null; + return reference; + } + + if (m_index < m_references.Count) + { + return m_references[m_index++]; + } + + return null; + } + } + + /// + /// Pushes a previously returned reference back into the browser. + /// + public virtual void Push(IReference reference) + { + lock (DataLock) + { + m_pushBack = reference; + } + } + #endregion + + #region Public Methods + /// + /// Returns true if the target node is required (used to apply view filters); + /// + public virtual bool IsRequired(NodeState target) + { + return true; + } + + /// + /// Returns true if the reference type is required. + /// + public virtual bool IsRequired(NodeId referenceType, bool isInverse) + { + if (NodeId.IsNull(referenceType)) + { + return false; + } + + // easiet to check inverse flag first. + if (isInverse) + { + if (m_browseDirection == BrowseDirection.Forward) + { + return false; + } + } + else + { + if (m_browseDirection == BrowseDirection.Inverse) + { + return false; + } + } + + // check for no filter or exact match. + if (NodeId.IsNull(m_referenceType) || referenceType == m_referenceType) + { + return true; + } + + // check subtypes if possible. + if (m_includeSubtypes && m_context != null) + { + if (m_context.TypeTable.IsTypeOf(referenceType, m_referenceType)) + { + return true; + } + } + + return false; + } + + /// + /// Adds a reference to target entity. + /// + public virtual void Add(IReference reference) + { + lock (DataLock) + { + m_references.Add(reference); + } + } + + /// + /// Adds a reference to target entity. + /// + /// + /// Will not add the reference if the browse name does not match the browse name filter. + /// + public virtual void Add(NodeId referenceTypeId, bool isInverse, NodeState target) + { + lock (DataLock) + { + // do not return add target unless the browse name matches. + if (!QualifiedName.IsNull(m_browseName)) + { + if (target.BrowseName != m_browseName) + { + return; + } + } + + m_references.Add(new NodeStateReference(referenceTypeId, isInverse, target)); + } + } + + /// + /// Adds a reference to target identified by its node id. + /// + public virtual void Add(NodeId referenceTypeId, bool isInverse, ExpandedNodeId targetId) + { + lock (DataLock) + { + m_references.Add(new NodeStateReference(referenceTypeId, isInverse, targetId)); + } + } + #endregion + + #region Public Properties + /// + /// Thr synchronization lock used by the browser. + /// + protected object DataLock + { + get { return m_lock; } + } + + /// + /// The table of types known to the UA server. + /// + public ISystemContext SystemContext + { + get { return m_context; } + } + + /// + /// The view being browsed. + /// + public ViewDescription View + { + get { return m_view; } + } + + /// + /// The type of reference to return. + /// + public NodeId ReferenceType + { + get { return m_referenceType; } + } + + /// + /// Whether to return subtypes of the reference. + /// + public bool IncludeSubtypes + { + get { return m_includeSubtypes; } + } + + /// + /// The direction for the references to return. + /// + public BrowseDirection BrowseDirection + { + get { return m_browseDirection; } + } + + /// + /// The browse name of the targets to return. + /// + public QualifiedName BrowseName + { + get { return m_browseName; } + } + + /// + /// Indicates that the browser only returned easy to access references stored in memory. + /// + public bool InternalOnly + { + get { return m_internalOnly; } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private ISystemContext m_context; + private ViewDescription m_view; + private NodeId m_referenceType; + private bool m_includeSubtypes; + private BrowseDirection m_browseDirection; + private IReference m_pushBack; + private List m_references; + private QualifiedName m_browseName; + private bool m_internalOnly; + private int m_index; + #endregion + } + #endregion + + #region NodeStateReference Class + /// + /// Stores the a reference for a node. + /// + public class NodeStateReference : IReference + { + #region Constructors + /// + /// Constructs a reference to an internal target. + /// + public NodeStateReference(NodeId referenceTypeId, bool isInverse, NodeState target) + { + m_referenceTypeId = referenceTypeId; + m_isInverse = isInverse; + m_targetId = target.NodeId; + m_target = target; + } + + /// + /// Constructs a reference to an external target. + /// + public NodeStateReference(NodeId referenceTypeId, bool isInverse, ExpandedNodeId targetId) + { + m_referenceTypeId = referenceTypeId; + m_isInverse = isInverse; + m_targetId = targetId; + m_target = null; + } + #endregion + + #region Public Members + /// + /// The internal target of the reference. + /// + public NodeState Target + { + get { return m_target; } + } + #endregion + + #region IReference Members + /// + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + } + + /// + public bool IsInverse + { + get { return m_isInverse; } + } + + /// + public ExpandedNodeId TargetId + { + get { return m_targetId; } + } + #endregion + + #region Private Fields + private NodeId m_referenceTypeId; + private bool m_isInverse; + private ExpandedNodeId m_targetId; + private NodeState m_target; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeState.cs new file mode 100644 index 00000000..29fb50f6 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeState.cs @@ -0,0 +1,4922 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Linq; +using System.Reflection; + +namespace Opc.Ua +{ + /// + /// The base class for custom nodes. + /// + public abstract partial class NodeState : IDisposable, IFormattable + { + #region Constructors + /// + /// Creates an empty object. + /// + /// The node class. + protected NodeState(NodeClass nodeClass) + { + m_nodeClass = nodeClass; + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + public virtual void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + // does nothing. + } + #endregion + + #region Initialization + /// + /// When overridden in a derived class, iinitializes the instance with the default values. + /// + /// The object that describes how access the system containing the data. + protected virtual void Initialize(ISystemContext context) + { + // defined by subclass. + } + + /// + /// When overridden in a derived class, initializes the any option children defined for the instance. + /// + /// The object that describes how access the system containing the data. + protected virtual void InitializeOptionalChildren(ISystemContext context) + { + // defined by subclass. + } + + /// + /// Initializes the instance with the XML or bnary (array of bytes) representation contained in the string. + /// + /// The object that describes how access the system containing the data. + /// The initialization string that is used to initializes the node. + public virtual void Initialize(ISystemContext context, string initializationString) + { + if (initializationString.StartsWith("<")) + { + using (System.IO.StringReader reader = new System.IO.StringReader(initializationString)) + { + LoadFromXml(context, reader); + } + } + else + { + byte[] bytes = Convert.FromBase64String(initializationString); + + using (System.IO.MemoryStream istrm = new MemoryStream(bytes)) + { + LoadAsBinary(context, istrm); + } + } + } + + /// + /// Initializes the instance with the default values. + /// + /// The object that describes how access the system containing the data. + /// The source node. + protected virtual void Initialize(ISystemContext context, NodeState source) + { + m_handle = source.m_handle; + m_symbolicName = source.m_symbolicName; + m_nodeId = source.m_nodeId; + m_nodeClass = source.m_nodeClass; + m_browseName = source.m_browseName; + m_displayName = source.m_displayName; + m_description = source.m_description; + m_writeMask = source.m_writeMask; + m_children = null; + m_references = null; + m_changeMasks = NodeStateChangeMasks.None; + + // set the initialization flags. + m_initialized = true; + + List children = new List(); + source.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState sourceChild = children[ii]; + BaseInstanceState child = CreateChild(context, sourceChild.BrowseName); + + if (child == null) + { + child = (BaseInstanceState)sourceChild.MemberwiseClone(); + AddChild(child); + } + + child.Initialize(context, sourceChild); + } + + List references = new List(); + source.GetReferences(context, references); + + for (int ii = 0; ii < references.Count; ii++) + { + IReference reference = references[ii]; + AddReference(reference.ReferenceTypeId, reference.IsInverse, reference.TargetId); + } + } + #endregion + + #region IFormattable Members + /// + /// Returns a string representation of the node. + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + + /// + /// Returns a string representation of the node. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format != null) + { + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + + if (!QualifiedName.IsNull(m_browseName)) + { + return Utils.Format("[{0}]{1}", m_nodeClass, m_displayName); + } + + return Utils.Format("[{0}]{1}", m_nodeClass, m_nodeId); + } + #endregion + + #region Public Properties + /// + /// An arbitrary handle associated with the node. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// What has changed in the node since was last called. + /// + /// The change masks that indicates what has changed in a node. + public NodeStateChangeMasks ChangeMasks + { + get { return m_changeMasks; } + protected set { m_changeMasks = value; } + } + + /// + /// A symbolic name for the node that is not expected to be globally unique. + /// + /// The name of the symbolic. + /// + /// This string can only contain characters that are valid for an XML element name. + /// + public string SymbolicName + { + get { return m_symbolicName; } + set { m_symbolicName = value; } + } + + /// + /// The identifier for the node. + /// + /// An instance that stores an identifier for a node in a server's address space. + public NodeId NodeId + { + get + { + return m_nodeId; + } + + set + { + if (!Object.ReferenceEquals(m_nodeId, value)) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_nodeId = value; + } + } + + /// + /// The class for the node. + /// + /// The node class that is a description of the node. + public NodeClass NodeClass + { + get { return m_nodeClass; } + } + + /// + /// The browse name of the node. + /// + /// The name qualified with a namespace. + public QualifiedName BrowseName + { + get + { + return m_browseName; + } + + set + { + if (!Object.ReferenceEquals(m_browseName, value)) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_browseName = value; + } + } + + /// + /// The display name for the node. + /// + /// Human readable qualified with a locale. + public LocalizedText DisplayName + { + get + { + return m_displayName; + } + + set + { + if (!Object.ReferenceEquals(m_displayName, value)) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_displayName = value; + } + } + + /// + /// The localized description for the node. + /// + /// Human readable qualified with a locale. + public LocalizedText Description + { + get + { + return m_description; + } + + set + { + if (!Object.ReferenceEquals(m_description, value)) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_description = value; + } + } + + /// + /// Specifies which attributes are writeable. + /// + /// A description for the AttributeWriteMask of the node fields. + public AttributeWriteMask WriteMask + { + get + { + return m_writeMask; + } + + set + { + if (m_writeMask != value) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_writeMask = value; + } + } + + /// + /// Specifies which attributes are writeable for the current user. + /// + /// A description for the AttributeWriteMask of the node fields. + public AttributeWriteMask UserWriteMask + { + get + { + return m_userWriteMask; + } + + set + { + if (m_userWriteMask != value) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_userWriteMask = value; + } + } + + /// + /// Specifies a list of permissions for the node assigned to roles. + /// + /// The Permissions that apply to the node. + public RolePermissionTypeCollection RolePermissions + { + get + { + return m_rolePermissions; + } + + set + { + if (m_rolePermissions != value) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_rolePermissions = value; + } + } + + /// + /// Specifies a list of permissions for the node assigned to roles for the current user. + /// + /// The Permissions that apply to the node for the current user. + public RolePermissionTypeCollection UserRolePermissions + { + get + { + return m_userRolePermissions; + } + + set + { + if (m_userRolePermissions != value) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_userRolePermissions = value; + } + } + + /// + /// Specifies a mask indicating any access restrictions that apply to the node. + /// + /// The server specific access restrictions of the node. + public AccessRestrictionType AccessRestrictions + { + get + { + return m_accessRestrictions; + } + + set + { + if (m_accessRestrictions != value) + { + m_changeMasks |= NodeStateChangeMasks.NonValue; + } + + m_accessRestrictions = value; + } + } + + /// + /// Gets or sets the extensions of the node set. Property used when importing nodeset2.xml files. + /// + /// + /// The extensions. + /// + public System.Xml.XmlElement[] Extensions + { + get + { + return m_extensions; + } + set + { + m_extensions = value; + } + } + + /// + /// The categories assigned to the node. + /// + public IList Categories { get; set; } + + /// + /// The release status for the node. + /// + public Opc.Ua.Export.ReleaseStatus ReleaseStatus { get; set; } + #endregion + + #region Serialization Methods + /// + /// Exports a copy of the node to a node table. + /// + /// The object that describes how access the system containing the data. + /// A table of nodes. + public void Export(ISystemContext context, NodeTable table) + { + Node node = null; + + switch (NodeClass) + { + case NodeClass.Object: { node = new ObjectNode(); break; } + case NodeClass.ObjectType: { node = new ObjectTypeNode(); break; } + case NodeClass.Variable: { node = new VariableNode(); break; } + case NodeClass.VariableType: { node = new VariableTypeNode(); break; } + case NodeClass.Method: { node = new MethodNode(); break; } + case NodeClass.ReferenceType: { node = new ReferenceTypeNode(); break; } + case NodeClass.DataType: { node = new DataTypeNode(); break; } + case NodeClass.View: { node = new ViewNode(); break; } + + default: + { + node = new Node(); + break; + } + } + + Export(context, node); + + List references = new List(); + GetReferences(context, references); + + for (int ii = 0; ii < references.Count; ii++) + { + node.ReferenceTable.Add(references[ii]); + } + + table.Attach(node); + + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].Export(context, table); + } + } + + /// + /// Exports a copy of the node to a node table. + /// + /// The object that describes how access the system containing the data. + /// The node to update with the values from the instance. + protected virtual void Export(ISystemContext context, Node node) + { + node.NodeId = this.NodeId; + node.NodeClass = this.NodeClass; + node.BrowseName = this.BrowseName; + node.DisplayName = this.DisplayName; + node.Description = this.Description; + node.WriteMask = (uint)this.WriteMask; + node.UserWriteMask = (uint)this.UserWriteMask; + } + + /// + /// Saves the node as XML in a stream. + /// + /// The context for the system being accessed. + /// The stream to write. + public void SaveAsXml(ISystemContext context, Stream ostrm) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Encoding = Encoding.UTF8; + settings.CloseOutput = true; + settings.ConformanceLevel = ConformanceLevel.Document; + settings.Indent = true; + + using (XmlWriter writer = XmlWriter.Create(ostrm, settings)) + { + XmlQualifiedName root = new XmlQualifiedName(this.SymbolicName, context.NamespaceUris.GetString(this.BrowseName.NamespaceIndex)); + + XmlEncoder encoder = new XmlEncoder(root, writer, messageContext); + + encoder.SaveStringTable("NamespaceUris", "NamespaceUri", context.NamespaceUris); + encoder.SaveStringTable("ServerUris", "ServerUri", context.ServerUris); + + Save(context, encoder); + SaveReferences(context, encoder); + SaveChildren(context, encoder); + + encoder.Close(); + } + } + + /// + /// Saves the node in a binary stream. + /// + /// The context for the system being accessed. + /// The stream to write. + public void SaveAsBinary(ISystemContext context, Stream ostrm) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + BinaryEncoder encoder = new BinaryEncoder(ostrm, messageContext); + + encoder.SaveStringTable(context.NamespaceUris); + encoder.SaveStringTable(context.ServerUris); + + AttributesToSave attributesToSave = GetAttributesToSave(context); + encoder.WriteUInt32(null, (uint)attributesToSave); + + Save(context, encoder, attributesToSave); + SaveReferences(context, encoder); + SaveChildren(context, encoder); + + encoder.Close(); + } + + /// + /// Saves the object in the binary stream. + /// + /// The context for the system being accessed. + /// The stream to write. + public void SaveAsBinary(ISystemContext context, BinaryEncoder encoder) + { + AttributesToSave attributesToSave = GetAttributesToSave(context); + encoder.WriteUInt32(null, (uint)attributesToSave); + + Save(context, encoder, attributesToSave); + SaveReferences(context, encoder); + SaveChildren(context, encoder); + } + + /// + /// Loads the node from a binary stream. + /// + /// The context for the system being accessed. + /// The stream to read. + public void LoadAsBinary(ISystemContext context, Stream istrm) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + BinaryDecoder decoder = new BinaryDecoder(istrm, messageContext); + + // check if a namespace table was provided. + NamespaceTable namespaceUris = new NamespaceTable(); + + if (!decoder.LoadStringTable(namespaceUris)) + { + namespaceUris = null; + } + + // check if a server uri table was provided. + StringTable serverUris = new StringTable(); + + if (namespaceUris != null && namespaceUris.Count > 1) + { + serverUris.Append(namespaceUris.GetString(1)); + } + + if (!decoder.LoadStringTable(serverUris)) + { + serverUris = null; + } + + // setup the mappings to use during decoding. + decoder.SetMappingTables(namespaceUris, serverUris); + + // update the node and children. + AttributesToSave attributesToLoad = (AttributesToSave)decoder.ReadUInt32(null); + Update(context, decoder, attributesToLoad); + UpdateReferences(context, decoder); + UpdateChildren(context, decoder); + } + + #region AttributesToSave Enumeration + /// + /// Flags which control the serialization of a NodeState in a stream. + /// + [Flags] + public enum AttributesToSave + { + /// + /// The default value. + /// + None = 0x00000000, + + /// + /// The AccessLevel attribute. + /// + AccessLevel = 0x00000001, + + /// + /// The ArrayDimensions attribute. + /// + ArrayDimensions = 0x00000002, + + /// + /// The BrowseName attribute. + /// + BrowseName = 0x00000004, + + /// + /// The ContainsNoLoops attribute. + /// + ContainsNoLoops = 0x00000008, + + /// + /// The DataType attribute. + /// + DataType = 0x00000010, + + /// + /// The Description attribute. + /// + Description = 0x00000020, + + /// + /// The DisplayName attribute. + /// + DisplayName = 0x00000040, + + /// + /// The EventNotifier attribute. + /// + EventNotifier = 0x00000080, + + /// + /// The Executable attribute. + /// + Executable = 0x00000100, + + /// + /// The Historizing attribute. + /// + Historizing = 0x00000200, + + /// + /// The InverseName attribute. + /// + InverseName = 0x00000400, + + /// + /// The IsAbstract attribute. + /// + IsAbstract = 0x00000800, + + /// + /// The MinimumSamplingInterval attribute. + /// + MinimumSamplingInterval = 0x00001000, + + /// + /// The NodeClass attribute. + /// + NodeClass = 0x00002000, + + /// + /// The NodeId attribute. + /// + NodeId = 0x00004000, + + /// + /// The Symmetric attribute. + /// + Symmetric = 0x00008000, + + /// + /// The UserAccessLevel attribute. + /// + UserAccessLevel = 0x00010000, + + /// + /// The UserExecutable attribute. + /// + UserExecutable = 0x00020000, + + /// + /// The UserWriteMask attribute. + /// + UserWriteMask = 0x00040000, + + /// + /// The ValueRank attribute. + /// + ValueRank = 0x00080000, + + /// + /// The WriteMask attribute. + /// + WriteMask = 0x00100000, + + /// + /// The Value attribute. + /// + Value = 0x00200000, + + /// + /// The SymbolicName for the node. + /// + SymbolicName = 0x00400000, + + /// + /// The target of the TypeDefinitionId reference. + /// + TypeDefinitionId = 0x00800000, + + /// + /// The target of the HasModellingRule reference. + /// + ModellingRuleId = 0x01000000, + + /// + /// The NumericId for the node. + /// + NumericId = 0x02000000, + + /// + /// The type of reference between a child and a parent. + /// + ReferenceTypeId = 0x08000000, + + /// + /// The source of the HasSubType reference. + /// + SuperTypeId = 0x10000000, + + /// + /// The StatusCode associated with the Value attribute. + /// + StatusCode = 0x20000000, + + /// + /// The DataTypeDefinition attribute of a DataType Node. + /// + DataTypeDefinition = 0x40000000 + } + #endregion + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public virtual AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = AttributesToSave.None; + + if (!String.IsNullOrEmpty(m_symbolicName)) + { + if (m_browseName == null || m_symbolicName != m_browseName.Name) + { + attributesToSave |= AttributesToSave.SymbolicName; + } + } + + attributesToSave |= AttributesToSave.NodeClass; + + if (!NodeId.IsNull(m_nodeId)) + { + attributesToSave |= AttributesToSave.NodeId; + } + + if (!QualifiedName.IsNull(m_browseName)) + { + attributesToSave |= AttributesToSave.BrowseName; + } + + if (!LocalizedText.IsNullOrEmpty(m_displayName)) + { + if (m_browseName == null || !String.IsNullOrEmpty(m_displayName.Locale) || m_displayName.Text != m_browseName.Name) + { + attributesToSave |= AttributesToSave.DisplayName; + } + } + + if (!LocalizedText.IsNullOrEmpty(m_description)) + { + attributesToSave |= AttributesToSave.Description; + } + + if (m_writeMask != AttributeWriteMask.None) + { + attributesToSave |= AttributesToSave.WriteMask; + } + + if (m_writeMask != AttributeWriteMask.None) + { + attributesToSave |= AttributesToSave.UserAccessLevel; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context for the system being accessed. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public virtual void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + encoder.WriteEnumerated(null, m_nodeClass); + + if ((attributesToSave & AttributesToSave.SymbolicName) != 0) + { + encoder.WriteString(null, m_symbolicName); + } + + if ((attributesToSave & AttributesToSave.BrowseName) != 0) + { + encoder.WriteQualifiedName(null, m_browseName); + } + + if ((attributesToSave & AttributesToSave.NodeId) != 0) + { + encoder.WriteNodeId(null, m_nodeId); + } + + if ((attributesToSave & AttributesToSave.DisplayName) != 0) + { + encoder.WriteLocalizedText(null, m_displayName); + } + + if ((attributesToSave & AttributesToSave.Description) != 0) + { + encoder.WriteLocalizedText(null, m_description); + } + + if ((attributesToSave & AttributesToSave.WriteMask) != 0) + { + encoder.WriteEnumerated(null, m_writeMask); + } + + if ((attributesToSave & AttributesToSave.UserWriteMask) != 0) + { + encoder.WriteEnumerated(null, m_userWriteMask); + } + } + + /// + /// Updates the object from a binary stream. + /// + /// The context for the system being accessed. + /// The decoder to read from. + /// The masks indicating what attributes to read. + public virtual void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attributesToLoad) + { + if ((attributesToLoad & AttributesToSave.NodeClass) != 0) + { + m_nodeClass = (NodeClass)decoder.ReadEnumerated(null, typeof(NodeClass)); + } + + if ((attributesToLoad & AttributesToSave.SymbolicName) != 0) + { + m_symbolicName = decoder.ReadString(null); + } + + if ((attributesToLoad & AttributesToSave.BrowseName) != 0) + { + m_browseName = decoder.ReadQualifiedName(null); + } + + if (String.IsNullOrEmpty(m_symbolicName) && m_browseName != null) + { + m_symbolicName = m_browseName.Name; + } + + if ((attributesToLoad & AttributesToSave.NodeId) != 0) + { + m_nodeId = decoder.ReadNodeId(null); + } + + if ((attributesToLoad & AttributesToSave.DisplayName) != 0) + { + m_displayName = decoder.ReadLocalizedText(null); + } + + if (LocalizedText.IsNullOrEmpty(m_displayName) && m_browseName != null) + { + m_displayName = m_browseName.Name; + } + + if ((attributesToLoad & AttributesToSave.Description) != 0) + { + m_description = decoder.ReadLocalizedText(null); + } + + if ((attributesToLoad & AttributesToSave.WriteMask) != 0) + { + m_writeMask = (AttributeWriteMask)decoder.ReadEnumerated(null, typeof(AttributeWriteMask)); + } + + if ((attributesToLoad & AttributesToSave.UserWriteMask) != 0) + { + m_userWriteMask = (AttributeWriteMask)decoder.ReadEnumerated(null, typeof(AttributeWriteMask)); + } + } + + /// + /// Saves the children in a binary stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public virtual void SaveChildren(ISystemContext context, BinaryEncoder encoder) + { + List children = new List(); + GetChildren(context, children); + + encoder.WriteInt32(null, children.Count); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + AttributesToSave attributesToSave = child.GetAttributesToSave(context); + encoder.WriteUInt32(null, (uint)attributesToSave); + + child.Save(context, encoder, attributesToSave); + child.SaveReferences(context, encoder); + child.SaveChildren(context, encoder); + } + } + + /// + /// Loads the children from a binary stream. + /// + /// The context for the system being accessed. + /// The decoder to read from. + public virtual void UpdateChildren(ISystemContext context, BinaryDecoder decoder) + { + int count = decoder.ReadInt32(null); + + for (int ii = 0; ii < count; ii++) + { + try + { + BaseInstanceState child = UpdateChild(context, decoder); + } + catch (Exception) + { + throw; + } + } + } + + /// + /// Reads attributes for the next child found in the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + /// The updated child. + /// + /// The child is created if it does not already exist. + /// Recursively updates any children of the child. + /// + protected BaseInstanceState UpdateChild(ISystemContext context, BinaryDecoder decoder) + { + AttributesToSave attributesToLoad = (AttributesToSave)decoder.ReadUInt32(null); + + NodeClass nodeClass = NodeClass.Unspecified; + string symbolicName = null; + QualifiedName browseName = null; + + nodeClass = (NodeClass)decoder.ReadEnumerated(null, typeof(NodeClass)); + attributesToLoad &= ~AttributesToSave.NodeClass; + + if ((attributesToLoad & AttributesToSave.SymbolicName) != 0) + { + symbolicName = decoder.ReadString(null); + attributesToLoad &= ~AttributesToSave.SymbolicName; + } + + if ((attributesToLoad & AttributesToSave.BrowseName) != 0) + { + browseName = decoder.ReadQualifiedName(null); + attributesToLoad &= ~AttributesToSave.BrowseName; + } + + if (String.IsNullOrEmpty(symbolicName) && browseName != null) + { + symbolicName = browseName.Name; + } + + // check for children defined by the type. + BaseInstanceState child = CreateChild(context, browseName); + + if (child != null) + { + child.SymbolicName = symbolicName; + child.BrowseName = browseName; + + // update attributes. + child.Update(context, decoder, attributesToLoad); + + // update any references. + child.UpdateReferences(context, decoder); + + // update any children. + child.UpdateChildren(context, decoder); + + // all done. + return child; + } + + // handle unknown child. + child = UpdateUnknownChild(context, decoder, this, attributesToLoad, nodeClass, symbolicName, browseName); + + // add the child. + if (child != null) + { + child.BrowseName = browseName; + AddChild(child); + } + + return child; + } + + /// + /// Creates a node and initializes it from the stream. + /// + /// The context for the system being accessed. + /// The decoder. + /// The new node. + public static NodeState LoadNode( + ISystemContext context, + BinaryDecoder decoder) + { + AttributesToSave attributesToLoad = (AttributesToSave)decoder.ReadUInt32(null); + + NodeClass nodeClass = NodeClass.Unspecified; + string symbolicName = null; + QualifiedName browseName = null; + + nodeClass = (NodeClass)decoder.ReadEnumerated(null, typeof(NodeClass)); + attributesToLoad &= ~AttributesToSave.NodeClass; + + if ((attributesToLoad & AttributesToSave.SymbolicName) != 0) + { + symbolicName = decoder.ReadString(null); + attributesToLoad &= ~AttributesToSave.SymbolicName; + } + + if ((attributesToLoad & AttributesToSave.BrowseName) != 0) + { + browseName = decoder.ReadQualifiedName(null); + attributesToLoad &= ~AttributesToSave.BrowseName; + } + + if (String.IsNullOrEmpty(symbolicName) && browseName != null) + { + symbolicName = browseName.Name; + } + + // read the node from the stream. + return LoadUnknownNode(context, decoder, attributesToLoad, nodeClass, symbolicName, browseName); + } + + /// + /// Saves the reference table in a binary stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public void SaveReferences(ISystemContext context, BinaryEncoder encoder) + { + if (m_references == null || m_references.Count <= 0) + { + encoder.WriteInt32(null, -1); + return; + } + + encoder.WriteInt32(null, m_references.Count); + + foreach (IReference reference in m_references.Keys) + { + encoder.WriteNodeId(null, reference.ReferenceTypeId); + encoder.WriteBoolean(null, reference.IsInverse); + encoder.WriteExpandedNodeId(null, reference.TargetId); + } + } + + /// + /// Loads the reference table from a binary stream. + /// + /// The context for the system being accessed. + /// The decoder to read from. + public void UpdateReferences(ISystemContext context, BinaryDecoder decoder) + { + int count = decoder.ReadInt32(null); + + for (int ii = 0; ii < count; ii++) + { + NodeId referenceTypeId = decoder.ReadNodeId(null); + bool isInverse = decoder.ReadBoolean(null); + ExpandedNodeId targetId = decoder.ReadExpandedNodeId(null); + + if (m_references == null) + { + m_references = new IReferenceDictionary(); + } + + m_references[new NodeStateReference(referenceTypeId, isInverse, targetId)] = null; + } + } + + /// + /// Saves the node as XML in a stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public void SaveAsXml(ISystemContext context, XmlEncoder encoder) + { + encoder.Push(this.SymbolicName, context.NamespaceUris.GetString(this.BrowseName.NamespaceIndex)); + + Save(context, encoder); + SaveReferences(context, encoder); + SaveChildren(context, encoder); + + encoder.Pop(); + } + + /// + /// Initializes the node from XML in a stream. + /// + /// The context for the system being accessed. + /// The stream to read. + public void LoadFromXml(ISystemContext context, TextReader input) + { + XmlReaderSettings settings = new XmlReaderSettings(); + settings.ConformanceLevel = ConformanceLevel.Document; + + using (XmlReader reader = XmlReader.Create(input, settings)) + { + LoadFromXml(context, reader); + } + } + + /// + /// Initializes the node from XML in a stream. + /// + /// The context for the system being accessed. + /// The stream to read. + public void LoadFromXml(ISystemContext context, Stream input) + { + XmlReaderSettings settings = new XmlReaderSettings(); + settings.ConformanceLevel = ConformanceLevel.Document; + + using (XmlReader reader = XmlReader.Create(input, settings)) + { + LoadFromXml(context, reader); + } + } + + /// + /// Initializes the node from XML in a stream. + /// + /// The context for the system being accessed. + /// The stream to read. + public void LoadFromXml(ISystemContext context, XmlReader reader) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + reader.MoveToContent(); + + // get the root of the child element. + XmlQualifiedName symbolicName = new XmlQualifiedName(reader.LocalName, reader.NamespaceURI); + + // map to a namespace index. + int namespaceIndex = context.NamespaceUris.GetIndex(symbolicName.Namespace); + + if (namespaceIndex < 0) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Could not resolve namespace uri: {0}", symbolicName.Namespace); + } + + // initialize browse name. + this.SymbolicName = symbolicName.Name; + this.BrowseName = new QualifiedName(symbolicName.Name, (ushort)namespaceIndex); + + XmlDecoder decoder = new XmlDecoder(null, reader, messageContext); + + // check if a namespace table was provided. + NamespaceTable namespaceUris = new NamespaceTable(); + + if (!decoder.LoadStringTable("NamespaceUris", "NamespaceUri", namespaceUris)) + { + namespaceUris = null; + } + + // check if a server uri table was provided. + StringTable serverUris = new StringTable(); + + if (!decoder.LoadStringTable("ServerUris", "ServerUri", serverUris)) + { + serverUris = null; + } + + // setup the mappings to use during decoding. + decoder.SetMappingTables(namespaceUris, serverUris); + + // update the node and children. + Update(context, decoder); + UpdateReferences(context, decoder); + UpdateChildren(context, decoder); + } + + /// + /// Initializes the node from XML in a stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public void LoadFromXml(ISystemContext context, XmlDecoder decoder) + { + // get the name of the child element. + XmlQualifiedName symbolicName = decoder.Peek(XmlNodeType.Element); + + if (symbolicName == null) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Expecting an XML start element in stream."); + } + + // map to a namespace index. + int namespaceIndex = context.NamespaceUris.GetIndex(symbolicName.Namespace); + + if (namespaceIndex < 0) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Could not resolve namespace uri: {0}", symbolicName.Namespace); + } + + // initialize browse name. + this.SymbolicName = symbolicName.Name; + this.BrowseName = new QualifiedName(symbolicName.Name, (ushort)namespaceIndex); + + // initialize the node. + decoder.ReadStartElement(); + + Update(context, decoder); + UpdateReferences(context, decoder); + UpdateChildren(context, decoder); + + decoder.Skip(symbolicName); + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public virtual void Save(ISystemContext context, XmlEncoder encoder) + { + encoder.PushNamespace(Namespaces.OpcUaXsd); + + encoder.WriteEnumerated("NodeClass", m_nodeClass); + + if (!NodeId.IsNull(m_nodeId)) + { + encoder.WriteNodeId("NodeId", m_nodeId); + } + + if (!QualifiedName.IsNull(m_browseName)) + { + encoder.WriteQualifiedName("BrowseName", m_browseName); + } + + if (!LocalizedText.IsNullOrEmpty(m_displayName)) + { + if (m_browseName == null || !String.IsNullOrEmpty(m_displayName.Locale) || m_browseName.Name != m_displayName.Text) + { + encoder.WriteLocalizedText("DisplayName", m_displayName); + } + } + + if (!LocalizedText.IsNullOrEmpty(m_description)) + { + encoder.WriteLocalizedText("Description", m_description); + } + + if (m_writeMask != AttributeWriteMask.None) + { + encoder.WriteEnumerated("WriteMask", m_writeMask); + } + + if (m_writeMask != AttributeWriteMask.None) + { + encoder.WriteEnumerated("UserWriteMask", m_userWriteMask); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public virtual void Update(ISystemContext context, XmlDecoder decoder) + { + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("NodeClass")) + { + NodeClass nodeClass = (NodeClass)decoder.ReadEnumerated("NodeClass", typeof(NodeClass)); + + if (NodeClass != NodeClass.Unspecified && nodeClass != NodeClass) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Unexpected NodeClass in input stream. {0} != {1}", NodeClass, nodeClass); + } + } + + if (decoder.Peek("NodeId")) + { + NodeId nodeId = decoder.ReadNodeId("NodeId"); + + if (!NodeId.IsNull(nodeId)) + { + NodeId = nodeId; + } + } + + if (decoder.Peek("BrowseName")) + { + QualifiedName browseName = decoder.ReadQualifiedName("BrowseName"); + + if (!QualifiedName.IsNull(browseName)) + { + BrowseName = browseName; + } + } + + if (decoder.Peek("DisplayName")) + { + DisplayName = decoder.ReadLocalizedText("DisplayName"); + } + + if (LocalizedText.IsNullOrEmpty(m_displayName) && m_browseName != null) + { + DisplayName = m_browseName.Name; + } + + if (decoder.Peek("Description")) + { + Description = decoder.ReadLocalizedText("Description"); + } + + if (decoder.Peek("WriteMask")) + { + WriteMask = (AttributeWriteMask)decoder.ReadEnumerated("WriteMask", typeof(AttributeWriteMask)); + } + + if (decoder.Peek("UserWriteMask")) + { + UserWriteMask = (AttributeWriteMask)decoder.ReadEnumerated("UserWriteMask", typeof(AttributeWriteMask)); + } + + decoder.PopNamespace(); + + // set the initialization flags. + m_initialized = true; + } + + /// + /// Saves the children from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public virtual void SaveChildren(ISystemContext context, XmlEncoder encoder) + { + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + encoder.Push(child.SymbolicName, context.NamespaceUris.GetString(child.BrowseName.NamespaceIndex)); + + child.Save(context, encoder); + child.SaveReferences(context, encoder); + child.SaveChildren(context, encoder); + + encoder.Pop(); + } + } + + /// + /// Saves a refernce table from an XML stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public void SaveReferences(ISystemContext context, XmlEncoder encoder) + { + if (m_references == null || m_references.Count <= 0) + { + return; + } + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + try + { + encoder.Push("References", Namespaces.OpcUaXsd); + + foreach (IReference reference in m_references.Keys) + { + encoder.Push("Reference", Namespaces.OpcUaXsd); + + if (!NodeId.IsNull(reference.ReferenceTypeId)) + { + encoder.WriteNodeId("ReferenceTypeId", reference.ReferenceTypeId); + } + + if (reference.IsInverse) + { + encoder.WriteBoolean("IsInverse", reference.IsInverse); + } + + if (!NodeId.IsNull(reference.TargetId)) + { + encoder.WriteExpandedNodeId("TargetId", reference.TargetId); + } + + encoder.Pop(); + } + + encoder.Pop(); + } + finally + { + encoder.PopNamespace(); + } + } + + /// + /// Reads attributes for the children from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + /// + /// Any children found in the stream that do not exist are created and initialized from the stream. + /// + public virtual void UpdateChildren(ISystemContext context, XmlDecoder decoder) + { + // get the first child. + BaseInstanceState child = UpdateChild(context, decoder); + + while (child != null) + { + // loop until all children are read. + child = UpdateChild(context, decoder); + } + } + + /// + /// Loads any additional references from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public virtual void UpdateReferences(ISystemContext context, XmlDecoder decoder) + { + // remove existing references. + if (m_references != null) + { + m_references.Clear(); + m_changeMasks |= NodeStateChangeMasks.References; + } + + // check if the table exists. + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (!decoder.Peek("References")) + { + decoder.PopNamespace(); + return; + } + + // read the references. + decoder.ReadStartElement(); + + while (decoder.Peek("Reference")) + { + decoder.ReadStartElement(); + + NodeId referenceTypeId = null; + bool isInverse = false; + ExpandedNodeId targetId = null; + + if (decoder.Peek("ReferenceTypeId")) + { + referenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + } + + if (decoder.Peek("IsInverse")) + { + isInverse = decoder.ReadBoolean("IsInverse"); + } + + if (decoder.Peek("TargetId")) + { + targetId = decoder.ReadExpandedNodeId("TargetId"); + } + + // create table if it does not already exist. + if (m_references == null) + { + m_references = new IReferenceDictionary(); + } + + // create reference. + m_references[new NodeStateReference(referenceTypeId, isInverse, targetId)] = null; + m_changeMasks |= NodeStateChangeMasks.References; + + decoder.Skip(new XmlQualifiedName("Reference", Namespaces.OpcUaXsd)); + } + + decoder.Skip(new XmlQualifiedName("References", Namespaces.OpcUaXsd)); + + decoder.PopNamespace(); + } + + /// + /// Reads attributes for the next child found in the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + /// The updated child. + /// + /// The child is created if it does not already exist. + /// Recursively updates any children of the child. + /// + protected BaseInstanceState UpdateChild(ISystemContext context, XmlDecoder decoder) + { + // get the name of the child element. + XmlQualifiedName childName = decoder.Peek(XmlNodeType.Element); + + if (childName == null) + { + return null; + } + + // map to a namespace index. + int namespaceIndex = context.NamespaceUris.GetIndex(childName.Namespace); + + if (namespaceIndex < 0) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Could not resolve namespace uri: {0}", childName.Namespace); + } + + // move to body. + decoder.ReadStartElement(); + + QualifiedName symbolicName = new QualifiedName(childName.Name, (ushort)namespaceIndex); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + // pre-fetch enough information to know what type of node to create. + NodeClass nodeClass = (NodeClass)decoder.ReadEnumerated("NodeClass", typeof(NodeClass)); + NodeId nodeId = decoder.ReadNodeId("NodeId"); + QualifiedName browseName = decoder.ReadQualifiedName("BrowseName"); + + decoder.PopNamespace(); + + // check for children defined by the type. + BaseInstanceState child = CreateChild(context, browseName); + + if (child != null) + { + child.SymbolicName = childName.Name; + child.NodeId = nodeId; + child.BrowseName = browseName; + + // update attributes. + child.Update(context, decoder); + + // update any references. + child.UpdateReferences(context, decoder); + + // update any children. + child.UpdateChildren(context, decoder); + + // skip to end. + decoder.Skip(childName); + return child; + } + + // handle unknown child. + child = UpdateUnknownChild(context, decoder, this, childName, nodeClass, browseName); + + // add the child. + if (child != null) + { + child.NodeId = nodeId; + AddChild(child); + } + + return child; + } + + /// + /// Creates a node and initializes it from the stream. + /// + /// The context for the system being accessed. + /// The decoder. + /// The new node. + public static NodeState LoadNode( + ISystemContext context, + XmlDecoder decoder) + { + // get the name of the child element. + XmlQualifiedName childName = decoder.Peek(XmlNodeType.Element); + + if (childName == null) + { + return null; + } + + // map to a namespace index. + int namespaceIndex = context.NamespaceUris.GetIndex(childName.Namespace); + + if (namespaceIndex < 0) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Could not resolve namespace uri: {0}", childName.Namespace); + } + + // move to body. + decoder.ReadStartElement(); + + QualifiedName browseName = new QualifiedName(childName.Name, (ushort)namespaceIndex); + + // read the node from the stream. + return LoadUnknownNode(context, decoder, childName, browseName); + } + + #region private methods + + /// + /// Updates a child which is not defined by the type definition. + /// + /// The context for the system being accessed. + /// The decoder. + /// The parent. + /// The attributes to load. + /// The node class. + /// Symbolic name of the node. + /// A name qualified with a namespace. + /// An instance of the type that is a base class for all instance nodes. + private static BaseInstanceState UpdateUnknownChild( + ISystemContext context, + BinaryDecoder decoder, + NodeState parent, + AttributesToSave attributesToLoad, + NodeClass nodeClass, + string symbolicName, + QualifiedName browseName) + { + decoder.PushNamespace(Namespaces.OpcUaXsd); + + NodeId nodeId = null; + LocalizedText displayName = null; + LocalizedText description = null; + AttributeWriteMask writeMask = AttributeWriteMask.None; + AttributeWriteMask userWriteMask = AttributeWriteMask.None; + NodeId referenceTypeId = null; + NodeId typeDefinitionId = null; + + if ((attributesToLoad & AttributesToSave.NodeId) != 0) + { + nodeId = decoder.ReadNodeId(null); + attributesToLoad &= ~AttributesToSave.NodeId; + } + + if ((attributesToLoad & AttributesToSave.DisplayName) != 0) + { + displayName = decoder.ReadLocalizedText(null); + attributesToLoad &= ~AttributesToSave.DisplayName; + } + + if (LocalizedText.IsNullOrEmpty(displayName) && browseName != null) + { + displayName = browseName.Name; + } + + if ((attributesToLoad & AttributesToSave.Description) != 0) + { + description = decoder.ReadLocalizedText(null); + attributesToLoad &= ~AttributesToSave.Description; + } + + if ((attributesToLoad & AttributesToSave.WriteMask) != 0) + { + writeMask = (AttributeWriteMask)decoder.ReadEnumerated(null, typeof(AttributeWriteMask)); + attributesToLoad &= ~AttributesToSave.WriteMask; + } + + if ((attributesToLoad & AttributesToSave.UserWriteMask) != 0) + { + writeMask = (AttributeWriteMask)decoder.ReadEnumerated(null, typeof(AttributeWriteMask)); + attributesToLoad &= ~AttributesToSave.UserWriteMask; + } + + if ((attributesToLoad & AttributesToSave.ReferenceTypeId) != 0) + { + referenceTypeId = decoder.ReadNodeId(null); + attributesToLoad &= ~AttributesToSave.ReferenceTypeId; + } + + if ((attributesToLoad & AttributesToSave.TypeDefinitionId) != 0) + { + typeDefinitionId = decoder.ReadNodeId(null); + attributesToLoad &= ~AttributesToSave.TypeDefinitionId; + } + + // get the node factory. + NodeStateFactory factory = context.NodeStateFactory; + + if (factory == null) + { + factory = new NodeStateFactory(); + } + + // create the appropriate node. + BaseInstanceState child = factory.CreateInstance( + context, + parent, + nodeClass, + browseName, + referenceTypeId, + typeDefinitionId) as BaseInstanceState; + + if (child == null) + { + throw ServiceResultException.Create( + StatusCodes.BadDecodingError, + "Could not load child '{1}', with NodeClass {0}", + nodeClass, + browseName); + } + + // initialize the child from the stream. + child.SymbolicName = symbolicName; + child.NodeId = nodeId; + child.BrowseName = browseName; + child.DisplayName = displayName; + child.Description = description; + child.WriteMask = writeMask; + child.UserWriteMask = userWriteMask; + child.ReferenceTypeId = referenceTypeId; + child.TypeDefinitionId = typeDefinitionId; + + // update attributes. + child.Update(context, decoder, attributesToLoad); + + // update any references. + child.UpdateReferences(context, decoder); + + // update any children. + child.UpdateChildren(context, decoder); + + return child; + } + + /// + /// Reads an unknown node from a stream. + /// + private static NodeState LoadUnknownNode( + ISystemContext context, + BinaryDecoder decoder, + AttributesToSave attributesToLoad, + NodeClass nodeClass, + string symbolicName, + QualifiedName browseName) + { + // create the appropriate node. + switch (nodeClass) + { + case NodeClass.Variable: + case NodeClass.Object: + case NodeClass.Method: + { + return UpdateUnknownChild(context, decoder, null, attributesToLoad, nodeClass, symbolicName, browseName); + } + } + + // get the node factory. + NodeStateFactory factory = context.NodeStateFactory; + + if (factory == null) + { + factory = new NodeStateFactory(); + } + + // create the appropriate node. + NodeState child = factory.CreateInstance( + context, + null, + nodeClass, + browseName, + null, + null); + + if (child == null) + { + throw ServiceResultException.Create( + StatusCodes.BadDecodingError, + "Could not load node '{1}', with NodeClass {0}", + nodeClass, + browseName); + } + + // update symbolic name. + child.SymbolicName = symbolicName; + child.BrowseName = browseName; + + // update attributes. + child.Update(context, decoder, attributesToLoad); + + // update any references. + child.UpdateReferences(context, decoder); + + // update any children. + child.UpdateChildren(context, decoder); + + return child; + } + + /// + /// Reads an unknown node from a stream. + /// + private static NodeState LoadUnknownNode( + ISystemContext context, + XmlDecoder decoder, + XmlQualifiedName childName, + QualifiedName browseName) + { + decoder.PushNamespace(Namespaces.OpcUaXsd); + + // pre-fetch enough information to know what type of node to create. + NodeClass nodeClass = (NodeClass)decoder.ReadEnumerated("NodeClass", typeof(NodeClass)); + + decoder.PopNamespace(); + + // create the appropriate node. + switch (nodeClass) + { + case NodeClass.Variable: + case NodeClass.Object: + case NodeClass.Method: + { + return UpdateUnknownChild(context, decoder, null, childName, nodeClass, browseName); + } + } + + // get the node factory. + NodeStateFactory factory = context.NodeStateFactory; + + if (factory == null) + { + factory = new NodeStateFactory(); + } + + // create the appropriate node. + NodeState child = factory.CreateInstance( + context, + null, + nodeClass, + browseName, + null, + null); + + if (child == null) + { + throw ServiceResultException.Create( + StatusCodes.BadDecodingError, + "Could not load node '{1}', with NodeClass {0}", + nodeClass, + browseName); + } + + // update symbolic name. + child.SymbolicName = childName.Name; + + // update attributes. + child.Update(context, decoder); + + // update any references. + child.UpdateReferences(context, decoder); + + // update any children. + child.UpdateChildren(context, decoder); + + // skip to the end of the child. + decoder.Skip(childName); + + return child; + } + + /// + /// Updates a child which is not defined by the type definition. + /// + private static BaseInstanceState UpdateUnknownChild( + ISystemContext context, + XmlDecoder decoder, + NodeState parent, + XmlQualifiedName childName, + NodeClass nodeClass, + QualifiedName browseName) + { + decoder.PushNamespace(Namespaces.OpcUaXsd); + + // pre-fetch enough information to know what type of node to create. + NodeId nodeId = decoder.ReadNodeId("NodeId"); + + if (decoder.Peek("BrowseName")) + { + browseName = decoder.ReadQualifiedName("BrowseName"); + } + + LocalizedText displayName = null; + + if (decoder.Peek("DisplayName")) + { + displayName = decoder.ReadLocalizedText("DisplayName"); + } + + if (LocalizedText.IsNullOrEmpty(displayName) && browseName != null) + { + displayName = browseName.Name; + } + + LocalizedText description = null; + + if (decoder.Peek("Description")) + { + description = decoder.ReadLocalizedText("Description"); + } + + AttributeWriteMask writeMask = (AttributeWriteMask)decoder.ReadEnumerated("WriteMask", typeof(AttributeWriteMask)); + AttributeWriteMask userWriteMask = (AttributeWriteMask)decoder.ReadEnumerated("UserWriteMask", typeof(AttributeWriteMask)); + NodeId referenceTypeId = decoder.ReadNodeId("ReferenceTypeId"); + NodeId typeDefinitionId = decoder.ReadNodeId("TypeDefinitionId"); + + decoder.PopNamespace(); + + // get the node factory. + NodeStateFactory factory = context.NodeStateFactory; + + if (factory == null) + { + factory = new NodeStateFactory(); + } + + // create the appropriate node. + BaseInstanceState child = factory.CreateInstance( + context, + parent, + nodeClass, + browseName, + referenceTypeId, + typeDefinitionId) as BaseInstanceState; + + if (child == null) + { + throw ServiceResultException.Create( + StatusCodes.BadDecodingError, + "Could not load child '{1}', with NodeClass {0}", + nodeClass, + browseName); + } + + // initialize the child from the stream. + child.SymbolicName = childName.Name; + child.NodeId = nodeId; + child.BrowseName = browseName; + child.DisplayName = displayName; + child.Description = description; + child.WriteMask = writeMask; + child.UserWriteMask = userWriteMask; + child.ReferenceTypeId = referenceTypeId; + child.TypeDefinitionId = typeDefinitionId; + + // update attributes. + child.Update(context, decoder); + + // update any references. + child.UpdateReferences(context, decoder); + + // update any children. + child.UpdateChildren(context, decoder); + + // skip to the end of the child. + decoder.Skip(childName); + + return child; + } + #endregion + + #endregion + + #region Events + /// + /// An event which allows multiple sinks to be notified when the OnStateChanged callback is called. + /// + public event NodeStateChangedHandler StateChanged; + #endregion + + #region Callback Handlers + /// + /// Called when the Validate method is called + /// + public NodeStateValidateHandler OnValidate; + + /// + /// Called when ClearChangeMasks is called and the ChangeMask is not None. + /// + public NodeStateChangedHandler OnStateChanged; + + /// + /// Called when a reference gets added to the node + /// + public NodeStateReferenceAdded OnReferenceAdded; + + /// + /// Called when a reference gets removed from the node + /// + public NodeStateReferenceRemoved OnReferenceRemoved; + + /// + /// Called when a node produces an event that needs to be reported. + /// + public NodeStateReportEventHandler OnReportEvent; + + /// + /// Called when ClearChangeMasks is called and the ChangeMask is not None. + /// + public NodeStateConditionRefreshEventHandler OnConditionRefresh; + + /// + /// Called after the CreateBrowser method is called. + /// + public NodeStateCreateBrowserEventHandler OnCreateBrowser; + + /// + /// Called after the PopulateBrowser method is called. + /// + public NodeStatePopulateBrowserEventHandler OnPopulateBrowser; + + /// + /// Called when the NodeId attribute is read. + /// + public NodeAttributeEventHandler OnReadNodeId; + + /// + /// Called when the NodeId attribute is written. + /// + public NodeAttributeEventHandler OnWriteNodeId; + + /// + /// Called when the NodeClass attribute is read. + /// + public NodeAttributeEventHandler OnReadNodeClass; + + /// + /// Called when the NodeClass attribute is written. + /// + public NodeAttributeEventHandler OnWriteNodeClass; + + /// + /// Called when the BrowseName attribute is read. + /// + public NodeAttributeEventHandler OnReadBrowseName; + + /// + /// Called when the BrowseName attribute is written. + /// + public NodeAttributeEventHandler OnWriteBrowseName; + + /// + /// Called when the DisplayName attribute is read. + /// + public NodeAttributeEventHandler OnReadDisplayName; + + /// + /// Called when the DisplayName attribute is written. + /// + public NodeAttributeEventHandler OnWriteDisplayName; + + /// + /// Called when the Description attribute is read. + /// + public NodeAttributeEventHandler OnReadDescription; + + /// + /// Called when the Description attribute is written. + /// + public NodeAttributeEventHandler OnWriteDescription; + + /// + /// Called when the WriteMask attribute is read. + /// + public NodeAttributeEventHandler OnReadWriteMask; + + /// + /// Called when the WriteMask attribute is written. + /// + public NodeAttributeEventHandler OnWriteWriteMask; + + /// + /// Called when the UserWriteMask attribute is read. + /// + public NodeAttributeEventHandler OnReadUserWriteMask; + + /// + /// Called when the UserWriteMask attribute is written. + /// + public NodeAttributeEventHandler OnWriteUserWriteMask; + + /// + /// Called when the RolePermissions attribute is read. + /// + public NodeAttributeEventHandler OnReadRolePermissions; + + /// + /// Called when the RolePermissions attribute is written. + /// + public NodeAttributeEventHandler OnWriteRolePermissions; + + /// + /// Called when the UserRolePermissions attribute is read. + /// + public NodeAttributeEventHandler OnReadUserRolePermissions; + + /// + /// Called when the UserRolePermissions attribute is written. + /// + public NodeAttributeEventHandler OnWriteUserRolePermissions; + + /// + /// Called when the AccessRestrictions attribute is read. + /// + public NodeAttributeEventHandler OnReadAccessRestrictions; + + /// + /// Called when the AccessRestrictions attribute is written. + /// + public NodeAttributeEventHandler OnWriteAccessRestrictions; + #endregion + + #region Public Methods + /// + /// Returns the root node if the node is part of an instance hierarchy. + /// + /// + public NodeState GetHierarchyRoot() + { + // only instance nodes can be part of a hierarchy. + BaseInstanceState instance = this as BaseInstanceState; + + if (instance == null || instance.Parent == null) + { + return this; + } + + // find the root. + NodeState root = instance.Parent; + + while (root != null) + { + instance = root as BaseInstanceState; + + if (instance == null || instance.Parent == null) + { + return root; + } + + root = instance.Parent; + } + + return root; + } + + /// + /// True if events produced by the instance are being monitored. + /// + public bool AreEventsMonitored + { + get { return m_areEventsMonitored > 0; } + } + + /// + /// True if the node and its children have been initialized. + /// + public bool Initialized + { + get { return m_initialized; } + set { m_initialized = value; } + } + + /// + /// True if the node must be validated with the underlying system before use. + /// + public bool ValidationRequired + { + get { return OnValidate != null; } + } + + /// + /// Sets the flag which indicates whether event are being monitored for the instance and its children. + /// + /// The system context. + /// True if monitoring is active. + /// Whether to recursively set the flag on any children. + public void SetAreEventsMonitored(ISystemContext context, bool areEventsMonitored, bool includeChildren) + { + if (areEventsMonitored) + { + m_areEventsMonitored++; + } + else if (m_areEventsMonitored > 0) + { + m_areEventsMonitored--; + } + + // propagate monitoring flag to children. + if (includeChildren) + { + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].SetAreEventsMonitored(context, areEventsMonitored, true); + } + + // propagate monitoring flag to target notifiers. + if (m_notifiers != null) + { + for (int ii = 0; ii < m_notifiers.Count; ii++) + { + if (!m_notifiers[ii].IsInverse) + { + m_notifiers[ii].Node.SetAreEventsMonitored(context, areEventsMonitored, includeChildren); + } + } + } + } + } + + /// + /// Reports an event produced by the node. + /// + /// The system context. + /// The event to report. + public virtual void ReportEvent(ISystemContext context, IFilterTarget e) + { + if (OnReportEvent != null) + { + OnReportEvent(context, this, e); + } + + // report event to notifier sources. + if (m_notifiers != null) + { + for (int ii = 0; ii < m_notifiers.Count; ii++) + { + if (m_notifiers[ii].IsInverse) + { + m_notifiers[ii].Node.ReportEvent(context, e); + } + } + } + } + + /// + /// Adds a notifier relationship to the node. + /// + /// The system context. + /// The type of reference (HasEventSource is used if null specified). + /// True for an inverse reference. + /// The target of the reference. + public virtual void AddNotifier( + ISystemContext context, + NodeId referenceTypeId, + bool isInverse, + NodeState target) + { + if (m_notifiers == null) + { + m_notifiers = new List(); + } + + if (NodeId.IsNull(referenceTypeId)) + { + referenceTypeId = ReferenceTypeIds.HasEventSource; + } + + // check for existing reference. + Notifier entry = null; + + for (int ii = 0; ii < m_notifiers.Count; ii++) + { + if (Object.ReferenceEquals(m_notifiers[ii].Node, target)) + { + entry = m_notifiers[ii]; + break; + } + } + + // ensure duplicate references are not left over from the model design. + if (!NodeId.IsNull(target.NodeId)) + { + RemoveReference(referenceTypeId, isInverse, target.NodeId); + } + + if (entry == null) + { + entry = new Notifier(); + m_notifiers.Add(entry); + } + + // save the notifier. + entry.ReferenceTypeId = referenceTypeId; + entry.IsInverse = isInverse; + entry.Node = target; + } + + /// + /// Removes a notifier relationship from the node. + /// + /// The system context. + /// The target of the notifier relationship. + /// Whether the inverse relationship should be removed from the target. + public virtual void RemoveNotifier(ISystemContext context, NodeState target, bool bidirectional) + { + if (m_notifiers != null) + { + for (int ii = 0; ii < m_notifiers.Count; ii++) + { + Notifier entry = m_notifiers[ii]; + + if (Object.ReferenceEquals(entry.Node, target)) + { + if (bidirectional) + { + entry.Node.RemoveNotifier(context, this, false); + } + + m_notifiers.RemoveAt(ii); + break; + } + } + + if (m_notifiers.Count == 0) + { + m_notifiers = null; + } + } + } + + /// + /// Populates a list with the notifiers that belong to the node. + /// + /// The system context. + /// The list of notifiers to populate. + public virtual void GetNotifiers( + ISystemContext context, + IList notifiers) + { + if (m_notifiers != null) + { + foreach (Notifier notifier in m_notifiers) + { + notifiers.Add(notifier); + } + } + } + + /// + /// Returns any notifiers with the specified notifier type (NodeId) and direction. + /// + public virtual void GetNotifiers( + ISystemContext context, + IList notifiers, + NodeId notifierTypeId, + bool isInverse) + { + if (m_notifiers != null) + { + foreach (Notifier notifier in m_notifiers) + { + if (isInverse == notifier.IsInverse && notifier.ReferenceTypeId == notifierTypeId) + { + notifiers.Add(notifier); + } + } + } + } + + /// + /// Returns the last event produced for any conditions belonging to the node or its chilren. + /// + /// The system context. + /// The list of condition events to return. + /// Whether to recursively report events for the children. + public virtual void ConditionRefresh(ISystemContext context, List events, bool includeChildren) + { + if (OnConditionRefresh != null) + { + OnConditionRefresh(context, this, events); + } + + if (includeChildren) + { + // request events from children. + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].ConditionRefresh(context, events, true); + } + + // request events from notifier targets. + if (m_notifiers != null) + { + for (int ii = 0; ii < m_notifiers.Count; ii++) + { + if (!m_notifiers[ii].IsInverse) + { + m_notifiers[ii].Node.ConditionRefresh(context, events, true); + } + } + } + } + } + + /// + /// Returns the method with the specified NodeId or MethodDeclarationId. + /// + /// The system context. + /// The identifier for the method to find. + /// Returns the method. Null if no method found. + public virtual MethodState FindMethod(ISystemContext context, NodeId methodId) + { + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + MethodState method = children[ii] as MethodState; + + if (method != null) + { + if (method.NodeId == methodId || method.MethodDeclarationId == methodId) + { + return method; + } + } + } + + return null; + } + + /// + /// Sets the specified bits in the change masks (ORs with the current bits). + /// + public void UpdateChangeMasks(NodeStateChangeMasks changeMasks) + { + m_changeMasks |= changeMasks; + } + + /// + /// 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(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].ClearChangeMasks(context, true); + } + } + + if (m_changeMasks != NodeStateChangeMasks.None) + { + if (OnStateChanged != null) + { + OnStateChanged(context, this, m_changeMasks); + } + + if (StateChanged != null) + { + StateChanged(context, this, m_changeMasks); + } + + m_changeMasks = NodeStateChangeMasks.None; + } + } + + /// + /// Recusively sets the status code and timestamp for the node and all child variables. + /// + /// The context. + /// The status code. + /// The timestamp. Not updated if set to DateTime.Min + public virtual void SetStatusCode(ISystemContext context, StatusCode statusCode, DateTime timestamp) + { + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].SetStatusCode(context, statusCode, timestamp); + } + } + + /// + /// Called before a node is created. + /// + protected virtual void OnBeforeCreate(ISystemContext context, NodeState node) + { + // defined by the sub-class. + } + + /// + /// Called before the ids are assigned to the node and its children. + /// + protected virtual void OnBeforeAssignNodeIds(ISystemContext context) + { + // defined by the sub-class. + } + + /// + /// Called after a node is created. + /// + protected virtual void OnAfterCreate(ISystemContext context, NodeState node) + { + // defined by the sub-class. + } + + /// + /// Called before the node is deleted. + /// + protected virtual void OnBeforeDelete(ISystemContext context) + { + // must be defined by the sub-class. + } + + /// + /// Called after the object is deleted. + /// + protected virtual void OnAfterDelete(ISystemContext context) + { + // must be defined by the sub-class. + } + + /// + /// Creates a node with default values and assigns new node ids to it and all children. + /// + public virtual void Create( + ISystemContext context, + NodeId nodeId, + QualifiedName browseName, + LocalizedText displayName, + bool assignNodeIds) + { + Initialize(context); + + // Call OnBeforeCreate on all children. + CallOnBeforeCreate(context); + + // override node id. + if (nodeId != null) + { + NodeId = nodeId; + } + + // set defaults for names. + if (!QualifiedName.IsNull(browseName)) + { + SymbolicName = browseName.Name; + BrowseName = browseName; + DisplayName = browseName.Name; + } + + // override display name. + if (displayName != null) + { + DisplayName = displayName; + } + + // get all children. + List children = new List(); + GetChildren(context, children); + + if (assignNodeIds) + { + // Call CallOnAssignNodeIds on all children. + CallOnBeforeAssignNodeIds(context, children); + + // assign the node ids. + Dictionary mappingTable = new Dictionary(); + AssignNodeIds(context, children, mappingTable); + + // update the reference targets. + UpdateReferenceTargets(context, children, mappingTable); + } + + // Call OnAfterCreate on all children. + CallOnAfterCreate(context, children); + + ClearChangeMasks(context, true); + } + + /// + /// Recusivesly calls OnBeforeCreate for the node and its children. + /// + private void CallOnBeforeCreate(ISystemContext context) + { + OnBeforeCreate(context, this); + + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].CallOnBeforeCreate(context); + } + } + + /// + /// Recusivesly calls OnBeforeCreate for the node and its children. + /// + private void CallOnBeforeAssignNodeIds(ISystemContext context, List children) + { + OnBeforeAssignNodeIds(context); + + if (children == null) + { + children = new List(); + GetChildren(context, children); + } + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].CallOnBeforeAssignNodeIds(context, null); + } + } + + /// + /// Recusivesly calls OnAfterCreate for the node and its children. + /// + private void CallOnAfterCreate(ISystemContext context, List children) + { + if (children == null) + { + children = new List(); + GetChildren(context, children); + } + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].CallOnAfterCreate(context, null); + } + + OnAfterCreate(context, this); + } + + /// + /// Create an instance by copying another node. + /// + public virtual void Create(ISystemContext context, NodeState source) + { + Initialize(context, source); + + CallOnBeforeCreate(context); + + CallOnAfterCreate(context, null); + + ClearChangeMasks(context, true); + } + + /// + /// Deletes an instance and its children (calls OnStateChange callback for each node). + /// + public virtual void Delete(ISystemContext context) + { + OnBeforeDelete(context); + + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].Delete(context); + } + + OnAfterDelete(context); + + ChangeMasks = NodeStateChangeMasks.Deleted; + ClearChangeMasks(context, false); + } + + /// + /// Recursively assigns NodeIds to the node and its children. + /// + /// The context. + /// A table mapping the old node ids to the new node ids. + public virtual void AssignNodeIds(ISystemContext context, Dictionary mappingTable) + { + List children = new List(); + GetChildren(context, children); + AssignNodeIds(context, children, mappingTable); + } + + /// + /// Recursively assigns NodeIds to the node and its children. + /// + private void AssignNodeIds( + ISystemContext context, + List children, + Dictionary mappingTable) + { + if (context.NodeIdFactory == null) + { + return; + } + + // update id for instance. + NodeId oldId = NodeId; + NodeId newId = context.NodeIdFactory.New(context, this); + + if (!NodeId.IsNull(oldId)) + { + mappingTable[oldId] = newId; + } + + NodeId = newId; + + // update id for children. + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].AssignNodeIds(context, mappingTable); + } + } + + /// + /// Verifies that the node represents a valid node. + /// + /// The context for the current operation. + /// True if the node is currently valid. + public virtual bool Validate(ISystemContext context) + { + if (OnValidate != null) + { + return OnValidate(context, this); + } + + return true; + } + + /// + /// Creates a browser for the entity references. + /// + /// The context for the current operation. + /// The view to use. + /// The reference type filter to use. + /// Whether to include sub-types. + /// The direction to browse. + /// The browse name of the targets to return. + /// Any additional references that should be included in the list. + /// Only return references that are stored in memory. + /// A thread safe object which enumerates the references for an entity. + public virtual INodeBrowser CreateBrowser( + ISystemContext context, + ViewDescription view, + NodeId referenceType, + bool includeSubtypes, + BrowseDirection browseDirection, + QualifiedName browseName, + IEnumerable additionalReferences, + bool internalOnly) + { + NodeBrowser browser = null; + + // see if a callback has been provided. + if (OnCreateBrowser != null) + { + browser = OnCreateBrowser( + context, + this, + view, + referenceType, + includeSubtypes, + browseDirection, + browseName, + additionalReferences, + internalOnly); + } + + // use default browser. + if (browser == null) + { + browser = new NodeBrowser( + context, + view, + referenceType, + includeSubtypes, + browseDirection, + browseName, + additionalReferences, + internalOnly); + } + + PopulateBrowser(context, browser); + + if (OnPopulateBrowser != null) + { + OnPopulateBrowser(context, this, browser); + } + + return browser; + } + + /// + /// Populates a table with all nodes in the hierarchy. + /// + /// The context for the current operation. + /// The path to the parent object. + /// A table of all nodes in the hierarchy. + /// + /// This method is use get a snapshot of the relative paths to all nodes in the hierarchy. + /// The hierarchy may not be complete if portions of it are stored external systems. + /// + public void GetInstanceHierarchy( + ISystemContext context, + string browsePath, + Dictionary hierarchy) + { + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + string childPath = Utils.Format("{0}/{1}", browsePath, child.SymbolicName); + hierarchy[child.NodeId] = childPath; + child.GetInstanceHierarchy(context, childPath, hierarchy); + } + } + + /// + /// Populates a table with all references in the hierarchy. + /// + /// The context for the current operation. + /// The path to the parent object. + /// A table of all nodes in the hierarchy. + /// The references in the hierarchy. + /// + /// The method is used to serialize any additional references between nodes in the hierarchy. + /// The references are stored as relative paths from the root node. + /// Any references to nodes outside the hierachy are stored as NodeIds instead of relative paths. + /// + public void GetHierarchyReferences( + ISystemContext context, + string browsePath, + Dictionary hierarchy, + List references) + { + // index any references. + if (m_references != null) + { + foreach (IReference reference in m_references.Keys) + { + NodeId targetId = ExpandedNodeId.ToNodeId(reference.TargetId, context.NamespaceUris); + + if (targetId == null) + { + references.Add(new NodeStateHierarchyReference(browsePath, reference)); + continue; + } + + string targetPath = null; + + if (!hierarchy.TryGetValue(targetId, out targetPath)) + { + references.Add(new NodeStateHierarchyReference(browsePath, reference)); + continue; + } + + references.Add(new NodeStateHierarchyReference(browsePath, targetPath, reference)); + } + } + + // recursive index the references for the children. + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + string childPath = Utils.Format("{0}/{1}", browsePath, children[ii].SymbolicName); + children[ii].GetHierarchyReferences(context, childPath, hierarchy, references); + } + } + + /// + /// Recursively updates the targets of references. + /// + /// The context. + /// A table mapping the old node ids to the new node ids. + public virtual void UpdateReferenceTargets(ISystemContext context, Dictionary mappingTable) + { + List children = new List(); + GetChildren(context, children); + UpdateReferenceTargets(context, children, mappingTable); + } + + /// + /// Recursively updates the targets of references. + /// + private void UpdateReferenceTargets( + ISystemContext context, + List children, + Dictionary mappingTable) + { + // check if there are references to update. + if (m_references != null) + { + List referencesToAdd = new List(); + List referencesToRemove = new List(); + + foreach (IReference reference in m_references.Keys) + { + // check for absolute id. + NodeId oldId = ExpandedNodeId.ToNodeId(reference.TargetId, context.NamespaceUris); + + if (oldId == null) + { + continue; + } + + // look up new node id. + NodeId newId = null; + + if (mappingTable.TryGetValue(oldId, out newId)) + { + referencesToRemove.Add(reference); + referencesToAdd.Add(new NodeStateReference(reference.ReferenceTypeId, reference.IsInverse, newId)); + } + } + + // remove old references. + for (int ii = 0; ii < referencesToRemove.Count; ii++) + { + if (m_references.Remove(referencesToRemove[ii])) + { + m_changeMasks |= NodeStateChangeMasks.References; + } + } + + // add new references. + for (int ii = 0; ii < referencesToAdd.Count; ii++) + { + m_references[referencesToAdd[ii]] = null; + m_changeMasks |= NodeStateChangeMasks.References; + } + } + + // recursively update targets for children. + for (int ii = 0; ii < children.Count; ii++) + { + children[ii].UpdateReferenceTargets(context, mappingTable); + } + } + + /// + /// Populates the browser with references that meet the criteria. + /// + /// The context for the current operation. + /// The browser to populate. + protected virtual void PopulateBrowser(ISystemContext context, NodeBrowser browser) + { + // get the reference type being browsed. + NodeId referenceTypeId = browser.ReferenceType; + + if (NodeId.IsNull(referenceTypeId) || browser.ReferenceType == ReferenceTypeIds.References) + { + referenceTypeId = null; + } + + List children = new List(); + + bool childrenRequired = referenceTypeId == null; + + // check if any hierarchial reference is being requested. + if (!childrenRequired && context.TypeTable != null) + { + if (context.TypeTable.IsTypeOf(browser.ReferenceType, ReferenceTypeIds.HierarchicalReferences) && browser.BrowseDirection != BrowseDirection.Inverse) + { + childrenRequired = true; + } + } + + // fetch the children but still need to filter by reference type. + if (childrenRequired) + { + GetChildren(context, children); + } + + // add children. + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState instance = children[ii]; + + if (!browser.IsRequired(instance)) + { + continue; + } + + if (browser.IsRequired(instance.ReferenceTypeId, false)) + { + browser.Add(instance.ReferenceTypeId, false, instance); + } + } + + // add any notifiers. + if (m_notifiers != null) + { + for (int ii = 0; ii < m_notifiers.Count; ii++) + { + Notifier entry = m_notifiers[ii]; + + if (browser.IsRequired(entry.ReferenceTypeId, entry.IsInverse)) + { + browser.Add(entry.ReferenceTypeId, entry.IsInverse, m_notifiers[ii].Node); + } + } + } + + // add any arbitrary references. + if (m_references != null) + { + if (referenceTypeId == null) + { + foreach (IReference reference in m_references.Keys) + { + if (reference.IsInverse) + { + if (browser.BrowseDirection == BrowseDirection.Forward) + { + continue; + } + } + else + { + if (browser.BrowseDirection == BrowseDirection.Inverse) + { + continue; + } + } + + browser.Add(reference); + } + } + else + { + IList references = null; + + if (browser.BrowseDirection != BrowseDirection.Inverse) + { + if (browser.IncludeSubtypes) + { + references = m_references.Find(browser.ReferenceType, false, context.TypeTable); + } + else + { + references = m_references.Find(browser.ReferenceType, false); + } + + for (int ii = 0; ii < references.Count; ii++) + { + browser.Add(references[ii]); + } + } + + if (browser.BrowseDirection != BrowseDirection.Forward) + { + if (browser.IncludeSubtypes) + { + references = m_references.Find(browser.ReferenceType, true, context.TypeTable); + } + else + { + references = m_references.Find(browser.ReferenceType, true); + } + + for (int ii = 0; ii < references.Count; ii++) + { + browser.Add(references[ii]); + } + } + } + } + } + + /// + /// Updates the node with the values from an event notification. + /// + public virtual void UpdateValues( + ISystemContext context, + SimpleAttributeOperandCollection attributes, + EventFieldList values) + { + for (int ii = 0; ii < attributes.Count; ii++) + { + NodeState child = FindChild(context, attributes[ii].BrowsePath, 0); + + if (child == null || values.EventFields.Count >= ii) + { + continue; + } + + BaseVariableState variableInstance = child as BaseVariableState; + + if (variableInstance != null) + { + variableInstance.Value = values.EventFields[ii].Value; + continue; + } + + BaseObjectState objectInstance = child as BaseObjectState; + + if (objectInstance != null) + { + NodeId nodeId = values.EventFields[ii].Value as NodeId; + + if (nodeId != null) + { + objectInstance.NodeId = nodeId; + } + } + } + } + #endregion + + #region Read Support Functions + /// + /// Reads the values for a set of attributes. + /// + /// The context for the current operation. + /// The attributes to read. + /// + /// A list of values. + /// If any error occurs for an attribute the value will be null. + /// + public virtual List ReadAttributes( + ISystemContext context, + params uint[] attributeIds) + { + List values = new List(); + + if (attributeIds != null) + { + for (int ii = 0; ii < attributeIds.Length; ii++) + { + DataValue value = new DataValue(); + + ServiceResult result = ReadAttribute( + context, + attributeIds[ii], + NumericRange.Empty, + null, + value); + + if (ServiceResult.IsBad(result)) + { + values.Add(null); + continue; + } + + values.Add(value.Value); + } + } + + return values; + } + + /// + /// Reads the value of an attribute. + /// + /// The context for the current operation. + /// The attribute id. + /// The index range. + /// The data encoding. + /// The value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + public virtual ServiceResult ReadAttribute( + ISystemContext context, + uint attributeId, + NumericRange indexRange, + QualifiedName dataEncoding, + DataValue value) + { + // check for bad parameter. + if (value == null) + { + return StatusCodes.BadStructureMissing; + } + + ServiceResult result = null; + object valueToRead = value.Value; + + // read value attribute. + if (attributeId == Attributes.Value) + { + DateTime sourceTimestamp = value.SourceTimestamp; + + try + { + result = ReadValueAttribute( + context, + indexRange, + dataEncoding, + ref valueToRead, + ref sourceTimestamp); + + value.SourceTimestamp = sourceTimestamp; + value.SourcePicoseconds = 0; + } + catch (Exception e) + { + result = new ServiceResult(e, StatusCodes.BadUnexpectedError); + } + } + + // read any non-value attribute. + else + { + try + { + result = ReadNonValueAttribute( + context, + attributeId, + ref valueToRead); + } + catch (Exception e) + { + result = new ServiceResult(e, StatusCodes.BadUnexpectedError); + } + } + + // ensure status code matches result. + if (result != null && result != ServiceResult.Good) + { + value.StatusCode = result.StatusCode; + } + else + { + value.StatusCode = StatusCodes.Good; + } + + // update value. + if (StatusCode.IsBad(value.StatusCode)) + { + value.Value = null; + } + else + { + value.Value = valueToRead; + } + + // return result. + return result; + } + + /// + /// Reads the value for any non-value attribute. + /// + /// The context. + /// The attribute idetifier . + /// The returned value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected virtual ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.NodeId: + { + NodeId nodeId = m_nodeId; + + if (OnReadNodeId != null) + { + result = OnReadNodeId(context, this, ref nodeId); + } + + if (ServiceResult.IsGood(result)) + { + value = nodeId; + } + + return result; + } + + case Attributes.NodeClass: + { + NodeClass nodeClass = m_nodeClass; + + if (OnReadNodeClass != null) + { + result = OnReadNodeClass(context, this, ref nodeClass); + } + + if (ServiceResult.IsGood(result)) + { + value = nodeClass; + } + + return result; + } + + case Attributes.BrowseName: + { + QualifiedName browseName = m_browseName; + + if (OnReadBrowseName != null) + { + result = OnReadBrowseName(context, this, ref browseName); + } + + if (ServiceResult.IsGood(result)) + { + value = browseName; + } + + return result; + } + + case Attributes.DisplayName: + { + LocalizedText displayName = m_displayName; + + if (OnReadDisplayName != null) + { + result = OnReadDisplayName(context, this, ref displayName); + } + + if (ServiceResult.IsGood(result)) + { + value = displayName; + } + + return result; + } + + case Attributes.Description: + { + LocalizedText description = m_description; + + if (OnReadDescription != null) + { + result = OnReadDescription(context, this, ref description); + } + + if (ServiceResult.IsGood(result)) + { + value = description; + } + + return result; + } + + case Attributes.WriteMask: + { + AttributeWriteMask writeMask = m_writeMask; + + if (OnReadWriteMask != null) + { + result = OnReadWriteMask(context, this, ref writeMask); + } + + if (ServiceResult.IsGood(result)) + { + value = (uint)writeMask; + } + + return result; + } + + case Attributes.UserWriteMask: + { + AttributeWriteMask userWriteMask = m_userWriteMask; + + if (OnReadUserWriteMask != null) + { + result = OnReadUserWriteMask(context, this, ref userWriteMask); + } + + if (ServiceResult.IsGood(result)) + { + value = (uint)userWriteMask; + } + + return result; + } + + case Attributes.RolePermissions: + { + RolePermissionTypeCollection rolePermissions = m_rolePermissions; + + if (OnReadRolePermissions != null) + { + result = OnReadRolePermissions(context, this, ref rolePermissions); + } + + if (ServiceResult.IsGood(result)) + { + value = rolePermissions; + } + + return result; + } + + case Attributes.UserRolePermissions: + { + RolePermissionTypeCollection userRolePermissions = m_userRolePermissions; + + if (OnReadUserRolePermissions != null) + { + result = OnReadUserRolePermissions(context, this, ref userRolePermissions); + } + + if (ServiceResult.IsGood(result)) + { + value = userRolePermissions; + } + + return result; + } + + case Attributes.AccessRestrictions: + { + AccessRestrictionType accessRestrictions = m_accessRestrictions; + + if (OnReadAccessRestrictions != null) + { + result = OnReadAccessRestrictions(context, this, ref accessRestrictions); + } + + if (ServiceResult.IsGood(result)) + { + value = (ushort)m_accessRestrictions; + } + + return result; + } + } + + return StatusCodes.BadAttributeIdInvalid; + } + + /// + /// When overridden in a derived class, iReads the value for the value attribute. + /// + /// The context. + /// The index range. + /// The data encoding. + /// The value to be returned. + /// The source timestamp. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected virtual ServiceResult ReadValueAttribute( + ISystemContext context, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref DateTime sourceTimestamp) + { + value = null; + sourceTimestamp = DateTime.MinValue; + return StatusCodes.BadAttributeIdInvalid; + } + #endregion + + #region Write Support Functions + /// + /// Writes the specified attribute value. + /// + /// The context for the current operation. + /// The attribute id. + /// The index range. + /// The value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + public ServiceResult WriteAttribute( + ISystemContext context, + uint attributeId, + NumericRange indexRange, + DataValue value) + { + // check for bad parameter. + if (value == null) + { + return StatusCodes.BadStructureMissing; + } + + object valueToWrite = value.Value; + + if (attributeId == Attributes.Value) + { + // writes to server timestamp never supported. + if (value.ServerTimestamp != DateTime.MinValue) + { + return StatusCodes.BadWriteNotSupported; + } + + // call implementation. + try + { + return WriteValueAttribute( + context, + indexRange, + valueToWrite, + value.StatusCode, + value.SourceTimestamp); + } + catch (Exception e) + { + return new ServiceResult(e, StatusCodes.BadUnexpectedError); + } + } + + // writes to status code or timestamps never supported. + if (value.StatusCode != StatusCodes.Good || value.ServerTimestamp != DateTime.MinValue || value.SourceTimestamp != DateTime.MinValue) + { + return StatusCodes.BadWriteNotSupported; + } + + // cannot use index range for non-value attributes. + if (indexRange != NumericRange.Empty) + { + return StatusCodes.BadIndexRangeInvalid; + } + + // call implementation. + try + { + return WriteNonValueAttribute(context, attributeId, value.Value); + } + catch (Exception e) + { + return new ServiceResult(e, StatusCodes.BadUnexpectedError); + } + } + + /// + /// Write the value for any non-value attribute. + /// + /// The context. + /// The attribute id. + /// The value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected virtual ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.NodeId: + { + NodeId nodeId = value as NodeId; + + if (nodeId == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.NodeId) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteNodeId != null) + { + result = OnWriteNodeId(context, this, ref nodeId); + } + + if (ServiceResult.IsGood(result)) + { + m_nodeId = nodeId; + } + + return result; + } + + case Attributes.NodeClass: + { + int? nodeClassRef = value as int?; + + if (nodeClassRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.NodeClass) == 0) + { + return StatusCodes.BadNotWritable; + } + + NodeClass nodeClass = (NodeClass)nodeClassRef.Value; + + if (OnWriteNodeClass != null) + { + result = OnWriteNodeClass(context, this, ref nodeClass); + } + + if (ServiceResult.IsGood(result)) + { + m_nodeClass = nodeClass; + } + + return result; + } + + case Attributes.BrowseName: + { + QualifiedName browseName = value as QualifiedName; + + if (browseName == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.BrowseName) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteBrowseName != null) + { + result = OnWriteBrowseName(context, this, ref browseName); + } + + if (ServiceResult.IsGood(result)) + { + m_browseName = browseName; + } + + return result; + } + + case Attributes.DisplayName: + { + LocalizedText displayName = value as LocalizedText; + + if (displayName == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.DisplayName) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteDisplayName != null) + { + result = OnWriteDisplayName(context, this, ref displayName); + } + + if (ServiceResult.IsGood(result)) + { + m_displayName = displayName; + } + + return result; + } + + case Attributes.Description: + { + LocalizedText description = value as LocalizedText; + + if (description == null && value != null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.Description) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteDescription != null) + { + result = OnWriteDescription(context, this, ref description); + } + + if (ServiceResult.IsGood(result)) + { + m_description = description; + } + + return result; + } + + case Attributes.WriteMask: + { + uint? writeMaskRef = value as uint?; + + if (writeMaskRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.WriteMask) == 0) + { + return StatusCodes.BadNotWritable; + } + + AttributeWriteMask writeMask = (AttributeWriteMask)writeMaskRef.Value; + + if (OnWriteWriteMask != null) + { + result = OnWriteWriteMask(context, this, ref writeMask); + } + + if (ServiceResult.IsGood(result)) + { + WriteMask = writeMask; + } + + return result; + } + + case Attributes.UserWriteMask: + { + uint? userWriteMaskRef = value as uint?; + + if (userWriteMaskRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.UserWriteMask) == 0) + { + return StatusCodes.BadNotWritable; + } + + AttributeWriteMask userWriteMask = (AttributeWriteMask)userWriteMaskRef.Value; + + if (OnWriteUserWriteMask != null) + { + result = OnWriteUserWriteMask(context, this, ref userWriteMask); + } + + if (ServiceResult.IsGood(result)) + { + m_userWriteMask = userWriteMask; + } + + return result; + } + + case Attributes.RolePermissions: + { + ExtensionObject[] rolePermissionsArray = value as ExtensionObject[]; + + if(rolePermissionsArray == null) + { + return StatusCodes.BadTypeMismatch; + } + + RolePermissionTypeCollection rolePermissions = new RolePermissionTypeCollection(); + + foreach (ExtensionObject arrayValue in rolePermissionsArray) + { + RolePermissionType rolePermission = arrayValue.Body as RolePermissionType; + + if (rolePermission == null) + { + return StatusCodes.BadTypeMismatch; + } + else + { + rolePermissions.Add(rolePermission); + } + } + + if ((WriteMask & AttributeWriteMask.RolePermissions) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteRolePermissions != null) + { + result = OnWriteRolePermissions(context, this, ref rolePermissions); + } + + if (ServiceResult.IsGood(result)) + { + m_rolePermissions = rolePermissions; + } + + return result; + } + + case Attributes.AccessRestrictions: + { + ushort? accessRestrictionsRef = value as ushort?; + + if (accessRestrictionsRef == null && value != null) + { + if (value.GetType() == typeof(uint)) + { + accessRestrictionsRef = Convert.ToUInt16(value); + } + else + { + return StatusCodes.BadTypeMismatch; + } + } + + if ((WriteMask & AttributeWriteMask.AccessRestrictions) == 0) + { + return StatusCodes.BadNotWritable; + } + + AccessRestrictionType accessRestrictions = (AccessRestrictionType)accessRestrictionsRef.Value; + + if (OnWriteAccessRestrictions != null) + { + result = OnWriteAccessRestrictions(context, this, ref accessRestrictions); + } + + if (ServiceResult.IsGood(result)) + { + m_accessRestrictions = accessRestrictions; + } + + return result; + } + } + + return StatusCodes.BadAttributeIdInvalid; + } + + /// + /// Write the value for the value attribute. + /// + /// The context. + /// The index range. + /// The value. + /// The status code. + /// The source timestamp. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + protected virtual ServiceResult WriteValueAttribute( + ISystemContext context, + NumericRange indexRange, + object value, + StatusCode statusCode, + DateTime sourceTimestamp) + { + return StatusCodes.BadAttributeIdInvalid; + } + #endregion + + #region Child Access Functions + /// + /// Finds the child by a path constructed from the symbolic names. + /// + /// The context. + /// The symbolic path. + /// The matching child. Null if the no child was found. + /// + /// This method assumes the symbolicPath consists of symbolic names seperated by a slash ('/'). + /// Leading and trailing slashes are ignored. + /// + public virtual BaseInstanceState FindChildBySymbolicName( + ISystemContext context, + string symbolicPath) + { + // check for null. + if (String.IsNullOrEmpty(symbolicPath)) + { + return null; + } + + // strip out leading slashes. + int start = 0; + + while (start < symbolicPath.Length) + { + if (symbolicPath[start] != '/') + { + break; + } + + start++; + } + + // check if nothing left in path. + if (start >= symbolicPath.Length) + { + return null; + } + + // find next slash. + int end = start + 1; + + while (end < symbolicPath.Length) + { + if (symbolicPath[end] == '/') + { + break; + } + + end++; + } + + // extract the symbolic name for the top level. + string symbolicName = symbolicPath; + + if (start > 0 || end < symbolicPath.Length) + { + symbolicName = symbolicPath.Substring(start, end - start); + } + + // find the top level child. + List children = new List(); + GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + BaseInstanceState child = children[ii]; + + if (child.SymbolicName == symbolicName) + { + // check if additional path elements remain. + if (end < symbolicPath.Length - 1) + { + return child.FindChildBySymbolicName(context, symbolicPath.Substring(end + 1)); + } + + return child; + } + } + + return null; + } + + /// + /// Finds the child with the specified browse name + /// + /// The context to use. + /// The browse name. + /// The target if found. Null otherwise. + public virtual BaseInstanceState FindChild( + ISystemContext context, + QualifiedName browseName) + { + return FindChild(context, browseName, false, 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 >= Int32.MaxValue) throw new ArgumentOutOfRangeException(nameof(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 or creates the child with the specified browse name. + /// + /// The context to use. + /// The browse name. + /// The child if avialble. Null otherwise. + public virtual BaseInstanceState CreateChild( + ISystemContext context, + QualifiedName browseName) + { + if (QualifiedName.IsNull(browseName)) + { + return null; + } + + return FindChild(context, browseName, true, null); + } + + /// + /// Creates or replaces the child with the same browse name. + /// + /// The context to use. + /// The child to add or replace. + public virtual void ReplaceChild(ISystemContext context, BaseInstanceState child) + { + if (child == null || QualifiedName.IsNull(child.BrowseName)) + { + throw new ArgumentException("Cannot replace child without a browse name."); + } + + FindChild(context, child.BrowseName, true, child); + } + + /// + /// Adds a child to the node. + /// + public void AddChild(BaseInstanceState child) + { + if (!Object.ReferenceEquals(child.Parent, this)) + { + child.Parent = this; + + if (NodeId.IsNull(child.ReferenceTypeId)) + { + child.ReferenceTypeId = ReferenceTypeIds.HasComponent; + } + } + + if (m_children == null) + { + m_children = new List(); + } + + m_children.Add(child); + m_changeMasks |= NodeStateChangeMasks.Children; + } + + /// + /// Creates a property and adds it to the node. + /// + public PropertyState AddProperty(string propertyName, NodeId dataTypeId, int valueRank) + { + PropertyState property = new PropertyState(this); + + property.ReferenceTypeId = ReferenceTypes.HasProperty; + property.ModellingRuleId = null; + property.TypeDefinitionId = VariableTypeIds.PropertyType; + property.SymbolicName = propertyName; + property.NodeId = null; + property.BrowseName = propertyName; + property.DisplayName = propertyName; + property.Description = null; + property.WriteMask = 0; + property.UserWriteMask = 0; + property.Value = default(T); + property.DataType = dataTypeId; + property.ValueRank = valueRank; + property.ArrayDimensions = null; + property.AccessLevel = AccessLevels.CurrentRead; + property.UserAccessLevel = AccessLevels.CurrentRead; + property.MinimumSamplingInterval = MinimumSamplingIntervals.Indeterminate; + property.Historizing = false; + + AddChild(property); + + return property; + } + + /// + /// Adds a child from the node. + /// + public void RemoveChild(BaseInstanceState child) + { + if (m_children != null) + { + for (int ii = 0; ii < m_children.Count; ii++) + { + if (Object.ReferenceEquals(m_children[ii], child)) + { + child.Parent = null; + m_children.RemoveAt(ii); + m_changeMasks |= NodeStateChangeMasks.Children; + return; + } + } + } + } + + /// + /// Finds the child with the specified browse and assigns the values from any variables in the hierachy of the source. + /// + /// False if the child does not exist or is not a variable. + /// Creates the child if does not already exist. + public bool SetChildValue( + ISystemContext context, + QualifiedName browseName, + BaseInstanceState source, + bool copy) + { + if (source == null) + { + return false; + } + + BaseInstanceState child = CreateChild(context, browseName) as BaseInstanceState; + + if (child == null) + { + return false; + } + + BaseVariableState variable = child as BaseVariableState; + BaseVariableState sourceVariable = source as BaseVariableState; + + if (variable != null && sourceVariable != null) + { + if (copy) + { + variable.Value = Utils.Clone(sourceVariable.Value); + } + else + { + variable.Value = sourceVariable.Value; + } + } + + List children = new List(); + source.GetChildren(context, children); + + for (int ii = 0; ii < children.Count; ii++) + { + child.SetChildValue(context, children[ii].BrowseName, children[ii], copy); + } + + return true; + } + + /// + /// Finds the child variable with the specified browse and assigns the value to it. + /// + /// False if the child does not exist or is not a variable. + /// Creates the child if does not already exist. + public bool SetChildValue( + ISystemContext context, + QualifiedName browseName, + object value, + bool copy) + { + BaseVariableState child = CreateChild(context, browseName) as BaseVariableState; + + if (child == null) + { + return false; + } + + if (copy) + { + child.Value = Utils.Clone(value); + } + else + { + child.Value = value; + } + + return true; + } + + /// + /// Reads the attribute of the child node. + /// + /// The context. + /// The relative path. + /// The index. + /// The attribute id. + /// The data value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + public virtual ServiceResult ReadChildAttribute( + ISystemContext context, + IList relativePath, + int index, + uint attributeId, + DataValue dataValue) + { + // check if reading attributes of current node. + if (index >= relativePath.Count) + { + return ReadAttribute(context, attributeId, NumericRange.Empty, null, dataValue); + } + + // find the child at the current level. + BaseInstanceState child = FindChild(context, relativePath[index], false, null); + + if (child == null) + { + return StatusCodes.BadNodeIdUnknown; + } + + // recursively search child nodes. + ServiceResult result = child.ReadChildAttribute( + context, + relativePath, + index + 1, + attributeId, + dataValue); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + // success. + return StatusCodes.Good; + } + + /// + /// Writes the value of the child attribute. + /// + /// The context. + /// The component path. + /// The index. + /// The attribute id. + /// The value. + /// + /// An instance of the containing the status code and diagnostic info for the operation. + /// ServiceResult.Good if successful. Detailed error information otherwise. + /// + public ServiceResult WriteChildAttribute( + ISystemContext context, + IList componentPath, + int index, + uint attributeId, + DataValue value) + { + if (componentPath.Count >= index) + { + return WriteAttribute(context, attributeId, NumericRange.Empty, value); + } + + // recursively update children. + if (m_children != null) + { + for (int ii = 0; ii < m_children.Count; ii++) + { + if (componentPath[index] != m_children[ii].BrowseName) + { + continue; + } + + return m_children[ii].WriteChildAttribute( + context, + componentPath, + index + 1, + attributeId, + value); + } + } + + return StatusCodes.BadNodeIdUnknown; + } + + /// + /// Returns true if the reference exists. + /// + /// The type of reference. + /// Whether the reference is an inverse reference. + /// The target of the reference. + /// True if the reference exists. + public bool ReferenceExists( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId) + { + if (m_references == null || referenceTypeId == null || targetId == null) + { + return false; + } + + return m_references.ContainsKey(new NodeStateReference(referenceTypeId, isInverse, targetId)); + } + + /// + /// Adds a reference. + /// + /// Type of the reference. + /// If set to true the refernce is an inverse reference. + /// The target of the reference. + public void AddReference( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId) + { + if (NodeId.IsNull(referenceTypeId)) throw new ArgumentNullException(nameof(referenceTypeId)); + if (NodeId.IsNull(targetId)) throw new ArgumentNullException(nameof(targetId)); + + if (m_references == null) + { + m_references = new IReferenceDictionary(); + } + + m_references.Add(new NodeStateReference(referenceTypeId, isInverse, targetId), null); + m_changeMasks |= NodeStateChangeMasks.References; + + OnReferenceAdded?.Invoke(this, referenceTypeId, isInverse, targetId); + } + + /// + /// Removes a reference. + /// + /// Type of the reference. + /// If set to true the refernce is an inverse reference. + /// The target of the reference. + public bool RemoveReference( + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId) + { + if (NodeId.IsNull(referenceTypeId)) throw new ArgumentNullException(nameof(referenceTypeId)); + if (NodeId.IsNull(targetId)) throw new ArgumentNullException(nameof(targetId)); + + if (m_references == null) + { + return false; + } + + if (m_references.Remove(new NodeStateReference(referenceTypeId, isInverse, targetId))) + { + m_changeMasks |= NodeStateChangeMasks.References; + OnReferenceRemoved?.Invoke(this, referenceTypeId, isInverse, targetId); + return true; + } + + return false; + } + + /// + /// Adds a list of references (ignores duplicates). + /// + /// The list of references to add. + public void AddReferences(IList references) + { + if (references == null) throw new ArgumentNullException(nameof(references)); + + if (m_references == null) + { + m_references = new IReferenceDictionary(); + } + + for (int ii = 0; ii < references.Count; ii++) + { + if (!m_references.ContainsKey(references[ii])) + { + m_references.Add(references[ii], null); + OnReferenceAdded?.Invoke(this, references[ii].ReferenceTypeId, references[ii].IsInverse, references[ii].TargetId); + } + } + + m_changeMasks |= NodeStateChangeMasks.References; + } + + /// + /// Removes all references of the specified type. + /// + /// Type of the reference. + /// If set to true the reference is an inverse reference. + public bool RemoveReferences( + NodeId referenceTypeId, + bool isInverse) + { + if (NodeId.IsNull(referenceTypeId)) throw new ArgumentNullException(nameof(referenceTypeId)); + + if (m_references == null) + { + return false; + } + + var refsToRemove = m_references + .Select(r => r.Key) + .Where(r => r.ReferenceTypeId == referenceTypeId && r.IsInverse == isInverse) + .ToList(); + + refsToRemove.ForEach(r => RemoveReference(r.ReferenceTypeId, r.IsInverse, r.TargetId)); + + return refsToRemove.Count != 0; + } + #endregion + + #region Protected Members + /// + /// 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 returns the children that are in memory and does not attempt to + /// access an underlying system. The PopulateBrowser method is used to discover those references. + /// + public virtual void GetChildren( + ISystemContext context, + IList children) + { + if (m_children != null) + { + for (int ii = 0; ii < m_children.Count; ii++) + { + children.Add(m_children[ii]); + } + } + } + + /// + /// Populates a list with the non-child related references that belong to the node. + /// + /// The context for the system being accessed. + /// The list of references to populate. + /// + /// This method only returns references that are not implied by the parent-child + /// relation or references which are intrinsic to the NodeState classes (e.g. HasTypeDefinition) + /// + /// This method also only returns the reference that are in memory and does not attempt to + /// access an underlying system. The PopulateBrowser method is used to discover those references. + /// + public virtual void GetReferences( + ISystemContext context, + IList references) + { + if (m_references != null) + { + foreach (IReference reference in m_references.Keys) + { + references.Add(reference); + } + } + } + + /// + /// Returns any references with the specified reference type and direction. + /// + public virtual void GetReferences( + ISystemContext context, + IList references, + NodeId referenceTypeId, + bool isInverse) + { + if (m_references != null) + { + foreach (IReference reference in m_references.Keys) + { + if (isInverse == reference.IsInverse && reference.ReferenceTypeId == referenceTypeId) + { + references.Add(reference); + } + } + } + } + + /// + /// 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; + } + + if (m_children != 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; + } + #endregion + + #region Notifier Class + /// + /// Stores the notifier relationship to another node. + /// + public class Notifier + { + /// + /// The node state. + /// + public NodeState Node; + + /// + /// The reference type id. + /// + public NodeId ReferenceTypeId; + + /// + /// Whether the reference direction is inverse. + /// + public bool IsInverse; + } + #endregion + + #region Protected Fields + /// + /// A list of children of the node. + /// + protected List m_children; + + /// + /// Indicates what has changed in the node. + /// + protected NodeStateChangeMasks m_changeMasks; + #endregion + + #region Private Fields + private object m_handle; + private string m_symbolicName; + private NodeId m_nodeId; + private NodeClass m_nodeClass; + private QualifiedName m_browseName; + private LocalizedText m_displayName; + private LocalizedText m_description; + private AttributeWriteMask m_writeMask; + private AttributeWriteMask m_userWriteMask; + private RolePermissionTypeCollection m_rolePermissions; + private RolePermissionTypeCollection m_userRolePermissions; + private AccessRestrictionType m_accessRestrictions; + private IReferenceDictionary m_references; + private int m_areEventsMonitored; + private bool m_initialized; + private List m_notifiers; + private XmlElement[] m_extensions; + #endregion + } + + /// + /// Indicates what has changed in a node. + /// + [Flags] + 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 + } + + /// + /// Used to validate a node. + /// + public delegate bool NodeStateValidateHandler( + ISystemContext context, + NodeState node); + + /// + /// Used to receive notifications when a non-value attribute is read or written. + /// + public delegate void NodeStateChangedHandler( + ISystemContext context, + NodeState node, + NodeStateChangeMasks changes); + + /// + /// Used to receive notifications when a reference get added to the node + /// + public delegate void NodeStateReferenceAdded( + NodeState node, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId); + + /// + /// Used to receive notifications when a reference get removed to the node + /// + public delegate void NodeStateReferenceRemoved( + NodeState node, + NodeId referenceTypeId, + bool isInverse, + ExpandedNodeId targetId); + + /// + /// Used to receive notifications when a node produces an event. + /// + public delegate void NodeStateReportEventHandler( + ISystemContext context, + NodeState node, + IFilterTarget e); + + /// + /// Used to receive notifications when a node needs to refresh its conditions. + /// + public delegate void NodeStateConditionRefreshEventHandler( + ISystemContext context, + NodeState node, + List events); + + /// + /// Used to receive notifications when a node browser is created. + /// + public delegate NodeBrowser NodeStateCreateBrowserEventHandler( + ISystemContext context, + NodeState node, + ViewDescription view, + NodeId referenceType, + bool includeSubtypes, + BrowseDirection browseDirection, + QualifiedName browseName, + IEnumerable additionalReferences, + bool internalOnly); + + /// + /// Used to receive notifications when a node is browsed. + /// + public delegate void NodeStatePopulateBrowserEventHandler( + ISystemContext context, + NodeState node, + NodeBrowser browser); + + /// + /// Used to receive notifications when a non-value attribute is read or written. + /// + public delegate ServiceResult NodeAttributeEventHandler( + ISystemContext context, + NodeState node, + ref T value); + + /// + /// Used to receive notifications when the value attribute is read or written. + /// + public delegate ServiceResult NodeValueSimpleEventHandler( + ISystemContext context, + NodeState node, + ref object value); + + /// + /// Used to receive notifications when the value attribute is read or written. + /// + public delegate ServiceResult NodeValueEventHandler( + ISystemContext context, + NodeState node, + NumericRange indexRange, + QualifiedName dataEncoding, + ref object value, + ref StatusCode statusCode, + ref DateTime timestamp); + + /// + /// Stores a reference from a node in the instance hierarchy. + /// + public class NodeStateHierarchyReference + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The path to the source node. + /// The reference. + public NodeStateHierarchyReference(string sourcePath, IReference reference) + { + m_sourcePath = sourcePath; + m_referenceTypeId = reference.ReferenceTypeId; + m_isInverse = reference.IsInverse; + m_targetPath = null; + m_targetId = reference.TargetId; + } + + /// + /// Initializes a new instance of the class. + /// + /// The path to the source node. + /// The path to the target node. + /// The reference. + public NodeStateHierarchyReference( + string sourcePath, + string targetPath, + IReference reference) + { + m_sourcePath = sourcePath; + m_referenceTypeId = reference.ReferenceTypeId; + m_isInverse = reference.IsInverse; + m_targetPath = targetPath; + } + #endregion + + #region Public Properties + /// + /// Gets the path to the source node. + /// + /// The source path. + public string SourcePath + { + get { return m_sourcePath; } + } + + /// + /// Gets the identifier for the reference type. + /// + /// The reference type id. + public NodeId ReferenceTypeId + { + get { return m_referenceTypeId; } + } + + /// + /// Gets a value indicating whether the reference is an inverse reference. + /// + /// + /// true if this is an inverse reference; otherwise, false. + /// + public bool IsInverse + { + get { return m_isInverse; } + } + + /// + /// Gets the identifier for the target node. + /// + /// The target id. + /// Only one of TargetId or TargetPath is specified. + public ExpandedNodeId TargetId + { + get { return m_targetId; } + } + + /// + /// Gets the path to the target node. + /// + /// The target path. + /// Only one of TargetId or TargetPath is specified. + public string TargetPath + { + get { return m_targetPath; } + } + #endregion + + #region Private Fields + private string m_sourcePath; + private NodeId m_referenceTypeId; + private bool m_isInverse; + private ExpandedNodeId m_targetId; + private string m_targetPath; + #endregion + } + + /// + /// A delegate which creates a new node. + /// + /// The parent of the node. + /// The new node. + public delegate NodeState NodeStateConstructDelegate(NodeState parent); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeStateCollection.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeStateCollection.cs new file mode 100644 index 00000000..266f7c2e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NodeStateCollection.cs @@ -0,0 +1,590 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// Stores a collection of nodes. + /// + public partial class NodeStateCollection : List + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public NodeStateCollection() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The initial capacity. + public NodeStateCollection(int capacity) : base(capacity) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The collection whose elements are copied to the new list. + /// + /// is null. + /// + public NodeStateCollection(IEnumerable collection) : base(collection) + { + } + #endregion + + #region Public Methods + /// + /// Writes the collection to a stream using the NodeSet schema. + /// + public void SaveAsNodeSet(ISystemContext context, Stream ostrm) + { + NodeTable nodeTable = new NodeTable(context.NamespaceUris, context.ServerUris, null); + + for (int ii = 0; ii < this.Count; ii++) + { + this[ii].Export(context, nodeTable); + } + + NodeSet nodeSet = new NodeSet(); + + foreach (ILocalNode node in nodeTable) + { + nodeSet.Add(node, nodeTable.NamespaceUris, nodeTable.ServerUris); + } + + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Encoding = Encoding.UTF8; + settings.CloseOutput = true; + settings.ConformanceLevel = ConformanceLevel.Document; + settings.Indent = true; + + using (XmlWriter writer = XmlWriter.Create(ostrm, settings)) + { + DataContractSerializer serializer = new DataContractSerializer(typeof(NodeSet)); + serializer.WriteObject(writer, nodeSet); + } + } + + #region Well-Known Aliases + /// + /// Stores a well known alias. + /// + private struct AliasToUse + { + public AliasToUse(string alias, NodeId nodeId) + { + Alias = alias; + NodeId = nodeId; + } + + public string Alias; + public NodeId NodeId; + } + + /// + /// The list of aliases to use. + /// + private AliasToUse[] s_AliasesToUse = new AliasToUse[] + { + new AliasToUse(BrowseNames.Boolean, DataTypeIds.Boolean), + new AliasToUse(BrowseNames.SByte, DataTypeIds.SByte), + new AliasToUse(BrowseNames.Byte, DataTypeIds.Byte), + new AliasToUse(BrowseNames.Int16, DataTypeIds.Int16), + new AliasToUse(BrowseNames.UInt16, DataTypeIds.UInt16), + new AliasToUse(BrowseNames.Int32, DataTypeIds.Int32), + new AliasToUse(BrowseNames.UInt32, DataTypeIds.UInt32), + new AliasToUse(BrowseNames.Int64, DataTypeIds.Int64), + new AliasToUse(BrowseNames.UInt64, DataTypeIds.UInt64), + new AliasToUse(BrowseNames.Float, DataTypeIds.Float), + new AliasToUse(BrowseNames.Double, DataTypeIds.Double), + new AliasToUse(BrowseNames.DateTime, DataTypeIds.DateTime), + new AliasToUse(BrowseNames.String, DataTypeIds.String), + new AliasToUse(BrowseNames.ByteString, DataTypeIds.ByteString), + new AliasToUse(BrowseNames.Guid, DataTypeIds.Guid), + new AliasToUse(BrowseNames.XmlElement, DataTypeIds.XmlElement), + new AliasToUse(BrowseNames.NodeId, DataTypeIds.NodeId), + new AliasToUse(BrowseNames.ExpandedNodeId, DataTypeIds.ExpandedNodeId), + new AliasToUse(BrowseNames.QualifiedName, DataTypeIds.QualifiedName), + new AliasToUse(BrowseNames.LocalizedText, DataTypeIds.LocalizedText), + new AliasToUse(BrowseNames.StatusCode, DataTypeIds.StatusCode), + new AliasToUse(BrowseNames.Structure, DataTypeIds.Structure), + new AliasToUse(BrowseNames.Number, DataTypeIds.Number), + new AliasToUse(BrowseNames.Integer, DataTypeIds.Integer), + new AliasToUse(BrowseNames.UInteger, DataTypeIds.UInteger), + new AliasToUse(BrowseNames.HasComponent, ReferenceTypeIds.HasComponent), + new AliasToUse(BrowseNames.HasProperty, ReferenceTypeIds.HasProperty), + new AliasToUse(BrowseNames.Organizes, ReferenceTypeIds.Organizes), + new AliasToUse(BrowseNames.HasEventSource, ReferenceTypeIds.HasEventSource), + new AliasToUse(BrowseNames.HasNotifier, ReferenceTypeIds.HasNotifier), + new AliasToUse(BrowseNames.HasSubtype, ReferenceTypeIds.HasSubtype), + new AliasToUse(BrowseNames.HasTypeDefinition, ReferenceTypeIds.HasTypeDefinition), + new AliasToUse(BrowseNames.HasModellingRule, ReferenceTypeIds.HasModellingRule), + new AliasToUse(BrowseNames.HasEncoding, ReferenceTypeIds.HasEncoding), + new AliasToUse(BrowseNames.HasDescription, ReferenceTypeIds.HasDescription) + }; + #endregion + + /// + /// Writes the collection to a stream using the Opc.Ua.Schema.UANodeSet schema. + /// + public void SaveAsNodeSet2(ISystemContext context, Stream ostrm) + { + SaveAsNodeSet2(context, ostrm, null); + } + + /// + /// Writes the collection to a stream using the Opc.Ua.Schema.UANodeSet schema. + /// + public void SaveAsNodeSet2(ISystemContext context, Stream ostrm, string version) + { + Opc.Ua.Export.UANodeSet nodeSet = new Opc.Ua.Export.UANodeSet(); + nodeSet.LastModified = DateTime.UtcNow; + nodeSet.LastModifiedSpecified = true; + + for (int ii = 0; ii < s_AliasesToUse.Length; ii++) + { + nodeSet.AddAlias(context, s_AliasesToUse[ii].Alias, s_AliasesToUse[ii].NodeId); + } + + for (int ii = 0; ii < this.Count; ii++) + { + nodeSet.Export(context, this[ii], true); + } + + nodeSet.Write(ostrm); + } + + /// + /// Writes the schema information to a static XML export file. + /// + public void SaveAsXml(ISystemContext context, Stream ostrm) + { + SaveAsXml(context, ostrm, false); + } + + /// + /// Writes the schema information to a static XML export file. + /// + public void SaveAsXml(ISystemContext context, Stream ostrm, bool keepStreamOpen) + { + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Encoding = Encoding.UTF8; + settings.CloseOutput = !keepStreamOpen; + settings.ConformanceLevel = ConformanceLevel.Document; + settings.Indent = true; + + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + using (XmlWriter writer = XmlWriter.Create(ostrm, settings)) + { + XmlQualifiedName root = new XmlQualifiedName("ListOfNodeState", Namespaces.OpcUaXsd); + XmlEncoder encoder = new XmlEncoder(root, writer, messageContext); + + encoder.SaveStringTable("NamespaceUris", "NamespaceUri", context.NamespaceUris); + encoder.SaveStringTable("ServerUris", "ServerUri", context.ServerUris); + + for (int ii = 0; ii < this.Count; ii++) + { + NodeState state = this[ii]; + + if (state != null) + { + state.SaveAsXml(context, encoder); + } + } + + encoder.Close(); + } + } + + /// + /// Writes the collection to a binary stream. The stream is closed by this method. + /// + public void SaveAsBinary(ISystemContext context, Stream ostrm) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + BinaryEncoder encoder = new BinaryEncoder(ostrm, messageContext); + + encoder.SaveStringTable(context.NamespaceUris); + encoder.SaveStringTable(context.ServerUris); + + encoder.WriteInt32(null, this.Count); + + for (int ii = 0; ii < this.Count; ii++) + { + NodeState state = this[ii]; + state.SaveAsBinary(context, encoder); + } + + encoder.Close(); + } + + /// + /// Reads the schema information from a XML document. + /// + public void LoadFromBinary(ISystemContext context, Stream istrm, bool updateTables) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + using (BinaryDecoder decoder = new BinaryDecoder(istrm, messageContext)) + { + // check if a namespace table was provided. + NamespaceTable namespaceUris = new NamespaceTable(); + + if (!decoder.LoadStringTable(namespaceUris)) + { + namespaceUris = null; + } + + // update namespace table. + if (updateTables) + { + if (namespaceUris != null && context.NamespaceUris != null) + { + for (int ii = 0; ii < namespaceUris.Count; ii++) + { + context.NamespaceUris.GetIndexOrAppend(namespaceUris.GetString((uint)ii)); + } + } + } + + // check if a server uri table was provided. + StringTable serverUris = new StringTable(); + + if (namespaceUris != null && namespaceUris.Count > 1) + { + serverUris.Append(namespaceUris.GetString(1)); + } + + if (!decoder.LoadStringTable(serverUris)) + { + serverUris = null; + } + + // update server table. + if (updateTables) + { + if (serverUris != null && context.ServerUris != null) + { + for (int ii = 0; ii < serverUris.Count; ii++) + { + context.ServerUris.GetIndexOrAppend(serverUris.GetString((uint)ii)); + } + } + } + + // setup the mappings to use during decoding. + decoder.SetMappingTables(namespaceUris, serverUris); + + int count = decoder.ReadInt32(null); + + for (int ii = 0; ii < count; ii++) + { + NodeState state = NodeState.LoadNode(context, decoder); + this.Add(state); + } + } + } + + /// + /// Reads the schema information from a XML document. + /// + public void LoadFromXml(ISystemContext context, Stream istrm, bool updateTables) + { + ServiceMessageContext messageContext = new ServiceMessageContext(); + + messageContext.NamespaceUris = context.NamespaceUris; + messageContext.ServerUris = context.ServerUris; + messageContext.Factory = context.EncodeableFactory; + + using (XmlReader reader = XmlReader.Create(istrm)) + { + XmlQualifiedName root = new XmlQualifiedName("ListOfNodeState", Namespaces.OpcUaXsd); + XmlDecoder decoder = new XmlDecoder(null, reader, messageContext); + + NamespaceTable namespaceUris = new NamespaceTable(); + + if (!decoder.LoadStringTable("NamespaceUris", "NamespaceUri", namespaceUris)) + { + namespaceUris = null; + } + + // update namespace table. + if (updateTables) + { + if (namespaceUris != null && context.NamespaceUris != null) + { + for (int ii = 0; ii < namespaceUris.Count; ii++) + { + context.NamespaceUris.GetIndexOrAppend(namespaceUris.GetString((uint)ii)); + } + } + } + + StringTable serverUris = new StringTable(); + + if (!decoder.LoadStringTable("ServerUris", "ServerUri", context.ServerUris)) + { + serverUris = null; + } + + // update server table. + if (updateTables) + { + if (serverUris != null && context.ServerUris != null) + { + for (int ii = 0; ii < serverUris.Count; ii++) + { + context.ServerUris.GetIndexOrAppend(serverUris.GetString((uint)ii)); + } + } + } + + // set mapping. + decoder.SetMappingTables(namespaceUris, serverUris); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + NodeState state = NodeState.LoadNode(context, decoder); + + while (state != null) + { + this.Add(state); + + state = NodeState.LoadNode(context, decoder); + } + + decoder.Close(); + } + } + + /// + /// Loads the nodes from an embedded resource. + /// + /// The context. + /// The resource path. + /// The assembly containing the resource. + /// if set to true the namespace and server tables are updated with any new URIs. + public void LoadFromResource(ISystemContext context, string resourcePath, Assembly assembly, bool updateTables) + { + if (resourcePath == null) throw new ArgumentNullException(nameof(resourcePath)); + + if (assembly == null) throw new ArgumentNullException(nameof(assembly)); + + Stream istrm = assembly.GetManifestResourceStream(resourcePath); + if (istrm == null) + { + // try to load from app directory + FileInfo file = new FileInfo(resourcePath); + istrm = file.OpenRead(); + if (istrm == null) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Could not load nodes from resource: {0}", resourcePath); + } + } + + LoadFromXml(context, istrm, updateTables); + } + + /// + /// Loads the nodes from an embedded resource. + /// + /// The context. + /// The resource path. + /// The assembly containing the resource. + /// if set to true the namespace and server tables are updated with any new URIs. + public void LoadFromBinaryResource(ISystemContext context, string resourcePath, Assembly assembly, bool updateTables) + { + if (resourcePath == null) throw new ArgumentNullException(nameof(resourcePath)); + + if (assembly == null) throw new ArgumentNullException(nameof(assembly)); + + Stream istrm = assembly.GetManifestResourceStream(resourcePath); + if (istrm == null) + { + // try to load from app directory + FileInfo file = new FileInfo(resourcePath); + istrm = file.OpenRead(); + if (istrm == null) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "Could not load nodes from resource: {0}", resourcePath); + } + } + + LoadFromBinary(context, istrm, updateTables); + } +#endregion + } + + /// + /// A class that creates instances of nodes based on the paramters provided. + /// + public class NodeStateFactory + { + /// + /// Creates a new instance. + /// + /// The current context. + /// The parent. + /// The node class. + /// The browse name. + /// The reference type between the parent and the node. + /// The type definition. + /// Returns null if the type is not known. + public virtual NodeState CreateInstance( + ISystemContext context, + NodeState parent, + NodeClass nodeClass, + QualifiedName browseName, + NodeId referenceTypeId, + NodeId typeDefinitionId) + { + NodeState child = null; + + if (m_types != null && !NodeId.IsNull(typeDefinitionId)) + { + Type type = null; + + if (m_types.TryGetValue(typeDefinitionId, out type)) + { + return Activator.CreateInstance(type, parent) as NodeState; + } + } + + switch (nodeClass) + { + case NodeClass.Variable: + { + if (context.TypeTable != null && context.TypeTable.IsTypeOf(referenceTypeId, ReferenceTypeIds.HasProperty)) + { + child = new PropertyState(parent); + break; + } + + child = new BaseDataVariableState(parent); + break; + } + + case NodeClass.Object: + { + child = new BaseObjectState(parent); + break; + } + + case NodeClass.Method: + { + child = new MethodState(parent); + break; + } + + case NodeClass.ReferenceType: + { + child = new ReferenceTypeState(); + break; + } + + case NodeClass.ObjectType: + { + child = new BaseObjectTypeState(); + break; + } + + case NodeClass.VariableType: + { + child = new BaseDataVariableTypeState(); + break; + } + + case NodeClass.DataType: + { + child = new DataTypeState(); + break; + } + + case NodeClass.View: + { + child = new ViewState(); + break; + } + + default: + { + child = null; + break; + } + } + + return child; + } + + /// + /// Registers a type with the factory. + /// + /// The type definition. + /// The system type. + public void RegisterType(NodeId typeDefinitionId, Type type) + { + if (NodeId.IsNull(typeDefinitionId)) throw new ArgumentNullException(nameof(typeDefinitionId)); + if (type == null) throw new ArgumentNullException(nameof(type)); + + if (m_types == null) + { + m_types = new NodeIdDictionary(); + } + + m_types[typeDefinitionId] = type; + } + + /// + /// Unregisters a type with the factory. + /// + /// The type definition. + public void UnRegisterType(NodeId typeDefinitionId) + { + if (NodeId.IsNull(typeDefinitionId)) throw new ArgumentNullException(nameof(typeDefinitionId)); + + if (m_types != null) + { + m_types.Remove(typeDefinitionId); + } + } + + private NodeIdDictionary m_types; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NonExclusiveLimitAlarmState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NonExclusiveLimitAlarmState.cs new file mode 100644 index 00000000..30042f8e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/NonExclusiveLimitAlarmState.cs @@ -0,0 +1,136 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.IO; +using System.Reflection; +using System.Threading; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class NonExclusiveLimitAlarmState + { + #region Public Methods + /// + /// Sets the limit state of the condition. + /// + /// The system context. + /// The bit masks specifying the current state. + public virtual void SetLimitState( + ISystemContext context, + LimitAlarmStates limit) + { + if (this.HighState != null) + { + UpdateState(this.HighState, ((limit & LimitAlarmStates.High) != 0 || (limit & LimitAlarmStates.HighHigh) != 0)); + } + + if (this.HighHighState != null) + { + UpdateState(this.HighHighState, (limit & LimitAlarmStates.HighHigh) != 0); + } + + if (this.LowState != null) + { + UpdateState(this.LowState, ((limit & LimitAlarmStates.Low) != 0 || (limit & LimitAlarmStates.LowLow) != 0)); + } + + if (this.LowLowState != null) + { + UpdateState(this.LowLowState, (limit & LimitAlarmStates.LowLow) != 0); + } + + // select an appropriate effective display name for the active state. + TranslationInfo displayName = null; + + if ((limit & LimitAlarmStates.HighHigh) != 0) + { + displayName = new TranslationInfo( + "ConditionStateHighHighActive", + "en-US", + ConditionStateNames.HighHighActive); + } + else if ((limit & LimitAlarmStates.LowLow) != 0) + { + displayName = new TranslationInfo( + "ConditionStateLowLowActive", + "en-US", + ConditionStateNames.LowLowActive); + } + else if ((limit & LimitAlarmStates.High) != 0) + { + displayName = new TranslationInfo( + "ConditionStateHighActive", + "en-US", + ConditionStateNames.HighActive); + } + else if ((limit & LimitAlarmStates.Low) != 0) + { + displayName = new TranslationInfo( + "ConditionStateLowActive", + "en-US", + ConditionStateNames.LowActive); + } + else + { + displayName = new TranslationInfo( + "ConditionStateInactive", + "en-US", + ConditionStateNames.Inactive); + } + + // update the active superstae. + SetActiveEffectiveSubState(context, new LocalizedText(displayName), DateTime.UtcNow); + UpdateEffectiveState(context); + } + #endregion + + #region Private Methods + /// + /// Updates the state. + /// + /// The limit. + /// if set to true is the state is active. + private void UpdateState(TwoStateVariableState limit, bool active) + { + TranslationInfo state = null; + + if (active) + { + state = new TranslationInfo( + "ConditionStateActive", + "en-US", + ConditionStateNames.Active); + } + else + { + state = new TranslationInfo( + "ConditionStateInactive", + "en-US", + ConditionStateNames.Inactive); + } + + limit.Value = new LocalizedText(state); + limit.Id.Value = active; + + if (limit.TransitionTime != null) + { + limit.TransitionTime.Value = DateTime.UtcNow; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs new file mode 100644 index 00000000..e217fe59 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs @@ -0,0 +1,378 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.IO; +using System.Reflection; +using Opc.Ua; + +namespace Opc.Ua +{ + public partial class ProgramStateMachineState + { + #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); + + UpdateStateVariable(context, Objects.ProgramStateMachineType_Ready, CurrentState); + UpdateTransitionVariable(context, 0, LastTransition); + } + #endregion + + #region Overriden Members + /// + /// The table of states belonging to the state machine. + /// + protected override ElementInfo[] StateTable + { + get { return s_StateTable; } + } + + /// + /// A table of valid states. + /// + private ElementInfo[] s_StateTable = new ElementInfo[] + { + new ElementInfo(Objects.ProgramStateMachineType_Ready, BrowseNames.Ready, 1), + new ElementInfo(Objects.ProgramStateMachineType_Running, BrowseNames.Running, 2), + new ElementInfo(Objects.ProgramStateMachineType_Suspended, BrowseNames.Suspended, 3), + new ElementInfo(Objects.ProgramStateMachineType_Halted, BrowseNames.Halted, 4) + }; + + /// + /// The table of transitions belonging to the state machine. + /// + protected override ElementInfo[] TransitionTable + { + get { return s_TransitionTable; } + } + + /// + /// A table of valid transitions. + /// + private ElementInfo[] s_TransitionTable = new ElementInfo[] + { + new ElementInfo(Objects.ProgramStateMachineType_HaltedToReady, BrowseNames.HaltedToReady, 1), + new ElementInfo(Objects.ProgramStateMachineType_ReadyToRunning, BrowseNames.ReadyToRunning, 2), + new ElementInfo(Objects.ProgramStateMachineType_RunningToHalted, BrowseNames.RunningToHalted, 3), + new ElementInfo(Objects.ProgramStateMachineType_RunningToReady, BrowseNames.RunningToReady, 4), + new ElementInfo(Objects.ProgramStateMachineType_RunningToSuspended, BrowseNames.RunningToSuspended, 5), + new ElementInfo(Objects.ProgramStateMachineType_SuspendedToRunning, BrowseNames.SuspendedToRunning, 6), + new ElementInfo(Objects.ProgramStateMachineType_SuspendedToHalted, BrowseNames.SuspendedToHalted, 7), + new ElementInfo(Objects.ProgramStateMachineType_SuspendedToReady, BrowseNames.SuspendedToReady, 8), + new ElementInfo(Objects.ProgramStateMachineType_ReadyToHalted, BrowseNames.ReadyToHalted, 9) + }; + + /// + /// The mapping between transitions and their from and to states. + /// + protected override uint[,] TransitionMappings + { + get { return s_TransitionMappings; } + } + + /// + /// A table of the to and from states for the transitions. + /// + private uint[,] s_TransitionMappings = new uint[,] + { + { Objects.ProgramStateMachineType_HaltedToReady, Objects.ProgramStateMachineType_Halted, Objects.ProgramStateMachineType_Ready, 1 }, + { Objects.ProgramStateMachineType_ReadyToRunning, Objects.ProgramStateMachineType_Ready, Objects.ProgramStateMachineType_Running, 1 }, + { Objects.ProgramStateMachineType_RunningToHalted, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_Halted, 1 }, + { Objects.ProgramStateMachineType_RunningToReady, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_Ready, 1 }, + { Objects.ProgramStateMachineType_RunningToSuspended, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_Suspended, 1 }, + { Objects.ProgramStateMachineType_SuspendedToRunning, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_Running, 1 }, + { Objects.ProgramStateMachineType_SuspendedToHalted, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_Halted, 1 }, + { Objects.ProgramStateMachineType_SuspendedToReady, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_Ready, 1 }, + { Objects.ProgramStateMachineType_ReadyToHalted, Objects.ProgramStateMachineType_Ready, Objects.ProgramStateMachineType_Halted, 1 } + }; + + /// + /// The mapping between causes, the current state and a transition. + /// + protected override uint[,] CauseMappings + { + get { return s_CauseMappings; } + } + + /// + /// A table of transitions for the available causes. + /// + private uint[,] s_CauseMappings = new uint[,] + { + { Methods.ProgramStateMachineType_Reset, Objects.ProgramStateMachineType_Halted, Objects.ProgramStateMachineType_HaltedToReady }, + { Methods.ProgramStateMachineType_Start, Objects.ProgramStateMachineType_Ready, Objects.ProgramStateMachineType_ReadyToRunning }, + { Methods.ProgramStateMachineType_Suspend,Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_RunningToSuspended }, + { Methods.ProgramStateMachineType_Reset, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_RunningToReady }, + { Methods.ProgramStateMachineType_Halt, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_RunningToHalted }, + { Methods.ProgramStateMachineType_Resume, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToRunning }, + { Methods.ProgramStateMachineType_Reset, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToReady }, + { Methods.ProgramStateMachineType_Halt, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToHalted } + }; + + + /// + /// Creates an instance of an audit event. + /// + protected override AuditUpdateStateEventState CreateAuditEvent( + ISystemContext context, + MethodState causeMethod, + uint causeId) + { + return new ProgramTransitionAuditEventState(null); + } + + /// + /// Updates an audit event after the method is invoked. + /// + protected override void UpdateAuditEvent( + ISystemContext context, + MethodState causeMethod, + uint causeId, + AuditUpdateStateEventState e, + ServiceResult result) + { + base.UpdateAuditEvent( + context, + causeMethod, + causeId, + e, + result); + + // update program specific event fields. + if (ServiceResult.IsGood(result)) + { + ProgramTransitionAuditEventState e2 = e as ProgramTransitionAuditEventState; + + if (e2 != null) + { + e2.SetChildValue(context, BrowseNames.Transition, LastTransition, false); + } + } + } + + /// + /// Creates an instance of an transition event. + /// + protected override TransitionEventState CreateTransitionEvent( + ISystemContext context, + uint transitionId, + uint causeId) + { + if (TransitionHasEffect(context, transitionId)) + { + return new ProgramTransitionEventState(null); + } + + return null; + } + #endregion + + #region Protected Methods + #region Start Cause Handlers + /// + /// Checks whether the start method is executable. + /// + protected ServiceResult IsStartExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Start, false); + return ServiceResult.Good; + } + + /// + /// Checks whether the start method is executable by the current user. + /// + protected ServiceResult IsStartUserExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Start, true); + return ServiceResult.Good; + } + + /// + /// Handles the start method. + /// + protected virtual ServiceResult OnStart( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + return DoCause(context, method, Methods.ProgramStateMachineType_Start, inputArguments, outputArguments); + } + #endregion + + #region Suspend Cause Handlers + /// + /// Checks whether the suspend method is executable. + /// + protected ServiceResult IsSuspendExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Suspend, false); + return ServiceResult.Good; + } + + /// + /// Checks whether the suspend method is executable by the current user. + /// + protected ServiceResult IsSuspendUserExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Suspend, true); + return ServiceResult.Good; + } + + /// + /// Handles the suspend method. + /// + protected virtual ServiceResult OnSuspend( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + return DoCause(context, method, Methods.ProgramStateMachineType_Suspend, inputArguments, outputArguments); + } + #endregion + + #region Resume Cause Handlers + /// + /// Checks whether the resume method is executable. + /// + protected ServiceResult IsResumeExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Resume, false); + return ServiceResult.Good; + } + + /// + /// Checks whether the resume method is executable by the current user. + /// + protected ServiceResult IsResumeUserExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Resume, true); + return ServiceResult.Good; + } + + /// + /// Handles the resume method. + /// + protected virtual ServiceResult OnResume( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + return DoCause(context, method, Methods.ProgramStateMachineType_Resume, inputArguments, outputArguments); + } + #endregion + + #region Halt Cause Handlers + /// + /// Checks whether the halt method is executable. + /// + protected ServiceResult IsHaltExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Halt, false); + return ServiceResult.Good; + } + + /// + /// Checks whether the halt method is executable by the current user. + /// + protected ServiceResult IsHaltUserExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Halt, true); + return ServiceResult.Good; + } + + /// + /// Handles the halt method. + /// + protected virtual ServiceResult OnHalt( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + return DoCause(context, method, Methods.ProgramStateMachineType_Halt, inputArguments, outputArguments); + } + #endregion + + #region Reset Cause Handlers + /// + /// Checks whether the reset method is executable. + /// + protected ServiceResult IsResetExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Reset, false); + return ServiceResult.Good; + } + + /// + /// Checks whether the reset method is executable by the current user. + /// + protected ServiceResult IsResetUserExecutable( + ISystemContext context, + NodeState node, + ref bool value) + { + value = IsCausePermitted(context, Methods.ProgramStateMachineType_Reset, true); + return ServiceResult.Good; + } + + /// + /// Handles the reset method. + /// + protected virtual ServiceResult OnReset( + ISystemContext context, + MethodState method, + IList inputArguments, + IList outputArguments) + { + return DoCause(context, method, Methods.ProgramStateMachineType_Reset, inputArguments, outputArguments); + } + #endregion + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ReferenceTypeState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ReferenceTypeState.cs new file mode 100644 index 00000000..002f9b94 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ReferenceTypeState.cs @@ -0,0 +1,402 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// The base class for all reference type nodes. + /// + public class ReferenceTypeState : BaseTypeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ReferenceTypeState() : base(NodeClass.ReferenceType) + { + m_inverseName = null; + m_symmetric = false; + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new ReferenceTypeState(); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + base.Initialize(context); + + InverseName = null; + Symmetric = false; + } + + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + ReferenceTypeState type = source as ReferenceTypeState; + + if (type != null) + { + m_inverseName = type.m_inverseName; + m_symmetric = type.m_symmetric; + } + + base.Initialize(context, source); + } + #endregion + + #region Public Members + /// + /// The inverse name for the reference. + /// + public LocalizedText InverseName + { + get + { + return m_inverseName; + } + + set + { + if (!Object.ReferenceEquals(m_inverseName, value)) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_inverseName = value; + } + } + + /// + /// Whether the reference is symmetric. + /// + public bool Symmetric + { + get + { + return m_symmetric; + } + + set + { + if (m_symmetric != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_symmetric = value; + } + } + #endregion + + #region Serialization Functions + /// + /// Exports a copy of the node to a node table. + /// + /// The context. + /// The node. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + ReferenceTypeNode referenceTypeNode = node as ReferenceTypeNode; + + if (referenceTypeNode != null) + { + referenceTypeNode.InverseName = this.InverseName; + referenceTypeNode.Symmetric = this.Symmetric; + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (!LocalizedText.IsNullOrEmpty(m_inverseName)) + { + encoder.WriteLocalizedText("InverseName", m_inverseName); + } + + if (m_symmetric) + { + encoder.WriteBoolean("Symmetric", m_symmetric); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("InverseName")) + { + InverseName = decoder.ReadLocalizedText("InverseName"); + } + + if (decoder.Peek("Symmetric")) + { + Symmetric = decoder.ReadBoolean("Symmetric"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (!LocalizedText.IsNullOrEmpty(m_inverseName)) + { + attributesToSave |= AttributesToSave.InverseName; + } + + if (m_symmetric) + { + attributesToSave |= AttributesToSave.Symmetric; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.InverseName) != 0) + { + encoder.WriteLocalizedText(null, m_inverseName); + } + + if ((attributesToSave & AttributesToSave.Symmetric) != 0) + { + encoder.WriteBoolean(null, m_symmetric); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.InverseName) != 0) + { + m_inverseName = decoder.ReadLocalizedText(null); + } + + if ((attibutesToLoad & AttributesToSave.Symmetric) != 0) + { + m_symmetric = decoder.ReadBoolean(null); + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the InverseName attribute is read. + /// + public NodeAttributeEventHandler OnReadInverseName; + + /// + /// Raised when the InverseName attribute is written. + /// + public NodeAttributeEventHandler OnWriteInverseName; + + /// + /// Raised when the Symmetric attribute is read. + /// + public NodeAttributeEventHandler OnReadSymmetric; + + /// + /// Raised when the Symmetric attribute is written. + /// + public NodeAttributeEventHandler OnWriteSymmetric; + #endregion + + #region Read Support Functions + /// + /// Reads the value for any non-value attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.InverseName: + { + LocalizedText inverseName = m_inverseName; + + if (OnReadInverseName != null) + { + result = OnReadInverseName(context, this, ref inverseName); + } + + if (ServiceResult.IsGood(result)) + { + value = inverseName; + } + + return result; + } + + case Attributes.Symmetric: + { + bool symmetric = m_symmetric; + + if (OnReadSymmetric != null) + { + result = OnReadSymmetric(context, this, ref symmetric); + } + + if (ServiceResult.IsGood(result)) + { + value = symmetric; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.InverseName: + { + LocalizedText inverseName = value as LocalizedText; + + if (inverseName == null && value != null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.InverseName) == 0) + { + return StatusCodes.BadNotWritable; + } + + if (OnWriteInverseName != null) + { + result = OnWriteInverseName(context, this, ref inverseName); + } + + if (ServiceResult.IsGood(result)) + { + InverseName = inverseName; + } + + return result; + } + + case Attributes.Symmetric: + { + bool? symmetricRef = value as bool?; + + if (symmetricRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.Symmetric) == 0) + { + return StatusCodes.BadNotWritable; + } + + bool symmetric = symmetricRef.Value; + + if (OnWriteSymmetric != null) + { + result = OnWriteSymmetric(context, this, ref symmetric); + } + + if (ServiceResult.IsGood(result)) + { + Symmetric = symmetric; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + #endregion + + #region Private Fields + private LocalizedText m_inverseName; + private bool m_symmetric; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ShelvedStateMachineState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ShelvedStateMachineState.cs new file mode 100644 index 00000000..91a597d2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ShelvedStateMachineState.cs @@ -0,0 +1,117 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + partial class ShelvedStateMachineState + { + #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); + + UpdateStateVariable(context, Objects.ShelvedStateMachineType_Unshelved, CurrentState); + UpdateTransitionVariable(context, 0, LastTransition); + } + #endregion + + #region Overriden Members + /// + /// The table of states belonging to the state machine. + /// + protected override ElementInfo[] StateTable + { + get { return s_StateTable; } + } + + /// + /// A table of valid states. + /// + private ElementInfo[] s_StateTable = new ElementInfo[] + { + new ElementInfo(Objects.ShelvedStateMachineType_OneShotShelved, BrowseNames.OneShotShelve, 1), + new ElementInfo(Objects.ShelvedStateMachineType_TimedShelved, BrowseNames.TimedShelved, 2), + new ElementInfo(Objects.ShelvedStateMachineType_Unshelved, BrowseNames.Unshelved, 3) + }; + + /// + /// The table of transitions belonging to the state machine. + /// + protected override ElementInfo[] TransitionTable + { + get { return s_TransitionTable; } + } + + /// + /// A table of valid transitions. + /// + private ElementInfo[] s_TransitionTable = new ElementInfo[] + { + new ElementInfo(Objects.ShelvedStateMachineType_OneShotShelvedToTimedShelved, BrowseNames.OneShotShelvedToTimedShelved, 1), + new ElementInfo(Objects.ShelvedStateMachineType_OneShotShelvedToUnshelved, BrowseNames.OneShotShelvedToUnshelved, 2), + new ElementInfo(Objects.ShelvedStateMachineType_TimedShelvedToOneShotShelved, BrowseNames.TimedShelvedToOneShotShelved, 3), + new ElementInfo(Objects.ShelvedStateMachineType_TimedShelvedToUnshelved, BrowseNames.TimedShelvedToUnshelved, 4), + new ElementInfo(Objects.ShelvedStateMachineType_UnshelvedToOneShotShelved, BrowseNames.UnshelvedToOneShotShelved, 5), + new ElementInfo(Objects.ShelvedStateMachineType_UnshelvedToTimedShelved, BrowseNames.UnshelvedToTimedShelved, 6), + }; + + /// + /// The mapping between transitions and their from and to states. + /// + protected override uint[,] TransitionMappings + { + get { return s_TransitionMappings; } + } + + /// + /// A table of the to and from states for the transitions. + /// + private uint[,] s_TransitionMappings = new uint[,] + { + { Objects.ShelvedStateMachineType_OneShotShelvedToTimedShelved, Objects.ShelvedStateMachineType_OneShotShelved, Objects.ShelvedStateMachineType_TimedShelved, 0 }, + { Objects.ShelvedStateMachineType_OneShotShelvedToUnshelved, Objects.ShelvedStateMachineType_OneShotShelved, Objects.ShelvedStateMachineType_Unshelved, 1 }, + { Objects.ShelvedStateMachineType_TimedShelvedToOneShotShelved, Objects.ShelvedStateMachineType_TimedShelved, Objects.ShelvedStateMachineType_OneShotShelved, 0 }, + { Objects.ShelvedStateMachineType_TimedShelvedToUnshelved, Objects.ShelvedStateMachineType_TimedShelved, Objects.ShelvedStateMachineType_Unshelved, 1 }, + { Objects.ShelvedStateMachineType_UnshelvedToOneShotShelved, Objects.ShelvedStateMachineType_Unshelved, Objects.ShelvedStateMachineType_OneShotShelved, 1 }, + { Objects.ShelvedStateMachineType_UnshelvedToTimedShelved, Objects.ShelvedStateMachineType_Unshelved, Objects.ShelvedStateMachineType_TimedShelved, 1 }, + }; + + /// + /// The mapping between causes, the current state and a transition. + /// + protected override uint[,] CauseMappings + { + get { return s_CauseMappings; } + } + + /// + /// A table of transitions for the available causes. + /// + private uint[,] s_CauseMappings = new uint[,] + { + { Methods.ShelvedStateMachineType_TimedShelve, Objects.ShelvedStateMachineType_OneShotShelved, Objects.ShelvedStateMachineType_OneShotShelvedToTimedShelved }, + { Methods.ShelvedStateMachineType_Unshelve, Objects.ShelvedStateMachineType_OneShotShelved, Objects.ShelvedStateMachineType_OneShotShelvedToUnshelved }, + { Methods.ShelvedStateMachineType_OneShotShelve, Objects.ShelvedStateMachineType_TimedShelved, Objects.ShelvedStateMachineType_TimedShelvedToOneShotShelved }, + { Methods.ShelvedStateMachineType_Unshelve, Objects.ShelvedStateMachineType_TimedShelved, Objects.ShelvedStateMachineType_TimedShelvedToUnshelved }, + { Methods.ShelvedStateMachineType_OneShotShelve, Objects.ShelvedStateMachineType_Unshelved, Objects.ShelvedStateMachineType_UnshelvedToOneShotShelved }, + { Methods.ShelvedStateMachineType_TimedShelve, Objects.ShelvedStateMachineType_Unshelved, Objects.ShelvedStateMachineType_UnshelvedToTimedShelved }, + }; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ViewState.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ViewState.cs new file mode 100644 index 00000000..ff2bfa3c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/State/ViewState.cs @@ -0,0 +1,433 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// The base class for all view nodes. + /// + public class ViewState : NodeState + { + #region Constructors + /// + /// Initializes the instance with its defalt attribute values. + /// + public ViewState() : base(NodeClass.View) + { + } + + /// + /// Constructs an instance of a node. + /// + /// The parent. + /// The new node. + public static NodeState Construct(NodeState parent) + { + return new ViewState(); + } + #endregion + + #region Initialization + /// + /// Initializes the instance with the default values. + /// + protected override void Initialize(ISystemContext context) + { + SymbolicName = "View1"; + NodeId = null; + BrowseName = new QualifiedName(SymbolicName, 1); + DisplayName = SymbolicName; + Description = null; + WriteMask = AttributeWriteMask.None; + UserWriteMask = AttributeWriteMask.None; + EventNotifier = EventNotifiers.None; + ContainsNoLoops = false; + } + + /// + /// Initializes the instance from another instance. + /// + protected override void Initialize(ISystemContext context, NodeState source) + { + ViewState instance = source as ViewState; + + if (instance != null) + { + m_eventNotifier = instance.m_eventNotifier; + m_containsNoLoops = instance.m_containsNoLoops; + } + + base.Initialize(context, source); + } + #endregion + + #region Public Members + /// + /// Makes a copy of the node and all children. + /// + /// + /// A new object that is a copy of this instance. + /// + public object MemberwiseClone(NodeState parent) + { + ViewState clone = new ViewState(); + + if (m_children != null) + { + clone.m_children = new List(m_children.Count); + + for (int ii = 0; ii < m_children.Count; ii++) + { + BaseInstanceState child = (BaseInstanceState)m_children[ii].MemberwiseClone(); + clone.m_children.Add(child); + } + } + + clone.m_changeMasks = NodeStateChangeMasks.None; + + return clone; + } + + /// + /// The inverse name for the reference. + /// + public byte EventNotifier + { + get + { + return m_eventNotifier; + } + + set + { + if (m_eventNotifier != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_eventNotifier = value; + } + } + + /// + /// Whether the reference is containsNoLoops. + /// + public bool ContainsNoLoops + { + get + { + return m_containsNoLoops; + } + + set + { + if (m_containsNoLoops != value) + { + ChangeMasks |= NodeStateChangeMasks.NonValue; + } + + m_containsNoLoops = value; + } + } + #endregion + + #region Event Callbacks + /// + /// Raised when the EventNotifier attribute is read. + /// + public NodeAttributeEventHandler OnReadEventNotifier; + + /// + /// Raised when the EventNotifier attribute is written. + /// + public NodeAttributeEventHandler OnWriteEventNotifier; + + /// + /// Raised when the ContainsNoLoops attribute is read. + /// + public NodeAttributeEventHandler OnReadContainsNoLoops; + + /// + /// Raised when the ContainsNoLoops attribute is written. + /// + public NodeAttributeEventHandler OnWriteContainsNoLoops; + #endregion + + #region Serialization Functions + /// + /// Exports a copy of the node to a node table. + /// + /// The context. + /// The node. + protected override void Export(ISystemContext context, Node node) + { + base.Export(context, node); + + ViewNode viewNode = node as ViewNode; + + if (viewNode != null) + { + viewNode.EventNotifier = this.EventNotifier; + viewNode.ContainsNoLoops = this.ContainsNoLoops; + } + } + + /// + /// Saves the attributes from the stream. + /// + /// The context for the system being accessed. + /// The encoder wrapping the stream to write. + public override void Save(ISystemContext context, XmlEncoder encoder) + { + base.Save(context, encoder); + + encoder.PushNamespace(Namespaces.OpcUaXsd); + + if (m_eventNotifier != 0) + { + encoder.WriteByte("EventNotifier", m_eventNotifier); + } + + if (m_containsNoLoops) + { + encoder.WriteBoolean("ContainsNoLoops", m_containsNoLoops); + } + + encoder.PopNamespace(); + } + + /// + /// Updates the attributes from the stream. + /// + /// The context for the system being accessed. + /// The decoder wrapping the stream to read. + public override void Update(ISystemContext context, XmlDecoder decoder) + { + base.Update(context, decoder); + + decoder.PushNamespace(Namespaces.OpcUaXsd); + + if (decoder.Peek("EventNotifier")) + { + EventNotifier = decoder.ReadByte("EventNotifier"); + } + + if (decoder.Peek("ContainsNoLoops")) + { + ContainsNoLoops = decoder.ReadBoolean("ContainsNoLoops"); + } + + decoder.PopNamespace(); + } + + /// + /// Returns a mask which indicates which attributes have non-default value. + /// + /// The context for the system being accessed. + /// A mask the specifies the available attributes. + public override AttributesToSave GetAttributesToSave(ISystemContext context) + { + AttributesToSave attributesToSave = base.GetAttributesToSave(context); + + if (m_eventNotifier != 0) + { + attributesToSave |= AttributesToSave.EventNotifier; + } + + if (m_containsNoLoops) + { + attributesToSave |= AttributesToSave.ContainsNoLoops; + } + + return attributesToSave; + } + + /// + /// Saves object in an binary stream. + /// + /// The context user. + /// The encoder to write to. + /// The masks indicating what attributes to write. + public override void Save(ISystemContext context, BinaryEncoder encoder, AttributesToSave attributesToSave) + { + base.Save(context, encoder, attributesToSave); + + if ((attributesToSave & AttributesToSave.EventNotifier) != 0) + { + encoder.WriteByte(null, m_eventNotifier); + } + + if ((attributesToSave & AttributesToSave.ContainsNoLoops) != 0) + { + encoder.WriteBoolean(null, m_containsNoLoops); + } + } + + /// + /// Updates the specified context. + /// + /// The context. + /// The decoder. + /// The attributes to load. + public override void Update(ISystemContext context, BinaryDecoder decoder, AttributesToSave attibutesToLoad) + { + base.Update(context, decoder, attibutesToLoad); + + if ((attibutesToLoad & AttributesToSave.EventNotifier) != 0) + { + m_eventNotifier = decoder.ReadByte(null); + } + + if ((attibutesToLoad & AttributesToSave.ContainsNoLoops) != 0) + { + m_containsNoLoops = decoder.ReadBoolean(null); + } + } + #endregion + + #region Read Support Functions + /// + /// Reads the value for any non-value attribute. + /// + protected override ServiceResult ReadNonValueAttribute( + ISystemContext context, + uint attributeId, + ref object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.EventNotifier: + { + byte eventNotifier = m_eventNotifier; + + if (OnReadEventNotifier != null) + { + result = OnReadEventNotifier(context, this, ref eventNotifier); + } + + if (ServiceResult.IsGood(result)) + { + value = eventNotifier; + } + + return result; + } + + case Attributes.ContainsNoLoops: + { + bool containsNoLoops = m_containsNoLoops; + + if (OnReadContainsNoLoops != null) + { + result = OnReadContainsNoLoops(context, this, ref containsNoLoops); + } + + if (ServiceResult.IsGood(result)) + { + value = containsNoLoops; + } + + return result; + } + } + + return base.ReadNonValueAttribute(context, attributeId, ref value); + } + #endregion + + #region Write Support Functions + /// + /// Write the value for any non-value attribute. + /// + protected override ServiceResult WriteNonValueAttribute( + ISystemContext context, + uint attributeId, + object value) + { + ServiceResult result = null; + + switch (attributeId) + { + case Attributes.EventNotifier: + { + byte? eventNotifierRef = value as byte?; + + if (eventNotifierRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.EventNotifier) == 0) + { + return StatusCodes.BadNotWritable; + } + + byte eventNotifier = eventNotifierRef.Value; + + if (OnWriteEventNotifier != null) + { + result = OnWriteEventNotifier(context, this, ref eventNotifier); + } + + if (ServiceResult.IsGood(result)) + { + EventNotifier = eventNotifier; + } + + return result; + } + + case Attributes.ContainsNoLoops: + { + bool? containsNoLoopsRef = value as bool?; + + if (containsNoLoopsRef == null) + { + return StatusCodes.BadTypeMismatch; + } + + if ((WriteMask & AttributeWriteMask.ContainsNoLoops) == 0) + { + return StatusCodes.BadNotWritable; + } + + bool containsNoLoops = containsNoLoopsRef.Value; + + if (OnWriteContainsNoLoops != null) + { + result = OnWriteContainsNoLoops(context, this, ref containsNoLoops); + } + + if (ServiceResult.IsGood(result)) + { + ContainsNoLoops = containsNoLoops; + } + + return result; + } + } + + return base.WriteNonValueAttribute(context, attributeId, value); + } + #endregion + + #region Private Fields + private byte m_eventNotifier; + private bool m_containsNoLoops; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelAsyncOperation.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelAsyncOperation.cs new file mode 100644 index 00000000..99c07df5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelAsyncOperation.cs @@ -0,0 +1,356 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Stores the results of an asynchronous operation. + /// + public class ChannelAsyncOperation : IAsyncResult, IDisposable + { + #region Constructors + /// + /// Initializes the object with a callback + /// + public ChannelAsyncOperation(int timeout, AsyncCallback callback, object asyncState) + { + m_callback = callback; + m_asyncState = asyncState; + m_synchronous = false; + m_completed = false; + + if (timeout > 0 && timeout != Int32.MaxValue) + { + m_timer = new Timer(new TimerCallback(OnTimeout), null, timeout, Timeout.Infinite); + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + Utils.SilentDispose(m_timer); + m_timer = null; + + if (m_event != null) + { + m_event.Set(); + m_event.Dispose(); + m_event = null; + } + } + } + } + #endregion + + #region Public Methods + /// + /// Called when an asynchronous operation completes. + /// + public bool Complete(T response) + { + return InternalComplete(true, response); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Complete(bool doNotBlock, T response) + { + return InternalComplete(doNotBlock, response); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Fault(ServiceResult error) + { + return InternalComplete(true, error); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Fault(bool doNotBlock, ServiceResult error) + { + return InternalComplete(doNotBlock, error); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Fault(uint code, string format, params object[] args) + { + return InternalComplete(true, ServiceResult.Create(code, format, args)); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Fault(bool doNotBlock, uint code, string format, params object[] args) + { + return InternalComplete(doNotBlock, ServiceResult.Create(code, format, args)); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Fault(Exception e, uint defaultCode, string format, params object[] args) + { + return InternalComplete(true, ServiceResult.Create(e, defaultCode, format, args)); + } + + /// + /// Called when an asynchronous operation completes. + /// + public bool Fault(bool doNotBlock, Exception e, uint defaultCode, string format, params object[] args) + { + return InternalComplete(doNotBlock, ServiceResult.Create(e, defaultCode, format, args)); + } + + /// + /// The response returned from the server. + /// + public T End(int timeout, bool throwOnError = true) + { + // check if the request has already completed. + bool mustWait = false; + + lock (m_lock) + { + mustWait = !m_completed; + + if (mustWait) + { + m_event = new ManualResetEvent(false); + } + } + + // wait for completion. + if (mustWait) + { + try + { + if (!m_event.WaitOne(timeout) && throwOnError) + { + throw new ServiceResultException(StatusCodes.BadRequestInterrupted); + } + } + finally + { + lock (m_lock) + { + // Dispose the event + if (m_event != null) + { + m_event.Dispose(); + m_event = null; + } + } + } + } + + // return the response. + lock (m_lock) + { + if (m_error != null && throwOnError) + { + throw new ServiceResultException(m_error); + } + + return m_response; + } + } + + /// + /// Stores additional state information associated with the operation. + /// + public IDictionary Properties + { + get + { + lock (m_lock) + { + if (m_properties == null) + { + m_properties = new Dictionary(); + } + + return m_properties; + } + } + } + #endregion + + #region IAsyncResult Members + /// + public object AsyncState + { + get + { + lock (m_lock) + { + return m_asyncState; + } + } + } + + /// + public WaitHandle AsyncWaitHandle + { + get + { + lock (m_lock) + { + if (m_event == null) + { + m_event = new ManualResetEvent(m_completed); + } + + return m_event; + } + } + } + + /// + public bool CompletedSynchronously + { + get + { + lock (m_lock) + { + return m_synchronous; + } + } + } + + /// + public bool IsCompleted + { + get + { + lock (m_lock) + { + return m_completed; + } + } + } + #endregion + + #region Private Methods + /// + /// Called when the operation times out. + /// + private void OnTimeout(object state) + { + if (m_timer != null) + { + InternalComplete(false, new ServiceResult(StatusCodes.BadRequestTimeout)); + } + } + + /// + /// Called when an asynchronous operation completes. + /// + protected virtual bool InternalComplete(bool doNotBlock, object result) + { + lock (m_lock) + { + // ignore multiple calls (i.e. a timeout after a response or vise versa). + if (m_completed) + { + return false; + } + + if (result is T) + { + m_response = (T)result; + } + else + { + m_error = result as ServiceResult; + } + + m_completed = true; + + if (m_timer != null) + { + m_timer.Dispose(); + m_timer = null; + } + + if (m_event != null) + { + m_event.Set(); + } + } + + if (m_callback != null) + { + if (doNotBlock) + { + Task.Run(() => + { + m_callback(this); + }); + } + else + { + try + { + m_callback(this); + } + catch (Exception e) + { + Utils.Trace(e, "ClientChannel: Unexpected error invoking AsyncCallback."); + } + } + } + + return true; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private AsyncCallback m_callback; + private object m_asyncState; + private bool m_synchronous; + private bool m_completed; + private ManualResetEvent m_event; + private T m_response; + private ServiceResult m_error; + private Timer m_timer; + private Dictionary m_properties; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelQuotas.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelQuotas.cs new file mode 100644 index 00000000..6581fadd --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelQuotas.cs @@ -0,0 +1,178 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua.Bindings +{ + /// + /// Stores various configuration parameters used by the channel. + /// + public class ChannelQuotas + { + #region Constructors + /// + /// Creates an object with default values. + /// + public ChannelQuotas() + { + m_messageContext = ServiceMessageContext.GlobalContext; + m_maxMessageSize = TcpMessageLimits.DefaultMaxMessageSize; + m_maxBufferSize = TcpMessageLimits.DefaultMaxMessageSize; + m_channelLifetime = TcpMessageLimits.DefaultChannelLifetime; + m_securityTokenLifetime = TcpMessageLimits.DefaultSecurityTokenLifeTime; + } + #endregion + + #region Public Properties + /// + /// The context to use when encoding/decoding messages. + /// + public ServiceMessageContext MessageContext + { + get + { + lock (m_lock) + { + return m_messageContext; + } + } + + set + { + lock (m_lock) + { + m_messageContext = value; + } + } + } + + /// + /// Validator to use when handling certificates. + /// + public ICertificateValidator CertificateValidator + { + get + { + lock (m_lock) + { + return m_certificateValidator; + } + } + + set + { + lock (m_lock) + { + m_certificateValidator = value; + } + } + } + + /// + /// The maximum size for a message sent or received. + /// + public int MaxMessageSize + { + get + { + lock (m_lock) + { + return m_maxMessageSize; + } + } + + set + { + lock (m_lock) + { + m_maxMessageSize = value; + } + } + } + + /// + /// The maximum size for the send or receive buffers. + /// + public int MaxBufferSize + { + get + { + lock (m_lock) + { + return m_maxBufferSize; + } + } + + set + { + lock (m_lock) + { + m_maxBufferSize = value; + } + } + } + + /// + /// The default lifetime for the channel in milliseconds. + /// + public int ChannelLifetime + { + get + { + lock (m_lock) + { + return m_channelLifetime; + } + } + + set + { + lock (m_lock) + { + m_channelLifetime = value; + } + } + } + + /// + /// The default lifetime for a security token in milliseconds. + /// + public int SecurityTokenLifetime + { + get + { + lock (m_lock) + { + return m_securityTokenLifetime; + } + } + + set + { + lock (m_lock) + { + m_securityTokenLifetime = value; + } + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private int m_maxMessageSize; + private int m_maxBufferSize; + private int m_channelLifetime; + private int m_securityTokenLifetime; + private ServiceMessageContext m_messageContext; + private ICertificateValidator m_certificateValidator; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelToken.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelToken.cs new file mode 100644 index 00000000..a4d328e3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ChannelToken.cs @@ -0,0 +1,237 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography; + +namespace Opc.Ua.Bindings +{ + /// + /// Represents a security token associate with a channel. + /// + public class ChannelToken + { + #region Constructors + /// + /// Creates an object with default values. + /// + public ChannelToken() + { + } + #endregion + + #region Public Properties + /// + /// The id assigned to the channel that the token belongs to. + /// + public uint ChannelId + { + get { return m_channelId; } + set { m_channelId = value; } + } + + /// + /// The id assigned to the token. + /// + public uint TokenId + { + get { return m_tokenId; } + set { m_tokenId = value; } + } + + /// + /// When the token was created by the server (refers to the server's clock). + /// + public DateTime CreatedAt + { + get { return m_createdAt; } + set { m_createdAt = value; } + } + + /// + /// The lifetime of the token in milliseconds. + /// + public int Lifetime + { + get { return m_lifetime; } + set { m_lifetime = value; } + } + + /// + /// Whether the token has expired. + /// + public bool Expired + { + get + { + if (DateTime.UtcNow > m_createdAt.AddMilliseconds(m_lifetime)) + { + return true; + } + + return false; + } + } + + /// + /// Whether the token should be activated in case a new one is already created. + /// + public bool ActivationRequired + { + get + { + if (DateTime.UtcNow > m_createdAt.AddMilliseconds(m_lifetime * TcpMessageLimits.TokenActivationPeriod)) + { + return true; + } + + return false; + } + } + + /// + /// The nonce provided by the client. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ClientNonce + { + get { return m_clientNonce; } + set { m_clientNonce = value; } + } + + /// + /// The nonce provided by the server. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ServerNonce + { + get { return m_serverNonce; } + set { m_serverNonce = value; } + } + + /// + /// The key used to sign messages sent by the client. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ClientSigningKey + { + get { return m_clientSigningKey; } + set { m_clientSigningKey = value; } + } + + /// + /// The key used to encrypt messages sent by the client. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ClientEncryptingKey + { + get { return m_clientEncryptingKey; } + set { m_clientEncryptingKey = value; } + } + + /// + /// The initialization vector by the client when encrypting a message. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ClientInitializationVector + { + get { return m_clientInitializationVector; } + set { m_clientInitializationVector = value; } + } + + /// + /// The key used to sign messages sent by the server. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ServerSigningKey + { + get { return m_serverSigningKey; } + set { m_serverSigningKey = value; } + } + + /// + /// The key used to encrypt messages sent by the server. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ServerEncryptingKey + { + get { return m_serverEncryptingKey; } + set { m_serverEncryptingKey = value; } + } + + /// + /// The initialization vector by the server when encrypting a message. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public byte[] ServerInitializationVector + { + get { return m_serverInitializationVector; } + set { m_serverInitializationVector = value; } + } + + /// + /// The SymmetricAlgorithm object used by the client to encrypt messages. + /// + public SymmetricAlgorithm ClientEncryptor + { + get { return m_clientEncryptor; } + set { m_clientEncryptor = value; } + } + + /// + /// The SymmetricAlgorithm object used by the server to encrypt messages. + /// + public SymmetricAlgorithm ServerEncryptor + { + get { return m_serverEncryptor; } + set { m_serverEncryptor = value; } + } + + /// + /// The HMAC object used by the client to sign messages. + /// + public HMAC ClientHmac + { + get { return m_clientHmac; } + set { m_clientHmac = value; } + } + + /// + /// The HMAC object used by the server to sign messages. + /// + public HMAC ServerHmac + { + get { return m_serverHmac; } + set { m_serverHmac = value; } + } + #endregion + + #region Private Fields + private uint m_channelId; + private uint m_tokenId; + private DateTime m_createdAt; + private int m_lifetime; + private byte[] m_clientNonce; + private byte[] m_serverNonce; + private byte[] m_clientSigningKey; + private byte[] m_clientEncryptingKey; + private byte[] m_clientInitializationVector; + private byte[] m_serverSigningKey; + private byte[] m_serverEncryptingKey; + private byte[] m_serverInitializationVector; + private HMAC m_clientHmac; + private HMAC m_serverHmac; + private SymmetricAlgorithm m_clientEncryptor; + private SymmetricAlgorithm m_serverEncryptor; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ITcpChannelListener.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ITcpChannelListener.cs new file mode 100644 index 00000000..cdee66ac --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/ITcpChannelListener.cs @@ -0,0 +1,64 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Net.Sockets; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + + /// + /// Interface between listener and UA TCP channel + /// + public interface ITcpChannelListener + { + /// + /// The endpoint url of the listener + /// + Uri EndpointUrl { get; } + + /// + /// Binds a new socket to an existing channel. + /// + /// + /// + /// + /// + /// + /// + /// + /// + bool ReconnectToExistingChannel( + IMessageSocket socket, + uint requestId, + uint sequenceNumber, + uint channelId, + X509Certificate2 clientCertificate, + ChannelToken token, + OpenSecureChannelRequest request); + + /// + /// Used to transfer a reverse connection socket to the client. + /// + Task TransferListenerChannel( + uint channelId, + string serverUri, + Uri endpointUrl); + + /// + /// Called when a channel closes. + /// + void ChannelClosed(uint channelId); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpListenerChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpListenerChannel.cs new file mode 100644 index 00000000..903ff609 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpListenerChannel.cs @@ -0,0 +1,601 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Net.Sockets; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Manages the listening side of a UA TCP channel. + /// + public class TcpListenerChannel : UaSCUaBinaryChannel + { + #region Constructors + /// + /// Attaches the object to an existing socket. + /// + public TcpListenerChannel( + string contextId, + ITcpChannelListener listener, + BufferManager bufferManager, + ChannelQuotas quotas, + X509Certificate2 serverCertificate, + EndpointDescriptionCollection endpoints) + : + this(contextId, listener, bufferManager, quotas, serverCertificate, null, endpoints) + { + } + + /// + /// Attaches the object to an existing socket. + /// + public TcpListenerChannel( + string contextId, + ITcpChannelListener listener, + BufferManager bufferManager, + ChannelQuotas quotas, + X509Certificate2 serverCertificate, + X509Certificate2Collection serverCertificateChain, + EndpointDescriptionCollection endpoints) + : + base(contextId, bufferManager, quotas, serverCertificate, serverCertificateChain, endpoints, MessageSecurityMode.None, SecurityPolicies.None) + { + m_listener = listener; + m_queuedResponses = new SortedDictionary(); + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_cleanupTimer")] + protected override void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_cleanupTimer); + m_cleanupTimer = null; + } + + base.Dispose(disposing); + } + #endregion + + #region Public Methods + /// + /// The channel name used in trace output. + /// + public virtual string ChannelName => "TCPLISTENERCHANNEL"; + + /// + /// The TCP channel listener. + /// + protected ITcpChannelListener Listener => m_listener; + + /// + /// Sets the callback used to receive notifications of new events. + /// + public void SetRequestReceivedCallback(TcpChannelRequestEventHandler callback) + { + lock (DataLock) + { + m_requestReceived = callback; + } + } + + /// + /// Attaches the channel to an existing socket. + /// + public void Attach(uint channelId, Socket socket) + { + if (socket == null) throw new ArgumentNullException(nameof(socket)); + + lock (DataLock) + { + // check for existing socket. + if (Socket != null) + { + throw new InvalidOperationException("Channel is already attached to a socket."); + } + + ChannelId = channelId; + State = TcpChannelState.Connecting; + + Socket = new TcpMessageSocket(this, socket, BufferManager, Quotas.MaxBufferSize); + Utils.Trace("{0} SOCKET ATTACHED: {1:X8}, ChannelId={2}", ChannelName, Socket.Handle, ChannelId); + Socket.ReadNextMessage(); + + // automatically clean up the channel if no hello received. + StartCleanupTimer(StatusCodes.BadTimeout); + } + } + + /// + /// Sends the response for the specified request. + /// + public void SendResponse(uint requestId, IServiceResponse response) + { + if (response == null) throw new ArgumentNullException(nameof(response)); + + lock (DataLock) + { + // must queue the response if the channel is in the faulted state. + if (State == TcpChannelState.Faulted) + { + m_queuedResponses[requestId] = response; + return; + } + + Utils.Trace("Channel {0}: SendResponse {1}", ChannelId, requestId); + + BufferCollection buffers = null; + + try + { + // note that the server does nothing if the message limits are exceeded. + bool limitsExceeded = false; + + buffers = WriteSymmetricMessage( + TcpMessageType.Message, + requestId, + CurrentToken, + response, + false, + out limitsExceeded); + } + catch (Exception e) + { + SendServiceFault( + CurrentToken, + requestId, + ServiceResult.Create(e, StatusCodes.BadEncodingError, "Could not encode outgoing message.")); + + return; + } + + try + { + BeginWriteMessage(buffers, null); + buffers = null; + } + catch (Exception) + { + if (buffers != null) + { + buffers.Release(BufferManager, "SendResponse"); + } + + m_queuedResponses[requestId] = response; + return; + } + } + } + #endregion + + #region Socket Event Handlers + #endregion + + #region Error Handling Functions + /// + /// Handles a socket error. + /// + protected override void HandleSocketError(ServiceResult result) + { + lock (DataLock) + { + // channel fault. + if (ServiceResult.IsBad(result)) + { + ForceChannelFault(result); + return; + } + + // gracefully shutdown the channel. + ChannelClosed(); + } + } + + /// + /// Forces the channel into a faulted state as a result of a fatal error. + /// + protected void ForceChannelFault(uint statusCode, string format, params object[] args) + { + ForceChannelFault(ServiceResult.Create(statusCode, format, args)); + } + + /// + /// Forces the channel into a faulted state as a result of a fatal error. + /// + protected void ForceChannelFault(Exception exception, uint defaultCode, string format, params object[] args) + { + ForceChannelFault(ServiceResult.Create(exception, defaultCode, format, args)); + } + + /// + /// Forces the channel into a faulted state as a result of a fatal error. + /// + protected void ForceChannelFault(ServiceResult reason) + { + lock (DataLock) + { + Utils.Trace( + "{0} ForceChannelFault Socket={1:X8}, ChannelId={2}, TokenId={3}, Reason={4}", + ChannelName, + (Socket != null) ? Socket.Handle : 0, + (CurrentToken != null) ? CurrentToken.ChannelId : 0, + (CurrentToken != null) ? CurrentToken.TokenId : 0, + reason.ToLongString()); + + CompleteReverseHello(new ServiceResultException(reason)); + + // nothing to do if channel already in a faulted state. + if (State == TcpChannelState.Faulted) + { + return; + } + + // send error and close response. + if (Socket != null) + { + if (m_responseRequired) + { + SendErrorMessage(reason); + } + + } + + State = TcpChannelState.Faulted; + m_responseRequired = false; + + // notify any monitors. + NotifyMonitors(reason, false); + + // ensure the channel will be cleaned up if the client does not reconnect. + StartCleanupTimer(reason); + } + } + + /// + /// Starts a timer that will clean up the channel if it is not opened/re-opened. + /// + protected void StartCleanupTimer(ServiceResult reason) + { + CleanupTimer(); + m_cleanupTimer = new Timer(OnCleanup, reason, Quotas.ChannelLifetime, Timeout.Infinite); + } + + /// + /// Cleans up a timer that will clean up the channel if it is not opened/re-opened. + /// + protected void CleanupTimer() + { + if (m_cleanupTimer != null) + { + m_cleanupTimer.Dispose(); + m_cleanupTimer = null; + } + } + + /// + /// Called when the channel needs to be cleaned up. + /// + private void OnCleanup(object state) + { + lock (DataLock) + { + CleanupTimer(); + // nothing to do if the channel is now open or closed. + if (State == TcpChannelState.Closed || State == TcpChannelState.Open) + { + return; + } + + // get reason for cleanup. + ServiceResult reason = state as ServiceResult; + + if (reason == null) + { + reason = new ServiceResult(StatusCodes.BadTimeout); + } + + Utils.Trace( + "{0} Cleanup Socket={1:X8}, ChannelId={2}, TokenId={3}, Reason={4}", + ChannelName, + (Socket != null) ? Socket.Handle : 0, + (CurrentToken != null) ? CurrentToken.ChannelId : 0, + (CurrentToken != null) ? CurrentToken.TokenId : 0, + reason.ToLongString()); + + // close channel. + ChannelClosed(); + } + } + + /// + /// Closes the channel and releases resources. + /// + protected void ChannelClosed() + { + try + { + if (Socket != null) + { + Socket.Close(); + } + } + finally + { + State = TcpChannelState.Closed; + m_listener.ChannelClosed(ChannelId); + + // notify any monitors. + NotifyMonitors(new ServiceResult(StatusCodes.BadConnectionClosed), true); + + CleanupTimer(); + } + } + + /// + /// Called to send queued responses after a reconnect. + /// + private void OnChannelReconnected(object state) + { + SortedDictionary responses = state as SortedDictionary; + + if (responses == null) + { + return; + } + + foreach (KeyValuePair response in responses) + { + try + { + SendResponse(response.Key, response.Value); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error re-sending request (ID={0}).", response.Key); + } + } + } + + /// + /// Sends an error message over the socket. + /// + protected void SendErrorMessage(ServiceResult error) + { + Utils.Trace("Channel {0}: SendErrorMessage()", ChannelId); + + byte[] buffer = BufferManager.TakeBuffer(SendBufferSize, "SendErrorMessage"); + + try + { + BinaryEncoder encoder = new BinaryEncoder(buffer, 0, SendBufferSize, Quotas.MessageContext); + + encoder.WriteUInt32(null, TcpMessageType.Error); + encoder.WriteUInt32(null, 0); + + WriteErrorMessageBody(encoder, error); + + int size = encoder.Close(); + UpdateMessageSize(buffer, 0, size); + + BeginWriteMessage(new ArraySegment(buffer, 0, size), null); + buffer = null; + } + finally + { + if (buffer != null) + { + BufferManager.ReturnBuffer(buffer, "SendErrorMessage"); + } + } + } + + /// + /// Sends a fault response secured with the symmetric keys. + /// + protected void SendServiceFault(ChannelToken token, uint requestId, ServiceResult fault) + { + Utils.Trace("Channel {0} Request {1}: SendServiceFault()", ChannelId, requestId); + + BufferCollection buffers = null; + + try + { + // construct fault. + ServiceFault response = new ServiceFault(); + + response.ResponseHeader.ServiceResult = fault.Code; + + StringTable stringTable = new StringTable(); + + response.ResponseHeader.ServiceDiagnostics = new DiagnosticInfo( + fault, + DiagnosticsMasks.NoInnerStatus, + true, + stringTable); + + response.ResponseHeader.StringTable = stringTable.ToArray(); + + // the limits should never be exceeded when sending a fault. + bool limitsExceeded = false; + + // secure message. + buffers = WriteSymmetricMessage( + TcpMessageType.Message, + requestId, + token, + response, + false, + out limitsExceeded); + + // send message. + BeginWriteMessage(buffers, null); + buffers = null; + } + catch (Exception e) + { + if (buffers != null) + { + buffers.Release(BufferManager, "SendServiceFault"); + } + + ForceChannelFault(ServiceResult.Create(e, StatusCodes.BadTcpInternalError, "Unexpected error sending a service fault.")); + } + } + + /// + /// Notify if the channel status changed. + /// + protected virtual void NotifyMonitors(ServiceResult status, bool closed) + { + // intentionally left empty + } + + /// + /// Called to indicate an error or success if the listener + /// channel initiated a reverse hello connection. + /// + /// + /// The callback is only used by the server channel. + /// The listener channel uses the callback to indicate + /// an error condition to the server channel. + /// + protected virtual void CompleteReverseHello(Exception e) + { + // intentionally left empty + } + + /// + /// Sends a fault response secured with the asymmetric keys. + /// + protected void SendServiceFault(uint requestId, ServiceResult fault) + { + Utils.Trace("Channel {0} Request {1}: SendServiceFault()", ChannelId, requestId); + + BufferCollection chunksToSend = null; + + try + { + // construct fault. + ServiceFault response = new ServiceFault(); + + response.ResponseHeader.ServiceResult = fault.Code; + + StringTable stringTable = new StringTable(); + + response.ResponseHeader.ServiceDiagnostics = new DiagnosticInfo( + fault, + DiagnosticsMasks.NoInnerStatus, + true, + stringTable); + + response.ResponseHeader.StringTable = stringTable.ToArray(); + + // serialize fault. + byte[] buffer = BinaryEncoder.EncodeMessage(response, Quotas.MessageContext); + + // secure message. + chunksToSend = WriteAsymmetricMessage( + TcpMessageType.Open, + requestId, + ServerCertificate, + ClientCertificate, + new ArraySegment(buffer, 0, buffer.Length)); + + // write the message to the server. + BeginWriteMessage(chunksToSend, null); + chunksToSend = null; + } + catch (Exception e) + { + if (chunksToSend != null) + { + chunksToSend.Release(BufferManager, "SendServiceFault"); + } + + ForceChannelFault(ServiceResult.Create(e, StatusCodes.BadTcpInternalError, "Unexpected error sending a service fault.")); + } + } + + /// + /// Handles a reconnect request. + /// + public virtual void Reconnect(IMessageSocket socket, uint requestId, uint sequenceNumber, X509Certificate2 clientCertificate, ChannelToken token, OpenSecureChannelRequest request) + { + throw new NotImplementedException(); + } + + /// + /// Set the flag if a response is required for the use case of reverse connect. + /// + protected void SetResponseRequired(bool responseRequired) + { + m_responseRequired = responseRequired; + } + #endregion + + #region Connect/Reconnect Sequence + /// + /// Returns a new token id. + /// + protected uint GetNewTokenId() + { + return Utils.IncrementIdentifier(ref m_lastTokenId); + } + #endregion + + #region Protected Functions + /// + /// Reset the sorted dictionary of queued responses after reconnect. + /// + protected void ResetQueuedResponses(Action action) + { + Task.Factory.StartNew(action, m_queuedResponses); + m_queuedResponses = new SortedDictionary(); + } + + /// + /// The channel request event handler. + /// + protected TcpChannelRequestEventHandler RequestReceived => m_requestReceived; + #endregion + + #region Private Fields + private ITcpChannelListener m_listener; + private bool m_responseRequired; + private SortedDictionary m_queuedResponses; + private TcpChannelRequestEventHandler m_requestReceived; + private long m_lastTokenId; + private Timer m_cleanupTimer; + #endregion + } + + /// + /// Used to report an incoming request. + /// + public delegate void TcpChannelRequestEventHandler(TcpListenerChannel channel, uint requestId, IServiceRequest request); + + /// + /// Used to report the status of the channel. + /// + public delegate void TcpChannelStatusEventHandler(TcpServerChannel channel, ServiceResult status, bool closed); + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs new file mode 100644 index 00000000..223e186b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs @@ -0,0 +1,884 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Creates a transport channel with UA-TCP transport, UA-SC security and UA Binary encoding + /// + + public class TcpTransportChannel : UaSCUaBinaryTransportChannel + { + /// + /// Create a Tcp transport channel. + /// + public TcpTransportChannel() : + base(new TcpMessageSocketFactory()) + { + } + } + + /// + /// Creates a new TcpTransportChannel with ITransportChannel interface. + /// + public class TcpTransportChannelFactory : ITransportChannelFactory + { + /// + /// The protocol supported by the channel. + /// + public string UriScheme => Utils.UriSchemeOpcTcp; + + /// + /// The method creates a new instance of a TCP transport channel + /// + /// The transport channel + public ITransportChannel Create() + { + return new TcpTransportChannel(); + } + } + + /// + /// Handles async event callbacks from a socket + /// + public class TcpMessageSocketAsyncEventArgs : IMessageSocketAsyncEventArgs + { + /// + /// Create the event args for the async TCP message socket. + /// + public TcpMessageSocketAsyncEventArgs() + { + m_args = new SocketAsyncEventArgs { + UserToken = this + }; + } + + #region IDisposable Members + /// + public void Dispose() + { + m_args.Dispose(); + } + #endregion + + /// + public object UserToken { get; set; } + + /// + public void SetBuffer(byte[] buffer, int offset, int count) + { + m_args.SetBuffer(buffer, offset, count); + } + + /// + public bool IsSocketError => m_args.SocketError != SocketError.Success; + + /// + public string SocketErrorString => m_args.SocketError.ToString(); + + /// + public event EventHandler Completed + { + add + { + m_internalComplete += value; + m_args.Completed += OnComplete; + } + remove + { + m_internalComplete -= value; + m_args.Completed -= OnComplete; + } + } + + /// + protected void OnComplete(object sender, SocketAsyncEventArgs e) + { + if (e.UserToken == null) + { + return; + } + + m_internalComplete(this, e.UserToken as IMessageSocketAsyncEventArgs); + } + + /// + public int BytesTransferred => m_args.BytesTransferred; + + /// + public byte[] Buffer => m_args.Buffer; + + /// + public BufferCollection BufferList + { + get { return m_args.BufferList as BufferCollection; } + set { m_args.BufferList = value; } + } + + /// + /// The socket event args. + /// + public SocketAsyncEventArgs Args => m_args; + + private SocketAsyncEventArgs m_args; + private event EventHandler m_internalComplete; + } + + /// + /// Handles async event callbacks only for the ConnectAsync method + /// + public class TcpMessageSocketConnectAsyncEventArgs : IMessageSocketAsyncEventArgs + { + /// + /// Create the async event args for a TCP message socket. + /// + /// The socket error. + public TcpMessageSocketConnectAsyncEventArgs(SocketError error) + { + m_socketError = error; + } + + #region IDisposable Members + /// + public void Dispose() + { + } + #endregion + + /// + public object UserToken { get; set; } + + /// + /// Not implemented here. + public void SetBuffer(byte[] buffer, int offset, int count) + { + throw new NotImplementedException(); + } + + /// + public bool IsSocketError => m_socketError != SocketError.Success; + + /// + public string SocketErrorString => m_socketError.ToString(); + + /// + /// Not implemented here. + public event EventHandler Completed + { + add + { + throw new NotImplementedException(); + } + remove + { + throw new NotImplementedException(); + } + } + + /// + public int BytesTransferred => 0; + + /// + /// Not implemented here. + public byte[] Buffer => null; + + /// + /// Not implememnted here. + public BufferCollection BufferList + { + get { return null; } + set + { + throw new NotImplementedException(); + } + } + + private SocketError m_socketError; + } + + + /// + /// Creates a new TcpMessageSocket with IMessageSocket interface. + /// + public class TcpMessageSocketFactory : IMessageSocketFactory + { + /// + /// The method creates a new instance of a UA-TCP message socket + /// + /// the message socket + public IMessageSocket Create( + IMessageSink sink, + BufferManager bufferManager, + int receiveBufferSize + ) + { + return new TcpMessageSocket(sink, bufferManager, receiveBufferSize); + } + + /// + /// Gets the implementation description. + /// + /// The implementation string. + public string Implementation => "UA-TCP"; + + } + + + /// + /// Handles reading and writing of message chunks over a socket. + /// + public class TcpMessageSocket : IMessageSocket + { + private static readonly int DefaultRetryNextAddressTimeout = 1000; + + #region Constructors + /// + /// Creates an unconnected socket. + /// + public TcpMessageSocket( + IMessageSink sink, + BufferManager bufferManager, + int receiveBufferSize) + { + if (bufferManager == null) throw new ArgumentNullException(nameof(bufferManager)); + + m_sink = sink; + m_socket = null; + m_bufferManager = bufferManager; + m_receiveBufferSize = receiveBufferSize; + m_incomingMessageSize = -1; + m_readComplete = OnReadComplete; + m_readState = ReadState.Ready; + } + + /// + /// Attaches the object to an existing socket. + /// + public TcpMessageSocket( + IMessageSink sink, + Socket socket, + BufferManager bufferManager, + int receiveBufferSize) + { + if (socket == null) throw new ArgumentNullException(nameof(socket)); + if (bufferManager == null) throw new ArgumentNullException(nameof(bufferManager)); + + m_sink = sink; + m_socket = socket; + m_bufferManager = bufferManager; + m_receiveBufferSize = receiveBufferSize; + m_incomingMessageSize = -1; + m_readComplete = OnReadComplete; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + m_socket.Dispose(); + } + } + #endregion + + #region Connect/Disconnect Handling + /// + /// Gets the socket handle. + /// + /// The socket handle. + public int Handle => m_socket != null ? m_socket.GetHashCode() : -1; + + /// + /// Gets the transport channel features implemented by this message socket. + /// + /// The transport channel feature. + public TransportChannelFeatures MessageSocketFeatures => TransportChannelFeatures.ReverseConnect | TransportChannelFeatures.Reconnect; + + /// + /// Connects to an endpoint. + /// + public async Task BeginConnect( + Uri endpointUrl, + EventHandler callback, + object state, + CancellationToken cts) + { + if (endpointUrl == null) throw new ArgumentNullException(nameof(endpointUrl)); + if (m_socket != null) throw new InvalidOperationException("The socket is already connected."); + + SocketError error = SocketError.NotInitialized; + CallbackAction doCallback = (SocketError socketError) => callback(this, new TcpMessageSocketConnectAsyncEventArgs(socketError) { UserToken = state }); + IPAddress[] hostAdresses; + try + { + // Get DNS host information + hostAdresses = await Dns.GetHostAddressesAsync(endpointUrl.DnsSafeHost).ConfigureAwait(false); + } + catch (SocketException e) + { + Utils.Trace("Name resolution failed for: {0} Error: {1}", endpointUrl.DnsSafeHost, e.Message); + error = e.SocketErrorCode; + goto ErrorExit; + } + + // Get IPv4 and IPv6 address + IPAddress[] addressesV4 = hostAdresses.Where(a => a.AddressFamily == AddressFamily.InterNetwork).ToArray(); + IPAddress[] addressesV6 = hostAdresses.Where(a => a.AddressFamily == AddressFamily.InterNetworkV6).ToArray(); + + // Get port + int port = endpointUrl.Port; + if (port <= 0 || port > UInt16.MaxValue) + { + port = Utils.UaTcpDefaultPort; + } + + int arrayV4Index = 0; + int arrayV6Index = 0; + bool moreAddresses; + m_socketResponses = 0; + + m_tcs = new TaskCompletionSource(); + do + { + error = SocketError.NotInitialized; + + lock (m_socketLock) + { + if (addressesV6.Length > arrayV6Index) + { + m_socketResponses++; + } + + if (addressesV4.Length > arrayV4Index) + { + m_socketResponses++; + } + + if (m_tcs.Task.IsCompleted) + { + m_tcs = new TaskCompletionSource(); + } + } + + if (addressesV6.Length > arrayV6Index && m_socket == null) + { + if (BeginConnect(addressesV6[arrayV6Index], AddressFamily.InterNetworkV6, port, doCallback) == SocketError.Success) + { + return true; + } + arrayV6Index++; + } + + if (addressesV4.Length > arrayV4Index && m_socket == null) + { + if (BeginConnect(addressesV4[arrayV4Index], AddressFamily.InterNetwork, port, doCallback) == SocketError.Success) + { + return true; + } + arrayV4Index++; + } + + + moreAddresses = addressesV6.Length > arrayV6Index || addressesV4.Length > arrayV4Index; + if (moreAddresses && !m_tcs.Task.IsCompleted) + { + await Task.Delay(DefaultRetryNextAddressTimeout, cts).ContinueWith(tsk => { + if (tsk.IsCanceled) + { + moreAddresses = false; + } + }).ConfigureAwait(false); + } + + if (!moreAddresses || m_tcs.Task.IsCompleted) + { + error = await m_tcs.Task.ConfigureAwait(false); + switch (error) + { + case SocketError.Success: + return true; + case SocketError.ConnectionRefused: + break; + default: + goto ErrorExit; + } + } + } while (moreAddresses); + + ErrorExit: + doCallback(error); + + return false; + } + + /// + /// Forcefully closes the socket. + /// + public void Close() + { + lock (m_socketLock) + { + m_closed = true; + + // Shutdown the socket. + if (m_socket != null) + { + try + { + if (m_socket.Connected) + { + m_socket.Shutdown(SocketShutdown.Both); + } + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error closing socket."); + } + finally + { + m_socket.Dispose(); + m_socket = null; + } + } + } + } + #endregion + + #region Read Handling + /// + /// Starts reading messages from the socket. + /// + public void ReadNextMessage() + { + lock (m_readLock) + { + do + { + // allocate a buffer large enough to a message chunk. + if (m_receiveBuffer == null) + { + m_receiveBuffer = m_bufferManager.TakeBuffer(m_receiveBufferSize, "ReadNextMessage"); + } + + // read the first 8 bytes of the message which contains the message size. + m_bytesReceived = 0; + m_bytesToReceive = TcpMessageLimits.MessageTypeAndSize; + m_incomingMessageSize = -1; + + do + { + ReadNextBlock(); + } while (m_readState == ReadState.ReadNextBlock); + } while (m_readState == ReadState.ReadNextMessage); + } + } + + /// + /// Changes the sink used to report reads. + /// + public void ChangeSink(IMessageSink sink) + { + lock (m_readLock) + { + m_sink = sink; + } + } + + /// + /// Handles a read complete event. + /// + private void OnReadComplete(object sender, SocketAsyncEventArgs e) + { + lock (m_readLock) + { + ServiceResult error = null; + + try + { + bool innerCall = m_readState == ReadState.ReadComplete; + error = DoReadComplete(e); + // to avoid recursion, inner calls of OnReadComplete return + // after processing the ReadComplete and let the outer call handle it + if (!innerCall && !ServiceResult.IsBad(error)) + { + while (ReadNext()) ; + } + } + catch (Exception ex) + { + Utils.Trace(ex, "Unexpected error during OnReadComplete,"); + error = ServiceResult.Create(ex, StatusCodes.BadTcpInternalError, ex.Message); + } + finally + { + e?.Dispose(); + } + + if (ServiceResult.IsBad(error)) + { + if (m_receiveBuffer != null) + { + m_bufferManager.ReturnBuffer(m_receiveBuffer, "OnReadComplete"); + m_receiveBuffer = null; + } + + m_sink?.OnReceiveError(this, error); + } + } + } + + /// + /// Handles a read complete event. + /// + private ServiceResult DoReadComplete(SocketAsyncEventArgs e) + { + // complete operation. + int bytesRead = e.BytesTransferred; + m_readState = ReadState.Ready; + + lock (m_socketLock) + { + BufferManager.UnlockBuffer(m_receiveBuffer); + } + + Utils.TraceDebug("Bytes read: {0}", bytesRead); + + if (bytesRead == 0) + { + // Remote end has closed the connection + + // free the empty receive buffer. + if (m_receiveBuffer != null) + { + m_bufferManager.ReturnBuffer(m_receiveBuffer, "DoReadComplete"); + m_receiveBuffer = null; + } + + m_readState = ReadState.Error; + return ServiceResult.Create(StatusCodes.BadConnectionClosed, "Remote side closed connection"); + } + + m_bytesReceived += bytesRead; + + // check if more data left to read. + if (m_bytesReceived < m_bytesToReceive) + { + m_readState = ReadState.ReadNextBlock; + return ServiceResult.Good; + } + + // start reading the message body. + if (m_incomingMessageSize < 0) + { + m_incomingMessageSize = BitConverter.ToInt32(m_receiveBuffer, 4); + + if (m_incomingMessageSize <= 0 || m_incomingMessageSize > m_receiveBufferSize) + { + Utils.Trace( + "BadTcpMessageTooLarge: BufferSize={0}; MessageSize={1}", + m_receiveBufferSize, + m_incomingMessageSize); + + m_readState = ReadState.Error; + + return ServiceResult.Create( + StatusCodes.BadTcpMessageTooLarge, + "Messages size {1} bytes is too large for buffer of size {0}.", + m_receiveBufferSize, + m_incomingMessageSize); + } + + // set up buffer for reading the message body. + m_bytesToReceive = m_incomingMessageSize; + + m_readState = ReadState.ReadNextBlock; + + return ServiceResult.Good; + } + + // notify the sink. + if (m_sink != null) + { + try + { + // send notification (implementor responsible for freeing buffer) on success. + ArraySegment messageChunk = new ArraySegment(m_receiveBuffer, 0, m_incomingMessageSize); + + // must allocate a new buffer for the next message. + m_receiveBuffer = null; + + m_sink.OnMessageReceived(this, messageChunk); + } + catch (Exception ex) + { + Utils.Trace(ex, "Unexpected error invoking OnMessageReceived callback."); + } + } + + // free the receive buffer. + if (m_receiveBuffer != null) + { + m_bufferManager.ReturnBuffer(m_receiveBuffer, "DoReadComplete"); + m_receiveBuffer = null; + } + + // start receiving next message. + m_readState = ReadState.ReadNextMessage; + + return ServiceResult.Good; + } + + /// + /// Reads the next block of data from the socket. + /// + private void ReadNextBlock() + { + Socket socket = null; + + // check if already closed. + lock (m_socketLock) + { + if (m_socket == null) + { + if (m_receiveBuffer != null) + { + m_bufferManager.ReturnBuffer(m_receiveBuffer, "ReadNextBlock"); + m_receiveBuffer = null; + } + m_readState = ReadState.NotConnected; + return; + } + + socket = m_socket; + + // avoid stale ServiceException when socket is disconnected + if (!socket.Connected) + { + m_readState = ReadState.NotConnected; + return; + } + } + + BufferManager.LockBuffer(m_receiveBuffer); + + var args = new SocketAsyncEventArgs(); + try + { + m_readState = ReadState.Receive; + args.SetBuffer(m_receiveBuffer, m_bytesReceived, m_bytesToReceive - m_bytesReceived); + args.Completed += m_readComplete; + if (!socket.ReceiveAsync(args)) + { + // I/O completed synchronously + if (args.SocketError != SocketError.Success) + { + throw ServiceResultException.Create(StatusCodes.BadTcpInternalError, args.SocketError.ToString()); + } + // set state to inner complete + m_readState = ReadState.ReadComplete; + m_readComplete(null, args); + } + } + catch (ServiceResultException) + { + args?.Dispose(); + BufferManager.UnlockBuffer(m_receiveBuffer); + throw; + } + catch (Exception ex) + { + args?.Dispose(); + BufferManager.UnlockBuffer(m_receiveBuffer); + throw ServiceResultException.Create(StatusCodes.BadTcpInternalError, ex, "BeginReceive failed."); + } + } + + /// + /// Helper to read read next block or message based on current state. + /// + private bool ReadNext() + { + bool result = true; + switch (m_readState) + { + case ReadState.ReadNextBlock: ReadNextBlock(); break; + case ReadState.ReadNextMessage: ReadNextMessage(); break; + default: result = false; break; + } + return result; + } + + /// + /// delegate to handle internal callbacks with socket error + /// + private delegate void CallbackAction(SocketError error); + + /// + /// Try to connect to endpoint and do callback if connected successfully + /// + /// Endpoint address + /// Endpoint address family + /// Endpoint port + /// Callback that must be executed if the connection would be established + private SocketError BeginConnect(IPAddress address, AddressFamily addressFamily, int port, CallbackAction callback) + { + var socket = new Socket(addressFamily, SocketType.Stream, ProtocolType.Tcp); + var args = new SocketAsyncEventArgs() { + UserToken = callback, + RemoteEndPoint = new IPEndPoint(address, port), + }; + args.Completed += OnSocketConnected; + if (!socket.ConnectAsync(args)) + { + // I/O completed synchronously + OnSocketConnected(socket, args); + return args.SocketError; + } + return SocketError.InProgress; + } + + /// + /// Handle socket connection event + /// + /// + /// + private void OnSocketConnected(object sender, SocketAsyncEventArgs args) + { + var socket = sender as Socket; + bool success = false; + lock (m_socketLock) + { + m_socketResponses--; + if (!m_closed && m_socket == null) + { + if (args.SocketError == SocketError.Success) + { + m_socket = socket; + success = true; + m_tcs.SetResult(args.SocketError); + } + else if (m_socketResponses == 0) + { + m_tcs.SetResult(args.SocketError); + } + } + } + + if (success) + { + ((CallbackAction)args.UserToken)(args.SocketError); + } + else + { + try + { + if (socket.Connected) + { + socket.Shutdown(SocketShutdown.Both); + } + } + catch + { + // socket.Shutdown may throw but can be ignored + } + finally + { + socket.Dispose(); + } + } + args.Dispose(); + } + #endregion + + #region Write Handling + /// + /// Sends a buffer. + /// + public bool SendAsync(IMessageSocketAsyncEventArgs args) + { + TcpMessageSocketAsyncEventArgs eventArgs = args as TcpMessageSocketAsyncEventArgs; + if (eventArgs == null) + { + throw new ArgumentNullException(nameof(args)); + } + if (m_socket == null) + { + throw new InvalidOperationException("The socket is not connected."); + } + eventArgs.Args.SocketError = SocketError.NotConnected; + return m_socket.SendAsync(eventArgs.Args); + } + #endregion + + #region Event factory + /// + /// Create event args for TcpMessageSocket. + /// + public IMessageSocketAsyncEventArgs MessageSocketEventArgs() + { + return new TcpMessageSocketAsyncEventArgs(); + } + #endregion + + #region Private Fields + private IMessageSink m_sink; + private BufferManager m_bufferManager; + private readonly int m_receiveBufferSize; + private readonly EventHandler m_readComplete; + + private readonly object m_socketLock = new object(); + private Socket m_socket; + private bool m_closed; + private TaskCompletionSource m_tcs; + private int m_socketResponses; + + /// + /// States for the nested read handler. + /// + private enum ReadState + { + Ready = 0, + ReadNextMessage = 1, + ReadNextBlock = 2, + Receive = 3, + ReadComplete = 4, + NotConnected = 5, + Error = 0xff + }; + private readonly object m_readLock = new object(); + private byte[] m_receiveBuffer; + private int m_bytesReceived; + private int m_bytesToReceive; + private int m_incomingMessageSize; + private ReadState m_readState; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageType.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageType.cs new file mode 100644 index 00000000..bf73e414 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageType.cs @@ -0,0 +1,286 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua.Bindings +{ + /// + /// Defines constants for the UA TCP message identifiers. + /// + public static class TcpMessageType + { + /// + /// A final chunk for a message. + /// + public const uint Final = 0x46000000; + + /// + /// An intermediate chunk for a message. + /// + public const uint Intermediate = 0x43000000; + + /// + /// A final chunk for a message which indicates that the message has been aborted by the sender. + /// + public const uint Abort = 0x41000000; + + /// + /// A mask used to select the message type portion of the message id. + /// + public const uint MessageTypeMask = 0x00FFFFFF; + + /// + /// A mask used to select the chunk type portion of the message id. + /// + public const uint ChunkTypeMask = 0xFF000000; + + /// + /// A chunk for a generic message. + /// + public const uint MessageIntermediate = Message | Intermediate; + + /// + /// A chunk for a generic message. + /// + public const uint MessageFinal = Message | Final; + + /// + /// A chunk for a generic message. + /// + public const uint Message = 0x0047534D; + + /// + /// A chunk for an OpenSecureChannel message. + /// + public const uint Open = 0x004E504F; + + /// + /// A chunk for a CloseSecureChannel message. + /// + public const uint Close = 0x004F4C43; + + /// + /// A hello message. + /// + public const uint Hello = 0x464C4548; + + /// + /// A reverse hello message. + /// + public const uint ReverseHello = 0x46454852; + + /// + /// An acknowledge message. + /// + public const uint Acknowledge = 0x464B4341; + + /// + /// An error message. + /// + public const uint Error = 0x46525245; + + /// + /// Returns true if the message type is equal to the expected type. + /// + public static bool IsType(uint actualType, uint expectedType) + { + return ((actualType & MessageTypeMask) == expectedType); + } + + /// + /// Returns true if the message type indicates it is a final chunk. + /// + public static bool IsFinal(uint messageType) + { + return ((messageType & ChunkTypeMask) == Final); + } + + /// + /// Returns true if the message type indicates it is a abort chunk. + /// + public static bool IsAbort(uint messageType) + { + return ((messageType & ChunkTypeMask) == Abort); + } + + /// + /// Returns true if the message type is recognized. + /// + public static bool IsValid(uint messageType) + { + switch (messageType) + { + case Hello: + case ReverseHello: + case Acknowledge: + case Error: + { + return true; + } + } + + if (((messageType & ChunkTypeMask) != Final) && ((messageType & ChunkTypeMask) != Intermediate)) + { + return false; + } + + switch (messageType & MessageTypeMask) + { + case Message: + case Open: + case Close: + { + break; + } + + default: + { + return false; + } + } + + return true; + } + } + + /// + /// Defines constants for the UA TCP message identifiers. + /// + public static class TcpMessageLimits + { + /// + /// The size of the message type and size prefix in each message. + /// + public const int MessageTypeAndSize = 8; + + /// + /// The minimum send or receive buffer size. + /// + public const int MinBufferSize = 8192; + + /// + /// Minimum message body size + /// + public const int MinBodySize = 1; + + /// + /// The minimum send or receive buffer size. + /// + public const int MaxBufferSize = 8192 * 18; + + /// + /// The maximum length for the reason in an error message. + /// + public const int MaxErrorReasonLength = 4096; + + /// + /// The maximum length for the endpoint url in the hello message. + /// + public const int MaxEndpointUrlLength = 4096; + + /// + /// The maximum length for an x509 certificate. + /// + public const int MaxCertificateSize = 7500; + + /// + /// The maximum length for an a security policy uri. + /// + public const int MaxSecurityPolicyUriSize = 256; + + /// + /// The length of the base message header. + /// + public const int BaseHeaderSize = 12; + + /// + /// The length of the message header use with symmetric cryptography. + /// + public const int SymmetricHeaderSize = 16; + + /// + /// The length of the sequence message header. + /// + public const int SequenceHeaderSize = 8; + + /// + /// The length a X509 certificate thumbprint. + /// + public const int CertificateThumbprintSize = 20; + + /// + /// The number of bytes required to specify the length of an encoding string or bytestring. + /// + public const int StringLengthSize = 4; + + /// + /// Sequence numbers may only rollover if they are larger than this value. + /// + public const uint MinSequenceNumber = UInt32.MaxValue - 1024; + + /// + /// The first sequence number after a rollover must be less than this value. + /// + public const uint MaxRolloverSequenceNumber = 1024; + + /// + /// The default buffer size to use for communication. + /// + public const int DefaultMaxBufferSize = 65535; + + /// + /// The default maximum message size. + /// + public const int DefaultMaxMessageSize = 16 * 65535; + + /// + /// How long a connection will remain in the server after it goes into a faulted state. + /// + public const int DefaultChannelLifetime = 60000; + + /// + /// How long a security token lasts before it needs to be renewed. + /// + public const int DefaultSecurityTokenLifeTime = 3600000; + + /// + /// The minimum lifetime for a security token lasts before it needs to be renewed. + /// + public const int MinSecurityTokenLifeTime = 60000; + + /// + /// The minimum time interval between reconnect attempts. + /// + public const int MinTimeBetweenReconnects = 0; + + /// + /// The maximum time interval between reconnect attempts. + /// + public const int MaxTimeBetweenReconnects = 120000; + + /// + /// The fraction of the lifetime to wait before renewing a token. + /// + public const double TokenRenewalPeriod = 0.75; + + /// + /// The fraction of the lifetime to wait before forcing the activation of the renewed token. + /// + public const double TokenActivationPeriod = 0.95; + + /// + /// The certificates that have the key size larger than KeySizeExtraPadding need an extra padding byte in the transport message + /// + public const int KeySizeExtraPadding = 2048; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpReverseConnectChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpReverseConnectChannel.cs new file mode 100644 index 00000000..3694448a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpReverseConnectChannel.cs @@ -0,0 +1,139 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Manages the reverse connect client UA TCP channel. + /// + public class TcpReverseConnectChannel : TcpListenerChannel + { + #region Constructors + /// + /// Attaches the object to an existing socket. + /// + public TcpReverseConnectChannel( + string contextId, + ITcpChannelListener listener, + BufferManager bufferManager, + ChannelQuotas quotas, + EndpointDescriptionCollection endpoints) + : + base(contextId, listener, bufferManager, quotas, null, null, endpoints) + { + } + #endregion + + #region Public Methods + /// + /// The channel name used in trace output. + /// + public override string ChannelName => "TCPREVERSECONNECTCHANNEL"; + #endregion + + #region Socket Event Handlers + /// + /// Processes an incoming message. + /// + /// True if the implementor takes ownership of the buffer. + protected override bool HandleIncomingMessage(uint messageType, ArraySegment messageChunk) + { + lock (DataLock) + { + SetResponseRequired(true); + + try + { + // check for reverse hello. + if (messageType == TcpMessageType.ReverseHello) + { + Utils.Trace("Channel {0}: ProcessReverseHelloMessage", ChannelId); + return ProcessReverseHelloMessage(messageType, messageChunk); + } + + // invalid message type - must close socket and reconnect. + ForceChannelFault( + StatusCodes.BadTcpMessageTypeInvalid, + "The reverse connect handler does not recognize the message type: {0:X8}.", + messageType); + + return false; + } + finally + { + SetResponseRequired(false); + } + } + } + #endregion + + #region Connect/Reconnect Sequence + /// + /// Processes a ReverseHello message from the server. + /// + private bool ProcessReverseHelloMessage(uint messageType, ArraySegment messageChunk) + { + // validate the channel state. + if (State != TcpChannelState.Connecting) + { + ForceChannelFault(StatusCodes.BadTcpMessageTypeInvalid, "Client sent an unexpected ReverseHello message."); + return false; + } + + try + { + MemoryStream istrm = new MemoryStream(messageChunk.Array, messageChunk.Offset, messageChunk.Count, false); + BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext); + istrm.Seek(TcpMessageLimits.MessageTypeAndSize, SeekOrigin.Current); + + // read peer information. + string serverUri = decoder.ReadString(null); + string endpointUrlString = decoder.ReadString(null); + Uri endpointUri = new Uri(endpointUrlString); + + State = TcpChannelState.Connecting; + + Task t = Task.Run(async () => { + try + { + if (false == await Listener.TransferListenerChannel(Id, serverUri, endpointUri)) + { + SetResponseRequired(true); + ForceChannelFault(StatusCodes.BadTcpMessageTypeInvalid, "The reverse connection was rejected by the client."); + } + else + { + // Socket is now owned by client, don't clean up + CleanupTimer(); + } + } + catch (Exception) + { + SetResponseRequired(true); + ForceChannelFault(StatusCodes.BadInternalError, "Internal error approving the reverse connection."); + } + }); + } + catch (Exception e) + { + ForceChannelFault(e, StatusCodes.BadTcpInternalError, "Unexpected error while processing a ReverseHello message."); + } + + return false; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpServerChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpServerChannel.cs new file mode 100644 index 00000000..4de31d8b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpServerChannel.cs @@ -0,0 +1,964 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Manages the server side of a UA TCP channel. + /// + public class TcpServerChannel : TcpListenerChannel + { + #region Constructors + /// + /// Attaches the object to an existing socket. + /// + public TcpServerChannel( + string contextId, + ITcpChannelListener listener, + BufferManager bufferManager, + ChannelQuotas quotas, + X509Certificate2 serverCertificate, + EndpointDescriptionCollection endpoints) + : + this(contextId, listener, bufferManager, quotas, serverCertificate, null, endpoints) + { + } + + /// + /// Attaches the object to an existing socket. + /// + public TcpServerChannel( + string contextId, + ITcpChannelListener listener, + BufferManager bufferManager, + ChannelQuotas quotas, + X509Certificate2 serverCertificate, + X509Certificate2Collection serverCertificateChain, + EndpointDescriptionCollection endpoints) + : + base(contextId, listener, bufferManager, quotas, serverCertificate, serverCertificateChain, endpoints) + { + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_cleanupTimer")] + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + } + #endregion + + #region Public Methods + /// + /// The channel name used in trace output. + /// + public override string ChannelName => "TCPSERVERCHANNEL"; + + /// + /// The URL used to establish a connection to the client. + /// + public Uri ReverseConnectionUrl { get; internal set; } + + /// + /// Raised when the connection status changes. + /// + public event TcpChannelStatusEventHandler StatusChanged; + + private class ReverseConnectAsyncResult : AsyncResultBase + { + public ReverseConnectAsyncResult(AsyncCallback callback, object callbackData, int timeout) : + base(callback, callbackData, timeout) + { + } + public IMessageSocket Socket; + } + + /// + public IAsyncResult BeginReverseConnect(uint channelId, Uri endpointUrl, AsyncCallback callback, object callbackData, int timeout) + { + ChannelId = channelId; + ReverseConnectionUrl = endpointUrl; + SetEndpointUrl(Listener.EndpointUrl.ToString()); + + var ar = new ReverseConnectAsyncResult(callback, callbackData, timeout); + + var tcpMessageSocketFactory = new TcpMessageSocketFactory(); + ar.Socket = Socket = tcpMessageSocketFactory.Create(this, BufferManager, ReceiveBufferSize); + + var connectComplete = new EventHandler(OnReverseConnectComplete); + Task t = Task.Run(async () => await Socket.BeginConnect(endpointUrl, connectComplete, ar, ar.CancellationToken)); + + return ar; + } + + /// + /// + /// + public void EndReverseConnect(IAsyncResult result) + { + var ar = result as ReverseConnectAsyncResult; + + if (ar == null) + { + throw new ArgumentException(nameof(result)); + } + + if (!ar.WaitForComplete()) + { + throw new TimeoutException(); + } + } + + /// + /// Reverse client is connected, send reverse hello message. + /// + private void OnReverseConnectComplete(object sender, IMessageSocketAsyncEventArgs result) + { + var ar = (ReverseConnectAsyncResult)result.UserToken; + + if (ar == null || m_pendingReverseHello != null) + { + return; + } + + if (result.IsSocketError) + { + ar.Exception = new ServiceResultException(StatusCodes.BadNotConnected, result.SocketErrorString); + ar.OperationCompleted(); + return; + } + + byte[] buffer = BufferManager.TakeBuffer(SendBufferSize, "OnReverseConnectConnectComplete"); + + try + { + // start reading messages. + ar.Socket.ReadNextMessage(); + + // send reverse hello message. + BinaryEncoder encoder = new BinaryEncoder(buffer, 0, SendBufferSize, Quotas.MessageContext); + encoder.WriteUInt32(null, TcpMessageType.ReverseHello); + encoder.WriteUInt32(null, 0); + encoder.WriteString(null, EndpointDescription.Server.ApplicationUri); + encoder.WriteString(null, EndpointDescription.EndpointUrl); + int size = encoder.Close(); + UpdateMessageSize(buffer, 0, size); + + // set state to waiting for hello. + State = TcpChannelState.Connecting; + m_pendingReverseHello = ar; + + BeginWriteMessage(new ArraySegment(buffer, 0, size), null); + buffer = null; + } + catch (Exception e) + { + ar.Exception = e; + ar.OperationCompleted(); + } + finally + { + if (buffer != null) + { + BufferManager.ReturnBuffer(buffer, "OnReverseConnectComplete"); + } + } + } + + /// + /// Handles a reconnect request. + /// + public override void Reconnect( + IMessageSocket socket, + uint requestId, + uint sequenceNumber, + X509Certificate2 clientCertificate, + ChannelToken token, + OpenSecureChannelRequest request) + { + if (socket == null) throw new ArgumentNullException(nameof(socket)); + + lock (DataLock) + { + // make sure the same client certificate is being used. + CompareCertificates(ClientCertificate, clientCertificate, false); + + // check for replay attacks. + if (!VerifySequenceNumber(sequenceNumber, "Reconnect")) + { + throw new ServiceResultException(StatusCodes.BadSequenceNumberInvalid); + } + + try + { + // replace the socket. + Socket = socket; + Utils.Trace("{0} SOCKET RECONNECTED: {1:X8}, ChannelId={2}", ChannelName, Socket.Handle, ChannelId); + Socket.ChangeSink(this); + + // need to assign a new token id. + token.TokenId = GetNewTokenId(); + + // put channel back in open state. + ActivateToken(token); + State = TcpChannelState.Open; + + // no need to cleanup. + CleanupTimer(); + + // send response. + SendOpenSecureChannelResponse(requestId, token, request); + + // send any queue responses. + ResetQueuedResponses(OnChannelReconnected); + } + catch (Exception e) + { + SendServiceFault(token, requestId, ServiceResult.Create(e, StatusCodes.BadTcpInternalError, "Unexpected error processing request.")); + } + } + } + #endregion + + #region Socket Event Handlers + /// + /// Processes an incoming message. + /// + /// True if the implementor takes ownership of the buffer. + protected override bool HandleIncomingMessage(uint messageType, ArraySegment messageChunk) + { + lock (DataLock) + { + SetResponseRequired(true); + + try + { + // process a response. + if (TcpMessageType.IsType(messageType, TcpMessageType.Message)) + { + //Utils.Trace("Channel {0}: ProcessRequestMessage", ChannelId); + return ProcessRequestMessage(messageType, messageChunk); + } + + // check for hello. + if (messageType == TcpMessageType.Hello) + { + //Utils.Trace("Channel {0}: ProcessHelloMessage", ChannelId); + return ProcessHelloMessage(messageChunk); + } + + // process open secure channel repsonse. + if (TcpMessageType.IsType(messageType, TcpMessageType.Open)) + { + //Utils.Trace("Channel {0}: ProcessOpenSecureChannelRequest", ChannelId); + return ProcessOpenSecureChannelRequest(messageType, messageChunk); + } + + // process close secure channel response. + if (TcpMessageType.IsType(messageType, TcpMessageType.Close)) + { + //Utils.Trace("Channel {0}: ProcessCloseSecureChannelRequest", ChannelId); + return ProcessCloseSecureChannelRequest(messageType, messageChunk); + } + + // invalid message type - must close socket and reconnect. + ForceChannelFault( + StatusCodes.BadTcpMessageTypeInvalid, + "The server does not recognize the message type: {0:X8}.", + messageType); + + return false; + } + finally + { + SetResponseRequired(false); + } + } + } + #endregion + + #region Error Handling Functions + + /// + /// Called to send queued responses after a reconnect. + /// + private void OnChannelReconnected(object state) + { + SortedDictionary responses = state as SortedDictionary; + + if (responses == null) + { + return; + } + + foreach (KeyValuePair response in responses) + { + try + { + SendResponse(response.Key, response.Value); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error re-sending request (ID={0}).", response.Key); + } + } + } + #endregion + + #region Connect/Reconnect Sequence + /// + /// Processes a Hello message from the client. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "protocolVersion")] + private bool ProcessHelloMessage(ArraySegment messageChunk) + { + // validate the channel state. + if (State != TcpChannelState.Connecting) + { + ForceChannelFault(StatusCodes.BadTcpMessageTypeInvalid, "Client sent an unexpected Hello message."); + return false; + } + + try + { + MemoryStream istrm = new MemoryStream(messageChunk.Array, messageChunk.Offset, messageChunk.Count, false); + BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext); + istrm.Seek(TcpMessageLimits.MessageTypeAndSize, SeekOrigin.Current); + + // read requested buffer sizes. + uint protocolVersion = decoder.ReadUInt32(null); + uint receiveBufferSize = decoder.ReadUInt32(null); + uint sendBufferSize = decoder.ReadUInt32(null); + uint maxMessageSize = decoder.ReadUInt32(null); + uint maxChunkCount = decoder.ReadUInt32(null); + + // read the endpoint url. + int length = decoder.ReadInt32(null); + + if (length > 0) + { + if (length > TcpMessageLimits.MaxEndpointUrlLength) + { + ForceChannelFault(StatusCodes.BadTcpEndpointUrlInvalid); + return false; + } + + byte[] endpointUrl = new byte[length]; + + for (int ii = 0; ii < endpointUrl.Length; ii++) + { + endpointUrl[ii] = decoder.ReadByte(null); + } + + if (!SetEndpointUrl(new UTF8Encoding().GetString(endpointUrl, 0, endpointUrl.Length))) + { + ForceChannelFault(StatusCodes.BadTcpEndpointUrlInvalid); + return false; + } + } + + decoder.Close(); + + // update receive buffer size. + if (receiveBufferSize < ReceiveBufferSize) + { + ReceiveBufferSize = (int)receiveBufferSize; + } + + if (ReceiveBufferSize < TcpMessageLimits.MinBufferSize) + { + ReceiveBufferSize = TcpMessageLimits.MinBufferSize; + } + + // update send buffer size. + if (sendBufferSize < SendBufferSize) + { + SendBufferSize = (int)sendBufferSize; + } + + if (SendBufferSize < TcpMessageLimits.MinBufferSize) + { + SendBufferSize = TcpMessageLimits.MinBufferSize; + } + + // update the max message size. + if (maxMessageSize > 0 && maxMessageSize < MaxResponseMessageSize) + { + MaxResponseMessageSize = (int)maxMessageSize; + } + + if (MaxResponseMessageSize < SendBufferSize) + { + MaxResponseMessageSize = SendBufferSize; + } + + // update the max chunk count. + if (maxChunkCount > 0 && maxChunkCount < MaxResponseChunkCount) + { + MaxResponseChunkCount = (int)maxChunkCount; + } + + // send acknowledge. + byte[] buffer = BufferManager.TakeBuffer(SendBufferSize, "ProcessHelloMessage"); + + try + { + MemoryStream ostrm = new MemoryStream(buffer, 0, SendBufferSize); + BinaryEncoder encoder = new BinaryEncoder(ostrm, Quotas.MessageContext); + + encoder.WriteUInt32(null, TcpMessageType.Acknowledge); + encoder.WriteUInt32(null, 0); + encoder.WriteUInt32(null, 0); // ProtocolVersion + encoder.WriteUInt32(null, (uint)ReceiveBufferSize); + encoder.WriteUInt32(null, (uint)SendBufferSize); + encoder.WriteUInt32(null, (uint)MaxRequestMessageSize); + encoder.WriteUInt32(null, (uint)MaxRequestChunkCount); + + int size = encoder.Close(); + UpdateMessageSize(buffer, 0, size); + + // now ready for the open or bind request. + State = TcpChannelState.Opening; + + BeginWriteMessage(new ArraySegment(buffer, 0, size), null); + buffer = null; + } + finally + { + if (buffer != null) + { + BufferManager.ReturnBuffer(buffer, "ProcessHelloMessage"); + } + } + } + catch (Exception e) + { + ForceChannelFault(e, StatusCodes.BadTcpInternalError, "Unexpected error while processing a Hello message."); + } + + return false; + } + + /// + /// Processes an OpenSecureChannel request message. + /// + private bool ProcessOpenSecureChannelRequest(uint messageType, ArraySegment messageChunk) + { + // validate the channel state. + if (State != TcpChannelState.Opening && State != TcpChannelState.Open) + { + ForceChannelFault(StatusCodes.BadTcpMessageTypeInvalid, "Client sent an unexpected OpenSecureChannel message."); + return false; + } + + // parse the security header. + uint channelId = 0; + X509Certificate2 clientCertificate = null; + uint requestId = 0; + uint sequenceNumber = 0; + + ArraySegment messageBody; + + try + { + messageBody = ReadAsymmetricMessage( + messageChunk, + ServerCertificate, + out channelId, + out clientCertificate, + out requestId, + out sequenceNumber); + + // check for replay attacks. + if (!VerifySequenceNumber(sequenceNumber, "ProcessOpenSecureChannelRequest")) + { + throw new ServiceResultException(StatusCodes.BadSequenceNumberInvalid); + } + } + catch (Exception e) + { + ServiceResultException innerException = e.InnerException as ServiceResultException; + + // If the certificate structre, signature and trust list checks pass, we return the other specific validation errors instead of BadSecurityChecksFailed + if (innerException != null) + { + if (innerException.StatusCode == StatusCodes.BadCertificateUntrusted || + innerException.StatusCode == StatusCodes.BadCertificateChainIncomplete || + innerException.StatusCode == StatusCodes.BadCertificateRevoked || + innerException.StatusCode == StatusCodes.BadCertificateInvalid || + (innerException.InnerResult != null && innerException.InnerResult.StatusCode == StatusCodes.BadCertificateUntrusted)) + { + ForceChannelFault(StatusCodes.BadSecurityChecksFailed, e.Message); + return false; + } + else if (innerException.StatusCode == StatusCodes.BadCertificateTimeInvalid || + innerException.StatusCode == StatusCodes.BadCertificateIssuerTimeInvalid || + innerException.StatusCode == StatusCodes.BadCertificateHostNameInvalid || + innerException.StatusCode == StatusCodes.BadCertificateUriInvalid || + innerException.StatusCode == StatusCodes.BadCertificateUseNotAllowed || + innerException.StatusCode == StatusCodes.BadCertificateIssuerUseNotAllowed || + innerException.StatusCode == StatusCodes.BadCertificateRevocationUnknown || + innerException.StatusCode == StatusCodes.BadCertificateIssuerRevocationUnknown || + innerException.StatusCode == StatusCodes.BadCertificateIssuerRevoked) + { + ForceChannelFault(innerException, innerException.StatusCode, e.Message); + return false; + } + } + + ForceChannelFault(e, StatusCodes.BadSecurityChecksFailed, "Could not verify security on OpenSecureChannel request."); + return false; + } + + BufferCollection chunksToProcess = null; + + try + { + bool firstCall = ClientCertificate == null; + + // must ensure the same certificate was used. + if (ClientCertificate != null) + { + CompareCertificates(ClientCertificate, clientCertificate, false); + } + else + { + ClientCertificate = clientCertificate; + } + + // check if it is necessary to wait for more chunks. + if (!TcpMessageType.IsFinal(messageType)) + { + SaveIntermediateChunk(requestId, messageBody); + return false; + } + + // create a new token. + ChannelToken token = CreateToken(); + + token.TokenId = GetNewTokenId(); + token.ServerNonce = CreateNonce(); + + // get the chunks to process. + chunksToProcess = GetSavedChunks(requestId, messageBody); + + OpenSecureChannelRequest request = (OpenSecureChannelRequest)BinaryDecoder.DecodeMessage( + new ArraySegmentStream(chunksToProcess), + typeof(OpenSecureChannelRequest), + Quotas.MessageContext); + + if (request == null) + { + throw ServiceResultException.Create(StatusCodes.BadStructureMissing, "Could not parse OpenSecureChannel request body."); + } + + // check the security mode. + if (request.SecurityMode != SecurityMode) + { + ReviseSecurityMode(firstCall, request.SecurityMode); + } + + // check the client nonce. + token.ClientNonce = request.ClientNonce; + + if (!ValidateNonce(token.ClientNonce)) + { + throw ServiceResultException.Create(StatusCodes.BadNonceInvalid, "Client nonce is not the correct length or not random enough."); + } + + // choose the lifetime. + int lifetime = (int)request.RequestedLifetime; + + if (lifetime < TcpMessageLimits.MinSecurityTokenLifeTime) + { + lifetime = TcpMessageLimits.MinSecurityTokenLifeTime; + } + + if (lifetime > 0 && lifetime < token.Lifetime) + { + token.Lifetime = lifetime; + } + + // check the request type. + SecurityTokenRequestType requestType = request.RequestType; + + if (requestType == SecurityTokenRequestType.Issue && State != TcpChannelState.Opening) + { + throw ServiceResultException.Create(StatusCodes.BadRequestTypeInvalid, "Cannot request a new token for an open channel."); + } + + if (requestType == SecurityTokenRequestType.Renew && State != TcpChannelState.Open) + { + // may be reconnecting to a dropped channel. + if (State == TcpChannelState.Opening) + { + // tell the listener to find the channel that can process the request. + Listener.ReconnectToExistingChannel( + Socket, + requestId, + sequenceNumber, + channelId, + ClientCertificate, + token, + request); + + Utils.Trace( + "{0} ReconnectToExistingChannel Socket={0:X8}, ChannelId={1}, TokenId={2}", + ChannelName, + (Socket != null) ? Socket.Handle : 0, + (CurrentToken != null) ? CurrentToken.ChannelId : 0, + (CurrentToken != null) ? CurrentToken.TokenId : 0); + + // close the channel. + ChannelClosed(); + + // nothing more to do. + return false; + } + + throw ServiceResultException.Create(StatusCodes.BadRequestTypeInvalid, "Cannot request to renew a token for a channel that has not been opened."); + } + + // check the channel id. + if (requestType == SecurityTokenRequestType.Renew && channelId != ChannelId) + { + throw ServiceResultException.Create(StatusCodes.BadTcpSecureChannelUnknown, "Do not recognize the secure channel id provided."); + } + + // log security information. + if (requestType == SecurityTokenRequestType.Issue) + { + Opc.Ua.Security.Audit.SecureChannelCreated( + m_ImplementationString, + Listener.EndpointUrl.ToString(), + Utils.Format("{0}", ChannelId), + EndpointDescription, + ClientCertificate, + ServerCertificate, + BinaryEncodingSupport.Required); + } + else + { + Opc.Ua.Security.Audit.SecureChannelRenewed( + m_ImplementationString, + Utils.Format("{0}", ChannelId)); + } + + if (requestType == SecurityTokenRequestType.Renew) + { + SetRenewedToken(token); + } + else + { + ActivateToken(token); + } + + State = TcpChannelState.Open; + + // send the response. + SendOpenSecureChannelResponse(requestId, token, request); + + // notify reverse + CompleteReverseHello(null); + + // notify any monitors. + NotifyMonitors(ServiceResult.Good, false); + + return false; + } + catch (Exception e) + { + SendServiceFault(requestId, ServiceResult.Create(e, StatusCodes.BadTcpInternalError, "Unexpected error processing OpenSecureChannel request.")); + CompleteReverseHello(e); + return false; + } + finally + { + if (chunksToProcess != null) + { + chunksToProcess.Release(BufferManager, "ProcessOpenSecureChannelRequest"); + } + } + } + + /// + protected override void NotifyMonitors(ServiceResult status, bool closed) + { + try + { + StatusChanged?.Invoke(this, status, closed); + } + catch (Exception e) + { + Utils.Trace(e, "Error raising StatusChanged event."); + } + } + + /// + protected override void CompleteReverseHello(Exception e) + { + var ar = m_pendingReverseHello; + if (ar != null && ar == Interlocked.CompareExchange(ref m_pendingReverseHello, null, ar)) + { + ar.Exception = e; + ar.OperationCompleted(); + } + } + + /// + /// Sends an OpenSecureChannel response. + /// + private void SendOpenSecureChannelResponse(uint requestId, ChannelToken token, OpenSecureChannelRequest request) + { + Utils.Trace("Channel {0}: SendOpenSecureChannelResponse()", ChannelId); + + OpenSecureChannelResponse response = new OpenSecureChannelResponse(); + + response.ResponseHeader.RequestHandle = request.RequestHeader.RequestHandle; + response.ResponseHeader.Timestamp = DateTime.UtcNow; + + response.SecurityToken.ChannelId = token.ChannelId; + response.SecurityToken.TokenId = token.TokenId; + response.SecurityToken.CreatedAt = token.CreatedAt; + response.SecurityToken.RevisedLifetime = (uint)token.Lifetime; + response.ServerNonce = token.ServerNonce; + + byte[] buffer = BinaryEncoder.EncodeMessage(response, Quotas.MessageContext); + + BufferCollection chunksToSend = WriteAsymmetricMessage( + TcpMessageType.Open, + requestId, + ServerCertificate, + ServerCertificateChain, + ClientCertificate, + new ArraySegment(buffer, 0, buffer.Length)); + + // write the message to the server. + try + { + BeginWriteMessage(chunksToSend, null); + chunksToSend = null; + } + finally + { + if (chunksToSend != null) + { + chunksToSend.Release(BufferManager, "SendOpenSecureChannelResponse"); + } + } + } + + /// + /// Processes an CloseSecureChannel request message. + /// + private bool ProcessCloseSecureChannelRequest(uint messageType, ArraySegment messageChunk) + { + // validate security on the message. + ChannelToken token = null; + uint requestId = 0; + uint sequenceNumber = 0; + + ArraySegment messageBody; + + try + { + messageBody = ReadSymmetricMessage(messageChunk, true, out token, out requestId, out sequenceNumber); + + // check for replay attacks. + if (!VerifySequenceNumber(sequenceNumber, "ProcessCloseSecureChannelRequest")) + { + throw new ServiceResultException(StatusCodes.BadSequenceNumberInvalid); + } + } + catch (Exception e) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, e, "Could not verify security on CloseSecureChannel request."); + } + + BufferCollection chunksToProcess = null; + + try + { + // check if it is necessary to wait for more chunks. + if (!TcpMessageType.IsFinal(messageType)) + { + SaveIntermediateChunk(requestId, messageBody); + return false; + } + + // get the chunks to process. + chunksToProcess = GetSavedChunks(requestId, messageBody); + + CloseSecureChannelRequest request = BinaryDecoder.DecodeMessage( + new ArraySegmentStream(chunksToProcess), + typeof(CloseSecureChannelRequest), + Quotas.MessageContext) as CloseSecureChannelRequest; + + if (request == null) + { + throw ServiceResultException.Create(StatusCodes.BadStructureMissing, "Could not parse CloseSecureChannel request body."); + } + + // send the response. + // SendCloseSecureChannelResponse(requestId, token, request); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error processing OpenSecureChannel request."); + } + finally + { + if (chunksToProcess != null) + { + chunksToProcess.Release(BufferManager, "ProcessCloseSecureChannelRequest"); + } + + Utils.Trace( + "{0} ProcessCloseSecureChannelRequest Socket={0:X8}, ChannelId={1}, TokenId={2}", + ChannelName, + (Socket != null) ? Socket.Handle : 0, + (CurrentToken != null) ? CurrentToken.ChannelId : 0, + (CurrentToken != null) ? CurrentToken.TokenId : 0); + + // close the channel. + ChannelClosed(); + } + + // return false would double free the buffer + return true; + } + + + /// + /// Processes a request message. + /// + private bool ProcessRequestMessage(uint messageType, ArraySegment messageChunk) + { + // validate the channel state. + if (State != TcpChannelState.Open) + { + ForceChannelFault(StatusCodes.BadTcpMessageTypeInvalid, "Client sent an unexpected request message."); + return false; + } + + // validate security on the message. + ChannelToken token = null; + uint requestId = 0; + uint sequenceNumber = 0; + + ArraySegment messageBody; + + try + { + messageBody = ReadSymmetricMessage(messageChunk, true, out token, out requestId, out sequenceNumber); + + // check for replay attacks. + if (!VerifySequenceNumber(sequenceNumber, "ProcessRequestMessage")) + { + throw new ServiceResultException(StatusCodes.BadSequenceNumberInvalid); + } + + if (token == CurrentToken && PreviousToken != null && !PreviousToken.Expired) + { + Utils.Trace("Server Revoked Token. ChannelId={1}, TokenId={0}", PreviousToken.TokenId, PreviousToken.ChannelId, DateTime.UtcNow); + PreviousToken.Lifetime = 0; + } + } + catch (Exception e) + { + Utils.Trace("Could not verify security on incoming request."); + ForceChannelFault(e, StatusCodes.BadSecurityChecksFailed, "Could not verify security on incoming request."); + return false; + } + + BufferCollection chunksToProcess = null; + + try + { + // check for an abort. + if (TcpMessageType.IsAbort(messageType)) + { + Utils.Trace("Request was aborted."); + chunksToProcess = GetSavedChunks(requestId, messageBody); + return true; + } + + // check if it is necessary to wait for more chunks. + if (!TcpMessageType.IsFinal(messageType)) + { + SaveIntermediateChunk(requestId, messageBody); + return true; + } + + Utils.Trace("Channel {0}: ProcessRequestMessage {1}", ChannelId, requestId); + + // get the chunks to process. + chunksToProcess = GetSavedChunks(requestId, messageBody); + + // decode the request. + IServiceRequest request = BinaryDecoder.DecodeMessage(new ArraySegmentStream(chunksToProcess), null, Quotas.MessageContext) as IServiceRequest; + + if (request == null) + { + SendServiceFault(token, requestId, ServiceResult.Create(StatusCodes.BadStructureMissing, "Could not parse request body.")); + return true; + } + + // ensure that only discovery requests come through unsecured. + if (DiscoveryOnly) + { + if (!(request is GetEndpointsRequest || request is FindServersRequest)) + { + SendServiceFault(token, requestId, ServiceResult.Create(StatusCodes.BadSecurityPolicyRejected, "Channel can only be used for discovery.")); + return true; + } + } + + // hand the request to the server. + RequestReceived?.Invoke(this, requestId, request); + + return true; + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error processing request."); + SendServiceFault(token, requestId, ServiceResult.Create(e, StatusCodes.BadTcpInternalError, "Unexpected error processing request.")); + return true; + } + finally + { + if (chunksToProcess != null) + { + chunksToProcess.Release(BufferManager, "ProcessRequestMessage"); + } + } + } + #endregion + + #region Private Fields + private string m_ImplementationString = ".NetStandard ServerChannel UA-TCP " + Utils.GetAssemblyBuildNumber(); + private ReverseConnectAsyncResult m_pendingReverseHello; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpServiceHost.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpServiceHost.cs new file mode 100644 index 00000000..ce79d0c2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpServiceHost.cs @@ -0,0 +1,145 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Creates a new Tcp service host. + /// + /// + /// This class can be used by a transport which + /// implements the + /// + public abstract class TcpServiceHost : ITransportListenerFactory + { + /// + public abstract string UriScheme { get; } + + /// + public abstract ITransportListener Create(); + + /// + /// + /// Create a new service host for UA TCP. + /// + public List CreateServiceHost( + ServerBase serverBase, + IDictionary hosts, + ApplicationConfiguration configuration, + IList baseAddresses, + ApplicationDescription serverDescription, + List securityPolicies, + X509Certificate2 instanceCertificate, + X509Certificate2Collection instanceCertificateChain) + { + // generate a unique host name. + string hostName = String.Empty; + + if (hosts.ContainsKey(hostName)) + { + hostName = "/Tcp"; + } + + if (hosts.ContainsKey(hostName)) + { + hostName += Utils.Format("/{0}", hosts.Count); + } + + // build list of uris. + List uris = new List(); + EndpointDescriptionCollection endpoints = new EndpointDescriptionCollection(); + + // create the endpoint configuration to use. + EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(configuration); + string computerName = Utils.GetHostName(); + + for (int ii = 0; ii < baseAddresses.Count; ii++) + { + // UA TCP and HTTPS endpoints support multiple policies. + if (!baseAddresses[ii].StartsWith(Utils.UriSchemeOpcTcp, StringComparison.Ordinal)) + { + continue; + } + + UriBuilder uri = new UriBuilder(baseAddresses[ii]); + + if (String.Compare(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase) == 0) + { + uri.Host = computerName; + } + + ITransportListener listener = this.Create(); + if (listener != null) + { + EndpointDescriptionCollection listenerEndpoints = new EndpointDescriptionCollection(); + uris.Add(uri.Uri); + + foreach (ServerSecurityPolicy policy in securityPolicies) + { + // create the endpoint description. + EndpointDescription description = new EndpointDescription(); + + description.EndpointUrl = uri.ToString(); + description.Server = serverDescription; + + description.SecurityMode = policy.SecurityMode; + description.SecurityPolicyUri = policy.SecurityPolicyUri; + description.SecurityLevel = ServerSecurityPolicy.CalculateSecurityLevel(policy.SecurityMode, policy.SecurityPolicyUri); + description.UserIdentityTokens = serverBase.GetUserTokenPolicies(configuration, description); + description.TransportProfileUri = Profiles.UaTcpTransport; + + bool requireEncryption = ServerBase.RequireEncryption(description); + + if (requireEncryption) + { + description.ServerCertificate = instanceCertificate.RawData; + + // check if complete chain should be sent. + if (configuration.SecurityConfiguration.SendCertificateChain && + instanceCertificateChain != null && + instanceCertificateChain.Count > 0) + { + List serverCertificateChain = new List(); + + for (int i = 0; i < instanceCertificateChain.Count; i++) + { + serverCertificateChain.AddRange(instanceCertificateChain[i].RawData); + } + + description.ServerCertificate = serverCertificateChain.ToArray(); + } + } + + listenerEndpoints.Add(description); + } + + serverBase.CreateServiceHostEndpoint(uri.Uri, listenerEndpoints, endpointConfiguration, listener, + configuration.CertificateValidator.GetChannelValidator() + ); + + endpoints.AddRange(listenerEndpoints); + } + else + { + Utils.Trace(Utils.TraceMasks.Error, "Failed to create endpoint {0} because the transport profile is unsupported.", uri); + } + } + + return endpoints; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpTransportListener.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpTransportListener.cs new file mode 100644 index 00000000..2d68f6b0 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/TcpTransportListener.cs @@ -0,0 +1,657 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Creates a new TcpTransportListener with ITransportListener interface. + /// + public class TcpTransportListenerFactory : TcpServiceHost + { + /// + public override string UriScheme => Utils.UriSchemeOpcTcp; + + /// + public override ITransportListener Create() + { + return new TcpTransportListener(); + } + } + + /// + /// Manages the transport for a UA TCP server. + /// + public class TcpTransportListener : ITransportListener, ITcpChannelListener + { + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_simulator")] + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + lock (m_lock) + { + if (m_listeningSocket != null) + { + Utils.SilentDispose(m_listeningSocket); + m_listeningSocket = null; + } + + if (m_listeningSocketIPv6 != null) + { + Utils.SilentDispose(m_listeningSocketIPv6); + m_listeningSocketIPv6 = null; + } + + if (m_channels != null) + { + foreach (var channel in m_channels.Values) + { + Utils.SilentDispose(channel); + } + m_channels = null; + } + } + } + } + #endregion + + #region ITransportListener Members + /// + /// The URI scheme handled by the listener. + /// + public string UriScheme => Utils.UriSchemeOpcTcp; + + /// + /// Opens the listener and starts accepting connection. + /// + /// The base address. + /// The settings to use when creating the listener. + /// The callback to use when requests arrive via the channel. + /// Thrown if any parameter is null. + /// Thrown if any communication error occurs. + public void Open( + Uri baseAddress, + TransportListenerSettings settings, + ITransportListenerCallback callback) + { + // assign a unique guid to the listener. + m_listenerId = Guid.NewGuid().ToString(); + + m_uri = baseAddress; + m_descriptions = settings.Descriptions; + EndpointConfiguration configuration = settings.Configuration; + + // initialize the quotas. + m_quotas = new ChannelQuotas(); + m_quotas.MessageContext = new ServiceMessageContext(); + if (configuration != null) + { + m_quotas.MaxBufferSize = configuration.MaxBufferSize; + m_quotas.MaxMessageSize = configuration.MaxMessageSize; + m_quotas.ChannelLifetime = configuration.ChannelLifetime; + m_quotas.SecurityTokenLifetime = configuration.SecurityTokenLifetime; + m_quotas.MessageContext.MaxArrayLength = configuration.MaxArrayLength; + m_quotas.MessageContext.MaxByteStringLength = configuration.MaxByteStringLength; + m_quotas.MessageContext.MaxMessageSize = configuration.MaxMessageSize; + m_quotas.MessageContext.MaxStringLength = configuration.MaxStringLength; + } + m_quotas.MessageContext.NamespaceUris = settings.NamespaceUris; + m_quotas.MessageContext.ServerUris = new StringTable(); + m_quotas.MessageContext.Factory = settings.Factory; + + m_quotas.CertificateValidator = settings.CertificateValidator; + + // save the server certificate. + m_serverCertificate = settings.ServerCertificate; + m_serverCertificateChain = settings.ServerCertificateChain; + + m_bufferManager = new BufferManager("Server", (int)Int32.MaxValue, m_quotas.MaxBufferSize); + m_channels = new Dictionary(); + m_reverseConnectListener = settings.ReverseConnectListener; + + // save the callback to the server. + m_callback = callback; + + // start the listener. + Start(); + } + + /// + /// Closes the listener and stops accepting connection. + /// + /// Thrown if any communication error occurs. + public void Close() + { + Stop(); + } + #endregion + + #region ITcpChannelListener + /// + /// Gets the URL for the listener's endpoint. + /// + /// The URL for the listener's endpoint. + public Uri EndpointUrl => m_uri; + + /// + /// Binds a new socket to an existing channel. + /// + public bool ReconnectToExistingChannel( + IMessageSocket socket, + uint requestId, + uint sequenceNumber, + uint channelId, + X509Certificate2 clientCertificate, + ChannelToken token, + OpenSecureChannelRequest request) + { + TcpListenerChannel channel = null; + + lock (m_lock) + { + if (!m_channels.TryGetValue(channelId, out channel)) + { + throw ServiceResultException.Create(StatusCodes.BadTcpSecureChannelUnknown, "Could not find secure channel referenced in the OpenSecureChannel request."); + } + } + + channel.Reconnect(socket, requestId, sequenceNumber, clientCertificate, token, request); + + Utils.Trace("Channel {0} reconnected", channelId); + return true; + } + + /// + /// Called when a channel closes. + /// + public void ChannelClosed(uint channelId) + { + lock (m_lock) + { + if (m_channels != null) + { + m_channels.Remove(channelId); + } + } + + Utils.Trace("Channel {0} closed", channelId); + } + + /// + /// Raised when a new connection is waiting for a client. + /// + public event ConnectionWaitingHandlerAsync ConnectionWaiting; + + /// + /// Raised when a monitored connection's status changed. + /// + public event EventHandler ConnectionStatusChanged; + + /// + public void CreateReverseConnection(Uri url, int timeout) + { + TcpServerChannel channel = new TcpServerChannel( + m_listenerId, + this, + m_bufferManager, + m_quotas, + m_serverCertificate, + m_descriptions); + + uint channelId = GetNextChannelId(); + channel.StatusChanged += Channel_StatusChanged; + channel.BeginReverseConnect(channelId, url, OnReverseHelloComplete, channel, Math.Min(timeout, m_quotas.ChannelLifetime)); + } + + private void Channel_StatusChanged(TcpServerChannel channel, ServiceResult status, bool closed) + { + ConnectionStatusChanged?.Invoke(this, new ConnectionStatusEventArgs(channel.ReverseConnectionUrl, status, closed)); + } + + /// + /// Indicate that the reverse hello connection attempt completed. + /// + /// + /// The server tried to connect to a client using a reverse hello message. + /// + private void OnReverseHelloComplete(IAsyncResult result) + { + var channel = (TcpServerChannel)result.AsyncState; + try + { + channel.EndReverseConnect(result); + + lock (m_lock) + { + m_channels.Add(channel.Id, channel); + } + + if (m_callback != null) + { + channel.SetRequestReceivedCallback(new TcpChannelRequestEventHandler(OnRequestReceived)); + } + } + catch (Exception e) + { + ConnectionStatusChanged?.Invoke(this, new ConnectionStatusEventArgs(channel.ReverseConnectionUrl, new ServiceResult(e), true)); + } + } + #endregion + + #region Public Methods + /// + /// Starts listening at the specified port. + /// + public void Start() + { + lock (m_lock) + { + // ensure a valid port. + int port = m_uri.Port; + + if (port <= 0 || port > UInt16.MaxValue) + { + port = Utils.UaTcpDefaultPort; + } + + // create IPv4 socket. + try + { + IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, port); + m_listeningSocket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + SocketAsyncEventArgs args = new SocketAsyncEventArgs(); + args.Completed += OnAccept; + args.UserToken = m_listeningSocket; + m_listeningSocket.Bind(endpoint); + m_listeningSocket.Listen(Int32.MaxValue); + if (!m_listeningSocket.AcceptAsync(args)) + { + OnAccept(null, args); + } + } + catch (Exception ex) + { + // no IPv4 support. + if (m_listeningSocket != null) + { + m_listeningSocket.Dispose(); + m_listeningSocket = null; + } + Utils.Trace("failed to create IPv4 listening socket: " + ex.Message); + } + + // create IPv6 socket + try + { + IPEndPoint endpointIPv6 = new IPEndPoint(IPAddress.IPv6Any, port); + m_listeningSocketIPv6 = new Socket(endpointIPv6.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + SocketAsyncEventArgs args = new SocketAsyncEventArgs(); + args.Completed += OnAccept; + args.UserToken = m_listeningSocketIPv6; + m_listeningSocketIPv6.Bind(endpointIPv6); + m_listeningSocketIPv6.Listen(Int32.MaxValue); + if (!m_listeningSocketIPv6.AcceptAsync(args)) + { + OnAccept(null, args); + } + } + catch (Exception ex) + { + // no IPv6 support + if (m_listeningSocketIPv6 != null) + { + m_listeningSocketIPv6.Dispose(); + m_listeningSocketIPv6 = null; + } + Utils.Trace("failed to create IPv6 listening socket: " + ex.Message); + } + + if (m_listeningSocketIPv6 == null && m_listeningSocket == null) + { + throw ServiceResultException.Create( + StatusCodes.BadNoCommunication, + "Failed to establish tcp listener sockets for Ipv4 and IPv6."); + } + } + } + + /// + /// Stops listening. + /// + public void Stop() + { + lock (m_lock) + { + ConnectionWaiting = null; + ConnectionStatusChanged = null; + + if (m_listeningSocket != null) + { + m_listeningSocket.Dispose(); + m_listeningSocket = null; + } + + if (m_listeningSocketIPv6 != null) + { + m_listeningSocketIPv6.Dispose(); + m_listeningSocketIPv6 = null; + } + } + } + + /// + /// Transfers the channel to a waiting connection. + /// + /// TRUE if the channel should be kept open; FALSE otherwise. + public async Task TransferListenerChannel( + uint channelId, + string serverUri, + Uri endpointUrl) + { + bool accepted = false; + TcpListenerChannel channel = null; + lock (m_lock) + { + if (!m_channels.TryGetValue(channelId, out channel)) + { + throw ServiceResultException.Create(StatusCodes.BadTcpSecureChannelUnknown, "Could not find secure channel request."); + } + } + + // notify the application. + if (ConnectionWaiting != null) + { + var args = new TcpConnectionWaitingEventArgs(serverUri, endpointUrl, channel.Socket); + await ConnectionWaiting(this, args); + accepted = args.Accepted; + } + + if (accepted) + { + lock (m_lock) + { + // remove it so it does not get cleaned up as an inactive connection. + m_channels.Remove(channelId); + } + } + + return accepted; + } + + /// + /// Called when a UpdateCertificate event occured. + /// + public void CertificateUpdate( + ICertificateValidator validator, + X509Certificate2 serverCertificate, + X509Certificate2Collection serverCertificateChain) + { + m_quotas.CertificateValidator = validator; + m_serverCertificate = serverCertificate; + m_serverCertificateChain = serverCertificateChain; + foreach (var description in m_descriptions) + { + if (description.ServerCertificate != null) + { + description.ServerCertificate = serverCertificate.RawData; + } + } + } + #endregion + + #region Socket Event Handler + /// + /// Handles a new connection. + /// + private void OnAccept(object sender, SocketAsyncEventArgs e) + { + TcpListenerChannel channel = null; + bool repeatAccept = false; + do + { + repeatAccept = false; + lock (m_lock) + { + Socket listeningSocket = e.UserToken as Socket; + + if (listeningSocket == null) + { + Utils.Trace("OnAccept: Listensocket was null."); + e.Dispose(); + return; + } + + // check if the accept socket has been created. + if (e.AcceptSocket != null && e.SocketError == SocketError.Success) + { + try + { + if (m_reverseConnectListener) + { + // create the channel to manage incoming reverse connections. + channel = new TcpReverseConnectChannel( + m_listenerId, + this, + m_bufferManager, + m_quotas, + m_descriptions); + } + else + { + // create the channel to manage incoming connections. + channel = new TcpServerChannel( + m_listenerId, + this, + m_bufferManager, + m_quotas, + m_serverCertificate, + m_serverCertificateChain, + m_descriptions); + } + + if (m_callback != null) + { + channel.SetRequestReceivedCallback(new TcpChannelRequestEventHandler(OnRequestReceived)); + } + + // get channel id + uint channelId = GetNextChannelId(); + + // start accepting messages on the channel. + channel.Attach(channelId, e.AcceptSocket); + + // save the channel for shutdown and reconnects. + m_channels.Add(channelId, channel); + + } + catch (Exception ex) + { + Utils.Trace(ex, "Unexpected error accepting a new connection."); + } + } + + e.Dispose(); + + if (e.SocketError != SocketError.OperationAborted) + { + // go back and wait for the next connection. + try + { + e = new SocketAsyncEventArgs(); + e.Completed += OnAccept; + e.UserToken = listeningSocket; + if (!listeningSocket.AcceptAsync(e)) + { + repeatAccept = true; + } + } + catch (Exception ex) + { + Utils.Trace(ex, "Unexpected error listening for a new connection."); + } + } + } + } while (repeatAccept); + } + #endregion + + #region Private Methods + /// + /// Handles requests arriving from a channel. + /// + private void OnRequestReceived(TcpListenerChannel channel, uint requestId, IServiceRequest request) + { + try + { + if (m_callback != null) + { + IAsyncResult result = m_callback.BeginProcessRequest( + channel.GlobalChannelId, + channel.EndpointDescription, + request, + OnProcessRequestComplete, + new object[] { channel, requestId, request }); + } + } + catch (Exception e) + { + Utils.Trace(e, "TCPLISTENER - Unexpected error processing request."); + } + } + + private void OnProcessRequestComplete(IAsyncResult result) + { + try + { + object[] args = (object[])result.AsyncState; + + if (m_callback != null) + { + TcpServerChannel channel = (TcpServerChannel)args[0]; + IServiceResponse response = m_callback.EndProcessRequest(result); + channel.SendResponse((uint)args[1], response); + } + } + catch (Exception e) + { + Utils.Trace(e, "TCPLISTENER - Unexpected error sending result."); + } + } + + /// + /// Get the next channel id. Handles overflow. + /// + private uint GetNextChannelId() + { + lock (m_lock) + { + do + { + uint nextChannelId = ++m_lastChannelId; + if (!m_channels.ContainsKey(nextChannelId)) + { + return nextChannelId; + } + } while (true); + } + } + + /// + /// Sets the URI for the listener. + /// + private void SetUri(Uri baseAddress, string relativeAddress) + { + if (baseAddress == null) throw new ArgumentNullException(nameof(baseAddress)); + + // validate uri. + if (!baseAddress.IsAbsoluteUri) + { + throw new ArgumentException("Base address must be an absolute URI.", nameof(baseAddress)); + } + + if (String.Compare(baseAddress.Scheme, Utils.UriSchemeOpcTcp, StringComparison.OrdinalIgnoreCase) != 0) + { + throw new ArgumentException($"Invalid URI scheme: {baseAddress.Scheme}.", nameof(baseAddress)); + } + + m_uri = baseAddress; + + // append the relative path to the base address. + if (!String.IsNullOrEmpty(relativeAddress)) + { + if (!baseAddress.AbsolutePath.EndsWith("/", StringComparison.Ordinal)) + { + UriBuilder uriBuilder = new UriBuilder(baseAddress); + uriBuilder.Path = uriBuilder.Path + "/"; + baseAddress = uriBuilder.Uri; + } + + m_uri = new Uri(baseAddress, relativeAddress); + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private string m_listenerId; + private Uri m_uri; + private EndpointDescriptionCollection m_descriptions; + private BufferManager m_bufferManager; + private ChannelQuotas m_quotas; + private X509Certificate2 m_serverCertificate; + private X509Certificate2Collection m_serverCertificateChain; + private uint m_lastChannelId; + private Socket m_listeningSocket; + private Socket m_listeningSocketIPv6; + private Dictionary m_channels; + private ITransportListenerCallback m_callback; + private bool m_reverseConnectListener; + #endregion + } + + /// + /// The Tcp specific arguments passed to the ConnectionWaiting event. + /// + public class TcpConnectionWaitingEventArgs : ConnectionWaitingEventArgs + { + internal TcpConnectionWaitingEventArgs(string serverUrl, Uri endpointUrl, IMessageSocket socket) + : base(serverUrl, endpointUrl) + { + Socket = socket; + } + + /// + public override object Handle => Socket; + + /// + internal IMessageSocket Socket { get; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Asymmetric.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Asymmetric.cs new file mode 100644 index 00000000..88e3c420 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Asymmetric.cs @@ -0,0 +1,1222 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Bindings +{ + /// + /// Manages the server side of a UA TCP channel. + /// + public partial class UaSCUaBinaryChannel + { + #region IUaTcpSecureChannel Members + /// + /// Returns the endpoint description selected by the client. + /// + public EndpointDescription EndpointDescription + { + get + { + lock (DataLock) + { + return m_selectedEndpoint; + } + } + + protected set + { + lock (DataLock) + { + m_selectedEndpoint = value; + } + } + } + #endregion + + #region General Cryptographic Methods and Properties + /// + /// The certificate for the server. + /// + protected X509Certificate2 ServerCertificate => m_serverCertificate; + + /// + /// The server certificate chain. + /// + protected X509Certificate2Collection ServerCertificateChain + { + get { return m_serverCertificateChain; } + set { m_serverCertificateChain = value; } + } + + /// + /// The security mode used with the channel. + /// + protected MessageSecurityMode SecurityMode => m_securityMode; + + /// + /// The security policy used with the channel. + /// + protected string SecurityPolicyUri => m_securityPolicyUri; + + /// + /// Whether the channel is restricted to discovery operations. + /// + protected bool DiscoveryOnly => m_discoveryOnly; + + /// + /// The certificate for the client. + /// + protected X509Certificate2 ClientCertificate + { + get { return m_clientCertificate; } + set { m_clientCertificate = value; } + } + + /// + /// The client certificate chain. + /// + internal X509Certificate2Collection ClientCertificateChain + { + get { return m_clientCertificateChain; } + set { m_clientCertificateChain = value; } + } + + /// + /// Creates a new nonce. + /// + protected byte[] CreateNonce() + { + uint length = GetNonceLength(); + if (length > 0) + { + return Utils.Nonce.CreateNonce(length); + } + return null; + } + + /// + /// Returns the thumbprint as a uppercase string. + /// + protected static string GetThumbprintString(byte[] thumbprint) + { + if (thumbprint == null) + { + return null; + } + + StringBuilder builder = new StringBuilder(thumbprint.Length * 2); + + for (int ii = 0; ii < thumbprint.Length; ii++) + { + builder.AppendFormat("{0:X2}", thumbprint[ii]); + } + + return builder.ToString(); + } + + /// + /// Returns the thumbprint as a uppercase string. + /// + protected static byte[] GetThumbprintBytes(string thumbprint) + { + if (thumbprint == null) + { + return null; + } + + byte[] bytes = new byte[thumbprint.Length / 2]; + + for (int ii = 0; ii < thumbprint.Length - 1; ii += 2) + { + bytes[ii / 2] = Convert.ToByte(thumbprint.Substring(ii, 2), 16); + } + + return bytes; + } + + /// + /// Compares two certificates. + /// + protected static void CompareCertificates(X509Certificate2 expected, X509Certificate2 actual, bool allowNull) + { + bool equal = true; + + if (expected == null) + { + equal = actual == null; + + // accept everything if no expected certificate and nulls are allowed. + if (allowNull) + { + equal = true; + } + } + else if (actual == null) + { + equal = allowNull; + } + else if (!Utils.IsEqual(expected.RawData, actual.RawData)) + { + equal = false; + } + + if (!equal) + { + throw ServiceResultException.Create( + StatusCodes.BadCertificateInvalid, + "Certificate mismatch. Expecting '{0}'/{1},. Received '{2}'/{3}.", + (expected != null) ? expected.Subject : "(null)", + (expected != null) ? expected.Thumbprint : "(null)", + (actual != null) ? actual.Subject : "(null)", + (actual != null) ? actual.Thumbprint : "(null)"); + } + } + #endregion + + #region Asymmetric Cryptography Functions + /// + /// Returns the length of the symmetric encryption key. + /// + protected uint GetNonceLength() + { + return Utils.Nonce.GetNonceLength(SecurityPolicyUri); + } + + /// + /// Validates the nonce. + /// + protected bool ValidateNonce(byte[] nonce) + { + return Utils.Nonce.ValidateNonce(nonce, SecurityMode, SecurityPolicyUri); + } + + /// + /// Returns the plain text block size for key in the specified certificate. + /// + protected int GetPlainTextBlockSize(X509Certificate2 receiverCertificate) + { + switch (SecurityPolicyUri) + { + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + { + return RsaUtils.GetPlainTextBlockSize(receiverCertificate, RsaUtils.Padding.OaepSHA1); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return RsaUtils.GetPlainTextBlockSize(receiverCertificate, RsaUtils.Padding.OaepSHA256); + } + + case SecurityPolicies.Basic128Rsa15: + { + return RsaUtils.GetPlainTextBlockSize(receiverCertificate, RsaUtils.Padding.Pkcs1); + } + + default: + case SecurityPolicies.None: + { + return 1; + } + } + } + + /// + /// Returns the cipher text block size for key in the specified certificate. + /// + protected int GetCipherTextBlockSize(X509Certificate2 receiverCertificate) + { + switch (SecurityPolicyUri) + { + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + { + return RsaUtils.GetCipherTextBlockSize(receiverCertificate, RsaUtils.Padding.OaepSHA1); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return RsaUtils.GetCipherTextBlockSize(receiverCertificate, RsaUtils.Padding.OaepSHA256); + } + + case SecurityPolicies.Basic128Rsa15: + { + return RsaUtils.GetCipherTextBlockSize(receiverCertificate, RsaUtils.Padding.Pkcs1); + } + + default: + case SecurityPolicies.None: + { + return 1; + } + } + } + + /// + /// Calculates the size of the asymmetric security header. + /// + protected int GetAsymmetricHeaderSize( + string securityPolicyUri, + X509Certificate2 senderCertificate) + { + int headerSize = 0; + + headerSize += TcpMessageLimits.BaseHeaderSize; + headerSize += TcpMessageLimits.StringLengthSize; + + if (securityPolicyUri != null) + { + headerSize += new UTF8Encoding().GetByteCount(securityPolicyUri); + } + + headerSize += TcpMessageLimits.StringLengthSize; + headerSize += TcpMessageLimits.StringLengthSize; + + if (SecurityMode != MessageSecurityMode.None) + { + headerSize += senderCertificate.RawData.Length; + headerSize += TcpMessageLimits.CertificateThumbprintSize; + } + + if (headerSize >= SendBufferSize - TcpMessageLimits.SequenceHeaderSize - GetAsymmetricSignatureSize(senderCertificate) - 1) + { + throw ServiceResultException.Create( + StatusCodes.BadInternalError, + "AsymmetricSecurityHeader is {0} bytes which is too large for the send buffer size of {1} bytes.", + headerSize, + SendBufferSize); + } + + return headerSize; + } + + /// + /// Get asymmetric header size + /// + protected int GetAsymmetricHeaderSize( + string securityPolicyUri, + X509Certificate2 senderCertificate, + int senderCertificateSize) + { + int headerSize = 0; + + headerSize += TcpMessageLimits.BaseHeaderSize; + headerSize += TcpMessageLimits.StringLengthSize; + + if (securityPolicyUri != null) + { + headerSize += new UTF8Encoding().GetByteCount(securityPolicyUri); + } + + headerSize += TcpMessageLimits.StringLengthSize; + headerSize += TcpMessageLimits.StringLengthSize; + + if (SecurityMode != MessageSecurityMode.None) + { + headerSize += senderCertificateSize; + headerSize += TcpMessageLimits.CertificateThumbprintSize; + } + + if (headerSize >= SendBufferSize - TcpMessageLimits.SequenceHeaderSize - GetAsymmetricSignatureSize(senderCertificate) - 1) + { + throw ServiceResultException.Create( + StatusCodes.BadInternalError, + "AsymmetricSecurityHeader is {0} bytes which is too large for the send buffer size of {1} bytes.", + headerSize, + SendBufferSize); + } + + return headerSize; + } + + /// + /// Calculates the size of the footer with an asymmetric signature. + /// + protected int GetAsymmetricSignatureSize(X509Certificate2 senderCertificate) + { + switch (SecurityPolicyUri) + { + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return RsaUtils.GetSignatureLength(senderCertificate); + } + + default: + case SecurityPolicies.None: + { + return 0; + } + } + } + + /// + /// Writes the asymmetric security header to the buffer. + /// + protected void WriteAsymmetricMessageHeader( + BinaryEncoder encoder, + uint messageType, + uint secureChannelId, + string securityPolicyUri, + X509Certificate2 senderCertificate, + X509Certificate2 receiverCertificate) + { + int senderCertificateSize = 0; + + WriteAsymmetricMessageHeader( + encoder, + messageType, + secureChannelId, + securityPolicyUri, + senderCertificate, + null, + receiverCertificate, + out senderCertificateSize); + } + + /// + /// Writes the asymmetric security header to the buffer. + /// + protected void WriteAsymmetricMessageHeader( + BinaryEncoder encoder, + uint messageType, + uint secureChannelId, + string securityPolicyUri, + X509Certificate2 senderCertificate, + X509Certificate2Collection senderCertificateChain, + X509Certificate2 receiverCertificate, + out int senderCertificateSize) + { + int start = encoder.Position; + senderCertificateSize = 0; + + encoder.WriteUInt32(null, messageType); + encoder.WriteUInt32(null, 0); + encoder.WriteUInt32(null, secureChannelId); + encoder.WriteString(null, securityPolicyUri); + + if (SecurityMode != MessageSecurityMode.None) + { + if (senderCertificateChain != null && senderCertificateChain.Count > 0) + { + X509Certificate2 currentCertificate = senderCertificateChain[0]; + int maxSenderCertificateSize = GetMaxSenderCertificateSize(currentCertificate, securityPolicyUri); + List senderCertificateList = new List(currentCertificate.RawData); + senderCertificateSize = currentCertificate.RawData.Length; + + for (int i = 1; i < senderCertificateChain.Count; i++) + { + currentCertificate = senderCertificateChain[i]; + senderCertificateSize += currentCertificate.RawData.Length; + + if (senderCertificateSize < maxSenderCertificateSize) + { + senderCertificateList.AddRange(currentCertificate.RawData); + } + else + { + senderCertificateSize -= currentCertificate.RawData.Length; + break; + } + } + + encoder.WriteByteString(null, senderCertificateList.ToArray()); + } + else + { + encoder.WriteByteString(null, senderCertificate.RawData); + } + + encoder.WriteByteString(null, GetThumbprintBytes(receiverCertificate.Thumbprint)); + } + else + { + encoder.WriteByteString(null, null); + encoder.WriteByteString(null, null); + } + + if (encoder.Position - start > SendBufferSize) + { + throw ServiceResultException.Create( + StatusCodes.BadInternalError, + "AsymmetricSecurityHeader is {0} bytes which is too large for the send buffer size of {1} bytes.", + encoder.Position - start, + SendBufferSize); + } + } + + private int GetMaxSenderCertificateSize(X509Certificate2 senderCertificate, string securityPolicyUri) + { + int occupiedSize = TcpMessageLimits.BaseHeaderSize //base header size + + TcpMessageLimits.StringLengthSize; //security policy uri length + + if (securityPolicyUri != null) + { + occupiedSize += new UTF8Encoding().GetByteCount(securityPolicyUri); //security policy uri size + } + + occupiedSize += TcpMessageLimits.StringLengthSize; //SenderCertificateLength + occupiedSize += TcpMessageLimits.StringLengthSize; //ReceiverCertificateThumbprintLength + + occupiedSize += TcpMessageLimits.CertificateThumbprintSize; //ReceiverCertificateThumbprint + + occupiedSize += TcpMessageLimits.SequenceHeaderSize; //SequenceHeader size + occupiedSize += TcpMessageLimits.MinBodySize; //Minimum body size + + occupiedSize += GetAsymmetricSignatureSize(senderCertificate); + + return SendBufferSize - occupiedSize; + } + + /// + /// Sends a OpenSecureChannel request. + /// + protected BufferCollection WriteAsymmetricMessage( + uint messageType, + uint requestId, + X509Certificate2 senderCertificate, + X509Certificate2 receiverCertificate, + ArraySegment messageBody) + { + return WriteAsymmetricMessage(messageType, requestId, senderCertificate, null, receiverCertificate, messageBody); + } + + /// + /// Sends a OpenSecureChannel request. + /// + protected BufferCollection WriteAsymmetricMessage( + uint messageType, + uint requestId, + X509Certificate2 senderCertificate, + X509Certificate2Collection senderCertificateChain, + X509Certificate2 receiverCertificate, + ArraySegment messageBody) + { + bool success = false; + BufferCollection chunksToSend = new BufferCollection(); + + byte[] buffer = BufferManager.TakeBuffer(SendBufferSize, "WriteAsymmetricMessage"); + + try + { + BinaryEncoder encoder = new BinaryEncoder(buffer, 0, SendBufferSize, Quotas.MessageContext); + int headerSize = 0; + + if (senderCertificateChain != null && senderCertificateChain.Count > 0) + { + int senderCertificateSize = 0; + + WriteAsymmetricMessageHeader( + encoder, + messageType | TcpMessageType.Intermediate, + ChannelId, + SecurityPolicyUri, + senderCertificate, + senderCertificateChain, + receiverCertificate, + out senderCertificateSize); + + headerSize = GetAsymmetricHeaderSize(SecurityPolicyUri, senderCertificate, senderCertificateSize); + } + else + { + WriteAsymmetricMessageHeader( + encoder, + messageType | TcpMessageType.Intermediate, + ChannelId, + SecurityPolicyUri, + senderCertificate, + receiverCertificate); + + headerSize = GetAsymmetricHeaderSize(SecurityPolicyUri, senderCertificate); + } + + int signatureSize = GetAsymmetricSignatureSize(senderCertificate); + + // save the header. + ArraySegment header = new ArraySegment(buffer, 0, headerSize); + + // calculate the space available. + int plainTextBlockSize = GetPlainTextBlockSize(receiverCertificate); + int cipherTextBlockSize = GetCipherTextBlockSize(receiverCertificate); + int maxCipherTextSize = SendBufferSize - headerSize; + int maxCipherBlocks = maxCipherTextSize / cipherTextBlockSize; + int maxPlainTextSize = maxCipherBlocks * plainTextBlockSize; + int maxPayloadSize = maxPlainTextSize - signatureSize - 1 - TcpMessageLimits.SequenceHeaderSize; + + int bytesToWrite = messageBody.Count; + int startOfBytes = messageBody.Offset; + + while (bytesToWrite > 0) + { + encoder.WriteUInt32(null, GetNewSequenceNumber()); + encoder.WriteUInt32(null, requestId); + + int payloadSize = bytesToWrite; + + if (payloadSize > maxPayloadSize) + { + payloadSize = maxPayloadSize; + } + else + { + UpdateMessageType(buffer, 0, messageType | TcpMessageType.Final); + } + + // write the message body. + encoder.WriteRawBytes(messageBody.Array, messageBody.Offset + startOfBytes, payloadSize); + + // calculate the amount of plain text to encrypt. + int plainTextSize = encoder.Position - headerSize + signatureSize; + + // calculate the padding. + int padding = 0; + + if (SecurityMode != MessageSecurityMode.None) + { + if (X509Utils.GetRSAPublicKeySize(receiverCertificate) <= TcpMessageLimits.KeySizeExtraPadding) + { + // need to reserve one byte for the padding. + plainTextSize++; + + if (plainTextSize % plainTextBlockSize != 0) + { + padding = plainTextBlockSize - (plainTextSize % plainTextBlockSize); + } + + encoder.WriteByte(null, (byte)padding); + for (int ii = 0; ii < padding; ii++) + { + encoder.WriteByte(null, (byte)padding); + } + } + else + { + // need to reserve one byte for the padding. + plainTextSize++; + // need to reserve one byte for the extrapadding. + plainTextSize++; + + if (plainTextSize % plainTextBlockSize != 0) + { + padding = plainTextBlockSize - (plainTextSize % plainTextBlockSize); + } + + byte paddingSize = (byte)(padding & 0xff); + byte extraPaddingByte = (byte)((padding >> 8) & 0xff); + + encoder.WriteByte(null, paddingSize); + for (int ii = 0; ii < padding; ii++) + { + encoder.WriteByte(null, (byte)paddingSize); + } + encoder.WriteByte(null, extraPaddingByte); + } + + // update the plaintext size with the padding size. + plainTextSize += padding; + } + + // calculate the number of block to encrypt. + int encryptedBlocks = plainTextSize / plainTextBlockSize; + + // calculate the size of the encrypted data. + int cipherTextSize = encryptedBlocks * cipherTextBlockSize; + + // put the message size after encryption into the header. + UpdateMessageSize(buffer, 0, cipherTextSize + headerSize); + + // write the signature. + byte[] signature = Sign(new ArraySegment(buffer, 0, encoder.Position), senderCertificate); + + if (signature != null) + { + encoder.WriteRawBytes(signature, 0, signature.Length); + } + + int messageSize = encoder.Close(); + + // encrypt the data. + ArraySegment encryptedBuffer = Encrypt( + new ArraySegment(buffer, headerSize, messageSize - headerSize), + header, + receiverCertificate); + + // check for math errors due to code bugs. + if (encryptedBuffer.Count != cipherTextSize + headerSize) + { + throw new InvalidDataException("Actual message size is not the same as the predicted message size."); + } + + // save chunk. + chunksToSend.Add(encryptedBuffer); + + bytesToWrite -= payloadSize; + startOfBytes += payloadSize; + + // reset the encoder to write the plaintext for the next chunk into the same buffer. + if (bytesToWrite > 0) + { + MemoryStream ostrm = new MemoryStream(buffer, 0, SendBufferSize); + ostrm.Seek(header.Count, SeekOrigin.Current); + encoder = new BinaryEncoder(ostrm, Quotas.MessageContext); + } + } + + // ensure the buffers don't get clean up on exit. + success = true; + return chunksToSend; + } + catch (Exception ex) + { + throw new Exception("Could not write async message", ex); + } + finally + { + BufferManager.ReturnBuffer(buffer, "WriteAsymmetricMessage"); + + if (!success) + { + chunksToSend.Release(BufferManager, "WriteAsymmetricMessage"); + } + } + } + + /// + /// Reads the asymmetric security header to the buffer. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "messageType"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "messageSize")] + protected void ReadAsymmetricMessageHeader( + BinaryDecoder decoder, + X509Certificate2 receiverCertificate, + out uint secureChannelId, + out X509Certificate2Collection senderCertificateChain, + out string securityPolicyUri) + { + senderCertificateChain = null; + + uint messageType = decoder.ReadUInt32(null); + uint messageSize = decoder.ReadUInt32(null); + + // decode security header. + byte[] certificateData = null; + byte[] thumbprintData = null; + + try + { + secureChannelId = decoder.ReadUInt32(null); + securityPolicyUri = decoder.ReadString(null, TcpMessageLimits.MaxSecurityPolicyUriSize); + certificateData = decoder.ReadByteString(null, TcpMessageLimits.MaxCertificateSize); + thumbprintData = decoder.ReadByteString(null, TcpMessageLimits.CertificateThumbprintSize); + } + catch (Exception e) + { + throw ServiceResultException.Create( + StatusCodes.BadSecurityChecksFailed, + e, + "The asymmetric security header could not be parsed."); + } + + // verify sender certificate chain. + if (certificateData != null && certificateData.Length > 0) + { + senderCertificateChain = Utils.ParseCertificateChainBlob(certificateData); + + try + { + string thumbprint = senderCertificateChain[0].Thumbprint; + + if (thumbprint == null) + { + throw ServiceResultException.Create(StatusCodes.BadCertificateInvalid, "Invalid certificate thumbprint."); + } + } + catch (Exception e) + { + throw ServiceResultException.Create(StatusCodes.BadCertificateInvalid, e, "The sender's certificate could not be parsed."); + } + } + else + { + if (securityPolicyUri != SecurityPolicies.None) + { + throw ServiceResultException.Create(StatusCodes.BadCertificateInvalid, "The sender's certificate was not specified."); + } + } + + // verify receiver thumbprint. + if (thumbprintData != null && thumbprintData.Length > 0) + { + if (receiverCertificate.Thumbprint.ToUpperInvariant() != GetThumbprintString(thumbprintData)) + { + throw ServiceResultException.Create(StatusCodes.BadCertificateInvalid, "The receiver's certificate thumbprint is not valid."); + } + } + else + { + if (securityPolicyUri != SecurityPolicies.None) + { + throw ServiceResultException.Create(StatusCodes.BadCertificateInvalid, "The receiver's certificate thumbprint was not specified."); + } + } + } + + /// + /// Checks if it is possible to revise the security mode. + /// + protected void ReviseSecurityMode(bool firstCall, MessageSecurityMode requestedMode) + { + bool supported = false; + + // server may support multiple security modes - check if the one the client used is supported. + if (firstCall && !m_discoveryOnly) + { + foreach (EndpointDescription endpoint in m_endpoints) + { + if (endpoint.SecurityMode == requestedMode) + { + if (requestedMode == MessageSecurityMode.None || + endpoint.SecurityPolicyUri == m_securityPolicyUri) + { + m_securityMode = endpoint.SecurityMode; + m_selectedEndpoint = endpoint; + supported = true; + break; + } + } + } + } + + if (!supported) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityModeRejected, "Security mode is not acceptable to the server."); + } + } + + /// + /// Sets to endpoint according to the endpoint url. + /// + protected virtual bool SetEndpointUrl(string endpointUrl) + { + Uri url = Utils.ParseUri(endpointUrl); + + if (url == null) + { + return false; + } + + foreach (EndpointDescription endpoint in m_endpoints) + { + Uri expectedUrl = Utils.ParseUri(endpoint.EndpointUrl); + + if (expectedUrl == null) + { + continue; + } + + if (expectedUrl.Scheme != url.Scheme) + { + continue; + } + + m_securityMode = endpoint.SecurityMode; + m_securityPolicyUri = endpoint.SecurityPolicyUri; + m_selectedEndpoint = endpoint; + return true; + } + + return false; + } + + /// + /// Processes an OpenSecureChannel request message. + /// + protected ArraySegment ReadAsymmetricMessage( + ArraySegment buffer, + X509Certificate2 receiverCertificate, + out uint channelId, + out X509Certificate2 senderCertificate, + out uint requestId, + out uint sequenceNumber) + { + BinaryDecoder decoder = new BinaryDecoder(buffer.Array, buffer.Offset, buffer.Count, Quotas.MessageContext); + + string securityPolicyUri = null; + X509Certificate2Collection senderCertificateChain; + + // parse the security header. + ReadAsymmetricMessageHeader( + decoder, + receiverCertificate, + out channelId, + out senderCertificateChain, + out securityPolicyUri); + + if (senderCertificateChain != null && senderCertificateChain.Count > 0) + { + senderCertificate = senderCertificateChain[0]; + } + else + { + senderCertificate = null; + } + + // validate the sender certificate. + if (senderCertificate != null && Quotas.CertificateValidator != null && securityPolicyUri != SecurityPolicies.None) + { + CertificateValidator certificateValidator = Quotas.CertificateValidator as CertificateValidator; + + if (certificateValidator != null) + { + certificateValidator.Validate(senderCertificateChain); + } + else + { + Quotas.CertificateValidator.Validate(senderCertificate); + } + } + + // check if this is the first open secure channel request. + if (!m_uninitialized) + { + if (securityPolicyUri != m_securityPolicyUri) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityPolicyRejected, "Cannot change the security policy after creating the channnel."); + } + } + else + { + // find a matching endpoint description. + if (m_endpoints != null) + { + foreach (EndpointDescription endpoint in m_endpoints) + { + // There may be multiple endpoints with the same securityPolicyUri. + // Just choose the first one that matches. This choice will be re-examined + // When the OpenSecureChannel request body is processed. + if (endpoint.SecurityPolicyUri == securityPolicyUri || (securityPolicyUri == SecurityPolicies.None && endpoint.SecurityMode == MessageSecurityMode.None)) + { + m_securityMode = endpoint.SecurityMode; + m_securityPolicyUri = securityPolicyUri; + m_discoveryOnly = false; + m_uninitialized = false; + m_selectedEndpoint = endpoint; + + // recalculate the key sizes. + CalculateSymmetricKeySizes(); + break; + } + } + } + + // allow a discovery only channel with no security if policy not suppported + if (m_uninitialized) + { + if (securityPolicyUri != SecurityPolicies.None) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityPolicyRejected, "The security policy is not supported."); + } + + m_securityMode = MessageSecurityMode.None; + m_securityPolicyUri = SecurityPolicies.None; + m_discoveryOnly = true; + m_uninitialized = false; + m_selectedEndpoint = null; + } + } + + int headerSize = decoder.Position; + + // decrypt the body. + ArraySegment plainText = Decrypt( + new ArraySegment(buffer.Array, buffer.Offset + headerSize, buffer.Count - headerSize), + new ArraySegment(buffer.Array, buffer.Offset, headerSize), + receiverCertificate); + + // extract signature. + int signatureSize = GetAsymmetricSignatureSize(senderCertificate); + + byte[] signature = new byte[signatureSize]; + + for (int ii = 0; ii < signatureSize; ii++) + { + signature[ii] = plainText.Array[plainText.Offset + plainText.Count - signatureSize + ii]; + } + + // verify the signature. + ArraySegment dataToVerify = new ArraySegment(plainText.Array, plainText.Offset, plainText.Count - signatureSize); + + if (!Verify(dataToVerify, signature, senderCertificate)) + { + Utils.Trace("Could not verify signature on message."); + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Could not verify the signature on the message."); + } + + // verify padding. + int paddingCount = 0; + + if (SecurityMode != MessageSecurityMode.None) + { + int paddingEnd = -1; + if (X509Utils.GetRSAPublicKeySize(receiverCertificate) > TcpMessageLimits.KeySizeExtraPadding) + { + paddingEnd = plainText.Offset + plainText.Count - signatureSize - 1; + paddingCount = plainText.Array[paddingEnd - 1] + plainText.Array[paddingEnd] * 256; + + //parse until paddingStart-1; the last one is actually the extrapaddingsize + for (int ii = paddingEnd - paddingCount; ii < paddingEnd; ii++) + { + if (plainText.Array[ii] != plainText.Array[paddingEnd - 1]) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Could not verify the padding in the message."); + } + } + } + else + { + paddingEnd = plainText.Offset + plainText.Count - signatureSize - 1; + paddingCount = plainText.Array[paddingEnd]; + + for (int ii = paddingEnd - paddingCount; ii < paddingEnd; ii++) + { + if (plainText.Array[ii] != plainText.Array[paddingEnd]) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Could not verify the padding in the message."); + } + } + } + + paddingCount++; + } + + // decode message. + decoder = new BinaryDecoder( + plainText.Array, + plainText.Offset + headerSize, + plainText.Count - headerSize, + Quotas.MessageContext); + + sequenceNumber = decoder.ReadUInt32(null); + requestId = decoder.ReadUInt32(null); + + headerSize += decoder.Position; + decoder.Close(); + + Utils.Trace("Security Policy: {0}", SecurityPolicyUri); + Utils.Trace("Sender Certificate: {0}", (senderCertificate != null) ? senderCertificate.Subject : "(none)"); + + // return the body. + return new ArraySegment( + plainText.Array, + plainText.Offset + headerSize, + plainText.Count - headerSize - signatureSize - paddingCount); + } + + /// + /// Adds an asymmetric signature to the end of the buffer. + /// + /// + /// Start and count specify the block of data to be signed. + /// The padding and signature must be written to the stream wrapped by the encoder. + /// + protected byte[] Sign( + ArraySegment dataToSign, + X509Certificate2 senderCertificate) + { + switch (SecurityPolicyUri) + { + default: + case SecurityPolicies.None: + { + return null; + } + + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic128Rsa15: + { + return Rsa_Sign(dataToSign, senderCertificate, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + } + + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Basic256Sha256: + { + return Rsa_Sign(dataToSign, senderCertificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return Rsa_Sign(dataToSign, senderCertificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); + } + } + } + + /// + /// Verifies an asymmetric signature at the end of the buffer. + /// + /// + /// Start and count specify the block of data including the signature and padding. + /// The current security policy uri and sender certificate specify the size of the signature. + /// This call also verifies that the padding is correct. + /// + protected bool Verify( + ArraySegment dataToVerify, + byte[] signature, + X509Certificate2 senderCertificate) + { + // verify signature. + switch (SecurityPolicyUri) + { + case SecurityPolicies.None: + { + return true; + } + + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Basic256: + { + return Rsa_Verify(dataToVerify, signature, senderCertificate, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); + } + + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Basic256Sha256: + { + return Rsa_Verify(dataToVerify, signature, senderCertificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return Rsa_Verify(dataToVerify, signature, senderCertificate, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); + } + + default: + { + return false; + } + } + } + + /// + /// Encrypts the buffer using asymmetric encryption. + /// + /// + /// Start and count specify the block of data to be encrypted. + /// The caller must ensure that count is a multiple of the input block size for the current cipher. + /// The header specifies unencrypted data that must be copied to the output. + /// + protected ArraySegment Encrypt( + ArraySegment dataToEncrypt, + ArraySegment headerToCopy, + X509Certificate2 receiverCertificate) + { + switch (SecurityPolicyUri) + { + default: + case SecurityPolicies.None: + { + byte[] encryptedBuffer = BufferManager.TakeBuffer(SendBufferSize, "Encrypt"); + + Array.Copy(headerToCopy.Array, headerToCopy.Offset, encryptedBuffer, 0, headerToCopy.Count); + Array.Copy(dataToEncrypt.Array, dataToEncrypt.Offset, encryptedBuffer, headerToCopy.Count, dataToEncrypt.Count); + + return new ArraySegment(encryptedBuffer, 0, dataToEncrypt.Count + headerToCopy.Count); + } + + case SecurityPolicies.Basic256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Basic256Sha256: + { + return Rsa_Encrypt(dataToEncrypt, headerToCopy, receiverCertificate, RsaUtils.Padding.OaepSHA1); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return Rsa_Encrypt(dataToEncrypt, headerToCopy, receiverCertificate, RsaUtils.Padding.OaepSHA256); + } + + case SecurityPolicies.Basic128Rsa15: + { + return Rsa_Encrypt(dataToEncrypt, headerToCopy, receiverCertificate, RsaUtils.Padding.Pkcs1); + } + } + } + + /// + /// Decrypts the buffer using asymmetric encryption. + /// + /// + /// Start and count specify the block of data to be decrypted. + /// The header specifies unencrypted data that must be copied to the output. + /// + protected ArraySegment Decrypt( + ArraySegment dataToDecrypt, + ArraySegment headerToCopy, + X509Certificate2 receiverCertificate) + { + switch (SecurityPolicyUri) + { + default: + case SecurityPolicies.None: + { + byte[] decryptedBuffer = BufferManager.TakeBuffer(SendBufferSize, "Decrypt"); + + Array.Copy(headerToCopy.Array, headerToCopy.Offset, decryptedBuffer, 0, headerToCopy.Count); + Array.Copy(dataToDecrypt.Array, dataToDecrypt.Offset, decryptedBuffer, headerToCopy.Count, dataToDecrypt.Count); + + return new ArraySegment(decryptedBuffer, 0, dataToDecrypt.Count + headerToCopy.Count); + } + + case SecurityPolicies.Basic256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Basic256Sha256: + { + return Rsa_Decrypt(dataToDecrypt, headerToCopy, receiverCertificate, RsaUtils.Padding.OaepSHA1); + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return Rsa_Decrypt(dataToDecrypt, headerToCopy, receiverCertificate, RsaUtils.Padding.OaepSHA256); + } + + case SecurityPolicies.Basic128Rsa15: + { + return Rsa_Decrypt(dataToDecrypt, headerToCopy, receiverCertificate, RsaUtils.Padding.Pkcs1); + } + } + } + #endregion + + #region Private Fields + private EndpointDescriptionCollection m_endpoints; + private MessageSecurityMode m_securityMode; + private string m_securityPolicyUri; + private bool m_discoveryOnly; + private EndpointDescription m_selectedEndpoint; + private X509Certificate2 m_serverCertificate; + private X509Certificate2Collection m_serverCertificateChain; + private X509Certificate2 m_clientCertificate; + private X509Certificate2Collection m_clientCertificateChain; + private bool m_uninitialized; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Rsa.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Rsa.cs new file mode 100644 index 00000000..022fbbd4 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Rsa.cs @@ -0,0 +1,213 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Opc.Ua.Bindings +{ + /// + /// Manages the server side of a UA TCP channel. + /// + public partial class UaSCUaBinaryChannel + { + + /// + /// Creates an RSA PKCS#1 v1.5 or PSS signature of a hash algorithm for the stream. + /// + private static byte[] Rsa_Sign( + ArraySegment dataToSign, + X509Certificate2 signingCertificate, + HashAlgorithmName algorithm, + RSASignaturePadding padding) + { + RSA rsa = null; + try + { + // extract the private key. + rsa = signingCertificate.GetRSAPrivateKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No private key for certificate."); + } + + // create the signature. + return rsa.SignData(dataToSign.Array, dataToSign.Offset, dataToSign.Count, algorithm, padding); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Verifies an RSA PKCS#1 v1.5 or PSS signature of a hash algorithm for the stream. + /// + private static bool Rsa_Verify( + ArraySegment dataToVerify, + byte[] signature, + X509Certificate2 signingCertificate, + HashAlgorithmName algorithm, + RSASignaturePadding padding) + { + RSA rsa = null; + try + { + // extract the public key. + rsa = signingCertificate.GetRSAPublicKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No public key for certificate."); + } + + // verify signature. + if (!rsa.VerifyData(dataToVerify.Array, dataToVerify.Offset, dataToVerify.Count, signature, algorithm, padding)) + { + string messageType = new UTF8Encoding().GetString(dataToVerify.Array, dataToVerify.Offset, 4); + int messageLength = BitConverter.ToInt32(dataToVerify.Array, dataToVerify.Offset + 4); + string actualSignature = Utils.ToHexString(signature); + var message = new StringBuilder(); + message.AppendLine("Could not validate signature."); + message.AppendLine("Certificate ={0}, MessageType ={1}, Length ={2}"); + message.AppendLine("ActualSignature={3}"); + Utils.Trace(message.ToString(), signingCertificate.Subject, + messageType, messageLength, actualSignature + ); + + return false; + } + return true; + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Encrypts the message using RSA encryption. + /// + private ArraySegment Rsa_Encrypt( + ArraySegment dataToEncrypt, + ArraySegment headerToCopy, + X509Certificate2 encryptingCertificate, + RsaUtils.Padding padding) + { + RSA rsa = null; + try + { + // get the encrypting key. + rsa = encryptingCertificate.GetRSAPublicKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No public key for certificate."); + } + + int inputBlockSize = RsaUtils.GetPlainTextBlockSize(rsa, padding); + int outputBlockSize = RsaUtils.GetCipherTextBlockSize(rsa, padding); + + // verify the input data is the correct block size. + if (dataToEncrypt.Count % inputBlockSize != 0) + { + Utils.Trace("Message is not an integral multiple of the block size. Length = {0}, BlockSize = {1}.", dataToEncrypt.Count, inputBlockSize); + } + + byte[] encryptedBuffer = BufferManager.TakeBuffer(SendBufferSize, "Rsa_Encrypt"); + Array.Copy(headerToCopy.Array, headerToCopy.Offset, encryptedBuffer, 0, headerToCopy.Count); + RSAEncryptionPadding rsaPadding = RsaUtils.GetRSAEncryptionPadding(padding); + + using (MemoryStream ostrm = new MemoryStream( + encryptedBuffer, + headerToCopy.Count, + encryptedBuffer.Length - headerToCopy.Count)) + { + + // encrypt body. + byte[] input = new byte[inputBlockSize]; + + for (int ii = dataToEncrypt.Offset; ii < dataToEncrypt.Offset + dataToEncrypt.Count; ii += inputBlockSize) + { + Array.Copy(dataToEncrypt.Array, ii, input, 0, input.Length); + byte[] cipherText = rsa.Encrypt(input, rsaPadding); + ostrm.Write(cipherText, 0, cipherText.Length); + } + } + // return buffer + return new ArraySegment(encryptedBuffer, 0, (dataToEncrypt.Count / inputBlockSize) * outputBlockSize + headerToCopy.Count); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + + /// + /// Decrypts the message using RSA encryption. + /// + private ArraySegment Rsa_Decrypt( + ArraySegment dataToDecrypt, + ArraySegment headerToCopy, + X509Certificate2 encryptingCertificate, + RsaUtils.Padding padding) + { + RSA rsa = null; + try + { + // get the encrypting key. + rsa = encryptingCertificate.GetRSAPrivateKey(); + if (rsa == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "No private key for certificate."); + } + + int inputBlockSize = RsaUtils.GetCipherTextBlockSize(rsa, padding); + int outputBlockSize = RsaUtils.GetPlainTextBlockSize(rsa, padding); + + // verify the input data is the correct block size. + if (dataToDecrypt.Count % inputBlockSize != 0) + { + Utils.Trace("Message is not an integral multiple of the block size. Length = {0}, BlockSize = {1}.", dataToDecrypt.Count, inputBlockSize); + } + + byte[] decryptedBuffer = BufferManager.TakeBuffer(SendBufferSize, "Rsa_Decrypt"); + Array.Copy(headerToCopy.Array, headerToCopy.Offset, decryptedBuffer, 0, headerToCopy.Count); + RSAEncryptionPadding rsaPadding = RsaUtils.GetRSAEncryptionPadding(padding); + + using (MemoryStream ostrm = new MemoryStream( + decryptedBuffer, + headerToCopy.Count, + decryptedBuffer.Length - headerToCopy.Count)) + { + // decrypt body. + byte[] input = new byte[inputBlockSize]; + + for (int ii = dataToDecrypt.Offset; ii < dataToDecrypt.Offset + dataToDecrypt.Count; ii += inputBlockSize) + { + Array.Copy(dataToDecrypt.Array, ii, input, 0, input.Length); + byte[] plainText = rsa.Decrypt(input, rsaPadding); + ostrm.Write(plainText, 0, plainText.Length); + } + } + + // return buffers. + return new ArraySegment(decryptedBuffer, 0, (dataToDecrypt.Count / inputBlockSize) * outputBlockSize + headerToCopy.Count); + } + finally + { + RsaUtils.RSADispose(rsa); + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Symmetric.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Symmetric.cs new file mode 100644 index 00000000..43cf082f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.Symmetric.cs @@ -0,0 +1,818 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace Opc.Ua.Bindings +{ + public partial class UaSCUaBinaryChannel + { + #region Token Handling Members + /// + /// Returns the current security token. + /// + protected internal ChannelToken CurrentToken => m_currentToken; + + /// + /// Returns the current security token. + /// + protected ChannelToken PreviousToken => m_previousToken; + + /// + /// Returns the renewed but not yet activated token. + /// + protected ChannelToken RenewedToken => m_renewedToken; + + /// + /// Creates a new token. + /// + protected ChannelToken CreateToken() + { + ChannelToken token = new ChannelToken(); + + token.ChannelId = m_channelId; + token.TokenId = 0; + token.CreatedAt = DateTime.UtcNow; + token.Lifetime = (int)Quotas.SecurityTokenLifetime; + + Utils.Trace("Token #{0} created. CreatedAt = {1:HH:mm:ss.fff} . Lifetime = {2}", token.TokenId, token.CreatedAt, token.Lifetime); + + return token; + } + + /// + /// Activates a new token. + /// + protected void ActivateToken(ChannelToken token) + { + // compute the keys for the token. + ComputeKeys(token); + + m_previousToken = m_currentToken; + m_currentToken = token; + m_renewedToken = null; + + Utils.Trace("Token #{0} activated. CreatedAt = {1:HH:mm:ss.fff} . Lifetime = {2}", token.TokenId, token.CreatedAt, token.Lifetime); + } + + /// + /// Sets the renewed token + /// + protected void SetRenewedToken(ChannelToken token) + { + m_renewedToken = token; + + Utils.Trace("RenewedToken #{0} set. CreatedAt = {1:HH:mm:ss.fff} . Lifetime = {2}", token.TokenId, token.CreatedAt, token.Lifetime); + } + + /// + /// Discards the tokens. + /// + protected void DiscardTokens() + { + m_previousToken = null; + m_currentToken = null; + } + #endregion + + #region Symmetric Cryptography Functions + /// + /// The byte length of the MAC (a.k.a signature) attached to each message. + /// + private int SymmetricSignatureSize => m_hmacHashSize; + + /// + /// The byte length the encryption blocks. + /// + private int EncryptionBlockSize => m_encryptionBlockSize; + + /// + /// Calculates the symmetric key sizes based on the current security policy. + /// + protected void CalculateSymmetricKeySizes() + { + switch (SecurityPolicyUri) + { + case SecurityPolicies.Basic128Rsa15: + { + m_hmacHashSize = 20; + m_signatureKeySize = 16; + m_encryptionKeySize = 16; + m_encryptionBlockSize = 16; + break; + } + + case SecurityPolicies.Basic256: + { + m_hmacHashSize = 20; + m_signatureKeySize = 24; + m_encryptionKeySize = 32; + m_encryptionBlockSize = 16; + break; + } + + case SecurityPolicies.Basic256Sha256: + { + m_hmacHashSize = 32; + m_signatureKeySize = 32; + m_encryptionKeySize = 32; + m_encryptionBlockSize = 16; + break; + } + + case SecurityPolicies.Aes128_Sha256_RsaOaep: + { + m_hmacHashSize = 32; + m_signatureKeySize = 32; + m_encryptionKeySize = 16; + m_encryptionBlockSize = 16; + break; + } + + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + m_hmacHashSize = 32; + m_signatureKeySize = 32; + m_encryptionKeySize = 32; + m_encryptionBlockSize = 16; + break; + } + + default: + case SecurityPolicies.None: + { + m_hmacHashSize = 0; + m_signatureKeySize = 0; + m_encryptionKeySize = 0; + m_encryptionBlockSize = 1; + break; + } + } + } + + /// + /// Computes the keys for a token. + /// + protected void ComputeKeys(ChannelToken token) + { + if (SecurityMode == MessageSecurityMode.None) + { + return; + } + + if (SecurityPolicyUri == SecurityPolicies.Basic256Sha256 || + SecurityPolicyUri == SecurityPolicies.Aes128_Sha256_RsaOaep || + SecurityPolicyUri == SecurityPolicies.Aes256_Sha256_RsaPss) + { + token.ClientSigningKey = Utils.PSHA256(token.ServerNonce, null, token.ClientNonce, 0, m_signatureKeySize); + token.ClientEncryptingKey = Utils.PSHA256(token.ServerNonce, null, token.ClientNonce, m_signatureKeySize, m_encryptionKeySize); + token.ClientInitializationVector = Utils.PSHA256(token.ServerNonce, null, token.ClientNonce, m_signatureKeySize + m_encryptionKeySize, m_encryptionBlockSize); + token.ServerSigningKey = Utils.PSHA256(token.ClientNonce, null, token.ServerNonce, 0, m_signatureKeySize); + token.ServerEncryptingKey = Utils.PSHA256(token.ClientNonce, null, token.ServerNonce, m_signatureKeySize, m_encryptionKeySize); + token.ServerInitializationVector = Utils.PSHA256(token.ClientNonce, null, token.ServerNonce, m_signatureKeySize + m_encryptionKeySize, m_encryptionBlockSize); + } + else + { + token.ClientSigningKey = Utils.PSHA1(token.ServerNonce, null, token.ClientNonce, 0, m_signatureKeySize); + token.ClientEncryptingKey = Utils.PSHA1(token.ServerNonce, null, token.ClientNonce, m_signatureKeySize, m_encryptionKeySize); + token.ClientInitializationVector = Utils.PSHA1(token.ServerNonce, null, token.ClientNonce, m_signatureKeySize + m_encryptionKeySize, m_encryptionBlockSize); + token.ServerSigningKey = Utils.PSHA1(token.ClientNonce, null, token.ServerNonce, 0, m_signatureKeySize); + token.ServerEncryptingKey = Utils.PSHA1(token.ClientNonce, null, token.ServerNonce, m_signatureKeySize, m_encryptionKeySize); + token.ServerInitializationVector = Utils.PSHA1(token.ClientNonce, null, token.ServerNonce, m_signatureKeySize + m_encryptionKeySize, m_encryptionBlockSize); + } + + switch (SecurityPolicyUri) + { + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + // create encryptors. + SymmetricAlgorithm AesCbcEncryptorProvider = Aes.Create(); + AesCbcEncryptorProvider.Mode = CipherMode.CBC; + AesCbcEncryptorProvider.Padding = PaddingMode.None; + AesCbcEncryptorProvider.Key = token.ClientEncryptingKey; + AesCbcEncryptorProvider.IV = token.ClientInitializationVector; + token.ClientEncryptor = AesCbcEncryptorProvider; + + SymmetricAlgorithm AesCbcDecryptorProvider = Aes.Create(); + AesCbcDecryptorProvider.Mode = CipherMode.CBC; + AesCbcDecryptorProvider.Padding = PaddingMode.None; + AesCbcDecryptorProvider.Key = token.ServerEncryptingKey; + AesCbcDecryptorProvider.IV = token.ServerInitializationVector; + token.ServerEncryptor = AesCbcDecryptorProvider; + + // create HMACs. + if (SecurityPolicyUri == SecurityPolicies.Basic256Sha256 || + SecurityPolicyUri == SecurityPolicies.Aes128_Sha256_RsaOaep || + SecurityPolicyUri == SecurityPolicies.Aes256_Sha256_RsaPss) + { + // SHA256 + token.ServerHmac = new HMACSHA256(token.ServerSigningKey); + token.ClientHmac = new HMACSHA256(token.ClientSigningKey); + } + else + { // SHA1 + token.ServerHmac = new HMACSHA1(token.ServerSigningKey); + token.ClientHmac = new HMACSHA1(token.ClientSigningKey); + } + break; + } + + default: + case SecurityPolicies.None: + { + break; + } + } + } + + /// + /// Secures the message using the security token. + /// + protected BufferCollection WriteSymmetricMessage( + uint messageType, + uint requestId, + ChannelToken token, + object messageBody, + bool isRequest, + out bool limitsExceeded) + { + limitsExceeded = false; + bool success = false; + BufferCollection chunksToProcess = null; + + try + { + // calculate chunk sizes. + int maxCipherTextSize = SendBufferSize - TcpMessageLimits.SymmetricHeaderSize; + int maxCipherBlocks = maxCipherTextSize / EncryptionBlockSize; + int maxPlainTextSize = maxCipherBlocks * EncryptionBlockSize; + int maxPayloadSize = maxPlainTextSize - SymmetricSignatureSize - 1 - TcpMessageLimits.SequenceHeaderSize; + int headerSize = TcpMessageLimits.SymmetricHeaderSize + TcpMessageLimits.SequenceHeaderSize; + + // write the body to stream. + ArraySegmentStream ostrm = new ArraySegmentStream( + BufferManager, + SendBufferSize, + headerSize, + maxPayloadSize); + + // check for encodeable body. + IEncodeable encodeable = messageBody as IEncodeable; + + if (encodeable != null) + { + // debug code used to verify that message aborts are handled correctly. + // int maxMessageSize = Quotas.MessageContext.MaxMessageSize; + // Quotas.MessageContext.MaxMessageSize = Int32.MaxValue; + + BinaryEncoder.EncodeMessage(encodeable, ostrm, Quotas.MessageContext); + + // Quotas.MessageContext.MaxMessageSize = maxMessageSize; + } + + // check for raw bytes. + ArraySegment? rawBytes = messageBody as ArraySegment?; + + if (rawBytes != null) + { + BinaryEncoder encoder = new BinaryEncoder(ostrm, Quotas.MessageContext); + encoder.WriteRawBytes(rawBytes.Value.Array, rawBytes.Value.Offset, rawBytes.Value.Count); + encoder.Close(); + } + + chunksToProcess = ostrm.GetBuffers("WriteSymmetricMessage"); + + // ensure there is at least one chunk. + if (chunksToProcess.Count == 0) + { + byte[] buffer = BufferManager.TakeBuffer(SendBufferSize, "WriteSymmetricMessage"); + chunksToProcess.Add(new ArraySegment(buffer, 0, 0)); + } + + BufferCollection chunksToSend = new BufferCollection(chunksToProcess.Capacity); + + int messageSize = 0; + + for (int ii = 0; ii < chunksToProcess.Count; ii++) + { + ArraySegment chunkToProcess = chunksToProcess[ii]; + + // nothing more to do if limits exceeded. + if (limitsExceeded) + { + BufferManager.ReturnBuffer(chunkToProcess.Array, "WriteSymmetricMessage"); + continue; + } + + MemoryStream strm = new MemoryStream(chunkToProcess.Array, 0, SendBufferSize); + BinaryEncoder encoder = new BinaryEncoder(strm, Quotas.MessageContext); + + // check if the message needs to be aborted. + if (MessageLimitsExceeded(isRequest, messageSize + chunkToProcess.Count - headerSize, ii + 1)) + { + encoder.WriteUInt32(null, messageType | TcpMessageType.Abort); + + // replace the body in the chunk with an error message. + BinaryEncoder errorEncoder = new BinaryEncoder( + chunkToProcess.Array, + chunkToProcess.Offset, + chunkToProcess.Count, + Quotas.MessageContext); + + WriteErrorMessageBody(errorEncoder, (isRequest) ? StatusCodes.BadRequestTooLarge : StatusCodes.BadResponseTooLarge); + + int size = errorEncoder.Close(); + chunkToProcess = new ArraySegment(chunkToProcess.Array, chunkToProcess.Offset, size); + + limitsExceeded = true; + } + + // check if the message is complete. + else if (ii == chunksToProcess.Count - 1) + { + encoder.WriteUInt32(null, messageType | TcpMessageType.Final); + } + + // more chunks to follow. + else + { + encoder.WriteUInt32(null, messageType | TcpMessageType.Intermediate); + } + + int count = 0; + + count += TcpMessageLimits.SequenceHeaderSize; + count += chunkToProcess.Count; + count += SymmetricSignatureSize; + + // calculate the padding. + int padding = 0; + + if (SecurityMode == MessageSecurityMode.SignAndEncrypt) + { + // reserve one byte for the padding size. + count++; + + if (count % EncryptionBlockSize != 0) + { + padding = EncryptionBlockSize - (count % EncryptionBlockSize); + } + + count += padding; + } + + count += TcpMessageLimits.SymmetricHeaderSize; + + encoder.WriteUInt32(null, (uint)count); + encoder.WriteUInt32(null, ChannelId); + encoder.WriteUInt32(null, token.TokenId); + + uint sequenceNumber = GetNewSequenceNumber(); + encoder.WriteUInt32(null, sequenceNumber); + + encoder.WriteUInt32(null, requestId); + + // skip body. + strm.Seek(chunkToProcess.Count, SeekOrigin.Current); + + // update message size count. + messageSize += chunkToProcess.Count; + + // write padding. + if (SecurityMode == MessageSecurityMode.SignAndEncrypt) + { + for (int jj = 0; jj <= padding; jj++) + { + encoder.WriteByte(null, (byte)padding); + } + } + + if (SecurityMode != MessageSecurityMode.None) + { + // calculate and write signature. + byte[] signature = Sign(token, new ArraySegment(chunkToProcess.Array, 0, encoder.Position), isRequest); + + if (signature != null) + { + encoder.WriteRawBytes(signature, 0, signature.Length); + } + } + + if (SecurityMode == MessageSecurityMode.SignAndEncrypt) + { + // encrypt the data. + ArraySegment dataToEncrypt = new ArraySegment(chunkToProcess.Array, TcpMessageLimits.SymmetricHeaderSize, encoder.Position - TcpMessageLimits.SymmetricHeaderSize); + Encrypt(token, dataToEncrypt, isRequest); + } + + // add the header into chunk. + chunksToSend.Add(new ArraySegment(chunkToProcess.Array, 0, encoder.Position)); + } + + // ensure the buffers don't get cleaned up on exit. + success = true; + return chunksToSend; + } + finally + { + if (!success) + { + if (chunksToProcess != null) + { + chunksToProcess.Release(BufferManager, "WriteSymmetricMessage"); + } + } + } + } + + /// + /// Decrypts and verifies a message chunk. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "messageType"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "messageSize")] + protected ArraySegment ReadSymmetricMessage( + ArraySegment buffer, + bool isRequest, + out ChannelToken token, + out uint requestId, + out uint sequenceNumber) + { + BinaryDecoder decoder = new BinaryDecoder(buffer.Array, buffer.Offset, buffer.Count, Quotas.MessageContext); + + uint messageType = decoder.ReadUInt32(null); + uint messageSize = decoder.ReadUInt32(null); + uint channelId = decoder.ReadUInt32(null); + uint tokenId = decoder.ReadUInt32(null); + + // ensure the channel is valid. + if (channelId != ChannelId) + { + throw ServiceResultException.Create( + StatusCodes.BadTcpSecureChannelUnknown, + "SecureChannelId is not known. ChanneId={0}, CurrentChannelId={1}", + channelId, + ChannelId); + } + + // check for a message secured with the new token. + if (RenewedToken != null && RenewedToken.TokenId == tokenId) + { + ActivateToken(RenewedToken); + } + + // check if activation of the new token should be forced. + if (RenewedToken != null && CurrentToken.ActivationRequired) + { + ActivateToken(RenewedToken); + + Utils.Trace("Token #{0} activated forced.", CurrentToken.TokenId); + } + + // check for valid token. + ChannelToken currentToken = CurrentToken; + + if (currentToken == null) + { + throw new ServiceResultException(StatusCodes.BadSecureChannelClosed); + } + + // find the token. + if (currentToken.TokenId != tokenId && PreviousToken != null && PreviousToken.TokenId != tokenId) + { + throw ServiceResultException.Create( + StatusCodes.BadTcpSecureChannelUnknown, + "TokenId is not known. ChanneId={0}, TokenId={1}, CurrentTokenId={2}, PreviousTokenId={3}", + channelId, + tokenId, + currentToken.TokenId, + (PreviousToken != null) ? (int)PreviousToken.TokenId : -1); + } + + token = currentToken; + + // check for a message secured with the token before it expired. + if (PreviousToken != null && PreviousToken.TokenId == tokenId) + { + token = PreviousToken; + } + + // check if token has expired. + if (token.Expired) + { + throw ServiceResultException.Create(StatusCodes.BadTcpSecureChannelUnknown, "Token #{0} has expired. Lifetime={1:HH:mm:ss.fff}", token.TokenId, token.CreatedAt); + } + + int headerSize = decoder.Position; + + if (SecurityMode == MessageSecurityMode.SignAndEncrypt) + { + // decrypt the message. + Decrypt(token, new ArraySegment(buffer.Array, buffer.Offset + headerSize, buffer.Count - headerSize), isRequest); + } + + if (SecurityMode != MessageSecurityMode.None) + { + // extract signature. + byte[] signature = new byte[SymmetricSignatureSize]; + + for (int ii = 0; ii < SymmetricSignatureSize; ii++) + { + signature[ii] = buffer.Array[buffer.Offset + buffer.Count - SymmetricSignatureSize + ii]; + } + + // verify the signature. + if (!Verify(token, signature, new ArraySegment(buffer.Array, buffer.Offset, buffer.Count - SymmetricSignatureSize), isRequest)) + { + Utils.Trace("Could not verify signature on message."); + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Could not verify the signature on the message."); + } + } + + int paddingCount = 0; + + if (SecurityMode == MessageSecurityMode.SignAndEncrypt) + { + // verify padding. + int paddingStart = buffer.Offset + buffer.Count - SymmetricSignatureSize - 1; + paddingCount = buffer.Array[paddingStart]; + + for (int ii = paddingStart - paddingCount; ii < paddingStart; ii++) + { + if (buffer.Array[ii] != paddingCount) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Could not verify the padding in the message."); + } + } + + // add byte for size. + paddingCount++; + } + + // extract request id and sequence number. + sequenceNumber = decoder.ReadUInt32(null); + requestId = decoder.ReadUInt32(null); + + // return an the data contained in the message. + int startOfBody = buffer.Offset + TcpMessageLimits.SymmetricHeaderSize + TcpMessageLimits.SequenceHeaderSize; + int sizeOfBody = buffer.Count - TcpMessageLimits.SymmetricHeaderSize - TcpMessageLimits.SequenceHeaderSize - paddingCount - SymmetricSignatureSize; + + return new ArraySegment(buffer.Array, startOfBody, sizeOfBody); + } + + /// + /// Returns the symmetric signature for the data. + /// + protected byte[] Sign(ChannelToken token, ArraySegment dataToSign, bool useClientKeys) + { + switch (SecurityPolicyUri) + { + default: + case SecurityPolicies.None: + { + return null; + } + + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return SymmetricSign(token, dataToSign, useClientKeys); + } + } + } + + /// + /// Returns the symmetric signature for the data. + /// + protected bool Verify( + ChannelToken token, + byte[] signature, + ArraySegment dataToVerify, + bool useClientKeys) + { + // verify signature. + switch (SecurityPolicyUri) + { + case SecurityPolicies.None: + { + return true; + } + + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return SymmetricVerify(token, signature, dataToVerify, useClientKeys); + } + + default: + { + return false; + } + } + } + + /// + /// Decrypts the data in a buffer using symmetric encryption. + /// + protected void Encrypt(ChannelToken token, ArraySegment dataToEncrypt, bool useClientKeys) + { + switch (SecurityPolicyUri) + { + default: + case SecurityPolicies.None: + { + break; + } + + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + SymmetricEncrypt(token, dataToEncrypt, useClientKeys); + break; + } + } + } + + /// + /// Decrypts the data in a buffer using symmetric encryption. + /// + protected void Decrypt(ChannelToken token, ArraySegment dataToDecrypt, bool useClientKeys) + { + switch (SecurityPolicyUri) + { + default: + case SecurityPolicies.None: + { + break; + } + + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Basic128Rsa15: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + SymmetricDecrypt(token, dataToDecrypt, useClientKeys); + break; + } + } + } + + + /// + /// Signs the message using SHA1 HMAC + /// + private static byte[] SymmetricSign(ChannelToken token, ArraySegment dataToSign, bool useClientKeys) + { + // get HMAC object. + HMAC hmac = (useClientKeys) ? token.ClientHmac : token.ServerHmac; + + // compute hash. + MemoryStream istrm = new MemoryStream(dataToSign.Array, dataToSign.Offset, dataToSign.Count, false); + byte[] signature = hmac.ComputeHash(istrm); + istrm.Dispose(); + + // return signature. + return signature; + } + + /// + /// Verifies a HMAC for a message. + /// + private static bool SymmetricVerify( + ChannelToken token, + byte[] signature, + ArraySegment dataToVerify, + bool useClientKeys) + { + // get HMAC object. + HMAC hmac = (useClientKeys) ? token.ClientHmac : token.ServerHmac; + + // compute hash. + MemoryStream istrm = new MemoryStream(dataToVerify.Array, dataToVerify.Offset, dataToVerify.Count, false); + byte[] computedSignature = hmac.ComputeHash(istrm); + istrm.Dispose(); + + // compare signatures. + for (int ii = 0; ii < signature.Length; ii++) + { + if (computedSignature[ii] != signature[ii]) + { + string messageType = new UTF8Encoding().GetString(dataToVerify.Array, dataToVerify.Offset, 4); + int messageLength = BitConverter.ToInt32(dataToVerify.Array, dataToVerify.Offset + 4); + string expectedSignature = Utils.ToHexString(computedSignature); + string actualSignature = Utils.ToHexString(signature); + + var message = new StringBuilder(); + message.AppendLine("Could not validate signature."); + message.AppendLine("ChannelId={0}, TokenId={1}, MessageType={2}, Length={3}"); + message.AppendLine("ExpectedSignature={4}"); + message.AppendLine("ActualSignature={5}"); + Utils.Trace(message.ToString(), token.ChannelId, token.TokenId, + messageType, messageLength, expectedSignature, actualSignature); + + return false; + } + } + + return true; + } + + /// + /// Encrypts a message using a symmetric algorithm. + /// + private static void SymmetricEncrypt( + ChannelToken token, + ArraySegment dataToEncrypt, + bool useClientKeys) + { + SymmetricAlgorithm encryptingKey = (useClientKeys) ? token.ClientEncryptor : token.ServerEncryptor; + + if (encryptingKey == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Token missing symmetric key object."); + } + + using (ICryptoTransform encryptor = encryptingKey.CreateEncryptor()) + { + byte[] blockToEncrypt = dataToEncrypt.Array; + + int start = dataToEncrypt.Offset; + int count = dataToEncrypt.Count; + + if (count % encryptor.InputBlockSize != 0) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Input data is not an even number of encryption blocks."); + } + + encryptor.TransformBlock(blockToEncrypt, start, count, blockToEncrypt, start); + } + } + + /// + /// Decrypts a message using a symmetric algorithm. + /// + private static void SymmetricDecrypt( + ChannelToken token, + ArraySegment dataToDecrypt, + bool useClientKeys) + { + // get the decrypting key. + SymmetricAlgorithm decryptingKey = (useClientKeys) ? token.ClientEncryptor : token.ServerEncryptor; + + if (decryptingKey == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Token missing symmetric key object."); + } + + using (ICryptoTransform decryptor = decryptingKey.CreateDecryptor()) + { + byte[] blockToDecrypt = dataToDecrypt.Array; + + int start = dataToDecrypt.Offset; + int count = dataToDecrypt.Count; + + if (count % decryptor.InputBlockSize != 0) + { + throw ServiceResultException.Create(StatusCodes.BadSecurityChecksFailed, "Input data is not an even number of encryption blocks."); + } + + decryptor.TransformBlock(blockToDecrypt, start, count, blockToDecrypt, start); + } + } + #endregion + + #region Private Fields + private ChannelToken m_currentToken; + private ChannelToken m_previousToken; + private ChannelToken m_renewedToken; + private int m_hmacHashSize; + private int m_signatureKeySize; + private int m_encryptionKeySize; + private int m_encryptionBlockSize; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs new file mode 100644 index 00000000..ee6a31f9 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs @@ -0,0 +1,831 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + + /// + /// Manages the server side of a UA TCP channel. + /// + public partial class UaSCUaBinaryChannel : IMessageSink, IDisposable + { + #region Constructors + + /// + /// Attaches the object to an existing socket. + /// + public UaSCUaBinaryChannel( + string contextId, + BufferManager bufferManager, + ChannelQuotas quotas, + X509Certificate2 serverCertificate, + EndpointDescriptionCollection endpoints, + MessageSecurityMode securityMode, + string securityPolicyUri) + : + this(contextId, bufferManager, quotas, serverCertificate, null, endpoints, securityMode, securityPolicyUri) + { } + + /// + /// Attaches the object to an existing socket. + /// + public UaSCUaBinaryChannel( + string contextId, + BufferManager bufferManager, + ChannelQuotas quotas, + X509Certificate2 serverCertificate, + X509Certificate2Collection serverCertificateChain, + EndpointDescriptionCollection endpoints, + MessageSecurityMode securityMode, + string securityPolicyUri) + { + if (bufferManager == null) throw new ArgumentNullException(nameof(bufferManager)); + if (quotas == null) throw new ArgumentNullException(nameof(quotas)); + + // create a unique contex if none provided. + m_contextId = contextId; + + if (String.IsNullOrEmpty(m_contextId)) + { + m_contextId = Guid.NewGuid().ToString(); + } + + // secuirty turned off if message security mode is set to none. + if (securityMode == MessageSecurityMode.None) + { + securityPolicyUri = SecurityPolicies.None; + } + + if (securityMode != MessageSecurityMode.None) + { + if (serverCertificate == null) throw new ArgumentNullException(nameof(serverCertificate)); + + if (serverCertificate.RawData.Length > TcpMessageLimits.MaxCertificateSize) + { + throw new ArgumentException( + Utils.Format("The DER encoded certificate may not be more than {0} bytes.", TcpMessageLimits.MaxCertificateSize), + nameof(serverCertificate)); + } + } + + if (new UTF8Encoding().GetByteCount(securityPolicyUri) > TcpMessageLimits.MaxSecurityPolicyUriSize) + { + throw new ArgumentException( + Utils.Format("UTF-8 form of the security policy URI may not be more than {0} bytes.", TcpMessageLimits.MaxSecurityPolicyUriSize), + nameof(securityPolicyUri)); + } + + m_bufferManager = bufferManager; + m_quotas = quotas; + m_serverCertificate = serverCertificate; + m_serverCertificateChain = serverCertificateChain; + m_endpoints = endpoints; + m_securityMode = securityMode; + m_securityPolicyUri = securityPolicyUri; + m_discoveryOnly = false; + m_uninitialized = true; + + m_state = TcpChannelState.Closed; + m_receiveBufferSize = quotas.MaxBufferSize; + m_sendBufferSize = quotas.MaxBufferSize; + + if (m_receiveBufferSize < TcpMessageLimits.MinBufferSize) + { + m_receiveBufferSize = TcpMessageLimits.MinBufferSize; + } + + if (m_receiveBufferSize > TcpMessageLimits.MaxBufferSize) + { + m_receiveBufferSize = TcpMessageLimits.MaxBufferSize; + } + + if (m_sendBufferSize < TcpMessageLimits.MinBufferSize) + { + m_sendBufferSize = TcpMessageLimits.MinBufferSize; + } + + if (m_sendBufferSize > TcpMessageLimits.MaxBufferSize) + { + m_sendBufferSize = TcpMessageLimits.MaxBufferSize; + } + + m_maxRequestMessageSize = quotas.MaxMessageSize; + m_maxResponseMessageSize = quotas.MaxMessageSize; + + CalculateSymmetricKeySizes(); + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // nothing to do. + } + } + #endregion + + #region Public Methods + /// + /// The identifier assigned to the channel by the server. + /// + public uint Id + { + get + { + lock (m_lock) + { + return m_channelId; + } + } + } + + /// + /// The globally unique identifier assigned to the channel by the server. + /// + public string GlobalChannelId + { + get + { + lock (m_lock) + { + return m_globalChannelId; + } + } + } + + /// + /// Raised when the state of the channel changes. + /// + public void SetStateChangedCallback(TcpChannelStateEventHandler callback) + { + lock (m_lock) + { + m_StateChanged = callback; + } + } + #endregion + + #region Channel State Functions + /// + /// Reports that the channel state has changed (in another thread). + /// + protected void ChannelStateChanged(TcpChannelState state, ServiceResult reason) + { + Task.Run(() => { + m_StateChanged?.Invoke(this, state, reason); + }); + } + + /// + /// Returns a new sequence number. + /// + protected uint GetNewSequenceNumber() + { + return Utils.IncrementIdentifier(ref m_sequenceNumber); + } + + /// + /// Resets the sequence number after a connect. + /// + protected void ResetSequenceNumber(uint sequenceNumber) + { + m_remoteSequenceNumber = sequenceNumber; + } + + /// + /// Checks if the sequence number is valid. + /// + protected bool VerifySequenceNumber(uint sequenceNumber, string context) + { + // everything ok if new number is greater. + if (sequenceNumber > m_remoteSequenceNumber) + { + m_remoteSequenceNumber = sequenceNumber; + return true; + } + + // check for a valid rollover. + if (m_remoteSequenceNumber > TcpMessageLimits.MinSequenceNumber && sequenceNumber < TcpMessageLimits.MaxRolloverSequenceNumber) + { + // only one rollover per token is allowed. + if (!m_sequenceRollover) + { + m_sequenceRollover = true; + m_remoteSequenceNumber = sequenceNumber; + return true; + } + } + + Utils.Trace((int)Utils.TraceMasks.Error, "{0}: Channel {1} - Duplicate sequence number: {2} <= {3}", context, this.ChannelId, sequenceNumber, m_remoteSequenceNumber); + return false; + } + + /// + /// Saves an intermediate chunk for an incoming message. + /// + protected void SaveIntermediateChunk(uint requestId, ArraySegment chunk) + { + if (m_partialMessageChunks == null) + { + m_partialMessageChunks = new BufferCollection(); + } + + if (m_partialRequestId != requestId) + { + if (m_partialMessageChunks.Count > 0) + { + Utils.Trace("WARNING - Discarding unprocessed message chunks for Request #{0}", m_partialRequestId); + } + + m_partialMessageChunks.Release(BufferManager, "SaveIntermediateChunk"); + } + + if (requestId != 0) + { + m_partialRequestId = requestId; + m_partialMessageChunks.Add(chunk); + } + } + + /// + /// Returns the chunks saved for message. + /// + protected BufferCollection GetSavedChunks(uint requestId, ArraySegment chunk) + { + SaveIntermediateChunk(requestId, chunk); + BufferCollection savedChunks = m_partialMessageChunks; + m_partialMessageChunks = null; + return savedChunks; + } + #endregion + + #region IMessageSink Members + /// + /// Processes an incoming message. + /// + public virtual void OnMessageReceived(IMessageSocket source, ArraySegment message) + { + lock (DataLock) + { + try + { + uint messageType = BitConverter.ToUInt32(message.Array, message.Offset); + + Utils.TraceDebug("{1} Message Received: {0} bytes", message.Count, messageType); + + if (!HandleIncomingMessage(messageType, message)) + { + BufferManager.ReturnBuffer(message.Array, "OnMessageReceived"); + } + } + catch (Exception e) + { + HandleMessageProcessingError(e, StatusCodes.BadTcpInternalError, "An error occurred receiving a message."); + BufferManager.ReturnBuffer(message.Array, "OnMessageReceived"); + } + } + } + + #region Incoming Message Support Functions + /// + /// Processes an incoming message. + /// + /// True if the implementor takes ownership of the buffer. + protected virtual bool HandleIncomingMessage(uint messageType, ArraySegment messageChunk) + { + return false; + } + + /// + /// Handles an error parsing or verifying a message. + /// + protected void HandleMessageProcessingError(Exception e, uint defaultCode, string format, params object[] args) + { + HandleMessageProcessingError(ServiceResult.Create(e, defaultCode, format, args)); + } + + /// + /// Handles an error parsing or verifying a message. + /// + protected void HandleMessageProcessingError(uint statusCode, string format, params object[] args) + { + HandleMessageProcessingError(ServiceResult.Create(statusCode, format, args)); + } + + /// + /// Handles an error parsing or verifying a message. + /// + protected virtual void HandleMessageProcessingError(ServiceResult result) + { + } + #endregion + + /// + /// Handles a receive error. + /// + public virtual void OnReceiveError(IMessageSocket source, ServiceResult result) + { + lock (DataLock) + { + HandleSocketError(result); + } + } + + /// + /// Handles a socket error. + /// + protected virtual void HandleSocketError(ServiceResult result) + { + } + #endregion + + #region Outgoing Message Support Functions + /// + /// Handles a write complete event. + /// + protected virtual void OnWriteComplete(object sender, IMessageSocketAsyncEventArgs e) + { + lock (DataLock) + { + ServiceResult error = ServiceResult.Good; + try + { + Utils.TraceDebug("Bytes written: {0}", e.BytesTransferred); + + if (e.BytesTransferred == 0) + { + error = ServiceResult.Create(StatusCodes.BadConnectionClosed, "The socket was closed by the remote application."); + } + if (e.Buffer != null) + { + BufferManager.ReturnBuffer(e.Buffer, "OnWriteComplete"); + } + HandleWriteComplete((BufferCollection)e.BufferList, e.UserToken, e.BytesTransferred, error); + } + catch (Exception ex) + { + if (ex is InvalidOperationException) + { + // suppress chained exception in HandleWriteComplete/ReturnBuffer + e.BufferList = null; + } + error = ServiceResult.Create(ex, StatusCodes.BadTcpInternalError, "Unexpected error during write operation."); + HandleWriteComplete((BufferCollection)e.BufferList, e.UserToken, e.BytesTransferred, error); + } + } + + e.Dispose(); + } + + /// + /// Queues a write request. + /// + protected void BeginWriteMessage(ArraySegment buffer, object state) + { + ServiceResult error = ServiceResult.Good; + IMessageSocketAsyncEventArgs args = m_socket.MessageSocketEventArgs(); + + try + { + args.SetBuffer(buffer.Array, buffer.Offset, buffer.Count); + args.Completed += OnWriteComplete; + args.UserToken = state; + if (!m_socket.SendAsync(args)) + { + // I/O completed synchronously + if (args.IsSocketError || (args.BytesTransferred < buffer.Count)) + { + error = ServiceResult.Create(StatusCodes.BadConnectionClosed, args.SocketErrorString); + HandleWriteComplete(null, state, args.BytesTransferred, error); + args.Dispose(); + } + else + { + // success, call Complete + OnWriteComplete(null, args); + } + } + } + catch (Exception ex) + { + error = ServiceResult.Create(ex, StatusCodes.BadTcpInternalError, "Unexpected error during write operation."); + HandleWriteComplete(null, state, args.BytesTransferred, error); + args.Dispose(); + } + } + + /// + /// Queues a write request. + /// + protected void BeginWriteMessage(BufferCollection buffers, object state) + { + ServiceResult error = ServiceResult.Good; + IMessageSocketAsyncEventArgs args = m_socket.MessageSocketEventArgs(); + + try + { + args.BufferList = buffers; + args.Completed += OnWriteComplete; + args.UserToken = state; + if (m_socket == null || + !m_socket.SendAsync(args)) + { + // I/O completed synchronously + if (args.IsSocketError || (args.BytesTransferred < buffers.TotalSize)) + { + error = ServiceResult.Create(StatusCodes.BadConnectionClosed, args.SocketErrorString); + HandleWriteComplete(buffers, state, args.BytesTransferred, error); + args.Dispose(); + } + else + { + OnWriteComplete(null, args); + } + } + } + catch (Exception ex) + { + error = ServiceResult.Create(ex, StatusCodes.BadTcpInternalError, "Unexpected error during write operation."); + HandleWriteComplete(buffers, state, args.BytesTransferred, error); + args.Dispose(); + } + } + + /// + /// Called after a write operation completes. + /// + protected virtual void HandleWriteComplete(BufferCollection buffers, object state, int bytesWritten, ServiceResult result) + { + if (buffers != null) + { + buffers.Release(BufferManager, "WriteOperation"); + } + } + + /// + /// Writes an error to a stream. + /// + protected static void WriteErrorMessageBody(BinaryEncoder encoder, ServiceResult error) + { + string reason = (error.LocalizedText != null) ? error.LocalizedText.Text : null; + + // check that length is not exceeded. + if (reason != null) + { + UTF8Encoding encoding = new UTF8Encoding(); + + if (encoding.GetByteCount(reason) > TcpMessageLimits.MaxErrorReasonLength) + { + reason = reason.Substring(0, TcpMessageLimits.MaxErrorReasonLength / encoding.GetMaxByteCount(1)); + } + } + + encoder.WriteStatusCode(null, error.StatusCode); + encoder.WriteString(null, reason); + } + + /// + /// Reads an error from a stream. + /// + protected static ServiceResult ReadErrorMessageBody(BinaryDecoder decoder) + { + // read the status code. + uint statusCode = decoder.ReadUInt32(null); + + string reason = null; + + // ensure the reason does not exceed the limits in the protocol. + int reasonLength = decoder.ReadInt32(null); + + if (reasonLength > 0 && reasonLength < TcpMessageLimits.MaxErrorReasonLength) + { + byte[] reasonBytes = new byte[reasonLength]; + + for (int ii = 0; ii < reasonLength; ii++) + { + reasonBytes[ii] = decoder.ReadByte(null); + } + + reason = new UTF8Encoding().GetString(reasonBytes, 0, reasonLength); + } + + return ServiceResult.Create(statusCode, "Error received from remote host: {0}", reason); + } + + /// + /// Checks if the message limits have been exceeded. + /// + protected bool MessageLimitsExceeded(bool isRequest, int messageSize, int chunkCount) + { + if (isRequest) + { + if (this.MaxRequestChunkCount > 0 && this.MaxRequestChunkCount <= chunkCount) + { + return true; + } + + if (this.MaxRequestMessageSize > 0 && this.MaxRequestMessageSize < messageSize) + { + return true; + } + } + else + { + if (this.MaxResponseChunkCount > 0 && this.MaxResponseChunkCount <= chunkCount) + { + return true; + } + + if (this.MaxResponseMessageSize > 0 && this.MaxResponseMessageSize < messageSize) + { + return true; + } + } + + return false; + } + + /// + /// Updates the message type stored in the message header. + /// + protected static void UpdateMessageType(byte[] buffer, int offset, uint messageType) + { + buffer[offset++] = (byte)((messageType & 0x000000FF)); + buffer[offset++] = (byte)((messageType & 0x0000FF00) >> 8); + buffer[offset++] = (byte)((messageType & 0x00FF0000) >> 16); + buffer[offset] = (byte)((messageType & 0xFF000000) >> 24); + } + + /// + /// Updates the message size stored in the message header. + /// + protected static void UpdateMessageSize(byte[] buffer, int offset, int messageSize) + { + if (offset >= Int32.MaxValue - 4) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + offset += 4; + + buffer[offset++] = (byte)((messageSize & 0x000000FF)); + buffer[offset++] = (byte)((messageSize & 0x0000FF00) >> 8); + buffer[offset++] = (byte)((messageSize & 0x00FF0000) >> 16); + buffer[offset] = (byte)((messageSize & 0xFF000000) >> 24); + } + #endregion + + #region Protected Properties + /// + /// The synchronization object for the channel. + /// + protected object DataLock => m_lock; + + /// + /// The socket for the channel. + /// + protected internal IMessageSocket Socket + { + get { return m_socket; } + set { m_socket = value; } + } + + /// + /// Whether the client channel uses a reverse hello socket. + /// + protected internal bool ReverseSocket { get; set; } + + /// + /// The buffer manager for the channel. + /// + protected BufferManager BufferManager => m_bufferManager; + + /// + /// The resource quotas for the channel. + /// + protected ChannelQuotas Quotas => m_quotas; + + /// + /// The size of the receive buffer. + /// + protected int ReceiveBufferSize + { + get { return m_receiveBufferSize; } + set { m_receiveBufferSize = value; } + } + + /// + /// The size of the send buffer. + /// + protected int SendBufferSize + { + get { return m_sendBufferSize; } + set { m_sendBufferSize = value; } + } + + /// + /// The maximum size for a request message. + /// + protected int MaxRequestMessageSize + { + get { return m_maxRequestMessageSize; } + set { m_maxRequestMessageSize = value; } + } + + /// + /// The maximum number of chunks per request message. + /// + protected int MaxRequestChunkCount + { + get { return m_maxRequestChunkCount; } + set { m_maxRequestChunkCount = value; } + } + + /// + /// The maximum size for a response message. + /// + protected int MaxResponseMessageSize + { + get { return m_maxResponseMessageSize; } + set { m_maxResponseMessageSize = value; } + } + + /// + /// The maximum number of chunks per response message. + /// + protected int MaxResponseChunkCount + { + get { return m_maxResponseChunkCount; } + set { m_maxResponseChunkCount = value; } + } + + /// + /// The state of the channel. + /// + protected TcpChannelState State + { + get { return m_state; } + + set + { + if (m_state != value) + { + Utils.Trace("Channel {0} in {1} state.", ChannelId, value); + } + + m_state = value; + } + } + + /// + /// The identifier assigned to the channel by the server. + /// + protected uint ChannelId + { + get + { + return m_channelId; + } + + set + { + m_channelId = value; + m_globalChannelId = Utils.Format("{0}-{1}", m_contextId, m_channelId); + } + } + #endregion + + #region WriteOperation Class + /// + /// A class that stores the state for a write operation. + /// + protected class WriteOperation : ChannelAsyncOperation + { + /// + /// Initializes the object with a callback + /// + public WriteOperation(int timeout, AsyncCallback callback, object asyncState) + : + base(timeout, callback, asyncState) + { + } + + /// + /// The request id associated with the operation. + /// + public uint RequestId + { + get { return m_requestId; } + set { m_requestId = value; } + } + + /// + /// The body of the request or response associated with the operation. + /// + public IEncodeable MessageBody + { + get { return m_messageBody; } + set { m_messageBody = value; } + } + + #region Private Fields + private uint m_requestId; + private IEncodeable m_messageBody; + #endregion + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private IMessageSocket m_socket; + private BufferManager m_bufferManager; + private ChannelQuotas m_quotas; + private int m_receiveBufferSize; + private int m_sendBufferSize; + private int m_maxRequestMessageSize; + private int m_maxResponseMessageSize; + private int m_maxRequestChunkCount; + private int m_maxResponseChunkCount; + private string m_contextId; + + private TcpChannelState m_state; + private uint m_channelId; + private string m_globalChannelId; + private long m_sequenceNumber; + private uint m_remoteSequenceNumber; + private bool m_sequenceRollover; + private uint m_partialRequestId; + private BufferCollection m_partialMessageChunks; + + private TcpChannelStateEventHandler m_StateChanged; + #endregion + } + + /// + /// The possible channel states. + /// + public enum TcpChannelState + { + /// + /// The channel is closed. + /// + Closed, + + /// + /// The channel is closing. + /// + Closing, + + /// + /// The channel establishing a network connection. + /// + Connecting, + + /// + /// The channel negotiating security parameters. + /// + Opening, + + /// + /// The channel is open and accepting messages. + /// + Open, + + /// + /// The channel is in a error state. + /// + Faulted + } + + /// + /// Used to report changes to the channel state. + /// + public delegate void TcpChannelStateEventHandler(UaSCUaBinaryChannel channel, TcpChannelState state, ServiceResult error); +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs new file mode 100644 index 00000000..d37c3745 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs @@ -0,0 +1,1458 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + + +namespace Opc.Ua.Bindings +{ + + /// + /// Manages the client side of a UA TCP channel. + /// + public class UaSCUaBinaryClientChannel : UaSCUaBinaryChannel + { + #region Constructors + /// + /// Creates a channel for for a client. + /// + public UaSCUaBinaryClientChannel( + string contextId, + BufferManager bufferManager, + IMessageSocketFactory socketFactory, + ChannelQuotas quotas, + X509Certificate2 clientCertificate, + X509Certificate2 serverCertificate, + EndpointDescription endpoint) + : + this(contextId, bufferManager, socketFactory, quotas, clientCertificate, null, serverCertificate, endpoint) + { + } + + /// + /// Creates a channel for for a client. + /// + public UaSCUaBinaryClientChannel( + string contextId, + BufferManager bufferManager, + IMessageSocketFactory socketFactory, + ChannelQuotas quotas, + X509Certificate2 clientCertificate, + X509Certificate2Collection clientCertificateChain, + X509Certificate2 serverCertificate, + EndpointDescription endpoint) + : + base( + contextId, + bufferManager, + quotas, + serverCertificate, + (endpoint != null) ? new EndpointDescriptionCollection(new EndpointDescription[] { endpoint }) : null, + (endpoint != null) ? endpoint.SecurityMode : MessageSecurityMode.None, + (endpoint != null) ? endpoint.SecurityPolicyUri : SecurityPolicies.None) + { + if (endpoint != null && endpoint.SecurityMode != MessageSecurityMode.None) + { + if (clientCertificate == null) throw new ArgumentNullException(nameof(clientCertificate)); + + if (clientCertificate.RawData.Length > TcpMessageLimits.MaxCertificateSize) + { + throw new ArgumentException( + Utils.Format("The DER encoded certificate may not be more than {0} bytes.", TcpMessageLimits.MaxCertificateSize), + nameof(clientCertificate)); + } + + ClientCertificate = clientCertificate; + ClientCertificateChain = clientCertificateChain; + } + + m_requests = new Dictionary(); + m_lastRequestId = 0; + m_ConnectCallback = new EventHandler(OnConnectComplete); + m_StartHandshake = new TimerCallback(OnScheduledHandshake); + m_HandshakeComplete = new AsyncCallback(OnHandshakeComplete); + m_socketFactory = socketFactory; + + // save the endpoint. + EndpointDescription = endpoint; + m_url = new Uri(endpoint.EndpointUrl); + } + #endregion + + #region IDisposable Members + /// + /// An overrideable version of the Dispose. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "m_handshakeTimer")] + protected override void Dispose(bool disposing) + { + m_waitBetweenReconnects = Timeout.Infinite; + + if (disposing) + { + Utils.SilentDispose(m_handshakeTimer); + m_handshakeTimer = null; + } + + base.Dispose(disposing); + } + #endregion + + #region Public Methods + /// + /// Creates a connection with the server. + /// + public IAsyncResult BeginConnect(Uri url, int timeout, AsyncCallback callback, object state) + { + if (url == null) throw new ArgumentNullException(nameof(url)); + if (timeout <= 0) throw new ArgumentException("Timeout must be greater than zero.", nameof(timeout)); + + Task task; + lock (DataLock) + { + if (State != TcpChannelState.Closed) + { + throw new InvalidOperationException("Channel is already connected."); + } + + m_url = url; + m_via = url; + + // check if configured to use a proxy. + if (EndpointDescription != null && EndpointDescription.ProxyUrl != null) + { + m_via = EndpointDescription.ProxyUrl; + } + + // do not attempt reconnect on failure. + m_waitBetweenReconnects = Timeout.Infinite; + + WriteOperation operation = BeginOperation(timeout, callback, state); + m_handshakeOperation = operation; + + State = TcpChannelState.Connecting; + if (ReverseSocket) + { + if (Socket != null) + { + // send the hello message as response to the reverse hello message. + SendHelloMessage(operation); + } + } + else + { + Socket = m_socketFactory.Create(this, BufferManager, Quotas.MaxBufferSize); + task = Task.Run(async () => + await (Socket?.BeginConnect( + m_via, m_ConnectCallback, operation, + new CancellationTokenSource(timeout).Token) ?? Task.FromResult(false))); + } + } + + return m_handshakeOperation; + } + + /// + /// Finishes a connect operation. + /// + public void EndConnect(IAsyncResult result) + { + var operation = result as WriteOperation; + if (operation == null) throw new ArgumentNullException(nameof(result)); + + try + { + operation.End(Int32.MaxValue); + Utils.Trace("CLIENTCHANNEL SOCKET CONNECTED: {0:X8}, ChannelId={1}", Socket.Handle, ChannelId); + } + catch (Exception e) + { + Shutdown(ServiceResult.Create(e, StatusCodes.BadTcpInternalError, "Fatal error during connect.")); + throw; + } + finally + { + OperationCompleted(operation); + } + } + + /// + /// Closes a connection with the server. + /// + public void Close(int timeout) + { + WriteOperation operation = null; + + lock (DataLock) + { + // nothing to do if the connection is already closed. + if (State == TcpChannelState.Closed) + { + return; + } + + // check if a handshake is in progress. + if (m_handshakeOperation != null && !m_handshakeOperation.IsCompleted) + { + m_handshakeOperation.Fault(ServiceResult.Create(StatusCodes.BadConnectionClosed, "Channel was closed by the user.")); + } + + Utils.Trace("Channel {0}: Close", ChannelId); + + // attempt a graceful shutdown. + if (State == TcpChannelState.Open) + { + State = TcpChannelState.Closing; + operation = BeginOperation(timeout, null, null); + SendCloseSecureChannelRequest(operation); + } + } + + // wait for the close to succeed. + if (operation != null) + { + try + { + operation.End(timeout, false); + } + catch (ServiceResultException e) + { + switch (e.StatusCode) + { + case StatusCodes.BadRequestInterrupted: + case StatusCodes.BadSecureChannelClosed: + { + break; + } + + default: + { + Utils.Trace(e, "Could not gracefully close the channel."); + break; + } + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not gracefully close the channel."); + } + } + + // shutdown. + Shutdown(StatusCodes.BadConnectionClosed); + } + + /// + /// Sends a request to the server. + /// + public IAsyncResult BeginSendRequest(IServiceRequest request, int timeout, AsyncCallback callback, object state) + { + if (request == null) + { + throw new ArgumentNullException(nameof(request)); + } + + if (timeout <= 0) + { + throw new ArgumentException("Timeout must be greater than zero.", nameof(timeout)); + } + + lock (DataLock) + { + bool firstCall = false; + WriteOperation operation = null; + + // check if this is the first call. + if (State == TcpChannelState.Closed) + { + if (m_queuedOperations == null) + { + firstCall = true; + m_queuedOperations = new List(); + } + } + + // queue operations until connect completes. + if (m_queuedOperations != null) + { + operation = BeginOperation(timeout, callback, state); + m_queuedOperations.Add(new QueuedOperation(operation, timeout, request)); + + if (firstCall) + { + BeginConnect(m_url, timeout, OnConnectOnDemandComplete, null); + } + + return operation; + } + + if (State != TcpChannelState.Open) + { + throw new ServiceResultException(StatusCodes.BadConnectionClosed); + } + + //Utils.Trace("Channel {0}: BeginSendRequest()", ChannelId); + + if (m_reconnecting) + { + throw ServiceResultException.Create(StatusCodes.BadRequestInterrupted, "Attempting to reconnect to the server."); + } + + // send request. + operation = BeginOperation(timeout, callback, state); + SendRequest(operation, timeout, request); + return operation; + } + } + + /// + /// Returns the response to a previously sent request. + /// + public IServiceResponse EndSendRequest(IAsyncResult result) + { + WriteOperation operation = result as WriteOperation; + + if (operation == null) + { + throw new ArgumentNullException(nameof(result)); + } + + try + { + operation.End(Int32.MaxValue); + } + finally + { + OperationCompleted(operation); + } + + return operation.MessageBody as IServiceResponse; + } + #endregion + + #region Connect/Reconnect Sequence + /// + /// Sends a Hello message. + /// + private void SendHelloMessage(WriteOperation operation) + { + Utils.Trace("Channel {0}: SendHelloMessage()", ChannelId); + + byte[] buffer = BufferManager.TakeBuffer(SendBufferSize, "SendHelloMessage"); + + try + { + MemoryStream ostrm = new MemoryStream(buffer, 0, SendBufferSize); + BinaryEncoder encoder = new BinaryEncoder(ostrm, Quotas.MessageContext); + + encoder.WriteUInt32(null, TcpMessageType.Hello); + encoder.WriteUInt32(null, 0); + encoder.WriteUInt32(null, 0); // ProtocolVersion + encoder.WriteUInt32(null, (uint)ReceiveBufferSize); + encoder.WriteUInt32(null, (uint)SendBufferSize); + encoder.WriteUInt32(null, (uint)MaxResponseMessageSize); + encoder.WriteUInt32(null, (uint)MaxResponseChunkCount); + + byte[] endpointUrl = new UTF8Encoding().GetBytes(m_url.ToString()); + + if (endpointUrl.Length > TcpMessageLimits.MaxEndpointUrlLength) + { + byte[] truncatedUrl = new byte[TcpMessageLimits.MaxEndpointUrlLength]; + Array.Copy(endpointUrl, truncatedUrl, TcpMessageLimits.MaxEndpointUrlLength); + endpointUrl = truncatedUrl; + } + + encoder.WriteByteString(null, endpointUrl); + + int size = encoder.Close(); + UpdateMessageSize(buffer, 0, size); + + BeginWriteMessage(new ArraySegment(buffer, 0, size), operation); + buffer = null; + } + finally + { + if (buffer != null) + { + BufferManager.ReturnBuffer(buffer, "SendHelloMessage"); + } + } + } + + /// + /// Processes an Acknowledge message. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "protocolVersion")] + private bool ProcessAcknowledgeMessage(ArraySegment messageChunk) + { + Utils.Trace("Channel {0}: ProcessAcknowledgeMessage()", ChannelId); + + // check state. + if (State != TcpChannelState.Connecting) + { + ForceReconnect(ServiceResult.Create(StatusCodes.BadTcpMessageTypeInvalid, "Server sent an unexpected acknowledge message.")); + return false; + } + + // check if operation was abandoned. + if (m_handshakeOperation == null) + { + return false; + } + + // read buffer sizes. + MemoryStream istrm = new MemoryStream(messageChunk.Array, messageChunk.Offset, messageChunk.Count); + BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext); + + istrm.Seek(TcpMessageLimits.MessageTypeAndSize, SeekOrigin.Current); + + try + { + uint protocolVersion = decoder.ReadUInt32(null); + SendBufferSize = (int)decoder.ReadUInt32(null); + ReceiveBufferSize = (int)decoder.ReadUInt32(null); + int maxMessageSize = (int)decoder.ReadUInt32(null); + int maxChunkCount = (int)decoder.ReadUInt32(null); + + // update the max message size. + if (maxMessageSize > 0 && maxMessageSize < MaxRequestMessageSize) + { + MaxRequestMessageSize = (int)maxMessageSize; + } + + if (MaxRequestMessageSize < SendBufferSize) + { + MaxRequestMessageSize = SendBufferSize; + } + + // update the max chunk count. + if (maxChunkCount > 0 && maxChunkCount < MaxRequestChunkCount) + { + MaxRequestChunkCount = (int)maxChunkCount; + } + } + finally + { + decoder.Close(); + } + + // valdiate buffer sizes. + if (ReceiveBufferSize < TcpMessageLimits.MinBufferSize) + { + m_handshakeOperation.Fault(StatusCodes.BadTcpNotEnoughResources, "Server receive buffer size is too small ({0} bytes).", ReceiveBufferSize); + return false; + } + + if (SendBufferSize < TcpMessageLimits.MinBufferSize) + { + m_handshakeOperation.Fault(StatusCodes.BadTcpNotEnoughResources, "Server send buffer size is too small ({0} bytes).", SendBufferSize); + return false; + } + + // ready to open the channel. + State = TcpChannelState.Opening; + + try + { + // check if reconnecting after a socket failure. + if (CurrentToken != null) + { + SendOpenSecureChannelRequest(true); + return false; + } + + // open a new connection. + SendOpenSecureChannelRequest(false); + } + catch (Exception e) + { + m_handshakeOperation.Fault(e, StatusCodes.BadTcpInternalError, "Could not send an Open Secure Channel request."); + } + + return false; + } + + /// + /// Sends an OpenSecureChannel request. + /// + private void SendOpenSecureChannelRequest(bool renew) + { + // create a new token. + ChannelToken token = CreateToken(); + token.ClientNonce = CreateNonce(); + + // construct the request. + OpenSecureChannelRequest request = new OpenSecureChannelRequest(); + request.RequestHeader.Timestamp = DateTime.UtcNow; + + request.RequestType = (renew) ? SecurityTokenRequestType.Renew : SecurityTokenRequestType.Issue; + request.SecurityMode = SecurityMode; + request.ClientNonce = token.ClientNonce; + request.RequestedLifetime = (uint)Quotas.SecurityTokenLifetime; + + // encode the request. + byte[] buffer = BinaryEncoder.EncodeMessage(request, Quotas.MessageContext); + + // write the asymmetric message. + BufferCollection chunksToSend = WriteAsymmetricMessage( + TcpMessageType.Open, + m_handshakeOperation.RequestId, + ClientCertificate, + ClientCertificateChain, + ServerCertificate, + new ArraySegment(buffer, 0, buffer.Length)); + + // save token. + m_requestedToken = token; + + // write the message to the server. + try + { + BeginWriteMessage(chunksToSend, m_handshakeOperation); + chunksToSend = null; + } + finally + { + if (chunksToSend != null) + { + chunksToSend.Release(BufferManager, "SendOpenSecureChannelRequest"); + } + } + } + + /// + /// Processes an OpenSecureChannel response message. + /// + private bool ProcessOpenSecureChannelResponse(uint messageType, ArraySegment messageChunk) + { + Utils.Trace("Channel {0}: ProcessOpenSecureChannelResponse()", ChannelId); + + // validate the channel state. + if (State != TcpChannelState.Opening && State != TcpChannelState.Open) + { + ForceReconnect(ServiceResult.Create(StatusCodes.BadTcpMessageTypeInvalid, "Server sent an unexpected OpenSecureChannel response.")); + return false; + } + + // check if operation was abandoned. + if (m_handshakeOperation == null) + { + return false; + } + + // parse the security header. + uint channelId = 0; + X509Certificate2 serverCertificate = null; + uint requestId = 0; + uint sequenceNumber = 0; + + ArraySegment messageBody; + + try + { + messageBody = ReadAsymmetricMessage( + messageChunk, + ClientCertificate, + out channelId, + out serverCertificate, + out requestId, + out sequenceNumber); + } + catch (Exception e) + { + ForceReconnect(ServiceResult.Create(e, StatusCodes.BadSecurityChecksFailed, "Could not verify security on OpenSecureChannel response.")); + return false; + } + + BufferCollection chunksToProcess = null; + + try + { + // verify server certificate. + CompareCertificates(ServerCertificate, serverCertificate, true); + + // verify sequence number. + ResetSequenceNumber(sequenceNumber); + + // check if it is necessary to wait for more chunks. + if (!TcpMessageType.IsFinal(messageType)) + { + SaveIntermediateChunk(requestId, messageBody); + return false; + } + + // get the chunks to process. + chunksToProcess = GetSavedChunks(requestId, messageBody); + + // read message body. + OpenSecureChannelResponse response = ParseResponse(chunksToProcess) as OpenSecureChannelResponse; + + if (response == null) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "Server did not return a valid OpenSecureChannelResponse."); + } + + // the client needs to use the creation time assigned when it sent + // the request and ignores the creation time in the response because + // the server and client clocks may not be synchronized. + + // update token. + m_requestedToken.TokenId = response.SecurityToken.TokenId; + m_requestedToken.Lifetime = (int)response.SecurityToken.RevisedLifetime; + m_requestedToken.ServerNonce = response.ServerNonce; + + string implementation = String.Format(g_ImplementationString, m_socketFactory.Implementation); + + // log security information. + if (State == TcpChannelState.Opening) + { + Opc.Ua.Security.Audit.SecureChannelCreated( + implementation, + this.m_url.ToString(), + Utils.Format("{0}", channelId), + this.EndpointDescription, + this.ClientCertificate, + serverCertificate, + BinaryEncodingSupport.Required); + } + else + { + Opc.Ua.Security.Audit.SecureChannelRenewed( + implementation, + Utils.Format("{0}", channelId)); + } + + ChannelId = m_requestedToken.ChannelId = channelId; + ActivateToken(m_requestedToken); + m_requestedToken = null; + + // ready to send requests. + State = TcpChannelState.Open; + m_reconnecting = false; + + // enable reconnects. + m_waitBetweenReconnects = Timeout.Infinite; + // m_waitBetweenReconnects = TcpMessageLimits.MinTimeBetweenReconnects; + + // schedule reconnect before token expires. + ScheduleTokenRenewal(CurrentToken); + + // connect finally complete. + m_handshakeOperation.Complete(0); + } + catch (Exception e) + { + m_handshakeOperation.Fault(e, StatusCodes.BadTcpInternalError, "Could not process OpenSecureChannelResponse."); + } + finally + { + if (chunksToProcess != null) + { + chunksToProcess.Release(BufferManager, "ProcessOpenSecureChannelResponse"); + } + } + + return false; + } + #endregion + + #region Event Handlers + /// + /// Handles a socket error. + /// + protected override void HandleSocketError(ServiceResult result) + { + ForceReconnect(result); + } + + /// + /// Called when a write operation completes. + /// + protected override void HandleWriteComplete(BufferCollection buffers, object state, int bytesWritten, ServiceResult result) + { + lock (DataLock) + { + WriteOperation operation = state as WriteOperation; + + if (operation != null) + { + if (ServiceResult.IsBad(result)) + { + operation.Fault(new ServiceResult(StatusCodes.BadSecurityChecksFailed, result)); + } + } + } + + base.HandleWriteComplete(buffers, state, bytesWritten, result); + } + + /// + /// Processes an incoming message. + /// + /// True if the function takes ownership of the buffer. + protected override bool HandleIncomingMessage(uint messageType, ArraySegment messageChunk) + { + lock (DataLock) + { + // process a response. + if (TcpMessageType.IsType(messageType, TcpMessageType.Message)) + { + Utils.TraceDebug("Channel {0}: ProcessResponseMessage", ChannelId); + return ProcessResponseMessage(messageType, messageChunk); + } + + // check for acknowledge. + else if (messageType == TcpMessageType.Acknowledge) + { + Utils.TraceDebug("Channel {0}: ProcessAcknowledgeMessage", ChannelId); + return ProcessAcknowledgeMessage(messageChunk); + } + + // check for error. + else if (messageType == TcpMessageType.Error) + { + Utils.TraceDebug("Channel {0}: ProcessErrorMessage", ChannelId); + return ProcessErrorMessage(messageType, messageChunk); + } + + // process open secure channel repsonse. + else if (TcpMessageType.IsType(messageType, TcpMessageType.Open)) + { + Utils.TraceDebug("Channel {0}: ProcessOpenSecureChannelResponse", ChannelId); + return ProcessOpenSecureChannelResponse(messageType, messageChunk); + } + + // process a response to a close request. + else if (TcpMessageType.IsType(messageType, TcpMessageType.Close)) + { + Utils.TraceDebug("Channel {0}: ProcessResponseMessage (close)", ChannelId); + return ProcessResponseMessage(messageType, messageChunk); + } + + // invalid message type - must close socket and reconnect. + ForceReconnect(ServiceResult.Create(StatusCodes.BadTcpMessageTypeInvalid, "The client does not recognize the message type: {0:X8}.", messageType)); + return false; + } + } + + /// + /// Called when the socket is connected. + /// + private void OnConnectComplete(object sender, IMessageSocketAsyncEventArgs e) + { + WriteOperation operation = (WriteOperation)e.UserToken; + + // dual stack ConnectAsync may call in with null UserToken if + // one connection attempt timed out but the other succeeded + if (operation == null) + { + return; + } + + if (e.IsSocketError) + { + operation.Fault(StatusCodes.BadNotConnected); + return; + } + + lock (DataLock) + { + try + { + // check for closed socket. + if (Socket == null) + { + operation.Fault(StatusCodes.BadSecureChannelClosed); + return; + } + + // start reading messages. + Socket.ReadNextMessage(); + + // send the hello message. + SendHelloMessage(operation); + } + catch (Exception ex) + { + ServiceResult fault = ServiceResult.Create( + ex, + StatusCodes.BadTcpInternalError, + "An unexpected error occurred while connecting to the server."); + + operation.Fault(fault); + } + } + } + + /// + /// Called when it is time to do a handshake. + /// + private void OnScheduledHandshake(object state) + { + try + { + Utils.Trace("Channel {0}: Scheduled Handshake Starting: TokenId={1}", ChannelId, CurrentToken?.TokenId); + + Task task; + lock (DataLock) + { + // check if renewing a token. + ChannelToken token = state as ChannelToken; + + if (token == CurrentToken) + { + Utils.Trace("TCP CHANNEL {0}: Attempting Renew Token Now: TokenId={1}", ChannelId, token?.TokenId); + + // do nothing if not connected. + if (State != TcpChannelState.Open) + { + return; + } + + // begin the operation. + m_handshakeOperation = BeginOperation(Int32.MaxValue, m_HandshakeComplete, token); + + // send the request. + SendOpenSecureChannelRequest(true); + return; + } + + // must be reconnecting - check if successfully reconnected. + if (!m_reconnecting) + { + return; + } + + Utils.Trace("Channel {0}: Attempting Reconnect Now.", ChannelId); + + // cancel any previous attempt. + if (m_handshakeOperation != null) + { + m_handshakeOperation.Fault(StatusCodes.BadTimeout); + m_handshakeOperation = null; + } + + // close the socket and reconnect. + State = TcpChannelState.Closed; + + if (Socket != null) + { + Utils.Trace("CLIENTCHANNEL SOCKET CLOSED: {0:X8}, ChannelId={1}", Socket.Handle, ChannelId); + Socket.Close(); + Socket = null; + } + + if (!ReverseSocket) + { + // create an operation. + m_handshakeOperation = BeginOperation(Int32.MaxValue, m_HandshakeComplete, null); + + State = TcpChannelState.Connecting; + Socket = m_socketFactory.Create(this, BufferManager, Quotas.MaxBufferSize); + task = Task.Run(async () => + await (Socket?.BeginConnect( + m_via, m_ConnectCallback, m_handshakeOperation, + CancellationToken.None) ?? Task.FromResult(false))); + } + } + } + catch (Exception e) + { + Utils.Trace("Channel {0}: Reconnect Failed {1}.", ChannelId, e.Message); + ForceReconnect(ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error reconnecting or renewing a token.")); + } + } + + /// + /// Called when a token is renewed. + /// + private void OnHandshakeComplete(IAsyncResult result) + { + lock (DataLock) + { + try + { + if (m_handshakeOperation == null) + { + return; + } + + Utils.Trace("Channel {0}: OnHandshakeComplete", ChannelId); + + m_handshakeOperation.End(Int32.MaxValue); + m_handshakeOperation = null; + m_reconnecting = false; + } + catch (Exception e) + { + Utils.Trace(e, "Channel {0}: Handshake Failed {1}", ChannelId, e.Message); + + m_handshakeOperation = null; + m_reconnecting = false; + + ServiceResult error = ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error reconnecting or renewing a token."); + + // check for expired channel or token. + if (error.Code == StatusCodes.BadTcpSecureChannelUnknown || error.Code == StatusCodes.BadSecurityChecksFailed) + { + Utils.Trace("Channel {0}: Cannot Recover Channel", ChannelId); + Shutdown(error); + return; + } + + ForceReconnect(ServiceResult.Create(e, StatusCodes.BadUnexpectedError, "Unexpected error reconnecting or renewing a token.")); + } + } + } + + /// + /// Sends a request to the server. + /// + private void SendRequest(WriteOperation operation, int timeout, IServiceRequest request) + { + bool success = false; + BufferCollection buffers = null; + + try + { + // check for valid token. + ChannelToken token = CurrentToken; + + if (token == null) + { + throw new ServiceResultException(StatusCodes.BadSecureChannelClosed); + } + + // must return an error to the client if limits are exceeded. + bool limitsExceeded = false; + + buffers = WriteSymmetricMessage( + TcpMessageType.Message, + operation.RequestId, + token, + request, + true, + out limitsExceeded); + + BeginWriteMessage(buffers, operation); + buffers = null; + success = true; + + if (limitsExceeded) + { + throw new ServiceResultException(StatusCodes.BadRequestTooLarge); + } + } + catch (Exception e) + { + operation.Fault(e, StatusCodes.BadRequestInterrupted, "Could not send request to server."); + } + finally + { + if (buffers != null) + { + buffers.Release(BufferManager, "SendRequest"); + } + + if (!success) + { + OperationCompleted(operation); + } + } + } + #endregion + + #region Private Methods + /// + /// Parses the response return from the server. + /// + private IServiceResponse ParseResponse(BufferCollection chunksToProcess) + { + IServiceResponse response = BinaryDecoder.DecodeMessage(new ArraySegmentStream(chunksToProcess), null, Quotas.MessageContext) as IServiceResponse; + if (response == null) + { + throw ServiceResultException.Create(StatusCodes.BadStructureMissing, "Could not parse response body."); + } + return response; + } + + /// + /// Cancels all pending requests and closes the channel. + /// + private void Shutdown(ServiceResult reason) + { + lock (DataLock) + { + // clear an unprocessed chunks. + SaveIntermediateChunk(0, new ArraySegment()); + + // halt any scheduled tasks. + if (m_handshakeTimer != null) + { + m_handshakeTimer.Dispose(); + m_handshakeTimer = null; + } + + // halt any existing handshake. + if (m_handshakeOperation != null && !m_handshakeOperation.IsCompleted) + { + m_handshakeOperation.Fault(reason); + } + + // cancel all requests. + List operations = new List(m_requests.Values); + + foreach (WriteOperation operation in operations) + { + operation.Fault(new ServiceResult(StatusCodes.BadSecureChannelClosed, reason)); + } + + m_requests.Clear(); + + uint channelId = ChannelId; + + // close the socket. + State = TcpChannelState.Closed; + + // dispose of the tokens. + ChannelId = 0; + DiscardTokens(); + + // clear the handshake state. + m_handshakeOperation = null; + m_requestedToken = null; + m_reconnecting = false; + + if (Socket != null) + { + Utils.Trace("CLIENTCHANNEL SOCKET CLOSED: {0:X8}, ChannelId={1}", Socket.Handle, channelId); + Socket.Close(); + Socket = null; + } + + // set the state. + ChannelStateChanged(TcpChannelState.Closed, reason); + } + } + + /// + /// Closes the channel and attempts to reconnect. + /// + private void ForceReconnect(ServiceResult reason) + { + lock (DataLock) + { + // check if reconnect already started. + if (m_reconnecting) + { + return; + } + + // check if reconnects are disabled. + if (State == TcpChannelState.Closing || m_waitBetweenReconnects == Timeout.Infinite) + { + Shutdown(reason); + return; + } + + // cancel all requests. + List operations = new List(m_requests.Values); + + foreach (WriteOperation operation in operations) + { + operation.Fault(new ServiceResult(StatusCodes.BadSecureChannelClosed, reason)); + } + + m_requests.Clear(); + + // halt any existing handshake. + if (m_handshakeOperation != null && !m_handshakeOperation.IsCompleted) + { + m_handshakeOperation.Fault(reason); + return; + } + + // clear an unprocessed chunks. + SaveIntermediateChunk(0, new ArraySegment()); + + // halt any scheduled tasks. + if (m_handshakeTimer != null) + { + m_handshakeTimer.Dispose(); + m_handshakeTimer = null; + } + + // clear the handshake state. + m_handshakeOperation = null; + m_requestedToken = null; + m_reconnecting = true; + + // close the socket. + State = TcpChannelState.Faulted; + + // schedule a reconnect. + Utils.Trace("Channel {0}: Attempting Reconnect in {1} ms. {2}", ChannelId, m_waitBetweenReconnects, reason.ToLongString()); + m_handshakeTimer = new Timer(m_StartHandshake, null, m_waitBetweenReconnects, Timeout.Infinite); + + // set next reconnect period. + m_waitBetweenReconnects *= 2; + + if (m_waitBetweenReconnects == 0) + { + m_waitBetweenReconnects = 1000; + } + + if (m_waitBetweenReconnects > TcpMessageLimits.MaxTimeBetweenReconnects) + { + m_waitBetweenReconnects = TcpMessageLimits.MaxTimeBetweenReconnects; + } + + ChannelStateChanged(TcpChannelState.Faulted, reason); + } + } + + /// + /// Schedules the renewal of a token. + /// + private void ScheduleTokenRenewal(ChannelToken token) + { + // can't renew if not connected. + if (State != TcpChannelState.Open) + { + return; + } + + // cancel any outstanding renew operations. + if (m_handshakeTimer != null) + { + m_handshakeTimer.Dispose(); + m_handshakeTimer = null; + } + + // calculate renewal timing based on token lifetime. + DateTime expiryTime = token.CreatedAt.AddMilliseconds(token.Lifetime); + + double timeToRenewal = ((expiryTime.Ticks - DateTime.UtcNow.Ticks) / TimeSpan.TicksPerMillisecond) * TcpMessageLimits.TokenRenewalPeriod; + + if (timeToRenewal < 0) + { + timeToRenewal = 0; + } + + m_handshakeTimer = new Timer(m_StartHandshake, token, (int)timeToRenewal, Timeout.Infinite); + } + + /// + /// Creates a object to manage the state of an asynchronous operation. + /// + private WriteOperation BeginOperation(int timeout, AsyncCallback callback, object state) + { + WriteOperation operation = new WriteOperation(timeout, callback, state); + operation.RequestId = Utils.IncrementIdentifier(ref m_lastRequestId); + m_requests.Add(operation.RequestId, operation); + return operation; + } + + /// + /// Cleans up after an asychronous operation completes. + /// + private void OperationCompleted(WriteOperation operation) + { + if (operation == null) + { + return; + } + + lock (DataLock) + { + if (m_handshakeOperation == operation) + { + m_handshakeOperation = null; + } + + m_requests.Remove(operation.RequestId); + } + } + + /// + /// Stores the state of a operation that was queued while waiting for the channel to connect. + /// + private struct QueuedOperation + { + public QueuedOperation(WriteOperation operation, int timeout, IServiceRequest request) + { + Operation = operation; + Timeout = timeout; + Request = request; + } + + public WriteOperation Operation; + public int Timeout; + public IServiceRequest Request; + } + + + /// + /// Called when the connect operation completes. + /// + /// The state. + private void OnConnectOnDemandComplete(object state) + { + lock (DataLock) + { + WriteOperation operation = (WriteOperation)state; + + for (int ii = 0; ii < m_queuedOperations.Count; ii++) + { + QueuedOperation request = m_queuedOperations[ii]; + + // have to check for error on connect. + if (ii == 0) + { + try + { + operation.End(request.Timeout); + } + catch (Exception e) + { + request.Operation.Fault(e, StatusCodes.BadNoCommunication, "Error establishing a connection: " + e.Message); + break; + } + } + + if (this.CurrentToken == null) + { + request.Operation.Fault(StatusCodes.BadConnectionClosed, "Could not send request because connection is closed."); + } + + try + { + SendRequest(request.Operation, request.Timeout, request.Request); + } + catch (Exception e) + { + request.Operation.Fault(e, StatusCodes.BadCommunicationError, "Could not send request."); + } + } + + m_queuedOperations = null; + } + } + #endregion + + #region Message Processing + /// + /// Processes an Error message received over the socket. + /// + protected bool ProcessErrorMessage(uint messageType, ArraySegment messageChunk) + { + // read request buffer sizes. + MemoryStream istrm = new MemoryStream(messageChunk.Array, messageChunk.Offset, messageChunk.Count, false); + BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext); + + istrm.Seek(TcpMessageLimits.MessageTypeAndSize, SeekOrigin.Current); + + try + { + ServiceResult error = ReadErrorMessageBody(decoder); + + Utils.Trace((int)Utils.TraceMasks.Error, "Channel {0}: ProcessErrorMessage({1})", ChannelId, error); + + // check if a handshake is in progress + if (m_handshakeOperation != null) + { + m_handshakeOperation.Fault(error); + return false; + } + + // handle the fatal error. + ForceReconnect(error); + return false; + } + finally + { + decoder.Close(); + } + } + + /// + /// Sends an CloseSecureChannel request message. + /// + private void SendCloseSecureChannelRequest(WriteOperation operation) + { + Utils.Trace("Channel {0}: SendCloseSecureChannelRequest()", ChannelId); + + // supress reconnects if an error occurs. + m_waitBetweenReconnects = Timeout.Infinite; + + // check for valid token. + ChannelToken currentToken = CurrentToken; + + if (currentToken == null) + { + throw new ServiceResultException(StatusCodes.BadSecureChannelClosed); + } + + CloseSecureChannelRequest request = new CloseSecureChannelRequest(); + request.RequestHeader.Timestamp = DateTime.UtcNow; + + // limits should never be exceeded sending a close message. + bool limitsExceeded = false; + + // construct the message. + BufferCollection buffers = WriteSymmetricMessage( + TcpMessageType.Close, + operation.RequestId, + currentToken, + request, + true, + out limitsExceeded); + + // send the message. + try + { + BeginWriteMessage(buffers, operation); + buffers = null; + } + finally + { + if (buffers != null) + { + buffers.Release(BufferManager, "SendCloseSecureChannelRequest"); + } + } + } + + /// + /// Processes a response message. + /// + private bool ProcessResponseMessage(uint messageType, ArraySegment messageChunk) + { + //Utils.Trace("Channel {0}: ProcessResponseMessage()", ChannelId); + + // validate security on the message. + ChannelToken token = null; + uint requestId = 0; + uint sequenceNumber = 0; + + ArraySegment messageBody; + + try + { + messageBody = ReadSymmetricMessage(messageChunk, false, out token, out requestId, out sequenceNumber); + } + catch (Exception e) + { + ForceReconnect(ServiceResult.Create(e, StatusCodes.BadSecurityChecksFailed, "Could not verify security on response.")); + return false; + } + + // check if operation is still available. + WriteOperation operation = null; + + if (!m_requests.TryGetValue(requestId, out operation)) + { + return false; + } + + BufferCollection chunksToProcess = null; + + // check for replay attacks. + if (!VerifySequenceNumber(sequenceNumber, "ProcessResponseMessage")) + { + throw new ServiceResultException(StatusCodes.BadSequenceNumberInvalid); + } + + try + { + // check for an abort. + if (TcpMessageType.IsAbort(messageType)) + { + // get the chunks to process. + chunksToProcess = GetSavedChunks(requestId, messageBody); + + // decoder reason. + MemoryStream istrm = new MemoryStream(messageBody.Array, messageBody.Offset, messageBody.Count, false); + BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext); + ServiceResult error = ReadErrorMessageBody(decoder); + decoder.Close(); + + // report a fault. + operation.Fault(true, error); + return true; + } + + // check if it is necessary to wait for more chunks. + if (!TcpMessageType.IsFinal(messageType)) + { + SaveIntermediateChunk(requestId, messageBody); + return true; + } + + // get the chunks to process. + chunksToProcess = GetSavedChunks(requestId, messageBody); + + // get response. + operation.MessageBody = ParseResponse(chunksToProcess); + + if (operation.MessageBody == null) + { + operation.Fault(true, StatusCodes.BadStructureMissing, "Could not parse response body."); + return true; + } + + // is complete. + operation.Complete(true, 0); + return true; + } + catch (Exception e) + { + // log a callstack to get a hint on where the decoder failed. + Utils.Trace(e, "Unexpected error processing response."); + operation.Fault(true, e, StatusCodes.BadUnknownResponse, "Unexpected error processing response."); + return true; + } + finally + { + if (chunksToProcess != null) + { + chunksToProcess.Release(BufferManager, "ProcessResponseMessage"); + } + } + } + #endregion + + #region Private Fields + private Uri m_url; + private Uri m_via; + private long m_lastRequestId; + private Dictionary m_requests; + private WriteOperation m_handshakeOperation; + private ChannelToken m_requestedToken; + private Timer m_handshakeTimer; + private bool m_reconnecting; + private int m_waitBetweenReconnects; + private EventHandler m_ConnectCallback; + private IMessageSocketFactory m_socketFactory; + private TimerCallback m_StartHandshake; + private AsyncCallback m_HandshakeComplete; + private List m_queuedOperations; + private string g_ImplementationString = ".NetStandard ClientChannel {0} " + Utils.GetAssemblyBuildNumber(); + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryTransportChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryTransportChannel.cs new file mode 100644 index 00000000..c473d577 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryTransportChannel.cs @@ -0,0 +1,456 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua.Bindings +{ + /// + /// Creates a transport channel for the ITransportChannel interface. + /// Implements the UA-SC security and UA Binary encoding. + /// The socket layer requires a IMessageSocketFactory implementation. + /// + public class UaSCUaBinaryTransportChannel : ITransportChannel, IMessageSocketChannel + { + #region Constructors + /// + /// Create a transport channel from a message socket factory. + /// + /// The message socket factory. + public UaSCUaBinaryTransportChannel(IMessageSocketFactory messageSocketFactory) + { + m_messageSocketFactory = messageSocketFactory; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + Utils.SilentDispose(m_channel); + m_channel = null; + } + } + #endregion + + #region IMessageSocketChannel Members + /// + /// Returns the channel's underlying message socket if connected / available. + /// + public IMessageSocket Socket + { + get { lock (m_lock) { return m_channel?.Socket; } } + } + #endregion + + #region ITransportChannel Members + /// + /// A masking indicating which features are implemented. + /// + public TransportChannelFeatures SupportedFeatures => + TransportChannelFeatures.Open | TransportChannelFeatures.BeginOpen | + TransportChannelFeatures.BeginSendRequest | + ((Socket != null) ? Socket.MessageSocketFeatures : 0); + + /// + /// Gets the description for the endpoint used by the channel. + /// + public EndpointDescription EndpointDescription => m_settings.Description; + + /// + /// Gets the configuration for the channel. + /// + public EndpointConfiguration EndpointConfiguration => m_settings.Configuration; + + /// + /// Gets the context used when serializing messages exchanged via the channel. + /// + public ServiceMessageContext MessageContext => m_quotas.MessageContext; + + /// + /// Gets the the channel's current security token. + /// + public ChannelToken CurrentToken + { + get { lock (m_lock) { return m_channel?.CurrentToken; } } + } + + /// + /// Gets or sets the default timeout for requests send via the channel. + /// + public int OperationTimeout + { + get { return m_operationTimeout; } + set { m_operationTimeout = value; } + } + + /// + /// Initializes a secure channel with the endpoint identified by the URL. + /// + /// The URL for the endpoint. + /// The settings to use when creating the channel. + /// Thrown if any communication error occurs. + public void Initialize( + Uri url, + TransportChannelSettings settings) + { + SaveSettings(url, settings); + CreateChannel(); + } + + /// + /// Initializes a secure channel with the endpoint identified by the connection. + /// + /// The connection to use. + /// The settings to use when creating the channel. + /// Thrown if any communication error occurs. + public void Initialize( + ITransportWaitingConnection connection, + TransportChannelSettings settings) + { + SaveSettings(connection.EndpointUrl, settings); + CreateChannel(connection); + } + + /// + /// Opens a secure channel with the endpoint identified by the URL. + /// + /// Thrown if any communication error occurs. + public void Open() + { + // opens when the first request is called to preserve previous behavior. + } + + /// + /// Begins an asynchronous operation to open a secure channel with the endpoint identified by the URL. + /// + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// + /// The result which must be passed to the EndOpen method. + /// + /// Thrown if any communication error occurs. + /// + public IAsyncResult BeginOpen(AsyncCallback callback, object callbackData) + { + lock (m_lock) + { + // create the channel. + CreateChannel(null); + + // begin connect operation. + return m_channel.BeginConnect(this.m_url, m_operationTimeout, callback, callbackData); + } + } + + /// + /// Completes an asynchronous operation to open a secure channel. + /// + /// The result returned from the BeginOpen call. + /// Thrown if any communication error occurs. + /// + public void EndOpen(IAsyncResult result) + { + m_channel.EndConnect(result); + } + + /// + /// Closes any existing secure channel and opens a new one. + /// + /// Thrown if any communication error occurs. + /// + /// Calling this method will cause outstanding requests over the current secure channel to fail. + /// + public void Reconnect() => Reconnect(null); + + /// + /// Closes any existing secure channel and opens a new one. + /// + /// A reverse connection, null otherwise. + /// Thrown if any communication error occurs. + /// + /// Calling this method will cause outstanding requests over the current secure channel to fail. + /// + public void Reconnect(ITransportWaitingConnection connection) + { + Utils.Trace("TransportChannel RECONNECT: Reconnecting to {0}.", m_url); + + lock (m_lock) + { + // the new channel must be created first because WinSock will reuse sockets and this + // can result in messages sent over the old socket arriving as messages on the new socket. + // if this happens the new channel is shutdown because of a security violation. + UaSCUaBinaryClientChannel channel = m_channel; + m_channel = null; + + try + { + // reconnect. + CreateChannel(connection); + + // begin connect operation. + IAsyncResult result = m_channel.BeginConnect(m_url, m_operationTimeout, null, null); + m_channel.EndConnect(result); + } + finally + { + // close existing channel. + if (channel != null) + { + try + { + channel.Close(1000); + } + catch (Exception e) + { + // do nothing. + Utils.Trace(e, "Ignoring exception while closing transport channel during Reconnect."); + } + finally + { + channel.Dispose(); + } + } + } + } + } + + /// + /// Begins an asynchronous operation to close the existing secure channel and open a new one. + /// + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// + /// The result which must be passed to the EndReconnect method. + /// + /// Thrown if any communication error occurs. + /// + public IAsyncResult BeginReconnect(AsyncCallback callback, object callbackData) + { + throw new NotImplementedException(); + } + + /// + /// Completes an asynchronous operation to close the existing secure channel and open a new one. + /// + /// The result returned from the BeginReconnect call. + /// Thrown if any communication error occurs. + /// + public void EndReconnect(IAsyncResult result) + { + throw new NotImplementedException(); + } + + /// + /// Closes the secure channel. + /// + /// Thrown if any communication error occurs. + public void Close() + { + if (m_channel != null) + { + lock (m_lock) + { + if (m_channel != null) + { + m_channel.Close(1000); + m_channel = null; + } + } + } + } + + /// + /// Begins an asynchronous operation to close the secure channel. + /// + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// + /// The result which must be passed to the EndClose method. + /// + /// Thrown if any communication error occurs. + /// + public IAsyncResult BeginClose(AsyncCallback callback, object callbackData) + { + throw new NotImplementedException(); + } + + /// + /// Completes an asynchronous operation to close the secure channel. + /// + /// The result returned from the BeginClose call. + /// Thrown if any communication error occurs. + /// + public void EndClose(IAsyncResult result) + { + throw new NotImplementedException(); + } + + /// + /// Sends a request over the secure channel. + /// + /// The request to send. + /// The response returned by the server. + /// Thrown if any communication error occurs. + public IServiceResponse SendRequest(IServiceRequest request) + { + IAsyncResult result = BeginSendRequest(request, null, null); + return EndSendRequest(result); + } + + /// + /// Begins an asynchronous operation to send a request over the secure channel. + /// + /// The request to send. + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// + /// The result which must be passed to the EndSendRequest method. + /// + /// Thrown if any communication error occurs. + /// + public IAsyncResult BeginSendRequest(IServiceRequest request, AsyncCallback callback, object callbackData) + { + UaSCUaBinaryClientChannel channel = m_channel; + + if (channel == null) + { + lock (m_lock) + { + if (m_channel == null) + { + CreateChannel(); + } + + channel = m_channel; + } + } + + return channel.BeginSendRequest(request, m_operationTimeout, callback, callbackData); + } + + /// + /// Completes an asynchronous operation to send a request over the secure channel. + /// + /// The result returned from the BeginSendRequest call. + /// + /// Thrown if any communication error occurs. + /// + public IServiceResponse EndSendRequest(IAsyncResult result) + { + UaSCUaBinaryClientChannel channel = m_channel; + + if (channel == null) + { + throw ServiceResultException.Create(StatusCodes.BadSecureChannelClosed, "Channel has been closed."); + } + + return channel.EndSendRequest(result); + } + + /// + /// Saves the settings so the channel can be opened later. + /// + /// The URL. + /// The settings. + private void SaveSettings(Uri url, TransportChannelSettings settings) + { + // save the settings. + m_url = url; + m_settings = settings; + m_operationTimeout = settings.Configuration.OperationTimeout; + + // initialize the quotas. + m_quotas = new ChannelQuotas(); + + m_quotas.MaxBufferSize = m_settings.Configuration.MaxBufferSize; + m_quotas.MaxMessageSize = m_settings.Configuration.MaxMessageSize; + m_quotas.ChannelLifetime = m_settings.Configuration.ChannelLifetime; + m_quotas.SecurityTokenLifetime = m_settings.Configuration.SecurityTokenLifetime; + + m_quotas.MessageContext = new ServiceMessageContext(); + + m_quotas.MessageContext.MaxArrayLength = m_settings.Configuration.MaxArrayLength; + m_quotas.MessageContext.MaxByteStringLength = m_settings.Configuration.MaxByteStringLength; + m_quotas.MessageContext.MaxMessageSize = m_settings.Configuration.MaxMessageSize; + m_quotas.MessageContext.MaxStringLength = m_settings.Configuration.MaxStringLength; + m_quotas.MessageContext.NamespaceUris = m_settings.NamespaceUris; + m_quotas.MessageContext.ServerUris = new StringTable(); + m_quotas.MessageContext.Factory = m_settings.Factory; + + m_quotas.CertificateValidator = settings.CertificateValidator; + + // create the buffer manager. + m_bufferManager = new BufferManager("Client", (int)Int32.MaxValue, settings.Configuration.MaxBufferSize); + } + + /// + /// Opens the channel before sending the request. + /// + /// A reverse connection, null otherwise. + private void CreateChannel(ITransportWaitingConnection connection = null) + { + IMessageSocket socket = null; + if (connection != null) + { + socket = connection.Handle as IMessageSocket; + if (socket == null) + { + throw new ArgumentException("Connection Handle is not of type IMessageSocket."); + } + } + + // create the channel. + m_channel = new UaSCUaBinaryClientChannel( + Guid.NewGuid().ToString(), + m_bufferManager, + m_messageSocketFactory, + m_quotas, + m_settings.ClientCertificate, + m_settings.ClientCertificateChain, + m_settings.ServerCertificate, + m_settings.Description); + + // use socket for reverse connections, ignore otherwise + if (socket != null) + { + m_channel.Socket = socket; + m_channel.Socket.ChangeSink(m_channel); + m_channel.ReverseSocket = true; + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private Uri m_url; + private int m_operationTimeout; + private TransportChannelSettings m_settings; + private ChannelQuotas m_quotas; + private BufferManager m_bufferManager; + private UaSCUaBinaryClientChannel m_channel; + private IMessageSocketFactory m_messageSocketFactory; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/AsyncResultBase.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/AsyncResultBase.cs new file mode 100644 index 00000000..b7e0e956 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/AsyncResultBase.cs @@ -0,0 +1,364 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Threading; + +namespace Opc.Ua +{ + /// + /// A base class for AsyncResult objects + /// + public class AsyncResultBase : IAsyncResult, IDisposable + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The callback to use when the operation completes. + /// The callback data. + /// The timeout for the operation. + public AsyncResultBase(AsyncCallback callback, object callbackData, int timeout) + : this(callback, callbackData, timeout, null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The callback to use when the operation completes. + /// The callback data. + /// The timeout for the operation. + /// Cancellation token for async operation. + public AsyncResultBase(AsyncCallback callback, object callbackData, int timeout, CancellationTokenSource cts) + { + m_callback = callback; + AsyncState = callbackData; + m_deadline = DateTime.MinValue; + m_cts = cts; + + if (timeout > 0) + { + m_deadline = DateTime.UtcNow.AddMilliseconds(timeout); + + if (m_callback != null) + { + m_timer = new Timer(OnTimeout, null, timeout, Timeout.Infinite); + } + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() => Dispose(true); + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // stop the timer. + DisposeTimer(); + + // signal any waiting threads. + DisposeWaitHandle(true); + } + } + #endregion + + #region Public Members + /// + /// An object used to synchronize access to the result object. + /// + public object Lock { get; } = new object(); + + /// + /// An object used to synchronize access to the result object. + /// + public IAsyncResult InnerResult { get; set; } + + /// + /// An exception that occured during processing. + /// + public Exception Exception { get; set; } + + /// + /// The cancellation token associated with the operation. + /// + public CancellationToken CancellationToken + { + get + { + if (m_cts != null) + { + return m_cts.Token; + } + + return CancellationToken.None; + } + } + + /// + /// Waits for the operation to complete. + /// + /// The result object returned from the Begin method. + public static void WaitForComplete(IAsyncResult ar) + { + AsyncResultBase result = ar as AsyncResultBase; + + if (result == null) + { + throw new ArgumentException("IAsyncResult passed to call is not an instance of AsyncResultBase."); + } + + if (!result.WaitForComplete()) + { + throw new TimeoutException(); + } + } + + /// + /// Waits for the operation to complete. + /// + /// True if operation completed without any errors. + public bool WaitForComplete() + { + try + { + WaitHandle waitHandle = null; + + int timeout = Timeout.Infinite; + + lock (Lock) + { + if (Exception != null) + { + throw new ServiceResultException(Exception, StatusCodes.BadCommunicationError); + } + + if (m_deadline != DateTime.MinValue) + { + timeout = (int)(m_deadline - DateTime.UtcNow).TotalMilliseconds; + + if (timeout <= 0) + { + return false; + } + } + + if (IsCompleted) + { + return true; + } + + if (m_waitHandle == null) + { + m_waitHandle = new ManualResetEvent(false); + } + + waitHandle = m_waitHandle; + } + + if (waitHandle != null) + { + try + { + if (!waitHandle.WaitOne(timeout)) + { + return false; + } + + lock (Lock) + { + if (Exception != null) + { + throw new ServiceResultException(Exception, StatusCodes.BadCommunicationError); + } + } + } + catch (ObjectDisposedException) + { + return false; + } + } + } + finally + { + // always stop the timer after operation completes. + DisposeTimer(); + + // release the wait event. + DisposeWaitHandle(false); + } + + return true; + } + + /// + /// Called to reset the wait handle. + /// + public void Reset() + { + lock (Lock) + { + IsCompleted = false; + m_waitHandle?.Reset(); + } + } + + /// + /// Called to invoke the callback after the asynchronous operation completes. + /// + public void OperationCompleted() + { + lock (Lock) + { + IsCompleted = true; + + // signal an waiting threads. + try + { + m_waitHandle?.Set(); + } + catch (ObjectDisposedException ode) + { + // ignore + Utils.Trace(ode, "Unexpected error handling OperationCompleted for AsyncResult operation."); + } + } + + // invoke callback. + m_callback?.Invoke(this); + } + #endregion + + #region Private Members + /// + /// Called to dispose the timer. + /// + private void DisposeTimer() + { + lock (Lock) + { + try + { + m_timer?.Dispose(); + } + catch (Exception e) + { + // ignore + Utils.Trace(e, "Unexpected error handling dispose of timer for AsyncResult operation."); + } + finally + { + m_timer = null; + } + } + } + + /// + /// Disposes the wait handle. + /// + /// + private void DisposeWaitHandle(bool set) + { + var waitHandle = Interlocked.Exchange(ref m_waitHandle, null); + if (waitHandle != null) + { + try + { + if (set) + { + waitHandle.Set(); + } + waitHandle.Dispose(); + } + catch (Exception e) + { + // ignore + Utils.Trace(e, "Unexpected error handling dispose of wait handle for AsyncResult operation."); + } + } + } + + /// + /// Called when the operation times out. + /// + private void OnTimeout(object state) + { + try + { + Exception = new TimeoutException(); + m_cts?.Cancel(); + OperationCompleted(); + } + catch (Exception e) + { + Utils.Trace(e, "Unexpected error handling timeout for ChannelAsyncResult operation."); + } + } + #endregion + + #region IAsyncResult Members + /// + /// Gets a user-defined object that qualifies or contains information about an asynchronous operation. + /// + /// A user-defined object that qualifies or contains information about an asynchronous operation. + public object AsyncState { get; private set; } + + /// + /// Gets a that is used to wait for an asynchronous operation to complete. + /// + /// A that is used to wait for an asynchronous operation to complete. + public WaitHandle AsyncWaitHandle + { + get + { + lock (Lock) + { + if (m_waitHandle == null) + { + m_waitHandle = new ManualResetEvent(false); + } + + return m_waitHandle; + } + } + } + + /// + /// Gets a value that indicates whether the asynchronous operation completed synchronously. + /// + /// true if the asynchronous operation completed synchronously; otherwise, false. + public bool CompletedSynchronously => false; + + /// + /// Gets a value that indicates whether the asynchronous operation has completed. + /// + /// true if the operation is complete; otherwise, false. + public bool IsCompleted { get; private set; } + #endregion + + #region Private Fields + private AsyncCallback m_callback; + private ManualResetEvent m_waitHandle; + private DateTime m_deadline; + private Timer m_timer; + private CancellationTokenSource m_cts; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ConnectionEvents.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ConnectionEvents.cs new file mode 100644 index 00000000..44b7c21b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ConnectionEvents.cs @@ -0,0 +1,78 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The arguments passed to the ConnectionWaiting event. + /// + public class ConnectionWaitingEventArgs : EventArgs, ITransportWaitingConnection + { + /// + /// Create a connection waiting event for a reverse hello message. + /// + /// The Uri of the server. + /// The endpoint Url of the server. + protected ConnectionWaitingEventArgs(string serverUri, Uri endpointUrl) + { + ServerUri = serverUri; + EndpointUrl = endpointUrl; + Accepted = false; + } + + /// + public string ServerUri { get; private set; } + + /// + public Uri EndpointUrl { get; private set; } + + /// + public virtual object Handle => null; + + /// + /// Allow the event callback handler to accept the + /// incoming reverse hello connection. + /// + public bool Accepted { get; set; } + } + + /// + /// The arguments passed to the ConnectionStatus event. + /// + public class ConnectionStatusEventArgs : EventArgs + { + internal ConnectionStatusEventArgs(Uri endpointUrl, ServiceResult channelStatus, bool closed) + { + EndpointUrl = endpointUrl; + ChannelStatus = channelStatus; + Closed = closed; + } + + /// + /// The endpoint Url of the channel which changed the status. + /// + public Uri EndpointUrl { get; private set; } + + /// + /// The new status of the channel. + /// + public ServiceResult ChannelStatus { get; private set; } + + /// + /// Indicate that the channel is closed. + /// + public bool Closed { get; private set; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/IMessageSocket.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/IMessageSocket.cs new file mode 100644 index 00000000..189642ad --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/IMessageSocket.cs @@ -0,0 +1,195 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + + +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Opc.Ua.Bindings +{ + /// + /// Represents an asynchronous message socket operation. + /// + public interface IMessageSocketAsyncEventArgs : IDisposable + { + /// + /// Gets the data buffer to use with an asynchronous socket method. + /// + /// + /// A System.Byte array that represents the data buffer to use with an asynchronous + /// socket method. + /// + byte[] Buffer { get; } + + /// + /// Gets or sets an array of data buffers to use with an asynchronous socket method. + /// + /// + /// An System.Collections.IList that represents an array of data buffers to use with + /// an asynchronous socket method. + /// + BufferCollection BufferList { get; set; } + + /// + /// Gets the number of bytes transferred in the socket operation. + /// + /// An System.Int32 that contains the number of bytes transferred in the socket operation. + int BytesTransferred { get; } + + /// + /// Gets the result of the asynchronous socket operation. + /// + /// true if error, false if ok + bool IsSocketError { get; } + + /// + /// Gets the SocketError string of the asynchronous socket operation. + /// + /// the socket error string + string SocketErrorString { get; } + + /// + /// Gets or sets a user or application object associated with this asynchronous socket + /// operation. + /// + /// + /// An object that represents the user or application object associated with this + /// asynchronous socket operation. + /// + object UserToken { get; set; } + + /// + /// The event used to complete an asynchronous operation. + /// + /// the message socket + event EventHandler Completed; + + /// + /// Sets the data buffer to use with an asynchronous socket method. + /// + /// The data buffer to use with an asynchronous socket method. + /// The offset, in bytes, in the data buffer where the operation starts. + /// The maximum amount of data, in bytes, to send or receive in the buffer. + /// + void SetBuffer(byte[] buffer, int offset, int count); + } + + /// + /// An interface to an object that received messages from the socket. + /// + public interface IMessageSink + { + /// + /// Called when a new message arrives. + /// + void OnMessageReceived(IMessageSocket source, ArraySegment message); + + /// + /// Called when an error occurs during a read. + /// + void OnReceiveError(IMessageSocket source, ServiceResult result); + } + + + /// + /// This is an interface to a message socket which supports a factory + /// + public interface IMessageSocketFactory + { + /// + /// Creates an unconnected socket. + /// + /// the message socket + IMessageSocket Create( + IMessageSink sink, + BufferManager bufferManager, + int receiveBufferSize); + + /// + /// Gets the implementation description. + /// + /// The implementation string. + string Implementation { get; } + + } + + /// + /// Handles reading and writing of message chunks over a socket. + /// + public interface IMessageSocket : IDisposable + { + #region Connect/Disconnect Handling + /// + /// Gets the socket handle. + /// + /// The socket handle. + int Handle { get; } + + /// + /// Returns the features implemented by the message socket. + /// + TransportChannelFeatures MessageSocketFeatures { get; } + + /// + /// Connects to an endpoint. + /// + Task BeginConnect( + Uri endpointUrl, + EventHandler callback, + object state, + CancellationToken cts); + + /// + /// Forcefully closes the socket. + /// + void Close(); + #endregion + + #region Read Handling + /// + /// Starts reading messages from the socket. + /// + void ReadNextMessage(); + + /// + /// Changes the sink used to report reads. + /// + void ChangeSink(IMessageSink sink); + #endregion + + #region Write Handling + /// + /// Sends a buffer. + /// + bool SendAsync(IMessageSocketAsyncEventArgs args); + #endregion + + #region Event factory + /// + /// Get the message socket event args. + /// + IMessageSocketAsyncEventArgs MessageSocketEventArgs(); + #endregion + } + + /// + /// A channel, based on an underlying message socket + /// + public interface IMessageSocketChannel + { + /// + /// Returns the channel's underlying message socket if connected. + /// + IMessageSocket Socket { get; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportChannel.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportChannel.cs new file mode 100644 index 00000000..18c45c50 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportChannel.cs @@ -0,0 +1,231 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using Opc.Ua.Bindings; + +namespace Opc.Ua +{ + /// + /// This is an interface to a channel which supports + /// + public interface ITransportChannel : IDisposable + { + /// + /// A masking indicating which features are implemented. + /// + TransportChannelFeatures SupportedFeatures { get; } + + /// + /// Gets the description for the endpoint used by the channel. + /// + EndpointDescription EndpointDescription { get; } + + /// + /// Gets the configuration for the channel. + /// + EndpointConfiguration EndpointConfiguration { get; } + + /// + /// Gets the context used when serializing messages exchanged via the channel. + /// + ServiceMessageContext MessageContext { get; } + + /// + /// Gets the the channel's current security token. + /// + ChannelToken CurrentToken { get; } + + /// + /// Gets or sets the default timeout for requests send via the channel. + /// + int OperationTimeout { get; set; } + + /// + /// Initializes a secure channel with the endpoint identified by the URL. + /// + /// The URL for the endpoint. + /// The settings to use when creating the channel. + /// Thrown if any communication error occurs. + void Initialize( + Uri url, + TransportChannelSettings settings); + + /// + /// Initializes a secure channel with the endpoint identified by the URL. + /// + void Initialize( + ITransportWaitingConnection connection, + TransportChannelSettings settings); + + /// + /// Opens a secure channel with the endpoint identified by the URL. + /// + /// Thrown if any communication error occurs. + void Open(); + + /// + /// Begins an asynchronous operation to open a secure channel with the endpoint identified by the URL. + /// + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// The result which must be passed to the EndOpen method. + /// Thrown if any communication error occurs. + /// + IAsyncResult BeginOpen( + AsyncCallback callback, + object callbackData); + + /// + /// Completes an asynchronous operation to open a secure channel. + /// + /// The result returned from the BeginOpen call. + /// Thrown if any communication error occurs. + /// + void EndOpen(IAsyncResult result); + + /// + /// Closes any existing secure channel and opens a new one. + /// + /// Thrown if any communication error occurs. + /// + /// Calling this method will cause outstanding requests over the current secure channel to fail. + /// + void Reconnect(); + + /// + /// Closes any existing secure channel and opens a new one. + /// + /// The waiting reverse connection for the reconnect attempt. + /// Thrown if any communication error occurs. + /// + /// Calling this method will cause outstanding requests over the current secure channel to fail. + /// + void Reconnect(ITransportWaitingConnection connection); + + /// + /// Begins an asynchronous operation to close the existing secure channel and open a new one. + /// + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// The result which must be passed to the EndReconnect method. + /// Thrown if any communication error occurs. + /// + IAsyncResult BeginReconnect(AsyncCallback callback, object callbackData); + + /// + /// Completes an asynchronous operation to close the existing secure channel and open a new one. + /// + /// The result returned from the BeginReconnect call. + /// Thrown if any communication error occurs. + /// + void EndReconnect(IAsyncResult result); + + /// + /// Closes the secure channel. + /// + /// Thrown if any communication error occurs. + void Close(); + + /// + /// Begins an asynchronous operation to close the secure channel. + /// + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// The result which must be passed to the EndClose method. + /// Thrown if any communication error occurs. + /// + IAsyncResult BeginClose(AsyncCallback callback, object callbackData); + + /// + /// Completes an asynchronous operation to close the secure channel. + /// + /// The result returned from the BeginClose call. + /// Thrown if any communication error occurs. + /// + void EndClose(IAsyncResult result); + + /// + /// Sends a request over the secure channel. + /// + /// The request to send. + /// The response returned by the server. + /// Thrown if any communication error occurs. + IServiceResponse SendRequest(IServiceRequest request); + + /// + /// Begins an asynchronous operation to send a request over the secure channel. + /// + /// The request to send. + /// The callback to call when the operation completes. + /// The callback data to return with the callback. + /// The result which must be passed to the EndSendRequest method. + /// Thrown if any communication error occurs. + /// + IAsyncResult BeginSendRequest(IServiceRequest request, AsyncCallback callback, object callbackData); + + /// + /// Completes an asynchronous operation to send a request over the secure channel. + /// + /// The result returned from the BeginSendRequest call. + /// Thrown if any communication error occurs. + /// + IServiceResponse EndSendRequest(IAsyncResult result); + } + + /// + /// The masks for the optional features which may not be supported by every transport channel. + /// + [Flags] + public enum TransportChannelFeatures + { + /// + /// The channel does not support any optional features. + /// + None = 0x0000, + + /// + /// The channel supports Open. + /// + Open = 0x0001, + + /// + /// The channel supports asynchronous Open. + /// + BeginOpen = 0x0002, + + /// + /// The channel supports Reconnect. + /// + Reconnect = 0x0004, + + /// + /// The channel supports asynchronous Reconnect. + /// + BeginReconnect = 0x0008, + + /// + /// The channel supports asynchronous Close. + /// + BeginClose = 0x0010, + + /// + /// The channel supports asynchronous SendRequest. + /// + BeginSendRequest = 0x0020, + + /// + /// The channel supports Reconnect. + /// + ReverseConnect = 0x0040 + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportListener.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportListener.cs new file mode 100644 index 00000000..5145a184 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportListener.cs @@ -0,0 +1,107 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; + +namespace Opc.Ua +{ + + /// + /// The delegate for the async connection waiting handler. + /// + public delegate Task ConnectionWaitingHandlerAsync(object sender, ConnectionWaitingEventArgs args); + + /// + /// This is an interface to a listener which supports UA binary encoding. + /// + public interface ITransportListener : IDisposable + { + /// + /// The protocol supported by the listener. + /// + string UriScheme { get; } + + /// + /// Opens the listener and starts accepting connection. + /// + /// The base address. + /// The settings to use when creating the listener. + /// The callback to use when requests arrive via the channel. + /// Thrown if any parameter is null. + /// Thrown if any communication error occurs. + void Open( + Uri baseAddress, + TransportListenerSettings settings, + ITransportListenerCallback callback + ); + + /// + /// Closes the listener and stops accepting connection. + /// + /// Thrown if any communication error occurs. + void Close(); + + /// + /// Updates the application certificate for a listener. + /// + void CertificateUpdate( + ICertificateValidator validator, + X509Certificate2 serverCertificate, + X509Certificate2Collection serverCertificateChain); + + /// + /// Raised when a new connection is waiting for a client. + /// + event ConnectionWaitingHandlerAsync ConnectionWaiting; + + /// + /// Raised when a monitored connection's status changed. + /// + event EventHandler ConnectionStatusChanged; + + /// + /// Creates a reverse connection to a client. + /// + void CreateReverseConnection(Uri url, int timeout); + + } + + /// + /// The arguments passed to the ConnectionWaiting event. + /// + /// + /// An object which implements this interface can be used + /// to create a session using the reverse connect handshake. + /// + public interface ITransportWaitingConnection + { + /// + /// The application Uri of the server in the + /// reverse hello message. + /// + string ServerUri { get; } + + /// + /// The endpoint of the server in the + /// reverse hello message. + /// + Uri EndpointUrl { get; } + + /// + /// A handle to a message socket that can be used + /// to connect to the server. + /// + object Handle { get; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportListenerCallback.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportListenerCallback.cs new file mode 100644 index 00000000..116ffe5e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/ITransportListenerCallback.cs @@ -0,0 +1,50 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Opc.Ua +{ + /// + /// This is an interface to a object that receives notifications from the listener when a message arrives. + /// + public interface ITransportListenerCallback + { + /// + /// Begins processing a request received via a binary encoded channel. + /// + /// A unique identifier for the secure channel which is the source of the request. + /// The description of the endpoint which the secure channel is using. + /// The incoming request. + /// The callback. + /// The callback data. + /// The result which must be passed to the EndProcessRequest method. + /// + /// + IAsyncResult BeginProcessRequest( + string channeId, + EndpointDescription endpointDescription, + IServiceRequest request, + AsyncCallback callback, + object callbackData); + + /// + /// Ends processing a request received via a binary encoded channel. + /// + /// The result returned by the BeginProcessRequest method. + /// The response to return over the secure channel. + /// + IServiceResponse EndProcessRequest(IAsyncResult result); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/TransportChannelSettings.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/TransportChannelSettings.cs new file mode 100644 index 00000000..5d6df006 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/TransportChannelSettings.cs @@ -0,0 +1,137 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Stores the configuration settings for a channel. + /// + public class TransportChannelSettings + { + #region Public Properties + /// + /// Gets or sets the description for the endpoint. + /// + /// May be null if no security is used. + public EndpointDescription Description + { + get { return m_description; } + set { m_description = value; } + } + + /// + /// Gets or sets the configuration for the endpoint. + /// + public EndpointConfiguration Configuration + { + get { return m_configuration; } + set { m_configuration = value; } + } + + /// + /// Gets or sets the client certificate. + /// + /// May be null if no security is used. + public X509Certificate2 ClientCertificate + { + get { return m_clientCertificate; } + set { m_clientCertificate = value; } + } + + /// + /// Gets or sets the client certificate chain. + /// + /// + /// The client certificate chain. + /// + public X509Certificate2Collection ClientCertificateChain + { + get { return m_clientCertificateChain; } + set { m_clientCertificateChain = value; } + } + + /// + /// Gets or Sets the server certificate. + /// + /// May be null if no security is used. + public X509Certificate2 ServerCertificate + { + get { return m_serverCertificate; } + set { m_serverCertificate = value; } + } + + /// + /// Gets or sets the certificate validator. + /// + /// + /// May be null if no security is used. + /// This is the object used by the channel to validate received certificates. + /// Validatation errors are reported to the application via this object. + /// + public ICertificateValidator CertificateValidator + { + get { return m_certificateValidator; } + set { m_certificateValidator = value; } + } + + /// + /// Gets or sets a reference to the table of namespaces for the server. + /// + /// + /// This is a thread safe object that may be updated by the application at any time. + /// This table is used to lookup the NamespaceURI for the DataTypeEncodingId when decoding ExtensionObjects. + /// If the NamespaceURI can be found the decoder will use the Factory to create an instance of a .NET object. + /// The raw data is passed to application if the NamespaceURI cannot be found or there is no .NET class + /// associated with the DataTypeEncodingId then. + /// + /// + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + set { m_namespaceUris = value; } + } + + /// + /// Gets or sets the table of known encodeable objects. + /// + /// + /// This is a thread safe object that may be updated by the application at any time. + /// This is a table of .NET types indexed by their DataTypeEncodingId. + /// The decoder uses this table to automatically create the appropriate .NET objects when it + /// encounters an ExtensionObject in the message being decoded. + /// The table uses DataTypeEncodingIds with the URI explicitly specified so multiple channels + /// with different servers can share the same table. + /// The NamespaceUris table is used to lookup the NamespaceURI from the NamespaceIndex provide + /// in the encoded message. + /// + /// + public EncodeableFactory Factory + { + get { return m_channelFactory; } + set { m_channelFactory = value; } + } + #endregion + + #region Private Fields + private EndpointDescription m_description; + private EndpointConfiguration m_configuration; + private X509Certificate2 m_clientCertificate; + private X509Certificate2Collection m_clientCertificateChain; + private X509Certificate2 m_serverCertificate; + private ICertificateValidator m_certificateValidator; + private NamespaceTable m_namespaceUris; + private EncodeableFactory m_channelFactory; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/TransportListenerSettings.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/TransportListenerSettings.cs new file mode 100644 index 00000000..0122b590 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Transport/TransportListenerSettings.cs @@ -0,0 +1,133 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Stores the configuration settings for a channel. + /// + public class TransportListenerSettings + { + #region Public Properties + /// + /// Gets or sets the descriptions for the endpoints supported by the listener. + /// + public EndpointDescriptionCollection Descriptions + { + get { return m_descriptions; } + set { m_descriptions = value; } + } + + /// + /// Gets or sets the configuration for the endpoints. + /// + public EndpointConfiguration Configuration + { + get { return m_configuration; } + set { m_configuration = value; } + } + + /// + /// Gets or sets the server certificate. + /// + public X509Certificate2 ServerCertificate + { + get { return m_serverCertificate; } + set { m_serverCertificate = value; } + } + + /// + /// Gets or sets the server certificate chain. + /// + /// + /// The server certificate chain. + /// + public X509Certificate2Collection ServerCertificateChain + { + get { return m_serverCertificateChain; } + set { m_serverCertificateChain = value; } + } + + /// + /// Gets or Sets the certificate validator. + /// + /// + /// This is the object used by the channel to validate received certificates. + /// Validatation errors are reported to the application via this object. + /// + public ICertificateValidator CertificateValidator + { + get { return m_certificateValidator; } + set { m_certificateValidator = value; } + } + + /// + /// Gets or sets a reference to the table of namespaces for the server. + /// + /// + /// This is a thread safe object that may be updated by the application at any time. + /// This table is used to lookup the NamespaceURI for the DataTypeEncodingId when decoding ExtensionObjects. + /// If the NamespaceURI can be found the decoder will use the Factory to create an instance of a .NET object. + /// The raw data is passed to application if the NamespaceURI cannot be found or there is no .NET class + /// associated with the DataTypeEncodingId then. + /// + /// + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + set { m_namespaceUris = value; } + } + + /// + /// Gets or sets the table of known encodeable objects. + /// + /// + /// This is a thread safe object that may be updated by the application at any time. + /// This is a table of .NET types indexed by their DataTypeEncodingId. + /// The decoder uses this table to automatically create the appropriate .NET objects when it + /// encounters an ExtensionObject in the message being decoded. + /// The table uses DataTypeEncodingIds with the URI explicitly specified so multiple channels + /// with different servers can share the same table. + /// The NamespaceUris table is used to lookup the NamespaceURI from the NamespaceIndex provide + /// in the encoded message. + /// + /// + public EncodeableFactory Factory + { + get { return m_channelFactory; } + set { m_channelFactory = value; } + } + + /// + /// Indicates if the transport listener is used as an endpoint for a reverse connection. + /// + public bool ReverseConnectListener + { + get { return m_reverseConnectListener; } + set { m_reverseConnectListener = value; } + } + #endregion + + #region Private Fields + private EndpointDescriptionCollection m_descriptions; + private EndpointConfiguration m_configuration; + private X509Certificate2 m_serverCertificate; + private X509Certificate2Collection m_serverCertificateChain; + private ICertificateValidator m_certificateValidator; + private NamespaceTable m_namespaceUris; + private EncodeableFactory m_channelFactory; + private bool m_reverseConnectListener; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/Argument.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/Argument.cs new file mode 100644 index 00000000..14225a65 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/Argument.cs @@ -0,0 +1,54 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The Argument class. + /// + public partial class Argument + { + #region Public Properties + /// + /// Initializes an instance of the argument. + /// + public Argument(string name, NodeId dataType, int valueRank, string description) + { + this.m_name = name; + this.m_dataType = dataType; + this.m_valueRank = valueRank; + this.m_description = description; + } + #endregion + + #region Public Properties + /// + /// The value for the argument. + /// + public object Value + { + get { return m_value; } + set { m_value = value; } + } + #endregion + + #region Private Fields + private object m_value; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/BrowseDescription.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/BrowseDescription.cs new file mode 100644 index 00000000..8c54fc08 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/BrowseDescription.cs @@ -0,0 +1,60 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region BrowseDescription Class + public partial class BrowseDescription + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + #endregion + + #region Private Fields + private object m_handle; + #endregion + } + #endregion + + #region ViewDescription Class + public partial class ViewDescription + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + #endregion + + #region Private Fields + private object m_handle; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/BrowsePath.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/BrowsePath.cs new file mode 100644 index 00000000..eb2224cc --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/BrowsePath.cs @@ -0,0 +1,40 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region BrowsePath Class + public partial class BrowsePath + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + #endregion + + #region Private Fields + private object m_handle; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/CallMethodRequest.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/CallMethodRequest.cs new file mode 100644 index 00000000..adb97f0d --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/CallMethodRequest.cs @@ -0,0 +1,51 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a value to write. + /// + public partial class CallMethodRequest + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ContentFilter.Evaluate.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ContentFilter.Evaluate.cs new file mode 100644 index 00000000..6b5ebcea --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ContentFilter.Evaluate.cs @@ -0,0 +1,2114 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// This class contains functions used to evaluate a ContentFilter and report the + /// results of the evaluation. + /// + public partial class ContentFilter + { + #region Public functions + /// + /// Evaluates the first element in the ContentFilter. If the first or any + /// subsequent element has dependent elements, the dependent elements are + /// evaluated before the root element (recursive descent). Elements which + /// are not linked (directly or indirectly) to the first element will not + /// be evaluated (they have no influence on the result). + /// + /// The context to use when evaluating the filter. + /// The target to use when evaluating elements that reference the type model. + /// Returns true, false or null. + public bool Evaluate(FilterContext context, IFilterTarget target) + { + // check if nothing to do. + if (this.Elements.Count == 0) + { + return true; + } + + bool? result = Evaluate(context, target, 0) as bool?; + + if (result == null) + { + return false; + } + + return result.Value; + } + #endregion + + #region Private Methods + /// + /// Evaluates element at the specified index. + /// + private object Evaluate(FilterContext context, IFilterTarget target, int index) + { + // get the element to evaluate. + ContentFilterElement element = Elements[index]; + + switch (element.FilterOperator) + { + case FilterOperator.And: + { + return And(context, target, element); + } + + case FilterOperator.Or: + { + return Or(context, target, element); + } + + case FilterOperator.Not: + { + return Not(context, target, element); + } + + case FilterOperator.Equals: + { + return Equals(context, target, element); + } + + case FilterOperator.GreaterThan: + { + return GreaterThan(context, target, element); + } + + case FilterOperator.GreaterThanOrEqual: + { + return GreaterThanOrEqual(context, target, element); + } + + case FilterOperator.LessThan: + { + return LessThan(context, target, element); + } + + case FilterOperator.LessThanOrEqual: + { + return LessThanOrEqual(context, target, element); + } + + case FilterOperator.Between: + { + return Between(context, target, element); + } + + case FilterOperator.InList: + { + return InList(context, target, element); + } + + case FilterOperator.Like: + { + return Like(context, target, element); + } + + case FilterOperator.IsNull: + { + return IsNull(context, target, element); + } + + case FilterOperator.Cast: + { + return Cast(context, target, element); + } + + case FilterOperator.OfType: + { + return OfType(context, target, element); + } + + case FilterOperator.InView: + { + return InView(context, target, element); + } + + case FilterOperator.RelatedTo: + { + return RelatedTo(context, target, element); + } + } + + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "FilterOperator is not recognized."); + } + + /// + /// Returns the operands for the element. + /// + private FilterOperand[] GetOperands(ContentFilterElement element, int expectedCount) + { + FilterOperand[] operands = new FilterOperand[element.FilterOperands.Count]; + + int ii = 0; + + foreach (ExtensionObject extension in element.FilterOperands) + { + if (ExtensionObject.IsNull(extension)) + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "FilterOperand is null."); + } + + FilterOperand operand = extension.Body as FilterOperand; + + if (operand == null) + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "FilterOperand is not supported."); + } + + operands[ii++] = operand; + } + + if (expectedCount > 0 && expectedCount != operands.Length) + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "ContentFilterElement does not have the correct number of operands."); + } + + return operands; + } + + /// + /// Returns the value for the element. + /// + private object GetValue(FilterContext context, FilterOperand operand, IFilterTarget target) + { + // return the contained value for literal operands. + LiteralOperand literal = operand as LiteralOperand; + + if (literal != null) + { + return literal.Value.Value; + } + + // must query the filter target for simple attribute operands. + SimpleAttributeOperand simpleAttribute = operand as SimpleAttributeOperand; + + if (simpleAttribute != null) + { + return target.GetAttributeValue( + context, + simpleAttribute.TypeDefinitionId, + simpleAttribute.BrowsePath, + simpleAttribute.AttributeId, + simpleAttribute.ParsedIndexRange); + } + + // must query the filter target for attribute operands. + AttributeOperand attribute = operand as AttributeOperand; + + if (attribute != null) + { + // AttributeOperands only supported in advanced filter targets. + IAdvancedFilterTarget advancedTarget = target as IAdvancedFilterTarget; + + if (advancedTarget == null) + { + return false; + } + + return advancedTarget.GetRelatedAttributeValue( + context, + attribute.NodeId, + attribute.BrowsePath, + attribute.AttributeId, + attribute.ParsedIndexRange); + } + + // recursively evaluate element operands. + ElementOperand element = operand as ElementOperand; + + if (element != null) + { + return Evaluate(context, target, (int)element.Index); + } + + // oops - Validate() was not called. + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "FilterOperand is not supported."); + } + + /// + /// Returns the BuiltInType type for the value. + /// + private static BuiltInType GetBuiltInType(object value) + { + if (value == null) + { + return BuiltInType.Null; + } + + // return the type of the element for array values. + Type systemType = value.GetType(); + + if (value is Array) + { + systemType = systemType.GetElementType(); + } + + if (systemType == typeof(bool)) { return BuiltInType.Boolean; } + if (systemType == typeof(sbyte)) { return BuiltInType.SByte; } + if (systemType == typeof(byte)) { return BuiltInType.Byte; } + if (systemType == typeof(short)) { return BuiltInType.Int16; } + if (systemType == typeof(ushort)) { return BuiltInType.UInt16; } + if (systemType == typeof(int)) { return BuiltInType.Int32; } + if (systemType == typeof(uint)) { return BuiltInType.UInt32; } + if (systemType == typeof(long)) { return BuiltInType.Int64; } + if (systemType == typeof(ulong)) { return BuiltInType.UInt64; } + if (systemType == typeof(float)) { return BuiltInType.Float; } + if (systemType == typeof(double)) { return BuiltInType.Double; } + if (systemType == typeof(string)) { return BuiltInType.String; } + if (systemType == typeof(DateTime)) { return BuiltInType.DateTime; } + if (systemType == typeof(Guid)) { return BuiltInType.Guid; } + if (systemType == typeof(Uuid)) { return BuiltInType.Guid; } + if (systemType == typeof(byte[])) { return BuiltInType.ByteString; } + if (systemType == typeof(XmlElement)) { return BuiltInType.XmlElement; } + if (systemType == typeof(NodeId)) { return BuiltInType.NodeId; } + if (systemType == typeof(ExpandedNodeId)) { return BuiltInType.ExpandedNodeId; } + if (systemType == typeof(StatusCode)) { return BuiltInType.StatusCode; } + if (systemType == typeof(DiagnosticInfo)) { return BuiltInType.DiagnosticInfo; } + if (systemType == typeof(QualifiedName)) { return BuiltInType.QualifiedName; } + if (systemType == typeof(LocalizedText)) { return BuiltInType.LocalizedText; } + if (systemType == typeof(ExtensionObject)) { return BuiltInType.ExtensionObject; } + if (systemType == typeof(DataValue)) { return BuiltInType.DataValue; } + if (systemType == typeof(Variant)) { return BuiltInType.Variant; } + if (systemType == typeof(object)) { return BuiltInType.Variant; } + + if (systemType.GetTypeInfo().IsEnum) + { + return BuiltInType.Enumeration; + } + + // not a recognized type. + return BuiltInType.Null; + } + + /// + /// Returns the BuiltInType type for the DataTypeId. + /// + private static BuiltInType GetBuiltInType(NodeId datatypeId) + { + if (datatypeId == null || datatypeId.NamespaceIndex != 0 || datatypeId.IdType != IdType.Numeric) + { + return BuiltInType.Null; + } + + return (BuiltInType)Enum.ToObject(typeof(BuiltInType), datatypeId.Identifier); + } + + /// + /// Returns the data type precedence for the value. + /// + private static int GetDataTypePrecedence(BuiltInType type) + { + switch (type) + { + case BuiltInType.Double: { return 18; } + case BuiltInType.Float: { return 17; } + case BuiltInType.Int64: { return 16; } + case BuiltInType.UInt64: { return 15; } + case BuiltInType.Int32: { return 14; } + case BuiltInType.UInt32: { return 13; } + case BuiltInType.StatusCode: { return 12; } + case BuiltInType.Int16: { return 11; } + case BuiltInType.UInt16: { return 10; } + case BuiltInType.SByte: { return 9; } + case BuiltInType.Byte: { return 8; } + case BuiltInType.Boolean: { return 7; } + case BuiltInType.Guid: { return 6; } + case BuiltInType.String: { return 5; } + case BuiltInType.ExpandedNodeId: { return 4; } + case BuiltInType.NodeId: { return 3; } + case BuiltInType.LocalizedText: { return 2; } + case BuiltInType.QualifiedName: { return 1; } + } + + return 0; + } + + /// + /// Implicitly converts the values according to their data type precedence. + /// + private static void DoImplicitConversion(ref object value1, ref object value2) + { + BuiltInType type1 = GetBuiltInType(value1); + BuiltInType type2 = GetBuiltInType(value2); + + int precedence1 = GetDataTypePrecedence(type1); + int precedence2 = GetDataTypePrecedence(type2); + + // nothing to do if already the same. + if (precedence1 == precedence2) + { + return; + } + + // convert to the value with higher precedence. + if (precedence1 > precedence2) + { + value2 = Cast(value2, type2, type1); + } + else + { + value1 = Cast(value1, type1, type2); + } + } + + /// + /// Returns true if the values are equal. + /// + private static bool IsEqual(object value1, object value2) + { + if (value1 == null || value2 == null) + { + return value1 == null && value2 == null; + } + + if (value1 is DBNull || value2 is DBNull) + { + return value1 is DBNull && value2 is DBNull; + } + + if (value1.GetType() != value2.GetType()) + { + return false; + } + + return Utils.IsEqual(value1, value2); + } + + /// + /// Returns true if the target string matches the UA pattern string. + /// The pattern string may include UA wildcards %_\[]! + /// + /// String to check for a pattern match. + /// Pattern to match with the target string. + /// true if the target string matches the pattern, otherwise false. + private static bool Match(string target, string pattern) + { + string expression = pattern; + + // 1) Suppress unused regular expression characters with special meaning + // the following characters have special meaning in a regular expression []\^$.|?*+() + // the following characters are OPC UA wildcards %_\[]! + // The specail meaning of the regular expression characters not coincident with the + // OPC UA wildcards must be suppressed so as not to interfere with matching. + // preceed all '^', '$', '.', '|', '?', '*', '+', '(', ')' with a '\' + expression = Regex.Replace(expression, "([\\^\\$\\.\\|\\?\\*\\+\\(\\)])", "\\$1", RegexOptions.Compiled); + + // 2) Replace all OPC UA wildcards with their regular expression equivalents + // replace all '%' with ".+", except "\%" + expression = Regex.Replace(expression, "(? + /// Converts a value to a Boolean + /// + private static object ToBoolean(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + bool[] output = new bool[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (bool)Cast(array.GetValue(ii), BuiltInType.Boolean); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Boolean: + { + return (bool)value; + } + + case BuiltInType.SByte: return Convert.ToBoolean((byte)value); + case BuiltInType.Byte: return Convert.ToBoolean((byte)value); + case BuiltInType.Int16: return Convert.ToBoolean((short)value); + case BuiltInType.UInt16: return Convert.ToBoolean((ushort)value); + case BuiltInType.Int32: return Convert.ToBoolean((int)value); + case BuiltInType.UInt32: return Convert.ToBoolean((uint)value); + case BuiltInType.Int64: return Convert.ToBoolean((long)value); + case BuiltInType.UInt64: return Convert.ToBoolean((ulong)value); + case BuiltInType.Float: return Convert.ToBoolean((float)value); + case BuiltInType.Double: return Convert.ToBoolean((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToBoolean((string)value); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a SByte + /// + private static object ToSByte(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + sbyte[] output = new sbyte[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (sbyte)Cast(array.GetValue(ii), BuiltInType.SByte); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.SByte: + { + return (sbyte)value; + } + + case BuiltInType.Boolean: return Convert.ToSByte((bool)value); + case BuiltInType.Byte: return Convert.ToSByte((byte)value); + case BuiltInType.Int16: return Convert.ToSByte((short)value); + case BuiltInType.UInt16: return Convert.ToSByte((ushort)value); + case BuiltInType.Int32: return Convert.ToSByte((int)value); + case BuiltInType.UInt32: return Convert.ToSByte((uint)value); + case BuiltInType.Int64: return Convert.ToSByte((long)value); + case BuiltInType.UInt64: return Convert.ToSByte((ulong)value); + case BuiltInType.Float: return Convert.ToSByte((float)value); + case BuiltInType.Double: return Convert.ToSByte((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToSByte((string)value); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a Byte + /// + private static object ToByte(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + throw new NotImplementedException("Arrays of Byte not supported. Use ByteString instead."); + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Byte: + { + return (byte)value; + } + + case BuiltInType.Boolean: return Convert.ToByte((bool)value); + case BuiltInType.SByte: return Convert.ToByte((sbyte)value); + case BuiltInType.Int16: return Convert.ToByte((short)value); + case BuiltInType.UInt16: return Convert.ToByte((ushort)value); + case BuiltInType.Int32: return Convert.ToByte((int)value); + case BuiltInType.UInt32: return Convert.ToByte((uint)value); + case BuiltInType.Int64: return Convert.ToByte((long)value); + case BuiltInType.UInt64: return Convert.ToByte((ulong)value); + case BuiltInType.Float: return Convert.ToByte((float)value); + case BuiltInType.Double: return Convert.ToByte((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToByte((string)value); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a Int16 + /// + private static object ToInt16(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + short[] output = new short[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (short)Cast(array.GetValue(ii), BuiltInType.Int16); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Int16: + { + return (short)value; + } + + case BuiltInType.Boolean: return Convert.ToInt16((bool)value); + case BuiltInType.SByte: return Convert.ToInt16((sbyte)value); + case BuiltInType.Byte: return Convert.ToInt16((byte)value); + case BuiltInType.UInt16: return Convert.ToInt16((ushort)value); + case BuiltInType.Int32: return Convert.ToInt16((int)value); + case BuiltInType.UInt32: return Convert.ToInt16((uint)value); + case BuiltInType.Int64: return Convert.ToInt16((long)value); + case BuiltInType.UInt64: return Convert.ToInt16((ulong)value); + case BuiltInType.Float: return Convert.ToInt16((float)value); + case BuiltInType.Double: return Convert.ToInt16((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToInt16((string)value); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a UInt16 + /// + private static object ToUInt16(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + ushort[] output = new ushort[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (ushort)Cast(array.GetValue(ii), BuiltInType.UInt16); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.UInt16: + { + return (ushort)value; + } + + case BuiltInType.Boolean: return Convert.ToUInt16((bool)value); + case BuiltInType.SByte: return Convert.ToUInt16((sbyte)value); + case BuiltInType.Byte: return Convert.ToUInt16((byte)value); + case BuiltInType.Int16: return Convert.ToUInt16((short)value); + case BuiltInType.Int32: return Convert.ToUInt16((int)value); + case BuiltInType.UInt32: return Convert.ToUInt16((uint)value); + case BuiltInType.Int64: return Convert.ToUInt16((long)value); + case BuiltInType.UInt64: return Convert.ToUInt16((ulong)value); + case BuiltInType.Float: return Convert.ToUInt16((float)value); + case BuiltInType.Double: return Convert.ToUInt16((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToUInt16((string)value); + } + + case BuiltInType.StatusCode: + { + StatusCode code = (StatusCode)value; + return (ushort)(code.CodeBits>>16); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a Int32 + /// + private static object ToInt32(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + int[] output = new int[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (int)Cast(array.GetValue(ii), BuiltInType.Int32); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Int32: + { + return (int)value; + } + + case BuiltInType.Boolean: return Convert.ToInt32((bool)value); + case BuiltInType.SByte: return Convert.ToInt32((sbyte)value); + case BuiltInType.Byte: return Convert.ToInt32((byte)value); + case BuiltInType.Int16: return Convert.ToInt32((short)value); + case BuiltInType.UInt16: return Convert.ToInt32((ushort)value); + case BuiltInType.UInt32: return Convert.ToInt32((uint)value); + case BuiltInType.Int64: return Convert.ToInt32((long)value); + case BuiltInType.UInt64: return Convert.ToInt32((ulong)value); + case BuiltInType.Float: return Convert.ToInt32((float)value); + case BuiltInType.Double: return Convert.ToInt32((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToInt32((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToInt32(((StatusCode)value).Code); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a UInt32 + /// + private static object ToUInt32(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + uint[] output = new uint[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (uint)Cast(array.GetValue(ii), BuiltInType.UInt32); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.UInt32: + { + return (uint)value; + } + + case BuiltInType.Boolean: return Convert.ToUInt32((bool)value); + case BuiltInType.SByte: return Convert.ToUInt32((sbyte)value); + case BuiltInType.Byte: return Convert.ToUInt32((byte)value); + case BuiltInType.Int16: return Convert.ToUInt32((short)value); + case BuiltInType.UInt16: return Convert.ToUInt32((ushort)value); + case BuiltInType.Int32: return Convert.ToUInt32((int)value); + case BuiltInType.Int64: return Convert.ToUInt32((long)value); + case BuiltInType.UInt64: return Convert.ToUInt32((ulong)value); + case BuiltInType.Float: return Convert.ToUInt32((float)value); + case BuiltInType.Double: return Convert.ToUInt32((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToUInt32((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToUInt32(((StatusCode)value).Code); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a Int64 + /// + private static object ToInt64(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + long[] output = new long[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (long)Cast(array.GetValue(ii), BuiltInType.Int64); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Int64: + { + return (long)value; + } + + case BuiltInType.Boolean: return Convert.ToInt64((bool)value); + case BuiltInType.SByte: return Convert.ToInt64((sbyte)value); + case BuiltInType.Byte: return Convert.ToInt64((byte)value); + case BuiltInType.Int16: return Convert.ToInt64((short)value); + case BuiltInType.UInt16: return Convert.ToInt64((ushort)value); + case BuiltInType.Int32: return Convert.ToInt64((int)value); + case BuiltInType.UInt32: return Convert.ToInt64((uint)value); + case BuiltInType.UInt64: return Convert.ToInt64((ulong)value); + case BuiltInType.Float: return Convert.ToInt64((float)value); + case BuiltInType.Double: return Convert.ToInt64((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToInt64((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToInt64(((StatusCode)value).Code); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a UInt64 + /// + private static object ToUInt64(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + ulong[] output = new ulong[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (ulong)Cast(array.GetValue(ii), BuiltInType.UInt64); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.UInt64: + { + return (ulong)value; + } + + case BuiltInType.Boolean: return Convert.ToUInt64((bool)value); + case BuiltInType.SByte: return Convert.ToUInt64((sbyte)value); + case BuiltInType.Byte: return Convert.ToUInt64((byte)value); + case BuiltInType.Int16: return Convert.ToUInt64((short)value); + case BuiltInType.UInt16: return Convert.ToUInt64((ushort)value); + case BuiltInType.Int32: return Convert.ToUInt64((int)value); + case BuiltInType.UInt32: return Convert.ToUInt64((uint)value); + case BuiltInType.Int64: return Convert.ToUInt64((long)value); + case BuiltInType.Float: return Convert.ToUInt64((float)value); + case BuiltInType.Double: return Convert.ToUInt64((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToUInt64((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToUInt64(((StatusCode)value).Code); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a Float + /// + private static object ToFloat(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + float[] output = new float[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (float)Cast(array.GetValue(ii), BuiltInType.Float); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Float: + { + return (float)value; + } + + case BuiltInType.Boolean: return Convert.ToSingle((bool)value); + case BuiltInType.SByte: return Convert.ToSingle((sbyte)value); + case BuiltInType.Byte: return Convert.ToSingle((byte)value); + case BuiltInType.Int16: return Convert.ToSingle((short)value); + case BuiltInType.UInt16: return Convert.ToSingle((ushort)value); + case BuiltInType.Int32: return Convert.ToSingle((int)value); + case BuiltInType.UInt32: return Convert.ToSingle((uint)value); + case BuiltInType.Int64: return Convert.ToSingle((long)value); + case BuiltInType.UInt64: return Convert.ToSingle((ulong)value); + case BuiltInType.Double: return Convert.ToSingle((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToSingle((string)value); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a Double + /// + private static object ToDouble(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + double[] output = new double[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (double)Cast(array.GetValue(ii), BuiltInType.Double); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Double: + { + return (double)value; + } + + case BuiltInType.Boolean: return Convert.ToDouble((bool)value); + case BuiltInType.SByte: return Convert.ToDouble((sbyte)value); + case BuiltInType.Byte: return Convert.ToDouble((byte)value); + case BuiltInType.Int16: return Convert.ToDouble((short)value); + case BuiltInType.UInt16: return Convert.ToDouble((ushort)value); + case BuiltInType.Int32: return Convert.ToDouble((int)value); + case BuiltInType.UInt32: return Convert.ToDouble((uint)value); + case BuiltInType.Int64: return Convert.ToDouble((long)value); + case BuiltInType.UInt64: return Convert.ToDouble((ulong)value); + case BuiltInType.Float: return Convert.ToDouble((float)value); + + case BuiltInType.String: + { + return XmlConvert.ToDouble((string)value); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a String + /// + private static object ToString(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + String[] output = new String[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (String)Cast(array.GetValue(ii), BuiltInType.String); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.String: + { + return (string)value; + } + + case BuiltInType.Boolean: + { + return XmlConvert.ToString((bool)value); + } + + case BuiltInType.SByte: + { + return XmlConvert.ToString((sbyte)value); + } + + case BuiltInType.Byte: + { + return XmlConvert.ToString((byte)value); + } + + case BuiltInType.Int16: + { + return XmlConvert.ToString((short)value); + } + + case BuiltInType.UInt16: + { + return XmlConvert.ToString((ushort)value); + } + + case BuiltInType.Int32: + { + return XmlConvert.ToString((int)value); + } + + case BuiltInType.UInt32: + { + return XmlConvert.ToString((uint)value); + } + + case BuiltInType.Int64: + { + return XmlConvert.ToString((long)value); + } + + case BuiltInType.UInt64: + { + return XmlConvert.ToString((ulong)value); + } + + case BuiltInType.Float: + { + return XmlConvert.ToString((float)value); + } + + case BuiltInType.Double: + { + return XmlConvert.ToString((double)value); + } + + case BuiltInType.DateTime: + { + return XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.Unspecified); + } + + case BuiltInType.Guid: + { + return ((Guid)value).ToString(); + } + + case BuiltInType.NodeId: + { + return ((NodeId)value).ToString(); + } + + case BuiltInType.ExpandedNodeId: + { + return ((ExpandedNodeId)value).ToString(); + } + + case BuiltInType.LocalizedText: + { + return ((LocalizedText)value).Text; + } + + case BuiltInType.QualifiedName: + { + return ((QualifiedName)value).ToString(); + } + } + + // conversion not supported. + return DBNull.Value; + } + + /// + /// Converts a value to a DateTime + /// + private static object ToDateTime(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + DateTime[] output = new DateTime[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (DateTime)Cast(array.GetValue(ii), BuiltInType.DateTime); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.DateTime: + { + return (DateTime)value; + } + + case BuiltInType.String: + { + return XmlConvert.ToDateTimeOffset((string) value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a Guid + /// + private static object ToGuid(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + Guid[] output = new Guid[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (Guid)Cast(array.GetValue(ii), BuiltInType.Guid); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.Guid: + { + return (Guid)value; + } + + case BuiltInType.String: + { + return new Guid((string)value); + } + + case BuiltInType.ByteString: + { + return new Guid((byte[])value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a ByteString + /// + private static object ToByteString(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + byte[][] output = new byte[array.Length][]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (byte[])Cast(array.GetValue(ii), BuiltInType.ByteString); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.ByteString: + { + return (byte[])value; + } + + case BuiltInType.Guid: + { + return ((Guid)value).ToByteArray(); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a NodeId + /// + private static object ToNodeId(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + NodeId[] output = new NodeId[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (NodeId)Cast(array.GetValue(ii), BuiltInType.NodeId); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.NodeId: + { + return (NodeId)value; + } + + case BuiltInType.ExpandedNodeId: + { + return (NodeId)(ExpandedNodeId)value; + } + + case BuiltInType.String: + { + return NodeId.Parse((string)value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a ExpandedNodeId + /// + private static object ToExpandedNodeId(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + ExpandedNodeId[] output = new ExpandedNodeId[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (ExpandedNodeId)Cast(array.GetValue(ii), BuiltInType.ExpandedNodeId); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.ExpandedNodeId: + { + return (ExpandedNodeId)value; + } + + case BuiltInType.NodeId: + { + return (ExpandedNodeId)(NodeId)value; + } + + case BuiltInType.String: + { + return ExpandedNodeId.Parse((string)value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a StatusCode + /// + private static object ToStatusCode(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + StatusCode[] output = new StatusCode[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (StatusCode)Cast(array.GetValue(ii), BuiltInType.StatusCode); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.StatusCode: + { + return (StatusCode)value; + } + + case BuiltInType.UInt16: + { + uint code = Convert.ToUInt32((ushort)value); + code <<= 16; + return (StatusCode)code; + } + + case BuiltInType.Int32: + { + return (StatusCode)Convert.ToUInt32((int)value); + } + + case BuiltInType.UInt32: + { + return (StatusCode)(uint)value; + } + + case BuiltInType.Int64: + { + return (StatusCode)Convert.ToUInt32((long)value); + } + + case BuiltInType.UInt64: + { + return (StatusCode)Convert.ToUInt32((ulong)value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a QualifiedName + /// + private static object ToQualifiedName(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + QualifiedName[] output = new QualifiedName[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (QualifiedName)Cast(array.GetValue(ii), BuiltInType.QualifiedName); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.QualifiedName: + { + return (QualifiedName)value; + } + + case BuiltInType.String: + { + return QualifiedName.Parse((string)value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Converts a value to a LocalizedText + /// + private static object ToLocalizedText(object value, BuiltInType sourceType) + { + // check for array conversions. + Array array = value as Array; + + if (array != null) + { + LocalizedText[] output = new LocalizedText[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + output[ii] = (LocalizedText)Cast(array.GetValue(ii), BuiltInType.LocalizedText); + } + + return output; + } + + // handle for supported conversions. + switch (sourceType) + { + case BuiltInType.LocalizedText: + { + return (LocalizedText)value; + } + + case BuiltInType.String: + { + return new LocalizedText((string)value); + } + } + + // conversion not supported. + return null; + } + + /// + /// Casts a value to the specified target type. + /// + private static object Cast(object source, BuiltInType targetType) + { + BuiltInType sourceType = GetBuiltInType(source); + + if (sourceType == BuiltInType.Null) + { + return null; + } + + return Cast(source, sourceType, targetType); + } + + /// + /// Casts a value to the specified target type. + /// + private static object Cast(object source, BuiltInType sourceType, BuiltInType targetType) + { + // null always casts to null. + if (source == null) + { + return null; + } + + // extract the value from a Variant if specified. + if (source is Variant) + { + return Cast(((Variant)source).Value, targetType); + } + + // call the appropriate function if a conversion is supported for the target type. + try + { + switch (targetType) + { + case BuiltInType.Boolean: return ToBoolean(source, sourceType); + case BuiltInType.SByte: return ToSByte(source, sourceType); + case BuiltInType.Byte: return ToByte(source, sourceType); + case BuiltInType.Int16: return ToInt16(source, sourceType); + case BuiltInType.UInt16: return ToUInt16(source, sourceType); + case BuiltInType.Int32: return ToInt32(source, sourceType); + case BuiltInType.UInt32: return ToUInt32(source, sourceType); + case BuiltInType.Int64: return ToInt64(source, sourceType); + case BuiltInType.UInt64: return ToUInt64(source, sourceType); + case BuiltInType.Float: return ToFloat(source, sourceType); + case BuiltInType.Double: return ToDouble(source, sourceType); + case BuiltInType.String: return ToString(source, sourceType); + case BuiltInType.DateTime: return ToDateTime(source, sourceType); + case BuiltInType.Guid: return ToGuid(source, sourceType); + case BuiltInType.ByteString: return ToByteString(source, sourceType); + case BuiltInType.NodeId: return ToNodeId(source, sourceType); + case BuiltInType.ExpandedNodeId: return ToExpandedNodeId(source, sourceType); + case BuiltInType.StatusCode: return ToStatusCode(source, sourceType); + case BuiltInType.QualifiedName: return ToQualifiedName(source, sourceType); + case BuiltInType.LocalizedText: return ToLocalizedText(source, sourceType); + } + } + catch (Exception e) + { + Utils.Trace(e, "Error converting a {1} (Value={0}) to {2}.", source, sourceType, targetType); + } + + // conversion not supported. + return null; + } + #endregion + + #region FilterOperator Implementations + /// + /// And FilterOperator + /// + private bool? And(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + bool? lhs = GetValue(context, operands[0], target) as bool?; + + // no need for further processing if first operand is false. + if (lhs != null && !lhs.Value) + { + return false; + } + + bool? rhs = GetValue(context, operands[1], target) as bool?; + + if (lhs == null) + { + if (rhs == null || rhs == true) + { + return null; + } + else + { + return false; + } + } + + if (rhs == null) + { + if (lhs == null || lhs == true) + { + return null; + } + else + { + return false; + } + } + + return lhs.Value && rhs.Value; + } + + /// + /// Or FilterOperator + /// + private bool? Or(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + bool? lhs = GetValue(context, operands[0], target) as bool?; + + // no need for further processing if first operand is true. + if (lhs != null && lhs.Value) + { + return true; + } + + bool? rhs = GetValue(context, operands[1], target) as bool?; + + if (lhs == null) + { + if (rhs == null || rhs == false) + { + return null; + } + else + { + return true; + } + } + + if (rhs == null) + { + if (lhs == null || lhs == false) + { + return null; + } + else + { + return true; + } + } + + return lhs.Value || rhs.Value; + } + + /// + /// Not FilterOperator + /// + private bool? Not(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 1); + + bool? rhs = GetValue(context, operands[0], target) as bool?; + + if (rhs == null) + { + return null; + } + + return !rhs.Value; + } + + /// + /// Equals FilterOperator + /// + private bool Equals(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + object lhs = GetValue(context, operands[0], target); + object rhs = GetValue(context, operands[1], target); + + DoImplicitConversion(ref lhs, ref rhs); + + return IsEqual(lhs, rhs); + } + + /// + /// GreaterThan FilterOperator + /// + private bool? GreaterThan(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + object lhs = GetValue(context, operands[0], target); + object rhs = GetValue(context, operands[1], target); + + DoImplicitConversion(ref lhs, ref rhs); + + if (lhs is IComparable && rhs is IComparable) + { + return ((IComparable)lhs).CompareTo(rhs) > 0; + } + + // return null if the types are not comparable. + return null; + } + + /// + /// GreaterThanOrEqual FilterOperator + /// + private bool? GreaterThanOrEqual(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + object lhs = GetValue(context, operands[0], target); + object rhs = GetValue(context, operands[1], target); + + DoImplicitConversion(ref lhs, ref rhs); + + if (lhs is IComparable && rhs is IComparable) + { + return ((IComparable)lhs).CompareTo(rhs) >= 0; + } + + // return null if the types are not comparable. + return null; + } + + /// + /// LessThan FilterOperator + /// + private bool? LessThan(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + object lhs = GetValue(context, operands[0], target); + object rhs = GetValue(context, operands[1], target); + + DoImplicitConversion(ref lhs, ref rhs); + + if (lhs is IComparable && rhs is IComparable) + { + return ((IComparable)lhs).CompareTo(rhs) < 0; + } + + // return null if the types are not comparable. + return null; + } + + /// + /// LessThanOrEqual FilterOperator + /// + private bool? LessThanOrEqual(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + object lhs = GetValue(context, operands[0], target); + object rhs = GetValue(context, operands[1], target); + + DoImplicitConversion(ref lhs, ref rhs); + + if (lhs is IComparable && rhs is IComparable) + { + return ((IComparable)lhs).CompareTo(rhs) <= 0; + } + + // return null if the types are not comparable. + return null; + } + + /// + /// Between FilterOperator + /// + private bool? Between(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 3); + + object value = GetValue(context, operands[0], target); + + object min = GetValue(context, operands[1], target); + object max = GetValue(context, operands[2], target); + + // the min and max could be different data types so the implicit conversion must be done twice. + object lhs = value; + DoImplicitConversion(ref lhs, ref min); + + bool? result = null; + + if (lhs is IComparable && min is IComparable) + { + // check if never in range no matter what happens with the upper bound. + if (((IComparable)lhs).CompareTo(min) < 0) + { + return false; + } + + result = true; + } + + lhs = value; + DoImplicitConversion(ref lhs, ref max); + + if (lhs is IComparable && max is IComparable) + { + // check if never in range no matter what happens with the lower bound. + if (((IComparable)lhs).CompareTo(max) > 0) + { + return false; + } + + // can't determine if in range if lower bound could not be resolved. + return result != null; + } + + // return null if the types are not comparable. + return null; + } + + /// + /// InList FilterOperator + /// + private bool? InList(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 0); + + object value = GetValue(context, operands[0], target); + + // check for a match. + for (int ii = 1; ii < operands.Length; ii++) + { + object lhs = value; + object rhs = GetValue(context, operands[ii], target); + + DoImplicitConversion(ref lhs, ref rhs); + + if (IsEqual(lhs, rhs)) + { + return true; + } + } + + // no match. + return false; + } + + /// + /// Like FilterOperator + /// + private bool Like(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + object firstOperand = GetValue(context, operands[0], target); + string lhs; + LocalizedText firstOperandLocalizedText = firstOperand as LocalizedText; + if (firstOperandLocalizedText != null) + { + lhs = firstOperandLocalizedText.Text; + } + else + { + lhs = firstOperand as string; + } + + object secondOperand = GetValue(context, operands[1], target); + string rhs; + LocalizedText secondOperandLocalizedText = secondOperand as LocalizedText; + if (secondOperandLocalizedText != null) + { + rhs = secondOperandLocalizedText.Text; + } + else + { + rhs = secondOperand as string; + } + + // this operator requires strings. + if (lhs == null || rhs == null) + { + return false; + } + + return Match((string)lhs, (string)rhs); + } + + /// + /// IsNull FilterOperator + /// + private bool IsNull(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 1); + + object rhs = GetValue(context, operands[0], target); + + if (rhs == null) + { + return true; + } + + return false; + } + + /// + /// Cast FilterOperator + /// + private object Cast(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 2); + + // get the value to cast. + object value = GetValue(context, operands[0], target); + + if (value == null) + { + return null; + } + + // get the datatype to cast to. + NodeId datatype = GetValue(context, operands[1], target) as NodeId; + + if (datatype == null) + { + return null; + } + + BuiltInType targetType = GetBuiltInType(datatype); + + // cast the value. + return Cast(value, targetType); + } + + /// + /// OfType FilterOperator + /// + private bool OfType(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + FilterOperand[] operands = GetOperands(element, 1); + + // get the desired type. + NodeId typeDefinitionId = GetValue(context, operands[0], target) as NodeId; + + if (typeDefinitionId == null || target == null) + { + return false; + } + + // check the type. + try + { + return target.IsTypeOf(context, typeDefinitionId); + } + catch + { + return false; + } + } + + /// + /// InView FilterOperator + /// + private bool InView(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + // views only supported in advanced filter targets. + IAdvancedFilterTarget advancedFilter = target as IAdvancedFilterTarget; + + if (advancedFilter == null) + { + return false; + } + + FilterOperand[] operands = GetOperands(element, 1); + + // get the desired type. + NodeId viewId = GetValue(context, operands[0], target) as NodeId; + + if (viewId == null || target == null) + { + return false; + } + + // check the target. + try + { + return advancedFilter.IsInView(context, viewId); + } + catch + { + return false; + } + } + + /// + /// RelatedTo FilterOperator + /// + private bool RelatedTo(FilterContext context, IFilterTarget target, ContentFilterElement element) + { + return RelatedTo(context, target, element, null); + } + + /// + /// RelatedTo FilterOperator + /// + private bool RelatedTo(FilterContext context, IFilterTarget target, ContentFilterElement element, NodeId intermediateNodeId) + { + // RelatedTo only supported in advanced filter targets. + IAdvancedFilterTarget advancedTarget = target as IAdvancedFilterTarget; + + if (advancedTarget == null) + { + return false; + } + + FilterOperand[] operands = GetOperands(element, 6); + + // get the type of the source. + NodeId sourceTypeId = GetValue(context, operands[0], target) as NodeId; + + if (sourceTypeId == null) + { + return false; + } + + // get the type of reference to follow. + NodeId referenceTypeId = GetValue(context, operands[2], target) as NodeId; + + if (referenceTypeId == null) + { + return false; + } + + // get the number of hops + int? hops = 1; + + object hopsValue = GetValue(context, operands[3], target); + + if (hopsValue != null) + { + hops = Cast(hopsValue, BuiltInType.Int32) as int?; + + if (hops == null) + { + hops = 1; + } + } + + // get whether to include type definition subtypes. + bool? includeTypeDefinitionSubtypes = true; + + object includeValue = GetValue(context, operands[4], target); + + if (includeValue != null) + { + includeTypeDefinitionSubtypes = Cast(includeValue, BuiltInType.Boolean) as bool?; + + if (includeTypeDefinitionSubtypes == null) + { + includeTypeDefinitionSubtypes = true; + } + } + + // get whether to include reference type subtypes. + bool? includeReferenceTypeSubtypes = true; + + includeValue = GetValue(context, operands[5], target); + + if (includeValue != null) + { + includeReferenceTypeSubtypes = Cast(includeValue, BuiltInType.Boolean) as bool?; + + if (includeReferenceTypeSubtypes == null) + { + includeReferenceTypeSubtypes = true; + } + } + + NodeId targetTypeId = null; + + // check if elements are chained. + ElementOperand chainedOperand = operands[1] as ElementOperand; + + if (chainedOperand != null) + { + if (chainedOperand.Index < 0 || chainedOperand.Index >= Elements.Count) + { + return false; + } + + ContentFilterElement chainedElement = Elements[(int)chainedOperand.Index]; + + // get the target type from the first operand of the chained element. + if (chainedElement.FilterOperator == FilterOperator.RelatedTo) + { + FilterOperand nestedType = ExtensionObject.ToEncodeable(chainedElement.FilterOperands[0]) as FilterOperand; + + targetTypeId = GetValue(context, nestedType, target) as NodeId; + + if (targetTypeId == null) + { + return false; + } + + // find the nodes that meet the criteria in the first link of the chain. + IList nodeIds = advancedTarget.GetRelatedNodes( + context, + intermediateNodeId, + sourceTypeId, + targetTypeId, + referenceTypeId, + hops.Value, + includeTypeDefinitionSubtypes.Value, + includeReferenceTypeSubtypes.Value); + + if (nodeIds == null || nodeIds.Count == 0) + { + return false; + } + + // recursively follow the chain. + for (int ii = 0; ii < nodeIds.Count; ii++) + { + // one match is all that is required. + if (RelatedTo(context, target, chainedElement, nodeIds[ii])) + { + return true; + } + } + + // no matches. + return false; + } + } + + // get the type of the target. + if (targetTypeId == null) + { + targetTypeId = GetValue(context, operands[1], target) as NodeId; + + if (targetTypeId == null) + { + return false; + } + } + + // check the target. + try + { + bool relatedTo = advancedTarget.IsRelatedTo( + context, + intermediateNodeId, + sourceTypeId, + targetTypeId, + referenceTypeId, + hops.Value, + includeTypeDefinitionSubtypes.Value, + includeReferenceTypeSubtypes.Value); + + return relatedTo; + } + catch + { + return false; + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/EUInformation.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/EUInformation.cs new file mode 100644 index 00000000..151c8a38 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/EUInformation.cs @@ -0,0 +1,50 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Stores information about engineering units. + /// + public partial class EUInformation + { + /// + /// Initializes the object with the unitName and namespaceUri. + /// + public EUInformation(string unitName, string namespaceUri) + { + Initialize(); + + m_displayName = new LocalizedText(unitName); + m_description = new LocalizedText(unitName); + m_namespaceUri = namespaceUri; + } + + /// + /// Initializes the object with the unitName and namespaceUri. + /// + public EUInformation(string shortName, string longName, string namespaceUri) + { + Initialize(); + + m_displayName = new LocalizedText(shortName); + m_description = new LocalizedText(longName); + m_namespaceUri = namespaceUri; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/EventFieldList.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/EventFieldList.cs new file mode 100644 index 00000000..64c0ae62 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/EventFieldList.cs @@ -0,0 +1,50 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// A list of event field values returned in a NotificationMessage. + /// + public partial class EventFieldList + { + #region Public Properties + /// + /// The handle cast to a notification message. + /// + public NotificationMessage Message + { + get { return m_handle as NotificationMessage; } + set { m_handle = value; } + } + + /// + /// A handle associated withe the event instance. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + #endregion + + #region Private Fields + private object m_handle; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/HistoryReadValueId.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/HistoryReadValueId.cs new file mode 100644 index 00000000..4a5e164a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/HistoryReadValueId.cs @@ -0,0 +1,102 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a value to read. + /// + public partial class HistoryReadValueId + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + + /// + /// Stores the parsed form of the index range parameter. + /// + public NumericRange ParsedIndexRange + { + get { return m_parsedIndexRange; } + set { m_parsedIndexRange = value; } + } + + /// + /// Validates a read value id parameter. + /// + public static ServiceResult Validate(HistoryReadValueId valueId) + { + // check for null structure. + if (valueId == null) + { + return StatusCodes.BadStructureMissing; + } + + // null node ids are always invalid. + if (NodeId.IsNull(valueId.NodeId)) + { + return StatusCodes.BadNodeIdInvalid; + } + + // initialize as empty. + valueId.ParsedIndexRange = NumericRange.Empty; + + // parse the index range if specified. + if (!String.IsNullOrEmpty(valueId.IndexRange)) + { + try + { + valueId.ParsedIndexRange = NumericRange.Parse(valueId.IndexRange); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadIndexRangeInvalid, String.Empty); + } + } + else + { + valueId.ParsedIndexRange = NumericRange.Empty; + } + + // passed basic validation. + return null; + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + private NumericRange m_parsedIndexRange; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/HistoryUpdateDetails.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/HistoryUpdateDetails.cs new file mode 100644 index 00000000..edee4ad2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/HistoryUpdateDetails.cs @@ -0,0 +1,72 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a value to read. + /// + public partial class HistoryUpdateDetails + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + + /// + /// Validates a HistoryUpdateDetails parameter. + /// + public static ServiceResult Validate(HistoryUpdateDetails valueId) + { + // check for null structure. + if (valueId == null) + { + return StatusCodes.BadStructureMissing; + } + + // null node ids are always invalid. + if (NodeId.IsNull(valueId.NodeId)) + { + return StatusCodes.BadNodeIdInvalid; + } + + // passed basic validation. + return null; + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemCreateRequest.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemCreateRequest.cs new file mode 100644 index 00000000..99e78bf8 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemCreateRequest.cs @@ -0,0 +1,51 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a monitored item to create. + /// + public partial class MonitoredItemCreateRequest + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemCreateResult.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemCreateResult.cs new file mode 100644 index 00000000..8a648cb6 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemCreateResult.cs @@ -0,0 +1,35 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a monitored item to create. + /// + public partial class MonitoredItemCreateResult + { + /// + /// Initializes the object with an error code. + /// + public MonitoredItemCreateResult(uint statusCode) + { + Initialize(); + m_statusCode = statusCode; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemModifyRequest.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemModifyRequest.cs new file mode 100644 index 00000000..f2b6022e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemModifyRequest.cs @@ -0,0 +1,51 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a monitored item to create. + /// + public partial class MonitoredItemModifyRequest + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemNotification.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemNotification.cs new file mode 100644 index 00000000..03b9121e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoredItemNotification.cs @@ -0,0 +1,51 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// A datachange returned in a NotificationMessage. + /// + public partial class MonitoredItemNotification + { + #region Public Properties + /// + /// The notification message that the item belongs to. + /// + public NotificationMessage Message + { + get { return m_message; } + set { m_message = value; } + } + + /// + /// The diagnostic info associated with the notification. + /// + public DiagnosticInfo DiagnosticInfo + { + get { return m_diagnosticInfo; } + set { m_diagnosticInfo = value; } + } + #endregion + + #region Private Fields + private NotificationMessage m_message; + private DiagnosticInfo m_diagnosticInfo; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoringFilter.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoringFilter.cs new file mode 100644 index 00000000..bdb67a2c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/MonitoringFilter.cs @@ -0,0 +1,707 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Text; + +namespace Opc.Ua +{ + /// + /// A filter to apply when monitoring data changes. + /// + public partial class DataChangeFilter + { + #region Public Methods + /// + /// Checks that the filter is valid. + /// + public ServiceResult Validate() + { + // check deadband type enumeration. + if ((int)DeadbandType < (int)Opc.Ua.DeadbandType.None || (int)DeadbandType > (int)Opc.Ua.DeadbandType.Percent) + { + return ServiceResult.Create( + StatusCodes.BadDeadbandFilterInvalid, + "Deadband type '{0}' is not recognized.", + DeadbandType); + } + + // check data change trigger enumeration. + if ((int)Trigger < (int)DataChangeTrigger.Status || (int)Trigger > (int)DataChangeTrigger.StatusValueTimestamp) + { + return ServiceResult.Create( + StatusCodes.BadDeadbandFilterInvalid, + "Deadband trigger '{0}' is not recognized.", + Trigger); + } + + // deadband value must always be greater than 0. + if (DeadbandValue < 0) + { + return ServiceResult.Create( + StatusCodes.BadDeadbandFilterInvalid, + "Deadband value '{0}' cannot be less than zero.", + DeadbandValue); + } + + // deadband percentage must be less than 100. + if ((int)DeadbandType == (int)Opc.Ua.DeadbandType.Percent) + { + if (DeadbandValue > 100) + { + return ServiceResult.Create( + StatusCodes.BadDeadbandFilterInvalid, + "Percentage deadband value '{0}' cannot be greater than 100.", + DeadbandValue); + } + } + + // passed initial validation. + return ServiceResult.Good; + } + + /// + /// Returns the AbsoluteDeadband if the filter specifies one. Zero otherwize. + /// + public static double GetAbsoluteDeadband(MonitoringFilter filter) + { + DataChangeFilter datachangeFilter = filter as DataChangeFilter; + + if (datachangeFilter == null) + { + return 0.0; + } + + if (datachangeFilter.DeadbandType != (uint)Opc.Ua.DeadbandType.Absolute) + { + return 0.0; + } + + return datachangeFilter.DeadbandValue; + } + + /// + /// Returns the PercentageDeadband if the filter specifies one. Zero otherwize. + /// + public static double GetPercentageDeadband(MonitoringFilter filter) + { + DataChangeFilter datachangeFilter = filter as DataChangeFilter; + + if (datachangeFilter == null) + { + return 0.0; + } + + if (datachangeFilter.DeadbandType != (uint)Opc.Ua.DeadbandType.Percent) + { + return 0.0; + } + + return datachangeFilter.DeadbandValue; + } + #endregion + } + + /// + /// A filter to apply when monitoring event. + /// + public partial class EventFilter + { + /// + /// Adds the specified property to the event filter. + /// + public void AddSelectClause(NodeId eventTypeId, QualifiedName propertyName) + { + SimpleAttributeOperand clause = new SimpleAttributeOperand(); + + clause.TypeDefinitionId = eventTypeId; + clause.AttributeId = Attributes.Value; + + clause.BrowsePath.Add(propertyName); + + SelectClauses.Add(clause); + } + + /// + /// Adds the specified browse path to the event filter. + /// + public void AddSelectClause(NodeId eventTypeId, string browsePath, uint attributeId) + { + SimpleAttributeOperand clause = new SimpleAttributeOperand(); + + clause.TypeDefinitionId = eventTypeId; + clause.AttributeId = attributeId; + + if (!String.IsNullOrEmpty(browsePath)) + { + clause.BrowsePath = SimpleAttributeOperand.Parse(browsePath); + } + + SelectClauses.Add(clause); + } + + /// + /// Stores the validation results for a EventFilter. + /// + public class Result + { + #region Public Interface + /// + /// Initializes the object. + /// + public Result() + { + } + + /// + /// Casts ServiceResult to an ElementResult. + /// + public static implicit operator Result(ServiceResult status) + { + Result result = new Result(); + result.Status = status; + return result; + } + + /// + /// The result for the entire filter. + /// + public ServiceResult Status + { + get { return m_status; } + set { m_status = value; } + } + + /// + /// Returns a string containing the errors reported. + /// + public string GetLongString() + { + StringBuilder buffer = new StringBuilder(); + + foreach (ServiceResult selectResult in SelectClauseResults) + { + if (ServiceResult.IsBad(selectResult)) + { + buffer.AppendFormat("Select Clause Error: {0}", selectResult.ToString()); + buffer.AppendLine(); + } + } + + if (ServiceResult.IsBad(WhereClauseResult.Status)) + { + buffer.AppendFormat("Where Clause Error: {0}", WhereClauseResult.Status.ToString()); + buffer.AppendLine(); + + foreach (ContentFilter.ElementResult elementResult in WhereClauseResult.ElementResults) + { + if (elementResult != null && ServiceResult.IsBad(elementResult.Status)) + { + buffer.AppendFormat("Element Error: {0}", elementResult.Status.ToString()); + buffer.AppendLine(); + + foreach (ServiceResult operandResult in elementResult.OperandResults) + { + if (ServiceResult.IsBad(operandResult)) + { + buffer.AppendFormat("Operand Error: {0}",operandResult.ToString()); + buffer.AppendLine(); + } + } + } + } + } + + return buffer.ToString(); + } + + /// + /// The result for each select clause. + /// + public List SelectClauseResults + { + get + { + if (m_selectClauseResults == null) + { + m_selectClauseResults = new List(); + } + + return m_selectClauseResults; + } + } + + /// + /// The results for the where clause. + /// + public Opc.Ua.ContentFilter.Result WhereClauseResult + { + get + { + return m_whereClauseResults; + } + + internal set + { + m_whereClauseResults = value; + } + } + + /// + /// Converts the object to an EventFilterResult. + /// + public EventFilterResult ToEventFilterResult(DiagnosticsMasks diagnosticsMasks, StringTable stringTable) + { + EventFilterResult result = new EventFilterResult(); + + if (m_selectClauseResults != null && m_selectClauseResults.Count > 0) + { + foreach (ServiceResult clauseResult in m_selectClauseResults) + { + if (ServiceResult.IsBad(clauseResult)) + { + result.SelectClauseResults.Add(clauseResult.StatusCode); + result.SelectClauseDiagnosticInfos.Add(new DiagnosticInfo(clauseResult, diagnosticsMasks, false, stringTable)); + } + else + { + result.SelectClauseResults.Add(StatusCodes.Good); + result.SelectClauseDiagnosticInfos.Add(null); + } + } + } + + if (m_whereClauseResults != null) + { + result.WhereClauseResult = m_whereClauseResults.ToContextFilterResult(diagnosticsMasks, stringTable); + } + + return result; + } + #endregion + + #region Private Fields + private ServiceResult m_status; + private List m_selectClauseResults; + private ContentFilter.Result m_whereClauseResults; + #endregion + } + + /// + /// Validates the object. + /// + public Result Validate(FilterContext context) + { + Result result = new Result(); + + // check for top level error. + if (m_selectClauses == null || m_selectClauses.Count == 0) + { + result.Status = ServiceResult.Create( + StatusCodes.BadStructureMissing, + "EventFilter does not specify any Select Clauses."); + + return result; + } + + if (m_whereClause == null) + { + result.Status = ServiceResult.Create( + StatusCodes.BadStructureMissing, + "EventFilter does not specify any Where Clauses."); + + return result; + } + + result.Status = ServiceResult.Good; + + // validate select clause. + bool error = false; + + foreach (SimpleAttributeOperand clause in m_selectClauses) + { + ServiceResult clauseResult = null; + + // check for null. + if (clause == null) + { + clauseResult = ServiceResult.Create( + StatusCodes.BadStructureMissing, + "EventFilterSelectClause cannot be null in EventFilter SelectClause."); + + result.SelectClauseResults.Add(clauseResult); + error = true; + continue; + } + + // validate clause. + clauseResult = clause.Validate(context, 0); + + if (ServiceResult.IsBad(clauseResult)) + { + result.SelectClauseResults.Add(clauseResult); + error = true; + continue; + } + + // clause ok. + result.SelectClauseResults.Add(null); + } + + if (error) + { + result.Status = StatusCodes.BadEventFilterInvalid; + } + else + { + result.SelectClauseResults.Clear(); + } + + // validate where clause. + result.WhereClauseResult = m_whereClause.Validate(context); + + if (ServiceResult.IsBad(result.WhereClauseResult.Status)) + { + result.Status = StatusCodes.BadEventFilterInvalid; + } + + return result; + } + } + + /// + /// A clause that identifies a field to return with the event. + /// + public partial class SimpleAttributeOperand : IFormattable + { + #region Constructors + /// + /// Creates an operand that references a component/property of a type. + /// + public SimpleAttributeOperand( + NodeId typeId, + QualifiedName browsePath) + { + m_typeDefinitionId = typeId; + m_browsePath = new QualifiedNameCollection(); + m_attributeId = Attributes.Value; + m_indexRange = null; + + m_browsePath.Add(browsePath); + } + + /// + /// Creates an operand that references a component/property of a type. + /// + public SimpleAttributeOperand( + NodeId typeId, + IList browsePath) + { + m_typeDefinitionId = typeId; + m_browsePath = new QualifiedNameCollection(browsePath); + m_attributeId = Attributes.Value; + m_indexRange = null; + } + + /// + /// Creates an operand that references a component/property of a type. + /// + public SimpleAttributeOperand( + FilterContext context, + ExpandedNodeId typeId, + IList browsePath) + { + m_typeDefinitionId = ExpandedNodeId.ToNodeId(typeId, context.NamespaceUris); + m_browsePath = new QualifiedNameCollection(browsePath); + m_attributeId = Attributes.Value; + m_indexRange = null; + } + + /// + /// Creates an operand that references a component/property of a type. + /// + public SimpleAttributeOperand( + FilterContext context, + ExpandedNodeId typeDefinitionId, + string browsePath, + uint attributeId, + string indexRange) + { + m_typeDefinitionId = ExpandedNodeId.ToNodeId(typeDefinitionId, context.NamespaceUris); + m_browsePath = Parse(browsePath); + m_attributeId = attributeId; + m_indexRange = indexRange; + } + #endregion + + #region IFormattable Members + /// + /// Formats the value of the current instance using the specified format. + /// + /// The specifying the format to use. + /// -or- + /// null to use the default format defined for the type of the implementation. + /// The to use to format the value. + /// -or- + /// null to obtain the numeric format information from the current locale setting of the operating system. + /// + /// A containing the value of the current instance in the specified format. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < m_browsePath.Count; ii++) + { + buffer.AppendFormat(formatProvider, "/{0}", m_browsePath[ii]); + } + + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Returns a that represents the current . + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region Public Properties + /// + /// Whether the operand has been validated. + /// + /// + /// Set when Validate() is called. + /// + public bool Validated + { + get { return m_validated; } + } + + /// + /// Stores the parsed form of the IndexRange parameter. + /// + /// + /// Set when Validate() is called. + /// + public NumericRange ParsedIndexRange + { + get { return m_parsedIndexRange; } + } + #endregion + + #region Overridden Methods + /// + /// Validates the operand (sets the ParsedBrowsePath and ParsedIndexRange properties). + /// + public override ServiceResult Validate(FilterContext context, int index) + { + m_validated = false; + + // verify attribute id. + if (!Attributes.IsValid(m_attributeId)) + { + return ServiceResult.Create( + StatusCodes.BadAttributeIdInvalid, + "SimpleAttributeOperand does not specify a valid AttributeId ({0}).", + m_attributeId); + } + + // initialize as empty. + m_parsedIndexRange = NumericRange.Empty; + + // parse the index range. + if (!String.IsNullOrEmpty(m_indexRange)) + { + try + { + m_parsedIndexRange = NumericRange.Parse(m_indexRange); + } + catch (Exception e) + { + return ServiceResult.Create( + e, + StatusCodes.BadIndexRangeInvalid, + "SimpleAttributeOperand does not specify a valid BrowsePath ({0}).", + m_indexRange); + } + + if (m_attributeId != Attributes.Value) + { + return ServiceResult.Create( + StatusCodes.BadIndexRangeInvalid, + "SimpleAttributeOperand specifies an IndexRange for an Attribute other than Value ({0}).", + m_attributeId); + } + } + + m_validated = true; + + return ServiceResult.Good; + } + + /// + /// Converts an AttributeOperand to a displayable string. + /// + public override string ToString(INodeTable nodeTable) + { + StringBuilder buffer = new StringBuilder(); + + INode node = nodeTable.Find(TypeDefinitionId); + + if (node != null) + { + buffer.AppendFormat("{0}", TypeDefinitionId); + } + else + { + buffer.AppendFormat("{0}", TypeDefinitionId); + } + + if (BrowsePath != null && BrowsePath.Count > 0) + { + buffer.AppendFormat("{0}", Format(BrowsePath)); + } + + if (!String.IsNullOrEmpty(IndexRange)) + { + buffer.AppendFormat("[{0}]", NumericRange.Parse(IndexRange)); + } + + return buffer.ToString(); + } + #endregion + + #region Static Methods + /// + /// Formats a browse path. + /// + public static string Format(IList browsePath) + { + if (browsePath == null || browsePath.Count == 0) + { + return String.Empty; + } + + StringBuilder buffer = new StringBuilder(); + + for (int ii = 0; ii < browsePath.Count; ii++) + { + QualifiedName browseName = browsePath[ii]; + + if (QualifiedName.IsNull(browseName)) + { + throw ServiceResultException.Create(StatusCodes.BadBrowseNameInvalid, "BrowseName cannot be null"); + } + + buffer.Append('/'); + + if (browseName.NamespaceIndex != 0) + { + buffer.AppendFormat("{0}:", browseName.NamespaceIndex); + } + + for (int jj = 0; jj < browseName.Name.Length; jj++) + { + char ch = browseName.Name[jj]; + + if (ch == '&' || ch == '/') + { + buffer.Append('&'); + } + + buffer.Append(ch); + } + } + + return buffer.ToString(); + } + + /// + /// Parses a browse path. + /// + public static QualifiedNameCollection Parse(string browsePath) + { + QualifiedNameCollection browseNames = new QualifiedNameCollection(); + + if (String.IsNullOrEmpty(browsePath)) + { + return browseNames; + } + + StringBuilder buffer = new StringBuilder(); + + bool escaped = false; + + for (int ii = 0; ii < browsePath.Length; ii++) + { + char ch = browsePath[ii]; + + if (escaped) + { + buffer.Append(ch); + escaped = false; + continue; + } + + if (ch == '&') + { + escaped = true; + continue; + } + + if (ch == '/') + { + if (buffer.Length > 0) + { + QualifiedName browseName = QualifiedName.Parse(buffer.ToString()); + browseNames.Add(browseName); + } + + buffer.Length = 0; + continue; + } + + buffer.Append(ch); + } + + if (buffer.Length > 0) + { + QualifiedName browseName = QualifiedName.Parse(buffer.ToString()); + browseNames.Add(browseName); + } + + return browseNames; + } + #endregion + + #region Private Fields + private bool m_validated; + private NumericRange m_parsedIndexRange; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/NotificationMessage.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/NotificationMessage.cs new file mode 100644 index 00000000..36257508 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/NotificationMessage.cs @@ -0,0 +1,168 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// A message return in a Publish response. + /// + public partial class NotificationMessage + { + #region Public Interface + /// + /// The string table that was received with the message. + /// + public List StringTable + { + get { return m_stringTable; } + set { m_stringTable = value; } + } + + /// + /// Gets a value indicating whether this NotificationMessage is empty. + /// + /// + /// true if this instance is empty; otherwise, false. + /// + public bool IsEmpty + { + get + { + if (SequenceNumber == 0 && + PublishTime == DateTime.MinValue && + NotificationData.Count == 0) + { + return true; + } + + return false; + } + } + + /// + /// Returns the data changes contained in the notification message. + /// + public IList GetDataChanges(bool reverse) + { + List datachanges = new List(); + + for (int jj = 0; jj < m_notificationData.Count; jj++) + { + ExtensionObject extension = m_notificationData[jj]; + + if (ExtensionObject.IsNull(extension)) + { + continue; + } + + DataChangeNotification notification = extension.Body as DataChangeNotification; + + if (notification == null) + { + continue; + } + + if (reverse) + { + for (int ii = notification.MonitoredItems.Count-1; ii >= 0; ii--) + { + MonitoredItemNotification datachange = notification.MonitoredItems[ii]; + + if (datachange != null) + { + datachange.Message = this; + datachanges.Add(datachange); + } + } + } + else + { + for (int ii = 0; ii < notification.MonitoredItems.Count; ii++) + { + MonitoredItemNotification datachange = notification.MonitoredItems[ii]; + + if (datachange != null) + { + datachange.Message = this; + datachanges.Add(datachange); + } + } + } + } + + return datachanges; + } + + /// + /// Returns the events contained in the notification message. + /// + public IList GetEvents(bool reverse) + { + List events = new List(); + + foreach (ExtensionObject extension in m_notificationData) + { + if (ExtensionObject.IsNull(extension)) + { + continue; + } + + EventNotificationList notification = extension.Body as EventNotificationList; + + if (notification == null) + { + continue; + } + + if (reverse) + { + for (int ii = notification.Events.Count-1; ii >= 0; ii--) + { + EventFieldList eventFields = notification.Events[ii]; + + if (eventFields != null) + { + eventFields.Message = this; + events.Add(eventFields); + } + } + } + else + { + for (int ii = 0; ii < notification.Events.Count; ii++) + { + EventFieldList eventFields = notification.Events[ii]; + + if (eventFields != null) + { + eventFields.Message = this; + events.Add(eventFields); + } + } + } + } + + return events; + } + #endregion + + #region Private Fields + private List m_stringTable; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/QueryDataSet.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/QueryDataSet.cs new file mode 100644 index 00000000..2ece71cc --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/QueryDataSet.cs @@ -0,0 +1,50 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region NodeTypeDescription Class + public partial class NodeTypeDescription + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle { get; set; } + + /// + /// Whether the value has been processed. + /// + public bool Processed { get; set; } + #endregion + + #region Private Fields + #endregion + } + #endregion + + #region QueryDataDescription Class + public partial class QueryDataDescription + { + /// + /// Stores the parsed form of the index range parameter. + /// + public NumericRange ParsedIndexRange { get; set; } + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/Range.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/Range.cs new file mode 100644 index 00000000..7b2a9678 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/Range.cs @@ -0,0 +1,50 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Stores a range. + /// + public partial class Range + { + /// + /// Initializes the object with the high and low limits. + /// + public Range(double high, double low) + { + m_low = low; + m_high = high; + + // swap values if high is not actually higher. + if (low > high) + { + m_high = low; + m_low = high; + } + } + + /// + /// Returns the difference between high and low. + /// + public double Magnitude + { + get { return Math.Abs(m_high - m_low); } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ReadValueId.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ReadValueId.cs new file mode 100644 index 00000000..8193926f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ReadValueId.cs @@ -0,0 +1,124 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region ReadValueId Class + /// + /// The description of a value to read. + /// + public partial class ReadValueId + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + + /// + /// Stores the parsed form of the index range parameter. + /// + public NumericRange ParsedIndexRange + { + get { return m_parsedIndexRange; } + set { m_parsedIndexRange = value; } + } + + /// + /// Validates a read value id parameter. + /// + public static ServiceResult Validate(ReadValueId valueId) + { + // check for null structure. + if (valueId == null) + { + return StatusCodes.BadStructureMissing; + } + + // null node ids are always invalid. + if (valueId.NodeId == null) + { + return StatusCodes.BadNodeIdInvalid; + } + + // must be a legimate attribute value. + if (!Attributes.IsValid(valueId.AttributeId)) + { + return StatusCodes.BadAttributeIdInvalid; + } + + // data encoding and index range is only valid for value attributes. + if (valueId.AttributeId != Attributes.Value) + { + if (!String.IsNullOrEmpty(valueId.IndexRange)) + { + return StatusCodes.BadIndexRangeNoData; + } + + if (!QualifiedName.IsNull(valueId.DataEncoding)) + { + return StatusCodes.BadDataEncodingInvalid; + } + } + + // initialize as empty. + valueId.ParsedIndexRange = NumericRange.Empty; + + // parse the index range if specified. + if (!String.IsNullOrEmpty(valueId.IndexRange)) + { + try + { + valueId.ParsedIndexRange = NumericRange.Parse(valueId.IndexRange); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadIndexRangeInvalid, String.Empty); + } + } + else + { + valueId.ParsedIndexRange = NumericRange.Empty; + } + + // passed basic validation. + return null; + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + private NumericRange m_parsedIndexRange = NumericRange.Empty; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ReferenceDescription.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ReferenceDescription.cs new file mode 100644 index 00000000..f88adcf3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ReferenceDescription.cs @@ -0,0 +1,152 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region ReferenceDescription Class + /// + /// A reference returned in browse operation. + /// + public partial class ReferenceDescription : IFormattable + { + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + if (m_displayName != null && !String.IsNullOrEmpty(m_displayName.Text)) + { + return m_displayName.Text; + } + + if (!QualifiedName.IsNull(m_browseName)) + { + return m_browseName.Name; + } + + return Utils.Format("(unknown {0})", ((NodeClass)m_nodeClass).ToString().ToLower()); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + + /// + /// Returns the string representation of the object. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region Public Methods + /// + /// Sets the reference type for the reference. + /// + public void SetReferenceType( + BrowseResultMask resultMask, + NodeId referenceTypeId, + bool isForward) + { + if ((resultMask & BrowseResultMask.ReferenceTypeId) != 0) + { + m_referenceTypeId = referenceTypeId; + } + else + { + m_referenceTypeId = null; + } + + if ((resultMask & BrowseResultMask.IsForward) != 0) + { + m_isForward = isForward; + } + else + { + m_isForward = false; + } + } + + /// + /// Sets the target attributes for the reference. + /// + public void SetTargetAttributes( + BrowseResultMask resultMask, + NodeClass nodeClass, + QualifiedName browseName, + LocalizedText displayName, + ExpandedNodeId typeDefinition) + { + if ((resultMask & BrowseResultMask.NodeClass) != 0) + { + m_nodeClass = nodeClass; + } + else + { + m_nodeClass = 0; + } + + if ((resultMask & BrowseResultMask.BrowseName) != 0) + { + m_browseName = browseName; + } + else + { + m_browseName = null; + } + + if ((resultMask & BrowseResultMask.DisplayName) != 0) + { + m_displayName = displayName; + } + else + { + m_displayName = null; + } + + if ((resultMask & BrowseResultMask.TypeDefinition) != 0) + { + m_typeDefinition = typeDefinition; + } + else + { + m_typeDefinition = null; + } + } + #endregion + + #region Supporting Properties and Methods + /// + /// True if the reference filter has not been applied. + /// + public bool Unfiltered + { + get { return m_unfiltered; } + set { m_unfiltered = value; } + } + #endregion + + #region Private Fields + private bool m_unfiltered; + #endregion + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ServiceFault.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ServiceFault.cs new file mode 100644 index 00000000..651ccf59 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ServiceFault.cs @@ -0,0 +1,29 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region ServiceFault Class + /// + /// The ServiceFault class. + /// + public partial class ServiceFault : IServiceResponse + { + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/SoftwareCertficate.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/SoftwareCertficate.cs new file mode 100644 index 00000000..e0a37d33 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/SoftwareCertficate.cs @@ -0,0 +1,84 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The SoftwareCertificate class. + /// + public partial class SoftwareCertificate + { + /// + /// The SignedSoftwareCertificate that contains the SoftwareCertificate + /// + public X509Certificate2 SignedCertificate + { + get { return m_signedCertificate; } + set { m_signedCertificate = value; } + } + + private X509Certificate2 m_signedCertificate; + + /// + /// Validates a software certificate. + /// + public static ServiceResult Validate( + CertificateValidator validator, + byte[] signedCertificate, + out SoftwareCertificate softwareCertificate) + { + softwareCertificate = null; + + // validate the certificate. + X509Certificate2 certificate = null; + + try + { + certificate = CertificateFactory.Create(signedCertificate, true); + validator.Validate(certificate); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadDecodingError, "Could not decode software certificate body."); + } + + + // find the software certficate. + byte[] encodedData = null; + + if (encodedData == null) + { + return ServiceResult.Create(StatusCodes.BadCertificateInvalid, "Could not find extension containing the software certficate."); + } + + try + { + MemoryStream istrm = new MemoryStream(encodedData, false); + DataContractSerializer serializer = new DataContractSerializer(typeof(SoftwareCertificate)); + softwareCertificate = (SoftwareCertificate)serializer.ReadObject(istrm); + softwareCertificate.SignedCertificate = certificate; + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadCertificateInvalid, "Certificate does not contain a valid SoftwareCertificate body."); + } + + // certificate is valid. + return ServiceResult.Good; + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/StatusResult.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/StatusResult.cs new file mode 100644 index 00000000..7c7ecdd3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/StatusResult.cs @@ -0,0 +1,59 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Stores a StatusCode/DiagnosticInfo. + /// + public partial class StatusResult + { + #region Public Interface + /// + /// Initializes the object with a ServiceResult. + /// + public StatusResult(ServiceResult result) + { + Initialize(); + + m_result = result; + + if (result != null) + { + m_statusCode = result.StatusCode; + } + } + + /// + /// Applies the diagnostic mask if the object was initialize with a ServiceResult. + /// + public void ApplyDiagnosticMasks(DiagnosticsMasks diagnosticMasks, StringTable stringTable) + { + if (m_result != null) + { + m_statusCode = m_result.StatusCode; + m_diagnosticInfo = new DiagnosticInfo(m_result, diagnosticMasks, false, stringTable); + } + } + #endregion + + #region Private Fields + private ServiceResult m_result; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/UserIdentityToken.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/UserIdentityToken.cs new file mode 100644 index 00000000..458d1c15 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/UserIdentityToken.cs @@ -0,0 +1,381 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Text; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The UserIdentityToken class. + /// + public partial class UserIdentityToken + { + #region Public Methods + /// + /// Encrypts the token (implemented by the subclass). + /// + public virtual void Encrypt(X509Certificate2 certificate, byte[] receiverNonce, string securityPolicyUri) + { + } + + /// + /// Decrypts the token (implemented by the subclass). + /// + public virtual void Decrypt(X509Certificate2 certificate, byte[] receiverNonce, string securityPolicyUri) + { + } + + /// + /// Creates a signature with the token (implemented by the subclass). + /// + public virtual SignatureData Sign(byte[] dataToSign, string securityPolicyUri) + { + return new SignatureData(); + } + + /// + /// Verifies a signature created with the token (implemented by the subclass). + /// + public virtual bool Verify(byte[] dataToVerify, SignatureData signatureData, string securityPolicyUri) + { + return true; + } + #endregion + } + + /// + /// The UserIdentityToken class. + /// + public partial class UserNameIdentityToken + { + #region Public Properties + /// + /// The decrypted password associated with the token. + /// + public string DecryptedPassword + { + get { return m_decryptedPassword; } + set { m_decryptedPassword = value; } + } + #endregion + + #region Public Methods + /// + /// Encrypts the DecryptedPassword using the EncryptionAlgorithm and places the result in Password + /// + public override void Encrypt(X509Certificate2 certificate, byte[] senderNonce, string securityPolicyUri) + { + if (m_decryptedPassword == null) + { + m_password = null; + return; + } + + // handle no encryption. + if (String.IsNullOrEmpty(securityPolicyUri) || securityPolicyUri == SecurityPolicies.None) + { + m_password = new UTF8Encoding().GetBytes(m_decryptedPassword); + m_encryptionAlgorithm = null; + return; + } + + // encrypt the password. + byte[] dataToEncrypt = Utils.Append(new UTF8Encoding().GetBytes(m_decryptedPassword), senderNonce); + + EncryptedData encryptedData = SecurityPolicies.Encrypt( + certificate, + securityPolicyUri, + dataToEncrypt); + + m_password = encryptedData.Data; + m_encryptionAlgorithm = encryptedData.Algorithm; + } + + /// + /// Decrypts the Password using the EncryptionAlgorithm and places the result in DecryptedPassword + /// + public override void Decrypt(X509Certificate2 certificate, byte[] senderNonce, string securityPolicyUri) + { + // handle no encryption. + if (String.IsNullOrEmpty(securityPolicyUri) || securityPolicyUri == SecurityPolicies.None) + { + m_decryptedPassword = new UTF8Encoding().GetString(m_password, 0, m_password.Length); + return; + } + + // decrypt. + EncryptedData encryptedData = new EncryptedData(); + encryptedData.Data = m_password; + encryptedData.Algorithm = m_encryptionAlgorithm; + + byte[] decryptedPassword = SecurityPolicies.Decrypt( + certificate, + securityPolicyUri, + encryptedData); + + if (decryptedPassword == null) + { + m_decryptedPassword = null; + return; + } + + // verify the sender's nonce. + int startOfNonce = decryptedPassword.Length; + + if (senderNonce != null) + { + startOfNonce -= senderNonce.Length; + + int result = 0; + for (int ii = 0; ii < senderNonce.Length; ii++) + { + result |= senderNonce[ii] ^ decryptedPassword[ii + startOfNonce]; + } + + if (result != 0) + { + throw new ServiceResultException(StatusCodes.BadIdentityTokenRejected); + } + } + + // convert to UTF-8. + m_decryptedPassword = new UTF8Encoding().GetString(decryptedPassword, 0, startOfNonce); + } + #endregion + + #region Private Fields + private string m_decryptedPassword; + #endregion + } + + /// + /// The X509IdentityToken class. + /// + public partial class X509IdentityToken + { + #region Public Properties + /// + /// The certificate associated with the token. + /// + public X509Certificate2 Certificate + { + get + { + if (m_certificate == null && m_certificateData != null) + { + return CertificateFactory.Create(m_certificateData, true); + } + return m_certificate; + } + set { m_certificate = value; } + } + #endregion + + #region Public Methods + /// + /// Creates a signature with the token. + /// + public override SignatureData Sign(byte[] dataToSign, string securityPolicyUri) + { + X509Certificate2 certificate = m_certificate; + + if (certificate == null) + { + certificate = CertificateFactory.Create(m_certificateData, true); + } + + SignatureData signatureData = SecurityPolicies.Sign( + certificate, + securityPolicyUri, + dataToSign); + + m_certificateData = certificate.RawData; + + return signatureData; + } + + /// + /// Verifies a signature created with the token. + /// + public override bool Verify(byte[] dataToVerify, SignatureData signatureData, string securityPolicyUri) + { + try + { + X509Certificate2 certificate = m_certificate; + + if (certificate == null) + { + certificate = CertificateFactory.Create(m_certificateData, true); + } + + bool valid = SecurityPolicies.Verify( + certificate, + securityPolicyUri, + dataToVerify, + signatureData); + + m_certificateData = certificate.RawData; + + return valid; + } + catch (Exception e) + { + throw ServiceResultException.Create(StatusCodes.BadIdentityTokenInvalid, e, "Could not verify user signature!"); + } + } + #endregion + + #region Private Fields + private X509Certificate2 m_certificate; + #endregion + } + + /// + /// The issued token type. + /// + public enum IssuedTokenType + { + /// + /// Web services security (WSS) token. + /// + GenericWSS, + /// + /// Security Assertions Markup Language (SAML) token. + /// + SAML, + /// + /// JSON web token. + /// + JWT, + /// + /// Kerberos token. + /// + KerberosBinary + }; + + /// + /// The IssuedIdentityToken class. + /// + public partial class IssuedIdentityToken + { + #region Public Properties + /// + /// The type of issued token. + /// + public IssuedTokenType IssuedTokenType + { + get; + set; + } + + /// + /// The decrypted password associated with the token. + /// + public byte[] DecryptedTokenData + { + get { return m_decryptedTokenData; } + set { m_decryptedTokenData = value; } + } + #endregion + + #region Public Methods + /// + /// Encrypts the DecryptedTokenData using the EncryptionAlgorithm and places the result in Password + /// + public override void Encrypt(X509Certificate2 certificate, byte[] senderNonce, string securityPolicyUri) + { + // handle no encryption. + if (String.IsNullOrEmpty(securityPolicyUri) || securityPolicyUri == SecurityPolicies.None) + { + m_tokenData = m_decryptedTokenData; + m_encryptionAlgorithm = String.Empty; + return; + } + + byte[] dataToEncrypt = Utils.Append(m_decryptedTokenData, senderNonce); + + EncryptedData encryptedData = SecurityPolicies.Encrypt( + certificate, + securityPolicyUri, + dataToEncrypt); + + m_tokenData = encryptedData.Data; + m_encryptionAlgorithm = encryptedData.Algorithm; + } + + /// + /// Decrypts the Password using the EncryptionAlgorithm and places the result in DecryptedPassword + /// + public override void Decrypt(X509Certificate2 certificate, byte[] senderNonce, string securityPolicyUri) + { + // handle no encryption. + if (String.IsNullOrEmpty(securityPolicyUri) || securityPolicyUri == SecurityPolicies.None) + { + m_decryptedTokenData = m_tokenData; + return; + } + + EncryptedData encryptedData = new EncryptedData(); + + encryptedData.Data = m_tokenData; + encryptedData.Algorithm = m_encryptionAlgorithm; + + byte[] decryptedTokenData = SecurityPolicies.Decrypt( + certificate, + securityPolicyUri, + encryptedData); + + // verify the sender's nonce. + int startOfNonce = decryptedTokenData.Length; + + if (senderNonce != null) + { + startOfNonce -= senderNonce.Length; + + for (int ii = 0; ii < senderNonce.Length; ii++) + { + if (senderNonce[ii] != decryptedTokenData[ii+startOfNonce]) + { + throw new ServiceResultException(StatusCodes.BadIdentityTokenRejected); + } + } + } + + // copy results. + m_decryptedTokenData = new byte[startOfNonce]; + Array.Copy(decryptedTokenData, m_decryptedTokenData, startOfNonce); + } + + /// + /// Creates a signature with the token. + /// + public override SignatureData Sign(byte[] dataToSign, string securityPolicyUri) + { + return null; + } + + /// + /// Verifies a signature created with the token. + /// + public override bool Verify(byte[] dataToVerify, SignatureData signatureData, string securityPolicyUri) + { + return true; + } + #endregion + + #region Private Fields + private byte[] m_decryptedTokenData; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/UserTokenPolicy.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/UserTokenPolicy.cs new file mode 100644 index 00000000..9a5d1522 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/UserTokenPolicy.cs @@ -0,0 +1,59 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Text; +using System.ServiceModel.Security; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Defines constants for key user token policies. + /// + public partial class UserTokenPolicy : IFormattable + { + #region Constructors + /// + /// Creates an empty token policy with the specified token type. + /// + public UserTokenPolicy(UserTokenType tokenType) + { + Initialize(); + m_tokenType = tokenType; + } + #endregion + + #region IFormattable Members + /// + /// Returns the object formatted as a string. + /// + public override string ToString() + { + return m_tokenType.ToString(); + } + + /// + /// Returns the string representation of the object. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return String.Format(formatProvider, "{0}", ToString()); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/VariableAttributes.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/VariableAttributes.cs new file mode 100644 index 00000000..89b30c3e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/VariableAttributes.cs @@ -0,0 +1,51 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// Stores information about engineering units. + /// + public partial class VariableAttributes + { + /// + /// Initializes the object with the unitName and namespaceUri. + /// + public VariableAttributes(object value, byte accessLevel) + { + Initialize(); + + Value = new Variant(value); + AccessLevel = accessLevel; + UserAccessLevel = accessLevel; + MinimumSamplingInterval = MinimumSamplingIntervals.Indeterminate; + Historizing = false; + + if (value == null) + { + DataType = DataTypes.BaseDataType; + ValueRank = ValueRanks.Any; + } + else + { + DataType = TypeInfo.GetDataTypeId(value); + ValueRank = TypeInfo.GetValueRank(value); + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ViewDescription.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ViewDescription.cs new file mode 100644 index 00000000..d5eb7915 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/ViewDescription.cs @@ -0,0 +1,46 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + #region ViewDescription Class + /// + /// Describes a view to browse or query. + /// + public partial class ViewDescription + { + /// + /// Returns true if the view description represents the default (null) view. + /// + public static bool IsDefault(ViewDescription view) + { + if (view == null) + { + return true; + } + + if (NodeId.IsNull(view.m_viewId) && view.m_viewVersion == 0 && view.m_timestamp == DateTime.MinValue) + { + return true; + } + + return false; + } + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/WriteValue.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/WriteValue.cs new file mode 100644 index 00000000..7cab9151 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Stack/Types/WriteValue.cs @@ -0,0 +1,171 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; + +namespace Opc.Ua +{ + /// + /// The description of a value to write. + /// + public partial class WriteValue + { + #region Supporting Properties and Methods + /// + /// A handle assigned to the item during processing. + /// + public object Handle + { + get { return m_handle; } + set { m_handle = value; } + } + + /// + /// Whether the value has been processed. + /// + public bool Processed + { + get { return m_processed; } + set { m_processed = value; } + } + + /// + /// Stores the parsed form of the index range parameter. + /// + public NumericRange ParsedIndexRange + { + get { return m_parsedIndexRange; } + set { m_parsedIndexRange = value; } + } + + /// + /// Validates a write value parameter. + /// + public static ServiceResult Validate(WriteValue value) + { + // check for null structure. + if (value == null) + { + return StatusCodes.BadStructureMissing; + } + + // null node ids are always invalid. + if (value.NodeId == null) + { + return StatusCodes.BadNodeIdInvalid; + } + + // must be a legimate attribute value. + if (!Attributes.IsValid(value.AttributeId)) + { + return StatusCodes.BadAttributeIdInvalid; + } + + // initialize as empty. + value.ParsedIndexRange = NumericRange.Empty; + + // parse the index range if specified. + if (!String.IsNullOrEmpty(value.IndexRange)) + { + try + { + value.ParsedIndexRange = NumericRange.Parse(value.IndexRange); + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadIndexRangeInvalid, String.Empty); + } + + if(value.ParsedIndexRange.SubRanges != null) + { + Matrix matrix = value.Value.Value as Matrix; + + if (matrix == null) + { + // Check for String or ByteString arrays. Those DataTypes have special handling + // when using sub ranges. + bool isArrayWithValidDataType = value.Value.Value is Array && + value.Value.WrappedValue.TypeInfo.BuiltInType == BuiltInType.String || + value.Value.WrappedValue.TypeInfo.BuiltInType == BuiltInType.ByteString; + + if (!isArrayWithValidDataType) + { + return StatusCodes.BadTypeMismatch; + } + } + } + else + { + // check that value provided is actually an array. + Array array = value.Value.Value as Array; + string str = value.Value.Value as string; + + if (array != null) + { + NumericRange range = value.ParsedIndexRange; + + // check that the number of elements to write matches the index range. + if (range.End >= 0 && (range.End - range.Begin != array.Length - 1)) + { + return StatusCodes.BadIndexRangeNoData; + } + + // check for single element. + if (range.End < 0 && array.Length != 1) + { + return StatusCodes.BadIndexRangeInvalid; + } + } + else if(str != null) + { + NumericRange range = value.ParsedIndexRange; + + // check that the number of elements to write matches the index range. + if (range.End >= 0 && (range.End - range.Begin != str.Length - 1)) + { + return StatusCodes.BadIndexRangeNoData; + } + + // check for single element. + if (range.End < 0 && str.Length != 1) + { + return StatusCodes.BadIndexRangeInvalid; + } + } + else + { + return StatusCodes.BadTypeMismatch; + } + } + + } + else + { + value.ParsedIndexRange = NumericRange.Empty; + } + + // passed basic validation. + return null; + } + #endregion + + #region Private Fields + private object m_handle; + private bool m_processed; + private NumericRange m_parsedIndexRange = NumericRange.Empty; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/AttributeValues.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/AttributeValues.cs new file mode 100644 index 00000000..819d5cd4 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/AttributeValues.cs @@ -0,0 +1,269 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// 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; + } + + /// + /// 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; + + /// + /// Indicates if the current StatusCode of the value is writable. + /// + public const byte StatusWrite = 0x20; + + /// + /// Indicates if the current SourceTimestamp is writable. + /// + public const byte TimestampWrite = 0x40; + } + + /// + /// 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 diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/BuiltInTypeCollections.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/BuiltInTypeCollections.cs new file mode 100644 index 00000000..5eeba0d5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/BuiltInTypeCollections.cs @@ -0,0 +1,1184 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A collection of Boolean values. + /// + /// + /// Provides a strongly-typed collection of Boolean values. + /// + /// + /// + /// BooleanCollection bools = new BooleanCollection(); + /// bools.AddRange( new bool[]{true, false, true, false} ); + /// + /// + /// Dim bools As New BooleanCollection() + /// bools.AddRange( New Boolean(){ True, False, True, False } ) + /// + /// + [CollectionDataContract(Name = "ListOfBoolean", Namespace = Namespaces.OpcUaXsd, ItemName = "Boolean")] + public partial class BooleanCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public BooleanCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Creates a new collection and populates the collection with the + /// values passed in. + /// + /// A collection of boolean values to add to this new collection + public BooleanCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + public BooleanCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of boolean values to convert to a strong-collection of this class type + public static BooleanCollection ToBooleanCollection(bool[] values) + { + if (values != null) + { + return new BooleanCollection(values); + } + + return new BooleanCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of boolean values to convert to a strong-collection of this class type + public static implicit operator BooleanCollection(bool[] values) + { + return ToBooleanCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Returns a new instance of this object type, while copying its contents. + /// + public new object MemberwiseClone() + { + return new BooleanCollection(this); + } + } + + /// + /// A collection of SByte values. + /// + /// + /// Provides a strongly-typed list of values. + /// + [CollectionDataContract(Name = "ListOfSByte", Namespace = Namespaces.OpcUaXsd, ItemName = "SByte")] + public partial class SByteCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public SByteCollection() { } + + /// + /// Initializes the collection and sets the maximum capacity + /// + /// + /// Initializes the collection and sets the maximum capacity + /// + /// The maximum size of this collection + public SByteCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection and populates it with the specified collection of SByte values + /// + /// + /// Initializes the collection and populates it with the specified collection of SByte values + /// + /// A collection of values to populate this collection with + public SByteCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of values to convert from + public static SByteCollection ToSByteCollection(sbyte[] values) + { + if (values != null) + { + return new SByteCollection(values); + } + + return new SByteCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array of SByte to a collection. + /// + /// An array of SByte values to convert + public static implicit operator SByteCollection(sbyte[] values) + { + return ToSByteCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new SByteCollection(this); + } + } + + /// + /// A collection of SByte values. + /// + /// + /// Provides a strongly-typed list of values. + /// + [CollectionDataContract(Name = "ListOfSByte", Namespace = Namespaces.OpcUaXsd, ItemName = "SByte")] + public partial class ByteCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public ByteCollection() { } + + /// + /// Initializes the collection and sets the maximum capacity + /// + /// + /// Initializes the collection and sets the maximum capacity + /// + /// The maximum size of this collection + public ByteCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection and populates it with the specified collection of Byte values + /// + /// + /// Initializes the collection and populates it with the specified collection of Byte values + /// + /// A collection of values to populate this collection with + public ByteCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of values to convert from + public static ByteCollection ToByteCollection(byte[] values) + { + if (values != null) + { + return new ByteCollection(values); + } + + return new ByteCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array of Byte to a collection. + /// + /// An array of Byte values to convert + public static implicit operator ByteCollection(byte[] values) + { + return ToByteCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new ByteCollection(this); + } + } + + /// + /// A collection of Int16 values. + /// + /// + /// A strongly-typed collection of Int16 values. + /// + [CollectionDataContract(Name = "ListOfInt16", Namespace = Namespaces.OpcUaXsd, ItemName = "Int16")] + public partial class Int16Collection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public Int16Collection() { } + + /// + /// Initializes the collection and specifies the capacity + /// + /// + /// Initializes the collection and specifies the capacity + /// + /// The max size of the collection + public Int16Collection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection and populates it with the values passed-in + /// + /// + /// Initializes the collection and populates it with the values passed-in + /// + /// A collection of values to populate the collection with + public Int16Collection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of values to convert to a collection + public static Int16Collection ToInt16Collection(short[] values) + { + if (values != null) + { + return new Int16Collection(values); + } + + return new Int16Collection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of values to convert to a collection + public static implicit operator Int16Collection(short[] values) + { + return ToInt16Collection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new Int16Collection(this); + } + } + + /// + /// A collection of UInt16 values. + /// + /// + /// A collection of UInt16 values. + /// + [CollectionDataContract(Name = "ListOfUInt16", Namespace = Namespaces.OpcUaXsd, ItemName = "UInt16")] + public partial class UInt16Collection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public UInt16Collection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The max capacity size of this collection + public UInt16Collection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A Collection of to pre-populate the collection with + public UInt16Collection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of values to conver to a collection + public static UInt16Collection ToUInt16Collection(ushort[] values) + { + if (values != null) + { + return new UInt16Collection(values); + } + + return new UInt16Collection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of values to conver to a collection + public static implicit operator UInt16Collection(ushort[] values) + { + return ToUInt16Collection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new UInt16Collection(this); + } + } + + /// + /// A collection of Int32 values. + /// + [CollectionDataContract(Name = "ListOfInt32", Namespace = Namespaces.OpcUaXsd, ItemName = "Int32")] + public partial class Int32Collection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection of . + /// + public Int32Collection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of this collection + public Int32Collection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection + /// + /// + /// Initializes the collection from another collection + /// + /// A collection of to pre-populate this collection with + public Int32Collection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of to convert to a collection + public static Int32Collection ToInt32Collection(int[] values) + { + if (values != null) + { + return new Int32Collection(values); + } + + return new Int32Collection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of to convert to a collection + public static implicit operator Int32Collection(int[] values) + { + return ToInt32Collection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new Int32Collection(this); + } + } + + /// + /// A collection of UInt32 values. + /// + /// + /// A collection of UInt32 values. + /// + [CollectionDataContract(Name = "ListOfUInt32", Namespace = Namespaces.OpcUaXsd, ItemName = "UInt32")] + public partial class UInt32Collection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection of . + /// + public UInt32Collection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of the collection + public UInt32Collection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of to pre-populate the collection with + public UInt32Collection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// + /// An array of values to return as a strongly-typed collection + /// + public static UInt32Collection ToUInt32Collection(uint[] values) + { + if (values != null) + { + return new UInt32Collection(values); + } + + return new UInt32Collection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// + /// An array of values to return as a strongly-typed collection + /// + public static implicit operator UInt32Collection(uint[] values) + { + return ToUInt32Collection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new UInt32Collection(this); + } + } + + /// + /// A collection of Int64 values. + /// + /// + /// A strongly-typed collection of Int64 values. + /// + [CollectionDataContract(Name = "ListOfInt64", Namespace = Namespaces.OpcUaXsd, ItemName = "Int64")] + public class Int64Collection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection of . + /// + public Int64Collection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of the collection + public Int64Collection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A colleciton of to pre-populate the collection with + public Int64Collection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of to convert to a collection + public static Int64Collection ToInt64Collection(long[] values) + { + if (values != null) + { + return new Int64Collection(values); + } + + return new Int64Collection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of to convert to a collection + public static implicit operator Int64Collection(long[] values) + { + return ToInt64Collection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new Int64Collection(this); + } + } + + /// + /// A collection of UInt64 values. + /// + /// + /// A strongly-typed collection of UInt64 values. + /// + [CollectionDataContract(Name = "ListOfUInt64", Namespace = Namespaces.OpcUaXsd, ItemName = "UInt64")] + public partial class UInt64Collection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public UInt64Collection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of collection + public UInt64Collection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of to pre-populate the collection with + public UInt64Collection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of to return as a collection + public static UInt64Collection ToUInt64Collection(ulong[] values) + { + if (values != null) + { + return new UInt64Collection(values); + } + + return new UInt64Collection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of to return as a collection + public static implicit operator UInt64Collection(ulong[] values) + { + return ToUInt64Collection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new UInt64Collection(this); + } + } + + /// + /// A collection of Float values. + /// + /// + /// A strongly-typed collection of Float values. + /// + [CollectionDataContract(Name = "ListOfFloat", Namespace = Namespaces.OpcUaXsd, ItemName = "Float")] + public partial class FloatCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public FloatCollection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The max capacity of this collection + public FloatCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// The collection of values to add into this collection + public FloatCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of floats to return as a collection + public static FloatCollection ToFloatCollection(float[] values) + { + if (values != null) + { + return new FloatCollection(values); + } + + return new FloatCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of floats to return as a collection + public static implicit operator FloatCollection(float[] values) + { + return ToFloatCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new FloatCollection(this); + } + } + + /// + /// A collection of Double values. + /// + /// + /// A collection of Double values. + /// + [CollectionDataContract(Name = "ListOfDouble", Namespace = Namespaces.OpcUaXsd, ItemName = "Double")] + public partial class DoubleCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public DoubleCollection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// max capacity of collection + public DoubleCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of doubles to add into this collection + public DoubleCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// an array of doubles to return as a collection + public static DoubleCollection ToDoubleCollection(double[] values) + { + if (values != null) + { + return new DoubleCollection(values); + } + + return new DoubleCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// an array of doubles to return as a collection + public static implicit operator DoubleCollection(double[] values) + { + return ToDoubleCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new DoubleCollection(this); + } + } + + /// + /// A collection of String values. + /// + /// + /// A strongly-typed collection of String values. + /// + [CollectionDataContract(Name = "ListOfString", Namespace = Namespaces.OpcUaXsd, ItemName = "String")] + public partial class StringCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public StringCollection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of collection + public StringCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of strings to add to this collection + public StringCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// A collection of strings to add to this collection + public static StringCollection ToStringCollection(string[] values) + { + if (values != null) + { + return new StringCollection(values); + } + + return new StringCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// A collection of strings to add to this collection + public static implicit operator StringCollection(string[] values) + { + return ToStringCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new StringCollection(this); + } + } + + /// + /// A collection of DateTime values. + /// + /// + /// A strongly-typed collection of DateTime values. + /// + [CollectionDataContract(Name = "ListOfDateTime", Namespace = Namespaces.OpcUaXsd, ItemName = "DateTime")] + public partial class DateTimeCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public DateTimeCollection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of collection + public DateTimeCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + ///A collection of DateTime to add to this collection + public DateTimeCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// Array of DateTime to return as a collection + public static DateTimeCollection ToDateTimeCollection(DateTime[] values) + { + if (values != null) + { + return new DateTimeCollection(values); + } + + return new DateTimeCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// Array of DateTime to return as a collection + public static implicit operator DateTimeCollection(DateTime[] values) + { + return ToDateTimeCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new DateTimeCollection(this); + } + } + + /// + /// A collection of ByteString values. + /// + /// + /// A collection of ByteString values. + /// + [CollectionDataContract(Name = "ListOfByteString", Namespace = Namespaces.OpcUaXsd, ItemName = "ByteString")] + public partial class ByteStringCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public ByteStringCollection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max size of collection + public ByteStringCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of byte to add to this collection + public ByteStringCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// Array of bytes to return as a collection + public static ByteStringCollection ToByteStringCollection(byte[][] values) + { + if (values != null) + { + return new ByteStringCollection(values); + } + + return new ByteStringCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// Array of bytes to return as a collection + public static implicit operator ByteStringCollection(byte[][] values) + { + return ToByteStringCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + ByteStringCollection clone = new ByteStringCollection(this.Count); + + foreach (byte[] element in this) + { + clone.Add((byte[])Utils.Clone(element)); + } + + return clone; + } + } + + /// + /// A collection of XmlElement values. + /// + /// + /// A strongly-typed collection of XmlElement values. + /// + [CollectionDataContract(Name = "ListOfXmlElement", Namespace = Namespaces.OpcUaXsd, ItemName = "XmlElement")] + public partial class XmlElementCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public XmlElementCollection() { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max size of collection + public XmlElementCollection(int capacity) : base(capacity) { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of XmlElement's to add to this collection + public XmlElementCollection(IEnumerable collection) : base(collection) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of XmlElement's to return as a collection + public static XmlElementCollection ToXmlElementCollection(XmlElement[] values) + { + if (values != null) + { + return new XmlElementCollection(values); + } + + return new XmlElementCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of XmlElement's to return as a collection + public static implicit operator XmlElementCollection(XmlElement[] values) + { + return ToXmlElementCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + XmlElementCollection clone = new XmlElementCollection(this.Count); + + foreach (XmlElement element in this) + { + clone.Add((XmlElement)Utils.Clone(element)); + } + + return clone; + } + }//class +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DataValue.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DataValue.cs new file mode 100644 index 00000000..16e3f2b7 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DataValue.cs @@ -0,0 +1,673 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// A class that stores the value of variable with an optional status code and timestamps. + /// + /// + /// + /// This object relates to the OPC UA Specifications Part 6: Mappings, section 6.2.2.16 + /// titled DataValue. + ///
+ /// + /// This object is essentially a place-holder for the following: + /// + /// + /// + /// for the Servers Timestamp + /// + ///
+ ///
+ /// + /// + /// + /// //define a new DataValue first where: + /// // (a) the value is a string, which is "abc123" + /// // (b) the statuscode is 0 (zero) + /// // (c) the timestamp is 'now' + /// DataValue dv = new DataValue(new Variant("abc123"), new StatusCode(0), DateTime.Now); + /// + /// + /// + /// + /// 'define a new DataValue first where: + /// ' (a) the value is a string, which is "abc123" + /// ' (b) the statuscode is 0 (zero) + /// ' (c) the timestamp is 'now' + /// Dim dv As DataValue = New DataValue(New Variant("abc123"), New StatusCode(0), DateTime.Now); + /// + /// + /// + /// + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class DataValue : IFormattable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + /// + /// Initializes the object with default values. + /// + public DataValue() + { + Initialize(); + } + + /// + /// Creates a deep copy of the value. + /// + /// + /// Creates a new instance of the class while copying the contents + /// of another instance. + /// + /// The DataValue to copy. + /// Thrown when the value is null + public DataValue(DataValue value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + m_value.Value = Utils.Clone(value.m_value.Value); + m_statusCode = value.m_statusCode; + m_sourceTimestamp = value.m_sourceTimestamp; + m_sourcePicoseconds = value.m_sourcePicoseconds; + m_serverTimestamp = value.m_serverTimestamp; + m_serverPicoseconds = value.m_serverPicoseconds; + } + + /// + /// Initializes the object with a value. + /// + /// + /// Initializes the object with a value from a + /// + /// The value to set + public DataValue(Variant value) + { + Initialize(); + + m_value = value; + } + + /// + /// Initializes the object with a status code. + /// + /// + /// Initializes the object with a status code. + /// + /// The StatusCode to set + public DataValue(StatusCode statusCode) + { + Initialize(); + m_statusCode = statusCode; + } + + /// + /// Initializes the object with a status code and a server timestamp. + /// + /// + /// Initializes the object with a status code and a server timestamp. + /// + /// The status code associated with the value. + /// The timestamp associated with the status code. + public DataValue(StatusCode statusCode, DateTime serverTimestamp) + { + Initialize(); + m_statusCode = statusCode; + m_serverTimestamp = serverTimestamp; + } + + /// + /// Initializes the object with a value and a status code. + /// + /// + /// Initializes the object with a value and a status code. + /// + /// The status code to set + /// The value to set + public DataValue(Variant value, StatusCode statusCode) + { + Initialize(); + + m_value = value; + m_statusCode = statusCode; + } + + /// + /// Initializes the object with a value, a status code and a source timestamp + /// + /// + /// Initializes the object with a value, a status code and a source timestamp + /// + /// The timestamp to set + /// The status code to set + /// The variant value to set + public DataValue(Variant value, StatusCode statusCode, DateTime sourceTimestamp) + { + Initialize(); + + m_value = value; + m_statusCode = statusCode; + m_sourceTimestamp = sourceTimestamp; + } + + /// + /// Initializes the object with a value, a status code, a source timestamp and a server timestamp + /// + /// + /// Initializes the object with a value, a status code, a source timestamp and a server timestamp + /// + /// The servers timestamp to set + /// The source timestamp to set + /// The status code to set + /// The variant value to set + public DataValue(Variant value, StatusCode statusCode, DateTime sourceTimestamp, DateTime serverTimestamp) + { + Initialize(); + + m_value = value; + m_statusCode = statusCode; + m_sourceTimestamp = sourceTimestamp; + m_serverTimestamp = serverTimestamp; + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_value = Variant.Null; + m_statusCode = StatusCodes.Good; + m_sourceTimestamp = DateTime.MinValue; + m_serverTimestamp = DateTime.MinValue; + } + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the object. + /// + /// + /// Determines if the specified object is equal to the object. + /// + /// The object to compare to *this* + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + DataValue value = obj as DataValue; + + if (value != null) + { + if (this.m_statusCode != value.m_statusCode) + { + return false; + } + + if (this.m_serverTimestamp != value.m_serverTimestamp) + { + return false; + } + + if (this.m_sourceTimestamp != value.m_sourceTimestamp) + { + return false; + } + + if (this.m_serverPicoseconds != value.m_serverPicoseconds) + { + return false; + } + + if (this.m_serverTimestamp != value.m_serverTimestamp) + { + return false; + } + + return Utils.IsEqual(this.m_value.Value, value.m_value.Value); + } + + return false; + } + + /// + /// Returns a unique hashcode for the object. + /// + /// + /// Returns a unique hashcode for the object. + /// + public override int GetHashCode() + { + if (this.m_value.Value != null) + { + return this.m_value.Value.GetHashCode(); + } + + return this.m_statusCode.GetHashCode(); + } + + /// + /// Converts the value to a human readable string. + /// + /// + /// Converts the value to a human readable string. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + /// Not used, ALWAYS specify a null/nothing value + /// The format string, ALWAYS specify a null/nothing value + /// Thrown when the format is NOT null/nothing + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return String.Format(formatProvider, "{0}", m_value); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// Makes a deep copy of the object. + /// + public new object MemberwiseClone() + { + return new DataValue(this); + } + #endregion + + #region Public Properties + /// + /// The value of data value. + /// + /// + /// The value of data value. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")] + public object Value + { + get { return m_value.Value; } + set { m_value.Value = value; } + } + + /// + /// The value of data value. + /// + /// + /// The value of data value. + /// + [DataMember(Name = "Value", Order = 1, IsRequired = false)] + public Variant WrappedValue + { + get { return m_value; } + set { m_value = value; } + } + + /// + /// The status code associated with the value. + /// + /// + /// The status code associated with the value. + /// + [DataMember(Order = 2, IsRequired = false)] + public StatusCode StatusCode + { + get { return m_statusCode; } + set { m_statusCode = value; } + } + + /// + /// The source timestamp associated with the value. + /// + /// + /// The source timestamp associated with the value. + /// + [DataMember(Order = 3, IsRequired = false)] + public DateTime SourceTimestamp + { + get { return m_sourceTimestamp; } + set { m_sourceTimestamp = value; } + } + + /// + /// Additional resolution for the source timestamp. + /// + /// + /// Additional resolution for the source timestamp. + /// + [DataMember(Order = 4, IsRequired = false)] + public ushort SourcePicoseconds + { + get { return m_sourcePicoseconds; } + set { m_sourcePicoseconds = value; } + } + + /// + /// The server timestamp associated with the value. + /// + /// + /// The server timestamp associated with the value. + /// + [DataMember(Order = 5, IsRequired = false)] + public DateTime ServerTimestamp + { + get { return m_serverTimestamp; } + set { m_serverTimestamp = value; } + } + + /// + /// Additional resolution for the server timestamp. + /// + /// + /// Additional resolution for the server timestamp. + /// + [DataMember(Order = 6, IsRequired = false)] + public ushort ServerPicoseconds + { + get { return m_serverPicoseconds; } + set { m_serverPicoseconds = value; } + } + #endregion + + #region Static Methods + /// + /// Returns true if the status code is good. + /// + /// + /// Returns true if the status code is good. + /// + /// The value to check the quality of + public static bool IsGood(DataValue value) + { + if (value != null) + { + return StatusCode.IsGood(value.m_statusCode); + } + + return false; + } + + /// + /// Returns true if the status is bad or uncertain. + /// + /// + /// Returns true if the status is bad or uncertain. + /// + /// The value to check the quality of + public static bool IsNotGood(DataValue value) + { + if (value != null) + { + return StatusCode.IsNotGood(value.m_statusCode); + } + + return true; + } + + /// + /// Returns true if the status code is uncertain. + /// + /// + /// Returns true if the status code is uncertain. + /// + /// The value to checck the quality of + public static bool IsUncertain(DataValue value) + { + if (value != null) + { + return StatusCode.IsUncertain(value.m_statusCode); + } + + return false; + } + + /// + /// Returns true if the status is good or uncertain. + /// + /// + /// Returns true if the status is good or uncertain. + /// + /// The value to check the quality of + public static bool IsNotUncertain(DataValue value) + { + if (value != null) + { + return StatusCode.IsNotUncertain(value.m_statusCode); + } + + return false; + } + + /// + /// Returns true if the status code is bad. + /// + /// + /// Returns true if the status code is bad. + /// + /// The value to check the quality of + public static bool IsBad(DataValue value) + { + if (value != null) + { + return StatusCode.IsBad(value.m_statusCode); + } + + return true; + } + + /// + /// Returns true if the status is good or uncertain. + /// + /// + /// Returns true if the status is good or uncertain. + /// + /// The value to check the quality of + public static bool IsNotBad(DataValue value) + { + if (value != null) + { + return StatusCode.IsNotBad(value.m_statusCode); + } + + return false; + } + + /// + /// Ensures the data value contains a value with the specified type. + /// + public object GetValue(Type expectedType) + { + object value = this.Value; + + if (expectedType != null && value != null) + { + // return null for a DataValue with bad status code. + if (StatusCode.IsBad(this.StatusCode)) + { + return null; + } + + ExtensionObject extension = value as ExtensionObject; + + if (extension != null) + { + value = extension.Body; + } + + if (!expectedType.IsInstanceOfType(value)) + { + throw ServiceResultException.Create(StatusCodes.BadTypeMismatch, "DataValue is not of type {0}.", expectedType.Name); + } + } + + return value; + } + + /// + /// Gets the value from the data value. + /// + /// The type of object. + /// The default value to return if any error occurs. + /// The value. + /// + /// Does not throw exceptions; returns the caller provided value instead. + /// Extracts the body from an ExtensionObject value if it has the correct type. + /// Checks the StatusCode and returns an error if not Good. + /// + public T GetValue(T defaultValue) + { + if (StatusCode.IsNotGood(this.StatusCode)) + { + return defaultValue; + } + + if (typeof(T).IsInstanceOfType(this.Value)) + { + return (T)this.Value; + } + + ExtensionObject extension = this.Value as ExtensionObject; + + if (extension != null) + { + if (typeof(T).IsInstanceOfType(extension.Body)) + { + return (T)extension.Body; + } + } + + return defaultValue; + } + #endregion + + #region Private Fields + private Variant m_value; + private StatusCode m_statusCode; + private DateTime m_sourceTimestamp; + private ushort m_sourcePicoseconds; + private DateTime m_serverTimestamp; + private ushort m_serverPicoseconds; + #endregion + } + + #region DataValueCollection Class + /// + /// A collection of DataValues. + /// + /// + /// A strongly-typed collection of DataValues. + /// + [CollectionDataContract(Name = "ListOfDataValue", Namespace = Namespaces.OpcUaXsd, ItemName = "DataValue")] + public partial class DataValueCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public DataValueCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// A collection of objects to pre-populate this new collection with + public DataValueCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The max capacity of this collection + public DataValueCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of objects to return as a collection + public static DataValueCollection ToDataValueCollection(DataValue[] values) + { + if (values != null) + { + return new DataValueCollection(values); + } + + return new DataValueCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of objects to return as a collection + public static implicit operator DataValueCollection(DataValue[] values) + { + return ToDataValueCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + DataValueCollection clone = new DataValueCollection(this.Count); + + foreach (DataValue element in this) + { + clone.Add((DataValue)Utils.Clone(element)); + } + + return clone; + } + } + #endregion + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DiagnosticInfo.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DiagnosticInfo.cs new file mode 100644 index 00000000..0f718b1c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DiagnosticInfo.cs @@ -0,0 +1,604 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// Contains diagnostic information associated with a StatusCode. + /// + /// + /// + /// The DiagnosticInfo BinaryEncoding is defined in Part 6 - Mappings, Section 6.2.2.13, titled + /// Mappings. + ///
+ /// + /// The DiagnosticInfo object is an object that contains diagnostic information, and is intended to be used + /// in provide diagnostic information in a uniform way. + ///
+ ///
+ [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class DiagnosticInfo : IFormattable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + /// + /// Initializes the object with default values. + /// + public DiagnosticInfo() + { + Initialize(); + } + + /// + /// Creates a deep copy of the value. + /// + /// + /// Creates a new instance of the object while copying the value passed in. + /// + /// The value to copy + /// Thrown when the value is null + public DiagnosticInfo(DiagnosticInfo value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + m_symbolicId = value.m_symbolicId; + m_namespaceUri = value.m_namespaceUri; + m_locale = value.m_locale; + m_localizedText = value.m_localizedText; + m_additionalInfo = value.m_additionalInfo; + m_innerStatusCode = value.m_innerStatusCode; + + if (value.m_innerDiagnosticInfo != null) + { + m_innerDiagnosticInfo = new DiagnosticInfo(value.m_innerDiagnosticInfo); + } + } + + /// + /// Initializes the object with specific values. + /// + /// + /// Initializes the object with specific values. + /// + /// The symbolic ID + /// The namespace URI applicable + /// The locale for the localized text value + /// The localized text value + /// Additional, textual information + public DiagnosticInfo( + int symbolicId, + int namespaceUri, + int locale, + int localizedText, + string additionalInfo) + { + m_symbolicId = symbolicId; + m_namespaceUri = namespaceUri; + m_locale = locale; + m_localizedText = localizedText; + m_additionalInfo = additionalInfo; + } + + /// + /// Initializes the object with an exception. + /// + /// + /// Initializes the object with an exception. + /// + /// The bitmask describing the diagnostic data + /// The overall transaction result + /// The service level + /// A table of strings carrying more diagnostic data + public DiagnosticInfo( + ServiceResult result, + DiagnosticsMasks diagnosticsMask, + bool serviceLevel, + StringTable stringTable) + { + uint mask = (uint)diagnosticsMask; + + if (!serviceLevel) + { + mask >>= 5; + } + + diagnosticsMask = (DiagnosticsMasks)mask; + + Initialize(result, diagnosticsMask, stringTable); + } + + /// + /// Initializes the object with an exception. + /// + /// + /// Initializes the object with an exception. + /// + /// A bitmask describing the type of diagnostic data + /// The exception to associated with the diagnostic data + /// The service level + /// A table of strings that may contain additional diagnostic data + public DiagnosticInfo( + Exception exception, + DiagnosticsMasks diagnosticsMask, + bool serviceLevel, + StringTable stringTable) + { + uint mask = (uint)diagnosticsMask; + + if (!serviceLevel) + { + mask >>= 5; + } + + diagnosticsMask = (DiagnosticsMasks)mask; + + Initialize(new ServiceResult(exception), diagnosticsMask, stringTable); + } + + /// + /// Initializes the object during deserialization. + /// + /// + /// Initializes the object during deserialization. + /// + /// The context information of an underlying data-stream + [OnDeserializing()] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "context")] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + /// + /// Initializes the object with default values during deserialization. + /// + private void Initialize() + { + m_symbolicId = -1; + m_namespaceUri = -1; + m_locale = -1; + m_localizedText = -1; + m_additionalInfo = null; + m_innerStatusCode = StatusCodes.Good; + m_innerDiagnosticInfo = null; + } + + /// + /// Initializes the object with a service result. + /// + /// + /// Initializes the object with a service result. + /// + /// The bitmask describing the type of diagnostic data + /// The transaction result + /// An array of strings that may be used to provide additional diagnostic details + private void Initialize( + ServiceResult result, + DiagnosticsMasks diagnosticsMask, + StringTable stringTable) + { + if (stringTable == null) throw new ArgumentNullException(nameof(stringTable)); + + m_symbolicId = -1; + m_namespaceUri = -1; + m_locale = -1; + m_localizedText = -1; + m_additionalInfo = null; + m_innerStatusCode = StatusCodes.Good; + m_innerDiagnosticInfo = null; + + if ((DiagnosticsMasks.ServiceSymbolicId & diagnosticsMask) != 0) + { + string symbolicId = result.SymbolicId; + string namespaceUri = result.NamespaceUri; + + if (!String.IsNullOrEmpty(symbolicId)) + { + m_symbolicId = stringTable.GetIndex(result.SymbolicId); + + if (m_symbolicId == -1) + { + m_symbolicId = stringTable.Count; + stringTable.Append(symbolicId); + } + + if (!String.IsNullOrEmpty(namespaceUri)) + { + m_namespaceUri = stringTable.GetIndex(namespaceUri); + + if (m_namespaceUri == -1) + { + m_namespaceUri = stringTable.Count; + stringTable.Append(namespaceUri); + } + } + } + } + + if ((DiagnosticsMasks.ServiceLocalizedText & diagnosticsMask) != 0) + { + if (!Opc.Ua.LocalizedText.IsNullOrEmpty(result.LocalizedText)) + { + if (!String.IsNullOrEmpty(result.LocalizedText.Locale)) + { + m_locale = stringTable.GetIndex(result.LocalizedText.Locale); + + if (m_locale == -1) + { + m_locale = stringTable.Count; + stringTable.Append(result.LocalizedText.Locale); + } + } + + m_localizedText = stringTable.GetIndex(result.LocalizedText.Text); + + if (m_localizedText == -1) + { + m_localizedText = stringTable.Count; + stringTable.Append(result.LocalizedText.Text); + } + } + } + + if ((DiagnosticsMasks.ServiceAdditionalInfo & diagnosticsMask) != 0) + { + m_additionalInfo = result.AdditionalInfo; + } + + if (result.InnerResult != null) + { + if ((DiagnosticsMasks.ServiceInnerStatusCode & diagnosticsMask) != 0) + { + m_innerStatusCode = result.InnerResult.StatusCode; + } + + // recursively append the inner diagnostics. + if ((DiagnosticsMasks.ServiceInnerDiagnostics & diagnosticsMask) != 0) + { + m_innerDiagnosticInfo = new DiagnosticInfo( + result.InnerResult, + diagnosticsMask, + true, + stringTable); + } + } + } + #endregion + + #region Public Properties + /// + /// The index of the symbolic id in the string table. + /// + /// + /// The index of the symbolic id in the string table. + /// + [DataMember(Order = 1, IsRequired = false)] + public int SymbolicId + { + get { return m_symbolicId; } + set { m_symbolicId = value; } + } + + /// + /// The index of the namespace uri in the string table. + /// + /// + /// The index of the namespace uri in the string table. + /// + [DataMember(Order = 2, IsRequired = false)] + public int NamespaceUri + { + get { return m_namespaceUri; } + set { m_namespaceUri = value; } + } + + /// + /// The index of the locale associated with the localized text. + /// + [DataMember(Order = 3, IsRequired = false)] + public int Locale + { + get { return m_locale; } + set { m_locale = value; } + } + + /// + /// The index of the localized text in the string table. + /// + [DataMember(Order = 4, IsRequired = false)] + public int LocalizedText + { + get { return m_localizedText; } + set { m_localizedText = value; } + } + + /// + /// The additional debugging or trace information. + /// + /// + /// The additional debugging or trace information. + /// + [DataMember(Order = 5, IsRequired = false, EmitDefaultValue = false)] + public string AdditionalInfo + { + get { return m_additionalInfo; } + set { m_additionalInfo = value; } + } + + /// + /// The status code returned from an underlying system. + /// + /// + /// The status code returned from an underlying system. + /// + [DataMember(Order = 6, IsRequired = false)] + public StatusCode InnerStatusCode + { + get { return m_innerStatusCode; } + set { m_innerStatusCode = value; } + } + + /// + /// The diagnostic info returned from a underlying system. + /// + /// + /// The diagnostic info returned from a underlying system. + /// + [DataMember(Order = 7, IsRequired = false, EmitDefaultValue = false)] + public DiagnosticInfo InnerDiagnosticInfo + { + get { return m_innerDiagnosticInfo; } + set { m_innerDiagnosticInfo = value; } + } + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the object. + /// + /// + /// Determines if the specified object is equal to the object. + /// + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + DiagnosticInfo value = obj as DiagnosticInfo; + + if (value != null) + { + if (this.m_symbolicId != value.m_symbolicId) + { + return false; + } + + if (this.m_namespaceUri != value.m_namespaceUri) + { + return false; + } + + if (this.m_locale != value.m_locale) + { + return false; + } + + if (this.m_localizedText != value.m_localizedText) + { + return false; + } + + if (this.m_additionalInfo != value.m_additionalInfo) + { + return false; + } + + if (this.m_innerStatusCode != value.m_innerStatusCode) + { + return false; + } + + if (this.m_innerDiagnosticInfo != null) + { + return this.m_innerDiagnosticInfo.Equals(value.m_innerDiagnosticInfo); + } + + return value.m_innerDiagnosticInfo == null; + } + + return false; + } + + /// + /// Returns a unique hashcode for the object. + /// + /// + /// Returns a unique hashcode for the object. + /// + public override int GetHashCode() + { + int hash = 0; + + hash ^= this.m_symbolicId.GetHashCode(); + hash ^= this.m_namespaceUri.GetHashCode(); + hash ^= this.m_locale.GetHashCode(); + hash ^= this.m_localizedText.GetHashCode(); + + if (this.m_additionalInfo != null) + { + hash ^= this.m_additionalInfo.GetHashCode(); + } + + hash ^= this.m_innerStatusCode.GetHashCode(); + + if (this.m_innerDiagnosticInfo != null) + { + hash ^= this.m_innerDiagnosticInfo.GetHashCode(); + } + + return 0; + } + + /// + /// Converts the value to a human readable string. + /// + /// + /// Converts the value to a human readable string. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + /// (Unused). Always pass a null + /// (Unused) The provider. + /// Thrown if the format parameter is NOT null + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return Utils.Format("{0}:{1}:{2}:{3}", m_symbolicId, m_namespaceUri, m_locale, m_localizedText); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// Makes a deep copy of this object. + /// + public new object MemberwiseClone() + { + return new DiagnosticInfo(this); + } + #endregion + + #region Private Members + private int m_symbolicId; + private int m_namespaceUri; + private int m_locale; + private int m_localizedText; + private string m_additionalInfo; + private StatusCode m_innerStatusCode; + private DiagnosticInfo m_innerDiagnosticInfo; + #endregion + } + + #region DiagnosticInfoCollection Class + /// + /// A collection of DiagnosticInfo objects. + /// + /// + /// A strongly-typed collection of DiagnosticInfo objects. + /// + [CollectionDataContract(Name = "ListOfDiagnosticInfo", Namespace = Namespaces.OpcUaXsd, ItemName = "DiagnosticInfo")] + public partial class DiagnosticInfoCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public DiagnosticInfoCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// The collection to copy the contents from + public DiagnosticInfoCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The max capacity of the collection + public DiagnosticInfoCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of objects to return within a collection + public static DiagnosticInfoCollection ToDiagnosticInfoCollection(DiagnosticInfo[] values) + { + if (values != null) + { + return new DiagnosticInfoCollection(values); + } + + return new DiagnosticInfoCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of objects to return within a collection + public static implicit operator DiagnosticInfoCollection(DiagnosticInfo[] values) + { + return ToDiagnosticInfoCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + DiagnosticInfoCollection clone = new DiagnosticInfoCollection(this.Count); + + foreach (DiagnosticInfo element in this) + { + clone.Add((DiagnosticInfo)Utils.Clone(element)); + } + + return clone; + } + }//class + #endregion + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DiagnosticMasks.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DiagnosticMasks.cs new file mode 100644 index 00000000..37fc1eac --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/DiagnosticMasks.cs @@ -0,0 +1,148 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// The DiagnosticsMasks enumeration. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1717:OnlyFlagsEnumsShouldHavePluralNames"), Flags] + public enum DiagnosticsMasks + { + /// + /// ServiceSymbolicId = 0, + /// + None = 0, + + /// + /// ServiceSymbolicId = 1, + /// + ServiceSymbolicId = 1, + + /// + /// ServiceLocalizedText = 2, + /// + ServiceLocalizedText = 2, + + /// + /// ServiceAdditionalInfo = 4, + /// + ServiceAdditionalInfo = 4, + + /// + /// ServiceInnerStatusCode = 8, + /// + ServiceInnerStatusCode = 8, + + /// + /// ServiceInnerDiagnostics = 16, + /// + ServiceInnerDiagnostics = 16, + + /// + /// ServiceSymbolicIdAndText = 3, + /// + ServiceSymbolicIdAndText = 3, + + /// + /// ServiceNoInnerStatus = 15, + /// + ServiceNoInnerStatus = 15, + + /// + /// ServiceAll = 31, + /// + ServiceAll = 31, + + /// + /// OperationSymbolicId = 32, + /// + OperationSymbolicId = 32, + + /// + /// OperationLocalizedText = 64, + /// + OperationLocalizedText = 64, + + /// + /// OperationAdditionalInfo = 128, + /// + OperationAdditionalInfo = 128, + + /// + /// OperationInnerStatusCode = 256, + /// + OperationInnerStatusCode = 256, + + /// + /// OperationInnerDiagnostics = 512, + /// + OperationInnerDiagnostics = 512, + + /// + /// OperationSymbolicIdAndText = 96, + /// + OperationSymbolicIdAndText = 96, + + /// + /// OperationNoInnerStatus = 224, + /// + OperationNoInnerStatus = 224, + + /// + /// OperationAll = 992, + /// + OperationAll = 992, + + /// + /// SymbolicId = 33, + /// + SymbolicId = 33, + + /// + /// LocalizedText = 66, + /// + LocalizedText = 66, + + /// + /// AdditionalInfo = 132, + /// + AdditionalInfo = 132, + + /// + /// InnerStatusCode = 264, + /// + InnerStatusCode = 264, + + /// + /// InnerDiagnostics = 528, + /// + InnerDiagnostics = 528, + + /// + /// SymbolicIdAndText = 99, + /// + SymbolicIdAndText = 99, + + /// + /// NoInnerStatus = 239, + /// + NoInnerStatus = 239, + + /// + /// All = 1023 + /// + All = 1023 + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ExpandedNodeId.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ExpandedNodeId.cs new file mode 100644 index 00000000..b1c2e223 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ExpandedNodeId.cs @@ -0,0 +1,1244 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization; +using System.Text; + +namespace Opc.Ua +{ + /// + /// Extends a node id by adding a complete namespace URI. + /// + /// + /// Extends a node id by adding a complete namespace URI. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class ExpandedNodeId : IComparable, IFormattable + { + #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(nameof(value)); + + m_namespaceUri = value.m_namespaceUri; + + if (value.m_nodeId != null) + { + m_nodeId = new 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 = new 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 to wrap. + /// The namespace that this node belongs to + public ExpandedNodeId(NodeId nodeId, string namespaceUri) + { + Initialize(); + + if (nodeId != null) + { + m_nodeId = new 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 = new 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 numeric 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 numeric id of the node we are wrapping + /// The namspace index that this node belongs to + public ExpandedNodeId(uint value, ushort namespaceIndex) + { + Initialize(); + m_nodeId = new NodeId(value, namespaceIndex); + } + + /// + /// Initializes a numeric 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 numeric id of the node we are wrapping + /// The namespace that this node belongs to + 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(Guid value) + { + Initialize(); + m_nodeId = new NodeId(value); + } + + /// + /// Initializes a guid node identifier. + /// + /// + /// Creates a new instance of the class while specifying the value + /// of the node and the namesapceIndex we are wrapping. + /// + /// The Guid value of the node we are wrapping + /// The index of the namespace that this node should belong to + public ExpandedNodeId(Guid value, ushort namespaceIndex) + { + Initialize(); + m_nodeId = new NodeId(value, namespaceIndex); + } + + /// + /// Initializes a guid node identifier. + /// + /// + /// Creates a new instance of the class while specifying the value + /// of the node and the namespaceUri we are wrapping. + /// + /// The Guid value of the node we are wrapping + /// The namespace that this node belongs to + public ExpandedNodeId(Guid value, string namespaceUri) + { + Initialize(); + m_nodeId = new NodeId(value); + SetNamespaceUri(namespaceUri); + } + + /// + /// Initializes a opaque 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 id of the node we are wrapping + /// The index of the namespace that this node should belong to + 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 node we are wrapping + /// The namespace that this node belongs to + 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 + + #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; + } + } + + /// + /// The node identifier. + /// + /// + /// Returns the node id in whatever form, i.e. + /// string, Guid, byte[] or uint. + /// + public object Identifier + { + get + { + if (m_nodeId != null) + { + return m_nodeId.Identifier; + } + + 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 { return m_nodeId; } + set { m_nodeId = value; } + } + + /// + /// The node identifier formatted as a URI. + /// + /// + /// The node identifier formatted as a URI. + /// + [DataMember(Name = "Identifier", Order = 1)] + internal string IdentifierText + { + get + { + return Format(); + } + set + { + ExpandedNodeId nodeId = ExpandedNodeId.Parse(value); + + m_nodeId = nodeId.m_nodeId; + m_namespaceUri = nodeId.m_namespaceUri; + m_serverIndex = nodeId.m_serverIndex; + } + } + + #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.Identifier, m_nodeId.IdType, m_nodeId.NamespaceIndex, m_namespaceUri, m_serverIndex); + } + else + { + Format(buffer, null, IdType.Numeric, 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 + + #region public static ExpandedNodeId Parse(string, NamespaceTable, NamespaceTable) + /// + /// Parses a expanded node id string, translated any namespace indexes and returns the result. + /// + public static ExpandedNodeId Parse(string text, NamespaceTable currentNamespaces, NamespaceTable 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.GetString(nodeId.m_nodeId.NamespaceIndex); + } + + // translate the namespace uri. + ushort namespaceIndex = 0; + + if (!String.IsNullOrEmpty(uri)) + { + int index = targetNamespaces.GetIndex(uri); + + if (index == -1) + { + throw ServiceResultException.Create( + StatusCodes.BadNodeIdInvalid, + "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.Identifier, 0); + nodeId.m_namespaceUri = uri; + return nodeId; + } + + // local node id. + nodeId.m_nodeId = new NodeId(nodeId.m_nodeId.Identifier, namespaceIndex); + nodeId.m_namespaceUri = null; + + return nodeId; + } + #endregion + + #region public static ExpandedNodeId Parse(string text) + /// + /// 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(StatusCodes.BadNodeIdInvalid, "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 new ServiceResultException(StatusCodes.BadNodeIdInvalid, "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); + + // craete the node id. + return new ExpandedNodeId(nodeId, namespaceUri, serverIndex); + } + catch (Exception e) + { + throw new ServiceResultException( + StatusCodes.BadNodeIdInvalid, + Utils.Format("Cannot parse expanded node id text: '{0}'", text), + e); + } + } + + /// + /// Unescapes any reserved characters in the uri. + /// + 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 new ServiceResultException(StatusCodes.BadNodeIdInvalid, "Invalid escaped character in namespace uri."); + } + + ushort value = 0; + + int digit = kHexDigits.IndexOf(Char.ToUpperInvariant(text[++ii])); + + if (digit == -1) + { + throw new ServiceResultException(StatusCodes.BadNodeIdInvalid, "Invalid escaped character in namespace uri."); + } + + value += (ushort)digit; + value <<= 4; + + digit = kHexDigits.IndexOf(Char.ToUpperInvariant(text[++ii])); + + if (digit == -1) + { + throw new ServiceResultException(StatusCodes.BadNodeIdInvalid, "Invalid escaped character in namespace uri."); + } + + value += (ushort)digit; + + char unencodedChar = Convert.ToChar(value); + + buffer.Append(unencodedChar); + break; + } + + default: + { + buffer.Append(ch); + break; + } + } + } + } + + /// + /// The set of hexadecimal digits used for decoding escaped URIs. + /// + private const string kHexDigits = "0123456789ABCDEF"; + #endregion + + #endregion + + #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 (!this.IsAbsolute) + { + if (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.IsNull && expandedId.IsNull) + { + return 0; + } + + 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 + + #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 + + #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(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #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 new object MemberwiseClone() + { + // this object cannot be altered after it is created so no new allocation is necessary. + return this; + } + #endregion + + #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 ExpandedNodeId to convert to a NodeId + /// The namespace table that contains all the namespaces needed to resolve the namespace index as encoded within this object. + public static NodeId ToNodeId(ExpandedNodeId nodeId, NamespaceTable 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.GetIndex(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 + + #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. + public static NodeId Parse(string text, NamespaceTable namespaceUris) + { + ExpandedNodeId nodeId = ExpandedNodeId.Parse(text); + + if (!nodeId.IsAbsolute) + { + return nodeId.InnerNodeId; + } + + NodeId localId = ExpandedNodeId.ToNodeId(nodeId, namespaceUris); + + if (localId == null) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "NamespaceUri ({0}) is not in the namespace table.", nodeId.NamespaceUri); + } + + 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; + + private static readonly ExpandedNodeId s_Null = new ExpandedNodeId(); + #endregion + + #region Private Fields + private NodeId m_nodeId; + private string m_namespaceUri; + private uint m_serverIndex; + #endregion + } + + #region ExpandedNodeIdCollection Class + /// + /// A collection of ExpandedNodeId objects. + /// + [CollectionDataContract(Name = "ListOfExpandedNodeId", Namespace = Namespaces.OpcUaXsd, ItemName = "ExpandedNodeId")] + public partial class ExpandedNodeIdCollection : List + { + /// + /// 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 new object MemberwiseClone() + { + ExpandedNodeIdCollection clone = new ExpandedNodeIdCollection(this.Count); + + foreach (ExpandedNodeId element in this) + { + clone.Add((ExpandedNodeId)Utils.Clone(element)); + } + + return clone; + } + + }//class + #endregion + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ExtensionObject.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ExtensionObject.cs new file mode 100644 index 00000000..96bbbdc2 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ExtensionObject.cs @@ -0,0 +1,959 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// An object used to wrap data types that the receiver may not understand. + /// + /// + /// + /// This class is a wrapper/helper class for storing data types that a receiver might not + /// understand, or be prepared to handle. This class may use to + /// analyze an object and retrieve the values of its public properties directly, and then + /// encode those into a string representation that can then be easily encoded as a single string. + ///
+ ///
+ /// + /// An instance of the is a container for any complex data types which cannot be encoded as one of the + /// other built-in data types. The ExtensionObject contains a complex value serialized as a sequence of + /// bytes or as an XML element. It also contains an identifier which indicates what data it contains and + /// how it is encoded. + /// + ///
+ /// + /// + /// The following example demonstrates a simple class containing 3 public properties of + /// type int, DateTime and string. This class implements the + /// interface, and is then encoded using the WriteExtensionObject method. + ///
+ /// + /// //First, we will define a very simple class object that will represent + /// //some real-world process. + /// class simpleClass : IEncodeable + /// { + /// + /// //fields + /// public string PublicFieldNotVisible = "I should not be encoded"; + /// + /// //properties + /// private string stringField; + /// public string StringProperty + /// { + /// get + /// { + /// return (stringField); + /// } + /// set + /// { + /// stringField = value; + /// } + /// } + /// + /// private int intField; + /// public int IntProperty + /// { + /// get + /// { + /// return (intField); + /// } + /// set + /// { + /// intField = value; + /// } + /// } + /// + /// private DateTime datetimeField; + /// public DateTime DatetimeProperty + /// { + /// get + /// { + /// return (datetimeField); + /// } + /// set + /// { + /// datetimeField = value; + /// } + /// } + /// + /// //class constructor + /// public simpleClass(string StringValue, int IntValue, DateTime DateTimeValue) + /// { + /// StringProperty = StringValue; + /// IntProperty = IntValue; + /// DatetimeProperty = DateTimeValue; + /// } + /// public simpleClass(simpleClass SimpleClassInstance) + /// { + /// StringProperty = SimpleClassInstance.StringProperty; + /// IntProperty = SimpleClassInstance.IntProperty; + /// DatetimeProperty = SimpleClassInstance.DatetimeProperty; + /// } + /// + /// #region IEncodeable Members + /// + /// public ExpandedNodeId TypeId + /// { + /// get + /// { + /// return (new ExpandedNodeId(Guid.NewGuid())); + /// } + /// } + /// + /// public void Encode(IEncoder encoder) + /// { + /// if (encoder != null) + /// { + /// //our simple object has 3 properies: string, int and datetime + /// encoder.WriteString("StringProperty", this.StringProperty); + /// encoder.WriteInt32("IntProperty", this.IntProperty); + /// encoder.WriteDateTime("DateTimeProperty", this.DatetimeProperty); + /// } + /// } + /// + /// public void Decode(IDecoder decoder) + /// { + /// if (decoder != null) + /// { + /// this.StringProperty = decoder.ReadString("StringProperty"); + /// this.IntProperty = decoder.ReadInt16("IntProperty"); + /// this.DatetimeProperty = decoder.ReadDateTime("DateTimeProperty"); + /// } + /// } + /// + /// public bool IsEqual(IEncodeable encodeable) + /// { + /// return (encodeable.Equals(this)); + /// } + /// + /// #endregion + /// + /// #region ICloneable Members + /// + /// public new object MemberwiseClone() + /// { + /// return (new simpleClass(this)); + /// } + /// + /// #endregion + /// + /// } + /// + /// public void EncodeExample() + /// { + /// //define an instance of our class object, defined above. + /// simpleClass mySimpleClassInstance1 = new simpleClass("String", int.MaxValue, DateTime.Now); + /// + /// //define an object that will encapsulate/extend our simple instance above + /// ExtensionObject extendedSimpleClassInstance = new ExtensionObject(mySimpleClassInstance1); + /// + /// /// + /// //encode our class object into the stream + /// uaEncoderInstance.WriteExtensionObject( "Extended1", extendedSimpleClassInstance); + /// } + /// + /// + /// + /// 'First, we will define a very simple class object that will represent + /// 'some real-world process. + /// + /// Class simpleClass + /// Inherits IEncodeable + /// + /// 'fields + /// Public PublicFieldNotVisible As String = "I should not be encoded" + /// + /// 'properties + /// Private stringField As String + /// Private intField As Integer + /// Private datetimeField As DateTime + /// + /// 'class constructor + /// Public Sub New(ByVal StringValue As String, ByVal IntValue As Integer, ByVal DateTimeValue As DateTime) + /// StringProperty = StringValue + /// IntProperty = IntValue + /// DatetimeProperty = DateTimeValue + /// End Sub + /// + /// Public Sub New(ByVal SimpleClassInstance As simpleClass) + /// StringProperty = SimpleClassInstance.StringProperty + /// IntProperty = SimpleClassInstance.IntProperty + /// DatetimeProperty = SimpleClassInstance.DatetimeProperty + /// End Sub + /// + /// Public Property StringProperty As String + /// Get + /// Return stringField + /// End Get + /// Set + /// stringField = value + /// End Set + /// End Property + /// + /// Public Property IntProperty As Integer + /// Get + /// Return intField + /// End Get + /// Set + /// intField = value + /// End Set + /// End Property + /// + /// Public Property DatetimeProperty As DateTime + /// Get + /// Return datetimeField + /// End Get + /// Set + /// datetimeField = value + /// End Set + /// End Property + /// + /// Public ReadOnly Property TypeId As ExpandedNodeId + /// Get + /// Return New ExpandedNodeId(Guid.NewGuid) + /// End Get + /// End Property + /// + /// Public Sub Encode(ByVal encoder As IEncoder) + /// If encoder Isnot Nothing Then + /// 'our simple object has 3 properies: string, int and datetime + /// encoder.WriteString("StringProperty", Me.StringProperty) + /// encoder.WriteInt32("IntProperty", Me.IntProperty) + /// encoder.WriteDateTime("DateTimeProperty", Me.DatetimeProperty) + /// End If + /// End Sub + /// + /// Public Sub Decode(ByVal decoder As IDecoder) + /// If decoder Isnot Nothing Then + /// Me.StringProperty = decoder.ReadString("StringProperty") + /// Me.IntProperty = decoder.ReadInt16("IntProperty") + /// Me.DatetimeProperty = decoder.ReadDateTime("DateTimeProperty") + /// End If + /// End Sub + /// + /// Public Function IsEqual(ByVal encodeable As IEncodeable) As Boolean + /// Return encodeable.Equals(Me) + /// End Function + /// + /// Public Function Clone() As Object + /// Return New simpleClass(Me) + /// End Function + ///End Class + /// + /// Public Sub nodeid() + /// 'define an instance of our class object, defined above. + /// Dim mySimpleClassInstance1 As simpleClass = New simpleClass("String", int.MaxValue, DateTime.Now) + /// + /// 'define an object that will encapsulate/extend our simple instance above + /// Dim extendedSimpleClassInstance As ExtensionObject = New ExtensionObject(mySimpleClassInstance1) + /// + /// 'encode our class object into the stream + /// uaEncoderInstance.WriteExtensionObject("Extended1", extendedSimpleClassInstance) + ///End Sub + /// + ///
+ [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class ExtensionObject : IFormattable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + /// + /// Initializes the object with default values. + /// + public ExtensionObject() + { + m_typeId = ExpandedNodeId.Null; + m_encoding = ExtensionObjectEncoding.None; + m_body = null; + m_context = MessageContextExtension.CurrentContext; + } + + /// + /// Creates a deep copy of the value. + /// + /// The value to be copied. + /// + /// Creates a deep copy of the value. + /// + /// Thrown when the value is null + public ExtensionObject(ExtensionObject value) + { + if (value == null) + { + throw new ArgumentNullException(nameof(value)); + } + + TypeId = value.TypeId; + Body = Utils.Clone(value.Body); + } + + /// + /// Initializes the object with a . + /// + /// The type to copy and create an instance from + public ExtensionObject(ExpandedNodeId typeId) + { + TypeId = typeId; + Body = null; + } + + /// + /// Initializes the object with a body. + /// + /// The body of the object: IEncodeable, XmlElement or Byte-array + public ExtensionObject(object body) + : this(ExpandedNodeId.Null, body) + { + } + + /// + /// Initializes the object with an encodeable object. + /// + /// The type describing the body + /// The underlying data/body to wrap + /// + /// Initializes the object with an encodeable object. + /// + public ExtensionObject(ExpandedNodeId typeId, object body) + { + TypeId = typeId; + Body = body; + } + + [OnSerializing] + private void UpdateContext(StreamingContext context) + { + m_context = MessageContextExtension.CurrentContext; + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing] + private void Initialize(StreamingContext context) + { + m_typeId = ExpandedNodeId.Null; + m_encoding = ExtensionObjectEncoding.None; + m_body = null; + m_context = MessageContextExtension.CurrentContext; + } + #endregion + + #region Public Properties + /// + /// The data type node id for the extension object. + /// + /// The type id. + public ExpandedNodeId TypeId + { + get { return m_typeId; } + set { m_typeId = value; } + } + + /// + /// The encoding to use when the deserializing/serializing the body. + /// + /// The encoding for the embedd object. + public ExtensionObjectEncoding Encoding => m_encoding; + + /// + /// The body (embeded object) of the extension object. + /// + /// The object to be embeded. + /// + /// The body of the extension object. This property will work with objects of the + /// following types: + /// + /// + /// byte-array ( C# = byte[] or VB.NET Byte() ) + /// + /// + /// + /// Thrown when the body is not one of the types listed above + public object Body + { + get { return m_body; } + + set + { + m_body = value; + + if (m_body == null) + { + m_encoding = ExtensionObjectEncoding.None; + } + + else if (m_body is IEncodeable) + { + m_encoding = ExtensionObjectEncoding.EncodeableObject; + } + + else if (m_body is byte[]) + { + m_encoding = ExtensionObjectEncoding.Binary; + } + + else if (m_body is XmlElement) + { + m_encoding = ExtensionObjectEncoding.Xml; + } + + else + { + throw new ServiceResultException( + StatusCodes.BadNotSupported, + Utils.Format("Cannot add a object with type '{0}' to an extension object.", m_body.GetType().FullName)); + } + } + } + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the . + /// + /// The object to compare to this instance of object + /// + /// true if the specified is equal to the current embeded object; otherwise, false. + /// + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(obj, null)) + { + return IsNull(this); + } + + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + ExtensionObject value = obj as ExtensionObject; + + if (value != null) + { + if (this.m_typeId != value.m_typeId) + { + return false; + } + + return Utils.IsEqual(this.m_body, value.m_body); + } + + return false; + } + + /// + /// Returns a unique hashcode for the embeded object. + /// + /// + /// A hash code for the current embeded object. + /// + public override int GetHashCode() + { + if (this.m_body != null) + { + return this.m_body.GetHashCode(); + } + + if (this.m_typeId != null) + { + return this.m_typeId.GetHashCode(); + } + + return 0; + } + + /// + /// Converts the value to a human readable string. + /// + /// + /// A that represents the current . + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the embededobject. + /// + /// (Unused). Leave this as null + /// The provider of a mechanism for retrieving an object to control formatting. + /// + /// A containing the value of the current embeded instance in the specified format. + /// + /// Thrown if the format parameter is not null + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + if (m_body is byte[]) + { + return String.Format(formatProvider, "Byte[{0}]", ((byte[])m_body).Length); + } + + if (m_body is XmlElement) + { + return String.Format(formatProvider, "<{0}>", ((XmlElement)m_body).Name); + } + + if (m_body is IFormattable) + { + return String.Format(formatProvider, "{0}", ((IFormattable)m_body).ToString(null, formatProvider)); + } + + if (m_body is IEncodeable) + { + StringBuilder body = new StringBuilder(); + + PropertyInfo[] properties = m_body.GetType().GetProperties(BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance); + + foreach (PropertyInfo property in properties) + { + object[] attributes = property.GetCustomAttributes(typeof(DataMemberAttribute), true).ToArray(); + + for (int ii = 0; ii < attributes.Length; ii++) + { + DataMemberAttribute contract = attributes[ii] as DataMemberAttribute; + + if (contract != null) + { + if (body.Length == 0) + { + body.Append("{"); + } + else + { + body.Append(" | "); + } + + body.AppendFormat("{0}", property.GetGetMethod().Invoke(m_body, null)); + } + } + } + + if (body.Length > 0) + { + body.Append("}"); + } + + return String.Format(formatProvider, "{0}", body); + } + + if (!NodeId.IsNull(this.m_typeId)) + { + return String.Format(formatProvider, "{{{0}}}", this.m_typeId); + } + + return "(null)"; + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// A new object that is a copy of this instance. + /// + public new object MemberwiseClone() + { + return new ExtensionObject(this); + } + #endregion + + #region Static Members + /// + /// Tests if the extension or embedd objects are null value. + /// + /// The object to check if null + /// + /// true if the specified is null of the embeded object is null; otherwise, false. + /// + /// + /// Tests is the extension object is null value. + /// + public static bool IsNull(ExtensionObject extension) + { + if (extension != null && extension.m_body != null) + { + return false; + } + + return true; + } + + /// + /// Converts an extension object to an encodeable object. + /// + /// The extension object to convert to an encodeable object + /// Instance of for the embeded object. + /// + /// Converts an extension object to an encodeable object. + /// + public static IEncodeable ToEncodeable(ExtensionObject extension) + { + if (extension == null) + { + return null; + } + + return extension.Body as IEncodeable; + } + + /// + /// Converts an array of extension objects to an array of the specified type. + /// + /// The array to convert. + /// The type of each element. + /// The new array + /// + /// Will add null elements if individual elements cannot be converted. + /// + public static Array ToArray(object source, Type elementType) + { + var extensions = source as Array; + + if (extensions == null) + { + return null; + } + + Array output = Array.CreateInstance(elementType, extensions.Length); + + for (int ii = 0; ii < output.Length; ii++) + { + IEncodeable element = ToEncodeable(extensions.GetValue(ii) as ExtensionObject); + + if (elementType.IsInstanceOfType(element)) + { + output.SetValue(element, ii); + } + } + + return output; + } + + /// + /// Converts an array of extension objects to a List of the specified type. + /// + /// The array to convert. + /// The new typed List + /// + /// Will add null elements if individual elements cannot be converted. + /// + public static List ToList(object source) where T : class + { + var extensions = source as Array; + + if (extensions == null) + { + return null; + } + + List list = new List(); + + for (int ii = 0; ii < extensions.Length; ii++) + { + IEncodeable element = ToEncodeable(extensions.GetValue(ii) as ExtensionObject); + + if (typeof(T).IsInstanceOfType(element)) + { + list.Add((T)element); + } + else + { + list.Add(null); + } + } + + return list; + } + + /// + /// Returns an instance of a null ExtensionObject. + /// + public static ExtensionObject Null => s_Null; + private static readonly ExtensionObject s_Null = new ExtensionObject(); + #endregion + + #region Private Members + [DataMember(Name = "TypeId", Order = 1, IsRequired = false, EmitDefaultValue = true)] + private NodeId XmlEncodedTypeId + { + get + { + // must use the XML encoding id if encoding in an XML stream. + IEncodeable encodeable = m_body as IEncodeable; + + if (encodeable != null) + { + return ExpandedNodeId.ToNodeId(encodeable.XmlEncodingId, m_context.NamespaceUris); + } + + // check for null Id. + if (m_typeId.IsNull) + { + return NodeId.Null; + } + + return ExpandedNodeId.ToNodeId(m_typeId, m_context.NamespaceUris); + } + + set + { + m_typeId = NodeId.ToExpandedNodeId(value, m_context.NamespaceUris); + } + } + + [DataMember(Name = "Body", Order = 2, IsRequired = false, EmitDefaultValue = true)] + private XmlElement XmlEncodedBody + { + get + { + // check for null. + if (m_body == null) + { + return null; + } + + // create encoder. + XmlEncoder encoder = new XmlEncoder(m_context); + + // write body. + encoder.WriteExtensionObjectBody(m_body); + + // create document from encoder. + XmlDocument document = new XmlDocument(); + document.InnerXml = encoder.Close(); + + // return root element. + return document.DocumentElement; + } + + set + { + // check null bodies. + if (value == null) + { + Body = null; + return; + } + + // create decoder. + XmlDecoder decoder = new XmlDecoder(value, m_context); + + // read body. + Body = decoder.ReadExtensionObjectBody(m_typeId); + + // clear the type id for encodeables. + IEncodeable encodeable = m_body as IEncodeable; + + if (encodeable != null) + { + m_typeId = ExpandedNodeId.Null; + } + + // close decoder. + try + { + decoder.Close(true); + } + catch (Exception e) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Did not read all of a extension object body: '{0}'", m_typeId), + e); + } + } + } + #endregion + + #region Private Fields + private ExpandedNodeId m_typeId; + private ExtensionObjectEncoding m_encoding; + private object m_body; + private ServiceMessageContext m_context; + #endregion + } + + #region ExtensionObjectEncoding Enumeration + /// + /// The types of encodings that may used with an object. + /// + /// + /// The types of encodings that may used with an object. + /// + public enum ExtensionObjectEncoding + { + /// + /// The extension object has no body. + /// + None = 0, + + /// + /// The extension object has a binary encoded body. + /// + Binary = 1, + + /// + /// The extension object has an XML encoded body. + /// + Xml = 2, + + /// + /// The extension object has an encodeable object body. + /// + EncodeableObject = 3, + + /// + /// The extension object has a JSON encoded body. + /// + Json = 4 + } + #endregion + + #region ExtensionObjectCollection Class + /// + /// A collection of ExtensionObjects. + /// + /// + /// A strongly-typed collection of ExtensionObjects. + /// + [CollectionDataContract(Name = "ListOfExtensionObject", Namespace = Namespaces.OpcUaXsd, ItemName = "ExtensionObject")] + public class ExtensionObjectCollection : List + { + #region Constructors + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public ExtensionObjectCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// The collection containing the objects to copy into this new instance + public ExtensionObjectCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// Max capacity of the collection + public ExtensionObjectCollection(int capacity) : base(capacity) { } + #endregion + + #region Static Members + /// + /// Converts an array of ExtensionObjects to a collection. + /// + /// + /// Converts an array of ExtensionObjects to a collection. + /// + /// An array of ExtensionObjects to convert to a collection + public static implicit operator ExtensionObjectCollection(ExtensionObject[] values) + { + if (values != null) + { + return new ExtensionObjectCollection(values); + } + + return new ExtensionObjectCollection(); + } + + /// + /// Converts an encodeable object to an extension object. + /// + /// + /// Converts an encodeable object to an extension object. + /// + /// An enumerable array of ExtensionObjects to convert to a collection + public static ExtensionObjectCollection ToExtensionObjects(IEnumerable encodeables) + { + // return null if the input list is null. + if (encodeables == null) + { + return null; + } + + // convert each encodeable to an extension object. + ExtensionObjectCollection extensibles = new ExtensionObjectCollection(); + + if (encodeables != null) + { + foreach (IEncodeable encodeable in encodeables) + { + // check if already an extension object. + ExtensionObject extensible = encodeable as ExtensionObject; + + if (extensible != null) + { + extensibles.Add(extensible); + } + + // wrap the encodeable with an extension object and let the serializer choose the encoding. + else + { + extensibles.Add(new ExtensionObject(encodeable)); + } + } + } + + return extensibles; + } + #endregion + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + ExtensionObjectCollection clone = new ExtensionObjectCollection(this.Count); + + foreach (ExtensionObject element in this) + { + clone.Add((ExtensionObject)Utils.Clone(element)); + } + + return clone; + } + #endregion + }//class +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ITranslatableObject.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ITranslatableObject.cs new file mode 100644 index 00000000..8e22b6af --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ITranslatableObject.cs @@ -0,0 +1,177 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// An interface to a object that can translate itself. + /// + public interface ITranslatableObject + { + /// + /// Returns a copy of the object with translateable strings replaced. + /// + /// The manager which provides the translations. + /// The locales to use. + /// A copy of the object + /// + /// The copy is not necessarily a deep copy and may reference components of the original object. + /// The original object is not changed. + /// + ITranslatableObject Translate(ITranslationManager manager, IList preferredLocales); + } + + /// + /// An interface to a object that provides translations. + /// + public interface ITranslationManager + { + /// + /// Translates the text and then formats it with the arguments provided. + /// + /// The list of preferred locales + /// The key used to look up the translation + /// The text to translate + /// The format argumente + /// The translated text + /// + /// If any error occur during format the unformatted text is used instead. + /// + LocalizedText Translate(IList preferredLocales, string key, string text, params object[] args); + + /// + /// Translates the LocalizedText using the information in the TranslationInfo property. + /// + /// + LocalizedText Translate(IList preferredLocales, LocalizedText text); + + /// + /// Translates a service result. + /// + /// The preferred locales. + /// The result. + /// The result with all localized text translated. + /// Recusively translates text in inner results. + ServiceResult Translate(IList preferredLocales, ServiceResult result); + } + + /// + /// Stores the information requires to translate a string. + /// + public class TranslationInfo + { + #region Constructors + /// + /// Creates an empty object. + /// + public TranslationInfo() + { + } + + /// + /// Creates an object from a key and a LocalizedText. + /// + public TranslationInfo(string key, LocalizedText text) + { + m_key = key; + + if (text != null) + { + m_text = text.Text; + m_locale = text.Locale; + } + } + + /// + /// Stores the arguments for uses with a SymbolicId that is used to look up default text. + /// + public TranslationInfo(System.Xml.XmlQualifiedName symbolicId, params object[] args) + { + m_key = symbolicId.ToString(); + m_locale = String.Empty; + m_text = String.Empty; + m_args = args; + } + + /// + /// Creates an object from a key and a text. + /// + public TranslationInfo(string key, string locale, string text) + { + m_key = key; + m_locale = locale; + m_text = text; + } + + /// + /// Creates an object from a key with text and format arguements. + /// + public TranslationInfo(string key, string locale, string format, params object[] args) + { + m_key = key; + m_locale = locale; + m_text = format; + m_args = args; + } + #endregion + + #region Public Properties + /// + /// The key used to look up translations. + /// + public string Key + { + get { return m_key; } + set { m_key = value; } + } + + /// + /// The default locale for the text. + /// + public string Locale + { + get { return m_locale; } + set { m_locale = value; } + } + + /// + /// The text to translate. + /// + public string Text + { + get { return m_text; } + set { m_text = value; } + } + + /// + /// The arguments that are used when formatting the text after translation. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public object[] Args + { + get { return m_args; } + set { m_args = value; } + } + #endregion + + #region Private Fields + private string m_key; + private string m_locale; + private string m_text; + private object[] m_args; + #endregion + } + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ITypeTable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ITypeTable.cs new file mode 100644 index 00000000..09ce15b5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/ITypeTable.cs @@ -0,0 +1,141 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// Stores the type tree for a server. + /// + public interface ITypeTable + { + /// + /// Determines whether a node id is a known type id. + /// + /// The type extended identifier. + /// + /// true if the specified type id is known; otherwise, false. + /// + bool IsKnown(ExpandedNodeId typeId); + + /// + /// Determines whether a node id is a known type id. + /// + /// The type identifier. + /// + /// true if the specified type id is known; otherwise, false. + /// + bool IsKnown(NodeId typeId); + + /// + /// Returns the immediate supertype for the type. + /// + /// The extended type identifier. + /// A type identifier of the + NodeId FindSuperType(ExpandedNodeId typeId); + + /// + /// Returns the immediate supertype for the type. + /// + /// The type identifier. + /// The immediate supertype idnetyfier for + NodeId FindSuperType(NodeId typeId); + + /// + /// Returns the immediate subtypes for the type. + /// + /// The extended type identifier. + /// List of type identifiers for + IList FindSubTypes(ExpandedNodeId typeId); + + /// + /// Determines whether a type is a subtype of another type. + /// + /// The subtype identifier. + /// The supertype identifier. + /// + /// true if is supertype of ; otherwise, false. + /// + bool IsTypeOf(ExpandedNodeId subTypeId, ExpandedNodeId superTypeId); + + /// + /// Determines whether a type is a subtype of another type. + /// + /// The subtype identifier. + /// The supertype identyfier. + /// + /// true if is supertype of ; otherwise, false. + /// + bool IsTypeOf(NodeId subTypeId, NodeId superTypeId); + + /// + /// Returns the qualified name for the reference type id. + /// + /// The reference type + /// A name qualified with a namespace for the reference . + QualifiedName FindReferenceTypeName(NodeId referenceTypeId); + + /// + /// Returns the node identifier for the reference type with the specified browse name. + /// + /// Browse name of the reference. + /// The identifier for the + NodeId FindReferenceType(QualifiedName browseName); + + /// + /// Checks if the identifier represents a that provides encodings + /// for the . + /// + /// The id the encoding node . + /// The id of the DataType node. + /// + /// true if is encoding of the ; otherwise, false. + /// + bool IsEncodingOf(ExpandedNodeId encodingId, ExpandedNodeId datatypeId); + + /// + /// Determines if the value contained in an extension object matches the expected data type. + /// + /// The identifier of the expected type . + /// The value. + /// + /// true if the value contained in an extension object matches the + /// expected data type; otherwise, false. + /// + bool IsEncodingFor(NodeId expectedTypeId, ExtensionObject value); + + /// + /// Determines if the value is an encoding of the + /// + /// The expected type id. + /// The value. + /// + /// true the value is an encoding of the ; otherwise, false. + /// + bool IsEncodingFor(NodeId expectedTypeId, object value); + + /// + /// Returns the data type for the specified encoding. + /// + /// The encoding id. + /// + NodeId FindDataTypeId(ExpandedNodeId encodingId); + + /// + /// Returns the data type for the specified encoding. + /// + /// The encoding id. + /// The data type for the + NodeId FindDataTypeId(NodeId encodingId); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/LocalizedText.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/LocalizedText.cs new file mode 100644 index 00000000..7400fee3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/LocalizedText.cs @@ -0,0 +1,530 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// Human readable qualified with a locale. + /// + /// + /// + /// The LocalizedText is defined in Part 3 - Address Space Model, Section 7.5, titled + /// LocalizedText. + ///
+ /// + /// This class provides a wrapper for posting text that is qualified with the locale that it is + /// intended for. + ///
+ ///
+ /// + /// The following example shows a very simple use of this class to localize a + /// welcome message + /// + /// LocalizedText welcomeUS = new LocalizedText( "Hi Everyone", "EN-US" ); + /// LocalizedText welcomeGB = new LocalizedText( "Hello Everyone", "EN-GB" ); + /// LocalizedText welcomeNoLocale = new LocalizedText( "Welcome" ); + /// + /// Utils.Trace( welcomeUS.ToString() ); + /// Utils.Trace( welcomeGB.ToString() ); + /// Utils.Trace( welcomeNoLocale.ToString() ); + /// + /// + /// Dim welcomeUS As LocalizedText = New LocalizedText( "Hi Everyone", "EN-GB" ) + /// Dim welcomeGB As LocalizedText = New LocalizedText( "Hello Everyone", "EN-GB" ) + /// Dim welcomeNoLocale As LocalizedText = New LocalizedText( "Welcome" ) + /// + /// Utils.Trace( welcomeUS.ToString() ) + /// Utils.Trace( welcomeGB.ToString() ) + /// Utils.Trace( welcomeNoLocale.ToString() ) + /// + /// + /// This produces the following output:
+ /// [EN-US]:Hi Everyone
+ /// [EN-GB]:Hello Everyone
+ /// Welcome
+ ///
+ ///
+ [DataContract(Namespace = Namespaces.OpcUaXsd)] + public partial class LocalizedText : IFormattable + { + #region Constructors + /// + /// Initializes the object with the default values. + /// + /// + /// Initializes the object with the default values. + /// + private LocalizedText() + { + m_locale = null; + m_text = null; + } + + + /// + /// Formats the text with the arguments using the specified locale. + /// + public LocalizedText(string key, string locale, string text, params object[] args) + : + this(new TranslationInfo(key, locale, text, args)) + { + } + + /// + /// Creates text from a TranslationInfo object. + /// + public LocalizedText(TranslationInfo translationInfo) + { + if (translationInfo == null) throw new ArgumentNullException(nameof(translationInfo)); + + m_locale = translationInfo.Locale; + m_text = translationInfo.Text; + m_translationInfo = translationInfo; + + if (m_translationInfo.Args == null || m_translationInfo.Args.Length == 0) + { + return; + } + + CultureInfo culture = CultureInfo.InvariantCulture; + + if (!String.IsNullOrEmpty(m_locale)) + { + try + { + culture = new CultureInfo(m_locale); + } + catch + { + culture = CultureInfo.InvariantCulture; + } + } + + try + { + m_text = String.Format(culture, m_translationInfo.Text, m_translationInfo.Args); + } + catch + { + m_text = m_translationInfo.Text; + } + } + + /// + /// Creates a deep copy of the value. + /// + /// + /// Creates a deep copy of the value. + /// + /// The text to create an instance from + /// Thrown when the value is null + public LocalizedText(LocalizedText value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + m_locale = value.m_locale; + m_text = value.m_text; + } + + /// + /// Initializes the object with a text and the default locale. + /// + /// + /// Initializes the object with a text and the default locale. + /// + /// The plain text stored within this object + public LocalizedText(string text) + { + m_locale = null; + m_text = text; + } + + /// + /// Initializes the object with a locale and text. + /// + /// + /// Initializes the object with a locale and text. + /// + /// The locale code applicable for the specified text + /// The text to store + public LocalizedText(string locale, string text) + { + m_locale = locale; + m_text = text; + } + + /// + /// Initializes the locale with a key, locale and text. + /// + /// A key used to look up the text for different locales + /// The locale for the text provides + /// The localized text + public LocalizedText(string key, string locale, string text) + { + m_locale = locale; + m_text = text; + + if (!String.IsNullOrEmpty(key)) + { + m_translationInfo = new TranslationInfo(key, locale, text); + } + } + #endregion + + #region Public Properties + /// + /// The locale used to create the text. + /// + /// + /// The locale used to create the text. + /// + public string Locale => m_locale; + + /// + [DataMember(Name = "Locale", Order = 1)] + internal string XmlEncodedLocale + { + get { return m_locale; } + set { m_locale = value; } + } + + /// + /// The localized text. + /// + /// + /// The localized text. + /// + public string Text => m_text; + + /// + [DataMember(Name = "Text", Order = 2)] + internal string XmlEncodedText + { + get { return m_text; } + set { m_text = value; } + } + + /// + /// A key that can be used to look to the localized text in different locales. + /// + /// + /// This value is used within a process to facilite localization. It is not transmitted on the wire. + /// + public string Key + { + get + { + if (m_translationInfo != null) + { + return m_translationInfo.Key; + } + + return null; + } + + set + { + if (m_translationInfo != null) + { + m_translationInfo.Key = value; + return; + } + + m_translationInfo = new TranslationInfo(value, m_locale, m_text); + } + } + + /// + /// The information required to translate the text into other locales. + /// + public TranslationInfo TranslationInfo + { + get { return m_translationInfo; } + set { m_translationInfo = value; } + } + #endregion + + #region Overridden Methods + /// + /// Returns true if the objects are equal. + /// + /// + /// Returns true if the objects are equal. + /// + /// The object to compare to this + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + LocalizedText ltext = obj as LocalizedText; + + if (ltext == null) + { + return false; + } + + if (ltext.m_locale != m_locale) + { + if (!(String.IsNullOrEmpty(ltext.m_locale) && String.IsNullOrEmpty(m_locale))) + { + return false; + } + } + + return ltext.m_text == m_text; + } + + /// + /// Returns true if the objects are equal. + /// + /// + /// Returns true if the two objects are equal. + /// + /// The first value to compare + /// The second value to compare + public static bool operator ==(LocalizedText value1, LocalizedText value2) + { + if (!Object.ReferenceEquals(value1, null)) + { + return value1.Equals(value2); + } + + return Object.ReferenceEquals(value2, null); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the two objects are not equal. + /// + /// The first value to compare + /// The second value to compare + public static bool operator !=(LocalizedText value1, LocalizedText value2) + { + if (!Object.ReferenceEquals(value1, null)) + { + return !value1.Equals(value2); + } + + return !Object.ReferenceEquals(value2, null); + } + + /// + /// Returns a suitable hash code for the object. + /// + /// + /// Returns a suitable hash code for the object. + /// + public override int GetHashCode() + { + if (m_text != null) + { + return m_text.GetHashCode(); + } + + return 0; + } + + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + /// (Unused). Always pass NULL/NOTHING + /// (Unused). Always pass NULL/NOTHING + /// Thrown if non-null parameters are used + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + return String.Format(formatProvider, "{0}", this.m_text); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// Makes a deep copy of the object. + /// + public new object MemberwiseClone() + { + // this object cannot be altered after it is created so no new allocation is necessary. + return this; + } + #endregion + + #region Static Methods + /// + /// Converts a string to a localized text. + /// + /// + /// Converts a string to a localized text. + /// + /// The string to store as localized text + public static LocalizedText ToLocalizedText(string value) + { + return new LocalizedText(value); + } + + /// + /// Converts a string to a localized text. + /// + /// + /// Converts a string to a localized text. + /// + /// The string to store as localized text + public static implicit operator LocalizedText(string value) + { + return new LocalizedText(value); + } + + /// + /// Returns an instance of a null LocalizedText. + /// + public static LocalizedText Null => s_Null; + + private static readonly LocalizedText s_Null = new LocalizedText(); + + /// + /// Returns true if the text is a null or empty string. + /// + public static bool IsNullOrEmpty(LocalizedText value) + { + if (value == null) + { + return true; + } + + return String.IsNullOrEmpty(value.m_text); + } + #endregion + + #region Private Fields + private string m_locale; + private string m_text; + private TranslationInfo m_translationInfo; + #endregion + } + + #region LocalizedTextCollection Class + /// + /// A collection of LocalizedText objects. + /// + /// + /// A strongly-typed collection of LocalizedText objects. + /// + [CollectionDataContract(Name = "ListOfLocalizedText", Namespace = Namespaces.OpcUaXsd, ItemName = "LocalizedText")] + public partial class LocalizedTextCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public LocalizedTextCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// The collection to copy into this new instance + public LocalizedTextCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The max capacity of this collection + public LocalizedTextCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// Array of localized text values to convert to a collection + public static LocalizedTextCollection ToLocalizedTextCollection(LocalizedText[] values) + { + if (values != null) + { + return new LocalizedTextCollection(values); + } + + return new LocalizedTextCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// Array of localized text values to convert to a collection + public static implicit operator LocalizedTextCollection(LocalizedText[] values) + { + return ToLocalizedTextCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + LocalizedTextCollection clone = new LocalizedTextCollection(this.Count); + + foreach (LocalizedText element in this) + { + clone.Add((LocalizedText)Utils.Clone(element)); + } + + return clone; + } + #endregion + }//class +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/MessageContextExtension.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/MessageContextExtension.cs new file mode 100644 index 00000000..ff49da50 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/MessageContextExtension.cs @@ -0,0 +1,87 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.ServiceModel; + +namespace Opc.Ua +{ + #region MessageContextExtension Class + /// + /// Uses to add the service message context to the WCF operation context. + /// + public class MessageContextExtension : IExtension + { + /// + /// Initializes the object with the message context to use. + /// + public MessageContextExtension(ServiceMessageContext messageContext) + { + m_messageContext = messageContext; + } + + /// + /// Returns the message context associated with the current WCF operation context. + /// + public static MessageContextExtension Current + { + get + { + OperationContext context = OperationContext.Current; + + if (context != null) + { + return OperationContext.Current.Extensions.Find(); + } + + return null; + } + } + + /// + /// Returns the message context associated with the current WCF operation context. + /// + public static ServiceMessageContext CurrentContext + { + get + { + MessageContextExtension extension = MessageContextExtension.Current; + + if (extension != null) + { + return extension.MessageContext; + } + + return ServiceMessageContext.ThreadContext; + } + } + + /// + /// The message context to use. + /// + public ServiceMessageContext MessageContext => m_messageContext; + + #region IExtension Members + /// + public void Attach(OperationContext owner) + { + } + + /// + public void Detach(OperationContext owner) + { + } + #endregion + + private ServiceMessageContext m_messageContext; + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/NodeId.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/NodeId.cs new file mode 100644 index 00000000..f1c3b1b1 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/NodeId.cs @@ -0,0 +1,2745 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization; +using System.Text; + +namespace Opc.Ua +{ + /// + /// Stores an identifier for a node in a server's address space. + /// + /// + /// + /// Please refer to OPC Specifications: + /// + /// Address Space Model setion 7.2 + /// Address Space Model setion 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. + ///
+ ///
+ [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class NodeId : IComparable, IFormattable + { + #region Constructors + #region public NodeId() + + /// + /// Initializes the object with default values. + /// + /// + /// Creates a new instance of the class which will have the default values. The actual + /// Node Id will need to be defined as this constructor does not specify the id. + /// + public NodeId() + { + Initialize(); + } + + #endregion + #region public NodeId(NodeId value) + /// + /// 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(nameof(value)); + + m_namespaceIndex = value.m_namespaceIndex; + m_identifierType = value.m_identifierType; + m_identifier = Utils.Clone(value.m_identifier); + } + #endregion + #region public NodeId(uint value) + /// + /// 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; + m_identifier = value; + } + #endregion + #region public NodeId(uint value, ushort namespaceIndex) + /// + /// 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; + m_identifier = value; + } + + #endregion + + #region public NodeId(string value, ushort namespaceIndex) + /// + /// 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; + m_identifier = value; + } + + #endregion + #region public NodeId(Guid 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(Guid value) + { + m_namespaceIndex = 0; + m_identifierType = IdType.Guid; + m_identifier = value; + } + + #endregion + + #region public NodeId(Guid value, ushort namespaceIndex) + /// + /// 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(Guid value, ushort namespaceIndex) + { + m_namespaceIndex = namespaceIndex; + m_identifierType = IdType.Guid; + m_identifier = value; + } + #endregion + + #region public NodeId(byte[] 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; + m_identifier = null; + + if (value != null) + { + byte[] copy = new byte[value.Length]; + Array.Copy(value, copy, value.Length); + m_identifier = copy; + } + } + + #endregion + #region public NodeId(byte[] value, ushort namespaceIndex) + /// + /// 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; + m_identifier = null; + + if (value != null) + { + byte[] copy = new byte[value.Length]; + Array.Copy(value, copy, value.Length); + m_identifier = copy; + } + } + + #endregion + #region public NodeId(string text) + /// + /// 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_identifier = nodeId.Identifier; + } + + #endregion + + #region public NodeId(object value, ushort namespaceIndex) + /// + /// 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, value); + return; + } + + if (value == null || value is string) + { + SetIdentifier(IdType.String, value); + return; + } + + if (value is Guid) + { + SetIdentifier(IdType.Guid, value); + return; + } + + if (value is Uuid) + { + SetIdentifier(IdType.Guid, value); + return; + } + + if (value is byte[]) + { + SetIdentifier(IdType.Opaque, value); + return; + } + + throw new ArgumentException("Identifier type not supported.", nameof(value)); + } + #endregion + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + private void Initialize() + { + m_namespaceIndex = 0; + m_identifierType = IdType.Numeric; + m_identifier = null; + } + #endregion + + #region Static Members + /// + /// 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, NamespaceTable namespaceTable) + { + int index = -1; + + if (namespaceTable != null) + { + index = namespaceTable.GetIndex(namespaceUri); + } + + if (index < 0) + { + throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "NamespaceUri ({0}) is not in the namespace table.", namespaceUri); + } + + return new NodeId(identifier, (ushort)index); + } + + #region public static implicit operator NodeId(uint value) + /// + /// Converts an integer to a numeric node identifier. + /// + /// + /// Converts an integer to a numeric node identifier for comparissons. + /// + /// + /// + /// + /// //create some variables + /// uint id1 = 100, id2=101; + /// NodeId node1; + /// + /// //create our node + /// node1 = new NodeId(id1); + /// + /// //now to compare the node to the ids using a simple comparisson and Equals: + /// Utils.Trace("Comparing NodeId to uint"); + /// Utils.Trace("\tComparing 100 to 100 = [equals] {0}", node1.Equals(id1)); + /// Utils.Trace("\tComparing 100 to 100 = [ == ] {0}", node1 == id1); + /// Utils.Trace("\tComparing 100 to 101 = [equals] {0}", node1.Equals(id2)); + /// Utils.Trace("\tComparing 100 to 101 = [ == ] {0}", node1 == id2); + /// + /// + /// + /// + /// 'create some variables + /// Dim id1 As UInt = 100 + /// Dim id2 As UInt = 102 + /// Dim node1 As NodeId + /// + /// 'create our node + /// node1 = new NodeId(id1) + /// + /// 'now to compare the node to the ids using a simple comparisson and Equals: + /// Utils.Trace("Comparing NodeId to uint") + /// Utils.Trace( String.Format(" Comparing 100 to 100 = [equals] {0}", node1.Equals(id1)) ) + /// Utils.Trace( String.Format(" Comparing 100 to 100 = [ = ] {0}", node1 = id1) ) + /// Utils.Trace( String.Format(" Comparing 100 to 101 = [equals] {0}", node1.Equals(id2)) ) + /// Utils.Trace( String.Format(" Comparing 100 to 101 = [ = ] {0}", node1 = id2) ) + /// + /// + /// + /// This produces the following output (taken from C# example): + ///
+ /// + /// Comparing NodeId to uint
+ /// Comparing 100 to 100 = [equals] True
+ /// Comparing 100 to 100 = [ == ] True
+ /// Comparing 100 to 101 = [equals] False
+ /// Comparing 100 to 101 = [ == ] False
+ ///
+ ///
+ /// The to compare this node to. + public static implicit operator NodeId(uint value) + { + return new NodeId(value); + } + + #endregion + #region public static implicit operator NodeId(Guid value) + /// + /// Converts a guid to a guid node identifier. + /// + /// + /// Converts a NodeId into a Guid allowing you to compare a Node against a Guid. + /// + /// + /// + /// + /// //define our 2 GUID ids, and then define our node to use the first id. + /// Guid id1 = Guid.NewGuid(), id2 = Guid.NewGuid(); + /// NodeId node1 = new NodeId(id1); + /// + /// //now to compare the node to the guids + /// Utils.Trace("\n\nComparing NodeId to GUID"); + /// Utils.Trace("\tComparing {0} to {0} = [equals] {2}", id1, id1, node1.Equals(id1)); + /// Utils.Trace("\tComparing {0} to {0} = [ == ] {2}", id1, id1, node1 == id1); + /// Utils.Trace("\tComparing {0} to {1} = [equals] {2}", id1, id2, node1.Equals(id2)); + /// Utils.Trace("\tComparing {0} to {1} = [ == ] {2}", id1, id2, node1 == id2); + /// + /// + /// + /// + /// 'define our 2 GUID ids, and then define our node to use the first id. + /// Dim id1 As Guid = Guid.NewGuid() + /// Dim id2 As Guid = Guid.NewGuid() + /// Dim node1 As NodeId = new NodeId(id1) + /// + /// 'now to compare the node to the guids + /// Utils.Trace("Comparing NodeId to GUID") + /// Utils.Trace( String.Format( " Comparing {0} to {0} = [equals] {2}", id1, id1, node1.Equals(id1)) ); + /// Utils.Trace( String.Format( " Comparing {0} to {0} = [ = ] {2}", id1, id1, node1 = id1) ); + /// Utils.Trace( String.Format( " Comparing {0} to {0} = [equals] {2}", id1, id2, node1.Equals(id2)) ); + /// Utils.Trace( String.Format( " Comparing {0} to {0} = [ = ] {2}", id1, id2, node1 = id2) ); + /// + /// + /// + /// This produces the following output (taken from C# example): + ///
+ /// + /// Comparing NodeId to GUID
+ /// Comparing bbe8b5f2-0f50-4302-877f-346afb07704c to bbe8b5f2-0f50-4302-877f-346afb07704c = [equals] True
+ /// Comparing bbe8b5f2-0f50-4302-877f-346afb07704c to bbe8b5f2-0f50-4302-877f-346afb07704c = [ = ] True
+ /// Comparing bbe8b5f2-0f50-4302-877f-346afb07704c to e707de86-4c11-4fe6-94b2-83638a9427e6 = [equals] False
+ /// Comparing bbe8b5f2-0f50-4302-877f-346afb07704c to e707de86-4c11-4fe6-94b2-83638a9427e6 = [ = ] False
+ ///
+ ///
+ /// The to compare this node to. + public static implicit operator NodeId(Guid value) + { + return new NodeId(value); + } + + #endregion + #region public static implicit operator NodeId(byte[] value) + /// + /// Converts a byte array to an opaque node identifier. + /// + /// + /// This operator allows you to compare a NodeId to an array of Bytes. + /// + /// + /// + /// + /// //define our 2 Byte[] ids, and then define our node to use the first id. + /// byte[] id1 = new byte[] { 65, 66, 67, 68, 69 }; + /// byte[] id2 = new byte[] { 97, 98, 99, 100, 101 }; + /// NodeId node1 = new NodeId(id1); + /// + /// //convert our bytes to string so we can display them + /// string id1String = System.Text.ASCIIEncoding.ASCII.GetString(id1); + /// string id2String = System.Text.ASCIIEncoding.ASCII.GetString(id2); + /// + /// //now to compare the node to the guids + /// Utils.Trace("\n\nComparing NodeId to Byte[]"); + /// Utils.Trace("\tComparing {0} to {0} = [equals] {2}", id1String, id1String, node1.Equals(id1)); + /// Utils.Trace("\tComparing {0} to {0} = [ = ] {2}", id1String, id1String, node1 == id1); + /// Utils.Trace("\tComparing {0} to {1} = [equals] {2}", id1String, id2String, node1.Equals(id2)); + /// Utils.Trace("\tComparing {0} to {1} = [ = ] {2}", id1String, id2String, node1 == id2); + /// + /// + /// + /// + /// 'define our 2 Byte[] ids, and then define our node to use the first id. + /// Dim id1 As Byte() = New Byte() { 65, 66, 67, 68, 69 } + /// Dim id2 As Byte() = New Byte() { 97, 98, 99, 100, 101 } + /// Dim node1 As NodeId = New NodeId(id1) + /// + /// 'convert our bytes to string so we can display them + /// Dim id1String As String = System.Text.ASCIIEncoding.ASCII.GetString(id1) + /// Dim id2String As String = System.Text.ASCIIEncoding.ASCII.GetString(id2) + /// + /// 'now to compare the node to the guids + /// Utils.Trace("Comparing NodeId to Byte()") + /// Utils.Trace( String.Format("Comparing {0} to {0} = [equals] {2}", id1String, id1String, node1.Equals(id1)) ) + /// Utils.Trace( String.Format("Comparing {0} to {0} = [ = ] {2}", id1String, id1String, node1 = id1) ) + /// Utils.Trace( String.Format("Comparing {0} to {1} = [equals] {2}", id1String, id2String, node1.Equals(id2)) ) + /// Utils.Trace( String.Format("Comparing {0} to {1} = [ = ] {2}", id1String, id2String, node1 = id2) ) + /// + /// + /// + /// This produces the following output (taken from C# example): + ///
+ /// + /// Comparing NodeId to Byte[] + /// Comparing ABCDE to ABCDE = [equals] True + /// Comparing ABCDE to ABCDE = [ == ] True + /// Comparing ABCDE to abcde = [equals] False + /// Comparing ABCDE to abcde = [ == ] False + ///
+ ///
+ /// The [] array to compare this node to + public static implicit operator NodeId(byte[] value) + { + return new NodeId(value); + } + + #endregion + #region public static implicit operator NodeId(string text) + /// + /// Parses a node id string and initializes a node id. + /// + /// + /// Compares a Node to a String + /// + /// + /// + /// + /// //define our 2 String ids, and then define our node to use the first id. + /// String id1 = "Hello", id2 = "World"; + /// NodeId node1 = new NodeId(id1); + /// + /// //now to compare the node to the guids + /// Utils.Trace("\n\nComparing NodeId to String"); + /// Utils.Trace("\tComparing {0} to {0} = [equals] {2}", id1, id1, node1.Equals(id1)); + /// Utils.Trace("\tComparing {0} to {0} = [ == ] {2}", id1, id1, node1 == id1); + /// Utils.Trace("\tComparing {0} to {1} = [equals] {2}", id1, id2, node1.Equals(id2)); + /// Utils.Trace("\tComparing {0} to {1} = [ == ] {2}", id1, id2, node1 == id2); + /// + /// + /// + /// + /// + /// 'define our 2 String ids, and then define our node to use the first id. + /// Dim id1 As String = "Hello" + /// Dim id2 As String = "World" + /// Dim node1 As NodeId = New NodeId(id1) + /// + /// 'now to compare the node to the guids + /// Utils.Trace("Comparing NodeId to String"); + /// Utils.Trace(String.Format("Comparing {0} to {0} = [equals] {2}", id1, id1, node1.Equals(id1))); + /// Utils.Trace(String.Format("Comparing {0} to {0} = [ = ] {2}", id1, id1, node1 = id1)); + /// Utils.Trace(String.Format("Comparing {0} to {1} = [equals] {2}", id1, id2, node1.Equals(id2))); + /// Utils.Trace(String.Format("Comparing {0} to {1} = [ = ] {2}", id1, id2, node1 = id2)); + /// + /// + /// + /// The to compare this node to. + public static implicit operator NodeId(string text) + { + return NodeId.Parse(text); + } + + #endregion + #region public static bool IsNull(NodeId 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; + } + + #endregion + #region public static bool IsNull(ExpandedNodeId nodeId) + /// + /// Checks if the node id represents a 'Null' node id. + /// + /// + /// Returns a true/false to indicate if the specified is null. + /// + /// The ExpandedNodeId to validate + public static bool IsNull(ExpandedNodeId nodeId) + { + if (nodeId == null) + { + return true; + } + + return nodeId.IsNull; + } + #endregion + #region public static NodeId Parse(string text) + /// + /// 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(StatusCodes.BadNodeIdInvalid, "Invalid namespace index."); + } + + 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 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( + StatusCodes.BadNodeIdInvalid, + Utils.Format("Cannot parse node id text: '{0}'", text), + e); + } + } + #endregion + + /// + /// Returns an instance of a null NodeId. + /// + public static NodeId Null => s_Null; + + private static readonly NodeId s_Null = new NodeId(); + #endregion + + #region Public Methods (and some Internals) + + #region public string 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, m_identifier, 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: + { + buffer.Append("i="); + break; + } + + case IdType.String: + { + buffer.Append("s="); + break; + } + + case IdType.Guid: + { + buffer.Append("g="); + break; + } + + case IdType.Opaque: + { + buffer.Append("b="); + break; + } + } + + // add identifier. + FormatIdentifier(buffer, identifier, identifierType); + } + #endregion + + #region public override string ToString() + + /// + /// Returns the string representation of a NodeId. + /// + /// + /// Returns the Node represented as a String. This is the same as calling + /// . + /// + public override string ToString() + { + return ToString(null, null); + } + + #endregion + #region public static ExpandedNodeId ToExpandedNodeId(NodeId nodeId, NamespaceTable namespaceTable) + /// + /// Converts an node id to an expanded node id using a namespace table. + /// + /// + /// Returns an ExpandedNodeId based on the NodeId requested in the parameters. If the namespaceTable + /// is specified then the relevant namespace will be returned from the namespaceTable collection which is + /// also passed in as a parameter. + /// + /// null, if the nodeId parameter is null. Otherwise an ExpandedNodeId will be returned for the specified nodeId + /// The NodeId to return, wrapped in within the ExpandedNodeId. + /// The namespace tables collection that may be used to retrieve the namespace from that the specified NodeId belongs to + public static ExpandedNodeId ToExpandedNodeId(NodeId nodeId, NamespaceTable namespaceTable) + { + if (nodeId == null) + { + return null; + } + + ExpandedNodeId expandedId = new ExpandedNodeId(nodeId); + + if (nodeId.NamespaceIndex > 0) + { + string uri = namespaceTable.GetString(nodeId.NamespaceIndex); + + if (uri != null) + { + expandedId.SetNamespaceUri(uri); + } + } + + return expandedId; + } + + #endregion + /// + /// 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: + { + m_identifier = Utils.Clone(value); + break; + } + + default: + { + m_identifier = value; + break; + } + } + } + + /// + /// Updates the identifier. + /// + internal void SetIdentifier(string value, IdType idType) + { + m_identifierType = idType; + SetIdentifier(IdType.String, value); + } + + #endregion + + #region IComparable Members + + #region public int CompareTo(object obj) + /// + /// Compares the current instance to the object. + /// + /// + /// Enables this object type to be compared to other types of object. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + 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 (!Object.ReferenceEquals(nodeId, null)) + { + namespaceIndex = nodeId.NamespaceIndex; + idType = nodeId.IdType; + id = nodeId.Identifier; + } + else + { + UInt32? uid = obj as UInt32?; + + // check for numeric contants. + if (uid != null) + { + if (namespaceIndex != 0 || idType != IdType.Numeric) + { + return -1; + } + + uint id1 = (uint)m_identifier; + 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.Identifier; + } + } + + // 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 (m_identifier == null && id == null) + { + return 0; + } + + // check for a single null. + if (m_identifier == null && id != null) + { + switch (idType) + { + case IdType.String: + { + string stringId = id as string; + + if (stringId.Length == 0) + { + return 0; + } + + break; + } + + case IdType.Opaque: + { + byte[] opaqueId = id as byte[]; + + if (opaqueId.Length == 0) + { + return 0; + } + + break; + } + + case IdType.Numeric: + { + uint? numericId = id as uint?; + + if (numericId.Value == 0) + { + return 0; + } + + break; + } + } + + return -1; + } + + // check for a single null. + if (m_identifier != null && id == null) + { + switch (idType) + { + case IdType.String: + { + string stringId = m_identifier as string; + + if (stringId.Length == 0) + { + return 0; + } + + break; + } + + case IdType.Opaque: + { + byte[] opaqueId = m_identifier as byte[]; + + if (opaqueId.Length == 0) + { + return 0; + } + + break; + } + + case IdType.Numeric: + { + uint? numericId = m_identifier as uint?; + + if (numericId.Value == 0) + { + return 0; + } + + break; + } + } + + return +1; + } + + // compare ids. + switch (idType) + { + case IdType.Numeric: + { + uint id1 = (uint)m_identifier; + uint id2 = (uint)id; + + if (id1 == id2) + { + return 0; + } + + return (id1 < id2) ? -1 : +1; + } + + case IdType.String: + { + string id1 = (string)m_identifier; + string id2 = (string)id; + return String.CompareOrdinal(id1, id2); + } + + case IdType.Guid: + { + Guid id1 = (Guid)m_identifier; + if (id is Uuid) + { + return id1.CompareTo((Uuid)id); + } + return id1.CompareTo((Guid)id); + } + + case IdType.Opaque: + { + byte[] id1 = (byte[])m_identifier; + 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 + #region public static bool operator>(NodeId value1, NodeId value2) + /// + /// Returns true if a is greater than b. + /// + /// + /// Returns true if a is greater than b. + /// + public static bool operator >(NodeId value1, NodeId value2) + { + if (!Object.ReferenceEquals(value1, null)) + { + return value1.CompareTo(value2) > 0; + } + + return false; + } + + #endregion + #region public static bool operator<(NodeId value1, NodeId value2) + /// + /// Returns true if a is less than b. + /// + /// + /// Returns true if a is less than b. + /// + public static bool operator <(NodeId value1, NodeId value2) + { + if (!Object.ReferenceEquals(value1, null)) + { + return value1.CompareTo(value2) < 0; + } + + return true; + } + #endregion + + #endregion + + #region IFormattable Members + + #region public string ToString(string format, IFormatProvider formatProvider) + /// + /// 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(Utils.Format("Invalid format string: '{0}'.", format)); + } + + #endregion + + #endregion + + /// + /// Makes a deep copy of the object. + /// + /// + /// Returns a copy of this object. + /// + public new object MemberwiseClone() + { + // this object cannot be altered after it is created so no new allocation is necessary. + return this; + } + + #region Comparison Functions + + #region public override bool Equals(object obj) + /// + /// Determines if the specified object is equal to the NodeId. + /// + /// + /// Returns a true/false if the specified NodeId is the same as this NodeId. + /// + /// The object (NodeId or ExpandedNodeId is desired) to compare to + public override bool Equals(object obj) + { + return (CompareTo(obj) == 0); + } + + #endregion + #region public override int GetHashCode() + /// + /// Returns a unique hashcode for the NodeId + /// + /// + /// Returns a unique hashcode for the NodeId + /// + public override int GetHashCode() + { + if (m_identifier == null) + { + return 0; + } + + if (m_identifierType == IdType.Opaque) + { + byte[] id = (byte[])m_identifier; + + int hash = id.Length; + + for (int ii = 0; ii < 16 && ii < id.Length; ii++) + { + hash <<= 1; + hash += id[ii]; + + if (id.Length - ii >= 1) + { + hash += (id[id.Length - ii - 1] << 16); + } + } + + return hash; + } + + return m_identifier.GetHashCode(); + } + + #endregion + #region public static bool operator==(NodeId a, object b) + /// + /// 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); + } + + #endregion + #region public static bool operator!=(NodeId value1, object value2) + /// + /// 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); + } + + + #endregion + + #endregion + + #region Public Properties + + #region internal string IdentifierText + /// + /// The node identifier formatted as a URI. + /// + /// + /// The node identifier formatted as a URI. + /// + [DataMember(Name = "Identifier", Order = 1)] + internal string IdentifierText + { + get + { + return Format(); + } + set + { + NodeId nodeId = NodeId.Parse(value); + + m_namespaceIndex = nodeId.NamespaceIndex; + m_identifierType = nodeId.IdType; + m_identifier = nodeId.Identifier; + } + } + + #endregion + #region public ushort NamespaceIndex + /// + /// 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; + + #endregion + #region public IdType IdType + /// + /// The type of node identifier used. + /// + /// + /// Returns the type of Id, whether it is: + /// + /// + /// + /// + /// [] + /// + /// + /// + public IdType IdType => m_identifierType; + + #endregion + #region public object Identifier + /// + /// The node identifier. + /// + /// + /// Returns the Id in its native format, i.e. UInt, GUID, String etc. + /// + public object Identifier + { + get + { + if (m_identifier == null) + { + switch (m_identifierType) + { + case IdType.Numeric: { return (uint)0; } + case IdType.Guid: { return Guid.Empty; } + } + } + + return m_identifier; + } + } + + #endregion + #region public bool IsNull + /// + /// 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 (m_identifier != null) + { + switch (m_identifierType) + { + case IdType.Numeric: + { + if (!m_identifier.Equals((uint)0)) + { + return false; + } + + break; + } + + case IdType.String: + { + if (!String.IsNullOrEmpty((string)m_identifier)) + { + return false; + } + + break; + } + + case IdType.Guid: + { + if (!m_identifier.Equals(Guid.Empty)) + { + return false; + } + + break; + } + + case IdType.Opaque: + { + if (m_identifier != null && ((byte[])m_identifier).Length > 0) + { + return false; + } + + break; + } + } + } + + // must be null. + return true; + } + } + + #endregion + + #endregion + + #region Private Methods + /// + /// Compares two node identifiers. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private static int CompareIdentifiers(IdType idType1, object id1, IdType idType2, object id2) + { + if (id1 == null && id2 == null) + { + return 0; + } + + if (idType1 != idType2) + { + return idType1.CompareTo(idType2); + } + + if (id1 == null || id2 == null) + { + object nonNull = id1; + + if (id1 == null) + { + nonNull = id2; + } + + switch (idType1) + { + case IdType.Numeric: + { + if (nonNull is uint && (uint)nonNull == 0) + { + return 0; + } + + break; + } + + case IdType.Guid: + { + if (nonNull is Guid && (Guid)nonNull == Guid.Empty) + { + return 0; + } + + break; + } + + case IdType.String: + { + string text = nonNull as string; + + if (text != null && text.Length == 0) + { + return 0; + } + + break; + } + + case IdType.Opaque: + { + byte[] bytes = nonNull as byte[]; + + if (bytes != null && bytes.Length == 0) + { + return 0; + } + + break; + } + } + + return (id1 == null) ? -1 : +1; + } + + byte[] bytes1 = id1 as byte[]; + + if (bytes1 != null) + { + byte[] bytes2 = id2 as byte[]; + + if (bytes2 == null) + { + return +1; + } + + if (bytes1.Length != bytes2.Length) + { + return bytes1.Length.CompareTo(bytes2.Length); + } + + for (int ii = 0; ii < bytes1.Length; ii++) + { + int result = bytes1[ii].CompareTo(bytes2[ii]); + + if (result != 0) + { + return result; + } + } + + // both arrays are equal. + return 0; + } + + IComparable comparable1 = id1 as IComparable; + + if (comparable1 != null) + { + return comparable1.CompareTo(id2); + } + + return String.CompareOrdinal(id1.ToString(), id2.ToString()); + } + + /// + /// Formats a node id as a string. + /// + private static void FormatIdentifier(StringBuilder buffer, object identifier, IdType identifierType) + { + switch (identifierType) + { + case IdType.Numeric: + { + if (identifier == null) + { + buffer.Append('0'); + break; + } + + buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", identifier); + break; + } + + case IdType.String: + { + buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", identifier); + break; + } + + case IdType.Guid: + { + if (identifier == null) + { + buffer.Append(Guid.Empty); + break; + } + + buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", identifier); + break; + } + + case IdType.Opaque: + { + if (identifier != null) + { + buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", Convert.ToBase64String((byte[])identifier)); + } + + break; + } + } + } + + #endregion + + #region Private Fields + private ushort m_namespaceIndex; + private IdType m_identifierType; + private object m_identifier; + #endregion + } + + #region NodeIdCollection Class + /// + /// A collection of NodeIds. + /// + /// + /// Provides a strongly-typed collection of . + /// + [CollectionDataContract(Name = "ListOfNodeId", Namespace = Namespaces.OpcUaXsd, ItemName = "NodeId")] + public partial class NodeIdCollection : List + { + + #region CTORs + + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public NodeIdCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Creates a new collection based on the referenced collection. + /// + /// The existing collection to use as the basis of creating this collection + public NodeIdCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Creates a new collection while specifying the max size of the collection. + /// + /// The max. capacity of the collection + public NodeIdCollection(int capacity) : base(capacity) { } + + #endregion + + #region public static NodeIdCollection ToNodeIdCollection(NodeId[] values) + /// + /// Converts an array to a collection. + /// + /// + /// A quick-use method that will take an array of objects and will + /// return them within a . + /// + /// An array of to add to the collection + /// A containing the 's added via the parameters + public static NodeIdCollection ToNodeIdCollection(NodeId[] values) + { + if (values != null) + { + return new NodeIdCollection(values); + } + + return new NodeIdCollection(); + } + + #endregion + #region public static implicit operator NodeIdCollection(NodeId[] values) + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// An array of objects to compare + public static implicit operator NodeIdCollection(NodeId[] values) + { + return ToNodeIdCollection(values); + } + + #endregion + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + NodeIdCollection clone = new NodeIdCollection(this.Count); + + foreach (NodeId element in this) + { + clone.Add((NodeId)Utils.Clone(element)); + } + + return clone; + } + }//class + #endregion + + /// + /// A dictionary designed to provide efficient lookups for objects identified by a NodeId + /// + public class NodeIdDictionary : IDictionary + { + #region Constructors + /// + /// Creates an empty dictionary. + /// + public NodeIdDictionary() + { + m_version = 0; + m_numericIds = new SortedDictionary(); + } + #endregion + + #region IDictionary Members + /// + public void Add(NodeId key, T value) + { + if (key == null) + { + throw new ArgumentNullException(nameof(key)); + } + + m_version++; + + switch (key.IdType) + { + case IdType.Numeric: + { + ulong id = ((ulong)key.NamespaceIndex) << 32; + id += (uint)key.Identifier; + m_numericIds.Add(id, value); + return; + } + + case IdType.String: + { + IDictionary dictionary = GetStringDictionary(key.NamespaceIndex, true); + dictionary.Add((string)key.Identifier, value); + return; + } + + case IdType.Guid: + { + IDictionary dictionary = GetGuidDictionary(key.NamespaceIndex, true); + dictionary.Add((Guid)key.Identifier, value); + return; + } + + case IdType.Opaque: + { + IDictionary dictionary = GetOpaqueDictionary(key.NamespaceIndex, true); + dictionary.Add(new NodeIdDictionary.ByteKey((byte[])key.Identifier), value); + return; + } + } + + throw new ArgumentOutOfRangeException(nameof(key), "key.IdType"); + } + + /// + public bool ContainsKey(NodeId key) + { + if (key == null) + { + return false; + } + + switch (key.IdType) + { + case IdType.Numeric: + { + ulong id = ((ulong)key.NamespaceIndex) << 32; + id += (uint)key.Identifier; + return m_numericIds.ContainsKey(id); + } + + case IdType.String: + { + IDictionary dictionary = GetStringDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.ContainsKey((string)key.Identifier); + } + + break; + } + + case IdType.Guid: + { + IDictionary dictionary = GetGuidDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.ContainsKey((Guid)key.Identifier); + } + + break; + } + + case IdType.Opaque: + { + IDictionary dictionary = GetOpaqueDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.ContainsKey(new ByteKey((byte[])key.Identifier)); + } + + break; + } + } + + return false; + } + + /// + public ICollection Keys + { + get + { + List keys = new List(); + + foreach (ulong id in m_numericIds.Keys) + { + keys.Add(new NodeId((uint)(id & 0xFFFFFFFF), (ushort)((id >> 32) & 0xFFFF))); + } + + if (m_dictionarySets == null) + { + return keys; + } + + for (ushort ii = 0; ii < (ushort)m_dictionarySets.Length; ii++) + { + DictionarySet dictionarySet = m_dictionarySets[ii]; + + if (dictionarySet == null) + { + continue; + } + + if (dictionarySet.String != null) + { + foreach (string id in dictionarySet.String.Keys) + { + keys.Add(new NodeId(id, ii)); + } + } + + if (dictionarySet.Guid != null) + { + foreach (Guid id in dictionarySet.Guid.Keys) + { + keys.Add(new NodeId(id, ii)); + } + } + + if (dictionarySet.Opaque != null) + { + foreach (ByteKey id in dictionarySet.Opaque.Keys) + { + keys.Add(new NodeId(id.Bytes, ii)); + } + } + } + + return keys; + } + } + + /// + public bool Remove(NodeId key) + { + if (key == null) + { + return false; + } + + m_version++; + + switch (key.IdType) + { + case IdType.Numeric: + { + ulong id = ((ulong)key.NamespaceIndex) << 32; + id += (uint)key.Identifier; + return m_numericIds.Remove(id); + } + + case IdType.String: + { + IDictionary dictionary = GetStringDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.Remove((string)key.Identifier); + } + + break; + } + + case IdType.Guid: + { + IDictionary dictionary = GetGuidDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.Remove((Guid)key.Identifier); + } + + break; + } + + case IdType.Opaque: + { + IDictionary dictionary = GetOpaqueDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.Remove(new ByteKey((byte[])key.Identifier)); + } + + break; + } + } + + return false; + } + + /// + public bool TryGetValue(NodeId key, out T value) + { + value = default(T); + + if (key == null) + { + return false; + } + + switch (key.IdType) + { + case IdType.Numeric: + { + ulong id = ((ulong)key.NamespaceIndex) << 32; + id += (uint)key.Identifier; + return m_numericIds.TryGetValue(id, out value); + } + + case IdType.String: + { + IDictionary dictionary = GetStringDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.TryGetValue((string)key.Identifier, out value); + } + + break; + } + + case IdType.Guid: + { + IDictionary dictionary = GetGuidDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.TryGetValue((Guid)key.Identifier, out value); + } + + break; + } + + case IdType.Opaque: + { + IDictionary dictionary = GetOpaqueDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary.TryGetValue(new ByteKey((byte[])key.Identifier), out value); + } + + break; + } + } + + return false; + } + + /// + public ICollection Values + { + get + { + List values = new List(); + values.AddRange(m_numericIds.Values); + + if (m_dictionarySets == null) + { + return values; + } + + for (int ii = 0; ii < m_dictionarySets.Length; ii++) + { + DictionarySet dictionarySet = m_dictionarySets[ii]; + + if (dictionarySet == null) + { + continue; + } + + if (dictionarySet.String != null) + { + values.AddRange(dictionarySet.String.Values); + } + + if (dictionarySet.Guid != null) + { + values.AddRange(dictionarySet.Guid.Values); + } + + if (dictionarySet.Opaque != null) + { + values.AddRange(dictionarySet.Opaque.Values); + } + } + + return values; + } + } + + /// + /// Gets or sets the value with the specified NodeId. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] + public T this[NodeId key] + { + get + { + if (key == null) + { + throw new ArgumentNullException(nameof(key)); + } + + switch (key.IdType) + { + case IdType.Numeric: + { + ulong id = ((ulong)key.NamespaceIndex) << 32; + id += (uint)key.Identifier; + return m_numericIds[id]; + } + + case IdType.String: + { + IDictionary dictionary = GetStringDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary[(string)key.Identifier]; + } + + break; + } + + case IdType.Guid: + { + IDictionary dictionary = GetGuidDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary[(Guid)key.Identifier]; + } + + break; + } + + case IdType.Opaque: + { + IDictionary dictionary = GetOpaqueDictionary(key.NamespaceIndex, false); + + if (dictionary != null) + { + return dictionary[new ByteKey((byte[])key.Identifier)]; + } + + break; + } + } + + throw new KeyNotFoundException(); + } + + set + { + if (key == null) + { + throw new ArgumentNullException(nameof(key)); + } + + m_version++; + + switch (key.IdType) + { + case IdType.Numeric: + { + ulong id = ((ulong)key.NamespaceIndex) << 32; + id += (uint)key.Identifier; + m_numericIds[id] = value; + return; + } + + case IdType.String: + { + IDictionary dictionary = GetStringDictionary(key.NamespaceIndex, true); + dictionary[(string)key.Identifier] = value; + return; + } + + case IdType.Guid: + { + IDictionary dictionary = GetGuidDictionary(key.NamespaceIndex, true); + dictionary[(Guid)key.Identifier] = value; + return; + } + + case IdType.Opaque: + { + IDictionary dictionary = GetOpaqueDictionary(key.NamespaceIndex, true); + dictionary[new ByteKey((byte[])key.Identifier)] = value; + return; + } + } + + throw new ArgumentOutOfRangeException(nameof(key), "key.IdType"); + } + } + #endregion + + #region ICollection> Members + /// + public void Add(KeyValuePair item) + { + Add(item.Key, item.Value); + } + + /// + public void Clear() + { + m_version++; + m_numericIds.Clear(); + m_dictionarySets = null; + } + + /// + public bool Contains(KeyValuePair item) + { + T value; + + if (!TryGetValue(item.Key, out value)) + { + return false; + } + + return Object.Equals(value, item.Value); + } + + /// + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + if (array == null) + { + throw new ArgumentNullException(nameof(array)); + } + + if (arrayIndex < 0 || array.Length <= arrayIndex) + { + throw new ArgumentOutOfRangeException(nameof(arrayIndex), "arrayIndex < 0 || array.Length <= arrayIndex"); + } + + foreach (KeyValuePair entry in m_numericIds) + { + CheckCopyTo(array, arrayIndex); + + array[arrayIndex++] = new KeyValuePair( + new NodeId((uint)(entry.Key & 0xFFFFFFFF), (ushort)((entry.Key >> 32) & 0xFFFF)), + entry.Value); + } + + if (m_dictionarySets == null) + { + return; + } + + for (int ii = 0; ii < m_dictionarySets.Length; ii++) + { + DictionarySet dictionarySet = m_dictionarySets[ii]; + + if (dictionarySet == null) + { + continue; + } + + if (dictionarySet.String != null) + { + foreach (KeyValuePair entry in dictionarySet.String) + { + CheckCopyTo(array, arrayIndex); + array[arrayIndex++] = new KeyValuePair(new NodeId(entry.Key, (ushort)ii), entry.Value); + } + } + + if (dictionarySet.Guid != null) + { + foreach (KeyValuePair entry in dictionarySet.Guid) + { + CheckCopyTo(array, arrayIndex); + array[arrayIndex++] = new KeyValuePair(new NodeId(entry.Key, (ushort)ii), entry.Value); + } + } + + if (dictionarySet.Opaque != null) + { + foreach (KeyValuePair entry in dictionarySet.Opaque) + { + CheckCopyTo(array, arrayIndex); + array[arrayIndex++] = new KeyValuePair(new NodeId(entry.Key.Bytes, (ushort)ii), entry.Value); + } + } + } + } + + /// + /// Checks that there is enough space in the array. + /// + private static void CheckCopyTo(KeyValuePair[] array, int arrayIndex) + { + if (arrayIndex >= array.Length) + { + throw new ArgumentException("Not enough space in array.", nameof(array)); + } + } + + /// + public int Count + { + get + { + int count = m_numericIds.Count; + + if (m_dictionarySets == null) + { + return count; + } + + for (int ii = 0; ii < m_dictionarySets.Length; ii++) + { + DictionarySet dictionarySet = m_dictionarySets[ii]; + + if (dictionarySet == null) + { + continue; + } + + if (dictionarySet.String != null) + { + count += dictionarySet.String.Count; + } + + if (dictionarySet.Guid != null) + { + count += dictionarySet.Guid.Count; + } + + if (dictionarySet.Opaque != null) + { + count += dictionarySet.Opaque.Count; + } + } + + return count; + } + } + + /// + public bool IsReadOnly => false; + + /// + public bool Remove(KeyValuePair item) + { + return Remove(item.Key); + } + #endregion + + #region IEnumerable> Members + /// + public IEnumerator> GetEnumerator() + { + return new Enumerator(this); + } + #endregion + + #region IEnumerable Members + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + #endregion + + #region Private Methods + /// + /// Returns the dictionary set for the specified namespace. + /// + private DictionarySet GetDictionarySet(ushort namespaceIndex, bool create) + { + if (m_dictionarySets == null || m_dictionarySets.Length <= namespaceIndex) + { + if (!create) + { + return null; + } + + DictionarySet[] dictionarySets = new NodeIdDictionary.DictionarySet[namespaceIndex + 1]; + + if (m_dictionarySets != null) + { + Array.Copy(m_dictionarySets, dictionarySets, m_dictionarySets.Length); + } + + m_dictionarySets = dictionarySets; + } + + DictionarySet dictionarySet = m_dictionarySets[namespaceIndex]; + + if (dictionarySet == null) + { + if (!create) + { + return null; + } + + m_dictionarySets[namespaceIndex] = dictionarySet = new NodeIdDictionary.DictionarySet(); + } + + return dictionarySet; + } + + /// + /// Returns the dictionary set for String identifiers in the specified namespace. + /// + private IDictionary GetStringDictionary(ushort namespaceIndex, bool create) + { + DictionarySet dictionarySet = GetDictionarySet(namespaceIndex, create); + + if (dictionarySet == null) + { + return null; + } + + IDictionary dictionary = dictionarySet.String; + + if (dictionary == null) + { + if (!create) + { + return null; + } + + dictionary = dictionarySet.String = new SortedDictionary(); + } + + return dictionary; + } + + /// + /// Returns the dictionary set for Guid identifiers in the specified namespace. + /// + private IDictionary GetGuidDictionary(ushort namespaceIndex, bool create) + { + DictionarySet dictionarySet = GetDictionarySet(namespaceIndex, create); + + if (dictionarySet == null) + { + return null; + } + + IDictionary dictionary = dictionarySet.Guid; + + if (dictionary == null) + { + if (!create) + { + return null; + } + + dictionary = dictionarySet.Guid = new SortedDictionary(); + } + + return dictionary; + } + + /// + /// Returns the dictionary set for Opaque identifiers in the specified namespace. + /// + private IDictionary GetOpaqueDictionary(ushort namespaceIndex, bool create) + { + DictionarySet dictionarySet = GetDictionarySet(namespaceIndex, create); + + if (dictionarySet == null) + { + return null; + } + + IDictionary dictionary = dictionarySet.Opaque; + + if (dictionary == null) + { + if (!create) + { + return null; + } + + dictionary = dictionarySet.Opaque = new SortedDictionary(); + } + + return dictionary; + } + #endregion + + #region DictionarySet Class + /// + /// Stores the dictionaries for a single namespace index. + /// + private class DictionarySet + { + public SortedDictionary String; + public SortedDictionary Guid; + public SortedDictionary Opaque; + } + #endregion + + #region ByteKey Class + /// + /// Wraps a byte array for use as a key in a dictionary. + /// + private struct ByteKey : IEquatable, IComparable + { + #region Public Interface + /// + /// Initializes the key with an array of bytes. + /// + public ByteKey(byte[] bytes) + { + Bytes = bytes; + } + + /// + /// The array of bytes. + /// + public byte[] Bytes; + #endregion + + #region IEquatable Members + /// + public bool Equals(ByteKey other) + { + if (other.Bytes == null || Bytes == null) + { + return (other.Bytes == null && Bytes == null); + } + + if (other.Bytes.Length != Bytes.Length) + { + return false; + } + + for (int ii = 0; ii < other.Bytes.Length; ii++) + { + if (other.Bytes[ii] != Bytes[ii]) + { + return false; + } + } + + return false; + } + #endregion + + #region IComparable Members + /// + public int CompareTo(ByteKey other) + { + if (other.Bytes == null || Bytes == null) + { + return (other.Bytes == null) ? +1 : -1; + } + + if (other.Bytes.Length != Bytes.Length) + { + return (other.Bytes.Length < Bytes.Length) ? +1 : -1; + } + + for (int ii = 0; ii < other.Bytes.Length; ii++) + { + if (other.Bytes[ii] != Bytes[ii]) + { + return (other.Bytes[ii] < Bytes[ii]) ? +1 : -1; + } + } + + return 0; + } + #endregion + } + #endregion + + #region Enumerator Class + /// + /// The enumerator for the node dictionary. + /// + private class Enumerator : IEnumerator> + { + #region Constructors + /// + /// Constructs the enumerator for the specified dictionary. + /// + public Enumerator(NodeIdDictionary dictionary) + { + m_dictionary = dictionary; + m_version = dictionary.m_version; + m_idType = 0; + m_namespaceIndex = 0; + } + #endregion + + #region IEnumerator> Members + /// + public KeyValuePair Current + { + get + { + CheckVersion(); + + if (m_enumerator == null) + { + throw new InvalidOperationException("The enumerator is positioned before the first element of the collection or after the last element."); + } + + NodeId id = null; + + switch (m_idType) + { + case IdType.Numeric: + { + ulong key = (ulong)m_enumerator.Key; + id = new NodeId((uint)(key & 0xFFFFFFFF), (ushort)((key >> 32) & 0xFFFF)); + break; + } + + case IdType.String: + { + id = new NodeId((string)m_enumerator.Key, m_namespaceIndex); + break; + } + + case IdType.Guid: + { + id = new NodeId((Guid)m_enumerator.Key, m_namespaceIndex); + break; + } + + case IdType.Opaque: + { + id = new NodeId(((ByteKey)m_enumerator.Key).Bytes, m_namespaceIndex); + break; + } + } + + return new KeyValuePair(id, (T)m_enumerator.Value); + } + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // do to nothing. + } + } + #endregion + + #region IEnumerator Members + /// + object System.Collections.IEnumerator.Current => this.Current; + + /// + public bool MoveNext() + { + CheckVersion(); + + if (m_enumerator == null) + { + m_enumerator = m_dictionary.m_numericIds.GetEnumerator(); + m_idType = IdType.Numeric; + m_namespaceIndex = 0; + } + + bool result = m_enumerator.MoveNext(); + + if (result) + { + return true; + } + + while (m_dictionary.m_dictionarySets != null && m_namespaceIndex < m_dictionary.m_dictionarySets.Length) + { + if (m_idType == IdType.Numeric) + { + m_idType = IdType.String; + + IDictionary dictionary = m_dictionary.GetStringDictionary(m_namespaceIndex, false); + + if (dictionary != null) + { + ReleaseEnumerator(); + m_enumerator = (IDictionaryEnumerator)dictionary.GetEnumerator(); + + if (m_enumerator.MoveNext()) + { + return true; + } + } + } + + if (m_idType == IdType.String) + { + m_idType = IdType.Guid; + + IDictionary dictionary = m_dictionary.GetGuidDictionary(m_namespaceIndex, false); + + if (dictionary != null) + { + ReleaseEnumerator(); + m_enumerator = (IDictionaryEnumerator)dictionary.GetEnumerator(); + + if (m_enumerator.MoveNext()) + { + return true; + } + } + } + + if (m_idType == IdType.Guid) + { + m_idType = IdType.Opaque; + + IDictionary dictionary = m_dictionary.GetOpaqueDictionary(m_namespaceIndex, false); + + if (dictionary != null) + { + ReleaseEnumerator(); + m_enumerator = (IDictionaryEnumerator)dictionary.GetEnumerator(); + + if (m_enumerator.MoveNext()) + { + return true; + } + } + } + + m_idType = IdType.Numeric; + m_namespaceIndex++; + } + + ReleaseEnumerator(); + return false; + } + + /// + public void Reset() + { + CheckVersion(); + ReleaseEnumerator(); + m_idType = 0; + m_namespaceIndex = 0; + } + #endregion + + #region Private Methods + /// + /// Releases and disposes the current enumerator. + /// + private void ReleaseEnumerator() + { + if (m_enumerator != null) + { + IDisposable diposeable = m_enumerator as IDisposable; + + if (diposeable != null) + { + diposeable.Dispose(); + } + + m_enumerator = null; + } + } + + /// + /// Checks if the dictionary has changed. + /// + private void CheckVersion() + { + if (m_version != m_dictionary.m_version) + { + throw new InvalidOperationException("The dictionary was modified after the enumerator was created."); + } + } + #endregion + + #region Private Fields + private NodeIdDictionary m_dictionary; + private ushort m_namespaceIndex; + private IdType m_idType; + private IDictionaryEnumerator m_enumerator; + private ulong m_version; + #endregion + } + #endregion + + #region Private Fields + private DictionarySet[] m_dictionarySets; + private SortedDictionary m_numericIds; + private ulong m_version; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/QualifiedName.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/QualifiedName.cs new file mode 100644 index 00000000..f9bdc59d --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/QualifiedName.cs @@ -0,0 +1,615 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; + +namespace Opc.Ua +{ + /// + /// 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 + ///
+ ///
+ [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class QualifiedName : IFormattable, IComparable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + /// + /// Initializes the object with default values. + /// + internal QualifiedName() + { + m_namespaceIndex = 0; + m_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(nameof(value)); + + m_name = value.m_name; + m_namespaceIndex = value.m_namespaceIndex; + } + + /// + /// 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) + { + m_namespaceIndex = 0; + m_name = name; + } + + /// + /// 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) + { + m_namespaceIndex = namespaceIndex; + m_name = name; + } + #endregion + + #region Public Properties + /// + /// The index of the namespace that qualifies the name. + /// + /// + /// The index of the namespace that qualifies the name. + /// + public ushort NamespaceIndex => m_namespaceIndex; + + /// + [DataMember(Name = "NamespaceIndex", Order = 1)] + internal ushort XmlEncodedNamespaceIndex + { + get { return m_namespaceIndex; } + set { m_namespaceIndex = value; } + } + + /// + /// The unqualified name. + /// + /// + /// The unqualified name. + /// + public string Name => m_name; + + /// + /// + /// + [DataMember(Name = "Name", Order = 2)] + internal string XmlEncodedName + { + get { return m_name; } + set { m_name = value; } + } + #endregion + + #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 qname = obj as QualifiedName; + + if (qname == null) + { + return typeof(QualifiedName).GetTypeInfo().GUID.CompareTo(obj.GetType().GetTypeInfo().GUID); + } + + if (qname.m_namespaceIndex != m_namespaceIndex) + { + return m_namespaceIndex.CompareTo(qname.m_namespaceIndex); + } + + if (m_name != null) + { + return String.CompareOrdinal(m_name, qname.m_name); + } + + return 0; + } + + /// + /// 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 + + #region Overridden Methods + /// + /// Returns a suitable hash value for the instance. + /// + public override int GetHashCode() + { + if (m_name != null) + { + return m_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 qname = obj as QualifiedName; + + if (qname == null) + { + return false; + } + + if (qname.m_namespaceIndex != m_namespaceIndex) + { + return false; + } + + return qname.m_name == m_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 value1.Equals(value2); + } + + return Object.ReferenceEquals(value2, null); + } + + /// + /// 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 !value1.Equals(value2); + } + + return !Object.ReferenceEquals(value2, null); + } + + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #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 = (m_name != null) ? m_name.Length : 0; + + StringBuilder builder = new StringBuilder(capacity + 10); + + if (this.m_namespaceIndex == 0) + { + // prepend the namespace index if the name contains a colon. + if (m_name != null) + { + int index = m_name.IndexOf(':'); + + if (index != -1) + { + builder.Append("0:"); + } + } + } + else + { + builder.Append(m_namespaceIndex); + builder.Append(':'); + } + + if (m_name != null) + { + builder.Append(m_name); + } + + return builder.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// Makes a deep copy of the object. + /// + public new object MemberwiseClone() + { + // this object cannot be altered after it is created so no new allocation is necessary. + return this; + } + #endregion + + #region Static Methods + /// + /// Converts an expanded node id to a node id using a namespace table. + /// + public static QualifiedName Create(string name, string namespaceUri, NamespaceTable 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.GetIndex(namespaceUri); + } + + // oops - not found. + if (namespaceIndex < 0) + { + throw ServiceResultException.Create(StatusCodes.BadBrowseNameInvalid, "NamespaceUri ({0}) is not in the NamespaceTable.", namespaceUri); + } + + // 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. + public static bool IsValid(QualifiedName value, NamespaceTable namespaceUris) + { + if (value == null || String.IsNullOrEmpty(value.m_name)) + { + return false; + } + + if (namespaceUris != null) + { + if (namespaceUris.GetString(value.m_namespaceIndex) == null) + { + return false; + } + } + + return true; + } + + /// + /// Parses a string containing a QualifiedName with the syntax n:qname + /// + /// The QualifiedName value as a string. + /// Thrown under a variety of circumstances, each time with a specific message. + public static QualifiedName Parse(string text) + { + // check for null. + if (String.IsNullOrEmpty(text)) + { + return QualifiedName.Null; + } + + // extract local namespace index. + ushort namespaceIndex = 0; + int start = -1; + + for (int ii = 0; ii < text.Length; ii++) + { + char ch = text[ii]; + + if (ch == ':') + { + start = ii + 1; + break; + } + + if (Char.IsDigit(ch)) + { + namespaceIndex *= 10; + namespaceIndex += (ushort)(ch - '0'); + } + } + + // no prefix found. + if (start == -1) + { + return new QualifiedName(text); + } + + return new QualifiedName(text.Substring(start), namespaceIndex); + } + + /// + /// Returns true if the value is null. + /// + /// The qualified name to check + public static bool IsNull(QualifiedName value) + { + if (value != null) + { + if (value.m_namespaceIndex != 0 || !String.IsNullOrEmpty(value.m_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 + + #region Private Fields + private ushort m_namespaceIndex; + private string m_name; + #endregion + } + + #region QualifiedNameCollection Class + /// + /// A collection of QualifiedName objects. + /// + /// + /// A strongly-typed collection of QualifiedName objects. + /// + [CollectionDataContract(Name = "ListOfQualifiedName", Namespace = Namespaces.OpcUaXsd, ItemName = "QualifiedName")] + public partial class QualifiedNameCollection : List + { + /// + /// 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); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + QualifiedNameCollection clone = new QualifiedNameCollection(this.Count); + + foreach (QualifiedName element in this) + { + clone.Add((QualifiedName)Utils.Clone(element)); + } + + return clone; + } + }//class + #endregion +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/SessionLessServiceMessage.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/SessionLessServiceMessage.cs new file mode 100644 index 00000000..fddffa64 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/SessionLessServiceMessage.cs @@ -0,0 +1,134 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// A session-less service message. + /// + public class SessionLessServiceMessage + { + /// + /// The namespaces URIs referenced by the message. + /// + public NamespaceTable NamespaceUris; + + /// + /// The server URIs referenced by the message. + /// + public StringTable ServerUris; + + /// + /// The message to encode or the decoded message. + /// + public IEncodeable Message; + + /// + public void Encode(IEncoder encoder) + { + if (NamespaceUris != null && NamespaceUris.Count > 1) + { + string[] uris = new string[NamespaceUris.Count - 1]; + + for (int ii = 1; ii < NamespaceUris.Count; ii++) + { + uris[ii - 1] = NamespaceUris.GetString((uint)ii); + } + + encoder.WriteStringArray("NamespaceUris", uris); + } + else + { + encoder.WriteStringArray("NamespaceUris", new string[0]); + } + + if (ServerUris != null && ServerUris.Count > 1) + { + string[] uris = new string[ServerUris.Count - 1]; + + for (int ii = 1; ii < ServerUris.Count; ii++) + { + uris[ii - 1] = ServerUris.GetString((uint)ii); + } + + encoder.WriteStringArray("ServerUris", uris); + } + else + { + encoder.WriteStringArray("ServerUris", new string[0]); + } + + if (Message != null) + { + encoder.SetMappingTables(NamespaceUris, ServerUris); + + if (Message.TypeId == null || Message.TypeId.IdType != IdType.Numeric) + { + throw ServiceResultException.Create(StatusCodes.BadEncodingError, "SessionLessServiceMessage message body must have a numeric TypeId defined. ({0})", Message.TypeId); + } + + encoder.WriteUInt32("ServiceId", (uint)Message.TypeId.Identifier); + encoder.WriteEncodeable("Body", Message, null); + } + else + { + encoder.WriteUInt32("TypeId", (uint)0); + } + } + + /// + public void Decode(IDecoder decoder) + { + NamespaceUris = new NamespaceTable(); + + var uris = decoder.ReadStringArray("NamespaceUris"); + + if (uris != null && uris.Count > 0) + { + foreach (var uri in uris) + { + NamespaceUris.Append(uri); + } + } + + ServerUris = new StringTable(); + uris = decoder.ReadStringArray("ServerUris"); + + if (uris != null && uris.Count > 0) + { + foreach (var uri in uris) + { + ServerUris.Append(uri); + } + } + + decoder.SetMappingTables(NamespaceUris, ServerUris); + + uint typeId = decoder.ReadUInt32("ServiceId"); + + if (typeId > 0) + { + var systemType = decoder.Context.Factory.GetSystemType(new ExpandedNodeId(typeId, 0)); + + if (systemType == null) + { + throw ServiceResultException.Create(StatusCodes.BadDecodingError, "SessionLessServiceMessage message body has an unknown TypeId. {0}", typeId); + } + + Message = decoder.ReadEncodeable("Body", systemType); + } + } + } + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/StatusCode.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/StatusCode.cs new file mode 100644 index 00000000..713a0fc5 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/StatusCode.cs @@ -0,0 +1,916 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Text; +using System.Xml.Serialization; + +namespace Opc.Ua +{ + + /// + /// A numeric code that describes the result of a service or operation. + /// + /// + /// + /// The StatusCode is defined in OPC UA Specifications Part 4: Services, section 7.22 + /// titled StatusCode.
+ ///
+ /// + /// A numeric code that is used to describe the result of a service or operation. The + /// StatusCode uses bit-assignments, which are described below. + ///
+ /// + /// The StatusCode is a 32-bit number, with the top 16-bits (high word) representing the + /// numeric value of an error or condition, whereas the bottom 16-bits (low word) represents + /// additional flags to provide more information on the meaning of the status code. + ///
+ /// + /// The following list shows the bit-assignments, i.e. 0-7 means bit 0 to bit 7. + /// + /// 0 - 7:
+ /// InfoBits. Additional information bits that qualify the status code.
+ /// 8 - 9:
+ /// The type of information contained in the info bits. These bits have the following meanings:
+ /// + /// Binary Representation 00:
+ /// The info bits are not used and must be set to zero.
+ /// Binary Representation 01:
+ /// The status code and its info bits are associated with a data value returned from the Server.
+ /// Binary Representation 10 or 11:
+ /// Reserved for future use. The info bits must be ignored.
+ ///
+ ///
+ /// 10 - 13:
+ /// Reserved for future use. Must always be zero.
+ /// 14: + /// Indicates that the semantics of the associated data value have changed. Clients should not process the data value until they re-read the metadata associated with the Variable. + /// Servers should set this bit if the metadata has changed in way that could case application errors if the Client does not re-read the metadata. For example, a change to the engineering units could create problems if the Client uses the value to perform calculations. + /// [UA Part 8] defines the conditions where a Server must set this bit for a DA Variable. Other specifications may define additional conditions. A Server may define other conditions that cause this bit to be set. + /// This bit only has meaning for status codes returned as part of a data change Notification. Status codes used in other contexts must always set this bit to zero. + /// 15:
+ /// Indicates that the structure of the associated data value has changed since the last Notification. Clients should not process the data value unless they re-read the metadata. + /// Servers must set this bit if the DataTypeEncoding used for a Variable changes. Clause 7.14 describes how the DataTypeEncoding is specified for a Variable. + /// The bit is also set if the data type Attribute of the Variable changes. A Variable with data type BaseDataType does not require the bit to be set when the data type changes. + /// Servers must also set this bit if the length of a fixed length array Variable changes. + /// This bit is provided to warn Clients that parse complex data values that their parsing routines could fail because the serialized form of the data value has changed. + /// This bit only has meaning for status codes returned as part of a data change Notification. Status codes used in other contexts must always set this bit to zero.
+ /// 16 - 27:
+ /// The code is a numeric value assigned to represent different conditions. + /// Each code has a symbolic name and a numeric value. All descriptions in the UA specification refer + /// to the symbolic name. [UA Part 6] maps the symbolic names onto a numeric value.
+ /// 28 - 29:
+ /// Reserved for future use. Must always be zero.
+ /// 30 - 31:
+ /// Indicates whether the status code represents a good, bad or uncertain condition. + /// These bits have the following meanings:
+ /// + /// Binary Represntation 00:
+ /// Indicates that the operation was successful and the associated results may be used.
+ /// Binary Represntation 01:
+ /// Indicates that the operation was partially successful and that associated results may not be suitable for some purposes.
+ /// Binary Represntation 10:
+ /// Indicates that the operation failed and any associated results cannot be used.
+ /// Binary Represntation 11:
+ /// Reserved for future use. All Clients should treat a status code with this severity as �Bad�.
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DataContract(Name = "StatusCode", Namespace = Namespaces.OpcUaXsd)] + public struct StatusCode : IComparable, IFormattable + { + #region Constructors + + /// + /// Initializes the object with a numeric value. + /// + /// + /// Initializes the object with a numeric value. + /// + /// The numeric code to apply to this status code + public StatusCode(uint code) + { + m_code = code; + } + + /// + /// Initializes the object from an exception. + /// + /// + /// Initializes the object from an exception and a numeric code. The numeric code + /// will be determined from the Exception if possible, otherwise the value passed in + /// will be used. + /// + /// The default code to apply if the routine cannot determine the code from the Exception + /// The exception to convert to a status code + public StatusCode(Exception e, uint defaultCode) + { + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + m_code = sre.StatusCode; + } + else + { + m_code = defaultCode; + } + } + #endregion + + #region Public Properties + #region public uint Code + /// + /// The entire 32-bit status value. + /// + /// + /// The entire 32-bit status value. + /// + [DataMember(Name = "Code", Order = 1, IsRequired = false)] + public uint Code + { + get { return m_code; } + set { m_code = value; } + } + #endregion + + #region public uint CodeBits + /// + /// The 16 code bits of the status code. + /// + /// + /// The 16 code bits of the status code. + /// + public uint CodeBits => m_code & 0xFFFF0000; + + /// + /// Returns a copy of the status code with the Code bits set. + /// + /// The value for the Code bits. + /// The status code with the Code bits set to the specified values. + public StatusCode SetCodeBits(uint bits) + { + m_code &= 0x0000FFFF; + m_code |= (bits & 0xFFFF0000); + + return this; + } + #endregion + + #region public uint FlagBits + /// + /// The 16 flag bits of the status code. + /// + /// + /// The 16 flag bits of the status code. + /// + public uint FlagBits => m_code & 0x0000FFFF; + + /// + /// Returns a copy of the status code with the Flag bits set. + /// + /// The value for the Flag bits. + /// The status code with the Flag bits set to the specified values. + public StatusCode SetFlagBits(uint bits) + { + m_code &= 0xFFFF0000; + m_code |= ((uint)bits & 0x0000FFFF); + + return this; + } + #endregion + + #region public uint SubCode + /// + /// The sub-code portion of the status code. + /// + /// + /// The sub-code portion of the status code. + /// + public uint SubCode + { + get { return m_code & 0x0FFF000; } + set { m_code = 0x0FFF000 & value; } + } + #endregion + + #region public bool StructureChanged + /// + /// Set to indicate that the structure of the data value has changed. + /// + /// + /// Set to indicate that the structure of the data value has changed. + /// + [XmlIgnore()] + public bool StructureChanged + { + get { return (m_code & s_StructureChangedBit) != 0; } + + set + { + if (value) + { + m_code |= s_StructureChangedBit; + } + else + { + m_code &= ~s_StructureChangedBit; + } + } + } + + /// + /// Returns a copy of the status code with the StructureChanged bit set. + /// + /// The value for the StructureChanged bit. + /// The status code with the StructureChanged bit set to the specified value. + public StatusCode SetStructureChanged(bool structureChanged) + { + this.StructureChanged = structureChanged; + return this; + } + #endregion + + #region public bool SemanticsChanged + /// + /// Set to indicate that the semantics associated with the data value have changed. + /// + /// + /// Set to indicate that the semantics associated with the data value have changed. + /// + [XmlIgnore()] + public bool SemanticsChanged + { + get { return (m_code & s_SemanticsChangedBit) != 0; } + + set + { + if (value) + { + m_code |= s_SemanticsChangedBit; + } + else + { + m_code &= ~s_SemanticsChangedBit; + } + } + } + + /// + /// Returns a copy of the status code with the SemanticsChanged bit set. + /// + /// The value for the SemanticsChanged bit. + /// The status code with the SemanticsChanged bit set to the specified value. + public StatusCode SetSemanticsChanged(bool semanticsChanged) + { + this.SemanticsChanged = semanticsChanged; + return this; + } + #endregion + + #region public bool HasDataValueInfo + /// + /// The bits that indicate the meaning of the status code + /// + /// + /// The bits that indicate the meaning of the status code + /// + [XmlIgnore()] + public bool HasDataValueInfo + { + get { return (m_code & s_DataValueInfoType) != 0; } + + set + { + if (value) + { + m_code |= s_DataValueInfoType; + } + else + { + m_code &= ~s_DataValueInfoType; + m_code &= 0xFFFFFC00; + } + } + } + + + #endregion + + #region public LimitBits LimitBits + /// + /// The limit bits, indicating Hi/Lo etc. + /// + /// + /// The limit bits, indicating Hi/Lo etc. + /// + /// + [XmlIgnore()] + public LimitBits LimitBits + { + get { return (LimitBits)(m_code & s_LimitBits); } + + set + { + m_code |= s_DataValueInfoType; + m_code &= ~s_LimitBits; + m_code |= ((uint)value & s_LimitBits); + } + } + + /// + /// Returns a copy of the status code with the llimit bits set. + /// + /// The value for the limits bits + /// The status code with the limit bits set to the specified values. + public StatusCode SetLimitBits(LimitBits bits) + { + this.LimitBits = bits; + return this; + } + #endregion + + #region public bool Overflow + /// + /// The overflow bit. + /// + /// + /// Specifies if there is an overflow or not + /// + [XmlIgnore()] + public bool Overflow + { + get { return ((m_code & s_DataValueInfoType) != 0) && ((m_code & s_OverflowBit) != 0); } + + set + { + m_code |= s_DataValueInfoType; + + if (value) + { + m_code |= s_OverflowBit; + } + else + { + m_code &= ~s_OverflowBit; + } + } + } + + /// + /// Returns a copy of the status code with the overflow bit set. + /// + /// The value for the overflow bit. + /// The status code with the overflow bit set to the specified value. + public StatusCode SetOverflow(bool overflow) + { + this.Overflow = overflow; + return this; + } + #endregion + + #region public AggregateBits AggregateBits + /// + /// The historian bits. + /// + /// + /// The historian bits. + /// + /// + [XmlIgnore()] + public AggregateBits AggregateBits + { + get { return (AggregateBits)(m_code & s_AggregateBits); } + + set + { + m_code |= s_DataValueInfoType; + m_code &= ~s_AggregateBits; + m_code |= ((uint)value & s_AggregateBits); + } + } + + /// + /// Returns a copy of the status code with the aggregate bits set. + /// + /// The bits to set. + /// The status code with the aggregate bits set to the specified values. + public StatusCode SetAggregateBits(AggregateBits bits) + { + this.AggregateBits = bits; + return this; + } + #endregion + #endregion + + #region IComparable Members + /// + /// Compares the instance to another object. + /// + /// + /// Compares the instance to another object. + /// + /// The object to compare to *this* object + public int CompareTo(object obj) + { + // check for reference equality. + if (Object.ReferenceEquals(obj, this)) + { + return 0; + } + + // check for null. + if (obj == null) + { + return +1; + } + + // check for status code. + if (obj is uint) + { + return m_code.CompareTo((uint)obj); + } + + // compare codes. + if (obj is StatusCode) + { + return m_code.CompareTo(((StatusCode)obj).m_code); + } + + // objects not comparable. + return -1; + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + /// (Unused) The format of the string. Always specify null for this parameter + /// The provider to use for the formatting + /// Thrown if you specify a value for the Format parameter + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + string text = StatusCodes.GetBrowseName(m_code & 0xFFFF0000); + + if (!String.IsNullOrEmpty(text)) + { + return String.Format(formatProvider, "{0}", text); + } + + return String.Format(formatProvider, "0x{0:X8}", m_code); + + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the object. + /// + /// + /// Determines if the specified object is equal to the object. + /// + /// The object to compare to *this* object + public override bool Equals(object obj) + { + return CompareTo(obj) == 0; + } + + /// + /// Returns a unique hashcode for the object. + /// + /// + /// Returns a unique hashcode for the object. + /// + public override int GetHashCode() + { + return m_code.GetHashCode(); + } + + /// + /// Converts the value to a human readable string. + /// + /// + /// Converts the value to a human readable string. + /// + public override string ToString() + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append(LookupSymbolicId(m_code)); + + if ((0x0000FFFF & Code) != 0) + { + buffer.AppendFormat(" [{0:X4}]", (0x0000FFFF & Code)); + } + + return buffer.ToString(); + } + #endregion + + #region Static Members + /// + /// Converts a 32-bit code a StatusCode object. + /// + /// + /// Converts a 32-bit code a StatusCode object. + /// + /// The code to convert to a StatusCode + public static implicit operator StatusCode(uint code) + { + return new StatusCode(code); + } + + /// + /// Converts a StatusCode object to a 32-bit code. + /// + /// + /// Converts a StatusCode object to a 32-bit code. + /// + /// The StatusCode to convert to a 32-but number + public static explicit operator uint(StatusCode code) + { + return code.Code; + } + + /// + /// Looks up the symbolic name for a status code. + /// + /// + /// Looks up the symbolic name for a status code. + /// + /// The numeric error-code to convert to a textual description + public static string LookupSymbolicId(uint code) + { + return StatusCodes.GetBrowseName(code & 0xFFFF0000); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator ==(StatusCode a, StatusCode b) + { + if (Object.ReferenceEquals(a, null)) + { + return Object.ReferenceEquals(b, null); + } + + return a.Equals(b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator !=(StatusCode a, StatusCode b) + { + return !(a == b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator ==(StatusCode a, uint b) + { + if (Object.ReferenceEquals(a, null)) + { + return false; + } + + return a.Equals(b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first value being compared + /// The second value being compared to + public static bool operator !=(StatusCode a, uint b) + { + return !(a == b); + } + + /// + /// Returns true if the object a is less than object b. + /// + /// + /// Returns true if the object a is less than object b. + /// + /// The first value being compared + /// The second value being compared to + public static bool operator <(StatusCode a, StatusCode b) + { + return a.CompareTo(b) < 0; + } + + /// + /// Returns true if the object a is greater than object b. + /// + /// + /// Returns true if the object a is greater than object b. + /// + /// The first value being compared + /// The second value being compared to + public static bool operator >(StatusCode a, StatusCode b) + { + return a.CompareTo(b) > 0; + } + + /// + /// Returns true if the status code is good. + /// + /// + /// Returns true if the status code is good. + /// + /// The code to check + public static bool IsGood(StatusCode code) + { + return (code.m_code & 0xC0000000) == 0; + } + + /// + /// Returns true if the status is bad or uncertain. + /// + /// + /// Returns true if the status is bad or uncertain. + /// + /// The code to check + public static bool IsNotGood(StatusCode code) + { + return (code.m_code & 0xC0000000) != 0; + } + + /// + /// Returns true if the status code is uncertain. + /// + /// + /// Returns true if the status code is uncertain. + /// + /// The code to check + public static bool IsUncertain(StatusCode code) + { + return (code.m_code & 0x40000000) == 0x40000000; + } + + /// + /// Returns true if the status is good or uncertain. + /// + /// + /// Returns true if the status is good or uncertain. + /// + /// The code to check + public static bool IsNotUncertain(StatusCode code) + { + return (code.m_code & 0x40000000) != 0x40000000; + } + + /// + /// Returns true if the status code is bad. + /// + /// + /// Returns true if the status code is bad. + /// + /// The code to check + public static bool IsBad(StatusCode code) + { + return (code.m_code & 0x80000000) != 0; + } + + /// + /// Returns true if the status is good or uncertain. + /// + /// + /// Returns true if the status is good or uncertain. + /// + /// The code to check + public static bool IsNotBad(StatusCode code) + { + return (code.m_code & 0x80000000) == 0; + } + #endregion + + #region Private Members + private uint m_code; + + private const uint s_AggregateBits = 0x001F; + private const uint s_OverflowBit = 0x0080; + private const uint s_LimitBits = 0x0300; + private const uint s_DataValueInfoType = 0x0400; + private const uint s_SemanticsChangedBit = 0x4000; + private const uint s_StructureChangedBit = 0x8000; + #endregion + } + + #region LimitBits Enumeration + /// + /// Flags that are set to indicate the limit status of the value. + /// + [Flags] + public enum LimitBits : int + { + /// + /// The value is free to change. + /// + None = 0x0000, + + /// + /// The value is at the lower limit for the data source. + /// + Low = 0x0100, + + /// + /// The value is at the higher limit for the data source. + /// + High = 0x0200, + + /// + /// The value is constant and cannot change. + /// + Constant = 0x0300 + } + #endregion + + #region AggregateBits Enumeration + /// + /// Flags that are set by the historian when returning archived values. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue"), Flags] + public enum AggregateBits : int + { + /// + /// A raw data value. + /// + Raw = 0x00, + + /// + /// A raw data value. + /// + Calculated = 0x01, + + /// + /// A data value which was interpolated. + /// + Interpolated = 0x02, + + /// + /// A mask that selects the bit which identify the source of the value (raw, calculated, interpolated). + /// + DataSourceMask = 0x03, + + /// + /// A data value which was calculated with an incomplete interval. + /// + Partial = 0x04, + + /// + /// A raw data value that hides other data at the same timestamp. + /// + ExtraData = 0x08, + + /// + /// Multiple values match the aggregate criteria (i.e. multiple minimum values at different timestamps within the same interval) + /// + MultipleValues = 0x10, + } + #endregion + + #region StatusCodeCollection Class + /// + /// A collection of StatusCodes. + /// + [CollectionDataContract(Name = "ListOfStatusCode", Namespace = Namespaces.OpcUaXsd, ItemName = "StatusCode")] + public partial class StatusCodeCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public StatusCodeCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// The collection to copy + public StatusCodeCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The maximum capacity allowed for this instance of the collection + public StatusCodeCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// The array of values to return as a Collection + public static StatusCodeCollection ToStatusCodeCollection(StatusCode[] values) + { + if (values != null) + { + return new StatusCodeCollection(values); + } + + return new StatusCodeCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// The array of values to return as a Collection + public static implicit operator StatusCodeCollection(StatusCode[] values) + { + return ToStatusCodeCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + return new StatusCodeCollection(this); + } + } + #endregion + + #region Standard StatusCodes + /// + /// Defines standard status codes. + /// + /// + /// Defines standard status codes. + /// + public static partial class StatusCodes + { + /// + /// The operation completed successfully. + /// + public const uint Good = 0x00000000; + + /// + /// The operation completed however its outputs may not be usable. + /// + public const uint Uncertain = 0x40000000; + + /// + /// The operation failed. + /// + public const uint Bad = 0x80000000; + } + #endregion + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/Uuid.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/Uuid.cs new file mode 100644 index 00000000..af9c0bad --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/Uuid.cs @@ -0,0 +1,360 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// A wrapper for a GUID used during object serialization. + /// + /// + /// This class provides a wrapper around the object, allowing it to be serialized + /// and encoded/decoded to/from an underlying stream. + /// x + [DataContract(Name = "Guid", Namespace = Namespaces.OpcUaXsd)] + public struct Uuid : IComparable, IFormattable + { + #region Constructors + /// + /// Initializes the object with a string. + /// + /// + /// Initializes the object with a string. The string will be used to create a . + /// + /// The string that will be turned into a Guid + public Uuid(string text) + { + m_guid = new Guid(text); + } + + /// + /// Initializes the object with a Guid. + /// + /// + /// Initializes the object with a Guid. + /// + /// The Guid to wrap + public Uuid(Guid guid) + { + m_guid = guid; + } + #endregion + + #region Static Fields + + /// + /// A constant containing an empty GUID. + /// + /// + /// A constant containing an empty GUID. + /// + public static readonly Uuid Empty = new Uuid(); + + #endregion + + #region Public Properties + /// + /// The GUID serialized as a string. + /// + /// + /// The GUID serialized as a string. + /// + [DataMember(Name = "String", Order = 1)] + public string GuidString + { + get { return m_guid.ToString(); } + + set + { + if (String.IsNullOrEmpty(value)) + { + m_guid = Guid.Empty; + } + else + { + m_guid = new Guid(value); + } + } + } + #endregion + + #region Static Members + /// + /// Converts Uuid to a Guid structure. + /// + /// + /// Converts Uuid to a Guid structure. + /// + /// The Guid to convert to a Uuid + public static implicit operator Guid(Uuid guid) + { + return guid.m_guid; + } + + /// + /// Converts Guid to a Uuid. + /// + /// + /// Converts Guid to a Uuid. + /// + /// The to convert to a + public static explicit operator Uuid(Guid guid) + { + return new Uuid(guid); + } + + /// + /// Returns true if the objects are equal. + /// + /// + /// Returns true if the objects are equal. + /// + /// The first object to compare + /// The second object to compare + public static bool operator ==(Uuid a, Uuid b) + { + return a.Equals(b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first object to compare + /// The second object being compared to + public static bool operator !=(Uuid a, Uuid b) + { + return !a.Equals(b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator ==(Uuid a, Guid b) + { + return a.Equals(b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator !=(Uuid a, Guid b) + { + return !a.Equals(b); + } + + /// + /// Returns true if the object a is less than object b. + /// + /// + /// Returns true if the object a is less than object b. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator <(Uuid a, Uuid b) + { + return a.CompareTo(b) < 0; + } + + /// + /// Returns true if the object a is greater than object b. + /// + /// + /// Returns true if the object a is greater than object b. + /// + /// The first object being compared + /// The second object being compared to + public static bool operator >(Uuid a, Uuid b) + { + return a.CompareTo(b) > 0; + } + #endregion + + #region Overridden Methods + /// + /// Returns true if the objects are equal. + /// + /// + /// Returns true if the objects are equal. + /// + /// The object being compared to *this* object + public override bool Equals(object obj) + { + return (CompareTo(obj) == 0); + } + + /// + /// Returns a hash code for the object. + /// + /// + /// Returns a unique hash code for the object. + /// + public override int GetHashCode() + { + return m_guid.GetHashCode(); + } + + /// + /// Converts the object to a string. + /// + /// + /// Converts the object to a string. + /// + public override string ToString() + { + return m_guid.ToString(); + } + #endregion + + #region IComparable Members + /// + /// Compares the current instance to the object. + /// + /// + /// Compares the current instance to the object. This function will check if the object + /// passed in is a or . + /// + /// The object being compared to *this* object + public int CompareTo(object obj) + { + // check for reference comparisons. + if (Object.ReferenceEquals(this, obj)) + { + return 0; + } + + // check for uuids. + if (obj is Uuid) + { + return ((Uuid)obj).m_guid.CompareTo(m_guid); + } + + // compare guids. + if (obj is Guid) + { + return m_guid.CompareTo((Guid)obj); + } + + return +1; + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + /// The format you want to apply to the string + /// The FormatProvider + public string ToString(string format, IFormatProvider formatProvider) + { + return this.m_guid.ToString(format); + } + #endregion + + #region Private Fields + private Guid m_guid; + #endregion + } + + #region UuidCollection Class + /// + /// A collection of Uuids. + /// + [CollectionDataContract(Name = "ListOfGuid", Namespace = Namespaces.OpcUaXsd, ItemName = "Guid")] + public partial class UuidCollection : List + { + /// + /// Initializes an empty collection. + /// + /// + /// Initializes an empty collection. + /// + public UuidCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Initializes the collection from another collection. + /// + /// The collection to copy + public UuidCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The maximum size of the colletion + public UuidCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// The array of values to return as a Collection + public static UuidCollection ToUuidCollection(Uuid[] values) + { + if (values != null) + { + return new UuidCollection(values); + } + + return new UuidCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array to a collection. + /// + /// The array of values to return as a collection + public static implicit operator UuidCollection(Uuid[] values) + { + return ToUuidCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Returns a new instance of the collection, copying the contents of this collection + /// + public new object MemberwiseClone() + { + return new UuidCollection(this); + } + } + #endregion +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/Variant.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/Variant.cs new file mode 100644 index 00000000..ba24ef7b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/BuiltIn/Variant.cs @@ -0,0 +1,2817 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A structure that could contain value with any of the UA built-in data types. + /// + /// + /// + /// The Variant is described in Part 6 - Mappings, Section 6.2.2.15, titled Variant + ///
+ /// + /// Variant is a data type in COM, but not within the .NET Framework. Therefore OPC UA has its own + /// Variant type that supports all of the OPC UA data-types. + ///
+ ///
+ [DataContract(Namespace = Namespaces.OpcUaXsd)] + public partial struct Variant : IFormattable + { + #region Constructors + /// + /// Creates a deep copy of the value. + /// + /// + /// Creates a new Variant instance, while deep-copying the contents of the specified Variant + /// + /// The Variant value to copy. + public Variant(Variant value) + { + m_value = Utils.Clone(value.m_value); + m_typeInfo = value.m_typeInfo; + } + + /// + /// Constructs a Variant + /// + /// The value to store. + /// The type information for the value. + public Variant(object value, TypeInfo typeInfo) + { + m_value = null; + m_typeInfo = typeInfo; + Set(value, typeInfo); + +#if DEBUG + + TypeInfo sanityCheck = TypeInfo.Construct(m_value); + + // except special case byte array vs. bytestring + if (sanityCheck.BuiltInType == BuiltInType.ByteString && + sanityCheck.ValueRank == ValueRanks.Scalar && + typeInfo.BuiltInType == BuiltInType.Byte && + typeInfo.ValueRank == ValueRanks.OneDimension) + { + return; + } + + // An enumeration can contain Int32 + if (sanityCheck.BuiltInType == BuiltInType.Int32 && + typeInfo.BuiltInType == BuiltInType.Enumeration) + { + return; + } + + System.Diagnostics.Debug.Assert( + sanityCheck.BuiltInType == m_typeInfo.BuiltInType, + Utils.Format("{0} != {1}", + sanityCheck.BuiltInType, + typeInfo.BuiltInType)); + + System.Diagnostics.Debug.Assert( + sanityCheck.ValueRank == m_typeInfo.ValueRank, + Utils.Format("{0} != {1}", + sanityCheck.ValueRank, + typeInfo.ValueRank)); + +#endif + } + + /// + /// Initializes the object with an object value. + /// + /// + /// Creates a new variant instance while specifying the value. + /// + /// The value to encode within the variant + public Variant(object value) + { + m_value = null; + m_typeInfo = TypeInfo.Construct(value); + Set(value, m_typeInfo); + } + + /// + /// Initializes the variant with matrix. + /// + /// The value to store within the variant + public Variant(Matrix value) + { + m_value = value; + m_typeInfo = value.TypeInfo; + } + + /// + /// Initializes the object with a bool value. + /// + /// + /// Creates a new Variant with a Boolean value. + /// + /// The value of the variant + public Variant(bool value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Boolean; + } + + /// + /// Initializes the object with a sbyte value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(sbyte value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.SByte; + } + + /// + /// Initializes the object with a byte value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(byte value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Byte; + } + + /// + /// Initializes the object with a short value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(short value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Int16; + } + + /// + /// Initializes the object with a ushort value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(ushort value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.UInt16; + } + + /// + /// Initializes the object with an int value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(int value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Int32; + } + + /// + /// Initializes the object with a uint value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(uint value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.UInt32; + } + + /// + /// Initializes the object with a long value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(long value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Int64; + } + + /// + /// Initializes the object with a ulong value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(ulong value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.UInt64; + } + + /// + /// Initializes the object with a float value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(float value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Float; + } + + /// + /// Initializes the object with a double value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(double value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Double; + } + + /// + /// Initializes the object with a string value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(string value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.String; + } + + /// + /// Initializes the object with a DateTime value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(DateTime value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.DateTime; + } + + /// + /// Initializes the object with a Guid value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(Guid value) + { + m_value = new Uuid(value); + m_typeInfo = TypeInfo.Scalars.Guid; + } + + /// + /// Initializes the object with a Uuid value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(Uuid value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Guid; + } + + /// + /// Initializes the object with a byte[] value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(byte[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.ByteString; + } + + /// + /// Initializes the object with a XmlElement value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(XmlElement value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.XmlElement; + } + + /// + /// Initializes the object with a NodeId value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(NodeId value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.NodeId; + } + + /// + /// Initializes the object with a ExpandedNodeId value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(ExpandedNodeId value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.ExpandedNodeId; + } + + /// + /// Initializes the object with a StatusCode value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(StatusCode value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.StatusCode; + } + + /// + /// Initializes the object with a QualifiedName value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(QualifiedName value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.QualifiedName; + } + + /// + /// Initializes the object with a LocalizedText value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(LocalizedText value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.LocalizedText; + } + + /// + /// Initializes the object with a ExtensionObject value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(ExtensionObject value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.ExtensionObject; + } + + /// + /// Initializes the object with a DataValue value. + /// + /// + /// Creates a new variant with a value + /// + /// The value of the Variant + public Variant(DataValue value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.DataValue; + } + + /// + /// Initializes the object with a bool array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(bool[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Boolean; + } + + /// + /// Initializes the object with a sbyte array value. + /// + /// + /// Creates a new variant with a -arrat value + /// + /// The -array value of the Variant + public Variant(sbyte[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.SByte; + } + + /// + /// Initializes the object with a short array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(short[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Int16; + } + + /// + /// Initializes the object with a ushort array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(ushort[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.UInt16; + } + + /// + /// Initializes the object with an int array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(int[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Int32; + } + + /// + /// Initializes the object with a uint array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(uint[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.UInt32; + } + + /// + /// Initializes the object with a long array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(long[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Int64; + } + + /// + /// Initializes the object with a ulong array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(ulong[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.UInt64; + } + + /// + /// Initializes the object with a float array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(float[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Float; + } + + /// + /// Initializes the object with a double array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(double[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Double; + } + + /// + /// Initializes the object with a string array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(string[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.String; + } + + /// + /// Initializes the object with a DateTime array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(DateTime[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.DateTime; + } + + /// + /// Initializes the object with a Guid array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(Guid[] value) + { + m_value = null; + m_typeInfo = TypeInfo.Arrays.Guid; + Set(value); + } + + /// + /// Initializes the object with a Uuid array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(Uuid[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Guid; + } + + /// + /// Initializes the object with a byte[] array value. + /// + /// + /// Creates a new variant with a 2-d -array value + /// + /// The 2-d -array value of the Variant + public Variant(byte[][] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.ByteString; + } + + /// + /// Initializes the object with a XmlElement array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(XmlElement[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.XmlElement; + } + + /// + /// Initializes the object with a NodeId array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(NodeId[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.NodeId; + } + + /// + /// Initializes the object with a ExpandedNodeId array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(ExpandedNodeId[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.ExpandedNodeId; + } + + /// + /// Initializes the object with a StatusCode array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(StatusCode[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.StatusCode; + } + + /// + /// Initializes the object with a QualifiedName array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(QualifiedName[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.QualifiedName; + } + + /// + /// Initializes the object with a LocalizedText array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(LocalizedText[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.LocalizedText; + } + + /// + /// Initializes the object with a ExtensionObject array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(ExtensionObject[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.ExtensionObject; + } + + /// + /// Initializes the object with a DataValue array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(DataValue[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.DataValue; + } + + /// + /// Initializes the object with a Variant array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(Variant[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Variant; + } + + /// + /// Initializes the object with a object array value. + /// + /// + /// Creates a new variant with a -array value + /// + /// The -array value of the Variant + public Variant(object[] value) + { + m_value = null; + m_typeInfo = TypeInfo.Arrays.Variant; + Set(value); + } + #endregion + + #region Public Properties + /// + /// The value stored in the object. + /// + /// + /// The value stored within the Variant object. + /// + [DataMember(Name = "Value", Order = 1)] + private XmlElement XmlEncodedValue + { + get + { + // create encoder. + XmlEncoder encoder = new XmlEncoder(MessageContextExtension.CurrentContext); + + // write value. + encoder.WriteVariantContents(m_value, m_typeInfo); + + // create document from encoder. + XmlDocument document = new XmlDocument(); + document.InnerXml = encoder.Close(); + + // return element. + return document.DocumentElement; + } + + set + { + // check for null values. + if (value == null) + { + m_value = null; + return; + } + + TypeInfo typeInfo = null; + + // create decoder. + XmlDecoder decoder = new XmlDecoder(value, MessageContextExtension.CurrentContext); + + try + { + // read value. + object body = decoder.ReadVariantContents(out typeInfo); + Set(body, typeInfo); + } + catch (Exception e) + { + throw ServiceResultException.Create( + StatusCodes.BadDecodingError, + e, + "Error decoding Variant value."); + } + finally + { + // close decoder. + decoder.Close(); + } + } + } + + /// + /// The value stored in the object. + /// + /// + /// The value stored -as - within the Variant object. + /// + public object Value + { + get { return m_value; } + set { Set(value, TypeInfo.Construct(value)); } + } + + /// + /// The type information for the matrix. + /// + public TypeInfo TypeInfo => m_typeInfo; + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + /// Thrown when the 'format' argument is NOT null. + /// (Unused) Always pass a NULL value + /// The format-provider to use. If unsure, pass an empty string or null + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder buffer = new StringBuilder(); + AppendFormat(buffer, m_value, formatProvider); + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + + /// + /// Formats a value as a string. + /// + private void AppendFormat(StringBuilder buffer, object value, IFormatProvider formatProvider) + { + // check for null. + if (value == null || m_typeInfo == null) + { + buffer.Append("(null)"); + return; + } + + // convert byte string to hexstring. + if (m_typeInfo.BuiltInType == BuiltInType.ByteString && m_typeInfo.ValueRank < 0) + { + byte[] bytes = (byte[])value; + + for (int ii = 0; ii < bytes.Length; ii++) + { + buffer.AppendFormat(formatProvider, "{0:X2}", bytes[ii]); + } + + return; + } + + // convert XML element to string. + if (m_typeInfo.BuiltInType == BuiltInType.XmlElement && m_typeInfo.ValueRank < 0) + { + XmlElement xml = (XmlElement)value; + buffer.AppendFormat(formatProvider, "{0}", xml.OuterXml); + return; + } + + // recusrively write individual elements of an array. + Array array = value as Array; + + if (array != null && m_typeInfo.ValueRank <= 1) + { + buffer.Append("{"); + + if (array.Length > 0) + { + AppendFormat(buffer, array.GetValue(0), formatProvider); + } + + for (int ii = 1; ii < array.Length; ii++) + { + buffer.Append(" |"); + AppendFormat(buffer, array.GetValue(ii), formatProvider); + } + + buffer.Append("}"); + return; + } + + // let the object format itself. + buffer.AppendFormat(formatProvider, "{0}", value); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// Makes a deep copy of the object. + /// + public new object MemberwiseClone() + { + return new Variant(Utils.Clone(this.Value)); + } + #endregion + + #region Static Operators + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + public static bool operator ==(Variant a, Variant b) + { + return a.Equals(b); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + public static bool operator !=(Variant a, Variant b) + { + return !a.Equals(b); + } + + /// + /// Converts a bool value to an Variant object. + /// + /// + /// Converts a bool value to an Variant object. + /// + public static implicit operator Variant(bool value) + { + return new Variant(value); + } + + /// + /// Converts a sbyte value to an Variant object. + /// + /// + /// Converts a sbyte value to an Variant object. + /// + public static implicit operator Variant(sbyte value) + { + return new Variant(value); + } + + /// + /// Converts a byte value to an Variant object. + /// + /// + /// Converts a byte value to an Variant object. + /// + public static implicit operator Variant(byte value) + { + return new Variant(value); + } + + /// + /// Converts a short value to an Variant object. + /// + /// + /// Converts a short value to an Variant object. + /// + public static implicit operator Variant(short value) + { + return new Variant(value); + } + + /// + /// Converts a ushort value to an Variant object. + /// + /// + /// Converts a ushort value to an Variant object. + /// + public static implicit operator Variant(ushort value) + { + return new Variant(value); + } + + /// + /// Converts a int value to an Variant object. + /// + /// + /// Converts a int value to an Variant object. + /// + public static implicit operator Variant(int value) + { + return new Variant(value); + } + + /// + /// Converts a uint value to an Variant object. + /// + /// + /// Converts a uint value to an Variant object. + /// + public static implicit operator Variant(uint value) + { + return new Variant(value); + } + + /// + /// Converts a long value to an Variant object. + /// + /// + /// Converts a long value to an Variant object. + /// + public static implicit operator Variant(long value) + { + return new Variant(value); + } + + /// + /// Converts a ulong value to an Variant object. + /// + /// + /// Converts a ulong value to an Variant object. + /// + public static implicit operator Variant(ulong value) + { + return new Variant(value); + } + + /// + /// Converts a float value to an Variant object. + /// + /// + /// Converts a float value to an Variant object. + /// + public static implicit operator Variant(float value) + { + return new Variant(value); + } + + /// + /// Converts a double value to an Variant object. + /// + /// + /// Converts a double value to an Variant object. + /// + public static implicit operator Variant(double value) + { + return new Variant(value); + } + + /// + /// Converts a string value to an Variant object. + /// + /// + /// Converts a string value to an Variant object. + /// + public static implicit operator Variant(string value) + { + return new Variant(value); + } + + /// + /// Converts a DateTime value to an Variant object. + /// + /// + /// Converts a DateTime value to an Variant object. + /// + public static implicit operator Variant(DateTime value) + { + return new Variant(value); + } + + /// + /// Converts a Guid value to an Variant object. + /// + /// + /// Converts a Guid value to an Variant object. + /// + public static implicit operator Variant(Guid value) + { + return new Variant(value); + } + + /// + /// Converts a Uuid value to an Variant object. + /// + /// + /// Converts a Uuid value to an Variant object. + /// + public static implicit operator Variant(Uuid value) + { + return new Variant(value); + } + + /// + /// Converts a byte[] value to an Variant object. + /// + /// + /// Converts a byte[] value to an Variant object. + /// + public static implicit operator Variant(byte[] value) + { + return new Variant(value); + } + + /// + /// Converts a XmlElement value to an Variant object. + /// + /// + /// Converts a XmlElement value to an Variant object. + /// + public static implicit operator Variant(XmlElement value) + { + return new Variant(value); + } + + /// + /// Converts a NodeId value to an Variant object. + /// + /// + /// Converts a NodeId value to an Variant object. + /// + public static implicit operator Variant(NodeId value) + { + return new Variant(value); + } + + /// + /// Converts a ExpandedNodeId value to an Variant object. + /// + /// + /// Converts a ExpandedNodeId value to an Variant object. + /// + public static implicit operator Variant(ExpandedNodeId value) + { + return new Variant(value); + } + + /// + /// Converts a StatusCode value to an Variant object. + /// + /// + /// Converts a StatusCode value to an Variant object. + /// + public static implicit operator Variant(StatusCode value) + { + return new Variant(value); + } + + /// + /// Converts a QualifiedName value to an Variant object. + /// + /// + /// Converts a QualifiedName value to an Variant object. + /// + public static implicit operator Variant(QualifiedName value) + { + return new Variant(value); + } + + /// + /// Converts a LocalizedText value to an Variant object. + /// + /// + /// Converts a LocalizedText value to an Variant object. + /// + public static implicit operator Variant(LocalizedText value) + { + return new Variant(value); + } + + /// + /// Converts a ExtensionObject value to an Variant object. + /// + /// + /// Converts a ExtensionObject value to an Variant object. + /// + public static implicit operator Variant(ExtensionObject value) + { + return new Variant(value); + } + + /// + /// Converts a DataValue value to an Variant object. + /// + /// + /// Converts a DataValue value to an Variant object. + /// + public static implicit operator Variant(DataValue value) + { + return new Variant(value); + } + + /// + /// Converts a bool[] value to an Variant object. + /// + /// + /// Converts a bool[] value to an Variant object. + /// + public static implicit operator Variant(bool[] value) + { + return new Variant(value); + } + + /// + /// Converts a sbyte[] value to an Variant object. + /// + /// + /// Converts a sbyte[] value to an Variant object. + /// + public static implicit operator Variant(sbyte[] value) + { + return new Variant(value); + } + + /// + /// Converts a short[] value to an Variant object. + /// + /// + /// Converts a short[] value to an Variant object. + /// + public static implicit operator Variant(short[] value) + { + return new Variant(value); + } + + /// + /// Converts a ushort[] value to an Variant object. + /// + /// + /// Converts a ushort[] value to an Variant object. + /// + public static implicit operator Variant(ushort[] value) + { + return new Variant(value); + } + + /// + /// Converts a int[] value to an Variant object. + /// + /// + /// Converts a int[] value to an Variant object. + /// + public static implicit operator Variant(int[] value) + { + return new Variant(value); + } + + /// + /// Converts a uint[] value to an Variant object. + /// + /// + /// Converts a uint[] value to an Variant object. + /// + public static implicit operator Variant(uint[] value) + { + return new Variant(value); + } + + /// + /// Converts a long[] value to an Variant object. + /// + /// + /// Converts a long[] value to an Variant object. + /// + public static implicit operator Variant(long[] value) + { + return new Variant(value); + } + + /// + /// Converts a ulong[] value to an Variant object. + /// + /// + /// Converts a ulong[] value to an Variant object. + /// + public static implicit operator Variant(ulong[] value) + { + return new Variant(value); + } + + /// + /// Converts a float[] value to an Variant object. + /// + /// + /// Converts a float[] value to an Variant object. + /// + public static implicit operator Variant(float[] value) + { + return new Variant(value); + } + + /// + /// Converts a double[] value to an Variant object. + /// + /// + /// Converts a double[] value to an Variant object. + /// + public static implicit operator Variant(double[] value) + { + return new Variant(value); + } + + /// + /// Converts a string []value to an Variant object. + /// + /// + /// Converts a string []value to an Variant object. + /// + public static implicit operator Variant(string[] value) + { + return new Variant(value); + } + + /// + /// Converts a DateTime[] value to an Variant object. + /// + /// + /// Converts a DateTime[] value to an Variant object. + /// + public static implicit operator Variant(DateTime[] value) + { + return new Variant(value); + } + + /// + /// Converts a Guid[] value to an Variant object. + /// + /// + /// Converts a Guid[] value to an Variant object. + /// + public static implicit operator Variant(Guid[] value) + { + return new Variant(value); + } + + /// + /// Converts a Uuid[] value to an Variant object. + /// + /// + /// Converts a Uuid[] value to an Variant object. + /// + public static implicit operator Variant(Uuid[] value) + { + return new Variant(value); + } + + /// + /// Converts a byte[][] value to an Variant object. + /// + /// + /// Converts a byte[][] value to an Variant object. + /// + public static implicit operator Variant(byte[][] value) + { + return new Variant(value); + } + + /// + /// Converts a XmlElement[] value to an Variant object. + /// + /// + /// Converts a XmlElement[] value to an Variant object. + /// + public static implicit operator Variant(XmlElement[] value) + { + return new Variant(value); + } + + /// + /// Converts a NodeId[] value to an Variant object. + /// + /// + /// Converts a NodeId[] value to an Variant object. + /// + public static implicit operator Variant(NodeId[] value) + { + return new Variant(value); + } + + /// + /// Converts a ExpandedNodeId[] value to an Variant object. + /// + /// + /// Converts a ExpandedNodeId[] value to an Variant object. + /// + public static implicit operator Variant(ExpandedNodeId[] value) + { + return new Variant(value); + } + + /// + /// Converts a StatusCode[] value to an Variant object. + /// + /// + /// Converts a StatusCode[] value to an Variant object. + /// + public static implicit operator Variant(StatusCode[] value) + { + return new Variant(value); + } + + /// + /// Converts a QualifiedName[] value to an Variant object. + /// + /// + /// Converts a QualifiedName[] value to an Variant object. + /// + public static implicit operator Variant(QualifiedName[] value) + { + return new Variant(value); + } + + /// + /// Converts a LocalizedText[] value to an Variant object. + /// + /// + /// Converts a LocalizedText[] value to an Variant object. + /// + public static implicit operator Variant(LocalizedText[] value) + { + return new Variant(value); + } + + /// + /// Converts a ExtensionObject[] value to an Variant object. + /// + /// + /// Converts a ExtensionObject[] value to an Variant object. + /// + public static implicit operator Variant(ExtensionObject[] value) + { + return new Variant(value); + } + + /// + /// Converts a DataValue[] value to an Variant object. + /// + /// + /// Converts a DataValue[] value to an Variant object. + /// + public static implicit operator Variant(DataValue[] value) + { + return new Variant(value); + } + + /// + /// Converts a Variant[] value to an Variant object. + /// + /// + /// Converts a Variant[] value to an Variant object. + /// + public static implicit operator Variant(Variant[] value) + { + return new Variant(value); + } + + /// + /// Converts a object[] value to an Variant object. + /// + /// + /// Converts a object[] value to an Variant object. + /// + public static implicit operator Variant(object[] value) + { + return new Variant(value); + } + #endregion + + #region Static Fields + /// + /// An constant containing a null Variant structure. + /// + /// + /// An constant containing a null Variant structure. + /// + public static readonly Variant Null = new Variant(); + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the object. + /// + /// + /// Determines if the specified object is equal to the object. + /// + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + Variant? variant = obj as Variant?; + + if (variant != null) + { + return Utils.IsEqual(m_value, variant.Value.m_value); + } + + return false; + } + + /// + /// Returns a unique hashcode for the object. + /// + public override int GetHashCode() + { + if (this.m_value != null) + { + return m_value.GetHashCode(); + } + + return 0; + } + + /// + /// Converts the value to a human readable string. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region Public Methods + /// + /// Initializes the object with a bool value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(bool value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Boolean; + } + + /// + /// Initializes the object with a sbyte value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(sbyte value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.SByte; + } + + /// + /// Initializes the object with a byte value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(byte value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Byte; + } + + /// + /// Initializes the object with a short value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(short value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Int16; + } + + /// + /// Initializes the object with a ushort value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(ushort value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.UInt16; + } + + /// + /// Initializes the object with an int value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(int value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Int32; + } + + /// + /// Initializes the object with a uint value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(uint value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.UInt32; + } + + /// + /// Initializes the object with a long value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(long value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Int64; + } + + /// + /// Initializes the object with a ulong value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(ulong value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.UInt64; + } + + /// + /// Initializes the object with a float value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(float value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Float; + } + + /// + /// Initializes the object with a double value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(double value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Double; + } + + /// + /// Initializes the object with a string value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(string value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.String; + } + + /// + /// Initializes the object with a DateTime value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(DateTime value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.DateTime; + } + + /// + /// Initializes the object with a Guid value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(Guid value) + { + m_value = new Uuid(value); + m_typeInfo = TypeInfo.Scalars.Guid; + } + + /// + /// Initializes the object with a Uuid value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(Uuid value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.Guid; + } + + /// + /// Initializes the object with a byte[] value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(byte[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.ByteString; + } + + /// + /// Initializes the object with a XmlElement value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(XmlElement value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.XmlElement; + } + + /// + /// Initializes the object with a NodeId value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(NodeId value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.NodeId; + } + + /// + /// Initializes the object with a ExpandedNodeId value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(ExpandedNodeId value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.ExpandedNodeId; + } + + /// + /// Initializes the object with a StatusCode value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(StatusCode value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.StatusCode; + } + + /// + /// Initializes the object with a QualifiedName value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(QualifiedName value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.QualifiedName; + } + + /// + /// Initializes the object with a LocalizedText value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(LocalizedText value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.LocalizedText; + } + + /// + /// Initializes the object with a ExtensionObject value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(ExtensionObject value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.ExtensionObject; + } + + /// + /// Initializes the object with a DataValue value. + /// + /// + /// Initializes the object with a value. + /// + /// The value to set this Variant to + public void Set(DataValue value) + { + m_value = value; + m_typeInfo = TypeInfo.Scalars.DataValue; + } + + /// + /// Initializes the object with a bool array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(bool[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Boolean; + } + + /// + /// Initializes the object with a sbyte array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(sbyte[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.SByte; + } + + /// + /// Initializes the object with a short array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(short[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Int16; + } + + /// + /// Initializes the object with a ushort array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(ushort[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.UInt16; + } + + /// + /// Initializes the object with an int array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(int[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Int32; + } + + /// + /// Initializes the object with a uint array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(uint[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.UInt32; + } + + /// + /// Initializes the object with a long array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(long[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Int64; + } + + /// + /// Initializes the object with a ulong array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(ulong[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.UInt64; + } + + /// + /// Initializes the object with a float array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(float[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Float; + } + + /// + /// Initializes the object with a double array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(double[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Double; + } + + /// + /// Initializes the object with a string array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(string[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.String; + } + + /// + /// Initializes the object with a DateTime array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(DateTime[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.DateTime; + } + + /// + /// Initializes the object with a Guid array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(Guid[] value) + { + m_value = null; + + if (value != null) + { + Uuid[] uuids = new Uuid[value.Length]; + + for (int ii = 0; ii < value.Length; ii++) + { + uuids[ii] = new Uuid(value[ii]); + } + + m_value = uuids; + } + + m_typeInfo = TypeInfo.Arrays.Guid; + } + + /// + /// Initializes the object with a Uuid array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(Uuid[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Guid; + } + + /// + /// Initializes the object with a byte[] array value. + /// + /// + /// Initializes the object with a 2-d -array value. + /// + /// The 2-d -array value to set this Variant to + public void Set(byte[][] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.ByteString; + } + + /// + /// Initializes the object with a XmlElement array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(XmlElement[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.XmlElement; + } + + /// + /// Initializes the object with a NodeId array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(NodeId[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.NodeId; + } + + /// + /// Initializes the object with a ExpandedNodeId array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(ExpandedNodeId[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.ExpandedNodeId; + } + + /// + /// Initializes the object with a StatusCode array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(StatusCode[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.StatusCode; + } + + /// + /// Initializes the object with a QualifiedName array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(QualifiedName[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.QualifiedName; + } + + /// + /// Initializes the object with a LocalizedText array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(LocalizedText[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.LocalizedText; + } + + /// + /// Initializes the object with a ExtensionObject array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(ExtensionObject[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.ExtensionObject; + } + + /// + /// Initializes the object with a DataValue array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(DataValue[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.DataValue; + } + + /// + /// Initializes the object with a Variant array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(Variant[] value) + { + m_value = value; + m_typeInfo = TypeInfo.Arrays.Variant; + } + + /// + /// Initializes the object with a object array value. + /// + /// + /// Initializes the object with a -array value. + /// + /// The -array value to set this Variant to + public void Set(object[] value) + { + m_value = null; + + if (value != null) + { + Variant[] anyValues = new Variant[value.Length]; + + for (int ii = 0; ii < value.Length; ii++) + { + anyValues[ii] = new Variant(value[ii]); + } + + m_value = anyValues; + } + + m_typeInfo = TypeInfo.Arrays.Variant; + } + #endregion + + #region Private Methods + /// + /// Stores a scalar value in the variant. + /// + private void SetScalar(object value, TypeInfo typeInfo) + { + m_typeInfo = typeInfo; + + switch (typeInfo.BuiltInType) + { + // handle special types that can be converted to something the variant supports. + case BuiltInType.Null: + { + // check for enumerated value. + if (value.GetType().GetTypeInfo().IsEnum) + { + Set(Convert.ToInt32(value, CultureInfo.InvariantCulture)); + return; + } + + // check for matrix + Matrix matrix = value as Matrix; + + if (matrix != null) + { + m_value = matrix; + return; + } + + // not supported. + throw new ServiceResultException( + StatusCodes.BadNotSupported, + Utils.Format("The type '{0}' cannot be stored in a Variant object.", value.GetType().FullName)); + } + + // convert Guids to Uuids. + case BuiltInType.Guid: + { + Guid? guid = value as Guid?; + + if (guid != null) + { + m_value = new Uuid(guid.Value); + return; + } + + m_value = value; + return; + } + + // convert encodeables to extension objects. + case BuiltInType.ExtensionObject: + { + IEncodeable encodeable = value as IEncodeable; + + if (encodeable != null) + { + m_value = new ExtensionObject(encodeable); + return; + } + + m_value = value; + return; + } + + // convert encodeables to extension objects. + case BuiltInType.Variant: + { + m_value = ((Variant)value).Value; + m_typeInfo = TypeInfo.Construct(m_value); + return; + } + + // just save the value. + default: + { + m_value = value; + return; + } + } + } + + /// + /// Stores a on dimensional arrau value in the variant. + /// + private void SetArray(Array array, TypeInfo typeInfo) + { + m_typeInfo = typeInfo; + + switch (typeInfo.BuiltInType) + { + // handle special types that can be converted to something the variant supports. + case BuiltInType.Null: + { + // check for enumerated value. + if (array.GetType().GetElementType().GetTypeInfo().IsEnum) + { + int[] values = new int[array.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + values[ii] = Convert.ToInt32(array.GetValue(ii), CultureInfo.InvariantCulture); + } + + m_value = values; + return; + } + + // not supported. + throw new ServiceResultException( + StatusCodes.BadNotSupported, + Utils.Format("The type '{0}' cannot be stored in a Variant object.", array.GetType().FullName)); + } + + // convert Guids to Uuids. + case BuiltInType.Guid: + { + Guid[] guids = array as Guid[]; + + if (guids != null) + { + Set(guids); + return; + } + + m_value = array; + return; + } + + // convert encodeables to extension objects. + case BuiltInType.ExtensionObject: + { + IEncodeable[] encodeables = array as IEncodeable[]; + + if (encodeables != null) + { + ExtensionObject[] extensions = new ExtensionObject[encodeables.Length]; + + for (int ii = 0; ii < encodeables.Length; ii++) + { + extensions[ii] = new ExtensionObject(encodeables[ii]); + } + + m_value = extensions; + return; + } + + m_value = array; + return; + } + + // convert objects to variants objects. + case BuiltInType.Variant: + { + object[] objects = array as object[]; + + if (objects != null) + { + Variant[] variants = new Variant[objects.Length]; + + for (int ii = 0; ii < objects.Length; ii++) + { + variants[ii] = new Variant(objects[ii]); + } + + m_value = variants; + return; + } + + m_value = array; + return; + } + + // just save the value. + default: + { + m_value = array; + return; + } + } + } + + /// + /// Initializes the object with a collection. + /// + private void SetList(IList value, TypeInfo typeInfo) + { + m_typeInfo = typeInfo; + + Array array = TypeInfo.CreateArray(typeInfo.BuiltInType, value.Count); + + for (int ii = 0; ii < value.Count; ii++) + { + if (typeInfo.BuiltInType == BuiltInType.ExtensionObject) + { + IEncodeable encodeable = value[ii] as IEncodeable; + + if (encodeable != null) + { + array.SetValue(new ExtensionObject(encodeable), ii); + continue; + } + } + + array.SetValue(value[ii], ii); + } + + SetArray(array, typeInfo); + } + + /// + /// Initializes the object with an object. + /// + private void Set(object value, TypeInfo typeInfo) + { + // check for null values. + if (value == null) + { + m_value = null; + m_typeInfo = typeInfo; + return; + } + + // handle scalar values. + if (typeInfo.ValueRank < 0) + { + SetScalar(value, typeInfo); + return; + } + + Array array = value as Array; + + // handle one dimensional arrays. + if (typeInfo.ValueRank <= 1) + { + // handle arrays. + if (array != null) + { + SetArray(array, typeInfo); + return; + } + + // handle lists. + IList list = value as IList; + + if (list != null) + { + SetList(list, typeInfo); + return; + } + } + + // handle multidimensional array. + if (array != null) + { + m_value = new Matrix(array, typeInfo.BuiltInType); + m_typeInfo = typeInfo; + return; + } + + // handle matrix. + Matrix matrix = value as Matrix; + + if (matrix != null) + { + m_value = matrix; + m_typeInfo = matrix.TypeInfo; + return; + } + + // not supported. + throw new ServiceResultException( + StatusCodes.BadNotSupported, + Utils.Format("Arrays of the type '{0}' cannot be stored in a Variant object.", value.GetType().FullName)); + } + #endregion + + #region Private Members + private object m_value; + private TypeInfo m_typeInfo; + #endregion + } + + #region VariantCollection Class + /// + /// A collection of Variant objects. + /// + [CollectionDataContract(Name = "ListOfVariant", Namespace = Namespaces.OpcUaXsd, ItemName = "Variant")] + public partial class VariantCollection : List + { + /// + /// Initializes an empty collection. + /// + public VariantCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// + /// Provides a strongly-typed collection of objects. + /// + public VariantCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// + /// Initializes the collection with the specified capacity. + /// + /// The capacity to constrain the collection to + public VariantCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array of to a collection. + /// + /// An array of to convert to a collection + public static VariantCollection ToVariantCollection(Variant[] values) + { + if (values != null) + { + return new VariantCollection(values); + } + + return new VariantCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// + /// Converts an array of to a collection. + /// + /// An array of to convert to a collection + public static implicit operator VariantCollection(Variant[] values) + { + return ToVariantCollection(values); + } + + /// + /// Creates a deep copy of the collection. + /// + /// + /// Creates a deep copy of the collection. + /// + public new object MemberwiseClone() + { + VariantCollection clone = new VariantCollection(this.Count); + + foreach (Variant element in this) + { + clone.Add((Variant)Utils.Clone(element)); + } + + return clone; + } + }//class + #endregion + + /// + /// Wraps a multi-dimensional array for use within a Variant. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class Matrix : IFormattable + { + #region Constructors + /// + /// Initializes the matrix with a multidimensional array. + /// + public Matrix(Array value, BuiltInType builtInType) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + m_elements = value; + m_dimensions = new int[value.Rank]; + + for (int ii = 0; ii < m_dimensions.Length; ii++) + { + m_dimensions[ii] = value.GetLength(ii); + } + + m_elements = Utils.FlattenArray(value); + m_typeInfo = new TypeInfo(builtInType, m_dimensions.Length); + +#if DEBUG + TypeInfo sanityCheck = TypeInfo.Construct(m_elements); + System.Diagnostics.Debug.Assert(sanityCheck.BuiltInType == builtInType || (sanityCheck.BuiltInType == BuiltInType.ByteString && builtInType == BuiltInType.Byte)); +#endif + } + + /// + /// Initializes the matrix with a one dimensional array and a list of dimensions. + /// + public Matrix(Array elements, BuiltInType builtInType, params int[] dimensions) + { + if (elements == null) throw new ArgumentNullException(nameof(elements)); + + m_elements = elements; + m_dimensions = dimensions; + + if (dimensions != null && dimensions.Length > 0) + { + int length = 1; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + length *= dimensions[ii]; + } + + if (length != elements.Length) + { + throw new ArgumentException("The number of elements in the array does not match the dimensions."); + } + } + else + { + m_dimensions = new int[] { elements.Length }; + } + + m_typeInfo = new TypeInfo(builtInType, m_dimensions.Length); + +#if DEBUG + TypeInfo sanityCheck = TypeInfo.Construct(m_elements); + System.Diagnostics.Debug.Assert(sanityCheck.BuiltInType == builtInType || + (sanityCheck.BuiltInType == BuiltInType.Int32 && builtInType == BuiltInType.Enumeration) || + (sanityCheck.BuiltInType == BuiltInType.ByteString && builtInType == BuiltInType.Byte) || + (builtInType == BuiltInType.Variant)); +#endif + } + #endregion + + #region Public Members + /// + /// The elements of the matrix. + /// + /// An array of elements. + public Array Elements => m_elements; + + /// + /// The dimensions of the matrix. + /// + /// The dimensions of the array. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] + public int[] Dimensions => m_dimensions; + + /// + /// The type information for the matrix. + /// + /// The type information. + public TypeInfo TypeInfo => m_typeInfo; + + /// + /// Returns the flattened array as a multi-dimensional array. + /// + public Array ToArray() + { + Array array = Array.CreateInstance(m_elements.GetType().GetElementType(), m_dimensions); + + int[] indexes = new int[m_dimensions.Length]; + + for (int ii = 0; ii < m_elements.Length; ii++) + { + array.SetValue(m_elements.GetValue(ii), indexes); + + for (int jj = indexes.Length - 1; jj >= 0; jj--) + { + indexes[jj]++; + + if (indexes[jj] < m_dimensions[jj]) + { + break; + } + + indexes[jj] = 0; + } + } + + return array; + } + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the object. + /// + /// + /// Determines if the specified object is equal to the object. + /// + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + Matrix matrix = obj as Matrix; + + if (matrix != null) + { + if (!m_typeInfo.Equals(matrix.TypeInfo)) + { + return false; + } + if (!Utils.IsEqual(m_dimensions, matrix.Dimensions)) + { + return false; + } + return Utils.IsEqual(m_elements, matrix.Elements); + } + + return false; + } + + /// + /// Returns a unique hashcode for the object. + /// + public override int GetHashCode() + { + if (m_elements != null) + { + return m_elements.GetHashCode(); + } + if (m_typeInfo != null) + { + return m_typeInfo.GetHashCode(); + } + if (m_dimensions != null) + { + return m_dimensions.GetHashCode(); + } + return base.GetHashCode(); + } + #endregion + + #region IFormattable Members + /// + /// Returns the string representation of the object. + /// + /// (Unused) Always pass a NULL value + /// The format-provider to use. If unsure, pass an empty string or null + /// + /// A containing the value of the current instance in the specified format. + /// + /// + /// Returns the string representation of the object. + /// + /// Thrown when the 'format' argument is NOT null. + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + StringBuilder buffer = new StringBuilder(); + + buffer.AppendFormat("{0}[", m_elements.GetType().GetElementType().Name); + + for (int ii = 0; ii < m_dimensions.Length; ii++) + { + if (ii > 0) + { + buffer.Append(","); + } + + buffer.AppendFormat(formatProvider, "{0}", m_dimensions[ii]); + } + + buffer.AppendFormat(formatProvider, "]"); + + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region ICloneable Members + /// + /// Makes a deep copy of the object. + /// + /// + /// A new object that is a copy of this instance. + /// + public new object MemberwiseClone() + { + return new Matrix((Array)Utils.Clone(m_elements), m_typeInfo.BuiltInType, (int[])Utils.Clone(m_dimensions)); + } + #endregion + + #region Private Fields + private Array m_elements; + private int[] m_dimensions; + private TypeInfo m_typeInfo; + #endregion + } + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Constants/Attributes.Helpers.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Constants/Attributes.Helpers.cs new file mode 100644 index 00000000..8654364a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Constants/Attributes.Helpers.cs @@ -0,0 +1,413 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Reflection; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A class that defines constants used by UA applications. + /// + public static partial class Attributes + { + #region Static Helper Functions + /// + /// Returns true is the attribute id is valid. + /// + public static bool IsValid(uint attributeId) + { + return (attributeId >= Attributes.NodeId && attributeId <= Attributes.AccessLevelEx); + } + + /// + /// Returns the browse name for the attribute. + /// + public static string GetBrowseName(uint identifier) + { + FieldInfo[] fields = typeof(Attributes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (identifier == (uint)field.GetValue(typeof(Attributes))) + { + return field.Name; + } + } + + return System.String.Empty; + } + + /// + /// Returns the browse names for all attributes. + /// + public static string[] GetBrowseNames() + { + FieldInfo[] fields = typeof(Attributes).GetFields(BindingFlags.Public | BindingFlags.Static); + + int ii = 0; + + string[] names = new string[fields.Length]; + + foreach (FieldInfo field in fields) + { + names[ii++] = field.Name; + } + + return names; + } + + /// + /// Returns the id for the attribute with the specified browse name. + /// + public static uint GetIdentifier(string browseName) + { + FieldInfo[] fields = typeof(Attributes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (field.Name == browseName) + { + return (uint)field.GetValue(typeof(Attributes)); + } + } + + return 0; + } + + /// + /// Returns the ids for all attributes. + /// + public static uint[] GetIdentifiers() + { + FieldInfo[] fields = typeof(Attributes).GetFields(BindingFlags.Public | BindingFlags.Static); + + int ii = 0; + uint[] ids = new uint[fields.Length]; + + foreach (FieldInfo field in fields) + { + ids[ii++] = (uint)field.GetValue(typeof(Attributes)); + } + + return ids; + } + + /// + /// Returns the ids for all attributes which are valid for the at least one of the node classes specified by the mask. + /// + public static UInt32Collection GetIdentifiers(NodeClass nodeClass) + { + FieldInfo[] fields = typeof(Attributes).GetFields(BindingFlags.Public | BindingFlags.Static); + + UInt32Collection ids = new UInt32Collection(fields.Length); + + foreach (FieldInfo field in fields) + { + uint id = (uint)field.GetValue(typeof(Attributes)); + + if (IsValid(nodeClass, id)) + { + ids.Add(id); + } + } + + return ids; + } + + /// + /// Returns the built type required for an attribute. + /// + public static BuiltInType GetBuiltInType(uint attributeId) + { + switch (attributeId) + { + case Value: return BuiltInType.Variant; + case DisplayName: return BuiltInType.LocalizedText; + case Description: return BuiltInType.LocalizedText; + case WriteMask: return BuiltInType.UInt32; + case UserWriteMask: return BuiltInType.UInt32; + case NodeId: return BuiltInType.NodeId; + case NodeClass: return BuiltInType.Int32; + case BrowseName: return BuiltInType.QualifiedName; + case IsAbstract: return BuiltInType.Boolean; + case Symmetric: return BuiltInType.Boolean; + case InverseName: return BuiltInType.LocalizedText; + case ContainsNoLoops: return BuiltInType.Boolean; + case EventNotifier: return BuiltInType.Byte; + case DataType: return BuiltInType.NodeId; + case ValueRank: return BuiltInType.Int32; + case AccessLevel: return BuiltInType.Byte; + case UserAccessLevel: return BuiltInType.Byte; + case MinimumSamplingInterval: return BuiltInType.Double; + case Historizing: return BuiltInType.Boolean; + case Executable: return BuiltInType.Boolean; + case UserExecutable: return BuiltInType.Boolean; + case ArrayDimensions: return BuiltInType.UInt32; + case DataTypeDefinition: return BuiltInType.ExtensionObject; + case RolePermissions: return BuiltInType.Variant; + case UserRolePermissions: return BuiltInType.Variant; + case AccessRestrictions: return BuiltInType.UInt16; + case AccessLevelEx: return BuiltInType.UInt32; + } + + return BuiltInType.Null; + } + + /// + /// Returns the data type id for the attribute. + /// + public static NodeId GetDataTypeId(uint attributeId) + { + switch (attributeId) + { + case Value: return DataTypes.BaseDataType; + case DisplayName: return DataTypes.LocalizedText; + case Description: return DataTypes.LocalizedText; + case WriteMask: return DataTypes.UInt32; + case UserWriteMask: return DataTypes.UInt32; + case NodeId: return DataTypes.NodeId; + case NodeClass: return DataTypes.Enumeration; + case BrowseName: return DataTypes.QualifiedName; + case IsAbstract: return DataTypes.Boolean; + case Symmetric: return DataTypes.Boolean; + case InverseName: return DataTypes.LocalizedText; + case ContainsNoLoops: return DataTypes.Boolean; + case EventNotifier: return DataTypes.Byte; + case DataType: return DataTypes.NodeId; + case ValueRank: return DataTypes.Int32; + case AccessLevel: return DataTypes.Byte; + case UserAccessLevel: return DataTypes.Byte; + case MinimumSamplingInterval: return DataTypes.Duration; + case Historizing: return DataTypes.Boolean; + case Executable: return DataTypes.Boolean; + case UserExecutable: return DataTypes.Boolean; + case ArrayDimensions: return DataTypes.UInt32; + case DataTypeDefinition: return DataTypes.Structure; + case RolePermissions: return DataTypes.RolePermissionType; + case UserRolePermissions: return DataTypes.RolePermissionType; + case AccessRestrictions: return DataTypes.UInt16; + case AccessLevelEx: return DataTypes.UInt32; + } + + return null; + } + + /// + /// Returns true if the corresponding bit is set in the attribute write mask. + /// + public static bool IsWriteable(uint attributeId, uint writeMask) + { + switch (attributeId) + { + case Value: return (writeMask & (uint)AttributeWriteMask.ValueForVariableType) != 0; + case DisplayName: return (writeMask & (uint)AttributeWriteMask.DisplayName) != 0; + case Description: return (writeMask & (uint)AttributeWriteMask.Description) != 0; + case WriteMask: return (writeMask & (uint)AttributeWriteMask.WriteMask) != 0; + case UserWriteMask: return (writeMask & (uint)AttributeWriteMask.UserWriteMask) != 0; + case NodeId: return (writeMask & (uint)AttributeWriteMask.NodeId) != 0; + case NodeClass: return (writeMask & (uint)AttributeWriteMask.NodeClass) != 0; + case BrowseName: return (writeMask & (uint)AttributeWriteMask.BrowseName) != 0; + case IsAbstract: return (writeMask & (uint)AttributeWriteMask.IsAbstract) != 0; + case Symmetric: return (writeMask & (uint)AttributeWriteMask.Symmetric) != 0; + case InverseName: return (writeMask & (uint)AttributeWriteMask.InverseName) != 0; + case ContainsNoLoops: return (writeMask & (uint)AttributeWriteMask.ContainsNoLoops) != 0; + case EventNotifier: return (writeMask & (uint)AttributeWriteMask.EventNotifier) != 0; + case DataType: return (writeMask & (uint)AttributeWriteMask.DataType) != 0; + case ValueRank: return (writeMask & (uint)AttributeWriteMask.ValueRank) != 0; + case AccessLevel: return (writeMask & (uint)AttributeWriteMask.AccessLevel) != 0; + case UserAccessLevel: return (writeMask & (uint)AttributeWriteMask.UserAccessLevel) != 0; + case MinimumSamplingInterval: return (writeMask & (uint)AttributeWriteMask.MinimumSamplingInterval) != 0; + case Historizing: return (writeMask & (uint)AttributeWriteMask.Historizing) != 0; + case Executable: return (writeMask & (uint)AttributeWriteMask.Executable) != 0; + case UserExecutable: return (writeMask & (uint)AttributeWriteMask.UserExecutable) != 0; + case ArrayDimensions: return (writeMask & (uint)AttributeWriteMask.ArrayDimensions) != 0; + case DataTypeDefinition: return (writeMask & (uint)AttributeWriteMask.DataTypeDefinition) != 0; + case RolePermissions: return (writeMask & (uint)AttributeWriteMask.RolePermissions) != 0; + case AccessRestrictions: return (writeMask & (uint)AttributeWriteMask.AccessRestrictions) != 0; + case AccessLevelEx: return (writeMask & (uint)AttributeWriteMask.AccessLevelEx) != 0; + } + + return false; + } + + /// + /// Sets the corresponding bit in the attribute write mask and returns the result. + /// + public static uint SetWriteable(uint attributeId, uint writeMask) + { + switch (attributeId) + { + case Value: return writeMask | (uint)AttributeWriteMask.ValueForVariableType; + case DisplayName: return writeMask | (uint)AttributeWriteMask.DisplayName; + case Description: return writeMask | (uint)AttributeWriteMask.Description; + case WriteMask: return writeMask | (uint)AttributeWriteMask.WriteMask; + case UserWriteMask: return writeMask | (uint)AttributeWriteMask.UserWriteMask; + case NodeId: return writeMask | (uint)AttributeWriteMask.NodeId; + case NodeClass: return writeMask | (uint)AttributeWriteMask.NodeClass; + case BrowseName: return writeMask | (uint)AttributeWriteMask.BrowseName; + case IsAbstract: return writeMask | (uint)AttributeWriteMask.IsAbstract; + case Symmetric: return writeMask | (uint)AttributeWriteMask.Symmetric; + case InverseName: return writeMask | (uint)AttributeWriteMask.InverseName; + case ContainsNoLoops: return writeMask | (uint)AttributeWriteMask.ContainsNoLoops; + case EventNotifier: return writeMask | (uint)AttributeWriteMask.EventNotifier; + case DataType: return writeMask | (uint)AttributeWriteMask.DataType; + case ValueRank: return writeMask | (uint)AttributeWriteMask.ValueRank; + case AccessLevel: return writeMask | (uint)AttributeWriteMask.AccessLevel; + case UserAccessLevel: return writeMask | (uint)AttributeWriteMask.UserAccessLevel; + case MinimumSamplingInterval: return writeMask | (uint)AttributeWriteMask.MinimumSamplingInterval; + case Historizing: return writeMask | (uint)AttributeWriteMask.Historizing; + case Executable: return writeMask | (uint)AttributeWriteMask.Executable; + case UserExecutable: return writeMask | (uint)AttributeWriteMask.UserExecutable; + case ArrayDimensions: return writeMask | (uint)AttributeWriteMask.ArrayDimensions; + case DataTypeDefinition: return writeMask | (uint)AttributeWriteMask.DataTypeDefinition; + case RolePermissions: return writeMask | (uint)AttributeWriteMask.RolePermissions; + case AccessRestrictions: return writeMask | (uint)AttributeWriteMask.AccessRestrictions; + case AccessLevelEx: return writeMask | (uint)AttributeWriteMask.AccessLevelEx; + } + + return writeMask; + } + + /// + /// Returns the value rank for the attribute. + /// + public static int GetValueRank(uint attributeId) + { + if (attributeId == Attributes.Value) + { + return ValueRanks.Any; + } + + if (attributeId == Attributes.ArrayDimensions) + { + return ValueRanks.OneDimension; + } + + return ValueRanks.Scalar; + } + + /// + /// Checks if the attribute is valid for at least one of node classes specified in the mask. + /// + public static bool IsValid(NodeClass nodeClass, uint attributeId) + { + switch (attributeId) + { + case NodeId: + case NodeClass: + case BrowseName: + case DisplayName: + case Description: + case WriteMask: + case UserWriteMask: + case RolePermissions: + case UserRolePermissions: + case AccessRestrictions: + { + return true; + } + + case Value: + case DataType: + case ValueRank: + case ArrayDimensions: + { + return (nodeClass & (Opc.Ua.NodeClass.VariableType | Opc.Ua.NodeClass.Variable)) != 0; + } + + case IsAbstract: + { + return (nodeClass & (Opc.Ua.NodeClass.VariableType | Opc.Ua.NodeClass.ObjectType | Opc.Ua.NodeClass.ReferenceType | Opc.Ua.NodeClass.DataType)) != 0; + } + + case Symmetric: + case InverseName: + { + return (nodeClass & Opc.Ua.NodeClass.ReferenceType) != 0; + } + + case ContainsNoLoops: + { + return (nodeClass & Opc.Ua.NodeClass.View) != 0; + } + + case EventNotifier: + { + return (nodeClass & (Opc.Ua.NodeClass.Object | Opc.Ua.NodeClass.View)) != 0; + } + + case AccessLevel: + case UserAccessLevel: + case MinimumSamplingInterval: + case Historizing: + case AccessLevelEx: + { + return (nodeClass & Opc.Ua.NodeClass.Variable) != 0; + } + + case Executable: + case UserExecutable: + { + return (nodeClass & Opc.Ua.NodeClass.Method) != 0; + } + + case DataTypeDefinition: + { + return (nodeClass & Opc.Ua.NodeClass.DataType) != 0; + } + } + + return false; + } + + /// + /// Returns the AttributeWriteMask for the attribute. + /// + public static AttributeWriteMask GetMask(uint attributeId) + { + switch (attributeId) + { + case NodeId: return AttributeWriteMask.NodeId; + case NodeClass: return AttributeWriteMask.NodeClass; + case BrowseName: return AttributeWriteMask.BrowseName; + case DisplayName: return AttributeWriteMask.DisplayName; + case Description: return AttributeWriteMask.Description; + case WriteMask: return AttributeWriteMask.WriteMask; + case UserWriteMask: return AttributeWriteMask.UserWriteMask; + case DataType: return AttributeWriteMask.DataType; + case ValueRank: return AttributeWriteMask.ValueRank; + case ArrayDimensions: return AttributeWriteMask.ArrayDimensions; + case IsAbstract: return AttributeWriteMask.IsAbstract; + case Symmetric: return AttributeWriteMask.Symmetric; + case InverseName: return AttributeWriteMask.InverseName; + case ContainsNoLoops: return AttributeWriteMask.ContainsNoLoops; + case EventNotifier: return AttributeWriteMask.EventNotifier; + case AccessLevel: return AttributeWriteMask.AccessLevel; + case UserAccessLevel: return AttributeWriteMask.UserAccessLevel; + case MinimumSamplingInterval: return AttributeWriteMask.MinimumSamplingInterval; + case Historizing: return AttributeWriteMask.Historizing; + case Executable: return AttributeWriteMask.Executable; + case UserExecutable: return AttributeWriteMask.UserExecutable; + case DataTypeDefinition: return AttributeWriteMask.DataTypeDefinition; + case RolePermissions: return AttributeWriteMask.RolePermissions; + //case UserRolePermissions: return AttributeWriteMask.UserRolePermissions; + case AccessRestrictions: return AttributeWriteMask.AccessRestrictions; + case AccessLevelEx: return AttributeWriteMask.AccessLevelEx; + } + + return 0; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Constants/StatusCodes.Helpers.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Constants/StatusCodes.Helpers.cs new file mode 100644 index 00000000..a4259238 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Constants/StatusCodes.Helpers.cs @@ -0,0 +1,79 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Reflection; + +namespace Opc.Ua +{ + /// + /// A class that defines constants used by UA applications. + /// + public static partial class StatusCodes + { + #region Static Helper Functions + /// + /// Returns the browse name for the attribute. + /// + public static string GetBrowseName(uint identifier) + { + FieldInfo[] fields = typeof(StatusCodes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (identifier == (uint)field.GetValue(typeof(StatusCodes))) + { + return field.Name; + } + } + + return System.String.Empty; + } + + /// + /// Returns the browse names for all attributes. + /// + public static string[] GetBrowseNames() + { + FieldInfo[] fields = typeof(StatusCodes).GetFields(BindingFlags.Public | BindingFlags.Static); + + int ii = 0; + + string[] names = new string[fields.Length]; + + foreach (FieldInfo field in fields) + { + names[ii++] = field.Name; + } + + return names; + } + + /// + /// Returns the id for the attribute with the specified browse name. + /// + public static uint GetIdentifier(string browseName) + { + FieldInfo[] fields = typeof(StatusCodes).GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (field.Name == browseName) + { + return (uint)field.GetValue(typeof(StatusCodes)); + } + } + + return 0; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs new file mode 100644 index 00000000..bb7bfa4c --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs @@ -0,0 +1,2240 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.IO; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Decodes objects from a UA Binary encoded stream. + /// + public class BinaryDecoder : IDecoder, IDisposable + { + #region Constructor + /// + /// Creates a decoder that reads from a memory buffer. + /// + public BinaryDecoder(byte[] buffer, ServiceMessageContext context) + : + this(buffer, 0, buffer.Length, context) + { + } + + /// + /// Creates a decoder that reads from a memory buffer. + /// + public BinaryDecoder(byte[] buffer, int start, int count, ServiceMessageContext context) + { + m_istrm = new MemoryStream(buffer, start, count, false); + m_reader = new BinaryReader(m_istrm); + m_context = context; + m_nestingLevel = 0; + } + + /// + /// Creates a decoder that reads from a stream. + /// + public BinaryDecoder(Stream stream, ServiceMessageContext context) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + m_istrm = stream; + m_reader = new BinaryReader(m_istrm); + m_context = context; + m_nestingLevel = 0; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_reader != null) + { + m_reader.Dispose(); + } + + if (m_istrm != null) + { + m_istrm.Dispose(); + } + } + } + #endregion + + #region Public Methods + /// + /// Initializes the tables used to map namespace and server uris during decoding. + /// + /// The namespaces URIs referenced by the data being decoded. + /// The server URIs referenced by the data being decoded. + public void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris) + { + m_namespaceMappings = null; + + if (namespaceUris != null && m_context.NamespaceUris != null) + { + m_namespaceMappings = m_context.NamespaceUris.CreateMapping(namespaceUris, false); + } + + m_serverMappings = null; + + if (serverUris != null && m_context.ServerUris != null) + { + m_serverMappings = m_context.ServerUris.CreateMapping(serverUris, false); + } + } + + /// + /// Completes reading and closes the stream. + /// + public void Close() + { + m_reader.Dispose(); + } + + /// + /// Returns the current position in the stream. + /// + public int Position => (int)m_reader.BaseStream.Position; + + /// + /// Gets the stream that the decoder is reading from. + /// + public Stream BaseStream => m_reader.BaseStream; + + /// + /// Decodes a message from a stream. + /// + public static IEncodeable DecodeMessage(Stream stream, System.Type expectedType, ServiceMessageContext context) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + BinaryDecoder decoder = new BinaryDecoder(stream, context); + + try + { + return decoder.DecodeMessage(expectedType); + } + finally + { + decoder.Close(); + } + } + + /// + /// Decodes a session-less message from a buffer. + /// + public static IEncodeable DecodeSessionLessMessage(byte[] buffer, ServiceMessageContext context) + { + if (buffer == null) throw new ArgumentNullException(nameof(buffer)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + BinaryDecoder decoder = new BinaryDecoder(buffer, context); + + try + { + // read the node id. + NodeId typeId = decoder.ReadNodeId(null); + + // convert to absolute node id. + ExpandedNodeId absoluteId = NodeId.ToExpandedNodeId(typeId, context.NamespaceUris); + + // lookup message session-less envelope type. + Type actualType = context.Factory.GetSystemType(absoluteId); + + if (actualType == null || actualType != typeof(SessionlessInvokeRequestType)) + { + throw new ServiceResultException(StatusCodes.BadEncodingError, Utils.Format("Cannot decode session-less service message with type id: {0}.", absoluteId)); + } + + // decode the actual message. + SessionLessServiceMessage message = new SessionLessServiceMessage(); + + message.Decode(decoder); + + return message.Message; + } + finally + { + decoder.Close(); + } + } + + /// + /// Decodes a message from a buffer. + /// + public static IEncodeable DecodeMessage(byte[] buffer, System.Type expectedType, ServiceMessageContext context) + { + if (buffer == null) throw new ArgumentNullException(nameof(buffer)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + BinaryDecoder decoder = new BinaryDecoder(buffer, context); + + try + { + return decoder.DecodeMessage(expectedType); + } + finally + { + decoder.Close(); + } + } + + /// + /// Decodes an object from a buffer. + /// + public IEncodeable DecodeMessage(System.Type expectedType) + { + long start = m_istrm.Position; + + // read the node id. + NodeId typeId = ReadNodeId(null); + + // convert to absolute node id. + ExpandedNodeId absoluteId = NodeId.ToExpandedNodeId(typeId, m_context.NamespaceUris); + + // lookup message type. + Type actualType = m_context.Factory.GetSystemType(absoluteId); + + if (actualType == null) + { + throw new ServiceResultException(StatusCodes.BadEncodingError, Utils.Format("Cannot decode message with type id: {0}.", absoluteId)); + } + + // read the message. + IEncodeable message = ReadEncodeable(null, actualType); + + // check that the max message size was not exceeded. + if (m_context.MaxMessageSize > 0 && m_context.MaxMessageSize < (int)(m_istrm.Position - start)) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxMessageSize {0} < {1}", + m_context.MaxMessageSize, + (int)(m_istrm.Position - start)); + } + + // return the message. + return message; + } + + /// + /// Loads a string table from a binary stream. + /// + public bool LoadStringTable(StringTable stringTable) + { + int count = ReadInt32(null); + + if (count < -0) + { + return false; + } + + for (uint ii = 0; ii < count; ii++) + { + stringTable.Append(ReadString(null)); + } + + return true; + } + #endregion + + #region IDecoder Members + /// + /// The type of encoding being used. + /// + public EncodingType EncodingType => EncodingType.Binary; + + /// + /// The message context associated with the decoder. + /// + public ServiceMessageContext Context => m_context; + + /// + /// Pushes a namespace onto the namespace stack. + /// + public void PushNamespace(string namespaceUri) + { + // not used in the binary encoding. + } + + /// + /// Pops a namespace from the namespace stack. + /// + public void PopNamespace() + { + // not used in the binary encoding. + } + + /// + /// Reads a boolean from the stream. + /// + public bool ReadBoolean(string fieldName) + { + return m_reader.ReadBoolean(); + } + + /// + /// Reads a sbyte from the stream. + /// + public sbyte ReadSByte(string fieldName) + { + return m_reader.ReadSByte(); + } + + /// + /// Reads a byte from the stream. + /// + public byte ReadByte(string fieldName) + { + return m_reader.ReadByte(); + } + + /// + /// Reads a short from the stream. + /// + public short ReadInt16(string fieldName) + { + return m_reader.ReadInt16(); + } + + /// + /// Reads a ushort from the stream. + /// + public ushort ReadUInt16(string fieldName) + { + return m_reader.ReadUInt16(); + } + + /// + /// Reads an int from the stream. + /// + public int ReadInt32(string fieldName) + { + return m_reader.ReadInt32(); + } + + /// + /// Reads a uint from the stream. + /// + public uint ReadUInt32(string fieldName) + { + return m_reader.ReadUInt32(); + } + + /// + /// Reads a long from the stream. + /// + public long ReadInt64(string fieldName) + { + return m_reader.ReadInt64(); + } + + /// + /// Reads a ulong from the stream. + /// + public ulong ReadUInt64(string fieldName) + { + return m_reader.ReadUInt64(); + } + + /// + /// Reads a float from the stream. + /// + public float ReadFloat(string fieldName) + { + return m_reader.ReadSingle(); + } + + /// + /// Reads a double from the stream. + /// + public double ReadDouble(string fieldName) + { + return m_reader.ReadDouble(); + } + + /// + /// Reads a string from the stream. + /// + public string ReadString(string fieldName) + { + return ReadString(fieldName, m_context.MaxStringLength); + } + + /// + /// Reads a string from the stream (throws an exception if its length exceeds the limit specified). + /// + public string ReadString(string fieldName, int maxStringLength) + { + int length = m_reader.ReadInt32(); + + if (length < 0) + { + return null; + } + + if (length == 0) + { + return string.Empty; + } + + if (maxStringLength > 0 && maxStringLength < length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxStringLength {0} < {1}", + maxStringLength, + length); + } + + byte[] bytes = m_reader.ReadBytes(length); + + // If 0 terminated, decrease length by one before converting to string + var utf8StringLength = bytes[bytes.Length - 1] == 0 ? bytes.Length - 1 : bytes.Length; + return Encoding.UTF8.GetString(bytes, 0, utf8StringLength); + } + + /// + /// Reads a UTC date/time from the stream. + /// + public DateTime ReadDateTime(string fieldName) + { + long ticks = m_reader.ReadInt64(); + + if (ticks >= (Int64.MaxValue - Utils.TimeBase.Ticks)) + { + return DateTime.MaxValue; + } + + ticks += Utils.TimeBase.Ticks; + + if (ticks >= DateTime.MaxValue.Ticks) + { + return DateTime.MaxValue; + } + + if (ticks <= Utils.TimeBase.Ticks) + { + return DateTime.MinValue; + } + + return new DateTime(ticks, DateTimeKind.Utc); + } + + /// + /// Reads a GUID from the stream. + /// + public Uuid ReadGuid(string fieldName) + { + byte[] bytes = m_reader.ReadBytes(16); + return new Uuid(new Guid(bytes)); + } + + /// + /// Reads a byte string from the stream. + /// + public byte[] ReadByteString(string fieldName) + { + return ReadByteString(fieldName, m_context.MaxByteStringLength); + } + + /// + /// Reads a byte string from the stream. + /// + public byte[] ReadByteString(string fieldName, int maxByteStringLength) + { + int length = m_reader.ReadInt32(); + + if (length < 0) + { + return null; + } + + if (maxByteStringLength > 0 && maxByteStringLength < length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxByteStringLength {0} < {1}", + maxByteStringLength, + length); + } + + return m_reader.ReadBytes(length); + } + + /// + /// Reads an XmlElement from the stream. + /// + public XmlElement ReadXmlElement(string fieldName) + { + byte[] bytes = ReadByteString(fieldName); + + if (bytes == null || bytes.Length == 0) + { + return null; + } + + XmlDocument document = new XmlDocument(); + + try + { + // If 0 terminated, decrease length by one before converting to string + var utf8StringLength = bytes[bytes.Length - 1] == 0 ? bytes.Length - 1 : bytes.Length; + string xmlString = Encoding.UTF8.GetString(bytes, 0, utf8StringLength); + + using (XmlReader reader = XmlReader.Create(new StringReader(xmlString), new XmlReaderSettings() + { DtdProcessing = System.Xml.DtdProcessing.Prohibit })) + { + document.Load(reader); + } + } + catch (XmlException) + { + return null; + } + + return document.DocumentElement; + } + + /// + /// Reads an NodeId from the stream. + /// + public NodeId ReadNodeId(string fieldName) + { + byte encodingByte = m_reader.ReadByte(); + + NodeId value = new NodeId(); + + ReadNodeIdBody(encodingByte, value); + + if (m_namespaceMappings != null && m_namespaceMappings.Length > value.NamespaceIndex) + { + value.SetNamespaceIndex(m_namespaceMappings[value.NamespaceIndex]); + } + + return value; + } + + /// + /// Reads an ExpandedNodeId from the stream. + /// + public ExpandedNodeId ReadExpandedNodeId(string fieldName) + { + byte encodingByte = m_reader.ReadByte(); + + ExpandedNodeId value = new ExpandedNodeId(); + + NodeId body = new NodeId(); + ReadNodeIdBody(encodingByte, body); + value.InnerNodeId = body; + + string namespaceUri = null; + uint serverIndex = 0; + + // read the namespace uri if present. + if ((encodingByte & 0x80) != 0) + { + namespaceUri = ReadString(null); + value.SetNamespaceUri(namespaceUri); + } + + // read the server index if present. + if ((encodingByte & 0x40) != 0) + { + serverIndex = ReadUInt32(null); + value.SetServerIndex(serverIndex); + } + + if (m_namespaceMappings != null && m_namespaceMappings.Length > value.NamespaceIndex) + { + value.SetNamespaceIndex(m_namespaceMappings[value.NamespaceIndex]); + } + + if (m_serverMappings != null && m_serverMappings.Length > value.ServerIndex) + { + value.SetServerIndex(m_serverMappings[value.NamespaceIndex]); + } + + return value; + + } + + /// + /// Reads an StatusCode from the stream. + /// + public StatusCode ReadStatusCode(string fieldName) + { + return m_reader.ReadUInt32(); + } + + /// + /// Reads an DiagnosticInfo from the stream. + /// + public DiagnosticInfo ReadDiagnosticInfo(string fieldName) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + // read the encoding byte. + byte encodingByte = m_reader.ReadByte(); + + DiagnosticInfo value = new DiagnosticInfo(); + + // read the fields of the diagnostic info structure. + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.SymbolicId) != 0) + { + value.SymbolicId = ReadInt32(null); + } + + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.NamespaceUri) != 0) + { + value.NamespaceUri = ReadInt32(null); + } + + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.Locale) != 0) + { + value.Locale = ReadInt32(null); + } + + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.LocalizedText) != 0) + { + value.LocalizedText = ReadInt32(null); + } + + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.AdditionalInfo) != 0) + { + value.AdditionalInfo = ReadString(null); + } + + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.InnerStatusCode) != 0) + { + value.InnerStatusCode = ReadStatusCode(null); + } + + if ((encodingByte & (byte)DiagnosticInfoEncodingBits.InnerDiagnosticInfo) != 0) + { + value.InnerDiagnosticInfo = ReadDiagnosticInfo(null); + } + + m_nestingLevel--; + + return value; + } + + /// + /// Reads an QualifiedName from the stream. + /// + public QualifiedName ReadQualifiedName(string fieldName) + { + ushort namespaceIndex = ReadUInt16(null); + string name = ReadString(null); + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + return new QualifiedName(name, namespaceIndex); + } + + /// + /// Reads an LocalizedText from the stream. + /// + public LocalizedText ReadLocalizedText(string fieldName) + { + // read the encoding byte. + byte encodingByte = m_reader.ReadByte(); + + string text = null; + string locale = null; + + // read the fields of the diagnostic info structure. + if ((encodingByte & (byte)LocalizedTextEncodingBits.Locale) != 0) + { + locale = ReadString(null); + } + + if ((encodingByte & (byte)LocalizedTextEncodingBits.Text) != 0) + { + text = ReadString(null); + } + + return new LocalizedText(locale, text); + } + + /// + /// Reads an Variant from the stream. + /// + public Variant ReadVariant(string fieldName) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + Variant value = ReadVariantValue(fieldName); + + m_nestingLevel--; + + return value; + } + + /// + /// Reads an DataValue from the stream. + /// + public DataValue ReadDataValue(string fieldName) + { + // read the encoding byte. + byte encodingByte = m_reader.ReadByte(); + + DataValue value = new DataValue(); + + // read the fields of the DataValue structure. + if ((encodingByte & (byte)DataValueEncodingBits.Value) != 0) + { + value.WrappedValue = ReadVariant(null); + } + + if ((encodingByte & (byte)DataValueEncodingBits.StatusCode) != 0) + { + value.StatusCode = ReadStatusCode(null); + } + + if ((encodingByte & (byte)DataValueEncodingBits.SourceTimestamp) != 0) + { + value.SourceTimestamp = ReadDateTime(null); + } + + if ((encodingByte & (byte)DataValueEncodingBits.SourcePicoseconds) != 0) + { + value.SourcePicoseconds = ReadUInt16(null); + } + + if ((encodingByte & (byte)DataValueEncodingBits.ServerTimestamp) != 0) + { + value.ServerTimestamp = ReadDateTime(null); + } + + if ((encodingByte & (byte)DataValueEncodingBits.ServerPicoseconds) != 0) + { + value.ServerPicoseconds = ReadUInt16(null); + } + + return value; + } + + /// + /// Reads an ExtensionObject from the stream. + /// + public ExtensionObject ReadExtensionObject(string fieldName) + { + return ReadExtensionObject(); + } + + /// + /// Reads an encodeable object from the stream. + /// + /// The encodeable object field name + /// The system type of the encopdeable object to be read + /// The TypeId for the instance that will be read. + /// An object that was read from the stream. + public IEncodeable ReadEncodeable(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null) + { + if (systemType == null) throw new ArgumentNullException(nameof(systemType)); + + IEncodeable encodeable = Activator.CreateInstance(systemType) as IEncodeable; + + if (encodeable == null) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Cannot decode type '{0}'.", systemType.FullName)); + } + + if (encodeableTypeId != null) + { + // set type identifier for custom complex data types before decode. + IComplexTypeInstance complexTypeInstance = encodeable as IComplexTypeInstance; + + if (complexTypeInstance != null) + { + complexTypeInstance.TypeId = encodeableTypeId; + } + } + + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + encodeable.Decode(this); + + m_nestingLevel--; + + return encodeable; + } + + /// + /// Reads an enumerated value from the stream. + /// + public Enum ReadEnumerated(string fieldName, System.Type enumType) + { + return (Enum)Enum.ToObject(enumType, m_reader.ReadInt32()); + } + + /// + /// Reads a boolean array from the stream. + /// + public BooleanCollection ReadBooleanArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + BooleanCollection values = new BooleanCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadBoolean(null)); + } + + return values; + } + + /// + /// Reads a sbyte array from the stream. + /// + public SByteCollection ReadSByteArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + SByteCollection values = new SByteCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadSByte(null)); + } + + return values; + } + + /// + /// Reads a byte array from the stream. + /// + public ByteCollection ReadByteArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + ByteCollection values = new ByteCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadByte(null)); + } + + return values; + } + + /// + /// Reads a short array from the stream. + /// + public Int16Collection ReadInt16Array(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + Int16Collection values = new Int16Collection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadInt16(null)); + } + + return values; + } + + /// + /// Reads a ushort array from the stream. + /// + public UInt16Collection ReadUInt16Array(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + UInt16Collection values = new UInt16Collection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadUInt16(null)); + } + + return values; + } + + /// + /// Reads a int array from the stream. + /// + public Int32Collection ReadInt32Array(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + Int32Collection values = new Int32Collection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadInt32(null)); + } + + return values; + } + + /// + /// Reads a uint array from the stream. + /// + public UInt32Collection ReadUInt32Array(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + UInt32Collection values = new UInt32Collection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadUInt32(null)); + } + + return values; + } + + /// + /// Reads a long array from the stream. + /// + public Int64Collection ReadInt64Array(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + Int64Collection values = new Int64Collection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadInt64(null)); + } + + return values; + } + + /// + /// Reads a ulong array from the stream. + /// + public UInt64Collection ReadUInt64Array(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + UInt64Collection values = new UInt64Collection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadUInt64(null)); + } + + return values; + } + + /// + /// Reads a float array from the stream. + /// + public FloatCollection ReadFloatArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + FloatCollection values = new FloatCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadFloat(null)); + } + + return values; + } + + /// + /// Reads a double array from the stream. + /// + public DoubleCollection ReadDoubleArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + DoubleCollection values = new DoubleCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadDouble(null)); + } + + return values; + } + + /// + /// Reads a string array from the stream. + /// + public StringCollection ReadStringArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + StringCollection values = new StringCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadString(null)); + } + + return values; + } + + /// + /// Reads a UTC date/time array from the stream. + /// + public DateTimeCollection ReadDateTimeArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + DateTimeCollection values = new DateTimeCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadDateTime(null)); + } + + return values; + } + + /// + /// Reads a GUID array from the stream. + /// + public UuidCollection ReadGuidArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + UuidCollection values = new UuidCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadGuid(null)); + } + + return values; + } + + /// + /// Reads a byte string array from the stream. + /// + public ByteStringCollection ReadByteStringArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + ByteStringCollection values = new ByteStringCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadByteString(null)); + } + + return values; + } + + /// + /// Reads an XmlElement array from the stream. + /// + public XmlElementCollection ReadXmlElementArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + XmlElementCollection values = new XmlElementCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadXmlElement(null)); + } + + return values; + } + + /// + /// Reads an NodeId array from the stream. + /// + public NodeIdCollection ReadNodeIdArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + NodeIdCollection values = new NodeIdCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadNodeId(null)); + } + + return values; + } + + /// + /// Reads an ExpandedNodeId array from the stream. + /// + public ExpandedNodeIdCollection ReadExpandedNodeIdArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + ExpandedNodeIdCollection values = new ExpandedNodeIdCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadExpandedNodeId(null)); + } + + return values; + } + + /// + /// Reads an StatusCode array from the stream. + /// + public StatusCodeCollection ReadStatusCodeArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + StatusCodeCollection values = new StatusCodeCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadStatusCode(null)); + } + + return values; + } + + /// + /// Reads an DiagnosticInfo array from the stream. + /// + public DiagnosticInfoCollection ReadDiagnosticInfoArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + DiagnosticInfoCollection values = new DiagnosticInfoCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadDiagnosticInfo(null)); + } + + return values; + } + + /// + /// Reads an QualifiedName array from the stream. + /// + public QualifiedNameCollection ReadQualifiedNameArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + QualifiedNameCollection values = new QualifiedNameCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadQualifiedName(null)); + } + + return values; + } + + /// + /// Reads an LocalizedText array from the stream. + /// + public LocalizedTextCollection ReadLocalizedTextArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + LocalizedTextCollection values = new LocalizedTextCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadLocalizedText(null)); + } + + return values; + } + + /// + /// Reads an Variant array from the stream. + /// + public VariantCollection ReadVariantArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + VariantCollection values = new VariantCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadVariant(null)); + } + + return values; + } + + /// + /// Reads an DataValue array from the stream. + /// + public DataValueCollection ReadDataValueArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + DataValueCollection values = new DataValueCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadDataValue(null)); + } + + return values; + } + + /// + /// Reads an extension object array from the stream. + /// + public ExtensionObjectCollection ReadExtensionObjectArray(string fieldName) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + ExtensionObjectCollection values = new ExtensionObjectCollection(length); + + for (int ii = 0; ii < length; ii++) + { + values.Add(ReadExtensionObject(null)); + } + + return values; + } + + /// + /// Reads an encodeable array from the stream. + /// + /// The encodeable array field name + /// The system type of the encopdeable objects to be read object + /// The TypeId for the instances that will be read. + /// An array that was read from the stream. + public Array ReadEncodeableArray(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + Array values = Array.CreateInstance(systemType, length); + + for (int ii = 0; ii < length; ii++) + { + values.SetValue(ReadEncodeable(null, systemType, encodeableTypeId), ii); + } + + return values; + } + + /// + /// Reads an enumerated value array from the stream. + /// + public Array ReadEnumeratedArray(string fieldName, System.Type enumType) + { + int length = ReadArrayLength(); + + if (length == -1) + { + return null; + } + + Array values = Array.CreateInstance(enumType, length); + + for (int ii = 0; ii < length; ii++) + { + values.SetValue(ReadEnumerated(null, enumType), ii); + } + + return values; + } + #endregion + + #region Private Methods + /// + /// Reads the length of an array. + /// + private int ReadArrayLength() + { + int length = m_reader.ReadInt32(); + + if (length < 0) + { + return -1; + } + + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxArrayLength {0} < {1}", + m_context.MaxArrayLength, + length); + } + + return length; + } + + /// + /// Reads the body of a node id. + /// + private void ReadNodeIdBody(byte encodingByte, NodeId value) + { + switch ((NodeIdEncodingBits)(encodingByte & 0x3F)) + { + case NodeIdEncodingBits.TwoByte: + { + value.SetNamespaceIndex(0); + value.SetIdentifier(IdType.Numeric, (uint)m_reader.ReadByte()); + break; + } + + case NodeIdEncodingBits.FourByte: + { + value.SetNamespaceIndex(m_reader.ReadByte()); + value.SetIdentifier(IdType.Numeric, (uint)m_reader.ReadUInt16()); + break; + } + + case NodeIdEncodingBits.Numeric: + { + value.SetNamespaceIndex(m_reader.ReadUInt16()); + value.SetIdentifier(IdType.Numeric, (uint)m_reader.ReadUInt32()); + break; + } + + case NodeIdEncodingBits.String: + { + value.SetNamespaceIndex(m_reader.ReadUInt16()); + value.SetIdentifier(IdType.String, ReadString(null)); + break; + } + + case NodeIdEncodingBits.Guid: + { + value.SetNamespaceIndex(m_reader.ReadUInt16()); + value.SetIdentifier(IdType.Guid, (Guid)ReadGuid(null)); + break; + } + + case NodeIdEncodingBits.ByteString: + { + value.SetNamespaceIndex(m_reader.ReadUInt16()); + value.SetIdentifier(IdType.Opaque, ReadByteString(null)); + break; + } + + default: + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Invald encoding byte (0x{0:X2}) for NodeId.", encodingByte)); + } + } + } + + /// + /// Reads an extension object from the stream. + /// + private ExtensionObject ReadExtensionObject() + { + ExtensionObject extension = new ExtensionObject(); + + // read type id. + NodeId typeId = ReadNodeId(null); + + // convert to absolute node id. + extension.TypeId = NodeId.ToExpandedNodeId(typeId, m_context.NamespaceUris); + + if (!NodeId.IsNull(typeId) && NodeId.IsNull(extension.TypeId)) + { + Utils.Trace( + "Cannot de-serialized extension objects if the NamespaceUri is not in the NamespaceTable: Type = {0}", + typeId); + } + + // read encoding. + ExtensionObjectEncoding encoding = (ExtensionObjectEncoding)Enum.ToObject(typeof(ExtensionObjectEncoding), m_reader.ReadByte()); + + // nothing more to do for empty bodies. + if (encoding == ExtensionObjectEncoding.None) + { + return extension; + } + + // check for known type. + Type systemType = m_context.Factory.GetSystemType(extension.TypeId); + + // check for XML bodies. + if (encoding == ExtensionObjectEncoding.Xml) + { + extension.Body = ReadXmlElement(null); + + // attempt to decode a known type. + if (systemType != null && extension.Body != null) + { + XmlElement element = extension.Body as XmlElement; + XmlDecoder xmlDecoder = new XmlDecoder(element, this.Context); + + try + { + xmlDecoder.PushNamespace(element.NamespaceURI); + IEncodeable body = xmlDecoder.ReadEncodeable(element.LocalName, systemType); + xmlDecoder.PopNamespace(); + + // update body. + extension.Body = body; + } + catch (Exception e) + { + Utils.Trace("Could not decode known type {0}. Error={1}, Value={2}", systemType.FullName, e.Message, element.OuterXml); + } + } + + return extension; + } + + // create instance of type. + IEncodeable encodeable = null; + + if (systemType != null) + { + encodeable = Activator.CreateInstance(systemType) as IEncodeable; + + // set type identifier for custom complex data types before decode. + IComplexTypeInstance complexTypeInstance = encodeable as IComplexTypeInstance; + + if (complexTypeInstance != null) + { + complexTypeInstance.TypeId = extension.TypeId; + } + } + + // get the length. + int length = ReadInt32(null); + + // process unknown type. + if (encodeable == null) + { + // figure out how long the object is. + if (length < 0) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Cannot determine length of unknown extension object body with type '{0}'.", extension.TypeId)); + } + + // check the length. + if (m_context.MaxByteStringLength > 0 && m_context.MaxByteStringLength < length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxByteStringLength {0} < {1}", + m_context.MaxByteStringLength, + length); + } + + // read the bytes of the body. + extension.Body = m_reader.ReadBytes(length); + return extension; + } + + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + // save the current position. + int start = Position; + + // decode body. + encodeable.Decode(this); + + m_nestingLevel--; + + // skip any unread data. + int unused = length - (Position - start); + + if (unused > 0) + { + m_reader.ReadBytes(unused); + } + + if (encodeable != null) + { + // Set the known TypeId for encodeables. + extension.TypeId = encodeable.TypeId; + } + + extension.Body = encodeable; + return extension; + } + + /// + /// Reads an Variant from the stream. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1505:AvoidUnmaintainableCode"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private Variant ReadVariantValue(string fieldName) + { + // read the encoding byte. + byte encodingByte = m_reader.ReadByte(); + + Variant value = new Variant(); + + if ((encodingByte & (byte)VariantArrayEncodingBits.Array) != 0) + { + // read the array length. + int length = m_reader.ReadInt32(); + + if (length < 0) + { + return value; + } + + Array array = null; + + BuiltInType builtInType = (BuiltInType)(encodingByte & (byte)VariantArrayEncodingBits.TypeMask); + + switch (builtInType) + { + case BuiltInType.Boolean: + { + bool[] values = new bool[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadBoolean(null); + } + + array = values; + break; + } + + case BuiltInType.SByte: + { + sbyte[] values = new sbyte[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadSByte(null); + } + + array = values; + break; + } + + case BuiltInType.Byte: + { + byte[] values = new byte[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadByte(null); + } + + array = values; + break; + } + + case BuiltInType.Int16: + { + short[] values = new short[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadInt16(null); + } + + array = values; + break; + } + + case BuiltInType.UInt16: + { + ushort[] values = new ushort[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadUInt16(null); + } + + array = values; + break; + } + + case BuiltInType.Int32: + case BuiltInType.Enumeration: + { + int[] values = new int[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadInt32(null); + } + + array = values; + break; + } + + case BuiltInType.UInt32: + { + uint[] values = new uint[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadUInt32(null); + } + + array = values; + break; + } + + case BuiltInType.Int64: + { + long[] values = new long[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadInt64(null); + } + + array = values; + break; + } + + case BuiltInType.UInt64: + { + ulong[] values = new ulong[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadUInt64(null); + } + + array = values; + break; + } + + case BuiltInType.Float: + { + float[] values = new float[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadFloat(null); + } + + array = values; + break; + } + + case BuiltInType.Double: + { + double[] values = new double[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadDouble(null); + } + + array = values; + break; + } + + case BuiltInType.String: + { + string[] values = new string[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadString(null); + } + + array = values; + break; + } + + case BuiltInType.DateTime: + { + DateTime[] values = new DateTime[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadDateTime(null); + } + + array = values; + break; + } + + case BuiltInType.Guid: + { + Uuid[] values = new Uuid[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadGuid(null); + } + + array = values; + break; + } + + case BuiltInType.ByteString: + { + byte[][] values = new byte[length][]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadByteString(null); + } + + array = values; + break; + } + + case BuiltInType.XmlElement: + { + try + { + XmlElement[] values = new XmlElement[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadXmlElement(null); + } + + array = values; + } + catch (Exception ex) + { + Utils.Trace(ex, "Error reading variant."); + } + + break; + } + + case BuiltInType.NodeId: + { + NodeId[] values = new NodeId[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadNodeId(null); + } + + array = values; + break; + } + + case BuiltInType.ExpandedNodeId: + { + ExpandedNodeId[] values = new ExpandedNodeId[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadExpandedNodeId(null); + } + + array = values; + break; + } + + case BuiltInType.StatusCode: + { + StatusCode[] values = new StatusCode[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadStatusCode(null); + } + + array = values; + break; + } + + case BuiltInType.QualifiedName: + { + QualifiedName[] values = new QualifiedName[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadQualifiedName(null); + } + + array = values; + break; + } + + case BuiltInType.LocalizedText: + { + LocalizedText[] values = new LocalizedText[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadLocalizedText(null); + } + + array = values; + break; + } + + case BuiltInType.ExtensionObject: + { + ExtensionObject[] values = new ExtensionObject[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadExtensionObject(); + } + + array = values; + break; + } + + case BuiltInType.DataValue: + { + DataValue[] values = new DataValue[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadDataValue(null); + } + + array = values; + break; + } + + case BuiltInType.Variant: + { + Variant[] values = new Variant[length]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = ReadVariant(null); + } + + array = values; + break; + } + + default: + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Cannot decode unknown type in Variant object (0x{0:X2}).", encodingByte)); + } + } + + if (array == null) + { + value = new Variant(StatusCodes.BadEncodingError); + } + else + { + // check for multi-dimensional arrays. + if ((encodingByte & (byte)VariantArrayEncodingBits.ArrayDimensions) != 0) + { + Int32Collection dimensions = ReadInt32Array(null); + + // check if ArrayDimensions are consistent with the ArrayLength. + if (dimensions == null || dimensions.Count == 0) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + "ArrayDimensions not specified when ArrayDimensions encoding bit was set in Variant object."); + } + + int[] dimensionsArray = dimensions.ToArray(); + int matrixLength = 1; + + for (int ii = 0; ii < dimensionsArray.Length; ii++) + { + if (dimensionsArray[ii] == 0 && length > 0) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("ArrayDimensions [{0}] is zero in Variant object.", ii)); + } + + matrixLength *= dimensionsArray[ii]; + } + + if (matrixLength != length) + { + throw new ServiceResultException(StatusCodes.BadDecodingError, "ArrayDimensions does not match with the ArrayLength in Variant object."); + } + + value = new Variant(new Matrix(array, builtInType, dimensions.ToArray())); + } + else + { + value = new Variant(array); + } + } + } + + else + { + switch ((BuiltInType)encodingByte) + { + case BuiltInType.Null: + { + value.Value = null; + break; + } + + case BuiltInType.Boolean: + { + value.Set(ReadBoolean(null)); + break; + } + + case BuiltInType.SByte: + { + value.Set(ReadSByte(null)); + break; + } + + case BuiltInType.Byte: + { + value.Set(ReadByte(null)); + break; + } + + case BuiltInType.Int16: + { + value.Set(ReadInt16(null)); + break; + } + + case BuiltInType.UInt16: + { + value.Set(ReadUInt16(null)); + break; + } + + case BuiltInType.Int32: + case BuiltInType.Enumeration: + { + value.Set(ReadInt32(null)); + break; + } + + case BuiltInType.UInt32: + { + value.Set(ReadUInt32(null)); + break; + } + + case BuiltInType.Int64: + { + value.Set(ReadInt64(null)); + break; + } + + case BuiltInType.UInt64: + { + value.Set(ReadUInt64(null)); + break; + } + + case BuiltInType.Float: + { + value.Set(ReadFloat(null)); + break; + } + + case BuiltInType.Double: + { + value.Set(ReadDouble(null)); + break; + } + + case BuiltInType.String: + { + value.Set(ReadString(null)); + break; + } + + case BuiltInType.DateTime: + { + value.Set(ReadDateTime(null)); + break; + } + + case BuiltInType.Guid: + { + value.Set(ReadGuid(null)); + break; + } + + case BuiltInType.ByteString: + { + value.Set(ReadByteString(null)); + break; + } + + case BuiltInType.XmlElement: + { + try + { + value.Set(ReadXmlElement(null)); + } + catch (Exception ex) + { + Utils.Trace(ex, "Error reading xml element for variant."); + value.Set(StatusCodes.BadEncodingError); + } + break; + } + + case BuiltInType.NodeId: + { + value.Set(ReadNodeId(null)); + break; + } + + case BuiltInType.ExpandedNodeId: + { + value.Set(ReadExpandedNodeId(null)); + break; + } + + case BuiltInType.StatusCode: + { + value.Set(ReadStatusCode(null)); + break; + } + + case BuiltInType.QualifiedName: + { + value.Set(ReadQualifiedName(null)); + break; + } + + case BuiltInType.LocalizedText: + { + value.Set(ReadLocalizedText(null)); + break; + } + + case BuiltInType.ExtensionObject: + { + value.Set(ReadExtensionObject()); + break; + } + + case BuiltInType.DataValue: + { + value.Set(ReadDataValue(null)); + break; + } + + default: + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Cannot decode unknown type in Variant object (0x{0:X2}).", encodingByte)); + } + } + } + + return value; + } + #endregion + + #region Private Fields + private Stream m_istrm; + private BinaryReader m_reader; + private ServiceMessageContext m_context; + private ushort[] m_namespaceMappings; + private ushort[] m_serverMappings; + private uint m_nestingLevel; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/BinaryEncoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/BinaryEncoder.cs new file mode 100644 index 00000000..5758f853 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/BinaryEncoder.cs @@ -0,0 +1,2002 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Encodes objects in a stream using the UA Binary encoding. + /// + public class BinaryEncoder : IEncoder, IDisposable + { + #region Constructor + /// + /// Creates an encoder that writes to a memory buffer. + /// + public BinaryEncoder(ServiceMessageContext context) + { + m_ostrm = new MemoryStream(); + m_writer = new BinaryWriter(m_ostrm); + m_context = context; + m_nestingLevel = 0; + } + + /// + /// Creates an encoder that writes to a fixed size memory buffer. + /// + public BinaryEncoder(byte[] buffer, int start, int count, ServiceMessageContext context) + { + if (buffer == null) throw new ArgumentNullException(nameof(buffer)); + + m_ostrm = new MemoryStream(buffer, start, count); + m_writer = new BinaryWriter(m_ostrm); + m_context = context; + m_nestingLevel = 0; + } + + /// + /// Creates an encoder that writes to the stream. + /// + public BinaryEncoder(Stream stream, ServiceMessageContext context) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + + m_ostrm = stream; + m_writer = new BinaryWriter(m_ostrm); + m_context = context; + m_nestingLevel = 0; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_writer != null) + { + m_writer.Flush(); + m_writer.Dispose(); + } + + m_ostrm?.Dispose(); + } + } + #endregion + + #region Public Members + /// + /// Initializes the tables used to map namespace and server uris during encoding. + /// + /// The namespaces URIs referenced by the data being encoded. + /// The server URIs referenced by the data being encoded. + public void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris) + { + m_namespaceMappings = null; + + if (namespaceUris != null && m_context.NamespaceUris != null) + { + m_namespaceMappings = namespaceUris.CreateMapping(m_context.NamespaceUris, false); + } + + m_serverMappings = null; + + if (serverUris != null && m_context.ServerUris != null) + { + m_serverMappings = serverUris.CreateMapping(m_context.ServerUris, false); + } + } + + /// + /// Completes writing and returns the buffer (if available). + /// + public byte[] CloseAndReturnBuffer() + { + m_writer.Flush(); + m_writer.Dispose(); + + if (m_ostrm is MemoryStream) + { + return ((MemoryStream)m_ostrm).ToArray(); + } + + return null; + } + + /// + /// Completes writing and returns position in the stream. + /// + public int Close() + { + int position = (int)m_writer.BaseStream.Position; + m_writer.Flush(); + m_writer.Dispose(); + return position; + } + + /// + /// Gets or sets the position in the stream. + /// + public int Position + { + get + { + return (int)m_writer.BaseStream.Position; + } + + set + { + m_writer.Seek(value, SeekOrigin.Begin); + } + } + + /// + /// Gets the stream that the encoder is writing to. + /// + public Stream BaseStream => m_writer.BaseStream; + + /// + /// Writes raw bytes to the stream. + /// + public void WriteRawBytes(byte[] buffer, int offset, int count) + { + m_writer.Write(buffer, offset, count); + } + + /// + /// Encodes a message in a buffer. + /// + public static byte[] EncodeMessage(IEncodeable message, ServiceMessageContext context) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + // create encoder. + BinaryEncoder encoder = new BinaryEncoder(context); + + // encode message + encoder.EncodeMessage(message); + + // close encoder. + return encoder.CloseAndReturnBuffer(); + } + + /// + /// Encodes a session-less message to a buffer. + /// + public static void EncodeSessionLessMessage(IEncodeable message, Stream stream, ServiceMessageContext context, bool leaveOpen = false) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + // create encoder. + BinaryEncoder encoder = new BinaryEncoder(stream, context); + + try + { + long start = encoder.m_ostrm.Position; + + // write the type id. + encoder.WriteNodeId(null, DataTypeIds.SessionlessInvokeRequestType); + + // write the message. + SessionLessServiceMessage envelope = new SessionLessServiceMessage(); + envelope.NamespaceUris = context.NamespaceUris; + envelope.ServerUris = context.ServerUris; + envelope.Message = message; + + envelope.Encode(encoder); + + // check that the max message size was not exceeded. + if (context.MaxMessageSize > 0 && context.MaxMessageSize < (int)(encoder.m_ostrm.Position - start)) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxMessageSize {0} < {1}", + context.MaxMessageSize, + (int)(encoder.m_ostrm.Position - start)); + } + } + finally + { + // close encoder. + if (!leaveOpen) + { + encoder.CloseAndReturnBuffer(); + } + } + } + + /// + /// Encodes a message in a stream. + /// + public static void EncodeMessage(IEncodeable message, Stream stream, ServiceMessageContext context, bool leaveOpen = false) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + // create encoder. + BinaryEncoder encoder = new BinaryEncoder(stream, context); + + // encode message + encoder.EncodeMessage(message); + + // close encoder. + if (!leaveOpen) + { + encoder.CloseAndReturnBuffer(); + } + } + + /// + /// Encodes a message with its header. + /// + public void EncodeMessage(IEncodeable message) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + + long start = m_ostrm.Position; + + // convert the namespace uri to an index. + NodeId typeId = ExpandedNodeId.ToNodeId(message.BinaryEncodingId, m_context.NamespaceUris); + + // write the type id. + WriteNodeId(null, typeId); + + // write the message. + WriteEncodeable(null, message, message.GetType()); + + // check that the max message size was not exceeded. + if (m_context.MaxMessageSize > 0 && m_context.MaxMessageSize < (int)(m_ostrm.Position - start)) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxMessageSize {0} < {1}", + m_context.MaxMessageSize, + (int)(m_ostrm.Position - start)); + } + } + + /// + /// Saves a string table from a binary stream. + /// + public void SaveStringTable(StringTable stringTable) + { + if (stringTable == null || stringTable.Count <= 1) + { + WriteInt32(null, -1); + return; + } + + WriteInt32(null, stringTable.Count - 1); + + for (uint ii = 1; ii < stringTable.Count; ii++) + { + WriteString(null, stringTable.GetString(ii)); + } + } + #endregion + + #region IEncoder Members + /// + /// The type of encoding being used. + /// + public EncodingType EncodingType => EncodingType.Binary; + + /// + /// The message context associated with the encoder. + /// + public ServiceMessageContext Context => m_context; + + /// + /// Binary Encoder always produces reversible encoding. + /// + public bool UseReversibleEncoding => true; + + /// + /// Pushes a namespace onto the namespace stack. + /// + public void PushNamespace(string namespaceUri) + { + // not used in the binary encoding. + } + + /// + /// Pops a namespace from the namespace stack. + /// + public void PopNamespace() + { + // not used in the binary encoding. + } + + /// + /// Writes a boolean to the stream. + /// + public void WriteBoolean(string fieldName, bool value) + { + m_writer.Write(value); + } + + /// + /// Writes a sbyte to the stream. + /// + public void WriteSByte(string fieldName, sbyte value) + { + m_writer.Write(value); + } + + /// + /// Writes a byte to the stream. + /// + public void WriteByte(string fieldName, byte value) + { + m_writer.Write(value); + } + + /// + /// Writes a short to the stream. + /// + public void WriteInt16(string fieldName, short value) + { + m_writer.Write(value); + } + + /// + /// Writes a ushort to the stream. + /// + public void WriteUInt16(string fieldName, ushort value) + { + m_writer.Write(value); + } + + /// + /// Writes an int to the stream. + /// + public void WriteInt32(string fieldName, int value) + { + m_writer.Write(value); + } + + /// + /// Writes a uint to the stream. + /// + public void WriteUInt32(string fieldName, uint value) + { + m_writer.Write(value); + } + + /// + /// Writes a long to the stream. + /// + public void WriteInt64(string fieldName, long value) + { + m_writer.Write(value); + } + + /// + /// Writes a ulong to the stream. + /// + public void WriteUInt64(string fieldName, ulong value) + { + m_writer.Write(value); + } + + /// + /// Writes a float to the stream. + /// + public void WriteFloat(string fieldName, float value) + { + m_writer.Write(value); + } + + /// + /// Writes a double to the stream. + /// + public void WriteDouble(string fieldName, double value) + { + m_writer.Write(value); + } + + /// + /// Writes a string to the stream. + /// + public void WriteString(string fieldName, string value) + { + if (value == null) + { + WriteInt32(null, -1); + return; + } + + byte[] bytes = new UTF8Encoding().GetBytes(value); + + if (m_context.MaxStringLength > 0 && m_context.MaxStringLength < bytes.Length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxStringLength {0} < {1}", + m_context.MaxStringLength, + bytes.Length); + } + + WriteByteString(null, new UTF8Encoding().GetBytes(value)); + } + + /// + /// Writes a UTC date/time to the stream. + /// + public void WriteDateTime(string fieldName, DateTime value) + { + value = Utils.ToOpcUaUniversalTime(value); + + long ticks = value.Ticks; + + // check for max value. + if (ticks >= DateTime.MaxValue.Ticks) + { + ticks = Int64.MaxValue; + } + + // check for min value. + else + { + ticks -= Utils.TimeBase.Ticks; + + if (ticks <= 0) + { + ticks = 0; + } + } + + m_writer.Write(ticks); + } + + /// + /// Writes a GUID to the stream. + /// + public void WriteGuid(string fieldName, Uuid value) + { + m_writer.Write(((Guid)value).ToByteArray()); + } + + /// + /// Writes a GUID to the stream. + /// + public void WriteGuid(string fieldName, Guid value) + { + m_writer.Write(((Guid)value).ToByteArray()); + } + + /// + /// Writes a byte string to the stream. + /// + public void WriteByteString(string fieldName, byte[] value) + { + if (value == null) + { + WriteInt32(null, -1); + return; + } + + if (m_context.MaxByteStringLength > 0 && m_context.MaxByteStringLength < value.Length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxByteStringLength {0} < {1}", + m_context.MaxByteStringLength, + value.Length); + } + + WriteInt32(null, value.Length); + m_writer.Write(value); + } + + /// + /// Writes an XmlElement to the stream. + /// + public void WriteXmlElement(string fieldName, XmlElement value) + { + if (value == null) + { + WriteInt32(null, -1); + return; + } + + WriteByteString(null, new UTF8Encoding().GetBytes(value.OuterXml)); + } + + /// + /// Writes an NodeId to the stream. + /// + public void WriteNodeId(string fieldName, NodeId value) + { + // write a null node id. + if (value == null) + { + WriteUInt16(null, 0); + return; + } + + ushort namespaceIndex = value.NamespaceIndex; + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + // get the node encoding. + byte encoding = GetNodeIdEncoding(value.IdType, value.Identifier, namespaceIndex); + + // write the encoding. + WriteByte(null, encoding); + + // write the node. + WriteNodeIdBody(encoding, value.Identifier, namespaceIndex); + } + + /// + /// Writes an ExpandedNodeId to the stream. + /// + public void WriteExpandedNodeId(string fieldName, ExpandedNodeId value) + { + // write a null node id. + if (value == null) + { + WriteUInt16(null, 0); + return; + } + + ushort namespaceIndex = value.NamespaceIndex; + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + uint serverIndex = value.ServerIndex; + + if (m_serverMappings != null && m_serverMappings.Length > serverIndex) + { + serverIndex = m_serverMappings[serverIndex]; + } + + // get the node encoding. + byte encoding = GetNodeIdEncoding(value.IdType, value.Identifier, namespaceIndex); + + // add the bit indicating a uri string is encoded as well. + if (!String.IsNullOrEmpty(value.NamespaceUri)) + { + encoding |= 0x80; + } + + // add the bit indicating a server index. + if (serverIndex > 0) + { + encoding |= 0x40; + } + + // write the encoding. + WriteByte(null, encoding); + + // write the node id. + WriteNodeIdBody(encoding, value.Identifier, namespaceIndex); + + // write the namespace uri. + if ((encoding & 0x80) != 0) + { + WriteString(null, value.NamespaceUri); + } + + // write the server index. + if ((encoding & 0x40) != 0) + { + WriteUInt32(null, serverIndex); + } + } + + /// + /// Writes an StatusCode to the stream. + /// + public void WriteStatusCode(string fieldName, StatusCode value) + { + WriteUInt32(null, value.Code); + } + + /// + /// Writes an DiagnosticInfo to the stream. + /// + public void WriteDiagnosticInfo(string fieldName, DiagnosticInfo value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + // check for null. + if (value == null) + { + WriteByte(null, 0); + return; + } + + m_nestingLevel++; + + // calculate the encoding. + byte encoding = 0; + + if (value.SymbolicId >= 0) + { + encoding |= (byte)DiagnosticInfoEncodingBits.SymbolicId; + } + + if (value.NamespaceUri >= 0) + { + encoding |= (byte)DiagnosticInfoEncodingBits.NamespaceUri; + } + + if (value.Locale >= 0) + { + encoding |= (byte)DiagnosticInfoEncodingBits.Locale; + } + + if (value.LocalizedText >= 0) + { + encoding |= (byte)DiagnosticInfoEncodingBits.LocalizedText; + } + + if (value.AdditionalInfo != null) + { + encoding |= (byte)DiagnosticInfoEncodingBits.AdditionalInfo; + } + + if (value.InnerStatusCode != StatusCodes.Good) + { + encoding |= (byte)DiagnosticInfoEncodingBits.InnerStatusCode; + } + + if (value.InnerDiagnosticInfo != null) + { + encoding |= (byte)DiagnosticInfoEncodingBits.InnerDiagnosticInfo; + } + + // write the encoding. + WriteByte(null, encoding); + + // write the fields of the diagnostic info structure. + if ((encoding & (byte)DiagnosticInfoEncodingBits.SymbolicId) != 0) + { + WriteInt32(null, value.SymbolicId); + } + + if ((encoding & (byte)DiagnosticInfoEncodingBits.NamespaceUri) != 0) + { + WriteInt32(null, value.NamespaceUri); + } + + if ((encoding & (byte)DiagnosticInfoEncodingBits.Locale) != 0) + { + WriteInt32(null, value.Locale); + } + + if ((encoding & (byte)DiagnosticInfoEncodingBits.LocalizedText) != 0) + { + WriteInt32(null, value.LocalizedText); + } + + if ((encoding & (byte)DiagnosticInfoEncodingBits.AdditionalInfo) != 0) + { + WriteString(null, value.AdditionalInfo); + } + + if ((encoding & (byte)DiagnosticInfoEncodingBits.InnerStatusCode) != 0) + { + WriteStatusCode(null, value.InnerStatusCode); + } + + if ((encoding & (byte)DiagnosticInfoEncodingBits.InnerDiagnosticInfo) != 0) + { + WriteDiagnosticInfo(null, value.InnerDiagnosticInfo); + } + + m_nestingLevel--; + } + + /// + /// Writes an QualifiedName to the stream. + /// + public void WriteQualifiedName(string fieldName, QualifiedName value) + { + // check for null. + if (value == null) + { + value = new QualifiedName(); + } + + ushort namespaceIndex = value.NamespaceIndex; + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + WriteUInt16(null, namespaceIndex); + WriteString(null, value.Name); + } + + /// + /// Writes an LocalizedText to the stream. + /// + public void WriteLocalizedText(string fieldName, LocalizedText value) + { + // check for null. + if (value == null) + { + WriteByte(null, 0); + return; + } + + // calculate the encoding. + byte encoding = 0; + + if (value.Locale != null) + { + encoding |= (byte)LocalizedTextEncodingBits.Locale; + } + + if (value.Text != null) + { + encoding |= (byte)LocalizedTextEncodingBits.Text; + } + + // write the encoding. + WriteByte(null, encoding); + + // write the fields. + if ((encoding & (byte)LocalizedTextEncodingBits.Locale) != 0) + { + WriteString(null, value.Locale); + } + + if ((encoding & (byte)LocalizedTextEncodingBits.Text) != 0) + { + WriteString(null, value.Text); + } + } + + /// + /// Writes an Variant to the stream. + /// + public void WriteVariant(string fieldName, Variant value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + WriteVariantValue(fieldName, value); + + m_nestingLevel--; + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValue(string fieldName, DataValue value) + { + // check for null. + if (value == null) + { + WriteByte(null, 0); + return; + } + + // calculate the encoding. + byte encoding = 0; + + if (value.Value != null) + { + encoding |= (byte)DataValueEncodingBits.Value; + } + + if (value.StatusCode != StatusCodes.Good) + { + encoding |= (byte)DataValueEncodingBits.StatusCode; + } + + if (value.SourceTimestamp != DateTime.MinValue) + { + encoding |= (byte)DataValueEncodingBits.SourceTimestamp; + } + + if (value.SourcePicoseconds != 0) + { + encoding |= (byte)DataValueEncodingBits.SourcePicoseconds; + } + + if (value.ServerTimestamp != DateTime.MinValue) + { + encoding |= (byte)DataValueEncodingBits.ServerTimestamp; + } + + if (value.ServerPicoseconds != 0) + { + encoding |= (byte)DataValueEncodingBits.ServerPicoseconds; + } + + // write the encoding. + WriteByte(null, encoding); + + // write the fields of the data value structure. + if ((encoding & (byte)DataValueEncodingBits.Value) != 0) + { + WriteVariant(null, value.WrappedValue); + } + + if ((encoding & (byte)DataValueEncodingBits.StatusCode) != 0) + { + WriteStatusCode(null, value.StatusCode); + } + + if ((encoding & (byte)DataValueEncodingBits.SourceTimestamp) != 0) + { + WriteDateTime(null, value.SourceTimestamp); + } + + if ((encoding & (byte)DataValueEncodingBits.SourcePicoseconds) != 0) + { + WriteUInt16(null, value.SourcePicoseconds); + } + + if ((encoding & (byte)DataValueEncodingBits.ServerTimestamp) != 0) + { + WriteDateTime(null, value.ServerTimestamp); + } + + if ((encoding & (byte)DataValueEncodingBits.ServerPicoseconds) != 0) + { + WriteUInt16(null, value.ServerPicoseconds); + } + } + + /// + /// Writes an ExtensionObject to the stream. + /// + public void WriteExtensionObject(string fieldName, ExtensionObject value) + { + // check for null. + if (value == null) + { + WriteNodeId(null, NodeId.Null); + WriteByte(null, Convert.ToByte(ExtensionObjectEncoding.None, CultureInfo.InvariantCulture)); + return; + } + + IEncodeable encodeable = value.Body as IEncodeable; + + // write the type id. + ExpandedNodeId typeId = value.TypeId; + + if (encodeable != null) + { + if (value.Encoding == ExtensionObjectEncoding.Xml) + { + typeId = encodeable.XmlEncodingId; + } + else + { + typeId = encodeable.BinaryEncodingId; + } + } + + NodeId localTypeId = ExpandedNodeId.ToNodeId(typeId, m_context.NamespaceUris); + + if (NodeId.IsNull(localTypeId) && !NodeId.IsNull(typeId)) + { + if (encodeable != null) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Cannot encode bodies of type '{0}' in ExtensionObject unless the NamespaceUri ({1}) is in the encoder's NamespaceTable.", + encodeable.GetType().FullName, + typeId.NamespaceUri); + } + + localTypeId = NodeId.Null; + } + + WriteNodeId(null, localTypeId); + + // determine the encoding type. + byte encoding = Convert.ToByte(value.Encoding, CultureInfo.InvariantCulture); + + if (value.Encoding == ExtensionObjectEncoding.EncodeableObject) + { + encoding = Convert.ToByte(ExtensionObjectEncoding.Binary, CultureInfo.InvariantCulture); + } + + object body = value.Body; + + if (body == null) + { + encoding = Convert.ToByte(ExtensionObjectEncoding.None, CultureInfo.InvariantCulture); + } + + // write the encoding type. + WriteByte(null, encoding); + + // nothing more to do for null bodies. + if (body == null) + { + return; + } + + // write binary bodies. + byte[] bytes = body as byte[]; + + if (bytes != null) + { + WriteByteString(null, bytes); + return; + } + + // write XML bodies. + XmlElement xml = body as XmlElement; + + if (xml != null) + { + WriteXmlElement(null, xml); + return; + } + + // write encodeable bodies. + if (encodeable == null) + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Cannot encode bodies of type '{0}' in extension objects.", body.GetType().FullName)); + } + + // check if it possible to write the extension directly to the stream. + if (m_writer.BaseStream.CanSeek) + { + long start = m_writer.BaseStream.Position; + + // write a placeholder for the body length. + WriteInt32(null, -1); + encodeable.Encode(this); + + // update body length. + long delta = m_writer.BaseStream.Position - start; + + m_writer.Seek((int)-delta, SeekOrigin.Current); + WriteInt32(null, (int)(delta - 4)); + m_writer.Seek((int)(delta - 4), SeekOrigin.Current); + } + + // must pre-encode and then write the bytes. + else + { + BinaryEncoder encoder = new BinaryEncoder(this.m_context); + encoder.WriteEncodeable(null, encodeable, null); + bytes = encoder.CloseAndReturnBuffer(); + WriteByteString(null, bytes); + } + } + + /// + /// Writes an encodeable object to the stream. + /// + public void WriteEncodeable(string fieldName, IEncodeable value, System.Type systemType) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + // create a default object if a null object specified. + if (value == null) + { + if (systemType == null) throw new ArgumentNullException(nameof(systemType)); + value = Activator.CreateInstance(systemType) as IEncodeable; + } + + m_nestingLevel++; + + // encode the object. + if (value != null) + { + value.Encode(this); + } + + m_nestingLevel--; + } + + /// + /// Writes an enumerated value array to the stream. + /// + public void WriteEnumerated(string fieldName, Enum value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + + WriteInt32(null, Convert.ToInt32(value, CultureInfo.InvariantCulture)); + } + + /// + /// Writes a boolean array to the stream. + /// + public void WriteBooleanArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteBoolean(null, values[ii]); + } + } + + /// + /// Writes a sbyte array to the stream. + /// + public void WriteSByteArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteSByte(null, values[ii]); + } + } + + /// + /// Writes a sbyte array to the stream. + /// + public void WriteByteArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteByte(null, values[ii]); + } + } + + /// + /// Writes a short array to the stream. + /// + public void WriteInt16Array(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt16(null, values[ii]); + } + } + + /// + /// Writes a ushort array to the stream. + /// + public void WriteUInt16Array(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt16(null, values[ii]); + } + } + + /// + /// Writes a int array to the stream. + /// + public void WriteInt32Array(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt32(null, values[ii]); + } + } + + /// + /// Writes a uint array to the stream. + /// + public void WriteUInt32Array(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt32(null, values[ii]); + } + } + + /// + /// Writes a long array to the stream. + /// + public void WriteInt64Array(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt64(null, values[ii]); + } + } + + /// + /// Writes a ulong array to the stream. + /// + public void WriteUInt64Array(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt64(null, values[ii]); + } + } + + /// + /// Writes a float array to the stream. + /// + public void WriteFloatArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteFloat(null, values[ii]); + } + } + + /// + /// Writes a double array to the stream. + /// + public void WriteDoubleArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteDouble(null, values[ii]); + } + } + + /// + /// Writes a string array to the stream. + /// + public void WriteStringArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteString(null, values[ii]); + } + } + + /// + /// Writes a UTC date/time array to the stream. + /// + public void WriteDateTimeArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteDateTime(null, values[ii]); + } + } + + /// + /// Writes a GUID array to the stream. + /// + public void WriteGuidArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteGuid(null, values[ii]); + } + } + + /// + /// Writes a GUID array to the stream. + /// + public void WriteGuidArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteGuid(null, values[ii]); + } + } + + /// + /// Writes a byte string array to the stream. + /// + public void WriteByteStringArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteByteString(null, values[ii]); + } + } + + /// + /// Writes an XmlElement array to the stream. + /// + public void WriteXmlElementArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteXmlElement(null, values[ii]); + } + } + + /// + /// Writes an NodeId array to the stream. + /// + public void WriteNodeIdArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteNodeId(null, values[ii]); + } + } + + /// + /// Writes an ExpandedNodeId array to the stream. + /// + public void WriteExpandedNodeIdArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteExpandedNodeId(null, values[ii]); + } + } + + /// + /// Writes an StatusCode array to the stream. + /// + public void WriteStatusCodeArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteStatusCode(null, values[ii]); + } + } + + /// + /// Writes an DiagnosticInfo array to the stream. + /// + public void WriteDiagnosticInfoArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteDiagnosticInfo(null, values[ii]); + } + } + + /// + /// Writes an QualifiedName array to the stream. + /// + public void WriteQualifiedNameArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteQualifiedName(null, values[ii]); + } + } + + /// + /// Writes an LocalizedText array to the stream. + /// + public void WriteLocalizedTextArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteLocalizedText(null, values[ii]); + } + } + + /// + /// Writes an Variant array to the stream. + /// + public void WriteVariantArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteVariant(null, values[ii]); + } + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValueArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteDataValue(null, values[ii]); + } + } + + /// + /// Writes an extension object array to the stream. + /// + public void WriteExtensionObjectArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteExtensionObject(null, values[ii]); + } + } + + /// + /// Writes an encodeable object array to the stream. + /// + public void WriteEncodeableArray(string fieldName, IList values, System.Type systemType) + { + // write length. + if (WriteArrayLength((Array)values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteEncodeable(null, values[ii], systemType); + } + } + + /// + /// Writes an enumerated value array to the stream. + /// + public void WriteEnumeratedArray(string fieldName, Array values, System.Type systemType) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Length; ii++) + { + WriteEnumerated(null, (Enum)values.GetValue(ii)); + } + } + #endregion + + #region Private Methods + /// + /// Writes an object array to the stream (converts to Variant first). + /// + private void WriteObjectArray(string fieldName, IList values) + { + // write length. + if (WriteArrayLength(values)) + { + return; + } + + // write contents. + for (int ii = 0; ii < values.Count; ii++) + { + WriteVariant(null, new Variant(values[ii])); + } + } + + /// + /// Write the length of an array. Returns true if the array is empty. + /// + private bool WriteArrayLength(ICollection values) + { + // check for null. + if (values == null) + { + WriteInt32(null, -1); + return true; + } + + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxArrayLength {0} < {1}", + m_context.MaxArrayLength, + values.Count); + } + + // write length. + WriteInt32(null, values.Count); + return values.Count == 0; + } + + /// + /// Write the length of an array. Returns true if the array is empty. + /// + private bool WriteArrayLength(Array values) + { + // check for null. + if (values == null) + { + WriteInt32(null, -1); + return true; + } + + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Length) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxArrayLength {0} < {1}", + m_context.MaxArrayLength, + values.Length); + } + + // write length. + WriteInt32(null, values.Length); + return values.Length == 0; + } + + /// + /// Returns the node id encoding byte for a node id value. + /// + private static byte GetNodeIdEncoding(IdType idType, object identifier, uint namespaceIndex) + { + NodeIdEncodingBits encoding = NodeIdEncodingBits.Numeric; + + switch (idType) + { + case IdType.Numeric: + { + uint id = Convert.ToUInt32(identifier, CultureInfo.InvariantCulture); + + if (id <= Byte.MaxValue && namespaceIndex == 0) + { + encoding = NodeIdEncodingBits.TwoByte; + break; + } + + if (id <= UInt16.MaxValue && namespaceIndex <= Byte.MaxValue) + { + encoding = NodeIdEncodingBits.FourByte; + break; + } + + encoding = NodeIdEncodingBits.Numeric; + break; + } + + case IdType.String: + { + encoding = NodeIdEncodingBits.String; + break; + } + + case IdType.Guid: + { + encoding = NodeIdEncodingBits.Guid; + break; + } + + case IdType.Opaque: + { + encoding = NodeIdEncodingBits.ByteString; + break; + } + + default: + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("NodeId identifier type '{0}' not supported.", idType)); + } + } + + return Convert.ToByte(encoding, CultureInfo.InvariantCulture); + } + + /// + /// Writes the body of a node id to the stream. + /// + private void WriteNodeIdBody(byte encoding, object identifier, ushort namespaceIndex) + { + // write the node id. + switch ((NodeIdEncodingBits)(0x3F & encoding)) + { + case NodeIdEncodingBits.TwoByte: + { + WriteByte(null, Convert.ToByte(identifier, CultureInfo.InvariantCulture)); + break; + } + + case NodeIdEncodingBits.FourByte: + { + WriteByte(null, Convert.ToByte(namespaceIndex)); + WriteUInt16(null, Convert.ToUInt16(identifier, CultureInfo.InvariantCulture)); + break; + } + + case NodeIdEncodingBits.Numeric: + { + WriteUInt16(null, namespaceIndex); + WriteUInt32(null, Convert.ToUInt32(identifier, CultureInfo.InvariantCulture)); + break; + } + + case NodeIdEncodingBits.String: + { + WriteUInt16(null, namespaceIndex); + WriteString(null, (string)identifier); + break; + } + + case NodeIdEncodingBits.Guid: + { + WriteUInt16(null, namespaceIndex); + WriteGuid(null, new Uuid((Guid)identifier)); + break; + } + + case NodeIdEncodingBits.ByteString: + { + WriteUInt16(null, namespaceIndex); + WriteByteString(null, (byte[])identifier); + break; + } + } + } + + /// + /// Writes an Variant to the stream. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private void WriteVariantValue(string fieldName, Variant value) + { + // check for null. + if (value.Value == null || value.TypeInfo == null || value.TypeInfo.BuiltInType == BuiltInType.Null) + { + WriteByte(null, 0); + return; + } + + // encode enums as int32. + byte encodingByte = (byte)value.TypeInfo.BuiltInType; + if (value.TypeInfo.BuiltInType == BuiltInType.Enumeration) + { + encodingByte = (byte)BuiltInType.Int32; + } + + object valueToEncode = value.Value; + + if (value.TypeInfo.ValueRank < 0) + { + WriteByte(null, encodingByte); + + switch (value.TypeInfo.BuiltInType) + { + case BuiltInType.Boolean: { WriteBoolean(null, (bool)valueToEncode); return; } + case BuiltInType.SByte: { WriteSByte(null, (sbyte)valueToEncode); return; } + case BuiltInType.Byte: { WriteByte(null, (byte)valueToEncode); return; } + case BuiltInType.Int16: { WriteInt16(null, (short)valueToEncode); return; } + case BuiltInType.UInt16: { WriteUInt16(null, (ushort)valueToEncode); return; } + case BuiltInType.Int32: { WriteInt32(null, (int)valueToEncode); return; } + case BuiltInType.UInt32: { WriteUInt32(null, (uint)valueToEncode); return; } + case BuiltInType.Int64: { WriteInt64(null, (long)valueToEncode); return; } + case BuiltInType.UInt64: { WriteUInt64(null, (ulong)valueToEncode); return; } + case BuiltInType.Float: { WriteFloat(null, (float)valueToEncode); return; } + case BuiltInType.Double: { WriteDouble(null, (double)valueToEncode); return; } + case BuiltInType.String: { WriteString(null, (string)valueToEncode); return; } + case BuiltInType.DateTime: { WriteDateTime(null, (DateTime)valueToEncode); return; } + case BuiltInType.Guid: { WriteGuid(null, (Uuid)valueToEncode); return; } + case BuiltInType.ByteString: { WriteByteString(null, (byte[])valueToEncode); return; } + case BuiltInType.XmlElement: { WriteXmlElement(null, (XmlElement)valueToEncode); return; } + case BuiltInType.NodeId: { WriteNodeId(null, (NodeId)valueToEncode); return; } + case BuiltInType.ExpandedNodeId: { WriteExpandedNodeId(null, (ExpandedNodeId)valueToEncode); return; } + case BuiltInType.StatusCode: { WriteStatusCode(null, (StatusCode)valueToEncode); return; } + case BuiltInType.QualifiedName: { WriteQualifiedName(null, (QualifiedName)valueToEncode); return; } + case BuiltInType.LocalizedText: { WriteLocalizedText(null, (LocalizedText)valueToEncode); return; } + case BuiltInType.ExtensionObject: { WriteExtensionObject(null, (ExtensionObject)valueToEncode); return; } + case BuiltInType.DataValue: { WriteDataValue(null, (DataValue)valueToEncode); return; } + case BuiltInType.Enumeration: { WriteInt32(null, Convert.ToInt32(valueToEncode)); return; } + } + + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Unexpected type encountered while encoding a Variant: {0}", + value.TypeInfo.BuiltInType); + } + + if (value.TypeInfo.ValueRank >= 0) + { + Matrix matrix = null; + + encodingByte |= (byte)VariantArrayEncodingBits.Array; + + if (value.TypeInfo.ValueRank > 1) + { + encodingByte |= (byte)VariantArrayEncodingBits.ArrayDimensions; + matrix = (Matrix)valueToEncode; + valueToEncode = matrix.Elements; + } + + WriteByte(null, encodingByte); + + switch (value.TypeInfo.BuiltInType) + { + case BuiltInType.Boolean: { WriteBooleanArray(null, (bool[])valueToEncode); break; } + case BuiltInType.SByte: { WriteSByteArray(null, (sbyte[])valueToEncode); break; } + case BuiltInType.Byte: { WriteByteArray(null, (byte[])valueToEncode); break; } + case BuiltInType.Int16: { WriteInt16Array(null, (short[])valueToEncode); break; } + case BuiltInType.UInt16: { WriteUInt16Array(null, (ushort[])valueToEncode); break; } + case BuiltInType.Int32: { WriteInt32Array(null, (int[])valueToEncode); break; } + case BuiltInType.UInt32: { WriteUInt32Array(null, (uint[])valueToEncode); break; } + case BuiltInType.Int64: { WriteInt64Array(null, (long[])valueToEncode); break; } + case BuiltInType.UInt64: { WriteUInt64Array(null, (ulong[])valueToEncode); break; } + case BuiltInType.Float: { WriteFloatArray(null, (float[])valueToEncode); break; } + case BuiltInType.Double: { WriteDoubleArray(null, (double[])valueToEncode); break; } + case BuiltInType.String: { WriteStringArray(null, (string[])valueToEncode); break; } + case BuiltInType.DateTime: { WriteDateTimeArray(null, (DateTime[])valueToEncode); break; } + case BuiltInType.Guid: { WriteGuidArray(null, (Uuid[])valueToEncode); break; } + case BuiltInType.ByteString: { WriteByteStringArray(null, (byte[][])valueToEncode); break; } + case BuiltInType.XmlElement: { WriteXmlElementArray(null, (XmlElement[])valueToEncode); break; } + case BuiltInType.NodeId: { WriteNodeIdArray(null, (NodeId[])valueToEncode); break; } + case BuiltInType.ExpandedNodeId: { WriteExpandedNodeIdArray(null, (ExpandedNodeId[])valueToEncode); break; } + case BuiltInType.StatusCode: { WriteStatusCodeArray(null, (StatusCode[])valueToEncode); break; } + case BuiltInType.QualifiedName: { WriteQualifiedNameArray(null, (QualifiedName[])valueToEncode); break; } + case BuiltInType.LocalizedText: { WriteLocalizedTextArray(null, (LocalizedText[])valueToEncode); break; } + case BuiltInType.ExtensionObject: { WriteExtensionObjectArray(null, (ExtensionObject[])valueToEncode); break; } + case BuiltInType.DataValue: { WriteDataValueArray(null, (DataValue[])valueToEncode); break; } + + case BuiltInType.Enumeration: + { + // Check whether the value to encode is int array. + int[] ints = valueToEncode as int[]; + if (ints == null) + { + Enum[] enums = valueToEncode as Enum[]; + if (enums == null) + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Type '{0}' is not allowed in an Enumeration.", value.GetType().FullName)); + } + ints = new int[enums.Length]; + for (int ii = 0; ii < enums.Length; ii++) + { + ints[ii] = (int)(object)enums[ii]; + } + } + + WriteInt32Array(null, ints); + break; + } + + case BuiltInType.Variant: + { + Variant[] variants = valueToEncode as Variant[]; + + if (variants != null) + { + WriteVariantArray(null, variants); + break; + } + + object[] objects = valueToEncode as object[]; + + if (objects != null) + { + WriteObjectArray(null, objects); + break; + } + + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Unexpected type encountered while encoding a Matrix: {0}", + valueToEncode.GetType()); + } + + default: + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Unexpected type encountered while encoding a Variant: {0}", + value.TypeInfo.BuiltInType); + } + } + + // write the dimensions. + if (value.TypeInfo.ValueRank > 1) + { + WriteInt32Array(null, (int[])matrix.Dimensions); + } + } + } + #endregion + + #region Private Fields + private Stream m_ostrm; + private BinaryWriter m_writer; + private ServiceMessageContext m_context; + private ushort[] m_namespaceMappings; + private ushort[] m_serverMappings; + private uint m_nestingLevel; + #endregion + } + + #region Internal Enumerations + /// + /// The possible values for the node id encoding byte. + /// + internal enum NodeIdEncodingBits + { + TwoByte = 0x00, + FourByte = 0x01, + Numeric = 0x02, + String = 0x03, + Guid = 0x04, + ByteString = 0x05 + } + + /// + /// The possible values for the diagnostic info encoding byte. + /// + [Flags] + internal enum DiagnosticInfoEncodingBits + { + SymbolicId = 0x01, + NamespaceUri = 0x02, + LocalizedText = 0x04, + Locale = 0x08, + AdditionalInfo = 0x10, + InnerStatusCode = 0x20, + InnerDiagnosticInfo = 0x40, + } + + /// + /// The possible values for the localized text encoding byte. + /// + [Flags] + internal enum LocalizedTextEncodingBits + { + Locale = 0x01, + Text = 0x02 + } + + /// + /// The possible values for the data value encoding byte. + /// + [Flags] + internal enum DataValueEncodingBits + { + Value = 0x01, + StatusCode = 0x02, + SourceTimestamp = 0x04, + ServerTimestamp = 0x08, + SourcePicoseconds = 0x10, + ServerPicoseconds = 0x20 + } + + /// + /// The possible values for the data value encoding byte. + /// + [Flags] + internal enum ExtensionObjectEncodingBits + { + TypeId = 0x01, + BinaryBody = 0x02, + XmlBody = 0x04 + } + + /// + /// The possible values for Variant encoding bits. + /// + [Flags] + internal enum VariantArrayEncodingBits + { + Array = 0x80, + ArrayDimensions = 0x40, + TypeMask = 0x3F + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/EncodableObject.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/EncodableObject.cs new file mode 100644 index 00000000..89a4eb61 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/EncodableObject.cs @@ -0,0 +1,210 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A concrete base class used by the autogenerated code. + /// + [DataContract(Name = "EncodeableObject", Namespace = Namespaces.OpcUaXsd)] + public abstract class EncodeableObject : IEncodeable + { + #region IEncodeable Methods + /// + public abstract ExpandedNodeId TypeId { get; } + + /// + public abstract ExpandedNodeId BinaryEncodingId { get; } + + /// + public abstract ExpandedNodeId XmlEncodingId { get; } + + /// + public virtual void Encode(IEncoder encoder) { } + + /// + public virtual void Decode(IDecoder decoder) { } + + /// + /// Checks if the value has changed. + /// + public virtual bool IsEqual(IEncodeable encodeable) + { + throw new NotImplementedException("Subclass must implement this method."); + } + #endregion + + #region Public Methods + /// + /// Applies the data encoding to the value. + /// + public static ServiceResult ApplyDataEncoding(ServiceMessageContext context, QualifiedName dataEncoding, ref object value) + { + // check if nothing to do. + if (QualifiedName.IsNull(dataEncoding) || value == null) + { + return ServiceResult.Good; + } + + // check for supported encoding type. + if (dataEncoding.NamespaceIndex != 0) + { + return StatusCodes.BadDataEncodingUnsupported; + } + + bool useXml = dataEncoding.Name == BrowseNames.DefaultXml; + + if (!useXml && dataEncoding.Name != BrowseNames.DefaultBinary) + { + return StatusCodes.BadDataEncodingInvalid; + } + + try + { + // check for array of encodeables. + IList encodeables = value as IList; + + if (encodeables == null) + { + // check for array of extension objects. + IList extensions = value as IList; + + if (extensions != null) + { + // convert extension objects to encodeables. + encodeables = new IEncodeable[extensions.Count]; + + for (int ii = 0; ii < encodeables.Count; ii++) + { + if (ExtensionObject.IsNull(extensions[ii])) + { + encodeables[ii] = null; + continue; + } + + IEncodeable element = extensions[ii].Body as IEncodeable; + + if (element == null) + { + return StatusCodes.BadTypeMismatch; + } + + encodeables[ii] = element; + } + } + } + + // apply data encoding to the array. + if (encodeables != null) + { + ExtensionObject[] extensions = new ExtensionObject[encodeables.Count]; + + for (int ii = 0; ii < extensions.Length; ii++) + { + extensions[ii] = Encode(context, encodeables[ii], useXml); + } + + value = extensions; + return ServiceResult.Good; + } + + // check for scalar value. + IEncodeable encodeable = value as IEncodeable; + + if (encodeable == null) + { + ExtensionObject extension = value as ExtensionObject; + + if (extension == null) + { + return StatusCodes.BadDataEncodingUnsupported; + } + + encodeable = extension.Body as IEncodeable; + } + + if (encodeable == null) + { + return StatusCodes.BadDataEncodingUnsupported; + } + + // do conversion. + value = Encode(context, encodeable, useXml); + return ServiceResult.Good; + } + catch (Exception e) + { + return ServiceResult.Create(e, StatusCodes.BadTypeMismatch, "Could not convert value to requested format."); + } + } + + /// + /// Encodes the object in XML or Binary + /// + public static ExtensionObject Encode(ServiceMessageContext context, IEncodeable encodeable, bool useXml) + { + if (useXml) + { + XmlElement body = EncodeableObject.EncodeXml(encodeable, context); + return new ExtensionObject(encodeable.XmlEncodingId, body); + } + else + { + byte[] body = EncodeableObject.EncodeBinary(encodeable, context); + return new ExtensionObject(encodeable.BinaryEncodingId, body); + } + } + + /// + /// Encodes the object in XML. + /// + public static XmlElement EncodeXml(IEncodeable encodeable, ServiceMessageContext context) + { + // create encoder. + XmlEncoder encoder = new XmlEncoder(context); + + // write body. + encoder.WriteExtensionObjectBody(encodeable); + + // create document from encoder. + XmlDocument document = new XmlDocument(); + document.InnerXml = encoder.Close(); + + // return root element. + return document.DocumentElement; + } + + /// + /// Encodes the object in binary + /// + public static byte[] EncodeBinary(IEncodeable encodeable, ServiceMessageContext context) + { + BinaryEncoder encoder = new BinaryEncoder(context); + encoder.WriteEncodeable(null, encodeable, null); + return encoder.CloseAndReturnBuffer(); + } + #endregion + + /// + /// Returns a deep copy of an encodeable object. + /// + public new object MemberwiseClone() + { + return base.MemberwiseClone(); + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/EncodeableFactory.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/EncodeableFactory.cs new file mode 100644 index 00000000..ce678195 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/EncodeableFactory.cs @@ -0,0 +1,381 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Reflection; +using System.Runtime.Serialization; +using System.Linq; +using System.Threading; + +namespace Opc.Ua +{ + + /// + /// Creates encodeable objects based on the type id. + /// + /// + /// + /// This factory is used to store and retrieve underlying OPC UA system types. + ///
+ /// + /// You can manually add types. You can also import all types from a specified assembly. + /// Once the types exist within the factory, these types can be then easily queried. + ///
+ ///
+ public class EncodeableFactory + { + #region Constructors + /// + /// Creates a factory initialized with the types in the core library. + /// + public EncodeableFactory() + { + m_encodeableTypes = new Dictionary(); + AddEncodeableTypes(this.GetType().GetTypeInfo().Assembly); + + #if DEBUG + m_instanceId = Interlocked.Increment(ref m_globalInstanceCount); + #endif + } + + /// + /// Creates a factory which is marked as shared and initialized with the types in the core library. + /// + public EncodeableFactory(bool shared) + { + m_encodeableTypes = new Dictionary(); + AddEncodeableTypes(Utils.DefaultOpcUaCoreAssemblyFullName); + + #if DEBUG + m_instanceId = Interlocked.Increment(ref m_globalInstanceCount); + m_shared = true; + #endif + } + + /// + /// Creates a factory by copying the table from another factory. + /// + public EncodeableFactory(EncodeableFactory factory) + { + m_encodeableTypes = new Dictionary(); + + #if DEBUG + m_instanceId = Interlocked.Increment(ref m_globalInstanceCount); + #endif + + lock (factory.m_lock) + { + foreach (KeyValuePair current in factory.m_encodeableTypes) + { + m_encodeableTypes.Add(current.Key, current.Value); + } + } + } + + /// + /// Loads the types from an assembly. + /// + private void AddEncodeableTypes(string assemblyName) + { + try + { + AssemblyName an = new AssemblyName(assemblyName); + Assembly assembly = Assembly.Load(an); + AddEncodeableTypes(assembly); + } + catch (Exception) + { + Utils.Trace("Could not load encodeable types from assembly: {0}", assemblyName); + } + } + #endregion + + #region Static Members + /// + /// The default factory for the process. + /// + /// + /// The default factory for the process. + /// + public static EncodeableFactory GlobalFactory + { + get { return s_globalFactory; } + } + + /// + /// Returns the xml qualified name for the specified system type id. + /// + /// + /// Returns the xml qualified name for the specified system type id. + /// + /// The underlying type to query and return the Xml qualified name of + public static XmlQualifiedName GetXmlName(System.Type systemType) + { + if (systemType == null) + { + return null; + } + + object[] attributes = systemType.GetTypeInfo().GetCustomAttributes(typeof(DataContractAttribute), true).ToArray(); + + if (attributes != null) + { + for (int ii = 0; ii < attributes.Length; ii++) + { + DataContractAttribute contract = attributes[ii] as DataContractAttribute; + + if (contract != null) + { + if (String.IsNullOrEmpty(contract.Name)) + { + return new XmlQualifiedName(systemType.Name, contract.Namespace); + } + + return new XmlQualifiedName(contract.Name, contract.Namespace); + } + } + } + + attributes = systemType.GetTypeInfo().GetCustomAttributes(typeof(CollectionDataContractAttribute), true).ToArray(); + + if (attributes != null) + { + for (int ii = 0; ii < attributes.Length; ii++) + { + CollectionDataContractAttribute contract = attributes[ii] as CollectionDataContractAttribute; + + if (contract != null) + { + if (String.IsNullOrEmpty(contract.Name)) + { + return new XmlQualifiedName(systemType.Name, contract.Namespace); + } + + return new XmlQualifiedName(contract.Name, contract.Namespace); + } + } + } + + if (systemType == typeof(System.Byte[])) + { + return new XmlQualifiedName("ByteString"); + } + + return new XmlQualifiedName(systemType.FullName); + } + #endregion + + #region Public Members + /// + /// Returns the object used to synchronize access to the factory. + /// + /// + /// Returns the object used to synchronize access to the factory. + /// + public object SyncRoot + { + get { return m_lock; } + } + + /// + /// Returns a unique identifier for the table instance. Used to debug problems with shared tables. + /// + public int InstanceId + { + #if DEBUG + get { return m_instanceId; } + #else + get { return 0; } + #endif + } + + /// + /// Adds an extension type to the factory. + /// + /// + /// Adds an extension type to the factory. + /// + /// The underlying system type to add to the factory + public void AddEncodeableType(System.Type systemType) + { + lock (m_lock) + { + if (systemType == null) + { + return; + } + + if (!typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(systemType.GetTypeInfo())) + { + return; + } + + IEncodeable encodeable = Activator.CreateInstance(systemType) as IEncodeable; + + if (encodeable == null) + { + return; + } + + #if DEBUG + if (m_shared) + { + Utils.Trace("WARNING: Adding type '{0}' to shared Factory #{1}.", systemType.Name, m_instanceId); + } + #endif + + ExpandedNodeId nodeId = encodeable.TypeId; + + if (!NodeId.IsNull(nodeId)) + { + // check for default namespace. + if (nodeId.NamespaceUri == Namespaces.OpcUa) + { + nodeId = new ExpandedNodeId(nodeId.InnerNodeId); + } + + m_encodeableTypes[nodeId] = systemType; + } + + nodeId = encodeable.BinaryEncodingId; + + if (!NodeId.IsNull(nodeId)) + { + // check for default namespace. + if (nodeId.NamespaceUri == Namespaces.OpcUa) + { + nodeId = new ExpandedNodeId(nodeId.InnerNodeId); + } + + m_encodeableTypes[nodeId] = systemType; + } + + nodeId = encodeable.XmlEncodingId; + + if (!NodeId.IsNull(nodeId)) + { + // check for default namespace. + if (nodeId.NamespaceUri == Namespaces.OpcUa) + { + nodeId = new ExpandedNodeId(nodeId.InnerNodeId); + } + + m_encodeableTypes[nodeId] = systemType; + } + } + } + + /// + /// Associates an encodeable type with an encoding id. + /// + /// A NodeId for a Data Type Encoding node + /// The system type to use for the specified encoding. + public void AddEncodeableType(ExpandedNodeId encodingId, System.Type systemType) + { + lock (m_lock) + { + if (systemType != null && !NodeId.IsNull(encodingId)) + { + #if DEBUG + if (m_shared) + { + Utils.Trace("WARNING: Adding type '{0}' to shared Factory #{1}.", systemType.Name, m_instanceId); + } + #endif + + m_encodeableTypes[encodingId] = systemType; + } + } + } + + /// + /// Adds all encodable types exported from an assembly to the factory. + /// + /// + /// + /// Adds all encodable types exported from an assembly to the factory. + ///
+ /// + /// This method uses reflection on the specified assembly to export all of the + /// types the assembly exposes, and automatically adds all types that implement + /// the interface, to the factory. + ///
+ ///
+ /// The assembly containing the types to add to the factory + public void AddEncodeableTypes(Assembly assembly) + { + if (assembly != null) + { + #if DEBUG + if (m_shared) + { + Utils.Trace("WARNING: Adding types from assembly '{0}' to shared Factory #{1}.", assembly.FullName, m_instanceId); + } + #endif + + lock (m_lock) + { + System.Type[] systemTypes = assembly.GetExportedTypes(); + + for (int ii = 0; ii < systemTypes.Length; ii++) + { + if (systemTypes[ii].GetTypeInfo().IsAbstract) + { + continue; + } + + AddEncodeableType(systemTypes[ii]); + } + } + } + } + + /// + /// Returns the system type for the specified type id. + /// + /// + /// Returns the system type for the specified type id. + /// + /// The type id to return the system-type of + public System.Type GetSystemType(ExpandedNodeId typeId) + { + lock (m_lock) + { + System.Type systemType = null; + + if (NodeId.IsNull(typeId) || !m_encodeableTypes.TryGetValue(typeId, out systemType)) + { + return null; + } + + return systemType; + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private Dictionary m_encodeableTypes; + private static EncodeableFactory s_globalFactory = new EncodeableFactory(); + + #if DEBUG + private bool m_shared; + private int m_instanceId; + private static int m_globalInstanceCount; + #endif + #endregion + + }//class + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IComplexTypeInstance.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IComplexTypeInstance.cs new file mode 100644 index 00000000..1dd8150f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IComplexTypeInstance.cs @@ -0,0 +1,28 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + /// + /// Interface implemented by complex data type instances. + /// + public interface IComplexTypeInstance + { + /// + /// Gets or sets the UA type identifier for the encodeable type. + /// + /// + /// The UA type identifier. + /// + ExpandedNodeId TypeId { get; set; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IDecoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IDecoder.cs new file mode 100644 index 00000000..bb7864f1 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IDecoder.cs @@ -0,0 +1,328 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Defines functions used to dencode objects from a stream. + /// + public interface IDecoder + { + /// + /// The type of encoding being used. + /// + EncodingType EncodingType { get; } + + /// + /// The message context associated with the decoder. + /// + ServiceMessageContext Context { get; } + + /// + /// Initializes the tables used to map namespace and server uris during decoding. + /// + /// The namespaces URIs referenced by the data being decoded. + /// The server URIs referenced by the data being decoded. + void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris); + + /// + /// Pushes a namespace onto the namespace stack. + /// + void PushNamespace(string namespaceUri); + + /// + /// Pops a namespace from the namespace stack. + /// + void PopNamespace(); + + /// + /// Reads a boolean from the stream. + /// + bool ReadBoolean(string fieldName); + + /// + /// Reads a sbyte from the stream. + /// + sbyte ReadSByte(string fieldName); + + /// + /// Reads a byte from the stream. + /// + byte ReadByte(string fieldName); + + /// + /// Reads a short from the stream. + /// + short ReadInt16(string fieldName); + + /// + /// Reads a ushort from the stream. + /// + ushort ReadUInt16(string fieldName); + + /// + /// Reads an int from the stream. + /// + int ReadInt32(string fieldName); + + /// + /// Reads a uint from the stream. + /// + uint ReadUInt32(string fieldName); + + /// + /// Reads a long from the stream. + /// + long ReadInt64(string fieldName); + + /// + /// Reads a ulong from the stream. + /// + ulong ReadUInt64(string fieldName); + + /// + /// Reads a float from the stream. + /// + float ReadFloat(string fieldName); + + /// + /// Reads a double from the stream. + /// + double ReadDouble(string fieldName); + + /// + /// Reads a string from the stream. + /// + string ReadString(string fieldName); + + /// + /// Reads a UTC date/time from the stream. + /// + DateTime ReadDateTime(string fieldName); + + /// + /// Reads a GUID from the stream. + /// + Uuid ReadGuid(string fieldName); + + /// + /// Reads a byte string from the stream. + /// + byte[] ReadByteString(string fieldName); + + /// + /// Reads an XmlElement from the stream. + /// + XmlElement ReadXmlElement(string fieldName); + + /// + /// Reads an NodeId from the stream. + /// + NodeId ReadNodeId(string fieldName); + + /// + /// Reads an ExpandedNodeId from the stream. + /// + ExpandedNodeId ReadExpandedNodeId(string fieldName); + + /// + /// Reads an StatusCode from the stream. + /// + StatusCode ReadStatusCode(string fieldName); + + /// + /// Reads an DiagnosticInfo from the stream. + /// + DiagnosticInfo ReadDiagnosticInfo(string fieldName); + + /// + /// Reads an QualifiedName from the stream. + /// + QualifiedName ReadQualifiedName(string fieldName); + + /// + /// Reads an LocalizedText from the stream. + /// + LocalizedText ReadLocalizedText(string fieldName); + + /// + /// Reads an Variant from the stream. + /// + Variant ReadVariant(string fieldName); + + /// + /// Reads an DataValue from the stream. + /// + DataValue ReadDataValue(string fieldName); + + /// + /// Reads an ExtensionObject from the stream. + /// + ExtensionObject ReadExtensionObject(string fieldName); + + /// + /// Reads an encodeable object from the stream. + /// + /// The encodeable object field name + /// The system type of the encopdeable object to be read + /// The TypeId for the instance that will be read. + /// An object that was read from the stream. + IEncodeable ReadEncodeable(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null); + + /// + /// Reads an enumerated value from the stream. + /// + Enum ReadEnumerated(string fieldName, System.Type enumType); + + /// + /// Reads a boolean array from the stream. + /// + BooleanCollection ReadBooleanArray(string fieldName); + + /// + /// Reads a sbyte array from the stream. + /// + SByteCollection ReadSByteArray(string fieldName); + + /// + /// Reads a sbyte array from the stream. + /// + ByteCollection ReadByteArray(string fieldName); + + /// + /// Reads a short array from the stream. + /// + Int16Collection ReadInt16Array(string fieldName); + + /// + /// Reads a ushort array from the stream. + /// + UInt16Collection ReadUInt16Array(string fieldName); + + /// + /// Reads a int array from the stream. + /// + Int32Collection ReadInt32Array(string fieldName); + + /// + /// Reads a uint array from the stream. + /// + UInt32Collection ReadUInt32Array(string fieldName); + + /// + /// Reads a long array from the stream. + /// + Int64Collection ReadInt64Array(string fieldName); + + /// + /// Reads a ulong array from the stream. + /// + UInt64Collection ReadUInt64Array(string fieldName); + + /// + /// Reads a float array from the stream. + /// + FloatCollection ReadFloatArray(string fieldName); + + /// + /// Reads a double array from the stream. + /// + DoubleCollection ReadDoubleArray(string fieldName); + + /// + /// Reads a string array from the stream. + /// + StringCollection ReadStringArray(string fieldName); + + /// + /// Reads a UTC date/time array from the stream. + /// + DateTimeCollection ReadDateTimeArray(string fieldName); + + /// + /// Reads a GUID array from the stream. + /// + UuidCollection ReadGuidArray(string fieldName); + + /// + /// Reads a byte string array from the stream. + /// + ByteStringCollection ReadByteStringArray(string fieldName); + + /// + /// Reads an XmlElement array from the stream. + /// + XmlElementCollection ReadXmlElementArray(string fieldName); + + /// + /// Reads an NodeId array from the stream. + /// + NodeIdCollection ReadNodeIdArray(string fieldName); + + /// + /// Reads an ExpandedNodeId array from the stream. + /// + ExpandedNodeIdCollection ReadExpandedNodeIdArray(string fieldName); + + /// + /// Reads an StatusCode array from the stream. + /// + StatusCodeCollection ReadStatusCodeArray(string fieldName); + + /// + /// Reads an DiagnosticInfo array from the stream. + /// + DiagnosticInfoCollection ReadDiagnosticInfoArray(string fieldName); + + /// + /// Reads an QualifiedName array from the stream. + /// + QualifiedNameCollection ReadQualifiedNameArray(string fieldName); + + /// + /// Reads an LocalizedText array from the stream. + /// + LocalizedTextCollection ReadLocalizedTextArray(string fieldName); + + /// + /// Reads an Variant array from the stream. + /// + VariantCollection ReadVariantArray(string fieldName); + + /// + /// Reads an DataValue array from the stream. + /// + DataValueCollection ReadDataValueArray(string fieldName); + + /// + /// Reads an extension object array from the stream. + /// + ExtensionObjectCollection ReadExtensionObjectArray(string fieldName); + + /// + /// Reads an encodeable array from the stream. + /// + /// The encodeable array field name + /// The system type of the encopdeable objects to be read object + /// The TypeId for the instances that will be read. + /// An array that was read from the stream. + Array ReadEncodeableArray(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null); + + /// + /// Reads an enumerated value array from the stream. + /// + Array ReadEnumeratedArray(string fieldName, System.Type enumType); + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IEncodable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IEncodable.cs new file mode 100644 index 00000000..dbe0a47a --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IEncodable.cs @@ -0,0 +1,116 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// Defines methods used to encode and decode objects. + /// + public interface IEncodeable + { + /// + /// Returns the UA type identifier for the encodable type. + /// + /// The UA type identifier. + ExpandedNodeId TypeId { get; } + + /// + /// Returns the UA type identifier for the default binary encoding for the type. + /// + /// The UA type identifier for binary encoding. + ExpandedNodeId BinaryEncodingId { get; } + + /// + /// Returns the UA type identifier for the default XML encoding for the type. + /// + /// The UA type identifier for the XML encoding id. + ExpandedNodeId XmlEncodingId { get; } + + /// + /// Encodes the object in a stream. + /// + /// The encoder to be used for encoding the current value. + void Encode(IEncoder encoder); + + /// + /// Decodes the object from a stream. + /// + /// The decoder to be used for decoding the current value.. + void Decode(IDecoder decoder); + + /// + /// Checks if the value is equal to the another encodeable object. + /// + /// The encodeable. + /// + /// true if the specified instance of the type is equal; otherwise false. + /// + bool IsEqual(IEncodeable encodeable); + } + + #region IEncodeableCollection + /// + /// A collection of encodeable objects. + /// + [CollectionDataContract(Name = "ListOfEncodeable", Namespace = Namespaces.OpcUaXsd, ItemName = "Encodeable")] + public class IEncodeableCollection : List + { + /// + /// Initializes an empty collection. + /// + public IEncodeableCollection() { } + + /// + /// Initializes the collection from another collection. + /// + /// The collection whose elements are copied to the new list. + /// + /// is null. + /// + public IEncodeableCollection(IEnumerable collection) : base(collection) { } + + /// + /// Initializes the collection with the specified capacity. + /// + /// The initial capacity of the collection. + public IEncodeableCollection(int capacity) : base(capacity) { } + + /// + /// Converts an array to a collection. + /// + /// The values to be converted to an instance of . + /// Instance of the containing + public static IEncodeableCollection ToIEncodeableCollection(IEncodeable[] values) + { + if (values != null) + { + return new IEncodeableCollection(values); + } + + return new IEncodeableCollection(); + } + + /// + /// Converts an array to a collection. + /// + /// The values to be converted to new instance of . + /// The result of the conversion. + public static implicit operator IEncodeableCollection(IEncodeable[] values) + { + return ToIEncodeableCollection(values); + } + } + #endregion +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IEncoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IEncoder.cs new file mode 100644 index 00000000..82036535 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IEncoder.cs @@ -0,0 +1,357 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Defines functions used to encode objects in a stream. + /// + public interface IEncoder + { + /// + /// The type of encoding being used. + /// + EncodingType EncodingType { get; } + + /// + /// Selects the reversible encoding type. + /// + bool UseReversibleEncoding { get; } + + /// + /// The message context associated with the encoder. + /// + ServiceMessageContext Context { get; } + + /// + /// Sets the mapping tables to use during decoding. + /// + /// The namespace uris. + /// The server uris. + void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris); + + /// + /// Pushes a namespace onto the namespace stack. + /// + void PushNamespace(string namespaceUri); + + /// + /// Pops a namespace from the namespace stack. + /// + void PopNamespace(); + + /// + /// Writes a boolean to the stream. + /// + void WriteBoolean(string fieldName, bool value); + + /// + /// Writes a sbyte to the stream. + /// + void WriteSByte(string fieldName, sbyte value); + + /// + /// Writes a byte to the stream. + /// + void WriteByte(string fieldName, byte value); + + /// + /// Writes a short to the stream. + /// + void WriteInt16(string fieldName, short value); + + /// + /// Writes a ushort to the stream. + /// + void WriteUInt16(string fieldName, ushort value); + + /// + /// Writes an int to the stream. + /// + void WriteInt32(string fieldName, int value); + + /// + /// Writes a uint to the stream. + /// + void WriteUInt32(string fieldName, uint value); + + /// + /// Writes a long to the stream. + /// + void WriteInt64(string fieldName, long value); + + /// + /// Writes a ulong to the stream. + /// + void WriteUInt64(string fieldName, ulong value); + + /// + /// Writes a float to the stream. + /// + void WriteFloat(string fieldName, float value); + + /// + /// Writes a double to the stream. + /// + void WriteDouble(string fieldName, double value); + + /// + /// Writes a string to the stream. + /// + void WriteString(string fieldName, string value); + + /// + /// Writes a UTC date/time to the stream. + /// + void WriteDateTime(string fieldName, DateTime value); + + /// + /// Writes a GUID to the stream. + /// + void WriteGuid(string fieldName, Uuid value); + + /// + /// Writes a GUID to the stream. + /// + void WriteGuid(string fieldName, Guid value); + + /// + /// Writes a byte string to the stream. + /// + void WriteByteString(string fieldName, byte[] value); + + /// + /// Writes an XmlElement to the stream. + /// + void WriteXmlElement(string fieldName, XmlElement value); + + /// + /// Writes an NodeId to the stream. + /// + void WriteNodeId(string fieldName, NodeId value); + + /// + /// Writes an ExpandedNodeId to the stream. + /// + void WriteExpandedNodeId(string fieldName, ExpandedNodeId value); + + /// + /// Writes an StatusCode to the stream. + /// + void WriteStatusCode(string fieldName, StatusCode value); + + /// + /// Writes an DiagnosticInfo to the stream. + /// + void WriteDiagnosticInfo(string fieldName, DiagnosticInfo value); + + /// + /// Writes an QualifiedName to the stream. + /// + void WriteQualifiedName(string fieldName, QualifiedName value); + + /// + /// Writes an LocalizedText to the stream. + /// + void WriteLocalizedText(string fieldName, LocalizedText value); + + /// + /// Writes an Variant array to the stream. + /// + void WriteVariant(string fieldName, Variant value); + + /// + /// Writes an DataValue array to the stream. + /// + void WriteDataValue(string fieldName, DataValue value); + + /// + /// Writes an ExtensionObject to the stream. + /// + void WriteExtensionObject(string fieldName, ExtensionObject value); + + /// + /// Writes an encodeable object to the stream. + /// + void WriteEncodeable(string fieldName, IEncodeable value, System.Type systemType); + + /// + /// Writes an enumerated value array to the stream. + /// + void WriteEnumerated(string fieldName, Enum value); + + /// + /// Writes a boolean array to the stream. + /// + void WriteBooleanArray(string fieldName, IList values); + + /// + /// Writes a sbyte array to the stream. + /// + void WriteSByteArray(string fieldName, IList values); + + /// + /// Writes a sbyte array to the stream. + /// + void WriteByteArray(string fieldName, IList values); + + /// + /// Writes a short array to the stream. + /// + void WriteInt16Array(string fieldName, IList values); + + /// + /// Writes a ushort array to the stream. + /// + void WriteUInt16Array(string fieldName, IList values); + + /// + /// Writes a int array to the stream. + /// + void WriteInt32Array(string fieldName, IList values); + + /// + /// Writes a uint array to the stream. + /// + void WriteUInt32Array(string fieldName, IList values); + + /// + /// Writes a long array to the stream. + /// + void WriteInt64Array(string fieldName, IList values); + + /// + /// Writes a ulong array to the stream. + /// + void WriteUInt64Array(string fieldName, IList values); + + /// + /// Writes a float array to the stream. + /// + void WriteFloatArray(string fieldName, IList values); + + /// + /// Writes a double array to the stream. + /// + void WriteDoubleArray(string fieldName, IList values); + + /// + /// Writes a string array to the stream. + /// + void WriteStringArray(string fieldName, IList values); + + /// + /// Writes a UTC date/time array to the stream. + /// + void WriteDateTimeArray(string fieldName, IList values); + + /// + /// Writes a GUID array to the stream. + /// + void WriteGuidArray(string fieldName, IList values); + + /// + /// Writes a GUID array to the stream. + /// + void WriteGuidArray(string fieldName, IList values); + + /// + /// Writes a byte string array to the stream. + /// + void WriteByteStringArray(string fieldName, IList values); + + /// + /// Writes a XmlElement array to the stream. + /// + void WriteXmlElementArray(string fieldName, IList values); + + /// + /// Writes an NodeId array to the stream. + /// + void WriteNodeIdArray(string fieldName, IList values); + + /// + /// Writes an ExpandedNodeId array to the stream. + /// + void WriteExpandedNodeIdArray(string fieldName, IList values); + + /// + /// Writes an StatusCode array to the stream. + /// + void WriteStatusCodeArray(string fieldName, IList values); + + /// + /// Writes an DiagnosticInfo array to the stream. + /// + void WriteDiagnosticInfoArray(string fieldName, IList values); + + /// + /// Writes an QualifiedName array to the stream. + /// + void WriteQualifiedNameArray(string fieldName, IList values); + + /// + /// Writes an LocalizedText array to the stream. + /// + void WriteLocalizedTextArray(string fieldName, IList values); + + /// + /// Writes an Variant array to the stream. + /// + void WriteVariantArray(string fieldName, IList values); + + /// + /// Writes an DataValue array to the stream. + /// + void WriteDataValueArray(string fieldName, IList values); + + /// + /// Writes an extension object array to the stream. + /// + void WriteExtensionObjectArray(string fieldName, IList values); + + /// + /// Writes an encodeable object array to the stream. + /// + void WriteEncodeableArray(string fieldName, IList values, System.Type systemType); + + /// + /// Writes an enumerated value array to the stream. + /// + void WriteEnumeratedArray(string fieldName, Array values, System.Type systemType); + } + + /// + /// The type of encoding used by an encoder/decoder. + /// + public enum EncodingType + { + /// + /// The UA Binary encoding. + /// + Binary, + + /// + /// XML + /// + Xml, + + /// + /// JSON + /// + Json + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IStructureTypeInfo.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IStructureTypeInfo.cs new file mode 100644 index 00000000..e10364c6 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/IStructureTypeInfo.cs @@ -0,0 +1,25 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + /// + /// Interface implemented by structured type instances. + /// + public interface IStructureTypeInfo + { + /// + /// Gets the structure type. + /// + StructureType StructureType { get; } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/JsonDecoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/JsonDecoder.cs new file mode 100644 index 00000000..97ce1eff --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/JsonDecoder.cs @@ -0,0 +1,2579 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Xml; +using Newtonsoft.Json; + +namespace Opc.Ua +{ + /// + /// Reads objects from a JSON stream. + /// + public class JsonDecoder : IDecoder, IDisposable + { + #region Private Fields + private JsonTextReader m_reader; + private Dictionary m_root; + private Stack m_stack; + private ServiceMessageContext m_context; + private ushort[] m_namespaceMappings; + private ushort[] m_serverMappings; + private uint m_nestingLevel; + // JSON encoded value of: “9999-12-31T23:59:59Z” + private DateTime m_dateTimeMaxJsonValue = new DateTime((long)3155378975990000000); + private enum JTokenNullObject + { + Undefined = 0, + Object = 1, + Array = 2 + }; + #endregion + + #region Constructors + /// + /// Create a JSON decoder to decode a string. + /// + /// The JSON encoded string. + /// The service message context to use. + public JsonDecoder(string json, ServiceMessageContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + Initialize(); + + m_context = context; + m_nestingLevel = 0; + m_reader = new JsonTextReader(new StringReader(json)); + m_root = ReadObject(); + m_stack = new Stack(); + m_stack.Push(m_root); + } + + /// + /// Create a JSON decoder to decode a from a . + /// + /// The system type of the encoded JSON stram. + /// The text reader. + /// The service message context to use. + public JsonDecoder(Type systemType, JsonTextReader reader, ServiceMessageContext context) + { + Initialize(); + + m_context = context; + m_nestingLevel = 0; + m_reader = reader; + m_root = ReadObject(); + m_stack = new Stack(); + m_stack.Push(m_root); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_reader = null; + } + #endregion + + #region Public Methods + /// + /// Decodes a session-less message from a buffer. + /// + public static IEncodeable DecodeSessionLessMessage(byte[] buffer, ServiceMessageContext context) + { + if (buffer == null) throw new ArgumentNullException(nameof(buffer)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + JsonDecoder decoder = new JsonDecoder(UTF8Encoding.UTF8.GetString(buffer), context); + + try + { + // decode the actual message. + SessionLessServiceMessage message = new SessionLessServiceMessage(); + message.Decode(decoder); + return message.Message; + } + finally + { + decoder.Close(); + } + } + + /// + /// Decodes a message from a buffer. + /// + public static IEncodeable DecodeMessage(byte[] buffer, System.Type expectedType, ServiceMessageContext context) + { + return DecodeMessage(new ArraySegment(buffer), expectedType, context); + } + + /// + /// Decodes a message from a buffer. + /// + public static IEncodeable DecodeMessage(ArraySegment buffer, System.Type expectedType, ServiceMessageContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + // check that the max message size was not exceeded. + if (context.MaxMessageSize > 0 && context.MaxMessageSize < buffer.Count) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxMessageSize {0} < {1}", + context.MaxMessageSize, + buffer.Count); + } + + JsonDecoder decoder = new JsonDecoder(UTF8Encoding.UTF8.GetString(buffer.Array, buffer.Offset, buffer.Count), context); + + try + { + return decoder.DecodeMessage(expectedType); + } + finally + { + decoder.Close(); + } + } + + /// + /// Decodes an object from a buffer. + /// + public IEncodeable DecodeMessage(System.Type expectedType) + { + var namespaceUris = ReadStringArray("NamespaceUris"); + var serverUris = ReadStringArray("ServerUris"); + + if ((namespaceUris != null && namespaceUris.Count > 0) || (serverUris != null && serverUris.Count > 0)) + { + var namespaces = (namespaceUris == null || namespaceUris.Count == 0) ? m_context.NamespaceUris : new NamespaceTable(namespaceUris); + var servers = (serverUris == null || serverUris.Count == 0) ? m_context.ServerUris : new StringTable(serverUris); + + SetMappingTables(namespaces, servers); + } + + // read the node id. + NodeId typeId = ReadNodeId("TypeId"); + + // convert to absolute node id. + ExpandedNodeId absoluteId = NodeId.ToExpandedNodeId(typeId, m_context.NamespaceUris); + + // lookup message type. + Type actualType = m_context.Factory.GetSystemType(absoluteId); + + if (actualType == null) + { + throw new ServiceResultException(StatusCodes.BadEncodingError, Utils.Format("Cannot decode message with type id: {0}.", absoluteId)); + } + + // read the message. + IEncodeable message = ReadEncodeable("Body", actualType); + + // return the message. + return message; + } + + + /// + /// Initializes the tables used to map namespace and server uris during decoding. + /// + /// The namespaces URIs referenced by the data being decoded. + /// The server URIs referenced by the data being decoded. + public void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris) + { + m_namespaceMappings = null; + + if (namespaceUris != null && m_context.NamespaceUris != null) + { + m_namespaceMappings = m_context.NamespaceUris.CreateMapping(namespaceUris, false); + } + + m_serverMappings = null; + + if (serverUris != null && m_context.ServerUris != null) + { + m_serverMappings = m_context.ServerUris.CreateMapping(serverUris, false); + } + } + + /// + /// Closes the stream used for reading. + /// + public void Close() + { + m_reader.Close(); + } + + /// + /// Closes the stream used for reading. + /// + public void Close(bool checkEof) + { + if (checkEof && m_reader.TokenType != JsonToken.EndObject) + { + while (m_reader.Read() && m_reader.TokenType != JsonToken.EndObject) + { + ; + } + } + + m_reader.Close(); + } + + private List ReadArray() + { + List elements = new List(); + + while (m_reader.Read() && m_reader.TokenType != JsonToken.EndArray) + { + switch (m_reader.TokenType) + { + case JsonToken.Comment: + { + break; + } + + case JsonToken.Null: + { + elements.Add(JTokenNullObject.Array); + break; + } + case JsonToken.Date: + case JsonToken.Boolean: + case JsonToken.Integer: + case JsonToken.Float: + case JsonToken.String: + { + elements.Add(m_reader.Value); + break; + } + + case JsonToken.StartArray: + { + elements.Add(ReadArray()); + break; + } + + case JsonToken.StartObject: + { + elements.Add(ReadObject()); + break; + } + + default: + break; + } + } + + return elements; + } + + private Dictionary ReadObject() + { + Dictionary fields = new Dictionary(); + + while (m_reader.Read() && m_reader.TokenType != JsonToken.EndObject) + { + if (m_reader.TokenType == JsonToken.PropertyName) + { + string name = (string)m_reader.Value; + + if (m_reader.Read() && m_reader.TokenType != JsonToken.EndObject) + { + switch (m_reader.TokenType) + { + case JsonToken.Comment: + { + break; + } + + case JsonToken.Null: + { + fields[name] = JTokenNullObject.Object; + break; + } + + case JsonToken.Date: + case JsonToken.Bytes: + case JsonToken.Boolean: + case JsonToken.Integer: + case JsonToken.Float: + case JsonToken.String: + { + fields[name] = m_reader.Value; + break; + } + + case JsonToken.StartArray: + { + fields[name] = ReadArray(); + break; + } + + case JsonToken.StartObject: + { + fields[name] = ReadObject(); + break; + } + + default: + break; + } + } + } + } + + return fields; + } + + /// + /// Reads the body extension object from the stream. + /// + public object ReadExtensionObjectBody(ExpandedNodeId typeId) + { + return null; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_reader != null) + { + m_reader.Close(); + } + } + } + #endregion + + #region IDecoder Members + /// + /// The type of encoding being used. + /// + public EncodingType EncodingType => EncodingType.Json; + + /// + /// The message context associated with the decoder. + /// + public ServiceMessageContext Context => m_context; + + /// + /// Pushes a namespace onto the namespace stack. + /// + public void PushNamespace(string namespaceUri) + { + } + + /// + /// Pops a namespace from the namespace stack. + /// + public void PopNamespace() + { + } + + /// + /// Read a decoded JSON field. + /// + /// The name of the field. + /// The returned object token of the field. + public bool ReadField(string fieldName, out object token) + { + token = null; + + if (String.IsNullOrEmpty(fieldName)) + { + token = m_stack.Peek(); + return true; + } + + var context = m_stack.Peek() as Dictionary; + + if (context == null || !context.TryGetValue(fieldName, out token)) + { + return false; + } + + return true; + } + + /// + /// Reads a boolean from the stream. + /// + public bool ReadBoolean(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return false; + } + + var value = token as bool?; + + if (value == null) + { + return false; + } + + return (bool)token; + } + + /// + /// Reads a sbyte from the stream. + /// + public sbyte ReadSByte(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + return 0; + } + + if (value < SByte.MinValue || value > SByte.MaxValue) + { + return 0; + } + + return (sbyte)value; + } + + /// + /// Reads a byte from the stream. + /// + public byte ReadByte(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + return 0; + } + + if (value < Byte.MinValue || value > Byte.MaxValue) + { + return 0; + } + + return (byte)value; + } + + /// + /// Reads a short from the stream. + /// + public short ReadInt16(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + return 0; + } +; + if (value < Int16.MinValue || value > Int16.MaxValue) + { + return 0; + } + + return (short)value; + } + + /// + /// Reads a ushort from the stream. + /// + public ushort ReadUInt16(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + return 0; + } + + if (value < UInt16.MinValue || value > UInt16.MaxValue) + { + return 0; + } + + return (ushort)value; + } + + /// + /// Reads an int from the stream. + /// + public int ReadInt32(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + return 0; + } + + if (value < Int32.MinValue || value > Int32.MaxValue) + { + return 0; + } + + return (int)value; + } + + /// + /// Reads a uint from the stream. + /// + public uint ReadUInt32(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + var text = token as string; + uint number = 0; + + if (text == null || !UInt32.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out number)) + { + return 0; + } + + return number; + } + + if (value < UInt32.MinValue || value > UInt32.MaxValue) + { + return 0; + } + + return (uint)value; + } + + /// + /// Reads a long from the stream. + /// + public long ReadInt64(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + var text = token as string; + long number = 0; + + if (text == null || !Int64.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out number)) + { + return 0; + } + + return number; + } + + if (value < Int64.MinValue || value > Int64.MaxValue) + { + return 0; + } + + return (long)value; + } + + /// + /// Reads a ulong from the stream. + /// + public ulong ReadUInt64(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as long?; + + if (value == null) + { + var text = token as string; + ulong number = 0; + + if (text == null || !UInt64.TryParse(text, + NumberStyles.Integer, + CultureInfo.InvariantCulture, out number)) + { + return 0; + } + + return number; + } + + if (value < 0) + { + return 0; + } + + return (ulong)value; + } + + /// + /// Reads a float from the stream. + /// + public float ReadFloat(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as double?; + + if (value == null) + { + var text = token as string; + float number = 0; + if (text == null || !Single.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out number)) + { + if (text != null) + { + if (String.Compare(text, "Infinity", StringComparison.OrdinalIgnoreCase) == 0) + { + return Single.PositiveInfinity; + } + else if (String.Compare(text, "-Infinity", StringComparison.OrdinalIgnoreCase) == 0) + { + return Single.NegativeInfinity; + } + else if (String.Compare(text, "NaN", StringComparison.OrdinalIgnoreCase) == 0) + { + return Single.NaN; + } + } + + var integer = token as long?; + if (integer == null) + { + return 0; + } + + return (float)integer; + } + + return number; + } + + float floatValue = (float)value; + if (floatValue >= Single.MinValue && floatValue <= Single.MaxValue) + { + return (float)value; + } + + return 0; + } + + /// + /// Reads a double from the stream. + /// + public double ReadDouble(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return 0; + } + + var value = token as double?; + + if (value == null) + { + var text = token as string; + double number = 0; + + if (text == null || !Double.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out number)) + { + if (text != null) + { + if (String.Compare(text, "Infinity", StringComparison.OrdinalIgnoreCase) == 0) + { + return Double.PositiveInfinity; + } + else if (String.Compare(text, "-Infinity", StringComparison.OrdinalIgnoreCase) == 0) + { + return Double.NegativeInfinity; + } + else if (String.Compare(text, "NaN", StringComparison.OrdinalIgnoreCase) == 0) + { + return Double.NaN; + } + } + + var integer = token as long?; + + if (integer == null) + { + return 0; + } + + return (double)integer; + } + + return number; + } + + return (double)value; + } + + /// + /// Reads a string from the stream. + /// + public string ReadString(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return null; + } + + var value = token as string; + + if (value == null) + { + return null; + } + + if (m_context.MaxStringLength > 0 && m_context.MaxStringLength < value.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + return (string)value; + } + + /// + /// Reads a UTC date/time from the stream. + /// + public DateTime ReadDateTime(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return DateTime.MinValue; + } + + var value = token as DateTime?; + if (value != null) + { + return value.Value >= m_dateTimeMaxJsonValue ? DateTime.MaxValue : value.Value; + } + + var text = token as string; + if (text != null) + { + var result = XmlConvert.ToDateTime(text, XmlDateTimeSerializationMode.Utc); + return result >= m_dateTimeMaxJsonValue ? DateTime.MaxValue : result; + } + + return DateTime.MinValue; + } + + /// + /// Reads a GUID from the stream. + /// + public Uuid ReadGuid(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return Uuid.Empty; + } + + var value = token as string; + + if (value == null) + { + return Uuid.Empty; + } + + return new Uuid(value); + } + + /// + /// Reads a byte string from the stream. + /// + public byte[] ReadByteString(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return null; + } + + if (token is JTokenNullObject) + { + return null; + } + + var value = token as string; + if (value == null) + { + return new byte[0]; + } + + var bytes = Convert.FromBase64String(value); + + if (m_context.MaxByteStringLength > 0 && m_context.MaxByteStringLength < bytes.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + return bytes; + } + + + /// + /// Reads an XmlElement from the stream. + /// + public XmlElement ReadXmlElement(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return null; + } + + var value = token as string; + + if (value == null) + { + return null; + } + + var bytes = Convert.FromBase64String(value); + + if (bytes != null && bytes.Length > 0) + { + XmlDocument document = new XmlDocument(); + string xmlString = new UTF8Encoding().GetString(bytes, 0, bytes.Length); + + using (XmlReader reader = XmlReader.Create(new StringReader(xmlString), + new XmlReaderSettings() { DtdProcessing = System.Xml.DtdProcessing.Prohibit })) + { + document.Load(reader); + } + + return document.DocumentElement; + } + + return null; + } + + /// + /// Reads an NodeId from the stream. + /// + public NodeId ReadNodeId(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return NodeId.Null; + } + + var value = token as Dictionary; + + if (value == null) + { + return NodeId.Null; + } + + IdType idType = IdType.Numeric; + ushort namespaceIndex = 0; + + try + { + m_stack.Push(value); + + if (value.ContainsKey("IdType")) + { + idType = (IdType)ReadInt32("IdType"); + } + + if (value.ContainsKey("Namespace")) + { + namespaceIndex = ReadUInt16("Namespace"); + } + + if (value.ContainsKey("Id")) + { + switch (idType) + { + case IdType.Numeric: + default: + { + return new NodeId(ReadUInt32("Id"), namespaceIndex); + } + + case IdType.Opaque: + { + return new NodeId(ReadByteString("Id"), namespaceIndex); + } + + case IdType.String: + { + return new NodeId(ReadString("Id"), namespaceIndex); + } + + case IdType.Guid: + { + return new NodeId(ReadGuid("Id"), namespaceIndex); + } + + } + } + return DefaultNodeId(idType, namespaceIndex); + } + finally + { + m_stack.Pop(); + } + } + + /// + /// Reads an ExpandedNodeId from the stream. + /// + public ExpandedNodeId ReadExpandedNodeId(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return ExpandedNodeId.Null; + } + + var value = token as Dictionary; + + if (value == null) + { + return ExpandedNodeId.Null; + } + + IdType idType = IdType.Numeric; + ushort namespaceIndex = 0; + string namespaceUri = null; + uint serverIndex = 0; + + try + { + m_stack.Push(value); + + if (value.ContainsKey("IdType")) + { + idType = (IdType)ReadInt32("IdType"); + } + + object namespaceToken = null; + + if (ReadField("Namespace", out namespaceToken)) + { + var index = namespaceToken as long?; + + if (index == null) + { + namespaceUri = namespaceToken as string; + } + else + { + if (index.Value >= 0 || index.Value < UInt16.MaxValue) + { + namespaceIndex = (ushort)index.Value; + } + } + } + + if (value.ContainsKey("ServerUri")) + { + serverIndex = ReadUInt32("ServerUri"); + } + + if (value.ContainsKey("Id")) + { + switch (idType) + { + case IdType.Numeric: + default: + { + return new ExpandedNodeId(ReadUInt32("Id"), namespaceIndex, namespaceUri, serverIndex); + } + + case IdType.Opaque: + { + return new ExpandedNodeId(ReadByteString("Id"), namespaceIndex, namespaceUri, serverIndex); + } + + case IdType.String: + { + return new ExpandedNodeId(ReadString("Id"), namespaceIndex, namespaceUri, serverIndex); + } + + case IdType.Guid: + { + return new ExpandedNodeId(ReadGuid("Id"), namespaceIndex, namespaceUri, serverIndex); + } + } + } + + return new ExpandedNodeId(DefaultNodeId(idType, namespaceIndex), namespaceUri, serverIndex); + } + finally + { + m_stack.Pop(); + } + } + + + /// + /// Reads an StatusCode from the stream. + /// + public StatusCode ReadStatusCode(string fieldName) + { + return ReadUInt32(fieldName); + } + + /// + /// Reads an DiagnosticInfo from the stream. + /// + public DiagnosticInfo ReadDiagnosticInfo(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return null; + } + + var value = token as Dictionary; + + if (value == null) + { + return null; + } + + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + try + { + m_nestingLevel++; + m_stack.Push(value); + + DiagnosticInfo di = new DiagnosticInfo(); + + if (value.ContainsKey("SymbolicId")) + { + di.SymbolicId = ReadInt32("SymbolicId"); + } + + if (value.ContainsKey("NamespaceUri")) + { + di.NamespaceUri = ReadInt32("NamespaceUri"); + } + + if (value.ContainsKey("Locale")) + { + di.Locale = ReadInt32("Locale"); + } + + if (value.ContainsKey("LocalizedText")) + { + di.LocalizedText = ReadInt32("LocalizedText"); + } + + if (value.ContainsKey("AdditionalInfo")) + { + di.AdditionalInfo = ReadString("AdditionalInfo"); + } + + if (value.ContainsKey("InnerStatusCode")) + { + di.InnerStatusCode = ReadStatusCode("InnerStatusCode"); + } + + if (value.ContainsKey("InnerDiagnosticInfo")) + { + di.InnerDiagnosticInfo = ReadDiagnosticInfo("InnerDiagnosticInfo"); + } + + return di; + } + finally + { + m_nestingLevel--; + m_stack.Pop(); + } + } + + /// + /// Reads an QualifiedName from the stream. + /// + public QualifiedName ReadQualifiedName(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return QualifiedName.Null; + } + + var value = token as Dictionary; + + if (value == null) + { + return QualifiedName.Null; + } + + UInt16 namespaceIndex = 0; + string name = null; + try + { + m_stack.Push(value); + + if (value.ContainsKey("Name")) + { + name = ReadString("Name"); + } + + if (value.ContainsKey("Uri")) + { + namespaceIndex = ReadUInt16("Uri"); + } + } + finally + { + m_stack.Pop(); + } + + return new QualifiedName(name, namespaceIndex); + } + + /// + /// Reads an LocalizedText from the stream. + /// + public LocalizedText ReadLocalizedText(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return LocalizedText.Null; + } + + string locale = null; + string text = null; + + var value = token as Dictionary; + + if (value == null) + { + text = token as string; + + if (text != null) + { + return new LocalizedText(text); + } + + return LocalizedText.Null; + } + + try + { + m_stack.Push(value); + + if (value.ContainsKey("Locale")) + { + locale = ReadString("Locale"); + } + + if (value.ContainsKey("Text")) + { + text = ReadString("Text"); + } + } + finally + { + m_stack.Pop(); + } + + return new LocalizedText(locale, text); + } + + private Variant ReadVariantBody(string fieldName, BuiltInType type) + { + switch (type) + { + case BuiltInType.Boolean: { return new Variant(ReadBoolean(fieldName), TypeInfo.Scalars.Boolean); } + case BuiltInType.SByte: { return new Variant(ReadSByte(fieldName), TypeInfo.Scalars.SByte); } + case BuiltInType.Byte: { return new Variant(ReadByte(fieldName), TypeInfo.Scalars.Byte); } + case BuiltInType.Int16: { return new Variant(ReadInt16(fieldName), TypeInfo.Scalars.Int16); } + case BuiltInType.UInt16: { return new Variant(ReadUInt16(fieldName), TypeInfo.Scalars.UInt16); } + case BuiltInType.Int32: { return new Variant(ReadInt32(fieldName), TypeInfo.Scalars.Int32); } + case BuiltInType.UInt32: { return new Variant(ReadUInt32(fieldName), TypeInfo.Scalars.UInt32); } + case BuiltInType.Int64: { return new Variant(ReadInt64(fieldName), TypeInfo.Scalars.Int64); } + case BuiltInType.UInt64: { return new Variant(ReadUInt64(fieldName), TypeInfo.Scalars.UInt64); } + case BuiltInType.Float: { return new Variant(ReadFloat(fieldName), TypeInfo.Scalars.Float); } + case BuiltInType.Double: { return new Variant(ReadDouble(fieldName), TypeInfo.Scalars.Double); } + case BuiltInType.String: { return new Variant(ReadString(fieldName), TypeInfo.Scalars.String); } + case BuiltInType.ByteString: { return new Variant(ReadByteString(fieldName), TypeInfo.Scalars.ByteString); } + case BuiltInType.DateTime: { return new Variant(ReadDateTime(fieldName), TypeInfo.Scalars.DateTime); } + case BuiltInType.Guid: { return new Variant(ReadGuid(fieldName), TypeInfo.Scalars.Guid); } + case BuiltInType.NodeId: { return new Variant(ReadNodeId(fieldName), TypeInfo.Scalars.NodeId); } + case BuiltInType.ExpandedNodeId: { return new Variant(ReadExpandedNodeId(fieldName), TypeInfo.Scalars.ExpandedNodeId); } + case BuiltInType.QualifiedName: { return new Variant(ReadQualifiedName(fieldName), TypeInfo.Scalars.QualifiedName); } + case BuiltInType.LocalizedText: { return new Variant(ReadLocalizedText(fieldName), TypeInfo.Scalars.LocalizedText); } + case BuiltInType.StatusCode: { return new Variant(ReadStatusCode(fieldName), TypeInfo.Scalars.StatusCode); } + case BuiltInType.XmlElement: { return new Variant(ReadXmlElement(fieldName), TypeInfo.Scalars.XmlElement); } + case BuiltInType.ExtensionObject: { return new Variant(ReadExtensionObject(fieldName), TypeInfo.Scalars.ExtensionObject); } + case BuiltInType.Variant: { return new Variant(ReadVariant(fieldName), TypeInfo.Scalars.Variant); } + } + + return Variant.Null; + } + + private Variant ReadVariantArrayBody(string fieldName, BuiltInType type) + { + switch (type) + { + case BuiltInType.Boolean: { return new Variant(ReadBooleanArray(fieldName), TypeInfo.Arrays.Boolean); } + case BuiltInType.SByte: { return new Variant(ReadSByteArray(fieldName), TypeInfo.Arrays.SByte); } + case BuiltInType.Byte: { return new Variant(ReadByteArray(fieldName), TypeInfo.Arrays.Byte); } + case BuiltInType.Int16: { return new Variant(ReadInt16Array(fieldName), TypeInfo.Arrays.Int16); } + case BuiltInType.UInt16: { return new Variant(ReadUInt16Array(fieldName), TypeInfo.Arrays.UInt16); } + case BuiltInType.Int32: { return new Variant(ReadInt32Array(fieldName), TypeInfo.Arrays.Int32); } + case BuiltInType.UInt32: { return new Variant(ReadUInt32Array(fieldName), TypeInfo.Arrays.UInt32); } + case BuiltInType.Int64: { return new Variant(ReadInt64Array(fieldName), TypeInfo.Arrays.Int64); } + case BuiltInType.UInt64: { return new Variant(ReadUInt64Array(fieldName), TypeInfo.Arrays.UInt64); } + case BuiltInType.Float: { return new Variant(ReadFloatArray(fieldName), TypeInfo.Arrays.Float); } + case BuiltInType.Double: { return new Variant(ReadDoubleArray(fieldName), TypeInfo.Arrays.Double); } + case BuiltInType.String: { return new Variant(ReadStringArray(fieldName), TypeInfo.Arrays.String); } + case BuiltInType.ByteString: { return new Variant(ReadByteStringArray(fieldName), TypeInfo.Arrays.ByteString); } + case BuiltInType.DateTime: { return new Variant(ReadDateTimeArray(fieldName), TypeInfo.Arrays.DateTime); } + case BuiltInType.Guid: { return new Variant(ReadGuidArray(fieldName), TypeInfo.Arrays.Guid); } + case BuiltInType.NodeId: { return new Variant(ReadNodeIdArray(fieldName), TypeInfo.Arrays.NodeId); } + case BuiltInType.ExpandedNodeId: { return new Variant(ReadExpandedNodeIdArray(fieldName), TypeInfo.Arrays.ExpandedNodeId); } + case BuiltInType.QualifiedName: { return new Variant(ReadQualifiedNameArray(fieldName), TypeInfo.Arrays.QualifiedName); } + case BuiltInType.LocalizedText: { return new Variant(ReadLocalizedTextArray(fieldName), TypeInfo.Arrays.LocalizedText); } + case BuiltInType.StatusCode: { return new Variant(ReadStatusCodeArray(fieldName), TypeInfo.Arrays.StatusCode); } + case BuiltInType.XmlElement: { return new Variant(ReadXmlElementArray(fieldName), TypeInfo.Arrays.XmlElement); } + case BuiltInType.ExtensionObject: { return new Variant(ReadExtensionObjectArray(fieldName), TypeInfo.Arrays.ExtensionObject); } + case BuiltInType.Variant: { return new Variant(ReadVariantArray(fieldName), TypeInfo.Arrays.Variant); } + } + + return Variant.Null; + } + + /// + /// Reads an Variant from the stream. + /// + public Variant ReadVariant(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return Variant.Null; + } + + var value = token as Dictionary; + + if (value == null) + { + return Variant.Null; + } + + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + try + { + m_nestingLevel++; + m_stack.Push(value); + + BuiltInType type = (BuiltInType)ReadByte("Type"); + + var context = m_stack.Peek() as Dictionary; + + if (!context.TryGetValue("Body", out token)) + { + return Variant.Null; + } + + Variant array; + if (token is Array) + { + array = ReadVariantBody("Body", type); + } + else if (token is List) + { + array = ReadVariantArrayBody("Body", type); + } + else + { + return ReadVariantBody("Body", type); + } + var dimensions = ReadInt32Array("Dimensions"); + if (array.Value is Array && dimensions != null && dimensions.Count > 1) + { + array = new Variant(new Matrix((Array)array.Value, type, dimensions.ToArray())); + } + return array; + } + finally + { + m_nestingLevel--; + m_stack.Pop(); + } + } + + /// + /// Reads an DataValue from the stream. + /// + public DataValue ReadDataValue(string fieldName) + { + object token = null; + + if (!ReadField(fieldName, out token)) + { + return null; + } + + var value = token as Dictionary; + + if (value == null) + { + return null; + } + + DataValue dv = new DataValue(); + + try + { + m_stack.Push(value); + + dv.WrappedValue = ReadVariant("Value"); + dv.StatusCode = ReadStatusCode("StatusCode"); + dv.SourceTimestamp = ReadDateTime("SourceTimestamp"); + dv.SourcePicoseconds = ReadUInt16("SourcePicoseconds"); + dv.ServerTimestamp = ReadDateTime("ServerTimestamp"); + dv.ServerPicoseconds = ReadUInt16("ServerPicoseconds"); + } + finally + { + m_stack.Pop(); + } + + return dv; + } + + private void EncodeAsJson(JsonTextWriter writer, object value) + { + var map = value as Dictionary; + + if (map != null) + { + EncodeAsJson(writer, map); + return; + } + + var list = value as List; + + if (list != null) + { + writer.WriteStartArray(); + + foreach (var element in list) + { + EncodeAsJson(writer, element); + } + + writer.WriteStartArray(); + return; + } + + writer.WriteValue(value); + } + + private void EncodeAsJson(JsonTextWriter writer, Dictionary value) + { + writer.WriteStartObject(); + + foreach (var field in value) + { + writer.WritePropertyName(field.Key); + EncodeAsJson(writer, field.Value); + } + + writer.WriteEndObject(); + } + + /// + /// Reads an extension object from the stream. + /// + public ExtensionObject ReadExtensionObject(string fieldName) + { + var extension = ExtensionObject.Null; + object token = null; + + if (!ReadField(fieldName, out token)) + { + return extension; + } + + var value = token as Dictionary; + + if (value == null) + { + return extension; + } + + try + { + m_stack.Push(value); + + ExpandedNodeId typeId = ReadExpandedNodeId("TypeId"); + ExpandedNodeId absoluteId = + typeId.IsAbsolute ? + typeId : + NodeId.ToExpandedNodeId(typeId.InnerNodeId, m_context.NamespaceUris); + + if (!NodeId.IsNull(typeId) && NodeId.IsNull(absoluteId)) + { + Utils.Trace("Cannot de-serialized extension objects if the NamespaceUri is not in the NamespaceTable: Type = {0}", typeId); + } + else + { + typeId = absoluteId; + } + + byte encoding = ReadByte("Encoding"); + + if (encoding == (byte)ExtensionObjectEncoding.Binary) + { + var bytes = ReadByteString("Body"); + return new ExtensionObject(typeId, bytes ?? new byte[0]); + } + + if (encoding == (byte)ExtensionObjectEncoding.Xml) + { + var xml = ReadXmlElement("Body"); + if (xml == null) + { + return extension; + } + return new ExtensionObject(typeId, xml); + } + + if (encoding == (byte)ExtensionObjectEncoding.Json) + { + var json = ReadString("Body"); + if (String.IsNullOrEmpty(json)) + { + return extension; + } + return new ExtensionObject(typeId, json); + } + + Type systemType = m_context.Factory.GetSystemType(typeId); + + if (systemType != null) + { + var encodeable = ReadEncodeable("Body", systemType); + if (encodeable == null) + { + return extension; + } + + return new ExtensionObject(typeId, encodeable); + } + + var ostrm = new MemoryStream(); + + using (JsonTextWriter writer = new JsonTextWriter(new StreamWriter(ostrm))) + { + EncodeAsJson(writer, token); + } + + return new ExtensionObject(typeId, ostrm.ToArray()); + } + finally + { + m_stack.Pop(); + } + } + + /// + /// Reads an encodeable object from the stream. + /// + /// The encodeable object field name + /// The system type of the encopdeable object to be read + /// The TypeId for the instance that will be read. + /// An object that was read from the stream. + public IEncodeable ReadEncodeable(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null) + { + if (systemType == null) + { + throw new ArgumentNullException(nameof(systemType)); + } + + object token = null; + + if (!ReadField(fieldName, out token)) + { + return null; + } + + IEncodeable value = Activator.CreateInstance(systemType) as IEncodeable; + + if (value == null) + { + throw new ServiceResultException(StatusCodes.BadDecodingError, Utils.Format("Type does not support IEncodeable interface: '{0}'", systemType.FullName)); + } + + if (encodeableTypeId != null) + { + // set type identifier for custom complex data types before decode. + IComplexTypeInstance complexTypeInstance = value as IComplexTypeInstance; + + if (complexTypeInstance != null) + { + complexTypeInstance.TypeId = encodeableTypeId; + } + } + + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + try + { + m_stack.Push(token); + + value.Decode(this); + } + finally + { + m_stack.Pop(); + } + + m_nestingLevel--; + + return value; + } + + /// + /// Reads an enumerated value from the stream. + /// + public Enum ReadEnumerated(string fieldName, System.Type enumType) + { + if (enumType == null) + { + throw new ArgumentNullException(nameof(enumType)); + } + + return (Enum)Enum.ToObject(enumType, ReadInt32(fieldName)); + } + + private bool ReadArrayField(string fieldName, out List array) + { + object token = array = null; + + if (!ReadField(fieldName, out token)) + { + return false; + } + + array = token as List; + + if (array == null) + { + return false; + } + + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < array.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + return true; + } + + /// + /// Reads a boolean array from the stream. + /// + public BooleanCollection ReadBooleanArray(string fieldName) + { + var values = new BooleanCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadBoolean(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a sbyte array from the stream. + /// + public SByteCollection ReadSByteArray(string fieldName) + { + var values = new SByteCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadSByte(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a byte array from the stream. + /// + public ByteCollection ReadByteArray(string fieldName) + { + var values = new ByteCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadByte(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a short array from the stream. + /// + public Int16Collection ReadInt16Array(string fieldName) + { + var values = new Int16Collection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadInt16(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a ushort array from the stream. + /// + public UInt16Collection ReadUInt16Array(string fieldName) + { + var values = new UInt16Collection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadUInt16(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a int array from the stream. + /// + public Int32Collection ReadInt32Array(string fieldName) + { + var values = new Int32Collection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadInt32(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a uint array from the stream. + /// + public UInt32Collection ReadUInt32Array(string fieldName) + { + var values = new UInt32Collection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadUInt32(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a long array from the stream. + /// + public Int64Collection ReadInt64Array(string fieldName) + { + var values = new Int64Collection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadInt64(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a ulong array from the stream. + /// + public UInt64Collection ReadUInt64Array(string fieldName) + { + var values = new UInt64Collection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadUInt64(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a float array from the stream. + /// + public FloatCollection ReadFloatArray(string fieldName) + { + var values = new FloatCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadFloat(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a double array from the stream. + /// + public DoubleCollection ReadDoubleArray(string fieldName) + { + var values = new DoubleCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadDouble(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a string array from the stream. + /// + public StringCollection ReadStringArray(string fieldName) + { + var values = new StringCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadString(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a UTC date/time array from the stream. + /// + public DateTimeCollection ReadDateTimeArray(string fieldName) + { + var values = new DateTimeCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + values.Add(ReadDateTime(null)); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a GUID array from the stream. + /// + public UuidCollection ReadGuidArray(string fieldName) + { + var values = new UuidCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadGuid(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads a byte string array from the stream. + /// + public ByteStringCollection ReadByteStringArray(string fieldName) + { + var values = new ByteStringCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadByteString(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an XmlElement array from the stream. + /// + public XmlElementCollection ReadXmlElementArray(string fieldName) + { + var values = new XmlElementCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadXmlElement(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an NodeId array from the stream. + /// + public NodeIdCollection ReadNodeIdArray(string fieldName) + { + var values = new NodeIdCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadNodeId(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an ExpandedNodeId array from the stream. + /// + public ExpandedNodeIdCollection ReadExpandedNodeIdArray(string fieldName) + { + var values = new ExpandedNodeIdCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadExpandedNodeId(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an StatusCode array from the stream. + /// + public StatusCodeCollection ReadStatusCodeArray(string fieldName) + { + var values = new StatusCodeCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadStatusCode(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an DiagnosticInfo array from the stream. + /// + public DiagnosticInfoCollection ReadDiagnosticInfoArray(string fieldName) + { + var values = new DiagnosticInfoCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadDiagnosticInfo(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an QualifiedName array from the stream. + /// + public QualifiedNameCollection ReadQualifiedNameArray(string fieldName) + { + var values = new QualifiedNameCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadQualifiedName(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an LocalizedText array from the stream. + /// + public LocalizedTextCollection ReadLocalizedTextArray(string fieldName) + { + var values = new LocalizedTextCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadLocalizedText(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an Variant array from the stream. + /// + public VariantCollection ReadVariantArray(string fieldName) + { + var values = new VariantCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadVariant(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an DataValue array from the stream. + /// + public DataValueCollection ReadDataValueArray(string fieldName) + { + var values = new DataValueCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadDataValue(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an array of extension objects from the stream. + /// + public ExtensionObjectCollection ReadExtensionObjectArray(string fieldName) + { + var values = new ExtensionObjectCollection(); + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return values; + } + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadExtensionObject(null); + values.Add(element); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an encodeable array from the stream. + /// + /// The encodeable array field name + /// The system type of the encopdeable objects to be read object + /// The TypeId for the instances that will be read. + /// An array that was read from the stream. + public Array ReadEncodeableArray(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null) + { + if (systemType == null) + { + throw new ArgumentNullException(nameof(systemType)); + } + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return Array.CreateInstance(systemType, 0); + } + + var values = Array.CreateInstance(systemType, token.Count); + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadEncodeable(null, systemType, encodeableTypeId); + values.SetValue(element, ii); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + + /// + /// Reads an enumerated value array from the stream. + /// + public Array ReadEnumeratedArray(string fieldName, System.Type enumType) + { + if (enumType == null) + { + throw new ArgumentNullException(nameof(enumType)); + } + + List token = null; + + if (!ReadArrayField(fieldName, out token)) + { + return Array.CreateInstance(enumType, 0); + } + + var values = Array.CreateInstance(enumType, token.Count); + + for (int ii = 0; ii < token.Count; ii++) + { + try + { + m_stack.Push(token[ii]); + var element = ReadEnumerated(null, enumType); + values.SetValue(element, ii); + } + finally + { + m_stack.Pop(); + } + } + + return values; + } + #endregion + + #region Private Methods + private NodeId DefaultNodeId(IdType idType, ushort namespaceIndex) + { + switch (idType) + { + case IdType.Numeric: + default: + { + return new NodeId(0U, namespaceIndex); + } + + case IdType.Opaque: + { + return new NodeId(new byte[0], namespaceIndex); + } + + case IdType.String: + { + return new NodeId("", namespaceIndex); + } + + case IdType.Guid: + { + return new NodeId(Guid.Empty, namespaceIndex); + } + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/JsonEncoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/JsonEncoder.cs new file mode 100644 index 00000000..03cc09ee --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/JsonEncoder.cs @@ -0,0 +1,2421 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Writes objects to a JSON stream. + /// + public class JsonEncoder : IEncoder, IDisposable + { + #region Private Fields + private MemoryStream m_destination; + private StreamWriter m_writer; + private Stack m_namespaces; + private bool m_commaRequired; + private bool m_inVariantWithEncoding; + private ServiceMessageContext m_context; + private ushort[] m_namespaceMappings; + private ushort[] m_serverMappings; + private uint m_nestingLevel; + private bool m_topLevelIsArray; + private bool m_levelOneSkipped; + private bool m_dontWriteClosing; + #endregion + + #region Constructors + /// + /// Initializes the object with default values. + /// + public JsonEncoder( + ServiceMessageContext context, + bool useReversibleEncoding, + StreamWriter writer = null, + bool topLevelIsArray = false) + { + Initialize(); + + m_context = context; + m_nestingLevel = 0; + m_writer = writer; + UseReversibleEncoding = useReversibleEncoding; + m_topLevelIsArray = topLevelIsArray; + m_levelOneSkipped = false; + + // defaults for JSON encoding + // -- encode namespace index for reversible encoding + // -- do not include default values for built in types + // which are not a Number or a bool + // -- include default values for numbers and bool + ForceNamespaceUri = false; + IncludeDefaultValues = false; + IncludeDefaultNumberValues = true; + + if (m_writer == null) + { + m_destination = new MemoryStream(); + m_writer = new StreamWriter(m_destination, new UTF8Encoding(false)); + } + + if (m_topLevelIsArray) + { + m_writer.Write("["); + } + else + { + m_writer.Write("{"); + } + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_destination = null; + m_writer = null; + m_namespaces = new Stack(); + m_commaRequired = false; + } + + /// + /// Writes the root element to the stream. + /// + private void Initialize(string fieldName, string namespaceUri) + { + } + #endregion + + #region Public Methods + /// + /// Encodes a session-less message to a buffer. + /// + public static void EncodeSessionLessMessage(IEncodeable message, Stream stream, ServiceMessageContext context, bool leaveOpen = false) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + // create encoder. + JsonEncoder encoder = new JsonEncoder(context, true, new StreamWriter(stream, new UTF8Encoding(false), 65535, leaveOpen)); + + try + { + long start = stream.Position; + + // write the message. + var envelope = new SessionLessServiceMessage { + NamespaceUris = context.NamespaceUris, + ServerUris = context.ServerUris, + Message = message + }; + + envelope.Encode(encoder); + + // check that the max message size was not exceeded. + if (context.MaxMessageSize > 0 && context.MaxMessageSize < (int)(stream.Position - start)) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "MaxMessageSize {0} < {1}", + context.MaxMessageSize, + (int)(stream.Position - start)); + } + + encoder.Close(); + } + finally + { + if (leaveOpen) + { + encoder.m_writer.Flush(); + stream.Position = 0; + } + } + } + + /// + /// Encodes a message in a stream. + /// + public static ArraySegment EncodeMessage(IEncodeable message, byte[] buffer, ServiceMessageContext context) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + if (buffer == null) throw new ArgumentNullException(nameof(buffer)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + using (MemoryStream stream = new MemoryStream(buffer, true)) + { + var encoder = new JsonEncoder(context, true, new StreamWriter(stream, new UTF8Encoding(false), 65535, false)); + + // encode message + encoder.EncodeMessage(message); + int length = encoder.Close(); + + return new ArraySegment(buffer, 0, length); + } + } + + /// + /// Encodes a message with its header. + /// + public void EncodeMessage(IEncodeable message) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + + // convert the namespace uri to an index. + NodeId typeId = ExpandedNodeId.ToNodeId(message.TypeId, m_context.NamespaceUris); + + // write the type id. + WriteNodeId("TypeId", typeId); + + // write the message. + WriteEncodeable("Body", message, message.GetType()); + } + + /// + /// Initializes the tables used to map namespace and server uris during encoding. + /// + /// The namespaces URIs referenced by the data being encoded. + /// The server URIs referenced by the data being encoded. + public void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris) + { + m_namespaceMappings = null; + + if (namespaceUris != null && m_context.NamespaceUris != null) + { + m_namespaceMappings = namespaceUris.CreateMapping(m_context.NamespaceUris, false); + } + + m_serverMappings = null; + + if (serverUris != null && m_context.ServerUris != null) + { + m_serverMappings = serverUris.CreateMapping(m_context.ServerUris, false); + } + } + + /// + /// Completes writing and returns the JSON text. + /// + public string CloseAndReturnText() + { + Close(); + if (m_destination == null) + { + return String.Empty; + } + return Encoding.UTF8.GetString(m_destination.ToArray()); + } + + /// + /// Completes writing and returns the text length. + /// + public int Close() + { + if (!m_dontWriteClosing) + { + if (m_topLevelIsArray) + { + m_writer.Write("]"); + } + else + { + m_writer.Write("}"); + } + } + + m_writer.Flush(); + int length = (int)m_writer.BaseStream.Position; + m_writer.Dispose(); + m_writer = null; + return length; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_writer != null) + { + Close(); + } + } + } + #endregion + + #region IEncoder Members + /// + /// The type of encoding being used. + /// + public EncodingType EncodingType => EncodingType.Json; + + /// + /// The message context associated with the encoder. + /// + public ServiceMessageContext Context => m_context; + + /// + /// The Json encoder reversible encoding option + /// + public bool UseReversibleEncoding { get; private set; } + + /// + /// The Json encoder to encoder namespace URI instead of + /// namespace Index in NodeIds. + /// + public bool ForceNamespaceUri { get; set; } + + /// + /// The Json encoder default value option. + /// + public bool IncludeDefaultValues { get; set; } + + /// + /// The Json encoder default value option. + /// + public bool IncludeDefaultNumberValues { get; set; } + + /// + /// Pushes a namespace onto the namespace stack. + /// + public void PushNamespace(string namespaceUri) + { + m_namespaces.Push(namespaceUri); + } + + /// + /// Pops a namespace from the namespace stack. + /// + public void PopNamespace() + { + m_namespaces.Pop(); + } + + /// + /// Push the begin of a structure on the decoder stack. + /// + /// The name of the structure field. + public void PushStructure(string fieldName) + { + m_nestingLevel++; + + if (m_commaRequired) + { + m_writer.Write(","); + } + + if (!String.IsNullOrEmpty(fieldName)) + { + m_writer.Write("\""); + EscapeString(fieldName); + m_writer.Write("\":"); + } + else if (!m_commaRequired) + { + if (m_nestingLevel == 1 && !m_topLevelIsArray) + { + m_levelOneSkipped = true; + return; + } + } + + m_commaRequired = false; + m_writer.Write("{"); + } + + /// + /// Push the begin of an array on the decoder stack. + /// + /// The name of the array field. + public void PushArray(string fieldName) + { + m_nestingLevel++; + + if (m_commaRequired) + { + m_writer.Write(","); + } + + if (!String.IsNullOrEmpty(fieldName)) + { + m_writer.Write("\""); + EscapeString(fieldName); + m_writer.Write("\":"); + } + else if (!m_commaRequired) + { + if (m_nestingLevel == 1 && !m_topLevelIsArray) + { + m_levelOneSkipped = true; + return; + } + } + + m_commaRequired = false; + m_writer.Write("["); + } + + /// + /// Pop the structure from the decoder stack. + /// + public void PopStructure() + { + if (m_nestingLevel > 1 || m_topLevelIsArray || + (m_nestingLevel == 1 && !m_levelOneSkipped)) + { + m_writer.Write("}"); + m_commaRequired = true; + } + + m_nestingLevel--; + } + + /// + /// Pop the array from the decoder stack. + /// + public void PopArray() + { + if (m_nestingLevel > 1 || m_topLevelIsArray || + (m_nestingLevel == 1 && !m_levelOneSkipped)) + { + m_writer.Write("]"); + m_commaRequired = true; + } + + m_nestingLevel--; + } + + private readonly char[] m_specialChars = new char[] { '"', '\\', '\n', '\r', '\t', '\b', '\f', }; + private readonly char[] m_substitution = new char[] { '"', '\\', 'n', 'r', 't', 'b', 'f' }; + + private void EscapeString(string value) + { + foreach (char ch in value) + { + bool found = false; + + for (int ii = 0; ii < m_specialChars.Length; ii++) + { + if (m_specialChars[ii] == ch) + { + m_writer.Write('\\'); + m_writer.Write(m_substitution[ii]); + found = true; + break; + } + } + + if (!found) + { + if (ch < 32) + { + m_writer.Write("\\u"); + m_writer.Write("{0:X4}", (int)ch); + continue; + } + + m_writer.Write(ch); + } + } + } + + private void WriteSimpleField(string fieldName, string value, bool quotes) + { + if (!String.IsNullOrEmpty(fieldName)) + { + if (value == null) + { + return; + } + + if (m_commaRequired) + { + m_writer.Write(","); + } + + m_writer.Write("\""); + EscapeString(fieldName); + m_writer.Write("\":"); + } + else + { + if (m_commaRequired) + { + m_writer.Write(","); + } + } + + if (value != null) + { + if (quotes) + { + m_writer.Write("\""); + EscapeString(value); + m_writer.Write("\""); + } + else + { + m_writer.Write(value); + } + } + else + { + m_writer.Write("null"); + } + + m_commaRequired = true; + } + + /// + /// Writes a boolean to the stream. + /// + public void WriteBoolean(string fieldName, bool value) + { + if (fieldName != null && !IncludeDefaultNumberValues && !value) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (value) + { + WriteSimpleField(fieldName, "true", false); + } + else + { + WriteSimpleField(fieldName, "false", false); + } + } + + /// + /// Writes a sbyte to the stream. + /// + public void WriteSByte(string fieldName, sbyte value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), false); + } + + /// + /// Writes a byte to the stream. + /// + public void WriteByte(string fieldName, byte value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), false); + } + + /// + /// Writes a short to the stream. + /// + public void WriteInt16(string fieldName, short value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), false); + } + + /// + /// Writes a ushort to the stream. + /// + public void WriteUInt16(string fieldName, ushort value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), false); + } + + /// + /// Writes an int to the stream. + /// + public void WriteInt32(string fieldName, int value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), false); + } + + /// + /// Writes a uint to the stream. + /// + public void WriteUInt32(string fieldName, uint value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), false); + } + + /// + /// Writes a long to the stream. + /// + public void WriteInt64(string fieldName, long value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), true); + } + + /// + /// Writes a ulong to the stream. + /// + public void WriteUInt64(string fieldName, ulong value) + { + if (fieldName != null && !IncludeDefaultNumberValues && value == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(CultureInfo.InvariantCulture), true); + } + + /// + /// Writes a float to the stream. + /// + public void WriteFloat(string fieldName, float value) + { + if (fieldName != null && !IncludeDefaultNumberValues && (value > -Single.Epsilon) && (value < Single.Epsilon)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (Single.IsNaN(value)) + { + WriteSimpleField(fieldName, "NaN", true); + } + else if (Single.IsPositiveInfinity(value)) + { + WriteSimpleField(fieldName, "Infinity", true); + } + else if (Single.IsNegativeInfinity(value)) + { + WriteSimpleField(fieldName, "-Infinity", true); + } + else + { + WriteSimpleField(fieldName, value.ToString("R", CultureInfo.InvariantCulture), false); + } + } + + /// + /// Writes a double to the stream. + /// + public void WriteDouble(string fieldName, double value) + { + if (fieldName != null && !IncludeDefaultNumberValues && (value > -Double.Epsilon) && (value < Double.Epsilon)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (Double.IsNaN(value)) + { + WriteSimpleField(fieldName, "NaN", true); + } + else if (Double.IsPositiveInfinity(value)) + { + WriteSimpleField(fieldName, "Infinity", true); + } + else if (Double.IsNegativeInfinity(value)) + { + WriteSimpleField(fieldName, "-Infinity", true); + } + else + { + WriteSimpleField(fieldName, value.ToString("R", CultureInfo.InvariantCulture), false); + } + } + + /// + /// Writes a string to the stream. + /// + public void WriteString(string fieldName, string value) + { + if (fieldName != null && !IncludeDefaultValues && value == null) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value, true); + } + + /// + /// Writes a UTC date/time to the stream. + /// + public void WriteDateTime(string fieldName, DateTime value) + { + if (fieldName != null && !IncludeDefaultValues && value == DateTime.MinValue) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (value <= DateTime.MinValue) + { + WriteSimpleField(fieldName, "0001-01-01T00:00:00Z", true); + } + else if (value >= DateTime.MaxValue) + { + WriteSimpleField(fieldName, "9999-12-31T23:59:59Z", true); + } + else + { + WriteSimpleField(fieldName, value.ToUniversalTime() + .ToString("yyyy-MM-dd'T'HH:mm:ss.FFFFFFFK", CultureInfo.InvariantCulture), true); + } + } + + /// + /// Writes a GUID to the stream. + /// + public void WriteGuid(string fieldName, Uuid value) + { + if (fieldName != null && !IncludeDefaultValues && value == Uuid.Empty) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(), true); + } + + /// + /// Writes a GUID to the stream. + /// + public void WriteGuid(string fieldName, Guid value) + { + if (fieldName != null && !IncludeDefaultValues && value == Guid.Empty) + { + WriteSimpleField(fieldName, null, false); + return; + } + + WriteSimpleField(fieldName, value.ToString(), true); + } + + /// + /// Writes a byte string to the stream. + /// + public void WriteByteString(string fieldName, byte[] value) + { + if (value == null) + { + WriteSimpleField(fieldName, null, false); + return; + } + + // check the length. + if (m_context.MaxByteStringLength > 0 && m_context.MaxByteStringLength < value.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + WriteSimpleField(fieldName, Convert.ToBase64String(value), true); + } + + /// + /// Writes an XmlElement to the stream. + /// + public void WriteXmlElement(string fieldName, XmlElement value) + { + if (value == null) + { + WriteSimpleField(fieldName, null, false); + return; + } + + var xml = value.OuterXml; + var bytes = Encoding.UTF8.GetBytes(xml); + + WriteSimpleField(fieldName, Convert.ToBase64String(bytes), true); + } + + private void WriteNamespaceIndex(string fieldName, ushort namespaceIndex) + { + if (namespaceIndex == 0) + { + return; + } + + if (!UseReversibleEncoding && namespaceIndex > 1) + { + var uri = m_context.NamespaceUris.GetString(namespaceIndex); + if (!String.IsNullOrEmpty(uri)) + { + WriteSimpleField(fieldName, uri, true); + return; + } + } + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + if (namespaceIndex != 0) + { + WriteUInt16(fieldName, namespaceIndex); + } + } + + private void WriteNodeIdContents(NodeId value, string namespaceUri = null) + { + if (value.IdType > IdType.Numeric) + { + WriteInt32("IdType", (int)value.IdType); + } + + switch (value.IdType) + { + case IdType.Numeric: + { + WriteUInt32("Id", (uint)value.Identifier); + break; + } + + case IdType.String: + { + WriteString("Id", (string)value.Identifier); + break; + } + + case IdType.Guid: + { + WriteGuid("Id", (Guid)value.Identifier); + break; + } + + case IdType.Opaque: + { + WriteByteString("Id", (byte[])value.Identifier); + break; + } + } + + if (namespaceUri != null) + { + WriteString("Namespace", namespaceUri); + } + else + { + WriteNamespaceIndex("Namespace", value.NamespaceIndex); + } + } + + + /// + /// Writes an NodeId to the stream. + /// + public void WriteNodeId(string fieldName, NodeId value) + { + if (value == null || + (NodeId.IsNull(value) && (value.IdType == IdType.Numeric))) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushStructure(fieldName); + + ushort namespaceIndex = value.NamespaceIndex; + if (ForceNamespaceUri && namespaceIndex > 1) + { + string namespaceUri = Context.NamespaceUris.GetString(namespaceIndex); + WriteNodeIdContents(value, namespaceUri); + } + else + { + WriteNodeIdContents(value); + } + PopStructure(); + } + + /// + /// Writes an ExpandedNodeId to the stream. + /// + public void WriteExpandedNodeId(string fieldName, ExpandedNodeId value) + { + if (value == null || value.InnerNodeId == null || + (!UseReversibleEncoding && NodeId.IsNull(value))) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushStructure(fieldName); + + string namespaceUri = value.NamespaceUri; + ushort namespaceIndex = value.InnerNodeId.NamespaceIndex; + if (ForceNamespaceUri && namespaceUri == null && namespaceIndex > 1) + { + namespaceUri = Context.NamespaceUris.GetString(namespaceIndex); + } + WriteNodeIdContents(value.InnerNodeId, namespaceUri); + + uint serverIndex = value.ServerIndex; + + if (serverIndex >= 1) + { + var uri = m_context.ServerUris.GetString(serverIndex); + + if (!String.IsNullOrEmpty(uri)) + { + WriteSimpleField("ServerUri", uri, true); + PopStructure(); + return; + } + + if (m_serverMappings != null && m_serverMappings.Length > serverIndex) + { + serverIndex = m_serverMappings[serverIndex]; + } + + if (serverIndex != 0) + { + WriteUInt32("ServerUri", serverIndex); + } + } + + PopStructure(); + } + + + /// + /// Writes an StatusCode to the stream. + /// + public void WriteStatusCode(string fieldName, StatusCode value) + { + if (fieldName != null && !IncludeDefaultValues && value == StatusCodes.Good) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (UseReversibleEncoding) + { + WriteUInt32(fieldName, value.Code); + return; + } + + if (value != StatusCodes.Good) + { + PushStructure(fieldName); + WriteSimpleField("Code", value.Code.ToString(CultureInfo.InvariantCulture), false); + WriteSimpleField("Symbol", StatusCode.LookupSymbolicId(value.CodeBits), true); + PopStructure(); + } + } + + /// + /// Writes an DiagnosticInfo to the stream. + /// + public void WriteDiagnosticInfo(string fieldName, DiagnosticInfo value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + if (value == null) + { + WriteSimpleField(fieldName, null, false); + return; + } + + m_nestingLevel++; + + PushStructure(fieldName); + + if (value.SymbolicId >= 0) + { + WriteSimpleField("SymbolicId", value.SymbolicId.ToString(CultureInfo.InvariantCulture), false); + } + + if (value.NamespaceUri >= 0) + { + WriteSimpleField("NamespaceUri", value.NamespaceUri.ToString(CultureInfo.InvariantCulture), false); + } + + if (value.Locale >= 0) + { + WriteSimpleField("Locale", value.Locale.ToString(CultureInfo.InvariantCulture), false); + } + + if (value.LocalizedText >= 0) + { + WriteSimpleField("LocalizedText", value.LocalizedText.ToString(CultureInfo.InvariantCulture), false); + } + + if (value.AdditionalInfo != null) + { + WriteSimpleField("AdditionalInfo", value.AdditionalInfo, true); + } + + if (value.InnerStatusCode != StatusCodes.Good) + { + WriteStatusCode("InnerStatusCode", value.InnerStatusCode); + } + + if (value.InnerDiagnosticInfo != null) + { + WriteDiagnosticInfo("InnerDiagnosticInfo", value.InnerDiagnosticInfo); + } + + PopStructure(); + + m_nestingLevel--; + } + + /// + /// Writes an QualifiedName to the stream. + /// + public void WriteQualifiedName(string fieldName, QualifiedName value) + { + if (QualifiedName.IsNull(value)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushStructure(fieldName); + + WriteString("Name", value.Name); + WriteNamespaceIndex("Uri", value.NamespaceIndex); + + PopStructure(); + } + + /// + /// Writes an LocalizedText to the stream. + /// + public void WriteLocalizedText(string fieldName, LocalizedText value) + { + if (LocalizedText.IsNullOrEmpty(value)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (UseReversibleEncoding) + { + PushStructure(fieldName); + + WriteSimpleField("Text", value.Text, true); + + if (!String.IsNullOrEmpty(value.Locale)) + { + WriteSimpleField("Locale", value.Locale, true); + } + + PopStructure(); + } + else + { + WriteSimpleField(fieldName, value.Text, true); + } + } + + /// + /// Writes an Variant to the stream. + /// + public void WriteVariant(string fieldName, Variant value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + if (Variant.Null == value) + { + WriteSimpleField(fieldName, null, false); + return; + } + + m_nestingLevel++; + + bool isNull = (value.TypeInfo == null || value.TypeInfo.BuiltInType == BuiltInType.Null || value.Value == null); + + if (UseReversibleEncoding && !isNull) + { + PushStructure(fieldName); + // encode enums as int32. + byte encodingByte = (byte)value.TypeInfo.BuiltInType; + if (value.TypeInfo.BuiltInType == BuiltInType.Enumeration) + { + encodingByte = (byte)BuiltInType.Int32; + } + + WriteByte("Type", encodingByte); + fieldName = "Body"; + } + + if (m_commaRequired) + { + m_writer.Write(","); + } + + if (!String.IsNullOrEmpty(fieldName)) + { + m_writer.Write("\""); + EscapeString(fieldName); + m_writer.Write("\":"); + } + + WriteVariantContents(value.Value, value.TypeInfo); + + if (UseReversibleEncoding && !isNull) + { + Matrix matrix = value.Value as Matrix; + + if (matrix != null) + { + WriteInt32Array("Dimensions", matrix.Dimensions); + } + + PopStructure(); + } + + m_nestingLevel--; + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValue(string fieldName, DataValue value, bool useReversibleEncoding) + { + bool currentValue = UseReversibleEncoding; + + try + { + UseReversibleEncoding = useReversibleEncoding; + WriteDataValue(fieldName, value); + } + finally + { + UseReversibleEncoding = currentValue; + } + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValue(string fieldName, DataValue value) + { + if (value == null) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushStructure(fieldName); + + if (value != null) + { + if (value.WrappedValue.TypeInfo != null && value.WrappedValue.TypeInfo.BuiltInType != BuiltInType.Null) + { + WriteVariant("Value", value.WrappedValue); + } + + if (value.StatusCode != StatusCodes.Good) + { + WriteStatusCode("StatusCode", value.StatusCode); + } + + if (value.SourceTimestamp != DateTime.MinValue) + { + WriteDateTime("SourceTimestamp", value.SourceTimestamp); + + if (value.SourcePicoseconds != 0) + { + WriteUInt16("SourcePicoseconds", value.SourcePicoseconds); + } + } + + if (value.ServerTimestamp != DateTime.MinValue) + { + WriteDateTime("ServerTimestamp", value.ServerTimestamp); + + if (value.ServerPicoseconds != 0) + { + WriteUInt16("ServerPicoseconds", value.ServerPicoseconds); + } + } + } + + PopStructure(); + } + + /// + /// Writes an ExtensionObject to the stream. + /// + public void WriteExtensionObject(string fieldName, ExtensionObject value) + { + if (value == null || value.Encoding == ExtensionObjectEncoding.None) + { + WriteSimpleField(fieldName, null, false); + return; + } + + var encodeable = value.Body as IEncodeable; + if (!UseReversibleEncoding && encodeable != null) + { + var structureType = value.Body as IStructureTypeInfo; + if (structureType != null && + structureType.StructureType == StructureType.Union) + { + encodeable.Encode(this); + return; + } + + PushStructure(fieldName); + encodeable.Encode(this); + PopStructure(); + return; + } + + PushStructure(fieldName); + + if (UseReversibleEncoding) + { + var nodeId = ExpandedNodeId.ToNodeId(value.TypeId, Context.NamespaceUris); + WriteNodeId("TypeId", nodeId); + } + else + { + WriteExpandedNodeId("TypeId", value.TypeId); + } + + if (encodeable != null) + { + WriteEncodeable("Body", encodeable, null); + } + else + { + if (value.Body != null) + { + if (value.Encoding == ExtensionObjectEncoding.Json) + { + WriteSimpleField("Body", value.Body as string, true); + } + else + { + WriteByte("Encoding", (byte)value.Encoding); + if (value.Encoding == ExtensionObjectEncoding.Binary) + { + WriteByteString("Body", value.Body as byte[]); + } + else if (value.Encoding == ExtensionObjectEncoding.Xml) + { + WriteXmlElement("Body", value.Body as XmlElement); + } + } + } + } + + PopStructure(); + } + + /// + /// Writes an encodeable object to the stream. + /// + public void WriteEncodeable(string fieldName, IEncodeable value, System.Type systemType) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + + if (value == null) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (m_nestingLevel == 0 && (m_commaRequired || m_topLevelIsArray)) + { + if (string.IsNullOrWhiteSpace(fieldName) ^ m_topLevelIsArray) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "With Array as top level, encodeables with fieldname will create invalid json"); + } + } + + if (m_nestingLevel == 0 && !m_commaRequired) + { + if (string.IsNullOrWhiteSpace(fieldName) && !m_topLevelIsArray) + { + m_writer.Flush(); + if (m_writer.BaseStream.Length == 1) //Opening "{" + { + m_writer.BaseStream.Seek(0, SeekOrigin.Begin); + } + m_dontWriteClosing = true; + } + } + + m_nestingLevel++; + + PushStructure(fieldName); + + value?.Encode(this); + + PopStructure(); + + m_nestingLevel--; + + } + + /// + /// Writes an enumerated value to the stream. + /// + public void WriteEnumerated(string fieldName, Enum value) + { + int numeric = Convert.ToInt32(value, CultureInfo.InvariantCulture); + var numericString = numeric.ToString(); + if (UseReversibleEncoding) + { + WriteSimpleField(fieldName, numericString, false); + } + else + { + var valueString = value.ToString(); + if (valueString == numericString) + { + WriteSimpleField(fieldName, numericString, true); + } + else + { + WriteSimpleField(fieldName, Utils.Format("{0}_{1}", value.ToString(), numeric), true); + } + } + } + + /// + /// Writes an enumerated Int32 value to the stream. + /// + public void WriteEnumerated(string fieldName, int numeric) + { + var numericString = numeric.ToString(CultureInfo.InvariantCulture); + WriteSimpleField(fieldName, numericString, !UseReversibleEncoding); + } + + /// + /// Writes a boolean array to the stream. + /// + public void WriteBooleanArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteBoolean(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a sbyte array to the stream. + /// + public void WriteSByteArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteSByte(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a sbyte array to the stream. + /// + public void WriteByteArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteByte(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a short array to the stream. + /// + public void WriteInt16Array(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt16(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a ushort array to the stream. + /// + public void WriteUInt16Array(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt16(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a int array to the stream. + /// + public void WriteInt32Array(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt32(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a uint array to the stream. + /// + public void WriteUInt32Array(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt32(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a long array to the stream. + /// + public void WriteInt64Array(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt64(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a ulong array to the stream. + /// + public void WriteUInt64Array(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt64(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a float array to the stream. + /// + public void WriteFloatArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteFloat(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a double array to the stream. + /// + public void WriteDoubleArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteDouble(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a string array to the stream. + /// + public void WriteStringArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteString(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a UTC date/time array to the stream. + /// + public void WriteDateTimeArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + if (values[ii] <= DateTime.MinValue) + { + WriteSimpleField(null, null, false); + } + else + { + WriteDateTime(null, values[ii]); + } + } + + PopArray(); + } + + /// + /// Writes a GUID array to the stream. + /// + public void WriteGuidArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteGuid(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a GUID array to the stream. + /// + public void WriteGuidArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteGuid(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes a byte string array to the stream. + /// + public void WriteByteStringArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteByteString(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an XmlElement array to the stream. + /// + public void WriteXmlElementArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteXmlElement(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an NodeId array to the stream. + /// + public void WriteNodeIdArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteNodeId(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an ExpandedNodeId array to the stream. + /// + public void WriteExpandedNodeIdArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteExpandedNodeId(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an StatusCode array to the stream. + /// + public void WriteStatusCodeArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + if (!UseReversibleEncoding && + values[ii] == StatusCodes.Good) + { + WriteSimpleField(null, null, false); + } + else + { + WriteStatusCode(null, values[ii]); + } + } + + PopArray(); + } + + /// + /// Writes an DiagnosticInfo array to the stream. + /// + public void WriteDiagnosticInfoArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteDiagnosticInfo(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an QualifiedName array to the stream. + /// + public void WriteQualifiedNameArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteQualifiedName(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an LocalizedText array to the stream. + /// + public void WriteLocalizedTextArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteLocalizedText(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an Variant array to the stream. + /// + public void WriteVariantArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + if (values[ii] == Variant.Null) + { + WriteSimpleField(null, null, false); + continue; + } + + WriteVariant(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValueArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteDataValue(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an extension object array to the stream. + /// + public void WriteExtensionObjectArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteExtensionObject(null, values[ii]); + } + + PopArray(); + } + + /// + /// Writes an encodeable object array to the stream. + /// + public void WriteEncodeableArray(string fieldName, IList values, System.Type systemType) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + if (string.IsNullOrWhiteSpace(fieldName) && m_nestingLevel == 0 && !m_topLevelIsArray) + { + m_writer.Flush(); + if (m_writer.BaseStream.Length == 1) //Opening "{" + { + m_writer.BaseStream.Seek(0, SeekOrigin.Begin); + } + + m_nestingLevel++; + PushArray(fieldName); + + for (int ii = 0; ii < values.Count; ii++) + { + WriteEncodeable(null, values[ii], systemType); + } + + PopArray(); + m_dontWriteClosing = true; + m_nestingLevel--; + + } + else if (!string.IsNullOrWhiteSpace(fieldName) && m_nestingLevel == 0 && m_topLevelIsArray) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "With Array as top level, encodeables array with filename will create invalid json"); + } + else + { + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + for (int ii = 0; ii < values.Count; ii++) + { + WriteEncodeable(null, values[ii], systemType); + } + + PopArray(); + } + } + + /// + /// Writes an enumerated value array to the stream. + /// + public void WriteEnumeratedArray(string fieldName, Array values, System.Type systemType) + { + if (values == null || values.Length == 0) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + // encode each element in the array. + Type arrayType = values.GetType().GetElementType(); + if (arrayType.IsEnum) + { + foreach (Enum value in values) + { + WriteEnumerated(null, value); + } + } + else + { + if (arrayType != typeof(Int32)) + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Type '{0}' is not allowed in an Enumeration.", arrayType.FullName)); + } + foreach (Int32 value in values) + { + WriteEnumerated(null, value); + } + } + + PopArray(); + } + #endregion + + #region Public Methods + /// + /// Writes the contents of an Variant to the stream. + /// + public void WriteVariantContents(object value, TypeInfo typeInfo) + { + try + { + m_inVariantWithEncoding = UseReversibleEncoding; + + // check for null. + if (value == null) + { + return; + } + + m_commaRequired = false; + + // write scalar. + if (typeInfo.ValueRank < 0) + { + switch (typeInfo.BuiltInType) + { + case BuiltInType.Boolean: { WriteBoolean(null, (bool)value); return; } + case BuiltInType.SByte: { WriteSByte(null, (sbyte)value); return; } + case BuiltInType.Byte: { WriteByte(null, (byte)value); return; } + case BuiltInType.Int16: { WriteInt16(null, (short)value); return; } + case BuiltInType.UInt16: { WriteUInt16(null, (ushort)value); return; } + case BuiltInType.Int32: { WriteInt32(null, (int)value); return; } + case BuiltInType.UInt32: { WriteUInt32(null, (uint)value); return; } + case BuiltInType.Int64: { WriteInt64(null, (long)value); return; } + case BuiltInType.UInt64: { WriteUInt64(null, (ulong)value); return; } + case BuiltInType.Float: { WriteFloat(null, (float)value); return; } + case BuiltInType.Double: { WriteDouble(null, (double)value); return; } + case BuiltInType.String: { WriteString(null, (string)value); return; } + case BuiltInType.DateTime: { WriteDateTime(null, (DateTime)value); return; } + case BuiltInType.Guid: { WriteGuid(null, (Uuid)value); return; } + case BuiltInType.ByteString: { WriteByteString(null, (byte[])value); return; } + case BuiltInType.XmlElement: { WriteXmlElement(null, (XmlElement)value); return; } + case BuiltInType.NodeId: { WriteNodeId(null, (NodeId)value); return; } + case BuiltInType.ExpandedNodeId: { WriteExpandedNodeId(null, (ExpandedNodeId)value); return; } + case BuiltInType.StatusCode: { WriteStatusCode(null, (StatusCode)value); return; } + case BuiltInType.QualifiedName: { WriteQualifiedName(null, (QualifiedName)value); return; } + case BuiltInType.LocalizedText: { WriteLocalizedText(null, (LocalizedText)value); return; } + case BuiltInType.ExtensionObject: { WriteExtensionObject(null, (ExtensionObject)value); return; } + case BuiltInType.DataValue: { WriteDataValue(null, (DataValue)value); return; } + case BuiltInType.Enumeration: { WriteEnumerated(null, (Enum)value); return; } + } + } + + // write array. + else if (typeInfo.ValueRank <= 1) + { + switch (typeInfo.BuiltInType) + { + case BuiltInType.Boolean: { WriteBooleanArray(null, (bool[])value); return; } + case BuiltInType.SByte: { WriteSByteArray(null, (sbyte[])value); return; } + case BuiltInType.Byte: { WriteByteArray(null, (byte[])value); return; } + case BuiltInType.Int16: { WriteInt16Array(null, (short[])value); return; } + case BuiltInType.UInt16: { WriteUInt16Array(null, (ushort[])value); return; } + case BuiltInType.Int32: { WriteInt32Array(null, (int[])value); return; } + case BuiltInType.UInt32: { WriteUInt32Array(null, (uint[])value); return; } + case BuiltInType.Int64: { WriteInt64Array(null, (long[])value); return; } + case BuiltInType.UInt64: { WriteUInt64Array(null, (ulong[])value); return; } + case BuiltInType.Float: { WriteFloatArray(null, (float[])value); return; } + case BuiltInType.Double: { WriteDoubleArray(null, (double[])value); return; } + case BuiltInType.String: { WriteStringArray(null, (string[])value); return; } + case BuiltInType.DateTime: { WriteDateTimeArray(null, (DateTime[])value); return; } + case BuiltInType.Guid: { WriteGuidArray(null, (Uuid[])value); return; } + case BuiltInType.ByteString: { WriteByteStringArray(null, (byte[][])value); return; } + case BuiltInType.XmlElement: { WriteXmlElementArray(null, (XmlElement[])value); return; } + case BuiltInType.NodeId: { WriteNodeIdArray(null, (NodeId[])value); return; } + case BuiltInType.ExpandedNodeId: { WriteExpandedNodeIdArray(null, (ExpandedNodeId[])value); return; } + case BuiltInType.StatusCode: { WriteStatusCodeArray(null, (StatusCode[])value); return; } + case BuiltInType.QualifiedName: { WriteQualifiedNameArray(null, (QualifiedName[])value); return; } + case BuiltInType.LocalizedText: { WriteLocalizedTextArray(null, (LocalizedText[])value); return; } + case BuiltInType.ExtensionObject: { WriteExtensionObjectArray(null, (ExtensionObject[])value); return; } + case BuiltInType.DataValue: { WriteDataValueArray(null, (DataValue[])value); return; } + case BuiltInType.Enumeration: + { + Array array = value as Array; + WriteEnumeratedArray(null, array, array.GetType().GetElementType()); + return; + } + + case BuiltInType.Variant: + { + Variant[] variants = value as Variant[]; + + if (variants != null) + { + WriteVariantArray(null, variants); + return; + } + + object[] objects = value as object[]; + + if (objects != null) + { + WriteObjectArray(null, objects); + return; + } + + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Unexpected type encountered while encoding an array of Variants: {0}", + value.GetType()); + } + } + } + + // write matrix. + else if (typeInfo.ValueRank > 1) + { + Matrix matrix = value as Matrix; + if (matrix != null) + { + if (UseReversibleEncoding) + { + WriteVariantContents(matrix.Elements, new TypeInfo(typeInfo.BuiltInType, 1)); + } + else + { + int index = 0; + WriteStructureMatrix(matrix, 0, ref index, typeInfo); + } + return; + } + } + + // oops - should never happen. + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Type '{0}' is not allowed in an Variant.", value.GetType().FullName)); + } + finally + { + m_inVariantWithEncoding = false; + } + } + #endregion + + #region Private Methods + /// + /// Write multi dimensional array in structure. + /// + private void WriteStructureMatrix( + Matrix matrix, + int dim, + ref int index, + TypeInfo typeInfo) + { + var arrayLen = matrix.Dimensions[dim]; + if (dim == matrix.Dimensions.Length - 1) + { + // Create a slice of values for the top dimension + var copy = Array.CreateInstance( + matrix.Elements.GetType().GetElementType(), arrayLen); + Array.Copy(matrix.Elements, index, copy, 0, arrayLen); + // Write slice as value rank + if (m_commaRequired) + { + m_writer.Write(","); + } + WriteVariantContents(copy, new TypeInfo(typeInfo.BuiltInType, 1)); + index += arrayLen; + } + else + { + PushArray(null); + for (var i = 0; i < arrayLen; i++) + { + WriteStructureMatrix(matrix, dim + 1, ref index, typeInfo); + } + PopArray(); + } + } + + /// + /// Write multi dimensional array in Variant. + /// + private void WriteVariantMatrix(string fieldName, Matrix value) + { + PushStructure(fieldName); + WriteVariant("Matrix", new Variant(value.Elements, new TypeInfo(value.TypeInfo.BuiltInType, ValueRanks.OneDimension))); + WriteInt32Array("Dimensions", value.Dimensions); + PopStructure(); + } + + /// + /// Writes an Variant array to the stream. + /// + public void WriteObjectArray(string fieldName, IList values) + { + if (values == null || (values.Count == 0 && !m_inVariantWithEncoding)) + { + WriteSimpleField(fieldName, null, false); + return; + } + + PushArray(fieldName); + + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteVariant("Variant", new Variant(values[ii])); + } + } + + PopArray(); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/XmlDecoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/XmlDecoder.cs new file mode 100644 index 00000000..1acebabf --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/XmlDecoder.cs @@ -0,0 +1,2826 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Reads objects from a XML stream. + /// + public class XmlDecoder : IDecoder, IDisposable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public XmlDecoder(ServiceMessageContext context) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + Initialize(); + m_context = context; + m_nestingLevel = 0; + } + + /// + /// Initializes the object with an XML element to parse. + /// + public XmlDecoder(XmlElement element, ServiceMessageContext context) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + Initialize(); + m_reader = XmlReader.Create(new StringReader(element.OuterXml)); + m_context = context; + m_nestingLevel = 0; + } + + /// + /// Initializes the object with a XML reader. + /// + public XmlDecoder(System.Type systemType, XmlReader reader, ServiceMessageContext context) + { + Initialize(); + + m_reader = reader; + m_context = context; + m_nestingLevel = 0; + + string ns = null; + string name = null; + + if (systemType != null) + { + XmlQualifiedName typeName = EncodeableFactory.GetXmlName(systemType); + ns = typeName.Namespace; + name = typeName.Name; + } + + if (ns == null) + { + m_reader.MoveToContent(); + ns = m_reader.NamespaceURI; + name = m_reader.Name; + } + + int index = name.IndexOf(':'); + + if (index != -1) + { + name = name.Substring(index + 1); + } + + PushNamespace(ns); + BeginField(name, false); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_reader = null; + m_namespaces = new Stack(); + } + #endregion + + #region Public Methods + /// + /// Initializes the tables used to map namespace and server uris during decoding. + /// + /// The namespaces URIs referenced by the data being decoded. + /// The server URIs referenced by the data being decoded. + public void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris) + { + m_namespaceMappings = null; + + if (namespaceUris != null && m_context.NamespaceUris != null) + { + m_namespaceMappings = m_context.NamespaceUris.CreateMapping(namespaceUris, false); + } + + m_serverMappings = null; + + if (serverUris != null && m_context.ServerUris != null) + { + m_serverMappings = m_context.ServerUris.CreateMapping(serverUris, false); + } + } + + /// + /// Initializes a string table from an XML stream. + /// + /// Name of the table. + /// Name of the element. + /// The string table. + /// True if the table was found. False otherwise. + public bool LoadStringTable(string tableName, string elementName, StringTable stringTable) + { + PushNamespace(Namespaces.OpcUaXsd); + + try + { + if (!Peek(tableName)) + { + return false; + } + + ReadStartElement(); + + while (Peek(elementName)) + { + string namespaceUri = ReadString(elementName); + stringTable.Append(namespaceUri); + } + + Skip(new XmlQualifiedName(tableName, Namespaces.OpcUaXsd)); + return true; + } + finally + { + PopNamespace(); + } + } + + /// + /// Closes the stream used for reading. + /// + public void Close() + { + m_reader.Dispose(); + } + + /// + /// Closes the stream used for reading. + /// + public void Close(bool checkEof) + { + if (checkEof && m_reader.NodeType != XmlNodeType.None) + { + m_reader.ReadEndElement(); + } + + m_reader.Dispose(); + } + + /// + /// Returns the qualified name for the next element in the stream. + /// + public XmlQualifiedName Peek(XmlNodeType nodeType) + { + m_reader.MoveToContent(); + + if (nodeType != XmlNodeType.None && nodeType != m_reader.NodeType) + { + return null; + } + + return new XmlQualifiedName(m_reader.LocalName, m_reader.NamespaceURI); + } + + /// + /// Returns true if the specified field is the next element to be extracted. + /// + public bool Peek(string fieldName) + { + m_reader.MoveToContent(); + + if (XmlNodeType.Element != m_reader.NodeType) + { + return false; + } + + if (fieldName != m_reader.LocalName) + { + return false; + } + + if (m_namespaces.Peek() != m_reader.NamespaceURI) + { + return false; + } + + return true; + } + + /// + /// Returns the qualified name for the next element in the stream. + /// + public void ReadStartElement() + { + bool isEmpty = m_reader.IsEmptyElement; + m_reader.ReadStartElement(); + + if (!isEmpty) + { + m_reader.MoveToContent(); + } + } + + /// + /// Skips to the end of the specified element. + /// + /// The qualified name of the element to skip. + public void Skip(XmlQualifiedName qname) + { + m_reader.MoveToContent(); + + int depth = 1; + + while (depth > 0) + { + if (m_reader.NodeType == XmlNodeType.EndElement) + { + if (m_reader.LocalName == qname.Name && m_reader.NamespaceURI == qname.Namespace) + { + depth--; + } + } + + else if (m_reader.NodeType == XmlNodeType.Element) + { + if (m_reader.LocalName == qname.Name && m_reader.NamespaceURI == qname.Namespace) + { + depth++; + } + } + + m_reader.Skip(); + m_reader.MoveToContent(); + } + } + + /// + /// Reads the contents of an Variant object. + /// + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public object ReadVariantContents(out TypeInfo typeInfo) + { + typeInfo = TypeInfo.Unknown; + + // skip whitespace. + while (m_reader.NodeType != XmlNodeType.Element) + { + m_reader.Read(); + } + + try + { + m_namespaces.Push(Namespaces.OpcUaXsd); + + string typeName = m_reader.LocalName; + + // process array types. + if (typeName.StartsWith("ListOf", StringComparison.Ordinal)) + { + switch (typeName.Substring("ListOf".Length)) + { + case "Boolean": + { + typeInfo = TypeInfo.Arrays.Boolean; + BooleanCollection collection = ReadBooleanArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "SByte": + { + typeInfo = TypeInfo.Arrays.SByte; + SByteCollection collection = ReadSByteArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Byte": + { + typeInfo = TypeInfo.Arrays.Byte; + ByteCollection collection = ReadByteArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Int16": + { + typeInfo = TypeInfo.Arrays.Int16; + Int16Collection collection = ReadInt16Array(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "UInt16": + { + typeInfo = TypeInfo.Arrays.UInt16; + UInt16Collection collection = ReadUInt16Array(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Int32": + { + typeInfo = TypeInfo.Arrays.Int32; + Int32Collection collection = ReadInt32Array(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "UInt32": + { + typeInfo = TypeInfo.Arrays.UInt32; + UInt32Collection collection = ReadUInt32Array(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Int64": + { + typeInfo = TypeInfo.Arrays.Int64; + Int64Collection collection = ReadInt64Array(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "UInt64": + { + typeInfo = TypeInfo.Arrays.UInt64; + UInt64Collection collection = ReadUInt64Array(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Float": + { + typeInfo = TypeInfo.Arrays.Float; + FloatCollection collection = ReadFloatArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Double": + { + typeInfo = TypeInfo.Arrays.Double; + DoubleCollection collection = ReadDoubleArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "String": + { + typeInfo = TypeInfo.Arrays.String; + StringCollection collection = ReadStringArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "DateTime": + { + typeInfo = TypeInfo.Arrays.DateTime; + DateTimeCollection collection = ReadDateTimeArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Guid": + { + typeInfo = TypeInfo.Arrays.Guid; + UuidCollection collection = ReadGuidArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "ByteString": + { + typeInfo = TypeInfo.Arrays.ByteString; + ByteStringCollection collection = ReadByteStringArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "XmlElement": + { + typeInfo = TypeInfo.Arrays.XmlElement; + XmlElementCollection collection = ReadXmlElementArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "NodeId": + { + typeInfo = TypeInfo.Arrays.NodeId; + NodeIdCollection collection = ReadNodeIdArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "ExpandedNodeId": + { + typeInfo = TypeInfo.Arrays.ExpandedNodeId; + ExpandedNodeIdCollection collection = ReadExpandedNodeIdArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "StatusCode": + { + typeInfo = TypeInfo.Arrays.StatusCode; + StatusCodeCollection collection = ReadStatusCodeArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "DiagnosticInfo": + { + typeInfo = TypeInfo.Arrays.DiagnosticInfo; + DiagnosticInfoCollection collection = ReadDiagnosticInfoArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "QualifiedName": + { + typeInfo = TypeInfo.Arrays.QualifiedName; + QualifiedNameCollection collection = ReadQualifiedNameArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "LocalizedText": + { + typeInfo = TypeInfo.Arrays.LocalizedText; + LocalizedTextCollection collection = ReadLocalizedTextArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "ExtensionObject": + { + typeInfo = TypeInfo.Arrays.ExtensionObject; + ExtensionObjectCollection collection = ReadExtensionObjectArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "DataValue": + { + typeInfo = TypeInfo.Arrays.DataValue; + DataValueCollection collection = ReadDataValueArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + case "Variant": + { + typeInfo = TypeInfo.Arrays.Variant; + VariantCollection collection = ReadVariantArray(typeName); + if (collection != null) return collection.ToArray(); + return null; + } + } + } + + // process scalar types. + else + { + switch (typeName) + { + case "Null": + { + if (BeginField(typeName, true)) + { + EndField(typeName); + } + + return null; + } + + case "Boolean": { typeInfo = TypeInfo.Scalars.Boolean; return ReadBoolean(typeName); } + case "SByte": { typeInfo = TypeInfo.Scalars.SByte; return ReadSByte(typeName); } + case "Byte": { typeInfo = TypeInfo.Scalars.Byte; return ReadByte(typeName); } + case "Int16": { typeInfo = TypeInfo.Scalars.Int16; return ReadInt16(typeName); } + case "UInt16": { typeInfo = TypeInfo.Scalars.UInt16; return ReadUInt16(typeName); } + case "Int32": { typeInfo = TypeInfo.Scalars.Int32; return ReadInt32(typeName); } + case "UInt32": { typeInfo = TypeInfo.Scalars.UInt32; return ReadUInt32(typeName); } + case "Int64": { typeInfo = TypeInfo.Scalars.Int64; return ReadInt64(typeName); } + case "UInt64": { typeInfo = TypeInfo.Scalars.UInt64; return ReadUInt64(typeName); } + case "Float": { typeInfo = TypeInfo.Scalars.Float; return ReadFloat(typeName); } + case "Double": { typeInfo = TypeInfo.Scalars.Double; return ReadDouble(typeName); } + case "String": { typeInfo = TypeInfo.Scalars.String; return ReadString(typeName); } + case "DateTime": { typeInfo = TypeInfo.Scalars.DateTime; return ReadDateTime(typeName); } + case "Guid": { typeInfo = TypeInfo.Scalars.Guid; return ReadGuid(typeName); } + case "ByteString": { typeInfo = TypeInfo.Scalars.ByteString; return ReadByteString(typeName); } + case "XmlElement": { typeInfo = TypeInfo.Scalars.XmlElement; return ReadXmlElement(typeName); } + case "NodeId": { typeInfo = TypeInfo.Scalars.NodeId; return ReadNodeId(typeName); } + case "ExpandedNodeId": { typeInfo = TypeInfo.Scalars.ExpandedNodeId; return ReadExpandedNodeId(typeName); } + case "StatusCode": { typeInfo = TypeInfo.Scalars.StatusCode; return ReadStatusCode(typeName); } + case "DiagnosticInfo": { typeInfo = TypeInfo.Scalars.DiagnosticInfo; return ReadDiagnosticInfo(typeName); } + case "QualifiedName": { typeInfo = TypeInfo.Scalars.QualifiedName; return ReadQualifiedName(typeName); } + case "LocalizedText": { typeInfo = TypeInfo.Scalars.LocalizedText; return ReadLocalizedText(typeName); } + case "ExtensionObject": { typeInfo = TypeInfo.Scalars.ExtensionObject; return ReadExtensionObject(typeName); } + case "DataValue": { typeInfo = TypeInfo.Scalars.DataValue; return ReadDataValue(typeName); } + + case "Matrix": + { + Matrix matrix = ReadMatrix(typeName); + typeInfo = matrix.TypeInfo; + return matrix; + } + } + } + + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Element '{1}:{0}' is not allowed in an Variant.", m_reader.LocalName, m_reader.NamespaceURI)); + } + finally + { + m_namespaces.Pop(); + } + } + + /// + /// Reads the body extension object from the stream. + /// + public object ReadExtensionObjectBody(ExpandedNodeId typeId) + { + m_reader.MoveToContent(); + + // check for binary encoded body. + if (m_reader.LocalName == "ByteString" && m_reader.NamespaceURI == Namespaces.OpcUaXsd) + { + PushNamespace(Namespaces.OpcUaXsd); + byte[] bytes = ReadByteString("ByteString"); + PopNamespace(); + + return bytes; + } + + // lookup type. + Type systemType = m_context.Factory.GetSystemType(typeId); + + // decode known type. + if (systemType != null) + { + PushNamespace(m_reader.NamespaceURI); + var encodeable = ReadEncodeable(m_reader.LocalName, systemType); + PopNamespace(); + + return encodeable; + } + + // check for empty body. + XmlDocument document = new XmlDocument(); + + // return undecoded xml body. + var xmlString = m_reader.ReadOuterXml(); + + using (XmlReader reader = XmlReader.Create(new StringReader(xmlString), new XmlReaderSettings() { DtdProcessing = System.Xml.DtdProcessing.Prohibit })) + { + document.Load(reader); + } + + return document.DocumentElement; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_reader != null) + { + m_reader.Dispose(); + } + } + } + #endregion + + #region IDecoder Members + /// + /// The type of encoding being used. + /// + public EncodingType EncodingType => EncodingType.Xml; + + /// + /// The message context associated with the decoder. + /// + public ServiceMessageContext Context => m_context; + + /// + /// Pushes a namespace onto the namespace stack. + /// + public void PushNamespace(string namespaceUri) + { + m_namespaces.Push(namespaceUri); + } + + /// + /// Pops a namespace from the namespace stack. + /// + public void PopNamespace() + { + m_namespaces.Pop(); + } + + /// + /// Reads a boolean from the stream. + /// + public bool ReadBoolean(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + bool value = XmlConvert.ToBoolean(xml.ToLowerInvariant()); + EndField(fieldName); + return value; + } + } + + return false; + } + + /// + /// Reads a sbyte from the stream. + /// + public sbyte ReadSByte(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + sbyte value = XmlConvert.ToSByte(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a byte from the stream. + /// + public byte ReadByte(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + byte value = XmlConvert.ToByte(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a short from the stream. + /// + public short ReadInt16(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + short value = XmlConvert.ToInt16(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a ushort from the stream. + /// + public ushort ReadUInt16(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + ushort value = XmlConvert.ToUInt16(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads an int from the stream. + /// + public int ReadInt32(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + int value = XmlConvert.ToInt32(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a uint from the stream. + /// + public uint ReadUInt32(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + uint value = XmlConvert.ToUInt32(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a long from the stream. + /// + public long ReadInt64(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + long value = XmlConvert.ToInt64(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a ulong from the stream. + /// + public ulong ReadUInt64(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + ulong value = XmlConvert.ToUInt64(xml); + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a float from the stream. + /// + public float ReadFloat(string fieldName) + { + if (BeginField(fieldName, true)) + { + + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + float value = 0; + + if (xml.Length == 3) + { + if (xml == "NaN") + { + value = Single.NaN; + } + + if (xml == "INF") + { + value = Single.PositiveInfinity; + } + } + + if (xml.Length == 4) + { + if (xml == "-INF") + { + value = Single.NegativeInfinity; + } + } + + if (value == 0) + { + value = XmlConvert.ToSingle(xml); + } + + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a double from the stream. + /// + public double ReadDouble(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + double value = 0; + + if (xml.Length == 3) + { + if (xml == "NaN") + { + value = Single.NaN; + } + + if (xml == "INF") + { + value = Single.PositiveInfinity; + } + } + + if (xml.Length == 4) + { + if (xml == "-INF") + { + value = Single.NegativeInfinity; + } + } + + if (value == 0) + { + value = XmlConvert.ToDouble(xml); + } + + EndField(fieldName); + return value; + } + } + + return 0; + } + + /// + /// Reads a string from the stream. + /// + public string ReadString(string fieldName) + { + bool isNil = false; + + if (BeginField(fieldName, true, out isNil)) + { + string value = ReadString(); + + if (value != null) + { + value = value.Trim(); + } + + EndField(fieldName); + return value; + } + + if (!isNil) + { + return String.Empty; + } + + return null; + } + + /// + /// Reads a UTC date/time from the stream. + /// + public DateTime ReadDateTime(string fieldName) + { + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + // check the length. + if (m_context.MaxStringLength > 0 && m_context.MaxStringLength < xml.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + if (!String.IsNullOrEmpty(xml)) + { + DateTime value = XmlConvert.ToDateTime(xml, XmlDateTimeSerializationMode.Utc); + EndField(fieldName); + return value; + } + } + + return DateTime.MinValue; + } + + /// + /// Reads a GUID from the stream. + /// + public Uuid ReadGuid(string fieldName) + { + Uuid value = new Uuid(); + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + value.GuidString = ReadString("String"); + PopNamespace(); + + EndField(fieldName); + } + + return value; + } + + /// + /// Reads a byte string from the stream. + /// + public byte[] ReadByteString(string fieldName) + { + bool isNil = false; + + if (BeginField(fieldName, true, out isNil)) + { + byte[] value = null; + + string xml = m_reader.ReadContentAsString(); + + if (!String.IsNullOrEmpty(xml)) + { + value = Convert.FromBase64String(xml); + } + else + { + value = new byte[0]; + } + + // check the length. + if (m_context.MaxByteStringLength > 0 && m_context.MaxByteStringLength < value.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + EndField(fieldName); + return value; + } + + if (!isNil) + { + return new byte[0]; + } + + return null; + } + + /// + /// Exracts the XML from the reader. + /// + private void ExtractXml(StringBuilder builder) + { + builder.Append("<"); + builder.Append(m_reader.Prefix); + builder.Append(":"); + builder.Append(m_reader.LocalName); + + if (m_reader.HasAttributes) + { + for (int ii = 0; ii < m_reader.AttributeCount; ii++) + { + m_reader.MoveToAttribute(ii); + + builder.Append(" "); + builder.Append(m_reader.Name); + builder.Append("='"); + builder.Append(m_reader.Value); + builder.Append("'"); + } + + m_reader.MoveToElement(); // Moves the reader back to the element node. + } + + m_reader.MoveToContent(); + + while (m_reader.NodeType != XmlNodeType.EndElement) + { + if (m_reader.IsStartElement()) + { + ExtractXml(builder); + continue; + } + + builder.Append(m_reader.ReadContentAsString()); + } + + m_reader.ReadEndElement(); + } + + /// + /// Reads an XmlElement from the stream. + /// + public XmlElement ReadXmlElement(string fieldName) + { + if (BeginField(fieldName, true)) + { + if (MoveToElement(null)) + { + XmlDocument document = new XmlDocument(); + XmlElement value = document.CreateElement(m_reader.Prefix, m_reader.LocalName, m_reader.NamespaceURI); + document.AppendChild(value); + + if (m_reader.MoveToFirstAttribute()) + { + do + { + XmlAttribute attribute = document.CreateAttribute(m_reader.Name); + attribute.Value = m_reader.Value; + value.Attributes.Append(attribute); + } + while (m_reader.MoveToNextAttribute()); + + m_reader.MoveToContent(); + } + + value.InnerXml = m_reader.ReadInnerXml(); + + EndField(fieldName); + return value; + } + } + + return null; + } + + /// + /// Reads an NodeId from the stream. + /// + public NodeId ReadNodeId(string fieldName) + { + NodeId value = new NodeId(); + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + value.IdentifierText = ReadString("Identifier"); + PopNamespace(); + + EndField(fieldName); + } + + if (m_namespaceMappings != null && m_namespaceMappings.Length > value.NamespaceIndex) + { + value.SetNamespaceIndex(m_namespaceMappings[value.NamespaceIndex]); + } + + return value; + } + + /// + /// Reads an ExpandedNodeId from the stream. + /// + public ExpandedNodeId ReadExpandedNodeId(string fieldName) + { + ExpandedNodeId value = new ExpandedNodeId(); + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + value.IdentifierText = ReadString("Identifier"); + PopNamespace(); + + EndField(fieldName); + } + + if (m_namespaceMappings != null && m_namespaceMappings.Length > value.NamespaceIndex) + { + value.SetNamespaceIndex(m_namespaceMappings[value.NamespaceIndex]); + } + + if (m_serverMappings != null && m_serverMappings.Length > value.ServerIndex) + { + value.SetServerIndex(m_serverMappings[value.ServerIndex]); + } + + return value; + } + + /// + /// Reads an StatusCode from the stream. + /// + public StatusCode ReadStatusCode(string fieldName) + { + StatusCode value = new StatusCode(); + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + value.Code = ReadUInt32("Code"); + PopNamespace(); + + EndField(fieldName); + } + + return value; + } + + /// + /// Reads an DiagnosticInfo from the stream. + /// + public DiagnosticInfo ReadDiagnosticInfo(string fieldName) + { + DiagnosticInfo value = null; + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + value = ReadDiagnosticInfo(); + PopNamespace(); + + EndField(fieldName); + return value; + } + + return value; + } + + /// + /// Reads an DiagnosticInfo from the stream. + /// + public DiagnosticInfo ReadDiagnosticInfo() + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + DiagnosticInfo value = new DiagnosticInfo(); + + if (BeginField("SymbolicId", true)) + { + value.SymbolicId = ReadInt32(null); + EndField("SymbolicId"); + } + + if (BeginField("NamespaceUri", true)) + { + value.NamespaceUri = ReadInt32(null); + EndField("NamespaceUri"); + } + + if (BeginField("Locale", true)) + { + value.Locale = ReadInt32(null); + EndField("Locale"); + } + + if (BeginField("LocalizedText", true)) + { + value.LocalizedText = ReadInt32(null); + EndField("LocalizedText"); + } + + value.AdditionalInfo = ReadString("AdditionalInfo"); + value.InnerStatusCode = ReadStatusCode("InnerStatusCode"); + + if (BeginField("InnerDiagnosticInfo", true)) + { + value.InnerDiagnosticInfo = ReadDiagnosticInfo(); + EndField("InnerDiagnosticInfo"); + } + + m_nestingLevel--; + + return value; + } + + /// + /// Reads an QualifiedName from the stream. + /// + public QualifiedName ReadQualifiedName(string fieldName) + { + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + ushort namespaceIndex = 0; + + if (BeginField("NamespaceIndex", true)) + { + namespaceIndex = ReadUInt16(null); + EndField("NamespaceIndex"); + } + + bool isNil = false; + string name = null; + + if (BeginField("Name", true, out isNil)) + { + name = ReadString(null); + EndField("Name"); + } + else if (!isNil) + { + name = String.Empty; + } + + PopNamespace(); + EndField(fieldName); + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + return new QualifiedName(name, namespaceIndex); + } + + return new QualifiedName(); + } + + /// + /// Reads an LocalizedText from the stream. + /// + public LocalizedText ReadLocalizedText(string fieldName) + { + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + bool isNil = false; + string text = null; + string locale = null; + + if (BeginField("Locale", true, out isNil)) + { + locale = ReadString(null); + EndField("Locale"); + } + else if (!isNil) + { + locale = String.Empty; + } + + if (BeginField("Text", true, out isNil)) + { + text = ReadString(null); + EndField("Text"); + } + else if (!isNil) + { + text = String.Empty; + } + + LocalizedText value = new LocalizedText(locale, text); + + PopNamespace(); + + EndField(fieldName); + return value; + } + + return LocalizedText.Null; + } + + /// + /// Reads an Variant from the stream. + /// + public Variant ReadVariant(string fieldName) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + Variant value = new Variant(); + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (BeginField("Value", true)) + { + try + { + TypeInfo typeInfo = null; + object contents = ReadVariantContents(out typeInfo); + value = new Variant(contents, typeInfo); + } + catch (Exception ex) + { + Utils.Trace(ex, "Error reading variant."); + value = new Variant(StatusCodes.BadEncodingError); + } + EndField("Value"); + } + + PopNamespace(); + + EndField(fieldName); + } + + m_nestingLevel--; + + return value; + } + + /// + /// Reads an DataValue from the stream. + /// + public DataValue ReadDataValue(string fieldName) + { + DataValue value = new DataValue(); + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + value.WrappedValue = ReadVariant("Value"); + value.StatusCode = ReadStatusCode("StatusCode"); + value.SourceTimestamp = ReadDateTime("SourceTimestamp"); + value.SourcePicoseconds = ReadUInt16("SourcePicoseconds"); + value.ServerTimestamp = ReadDateTime("ServerTimestamp"); + value.ServerPicoseconds = ReadUInt16("ServerPicoseconds"); + + PopNamespace(); + + EndField(fieldName); + } + + return value; + } + + /// + /// Reads an extension object from the stream. + /// + public ExtensionObject ReadExtensionObject(string fieldName) + { + bool isNil; + + if (!BeginField(fieldName, true, out isNil)) + { + if (isNil) + { + return null; + } + + return ExtensionObject.Null; + } + + PushNamespace(Namespaces.OpcUaXsd); + + // read local type id. + NodeId typeId = ReadNodeId("TypeId"); + + // convert to absolute type id. + ExpandedNodeId absoluteId = NodeId.ToExpandedNodeId(typeId, m_context.NamespaceUris); + + if (!NodeId.IsNull(typeId) && NodeId.IsNull(absoluteId)) + { + Utils.Trace( + "Cannot de-serialized extension objects if the NamespaceUri is not in the NamespaceTable: Type = {0}", + typeId); + } + + // read body. + if (!BeginField("Body", true)) + { + // read end of extension object. + EndField(fieldName); + PopNamespace(); + + return new ExtensionObject(absoluteId); + } + + // read the body. + object body = ReadExtensionObjectBody(absoluteId); + + // read end of body. + EndField("Body"); + PopNamespace(); + + // read end of extension object. + EndField(fieldName); + + IEncodeable encodeable = body as IEncodeable; + if (encodeable != null) + { + // Set the known TypeId for encodeables. + absoluteId = encodeable.TypeId; + } + + return new ExtensionObject(absoluteId, body); + } + + /// + /// Reads an encodeable object from the stream. + /// + /// The encodeable object field name + /// The system type of the encopdeable object to be read + /// The TypeId for the instance that will be read. + /// An object that was read from the stream. + public IEncodeable ReadEncodeable(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null) + { + if (systemType == null) throw new ArgumentNullException(nameof(systemType)); + + IEncodeable value = Activator.CreateInstance(systemType) as IEncodeable; + + if (value == null) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Type does not support IEncodeable interface: '{0}'", systemType.FullName)); + } + + if (encodeableTypeId != null) + { + // set type identifier for custom complex data types before decode. + IComplexTypeInstance complexTypeInstance = value as IComplexTypeInstance; + + if (complexTypeInstance != null) + { + complexTypeInstance.TypeId = encodeableTypeId; + } + } + + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + if (BeginField(fieldName, true)) + { + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(systemType); + + PushNamespace(xmlName.Namespace); + value.Decode(this); + PopNamespace(); + + // skip to end of encodeable object. + m_reader.MoveToContent(); + + while (!(m_reader.NodeType == XmlNodeType.EndElement && m_reader.LocalName == fieldName && m_reader.NamespaceURI == m_namespaces.Peek())) + { + if (m_reader.NodeType == XmlNodeType.None) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Unexpected end of stream decoding field '{0}' for type '{1}'.", fieldName, systemType.FullName)); + } + + m_reader.Skip(); + m_reader.MoveToContent(); + } + + EndField(fieldName); + } + + m_nestingLevel--; + + return value; + } + + /// + /// Reads an enumerated value from the stream. + /// + public Enum ReadEnumerated(string fieldName, System.Type enumType) + { + Enum value = (Enum)Enum.GetValues(enumType).GetValue(0); + + if (BeginField(fieldName, true)) + { + string xml = ReadString(); + + if (!String.IsNullOrEmpty(xml)) + { + int index = xml.LastIndexOf('_'); + + if (index != -1) + { + int numericValue = Convert.ToInt32(xml.Substring(index + 1), CultureInfo.InvariantCulture); + value = (Enum)Enum.ToObject(enumType, numericValue); + } + else + { + value = (Enum)Enum.Parse(enumType, xml, false); + } + } + + EndField(fieldName); + } + + return value; + } + + /// + /// Reads a boolean array from the stream. + /// + public BooleanCollection ReadBooleanArray(string fieldName) + { + bool isNil = false; + + BooleanCollection values = new BooleanCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Boolean")) + { + values.Add(ReadBoolean("Boolean")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a sbyte array from the stream. + /// + public SByteCollection ReadSByteArray(string fieldName) + { + bool isNil = false; + + SByteCollection values = new SByteCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("SByte")) + { + values.Add(ReadSByte("SByte")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a byte array from the stream. + /// + public ByteCollection ReadByteArray(string fieldName) + { + bool isNil = false; + + ByteCollection values = new ByteCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Byte")) + { + values.Add(ReadByte("Byte")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a short array from the stream. + /// + public Int16Collection ReadInt16Array(string fieldName) + { + bool isNil = false; + + Int16Collection values = new Int16Collection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Int16")) + { + values.Add(ReadInt16("Int16")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a ushort array from the stream. + /// + public UInt16Collection ReadUInt16Array(string fieldName) + { + bool isNil = false; + + UInt16Collection values = new UInt16Collection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("UInt16")) + { + values.Add(ReadUInt16("UInt16")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a int array from the stream. + /// + public Int32Collection ReadInt32Array(string fieldName) + { + bool isNil = false; + + Int32Collection values = new Int32Collection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Int32")) + { + values.Add(ReadInt32("Int32")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a uint array from the stream. + /// + public UInt32Collection ReadUInt32Array(string fieldName) + { + bool isNil = false; + + UInt32Collection values = new UInt32Collection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("UInt32")) + { + values.Add(ReadUInt32("UInt32")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a long array from the stream. + /// + public Int64Collection ReadInt64Array(string fieldName) + { + bool isNil = false; + + Int64Collection values = new Int64Collection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Int64")) + { + values.Add(ReadInt64("Int64")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a ulong array from the stream. + /// + public UInt64Collection ReadUInt64Array(string fieldName) + { + bool isNil = false; + + UInt64Collection values = new UInt64Collection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("UInt64")) + { + values.Add(ReadUInt64("UInt64")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a float array from the stream. + /// + public FloatCollection ReadFloatArray(string fieldName) + { + bool isNil = false; + + FloatCollection values = new FloatCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Float")) + { + values.Add(ReadFloat("Float")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a double array from the stream. + /// + public DoubleCollection ReadDoubleArray(string fieldName) + { + bool isNil = false; + + DoubleCollection values = new DoubleCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Double")) + { + values.Add(ReadDouble("Double")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a string array from the stream. + /// + public StringCollection ReadStringArray(string fieldName) + { + bool isNil = false; + + StringCollection values = new StringCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("String")) + { + values.Add(ReadString("String")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a UTC date/time array from the stream. + /// + public DateTimeCollection ReadDateTimeArray(string fieldName) + { + bool isNil = false; + + DateTimeCollection values = new DateTimeCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("DateTime")) + { + values.Add(ReadDateTime("DateTime")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a GUID array from the stream. + /// + public UuidCollection ReadGuidArray(string fieldName) + { + bool isNil = false; + + UuidCollection values = new UuidCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Guid")) + { + values.Add(ReadGuid("Guid")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads a byte string array from the stream. + /// + public ByteStringCollection ReadByteStringArray(string fieldName) + { + bool isNil = false; + + ByteStringCollection values = new ByteStringCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("ByteString")) + { + values.Add(ReadByteString("ByteString")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an XmlElement array from the stream. + /// + public XmlElementCollection ReadXmlElementArray(string fieldName) + { + bool isNil = false; + + XmlElementCollection values = new XmlElementCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("XmlElement")) + { + values.Add(ReadXmlElement("XmlElement")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an NodeId array from the stream. + /// + public NodeIdCollection ReadNodeIdArray(string fieldName) + { + bool isNil = false; + + NodeIdCollection values = new NodeIdCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("NodeId")) + { + values.Add(ReadNodeId("NodeId")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an ExpandedNodeId array from the stream. + /// + public ExpandedNodeIdCollection ReadExpandedNodeIdArray(string fieldName) + { + bool isNil = false; + + ExpandedNodeIdCollection values = new ExpandedNodeIdCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("ExpandedNodeId")) + { + values.Add(ReadExpandedNodeId("ExpandedNodeId")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an StatusCode array from the stream. + /// + public StatusCodeCollection ReadStatusCodeArray(string fieldName) + { + bool isNil = false; + + StatusCodeCollection values = new StatusCodeCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("StatusCode")) + { + values.Add(ReadStatusCode("StatusCode")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an DiagnosticInfo array from the stream. + /// + public DiagnosticInfoCollection ReadDiagnosticInfoArray(string fieldName) + { + bool isNil = false; + + DiagnosticInfoCollection values = new DiagnosticInfoCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("DiagnosticInfo")) + { + values.Add(ReadDiagnosticInfo("DiagnosticInfo")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an QualifiedName array from the stream. + /// + public QualifiedNameCollection ReadQualifiedNameArray(string fieldName) + { + bool isNil = false; + + QualifiedNameCollection values = new QualifiedNameCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("QualifiedName")) + { + values.Add(ReadQualifiedName("QualifiedName")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an LocalizedText array from the stream. + /// + public LocalizedTextCollection ReadLocalizedTextArray(string fieldName) + { + bool isNil = false; + + LocalizedTextCollection values = new LocalizedTextCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("LocalizedText")) + { + values.Add(ReadLocalizedText("LocalizedText")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an Variant array from the stream. + /// + public VariantCollection ReadVariantArray(string fieldName) + { + bool isNil = false; + + VariantCollection values = new VariantCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("Variant")) + { + values.Add(ReadVariant("Variant")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an DataValue array from the stream. + /// + public DataValueCollection ReadDataValueArray(string fieldName) + { + bool isNil = false; + + DataValueCollection values = new DataValueCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("DataValue")) + { + values.Add(ReadDataValue("DataValue")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an array of extension objects from the stream. + /// + public ExtensionObjectCollection ReadExtensionObjectArray(string fieldName) + { + bool isNil = false; + + ExtensionObjectCollection values = new ExtensionObjectCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + PushNamespace(Namespaces.OpcUaXsd); + + while (MoveToElement("ExtensionObject")) + { + values.Add(ReadExtensionObject("ExtensionObject")); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + return values; + } + + if (isNil) + { + return null; + } + + return values; + } + + /// + /// Reads an encodeable array from the stream. + /// + /// The encodeable array field name + /// The system type of the encopdeable objects to be read object + /// The TypeId for the instances that will be read. + /// An array that was read from the stream. + public Array ReadEncodeableArray(string fieldName, System.Type systemType, ExpandedNodeId encodeableTypeId = null) + { + if (systemType == null) throw new ArgumentNullException(nameof(systemType)); + + bool isNil = false; + + IEncodeableCollection encodeables = new IEncodeableCollection(); + + if (BeginField(fieldName, true, out isNil)) + { + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(systemType); + PushNamespace(xmlName.Namespace); + + while (MoveToElement(xmlName.Name)) + { + encodeables.Add(ReadEncodeable(xmlName.Name, systemType, encodeableTypeId)); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < encodeables.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + + EndField(fieldName); + + // convert to an array of the specified type. + Array values = Array.CreateInstance(systemType, encodeables.Count); + + for (int ii = 0; ii < encodeables.Count; ii++) + { + values.SetValue(encodeables[ii], ii); + } + + return values; + } + + if (isNil) + { + return null; + } + + return Array.CreateInstance(systemType, 0); + } + + /// + /// Reads an enumerated value array from the stream. + /// + public Array ReadEnumeratedArray(string fieldName, System.Type enumType) + { + if (enumType == null) throw new ArgumentNullException(nameof(enumType)); + + bool isNil = false; + + List enums = new List(); + + if (BeginField(fieldName, true, out isNil)) + { + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(enumType); + PushNamespace(xmlName.Namespace); + + while (MoveToElement(xmlName.Name)) + { + enums.Add(ReadEnumerated(xmlName.Name, enumType)); + } + + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < enums.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PopNamespace(); + EndField(fieldName); + + Array values = Array.CreateInstance(enumType, enums.Count); + + for (int ii = 0; ii < enums.Count; ii++) + { + values.SetValue(enums[ii], ii); + } + + return values; + } + + if (isNil) + { + return null; + } + + return Array.CreateInstance(enumType, 0); + } + #endregion + + #region Private Methods + /// + /// Reads an Matrix from the stream. + /// + private Matrix ReadMatrix(string fieldName) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + Array elements = null; + Int32Collection dimensions = null; + TypeInfo typeInfo = null; + + if (BeginField(fieldName, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (BeginField("Elements", true)) + { + object contents = ReadVariantContents(out typeInfo); + elements = contents as Array; + EndField("Elements"); + } + + dimensions = ReadInt32Array("Dimensions"); + + PopNamespace(); + + EndField(fieldName); + } + + m_nestingLevel--; + + if (elements == null) + { + throw new ServiceResultException(StatusCodes.BadDecodingError, "The Matrix contains invalid elements"); + } + + if (dimensions != null && dimensions.Count > 0) + { + return new Matrix(elements, typeInfo.BuiltInType, dimensions.ToArray()); + } + + return new Matrix(elements, typeInfo.BuiltInType); + } + + /// + /// Reads a string from the stream. + /// + private string ReadString() + { + string value = m_reader.ReadContentAsString(); + + // check the length. + if (value != null) + { + if (m_context.MaxStringLength > 0 && m_context.MaxStringLength < value.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + } + + return value; + } + + /// + /// Reads the start of filed where the presences of the xsi:nil attribute is not significant. + /// + private bool BeginField(string fieldName, bool isOptional) + { + bool isNil = false; + return BeginField(fieldName, isOptional, out isNil); + } + + /// + /// Reads the start of field. + /// + private bool BeginField(string fieldName, bool isOptional, out bool isNil) + { + isNil = false; + + // move to the next node. + m_reader.MoveToContent(); + + // allow caller to skip reading element tag if field name is not specified. + if (String.IsNullOrEmpty(fieldName)) + { + return true; + } + + // check if requested element is present. + if (!m_reader.IsStartElement(fieldName, m_namespaces.Peek())) + { + if (!isOptional) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Encountered element: '{1}:{0}' when expecting element: '{2}:{3}'.", m_reader.LocalName, m_reader.NamespaceURI, fieldName, m_namespaces.Peek())); + } + + isNil = true; + + // nothing more to read. + return false; + } + + // check for empty or nil element. + if (m_reader.HasAttributes) + { + string nilValue = m_reader.GetAttribute("nil", Namespaces.XmlSchemaInstance); + + if (!String.IsNullOrEmpty(nilValue)) + { + if (XmlConvert.ToBoolean(nilValue)) + { + isNil = true; + } + } + } + + bool isEmpty = m_reader.IsEmptyElement; + + m_reader.ReadStartElement(); + + if (!isEmpty) + { + m_reader.MoveToContent(); + + // check for an element with no children but not empty (due to whitespace). + if (m_reader.NodeType == XmlNodeType.EndElement) + { + if (m_reader.LocalName == fieldName && m_reader.NamespaceURI == m_namespaces.Peek()) + { + m_reader.ReadEndElement(); + return false; + } + } + } + + // caller must read contents of element. + return !isNil && !isEmpty; + } + + /// + /// Reads the end of a field. + /// + private void EndField(string fieldName) + { + if (!String.IsNullOrEmpty(fieldName)) + { + m_reader.MoveToContent(); + + if (m_reader.NodeType != XmlNodeType.EndElement || m_reader.LocalName != fieldName || m_reader.NamespaceURI != m_namespaces.Peek()) + { + throw new ServiceResultException( + StatusCodes.BadDecodingError, + Utils.Format("Encountered end element: '{1}:{0}' when expecting element: '{3}:{2}'.", m_reader.LocalName, m_reader.NamespaceURI, fieldName, m_namespaces.Peek())); + } + + m_reader.ReadEndElement(); + } + } + + /// + /// Moves to the next start element. + /// + private bool MoveToElement(string elementName) + { + while (!m_reader.IsStartElement()) + { + if (m_reader.NodeType == XmlNodeType.None || m_reader.NodeType == XmlNodeType.EndElement) + { + return false; + } + + m_reader.Read(); + } + + if (String.IsNullOrEmpty(elementName)) + { + return true; + } + + return (m_reader.LocalName == elementName && m_reader.NamespaceURI == m_namespaces.Peek()); + } + #endregion + + #region Private Fields + private XmlReader m_reader; + private Stack m_namespaces; + private ServiceMessageContext m_context; + private ushort[] m_namespaceMappings; + private ushort[] m_serverMappings; + private uint m_nestingLevel; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/XmlEncoder.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/XmlEncoder.cs new file mode 100644 index 00000000..cb66a386 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Encoders/XmlEncoder.cs @@ -0,0 +1,2067 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// Writes objects to a XML stream. + /// + public class XmlEncoder : IEncoder, IDisposable + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public XmlEncoder(ServiceMessageContext context) + { + Initialize(); + + m_destination = new StringBuilder(); + m_context = context; + m_nestingLevel = 0; + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.CheckCharacters = false; + settings.ConformanceLevel = ConformanceLevel.Auto; + settings.NamespaceHandling = NamespaceHandling.OmitDuplicates; + settings.NewLineHandling = NewLineHandling.Replace; + + m_writer = XmlWriter.Create(m_destination, settings); + } + + /// + /// Initializes the object with a system type to encode and a XML writer. + /// + public XmlEncoder(System.Type systemType, XmlWriter writer, ServiceMessageContext context) + : + this(EncodeableFactory.GetXmlName(systemType), writer, context) + { + } + + /// + /// Initializes the object with a system type to encode and a XML writer. + /// + public XmlEncoder(XmlQualifiedName root, XmlWriter writer, ServiceMessageContext context) + { + Initialize(); + + if (writer == null) + { + m_destination = new StringBuilder(); + m_writer = XmlWriter.Create(m_destination); + } + else + { + m_destination = null; + m_writer = writer; + } + + Initialize(root.Name, root.Namespace); + m_context = context; + m_nestingLevel = 0; + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + m_destination = null; + m_writer = null; + m_namespaces = new Stack(); + m_root = null; + } + + /// + /// Writes the root element to the stream. + /// + private void Initialize(string fieldName, string namespaceUri) + { + m_root = new XmlQualifiedName(fieldName, namespaceUri); + + string uaxPrefix = m_writer.LookupPrefix(Namespaces.OpcUaXsd); + + if (uaxPrefix == null) + { + uaxPrefix = "uax"; + } + + if (namespaceUri == Namespaces.OpcUaXsd) + { + m_writer.WriteStartElement(uaxPrefix, fieldName, namespaceUri); + } + else + { + m_writer.WriteStartElement(fieldName, namespaceUri); + } + + string xsiPrefix = m_writer.LookupPrefix(Namespaces.XmlSchemaInstance); + + if (xsiPrefix == null) + { + m_writer.WriteAttributeString("xmlns", "xsi", null, Namespaces.XmlSchemaInstance); + } + + uaxPrefix = m_writer.LookupPrefix(Namespaces.OpcUaXsd); + + if (uaxPrefix == null) + { + m_writer.WriteAttributeString("xmlns", "uax", null, Namespaces.OpcUaXsd); + } + + PushNamespace(namespaceUri); + } + #endregion + + #region Public Methods + /// + /// Initializes the tables used to map namespace and server uris during encoding. + /// + /// The namespaces URIs referenced by the data being encoded. + /// The server URIs referenced by the data being encoded. + public void SetMappingTables(NamespaceTable namespaceUris, StringTable serverUris) + { + m_namespaceMappings = null; + + if (namespaceUris != null && m_context.NamespaceUris != null) + { + m_namespaceMappings = namespaceUris.CreateMapping(m_context.NamespaceUris, false); + } + + m_serverMappings = null; + + if (serverUris != null && m_context.ServerUris != null) + { + m_serverMappings = serverUris.CreateMapping(m_context.ServerUris, false); + } + } + + /// + /// Saves a string table from an XML stream. + /// + /// Name of the table. + /// Name of the element. + /// The string table. + public void SaveStringTable(string tableName, string elementName, StringTable stringTable) + { + if (stringTable == null || stringTable.Count <= 1) + { + return; + } + + PushNamespace(Namespaces.OpcUaXsd); + + try + { + Push(tableName, Namespaces.OpcUaXsd); + + for (ushort ii = 1; ii < stringTable.Count; ii++) + { + WriteString(elementName, stringTable.GetString(ii)); + } + + Pop(); + } + finally + { + PopNamespace(); + } + } + + /// + /// Writes a start element. + /// + /// The name of the element. + /// The namespace that qualifies the element name. + public void Push(string fieldName, string namespaceUri) + { + m_writer.WriteStartElement(fieldName, namespaceUri); + PushNamespace(namespaceUri); + } + + /// + /// Writes an end element. + /// + public void Pop() + { + m_writer.WriteEndElement(); + PopNamespace(); + } + + /// + /// Completes writing and returns the XML text. + /// + public string Close() + { + if (m_root != null) + { + m_writer.WriteEndElement(); + } + + m_writer.Flush(); + m_writer.Dispose(); + + if (m_destination != null) + { + return m_destination.ToString(); + } + + return null; + } + #endregion + + #region IDisposable Members + /// + /// Frees any unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// An overrideable version of the Dispose. + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_writer != null) + { + m_writer.Flush(); + m_writer.Dispose(); + m_writer = null; + } + } + } + #endregion + + #region IEncoder Members + /// + /// The type of encoding being used. + /// + public EncodingType EncodingType => EncodingType.Xml; + + /// + /// The message context associated with the encoder. + /// + public ServiceMessageContext Context => m_context; + + /// + /// Xml Encoder always produces reversible encoding. + /// + public bool UseReversibleEncoding => true; + + /// + /// Pushes a namespace onto the namespace stack. + /// + public void PushNamespace(string namespaceUri) + { + m_namespaces.Push(namespaceUri); + } + + /// + /// Pops a namespace from the namespace stack. + /// + public void PopNamespace() + { + m_namespaces.Pop(); + } + + /// + /// Writes a boolean to the stream. + /// + public void WriteBoolean(string fieldName, bool value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a sbyte to the stream. + /// + public void WriteSByte(string fieldName, sbyte value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a byte to the stream. + /// + public void WriteByte(string fieldName, byte value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a short to the stream. + /// + public void WriteInt16(string fieldName, short value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a ushort to the stream. + /// + public void WriteUInt16(string fieldName, ushort value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes an int to the stream. + /// + public void WriteInt32(string fieldName, int value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a uint to the stream. + /// + public void WriteUInt32(string fieldName, uint value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a long to the stream. + /// + public void WriteInt64(string fieldName, long value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a ulong to the stream. + /// + public void WriteUInt64(string fieldName, ulong value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(XmlConvert.ToString(value)); + EndField(fieldName); + } + } + + /// + /// Writes a float to the stream. + /// + public void WriteFloat(string fieldName, float value) + { + if (BeginField(fieldName, false, false)) + { + if (Single.IsNaN(value)) + { + m_writer.WriteValue("NaN"); + } + else if (Single.IsPositiveInfinity(value)) + { + m_writer.WriteValue("INF"); + } + else if (Single.IsNegativeInfinity(value)) + { + m_writer.WriteValue("-INF"); + } + else + { + m_writer.WriteValue(value); + } + + EndField(fieldName); + } + } + + /// + /// Writes a double to the stream. + /// + public void WriteDouble(string fieldName, double value) + { + if (BeginField(fieldName, false, false)) + { + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a string to the stream. + /// + public void WriteString(string fieldName, string value) + { + WriteString(fieldName, value, false); + } + + private void WriteString(string fieldName, string value, bool isArrayElement) + { + if (BeginField(fieldName, value == null, true, isArrayElement)) + { + // check the length. + if (m_context.MaxStringLength > 0 && m_context.MaxStringLength < value.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + if (!String.IsNullOrWhiteSpace(value)) + { + m_writer.WriteString(value); + } + + EndField(fieldName); + } + } + + /// + /// Writes a UTC date/time to the stream. + /// + public void WriteDateTime(string fieldName, DateTime value) + { + if (BeginField(fieldName, false, false)) + { + value = Utils.ToOpcUaUniversalTime(value); + m_writer.WriteValue(value); + EndField(fieldName); + } + } + + /// + /// Writes a GUID to the stream. + /// + public void WriteGuid(string fieldName, Uuid value) + { + if (BeginField(fieldName, false, false)) + { + PushNamespace(Namespaces.OpcUaXsd); + WriteString("String", value.GuidString); + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a GUID to the stream. + /// + public void WriteGuid(string fieldName, Guid value) + { + if (BeginField(fieldName, false, false)) + { + PushNamespace(Namespaces.OpcUaXsd); + WriteString("String", value.ToString()); + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a byte string to the stream. + /// + public void WriteByteString(string fieldName, byte[] value) + { + WriteByteString(fieldName, value, false); + } + + private void WriteByteString(string fieldName, byte[] value, bool isArrayElement = false) + { + if (BeginField(fieldName, value == null, true, isArrayElement)) + { + // check the length. + if (m_context.MaxByteStringLength > 0 && m_context.MaxByteStringLength < value.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + m_writer.WriteValue(Convert.ToBase64String(value, Base64FormattingOptions.InsertLineBreaks)); + EndField(fieldName); + } + } + + /// + /// Writes an XmlElement to the stream. + /// + public void WriteXmlElement(string fieldName, XmlElement value) + { + WriteXmlElement(fieldName, value, false); + } + + private void WriteXmlElement(string fieldName, XmlElement value, bool isArrayElement) + { + if (BeginField(fieldName, value == null, true, isArrayElement)) + { + m_writer.WriteRaw(value.OuterXml); + EndField(fieldName); + } + } + + /// + /// Writes an NodeId to the stream. + /// + public void WriteNodeId(string fieldName, NodeId value) + { + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + ushort namespaceIndex = value.NamespaceIndex; + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + StringBuilder buffer = new StringBuilder(); + NodeId.Format(buffer, value.Identifier, value.IdType, namespaceIndex); + WriteString("Identifier", buffer.ToString()); + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an ExpandedNodeId to the stream. + /// + public void WriteExpandedNodeId(string fieldName, ExpandedNodeId value) + { + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + ushort namespaceIndex = value.NamespaceIndex; + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + uint serverIndex = value.ServerIndex; + + if (m_serverMappings != null && m_serverMappings.Length > serverIndex) + { + serverIndex = m_serverMappings[serverIndex]; + } + + StringBuilder buffer = new StringBuilder(); + ExpandedNodeId.Format(buffer, value.Identifier, value.IdType, namespaceIndex, value.NamespaceUri, serverIndex); + WriteString("Identifier", buffer.ToString()); + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an StatusCode to the stream. + /// + public void WriteStatusCode(string fieldName, StatusCode value) + { + if (BeginField(fieldName, false, false)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + WriteUInt32("Code", value.Code); + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an DiagnosticInfo to the stream. + /// + public void WriteDiagnosticInfo(string fieldName, DiagnosticInfo value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + WriteInt32("SymbolicId", value.SymbolicId); + WriteInt32("NamespaceUri", value.NamespaceUri); + WriteInt32("Locale", value.Locale); + WriteInt32("LocalizedText", value.LocalizedText); + WriteString("AdditionalInfo", value.AdditionalInfo); + WriteStatusCode("InnerStatusCode", value.InnerStatusCode); + WriteDiagnosticInfo("InnerDiagnosticInfo", value.InnerDiagnosticInfo); + } + + PopNamespace(); + + EndField(fieldName); + } + + m_nestingLevel--; + } + + /// + /// Writes an QualifiedName to the stream. + /// + public void WriteQualifiedName(string fieldName, QualifiedName value) + { + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + ushort namespaceIndex = value.NamespaceIndex; + + if (m_namespaceMappings != null && m_namespaceMappings.Length > namespaceIndex) + { + namespaceIndex = m_namespaceMappings[namespaceIndex]; + } + + if (value != null) + { + WriteUInt16("NamespaceIndex", namespaceIndex); + WriteString("Name", value.Name); + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an LocalizedText to the stream. + /// + public void WriteLocalizedText(string fieldName, LocalizedText value) + { + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + if (!String.IsNullOrEmpty(value.Locale)) + { + WriteString("Locale", value.Locale); + } + + if (!String.IsNullOrEmpty(value.Text)) + { + WriteString("Text", value.Text); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an Variant array to the stream. + /// + public void WriteVariant(string fieldName, Variant value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + if (BeginField(fieldName, false, false)) + { + PushNamespace(Namespaces.OpcUaXsd); + + m_writer.WriteStartElement("Value", Namespaces.OpcUaXsd); + WriteVariantContents(value.Value, value.TypeInfo); + m_writer.WriteEndElement(); + + PopNamespace(); + + EndField(fieldName); + } + + m_nestingLevel--; + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValue(string fieldName, DataValue value) + { + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + WriteVariant("Value", value.WrappedValue); + WriteStatusCode("StatusCode", value.StatusCode); + WriteDateTime("SourceTimestamp", value.SourceTimestamp); + WriteUInt16("SourcePicoseconds", value.SourcePicoseconds); + WriteDateTime("ServerTimestamp", value.ServerTimestamp); + WriteUInt16("ServerPicoseconds", value.ServerPicoseconds); + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an ExtensionObject to the stream. + /// + public void WriteExtensionObject(string fieldName, ExtensionObject value) + { + if (BeginField(fieldName, value == null, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + // check for null. + if (value == null) + { + EndField(fieldName); + PopNamespace(); + return; + } + + IEncodeable encodeable = value.Body as IEncodeable; + + // write the type id. + ExpandedNodeId typeId = value.TypeId; + + if (encodeable != null) + { + if (value.Encoding == ExtensionObjectEncoding.Binary) + { + typeId = encodeable.BinaryEncodingId; + } + else + { + typeId = encodeable.XmlEncodingId; + } + } + + NodeId localTypeId = ExpandedNodeId.ToNodeId(typeId, m_context.NamespaceUris); + + if (NodeId.IsNull(localTypeId) && !NodeId.IsNull(typeId)) + { + if (encodeable != null) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Cannot encode bodies of type '{0}' in ExtensionObject unless the NamespaceUri ({1}) is in the encoder's NamespaceTable.", + encodeable.GetType().FullName, + typeId.NamespaceUri); + } + + localTypeId = NodeId.Null; + } + + WriteNodeId("TypeId", localTypeId); + + object body = value.Body; + + if (body == null) + { + EndField(fieldName); + PopNamespace(); + return; + } + + // write the body. + m_writer.WriteStartElement("Body", Namespaces.OpcUaXsd); + + WriteExtensionObjectBody(body); + + // end of body. + m_writer.WriteEndElement(); + + EndField(fieldName); + PopNamespace(); + } + } + + /// + /// Writes an encodeable object to the stream. + /// + public void WriteEncodeable(string fieldName, IEncodeable value, System.Type systemType) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + if (BeginField(fieldName, value == null, true)) + { + if (value != null) + { + value.Encode(this); + } + + EndField(fieldName); + } + + m_nestingLevel--; + } + + /// + /// Writes an enumerated value array to the stream. + /// + public void WriteEnumerated(string fieldName, Enum value) + { + if (BeginField(fieldName, value == null, true)) + { + if (value != null) + { + var valueSymbol = value.ToString(); + var valueInt32 = Convert.ToInt32(value, CultureInfo.InvariantCulture).ToString(); + if (valueSymbol != valueInt32) + { + m_writer.WriteString(Utils.Format("{0}_{1}", valueSymbol, valueInt32)); + } + else + { + m_writer.WriteString(valueSymbol); + } + } + + EndField(fieldName); + } + } + + /// + /// Writes a boolean array to the stream. + /// + public void WriteBooleanArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteBoolean("Boolean", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a sbyte array to the stream. + /// + public void WriteSByteArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteSByte("SByte", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a sbyte array to the stream. + /// + public void WriteByteArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteByte("Byte", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a short array to the stream. + /// + public void WriteInt16Array(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt16("Int16", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a ushort array to the stream. + /// + public void WriteUInt16Array(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt16("UInt16", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a int array to the stream. + /// + public void WriteInt32Array(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt32("Int32", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a uint array to the stream. + /// + public void WriteUInt32Array(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt32("UInt32", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a long array to the stream. + /// + public void WriteInt64Array(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteInt64("Int64", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a ulong array to the stream. + /// + public void WriteUInt64Array(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteUInt64("UInt64", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a float array to the stream. + /// + public void WriteFloatArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteFloat("Float", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a double array to the stream. + /// + public void WriteDoubleArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteDouble("Double", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a string array to the stream. + /// + public void WriteStringArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteString("String", values[ii], true); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a UTC date/time array to the stream. + /// + public void WriteDateTimeArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteDateTime("DateTime", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a GUID array to the stream. + /// + public void WriteGuidArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteGuid("Guid", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a GUID array to the stream. + /// + public void WriteGuidArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteGuid("Guid", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes a byte string array to the stream. + /// + public void WriteByteStringArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteByteString("ByteString", values[ii], true); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an XmlElement array to the stream. + /// + public void WriteXmlElementArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteXmlElement("XmlElement", values[ii], true); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an NodeId array to the stream. + /// + public void WriteNodeIdArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteNodeId("NodeId", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an ExpandedNodeId array to the stream. + /// + public void WriteExpandedNodeIdArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteExpandedNodeId("ExpandedNodeId", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an StatusCode array to the stream. + /// + public void WriteStatusCodeArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteStatusCode("StatusCode", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an DiagnosticInfo array to the stream. + /// + public void WriteDiagnosticInfoArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteDiagnosticInfo("DiagnosticInfo", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an QualifiedName array to the stream. + /// + public void WriteQualifiedNameArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteQualifiedName("QualifiedName", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an LocalizedText array to the stream. + /// + public void WriteLocalizedTextArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteLocalizedText("LocalizedText", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an Variant array to the stream. + /// + public void WriteVariantArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteVariant("Variant", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an DataValue array to the stream. + /// + public void WriteDataValueArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteDataValue("DataValue", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an extension object array to the stream. + /// + public void WriteExtensionObjectArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteExtensionObject("ExtensionObject", values[ii]); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an encodeable object array to the stream. + /// + public void WriteEncodeableArray(string fieldName, IList values, System.Type systemType) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + // get name for type being encoded. + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(systemType); + + if (xmlName == null) + { + xmlName = new XmlQualifiedName("IEncodeable", Namespaces.OpcUaXsd); + } + + PushNamespace(xmlName.Namespace); + + // encode each element in the array. + for (int ii = 0; ii < values.Count; ii++) + { + IEncodeable value = values[ii]; + + if (systemType != null) + { + if (!systemType.IsInstanceOfType(value)) + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Objects with type '{0}' are not allowed in the array being serialized.", systemType.FullName)); + } + + WriteEncodeable(xmlName.Name, value, systemType); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes an enumerated value array to the stream. + /// + public void WriteEnumeratedArray(string fieldName, Array values, System.Type systemType) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Length) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + // get name for type being encoded. + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(systemType); + + if (xmlName == null) + { + xmlName = new XmlQualifiedName("Enumerated", Namespaces.OpcUaXsd); + } + + PushNamespace(xmlName.Namespace); + + if (values != null) + { + // encode each element in the array. + foreach (Enum value in values) + { + WriteEnumerated(xmlName.Name, value); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + #endregion + + #region Public Methods + /// + /// Writes the contents of an Variant to the stream. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public void WriteVariantContents(object value, TypeInfo typeInfo) + { + // check for null. + if (value == null) + { + m_writer.WriteStartElement("Null", Namespaces.OpcUaXsd); + m_writer.WriteEndElement(); + return; + } + + try + { + PushNamespace(Namespaces.OpcUaXsd); + + // write scalar. + if (typeInfo.ValueRank < 0) + { + switch (typeInfo.BuiltInType) + { + case BuiltInType.Boolean: { WriteBoolean("Boolean", (bool)value); return; } + case BuiltInType.SByte: { WriteSByte("SByte", (sbyte)value); return; } + case BuiltInType.Byte: { WriteByte("Byte", (byte)value); return; } + case BuiltInType.Int16: { WriteInt16("Int16", (short)value); return; } + case BuiltInType.UInt16: { WriteUInt16("UInt16", (ushort)value); return; } + case BuiltInType.Int32: { WriteInt32("Int32", (int)value); return; } + case BuiltInType.UInt32: { WriteUInt32("UInt32", (uint)value); return; } + case BuiltInType.Int64: { WriteInt64("Int64", (long)value); return; } + case BuiltInType.UInt64: { WriteUInt64("UInt64", (ulong)value); return; } + case BuiltInType.Float: { WriteFloat("Float", (float)value); return; } + case BuiltInType.Double: { WriteDouble("Double", (double)value); return; } + case BuiltInType.String: { WriteString("String", (string)value); return; } + case BuiltInType.DateTime: { WriteDateTime("DateTime", (DateTime)value); return; } + case BuiltInType.Guid: { WriteGuid("Guid", (Uuid)value); return; } + case BuiltInType.ByteString: { WriteByteString("ByteString", (byte[])value); return; } + case BuiltInType.XmlElement: { WriteXmlElement("XmlElement", (XmlElement)value); return; } + case BuiltInType.NodeId: { WriteNodeId("NodeId", (NodeId)value); return; } + case BuiltInType.ExpandedNodeId: { WriteExpandedNodeId("ExpandedNodeId", (ExpandedNodeId)value); return; } + case BuiltInType.StatusCode: { WriteStatusCode("StatusCode", (StatusCode)value); return; } + case BuiltInType.QualifiedName: { WriteQualifiedName("QualifiedName", (QualifiedName)value); return; } + case BuiltInType.LocalizedText: { WriteLocalizedText("LocalizedText", (LocalizedText)value); return; } + case BuiltInType.ExtensionObject: { WriteExtensionObject("ExtensionObject", (ExtensionObject)value); return; } + case BuiltInType.DataValue: { WriteDataValue("DataValue", (DataValue)value); return; } + case BuiltInType.Enumeration: { WriteInt32("Int32", (int)value); return; } + } + } + + // write array. + else if (typeInfo.ValueRank <= 1) + { + switch (typeInfo.BuiltInType) + { + case BuiltInType.Boolean: { WriteBooleanArray("ListOfBoolean", (bool[])value); return; } + case BuiltInType.SByte: { WriteSByteArray("ListOfSByte", (sbyte[])value); return; } + case BuiltInType.Byte: { WriteByteArray("ListOfByte", (byte[])value); return; } + case BuiltInType.Int16: { WriteInt16Array("ListOfInt16", (short[])value); return; } + case BuiltInType.UInt16: { WriteUInt16Array("ListOfUInt16", (ushort[])value); return; } + case BuiltInType.Int32: { WriteInt32Array("ListOfInt32", (int[])value); return; } + case BuiltInType.UInt32: { WriteUInt32Array("ListOfUInt32", (uint[])value); return; } + case BuiltInType.Int64: { WriteInt64Array("ListOfInt64", (long[])value); return; } + case BuiltInType.UInt64: { WriteUInt64Array("ListOfUInt64", (ulong[])value); return; } + case BuiltInType.Float: { WriteFloatArray("ListOfFloat", (float[])value); return; } + case BuiltInType.Double: { WriteDoubleArray("ListOfDouble", (double[])value); return; } + case BuiltInType.String: { WriteStringArray("ListOfString", (string[])value); return; } + case BuiltInType.DateTime: { WriteDateTimeArray("ListOfDateTime", (DateTime[])value); return; } + case BuiltInType.Guid: { WriteGuidArray("ListOfGuid", (Uuid[])value); return; } + case BuiltInType.ByteString: { WriteByteStringArray("ListOfByteString", (byte[][])value); return; } + case BuiltInType.XmlElement: { WriteXmlElementArray("ListOfXmlElement", (XmlElement[])value); return; } + case BuiltInType.NodeId: { WriteNodeIdArray("ListOfNodeId", (NodeId[])value); return; } + case BuiltInType.ExpandedNodeId: { WriteExpandedNodeIdArray("ListOfExpandedNodeId", (ExpandedNodeId[])value); return; } + case BuiltInType.StatusCode: { WriteStatusCodeArray("ListOfStatusCode", (StatusCode[])value); return; } + case BuiltInType.QualifiedName: { WriteQualifiedNameArray("ListOfQualifiedName", (QualifiedName[])value); return; } + case BuiltInType.LocalizedText: { WriteLocalizedTextArray("ListOfLocalizedText", (LocalizedText[])value); return; } + case BuiltInType.ExtensionObject: { WriteExtensionObjectArray("ListOfExtensionObject", (ExtensionObject[])value); return; } + case BuiltInType.DataValue: { WriteDataValueArray("ListOfDataValue", (DataValue[])value); return; } + + case BuiltInType.Enumeration: + { + int[] ints = value as int[]; + if (ints == null) + { + Enum[] enums = value as Enum[]; + if (enums == null) + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Type '{0}' is not allowed in an Enumeration.", value.GetType().FullName)); + } + ints = new int[enums.Length]; + for (int ii = 0; ii < enums.Length; ii++) + { + ints[ii] = (int)(object)enums[ii]; + } + } + + WriteInt32Array("ListOfInt32", ints); + return; + } + + case BuiltInType.Variant: + { + Variant[] variants = value as Variant[]; + + if (variants != null) + { + WriteVariantArray("ListOfVariant", variants); + return; + } + + object[] objects = value as object[]; + + if (objects != null) + { + WriteObjectArray("ListOfVariant", objects); + return; + } + + throw ServiceResultException.Create( + StatusCodes.BadEncodingError, + "Unexpected type encountered while encoding an array of Variants: {0}", + value.GetType()); + } + } + } + + // write matrix. + else if (typeInfo.ValueRank > 1) + { + WriteMatrix("Matrix", (Matrix)value); + return; + } + + // oops - should never happen. + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Type '{0}' is not allowed in an Variant.", value.GetType().FullName)); + } + finally + { + PopNamespace(); + } + } + + /// + /// Writes the body of an ExtensionObject to the stream. + /// + public void WriteExtensionObjectBody(object body) + { + // nothing to do for null bodies. + if (body == null) + { + return; + } + + // encode byte body. + byte[] bytes = body as byte[]; + + if (bytes != null) + { + m_writer.WriteStartElement("ByteString", Namespaces.OpcUaXsd); + m_writer.WriteString(Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks)); + m_writer.WriteEndElement(); + return; + } + + // encode xml body. + XmlElement xml = body as XmlElement; + + if (xml != null) + { + XmlReader reader = XmlReader.Create(new StringReader(xml.OuterXml)); + m_writer.WriteNode(reader, false); + reader.Dispose(); + return; + } + + IEncodeable encodeable = body as IEncodeable; + + if (encodeable == null) + { + throw new ServiceResultException( + StatusCodes.BadEncodingError, + Utils.Format("Don't know how to encode extension object body with type '{0}'.", body.GetType().FullName)); + } + + // encode extension object in xml. + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(encodeable.GetType()); + m_writer.WriteStartElement(xmlName.Name, xmlName.Namespace); + encodeable.Encode(this); + m_writer.WriteEndElement(); + } + #endregion + + #region Private Methods + /// + /// Writes an DataValue array to the stream. + /// + private void WriteMatrix(string fieldName, Matrix value) + { + // check the nesting level for avoiding a stack overflow. + if (m_nestingLevel > m_context.MaxEncodingNestingLevels) + { + throw ServiceResultException.Create( + StatusCodes.BadEncodingLimitsExceeded, + "Maximum nesting level of {0} was exceeded", + m_context.MaxEncodingNestingLevels); + } + + m_nestingLevel++; + + if (BeginField(fieldName, value == null, true, true)) + { + PushNamespace(Namespaces.OpcUaXsd); + + if (value != null) + { + m_writer.WriteStartElement("Elements", Namespaces.OpcUaXsd); + WriteVariantContents(value.Elements, new TypeInfo(value.TypeInfo.BuiltInType, ValueRanks.OneDimension)); + m_writer.WriteEndElement(); + + WriteInt32Array("Dimensions", value.Dimensions); + } + + PopNamespace(); + + EndField(fieldName); + } + + m_nestingLevel--; + } + + /// + /// Writes an Variant array to the stream. + /// + public void WriteObjectArray(string fieldName, IList values) + { + if (BeginField(fieldName, values == null, true, true)) + { + // check the length. + if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < values.Count) + { + throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded); + } + + PushNamespace(Namespaces.OpcUaXsd); + + if (values != null) + { + for (int ii = 0; ii < values.Count; ii++) + { + WriteVariant("Variant", new Variant(values[ii])); + } + } + + PopNamespace(); + + EndField(fieldName); + } + } + + /// + /// Writes the start element for a field. + /// + private bool BeginField(string fieldName, bool isDefault, bool isNillable, bool isArrayElement = false) + { + // specifying a null field name means the start/end tags should not be written. + if (!String.IsNullOrEmpty(fieldName)) + { + if (isNillable && isDefault && !isArrayElement) + { + return false; + } + + m_writer.WriteStartElement(fieldName, m_namespaces.Peek()); + + if (isDefault) + { + if (isNillable) + { + m_writer.WriteAttributeString("nil", Namespaces.XmlSchemaInstance, "true"); + } + + m_writer.WriteEndElement(); + return false; + } + } + + return !isDefault; + } + + /// + /// Writes the end element for a field. + /// + private void EndField(string fieldName) + { + if (!String.IsNullOrEmpty(fieldName)) + { + m_writer.WriteEndElement(); + } + } + #endregion + + #region Private Fields + private StringBuilder m_destination; + private XmlWriter m_writer; + private Stack m_namespaces; + private XmlQualifiedName m_root; + private ServiceMessageContext m_context; + private ushort[] m_namespaceMappings; + private ushort[] m_serverMappings; + private uint m_nestingLevel; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Generated/Opc.Ua.Attributes.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Generated/Opc.Ua.Attributes.cs new file mode 100644 index 00000000..ecf7377e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Generated/Opc.Ua.Attributes.cs @@ -0,0 +1,177 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; + +namespace Opc.Ua +{ + /// + /// A class that defines constants used by UA applications. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public static partial class Attributes + { + /// + /// The canonical identifier for the node. + /// + public const uint NodeId = 1; + + /// + /// The class of the node. + /// + public const uint NodeClass = 2; + + /// + /// A non-localized, human readable name for the node. + /// + public const uint BrowseName = 3; + + /// + /// A localized, human readable name for the node. + /// + public const uint DisplayName = 4; + + /// + /// A localized description for the node. + /// + public const uint Description = 5; + + /// + /// Indicates which attributes are writable. + /// + public const uint WriteMask = 6; + + /// + /// Indicates which attributes are writable by the current user. + /// + public const uint UserWriteMask = 7; + + /// + /// Indicates that a type node may not be instantiated. + /// + public const uint IsAbstract = 8; + + /// + /// Indicates that forward and inverse references have the same meaning. + /// + public const uint Symmetric = 9; + + /// + /// The browse name for an inverse reference. + /// + public const uint InverseName = 10; + + /// + /// Indicates that following forward references within a view will not cause a loop. + /// + public const uint ContainsNoLoops = 11; + + /// + /// Indicates that the node can be used to subscribe to events. + /// + public const uint EventNotifier = 12; + + /// + /// The value of a variable. + /// + public const uint Value = 13; + + /// + /// The node id of the data type for the variable value. + /// + public const uint DataType = 14; + + /// + /// The number of dimensions in the value. + /// + public const uint ValueRank = 15; + + /// + /// The length for each dimension of an array value. + /// + public const uint ArrayDimensions = 16; + + /// + /// How a variable may be accessed. + /// + public const uint AccessLevel = 17; + + /// + /// How a variable may be accessed after taking the user's access rights into account. + /// + public const uint UserAccessLevel = 18; + + /// + /// Specifies (in milliseconds) how fast the server can reasonably sample the value for changes. + /// + public const uint MinimumSamplingInterval = 19; + + /// + /// Specifies whether the server is actively collecting historical data for the variable. + /// + public const uint Historizing = 20; + + /// + /// Whether the method can be called. + /// + public const uint Executable = 21; + + /// + /// Whether the method can be called by the current user. + /// + public const uint UserExecutable = 22; + + /// + /// Provides the metadata and encoding information for custom DataTypes. + /// + public const uint DataTypeDefinition = 23; + + /// + /// The permissions for the node granted to roles. + /// + public const uint RolePermissions = 24; + + /// + /// The subset of permissions available for the roles available to the current session. + /// + public const uint UserRolePermissions = 25; + + /// + /// The access restrictions assigned to the node. + /// + public const uint AccessRestrictions = 26; + + /// + /// How a variable may be accessed. + /// + public const uint AccessLevelEx = 27; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Generated/Opc.Ua.StatusCodes.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Generated/Opc.Ua.StatusCodes.cs new file mode 100644 index 00000000..f4fb1128 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Generated/Opc.Ua.StatusCodes.cs @@ -0,0 +1,1262 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Reflection; + +namespace Opc.Ua +{ + /// + /// A class that defines constants used by UA applications. + /// + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] + public static partial class StatusCodes + { + /// + /// An unexpected error occurred. + /// + public const uint BadUnexpectedError = 0x80010000; + + /// + /// An internal error occurred as a result of a programming or configuration error. + /// + public const uint BadInternalError = 0x80020000; + + /// + /// Not enough memory to complete the operation. + /// + public const uint BadOutOfMemory = 0x80030000; + + /// + /// An operating system resource is not available. + /// + public const uint BadResourceUnavailable = 0x80040000; + + /// + /// A low level communication error occurred. + /// + public const uint BadCommunicationError = 0x80050000; + + /// + /// Encoding halted because of invalid data in the objects being serialized. + /// + public const uint BadEncodingError = 0x80060000; + + /// + /// Decoding halted because of invalid data in the stream. + /// + public const uint BadDecodingError = 0x80070000; + + /// + /// The message encoding/decoding limits imposed by the stack have been exceeded. + /// + public const uint BadEncodingLimitsExceeded = 0x80080000; + + /// + /// The request message size exceeds limits set by the server. + /// + public const uint BadRequestTooLarge = 0x80B80000; + + /// + /// The response message size exceeds limits set by the client. + /// + public const uint BadResponseTooLarge = 0x80B90000; + + /// + /// An unrecognized response was received from the server. + /// + public const uint BadUnknownResponse = 0x80090000; + + /// + /// The operation timed out. + /// + public const uint BadTimeout = 0x800A0000; + + /// + /// The server does not support the requested service. + /// + public const uint BadServiceUnsupported = 0x800B0000; + + /// + /// The operation was cancelled because the application is shutting down. + /// + public const uint BadShutdown = 0x800C0000; + + /// + /// The operation could not complete because the client is not connected to the server. + /// + public const uint BadServerNotConnected = 0x800D0000; + + /// + /// The server has stopped and cannot process any requests. + /// + public const uint BadServerHalted = 0x800E0000; + + /// + /// There was nothing to do because the client passed a list of operations with no elements. + /// + public const uint BadNothingToDo = 0x800F0000; + + /// + /// The request could not be processed because it specified too many operations. + /// + public const uint BadTooManyOperations = 0x80100000; + + /// + /// The request could not be processed because there are too many monitored items in the subscription. + /// + public const uint BadTooManyMonitoredItems = 0x80DB0000; + + /// + /// The extension object cannot be (de)serialized because the data type id is not recognized. + /// + public const uint BadDataTypeIdUnknown = 0x80110000; + + /// + /// The certificate provided as a parameter is not valid. + /// + public const uint BadCertificateInvalid = 0x80120000; + + /// + /// An error occurred verifying security. + /// + public const uint BadSecurityChecksFailed = 0x80130000; + + /// + /// The certificate does not meet the requirements of the security policy. + /// + public const uint BadCertificatePolicyCheckFailed = 0x81140000; + + /// + /// The certificate has expired or is not yet valid. + /// + public const uint BadCertificateTimeInvalid = 0x80140000; + + /// + /// An issuer certificate has expired or is not yet valid. + /// + public const uint BadCertificateIssuerTimeInvalid = 0x80150000; + + /// + /// The HostName used to connect to a server does not match a HostName in the certificate. + /// + public const uint BadCertificateHostNameInvalid = 0x80160000; + + /// + /// The URI specified in the ApplicationDescription does not match the URI in the certificate. + /// + public const uint BadCertificateUriInvalid = 0x80170000; + + /// + /// The certificate may not be used for the requested operation. + /// + public const uint BadCertificateUseNotAllowed = 0x80180000; + + /// + /// The issuer certificate may not be used for the requested operation. + /// + public const uint BadCertificateIssuerUseNotAllowed = 0x80190000; + + /// + /// The certificate is not trusted. + /// + public const uint BadCertificateUntrusted = 0x801A0000; + + /// + /// It was not possible to determine if the certificate has been revoked. + /// + public const uint BadCertificateRevocationUnknown = 0x801B0000; + + /// + /// It was not possible to determine if the issuer certificate has been revoked. + /// + public const uint BadCertificateIssuerRevocationUnknown = 0x801C0000; + + /// + /// The certificate has been revoked. + /// + public const uint BadCertificateRevoked = 0x801D0000; + + /// + /// The issuer certificate has been revoked. + /// + public const uint BadCertificateIssuerRevoked = 0x801E0000; + + /// + /// The certificate chain is incomplete. + /// + public const uint BadCertificateChainIncomplete = 0x810D0000; + + /// + /// User does not have permission to perform the requested operation. + /// + public const uint BadUserAccessDenied = 0x801F0000; + + /// + /// The user identity token is not valid. + /// + public const uint BadIdentityTokenInvalid = 0x80200000; + + /// + /// The user identity token is valid but the server has rejected it. + /// + public const uint BadIdentityTokenRejected = 0x80210000; + + /// + /// The specified secure channel is no longer valid. + /// + public const uint BadSecureChannelIdInvalid = 0x80220000; + + /// + /// The timestamp is outside the range allowed by the server. + /// + public const uint BadInvalidTimestamp = 0x80230000; + + /// + /// The nonce does appear to be not a random value or it is not the correct length. + /// + public const uint BadNonceInvalid = 0x80240000; + + /// + /// The session id is not valid. + /// + public const uint BadSessionIdInvalid = 0x80250000; + + /// + /// The session was closed by the client. + /// + public const uint BadSessionClosed = 0x80260000; + + /// + /// The session cannot be used because ActivateSession has not been called. + /// + public const uint BadSessionNotActivated = 0x80270000; + + /// + /// The subscription id is not valid. + /// + public const uint BadSubscriptionIdInvalid = 0x80280000; + + /// + /// The header for the request is missing or invalid. + /// + public const uint BadRequestHeaderInvalid = 0x802A0000; + + /// + /// The timestamps to return parameter is invalid. + /// + public const uint BadTimestampsToReturnInvalid = 0x802B0000; + + /// + /// The request was cancelled by the client. + /// + public const uint BadRequestCancelledByClient = 0x802C0000; + + /// + /// Too many arguments were provided. + /// + public const uint BadTooManyArguments = 0x80E50000; + + /// + /// The server requires a license to operate in general or to perform a service or operation, but existing license is expired. + /// + public const uint BadLicenseExpired = 0x810E0000; + + /// + /// The server has limits on number of allowed operations / objects, based on installed licenses, and these limits where exceeded. + /// + public const uint BadLicenseLimitsExceeded = 0x810F0000; + + /// + /// The server does not have a license which is required to operate in general or to perform a service or operation. + /// + public const uint BadLicenseNotAvailable = 0x81100000; + + /// + /// The subscription was transferred to another session. + /// + public const uint GoodSubscriptionTransferred = 0x002D0000; + + /// + /// The processing will complete asynchronously. + /// + public const uint GoodCompletesAsynchronously = 0x002E0000; + + /// + /// Sampling has slowed down due to resource limitations. + /// + public const uint GoodOverload = 0x002F0000; + + /// + /// The value written was accepted but was clamped. + /// + public const uint GoodClamped = 0x00300000; + + /// + /// Communication with the data source is defined, but not established, and there is no last known value available. + /// + public const uint BadNoCommunication = 0x80310000; + + /// + /// Waiting for the server to obtain values from the underlying data source. + /// + public const uint BadWaitingForInitialData = 0x80320000; + + /// + /// The syntax of the node id is not valid. + /// + public const uint BadNodeIdInvalid = 0x80330000; + + /// + /// The node id refers to a node that does not exist in the server address space. + /// + public const uint BadNodeIdUnknown = 0x80340000; + + /// + /// The attribute is not supported for the specified Node. + /// + public const uint BadAttributeIdInvalid = 0x80350000; + + /// + /// The syntax of the index range parameter is invalid. + /// + public const uint BadIndexRangeInvalid = 0x80360000; + + /// + /// No data exists within the range of indexes specified. + /// + public const uint BadIndexRangeNoData = 0x80370000; + + /// + /// The data encoding is invalid. + /// + public const uint BadDataEncodingInvalid = 0x80380000; + + /// + /// The server does not support the requested data encoding for the node. + /// + public const uint BadDataEncodingUnsupported = 0x80390000; + + /// + /// The access level does not allow reading or subscribing to the Node. + /// + public const uint BadNotReadable = 0x803A0000; + + /// + /// The access level does not allow writing to the Node. + /// + public const uint BadNotWritable = 0x803B0000; + + /// + /// The value was out of range. + /// + public const uint BadOutOfRange = 0x803C0000; + + /// + /// The requested operation is not supported. + /// + public const uint BadNotSupported = 0x803D0000; + + /// + /// A requested item was not found or a search operation ended without success. + /// + public const uint BadNotFound = 0x803E0000; + + /// + /// The object cannot be used because it has been deleted. + /// + public const uint BadObjectDeleted = 0x803F0000; + + /// + /// Requested operation is not implemented. + /// + public const uint BadNotImplemented = 0x80400000; + + /// + /// The monitoring mode is invalid. + /// + public const uint BadMonitoringModeInvalid = 0x80410000; + + /// + /// The monitoring item id does not refer to a valid monitored item. + /// + public const uint BadMonitoredItemIdInvalid = 0x80420000; + + /// + /// The monitored item filter parameter is not valid. + /// + public const uint BadMonitoredItemFilterInvalid = 0x80430000; + + /// + /// The server does not support the requested monitored item filter. + /// + public const uint BadMonitoredItemFilterUnsupported = 0x80440000; + + /// + /// A monitoring filter cannot be used in combination with the attribute specified. + /// + public const uint BadFilterNotAllowed = 0x80450000; + + /// + /// A mandatory structured parameter was missing or null. + /// + public const uint BadStructureMissing = 0x80460000; + + /// + /// The event filter is not valid. + /// + public const uint BadEventFilterInvalid = 0x80470000; + + /// + /// The content filter is not valid. + /// + public const uint BadContentFilterInvalid = 0x80480000; + + /// + /// An unrecognized operator was provided in a filter. + /// + public const uint BadFilterOperatorInvalid = 0x80C10000; + + /// + /// A valid operator was provided, but the server does not provide support for this filter operator. + /// + public const uint BadFilterOperatorUnsupported = 0x80C20000; + + /// + /// The number of operands provided for the filter operator was less then expected for the operand provided. + /// + public const uint BadFilterOperandCountMismatch = 0x80C30000; + + /// + /// The operand used in a content filter is not valid. + /// + public const uint BadFilterOperandInvalid = 0x80490000; + + /// + /// The referenced element is not a valid element in the content filter. + /// + public const uint BadFilterElementInvalid = 0x80C40000; + + /// + /// The referenced literal is not a valid value. + /// + public const uint BadFilterLiteralInvalid = 0x80C50000; + + /// + /// The continuation point provide is longer valid. + /// + public const uint BadContinuationPointInvalid = 0x804A0000; + + /// + /// The operation could not be processed because all continuation points have been allocated. + /// + public const uint BadNoContinuationPoints = 0x804B0000; + + /// + /// The reference type id does not refer to a valid reference type node. + /// + public const uint BadReferenceTypeIdInvalid = 0x804C0000; + + /// + /// The browse direction is not valid. + /// + public const uint BadBrowseDirectionInvalid = 0x804D0000; + + /// + /// The node is not part of the view. + /// + public const uint BadNodeNotInView = 0x804E0000; + + /// + /// The number was not accepted because of a numeric overflow. + /// + public const uint BadNumericOverflow = 0x81120000; + + /// + /// The ServerUri is not a valid URI. + /// + public const uint BadServerUriInvalid = 0x804F0000; + + /// + /// No ServerName was specified. + /// + public const uint BadServerNameMissing = 0x80500000; + + /// + /// No DiscoveryUrl was specified. + /// + public const uint BadDiscoveryUrlMissing = 0x80510000; + + /// + /// The semaphore file specified by the client is not valid. + /// + public const uint BadSempahoreFileMissing = 0x80520000; + + /// + /// The security token request type is not valid. + /// + public const uint BadRequestTypeInvalid = 0x80530000; + + /// + /// The security mode does not meet the requirements set by the server. + /// + public const uint BadSecurityModeRejected = 0x80540000; + + /// + /// The security policy does not meet the requirements set by the server. + /// + public const uint BadSecurityPolicyRejected = 0x80550000; + + /// + /// The server has reached its maximum number of sessions. + /// + public const uint BadTooManySessions = 0x80560000; + + /// + /// The user token signature is missing or invalid. + /// + public const uint BadUserSignatureInvalid = 0x80570000; + + /// + /// The signature generated with the client certificate is missing or invalid. + /// + public const uint BadApplicationSignatureInvalid = 0x80580000; + + /// + /// The client did not provide at least one software certificate that is valid and meets the profile requirements for the server. + /// + public const uint BadNoValidCertificates = 0x80590000; + + /// + /// The server does not support changing the user identity assigned to the session. + /// + public const uint BadIdentityChangeNotSupported = 0x80C60000; + + /// + /// The request was cancelled by the client with the Cancel service. + /// + public const uint BadRequestCancelledByRequest = 0x805A0000; + + /// + /// The parent node id does not to refer to a valid node. + /// + public const uint BadParentNodeIdInvalid = 0x805B0000; + + /// + /// The reference could not be created because it violates constraints imposed by the data model. + /// + public const uint BadReferenceNotAllowed = 0x805C0000; + + /// + /// The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client. + /// + public const uint BadNodeIdRejected = 0x805D0000; + + /// + /// The requested node id is already used by another node. + /// + public const uint BadNodeIdExists = 0x805E0000; + + /// + /// The node class is not valid. + /// + public const uint BadNodeClassInvalid = 0x805F0000; + + /// + /// The browse name is invalid. + /// + public const uint BadBrowseNameInvalid = 0x80600000; + + /// + /// The browse name is not unique among nodes that share the same relationship with the parent. + /// + public const uint BadBrowseNameDuplicated = 0x80610000; + + /// + /// The node attributes are not valid for the node class. + /// + public const uint BadNodeAttributesInvalid = 0x80620000; + + /// + /// The type definition node id does not reference an appropriate type node. + /// + public const uint BadTypeDefinitionInvalid = 0x80630000; + + /// + /// The source node id does not reference a valid node. + /// + public const uint BadSourceNodeIdInvalid = 0x80640000; + + /// + /// The target node id does not reference a valid node. + /// + public const uint BadTargetNodeIdInvalid = 0x80650000; + + /// + /// The reference type between the nodes is already defined. + /// + public const uint BadDuplicateReferenceNotAllowed = 0x80660000; + + /// + /// The server does not allow this type of self reference on this node. + /// + public const uint BadInvalidSelfReference = 0x80670000; + + /// + /// The reference type is not valid for a reference to a remote server. + /// + public const uint BadReferenceLocalOnly = 0x80680000; + + /// + /// The server will not allow the node to be deleted. + /// + public const uint BadNoDeleteRights = 0x80690000; + + /// + /// The server was not able to delete all target references. + /// + public const uint UncertainReferenceNotDeleted = 0x40BC0000; + + /// + /// The server index is not valid. + /// + public const uint BadServerIndexInvalid = 0x806A0000; + + /// + /// The view id does not refer to a valid view node. + /// + public const uint BadViewIdUnknown = 0x806B0000; + + /// + /// The view timestamp is not available or not supported. + /// + public const uint BadViewTimestampInvalid = 0x80C90000; + + /// + /// The view parameters are not consistent with each other. + /// + public const uint BadViewParameterMismatch = 0x80CA0000; + + /// + /// The view version is not available or not supported. + /// + public const uint BadViewVersionInvalid = 0x80CB0000; + + /// + /// The list of references may not be complete because the underlying system is not available. + /// + public const uint UncertainNotAllNodesAvailable = 0x40C00000; + + /// + /// The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete. + /// + public const uint GoodResultsMayBeIncomplete = 0x00BA0000; + + /// + /// The provided Nodeid was not a type definition nodeid. + /// + public const uint BadNotTypeDefinition = 0x80C80000; + + /// + /// One of the references to follow in the relative path references to a node in the address space in another server. + /// + public const uint UncertainReferenceOutOfServer = 0x406C0000; + + /// + /// The requested operation has too many matches to return. + /// + public const uint BadTooManyMatches = 0x806D0000; + + /// + /// The requested operation requires too many resources in the server. + /// + public const uint BadQueryTooComplex = 0x806E0000; + + /// + /// The requested operation has no match to return. + /// + public const uint BadNoMatch = 0x806F0000; + + /// + /// The max age parameter is invalid. + /// + public const uint BadMaxAgeInvalid = 0x80700000; + + /// + /// The operation is not permitted over the current secure channel. + /// + public const uint BadSecurityModeInsufficient = 0x80E60000; + + /// + /// The history details parameter is not valid. + /// + public const uint BadHistoryOperationInvalid = 0x80710000; + + /// + /// The server does not support the requested operation. + /// + public const uint BadHistoryOperationUnsupported = 0x80720000; + + /// + /// The defined timestamp to return was invalid. + /// + public const uint BadInvalidTimestampArgument = 0x80BD0000; + + /// + /// The server does not support writing the combination of value, status and timestamps provided. + /// + public const uint BadWriteNotSupported = 0x80730000; + + /// + /// The value supplied for the attribute is not of the same type as the attribute's value. + /// + public const uint BadTypeMismatch = 0x80740000; + + /// + /// The method id does not refer to a method for the specified object. + /// + public const uint BadMethodInvalid = 0x80750000; + + /// + /// The client did not specify all of the input arguments for the method. + /// + public const uint BadArgumentsMissing = 0x80760000; + + /// + /// The executable attribute does not allow the execution of the method. + /// + public const uint BadNotExecutable = 0x81110000; + + /// + /// The server has reached its maximum number of subscriptions. + /// + public const uint BadTooManySubscriptions = 0x80770000; + + /// + /// The server has reached the maximum number of queued publish requests. + /// + public const uint BadTooManyPublishRequests = 0x80780000; + + /// + /// There is no subscription available for this session. + /// + public const uint BadNoSubscription = 0x80790000; + + /// + /// The sequence number is unknown to the server. + /// + public const uint BadSequenceNumberUnknown = 0x807A0000; + + /// + /// The requested notification message is no longer available. + /// + public const uint BadMessageNotAvailable = 0x807B0000; + + /// + /// The client of the current session does not support one or more Profiles that are necessary for the subscription. + /// + public const uint BadInsufficientClientProfile = 0x807C0000; + + /// + /// The sub-state machine is not currently active. + /// + public const uint BadStateNotActive = 0x80BF0000; + + /// + /// An equivalent rule already exists. + /// + public const uint BadAlreadyExists = 0x81150000; + + /// + /// The server cannot process the request because it is too busy. + /// + public const uint BadTcpServerTooBusy = 0x807D0000; + + /// + /// The type of the message specified in the header invalid. + /// + public const uint BadTcpMessageTypeInvalid = 0x807E0000; + + /// + /// The SecureChannelId and/or TokenId are not currently in use. + /// + public const uint BadTcpSecureChannelUnknown = 0x807F0000; + + /// + /// The size of the message chunk specified in the header is too large. + /// + public const uint BadTcpMessageTooLarge = 0x80800000; + + /// + /// There are not enough resources to process the request. + /// + public const uint BadTcpNotEnoughResources = 0x80810000; + + /// + /// An internal error occurred. + /// + public const uint BadTcpInternalError = 0x80820000; + + /// + /// The server does not recognize the QueryString specified. + /// + public const uint BadTcpEndpointUrlInvalid = 0x80830000; + + /// + /// The request could not be sent because of a network interruption. + /// + public const uint BadRequestInterrupted = 0x80840000; + + /// + /// Timeout occurred while processing the request. + /// + public const uint BadRequestTimeout = 0x80850000; + + /// + /// The secure channel has been closed. + /// + public const uint BadSecureChannelClosed = 0x80860000; + + /// + /// The token has expired or is not recognized. + /// + public const uint BadSecureChannelTokenUnknown = 0x80870000; + + /// + /// The sequence number is not valid. + /// + public const uint BadSequenceNumberInvalid = 0x80880000; + + /// + /// The applications do not have compatible protocol versions. + /// + public const uint BadProtocolVersionUnsupported = 0x80BE0000; + + /// + /// There is a problem with the configuration that affects the usefulness of the value. + /// + public const uint BadConfigurationError = 0x80890000; + + /// + /// The variable should receive its value from another variable, but has never been configured to do so. + /// + public const uint BadNotConnected = 0x808A0000; + + /// + /// There has been a failure in the device/data source that generates the value that has affected the value. + /// + public const uint BadDeviceFailure = 0x808B0000; + + /// + /// There has been a failure in the sensor from which the value is derived by the device/data source. + /// + public const uint BadSensorFailure = 0x808C0000; + + /// + /// The source of the data is not operational. + /// + public const uint BadOutOfService = 0x808D0000; + + /// + /// The deadband filter is not valid. + /// + public const uint BadDeadbandFilterInvalid = 0x808E0000; + + /// + /// Communication to the data source has failed. The variable value is the last value that had a good quality. + /// + public const uint UncertainNoCommunicationLastUsableValue = 0x408F0000; + + /// + /// Whatever was updating this value has stopped doing so. + /// + public const uint UncertainLastUsableValue = 0x40900000; + + /// + /// The value is an operational value that was manually overwritten. + /// + public const uint UncertainSubstituteValue = 0x40910000; + + /// + /// The value is an initial value for a variable that normally receives its value from another variable. + /// + public const uint UncertainInitialValue = 0x40920000; + + /// + /// The value is at one of the sensor limits. + /// + public const uint UncertainSensorNotAccurate = 0x40930000; + + /// + /// The value is outside of the range of values defined for this parameter. + /// + public const uint UncertainEngineeringUnitsExceeded = 0x40940000; + + /// + /// The value is derived from multiple sources and has less than the required number of Good sources. + /// + public const uint UncertainSubNormal = 0x40950000; + + /// + /// The value has been overridden. + /// + public const uint GoodLocalOverride = 0x00960000; + + /// + /// This Condition refresh failed, a Condition refresh operation is already in progress. + /// + public const uint BadRefreshInProgress = 0x80970000; + + /// + /// This condition has already been disabled. + /// + public const uint BadConditionAlreadyDisabled = 0x80980000; + + /// + /// This condition has already been enabled. + /// + public const uint BadConditionAlreadyEnabled = 0x80CC0000; + + /// + /// Property not available, this condition is disabled. + /// + public const uint BadConditionDisabled = 0x80990000; + + /// + /// The specified event id is not recognized. + /// + public const uint BadEventIdUnknown = 0x809A0000; + + /// + /// The event cannot be acknowledged. + /// + public const uint BadEventNotAcknowledgeable = 0x80BB0000; + + /// + /// The dialog condition is not active. + /// + public const uint BadDialogNotActive = 0x80CD0000; + + /// + /// The response is not valid for the dialog. + /// + public const uint BadDialogResponseInvalid = 0x80CE0000; + + /// + /// The condition branch has already been acknowledged. + /// + public const uint BadConditionBranchAlreadyAcked = 0x80CF0000; + + /// + /// The condition branch has already been confirmed. + /// + public const uint BadConditionBranchAlreadyConfirmed = 0x80D00000; + + /// + /// The condition has already been shelved. + /// + public const uint BadConditionAlreadyShelved = 0x80D10000; + + /// + /// The condition is not currently shelved. + /// + public const uint BadConditionNotShelved = 0x80D20000; + + /// + /// The shelving time not within an acceptable range. + /// + public const uint BadShelvingTimeOutOfRange = 0x80D30000; + + /// + /// No data exists for the requested time range or event filter. + /// + public const uint BadNoData = 0x809B0000; + + /// + /// No data found to provide upper or lower bound value. + /// + public const uint BadBoundNotFound = 0x80D70000; + + /// + /// The server cannot retrieve a bound for the variable. + /// + public const uint BadBoundNotSupported = 0x80D80000; + + /// + /// Data is missing due to collection started/stopped/lost. + /// + public const uint BadDataLost = 0x809D0000; + + /// + /// Expected data is unavailable for the requested time range due to an un-mounted volume, an off-line archive or tape, or similar reason for temporary unavailability. + /// + public const uint BadDataUnavailable = 0x809E0000; + + /// + /// The data or event was not successfully inserted because a matching entry exists. + /// + public const uint BadEntryExists = 0x809F0000; + + /// + /// The data or event was not successfully updated because no matching entry exists. + /// + public const uint BadNoEntryExists = 0x80A00000; + + /// + /// The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp). + /// + public const uint BadTimestampNotSupported = 0x80A10000; + + /// + /// The data or event was successfully inserted into the historical database. + /// + public const uint GoodEntryInserted = 0x00A20000; + + /// + /// The data or event field was successfully replaced in the historical database. + /// + public const uint GoodEntryReplaced = 0x00A30000; + + /// + /// The value is derived from multiple values and has less than the required number of Good values. + /// + public const uint UncertainDataSubNormal = 0x40A40000; + + /// + /// No data exists for the requested time range or event filter. + /// + public const uint GoodNoData = 0x00A50000; + + /// + /// The data or event field was successfully replaced in the historical database. + /// + public const uint GoodMoreData = 0x00A60000; + + /// + /// The requested number of Aggregates does not match the requested number of NodeIds. + /// + public const uint BadAggregateListMismatch = 0x80D40000; + + /// + /// The requested Aggregate is not support by the server. + /// + public const uint BadAggregateNotSupported = 0x80D50000; + + /// + /// The aggregate value could not be derived due to invalid data inputs. + /// + public const uint BadAggregateInvalidInputs = 0x80D60000; + + /// + /// The aggregate configuration is not valid for specified node. + /// + public const uint BadAggregateConfigurationRejected = 0x80DA0000; + + /// + /// The request specifies fields which are not valid for the EventType or cannot be saved by the historian. + /// + public const uint GoodDataIgnored = 0x00D90000; + + /// + /// The request was rejected by the server because it did not meet the criteria set by the server. + /// + public const uint BadRequestNotAllowed = 0x80E40000; + + /// + /// The request has not been processed by the server yet. + /// + public const uint BadRequestNotComplete = 0x81130000; + + /// + /// The value does not come from the real source and has been edited by the server. + /// + public const uint GoodEdited = 0x00DC0000; + + /// + /// There was an error in execution of these post-actions. + /// + public const uint GoodPostActionFailed = 0x00DD0000; + + /// + /// The related EngineeringUnit has been changed but the Variable Value is still provided based on the previous unit. + /// + public const uint UncertainDominantValueChanged = 0x40DE0000; + + /// + /// A dependent value has been changed but the change has not been applied to the device. + /// + public const uint GoodDependentValueChanged = 0x00E00000; + + /// + /// The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad. + /// + public const uint BadDominantValueChanged = 0x80E10000; + + /// + /// A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain. + /// + public const uint UncertainDependentValueChanged = 0x40E20000; + + /// + /// A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad. + /// + public const uint BadDependentValueChanged = 0x80E30000; + + /// + /// It is delivered with a dominant Variable value when a dependent Variable has changed but the change has not been applied. + /// + public const uint GoodEdited_DependentValueChanged = 0x01160000; + + /// + /// It is delivered with a dependent Variable value when a dominant Variable has changed but the change has not been applied. + /// + public const uint GoodEdited_DominantValueChanged = 0x01170000; + + /// + /// It is delivered with a dependent Variable value when a dominant or dependent Variable has changed but change has not been applied. + /// + public const uint GoodEdited_DominantValueChanged_DependentValueChanged = 0x01180000; + + /// + /// It is delivered with a Variable value when Variable has changed but the value is not legal. + /// + public const uint BadEdited_OutOfRange = 0x81190000; + + /// + /// It is delivered with a Variable value when a source Variable has changed but the value is not legal. + /// + public const uint BadInitialValue_OutOfRange = 0x811A0000; + + /// + /// It is delivered with a dependent Variable value when a dominant Variable has changed and the value is not legal. + /// + public const uint BadOutOfRange_DominantValueChanged = 0x811B0000; + + /// + /// It is delivered with a dependent Variable value when a dominant Variable has changed, the value is not legal and the change has not been applied. + /// + public const uint BadEdited_OutOfRange_DominantValueChanged = 0x811C0000; + + /// + /// It is delivered with a dependent Variable value when a dominant or dependent Variable has changed and the value is not legal. + /// + public const uint BadOutOfRange_DominantValueChanged_DependentValueChanged = 0x811D0000; + + /// + /// It is delivered with a dependent Variable value when a dominant or dependent Variable has changed, the value is not legal and the change has not been applied. + /// + public const uint BadEdited_OutOfRange_DominantValueChanged_DependentValueChanged = 0x811E0000; + + /// + /// The communication layer has raised an event. + /// + public const uint GoodCommunicationEvent = 0x00A70000; + + /// + /// The system is shutting down. + /// + public const uint GoodShutdownEvent = 0x00A80000; + + /// + /// The operation is not finished and needs to be called again. + /// + public const uint GoodCallAgain = 0x00A90000; + + /// + /// A non-critical timeout occurred. + /// + public const uint GoodNonCriticalTimeout = 0x00AA0000; + + /// + /// One or more arguments are invalid. + /// + public const uint BadInvalidArgument = 0x80AB0000; + + /// + /// Could not establish a network connection to remote server. + /// + public const uint BadConnectionRejected = 0x80AC0000; + + /// + /// The server has disconnected from the client. + /// + public const uint BadDisconnect = 0x80AD0000; + + /// + /// The network connection has been closed. + /// + public const uint BadConnectionClosed = 0x80AE0000; + + /// + /// The operation cannot be completed because the object is closed, uninitialized or in some other invalid state. + /// + public const uint BadInvalidState = 0x80AF0000; + + /// + /// Cannot move beyond end of the stream. + /// + public const uint BadEndOfStream = 0x80B00000; + + /// + /// No data is currently available for reading from a non-blocking stream. + /// + public const uint BadNoDataAvailable = 0x80B10000; + + /// + /// The asynchronous operation is waiting for a response. + /// + public const uint BadWaitingForResponse = 0x80B20000; + + /// + /// The asynchronous operation was abandoned by the caller. + /// + public const uint BadOperationAbandoned = 0x80B30000; + + /// + /// The stream did not return all data requested (possibly because it is a non-blocking stream). + /// + public const uint BadExpectedStreamToBlock = 0x80B40000; + + /// + /// Non blocking behaviour is required and the operation would block. + /// + public const uint BadWouldBlock = 0x80B50000; + + /// + /// A value had an invalid syntax. + /// + public const uint BadSyntaxError = 0x80B60000; + + /// + /// The operation could not be finished because all available connections are in use. + /// + public const uint BadMaxConnectionsReached = 0x80B70000; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BinarySchema.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BinarySchema.cs new file mode 100644 index 00000000..0df8fd67 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BinarySchema.cs @@ -0,0 +1,35 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Xml; +using System.Xml.Serialization; + +namespace Opc.Ua.Schema.Binary +{ + /// + /// A description of type, + /// + public partial class TypeDescription + { + /// + /// The qualifed name for the type. + /// + [XmlIgnore()] + public XmlQualifiedName QName + { + get { return m_qname; } + set { m_qname = value; } + } + + private XmlQualifiedName m_qname; + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BinarySchemaValidator.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BinarySchemaValidator.cs new file mode 100644 index 00000000..3204dc61 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BinarySchemaValidator.cs @@ -0,0 +1,530 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; + +namespace Opc.Ua.Schema.Binary +{ + /// + /// Generates files used to describe data types. + /// + public class BinarySchemaValidator : SchemaValidator + { + #region Constructors + /// + /// Intializes the object with default values. + /// + public BinarySchemaValidator() + { + SetResourcePaths(WellKnownDictionaries); + } + + /// + /// Intializes the object with a file table. + /// + public BinarySchemaValidator(Dictionary fileTable) : base(fileTable) + { + SetResourcePaths(WellKnownDictionaries); + } + #endregion + + #region Public Members + /// + /// The dictionary that was validated. + /// + public TypeDictionary Dictionary { get; private set; } + + /// + /// The types defined in the dictionary. + /// + public IList ValidatedDescriptions => m_validatedDescriptions; + + /// + /// Any warnings during validation. + /// + public ICollection Warnings => m_warnings; + + /// + /// Generates the code from the contents of the address space. + /// + public async Task Validate(Stream stream) + { + // read and parse the file. + Dictionary = (TypeDictionary)LoadInput(typeof(TypeDictionary), stream); + await Validate(); + } + + /// + /// Generates the code from the contents of the address space. + /// + public async Task Validate(string inputPath) + { + // read and parse the file. + Dictionary = (TypeDictionary)LoadInput(typeof(TypeDictionary), inputPath); + await Validate(); + } + + /// + /// Returns the schema for the specified type (returns the entire schema if null). + /// + public override string GetSchema(string typeName) + { + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Encoding = Encoding.UTF8; + settings.Indent = true; + settings.IndentChars = " "; + + MemoryStream ostrm = new MemoryStream(); + XmlWriter writer = XmlWriter.Create(ostrm, settings); + + try + { + if (typeName == null) + { + XmlSerializer serializer = new XmlSerializer(typeof(TypeDictionary)); + serializer.Serialize(writer, Dictionary); + } + else + { + TypeDescription description = null; + + if (!m_descriptions.TryGetValue(new XmlQualifiedName(typeName, Dictionary.TargetNamespace), out description)) + { + XmlSerializer serializer = new XmlSerializer(typeof(TypeDictionary)); + serializer.Serialize(writer, Dictionary); + } + else + { + XmlSerializer serializer = new XmlSerializer(typeof(TypeDescription)); + serializer.Serialize(writer, description); + } + } + } + finally + { + writer.Flush(); + writer.Dispose(); + } + + return new UTF8Encoding().GetString(ostrm.ToArray(), 0, (int)ostrm.Length); + } + #endregion + + #region Private Methods + /// + /// Generates the code from the contents of the address space. + /// + private async Task Validate() + { + m_descriptions = new Dictionary(); + m_validatedDescriptions = new List(); + m_warnings = new List(); + + // import types from referenced dictionaries. + if (Dictionary.Import != null) + { + foreach (ImportDirective directive in Dictionary.Import) + { + await Import(directive); + } + } + else + { + // always import builtin types, unless wellknown library + if (!WellKnownDictionaries.Any(n => String.Equals(n[0], Dictionary.TargetNamespace))) + { + ImportDirective directive = new ImportDirective { Namespace = Namespaces.OpcUa }; + await Import(directive); + } + } + + // import types from imported dictionaries. + foreach (TypeDescription description in m_descriptions.Values) + { + ValidateDescription(description); + } + + // import types from target dictionary. + if (Dictionary.Items != null) + { + foreach (TypeDescription description in Dictionary.Items) + { + ImportDescription(description, Dictionary.TargetNamespace); + m_validatedDescriptions.Add(description); + } + + // validate types from target dictionary. + foreach (TypeDescription description in m_validatedDescriptions) + { + ValidateDescription(description); + m_warnings.Add(String.Format(CultureInfo.InvariantCulture, "{0} '{1}' validated.", description.GetType().Name, description.Name)); + } + } + } + + /// + /// Imports a dictionary identified by an import directive. + /// + private async Task Import(ImportDirective directive) + { + // check if already loaded. + if (LoadedFiles.ContainsKey(directive.Namespace)) + { + return; + } + + TypeDictionary dictionary = (TypeDictionary)Load(typeof(TypeDictionary), directive.Namespace, directive.Location); + + // verify namespace. + if (!String.IsNullOrEmpty(dictionary.TargetNamespace) && directive.Namespace != dictionary.TargetNamespace) + { + throw Exception("Imported dictionary '{0}' does not match uri specified: '{1}'.", dictionary.TargetNamespace, directive.Namespace); + } + + // save file. + LoadedFiles.Add(dictionary.TargetNamespace, dictionary); + + // import nested dictionaries. + if (dictionary.Import != null) + { + for (int ii = 0; ii < dictionary.Import.Length; ii++) + { + await Import(dictionary.Import[ii]); + } + } + + // import types. + if (dictionary.Items != null) + { + foreach (TypeDescription description in dictionary.Items) + { + ImportDescription(description, dictionary.TargetNamespace); + } + } + } + + /// + /// Returns true if the documentation element is empty. + /// + private static bool IsNull(Documentation documentation) + { + if (documentation == null) + { + return true; + } + + if (documentation.Text != null && documentation.Text.Length > 0) + { + for (int ii = 0; ii < documentation.Text.Length; ii++) + { + if (!String.IsNullOrEmpty(documentation.Text[ii])) + { + return false; + } + } + } + + if (documentation.Items != null && documentation.Items.Length > 0) + { + return false; + } + + return true; + } + + /// + /// Returns true if field is an integer type. + /// + private bool IsIntegerType(FieldType field) + { + TypeDescription description = null; + + if (!m_descriptions.TryGetValue(field.TypeName, out description)) + { + return false; + } + + if (description is EnumeratedType) + { + return true; + } + + OpaqueType opaqueType = description as OpaqueType; + + if (opaqueType != null) + { + if (opaqueType.LengthInBitsSpecified) + { + return true; + } + } + + return false; + } + + /// + /// Returns the length of field in bits (-1 if the length is not fixed). + /// + private int GetFieldLength(FieldType field) + { + TypeDescription description = null; + + if (!m_descriptions.TryGetValue(field.TypeName, out description)) + { + return -1; + } + + uint count = 1; + + if (field.LengthSpecified) + { + count = field.Length; + + if (field.IsLengthInBytes) + { + count *= 8; + } + } + + EnumeratedType enumerated = description as EnumeratedType; + + if (enumerated != null) + { + if (enumerated.LengthInBitsSpecified) + { + return enumerated.LengthInBits * ((int)count); + } + } + else + { + OpaqueType opaque = description as OpaqueType; + + if (opaque != null) + { + if (opaque.LengthInBitsSpecified) + { + return opaque.LengthInBits * ((int)count); + } + } + } + + return -1; + } + + /// + /// Checks if a string is a valid part of a qname. + /// + private static bool IsValidName(string name) + { + if (String.IsNullOrEmpty(name)) + { + return false; + } + + if (!Char.IsLetter(name[0]) && name[0] != '_' && name[0] != '"') + { + return false; + } + + for (int ii = 1; ii < name.Length; ii++) + { + if (Char.IsLetter(name[ii]) || Char.IsDigit(name[ii])) + { + continue; + } + + if (name[ii] == '.' || name[ii] == '-' || name[ii] == '_' || name[ii] == '"') + { + continue; + } + + return false; + } + + return true; + } + + /// + /// Imports a type description. + /// + private void ImportDescription(TypeDescription description, string targetNamespace) + { + if (description == null) + { + return; + } + + if (!IsValidName(description.Name)) + { + throw Exception("'{0}' is not a valid qualified name.", description.Name); + } + + description.QName = new XmlQualifiedName(description.Name, targetNamespace); + + if (m_descriptions.ContainsKey(description.QName)) + { + throw Exception("The description name '{0}' already used by another description.", description.Name); + } + + m_descriptions.Add(description.QName, description); + } + + /// + /// Validates a type description. + /// + private void ValidateDescription(TypeDescription description) + { + OpaqueType opaque = description as OpaqueType; + + if (opaque != null) + { + if (!opaque.LengthInBitsSpecified) + { + m_warnings.Add(String.Format(CultureInfo.InvariantCulture, "Warning: The opaque type '{0}' does not have a length specified.", description.Name)); + } + + if (IsNull(opaque.Documentation)) + { + m_warnings.Add(String.Format(CultureInfo.InvariantCulture, "Warning: The opaque type '{0}' does not have any documentation.", description.Name)); + } + } + + EnumeratedType enumerated = description as EnumeratedType; + + if (enumerated != null) + { + + if (!enumerated.LengthInBitsSpecified) + { + throw Exception("The enumerated type '{0}' does not have a length specified.", description.Name); + } + } + + StructuredType structure = description as StructuredType; + + if (structure != null) + { + if (structure.Field == null || structure.Field.Length == 0) + { + structure.Field = new FieldType[0]; + } + + int bitCount = 0; + + Dictionary fields = new Dictionary(); + + for (int ii = 0; ii < structure.Field.Length; ii++) + { + FieldType field = structure.Field[ii]; + + ValidateField(structure, fields, field); + + int fieldLength = GetFieldLength(field); + + if (fieldLength == -1) + { + if (bitCount % 8 != 0) + { + throw Exception("Field '{1}' in structured type '{0}' is not aligned on a byte boundary .", description.Name, field.Name); + } + + bitCount = 0; + } + else + { + bitCount += fieldLength; + } + + fields.Add(field.Name, field); + } + } + } + + /// + /// Validates a field in a structured type description. + /// + private void ValidateField(StructuredType description, Dictionary fields, FieldType field) + { + if (field == null || String.IsNullOrEmpty(field.Name)) + { + throw Exception("The structured type '{0}' has an unnamed field.", description.Name); + } + + if (fields.ContainsKey(field.Name)) + { + throw Exception("The structured type '{0}' has a duplicate field name '{1}'.", description.Name, field.Name); + } + + if (IsNull(field.TypeName)) + { + throw Exception("Field '{1}' in structured type '{0}' has no type specified.", description.Name, field.Name); + } + + if (!m_descriptions.ContainsKey(field.TypeName)) + { + throw Exception("Field '{1}' in structured type '{0}' has an unrecognized type '{2}'.", description.Name, field.Name, field.TypeName); + } + + if (!String.IsNullOrEmpty(field.LengthField)) + { + if (!fields.ContainsKey(field.LengthField)) + { + throw Exception("Field '{1}' in structured type '{0}' references an unknownn length field '{2}'.", description.Name, field.Name, field.LengthField); + } + + if (!IsIntegerType(fields[field.LengthField])) + { + throw Exception("Field '{1}' in structured type '{0}' references a length field '{2}' which is not an integer value.", description.Name, field.Name, field.SwitchField); + } + } + + if (!String.IsNullOrEmpty(field.SwitchField)) + { + if (!fields.ContainsKey(field.SwitchField)) + { + throw Exception("Field '{1}' in structured type '{0}' references an unknownn switch field '{2}'.", description.Name, field.Name, field.SwitchField); + } + + if (!IsIntegerType(fields[field.SwitchField])) + { + throw Exception("Field '{1}' in structured type '{0}' references a switch field '{2}' which is not an integer value.", description.Name, field.Name, field.SwitchField); + } + } + } + #endregion + + #region Private Fields + /// + /// Well known embedded binary schemas. + /// + protected readonly static string[][] WellKnownDictionaries = new string[][] + { + new string[] { Namespaces.OpcBinarySchema, "Opc.Ua.Types.Schemas.StandardTypes.bsd" }, + new string[] { Namespaces.OpcUaBuiltInTypes, "Opc.Ua.Types.Schemas.BuiltInTypes.bsd" }, + new string[] { Namespaces.OpcUa, "Opc.Ua.Schema.Opc.Ua.Types.bsd" } + }; + + private Dictionary m_descriptions; + private List m_validatedDescriptions; + private List m_warnings; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BuiltInTypes.bsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BuiltInTypes.bsd new file mode 100644 index 00000000..4a634508 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BuiltInTypes.bsd @@ -0,0 +1,221 @@ + + + + + This dictionary defines the standard types used by the OPC Binary type description system. + + + + An XML element encoded as a UTF-8 string. + + + + + + The possible encodings for a NodeId value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An identifier for a node in a UA server address space. + + + + + + + + + + + + An identifier for a node in a UA server address space qualified with a complete namespace string. + + + + + + + + + + + + + + + A 32-bit status code value. + + + + A recursive structure containing diagnostic information associated with a status code. + + + + + + + + + + + + + + + + + + + A string qualified with a namespace index. + + + + + + A string qualified with a namespace index. + + + + + + + + + A value with an associated timestamp, and quality. + + + + + + + + + + + + + + + + + A serialized object prefixed with its data type identifier. + + + + + + + + + + + A union of several types. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BuiltInTypes.xml b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BuiltInTypes.xml new file mode 100644 index 00000000..3e1100d3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/BuiltInTypes.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/OPCBinarySchema.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/OPCBinarySchema.cs new file mode 100644 index 00000000..65043e9f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/OPCBinarySchema.cs @@ -0,0 +1,649 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System.Runtime.Serialization; +using System.Xml; + +namespace Opc.Ua.Schema.Binary +{ + /// + /// The binary schema documentation. + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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 XmlElement[] itemsField; + + private string[] textField; + + private string[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute()] + public 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; + } + } + + /// + public string[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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 string[] 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; + } + } + + /// + public string[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/BinarySchema/")] + public enum SwitchOperand { + + /// + Equals, + + /// + GreaterThan, + + /// + LessThan, + + /// + GreaterThanOrEqual, + + /// + LessThanOrEqual, + + /// + NotEqual, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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; + + /// + 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.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/BinarySchema/")] + public enum ByteOrder { + + /// + BigEndian, + + /// + LittleEndian, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/BinarySchema/")] + public partial class StructuredType : TypeDescription { + + private FieldType[] fieldField; + + private string[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Field")] + public FieldType[] Field { + get { + return this.fieldField; + } + set { + this.fieldField = value; + } + } + + /// + public string[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + } + } + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumeratedType))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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", "2.0.50727.312")] + [DataContractAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [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; + + /// + 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; + } + } + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/OPCBinarySchema.xsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/OPCBinarySchema.xsd new file mode 100644 index 00000000..77088d0f --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/OPCBinarySchema.xsd @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/SchemaValidator.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/SchemaValidator.cs new file mode 100644 index 00000000..d833cecd --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/SchemaValidator.cs @@ -0,0 +1,313 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Xml; +using System.Xml.Serialization; + +namespace Opc.Ua.Schema +{ + /// + /// A base class for schema validators. + /// + public class SchemaValidator + { + #region Constructors + /// + /// Intializes the object with default values. + /// + public SchemaValidator() + { + m_knownFiles = new Dictionary(); + m_loadedFiles = new Dictionary(); + } + + /// + /// Intializes the object with a file table. + /// + public SchemaValidator(Dictionary knownFiles) + { + m_knownFiles = knownFiles; + m_loadedFiles = new Dictionary(); + + if (m_knownFiles == null) + { + m_knownFiles = new Dictionary(); + } + } + #endregion + + #region Public Properties + /// + /// The file that was validated. + /// + public string FilePath { get; private set; } + + /// + /// A table of known files. + /// + public IDictionary KnownFiles => m_knownFiles; + + /// + /// A table of files which have been loaded. + /// + public IDictionary LoadedFiles => m_loadedFiles; + #endregion + + #region Protected Methods + /// + /// Returns true if the QName is null, + /// + protected static bool IsNull(XmlQualifiedName name) + { + if (name != null && !String.IsNullOrEmpty(name.Name)) + { + return false; + } + + return true; + } + + /// + /// Formats a string and throws an exception. + /// + protected static Exception Exception(string format) + { + throw new FormatException(format); + } + + /// + /// Formats a string and throws an exception. + /// + protected static Exception Exception(string format, object arg1) + { + return new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, format, arg1)); + } + + /// + /// Formats a string and throws an exception. + /// + protected static Exception Exception(string format, object arg1, object arg2) + { + return new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, format, arg1, arg2)); + } + + /// + /// Formats a string and throws an exception. + /// + protected static Exception Exception(string format, object arg1, object arg2, object arg3) + { + return new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, format, arg1, arg2, arg3)); + } + + /// + /// Loads an input file for validation. + /// + protected object LoadInput(System.Type type, Stream stream) + { + m_loadedFiles.Clear(); + + object schema = LoadFile(type, stream); + + FilePath = null; + + return schema; + } + + /// + /// Loads an input file for validation. + /// + protected object LoadInput(System.Type type, string path) + { + m_loadedFiles.Clear(); + + object schema = LoadFile(type, path); + + FilePath = path; + + return schema; + } + + /// + /// Loads the dictionary from a file. + /// + protected object Load(System.Type type, string namespaceUri, string path, Assembly assembly = null) + { + // check if already loaded. + if (m_loadedFiles.ContainsKey(namespaceUri)) + { + return m_loadedFiles[namespaceUri]; + } + + // check if a valid path provided. + FileInfo fileInfo = null; + + if (!String.IsNullOrEmpty(path)) + { + fileInfo = new FileInfo(path); + + if (fileInfo.Exists) + { + return LoadFile(type, path); + } + } + + // check if path specified in the file table. + string location = null; + + if (m_knownFiles.TryGetValue(namespaceUri, out location)) + { + fileInfo = new FileInfo(location); + + if (fileInfo.Exists) + { + return LoadFile(type, location); + } + + // load embedded resource. + return LoadResource(type, location, assembly); + } + + if (!String.IsNullOrEmpty(path)) + { + if (!File.Exists(path)) + { + // load embedded resource. + return LoadResource(type, path, assembly); + } + + // check for file in the same directory as the input file. + FileInfo inputInfo = new FileInfo(FilePath); + + fileInfo = new FileInfo(inputInfo.DirectoryName + Path.DirectorySeparatorChar + fileInfo.Name); + + if (fileInfo.Exists) + { + return LoadFile(type, fileInfo.FullName); + } + + // check for file in the process directory. + fileInfo = new FileInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + fileInfo.Name); + + if (fileInfo.Exists) + { + return LoadFile(type, fileInfo.FullName); + } + } + + throw Exception("Cannot import file '{0}' from '{1}'.", namespaceUri, path); + } + + /// + /// Loads a schema from a file. + /// + protected static object LoadFile(System.Type type, string path) + { + StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open)); + + try + { + XmlSerializer serializer = new XmlSerializer(type); + return serializer.Deserialize(reader); + } + finally + { + reader.Dispose(); + } + } + + /// + /// Loads a schema from a file. + /// + protected static object LoadFile(System.Type type, Stream stream) + { + StreamReader reader = new StreamReader(stream); + + try + { + XmlSerializer serializer = new XmlSerializer(type); + return serializer.Deserialize(reader); + } + finally + { + reader.Dispose(); + } + } + + /// + /// Loads a schema from an embedded resource. + /// + protected static object LoadResource(System.Type type, string path, Assembly assembly) + { + try + { + if (assembly == null) + { + assembly = typeof(SchemaValidator).GetTypeInfo().Assembly; + } + + StreamReader reader = new StreamReader(assembly.GetManifestResourceStream(path)); + + try + { + XmlSerializer serializer = new XmlSerializer(type); + return serializer.Deserialize(reader); + } + finally + { + reader.Dispose(); + } + } + catch (Exception e) + { + throw new FileNotFoundException(String.Format(CultureInfo.InvariantCulture, "Could not load resource '{0}'.", path), e); + } + } + + /// + /// Adds the embedded resources to the file table. + /// + protected void SetResourcePaths(string[][] resources) + { + if (resources != null) + { + for (int ii = 0; ii < resources.Length; ii++) + { + if (!m_knownFiles.ContainsKey(resources[ii][0])) + { + m_knownFiles.Add(resources[ii][0], resources[ii][1]); + } + } + } + } + #endregion + + #region Public Methods + /// + /// Returns the schema for the specified type (returns the entire schema if null). + /// + public virtual string GetSchema(string typeName) + { + return null; + } + + #endregion + #region Private Fields + private Dictionary m_knownFiles; + private Dictionary m_loadedFiles; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/StandardTypes.bsd b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/StandardTypes.bsd new file mode 100644 index 00000000..c9386531 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/StandardTypes.bsd @@ -0,0 +1,135 @@ + + + + + This dictionary defines the standard types used by the OPC Binary type description system. + + + A single bit. + + + + A two state logical value represented as a 8-bit value. + + + + An 8-bit signed integer. + + + + A 8-bit unsigned integer. + + + + A 16-bit signed integer. + + + + A 16-bit unsigned integer. + + + + A 32-bit signed integer. + + + + A 32-bit unsigned integer. + + + + A 64-bit signed integer. + + + + A 64-bit unsigned integer. + + + + An IEEE-754 single precision floating point value. + + + + An IEEE-754 double precision floating point value. + + + + A 8-bit character value. + + + + A UTF-8 null terminated string value. + + + + + A UTF-8 string prefixed by its length in characters. + + + + + + A 16-bit character value. + + + + A UTF-16 null terminated string value. + + + + + A UTF-16 string prefixed by its length in characters. + + + + + + An array of bytes prefixed by its length. + + + + + + The number of 100 nanosecond intervals since January 01, 1601. + + + + A 128-bit globally unique identifier. + + + + + + + diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/XmlSchemaValidator.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/XmlSchemaValidator.cs new file mode 100644 index 00000000..22db6b9e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Schemas/XmlSchemaValidator.cs @@ -0,0 +1,160 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; +using System.Reflection; +using System.Xml.Schema; + +namespace Opc.Ua.Schema.Xml +{ + /// + /// Generates files used to describe data types. + /// + public class XmlSchemaValidator : SchemaValidator + { + #region Constructors + /// + /// Intializes the object with default values. + /// + public XmlSchemaValidator() + { + SetResourcePaths(WellKnownDictionaries); + } + + /// + /// Intializes the object with a file table. + /// + public XmlSchemaValidator(Dictionary fileTable) : base(fileTable) + { + SetResourcePaths(WellKnownDictionaries); + } + #endregion + + #region Public Members + /// + /// The schema that was validated. + /// + public XmlDocument TargetSchema + { + get { return m_schema; } + } + + /// + /// Generates the code from the contents of the address space. + /// + public void Validate(string inputPath) + { + using (Stream istrm = File.OpenRead(inputPath)) + { + Validate(istrm); + } + } + + /// + /// Generates the code from the contents of the address space. + /// + public void Validate(Stream stream) + { + m_schema.Load(stream); + + foreach (XmlNode import in m_schema.ChildNodes) + { + if (import.NamespaceURI == Namespaces.OpcUa) + { + StreamReader strm = new StreamReader(Assembly.Load(new AssemblyName("Opc.Ua.Core")).GetManifestResourceStream("Opc.Ua.Model.Opc.Ua.Types.xsd")); + m_schema.Load(strm); + continue; + } + + string location = null; + + if (!KnownFiles.TryGetValue(import.NamespaceURI, out location)) + { + location = import.NamespaceURI; + } + + FileInfo fileInfo = new FileInfo(location); + if (!fileInfo.Exists) + { + StreamReader strm = new StreamReader(Assembly.Load(new AssemblyName("Opc.Ua.Core")).GetManifestResourceStream(location)); + m_schema.Load(strm); + } + else + { + Stream strm = File.OpenRead(location); + m_schema.Load(strm); + } + } + } + + /// + /// Returns the schema for the specified type (returns the entire schema if null). + /// + public override string GetSchema(string typeName) + { + XmlWriterSettings settings = new XmlWriterSettings(); + + settings.Encoding = Encoding.UTF8; + settings.Indent = true; + settings.IndentChars = " "; + + MemoryStream ostrm = new MemoryStream(); + XmlWriter writer = XmlWriter.Create(ostrm, settings); + + try + { + if (typeName == null || m_schema.ChildNodes.Count == 0) + { + m_schema.WriteTo(writer); + } + else + { + foreach (XmlNode current in m_schema.ChildNodes) + { + XmlElement element = current as XmlElement; + if (element != null) + { + if (element.Name == typeName) + { + XmlDocument schema = new XmlDocument(); + schema.AppendChild(element); + schema.WriteTo(writer); + break; + } + } + } + } + } + finally + { + writer.Flush(); + writer.Dispose(); + } + + return new UTF8Encoding().GetString(ostrm.ToArray()); + } + #endregion + + #region Private Fields + private readonly string[][] WellKnownDictionaries = new string[][] + { + new string[] { Namespaces.OpcUaBuiltInTypes, "Opc.Ua.Types.Schemas.BuiltInTypes.xsd" } + }; + + private XmlDocument m_schema = new XmlDocument(); + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/DataComparer.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/DataComparer.cs new file mode 100644 index 00000000..d73f4fbd --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/DataComparer.cs @@ -0,0 +1,1175 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Xml; + +namespace Opc.Ua.Test +{ + /// + /// Compares values taking into account semantically equivalent values that would fail the simple IsEqual test. + /// + public class DataComparer + { + #region Constructors + /// + /// Constructs an instance of the data comparer. + /// + public DataComparer(ServiceMessageContext context) + { + m_context = context; + m_throwOnError = true; + } + #endregion + + #region Public Properties + /// + /// Gets or set a flag indicating whether an exception should be thrown on error. + /// + public bool ThrowOnError + { + get { return m_throwOnError; } + set { m_throwOnError = value; } + } + #endregion + + #region Boolean Functions + /// + /// This method compares two Boolean values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareBoolean(bool value1, bool value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + return true; + } + #endregion + + #region SByte Functions + /// + /// This method compares two SByte values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareSByte(sbyte value1, sbyte value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region Byte Functions + /// + /// This method compares two Byte values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareByte(byte value1, byte value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region Int16 Functions + /// + /// This method compares two Int16 values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareInt16(short value1, short value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region UInt16 Functions + /// + /// This method compares two UInt16 values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareUInt16(ushort value1, ushort value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region Int32 Functions + /// + /// This method compares two Int32 values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareInt32(int value1, int value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region UInt32 Functions + /// + /// This method compares two UInt32 values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareUInt32(uint value1, uint value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region Int64 Functions + /// + /// This method compares two Int64 values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareInt64(long value1, long value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region UInt64 Functions + /// + /// This method compares two UInt64 values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareUInt64(ulong value1, ulong value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region Float Functions + /// + /// This method compares two Float values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareFloat(float value1, float value2) + { + if (value1 != value2) + { + if (Single.IsNaN(value1) && Single.IsNaN(value2)) + { + return true; + } + + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region Double Functions + /// + /// This method compares two Double values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareDouble(double value1, double value2) + { + if (value1 != value2) + { + if (Double.IsNaN(value1) && Double.IsNaN(value2)) + { + return true; + } + + double delta = Math.Abs(value1 - value2); + + if (delta < Math.Abs(value1 / 1e15)) + { + return true; + } + + return ReportError(value1, delta); + } + + return true; + } + #endregion + + #region String Functions + /// + /// This method compares two String values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareString(string value1, string value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region DateTime Functions + /// + /// This method compares two DateTime values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareDateTime(DateTime value1, DateTime value2) + { + if (value1.Kind != value2.Kind) + { + value1 = Utils.ToOpcUaUniversalTime(value1); + value2 = Utils.ToOpcUaUniversalTime(value2); + } + + if (value1 < Utils.TimeBase) + { + value1 = DateTime.MinValue; + } + + if (value2 < Utils.TimeBase) + { + value2 = DateTime.MinValue; + } + + if (value1 == value2) + { + return true; + } + + // allow milliseconds to be truncated. + return Math.Abs((value1 - value2).Ticks) < 10000; + } + #endregion + + #region Guid Functions + /// + /// This method compares two Guid values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareUuid(Uuid value1, Uuid value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region ByteString Functions + /// + /// This method compares two ByteString values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareByteString(byte[] value1, byte[] value2) + { + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + + if (value1.Length != value2.Length) + { + return ReportError(value1, value2); + } + + for (int ii = 0; ii < value1.Length; ii++) + { + if (value1[ii] != value2[ii]) + { + return ReportError(value1[ii], value1[ii]); + } + } + + return true; + } + #endregion + + #region XmlElement Functions + /// + /// This method compares two XmlElement values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareXmlElement(XmlElement value1, XmlElement value2) + { + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + + if (value1.LocalName != value2.LocalName) + { + return ReportError(value1.LocalName, value2.LocalName); + } + + if (value1.NamespaceURI != value2.NamespaceURI) + { + return ReportError(value1.NamespaceURI, value2.NamespaceURI); + } + + foreach (XmlAttribute attribute1 in value1.Attributes) + { + XmlAttribute attribute2 = value2.GetAttributeNode(attribute1.Name); + + if (attribute2 == null) + { + if (!attribute1.Name.StartsWith("xmlns", StringComparison.Ordinal)) + { + return ReportError(attribute1, attribute2); + } + + string prefix = (attribute1.Name.Length > 5) ? attribute1.Name.Substring(6) : String.Empty; + + if (attribute1.Value != value2.GetNamespaceOfPrefix(prefix)) + { + return ReportError(attribute1.Value, value2.GetNamespaceOfPrefix(prefix)); + } + } + else + { + if (attribute2.Value != attribute1.Value) + { + return ReportError(attribute2.Value, attribute1.Value); + } + } + } + + XmlNode child1 = value1.FirstChild; + XmlNode child2 = value2.FirstChild; + + while (child1 != null && child2 != null) + { + while (child1 != null) + { + if (child1.NodeType == XmlNodeType.Element) + { + break; + } + + child1 = child1.NextSibling; + } + + while (child2 != null) + { + if (child2.NodeType == XmlNodeType.Element) + { + break; + } + + child2 = child2.NextSibling; + } + + if (!CompareXmlElement((XmlElement)child1, (XmlElement)child2)) + { + return false; + } + + if (child1 != null) + { + child1 = child1.NextSibling; + } + + if (child2 != null) + { + child2 = child2.NextSibling; + } + } + + if (child1 != child2) + { + return ReportError(child1, child2); + } + + return true; + } + #endregion + + #region NodeId Functions + /// + /// This method compares two NodeId values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareNodeId(NodeId value1, NodeId value2) + { + if (NodeId.IsNull(value1) && NodeId.IsNull(value2)) + { + return true; + } + + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region ExpandedNodeId Functions + /// + /// This method compares two ExpandedNodeId values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareExpandedNodeId(ExpandedNodeId value1, ExpandedNodeId value2) + { + if (NodeId.IsNull(value1) && NodeId.IsNull(value2)) + { + return true; + } + + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return false; + } + + return true; + } + + if (value1 != value2) + { + NodeId nodeId1 = ExpandedNodeId.ToNodeId(value1, m_context.NamespaceUris); + NodeId nodeId2 = ExpandedNodeId.ToNodeId(value2, m_context.NamespaceUris); + + if (nodeId1 != nodeId2) + { + return ReportError(value1, value2); + } + } + + return true; + } + #endregion + + #region StatusCode Functions + /// + /// This method compares two StatusCode values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareStatusCode(StatusCode value1, StatusCode value2) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + #endregion + + #region DiagnosticInfo Functions + /// + /// This method compares two DiagnosticInfo values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareDiagnosticInfo(DiagnosticInfo value1, DiagnosticInfo value2) + { + if (value1 == null && value2 == null) + { + return true; + } + + if (value1 == null) + { + value1 = new DiagnosticInfo(); + } + + if (value2 == null) + { + value2 = new DiagnosticInfo(); + } + + if (!CompareInt32(value1.SymbolicId, value2.SymbolicId)) + { + return false; + } + + if (!CompareInt32(value1.NamespaceUri, value2.NamespaceUri)) + { + return false; + } + + if (!CompareInt32(value1.Locale, value2.Locale)) + { + return false; + } + + if (!CompareInt32(value1.LocalizedText, value2.LocalizedText)) + { + return false; + } + + if (!CompareString(value1.AdditionalInfo, value2.AdditionalInfo)) + { + return false; + } + + if (!CompareStatusCode(value1.InnerStatusCode, value2.InnerStatusCode)) + { + return false; + } + + if (!CompareDiagnosticInfo(value1.InnerDiagnosticInfo, value2.InnerDiagnosticInfo)) + { + return false; + } + + return true; + } + #endregion + + #region QualifiedName Functions + /// + /// This method compares two QualifiedName values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareQualifiedName(QualifiedName value1, QualifiedName value2) + { + if (value1 == null) + { + if (value2 == null || value2 == QualifiedName.Null) + { + return true; + } + else + { + return false; + } + } + + if (value2 == null) + { + if (value1 == null || value1 == QualifiedName.Null) + { + return true; + } + else + { + return false; + } + } + + if (!value1.Equals(value2)) + { + return ReportError(value1, value1); + } + return true; + } + #endregion + + #region LocalizedText Functions + /// + /// This method compares two LocalizedText values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareLocalizedText(LocalizedText value1, LocalizedText value2) + { + if (value1 == null) + { + if (value2 == null || value2 == LocalizedText.Null) + { + return true; + } + else + { + return false; + } + } + + if (value2 == null) + { + if (value1 == null || value1 == LocalizedText.Null) + { + return true; + } + else + { + return false; + } + } + + if (!value1.Equals(value2)) + { + return ReportError(value1, value1); + } + return true; + } + #endregion + + #region Variant Functions + /// + /// This method compares two Variant values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public bool CompareVariant(Variant value1, Variant value2) + { + if (value1.Value == null || value2.Value == null) + { + if (value1.Value != value2.Value) + { + return ReportError(value1.Value, value2.Value); + } + + return true; + } + + System.Type systemType = value1.Value.GetType(); + + if (systemType != value2.Value.GetType()) + { + return ReportError(value1.Value, value2.Value); + } + + if (!systemType.IsArray || systemType == typeof(byte[])) + { + if (systemType == typeof(bool)) { return CompareBoolean((bool)value1.Value, (bool)value2.Value); } + if (systemType == typeof(sbyte)) { return CompareSByte((sbyte)value1.Value, (sbyte)value2.Value); } + if (systemType == typeof(byte)) { return CompareByte((byte)value1.Value, (byte)value2.Value); } + if (systemType == typeof(short)) { return CompareInt16((short)value1.Value, (short)value2.Value); } + if (systemType == typeof(ushort)) { return CompareUInt16((ushort)value1.Value, (ushort)value2.Value); } + if (systemType == typeof(int)) { return CompareInt32((int)value1.Value, (int)value2.Value); } + if (systemType == typeof(uint)) { return CompareUInt32((uint)value1.Value, (uint)value2.Value); } + if (systemType == typeof(long)) { return CompareInt64((long)value1.Value, (long)value2.Value); } + if (systemType == typeof(ulong)) { return CompareUInt64((ulong)value1.Value, (ulong)value2.Value); } + if (systemType == typeof(float)) { return CompareFloat((float)value1.Value, (float)value2.Value); } + if (systemType == typeof(double)) { return CompareDouble((double)value1.Value, (double)value2.Value); } + if (systemType == typeof(string)) { return CompareString((string)value1.Value, (string)value2.Value); } + if (systemType == typeof(DateTime)) { return CompareDateTime((DateTime)value1.Value, (DateTime)value2.Value); } + if (systemType == typeof(Uuid)) { return CompareUuid((Uuid)value1.Value, (Uuid)value2.Value); } + if (systemType == typeof(byte[])) { return CompareByteString((byte[])value1.Value, (byte[])value2.Value); } + if (systemType == typeof(XmlElement)) { return CompareXmlElement((XmlElement)value1.Value, (XmlElement)value2.Value); } + if (systemType == typeof(NodeId)) { return CompareNodeId((NodeId)value1.Value, (NodeId)value2.Value); } + if (systemType == typeof(ExpandedNodeId)) { return CompareExpandedNodeId((ExpandedNodeId)value1.Value, (ExpandedNodeId)value2.Value); } + if (systemType == typeof(StatusCode)) { return CompareStatusCode((StatusCode)value1.Value, (StatusCode)value2.Value); } + if (systemType == typeof(DiagnosticInfo)) { return CompareDiagnosticInfo((DiagnosticInfo)value1.Value, (DiagnosticInfo)value2.Value); } + if (systemType == typeof(QualifiedName)) { return CompareQualifiedName((QualifiedName)value1.Value, (QualifiedName)value2.Value); } + if (systemType == typeof(LocalizedText)) { return CompareLocalizedText((LocalizedText)value1.Value, (LocalizedText)value2.Value); } + if (systemType == typeof(ExtensionObject)) { return CompareExtensionObject((ExtensionObject)value1.Value, (ExtensionObject)value2.Value); } + if (systemType == typeof(DataValue)) { return CompareDataValue((DataValue)value1.Value, (DataValue)value2.Value); } + if (systemType == typeof(Variant)) { return CompareVariant((Variant)value1.Value, (Variant)value2.Value); } + if (systemType == typeof(Matrix)) { return CompareMatrix((Matrix)value1.Value, (Matrix)value2.Value); } + } + else + { + if (systemType == typeof(bool[])) { return CompareArray((bool[])value1.Value, (bool[])value2.Value, CompareBoolean); } + if (systemType == typeof(sbyte[])) { return CompareArray((sbyte[])value1.Value, (sbyte[])value2.Value, CompareSByte); } + if (systemType == typeof(short[])) { return CompareArray((short[])value1.Value, (short[])value2.Value, CompareInt16); } + if (systemType == typeof(ushort[])) { return CompareArray((ushort[])value1.Value, (ushort[])value2.Value, CompareUInt16); } + if (systemType == typeof(int[])) { return CompareArray((int[])value1.Value, (int[])value2.Value, CompareInt32); } + if (systemType == typeof(uint[])) { return CompareArray((uint[])value1.Value, (uint[])value2.Value, CompareUInt32); } + if (systemType == typeof(long[])) { return CompareArray((long[])value1.Value, (long[])value2.Value, CompareInt64); } + if (systemType == typeof(ulong[])) { return CompareArray((ulong[])value1.Value, (ulong[])value2.Value, CompareUInt64); } + if (systemType == typeof(float[])) { return CompareArray((float[])value1.Value, (float[])value2.Value, CompareFloat); } + if (systemType == typeof(double[])) { return CompareArray((double[])value1.Value, (double[])value2.Value, CompareDouble); } + if (systemType == typeof(string[])) { return CompareArray((string[])value1.Value, (string[])value2.Value, CompareString); } + if (systemType == typeof(DateTime[])) { return CompareArray((DateTime[])value1.Value, (DateTime[])value2.Value, CompareDateTime); } + if (systemType == typeof(Uuid[])) { return CompareArray((Uuid[])value1.Value, (Uuid[])value2.Value, CompareUuid); } + if (systemType == typeof(byte[][])) { return CompareArray((byte[][])value1.Value, (byte[][])value2.Value, CompareByteString); } + if (systemType == typeof(XmlElement[])) { return CompareArray((XmlElement[])value1.Value, (XmlElement[])value2.Value, CompareXmlElement); } + if (systemType == typeof(NodeId[])) { return CompareArray((NodeId[])value1.Value, (NodeId[])value2.Value, CompareNodeId); } + if (systemType == typeof(ExpandedNodeId[])) { return CompareArray((ExpandedNodeId[])value1.Value, (ExpandedNodeId[])value2.Value, CompareExpandedNodeId); } + if (systemType == typeof(StatusCode[])) { return CompareArray((StatusCode[])value1.Value, (StatusCode[])value2.Value, CompareStatusCode); } + if (systemType == typeof(DiagnosticInfo[])) { return CompareArray((DiagnosticInfo[])value1.Value, (DiagnosticInfo[])value2.Value, CompareDiagnosticInfo); } + if (systemType == typeof(QualifiedName[])) { return CompareArray((QualifiedName[])value1.Value, (QualifiedName[])value2.Value, CompareQualifiedName); } + if (systemType == typeof(LocalizedText[])) { return CompareArray((LocalizedText[])value1.Value, (LocalizedText[])value2.Value, CompareLocalizedText); } + if (systemType == typeof(ExtensionObject[])) { return CompareArray((ExtensionObject[])value1.Value, (ExtensionObject[])value2.Value, CompareExtensionObject); } + if (systemType == typeof(DataValue[])) { return CompareArray((DataValue[])value1.Value, (DataValue[])value2.Value, CompareDataValue); } + if (systemType == typeof(Variant[])) { return CompareArray((Variant[])value1.Value, (Variant[])value2.Value, CompareVariant); } + } + + return ReportError(value1.Value, value2.Value); + } + #endregion + + #region DataValue Functions + /// + /// This method compares two DataValues. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareDataValue(DataValue value1, DataValue value2) + { + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + + if (!CompareVariant(value1.WrappedValue, value2.WrappedValue)) + { + return false; + } + + if (!CompareStatusCode(value1.StatusCode, value2.StatusCode)) + { + return false; + } + + if (!CompareDateTime(value1.SourceTimestamp, value2.SourceTimestamp)) + { + return false; + } + + if (!CompareUInt16(value1.SourcePicoseconds, value2.SourcePicoseconds)) + { + return false; + } + + if (!CompareDateTime(value1.ServerTimestamp, value2.ServerTimestamp)) + { + return false; + } + + if (!CompareUInt16(value1.ServerPicoseconds, value2.ServerPicoseconds)) + { + return false; + } + + return true; + } + #endregion + + #region Matrix Functions + /// + /// This method compares two DataValues. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareMatrix(Matrix value1, Matrix value2) + { + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + + if (!CompareVariant(new Variant(value1.Elements), new Variant(value2.Elements))) + { + return false; + } + + if (!CompareArray(value1.Dimensions, value2.Dimensions, CompareInt32)) + { + return false; + } + + return true; + } + #endregion + + #region ExtensionObject Functions + /// + /// The factory to use when decoding extension objects. + /// + public static EncodeableFactory EncodeableFactory + { + get + { + if (s_Factory == null) + { + s_Factory = new EncodeableFactory(); + s_Factory.AddEncodeableTypes(typeof(DataComparer).GetTypeInfo().Assembly); + } + + return s_Factory; + } + } + + // It stores encodable types of the executing assembly. + private static EncodeableFactory s_Factory = new EncodeableFactory(); + + /// + /// Extracts the extension object body. + /// + /// Extension object. + /// IEncodeable object + public static object GetExtensionObjectBody(ExtensionObject value) + { + object body = value.Body; + + IEncodeable encodeable = body as IEncodeable; + + if (encodeable != null) + { + return encodeable; + } + + Type expectedType = EncodeableFactory.GetSystemType(value.TypeId); + + if (expectedType == null) + { + return body; + } + + ServiceMessageContext context = new ServiceMessageContext(); + context.Factory = EncodeableFactory; + + XmlElement xml = body as XmlElement; + + if (xml != null) + { + XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(expectedType); + XmlDecoder decoder = new XmlDecoder(xml, context); + + decoder.PushNamespace(xmlName.Namespace); + body = decoder.ReadEncodeable(xmlName.Name, expectedType); + decoder.PopNamespace(); + decoder.Close(); + + return (IEncodeable)body; + } + + byte[] bytes = body as byte[]; + + if (bytes != null) + { + BinaryDecoder decoder = new BinaryDecoder(bytes, context); + body = decoder.ReadEncodeable(null, expectedType); + decoder.Close(); + + return (IEncodeable)body; + } + + return body; + } + + /// + /// This method compares two ExtensionObject values. + /// + /// First Value. + /// Second Value. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + public bool CompareExtensionObject(ExtensionObject value1, ExtensionObject value2) + { + if (value1 == null || value2 == null) + { + if (value1 != value2) + { + return ReportError(value1, value2); + } + + return true; + } + + object body1 = value1.Body; + object body2 = value2.Body; + + if (body1 == null || body2 == null) + { + return body1 == body2; + } + + byte[] bytes1 = value1.Body as byte[]; + byte[] bytes2 = value2.Body as byte[]; + + if (bytes1 != null && bytes2 != null) + { + if (!CompareExpandedNodeId(value1.TypeId, value2.TypeId)) + { + return ReportError(value1.TypeId, value2.TypeId); + } + + return CompareByteString(bytes1, bytes2); + } + + XmlElement xml1 = value1.Body as XmlElement; + XmlElement xml2 = value2.Body as XmlElement; + + if (xml1 != null && xml2 != null) + { + if (!CompareExpandedNodeId(value1.TypeId, value2.TypeId)) + { + return ReportError(value1.TypeId, value2.TypeId); + } + + return CompareXmlElement(xml1, xml2); + } + + body1 = GetExtensionObjectBody(value1); + body2 = GetExtensionObjectBody(value2); + + if (!CompareExtensionObjectBody(body1, body2)) + { + return ReportError(value1, value2); + } + + return true; + } + + /// + /// Compares the value of two extension object body. + /// + protected virtual bool CompareExtensionObjectBody(object value1, object value2) + { + if (Object.ReferenceEquals(value1, value2)) + { + return true; + } + + IEncodeable encodeable1 = value1 as IEncodeable; + IEncodeable encodeable2 = value2 as IEncodeable; + + if (encodeable1 != null && encodeable2 != null) + { + if (encodeable1.IsEqual(encodeable1)) + { + return true; + } + } + + return false; + } + #endregion + + #region Private Methods + /// + /// The delegate used to compare two values. + /// + private delegate bool Comparator(T value1, T value2); + + /// + /// This method compares two arrays. + /// + /// IEnumerable object of type T + /// IEnumerable object of type T + /// Method name to compare the arrays. + /// True in case of equal values. + /// False or ServiceResultException in case of unequal values. + private bool CompareArray(IEnumerable value1, IEnumerable value2, Comparator comparator) + { + if (value1 == null) + { + if (value2 == null || value2.GetEnumerator().MoveNext() == false) + { + return true; + } + else + { + return false; + } + } + + if (value2 == null) + { + if (value1 == null || value1.GetEnumerator().MoveNext() == false) + { + return true; + } + else + { + return false; + } + } + + if (value2 == null) + { + if (value1 == null || value1.GetEnumerator().MoveNext() == false) + { + return true; + } + else + { + return false; + } + } + + IEnumerator enumerator1 = value1.GetEnumerator(); + IEnumerator enumerator2 = value2.GetEnumerator(); + + while (enumerator1.MoveNext()) + { + if (!enumerator2.MoveNext()) + { + return ReportError(value1, value2); + } + + if (!comparator(enumerator1.Current, enumerator2.Current)) + { + return false; + } + } + + if (enumerator2.MoveNext()) + { + return ReportError(value1, value2); + } + + return true; + } + + /// + /// In case of errors, throw exception. + /// + /// First Value. + /// Second Value. + /// Throws ServiceResultException in case of unequal values. + private bool ReportError(object value1, object value2) + { + if (m_throwOnError) + { + throw ServiceResultException.Create( + StatusCodes.BadUnexpectedError, + "'{0}' is not equal to '{1}'.", + value1, + value2); + } + + return false; + } + #endregion + + #region Private Fields + private ServiceMessageContext m_context; + private bool m_throwOnError; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/DataGenerator.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/DataGenerator.cs new file mode 100644 index 00000000..e77c068e --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/DataGenerator.cs @@ -0,0 +1,1327 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using System.Xml; + +namespace Opc.Ua.Test +{ + /// + /// An interface to a source of random numbers. + /// + public interface IRandomSource + { + /// + /// Fills a range in array of bytes with random numbers. + /// + /// The array to update. + /// The start of the range generate. + /// The number of bytes to generate. + /// Thrown if the bytes parameter is null. + /// Thrown if the offset or count parameters do not specify a valid range within the bytes parameter. + void NextBytes(byte[] bytes, int offset, int count); + + /// + /// Returns a random non-negative integer which does not exeed the specified maximum. + /// + /// The maximum value to return. + /// A random value greater than 0 but less than or equal to max. + /// Thrown if the max parameter is less than zero. + int NextInt32(int max); + } + + /// + /// Uses the Pseudo random generator as a source. + /// + public class RandomSource : IRandomSource + { + /// + /// Initializes the source with a time dependent seed. + /// + public RandomSource() + { + m_random = new Random(); + } + + /// + /// Initializes the source with a seed. + /// + /// The number used to initialize the Pseudo random sequence. + public RandomSource(int seed) + { + m_random = new Random(seed); + } + + /// + public void NextBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) throw new ArgumentNullException(nameof(bytes)); + + if (offset < 0 || (offset != 0 && offset >= bytes.Length)) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + if (count < 0 || offset + count > bytes.Length) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + + if (bytes.Length == 0) + { + return; + } + + if (offset == 0 && count == bytes.Length) + { + m_random.NextBytes(bytes); + } + else + { + byte[] buffer = new byte[count]; + m_random.NextBytes(buffer); + Array.Copy(buffer, 0, bytes, offset, count); + } + } + + /// + public int NextInt32(int max) + { + if (max < 0) + { + throw new ArgumentOutOfRangeException(nameof(max)); + } + + if (max < Int32.MaxValue) + { + max++; + } + + return m_random.Next(max); + } + + private Random m_random; + } + + /// + /// A class that generates data. + /// + public class DataGenerator + { + #region Constructors + /// + /// Initializes the data generator. + /// + public DataGenerator(IRandomSource random) + { + m_maxArrayLength = 100; + m_maxStringLength = 100; + m_maxXmlAttributeCount = 10; + m_maxXmlElementCount = 10; + m_minDateTimeValue = new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc); + m_maxDateTimeValue = new DateTime(2100, 1, 1, 0, 0, 0, DateTimeKind.Utc); + m_random = random; + m_boundaryValueFrequency = 20; + m_namespaceUris = new NamespaceTable(); + m_serverUris = new StringTable(); + + // create a random source if none provided. + if (m_random == null) + { + m_random = new RandomSource(); + } + + // load the boundary values. + m_boundaryValues = new SortedDictionary(); + + for (int ii = 0; ii < s_AvailableBoundaryValues.Length; ii++) + { + m_boundaryValues[s_AvailableBoundaryValues[ii].SystemType.Name] = s_AvailableBoundaryValues[ii].Values.ToArray(); + } + + // load the localized tokens. + m_tokenValues = LoadStringData("Opc.Ua.Types.Utils.LocalizedData.txt"); + if (m_tokenValues.Count == 0) + { + m_tokenValues = LoadStringData("Opc.Ua.Utils.LocalizedData.txt"); + } + + // index the available locales. + m_availableLocales = new string[m_tokenValues.Count]; + + int index = 0; + + foreach (string locale in m_tokenValues.Keys) + { + m_availableLocales[index++] = locale; + } + } + #endregion + + #region Public Methods + /// + /// The maximum length for generated arrays. + /// + public int MaxArrayLength + { + get { return m_maxArrayLength; } + set { m_maxArrayLength = value; } + } + + /// + /// The maximum length for generated strings. + /// + public int MaxStringLength + { + get { return m_maxStringLength; } + set { m_maxStringLength = value; } + } + + /// + /// The minimum value for generated date time values. + /// + public DateTime MinDateTimeValue + { + get { return m_minDateTimeValue; } + set { m_minDateTimeValue = value; } + } + + /// + /// The maximum value for generated date time values. + /// + public DateTime MaxDateTimeValue + { + get { return m_maxDateTimeValue; } + set { m_maxDateTimeValue = value; } + } + + /// + /// The maximum number of attributes in generated XML elements. + /// + public int MaxXmlAttributeCount + { + get { return m_maxXmlAttributeCount; } + set { m_maxXmlAttributeCount = value; } + } + + /// + /// The maximum number of child elements in generated XML elements. + /// + public int MaxXmlElementCount + { + get { return m_maxXmlElementCount; } + set { m_maxXmlElementCount = value; } + } + + /// + /// The table namespace uris to use when generating NodeIds. + /// + public NamespaceTable NamespaceUris + { + get { return m_namespaceUris; } + set { m_namespaceUris = value; } + } + + /// + /// The table server uris to use when generating NodeIds. + /// + public StringTable ServerUris + { + get { return m_serverUris; } + set { m_serverUris = value; } + } + + /// + /// How frequently boundary values should be used expressed as percentage between 0 and 100. + /// + public int BoundaryValueFrequency + { + get { return m_boundaryValueFrequency; } + set { m_boundaryValueFrequency = value; } + } + + /// + /// Returns true of a boundary value should be used. + /// + private bool UseBoundaryValue() + { + return m_random.NextInt32(99) < m_boundaryValueFrequency; + } + + /// + /// Returns a random value of the specified built-in type. + /// + public object GetRandom(NodeId dataType, int valueRank, IList arrayDimensions, ITypeTable typeTree) + { + BuiltInType expectedType = TypeInfo.GetBuiltInType(dataType, typeTree); + + // calculate total number of dimensions. + int dimensions = 0; + + switch (valueRank) + { + case ValueRanks.Any: + { + if (arrayDimensions != null && arrayDimensions.Count > 0) + { + dimensions = arrayDimensions.Count; + break; + } + + dimensions = this.GetRandomRange(0, 1); + break; + } + + case ValueRanks.ScalarOrOneDimension: + { + dimensions = this.GetRandomRange(0, 1); + break; + } + + case ValueRanks.OneOrMoreDimensions: + { + if (arrayDimensions != null && arrayDimensions.Count > 0) + { + dimensions = arrayDimensions.Count; + break; + } + + dimensions = this.GetRandomRange(1, 1); + break; + } + + case ValueRanks.Scalar: + { + dimensions = 0; + break; + } + + default: + { + dimensions = valueRank; + break; + } + } + + // return a random scalar. + if (dimensions == 0) + { + if (expectedType == BuiltInType.Variant) + { + // randomly choose a built-in type. + BuiltInType builtInType = BuiltInType.Variant; + + while (builtInType == BuiltInType.Variant || builtInType == BuiltInType.DataValue) + { + builtInType = (BuiltInType)m_random.NextInt32((int)BuiltInType.Variant); + } + + return GetRandomVariant(builtInType, false); + } + + return GetRandom(expectedType); + } + + // calculate the length of each dimension. + int[] actualDimensions = new int[dimensions]; + + for (int ii = 0; ii < dimensions; ii++) + { + if (arrayDimensions != null && arrayDimensions.Count > ii) + { + actualDimensions[ii] = (int)arrayDimensions[ii]; + } + + while (actualDimensions[ii] == 0) + { + actualDimensions[ii] = m_random.NextInt32(m_maxArrayLength); + } + } + + // create an array. + Array output = TypeInfo.CreateArray(expectedType, actualDimensions); + + // generate random values for each element in the array. + int length = output.Length; + int[] indexes = new int[actualDimensions.Length]; + + for (int ii = 0; ii < length; ii++) + { + int divisor = output.Length; + + for (int jj = 0; jj < indexes.Length; jj++) + { + divisor /= actualDimensions[jj]; + indexes[jj] = (ii / divisor) % actualDimensions[jj]; + } + + object value = GetRandom(dataType, ValueRanks.Scalar, null, typeTree); + + if (value != null) + { + if (expectedType == BuiltInType.Guid && + value is Guid) + { + value = new Uuid((Guid)value); + } + + output.SetValue(value, indexes); + } + } + + // return array value. + return output; + } + + /// + /// Returns a random value of the specified built-in type. + /// + public object GetRandom(BuiltInType expectedType) + { + switch (expectedType) + { + case BuiltInType.Boolean: { return GetRandomBoolean(); } + case BuiltInType.SByte: { return GetRandomSByte(); } + case BuiltInType.Byte: { return GetRandomByte(); } + case BuiltInType.Int16: { return GetRandomInt16(); } + case BuiltInType.UInt16: { return GetRandomUInt16(); } + case BuiltInType.Int32: { return GetRandomInt32(); } + case BuiltInType.UInt32: { return GetRandomUInt32(); } + case BuiltInType.Int64: { return GetRandomInt64(); } + case BuiltInType.UInt64: { return GetRandomUInt64(); } + case BuiltInType.Float: { return GetRandomFloat(); } + case BuiltInType.Double: { return GetRandomDouble(); } + case BuiltInType.String: { return GetRandomString(); } + case BuiltInType.DateTime: { return GetRandomDateTime(); } + case BuiltInType.Guid: { return GetRandomUuid(); } + case BuiltInType.ByteString: { return GetRandomByteString(); } + case BuiltInType.XmlElement: { return GetRandomXmlElement(); } + case BuiltInType.NodeId: { return GetRandomNodeId(); } + case BuiltInType.ExpandedNodeId: { return GetRandomExpandedNodeId(); } + case BuiltInType.QualifiedName: { return GetRandomQualifiedName(); } + case BuiltInType.LocalizedText: { return GetRandomLocalizedText(); } + case BuiltInType.StatusCode: { return GetRandomStatusCode(); } + case BuiltInType.Variant: { return GetRandomVariant(); } + case BuiltInType.Enumeration: { return GetRandomInt32(); } + case BuiltInType.ExtensionObject: { return GetRandomExtensionObject(); } + case BuiltInType.DataValue: { return GetRandomDataValue(); } + case BuiltInType.DiagnosticInfo: { return GetRandomDiagnosticInfo(); } + + case BuiltInType.Number: + { + BuiltInType builtInType = (BuiltInType)(m_random.NextInt32(9) + (int)BuiltInType.SByte); + return GetRandomVariant(builtInType, false); + } + + case BuiltInType.Integer: + { + BuiltInType builtInType = (BuiltInType)((m_random.NextInt32(3) * 2) + (int)BuiltInType.SByte); + return GetRandomVariant(builtInType, false); + } + + case BuiltInType.UInteger: + { + BuiltInType builtInType = (BuiltInType)((m_random.NextInt32(3) * 2) + (int)BuiltInType.Byte); + return GetRandomVariant(builtInType, false); + } + } + + return null; + } + + /// + /// Returns a random value of the specified built-in type. + /// + public Array GetRandomArray(BuiltInType expectedType, bool useBoundaryValues, int length, bool fixedLength) + { + switch (expectedType) + { + case BuiltInType.Null: { return GetNullArray(length, fixedLength); } + case BuiltInType.Boolean: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.SByte: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Byte: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Int16: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.UInt16: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Int32: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.UInt32: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Int64: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.UInt64: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Float: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Double: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.String: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.DateTime: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Guid: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.ByteString: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.XmlElement: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.NodeId: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.ExpandedNodeId: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.QualifiedName: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.LocalizedText: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.StatusCode: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Variant: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.ExtensionObject: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + case BuiltInType.Number: + { + BuiltInType builtInType = (BuiltInType)(m_random.NextInt32(9) + (int)BuiltInType.SByte); + return GetRandomArrayInVariant(builtInType, useBoundaryValues, length, fixedLength); + } + + case BuiltInType.Integer: + { + BuiltInType builtInType = (BuiltInType)((m_random.NextInt32(3) * 2) + (int)BuiltInType.SByte); + return GetRandomArrayInVariant(builtInType, useBoundaryValues, length, fixedLength); + } + + case BuiltInType.UInteger: + { + BuiltInType builtInType = (BuiltInType)((m_random.NextInt32(3) * 2) + (int)BuiltInType.Byte); + return GetRandomArrayInVariant(builtInType, useBoundaryValues, length, fixedLength); + } + case BuiltInType.Enumeration: { return GetRandomArray(useBoundaryValues, length, fixedLength); } + } + + return null; + } + + /// + /// Returns an array wrapped in a variant. + /// + private Variant[] GetRandomArrayInVariant(BuiltInType builtInType, bool useBoundaryValues, int length, bool fixedLength) + { + Array array = GetRandomArray(builtInType, useBoundaryValues, length, fixedLength); + Variant[] variants = new Variant[array.Length]; + TypeInfo typeInfo = new TypeInfo(builtInType, ValueRanks.Scalar); + + for (int ii = 0; ii < variants.Length; ii++) + { + variants[ii] = new Variant(array.GetValue(ii), typeInfo); + } + + return variants; + } + + /// + /// This method returns a random value of values for the type. + /// + public T GetRandom(bool useBoundaryValues) + { + if (useBoundaryValues && UseBoundaryValue()) + { + object boundaryValue = GetBoundaryValue(typeof(T)); + + if (boundaryValue != null || !typeof(T).GetTypeInfo().IsValueType) + { + return (T)boundaryValue; + } + } + + return (T)GetRandom(typeof(T)); + } + + /// + /// This method returns a random array of values for the type. + /// + public T[] GetNullArray(int length, bool fixedLength) + { + if (length < 0) + { + return null; + } + + if (!fixedLength) + { + length = m_random.NextInt32(length); + } + + T[] value = new T[length]; + + for (int ii = 0; ii < value.Length; ii++) + { + value[ii] = default(T); + } + + return value; + } + + /// + /// This method returns a random array of values for the type. + /// + public T[] GetRandomArray(bool useBoundaryValues, int length, bool fixedLength) + { + if (length < 0) + { + return null; + } + + if (!fixedLength) + { + length = m_random.NextInt32(length); + } + + T[] value = new T[length]; + + for (int ii = 0; ii < value.Length; ii++) + { + object element = null; + + if (useBoundaryValues && UseBoundaryValue()) + { + element = GetBoundaryValue(typeof(T)); + } + else + { + element = GetRandom(typeof(T)); + } + + if (element == null) + { + element = default(T); + if (element == null) + { + // ensure a valid null type is returned + Type t = typeof(T); + if (t == typeof(ExpandedNodeId)) { element = ExpandedNodeId.Null; } + else if (t == typeof(NodeId)) { element = NodeId.Null; } + else if (t == typeof(LocalizedText)) { element = LocalizedText.Null; } + else if (t == typeof(QualifiedName)) { element = QualifiedName.Null; } + } + } + + value[ii] = (T)element; + } + + return value; + } + + #region Boolean + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public bool GetRandomBoolean() + { + return m_random.NextInt32(1) != 0; + } + #endregion + + #region SByte + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public sbyte GetRandomSByte() + { + int buffer = m_random.NextInt32(Byte.MaxValue); + + if (buffer > SByte.MaxValue) + { + return (sbyte)(SByte.MinValue + (buffer - SByte.MaxValue) - 1); + } + + return (sbyte)buffer; + } + #endregion + + #region Byte + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public byte GetRandomByte() + { + return (byte)m_random.NextInt32(Byte.MaxValue); + } + #endregion + + #region Int16 + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public short GetRandomInt16() + { + int buffer = m_random.NextInt32(UInt16.MaxValue); + + if (buffer > Int16.MaxValue) + { + return (short)(Int16.MinValue + (buffer - Int16.MaxValue) - 1); + } + + return (short)buffer; + } + #endregion + + #region UInt16 + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public ushort GetRandomUInt16() + { + return (ushort)m_random.NextInt32(UInt16.MaxValue); + } + #endregion + + #region Int32 + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public int GetRandomInt32() + { + return (int)m_random.NextInt32(Int32.MaxValue); + } + #endregion + + #region UInt32 + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public uint GetRandomUInt32() + { + byte[] bytes = new byte[4]; + m_random.NextBytes(bytes, 0, bytes.Length); + return BitConverter.ToUInt32(bytes, 0); + } + #endregion + + #region Int64 + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public long GetRandomInt64() + { + byte[] bytes = new byte[8]; + m_random.NextBytes(bytes, 0, bytes.Length); + return BitConverter.ToInt64(bytes, 0); + } + #endregion + + #region UInt64 + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public ulong GetRandomUInt64() + { + byte[] bytes = new byte[8]; + m_random.NextBytes(bytes, 0, bytes.Length); + return BitConverter.ToUInt64(bytes, 0); + } + #endregion + + #region Float + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public float GetRandomFloat() + { + byte[] bytes = new byte[4]; + m_random.NextBytes(bytes, 0, bytes.Length); + return BitConverter.ToSingle(bytes, 0); + } + #endregion + + #region Double + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public double GetRandomDouble() + { + byte[] bytes = new byte[8]; + m_random.NextBytes(bytes, 0, bytes.Length); + return BitConverter.ToSingle(bytes, 0); + } + #endregion + + #region String + /// + /// Creates a random string with a random locale. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public string GetRandomString() + { + return CreateString(GetRandomLocale(), false); + } + + /// + /// Creates a random string for the locale. + /// + public string GetRandomString(string locale) + { + return CreateString(locale, false); + } + + /// + /// Creates a random symbol with a random locale. + /// + public string GetRandomSymbol() + { + return CreateString(GetRandomLocale(), true); + } + + /// + /// Creates a random symbol for the locale. + /// + public string GetRandomSymbol(string locale) + { + return CreateString(locale, false); + } + #endregion + + #region DateTime + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public DateTime GetRandomDateTime() + { + int minTicks = (int)(m_minDateTimeValue.Ticks >> 32); + int maxTicks = (int)(m_maxDateTimeValue.Ticks >> 32); + + long delta = GetRandomRange(minTicks, maxTicks); + + long higherTicks = (delta << 32); + + uint lowerTicks = GetRandomUInt32(); + + return new DateTime(higherTicks + lowerTicks, DateTimeKind.Utc); + } + #endregion + + #region Guid + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public Guid GetRandomGuid() + { + byte[] bytes = new byte[16]; + m_random.NextBytes(bytes, 0, bytes.Length); + return new Guid(bytes); + } + + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public Uuid GetRandomUuid() + { + byte[] bytes = new byte[16]; + m_random.NextBytes(bytes, 0, bytes.Length); + return new Uuid(new Guid(bytes)); + } + #endregion + + #region ByteString + /// + public byte[] GetRandomByteString() + { + int length = m_random.NextInt32(m_maxStringLength); + + byte[] bytes = new byte[length]; + m_random.NextBytes(bytes, 0, bytes.Length); + + return bytes; + } + #endregion + + #region XmlElement + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public XmlElement GetRandomXmlElement() + { + string locale1 = GetRandomLocale(); + string locale2 = GetRandomLocale(); + + // create the root element. + XmlDocument document = new XmlDocument(); + + XmlElement element = document.CreateElement( + "n0", + CreateString(locale1, true), + Utils.Format("http://{0}", CreateString(locale1, true))); + + document.AppendChild(element); + + // add the attributes. + int attributeCount = m_random.NextInt32(m_maxXmlAttributeCount); + + for (int ii = 0; ii < attributeCount; ii++) + { + string attributeName = CreateString(locale1, true); + XmlAttribute attribute = document.CreateAttribute(attributeName); + attribute.Value = CreateString(locale2, true); + element.SetAttributeNode(attribute); + } + + // add the elements. + int elementCount = m_random.NextInt32(m_maxXmlElementCount); + + for (int ii = 0; ii < elementCount; ii++) + { + string elementName = CreateString(locale1, true); + + XmlElement childElement = document.CreateElement( + element.Prefix, + elementName, + element.NamespaceURI); + + childElement.InnerText = CreateString(locale2, false); + + element.AppendChild(childElement); + } + + return element; + } + #endregion + + #region NodeId + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public NodeId GetRandomNodeId() + { + ushort ns = (ushort)m_random.NextInt32(m_namespaceUris.Count - 1); + + IdType idType = (IdType)m_random.NextInt32(4); + + switch (idType) + { + case IdType.String: + { + return new NodeId(CreateString(GetRandomLocale(), true), ns); + } + + case IdType.Guid: + { + return new NodeId(GetRandomGuid(), ns); + } + + case IdType.Opaque: + { + return new NodeId(GetRandomByteString(), ns); + } + } + + return new NodeId(GetRandomUInt32(), ns); + } + #endregion + + #region ExpandedNodeId + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public ExpandedNodeId GetRandomExpandedNodeId() + { + NodeId nodeId = GetRandomNodeId(); + ushort serverIndex = m_serverUris.Count == 0 ? (ushort)0 : (ushort)m_random.NextInt32(m_serverUris.Count - 1); + return new ExpandedNodeId(nodeId, m_namespaceUris.GetString(nodeId.NamespaceIndex), serverIndex); + } + #endregion + + #region QualifiedName + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public QualifiedName GetRandomQualifiedName() + { + ushort ns = (ushort)m_random.NextInt32(m_namespaceUris.Count - 1); + return new QualifiedName(CreateString(GetRandomLocale(), true), ns); + } + #endregion + + #region LocalizedText + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public LocalizedText GetRandomLocalizedText() + { + string locale = GetRandomLocale(); + return new LocalizedText(locale, CreateString(locale, false)); + } + #endregion + + #region StatusCode + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + public StatusCode GetRandomStatusCode() + { + int offset = GetRandomRange((int)(StatusCodes.BadUnexpectedError >> 16), (int)(StatusCodes.BadMaxConnectionsReached >> 16)); + return (uint)(StatusCodes.BadUnexpectedError + (offset << 16)); + } + #endregion + + #region Variant + /// + public Variant GetRandomVariant() + { + return GetRandomVariant(true); + } + + /// + public Variant GetRandomVariant(bool allowArrays) + { + // randomly choose a built-in type. + BuiltInType builtInType = BuiltInType.Variant; + + while (builtInType == BuiltInType.Variant || builtInType == BuiltInType.DataValue) + { + builtInType = (BuiltInType)m_random.NextInt32((int)BuiltInType.Variant); + } + + return GetRandomVariant(builtInType, (allowArrays) ? (m_random.NextInt32(1) == 1) : false); + } + + /// + /// Returns a random variant containing a scalar or array value. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private Variant GetRandomVariant(BuiltInType builtInType, bool isArray) + { + if (builtInType == BuiltInType.Null) + { + return Variant.Null; + } + + int length = -1; + + if (isArray) + { + length = m_random.NextInt32(m_maxArrayLength - 1); + } + else if (builtInType == BuiltInType.Variant) + { + length = 1; + } + + if (length >= 0) + { + switch (builtInType) + { + case BuiltInType.Boolean: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.SByte: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Byte: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Int16: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.UInt16: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Int32: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.UInt32: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Int64: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.UInt64: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Float: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Double: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.String: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.DateTime: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Guid: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.ByteString: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.XmlElement: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.NodeId: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.ExpandedNodeId: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.QualifiedName: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.LocalizedText: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.StatusCode: { return new Variant(GetRandomArray(true, length, true)); } + case BuiltInType.Variant: { return new Variant(GetRandomArray(true, length, true)); } + } + } + + return new Variant(GetRandom(builtInType)); + } + #endregion + + #region ExtensionObject + /// + public ExtensionObject GetRandomExtensionObject() + { + NodeId typeId = GetRandomNodeId(); + + if (NodeId.IsNull(typeId)) + { + return ExtensionObject.Null; + } + object body = null; + + if (m_random.NextInt32(1) != 0) + { + body = GetRandomByteString(); + } + else + { + body = GetRandomXmlElement(); + } + + return new ExtensionObject(typeId, body); + } + #endregion + + #region DataValue + /// + /// Get a random DataValue. + /// + public DataValue GetRandomDataValue() + { + Variant variant = GetRandomVariant(); + StatusCode statusCode = GetRandomStatusCode(); + DateTime sourceTimeStamp = GetRandomDateTime(); + DateTime serverTimeStamp = GetRandomDateTime(); + return new DataValue(variant, statusCode, sourceTimeStamp, DateTime.UtcNow); + } + #endregion + + #region DiagnosticInfo + /// + /// Get random diagnostic info. + /// + public DiagnosticInfo GetRandomDiagnosticInfo() + { + // TODO: return random values + return new DiagnosticInfo( + ServiceResult.Good, + DiagnosticsMasks.NoInnerStatus, + true, + new StringTable()); + } + #endregion + + #endregion + + #region BoundaryValues Class + /// + /// Stores the boundary values for a data type. + /// + private class BoundaryValues + { + public BoundaryValues(Type systemType, params object[] values) + { + SystemType = systemType; + + if (values != null) + { + Values = new List(values); + } + else + { + Values = new List(); + } + } + + public Type SystemType; + public List Values; + } + + /// + /// Boundary values used or testing. + /// + private static readonly BoundaryValues[] s_AvailableBoundaryValues = new BoundaryValues[] + { + new BoundaryValues(typeof(sbyte), SByte.MinValue, (sbyte)0, SByte.MaxValue), + new BoundaryValues(typeof(byte), Byte.MinValue, Byte.MaxValue), + new BoundaryValues(typeof(short), Int16.MinValue, (short)0, Int16.MaxValue), + new BoundaryValues(typeof(ushort), UInt16.MinValue, UInt16.MaxValue), + new BoundaryValues(typeof(int), Int32.MinValue, (int)0, Int32.MaxValue), + new BoundaryValues(typeof(uint), UInt32.MinValue, UInt32.MaxValue), + new BoundaryValues(typeof(long), Int64.MinValue, (long)0, Int64.MaxValue), + new BoundaryValues(typeof(ulong), UInt64.MinValue, UInt64.MaxValue), + new BoundaryValues(typeof(float), Single.Epsilon, Single.MaxValue, Single.MinValue, Single.NaN, Single.NegativeInfinity, Single.PositiveInfinity, (float)0 ), + new BoundaryValues(typeof(double), Double.Epsilon, Double.MaxValue, Double.MinValue, Double.NaN, Double.NegativeInfinity, Double.PositiveInfinity, (double)0 ), + new BoundaryValues(typeof(string), null, String.Empty ), + new BoundaryValues(typeof(DateTime), DateTime.MinValue, DateTime.MaxValue, new DateTime(1099, 1, 1), Utils.TimeBase, new DateTime(2039, 4, 4), new DateTime(2001, 9, 11, 9, 15, 0, DateTimeKind.Local)), + new BoundaryValues(typeof(Guid), Guid.Empty), + new BoundaryValues(typeof(Uuid), Uuid.Empty), + new BoundaryValues(typeof(byte[]), null, new byte[0]), + new BoundaryValues(typeof(XmlElement), null ), + new BoundaryValues(typeof(NodeId), null, NodeId.Null, new NodeId(Guid.Empty), new NodeId(String.Empty), new NodeId(new byte[0]) ), + new BoundaryValues(typeof(ExpandedNodeId), null, ExpandedNodeId.Null, new ExpandedNodeId(Guid.Empty), new ExpandedNodeId(String.Empty), new ExpandedNodeId(new byte[0]) ), + new BoundaryValues(typeof(QualifiedName), null, QualifiedName.Null ), + new BoundaryValues(typeof(LocalizedText), null, LocalizedText.Null ), + new BoundaryValues(typeof(StatusCode), StatusCodes.Good, StatusCodes.Uncertain, StatusCodes.Bad ), + new BoundaryValues(typeof(ExtensionObject), ExtensionObject.Null), + }; + #endregion + + #region Private Methods + /// + /// Loads some string data from a resource. + /// + private static SortedDictionary LoadStringData(string resourceName) + { + SortedDictionary dictionary = new SortedDictionary(); + + try + { + string locale = null; + List tokens = null; + + Stream istrm = typeof(DataGenerator).GetTypeInfo().Assembly.GetManifestResourceStream(resourceName); + if (istrm == null) + { + // try to load from app directory + FileInfo file = new FileInfo(resourceName); + istrm = file.OpenRead(); + } + + using (StreamReader reader = new StreamReader(istrm)) + { + for (string line = reader.ReadLine(); line != null; line = reader.ReadLine()) + { + string token = line.Trim(); + + if (String.IsNullOrEmpty(token)) + { + continue; + } + + if (token.StartsWith("=", StringComparison.Ordinal)) + { + if (locale != null) + { + dictionary.Add(locale, tokens.ToArray()); + } + + locale = token.Substring(1); + tokens = new List(); + continue; + } + + tokens.Add(token); + } + } + + return dictionary; + } + catch (Exception) + { + return dictionary; + } + } + + /// + /// Randomly selects a boundary value for type. + /// + private object GetBoundaryValue(Type type) + { + if (type == null) + { + return null; + } + + object[] boundaryValues = null; + + if (!m_boundaryValues.TryGetValue(type.Name, out boundaryValues)) + { + return null; + } + + if (boundaryValues == null || boundaryValues.Length == 0) + { + return null; + } + + int index = m_random.NextInt32(boundaryValues.Length - 1); + + if (type.IsInstanceOfType(boundaryValues[index])) + { + return boundaryValues[index]; + } + + return null; + } + + /// + /// Returns a positive integer between the specified values. + /// + private int GetRandomRange(int min, int max) + { + if (min < 0) + { + min = 0; + } + + if (max < 0) + { + max = 0; + } + + if (min >= max) + { + return min; + } + + return m_random.NextInt32(max - min) + min; + } + + + /// + /// Returns a random value of the specified type. + /// + private object GetRandom(Type expectedType) + { + var builtInType = TypeInfo.Construct(expectedType).BuiltInType; + object value = GetRandom(builtInType); + + if (builtInType == BuiltInType.Guid && + expectedType == typeof(Guid)) + { + return (Guid)(Uuid)value; + } + + return value; + } + + /// + /// Returns a random locale. + /// + private string GetRandomLocale() + { + int index = m_random.NextInt32(m_availableLocales.Length - 1); + return m_availableLocales[index]; + } + + /// + /// Creates a string from the tokens for the locale. + /// + private string CreateString(string locale, bool isSymbol) + { + string[] tokens = null; + + if (!m_tokenValues.TryGetValue(locale, out tokens)) + { + tokens = m_tokenValues["en-US"]; + } + + int length = 0; + + if (isSymbol) + { + length = m_random.NextInt32(2) + 1; + } + else + { + length = m_random.NextInt32(m_maxStringLength) + 1; + } + + StringBuilder buffer = new StringBuilder(); + + while (buffer.Length < length) + { + if (!isSymbol && buffer.Length > 0) + { + buffer.Append(' '); + } + + int index = m_random.NextInt32(tokens.Length - 1); + buffer.Append(tokens[index]); + + if (!isSymbol && m_random.NextInt32(1) != 0) + { + index = m_random.NextInt32(kPunctuation.Length - 1); + buffer.Append(kPunctuation[index]); + } + } + + return buffer.ToString(); + } + #endregion + + #region Private Fields + private IRandomSource m_random; + private int m_maxArrayLength; + private int m_maxStringLength; + private DateTime m_minDateTimeValue; + private DateTime m_maxDateTimeValue; + private int m_boundaryValueFrequency; + private int m_maxXmlAttributeCount; + private int m_maxXmlElementCount; + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private SortedDictionary m_boundaryValues; + private string[] m_availableLocales; + private SortedDictionary m_tokenValues; + private const string kPunctuation = "`~!@#$%^&*()_-+={}[]:\"';?><,./"; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/HiResClock.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/HiResClock.cs new file mode 100644 index 00000000..69162872 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/HiResClock.cs @@ -0,0 +1,135 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + + +using System; +using System.Diagnostics; + +namespace Opc.Ua +{ + /// + /// Produces high resolution timestamps. + /// + public class HiResClock + { + /// + /// Returns the current UTC time with a high resolution. + /// + /// + /// This Utc time does not change if the system time is changed. + /// It returns the Utc time elapsed since the application started. + /// + public static DateTime UtcNow + { + get + { + if (s_Default.m_disabled) + { + return DateTime.UtcNow; + } + long counter = Stopwatch.GetTimestamp(); + decimal ticks = (counter - s_Default.m_baseline) * s_Default.m_ratio; + return new DateTime((long)ticks + s_Default.m_offset); + } + } + + /// + /// Returns a monotonic increasing tick count in milliseconds. + /// + public static long TickCount64 + { + get + { + if (s_Default.m_disabled) + { + return (long)(DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond); + } + return (long)(Stopwatch.GetTimestamp() / s_Default.m_ticksPerMillisecond); + } + } + + /// + /// Return the frequency of the ticks. + /// + public static long Frequency => s_Default.m_disabled ? + TimeSpan.TicksPerSecond : s_Default.m_frequency; + + /// + /// Return the number of ticks per millisecond. + /// + public static double TicksPerMillisecond => s_Default.m_disabled ? + TimeSpan.TicksPerMillisecond : s_Default.m_ticksPerMillisecond; + + /// + /// Disables the hires clock. + /// + public static bool Disabled + { + get + { + return s_Default.m_disabled; + } + + set + { + // do not enable if unsupported + if (Stopwatch.IsHighResolution) + { + if (s_Default.m_disabled && !value) + { + // reset baseline + s_Default = new HiResClock(); + } + else + { + s_Default.m_disabled = value; + } + } + } + } + + /// + /// Constructs a HiRes clock class. + /// + private HiResClock() + { + m_offset = DateTime.UtcNow.Ticks; + if (!Stopwatch.IsHighResolution) + { + m_frequency = TimeSpan.TicksPerSecond; + m_ticksPerMillisecond = TimeSpan.TicksPerMillisecond; + m_baseline = m_offset; + m_disabled = true; + } + else + { + m_baseline = Stopwatch.GetTimestamp(); + m_frequency = Stopwatch.Frequency; + m_ticksPerMillisecond = m_frequency / 1000.0; + } + m_ratio = ((decimal)TimeSpan.TicksPerSecond) / m_frequency; + } + + /// + /// Defines a global instance. + /// + private static HiResClock s_Default = new HiResClock(); + + private long m_frequency; + private long m_baseline; + private long m_offset; + private double m_ticksPerMillisecond; + private decimal m_ratio; + private bool m_disabled; + } + +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/LocalizedData.txt b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/LocalizedData.txt new file mode 100644 index 00000000..7d7bfadb --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/LocalizedData.txt @@ -0,0 +1,225 @@ +=en-US +Strawberry +Grape +Banana +Pineapple +Lime +Lemon +Blueberry +Peach +Mango +Red +Blue +Green +Yellow +Black +White +Purple +Cat +Dog +Pig +Horse +Rat +Cow +Sheep +Snake +Monkey +Elephant +Dragon +=ru +яблоко +Виноградина +Банан +Ананас +Известка +Лимон +Голубика +Персик +Манго +Красно +Голубо +Зеленыйцвет +Желтыйцвет +Чернота +Бело +Пурпурово +Кот +Собака +Свинья +Лошадь +Крыса +Корова +Овцы +Змейка +Обезьяна +Слон +Дракон +=jp +いちご +ブドウ +バナナ +パイナップル +石灰 +レモン +ブルーベリー +モモ +マンゴ +赤い +青い +緑 +黄色 +黒 +白い +紫色 +猫 +犬 +ブタ +馬 +ラット +牛 +ヒツジ +ヘビ +猿 +象 +ドラゴン +=zh-CN +草莓 +葡萄 +香蕉 +菠萝 +石灰 +柠檬 +蓝莓 +桃子 +芒果 +红色 +蓝色 +绿色 +黄色 +黑色 +白色 +紫色 +猫 +狗 +猪 +马 +鼠 +母牛 +绵羊 +蛇 +猴子 +大象 +龙 +=ko +딸기 +포도 +바나나 +파인애플 +석회 +레몬 +들쭉 +복숭아 +망고 +빨간 +파란 +녹색 +황색 +검정 +백색 +자주색 +고양이 +개 +돼지 +말 +쥐 +암소 +양 +뱀 +원숭이 +코끼리 +용 +=el +Φράουλα +Σταφύλι +Μπανάνα +Ανανάς +Ασβέστης +Λεμόνι +Βακκίνιο +Ροδάκινο +Μάγκο +Κόκκινος +Μπλε +Πράσινος +Κίτρινος +Μαύρος +Ασπρος +Πορφυρός +Γάτα +Σκυλί +Χοίρος +Αλογο +Αρουραίος +Αγελάδα +Πρόβατα +Φίδι +Πίθηκος +Ελέφαντας +Δράκος +=es-ES +Fresa +Uva +Banana +Piña +Lima +Limón +Arándano +Melocotón +Mango +Rojo +Azul +Verde +Amarillo +Negro +Blanco +Púrpura +Gato +Perro +Cerdo +Caballo +Rata +Vaca +Oveja +Serpiente +Mono +Elefante +Dragón +=de-DE +Erdbeere +Weintraube +Banane +Ananas +Limette +Zitrone +Blaubeere +Pfirsich +Mango +Rot +Blau +Grün +Gelb +Schwarz +Weiß +Lila +Katze +Hund +Schwein +Pferd +Ratte +Kuh +Schaf +Schlange +Affe +Elefant +Drache += diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/NamespaceTable.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/NamespaceTable.cs new file mode 100644 index 00000000..ea5a1285 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/NamespaceTable.cs @@ -0,0 +1,339 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Xml; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.ServiceModel; +using System.Runtime.Serialization; + +namespace Opc.Ua +{ + /// + /// A thread safe table of string constants. + /// + public class StringTable + { + #region Constructors + /// + /// Creates an empty collection. + /// + public StringTable() + { + m_strings = new List(); + + #if DEBUG + m_instanceId = Interlocked.Increment(ref m_globalInstanceCount); + #endif + } + + /// + /// Creates an empty collection which is marked as shared. + /// + public StringTable(bool shared) + { + m_strings = new List(); + + #if DEBUG + m_shared = shared; + m_instanceId = Interlocked.Increment(ref m_globalInstanceCount); + #endif + } + + /// + /// Copies a list of strings. + /// + public StringTable(IEnumerable strings) + { + Update(strings); + + #if DEBUG + m_instanceId = Interlocked.Increment(ref m_globalInstanceCount); + #endif + } + #endregion + + #region Public Members + /// + /// The synchronization object. + /// + public object SyncRoot + { + get { return m_lock; } + } + + /// + /// Returns a unique identifier for the table instance. Used to debug problems with shared tables. + /// + public int InstanceId + { + #if DEBUG + get { return m_instanceId; } + #else + get { return 0; } + #endif + } + + /// + /// Updates the table of namespace uris. + /// + public void Update(IEnumerable strings) + { + if (strings == null) throw new ArgumentNullException(nameof(strings)); + + lock (m_lock) + { + m_strings = new List(strings); + + #if DEBUG + if (m_shared) + { + for (int ii = 0; ii < m_strings.Count; ii++) + { + Utils.Trace("WARNING: Adding '{0}' to shared StringTable #{1}.", m_strings[ii], m_instanceId); + } + } + #endif + } + } + + /// + /// Adds a string to the end of the table. + /// + public int Append(string value) + { + if (String.IsNullOrEmpty(value)) + { + throw new ArgumentNullException(nameof(value)); + } + + #if DEBUG + if (m_shared) + { + Utils.Trace("WARNING: Adding '{0}' to shared StringTable #{1}.", value, m_instanceId); + } + #endif + + lock (m_lock) + { + m_strings.Add(value); + return m_strings.Count-1; + } + } + + /// + /// Returns the namespace uri at the specified index. + /// + public string GetString(uint index) + { + lock (m_lock) + { + if (index >= 0 && index < m_strings.Count) + { + return m_strings[(int)index]; + } + + return null; + } + } + + /// + /// Returns the index of the specified namespace uri. + /// + public int GetIndex(string value) + { + lock (m_lock) + { + if (String.IsNullOrEmpty(value)) + { + return -1; + } + + return m_strings.IndexOf(value); + } + } + + /// + /// Returns the index of the specified namespace uri, adds it if it does not exist. + /// + public ushort GetIndexOrAppend(string value) + { + if (String.IsNullOrEmpty(value)) + { + throw new ArgumentNullException(nameof(value)); + } + + lock (m_lock) + { + int index = m_strings.IndexOf(value); + + if (index == -1) + { + #if DEBUG + if (m_shared) + { + Utils.Trace("WARNING: Adding '{0}' to shared StringTable #{1}.", value, m_instanceId); + } + #endif + + m_strings.Add(value); + return (ushort)(m_strings.Count-1); + } + + return (ushort)index; + } + } + + /// + /// Returns the contexts of the table. + /// + public string[] ToArray() + { + lock (m_lock) + { + return m_strings.ToArray(); + } + } + + /// + /// Returns the number of entries in the table. + /// + public int Count + { + get + { + lock (m_lock) + { + return m_strings.Count; + } + } + } + + /// + /// Creates a mapping between the URIs in a source table and the indexes in the current table. + /// + /// The string table to map. + /// if set to true if missing URIs should be added to the current tables. + /// A list of indexes in the current table. + public ushort[] CreateMapping(StringTable source, bool updateTable) + { + if (source == null) + { + return null; + } + + ushort[] mapping = new ushort[source.Count]; + + for (uint ii = 0; ii < source.Count; ii++) + { + string uri = source.GetString(ii); + + int index = GetIndex(uri); + + if (index < 0) + { + if (!updateTable) + { + mapping[ii] = UInt16.MaxValue; + continue; + } + + index = Append(uri); + } + + mapping[ii] = (ushort)index; + } + + return mapping; + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private List m_strings; + + #if DEBUG + internal bool m_shared; + internal int m_instanceId; + private static int m_globalInstanceCount; + #endif + #endregion + } + + /// + /// The table of namespace uris for a server. + /// + public class NamespaceTable : StringTable + { + #region Constructors + /// + /// Creates an empty collection. + /// + public NamespaceTable() + { + Append(Namespaces.OpcUa); + } + + /// + /// Creates an empty collection which is marked as shared. + /// + public NamespaceTable(bool shared) + { + Append(Namespaces.OpcUa); + + #if DEBUG + m_shared = shared; + #endif + } + + /// + /// Copies a list of strings. + /// + public NamespaceTable(IEnumerable namespaceUris) + { + Update(namespaceUris); + } + #endregion + + #region Public Members + /// + /// Updates the table of namespace uris. + /// + public new void Update(IEnumerable namespaceUris) + { + if (namespaceUris == null) throw new ArgumentNullException(nameof(namespaceUris)); + + // check that first entry is the UA namespace. + int ii = 0; + + foreach (string namespaceUri in namespaceUris) + { + if (ii == 0 && namespaceUri != Namespaces.OpcUa) + { + throw new ArgumentException("The first namespace in the table must be the OPC-UA namespace."); + } + + ii++; + + if (ii == 2) + { + break; + } + } + + base.Update(namespaceUris); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/NumericRange.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/NumericRange.cs new file mode 100644 index 00000000..e5e49fb3 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/NumericRange.cs @@ -0,0 +1,1119 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; + +namespace Opc.Ua +{ + /// + /// A class that stores a numeric range. + /// + /// + /// A class that stores a numeric range. + /// + public struct NumericRange : IFormattable + { + #region Constructors + /// + /// Initializes the object with a begin index. + /// + /// + /// Initializes the object with a begin index. + /// + /// The starting point of the range + /// Thrown when the parameter is less than -1 + public NumericRange(int begin) + { + if (begin < -1) + { + throw new ArgumentOutOfRangeException(nameof(begin)); + } + + m_begin = -1; + m_end = -1; + m_subranges = null; + + Begin = begin; + } + + /// + /// Initializes the object with a begin and end indexes. + /// + /// + /// Initializes the object with a begin and end indexes. + /// + /// The end of the range + /// The beginning of the range + public NumericRange(int begin, int end) + { + m_begin = -1; + m_end = -1; + m_subranges = null; + + Begin = begin; + End = end; + } + #endregion + + #region Public Properties + /// + /// The begining of the numeric range. + /// + /// + /// The begining of the numeric range. + /// + /// Thrown when the value is less than -1, or when the value is greater than the end + public int Begin + { + get { return m_begin; } + + set + { + if (value < -1) + { + throw new ArgumentOutOfRangeException(nameof(value), "Begin"); + } + + if (m_end != -1 && (m_begin > m_end || m_begin < 0)) + { + throw new ArgumentOutOfRangeException(nameof(value), "Begin > End"); + } + + m_begin = value; + } + } + + /// + /// The end of the numeric range. + /// + /// + /// The end of the numeric range. + /// + /// Thrown when the value is less + /// than -1 or when the end is less than the beginning + public int End + { + get { return m_end; } + + set + { + if (value < -1) + { + throw new ArgumentOutOfRangeException(nameof(value), "End"); + } + + if (m_end != -1 && (m_begin > m_end || m_begin < 0)) + { + throw new ArgumentOutOfRangeException(nameof(value), "Begin > End"); + } + + m_end = value; + } + } + + /// + /// The number of elements specified by the range. + /// + /// + /// The number of elements specified by the range. + /// + public int Count + { + get + { + if (m_begin == -1) + { + return 0; + } + + if (m_end == -1) + { + return 1; + } + + return m_end - m_begin + 1; + } + } + + /// + /// Gets the number of dimensions in the range. + /// + /// The number of dimensions. + public int Dimensions + { + get + { + if (m_begin == -1) + { + return 0; + } + + if (m_subranges == null) + { + return 1; + } + + return m_subranges.Length; + } + } + + /// + /// Gets or sets the sub ranges for multidimensional ranges. + /// + /// The sub ranges. + public NumericRange[] SubRanges + { + get + { + return m_subranges; + } + + set + { + m_subranges = value; + } + } + #endregion + + #region Public Methods + /// + /// Ensures the bounds are valid values for the object passed in. + /// + /// + /// Returns false if the object is not indexable or if the numeric range is out-of-bounds. + /// + /// The value to check + public bool EnsureValid(object value) + { + int count = -1; + + // check for collections. + ICollection collection = value as ICollection; + + if (collection != null) + { + count = collection.Count; + } + else + { + // check for arrays. + Array array = value as Array; + + if (array != null) + { + count = array.Length; + } + } + + // ensure bounds are less than count. + return EnsureValid(count); + } + + /// + /// Ensures the bounds are valid values for a collection with the specified length. + /// + /// + /// Returns false if the numeric range is out-of-bounds. + /// + /// The value to check is within range + public bool EnsureValid(int count) + { + // object not indexable. + if (count == -1) + { + return false; + } + + // check bounds. + if (m_begin > count || m_end >= count) + { + return false; + } + + // set begin. + if (m_begin < 0) + { + m_begin = 0; + } + + // set end. + if (m_end < 0) + { + m_end = count; + } + + return true; + } + #endregion + + #region Overridden Methods + /// + /// Returns true if the objects are equal. + /// + /// + /// Returns true if the objects are equal. + /// + /// The object to test against this + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + NumericRange? range = obj as NumericRange?; + + if (range == null) + { + return false; + } + + return (range.Value.m_begin == m_begin) && (range.Value.m_end == m_end); + } + + /// + /// 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 ==(NumericRange value1, NumericRange value2) + { + return value1.Equals(value2); + } + + /// + /// Returns true if the objects are not equal. + /// + /// + /// Returns true if the objects are not equal. + /// + /// The first value to compare + /// The second value to compare + public static bool operator !=(NumericRange value1, NumericRange value2) + { + return !value1.Equals(value2); + } + + /// + /// Returns a suitable hash code for the object. + /// + /// + /// Returns a suitable hash code for the object. + /// + public override int GetHashCode() + { + return m_begin.GetHashCode() + m_end.GetHashCode(); + } + + /// + /// Returns the string representation of the object. + /// + /// + /// Returns the string representation of the object. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Formats the numeric range as a string. + /// + /// + /// Formats the numeric range as a string. + /// + /// (Unused) Always pass NULL/NOTHING + /// (Unused) Always pass NULL/NOTHING + /// Thrown when a non null/nothing is passed for either parameter + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + if (m_end < 0) + { + return String.Format(formatProvider, "{0}", m_begin); + } + + return String.Format(formatProvider, "{0}:{1}", m_begin, m_end); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Static Members + /// + /// An empty numeric range. + /// + /// + /// An empty numeric range. + /// + public static NumericRange Empty => s_Empty; + + private static readonly NumericRange s_Empty = new NumericRange(-1, -1); + + /// + /// Parses a string representing a numeric range. + /// + /// The text to parse, prior to checking it is within the allowed range + /// The parsed range. + /// The reason for any error. + public static ServiceResult Validate(string textToParse, out NumericRange range) + { + range = NumericRange.Empty; + + if (String.IsNullOrEmpty(textToParse)) + { + return ServiceResult.Good; + } + + // check for multidimensional ranges. + int index = textToParse.IndexOf(','); + + if (index >= 0) + { + int start = 0; + List subranges = new List(); + + for (int ii = 0; ii < textToParse.Length; ii++) + { + char ch = textToParse[ii]; + + if (ch == ',' || ii == textToParse.Length - 1) + { + NumericRange subrange = new NumericRange(); + string subtext = (ch == ',') ? textToParse.Substring(start, ii - start) : textToParse.Substring(start); + ServiceResult result = Validate(subtext, out subrange); + + if (ServiceResult.IsBad(result)) + { + return result; + } + + subranges.Add(subrange); + start = ii + 1; + } + } + + // must have at least two entries. + if (subranges.Count < 2) + { + return StatusCodes.BadIndexRangeInvalid; + } + + range.m_begin = subranges[0].Begin; + range.m_end = subranges[0].End; + range.m_subranges = subranges.ToArray(); + + return ServiceResult.Good; + } + + try + { + index = textToParse.IndexOf(':'); + + if (index != -1) + { + range.Begin = Convert.ToInt32(textToParse.Substring(0, index), CultureInfo.InvariantCulture); + range.End = Convert.ToInt32(textToParse.Substring(index + 1), CultureInfo.InvariantCulture); + + if (range.End < 0) + { + return ServiceResult.Create( + StatusCodes.BadIndexRangeInvalid, + "NumericRange does not have a valid end index ({0}).", + range.End); + } + + if (range.Begin >= range.End) + { + return ServiceResult.Create( + StatusCodes.BadIndexRangeInvalid, + "NumericRange does not have a start index that is less than the end index ({0}).", + range); + } + } + else + { + range.Begin = Convert.ToInt32(textToParse, CultureInfo.InvariantCulture); + range.End = -1; + } + + if (range.Begin < 0) + { + return ServiceResult.Create( + StatusCodes.BadIndexRangeInvalid, + "NumericRange does not have a valid start index ({0}).", + range.Begin); + } + } + catch (Exception e) + { + return ServiceResult.Create( + e, + StatusCodes.BadIndexRangeInvalid, + "NumericRange cannot be parsed ({0}).", + textToParse); + } + + return ServiceResult.Good; + } + + /// + /// Applies the multidimensional index range. + /// + private StatusCode ApplyMultiRange(ref object value) + { + Array array = value as Array; + TypeInfo typeInfo = null; + + // check for matrix. + if (array == null) + { + Matrix matrix = value as Matrix; + + if (matrix == null || matrix.Dimensions.Length != m_subranges.Length) + { + value = null; + return StatusCodes.BadIndexRangeNoData; + } + + array = matrix.ToArray(); + } + + typeInfo = TypeInfo.Construct(array); + + // check for matching dimensions. + NumericRange? finalRange = null; + + if (m_subranges.Length > typeInfo.ValueRank) + { + if (typeInfo.BuiltInType == BuiltInType.ByteString || typeInfo.BuiltInType == BuiltInType.String) + { + if (m_subranges.Length == typeInfo.ValueRank + 1) + { + finalRange = m_subranges[m_subranges.Length - 1]; + } + } + + if (finalRange == null) + { + value = null; + return StatusCodes.BadIndexRangeNoData; + } + } + + // create the dimensions of the target. + int[] dimensions = new int[typeInfo.ValueRank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + if (m_subranges.Length > ii) + { + if (m_subranges[ii].m_begin >= array.GetLength(ii)) + { + value = null; + return StatusCodes.BadIndexRangeNoData; + } + + dimensions[ii] = m_subranges[ii].Count; + } + else + { + dimensions[ii] = array.GetLength(ii); + } + } + + Array subset = TypeInfo.CreateArray(typeInfo.BuiltInType, dimensions); + + int length = subset.Length; + int[] dstIndexes = new int[dimensions.Length]; + int[] srcIndexes = new int[dimensions.Length]; + + bool dataFound = false; + + for (int ii = 0; ii < length; ii++) + { + int divisor = subset.Length; + bool outOfRange = false; + + for (int jj = 0; jj < dstIndexes.Length; jj++) + { + divisor /= dimensions[jj]; + dstIndexes[jj] = (ii / divisor) % dimensions[jj]; + srcIndexes[jj] = dstIndexes[jj] + m_subranges[jj].m_begin; + + if (array.GetLength(jj) <= srcIndexes[jj]) + { + outOfRange = true; + break; + } + } + + if (outOfRange) + { + continue; + } + + object element = array.GetValue(srcIndexes); + + if (element != null) + { + if (finalRange != null) + { + StatusCode result = finalRange.Value.ApplyRange(ref element); + + if (StatusCode.IsBad(result)) + { + if (result != StatusCodes.BadIndexRangeNoData) + { + value = null; + return result; + } + + continue; + } + } + + dataFound = true; + subset.SetValue(element, dstIndexes); + } + } + + if (!dataFound) + { + value = null; + return StatusCodes.BadIndexRangeNoData; + } + + value = subset; + return StatusCodes.Good; + } + + /// + /// Applies the multidimensional index range. + /// + public StatusCode UpdateRange(ref object dst, object src) + { + // check for trivial case. + if (dst == null) + { + return StatusCodes.BadIndexRangeNoData; + } + + TypeInfo dstTypeInfo = TypeInfo.Construct(dst); + + // check for subset of string or byte string. + if (dstTypeInfo.ValueRank == ValueRanks.Scalar) + { + if (this.Dimensions > 1) + { + return StatusCodes.BadIndexRangeInvalid; + } + + // check for subset of string. + if (dstTypeInfo.BuiltInType == BuiltInType.String) + { + string srcString = src as string; + char[] dstString = ((string)dst).ToCharArray(); + + if (srcString == null || srcString.Length != this.Count) + { + return StatusCodes.BadIndexRangeInvalid; + } + + if (this.m_begin >= dstString.Length || ((this.m_end > 0 && this.m_end >= dstString.Length))) + { + return StatusCodes.BadIndexRangeNoData; + } + + for (int jj = 0; jj < srcString.Length; jj++) + { + dstString[this.m_begin + jj] = srcString[jj]; + } + + dst = new string(dstString); + return StatusCodes.Good; + } + + // update elements within a byte string. + else if (dstTypeInfo.BuiltInType == BuiltInType.ByteString) + { + byte[] srcString = src as byte[]; + byte[] dstString = (byte[])dst; + + if (srcString == null || srcString.Length != this.Count) + { + return StatusCodes.BadIndexRangeInvalid; + } + + if (this.m_begin >= dstString.Length || ((this.m_end > 0 && this.m_end >= dstString.Length))) + { + return StatusCodes.BadIndexRangeNoData; + } + + for (int jj = 0; jj < srcString.Length; jj++) + { + dstString[this.m_begin + jj] = srcString[jj]; + } + + return StatusCodes.Good; + } + + // index range not supported. + return StatusCodes.BadIndexRangeInvalid; + } + + Array srcArray = src as Array; + Array dstArray = dst as Array; + + // check for destinations specified as a matrix. + if (dstArray == null) + { + Matrix matrix = dst as Matrix; + + if (matrix == null || m_subranges == null || matrix.Dimensions.Length != m_subranges.Length) + { + return StatusCodes.BadIndexRangeInvalid; + } + + dstArray = matrix.ToArray(); + } + + // check for input specified as a matrix. + if (srcArray == null) + { + Matrix matrix = src as Matrix; + + if (matrix == null || m_subranges == null || matrix.Dimensions.Length != m_subranges.Length) + { + return StatusCodes.BadIndexRangeInvalid; + } + + srcArray = matrix.ToArray(); + } + + TypeInfo srcTypeInfo = TypeInfo.Construct(srcArray); + + if (srcTypeInfo.BuiltInType != dstTypeInfo.BuiltInType) + { + return StatusCodes.BadIndexRangeInvalid; + } + + if (srcTypeInfo.ValueRank != dstTypeInfo.ValueRank) + { + return StatusCodes.BadIndexRangeInvalid; + } + + // handle one dimension. + if (m_subranges == null) + { + if (dstTypeInfo.ValueRank > 1) + { + return StatusCodes.BadIndexRangeInvalid; + } + + if (srcArray.Length != this.Count) + { + return StatusCodes.BadIndexRangeInvalid; + } + + if (this.m_begin >= dstArray.Length || ((this.m_end > 0 && this.m_end >= dstArray.Length))) + { + return StatusCodes.BadIndexRangeNoData; + } + + for (int jj = 0; jj < srcArray.Length; jj++) + { + dstArray.SetValue(srcArray.GetValue(jj), this.m_begin + jj); + } + + if (dst is Matrix) + { + // dstArray is a copy of the data of the dst Matrix so create new Matrix with modified data + dst = new Matrix(dstArray, dstTypeInfo.BuiltInType); + } + + return StatusCodes.Good; + } + + // check for matching dimensions. + NumericRange? finalRange = null; + + if (m_subranges != null && m_subranges.Length > srcTypeInfo.ValueRank) + { + if (srcTypeInfo.BuiltInType == BuiltInType.ByteString || srcTypeInfo.BuiltInType == BuiltInType.String) + { + if (m_subranges.Length == srcTypeInfo.ValueRank + 1) + { + finalRange = m_subranges[m_subranges.Length - 1]; + } + } + + if (finalRange == null) + { + return StatusCodes.BadIndexRangeNoData; + } + } + + // get the dimensions of the array being copied. + int srcCount = 1; + int[] dimensions = new int[srcTypeInfo.ValueRank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + if (m_subranges.Length < ii) + { + if (m_subranges[ii].Count != srcArray.GetLength(ii)) + { + return StatusCodes.BadIndexRangeInvalid; + } + } + + dimensions[ii] = srcArray.GetLength(ii); + srcCount *= dimensions[ii]; + } + + // check that the index range falls with the target array. + int[] dstIndexes = new int[dimensions.Length]; + + for (int ii = 0; ii < srcCount; ii++) + { + // check target dimensions. + int divisor = srcCount; + + for (int jj = 0; jj < dimensions.Length; jj++) + { + divisor /= dimensions[jj]; + int index = (ii / divisor) % dimensions[jj]; + int start = 0; + + if (m_subranges.Length > jj) + { + start = m_subranges[jj].m_begin; + } + + if (start + index >= dstArray.GetLength(jj)) + { + return StatusCodes.BadIndexRangeNoData; + } + + dstIndexes[jj] = start + index; + } + + if (finalRange == null) + { + continue; + } + + // check for subset of string or byte string. + int last = finalRange.Value.m_begin; + + if (finalRange.Value.m_end > 0) + { + last = finalRange.Value.m_end; + } + + object element = dstArray.GetValue(dstIndexes); + + // check for subset of string. + if (dstTypeInfo.BuiltInType == BuiltInType.String) + { + string str = (string)element; + + if (str == null || last >= str.Length) + { + return StatusCodes.BadIndexRangeNoData; + } + } + + // check for subset of byte string. + else if (dstTypeInfo.BuiltInType == BuiltInType.ByteString) + { + byte[] str = (byte[])element; + + if (str == null || last >= str.Length) + { + return StatusCodes.BadIndexRangeNoData; + } + } + } + + // copy data. + int[] srcIndexes = new int[dimensions.Length]; + + for (int ii = 0; ii < srcCount; ii++) + { + // calculate dimensions. + int divisor = srcCount; + + for (int jj = 0; jj < dimensions.Length; jj++) + { + divisor /= dimensions[jj]; + int index = (ii / divisor) % dimensions[jj]; + int start = 0; + + if (m_subranges.Length > jj) + { + start = m_subranges[jj].m_begin; + } + + if (start + index >= dstArray.GetLength(jj)) + { + return StatusCodes.BadIndexRangeNoData; + } + + srcIndexes[jj] = index; + dstIndexes[jj] = start + index; + } + + // get the element to copy. + object element1 = srcArray.GetValue(srcIndexes); + + if (finalRange == null) + { + dstArray.SetValue(element1, dstIndexes); + continue; + } + + object element2 = dstArray.GetValue(dstIndexes); + + // update elements within a string. + if (dstTypeInfo.BuiltInType == BuiltInType.String) + { + string srcString = (string)element1; + char[] dstString = ((string)element2).ToCharArray(); + + if (srcString != null) + { + for (int jj = 0; jj < srcString.Length; jj++) + { + dstString[finalRange.Value.m_begin + jj] = srcString[jj]; + } + } + + dstArray.SetValue(new string(dstString), dstIndexes); + } + + // update elements within a byte string. + else if (dstTypeInfo.BuiltInType == BuiltInType.ByteString) + { + byte[] srcString = (byte[])element1; + byte[] dstString = (byte[])element2; + + if (srcString != null) + { + for (int jj = 0; jj < srcString.Length; jj++) + { + dstString[finalRange.Value.m_begin + jj] = srcString[jj]; + } + } + } + } + + if(dst is Matrix) + { + // dstArray is a copy of the data of the dst Matrix so create new Matrix with modified data + dst = new Matrix(dstArray, dstTypeInfo.BuiltInType); + } + + return StatusCodes.Good; + } + + /// + /// Applys the index range to an array value. + /// + /// + /// Replaces the value + /// + /// The array to subset. + /// The reason for the failure if the range could not be applied. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1007:UseGenericsWhereAppropriate")] + public StatusCode ApplyRange(ref object value) + { + // check for empty range. + if (this.m_begin == -1 && this.m_end == -1) + { + return StatusCodes.Good; + } + + // nothing to do for null values. + if (value == null) + { + return StatusCodes.Good; + } + + Array array = value as Array; + + // check for list type. + IList list = null; + TypeInfo typeInfo = null; + + if (array == null) + { + list = value as IList; + + if (list != null) + { + typeInfo = TypeInfo.Construct(list); + } + } + + bool isString = false; + + // check for array. + if (array == null && list == null) + { + // check for string. + String chars = value as String; + + if (chars != null) + { + isString = true; + array = chars.ToCharArray(); + } + } + + // check for multidimensional arrays. + if (m_subranges != null) + { + return ApplyMultiRange(ref value); + } + + if(list == null && array == null) + { + value = null; + return StatusCodes.BadIndexRangeNoData; + } + + // get length. + int length = 0; + + if (list != null) + { + length = list.Count; + } + else + { + length = array.Length; + } + + int begin = this.m_begin; + + // choose a default start. + if (begin == -1) + { + begin = 0; + } + + // return an empty array if begin is beyond the end of the array. + if (begin >= length) + { + value = null; + return StatusCodes.BadIndexRangeNoData; + } + + // only copy if actually asking for a subset. + int end = this.m_end; + + // check if looking for a single element. + if (end == -1) + { + end = begin; + } + + // ensure end of array is not exceeded. + else if (end >= length - 1) + { + end = length - 1; + } + + Array clone = null; + int subLength = end - begin + 1; + + // check for list. + if (list != null && typeInfo != null) + { + clone = TypeInfo.CreateArray(typeInfo.BuiltInType, subLength); + + for (int ii = begin; ii < subLength; ii++) + { + clone.SetValue(list[ii], ii - begin); + } + + return StatusCodes.Good; + } + + // handle array or string. + if (isString) + { + clone = new char[subLength]; + } + else + { + clone = Array.CreateInstance(array.GetType().GetElementType(), subLength); + } + + Array.Copy(array, begin, clone, 0, clone.Length); + + if (isString) + { + value = new string((char[])clone); + } + else + { + value = clone; + } + + return StatusCodes.Good; + } + + /// + /// Parses a string representing a numeric range. + /// + /// + /// Parses a string representing a numeric range. + /// + /// The text to parse, prior to checking it is within the allowed range + /// Thrown when the numeric value of the parsed text is out of range + public static NumericRange Parse(string textToParse) + { + NumericRange range = NumericRange.Empty; + + ServiceResult result = Validate(textToParse, out range); + + if (ServiceResult.IsBad(result)) + { + throw new ServiceResultException(result); + } + + return range; + } + #endregion + + #region Private Fields + private int m_begin; + private int m_end; + private NumericRange[] m_subranges; + #endregion + + }//class + +}//namespace diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ReadOnlyList.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ReadOnlyList.cs new file mode 100644 index 00000000..fa50e457 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ReadOnlyList.cs @@ -0,0 +1,311 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Opc.Ua +{ + /// + /// A template list class that can be used to expose members of immutable classes. + /// + public class ReadOnlyList : IList, IList + { + #region ICollection Members + /// + /// Wraps an exising list. + /// + public ReadOnlyList(IList list) + { + m_list = list; + + if (m_list == null) + { + m_list = new T[0]; + } + } + + /// + /// Makes a shallow copy of an exising list. + /// + public ReadOnlyList(IList list, bool makeCopy) + { + if (list != null && makeCopy) + { + T[] values = new T[list.Count]; + + for (int ii = 0; ii < values.Length; ii++) + { + values[ii] = list[ii]; + } + + list = values; + } + + m_list = list; + + if (m_list == null) + { + m_list = new T[0]; + } + } + #endregion + + #region ICollection Members + /// + /// The number of items in the list. + /// + public int Count => m_list.Count; + + /// + /// Adds new item to the list (not supported). + /// + public void Add(T item) + { + throw new NotSupportedException(); + } + + /// + /// Removes all item from the list (not supported). + /// + public void Clear() + { + throw new NotSupportedException(); + } + + /// + /// Returns true if the item is in the list. + /// + public bool Contains(T item) + { + return m_list.Contains(item); + } + + /// + /// Copies the elements of the list to an array. + /// + public void CopyTo(T[] array, int arrayIndex) + { + m_list.CopyTo(array, arrayIndex); + } + + /// + /// Indicates that the list is read only. + /// + public bool IsReadOnly => true; + + /// + /// Removes an item from the list (not supported). + /// + public bool Remove(T item) + { + throw new NotSupportedException(); + } + #endregion + + #region IList Members + /// + /// Returns the list of the specified item in the list. + /// + public int IndexOf(T item) + { + return m_list.IndexOf(item); + } + + /// + /// Inserts an item into the list (not supported). + /// + public void Insert(int index, T item) + { + throw new NotSupportedException(); + } + + /// + /// Removes an item from the list (not supported). + /// + public void RemoveAt(int index) + { + throw new NotSupportedException(); + } + + /// + /// Gets the item at the specified index. + /// + public T this[int index] + { + get + { + return m_list[index]; + } + + set + { + throw new NotSupportedException(); + } + } + #endregion + + #region IEnumerable Members + /// + /// Returns an enumerator for the list. + /// + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return m_list.GetEnumerator(); + } + + /// + /// Returns an enumerator for the list. + /// + public IEnumerator GetEnumerator() + { + return m_list.GetEnumerator(); + } + #endregion + + #region Static Operators + /// + /// Creates a read-only list from a list. + /// + /// The list of values. + /// The read-only list. + public static ReadOnlyList ToList(T[] values) + { + return new ReadOnlyList(values); + } + + /// + /// Creates a read-only list from a list. + /// + /// The list of values. + /// The read-only list. + public static implicit operator ReadOnlyList(T[] values) + { + return new ReadOnlyList(values); + } + #endregion + + #region IList Members + /// + /// Adds an item to the . + /// + int IList.Add(object value) + { + throw new NotImplementedException(); + } + + /// + /// Removes all items from the . + /// + void IList.Clear() + { + throw new NotImplementedException(); + } + + /// + /// Determines whether the contains a specific value. + /// + bool IList.Contains(object value) + { + return this.Contains((T)value); + } + + /// + /// Determines the index of a specific item in the . + /// + int IList.IndexOf(object value) + { + return this.IndexOf((T)value); + } + + /// + /// Inserts an item to the at the specified index. + /// + void IList.Insert(int index, object value) + { + throw new NotImplementedException(); + } + + /// + /// Gets a value indicating whether the has a fixed size. + /// + bool IList.IsFixedSize => true; + + /// + /// Gets a value indicating whether the is read-only. + /// + bool IList.IsReadOnly => true; + + /// + /// Removes the first occurrence of a specific object from the . + /// + void IList.Remove(object value) + { + throw new NotImplementedException(); + } + + /// + /// Removes the item at the specified index. + /// + void IList.RemoveAt(int index) + { + throw new NotImplementedException(); + } + + /// + /// Gets or sets the at the specified index. + /// + object IList.this[int index] + { + get + { + return this[index]; + } + + set + { + this[index] = (T)value; + } + } + #endregion + + #region ICollection Members + /// + /// Copies the elements of the to an , starting at a particular index. + /// + void ICollection.CopyTo(Array array, int index) + { + this.CopyTo((T[])array, index); + } + + /// + /// Gets the number of elements contained in the . + /// + int ICollection.Count => this.Count; + + /// + /// Gets a value indicating whether access to the is synchronized (thread safe). + /// + bool ICollection.IsSynchronized => false; + + /// + /// Gets an object that can be used to synchronize access to the . + /// + object ICollection.SyncRoot => false; + #endregion + + #region Private Fields + private IList m_list; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/RelativePath.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/RelativePath.cs new file mode 100644 index 00000000..3c3618ae --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/RelativePath.cs @@ -0,0 +1,909 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + +namespace Opc.Ua +{ + /// + /// A class that stores a relative path + /// + public partial class RelativePath + { + #region Constructors + /// + /// Creates a relative path to follow any hierarchial references to find the specified browse name. + /// + public RelativePath(QualifiedName browseName) : this(ReferenceTypeIds.HierarchicalReferences, false, true, browseName) + { + } + + /// + /// Creates a relative path to follow the forward reference type to find the specified browse name. + /// + public RelativePath(NodeId referenceTypeId, QualifiedName browseName) : this(referenceTypeId, false, true, browseName) + { + } + + /// + /// Creates a relative path to follow the forward reference type to find the specified browse name. + /// + public RelativePath(NodeId referenceTypeId, bool isInverse, bool includeSubtypes, QualifiedName browseName) + { + Initialize(); + + RelativePathElement element = new RelativePathElement(); + + element.ReferenceTypeId = referenceTypeId; + element.IsInverse = isInverse; + element.IncludeSubtypes = includeSubtypes; + element.TargetName = browseName; + + m_elements.Add(element); + } + #endregion + + #region Public Members + /// + /// Formats the relative path as a string. + /// + public string Format(ITypeTable typeTree) + { + RelativePathFormatter formatter = new RelativePathFormatter(this, typeTree); + return formatter.ToString(); + } + + /// + /// Returns true if the relative path does not specify any elements. + /// + public static bool IsEmpty(RelativePath relativePath) + { + if (relativePath != null) + { + return relativePath.Elements.Count == 0; + } + + return true; + } + + /// + /// Parses a relative path formatted as a string. + /// + public static RelativePath Parse(string browsePath, ITypeTable typeTree) + { + if (typeTree == null) throw new ArgumentNullException(nameof(typeTree)); + + // parse the string. + RelativePathFormatter formatter = RelativePathFormatter.Parse(browsePath); + + // convert the browse names to node ids. + RelativePath relativePath = new RelativePath(); + + foreach (RelativePathFormatter.Element element in formatter.Elements) + { + RelativePathElement parsedElement = new RelativePathElement(); + + parsedElement.ReferenceTypeId = null; + parsedElement.IsInverse = false; + parsedElement.IncludeSubtypes = element.IncludeSubtypes; + parsedElement.TargetName = element.TargetName; + + switch (element.ElementType) + { + case RelativePathFormatter.ElementType.AnyHierarchical: + { + parsedElement.ReferenceTypeId = ReferenceTypeIds.HierarchicalReferences; + break; + } + + case RelativePathFormatter.ElementType.AnyComponent: + { + parsedElement.ReferenceTypeId = ReferenceTypeIds.Aggregates; + break; + } + + case RelativePathFormatter.ElementType.ForwardReference: + { + parsedElement.ReferenceTypeId = typeTree.FindReferenceType(element.ReferenceTypeName); + break; + } + + case RelativePathFormatter.ElementType.InverseReference: + { + parsedElement.ReferenceTypeId = typeTree.FindReferenceType(element.ReferenceTypeName); + parsedElement.IsInverse = true; + break; + } + } + + if (NodeId.IsNull(parsedElement.ReferenceTypeId)) + { + throw ServiceResultException.Create( + StatusCodes.BadSyntaxError, + "Could not convert BrowseName to a ReferenceTypeId: {0}", + element.ReferenceTypeName); + } + + relativePath.Elements.Add(parsedElement); + } + + return relativePath; + } + + /// + /// Parses a relative path formatted as a string. + /// + public static RelativePath Parse( + string browsePath, + ITypeTable typeTree, + NamespaceTable currentTable, + NamespaceTable targetTable) + + { + // parse the string. + RelativePathFormatter formatter = RelativePathFormatter.Parse(browsePath, currentTable, targetTable); + + // convert the browse names to node ids. + RelativePath relativePath = new RelativePath(); + + foreach (RelativePathFormatter.Element element in formatter.Elements) + { + RelativePathElement parsedElement = new RelativePathElement(); + + parsedElement.ReferenceTypeId = null; + parsedElement.IsInverse = false; + parsedElement.IncludeSubtypes = element.IncludeSubtypes; + parsedElement.TargetName = element.TargetName; + + switch (element.ElementType) + { + case RelativePathFormatter.ElementType.AnyHierarchical: + { + parsedElement.ReferenceTypeId = ReferenceTypeIds.HierarchicalReferences; + break; + } + + case RelativePathFormatter.ElementType.AnyComponent: + { + parsedElement.ReferenceTypeId = ReferenceTypeIds.Aggregates; + break; + } + + case RelativePathFormatter.ElementType.ForwardReference: + case RelativePathFormatter.ElementType.InverseReference: + { + if (typeTree == null) + { + throw new InvalidOperationException("Cannot parse path with reference names without a type table."); + } + + parsedElement.ReferenceTypeId = typeTree.FindReferenceType(element.ReferenceTypeName); + parsedElement.IsInverse = element.ElementType == RelativePathFormatter.ElementType.InverseReference; + break; + } + } + + if (NodeId.IsNull(parsedElement.ReferenceTypeId)) + { + throw ServiceResultException.Create( + StatusCodes.BadSyntaxError, + "Could not convert BrowseName to a ReferenceTypeId: {0}", + element.ReferenceTypeName); + } + + relativePath.Elements.Add(parsedElement); + } + + return relativePath; + } + #endregion + } + + /// + /// A class that stores a relative path string + /// + public class RelativePathFormatter : IFormattable + { + #region Constructors + /// + /// Initializes the object the default values. + /// + public RelativePathFormatter(RelativePath relativePath, ITypeTable typeTree) + { + m_elements = new List(); + + if (relativePath != null) + { + foreach (RelativePathElement element in relativePath.Elements) + { + m_elements.Add(new Element(element, typeTree)); + } + } + } + + /// + /// Initializes the object the default values. + /// + public RelativePathFormatter() + { + m_elements = new List(); + } + #endregion + + #region Public Properties + /// + /// The elements in the relative path. + /// + /// + /// The elements in the relative path. + /// + public List Elements => m_elements; + + /// + /// Updates the namespace table with URI used in the relative path. + /// + /// The current table. + /// The target table. + public void UpdateNamespaceTable(NamespaceTable currentTable, NamespaceTable targetTable) + { + // build mapping table. + int[] mappings = new int[currentTable.Count]; + mappings[0] = 0; + + if (mappings.Length > 0) + { + mappings[1] = 1; + } + + // ensure a placeholder for the local namespace. + if (targetTable.Count <= 1) + { + targetTable.Append("---"); + } + + string[] uris = new string[mappings.Length]; + + for (int ii = 2; ii < mappings.Length; ii++) + { + uris[ii] = currentTable.GetString((uint)ii); + + if (uris[ii] != null) + { + mappings[ii] = targetTable.GetIndex(uris[ii]); + } + } + + // update each element. + foreach (Element element in m_elements) + { + // check reference type name. + QualifiedName qname = element.ReferenceTypeName; + + if (qname != null && qname.NamespaceIndex > 1) + { + if (qname.NamespaceIndex < mappings.Length) + { + if (mappings[qname.NamespaceIndex] == -1) + { + mappings[qname.NamespaceIndex] = targetTable.GetIndexOrAppend(uris[qname.NamespaceIndex]); + } + } + } + + // check target name. + qname = element.TargetName; + + if (qname != null && qname.NamespaceIndex > 1) + { + if (qname.NamespaceIndex < mappings.Length) + { + if (mappings[qname.NamespaceIndex] == -1) + { + mappings[qname.NamespaceIndex] = targetTable.GetIndexOrAppend(uris[qname.NamespaceIndex]); + } + } + } + } + } + + /// + /// Updates the path to use the indexes from the target table. + /// + /// The NamespaceTable which the RelativePathString currently references + /// The NamespaceTable which the RelativePathString should reference + public void TranslateNamespaceIndexes(NamespaceTable currentTable, NamespaceTable targetTable) + { + // build mapping table. + int[] mappings = new int[currentTable.Count]; + mappings[0] = 0; + + // copy mappings. + string[] uris = new string[mappings.Length]; + + for (int ii = 1; ii < mappings.Length; ii++) + { + uris[ii] = currentTable.GetString((uint)ii); + + if (uris[ii] != null) + { + mappings[ii] = targetTable.GetIndex(uris[ii]); + } + } + + // update each element. + foreach (Element element in m_elements) + { + QualifiedName qname = element.ReferenceTypeName; + + if (qname != null && qname.NamespaceIndex > 0) + { + if (qname.NamespaceIndex < mappings.Length && mappings[qname.NamespaceIndex] > 0) + { + element.ReferenceTypeName = new QualifiedName(qname.Name, (ushort)mappings[qname.NamespaceIndex]); + } + } + + qname = element.TargetName; + + if (qname != null && qname.NamespaceIndex > 0) + { + if (qname.NamespaceIndex < mappings.Length && mappings[qname.NamespaceIndex] > 0) + { + element.TargetName = new QualifiedName(qname.Name, (ushort)mappings[qname.NamespaceIndex]); + } + } + } + } + #endregion + + #region Overriden Members + /// + /// Formats the relative path as a string. + /// + /// + /// Formats the relative path as a string. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Formats the relative path as a string. + /// + /// + /// Formats the relative path as a string. + /// + /// (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) + { + StringBuilder path = new StringBuilder(); + + foreach (Element element in m_elements) + { + path.AppendFormat("{0}", element); + } + + return path.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Static Members + /// + /// Returns true if the relative path does not specify any elements. + /// + public static bool IsEmpty(RelativePathFormatter relativePath) + { + if (relativePath != null) + { + return relativePath.Elements.Count == 0; + } + + return true; + } + + /// + /// Parses a string representing a relative path and translates the namespace indexes. + /// + /// + /// Parses a string representing a relative path. + /// + /// Thrown if any errors occur during parsing + public static RelativePathFormatter Parse(string textToParse, NamespaceTable currentTable, NamespaceTable targetTable) + { + RelativePathFormatter path = Parse(textToParse); + + if (path != null) + { + path.TranslateNamespaceIndexes(currentTable, targetTable); + } + + return path; + } + + /// + /// Parses a string representing a relative path. + /// + /// + /// Parses a string representing a relative path. + /// + /// Thrown if any errors occur during parsing + public static RelativePathFormatter Parse(string textToParse) + { + if (String.IsNullOrEmpty(textToParse)) + { + return new RelativePathFormatter(); + } + + RelativePathFormatter path = new RelativePathFormatter(); + + try + { + StringReader reader = new StringReader(textToParse); + + while (reader.Peek() != -1) + { + Element element = Element.Parse(reader); + path.m_elements.Add(element); + } + } + catch (Exception e) + { + throw new ServiceResultException( + StatusCodes.BadIndexRangeInvalid, + Utils.Format("Cannot parse relative path: '{0}'.", textToParse), + e); + } + + return path; + } + #endregion + + #region Element class + /// + /// A element in a relative path string. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public class Element : IFormattable + { + #region Constructors + /// + /// Initializes the object from a RelativePathElement + /// + public Element(RelativePathElement element, ITypeTable typeTree) + { + if (element == null) throw new ArgumentNullException(nameof(element)); + if (typeTree == null) throw new ArgumentNullException(nameof(typeTree)); + + m_referenceTypeName = null; + m_targetName = element.TargetName; + m_elementType = RelativePathFormatter.ElementType.ForwardReference; + m_includeSubtypes = element.IncludeSubtypes; + + if (!element.IsInverse && element.IncludeSubtypes) + { + if (element.ReferenceTypeId == ReferenceTypeIds.HierarchicalReferences) + { + m_elementType = RelativePathFormatter.ElementType.AnyHierarchical; + } + else if (element.ReferenceTypeId == ReferenceTypeIds.Aggregates) + { + m_elementType = RelativePathFormatter.ElementType.AnyComponent; + } + else + { + m_referenceTypeName = typeTree.FindReferenceTypeName(element.ReferenceTypeId); + } + } + else + { + if (element.IsInverse) + { + m_elementType = RelativePathFormatter.ElementType.InverseReference; + } + + m_referenceTypeName = typeTree.FindReferenceTypeName(element.ReferenceTypeId); + } + } + + /// + /// Initializes the object the default values. + /// + public Element() + { + m_elementType = RelativePathFormatter.ElementType.AnyHierarchical; + m_referenceTypeName = null; + m_includeSubtypes = true; + m_targetName = null; + } + #endregion + + #region Public Properties + /// + /// The type of element. + /// + public ElementType ElementType + { + get { return m_elementType; } + set { m_elementType = value; } + } + + /// + /// The browse name of the reference type to follow. + /// + public QualifiedName ReferenceTypeName + { + get { return m_referenceTypeName; } + set { m_referenceTypeName = value; } + } + + /// + /// Whether to include subtypes of the reference type. + /// + public bool IncludeSubtypes + { + get { return m_includeSubtypes; } + set { m_includeSubtypes = value; } + } + + /// + /// The browse name of the target to find. + /// + public QualifiedName TargetName + { + get { return m_targetName; } + set { m_targetName = value; } + } + #endregion + + #region Overriden Members + /// + /// Formats the relative path element as a string. + /// + public override string ToString() + { + return ToString(null, null); + } + #endregion + + #region IFormattable Members + /// + /// Formats the numeric range as a string. + /// + /// (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) + { + StringBuilder path = new StringBuilder(); + + // write the reference type component. + switch (m_elementType) + { + case ElementType.AnyHierarchical: + { + path.Append('/'); + break; + } + + case ElementType.AnyComponent: + { + path.Append('.'); + break; + } + + case ElementType.ForwardReference: + case ElementType.InverseReference: + { + if (m_referenceTypeName != null && !String.IsNullOrEmpty(m_referenceTypeName.Name)) + { + path.Append('<'); + + if (!m_includeSubtypes) + { + path.Append('#'); + } + + if (m_elementType == ElementType.InverseReference) + { + path.Append('!'); + } + + if (m_referenceTypeName.NamespaceIndex != 0) + { + path.AppendFormat("{0}:", m_referenceTypeName.NamespaceIndex); + } + + EncodeName(path, m_referenceTypeName.Name); + path.Append('>'); + } + + break; + } + } + + // write the target browse name component. + if (m_targetName != null && !String.IsNullOrEmpty(m_targetName.Name)) + { + if (m_targetName.NamespaceIndex != 0) + { + path.AppendFormat("{0}:", m_targetName.NamespaceIndex); + } + + EncodeName(path, m_targetName.Name); + } + + return path.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Static Methods + /// + /// Extracts a relative path element from a string. + /// + /// The string read stream containing the text to convert to a RelativePathStringElement + public static Element Parse(StringReader reader) + { + Element element = new Element(); + + int next = reader.Peek(); + + switch (next) + { + case '/': + { + element.ElementType = ElementType.AnyHierarchical; + reader.Read(); + break; + } + + case '.': + { + element.ElementType = ElementType.AnyComponent; + reader.Read(); + break; + } + + case '<': + { + element.ElementType = ElementType.ForwardReference; + reader.Read(); + + if (reader.Peek() == '#') + { + element.IncludeSubtypes = false; + reader.Read(); + } + + if (reader.Peek() == '!') + { + element.ElementType = ElementType.InverseReference; + reader.Read(); + } + + element.ReferenceTypeName = ParseName(reader, true); + break; + } + + default: + { + element.ElementType = ElementType.AnyHierarchical; + break; + } + } + + element.TargetName = ParseName(reader, false); + + return element; + } + #endregion + + #region Private Methods + /// + /// Extracts a browse name with an optional namespace prefix from the reader. + /// + private static QualifiedName ParseName( + StringReader reader, + bool referenceName) + { + ushort namespaceIndex = 0; + + // extract namespace index if present. + StringBuilder buffer = new StringBuilder(); + + int last = reader.Peek(); + + for (int next = last; next != -1; next = reader.Peek()) + { + last = next; + + if (!Char.IsDigit((char)next)) + { + if (next == ':') + { + reader.Read(); + namespaceIndex = Convert.ToUInt16(buffer.ToString(), CultureInfo.InvariantCulture); + buffer.Length = 0; + + // fetch next character. + last = reader.Peek(); + } + + break; + } + + buffer.Append((char)next); + reader.Read(); + } + + // extract rest of name. + for (int next = last; next != -1; next = reader.Peek()) + { + last = next; + + // check for terminator. + if (referenceName) + { + if (next == '>') + { + reader.Read(); + break; + } + } + else + { + if (next == '<' || next == '/' || next == '.') + { + break; + } + } + + // check for invalid character. + if (next == '!' || next == ':' || next == '<' || next == '>' || next == '/' || next == '.') + { + throw new ServiceResultException( + StatusCodes.BadSyntaxError, + Utils.Format("Unexpected character '{0}' in browse path.", next)); + + } + + // check for escape character. + if (next == '&') + { + next = reader.Read(); + next = reader.Read(); + buffer.Append((char)next); + continue; + } + + // append character. + buffer.Append((char)next); + reader.Read(); + } + + // check for enclosing bracket. + if (referenceName) + { + if (last != '>') + { + throw new ServiceResultException( + StatusCodes.BadSyntaxError, + Utils.Format("Missing file '>' for reference type name in browse path.")); + } + } + + if (buffer.Length == 0) + { + if (referenceName) + { + throw new ServiceResultException( + StatusCodes.BadSyntaxError, + Utils.Format("Reference type name is null in browse path.")); + } + + if (namespaceIndex == 0) + { + return null; + } + } + + return new QualifiedName(buffer.ToString(), namespaceIndex); + } + + /// + /// Encodes a name using the relative path syntax. + /// + private static void EncodeName(StringBuilder path, string name) + { + for (int ii = 0; ii < name.Length; ii++) + { + switch (name[ii]) + { + case '/': + case '.': + case '<': + case '>': + case ':': + case '!': + case '&': + { + path.Append('&'); + break; + } + } + + path.Append(name[ii]); + } + } + #endregion + + #region Private Fields + private ElementType m_elementType; + private bool m_includeSubtypes; + private QualifiedName m_referenceTypeName; + private QualifiedName m_targetName; + #endregion + } + #endregion + + #region ElementType enumeration + /// + /// The type of relative path element. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public enum ElementType + { + /// + /// Any hierarchial reference should be followed ('/'). + /// + AnyHierarchical = 0x01, + + /// + /// Any component reference should be followed ('.'). + /// + AnyComponent = 0x02, + + /// + /// The forward reference identified by the browse name should be followed. + /// + ForwardReference = 0x03, + + /// + /// The inverse reference identified by the browse name should be followed. + /// + InverseReference = 0x04 + } + #endregion + + #region Private Fields + private List m_elements; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceMessageContext.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceMessageContext.cs new file mode 100644 index 00000000..44330225 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceMessageContext.cs @@ -0,0 +1,214 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; + +namespace Opc.Ua +{ + /// + /// Stores context information associated with a UA server that is used during message processing. + /// + public class ServiceMessageContext + { + #region Constructors + /// + /// Initializes the object with default values. + /// + public ServiceMessageContext() + { + m_maxStringLength = UInt16.MaxValue; + m_maxByteStringLength = UInt16.MaxValue * 16; + m_maxArrayLength = UInt16.MaxValue; + m_maxMessageSize = UInt16.MaxValue * 32; + m_namespaceUris = new NamespaceTable(); + m_serverUris = new StringTable(); + m_factory = EncodeableFactory.GlobalFactory; + m_maxEncodingNestingLevels = 200; + } + + private ServiceMessageContext(bool shared) : this() + { + m_maxStringLength = UInt16.MaxValue; + m_maxByteStringLength = UInt16.MaxValue * 16; + m_maxArrayLength = UInt16.MaxValue; + m_maxMessageSize = UInt16.MaxValue * 32; + m_namespaceUris = new NamespaceTable(shared); + m_serverUris = new StringTable(shared); + m_factory = EncodeableFactory.GlobalFactory; + m_maxEncodingNestingLevels = 200; + } + #endregion + + #region Static Members + /// + /// The default context for the process (used only during XML serialization). + /// + public static ServiceMessageContext GlobalContext => s_globalContext; + + + /// + /// The default context for the thread (used only during XML serialization). + /// + public static ServiceMessageContext ThreadContext + { + get + { + return s_globalContext; + } + + set + { + } + } + #endregion + + #region Public Properties + /// + /// Returns the object used to synchronize access to the context. + /// + public object SyncRoot => m_lock; + + /// + /// The maximum length for any string, byte string or xml element. + /// + public int MaxStringLength + { + get { lock (m_lock) { return m_maxStringLength; } } + set { lock (m_lock) { m_maxStringLength = value; } } + } + + /// + /// The maximum length for any array. + /// + public int MaxArrayLength + { + get { lock (m_lock) { return m_maxArrayLength; } } + set { lock (m_lock) { m_maxArrayLength = value; } } + } + + /// + /// The maximum length for any ByteString. + /// + public int MaxByteStringLength + { + get { lock (m_lock) { return m_maxByteStringLength; } } + set { lock (m_lock) { m_maxByteStringLength = value; } } + } + + /// + /// The maximum length for any Message. + /// + public int MaxMessageSize + { + get { lock (m_lock) { return m_maxMessageSize; } } + set { lock (m_lock) { m_maxMessageSize = value; } } + } + + /// + /// The maximum nesting level accepted while encoding or decoding objects. + /// + public uint MaxEncodingNestingLevels + { + get { lock (m_lock) { return m_maxEncodingNestingLevels; } } + } + + /// + /// The table of namespaces used by the server. + /// + public NamespaceTable NamespaceUris + { + get + { + return m_namespaceUris; + } + + set + { + lock (m_lock) + { + if (value == null) + { + m_namespaceUris = ServiceMessageContext.GlobalContext.NamespaceUris; + return; + } + + m_namespaceUris = value; + } + } + } + + /// + /// The table of servers used by the server. + /// + public StringTable ServerUris + { + get + { + return m_serverUris; + } + + set + { + lock (m_lock) + { + if (value == null) + { + m_serverUris = ServiceMessageContext.GlobalContext.ServerUris; + return; + } + + m_serverUris = value; + } + } + } + + /// + /// The factory used to create encodeable objects. + /// + public EncodeableFactory Factory + { + get + { + return m_factory; + } + + set + { + lock (m_lock) + { + if (value == null) + { + m_factory = ServiceMessageContext.GlobalContext.Factory; + return; + } + + m_factory = value; + } + } + } + #endregion + + #region Private Fields + private object m_lock = new object(); + private int m_maxStringLength; + private int m_maxByteStringLength; + private int m_maxArrayLength; + private int m_maxMessageSize; + private uint m_maxEncodingNestingLevels; + private NamespaceTable m_namespaceUris; + private StringTable m_serverUris; + private EncodeableFactory m_factory; + + private static ServiceMessageContext s_globalContext = new ServiceMessageContext(true); + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceResult.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceResult.cs new file mode 100644 index 00000000..5cc4cf7b --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceResult.cs @@ -0,0 +1,837 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization; +using System.Text; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// A class that combines the status code and diagnostic info structures. + /// + [DataContract(Namespace = Namespaces.OpcUaXsd)] + public class ServiceResult + { + #region Constructors + /// + /// Initializes the object with default values. + /// + private ServiceResult() + { + Code = StatusCodes.Good; + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri, + LocalizedText localizedText, + string additionalInfo, + ServiceResult innerResult) + { + StatusCode = code; + SymbolicId = symbolicId; + NamespaceUri = namespaceUri; + LocalizedText = localizedText; + AdditionalInfo = additionalInfo; + InnerResult = innerResult; + } + + /// + /// Copy constructor taking an inner result as second argument, to build chains of service results. + /// + /// + /// + public ServiceResult( + ServiceResult outerResult, + ServiceResult innerResult = null) + : + this(outerResult.Code, outerResult.SymbolicId, outerResult.NamespaceUri, outerResult.LocalizedText, outerResult.AdditionalInfo, innerResult) + { + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + ServiceResult innerResult) + : + this(code, null, null, null, null, innerResult) + { + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri, + LocalizedText localizedText, + string additionalInfo) + : + this(code, symbolicId, namespaceUri, localizedText, additionalInfo, (ServiceResult)null) + { + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri, + LocalizedText localizedText) + : + this(code, symbolicId, namespaceUri, localizedText, (string)null, (ServiceResult)null) + { + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri) + : + this(code, symbolicId, namespaceUri, (string)null, (string)null, (ServiceResult)null) + { + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + XmlQualifiedName symbolicId, + LocalizedText localizedText) + : + this(code, (symbolicId != null) ? symbolicId.Name : null, (symbolicId != null) ? symbolicId.Namespace : null, localizedText, (string)null, (ServiceResult)null) + { + } + + /// + /// Constructs a object by specifying each property. + /// + public ServiceResult( + StatusCode code, + LocalizedText localizedText) + : + this(code, (string)null, (string)null, localizedText, (string)null, (ServiceResult)null) + { + } + + /// + /// Constructs a object from a StatusCode. + /// + public ServiceResult(StatusCode status) + { + m_code = status.Code; + } + + /// + /// Constructs a object from a StatusCode. + /// + public ServiceResult(uint code) + { + m_code = code; + } + + /// + /// Constructs a object by specifying each property. + /// + /// + /// The innerException is used to construct the inner result. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri, + LocalizedText localizedText, + string additionalInfo, + Exception innerException) + { + ServiceResult innerResult = new ServiceResult(innerException); + + // check if no new information provided. + if (code.Code == innerResult.Code && symbolicId == null && localizedText == null && additionalInfo == null) + { + m_code = innerResult.Code; + m_symbolicId = innerResult.SymbolicId; + m_namespaceUri = innerResult.NamespaceUri; + m_localizedText = innerResult.LocalizedText; + m_additionalInfo = innerResult.AdditionalInfo; + m_innerResult = innerResult.InnerResult; + } + + // make the exception the inner result. + else + { + m_code = code.Code; + m_symbolicId = symbolicId; + m_namespaceUri = namespaceUri; + m_localizedText = localizedText; + m_additionalInfo = additionalInfo; + m_innerResult = innerResult; + } + } + + /// + /// Constructs a object by specifying each property. + /// + /// + /// The innerException is used to construct the innerResult. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri, + LocalizedText localizedText, + Exception innerException) + : + this(code, symbolicId, namespaceUri, localizedText, null, innerException) + { + } + + /// + /// Constructs a object by specifying each property. + /// + /// + /// The innerException is used to construct the innerResult. + /// + public ServiceResult( + StatusCode code, + string symbolicId, + string namespaceUri, + Exception innerException) + : + this(code, symbolicId, namespaceUri, null, null, innerException) + { + } + + /// + /// Constructs a object by specifying each property. + /// + /// + /// The innerException is used to construct the innerResult. + /// + public ServiceResult( + StatusCode code, + LocalizedText localizedText, + Exception innerException) + : + this(code, null, null, localizedText, null, innerException) + { + } + + /// + /// Constructs a object by specifying each property. + /// + /// + /// The innerException is used to construct the innerResult. + /// + public ServiceResult(StatusCode code, Exception innerException) + : + this(code, null, null, null, null, innerException) + { + } + + /// + /// Constructs a object from an exception. + /// + /// + /// The code, symbolicId, namespaceUri and localizedText parameters are ignored for ServiceResultExceptions. + /// + public ServiceResult( + Exception e, + uint defaultCode, + string defaultSymbolicId, + string defaultNamespaceUri, + LocalizedText defaultLocalizedText) + { + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + m_code = sre.StatusCode; + m_namespaceUri = sre.NamespaceUri; + m_symbolicId = sre.SymbolicId; + m_localizedText = sre.LocalizedText; + m_innerResult = sre.Result.InnerResult; + + if (LocalizedText.IsNullOrEmpty(m_localizedText)) + { + m_localizedText = defaultLocalizedText; + } + } + else + { + m_code = defaultCode; + m_symbolicId = defaultSymbolicId; + m_namespaceUri = defaultNamespaceUri; + m_localizedText = defaultLocalizedText; + } + + m_additionalInfo = BuildExceptionTrace(e); + } + + /// + /// Constructs a object from an exception. + /// + /// + /// The defaultCode and defaultLocalizedText parameters are ignored for ServiceResultExceptions. + /// + public ServiceResult( + Exception exception, + uint defaultCode, + LocalizedText defaultLocalizedText) + : + this(exception, defaultCode, null, null, defaultLocalizedText) + { + } + + /// + /// Constructs a object from an exception. + /// + /// + /// The code, symbolicId and namespaceUri parameters are ignored for ServiceResultExceptions. + /// + public ServiceResult( + Exception exception, + uint defaultCode, + string defaultSymbolicId, + string defaultNamespaceUri) + : + this(exception, defaultCode, defaultSymbolicId, defaultNamespaceUri, null) + { + } + + /// + /// Constructs a object from an exception. + /// + /// + /// The code parameter is ignored for ServiceResultExceptions. + /// + public ServiceResult( + Exception exception, + uint defaultCode) + : + this(exception, defaultCode, null, null, GetDefaultMessage(exception)) + { + } + + /// + /// Constructs a object from an exception. + /// + public ServiceResult(Exception exception) + : + this(exception, StatusCodes.Bad, null, null, GetDefaultMessage(exception)) + { + } + + /// + /// Initializes the object with a status code and a diagnostic info structure. + /// + public ServiceResult(StatusCode code, DiagnosticInfo diagnosticInfo, IList stringTable) + { + m_code = (uint)code; + + if (diagnosticInfo != null) + { + m_namespaceUri = LookupString(stringTable, diagnosticInfo.NamespaceUri); + m_symbolicId = LookupString(stringTable, diagnosticInfo.SymbolicId); + + string locale = LookupString(stringTable, diagnosticInfo.Locale); + string localizedText = LookupString(stringTable, diagnosticInfo.LocalizedText); + m_localizedText = new LocalizedText(locale, localizedText); + + m_additionalInfo = diagnosticInfo.AdditionalInfo; + + if (!StatusCode.IsGood(diagnosticInfo.InnerStatusCode)) + { + m_innerResult = new ServiceResult(diagnosticInfo.InnerStatusCode, diagnosticInfo.InnerDiagnosticInfo, stringTable); + } + } + } + + /// + /// Initializes the object with a status code and a diagnostic info structure. + /// + public ServiceResult(StatusCode code, int index, DiagnosticInfoCollection diagnosticInfos, IList stringTable) + { + m_code = (uint)code; + + if (index >= 0 && diagnosticInfos != null && index < diagnosticInfos.Count) + { + DiagnosticInfo diagnosticInfo = diagnosticInfos[index]; + + if (diagnosticInfo != null) + { + m_namespaceUri = LookupString(stringTable, diagnosticInfo.NamespaceUri); + m_symbolicId = LookupString(stringTable, diagnosticInfo.SymbolicId); + + string locale = LookupString(stringTable, diagnosticInfo.Locale); + string localizedText = LookupString(stringTable, diagnosticInfo.LocalizedText); + m_localizedText = new LocalizedText(locale, localizedText); + + m_additionalInfo = diagnosticInfo.AdditionalInfo; + + if (!StatusCode.IsGood(diagnosticInfo.InnerStatusCode)) + { + m_innerResult = new ServiceResult(diagnosticInfo.InnerStatusCode, diagnosticInfo.InnerDiagnosticInfo, stringTable); + } + } + } + } + #endregion + + #region Static Interface + /// + /// A result representing a good status. + /// + public static ServiceResult Good => s_Good; + + private static readonly ServiceResult s_Good = new ServiceResult(); + + /// + /// Creates a new instance of a ServiceResult + /// + public static ServiceResult Create(uint code, TranslationInfo translation) + { + if (translation == null) + { + return new ServiceResult(code); + } + + return new ServiceResult(code, new LocalizedText(translation)); + } + + /// + /// Creates a new instance of a ServiceResult + /// + public static ServiceResult Create(Exception e, TranslationInfo translation, uint defaultCode) + { + // replace the default code with the one from the exception. + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + defaultCode = sre.StatusCode; + } + + if (translation == null) + { + return new ServiceResult(e, defaultCode); + } + + return new ServiceResult(defaultCode, new LocalizedText(translation), e); + } + + /// + /// Creates a new instance of a ServiceResult + /// + public static ServiceResult Create(uint code, string format, params object[] args) + { + if (format == null) + { + return new ServiceResult(code); + } + + if (args == null || args.Length == 0) + { + return new ServiceResult(code, format); + } + + return new ServiceResult(code, Utils.Format(format, args)); + } + + /// + /// Creates a new instance of a ServiceResult + /// + public static ServiceResult Create(Exception e, uint defaultCode, string format, params object[] args) + { + // replace the default code with the one from the exception. + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + defaultCode = sre.StatusCode; + } + + if (format == null) + { + return new ServiceResult(e, defaultCode); + } + + if (args == null || args.Length == 0) + { + return new ServiceResult(defaultCode, format, e); + } + + return new ServiceResult(defaultCode, Utils.Format(format, args), e); + } + + /// + /// Returns true if the status code is good. + /// + public static bool IsGood(ServiceResult status) + { + if (status != null) + { + return StatusCode.IsGood(status.m_code); + } + + return true; + } + + /// + /// Returns true if the status is bad or uncertain. + /// + public static bool IsNotGood(ServiceResult status) + { + if (status != null) + { + return StatusCode.IsNotGood(status.m_code); + } + + return true; + } + + /// + /// Returns true if the status code is uncertain. + /// + public static bool IsUncertain(ServiceResult status) + { + if (status != null) + { + return StatusCode.IsUncertain(status.m_code); + } + + return false; + } + + /// + /// Returns true if the status is good or uncertain. + /// + public static bool IsNotUncertain(ServiceResult status) + { + if (status != null) + { + return StatusCode.IsNotUncertain(status.m_code); + } + + return true; + } + + /// + /// Returns true if the status code is bad. + /// + public static bool IsBad(ServiceResult status) + { + if (status != null) + { + return StatusCode.IsBad(status.m_code); + } + + return false; + } + + /// + /// Returns true if the status is good or uncertain. + /// + public static bool IsNotBad(ServiceResult status) + { + if (status != null) + { + return StatusCode.IsNotBad(status.m_code); + } + + return true; + } + + /// + /// Converts a 32-bit code a ServiceResult object. + /// + public static implicit operator ServiceResult(uint code) + { + return new ServiceResult(code); + } + + /// + /// Converts a StatusCode a ServiceResult object. + /// + public static implicit operator ServiceResult(StatusCode code) + { + return new ServiceResult(code); + } + + /// + /// Converts a StatusCode object to a 32-bit code. + /// + public static explicit operator uint(ServiceResult status) + { + if (status == null) + { + return StatusCodes.Good; + } + + return status.Code; + } + + /// + /// Looks up the symbolic name for a status code. + /// + public static string LookupSymbolicId(uint code) + { + return StatusCodes.GetBrowseName(code & 0xFFFF0000); + } + + /// + /// Returns a string containing all nested exceptions. + /// + public static string BuildExceptionTrace(Exception exception) + { + StringBuilder buffer = new StringBuilder(); + + while (exception != null) + { + if (buffer.Length > 0) + { + buffer.AppendLine(); + buffer.AppendLine(); + } + + buffer.AppendFormat(CultureInfo.InvariantCulture, ">>> {0}", exception.Message); + + if (!String.IsNullOrEmpty(exception.StackTrace)) + { + string[] trace = exception.StackTrace.Split(Environment.NewLine.ToCharArray()); + for (int ii = 0; ii < trace.Length; ii++) + { + if (trace[ii] != null && trace[ii].Length > 0) + { + buffer.AppendLine(); + buffer.AppendFormat(CultureInfo.InvariantCulture, "--- {0}", trace[ii]); + } + } + } + + exception = exception.InnerException; + } + + return buffer.ToString(); + } + #endregion + + #region Public Properties + /// + /// The status code associated with the result. + /// + public uint Code + { + get { return m_code; } + private set { m_code = value; } + } + + /// + /// The status code associated with the result. + /// + [DataMember(Order = 1)] + public StatusCode StatusCode + { + get { return m_code; } + private set { m_code = value.Code; } + } + + /// + /// The namespace that qualifies symbolic identifier. + /// + [DataMember(Order = 2)] + public string NamespaceUri + { + get { return m_namespaceUri; } + private set { m_namespaceUri = value; } + } + + /// + /// The qualified name of the symbolic identifier associated with the status code. + /// + [DataMember(Order = 3)] + public string SymbolicId + { + get { return m_symbolicId; } + private set { m_symbolicId = value; } + } + + /// + /// The localized description for the status code. + /// + [DataMember(Order = 4)] + public LocalizedText LocalizedText + { + get { return m_localizedText; } + private set { m_localizedText = value; } + } + + /// + /// Additional diagnostic/debugging information associated with the operation. + /// + [DataMember(Order = 5)] + public string AdditionalInfo + { + get { return m_additionalInfo; } + private set { m_additionalInfo = value; } + } + + /// + /// Nested error information. + /// + [DataMember(Order = 6)] + public ServiceResult InnerResult + { + get { return m_innerResult; } + private set { m_innerResult = value; } + } + #endregion + + #region Public Methods + /// + /// Converts the value to a human readable string. + /// + public override string ToString() + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append(LookupSymbolicId(m_code)); + + if (!String.IsNullOrEmpty(m_symbolicId)) + { + if (!String.IsNullOrEmpty(m_namespaceUri)) + { + buffer.AppendFormat(" ({0}:{1})", m_namespaceUri, m_symbolicId); + } + else if (m_symbolicId != buffer.ToString()) + { + buffer.AppendFormat(" ({0})", m_symbolicId); + } + } + + if (!LocalizedText.IsNullOrEmpty(m_localizedText)) + { + buffer.AppendFormat(" '{0}'", m_localizedText); + } + + if ((0x0000FFFF & Code) != 0) + { + buffer.AppendFormat(" [{0:X4}]", (0x0000FFFF & Code)); + } + + return buffer.ToString(); + } + + /// + /// Returns a formatted string with the contents of exception. + /// + public string ToLongString() + { + StringBuilder buffer = new StringBuilder(); + + buffer.Append("Id: "); + buffer.Append(StatusCodes.GetBrowseName(m_code)); + + if (!String.IsNullOrEmpty(m_symbolicId)) + { + buffer.AppendLine(); + buffer.Append("SymbolicId: "); + buffer.Append(m_symbolicId); + } + + if (!LocalizedText.IsNullOrEmpty(m_localizedText)) + { + buffer.AppendLine(); + buffer.Append("Description: "); + buffer.Append(m_localizedText); + } + + if (AdditionalInfo != null && AdditionalInfo.Length > 0) + { + buffer.AppendLine(); + buffer.Append(AdditionalInfo); + } + + ServiceResult innerResult = m_innerResult; + + if (innerResult != null) + { + buffer.AppendLine(); + buffer.Append("==="); + buffer.AppendLine(); + buffer.Append(innerResult.ToLongString()); + } + + return buffer.ToString(); + } + #endregion + + #region Private Methods + /// + /// Looks up a string in a string table. + /// + private static string LookupString(IList stringTable, int index) + { + if (index < 0 || stringTable == null || index >= stringTable.Count) + { + return null; + } + + return stringTable[index]; + } + + /// + /// Extract a default message from an exception. + /// + /// + private static string GetDefaultMessage(Exception exception) + { + if (exception != null && exception.Message != null) + { + if (exception.Message.StartsWith("[") || exception is ServiceResultException) + { + return exception.Message; + } + + return String.Format(CultureInfo.InvariantCulture, "[{0}] {1}", exception.GetType().Name, exception.Message); + } + + return String.Empty; + } + #endregion + + #region Private Fields + private uint m_code; + private string m_symbolicId; + private string m_namespaceUri; + private LocalizedText m_localizedText; + private string m_additionalInfo; + private ServiceResult m_innerResult; + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceResultException.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceResultException.cs new file mode 100644 index 00000000..8ea57f5d --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/ServiceResultException.cs @@ -0,0 +1,275 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Text; + +namespace Opc.Ua +{ + /// + /// An exception thrown when a UA defined error occurs. + /// + [DataContractAttribute] + public class ServiceResultException : Exception + { + #region Constructors + /// + /// The default constructor. + /// + public ServiceResultException() : base(Strings.DefaultMessage) + { + m_status = StatusCodes.Bad; + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0}", m_status); + } + } + + /// + /// Initializes the exception with a message. + /// + public ServiceResultException(string message) : base(message) + { + m_status = StatusCodes.Bad; + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0} {1}", m_status, message); + } + } + + /// + /// Initializes the exception with a message and an exception. + /// + public ServiceResultException(Exception e, uint defaultCode) : base(e.Message, e) + { + m_status = ServiceResult.Create(e, defaultCode, String.Empty); + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0} {1} {2}", m_status, e.GetType().Name, e.Message); + } + } + + /// + /// Initializes the exception with a message and an exception. + /// + public ServiceResultException(string message, Exception e) : base(message, e) + { + m_status = StatusCodes.Bad; + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0} {1} {2}", m_status, e.GetType().Name, message); + } + } + + /// + /// Initializes the exception with a status code. + /// + public ServiceResultException(uint statusCode) : base(GetMessage(statusCode)) + { + m_status = new ServiceResult(statusCode); + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0}", m_status); + } + } + + /// + /// Initializes the exception with a status code and a message. + /// + public ServiceResultException(uint statusCode, string message) : base(message) + { + m_status = new ServiceResult(statusCode, message); + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0}", m_status); + } + } + + /// + /// Initializes the exception with a status code and an inner exception. + /// + public ServiceResultException(uint statusCode, Exception e) : base(GetMessage(statusCode), e) + { + m_status = new ServiceResult(statusCode, e); + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0} {1} {2}", m_status, e.GetType().Name, e.Message); + } + } + + /// + /// Initializes the exception with a status code, a message and an inner exception. + /// + public ServiceResultException(uint statusCode, string message, Exception e) : base(message, e) + { + m_status = new ServiceResult(statusCode, message, e); + + if ((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0} {1} {2}", m_status, e.GetType().Name, message); + } + } + + /// + /// Initializes the exception with a Result object. + /// + public ServiceResultException(ServiceResult status) : base(GetMessage(status)) + { + if (status != null) + { + m_status = status; + } + else + { + m_status = new ServiceResult(StatusCodes.Bad); + } + + // avoid false warnings in the log file when closing the channel. + if (((Utils.TraceMask & Utils.TraceMasks.StackTrace) != 0) && (status == null || (status.Code != StatusCodes.BadSecureChannelClosed))) + { + Utils.Trace(Utils.TraceMasks.StackTrace, "***EXCEPTION*** {0}", m_status); + } + } + #endregion + + #region Public Properties + /// + /// The identifier for the status code. + /// + public uint StatusCode => m_status.Code; + + /// + /// The namespace that qualifies symbolic identifier. + /// + public string NamespaceUri => m_status.NamespaceUri; + + /// + /// The qualified name of the symbolic identifier associated with the status code. + /// + public string SymbolicId => m_status.SymbolicId; + + /// + /// The localized description for the status code. + /// + public LocalizedText LocalizedText => m_status.LocalizedText; + + /// + /// Additional diagnostic/debugging information associated with the operation. + /// + public string AdditionalInfo => m_status.AdditionalInfo; + + /// + /// Returns the status result associated with the exception. + /// + public ServiceResult Result => m_status; + + /// + /// Nested error information. + /// + public ServiceResult InnerResult => m_status.InnerResult; + #endregion + + #region Public Methods + /// + /// Returns a formatted string with the contents of exception. + /// + public string ToLongString() + { + StringBuilder buffer = new StringBuilder(); + + buffer.AppendLine(Message); + buffer.Append(m_status.ToLongString()); + + return buffer.ToString(); + } + #endregion + + #region Static Interface + /// + /// Creates a new instance of a ServiceResultException + /// + public static ServiceResultException Create(uint code, string format, params object[] args) + { + if (format == null) + { + return new ServiceResultException(code); + } + + return new ServiceResultException(code, Utils.Format(format, args)); + } + + /// + /// Creates a new instance of a ServiceResultException + /// + public static ServiceResultException Create(uint code, Exception e, string format, params object[] args) + { + if (format == null) + { + return new ServiceResultException(code, e); + } + + return new ServiceResultException(code, Utils.Format(format, args), e); + } + + /// + /// Creates a new instance of a ServiceResultException + /// + public static ServiceResultException Create(StatusCode code, int index, DiagnosticInfoCollection diagnosticInfos, IList stringTable) + { + return new ServiceResultException(new ServiceResult(code, index, diagnosticInfos, stringTable)); + } + #endregion + + #region Private Methods + /// + /// Extracts an exception message from a Result object. + /// + private static string GetMessage(ServiceResult status) + { + if (status == null) + { + return Strings.DefaultMessage; + } + + if (!LocalizedText.IsNullOrEmpty(status.LocalizedText)) + { + return status.LocalizedText.Text; + } + + return status.ToString(); + } + #endregion + + #region Private Fields + private ServiceResult m_status; + #endregion + + #region Private Constants + /// + /// Wraps string constants defined in the class. + /// + private static class Strings + { + public const string DefaultMessage = "A UA specific error occurred."; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/TypeInfo.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/TypeInfo.cs new file mode 100644 index 00000000..6c811c80 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/TypeInfo.cs @@ -0,0 +1,3070 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Reflection; +using System.Xml; + +namespace Opc.Ua +{ + /// + /// The set of built-in data types for UA type descriptions. + /// + /// + /// 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). + /// + Boolean = 1, + + /// + /// An 8 bit signed integer value. + /// + SByte = 2, + + /// + /// An 8 bit unsigned integer value. + /// + Byte = 3, + + /// + /// A 16 bit signed integer value. + /// + Int16 = 4, + + /// + /// A 16 bit signed integer value. + /// + UInt16 = 5, + + /// + /// A 32 bit signed integer value. + /// + Int32 = 6, + + /// + /// A 32 bit unsigned integer value. + /// + UInt32 = 7, + + /// + /// A 64 bit signed integer value. + /// + Int64 = 8, + + /// + /// A 64 bit unsigned integer value. + /// + UInt64 = 9, + + /// + /// An IEEE single precision (32 bit) floating point value. + /// + Float = 10, + + /// + /// 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 a 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, + + /// + /// An opaque object with a syntax that may be unknown to the receiver. + /// + ExtensionObject = 22, + + /// + /// A data value with an associated quality and timestamp. + /// + DataValue = 23, + + /// + /// Any of the other built-in types. + /// + Variant = 24, + + /// + /// A diagnostic information associated with a result code. + /// + DiagnosticInfo = 25, + + /// + /// The following BuiltInTypes are for coding convenience + /// internally used in the .NET Standard library. + /// The enumerations are not used for encoding/decoding. + /// + + /// + /// Any numeric value. + /// + Number = 26, + + /// + /// A signed integer. + /// + Integer = 27, + + /// + /// An unsigned integer. + /// + UInteger = 28, + + /// + /// An enumerated value + /// + Enumeration = 29 + } + + /// + /// Stores information about a type. + /// + public class TypeInfo : IFormattable + { + #region Constructors + /// + /// Constructs an unknown type. + /// + internal TypeInfo() + { + m_builtInType = BuiltInType.Null; + m_valueRank = ValueRanks.Any; + } + + /// + /// Construct the object with a built-in type and a value rank. + /// + /// Type of the built in. + /// The value rank. + public TypeInfo(BuiltInType builtInType, int valueRank) + { + m_builtInType = builtInType; + m_valueRank = valueRank; + } + #endregion + + #region Public Members + /// + /// Returns the data type id that describes a value. + /// + /// The value instance to check the data type. + /// An data type identifier for a node in a server's address space. + public static NodeId GetDataTypeId(object value) + { + if (value == null) + { + return Opc.Ua.NodeId.Null; + } + + NodeId dataTypeId = GetDataTypeId(value.GetType()); + + if (dataTypeId == Opc.Ua.NodeId.Null) + { + Matrix matrix = value as Matrix; + + if (matrix != null) + { + return GetDataTypeId(matrix.TypeInfo); + } + } + + return dataTypeId; + } + + /// + /// Returns the data type id that describes a value. + /// + /// The framework type. + /// An data type identifier for a node in a server's address space. + public static NodeId GetDataTypeId(Type type) + { + TypeInfo typeInfo = TypeInfo.Construct(type); + + NodeId dataTypeId = GetDataTypeId(typeInfo); + + if (Opc.Ua.NodeId.IsNull(dataTypeId)) + { + if (type.GetTypeInfo().IsEnum || (type.IsArray && type.GetElementType().GetTypeInfo().IsEnum)) + { + return DataTypes.Enumeration; + } + } + + return dataTypeId; + } + + /// + /// Returns the data type id that describes a value. + /// + /// The type info. + /// An data type identifier for a node in a server's address space. + public static NodeId GetDataTypeId(TypeInfo typeInfo) + { + switch (typeInfo.BuiltInType) + { + case BuiltInType.Boolean: { return DataTypeIds.Boolean; } + case BuiltInType.SByte: { return DataTypeIds.SByte; } + case BuiltInType.Byte: { return DataTypeIds.Byte; } + case BuiltInType.Int16: { return DataTypeIds.Int16; } + case BuiltInType.UInt16: { return DataTypeIds.UInt16; } + case BuiltInType.Int32: { return DataTypeIds.Int32; } + case BuiltInType.UInt32: { return DataTypeIds.UInt32; } + case BuiltInType.Int64: { return DataTypeIds.Int64; } + case BuiltInType.UInt64: { return DataTypeIds.UInt64; } + case BuiltInType.Float: { return DataTypeIds.Float; } + case BuiltInType.Double: { return DataTypeIds.Double; } + case BuiltInType.String: { return DataTypeIds.String; } + case BuiltInType.DateTime: { return DataTypeIds.DateTime; } + case BuiltInType.Guid: { return DataTypeIds.Guid; } + case BuiltInType.ByteString: { return DataTypeIds.ByteString; } + case BuiltInType.XmlElement: { return DataTypeIds.XmlElement; } + case BuiltInType.NodeId: { return DataTypeIds.NodeId; } + case BuiltInType.ExpandedNodeId: { return DataTypeIds.ExpandedNodeId; } + case BuiltInType.StatusCode: { return DataTypeIds.StatusCode; } + case BuiltInType.DiagnosticInfo: { return DataTypeIds.DiagnosticInfo; } + case BuiltInType.QualifiedName: { return DataTypeIds.QualifiedName; } + case BuiltInType.LocalizedText: { return DataTypeIds.LocalizedText; } + case BuiltInType.ExtensionObject: { return DataTypeIds.Structure; } + case BuiltInType.DataValue: { return DataTypeIds.DataValue; } + case BuiltInType.Variant: { return DataTypeIds.BaseDataType; } + case BuiltInType.Number: { return DataTypeIds.Number; } + case BuiltInType.Integer: { return DataTypeIds.Integer; } + case BuiltInType.UInteger: { return DataTypeIds.UInteger; } + case BuiltInType.Enumeration: { return DataTypeIds.Enumeration; } + } + + return Opc.Ua.NodeId.Null; + } + + /// + /// Returns the array rank for a value. + /// + /// The value instance to check the array rank. + /// The array rank of the + public static int GetValueRank(object value) + { + if (value == null) + { + return ValueRanks.Any; + } + + TypeInfo typeInfo = TypeInfo.Construct(value); + + if (typeInfo.BuiltInType == BuiltInType.Null) + { + Matrix matrix = value as Matrix; + + if (matrix != null) + { + return matrix.TypeInfo.ValueRank; + } + } + + return typeInfo.ValueRank; + } + + /// + /// Returns the array rank for a type. + /// + /// The framework type to check the array rank. + /// The array rank of the + public static int GetValueRank(Type type) + { + TypeInfo typeInfo = TypeInfo.Construct(type); + + if (typeInfo.BuiltInType == BuiltInType.Null) + { + if (type.GetTypeInfo().IsEnum || (type.IsArray && type.GetElementType().GetTypeInfo().IsEnum)) + { + if (type.IsArray) + { + return ValueRanks.OneOrMoreDimensions; + } + else + { + return ValueRanks.Scalar; + } + } + } + + return typeInfo.ValueRank; + } + + /// + /// Returns the BuiltInType type for the DataTypeId. + /// + /// The data type identifier. + /// An for + public static BuiltInType GetBuiltInType(NodeId datatypeId) + { + if (datatypeId == null || datatypeId.NamespaceIndex != 0 || datatypeId.IdType != Opc.Ua.IdType.Numeric) + { + return BuiltInType.Null; + } + + return (BuiltInType)Enum.ToObject(typeof(BuiltInType), datatypeId.Identifier); + } + + /// + /// Returns true if the built-in type is a numeric type. + /// + /// The built-in type to check. + /// + /// True if the built-in type is a numeric type. + /// + public static bool IsNumericType(BuiltInType builtInType) + { + if (builtInType >= BuiltInType.SByte && builtInType <= BuiltInType.Double) + { + return true; + } + + if (builtInType >= BuiltInType.Number && builtInType <= BuiltInType.UInteger) + { + return true; + } + + return false; + } + + /// + /// Returns true if the built-in type is a type that cannot be null. + /// + /// The built in type to check. + /// + /// True if the built-in type is a type that cannot be null. + /// + public static bool IsValueType(BuiltInType builtInType) + { + if (builtInType >= BuiltInType.Boolean && builtInType <= BuiltInType.Double) + { + return true; + } + + if (builtInType == BuiltInType.DateTime || builtInType == BuiltInType.Guid || builtInType == BuiltInType.StatusCode) + { + return true; + } + + return false; + } + + /// + /// Returns true if a 'null' value exists for the built-in type + /// in all data encodings. + /// + /// The built in type to check. + /// + /// True if the built-in type is a type that is nullable. + /// + public static bool IsEncodingNullableType(BuiltInType builtInType) + { + if (builtInType >= BuiltInType.Boolean && builtInType <= BuiltInType.Double) + { + return false; + } + + if (builtInType == BuiltInType.DataValue || builtInType == BuiltInType.DiagnosticInfo) + { + return false; + } + + return true; + } + + /// + /// Returns the BuiltInType type for the DataTypeId. + /// + /// The data type identyfier for a node in a server's address space.. + /// The type tree for a server. . + /// + /// A value for + /// + public static BuiltInType GetBuiltInType(NodeId datatypeId, ITypeTable typeTree) + { + NodeId typeId = datatypeId; + + while (!Opc.Ua.NodeId.IsNull(typeId)) + { + if (typeId != null && typeId.NamespaceIndex == 0 && typeId.IdType == Opc.Ua.IdType.Numeric) + { + BuiltInType id = (BuiltInType)(int)(uint)typeId.Identifier; + + if (id > BuiltInType.Null && id <= BuiltInType.Enumeration && id != BuiltInType.DiagnosticInfo) + { + return id; + } + } + + if (typeTree == null) + { + break; + } + + typeId = typeTree.FindSuperType(typeId); + } + + return BuiltInType.Null; + } + + /// + /// Returns the system type for the datatype. + /// + /// The datatype id. + /// The factory used to store and retrieve underlying OPC UA system types. + /// The system type for the . + public static Type GetSystemType(NodeId datatypeId, EncodeableFactory factory) + { + if (datatypeId == null) + { + return null; + } + + if (datatypeId.NamespaceIndex != 0 || datatypeId.IdType != Opc.Ua.IdType.Numeric) + { + return factory.GetSystemType(datatypeId); + } + + switch ((uint)datatypeId.Identifier) + { + case DataTypes.Boolean: { return typeof(Boolean); } + case DataTypes.SByte: { return typeof(SByte); } + case DataTypes.Byte: { return typeof(Byte); } + case DataTypes.Int16: { return typeof(Int16); } + case DataTypes.UInt16: { return typeof(UInt16); } + case DataTypes.Int32: { return typeof(Int32); } + case DataTypes.UInt32: { return typeof(UInt32); } + case DataTypes.Int64: { return typeof(Int64); } + case DataTypes.UInt64: { return typeof(UInt64); } + case DataTypes.Float: { return typeof(Single); } + case DataTypes.Double: { return typeof(Double); } + case DataTypes.String: { return typeof(String); } + case DataTypes.DateTime: { return typeof(DateTime); } + case DataTypes.Guid: { return typeof(Uuid); } + case DataTypes.ByteString: { return typeof(Byte[]); } + case DataTypes.XmlElement: { return typeof(XmlElement); } + case DataTypes.NodeId: { return typeof(NodeId); } + case DataTypes.ExpandedNodeId: { return typeof(ExpandedNodeId); } + case DataTypes.StatusCode: { return typeof(StatusCode); } + case DataTypes.DiagnosticInfo: { return typeof(DiagnosticInfo); } + case DataTypes.QualifiedName: { return typeof(QualifiedName); } + case DataTypes.LocalizedText: { return typeof(LocalizedText); } + case DataTypes.DataValue: { return typeof(DataValue); } + case DataTypes.BaseDataType: { return typeof(Variant); } + case DataTypes.Structure: { return typeof(ExtensionObject); } + case DataTypes.Number: { return typeof(Variant); } + case DataTypes.Integer: { return typeof(Variant); } + case DataTypes.UInteger: { return typeof(Variant); } + case DataTypes.Enumeration: { return typeof(Int32); } + + // subtype of DateTime + case DataTypes.Date: + case DataTypes.UtcTime: goto case DataTypes.DateTime; + // subtype of ByteString + case DataTypes.ApplicationInstanceCertificate: + case DataTypes.AudioDataType: + case DataTypes.ContinuationPoint: + case DataTypes.Image: + case DataTypes.ImageBMP: + case DataTypes.ImageGIF: + case DataTypes.ImageJPG: + case DataTypes.ImagePNG: goto case DataTypes.ByteString; + // subtype of NodeId + case DataTypes.SessionAuthenticationToken: goto case DataTypes.NodeId; + // subtype of Double + case DataTypes.Duration: goto case DataTypes.Double; + // subtype of UInt32 + case DataTypes.IntegerId: + case DataTypes.Index: + case DataTypes.VersionTime: + case DataTypes.Counter: goto case DataTypes.UInt32; + // subtype of UInt64 + case DataTypes.BitFieldMaskDataType: goto case DataTypes.UInt64; + // subtype of String + case DataTypes.DateString: + case DataTypes.DecimalString: + case DataTypes.DurationString: + case DataTypes.LocaleId: + case DataTypes.NormalizedString: + case DataTypes.NumericRange: + case DataTypes.Time: + case DataTypes.TimeString: goto case DataTypes.String; + } + + return factory.GetSystemType(datatypeId); + } + + /// + /// A constant representing an unknown type. + /// + /// The constant representing an unknown type. + public static TypeInfo Unknown => s_Unknown; + + /// + /// The built-in type. + /// + /// The type of the type represented by this instance. + public BuiltInType BuiltInType => m_builtInType; + + /// + /// The value rank. + /// + /// The value rank of the type represented by this instance. + public int ValueRank => m_valueRank; + + /// + /// Returns the type info if the value is an instance of the data type with the specified value rank. + /// + /// The value instance to check. + /// The expected data type identifier for a node. + /// The expected value rank. + /// The namespace URI's. + /// The type tree for a server. + /// + /// An data type info if the value is an instance of the data type with the specified value rank; otherwise null. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public static TypeInfo IsInstanceOfDataType( + object value, + NodeId expectedDataTypeId, + int expectedValueRank, + NamespaceTable namespaceUris, + ITypeTable typeTree) + { + BuiltInType expectedType = BuiltInType.Null; + + // get the type info. + TypeInfo typeInfo = Construct(value); + + if (typeInfo.BuiltInType == BuiltInType.Null) + { + expectedType = TypeInfo.GetBuiltInType(expectedDataTypeId, typeTree); + + // nulls allowed for all array types. + if (expectedValueRank != ValueRanks.Scalar) + { + return new TypeInfo(expectedType, ValueRanks.OneDimension); + } + + // check if the type supports nulls. + switch (expectedType) + { + case BuiltInType.String: + case BuiltInType.ByteString: + case BuiltInType.XmlElement: + case BuiltInType.NodeId: + case BuiltInType.ExpandedNodeId: + case BuiltInType.LocalizedText: + case BuiltInType.QualifiedName: + case BuiltInType.DataValue: + case BuiltInType.Variant: + case BuiltInType.ExtensionObject: + { + return new TypeInfo(expectedType, ValueRanks.Scalar); + } + } + + // nulls not allowed. + return null; + } + + // A ByteString is equivalent to an Array of Bytes. + if (typeInfo.BuiltInType == BuiltInType.ByteString && typeInfo.ValueRank == ValueRanks.Scalar) + { + if (expectedValueRank == ValueRanks.OneOrMoreDimensions || expectedValueRank == ValueRanks.OneDimension) + { + if (typeTree.IsTypeOf(expectedDataTypeId, DataTypes.Byte)) + { + return typeInfo; + } + + return null; + } + } + + // check the value rank. + if (!ValueRanks.IsValid(typeInfo.ValueRank, expectedValueRank)) + { + return null; + } + + // check for special predefined types. + if (expectedDataTypeId.IdType == IdType.Numeric && expectedDataTypeId.NamespaceIndex == 0) + { + BuiltInType actualType = typeInfo.BuiltInType; + + switch ((uint)expectedDataTypeId.Identifier) + { + case DataTypes.Number: + { + switch (actualType) + { + case BuiltInType.SByte: + case BuiltInType.Int16: + case BuiltInType.Int32: + case BuiltInType.Int64: + case BuiltInType.Byte: + case BuiltInType.UInt16: + case BuiltInType.UInt32: + case BuiltInType.UInt64: + case BuiltInType.Double: + case BuiltInType.Float: + { + return typeInfo; + } + + case BuiltInType.Variant: + { + if (typeInfo.ValueRank == ValueRanks.Scalar) + { + return null; + } + + break; + } + + default: + { + return null; + } + } + + break; + } + + case DataTypes.Integer: + { + switch (actualType) + { + case BuiltInType.SByte: + case BuiltInType.Int16: + case BuiltInType.Int32: + case BuiltInType.Int64: + { + return typeInfo; + } + + case BuiltInType.Variant: + { + if (typeInfo.ValueRank == ValueRanks.Scalar) + { + return null; + } + + break; + } + + default: + { + return null; + } + } + + break; + } + + case DataTypes.UInteger: + { + switch (actualType) + { + case BuiltInType.Byte: + case BuiltInType.UInt16: + case BuiltInType.UInt32: + case BuiltInType.UInt64: + { + return typeInfo; + } + + case BuiltInType.Variant: + { + if (typeInfo.ValueRank == ValueRanks.Scalar) + { + return null; + } + + break; + } + + default: + { + return null; + } + } + + break; + } + + case DataTypes.Enumeration: + { + if (typeInfo.BuiltInType == BuiltInType.Int32) + { + return typeInfo; + } + + return null; + } + + case DataTypes.Structure: + { + if (typeInfo.BuiltInType == BuiltInType.ExtensionObject) + { + return typeInfo; + } + + return null; + } + + case DataTypes.BaseDataType: + { + if (typeInfo.BuiltInType != BuiltInType.Variant) + { + return typeInfo; + } + + break; + } + } + } + + // check simple types. + if (typeInfo.BuiltInType != BuiltInType.ExtensionObject && typeInfo.BuiltInType != BuiltInType.Variant) + { + if (typeTree.IsTypeOf(expectedDataTypeId, new NodeId((uint)(int)typeInfo.BuiltInType))) + { + return typeInfo; + } + + // check for enumerations. + if (typeInfo.BuiltInType == BuiltInType.Int32) + { + if (typeTree.IsTypeOf(expectedDataTypeId, DataTypes.Enumeration)) + { + return typeInfo; + } + } + + // check for direct subtypes of BaseDataType. + if (GetBuiltInType(expectedDataTypeId, typeTree) == BuiltInType.Variant) + { + return typeInfo; + } + + return null; + } + + + // handle scalar. + if (typeInfo.ValueRank < 0) + { + // check extension objects vs. expected type. + if (typeInfo.BuiltInType == BuiltInType.ExtensionObject) + { + expectedType = GetBuiltInType(expectedDataTypeId, typeTree); + + if (expectedType == BuiltInType.Variant) + { + return typeInfo; + } + + if (expectedType != BuiltInType.ExtensionObject) + { + return null; + } + } + + // expected type is extension object so compare type tree. + NodeId actualDataTypeId = typeInfo.GetDataTypeId(value, namespaceUris, typeTree); + + if (typeTree.IsTypeOf(actualDataTypeId, expectedDataTypeId)) + { + return typeInfo; + } + + return null; + } + + // check every element in the array or matrix. + Array array = value as Array; + if (array == null) + { + Matrix matrix = value as Matrix; + if (matrix != null) + { + array = matrix.Elements; + } + } + + if (array != null) + { + BuiltInType expectedElementType = TypeInfo.GetBuiltInType(expectedDataTypeId, typeTree); + BuiltInType actualElementType = GetBuiltInType(array.GetType().GetElementType().Name); + // system type of array matches the expected type - nothing more to do. + if (actualElementType != BuiltInType.ExtensionObject && actualElementType == expectedElementType) + { + return typeInfo; + } + + // check for variant arrays. + if (expectedElementType == BuiltInType.Variant) + { + return typeInfo; + } + + // have to do it the hard way and check each element. + int[] dimensions = new int[array.Rank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + dimensions[ii] = array.GetLength(ii); + } + + int[] indexes = new int[dimensions.Length]; + + for (int ii = 0; ii < array.Length; ii++) + { + int divisor = array.Length; + + for (int jj = 0; jj < indexes.Length; jj++) + { + divisor /= dimensions[jj]; + indexes[jj] = (ii / divisor) % dimensions[jj]; + } + + object element = array.GetValue(indexes); + + if (actualElementType == BuiltInType.Variant) + { + element = ((Variant)element).Value; + } + + TypeInfo elementInfo = TypeInfo.IsInstanceOfDataType( + element, + expectedDataTypeId, + ValueRanks.Scalar, + namespaceUris, + typeTree); + + // give up at the first invalid element. + if (elementInfo == null) + { + return null; + } + } + + // all elements valid. + return typeInfo; + } + + return null; + } + + /// + /// Returns the data type id that describes a value. + /// + /// The value to describe. + /// The namespace uris. + /// The type tree for a server. + /// Returns the data type identifier that describes a value. + public NodeId GetDataTypeId(object value, NamespaceTable namespaceUris, ITypeTable typeTree) + { + if (BuiltInType == BuiltInType.Null) + { + return NodeId.Null; + } + + if (BuiltInType == BuiltInType.ExtensionObject) + { + IEncodeable encodeable = value as IEncodeable; + if (encodeable != null) + { + return ExpandedNodeId.ToNodeId(encodeable.TypeId, namespaceUris); + } + + ExtensionObject extension = value as ExtensionObject; + if (extension != null) + { + encodeable = extension.Body as IEncodeable; + if (encodeable != null) + { + return ExpandedNodeId.ToNodeId(encodeable.TypeId, namespaceUris); + } + + return typeTree.FindDataTypeId(extension.TypeId); + } + + return DataTypes.Structure; + } + + return new NodeId((uint)(int)BuiltInType); + } + + /// + /// Returns the system type a scalar or array instance of the built-in type. + /// + /// A built-in type. + /// The value rank. + /// A system type equivalent to the built-in type. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public static Type GetSystemType(BuiltInType builtInType, int valueRank) + { + if (valueRank == ValueRanks.Scalar) + { + switch (builtInType) + { + case BuiltInType.Boolean: return typeof(bool); + case BuiltInType.SByte: return typeof(sbyte); + case BuiltInType.Byte: return typeof(byte); + case BuiltInType.Int16: return typeof(short); + case BuiltInType.UInt16: return typeof(ushort); + case BuiltInType.Int32: return typeof(int); + case BuiltInType.UInt32: return typeof(uint); + case BuiltInType.Int64: return typeof(long); + case BuiltInType.UInt64: return typeof(ulong); + case BuiltInType.Float: return typeof(float); + case BuiltInType.Double: return typeof(double); + case BuiltInType.String: return typeof(string); + case BuiltInType.DateTime: return typeof(DateTime); + case BuiltInType.Guid: return typeof(Uuid); + case BuiltInType.ByteString: return typeof(byte[]); + case BuiltInType.XmlElement: return typeof(XmlElement); + case BuiltInType.NodeId: return typeof(NodeId); + case BuiltInType.ExpandedNodeId: return typeof(ExpandedNodeId); + case BuiltInType.LocalizedText: return typeof(LocalizedText); + case BuiltInType.QualifiedName: return typeof(QualifiedName); + case BuiltInType.StatusCode: return typeof(StatusCode); + case BuiltInType.DiagnosticInfo: return typeof(DiagnosticInfo); + case BuiltInType.DataValue: return typeof(DataValue); + case BuiltInType.Variant: return typeof(Variant); + case BuiltInType.ExtensionObject: return typeof(ExtensionObject); + case BuiltInType.Enumeration: return typeof(int); + case BuiltInType.Number: return typeof(Variant); + case BuiltInType.Integer: return typeof(Variant); + case BuiltInType.UInteger: return typeof(Variant); + } + } + + else if (valueRank == ValueRanks.OneDimension) + { + switch (builtInType) + { + case BuiltInType.Boolean: return typeof(bool[]); + case BuiltInType.SByte: return typeof(sbyte[]); + case BuiltInType.Byte: return typeof(byte[]); + case BuiltInType.Int16: return typeof(short[]); + case BuiltInType.UInt16: return typeof(ushort[]); + case BuiltInType.Int32: return typeof(int[]); + case BuiltInType.UInt32: return typeof(uint[]); + case BuiltInType.Int64: return typeof(long[]); + case BuiltInType.UInt64: return typeof(ulong[]); + case BuiltInType.Float: return typeof(float[]); + case BuiltInType.Double: return typeof(double[]); + case BuiltInType.String: return typeof(string[]); + case BuiltInType.DateTime: return typeof(DateTime[]); + case BuiltInType.Guid: return typeof(Uuid[]); + case BuiltInType.ByteString: return typeof(byte[][]); + case BuiltInType.XmlElement: return typeof(XmlElement[]); + case BuiltInType.NodeId: return typeof(NodeId[]); + case BuiltInType.ExpandedNodeId: return typeof(ExpandedNodeId[]); + case BuiltInType.LocalizedText: return typeof(LocalizedText[]); + case BuiltInType.QualifiedName: return typeof(QualifiedName[]); + case BuiltInType.StatusCode: return typeof(StatusCode[]); + case BuiltInType.DiagnosticInfo: return typeof(DiagnosticInfo[]); + case BuiltInType.DataValue: return typeof(DataValue[]); + case BuiltInType.Variant: return typeof(Variant[]); + case BuiltInType.ExtensionObject: return typeof(ExtensionObject[]); + case BuiltInType.Enumeration: return typeof(int[]); + case BuiltInType.Number: return typeof(Variant[]); + case BuiltInType.Integer: return typeof(Variant[]); + case BuiltInType.UInteger: return typeof(Variant[]); + } + } + + else if (valueRank == ValueRanks.TwoDimensions) + { + switch (builtInType) + { + case BuiltInType.Boolean: return typeof(bool[,]); + case BuiltInType.SByte: return typeof(sbyte[,]); + case BuiltInType.Byte: return typeof(byte[,]); + case BuiltInType.Int16: return typeof(short[,]); + case BuiltInType.UInt16: return typeof(ushort[,]); + case BuiltInType.Int32: return typeof(int[,]); + case BuiltInType.UInt32: return typeof(uint[,]); + case BuiltInType.Int64: return typeof(long[,]); + case BuiltInType.UInt64: return typeof(ulong[,]); + case BuiltInType.Float: return typeof(float[,]); + case BuiltInType.Double: return typeof(double[,]); + case BuiltInType.String: return typeof(string[,]); + case BuiltInType.DateTime: return typeof(DateTime[,]); + case BuiltInType.Guid: return typeof(Uuid[,]); + case BuiltInType.ByteString: return typeof(byte[,][]); + case BuiltInType.XmlElement: return typeof(XmlElement[,]); + case BuiltInType.NodeId: return typeof(NodeId[,]); + case BuiltInType.ExpandedNodeId: return typeof(ExpandedNodeId[,]); + case BuiltInType.LocalizedText: return typeof(LocalizedText[,]); + case BuiltInType.QualifiedName: return typeof(QualifiedName[,]); + case BuiltInType.StatusCode: return typeof(StatusCode[,]); + case BuiltInType.DiagnosticInfo: return typeof(DiagnosticInfo[,]); + case BuiltInType.DataValue: return typeof(DataValue[,]); + case BuiltInType.Variant: return typeof(Variant[,]); + case BuiltInType.ExtensionObject: return typeof(ExtensionObject[,]); + case BuiltInType.Enumeration: return typeof(int[,]); + case BuiltInType.Number: return typeof(Variant[,]); + case BuiltInType.Integer: return typeof(Variant[,]); + case BuiltInType.UInteger: return typeof(Variant[,]); + } + } + + return typeof(Variant); + } + + /// + /// Returns the type info for the provided value. + /// + /// The value. + /// instance storing information about the type. + public static TypeInfo Construct(object value) + { + if (value == null) + { + return TypeInfo.Unknown; + } + + TypeInfo typeInfo = Construct(value.GetType()); + + // check for instances of matrixes. + if (typeInfo.BuiltInType == BuiltInType.Null) + { + Matrix matrix = value as Matrix; + + if (matrix != null) + { + return matrix.TypeInfo; + } + } + + return typeInfo; + } + + /// + /// Returns the type info for the specified system type. + /// + /// The specified system (framework) type. + /// instance storing information equivalent to the type. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public static TypeInfo Construct(Type systemType) + { + // check for null. + if (systemType == null) + { + return TypeInfo.Unknown; + } + + // using strings in switch statements is much faster than the typeof() operator. + string name = systemType.Name; + + // parse array types. + string dimensions = null; + + if (name[name.Length - 1] == ']') + { + int index = name.IndexOf('['); + + if (index != -1) + { + dimensions = name.Substring(index); + name = name.Substring(0, index); + } + } + + // handle scalar. + if (dimensions == null) + { + BuiltInType builtInType = GetBuiltInType(name); + + if (builtInType != BuiltInType.Null) + { + return new TypeInfo(builtInType, ValueRanks.Scalar); + } + + if (systemType.GetTypeInfo().IsEnum) + { + return new TypeInfo(BuiltInType.Enumeration, ValueRanks.Scalar); + } + + // check for collection. + if (name.EndsWith("Collection", StringComparison.Ordinal)) + { + builtInType = GetBuiltInType(name.Substring(0, name.Length - "Collection".Length)); + + if (builtInType != BuiltInType.Null) + { + return new TypeInfo(builtInType, ValueRanks.OneDimension); + } + + // check for encodeable object. + if (systemType.GetTypeInfo().BaseType.GetTypeInfo().IsGenericType) + { + return Construct(systemType.GetTypeInfo().BaseType); + } + + return TypeInfo.Unknown; + } + + // check for generic type. + if (systemType.GetTypeInfo().IsGenericType) + { + Type[] argTypes = systemType.GetGenericArguments(); + + if (argTypes != null && argTypes.Length == 1) + { + TypeInfo typeInfo = Construct(argTypes[0]); + + if (typeInfo.BuiltInType != BuiltInType.Null && typeInfo.ValueRank == ValueRanks.Scalar) + { + return new TypeInfo(typeInfo.BuiltInType, ValueRanks.OneDimension); + } + } + + return TypeInfo.Unknown; + } + + // check for encodeable object. + if (typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(systemType.GetTypeInfo()) || name == "IEncodeable") + { + return new TypeInfo(BuiltInType.ExtensionObject, ValueRanks.Scalar); + } + + return TypeInfo.Unknown; + } + + // handle one dimensional array. + if (dimensions.Length == 2) + { + BuiltInType builtInType = GetBuiltInType(name); + + if (builtInType == BuiltInType.Byte) + { + return new TypeInfo(BuiltInType.ByteString, ValueRanks.Scalar); + } + + if (builtInType != BuiltInType.Null) + { + return new TypeInfo(builtInType, ValueRanks.OneDimension); + } + + // check for encodeable object. + if (typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(systemType.GetElementType().GetTypeInfo()) || name == "IEncodeable") + { + return new TypeInfo(BuiltInType.ExtensionObject, ValueRanks.OneDimension); + } + + if (systemType.GetTypeInfo().GetElementType().IsEnum) + { + return new TypeInfo(BuiltInType.Enumeration, ValueRanks.OneDimension); + } + + return TypeInfo.Unknown; + } + + // count the number of dimensions (syntax is [,] - commas+1 is the number of dimensions). + int count = 1; + + for (int ii = 1; ii < dimensions.Length - 1; ii++) + { + if (dimensions[ii] == ',') + { + count++; + } + } + + // handle simple multi-dimensional array (enclosing [] + number of commas) + if (count + 1 == dimensions.Length) + { + BuiltInType builtInType = GetBuiltInType(name); + + if (builtInType != BuiltInType.Null) + { + return new TypeInfo(builtInType, count); + } + + // check for encodeable object. + if (typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(systemType.GetTypeInfo()) || name == "IEncodeable") + { + return new TypeInfo(BuiltInType.ExtensionObject, count); + } + + return TypeInfo.Unknown; + } + + // handle multi-dimensional array of byte strings. + if (dimensions[1] == ']') + { + // syntax of type is [][,,,] - adding three checks for the middle '][' + if (name == "Byte" && count + 3 == dimensions.Length) + { + return new TypeInfo(BuiltInType.ByteString, count); + } + } + + // unknown type. + return TypeInfo.Unknown; + } + + /// + /// Returns the default value for the specified built-in type. + /// + /// The Built-in type. + /// The default value. + public static object GetDefaultValue(BuiltInType type) + { + switch (type) + { + case BuiltInType.Boolean: { return false; } + case BuiltInType.SByte: { return (sbyte)0; } + case BuiltInType.Byte: { return (byte)0; } + case BuiltInType.Int16: { return (short)0; } + case BuiltInType.UInt16: { return (ushort)0; } + case BuiltInType.Int32: { return (int)0; } + case BuiltInType.UInt32: { return (uint)0; } + case BuiltInType.Int64: { return (long)0; } + case BuiltInType.UInt64: { return (ulong)0; } + case BuiltInType.Float: { return (float)0; } + case BuiltInType.Double: { return (double)0; } + case BuiltInType.String: { return null; } + case BuiltInType.DateTime: { return DateTime.MinValue; } + case BuiltInType.Guid: { return Uuid.Empty; } + case BuiltInType.ByteString: { return null; } + case BuiltInType.XmlElement: { return null; } + case BuiltInType.StatusCode: { return new StatusCode(StatusCodes.Good); } + case BuiltInType.NodeId: { return NodeId.Null; } + case BuiltInType.ExpandedNodeId: { return ExpandedNodeId.Null; } + case BuiltInType.QualifiedName: { return QualifiedName.Null; } + case BuiltInType.LocalizedText: { return LocalizedText.Null; } + case BuiltInType.Variant: { return Variant.Null; } + case BuiltInType.DataValue: { return null; } + case BuiltInType.Enumeration: { return (int)0; } + case BuiltInType.Number: { return (double)0; } + case BuiltInType.Integer: { return (long)0; } + case BuiltInType.UInteger: { return (ulong)0; } + } + + return null; + } + + /// + /// Returns the default value for the specified data type and value rank. + /// + /// The data type. + /// The value rank. + /// The default value. + public static object GetDefaultValue(NodeId dataType, int valueRank) + { + return GetDefaultValue(dataType, valueRank, null); + } + + /// + /// Returns the default value for the specified data type and value rank. + /// + /// The data type. + /// The value rank. + /// The type tree for a server. + /// A default value. + public static object GetDefaultValue(NodeId dataType, int valueRank, ITypeTable typeTree) + { + if (valueRank != ValueRanks.Scalar) + { + return null; + } + + BuiltInType builtInType = BuiltInType.Null; + + if (dataType != null && dataType.IdType == IdType.Numeric && dataType.NamespaceIndex == 0) + { + uint id = (uint)dataType.Identifier; + + // if we want an array then go into a loop + if (id <= DataTypes.DiagnosticInfo) + { + return GetDefaultValue((BuiltInType)(int)id); + } + + switch (id) + { + case DataTypes.Duration: { return (double)0; } + case DataTypes.Date: { return DateTime.MinValue; } + case DataTypes.UtcTime: { return DateTime.MinValue; } + case DataTypes.Counter: { return (uint)0; } + case DataTypes.IntegerId: { return (uint)0; } + case DataTypes.Number: { return (double)0; } + case DataTypes.UInteger: { return (ulong)0; } + case DataTypes.Integer: { return (long)0; } + case DataTypes.IdType: { return (int)IdType.Numeric; } + case DataTypes.NodeClass: { return (int)NodeClass.Unspecified; } + case DataTypes.Enumeration: { return (int)0; } + } + } + + builtInType = GetBuiltInType(dataType, typeTree); + + if (builtInType != BuiltInType.Null) + { + return GetDefaultValue(builtInType); + } + + return null; + } + + /// + /// Returns the default value for the specified built-in type. + /// + /// The built-in type. + /// The dimensions. + /// The default value for the specified built-in type + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public static Array CreateArray(BuiltInType type, params int[] dimensions) + { + if (dimensions == null || dimensions.Length == 0) + { + throw new ArgumentOutOfRangeException("Array dimensions must be specifed."); + } + + int length = dimensions[0]; + + // create one dimensional array. + if (dimensions.Length == 1) + { + switch (type) + { + case BuiltInType.Null: { return new object[length]; } + case BuiltInType.Boolean: { return new bool[length]; } + case BuiltInType.SByte: { return new sbyte[length]; } + case BuiltInType.Byte: { return new byte[length]; } + case BuiltInType.Int16: { return new short[length]; } + case BuiltInType.UInt16: { return new ushort[length]; } + case BuiltInType.Int32: { return new int[length]; } + case BuiltInType.UInt32: { return new uint[length]; } + case BuiltInType.Int64: { return new long[length]; } + case BuiltInType.UInt64: { return new ulong[length]; } + case BuiltInType.Float: { return new float[length]; } + case BuiltInType.Double: { return new double[length]; } + case BuiltInType.String: { return new string[length]; } + case BuiltInType.DateTime: { return new DateTime[length]; } + case BuiltInType.Guid: { return new Uuid[length]; } + case BuiltInType.ByteString: { return new byte[length][]; } + case BuiltInType.XmlElement: { return new XmlElement[length]; } + case BuiltInType.StatusCode: { return new StatusCode[length]; } + case BuiltInType.NodeId: { return new NodeId[length]; } + case BuiltInType.ExpandedNodeId: { return new ExpandedNodeId[length]; } + case BuiltInType.QualifiedName: { return new QualifiedName[length]; } + case BuiltInType.LocalizedText: { return new LocalizedText[length]; } + case BuiltInType.Variant: { return new Variant[length]; } + case BuiltInType.DataValue: { return new DataValue[length]; } + case BuiltInType.ExtensionObject: { return new ExtensionObject[length]; } + case BuiltInType.DiagnosticInfo: { return new DiagnosticInfo[length]; } + case BuiltInType.Enumeration: { return new int[length]; } + case BuiltInType.Number: { return new Variant[length]; } + case BuiltInType.Integer: { return new Variant[length]; } + case BuiltInType.UInteger: { return new Variant[length]; } + } + } + + // create higher dimension arrays. + else + { + switch (type) + { + case BuiltInType.Null: { return Array.CreateInstance(typeof(object), dimensions); } + case BuiltInType.Boolean: { return Array.CreateInstance(typeof(bool), dimensions); } + case BuiltInType.SByte: { return Array.CreateInstance(typeof(sbyte), dimensions); } + case BuiltInType.Byte: { return Array.CreateInstance(typeof(byte), dimensions); } + case BuiltInType.Int16: { return Array.CreateInstance(typeof(short), dimensions); } + case BuiltInType.UInt16: { return Array.CreateInstance(typeof(ushort), dimensions); } + case BuiltInType.Int32: { return Array.CreateInstance(typeof(int), dimensions); } + case BuiltInType.UInt32: { return Array.CreateInstance(typeof(uint), dimensions); } + case BuiltInType.Int64: { return Array.CreateInstance(typeof(long), dimensions); } + case BuiltInType.UInt64: { return Array.CreateInstance(typeof(ulong), dimensions); } + case BuiltInType.Float: { return Array.CreateInstance(typeof(float), dimensions); } + case BuiltInType.Double: { return Array.CreateInstance(typeof(double), dimensions); } + case BuiltInType.String: { return Array.CreateInstance(typeof(string), dimensions); } + case BuiltInType.DateTime: { return Array.CreateInstance(typeof(DateTime), dimensions); } + case BuiltInType.Guid: { return Array.CreateInstance(typeof(Uuid), dimensions); } + case BuiltInType.ByteString: { return Array.CreateInstance(typeof(byte[]), dimensions); } + case BuiltInType.XmlElement: { return Array.CreateInstance(typeof(XmlElement), dimensions); } + case BuiltInType.StatusCode: { return Array.CreateInstance(typeof(StatusCode), dimensions); } + case BuiltInType.NodeId: { return Array.CreateInstance(typeof(NodeId), dimensions); } + case BuiltInType.ExpandedNodeId: { return Array.CreateInstance(typeof(ExpandedNodeId), dimensions); } + case BuiltInType.QualifiedName: { return Array.CreateInstance(typeof(QualifiedName), dimensions); } + case BuiltInType.LocalizedText: { return Array.CreateInstance(typeof(LocalizedText), dimensions); } + case BuiltInType.Variant: { return Array.CreateInstance(typeof(Variant), dimensions); } + case BuiltInType.DataValue: { return Array.CreateInstance(typeof(DataValue), dimensions); } + case BuiltInType.ExtensionObject: { return Array.CreateInstance(typeof(ExtensionObject), dimensions); } + case BuiltInType.DiagnosticInfo: { return Array.CreateInstance(typeof(DiagnosticInfo), dimensions); } + case BuiltInType.Enumeration: { return Array.CreateInstance(typeof(int), dimensions); } + case BuiltInType.Number: { return Array.CreateInstance(typeof(Variant), dimensions); } + case BuiltInType.Integer: { return Array.CreateInstance(typeof(Variant), dimensions); } + case BuiltInType.UInteger: { return Array.CreateInstance(typeof(Variant), dimensions); } + } + } + + // should never happen. + return null; + } + + /// + /// Casts a value to the specified target type. + /// + /// The instance of a source value. + /// Type of the target. + /// Return casted value. + /// if imposible to cast. + public static object Cast(object source, BuiltInType targetType) + { + return Cast(source, TypeInfo.Construct(source), targetType); + } + + /// + /// Casts a value to the specified target type. + /// + /// The instance of a source value. + /// Type of the source. + /// Type of the target. + /// Return casted value. + /// if imposible to cast. + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public static object Cast(object source, TypeInfo sourceType, BuiltInType targetType) + { + // null always casts to null. + if (sourceType.BuiltInType == BuiltInType.Null) + { + return null; + } + + // check for trivial case. + if (sourceType.BuiltInType == targetType) + { + return source; + } + + // check for trivial case. + if (targetType == BuiltInType.Variant && sourceType.ValueRank < 0) + { + return new Variant(source); + } + + // check for guid. + if (sourceType.BuiltInType == BuiltInType.Guid) + { + source = Cast(source, sourceType, ToGuid); + } + + switch (targetType) + { + case BuiltInType.Boolean: return Cast(source, sourceType, ToBoolean); + case BuiltInType.SByte: return Cast(source, sourceType, ToSByte); + case BuiltInType.Byte: return Cast(source, sourceType, ToByte); + case BuiltInType.Int16: return Cast(source, sourceType, ToInt16); + case BuiltInType.UInt16: return Cast(source, sourceType, ToUInt16); + case BuiltInType.Int32: return Cast(source, sourceType, ToInt32); + case BuiltInType.UInt32: return Cast(source, sourceType, ToUInt32); + case BuiltInType.Int64: return Cast(source, sourceType, ToInt64); + case BuiltInType.UInt64: return Cast(source, sourceType, ToUInt64); + case BuiltInType.Float: return Cast(source, sourceType, ToFloat); + case BuiltInType.Double: return Cast(source, sourceType, ToDouble); + case BuiltInType.String: return Cast(source, sourceType, ToString); + case BuiltInType.DateTime: return Cast(source, sourceType, ToDateTime); + case BuiltInType.Guid: return Cast(source, sourceType, ToGuid); + case BuiltInType.ByteString: return Cast(source, sourceType, ToByteString); + case BuiltInType.NodeId: return Cast(source, sourceType, ToNodeId); + case BuiltInType.ExpandedNodeId: return Cast(source, sourceType, ToExpandedNodeId); + case BuiltInType.StatusCode: return Cast(source, sourceType, ToStatusCode); + case BuiltInType.QualifiedName: return Cast(source, sourceType, ToQualifiedName); + case BuiltInType.LocalizedText: return Cast(source, sourceType, ToLocalizedText); + case BuiltInType.Variant: return Cast(source, sourceType, ToVariant); + case BuiltInType.Number: return Cast(source, sourceType, ToDouble); + case BuiltInType.Integer: return Cast(source, sourceType, ToInt64); + case BuiltInType.UInteger: return Cast(source, sourceType, ToUInt64); + case BuiltInType.Enumeration: return Cast(source, sourceType, ToInt32); + case BuiltInType.XmlElement: return Cast(source, sourceType, ToXmlElement); + } + + throw new InvalidCastException(); + } + + /// + /// Converts the array using the specified conversion function. + /// + /// The destination array (must have the same size as the source array). + /// The data type of the elements in the destination array. + /// The source array. + /// The data type of the elements in the source array. + /// The handler which does the conversion. + public static void CastArray(Array dst, BuiltInType dstType, Array src, BuiltInType srcType, CastArrayElementHandler convertor) + { + bool isSrcVariant = src.GetType().GetElementType() == typeof(Variant); + bool isDstVariant = dst.GetType().GetElementType() == typeof(Variant); + + // optimize performance if dealing with a one dimensional array. + if (src.Rank == 1) + { + for (int ii = 0; ii < dst.Length; ii++) + { + object element = src.GetValue(ii); + + if (isSrcVariant) + { + element = ((Variant)element).Value; + } + + if (convertor != null) + { + element = convertor(element, srcType, dstType); + } + + if (isDstVariant) + { + element = new Variant(element); + } + + dst.SetValue(element, ii); + } + + return; + } + + // do it the hard way for multidimensional arrays. + int[] dimensions = new int[src.Rank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + dimensions[ii] = src.GetLength(ii); + } + + int length = dst.Length; + int[] indexes = new int[dimensions.Length]; + + for (int ii = 0; ii < length; ii++) + { + int divisor = dst.Length; + + for (int jj = 0; jj < indexes.Length; jj++) + { + divisor /= dimensions[jj]; + indexes[jj] = (ii / divisor) % dimensions[jj]; + } + + object element = src.GetValue(indexes); + + if (element != null) + { + if (isSrcVariant) + { + element = ((Variant)element).Value; + } + + if (convertor != null) + { + element = convertor(element, srcType, dstType); + } + + if (isDstVariant) + { + element = new Variant(element); + } + + dst.SetValue(element, indexes); + } + } + } + + /// + /// Converts the array. + /// + /// The source array. + /// The type of the source array. + /// The type of the converted array. + /// The handler which does the conversion. + /// The converted array. + public static Array CastArray(Array srcArray, BuiltInType srcType, BuiltInType dstType, CastArrayElementHandler convertor) + { + if (srcArray == null) + { + return null; + } + + int[] dimensions = new int[srcArray.Rank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + dimensions[ii] = srcArray.GetLength(ii); + } + + Array dstArray = TypeInfo.CreateArray(dstType, dimensions); + CastArray(dstArray, dstType, srcArray, srcType, convertor); + + return dstArray; + } + + /// + /// A delegate for a function that converts an array element. + /// + /// The element to be converted. + /// The type of the source element. + /// The type of the converted value. + /// The converted + public delegate object CastArrayElementHandler(object source, BuiltInType srcType, BuiltInType dstType); + #endregion + + #region Private Methods + /// + /// Maps the type name to a built-in type. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + private static BuiltInType GetBuiltInType(string typeName) + { + switch (typeName) + { + case "Boolean": return BuiltInType.Boolean; + case "SByte": return BuiltInType.SByte; + case "Byte": return BuiltInType.Byte; + case "Int16": return BuiltInType.Int16; + case "UInt16": return BuiltInType.UInt16; + case "Int32": return BuiltInType.Int32; + case "UInt32": return BuiltInType.UInt32; + case "Int64": return BuiltInType.Int64; + case "UInt64": return BuiltInType.UInt64; + case "Float": return BuiltInType.Float; + case "Single": return BuiltInType.Float; + case "Double": return BuiltInType.Double; + case "String": return BuiltInType.String; + case "DateTime": return BuiltInType.DateTime; + case "Guid": return BuiltInType.Guid; + case "Uuid": return BuiltInType.Guid; + case "ByteString": return BuiltInType.ByteString; + case "XmlElement": return BuiltInType.XmlElement; + case "NodeId": return BuiltInType.NodeId; + case "ExpandedNodeId": return BuiltInType.ExpandedNodeId; + case "LocalizedText": return BuiltInType.LocalizedText; + case "QualifiedName": return BuiltInType.QualifiedName; + case "StatusCode": return BuiltInType.StatusCode; + case "DiagnosticInfo": return BuiltInType.DiagnosticInfo; + case "DataValue": return BuiltInType.DataValue; + case "Variant": return BuiltInType.Variant; + case "ExtensionObject": return BuiltInType.ExtensionObject; + case "Object": return BuiltInType.Variant; + } + + return BuiltInType.Null; + } + + /// + /// Converts a value to a Boolean + /// + private static bool ToBoolean(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Boolean: + { + return (bool)value; + } + + case BuiltInType.SByte: return Convert.ToBoolean((sbyte)value); + case BuiltInType.Byte: return Convert.ToBoolean((byte)value); + case BuiltInType.Int16: return Convert.ToBoolean((short)value); + case BuiltInType.UInt16: return Convert.ToBoolean((ushort)value); + case BuiltInType.Int32: return Convert.ToBoolean((int)value); + case BuiltInType.UInt32: return Convert.ToBoolean((uint)value); + case BuiltInType.Int64: return Convert.ToBoolean((long)value); + case BuiltInType.UInt64: return Convert.ToBoolean((ulong)value); + case BuiltInType.Float: return Convert.ToBoolean((float)value); + case BuiltInType.Double: return Convert.ToBoolean((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToBoolean((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a SByte + /// + private static sbyte ToSByte(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.SByte: + { + return (sbyte)value; + } + + case BuiltInType.Boolean: return Convert.ToSByte((bool)value); + case BuiltInType.Byte: return Convert.ToSByte((byte)value); + case BuiltInType.Int16: return Convert.ToSByte((short)value); + case BuiltInType.UInt16: return Convert.ToSByte((ushort)value); + case BuiltInType.Int32: return Convert.ToSByte((int)value); + case BuiltInType.UInt32: return Convert.ToSByte((uint)value); + case BuiltInType.Int64: return Convert.ToSByte((long)value); + case BuiltInType.UInt64: return Convert.ToSByte((ulong)value); + case BuiltInType.Float: return Convert.ToSByte((float)value); + case BuiltInType.Double: return Convert.ToSByte((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToSByte((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Byte + /// + private static byte ToByte(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Byte: + { + return (byte)value; + } + + case BuiltInType.Boolean: return Convert.ToByte((bool)value); + case BuiltInType.SByte: return Convert.ToByte((sbyte)value); + case BuiltInType.Int16: return Convert.ToByte((short)value); + case BuiltInType.UInt16: return Convert.ToByte((ushort)value); + case BuiltInType.Int32: return Convert.ToByte((int)value); + case BuiltInType.UInt32: return Convert.ToByte((uint)value); + case BuiltInType.Int64: return Convert.ToByte((long)value); + case BuiltInType.UInt64: return Convert.ToByte((ulong)value); + case BuiltInType.Float: return Convert.ToByte((float)value); + case BuiltInType.Double: return Convert.ToByte((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToByte((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Int16 + /// + private static short ToInt16(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Int16: + { + return (short)value; + } + + case BuiltInType.Boolean: return Convert.ToInt16((bool)value); + case BuiltInType.SByte: return Convert.ToInt16((sbyte)value); + case BuiltInType.Byte: return Convert.ToInt16((byte)value); + case BuiltInType.UInt16: return Convert.ToInt16((ushort)value); + case BuiltInType.Int32: return Convert.ToInt16((int)value); + case BuiltInType.UInt32: return Convert.ToInt16((uint)value); + case BuiltInType.Int64: return Convert.ToInt16((long)value); + case BuiltInType.UInt64: return Convert.ToInt16((ulong)value); + case BuiltInType.Float: return Convert.ToInt16((float)value); + case BuiltInType.Double: return Convert.ToInt16((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToInt16((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a UInt16 + /// + private static ushort ToUInt16(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.UInt16: + { + return (ushort)value; + } + + case BuiltInType.Boolean: return Convert.ToUInt16((bool)value); + case BuiltInType.SByte: return Convert.ToUInt16((sbyte)value); + case BuiltInType.Byte: return Convert.ToUInt16((byte)value); + case BuiltInType.Int16: return Convert.ToUInt16((short)value); + case BuiltInType.Int32: return Convert.ToUInt16((int)value); + case BuiltInType.UInt32: return Convert.ToUInt16((uint)value); + case BuiltInType.Int64: return Convert.ToUInt16((long)value); + case BuiltInType.UInt64: return Convert.ToUInt16((ulong)value); + case BuiltInType.Float: return Convert.ToUInt16((float)value); + case BuiltInType.Double: return Convert.ToUInt16((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToUInt16((string)value); + } + + case BuiltInType.StatusCode: + { + StatusCode code = (StatusCode)value; + return (ushort)(code.CodeBits >> 16); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Int32 + /// + private static int ToInt32(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Int32: + { + return (int)value; + } + + case BuiltInType.Boolean: return Convert.ToInt32((bool)value); + case BuiltInType.SByte: return Convert.ToInt32((sbyte)value); + case BuiltInType.Byte: return Convert.ToInt32((byte)value); + case BuiltInType.Int16: return Convert.ToInt32((short)value); + case BuiltInType.UInt16: return Convert.ToInt32((ushort)value); + case BuiltInType.UInt32: return Convert.ToInt32((uint)value); + case BuiltInType.Int64: return Convert.ToInt32((long)value); + case BuiltInType.UInt64: return Convert.ToInt32((ulong)value); + case BuiltInType.Float: return Convert.ToInt32((float)value); + case BuiltInType.Double: return Convert.ToInt32((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToInt32((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToInt32(((StatusCode)value).Code); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a UInt32 + /// + private static uint ToUInt32(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.UInt32: + { + return (uint)value; + } + + case BuiltInType.Boolean: return Convert.ToUInt32((bool)value); + case BuiltInType.SByte: return Convert.ToUInt32((sbyte)value); + case BuiltInType.Byte: return Convert.ToUInt32((byte)value); + case BuiltInType.Int16: return Convert.ToUInt32((short)value); + case BuiltInType.UInt16: return Convert.ToUInt32((ushort)value); + case BuiltInType.Int32: return Convert.ToUInt32((int)value); + case BuiltInType.Int64: return Convert.ToUInt32((long)value); + case BuiltInType.UInt64: return Convert.ToUInt32((ulong)value); + case BuiltInType.Float: return Convert.ToUInt32((float)value); + case BuiltInType.Double: return Convert.ToUInt32((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToUInt32((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToUInt32(((StatusCode)value).Code); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Int64 + /// + private static long ToInt64(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Int64: + { + return (long)value; + } + + case BuiltInType.Boolean: return Convert.ToInt64((bool)value); + case BuiltInType.SByte: return Convert.ToInt64((sbyte)value); + case BuiltInType.Byte: return Convert.ToInt64((byte)value); + case BuiltInType.Int16: return Convert.ToInt64((short)value); + case BuiltInType.UInt16: return Convert.ToInt64((ushort)value); + case BuiltInType.Int32: return Convert.ToInt64((int)value); + case BuiltInType.UInt32: return Convert.ToInt64((uint)value); + case BuiltInType.UInt64: return Convert.ToInt64((ulong)value); + case BuiltInType.Float: return Convert.ToInt64((float)value); + case BuiltInType.Double: return Convert.ToInt64((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToInt64((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToInt64(((StatusCode)value).Code); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a UInt64 + /// + private static ulong ToUInt64(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.UInt64: + { + return (ulong)value; + } + + case BuiltInType.Boolean: return Convert.ToUInt64((bool)value); + case BuiltInType.SByte: return Convert.ToUInt64((sbyte)value); + case BuiltInType.Byte: return Convert.ToUInt64((byte)value); + case BuiltInType.Int16: return Convert.ToUInt64((short)value); + case BuiltInType.UInt16: return Convert.ToUInt64((ushort)value); + case BuiltInType.Int32: return Convert.ToUInt64((int)value); + case BuiltInType.UInt32: return Convert.ToUInt64((uint)value); + case BuiltInType.Int64: return Convert.ToUInt64((long)value); + case BuiltInType.Float: return Convert.ToUInt64((float)value); + case BuiltInType.Double: return Convert.ToUInt64((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToUInt64((string)value); + } + + case BuiltInType.StatusCode: + { + return Convert.ToUInt64(((StatusCode)value).Code); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Float + /// + private static float ToFloat(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Float: + { + return (float)value; + } + + case BuiltInType.Boolean: return Convert.ToSingle((bool)value); + case BuiltInType.SByte: return Convert.ToSingle((sbyte)value); + case BuiltInType.Byte: return Convert.ToSingle((byte)value); + case BuiltInType.Int16: return Convert.ToSingle((short)value); + case BuiltInType.UInt16: return Convert.ToSingle((ushort)value); + case BuiltInType.Int32: return Convert.ToSingle((int)value); + case BuiltInType.UInt32: return Convert.ToSingle((uint)value); + case BuiltInType.Int64: return Convert.ToSingle((long)value); + case BuiltInType.UInt64: return Convert.ToSingle((ulong)value); + case BuiltInType.Double: return Convert.ToSingle((double)value); + + case BuiltInType.String: + { + return XmlConvert.ToSingle((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Double + /// + private static double ToDouble(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.Double: + { + return (double)value; + } + + case BuiltInType.Boolean: return Convert.ToDouble((bool)value); + case BuiltInType.SByte: return Convert.ToDouble((sbyte)value); + case BuiltInType.Byte: return Convert.ToDouble((byte)value); + case BuiltInType.Int16: return Convert.ToDouble((short)value); + case BuiltInType.UInt16: return Convert.ToDouble((ushort)value); + case BuiltInType.Int32: return Convert.ToDouble((int)value); + case BuiltInType.UInt32: return Convert.ToDouble((uint)value); + case BuiltInType.Int64: return Convert.ToDouble((long)value); + case BuiltInType.UInt64: return Convert.ToDouble((ulong)value); + case BuiltInType.Float: return Convert.ToDouble((float)value); + + case BuiltInType.String: + { + return XmlConvert.ToDouble((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a String + /// + private static string ToString(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.String: + { + return (string)value; + } + + case BuiltInType.Boolean: + { + return XmlConvert.ToString((bool)value); + } + + case BuiltInType.SByte: + { + return XmlConvert.ToString((sbyte)value); + } + + case BuiltInType.Byte: + { + return XmlConvert.ToString((byte)value); + } + + case BuiltInType.Int16: + { + return XmlConvert.ToString((short)value); + } + + case BuiltInType.UInt16: + { + return XmlConvert.ToString((ushort)value); + } + + case BuiltInType.Int32: + { + return XmlConvert.ToString((int)value); + } + + case BuiltInType.UInt32: + { + return XmlConvert.ToString((uint)value); + } + + case BuiltInType.Int64: + { + return XmlConvert.ToString((long)value); + } + + case BuiltInType.UInt64: + { + return XmlConvert.ToString((ulong)value); + } + + case BuiltInType.Float: + { + return XmlConvert.ToString((float)value); + } + + case BuiltInType.Double: + { + return XmlConvert.ToString((double)value); + } + + case BuiltInType.DateTime: + { + return XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.Unspecified); + } + + case BuiltInType.Guid: + { + return ((Uuid)value).ToString(); + } + + case BuiltInType.NodeId: + { + return ((NodeId)value).ToString(); + } + + case BuiltInType.ExpandedNodeId: + { + return ((ExpandedNodeId)value).ToString(); + } + + case BuiltInType.LocalizedText: + { + return ((LocalizedText)value).Text; + } + + case BuiltInType.QualifiedName: + { + return ((QualifiedName)value).ToString(); + } + + case BuiltInType.XmlElement: + { + return ((XmlElement)value).OuterXml; + } + + case BuiltInType.StatusCode: + { + return ((StatusCode)value).Code.ToString(); + } + + case BuiltInType.ExtensionObject: + { + return ((ExtensionObject)value).ToString(); + } + + case BuiltInType.Null: + { + return null; + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a DateTime + /// + private static DateTime ToDateTime(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.DateTime: + { + return (DateTime)value; + } + + case BuiltInType.String: + { + return XmlConvert.ToDateTime((string)value, XmlDateTimeSerializationMode.Unspecified); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Guid + /// + private static Uuid ToGuid(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.String: + { + return new Uuid((string)value); + } + + case BuiltInType.ByteString: + { + return new Uuid(new Guid((byte[])value)); + } + + case BuiltInType.Guid: + { + Guid? guid = value as Guid?; + + if (guid != null) + { + return new Uuid(guid.Value); + } + + return (Uuid)value; + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a ByteString + /// + private static byte[] ToByteString(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.ByteString: + { + return (byte[])value; + } + + case BuiltInType.String: + { + string text = (string)value; + + if (text == null) + { + return null; + } + + if (text.Length == 0) + { + return new byte[0]; + } + + using (System.IO.MemoryStream ostrm = new System.IO.MemoryStream()) + { + byte buffer = 0; + bool firstByte = false; + const string digits = "0123456789ABCDEF"; + + for (int ii = 0; ii < text.Length; ii++) + { + if (!Char.IsWhiteSpace(text, ii) && !Char.IsLetterOrDigit(text, ii)) + { + throw new FormatException("Invalid character in ByteString. " + text[ii]); + } + + if (Char.IsWhiteSpace(text, ii)) + { + continue; + } + + int index = digits.IndexOf(Char.ToUpper(text[ii])); + + if (index < 0) + { + throw new FormatException("Invalid character in ByteString." + text[ii]); + } + + buffer <<= 4; + buffer += (byte)index; + + if (firstByte) + { + ostrm.WriteByte(buffer); + firstByte = false; + continue; + } + + firstByte = true; + } + + if (firstByte) + { + buffer <<= 4; + ostrm.WriteByte(buffer); + } + + // you should not access a closed stream, ever. + return ostrm.ToArray(); + } + } + + case BuiltInType.Guid: + { + return ((Guid)((Uuid)value)).ToByteArray(); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a XmlElement + /// + private static XmlElement ToXmlElement(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.XmlElement: + { + return (XmlElement)value; + } + + case BuiltInType.String: + { + XmlDocument document = new XmlDocument(); + document.InnerXml = (string)value; + return document.DocumentElement; + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a NodeId + /// + private static NodeId ToNodeId(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.NodeId: + { + return (NodeId)value; + } + + case BuiltInType.ExpandedNodeId: + { + return (NodeId)(ExpandedNodeId)value; + } + + case BuiltInType.String: + { + return NodeId.Parse((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a ExpandedNodeId + /// + private static ExpandedNodeId ToExpandedNodeId(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.ExpandedNodeId: + { + return (ExpandedNodeId)value; + } + + case BuiltInType.NodeId: + { + return (ExpandedNodeId)(NodeId)value; + } + + case BuiltInType.String: + { + return ExpandedNodeId.Parse((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a StatusCode + /// + private static StatusCode ToStatusCode(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.StatusCode: + { + return (StatusCode)value; + } + + case BuiltInType.UInt16: + { + uint code = Convert.ToUInt32((ushort)value); + code <<= 16; + return (StatusCode)code; + } + + case BuiltInType.Int32: + { + return (StatusCode)Convert.ToUInt32((int)value); + } + + case BuiltInType.UInt32: + { + return (StatusCode)(uint)value; + } + + case BuiltInType.Int64: + { + return (StatusCode)Convert.ToUInt32((long)value); + } + + case BuiltInType.UInt64: + { + return (StatusCode)Convert.ToUInt32((ulong)value); + } + + case BuiltInType.String: + { + string text = (string)value; + + if (text == null) + { + return StatusCodes.Good; + } + + text = text.Trim(); + + if (text.StartsWith("0x")) + { + return (StatusCode)Convert.ToUInt32(text.Substring(2), 16); + } + + return (StatusCode)Convert.ToUInt32((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a QualifiedName + /// + private static QualifiedName ToQualifiedName(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.QualifiedName: + { + return (QualifiedName)value; + } + + case BuiltInType.String: + { + return QualifiedName.Parse((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a LocalizedText + /// + private static LocalizedText ToLocalizedText(object value, TypeInfo sourceType) + { + // handle for supported conversions. + switch (sourceType.BuiltInType) + { + case BuiltInType.LocalizedText: + { + return (LocalizedText)value; + } + + case BuiltInType.String: + { + return new LocalizedText((string)value); + } + } + + // conversion not supported. + throw new InvalidCastException(); + } + + /// + /// Converts a value to a Variant + /// + private static Variant ToVariant(object value, TypeInfo sourceType) + { + return new Variant(value); + } + + /// + /// Delegate for a function used to cast a value to the specified type. + /// + private delegate T CastDelegate(object value, TypeInfo sourceType); + + /// + /// Casts a scalar or array value to the specified type. + /// + private static object Cast(object input, TypeInfo sourceType, CastDelegate handler) + { + if (sourceType == null) + { + sourceType = TypeInfo.Construct(input); + } + + if (sourceType.ValueRank >= 0) + { + return Cast((Array)input, sourceType, handler); + } + + if (sourceType.BuiltInType == BuiltInType.Variant) + { + object value = ((Variant)input).Value; + sourceType = TypeInfo.Construct(value); + return handler(value, sourceType); + } + + return handler(input, sourceType); + } + + /// + /// Casts an array to an array of the specified type. + /// + private static Array Cast(Array input, TypeInfo sourceType, CastDelegate handler) + { + if (input == null) + { + return null; + } + + TypeInfo elementType = new TypeInfo(sourceType.BuiltInType, ValueRanks.Scalar); + + if (input.Rank == 1) + { + T[] copy = new T[input.Length]; + + for (int ii = 0; ii < input.Length; ii++) + { + object value = input.GetValue(ii); + + if (value != null) + { + if (sourceType.BuiltInType == BuiltInType.Variant) + { + value = ((Variant)value).Value; + elementType = TypeInfo.Construct(value); + } + + copy[ii] = handler(value, elementType); + } + } + + return copy; + } + + if (input.Rank == 2) + { + int x = input.GetLength(0); + int y = input.GetLength(1); + + T[,] copy = new T[x, y]; + + for (int ii = 0; ii < x; ii++) + { + for (int jj = 0; jj < y; jj++) + { + object value = input.GetValue(ii, jj); + + if (value != null) + { + if (sourceType.BuiltInType == BuiltInType.Variant) + { + value = ((Variant)value).Value; + elementType = TypeInfo.Construct(value); + } + + copy[ii, jj] = handler(value, elementType); + } + } + } + + return copy; + } + + int[] dimensions = new int[input.Rank]; + + for (int ii = 0; ii < dimensions.Length; ii++) + { + dimensions[ii] = input.GetLength(ii); + } + + Array output = Array.CreateInstance(typeof(T), dimensions); + + int length = output.Length; + int[] indexes = new int[dimensions.Length]; + + for (int ii = 0; ii < length; ii++) + { + int divisor = output.Length; + + for (int jj = 0; jj < indexes.Length; jj++) + { + divisor /= dimensions[jj]; + indexes[jj] = (ii / divisor) % dimensions[jj]; + } + + object value = input.GetValue(indexes); + + if (value != null) + { + if (sourceType.BuiltInType == BuiltInType.Variant) + { + value = ((Variant)value).Value; + elementType = TypeInfo.Construct(value); + } + + output.SetValue(handler(value, elementType), indexes); + } + } + + return output; + } + #endregion + + #region Private Fields + private BuiltInType m_builtInType; + private int m_valueRank; + private static readonly TypeInfo s_Unknown = new TypeInfo(); + #endregion + + #region Scalars Class + /// + /// Constants for scalar types. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public static class Scalars + { + /// + /// A boolean logic value (true or false). + /// + public static readonly TypeInfo Boolean = new TypeInfo(BuiltInType.Boolean, ValueRanks.Scalar); + + /// + /// An 8 bit signed integer value. + /// + public static readonly TypeInfo SByte = new TypeInfo(BuiltInType.SByte, ValueRanks.Scalar); + + /// + /// An 8 bit unsigned integer value. + /// + public static readonly TypeInfo Byte = new TypeInfo(BuiltInType.Byte, ValueRanks.Scalar); + + /// + /// A 16 bit signed integer value. + /// + public static readonly TypeInfo Int16 = new TypeInfo(BuiltInType.Int16, ValueRanks.Scalar); + + /// + /// A 16 bit signed integer value. + /// + public static readonly TypeInfo UInt16 = new TypeInfo(BuiltInType.UInt16, ValueRanks.Scalar); + + /// + /// A 32 bit signed integer value. + /// + public static readonly TypeInfo Int32 = new TypeInfo(BuiltInType.Int32, ValueRanks.Scalar); + + /// + /// A 32 bit unsigned integer value. + /// + public static readonly TypeInfo UInt32 = new TypeInfo(BuiltInType.UInt32, ValueRanks.Scalar); + + /// + /// A 64 bit signed integer value. + /// + public static readonly TypeInfo Int64 = new TypeInfo(BuiltInType.Int64, ValueRanks.Scalar); + + /// + /// A 64 bit unsigned integer value. + /// + public static readonly TypeInfo UInt64 = new TypeInfo(BuiltInType.UInt64, ValueRanks.Scalar); + + /// + /// An IEEE single precision (32 bit) floating point value. + /// + public static readonly TypeInfo Float = new TypeInfo(BuiltInType.Float, ValueRanks.Scalar); + + /// + /// An IEEE double precision (64 bit) floating point value. + /// + public static readonly TypeInfo Double = new TypeInfo(BuiltInType.Double, ValueRanks.Scalar); + + /// + /// A sequence of Unicode characters. + /// + public static readonly TypeInfo String = new TypeInfo(BuiltInType.String, ValueRanks.Scalar); + + /// + /// An instance in time. + /// + public static readonly TypeInfo DateTime = new TypeInfo(BuiltInType.DateTime, ValueRanks.Scalar); + + /// + /// A 128-bit globally unique identifier. + /// + public static readonly TypeInfo Guid = new TypeInfo(BuiltInType.Guid, ValueRanks.Scalar); + + /// + /// A sequence of bytes. + /// + public static readonly TypeInfo ByteString = new TypeInfo(BuiltInType.ByteString, ValueRanks.Scalar); + + /// + /// An XML element. + /// + public static readonly TypeInfo XmlElement = new TypeInfo(BuiltInType.XmlElement, ValueRanks.Scalar); + + /// + /// An identifier for a node in the address space of a UA server. + /// + public static readonly TypeInfo NodeId = new TypeInfo(BuiltInType.NodeId, ValueRanks.Scalar); + + /// + /// A node id that stores the namespace URI instead of the namespace index. + /// + public static readonly TypeInfo ExpandedNodeId = new TypeInfo(BuiltInType.ExpandedNodeId, ValueRanks.Scalar); + + /// + /// A structured result code. + /// + public static readonly TypeInfo StatusCode = new TypeInfo(BuiltInType.StatusCode, ValueRanks.Scalar); + + /// + /// A string qualified with a namespace. + /// + public static readonly TypeInfo QualifiedName = new TypeInfo(BuiltInType.QualifiedName, ValueRanks.Scalar); + + /// + /// A localized text string with an locale identifier. + /// + public static readonly TypeInfo LocalizedText = new TypeInfo(BuiltInType.LocalizedText, ValueRanks.Scalar); + + /// + /// An opaque object with a syntax that may be unknown to the receiver. + /// + public static readonly TypeInfo ExtensionObject = new TypeInfo(BuiltInType.ExtensionObject, ValueRanks.Scalar); + + /// + /// A data value with an associated quality and timestamp. + /// + public static readonly TypeInfo DataValue = new TypeInfo(BuiltInType.DataValue, ValueRanks.Scalar); + + /// + /// Any of the other built-in types. + /// + public static readonly TypeInfo Variant = new TypeInfo(BuiltInType.Variant, ValueRanks.Scalar); + + /// + /// A diagnostic information associated with a result code. + /// + public static readonly TypeInfo DiagnosticInfo = new TypeInfo(BuiltInType.DiagnosticInfo, ValueRanks.Scalar); + } + #endregion + + #region Arrays Class + /// + /// Constants for one dimensional array types. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public static class Arrays + { + /// + /// A boolean logic value (true or false). + /// + public static readonly TypeInfo Boolean = new TypeInfo(BuiltInType.Boolean, ValueRanks.OneDimension); + + /// + /// An 8 bit signed integer value. + /// + public static readonly TypeInfo SByte = new TypeInfo(BuiltInType.SByte, ValueRanks.OneDimension); + + /// + /// An 8 bit unsigned integer value. + /// + public static readonly TypeInfo Byte = new TypeInfo(BuiltInType.Byte, ValueRanks.OneDimension); + + /// + /// A 16 bit signed integer value. + /// + public static readonly TypeInfo Int16 = new TypeInfo(BuiltInType.Int16, ValueRanks.OneDimension); + + /// + /// A 16 bit signed integer value. + /// + public static readonly TypeInfo UInt16 = new TypeInfo(BuiltInType.UInt16, ValueRanks.OneDimension); + + /// + /// A 32 bit signed integer value. + /// + public static readonly TypeInfo Int32 = new TypeInfo(BuiltInType.Int32, ValueRanks.OneDimension); + + /// + /// A 32 bit unsigned integer value. + /// + public static readonly TypeInfo UInt32 = new TypeInfo(BuiltInType.UInt32, ValueRanks.OneDimension); + + /// + /// A 64 bit signed integer value. + /// + public static readonly TypeInfo Int64 = new TypeInfo(BuiltInType.Int64, ValueRanks.OneDimension); + + /// + /// A 64 bit unsigned integer value. + /// + public static readonly TypeInfo UInt64 = new TypeInfo(BuiltInType.UInt64, ValueRanks.OneDimension); + + /// + /// An IEEE single precision (32 bit) floating point value. + /// + public static readonly TypeInfo Float = new TypeInfo(BuiltInType.Float, ValueRanks.OneDimension); + + /// + /// An IEEE double precision (64 bit) floating point value. + /// + public static readonly TypeInfo Double = new TypeInfo(BuiltInType.Double, ValueRanks.OneDimension); + + /// + /// A sequence of Unicode characters. + /// + public static readonly TypeInfo String = new TypeInfo(BuiltInType.String, ValueRanks.OneDimension); + + /// + /// An instance in time. + /// + public static readonly TypeInfo DateTime = new TypeInfo(BuiltInType.DateTime, ValueRanks.OneDimension); + + /// + /// A 128-bit globally unique identifier. + /// + public static readonly TypeInfo Guid = new TypeInfo(BuiltInType.Guid, ValueRanks.OneDimension); + + /// + /// A sequence of bytes. + /// + public static readonly TypeInfo ByteString = new TypeInfo(BuiltInType.ByteString, ValueRanks.OneDimension); + + /// + /// An XML element. + /// + public static readonly TypeInfo XmlElement = new TypeInfo(BuiltInType.XmlElement, ValueRanks.OneDimension); + + /// + /// An identifier for a node in the address space of a UA server. + /// + public static readonly TypeInfo NodeId = new TypeInfo(BuiltInType.NodeId, ValueRanks.OneDimension); + + /// + /// A node id that stores the namespace URI instead of the namespace index. + /// + public static readonly TypeInfo ExpandedNodeId = new TypeInfo(BuiltInType.ExpandedNodeId, ValueRanks.OneDimension); + + /// + /// A structured result code. + /// + public static readonly TypeInfo StatusCode = new TypeInfo(BuiltInType.StatusCode, ValueRanks.OneDimension); + + /// + /// A string qualified with a namespace. + /// + public static readonly TypeInfo QualifiedName = new TypeInfo(BuiltInType.QualifiedName, ValueRanks.OneDimension); + + /// + /// A localized text string with an locale identifier. + /// + public static readonly TypeInfo LocalizedText = new TypeInfo(BuiltInType.LocalizedText, ValueRanks.OneDimension); + + /// + /// An opaque object with a syntax that may be unknown to the receiver. + /// + public static readonly TypeInfo ExtensionObject = new TypeInfo(BuiltInType.ExtensionObject, ValueRanks.OneDimension); + + /// + /// A data value with an associated quality and timestamp. + /// + public static readonly TypeInfo DataValue = new TypeInfo(BuiltInType.DataValue, ValueRanks.OneDimension); + + /// + /// Any of the other built-in types. + /// + public static readonly TypeInfo Variant = new TypeInfo(BuiltInType.Variant, ValueRanks.OneDimension); + + /// + /// A diagnostic information associated with a result code. + /// + public static readonly TypeInfo DiagnosticInfo = new TypeInfo(BuiltInType.DiagnosticInfo, ValueRanks.OneDimension); + } + #endregion + + #region IFormattable Members + /// + /// Formats the type information as a string. + /// + public override string ToString() + { + return ToString(null, null); + } + + /// + /// Formats the type information as a string. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + { + System.Text.StringBuilder buffer = new System.Text.StringBuilder(); + buffer.Append(m_builtInType); + + if (m_valueRank >= 0) + { + buffer.Append("["); + + for (int ii = 1; ii < m_valueRank; ii++) + { + buffer.Append(","); + } + + buffer.Append("]"); + } + + return buffer.ToString(); + } + + throw new FormatException(Utils.Format("Invalid format string: '{0}'.", format)); + } + #endregion + + #region Overridden Methods + /// + /// Determines if the specified object is equal to the object. + /// + /// + /// Determines if the specified object is equal to the object. + /// + public override bool Equals(object obj) + { + if (Object.ReferenceEquals(this, obj)) + { + return true; + } + + TypeInfo typeInfo = obj as TypeInfo; + if (typeInfo != null) + { + return (m_builtInType == typeInfo.BuiltInType && + m_valueRank == typeInfo.ValueRank); + } + + return false; + } + + /// + /// Returns a suitable hash code. + /// + public override int GetHashCode() + { + return base.GetHashCode(); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/Utils.cs b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/Utils.cs new file mode 100644 index 00000000..c6cd4062 --- /dev/null +++ b/IOB-OPC-UA/Stack/Opc.Ua.Core/Types/Utils/Utils.cs @@ -0,0 +1,3076 @@ +/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Globalization; +using System.Security.Cryptography.X509Certificates; +using System.Reflection; +using System.Runtime.Serialization; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using System.Diagnostics; +using System.Security.Cryptography; +using System.Net; +using System.Collections.ObjectModel; + +namespace Opc.Ua +{ + /// + /// Defines various static utility functions. + /// + public static class Utils + { + #region Public Constants + /// + /// The URI scheme for the HTTP protocol. + /// + public const string UriSchemeHttp = "http"; + + /// + /// The URI scheme for the HTTPS protocol. + /// + public const string UriSchemeHttps = "https"; + + /// + /// The URI scheme for the UA TCP protocol. + /// + public const string UriSchemeOpcTcp = "opc.tcp"; + + /// + /// The URI scheme for the UA TCP protocol over Secure WebSockets. + /// + public const string UriSchemeOpcWss = "opc.wss"; + + /// + /// The URI scheme for the UDP protocol. + /// + public const string UriSchemeOpcUdp = "opc.udp"; + + /// + /// The URI schemes which are supported in the core server. + /// + public static readonly string[] DefaultUriSchemes = new string[] + { + Utils.UriSchemeOpcTcp, + Utils.UriSchemeHttps + }; + + /// + /// The default port for the UA TCP protocol. + /// + public const int UaTcpDefaultPort = 4840; + + /// + /// The default port for the UA TCP protocol over WebSockets. + /// + public const int UaWebSocketsDefaultPort = 4843; + + /// + /// The urls of the discovery servers on a node. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")] + public static readonly string[] DiscoveryUrls = new string[] + { + "opc.tcp://{0}:4840", + "https://{0}:4843", + "http://{0}:52601/UADiscovery", + "http://{0}/UADiscovery/Default.svc" + }; + + /// + /// The default certificate store's type. + /// + public const string DefaultStoreType = CertificateStoreType.Directory; + + /// + /// The path to the default certificate store. + /// + public const string DefaultStorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/MachineDefault"; + + /// + /// The default LocalFolder. + /// + public static string DefaultLocalFolder = Directory.GetCurrentDirectory(); + + /// + /// The full name of the Opc.Ua.Core assembly. + /// + public static readonly string DefaultOpcUaCoreAssemblyFullName = typeof(Utils).Assembly.GetName().FullName; + + /// + /// The name of the Opc.Ua.Core assembly. + /// + public static readonly string DefaultOpcUaCoreAssemblyName = typeof(Utils).Assembly.GetName().Name; + + /// + /// List of known default bindings hosted in other assemblies. + /// + public static ReadOnlyDictionary DefaultBindings = new ReadOnlyDictionary( + new Dictionary() { + { Utils.UriSchemeHttps, "Opc.Ua.Bindings.Https"} + }); + #endregion + + #region Trace Support +#if DEBUG + private static int s_traceOutput = (int)TraceOutput.DebugAndFile; + private static int s_traceMasks = (int)TraceMasks.All; +#else + private static int s_traceOutput = (int)TraceOutput.FileOnly; + private static int s_traceMasks = (int)TraceMasks.None; +#endif + + private static string s_traceFileName = string.Empty; + private static long s_BaseLineTicks = DateTime.UtcNow.Ticks; + private static object s_traceFileLock = new object(); + + /// + /// The possible trace output mechanisms. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public enum TraceOutput + { + /// + /// No tracing + /// + Off = 0, + + /// + /// Only write to file (if specified). Default for Release mode. + /// + FileOnly = 1, + + /// + /// Write to debug trace listeners and a file (if specified). Default for Debug mode. + /// + DebugAndFile = 2 + } + + /// + /// The masks used to filter trace messages. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")] + public static class TraceMasks + { + /// + /// Do not output any messages. + /// + public const int None = 0x0; + + /// + /// Output error messages. + /// + public const int Error = 0x1; + + /// + /// Output informational messages. + /// + public const int Information = 0x2; + + /// + /// Output stack traces. + /// + public const int StackTrace = 0x4; + + /// + /// Output basic messages for service calls. + /// + public const int Service = 0x8; + + /// + /// Output detailed messages for service calls. + /// + public const int ServiceDetail = 0x10; + + /// + /// Output basic messages for each operation. + /// + public const int Operation = 0x20; + + /// + /// Output detailed messages for each operation. + /// + public const int OperationDetail = 0x40; + + /// + /// Output messages related to application initialization or shutdown + /// + public const int StartStop = 0x80; + + /// + /// Output messages related to a call to an external system. + /// + public const int ExternalSystem = 0x100; + + /// + /// Output messages related to security + /// + public const int Security = 0x200; + + /// + /// Output all messages. + /// + public const int All = 0x7FFFFFFF; + } + + /// + /// Sets the output for tracing (thead safe). + /// + public static void SetTraceOutput(TraceOutput output) + { + lock (s_traceFileLock) + { + s_traceOutput = (int)output; + } + } + + /// + /// Gets the current trace mask settings. + /// + public static int TraceMask + { + get { return s_traceMasks; } + } + + /// + /// Sets the mask for tracing (thead safe). + /// + public static void SetTraceMask(int masks) + { + s_traceMasks = (int)masks; + } + + /// + /// Returns Tracing class instance for event attaching. + /// + public static Tracing Tracing + { + get { return Tracing.Instance; } + } + + /// + /// Writes a trace statement. + /// + private static void TraceWriteLine(string message, params object[] args) + { + // null strings not supported. + if (String.IsNullOrEmpty(message)) + { + return; + } + + // format the message if format arguments provided. + string output = message; + + if (args != null && args.Length > 0) + { + try + { + output = String.Format(CultureInfo.InvariantCulture, message, args); + } + catch (Exception) + { + output = message; + } + } + + // write to the log file. + lock (s_traceFileLock) + { + // write to debug trace listeners. + if (s_traceOutput == (int)TraceOutput.DebugAndFile) + { + System.Diagnostics.Debug.WriteLine(output); + } + + string traceFileName = s_traceFileName; + + if (s_traceOutput != (int)TraceOutput.Off && !String.IsNullOrEmpty(traceFileName)) + { + try + { + FileInfo file = new FileInfo(traceFileName); + + // limit the file size + bool truncated = false; + + if (file.Exists && file.Length > 10000000) + { + file.Delete(); + truncated = true; + } + + using (StreamWriter writer = new StreamWriter(File.Open(file.FullName, FileMode.Append, FileAccess.Write, FileShare.Read))) + { + if (truncated) + { + writer.WriteLine("WARNING - LOG FILE TRUNCATED."); + } + + writer.WriteLine(output); + writer.Flush(); + writer.Dispose(); + } + } + catch (Exception e) + { + Debug.WriteLine("Could not write to trace file. Error={0}", e.Message); + Debug.WriteLine("FilePath={1}", traceFileName); + } + } + } + } + + /// + /// Sets the path to the log file to use for tracing. + /// + public static void SetTraceLog(string filePath, bool deleteExisting) + { + // turn tracing on. + lock (s_traceFileLock) + { + // check if tracing is being turned off. + if (String.IsNullOrEmpty(filePath)) + { + s_traceFileName = null; + return; + } + + s_traceFileName = GetAbsoluteFilePath(filePath, true, false, true, true); + + if (s_traceOutput == (int)TraceOutput.Off) + { + s_traceOutput = (int)TraceOutput.FileOnly; + } + + try + { + FileInfo file = new FileInfo(s_traceFileName); + + if (deleteExisting && file.Exists) + { + file.Delete(); + } + + // write initial log message. + TraceWriteLine(string.Empty); + TraceWriteLine( + "{1} Logging started at {0}", + DateTime.Now, + new String('*', 25)); + } + catch (Exception e) + { + TraceWriteLine(e.Message, null); + } + } + } + + /// + /// Writes an informational message to the trace log. + /// + public static void Trace(string format, params object[] args) + { + Trace((int)TraceMasks.Information, format, false, args); + } + + /// + /// Writes an informational message to the trace log. + /// + [Conditional("DEBUG")] + public static void TraceDebug(string format, params object[] args) + { + Trace((int)TraceMasks.OperationDetail, format, false, args); + } + + /// + /// Writes an exception/error message to the trace log. + /// + public static void Trace(Exception e, string format, params object[] args) + { + Trace(e, format, false, args); + } + + /// + /// Writes an exception/error message to the trace log. + /// + public static void Trace(Exception e, string format, bool handled, params object[] args) + { + StringBuilder message = new StringBuilder(); + + // format message. + if (args != null && args.Length > 0) + { + try + { + message.AppendFormat(CultureInfo.InvariantCulture, format, args); + message.AppendLine(); + } + catch (Exception) + { + message.AppendLine(format); + } + } + else + { + message.AppendLine(format); + } + + // append exception information. + if (e != null) + { + ServiceResultException sre = e as ServiceResultException; + + if (sre != null) + { + message.AppendFormat(CultureInfo.InvariantCulture, " {0} '{1}'", StatusCodes.GetBrowseName(sre.StatusCode), sre.Message); + } + else + { + message.AppendFormat(CultureInfo.InvariantCulture, " {0} '{1}'", e.GetType().Name, e.Message); + } + message.AppendLine(); + + // append stack trace. + if ((s_traceMasks & (int)TraceMasks.StackTrace) != 0) + { + message.AppendLine(); + message.AppendLine(); + var separator = new String('=', 40); + message.AppendLine(separator); + message.AppendLine(new ServiceResult(e).ToLongString()); + message.AppendLine(separator); + } + } + + // trace message. + Trace(e, (int)TraceMasks.Error, message.ToString(), handled, null); + } + + /// + /// Writes a message to the trace log. + /// + public static void Trace(int traceMask, string format, params object[] args) + { + Trace(traceMask, format, false, args); + } + + /// + /// Writes a message to the trace log. + /// + public static void Trace(int traceMask, string format, bool handled, params object[] args) + { + Trace(null, traceMask, format, handled, args); + } + + /// + /// Writes a message to the trace log. + /// + public static void Trace(Exception e, int traceMask, string format, bool handled, params object[] args) + { + if (!handled) + { + Tracing.Instance.RaiseTraceEvent(new TraceEventArgs(traceMask, format, string.Empty, e, args)); + } + + // do nothing if mask not enabled. + if ((s_traceMasks & traceMask) == 0) + { + return; + } + + StringBuilder message = new StringBuilder(); + + // append process and timestamp. + message.AppendFormat("{0:d} {0:HH:mm:ss.fff} ", DateTime.UtcNow.ToLocalTime()); + + // format message. + if (args != null && args.Length > 0) + { + try + { + message.AppendFormat(CultureInfo.InvariantCulture, format, args); + } + catch (Exception) + { + message.Append(format); + } + } + else + { + message.Append(format); + } + + TraceWriteLine(message.ToString(), null); + } + #endregion + + #region File Access + /// + /// Replaces a prefix enclosed in '%' with a special folder or environment variable path (e.g. %ProgramFiles%\MyCompany). + /// + public static bool IsPathRooted(string path) + { + // allow for local file locations + return Path.IsPathRooted(path) || path[0] == '.'; + } + + /// + /// Maps a special folder to environment variable with folder path. + /// + private static string ReplaceSpecialFolderWithEnvVar(string input) + { + switch (input) + { + case "CommonApplicationData": return "ProgramData"; + } + + return input; + } + + /// + /// Replaces a prefix enclosed in '%' with a special folder or environment variable path (e.g. %ProgramFiles%\MyCompany). + /// + public static string ReplaceSpecialFolderNames(string input) + { + + // nothing to do for nulls. + if (String.IsNullOrEmpty(input)) + { + return null; + } + + // check for absolute path. + if (Utils.IsPathRooted(input)) + { + return input; + } + + // check for special folder prefix. + if (input[0] != '%') + { + return input; + } + + // extract special folder name. + string folder = null; + string path = null; + + int index = input.IndexOf('%', 1); + + if (index == -1) + { + folder = input.Substring(1); + path = String.Empty; + } + else + { + folder = input.Substring(1, index - 1); + path = input.Substring(index + 1); + } + + StringBuilder buffer = new StringBuilder(); +#if !NETSTANDARD1_4 && !NETSTANDARD1_3 + // check for special folder. + Environment.SpecialFolder specialFolder; + if (!Enum.TryParse(folder, out specialFolder)) + { +#endif + folder = ReplaceSpecialFolderWithEnvVar(folder); + string value = Environment.GetEnvironmentVariable(folder); + if (value != null) + { + buffer.Append(value); + } + else + { + if (folder == "LocalFolder") + { + buffer.Append(DefaultLocalFolder); + } + } +#if !NETSTANDARD1_4 && !NETSTANDARD1_3 + } + else + { + buffer.Append(Environment.GetFolderPath(specialFolder)); + } +#endif + // construct new path. + buffer.Append(path); + return buffer.ToString(); + } + + /// + /// Finds the file by search the common file folders and then bin directories in the source tree + /// + /// Name of the file. + /// The path to the file. Null if not found. + public static string FindInstalledFile(string fileName) + { + if (String.IsNullOrEmpty(fileName)) + { + return null; + } + + string path = null; + + // check source tree. + DirectoryInfo directory = new DirectoryInfo(Directory.GetCurrentDirectory()); + + while (directory != null) + { + StringBuilder buffer = new StringBuilder(); + buffer.Append(directory.FullName); + buffer.Append(Path.DirectorySeparatorChar + "Bin" + Path.DirectorySeparatorChar); + buffer.Append(fileName); + + path = Utils.GetAbsoluteFilePath(buffer.ToString(), false, false, false); + + if (path != null) + { + break; + } + + directory = directory.Parent; + } + + // return what was found. + return path; + } + + /// + /// Checks if the file path is a relative path and returns an absolute path relative to the EXE location. + /// + public static string GetAbsoluteFilePath(string filePath) + { + return GetAbsoluteFilePath(filePath, false, true, false); + } + + /// + /// Checks if the file path is a relative path and returns an absolute path relative to the EXE location. + /// + public static string GetAbsoluteFilePath(string filePath, bool checkCurrentDirectory, bool throwOnError, bool createAlways, bool writable = false) + { + filePath = Utils.ReplaceSpecialFolderNames(filePath); + + if (!String.IsNullOrEmpty(filePath)) + { + FileInfo file = new FileInfo(filePath); + + // check for absolute path. + bool isAbsolute = Utils.IsPathRooted(filePath); + + if (isAbsolute) + { + if (file.Exists) + { + return filePath; + } + + if (createAlways) + { + return CreateFile(file, filePath, throwOnError); + } + } + + if (!isAbsolute) + { + // look current directory. + if (checkCurrentDirectory) + { + // first check in local folder + FileInfo localFile = null; + if (!writable) + { + localFile = new FileInfo(Utils.Format("{0}{1}{2}", Directory.GetCurrentDirectory(), Path.DirectorySeparatorChar, filePath)); +#if NETFRAMEWORK + if (!localFile.Exists) + { + var localFile2 = new FileInfo(Utils.Format("{0}{1}{2}", + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + Path.DirectorySeparatorChar, filePath)); + if (localFile2.Exists) + { + localFile = localFile2; + } + } +#endif + } + else + { + localFile = new FileInfo(Utils.Format("{0}{1}{2}", Path.GetTempPath(), Path.DirectorySeparatorChar, filePath)); + } + + if (localFile.Exists) + { + return localFile.FullName; + } + + if (file.Exists && !writable) + { + return file.FullName; + } + + if (createAlways && writable) + { + return CreateFile(localFile, localFile.FullName, throwOnError); + } + } + } + } + + // file does not exist. + if (throwOnError) + { + var message = new StringBuilder(); + message.AppendLine("File does not exist: {0}"); + message.AppendLine("Current directory is: {1}"); + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, + message.ToString(), + filePath, + Directory.GetCurrentDirectory()); + } + + return null; + } + + /// + /// Creates an empty file. + /// + private static string CreateFile(FileInfo file, string filePath, bool throwOnError) + { + try + { + // create the directory as required. + if (!file.Directory.Exists) + { + Directory.CreateDirectory(file.DirectoryName); + } + + // open and close the file. + using (Stream ostrm = file.Open(FileMode.CreateNew, FileAccess.ReadWrite)) + { + return filePath; + } + } + catch (Exception e) + { + Utils.Trace(e, "Could not create file: {0}", filePath); + + if (throwOnError) + { + throw; + } + + return filePath; + } + } + + /// + /// Checks if the file path is a relative path and returns an absolute path relative to the EXE location. + /// + public static string GetAbsoluteDirectoryPath(string dirPath, bool checkCurrentDirectory, bool throwOnError) + { + return GetAbsoluteDirectoryPath(dirPath, checkCurrentDirectory, throwOnError, false); + } + + /// + /// Checks if the file path is a relative path and returns an absolute path relative to the EXE location. + /// + public static string GetAbsoluteDirectoryPath(string dirPath, bool checkCurrentDirectory, bool throwOnError, bool createAlways) + { + string originalPath = dirPath; + dirPath = Utils.ReplaceSpecialFolderNames(dirPath); + + if (!String.IsNullOrEmpty(dirPath)) + { + DirectoryInfo directory = new DirectoryInfo(dirPath); + + // check for absolute path. + bool isAbsolute = Utils.IsPathRooted(dirPath); + + if (isAbsolute) + { + if (directory.Exists) + { + return dirPath; + } + + if (createAlways && !directory.Exists) + { + directory = Directory.CreateDirectory(dirPath); + return directory.FullName; + } + } + + if (!isAbsolute) + { + // look current directory. + if (checkCurrentDirectory) + { + if (!directory.Exists) + { + directory = new DirectoryInfo(Utils.Format("{0}{1}{2}", Directory.GetCurrentDirectory(), Path.DirectorySeparatorChar, dirPath)); +#if NETFRAMEWORK + if (!directory.Exists) + { + var directory2 = new DirectoryInfo(Utils.Format("{0}{1}{2}", + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + Path.DirectorySeparatorChar, dirPath)); + if (directory2.Exists) + { + directory = directory2; + } + } +#endif + } + } + + // return full path. + if (directory.Exists) + { + return directory.FullName; + } + + // create the directory. + if (createAlways) + { + directory = Directory.CreateDirectory(directory.FullName); + return directory.FullName; + } + } + } + + // file does not exist. + if (throwOnError) + { + throw ServiceResultException.Create( + StatusCodes.BadConfigurationError, + "Directory does not exist: {0}\r\nCurrent directory is: {1}", + originalPath, + Directory.GetCurrentDirectory()); + } + + return null; + } + + /// + /// Truncates a file path so it can be displayed in a limited width view. + /// + public static string GetFilePathDisplayName(string filePath, int maxLength) + { + // check if nothing to do. + if (filePath == null || maxLength <= 0 || filePath.Length < maxLength) + { + return filePath; + } + + // keep first path segment. + int start = filePath.IndexOf(Path.DirectorySeparatorChar); + + if (start == -1) + { + return Utils.Format("{0}...", filePath.Substring(0, maxLength)); + } + + // keep file name. + int end = filePath.LastIndexOf(Path.DirectorySeparatorChar); + + while (end > start && filePath.Length - end < maxLength) + { + end = filePath.LastIndexOf(Path.DirectorySeparatorChar, end - 1); + + if (filePath.Length - end > maxLength) + { + end = filePath.IndexOf(Path.DirectorySeparatorChar, end + 1); + break; + } + } + + // format the result. + return Utils.Format("{0}...{1}", filePath.Substring(0, start + 1), filePath.Substring(end)); + } + #endregion + + #region String, Object and Data Convienence Functions + private const int MAX_MESSAGE_LENGTH = 1024; + private const uint FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; + private const uint FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; + + /// + /// Supresses any exceptions while disposing the object. + /// + /// + /// Writes errors to trace output in DEBUG builds. + /// + public static void SilentDispose(object objectToDispose) + { + IDisposable disposable = objectToDispose as IDisposable; + + if (disposable != null) + { + try + { + disposable.Dispose(); + } +#if DEBUG + catch (Exception e) + { + Utils.Trace(e, "Error disposing object: {0}", disposable.GetType().Name); + } +#else + catch (Exception) + { + } +#endif + } + } + + /// + /// The earliest time that can be represented on with UA date/time values. + /// + public static DateTime TimeBase + { + get { return s_TimeBase; } + } + + private static readonly DateTime s_TimeBase = new DateTime(1601, 1, 1, 0, 0, 0, DateTimeKind.Utc); + + /// + /// Normalize a DateTime to Opc Ua UniversalTime. + /// + public static DateTime ToOpcUaUniversalTime(DateTime value) + { + if (value <= DateTime.MinValue) + { + return DateTime.MinValue; + } + if (value >= DateTime.MaxValue) + { + return DateTime.MaxValue; + } + if (value.Kind != DateTimeKind.Utc) + { + return value.ToUniversalTime(); + } + return value; + } + + /// + /// Returns an absolute deadline for a timeout. + /// + public static DateTime GetDeadline(TimeSpan timeSpan) + { + DateTime now = DateTime.UtcNow; + + if (DateTime.MaxValue.Ticks - now.Ticks < timeSpan.Ticks) + { + return DateTime.MaxValue; + } + + return now + timeSpan; + } + + /// + /// Returns a timeout as integer number of milliseconds + /// + public static int GetTimeout(TimeSpan timeSpan) + { + if (timeSpan.TotalMilliseconds > Int32.MaxValue) + { + return -1; + } + + if (timeSpan.TotalMilliseconds < 0) + { + return 0; + } + + return (int)timeSpan.TotalMilliseconds; + } + + /// + public static Task GetHostAddressesAsync(string hostNameOrAddress) + { + return Dns.GetHostAddressesAsync(hostNameOrAddress); + } + + /// + public static IPAddress[] GetHostAddresses(string hostNameOrAddress) + { + return Dns.GetHostAddresses(hostNameOrAddress); + } + + /// + /// If the platform returns a FQDN, only the host name is returned. + public static string GetHostName() + { + return Dns.GetHostName().Split('.')[0].ToLowerInvariant(); + } + + /// + /// Get the FQDN of the local computer. + /// + public static string GetFullQualifiedDomainName() + { + string domainName = null; + try + { + domainName = Dns.GetHostEntry("localhost").HostName; + } + catch + { + } + if (String.IsNullOrEmpty(domainName)) + { + return Dns.GetHostName(); + } + return domainName; + } + + /// + /// Normalize ipv4/ipv6 address for comparisons. + /// + public static string NormalizedIPAddress(string ipAddress) + { + try + { + IPAddress normalizedAddress = IPAddress.Parse(ipAddress); + return normalizedAddress.ToString(); + } + catch + { + return ipAddress; + } + } + + /// + /// Replaces the localhost domain with the current host name. + /// + public static string ReplaceLocalhost(string uri, string hostname = null) + { + // ignore nulls. + if (String.IsNullOrEmpty(uri)) + { + return uri; + } + + // IPv6 address needs a surrounding [] + if (!String.IsNullOrEmpty(hostname) && hostname.Contains(':')) + { + hostname = "[" + hostname + "]"; + } + + // check if the string localhost is specified. + int index = uri.IndexOf("localhost", StringComparison.OrdinalIgnoreCase); + + if (index == -1) + { + return uri; + } + + // construct new uri. + StringBuilder buffer = new StringBuilder(); + + buffer.Append(uri.Substring(0, index)); + buffer.Append((hostname == null) ? GetHostName() : hostname); + buffer.Append(uri.Substring(index + "localhost".Length)); + + return buffer.ToString(); + } + + /// + /// Replaces the cert subject name DC=localhost with the current host name. + /// + public static string ReplaceDCLocalhost(string subjectName, string hostname = null) + { + // ignore nulls. + if (String.IsNullOrEmpty(subjectName)) + { + return subjectName; + } + + // IPv6 address needs a surrounding [] + if (!String.IsNullOrEmpty(hostname) && hostname.Contains(':')) + { + hostname = "[" + hostname + "]"; + } + + // check if the string DC=localhost is specified. + int index = subjectName.IndexOf("DC=localhost", StringComparison.OrdinalIgnoreCase); + + if (index == -1) + { + return subjectName; + } + + // construct new uri. + StringBuilder buffer = new StringBuilder(); + + buffer.Append(subjectName.Substring(0, index + 3)); + buffer.Append((hostname == null) ? GetHostName() : hostname); + buffer.Append(subjectName.Substring(index + "DC=localhost".Length)); + + return buffer.ToString(); + } + + /// + /// Parses a URI string. Returns null if it is invalid. + /// + public static Uri ParseUri(string uri) + { + try + { + if (String.IsNullOrEmpty(uri)) + { + return null; + } + + return new Uri(uri); + } + catch (Exception) + { + return null; + } + } + + /// + /// Parses the URLs, returns true of they have the same domain. + /// + /// The first URL to compare. + /// The second URL to compare. + /// True if they have the same domain. + public static bool AreDomainsEqual(Uri url1, Uri url2) + { + if (url1 == null || url2 == null) + { + return false; + } + + try + { + string domain1 = url1.DnsSafeHost; + string domain2 = url2.DnsSafeHost; + + // replace localhost with the computer name. + if (domain1 == "localhost") + { + domain1 = GetHostName(); + } + + if (domain2 == "localhost") + { + domain2 = GetHostName(); + } + + if (AreDomainsEqual(domain1, domain2)) + { + return true; + } + + return false; + } + catch (Exception) + { + return false; + } + } + + /// + /// Checks if the domains are equal. + /// + /// The first domain to compare. + /// The second domain to compare. + /// True if they are equal. + public static bool AreDomainsEqual(string domain1, string domain2) + { + if (String.IsNullOrEmpty(domain1) || String.IsNullOrEmpty(domain2)) + { + return false; + } + + if (String.Compare(domain1, domain2, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + + return false; + } + + /// + /// Substitutes the local machine name if "localhost" is specified in the instance uri. + /// + public static string UpdateInstanceUri(string instanceUri) + { + // check for null. + if (String.IsNullOrEmpty(instanceUri)) + { + UriBuilder builder = new UriBuilder(); + + builder.Scheme = Utils.UriSchemeHttps; + builder.Host = GetHostName(); + builder.Port = -1; + builder.Path = Guid.NewGuid().ToString(); + + return builder.Uri.ToString(); + } + + // prefix non-urls with the hostname. + if (!instanceUri.StartsWith(Utils.UriSchemeHttps, StringComparison.Ordinal)) + { + UriBuilder builder = new UriBuilder(); + + builder.Scheme = Utils.UriSchemeHttps; + builder.Host = GetHostName(); + builder.Port = -1; + builder.Path = Uri.EscapeDataString(instanceUri); + + return builder.Uri.ToString(); + } + + // replace localhost with the current hostname. + Uri parsedUri = Utils.ParseUri(instanceUri); + + if (parsedUri != null && parsedUri.DnsSafeHost == "localhost") + { + UriBuilder builder = new UriBuilder(parsedUri); + builder.Host = GetHostName(); + return builder.Uri.ToString(); + } + + // return the original instance uri. + return instanceUri; + } + + /// + /// Increments a identifier (wraps around if max exceeded). + /// + public static uint IncrementIdentifier(ref long identifier) + { + System.Threading.Interlocked.CompareExchange(ref identifier, 0, UInt32.MaxValue); + return (uint)System.Threading.Interlocked.Increment(ref identifier); + } + + /// + /// Increments a identifier (wraps around if max exceeded). + /// + public static int IncrementIdentifier(ref int identifier) + { + System.Threading.Interlocked.CompareExchange(ref identifier, 0, Int32.MaxValue); + return System.Threading.Interlocked.Increment(ref identifier); + } + + /// + /// Safely converts an UInt32 identifier to a Int32 identifier. + /// + public static int ToInt32(uint identifier) + { + if (identifier <= (uint)Int32.MaxValue) + { + return (int)identifier; + } + + return -(int)((long)UInt32.MaxValue - (long)identifier + 1); + } + + /// + /// Safely converts an Int32 identifier to a UInt32 identifier. + /// + public static uint ToUInt32(int identifier) + { + if (identifier >= 0) + { + return (uint)identifier; + } + + return (uint)((long)UInt32.MaxValue + 1 + (long)identifier); + } + + /// + /// Converts a multidimension array to a flat array. + /// + /// + /// The higher rank dimensions are written first. + /// e.g. a array with dimensions [2,2,2] is written in this order: + /// [0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0], [1,1,1] + /// + public static Array FlattenArray(Array array) + { + Array flatArray = Array.CreateInstance(array.GetType().GetElementType(), array.Length); + + int[] indexes = new int[array.Rank]; + int[] dimensions = new int[array.Rank]; + + for (int jj = array.Rank - 1; jj >= 0; jj--) + { + dimensions[jj] = array.GetLength(array.Rank - jj - 1); + } + + for (int ii = 0; ii < array.Length; ii++) + { + indexes[array.Rank - 1] = ii % dimensions[0]; + + for (int jj = 1; jj < array.Rank; jj++) + { + int multiplier = 1; + + for (int kk = 0; kk < jj; kk++) + { + multiplier *= dimensions[kk]; + } + + indexes[array.Rank - jj - 1] = (ii / multiplier) % dimensions[jj]; + } + + flatArray.SetValue(array.GetValue(indexes), ii); + } + + return flatArray; + } + + /// + /// Converts a buffer to a hexadecimal string. + /// + public static string ToHexString(byte[] buffer, bool invertEndian = false) + { + if (buffer == null || buffer.Length == 0) + { + return String.Empty; + } + + StringBuilder builder = new StringBuilder(buffer.Length * 2); + + if (invertEndian) + { + for (int ii = buffer.Length - 1; ii >= 0; ii--) + { + builder.AppendFormat("{0:X2}", buffer[ii]); + } + } + else + { + for (int ii = 0; ii < buffer.Length; ii++) + { + builder.AppendFormat("{0:X2}", buffer[ii]); + } + } + + return builder.ToString(); + } + + /// + /// Converts a hexadecimal string to an array of bytes. + /// + public static byte[] FromHexString(string buffer) + { + if (buffer == null) + { + return null; + } + + if (buffer.Length == 0) + { + return new byte[0]; + } + + string text = buffer.ToUpperInvariant(); + const string digits = "0123456789ABCDEF"; + + byte[] bytes = new byte[(buffer.Length / 2) + (buffer.Length % 2)]; + + int ii = 0; + + while (ii < bytes.Length * 2) + { + int index = digits.IndexOf(buffer[ii]); + + if (index == -1) + { + break; + } + + byte b = (byte)index; + b <<= 4; + + if (ii < buffer.Length - 1) + { + index = digits.IndexOf(buffer[ii + 1]); + + if (index == -1) + { + break; + } + + b += (byte)index; + } + + bytes[ii / 2] = b; + ii += 2; + } + + return bytes; + } + + /// + /// Formats an object using the invariant locale. + /// + public static string ToString(object source) + { + if (source != null) + { + return String.Format(CultureInfo.InvariantCulture, "{0}", source); + } + + return String.Empty; + } + + /// + /// Formats a message using the invariant locale. + /// + public static string Format(string text, params object[] args) + { + return String.Format(CultureInfo.InvariantCulture, text, args); + } + + /// + /// Checks if a string is a valid locale identifier. + /// + public static bool IsValidLocaleId(string localeId) + { + if (String.IsNullOrEmpty(localeId)) + { + return false; + } + + try + { + CultureInfo culture = new CultureInfo(localeId); + + if (culture != null) + { + return true; + } + } + catch (Exception) + { + // do nothing. + } + + return false; + } + + /// + /// Returns the language identifier from a locale. + /// + public static string GetLanguageId(string localeId) + { + if (localeId == null) + { + return String.Empty; + } + + int index = localeId.IndexOf('-'); + + if (index != -1) + { + return localeId.Substring(0, index); + } + + return localeId; + } + + /// + /// Returns the localized text from a list of available text + /// + public static LocalizedText SelectLocalizedText(IList localeIds, IList names, LocalizedText defaultName) + { + // check if no locales requested. + if (localeIds == null || localeIds.Count == 0) + { + return defaultName; + } + + // check if no names provided. + if (names == null || names.Count == 0) + { + return defaultName; + } + + // match exactly. + for (int ii = 0; ii < localeIds.Count; ii++) + { + for (int jj = 0; jj < names.Count; jj++) + { + if (LocalizedText.IsNullOrEmpty(names[jj])) + { + continue; + } + + if (String.Compare(names[jj].Locale, localeIds[ii], StringComparison.OrdinalIgnoreCase) == 0) + { + return names[jj]; + } + } + } + + // match generic language. + for (int ii = 0; ii < localeIds.Count; ii++) + { + string languageId = GetLanguageId(localeIds[ii]); + + for (int jj = 0; jj < names.Count; jj++) + { + if (LocalizedText.IsNullOrEmpty(names[jj])) + { + continue; + } + + string actualLanguageId = GetLanguageId(names[jj].Locale); + + if (String.Compare(languageId, actualLanguageId, StringComparison.OrdinalIgnoreCase) == 0) + { + return names[jj]; + } + } + } + + // return default. + return defaultName; + } + + /// + /// Returns a deep copy of the value. + /// + public static object Clone(object value) + { + if (value == null) + { + return null; + } + + Type type = value.GetType(); + + // nothing to do for value types. + if (type.GetTypeInfo().IsValueType) + { + return value; + } + + // strings are special a reference type that does not need to be copied. + if (type == typeof(string)) + { + return value; + } + + // copy arrays, any dimension. + Array array = value as Array; + if (array != null) + { + if (array.Rank == 1) + { + Array clone = Array.CreateInstance(type.GetElementType(), array.Length); + for (int ii = 0; ii < array.Length; ii++) + { + clone.SetValue(Utils.Clone(array.GetValue(ii)), ii); + } + return clone; + } + else + { + int[] arrayRanks = new int[array.Rank]; + int[] arrayIndex = new int[array.Rank]; + for (int ii = 0; ii < array.Rank; ii++) + { + arrayRanks[ii] = array.GetLength(ii); + arrayIndex[ii] = 0; + } + Array clone = Array.CreateInstance(type.GetElementType(), arrayRanks); + for (int ii = 0; ii < array.Length; ii++) + { + clone.SetValue(Utils.Clone(array.GetValue(arrayIndex)), arrayIndex); + + // iterate the index array + for (int ix = 0; ix < array.Rank; ix++) + { + arrayIndex[ix]++; + if (arrayIndex[ix] < arrayRanks[ix]) + { + break; + } + arrayIndex[ix] = 0; + } + } + return clone; + } + } + + // copy XmlNode. + XmlNode node = value as XmlNode; + if (node != null) + { + return node.CloneNode(true); + } + + // copy ExtensionObject. + { + ExtensionObject castedObject = value as ExtensionObject; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy ExtensionObjectCollection. + { + ExtensionObjectCollection castedObject = value as ExtensionObjectCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy EnumValueType. + { + EnumValueType castedObject = value as EnumValueType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy LocalizedText. + { + LocalizedText castedObject = value as LocalizedText; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy Argument. + { + Argument castedObject = value as Argument; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy NodeId. + { + NodeId castedObject = value as NodeId; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy UInt32Collection. + { + UInt32Collection castedObject = value as UInt32Collection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy QualifiedName. + { + QualifiedName castedObject = value as QualifiedName; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy ServerDiagnosticsSummaryDataType. + { + ServerDiagnosticsSummaryDataType castedObject = value as ServerDiagnosticsSummaryDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy ApplicationDescription. + { + ApplicationDescription castedObject = value as ApplicationDescription; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy StringCollection. + { + StringCollection castedObject = value as StringCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy UserTokenPolicyCollection. + { + UserTokenPolicyCollection castedObject = value as UserTokenPolicyCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy UserTokenPolicy + { + UserTokenPolicy castedObject = value as UserTokenPolicy; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy SessionDiagnosticsDataType + { + SessionDiagnosticsDataType castedObject = value as SessionDiagnosticsDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy ServiceCounterDataType + { + ServiceCounterDataType castedObject = value as ServiceCounterDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy SessionSecurityDiagnosticsDataType + { + SessionSecurityDiagnosticsDataType castedObject = value as SessionSecurityDiagnosticsDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy AnonymousIdentityToken + { + AnonymousIdentityToken castedObject = value as AnonymousIdentityToken; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy EventFilter. + { + EventFilter castedObject = value as EventFilter; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy DataChangeFilter. + { + DataChangeFilter castedObject = value as DataChangeFilter; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy SimpleAttributeOperandCollection. + { + SimpleAttributeOperandCollection castedObject = value as SimpleAttributeOperandCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy SimpleAttributeOperand. + { + SimpleAttributeOperand castedObject = value as SimpleAttributeOperand; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy QualifiedNameCollection. + { + QualifiedNameCollection castedObject = value as QualifiedNameCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy ContentFilter. + { + ContentFilter castedObject = value as ContentFilter; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy ContentFilterElement. + { + ContentFilterElement castedObject = value as ContentFilterElement; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + // copy ContentFilterElementCollection. + { + ContentFilterElementCollection castedObject = value as ContentFilterElementCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy SubscriptionDiagnosticsDataType. + { + SubscriptionDiagnosticsDataType castedObject = value as SubscriptionDiagnosticsDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy UserNameIdentityToken. + { + UserNameIdentityToken castedObject = value as UserNameIdentityToken; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy ServerStatusDataType. + { + ServerStatusDataType castedObject = value as ServerStatusDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy BuildInfo. + { + BuildInfo castedObject = value as BuildInfo; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy X509IdentityToken. + { + X509IdentityToken castedObject = value as X509IdentityToken; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.Range. + { + Opc.Ua.Range castedObject = value as Opc.Ua.Range; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.EUInformation + { + Opc.Ua.EUInformation castedObject = value as Opc.Ua.EUInformation; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.WriteValueCollection + { + Opc.Ua.WriteValueCollection castedObject = value as Opc.Ua.WriteValueCollection; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.WriteValue + { + Opc.Ua.WriteValue castedObject = value as Opc.Ua.WriteValue; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.DataValue + { + Opc.Ua.DataValue castedObject = value as Opc.Ua.DataValue; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.ExpandedNodeId + { + ExpandedNodeId castedObject = value as ExpandedNodeId; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.TimeZoneDataType + { + TimeZoneDataType castedObject = value as TimeZoneDataType; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + // copy Opc.Ua.LiteralOperand + { + LiteralOperand castedObject = value as LiteralOperand; + if (castedObject != null) + { + return castedObject.MemberwiseClone(); + } + } + + //try to find the MemberwiseClone method by reflection. + MethodInfo memberwiseCloneMethod = type.GetMethod("MemberwiseClone", BindingFlags.Public | BindingFlags.Instance); + if (memberwiseCloneMethod != null) + { + object clone = memberwiseCloneMethod.Invoke(value, null); + if (clone != null) + { + return clone; + } + } + + //try to find the Clone method by reflection. + MethodInfo cloneMethod = type.GetMethod("Clone", BindingFlags.Public | BindingFlags.Instance); + if (cloneMethod != null) + { + object clone = cloneMethod.Invoke(value, null); + if (clone != null) + { + return clone; + } + } + + // don't know how to clone object. + throw new NotSupportedException(Utils.Format("Don't know how to clone objects of type '{0}'", type.FullName)); + } + + /// + /// Checks if two values are equal. + /// + public static bool IsEqual(object value1, object value2) + { + // check for reference equality. + if (Object.ReferenceEquals(value1, value2)) + { + return true; + } + + // check for null values. + if (value1 == null) + { + if (value2 != null) + { + return value2.Equals(value1); + } + + return true; + } + + // check for null values. + if (value2 == null) + { + return value1.Equals(value2); + } + + // check that data types are the same. + if (value1.GetType() != value2.GetType()) + { + return value1.Equals(value2); + } + + // check for DateTime objects + if (value1 is DateTime) + { + return (Utils.ToOpcUaUniversalTime((DateTime)value1).CompareTo(Utils.ToOpcUaUniversalTime((DateTime)value2))) == 0; + } + + // check for compareable objects. + IComparable comparable1 = value1 as IComparable; + + if (comparable1 != null) + { + return comparable1.CompareTo(value2) == 0; + } + + // check for encodeable objects. + IEncodeable encodeable1 = value1 as IEncodeable; + + if (encodeable1 != null) + { + IEncodeable encodeable2 = value2 as IEncodeable; + + if (encodeable2 == null) + { + return false; + } + + return encodeable1.IsEqual(encodeable2); + } + + // check for XmlElement objects. + XmlElement element1 = value1 as XmlElement; + + if (element1 != null) + { + XmlElement element2 = value2 as XmlElement; + + if (element2 == null) + { + return false; + } + + return element1.OuterXml == element2.OuterXml; + } + + // check for arrays. + Array array1 = value1 as Array; + + if (array1 != null) + { + Array array2 = value2 as Array; + + // arrays are greater than non-arrays. + if (array2 == null) + { + return false; + } + + // shorter arrays are less than longer arrays. + if (array1.Length != array2.Length) + { + return false; + } + + // compare each element. + for (int ii = 0; ii < array1.Length; ii++) + { + bool result = Utils.IsEqual(array1.GetValue(ii), array2.GetValue(ii)); + + if (!result) + { + return false; + } + } + + // arrays are identical. + return true; + } + + // check enumerables. + IEnumerable enumerable1 = value1 as IEnumerable; + + if (enumerable1 != null) + { + IEnumerable enumerable2 = value2 as IEnumerable; + + // collections are greater than non-collections. + if (enumerable2 == null) + { + return false; + } + + IEnumerator enumerator1 = enumerable1.GetEnumerator(); + IEnumerator enumerator2 = enumerable2.GetEnumerator(); + + while (enumerator1.MoveNext()) + { + // enumerable2 must be shorter. + if (!enumerator2.MoveNext()) + { + return false; + } + + bool result = Utils.IsEqual(enumerator1.Current, enumerator2.Current); + + if (!result) + { + return false; + } + } + + // enumerable2 must be longer. + if (enumerator2.MoveNext()) + { + return false; + } + + // must be equal. + return true; + } + + // check for objects that override the Equals function. + return value1.Equals(value2); + } + + /// + /// Tests if the specified string matches the specified pattern. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + public static bool Match(string target, string pattern, bool caseSensitive) + { + // an empty pattern always matches. + if (pattern == null || pattern.Length == 0) + { + return true; + } + + // an empty string never matches. + if (target == null || target.Length == 0) + { + return false; + } + + // check for exact match + if (caseSensitive) + { + if (target == pattern) + { + return true; + } + } + else + { + if (String.Equals(target, pattern, StringComparison.InvariantCultureIgnoreCase)) + { + return true; + } + } + + char c; + char p; + char l; + + int pIndex = 0; + int tIndex = 0; + + while (tIndex < target.Length && pIndex < pattern.Length) + { + p = ConvertCase(pattern[pIndex++], caseSensitive); + + if (pIndex > pattern.Length) + { + return (tIndex >= target.Length); // if end of string true + } + + switch (p) + { + // match zero or more char. + case '*': + { + while (tIndex < target.Length) + { + if (Match(target.Substring(tIndex++), pattern.Substring(pIndex), caseSensitive)) + { + return true; + } + } + + return Match(target, pattern.Substring(pIndex), caseSensitive); + } + + // match any one char. + case '?': + { + // check if end of string when looking for a single character. + if (tIndex >= target.Length) + { + return false; + } + + // check if end of pattern and still string data left. + if (pIndex >= pattern.Length && tIndex < target.Length - 1) + { + return false; + } + + tIndex++; + break; + } + + // match char set + case '[': + { + c = ConvertCase(target[tIndex++], caseSensitive); + + if (tIndex > target.Length) + { + return false; // syntax + } + + l = '\0'; + + // match a char if NOT in set [] + if (pattern[pIndex] == '!') + { + ++pIndex; + + p = ConvertCase(pattern[pIndex++], caseSensitive); + + while (pIndex < pattern.Length) + { + if (p == ']') // if end of char set, then + { + break; // no match found + } + + if (p == '-') + { + // check a range of chars? + p = ConvertCase(pattern[pIndex], caseSensitive); + + // get high limit of range + if (pIndex > pattern.Length || p == ']') + { + return false; // syntax + } + + if (c >= l && c <= p) + { + return false; // if in range, return false + } + } + + l = p; + + if (c == p) // if char matches this element + { + return false; // return false + } + + p = ConvertCase(pattern[pIndex++], caseSensitive); + } + } + + // match if char is in set [] + else + { + p = ConvertCase(pattern[pIndex++], caseSensitive); + + while (pIndex < pattern.Length) + { + if (p == ']') // if end of char set, then no match found + { + return false; + } + + if (p == '-') + { + // check a range of chars? + p = ConvertCase(pattern[pIndex], caseSensitive); + + // get high limit of range + if (pIndex > pattern.Length || p == ']') + { + return false; // syntax + } + + if (c >= l && c <= p) + { + break; // if in range, move on + } + } + + l = p; + + if (c == p) // if char matches this element move on + { + break; + } + + p = ConvertCase(pattern[pIndex++], caseSensitive); + } + + while (pIndex < pattern.Length && p != ']') // got a match in char set skip to end of set + { + p = pattern[pIndex++]; + } + } + + break; + } + + // match digit. + case '#': + { + c = target[tIndex++]; + + if (!Char.IsDigit(c)) + { + return false; // not a digit + } + + break; + } + + // match exact char. + default: + { + c = ConvertCase(target[tIndex++], caseSensitive); + + if (c != p) // check for exact char + { + return false; // not a match + } + + // check if end of pattern and still string data left. + if (pIndex >= pattern.Length && tIndex < target.Length - 1) + { + return false; + } + + break; + } + } + } + + if (tIndex >= target.Length) + { + return (pIndex >= pattern.Length); // if end of pattern true + } + + return true; + } + + // ConvertCase + private static char ConvertCase(char c, bool caseSensitive) + { + return (caseSensitive) ? c : Char.ToUpperInvariant(c); + } + + /// + /// Returns the TimeZone information for the current local time. + /// + /// The TimeZone information for the current local time. + public static TimeZoneDataType GetTimeZoneInfo() + { + TimeZoneDataType info = new TimeZoneDataType(); + + info.Offset = (short)TimeZoneInfo.Local.GetUtcOffset(DateTime.Now).TotalMinutes; + info.DaylightSavingInOffset = true; + + return info; + } + + /// + /// Looks for an extension with the specified type and uses the DataContractSerializer to parse it. + /// + /// The type of extension. + /// The list of extensions to search. + /// Name of the element (use type name if null). + /// + /// The deserialized extension. Null if an error occurs. + /// + public static T ParseExtension(IList extensions, XmlQualifiedName elementName) + { + // check if nothing to search for. + if (extensions == null || extensions.Count == 0) + { + return default(T); + } + + // use the type name as the default. + if (elementName == null) + { + // get qualified name from the data contract attribute. + XmlQualifiedName qname = EncodeableFactory.GetXmlName(typeof(T)); + + if (qname == null) + { + throw new ArgumentException("Type does not seem to support DataContract serialization"); + } + + elementName = qname; + } + + // find the element. + for (int ii = 0; ii < extensions.Count; ii++) + { + XmlElement element = extensions[ii]; + + if (element.LocalName != elementName.Name || element.NamespaceURI != elementName.Namespace) + { + continue; + } + + // type found. + XmlReader reader = XmlReader.Create(new StringReader(element.OuterXml)); + + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(T)); + return (T)serializer.ReadObject(reader); + } + catch (Exception ex) + { + Utils.Trace("Exception parsing extension: " + ex.Message); + throw; + } + finally + { + reader.Dispose(); + } + } + + return default(T); + } + + /// + /// Looks for an extension with the specified type and uses the DataContractSerializer to serializes its replacement. + /// + /// The type of the extension. + /// The list of extensions to update. + /// Name of the element (use type name if null). + /// The value. + /// + /// Adds a new extension if the it does not already exist. + /// Deletes the extension if the value is null. + /// The containing element must use the name and namespace uri specified by the DataContractAttribute for the type. + /// + public static void UpdateExtension(ref XmlElementCollection extensions, XmlQualifiedName elementName, object value) + { + XmlDocument document = new XmlDocument(); + + // serialize value. + StringBuilder buffer = new StringBuilder(); + using (XmlWriter writer = XmlWriter.Create(buffer)) + { + if (value != null) + { + try + { + DataContractSerializer serializer = new DataContractSerializer(typeof(T)); + serializer.WriteObject(writer, value); + } + finally + { + writer.Dispose(); + } + + document.InnerXml = buffer.ToString(); + } + } + + // use the type name as the default. + if (elementName == null) + { + // get qualified name from the data contract attribute. + XmlQualifiedName qname = EncodeableFactory.GetXmlName(typeof(T)); + + if (qname == null) + { + throw new ArgumentException("Type does not seem to support DataContract serialization"); + } + + elementName = qname; + } + + // replace existing element. + if (extensions != null) + { + for (int ii = 0; ii < extensions.Count; ii++) + { + if (extensions[ii] != null && extensions[ii].LocalName == elementName.Name && extensions[ii].NamespaceURI == elementName.Namespace) + { + // remove the existing value if the value is null. + if (value == null) + { + extensions.RemoveAt(ii); + return; + } + + extensions[ii] = document.DocumentElement; + return; + } + } + } + + // add new element. + if (value != null) + { + if (extensions == null) + { + extensions = new XmlElementCollection(); + } + + extensions.Add(document.DocumentElement); + } + } + #endregion + + #region Reflection Helper Functions + /// + /// Returns the public static field names for a class. + /// + public static string[] GetFieldNames(Type systemType) + { + FieldInfo[] fields = systemType.GetFields(BindingFlags.Public | BindingFlags.Static); + + int ii = 0; + + string[] names = new string[fields.Length]; + + foreach (FieldInfo field in fields) + { + names[ii++] = field.Name; + } + + return names; + } + + /// + /// Returns the data member name for a property. + /// + public static string GetDataMemberName(PropertyInfo property) + { + object[] attributes = property.GetCustomAttributes(typeof(DataMemberAttribute), true).ToArray(); + + if (attributes != null) + { + for (int ii = 0; ii < attributes.Length; ii++) + { + DataMemberAttribute contract = attributes[ii] as DataMemberAttribute; + + if (contract != null) + { + if (String.IsNullOrEmpty(contract.Name)) + { + return property.Name; + } + + return contract.Name; + } + } + } + + return null; + } + + /// + /// Returns the numeric constant associated with a name. + /// + public static uint GetIdentifier(string name, Type constants) + { + FieldInfo[] fields = constants.GetFields(BindingFlags.Public | BindingFlags.Static); + + foreach (FieldInfo field in fields) + { + if (field.Name == name) + { + return (uint)field.GetValue(constants); + } + } + + return 0; + } + + /// + /// Returns the linker timestamp for an assembly. + /// + public static DateTime GetAssemblyTimestamp() + { + try + { +#if !NETSTANDARD1_4 && !NETSTANDARD1_3 + return File.GetLastWriteTimeUtc(typeof(Utils).GetTypeInfo().Assembly.Location); +#endif + } + catch + { } + return new DateTime(1970, 1, 1, 0, 0, 0); + } + + /// + /// Returns the major/minor version number for an assembly formatted as a string. + /// + public static string GetAssemblySoftwareVersion() + { + return typeof(Utils).GetTypeInfo().Assembly.GetCustomAttribute().InformationalVersion; + } + + /// + /// Returns the build/revision number for an assembly formatted as a string. + /// + public static string GetAssemblyBuildNumber() + { + return typeof(Utils).GetTypeInfo().Assembly.GetCustomAttribute().Version; + } + + #endregion + + #region Security Helper Functions + /// + /// Appends a list of byte arrays. + /// + public static byte[] Append(params byte[][] arrays) + { + if (arrays == null) + { + return new byte[0]; + } + + int length = 0; + + for (int ii = 0; ii < arrays.Length; ii++) + { + if (arrays[ii] != null) + { + length += arrays[ii].Length; + } + } + + byte[] output = new byte[length]; + + int pos = 0; + + for (int ii = 0; ii < arrays.Length; ii++) + { + if (arrays[ii] != null) + { + Array.Copy(arrays[ii], 0, output, pos, arrays[ii].Length); + pos += arrays[ii].Length; + } + } + + return output; + } + + /// + /// Creates a X509 certificate object from the DER encoded bytes. + /// + public static X509Certificate2 ParseCertificateBlob(byte[] certificateData) + { + try + { + return CertificateFactory.Create(certificateData, true); + } + catch (Exception e) + { + throw new ServiceResultException( + StatusCodes.BadCertificateInvalid, + "Could not parse DER encoded form of a X509 certificate.", + e); + } + } + + /// + /// Creates a X509 certificate collection object from the DER encoded bytes. + /// + /// The certificate data. + /// + public static X509Certificate2Collection ParseCertificateChainBlob(byte[] certificateData) + { + X509Certificate2Collection certificateChain = new X509Certificate2Collection(); + List certificatesBytes = new List(certificateData); + X509Certificate2 certificate = null; + + while (certificatesBytes.Count > 0) + { + try + { + certificate = CertificateFactory.Create(certificatesBytes.ToArray(), true); + } + catch (Exception e) + { + throw new ServiceResultException( + StatusCodes.BadCertificateInvalid, + "Could not parse DER encoded form of an X509 certificate.", + e); + } + + certificateChain.Add(certificate); + certificatesBytes.RemoveRange(0, certificate.RawData.Length); + } + + return certificateChain; + } + + /// + /// Compare Nonce for equality. + /// + public static bool CompareNonce(byte[] a, byte[] b) + { + if (a == null || b == null) return false; + if (a.Length != b.Length) return false; + + byte result = 0; + for (int i = 0; i < a.Length; i++) + result |= (byte)(a[i] ^ b[i]); + + return result == 0; + } + + /// + /// Cryptographic Nonce helper functions. + /// + public static class Nonce + { + static readonly RandomNumberGenerator m_rng = RandomNumberGenerator.Create(); + + /// + /// Generates a Nonce for cryptographic functions. + /// + public static byte[] CreateNonce(uint length) + { + byte[] randomBytes = new byte[length]; + m_rng.GetBytes(randomBytes); + return randomBytes; + } + + /// + /// Returns the length of the symmetric encryption key for a security policy. + /// + public static uint GetNonceLength(string securityPolicyUri) + { + switch (securityPolicyUri) + { + case SecurityPolicies.Basic128Rsa15: + { + return 16; + } + + case SecurityPolicies.Basic256: + case SecurityPolicies.Basic256Sha256: + case SecurityPolicies.Aes128_Sha256_RsaOaep: + case SecurityPolicies.Aes256_Sha256_RsaPss: + { + return 32; + } + + default: + case SecurityPolicies.None: + { + return 0; + } + } + } + + /// + /// Validates the nonce for a message security mode and security policy. + /// + public static bool ValidateNonce(byte[] nonce, MessageSecurityMode securityMode, string securityPolicyUri) + { + return ValidateNonce(nonce, securityMode, GetNonceLength(securityPolicyUri)); + } + + /// + /// Validates the nonce for a message security mode and a minimum length. + /// + public static bool ValidateNonce(byte[] nonce, MessageSecurityMode securityMode, uint minNonceLength) + { + // no nonce needed for no security. + if (securityMode == MessageSecurityMode.None) + { + return true; + } + + // check the length. + if (nonce == null || nonce.Length < minNonceLength) + { + return false; + } + + // try to catch programming errors by rejecting nonces with all zeros. + for (int ii = 0; ii < nonce.Length; ii++) + { + if (nonce[ii] != 0) + { + return true; + } + } + + return false; + } + } + + /// + /// Generates a Pseudo random sequence of bits using the P_SHA1 alhorithm. + /// + public static byte[] PSHA1(byte[] secret, string label, byte[] data, int offset, int length) + { + if (secret == null) throw new ArgumentNullException(nameof(secret)); + // create the hmac. + HMACSHA1 hmac = new HMACSHA1(secret); + return PSHA(hmac, label, data, offset, length); + } + + /// + /// Generates a Pseudo random sequence of bits using the P_SHA256 alhorithm. + /// + public static byte[] PSHA256(byte[] secret, string label, byte[] data, int offset, int length) + { + if (secret == null) throw new ArgumentNullException(nameof(secret)); + // create the hmac. + HMACSHA256 hmac = new HMACSHA256(secret); + return PSHA(hmac, label, data, offset, length); + } + + /// + /// Generates a Pseudo random sequence of bits using the HMAC algorithm. + /// + private static byte[] PSHA(HMAC hmac, string label, byte[] data, int offset, int length) + { + if (hmac == null) throw new ArgumentNullException(nameof(hmac)); + if (offset < 0) throw new ArgumentOutOfRangeException(nameof(offset)); + if (length < 0) throw new ArgumentOutOfRangeException(nameof(length)); + + byte[] seed = null; + + // convert label to UTF-8 byte sequence. + if (!String.IsNullOrEmpty(label)) + { + seed = new UTF8Encoding().GetBytes(label); + } + + // append data to label. + if (data != null && data.Length > 0) + { + if (seed != null) + { + byte[] seed2 = new byte[seed.Length + data.Length]; + seed.CopyTo(seed2, 0); + data.CopyTo(seed2, seed.Length); + seed = seed2; + } + else + { + seed = data; + } + } + + // check for a valid seed. + if (seed == null) + { + throw new ServiceResultException(StatusCodes.BadUnexpectedError, "The HMAC algorithm requires a non-null seed."); + } + + byte[] keySeed = hmac.ComputeHash(seed); + byte[] prfSeed = new byte[hmac.HashSize / 8 + seed.Length]; + Array.Copy(keySeed, prfSeed, keySeed.Length); + Array.Copy(seed, 0, prfSeed, keySeed.Length, seed.Length); + + // create buffer with requested size. + byte[] output = new byte[length]; + + int position = 0; + + do + { + byte[] hash = hmac.ComputeHash(prfSeed); + + if (offset < hash.Length) + { + for (int ii = offset; position < length && ii < hash.Length; ii++) + { + output[position++] = hash[ii]; + } + } + + if (offset > hash.Length) + { + offset -= hash.Length; + } + else + { + offset = 0; + } + + keySeed = hmac.ComputeHash(keySeed); + Array.Copy(keySeed, prfSeed, keySeed.Length); + } + while (position < length); + + // return random data. + return output; + } + + /// + /// Checks if the target is in the list. Comparisons ignore case. + /// + public static bool FindStringIgnoreCase(IList strings, string target) + { + if (strings == null || strings.Count == 0) + { + return false; + } + + for (int ii = 0; ii < strings.Count; ii++) + { + if (String.Compare(strings[ii], target, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + } + + return false; + } + + /// + /// Lazy helper to allow runtime check for Mono. + /// + private static readonly Lazy IsRunningOnMonoValue = new Lazy(() => { + return Type.GetType("Mono.Runtime") != null; + }); + + /// + /// Determine if assembly uses mono runtime. + /// + /// true if running on Mono runtime + public static bool IsRunningOnMono() + { + return IsRunningOnMonoValue.Value; + } + #endregion + } + + /// + /// Used as underlying tracing object for event processing. + /// + public class Tracing + { + #region Private Members + private static object m_syncRoot = new Object(); + private static Tracing s_instance; + #endregion Private Members + + #region Singleton Instance + /// + /// Private constructor. + /// + private Tracing() + { } + + /// + /// Public Singleton Instance getter. + /// + public static Tracing Instance + { + get + { + if (s_instance == null) + { + lock (m_syncRoot) + { + if (s_instance == null) + { + s_instance = new Tracing(); + } + } + } + return s_instance; + } + } + #endregion Singleton Instance + + #region Public Events + /// + /// Occurs when a trace call is made. + /// + public event EventHandler TraceEventHandler; + #endregion Public Events + + #region Internal Members + internal void RaiseTraceEvent(TraceEventArgs eventArgs) + { + if (TraceEventHandler != null) + { + try + { + TraceEventHandler(this, eventArgs); + } + catch (Exception ex) + { + Utils.Trace(ex, "Exception invoking Trace Event Handler", true, null); + } + } + } + #endregion + } + + /// + /// The event arguments provided when a trace event is raised. + /// + public class TraceEventArgs : EventArgs + { + #region Constructors + /// + /// Initializes a new instance of the TraceEventArgs class. + /// + /// The trace mask. + /// The format. + /// The message. + /// The exception. + /// The arguments. + internal TraceEventArgs(int traceMask, string format, string message, Exception exception, object[] args) + { + TraceMask = traceMask; + Format = format; + Message = message; + Exception = exception; + Arguments = args; + } + #endregion Constructors + + #region Public Properties + /// + /// Gets the trace mask. + /// + public int TraceMask { get; private set; } + + /// + /// Gets the format. + /// + public string Format { get; private set; } + + /// + /// Gets the arguments. + /// + public object[] Arguments { get; private set; } + + /// + /// Gets the message. + /// + public string Message { get; private set; } + + /// + /// Gets the exception. + /// + public Exception Exception { get; private set; } + #endregion Public Properties + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Main.cs b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Main.cs new file mode 100644 index 00000000..50181b2e --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Main.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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; + +#if NETFRAMEWORK +namespace Opc.Ua.Client.ComplexTypes.Tests +{ + static class Program + { + // Main Method + static public void Main(String[] args) + { + } + } +} +#endif diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Opc.Ua.Client.ComplexTypes.Tests.csproj b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Opc.Ua.Client.ComplexTypes.Tests.csproj new file mode 100644 index 00000000..3af1f6c0 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Opc.Ua.Client.ComplexTypes.Tests.csproj @@ -0,0 +1,27 @@ + + + + Exe + $(TestsTargetFrameworks) + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/ComplexTypesCommon.cs b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/ComplexTypesCommon.cs new file mode 100644 index 00000000..6c0b159b --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/ComplexTypesCommon.cs @@ -0,0 +1,326 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Xml; +using NUnit.Framework; +using Opc.Ua.Core.Tests.Types.Encoders; +using Opc.Ua.Test; + +namespace Opc.Ua.Client.ComplexTypes.Tests.Types +{ + /// + /// Sample custom types + /// + 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 OpcUaEncoderTests namespace (.NET code namespace is 'Opc.Ua.Client.ComplexTypes.Tests.Types.Encoders'). + /// + public const string OpcUaEncoderTests = "http://opcfoundation.org/UA/OpcUaEncoderTests/"; + } + + /// + /// Complex Types Common Functions for Tests. + /// + public class ComplexTypesCommon : EncoderCommon + { + protected AssemblyModule Module; + protected ComplexTypeBuilder ComplexTypeBuilder; + protected int NodeIdCount; + + + #region Test Setup + [OneTimeSetUp] + protected new void OneTimeSetUp() + { + NodeIdCount = 0; + Module = new AssemblyModule(); + ComplexTypeBuilder = new ComplexTypeBuilder( + Module, + Namespaces.OpcUaEncoderTests, + 3, + "Tests" + ); + } + + [OneTimeTearDown] + protected new void OneTimeTearDown() + { + } + + [SetUp] + protected new void SetUp() + { + } + + [TearDown] + protected new void TearDown() + { + } + #endregion + + #region DataPointSources + public class StructureFieldParameter : IFormattable + { + public StructureFieldParameter(StructureField structureField) + { + Name = structureField.Name; + BuiltInType = TypeInfo.GetBuiltInType(structureField.DataType); + } + + public string Name; + public BuiltInType BuiltInType; + + public string ToString(string format, IFormatProvider formatProvider) + { + return Name; + } + } + + [DatapointSource] + public StructureType[] StructureTypes = (StructureType[])Enum.GetValues(typeof(StructureType)); + + [DatapointSource] + public StructureFieldParameter[] StructureField = GetAllBuiltInTypesFields().Select(s => new StructureFieldParameter(s)).ToArray(); + #endregion + + #region Public Methods + public Type BuildComplexTypeWithAllBuiltInTypes( + StructureType structureType, string testFunc) + { + return BuildComplexTypeWithAllBuiltInTypes(null, structureType, testFunc, out ExpandedNodeId nodeId); + } + + /// + /// Builds a complex type with all BuiltInTypes as properties. + /// + public Type BuildComplexTypeWithAllBuiltInTypes( + ServiceMessageContext context, + StructureType structureType, + string testFunc, + out ExpandedNodeId nodeId) + { + uint typeId = (uint)Interlocked.Add(ref NodeIdCount, 100); + var complexTypeStructure = new StructureDefinition() { + BaseDataType = structureType == StructureType.Union ? + DataTypeIds.Union : DataTypeIds.Structure, + DefaultEncodingId = null, + Fields = GetAllBuiltInTypesFields(), + StructureType = structureType + }; + + var fieldBuilder = ComplexTypeBuilder.AddStructuredType( + structureType.ToString() + "." + testFunc, + complexTypeStructure); + nodeId = new ExpandedNodeId(typeId++, ComplexTypeBuilder.TargetNamespace); + var binaryEncodingId = new ExpandedNodeId(typeId++, ComplexTypeBuilder.TargetNamespace); + var xmlEncodingId = new ExpandedNodeId(typeId++, ComplexTypeBuilder.TargetNamespace); + fieldBuilder.AddTypeIdAttribute( + nodeId, binaryEncodingId, xmlEncodingId + ); + int i = 1; + foreach (var field in complexTypeStructure.Fields) + { + Type fieldType = TypeInfo.GetSystemType(field.DataType, null); + field.IsOptional = structureType == StructureType.StructureWithOptionalFields; + fieldBuilder.AddField(field, fieldType, i++); + } + var complexType = fieldBuilder.CreateType(); + if (context != null) + { + context.Factory.AddEncodeableType(nodeId, complexType); + context.Factory.AddEncodeableType(binaryEncodingId, complexType); + context.Factory.AddEncodeableType(xmlEncodingId, complexType); + } + return complexType; + } + + /// + /// Return a collection of fields with BuiltInTypes. + /// + public static StructureFieldCollection GetAllBuiltInTypesFields() + { + var collection = new StructureFieldCollection(); + foreach (var builtInType in EncoderCommon.BuiltInTypes) + { + if (builtInType == BuiltInType.Null || + builtInType == BuiltInType.Variant || + builtInType == BuiltInType.DataValue || + builtInType == BuiltInType.ExtensionObject || + builtInType >= BuiltInType.Number + ) + { + continue; + } + + collection.Add(new StructureField() { + Name = builtInType.ToString(), + DataType = new NodeId((uint)builtInType), + ArrayDimensions = null, + Description = $"A BuiltInType.{builtInType} property.", + IsOptional = false, + MaxStringLength = 0, + ValueRank = -1 + }); + } + return collection; + } + + /// + /// Create array of types for tests. + /// + public void CreateComplexTypes( + ServiceMessageContext context, + Dictionary dict, + string nameExtension) + { + foreach (var structureType in StructureTypes) + { + var type = BuildComplexTypeWithAllBuiltInTypes( + context, + structureType, + nameof(CreateComplexTypes) + nameExtension, + out ExpandedNodeId nodeId); + dict[structureType] = (nodeId, type); + } + } + + /// + /// Helper to fill type with default values or random Data. + /// + public void FillStructWithValues(BaseComplexType structType, bool randomValues) + { + int index = 0; + foreach (var property in structType.GetPropertyEnumerator()) + { + var builtInType = TypeInfo.GetBuiltInType(TypeInfo.GetDataTypeId(property.PropertyType)); + var newObj = randomValues ? DataGenerator.GetRandom(builtInType) : TypeInfo.GetDefaultValue(builtInType); + if (newObj == null) + { + // fill known missing default values (by design) + switch (builtInType) + { + case BuiltInType.XmlElement: + var doc = new XmlDocument(); + newObj = doc.CreateElement("name"); + break; + case BuiltInType.ByteString: + newObj = new byte[0]; + break; + case BuiltInType.String: + newObj = "This is a test"; + break; + case BuiltInType.ExtensionObject: + newObj = ExtensionObject.Null; + break; + default: + Assert.Fail("Unknown null default value"); + break; + } + } + structType[property.Name] = newObj; + Assert.AreEqual(structType[property.Name], newObj); + Assert.AreEqual(structType[index], newObj); + index++; + } + } + + /// + /// Encode and decode a complex type, verify the result against expected data. + /// + protected void EncodeDecodeComplexType( + ServiceMessageContext encoderContext, + EncodingType encoderType, + StructureType structureType, + ExpandedNodeId nodeId, + object data + ) + { + string encodeInfo = $"Encoder: {encoderType} Type:{structureType}"; + TestContext.Out.WriteLine(encodeInfo); + TestContext.Out.WriteLine(data); + ExtensionObject expected = CreateExtensionObject(structureType, nodeId, data); + Assert.IsNotNull(expected, "Expected DataValue is Null, " + encodeInfo); + TestContext.Out.WriteLine("Expected:"); + TestContext.Out.WriteLine(expected); + var encoderStream = new MemoryStream(); + IEncoder encoder = CreateEncoder(encoderType, encoderContext, encoderStream, typeof(DataValue)); + encoder.WriteExtensionObject("ExtensionObject", expected); + Dispose(encoder); + var buffer = encoderStream.ToArray(); + string jsonFormatted; + switch (encoderType) + { + case EncodingType.Json: + jsonFormatted = PrettifyAndValidateJson(Encoding.UTF8.GetString(buffer)); + break; + } + var decoderStream = new MemoryStream(buffer); + IDecoder decoder = CreateDecoder(encoderType, encoderContext, decoderStream, typeof(DataValue)); + ExtensionObject result = decoder.ReadExtensionObject("ExtensionObject"); + Dispose(decoder); + TestContext.Out.WriteLine("Result:"); + TestContext.Out.WriteLine(result); + Assert.IsNotNull(result, "Resulting DataValue is Null, " + encodeInfo); + Assert.AreEqual(expected.Encoding, result.Encoding, encodeInfo); + //TODO: investigate why AreEqual cannot compare ExtensionObject and Body + //Assert.AreEqual(expected.Body, result.Body, encodeInfo); + Assert.IsTrue(Utils.IsEqual(expected.Body, result.Body), "Opc.Ua.Utils.IsEqual failed to compare expected and result. " + encodeInfo); + } + + /// + /// Create an ExtensionObject for a complex type. + /// The complex type is the Body. + /// + protected ExtensionObject CreateExtensionObject(StructureType structureType, ExpandedNodeId nodeId, object data) + { + return new ExtensionObject(nodeId, data); + } + #endregion + + #region Private Field + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/ComplexTypesTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/ComplexTypesTests.cs new file mode 100644 index 00000000..93e1bf97 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/ComplexTypesTests.cs @@ -0,0 +1,140 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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 NUnit.Framework; +using Opc.Ua.Core.Tests.Types.Encoders; + +namespace Opc.Ua.Client.ComplexTypes.Tests.Types +{ + /// + /// Main purpose of this test is to verify the + /// system.emit functionality on a target platform. + /// + [TestFixture, Category("ComplexTypes")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class ComplexSampleTypesBuilder : ComplexTypesCommon + { + #region Tests + /// + /// Create a structure type from a DataTypeDefinition. + /// Activate an object and verify it is the expected type + /// with expected properties. + /// + [Theory] + public void CreateComplexType(StructureType structureType) + { + // EncoderCommon.BuiltInTypes subtracted by the number of unused types. + int propertyBuiltInTypes = EncoderCommon.BuiltInTypes.Length - 3; + var complexType = BuildComplexTypeWithAllBuiltInTypes( + structureType, nameof(CreateComplexType)); + Assert.NotNull(complexType); + var emittedType = Activator.CreateInstance(complexType); + var structType = emittedType as BaseComplexType; + switch (structureType) + { + case StructureType.Structure: + Assert.NotNull(structType); + Assert.AreEqual(structType.GetPropertyTypes().Count, propertyBuiltInTypes); + Assert.AreEqual(structType.GetPropertyCount(), propertyBuiltInTypes); + break; + case StructureType.StructureWithOptionalFields: + var structWithOptionalFieldsType = emittedType as OptionalFieldsComplexType; + Assert.NotNull(structWithOptionalFieldsType); + Assert.AreEqual(structWithOptionalFieldsType.EncodingMask, 0); + Assert.AreEqual(structWithOptionalFieldsType.GetPropertyTypes().Count, propertyBuiltInTypes); + Assert.AreEqual(structWithOptionalFieldsType.GetPropertyCount(), propertyBuiltInTypes); + break; + case StructureType.Union: + var unionType = emittedType as UnionComplexType; + Assert.NotNull(unionType); + Assert.AreEqual(unionType.SwitchField, 0); + Assert.AreEqual(unionType.GetPropertyTypes().Count, propertyBuiltInTypes); + Assert.AreEqual(unionType.GetPropertyCount(), propertyBuiltInTypes); + Assert.Null(unionType.Value); + break; + } + var encodeable = emittedType as IEncodeable; + Assert.NotNull(encodeable); + // try the accessor by name + foreach (var accessorname in structType.GetPropertyNames()) + { + var obj = structType[accessorname]; + } + // try the accessor by index + for (int i = 0; i < structType.GetPropertyCount(); i++) + { + var obj = structType[i]; + } + } + + /// + /// Create a complex type with one data field set with default or random value. + /// + [Theory] + public void CreateComplexTypeWithData(StructureType structureType, bool randomValue) + { + // BuiltInTypes - Null type. + int propertyBuiltInTypes = EncoderCommon.BuiltInTypes.Length - 1; + var complexType = BuildComplexTypeWithAllBuiltInTypes( + structureType, nameof(CreateComplexTypeWithData) + "." + randomValue.ToString()); + Assert.NotNull(complexType); + var emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + + // fill struct with default values + FillStructWithValues(baseType, randomValue); + + for (int i = 0; i < baseType.GetPropertyCount(); i++) + { + var obj = baseType[i]; + if (structureType == StructureType.Union) + { + if (((UnionComplexType)baseType).SwitchField == i + 1) + { + Assert.NotNull(obj); + } + else + { + Assert.Null(obj); + } + } + else + { + Assert.NotNull(obj); + } + } + } + #endregion + + #region Private Methods + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/EncoderTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/EncoderTests.cs new file mode 100644 index 00000000..6a9ffcaf --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/EncoderTests.cs @@ -0,0 +1,160 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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 NUnit.Framework; + +namespace Opc.Ua.Client.ComplexTypes.Tests.Types +{ + /// + /// Tests for the IEncoder and IDecoder class + /// on complex data types as defined in the + /// Client.ComplexTypes assembly. + /// + [TestFixture, Category("Encoder")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class ComplexTypesEncoderTests : ComplexTypesCommon + { + public ServiceMessageContext EncoderContext; + public Dictionary TypeDictionary; + + #region Test Setup + [OneTimeSetUp] + protected new void OneTimeSetUp() + { + EncoderContext = new ServiceMessageContext(); + // create private copy of factory + EncoderContext.Factory = new EncodeableFactory(EncoderContext.Factory); + // add a few random namespaces + EncoderContext.NamespaceUris.Append("urn:This:is:my:test:encoder"); + EncoderContext.NamespaceUris.Append("urn:This:is:another:namespace"); + EncoderContext.NamespaceUris.Append(Namespaces.OpcUaEncoderTests); + // create only a single type per structure type, tests can activate + TypeDictionary = new Dictionary(); + CreateComplexTypes(EncoderContext, TypeDictionary, ""); + } + + [OneTimeTearDown] + protected new void OneTimeTearDown() + { + } + + [SetUp] + protected new void SetUp() + { + } + + [TearDown] + protected new void TearDown() + { + } + #endregion + + + #region Test Methods + /// + /// Verify encode and decode of a structured type. + /// + [Theory] + [Category("ComplexTypes")] + public void ReEncodeComplexType( + EncodingType encoderType, + StructureType structureType + ) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[structureType]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + FillStructWithValues(baseType, true); + EncodeDecodeComplexType(EncoderContext, encoderType, structureType, nodeId, emittedType); + } + + /// + /// Verify encode and decode of a Structure type with optional fields. + /// Test accessors for all defined properties. + /// + [Theory] + [Category("ComplexTypes")] + public void ReEncodeStructureWithOptionalFieldsComplexType( + EncodingType encoderType, + StructureFieldParameter structureFieldParameter + ) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.StructureWithOptionalFields]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + var builtInType = structureFieldParameter.BuiltInType; + TestContext.Out.WriteLine($"Optional Field: {structureFieldParameter.BuiltInType} is the only value."); + baseType[structureFieldParameter.Name] = DataGenerator.GetRandom(builtInType); + EncodeDecodeComplexType(EncoderContext, encoderType, StructureType.StructureWithOptionalFields, nodeId, emittedType); + TestContext.Out.WriteLine($"Optional Field: {structureFieldParameter.BuiltInType} is null."); + baseType[structureFieldParameter.Name] = null; + EncodeDecodeComplexType(EncoderContext, encoderType, StructureType.StructureWithOptionalFields, nodeId, emittedType); + TestContext.Out.WriteLine($"Optional Field: {structureFieldParameter.BuiltInType} is null, all other fields have random values."); + FillStructWithValues(baseType, true); + baseType[structureFieldParameter.Name] = null; + EncodeDecodeComplexType(EncoderContext, encoderType, StructureType.StructureWithOptionalFields, nodeId, emittedType); + TestContext.Out.WriteLine($"Optional Field: {structureFieldParameter.BuiltInType} has random value."); + baseType[structureFieldParameter.Name] = DataGenerator.GetRandom(builtInType); + EncodeDecodeComplexType(EncoderContext, encoderType, StructureType.StructureWithOptionalFields, nodeId, emittedType); + } + + /// + /// Verify encode and decode of a Union type. + /// Test accessors for all defined properties. + /// + [Theory] + [Category("ComplexTypes")] + public void ReEncodeUnionComplexType( + EncodingType encoderType, + StructureFieldParameter structureFieldParameter + ) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.Union]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + var builtInType = structureFieldParameter.BuiltInType; + TestContext.Out.WriteLine($"Union Field: {structureFieldParameter.BuiltInType} is random."); + baseType[structureFieldParameter.Name] = DataGenerator.GetRandom(builtInType); + EncodeDecodeComplexType(EncoderContext, encoderType, StructureType.Union, nodeId, emittedType); + TestContext.Out.WriteLine($"Union Field: {structureFieldParameter.BuiltInType} is null."); + baseType[structureFieldParameter.Name] = null; + EncodeDecodeComplexType(EncoderContext, encoderType, StructureType.Union, nodeId, emittedType); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/JsonEncoderTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/JsonEncoderTests.cs new file mode 100644 index 00000000..4ee6e045 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Client.ComplexTypes.Tests/Types/JsonEncoderTests.cs @@ -0,0 +1,422 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Text; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using Opc.Ua.Core.Tests.Types.Encoders; + +namespace Opc.Ua.Client.ComplexTypes.Tests.Types +{ + /// + /// Tests for the Json encoder class. + /// + [TestFixture, Category("JsonEncoder")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class ComplexTypesJsonEncoderTests : ComplexTypesCommon + { + public ServiceMessageContext EncoderContext; + public Dictionary TypeDictionary; + + #region Test Setup + [OneTimeSetUp] + protected new void OneTimeSetUp() + { + EncoderContext = new ServiceMessageContext(); + // create private copy of factory + EncoderContext.Factory = new EncodeableFactory(EncoderContext.Factory); + EncoderContext.NamespaceUris.Append("urn:This:is:my:test:encoder"); + EncoderContext.NamespaceUris.Append("urn:This:is:another:namespace"); + EncoderContext.NamespaceUris.Append(Namespaces.OpcUaEncoderTests); + TypeDictionary = new Dictionary(); + CreateComplexTypes(EncoderContext, TypeDictionary, ""); + } + + [OneTimeTearDown] + protected new void OneTimeTearDown() + { + } + + [SetUp] + protected new void SetUp() + { + } + + [TearDown] + protected new void TearDown() + { + } + #endregion + + #region DataSource + /// + /// Constants used by test data set. + /// + const Int64 kInt64Value = -123456789123456; + const UInt64 kUInt64Value = 123456789123456; + + /// + /// An array of spec compliant Json encoding test data sets which + /// shall be followed by the JSON encoder accordingly. + /// + /// + /// Include default value is ignored by tests. + /// Only a small subset of built in types is tested on complex types. + /// + [DatapointSource] + public JsonValidationData[] Data = new JsonValidationDataCollection() { + { BuiltInType.Boolean, false, "false", null }, + { BuiltInType.Boolean, true,"true", null }, + { BuiltInType.Byte, (Byte)0, "0", null}, + { BuiltInType.Byte, (Byte)88, "88", null }, + { BuiltInType.SByte, (SByte)0, "0", null }, + { BuiltInType.UInt16, (UInt16)12345, "12345", null }, + { BuiltInType.Int16, (Int16)(-12345), "-12345", null }, + { BuiltInType.UInt32, (UInt32)1234567, "1234567", null }, + { BuiltInType.Int32, (Int32)(-12345678), "-12345678", null }, + { BuiltInType.Int64, kInt64Value, Quotes(kInt64Value.ToString()), null }, + { BuiltInType.UInt64, (UInt64)kUInt64Value, Quotes(kUInt64Value.ToString()), null }, + { BuiltInType.Float, (float)3.14, "3.14", "3.14" }, + // TODO: why is JToken.DeepEquals failing here? + //{ BuiltInType.Float, float.PositiveInfinity, "Infinity", "Infinity" }, + { BuiltInType.Double, (double)7.77, "7.77", "7.77" } + }.ToArray(); + #endregion + + #region Test Methods + /// + /// Verify reversible Json encoding for Structure as body of ExtensionObject. + /// + [Theory] + public void JsonEncodeStructureRev( + JsonValidationData jsonValidationData) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.Structure]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + baseType[jsonValidationData.BuiltInType.ToString()] = jsonValidationData.Instance; + ExtensionObject extensionObject = CreateExtensionObject(StructureType.Structure, nodeId, emittedType); + EncodeJsonComplexTypeVerifyResult( + jsonValidationData.BuiltInType, + extensionObject, + true, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false); + } + + /// + /// Verify non reversible Json encoding of a Structure as body of ExtensionObject. + /// + [Theory] + public void JsonEncodeStructureNonRev( + JsonValidationData jsonValidationData) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.Structure]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + baseType[jsonValidationData.BuiltInType.ToString()] = jsonValidationData.Instance; + ExtensionObject extensionObject = CreateExtensionObject(StructureType.Structure, nodeId, emittedType); + EncodeJsonComplexTypeVerifyResult( + jsonValidationData.BuiltInType, + extensionObject, + false, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false); + } + + /// + /// Verify reversible Json encoding for Structure + /// with optional fields as body of ExtensionObject. + /// + [Theory] + public void JsonEncodeOptionalFieldsRev( + JsonValidationData jsonValidationData) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.StructureWithOptionalFields]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + baseType[jsonValidationData.BuiltInType.ToString()] = jsonValidationData.Instance; + ExtensionObject extensionObject = CreateExtensionObject(StructureType.StructureWithOptionalFields, nodeId, emittedType); + EncodeJsonComplexTypeVerifyResult( + jsonValidationData.BuiltInType, + extensionObject, + true, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false); + } + + /// + /// Verify non reversible Json encoding of a Structure + /// with optional fields as body of ExtensionObject. + /// + [Theory] + public void JsonEncodeOptionalFieldsNonRev( + JsonValidationData jsonValidationData) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.StructureWithOptionalFields]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + baseType[jsonValidationData.BuiltInType.ToString()] = jsonValidationData.Instance; + ExtensionObject extensionObject = CreateExtensionObject(StructureType.StructureWithOptionalFields, nodeId, emittedType); + EncodeJsonComplexTypeVerifyResult( + jsonValidationData.BuiltInType, + extensionObject, + false, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false); + } + + /// + /// Verify reversible Json encoding for Unions with ExtensionObject. + /// + [Theory] + public void JsonEncodeUnionRev( + JsonValidationData jsonValidationData) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.Union]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + baseType[jsonValidationData.BuiltInType.ToString()] = jsonValidationData.Instance; + ExtensionObject extensionObject = CreateExtensionObject(StructureType.Union, nodeId, emittedType); + EncodeJsonComplexTypeVerifyResult( + jsonValidationData.BuiltInType, + extensionObject, + true, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false); + } + + /// + /// Verify non reversible Json encoding of a Union in a ExtensionObject. + /// + [Theory] + public void JsonEncodeUnionNonRev( + JsonValidationData jsonValidationData) + { + ExpandedNodeId nodeId; + Type complexType; + (nodeId, complexType) = TypeDictionary[StructureType.Union]; + object emittedType = Activator.CreateInstance(complexType); + var baseType = emittedType as BaseComplexType; + baseType[jsonValidationData.BuiltInType.ToString()] = jsonValidationData.Instance; + ExtensionObject extensionObject = CreateExtensionObject(StructureType.Union, nodeId, emittedType); + EncodeJsonComplexTypeVerifyResult( + jsonValidationData.BuiltInType, + extensionObject, + false, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false); + } + #endregion + + #region Private Methods + protected void EncodeJsonComplexTypeVerifyResult( + BuiltInType builtInType, + ExtensionObject data, + bool useReversibleEncoding, + string expected, + bool topLevelIsArray + ) + { + string encodeInfo = $"Encoder: Json Type:{builtInType} Reversible: {useReversibleEncoding}"; + TestContext.Out.WriteLine(encodeInfo); + TestContext.Out.WriteLine("Data:"); + TestContext.Out.WriteLine(data); + TestContext.Out.WriteLine("Expected:"); + + expected = BuildExpectedResponse(data, builtInType, expected, useReversibleEncoding); + + var formattedExpected = PrettifyAndValidateJson(expected); + var encoderStream = new MemoryStream(); + IEncoder encoder = CreateEncoder( + EncodingType.Json, EncoderContext, encoderStream, + typeof(ExtensionObject), useReversibleEncoding, topLevelIsArray); + Encode(encoder, BuiltInType.ExtensionObject, useReversibleEncoding ? builtInType.ToString() : null, data); + Dispose(encoder); + var buffer = encoderStream.ToArray(); + TestContext.Out.WriteLine("Result:"); + var result = Encoding.UTF8.GetString(buffer); + if (data.Body is UnionComplexType && !useReversibleEncoding) + { + // helper to create testable JSON output for Unions + result = result.Replace("{", "{\"Union\" :"); + } + var formattedResult = PrettifyAndValidateJson(result); + var jsonLoadSettings = new JsonLoadSettings() { + CommentHandling = CommentHandling.Ignore, + LineInfoHandling = LineInfoHandling.Ignore + }; + var resultParsed = JObject.Parse(result, jsonLoadSettings); + var expectedParsed = JObject.Parse(expected, jsonLoadSettings); + var areEqual = JToken.DeepEquals(expectedParsed, resultParsed); + Assert.IsTrue(areEqual, encodeInfo); + } + + /// + /// Build the response for default type and replace + /// the builtInType parameter with the expected response + /// depending on the structure type selected. + /// + private string BuildExpectedResponse( + ExtensionObject data, + BuiltInType builtInType, + string expected, + bool useReversibleEncoding) + { + // build expected result + string typeId = String.Empty; + if (!data.TypeId.IsNull) + { + var nodeId = ExpandedNodeId.ToNodeId(data.TypeId, EncoderContext.NamespaceUris); + typeId = $"\"TypeId\":{{\"Id\":{nodeId.Identifier},\"Namespace\":{nodeId.NamespaceIndex}}},"; + } + if (String.IsNullOrEmpty(expected)) + { + expected = "{}"; + } + else if (data.Body is UnionComplexType) + { + if (useReversibleEncoding) + { + var union = data.Body as UnionComplexType; + var json = $"{{\"{builtInType}\" :{{"; + if (!data.TypeId.IsNull) + { + json += typeId; + } + json += $"\"Body\":{{\"SwitchField\" : {union.SwitchField}, \"Value\":" + expected + "}}}"; + expected = json; + } + else + { + expected = "{\"Union\" :" + expected + "}"; + } + } + else if (data.Body is OptionalFieldsComplexType) + { + if (useReversibleEncoding) + { + var optional = data.Body as OptionalFieldsComplexType; + var json = $"{{\"{builtInType}\" :{{"; + if (!data.TypeId.IsNull) + { + json += typeId; + } + json += $"\"Body\":{{\"EncodingMask\" : {optional.EncodingMask}, \"{builtInType}\":" + expected + "}}}"; + expected = json; + } + else + { + expected = $"{{\"{builtInType}\" :" + expected + "}"; + } + } + else if (data.Body is BaseComplexType) + { + var structure = data.Body as BaseComplexType; + var body = ""; + bool commaNeeded = false; + foreach (var property in structure.GetPropertyEnumerator()) + { + if (builtInType.ToString() == property.Name) + { + if (commaNeeded) body += ","; + commaNeeded = true; + body += $"\"{builtInType}\":" + expected; + } + else + { + object o = property.GetValue(structure); + string oText = o?.ToString().ToLowerInvariant(); + if (property.Name == "DateTime") + { + oText = "\"0001-01-01T00:00:00Z\""; + continue; + } + else if (property.Name == "StatusCode") + { + if (useReversibleEncoding) + { + oText = "0"; + } + else + { + oText = "{\"Code\": 0,\"Symbol\":\"Good\"}"; + // default statuscode is not encoded + } + continue; + } + else if (property.Name == "Guid") + { + oText = "\"00000000-0000-0000-0000-000000000000\""; + continue; + } + else if (property.Name == "UInt64" || property.Name == "Int64") oText = "\"" + oText + "\""; + if (oText != null) + { + if (commaNeeded) body += ","; + commaNeeded = true; + body += $"\"{property.Name}\":" + oText; + } + } + } + if (useReversibleEncoding) + { + var json = $"{{\"{builtInType}\" :{{"; + if (!data.TypeId.IsNull) + { + json += typeId; + } + json += $"\"Body\":{{" + body + "}}}"; + expected = json; + } + else + { + expected = "{" + body + "}"; + } + } + return expected; + } + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Main.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Main.cs new file mode 100644 index 00000000..bcc0ece5 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Main.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +#if NETFRAMEWORK +namespace Opc.Ua.Core.Tests +{ + static class Program + { + // Main Method + static public void Main(String[] args) + { + } + } +} +#endif diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Opc.Ua.Core.Tests.csproj b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Opc.Ua.Core.Tests.csproj new file mode 100644 index 00000000..341b9b26 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Opc.Ua.Core.Tests.csproj @@ -0,0 +1,29 @@ + + + + Exe + $(TestsTargetFrameworks) + Opc.Ua.Core.Tests + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/ApplicationTestData.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/ApplicationTestData.cs new file mode 100644 index 00000000..1d396640 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/ApplicationTestData.cs @@ -0,0 +1,65 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +namespace Opc.Ua.Core.Tests +{ + public class ApplicationTestData + { + public ApplicationTestData() + { + Initialize(); + } + + private void Initialize() + { + ApplicationUri = null; + ApplicationName = null; + DomainNames = new StringCollection(); + Subject = null; + PrivateKeyFormat = "PFX"; + PrivateKeyPassword = ""; + Certificate = null; + PrivateKey = null; + IssuerCertificates = null; + } + + public string ApplicationUri; + public string ApplicationName; + public StringCollection DomainNames; + public String Subject; + public String PrivateKeyFormat; + public String PrivateKeyPassword; + public byte[] Certificate; + public byte[] PrivateKey; + public byte[][] IssuerCertificates; + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/ApplicationTestDataGenerator.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/ApplicationTestDataGenerator.cs new file mode 100644 index 00000000..9cbf1248 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/ApplicationTestDataGenerator.cs @@ -0,0 +1,149 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.RegularExpressions; +using Opc.Ua.Test; + + +namespace Opc.Ua.Core.Tests +{ + public class ApplicationTestDataGenerator + { + private int m_randomStart = 1; + private RandomSource m_randomSource; + private DataGenerator m_dataGenerator; + + public ApplicationTestDataGenerator(int randomStart) + { + m_randomStart = randomStart; + m_randomSource = new RandomSource(randomStart); + m_dataGenerator = new DataGenerator(m_randomSource); + } + + public RandomSource RandomSource => m_randomSource; + public DataGenerator DataGenerator => m_dataGenerator; + + public IList ApplicationTestSet(int count) + { + var testDataSet = new List(); + for (int i = 0; i < count; i++) + { + testDataSet.Add(RandomApplicationTestData()); + } + return testDataSet; + } + + private ApplicationTestData RandomApplicationTestData() + { + // TODO: set to discoveryserver + ApplicationType appType = (ApplicationType)m_randomSource.NextInt32((int)ApplicationType.ClientAndServer); + string pureAppName = m_dataGenerator.GetRandomString("en"); + pureAppName = Regex.Replace(pureAppName, @"[^\w\d\s]", ""); + string pureAppUri = Regex.Replace(pureAppName, @"[^\w\d]", ""); + string appName = "UA " + pureAppName; + StringCollection domainNames = RandomDomainNames(); + string localhost = domainNames[0]; + string privateKeyFormat = m_randomSource.NextInt32(1) == 0 ? "PEM" : "PFX"; + string appUri = ("urn:localhost:opcfoundation.org:" + pureAppUri.ToLower()).Replace("localhost", localhost); + string prodUri = "http://opcfoundation.org/UA/" + pureAppUri; + StringCollection discoveryUrls = new StringCollection(); + int port = (m_dataGenerator.GetRandomInt16() & 0x1fff) + 50000; + switch (appType) + { + case ApplicationType.Client: + appName += " Client"; + break; + case ApplicationType.ClientAndServer: + appName += " Client and"; + goto case ApplicationType.Server; + case ApplicationType.DiscoveryServer: + appName += " DiscoveryServer"; + discoveryUrls = RandomDiscoveryUrl(domainNames, 4840, pureAppUri); + break; + case ApplicationType.Server: + appName += " Server"; + discoveryUrls = RandomDiscoveryUrl(domainNames, port, pureAppUri); + break; + } + ApplicationTestData testData = new ApplicationTestData { + ApplicationName = appName, + ApplicationUri = appUri, + DomainNames = domainNames, + Subject = String.Format("CN={0},DC={1},O=OPC Foundation", appName, localhost), + PrivateKeyFormat = privateKeyFormat + }; + return testData; + } + + private string RandomLocalHost() + { + string localhost = Regex.Replace(m_dataGenerator.GetRandomSymbol("en").Trim().ToLower(), @"[^\w\d]", ""); + if (localhost.Length >= 12) + { + localhost = localhost.Substring(0, 12); + } + return localhost; + } + + private string[] RandomDomainNames() + { + int count = m_randomSource.NextInt32(8) + 1; + var result = new string[count]; + for (int i = 0; i < count; i++) + { + result[i] = RandomLocalHost(); + } + return result; + } + + private StringCollection RandomDiscoveryUrl(StringCollection domainNames, int port, string appUri) + { + var result = new StringCollection(); + foreach (var name in domainNames) + { + int random = m_randomSource.NextInt32(7); + if ((result.Count == 0) || (random & 1) == 0) + { + result.Add(String.Format("opc.tcp://{0}:{1}/{2}", name, (port++).ToString(), appUri)); + } + if ((random & 2) == 0) + { + result.Add(String.Format("http://{0}:{1}/{2}", name, (port++).ToString(), appUri)); + } + if ((random & 4) == 0) + { + result.Add(String.Format("https://{0}:{1}/{2}", name, (port++).ToString(), appUri)); + } + } + return result; + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateFactoryTest.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateFactoryTest.cs new file mode 100644 index 00000000..81fde061 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateFactoryTest.cs @@ -0,0 +1,444 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Linq; +using System.Numerics; +using System.Collections.Concurrent; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using NUnit.Framework; +using Opc.Ua.Security.Certificates; +using Opc.Ua.Security.Certificates.Tests; + +namespace Opc.Ua.Core.Tests.Security.Certificates +{ + /// + /// Tests for the CertificateFactory class. + /// + [TestFixture, Category("CertificateFactory")] + [Parallelizable] + [SetCulture("en-us")] + public class CertificateFactoryTest + { + #region DataPointSources + [DatapointSource] + public KeyHashPair[] KeyHashPairs = new KeyHashPairCollection { + { 2048, HashAlgorithmName.SHA256 }, + { 3072, HashAlgorithmName.SHA384 }, + { 4096, HashAlgorithmName.SHA512 } + }.ToArray(); + #endregion + + #region Test Setup + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected void OneTimeSetUp() + { + m_rootCACertificate = new ConcurrentDictionary(); + } + + /// + /// Clean up the Test PKI folder + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + #endregion + + #region Test Methods + /// + /// Verify self signed app certs. + /// + [Theory] + public void VerifySelfSignedAppCerts( + KeyHashPair keyHashPair + ) + { + var appTestGenerator = new ApplicationTestDataGenerator(keyHashPair.KeySize); + ApplicationTestData app = appTestGenerator.ApplicationTestSet(1).First(); + var cert = CertificateFactory.CreateCertificate(app.ApplicationUri, app.ApplicationName, app.Subject, app.DomainNames) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(); + Assert.NotNull(cert); + Assert.NotNull(cert.RawData); + Assert.True(cert.HasPrivateKey); + using (RSA rsa = cert.GetRSAPrivateKey()) + { + rsa.ExportParameters(true); + } + using (RSA rsa = cert.GetRSAPublicKey()) + { + rsa.ExportParameters(false); + } + var plainCert = new X509Certificate2(cert.RawData); + Assert.NotNull(plainCert); + VerifyApplicationCert(app, plainCert); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + /// + /// Verify signed OPC UA app certs. + /// + [Theory, Order(500)] + public void VerifySignedAppCerts( + KeyHashPair keyHashPair + ) + { + X509Certificate2 issuerCertificate = GetIssuer(keyHashPair); + Assert.NotNull(issuerCertificate); + Assert.NotNull(issuerCertificate.RawData); + Assert.True(issuerCertificate.HasPrivateKey); + var appTestGenerator = new ApplicationTestDataGenerator(keyHashPair.KeySize); + ApplicationTestData app = appTestGenerator.ApplicationTestSet(1).First(); + var cert = CertificateFactory.CreateCertificate( + app.ApplicationUri, app.ApplicationName, app.Subject, app.DomainNames) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetIssuer(issuerCertificate) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(); + Assert.NotNull(cert); + Assert.NotNull(cert.RawData); + Assert.True(cert.HasPrivateKey); + using (var plainCert = new X509Certificate2(cert.RawData)) + { + Assert.NotNull(plainCert); + VerifyApplicationCert(app, plainCert, issuerCertificate); + X509Utils.VerifyRSAKeyPair(plainCert, cert, true); + } + } + + + /// + /// Verify CA signed app certs. + /// + [Theory, Order(100)] + public void VerifyCACerts( + KeyHashPair keyHashPair + ) + { + var subject = "CN=CA Test Cert"; + int pathLengthConstraint = (keyHashPair.KeySize / 512) - 3; + var cert = CertificateFactory.CreateCertificate(subject) + .SetLifeTime(25 * 12) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetCAConstraint(pathLengthConstraint) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(); + Assert.NotNull(cert); + Assert.NotNull(cert.RawData); + Assert.True(cert.HasPrivateKey); + var plainCert = new X509Certificate2(cert.RawData); + Assert.NotNull(plainCert); + VerifyCACert(plainCert, subject, pathLengthConstraint); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + m_rootCACertificate[keyHashPair.KeySize] = cert; + } + + /// + /// Verify CRL for CA signed app certs. + /// + [Theory, Order(400)] + public void VerifyCrlCerts( + KeyHashPair keyHashPair + ) + { + int pathLengthConstraint = (keyHashPair.KeySize / 512) - 3; + X509Certificate2 issuerCertificate = GetIssuer(keyHashPair); + Assert.True(X509Utils.VerifySelfSigned(issuerCertificate)); + + var otherIssuerCertificate = CertificateFactory.CreateCertificate(issuerCertificate.Subject) + .SetLifeTime(TimeSpan.FromDays(180)) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetCAConstraint(pathLengthConstraint) + .CreateForRSA(); + Assert.True(X509Utils.VerifySelfSigned(otherIssuerCertificate)); + + X509Certificate2Collection revokedCerts = new X509Certificate2Collection(); + for (int i = 0; i < 10; i++) + { + var cert = CertificateFactory.CreateCertificate($"CN=Test Cert {i}") + .SetIssuer(issuerCertificate) + .SetRSAKeySize(keyHashPair.KeySize <= 2048 ? keyHashPair.KeySize : 2048) + .CreateForRSA(); + revokedCerts.Add(cert); + Assert.False(X509Utils.VerifySelfSigned(cert)); + } + + Assert.NotNull(issuerCertificate); + Assert.NotNull(issuerCertificate.RawData); + Assert.True(issuerCertificate.HasPrivateKey); + using (var rsa = issuerCertificate.GetRSAPrivateKey()) + { + Assert.NotNull(rsa); + } + + using (var plainCert = new X509Certificate2(issuerCertificate.RawData)) + { + Assert.NotNull(plainCert); + VerifyCACert(plainCert, issuerCertificate.Subject, pathLengthConstraint); + } + Assert.True(X509Utils.VerifySelfSigned(issuerCertificate)); + X509Utils.VerifyRSAKeyPair(issuerCertificate, issuerCertificate, true); + + var crl = CertificateFactory.RevokeCertificate(issuerCertificate, null, null); + Assert.NotNull(crl); + Assert.True(crl.VerifySignature(issuerCertificate, true)); + var extension = X509Extensions.FindExtension(crl.CrlExtensions); + var crlCounter = new BigInteger(1); + Assert.AreEqual(crlCounter, extension.CrlNumber); + var revokedList = new List(); + revokedList.Add(crl); + foreach (var cert in revokedCerts) + { + Assert.Throws(() => crl.VerifySignature(otherIssuerCertificate, true)); + Assert.False(crl.IsRevoked(cert)); + var nextCrl = CertificateFactory.RevokeCertificate(issuerCertificate, revokedList, new X509Certificate2Collection(cert)); + crlCounter++; + Assert.NotNull(nextCrl); + Assert.True(nextCrl.IsRevoked(cert)); + extension = X509Extensions.FindExtension(nextCrl.CrlExtensions); + Assert.AreEqual(crlCounter, extension.CrlNumber); + Assert.True(crl.VerifySignature(issuerCertificate, true)); + revokedList.Add(nextCrl); + crl = nextCrl; + } + + foreach (var cert in revokedCerts) + { + Assert.True(crl.IsRevoked(cert)); + } + } + #endregion + + #region Public Methods + private X509Certificate2 GetIssuer(KeyHashPair keyHashPair) + { + X509Certificate2 issuerCertificate = null; + try + { + if (!m_rootCACertificate.TryGetValue(keyHashPair.KeySize, out issuerCertificate)) + { + VerifyCACerts(keyHashPair); + if (!m_rootCACertificate.TryGetValue(keyHashPair.KeySize, out issuerCertificate)) + { + Assert.Ignore($"Could not load Issuer Cert."); + } + } + } + catch + { + Assert.Ignore($"Could not load create Issuer Cert."); + } + return issuerCertificate; + } + + public static void VerifyApplicationCert(ApplicationTestData testApp, X509Certificate2 cert, X509Certificate2 issuerCert = null) + { + bool signedCert = issuerCert != null; + if (issuerCert == null) + { + issuerCert = cert; + } + TestContext.Out.WriteLine($"{nameof(VerifyApplicationCert)}:"); + Assert.NotNull(cert); + TestContext.Out.WriteLine(cert); + Assert.False(cert.HasPrivateKey); + Assert.True(X509Utils.CompareDistinguishedName(testApp.Subject, cert.Subject)); + Assert.True(X509Utils.CompareDistinguishedName(issuerCert.Subject, cert.Issuer)); + + // test basic constraints + X509BasicConstraintsExtension constraints = X509Extensions.FindExtension(cert); + Assert.NotNull(constraints); + TestContext.Out.WriteLine(constraints.Format(true)); + Assert.True(constraints.Critical); + if (signedCert) + { + Assert.False(constraints.CertificateAuthority); + Assert.False(constraints.HasPathLengthConstraint); + } + else + { + Assert.True(constraints.CertificateAuthority); + Assert.True(constraints.HasPathLengthConstraint); + Assert.AreEqual(0, constraints.PathLengthConstraint); + } + + // key usage + X509KeyUsageExtension keyUsage = X509Extensions.FindExtension(cert); + Assert.NotNull(keyUsage); + TestContext.Out.WriteLine(keyUsage.Format(true)); + Assert.True(keyUsage.Critical); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.CrlSign) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DataEncipherment) == X509KeyUsageFlags.DataEncipherment); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DecipherOnly) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DigitalSignature) == X509KeyUsageFlags.DigitalSignature); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.EncipherOnly) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyAgreement) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyCertSign) == (signedCert ? 0 : X509KeyUsageFlags.KeyCertSign)); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyEncipherment) == X509KeyUsageFlags.KeyEncipherment); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.NonRepudiation) == X509KeyUsageFlags.NonRepudiation); + + // enhanced key usage + X509EnhancedKeyUsageExtension enhancedKeyUsage = X509Extensions.FindExtension(cert); + Assert.NotNull(enhancedKeyUsage); + TestContext.Out.WriteLine(enhancedKeyUsage.Format(true)); + Assert.True(enhancedKeyUsage.Critical); + + // test for authority key + X509AuthorityKeyIdentifierExtension authority = X509Extensions.FindExtension(cert); + Assert.NotNull(authority); + TestContext.Out.WriteLine(authority.Format(true)); + Assert.NotNull(authority.SerialNumber); + Assert.NotNull(authority.KeyIdentifier); + Assert.NotNull(authority.Issuer); + if (issuerCert == null) + { + Assert.AreEqual(cert.SubjectName.RawData, authority.Issuer.RawData); + Assert.True(X509Utils.CompareDistinguishedName(cert.SubjectName.Name, authority.Issuer.Name), $"{cert.SubjectName.Name} != {authority.Issuer.Name}"); + } + else + { + Assert.AreEqual(issuerCert.SubjectName.RawData, authority.Issuer.RawData); + Assert.True(X509Utils.CompareDistinguishedName(issuerCert.SubjectName.Name, authority.Issuer.Name), $"{cert.SubjectName.Name} != {authority.Issuer.Name}"); + } + + // verify authority key in signed cert + X509SubjectKeyIdentifierExtension subjectKeyId = X509Extensions.FindExtension(cert); + TestContext.Out.WriteLine(subjectKeyId.Format(true)); + if (signedCert) + { + var caCertSubjectKeyId = X509Extensions.FindExtension(issuerCert); + Assert.NotNull(caCertSubjectKeyId); + Assert.AreEqual(caCertSubjectKeyId.SubjectKeyIdentifier, authority.KeyIdentifier); + } + else + { + Assert.AreEqual(subjectKeyId.SubjectKeyIdentifier, authority.KeyIdentifier); + } + Assert.AreEqual(issuerCert.GetSerialNumber(), authority.GetSerialNumber()); + Assert.AreEqual(issuerCert.SerialNumber, authority.SerialNumber); + + X509SubjectAltNameExtension subjectAlternateName = X509Extensions.FindExtension(cert); + Assert.NotNull(subjectAlternateName); + TestContext.Out.WriteLine(subjectAlternateName.Format(true)); + Assert.False(subjectAlternateName.Critical); + var domainNames = X509Utils.GetDomainsFromCertficate(cert); + foreach (var domainName in testApp.DomainNames) + { + Assert.True(domainNames.Contains(domainName, StringComparer.OrdinalIgnoreCase)); + } + Assert.True(subjectAlternateName.Uris.Count == 1); + var applicationUri = X509Utils.GetApplicationUriFromCertificate(cert); + TestContext.Out.WriteLine("ApplicationUri: "); + TestContext.Out.WriteLine(applicationUri); + Assert.AreEqual(testApp.ApplicationUri, applicationUri); + } + + public static void VerifyCACert(X509Certificate2 cert, string subject, int pathLengthConstraint) + { + TestContext.Out.WriteLine($"{nameof(VerifyCACert)}:"); + + Assert.NotNull(cert); + TestContext.Out.WriteLine(cert); + Assert.False(cert.HasPrivateKey); + Assert.True(X509Utils.CompareDistinguishedName(subject, cert.Subject)); + Assert.True(X509Utils.CompareDistinguishedName(subject, cert.Issuer)); + + // test basic constraints + var constraints = X509Extensions.FindExtension(cert); + Assert.NotNull(constraints); + TestContext.Out.WriteLine(constraints.Format(true)); + Assert.True(constraints.Critical); + Assert.True(constraints.CertificateAuthority); + if (pathLengthConstraint < 0) + { + Assert.False(constraints.HasPathLengthConstraint); + } + else + { + Assert.True(constraints.HasPathLengthConstraint); + Assert.AreEqual(pathLengthConstraint, constraints.PathLengthConstraint); + } + + // key usage + var keyUsage = X509Extensions.FindExtension(cert); + Assert.NotNull(keyUsage); + TestContext.Out.WriteLine(keyUsage.Format(true)); + Assert.True(keyUsage.Critical); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.CrlSign) == X509KeyUsageFlags.CrlSign); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DataEncipherment) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DecipherOnly) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DigitalSignature) == X509KeyUsageFlags.DigitalSignature); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.EncipherOnly) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyAgreement) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyCertSign) == X509KeyUsageFlags.KeyCertSign); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyEncipherment) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.NonRepudiation) == 0); + + // enhanced key usage + X509EnhancedKeyUsageExtension enhancedKeyUsage = X509Extensions.FindExtension(cert); + Assert.Null(enhancedKeyUsage); + + // test for authority key + X509AuthorityKeyIdentifierExtension authority = X509Extensions.FindExtension(cert); + Assert.NotNull(authority); + TestContext.Out.WriteLine(authority.Format(true)); + Assert.NotNull(authority.SerialNumber); + Assert.NotNull(authority.GetSerialNumber()); + Assert.NotNull(authority.KeyIdentifier); + Assert.NotNull(authority.Issuer); + Assert.NotNull(authority.ToString()); + Assert.AreEqual(authority.SerialNumber, Utils.ToHexString(authority.GetSerialNumber(), true)); + + // verify authority key in signed cert + X509SubjectKeyIdentifierExtension subjectKeyId = X509Extensions.FindExtension(cert); + TestContext.Out.WriteLine(subjectKeyId.Format(true)); + Assert.AreEqual(subjectKeyId.SubjectKeyIdentifier, authority.KeyIdentifier); + Assert.AreEqual(cert.SerialNumber, authority.SerialNumber); + Assert.AreEqual(cert.GetSerialNumber(), authority.GetSerialNumber()); + + X509SubjectAltNameExtension subjectAlternateName = X509Extensions.FindExtension(cert); + Assert.Null(subjectAlternateName); + } + #endregion + + #region Private Fields + private ConcurrentDictionary m_rootCACertificate; + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateStoreTest.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateStoreTest.cs new file mode 100644 index 00000000..332548b0 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateStoreTest.cs @@ -0,0 +1,225 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; +using NUnit.Framework; + +namespace Opc.Ua.Core.Tests.Security.Certificates +{ + /// + /// Tests for the CertificateFactory class. + /// + [TestFixture, Category("CertificateStore")] + [SetCulture("en-us")] + public class CertificateStoreTest + { + #region DataPointSources + public const string X509StoreSubject = "CN=Opc.Ua.Core.Tests, O=OPC Foundation, OU=X509Store, C=US"; + + [DatapointSource] + public string[] CertStores = GetCertStores(); + #endregion + + #region Test Setup + /// + /// Clean up the test cert store folder. + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + foreach (var certStore in CertStores) + { + using (var x509Store = new X509CertificateStore()) + { + x509Store.Open(certStore); + var collection = x509Store.Enumerate().Result; + foreach (var cert in collection) + { + if (X509Utils.CompareDistinguishedName(X509StoreSubject, cert.Subject)) + { + x509Store.Delete(cert.Thumbprint).Wait(); + } + } + } + } + } + #endregion + + #region Test Methods + /// + /// Verify new app certificate is stored in X509Store with private key. + /// + [Theory] + public async Task VerifyAppCertX509Store(string storePath) + { + var appCertificate = GetTestCert(); + Assert.NotNull(appCertificate); + Assert.True(appCertificate.HasPrivateKey); + appCertificate.AddToStore( + CertificateStoreType.X509Store, + storePath + ); + using (var publicKey = new X509Certificate2(appCertificate.RawData)) + { + Assert.NotNull(publicKey); + Assert.False(publicKey.HasPrivateKey); + + var id = new CertificateIdentifier() { + Thumbprint = publicKey.Thumbprint, + StorePath = storePath, + StoreType = CertificateStoreType.X509Store + }; + var privateKey = await id.LoadPrivateKey(null); + Assert.NotNull(privateKey); + Assert.True(privateKey.HasPrivateKey); + + X509Utils.VerifyRSAKeyPair(publicKey, privateKey, true); + + using (var x509Store = new X509CertificateStore()) + { + x509Store.Open(storePath); + await x509Store.Delete(publicKey.Thumbprint); + } + } + } + + /// + /// Verify new app certificate is stored in Directory Store + /// with password for private key (PFX). + /// + [Test] + public async Task VerifyAppCertDirectoryStore() + { + var appCertificate = GetTestCert(); + Assert.NotNull(appCertificate); + Assert.True(appCertificate.HasPrivateKey); + + string password = Guid.NewGuid().ToString(); + + // pki directory root for app cert + var pkiRoot = Path.GetTempPath() + Path.GetRandomFileName() + Path.DirectorySeparatorChar; + var storePath = pkiRoot + "own"; + var storeType = CertificateStoreType.Directory; + appCertificate.AddToStore( + storeType, storePath, password + ); + + using (var publicKey = new X509Certificate2(appCertificate.RawData)) + { + Assert.NotNull(publicKey); + Assert.False(publicKey.HasPrivateKey); + + var id = new CertificateIdentifier() { + Thumbprint = publicKey.Thumbprint, + StorePath = storePath, + StoreType = storeType + }; + + { + // check no password fails to load + var nullKey = await id.LoadPrivateKey(null); + Assert.IsNull(nullKey); + } + + { + // check invalid password fails to load + var nullKey = await id.LoadPrivateKey("123"); + Assert.IsNull(nullKey); + } + + { + // check invalid password fails to load + var nullKey = await id.LoadPrivateKeyEx(new CertificatePasswordProvider("123")); + Assert.IsNull(nullKey); + } + + var privateKey = await id.LoadPrivateKeyEx(new CertificatePasswordProvider(password)); + + Assert.NotNull(privateKey); + Assert.True(privateKey.HasPrivateKey); + + X509Utils.VerifyRSAKeyPair(publicKey, privateKey, true); + + using (ICertificateStore store = Opc.Ua.CertificateStoreIdentifier.CreateStore(storeType)) + { + store.Open(storePath); + await store.Delete(publicKey.Thumbprint); + } + } + } + + /// + /// Verify that old invalid cert stores throw. + /// + [Test] + public void VerifyInvalidAppCertX509Store() + { + var appCertificate = GetTestCert(); + _ = Assert.Throws( + () => appCertificate.AddToStore( + CertificateStoreType.X509Store, + "User\\UA_MachineDefault")); + _ = Assert.Throws( + () => appCertificate.AddToStore( + CertificateStoreType.X509Store, + "System\\UA_MachineDefault")); + } + #endregion + + #region Private Methods + private X509Certificate2 GetTestCert() + { + return m_testCertificate ?? + (m_testCertificate = CertificateFactory.CreateCertificate(X509StoreSubject).CreateForRSA()); + } + + private static string[] GetCertStores() + { + var result = new List(); + result.Add("CurrentUser\\My"); + if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + result.Add("CurrentUser\\UA_MachineDefault"); + } + return result.ToArray(); + } + #endregion + + #region Private Fields + X509Certificate2 m_testCertificate; + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateValidatorTest.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateValidatorTest.cs new file mode 100644 index 00000000..1fde214d --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/CertificateValidatorTest.cs @@ -0,0 +1,1190 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.ComponentModel.DataAnnotations; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using NUnit.Framework; +using Opc.Ua.Security.Certificates; +#if NETCOREAPP2_1 +using X509SignatureGenerator = Opc.Ua.Security.Certificates.X509SignatureGenerator; +#endif + +namespace Opc.Ua.Core.Tests.Security.Certificates +{ + /// + /// Tests for the CertificateValidator class. + /// + [TestFixture, Category("CertificateValidator")] + [Parallelizable] + [SetCulture("en-us")] + public class CertificateValidatorTest + { + + #region Test Setup + public const string RootCASubject = "CN=Root CA Test Cert"; + + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected void OneTimeSetUp() + { + // set max RSA key size and max SHA-2 hash size + ushort keySize = 4096; + ushort hashSize = 512; + + // good applications test set + var appTestDataGenerator = new ApplicationTestDataGenerator(1); + m_goodApplicationTestSet = appTestDataGenerator.ApplicationTestSet(kGoodApplicationsTestCount); + + // create all certs and CRL + m_caChain = new X509Certificate2[kCaChainCount]; + m_caDupeChain = new X509Certificate2[kCaChainCount]; + m_crlChain = new X509CRL[kCaChainCount]; + m_crlDupeChain = new X509CRL[kCaChainCount]; + m_crlRevokedChain = new X509CRL[kCaChainCount]; + m_appCerts = new X509Certificate2Collection(); + m_appSelfSignedCerts = new X509Certificate2Collection(); + + DateTime rootCABaseTime = DateTime.UtcNow; + rootCABaseTime = new DateTime(rootCABaseTime.Year - 1, 1, 1); + var rootCert = CertificateFactory.CreateCertificate(RootCASubject) + .SetNotBefore(rootCABaseTime) + .SetLifeTime(25 * 12) + .SetCAConstraint() + .SetHashAlgorithm(X509Utils.GetRSAHashAlgorithmName(hashSize)) + .SetRSAKeySize(keySize) + .CreateForRSA(); + + m_caChain[0] = rootCert; + m_crlChain[0] = CertificateFactory.RevokeCertificate(rootCert, null, null); + + // to save time, the dupe chain uses just the default key size/hash + m_caDupeChain[0] = CertificateFactory.CreateCertificate(RootCASubject) + .SetNotBefore(rootCABaseTime) + .SetLifeTime(25 * 12) + .SetCAConstraint() + .CreateForRSA(); + + m_crlDupeChain[0] = CertificateFactory.RevokeCertificate(m_caDupeChain[0], null, null); + m_crlRevokedChain[0] = null; + + var signingCert = rootCert; + DateTime subCABaseTime = DateTime.UtcNow; + subCABaseTime = new DateTime(subCABaseTime.Year, subCABaseTime.Month, subCABaseTime.Day, 0, 0, 0, DateTimeKind.Utc); + for (int i = 1; i < kCaChainCount; i++) + { + if (keySize > 2048) { keySize -= 1024; } + if (hashSize > 256) { hashSize -= 128; } + var subject = $"CN=Sub CA {i} Test Cert"; + var subCACert = CertificateFactory.CreateCertificate(subject) + .SetNotBefore(subCABaseTime) + .SetLifeTime(5 * 12) + .SetHashAlgorithm(X509Utils.GetRSAHashAlgorithmName(hashSize)) + .SetCAConstraint(kCaChainCount - 1 - i) + .SetIssuer(signingCert) + .SetRSAKeySize(keySize) + .CreateForRSA(); + m_caChain[i] = subCACert; + m_crlChain[i] = CertificateFactory.RevokeCertificate(subCACert, null, null, subCABaseTime, subCABaseTime + TimeSpan.FromDays(10)); + var subCADupeCert = CertificateFactory.CreateCertificate(subject) + .SetNotBefore(subCABaseTime) + .SetLifeTime(5 * 12) + .SetCAConstraint(kCaChainCount - 1 - i) + .SetIssuer(signingCert) + .CreateForRSA(); + m_caDupeChain[i] = subCADupeCert; + m_crlDupeChain[i] = CertificateFactory.RevokeCertificate(subCADupeCert, null, null, subCABaseTime, subCABaseTime + TimeSpan.FromDays(10)); + m_crlRevokedChain[i] = null; + signingCert = subCACert; + } + + // create a CRL with a revoked Sub CA + for (int i = 0; i < kCaChainCount - 1; i++) + { + m_crlRevokedChain[i] = CertificateFactory.RevokeCertificate( + m_caChain[i], + new List() { m_crlChain[i] }, + new X509Certificate2Collection { m_caChain[i + 1] }); + } + + // create self signed app certs + foreach (var app in m_goodApplicationTestSet) + { + var subject = app.Subject; + var appCert = CertificateFactory.CreateCertificate( + app.ApplicationUri, + app.ApplicationName, + subject, + app.DomainNames) + .CreateForRSA(); + m_appSelfSignedCerts.Add(appCert); + } + + // create signed app certs + foreach (var app in m_goodApplicationTestSet) + { + var subject = app.Subject; + var appCert = CertificateFactory.CreateCertificate( + app.ApplicationUri, + app.ApplicationName, + subject, + app.DomainNames) + .SetIssuer(signingCert) + .CreateForRSA(); + app.Certificate = appCert.RawData; + m_appCerts.Add(appCert); + } + + // create a CRL with all apps revoked + m_crlRevokedChain[kCaChainCount - 1] = CertificateFactory.RevokeCertificate( + m_caChain[kCaChainCount - 1], + new List() { m_crlChain[kCaChainCount - 1] }, + m_appCerts); + } + + /// + /// Clean up the Test PKI folder. + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + + [TearDown] + protected void TearDown() + { + } + #endregion + + #region Test Methods + /// + /// Verify self signed app certs are not trusted. + /// + [Test] + public void VerifySelfSignedAppCertsNotTrusted() + { + // verify cert with issuer chain + using (var validator = TemporaryCertValidator.Create(true)) + { + var certValidator = validator.Update(); + foreach (var cert in m_appSelfSignedCerts) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(cert)); }); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, serviceResultException.StatusCode, serviceResultException.Message); + } + Assert.AreEqual(m_appSelfSignedCerts.Count, validator.RejectedStore.Enumerate().GetAwaiter().GetResult().Count); + + // add auto approver + var approver = new CertValidationApprover(new StatusCode[] { StatusCodes.BadCertificateUntrusted }); + certValidator.CertificateValidation += approver.OnCertificateValidation; + foreach (var cert in m_appSelfSignedCerts) + { + using (var publicKey = new X509Certificate2(cert)) + { + certValidator.Validate(publicKey); + } + } + // count certs written to rejected store + Assert.AreEqual(m_appSelfSignedCerts.Count, approver.AcceptedCount); + } + } + + /// + /// Verify self signed app certs are not trusted with other CA chains + /// + [Test] + public async Task VerifySelfSignedAppCertsNotTrustedWithCA() + { + using (var validator = TemporaryCertValidator.Create()) + { + // add random issuer certs + for (int i = 0; i < kCaChainCount; i++) + { + if (i == kCaChainCount / 2) + { + await validator.TrustedStore.Add(m_caChain[i]).ConfigureAwait(false); + validator.TrustedStore.AddCRL(m_crlChain[i]); + } + else + { + await validator.IssuerStore.Add(m_caChain[i]).ConfigureAwait(false); + validator.IssuerStore.AddCRL(m_crlChain[i]); + } + } + + var certValidator = validator.Update(); + foreach (var cert in m_appSelfSignedCerts) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(cert)); }); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + + /// + /// Verify self signed app certs throw by default. + /// + [Test] + public async Task VerifySelfSignedAppCertsThrow() + { + // verify cert with issuer chain + { + // add all certs to issuer store, make sure validation fails. + using (var validator = TemporaryCertValidator.Create(true)) + { + foreach (var cert in m_appSelfSignedCerts) + { + await validator.IssuerStore.Add(cert).ConfigureAwait(false); + } + Assert.AreEqual(m_appSelfSignedCerts.Count, validator.IssuerStore.Enumerate().Result.Count); + var certValidator = validator.Update(); + foreach (var cert in m_appSelfSignedCerts) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(cert)); }); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, serviceResultException.StatusCode, serviceResultException.Message); + } + Assert.AreEqual(m_appSelfSignedCerts.Count, validator.RejectedStore.Enumerate().Result.Count); + } + } + } + + /// + /// Verify self signed app certs are trusted. + /// + [Test] + public async Task VerifySelfSignedAppCertsTrusted() + { + // add all certs to trusted store + using (var validator = TemporaryCertValidator.Create()) + { + + foreach (var cert in m_appSelfSignedCerts) + { + await validator.TrustedStore.Add(cert).ConfigureAwait(false); + } + Assert.AreEqual(m_appSelfSignedCerts.Count, validator.TrustedStore.Enumerate().Result.Count); + var certValidator = validator.Update(); + foreach (var cert in m_appSelfSignedCerts) + { + certValidator.Validate(new X509Certificate2(cert)); + } + } + } + + /// + /// Verify self signed app certs validate if added to all stores. + /// + [Test] + public async Task VerifySelfSignedAppCertsAllStores() + { + // add all certs to trusted and issuer store + using (var validator = TemporaryCertValidator.Create()) + { + foreach (var cert in m_appSelfSignedCerts) + { + await validator.TrustedStore.Add(cert).ConfigureAwait(false); + await validator.IssuerStore.Add(cert); + } + var certValidator = validator.Update(); + foreach (var cert in m_appSelfSignedCerts) + { + certValidator.Validate(new X509Certificate2(cert)); + } + } + } + + /// + /// Verify signed app certs validate. One of all trusted. + /// + [Test] + public async Task VerifyAppChainsOneTrusted() + { + var stopWatch = new Stopwatch(); + stopWatch.Start(); + // verify cert with issuer chain + for (int v = 0; v < kCaChainCount; v++) + { + long start = stopWatch.ElapsedMilliseconds; + TestContext.Out.WriteLine($"Chain Number {v}, Total Elapsed: {start}"); + using (var validator = TemporaryCertValidator.Create()) + { + TestContext.Out.WriteLine($"Cleanup: {stopWatch.ElapsedMilliseconds - start}"); + for (int i = 0; i < kCaChainCount; i++) + { + ICertificateStore store = i == v ? validator.TrustedStore : validator.IssuerStore; + await store.Add(m_caChain[i]).ConfigureAwait(false); + store.AddCRL(m_crlChain[i]); + } + TestContext.Out.WriteLine($"AddChains: {stopWatch.ElapsedMilliseconds - start}"); + var certValidator = validator.Update(); + TestContext.Out.WriteLine($"InitValidator: {stopWatch.ElapsedMilliseconds - start}"); + foreach (var app in m_goodApplicationTestSet) + { + certValidator.Validate(new X509Certificate2(app.Certificate)); + } + TestContext.Out.WriteLine($"Validation: {stopWatch.ElapsedMilliseconds - start}"); + } + } + TestContext.Out.WriteLine($"Total: {stopWatch.ElapsedMilliseconds}"); + } + + /// + /// Verify signed app certs validate. All but one in trusted. + /// + [Test] + public async Task VerifyAppChainsAllButOneTrusted() + { + // verify cert with issuer chain + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + ICertificateStore store = i != v ? validator.TrustedStore : validator.IssuerStore; + await store.Add(m_caChain[i]); + store.AddCRL(m_crlChain[i]); + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + certValidator.Validate(new X509Certificate2(app.Certificate)); + } + } + } + } + + /// + /// Verify app certs with incomplete chain throw. + /// + [Test] + public async Task VerifyAppChainsIncompleteChain() + { + // verify cert with issuer chain + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + if (i != v) + { + await validator.TrustedStore.Add(m_caChain[i]); + validator.TrustedStore.AddCRL(m_crlChain[i]); + } + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateChainIncomplete, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify app certs do not validate with invalid chain. + /// + [Test] + public async Task VerifyAppChainsInvalidChain() + { + // verify cert with issuer chain + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + if (i != v) + { + await validator.TrustedStore.Add(m_caChain[i]); + validator.TrustedStore.AddCRL(m_crlChain[i]); + } + else + { + await validator.TrustedStore.Add(m_caDupeChain[i]); + validator.TrustedStore.AddCRL(m_crlDupeChain[i]); + } + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateChainIncomplete, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify app certs with good and invalid chain + /// + [Test] + public async Task VerifyAppChainsWithGoodAndInvalidChain() + { + // verify cert with issuer chain + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + ICertificateStore store = i == v ? validator.TrustedStore : validator.IssuerStore; + await store.Add(m_caChain[i]); + store.AddCRL(m_crlChain[i]); + await store.Add(m_caDupeChain[i]); + store.AddCRL(m_crlDupeChain[i]); + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + certValidator.Validate(new X509Certificate2(app.Certificate)); + } + } + } + } + + /// + /// Verify cert is revoked with CRL in trusted store + /// + [Test] + public async Task VerifyRevokedTrustedStoreAppChains() + { + // verify cert is revoked with CRL in trusted store + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + if (i == v) + { + await validator.TrustedStore.Add(m_caChain[i]); + validator.TrustedStore.AddCRL(m_crlRevokedChain[i]); + } + else + { + await validator.IssuerStore.Add(m_caChain[i]); + validator.IssuerStore.AddCRL(m_crlChain[i]); + } + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateRevoked, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify cert is revoked with CRL in issuer store + /// + [Test] + public async Task VerifyRevokedIssuerStoreAppChains() + { + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + if (i == v) + { + await validator.IssuerStore.Add(m_caChain[i]); + validator.IssuerStore.AddCRL(m_crlRevokedChain[i]); + } + else + { + await validator.TrustedStore.Add(m_caChain[i]); + validator.TrustedStore.AddCRL(m_crlChain[i]); + } + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateRevoked, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify trusted app cert is revoked with CRL in issuer store + /// + [Test] + public async Task VerifyRevokedIssuerStoreTrustedAppChains() + { + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + if (i == v) + { + await validator.IssuerStore.Add(m_caChain[i]); + validator.IssuerStore.AddCRL(m_crlRevokedChain[i]); + } + else + { + await validator.IssuerStore.Add(m_caChain[i]); + validator.IssuerStore.AddCRL(m_crlChain[i]); + } + } + foreach (var app in m_goodApplicationTestSet) + { + await validator.TrustedStore.Add(new X509Certificate2(app.Certificate)); + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateRevoked, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify cert is revoked with CRL in trusted store + /// + [Test] + public async Task VerifyRevokedTrustedStoreNotTrustedAppChains() + { + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + for (int i = 0; i < kCaChainCount; i++) + { + await validator.TrustedStore.Add(m_caChain[i]); + if (i == v) + { + validator.TrustedStore.AddCRL(m_crlRevokedChain[i]); + } + else + { + validator.TrustedStore.AddCRL(m_crlChain[i]); + } + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateRevoked, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify trusted cert is revoked with CRL in trusted store. + /// + [Test] + public async Task VerifyRevokedTrustedStoreTrustedAppChains() + { + for (int v = 0; v < kCaChainCount; v++) + { + using (var validator = TemporaryCertValidator.Create()) + { + + for (int i = 0; i < kCaChainCount; i++) + { + await validator.TrustedStore.Add(m_caChain[i]); + if (i == v) + { + validator.TrustedStore.AddCRL(m_crlRevokedChain[i]); + } + else + { + validator.TrustedStore.AddCRL(m_crlChain[i]); + } + } + foreach (var app in m_goodApplicationTestSet) + { + await validator.TrustedStore.Add(new X509Certificate2(app.Certificate)); + } + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateRevoked, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify trusted app certs with issuer chain. + /// + [Test] + public async Task VerifyIssuerChainIncompleteTrustedAppCerts() + { + using (var validator = TemporaryCertValidator.Create()) + { + + // issuer chain + for (int i = 0; i < kCaChainCount; i++) + { + await validator.IssuerStore.Add(m_caChain[i]); + validator.IssuerStore.AddCRL(m_crlChain[i]); + } + + // all app certs are trusted + foreach (var app in m_goodApplicationTestSet) + { + await validator.TrustedStore.Add(new X509Certificate2(app.Certificate)); + } + + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + certValidator.Validate(new X509Certificate2(app.Certificate)); + } + } + } + + /// + /// Verify trusted app certs with incomplete issuer chain. + /// + [Test] + public async Task VerifyIssuerChainTrustedAppCerts() + { + for (int v = 0; v < kCaChainCount; v++) + { + TestContext.Out.WriteLine("Chain cert {0} not in issuer store.", v); + using (var validator = TemporaryCertValidator.Create()) + { + // issuer chain + for (int i = 0; i < kCaChainCount; i++) + { + if (i != v) + { + await validator.IssuerStore.Add(m_caChain[i]); + validator.IssuerStore.AddCRL(m_crlChain[i]); + } + } + + // all app certs are trusted + foreach (var app in m_goodApplicationTestSet) + { + await validator.TrustedStore.Add(new X509Certificate2(app.Certificate)); + } + + var certValidator = validator.Update(); + foreach (var app in m_goodApplicationTestSet) + { + var serviceResultException = Assert.Throws(() => { certValidator.Validate(new X509Certificate2(app.Certificate)); }); + Assert.AreEqual(StatusCodes.BadCertificateChainIncomplete, serviceResultException.StatusCode, serviceResultException.Message); + } + } + } + } + + /// + /// Verify the PEM Writer, no password + /// + [Test] + public void VerifyPemWriterPrivateKeys() + { + // all app certs are trusted + foreach (var appCert in m_appSelfSignedCerts) + { + var pemDataBlob = PEMWriter.ExportPrivateKeyAsPEM(appCert); + var pemString = Encoding.UTF8.GetString(pemDataBlob); + TestContext.Out.WriteLine(pemString); + CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert.RawData), pemDataBlob); + // note: password is ignored + var newCert = CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert.RawData), pemDataBlob, "password"); + X509Utils.VerifyRSAKeyPair(newCert, newCert, true); + } + } + + /// + /// Verify the PEM Writer, no password. + /// + [Test] + public void VerifyPemWriterPublicKeys() + { + // all app certs are trusted + foreach (var appCert in m_appSelfSignedCerts) + { + var pemDataBlob = PEMWriter.ExportCertificateAsPEM(appCert); + var pemString = Encoding.UTF8.GetString(pemDataBlob); + TestContext.Out.WriteLine(pemString); +#if NETCOREAPP3_1 + var exception = Assert.Throws(() => { CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert), pemDataBlob); }); +#endif + } + } + +#if NETCOREAPP3_1 + /// + /// Verify the PEM Writer, no password. + /// + [Test, Order(530)] + public void VerifyPemWriterRSAPrivateKeys() + { + // all app certs are trusted + foreach (var appCert in m_appSelfSignedCerts) + { + var pemDataBlob = PEMWriter.ExportRSAPrivateKeyAsPEM(appCert); + var pemString = Encoding.UTF8.GetString(pemDataBlob); + TestContext.Out.WriteLine(pemString); + var cert = CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert.RawData), pemDataBlob); + Assert.NotNull(cert); + // note: password is ignored + var newCert = CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert.RawData), pemDataBlob, "password"); + X509Utils.VerifyRSAKeyPair(newCert, newCert, true); + } + } + + /// + /// Verify the PEM Writer, with password + /// + [Test] + public void VerifyPemWriterPasswordPrivateKeys() + { + // all app certs are trusted + foreach (var appCert in m_appSelfSignedCerts) + { + var password = Guid.NewGuid().ToString().Substring(0, 8); + TestContext.Out.WriteLine("Password: {0}", password); + var pemDataBlob = PEMWriter.ExportPrivateKeyAsPEM(appCert, password); + var pemString = Encoding.UTF8.GetString(pemDataBlob); + TestContext.Out.WriteLine(pemString); + var newCert = CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert), pemDataBlob, password); + var exception = Assert.Throws(() => { CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(appCert), pemDataBlob); }); + X509Utils.VerifyRSAKeyPair(newCert, newCert, true); + } + } +#endif + + /// + /// Verify self signed certs, not yet valid. + /// + [Theory] + public async Task VerifyNotBeforeInvalid(bool trusted) + { + var applicationName = "App Test Cert"; + var cert = CertificateFactory.CreateCertificate( + null, applicationName, null, null) + .SetNotBefore(DateTime.Today.AddDays(14)) + .CreateForRSA(); + Assert.NotNull(cert); + cert = new X509Certificate2(cert); + Assert.NotNull(cert); + Assert.True(X509Utils.CompareDistinguishedName("CN=" + applicationName, cert.Subject)); + var validator = TemporaryCertValidator.Create(); + if (!trusted) + { + await validator.IssuerStore.Add(cert); + } + else + { + await validator.TrustedStore.Add(cert); + } + var certValidator = validator.Update(); + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + if (!trusted) + { + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, serviceResultException.StatusCode, serviceResultException.Message); + // check the chained service result + ServiceResult innerResult = serviceResultException.InnerResult.InnerResult; + Assert.NotNull(innerResult); + Assert.AreEqual(StatusCodes.BadCertificateTimeInvalid, + innerResult.StatusCode.Code, + innerResult.LocalizedText.Text); + } + else + { + Assert.AreEqual(StatusCodes.BadCertificateTimeInvalid, serviceResultException.StatusCode, serviceResultException.Message); + } + } + + /// + /// Verify self signed certs, not after invalid. + /// + [Theory] + public async Task VerifyNotAfterInvalid(bool trusted) + { + var applicationName = "App Test Cert"; + var cert = CertificateFactory.CreateCertificate( + null, applicationName, null, null) + .SetNotBefore(new DateTime(2010, 1, 1)) + .SetLifeTime(12) + .CreateForRSA(); + TestContext.Out.WriteLine($"{cert}:"); + Assert.NotNull(cert); + cert = new X509Certificate2(cert); + Assert.NotNull(cert); + Assert.True(X509Utils.CompareDistinguishedName("CN=" + applicationName, cert.Subject)); + var validator = TemporaryCertValidator.Create(); + if (!trusted) + { + await validator.IssuerStore.Add(cert); + } + else + { + await validator.TrustedStore.Add(cert); + } + var certValidator = validator.Update(); + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + if (!trusted) + { + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, serviceResultException.StatusCode, serviceResultException.Message); + } + else + { + Assert.AreEqual(StatusCodes.BadCertificateTimeInvalid, serviceResultException.StatusCode, serviceResultException.Message); + } + } + + /// + /// Verify signed cert, not after invalid and chain missing. + /// + [Theory] + public async Task VerifySignedNotAfterInvalid(bool trusted) + { + var subject = "CN=Signed App Test Cert"; + var cert = CertificateFactory.CreateCertificate( + null, null, subject, null) + .SetNotBefore(DateTime.Today.AddDays(30)) + .SetLifeTime(12) + .SetIssuer(m_caChain[0]) + .CreateForRSA(); + TestContext.Out.WriteLine($"{cert}:"); + Assert.NotNull(cert); + cert = new X509Certificate2(cert); + Assert.NotNull(cert); + Assert.True(X509Utils.CompareDistinguishedName(subject, cert.Subject)); + var validator = TemporaryCertValidator.Create(); + if (!trusted) + { + await validator.IssuerStore.Add(cert); + } + else + { + await validator.TrustedStore.Add(cert); + } + var certValidator = validator.Update(); + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + Assert.AreEqual(StatusCodes.BadCertificateChainIncomplete, serviceResultException.StatusCode, serviceResultException.Message); + // approver tries to suppress error which is not suppressable + var approver = new CertValidationApprover(new StatusCode[] { + StatusCodes.BadCertificateTimeInvalid, + StatusCodes.BadCertificateChainIncomplete + }); + certValidator.CertificateValidation += approver.OnCertificateValidation; + Assert.AreEqual(StatusCodes.BadCertificateChainIncomplete, serviceResultException.StatusCode, serviceResultException.Message); + certValidator.CertificateValidation -= approver.OnCertificateValidation; + } + + /// + /// Validate various null parameter return null exception. + /// + [Test] + public void TestNullParameters() + { + var validator = TemporaryCertValidator.Create(); + var certValidator = validator.Update(); + Assert.Throws(() => { certValidator.Update((SecurityConfiguration)null).GetAwaiter().GetResult(); }); + Assert.Throws(() => { certValidator.Update((ApplicationConfiguration)null).GetAwaiter().GetResult(); }); + } + + /// + /// Validate the event handlers can be used. + /// + [Test] + public void TestEventHandler() + { + var validator = TemporaryCertValidator.Create(); + var certValidator = validator.Update(); + certValidator.CertificateUpdate += OnCertificateUpdate; + certValidator.CertificateValidation += OnCertificateValidation; + certValidator.CertificateUpdate -= OnCertificateUpdate; + certValidator.CertificateValidation -= OnCertificateValidation; + } + + /// + /// Validate Sha1 signed certificates cause a policy check failed. + /// + [Theory] + public async Task TestSHA1Rejected(bool trusted) + { +#if NETCOREAPP3_1 + Assert.Ignore("SHA1 is unsupported on .NET Core 3.1"); +#endif + var cert = CertificateFactory.CreateCertificate(null, null, "CN=SHA1 signed", null) + .SetHashAlgorithm(HashAlgorithmName.SHA1) + .CreateForRSA(); + var validator = TemporaryCertValidator.Create(); + if (trusted) + { + await validator.TrustedStore.Add(cert).ConfigureAwait(false); + } + var certValidator = validator.Update(); + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + Assert.AreEqual(StatusCodes.BadCertificatePolicyCheckFailed, serviceResultException.StatusCode, serviceResultException.Message); + Assert.NotNull(serviceResultException.InnerResult); + ServiceResult innerResult = serviceResultException.InnerResult.InnerResult; + if (!trusted) + { + Assert.NotNull(innerResult); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, + innerResult.StatusCode.Code, + innerResult.LocalizedText.Text); + } + else + { + Assert.Null(innerResult); + } + } + + /// + /// Validate invalid key usage flags cause use not allowed. + /// + [Theory] + public async Task TestInvalidKeyUsage(bool trusted) + { + var subject = "CN=Invalid Signature Cert"; + // self signed but key usage is not valid for app cert + var cert = CertificateFactory.CreateCertificate(null, null, subject, null) + .SetCAConstraint(0) + .CreateForRSA(); + + Assert.True(X509Utils.VerifySelfSigned(cert)); + var validator = TemporaryCertValidator.Create(); + if (trusted) + { + await validator.TrustedStore.Add(cert).ConfigureAwait(false); + } + var certValidator = validator.Update(); + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + Assert.AreEqual(StatusCodes.BadCertificateUseNotAllowed, serviceResultException.StatusCode, serviceResultException.Message); + Assert.NotNull(serviceResultException.InnerResult); + var innerResult = serviceResultException.InnerResult.InnerResult; + if (trusted) + { + Assert.Null(innerResult); + } + else + { + Assert.NotNull(innerResult); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, innerResult.StatusCode.Code, innerResult.LocalizedText.Text); + } + } + + /// + /// Validate certificates with invalid signature are returned as invalid. + /// + [Theory] + public async Task TestInvalidSignature(bool ca, bool trusted) + { + var subject = "CN=Invalid Signature Cert"; + var certBase = CertificateFactory.CreateCertificate(null, null, subject, null) + .CreateForRSA(); + + var generator = X509SignatureGenerator.CreateForRSA(m_caChain[0].GetRSAPrivateKey(), RSASignaturePadding.Pkcs1); + // generate a self signed cert with invalid signature + var builder = CertificateFactory.CreateCertificate(null, null, subject, null); + if (ca) + { + // set the CA flag changes the key usage to sign only + builder.SetCAConstraint(0); + } + var cert = builder.SetIssuer(certBase) + .SetRSAPublicKey(certBase.GetRSAPublicKey()) + .CreateForRSA(generator); + + Assert.False(X509Utils.VerifySelfSigned(cert)); + var validator = TemporaryCertValidator.Create(); + if (trusted) + { + await validator.TrustedStore.Add(cert).ConfigureAwait(false); + } + var certValidator = validator.Update(); + var approver = new CertValidationApprover(new StatusCode[] { StatusCodes.BadCertificateUntrusted }); + certValidator.CertificateValidation += approver.OnCertificateValidation; + ServiceResult innerResult; + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + if (ca) + { + // The CA version fails for the key usage flags + Assert.AreEqual(StatusCodes.BadCertificateUseNotAllowed, serviceResultException.StatusCode, serviceResultException.Message); + Assert.NotNull(serviceResultException.InnerResult); + innerResult = serviceResultException.InnerResult.InnerResult; + } + else + { + innerResult = serviceResultException.InnerResult; + } + if (!trusted) + { + // for the untrusted case, the untrusted error is also reported. + Assert.NotNull(innerResult); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, + innerResult.StatusCode.Code, + innerResult.LocalizedText.Text); + innerResult = innerResult.InnerResult; + } + // However, all cert versions got an invalid signature, must fail... + Assert.NotNull(innerResult); + Assert.AreEqual(StatusCodes.BadCertificateInvalid, + innerResult.StatusCode.Code, + innerResult.LocalizedText.Text); + Assert.AreEqual(0, approver.Count); + } + + /// + /// Test if a key below min length is detected. + /// + [Theory] + public async Task TestMinimumKeyRejected(bool trusted) + { + var cert = CertificateFactory.CreateCertificate(null, null, "CN=1k Key", null) + .SetRSAKeySize(1024) + .CreateForRSA(); + var validator = TemporaryCertValidator.Create(); + if (trusted) + { + await validator.TrustedStore.Add(cert); + } + var certValidator = validator.Update(); + var serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + Assert.AreEqual(StatusCodes.BadCertificatePolicyCheckFailed, serviceResultException.StatusCode, serviceResultException.Message); + Assert.NotNull(serviceResultException.InnerResult); + ServiceResult innerResult = serviceResultException.InnerResult.InnerResult; + if (!trusted) + { + Assert.NotNull(innerResult); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, + innerResult.StatusCode.Code, + innerResult.LocalizedText.Text); + } + else + { + Assert.Null(innerResult); + } + + // approve suppression of smaller key + var approver = new CertValidationApprover(new StatusCode[] { + StatusCodes.BadCertificatePolicyCheckFailed + }); + certValidator.CertificateValidation += approver.OnCertificateValidation; + if (trusted) + { + certValidator.Validate(cert); + } + else + { + serviceResultException = Assert.Throws(() => { certValidator.Validate(cert); }); + Assert.AreEqual(StatusCodes.BadCertificateUntrusted, serviceResultException.StatusCode, serviceResultException.Message); + } + certValidator.CertificateValidation -= approver.OnCertificateValidation; + } + + /// + /// Verify the certificate validator can be assigned. + /// + [Test] + public void CertificateValidatorAssignableFromAppConfig() => Assert.DoesNotThrow(() => { + var appConfig = new ApplicationConfiguration() { + CertificateValidator = new CertificateValidator() + }; + Assert.NotNull(appConfig); + Assert.NotNull(appConfig.CertificateValidator); + }); + #endregion + + #region Private Methods + private void OnCertificateUpdate(object sender, CertificateUpdateEventArgs e) + { + } + private void OnCertificateValidation(object sender, CertificateValidationEventArgs e) + { + } + #endregion + + #region Private Fields + private const int kCaChainCount = 3; + private const int kGoodApplicationsTestCount = 3; + private IList m_goodApplicationTestSet; + private X509Certificate2[] m_caChain; + private X509Certificate2[] m_caDupeChain; + private X509CRL[] m_crlChain; + private X509CRL[] m_crlDupeChain; + private X509CRL[] m_crlRevokedChain; + private X509Certificate2Collection m_appCerts; + private X509Certificate2Collection m_appSelfSignedCerts; + #endregion + } + + /// + /// Helper to approve suppressable errors in test cases. + /// To catch cases where unsuppressable errors should not + /// call for approvals. + /// + class CertValidationApprover + { + public StatusCode[] ApprovedCodes { get; } + public int Count { get; private set; } + public int AcceptedCount { get; private set; } + public CertValidationApprover(StatusCode[] approvedCodes) + { + ApprovedCodes = approvedCodes; + AcceptedCount = Count = 0; + } + + public void OnCertificateValidation(object sender, CertificateValidationEventArgs e) + { + Count++; + if (ApprovedCodes.Contains(e.Error.StatusCode)) + { + e.Accept = true; + AcceptedCount++; + } + } + + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/TemporaryCertValidator.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/TemporaryCertValidator.cs new file mode 100644 index 00000000..4caa0b1f --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/TemporaryCertValidator.cs @@ -0,0 +1,157 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Threading; + +namespace Opc.Ua.Core.Tests +{ + /// + /// Test helper to create a temporary directory cert store. + /// + public class TemporaryCertValidator : IDisposable + { + /// + /// Create the cert store in a temp location. + /// + public static TemporaryCertValidator Create(bool rejectedStore = false) + { + return new TemporaryCertValidator(rejectedStore); + } + + /// + /// Ctor of the store, creates the random path name in a OS temp folder. + /// + private TemporaryCertValidator(bool rejectedStore) + { + // pki directory root for test runs. + m_pkiRoot = Path.GetTempPath() + Path.GetRandomFileName() + Path.DirectorySeparatorChar; + m_issuerStore = new DirectoryCertificateStore(); + m_issuerStore.Open(m_pkiRoot + "issuer"); + m_trustedStore = new DirectoryCertificateStore(); + m_trustedStore.Open(m_pkiRoot + "trusted"); + if (rejectedStore) + { + m_rejectedStore = new DirectoryCertificateStore(); + m_rejectedStore.Open(m_pkiRoot + "rejected"); + } + } + + /// + /// Clean up the temporary folder. + /// + ~TemporaryCertValidator() + { + Dispose(); + } + + /// + /// Dispose the certificates and delete folders used. + /// + public void Dispose() + { + if (Interlocked.CompareExchange(ref m_disposed, 1, 0) == 0) + { + CleanupValidatorAndStores(true); + m_issuerStore = null; + m_trustedStore = null; + m_rejectedStore = null; + var path = Utils.ReplaceSpecialFolderNames(m_pkiRoot); + if (Directory.Exists(path)) + { + Directory.Delete(path, true); + } + } + } + + /// + /// The certificate validator for the stores. + /// + public ICertificateValidator CertificateValidator => m_certificateValidator; + /// + /// The issuer store, contains certs used for chain validation. + /// + public ICertificateStore IssuerStore => m_issuerStore; + /// + /// The trusted store, used for trusted CA, Sub CA and leaf certificates. + /// + public ICertificateStore TrustedStore => m_trustedStore; + /// + /// The rejected store, used for rejected certificates. + /// + public ICertificateStore RejectedStore => m_rejectedStore; + + /// + /// Creates the validator using the issuer and trusted store. + /// + public CertificateValidator Update() + { + var certValidator = new CertificateValidator(); + var issuerTrustList = new CertificateTrustList { + StoreType = "Directory", + StorePath = m_issuerStore.Directory.FullName + }; + var trustedTrustList = new CertificateTrustList { + StoreType = "Directory", + StorePath = m_trustedStore.Directory.FullName + }; + CertificateStoreIdentifier rejectedList = null; + if (m_rejectedStore != null) + { + rejectedList = new CertificateStoreIdentifier { + StoreType = "Directory", + StorePath = m_rejectedStore.Directory.FullName + }; + } + certValidator.Update(issuerTrustList, trustedTrustList, rejectedList); + m_certificateValidator = certValidator; + return certValidator; + } + + /// + /// Clean up (delete) the content of the issuer and trusted store. + /// + public void CleanupValidatorAndStores(bool dispose = false) + { + TestUtils.CleanupTrustList(m_issuerStore, dispose); + TestUtils.CleanupTrustList(m_trustedStore, dispose); + TestUtils.CleanupTrustList(m_rejectedStore, dispose); + } + + #region Private Fields + private int m_disposed; + private CertificateValidator m_certificateValidator; + private DirectoryCertificateStore m_issuerStore; + private DirectoryCertificateStore m_trustedStore; + private DirectoryCertificateStore m_rejectedStore; + private string m_pkiRoot; + #endregion + }; +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/TestUtils.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/TestUtils.cs new file mode 100644 index 00000000..c52a6e22 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Security/Certificates/TestUtils.cs @@ -0,0 +1,63 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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/ + * ======================================================================*/ + +namespace Opc.Ua.Core.Tests +{ + /// + /// Common utilities for tests. + /// + public static class TestUtils + { + /// + /// + /// + /// + /// + public static void CleanupTrustList(ICertificateStore store, bool dispose = true) + { + if (store != null) + { + var certs = store.Enumerate().Result; + foreach (var cert in certs) + { + store.Delete(cert.Thumbprint); + } + var crls = store.EnumerateCRLs(); + foreach (var crl in crls) + { + store.DeleteCRL(crl); + } + if (dispose) + { + store.Dispose(); + } + } + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Stack/Types/WriteValueTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Stack/Types/WriteValueTests.cs new file mode 100644 index 00000000..9f3ee64a --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Stack/Types/WriteValueTests.cs @@ -0,0 +1,201 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Linq; +using NUnit.Framework; +using Opc.Ua.Test; + +namespace Opc.Ua.Core.Tests.Stack.Types +{ + /// + /// Tests for the BuiltIn Types. + /// + [TestFixture, Category("WriteValue")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class WriteValueTests + { + + #region Test Setup + [OneTimeSetUp] + protected void OneTimeSetUp() + { + } + + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + + [SetUp] + protected void SetUp() + { + + } + + [TearDown] + protected void TearDown() + { + } + #endregion + + #region Test Methods + /// + /// Test that WriteValue.Validate() accepts Matrix value when IndexRange has SubRanges assigned + /// + [Test] + [Category("WriteValue")] + public void MatrixIndexRangeValidationTest() + { + int[,] int3x3Matrix = new int[,] + { + { 1, 2, 3 }, + { 4, 5, 6 }, + { 7, 8, 9 }, + }; + + Matrix matrix = new Matrix(int3x3Matrix, BuiltInType.Int32); + + // Positive test + WriteValue writeValue = new WriteValue() { + AttributeId = Attributes.Value, + NodeId = new NodeId(4000, 8), + Value = new DataValue(new Variant(matrix)), + IndexRange = "1,1" + }; + + Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); + + // Test that Matrix value is not allowed when IndexRange is for one-dimensional array + writeValue.IndexRange = "1"; + ServiceResult validateResult = WriteValue.Validate(writeValue); + Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); + Assert.AreEqual(new StatusCode(StatusCodes.BadTypeMismatch), validateResult.StatusCode); + + // Test that Matrix value is allowed when IndexRange is not specified + writeValue.IndexRange = null; + Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); + + // Test that multidimensional IndexRange is not allowed for scalar variable + writeValue.Value = new DataValue(new Variant(1)); + writeValue.IndexRange = "1,1"; + validateResult = WriteValue.Validate(writeValue); + Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); + Assert.AreEqual(new StatusCode(StatusCodes.BadTypeMismatch), validateResult.StatusCode); + + } + + /// + /// Test that WriteValue.Validate() accepts IndexRange for string values + /// + [Test] + [Category("WriteValue")] + public void StringIndexRangeValidationTest() + { + // Positive test + WriteValue writeValue = new WriteValue() { + AttributeId = Attributes.Value, + NodeId = new NodeId(4000, 8), + Value = new DataValue(new Variant("Hello world")), + IndexRange = "0:10" + }; + + Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); + + // Test with range that does not match the length of the value + writeValue.IndexRange = "0:9"; + ServiceResult validateResult = WriteValue.Validate(writeValue); + Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); + Assert.AreEqual(new StatusCode(StatusCodes.BadIndexRangeNoData), validateResult.StatusCode); + + } + + /// + /// Test that WriteValue.Validate() accepts IndexRange for Array values + /// + [Test] + [Category("WriteValue")] + public void ArrayIndexRangeValidationTest() + { + + // Positive test + WriteValue writeValue = new WriteValue() { + AttributeId = Attributes.Value, + NodeId = new NodeId(4000, 8), + Value = new DataValue(new Variant(new int[] { 1, 2, 3, 4, 5 })), + IndexRange = "0:4" + }; + + Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); + + // Test with range that does not match the length of the array + writeValue.IndexRange = "0:5"; + ServiceResult validateResult = WriteValue.Validate(writeValue); + Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); + Assert.AreEqual(new StatusCode(StatusCodes.BadIndexRangeNoData), validateResult.StatusCode); + + } + + /// + /// Test that WriteValue.Validate() accepts String and ByteString array when IndexRange has sub ranges defined + /// + [Test] + [Category("WriteValue")] + public void ArraySubRangeIndexRangeValidationTest() + { + // Test with String array + WriteValue writeValue = new WriteValue() { + AttributeId = Attributes.Value, + NodeId = new NodeId(4000, 8), + Value = new DataValue(new Variant(new string[] { "ha" })), + IndexRange = "0,1:2" + }; + + Assert.AreEqual(BuiltInType.String, writeValue.Value.WrappedValue.TypeInfo.BuiltInType); + Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); + + // Test with ByteString array + writeValue.Value = new DataValue(new Variant(new byte[][] { new byte[] { 0x22, 0x21 } })); + Assert.AreEqual(BuiltInType.ByteString, writeValue.Value.WrappedValue.TypeInfo.BuiltInType); + Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); + + // Negative test with Int32 array + writeValue.Value = new DataValue(new Variant(new int[] { 1, 2 })); + Assert.AreEqual(BuiltInType.Int32, writeValue.Value.WrappedValue.TypeInfo.BuiltInType); + ServiceResult validateResult = WriteValue.Validate(writeValue); + Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Good"); + Assert.AreEqual(new StatusCode(StatusCodes.BadTypeMismatch), validateResult.StatusCode); + } + + } + + #endregion + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/BuiltIn/BuiltInTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/BuiltIn/BuiltInTests.cs new file mode 100644 index 00000000..244209ee --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/BuiltIn/BuiltInTests.cs @@ -0,0 +1,217 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Linq; +using NUnit.Framework; +using Opc.Ua.Test; + +namespace Opc.Ua.Core.Tests.Types.BuiltIn +{ + /// + /// Tests for the BuiltIn Types. + /// + [TestFixture, Category("BuiltIn")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class BuiltInTests + { + protected const int RandomStart = 4840; + protected const int RandomRepeats = 100; + protected RandomSource RandomSource { get; private set; } + protected DataGenerator DataGenerator { get; private set; } + + #region Test Setup + [OneTimeSetUp] + protected void OneTimeSetUp() + { + } + + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + + [SetUp] + protected void SetUp() + { + // ensure tests are reproducible, reset for every test + RandomSource = new RandomSource(RandomStart); + DataGenerator = new DataGenerator(RandomSource); + } + + [TearDown] + protected void TearDown() + { + } + + /// + /// Ensure repeated tests get different seed. + /// + protected void SetRepeatedRandomSeed() + { + int randomSeed = TestContext.CurrentContext.Random.Next() + RandomStart; + RandomSource = new RandomSource(randomSeed); + DataGenerator = new DataGenerator(RandomSource); + } + + /// + /// Ensure tests are reproducible with same seed. + /// + protected void SetRandomSeed(int randomSeed) + { + RandomSource = new RandomSource(randomSeed + RandomStart); + DataGenerator = new DataGenerator(RandomSource); + } + #endregion + + #region DataPointSources + [DatapointSource] + public static BuiltInType[] BuiltInTypes = ((BuiltInType[])Enum.GetValues(typeof(BuiltInType))) + .ToList().Where(b => (b > BuiltInType.Null) && (b < BuiltInType.DataValue)).ToArray(); + #endregion + + #region Test Methods + /// + /// Initialize Variant with BuiltInType Scalar. + /// + [Theory] + [Category("BuiltInType"), Repeat(RandomRepeats)] + public void VariantScalarFromBuiltInType(BuiltInType builtInType) + { + SetRepeatedRandomSeed(); + object randomData = DataGenerator.GetRandom(builtInType); + Variant variant1 = new Variant(randomData); + Variant variant2 = new Variant(randomData, new TypeInfo(builtInType, ValueRanks.Scalar)); + } + + /// + /// Initialize Variant with BuiltInType Array. + /// + [Theory] + [Category("BuiltInType"), Repeat(RandomRepeats)] + public void VariantArrayFromBuiltInType(BuiltInType builtInType, bool useBoundaryValues) + { + SetRepeatedRandomSeed(); + object randomData = DataGenerator.GetRandomArray(builtInType, useBoundaryValues, 100, false); + Variant variant1 = new Variant(randomData); + Variant variant2 = new Variant(randomData, new TypeInfo(builtInType, ValueRanks.OneDimension)); + } + + /// + /// Initialize Variant with Enum array. + /// + [Test] + [Category("BuiltInType")] + public void VariantFromEnumArray() + { + // Enum Scalar + Variant variant0 = new Variant(DayOfWeek.Monday); + Variant variant1 = new Variant(DayOfWeek.Monday, new TypeInfo(BuiltInType.Enumeration, ValueRanks.Scalar)); + + // Enum array + DayOfWeek[] days = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday }; + Variant variant2 = new Variant(days, new TypeInfo(BuiltInType.Enumeration, ValueRanks.OneDimension)); + Variant variant3 = new Variant(days); + + // Enum 2-dim Array + DayOfWeek[,] daysdays = new DayOfWeek[,] { { DayOfWeek.Monday, DayOfWeek.Tuesday }, { DayOfWeek.Monday, DayOfWeek.Tuesday } }; + Variant variant4 = new Variant(daysdays, new TypeInfo(BuiltInType.Enumeration, ValueRanks.TwoDimensions)); + // not supported + // Variant variant5 = new Variant(daysdays); + } + + /// + /// Validate ExtensionObject special cases and constructors. + /// + [Test] + [Category("BuiltInType")] + public void ExtensionObject() + { + ExtensionObject extensionObject_null = null; + // Validate the default constructor + ExtensionObject extensionObject_Default = new Ua.ExtensionObject(); + Assert.NotNull(extensionObject_Default); + Assert.AreEqual(ExpandedNodeId.Null, extensionObject_Default.TypeId); + Assert.AreEqual(ExtensionObjectEncoding.None, extensionObject_Default.Encoding); + Assert.Null(extensionObject_Default.Body); + // Constructor by ExtensionObject + ExtensionObject extensionObject = new ExtensionObject(ExpandedNodeId.Null); + Assert.NotNull(extensionObject); + Assert.AreEqual(ExpandedNodeId.Null, extensionObject.TypeId); + Assert.AreEqual(ExtensionObjectEncoding.None, extensionObject.Encoding); + Assert.Null(extensionObject.Body); + // static extensions + Assert.True(Ua.ExtensionObject.IsNull(extensionObject)); + Assert.Null(Ua.ExtensionObject.ToEncodeable(null)); + Assert.Null(Ua.ExtensionObject.ToArray(null, typeof(object))); + Assert.Null(Ua.ExtensionObject.ToList(null)); + // constructor by ExpandedNodeId + extensionObject = new ExtensionObject((ExpandedNodeId) null); + Assert.AreEqual(0, extensionObject.GetHashCode()); + Assert.Throws(() => new ExtensionObject(extensionObject_null)); + Assert.Throws(() => new ExtensionObject(new object())); + // constructor by object + object byteArray = new byte[] { 1, 2, 3 }; + extensionObject = new ExtensionObject(byteArray); + Assert.NotNull(extensionObject); + Assert.AreEqual(extensionObject, extensionObject); + // string extension + var extensionObjectString = extensionObject.ToString(); + Assert.Throws(() => extensionObject.ToString("123", null)); + Assert.NotNull(extensionObjectString); + // clone + var clonedExtensionObject = (ExtensionObject)Utils.Clone(extensionObject); + Assert.AreEqual(extensionObject, clonedExtensionObject); + // IsEqual operator + clonedExtensionObject.TypeId = new ExpandedNodeId(333); + Assert.AreNotEqual(extensionObject, clonedExtensionObject); + Assert.AreNotEqual(extensionObject, extensionObject_Default); + Assert.AreNotEqual(extensionObject, new object()); + Assert.AreEqual(clonedExtensionObject, clonedExtensionObject); + Assert.AreEqual(ExpandedNodeId.Null, extensionObject.TypeId); + Assert.AreEqual(ExpandedNodeId.Null.GetHashCode(), extensionObject.TypeId.GetHashCode()); + Assert.AreEqual(ExtensionObjectEncoding.Binary, extensionObject.Encoding); + Assert.AreEqual(byteArray, extensionObject.Body); + Assert.AreEqual(byteArray.GetHashCode(), extensionObject.Body.GetHashCode()); + // collection + ExtensionObjectCollection collection = new ExtensionObjectCollection(); + Assert.NotNull(collection); + collection = new ExtensionObjectCollection(100); + Assert.NotNull(collection); + collection = new ExtensionObjectCollection(collection); + Assert.NotNull(collection); + collection = (ExtensionObjectCollection)collection.MemberwiseClone(); + // default value is null + Assert.Null(TypeInfo.GetDefaultValue(BuiltInType.ExtensionObject)); + } + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/BuiltIn/SessionLessServiceMessageTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/BuiltIn/SessionLessServiceMessageTests.cs new file mode 100644 index 00000000..5d0e8c75 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/BuiltIn/SessionLessServiceMessageTests.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using Newtonsoft.Json.Linq; +using NUnit.Framework; + +namespace Opc.Ua.Core.Tests.Types.BuiltIn +{ + /// + /// Tests for the SessionLessServiceMessage Tests. + /// + [TestFixture, Category("BuiltIn")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class SessionLessServiceMessageTests + { + [Test] + public void WhenServerUrisAreLessThanNamespaces_ShouldNotThrowAndMustReturnCorrectServerUris() + { + //arrange + var namespaceTable = new NamespaceTable(new List { Namespaces.OpcUa, "http://bar", "http://foo" }); + var expectedServerUri = "http://foobar"; + var serverUris = new StringTable(new[] { Namespaces.OpcUa, expectedServerUri }); + var memoryStream = new MemoryStream(); + var context = new ServiceMessageContext { NamespaceUris = namespaceTable, ServerUris = serverUris }; + Encoding encoding = Encoding.UTF7; // setting to UTF7 because the BOM marker in UTF8 causes reading error + // using jsonEncoder, this could have been any IEncoder + var jsonEncoder = new JsonEncoder(context, true, new StreamWriter(memoryStream, encoding)); + + var envelope = new SessionLessServiceMessage { + NamespaceUris = context.NamespaceUris, + ServerUris = context.ServerUris, + Message = null + }; + + //act and validate it does not throw + Assert.DoesNotThrow(() => { + envelope.Encode(jsonEncoder); + }); + jsonEncoder.Close(); + jsonEncoder.Dispose(); + + //assert + var buffer = memoryStream.ToArray(); + var result = encoding.GetString(buffer); + + var jObject = JObject.Parse(result); + Assert.IsNotNull(jObject); + var serverUrisToken = jObject["ServerUris"]; + Assert.IsNotNull(serverUrisToken); + var serverUrisEncoded = serverUrisToken.ToObject(); + Assert.IsNotNull(serverUrisEncoded); + Assert.AreEqual(1, serverUrisEncoded.Length); + Assert.Contains(expectedServerUri, serverUrisEncoded); + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncodableTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncodableTests.cs new file mode 100644 index 00000000..d3a70a75 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncodableTests.cs @@ -0,0 +1,148 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Linq; +using NUnit.Framework; + +namespace Opc.Ua.Core.Tests.Types.Encoders +{ + /// + /// Tests for the IEncodeable classes. + /// + [TestFixture, Category("EncodableTypes")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class EncodableTypesTests : EncoderCommon + { + #region DataPointSources + [DatapointSource] + public Type[] TypeArray = typeof(BaseObjectState).Assembly.GetExportedTypes().Where(type => IsEncodeableType(type)).ToArray(); + #endregion + + #region Test Methods + /// + /// Verify encode and decode of an encodable type. + /// + [Theory] + [Category("EncodableTypes")] + public void ActivateEncodableType( + EncodingType encoderType, + Type systemType + ) + { + IEncodeable testObject = CreateDefaultEncodableType(systemType) as IEncodeable; + Assert.NotNull(testObject); + Assert.False(testObject.BinaryEncodingId.IsNull); + Assert.False(testObject.TypeId.IsNull); + Assert.False(testObject.XmlEncodingId.IsNull); + Assert.AreNotEqual(testObject.TypeId, testObject.BinaryEncodingId); + Assert.AreNotEqual(testObject.TypeId, testObject.XmlEncodingId); + Assert.AreNotEqual(testObject.BinaryEncodingId, testObject.XmlEncodingId); + EncodeDecode(encoderType, BuiltInType.ExtensionObject, new ExtensionObject(testObject.TypeId, testObject)); + } + + /// + /// Create an instance of an encodeable type with default values. + /// + /// The type to create + private object CreateDefaultEncodableType(Type systemType) + { + object instance = Activator.CreateInstance(systemType); + SetDefaultEncodeableType(systemType, instance); + return instance; + } + + /// + /// Set encodeable type properties recursively + /// to expected default values. + /// + private void SetDefaultEncodeableType(Type systemType, object typeInstance) + { + foreach (var property in typeInstance.GetType().GetProperties()) + { + if (property.CanWrite) + { + var typeInfo = TypeInfo.Construct(property.PropertyType); + switch (typeInfo.BuiltInType) + { + case BuiltInType.ExtensionObject: + object propertyObject = property.GetValue(typeInstance); + if (propertyObject == null && + property.PropertyType.IsAssignableFrom(typeof(ExtensionObject))) + { + property.SetValue(typeInstance, ExtensionObject.Null); + } + else if (propertyObject != null && + propertyObject is IEncodeable) + { + SetDefaultEncodeableType(property.PropertyType, propertyObject); + } + break; + case BuiltInType.Null: + break; + case BuiltInType.DataValue: + if (property.GetValue(typeInstance) == null) + { + property.SetValue(typeInstance, new DataValue()); + } + break; + case BuiltInType.NodeId: + if (property.GetValue(typeInstance) == null) + { + property.SetValue(typeInstance, NodeId.Null); + } + break; + case BuiltInType.ExpandedNodeId: + if (property.GetValue(typeInstance) == null) + { + property.SetValue(typeInstance, ExpandedNodeId.Null); + } + break; + case BuiltInType.DiagnosticInfo: + if (property.GetValue(typeInstance) == null) + { + property.SetValue(typeInstance, new DiagnosticInfo()); + } + break; + default: + if (typeInfo.ValueRank == ValueRanks.Scalar) + { + var value = TypeInfo.GetDefaultValue(typeInfo.BuiltInType); + property.SetValue(typeInstance, value); + } + break; + } + } + } + + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncoderCommon.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncoderCommon.cs new file mode 100644 index 00000000..32a03365 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncoderCommon.cs @@ -0,0 +1,730 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Threading; +using System.Xml; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using Opc.Ua.Test; + +namespace Opc.Ua.Core.Tests.Types.Encoders +{ + /// + /// Base class for the encoder tests. + /// + [TestFixture, Category("Encoder")] + [SetCulture("en-us")] + public class EncoderCommon + { + protected const int RandomStart = 4840; + protected const int RandomRepeats = 100; + protected const string ApplicationUri = "uri:localhost:opcfoundation.org:EncoderCommon"; + protected RandomSource RandomSource { get; private set; } + protected DataGenerator DataGenerator { get; private set; } + protected ServiceMessageContext Context { get; private set; } + protected NamespaceTable NameSpaceUris { get; private set; } + protected StringTable ServerUris { get; private set; } + + #region Test Setup + [OneTimeSetUp] + protected void OneTimeSetUp() + { + Context = new ServiceMessageContext(); + NameSpaceUris = Context.NamespaceUris; + // namespace index 1 must be the ApplicationUri + NameSpaceUris.GetIndexOrAppend(ApplicationUri); + NameSpaceUris.GetIndexOrAppend(Namespaces.OpcUaGds); + ServerUris = new StringTable(); + } + + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + + [SetUp] + protected void SetUp() + { + // ensure tests are reproducible, reset for every test + RandomSource = new RandomSource(RandomStart); + DataGenerator = new DataGenerator(RandomSource); + } + + [TearDown] + protected void TearDown() + { + } + + /// + /// Ensure repeated tests get different seed. + /// + protected void SetRepeatedRandomSeed() + { + int randomSeed = TestContext.CurrentContext.Random.Next() + RandomStart; + RandomSource = new RandomSource(randomSeed); + DataGenerator = new DataGenerator(RandomSource); + } + + /// + /// Ensure tests are reproducible with same seed. + /// + protected void SetRandomSeed(int randomSeed) + { + RandomSource = new RandomSource(randomSeed + RandomStart); + DataGenerator = new DataGenerator(RandomSource); + } + #endregion + + #region DataPointSources + [DatapointSource] + public static BuiltInType[] BuiltInTypes = ((BuiltInType[])Enum.GetValues(typeof(BuiltInType))) + .ToList().Where(b => + (b != BuiltInType.Variant) && + (b != BuiltInType.DiagnosticInfo) && + (b != BuiltInType.DataValue) && + (b < BuiltInType.Number || b > BuiltInType.UInteger) + ).ToArray(); + + [DatapointSource] + public static EncodingType[] EncoderTypes = (EncodingType[])Enum.GetValues(typeof(EncodingType)); + #endregion + + #region Protected Methods + /// + /// Encode data value and return encoded string. + /// + protected string EncodeDataValue( + EncodingType encoderType, + BuiltInType builtInType, + object data, + bool useReversibleEncoding = true + ) + { + string encodeInfo = $"Encoder: {encoderType} Type:{builtInType} Reversible:{useReversibleEncoding}"; + TestContext.Out.WriteLine(encodeInfo); + TestContext.Out.WriteLine(data); + DataValue expected = CreateDataValue(builtInType, data); + TestContext.Out.WriteLine("Expected:"); + TestContext.Out.WriteLine(expected); + Assert.IsNotNull(expected, "Expected DataValue is Null, " + encodeInfo); + var encoderStream = new MemoryStream(); + IEncoder encoder = CreateEncoder(encoderType, Context, encoderStream, typeof(DataValue), useReversibleEncoding); + encoder.WriteDataValue("DataValue", expected); + Dispose(encoder); + var buffer = encoderStream.ToArray(); + return Encoding.UTF8.GetString(buffer); + } + + /// + /// Encode and decode a DataValue, + /// validate the result against the input data. + /// + protected void EncodeDecodeDataValue( + EncodingType encoderType, + BuiltInType builtInType, + object data + ) + { + string encodeInfo = $"Encoder: {encoderType} Type:{builtInType}"; + TestContext.Out.WriteLine(encodeInfo); + TestContext.Out.WriteLine(data); + DataValue expected = CreateDataValue(builtInType, data); + Assert.IsNotNull(expected, "Expected DataValue is Null, " + encodeInfo); + TestContext.Out.WriteLine("Expected:"); + TestContext.Out.WriteLine(expected); + var encoderStream = new MemoryStream(); + IEncoder encoder = CreateEncoder(encoderType, Context, encoderStream, typeof(DataValue)); + encoder.WriteDataValue("DataValue", expected); + Dispose(encoder); + var buffer = encoderStream.ToArray(); + string jsonFormatted; + switch (encoderType) + { + case EncodingType.Json: + jsonFormatted = PrettifyAndValidateJson(Encoding.UTF8.GetString(buffer)); + break; + } + var decoderStream = new MemoryStream(buffer); + IDecoder decoder = CreateDecoder(encoderType, Context, decoderStream, typeof(DataValue)); + DataValue result = decoder.ReadDataValue("DataValue"); + Dispose(decoder); + TestContext.Out.WriteLine("Result:"); + TestContext.Out.WriteLine(result); + Assert.IsNotNull(result, "Resulting DataValue is Null, " + encodeInfo); + expected.Value = AdjustExpectedBoundaryValues(encoderType, builtInType, expected.Value); + Assert.AreEqual(expected, result, encodeInfo); + Assert.IsTrue(Utils.IsEqual(expected, result), "Opc.Ua.Utils.IsEqual failed to compare expected and result. " + encodeInfo); + } + + /// + /// Encode and decode object, validate result. + /// + protected void EncodeDecode( + EncodingType encoderType, + BuiltInType builtInType, + object expected + ) + { + string encodeInfo = $"Encoder: {encoderType} Type:{builtInType}"; + Type type = TypeInfo.GetSystemType(builtInType, -1); + TestContext.Out.WriteLine(encodeInfo); + TestContext.Out.WriteLine("Expected:"); + TestContext.Out.WriteLine(expected); + var encoderStream = new MemoryStream(); + IEncoder encoder = CreateEncoder(encoderType, Context, encoderStream, type); + Encode(encoder, builtInType, builtInType.ToString(), expected); + Dispose(encoder); + var buffer = encoderStream.ToArray(); + string formatted; + switch (encoderType) + { + case EncodingType.Json: + formatted = PrettifyAndValidateJson(Encoding.UTF8.GetString(buffer)); + break; + default: + formatted = Encoding.UTF8.GetString(buffer); + break; + } + var decoderStream = new MemoryStream(buffer); + IDecoder decoder = CreateDecoder(encoderType, Context, decoderStream, type); + object result = Decode(decoder, builtInType, builtInType.ToString(), type); + Dispose(decoder); + TestContext.Out.WriteLine("Result:"); + TestContext.Out.WriteLine(result); + expected = AdjustExpectedBoundaryValues(encoderType, builtInType, expected); + if (BuiltInType.DateTime == builtInType) + { + expected = Utils.ToOpcUaUniversalTime((DateTime)expected); + } + Assert.AreEqual(expected, result, encodeInfo); + Assert.IsTrue(Opc.Ua.Utils.IsEqual(expected, result), "Opc.Ua.Utils.IsEqual failed to compare expected and result. " + encodeInfo); + } + + /// + /// Encode object as JSON and validate against expected JSON string. + /// + protected void EncodeJsonVerifyResult( + BuiltInType builtInType, + object data, + bool useReversibleEncoding, + string expected, + bool topLevelIsArray, + bool includeDefaults + ) + { + string encodeInfo = $"Encoder: Json Type:{builtInType} Reversible: {useReversibleEncoding}"; + TestContext.Out.WriteLine(encodeInfo); + TestContext.Out.WriteLine("Data:"); + TestContext.Out.WriteLine(data); + TestContext.Out.WriteLine("Expected:"); + if (!String.IsNullOrEmpty(expected)) + { + expected = $"{{\"{builtInType}\":" + expected + "}"; + } + else + { + expected = "{}"; + } + var formattedExpected = PrettifyAndValidateJson(expected); + var encoderStream = new MemoryStream(); + bool isNumber = TypeInfo.IsNumericType(builtInType) || builtInType == BuiltInType.Boolean; + bool includeDefaultValues = !isNumber ? includeDefaults : false; + bool includeDefaultNumbers = isNumber ? includeDefaults : true; + IEncoder encoder = CreateEncoder(EncodingType.Json, Context, encoderStream, typeof(DataValue), + useReversibleEncoding, topLevelIsArray, includeDefaultValues, includeDefaultNumbers); + //encoder.SetMappingTables(_nameSpaceUris, _serverUris); + Encode(encoder, builtInType, builtInType.ToString(), data); + Dispose(encoder); + var buffer = encoderStream.ToArray(); + TestContext.Out.WriteLine("Result:"); + var result = Encoding.UTF8.GetString(buffer); + var formattedResult = PrettifyAndValidateJson(result); + var jsonLoadSettings = new JsonLoadSettings() { + CommentHandling = CommentHandling.Ignore, + LineInfoHandling = LineInfoHandling.Ignore + }; + var resultParsed = JObject.Parse(result, jsonLoadSettings); + var expectedParsed = JObject.Parse(expected, jsonLoadSettings); + var areEqual = JToken.DeepEquals(expectedParsed, resultParsed); + Assert.IsTrue(areEqual, encodeInfo); + } + + /// + /// Format and validate a JSON string. + /// + protected string PrettifyAndValidateJson(string json) + { + try + { + using (var stringWriter = new StringWriter()) + using (var stringReader = new StringReader(json)) + { + var jsonReader = new JsonTextReader(stringReader); + var jsonWriter = new JsonTextWriter(stringWriter) { + Formatting = Newtonsoft.Json.Formatting.Indented, + Culture = System.Globalization.CultureInfo.InvariantCulture + }; + jsonWriter.WriteToken(jsonReader); + string formattedJson = stringWriter.ToString(); + TestContext.Out.WriteLine(formattedJson); + return formattedJson; + } + } + catch (Exception ex) + { + TestContext.Out.WriteLine(json); + Assert.Fail("Invalid json data: " + ex.Message); + } + return json; + } + + /// + /// Encoder factory for all encoding types. + /// + /// + protected IEncoder CreateEncoder( + EncodingType encoderType, + ServiceMessageContext context, + Stream stream, + Type systemType, + bool useReversibleEncoding = true, + bool topLevelIsArray = false, + bool includeDefaultValues = false, + bool includeDefaultNumbers = true + ) + { + switch (encoderType) + { + case EncodingType.Binary: + Assume.That(useReversibleEncoding, "Binary encoding only supports reversible option."); + return new BinaryEncoder(stream, context); + case EncodingType.Xml: + Assume.That(useReversibleEncoding, "Xml encoding only supports reversible option."); + var xmlWriter = XmlWriter.Create(stream); + return new XmlEncoder(systemType, xmlWriter, context); + case EncodingType.Json: + var streamWriter = new StreamWriter(stream, new System.Text.UTF8Encoding(false)); + return new JsonEncoder(context, useReversibleEncoding, streamWriter, topLevelIsArray) { + IncludeDefaultValues = includeDefaultValues, + IncludeDefaultNumberValues = includeDefaultNumbers + }; + } + return null; + } + + /// + /// Decoder factory for all decoding types. + /// + protected IDecoder CreateDecoder( + EncodingType decoderType, + ServiceMessageContext context, + Stream stream, + Type systemType + ) + { + switch (decoderType) + { + case EncodingType.Binary: + return new BinaryDecoder(stream, context); + case EncodingType.Xml: + var xmlReader = XmlReader.Create(stream); + return new XmlDecoder(systemType, xmlReader, context); + case EncodingType.Json: + var jsonTextReader = new JsonTextReader(new StreamReader(stream)); + return new JsonDecoder(systemType, jsonTextReader, context); + } + return null; + } + + /// + /// Wrap object in a DataValue. + /// + protected DataValue CreateDataValue(BuiltInType builtInType, object data) + { + StatusCode statusCode = (StatusCode)DataGenerator.GetRandom(BuiltInType.StatusCode); + DateTime sourceTimeStamp = (DateTime)DataGenerator.GetRandom(BuiltInType.DateTime); + Variant variant = (builtInType == BuiltInType.Variant) && (data is Variant) ? (Variant)data : new Variant(data); + return new DataValue(variant, statusCode, sourceTimeStamp, DateTime.UtcNow); + } + + /// + /// Standard dispose. + /// + protected void Dispose(object o) + { + var dispose = o as IDisposable; + dispose?.Dispose(); + } + + /// + /// Helper for encoding of built in types. + /// + protected void Encode(IEncoder encoder, BuiltInType builtInType, string fieldName, object value) + { + bool isArray = (value?.GetType().IsArray ?? false) && (builtInType != BuiltInType.ByteString); + bool isCollection = (value is IList) && (builtInType != BuiltInType.ByteString); + if (!isArray && !isCollection) + { + switch (builtInType) + { + case BuiltInType.Null: { encoder.WriteVariant(fieldName, new Variant(value)); return; } + case BuiltInType.Boolean: { encoder.WriteBoolean(fieldName, (bool)value); return; } + case BuiltInType.SByte: { encoder.WriteSByte(fieldName, (sbyte)value); return; } + case BuiltInType.Byte: { encoder.WriteByte(fieldName, (byte)value); return; } + case BuiltInType.Int16: { encoder.WriteInt16(fieldName, (short)value); return; } + case BuiltInType.UInt16: { encoder.WriteUInt16(fieldName, (ushort)value); return; } + case BuiltInType.Int32: { encoder.WriteInt32(fieldName, (int)value); return; } + case BuiltInType.UInt32: { encoder.WriteUInt32(fieldName, (uint)value); return; } + case BuiltInType.Int64: { encoder.WriteInt64(fieldName, (long)value); return; } + case BuiltInType.UInt64: { encoder.WriteUInt64(fieldName, (ulong)value); return; } + case BuiltInType.Float: { encoder.WriteFloat(fieldName, (float)value); return; } + case BuiltInType.Double: { encoder.WriteDouble(fieldName, (double)value); return; } + case BuiltInType.String: { encoder.WriteString(fieldName, (string)value); return; } + case BuiltInType.DateTime: { encoder.WriteDateTime(fieldName, (DateTime)value); return; } + case BuiltInType.Guid: { encoder.WriteGuid(fieldName, (Uuid)value); return; } + case BuiltInType.ByteString: { encoder.WriteByteString(fieldName, (byte[])value); return; } + case BuiltInType.XmlElement: { encoder.WriteXmlElement(fieldName, (XmlElement)value); return; } + case BuiltInType.NodeId: { encoder.WriteNodeId(fieldName, (NodeId)value); return; } + case BuiltInType.ExpandedNodeId: { encoder.WriteExpandedNodeId(fieldName, (ExpandedNodeId)value); return; } + case BuiltInType.StatusCode: { encoder.WriteStatusCode(fieldName, (StatusCode)value); return; } + case BuiltInType.QualifiedName: { encoder.WriteQualifiedName(fieldName, (QualifiedName)value); return; } + case BuiltInType.LocalizedText: { encoder.WriteLocalizedText(fieldName, (LocalizedText)value); return; } + case BuiltInType.ExtensionObject: { encoder.WriteExtensionObject(fieldName, (ExtensionObject)value); return; } + case BuiltInType.DataValue: { encoder.WriteDataValue(fieldName, (DataValue)value); return; } + case BuiltInType.Enumeration: + { + if (value.GetType().IsEnum) + { + encoder.WriteEnumerated(fieldName, (Enum)value); + } + else + { + encoder.WriteEnumerated(fieldName, (Enumeration)value); + } + return; + } + case BuiltInType.Variant: { encoder.WriteVariant(fieldName, (Variant)value); return; } + case BuiltInType.DiagnosticInfo: { encoder.WriteDiagnosticInfo(fieldName, (DiagnosticInfo)value); return; } + } + } + else + { + Type arrayType = value.GetType().GetElementType(); + IEnumerable enumerable = value as IEnumerable; + Array array = value as Array; + switch (builtInType) + { + case BuiltInType.Variant: { encoder.WriteVariantArray(fieldName, (VariantCollection)value); return; } + case BuiltInType.Enumeration: + { + encoder.WriteEnumeratedArray(fieldName, array, arrayType); + return; + } + } + } + Assert.Fail($"Unknown BuiltInType {builtInType}"); + } + + + /// + /// Helper for decoding of builtin types. + /// + protected object Decode(IDecoder decoder, BuiltInType builtInType, string fieldName, Type type) + { + switch (builtInType) + { + case BuiltInType.Null: { var variant = decoder.ReadVariant(fieldName); return variant.Value; } + case BuiltInType.Boolean: { return decoder.ReadBoolean(fieldName); } + case BuiltInType.SByte: { return decoder.ReadSByte(fieldName); } + case BuiltInType.Byte: { return decoder.ReadByte(fieldName); } + case BuiltInType.Int16: { return decoder.ReadInt16(fieldName); } + case BuiltInType.UInt16: { return decoder.ReadUInt16(fieldName); } + case BuiltInType.Int32: { return decoder.ReadInt32(fieldName); } + case BuiltInType.UInt32: { return decoder.ReadUInt32(fieldName); } + case BuiltInType.Int64: { return decoder.ReadInt64(fieldName); } + case BuiltInType.UInt64: { return decoder.ReadUInt64(fieldName); } + case BuiltInType.Float: { return decoder.ReadFloat(fieldName); } + case BuiltInType.Double: { return decoder.ReadDouble(fieldName); } + case BuiltInType.String: { return decoder.ReadString(fieldName); } + case BuiltInType.DateTime: { return decoder.ReadDateTime(fieldName); } + case BuiltInType.Guid: { return decoder.ReadGuid(fieldName); } + case BuiltInType.ByteString: { return decoder.ReadByteString(fieldName); } + case BuiltInType.XmlElement: { return decoder.ReadXmlElement(fieldName); } + case BuiltInType.NodeId: { return decoder.ReadNodeId(fieldName); } + case BuiltInType.ExpandedNodeId: { return decoder.ReadExpandedNodeId(fieldName); } + case BuiltInType.StatusCode: { return decoder.ReadStatusCode(fieldName); } + case BuiltInType.QualifiedName: { return decoder.ReadQualifiedName(fieldName); } + case BuiltInType.LocalizedText: { return decoder.ReadLocalizedText(fieldName); } + case BuiltInType.ExtensionObject: { return decoder.ReadExtensionObject(fieldName); } + case BuiltInType.DataValue: { return decoder.ReadDataValue(fieldName); } + case BuiltInType.Enumeration: + { + return type.IsEnum ? decoder.ReadEnumerated(fieldName, type) : (object)decoder.ReadInt32(fieldName); + } + case BuiltInType.DiagnosticInfo: { return decoder.ReadDiagnosticInfo(fieldName); } + case BuiltInType.Variant: { return decoder.ReadVariant(fieldName); } + } + Assert.Fail($"Unknown BuiltInType {builtInType}"); + return null; + } + + /// + /// Adjust expected values to encoder specific results. + /// + protected object AdjustExpectedBoundaryValues(EncodingType encoderType, BuiltInType builtInType, object value) + { + if (value == null) + { + return value; + } + if (builtInType == BuiltInType.Variant) + { + // decoder result will be an Int32 + var matrix = value as Matrix; + if (matrix?.TypeInfo.BuiltInType == BuiltInType.Enumeration) + { + return new Matrix(matrix.Elements, BuiltInType.Int32, matrix.Dimensions); + } + } + if (encoderType == EncodingType.Binary) + { + if (builtInType == BuiltInType.DateTime || builtInType == BuiltInType.Variant) + { + if (value.GetType() == typeof(DateTime)) + { + value = AdjustExpectedDateTimeBinaryEncoding((DateTime)value); + } + + if (value.GetType() == typeof(DateTime[])) + { + DateTime[] valueArray = (DateTime[])value; + for (int i = 0; i < valueArray.Length; i++) + { + valueArray[i] = AdjustExpectedDateTimeBinaryEncoding(valueArray[i]); + } + } + } + if (builtInType == BuiltInType.DataValue) + { + DataValue dataValue = (DataValue)value; + if (dataValue.Value?.GetType() == typeof(DateTime) || dataValue.Value?.GetType() == typeof(DateTime[])) + { + dataValue.Value = AdjustExpectedBoundaryValues(encoderType, BuiltInType.DateTime, dataValue.Value); + return dataValue; + } + } + } + return value; + } + + /// + /// Adjust DateTime results of binary encoder. + /// + private DateTime AdjustExpectedDateTimeBinaryEncoding(DateTime dateTime) + { + if (dateTime == DateTime.MaxValue || dateTime == DateTime.MinValue) + { + return dateTime; + } + dateTime = Utils.ToOpcUaUniversalTime(dateTime); + return dateTime <= Utils.TimeBase ? DateTime.MinValue : dateTime; + } + + /// + /// Helper to add escaped quotes to a string. + /// + protected static string Quotes(string json) + { + return "\"" + json + "\""; + } + + /// + /// Return true if system Type is IEncodeable. + /// + protected static bool IsEncodeableType(System.Type systemType) + { + if (systemType == null) + { + return false; + } + + var systemTypeInfo = systemType.GetTypeInfo(); + if (systemTypeInfo.IsAbstract || + !typeof(IEncodeable).GetTypeInfo().IsAssignableFrom(systemTypeInfo)) + { + return false; + } + + IEncodeable encodeable = Activator.CreateInstance(systemType) as IEncodeable; + + if (encodeable == null) + { + return false; + } + + return true; + } + + /// + /// Calculates the number of elements from a dimension array. + /// + protected static int ElementsFromDimension(int[] dimensions) + { + int elements = 1; + for (int i = 0; i < dimensions.Length; i++) + { + if (dimensions[i] != 0) + { + elements *= dimensions[i]; + } + } + return elements; + } + + /// + /// Sets random array dimensions between 2 and 10. + /// + protected void SetMatrixDimensions(int[] dimensions) + { + for (int i = 0; i < dimensions.Length; i++) + { + dimensions[i] = RandomSource.NextInt32(8) + 2; + } + } + + protected enum TestEnumType + { + /// + [EnumMember(Value = "One_1")] + One = 1, + + /// + [EnumMember(Value = "Two_2")] + Two = 2, + + /// + [EnumMember(Value = "Three_3")] + Three = 3, + + /// + [EnumMember(Value = "Ten_10")] + Ten = 10, + + /// + [EnumMember(Value = "Hundred_100")] + Hundred = 100, + } + #endregion + + #region Protected classes + protected class FooBarEncodeable : IEncodeable, IDisposable + { + private static int s_count = 0; + + public FooBarEncodeable() + { + m_resetCounter = true; + Count = Interlocked.Increment(ref s_count); + Foo = $"bar_{Count}"; + FieldName = nameof(Foo); + } + + public FooBarEncodeable(int count) + { + Count = count; + Foo = $"bar_{Count}"; + FieldName = nameof(Foo); + } + + public FooBarEncodeable(string foo) + { + Foo = foo; + FieldName = nameof(Foo); + } + + public FooBarEncodeable(string fieldname, string foo) + { + Foo = foo; + FieldName = fieldname; + } + + public string Foo { get; set; } + public string FieldName { get; set; } + public int Count { get; set; } + + public ExpandedNodeId TypeId { get; } + public ExpandedNodeId BinaryEncodingId { get; } + public ExpandedNodeId XmlEncodingId { get; } + + public void Encode(IEncoder encoder) + { + encoder.PushNamespace(ApplicationUri); + encoder.WriteString(FieldName, Foo); + encoder.PopNamespace(); + } + + public void Decode(IDecoder decoder) + { + decoder.PushNamespace(ApplicationUri); + Foo = decoder.ReadString(FieldName); + decoder.PopNamespace(); + } + + public bool IsEqual(IEncodeable encodeable) + { + if (encodeable is FooBarEncodeable de) + { + return Foo == de.Foo; + } + + return false; + } + + public void Dispose() + { + if (m_resetCounter) + { + s_count = 0; + } + } + + private bool m_resetCounter; + } + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncoderTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncoderTests.cs new file mode 100644 index 00000000..81a7a949 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/EncoderTests.cs @@ -0,0 +1,353 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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 NUnit.Framework; + +namespace Opc.Ua.Core.Tests.Types.Encoders +{ + /// + /// Tests for the IEncoder and IDecoder class. + /// + [TestFixture, Category("Encoder")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class EncoderTests : EncoderCommon + { + #region DataPointSources + [DatapointSource] + public int[] ArrayLength = new int[] { 1, 5, 100 }; + #endregion + + #region Test Methods + /// + /// Verify encode and decode of a default built in type + /// value as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeBuiltInTypeDefaultVariantInDataValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + object defaultValue = TypeInfo.GetDefaultValue(builtInType); + EncodeDecodeDataValue(encoderType, builtInType, defaultValue); + } + + /// + /// Verify encode and decode of a random built in type + /// value as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeBuiltInTypeAsVariantInDataValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + Assume.That(builtInType != BuiltInType.DiagnosticInfo); + object randomData = DataGenerator.GetRandom(builtInType); + EncodeDecodeDataValue(encoderType, builtInType, randomData); + } + + /// + /// Verify encode and decode of a random built in type. + /// + [Theory] + [Category("BuiltInType"), Repeat(RandomRepeats)] + public void ReEncodeBuiltInType( + EncodingType encoderType, + BuiltInType builtInType + ) + { + SetRepeatedRandomSeed(); + object randomData = null; + bool getRandom = true; + while (getRandom) + { + getRandom = false; + randomData = DataGenerator.GetRandom(builtInType); + // filter a few random special cases to skip + // as they test for unsupported objects + switch (builtInType) + { + case BuiltInType.NodeId: + var nodeId = (NodeId)randomData; + if (nodeId.IdType == IdType.Opaque && + ((byte[])nodeId.Identifier).Length == 0) + { + getRandom = true; + } + break; + case BuiltInType.ExpandedNodeId: + var expandedNodeId = (ExpandedNodeId)randomData; + if (expandedNodeId.IdType == IdType.Opaque && + ((byte[])expandedNodeId.Identifier).Length == 0) + { + getRandom = true; + } + break; + default: + break; + } + }; + EncodeDecode(encoderType, builtInType, randomData); + } + + /// + /// Verify encode and decode of a default built in type value. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeBuiltInTypeDefaultValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + object randomData = TypeInfo.GetDefaultValue(builtInType); + if (builtInType == BuiltInType.ExtensionObject) + { + // special case for extension object, default from TypeInfo must be null + // or encoding of extension objects fails. + randomData = ExtensionObject.Null; + } + EncodeDecode(encoderType, builtInType, randomData); + } + + /// + /// Verify encode and decode of boundary built in type values. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeBuiltInTypeBoundaryValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + Array boundaryValues = DataGenerator.GetRandomArray(builtInType, true, 10, true); + foreach (var boundaryValue in boundaryValues) + { + EncodeDecode(encoderType, builtInType, boundaryValue); + } + } + + /// + /// Verify encode and decode of an array of a + /// random builtin type as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeBuiltInTypeArrayAsRandomVariantInDataValue( + EncodingType encoderType, + BuiltInType builtInType, + bool useBoundaryValues, + int arrayLength + ) + { + // ensure different sized arrays contain different data set + SetRandomSeed(arrayLength); + object randomData = DataGenerator.GetRandomArray(builtInType, useBoundaryValues, arrayLength, true); + EncodeDecodeDataValue(encoderType, builtInType, randomData); + } + + /// + /// Verify encode and decode of a zero length array + /// of a builtin type as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeBuiltInTypeZeroLengthArrayAsVariantInDataValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + object randomData = DataGenerator.GetRandomArray(builtInType, false, 0, true); + EncodeDecodeDataValue(encoderType, builtInType, randomData); + } + + /// + /// Verify encode and decode of a random built in type + /// as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType"), Repeat(RandomRepeats)] + public void ReEncodeBuiltInTypeRandomVariantInDataValue( + EncodingType encoderType + ) + { + SetRepeatedRandomSeed(); + object randomData = DataGenerator.GetRandom(BuiltInType.Variant); + EncodeDecodeDataValue(encoderType, BuiltInType.Variant, randomData); + } + + /// + /// Validate integrity of non reversible Json encoding + /// of a builtin type as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void EncodeBuiltInTypeAsVariantInDataValueToNonReversibleJson( + BuiltInType builtInType + ) + { + object randomData = DataGenerator.GetRandom(builtInType); + if (builtInType == BuiltInType.DiagnosticInfo) + { + Assert.Throws( + typeof(ServiceResultException), + () => EncodeDataValue(EncodingType.Json, builtInType, randomData, false) + ); + return; + } + string json = EncodeDataValue(EncodingType.Json, builtInType, randomData, false); + PrettifyAndValidateJson(json); + } + + /// + /// Validate integrity of non reversible Json encoding + /// of a builtin type array as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void EncodeBuiltInTypeArrayAsVariantInDataValueToNonReversibleJson( + BuiltInType builtInType, + bool useBoundaryValues, + int arrayLength + ) + { + SetRandomSeed(arrayLength); + object randomData = DataGenerator.GetRandomArray(builtInType, useBoundaryValues, arrayLength, true); + string json = EncodeDataValue(EncodingType.Json, builtInType, randomData, false); + PrettifyAndValidateJson(json); + } + + /// + /// Verify non reversible Json encoding + /// of a builtin type array as Variant in a DataValue. + /// + [Theory] + [Category("BuiltInType")] + public void EncodeBuiltInTypeZeroLengthArrayAsVariantInDataValueToNonReversibleJson( + BuiltInType builtInType + ) + { + object randomData = DataGenerator.GetRandomArray(builtInType, false, 0, true); + string json = EncodeDataValue(EncodingType.Json, builtInType, randomData, false); + PrettifyAndValidateJson(json); + } + + /// + /// Verify encode and decode of a VariantCollection. + /// + [Theory] + [Category("BuiltInType")] + public void ReEncodeVariantCollectionInDataValue( + EncodingType encoderType + ) + { + var variant = new VariantCollection { + new Variant(4L), + new Variant("test"), + new Variant(new Int32[] {1, 2, 3, 4, 5 }), + new Variant(new Int64[] {1, 2, 3, 4, 5 }), + new Variant(new string[] {"1", "2", "3", "4", "5" }), + //TODO: works as expected, but the expected need to be tweaked for the Int32 result + //new Variant(new TestEnumType[] { TestEnumType.One, TestEnumType.Two, TestEnumType.Hundred }), + new Variant(new Int32[] { 2, 3, 10 }, new TypeInfo(BuiltInType.Enumeration, 1)) + }; + EncodeDecodeDataValue(encoderType, BuiltInType.Variant, variant); + } + + /// + /// Verify encode and decode of a Matrix in a Variant. + /// + [Theory] + [Category("Array")] + public void ReEncodeVariantArrayInDataValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + Assume.That(builtInType != BuiltInType.Null); + int arrayDimension = RandomSource.NextInt32(99) + 1; + Array randomData = DataGenerator.GetRandomArray(builtInType, false, arrayDimension, true); + var variant = new Variant(randomData, new TypeInfo(builtInType, 1)); + EncodeDecodeDataValue(encoderType, BuiltInType.Variant, variant); + } + + /// + /// Verify encode and decode of a Matrix in a Variant. + /// + [Theory] + [Category("Matrix")] + public void ReEncodeVariantMatrixInDataValue( + EncodingType encoderType, + BuiltInType builtInType + ) + { + Assume.That(builtInType != BuiltInType.Null); + int matrixDimension = RandomSource.NextInt32(8) + 2; + int[] dimensions = new int[matrixDimension]; + SetMatrixDimensions(dimensions); + int elements = ElementsFromDimension(dimensions); + Array randomData = DataGenerator.GetRandomArray(builtInType, false, elements, true); + var variant = new Variant(new Matrix(randomData, builtInType, dimensions)); + EncodeDecodeDataValue(encoderType, BuiltInType.Variant, variant); + } + + /// + /// Verify encode of a Matrix in a Variant to non reversible JSON. + /// + [Theory] + [Category("Matrix")] + public void EncodeBuiltInTypeMatrixAsVariantInDataValueToNonReversibleJson( + BuiltInType builtInType + ) + { + Assume.That(builtInType != BuiltInType.Null); + int matrixDimension = RandomSource.NextInt32(8) + 2; + int[] dimensions = new int[matrixDimension]; + SetMatrixDimensions(dimensions); + int elements = ElementsFromDimension(dimensions); + Array randomData = DataGenerator.GetRandomArray(builtInType, false, elements, true); + var variant = new Variant(new Matrix(randomData, builtInType, dimensions)); + string json = EncodeDataValue(EncodingType.Json, BuiltInType.Variant, variant, false); + PrettifyAndValidateJson(json); + } + #endregion + + #region Private Methods + #endregion + + #region Private Fields + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderTests.cs new file mode 100644 index 00000000..8b792461 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderTests.cs @@ -0,0 +1,698 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Linq; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization; +using NUnit.Framework; +using System.Threading; + +namespace Opc.Ua.Core.Tests.Types.Encoders +{ + /// + /// Tests for the Json encoder and decoder class. + /// + [TestFixture, Category("JsonEncoder")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class JsonEncoderTests : EncoderCommon + { + #region DataSource + static TestEnumType[] TestEnumArray = new TestEnumType[] + { TestEnumType.One, TestEnumType.Two, TestEnumType.Hundred }; + static Int32[] TestInt32Array = new Int32[] + { 2, 3, 10 }; + static ExtensionObject TestEncodeable = new ExtensionObject(new FooBarEncodeable(999)); + + /// + /// Constants used by test data set. + /// + const ushort kDemoServerIndex = 3; + const string kDemoServer = "http://www.opcfoundation.org/DemoServer/"; + const string kDemoServer2 = "http://www.opcfoundation.org/DemoServer2/"; + const ushort kServerUriIndex = 2; + const string kServerUri = "opc.tcp://localhost:55555"; + const string kNodeIdString = "theNode"; + const string kQualifiedName = "theName"; + const string kLocalizedText = "theText"; + const string kLocale = "en-us"; + const int kNodeIdInt = 2345; + const Int64 kInt64Value = -123456789123456; + const UInt64 kUInt64Value = 123456789123456; + static Guid s_nodeIdGuid = new Guid("AABA0CFA-674F-40C7-B7FA-339D8EECB61D"); + static byte[] s_byteString = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + static string s_byteString64 = Convert.ToBase64String((byte[])s_byteString); + + /// + /// An array of spec compliant Json encoding test data sets which + /// shall be followed by the JSON encoder accordingly. + /// + [DatapointSource] + public JsonValidationData[] Data = new JsonValidationDataCollection() { + { BuiltInType.Boolean, true,"true", null }, + { BuiltInType.Boolean, false, null, null }, + { BuiltInType.Boolean, false, "false", null, true }, + + { BuiltInType.Byte, (Byte)0, null, null}, + { BuiltInType.Byte, (Byte)0, "0", null, true }, + { BuiltInType.Byte, (Byte)88, "88", null }, + { BuiltInType.Byte, (Byte)188, "188", null }, + { BuiltInType.Byte, Byte.MinValue, Byte.MinValue.ToString(), null, true}, + { BuiltInType.Byte, Byte.MaxValue, Byte.MaxValue.ToString(), null }, + + { BuiltInType.SByte, (SByte)0, null, null }, + { BuiltInType.SByte, (SByte)0, "0", null, true }, + { BuiltInType.SByte, (SByte)(-77), "-77", null }, + { BuiltInType.SByte, (SByte)(77), "77", null }, + { BuiltInType.SByte, SByte.MaxValue, SByte.MaxValue.ToString(), null }, + { BuiltInType.SByte, SByte.MinValue, SByte.MinValue.ToString(), null }, + + { BuiltInType.UInt16, (UInt16)0, null, null}, + { BuiltInType.UInt16, (UInt16)0, "0", null, true }, + { BuiltInType.UInt16, (UInt16)12345, "12345", null }, + { BuiltInType.UInt16, (UInt16)44444, "44444", null }, + { BuiltInType.UInt16, UInt16.MinValue, UInt16.MinValue.ToString(), null, true }, + { BuiltInType.UInt16, UInt16.MaxValue, UInt16.MaxValue.ToString(), null }, + + { BuiltInType.Int16, (Int16)0, null, null }, + { BuiltInType.Int16, (Int16)0, "0", null, true }, + { BuiltInType.Int16, (Int16)(-12345), "-12345", null }, + { BuiltInType.Int16, (Int16)12345, "12345", null }, + { BuiltInType.Int16, Int16.MaxValue, Int16.MaxValue.ToString(), null }, + { BuiltInType.Int16, Int16.MinValue, Int16.MinValue.ToString(), null }, + + { BuiltInType.UInt32, (UInt32)0, null, null }, + { BuiltInType.UInt32, (UInt32)0, "0", null, true }, + { BuiltInType.UInt32, (UInt32)1234567, "1234567", null }, + { BuiltInType.UInt32, (UInt32)4444444, "4444444", null }, + { BuiltInType.UInt32, UInt32.MinValue, UInt32.MinValue.ToString(), null, true }, + { BuiltInType.UInt32, UInt32.MaxValue, UInt32.MaxValue.ToString(), null }, + + { BuiltInType.Int32, (Int32)0, null, null }, + { BuiltInType.Int32, (Int32)0, "0", null, true }, + { BuiltInType.Int32, (Int32)(-12345678), "-12345678", null }, + { BuiltInType.Int32, (Int32)12345678, "12345678", null }, + { BuiltInType.Int32, Int32.MaxValue, Int32.MaxValue.ToString(), null }, + { BuiltInType.Int32, Int32.MinValue, Int32.MinValue.ToString(), null }, + + { BuiltInType.Int64, (Int64)0, null, null }, + { BuiltInType.Int64, (Int64)0, Quotes("0"), null, true }, + { BuiltInType.Int64, kInt64Value, Quotes(kInt64Value.ToString()), null }, + { BuiltInType.Int64, (Int64)kUInt64Value, Quotes(kUInt64Value.ToString()), null }, + { BuiltInType.Int64, Int64.MinValue, Quotes(Int64.MinValue.ToString()), null }, + { BuiltInType.Int64, Int64.MaxValue, Quotes(Int64.MaxValue.ToString()), null }, + + { BuiltInType.UInt64, (UInt64)0, null, null }, + { BuiltInType.UInt64, (UInt64)0, Quotes("0"), null, true }, + { BuiltInType.UInt64, (UInt64)kUInt64Value, Quotes(kUInt64Value.ToString()), null }, + { BuiltInType.UInt64, UInt64.MinValue, Quotes(UInt64.MinValue.ToString()), null, true }, + { BuiltInType.UInt64, UInt64.MaxValue, Quotes(UInt64.MaxValue.ToString()), null }, + + { BuiltInType.Float, (Single)0, null, null}, + { BuiltInType.Float, (Single)0, "0", null, true}, + { BuiltInType.Float, (Single)(-12345678.1234), Convert.ToSingle("-12345678.1234", CultureInfo.InvariantCulture).ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Float, (Single)12345678.1234, Convert.ToSingle("12345678.1234", CultureInfo.InvariantCulture).ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Float, Single.MaxValue, Single.MaxValue.ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Float, Single.MinValue, Single.MinValue.ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Float, Single.NegativeInfinity, Quotes("-Infinity"), null }, + { BuiltInType.Float, Single.PositiveInfinity, Quotes("Infinity"), null }, + { BuiltInType.Float, Single.NaN, Quotes("NaN"), null }, + + { BuiltInType.Double, (Double)0, null, null}, + { BuiltInType.Double, (Double)0, "0", null, true}, + { BuiltInType.Double, (Double)(-12345678.1234), Convert.ToDouble("-12345678.1234", CultureInfo.InvariantCulture).ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Double, (Double)12345678.1234, Convert.ToDouble("12345678.1234", CultureInfo.InvariantCulture).ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Double, Double.MaxValue, Double.MaxValue.ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Double, Double.MinValue, Double.MinValue.ToString("R",CultureInfo.InvariantCulture), null }, + { BuiltInType.Double, Double.NegativeInfinity, Quotes("-Infinity"), null }, + { BuiltInType.Double, Double.PositiveInfinity, Quotes("Infinity"), null }, + { BuiltInType.Double, Double.NaN, Quotes("NaN"), null }, + + { BuiltInType.DateTime, Utils.TimeBase, Quotes("1601-01-01T00:00:00Z"), null , true}, + { BuiltInType.DateTime, Utils.TimeBase.ToUniversalTime(), Quotes("1601-01-01T00:00:00Z"), null }, + { BuiltInType.DateTime, DateTime.MinValue, null, null }, + { BuiltInType.DateTime, DateTime.MinValue, Quotes("0001-01-01T00:00:00Z"), null, true }, + { BuiltInType.DateTime, DateTime.MaxValue, Quotes("9999-12-31T23:59:59Z"), null }, + + { BuiltInType.Guid, Uuid.Empty, null, null }, + { BuiltInType.Guid, Uuid.Empty, Quotes("00000000-0000-0000-0000-000000000000"), null, true }, + { BuiltInType.Guid, new Uuid(s_nodeIdGuid), Quotes($"{s_nodeIdGuid}"), null }, + + { BuiltInType.NodeId, NodeId.Null, null, null }, + { BuiltInType.NodeId, new NodeId(kNodeIdInt), $"{{\"Id\":{kNodeIdInt}}}", null }, + { BuiltInType.NodeId, new NodeId(kNodeIdInt,1), $"{{\"Id\":{kNodeIdInt},\"Namespace\":1}}", null }, + { BuiltInType.NodeId, new NodeId(kNodeIdInt,kDemoServerIndex), + $"{{\"Id\":{kNodeIdInt},\"Namespace\":{kDemoServerIndex}}}", $"{{\"Id\":{kNodeIdInt},\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.NodeId, new NodeId(kNodeIdInt,88), $"{{\"Id\":{kNodeIdInt},\"Namespace\":88}}", null}, + { BuiltInType.NodeId, new NodeId(kNodeIdString), $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\"}}", null }, + { BuiltInType.NodeId, new NodeId(kNodeIdString,1), $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":1}}", null }, + { BuiltInType.NodeId, new NodeId(kNodeIdString,kDemoServerIndex), + $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":{kDemoServerIndex}}}", + $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.NodeId, new NodeId(kNodeIdString,88), $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":88}}", null}, + { BuiltInType.NodeId, new NodeId(s_nodeIdGuid), $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\"}}", null }, + { BuiltInType.NodeId, new NodeId(s_nodeIdGuid,1), $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":1}}", null }, + { BuiltInType.NodeId, new NodeId(s_nodeIdGuid,kDemoServerIndex), + $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":{kDemoServerIndex}}}", + $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.NodeId, new NodeId(s_nodeIdGuid,88), $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":88}}", null}, + { BuiltInType.NodeId, new NodeId(s_byteString), $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\"}}", null }, + { BuiltInType.NodeId, new NodeId(s_byteString,1), $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":1}}", null }, + { BuiltInType.NodeId, new NodeId(s_byteString,kDemoServerIndex), + $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":{kDemoServerIndex}}}", + $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.NodeId, new NodeId(s_byteString,88), $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":88}}", null}, + // TODO: add cases for serverIndex + { BuiltInType.ExpandedNodeId, ExpandedNodeId.Null, null, null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdInt), $"{{\"Id\":{kNodeIdInt}}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdInt,1), $"{{\"Id\":{kNodeIdInt},\"Namespace\":1}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdInt,kDemoServerIndex), + $"{{\"Id\":{kNodeIdInt},\"Namespace\":{kDemoServerIndex}}}", $"{{\"Id\":{kNodeIdInt},\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdInt,kDemoServer2), + $"{{\"Id\":{kNodeIdInt},\"Namespace\":\"{kDemoServer2}\"}}", $"{{\"Id\":{kNodeIdInt},\"Namespace\":\"{kDemoServer2}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdInt,88), $"{{\"Id\":{kNodeIdInt},\"Namespace\":88}}", null}, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdString), $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\"}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdString,1), $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":1}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdString,kDemoServerIndex), + $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":{kDemoServerIndex}}}", + $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdString,kDemoServer2), + $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":\"{kDemoServer2}\"}}", + $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":\"{kDemoServer2}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(kNodeIdString,88), $"{{\"IdType\":1,\"Id\":\"{kNodeIdString}\",\"Namespace\":88}}", null}, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_nodeIdGuid), $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\"}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_nodeIdGuid, 1), $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":1}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_nodeIdGuid, kDemoServerIndex), + $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":{kDemoServerIndex}}}", + $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_nodeIdGuid, kDemoServer2), + $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":\"{kDemoServer2}\"}}", + $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":\"{kDemoServer2}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_nodeIdGuid,88), $"{{\"IdType\":2,\"Id\":\"{s_nodeIdGuid}\",\"Namespace\":88}}", null}, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_byteString), $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\"}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_byteString,1), $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":1}}", null }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_byteString,kDemoServerIndex), + $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":{kDemoServerIndex}}}", + $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":\"{kDemoServer}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_byteString,kDemoServer2), + $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":\"{kDemoServer2}\"}}", + $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":\"{kDemoServer2}\"}}" }, + { BuiltInType.ExpandedNodeId, new ExpandedNodeId(s_byteString,88), $"{{\"IdType\":3,\"Id\":\"{s_byteString64}\",\"Namespace\":88}}", null}, + + { BuiltInType.StatusCode, new StatusCode(StatusCodes.Good), null, null}, + { BuiltInType.StatusCode, new StatusCode(StatusCodes.Good), $"{StatusCodes.Good}", "", true}, + { BuiltInType.StatusCode, new StatusCode(StatusCodes.BadBoundNotFound), $"{StatusCodes.BadBoundNotFound}", + $"{{\"Code\":{StatusCodes.BadBoundNotFound}, \"Symbol\":\"{nameof(StatusCodes.BadBoundNotFound)}\"}}"}, + { BuiltInType.StatusCode, new StatusCode(StatusCodes.BadCertificateInvalid), + $"{StatusCodes.BadCertificateInvalid}", $"{{\"Code\":{StatusCodes.BadCertificateInvalid}, \"Symbol\":\"{nameof(StatusCodes.BadCertificateInvalid)}\"}}"}, + + { BuiltInType.DiagnosticInfo, new DiagnosticInfo(), "{}", null}, + + { BuiltInType.QualifiedName, QualifiedName.Null, null, null}, + { BuiltInType.QualifiedName, new QualifiedName(kQualifiedName), $"{{\"Name\":\"{kQualifiedName}\"}}", null}, + { BuiltInType.QualifiedName, new QualifiedName(kQualifiedName, 1), $"{{\"Name\":\"{kQualifiedName}\",\"Uri\":1}}", $"{{\"Name\":\"{kQualifiedName}\",\"Uri\":1}}"}, + { BuiltInType.QualifiedName, new QualifiedName(kQualifiedName, kDemoServerIndex), + $"{{\"Name\":\"{kQualifiedName}\",\"Uri\":{kDemoServerIndex}}}", $"{{\"Name\":\"{kQualifiedName}\",\"Uri\":\"{kDemoServer}\"}}"}, + + { BuiltInType.LocalizedText, LocalizedText.Null, null, null}, + { BuiltInType.LocalizedText, new LocalizedText(kLocalizedText), $"{{\"Text\":\"{kLocalizedText}\"}}", $"\"{kLocalizedText}\"", true}, + { BuiltInType.LocalizedText, new LocalizedText(kLocale, kLocalizedText), $"{{\"Text\":\"{kLocalizedText}\",\"Locale\":\"{kLocale}\"}}", $"\"{kLocalizedText}\""}, + + { BuiltInType.ExtensionObject, ExtensionObject.Null, null, null}, + { BuiltInType.ExtensionObject, new ExtensionObject(kNodeIdInt), null, null}, + { BuiltInType.ExtensionObject, new ExtensionObject((IEncodeable) null), null, null}, + + { BuiltInType.Variant, Variant.Null, "", null}, + { BuiltInType.Variant, new Variant((SByte)123), $"{{\"Type\":{BuiltInType.SByte.ToString("d")}, \"Body\":123}}", "123"}, + { BuiltInType.Variant, new Variant((Int16)12345), $"{{\"Type\":{BuiltInType.Int16.ToString("d")}, \"Body\":12345}}", "12345"}, + { BuiltInType.Variant, new Variant((Int32)1234567), $"{{\"Type\":{BuiltInType.Int32.ToString("d")}, \"Body\":1234567}}", "1234567"}, + { BuiltInType.Variant, new Variant((Int64)123456789), $"{{\"Type\":{BuiltInType.Int64.ToString("d")}, \"Body\":\"123456789\"}}", "\"123456789\""}, + { BuiltInType.Variant, new Variant((Byte)123), $"{{\"Type\":{BuiltInType.Byte.ToString("d")}, \"Body\":123}}", "123"}, + { BuiltInType.Variant, new Variant((UInt16)12345), $"{{\"Type\":{BuiltInType.UInt16.ToString("d")}, \"Body\":12345}}", "12345"}, + { BuiltInType.Variant, new Variant((UInt32)1234567), $"{{\"Type\":{BuiltInType.UInt32.ToString("d")}, \"Body\":1234567}}", "1234567"}, + { BuiltInType.Variant, new Variant((UInt64)123456789), $"{{\"Type\":{BuiltInType.UInt64.ToString("d")}, \"Body\":\"123456789\"}}", "\"123456789\""}, + + { BuiltInType.DataValue, new DataValue(), "{}", null}, + { BuiltInType.DataValue, new DataValue(StatusCodes.Good), "{}", null}, + + { BuiltInType.Enumeration, (TestEnumType) 0, "0", "\"0\""}, + { BuiltInType.Enumeration, TestEnumType.Three, TestEnumType.Three.ToString("d"), $"\"{TestEnumType.Three}_{TestEnumType.Three.ToString("d")}\""}, + { BuiltInType.Enumeration, TestEnumType.Ten, $"{TestEnumType.Ten.ToString("d")}", $"\"{TestEnumType.Ten.ToString()}_{TestEnumType.Ten.ToString("d")}\""}, + { BuiltInType.Enumeration, (TestEnumType) 11, "11", "\"11\""}, + + { BuiltInType.Enumeration, (Int32) 1, "1", "\"1\""}, + { BuiltInType.Enumeration, (Int32)TestEnumType.Two, TestEnumType.Two.ToString("d"), $"\"{TestEnumType.Two.ToString("d")}\""}, + { BuiltInType.Enumeration, (Int32)TestEnumType.Hundred, $"{TestEnumType.Hundred.ToString("d")}", $"\"{TestEnumType.Hundred.ToString("d")}\""}, + { BuiltInType.Enumeration, (Int32) 22, "22", "\"22\""}, + + // arrays + { BuiltInType.Enumeration, TestEnumArray, "[1,2,100]", "[\"One_1\",\"Two_2\",\"Hundred_100\"]"}, + { BuiltInType.Enumeration, TestInt32Array, "[2,3,10]", "[\"2\",\"3\",\"10\"]"}, + + // IEncodeable + { BuiltInType.ExtensionObject, TestEncodeable, "{\"Body\":{\"Foo\":\"bar_999\"}}", "{\"Foo\":\"bar_999\"}"} + + }.ToArray(); + #endregion + + #region Setup + [OneTimeSetUp] + protected new void OneTimeSetUp() + { + ushort demoServerIndex = NameSpaceUris.GetIndexOrAppend(kDemoServer); + Assume.That(demoServerIndex == kDemoServerIndex, $"Server Index: {demoServerIndex} != {kDemoServerIndex}"); + } + + [OneTimeTearDown] + protected new void OneTimeTearDown() + { + } + + + [SetUp] + protected new void SetUp() + { + } + + [TearDown] + protected new void TearDown() + { + } + #endregion + + #region Test Methods + /// + /// Verify reversible Json encoding. + /// + [Theory] + public void JsonEncodeRev(JsonValidationData jsonValidationData) + { + EncodeJsonVerifyResult( + jsonValidationData.BuiltInType, + jsonValidationData.Instance, + true, + jsonValidationData.ExpectedReversible, + false, + jsonValidationData.IncludeDefaultValue); + } + + /// + /// Verify non reversible Json encoding. + /// + [Theory] + public void JsonEncodeNonRev(JsonValidationData jsonValidationData) + { + EncodeJsonVerifyResult( + jsonValidationData.BuiltInType, + jsonValidationData.Instance, + false, + jsonValidationData.ExpectedNonReversible ?? jsonValidationData.ExpectedReversible, + false, + jsonValidationData.IncludeDefaultValue); + } + + /// + /// Within a object JSON don't allow another object without fieldname. + /// + [TestCase(false, "{\"Foo\":\"bar_1\"}")] + [TestCase(true, "[{\"Foo\":\"bar_1\"}]")] + public void Test_WriteSingleEncodeableWithoutName(bool topLevelIsArray, string expected) + { + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + using (var encodeable = new FooBarEncodeable()) + { + var encoder = new JsonEncoder(Context, true, null, topLevelIsArray); + + encoder.WriteEncodeable(null, encodeable, typeof(FooBarEncodeable)); + + var encoded = encoder.CloseAndReturnText(); + + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + } + + /// + /// A single encodeable in an array cannot have a fieldname. + /// + [Test] + public void Test_WriteSingleEncodeableWithName() + { + var expected = "{\"bar_1\":{\"Foo\":\"bar_1\"}}"; + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + using (var encodeable = new FooBarEncodeable()) + { + var encoder = new JsonEncoder(Context, true, null, false); + + encoder.WriteEncodeable(encodeable.Foo, encodeable, typeof(FooBarEncodeable)); + + var encoded = encoder.CloseAndReturnText(); + + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + } + + /// + /// A single encodeable in an array cannot have a fieldname. + /// + [Test] + public void Test_WriteSingleEncodeableWithNameAndArrayAsTopLevel_Expect_Exception() + { + using (var encodeable = new FooBarEncodeable()) + { + var encoder = new JsonEncoder(Context, true, null, true); + + Assert.Throws(() => encoder.WriteEncodeable(encodeable.Foo, encodeable, typeof(FooBarEncodeable))); + } + } + + /// + /// A single encodeable in an array cannot have a fieldname. + /// + [Test] + public void Test_WriteMultipleEncodeableWithoutName_Expect_Exception() + { + // invalid JSON + // "{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}" + // "{{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}}" + using (var encodeable = new FooBarEncodeable()) + { + var encoder = new JsonEncoder(Context, true, null, false); + + Assert.Throws(() => { + encoder.WriteEncodeable(null, encodeable, typeof(FooBarEncodeable)); + encoder.WriteEncodeable(null, encodeable, typeof(FooBarEncodeable)); + encoder.WriteEncodeable(null, encodeable, typeof(FooBarEncodeable)); + + } + ); + } + } + + /// + /// It is not valid to have a JSON object within another object without fieldname + /// + [TestCase(true, "[{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}]")] + public void Test_WriteMultipleEncodeablesWithoutFieldNames(bool topLevelIsArray, string expected) + { + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + + var encodeables = new List { new FooBarEncodeable(), new FooBarEncodeable(), new FooBarEncodeable() }; + try + { + var encoder = new JsonEncoder(Context, true, null, topLevelIsArray); + + foreach (var encodeable in encodeables) + { + encoder.WriteEncodeable(null, encodeable, typeof(FooBarEncodeable)); + } + + var encoded = encoder.CloseAndReturnText(); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + finally + { + encodeables.ForEach(e => e.Dispose()); + } + } + + /// + /// Write multiple encodeables with fieldnames. + /// + [Test] + public void Test_WriteMultipleEncodeablesWithFieldNames() + { + var expected = "{\"bar_1\":{\"Foo\":\"bar_1\"},\"bar_2\":{\"Foo\":\"bar_2\"},\"bar_3\":{\"Foo\":\"bar_3\"}}"; + + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + var encodeables = new List { new FooBarEncodeable(), new FooBarEncodeable(), new FooBarEncodeable() }; + try + { + var encoder = new JsonEncoder(Context, true, null, false); + + foreach (var encodeable in encodeables) + { + encoder.WriteEncodeable(encodeable.Foo, encodeable, typeof(FooBarEncodeable)); + } + + var encoded = encoder.CloseAndReturnText(); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + finally + { + encodeables.ForEach(e => e.Dispose()); + } + } + + /// + /// Write encodeable array with fieldname. + /// + [Test] + public void Test_WriteEncodeableArrayWithFieldName() + { + var encodeables = new List { new FooBarEncodeable(), new FooBarEncodeable(), new FooBarEncodeable() }; + + RunWriteEncodeableArrayTest( + "array", + encodeables, + "{\"array\":[{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}]}", + false); + } + + /// + /// It is not valid to have a JSON array within an object without fieldname. + /// + [TestCase(false, "[{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}]")] + [TestCase(true, "[[{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}]]")] + public void Test_WriteEncodeableArrayWithoutFieldName(bool topLevelIsArray, string expected) + { + var encodeables = new List { new FooBarEncodeable(), new FooBarEncodeable(), new FooBarEncodeable() }; + + RunWriteEncodeableArrayTest( + null, + encodeables, + expected, + topLevelIsArray); + } + + /// + /// Write encodeable top level array with fieldname. + /// + [Test] + public void Test_WriteEncodeableArrayWithFieldNameAndArrayAsTopLevel_Expect_Exception() + { + var encodeables = new List { new FooBarEncodeable(), new FooBarEncodeable(), new FooBarEncodeable() }; + + Assert.Throws(() => RunWriteEncodeableArrayTest( + "array", + encodeables, + "[\"array\":[{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}]]", + true, + true)); + } + + /// + /// Write encodeable top level array without fieldname. + /// + [Test] + public void Test_WriteEncodeableArrayWithoutFieldNameAndArrayAsTopLevel() + { + var encodeables = new List { new FooBarEncodeable(), new FooBarEncodeable(), new FooBarEncodeable() }; + + RunWriteEncodeableArrayTest( + null, + encodeables, + "[[{\"Foo\":\"bar_1\"},{\"Foo\":\"bar_2\"},{\"Foo\":\"bar_3\"}]]", + true); + } + + /// + /// Test if field names and values are properly escaped. + /// + [TestCase("\"Hello\".\"World\"", "\"Test\".\"Output\"", + "{\"\\\"Hello\\\".\\\"World\\\"\":{\"\\\"Hello\\\".\\\"World\\\"\":\"\\\"Test\\\".\\\"Output\\\"\"}}")] + [TestCase("\"Hello\".\"World\"\b\f\n\r\t\\", "\"Test\b\f\n\r\t\\\".\"Output\"", + "{\"\\\"Hello\\\".\\\"World\\\"\\b\\f\\n\\r\\t\\\\\":{\"\\\"Hello\\\".\\\"World\\\"\\b\\f\\n\\r\\t\\\\\":\"\\\"Test\\b\\f\\n\\r\\t\\\\\\\".\\\"Output\\\"\"}}")] + public void TestFieldValueEscapedEncodeable(string fieldname, string foo, string expected) + { + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + using (var encodeable = new FooBarEncodeable(fieldname, foo)) + { + var encoder = new JsonEncoder(Context, true); + encoder.WriteEncodeable(encodeable.FieldName, encodeable, typeof(FooBarEncodeable)); + + var encoded = encoder.CloseAndReturnText(); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + } + + /// + /// Test if field names and values are properly escaped when used in an array. + /// + [TestCase("\"Hello\".\"World\"", "\"Test\".\"Output\"", + "{\"\\\"Hello\\\".\\\"World\\\"\":[" + + "{\"\\\"Hello\\\".\\\"World\\\"\":\"\\\"Test\\\".\\\"Output\\\"\"}," + + "{\"\\\"Hello\\\".\\\"World\\\"\":\"\\\"Test\\\".\\\"Output\\\"\"}" + + "]}")] + public void TestFieldValueEscapedArray(string fieldname, string foo, string expected) + { + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + using (var encodeable = new FooBarEncodeable(fieldname, foo)) + { + var list = new List() { encodeable, encodeable }; + var encoder = new JsonEncoder(Context, true); + encoder.WriteEncodeableArray(encodeable.FieldName, list, typeof(FooBarEncodeable)); + + var encoded = encoder.CloseAndReturnText(); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + } + + /// + /// Test if field names and values are properly escaped when used in a variant. + /// + [TestCase("\"Hello\".\"World\"", "\"Test\".\"Output\"", + "{\"\\\"Hello\\\".\\\"World\\\"\":" + + "{\"\\\"Hello\\\".\\\"World\\\"\":\"\\\"Test\\\".\\\"Output\\\"\"}" + + "}")] + public void TestFieldValueEscapedVariant(string fieldname, string foo, string expected) + { + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + + using (var encodeable = new FooBarEncodeable(fieldname, foo)) + { + var variant = new Variant(new ExtensionObject(encodeable)); + // non reversible to save some space + var encoder = new JsonEncoder(Context, false); + encoder.WriteVariant(encodeable.FieldName, variant); + + var encoded = encoder.CloseAndReturnText(); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + } + + #endregion + + #region Private Methods + + private void RunWriteEncodeableArrayTest(string fieldName, List encodeables, string expected, bool topLevelIsArray, bool noExpectedValidation = false) + { + try + { + if (!noExpectedValidation) + { + TestContext.Out.WriteLine("Expected:"); + _ = PrettifyAndValidateJson(expected); + } + + var encoder = new JsonEncoder(Context, true, null, topLevelIsArray); + + encoder.WriteEncodeableArray( + fieldName, + encodeables.Cast().ToList(), + typeof(FooBarEncodeable)); + + var encoded = encoder.CloseAndReturnText(); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(encoded); + + TestContext.Out.WriteLine("Formatted Encoded:"); + _ = PrettifyAndValidateJson(encoded); + + Assert.That(encoded, Is.EqualTo(expected)); + } + finally + { + encodeables.ForEach(e => e.Dispose()); + } + } + + #endregion + + #region Private Fields + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonValidationData.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonValidationData.cs new file mode 100644 index 00000000..dee61809 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonValidationData.cs @@ -0,0 +1,99 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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; + +namespace Opc.Ua.Core.Tests.Types.Encoders +{ + /// + /// Helper class to create list of encoding validation items. + /// + public class JsonValidationData : IFormattable + { + public JsonValidationData() { } + + public JsonValidationData(BuiltInType builtInType) + { + BuiltInType = builtInType; + } + + public BuiltInType BuiltInType; + public object Instance; + public string ExpectedReversible; + public string ExpectedNonReversible; + public bool IncludeDefaultValue; + + public string ToString(string format, IFormatProvider formatProvider) + { + return $"{BuiltInType}:{Instance}" + (IncludeDefaultValue ? ":Default" : ""); + } + }; + + public class JsonValidationDataCollection : List + { + public JsonValidationDataCollection() { } + public JsonValidationDataCollection(IEnumerable collection) : base(collection) { } + public JsonValidationDataCollection(int capacity) : base(capacity) { } + public static JsonValidationDataCollection ToJsonValidationDataCollection(JsonValidationData[] values) + { + return values != null ? new JsonValidationDataCollection(values) : new JsonValidationDataCollection(); + } + + public void Add( + BuiltInType builtInType, + object instance, + string expectedReversible, + string expectedNonReversible) + { + Add(new JsonValidationData() { + BuiltInType = builtInType, + Instance = instance, + ExpectedReversible = expectedReversible, + ExpectedNonReversible = expectedNonReversible + }); + } + + public void Add( + BuiltInType builtInType, + object instance, + string expectedReversible, + string expectedNonReversible, + bool includeDefaultValue) + { + Add(new JsonValidationData() { + BuiltInType = builtInType, + Instance = instance, + ExpectedReversible = expectedReversible, + ExpectedNonReversible = expectedNonReversible, + IncludeDefaultValue = includeDefaultValue + }); + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Schemas/BinarySchemaWellKnownTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Schemas/BinarySchemaWellKnownTests.cs new file mode 100644 index 00000000..fd520b82 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Schemas/BinarySchemaWellKnownTests.cs @@ -0,0 +1,82 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Reflection; +using System.Threading.Tasks; +using NUnit.Framework; +using Opc.Ua.Schema.Binary; + +namespace Opc.Ua.Core.Tests.Types.Schemas +{ + /// + /// Tests for the Binary Schema Validator class. + /// + [TestFixture, Category("BinarySchema")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class BinarySchemaWellKnownTests : BinarySchemaValidator + { + #region DataPointSources + [DatapointSource] + public string[][] WellKnownSchemaData = WellKnownDictionaries; + #endregion + + #region Test Methods + /// + /// Load well known resource type dictionaries. + /// + [Theory] + public void LoadResources(string[] schemaData) + { + Assert.That(schemaData.Length == 2); + var assembly = typeof(BinarySchemaValidator).GetTypeInfo().Assembly; + var resource = LoadResource(typeof(TypeDictionary), schemaData[1], assembly); + Assert.IsNotNull(resource); + Assert.AreEqual(resource.GetType(), typeof(TypeDictionary)); + } + + /// + /// Load and validate well known resource type dictionaries. + /// + [Theory] + public async Task ValidateResources(string[] schemaData) + { + var assembly = typeof(BinarySchemaValidator).GetTypeInfo().Assembly; + var stream = assembly.GetManifestResourceStream(schemaData[1]); + Assert.IsNotNull(stream); + var schema = new BinarySchemaValidator(); + Assert.IsNotNull(schema); + await schema.Validate(stream); + Assert.IsNotNull(schema.Dictionary); + Assert.AreEqual(schemaData[0], schema.Dictionary.TargetNamespace); + } + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/HiResClock.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/HiResClock.cs new file mode 100644 index 00000000..60a9db69 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/HiResClock.cs @@ -0,0 +1,148 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Diagnostics; +using NUnit.Framework; + +namespace Opc.Ua.Core.Tests.Types.UtilsTests +{ + /// + /// Tests for the BuiltIn Types. + /// + [TestFixture, Category("Utils")] + [SetCulture("en-us"), SetUICulture("en-us")] + public class HiResClockTests + { + /// + /// How long the tests are running. + /// + public const int HiResClockTestDuration = 2000; + + #region Test Setup + [OneTimeTearDown] + protected void OneTimeTearDown() + { + HiResClock.Disabled = false; + } + + [TearDown] + protected void TearDown() + { + HiResClock.Disabled = false; + } + #endregion + + #region Test Methods + /// + /// Validate HiResClock defaults, platform dependant. + /// + [Test, Order(100)] + public void HiResParameters() + { + Assert.LessOrEqual(1.0, HiResClock.TicksPerMillisecond); + Assert.LessOrEqual(1000, HiResClock.Frequency); + Assert.False(HiResClock.Disabled); + Assert.LessOrEqual(1.0, TimeSpan.TicksPerMillisecond); + HiResClock.Disabled = true; + Assert.True(HiResClock.Disabled); + Assert.AreEqual(TimeSpan.TicksPerSecond, HiResClock.Frequency); + Assert.AreEqual(TimeSpan.TicksPerMillisecond, HiResClock.TicksPerMillisecond); + HiResClock.Disabled = false; + Assert.False(HiResClock.Disabled); + } + + /// + /// Validate tick counts forward only and has at least one tick per millsecond resolution. + /// + [Theory, Order(200)] + public void HiResClockTickCount(bool disabled) + { + HiResClock.Disabled = disabled; + Assert.AreEqual(disabled, HiResClock.Disabled); + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + long lastTickCount = HiResClock.TickCount64; + long firstTickCount = lastTickCount; + int counts = 0; + while (stopWatch.ElapsedMilliseconds <= HiResClockTestDuration) + { + long tickCount; + do + { + tickCount = HiResClock.TickCount64; + } + while (tickCount == lastTickCount); + Assert.LessOrEqual(lastTickCount, tickCount); + lastTickCount = tickCount; + counts++; + } + Assert.LessOrEqual(1000, counts); + stopWatch.Stop(); + long elapsed = lastTickCount - firstTickCount; + TestContext.Out.WriteLine("HiResClock counts: {0} resolution: {1}µs", counts, stopWatch.ElapsedMilliseconds * 1000 / counts); + // test accuracy of counter vs. stop watch + Assert.That(elapsed, Is.EqualTo(stopWatch.ElapsedMilliseconds).Within(2).Percent); + } + + /// + /// Validate DateTime.UtcNow counts forward and has a high resolution. + /// + [Theory, Order(300)] + public void HiResUtcNowTickCount(bool disabled) + { + HiResClock.Disabled = disabled; + Assert.AreEqual(disabled, HiResClock.Disabled); + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + long lastTickCount = HiResClock.UtcNow.Ticks; + long firstTickCount = lastTickCount; + int counts = 0; + while (stopWatch.ElapsedMilliseconds <= HiResClockTestDuration) + { + long tickCount; + do + { + tickCount = HiResClock.UtcNow.Ticks; + } + while (tickCount == lastTickCount); + Assert.LessOrEqual(lastTickCount, tickCount); + lastTickCount = tickCount; + counts++; + } + Assert.LessOrEqual(1000, counts); + stopWatch.Stop(); + long elapsed = (lastTickCount - firstTickCount) / TimeSpan.TicksPerMillisecond; + TestContext.Out.WriteLine("HiResClock counts: {0} resolution: {1}µs", counts, stopWatch.ElapsedMilliseconds * 1000 / counts); + // test accuracy of counter vs. stop watch + Assert.That(elapsed, Is.EqualTo(stopWatch.ElapsedMilliseconds).Within(2).Percent); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/NumericRangeTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/NumericRangeTests.cs new file mode 100644 index 00000000..503820cc --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/NumericRangeTests.cs @@ -0,0 +1,189 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.Linq; +using NUnit.Framework; +using Opc.Ua.Test; + +namespace Opc.Ua.Core.Tests.Types.NumericRange +{ + /// + /// Tests for the BuiltIn Types. + /// + [TestFixture, Category("NumericRange")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class NumericRangeTests + { + + #region Test Setup + [OneTimeSetUp] + protected void OneTimeSetUp() + { + } + + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + + [SetUp] + protected void SetUp() + { + + } + + [TearDown] + protected void TearDown() + { + } + #endregion + + #region Test Methods + /// + /// Test that NumericRange can be applied to Matrix objects + /// + [Test] + [Category("NumericRange")] + public void ApplyRangeMatrixTest() + { + int[,] int3x3Matrix = new int[,] + { + { 1, 2, 3 }, + { 4, 5, 6 }, + { 7, 8, 9 }, + }; + + Matrix matrix = new Matrix(int3x3Matrix, BuiltInType.Int32); + + // Select the center element + Opc.Ua.NumericRange numericRange = Opc.Ua.NumericRange.Parse("1,1"); + + object value = matrix; + + StatusCode statusCode = numericRange.ApplyRange(ref value); + + Assert.AreEqual(new StatusCode(StatusCodes.Good), statusCode); + + int[,] range = value as int[,]; + + Assert.NotNull(range, "Applied range null or not type of int[,]"); + Assert.AreEqual(2, range.Rank); + Assert.AreEqual(5, range[0, 0]); + } + + /// + /// Test that Matrix object can be updated by NumericRange.UpdateRange + /// + [Test] + [Category("NumericRange")] + public void UpdateRangeMatrixTest() + { + int[,] dstInt3x3Matrix = new int[,] + { + { 1, 2, 3 }, + { 4, 5, 6 }, + { 7, 8, 9 }, + }; + + Matrix dstMatrix = new Matrix(dstInt3x3Matrix, BuiltInType.Int32); + + // Update the center element + Opc.Ua.NumericRange numericRange = Opc.Ua.NumericRange.Parse("1,1"); + object dst = dstMatrix; + StatusCode statusCode = numericRange.UpdateRange(ref dst, new int[,] { { 10 } }); + + Assert.AreEqual(new StatusCode(StatusCodes.Good), statusCode); + + dstMatrix = dst as Matrix; + Assert.NotNull(dstMatrix); + + int[,] modifiedInt3x3Matrix = dstMatrix.ToArray() as int[,]; + + Assert.AreEqual(new int[,] + { + { 1, 2, 3 }, + { 4, 10, 6 }, + { 7, 8, 9 }, + }, modifiedInt3x3Matrix); + } + + /// + /// Test that String array object can be updated using NumericRange.UpdateRange when using sub ranges + /// + [Test] + [Category("NumericRange")] + public void UpdateStringArrayTest() + { + // Update the middle element "Test2" to "That2" by modifying "es" to "ha". + Opc.Ua.NumericRange numericRange = Opc.Ua.NumericRange.Parse("1,1:2"); + object dst = new string[] { "Test1", "Test2", "Test3" }; + StatusCode statusCode = numericRange.UpdateRange(ref dst, new string[] { "ha" }); + Assert.AreEqual(new StatusCode(StatusCodes.Good), statusCode); + + string[] updatedValue = dst as string[]; + Assert.NotNull(updatedValue); + Assert.AreEqual(new string[] { "Test1", "That2", "Test3" }, updatedValue); + } + + /// + /// Test that ByteString array object can be updated using NumericRange.UpdateRange when using sub ranges + /// + [Test] + [Category("NumericRange")] + public void UpdateByteStringArrayTest() + { + // Update the middle element <0x55, 0x66, 0x77, 0x88> to <0x55, 0xDD, 0xEE, 0x88> by modifying 0x66 to 0xDD and 0x77 to 0xEE. + Opc.Ua.NumericRange numericRange = Opc.Ua.NumericRange.Parse("1,1:2"); + object dst = new byte[][] + { + new byte[] { 0x11, 0x22, 0x33, 0x44 }, + new byte[] { 0x55, 0x66, 0x77, 0x88 }, + new byte[] { 0x99, 0xAA, 0xBB, 0xCC } + }; + StatusCode statusCode = numericRange.UpdateRange(ref dst, new byte[][] { new byte[] { 0xDD, 0xEE } }); + Assert.AreEqual(new StatusCode(StatusCodes.Good), statusCode); + + byte[][] updatedValue = dst as byte[][]; + Assert.NotNull(updatedValue); + Assert.AreEqual(new byte[][] + { + new byte[] { 0x11, 0x22, 0x33, 0x44 }, + new byte[] { 0x55, 0xDD, 0xEE, 0x88 }, + new byte[] { 0x99, 0xAA, 0xBB, 0xCC } + }, updatedValue); + + } + + } + + #endregion + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/UtilTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/UtilTests.cs new file mode 100644 index 00000000..9e9efb1a --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Core.Tests/Types/Utils/UtilTests.cs @@ -0,0 +1,93 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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 NUnit.Framework; + +namespace Opc.Ua.Core.Tests.Types.UtilsTests +{ + /// + /// Tests for the BuiltIn Types. + /// + [TestFixture, Category("Utils")] + [SetCulture("en-us"), SetUICulture("en-us")] + [Parallelizable] + public class UtilsTests + { + #region Test Methods + /// + /// Convert to and from little endian hex string. + /// + [Test] + public void ToHexFromHexLittleEndian() + { + byte[] blob = new byte[] { 0, 1, 2, 3, 4, 5, 6, 255 }; + string hex = "00010203040506FF"; + var hexutil = Utils.ToHexString(blob); + Assert.AreEqual(hex, hexutil); + var byteblob = Utils.FromHexString(hex); + Assert.AreEqual(blob, byteblob); + var byteblob2 = Utils.FromHexString(hexutil); + Assert.AreEqual(blob, byteblob2); + var hexutil2 = Utils.ToHexString(byteblob); + Assert.AreEqual(hex, hexutil2); + } + + /// + /// Convert to and from little endian hex string. + /// + [Test] + public void ToHexEndianessValidation() + { + // definition as big endian 64,206(0xFACE) + var bigEndian = new byte[] { 64206 / 256, 64206 % 256 }; + // big endian is written as FA CE. + Assert.AreEqual("FACE", Utils.ToHexString(bigEndian, false)); + // In Little Endian it's written as CE FA + Assert.AreEqual("CEFA", Utils.ToHexString(bigEndian, true)); + // definition as little endian 64,206(0xFACE) + var littleEndian = new byte[] { 64206 & 0xff, 64206 >> 8 }; + // big endian is written as FA CE. + Assert.AreEqual("FACE", Utils.ToHexString(littleEndian, true)); + // In Little Endian it's written as CE FA + Assert.AreEqual("CEFA", Utils.ToHexString(littleEndian, false)); } + + /// + /// Convert to big endian hex string. + /// + public void ToHexBigEndian() + { + byte[] blob = new byte[] { 0, 1, 2, 3, 4, 5, 6, 255 }; + string hex = "FF06050403020100"; + var hexutil = Utils.ToHexString(blob, true); + Assert.AreEqual(hex, hexutil); + } + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/ClientTest.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/ClientTest.cs new file mode 100644 index 00000000..63088080 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/ClientTest.cs @@ -0,0 +1,1101 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; +using NUnit.Framework; + +namespace Opc.Ua.Gds.Tests +{ + /// + /// Test GDS Registration and Client Pull. + /// + [TestFixture, Category("GDSRegistrationAndPull"), Category("GDS")] + [SetCulture("en-us"), SetUICulture("en-us")] + [NonParallelizable] + public class ClientTest + { + #region Test Setup + public class ConnectionProfile : IFormattable + { + public ConnectionProfile(string securityProfileUri, MessageSecurityMode messageSecurityMode) + { + SecurityProfileUri = securityProfileUri; + MessageSecurityMode = messageSecurityMode; + } + + public string SecurityProfileUri { get; set; } + public MessageSecurityMode MessageSecurityMode { get; set; } + + public string ToString(string format, IFormatProvider formatProvider) + { + return $"{SecurityProfileUri.Split('#').Last()}:{MessageSecurityMode}"; + } + + } + + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected async Task OneTimeSetUp() + { + // start GDS + _server = await TestUtils.StartGDS(true); + + // load client + _gdsClient = new GlobalDiscoveryTestClient(true); + await _gdsClient.LoadClientConfiguration(_server.BasePort); + + // good applications test set + _appTestDataGenerator = new ApplicationTestDataGenerator(1); + _goodApplicationTestSet = _appTestDataGenerator.ApplicationTestSet(goodApplicationsTestCount, false); + _invalidApplicationTestSet = _appTestDataGenerator.ApplicationTestSet(invalidApplicationsTestCount, true); + + _goodRegistrationOk = false; + _invalidRegistrationOk = false; + _goodNewKeyPairRequestOk = false; + } + + /// + /// Tear down the Global Discovery Server and disconnect the Client + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + _gdsClient.DisconnectClient(); + _gdsClient = null; + _server.StopServer(); + _server = null; + Thread.Sleep(1000); + } + + [SetUp] + protected void SetUp() + { + _server.ResetLogFile(); + } + + [TearDown] + protected void TearDown() + { + DisconnectGDS(); + try + { + TestContext.AddTestAttachment(_server.GetLogFilePath(), "GDS Client and Server logs"); + } + catch { } + } + #endregion + + #region Test Methods + /// + /// Clean the app database from application Uri used during test. + /// + [Test, Order(10)] + public void CleanGoodApplications() + { + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + var applicationDataRecords = _gdsClient.GDSClient.FindApplication(application.ApplicationRecord.ApplicationUri); + if (applicationDataRecords != null) + { + foreach (var applicationDataRecord in applicationDataRecords) + { + _gdsClient.GDSClient.UnregisterApplication(applicationDataRecord.ApplicationId); + } + } + } + } + + /// + /// Register the good applications in the database. + /// + [Test, Order(100)] + public void RegisterGoodApplications() + { + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + NodeId id = _gdsClient.GDSClient.RegisterApplication(application.ApplicationRecord); + Assert.NotNull(id); + Assert.IsFalse(id.IsNullNodeId); + Assert.That(id.IdType == IdType.Guid || id.IdType == IdType.String); + application.ApplicationRecord.ApplicationId = id; + } + _goodRegistrationOk = true; + } + + [Test, Order(105)] + public void RegisterDuplicateGoodApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + ApplicationRecordDataType newRecord = (ApplicationRecordDataType)application.ApplicationRecord.MemberwiseClone(); + newRecord.ApplicationId = null; + NodeId id = _gdsClient.GDSClient.RegisterApplication(newRecord); + Assert.NotNull(id); + Assert.IsFalse(id.IsNullNodeId); + Assert.That(id.IdType == IdType.Guid || id.IdType == IdType.String); + newRecord.ApplicationId = id; + var applicationDataRecords = _gdsClient.GDSClient.FindApplication(newRecord.ApplicationUri); + Assert.NotNull(applicationDataRecords); + bool newIdFound = false; + bool registeredIdFound = false; + foreach (var applicationDataRecord in applicationDataRecords) + { + if (applicationDataRecord.ApplicationId == newRecord.ApplicationId) + { + _gdsClient.GDSClient.UnregisterApplication(id); + newIdFound = true; + } + else if (applicationDataRecord.ApplicationId == application.ApplicationRecord.ApplicationId) + { + registeredIdFound = true; + } + } + Assert.IsTrue(newIdFound); + Assert.IsTrue(registeredIdFound); + } + } + + [Test, Order(110)] + public void RegisterInvalidApplications() + { + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { _ = _gdsClient.GDSClient.RegisterApplication(application.ApplicationRecord); }, Throws.Exception); + } + _invalidRegistrationOk = true; + } + + [Test, Order(120)] + public void RegisterApplicationAsUser() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(false); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { _ = _gdsClient.GDSClient.RegisterApplication(application.ApplicationRecord); }, Throws.Exception); + } + } + + [Test, Order(200)] + public void UpdateGoodApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + var updatedApplicationRecord = (ApplicationRecordDataType)application.ApplicationRecord.MemberwiseClone(); + updatedApplicationRecord.ApplicationUri += "update"; + _gdsClient.GDSClient.UpdateApplication(updatedApplicationRecord); + var result = _gdsClient.GDSClient.FindApplication(updatedApplicationRecord.ApplicationUri); + _gdsClient.GDSClient.UpdateApplication(application.ApplicationRecord); + Assert.NotNull(result); + Assert.GreaterOrEqual(1, result.Length, "Couldn't find updated application record"); + } + } + + [Test, Order(210)] + public void UpdateGoodApplicationsWithNewGuid() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + var testApplicationRecord = (ApplicationRecordDataType)application.ApplicationRecord.MemberwiseClone(); + testApplicationRecord.ApplicationId = new NodeId(Guid.NewGuid()); + Assert.That(() => { _gdsClient.GDSClient.UpdateApplication(testApplicationRecord); }, Throws.Exception); + } + } + + [Test, Order(210)] + public void UpdateGoodApplicationsWithNewString() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + var testApplicationRecord = (ApplicationRecordDataType)application.ApplicationRecord.MemberwiseClone(); + testApplicationRecord.ApplicationId = new NodeId(_appTestDataGenerator.DataGenerator.GetRandomString("en")); + Assert.That(() => { _gdsClient.GDSClient.UpdateApplication(testApplicationRecord); }, Throws.Exception); + } + } + + [Test, Order(220)] + public void UpdateInvalidApplications() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { _gdsClient.GDSClient.UpdateApplication(application.ApplicationRecord); }, Throws.Exception); + } + } + + [Test, Order(400)] + public void FindGoodApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.FindApplication(application.ApplicationRecord.ApplicationUri); + Assert.NotNull(result); + Assert.GreaterOrEqual(result.Length, 1, "Couldn't find good application"); + } + } + + [Test, Order(400)] + public void FindInvalidApplications() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + var result = _gdsClient.GDSClient.FindApplication(application.ApplicationRecord.ApplicationUri); + if (result != null) + { + Assert.NotNull(result); + Assert.AreEqual(0, result.Length, "Found invalid application on server"); + } + } + } + + [Test, Order(400)] + public void GetGoodApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + result.ServerCapabilities.Sort(); + application.ApplicationRecord.ServerCapabilities.Sort(); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord, result)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestApplicationId() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.ApplicationId, result.ApplicationId)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestApplicationNames() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.ApplicationNames, result.ApplicationNames)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestApplicationType() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.ApplicationType, result.ApplicationType)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestApplicationUri() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.ApplicationUri, result.ApplicationUri)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestDiscoveryUrls() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.DiscoveryUrls, result.DiscoveryUrls)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestProductUri() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.ProductUri, result.ProductUri)); + } + } + + [Test, Order(401)] + public void GetGoodApplicationsTestServerCapabilities() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); + Assert.NotNull(result); + result.ServerCapabilities.Sort(); + application.ApplicationRecord.ServerCapabilities.Sort(); + Assert.IsTrue(Utils.IsEqual(application.ApplicationRecord.ServerCapabilities, result.ServerCapabilities)); + } + } + + [Test, Order(400)] + public void GetInvalidApplications() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { var result = _gdsClient.GDSClient.GetApplication(application.ApplicationRecord.ApplicationId); }, Throws.Exception); + } + } + + [Test, Order(410)] + public void QueryAllServers() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + // get all servers + var allServers = _gdsClient.GDSClient.QueryServers(0, "", "", "", new List()); + int totalCount = 0; + uint firstID = uint.MaxValue, lastID = 0; + Assert.IsNotNull(allServers); + foreach (var server in allServers) + { + var oneServers = _gdsClient.GDSClient.QueryServers(server.RecordId, 1, "", "", "", new List()); + Assert.IsNotNull(oneServers); + Assert.GreaterOrEqual(oneServers.Count, 1); + foreach (var oneServer in oneServers) + { + Assert.AreEqual(oneServer.RecordId, server.RecordId); + } + firstID = Math.Min(firstID, server.RecordId); + lastID = Math.Max(lastID, server.RecordId); + totalCount++; + } + Assert.GreaterOrEqual(totalCount, goodApplicationsTestCount); + Assert.AreEqual(totalCount, allServers.Count); + Assert.GreaterOrEqual(lastID, firstID); + Assert.GreaterOrEqual(lastID, 1); + Assert.GreaterOrEqual(firstID, 1); + } + + [Test, Order(411)] + public void QueryAllServersNull() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + // get all servers + var allServers = _gdsClient.GDSClient.QueryServers(0, null, null, null, null); + int totalCount = 0; + uint firstID = uint.MaxValue, lastID = 0; + Assert.IsNotNull(allServers); + foreach (var server in allServers) + { + var oneServers = _gdsClient.GDSClient.QueryServers(server.RecordId, 1, null, null, null, null); + Assert.IsNotNull(oneServers); + Assert.GreaterOrEqual(oneServers.Count, 1); + foreach (var oneServer in oneServers) + { + Assert.AreEqual(oneServer.RecordId, server.RecordId); + } + firstID = Math.Min(firstID, server.RecordId); + lastID = Math.Max(lastID, server.RecordId); + totalCount++; + } + Assert.GreaterOrEqual(totalCount, goodApplicationsTestCount); + Assert.AreEqual(totalCount, allServers.Count); + Assert.GreaterOrEqual(lastID, firstID); + Assert.GreaterOrEqual(lastID, 1); + Assert.GreaterOrEqual(firstID, 1); + } + + [Test, Order(420)] + public void QueryGoodServersBatches() + { + // repeating queries to get all servers + uint nextID = 0; + uint iterationCount = Math.Min(10, (uint)(goodApplicationsTestCount / 2)); + int serversOnNetwork = 0; + int goodServersOnNetwork = GoodServersOnNetworkCount(); + while (true) + { + var iterServers = _gdsClient.GDSClient.QueryServers(nextID, iterationCount, "", "", "", null); + Assert.IsNotNull(iterServers); + serversOnNetwork += iterServers.Count; + if (iterServers.Count == 0) + { + break; + } + uint previousID = nextID; + nextID = iterServers[iterServers.Count - 1].RecordId + 1; + Assert.Greater(nextID, previousID); + } + Assert.GreaterOrEqual(serversOnNetwork, goodServersOnNetwork); + } + + [Test, Order(430)] + public void QueryServersByName() + { + // search aplications by name + const int searchPatternLength = 5; + foreach (var application in _goodApplicationTestSet) + { + var atLeastOneServer = _gdsClient.GDSClient.QueryServers(1, application.ApplicationRecord.ApplicationNames[0].Text, "", "", null); + Assert.IsNotNull(atLeastOneServer); + if (application.ApplicationRecord.ApplicationType != ApplicationType.Client) + { + Assert.GreaterOrEqual(atLeastOneServer.Count, 1); + } + else + { + Assert.AreEqual(atLeastOneServer.Count, 0); + } + + string searchName = application.ApplicationRecord.ApplicationNames[0].Text.Trim(); + if (searchName.Length > searchPatternLength) + { + searchName = searchName.Substring(0, searchPatternLength) + "%"; + } + atLeastOneServer = _gdsClient.GDSClient.QueryServers(1, searchName, "", "", null); + Assert.IsNotNull(atLeastOneServer); + if (application.ApplicationRecord.ApplicationType != ApplicationType.Client) + { + Assert.GreaterOrEqual(atLeastOneServer.Count, 1); + } + } + } + + [Test, Order(440)] + public void QueryServersByAppUri() + { + // search aplications by name + const int searchPatternLength = 5; + foreach (var application in _goodApplicationTestSet) + { + var atLeastOneServer = _gdsClient.GDSClient.QueryServers(1, null, application.ApplicationRecord.ApplicationUri, null, null); + Assert.IsNotNull(atLeastOneServer); + if (application.ApplicationRecord.ApplicationType != ApplicationType.Client) + { + Assert.GreaterOrEqual(atLeastOneServer.Count, 1); + } + else + { + Assert.AreEqual(atLeastOneServer.Count, 0); + } + + string searchName = application.ApplicationRecord.ApplicationUri; + if (searchName.Length > searchPatternLength) + { + searchName = searchName.Substring(0, searchPatternLength) + "%"; + } + atLeastOneServer = _gdsClient.GDSClient.QueryServers(1, null, searchName, null, null); + Assert.IsNotNull(atLeastOneServer); + if (application.ApplicationRecord.ApplicationType != ApplicationType.Client) + { + Assert.GreaterOrEqual(atLeastOneServer.Count, 1); + } + } + } + + [Test, Order(450)] + public void QueryServersByProductUri() + { + // search aplications by name + const int searchPatternLength = 5; + foreach (var application in _goodApplicationTestSet) + { + var atLeastOneServer = _gdsClient.GDSClient.QueryServers(1, null, null, application.ApplicationRecord.ProductUri, null); + Assert.IsNotNull(atLeastOneServer); + if (application.ApplicationRecord.ApplicationType != ApplicationType.Client) + { + Assert.GreaterOrEqual(atLeastOneServer.Count, 1); + } + else + { + Assert.AreEqual(atLeastOneServer.Count, 0); + } + + string searchName = application.ApplicationRecord.ProductUri; + if (searchName.Length > searchPatternLength) + { + searchName = searchName.Substring(0, searchPatternLength) + "%"; + } + atLeastOneServer = _gdsClient.GDSClient.QueryServers(1, null, null, searchName, null); + Assert.IsNotNull(atLeastOneServer); + if (application.ApplicationRecord.ApplicationType != ApplicationType.Client) + { + Assert.GreaterOrEqual(atLeastOneServer.Count, 1); + } + } + } + + [Test, Order(480)] + public void QueryAllApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(false); + // get all applications + DateTime lastResetCounterTime; + uint nextRecordId; + var allApplications = _gdsClient.GDSClient.QueryApplications(0, 0, "", "", 0, "", new List(), out lastResetCounterTime, out nextRecordId); + int totalCount = 0; + Assert.IsNotNull(allApplications); + nextRecordId = 0; + foreach (var application in allApplications) + { + var oneApplication = _gdsClient.GDSClient.QueryApplications(nextRecordId, 1, "", "", 0, "", new List(), out lastResetCounterTime, out nextRecordId); + Assert.IsNotNull(oneApplication); + Assert.GreaterOrEqual(oneApplication.Count, 1); + foreach (var oneApp in oneApplication) + { + //Assert.AreEqual(oneApp., server.RecordId); + } + totalCount++; + } + Assert.GreaterOrEqual(totalCount, goodApplicationsTestCount); + Assert.AreEqual(totalCount, allApplications.Count); + } + + + [Test, Order(500)] + public void StartGoodNewKeyPairRequests() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + Assert.Null(application.CertificateRequestId); + NodeId requestId = _gdsClient.GDSClient.StartNewKeyPairRequest( + application.ApplicationRecord.ApplicationId, + application.CertificateGroupId, + application.CertificateTypeId, + application.Subject, + application.DomainNames, + application.PrivateKeyFormat, + application.PrivateKeyPassword); + Assert.NotNull(requestId); + application.CertificateRequestId = requestId; + } + _goodNewKeyPairRequestOk = true; + } + + [Test, Order(501)] + public void StartInvalidNewKeyPairRequests() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.Null(application.CertificateRequestId); + Assert.That(() => { + _ = _gdsClient.GDSClient.StartNewKeyPairRequest( + application.ApplicationRecord.ApplicationId, + application.CertificateGroupId, + application.CertificateTypeId, + application.Subject, + application.DomainNames, + application.PrivateKeyFormat, + application.PrivateKeyPassword); + }, Throws.Exception); + } + } + + [Test, Order(510)] + public void FinishGoodNewKeyPairRequests() + { + AssertIgnoreTestWithoutGoodRegistration(); + AssertIgnoreTestWithoutGoodNewKeyPairRequest(); + ConnectGDS(true); + bool requestBusy; + DateTime now = DateTime.UtcNow; + do + { + requestBusy = false; + foreach (var application in _goodApplicationTestSet) + { + if (application.CertificateRequestId != null) + { + try + { + byte[] certificate = _gdsClient.GDSClient.FinishRequest( + application.ApplicationRecord.ApplicationId, + application.CertificateRequestId, + out byte[] privateKey, + out byte[][] issuerCertificates + ); + + if (certificate != null) + { + application.CertificateRequestId = null; + + Assert.NotNull(certificate); + Assert.NotNull(privateKey); + Assert.NotNull(issuerCertificates); + application.Certificate = certificate; + application.PrivateKey = privateKey; + application.IssuerCertificates = issuerCertificates; + X509TestUtils.VerifySignedApplicationCert(application, certificate, issuerCertificates); + X509TestUtils.VerifyApplicationCertIntegrity(certificate, privateKey, application.PrivateKeyPassword, application.PrivateKeyFormat, issuerCertificates); + } + else + { + requestBusy = true; + } + } + catch (ServiceResultException sre) + { + if (sre.StatusCode == StatusCodes.BadNothingToDo && + now.AddMinutes(5) > DateTime.UtcNow) + { + requestBusy = true; + Thread.Sleep(1000); + } + else + { + throw; + } + } + + } + } + + if (requestBusy) + { + Thread.Sleep(5000); + Console.WriteLine("Waiting for certificate approval"); + } + + } while (requestBusy); + } + + [Test, Order(511)] + public void FinishInvalidNewKeyPairRequests() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { + _ = _gdsClient.GDSClient.FinishRequest( + application.ApplicationRecord.ApplicationId, + new NodeId(Guid.NewGuid()), + out byte[] privateKey, + out byte[][] issuerCertificates + ); + }, Throws.Exception); + } + } + + [Test, Order(520)] + public void StartGoodSigningRequests() + { + AssertIgnoreTestWithoutGoodRegistration(); + AssertIgnoreTestWithoutGoodNewKeyPairRequest(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + Assert.Null(application.CertificateRequestId); + X509Certificate2 csrCertificate; + if (application.PrivateKeyFormat == "PFX") + { + csrCertificate = X509Utils.CreateCertificateFromPKCS12(application.PrivateKey, application.PrivateKeyPassword); + } + else + { + csrCertificate = CertificateFactory.CreateCertificateWithPEMPrivateKey(new X509Certificate2(application.Certificate), application.PrivateKey, application.PrivateKeyPassword); + } + byte[] certificateRequest = CertificateFactory.CreateSigningRequest(csrCertificate, application.DomainNames); + csrCertificate.Dispose(); + NodeId requestId = _gdsClient.GDSClient.StartSigningRequest( + application.ApplicationRecord.ApplicationId, + application.CertificateGroupId, + application.CertificateTypeId, + certificateRequest); + Assert.NotNull(requestId); + application.CertificateRequestId = requestId; + } + } + + [Test, Order(530)] + public void FinishGoodSigningRequests() + { + AssertIgnoreTestWithoutGoodRegistration(); + AssertIgnoreTestWithoutGoodNewKeyPairRequest(); + ConnectGDS(true); + bool requestBusy; + DateTime now = DateTime.UtcNow; + do + { + requestBusy = false; + + foreach (var application in _goodApplicationTestSet) + { + if (application.CertificateRequestId != null) + { + try + { + var certificate = _gdsClient.GDSClient.FinishRequest( + application.ApplicationRecord.ApplicationId, + application.CertificateRequestId, + out byte[] privateKey, + out byte[][] issuerCertificates + ); + + if (certificate != null) + { + application.CertificateRequestId = null; + + Assert.Null(privateKey); + Assert.NotNull(issuerCertificates); + application.Certificate = certificate; + application.IssuerCertificates = issuerCertificates; + X509TestUtils.VerifySignedApplicationCert(application, certificate, issuerCertificates); + X509TestUtils.VerifyApplicationCertIntegrity(certificate, application.PrivateKey, application.PrivateKeyPassword, application.PrivateKeyFormat, issuerCertificates); + } + else + { + requestBusy = true; + } + } + catch (ServiceResultException sre) + { + if (sre.StatusCode == StatusCodes.BadNothingToDo && + now.AddMinutes(5) > DateTime.UtcNow) + { + requestBusy = true; + Thread.Sleep(1000); + } + else + { + throw; + } + } + + } + } + + if (requestBusy) + { + Thread.Sleep(5000); + Console.WriteLine("Waiting for certificate approval"); + } + } while (requestBusy); + + } + + [Test, Order(550)] + public void StartGoodSigningRequestWithInvalidAppURI() + { + AssertIgnoreTestWithoutGoodRegistration(); + AssertIgnoreTestWithoutGoodNewKeyPairRequest(); + ConnectGDS(true); + var application = _goodApplicationTestSet[0]; + Assert.Null(application.CertificateRequestId); + // load csr with invalid app URI + var testCSR = Utils.GetAbsoluteFilePath("test.csr", true, true, false); + byte[] certificateRequest = File.ReadAllBytes(testCSR); + Assert.That(() => { + _ = _gdsClient.GDSClient.StartSigningRequest( + application.ApplicationRecord.ApplicationId, + application.CertificateGroupId, + application.CertificateTypeId, + certificateRequest); + }, Throws.Exception); + } + + + [Test, Order(600)] + public void GetGoodCertificateGroupsNullTests() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + + Assert.That(() => { + _gdsClient.GDSClient.GetCertificateGroups(null); + }, Throws.Exception); + + foreach (var application in _goodApplicationTestSet) + { + var trustListId = _gdsClient.GDSClient.GetTrustList(application.ApplicationRecord.ApplicationId, null); + var trustList = _gdsClient.GDSClient.ReadTrustList(trustListId); + Assert.That(() => { + _gdsClient.GDSClient.ReadTrustList(null); + }, Throws.Exception); + var certificateGroups = _gdsClient.GDSClient.GetCertificateGroups(application.ApplicationRecord.ApplicationId); + foreach (var certificateGroup in certificateGroups) + { + Assert.That(() => { + _gdsClient.GDSClient.GetTrustList(null, certificateGroup); + }, Throws.Exception); + } + } + } + + [Test, Order(601)] + public void GetInvalidCertificateGroupsNullTests() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + Assert.That(() => { + _gdsClient.GDSClient.GetCertificateGroups(null); + }, Throws.Exception); + Assert.That(() => { + _gdsClient.GDSClient.GetCertificateGroups(new NodeId(Guid.NewGuid())); + }, Throws.Exception); + + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { + _ = _gdsClient.GDSClient.GetTrustList(application.ApplicationRecord.ApplicationId, null); + }, Throws.Exception); + Assert.That(() => { + _ = _gdsClient.GDSClient.GetTrustList(application.ApplicationRecord.ApplicationId, new NodeId(Guid.NewGuid())); + }, Throws.Exception); + Assert.That(() => { + _ = _gdsClient.GDSClient.GetCertificateGroups(application.ApplicationRecord.ApplicationId); + }, Throws.Exception); + } + } + + [Test, Order(610)] + public void GetGoodCertificateGroupsAndTrustLists() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + + foreach (var application in _goodApplicationTestSet) + { + var certificateGroups = _gdsClient.GDSClient.GetCertificateGroups(application.ApplicationRecord.ApplicationId); + foreach (var certificateGroup in certificateGroups) + { + var trustListId = _gdsClient.GDSClient.GetTrustList(application.ApplicationRecord.ApplicationId, certificateGroup); + // Opc.Ua.TrustListDataType + var trustList = _gdsClient.GDSClient.ReadTrustList(trustListId); + Assert.NotNull(trustList); + } + } + } + + [Test, Order(690)] + public void GetGoodCertificateStatus() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + bool certificateStatus = _gdsClient.GDSClient.GetCertificateStatus(application.ApplicationRecord.ApplicationId, null, null); + Assert.False(certificateStatus); + } + } + + [Test, Order(691)] + public void GetInvalidCertificateStatus() + { + AssertIgnoreTestWithoutInvalidRegistration(); + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { + _ = _gdsClient.GDSClient.GetCertificateStatus(application.ApplicationRecord.ApplicationId, null, null); + }, Throws.Exception); + } + } + + [Test, Order(900)] + public void UnregisterGoodApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + _gdsClient.GDSClient.UnregisterApplication(application.ApplicationRecord.ApplicationId); + } + } + + [Test, Order(910)] + public void UnregisterInvalidApplications() + { + ConnectGDS(true); + foreach (var application in _invalidApplicationTestSet) + { + Assert.That(() => { _gdsClient.GDSClient.UnregisterApplication(application.ApplicationRecord.ApplicationId); }, Throws.Exception); + } + } + + [Test, Order(915)] + public void VerifyUnregisterGoodApplications() + { + AssertIgnoreTestWithoutGoodRegistration(); + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + var result = _gdsClient.GDSClient.FindApplication(application.ApplicationRecord.ApplicationUri); + if (result != null) + { + Assert.NotNull(result); + Assert.AreEqual(0, result.Length, "Found deleted application on server!"); + } + } + } + + + [Test, Order(920)] + public void UnregisterUnregisteredGoodApplications() + { + ConnectGDS(true); + foreach (var application in _goodApplicationTestSet) + { + Assert.That(() => { _gdsClient.GDSClient.UnregisterApplication(application.ApplicationRecord.ApplicationId); }, Throws.Exception); + } + } + +#if DEVOPS_LOG + [Test, Order(9998)] + public void ClientLogResult() + { + var log = _gdsClient.ReadLogFile(); + TestContext.Progress.WriteLine(log); + } + + [Test, Order(9999)] + public void ServerLogResult() + { + var log = _server.ReadLogFile(); + TestContext.Progress.WriteLine(log); + } +#endif + #endregion + + #region Private Methods + private void ConnectGDS(bool admin, + [System.Runtime.CompilerServices.CallerMemberName] string memberName = "" + ) + { + _gdsClient.GDSClient.AdminCredentials = admin ? _gdsClient.AdminUser : _gdsClient.AppUser; + _gdsClient.GDSClient.Connect(_gdsClient.GDSClient.EndpointUrl).Wait(); + TestContext.Progress.WriteLine($"GDS Client({admin}) connected -- {memberName}"); + } + + private void DisconnectGDS( + [System.Runtime.CompilerServices.CallerMemberName] string memberName = "" + ) + { + _gdsClient.GDSClient.Disconnect(); + TestContext.Progress.WriteLine($"GDS Client disconnected -- {memberName}"); + } + + private void AssertIgnoreTestWithoutGoodRegistration() + { + if (!_goodRegistrationOk) + { + Assert.Ignore("Test requires good application registrations."); + } + } + + private void AssertIgnoreTestWithoutInvalidRegistration() + { + if (!_invalidRegistrationOk) + { + Assert.Ignore("Test requires invalid application registration."); + } + } + + private void AssertIgnoreTestWithoutGoodNewKeyPairRequest() + { + if (!_goodNewKeyPairRequestOk) + { + Assert.Ignore("Test requires good new key pair request."); + } + } + + private int GoodServersOnNetworkCount() + { + return _goodApplicationTestSet.Sum(a => a.ApplicationRecord.DiscoveryUrls.Count); + } + + #endregion + + #region Private Fields + private const int goodApplicationsTestCount = 10; + private const int invalidApplicationsTestCount = 10; + private const int randomStart = 1; + private ApplicationTestDataGenerator _appTestDataGenerator; + private GlobalDiscoveryTestServer _server; + private GlobalDiscoveryTestClient _gdsClient; + private IList _goodApplicationTestSet; + private IList _invalidApplicationTestSet; + private bool _goodRegistrationOk; + private bool _invalidRegistrationOk; + private bool _goodNewKeyPairRequestOk; + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Common.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Common.cs new file mode 100644 index 00000000..9e81c5a0 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Common.cs @@ -0,0 +1,380 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Opc.Ua.Configuration; +using Opc.Ua.Gds.Client; +using Opc.Ua.Test; + + +namespace Opc.Ua.Gds.Tests +{ + public class ApplicationTestDataGenerator + { + private int _randomStart = 1; + private RandomSource _randomSource; + private DataGenerator _dataGenerator; + private ServerCapabilities _serverCapabilities; + + public ApplicationTestDataGenerator(int randomStart) + { + this._randomStart = randomStart; + _serverCapabilities = new ServerCapabilities(); + _randomSource = new RandomSource(randomStart); + _dataGenerator = new DataGenerator(_randomSource); + } + + public RandomSource RandomSource => _randomSource; + public DataGenerator DataGenerator => _dataGenerator; + + public IList ApplicationTestSet(int count, bool invalidateSet) + { + var testDataSet = new List(); + for (int i = 0; i < count; i++) + { + var testData = RandomApplicationTestData(); + if (invalidateSet) + { + ApplicationRecordDataType appRecord = testData.ApplicationRecord; + appRecord.ApplicationId = new NodeId(Guid.NewGuid()); + switch (i % 4) + { + case 0: + appRecord.ApplicationUri = _dataGenerator.GetRandomString(); + break; + case 1: + appRecord.ApplicationType = (ApplicationType)_randomSource.NextInt32(100) + 8; + break; + case 2: + appRecord.ProductUri = _dataGenerator.GetRandomString(); + break; + case 3: + appRecord.DiscoveryUrls = appRecord.ApplicationType == ApplicationType.Client ? + RandomDiscoveryUrl(new StringCollection { "xxxyyyzzz" }, _randomSource.NextInt32(0x7fff), "TestClient") : null; + break; + case 4: + appRecord.ServerCapabilities = appRecord.ApplicationType == ApplicationType.Client ? + RandomServerCapabilities() : null; + break; + case 5: + appRecord.ApplicationId = new NodeId(100); + break; + } + } + testDataSet.Add(testData); + } + return testDataSet; + } + + private ApplicationTestData RandomApplicationTestData() + { + // TODO: set to discoveryserver + ApplicationType appType = (ApplicationType)_randomSource.NextInt32((int)ApplicationType.ClientAndServer); + string pureAppName = _dataGenerator.GetRandomString("en"); + pureAppName = Regex.Replace(pureAppName, @"[^\w\d\s]", ""); + string pureAppUri = Regex.Replace(pureAppName, @"[^\w\d]", ""); + string appName = "UA " + pureAppName; + StringCollection domainNames = RandomDomainNames(); + string localhost = domainNames[0]; + string privateKeyFormat = _randomSource.NextInt32(1) == 0 ? "PEM" : "PFX"; + string appUri = ("urn:localhost:opcfoundation.org:" + pureAppUri.ToLower()).Replace("localhost", localhost); + string prodUri = "http://opcfoundation.org/UA/" + pureAppUri; + StringCollection discoveryUrls = new StringCollection(); + StringCollection serverCapabilities = new StringCollection(); + int port = (_dataGenerator.GetRandomInt16() & 0x1fff) + 50000; + switch (appType) + { + case ApplicationType.Client: + appName += " Client"; + break; + case ApplicationType.ClientAndServer: + appName += " Client and"; + goto case ApplicationType.Server; + case ApplicationType.DiscoveryServer: + appName += " DiscoveryServer"; + discoveryUrls = RandomDiscoveryUrl(domainNames, 4840, pureAppUri); + serverCapabilities.Add("LDS"); + break; + case ApplicationType.Server: + appName += " Server"; + discoveryUrls = RandomDiscoveryUrl(domainNames, port, pureAppUri); + serverCapabilities = RandomServerCapabilities(); + break; + } + ApplicationTestData testData = new ApplicationTestData { + ApplicationRecord = new ApplicationRecordDataType { + ApplicationNames = new LocalizedTextCollection { new LocalizedText("en-us", appName) }, + ApplicationUri = appUri, + ApplicationType = appType, + ProductUri = prodUri, + DiscoveryUrls = discoveryUrls, + ServerCapabilities = serverCapabilities + }, + DomainNames = domainNames, + Subject = String.Format("CN={0},DC={1},O=OPC Foundation", appName, localhost), + PrivateKeyFormat = privateKeyFormat + }; + return testData; + } + + private StringCollection RandomServerCapabilities() + { + var serverCapabilities = new StringCollection(); + int capabilities = _randomSource.NextInt32(8); + foreach (var cap in _serverCapabilities) + { + if (_randomSource.NextInt32(100) > 50) + { + serverCapabilities.Add(cap.Id); + if (capabilities-- == 0) + { + break; + } + } + } + return serverCapabilities; + } + + private string RandomLocalHost() + { + string localhost = Regex.Replace(_dataGenerator.GetRandomSymbol("en").Trim().ToLower(), @"[^\w\d]", ""); + if (localhost.Length >= 12) + { + localhost = localhost.Substring(0, 12); + } + return localhost; + } + + private string[] RandomDomainNames() + { + int count = _randomSource.NextInt32(8) + 1; + var result = new string[count]; + for (int i = 0; i < count; i++) + { + result[i] = RandomLocalHost(); + } + return result; + } + + private StringCollection RandomDiscoveryUrl(StringCollection domainNames, int port, string appUri) + { + var result = new StringCollection(); + foreach (var name in domainNames) + { + int random = _randomSource.NextInt32(7); + if ((result.Count == 0) || (random & 1) == 0) + { + result.Add(String.Format("opc.tcp://{0}:{1}/{2}", name, (port++).ToString(), appUri)); + } + if ((random & 2) == 0) + { + result.Add(String.Format("http://{0}:{1}/{2}", name, (port++).ToString(), appUri)); + } + if ((random & 4) == 0) + { + result.Add(String.Format("https://{0}:{1}/{2}", name, (port++).ToString(), appUri)); + } + } + return result; + } + + } + + public class ApplicationTestData + { + public ApplicationTestData() + { + Initialize(); + } + + private void Initialize() + { + ApplicationRecord = new ApplicationRecordDataType(); + CertificateGroupId = null; + CertificateTypeId = null; + CertificateRequestId = null; + DomainNames = new StringCollection(); + Subject = null; + PrivateKeyFormat = "PFX"; + PrivateKeyPassword = ""; + Certificate = null; + PrivateKey = null; + IssuerCertificates = null; + } + + public ApplicationRecordDataType ApplicationRecord; + public NodeId CertificateGroupId; + public NodeId CertificateTypeId; + public NodeId CertificateRequestId; + public StringCollection DomainNames; + public String Subject; + public String PrivateKeyFormat; + public String PrivateKeyPassword; + public byte[] Certificate; + public byte[] PrivateKey; + public byte[][] IssuerCertificates; + } + + public class ApplicationMessageDlg : IApplicationMessageDlg + { + private string message = string.Empty; + private bool ask = false; + + public override void Message(string text, bool ask) + { + this.message = text; + this.ask = ask; + } + + public override async Task ShowAsync() + { + if (ask) + { + message += " (y/n, default y): "; + Console.Write(message); + } + else + { + Console.WriteLine(message); + } + if (ask) + { + try + { + ConsoleKeyInfo result = Console.ReadKey(); + Console.WriteLine(); + return await Task.FromResult((result.KeyChar == 'y') || (result.KeyChar == 'Y') || (result.KeyChar == '\r')); + } + catch + { + // intentionally fall through + } + } + return await Task.FromResult(true); + } + } + + public static class TestUtils + { + public static void CleanupTrustList(ICertificateStore store, bool dispose = true) + { + var certs = store.Enumerate().Result; + foreach (var cert in certs) + { + store.Delete(cert.Thumbprint); + } + var crls = store.EnumerateCRLs(); + foreach (var crl in crls) + { + store.DeleteCRL(crl); + } + if (dispose) + { + store.Dispose(); + } + } + + public static void DeleteDirectory(string storePath) + { + string fullStorePath = Utils.ReplaceSpecialFolderNames(storePath); + if (Directory.Exists(fullStorePath)) + { + Directory.Delete(fullStorePath, true); + } + } + + const int MaxPort = 64000; + const int MinPort = Opc.Ua.Utils.UaTcpDefaultPort; + public static void PatchBaseAddressesPorts(ApplicationConfiguration config, int basePort) + { + if (basePort >= MinPort && basePort <= MaxPort) + { + StringCollection newBaseAddresses = new StringCollection(); + foreach (var baseAddress in config.ServerConfiguration.BaseAddresses) + { + UriBuilder baseAddressUri = new UriBuilder(baseAddress); + baseAddressUri.Port = basePort++; + newBaseAddresses.Add(baseAddressUri.Uri.AbsoluteUri); + } + config.ServerConfiguration.BaseAddresses = newBaseAddresses; + } + } + + public static string PatchOnlyGDSEndpointUrlPort(string url, int port) + { + if (port >= MinPort && port <= MaxPort) + { + UriBuilder newUrl = new UriBuilder(url); + if (newUrl.Path.Contains("GlobalDiscoveryTestServer")) + { + newUrl.Port = port; + return newUrl.Uri.AbsoluteUri; + } + } + return url; + } + + public static async Task StartGDS(bool clean) + { + GlobalDiscoveryTestServer server = null; + Random random = new Random(); + int testPort; + bool retryStartServer = false; + int serverStartRetries = 10; + do + { + try + { + // work around travis issue by selecting different ports on every run + testPort = random.Next(50000, 60000); + server = new GlobalDiscoveryTestServer(true); + await server.StartServer(clean, testPort); + } + catch (ServiceResultException sre) + { + serverStartRetries--; + if (serverStartRetries == 0 || + sre.StatusCode != StatusCodes.BadNoCommunication) + { + throw; + } + retryStartServer = true; + } + await Task.Delay(1000); + } while (retryStartServer); + + return server; + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/GlobalDiscoveryTestClient.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/GlobalDiscoveryTestClient.cs new file mode 100644 index 00000000..bab98f37 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/GlobalDiscoveryTestClient.cs @@ -0,0 +1,176 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Runtime.Serialization; +using System.Threading.Tasks; +using Opc.Ua.Configuration; +using Opc.Ua.Gds.Client; + + +namespace Opc.Ua.Gds.Tests +{ + + public class GlobalDiscoveryTestClient + { + public GlobalDiscoveryServerClient GDSClient => _client; + public static bool AutoAccept = false; + + public GlobalDiscoveryTestClient(bool autoAccept) + { + AutoAccept = autoAccept; + } + + public IUserIdentity AppUser { get; private set; } + public IUserIdentity AdminUser { get; private set; } + public ApplicationConfiguration Config { get; private set; } + public async Task LoadClientConfiguration(int port = -1) + { + ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); + ApplicationInstance application = new ApplicationInstance { + ApplicationName = "Global Discovery Client", + ApplicationType = ApplicationType.Client, + ConfigSectionName = "Opc.Ua.GlobalDiscoveryTestClient" + }; + + // load the application configuration. + Config = await application.LoadApplicationConfiguration(false); + + // check the application certificate. + bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(true, 0); + if (!haveAppCertificate) + { + throw new Exception("Application instance certificate invalid!"); + } + + Config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + + GlobalDiscoveryTestClientConfiguration gdsClientConfiguration = application.ApplicationConfiguration.ParseExtension(); + _client = new GlobalDiscoveryServerClient(application, gdsClientConfiguration.GlobalDiscoveryServerUrl) { + EndpointUrl = TestUtils.PatchOnlyGDSEndpointUrlPort(gdsClientConfiguration.GlobalDiscoveryServerUrl, port) + }; + if (String.IsNullOrEmpty(gdsClientConfiguration.AppUserName)) + { + AppUser = new UserIdentity(new AnonymousIdentityToken()); + } + else + { + AppUser = new UserIdentity(gdsClientConfiguration.AppUserName, gdsClientConfiguration.AppPassword); + } + AdminUser = new UserIdentity(gdsClientConfiguration.AdminUserName, gdsClientConfiguration.AdminPassword); + } + + public void DisconnectClient() + { + Console.WriteLine("Disconnect Session. Waiting for exit..."); + + if (_client != null) + { + GlobalDiscoveryServerClient gdsClient = _client; + _client = null; + gdsClient.Disconnect(); + } + } + + public string ReadLogFile() + { + return File.ReadAllText(Utils.ReplaceSpecialFolderNames(Config.TraceConfiguration.OutputFilePath)); + } + + private static void CertificateValidator_CertificateValidation(CertificateValidator validator, CertificateValidationEventArgs e) + { + if (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted) + { + e.Accept = AutoAccept; + if (AutoAccept) + { + Console.WriteLine("Accepted Certificate: {0}", e.Certificate.Subject); + } + else + { + Console.WriteLine("Rejected Certificate: {0}", e.Certificate.Subject); + } + } + } + + private GlobalDiscoveryServerClient _client; + + } + + /// + /// Stores the configuration the data access node manager. + /// + [DataContract(Namespace = Opc.Ua.Gds.Namespaces.OpcUaGds + "Configuration.xsd")] + public class GlobalDiscoveryTestClientConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public GlobalDiscoveryTestClientConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public + [DataMember(Order = 1)] + public string GlobalDiscoveryServerUrl { get; set; } + [DataMember(Order = 2)] + public string AppUserName { get; set; } + [DataMember(Order = 3)] + public string AppPassword { get; set; } + [DataMember(Order = 4, IsRequired = true)] + public string AdminUserName { get; set; } + [DataMember(Order = 5, IsRequired = true)] + public string AdminPassword { get; set; } + #endregion + + #region Private Members + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/GlobalDiscoveryTestServer.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/GlobalDiscoveryTestServer.cs new file mode 100644 index 00000000..7e7845e2 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/GlobalDiscoveryTestServer.cs @@ -0,0 +1,200 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Threading.Tasks; +using Opc.Ua.Configuration; +using Opc.Ua.Gds.Server; +using Opc.Ua.Gds.Server.Database.Linq; + + +namespace Opc.Ua.Gds.Tests +{ + + public class GlobalDiscoveryTestServer + { + public GlobalDiscoverySampleServer Server => m_server; + public ApplicationInstance Application { get; private set; } + public ApplicationConfiguration Config { get; private set; } + public int BasePort { get; private set; } + + + public GlobalDiscoveryTestServer(bool _autoAccept) + { + m_autoAccept = _autoAccept; + } + + public async Task StartServer(bool clean, int basePort = -1) + { + ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); + Application = new ApplicationInstance { + ApplicationName = "Global Discovery Server", + ApplicationType = ApplicationType.Server, + ConfigSectionName = "Opc.Ua.GlobalDiscoveryTestServer" + }; + + BasePort = basePort; + Config = await Load(Application, basePort); + + if (clean) + { + string thumbprint = Config.SecurityConfiguration.ApplicationCertificate.Thumbprint; + if (thumbprint != null) + { + using (var store = Config.SecurityConfiguration.ApplicationCertificate.OpenStore()) + { + await store.Delete(thumbprint); + } + } + + // always start with clean cert store + TestUtils.CleanupTrustList(Config.SecurityConfiguration.ApplicationCertificate.OpenStore()); + TestUtils.CleanupTrustList(Config.SecurityConfiguration.TrustedIssuerCertificates.OpenStore()); + TestUtils.CleanupTrustList(Config.SecurityConfiguration.TrustedPeerCertificates.OpenStore()); + TestUtils.CleanupTrustList(Config.SecurityConfiguration.RejectedCertificateStore.OpenStore()); + + Config = await Load(Application, basePort); + } + + // check the application certificate. + bool haveAppCertificate = await Application.CheckApplicationInstanceCertificate(true, 0); + if (!haveAppCertificate) + { + throw new Exception("Application instance certificate invalid!"); + } + + if (!Config.SecurityConfiguration.AutoAcceptUntrustedCertificates) + { + Config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + } + + // get the DatabaseStorePath configuration parameter. + GlobalDiscoveryServerConfiguration gdsConfiguration = Config.ParseExtension(); + string databaseStorePath = Utils.ReplaceSpecialFolderNames(gdsConfiguration.DatabaseStorePath); + + if (clean) + { + // clean up database + if (File.Exists(databaseStorePath)) + { + File.Delete(databaseStorePath); + } + + // clean up GDS stores + TestUtils.DeleteDirectory(gdsConfiguration.AuthoritiesStorePath); + TestUtils.DeleteDirectory(gdsConfiguration.ApplicationCertificatesStorePath); + foreach (var group in gdsConfiguration.CertificateGroups) + { + TestUtils.DeleteDirectory(group.BaseStorePath); + } + } + + var database = JsonApplicationsDatabase.Load(databaseStorePath); + + // start the server. + m_server = new GlobalDiscoverySampleServer( + database, + database, + new CertificateGroup()); + await Application.Start(m_server); + + ServerState serverState = Server.GetStatus().State; + if (serverState != ServerState.Running) + { + throw new ServiceResultException("Server failed to start"); + } + + } + + public void StopServer() + { + if (m_server != null) + { + Console.WriteLine("Server stopped. Waiting for exit..."); + + using (GlobalDiscoverySampleServer server = m_server) + { + m_server = null; + // Stop server and dispose + server.Stop(); + } + } + + } + + public string ReadLogFile() + { + return File.ReadAllText(Utils.ReplaceSpecialFolderNames(Config.TraceConfiguration.OutputFilePath)); + } + + public bool ResetLogFile() + { + try + { + File.Delete(Utils.ReplaceSpecialFolderNames(Config.TraceConfiguration.OutputFilePath)); + return true; + } + catch { } + return false; + } + + public string GetLogFilePath() + { + return Utils.ReplaceSpecialFolderNames(Config.TraceConfiguration.OutputFilePath); + } + + private static void CertificateValidator_CertificateValidation(CertificateValidator validator, CertificateValidationEventArgs e) + { + if (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted) + { + e.Accept = m_autoAccept; + if (m_autoAccept) + { + Console.WriteLine("Accepted Certificate: {0}", e.Certificate.Subject); + } + else + { + Console.WriteLine("Rejected Certificate: {0}", e.Certificate.Subject); + } + } + } + + private async Task Load(ApplicationInstance application, int basePort) + { + // load the application configuration. + ApplicationConfiguration config = await application.LoadApplicationConfiguration(true); + TestUtils.PatchBaseAddressesPorts(config, basePort); + return config; + } + + private GlobalDiscoverySampleServer m_server; + private static bool m_autoAccept = false; + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Main.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Main.cs new file mode 100644 index 00000000..7101979c --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Main.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +#if NETFRAMEWORK +namespace Opc.Ua.Gds.Tests +{ + static class Program + { + // Main Method + static public void Main(String[] args) + { + } + } +} +#endif diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.Gds.Tests.csproj b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.Gds.Tests.csproj new file mode 100644 index 00000000..ee1eb85d --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.Gds.Tests.csproj @@ -0,0 +1,48 @@ + + + + Exe + $(TestsTargetFrameworks) + Opc.Ua.Gds.Tests + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.GlobalDiscoveryTestClient.Config.xml b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.GlobalDiscoveryTestClient.Config.xml new file mode 100644 index 00000000..2a3f67df --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.GlobalDiscoveryTestClient.Config.xml @@ -0,0 +1,111 @@ + + + UA Global Discovery Test Client + urn:localhost:opcfoundation.org:GlobalDiscoveryTestClient + http://opcfoundation.org/UA/GlobalDiscoveryTestClient + Client_1 + + + + Directory + %LocalApplicationData%/OPC/pki/own + CN=Global Discovery Test Client, O=OPC Foundation, DC=localhost + + + + Directory + %LocalApplicationData%/OPC/pki/issuers + + + + Directory + %LocalApplicationData%/OPC/pki/trusted + + + + Directory + %LocalApplicationData%/OPC/pki/rejected + + + + true + + + false + 1024 + + false + + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + + 600000 + + + + opc.tcp://{0}:4840/UADiscovery + http://{0}:52601/UADiscovery + http://{0}/UADiscovery/Default.svc + + + + + + + + 10000 + + + + + + + opc.tcp://localhost:58810/GlobalDiscoveryTestServer + appuser + demo + appadmin + demo + + + + + + %LocalApplicationData%/OPC/Logs/Opc.Ua.Gds.Tests.log.txt + false + + + + + + + + + + + + 519 + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.GlobalDiscoveryTestServer.Config.xml b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.GlobalDiscoveryTestServer.Config.xml new file mode 100644 index 00000000..4c3d366d --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.GlobalDiscoveryTestServer.Config.xml @@ -0,0 +1,171 @@ + + + UA Global Discovery Test Server + urn:localhost:opcfoundation.org:GlobalDiscoveryTestServer + http://opcfoundation.org/UA/GlobalDiscoveryTestServer + Server_0 + + + + Directory + %LocalApplicationData%/OPC/GDS/own + CN=Global Discovery Test Server, O=OPC Foundation, DC=localhost + + + + Directory + %LocalApplicationData%/OPC/GDS/issuers + + + + Directory + %LocalApplicationData%/OPC/GDS/trusted + + + + Directory + %LocalApplicationData%/OPC/GDS/rejected + + + + true + + + false + 1024 + false + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + + opc.tcp://localhost:58810/GlobalDiscoveryTestServer + + + + SignAndEncrypt_3 + + + + + + Anonymous_0 + http://opcfoundation.org/UA/SecurityPolicy#None + + + UserName_1 + http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 + + + true + 100 + 10000 + 3600000 + 10 + 10 + 100 + 600000 + 100 + 3600000 + 100 + 3600000 + 100 + 100 + 1000 + 1000 + + + + opc.tcp://localhost:4840 + + opc.tcp://localhost:4840 + DiscoveryServer_3 + + opc.tcp://localhost:4840 + + + SignAndEncrypt_3 + + + + + 0 + + + + Global Discovery and Certificate Management Server + + + 0 + + GDS + + + PFX + PEM + + 0 + false + + + + + + %LocalApplicationData%/OPC/GDS/authorities + %LocalApplicationData%/OPC/GDS/applications + O=OPC Foundation + + + Default + RsaSha256ApplicationCertificateType + CN=GDS Test CA, O=OPC Foundation + %LocalApplicationData%/OPC/GDS/CA/default + 12 + 2048 + 256 + 60 + 4096 + 512 + + + + %LocalApplicationData%/OPC/GDS/gdsdb.json + + + + + + %LocalApplicationData%/OPC/Logs/Opc.Ua.Gds.Tests.log.txt + true + + + + + + + + + + + + 519 + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.ServerConfigurationPushTestClient.Config.xml b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.ServerConfigurationPushTestClient.Config.xml new file mode 100644 index 00000000..a3b907e8 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/Opc.Ua.ServerConfigurationPushTestClient.Config.xml @@ -0,0 +1,107 @@ + + + UA Server Configuration Push Test Client + urn:localhost:opcfoundation.org:ServerConfigurationPushTestClient + http://opcfoundation.org/UA/ServerConfigurationPushTestClient + Client_1 + + + + Directory + %LocalApplicationData%/OPC/pki/own + CN=Server Configuration Push Test Client, O=OPC Foundation + + + + Directory + %LocalApplicationData%/OPC/pki/issuers + + + + Directory + %LocalApplicationData%/OPC/pki/trusted + + + + Directory + %LocalApplicationData%/OPC/pki/rejected + + + + true + + + false + 1024 + false + + + + + + 600000 + 1048576 + 1048576 + 65535 + 4194304 + 65535 + 300000 + 3600000 + + + + + 600000 + + + + opc.tcp://{0}:4840/UADiscovery + + + + + + + 10000 + + + + + + + opc.tcp://localhost:58810/GlobalDiscoveryTestServer + + + sysadmin + demo + %LocalApplicationData%/OPC/PKI/temp + + + + + + %LocalApplicationData%/OPC/Logs/Opc.Ua.Gds.Tests.log.txt + false + + + + + + + + + + + + 519 + + + \ No newline at end of file diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/PushTest.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/PushTest.cs new file mode 100644 index 00000000..b1fb3621 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/PushTest.cs @@ -0,0 +1,917 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using NUnit.Framework; +using Opc.Ua.Client; +using Opc.Ua.Gds.Client; +using Opc.Ua.Gds.Server; +using Opc.Ua.Security.Certificates; +using Opc.Ua.Test; +using OpcUa = Opc.Ua; + +namespace Opc.Ua.Gds.Tests +{ + + [TestFixture, Category("GDSPush"), Category("GDS")] + [SetCulture("en-us"), SetUICulture("en-us")] + [NonParallelizable] + public class PushTest + { + #region Test Setup + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected async Task OneTimeSetUp() + { + // start GDS first clean, then restart server + // to ensure the application cert is not 'fresh' + _server = await TestUtils.StartGDS(true); + _server.StopServer(); + await Task.Delay(1000); + _server = await TestUtils.StartGDS(false); + + _serverCapabilities = new ServerCapabilities(); + _randomSource = new RandomSource(randomStart); + _dataGenerator = new DataGenerator(_randomSource); + + // load clients + _gdsClient = new GlobalDiscoveryTestClient(true); + await _gdsClient.LoadClientConfiguration(_server.BasePort); + _pushClient = new ServerConfigurationPushTestClient(true); + await _pushClient.LoadClientConfiguration(_server.BasePort); + + // connect once + await _gdsClient.GDSClient.Connect(_gdsClient.GDSClient.EndpointUrl); + await _pushClient.PushClient.Connect(_pushClient.PushClient.EndpointUrl); + + ConnectGDSClient(true); + RegisterPushServerApplication(_pushClient.PushClient.EndpointUrl); + + _selfSignedServerCert = new X509Certificate2(_pushClient.PushClient.Session.ConfiguredEndpoint.Description.ServerCertificate); + _domainNames = X509Utils.GetDomainsFromCertficate(_selfSignedServerCert).ToArray(); + + await CreateCATestCerts(_pushClient.TempStorePath); + } + + /// + /// Tear down the Global Discovery Server and disconnect the Client + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + try + { + ConnectGDSClient(true); + UnRegisterPushServerApplication(); + _gdsClient.DisconnectClient(); + _pushClient.DisconnectClient(); + _server.StopServer(); + } + catch { } + _gdsClient = null; + _pushClient = null; + _server = null; + } + + [SetUp] + protected void SetUp() + { + _server.ResetLogFile(); + } + + [TearDown] + protected void TearDown() + { + DisconnectGDSClient(); + DisconnectPushClient(); + try + { + TestContext.AddTestAttachment(_server.GetLogFilePath(), "GDS Client and Server logs"); + } + catch { } + + } + #endregion + + #region Test Methods + [Test, Order(100)] + public void GetSupportedKeyFormats() + { + ConnectPushClient(true); + var keyFormats = _pushClient.PushClient.GetSupportedKeyFormats(); + Assert.IsNotNull(keyFormats); + } + + [Test, Order(200)] + public void ReadTrustList() + { + ConnectPushClient(true); + TrustListDataType allTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsNotNull(allTrustList); + Assert.IsNotNull(allTrustList.IssuerCertificates); + Assert.IsNotNull(allTrustList.IssuerCrls); + Assert.IsNotNull(allTrustList.TrustedCertificates); + Assert.IsNotNull(allTrustList.TrustedCrls); + TrustListDataType noneTrustList = _pushClient.PushClient.ReadTrustList(TrustListMasks.None); + Assert.IsNotNull(noneTrustList); + Assert.IsNotNull(noneTrustList.IssuerCertificates); + Assert.IsNotNull(noneTrustList.IssuerCrls); + Assert.IsNotNull(noneTrustList.TrustedCertificates); + Assert.IsNotNull(noneTrustList.TrustedCrls); + Assert.IsTrue(noneTrustList.IssuerCertificates.Count == 0); + Assert.IsTrue(noneTrustList.IssuerCrls.Count == 0); + Assert.IsTrue(noneTrustList.TrustedCertificates.Count == 0); + Assert.IsTrue(noneTrustList.TrustedCrls.Count == 0); + TrustListDataType issuerTrustList = _pushClient.PushClient.ReadTrustList(TrustListMasks.IssuerCertificates | TrustListMasks.IssuerCrls); + Assert.IsNotNull(issuerTrustList); + Assert.IsNotNull(issuerTrustList.IssuerCertificates); + Assert.IsNotNull(issuerTrustList.IssuerCrls); + Assert.IsNotNull(issuerTrustList.TrustedCertificates); + Assert.IsNotNull(issuerTrustList.TrustedCrls); + Assert.IsTrue(issuerTrustList.IssuerCertificates.Count == allTrustList.IssuerCertificates.Count); + Assert.IsTrue(issuerTrustList.IssuerCrls.Count == allTrustList.IssuerCrls.Count); + Assert.IsTrue(issuerTrustList.TrustedCertificates.Count == 0); + Assert.IsTrue(issuerTrustList.TrustedCrls.Count == 0); + TrustListDataType trustedTrustList = _pushClient.PushClient.ReadTrustList(TrustListMasks.TrustedCertificates | TrustListMasks.TrustedCrls); + Assert.IsNotNull(trustedTrustList); + Assert.IsNotNull(trustedTrustList.IssuerCertificates); + Assert.IsNotNull(trustedTrustList.IssuerCrls); + Assert.IsNotNull(trustedTrustList.TrustedCertificates); + Assert.IsNotNull(trustedTrustList.TrustedCrls); + Assert.IsTrue(trustedTrustList.IssuerCertificates.Count == 0); + Assert.IsTrue(trustedTrustList.IssuerCrls.Count == 0); + Assert.IsTrue(trustedTrustList.TrustedCertificates.Count == allTrustList.TrustedCertificates.Count); + Assert.IsTrue(trustedTrustList.TrustedCrls.Count == allTrustList.TrustedCrls.Count); + } + + [Test, Order(300)] + public void UpdateTrustList() + { + ConnectPushClient(true); + TrustListDataType fullTrustList = _pushClient.PushClient.ReadTrustList(); + TrustListDataType emptyTrustList = _pushClient.PushClient.ReadTrustList(TrustListMasks.None); + emptyTrustList.SpecifiedLists = (uint)TrustListMasks.All; + bool requireReboot = _pushClient.PushClient.UpdateTrustList(emptyTrustList); + Assert.False(requireReboot); + TrustListDataType expectEmptyTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsTrue(Utils.IsEqual(expectEmptyTrustList, emptyTrustList)); + requireReboot = _pushClient.PushClient.UpdateTrustList(fullTrustList); + Assert.False(requireReboot); + TrustListDataType expectFullTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsTrue(Utils.IsEqual(expectFullTrustList, fullTrustList)); + } + + [Test, Order(301)] + public void AddRemoveCert() + { + using (X509Certificate2 trustedCert = CertificateFactory.CreateCertificate("uri:x:y:z", "TrustedCert", "CN=Push Server Test", null).CreateForRSA()) + using (X509Certificate2 issuerCert = CertificateFactory.CreateCertificate("uri:x:y:z", "IssuerCert", "CN=Push Server Test", null).CreateForRSA()) + { + ConnectPushClient(true); + TrustListDataType beforeTrustList = _pushClient.PushClient.ReadTrustList(); + _pushClient.PushClient.AddCertificate(trustedCert, true); + _pushClient.PushClient.AddCertificate(issuerCert, false); + TrustListDataType afterAddTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.Greater(afterAddTrustList.TrustedCertificates.Count, beforeTrustList.TrustedCertificates.Count); + Assert.Greater(afterAddTrustList.IssuerCertificates.Count, beforeTrustList.IssuerCertificates.Count); + Assert.IsFalse(Utils.IsEqual(beforeTrustList, afterAddTrustList)); + _pushClient.PushClient.RemoveCertificate(trustedCert.Thumbprint, true); + _pushClient.PushClient.RemoveCertificate(issuerCert.Thumbprint, false); + TrustListDataType afterRemoveTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsTrue(Utils.IsEqual(beforeTrustList, afterRemoveTrustList)); + } + } + + [Test, Order(302)] + public void AddRemoveCATrustedCert() + { + ConnectPushClient(true); + TrustListDataType beforeTrustList = _pushClient.PushClient.ReadTrustList(); + _pushClient.PushClient.AddCertificate(_caCert, true); + _pushClient.PushClient.AddCrl(_caCrl, true); + TrustListDataType afterAddTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.Greater(afterAddTrustList.TrustedCertificates.Count, beforeTrustList.TrustedCertificates.Count); + Assert.Greater(afterAddTrustList.TrustedCrls.Count, beforeTrustList.TrustedCrls.Count); + Assert.IsFalse(Utils.IsEqual(beforeTrustList, afterAddTrustList)); + var serviceResultException = Assert.Throws(() => { _pushClient.PushClient.RemoveCertificate(_caCert.Thumbprint, false); }); + Assert.AreEqual(StatusCodes.BadInvalidArgument, serviceResultException.StatusCode, serviceResultException.Message); + TrustListDataType afterRemoveTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsFalse(Utils.IsEqual(beforeTrustList, afterRemoveTrustList)); + _pushClient.PushClient.RemoveCertificate(_caCert.Thumbprint, true); + afterRemoveTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsTrue(Utils.IsEqual(beforeTrustList, afterRemoveTrustList)); + } + + [Test, Order(303)] + public void AddRemoveCAIssuerCert() + { + ConnectPushClient(true); + TrustListDataType beforeTrustList = _pushClient.PushClient.ReadTrustList(); + _pushClient.PushClient.AddCertificate(_caCert, false); + _pushClient.PushClient.AddCrl(_caCrl, false); + TrustListDataType afterAddTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.Greater(afterAddTrustList.IssuerCertificates.Count, beforeTrustList.IssuerCertificates.Count); + Assert.Greater(afterAddTrustList.IssuerCrls.Count, beforeTrustList.IssuerCrls.Count); + Assert.IsFalse(Utils.IsEqual(beforeTrustList, afterAddTrustList)); + Assert.That(() => { _pushClient.PushClient.RemoveCertificate(_caCert.Thumbprint, true); }, Throws.Exception); + TrustListDataType afterRemoveTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsFalse(Utils.IsEqual(beforeTrustList, afterRemoveTrustList)); + _pushClient.PushClient.RemoveCertificate(_caCert.Thumbprint, false); + afterRemoveTrustList = _pushClient.PushClient.ReadTrustList(); + Assert.IsTrue(Utils.IsEqual(beforeTrustList, afterRemoveTrustList)); + } + + + [Test, Order(400)] + public void CreateSigningRequestBadParms() + { + ConnectPushClient(true); + NodeId invalidCertGroup = new NodeId(333); + NodeId invalidCertType = new NodeId(Guid.NewGuid()); + Assert.That(() => { _pushClient.PushClient.CreateSigningRequest(invalidCertGroup, null, null, false, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.CreateSigningRequest(null, invalidCertType, null, false, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.CreateSigningRequest(null, null, null, false, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.CreateSigningRequest(invalidCertGroup, invalidCertType, null, false, null); }, Throws.Exception); + } + + [Test, Order(401)] + public void CreateSigningRequestNullParms() + { + ConnectPushClient(true); + byte[] csr = _pushClient.PushClient.CreateSigningRequest(null, _pushClient.PushClient.ApplicationCertificateType, null, false, null); + Assert.IsNotNull(csr); + } + + [Test, Order(402)] + public void CreateSigningRequestRsaMinNullParms() + { +#if NETSTANDARD2_1 + Assert.Ignore("SHA1 not supported on .NET Standard 2.1."); +#endif + ConnectPushClient(true); + Assert.That(() => { _pushClient.PushClient.CreateSigningRequest(null, OpcUa.ObjectTypeIds.RsaMinApplicationCertificateType, null, false, null); }, Throws.Exception); + } + + [Test, Order(409)] + public void CreateSigningRequestAllParms() + { + ConnectPushClient(true); + byte[] nonce = new byte[0]; + byte[] csr = _pushClient.PushClient.CreateSigningRequest( + _pushClient.PushClient.DefaultApplicationGroup, + _pushClient.PushClient.ApplicationCertificateType, + "", + false, + nonce); + Assert.IsNotNull(csr); + } + + [Test, Order(410)] + public void CreateSigningRequestNullParmsWithNewPrivateKey() + { + ConnectPushClient(true); + byte[] csr = _pushClient.PushClient.CreateSigningRequest(null, _pushClient.PushClient.ApplicationCertificateType, null, true, Encoding.ASCII.GetBytes("OPCTest")); + Assert.IsNotNull(csr); + } + + [Test, Order(419)] + public void CreateSigningRequestAllParmsWithNewPrivateKey() + { + ConnectPushClient(true); + byte[] nonce = new byte[32]; + _randomSource.NextBytes(nonce, 0, nonce.Length); + byte[] csr = _pushClient.PushClient.CreateSigningRequest( + _pushClient.PushClient.DefaultApplicationGroup, + _pushClient.PushClient.ApplicationCertificateType, + "", + true, + nonce); + Assert.IsNotNull(csr); + } + + [Test, Order(500)] + public void UpdateCertificateSelfSignedNoPrivateKey() + { + ConnectPushClient(true); + using (X509Certificate2 invalidCert = CertificateFactory.CreateCertificate("uri:x:y:z", "TestApp", "CN=Push Server Test", null).CreateForRSA()) + using (X509Certificate2 serverCert = new X509Certificate2(_pushClient.PushClient.Session.ConfiguredEndpoint.Description.ServerCertificate)) + { + if (!X509Utils.CompareDistinguishedName(serverCert.Subject, serverCert.Issuer)) + { + Assert.Ignore("Server has no self signed cert in use."); + } + byte[] invalidRawCert = { 0xba, 0xd0, 0xbe, 0xef, 3 }; + // negative test all parameter combinations + NodeId invalidCertGroup = new NodeId(333); + NodeId invalidCertType = new NodeId(Guid.NewGuid()); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, null, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(invalidCertGroup, null, serverCert.RawData, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, invalidCertType, serverCert.RawData, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(invalidCertGroup, invalidCertType, serverCert.RawData, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, invalidRawCert, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, invalidCert.RawData, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, serverCert.RawData, "XYZ", null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, serverCert.RawData, "XYZ", invalidCert.RawData, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, invalidCert.RawData, null, null, new byte[][] { serverCert.RawData, invalidCert.RawData }); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, null, null, null, new byte[][] { serverCert.RawData, invalidCert.RawData }); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, invalidRawCert, null, null, new byte[][] { serverCert.RawData, invalidCert.RawData }); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, serverCert.RawData, null, null, new byte[][] { serverCert.RawData, invalidRawCert }); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, serverCert.RawData, null, null, null); }, Throws.Exception); + var success = _pushClient.PushClient.UpdateCertificate( + null, + _pushClient.PushClient.ApplicationCertificateType, + serverCert.RawData, + null, + null, + null); + if (success) + { + _pushClient.PushClient.ApplyChanges(); + } + VerifyNewPushServerCert(serverCert.RawData); + } + } + + [Test, Order(510)] + public void UpdateCertificateCASigned() + { +#if NETCOREAPP3_1 + // this test fails on macOS, ignore + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + Assert.Ignore("Update CA signed certifcate fails on mac OS."); + } +#endif + ConnectPushClient(true); + ConnectGDSClient(true); + TestContext.Out.WriteLine("Create Signing Request"); + byte[] csr = _pushClient.PushClient.CreateSigningRequest( + null, + _pushClient.PushClient.ApplicationCertificateType, + null, + false, + null); + Assert.IsNotNull(csr); + TestContext.Out.WriteLine("Start Signing Request"); + NodeId requestId = _gdsClient.GDSClient.StartSigningRequest( + _applicationRecord.ApplicationId, + null, + null, + csr); + Assert.NotNull(requestId); + byte[] privateKey = null; + byte[] certificate = null; + byte[][] issuerCertificates = null; + DateTime now = DateTime.UtcNow; + do + { + try + { + TestContext.Out.WriteLine("Finish Signing Request"); + certificate = _gdsClient.GDSClient.FinishRequest( + _applicationRecord.ApplicationId, + requestId, + out privateKey, + out issuerCertificates); + } + catch (ServiceResultException sre) + { + // wait if GDS requires manual approval of cert request + if (sre.StatusCode == StatusCodes.BadNothingToDo && + now.AddMinutes(5) > DateTime.UtcNow) + { + Thread.Sleep(10000); + } + else + { + throw; + } + } + } while (certificate == null); + Assert.NotNull(issuerCertificates); + Assert.IsNull(privateKey); + DisconnectGDSClient(); + TestContext.Out.WriteLine("Update Certificate"); + bool success = _pushClient.PushClient.UpdateCertificate( + null, + _pushClient.PushClient.ApplicationCertificateType, + certificate, + null, + null, + issuerCertificates); + if (success) + { + TestContext.Out.WriteLine("Apply Changes"); + _pushClient.PushClient.ApplyChanges(); + } + TestContext.Out.WriteLine("Verify Cert Update"); + VerifyNewPushServerCert(certificate); + } + + + [Test, Order(520)] + public void UpdateCertificateSelfSignedPFX() + { + UpdateCertificateSelfSigned("PFX"); + } + + [Test, Order(530)] + public void UpdateCertificateSelfSignedPEM() + { + UpdateCertificateSelfSigned("PEM"); + } + + public void UpdateCertificateSelfSigned(string keyFormat) + { + ConnectPushClient(true); + var keyFormats = _pushClient.PushClient.GetSupportedKeyFormats(); + if (!keyFormats.Contains(keyFormat)) + { + Assert.Ignore("Push server doesn't support {0} key update", keyFormat); + } + + X509Certificate2 newCert = CertificateFactory.CreateCertificate( + _applicationRecord.ApplicationUri, + _applicationRecord.ApplicationNames[0].Text, + _selfSignedServerCert.Subject, + null).CreateForRSA(); + + byte[] privateKey = null; + if (keyFormat == "PFX") + { + Assert.IsTrue(newCert.HasPrivateKey); + privateKey = newCert.Export(X509ContentType.Pfx); + } + else if (keyFormat == "PEM") + { + Assert.IsTrue(newCert.HasPrivateKey); + privateKey = PEMWriter.ExportPrivateKeyAsPEM(newCert); + } + else + { + Assert.Fail("Testing unsupported key format {0}.", keyFormat); + } + + var success = _pushClient.PushClient.UpdateCertificate( + _pushClient.PushClient.DefaultApplicationGroup, + _pushClient.PushClient.ApplicationCertificateType, + newCert.RawData, + keyFormat, + privateKey, + null); + + if (success) + { + _pushClient.PushClient.ApplyChanges(); + } + VerifyNewPushServerCert(newCert.RawData); + } + + [Test, Order(540)] + public void UpdateCertificateNewKeyPairPFX() + { + UpdateCertificateWithNewKeyPair("PFX"); + } + + [Test, Order(550)] + public void UpdateCertificateNewKeyPairPEM() + { + UpdateCertificateWithNewKeyPair("PEM"); + } + + public void UpdateCertificateWithNewKeyPair(string keyFormat) + { + ConnectPushClient(true); + var keyFormats = _pushClient.PushClient.GetSupportedKeyFormats(); + if (!keyFormats.Contains(keyFormat)) + { + Assert.Ignore("Push server doesn't support {0} key update", keyFormat); + } + + NodeId requestId = _gdsClient.GDSClient.StartNewKeyPairRequest( + _applicationRecord.ApplicationId, + null, + null, + _selfSignedServerCert.Subject, + _domainNames, + keyFormat, + null); + + Assert.NotNull(requestId); + byte[] privateKey = null; + byte[] certificate = null; + byte[][] issuerCertificates = null; + DateTime now = DateTime.UtcNow; + do + { + try + { + Thread.Sleep(500); + certificate = _gdsClient.GDSClient.FinishRequest( + _applicationRecord.ApplicationId, + requestId, + out privateKey, + out issuerCertificates); + } + catch (ServiceResultException sre) + { + // wait if GDS requires manual approval of cert request + if (sre.StatusCode == StatusCodes.BadNothingToDo && + now.AddMinutes(5) > DateTime.UtcNow) + { + Thread.Sleep(10000); + } + else + { + throw; + } + } + } while (certificate == null); + Assert.NotNull(issuerCertificates); + Assert.NotNull(privateKey); + DisconnectGDSClient(); + + var success = _pushClient.PushClient.UpdateCertificate( + _pushClient.PushClient.DefaultApplicationGroup, + _pushClient.PushClient.ApplicationCertificateType, + certificate, + keyFormat, + privateKey, + issuerCertificates); + if (success) + { + _pushClient.PushClient.ApplyChanges(); + } + VerifyNewPushServerCert(certificate); + } + + [Test, Order(600)] + public void GetRejectedList() + { + ConnectPushClient(true); + var collection = _pushClient.PushClient.GetRejectedList(); + Assert.NotNull(collection); + } + + [Test, Order(700)] + public void ApplyChanges() + { + ConnectPushClient(true); + _pushClient.PushClient.ApplyChanges(); + } + + [Test, Order(800)] + public void VerifyNoUserAccess() + { + ConnectPushClient(false); + Assert.That(() => { _pushClient.PushClient.ApplyChanges(); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.GetRejectedList(); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.UpdateCertificate(null, null, _selfSignedServerCert.RawData, null, null, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.CreateSigningRequest(null, null, null, false, null); }, Throws.Exception); + Assert.That(() => { _pushClient.PushClient.ReadTrustList(); }, Throws.Exception); + } + #endregion + + #region Private Methods + private void ConnectPushClient(bool sysAdmin, + [System.Runtime.CompilerServices.CallerMemberName] string memberName = "" + ) + { + _pushClient.PushClient.AdminCredentials = sysAdmin ? _pushClient.SysAdminUser : _pushClient.AppUser; + _pushClient.PushClient.Connect(_pushClient.PushClient.EndpointUrl).Wait(); + TestContext.Progress.WriteLine($"GDS Push({sysAdmin}) Connected -- {memberName}"); + } + + private void DisconnectPushClient() + { + _pushClient.PushClient.Disconnect(); + } + + private void ConnectGDSClient(bool admin, + [System.Runtime.CompilerServices.CallerMemberName] string memberName = "" + ) + { + _gdsClient.GDSClient.AdminCredentials = admin ? _gdsClient.AdminUser : _gdsClient.AppUser; + _gdsClient.GDSClient.Connect(_gdsClient.GDSClient.EndpointUrl).Wait(); + TestContext.Progress.WriteLine($"GDS Client({admin}) connected -- {memberName}"); + } + + private void DisconnectGDSClient() + { + _gdsClient.GDSClient.Disconnect(); + } + + private X509Certificate2Collection CreateCertCollection(ByteStringCollection certList) + { + var result = new X509Certificate2Collection(); + foreach (var rawCert in certList) + { + result.Add(new X509Certificate2(rawCert)); + } + return result; + } + + private void RegisterPushServerApplication(string discoveryUrl) + { + if (_applicationRecord == null && discoveryUrl != null) + { + EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(discoveryUrl, true); + ApplicationDescription description = endpointDescription.Server; + _applicationRecord = new ApplicationRecordDataType { + ApplicationNames = new LocalizedTextCollection { description.ApplicationName }, + ApplicationUri = description.ApplicationUri, + ApplicationType = description.ApplicationType, + ProductUri = description.ProductUri, + DiscoveryUrls = description.DiscoveryUrls, + ServerCapabilities = new StringCollection { "NA" }, + }; + } + Assert.IsNotNull(_applicationRecord); + Assert.IsNull(_applicationRecord.ApplicationId); + NodeId id = _gdsClient.GDSClient.RegisterApplication(_applicationRecord); + Assert.IsNotNull(id); + _applicationRecord.ApplicationId = id; + + // add issuer and trusted certs to client stores + NodeId trustListId = _gdsClient.GDSClient.GetTrustList(id, null); + var trustList = _gdsClient.GDSClient.ReadTrustList(trustListId); + AddTrustListToStore(_gdsClient.Config.SecurityConfiguration, trustList); + AddTrustListToStore(_pushClient.Config.SecurityConfiguration, trustList); + } + + private void UnRegisterPushServerApplication() + { + _gdsClient.GDSClient.UnregisterApplication(_applicationRecord.ApplicationId); + _applicationRecord.ApplicationId = null; + } + + private void VerifyNewPushServerCert(byte[] certificate) + { + DisconnectPushClient(); + Thread.Sleep(2000); + _gdsClient.GDSClient.Connect(_gdsClient.GDSClient.EndpointUrl).Wait(); + _pushClient.PushClient.Connect(_pushClient.PushClient.EndpointUrl).Wait(); + Assert.AreEqual( + certificate, + _pushClient.PushClient.Session.ConfiguredEndpoint.Description.ServerCertificate + ); + } + + private bool AddTrustListToStore(SecurityConfiguration config, TrustListDataType trustList) + { + TrustListMasks masks = (TrustListMasks)trustList.SpecifiedLists; + + X509Certificate2Collection issuerCertificates = null; + List issuerCrls = null; + X509Certificate2Collection trustedCertificates = null; + List trustedCrls = null; + + // test integrity of all CRLs + if ((masks & TrustListMasks.IssuerCertificates) != 0) + { + issuerCertificates = new X509Certificate2Collection(); + foreach (var cert in trustList.IssuerCertificates) + { + issuerCertificates.Add(new X509Certificate2(cert)); + } + } + if ((masks & TrustListMasks.IssuerCrls) != 0) + { + issuerCrls = new List(); + foreach (var crl in trustList.IssuerCrls) + { + issuerCrls.Add(new X509CRL(crl)); + } + } + if ((masks & TrustListMasks.TrustedCertificates) != 0) + { + trustedCertificates = new X509Certificate2Collection(); + foreach (var cert in trustList.TrustedCertificates) + { + trustedCertificates.Add(new X509Certificate2(cert)); + } + } + if ((masks & TrustListMasks.TrustedCrls) != 0) + { + trustedCrls = new List(); + foreach (var crl in trustList.TrustedCrls) + { + trustedCrls.Add(new X509CRL(crl)); + } + } + + // update store + // test integrity of all CRLs + TrustListMasks updateMasks = TrustListMasks.None; + if ((masks & TrustListMasks.IssuerCertificates) != 0) + { + if (UpdateStoreCertificates(config.TrustedIssuerCertificates.StorePath, issuerCertificates)) + { + updateMasks |= TrustListMasks.IssuerCertificates; + } + } + if ((masks & TrustListMasks.IssuerCrls) != 0) + { + if (UpdateStoreCrls(config.TrustedIssuerCertificates.StorePath, issuerCrls)) + { + updateMasks |= TrustListMasks.IssuerCrls; + } + } + if ((masks & TrustListMasks.TrustedCertificates) != 0) + { + if (UpdateStoreCertificates(config.TrustedPeerCertificates.StorePath, trustedCertificates)) + { + updateMasks |= TrustListMasks.TrustedCertificates; + } + } + if ((masks & TrustListMasks.TrustedCrls) != 0) + { + if (UpdateStoreCrls(config.TrustedPeerCertificates.StorePath, trustedCrls)) + { + updateMasks |= TrustListMasks.TrustedCrls; + } + } + + return masks == updateMasks; + } + + private bool UpdateStoreCrls( + string storePath, + IList updatedCrls) + { + bool result = true; + try + { + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(storePath)) + { + var storeCrls = store.EnumerateCRLs(); + foreach (var crl in storeCrls) + { + if (!updatedCrls.Contains(crl)) + { + if (!store.DeleteCRL(crl)) + { + result = false; + } + } + else + { + updatedCrls.Remove(crl); + } + } + foreach (var crl in updatedCrls) + { + store.AddCRL(crl); + } + } + } + catch + { + result = false; + } + return result; + } + + private bool UpdateStoreCertificates( + string storePath, + X509Certificate2Collection updatedCerts) + { + bool result = true; + try + { + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(storePath)) + { + var storeCerts = store.Enumerate().Result; + foreach (var cert in storeCerts) + { + if (!updatedCerts.Contains(cert)) + { + if (!store.Delete(cert.Thumbprint).Result) + { + result = false; + } + } + else + { + updatedCerts.Remove(cert); + } + } + foreach (var cert in updatedCerts) + { + store.Add(cert).Wait(); + } + } + } + catch + { + result = false; + } + return result; + } + + /// + /// Create CA test certificates. + /// + private async Task CreateCATestCerts(string tempStorePath) + { + Assert.IsTrue(EraseStore(tempStorePath)); + + string subjectName = "CN=CA Test Cert, O=OPC Foundation"; + X509Certificate2 newCACert = CertificateFactory.CreateCertificate( + null, null, subjectName, null) + .SetCAConstraint() + .CreateForRSA() + .AddToStore(CertificateStoreType.Directory, tempStorePath); + + _caCert = newCACert; + + // initialize cert revocation list (CRL) + X509CRL newCACrl = await CertificateGroup.RevokeCertificateAsync(tempStorePath, newCACert); + + _caCrl = newCACrl; + } + + private bool EraseStore(string storePath) + { + bool result = true; + try + { + using (ICertificateStore store = CertificateStoreIdentifier.OpenStore(storePath)) + { + var storeCerts = store.Enumerate().Result; + foreach (var cert in storeCerts) + { + if (!store.Delete(cert.Thumbprint).Result) + { + result = false; + } + } + var storeCrls = store.EnumerateCRLs(); + foreach (var crl in storeCrls) + { + if (!store.DeleteCRL(crl)) + { + result = false; + } + } + } + } + catch + { + result = false; + } + return result; + } + #endregion + + #region Private Fields + private const int randomStart = 1; + private RandomSource _randomSource; + private DataGenerator _dataGenerator; + private GlobalDiscoveryTestServer _server; + private GlobalDiscoveryTestClient _gdsClient; + private ServerConfigurationPushTestClient _pushClient; + private ServerCapabilities _serverCapabilities; + private ApplicationRecordDataType _applicationRecord; + private X509Certificate2 _selfSignedServerCert; + private string[] _domainNames; + private X509Certificate2 _caCert; + private X509CRL _caCrl; + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/ServerConfigurationPushTestClient.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/ServerConfigurationPushTestClient.cs new file mode 100644 index 00000000..adec1988 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/ServerConfigurationPushTestClient.cs @@ -0,0 +1,180 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Runtime.Serialization; +using System.Threading.Tasks; +using Opc.Ua.Configuration; +using Opc.Ua.Gds.Client; + + +namespace Opc.Ua.Gds.Tests +{ + + public class ServerConfigurationPushTestClient + { + public ServerPushConfigurationClient PushClient => _client; + public static bool AutoAccept = false; + + public ServerConfigurationPushTestClient(bool autoAccept) + { + AutoAccept = autoAccept; + } + + public IUserIdentity AppUser { get; private set; } + public IUserIdentity SysAdminUser { get; private set; } + public string TempStorePath { get; private set; } + public ApplicationConfiguration Config { get; private set; } + public async Task LoadClientConfiguration(int port = -1) + { + ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); + ApplicationInstance application = new ApplicationInstance { + ApplicationName = "Server Configuration Push Test Client", + ApplicationType = ApplicationType.Client, + ConfigSectionName = "Opc.Ua.ServerConfigurationPushTestClient" + }; + + // load the application configuration. + Config = await application.LoadApplicationConfiguration(false); + + // check the application certificate. + bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(true, 0); + if (!haveAppCertificate) + { + throw new Exception("Application instance certificate invalid!"); + } + + Config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation); + + ServerConfigurationPushTestClientConfiguration clientConfiguration = application.ApplicationConfiguration.ParseExtension(); + _client = new ServerPushConfigurationClient(application) { + EndpointUrl = TestUtils.PatchOnlyGDSEndpointUrlPort(clientConfiguration.ServerUrl, port) + }; + if (String.IsNullOrEmpty(clientConfiguration.AppUserName)) + { + AppUser = new UserIdentity(new AnonymousIdentityToken()); + } + else + { + AppUser = new UserIdentity(clientConfiguration.AppUserName, clientConfiguration.AppPassword); + } + SysAdminUser = new UserIdentity(clientConfiguration.SysAdminUserName, clientConfiguration.SysAdminPassword); + TempStorePath = clientConfiguration.TempStorePath; + } + + public void DisconnectClient() + { + Console.WriteLine("Disconnect Session. Waiting for exit..."); + + if (_client != null) + { + ServerPushConfigurationClient pushClient = _client; + _client = null; + pushClient.Disconnect(); + } + + } + + public string ReadLogFile() + { + return File.ReadAllText(Utils.ReplaceSpecialFolderNames(Config.TraceConfiguration.OutputFilePath)); + } + + private static void CertificateValidator_CertificateValidation(CertificateValidator validator, CertificateValidationEventArgs e) + { + if (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted) + { + e.Accept = AutoAccept; + if (AutoAccept) + { + Console.WriteLine("Accepted Certificate: {0}", e.Certificate.Subject); + } + else + { + Console.WriteLine("Rejected Certificate: {0}", e.Certificate.Subject); + } + } + } + + private ServerPushConfigurationClient _client; + + } + + /// + /// Stores the configuration the data access node manager. + /// + [DataContract(Namespace = Opc.Ua.Namespaces.OpcUaConfig)] + public class ServerConfigurationPushTestClientConfiguration + { + #region Constructors + /// + /// The default constructor. + /// + public ServerConfigurationPushTestClientConfiguration() + { + Initialize(); + } + + /// + /// Initializes the object during deserialization. + /// + [OnDeserializing()] + private void Initialize(StreamingContext context) + { + Initialize(); + } + + /// + /// Sets private members to default values. + /// + private void Initialize() + { + } + #endregion + + #region Public + [DataMember(Order = 1, IsRequired = true)] + public string ServerUrl { get; set; } + [DataMember(Order = 2)] + public string AppUserName { get; set; } + [DataMember(Order = 3)] + public string AppPassword { get; set; } + [DataMember(Order = 4, IsRequired = true)] + public string SysAdminUserName { get; set; } + [DataMember(Order = 5, IsRequired = true)] + public string SysAdminPassword { get; set; } + [DataMember(Order = 6, IsRequired = true)] + public string TempStorePath { get; set; } + #endregion + + #region Private Members + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/X509TestUtils.cs b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/X509TestUtils.cs new file mode 100644 index 00000000..a5cd0317 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/X509TestUtils.cs @@ -0,0 +1,159 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Security.Cryptography.X509Certificates; +using NUnit.Framework; +using Opc.Ua.Security.Certificates; + +namespace Opc.Ua.Gds.Tests +{ + + public static class X509TestUtils + { + public static void VerifyApplicationCertIntegrity(byte[] certificate, byte[] privateKey, string privateKeyPassword, string privateKeyFormat, byte[][] issuerCertificates) + { + X509Certificate2 newCert = new X509Certificate2(certificate); + Assert.IsNotNull(newCert); + X509Certificate2 newPrivateKeyCert = null; + if (privateKeyFormat == "PFX") + { + newPrivateKeyCert = X509Utils.CreateCertificateFromPKCS12(privateKey, privateKeyPassword); + } + else if (privateKeyFormat == "PEM") + { + newPrivateKeyCert = CertificateFactory.CreateCertificateWithPEMPrivateKey(newCert, privateKey, privateKeyPassword); + } + else + { + Assert.Fail("Invalid private key format"); + } + Assert.IsNotNull(newPrivateKeyCert); + // verify the public cert matches the private key + Assert.IsTrue(X509Utils.VerifyRSAKeyPair(newCert, newPrivateKeyCert, true)); + Assert.IsTrue(X509Utils.VerifyRSAKeyPair(newPrivateKeyCert, newPrivateKeyCert, true)); + CertificateIdentifierCollection issuerCertIdCollection = new CertificateIdentifierCollection(); + foreach (var issuer in issuerCertificates) + { + var issuerCert = new X509Certificate2(issuer); + Assert.IsNotNull(issuerCert); + issuerCertIdCollection.Add(new CertificateIdentifier(issuerCert)); + } + + // verify cert with issuer chain + CertificateValidator certValidator = new CertificateValidator(); + CertificateTrustList issuerStore = new CertificateTrustList(); + CertificateTrustList trustedStore = new CertificateTrustList(); + trustedStore.TrustedCertificates = issuerCertIdCollection; + certValidator.Update(trustedStore, issuerStore, null); + Assert.That(() => { + certValidator.Validate(newCert); + }, Throws.Exception); + issuerStore.TrustedCertificates = issuerCertIdCollection; + certValidator.Update(issuerStore, trustedStore, null); + certValidator.Validate(newCert); + } + + public static void VerifySignedApplicationCert(ApplicationTestData testApp, byte[] rawSignedCert, byte[][] rawIssuerCerts) + { + X509Certificate2 signedCert = new X509Certificate2(rawSignedCert); + X509Certificate2 issuerCert = new X509Certificate2(rawIssuerCerts[0]); + + TestContext.Out.WriteLine($"Signed cert: {signedCert}"); + TestContext.Out.WriteLine($"Issuer cert: {issuerCert}"); + + Assert.NotNull(signedCert); + Assert.False(signedCert.HasPrivateKey); + Assert.True(X509Utils.CompareDistinguishedName(testApp.Subject, signedCert.Subject)); + Assert.False(X509Utils.CompareDistinguishedName(signedCert.Issuer, signedCert.Subject)); + Assert.True(X509Utils.CompareDistinguishedName(signedCert.Issuer, issuerCert.Subject)); + TestContext.Out.WriteLine($"Signed Subject: {signedCert.Subject}"); + TestContext.Out.WriteLine($"Issuer Subject: {issuerCert.Subject}"); + + // test basic constraints + X509BasicConstraintsExtension constraints = X509Extensions.FindExtension(signedCert); + Assert.NotNull(constraints); + TestContext.Out.WriteLine($"Constraints: {constraints.Format(true)}"); + Assert.True(constraints.Critical); + Assert.False(constraints.CertificateAuthority); + Assert.False(constraints.HasPathLengthConstraint); + + // key usage + X509KeyUsageExtension keyUsage = X509Extensions.FindExtension(signedCert); + Assert.NotNull(keyUsage); + TestContext.Out.WriteLine($"KeyUsage: {keyUsage.Format(true)}"); + Assert.True(keyUsage.Critical); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.CrlSign) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DataEncipherment) == X509KeyUsageFlags.DataEncipherment); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DecipherOnly) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.DigitalSignature) == X509KeyUsageFlags.DigitalSignature); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.EncipherOnly) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyAgreement) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyCertSign) == 0); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.KeyEncipherment) == X509KeyUsageFlags.KeyEncipherment); + Assert.True((keyUsage.KeyUsages & X509KeyUsageFlags.NonRepudiation) == X509KeyUsageFlags.NonRepudiation); + + // enhanced key usage + X509EnhancedKeyUsageExtension enhancedKeyUsage = X509Extensions.FindExtension(signedCert); + Assert.NotNull(enhancedKeyUsage); + TestContext.Out.WriteLine($"Enhanced Key Usage: {enhancedKeyUsage.Format(true)}"); + Assert.True(enhancedKeyUsage.Critical); + + // test for authority key + X509AuthorityKeyIdentifierExtension authority = X509Extensions.FindExtension(signedCert); + Assert.NotNull(authority); + TestContext.Out.WriteLine($"Authority Key Identifier: {authority.Format(true)}"); + Assert.NotNull(authority.SerialNumber); + Assert.NotNull(authority.KeyIdentifier); + Assert.NotNull(authority.Issuer); + Assert.AreEqual(issuerCert.SubjectName.RawData, authority.Issuer.RawData); + Assert.AreEqual(issuerCert.SubjectName.RawData, authority.Issuer.RawData); + + // verify authority key in signed cert + X509SubjectKeyIdentifierExtension subjectKeyId = X509Extensions.FindExtension(issuerCert); + TestContext.Out.WriteLine($"Issuer Subject Key Identifier: {subjectKeyId}"); + Assert.AreEqual(subjectKeyId.SubjectKeyIdentifier, authority.KeyIdentifier); + Assert.AreEqual(issuerCert.SerialNumber, authority.SerialNumber); + + X509SubjectAltNameExtension subjectAlternateName = X509Extensions.FindExtension(signedCert); + Assert.NotNull(subjectAlternateName); + TestContext.Out.WriteLine($"Issuer Subject Alternate Name: {subjectAlternateName}"); + Assert.False(subjectAlternateName.Critical); + var domainNames = X509Utils.GetDomainsFromCertficate(signedCert); + foreach (var domainName in testApp.DomainNames) + { + Assert.True(domainNames.Contains(domainName, StringComparer.OrdinalIgnoreCase)); + } + Assert.True(subjectAlternateName.Uris.Count == 1); + var applicationUri = X509Utils.GetApplicationUriFromCertificate(signedCert); + Assert.True(testApp.ApplicationRecord.ApplicationUri == applicationUri); + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/test.csr b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/test.csr new file mode 100644 index 00000000..7d98d96f Binary files /dev/null and b/IOB-OPC-UA/Tests/Opc.Ua.Gds.Tests/test.csr differ diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/DataCollectorTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/DataCollectorTests.cs new file mode 100644 index 00000000..6585aa89 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/DataCollectorTests.cs @@ -0,0 +1,296 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua.PubSub.Configuration; +using Opc.Ua.PubSub.PublishedData; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for DataCollector class")] + public class DataCollectorTests + { + private const string ConfigurationFileName = "PublisherConfiguration.xml"; + public const int NamespaceIndex = 2; + + [Test(Description = "Validate AddPublishedDataSet with null parameter.")] + public void ValidateAddPublishedDataSetWithNullParameter() + { + //Arrange + DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); + + //Assert + Assert.Throws(() => dataCollector.AddPublishedDataSet(null)); + } + + [Test(Description = "Validate AddPublishedDataSet.")] + public void ValidateAddPublishedDataSet() + { + //Arrange + DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); + var pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(ConfigurationFileName); + //Act + dataCollector.AddPublishedDataSet(pubSubConfiguration.PublishedDataSets[0]); + DataSet collectedDataSet = dataCollector.CollectData(pubSubConfiguration.PublishedDataSets[0].Name); + //Assert + Assert.IsNotNull(collectedDataSet, + "Cannot collect data therefore the '{0}' publishedDataSet was not registered correctly.", pubSubConfiguration.PublishedDataSets[0].Name); + } + + [Test(Description = "Validate RemovePublishedDataSet.")] + public void ValidateRemovePublishedDataSet() + { + //Arrange + DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); + PublishedDataSetDataType publishedDataSet = new PublishedDataSetDataType(); + publishedDataSet.Name = "Name"; + //Act + dataCollector.AddPublishedDataSet(publishedDataSet); + dataCollector.RemovePublishedDataSet(publishedDataSet); + DataSet collectedDataSet = dataCollector.CollectData(publishedDataSet.Name); + //Assert + Assert.IsNull(collectedDataSet, "The '{0}' publishedDataSet was not removed correctly.", publishedDataSet.Name); + } + + [Test(Description = "Validate RemovePublishedDataSet with null parameter.")] + public void ValidateRemovePublishedDataSetWithNullParameter() + { + //Arrange + DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); + //Assert + Assert.Throws(() => dataCollector.RemovePublishedDataSet(null)); + } + + [Test(Description = "Validate CollectData from DataStore.")] + public void ValidateCollectDataFromDataStore() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + dataStore.WritePublishedDataItem(new NodeId("BoolToggle", NamespaceIndex), 0, new DataValue(new Variant(false))); + dataStore.WritePublishedDataItem(new NodeId("Int32", NamespaceIndex), 0, new DataValue(new Variant(1))); + dataStore.WritePublishedDataItem(new NodeId("Int32Fast", NamespaceIndex), 0, new DataValue(new Variant(2))); + dataStore.WritePublishedDataItem(new NodeId("DateTime", NamespaceIndex), 0, new DataValue(new Variant(DateTime.MaxValue))); + + DataCollector dataCollector = new DataCollector(dataStore); + #region set up published data set that collects data from extension fields + PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType(); + publishedDataSetSimple.Name = "Simple"; + // Define publishedDataSetSimple.DataSetMetaData + publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType(); + publishedDataSetSimple.DataSetMetaData.DataSetClassId = new Uuid(Guid.Empty); + publishedDataSetSimple.DataSetMetaData.Name = publishedDataSetSimple.Name; + publishedDataSetSimple.DataSetMetaData.Fields = new FieldMetaDataCollection() + { + new FieldMetaData() + { + Name = "BoolToggle", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.Boolean, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32Fast", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "DateTime", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.DateTime, + ValueRank = ValueRanks.Scalar + } + }; + + PublishedDataItemsDataType publishedDataItems = new PublishedDataItemsDataType(); + publishedDataItems.PublishedData = new PublishedVariableDataTypeCollection(); + //create PublishedData based on metadata names + foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields) + { + publishedDataItems.PublishedData.Add( + new PublishedVariableDataType() + { + PublishedVariable = new NodeId(field.Name, NamespaceIndex), + AttributeId = Attributes.Value, + }); + } + publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataItems); + #endregion + + //Act + dataCollector.AddPublishedDataSet(publishedDataSetSimple); + DataSet collectedDataSet = dataCollector.CollectData(publishedDataSetSimple.Name); + + //Assert + Assert.IsNotNull(publishedDataItems, "The m_firstPublishedDataSet.DataSetSource is not PublishedDataItemsDataType."); + Assert.IsNotNull(collectedDataSet, "collectedDataSet is null."); + Assert.IsNotNull(collectedDataSet.Fields, "collectedDataSet.Fields is null."); + + Assert.AreEqual(collectedDataSet.Fields.Length, publishedDataItems.PublishedData.Count, "collectedDataSet and published data fields count do not match."); + + // validate collected values + Assert.AreEqual(collectedDataSet.Fields[0].Value.Value, false, "collectedDataSet.Fields[0].Value.Value does not match."); + Assert.AreEqual(collectedDataSet.Fields[1].Value.Value, (int)1, "collectedDataSet.Fields[1].Value.Value does not match."); + Assert.AreEqual(collectedDataSet.Fields[2].Value.Value, (int)2, "collectedDataSet.Fields[2].Value.Value does not match."); + Assert.AreEqual(collectedDataSet.Fields[3].Value.Value, DateTime.MaxValue, "collectedDataSet.Fields[3].Value.Value does not match."); + } + + + [Test(Description = "Validate CollectData from ExtensionFields.")] + public void ValidateCollectDataFromExtensionFields() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + DataCollector dataCollector = new DataCollector(dataStore); + #region set up published data set that collects data from extension fields + PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType(); + publishedDataSetSimple.Name = "Simple"; + // Define publishedDataSetSimple.DataSetMetaData + publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType(); + publishedDataSetSimple.DataSetMetaData.DataSetClassId = new Uuid(Guid.Empty); + publishedDataSetSimple.DataSetMetaData.Name = publishedDataSetSimple.Name; + publishedDataSetSimple.DataSetMetaData.Fields = new FieldMetaDataCollection() + { + new FieldMetaData() + { + Name = "BoolToggle", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.Boolean, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "Int32Fast", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new FieldMetaData() + { + Name = "DateTime", + DataSetFieldId = new Uuid(Guid.NewGuid()), + DataType = DataTypeIds.DateTime, + ValueRank = ValueRanks.Scalar + } + }; + + //initialize Extension fields collection + publishedDataSetSimple.ExtensionFields = new KeyValuePairCollection() + { + new Opc.Ua.KeyValuePair() + { + Key = new QualifiedName("BoolToggle"), + Value = true + }, + new Opc.Ua.KeyValuePair() + { + Key = new QualifiedName("Int32"), + Value = (int)100 + }, + new Opc.Ua.KeyValuePair() + { + Key = new QualifiedName("Int32Fast"), + Value = (int)50 + }, + new Opc.Ua.KeyValuePair() + { + Key = new QualifiedName( "DateTime"), + Value = DateTime.Today + } + }; + + PublishedDataItemsDataType publishedDataItems = new PublishedDataItemsDataType(); + publishedDataItems.PublishedData = new PublishedVariableDataTypeCollection(); + //create PublishedData based on metadata names + foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields) + { + publishedDataItems.PublishedData.Add( + new PublishedVariableDataType() + { + SubstituteValue = new QualifiedName(field.Name) + }); + } + publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataItems); + #endregion + + //Act + dataCollector.AddPublishedDataSet(publishedDataSetSimple); + DataSet collectedDataSet = dataCollector.CollectData(publishedDataSetSimple.Name); + //Assert + Assert.IsNotNull(publishedDataItems, "The m_firstPublishedDataSet.DataSetSource is not PublishedDataItemsDataType."); + Assert.IsNotNull(collectedDataSet, "collectedDataSet is null."); + Assert.IsNotNull(collectedDataSet.Fields, "collectedDataSet.Fields is null."); + + Assert.AreEqual(collectedDataSet.Fields.Length, publishedDataItems.PublishedData.Count, "collectedDataSet and published data fields count do not match."); + // validate collected values + Assert.AreEqual(collectedDataSet.Fields[0].Value.Value, true, "collectedDataSet.Fields[0].Value.Value does not match."); + Assert.AreEqual(collectedDataSet.Fields[1].Value.Value, (int)100, "collectedDataSet.Fields[1].Value.Value does not match."); + Assert.AreEqual(collectedDataSet.Fields[2].Value.Value, (int)50, "collectedDataSet.Fields[2].Value.Value does not match."); + Assert.AreEqual(collectedDataSet.Fields[3].Value.Value, DateTime.Today, "collectedDataSet.Fields[3].Value.Value does not match."); + } + + [Test(Description = "Validate CollectData unknown dataset name.")] + public void ValidateCollectDataUnknownDataSetName() + { + //Arrange + DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); + //Act + DataSet collectedDataSet = dataCollector.CollectData(""); + //Assert + Assert.IsNull(collectedDataSet, "The data collect returns data for unknown DataSetName."); + } + + [Test(Description = "Validate CollectData null dataset name.")] + public void ValidateCollectDataNullDataSetName() + { + //Arrange + DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); + + //Assert + Assert.Throws(()=> dataCollector.CollectData(null), "The data collect does not throw exception when null parameter."); + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/Main.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/Main.cs new file mode 100644 index 00000000..600ccb17 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/Main.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +#if NETFRAMEWORK +namespace Opc.Ua.PubSub.Tests +{ + static class Program + { + // Main Method + static public void Main(String[] args) + { + } + } +} +#endif diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/Opc.Ua.PubSub.Tests.Disabled.csproj b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/Opc.Ua.PubSub.Tests.Disabled.csproj new file mode 100644 index 00000000..dd5a5f0c --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/Opc.Ua.PubSub.Tests.Disabled.csproj @@ -0,0 +1,41 @@ + + + + Exe + $(TestsTargetFrameworks) + Opc.Ua.PubSub.Tests + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubConfiguratorTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubConfiguratorTests.cs new file mode 100644 index 00000000..f816eef6 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubConfiguratorTests.cs @@ -0,0 +1,1004 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Configuration; +using System; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for UaPubSubApplication class")] + public class UaPubSubConfiguratorTests + { + static int CallCountPublishedDataSetAdded = 0; + static int CallCountPublishedDataSetRemoved = 0; + static int CallCountConnectionRemoved = 0; + static int CallCountConnectionAdded = 0; + static int CallCountDataSetReaderAdded = 0; + static int CallCountDataSetReaderRemoved = 0; + static int CallCountDataSetWriterAdded = 0; + static int CallCountDataSetWriterRemoved = 0; + static int CallCountReaderGroupAdded = 0; + static int CallCountReaderGroupRemoved = 0; + static int CallCountWriterGroupAdded = 0; + static int CallCountWriterGroupRemoved = 0; + + private const string PublisherConfigurationFileName = "PublisherConfiguration.xml"; + private const string SubscriberConfigurationFileName = "SubscriberConfiguration.xml"; + + UaPubSubConfigurator m_uaPubSubConfigurator; + + PubSubConfigurationDataType m_pubConfigurationLoaded = null; + PubSubConfigurationDataType m_subConfigurationLoaded = null; + + [SetUp()] + public void MyTestInitialize() + { + m_uaPubSubConfigurator = new UaPubSubConfigurator(); + + + // Attach triggers that count calls + m_uaPubSubConfigurator.ConnectionAdded += (sender, e) => CallCountConnectionAdded += 1; + m_uaPubSubConfigurator.ConnectionRemoved += (sender, e) => CallCountConnectionRemoved += 1; + m_uaPubSubConfigurator.PublishedDataSetAdded += (sender,e) => CallCountPublishedDataSetAdded += 1; + m_uaPubSubConfigurator.PublishedDataSetRemoved += (sender, e) => CallCountPublishedDataSetRemoved += 1; + m_uaPubSubConfigurator.DataSetReaderAdded += (sender, e) => CallCountDataSetReaderAdded += 1; + m_uaPubSubConfigurator.DataSetReaderRemoved += (sender, e) => CallCountDataSetReaderRemoved += 1; + m_uaPubSubConfigurator.DataSetWriterAdded += (sender, e) => CallCountDataSetWriterAdded += 1; + m_uaPubSubConfigurator.DataSetWriterRemoved += (sender, e) => CallCountDataSetWriterRemoved += 1; + m_uaPubSubConfigurator.ReaderGroupAdded += (sender, e) => CallCountReaderGroupAdded += 1; + m_uaPubSubConfigurator.ReaderGroupRemoved += (sender, e) => CallCountReaderGroupRemoved += 1; + m_uaPubSubConfigurator.WriterGroupAdded += (sender, e) => CallCountWriterGroupAdded += 1; + m_uaPubSubConfigurator.WriterGroupRemoved += (sender, e) => CallCountWriterGroupRemoved += 1; + + // A publisher configuration source + m_pubConfigurationLoaded = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + // A subscriber configuration source + m_subConfigurationLoaded = UaPubSubConfigurationHelper.LoadConfiguration(SubscriberConfigurationFileName); + } + + #region AddConnection + [Test(Description = "Validate ConnectionAdded event is triggered")] + public void ValidateConnectionAdded() + { + var expected = CallCountConnectionAdded + 1; + StatusCode result = m_uaPubSubConfigurator.AddConnection(new PubSubConnectionDataType()); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(expected, CallCountConnectionAdded, 0, "Expected value of CallCountConnectionAdded not equal to {0}", expected); + } + + [Test(Description = "Validate AddConnection returns code BadBrowseNameDuplicated if duplicate name connections added.")] + public void ValidateAddConnectionReturnsBadBrowseNameDuplicated() + { + PubSubConnectionDataType connection1 = new PubSubConnectionDataType(); + connection1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddConnection(connection1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + PubSubConnectionDataType connection2 = new PubSubConnectionDataType(); + connection2.Name = "Name"; + result = m_uaPubSubConfigurator.AddConnection(connection2); + + Assert.IsTrue(result == StatusCodes.BadBrowseNameDuplicated, "Status code received {0} instead of BadBrowseNameDuplicated", result); + } + + [Test(Description = "Validate AddConnection throws ArgumentException if a connection is added twice")] + public void ValidateAddConnectionThrowsArgumentException() + { + PubSubConnectionDataType connection1 = new PubSubConnectionDataType(); + connection1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddConnection(connection1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + Assert.Throws(()=> m_uaPubSubConfigurator.AddConnection(connection1), "AddConnection shall throw ArgumentException if same connection is added twice"); + } + #endregion + + [Test(Description = "Validate ConnectionRemoved event is triggered")] + public void ValidateConnectionRemoved() + { + var expected = CallCountConnectionRemoved + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.RemoveConnection(lastAddedConnId))); + Assert.AreEqual(expected, CallCountConnectionRemoved, 0); + } + + [Test(Description = "Validate PublishedDataSetAdded event is triggered")] + public void ValidatePublishedDataSetAdded() + { + var expected = CallCountPublishedDataSetAdded + 1; + StatusCode result = m_uaPubSubConfigurator.AddPublishedDataSet(new PublishedDataSetDataType()); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(expected, CallCountPublishedDataSetAdded, 0); + } + + [Test(Description = "Validate AddPublishedDataSet returns AddPublishedDataSet")] + public void ValidateAddPublishedDataSetBadBrowseNameDuplicated() + { + PublishedDataSetDataType publishedDataSetDataType = new PublishedDataSetDataType(); + publishedDataSetDataType.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddPublishedDataSet(publishedDataSetDataType); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + PublishedDataSetDataType publishedDataSetDataType2 = new PublishedDataSetDataType(); + publishedDataSetDataType2.Name = "Name"; + result = m_uaPubSubConfigurator.AddPublishedDataSet(publishedDataSetDataType2); + Assert.IsTrue(result == StatusCodes.BadBrowseNameDuplicated, "Status code received {0} instead of BadBrowseNameDuplicated", result); + } + + [Test(Description = "Validate PublishedDataSetRemoved event is triggered")] + public void ValidatePublishedDataSetRemoved() + { + var expected = CallCountPublishedDataSetRemoved + 1; + var publishedDataSet = new PublishedDataSetDataType(); + StatusCode result = m_uaPubSubConfigurator.AddPublishedDataSet(publishedDataSet); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint lastAddedPubDsId = m_uaPubSubConfigurator.FindIdForObject(publishedDataSet); + result = m_uaPubSubConfigurator.RemovePublishedDataSet(lastAddedPubDsId); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(expected, CallCountConnectionRemoved, 0); + } + + #region ReaderGroup + [Test(Description = "Validate ReaderGroupAdded event is triggered")] + public void ValidateReaderGroupAdded() + { + var expected = CallCountReaderGroupAdded + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, new ReaderGroupDataType()))); + Assert.AreEqual(expected, CallCountReaderGroupAdded, 0); + } + + [Test(Description = "Validate ReaderGroupRemoved event is triggered")] + public void ValidateReaderGroupRemoved() + { + var expected = CallCountReaderGroupRemoved + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + var readerGroup = new ReaderGroupDataType(); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup))); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.RemoveReaderGroup(readerGroup))); + Assert.AreEqual(expected, CallCountReaderGroupRemoved, 0); + } + + [Test(Description = "Validate AddReaderGroup throws ArgumentException if a reader-group is added twice")] + public void ValidateAddReaderGroupThrowsArgumentExceptionIfAddedTwice() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + ReaderGroupDataType readerGroup1 = new ReaderGroupDataType(); + readerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + Assert.Throws(() => m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup1), + "AddReaderGroup shall throw ArgumentException if same reader-group is added twice"); + } + + [Test(Description = "Validate AddReaderGroup returns code BadBrowseNameDuplicated if duplicate name group added.")] + public void ValidateAddReaderGroupReturnsBadBrowseNameDuplicated() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + ReaderGroupDataType readerGroup = new ReaderGroupDataType(); + readerGroup.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + ReaderGroupDataType readerGroup2 = new ReaderGroupDataType(); + readerGroup2.Name = "Name"; + result = m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup2); + + Assert.IsTrue(result == StatusCodes.BadBrowseNameDuplicated, "Status code received {0} instead of BadBrowseNameDuplicated", result); + } + + [Test(Description = "Validate AddReaderGroup returns code BadInvalidArgument if parentConnectionId is not a connection object.")] + public void ValidateAddReaderGroupReturnsBadInvalidArgument() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + + ReaderGroupDataType readerGroup = new ReaderGroupDataType(); + readerGroup.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddReaderGroup(1, readerGroup); + Assert.IsTrue(result == StatusCodes.BadInvalidArgument, "Status code received {0} instead of BadInvalidArgument", result); + } + + [Test(Description = "Validate AddREaderGroup throws ArgumentException if parent id is unknown")] + public void ValidateAddReaderGroupThrowsArgumentExceptionIfInvalidParent() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + + uint lastAddedConnId = 7; + ReaderGroupDataType readerGroup = new ReaderGroupDataType(); + readerGroup.Name = "Name"; + Assert.Throws(() => m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup), + "AddReaderGroup shall throw ArgumentException if readerGroup is added to invalid parent id"); + } + + #endregion + + #region WriterGroup + [Test(Description = "Validate WriterGroupAdded event is triggered")] + public void ValidateWriterGroupAdded() + { + var expected = CallCountWriterGroupAdded + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, new WriterGroupDataType()))); + Assert.AreEqual(expected, CallCountWriterGroupAdded, 0); + } + + [Test(Description = "Validate WriterGroupRemoved event is triggered")] + public void ValidateWriterGroupRemoved() + { + var expected = CallCountWriterGroupRemoved + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + var writerGrp = new WriterGroupDataType(); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGrp))); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.RemoveWriterGroup(writerGrp))); + Assert.AreEqual(expected, CallCountWriterGroupRemoved, 0); + } + + [Test(Description = "Validate AddWriterGroup returns code BadBrowseNameDuplicated if duplicate name writer-group added.")] + public void ValidateAddWriterGroupReturnsBadBrowseNameDuplicated() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + WriterGroupDataType writerGroup2 = new WriterGroupDataType(); + writerGroup2.Name = "Name"; + result = m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup2); + + Assert.IsTrue(result == StatusCodes.BadBrowseNameDuplicated, "Status code received {0} instead of BadBrowseNameDuplicated", result); + } + + [Test(Description = "Validate AddWriterGroup returns code BadInvalidArgument if parentConnectionId is not a connection object.")] + public void ValidateAddWriterGroupReturnsBadInvalidArgument() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddWriterGroup(1, writerGroup1); + Assert.IsTrue(result == StatusCodes.BadInvalidArgument, "Status code received {0} instead of BadInvalidArgument", result); + } + + [Test(Description = "Validate AddWriterGroup throws ArgumentException if a WriterGroup is added twice")] + public void ValidateAddWriterGroupThrowsArgumentExceptionIfAddedTwice() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + Assert.Throws(() => m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup1), + "AddWriterGroup shall throw ArgumentException if same writerGroup is added twice"); + } + + [Test(Description = "Validate AddWriterGroup throws ArgumentException if parent id is unknown")] + public void ValidateAddWriterGroupThrowsArgumentExceptionIfInvalidParent() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + + uint lastAddedConnId = 7; + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "Name"; + Assert.Throws(() => m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup1), + "AddWriterGroup shall throw ArgumentException if writerGroup is added to invalid parent id"); + } + #endregion + + #region DatasetReader + [Test(Description = "Validate DataSetReaderAdded event is triggered")] + public void ValidateDataSetReaderAdded() + { + var expected = CallCountDataSetReaderAdded + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + + ReaderGroupDataType newReaderGroup = new ReaderGroupDataType(); + m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, newReaderGroup); + uint lastAddedReaderGroupId = m_uaPubSubConfigurator.FindIdForObject(newReaderGroup); + + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddDataSetReader(lastAddedReaderGroupId, new DataSetReaderDataType()))); + Assert.AreEqual(expected, CallCountDataSetReaderAdded, 0); + } + + [Test(Description = "Validate DataSetReaderRemoved event is triggered")] + public void ValidateDataSetReaderRemoved() + { + var expected = CallCountDataSetReaderRemoved + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + + ReaderGroupDataType newReaderGroup = new ReaderGroupDataType(); + m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, newReaderGroup); + uint lastAddedReaderGroupId = m_uaPubSubConfigurator.FindIdForObject(newReaderGroup); + + var dsReader = new DataSetReaderDataType(); + + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddDataSetReader(lastAddedReaderGroupId, dsReader))); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.RemoveDataSetReader(dsReader))); + Assert.AreEqual(expected, CallCountDataSetReaderRemoved, 0); + } + + [Test(Description = "Validate AddDataSetReader returns code BadBrowseNameDuplicated if duplicate name dataset added.")] + public void ValidateAddDataSetReaderReturnsBadBrowseNameDuplicated() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + ReaderGroupDataType readerGroup1 = new ReaderGroupDataType(); + readerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint lastAddedGroup = m_uaPubSubConfigurator.FindIdForObject(readerGroup1); + DataSetReaderDataType reader1 = new DataSetReaderDataType(); + reader1.Name = "Name"; + result = m_uaPubSubConfigurator.AddDataSetReader(lastAddedGroup, reader1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + DataSetReaderDataType reader2 = new DataSetReaderDataType(); + reader2.Name = "Name"; + result = m_uaPubSubConfigurator.AddDataSetReader(lastAddedGroup, reader2); + + Assert.IsTrue(result == StatusCodes.BadBrowseNameDuplicated, "Status code received {0} instead of BadBrowseNameDuplicated", result); + } + + [Test(Description = "Validate AddDataSetReader throws ArgumentException if a dataset-reader is added twice")] + public void ValidateAddDataSetReaderThrowsArgumentException() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + ReaderGroupDataType readerGroup1 = new ReaderGroupDataType(); + readerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint lastAddedGroup = m_uaPubSubConfigurator.FindIdForObject(readerGroup1); + DataSetReaderDataType reader1 = new DataSetReaderDataType(); + reader1.Name = "Name"; + result = m_uaPubSubConfigurator.AddDataSetReader(lastAddedGroup, reader1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + Assert.Throws(() => m_uaPubSubConfigurator.AddDataSetReader(lastAddedGroup, reader1), + "AddDataSetReader shall throw ArgumentException if same dataset-reader is added twice"); + } + + [Test(Description = "Validate AddDataSetReader returns code BadInvalidArgument if parentgroupId is not a reader-group object.")] + public void ValidateAddDataSetReaderReturnsBadInvalidArgument() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + + DataSetReaderDataType reader1 = new DataSetReaderDataType(); + reader1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddDataSetReader(1, reader1); + Assert.IsTrue(result == StatusCodes.BadInvalidArgument, "Status code received {0} instead of BadInvalidArgument", result); + } + + #endregion + + #region DataSetWriter + [Test(Description = "Validate DataSetWriterAdded event is triggered")] + public void ValidateDataSetWriterAdded() + { + var expected = CallCountDataSetWriterAdded + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + + WriterGroupDataType newWriterGroup = new WriterGroupDataType(); + m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, newWriterGroup); + uint lastAddedWriterGroupId = m_uaPubSubConfigurator.FindIdForObject(newWriterGroup); + + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddDataSetWriter(lastAddedWriterGroupId, new DataSetWriterDataType()))); + Assert.AreEqual(expected, CallCountDataSetWriterAdded, 0); + } + + [Test(Description = "Validate DataSetWriterRemoved event is triggered")] + public void ValidateDataSetWriterRemoved() + { + var expected = CallCountDataSetWriterRemoved + 1; + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + + WriterGroupDataType newWriterGroup = new WriterGroupDataType(); + m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, newWriterGroup); + uint lastAddedWriterGroupId = m_uaPubSubConfigurator.FindIdForObject(newWriterGroup); + + var dsWriter = new DataSetWriterDataType(); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.AddDataSetWriter(lastAddedWriterGroupId, dsWriter))); + Assert.IsTrue(StatusCode.IsGood(m_uaPubSubConfigurator.RemoveDataSetWriter(dsWriter))); + Assert.AreEqual(expected, CallCountDataSetWriterRemoved, 0); + } + + [Test(Description = "Validate AddDataSetWriter returns code BadBrowseNameDuplicated if duplicate name dataset added.")] + public void ValidateAddDataSetWriterReturnsBadBrowseNameDuplicated() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint lastAddedGroup = m_uaPubSubConfigurator.FindIdForObject(writerGroup1); + DataSetWriterDataType writer1 = new DataSetWriterDataType(); + writer1.Name = "Name"; + result = m_uaPubSubConfigurator.AddDataSetWriter(lastAddedGroup, writer1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + DataSetWriterDataType writer2 = new DataSetWriterDataType(); + writer2.Name = "Name"; + result = m_uaPubSubConfigurator.AddDataSetWriter(lastAddedGroup, writer2); + + Assert.IsTrue(result == StatusCodes.BadBrowseNameDuplicated, "Status code received {0} instead of BadBrowseNameDuplicated", result); + } + + [Test(Description = "Validate AddDataSetWriter throws ArgumentException if a dataset-reader is added twice")] + public void ValidateAddDataSetWriterThrowsArgumentException() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + m_uaPubSubConfigurator.AddConnection(newConnection); + uint lastAddedConnId = m_uaPubSubConfigurator.FindIdForObject(newConnection); + WriterGroupDataType writerGroup1 = new WriterGroupDataType(); + writerGroup1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint lastAddedGroup = m_uaPubSubConfigurator.FindIdForObject(writerGroup1); + DataSetWriterDataType writer1 = new DataSetWriterDataType(); + writer1.Name = "Name"; + result = m_uaPubSubConfigurator.AddDataSetWriter(lastAddedGroup, writer1); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + Assert.Throws(() => m_uaPubSubConfigurator.AddDataSetWriter(lastAddedGroup, writer1), + "AddDataSetWriter shall throw ArgumentException if same dataset-reader is added twice"); + } + + [Test(Description = "Validate AddDataSetWriter returns code BadInvalidArgument if parentgroupId is not a reader-group object.")] + public void ValidateAddDataSetWriterReturnsBadInvalidArgument() + { + PubSubConnectionDataType newConnection = new PubSubConnectionDataType(); + + DataSetWriterDataType writer1 = new DataSetWriterDataType(); + writer1.Name = "Name"; + StatusCode result = m_uaPubSubConfigurator.AddDataSetWriter(1, writer1); + Assert.IsTrue(result == StatusCodes.BadInvalidArgument, "Status code received {0} instead of BadInvalidArgument", result); + } + #endregion + + [Test(Description = "Validate Publisher ConnectionAdded event is reflected in the parent UaPubSubApplication")] + public void ValidatePubConnectionAddedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_pubConfigurationLoaded.Connections) + { + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(pscon); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, pscon); + + targetIdx++; + } + } + + [Test(Description = "Validate Publisher ConnectionRemoved event is reflected in the parent UaPubSubApplication")] + public void ValidatePubConnectionRemovedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int initialCount = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_pubConfigurationLoaded.Connections) + { + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(pscon); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemoveConnection(pscon); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(initialCount, uaPubSubApplication.PubSubConnections.Count); + } + } + + [Test(Description = "Validate Publisher AddWriterGroup is reflected in the parent UaPubSubApplication")] + public void ValidateWriterGroupAddedAndReflectedInApplication() + { + // Create an UaPubSubApplicatuion with an empty configuration + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_pubConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first writer group in the configuration and check that it is reflected in Application + int lastAddedWriterGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups.Count; + + + WriterGroupDataType writerGroup = (WriterGroupDataType)psconNew.WriterGroups[0].MemberwiseClone(); + writerGroup.Name = writerGroup.Name + "_"; + + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + uaPubSubApplication.UaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup); + + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, psconNew); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[lastAddedWriterGroupIdx], writerGroup); + break; + } + } + + [Test(Description = "Validate Publisher RemoveWriterGroup is reflected in the parent UaPubSubApplication")] + public void ValidateWriterGroupRemovedAndReflectedInApplication() + { + // Create an UaPubSubApplicatuion with an empty configuration + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_pubConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first writer group in the configuration and check that it is reflected in Application + int lastAddedWriterGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups.Count; + + + WriterGroupDataType writerGroup = (WriterGroupDataType)psconNew.WriterGroups[0].MemberwiseClone(); + writerGroup.Name = writerGroup.Name + "_"; + + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + + int nrInitialWriterGroups = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups.Count; + + result = uaPubSubApplication.UaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemoveWriterGroup(writerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + int nrActualWriterGroups = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups.Count; + + Assert.AreEqual(nrInitialWriterGroups, nrActualWriterGroups); + + break; + } + } + + [Test(Description = "Validate Publisher AddDataSetWriter is reflected in the parent UaPubSubApplication")] + public void ValidateDataSetWriterAddedAndReflectedInApplication() + { + // Create an UaPubSubApplicatuion with an empty configuration + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_pubConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first writer group in the configuration and check that it is reflected in Application + int lastAddedWriterGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups.Count; + + + WriterGroupDataType writerGroup = (WriterGroupDataType)psconNew.WriterGroups[0].MemberwiseClone(); + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + writerGroup.Name = writerGroup.Name + "_"; + + result = uaPubSubApplication.UaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint addedWriterGroupId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(writerGroup); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, psconNew); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[lastAddedWriterGroupIdx], writerGroup); + + // Add the first data set writer in the configuration and check that it is reflected in Application + int lastAddedDataSetWriterIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[0].DataSetWriters.Count; + DataSetWriterDataType dataSetWriter = (DataSetWriterDataType)psconNew.WriterGroups[0].DataSetWriters[0].MemberwiseClone(); + dataSetWriter.Name = dataSetWriter.Name + "_"; + result = uaPubSubApplication.UaPubSubConfigurator.AddDataSetWriter(addedWriterGroupId, dataSetWriter); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[lastAddedWriterGroupIdx]. + DataSetWriters[lastAddedDataSetWriterIdx], dataSetWriter); + break; + } + + } + + [Test(Description = "Validate Publisher RemoveDataSetWriter is reflected in the parent UaPubSubApplication")] + public void ValidateDataSetWriterRemovedAndReflectedInApplication() + { + // Create an UaPubSubApplicatuion with an empty configuration + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_pubConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first writer group in the configuration and check that it is reflected in Application + int lastAddedWriterGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups.Count; + + + WriterGroupDataType writerGroup = (WriterGroupDataType)psconNew.WriterGroups[0].MemberwiseClone(); + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + writerGroup.Name = writerGroup.Name + "_"; + + result = uaPubSubApplication.UaPubSubConfigurator.AddWriterGroup(lastAddedConnId, writerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + uint addedWriterGroupId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(writerGroup); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, psconNew); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[lastAddedWriterGroupIdx], writerGroup); + + // Add the first data set writer in the configuration and check that it is reflected in Application + int lastAddedDataSetWriterIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[0].DataSetWriters.Count; + DataSetWriterDataType dataSetWriter = (DataSetWriterDataType)psconNew.WriterGroups[0].DataSetWriters[0].MemberwiseClone(); + dataSetWriter.Name = dataSetWriter.Name + "_"; + + int nrInitialDsWriters = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[0].DataSetWriters.Count; + + result = uaPubSubApplication.UaPubSubConfigurator.AddDataSetWriter(addedWriterGroupId, dataSetWriter); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemoveDataSetWriter(dataSetWriter); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + int nrActualDsWriters = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.WriterGroups[0].DataSetWriters.Count; + + Assert.AreEqual(nrInitialDsWriters, nrActualDsWriters); + break; + } + + } + + [Test(Description = "Validate Publisher AddPublishedSet is reflected in the parent UaPubSubApplication")] + public void ValidatePublishedDataSetAddedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + PubSubConfigurationDataType appConfPubSubConfiguration = new PubSubConfigurationDataType(); + appConfPubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection(); + appConfPubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection(); + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(appConfPubSubConfiguration); + + int targetIdx = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.PublishedDataSets.Count; + foreach (PublishedDataSetDataType pds in m_pubConfigurationLoaded.PublishedDataSets) + { + var result = uaPubSubApplication.UaPubSubConfigurator.AddPublishedDataSet(pds); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.PublishedDataSets[targetIdx], pds); + + targetIdx++; + } + + } + + [Test(Description = "Validate Publisher RemovePublishedSet is reflected in the parent UaPubSubApplication")] + public void ValidatePublishedDataSetRemovedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + PubSubConfigurationDataType appConfPubSubConfiguration = new PubSubConfigurationDataType(); + appConfPubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection(); + appConfPubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection(); + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(appConfPubSubConfiguration); + + int initialNrPublishedDs = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.PublishedDataSets.Count; + foreach (PublishedDataSetDataType pds in m_pubConfigurationLoaded.PublishedDataSets) + { + + var result = uaPubSubApplication.UaPubSubConfigurator.AddPublishedDataSet(pds); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemovePublishedDataSet(pds); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + } + int actualNrPublishedDs = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.PublishedDataSets.Count; + Assert.AreEqual(initialNrPublishedDs, actualNrPublishedDs); + } + + + [Test(Description = "Validate Subscriber ConnectionAdded event is reflected in the parent UaPubSubApplication")] + public void ValidateSubConnectionAddedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + PubSubConfigurationDataType appConfPubSubConfiguration = new PubSubConfigurationDataType(); + appConfPubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection(); + appConfPubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection(); + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(appConfPubSubConfiguration); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_subConfigurationLoaded.Connections) + { + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(pscon); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, pscon); + + targetIdx++; + } + + } + + [Test(Description = "Validate Subscriber ConnectionRemoved event is reflected in the parent UaPubSubApplication")] + public void ValidateSubConnectionRemovedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int initialCount = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_subConfigurationLoaded.Connections) + { + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(pscon); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemoveConnection(pscon); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(initialCount, uaPubSubApplication.PubSubConnections.Count); + } + } + + [Test(Description = "Validate Subscriber AddReaderGroup is reflected in the parent UaPubSubApplication")] + public void ValidateReaderGroupAddedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + PubSubConfigurationDataType appConfPubSubConfiguration = new PubSubConfigurationDataType(); + appConfPubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection(); + appConfPubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection(); + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(appConfPubSubConfiguration); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_subConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first writer group in the configuration and check that it is reflected in Application + int lastAddedReaderGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups.Count; + + + ReaderGroupDataType readerGroup = (ReaderGroupDataType)psconNew.ReaderGroups[0].MemberwiseClone(); + readerGroup.Name = readerGroup.Name + "_"; + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + + uaPubSubApplication.UaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup); + + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, psconNew); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[lastAddedReaderGroupIdx], readerGroup); + break; + } + + } + + [Test(Description = "Validate Subscriber RemoveReaderGroup is reflected in the parent UaPubSubApplication")] + public void ValidateReaderGroupRemovedAndReflectedInApplication() + { + // Prepare an empty configuration for testing the interaction between UaPubSubApplication + // and UaPubSubConfigurator + PubSubConfigurationDataType appConfPubSubConfiguration = new PubSubConfigurationDataType(); + appConfPubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection(); + appConfPubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection(); + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(appConfPubSubConfiguration); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_subConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first writer group in the configuration and check that it is reflected in Application + int lastAddedReaderGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups.Count; + + + ReaderGroupDataType readerGroup = (ReaderGroupDataType)psconNew.ReaderGroups[0].MemberwiseClone(); + readerGroup.Name = readerGroup.Name + "_"; + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + + int nrInitialReaderGroups = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups.Count; + + result = uaPubSubApplication.UaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemoveReaderGroup(readerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + int nrActualReaderGroups = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups.Count; + + Assert.AreEqual(nrInitialReaderGroups, nrActualReaderGroups); + break; + } + + } + + + [Test(Description = "Validate Subscriber AddDataSetReader is reflected in the parent UaPubSubApplication")] + public void ValidateDataSetReaderAddedAndReflectedInApplication() + { + // Create UaPubSubConfigurator with empty configuration + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_subConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first Reader group in the configuration and check that it is reflected in Application + int lastAddedReaderGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups.Count; + + + ReaderGroupDataType readerGroup = (ReaderGroupDataType)psconNew.ReaderGroups[0].MemberwiseClone(); + readerGroup.Name = readerGroup.Name + "_"; + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + + result = uaPubSubApplication.UaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, psconNew); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[lastAddedReaderGroupIdx], readerGroup); + + // Add the first data set Reader in the configuration and check that it is reflected in Application + int lastAddedDataSetReaderIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[0].DataSetReaders.Count; + DataSetReaderDataType dataSetReader = (DataSetReaderDataType)psconNew.ReaderGroups[0].DataSetReaders[0].MemberwiseClone(); + dataSetReader.Name = dataSetReader.Name + "_"; + uint addedReaderGroupId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(readerGroup); + result = uaPubSubApplication.UaPubSubConfigurator.AddDataSetReader(addedReaderGroupId, dataSetReader); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[lastAddedReaderGroupIdx]. + DataSetReaders[lastAddedDataSetReaderIdx], dataSetReader); + break; + } + + } + + [Test(Description = "Validate Subscriber AddDataSetReader is reflected in the parent UaPubSubApplication")] + public void ValidateDataSetReaderRemovedAndReflectedInApplication() + { + // Create UaPubSubConfigurator with empty configuration + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(); + + int targetIdx = uaPubSubApplication.PubSubConnections.Count; + foreach (PubSubConnectionDataType pscon in m_subConfigurationLoaded.Connections) + { + PubSubConnectionDataType psconNew = (PubSubConnectionDataType)pscon.MemberwiseClone(); + + var result = uaPubSubApplication.UaPubSubConfigurator.AddConnection(psconNew); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + // Add the first Reader group in the configuration and check that it is reflected in Application + int lastAddedReaderGroupIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups.Count; + + + ReaderGroupDataType readerGroup = (ReaderGroupDataType)psconNew.ReaderGroups[0].MemberwiseClone(); + readerGroup.Name = readerGroup.Name + "_"; + uint lastAddedConnId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(psconNew); + + result = uaPubSubApplication.UaPubSubConfigurator.AddReaderGroup(lastAddedConnId, readerGroup); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + uint addedReaderGroupId = uaPubSubApplication.UaPubSubConfigurator.FindIdForObject(readerGroup); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx].PubSubConnectionConfiguration, psconNew); + Assert.AreEqual(uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[lastAddedReaderGroupIdx], readerGroup); + + // Add the first data set Reader in the configuration and check that it is reflected in Application + int lastAddedDataSetReaderIdx = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[0].DataSetReaders.Count; + DataSetReaderDataType dataSetReader = (DataSetReaderDataType)psconNew.ReaderGroups[0].DataSetReaders[0].MemberwiseClone(); + dataSetReader.Name = dataSetReader.Name + "_"; + + int nrInitialDsReaders = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[0].DataSetReaders.Count; + + result = uaPubSubApplication.UaPubSubConfigurator.AddDataSetReader(addedReaderGroupId, dataSetReader); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + result = uaPubSubApplication.UaPubSubConfigurator.RemoveDataSetReader(dataSetReader); + Assert.IsTrue(StatusCode.IsGood(result), "Status code received: " + result); + + int nrActualDsReaders = uaPubSubApplication.PubSubConnections[targetIdx]. + PubSubConnectionConfiguration.ReaderGroups[0].DataSetReaders.Count; + + Assert.AreEqual(nrInitialDsReaders, nrActualDsReaders); + + break; + } + + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.Publisher.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.Publisher.cs new file mode 100644 index 00000000..5101ef6d --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.Publisher.cs @@ -0,0 +1,409 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Configuration; + +namespace Opc.Ua.PubSub.Tests +{ + partial class PubSubStateMachineTests + { + private const string PublisherConfigurationFileName = "PublisherConfiguration.xml"; + + [OneTimeSetUp()] + public void MyTestInitialize() + { + } + + [Test(Description = "Validate transition of state Disabled_0 to Paused_1 on Publisher")] + public void ValidateDisabled_0ToPause_1_Publisher() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Disabled, Disabled, Disabled] + + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType publisherConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + WriterGroupDataType writerGroup = publisherConnection.WriterGroups[0]; + DataSetWriterDataType datasetWriter = writerGroup.DataSetWriters[0]; + + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + PubSubState wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + PubSubState dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring connection to Enabled + configurator.Enable(publisherConnection); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring writerGroup to Enabled + configurator.Enable(writerGroup); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(wgState == PubSubState.Paused, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring datasetWriter to Enabled + configurator.Enable(datasetWriter); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(wgState == PubSubState.Paused, Is.True); + Assert.That(dswState == PubSubState.Paused, Is.True); + } + + [Test(Description = "Validate transition of state Disabled_0 to Operational_2 on Publisher")] + public void ValidateDisabled_0ToOperational_2_Publisher() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Disabled, Disabled, Disabled] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType publisherConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + WriterGroupDataType writerGroup = publisherConnection.WriterGroups[0]; + DataSetWriterDataType datasetWriter = writerGroup.DataSetWriters[0]; + + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + PubSubState wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + PubSubState dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring PubSub to Enabled + configurator.Enable(pubSub); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring publisherConnection to Enabled + configurator.Enable(publisherConnection); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring writerGroup to Enabled + configurator.Enable(writerGroup); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(wgState == PubSubState.Operational, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // Bring datasetWriter to Enabled + configurator.Enable(datasetWriter); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(wgState == PubSubState.Operational, Is.True); + Assert.That(dswState == PubSubState.Operational, Is.True); + } + + [Test(Description = "Validate transition of state Paused_1 to Disabled_0 on Publisher")] + public void ValidatePaused_1ToDisabled_0_Publisher() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Paused, Paused, Paused] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType publisherConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + WriterGroupDataType writerGroup = publisherConnection.WriterGroups[0]; + DataSetWriterDataType datasetWriter = writerGroup.DataSetWriters[0]; + + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + configurator.Enable(publisherConnection); + configurator.Enable(writerGroup); + configurator.Enable(datasetWriter); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + PubSubState wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + PubSubState dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(wgState == PubSubState.Paused, Is.True); + Assert.That(dswState == PubSubState.Paused, Is.True); + + // Bring Connection to Disabled + configurator.Disable(publisherConnection); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Paused, Is.True); + Assert.That(dswState == PubSubState.Paused, Is.True); + + // Bring writerGroup to Disabled + configurator.Disable(writerGroup); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Paused, Is.True); + + // Bring datasetWriter to Disabled + configurator.Disable(datasetWriter); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + } + + [Test(Description = "Validate transition of state Paused_1 to Operational_2 on Publisher")] + public void ValidatePaused_1ToOperational_2_Publisher() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Paused, Paused, Paused] + + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType publisherConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + WriterGroupDataType writerGroup = publisherConnection.WriterGroups[0]; + DataSetWriterDataType datasetWriter = writerGroup.DataSetWriters[0]; + + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + configurator.Enable(publisherConnection); + configurator.Enable(writerGroup); + configurator.Enable(datasetWriter); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + PubSubState wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + PubSubState dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(wgState == PubSubState.Paused, Is.True); + Assert.That(dswState == PubSubState.Paused, Is.True); + + // Bring pubSub to Enabled + configurator.Enable(pubSub); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(wgState == PubSubState.Operational, Is.True); + Assert.That(dswState == PubSubState.Operational, Is.True); + + } + + [Test(Description = "Validate transition of state Operational_2 to Disabled_0 on Publisher")] + public void ValidateOperational_2ToDisabled_0_Publisher() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Disabled, Disabled, Disabled] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType publisherConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + WriterGroupDataType writerGroup = publisherConnection.WriterGroups[0]; + DataSetWriterDataType datasetWriter = writerGroup.DataSetWriters[0]; + + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + PubSubState wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + PubSubState dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Operational, Operational, Operational, Operational] + configurator.Enable(pubSub); + configurator.Enable(publisherConnection); + configurator.Enable(writerGroup); + configurator.Enable(datasetWriter); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(wgState == PubSubState.Operational, Is.True); + Assert.That(dswState == PubSubState.Operational, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Disabled, Disabled, Disabled] + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + } + + [Test(Description = "Validate transition of state Operational_2 to Paused_1 on Publisher")] + public void ValidateOperational_2ToPaused_1_Publisher() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Disabled, Disabled, Disabled] + + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType publisherConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + WriterGroupDataType writerGroup = publisherConnection.WriterGroups[0]; + DataSetWriterDataType datasetWriter = writerGroup.DataSetWriters[0]; + + configurator.Disable(pubSub); + configurator.Disable(publisherConnection); + configurator.Disable(writerGroup); + configurator.Disable(datasetWriter); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + PubSubState wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + PubSubState dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(wgState == PubSubState.Disabled, Is.True); + Assert.That(dswState == PubSubState.Disabled, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Operational, Operational, Operational, Operational] + configurator.Enable(pubSub); + configurator.Enable(publisherConnection); + configurator.Enable(writerGroup); + configurator.Enable(datasetWriter); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(wgState == PubSubState.Operational, Is.True); + Assert.That(dswState == PubSubState.Operational, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubWriterGroup -> DataSetWriter brought to [Disabled, Pause, Pause, Pause] + configurator.Disable(pubSub); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(publisherConnection); + wgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(writerGroup); + dswState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetWriter); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(wgState == PubSubState.Paused, Is.True); + Assert.That(dswState == PubSubState.Paused, Is.True); + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.StateChangeMethods.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.StateChangeMethods.cs new file mode 100644 index 00000000..2d7eeb15 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.StateChangeMethods.cs @@ -0,0 +1,115 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Configuration; +using System; + +namespace Opc.Ua.PubSub.Tests +{ + partial class PubSubStateMachineTests + { + [Test(Description = "Validate Call Enable on Disabled object")] + public void ValidateEnableOnDisabled() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + configurator.Disable(pubSub); + Assert.AreEqual((StatusCode)StatusCodes.Good, configurator.Enable(pubSub)); + } + + [Test(Description = "Validate Call Enable on Enabled object")] + public void ValidateEnableOnOperational() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + configurator.Enable(pubSub); + Assert.AreEqual((StatusCode)StatusCodes.BadInvalidState, configurator.Enable(pubSub)); + } + + [Test(Description = "Validate Call Disable on Enabled object")] + public void ValidateDisableOnEnabled() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + configurator.Enable(pubSub); + Assert.AreEqual((StatusCode)StatusCodes.Good, configurator.Disable(pubSub)); + } + + [Test(Description = "Validate Call Disable on Disabled object")] + public void ValidateDisableOnDisabled() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + configurator.Disable(pubSub); + Assert.AreEqual((StatusCode)StatusCodes.BadInvalidState, configurator.Disable(pubSub)); + } + + [Test(Description = "Validate Call Enable on null object")] + public void ValidateEnableOnNUll() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + Assert.Throws(() => configurator.Enable(null), "The Enable method does not throw exception when called with null parameter."); + } + + [Test(Description = "Validate Call Disable on null object")] + public void ValidateDisableOnNUll() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + Assert.Throws(() => configurator.Disable(null), "The Disable method does not throw exception when called with null parameter."); + } + + [Test(Description = "Validate Call Enable on non existing object")] + public void ValidateEnableOnNonExisting() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + PubSubConfigurationDataType nonExisting = new PubSubConfigurationDataType(); + Assert.Throws(() => configurator.Enable(nonExisting), "The Enable method does not throw exception when called with non existing parameter."); + } + + [Test(Description = "Validate Call Disable on non existing object")] + public void ValidateDisableOnNonExisting() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + PubSubConfigurationDataType nonExisting = new PubSubConfigurationDataType(); + Assert.Throws(() => configurator.Disable(nonExisting), "The Disable method does not throw exception when called with non existing parameter."); + } + + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.Subscriber.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.Subscriber.cs new file mode 100644 index 00000000..9254c773 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PubSubStateMachineTests.Subscriber.cs @@ -0,0 +1,406 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Configuration; + +namespace Opc.Ua.PubSub.Tests +{ + partial class PubSubStateMachineTests + { + private const string SubscriberConfigurationFileName = "SubscriberConfiguration.xml"; + + [Test(Description = "Validate transition of state Disabled_0 to Paused_1 on Reader")] + public void ValidateDisabled_0ToPause_1_Reader() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Disabled, Disabled, Disabled] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType subscriberConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + ReaderGroupDataType readerGroup = subscriberConnection.ReaderGroups[0]; + DataSetReaderDataType datasetReader = readerGroup.DataSetReaders[0]; + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + PubSubState rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + PubSubState dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring Connection to Enabled + configurator.Enable(subscriberConnection); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring readerGroup to Enabled + configurator.Enable(readerGroup); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(rgState == PubSubState.Paused, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring datasetReader to Enabled + configurator.Enable(datasetReader); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(rgState == PubSubState.Paused, Is.True); + Assert.That(dsrState == PubSubState.Paused, Is.True); + } + + [Test(Description = "Validate transition of state Disabled_0 to Operational_2 on Reader")] + public void ValidateDisabled_0ToOperational_2_Reader() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Disabled, Disabled, Disabled] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType subscriberConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + ReaderGroupDataType readerGroup = subscriberConnection.ReaderGroups[0]; + DataSetReaderDataType datasetReader = readerGroup.DataSetReaders[0]; + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + PubSubState rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + PubSubState dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring PubSub to Enabled + configurator.Enable(pubSub); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring subscriberConnection to Enabled + configurator.Enable(subscriberConnection); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring readerGroup to Enabled + configurator.Enable(readerGroup); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(rgState == PubSubState.Operational, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // Bring datasetReader to Enabled + configurator.Enable(datasetReader); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(rgState == PubSubState.Operational, Is.True); + Assert.That(dsrState == PubSubState.Operational, Is.True); + } + + [Test(Description = "Validate transition of state Paused_1 to Disabled_0 on Reader")] + public void ValidatePaused_1ToDisabled_0_Reader() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Paused, Paused, Paused] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType subscriberConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + ReaderGroupDataType readerGroup = subscriberConnection.ReaderGroups[0]; + DataSetReaderDataType datasetReader = readerGroup.DataSetReaders[0]; + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + configurator.Enable(subscriberConnection); + configurator.Enable(readerGroup); + configurator.Enable(datasetReader); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + PubSubState rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + PubSubState dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(rgState == PubSubState.Paused, Is.True); + Assert.That(dsrState == PubSubState.Paused, Is.True); + + // Bring Connection to Disabled + configurator.Disable(subscriberConnection); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Paused, Is.True); + Assert.That(dsrState == PubSubState.Paused, Is.True); + + // Bring readerGroup to Disabled + configurator.Disable(readerGroup); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Paused, Is.True); + + // Bring datasetReader to Disabled + configurator.Disable(datasetReader); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + } + + [Test(Description = "Validate transition of state Paused_1 to Operational_2 on Reader")] + public void ValidatePaused_1ToOperational_2_Reader() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Paused, Paused, Paused] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType subscriberConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + ReaderGroupDataType readerGroup = subscriberConnection.ReaderGroups[0]; + DataSetReaderDataType datasetReader = readerGroup.DataSetReaders[0]; + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + configurator.Enable(subscriberConnection); + configurator.Enable(readerGroup); + configurator.Enable(datasetReader); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + PubSubState rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + PubSubState dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(rgState == PubSubState.Paused, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + + // Bring pubSub to Enabled + configurator.Enable(pubSub); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(rgState == PubSubState.Operational, Is.True); + Assert.That(dsrState == PubSubState.Operational, Is.True); + + } + + [Test(Description = "Validate transition of state Operational_2 to Disabled_0 on Reader")] + public void ValidateOperational_2ToDisabled_0_Reader() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Disabled, Disabled, Disabled] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType subscriberConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + ReaderGroupDataType readerGroup = subscriberConnection.ReaderGroups[0]; + DataSetReaderDataType datasetReader = readerGroup.DataSetReaders[0]; + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + PubSubState rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + PubSubState dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Operational, Operational, Operational, Operational] + configurator.Enable(pubSub); + configurator.Enable(subscriberConnection); + configurator.Enable(readerGroup); + configurator.Enable(datasetReader); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(rgState == PubSubState.Operational, Is.True); + Assert.That(dsrState == PubSubState.Operational, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Disabled, Disabled, Disabled] + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + } + + [Test(Description = "Validate transition of state Operational_2 to Paused_1 on Reader")] + public void ValidateOperational_2ToPaused_1_Reader() + { + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + + UaPubSubConfigurator configurator = uaPubSubApplication.UaPubSubConfigurator; + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Disabled, Disabled, Disabled] + PubSubConfigurationDataType pubSub = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration; + PubSubConnectionDataType subscriberConnection = uaPubSubApplication.UaPubSubConfigurator.PubSubConfiguration.Connections[0]; + ReaderGroupDataType readerGroup = subscriberConnection.ReaderGroups[0]; + DataSetReaderDataType datasetReader = readerGroup.DataSetReaders[0]; + + configurator.Disable(pubSub); + configurator.Disable(subscriberConnection); + configurator.Disable(readerGroup); + configurator.Disable(datasetReader); + + PubSubState psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + PubSubState conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + PubSubState rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + PubSubState dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Disabled, Is.True); + Assert.That(rgState == PubSubState.Disabled, Is.True); + Assert.That(dsrState == PubSubState.Disabled, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Operational, Operational, Operational, Operational] + + configurator.Enable(pubSub); + configurator.Enable(subscriberConnection); + configurator.Enable(readerGroup); + configurator.Enable(datasetReader); + + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Operational, Is.True); + Assert.That(conState == PubSubState.Operational, Is.True); + Assert.That(rgState == PubSubState.Operational, Is.True); + Assert.That(dsrState == PubSubState.Operational, Is.True); + + // The hierarchy PubSub -> PubSubConnection -> PubSubReaderGroup -> DataSetReader brought to [Disabled, Pause, Pause, Pause] + configurator.Disable(pubSub); + psState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(pubSub); + conState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(subscriberConnection); + rgState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(readerGroup); + dsrState = uaPubSubApplication.UaPubSubConfigurator.FindStateForObject(datasetReader); + Assert.That(psState == PubSubState.Disabled, Is.True); + Assert.That(conState == PubSubState.Paused, Is.True); + Assert.That(rgState == PubSubState.Paused, Is.True); + Assert.That(dsrState == PubSubState.Paused, Is.True); + + } + + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PublisherConfiguration.xml b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PublisherConfiguration.xml new file mode 100644 index 00000000..b09a7ea1 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/PublisherConfiguration.xml @@ -0,0 +1,4043 @@ + + + + + Simple + + + + + + + Simple + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + e07ef109-69f1-4a7f-a145-879941839de6 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + 43ede79d-2711-48ff-8a6c-f03584bc9a56 + + + + + Int32Fast + + 0 + 6 + + i=6 + + -1 + + 0 + + 861c6816-261e-4179-844b-44cd0cb11208 + + + + + DateTime + + 0 + 13 + + i=13 + + -1 + + 0 + + 7448ac5a-848a-4bfe-a33c-01954f0b98d0 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 0 + 0 + + + + + + 0 + BoolToggle + + + + true + + + + + + 0 + Int32 + + + + 100 + + + + + + 0 + Int32Fast + + + + 50 + + + + + + 0 + DateTime + + + + 2019-04-04T00:00:00+03:00 + + + + + + + i=15953 + + + + + + + ns=2;s=BoolToggle + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=2;s=Int32 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=2;s=Int32Fast + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=2;s=DateTime + + 13 + 0 + 0 + 0 + + + + + + + + + + + + + + + AllTypes + + + + + + + AllTypes + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + 43ad4e62-82dd-4d95-bd7c-4505163aa5b0 + + + + + Byte + + 0 + 3 + + i=3 + + -1 + + 0 + + c7ff04f0-373a-446d-9f5f-66ac14e901f7 + + + + + Int16 + + 0 + 4 + + i=4 + + -1 + + 0 + + 239af9ba-a316-46ab-b0c9-0b3c84be8613 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + 9b15396b-003a-47ed-afa7-81db2a28618d + + + + + SByte + + 0 + 2 + + i=2 + + -1 + + 0 + + f501f86b-6090-4b5e-ba46-b7eba3ec050e + + + + + UInt16 + + 0 + 5 + + i=5 + + -1 + + 0 + + 6663321f-a04f-48c5-a0e9-f6799af9aed7 + + + + + UInt32 + + 0 + 7 + + i=7 + + -1 + + 0 + + 84d5b990-60b3-4ded-8214-0a6f4b124fc6 + + + + + Float + + 0 + 10 + + i=10 + + -1 + + 0 + + eda9d2b7-fb08-4f93-9823-68eba43b6468 + + + + + Double + + 0 + 11 + + i=11 + + -1 + + 0 + + 199ca2e8-1acc-46db-89f9-42ae866447cd + + + + + + 00000000-0000-0000-0000-000000000000 + + + 0 + 0 + + + + + + i=15953 + + + + + + + ns=3;s=BoolToggle + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=Byte + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=Int16 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=Int32 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=SByte + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=UInt16 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=UInt32 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=Float + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=3;s=Double + + 13 + 0 + 0 + 0 + + + + + + + + + + + + + + + MassTest + + + + + + + MassTest + + + + Mass_0 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2201bc5c-9b3a-45fe-a5ab-1aec5fb524ca + + + + + Mass_1 + + 0 + 7 + + i=7 + + -1 + + 0 + + cd82294d-c794-4285-a1cf-a86400183bd5 + + + + + Mass_2 + + 0 + 7 + + i=7 + + -1 + + 0 + + a05038bb-3789-416b-a2af-b1618016c161 + + + + + Mass_3 + + 0 + 7 + + i=7 + + -1 + + 0 + + 57bd65bf-1f3a-4730-905b-529901b8c5c7 + + + + + Mass_4 + + 0 + 7 + + i=7 + + -1 + + 0 + + 280fadd1-e2e4-41c1-bab8-2f212a7af773 + + + + + Mass_5 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7a59c5fb-1bbd-41f2-a23d-52f27bd5e728 + + + + + Mass_6 + + 0 + 7 + + i=7 + + -1 + + 0 + + 34e1fc13-eed5-45d7-b8e8-83a5a50772a1 + + + + + Mass_7 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0e0cd1f8-c064-482e-83be-6e2144ff1bf5 + + + + + Mass_8 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0622d798-a966-4f52-9751-96e91b6f4b32 + + + + + Mass_9 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0a6d5a1e-9fbd-4cdd-8ad4-7ed3ba77759e + + + + + Mass_10 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0e19613b-1e04-41ec-bce7-bc9a2456b694 + + + + + Mass_11 + + 0 + 7 + + i=7 + + -1 + + 0 + + 75286df2-4acc-491c-8ce0-c1be5553d202 + + + + + Mass_12 + + 0 + 7 + + i=7 + + -1 + + 0 + + 13556bde-3bbd-4310-af59-f728a76c8b71 + + + + + Mass_13 + + 0 + 7 + + i=7 + + -1 + + 0 + + 75186ae1-bef3-4715-8a38-c33abe9bf736 + + + + + Mass_14 + + 0 + 7 + + i=7 + + -1 + + 0 + + f331f75a-4d45-4c46-8358-f1ba4ef68e5c + + + + + Mass_15 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7d6b26fc-7e68-4bda-b765-6dcfa2e88cc2 + + + + + Mass_16 + + 0 + 7 + + i=7 + + -1 + + 0 + + dddb1c22-45c6-4866-abd3-4d4038967455 + + + + + Mass_17 + + 0 + 7 + + i=7 + + -1 + + 0 + + e1b85c4f-6e95-4b9a-9628-a8af81629d8d + + + + + Mass_18 + + 0 + 7 + + i=7 + + -1 + + 0 + + b2eed8e2-aa25-433b-a8b2-a916d66b741c + + + + + Mass_19 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6cff101f-e017-406f-abf5-3838b6669a48 + + + + + Mass_20 + + 0 + 7 + + i=7 + + -1 + + 0 + + c48038f7-92ca-482b-99de-2bb30f361981 + + + + + Mass_21 + + 0 + 7 + + i=7 + + -1 + + 0 + + db148442-55c1-4e2e-b875-d812900ac083 + + + + + Mass_22 + + 0 + 7 + + i=7 + + -1 + + 0 + + f4ca027c-e333-474a-af6e-2dec6de6688b + + + + + Mass_23 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3d79d49c-f533-48c0-9907-590c3d168d8e + + + + + Mass_24 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e615e42-68b2-481c-b33b-756a8347488e + + + + + Mass_25 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8f4c9a57-0d93-4f69-b79a-43ea77d89e41 + + + + + Mass_26 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8288ad22-1480-4087-8363-604f48e30bc2 + + + + + Mass_27 + + 0 + 7 + + i=7 + + -1 + + 0 + + bc87c583-0405-40e9-b9be-39b9ee1469a3 + + + + + Mass_28 + + 0 + 7 + + i=7 + + -1 + + 0 + + e7ca2b1c-e5bb-4ed8-8091-a7f84e30c177 + + + + + Mass_29 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8f1ba14a-8484-420f-ac47-7201a6ff8ce5 + + + + + Mass_30 + + 0 + 7 + + i=7 + + -1 + + 0 + + 771e795e-a36b-44de-a2ca-19d59dbc0250 + + + + + Mass_31 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7e849b57-9b11-40e3-9395-f7f8b121bf4e + + + + + Mass_32 + + 0 + 7 + + i=7 + + -1 + + 0 + + 83ad0e4a-cf21-4620-ba69-17c0e066f9d8 + + + + + Mass_33 + + 0 + 7 + + i=7 + + -1 + + 0 + + 30574813-3073-44e1-a204-bff9e4310cbf + + + + + Mass_34 + + 0 + 7 + + i=7 + + -1 + + 0 + + ac1b8c89-9623-462a-832f-657bc8fa116d + + + + + Mass_35 + + 0 + 7 + + i=7 + + -1 + + 0 + + b865b8f7-da63-4460-b3b4-956cf2146a49 + + + + + Mass_36 + + 0 + 7 + + i=7 + + -1 + + 0 + + e690c6b5-88dd-444b-9693-373f90f5de63 + + + + + Mass_37 + + 0 + 7 + + i=7 + + -1 + + 0 + + 43b9ffd4-0658-402d-bbdd-dc71f48d42d4 + + + + + Mass_38 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4ff0af7e-5824-4168-b59f-90a8cde394fb + + + + + Mass_39 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5a5afdb8-2c16-4b3b-ad1c-3508eed6a9e7 + + + + + Mass_40 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5392a564-6de3-45a7-8a6e-803b6731cf57 + + + + + Mass_41 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9a7e854f-df32-45a7-a936-08c2a6c16567 + + + + + Mass_42 + + 0 + 7 + + i=7 + + -1 + + 0 + + c0fba4dc-0bc7-4a14-b32d-6fba6dde58a9 + + + + + Mass_43 + + 0 + 7 + + i=7 + + -1 + + 0 + + bbb65bd4-5af2-4de1-af67-0a746ab816ec + + + + + Mass_44 + + 0 + 7 + + i=7 + + -1 + + 0 + + 249a274c-9178-4e59-bc6c-b256302b5514 + + + + + Mass_45 + + 0 + 7 + + i=7 + + -1 + + 0 + + 730bc4b7-1ff5-42b6-8892-8f78d5a295c7 + + + + + Mass_46 + + 0 + 7 + + i=7 + + -1 + + 0 + + c03075a8-3c2b-4989-9b2e-03a3918efc36 + + + + + Mass_47 + + 0 + 7 + + i=7 + + -1 + + 0 + + c81cdd78-9c11-4b3c-87dd-9ecdc9679513 + + + + + Mass_48 + + 0 + 7 + + i=7 + + -1 + + 0 + + 12b36777-57a1-4025-959a-3e9c51765059 + + + + + Mass_49 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2cd93e4c-0296-4c94-84c1-8562a641e980 + + + + + Mass_50 + + 0 + 7 + + i=7 + + -1 + + 0 + + 68588345-f7c6-4dcb-b011-8be4debf81af + + + + + Mass_51 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0b60b26e-333c-4f45-bca8-3f7b800cc05b + + + + + Mass_52 + + 0 + 7 + + i=7 + + -1 + + 0 + + 75210599-a9ed-44fb-881e-c114db4c5e8c + + + + + Mass_53 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5749c0c0-59b2-45b8-8644-429ba799504e + + + + + Mass_54 + + 0 + 7 + + i=7 + + -1 + + 0 + + b0d7f3fe-5687-4655-b0aa-789ab5f9d005 + + + + + Mass_55 + + 0 + 7 + + i=7 + + -1 + + 0 + + cab35a33-134d-44f7-82ad-633b16f58af8 + + + + + Mass_56 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9bb33a9b-8c0f-4151-a9f4-90c210a04621 + + + + + Mass_57 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1bb6312e-3e02-425f-9007-855f63e2b359 + + + + + Mass_58 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9bfd75e9-291f-4f74-90c3-8bbe265cdab6 + + + + + Mass_59 + + 0 + 7 + + i=7 + + -1 + + 0 + + 73ca8f55-1ce4-4bef-a97f-6a5b85bda6ff + + + + + Mass_60 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4a12686e-cdf6-489b-9f1f-8b29039f4c62 + + + + + Mass_61 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2ddcb58a-0b87-4a04-820e-1ea3a12573c2 + + + + + Mass_62 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5036efe1-0017-418f-abcf-d7769008ab01 + + + + + Mass_63 + + 0 + 7 + + i=7 + + -1 + + 0 + + ade78390-30ac-4aa0-bc3d-f033fa37310b + + + + + Mass_64 + + 0 + 7 + + i=7 + + -1 + + 0 + + 05245281-0fd9-454b-bd20-d0432b2febbb + + + + + Mass_65 + + 0 + 7 + + i=7 + + -1 + + 0 + + bb8f6684-abd5-4e93-9aff-8dd2e5761a53 + + + + + Mass_66 + + 0 + 7 + + i=7 + + -1 + + 0 + + da119ce4-abee-4f73-8774-58e92588fa40 + + + + + Mass_67 + + 0 + 7 + + i=7 + + -1 + + 0 + + 33c3f322-20c8-4c7c-aa04-02f19b3249a4 + + + + + Mass_68 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1c158ff3-8e54-48e7-8cb8-45863bf3255e + + + + + Mass_69 + + 0 + 7 + + i=7 + + -1 + + 0 + + 84bbdd76-7b78-47ff-aab3-fd4694bfdc02 + + + + + Mass_70 + + 0 + 7 + + i=7 + + -1 + + 0 + + b02e0ac1-c39e-4855-8e46-fe203f0204bd + + + + + Mass_71 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0c67d541-a9cc-496d-b233-f79417aa983e + + + + + Mass_72 + + 0 + 7 + + i=7 + + -1 + + 0 + + 16e34d20-0676-4397-838b-2840963f0c4c + + + + + Mass_73 + + 0 + 7 + + i=7 + + -1 + + 0 + + c7959290-9d3d-48de-8d4d-c020cfa652f3 + + + + + Mass_74 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1eaf256f-ac88-478a-93e9-53e3bdbea1e9 + + + + + Mass_75 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1afc6a9d-65b6-4115-b87a-34834177aac7 + + + + + Mass_76 + + 0 + 7 + + i=7 + + -1 + + 0 + + 17ed7175-1b1a-45fb-ad84-197aba8aa78e + + + + + Mass_77 + + 0 + 7 + + i=7 + + -1 + + 0 + + fd092156-03f5-4fbc-82b5-f04bfecb4d10 + + + + + Mass_78 + + 0 + 7 + + i=7 + + -1 + + 0 + + 802f53e9-5672-40f4-9aaa-e6880d50f6fa + + + + + Mass_79 + + 0 + 7 + + i=7 + + -1 + + 0 + + 18426e57-1012-4149-a7e4-df4e35cf79a6 + + + + + Mass_80 + + 0 + 7 + + i=7 + + -1 + + 0 + + d4d885ba-aa8b-4466-893f-ee944d6d66ef + + + + + Mass_81 + + 0 + 7 + + i=7 + + -1 + + 0 + + 48613585-3a33-40f6-9bc3-b65a6308e506 + + + + + Mass_82 + + 0 + 7 + + i=7 + + -1 + + 0 + + bfce7643-acc6-4019-bc69-e1d18a76151f + + + + + Mass_83 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0a763e87-ceb8-4cf9-80cb-dcf0581e7267 + + + + + Mass_84 + + 0 + 7 + + i=7 + + -1 + + 0 + + 035bdb06-d5c0-4018-9ad9-1b5a99220abf + + + + + Mass_85 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2afe2092-6f6a-4fca-b7be-46e7785b4b0b + + + + + Mass_86 + + 0 + 7 + + i=7 + + -1 + + 0 + + d369077b-da80-4643-b4b6-d5d8c5de511c + + + + + Mass_87 + + 0 + 7 + + i=7 + + -1 + + 0 + + c269a317-5401-4952-a726-a473eb11cd54 + + + + + Mass_88 + + 0 + 7 + + i=7 + + -1 + + 0 + + b5284065-eaf2-4dd6-93e1-b4509cda5661 + + + + + Mass_89 + + 0 + 7 + + i=7 + + -1 + + 0 + + 93f28e59-6161-4ef7-9398-37b1afa2abbd + + + + + Mass_90 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4fec043e-17fd-4b3f-aefa-d8dc8e895961 + + + + + Mass_91 + + 0 + 7 + + i=7 + + -1 + + 0 + + 48e24858-47bb-4df7-8559-d47a74c1e233 + + + + + Mass_92 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1ab8cea9-d0f6-4034-9e61-ab74779528a0 + + + + + Mass_93 + + 0 + 7 + + i=7 + + -1 + + 0 + + d2e6cb26-ceec-42b7-8826-78d29374f937 + + + + + Mass_94 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0ac6a597-ea5b-4aa0-a7f2-f0c91e6537fb + + + + + Mass_95 + + 0 + 7 + + i=7 + + -1 + + 0 + + cae63b95-6b21-4841-8f22-b3c5de673bc4 + + + + + Mass_96 + + 0 + 7 + + i=7 + + -1 + + 0 + + e1402cb2-0360-467b-aa75-4d3af6543e4c + + + + + Mass_97 + + 0 + 7 + + i=7 + + -1 + + 0 + + 37224022-d591-4be5-94ed-dfb3fd273b99 + + + + + Mass_98 + + 0 + 7 + + i=7 + + -1 + + 0 + + 023bf9c8-975f-40e1-8ffc-e19dea71185e + + + + + Mass_99 + + 0 + 7 + + i=7 + + -1 + + 0 + + 59be53a2-72c0-4fcf-9473-ec9e58280eaa + + + + + + 00000000-0000-0000-0000-000000000000 + + + 0 + 0 + + + + + + i=15953 + + + + + + + ns=4;s=Mass_0 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_1 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_2 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_3 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_4 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_5 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_6 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_7 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_8 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_9 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_10 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_11 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_12 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_13 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_14 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_15 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_16 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_17 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_18 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_19 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_20 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_21 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_22 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_23 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_24 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_25 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_26 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_27 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_28 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_29 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_30 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_31 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_32 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_33 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_34 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_35 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_36 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_37 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_38 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_39 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_40 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_41 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_42 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_43 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_44 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_45 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_46 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_47 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_48 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_49 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_50 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_51 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_52 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_53 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_54 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_55 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_56 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_57 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_58 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_59 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_60 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_61 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_62 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_63 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_64 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_65 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_66 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_67 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_68 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_69 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_70 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_71 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_72 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_73 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_74 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_75 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_76 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_77 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_78 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_79 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_80 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_81 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_82 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_83 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_84 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_85 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_86 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_87 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_88 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_89 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_90 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_91 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_92 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_93 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_94 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_95 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_96 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_97 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_98 + + 13 + 0 + 0 + 0 + + + + + + + + + + + ns=4;s=Mass_99 + + 13 + 0 + 0 + 0 + + + + + + + + + + + + + + + + + UADPConection1 + true + + + 10 + + + http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp +
+ + i=21176 + + + + + opc.udp://239.0.0.1:4840 + + +
+ + + + + WriterGroup 1 + true + Invalid_0 + + + 1500 + + 1 + 5000 + 5000 + 0 + + UADP-Cyclic-Fixed + + + i=21179 + + + + 0 + 0 + + + + + + i=16014 + + + + 0 + AscendingWriterId_1 + 63 + 0 + + + + + + + Writer 1 + true + 1 + 32 + 1 + Simple + + + + + i=16015 + + + + 36 + 0 + 1 + 0 + + + + + + Writer 2 + true + 2 + 32 + 1 + AllTypes + + + + + i=16015 + + + + 36 + 0 + 1 + 0 + + + + + + Writer 3 + true + 3 + 32 + 1 + MassTest + + + + + i=16015 + + + + 36 + 0 + 1 + 0 + + + + + + + + + +
+ + UADPConection2 + true + + + 20 + + + http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp +
+ + i=21176 + + + + + opc.udp://192.168.0.255:4840 + + +
+ + + + + WriterGroup 2 + true + Invalid_0 + + + 1500 + + 2 + 5000 + 5000 + 0 + + UADP-Dynamic + + + i=21179 + + + + 0 + 0 + + + + + + i=16014 + + + + 0 + Undefined_0 + 65 + 0 + + + + + + + Writer 11 + true + 11 + 0 + 1 + Simple + + + + + i=16015 + + + + 53 + 0 + 0 + 0 + + + + + + Writer 12 + true + 12 + 0 + 1 + AllTypes + + + + + i=16015 + + + + 53 + 0 + 0 + 0 + + + + + + Writer 13 + true + 13 + 0 + 1 + MassTest + + + + + i=16015 + + + + 53 + 0 + 0 + 0 + + + + + + + + +
+
+ true +
\ No newline at end of file diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/SubscriberConfiguration.xml b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/SubscriberConfiguration.xml new file mode 100644 index 00000000..9f72961e --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/SubscriberConfiguration.xml @@ -0,0 +1,15901 @@ + + + + + + UADPConection1 + true + + + 10 + + + http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp +
+ + i=21176 + + + + + opc.udp://239.0.0.1:4840 + + +
+ + + + + + + ReaderGroup 1 + true + Invalid_0 + + + 1500 + + + + i=15995 + + + + + + + + i=15996 + + + + + + + + Reader 1 + true + + + 10 + + + 0 + 1 + + + + + + Simple + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + + Int32Fast + + 0 + 6 + + i=6 + + -1 + + 0 + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + + DateTime + + 0 + 13 + + i=13 + + -1 + + 0 + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 63 + 36 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + ns=2;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + ns=2;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + ns=2;s=Int32Fast + + 13 + + OverrideValue_2 + + + 0 + + + + + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + ns=2;s=DateTime + + 13 + + OverrideValue_2 + + + 0001-01-01T00:00:00 + + + + + + + + + + Reader 2 + true + + + 10 + + + 0 + 2 + + + + + + AllTypes + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + + Byte + + 0 + 3 + + i=3 + + -1 + + 0 + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + + Int16 + + 0 + 4 + + i=4 + + -1 + + 0 + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + + SByte + + 0 + 2 + + i=2 + + -1 + + 0 + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + + UInt16 + + 0 + 5 + + i=5 + + -1 + + 0 + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + + UInt32 + + 0 + 7 + + i=7 + + -1 + + 0 + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + + Float + + 0 + 10 + + i=10 + + -1 + + 0 + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + + Double + + 0 + 11 + + i=11 + + -1 + + 0 + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 63 + 36 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + ns=3;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + ns=3;s=Byte + + 13 + + OverrideValue_2 + + + 0 + + + + + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + ns=3;s=Int16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + ns=3;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + ns=3;s=SByte + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + ns=3;s=UInt16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + ns=3;s=UInt32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + ns=3;s=Float + + 13 + + OverrideValue_2 + + + 0 + + + + + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + ns=3;s=Double + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + Reader 3 + true + + + 10 + + + 0 + 3 + + + + + + MassTest + + + + Mass_0 + + 0 + 7 + + i=7 + + -1 + + 0 + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + + Mass_1 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + + Mass_2 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + + Mass_3 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + + Mass_4 + + 0 + 7 + + i=7 + + -1 + + 0 + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + + Mass_5 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + + Mass_6 + + 0 + 7 + + i=7 + + -1 + + 0 + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + + Mass_7 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + + Mass_8 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + + Mass_9 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + + Mass_10 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + + Mass_11 + + 0 + 7 + + i=7 + + -1 + + 0 + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + + Mass_12 + + 0 + 7 + + i=7 + + -1 + + 0 + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + + Mass_13 + + 0 + 7 + + i=7 + + -1 + + 0 + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + + Mass_14 + + 0 + 7 + + i=7 + + -1 + + 0 + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + + Mass_15 + + 0 + 7 + + i=7 + + -1 + + 0 + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + + Mass_16 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + + Mass_17 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + + Mass_18 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + + Mass_19 + + 0 + 7 + + i=7 + + -1 + + 0 + + a3f49307-f865-445b-9846-5512245bea57 + + + + + Mass_20 + + 0 + 7 + + i=7 + + -1 + + 0 + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + + Mass_21 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + + Mass_22 + + 0 + 7 + + i=7 + + -1 + + 0 + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + + Mass_23 + + 0 + 7 + + i=7 + + -1 + + 0 + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + + Mass_24 + + 0 + 7 + + i=7 + + -1 + + 0 + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + + Mass_25 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + + Mass_26 + + 0 + 7 + + i=7 + + -1 + + 0 + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + + Mass_27 + + 0 + 7 + + i=7 + + -1 + + 0 + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + + Mass_28 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + + Mass_29 + + 0 + 7 + + i=7 + + -1 + + 0 + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + + Mass_30 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + + Mass_31 + + 0 + 7 + + i=7 + + -1 + + 0 + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + + Mass_32 + + 0 + 7 + + i=7 + + -1 + + 0 + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + + Mass_33 + + 0 + 7 + + i=7 + + -1 + + 0 + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + + Mass_34 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + + Mass_35 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + + Mass_36 + + 0 + 7 + + i=7 + + -1 + + 0 + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + + Mass_37 + + 0 + 7 + + i=7 + + -1 + + 0 + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + + Mass_38 + + 0 + 7 + + i=7 + + -1 + + 0 + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + + Mass_39 + + 0 + 7 + + i=7 + + -1 + + 0 + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + + Mass_40 + + 0 + 7 + + i=7 + + -1 + + 0 + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + + Mass_41 + + 0 + 7 + + i=7 + + -1 + + 0 + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + + Mass_42 + + 0 + 7 + + i=7 + + -1 + + 0 + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + + Mass_43 + + 0 + 7 + + i=7 + + -1 + + 0 + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + + Mass_44 + + 0 + 7 + + i=7 + + -1 + + 0 + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + + Mass_45 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + + Mass_46 + + 0 + 7 + + i=7 + + -1 + + 0 + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + + Mass_47 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + + Mass_48 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + + Mass_49 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + + Mass_50 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + + Mass_51 + + 0 + 7 + + i=7 + + -1 + + 0 + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + + Mass_52 + + 0 + 7 + + i=7 + + -1 + + 0 + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + + Mass_53 + + 0 + 7 + + i=7 + + -1 + + 0 + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + + Mass_54 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + + Mass_55 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + + Mass_56 + + 0 + 7 + + i=7 + + -1 + + 0 + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + + Mass_57 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + + Mass_58 + + 0 + 7 + + i=7 + + -1 + + 0 + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + + Mass_59 + + 0 + 7 + + i=7 + + -1 + + 0 + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + + Mass_60 + + 0 + 7 + + i=7 + + -1 + + 0 + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + + Mass_61 + + 0 + 7 + + i=7 + + -1 + + 0 + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + + Mass_62 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + + Mass_63 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + + Mass_64 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + + Mass_65 + + 0 + 7 + + i=7 + + -1 + + 0 + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + + Mass_66 + + 0 + 7 + + i=7 + + -1 + + 0 + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + + Mass_67 + + 0 + 7 + + i=7 + + -1 + + 0 + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + + Mass_68 + + 0 + 7 + + i=7 + + -1 + + 0 + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + + Mass_69 + + 0 + 7 + + i=7 + + -1 + + 0 + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + + Mass_70 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + + Mass_71 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + + Mass_72 + + 0 + 7 + + i=7 + + -1 + + 0 + + f780d04b-b81b-451e-9679-5765056309ca + + + + + Mass_73 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + + Mass_74 + + 0 + 7 + + i=7 + + -1 + + 0 + + fc23087a-bfe9-4182-8f26-532135641059 + + + + + Mass_75 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + + Mass_76 + + 0 + 7 + + i=7 + + -1 + + 0 + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + + Mass_77 + + 0 + 7 + + i=7 + + -1 + + 0 + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + + Mass_78 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + + Mass_79 + + 0 + 7 + + i=7 + + -1 + + 0 + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + + Mass_80 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + + Mass_81 + + 0 + 7 + + i=7 + + -1 + + 0 + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + + Mass_82 + + 0 + 7 + + i=7 + + -1 + + 0 + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + + Mass_83 + + 0 + 7 + + i=7 + + -1 + + 0 + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + + Mass_84 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + + Mass_85 + + 0 + 7 + + i=7 + + -1 + + 0 + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + + Mass_86 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + + Mass_87 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + + Mass_88 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + + Mass_89 + + 0 + 7 + + i=7 + + -1 + + 0 + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + + Mass_90 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + + Mass_91 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + + Mass_92 + + 0 + 7 + + i=7 + + -1 + + 0 + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + + Mass_93 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + + Mass_94 + + 0 + 7 + + i=7 + + -1 + + 0 + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + + Mass_95 + + 0 + 7 + + i=7 + + -1 + + 0 + + 28804468-9dc9-4e96-962e-3e621273788d + + + + + Mass_96 + + 0 + 7 + + i=7 + + -1 + + 0 + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + + Mass_97 + + 0 + 7 + + i=7 + + -1 + + 0 + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + + Mass_98 + + 0 + 7 + + i=7 + + -1 + + 0 + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + + Mass_99 + + 0 + 7 + + i=7 + + -1 + + 0 + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 63 + 36 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + ns=4;s=Mass_0 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + ns=4;s=Mass_1 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + ns=4;s=Mass_2 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + ns=4;s=Mass_3 + + 13 + + OverrideValue_2 + + + 0 + + + + + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + ns=4;s=Mass_4 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + ns=4;s=Mass_5 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + ns=4;s=Mass_6 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + ns=4;s=Mass_7 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + ns=4;s=Mass_8 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + ns=4;s=Mass_9 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + ns=4;s=Mass_10 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + ns=4;s=Mass_11 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + ns=4;s=Mass_12 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + ns=4;s=Mass_13 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + ns=4;s=Mass_14 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + ns=4;s=Mass_15 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + ns=4;s=Mass_16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + ns=4;s=Mass_17 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + ns=4;s=Mass_18 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3f49307-f865-445b-9846-5512245bea57 + + + + ns=4;s=Mass_19 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + ns=4;s=Mass_20 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + ns=4;s=Mass_21 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + ns=4;s=Mass_22 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + ns=4;s=Mass_23 + + 13 + + OverrideValue_2 + + + 0 + + + + + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + ns=4;s=Mass_24 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + ns=4;s=Mass_25 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + ns=4;s=Mass_26 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + ns=4;s=Mass_27 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + ns=4;s=Mass_28 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + ns=4;s=Mass_29 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + ns=4;s=Mass_30 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + ns=4;s=Mass_31 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + ns=4;s=Mass_32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + ns=4;s=Mass_33 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + ns=4;s=Mass_34 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + ns=4;s=Mass_35 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + ns=4;s=Mass_36 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + ns=4;s=Mass_37 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + ns=4;s=Mass_38 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + ns=4;s=Mass_39 + + 13 + + OverrideValue_2 + + + 0 + + + + + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + ns=4;s=Mass_40 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + ns=4;s=Mass_41 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + ns=4;s=Mass_42 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + ns=4;s=Mass_43 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + ns=4;s=Mass_44 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + ns=4;s=Mass_45 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + ns=4;s=Mass_46 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + ns=4;s=Mass_47 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + ns=4;s=Mass_48 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + ns=4;s=Mass_49 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + ns=4;s=Mass_50 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + ns=4;s=Mass_51 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + ns=4;s=Mass_52 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + ns=4;s=Mass_53 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + ns=4;s=Mass_54 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + ns=4;s=Mass_55 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + ns=4;s=Mass_56 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + ns=4;s=Mass_57 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + ns=4;s=Mass_58 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + ns=4;s=Mass_59 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + ns=4;s=Mass_60 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + ns=4;s=Mass_61 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + ns=4;s=Mass_62 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + ns=4;s=Mass_63 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + ns=4;s=Mass_64 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + ns=4;s=Mass_65 + + 13 + + OverrideValue_2 + + + 0 + + + + + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + ns=4;s=Mass_66 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + ns=4;s=Mass_67 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + ns=4;s=Mass_68 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + ns=4;s=Mass_69 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + ns=4;s=Mass_70 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + ns=4;s=Mass_71 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f780d04b-b81b-451e-9679-5765056309ca + + + + ns=4;s=Mass_72 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + ns=4;s=Mass_73 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc23087a-bfe9-4182-8f26-532135641059 + + + + ns=4;s=Mass_74 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + ns=4;s=Mass_75 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + ns=4;s=Mass_76 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + ns=4;s=Mass_77 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + ns=4;s=Mass_78 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + ns=4;s=Mass_79 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + ns=4;s=Mass_80 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + ns=4;s=Mass_81 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + ns=4;s=Mass_82 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + ns=4;s=Mass_83 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + ns=4;s=Mass_84 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + ns=4;s=Mass_85 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + ns=4;s=Mass_86 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + ns=4;s=Mass_87 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + ns=4;s=Mass_88 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + ns=4;s=Mass_89 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + ns=4;s=Mass_90 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + ns=4;s=Mass_91 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + ns=4;s=Mass_92 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + ns=4;s=Mass_93 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + ns=4;s=Mass_94 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 28804468-9dc9-4e96-962e-3e621273788d + + + + ns=4;s=Mass_95 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + ns=4;s=Mass_96 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + ns=4;s=Mass_97 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + ns=4;s=Mass_98 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + ns=4;s=Mass_99 + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + + + ReaderGroup 2 + true + Invalid_0 + + + 1500 + + + + i=15995 + + + + + + + + i=15996 + + + + + + + + Reader 11 + true + + + 20 + + + 0 + 11 + + + + + + Simple + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + + Int32Fast + + 0 + 6 + + i=6 + + -1 + + 0 + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + + DateTime + + 0 + 13 + + i=13 + + -1 + + 0 + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 65 + 53 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + ns=2;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + ns=2;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + ns=2;s=Int32Fast + + 13 + + OverrideValue_2 + + + 0 + + + + + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + ns=2;s=DateTime + + 13 + + OverrideValue_2 + + + 0001-01-01T00:00:00 + + + + + + + + + + Reader 12 + true + + + 20 + + + 0 + 12 + + + + + + AllTypes + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + + Byte + + 0 + 3 + + i=3 + + -1 + + 0 + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + + Int16 + + 0 + 4 + + i=4 + + -1 + + 0 + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + + SByte + + 0 + 2 + + i=2 + + -1 + + 0 + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + + UInt16 + + 0 + 5 + + i=5 + + -1 + + 0 + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + + UInt32 + + 0 + 7 + + i=7 + + -1 + + 0 + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + + Float + + 0 + 10 + + i=10 + + -1 + + 0 + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + + Double + + 0 + 11 + + i=11 + + -1 + + 0 + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 65 + 53 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + ns=3;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + ns=3;s=Byte + + 13 + + OverrideValue_2 + + + 0 + + + + + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + ns=3;s=Int16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + ns=3;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + ns=3;s=SByte + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + ns=3;s=UInt16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + ns=3;s=UInt32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + ns=3;s=Float + + 13 + + OverrideValue_2 + + + 0 + + + + + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + ns=3;s=Double + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + Reader 13 + true + + + 20 + + + 0 + 13 + + + + + + MassTest + + + + Mass_0 + + 0 + 7 + + i=7 + + -1 + + 0 + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + + Mass_1 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + + Mass_2 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + + Mass_3 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + + Mass_4 + + 0 + 7 + + i=7 + + -1 + + 0 + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + + Mass_5 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + + Mass_6 + + 0 + 7 + + i=7 + + -1 + + 0 + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + + Mass_7 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + + Mass_8 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + + Mass_9 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + + Mass_10 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + + Mass_11 + + 0 + 7 + + i=7 + + -1 + + 0 + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + + Mass_12 + + 0 + 7 + + i=7 + + -1 + + 0 + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + + Mass_13 + + 0 + 7 + + i=7 + + -1 + + 0 + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + + Mass_14 + + 0 + 7 + + i=7 + + -1 + + 0 + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + + Mass_15 + + 0 + 7 + + i=7 + + -1 + + 0 + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + + Mass_16 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + + Mass_17 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + + Mass_18 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + + Mass_19 + + 0 + 7 + + i=7 + + -1 + + 0 + + a3f49307-f865-445b-9846-5512245bea57 + + + + + Mass_20 + + 0 + 7 + + i=7 + + -1 + + 0 + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + + Mass_21 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + + Mass_22 + + 0 + 7 + + i=7 + + -1 + + 0 + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + + Mass_23 + + 0 + 7 + + i=7 + + -1 + + 0 + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + + Mass_24 + + 0 + 7 + + i=7 + + -1 + + 0 + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + + Mass_25 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + + Mass_26 + + 0 + 7 + + i=7 + + -1 + + 0 + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + + Mass_27 + + 0 + 7 + + i=7 + + -1 + + 0 + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + + Mass_28 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + + Mass_29 + + 0 + 7 + + i=7 + + -1 + + 0 + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + + Mass_30 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + + Mass_31 + + 0 + 7 + + i=7 + + -1 + + 0 + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + + Mass_32 + + 0 + 7 + + i=7 + + -1 + + 0 + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + + Mass_33 + + 0 + 7 + + i=7 + + -1 + + 0 + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + + Mass_34 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + + Mass_35 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + + Mass_36 + + 0 + 7 + + i=7 + + -1 + + 0 + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + + Mass_37 + + 0 + 7 + + i=7 + + -1 + + 0 + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + + Mass_38 + + 0 + 7 + + i=7 + + -1 + + 0 + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + + Mass_39 + + 0 + 7 + + i=7 + + -1 + + 0 + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + + Mass_40 + + 0 + 7 + + i=7 + + -1 + + 0 + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + + Mass_41 + + 0 + 7 + + i=7 + + -1 + + 0 + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + + Mass_42 + + 0 + 7 + + i=7 + + -1 + + 0 + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + + Mass_43 + + 0 + 7 + + i=7 + + -1 + + 0 + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + + Mass_44 + + 0 + 7 + + i=7 + + -1 + + 0 + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + + Mass_45 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + + Mass_46 + + 0 + 7 + + i=7 + + -1 + + 0 + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + + Mass_47 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + + Mass_48 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + + Mass_49 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + + Mass_50 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + + Mass_51 + + 0 + 7 + + i=7 + + -1 + + 0 + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + + Mass_52 + + 0 + 7 + + i=7 + + -1 + + 0 + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + + Mass_53 + + 0 + 7 + + i=7 + + -1 + + 0 + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + + Mass_54 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + + Mass_55 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + + Mass_56 + + 0 + 7 + + i=7 + + -1 + + 0 + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + + Mass_57 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + + Mass_58 + + 0 + 7 + + i=7 + + -1 + + 0 + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + + Mass_59 + + 0 + 7 + + i=7 + + -1 + + 0 + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + + Mass_60 + + 0 + 7 + + i=7 + + -1 + + 0 + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + + Mass_61 + + 0 + 7 + + i=7 + + -1 + + 0 + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + + Mass_62 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + + Mass_63 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + + Mass_64 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + + Mass_65 + + 0 + 7 + + i=7 + + -1 + + 0 + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + + Mass_66 + + 0 + 7 + + i=7 + + -1 + + 0 + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + + Mass_67 + + 0 + 7 + + i=7 + + -1 + + 0 + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + + Mass_68 + + 0 + 7 + + i=7 + + -1 + + 0 + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + + Mass_69 + + 0 + 7 + + i=7 + + -1 + + 0 + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + + Mass_70 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + + Mass_71 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + + Mass_72 + + 0 + 7 + + i=7 + + -1 + + 0 + + f780d04b-b81b-451e-9679-5765056309ca + + + + + Mass_73 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + + Mass_74 + + 0 + 7 + + i=7 + + -1 + + 0 + + fc23087a-bfe9-4182-8f26-532135641059 + + + + + Mass_75 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + + Mass_76 + + 0 + 7 + + i=7 + + -1 + + 0 + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + + Mass_77 + + 0 + 7 + + i=7 + + -1 + + 0 + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + + Mass_78 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + + Mass_79 + + 0 + 7 + + i=7 + + -1 + + 0 + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + + Mass_80 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + + Mass_81 + + 0 + 7 + + i=7 + + -1 + + 0 + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + + Mass_82 + + 0 + 7 + + i=7 + + -1 + + 0 + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + + Mass_83 + + 0 + 7 + + i=7 + + -1 + + 0 + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + + Mass_84 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + + Mass_85 + + 0 + 7 + + i=7 + + -1 + + 0 + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + + Mass_86 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + + Mass_87 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + + Mass_88 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + + Mass_89 + + 0 + 7 + + i=7 + + -1 + + 0 + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + + Mass_90 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + + Mass_91 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + + Mass_92 + + 0 + 7 + + i=7 + + -1 + + 0 + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + + Mass_93 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + + Mass_94 + + 0 + 7 + + i=7 + + -1 + + 0 + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + + Mass_95 + + 0 + 7 + + i=7 + + -1 + + 0 + + 28804468-9dc9-4e96-962e-3e621273788d + + + + + Mass_96 + + 0 + 7 + + i=7 + + -1 + + 0 + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + + Mass_97 + + 0 + 7 + + i=7 + + -1 + + 0 + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + + Mass_98 + + 0 + 7 + + i=7 + + -1 + + 0 + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + + Mass_99 + + 0 + 7 + + i=7 + + -1 + + 0 + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 65 + 53 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + ns=4;s=Mass_0 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + ns=4;s=Mass_1 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + ns=4;s=Mass_2 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + ns=4;s=Mass_3 + + 13 + + OverrideValue_2 + + + 0 + + + + + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + ns=4;s=Mass_4 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + ns=4;s=Mass_5 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + ns=4;s=Mass_6 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + ns=4;s=Mass_7 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + ns=4;s=Mass_8 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + ns=4;s=Mass_9 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + ns=4;s=Mass_10 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + ns=4;s=Mass_11 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + ns=4;s=Mass_12 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + ns=4;s=Mass_13 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + ns=4;s=Mass_14 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + ns=4;s=Mass_15 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + ns=4;s=Mass_16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + ns=4;s=Mass_17 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + ns=4;s=Mass_18 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3f49307-f865-445b-9846-5512245bea57 + + + + ns=4;s=Mass_19 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + ns=4;s=Mass_20 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + ns=4;s=Mass_21 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + ns=4;s=Mass_22 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + ns=4;s=Mass_23 + + 13 + + OverrideValue_2 + + + 0 + + + + + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + ns=4;s=Mass_24 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + ns=4;s=Mass_25 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + ns=4;s=Mass_26 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + ns=4;s=Mass_27 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + ns=4;s=Mass_28 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + ns=4;s=Mass_29 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + ns=4;s=Mass_30 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + ns=4;s=Mass_31 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + ns=4;s=Mass_32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + ns=4;s=Mass_33 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + ns=4;s=Mass_34 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + ns=4;s=Mass_35 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + ns=4;s=Mass_36 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + ns=4;s=Mass_37 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + ns=4;s=Mass_38 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + ns=4;s=Mass_39 + + 13 + + OverrideValue_2 + + + 0 + + + + + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + ns=4;s=Mass_40 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + ns=4;s=Mass_41 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + ns=4;s=Mass_42 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + ns=4;s=Mass_43 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + ns=4;s=Mass_44 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + ns=4;s=Mass_45 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + ns=4;s=Mass_46 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + ns=4;s=Mass_47 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + ns=4;s=Mass_48 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + ns=4;s=Mass_49 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + ns=4;s=Mass_50 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + ns=4;s=Mass_51 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + ns=4;s=Mass_52 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + ns=4;s=Mass_53 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + ns=4;s=Mass_54 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + ns=4;s=Mass_55 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + ns=4;s=Mass_56 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + ns=4;s=Mass_57 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + ns=4;s=Mass_58 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + ns=4;s=Mass_59 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + ns=4;s=Mass_60 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + ns=4;s=Mass_61 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + ns=4;s=Mass_62 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + ns=4;s=Mass_63 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + ns=4;s=Mass_64 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + ns=4;s=Mass_65 + + 13 + + OverrideValue_2 + + + 0 + + + + + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + ns=4;s=Mass_66 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + ns=4;s=Mass_67 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + ns=4;s=Mass_68 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + ns=4;s=Mass_69 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + ns=4;s=Mass_70 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + ns=4;s=Mass_71 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f780d04b-b81b-451e-9679-5765056309ca + + + + ns=4;s=Mass_72 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + ns=4;s=Mass_73 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc23087a-bfe9-4182-8f26-532135641059 + + + + ns=4;s=Mass_74 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + ns=4;s=Mass_75 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + ns=4;s=Mass_76 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + ns=4;s=Mass_77 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + ns=4;s=Mass_78 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + ns=4;s=Mass_79 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + ns=4;s=Mass_80 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + ns=4;s=Mass_81 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + ns=4;s=Mass_82 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + ns=4;s=Mass_83 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + ns=4;s=Mass_84 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + ns=4;s=Mass_85 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + ns=4;s=Mass_86 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + ns=4;s=Mass_87 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + ns=4;s=Mass_88 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + ns=4;s=Mass_89 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + ns=4;s=Mass_90 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + ns=4;s=Mass_91 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + ns=4;s=Mass_92 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + ns=4;s=Mass_93 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + ns=4;s=Mass_94 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 28804468-9dc9-4e96-962e-3e621273788d + + + + ns=4;s=Mass_95 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + ns=4;s=Mass_96 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + ns=4;s=Mass_97 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + ns=4;s=Mass_98 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + ns=4;s=Mass_99 + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + + +
+ + UADPConection2 + true + + + 20 + + + http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp +
+ + i=21176 + + + + + opc.udp://239.0.0.1:4840 + + +
+ + + + + + + ReaderGroup 21 + true + Invalid_0 + + + 1500 + + + + i=15995 + + + + + + + + i=15996 + + + + + + + + Reader 1 + true + + + 10 + + + 0 + 1 + + + + + + Simple + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + + Int32Fast + + 0 + 6 + + i=6 + + -1 + + 0 + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + + DateTime + + 0 + 13 + + i=13 + + -1 + + 0 + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 63 + 36 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + ns=2;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + ns=2;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + ns=2;s=Int32Fast + + 13 + + OverrideValue_2 + + + 0 + + + + + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + ns=2;s=DateTime + + 13 + + OverrideValue_2 + + + 0001-01-01T00:00:00 + + + + + + + + + + Reader 2 + true + + + 10 + + + 0 + 2 + + + + + + AllTypes + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + + Byte + + 0 + 3 + + i=3 + + -1 + + 0 + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + + Int16 + + 0 + 4 + + i=4 + + -1 + + 0 + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + + SByte + + 0 + 2 + + i=2 + + -1 + + 0 + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + + UInt16 + + 0 + 5 + + i=5 + + -1 + + 0 + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + + UInt32 + + 0 + 7 + + i=7 + + -1 + + 0 + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + + Float + + 0 + 10 + + i=10 + + -1 + + 0 + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + + Double + + 0 + 11 + + i=11 + + -1 + + 0 + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 63 + 36 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + ns=3;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + ns=3;s=Byte + + 13 + + OverrideValue_2 + + + 0 + + + + + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + ns=3;s=Int16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + ns=3;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + ns=3;s=SByte + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + ns=3;s=UInt16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + ns=3;s=UInt32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + ns=3;s=Float + + 13 + + OverrideValue_2 + + + 0 + + + + + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + ns=3;s=Double + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + Reader 3 + true + + + 10 + + + 0 + 3 + + + + + + MassTest + + + + Mass_0 + + 0 + 7 + + i=7 + + -1 + + 0 + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + + Mass_1 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + + Mass_2 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + + Mass_3 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + + Mass_4 + + 0 + 7 + + i=7 + + -1 + + 0 + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + + Mass_5 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + + Mass_6 + + 0 + 7 + + i=7 + + -1 + + 0 + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + + Mass_7 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + + Mass_8 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + + Mass_9 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + + Mass_10 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + + Mass_11 + + 0 + 7 + + i=7 + + -1 + + 0 + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + + Mass_12 + + 0 + 7 + + i=7 + + -1 + + 0 + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + + Mass_13 + + 0 + 7 + + i=7 + + -1 + + 0 + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + + Mass_14 + + 0 + 7 + + i=7 + + -1 + + 0 + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + + Mass_15 + + 0 + 7 + + i=7 + + -1 + + 0 + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + + Mass_16 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + + Mass_17 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + + Mass_18 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + + Mass_19 + + 0 + 7 + + i=7 + + -1 + + 0 + + a3f49307-f865-445b-9846-5512245bea57 + + + + + Mass_20 + + 0 + 7 + + i=7 + + -1 + + 0 + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + + Mass_21 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + + Mass_22 + + 0 + 7 + + i=7 + + -1 + + 0 + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + + Mass_23 + + 0 + 7 + + i=7 + + -1 + + 0 + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + + Mass_24 + + 0 + 7 + + i=7 + + -1 + + 0 + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + + Mass_25 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + + Mass_26 + + 0 + 7 + + i=7 + + -1 + + 0 + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + + Mass_27 + + 0 + 7 + + i=7 + + -1 + + 0 + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + + Mass_28 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + + Mass_29 + + 0 + 7 + + i=7 + + -1 + + 0 + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + + Mass_30 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + + Mass_31 + + 0 + 7 + + i=7 + + -1 + + 0 + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + + Mass_32 + + 0 + 7 + + i=7 + + -1 + + 0 + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + + Mass_33 + + 0 + 7 + + i=7 + + -1 + + 0 + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + + Mass_34 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + + Mass_35 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + + Mass_36 + + 0 + 7 + + i=7 + + -1 + + 0 + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + + Mass_37 + + 0 + 7 + + i=7 + + -1 + + 0 + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + + Mass_38 + + 0 + 7 + + i=7 + + -1 + + 0 + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + + Mass_39 + + 0 + 7 + + i=7 + + -1 + + 0 + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + + Mass_40 + + 0 + 7 + + i=7 + + -1 + + 0 + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + + Mass_41 + + 0 + 7 + + i=7 + + -1 + + 0 + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + + Mass_42 + + 0 + 7 + + i=7 + + -1 + + 0 + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + + Mass_43 + + 0 + 7 + + i=7 + + -1 + + 0 + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + + Mass_44 + + 0 + 7 + + i=7 + + -1 + + 0 + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + + Mass_45 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + + Mass_46 + + 0 + 7 + + i=7 + + -1 + + 0 + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + + Mass_47 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + + Mass_48 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + + Mass_49 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + + Mass_50 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + + Mass_51 + + 0 + 7 + + i=7 + + -1 + + 0 + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + + Mass_52 + + 0 + 7 + + i=7 + + -1 + + 0 + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + + Mass_53 + + 0 + 7 + + i=7 + + -1 + + 0 + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + + Mass_54 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + + Mass_55 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + + Mass_56 + + 0 + 7 + + i=7 + + -1 + + 0 + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + + Mass_57 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + + Mass_58 + + 0 + 7 + + i=7 + + -1 + + 0 + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + + Mass_59 + + 0 + 7 + + i=7 + + -1 + + 0 + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + + Mass_60 + + 0 + 7 + + i=7 + + -1 + + 0 + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + + Mass_61 + + 0 + 7 + + i=7 + + -1 + + 0 + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + + Mass_62 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + + Mass_63 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + + Mass_64 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + + Mass_65 + + 0 + 7 + + i=7 + + -1 + + 0 + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + + Mass_66 + + 0 + 7 + + i=7 + + -1 + + 0 + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + + Mass_67 + + 0 + 7 + + i=7 + + -1 + + 0 + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + + Mass_68 + + 0 + 7 + + i=7 + + -1 + + 0 + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + + Mass_69 + + 0 + 7 + + i=7 + + -1 + + 0 + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + + Mass_70 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + + Mass_71 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + + Mass_72 + + 0 + 7 + + i=7 + + -1 + + 0 + + f780d04b-b81b-451e-9679-5765056309ca + + + + + Mass_73 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + + Mass_74 + + 0 + 7 + + i=7 + + -1 + + 0 + + fc23087a-bfe9-4182-8f26-532135641059 + + + + + Mass_75 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + + Mass_76 + + 0 + 7 + + i=7 + + -1 + + 0 + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + + Mass_77 + + 0 + 7 + + i=7 + + -1 + + 0 + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + + Mass_78 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + + Mass_79 + + 0 + 7 + + i=7 + + -1 + + 0 + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + + Mass_80 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + + Mass_81 + + 0 + 7 + + i=7 + + -1 + + 0 + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + + Mass_82 + + 0 + 7 + + i=7 + + -1 + + 0 + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + + Mass_83 + + 0 + 7 + + i=7 + + -1 + + 0 + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + + Mass_84 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + + Mass_85 + + 0 + 7 + + i=7 + + -1 + + 0 + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + + Mass_86 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + + Mass_87 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + + Mass_88 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + + Mass_89 + + 0 + 7 + + i=7 + + -1 + + 0 + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + + Mass_90 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + + Mass_91 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + + Mass_92 + + 0 + 7 + + i=7 + + -1 + + 0 + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + + Mass_93 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + + Mass_94 + + 0 + 7 + + i=7 + + -1 + + 0 + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + + Mass_95 + + 0 + 7 + + i=7 + + -1 + + 0 + + 28804468-9dc9-4e96-962e-3e621273788d + + + + + Mass_96 + + 0 + 7 + + i=7 + + -1 + + 0 + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + + Mass_97 + + 0 + 7 + + i=7 + + -1 + + 0 + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + + Mass_98 + + 0 + 7 + + i=7 + + -1 + + 0 + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + + Mass_99 + + 0 + 7 + + i=7 + + -1 + + 0 + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 63 + 36 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + ns=4;s=Mass_0 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + ns=4;s=Mass_1 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + ns=4;s=Mass_2 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + ns=4;s=Mass_3 + + 13 + + OverrideValue_2 + + + 0 + + + + + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + ns=4;s=Mass_4 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + ns=4;s=Mass_5 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + ns=4;s=Mass_6 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + ns=4;s=Mass_7 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + ns=4;s=Mass_8 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + ns=4;s=Mass_9 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + ns=4;s=Mass_10 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + ns=4;s=Mass_11 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + ns=4;s=Mass_12 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + ns=4;s=Mass_13 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + ns=4;s=Mass_14 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + ns=4;s=Mass_15 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + ns=4;s=Mass_16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + ns=4;s=Mass_17 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + ns=4;s=Mass_18 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3f49307-f865-445b-9846-5512245bea57 + + + + ns=4;s=Mass_19 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + ns=4;s=Mass_20 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + ns=4;s=Mass_21 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + ns=4;s=Mass_22 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + ns=4;s=Mass_23 + + 13 + + OverrideValue_2 + + + 0 + + + + + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + ns=4;s=Mass_24 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + ns=4;s=Mass_25 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + ns=4;s=Mass_26 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + ns=4;s=Mass_27 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + ns=4;s=Mass_28 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + ns=4;s=Mass_29 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + ns=4;s=Mass_30 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + ns=4;s=Mass_31 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + ns=4;s=Mass_32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + ns=4;s=Mass_33 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + ns=4;s=Mass_34 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + ns=4;s=Mass_35 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + ns=4;s=Mass_36 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + ns=4;s=Mass_37 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + ns=4;s=Mass_38 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + ns=4;s=Mass_39 + + 13 + + OverrideValue_2 + + + 0 + + + + + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + ns=4;s=Mass_40 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + ns=4;s=Mass_41 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + ns=4;s=Mass_42 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + ns=4;s=Mass_43 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + ns=4;s=Mass_44 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + ns=4;s=Mass_45 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + ns=4;s=Mass_46 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + ns=4;s=Mass_47 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + ns=4;s=Mass_48 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + ns=4;s=Mass_49 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + ns=4;s=Mass_50 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + ns=4;s=Mass_51 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + ns=4;s=Mass_52 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + ns=4;s=Mass_53 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + ns=4;s=Mass_54 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + ns=4;s=Mass_55 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + ns=4;s=Mass_56 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + ns=4;s=Mass_57 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + ns=4;s=Mass_58 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + ns=4;s=Mass_59 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + ns=4;s=Mass_60 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + ns=4;s=Mass_61 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + ns=4;s=Mass_62 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + ns=4;s=Mass_63 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + ns=4;s=Mass_64 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + ns=4;s=Mass_65 + + 13 + + OverrideValue_2 + + + 0 + + + + + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + ns=4;s=Mass_66 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + ns=4;s=Mass_67 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + ns=4;s=Mass_68 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + ns=4;s=Mass_69 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + ns=4;s=Mass_70 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + ns=4;s=Mass_71 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f780d04b-b81b-451e-9679-5765056309ca + + + + ns=4;s=Mass_72 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + ns=4;s=Mass_73 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc23087a-bfe9-4182-8f26-532135641059 + + + + ns=4;s=Mass_74 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + ns=4;s=Mass_75 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + ns=4;s=Mass_76 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + ns=4;s=Mass_77 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + ns=4;s=Mass_78 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + ns=4;s=Mass_79 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + ns=4;s=Mass_80 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + ns=4;s=Mass_81 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + ns=4;s=Mass_82 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + ns=4;s=Mass_83 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + ns=4;s=Mass_84 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + ns=4;s=Mass_85 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + ns=4;s=Mass_86 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + ns=4;s=Mass_87 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + ns=4;s=Mass_88 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + ns=4;s=Mass_89 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + ns=4;s=Mass_90 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + ns=4;s=Mass_91 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + ns=4;s=Mass_92 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + ns=4;s=Mass_93 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + ns=4;s=Mass_94 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 28804468-9dc9-4e96-962e-3e621273788d + + + + ns=4;s=Mass_95 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + ns=4;s=Mass_96 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + ns=4;s=Mass_97 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + ns=4;s=Mass_98 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + ns=4;s=Mass_99 + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + + + ReaderGroup 22 + true + Invalid_0 + + + 1500 + + + + i=15995 + + + + + + + + i=15996 + + + + + + + + Reader 11 + true + + + 20 + + + 0 + 11 + + + + + + Simple + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + + Int32Fast + + 0 + 6 + + i=6 + + -1 + + 0 + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + + DateTime + + 0 + 13 + + i=13 + + -1 + + 0 + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 65 + 53 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + fb264ecc-914d-45a2-96d1-797dd6ecd746 + + + + ns=2;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + 80c97f62-9be2-46b9-8206-217c0f51a2d8 + + + + ns=2;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3eb10fc-0eb0-4698-ac5e-cbd47c0212c9 + + + + ns=2;s=Int32Fast + + 13 + + OverrideValue_2 + + + 0 + + + + + + 67447bd3-2ed4-4d72-909f-b1451256dd74 + + + + ns=2;s=DateTime + + 13 + + OverrideValue_2 + + + 0001-01-01T00:00:00 + + + + + + + + + + Reader 12 + true + + + 20 + + + 0 + 12 + + + + + + AllTypes + + + + BoolToggle + + 0 + 1 + + i=1 + + -1 + + 0 + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + + Byte + + 0 + 3 + + i=3 + + -1 + + 0 + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + + Int16 + + 0 + 4 + + i=4 + + -1 + + 0 + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + + Int32 + + 0 + 6 + + i=6 + + -1 + + 0 + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + + SByte + + 0 + 2 + + i=2 + + -1 + + 0 + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + + UInt16 + + 0 + 5 + + i=5 + + -1 + + 0 + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + + UInt32 + + 0 + 7 + + i=7 + + -1 + + 0 + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + + Float + + 0 + 10 + + i=10 + + -1 + + 0 + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + + Double + + 0 + 11 + + i=11 + + -1 + + 0 + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 65 + 53 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + de08ac83-82ba-4243-84ca-4746b159c432 + + + + ns=3;s=BoolToggle + + 13 + + OverrideValue_2 + + + false + + + + + + d36049cc-eb9c-4da0-9ac1-d2fbb245bce9 + + + + ns=3;s=Byte + + 13 + + OverrideValue_2 + + + 0 + + + + + + f4ca3cc3-0e25-426e-a69a-74330db30f62 + + + + ns=3;s=Int16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc5cf70e-c539-408b-b63b-c58d031c02eb + + + + ns=3;s=Int32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e85f106e-5f11-4f42-8902-39e172d1a6f4 + + + + ns=3;s=SByte + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0289533c-c252-457e-8549-b107e3a2b688 + + + + ns=3;s=UInt16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 50d9b038-b6b1-421a-bd14-a8a00a155b20 + + + + ns=3;s=UInt32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d5fbc1a-4987-40b4-b5a0-a6fb5b71cce4 + + + + ns=3;s=Float + + 13 + + OverrideValue_2 + + + 0 + + + + + + 24b25ebb-3361-4d9a-8852-be6ded57355f + + + + ns=3;s=Double + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + Reader 13 + true + + + 20 + + + 0 + 13 + + + + + + MassTest + + + + Mass_0 + + 0 + 7 + + i=7 + + -1 + + 0 + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + + Mass_1 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + + Mass_2 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + + Mass_3 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + + Mass_4 + + 0 + 7 + + i=7 + + -1 + + 0 + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + + Mass_5 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + + Mass_6 + + 0 + 7 + + i=7 + + -1 + + 0 + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + + Mass_7 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + + Mass_8 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + + Mass_9 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + + Mass_10 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + + Mass_11 + + 0 + 7 + + i=7 + + -1 + + 0 + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + + Mass_12 + + 0 + 7 + + i=7 + + -1 + + 0 + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + + Mass_13 + + 0 + 7 + + i=7 + + -1 + + 0 + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + + Mass_14 + + 0 + 7 + + i=7 + + -1 + + 0 + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + + Mass_15 + + 0 + 7 + + i=7 + + -1 + + 0 + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + + Mass_16 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + + Mass_17 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + + Mass_18 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + + Mass_19 + + 0 + 7 + + i=7 + + -1 + + 0 + + a3f49307-f865-445b-9846-5512245bea57 + + + + + Mass_20 + + 0 + 7 + + i=7 + + -1 + + 0 + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + + Mass_21 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + + Mass_22 + + 0 + 7 + + i=7 + + -1 + + 0 + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + + Mass_23 + + 0 + 7 + + i=7 + + -1 + + 0 + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + + Mass_24 + + 0 + 7 + + i=7 + + -1 + + 0 + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + + Mass_25 + + 0 + 7 + + i=7 + + -1 + + 0 + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + + Mass_26 + + 0 + 7 + + i=7 + + -1 + + 0 + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + + Mass_27 + + 0 + 7 + + i=7 + + -1 + + 0 + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + + Mass_28 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + + Mass_29 + + 0 + 7 + + i=7 + + -1 + + 0 + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + + Mass_30 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + + Mass_31 + + 0 + 7 + + i=7 + + -1 + + 0 + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + + Mass_32 + + 0 + 7 + + i=7 + + -1 + + 0 + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + + Mass_33 + + 0 + 7 + + i=7 + + -1 + + 0 + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + + Mass_34 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + + Mass_35 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + + Mass_36 + + 0 + 7 + + i=7 + + -1 + + 0 + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + + Mass_37 + + 0 + 7 + + i=7 + + -1 + + 0 + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + + Mass_38 + + 0 + 7 + + i=7 + + -1 + + 0 + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + + Mass_39 + + 0 + 7 + + i=7 + + -1 + + 0 + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + + Mass_40 + + 0 + 7 + + i=7 + + -1 + + 0 + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + + Mass_41 + + 0 + 7 + + i=7 + + -1 + + 0 + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + + Mass_42 + + 0 + 7 + + i=7 + + -1 + + 0 + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + + Mass_43 + + 0 + 7 + + i=7 + + -1 + + 0 + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + + Mass_44 + + 0 + 7 + + i=7 + + -1 + + 0 + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + + Mass_45 + + 0 + 7 + + i=7 + + -1 + + 0 + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + + Mass_46 + + 0 + 7 + + i=7 + + -1 + + 0 + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + + Mass_47 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + + Mass_48 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + + Mass_49 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + + Mass_50 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + + Mass_51 + + 0 + 7 + + i=7 + + -1 + + 0 + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + + Mass_52 + + 0 + 7 + + i=7 + + -1 + + 0 + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + + Mass_53 + + 0 + 7 + + i=7 + + -1 + + 0 + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + + Mass_54 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + + Mass_55 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + + Mass_56 + + 0 + 7 + + i=7 + + -1 + + 0 + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + + Mass_57 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + + Mass_58 + + 0 + 7 + + i=7 + + -1 + + 0 + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + + Mass_59 + + 0 + 7 + + i=7 + + -1 + + 0 + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + + Mass_60 + + 0 + 7 + + i=7 + + -1 + + 0 + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + + Mass_61 + + 0 + 7 + + i=7 + + -1 + + 0 + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + + Mass_62 + + 0 + 7 + + i=7 + + -1 + + 0 + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + + Mass_63 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + + Mass_64 + + 0 + 7 + + i=7 + + -1 + + 0 + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + + Mass_65 + + 0 + 7 + + i=7 + + -1 + + 0 + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + + Mass_66 + + 0 + 7 + + i=7 + + -1 + + 0 + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + + Mass_67 + + 0 + 7 + + i=7 + + -1 + + 0 + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + + Mass_68 + + 0 + 7 + + i=7 + + -1 + + 0 + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + + Mass_69 + + 0 + 7 + + i=7 + + -1 + + 0 + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + + Mass_70 + + 0 + 7 + + i=7 + + -1 + + 0 + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + + Mass_71 + + 0 + 7 + + i=7 + + -1 + + 0 + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + + Mass_72 + + 0 + 7 + + i=7 + + -1 + + 0 + + f780d04b-b81b-451e-9679-5765056309ca + + + + + Mass_73 + + 0 + 7 + + i=7 + + -1 + + 0 + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + + Mass_74 + + 0 + 7 + + i=7 + + -1 + + 0 + + fc23087a-bfe9-4182-8f26-532135641059 + + + + + Mass_75 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + + Mass_76 + + 0 + 7 + + i=7 + + -1 + + 0 + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + + Mass_77 + + 0 + 7 + + i=7 + + -1 + + 0 + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + + Mass_78 + + 0 + 7 + + i=7 + + -1 + + 0 + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + + Mass_79 + + 0 + 7 + + i=7 + + -1 + + 0 + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + + Mass_80 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + + Mass_81 + + 0 + 7 + + i=7 + + -1 + + 0 + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + + Mass_82 + + 0 + 7 + + i=7 + + -1 + + 0 + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + + Mass_83 + + 0 + 7 + + i=7 + + -1 + + 0 + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + + Mass_84 + + 0 + 7 + + i=7 + + -1 + + 0 + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + + Mass_85 + + 0 + 7 + + i=7 + + -1 + + 0 + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + + Mass_86 + + 0 + 7 + + i=7 + + -1 + + 0 + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + + Mass_87 + + 0 + 7 + + i=7 + + -1 + + 0 + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + + Mass_88 + + 0 + 7 + + i=7 + + -1 + + 0 + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + + Mass_89 + + 0 + 7 + + i=7 + + -1 + + 0 + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + + Mass_90 + + 0 + 7 + + i=7 + + -1 + + 0 + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + + Mass_91 + + 0 + 7 + + i=7 + + -1 + + 0 + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + + Mass_92 + + 0 + 7 + + i=7 + + -1 + + 0 + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + + Mass_93 + + 0 + 7 + + i=7 + + -1 + + 0 + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + + Mass_94 + + 0 + 7 + + i=7 + + -1 + + 0 + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + + Mass_95 + + 0 + 7 + + i=7 + + -1 + + 0 + + 28804468-9dc9-4e96-962e-3e621273788d + + + + + Mass_96 + + 0 + 7 + + i=7 + + -1 + + 0 + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + + Mass_97 + + 0 + 7 + + i=7 + + -1 + + 0 + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + + Mass_98 + + 0 + 7 + + i=7 + + -1 + + 0 + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + + Mass_99 + + 0 + 7 + + i=7 + + -1 + + 0 + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + + + 00000000-0000-0000-0000-000000000000 + + + 1 + 1 + + + 32 + 0 + 1 + + Invalid_0 + + + + + + + i=16016 + + + + 0 + 0 + 0 + + 00000000-0000-0000-0000-000000000000 + + 65 + 53 + 0 + 0 + 0 + + + + + + i=16011 + + + + + + + 512775ff-f1f5-483e-b480-cac222ae6640 + + + + ns=4;s=Mass_0 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7b7cf4c9-9f1c-4135-97df-41ea193d3ef7 + + + + ns=4;s=Mass_1 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5aba6d48-410b-4e7f-9459-313e2560ab0f + + + + ns=4;s=Mass_2 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1d3517de-ebb4-40be-b1d1-afc2abc250ae + + + + ns=4;s=Mass_3 + + 13 + + OverrideValue_2 + + + 0 + + + + + + aa341d33-cd67-4daf-b454-381f975f7221 + + + + ns=4;s=Mass_4 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8c913f52-7ca7-4508-baea-30b5792e172a + + + + ns=4;s=Mass_5 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b0971c60-9070-41d9-8e3b-89440e09072b + + + + ns=4;s=Mass_6 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8aa0e990-2f08-4e34-8e72-3b8754627bad + + + + ns=4;s=Mass_7 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbac0be-4164-4309-b552-f8294378a36f + + + + ns=4;s=Mass_8 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbaa32a-f523-4628-bb12-a07096f13e53 + + + + ns=4;s=Mass_9 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77180a45-1263-4158-9f85-2334f26aba61 + + + + ns=4;s=Mass_10 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 17098ffb-4476-4d5d-b225-8ccd585d3c75 + + + + ns=4;s=Mass_11 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f6197ce3-a4fb-440a-95d9-c75221cdb655 + + + + ns=4;s=Mass_12 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 347272f7-f760-488e-a23d-ce3094a48285 + + + + ns=4;s=Mass_13 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f64ca7cd-3144-4d48-a2eb-f51405a6edbd + + + + ns=4;s=Mass_14 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c4dd54a2-e52f-4345-bfa8-19c95717da17 + + + + ns=4;s=Mass_15 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6fbd5fd0-9137-4266-abc3-f46db843a588 + + + + ns=4;s=Mass_16 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4968e7e7-c5d8-4aa6-80e5-d8e44ace5465 + + + + ns=4;s=Mass_17 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1ccedcd6-80a6-4065-8181-dc12e3b8bff0 + + + + ns=4;s=Mass_18 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a3f49307-f865-445b-9846-5512245bea57 + + + + ns=4;s=Mass_19 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c9890888-21a5-452f-af8c-bf33bdb8e6d6 + + + + ns=4;s=Mass_20 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5e31afcd-0a68-4f63-8b54-4ade6a6369f9 + + + + ns=4;s=Mass_21 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 63d43444-f8a4-4c75-adb4-e4911f2de166 + + + + ns=4;s=Mass_22 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 832c1bf3-30e3-4d19-87f2-83309ca615d7 + + + + ns=4;s=Mass_23 + + 13 + + OverrideValue_2 + + + 0 + + + + + + cf2c6f80-fa64-4c2b-90be-8e0096ce8b59 + + + + ns=4;s=Mass_24 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 2fd18c61-9b92-44c7-be64-9143e4a610e2 + + + + ns=4;s=Mass_25 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d947aa5e-3b08-46b5-b3f6-450cf7773a43 + + + + ns=4;s=Mass_26 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c12f5045-eed3-46ee-b023-5e34c3e5c816 + + + + ns=4;s=Mass_27 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9161d52-4ce2-4d71-886f-4acb6c51427a + + + + ns=4;s=Mass_28 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f11d877e-15e5-4f80-ab91-79c48fec1ddb + + + + ns=4;s=Mass_29 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1259321b-7cb6-4dad-a0a3-5adf5488550e + + + + ns=4;s=Mass_30 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 713e8597-699a-4ad0-9227-c1631ebd57de + + + + ns=4;s=Mass_31 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ac82f80a-2645-4915-9d8b-c165a9fcf044 + + + + ns=4;s=Mass_32 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d6ce3cef-c99b-493f-a4d8-8c072a6b5636 + + + + ns=4;s=Mass_33 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e3d2c75-c226-4fab-a04d-90c300f5b446 + + + + ns=4;s=Mass_34 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7401dd96-742d-4b3f-95d3-e3c4cdd963c6 + + + + ns=4;s=Mass_35 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 52b25307-eb23-4234-b87e-fecce32d793d + + + + ns=4;s=Mass_36 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ed8ea1b9-d443-43c1-9cc3-6afc01ace607 + + + + ns=4;s=Mass_37 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bc88a84d-2cdf-414f-bac8-02b8d570e37c + + + + ns=4;s=Mass_38 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c1861792-3c37-460c-8d62-fda8ff848aed + + + + ns=4;s=Mass_39 + + 13 + + OverrideValue_2 + + + 0 + + + + + + eb942e61-7763-413d-84e2-13c88f5e648a + + + + ns=4;s=Mass_40 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 22ea5320-2990-49f9-b950-8749b44a2034 + + + + ns=4;s=Mass_41 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 54d3dcc3-d8c5-443e-95d3-2eb56c96bf2d + + + + ns=4;s=Mass_42 + + 13 + + OverrideValue_2 + + + 0 + + + + + + ad3d7b29-b82b-4884-a06f-2aa1967a293b + + + + ns=4;s=Mass_43 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 91d393d4-3451-4c48-90e8-1bd3afe2dd85 + + + + ns=4;s=Mass_44 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 9cbfd394-048b-4f51-aa04-b855a903d3e8 + + + + ns=4;s=Mass_45 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 692b4d5b-4eae-4033-8741-477d65321b32 + + + + ns=4;s=Mass_46 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1b5f50e2-4231-49e9-86ee-9ff64ad6c4f0 + + + + ns=4;s=Mass_47 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b0283-fae3-48ee-9502-3a080eb0b157 + + + + ns=4;s=Mass_48 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4816557-30ac-47fc-bcb8-a22abbd7421c + + + + ns=4;s=Mass_49 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60275e3e-4524-4ccf-8093-c585416e2e88 + + + + ns=4;s=Mass_50 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e0cfa368-fa9f-4f51-bb5f-f40833e16121 + + + + ns=4;s=Mass_51 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b6f103c4-cb2f-4d68-a68d-b163803ac1ff + + + + ns=4;s=Mass_52 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c411616e-97e8-4066-a36e-3afcf11c6aa8 + + + + ns=4;s=Mass_53 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5ced5c96-4fec-4146-9308-bccdaac9892a + + + + ns=4;s=Mass_54 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4381e6b8-012e-49b2-8e5f-c83da6810f0e + + + + ns=4;s=Mass_55 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 95ef20e2-f4c6-4e93-9bcd-b031c86bde01 + + + + ns=4;s=Mass_56 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3233a2f0-6e2f-4f5a-ad3c-094e245fb023 + + + + ns=4;s=Mass_57 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c6a5c833-25f0-48fe-8261-6f602f04bdf6 + + + + ns=4;s=Mass_58 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d519168a-881d-4a82-8f34-59add8bc8927 + + + + ns=4;s=Mass_59 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 65dc90cd-64f4-4107-b6dc-0920c703ce10 + + + + ns=4;s=Mass_60 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 777b498f-8cf3-4b4f-9537-91488bb73181 + + + + ns=4;s=Mass_61 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 8d4252a2-8e61-4eeb-89e1-b94f6ef75b44 + + + + ns=4;s=Mass_62 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1fc5341c-52c8-4764-a607-56299c04b66e + + + + ns=4;s=Mass_63 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 60068806-16b6-4ab4-85f2-4566dfae67db + + + + ns=4;s=Mass_64 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 19a46da4-6a9f-4f76-bce4-32661f827a51 + + + + ns=4;s=Mass_65 + + 13 + + OverrideValue_2 + + + 0 + + + + + + be0c0009-28cd-4dfe-a416-bd98ea503f5a + + + + ns=4;s=Mass_66 + + 13 + + OverrideValue_2 + + + 0 + + + + + + a6c10a56-fcc9-4780-9d1d-5245bfc30a0d + + + + ns=4;s=Mass_67 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e2e43812-0ea9-478d-9d87-7188bc1bf638 + + + + ns=4;s=Mass_68 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 805873ec-5fb4-4927-adfb-4ce043d1b35a + + + + ns=4;s=Mass_69 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 6e2befe3-cfe3-4ded-b4c8-2317f621a975 + + + + ns=4;s=Mass_70 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b9c387fa-8afa-4510-b866-2f020dd7e40b + + + + ns=4;s=Mass_71 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f780d04b-b81b-451e-9679-5765056309ca + + + + ns=4;s=Mass_72 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 77ce4a5a-f006-4ef3-a98c-4185157d10c3 + + + + ns=4;s=Mass_73 + + 13 + + OverrideValue_2 + + + 0 + + + + + + fc23087a-bfe9-4182-8f26-532135641059 + + + + ns=4;s=Mass_74 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7d8d1bd2-c81d-48fd-a4a4-dc88029d6835 + + + + ns=4;s=Mass_75 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 61ce886f-af8a-4081-8e72-968b8f7b8f28 + + + + ns=4;s=Mass_76 + + 13 + + OverrideValue_2 + + + 0 + + + + + + b14acd21-f82b-44af-bb6c-93ed6e6d858c + + + + ns=4;s=Mass_77 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 3171800a-c265-4b73-a7a1-38432545c6ac + + + + ns=4;s=Mass_78 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e77f112c-a4f7-43cc-94fc-1e7ccbfbd3d5 + + + + ns=4;s=Mass_79 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7fc8d0a9-e9e3-475b-9001-5efc70545917 + + + + ns=4;s=Mass_80 + + 13 + + OverrideValue_2 + + + 0 + + + + + + f9ed238f-77ed-4ad9-b78f-42bb5596efd1 + + + + ns=4;s=Mass_81 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 696f3429-a1e6-465e-868e-6a7039f36329 + + + + ns=4;s=Mass_82 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e5b6e76f-b21e-4d5e-abb9-77660b5570d2 + + + + ns=4;s=Mass_83 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 7be8287d-7080-4c25-841a-321591fa0c1e + + + + ns=4;s=Mass_84 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 42afc987-4646-4cf9-9863-54a91faa7905 + + + + ns=4;s=Mass_85 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 1a65209b-75b7-4b4d-ac63-e07cce74905b + + + + ns=4;s=Mass_86 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 399b671b-06ac-4ba2-9e17-2250b3c9d892 + + + + ns=4;s=Mass_87 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 4b2e590f-22ef-4ae9-b75b-968843dfbf27 + + + + ns=4;s=Mass_88 + + 13 + + OverrideValue_2 + + + 0 + + + + + + d55f1b6d-62d1-474c-a413-464f6f76d116 + + + + ns=4;s=Mass_89 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 0a5ad0e2-863d-4efe-8753-c76515c8fbab + + + + ns=4;s=Mass_90 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 5d84a27e-3511-436c-826c-f1868d3eb4df + + + + ns=4;s=Mass_91 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bd52c05c-e803-4f47-b91c-705135bc34f4 + + + + ns=4;s=Mass_92 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e4b93d46-87e1-4a81-ada0-c3c635b4241e + + + + ns=4;s=Mass_93 + + 13 + + OverrideValue_2 + + + 0 + + + + + + bea3a7bb-2f3e-4193-9ea1-67e51cddecec + + + + ns=4;s=Mass_94 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 28804468-9dc9-4e96-962e-3e621273788d + + + + ns=4;s=Mass_95 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c63bae75-77e2-4068-b6f3-092557bc3d54 + + + + ns=4;s=Mass_96 + + 13 + + OverrideValue_2 + + + 0 + + + + + + 036bc222-723c-4ef4-bb12-d30f4dedb5d5 + + + + ns=4;s=Mass_97 + + 13 + + OverrideValue_2 + + + 0 + + + + + + e53be5b7-233d-47ca-86fc-c6ca4d1701ea + + + + ns=4;s=Mass_98 + + 13 + + OverrideValue_2 + + + 0 + + + + + + c06ece83-158a-40ec-b5f3-3132d6ea0ec7 + + + + ns=4;s=Mass_99 + + 13 + + OverrideValue_2 + + + 0 + + + + + + + + + + + +
+
+ true +
\ No newline at end of file diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPubSubApplicationTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPubSubApplicationTests.cs new file mode 100644 index 00000000..920807bf --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPubSubApplicationTests.cs @@ -0,0 +1,83 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua.PubSub.Configuration; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for UaPubSubApplication class")] + public class UaPubSubApplicationTests + { + private const string ConfigurationFileName = "PublisherConfiguration.xml"; + private PubSubConfigurationDataType m_pubSubConfiguration; + + [OneTimeSetUp()] + public void MyTestInitialize() + { + m_pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(ConfigurationFileName); + } + + [Test(Description = "Validate Create call with null path")] + public void ValidateUaPubSubApplicationCreateNullFilePath() + { + Assert.Throws(() => UaPubSubApplication.Create((string)null), "Calling Create with null parameter shall throw error"); + } + + [Test(Description = "Validate Create call with null PubSubConfigurationDataType")] + public void ValidateUaPubSubApplicationCreateNullPubSubConfigurationDataType() + { + Assert.DoesNotThrow(() => UaPubSubApplication.Create((PubSubConfigurationDataType)null), "Calling Create with null parameter shall not throw error"); + } + + [Test(Description = "Validate Create call")] + public void ValidateUaPubSubApplicationCreate() + { + // Arrange + UaPubSubApplication uaPubSubApplication = UaPubSubApplication.Create(m_pubSubConfiguration); + + // Assert + Assert.IsTrue(uaPubSubApplication.PubSubConnections != null, "uaPubSubApplication.PubSubConnections collection is null"); + Assert.AreEqual(2, uaPubSubApplication.PubSubConnections.Count, "uaPubSubApplication.PubSubConnections count"); + UaPubSubConnection connection = uaPubSubApplication.PubSubConnections[0] as UaPubSubConnection; + Assert.IsTrue(connection.Publishers != null, "connection.Publishers is null"); + Assert.IsTrue(connection.Publishers.Count == 1, "connection.Publishers count is not 2"); + int index = 0; + foreach(IUaPublisher publisher in connection.Publishers) + { + Assert.IsTrue(publisher!= null, "connection.Publishers[{0}] is null", index); + Assert.IsTrue(publisher.PubSubConnection == connection, "connection.Publishers[{0}].PubSubConnection is not set correctly", index); + Assert.IsTrue(publisher.WriterGroupConfiguration.WriterGroupId == m_pubSubConfiguration.Connections[0].WriterGroups[index].WriterGroupId, "connection.Publishers[{0}].WriterGroupConfiguration is not set correctly", index); + index++; + } + } + + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPubSubDataStoreTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPubSubDataStoreTests.cs new file mode 100644 index 00000000..1b28d41b --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPubSubDataStoreTests.cs @@ -0,0 +1,116 @@ +/* ====/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for UaPubSubDataStore class")] + public class UaPubSubDataStoreTests + { + #region WritePublishedDataItem + [Test(Description = "Validate WritePublishedDataItem call with different values")] + + public void ValidateWritePublishedDataItem( + [Values(true, (byte)1, (ushort)2, (short)3, (uint)4, (int)5, (ulong)6, (long)7, + (double)8, (float)9, "10")] object value) + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + NodeId nodeId = new NodeId("ns=1;i=1"); + + //Act + dataStore.WritePublishedDataItem(nodeId, Attributes.Value, new DataValue(new Variant(value))); + DataValue readDataValue = dataStore.ReadPublishedDataItem(nodeId, Attributes.Value); + + //Assert + Assert.IsNotNull(readDataValue, "Returned DataValue for written nodeId and attribute is null" ); + Assert.AreEqual(readDataValue.Value, value, "Read after write returned different value"); + } + + [Test(Description = "Validate WritePublishedDataItem call with null NodeId")] + public void ValidateWritePublishedDataItemNullNodeId() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + + //Assert + Assert.Throws(typeof(ArgumentException), () => dataStore.WritePublishedDataItem(null)); + } + + [Test(Description = "Validate WritePublishedDataItem call with invalid Attribute")] + public void ValidateWritePublishedDataItemInvalidAttribute() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + + //Assert + Assert.Throws(typeof(ArgumentException), + () => dataStore.WritePublishedDataItem(new NodeId("ns=0;i=2253"), (uint)Attributes.AccessLevelEx + 1)); + } + #endregion + + #region ReadPublishedDataItem + [Test(Description = "Validate ReadPublishedDataItem call for non existing node id")] + public void ValidateReadPublishedDataItem() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + NodeId nodeId = new NodeId("ns=1;i=1"); + + //Act + DataValue readDataValue = dataStore.ReadPublishedDataItem(nodeId, Attributes.Value); + + //Assert + Assert.IsNull(readDataValue, "Returned DataValue for written nodeId and attribute is NOT null"); + } + + [Test(Description = "Validate ReadPublishedDataItem call with null NodeId")] + public void ValidateReadPublishedDataItemNullNodeId() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + + //Assert + Assert.Throws(typeof(ArgumentException), () => dataStore.ReadPublishedDataItem(null)); + } + + [Test(Description = "Validate ReadPublishedDataItem call with invalid Attribute")] + public void ValidateReadPublishedDataIteminvalidAttribute() + { + //Arrange + UaPubSubDataStore dataStore = new UaPubSubDataStore(); + //Assert + Assert.Throws(typeof(ArgumentException), + () => dataStore.ReadPublishedDataItem(new NodeId("ns=0;i=2253"), (uint)Attributes.AccessLevelEx + 1)); + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPublisherTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPublisherTests.cs new file mode 100644 index 00000000..2be8ee5f --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UaPublisherTests.cs @@ -0,0 +1,85 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Threading; +using Moq; +using NUnit.Framework; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description ="Tests for UAPublisher class")] + public class UaPublisherTests + { + static IList PublishTimes = new List(); + + [Test(Description ="Test that PublishMessage method is called after a UAPublisher is started.")] + [Combinatorial] + public void ValidateUaPublisherPublishIntevalDeviation( + [Values(100, 1000, 2000)] double publishingInterval, + [Values(20, 30)]double maxDeviation, + [Values(10)] int publishTimeInSecods) + { + //Arrange + PublishTimes.Clear(); + var mockConnection = new Mock(); + mockConnection.Setup(x => x.CanPublish(It.IsAny())).Returns(true); + mockConnection.Setup(x => x.CreateNetworkMessage(It.IsAny())) + .Callback(()=>PublishTimes.Add(DateTime.Now)); + + WriterGroupDataType writerGroupDataType = new WriterGroupDataType(); + writerGroupDataType.PublishingInterval = publishingInterval; + + //Act + UaPublisher publisher = new UaPublisher(mockConnection.Object, writerGroupDataType); + publisher.Start(); + + //wait so many seconds + Thread.Sleep(publishTimeInSecods*1000); + publisher.Stop(); + List publishTimesIntervals = new List(); + int faultIndex = -1; + double faultDeviation = 0; + + //Assert + for (int i = 1; i < PublishTimes.Count; i++) + { + double interval = PublishTimes[i].Subtract(PublishTimes[i - 1]).TotalMilliseconds; + double deviation = Math.Abs(publishingInterval - interval); + if (deviation >= maxDeviation && deviation > faultDeviation) + { + faultIndex = i; + faultDeviation = deviation; + } + } + Assert.IsTrue(faultIndex < 0, "publishingInterval={0}, maxDeviation={1}, publishTimeInSecods={2}, deviation[{3}] = {4} has maximum deviation", publishingInterval, maxDeviation, publishTimeInSecods, faultIndex, faultDeviation); + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpDataSetMessageTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpDataSetMessageTests.cs new file mode 100644 index 00000000..087eda14 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpDataSetMessageTests.cs @@ -0,0 +1,604 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.PublishedData; +using Opc.Ua.PubSub.Uadp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for Encoding/Decoding of UadpDataSeMessage objects")] + public class UadpDataSetMessageTests + { + private const string PublisherConfigurationFileName = "PublisherConfiguration.xml"; + private const string SubscriberConfigurationFileName = "SubscriberConfiguration.xml"; + + private PubSubConfigurationDataType m_publisherConfiguration; + private UaPubSubApplication m_publisherApplication; + private WriterGroupDataType m_firstWriterGroup; + private IUaPubSubConnection m_firstPublisherConnection; + + private PubSubConfigurationDataType m_subscriberConfiguration; + private UaPubSubApplication m_subscriberApplication; + private ReaderGroupDataType m_firstReaderGroup; + private DataSetReaderDataType m_firstDataSetReaderType; + + private const ushort NamespaceIndexSimple = 2; + + /// + /// just for test match the DataSet1->DataSetWriterId + /// + private const ushort TestDataSetWriterId = 1; + private const ushort MessageContentMask = 0x3f; + + private DataSetFieldContentMask fieldContentMaskVariant = DataSetFieldContentMask.None; + private DataSetFieldContentMask fieldContentMaskDataValue = DataSetFieldContentMask.StatusCode | DataSetFieldContentMask.SourceTimestamp + | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds + | DataSetFieldContentMask.ServerPicoSeconds; + private DataSetFieldContentMask fieldContentMaskRawData = DataSetFieldContentMask.RawData; + + [OneTimeSetUp()] + public void MyTestInitialize() + { + + // Create a publisher application + m_publisherApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + Assert.IsNotNull(m_publisherApplication, "m_publisherApplication should not be null"); + + // Get the publisher configuration + m_publisherConfiguration = m_publisherApplication.UaPubSubConfigurator.PubSubConfiguration; + Assert.IsNotNull(m_publisherConfiguration, "m_publisherConfiguration should not be null"); + + // Get first connection + Assert.IsNotNull(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be null"); + Assert.IsNotEmpty(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be empty"); + m_firstPublisherConnection = m_publisherApplication.PubSubConnections[0]; + Assert.IsNotNull(m_firstPublisherConnection, "m_firstPublisherConnection should not be null"); + + // Read the first writer group + Assert.IsNotEmpty(m_publisherConfiguration.Connections[0].WriterGroups, "pubSubConfigConnection.WriterGroups should not be empty"); + m_firstWriterGroup = m_publisherConfiguration.Connections[0].WriterGroups[0]; + Assert.IsNotNull(m_firstWriterGroup, "m_firstWriterGroup should not be null"); + + Assert.IsNotNull(m_publisherConfiguration.PublishedDataSets, "m_publisherConfiguration.PublishedDataSets should not be null"); + Assert.IsNotEmpty(m_publisherConfiguration.PublishedDataSets, "m_publisherConfiguration.PublishedDataSets should not be empty"); + + // Create a subscriber application + m_subscriberApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + Assert.IsNotNull(m_subscriberApplication, "m_subscriberApplication should not be null"); + + // Get the subscriber configuration + m_subscriberConfiguration = m_subscriberApplication.UaPubSubConfigurator.PubSubConfiguration; + Assert.IsNotNull(m_subscriberConfiguration, "m_subscriberConfiguration should not be null"); + + // Read the first reader group + m_firstReaderGroup = m_subscriberConfiguration.Connections[0].ReaderGroups[0]; + Assert.IsNotNull(m_firstWriterGroup, "m_firstReaderGroup should not be null"); + + m_firstDataSetReaderType = GetFirstDataSetReader(); + } + + [Test(Description = "Validate dataset message mask with Variant data type;" + + "Change the Uadp dataset message mask into the [0,63] range that covers all options(properties)")] + public void ValidateDataSetMessageMaskWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + // change network message mask + for (uint dataSetMessageContentMask = 0; dataSetMessageContentMask < MessageContentMask; dataSetMessageContentMask++) + { + uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageContentMask); + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + } + + [Test(Description = "Validate dataset message mask with DataValue data type;" + + "Change the Uadp dataset message mask into the [0,63] range that covers all options(properties)")] + public void ValidateDataSetMessageMaskWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + // change network message mask + for (uint dataSetMessageContentMask = 0; dataSetMessageContentMask < MessageContentMask; dataSetMessageContentMask++) + { + uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageContentMask); + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + } + + [Test(Description = "Validate dataset message mask with RawData data type;" + + "Change the Uadp dataset message mask into the [0,63] range that covers all options(properties)")] + public void ValidateDataSetMessageMaskWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + // change network message mask + for (uint dataSetMessageContentMask = 0; dataSetMessageContentMask < MessageContentMask; dataSetMessageContentMask++) + { + uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageContentMask); + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + } + + [Test(Description = "Validate TimeStamp with Variant data type")] + public void ValidateDataSetTimeStampWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Timestamp); + uadpDataSetMessage.TimeStamp = DateTime.UtcNow; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate TimeStamp with DataValue data type")] + public void ValidateDataSetTimeStampWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Timestamp); + uadpDataSetMessage.TimeStamp = DateTime.UtcNow; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate TimeStamp with RawData data type")] + public void ValidateDataSetTimeStampWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Timestamp); + uadpDataSetMessage.TimeStamp = DateTime.UtcNow; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate PicoSeconds with Variant data type")] + public void ValidatePicoSecondsWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.PicoSeconds); + uadpDataSetMessage.PicoSeconds = 10; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate PicoSeconds with DataValue data type")] + public void ValidatePicoSecondsWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.PicoSeconds); + uadpDataSetMessage.PicoSeconds = 10; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate PicoSeconds with RawData data type")] + public void ValidatePicoSecondsWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.PicoSeconds); + uadpDataSetMessage.PicoSeconds = 10; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate Status with Variant data type")] + public void ValidateStatusWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Status); + uadpDataSetMessage.Status = 0x0384; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate Status with RawData data type")] + public void ValidateStatusWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Status); + uadpDataSetMessage.Status = 0x0384; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate Status with DataValue data type")] + public void ValidateStatusWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Status); + uadpDataSetMessage.Status = 0x0384; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate MajorVersion with Variant data type")] + public void ValidateMajorVersionWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MajorVersion); + uadpDataSetMessage.ConfigurationMajorVersion = 2; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate MajorVersion with DataValue data type")] + public void ValidateMajorVersionWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MajorVersion); + uadpDataSetMessage.ConfigurationMajorVersion = 2; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate MajorVersion with RawData data type")] + public void ValidateMajorVersionWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MajorVersion); + uadpDataSetMessage.ConfigurationMajorVersion = 2; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + + [Test(Description = "Validate MinorVersion with Variant data type")] + public void ValidateMinorVersionWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MinorVersion); + uadpDataSetMessage.ConfigurationMinorVersion = 101; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate MinorVersion with DataValue data type")] + public void ValidateMinorVersionWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MinorVersion); + uadpDataSetMessage.ConfigurationMinorVersion = 101; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate MinorVersion with RawData data type")] + public void ValidateMinorVersionWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MinorVersion); + uadpDataSetMessage.ConfigurationMinorVersion = 101; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate SequenceNumber with Variant data type")] + public void ValidateSequenceNumberWithVariantType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskVariant); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.SequenceNumber); + uadpDataSetMessage.SequenceNumber = 1000; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate SequenceNumber with DataValue data type")] + public void ValidateSequenceNumberWithDataValueType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.SequenceNumber); + uadpDataSetMessage.SequenceNumber = 1000; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + [Test(Description = "Validate SequenceNumber with RawData data type")] + public void ValidateSequenceNumberWithRawDataType() + { + // Arrange + UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); + + // Act + uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.SequenceNumber); + uadpDataSetMessage.SequenceNumber = 1000; + + // Assert + CompareEncodeDecode(uadpDataSetMessage); + } + + #region Private Methods + + /// + /// Load Variant data type into datasets + /// + private void LoadData() + { + Assert.IsNotNull(m_publisherApplication, "m_publisherApplication should not be null"); + + #region DataSet Simple + // DataSet 'Simple' fill with data + DataValue booleanValue = new DataValue(new Variant(true), StatusCodes.Good); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("BoolToggle", NamespaceIndexSimple), Attributes.Value, booleanValue); + DataValue scalarInt32XValue = new DataValue(new Variant(100), StatusCodes.Good); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Int32", NamespaceIndexSimple), Attributes.Value, scalarInt32XValue); + DataValue scalarInt32YValue = new DataValue(new Variant(50), StatusCodes.Good); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Int32Fast", NamespaceIndexSimple), Attributes.Value, scalarInt32YValue); + DataValue dateTimeValue = new DataValue(new Variant(DateTime.UtcNow), StatusCodes.Good); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("DateTime", NamespaceIndexSimple), Attributes.Value, dateTimeValue); + #endregion + } + + /// + /// Get first DataSetReaders from configuration + /// + /// + private DataSetReaderDataType GetFirstDataSetReader() + { + // Read the first configured ReaderGroup + Assert.IsNotNull(m_firstReaderGroup, "m_firstReaderGroup should not be null"); + Assert.IsNotEmpty(m_firstReaderGroup.DataSetReaders, "m_firstReaderGroup.DataSetReaders should not be empty"); + Assert.IsNotNull(m_firstReaderGroup.DataSetReaders[0], "m_firstReaderGroup.DataSetReaders[0] should not be null"); + + return m_firstReaderGroup.DataSetReaders[0]; + } + + /// + /// + /// + /// a DataSetFieldContentMask specifying what type of encoding is chosen for field values + /// If none of the flags are set, the fields are represented as Variant. + /// If the RawData flag is set, the fields are represented as RawData and all other bits are ignored. + /// If one of the bits StatusCode, SourceTimestamp, ServerTimestamp, SourcePicoSeconds, ServerPicoSeconds is set, + /// the fields are represented as DataValue. + /// + /// + private UadpDataSetMessage GetFirstDataSetMessage(DataSetFieldContentMask fieldContentMask) + { + LoadData(); + + // set the configurable field content mask to allow only Variant data type + foreach (DataSetWriterDataType dataSetWriter in m_firstWriterGroup.DataSetWriters) + { + // 00 The DataSet fields are encoded as Variant data type + // 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. + dataSetWriter.DataSetFieldContentMask = (uint)fieldContentMask; + } + + UadpNetworkMessage uaNetworkMessage = (UadpNetworkMessage)m_firstPublisherConnection.CreateNetworkMessage(m_firstWriterGroup); + Assert.IsNotNull(uaNetworkMessage, "networkMessageEncode should not be null"); + + // read first dataset message + UadpDataSetMessage[] uadpDataSetMessages = uaNetworkMessage.UadpDataSetMessages.ToArray(); + Assert.IsNotEmpty(uadpDataSetMessages, "uadpDataSetMessages collection should not be empty"); + + UadpDataSetMessage uadpDataSetMessage = uadpDataSetMessages[0]; + Assert.IsNotNull(uadpDataSetMessage, "uadpDataSetMessage should not be null"); + + return uadpDataSetMessage; + } + + /// + /// Compare encoded/decoded dataset messages + /// + /// + /// + private void CompareEncodeDecode(UadpDataSetMessage uadpDataSetMessage) + { + ServiceMessageContext messageContextEncode = new ServiceMessageContext(); + BinaryEncoder encoder = new BinaryEncoder(messageContextEncode); + uadpDataSetMessage.Encode(encoder); + byte[] bytes = ReadBytes(encoder.BaseStream); + encoder.Dispose(); + + UadpDataSetMessage uaDataSetMessageDecoded = new UadpDataSetMessage(); + BinaryDecoder decoder = new BinaryDecoder(bytes, messageContextEncode); + + // workaround + uaDataSetMessageDecoded.DataSetWriterId = TestDataSetWriterId; + DataSet dataSetReader = uaDataSetMessageDecoded.DecodePossibleDataSetReader(decoder, m_firstDataSetReaderType); + decoder.Dispose(); + + // compare uadpDataSetMessage with uaDataSetMessageDecoded + CompareUadpDataSetMessages(uadpDataSetMessage, uaDataSetMessageDecoded, dataSetReader); + } + + + /// + /// Compare dataset messages options + /// + /// + /// + /// + private void CompareUadpDataSetMessages(UadpDataSetMessage uadpDataSetMessageEncode, UadpDataSetMessage uadpDataSetMessageDecoded, DataSet dataSetReader) + { + UadpDataSetMessageContentMask dataSetMessageContentMask = uadpDataSetMessageEncode.MessageContentMask; + + Assert.AreEqual(uadpDataSetMessageEncode.DataSetFlags1, uadpDataSetMessageDecoded.DataSetFlags1, + "DataSetMessages DataSetFlags1 do not match:"); + Assert.AreEqual(uadpDataSetMessageEncode.DataSetFlags2, uadpDataSetMessageDecoded.DataSetFlags2, + "DataSetMessages DataSetFlags2 do not match:"); + + if ((dataSetMessageContentMask & UadpDataSetMessageContentMask.Timestamp) == + UadpDataSetMessageContentMask.Timestamp) + { + Assert.AreEqual(uadpDataSetMessageEncode.TimeStamp, uadpDataSetMessageDecoded.TimeStamp, + "DataSetMessages TimeStamp do not match:"); + } + + if ((dataSetMessageContentMask & UadpDataSetMessageContentMask.PicoSeconds) == + UadpDataSetMessageContentMask.PicoSeconds) + { + Assert.AreEqual(uadpDataSetMessageEncode.PicoSeconds, uadpDataSetMessageDecoded.PicoSeconds, + "DataSetMessages PicoSeconds do not match:"); + } + + if ((dataSetMessageContentMask & UadpDataSetMessageContentMask.Status) == + UadpDataSetMessageContentMask.Status) + { + Assert.AreEqual(uadpDataSetMessageEncode.Status, uadpDataSetMessageDecoded.Status, + "DataSetMessages Status do not match:"); + } + + if ((dataSetMessageContentMask & UadpDataSetMessageContentMask.MajorVersion) == + UadpDataSetMessageContentMask.MajorVersion) + { + Assert.AreEqual(uadpDataSetMessageEncode.ConfigurationMajorVersion, uadpDataSetMessageDecoded.ConfigurationMajorVersion, + "DataSetMessages ConfigurationMajorVersion do not match:"); + } + + if ((dataSetMessageContentMask & UadpDataSetMessageContentMask.MinorVersion) == + UadpDataSetMessageContentMask.MinorVersion) + { + Assert.AreEqual(uadpDataSetMessageEncode.ConfigurationMinorVersion, uadpDataSetMessageDecoded.ConfigurationMinorVersion, + "DataSetMessages ConfigurationMajorVersion do not match:"); + } + + // check also the payload data + Assert.AreEqual(uadpDataSetMessageEncode.DataSet.Fields.Length, dataSetReader.Fields.Length, + "DataSetMessages DataSet fields size do not match:"); + + for (int index = 0; index < uadpDataSetMessageEncode.DataSet.Fields.Length; index++) + { + Field dataSetFieldEncoded = uadpDataSetMessageEncode.DataSet.Fields[index]; + Field dataSetFieldDecoded = dataSetReader.Fields[index]; + + Assert.IsNotNull(dataSetFieldEncoded.Value, "DataSetFieldEncoded.Value is null"); + Assert.IsNotNull(dataSetFieldDecoded.Value, "DataSetFieldDecoded.Value is null"); + object encodedValue = dataSetFieldEncoded.Value.Value; + object decodedValue = dataSetFieldDecoded.Value.Value; + + Assert.AreEqual(encodedValue, decodedValue, + "DataSetMessages Field.Value does not match value field at position: {0} {1}|{2}", index, encodedValue, decodedValue); + } + } + + /// + /// Read All bytes from a given stream + /// + /// + /// + private byte[] ReadBytes(Stream stream) + { + stream.Position = 0; + using (MemoryStream ms = new MemoryStream()) + { + stream.CopyTo(ms); + return ms.ToArray(); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpNetworkMessageTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpNetworkMessageTests.cs new file mode 100644 index 00000000..d2031780 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpNetworkMessageTests.cs @@ -0,0 +1,1227 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Uadp; +using System; +using System.Collections.Generic; +using System.Linq; +using Opc.Ua.PubSub.PublishedData; +using System.IO; +using DataSet = Opc.Ua.PubSub.PublishedData.DataSet; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for Encoding/Decoding of UadpNetworkMessage objects")] + public class UadpNetworkMessageTests + { + private const string PublisherConfigurationFileName = "PublisherConfiguration.xml"; + private const string SubscriberConfigurationFileName = "SubscriberConfiguration.xml"; + + private PubSubConfigurationDataType m_publisherConfiguration; + private UaPubSubApplication m_publisherApplication; + private WriterGroupDataType m_firstWriterGroup; + private IUaPubSubConnection m_firstPublisherConnection; + + private PubSubConfigurationDataType m_subscriberConfiguration; + private UaPubSubApplication m_subscriberApplication; + private ReaderGroupDataType m_firstReaderGroup; + private List m_firstDataSetReadersType; + + public const ushort NamespaceIndexSimple = 2; + public const ushort NamespaceIndexAllTypes = 3; + public const ushort NamespaceIndexMassTest = 4; + + private const uint NetworkMessageContentMask = 0x3ff; + private DataSetFieldContentMask fieldContentMaskVariant = DataSetFieldContentMask.None; + private DataSetFieldContentMask fieldContentMaskDataValue = DataSetFieldContentMask.StatusCode | DataSetFieldContentMask.SourceTimestamp + | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds + | DataSetFieldContentMask.ServerPicoSeconds; + private DataSetFieldContentMask fieldContentMaskRawData = DataSetFieldContentMask.RawData; + + [OneTimeSetUp()] + public void MyTestInitialize() + { + // Create a publisher application + m_publisherApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + Assert.IsNotNull(m_publisherApplication, "m_publisherApplication shall not be null"); + + // Get the publisher configuration + m_publisherConfiguration = m_publisherApplication.UaPubSubConfigurator.PubSubConfiguration; + Assert.IsNotNull(m_publisherConfiguration, "m_publisherConfiguration should not be null"); + + //Get first connection + Assert.IsNotNull(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be null"); + Assert.IsNotEmpty(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be empty"); + m_firstPublisherConnection = m_publisherApplication.PubSubConnections[0]; + Assert.IsNotNull(m_firstPublisherConnection, "m_firstPublisherConnection should not be null"); + + // Read the first writer group + Assert.IsNotEmpty(m_publisherConfiguration.Connections[0].WriterGroups, "pubSubConfigConnection.WriterGroups should not be empty"); + m_firstWriterGroup = m_publisherConfiguration.Connections[0].WriterGroups[0]; + Assert.IsNotNull(m_firstWriterGroup, "m_firstWriterGroup should not be null"); + + // Create a subscriber application + m_subscriberApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); + Assert.IsNotNull(m_subscriberApplication, "m_subscriberApplication should not be null"); + + // Get the subscriber configuration + m_subscriberConfiguration = m_subscriberApplication.UaPubSubConfigurator.PubSubConfiguration; + Assert.IsNotNull(m_subscriberConfiguration, "m_subscriberConfiguration should not be null"); + + // Get first reader group + m_firstReaderGroup = m_subscriberConfiguration.Connections[0].ReaderGroups[0]; + Assert.IsNotNull(m_firstWriterGroup, "m_firstReaderGroup should not be null"); + + m_firstDataSetReadersType = GetFirstDataSetReaders(); + } + + [Test(Description = "Validate PublisherId as byte with Variant data type")] + public void ValidatePublisherIdByteWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (byte)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as byte with DataValue data type")] + public void ValidatePublisherIdByteWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (byte)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as byte with RawData data type")] + public void ValidatePublisherIdByteWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (byte)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt16 with Variant data type")] + public void ValidatePublisherIdUInt16WithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + + // Act + // Check PublisherId as UInt16 type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt16 with DataValue data type")] + public void ValidatePublisherIdUInt16WithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt16 with RawData data type")] + public void ValidatePublisherIdUInt16WithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt32 with Variant data type")] + public void ValidatePublisherIdUInt32WithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.PublisherId = (UInt32)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt32 with DataValue data type")] + public void ValidatePublisherIdUInt32WithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt32)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt32 with RawData data type")] + public void ValidatePublisherIdUInt32WithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt32)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt64 with Variant data type")] + public void ValidatePublisherIdUInt64WithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.PublisherId = (UInt64)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt64 with DataValue data type")] + public void ValidatePublisherIdUInt64WithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt64)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as UInt64 with RawData data type")] + public void ValidatePublisherIdUInt64WithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt64)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as string with Variant data type")] + public void ValidatePublisherIdStringWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + // Check PublisherId as string type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = "10"; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as string with DataValue data type")] + public void ValidatePublisherIdStringWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = "10"; + //uaNetworkMessage.PublisherId = "Test$!#$%^&*87"; + //uaNetworkMessage.PublisherId = "Begrüßung"; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PublisherId as string with RawData data type")] + public void ValidatePublisherIdStringWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = "10"; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Invalidate PublisherId as float with Variant data type")] + public void InValidatePublisherIdFloatWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + Assert.IsNotNull(uaNetworkMessage, "networkMessageEncode should not be null"); + + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.PublisherId = (float)10; + + // Assert + InvalidCompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Invalidate PublisherId as float with DataValue data type")] + public void InValidatePublisherIdFloatWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (float)10; + + // Assert + InvalidCompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Invalidate PublisherId as float with RawData data type")] + public void InValidatePublisherIdFloatWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (float)10; + + // Assert + InvalidCompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Invalidate PublisherId as double with Variant data type")] + public void InValidatePublisherIdDoubleWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.PublisherId = (double)10; + + // Assert + InvalidCompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Invalidate PublisherId as double with DataValue data type")] + public void InValidatePublisherIdDoubleWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (double)10; + + // Assert + InvalidCompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Invalidate PublisherId as double with RawData data type")] + public void InValidatePublisherIdDoubleWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // Check PublisherId as byte type + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (double)10; + + // Assert + InvalidCompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate GroupHeader with Variant data type")] + public void ValidateGroupHeaderWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + // GroupFlags are changed internally by the group header options (WriterGroupId, GroupVersion, NetworkMessageNumber, SequenceNumber) + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.GroupHeader | + UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate GroupHeader with DataValue data type")] + public void ValidateGroupHeaderWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + // GroupFlags are changed internally by the group header options (WriterGroupId, GroupVersion, NetworkMessageNumber, SequenceNumber) + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.GroupHeader | + UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate GroupHeader with RawData data type")] + public void ValidateGroupHeaderWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + // GroupFlags are changed internally by the group header options (WriterGroupId, GroupVersion, NetworkMessageNumber, SequenceNumber) + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.GroupHeader | + UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate WriterGroupId with Variant data type")] + public void ValidateWriterGroupIdWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.WriterGroupId | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.WriterGroupId = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate WriterGroupId with DataValue data type")] + public void ValidateWriterGroupIdWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.WriterGroupId | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.WriterGroupId = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate WriterGroupId with RawData data type")] + public void ValidateWriterGroupIdWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.WriterGroupId | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.WriterGroupId = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate GroupVersion with Variant data type")] + public void ValidateGroupVersionWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.GroupVersion | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.GroupVersion = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate GroupVersion with DataValue data type")] + public void ValidateGroupVersionWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.GroupVersion | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.GroupVersion = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate GroupVersion with RawData data type")] + public void ValidateGroupVersionWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.GroupVersion | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.GroupVersion = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate NetworkMessageNumber with Variant data type")] + public void ValidateNetworkMessageNumberWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.NetworkMessageNumber | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.NetworkMessageNumber = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate NetworkMessageNumber with DataValue data type")] + public void ValidateNetworkMessageNumberWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.NetworkMessageNumber | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.NetworkMessageNumber = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate NetworkMessageNumber with RawData data type")] + public void ValidateNetworkMessageNumberWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.NetworkMessageNumber | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.NetworkMessageNumber = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate SequenceNumber with Variant data type")] + public void ValidateSequenceNumberWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.SequenceNumber | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.SequenceNumber = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate SequenceNumber with DataValue data type")] + public void ValidateSequenceNumberWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.SequenceNumber | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.SequenceNumber = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate SequenceNumber with RawData data type")] + public void ValidateSequenceNumberWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.SequenceNumber | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.SequenceNumber = 1; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PayloadHeader with Variant data type")] + public void ValidatePayloadHeaderWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PayloadHeader | + UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PayloadHeader with DataValue data type")] + public void ValidatePayloadHeaderWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PayloadHeader | + UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PayloadHeader with RawData data type")] + public void ValidatePayloadHeaderWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(DataSetFieldContentMask.RawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PayloadHeader | + UadpNetworkMessageContentMask.PublisherId); + uaNetworkMessage.PublisherId = (UInt16)10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate Timestamp with Variant data type")] + public void ValidateTimestampWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.Timestamp | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.Timestamp = DateTime.UtcNow; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate Timestamp with DataValue data type")] + public void ValidateTimestampWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.Timestamp | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.Timestamp = DateTime.UtcNow; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate Timestamp with RawData data type")] + public void ValidateTimestampWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.Timestamp | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.Timestamp = DateTime.UtcNow; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PicoSeconds with Variant data type")] + public void ValidatePicoSecondsWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PicoSeconds | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.PicoSeconds = 10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PicoSeconds with DataValue data type")] + public void ValidatePicoSecondsWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PicoSeconds | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.PicoSeconds = 10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate PicoSeconds with RawData data type")] + public void ValidatePicoSecondsWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.PicoSeconds | + UadpNetworkMessageContentMask.PublisherId | + UadpNetworkMessageContentMask.PayloadHeader); + uaNetworkMessage.PublisherId = (UInt16)10; + uaNetworkMessage.PicoSeconds = 10; + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate DataSetClassId with Variant data type")] + public void ValidateDataSetClassIdWithVariantType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskVariant); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.DataSetClassId); + uaNetworkMessage.DataSetClassId = Guid.NewGuid(); + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate DataSetClassId with DataValue data type")] + public void ValidateDataSetClassIdWithDataValueType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskDataValue); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.DataSetClassId); + uaNetworkMessage.DataSetClassId = Guid.NewGuid(); + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + [Test(Description = "Validate DataSetClassId with RawData data type")] + public void ValidateDataSetClassIdWithRawDataType() + { + // Arrange + UadpNetworkMessage uaNetworkMessage = CreateNetworkMessage(fieldContentMaskRawData); + + // Act + uaNetworkMessage.SetNetworkMessageContentMask(UadpNetworkMessageContentMask.DataSetClassId); + uaNetworkMessage.DataSetClassId = Guid.NewGuid(); + + // Assert + CompareEncodeDecode(uaNetworkMessage); + } + + #region Private Methods + + /// + /// Load RawData data type into datasets + /// + private void LoadData() + { + Assert.IsNotNull(m_publisherApplication, "m_publisherApplication should not be null"); + + #region DataSet Simple + // DataSet 'Simple' fill with data + DataValue booleanValue = new DataValue(new Variant(true)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("BoolToggle", NamespaceIndexSimple), Attributes.Value, booleanValue); + DataValue scalarInt32XValue = new DataValue(new Variant(100)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Int32", NamespaceIndexSimple), Attributes.Value, scalarInt32XValue); + DataValue scalarInt32YValue = new DataValue(new Variant(50)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Int32Fast", NamespaceIndexSimple), Attributes.Value, scalarInt32YValue); + DataValue dateTimeValue = new DataValue(new Variant(DateTime.UtcNow)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("DateTime", NamespaceIndexSimple), Attributes.Value, dateTimeValue); + #endregion + + #region DataSet AllTypes + // DataSet 'AllTypes' fill with data + DataValue allTypesBooleanValue = new DataValue(new Variant(false)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("BoolToggle", NamespaceIndexAllTypes), Attributes.Value, allTypesBooleanValue); + DataValue byteValue = new DataValue(new Variant((byte)10)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Byte", NamespaceIndexAllTypes), Attributes.Value, byteValue); + DataValue int16Value = new DataValue(new Variant((short)100)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Int16", NamespaceIndexAllTypes), Attributes.Value, int16Value); + DataValue int32Value = new DataValue(new Variant((int)1000)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Int32", NamespaceIndexAllTypes), Attributes.Value, int32Value); + DataValue sByteValue = new DataValue(new Variant((sbyte)11)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("SByte", NamespaceIndexAllTypes), Attributes.Value, sByteValue); + DataValue uInt16Value = new DataValue(new Variant((ushort)110)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("UInt16", NamespaceIndexAllTypes), Attributes.Value, uInt16Value); + DataValue uInt32Value = new DataValue(new Variant((uint)1100)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("UInt32", NamespaceIndexAllTypes), Attributes.Value, uInt32Value); + DataValue floatValue = new DataValue(new Variant((float)1100.5)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Float", NamespaceIndexAllTypes), Attributes.Value, floatValue); + DataValue doubleValue = new DataValue(new Variant((double)1100)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId("Double", NamespaceIndexAllTypes), Attributes.Value, doubleValue); + #endregion + + #region DataSet MassTest + + // DataSet 'MassTest' fill with data + for (uint index = 0; index < 100; index++) + { + DataValue value = new DataValue(new Variant(index)); + m_publisherApplication.DataStore.WritePublishedDataItem(new NodeId(string.Format("Mass_{0}", index), NamespaceIndexMassTest), + Attributes.Value, value); + } + #endregion + } + + /// + /// Get first DataSetReaders from configuration + /// + /// + private List GetFirstDataSetReaders() + { + // Read the first configured ReaderGroup + Assert.IsNotNull(m_firstReaderGroup, "m_firstReaderGroup should not be null"); + Assert.IsNotEmpty(m_firstReaderGroup.DataSetReaders, "m_firstReaderGroup.DataSetReaders should not be empty"); + + return m_firstReaderGroup.DataSetReaders; + } + + /// + /// Creates a network message (based on a configuration) + /// + /// + /// + private UadpNetworkMessage CreateNetworkMessage(DataSetFieldContentMask dataSetFieldContentMask) + { + LoadData(); + + // set the configurable field content mask to allow only Variant data type + foreach (DataSetWriterDataType dataSetWriter in m_firstWriterGroup.DataSetWriters) + { + // 00 The DataSet fields are encoded as Variant data type + // 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. + dataSetWriter.DataSetFieldContentMask = (uint)dataSetFieldContentMask; + } + + UadpNetworkMessage uaNetworkMessage = (UadpNetworkMessage)m_firstPublisherConnection.CreateNetworkMessage(m_firstWriterGroup); + Assert.IsNotNull(uaNetworkMessage, "networkMessageEncode should not be null"); + + return uaNetworkMessage; + } + + /// + /// Compare encoded/decoded network messages + /// + /// + /// + private void CompareEncodeDecode(UadpNetworkMessage uadpNetworkMessage) + { + ServiceMessageContext messageContextEncode = new ServiceMessageContext(); + BinaryEncoder encoder = new BinaryEncoder(messageContextEncode); + uadpNetworkMessage.Encode(encoder); + byte[] bytes = ReadBytes(encoder.BaseStream); + encoder.Dispose(); + + UadpNetworkMessage uaNetworkMessageDecoded = new UadpNetworkMessage(); + BinaryDecoder decoder = new BinaryDecoder(bytes, messageContextEncode); + List subscribedDataSets = uaNetworkMessageDecoded.DecodeSubscribedDataSets(decoder, m_firstDataSetReadersType); + decoder.Dispose(); + + // compare uaNetworkMessage with uaNetworkMessageDecoded + Compare(uadpNetworkMessage, uaNetworkMessageDecoded, subscribedDataSets); + } + + /// + /// Invalid compare encoded/decoded network messages + /// + /// + /// + private void InvalidCompareEncodeDecode(UadpNetworkMessage uadpNetworkMessage) + { + ServiceMessageContext messageContextEncode = new ServiceMessageContext(); + BinaryEncoder encoder = new BinaryEncoder(messageContextEncode); + uadpNetworkMessage.Encode(encoder); + byte[] bytes = ReadBytes(encoder.BaseStream); + encoder.Dispose(); + + UadpNetworkMessage uaNetworkMessageDecoded = new UadpNetworkMessage(); + BinaryDecoder decoder = new BinaryDecoder(bytes, messageContextEncode); + uaNetworkMessageDecoded.DecodeSubscribedDataSets(decoder, m_firstDataSetReadersType); + decoder.Dispose(); + + // compare uaNetworkMessage with uaNetworkMessageDecoded + InvalidCompare(uadpNetworkMessage, uaNetworkMessageDecoded); + } + + + /// + /// Invalid compare network messages options (special case for PublisherId + /// + /// + /// + private void InvalidCompare(UadpNetworkMessage uadpNetworkMessageEncode, UadpNetworkMessage uadpNetworkMessageDecoded) + { + UadpNetworkMessageContentMask networkMessageContentMask = uadpNetworkMessageEncode.NetworkMessageContentMask; + + if ((networkMessageContentMask | UadpNetworkMessageContentMask.None) == UadpNetworkMessageContentMask.None) + { + //nothing to check + return; + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.PublisherId) == + UadpNetworkMessageContentMask.PublisherId) + { + // special case for valid PublisherId type only + Assert.AreNotEqual(uadpNetworkMessageEncode.PublisherId, uadpNetworkMessageDecoded.PublisherId, "PublisherId was not decoded correctly"); + } + } + + /// + /// Compare network messages options + /// + /// + /// + /// + private void Compare(UadpNetworkMessage uadpNetworkMessageEncode, UadpNetworkMessage uadpNetworkMessageDecoded, List subscribedDataSets = null) + { + UadpNetworkMessageContentMask networkMessageContentMask = uadpNetworkMessageEncode.NetworkMessageContentMask; + + if ((networkMessageContentMask | UadpNetworkMessageContentMask.None) == UadpNetworkMessageContentMask.None) + { + //nothing to check + return; + } + + // Verify flags + Assert.AreEqual(uadpNetworkMessageEncode.UADPFlags, uadpNetworkMessageDecoded.UADPFlags, "UADPFlags were not decoded correctly"); + + #region Network Message Header + if ((networkMessageContentMask & UadpNetworkMessageContentMask.PublisherId) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.PublisherId, uadpNetworkMessageDecoded.PublisherId, "PublisherId was not decoded correctly"); + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.DataSetClassId) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.DataSetClassId, uadpNetworkMessageDecoded.DataSetClassId, "DataSetClassId was not decoded correctly"); + } + #endregion + + #region Group Message Header + if ((networkMessageContentMask & (UadpNetworkMessageContentMask.GroupHeader | + UadpNetworkMessageContentMask.WriterGroupId | + UadpNetworkMessageContentMask.GroupVersion | + UadpNetworkMessageContentMask.NetworkMessageNumber | + UadpNetworkMessageContentMask.SequenceNumber)) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.GroupFlags, uadpNetworkMessageDecoded.GroupFlags, "GroupFlags was not decoded correctly"); + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.WriterGroupId) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.WriterGroupId, uadpNetworkMessageDecoded.WriterGroupId, "WriterGroupId was not decoded correctly"); + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.GroupVersion) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.GroupVersion, uadpNetworkMessageDecoded.GroupVersion, "GroupVersion was not decoded correctly"); + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.NetworkMessageNumber) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.NetworkMessageNumber, uadpNetworkMessageDecoded.NetworkMessageNumber, "NetworkMessageNumber was not decoded correctly"); + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.SequenceNumber) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.SequenceNumber, uadpNetworkMessageDecoded.SequenceNumber, "SequenceNumber was not decoded correctly"); + } + #endregion + + #region Payload header + Payload data + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0) + { + // check the number of UadpDataSetMessage counts + Assert.AreEqual(uadpNetworkMessageEncode.UadpDataSetMessages.Count, + uadpNetworkMessageDecoded.UadpDataSetMessages.Count, "UadpDataSetMessages.Count was not decoded correctly"); + + Assert.IsNotNull(subscribedDataSets, "SubscribedDataSets is null"); + + // check if the encoded match the decoded DataSetWriterId's + foreach (UadpDataSetMessage uadpDataSetMessage in uadpNetworkMessageEncode.UadpDataSetMessages) + { + UadpDataSetMessage uadpDataSetMessageDecoded = + uadpNetworkMessageDecoded.UadpDataSetMessages.FirstOrDefault(decoded => + decoded.DataSetWriterId == uadpDataSetMessage.DataSetWriterId); + + Assert.IsNotNull(uadpDataSetMessageDecoded, "Decoded message did not found uadpDataSetMessage.DataSetWriterId = {0}", uadpDataSetMessage.DataSetWriterId); + + // check payload data size in bytes + Assert.AreEqual(uadpDataSetMessage.PayloadSizeInStream, uadpDataSetMessageDecoded.PayloadSizeInStream, + "PayloadSizeInStream was not decoded correctly, DataSetWriterId = {0}", uadpDataSetMessage.DataSetWriterId); + + // check payload data fields count + // get related dataset from subscriber DataSets + DataSet decodedDataSet = subscribedDataSets.FirstOrDefault(dataSet => dataSet.Name == uadpDataSetMessage.DataSet.Name); + Assert.IsNotNull(decodedDataSet, "DataSet '{0}' is missing from subscriber datasets!", uadpDataSetMessage.DataSet.Name); + + Assert.AreEqual(uadpDataSetMessage.DataSet.Fields.Length, decodedDataSet.Fields.Length, + "DataSet.Fields.Length was not decoded correctly, DataSetWriterId = {0}", uadpDataSetMessage.DataSetWriterId); + + // check the fields data consistency + // at this time the DataSetField has just value!? + for (int index = 0; index < uadpDataSetMessage.DataSet.Fields.Length; index++) + { + Field fieldEncoded = uadpDataSetMessage.DataSet.Fields[index]; + Field fieldDecoded = decodedDataSet.Fields[index]; + Assert.IsNotNull(fieldEncoded, "uadpDataSetMessage.DataSet.Fields[{0}] is null, DataSetWriterId = {1}", + index, uadpDataSetMessage.DataSetWriterId); + Assert.IsNotNull(fieldDecoded, "uadpDataSetMessageDecoded.DataSet.Fields[{0}] is null, DataSetWriterId = {1}", + index, uadpDataSetMessage.DataSetWriterId); + + DataValue dataValueEncoded = fieldEncoded.Value; + DataValue dataValueDecoded = fieldDecoded.Value; + Assert.IsNotNull(fieldEncoded.Value, "uadpDataSetMessage.DataSet.Fields[{0}].Value is null, DataSetWriterId = {1}", + index, uadpDataSetMessage.DataSetWriterId); + Assert.IsNotNull(fieldDecoded.Value, "uadpDataSetMessageDecoded.DataSet.Fields[{0}].Value is null, DataSetWriterId = {1}", + index, uadpDataSetMessage.DataSetWriterId); + + // check dataValues values + Assert.IsNotNull(fieldEncoded.Value.Value, "uadpDataSetMessage.DataSet.Fields[{0}].Value is null, DataSetWriterId = {1}", + index, uadpDataSetMessage.DataSetWriterId); + Assert.IsNotNull(fieldDecoded.Value.Value, "uadpDataSetMessageDecoded.DataSet.Fields[{0}].Value is null, DataSetWriterId = {1}", + index, uadpDataSetMessage.DataSetWriterId); + + Assert.AreEqual(dataValueEncoded.Value, dataValueDecoded.Value, "Wrong: Fields[{0}].DataValue.Value; DataSetWriterId = {1}", index, uadpDataSetMessage.DataSetWriterId); + + // Checks just for DataValue type only + if ((uadpDataSetMessage.FieldContentMask & DataSetFieldContentMask.StatusCode) == + DataSetFieldContentMask.StatusCode) + { + // check dataValues StatusCode + Assert.AreEqual(dataValueEncoded.StatusCode, dataValueDecoded.StatusCode, + "Wrong: Fields[{0}].DataValue.StatusCode; DataSetWriterId = {1}", index, uadpDataSetMessage.DataSetWriterId); + } + + // check dataValues SourceTimestamp + if ((uadpDataSetMessage.FieldContentMask & DataSetFieldContentMask.SourceTimestamp) == + DataSetFieldContentMask.SourceTimestamp) + { + Assert.AreEqual(dataValueEncoded.SourceTimestamp, dataValueDecoded.SourceTimestamp, + "Wrong: Fields[{0}].DataValue.SourceTimestamp; DataSetWriterId = {1}", index, uadpDataSetMessage.DataSetWriterId); + } + + // check dataValues ServerTimestamp + if ((uadpDataSetMessage.FieldContentMask & DataSetFieldContentMask.ServerTimestamp) == + DataSetFieldContentMask.ServerTimestamp) + { + // check dataValues ServerTimestamp + Assert.AreEqual(dataValueEncoded.ServerTimestamp, dataValueDecoded.ServerTimestamp, + "Wrong: Fields[{0}].DataValue.ServerTimestamp; DataSetWriterId = {1}", index, uadpDataSetMessage.DataSetWriterId); + } + + // check dataValues SourcePicoseconds + if ((uadpDataSetMessage.FieldContentMask & DataSetFieldContentMask.SourcePicoSeconds) == + DataSetFieldContentMask.SourcePicoSeconds) + { + Assert.AreEqual(dataValueEncoded.SourcePicoseconds, dataValueDecoded.SourcePicoseconds, + "Wrong: Fields[{0}].DataValue.SourcePicoseconds; DataSetWriterId = {1}", index, uadpDataSetMessage.DataSetWriterId); + } + + // check dataValues ServerPicoSeconds + if ((uadpDataSetMessage.FieldContentMask & DataSetFieldContentMask.ServerPicoSeconds) == + DataSetFieldContentMask.ServerPicoSeconds) + { + // check dataValues ServerPicoseconds + Assert.AreEqual(dataValueEncoded.ServerPicoseconds, dataValueDecoded.ServerPicoseconds, + "Wrong: Fields[{0}].DataValue.ServerPicoseconds; DataSetWriterId = {1}", index, uadpDataSetMessage.DataSetWriterId); + } + } + } + } + #endregion + + #region Extended network message header + if ((networkMessageContentMask & UadpNetworkMessageContentMask.Timestamp) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.Timestamp, uadpNetworkMessageDecoded.Timestamp, "Timestamp was not decoded correctly"); + } + + if ((networkMessageContentMask & UadpNetworkMessageContentMask.PicoSeconds) != 0) + { + Assert.AreEqual(uadpNetworkMessageEncode.PicoSeconds, uadpNetworkMessageDecoded.PicoSeconds, "PicoSeconds was not decoded correctly"); + } + + #endregion + } + + /// + /// Read All bytes from a given stream + /// + /// + /// + private byte[] ReadBytes(Stream stream) + { + stream.Position = 0; + using (MemoryStream ms = new MemoryStream()) + { + stream.CopyTo(ms); + return ms.ToArray(); + } + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.Publisher.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.Publisher.cs new file mode 100644 index 00000000..2e639dce --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.Publisher.cs @@ -0,0 +1,226 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Configuration; +using Opc.Ua.PubSub.Uadp; +using System; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace Opc.Ua.PubSub.Tests +{ + + [TestFixture(Description = "Tests for UadpPubSubConnection class - Publisher ")] + public partial class UadpPubSubConnectionTests + { + [Test(Description = "Validate unicast PublishNetworkMessage")] + public void ValidateUadpPubSubConnectionNetworkMessagePublishUnicast() + { + //Arrange + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + //create publisher configuration object with modified port + PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); + + IPAddress unicastIPAddress = localhost.Address; + Assert.IsNotNull(unicastIPAddress, "unicastIPAddress is null"); + + NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); + publisherAddress.Url = "opc.udp://" + unicastIPAddress.ToString() + ":4840"; + publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); + + //create publisher UaPubSubApplication with changed configuration settings + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); + Assert.IsNotNull(publisherApplication, "publisherApplication is null"); + + UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(publisherConnection, "publisherConnection is null"); + + // will signal that the uadp message was received from local ip + m_shutdownEvent = new ManualResetEvent(false); + + //setup uadp client for receiving from multicast (simulate a subscriber unicast) + UdpClient udpUnicastClient = new UdpClientUnicast(localhost.Address, 4840); + Assert.IsNotNull(udpUnicastClient, "udpUnicastClient is null"); + udpUnicastClient.BeginReceive(new AsyncCallback(OnReceive), udpUnicastClient); + + // prepare a network message + WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups[0]; + UaNetworkMessage networkMessage = publisherConnection.CreateNetworkMessage(writerGroup0); + + //Act + publisherConnection.Start(); + publisherConnection.PublishNetworkMessage(networkMessage); + + //Assert + if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) + { + Assert.Fail("The UADP message was not received"); + } + + publisherConnection.Stop(); + udpUnicastClient.Close(); + udpUnicastClient.Dispose(); + } + + [Test(Description = "Validate broadcast PublishNetworkMessage")] + public void ValidateUadpPubSubConnectionNetworkMessagePublishBroadcast() + { + //Arrange + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + //create publisher configuration object with modified port + PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); + + IPAddress broadcastIPAddress = GetFirstNicLastIPByteChanged(255); + Assert.IsNotNull(broadcastIPAddress, "broadcastIPAddress is null"); + + NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); + publisherAddress.Url = "opc.udp://" + broadcastIPAddress.ToString() + ":4840"; + publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); + + //create publisher UaPubSubApplication with changed configuration settings + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); + Assert.IsNotNull(publisherApplication, "publisherApplication is null"); + + UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(publisherConnection, "publisherConnection is null"); + + // will signal that the uadp message was received from local ip + m_shutdownEvent = new ManualResetEvent(false); + + //setup uadp client for receiving from broadcast (simulate a subscriber broadcast) + UdpClient udpBroadcastClient = new UdpClientBroadcast(localhost.Address, 4840, UsedInContext.Subscriber); + udpBroadcastClient.BeginReceive(new AsyncCallback(OnReceive), udpBroadcastClient); + + // prepare a network message + WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups[0]; + UaNetworkMessage networkMessage = publisherConnection.CreateNetworkMessage(writerGroup0); + + //Act + publisherConnection.Start(); + publisherConnection.PublishNetworkMessage(networkMessage); + + //Assert + if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) + { + Assert.Fail("The UADP message was not received"); + } + + publisherConnection.Stop(); + udpBroadcastClient.Close(); + udpBroadcastClient.Dispose(); + } + + [Test(Description = "Validate multicast PublishNetworkMessage")] + public void ValidateUadpPubSubConnectionNetworkMessagePublishMulticast() + { + //Arrange + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + //create publisher configuration object with modified port + PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); + + IPAddress multicastIPAddress = new IPAddress(new byte[4] { 239, 0, 0, 1 }); + Assert.IsNotNull(multicastIPAddress, "multicastIPAddress is null"); + + NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); + publisherAddress.Url = "opc.udp://" + multicastIPAddress.ToString() + ":4840"; + publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); + + //create publisher UaPubSubApplication with changed configuration settings + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); + Assert.IsNotNull(publisherApplication, "publisherApplication is null"); + + UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(publisherConnection, "publisherConnection is null"); + + // will signal that the uadp message was received from local ip + m_shutdownEvent = new ManualResetEvent(false); + + //setup uadp client for receiving from multicast (simulate a subscriber multicast) + UdpClient udpMulticastClient = new UdpClientMulticast(localhost.Address, multicastIPAddress, 4840); + udpMulticastClient.BeginReceive(new AsyncCallback(OnReceive), udpMulticastClient); + + // prepare a network message + WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups[0]; + UaNetworkMessage networkMessage = publisherConnection.CreateNetworkMessage(writerGroup0); + + //Act + publisherConnection.Start(); + publisherConnection.PublishNetworkMessage(networkMessage); + + //Assert + if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) + { + Assert.Fail("The UADP message was not received"); + } + + publisherConnection.Stop(); + udpMulticastClient.Close(); + udpMulticastClient.Dispose(); + } + + /// + /// Handle Receive event for an UADP channel + /// + /// + private void OnReceive(IAsyncResult result) + { + // this is what had been passed into BeginReceive as the second parameter: + UdpClient socket = result.AsyncState as UdpClient; + // points towards whoever had sent the message: + IPEndPoint source = new IPEndPoint(0, 0); + // get the actual message and fill out the source: + byte[] message = socket.EndReceive(result, ref source); + if (IsHostAddress(source.Address.ToString())) + { + //signal that uadp message was received from local ip + m_shutdownEvent.Set(); + return; + } + // schedule the next receive operation once reading is done: + socket.BeginReceive(new AsyncCallback(OnReceive), socket); + } + + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.Subscriber.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.Subscriber.cs new file mode 100644 index 00000000..5406e91b --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.Subscriber.cs @@ -0,0 +1,308 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using NUnit.Framework; +using Opc.Ua.PubSub.Configuration; +using Opc.Ua.PubSub.Uadp; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for UadpPubSubConnection class - Subscriber ")] + public partial class UadpPubSubConnectionTests + { + private static object m_lock = new object(); + private byte[] m_sentBytes; + + [Test(Description = "Validate subscriber data on first nic;" + + "Subscriber unicast ip - Publisher unicast ip")] + public void ValidateUadpPubSubConnectionNetworkMessageReceiveFromUnicast() + { + // Arrange + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + PubSubConfigurationDataType subscriberConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(SubscriberConfigurationFileName); + Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration is null"); + + NetworkAddressUrlDataType subscriberAddress = new NetworkAddressUrlDataType(); + subscriberAddress.Url = "opc.udp://" + localhost.Address.ToString() + ":4840"; + subscriberConfiguration.Connections[0].Address = new ExtensionObject(subscriberAddress); + UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); + Assert.IsNotNull(subscriberApplication, "subscriberApplication is null"); + + UadpPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(subscriberConnection, "subscriberConnection is null"); + + subscriberConnection.UadpMessageReceived += DataReceived; + + PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); + + NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); + publisherAddress.Url = "opc.udp://" + localhost.Address.ToString() + ":4840"; + publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); + Assert.IsNotNull(publisherApplication, "publisherApplication is null"); + + UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(publisherConnection, "publisherConnection is null"); + + //Act + subscriberConnection.Start(); + m_shutdownEvent = new ManualResetEvent(false); + + // physical network ip is mandatory on UdpClientUnicast as parameter + UdpClient udpUnicastClient = new UdpClientUnicast(localhost.Address, 4840); + Assert.IsNotNull(udpUnicastClient, "udpUnicastClient is null"); + + // first physical network ip = unicast address ip + IPEndPoint remoteEndPoint = new IPEndPoint(localhost.Address, 4840); + Assert.IsNotNull(remoteEndPoint, "remoteEndPoint is null"); + + m_sentBytes = PrepareData(publisherConnection); + int sentBytesLen = udpUnicastClient.Send(m_sentBytes, m_sentBytes.Length, remoteEndPoint); + Assert.AreEqual(sentBytesLen, m_sentBytes.Length, "Sent bytes size not equal to published bytes size!"); + + Thread.Sleep(EstimatedPublishingTime); + + // Assert + if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) + { + Assert.Fail("Subscriber unicast error ... published data not received"); + } + + subscriberConnection.Stop(); + } + + [Test(Description = "Validate subscriber data on first nic;" + + "Subscriber unicast ip - Publisher broadcast ip")] + public void ValidateUadpPubSubConnectionNetworkMessageReceiveFromBroadcast() + { + // Arrange + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + PubSubConfigurationDataType subscriberConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(SubscriberConfigurationFileName); + Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration is null"); + + NetworkAddressUrlDataType subscriberAddress = new NetworkAddressUrlDataType(); + subscriberAddress.Url = "opc.udp://" + localhost.Address.ToString() + ":4840"; + subscriberConfiguration.Connections[0].Address = new ExtensionObject(subscriberAddress); + UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); + Assert.IsNotNull(subscriberApplication, "subscriberApplication is null"); + + UadpPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(subscriberConnection, "subscriberConnection is null"); + + subscriberConnection.UadpMessageReceived += DataReceived; + + PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); + + IPAddress broadcastIPAddress = GetFirstNicLastIPByteChanged(255); + Assert.IsNotNull(broadcastIPAddress, "broadcastIPAddress is null"); + + NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); + publisherAddress.Url = "opc.udp://" + broadcastIPAddress.ToString() + ":4840"; + publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); + Assert.IsNotNull(publisherApplication, "publisherApplication is null"); + + UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(publisherConnection, "publisherConnection is null"); + + //Act + subscriberConnection.Start(); + m_shutdownEvent = new ManualResetEvent(false); + m_sentBytes = PrepareData(publisherConnection); + + // first physical network ip is mandatory on UdpClientBroadcast as parameter + UdpClient udpBroadcastClient = new UdpClientBroadcast(localhost.Address, 4840, UsedInContext.Publisher); + Assert.IsNotNull(udpBroadcastClient, "udpBroadcastClient is null"); + + IPEndPoint remoteEndPoint = new IPEndPoint(broadcastIPAddress, 4840); + int sentBytesLen = udpBroadcastClient.Send(m_sentBytes, m_sentBytes.Length, remoteEndPoint); + Assert.AreEqual(sentBytesLen, m_sentBytes.Length, "Sent bytes size not equal to published bytes size!"); + + Thread.Sleep(EstimatedPublishingTime); + + // Assert + if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) + { + Assert.Fail("Subscriber broadcast error ... published data not received"); + } + + subscriberConnection.Stop(); + } + + [Test(Description = "Validate subscriber data on first nic;" + + "Subscriber multicast ip - Publisher multicast ip;" + + "Setting Subscriber as unicast or broadcast not functional. Just multicast to multicast works fine;")] + public void ValidateUadpPubSubConnectionNetworkMessageReceiveFromMulticast() + { + // Arrange + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + IPAddress multicastIPAddress = new IPAddress(new byte[4] { 239, 0, 0, 1 }); + Assert.IsNotNull(multicastIPAddress, "multicastIPAddress is null"); + + PubSubConfigurationDataType subscriberConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(SubscriberConfigurationFileName); + Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration is null"); + + NetworkAddressUrlDataType subscriberAddress = new NetworkAddressUrlDataType(); + subscriberAddress.Url = "opc.udp://" + multicastIPAddress.ToString() + ":4840"; + subscriberConfiguration.Connections[0].Address = new ExtensionObject(subscriberAddress); + UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); + Assert.IsNotNull(subscriberApplication, "subscriberApplication is null"); + + UadpPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(subscriberConnection, "subscriberConnection is null"); + + subscriberConnection.UadpMessageReceived += DataReceived; + + PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); + Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); + + NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); + publisherAddress.Url = "opc.udp://" + multicastIPAddress.ToString() + ":4840"; + publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); + Assert.IsNotNull(publisherApplication, "publisherApplication is null"); + + UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(publisherConnection, "publisherConnection is null"); + + //Act + subscriberConnection.Start(); + m_shutdownEvent = new ManualResetEvent(false); + m_sentBytes = PrepareData(publisherConnection); + + // first physical network ip is mandatory on UdpClientMulticast as parameter, for multicast publisher the port must not be 4840 + UdpClient udpMulticastClient = new UdpClientMulticast(localhost.Address, multicastIPAddress, 0); + Assert.IsNotNull(udpMulticastClient, "udpMulticastClient is null"); + + IPEndPoint remoteEndPoint = new IPEndPoint(multicastIPAddress, 4840); + int sentBytesLen = udpMulticastClient.Send(m_sentBytes, m_sentBytes.Length, remoteEndPoint); + Assert.AreEqual(sentBytesLen, m_sentBytes.Length, "Sent bytes size not equal to published bytes size!"); + + Thread.Sleep(EstimatedPublishingTime); + + // Assert + if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) + { + Assert.Fail("Subscriber multicast error ... published data not received"); + } + + subscriberConnection.Stop(); + } + + /// + /// Subscriber callback that listen for Publisher uadp notifications + /// + /// + /// + private void DataReceived(object sender, UadpDataEventArgs e) + { + lock (m_lock) + { + // Assert + var localhost = GetFirstNic(); + Assert.IsNotNull(localhost, "localhost is null"); + Assert.IsNotNull(localhost.Address, "localhost.Address is null"); + + Assert.IsNotNull(e.SourceEndPoint.Address, "Udp address received should not be null"); + if (localhost.Address.ToString() != e.SourceEndPoint.Address.ToString()) + { + // the message comes from the network but was not initiated by test + return; + } + + byte[] bytes = e.Message; + Assert.AreEqual(m_sentBytes.Length, bytes.Length, "Sent bytes size: {0} does not match received bytes size: {1}", m_sentBytes.Length, bytes.Length); + + string sentBytesStr = BitConverter.ToString(m_sentBytes); + string bytesStr = BitConverter.ToString(bytes); + Assert.AreEqual(sentBytesStr, bytesStr, "Sent bytes: {0} and received bytes: {1} content are not equal", sentBytesStr, bytesStr); + + m_shutdownEvent.Set(); + } + } + + /// + /// Prepare data + /// + /// + /// + private byte[] PrepareData(UadpPubSubConnection publisherConnection) + { + try + { + WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups[0]; + UaNetworkMessage message = publisherConnection.CreateNetworkMessage(writerGroup0); + + ServiceMessageContext messageContext = new ServiceMessageContext(); + BinaryEncoder encoder = new BinaryEncoder(messageContext); + message.Encode(encoder); + byte[] bytes = ReadBytes(encoder.BaseStream); + encoder.Dispose(); + + return bytes; + } + catch (Exception) + { + } + + return new byte[0]; + } + + /// + /// Read All bytes from a given stream + /// + /// + /// + private byte[] ReadBytes(Stream stream) + { + stream.Position = 0; + using (MemoryStream ms = new MemoryStream()) + { + stream.CopyTo(ms); + return ms.ToArray(); + } + } + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.cs new file mode 100644 index 00000000..ee303a18 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UadpPubSubConnectionTests.cs @@ -0,0 +1,304 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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 NUnit.Framework; +using Opc.Ua; +using Opc.Ua.PubSub; +using Opc.Ua.PubSub.Uadp; +using System; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Threading; + +namespace Opc.Ua.PubSub.Tests +{ + [TestFixture(Description = "Tests for UadpPubSubConnection class")] + public partial class UadpPubSubConnectionTests + { + private const int EstimatedPublishingTime = 6000; + + private const string PublisherConfigurationFileName = "PublisherConfiguration.xml"; + private const string SubscriberConfigurationFileName = "SubscriberConfiguration.xml"; + + private PubSubConfigurationDataType m_publisherConfiguration; + private UaPubSubApplication m_uaPublisherApplication; + private UadpPubSubConnection m_uadpPublisherConnection; + + private ManualResetEvent m_shutdownEvent; + + [OneTimeSetUp()] + public void MyTestInitialize() + { + // Create a publisher application + m_uaPublisherApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + Assert.IsNotNull(m_uaPublisherApplication, "m_publisherApplication should not be null"); + + // Get the publisher configuration + m_publisherConfiguration = m_uaPublisherApplication.UaPubSubConfigurator.PubSubConfiguration; + Assert.IsNotNull(m_publisherConfiguration, "m_publisherConfiguration should not be null"); + + // Get publisher connection + Assert.IsNotNull(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be null"); + Assert.IsNotEmpty(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be empty"); + m_uadpPublisherConnection = m_uaPublisherApplication.PubSubConnections[0] as UadpPubSubConnection; + Assert.IsNotNull(m_uadpPublisherConnection, "m_uadpPublisherConnection should not be null"); + } + + [Test(Description = "Validate TransportProtocol value")] + public void ValidateUadpPubSubConnectionTransportProtocol() + { + //Assert + Assert.IsNotNull(m_uadpPublisherConnection, "The UADP connection from standard configuration is invalid."); + Assert.IsTrue(m_uadpPublisherConnection.TransportProtocol == TransportProtocol.UADP, + "The UADP connection has wrong TransportProtocol {0}", m_uadpPublisherConnection.TransportProtocol); + } + + [Test(Description = "Validate PubSubConnectionConfiguration value")] + public void ValidateUadpPubSubConnectionPubSubConnectionConfiguration() + { + //Assert + Assert.IsNotNull(m_uadpPublisherConnection, "The UADP connection from standard configuration is invalid."); + PubSubConnectionDataType connectionConfiguration = m_uadpPublisherConnection.PubSubConnectionConfiguration; + PubSubConnectionDataType originalConnectionConfiguration = m_publisherConfiguration.Connections[0]; + Assert.IsNotNull(connectionConfiguration, "The UADP connection configuration from UADP connection object is invalid."); + Assert.AreEqual(originalConnectionConfiguration.Name, connectionConfiguration.Name, "The connection configuration Name is invalid."); + Assert.AreEqual(originalConnectionConfiguration.PublisherId, connectionConfiguration.PublisherId, "The connection configuration PublisherId is invalid."); + Assert.AreEqual(originalConnectionConfiguration.Address, connectionConfiguration.Address, "The connection configuration Address is invalid."); + Assert.AreEqual(originalConnectionConfiguration.Enabled, connectionConfiguration.Enabled, "The connection configuration Enabled is invalid."); + Assert.AreEqual(originalConnectionConfiguration.TransportProfileUri, connectionConfiguration.TransportProfileUri, "The connection configuration TransportProfileUri is invalid."); + + } + + [Test(Description = "Validate Application value")] + public void ValidateUadpPubSubConnectionApplication() + { + //Assert + Assert.IsNotNull(m_uadpPublisherConnection, "The UADP connection from standard configuration is invalid."); + Assert.AreEqual(m_uadpPublisherConnection.Application, m_uaPublisherApplication, "The UADP connection Application reference is invalid."); + } + + [Test(Description = "Validate Publishers value")] + public void ValidateUadpPubSubConnectionPublishers() + { + //Assert + Assert.IsNotNull(m_uadpPublisherConnection, "The UADP connection from standard configuration is invalid."); + Assert.IsNotNull(m_uadpPublisherConnection.Publishers, "The UADP connection Publishers is invalid."); + Assert.AreEqual(1, m_uadpPublisherConnection.Publishers.Count, "The UADP connection Publishers.Count is invalid."); + int index = 0; + foreach (IUaPublisher publisher in m_uadpPublisherConnection.Publishers) + { + Assert.IsTrue(publisher != null, "connection.Publishers[{0}] is null", index); + Assert.IsTrue(publisher.PubSubConnection == m_uadpPublisherConnection, "connection.Publishers[{0}].PubSubConnection is not set correctly", index); + Assert.IsTrue(publisher.WriterGroupConfiguration.WriterGroupId == m_publisherConfiguration.Connections[0].WriterGroups[index].WriterGroupId, "connection.Publishers[{0}].WriterGroupConfiguration is not set correctly", index); + index++; + } + } + + [Test(Description = "Validate CreateNetworkMessage")] + public void ValidateUadpPubSubConnectionCreateNetworkMessage() + { + Assert.IsNotNull(m_uadpPublisherConnection, "The UADP connection from standard configuration is invalid."); + + //Arrange + WriterGroupDataType writerGroup0 = m_uadpPublisherConnection.PubSubConnectionConfiguration.WriterGroups[0]; + UadpWriterGroupMessageDataType messageSettings = ExtensionObject.ToEncodeable(writerGroup0.MessageSettings) + as UadpWriterGroupMessageDataType; + + //Act + m_uadpPublisherConnection.ResetSequenceNumber(); + UadpNetworkMessage networkMessage0 = m_uadpPublisherConnection.CreateNetworkMessage(writerGroup0) as UadpNetworkMessage; + + //Assert + Assert.IsNotNull(networkMessage0, "CreateNetworkMessage did not return an UadpNetworkMessage."); + + Assert.AreEqual(networkMessage0.DataSetClassId, Guid.Empty, "UadpNetworkMessage.DataSetClassId is invalid."); + Assert.AreEqual(networkMessage0.WriterGroupId, writerGroup0.WriterGroupId, "UadpNetworkMessage.WriterGroupId is invalid."); + Assert.AreEqual(networkMessage0.UADPVersion, 1, "UadpNetworkMessage.UADPVersion is invalid."); + Assert.AreEqual(networkMessage0.SequenceNumber, 1, "UadpNetworkMessage.SequenceNumber is not 1."); + Assert.AreEqual(networkMessage0.GroupVersion, messageSettings.GroupVersion, "UadpNetworkMessage.GroupVersion is not valid."); + Assert.AreEqual(networkMessage0.PublisherId, m_uadpPublisherConnection.PubSubConnectionConfiguration.PublisherId.Value, + "UadpNetworkMessage.PublisherId is not valid."); + Assert.IsNotNull(networkMessage0.UadpDataSetMessages, "UadpNetworkMessage.UadpDataSetMessages is null."); + Assert.AreEqual(networkMessage0.UadpDataSetMessages.Count, 3, "UadpNetworkMessage.UadpDataSetMessages.Count is not 3."); + //validate flags + Assert.AreEqual((uint)networkMessage0.NetworkMessageContentMask, messageSettings.NetworkMessageContentMask, + "UadpNetworkMessage.messageSettings.NetworkMessageContentMask is not valid."); + + } + + [Test(Description = "Validate CreateNetworkMessage SequenceNumber increment")] + public void ValidateUadpPubSubConnectionCreateNetworkMessageSequenceNumber() + { + Assert.IsNotNull(m_uadpPublisherConnection, "The UADP connection from standard configuration is invalid."); + //Arrange + WriterGroupDataType writerGroup0 = m_uadpPublisherConnection.PubSubConnectionConfiguration.WriterGroups[0]; + + //Act + m_uadpPublisherConnection.ResetSequenceNumber(); + for (int i = 0; i < 10; i++) + { + //Create network message + UadpNetworkMessage networkMessage = m_uadpPublisherConnection.CreateNetworkMessage(writerGroup0) as UadpNetworkMessage; + + //Assert + Assert.IsNotNull(networkMessage, "CreateNetworkMessage did not return an UadpNetworkMessage."); + Assert.AreEqual(networkMessage.SequenceNumber, i + 1, "UadpNetworkMessage.SequenceNumber for message {0} is not {0}.", i + 1); + + //validate dataset message sequence number + Assert.IsNotNull(networkMessage.UadpDataSetMessages, "CreateNetworkMessage did not return an UadpNetworkMessage.UadpDataSetMessages."); + Assert.IsTrue(networkMessage.UadpDataSetMessages.Count == 3, "CreateNetworkMessage did not return 3 UadpNetworkMessage.UadpDataSetMessages."); + Assert.AreEqual(networkMessage.UadpDataSetMessages[0].SequenceNumber, i * 3 + 1, "UadpNetworkMessage.UadpDataSetMessages[0].SequenceNumber for message {0} is not {1}.", i + 1, i * 3 + 1); + Assert.AreEqual(networkMessage.UadpDataSetMessages[1].SequenceNumber, i * 3 + 2, "UadpNetworkMessage.UadpDataSetMessages[1].SequenceNumber for message {0} is not {1}.", i + 1, i * 3 + 2); + Assert.AreEqual(networkMessage.UadpDataSetMessages[2].SequenceNumber, i * 3 + 3, "UadpNetworkMessage.UadpDataSetMessages[2].SequenceNumber for message {0} is not {1}.", i + 1, i * 3 + 3); + } + } + + #region Helper methods + /// + /// Get localhost address reference + /// + /// + public static UnicastIPAddressInformation GetFirstNic() + { + string activeIp = "127.0.0.1"; + + IPAddress firstActiveIPAddr = GetFirstActiveNic(); + if (firstActiveIPAddr != null) + { + activeIp = firstActiveIPAddr.ToString(); + } + + NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); + var netInterface = interfaces.FirstOrDefault(nic => nic.GetIPProperties().UnicastAddresses.Any(addr => addr.Address.AddressFamily == AddressFamily.InterNetwork)); + + foreach (NetworkInterface nic in interfaces) + { + if (nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && + nic.OperationalStatus == OperationalStatus.Up) + { + var addreses = nic.GetIPProperties().UnicastAddresses; + foreach (UnicastIPAddressInformation addr in addreses) + { + if (addr.Address.ToString().Contains(activeIp)) + { + // return specified address + return addr; + } + } + } + else { continue; } + } + + return null; + } + + /// + /// Get first active broadcast ip + /// + /// + private static IPAddress GetFirstNicLastIPByteChanged(byte lastIpByte) + { + IPAddress firstActiveIPAddr = GetFirstActiveNic(); + if (firstActiveIPAddr != null) + { + // replace last IP byte from address with 255 (broadcast) + IPAddress validIp = null; + bool isValidIP = IPAddress.TryParse(firstActiveIPAddr.ToString(), out validIp); + if (isValidIP) + { + byte[] ipAddressBytes = validIp.GetAddressBytes(); + ipAddressBytes[ipAddressBytes.Count() - 1] = lastIpByte; + return new IPAddress(ipAddressBytes); + } + } + + return null; + } + + /// + /// Check if the specified ip is a local host ip + /// + /// + /// + private bool IsHostAddress(string ipAddress) + { + var hostName = Dns.GetHostName(); + foreach (var address in Dns.GetHostEntry(hostName).AddressList) + { + if (address.MapToIPv4().ToString().Equals(ipAddress)) + { + return true; + } + } + return false; + } + + /// + /// Get first active nic on local computer + /// + /// + private static IPAddress GetFirstActiveNic() + { + IPAddress firstActiveIPAddr = null; + string localComputerName = Dns.GetHostName(); + try + { // get host IP addresses + IPAddress[] hostIPs = Dns.GetHostAddresses(localComputerName); + // get local IP addresses + IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); + + // test if any host IP equals to any local IP or to localhost + foreach (IPAddress hostIP in hostIPs) + { + // is loopback type? + if (IPAddress.IsLoopback(hostIP)) + { + continue; + } + // ip address available + foreach (IPAddress localIP in localIPs) + { + if (hostIP.Equals(localIP)) + { + firstActiveIPAddr = localIP; + } + } + } + } + catch + { + } + + return firstActiveIPAddr; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UdpClientCreatorTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UdpClientCreatorTests.cs new file mode 100644 index 00000000..4e095af3 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.PubSub.Tests/UdpClientCreatorTests.cs @@ -0,0 +1,207 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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.Linq; +using System.Net; +using System.Net.Sockets; +using NUnit.Framework; +using Opc.Ua.PubSub.Uadp; + +namespace Opc.Ua.PubSub.Tests +{ + public partial class UdpClientCreatorTests + { + private const string PublisherConfigurationFileName = "PublisherConfiguration.xml"; + + private const string UrlScheme = "opc.udp://"; + // generic well known address + private string UrlHostName = "192.168.0.1"; + private const int UrlPortNo = 4840; + + private string m_defaultUrl; + + [OneTimeSetUp()] + public void MyTestInitialize() + { + var localhost = UadpPubSubConnectionTests.GetFirstNic(); + if(localhost != null && localhost.Address != null) + { + UrlHostName = localhost.Address.ToString(); + } + m_defaultUrl = string.Concat(UrlScheme, UrlHostName, ":", UrlPortNo); + } + + [Test(Description = "Validate url value")] + public void ValidateUdpClientCreatorGetEndPoint() + { + IPEndPoint ipEndPoint = UdpClientCreator.GetEndPoint(m_defaultUrl); + Assert.IsNotNull(ipEndPoint, "GetEndPoint failed: ipEndPoint is null"); + + Assert.AreEqual(ipEndPoint.Address.ToString(), UrlHostName, "The url hostname: {0} is not equal to specified hostname: {1}", ipEndPoint.Address.ToString(), UrlHostName); + Assert.AreEqual(ipEndPoint.Port, UrlPortNo, "The url port: {0} is not equal to specified port: {1}", ipEndPoint.Port, UrlPortNo); + } + + [Test(Description = "Invalidate url Scheme value")] + public void InvalidateUdpClientCreatorUrlScheme() + { + IPEndPoint ipEndPoint = UdpClientCreator.GetEndPoint(string.Concat("opc.udp:", UrlHostName, ":", UrlPortNo)); + Assert.IsNull(ipEndPoint, "Url scheme is good!?"); + } + + [Test(Description = "Invalidate url Hostname value")] + public void InvalidateUdpClientCreatorUrlHostName() + { + string urlHostNameChanged = "192.168.0.280"; + string localhostIP = ReplaceLastIpByte(UrlHostName, "280"); + if (localhostIP != null) + { + urlHostNameChanged = localhostIP; + } + IPEndPoint ipEndPoint = UdpClientCreator.GetEndPoint(string.Concat(UrlScheme, urlHostNameChanged, ":", UrlPortNo)); + Assert.IsNull(ipEndPoint, "Url hostname is good!?"); + } + + [Test(Description = "Invalidate url Port number value")] + public void InvalidateUdpClientCreatorUrlPort() + { + IPEndPoint ipEndPoint = UdpClientCreator.GetEndPoint(string.Concat(UrlScheme, UrlHostName, ":", "0")); + Assert.IsNull(ipEndPoint, "Url port number is wrong"); + } + + [Test(Description = "Validate url hostname as ip address value")] + public void ValidateUdpClientCreatorUrlIPAddress() + { + string urlHostNameChanged = "192.168.0.200"; + string localhostIP = ReplaceLastIpByte(UrlHostName, "200"); + if (localhostIP != null ) + { + urlHostNameChanged = localhostIP; + } + IPEndPoint ipEndPoint = UdpClientCreator.GetEndPoint(string.Concat(UrlScheme, urlHostNameChanged, ":", UrlPortNo)); + Assert.IsNotNull(ipEndPoint, "Url hostname(address) is good!?"); + } + + [Test(Description = "Validate url hostname as computer bane value (DNS might be necessary)")] + public void ValidateUdpClientCreatorUrlHostname() + { + IPEndPoint ipEndPoint = UdpClientCreator.GetEndPoint(string.Concat(UrlScheme, Environment.MachineName, ":", UrlPortNo)); + Assert.IsNotNull(ipEndPoint, "Url hostname is good!?"); + } + + [Test(Description = "Validate GetUdpClients value")] + public void ValidateUdpClientCreatorGetUdpClients() + { + // Create a publisher application + UaPubSubApplication publisherApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); + Assert.IsNotNull(publisherApplication, "m_publisherApplication should not be null"); + + // Get the publisher configuration + PubSubConfigurationDataType publisherConfiguration = publisherApplication.UaPubSubConfigurator.PubSubConfiguration; + Assert.IsNotNull(publisherConfiguration, "m_publisherConfiguration should not be null"); + + // Check publisher connections + Assert.IsNotNull(publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be null"); + Assert.IsNotEmpty(publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be empty"); + + PubSubConnectionDataType publisherConnection1 = publisherConfiguration.Connections[0]; + Assert.IsNotNull(publisherConnection1, "publisherConnection1 should not be null"); + + NetworkAddressUrlDataType networkAddressUrlState1 = ExtensionObject.ToEncodeable(publisherConnection1.Address) + as NetworkAddressUrlDataType; + Assert.IsNotNull(networkAddressUrlState1, "networkAddressUrlState1 is null"); + + IPEndPoint configuredEndPoint1 = UdpClientCreator.GetEndPoint(networkAddressUrlState1.Url); + Assert.IsNotNull(configuredEndPoint1, "configuredEndPoint1 is null"); + + List udpClients1 = UdpClientCreator.GetUdpClients(UsedInContext.Publisher, networkAddressUrlState1, configuredEndPoint1); + Assert.IsNotNull(udpClients1, "udpClients1 is null"); + Assert.IsNotEmpty(udpClients1, "udpClients1 is empty"); + + UdpClient udpClient1 = udpClients1[0]; + Assert.IsTrue(udpClient1 is UdpClientMulticast, "udpClient1 was configured as UdpClientMulticast"); + Assert.IsNotNull(udpClient1.Client.LocalEndPoint, "udpClient1 IP address is empty"); + + PubSubConnectionDataType publisherConnection2 = publisherConfiguration.Connections[1]; + Assert.IsNotNull(publisherConnection2, "publisherConnection2 should not be null"); + + NetworkAddressUrlDataType networkAddressUrlState2 = ExtensionObject.ToEncodeable(publisherConnection2.Address) + as NetworkAddressUrlDataType; + Assert.IsNotNull(networkAddressUrlState2, "networkAddressUrlState2 is null"); + + IPEndPoint configuredEndPoint2 = UdpClientCreator.GetEndPoint(networkAddressUrlState2.Url); + Assert.IsNotNull(configuredEndPoint2, "configuredEndPoint2 is null"); + + List udpClients2 = UdpClientCreator.GetUdpClients(UsedInContext.Publisher, networkAddressUrlState2, configuredEndPoint2); + Assert.IsNotNull(udpClients2, "udpClients2 is null"); + Assert.IsNotEmpty(udpClients2, "udpClients2 is empty"); + + UdpClient udpClient2 = udpClients2[0]; + Assert.IsTrue(udpClient2 is UdpClientBroadcast, "udpClient2 was configured as UdpClientBroadcast"); + Assert.IsNotNull(udpClient2.Client.LocalEndPoint, "udpClient2 IP address is empty"); + + IPEndPoint udpClientEndPoint1 = udpClient1.Client.LocalEndPoint as IPEndPoint; + Assert.IsNotNull(udpClientEndPoint1, "udpClientEndPoint1 could not be cast to IPEndPoint"); + + IPEndPoint udpClientEndPoint2 = udpClient2.Client.LocalEndPoint as IPEndPoint; + Assert.IsNotNull(udpClientEndPoint2, "udpClientEndPoint2 could not be cast to IPEndPoint"); + + Assert.AreEqual(udpClientEndPoint1.Address.ToString(), udpClientEndPoint2.Address.ToString(), "udpClientEndPoint1 IP address: {0} should match udpClientEndPoint2 IP Address {1}", udpClientEndPoint1.Address.ToString(), udpClientEndPoint2.Address.ToString()); + Assert.AreNotEqual(udpClientEndPoint1.Port, udpClientEndPoint2.Port, "udpClientEndPoint1 port number: {0} should not match udpClientEndPoint1 port number: {1}", udpClientEndPoint1.Port, udpClientEndPoint2.Port); + } + + #region Helper methods + private string ReplaceLastIpByte(string ipAddress, string lastIpByte) + { + string newIPAddress = null; + try + { + IPAddress validIp = null; + bool isValidIP = IPAddress.TryParse(ipAddress, out validIp); + if (isValidIP) + { + byte[] ipAddressBytes = validIp.GetAddressBytes(); + for (int pos = 0; pos < ipAddressBytes.Count() - 1; pos++) + { + newIPAddress += string.Format("{0}.", ipAddressBytes[pos]); + } + newIPAddress += lastIpByte; + return newIPAddress; + } + } + catch + { + + } + return newIPAddress; + } + #endregion + } +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Assets/OPC Foundation Root CA [A9DA60CBE5C1C1C758AC6D580239DBBF53DE63D4].crl b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Assets/OPC Foundation Root CA [A9DA60CBE5C1C1C758AC6D580239DBBF53DE63D4].crl new file mode 100644 index 00000000..d4ccc934 Binary files /dev/null and b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Assets/OPC Foundation Root CA [A9DA60CBE5C1C1C758AC6D580239DBBF53DE63D4].crl differ diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Assets/OPC Foundation Root CA [A9DA60CBE5C1C1C758AC6D580239DBBF53DE63D4].der b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Assets/OPC Foundation Root CA [A9DA60CBE5C1C1C758AC6D580239DBBF53DE63D4].der new file mode 100644 index 00000000..b40e5b9e Binary files /dev/null and b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Assets/OPC Foundation Root CA [A9DA60CBE5C1C1C758AC6D580239DBBF53DE63D4].der differ diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CRLTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CRLTests.cs new file mode 100644 index 00000000..3cc01bd1 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CRLTests.cs @@ -0,0 +1,246 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using NUnit.Framework; + +namespace Opc.Ua.Security.Certificates.Tests +{ + /// + /// Tests for the CRL class. + /// + [TestFixture, Category("CRL")] + [Parallelizable] + [SetCulture("en-us")] + public class CRLTests + { + #region DataPointSources + [DatapointSource] + public CRLAsset[] CRLTestCases = new AssetCollection(TestUtils.EnumerateTestAssets("*.crl")).ToArray(); + + [DatapointSource] + public KeyHashPair[] KeyHashPairs = new KeyHashPairCollection { + { 2048, HashAlgorithmName.SHA256 }, + { 3072, HashAlgorithmName.SHA384 }, + { 4096, HashAlgorithmName.SHA512 } }.ToArray(); + #endregion + + #region Test Setup + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected void OneTimeSetUp() + { + m_issuerCert = CertificateBuilder.Create("CN=Root CA") + .SetCAConstraint() + .CreateForRSA(); + } + + /// + /// Clean up the Test PKI folder + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + #endregion + + #region Test Methods + /// + /// Verify self signed app certs. + /// + [Theory] + public void DecodeCRLs( + CRLAsset crlAsset + ) + { + var x509Crl = new X509CRL(crlAsset.Crl); + Assert.NotNull(x509Crl); + TestContext.Out.WriteLine($"CRLAsset: {x509Crl.Issuer}"); + var crlInfo = WriteCRL(x509Crl); + TestContext.Out.WriteLine(crlInfo); + } + + /// + /// Validate a CRL Builder and decoder pass. + /// + [Test] + public void CrlInternalBuilderTest() + { + var dname = new X500DistinguishedName("CN=Test"); + var hash = HashAlgorithmName.SHA256; + var crlBuilder = CrlBuilder.Create(dname, hash) + .SetNextUpdate(DateTime.Today.AddDays(30)); + byte[] serial = new byte[] { 4, 5, 6, 7 }; + var revokedarray = new RevokedCertificate(serial); + crlBuilder.RevokedCertificates.Add(revokedarray); + string serstring = "45678910"; + var revokedstring = new RevokedCertificate(serstring); + crlBuilder.RevokedCertificates.Add(revokedstring); + crlBuilder.CrlExtensions.Add(X509Extensions.BuildCRLNumber(123)); + var crlEncoded = crlBuilder.Encode(); + Assert.NotNull(crlEncoded); + var x509Crl = new X509CRL(); + x509Crl.DecodeCrl(crlEncoded); + Assert.NotNull(x509Crl); + Assert.NotNull(x509Crl.CrlExtensions); + Assert.NotNull(x509Crl.RevokedCertificates); + Assert.AreEqual(dname.RawData, x509Crl.IssuerName.RawData); + //Assert.AreEqual(crlBuilder.ThisUpdate, x509Crl.ThisUpdate); + //Assert.AreEqual(crlBuilder.NextUpdate, x509Crl.NextUpdate); + Assert.AreEqual(2, x509Crl.RevokedCertificates.Count); + Assert.AreEqual(serial, x509Crl.RevokedCertificates[0].UserCertificate); + Assert.AreEqual(serstring, x509Crl.RevokedCertificates[1].SerialNumber); + Assert.AreEqual(1, x509Crl.CrlExtensions.Count); + Assert.AreEqual(hash, x509Crl.HashAlgorithmName); + } + + /// + /// Validate the full CRL encoder and decoder pass. + /// + [Theory] + public void CrlBuilderTest(KeyHashPair keyHashPair) + { + var crlBuilder = CrlBuilder.Create(m_issuerCert.SubjectName, keyHashPair.HashAlgorithmName) + .SetThisUpdate(DateTime.UtcNow.Date) + .SetNextUpdate(DateTime.UtcNow.Date.AddDays(30)); + + // little endian byte array as serial number? + byte[] serial = new byte[] { 4, 5, 6, 7 }; + var revokedarray = new RevokedCertificate(serial); + crlBuilder.RevokedCertificates.Add(revokedarray); + string serstring = "123456789101"; + var revokedstring = new RevokedCertificate(serstring); + crlBuilder.RevokedCertificates.Add(revokedstring); + + crlBuilder.CrlExtensions.Add(X509Extensions.BuildCRLNumber(1111)); + crlBuilder.CrlExtensions.Add(X509Extensions.BuildAuthorityKeyIdentifier(m_issuerCert)); + + var i509Crl = crlBuilder.CreateForRSA(m_issuerCert); + X509CRL x509Crl = new X509CRL(i509Crl.RawData); + Assert.NotNull(x509Crl); + Assert.NotNull(x509Crl.CrlExtensions); + Assert.NotNull(x509Crl.RevokedCertificates); + Assert.AreEqual(m_issuerCert.SubjectName.RawData, x509Crl.IssuerName.RawData); + Assert.AreEqual(crlBuilder.ThisUpdate, x509Crl.ThisUpdate); + Assert.AreEqual(crlBuilder.NextUpdate, x509Crl.NextUpdate); + Assert.AreEqual(2, x509Crl.RevokedCertificates.Count); + Assert.AreEqual(serial, x509Crl.RevokedCertificates[0].UserCertificate); + Assert.AreEqual(serstring, x509Crl.RevokedCertificates[1].SerialNumber); + Assert.AreEqual(2, x509Crl.CrlExtensions.Count); + using (var issuerPubKey = new X509Certificate2(m_issuerCert.RawData)) + { + Assert.True(x509Crl.VerifySignature(issuerPubKey, true)); + } + } + + /// + /// Validate the full CRL encoder and decoder pass. + /// + [Theory] + public void CrlBuilderTestWithSignatureGenerator(KeyHashPair keyHashPair) + { + var crlBuilder = CrlBuilder.Create(m_issuerCert.SubjectName, keyHashPair.HashAlgorithmName) + .SetThisUpdate(DateTime.UtcNow.Date) + .SetNextUpdate(DateTime.UtcNow.Date.AddDays(30)); + + // little endian byte array as serial number? + byte[] serial = new byte[] { 4, 5, 6, 7 }; + var revokedarray = new RevokedCertificate(serial); + crlBuilder.RevokedCertificates.Add(revokedarray); + string serstring = "709876543210"; + var revokedstring = new RevokedCertificate(serstring); + crlBuilder.RevokedCertificates.Add(revokedstring); + + crlBuilder.CrlExtensions.Add(X509Extensions.BuildCRLNumber(1111)); + crlBuilder.CrlExtensions.Add(X509Extensions.BuildAuthorityKeyIdentifier(m_issuerCert)); + + IX509CRL ix509Crl; + using (RSA rsa = m_issuerCert.GetRSAPrivateKey()) + { + X509SignatureGenerator generator = X509SignatureGenerator.CreateForRSA(rsa, RSASignaturePadding.Pkcs1); + ix509Crl = crlBuilder.CreateSignature(generator); + } + X509CRL x509Crl = new X509CRL(ix509Crl); + Assert.NotNull(x509Crl); + Assert.NotNull(x509Crl.CrlExtensions); + Assert.NotNull(x509Crl.RevokedCertificates); + Assert.AreEqual(m_issuerCert.SubjectName.RawData, x509Crl.IssuerName.RawData); + Assert.AreEqual(crlBuilder.ThisUpdate, x509Crl.ThisUpdate); + Assert.AreEqual(crlBuilder.NextUpdate, x509Crl.NextUpdate); + Assert.AreEqual(2, x509Crl.RevokedCertificates.Count); + Assert.AreEqual(serial, x509Crl.RevokedCertificates[0].UserCertificate); + Assert.AreEqual(serstring, x509Crl.RevokedCertificates[1].SerialNumber); + Assert.AreEqual(2, x509Crl.CrlExtensions.Count); + using (var issuerPubKey = new X509Certificate2(m_issuerCert.RawData)) + { + Assert.True(x509Crl.VerifySignature(issuerPubKey, true)); + } + } + #endregion + + #region Private Methods + private string WriteCRL(X509CRL x509Crl) + { + var stringBuilder = new StringBuilder(); + stringBuilder.AppendLine($"Issuer: {x509Crl.Issuer}"); + stringBuilder.AppendLine($"ThisUpdate: {x509Crl.ThisUpdate}"); + stringBuilder.AppendLine($"NextUpdate: {x509Crl.NextUpdate}"); + stringBuilder.AppendLine($"RevokedCertificates:"); + foreach (var revokedCert in x509Crl.RevokedCertificates) + { + stringBuilder.Append($"{revokedCert.SerialNumber:20}, {revokedCert.RevocationDate}, "); + foreach (var entryExt in revokedCert.CrlEntryExtensions) + { + stringBuilder.Append($"{entryExt.Format(false)} "); + } + stringBuilder.AppendLine(""); + } + stringBuilder.AppendLine($"Extensions:"); + foreach (var extension in x509Crl.CrlExtensions) + { + stringBuilder.AppendLine($"{extension.Format(false)}"); + } + return stringBuilder.ToString(); + } + #endregion + + #region Private Fields + X509Certificate2 m_issuerCert; + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs new file mode 100644 index 00000000..7ea8e6f4 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForECDsa.cs @@ -0,0 +1,386 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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/ + * ======================================================================*/ + +#if ECC_SUPPORT +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using NUnit.Framework; + +namespace Opc.Ua.Security.Certificates.Tests +{ + /// + /// Tests for the CertificateBuilder class. + /// + [TestFixture, Category("Certificate"), Category("ECDsa")] + [Parallelizable] + [SetCulture("en-us")] + public class CertificateTestsForECDsa + { + #region DataPointSources + public const string Subject = "CN=Test Cert Subject"; + + [DatapointSource] + public CertificateAsset[] CertificateTestCases = + new AssetCollection(TestUtils.EnumerateTestAssets("*.?er")).ToArray(); + + [DatapointSource] + public ECCurveHashPair[] ECCurveHashPairs = GetECCurveHashPairs(); + #endregion + + #region Test Setup + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected void OneTimeSetUp() + { + } + + /// + /// Clean up the Test PKI folder + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + #endregion + + #region Test Methods + /// + /// Verify self signed app certs. Use one builder to create multiple certs. + /// + [Test] + public void VerifyOneSelfSignedAppCertForAll() + { + var builder = CertificateBuilder.Create(Subject) + .SetNotBefore(DateTime.Today.AddYears(-1)) + .SetNotAfter(DateTime.Today.AddYears(25)) + .AddExtension(new X509SubjectAltNameExtension("urn:opcfoundation.org:mypc", new string[] { "mypc", "mypc.opcfoundation.org", "192.168.1.100" })); + byte[] previousSerialNumber = null; + foreach (var eCCurveHash in ECCurveHashPairs) + { + if (!eCCurveHash.Curve.IsNamed) continue; + using (var cert = builder + .SetHashAlgorithm(eCCurveHash.HashAlgorithmName) + .SetECCurve(eCCurveHash.Curve) + .CreateForECDsa()) + { + Assert.NotNull(cert); + WriteCertificate(cert, $"Default cert with ECDsa {eCCurveHash.Curve.Oid.FriendlyName} {eCCurveHash.HashAlgorithmName} signature."); + Assert.AreEqual(eCCurveHash.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + // ensure serial numbers are different + Assert.AreNotEqual(previousSerialNumber, cert.GetSerialNumber()); + X509PfxUtils.VerifyECDsaKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + } + } + + /// + /// Create the default RSA certificate. + /// + [Theory, Repeat(10)] + public void CreateSelfSignedForECDsaDefaultTest(ECCurveHashPair eccurveHashPair) + { + // default cert + X509Certificate2 cert = CertificateBuilder.Create(Subject) + .SetECCurve(eccurveHashPair.Curve) + .CreateForECDsa(); + Assert.NotNull(cert); + WriteCertificate(cert, "Default ECDsa cert"); + using (var privateKey = cert.GetECDsaPrivateKey()) + { + Assert.NotNull(privateKey); + privateKey.ExportParameters(false); + privateKey.ExportParameters(true); + } + using (var publicKey = cert.GetECDsaPublicKey()) + { + Assert.NotNull(publicKey); + publicKey.ExportParameters(false); + } + Assert.AreEqual(X509Defaults.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + Assert.GreaterOrEqual(DateTime.UtcNow, cert.NotBefore); + Assert.GreaterOrEqual(DateTime.UtcNow.AddMonths(X509Defaults.LifeTime), cert.NotAfter.ToUniversalTime()); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + Assert.AreEqual(0, basicConstraintsExtension.PathLengthConstraint); + var keyUsage = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(keyUsage); + X509PfxUtils.VerifyECDsaKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert), "Verify self signed."); + } + + [Theory, Repeat(10)] + public void CreateSelfSignedForECDsaAllFields( + ECCurveHashPair ecCurveHashPair + ) + { + // set dates and extension + var applicationUri = "urn:opcfoundation.org:mypc"; + var domains = new string[] { "mypc", "mypc.opcfoundation.org", "192.168.1.100" }; + var cert = CertificateBuilder.Create(Subject) + .SetNotBefore(DateTime.Today.AddYears(-1)) + .SetNotAfter(DateTime.Today.AddYears(25)) + .AddExtension(new X509SubjectAltNameExtension(applicationUri, domains)) + .SetHashAlgorithm(ecCurveHashPair.HashAlgorithmName) + .SetECCurve(ecCurveHashPair.Curve) + .CreateForECDsa(); + Assert.NotNull(cert); + WriteCertificate(cert, $"Default cert ECDsa {ecCurveHashPair.Curve.Oid.FriendlyName} with modified lifetime and alt name extension"); + Assert.AreEqual(Subject, cert.Subject); + using (var privateKey = cert.GetECDsaPrivateKey()) + { + Assert.NotNull(privateKey); + privateKey.ExportParameters(false); + privateKey.ExportParameters(true); + } + using (var publicKey = cert.GetECDsaPublicKey()) + { + Assert.NotNull(publicKey); + publicKey.ExportParameters(false); + } + Assert.AreEqual(ecCurveHashPair.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + X509PfxUtils.VerifyECDsaKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Theory, Repeat(10)] + public void CreateCACertForECDsa( + ECCurveHashPair ecCurveHashPair + ) + { + // create a CA cert + var cert = CertificateBuilder.Create(Subject) + .SetCAConstraint() + .SetHashAlgorithm(ecCurveHashPair.HashAlgorithmName) + .AddExtension(X509Extensions.BuildX509CRLDistributionPoints("http://myca/mycert.crl")) + .SetECCurve(ecCurveHashPair.Curve) + .CreateForECDsa(); + Assert.NotNull(cert); + WriteCertificate(cert, "Default cert with RSA {keyHashPair.KeySize} {keyHashPair.HashAlgorithmName} and CRL distribution points"); + Assert.AreEqual(ecCurveHashPair.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + Assert.False(basicConstraintsExtension.HasPathLengthConstraint); + X509PfxUtils.VerifyECDsaKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Test] + public void CreateECDsaDefaultWithSerialTest() + { + var eccurve = ECCurve.NamedCurves.nistP256; + // default cert + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumberLength(0) + .SetECCurve(eccurve) + .CreateForECDsa(); + } + ); + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumberLength(X509Defaults.SerialNumberLengthMax + 1) + .SetECCurve(eccurve) + .CreateForECDsa(); + } + ); + var builder = CertificateBuilder.Create(Subject) + .SetSerialNumberLength(X509Defaults.SerialNumberLengthMax) + .SetECCurve(eccurve); + + // ensure every cert has a different serial number + var cert1 = builder.CreateForECDsa(); + var cert2 = builder.CreateForECDsa(); + WriteCertificate(cert1, "Cert1 with max length serial number"); + WriteCertificate(cert2, "Cert2 with max length serial number"); + Assert.GreaterOrEqual(X509Defaults.SerialNumberLengthMax, cert1.GetSerialNumber().Length); + Assert.GreaterOrEqual(X509Defaults.SerialNumberLengthMax, cert2.GetSerialNumber().Length); + Assert.AreNotEqual(cert1.SerialNumber, cert2.SerialNumber); + } + + [Test] + public void CreateECDsaManualSerialTest() + { + var eccurve = ECCurve.NamedCurves.nistP256; + // default cert + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumber(new byte[0]) + .SetECCurve(eccurve) + .CreateForECDsa(); + } + ); + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumber(new byte[X509Defaults.SerialNumberLengthMax + 1]) + .SetECCurve(eccurve) + .CreateForECDsa(); + } + ); + var serial = new byte[X509Defaults.SerialNumberLengthMax]; + for (int i = 0; i < serial.Length; i++) + { + serial[i] = (byte)((i + 1) | 0x80); + } + + // test if sign bit is cleared + var builder = CertificateBuilder.Create(Subject) + .SetSerialNumber(serial); + + serial[serial.Length - 1] &= 0x7f; + Assert.AreEqual(serial, builder.GetSerialNumber()); + var cert1 = builder.SetECCurve(eccurve).CreateForECDsa(); + WriteCertificate(cert1, "Cert1 with max length serial number"); + TestContext.Out.WriteLine($"Serial: {serial.ToHexString(true)}"); + Assert.AreEqual(serial, cert1.GetSerialNumber()); + Assert.AreEqual(X509Defaults.SerialNumberLengthMax, cert1.GetSerialNumber().Length); + + // clear sign bit + builder.SetSerialNumberLength(X509Defaults.SerialNumberLengthMax); + + var cert2 = builder.SetECCurve(eccurve).CreateForECDsa(); + WriteCertificate(cert2, "Cert2 with max length serial number"); + TestContext.Out.WriteLine($"Serial: {cert2.SerialNumber}"); + Assert.GreaterOrEqual(X509Defaults.SerialNumberLengthMax, cert2.GetSerialNumber().Length); + Assert.AreNotEqual(cert1.SerialNumber, cert2.SerialNumber); + } + + [Theory] + public void CreateForECDsaWithGeneratorTest( + ECCurveHashPair ecCurveHashPair + ) + { + // default signing cert with custom key + X509Certificate2 signingCert = CertificateBuilder.Create(Subject) + .SetCAConstraint() + .SetHashAlgorithm(HashAlgorithmName.SHA512) + .SetECCurve(ecCurveHashPair.Curve) + .CreateForECDsa(); + + WriteCertificate(signingCert, $"Signing ECDsa {signingCert.GetECDsaPublicKey().KeySize} cert"); + + using (ECDsa ecdsaPrivateKey = signingCert.GetECDsaPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForECDsa(ecdsaPrivateKey); + var cert = CertificateBuilder.Create("CN=App Cert") + .SetIssuer(new X509Certificate2(signingCert.RawData)) + .CreateForRSA(generator); + Assert.NotNull(cert); + WriteCertificate(cert, $"Default signed ECDsa cert"); + } + + using (ECDsa ecdsaPrivateKey = signingCert.GetECDsaPrivateKey()) + using (ECDsa ecdsaPublicKey = signingCert.GetECDsaPublicKey()) + { + var generator = X509SignatureGenerator.CreateForECDsa(ecdsaPrivateKey); + var cert = CertificateBuilder.Create("CN=App Cert") + .SetHashAlgorithm(ecCurveHashPair.HashAlgorithmName) + .SetIssuer(new X509Certificate2(signingCert.RawData)) + .SetECDsaPublicKey(ecdsaPublicKey) + .CreateForECDsa(generator); + Assert.NotNull(cert); + WriteCertificate(cert, $"Default signed ECDsa cert with Public Key"); + } + + using (ECDsa ecdsaPrivateKey = signingCert.GetECDsaPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForECDsa(ecdsaPrivateKey); + var cert = CertificateBuilder.Create("CN=App Cert") + .SetHashAlgorithm(ecCurveHashPair.HashAlgorithmName) + .SetIssuer(new X509Certificate2(signingCert.RawData)) + .SetECCurve(ecCurveHashPair.Curve) + .CreateForECDsa(generator); + Assert.NotNull(cert); + WriteCertificate(cert, $"Default signed RSA cert"); + } + + // ensure invalid path throws argument exception + Assert.Throws(() => { + using (ECDsa ecdsaPrivateKey = signingCert.GetECDsaPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForECDsa(ecdsaPrivateKey); + var cert = CertificateBuilder.Create("CN=App Cert") + .SetHashAlgorithm(ecCurveHashPair.HashAlgorithmName) + .SetECCurve(ecCurveHashPair.Curve) + .CreateForECDsa(generator); + } + }); + } + #endregion + + #region Private Methods + private static ECCurveHashPair[] GetECCurveHashPairs() + { + var result = new ECCurveHashPairCollection { + { ECCurve.NamedCurves.nistP256, HashAlgorithmName.SHA256 }, + { ECCurve.NamedCurves.nistP384, HashAlgorithmName.SHA384 } }; + if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + result.AddRange(new ECCurveHashPairCollection { + { ECCurve.NamedCurves.brainpoolP256r1, HashAlgorithmName.SHA256 }, + { ECCurve.NamedCurves.brainpoolP384r1, HashAlgorithmName.SHA384 }}); + } + return result.ToArray(); + } + + private void WriteCertificate(X509Certificate2 cert, string message) + { + TestContext.Out.WriteLine(message); + TestContext.Out.WriteLine(cert); + foreach (var ext in cert.Extensions) + { + TestContext.Out.WriteLine(ext.Format(false)); + } + } + #endregion + + #region Private Fields + #endregion + } +} +#endif + diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs new file mode 100644 index 00000000..a3930425 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/CertificateTestsForRSA.cs @@ -0,0 +1,412 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Linq; +using System.Reflection; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using NUnit.Framework; + +namespace Opc.Ua.Security.Certificates.Tests +{ + /// + /// Tests for the CertificateBuilder class. + /// + [TestFixture, Category("Certificate"), Category("RSA")] + [Parallelizable] + [SetCulture("en-us")] + public class CertificateTestsForRSA + { + #region DataPointSources + public const string Subject = "CN=Test Cert Subject"; + + [DatapointSource] + public CertificateAsset[] CertificateTestCases = new AssetCollection(TestUtils.EnumerateTestAssets("*.?er")).ToArray(); + + [DatapointSource] + public KeyHashPair[] KeyHashPairs = new KeyHashPairCollection { + { 2048, HashAlgorithmName.SHA256 }, + { 3072, HashAlgorithmName.SHA384 }, + { 4096, HashAlgorithmName.SHA512 } }.ToArray(); + #endregion + + #region Test Setup + /// + /// Set up a Global Discovery Server and Client instance and connect the session + /// + [OneTimeSetUp] + protected void OneTimeSetUp() + { + } + + /// + /// Clean up the Test PKI folder + /// + [OneTimeTearDown] + protected void OneTimeTearDown() + { + } + #endregion + + #region Test Methods + /// + /// Verify self signed app certs. Use one builder to create multiple certs. + /// + [Test] + public void VerifyOneSelfSignedAppCertForAll() + { + var builder = CertificateBuilder.Create(Subject) + .SetNotBefore(DateTime.Today.AddYears(-1)) + .SetNotAfter(DateTime.Today.AddYears(25)) + .AddExtension(new X509SubjectAltNameExtension("urn:opcfoundation.org:mypc", new string[] { "mypc", "mypc.opcfoundation.org", "192.168.1.100" })); + byte[] previousSerialNumber = null; + foreach (var keyHash in KeyHashPairs) + { + using (var cert = builder + .SetHashAlgorithm(keyHash.HashAlgorithmName) + .SetRSAKeySize(keyHash.KeySize) + .CreateForRSA()) + { + Assert.NotNull(cert); + WriteCertificate(cert, $"Default cert with RSA {keyHash.KeySize} {keyHash.HashAlgorithmName} signature."); + Assert.AreEqual(keyHash.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + // ensure serial numbers are different + Assert.AreNotEqual(previousSerialNumber, cert.GetSerialNumber()); + X509PfxUtils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + } + } + + /// + /// Create the default RSA certificate. + /// + [Test] + public void CreateSelfSignedForRSADefaultTest() + { + // default cert + X509Certificate2 cert = CertificateBuilder.Create(Subject).CreateForRSA(); + Assert.NotNull(cert); + WriteCertificate(cert, "Default RSA cert"); + using (var privateKey = cert.GetRSAPrivateKey()) + { + Assert.NotNull(privateKey); + privateKey.ExportParameters(false); + privateKey.ExportParameters(true); + } + using (var publicKey = cert.GetRSAPublicKey()) + { + Assert.NotNull(publicKey); + Assert.AreEqual(X509Defaults.RSAKeySize, publicKey.KeySize); + publicKey.ExportParameters(false); + } + Assert.AreEqual(X509Defaults.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + Assert.GreaterOrEqual(DateTime.UtcNow, cert.NotBefore); + Assert.GreaterOrEqual(DateTime.UtcNow.AddMonths(X509Defaults.LifeTime), cert.NotAfter.ToUniversalTime()); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Theory] + public void CreateSelfSignedForRSADefaultHashCustomKey( + KeyHashPair keyHashPair + ) + { + // default cert with custom key + X509Certificate2 cert = CertificateBuilder.Create(Subject) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(); + WriteCertificate(cert, $"Default RSA {keyHashPair.KeySize} cert"); + Assert.AreEqual(Subject, cert.Subject); + Assert.AreEqual(keyHashPair.KeySize, cert.GetRSAPublicKey().KeySize); + Assert.AreEqual(X509Defaults.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Theory] + public void CreateSelfSignedForRSACustomHashDefaultKey( + KeyHashPair keyHashPair + ) + { + // default cert with custom HashAlgorithm + var cert = CertificateBuilder.Create(Subject) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .CreateForRSA(); + Assert.NotNull(cert); + WriteCertificate(cert, $"Default RSA {keyHashPair.HashAlgorithmName} cert"); + Assert.AreEqual(Subject, cert.Subject); + Assert.AreEqual(X509Defaults.RSAKeySize, cert.GetRSAPublicKey().KeySize); + Assert.AreEqual(keyHashPair.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Theory] + public void CreateSelfSignedForRSAAllFields( + KeyHashPair keyHashPair + ) + { + // set dates and extension + var applicationUri = "urn:opcfoundation.org:mypc"; + var domains = new string[] { "mypc", "mypc.opcfoundation.org", "192.168.1.100" }; + var cert = CertificateBuilder.Create(Subject) + .SetNotBefore(DateTime.Today.AddYears(-1)) + .SetNotAfter(DateTime.Today.AddYears(25)) + .AddExtension(new X509SubjectAltNameExtension(applicationUri, domains)) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(); + Assert.NotNull(cert); + WriteCertificate(cert, $"Default cert RSA {keyHashPair.KeySize} with modified lifetime and alt name extension"); + Assert.AreEqual(Subject, cert.Subject); + using (var privateKey = cert.GetRSAPrivateKey()) + { + Assert.NotNull(privateKey); + privateKey.ExportParameters(false); + privateKey.ExportParameters(true); + } + using (var publicKey = cert.GetRSAPublicKey()) + { + Assert.NotNull(publicKey); + publicKey.ExportParameters(false); + } + Assert.AreEqual(keyHashPair.KeySize, cert.GetRSAPublicKey().KeySize); + Assert.AreEqual(keyHashPair.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Theory] + public void CreateCACertForRSA( + KeyHashPair keyHashPair + ) + { + // create a CA cert + var cert = CertificateBuilder.Create(Subject) + .SetCAConstraint(-1) + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .AddExtension(X509Extensions.BuildX509CRLDistributionPoints("http://myca/mycert.crl")) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(); + Assert.NotNull(cert); + WriteCertificate(cert, "Default cert with RSA {keyHashPair.KeySize} {keyHashPair.HashAlgorithmName} and CRL distribution points"); + Assert.AreEqual(keyHashPair.KeySize, cert.GetRSAPublicKey().KeySize); + Assert.AreEqual(keyHashPair.HashAlgorithmName, Oids.GetHashAlgorithmName(cert.SignatureAlgorithm.Value)); + var basicConstraintsExtension = X509Extensions.FindExtension(cert.Extensions); + Assert.NotNull(basicConstraintsExtension); + Assert.True(basicConstraintsExtension.CertificateAuthority); + Assert.False(basicConstraintsExtension.HasPathLengthConstraint); + X509Utils.VerifyRSAKeyPair(cert, cert, true); + Assert.True(X509Utils.VerifySelfSigned(cert)); + } + + [Test] + public void CreateRSADefaultWithSerialTest() + { + // default cert + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumberLength(0) + .CreateForRSA(); + } + ); + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumberLength(X509Defaults.SerialNumberLengthMax + 1) + .CreateForRSA(); + } + ); + var builder = CertificateBuilder.Create(Subject) + .SetSerialNumberLength(X509Defaults.SerialNumberLengthMax); + + // ensure every cert has a different serial number + var cert1 = builder.CreateForRSA(); + var cert2 = builder.CreateForRSA(); + WriteCertificate(cert1, "Cert1 with max length serial number"); + WriteCertificate(cert2, "Cert2 with max length serial number"); + Assert.GreaterOrEqual(X509Defaults.SerialNumberLengthMax, cert1.GetSerialNumber().Length); + Assert.GreaterOrEqual(X509Defaults.SerialNumberLengthMax, cert2.GetSerialNumber().Length); + Assert.AreNotEqual(cert1.SerialNumber, cert2.SerialNumber); + } + + [Test] + public void CreateRSAManualSerialTest() + { + // default cert + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumber(new byte[0]) + .CreateForRSA(); + } + ); + Assert.Throws( + () => { + CertificateBuilder.Create(Subject) + .SetSerialNumber(new byte[X509Defaults.SerialNumberLengthMax + 1]) + .CreateForRSA(); + } + ); + var serial = new byte[X509Defaults.SerialNumberLengthMax]; + for (int i = 0; i < serial.Length; i++) + { + serial[i] = (byte)((i + 1) | 0x80); + } + + // test if sign bit is cleared + var builder = CertificateBuilder.Create(Subject) + .SetSerialNumber(serial); + serial[serial.Length - 1] &= 0x7f; + Assert.AreEqual(serial, builder.GetSerialNumber()); + var cert1 = builder.CreateForRSA(); + WriteCertificate(cert1, "Cert1 with max length serial number"); + TestContext.Out.WriteLine($"Serial: {serial.ToHexString(true)}"); + Assert.AreEqual(serial, cert1.GetSerialNumber()); + Assert.AreEqual(X509Defaults.SerialNumberLengthMax, cert1.GetSerialNumber().Length); + + // clear sign bit + builder.SetSerialNumberLength(X509Defaults.SerialNumberLengthMax); + + var cert2 = builder.CreateForRSA(); + WriteCertificate(cert2, "Cert2 with max length serial number"); + TestContext.Out.WriteLine($"Serial: {cert2.SerialNumber}"); + Assert.GreaterOrEqual(X509Defaults.SerialNumberLengthMax, cert2.GetSerialNumber().Length); + Assert.AreNotEqual(cert1.SerialNumber, cert2.SerialNumber); + } + + [Theory] + public void CreateForRSAWithGeneratorTest( + KeyHashPair keyHashPair + ) + { + // default signing cert with custom key + using (X509Certificate2 signingCert = CertificateBuilder.Create(Subject) + .SetCAConstraint() + .SetHashAlgorithm(HashAlgorithmName.SHA512) + .SetRSAKeySize(2048) + .CreateForRSA()) + { + WriteCertificate(signingCert, $"Signing RSA {signingCert.GetRSAPublicKey().KeySize} cert"); + + using (RSA rsaPrivateKey = signingCert.GetRSAPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForRSA(rsaPrivateKey, RSASignaturePadding.Pkcs1); + using (var issuer = new X509Certificate2(signingCert.RawData)) + using (var cert = CertificateBuilder.Create("CN=App Cert") + .SetIssuer(issuer) + .CreateForRSA(generator)) + { + Assert.NotNull(cert); + WriteCertificate(cert, $"Default signed RSA cert"); + } + } + + using (RSA rsaPrivateKey = signingCert.GetRSAPrivateKey()) + using (RSA rsaPublicKey = signingCert.GetRSAPublicKey()) + { + var generator = X509SignatureGenerator.CreateForRSA(rsaPrivateKey, RSASignaturePadding.Pkcs1); + using (var issuer = new X509Certificate2(signingCert.RawData)) + using (var cert = CertificateBuilder.Create("CN=App Cert") + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetIssuer(issuer) + .SetRSAPublicKey(rsaPublicKey) + .CreateForRSA(generator)) + { + Assert.NotNull(cert); + WriteCertificate(cert, $"Default signed RSA cert with Public Key"); + } + } + + using (RSA rsaPrivateKey = signingCert.GetRSAPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForRSA(rsaPrivateKey, RSASignaturePadding.Pkcs1); + using (var issuer = new X509Certificate2(signingCert.RawData)) + using (var cert = CertificateBuilder.Create("CN=App Cert") + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetIssuer(issuer) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(generator)) + { + Assert.NotNull(cert); + WriteCertificate(cert, $"Default signed RSA cert"); + } + } + + // ensure invalid path throws argument exception + Assert.Throws(() => { + using (RSA rsaPrivateKey = signingCert.GetRSAPrivateKey()) + { + var generator = X509SignatureGenerator.CreateForRSA(rsaPrivateKey, RSASignaturePadding.Pkcs1); + _ = CertificateBuilder.Create("CN=App Cert") + .SetHashAlgorithm(keyHashPair.HashAlgorithmName) + .SetRSAKeySize(keyHashPair.KeySize) + .CreateForRSA(generator); + } + }); + } + } + #endregion + + #region Private Methods + private void WriteCertificate(X509Certificate2 cert, string message) + { + TestContext.Out.WriteLine(message); + TestContext.Out.WriteLine(cert); + foreach (var ext in cert.Extensions) + { + TestContext.Out.WriteLine(ext.Format(false)); + } + } + #endregion + + #region Private Fields + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/ExtensionTests.cs b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/ExtensionTests.cs new file mode 100644 index 00000000..89c04767 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/ExtensionTests.cs @@ -0,0 +1,210 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Numerics; +using System.Security.Cryptography.X509Certificates; +using NUnit.Framework; + +namespace Opc.Ua.Security.Certificates.Tests +{ + /// + /// Tests for the CertificateFactory class. + /// + [TestFixture, Category("X509Extensions")] + [Parallelizable] + [SetCulture("en-us")] + public class ExtensionTests + { + #region DataPointSources + [DatapointSource] + public CertificateAsset[] CertificateTestCases = new AssetCollection(TestUtils.EnumerateTestAssets("*.?er")).ToArray(); + #endregion + + #region Test Methods + [Theory] + public void DecodeExtensions( + CertificateAsset certAsset + ) + { + using (var x509Cert = new X509Certificate2(certAsset.Cert)) + { + Assert.NotNull(x509Cert); + TestContext.Out.WriteLine($"CertificateAsset:"); + TestContext.Out.WriteLine(x509Cert); + var altName = X509Extensions.FindExtension(x509Cert); + if (altName != null) + { + TestContext.Out.WriteLine($"X509SubjectAltNameExtension:"); + TestContext.Out.WriteLine(altName?.Format(true)); + var ext = new X509Extension(altName.Oid, altName.RawData, altName.Critical); + TestContext.Out.WriteLine(ext.Format(true)); + } + var authority = X509Extensions.FindExtension(x509Cert); + if (authority != null) + { + TestContext.Out.WriteLine($"X509AuthorityKeyIdentifierExtension:"); + TestContext.Out.WriteLine(authority?.Format(true)); + var ext = new X509Extension(authority.Oid, authority.RawData, authority.Critical); + TestContext.Out.WriteLine(ext.Format(true)); + } + TestContext.Out.WriteLine($"All extensions:"); + foreach (var extension in x509Cert.Extensions) + { + TestContext.Out.WriteLine(extension.Format(true)); + } + } + } + + /// + /// Verify encode and decode of authority key identifier. + /// + [Test] + public void VerifyX509AuthorityKeyIdentifierExtension() + { + var authorityName = new X500DistinguishedName("CN=Test,O=OPC Foundation,DC=localhost"); + byte[] serialNumber = new byte[] { 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + byte[] subjectKeyIdentifier = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + var aki = new X509AuthorityKeyIdentifierExtension(subjectKeyIdentifier, authorityName, serialNumber); + Assert.NotNull(aki); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(aki.Format(true)); + Assert.AreEqual(authorityName, aki.Issuer); + Assert.AreEqual(serialNumber, aki.GetSerialNumber()); + Assert.AreEqual(AsnUtils.ToHexString(serialNumber, true), aki.SerialNumber); + Assert.AreEqual(subjectKeyIdentifier, aki.GetKeyIdentifier()); + var akidecoded = new X509AuthorityKeyIdentifierExtension(aki.Oid, aki.RawData, aki.Critical); + TestContext.Out.WriteLine("Decoded:"); + TestContext.Out.WriteLine(akidecoded.Format(true)); + Assert.AreEqual(aki.RawData, akidecoded.RawData); + Assert.AreEqual(authorityName.ToString(), akidecoded.Issuer.ToString()); + Assert.AreEqual(serialNumber, akidecoded.GetSerialNumber()); + Assert.AreEqual(AsnUtils.ToHexString(serialNumber, true), akidecoded.SerialNumber); + Assert.AreEqual(subjectKeyIdentifier, akidecoded.GetKeyIdentifier()); + akidecoded = new X509AuthorityKeyIdentifierExtension(aki.Oid.Value, aki.RawData, aki.Critical); + TestContext.Out.WriteLine("Decoded2:"); + TestContext.Out.WriteLine(akidecoded.Format(true)); + Assert.AreEqual(aki.RawData, akidecoded.RawData); + Assert.AreEqual(authorityName.ToString(), akidecoded.Issuer.ToString()); + Assert.AreEqual(serialNumber, akidecoded.GetSerialNumber()); + Assert.AreEqual(AsnUtils.ToHexString(serialNumber, true), akidecoded.SerialNumber); + Assert.AreEqual(subjectKeyIdentifier, akidecoded.GetKeyIdentifier()); + } + + /// + /// Verify authority Key Identifier API. Only Key ID. + /// + [Test] + public void VerifyX509AuthorityKeyIdentifierExtensionOnlyKeyID() + { + byte[] subjectKeyIdentifier = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + var aki = new X509AuthorityKeyIdentifierExtension(subjectKeyIdentifier); + Assert.NotNull(aki); + TestContext.Out.WriteLine("Encoded:"); + TestContext.Out.WriteLine(aki.Format(true)); + Assert.Null(aki.Issuer); + Assert.Null(aki.GetSerialNumber()); + Assert.AreEqual(string.Empty, aki.SerialNumber); + Assert.AreEqual(subjectKeyIdentifier, aki.GetKeyIdentifier()); + var akidecoded = new X509AuthorityKeyIdentifierExtension(aki.Oid, aki.RawData, aki.Critical); + TestContext.Out.WriteLine("Decoded:"); + TestContext.Out.WriteLine(akidecoded.Format(true)); + Assert.AreEqual(aki.RawData, akidecoded.RawData); + Assert.Null(aki.Issuer); + Assert.Null(aki.GetSerialNumber()); + Assert.AreEqual(string.Empty, aki.SerialNumber); + Assert.AreEqual(subjectKeyIdentifier, akidecoded.GetKeyIdentifier()); + akidecoded = new X509AuthorityKeyIdentifierExtension(aki.Oid.Value, aki.RawData, aki.Critical); + TestContext.Out.WriteLine("Decoded2:"); + TestContext.Out.WriteLine(akidecoded.Format(true)); + Assert.AreEqual(aki.RawData, akidecoded.RawData); + Assert.Null(aki.Issuer); + Assert.Null(aki.GetSerialNumber()); + Assert.AreEqual(string.Empty, aki.SerialNumber); + Assert.AreEqual(subjectKeyIdentifier, akidecoded.GetKeyIdentifier()); + } + + + /// + /// Verify encode and decode of authority key identifier. + /// + [Test] + public void VerifyX509SubjectAlternateNameExtension() + { + string applicationUri = "urn:opcfoundation.org"; + string[] domainNames = { "mypc.mydomain.com", "192.168.100.100", "1234:5678::1" }; + TestContext.Out.WriteLine("Encoded:"); + var san = new X509SubjectAltNameExtension(applicationUri, domainNames); + TestContext.Out.WriteLine(san.Format(true)); + var decodedsan = new X509SubjectAltNameExtension(san.Oid.Value, san.RawData, san.Critical); + Assert.NotNull(decodedsan); + TestContext.Out.WriteLine("Decoded:"); + TestContext.Out.WriteLine(decodedsan.Format(true)); + Assert.NotNull(decodedsan.DomainNames); + Assert.NotNull(decodedsan.IPAddresses); + Assert.NotNull(decodedsan.Uris); + Assert.AreEqual(1, decodedsan.Uris.Count); + Assert.AreEqual(1, decodedsan.DomainNames.Count); + Assert.AreEqual(2, decodedsan.IPAddresses.Count); + Assert.AreEqual(decodedsan.Oid.Value, san.Oid.Value); + Assert.AreEqual(decodedsan.Critical, san.Critical); + Assert.AreEqual(applicationUri, decodedsan.Uris[0]); + Assert.AreEqual(domainNames[0], decodedsan.DomainNames[0]); + Assert.AreEqual(domainNames[1], decodedsan.IPAddresses[0]); + Assert.AreEqual(domainNames[2], decodedsan.IPAddresses[1]); + } + + /// + /// Verify encode and decode of CRL Number. + /// + [Test] + public void VerifyCRLNumberExtension() + { + BigInteger crlNumber = 123456789; + TestContext.Out.WriteLine("Encoded:"); + var number = new X509CrlNumberExtension(crlNumber); + TestContext.Out.WriteLine(number.Format(true)); + var decodednumber = new X509CrlNumberExtension(number.Oid.Value, number.RawData, number.Critical); + Assert.NotNull(decodednumber); + TestContext.Out.WriteLine("Decoded:"); + TestContext.Out.WriteLine(decodednumber.Format(true)); + Assert.AreEqual(crlNumber, decodednumber.CrlNumber); + } + + #endregion + + #region Private Methods + #endregion + + #region Private Fields + #endregion + } + +} diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Main.cs b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Main.cs new file mode 100644 index 00000000..c0075c11 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Main.cs @@ -0,0 +1,43 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 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; + +#if NETFRAMEWORK +namespace Opc.Ua.Security.Certificates.Tests +{ + static class Program + { + // Main Method + static public void Main(String[] args) + { + } + } +} +#endif diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj new file mode 100644 index 00000000..70d477bf --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/Opc.Ua.Security.Certificates.Tests.csproj @@ -0,0 +1,46 @@ + + + + Exe + $(TestsTargetFrameworks) + Opc.Ua.Security.Certificates.Tests + + + + $(DefineConstants);ECC_SUPPORT + + + + $(DefineConstants);ECC_SUPPORT + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + Always + + + + diff --git a/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/TestUtils.cs b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/TestUtils.cs new file mode 100644 index 00000000..f1591501 --- /dev/null +++ b/IOB-OPC-UA/Tests/Opc.Ua.Security.Certificates.Tests/TestUtils.cs @@ -0,0 +1,284 @@ +/* ======================================================================== + * Copyright (c) 2005-2018 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.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Opc.Ua.Security.Certificates.Tests +{ + #region KeyHashPair Helper + public class KeyHashPair : IFormattable + { + public KeyHashPair(ushort keySize, HashAlgorithmName hashAlgorithmName) + { + KeySize = keySize; + HashAlgorithmName = hashAlgorithmName; + if (hashAlgorithmName == HashAlgorithmName.SHA1) + { + HashSize = 160; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA256) + { + HashSize = 256; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA384) + { + HashSize = 384; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA512) + { + HashSize = 512; + } + } + + public ushort KeySize; + public ushort HashSize; + public HashAlgorithmName HashAlgorithmName; + + public string ToString(string format, IFormatProvider formatProvider) + { + return $"{KeySize}-{HashAlgorithmName}"; + } + } + + public class KeyHashPairCollection : List + { + public KeyHashPairCollection() { } + public KeyHashPairCollection(IEnumerable collection) : base(collection) { } + public KeyHashPairCollection(int capacity) : base(capacity) { } + public static KeyHashPairCollection ToJsonValidationDataCollection(KeyHashPair[] values) + { + return values != null ? new KeyHashPairCollection(values) : new KeyHashPairCollection(); + } + + public void Add(ushort keySize, HashAlgorithmName hashAlgorithmName) + { + Add(new KeyHashPair(keySize, hashAlgorithmName)); + } + } + #endregion + +#if ECC_SUPPORT + #region ECCurveHashPair Helper + public class ECCurveHashPair : IFormattable + { + public ECCurveHashPair(ECCurve curve, HashAlgorithmName hashAlgorithmName) + { + Curve = curve; + HashAlgorithmName = hashAlgorithmName; + if (hashAlgorithmName == HashAlgorithmName.SHA1) + { + HashSize = 160; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA256) + { + HashSize = 256; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA384) + { + HashSize = 384; + } + else if (hashAlgorithmName == HashAlgorithmName.SHA512) + { + HashSize = 512; + } + } + + public ECCurve Curve; + public ushort HashSize; + public HashAlgorithmName HashAlgorithmName; + + public string ToString(string format, IFormatProvider formatProvider) + { + try + { + var friendlyName = Curve.Oid?.FriendlyName ?? "Unknown"; + return $"{friendlyName}-{HashAlgorithmName}"; + } + catch + { + return $"unknown-{HashAlgorithmName}"; + } + } + } + + public class ECCurveHashPairCollection : List + { + public ECCurveHashPairCollection() { } + public ECCurveHashPairCollection(IEnumerable collection) : base(collection) { } + public ECCurveHashPairCollection(int capacity) : base(capacity) { } + public static ECCurveHashPairCollection ToJsonValidationDataCollection(ECCurveHashPair[] values) + { + return values != null ? new ECCurveHashPairCollection(values) : new ECCurveHashPairCollection(); + } + + public void Add(ECCurve curve, HashAlgorithmName hashAlgorithmName) + { + Add(new ECCurveHashPair(curve, hashAlgorithmName)); + } + } + #endregion +#endif + + #region Asset Helpers + public interface IAsset + { + void Initialize(byte[] crl, string path); + } + + /// + /// A CRL as test asset. + /// + public class CRLAsset : IAsset, IFormattable + { + public CRLAsset() { } + + public string Path; + public byte[] Crl; + + public void Initialize(byte[] crl, string path) + { + Path = path; + Crl = crl; + } + + public string ToString(string format, IFormatProvider formatProvider) + { + var file = System.IO.Path.GetFileName(Path); + return $"{file}"; + } + } + + public class CertificateAsset : IAsset, IFormattable + { + public CertificateAsset() { } + + public string Path; + public byte[] Cert; + public X509Certificate2 X509Certificate; + + public void Initialize(byte[] cert, string path) + { + Path = path; + Cert = cert; + try + { + X509Certificate = new X509Certificate2(path); + } + catch + { } + } + + public string ToString(string format, IFormatProvider formatProvider) + { + var file = System.IO.Path.GetFileName(Path); + return $"{file}"; + } + } + + /// + /// Create a collection of test assets. + /// + public class AssetCollection : List where T : IAsset, new() + { + public AssetCollection() { } + public AssetCollection(IEnumerable collection) : base(collection) { } + public AssetCollection(int capacity) : base(capacity) { } + public static AssetCollection ToAssetCollection(T[] values) + { + return values != null ? new AssetCollection(values) : new AssetCollection(); + } + + public AssetCollection(IEnumerable filelist) : base() + { + foreach (var file in filelist) + { + Add(file); + } + } + + public void Add(string path) + { + byte[] crl = File.ReadAllBytes(path); + T asset = new T(); + asset.Initialize(crl, path); + Add(asset); + } + } + #endregion + + #region TestUtils + /// + /// Test helpers. + /// + public static class TestUtils + { + + public static string[] EnumerateTestAssets(string searchPattern) + { + var assetsPath = Opc.Ua.Utils.GetAbsoluteDirectoryPath("Assets", true, false, false); + if (assetsPath != null) + { + return Directory.EnumerateFiles(assetsPath, searchPattern).ToArray(); + } + return new string[0]; + } + + public static string WriteCRL(X509CRL x509Crl) + { + var stringBuilder = new StringBuilder(); + stringBuilder.AppendLine($"Issuer: {x509Crl.Issuer}"); + stringBuilder.AppendLine($"ThisUpdate: {x509Crl.ThisUpdate}"); + stringBuilder.AppendLine($"NextUpdate: {x509Crl.NextUpdate}"); + stringBuilder.AppendLine($"RevokedCertificates:"); + foreach (var revokedCert in x509Crl.RevokedCertificates) + { + stringBuilder.Append($"{revokedCert.SerialNumber:20}, {revokedCert.RevocationDate}, "); + foreach (var entryExt in revokedCert.CrlEntryExtensions) + { + stringBuilder.Append($"{entryExt.Format(false)} "); + } + stringBuilder.AppendLine(""); + } + stringBuilder.AppendLine($"Extensions:"); + foreach (var extension in x509Crl.CrlExtensions) + { + stringBuilder.AppendLine($"{extension.Format(false)}"); + } + return stringBuilder.ToString(); + } + } + #endregion +} diff --git a/IOB-OPC-UA/UA Core Library.sln b/IOB-OPC-UA/UA Core Library.sln new file mode 100644 index 00000000..beac6b90 --- /dev/null +++ b/IOB-OPC-UA/UA Core Library.sln @@ -0,0 +1,144 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30517.126 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Core", "Stack\Opc.Ua.Core\Opc.Ua.Core.csproj", "{84FE2F0A-4192-4D2C-8097-9C396C2375E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Server", "Libraries\Opc.Ua.Server\Opc.Ua.Server.csproj", "{259094EF-B5FC-412D-8187-0ED7FF763D55}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Configuration", "Libraries\Opc.Ua.Configuration\Opc.Ua.Configuration.csproj", "{63BEB4B6-E96D-478E-B41D-B42CED6F8E7B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Client", "Libraries\Opc.Ua.Client\Opc.Ua.Client.csproj", "{DCA9C101-199F-4519-9F97-4CD22817EBE8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Gds.Client.Common", "Libraries\Opc.Ua.Gds.Client.Common\Opc.Ua.Gds.Client.Common.csproj", "{0B97D07F-629D-47DD-8975-B1F96D434130}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Gds.Server.Common", "Libraries\Opc.Ua.Gds.Server.Common\Opc.Ua.Gds.Server.Common.csproj", "{B64C8C45-7323-4353-A01C-81803F368799}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Client.ComplexTypes", "Libraries\Opc.Ua.Client.ComplexTypes\Opc.Ua.Client.ComplexTypes.csproj", "{DF09806C-8A26-49C8-8AE9-256708F35473}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Core.Tests", "Tests\Opc.Ua.Core.Tests\Opc.Ua.Core.Tests.csproj", "{FDF5247D-A162-44E9-8C56-DC8046F22AF9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Client.ComplexTypes.Tests", "Tests\Opc.Ua.Client.ComplexTypes.Tests\Opc.Ua.Client.ComplexTypes.Tests.csproj", "{4BF0FD5D-74D6-4819-9DF4-0ACF73B38221}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Gds.Tests", "Tests\Opc.Ua.Gds.Tests\Opc.Ua.Gds.Tests.csproj", "{7F726313-45CA-4571-AC8E-67DDBC196B21}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0152A569-8287-4E49-9F02-E27FD700B719}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + azure-pipelines-preview.yml = azure-pipelines-preview.yml + azure-pipelines.yml = azure-pipelines.yml + common.props = common.props + Directory.Build.props = Directory.Build.props + lgtm.yml = lgtm.yml + targets.props = targets.props + version.json = version.json + version.props = version.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nuget", "nuget", "{F69ABCC3-ED93-446B-AC70-D6AA5F047781}" + ProjectSection(SolutionItems) = preProject + nuget\Opc.Ua.Client.ComplexTypes.Symbols.nuspec = nuget\Opc.Ua.Client.ComplexTypes.Symbols.nuspec + nuget\Opc.Ua.nuspec = nuget\Opc.Ua.nuspec + nuget\Opc.Ua.Symbols.nuspec = nuget\Opc.Ua.Symbols.nuspec + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "azurepipelines", "azurepipelines", "{1C25BE72-C337-42AE-9F7C-D6B45F7B7079}" + ProjectSection(SolutionItems) = preProject + .azurepipelines\ci.yml = .azurepipelines\ci.yml + .azurepipelines\get-matrix.ps1 = .azurepipelines\get-matrix.ps1 + .azurepipelines\get-root.ps1 = .azurepipelines\get-root.ps1 + .azurepipelines\preview.yml = .azurepipelines\preview.yml + .azurepipelines\sln.yml = .azurepipelines\sln.yml + .azurepipelines\test.yml = .azurepipelines\test.yml + .azurepipelines\testcc.yml = .azurepipelines\testcc.yml + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Bindings.Https", "Stack\Opc.Ua.Bindings.Https\Opc.Ua.Bindings.Https.csproj", "{759563A2-AF35-4E7B-B813-082F047C8705}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.PubSub", "Libraries\Opc.Ua.PubSub\Opc.Ua.PubSub.csproj", "{93A5176D-AB2C-4A65-9745-ECCCEE55C689}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Security.Certificates", "Libraries\Opc.Ua.Security.Certificates\Opc.Ua.Security.Certificates.csproj", "{484FB34A-4DCF-4F63-976B-C00F0230BE28}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Security.Certificates.Tests", "Tests\Opc.Ua.Security.Certificates.Tests\Opc.Ua.Security.Certificates.Tests.csproj", "{A727180B-4AA8-4182-B35F-5B6D6CB79593}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.PubSub.Tests.Disabled", "Tests\Opc.Ua.PubSub.Tests\Opc.Ua.PubSub.Tests.Disabled.csproj", "{223B581D-8D1E-4ED5-B99B-D6775C41838D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {84FE2F0A-4192-4D2C-8097-9C396C2375E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84FE2F0A-4192-4D2C-8097-9C396C2375E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84FE2F0A-4192-4D2C-8097-9C396C2375E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84FE2F0A-4192-4D2C-8097-9C396C2375E8}.Release|Any CPU.Build.0 = Release|Any CPU + {259094EF-B5FC-412D-8187-0ED7FF763D55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {259094EF-B5FC-412D-8187-0ED7FF763D55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {259094EF-B5FC-412D-8187-0ED7FF763D55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {259094EF-B5FC-412D-8187-0ED7FF763D55}.Release|Any CPU.Build.0 = Release|Any CPU + {63BEB4B6-E96D-478E-B41D-B42CED6F8E7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63BEB4B6-E96D-478E-B41D-B42CED6F8E7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63BEB4B6-E96D-478E-B41D-B42CED6F8E7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63BEB4B6-E96D-478E-B41D-B42CED6F8E7B}.Release|Any CPU.Build.0 = Release|Any CPU + {DCA9C101-199F-4519-9F97-4CD22817EBE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DCA9C101-199F-4519-9F97-4CD22817EBE8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCA9C101-199F-4519-9F97-4CD22817EBE8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DCA9C101-199F-4519-9F97-4CD22817EBE8}.Release|Any CPU.Build.0 = Release|Any CPU + {0B97D07F-629D-47DD-8975-B1F96D434130}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B97D07F-629D-47DD-8975-B1F96D434130}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B97D07F-629D-47DD-8975-B1F96D434130}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B97D07F-629D-47DD-8975-B1F96D434130}.Release|Any CPU.Build.0 = Release|Any CPU + {B64C8C45-7323-4353-A01C-81803F368799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B64C8C45-7323-4353-A01C-81803F368799}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B64C8C45-7323-4353-A01C-81803F368799}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B64C8C45-7323-4353-A01C-81803F368799}.Release|Any CPU.Build.0 = Release|Any CPU + {DF09806C-8A26-49C8-8AE9-256708F35473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF09806C-8A26-49C8-8AE9-256708F35473}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF09806C-8A26-49C8-8AE9-256708F35473}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF09806C-8A26-49C8-8AE9-256708F35473}.Release|Any CPU.Build.0 = Release|Any CPU + {FDF5247D-A162-44E9-8C56-DC8046F22AF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDF5247D-A162-44E9-8C56-DC8046F22AF9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDF5247D-A162-44E9-8C56-DC8046F22AF9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDF5247D-A162-44E9-8C56-DC8046F22AF9}.Release|Any CPU.Build.0 = Release|Any CPU + {4BF0FD5D-74D6-4819-9DF4-0ACF73B38221}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4BF0FD5D-74D6-4819-9DF4-0ACF73B38221}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BF0FD5D-74D6-4819-9DF4-0ACF73B38221}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4BF0FD5D-74D6-4819-9DF4-0ACF73B38221}.Release|Any CPU.Build.0 = Release|Any CPU + {7F726313-45CA-4571-AC8E-67DDBC196B21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F726313-45CA-4571-AC8E-67DDBC196B21}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F726313-45CA-4571-AC8E-67DDBC196B21}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F726313-45CA-4571-AC8E-67DDBC196B21}.Release|Any CPU.Build.0 = Release|Any CPU + {759563A2-AF35-4E7B-B813-082F047C8705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {759563A2-AF35-4E7B-B813-082F047C8705}.Debug|Any CPU.Build.0 = Debug|Any CPU + {759563A2-AF35-4E7B-B813-082F047C8705}.Release|Any CPU.ActiveCfg = Release|Any CPU + {759563A2-AF35-4E7B-B813-082F047C8705}.Release|Any CPU.Build.0 = Release|Any CPU + {93A5176D-AB2C-4A65-9745-ECCCEE55C689}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {93A5176D-AB2C-4A65-9745-ECCCEE55C689}.Debug|Any CPU.Build.0 = Debug|Any CPU + {93A5176D-AB2C-4A65-9745-ECCCEE55C689}.Release|Any CPU.ActiveCfg = Release|Any CPU + {93A5176D-AB2C-4A65-9745-ECCCEE55C689}.Release|Any CPU.Build.0 = Release|Any CPU + {484FB34A-4DCF-4F63-976B-C00F0230BE28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {484FB34A-4DCF-4F63-976B-C00F0230BE28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {484FB34A-4DCF-4F63-976B-C00F0230BE28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {484FB34A-4DCF-4F63-976B-C00F0230BE28}.Release|Any CPU.Build.0 = Release|Any CPU + {A727180B-4AA8-4182-B35F-5B6D6CB79593}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A727180B-4AA8-4182-B35F-5B6D6CB79593}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A727180B-4AA8-4182-B35F-5B6D6CB79593}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A727180B-4AA8-4182-B35F-5B6D6CB79593}.Release|Any CPU.Build.0 = Release|Any CPU + {223B581D-8D1E-4ED5-B99B-D6775C41838D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {223B581D-8D1E-4ED5-B99B-D6775C41838D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {223B581D-8D1E-4ED5-B99B-D6775C41838D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {223B581D-8D1E-4ED5-B99B-D6775C41838D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F69ABCC3-ED93-446B-AC70-D6AA5F047781} = {0152A569-8287-4E49-9F02-E27FD700B719} + {1C25BE72-C337-42AE-9F7C-D6B45F7B7079} = {0152A569-8287-4E49-9F02-E27FD700B719} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EA3AA3AE-CE8A-4DF1-BED8-CA0BAFC87303} + EndGlobalSection +EndGlobal diff --git a/IOB-OPC-UA/UA Reference.sln b/IOB-OPC-UA/UA Reference.sln new file mode 100644 index 00000000..fd0340a1 --- /dev/null +++ b/IOB-OPC-UA/UA Reference.sln @@ -0,0 +1,260 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30523.141 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Server", "Libraries\Opc.Ua.Server\Opc.Ua.Server.csproj", "{6C449A1E-244E-4515-9949-A7E22012537C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{857A6774-6F49-4220-AC55-D53D60FCCB3B}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .gitattributes = .gitattributes + .gitignore = .gitignore + nuget\Opc.Ua.Client.ComplexTypes.nuspec = nuget\Opc.Ua.Client.ComplexTypes.nuspec + nuget\Opc.Ua.Client.ComplexTypes.Symbols.nuspec = nuget\Opc.Ua.Client.ComplexTypes.Symbols.nuspec + nuget\Opc.Ua.nuspec = nuget\Opc.Ua.nuspec + nuget\Opc.Ua.Symbols.nuspec = nuget\Opc.Ua.Symbols.nuspec + README.md = README.md + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Core", "Stack\Opc.Ua.Core\Opc.Ua.Core.csproj", "{D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Client", "Libraries\Opc.Ua.Client\Opc.Ua.Client.csproj", "{15100583-BFEF-431B-A1EA-1E5A843A39B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Configuration", "Libraries\Opc.Ua.Configuration\Opc.Ua.Configuration.csproj", "{A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Client.ComplexTypes", "Libraries\Opc.Ua.Client.ComplexTypes\Opc.Ua.Client.ComplexTypes.csproj", "{FE9EEB39-0698-4A19-B770-E66836CE0002}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleReferenceServer", "Applications\ConsoleReferenceServer\ConsoleReferenceServer.csproj", "{66A80316-EF8A-4D9E-9AAD-C54E372457CE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UA Client Controls", "Applications\ClientControls.Net4\UA Client Controls.csproj", "{A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UA Server Controls", "Applications\ServerControls.Net4\UA Server Controls.csproj", "{80056988-44E7-4EF4-9F59-50BCF215CB03}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reference Client", "Applications\ReferenceClient\Reference Client.csproj", "{9C1E7F15-2EE3-440D-8E17-00C38073822A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reference Server", "Applications\ReferenceServer\Reference Server.csproj", "{42EF4F25-29BF-4AB7-B403-8523694A3B36}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleReferenceClient", "Applications\ConsoleReferenceClient\ConsoleReferenceClient.csproj", "{8121879E-D2FD-4B6A-97D9-0F6CBC294411}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Bindings.Https", "Stack\Opc.Ua.Bindings.Https\Opc.Ua.Bindings.Https.csproj", "{92D98D3D-2A7D-4F4B-8C72-1A98908D0221}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.PubSub", "Libraries\Opc.Ua.PubSub\Opc.Ua.PubSub.csproj", "{930480D0-63F0-4BE5-86D5-7FD428984B2A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleReferencePublisher", "Applications\ConsoleReferencePublisher\ConsoleReferencePublisher.csproj", "{18DEEFC4-A126-40A3-82B8-E7CDFB858F26}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleReferenceSubscriber", "Applications\ConsoleReferenceSubscriber\ConsoleReferenceSubscriber.csproj", "{DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc.Ua.Security.Certificates", "Libraries\Opc.Ua.Security.Certificates\Opc.Ua.Security.Certificates.csproj", "{4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|x64.Build.0 = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Debug|x86.Build.0 = Debug|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Release|Any CPU.Build.0 = Release|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Release|x64.ActiveCfg = Release|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Release|x64.Build.0 = Release|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Release|x86.ActiveCfg = Release|Any CPU + {6C449A1E-244E-4515-9949-A7E22012537C}.Release|x86.Build.0 = Release|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Debug|x64.ActiveCfg = Debug|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Debug|x64.Build.0 = Debug|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Debug|x86.ActiveCfg = Debug|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Debug|x86.Build.0 = Debug|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Release|Any CPU.Build.0 = Release|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Release|x64.ActiveCfg = Release|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Release|x64.Build.0 = Release|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Release|x86.ActiveCfg = Release|Any CPU + {D918C0F6-39BD-4ED0-8323-E5A2EB9A85DA}.Release|x86.Build.0 = Release|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Debug|x64.ActiveCfg = Debug|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Debug|x64.Build.0 = Debug|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Debug|x86.ActiveCfg = Debug|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Debug|x86.Build.0 = Debug|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Release|Any CPU.Build.0 = Release|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Release|x64.ActiveCfg = Release|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Release|x64.Build.0 = Release|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Release|x86.ActiveCfg = Release|Any CPU + {15100583-BFEF-431B-A1EA-1E5A843A39B1}.Release|x86.Build.0 = Release|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Debug|x64.ActiveCfg = Debug|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Debug|x64.Build.0 = Debug|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Debug|x86.ActiveCfg = Debug|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Debug|x86.Build.0 = Debug|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Release|Any CPU.Build.0 = Release|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Release|x64.ActiveCfg = Release|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Release|x64.Build.0 = Release|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Release|x86.ActiveCfg = Release|Any CPU + {A39614CA-8EBE-4408-A9D2-38C7E5AE2A1D}.Release|x86.Build.0 = Release|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Debug|x64.ActiveCfg = Debug|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Debug|x64.Build.0 = Debug|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Debug|x86.ActiveCfg = Debug|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Debug|x86.Build.0 = Debug|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Release|Any CPU.Build.0 = Release|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Release|x64.ActiveCfg = Release|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Release|x64.Build.0 = Release|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Release|x86.ActiveCfg = Release|Any CPU + {FE9EEB39-0698-4A19-B770-E66836CE0002}.Release|x86.Build.0 = Release|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Debug|x64.ActiveCfg = Debug|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Debug|x64.Build.0 = Debug|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Debug|x86.ActiveCfg = Debug|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Debug|x86.Build.0 = Debug|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Release|Any CPU.Build.0 = Release|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Release|x64.ActiveCfg = Release|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Release|x64.Build.0 = Release|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Release|x86.ActiveCfg = Release|Any CPU + {66A80316-EF8A-4D9E-9AAD-C54E372457CE}.Release|x86.Build.0 = Release|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Debug|x64.ActiveCfg = Debug|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Debug|x64.Build.0 = Debug|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Debug|x86.ActiveCfg = Debug|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Debug|x86.Build.0 = Debug|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Release|Any CPU.Build.0 = Release|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Release|x64.ActiveCfg = Release|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Release|x64.Build.0 = Release|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Release|x86.ActiveCfg = Release|Any CPU + {A247D2EE-14FC-463D-A9BA-6CFF1EF22B7A}.Release|x86.Build.0 = Release|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Debug|x64.ActiveCfg = Debug|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Debug|x64.Build.0 = Debug|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Debug|x86.ActiveCfg = Debug|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Debug|x86.Build.0 = Debug|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Release|Any CPU.Build.0 = Release|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Release|x64.ActiveCfg = Release|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Release|x64.Build.0 = Release|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Release|x86.ActiveCfg = Release|Any CPU + {80056988-44E7-4EF4-9F59-50BCF215CB03}.Release|x86.Build.0 = Release|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Debug|x64.Build.0 = Debug|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Debug|x86.Build.0 = Debug|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Release|Any CPU.Build.0 = Release|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Release|x64.ActiveCfg = Release|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Release|x64.Build.0 = Release|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Release|x86.ActiveCfg = Release|Any CPU + {9C1E7F15-2EE3-440D-8E17-00C38073822A}.Release|x86.Build.0 = Release|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Debug|x64.ActiveCfg = Debug|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Debug|x64.Build.0 = Debug|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Debug|x86.ActiveCfg = Debug|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Debug|x86.Build.0 = Debug|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Release|Any CPU.Build.0 = Release|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Release|x64.ActiveCfg = Release|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Release|x64.Build.0 = Release|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Release|x86.ActiveCfg = Release|Any CPU + {42EF4F25-29BF-4AB7-B403-8523694A3B36}.Release|x86.Build.0 = Release|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Debug|x64.ActiveCfg = Debug|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Debug|x64.Build.0 = Debug|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Debug|x86.ActiveCfg = Debug|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Debug|x86.Build.0 = Debug|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Release|Any CPU.Build.0 = Release|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Release|x64.ActiveCfg = Release|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Release|x64.Build.0 = Release|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Release|x86.ActiveCfg = Release|Any CPU + {8121879E-D2FD-4B6A-97D9-0F6CBC294411}.Release|x86.Build.0 = Release|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Debug|x64.ActiveCfg = Debug|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Debug|x64.Build.0 = Debug|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Debug|x86.ActiveCfg = Debug|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Debug|x86.Build.0 = Debug|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Release|Any CPU.Build.0 = Release|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Release|x64.ActiveCfg = Release|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Release|x64.Build.0 = Release|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Release|x86.ActiveCfg = Release|Any CPU + {92D98D3D-2A7D-4F4B-8C72-1A98908D0221}.Release|x86.Build.0 = Release|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Debug|x64.ActiveCfg = Debug|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Debug|x64.Build.0 = Debug|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Debug|x86.ActiveCfg = Debug|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Debug|x86.Build.0 = Debug|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Release|Any CPU.Build.0 = Release|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Release|x64.ActiveCfg = Release|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Release|x64.Build.0 = Release|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Release|x86.ActiveCfg = Release|Any CPU + {930480D0-63F0-4BE5-86D5-7FD428984B2A}.Release|x86.Build.0 = Release|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Debug|x64.ActiveCfg = Debug|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Debug|x64.Build.0 = Debug|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Debug|x86.ActiveCfg = Debug|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Debug|x86.Build.0 = Debug|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Release|Any CPU.Build.0 = Release|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Release|x64.ActiveCfg = Release|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Release|x64.Build.0 = Release|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Release|x86.ActiveCfg = Release|Any CPU + {18DEEFC4-A126-40A3-82B8-E7CDFB858F26}.Release|x86.Build.0 = Release|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Debug|x64.ActiveCfg = Debug|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Debug|x64.Build.0 = Debug|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Debug|x86.ActiveCfg = Debug|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Debug|x86.Build.0 = Debug|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Release|Any CPU.Build.0 = Release|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Release|x64.ActiveCfg = Release|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Release|x64.Build.0 = Release|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Release|x86.ActiveCfg = Release|Any CPU + {DF0E5286-1EB1-4C3C-8E37-C3C865B6F6D8}.Release|x86.Build.0 = Release|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Debug|x64.Build.0 = Debug|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Debug|x86.Build.0 = Debug|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Release|Any CPU.Build.0 = Release|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Release|x64.ActiveCfg = Release|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Release|x64.Build.0 = Release|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Release|x86.ActiveCfg = Release|Any CPU + {4B72937F-5A57-4CEA-B9FE-B4C45CF7B284}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {33FA5BCB-C827-4D44-AECF-F51342DFE64A} + EndGlobalSection +EndGlobal diff --git a/IOB-OPC-UA/appveyor.yml b/IOB-OPC-UA/appveyor.yml new file mode 100644 index 00000000..982d83ba --- /dev/null +++ b/IOB-OPC-UA/appveyor.yml @@ -0,0 +1,91 @@ + +#---------------------------------# +# general configuration # +#---------------------------------# + +# version format +version: 1.4.364.{build}-{branch} + + +# branches to build +branches: + # blacklist + except: + - gh-pages + +#---------------------------------# +# environment configuration # +#---------------------------------# + +# Build worker image (VM template) +image: Visual Studio 2019 + +# scripts that are called at very beginning, before repo cloning +init: + - git config --global core.autocrlf input + +# clone directory +clone_folder: c:\projects\UA-.NetStandard + +environment: + matrix: + - solution_name: "UA Core Library.sln" + test_name: "void" + param: "" + - solution_name: "UA Reference.sln" + test_name: "void" + param: "" + - solution_name: "UA Reference.sln" + test_name: "void" + param: "/p:NoHttps=true" + +# this is how to allow failing jobs in the matrix +matrix: + fast_finish: false # set this flag to immediately finish build once one of the jobs fails. + +# scripts to run before build +before_build: + - nuget restore "%solution_name%" + +# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services) +before_package: + +# scripts to run after build +after_build: + +# to run your custom scripts instead of automatic MSBuild +build_script: + - msbuild "%solution_name%" %param% /p:Configuration=Debug /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + - msbuild "%solution_name%" %param% /p:Configuration=Release /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + +# test +test: + +test_script: + - if NOT "%test_name%" == "void" ( dotnet test "%test_name%" ) +# TODO nunit3-console v3.6 cannot load csproj, enable when newer version is available +# - if NOT "%test_name%" == "void" ( nunit3-console "%test_name%" --result=./myresults.xml;format=AppVeyor ) +# - $wc = New-Object 'System.Net.WebClient' +# - $wc.UploadFile("https://ci.appveyor.com/api/testresults/nunit3/$($env:APPVEYOR_JOB_ID)", (Resolve-Path ./myresults.xml)) + +# build cache to preserve files/folders between builds +cache: + - packages -> **\packages.config + +#---------------------------------# +# global handlers # +#---------------------------------# + +# on successful build +on_success: + - echo on_success + +# on build failure +on_failure: + - echo on_failure + +# after build failure or success +on_finish: + - echo on_finish + + diff --git a/IOB-OPC-UA/azure-pipelines-preview.yml b/IOB-OPC-UA/azure-pipelines-preview.yml new file mode 100644 index 00000000..bae717d0 --- /dev/null +++ b/IOB-OPC-UA/azure-pipelines-preview.yml @@ -0,0 +1,27 @@ +# Azure pipeline +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +pr: none + +trigger: + branches: + include: + - master + paths: + include: + - 'Stack/' + - 'Libraries/' + +stages: +- stage: nugetpreview + displayName: 'Push Nuget Preview' + jobs: + - template: .azurepipelines/preview.yml + parameters: + upload: ${{ ne(variables['Build.Reason'], 'PullRequest') }} + config: 'Release' + - template: .azurepipelines/preview.yml + parameters: + upload: ${{ ne(variables['Build.Reason'], 'PullRequest') }} + config: 'Debug' diff --git a/IOB-OPC-UA/azure-pipelines.yml b/IOB-OPC-UA/azure-pipelines.yml new file mode 100644 index 00000000..114978e2 --- /dev/null +++ b/IOB-OPC-UA/azure-pipelines.yml @@ -0,0 +1,67 @@ +# Azure pipeline +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +pr: + autoCancel: 'true' + branches: + include: + - '*' + paths: + include: + - '*' + exclude: + - 'Docs/*' + - 'README.md' + +stages: +- stage: build + displayName: 'Build .Net Core Samples' + jobs: + - template: .azurepipelines/ci.yml +- stage: buildnohttps + dependsOn: [] + displayName: 'Build NoHttps .Net Core Samples' + jobs: + - template: .azurepipelines/ci.yml + parameters: + buildoption: '-p:NoHttps=true' + agents: '@{ linux = "ubuntu-18.04" }' +- stage: solutions + dependsOn: [] + displayName: 'Build Solutions' + jobs: + - template: .azurepipelines/sln.yml +- stage: testrelease + dependsOn: [] + displayName: 'Test Core and SDK Release' + jobs: + - template: .azurepipelines/test.yml + parameters: + configuration: Release + framework: net462 + agents: '@{ windows = "windows-2019" }' + jobnamesuffix: net462 + - template: .azurepipelines/test.yml + parameters: + framework: netcoreapp2.1 + configuration: Release + - template: .azurepipelines/test.yml + parameters: + configuration: Release + framework: netcoreapp3.1 + agents: '@{ windows = "windows-2019"; mac = "macOS-10.15" }' + jobnamesuffix: core3 + - template: .azurepipelines/testcc.yml + parameters: + configuration: Release + poolImage: 'ubuntu-18.04' + jobnamesuffix: netcore31 +- stage: testdebug + dependsOn: [] + displayName: 'Test Core and SDK Debug' + jobs: + - template: .azurepipelines/test.yml + parameters: + framework: netcoreapp3.1 + configuration: Debug diff --git a/IOB-OPC-UA/common.props b/IOB-OPC-UA/common.props new file mode 100644 index 00000000..bb345223 --- /dev/null +++ b/IOB-OPC-UA/common.props @@ -0,0 +1,48 @@ + + + OPC UA .NET Standard Library + https://github.com/OPCFoundation/UA-.NETStandard + 1.04.360 + preview-$([System.DateTime]::Now.ToString("yyyyMMdd")) + Copyright © 2004-2020 OPC Foundation, Inc + OPC Foundation + OPC Foundation + NU5125;RCS1138;RCS1139 + en-US + true + false + + + + + + images/logo.jpg + $(RepositoryUrl) + + licenses/LICENSE.txt + true + $(RepositoryUrl)/releases + OPCFoundation OPC-UA netstandard ios linux dotnet net netcore uwp + + + + + + + + + + + + + + true + + + + true + snupkg + true + true + + diff --git a/IOB-OPC-UA/lgtm.yml b/IOB-OPC-UA/lgtm.yml new file mode 100644 index 00000000..be65dd93 --- /dev/null +++ b/IOB-OPC-UA/lgtm.yml @@ -0,0 +1,5 @@ +extraction: + csharp: + index: + buildless: true + nuget_restore: false diff --git a/IOB-OPC-UA/nuget/Opc.Ua.Client.ComplexTypes.Symbols.nuspec b/IOB-OPC-UA/nuget/Opc.Ua.Client.ComplexTypes.Symbols.nuspec new file mode 100644 index 00000000..39ccf48c --- /dev/null +++ b/IOB-OPC-UA/nuget/Opc.Ua.Client.ComplexTypes.Symbols.nuspec @@ -0,0 +1,26 @@ + + + + OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes.Symbols + 1.04.360.0 + OPC UA .Net Standard Complex Type Library Symbols + This package contains the OPC UA complex type client debug version and is targeting the .NET Standard Library. + OPC Foundation + en-US + https://github.com/OPCFoundation/UA-.NETStandard + images/logo.jpg + licenses/LICENSE.txt + + OPCFoundation OPC-UA netstandard ios linux dotnet net netcore uwp + + + + + + + + + + + + diff --git a/IOB-OPC-UA/nuget/Opc.Ua.Symbols.nuspec b/IOB-OPC-UA/nuget/Opc.Ua.Symbols.nuspec new file mode 100644 index 00000000..ef365897 --- /dev/null +++ b/IOB-OPC-UA/nuget/Opc.Ua.Symbols.nuspec @@ -0,0 +1,29 @@ + + + + OPCFoundation.NetStandard.Opc.Ua.Symbols + 1.04.360.0 + OPC UA .Net Standard Library Symbols + This package contains the OPC UA reference implementation debug version and is targeting the .NET Standard Library. + OPC Foundation + en-US + https://github.com/OPCFoundation/UA-.NETStandard + images/logo.jpg + licenses/LICENSE.txt + + OPCFoundation OPC-UA netstandard ios linux dotnet net netcore uwp + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/nuget/Opc.Ua.nuspec b/IOB-OPC-UA/nuget/Opc.Ua.nuspec new file mode 100644 index 00000000..02733abe --- /dev/null +++ b/IOB-OPC-UA/nuget/Opc.Ua.nuspec @@ -0,0 +1,29 @@ + + + + OPCFoundation.NetStandard.Opc.Ua + 1.04.360.0 + OPC UA .NET Standard Library + This package contains the OPC UA reference implementation and is targeting the .NET Standard Library. + OPC Foundation + en-US + https://github.com/OPCFoundation/UA-.NETStandard + images/logo.jpg + licenses/LICENSE.txt + + OPCFoundation OPC-UA netstandard ios linux dotnet net netcore uwp + + + + + + + + + + + + + + + diff --git a/IOB-OPC-UA/nuget/logo.jpg b/IOB-OPC-UA/nuget/logo.jpg new file mode 100644 index 00000000..0fc0d60e Binary files /dev/null and b/IOB-OPC-UA/nuget/logo.jpg differ diff --git a/IOB-OPC-UA/targets.props b/IOB-OPC-UA/targets.props new file mode 100644 index 00000000..84145322 --- /dev/null +++ b/IOB-OPC-UA/targets.props @@ -0,0 +1,22 @@ + + + + + net462;netcoreapp3.1 + netcoreapp3.1 + net462;netcoreapp2.1;netcoreapp3.1 + net462;netstandard2.0;netstandard2.1 + net462;netcoreapp2.1;netstandard2.1 + + + + + net462;netcoreapp2.1 + netcoreapp2.1 + netcoreapp2.1 + net462;netstandard2.0 + net462;netcoreapp2.1 + + + + diff --git a/IOB-OPC-UA/version.json b/IOB-OPC-UA/version.json new file mode 100644 index 00000000..4ade16bc --- /dev/null +++ b/IOB-OPC-UA/version.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", + "version": "1.4.365-preview", + "versionHeightOffset": 0, + "nugetPackageVersion": { + "semVer": 2 + }, + "publicReleaseRefSpec": [ + "^refs/heads/master$", + "^refs/heads/release/\\d+\\.\\d+\\.\\d+" + ], + "cloudBuild": { + "setVersionVariables": true, + "buildNumber": { + "enabled": true, + "includeCommitId": { + "when": "nonPublicReleaseOnly", + "where": "buildMetadata" + } + } + } +} \ No newline at end of file diff --git a/IOB-OPC-UA/version.props b/IOB-OPC-UA/version.props new file mode 100644 index 00000000..684ae94b --- /dev/null +++ b/IOB-OPC-UA/version.props @@ -0,0 +1,18 @@ + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + $(NBGV_Version)$(NBGV_PrereleaseVersion) + $(NBGV_SimpleVersion) + $(NBGV_VersionRevision)$(NBGV_PrereleaseVersion) + $(NBGV_SimpleVersion) + $(NBGV_Version) + $(NBGV_Version)$(NBGV_PrereleaseVersion) + + + diff --git a/IOB-WIN/DATA/CONF/GT575.ini b/IOB-WIN/DATA/CONF/GT575.ini new file mode 100644 index 00000000..a44e1003 --- /dev/null +++ b/IOB-WIN/DATA/CONF/GT575.ini @@ -0,0 +1,76 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio FANUC Doosan Overmach +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=Doosan Overmach +MODEL=GT575 + +[CNC] +IP=192.168.1.46 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y3.2 | Yellow:Y3.1 | Green Y3.0 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO Y1.2 (X12.4) | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y3.0 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y3.2 +BIT4=Y3.1 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN/DATA/CONF/GT578.ini b/IOB-WIN/DATA/CONF/GT578.ini new file mode 100644 index 00000000..4e071cf2 --- /dev/null +++ b/IOB-WIN/DATA/CONF/GT578.ini @@ -0,0 +1,76 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio CMF 645 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=CMF +MODEL=T91 + +[CNC] +IP=192.168.0.133 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y1.3 | Yellow:Y0.6 | Green Y0.5 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO Y1.2 (X12.4) | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y0.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y1.3 +BIT4=Y0.6 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN/DATA/CONF/GT579.ini b/IOB-WIN/DATA/CONF/GT579.ini new file mode 100644 index 00000000..4c29b41f --- /dev/null +++ b/IOB-WIN/DATA/CONF/GT579.ini @@ -0,0 +1,76 @@ +;Configurazione IOB-WIN +[IOB] +;Tornio CMF 646 +CNCTYPE=FANUC +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=CMF +MODEL=T91 + +[CNC] +IP=192.168.0.145 +PORT=8193 +GETPRGNAME=true + +[SERVER] +MPIP=http://192.168.1.64 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +; Red: Y1.3 | Yellow:Y0.6 | Green Y0.5 | Apertura Auto porta: X8.0 (X8.1) | Emergenza X8.4 | MODO AUTO Y1.2 (X12.4) | Contapezzi Y0.1 +;BIT0=CONN +BIT1=Y0.5 +BIT2=PZCOUNT.PAR.6711 +BIT3=Y1.3 +BIT4=Y0.6 +BIT5=X8.4 +AREAD_START=0 +AREAD_SIZE=9999 +AREAG_START=0 +AREAG_SIZE=0 +AREAR_START=0 +AREAR_SIZE=64 +AREAX_START=0 +AREAX_SIZE=16 +AREAY_START=0 +AREAY_SIZE=16 +PAR_START=6711 +PAR_SIZE=3 + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +; attenzione memoria sempre base BYTE (1604 DW --> 6416...) +;PZCOUNT_MODE=BIT +PZCOUNT_MODE=STD.PAR.6711 +;PZ_CAD_MADDR=1602; cad +;PZ_REQ_MADDR=1603; pz richiesti (DW) +;PZ_DONE_MADDR=1604; pz fatti +;PZ_GTOT_MADDR=1605; pz tot macchina +;gestione invio pezzi in blocco +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=5 +MAX_SEND_PZC_BLOCK=100 + +[BRANCH] +NAME=develop \ No newline at end of file diff --git a/IOB-WIN/IobGeneric.cs b/IOB-WIN/IobGeneric.cs index 1f2fa21f..edd1514f 100644 --- a/IOB-WIN/IobGeneric.cs +++ b/IOB-WIN/IobGeneric.cs @@ -2503,7 +2503,7 @@ namespace IOB_WIN } /// - /// Metodo da overridare x scrivere DAVVERO i aprametri sul PLC + /// Metodo da overridare x scrivere DAVVERO i parametri sul PLC /// /// protected virtual void plcWriteParams(List updatedPar) diff --git a/IOB-WIN/IobSimula.cs b/IOB-WIN/IobSimula.cs index bb1b1adf..21cfb71d 100644 --- a/IOB-WIN/IobSimula.cs +++ b/IOB-WIN/IobSimula.cs @@ -518,6 +518,18 @@ namespace IOB_WIN #endregion Private Methods + #region Protected Methods + + /// + /// Salvo valori PLC + /// + /// + protected override void plcWriteParams(List updatedPar) + { + } + + #endregion Protected Methods + #region Public Methods /// @@ -543,14 +555,18 @@ namespace IOB_WIN switch (tName) { case taskType.setArt: + case taskType.setComm: + case taskType.setProg: + case taskType.setPzComm: + memMap.mMapWrite[item.Key].value = item.Value; + taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | UPDATED memMap.mMapWrite"; + break; + case taskType.nihil: case taskType.fixStopSetup: case taskType.forceResetPzCount: case taskType.sendWatchDogMes2Plc: - case taskType.setComm: case taskType.setParameter: - case taskType.setProg: - case taskType.setPzComm: case taskType.startSetup: case taskType.stopSetup: taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";